我正在尝试了解具体的AVX512F指令vcvtps2udq.
指令的签名是VCVTPS2UDQ zmm1 {k1}{z}, zmm2/m512/m32bcst{er}
。手册信息如下。
为了尝试理解新的舍入模式,以下代码片段是用 NASM (2.12.02) 组装的
vcvtps2udq zmm0,zmm1
vcvtps2udq zmm0,zmm1,{rz-sae}
vcvtps2udq xmm0,xmm1
用 NDISASM (2.12.02) 反汇编结果会造成很多混乱,代码如下:
62F17C4879C1 vcvtps2udq zmm0,zmm1
62F17C7879C1 vcvtps2udq xmm0,xmm1
62F17C0879C1 vcvtps2udq xmm0,xmm1
Question:第二行使用 xmm 寄存器而不是 zmm 寄存器进行反汇编(这是我所期望的)。与零舍入模式(rz-sae)有关。或者只是 NDISASM 错误,无法区分操作码 62F17C7879C1 和 62F17C0879C1。
Intel指令集参考手册有如下描述:
将十六个打包单精度浮点值转换为
源操作数为十六个无符号双字整数
目标操作数。
当转换不精确时,返回的值将根据
到 MXCSR 寄存器或嵌入的舍入控制位
舍入控制位。如果转换后的结果无法表示为
目标格式,浮点无效异常是
引发,如果此异常被屏蔽,则整数值 2w – 1 为
返回,其中 w 表示目标中的位数
格式。
源操作数是ZMM/YMM/XMM寄存器,512/256/128位存储器
位置,或从 32 位内存广播的 512/256/128 位向量
地点。目标操作数是 ZMM/YMM/XMM 寄存器
使用 writemask k1 有条件更新。