2

根据手臂信息中心vadd 可以有条件地执行但是当我尝试

vaddeq.f32 d0,d0,d1

Xcode 返回

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

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

是否必须设置编译器标志才能启用 NEON 条件指令?

4

3 回答 3

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
于 2011-08-10T03:18:41.290 回答
1

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

于 2011-08-22T10:17:37.350 回答
1

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

(例如 vldmia。)

对我来说,在某些情况下,条件执行可以让我免于一些小麻烦,但总的来说,你不会那么需要它。

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

赛亚。

于 2011-11-01T14:11:31.437 回答