技术支持好:
在文档中说过
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 到底可不可以条件执行?
已转发相关工程师,请等待工程师回答。
在 ARM 状态下,除 VFP 和 NEON 公用的指令之外,不能使用条件代码来控制
NEON 指令的执行。
在 Thumb-2 处理器上的 Thumb 状态下,你可以借助IT指令实现NEON指令的条件执行 (在NEON 指令上设置条件代码)。
。 有关详细信息,请参考IT指令的用法。
下图中显示的是 VST 和VLD 是VFP和NEON 共用的指令啊,这个怎么解释啊。
你的文档原文在哪里?
在ARM® Compiler toolchain Version 5.02 Assembler Reference 文档中
Shared NEON and VFP instructions 列表中不包含vst指令,只有vstr/vstm指令
我使用的是 NEON™ Version: 1.0 Programmer’s Guide,
这个文档是以下这个链接中 joeyxu 给我的一个链接NEON Programmer’s Guide。
cortex-A 系列汇编问题
C.1 List of all NEON and VFP instructions 小结中的Table C-1 NEON (Advanced SIMD) and VFP instructions,你可以查看
你好,
不知道你看了我说的那个文档吗?有什么结论吗
你好,工程师现在不在办公室,我帮你联系一下,请耐心等候工程师回复
>语法中有 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