ARM 中的 VMNNM 指令

Posted

技术标签:

【中文标题】ARM 中的 VMNNM 指令【英文标题】:VMINNM instruction in ARM 【发布时间】:2018-06-22 10:32:51 【问题描述】:

我想知道vminnm 的工作原理。由于伪代码有点不清楚,我无法理解该指令的确切功能。

vminnm.f32  d3, d5, d13

在哪里

d5  = 0xffd5432100000000
d13 = 0x7ff0056000000000

结果:

d3  = 0x7fc0000000000000

我们是如何得出这个结果的?

【问题讨论】:

根据文档infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0802b/…,应该计算d3和d5的最小值,并在d13上返回结果。所以,这对我来说没有意义。 我也有同样的疑问。但是模拟器显示了这个结果,我确信模拟器是正确的。 你从哪里得到这个伪代码?您是否编译并检查了结果?你用的是哪个模拟器?它支持高级 SIMD 吗? 【参考方案1】:

这是该指令的 ARM 参考手册中的定义。 (NaNNot a Number,这意味着该值不是有效的浮点数。)

VMINNM

该指令确定浮点最小数。 它按照 IEEE754-2008 规范处理 NaN。它返回数字操作数,当 操作数是数字,另一个是安静的 NaN,但除此之外,结果与浮点 VMIN 相同。 该指令不是有条件的。

vminnm.f32  d3, d5, d13

在您的示例中,比较 d5d13 中的值,比较结果存储在 d3 中。考虑到您正在处理向量,并且每个向量中有两个元素,每个元素都是 32 位浮点数。

0xffd5432100000000 是有效的 64 位双精度数,但不是两个 32 位浮点数,即 0xffd54321不是数字 0x00000000 为 0,因此当您比较这些值时,您需要了解所比较值的宽度。 (可以查看浮点数的值here。)

【讨论】:

以上是关于ARM 中的 VMNNM 指令的主要内容,如果未能解决你的问题,请参考以下文章

iOS逆向工程之Hopper中的ARM指令

ARM汇编程序中的伪指令

ARM中的指令写回

关于ARM中的tstcmpbnebeq指令

arm中的饱和指令

ARM64中的内存屏障指令