Windows Phone 8上的ARM NEON程序集无法正常工作

我试图调用一个在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] [....] 

我正在像这样assembly它:

 armasm.exe -32 func.s func.obj 

不幸的是,这不起作用,当我尝试调用函数时,我得到了非法的指令exception。 当我使用dumpbin.exe反汇编.obj时,尽pipe程序集中有ARM指令(请参见上面的代码),但似乎是将其拆分为Thumb代码。

我怀疑这个函数是在Thumb模式下被调用的,并且所有的函数默认在Windows上被认为是Thumb模式。 虽然看不到任何信息。

有人知道这里发生了什么?

编辑:这也发生在Microsoft Surface上

Solutions Collecting From Web of "Windows Phone 8上的ARM NEON程序集无法正常工作"

默认情况下,VS 2012会为Windows RT和Windows Phone 8生成拇指代码,所以您得到的错误可能是由从拇指代码调用代码来引起的。 你有两个选择:
1.在调用你的函数(你可以使用BX asm指令)之前,从拇指模式切换到手臂模式,或者
2.您可以尝试使用ARM / NEON内在函数在C ++中重写您的NEON代码 – 它们受VS 2012支持。只需包含“arm_neon.h”即可完成。
对于ARM内部函数参考,请查看以下链接: http : //msdn.microsoft.com/en-us/library/hh875058.aspx
对于NEON内在函数参考,请查看以下链接: http : //infocenter.arm.com/help/topic/com.arm.doc.dui0491c/DUI0491C_arm_compiler_reference.pdf

这些来自上面链接的NEON内部函数一般都支持VS 2012,可能会有一些细微差别 – 如果不确定,请查看“arm_neon.h”include来查找。

您可以用Thumb模式下的bx指令来启动汇编代码,并简单地分支到同一个源文件中的ARM部分。

你不必在最后切换回Thumb模式,因为你可以完成bx中的ARM功能,或者弹出{pc}来自动切换。

我的回答是WAAAAAAY晚了,但是我真的好奇,如果它在WP上工作。 (我没有)