根据手臂信息中心vadd 可以有条件地执行但是当我尝试
vaddeq.f32 d0,d0,d1
Xcode 返回
65:instruction cannot be conditional -- vaddeq.f32 d0,d0,d1
我注意到的一件事是,似乎只有 NEON 指令会出现此错误。VFP 指令不会产生这些错误。
是否必须设置编译器标志才能启用 NEON 条件指令?
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
条件 NEON 指令在 ARM 模式下不可用的原因是它们使用条件字段设置为 NV(从不)的编码。您需要使用条件分支或(更好地)重写代码以不直接使用比较结果 - 例如,根据结果将寄存器设置为 0 或 1,并在进一步操作中使用其值。
只有 NEON 和 VFP 共享的指令才能有条件地执行。
(例如 vldmia。)
对我来说,在某些情况下,条件执行可以让我免于一些小麻烦,但总的来说,你不会那么需要它。
仔细查看 NEON 逻辑和比较操作。它们很好地表明了 NEON 应该如何编程。
赛亚。