加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

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

发布时间:2020-12-14 02:45:36 所属栏目:Windows 来源:网络整理
导读:我试图在一个.s文件中调用一个在ARM NEON程序集中编码的函数,如下所示: AREA myfunction,code,readonly,ARM global fun align 4fun push {r4,r5,r6,r7,lr} add r7,sp,#12 push {r8,r10,r11} sub r4,#64 bic r4,r4,#15 mov sp,r4 vst1.64 {d8,d9,d10,d11},[r
我试图在一个.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,#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上

解决方法

默认情况下,VS 2012会为Windows RT和Windows Phone 8生成缩略图代码,因此您可能会因从拇指代码调用arm代码而导致错误.您有两种选择:
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”包含以查找.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读