AVX 与 XOP 指令集中的 registers 编码反相


 

1、VEX prefix 中的 VEX.RXB 与 XOP prefix 中的 XOP.RXB 反相作用

2-byte 版本的 VEX prefix 为:C5 + VEX.[RvvvvLpp]

3-byte 版本的 VEX prefix 为:C4 + VEX.[RXBmmmmm] + VEX.[WvvvvLpp]

3-byte 的 XOP prefix 为:8F + XOP.[RXBmmmmm] + XOP.[WvvvvLpp]

这些 RXB 对 ModRM.reg、ModRM.r/m 以及 SIB.index、SIB.base 提供的 registers 编码进行扩展。

VEX.RXB 与 XOP.RXB 是反相位。它颠倒 ModRM 字节和 SIB 字节提供的高 8 个与低 8 个 registers

 

VEX.RXB 与 XOP.RXB 对 registers 的高半部分/低半部分反相表:

RXB
ModRM/SIB
registers
1
000
rax/xmm0/ymm0
001
rcx/xmm1/ymm1
010
rdx/xmm2/ymm2
011
rbx/xmm3/ymm3
100
rsp/xmm4/ymm4
101
rbp/xmm5/ymm5
110
rsi/xmm6/ymm6
111
rdi/xmm7/ymm7
0
000
r8/xmm8/ymm8
001
r9/xmm9/ymm9
010
r10/xmm10/ymm10
011
r11/xmm11/ymm11
100
r12/xmm12/ymm12
101
r13/xmm13/ymm13
110
r14/xmm14/ymm14
111
r15/xmm15/ymm15

可以看出,对于 ModRM 与 SIB 字节提供的 registers 编码不变,只是 RXB 标志颠倒高半部分与低半部分。

 

 

 

2、VEX.vvvv 与 XOP.vvvv 的反相作用

相对于 VEX.RXB 与 XOP.RXB 的反相高低半部分来说,VEX.vvvv 与 XOP.vvvv 则是提供完全相反的 registers 编码。

如下表所示:

模式
VEX.vvvv/XOP.vvvv
registers
64-bit (full)

legacy/compatibility

1111
xmm0/ymm0
1110
xmm1/ymm1
1101
xmm2/ymm2
1100
xmm3/ymm3
1011
xmm4/ymm4
1010
xmm5/ymm5
1001
xmm6/ymm6
1000
xmm7/ymm7
64-bit (only )
0111
xmm8/ymm8
0110
xmm9/ymm9
0101
xmm10/ymm10
0100
xmm11/ymm11
0011
xmm12/ymm12
0010
xmm13/ymm13
0001
xmm14/ymm14
0000
xmm15/ymm15

 

 

3、imm8[7:4] 中提供的 registers 编码

对于 imm8[7:4] 提供的 registers 寻址来说,它并不提供反相作用。

如下表:

imm8[7:4]
registers
0000
rax/xmm0/ymm0
0001
rcx/xmm1/ymm1
0010
rdx/xmm2/ymm2
0011
rbx/xmm3/ymm3
0100
rsp/xmm4/ymm4
0101
rbp/xmm5/ymm5
0110
rsi/xmm6/ymm6
0111
rdi/xmm7/ymm7
1000
r8/xmm8/ymm8
1001
r9/xmm9/ymm9
1010
r10/xmm10/ymm10
1011
r11/xmm11/ymm11
1100
r12/xmm12/ymm12
1101
r13/xmm13/ymm13
1110
r14/xmm14/ymm14
1111
r15/xmm15/ymm15

 


mik 写于 2009年12月24日