次のような .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 を逆アセンブルすると、アセンブリに ARM ディレクティブがあるにもかかわらず、Thumb コードのように逆アセンブルしているように見えます (上記のコードを参照)。
関数が Thumb モードで呼び出されていると思われます。Windows では、すべての関数がデフォルトで Thumb モードであると想定されています。ただし、これに関する情報を見つけることはできません。
ここで何が起こっているか知っている人はいますか?
編集:これはMicrosoft Surfaceでも発生します