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