【发布时间】:2012-07-31 19:05:38
【问题描述】:
在 Xcode 4.4 上,我在最后一个 LLVM 编译器 (4.0) 上编译内联汇编时遇到了一些问题。
在我的内联汇编代码中,每次调用“fldmias”都像:
asm volatile(
"fldmias %2, {s4-s19} \n\t"
...
)
给我这个错误:
内联汇编问题: 指令'fldmia'不能设置标志,但指定了's'后缀
相同的代码适用于 LLVM GCC 4.2。也许每个编译器的配置之间存在一些差异,但我没有找到任何东西。
谢谢。
【问题讨论】:
-
试试
fldmsia可能吗?助记符可能不匹配。我的手册在这里将寻址模式放在中间,就像您拥有的那样,但我可以理解为什么实施者会选择只在最后接受它们。 -
实际上,我认为使用 UAL 阅读了有关 clang 的一些内容 - 您是否尝试过 UAL 等价物?我这里的书说那是
VLDMIA.32,我想。 -
无效指令,s在中间,s在这里是用来设置精度的(这里是单精度),可能编译器将此字母识别为条件后缀...
-
它肯定将
s标识为“设置标志”后缀,例如adds或subs。我可以看出这会如何混淆它,因为寻址模式位于指令的中间。 UAL 也不起作用吗?我会尝试在这里制作一个测试文件,看看我想出了什么。 -
是的,它与 UAL 等效项一起使用,因此 VLDMIA.32 代替了 FLDMIAS。谢谢你的帮助,卡尔。
标签: assembly clang inline-assembly neon llvm-4.0