我开始学习arm asm。现在我想知道指令vmull.u8 q7,d0,d4中的最后一个“l”是什么意思?我发现这里解释的指令VMUL{cond}和Condition codes解释了可用的不同条件,但由于vmull中的最后一个“l”不在列表中,我不明白它是什么意思。
答案 0 :(得分:4)
“长”
乘以两个定点数会得到长度加倍的“长”结果,因此需要两倍的寄存器宽度来存储结果。
所以s8 x s8 => s16结果。
技术上要求任何固定点乘法以完美的精度存储结果,因为将两个“n”位数乘以(2 * n) - 1
位需要VMULL
用于带符号数(2 * n)
对于未签名的。但有时在算术中你只能操作较小的整数而你不关心高位,所以你可以使用VMUL
,它更快,需要更少的寄存器。有时在信号处理中,如果你表示一些十进制格式(有时称为"Q" numbers),例如Q15使用16位有符号数(s16),那么你实际上不需要 lower 比特,NEON也提供VQDMLH
。无论你需要什么,NEON都可以做到。
答案 1 :(得分:0)
可选条件代码主要适用于Thumb模式。在ARM模式下,唯一可有条件执行的NEON指令是与VFP共享的指令。 (例如VLDM)
显然您正在阅读最新版本的ARM的NEON指南(5.03)
由于某些未知原因,它缺少所有那些非常重要的IMO长,宽和窄的变体。抓住所有变种列出的首选版本。