diff --git a/decode-test.c b/decode-test.c index df576bf..591db7e 100644 --- a/decode-test.c +++ b/decode-test.c @@ -498,6 +498,19 @@ main(int argc, char** argv) TEST32("\xc4\xe3\x75\x4b\xc2\x80", "vblendvpd ymm0, ymm1, ymm2, ymm0"); // Bit 7 is ignored TEST64("\xc4\xe3\x75\x4b\xc2\x80", "vblendvpd ymm0, ymm1, ymm2, ymm8"); + TEST("\xc4\xe2\x79\xdb\xc1", "vaesimc xmm0, xmm1"); + TEST("\xc4\xe2\x7d\xdb\xc1", "UD"); // VEX.L != 0 + TEST("\xc4\xe3\x79\xdf\xc1\xae", "vaeskeygenassist xmm0, xmm1, 0xae"); + TEST("\xc4\xe3\x7d\xdf\xc1\xae", "UD"); // VEX.L != 0 + TEST("\xc4\xe2\x71\xdc\xc2", "vaesenc xmm0, xmm1, xmm2"); + TEST("\xc4\xe2\x75\xdc\xc2", "vaesenc ymm0, ymm1, ymm2"); + TEST("\xc4\xe2\x71\xdd\xc2", "vaesenclast xmm0, xmm1, xmm2"); + TEST("\xc4\xe2\x75\xdd\xc2", "vaesenclast ymm0, ymm1, ymm2"); + TEST("\xc4\xe2\x71\xde\xc2", "vaesdec xmm0, xmm1, xmm2"); + TEST("\xc4\xe2\x75\xde\xc2", "vaesdec ymm0, ymm1, ymm2"); + TEST("\xc4\xe2\x71\xdf\xc2", "vaesdeclast xmm0, xmm1, xmm2"); + TEST("\xc4\xe2\x75\xdf\xc2", "vaesdeclast ymm0, ymm1, ymm2"); + TEST("\xc4\xe2\x71\x92\xc0", "UD"); // Must have memory operand TEST("\xc4\xe2\x71\x92\x00", "UD"); // Must have SIB byte TEST("\xc4\xe2\x71\x92\x05\x00\x00\x00\x00", "UD"); // Must have SIB byte diff --git a/encode-test.inc b/encode-test.inc index 0485fc4..575f6d8 100644 --- a/encode-test.inc +++ b/encode-test.inc @@ -255,6 +255,17 @@ TEST("\xc4\xe2\xf1\x91\x04\xe7", VPGATHERQQ128rmr, 0, FE_XMM0, FE_MEMV(FE_DI, 8, TEST("\xc4\xe2\xf5\x91\x04\xff", VPGATHERQQ256rmr, 0, FE_XMM0, FE_MEMV(FE_DI, 8, FE_XMM7, 0), FE_XMM1); TEST("\xc4\xe2\xf5\x91\x04\xe7", VPGATHERQQ256rmr, 0, FE_XMM0, FE_MEMV(FE_DI, 8, FE_XMM4, 0), FE_XMM1); +TEST("\xc4\xe2\x79\xdb\xc1", VAESIMCrr, 0, FE_XMM0, FE_XMM1); +TEST("\xc4\xe3\x79\xdf\xc1\xae", VAESKEYGENASSISTrri, 0, FE_XMM0, FE_XMM1, (int8_t) 0xae); +TEST("\xc4\xe2\x71\xdc\xc2", VAESENC128rrr, 0, FE_XMM0, FE_XMM1, FE_XMM2); +TEST("\xc4\xe2\x75\xdc\xc2", VAESENC256rrr, 0, FE_XMM0, FE_XMM1, FE_XMM2); +TEST("\xc4\xe2\x71\xdd\xc2", VAESENCLAST128rrr, 0, FE_XMM0, FE_XMM1, FE_XMM2); +TEST("\xc4\xe2\x75\xdd\xc2", VAESENCLAST256rrr, 0, FE_XMM0, FE_XMM1, FE_XMM2); +TEST("\xc4\xe2\x71\xde\xc2", VAESDEC128rrr, 0, FE_XMM0, FE_XMM1, FE_XMM2); +TEST("\xc4\xe2\x75\xde\xc2", VAESDEC256rrr, 0, FE_XMM0, FE_XMM1, FE_XMM2); +TEST("\xc4\xe2\x71\xdf\xc2", VAESDECLAST128rrr, 0, FE_XMM0, FE_XMM1, FE_XMM2); +TEST("\xc4\xe2\x75\xdf\xc2", VAESDECLAST256rrr, 0, FE_XMM0, FE_XMM1, FE_XMM2); + // Test ModRM encoding TEST("\x01\x00", ADD32mr, 0, FE_MEM(FE_AX, 0, FE_NOREG, 0), FE_AX); TEST("\x01\x04\x24", ADD32mr, 0, FE_MEM(FE_SP, 0, FE_NOREG, 0), FE_AX); diff --git a/instrs.txt b/instrs.txt index 0cb8ad7..8cb6141 100644 --- a/instrs.txt +++ b/instrs.txt @@ -880,10 +880,15 @@ NP.0f38f9/m MR My Gy - - MOVDIRI F=MOVDIRI 66.0f38df RM Vdq Wdq - - AESDECLAST F=AESNI 66.0f3adf RMI Vdq Wdq Ib - AESKEYGENASSIST F=AESNI VEX.66.L0.0f38db RM Vdq Wdq - - VAESIMC F=AESNI,AVX -VEX.66.L0.0f38dc RVM Vdq Hdq Wdq - VAESENC F=AESNI,AVX -VEX.66.L0.0f38dd RVM Vdq Hdq Wdq - VAESENCLAST F=AESNI,AVX -VEX.66.L0.0f38de RVM Vdq Hdq Wdq - VAESDEC F=AESNI,AVX -VEX.66.L0.0f38df RVM Vdq Hdq Wdq - VAESDECLAST F=AESNI,AVX +# 256-bit encodings require VAES. +VEX.66.L0.0f38dc RVM Vx Hx Wx - VAESENC F=AESNI,AVX +VEX.66.L1.0f38dc RVM Vx Hx Wx - VAESENC F=AESNI,VAES,AVX +VEX.66.L0.0f38dd RVM Vx Hx Wx - VAESENCLAST F=AESNI,AVX +VEX.66.L1.0f38dd RVM Vx Hx Wx - VAESENCLAST F=AESNI,VAES,AVX +VEX.66.L0.0f38de RVM Vx Hx Wx - VAESDEC F=AESNI,AVX +VEX.66.L1.0f38de RVM Vx Hx Wx - VAESDEC F=AESNI,VAES,AVX +VEX.66.L0.0f38df RVM Vx Hx Wx - VAESDECLAST F=AESNI,AVX +VEX.66.L1.0f38df RVM Vx Hx Wx - VAESDECLAST F=AESNI,VAES,AVX VEX.66.L0.0f3adf RMI Vdq Wdq Ib - VAESKEYGENASSIST F=AESNI,AVX # # AVX