diff --git a/decode-test.c b/decode-test.c index a3bdbd3..09593ae 100644 --- a/decode-test.c +++ b/decode-test.c @@ -633,6 +633,55 @@ main(int argc, char** argv) TEST("\xc5\xf9\xf7\x00", "UD"); // must have memory operand TEST("\xc5\xfd\xf7\xc1", "UD"); // VEX.L != 0 + TEST("\xc5\xf1\xe1\xc2", "vpsraw xmm0, xmm1, xmm2"); + TEST32("\xc5\xf1\xe1\x00", "vpsraw xmm0, xmm1, xmmword ptr [eax]"); + TEST64("\xc5\xf1\xe1\x00", "vpsraw xmm0, xmm1, xmmword ptr [rax]"); + TEST("\xc5\xf5\xe1\xc2", "vpsraw ymm0, ymm1, xmm2"); + TEST32("\xc5\xf5\xe1\x00", "vpsraw ymm0, ymm1, xmmword ptr [eax]"); + TEST64("\xc5\xf5\xe1\x00", "vpsraw ymm0, ymm1, xmmword ptr [rax]"); + TEST("\xc5\xf1\xe2\xc2", "vpsrad xmm0, xmm1, xmm2"); + TEST32("\xc5\xf1\xe2\x00", "vpsrad xmm0, xmm1, xmmword ptr [eax]"); + TEST64("\xc5\xf1\xe2\x00", "vpsrad xmm0, xmm1, xmmword ptr [rax]"); + TEST("\xc5\xf5\xe2\xc2", "vpsrad ymm0, ymm1, xmm2"); + TEST32("\xc5\xf5\xe2\x00", "vpsrad ymm0, ymm1, xmmword ptr [eax]"); + TEST64("\xc5\xf5\xe2\x00", "vpsrad ymm0, ymm1, xmmword ptr [rax]"); + TEST("\xc5\xf1\xd1\xc2", "vpsrlw xmm0, xmm1, xmm2"); + TEST32("\xc5\xf1\xd1\x00", "vpsrlw xmm0, xmm1, xmmword ptr [eax]"); + TEST64("\xc5\xf1\xd1\x00", "vpsrlw xmm0, xmm1, xmmword ptr [rax]"); + TEST("\xc5\xf5\xd1\xc2", "vpsrlw ymm0, ymm1, xmm2"); + TEST32("\xc5\xf5\xd1\x00", "vpsrlw ymm0, ymm1, xmmword ptr [eax]"); + TEST64("\xc5\xf5\xd1\x00", "vpsrlw ymm0, ymm1, xmmword ptr [rax]"); + TEST("\xc5\xf1\xd2\xc2", "vpsrld xmm0, xmm1, xmm2"); + TEST32("\xc5\xf1\xd2\x00", "vpsrld xmm0, xmm1, xmmword ptr [eax]"); + TEST64("\xc5\xf1\xd2\x00", "vpsrld xmm0, xmm1, xmmword ptr [rax]"); + TEST("\xc5\xf5\xd2\xc2", "vpsrld ymm0, ymm1, xmm2"); + TEST32("\xc5\xf5\xd2\x00", "vpsrld ymm0, ymm1, xmmword ptr [eax]"); + TEST64("\xc5\xf5\xd2\x00", "vpsrld ymm0, ymm1, xmmword ptr [rax]"); + TEST("\xc5\xf1\xd3\xc2", "vpsrlq xmm0, xmm1, xmm2"); + TEST32("\xc5\xf1\xd3\x00", "vpsrlq xmm0, xmm1, xmmword ptr [eax]"); + TEST64("\xc5\xf1\xd3\x00", "vpsrlq xmm0, xmm1, xmmword ptr [rax]"); + TEST("\xc5\xf5\xd3\xc2", "vpsrlq ymm0, ymm1, xmm2"); + TEST32("\xc5\xf5\xd3\x00", "vpsrlq ymm0, ymm1, xmmword ptr [eax]"); + TEST64("\xc5\xf5\xd3\x00", "vpsrlq ymm0, ymm1, xmmword ptr [rax]"); + TEST("\xc5\xf1\xf1\xc2", "vpsllw xmm0, xmm1, xmm2"); + TEST32("\xc5\xf1\xf1\x00", "vpsllw xmm0, xmm1, xmmword ptr [eax]"); + TEST64("\xc5\xf1\xf1\x00", "vpsllw xmm0, xmm1, xmmword ptr [rax]"); + TEST("\xc5\xf5\xf1\xc2", "vpsllw ymm0, ymm1, xmm2"); + TEST32("\xc5\xf5\xf1\x00", "vpsllw ymm0, ymm1, xmmword ptr [eax]"); + TEST64("\xc5\xf5\xf1\x00", "vpsllw ymm0, ymm1, xmmword ptr [rax]"); + TEST("\xc5\xf1\xf2\xc2", "vpslld xmm0, xmm1, xmm2"); + TEST32("\xc5\xf1\xf2\x00", "vpslld xmm0, xmm1, xmmword ptr [eax]"); + TEST64("\xc5\xf1\xf2\x00", "vpslld xmm0, xmm1, xmmword ptr [rax]"); + TEST("\xc5\xf5\xf2\xc2", "vpslld ymm0, ymm1, xmm2"); + TEST32("\xc5\xf5\xf2\x00", "vpslld ymm0, ymm1, xmmword ptr [eax]"); + TEST64("\xc5\xf5\xf2\x00", "vpslld ymm0, ymm1, xmmword ptr [rax]"); + TEST("\xc5\xf1\xf3\xc2", "vpsllq xmm0, xmm1, xmm2"); + TEST32("\xc5\xf1\xf3\x00", "vpsllq xmm0, xmm1, xmmword ptr [eax]"); + TEST64("\xc5\xf1\xf3\x00", "vpsllq xmm0, xmm1, xmmword ptr [rax]"); + TEST("\xc5\xf5\xf3\xc2", "vpsllq ymm0, ymm1, xmm2"); + TEST32("\xc5\xf5\xf3\x00", "vpsllq ymm0, ymm1, xmmword ptr [eax]"); + TEST64("\xc5\xf5\xf3\x00", "vpsllq ymm0, ymm1, xmmword ptr [rax]"); + TEST("\xc4\xe3\x79\x14\xc0\x00", "vpextrb eax, xmm0, 0x0"); TEST("\xc4\xe3\xf9\x14\xc0\x00", "vpextrb eax, xmm0, 0x0"); TEST("\xc4\xe3\x79\x15\xc0\x00", "vpextrw eax, xmm0, 0x0"); diff --git a/instrs.txt b/instrs.txt index e6c42b2..3e3825a 100644 --- a/instrs.txt +++ b/instrs.txt @@ -1047,9 +1047,9 @@ VEX.NP.0fc6 RVMI Vx Hx Wx Ib VSHUFPS F=AVX VEX.66.0fc6 RVMI Vx Hx Wx Ib VSHUFPD F=AVX VEX.NP.0fd0 RVM Vx Hx Wx - VADDSUBPS F=AVX VEX.66.0fd0 RVM Vx Hx Wx - VADDSUBPD F=AVX -VEX.66.0fd1 RVM Vx Hx Wx - VPSRLW F=AVX -VEX.66.0fd2 RVM Vx Hx Wx - VPSRLD F=AVX -VEX.66.0fd3 RVM Vx Hx Wx - VPSRLQ F=AVX +VEX.66.0fd1 RVM Vx Hx Wdq - VPSRLW F=AVX +VEX.66.0fd2 RVM Vx Hx Wdq - VPSRLD F=AVX +VEX.66.0fd3 RVM Vx Hx Wdq - VPSRLQ F=AVX VEX.66.0fd4 RVM Vx Hx Wx - VPADDQ F=AVX VEX.66.0fd5 RVM Vx Hx Wx - VPMULLW F=AVX VEX.66.L0.0fd6 MR Wq Vq - - VMOVQ F=AVX @@ -1063,8 +1063,8 @@ VEX.66.0fdd RVM Vx Hx Wx - VPADDUSW F=AVX VEX.66.0fde RVM Vx Hx Wx - VPMAXUB F=AVX VEX.66.0fdf RVM Vx Hx Wx - VPANDN F=AVX VEX.66.0fe0 RVM Vx Hx Wx - VPAVGB F=AVX -VEX.66.0fe1 RVM Vx Hx Wx - VPSRAW F=AVX -VEX.66.0fe2 RVM Vx Hx Wx - VPSRAD F=AVX +VEX.66.0fe1 RVM Vx Hx Wdq - VPSRAW F=AVX +VEX.66.0fe2 RVM Vx Hx Wdq - VPSRAD F=AVX VEX.66.0fe3 RVM Vx Hx Wx - VPAVGW F=AVX VEX.66.0fe4 RVM Vx Hx Wx - VPMULHUW F=AVX VEX.66.0fe5 RVM Vx Hx Wx - VPMULHW F=AVX @@ -1081,9 +1081,9 @@ VEX.66.0fed RVM Vx Hx Wx - VPADDSW F=AVX VEX.66.0fee RVM Vx Hx Wx - VPMAXSW F=AVX VEX.66.0fef RVM Vx Hx Wx - VPXOR F=AVX VEX.F2.0ff0 RM Vx Wx - - VLDDQU F=AVX -VEX.66.0ff1 RVM Vx Hx Wx - VPSLLW F=AVX -VEX.66.0ff2 RVM Vx Hx Wx - VPSLLD F=AVX -VEX.66.0ff3 RVM Vx Hx Wx - VPSLLQ F=AVX +VEX.66.0ff1 RVM Vx Hx Wdq - VPSLLW F=AVX +VEX.66.0ff2 RVM Vx Hx Wdq - VPSLLD F=AVX +VEX.66.0ff3 RVM Vx Hx Wdq - VPSLLQ F=AVX VEX.66.0ff4 RVM Vx Hx Wx - VPMULUDQ F=AVX VEX.66.0ff5 RVM Vx Hx Wx - VPMADDWD F=AVX VEX.66.0ff6 RVM Vx Hx Wx - VPSADBW F=AVX