Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly AVX512舍入模式是如何工作的(或者NDISSM只是混淆了)?_Assembly_X86_Nasm_Avx512 - Fatal编程技术网

Assembly AVX512舍入模式是如何工作的(或者NDISSM只是混淆了)?

Assembly AVX512舍入模式是如何工作的(或者NDISSM只是混淆了)?,assembly,x86,nasm,avx512,Assembly,X86,Nasm,Avx512,我试图理解特定的AVX512F指令vcvtps2udq 指令的签名是vcvtps2 udq zmm1{k1}{z},zmm2/m512/m32bcst{er}。手册信息如下 为了理解新的舍入模式,以下代码片段与NASM(2.12.02)组合在一起 使用NDISSM(2.12.02)对结果进行解汇编会产生很多混乱,并产生以下代码: 62F17C4879C1 vcvtps2udq zmm0,zmm1 62F17C7879C1 vcvtps2udq xmm0,xmm1 62F17C

我试图理解特定的AVX512F指令vcvtps2udq

指令的签名是
vcvtps2 udq zmm1{k1}{z},zmm2/m512/m32bcst{er}
。手册信息如下

为了理解新的舍入模式,以下代码片段与NASM(2.12.02)组合在一起

使用NDISSM(2.12.02)对结果进行解汇编会产生很多混乱,并产生以下代码:

62F17C4879C1      vcvtps2udq zmm0,zmm1
62F17C7879C1      vcvtps2udq xmm0,xmm1
62F17C0879C1      vcvtps2udq xmm0,xmm1
问题:第二行是用xmm寄存器而不是zmm寄存器(这是我所期望的)去组装的。与零舍入模式(rz sae)有关。或者只是NDISAM错误,无法区分操作码62F17C7879C1和62F17C0879C1

“英特尔指令集参考手册”有以下说明:

转换中的十六个压缩单精度浮点值 源操作数到中的十六个无符号双字整数 目标操作数

当转换不精确时,返回的值将根据 至MXCSR寄存器或嵌入寄存器中的舍入控制位 四舍五入控制位。如果转换后的结果无法在中表示 目标格式为,浮点无效异常为 如果该异常被屏蔽,则整数值2w–1为 返回,其中w表示目标中的位数 格式

源操作数是一个ZMM/YMM/XMM寄存器,一个512/256/128位内存 位置,或从32位内存广播的512/256/128位向量 地点。目标操作数是ZMM/YMM/XMM寄存器 使用writemask k1有条件地更新


操作码编码为0x62 P0 P1 P2。在这种情况下,P2字节是

P2
48  <- vcvtps2udq zmm0,zmm1
78  <- vcvtps2udq zmm0,zmm1,{rz-sae}
08  <- vcvtps2udq xmm0,xmm1
因此,不同的字段是EVEX.b和EVEX.L'L。根据文档,如果未设置
b
,则
L'L
是SIMD长度,因此
0=xmm
2=zmm
。如果设置了
b
,则将
L'L
重新解释为静态舍入模式,并假定长度为zmm(512位)


NDISSM没有正确解释EVEX.B位,因此也没有正确解释
EVEX.L'L
字段。

如果您有一个支持AVX-512指令的处理器,我非常嫉妒。显然,NDISSM对不同的操作码进行了相同的反汇编,因此NDISSM至少必须有一个限制,如果它声称支持AVX512,那就是一个bug。这一次我支持@CodyGray。@CodyGray不必嫉妒;虽然我确实有几个虚构的…@CodyGray Intel的模拟器已经存在多年了。从2014年开始,这基本上使我能够编写AVX512。在任何情况下,AVX512现在都是骑士登陆的时候了。虽然我能为消费者找到的唯一途径是通过他们的Ninja开发者平台。感谢您的澄清和解释。我应该提交错误报告吗?
P2
48  <- vcvtps2udq zmm0,zmm1
78  <- vcvtps2udq zmm0,zmm1,{rz-sae}
08  <- vcvtps2udq xmm0,xmm1
                       zmm  zmm+sae  xmm
EVEX.aaa  = P2[2:0]     0     0       0
EVEXV'    = P2[3]       1     1       1
EVEX.b    = P2[4]       0     1       0  "Broadcast/RC/SAE Context"
EVEX.L'L  = P2[6:5]     2     3       0  "Vector length/RC"
EVEX.z    = P2[7]       0     0       0