根据arm info center vadd可以条件执行然而当我尝试
vaddeq.f32 d0,d0,d1
Xcode返回
65:instruction cannot be conditional -- vaddeq.f32 d0,d0,d1
我注意到的一件事是,似乎只有NEON指令才会出现此错误。 VFP指令不会产生这些错误。
我是否需要设置编译器标志才能启用NEON条件指令?
答案 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。