我正在尝试在 .s 文件中调用在 ARM NEON 程序集中编码的函数,如下所示:
AREA myfunction, code, readonly, ARM
global fun
align 4
fun
push {r4, r5, r6, r7, lr}
add r7, sp, #12
push {r8, r10, r11}
sub r4, sp, #64
bic r4, r4, #15
mov sp, r4
vst1.64 {d8, d9, d10, d11}, [r4]!
vst1.64 {d12, d13, d14, d15}, [r4]
[....]
我正在组装它:
armasm.exe -32 func.s func.obj
不幸的是,这不起作用,当我尝试调用该函数时,我遇到了非法指令异常。当我使用 dumpbin.exe 反汇编 .obj 时,它似乎正在反汇编,就好像它是 Thumb 代码一样,尽管程序集中有 ARM 指令(参见上面的代码)。
我怀疑该函数是在 Thumb 模式下调用的,并且默认情况下,所有函数在 Windows 上都假定为 Thumb 模式。虽然看不到有关此的任何信息。
有谁知道这里发生了什么?
编辑:这也发生在 Microsoft Surface 上