寄存器X/Y/ZMM16-31如何编码?



据我所知,由于AVX,通过3字节VEX或EVEX前缀,您可以在64位模式下编码多达32个XMM/YMM/ZMM寄存器,但是当通过英特尔手册查看它告诉您这是可能的事实时,我找不到它解释实际发生的部分。我只能看到一个扩展字段,这是REX倒置字段,但除了EVEX前缀中用于编码掩码寄存器的特殊位置之外,没有其他任何内容。

你需要在某个地方用2位来编码这么多寄存器。您是否必须在VEX/EVEX前缀中组合2个倒置的REX字段,或者这个过程是如何工作的?

xmm16.是AVX-512的新特性,只能通过EVEX前缀访问。,其中2为每个ModRM字段添加额外的位,并为第三个操作数添加额外的5位。

REX + legacy-SSE,以及AVX1/2编码的VEX,只能访问xmm/ymm0..15。

维基百科的EVEX文章有一个很好的表格,显示了比特的来源,我转录了其中的一些:

<表类="年代桌子">Addr模式钻头4位3比特(2:0)注册类型tbody><REGEVEX.R">EVEX.RModRM。reg通用,VectorRMEVEX.XEVEX.BModRM。r/m探地雷达,向量NDS/NDDEVEX.V">EVEX.v3EVEX.v2v1v0矢量<基地/td>0EVEX.BSIB。基地(或调制解调器)GPR指数0EVEX.XSIB.indexGPR

相关内容

最新更新