Я пытаюсь вызвать функцию, закодированную в сборке ARM NEON, в файле .s, который выглядит так:
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, и предполагается, что все функции по умолчанию находятся в режиме Thumb в Windows. Однако не могу найти никакой информации об этом.
Кто-нибудь знает, что здесь происходит?
РЕДАКТИРОВАТЬ: это происходит и на Microsoft Surface.