【问题标题】:Inline assembly issue with LLVM 4.0LLVM 4.0 的内联汇编问题
【发布时间】: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 标识为“设置标志”后缀,例如addssubs。我可以看出这会如何混淆它,因为寻址模式位于指令的中间。 UAL 也不起作用吗?我会尝试在这里制作一个测试文件,看看我想出了什么。
  • 是的,它与 UAL 等效项一起使用,因此 VLDMIA.32 代替了 FLDMIAS。谢谢你的帮助,卡尔。

标签: assembly clang inline-assembly neon llvm-4.0


【解决方案1】:

在上面的 cmets 中发现,这里的答案是使用 UAL 等效指令,在这种情况下是:

VLDMIA.32 %2, {s4-s19}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-06
    • 2014-05-21
    • 1970-01-01
    • 2012-04-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多