0

我试图在 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
4

0 回答 0