ARM NEON汇编程序错误:“指令不能有条件”

时间:2011-08-10 00:31:17

标签: xcode math assembly arm neon

根据arm info center vadd可以条件执行然而当我尝试

vaddeq.f32 d0,d0,d1

Xcode返回

65:instruction cannot be conditional -- vaddeq.f32 d0,d0,d1

我注意到的一件事是,似乎只有NEON指令才会出现此错误。 VFP指令不会产生这些错误。

我是否需要设置编译器标志才能启用NEON条件指令?

3 个答案:

答案 0 :(得分:5)

ARM体系结构参考手册说:

 An ARM Advanced SIMD VADD instruction must be unconditional.

即,如果您处于ARM模式,那些指令不是有条件的。如果将它们放在IT块中,您可以在Thumb-2中有条件地使用它们。

  .syntax unified
  .code 16
  .globl _foo
_foo:
  cmp r0, #0
  it eq
  vaddeq.f32 d0, d0, d1
  bx lr

答案 1 :(得分:1)

条件NEON指令在ARM模式下不可用的原因是它们使用条件字段设置为NV(从不)的编码。您需要使用条件分支或(更好)重写代码以不直接使用比较结果 - 例如根据结果​​将寄存器设置为0或1,并在进一步操作中使用其值。

答案 2 :(得分:1)

只能有条件地执行NEON和VFP共享的指令。

(例如vldmia。)

对我而言,有些情况下,条件执行可以让我免于一些轻微的麻烦,但总的来说,你不会那么严重。

仔细查看NEON逻辑和比较操作。它们很好地表明了NEON应该如何编程。

CYA。