instrs: Correct PMOV[SZ]X operand size
Now that we can encode half/fourth/eighth vector size, use it.
This commit is contained in:
109
decode-test.c
109
decode-test.c
@@ -547,6 +547,42 @@ main(int argc, char** argv)
|
||||
TEST("\x66\x0f\x71\x10\x01", "UD");
|
||||
TEST("\x66\x0f\x78\xc0\xab\xcd", "extrq xmm0, 0xab, 0xcd");
|
||||
TEST("\xf2\x0f\x78\xc1\xab\xcd", "insertq xmm0, xmm1, 0xab, 0xcd");
|
||||
TEST("\x66\x0f\x38\x20\xc1", "pmovsxbw xmm0, xmm1");
|
||||
TEST32("\x66\x0f\x38\x20\x00", "pmovsxbw xmm0, qword ptr [eax]");
|
||||
TEST64("\x66\x0f\x38\x20\x00", "pmovsxbw xmm0, qword ptr [rax]");
|
||||
TEST("\x66\x0f\x38\x21\xc1", "pmovsxbd xmm0, xmm1");
|
||||
TEST32("\x66\x0f\x38\x21\x00", "pmovsxbd xmm0, dword ptr [eax]");
|
||||
TEST64("\x66\x0f\x38\x21\x00", "pmovsxbd xmm0, dword ptr [rax]");
|
||||
TEST("\x66\x0f\x38\x22\xc1", "pmovsxbq xmm0, xmm1");
|
||||
TEST32("\x66\x0f\x38\x22\x00", "pmovsxbq xmm0, word ptr [eax]");
|
||||
TEST64("\x66\x0f\x38\x22\x00", "pmovsxbq xmm0, word ptr [rax]");
|
||||
TEST("\x66\x0f\x38\x23\xc1", "pmovsxwd xmm0, xmm1");
|
||||
TEST32("\x66\x0f\x38\x23\x00", "pmovsxwd xmm0, qword ptr [eax]");
|
||||
TEST64("\x66\x0f\x38\x23\x00", "pmovsxwd xmm0, qword ptr [rax]");
|
||||
TEST("\x66\x0f\x38\x24\xc1", "pmovsxwq xmm0, xmm1");
|
||||
TEST32("\x66\x0f\x38\x24\x00", "pmovsxwq xmm0, dword ptr [eax]");
|
||||
TEST64("\x66\x0f\x38\x24\x00", "pmovsxwq xmm0, dword ptr [rax]");
|
||||
TEST("\x66\x0f\x38\x25\xc1", "pmovsxdq xmm0, xmm1");
|
||||
TEST32("\x66\x0f\x38\x25\x00", "pmovsxdq xmm0, qword ptr [eax]");
|
||||
TEST64("\x66\x0f\x38\x25\x00", "pmovsxdq xmm0, qword ptr [rax]");
|
||||
TEST("\x66\x0f\x38\x30\xc1", "pmovzxbw xmm0, xmm1");
|
||||
TEST32("\x66\x0f\x38\x30\x00", "pmovzxbw xmm0, qword ptr [eax]");
|
||||
TEST64("\x66\x0f\x38\x30\x00", "pmovzxbw xmm0, qword ptr [rax]");
|
||||
TEST("\x66\x0f\x38\x31\xc1", "pmovzxbd xmm0, xmm1");
|
||||
TEST32("\x66\x0f\x38\x31\x00", "pmovzxbd xmm0, dword ptr [eax]");
|
||||
TEST64("\x66\x0f\x38\x31\x00", "pmovzxbd xmm0, dword ptr [rax]");
|
||||
TEST("\x66\x0f\x38\x32\xc1", "pmovzxbq xmm0, xmm1");
|
||||
TEST32("\x66\x0f\x38\x32\x00", "pmovzxbq xmm0, word ptr [eax]");
|
||||
TEST64("\x66\x0f\x38\x32\x00", "pmovzxbq xmm0, word ptr [rax]");
|
||||
TEST("\x66\x0f\x38\x33\xc1", "pmovzxwd xmm0, xmm1");
|
||||
TEST32("\x66\x0f\x38\x33\x00", "pmovzxwd xmm0, qword ptr [eax]");
|
||||
TEST64("\x66\x0f\x38\x33\x00", "pmovzxwd xmm0, qword ptr [rax]");
|
||||
TEST("\x66\x0f\x38\x34\xc1", "pmovzxwq xmm0, xmm1");
|
||||
TEST32("\x66\x0f\x38\x34\x00", "pmovzxwq xmm0, dword ptr [eax]");
|
||||
TEST64("\x66\x0f\x38\x34\x00", "pmovzxwq xmm0, dword ptr [rax]");
|
||||
TEST("\x66\x0f\x38\x35\xc1", "pmovzxdq xmm0, xmm1");
|
||||
TEST32("\x66\x0f\x38\x35\x00", "pmovzxdq xmm0, qword ptr [eax]");
|
||||
TEST64("\x66\x0f\x38\x35\x00", "pmovzxdq xmm0, qword ptr [rax]");
|
||||
|
||||
TEST32("\xc4\x00", "les eax, fword ptr [eax]");
|
||||
TEST32("\xc5\x00", "lds eax, fword ptr [eax]");
|
||||
@@ -624,6 +660,79 @@ main(int argc, char** argv)
|
||||
TEST("\xc4\xe2\xf1\x45\xc2", "vpsrlvq xmm0, xmm1, xmm2");
|
||||
TEST("\xc4\xe2\xf5\x45\xc2", "vpsrlvq ymm0, ymm1, ymm2");
|
||||
|
||||
TEST("\xc4\xe2\x79\x20\xc1", "vpmovsxbw xmm0, xmm1");
|
||||
TEST("\xc4\xe2\x7d\x20\xc1", "vpmovsxbw ymm0, xmm1");
|
||||
TEST32("\xc4\xe2\x79\x20\x00", "vpmovsxbw xmm0, qword ptr [eax]");
|
||||
TEST64("\xc4\xe2\x79\x20\x00", "vpmovsxbw xmm0, qword ptr [rax]");
|
||||
TEST32("\xc4\xe2\x7d\x20\x00", "vpmovsxbw ymm0, xmmword ptr [eax]");
|
||||
TEST64("\xc4\xe2\x7d\x20\x00", "vpmovsxbw ymm0, xmmword ptr [rax]");
|
||||
TEST("\xc4\xe2\x79\x21\xc1", "vpmovsxbd xmm0, xmm1");
|
||||
TEST("\xc4\xe2\x7d\x21\xc1", "vpmovsxbd ymm0, xmm1");
|
||||
TEST32("\xc4\xe2\x79\x21\x00", "vpmovsxbd xmm0, dword ptr [eax]");
|
||||
TEST64("\xc4\xe2\x79\x21\x00", "vpmovsxbd xmm0, dword ptr [rax]");
|
||||
TEST32("\xc4\xe2\x7d\x21\x00", "vpmovsxbd ymm0, qword ptr [eax]");
|
||||
TEST64("\xc4\xe2\x7d\x21\x00", "vpmovsxbd ymm0, qword ptr [rax]");
|
||||
TEST("\xc4\xe2\x79\x22\xc1", "vpmovsxbq xmm0, xmm1");
|
||||
TEST("\xc4\xe2\x7d\x22\xc1", "vpmovsxbq ymm0, xmm1");
|
||||
TEST32("\xc4\xe2\x79\x22\x00", "vpmovsxbq xmm0, word ptr [eax]");
|
||||
TEST64("\xc4\xe2\x79\x22\x00", "vpmovsxbq xmm0, word ptr [rax]");
|
||||
TEST32("\xc4\xe2\x7d\x22\x00", "vpmovsxbq ymm0, dword ptr [eax]");
|
||||
TEST64("\xc4\xe2\x7d\x22\x00", "vpmovsxbq ymm0, dword ptr [rax]");
|
||||
TEST("\xc4\xe2\x79\x23\xc1", "vpmovsxwd xmm0, xmm1");
|
||||
TEST("\xc4\xe2\x7d\x23\xc1", "vpmovsxwd ymm0, xmm1");
|
||||
TEST32("\xc4\xe2\x79\x23\x00", "vpmovsxwd xmm0, qword ptr [eax]");
|
||||
TEST64("\xc4\xe2\x79\x23\x00", "vpmovsxwd xmm0, qword ptr [rax]");
|
||||
TEST32("\xc4\xe2\x7d\x23\x00", "vpmovsxwd ymm0, xmmword ptr [eax]");
|
||||
TEST64("\xc4\xe2\x7d\x23\x00", "vpmovsxwd ymm0, xmmword ptr [rax]");
|
||||
TEST("\xc4\xe2\x79\x24\xc1", "vpmovsxwq xmm0, xmm1");
|
||||
TEST("\xc4\xe2\x7d\x24\xc1", "vpmovsxwq ymm0, xmm1");
|
||||
TEST32("\xc4\xe2\x79\x24\x00", "vpmovsxwq xmm0, dword ptr [eax]");
|
||||
TEST64("\xc4\xe2\x79\x24\x00", "vpmovsxwq xmm0, dword ptr [rax]");
|
||||
TEST32("\xc4\xe2\x7d\x24\x00", "vpmovsxwq ymm0, qword ptr [eax]");
|
||||
TEST64("\xc4\xe2\x7d\x24\x00", "vpmovsxwq ymm0, qword ptr [rax]");
|
||||
TEST("\xc4\xe2\x79\x25\xc1", "vpmovsxdq xmm0, xmm1");
|
||||
TEST("\xc4\xe2\x7d\x25\xc1", "vpmovsxdq ymm0, xmm1");
|
||||
TEST32("\xc4\xe2\x79\x25\x00", "vpmovsxdq xmm0, qword ptr [eax]");
|
||||
TEST64("\xc4\xe2\x79\x25\x00", "vpmovsxdq xmm0, qword ptr [rax]");
|
||||
TEST32("\xc4\xe2\x7d\x25\x00", "vpmovsxdq ymm0, xmmword ptr [eax]");
|
||||
TEST64("\xc4\xe2\x7d\x25\x00", "vpmovsxdq ymm0, xmmword ptr [rax]");
|
||||
TEST("\xc4\xe2\x79\x30\xc1", "vpmovzxbw xmm0, xmm1");
|
||||
TEST("\xc4\xe2\x7d\x30\xc1", "vpmovzxbw ymm0, xmm1");
|
||||
TEST32("\xc4\xe2\x79\x30\x00", "vpmovzxbw xmm0, qword ptr [eax]");
|
||||
TEST64("\xc4\xe2\x79\x30\x00", "vpmovzxbw xmm0, qword ptr [rax]");
|
||||
TEST32("\xc4\xe2\x7d\x30\x00", "vpmovzxbw ymm0, xmmword ptr [eax]");
|
||||
TEST64("\xc4\xe2\x7d\x30\x00", "vpmovzxbw ymm0, xmmword ptr [rax]");
|
||||
TEST("\xc4\xe2\x79\x31\xc1", "vpmovzxbd xmm0, xmm1");
|
||||
TEST("\xc4\xe2\x7d\x31\xc1", "vpmovzxbd ymm0, xmm1");
|
||||
TEST32("\xc4\xe2\x79\x31\x00", "vpmovzxbd xmm0, dword ptr [eax]");
|
||||
TEST64("\xc4\xe2\x79\x31\x00", "vpmovzxbd xmm0, dword ptr [rax]");
|
||||
TEST32("\xc4\xe2\x7d\x31\x00", "vpmovzxbd ymm0, qword ptr [eax]");
|
||||
TEST64("\xc4\xe2\x7d\x31\x00", "vpmovzxbd ymm0, qword ptr [rax]");
|
||||
TEST("\xc4\xe2\x79\x32\xc1", "vpmovzxbq xmm0, xmm1");
|
||||
TEST("\xc4\xe2\x7d\x32\xc1", "vpmovzxbq ymm0, xmm1");
|
||||
TEST32("\xc4\xe2\x79\x32\x00", "vpmovzxbq xmm0, word ptr [eax]");
|
||||
TEST64("\xc4\xe2\x79\x32\x00", "vpmovzxbq xmm0, word ptr [rax]");
|
||||
TEST32("\xc4\xe2\x7d\x32\x00", "vpmovzxbq ymm0, dword ptr [eax]");
|
||||
TEST64("\xc4\xe2\x7d\x32\x00", "vpmovzxbq ymm0, dword ptr [rax]");
|
||||
TEST("\xc4\xe2\x79\x33\xc1", "vpmovzxwd xmm0, xmm1");
|
||||
TEST("\xc4\xe2\x7d\x33\xc1", "vpmovzxwd ymm0, xmm1");
|
||||
TEST32("\xc4\xe2\x79\x33\x00", "vpmovzxwd xmm0, qword ptr [eax]");
|
||||
TEST64("\xc4\xe2\x79\x33\x00", "vpmovzxwd xmm0, qword ptr [rax]");
|
||||
TEST32("\xc4\xe2\x7d\x33\x00", "vpmovzxwd ymm0, xmmword ptr [eax]");
|
||||
TEST64("\xc4\xe2\x7d\x33\x00", "vpmovzxwd ymm0, xmmword ptr [rax]");
|
||||
TEST("\xc4\xe2\x79\x34\xc1", "vpmovzxwq xmm0, xmm1");
|
||||
TEST("\xc4\xe2\x7d\x34\xc1", "vpmovzxwq ymm0, xmm1");
|
||||
TEST32("\xc4\xe2\x79\x34\x00", "vpmovzxwq xmm0, dword ptr [eax]");
|
||||
TEST64("\xc4\xe2\x79\x34\x00", "vpmovzxwq xmm0, dword ptr [rax]");
|
||||
TEST32("\xc4\xe2\x7d\x34\x00", "vpmovzxwq ymm0, qword ptr [eax]");
|
||||
TEST64("\xc4\xe2\x7d\x34\x00", "vpmovzxwq ymm0, qword ptr [rax]");
|
||||
TEST("\xc4\xe2\x79\x35\xc1", "vpmovzxdq xmm0, xmm1");
|
||||
TEST("\xc4\xe2\x7d\x35\xc1", "vpmovzxdq ymm0, xmm1");
|
||||
TEST32("\xc4\xe2\x79\x35\x00", "vpmovzxdq xmm0, qword ptr [eax]");
|
||||
TEST64("\xc4\xe2\x79\x35\x00", "vpmovzxdq xmm0, qword ptr [rax]");
|
||||
TEST32("\xc4\xe2\x7d\x35\x00", "vpmovzxdq ymm0, xmmword ptr [eax]");
|
||||
TEST64("\xc4\xe2\x7d\x35\x00", "vpmovzxdq ymm0, xmmword ptr [rax]");
|
||||
|
||||
TEST("\xc4\xe3\x71\x4a\xc2\x30", "vblendvps xmm0, xmm1, xmm2, xmm3");
|
||||
TEST32("\xc4\xe3\x75\x4a\xc2\xf0", "vblendvps ymm0, ymm1, ymm2, ymm7"); // Bit 7 is ignored
|
||||
TEST64("\xc4\xe3\x75\x4a\xc2\xf0", "vblendvps ymm0, ymm1, ymm2, ymm15");
|
||||
|
||||
48
instrs.txt
48
instrs.txt
@@ -814,22 +814,22 @@ F2.0ff0/m RM Vx Mx - - SSE_LDDQU F=SSE3
|
||||
66.0f381c RM Vx Wx - - SSE_PABSB F=SSSE3
|
||||
66.0f381d RM Vx Wx - - SSE_PABSW F=SSSE3
|
||||
66.0f381e RM Vx Wx - - SSE_PABSD F=SSSE3
|
||||
66.0f3820 RM Vx Wx - - SSE_PMOVSXBW F=SSE41
|
||||
66.0f3821 RM Vx Wx - - SSE_PMOVSXBD F=SSE41
|
||||
66.0f3822 RM Vx Wx - - SSE_PMOVSXBQ F=SSE41
|
||||
66.0f3823 RM Vx Wx - - SSE_PMOVSXWD F=SSE41
|
||||
66.0f3824 RM Vx Wx - - SSE_PMOVSXWQ F=SSE41
|
||||
66.0f3825 RM Vx Wx - - SSE_PMOVSXDQ F=SSE41
|
||||
66.0f3820 RM Vx Wh - - SSE_PMOVSXBW F=SSE41
|
||||
66.0f3821 RM Vx Wf - - SSE_PMOVSXBD F=SSE41
|
||||
66.0f3822 RM Vx We - - SSE_PMOVSXBQ F=SSE41
|
||||
66.0f3823 RM Vx Wh - - SSE_PMOVSXWD F=SSE41
|
||||
66.0f3824 RM Vx Wf - - SSE_PMOVSXWQ F=SSE41
|
||||
66.0f3825 RM Vx Wh - - SSE_PMOVSXDQ F=SSE41
|
||||
66.0f3828 RM Vx Wx - - SSE_PMULDQ F=SSE41
|
||||
66.0f3829 RM Vx Wx - - SSE_PCMPEQQ F=SSE41
|
||||
66.0f382a/m RM Vx Mx - - SSE_MOVNTDQA F=SSE41
|
||||
66.0f382b RM Vx Wx - - SSE_PACKUSDW F=SSE41
|
||||
66.0f3830 RM Vx Wx - - SSE_PMOVZXBW F=SSE41
|
||||
66.0f3831 RM Vx Wx - - SSE_PMOVZXBD F=SSE41
|
||||
66.0f3832 RM Vx Wx - - SSE_PMOVZXBQ F=SSE41
|
||||
66.0f3833 RM Vx Wx - - SSE_PMOVZXWD F=SSE41
|
||||
66.0f3834 RM Vx Wx - - SSE_PMOVZXWQ F=SSE41
|
||||
66.0f3835 RM Vx Wx - - SSE_PMOVZXDQ F=SSE41
|
||||
66.0f3830 RM Vx Wh - - SSE_PMOVZXBW F=SSE41
|
||||
66.0f3831 RM Vx Wf - - SSE_PMOVZXBD F=SSE41
|
||||
66.0f3832 RM Vx We - - SSE_PMOVZXBQ F=SSE41
|
||||
66.0f3833 RM Vx Wh - - SSE_PMOVZXWD F=SSE41
|
||||
66.0f3834 RM Vx Wf - - SSE_PMOVZXWQ F=SSE41
|
||||
66.0f3835 RM Vx Wh - - SSE_PMOVZXDQ F=SSE41
|
||||
66.0f3837 RM Vx Wx - - SSE_PCMPGTQ F=SSE41
|
||||
66.0f3838 RM Vx Wx - - SSE_PMINSB F=SSE41
|
||||
66.0f3839 RM Vx Wx - - SSE_PMINSD F=SSE41
|
||||
@@ -1120,12 +1120,12 @@ VEX.66.W0.L1.0f381a RM Vx Wdq - - VBROADCASTF128 F=AVX
|
||||
VEX.66.0f381c RM Vx Wx - - VPABSB F=AVX
|
||||
VEX.66.0f381d RM Vx Wx - - VPABSW F=AVX
|
||||
VEX.66.0f381e RM Vx Wx - - VPABSD F=AVX
|
||||
VEX.66.0f3820 RM Vx Wx - - VPMOVSXBW F=AVX
|
||||
VEX.66.0f3821 RM Vx Wx - - VPMOVSXBD F=AVX
|
||||
VEX.66.0f3822 RM Vx Wx - - VPMOVSXBQ F=AVX
|
||||
VEX.66.0f3823 RM Vx Wx - - VPMOVSXWD F=AVX
|
||||
VEX.66.0f3824 RM Vx Wx - - VPMOVSXWQ F=AVX
|
||||
VEX.66.0f3825 RM Vx Wx - - VPMOVSXDQ F=AVX
|
||||
VEX.66.0f3820 RM Vx Wh - - VPMOVSXBW F=AVX
|
||||
VEX.66.0f3821 RM Vx Wf - - VPMOVSXBD F=AVX
|
||||
VEX.66.0f3822 RM Vx We - - VPMOVSXBQ F=AVX
|
||||
VEX.66.0f3823 RM Vx Wh - - VPMOVSXWD F=AVX
|
||||
VEX.66.0f3824 RM Vx Wf - - VPMOVSXWQ F=AVX
|
||||
VEX.66.0f3825 RM Vx Wh - - VPMOVSXDQ F=AVX
|
||||
VEX.66.0f3828 RVM Vx Hx Wx - VPMULDQ F=AVX
|
||||
VEX.66.0f3829 RVM Vx Hx Wx - VPCMPEQQ F=AVX
|
||||
VEX.66.0f382a/m RM Vx Mx - - VMOVNTDQA F=AVX
|
||||
@@ -1134,12 +1134,12 @@ VEX.66.W0.0f382c RVM Vx Hx Wx - VMASKMOVPS F=AVX
|
||||
VEX.66.W0.0f382d RVM Vx Hx Wx - VMASKMOVPD F=AVX
|
||||
VEX.66.W0.0f382e MVR Wx Hx Vx - VMASKMOVPS F=AVX
|
||||
VEX.66.W0.0f382f MVR Wx Hx Vx - VMASKMOVPD F=AVX
|
||||
VEX.66.0f3830 RM Vx Wx - - VPMOVZXBW F=AVX
|
||||
VEX.66.0f3831 RM Vx Wx - - VPMOVZXBD F=AVX
|
||||
VEX.66.0f3832 RM Vx Wx - - VPMOVZXBQ F=AVX
|
||||
VEX.66.0f3833 RM Vx Wx - - VPMOVZXWD F=AVX
|
||||
VEX.66.0f3834 RM Vx Wx - - VPMOVZXWQ F=AVX
|
||||
VEX.66.0f3835 RM Vx Wx - - VPMOVZXDQ F=AVX
|
||||
VEX.66.0f3830 RM Vx Wh - - VPMOVZXBW F=AVX
|
||||
VEX.66.0f3831 RM Vx Wf - - VPMOVZXBD F=AVX
|
||||
VEX.66.0f3832 RM Vx We - - VPMOVZXBQ F=AVX
|
||||
VEX.66.0f3833 RM Vx Wh - - VPMOVZXWD F=AVX
|
||||
VEX.66.0f3834 RM Vx Wf - - VPMOVZXWQ F=AVX
|
||||
VEX.66.0f3835 RM Vx Wh - - VPMOVZXDQ F=AVX
|
||||
VEX.66.W0.L1.0f3836 RVM Vx Hx Wx - VPERMD F=AVX2
|
||||
VEX.66.0f3837 RVM Vx Hx Wx - VPCMPGTQ F=AVX
|
||||
VEX.66.0f3838 RVM Vx Hx Wx - VPMINSB F=AVX
|
||||
|
||||
Reference in New Issue
Block a user