我试图在 C++ 代码中执行一个汇编函数,但我得到的只是一个分段错误。
手臂组装功能如下:
.text
.syntax unified
.global function
function:
loop:
pld [r0, #192]
vld2.32 {q8, q9}, [r0]!
vld2.32 {q10, q11}, [r0]!
pld [r0, #192]
vld2.32 {q12, q13}, [r0]!
vld2.32 {q14, q15}, [r0]!
vcgt.u32 q8, q8, q9
vcgt.u32 q9, q10, q11
vcgt.u32 q10, q12, q13
vcgt.u32 q11, q14, q15
pld [r0, #192]
vld2.32 {q12, q13}, [r0]!
vld2.32 {q14, q15}, [r0]!
pld [r0, #192]
vld2.32 {q0, q1}, [r0]!
vld2.32 {q2, q3}, [r0]!
vcgt.u32 q12, q12, q13
vcgt.u32 q13, q14, q15
vcgt.u32 q14, q0, q1
vcgt.u32 q15, q2, q3
vsli.32 q8, q10, #8
vsli.32 q9, q11, #8
vsli.32 q8, q12, #16
vsli.32 q9, q13, #16
vsli.32 q8, q14, #24
vsli.32 q9, q15, #24
vsli.8 d16, d17, #2
vsli.8 d18, d19, #2
vsli.8 d16, d18, #4
vbic.i16 d16, #0xaa00
vshr.u64 d17, d16, #31
vorr d16, d16, d17
vst1.32 {d16[0]}, [r1]!
subs r2, r2, #32
bgt loop
bx lr
从 C++ 中,我取消了这样的函数:
extern "C" {void function(unsigned int * pPair, unsigned int * ptr2, unsigned int count);}
我这样称呼它:
function(tmpVecX, ptr2, noShortPairs_);
我用g++编译,编译没问题。我认为问题在于传递参数。你能帮我理解什么是错的吗?
汇编中来自 C 的调用:
1c8c: f107 030c add.w r3, r7, #12
1c90: 681b ldr r3, [r3, #0]
1c92: 6adb ldr r3, [r3, #44] ; 0x2c
1c94: f107 0158 add.w r1, r7, #88 ; 0x58
1c98: f107 029c add.w r2, r7, #156 ; 0x9c
1c9c: 6808 ldr r0, [r1, #0]
1c9e: 6811 ldr r1, [r2, #0]
1ca0: 461a mov r2, r3
1ca2: f7ff fffe bl 0 <function>
1ca2: R_ARM_THM_CALL function