技术支持好:
在文档中说过
The instructions that can be conditional have an optional condition code, shown in syntax
descriptions as {cond}. Table 3-2shows the condition codes that you can use.
当我使用ARM 指令
subs r3, r3, #1
strpl r3, [r0]!
汇编编译正常,可以条件执行,但是我现在想用neon汇编,vld和vst 使用条件执行时,比如vst1pl.64,编译失败,编译器输出错误说是该指令不可条件执行 Error: instruction cannot be conditional -- `vst1pl.64 {d0},[r0]!';
查看的neon编程手册中说的是可以的,以下是手册中的语法:
Syntax
Vopn{cond}.datatype list, [Rn{@align}]{!}
Vopn{cond}.datatype list, [Rn{@align}], Rm
语法中有 cond,说明是可以条件执行的。 我现在不清楚到底neon的 vstn 和vldn 到底可不可以条件执行?
>语法中有 cond,说明是可以条件执行的。 我现在不清楚到底neon的 vstn 和vldn 到底可不可以条件执行?
NEON的这些指令可以条件执行,但必须和IT指令一起用。
以下是解释:
上图是neon programmers guide的3.2节。它只是说了NEON指令可以使用Condition,但是是和IT指令一起用的。
一个例子:
void foo(void) { asm ("cmp r0, #0\n" "ite lo\n" "vld1lo.s64 {d0}, [r0]!\n" "vld1hs.s64 {d0}, [r1]!":::"r0", "d0", "r1", "memory"); }
把它保存为test.c,用以下命令编译可以成功编译它:
arm-linux-androideabi-gcc -march=armv7-a -mfpu=neon -mthumb -mfloat-abi=softfp -c test.c