vit*_*oft 5 x86 assembly avx512
我的问题是关于EVEX编码不四舍五入语义打包REG-REG的指令允许SAE控制(禁止所有的例外),如VMIN*,*VCVTT,VGETEXT*,VREDUCE*,VRANGE*等英特尔只全声明SAE-意识512位向量长度,例如
VMINPD xmm1 {k1}{z}, xmm2, xmm3
VMINPD ymm1 {k1}{z}, ymm2, ymm3
VMINPD zmm1 {k1}{z}, zmm2, zmm3{sae}
Run Code Online (Sandbox Code Playgroud)
但我没有看到为什么SAE不能应用于使用xmm或ymm寄存器的指令的原因.
在英特尔指令集扩展编程参考的第4.6.4章中, 表4-7表示在没有舍入语义位的指令中,EVEX.b指定应用SAE,并且位EVEX.L'L指定显式向量长度:
00b: 128bit (XMM)
01b: 256bit (YMM)
10b: 512bit (ZMM)
11b: reserved
Run Code Online (Sandbox Code Playgroud)
所以他们的组合应该是合法的.
然而,NASM汇编vminpd zmm1,zmm2,zmm3,{sae}
为62F1ED185DCB,即EVEX.L'L = 00b,EVEX.b = 1,由NDISASM 2.12反汇编为vminpd xmm1,xmm2,xmm3
NASM拒绝组装vminpd ymm1,ymm2,ymm3,{sae}
,NDISASM将62F1ED385DCB(EVEX.L'L = 01b,EVEX.b = 1)拆解为vminpd xmm1,xmm2,xmm3
我想知道Knights Landing CPU是如何执行的VMINPD ymm1, ymm2, ymm3{sae}
(组装为62F1ED385DCB,EVEX.L'L = 01b,EVEX.b = 1):
您的VMINPD ymm1, ymm2, ymm3{sae}
指令无效。根据英特尔架构指令集扩展编程参考(2016 年 2 月)中 MINPD 的指令集参考,仅允许以下编码:
\n\n\nRun Code Online (Sandbox Code Playgroud)\n66 0F 5D /r MINPD xmm1, xmm2/m128 \nVEX.NDS.128.66.0F.WIG 5D /r VMINPD xmm1, xmm2, xmm3/m128\nVEX.NDS.256.66.0F.WIG 5D /r VMINPD ymm1, ymm2, ymm3/m256\nEVEX.NDS.128.66.0F.W1 5D /r VMINPD xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcst\nEVEX.NDS.256.66.0F.W1 5D /r VMINPD ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcst\nEVEX.NDS.512.66.0F.W1 5D /r VMINPD zmm1 {k1}{z}, zmm2, zmm3/m512/m64bcst{sae}\n
请注意,仅显示最后一个版本带有{sae}
后缀,这意味着它是您可以使用它的指令的唯一形式。仅仅因为这些位的存在是为了对特定指令进行编码,并不意味着它是有效的。
另请注意,第 4.6.3 节“EVEX 中的 SAE 支持”明确表示 SAE 不适用于 128 位或 256 位向量:
\n\n\n\n\nEVEX 编码系统允许使用 SAE 属性对不带舍入语义的算术浮点指令进行编码。通过设置 EVEX.b,此功能适用于标量和 512 位向量长度(仅寄存器到寄存器)。设置 EVEX.b 时,隐含 \xe2\x80\x9c 抑制所有异常\xe2\x80\x9d。[...]
\n
但是,我不确定您的手工制作的指令是否会生成无效操作码异常,是否会简单地忽略 EVEX.b 位,或者是否会忽略 EVEX.L\'L 位。EVEX 编码的 VMINPD 指令属于 E2 类异常类,根据表 4-17 E2 类异常条件,该指令在以下任何情况下都可以生成 #UD 异常:
\n\n\n\n\n\n
\n- 未满足国家要求,表4-8。
\n- 与操作码无关的#UD 条件见表4-9。
\n- 操作数编码#UD条件见表4-10。
\n- Opmask 编码#UD 条件见表4-11。
\n- 如果 EVEX.L\xe2\x80\x99L != 10b (VL=512)。
\n
只有最后一个原因似乎适用于此,但这意味着您的指令将在带或不带修饰符的情况下生成 #UD 异常{sae}
。由于这似乎与指令摘要中允许的编码直接矛盾,因此我不确定会发生什么。
归档时间: |
|
查看次数: |
341 次 |
最近记录: |