diff options
author | Jan Beulich <jbeulich@suse.com> | 2020-07-14 10:33:40 +0200 |
---|---|---|
committer | Jan Beulich <jbeulich@suse.com> | 2020-07-14 10:33:40 +0200 |
commit | 7531c61332dbd9061b09312e44b62523547e8225 (patch) | |
tree | b6263d54a1222a908ece3bd2612cd1fbf5dea945 /opcodes/i386-dis-evex.h | |
parent | 17d3c7eccd41c5053c0b567eb67fe59808cc748a (diff) | |
download | gdb-7531c61332dbd9061b09312e44b62523547e8225.zip gdb-7531c61332dbd9061b09312e44b62523547e8225.tar.gz gdb-7531c61332dbd9061b09312e44b62523547e8225.tar.bz2 |
x86: simplify decode of opcodes valid with (embedded) 66 prefix only
The only valid (embedded or explicit) prefix being the data size one
(which is a fairly common pattern), avoid going through prefix_table[].
Instead extend the "required prefix" logic to also handle PREFIX_DATA
alone in a table entry, now used to identify this case. This requires
moving the (adjusted) ->prefix_requirement logic ahead of the printing
of stray prefixes, as the latter needs to observe the new setting of
PREFIX_DATA in used_prefixes.
Also add PREFIX_OPCODE on related entries when previously there was
mistakenly no decode step through prefix_table[].
Diffstat (limited to 'opcodes/i386-dis-evex.h')
-rw-r--r-- | opcodes/i386-dis-evex.h | 434 |
1 files changed, 217 insertions, 217 deletions
diff --git a/opcodes/i386-dis-evex.h b/opcodes/i386-dis-evex.h index 120c55d..54176af 100644 --- a/opcodes/i386-dis-evex.h +++ b/opcodes/i386-dis-evex.h @@ -110,31 +110,31 @@ static const struct dis386 evex_table[][256] = { { PREFIX_TABLE (PREFIX_EVEX_0F5E) }, { PREFIX_TABLE (PREFIX_EVEX_0F5F) }, /* 60 */ - { PREFIX_TABLE (PREFIX_VEX_0F60) }, - { PREFIX_TABLE (PREFIX_VEX_0F61) }, + { "vpunpcklbw", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpunpcklwd", { XM, Vex, EXx }, PREFIX_DATA }, { VEX_W_TABLE (EVEX_W_0F62) }, - { PREFIX_TABLE (PREFIX_VEX_0F63) }, - { PREFIX_TABLE (PREFIX_EVEX_0F64) }, - { PREFIX_TABLE (PREFIX_EVEX_0F65) }, - { PREFIX_TABLE (PREFIX_EVEX_0F66) }, - { PREFIX_TABLE (PREFIX_VEX_0F67) }, + { "vpacksswb", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpcmpgtb", { XMask, Vex, EXx }, PREFIX_DATA }, + { "vpcmpgtw", { XMask, Vex, EXx }, PREFIX_DATA }, + { VEX_W_TABLE (EVEX_W_0F66) }, + { "vpackuswb", { XM, Vex, EXx }, PREFIX_DATA }, /* 68 */ - { PREFIX_TABLE (PREFIX_VEX_0F68) }, - { PREFIX_TABLE (PREFIX_VEX_0F69) }, + { "vpunpckhbw", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpunpckhwd", { XM, Vex, EXx }, PREFIX_DATA }, { VEX_W_TABLE (EVEX_W_0F6A) }, { VEX_W_TABLE (EVEX_W_0F6B) }, { VEX_W_TABLE (EVEX_W_0F6C) }, { VEX_W_TABLE (EVEX_W_0F6D) }, - { PREFIX_TABLE (PREFIX_EVEX_0F6E) }, + { EVEX_LEN_TABLE (EVEX_LEN_0F6E) }, { PREFIX_TABLE (PREFIX_EVEX_0F6F) }, /* 70 */ { PREFIX_TABLE (PREFIX_EVEX_0F70) }, { REG_TABLE (REG_EVEX_0F71) }, { REG_TABLE (REG_EVEX_0F72) }, { REG_TABLE (REG_EVEX_0F73) }, - { PREFIX_TABLE (PREFIX_EVEX_0F74) }, - { PREFIX_TABLE (PREFIX_EVEX_0F75) }, - { PREFIX_TABLE (PREFIX_EVEX_0F76) }, + { "vpcmpeqb", { XMask, Vex, EXx }, PREFIX_DATA }, + { "vpcmpeqw", { XMask, Vex, EXx }, PREFIX_DATA }, + { VEX_W_TABLE (EVEX_W_0F76) }, { Bad_Opcode }, /* 78 */ { PREFIX_TABLE (PREFIX_EVEX_0F78) }, @@ -222,8 +222,8 @@ static const struct dis386 evex_table[][256] = { { Bad_Opcode }, { PREFIX_TABLE (PREFIX_EVEX_0FC2) }, { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_EVEX_0FC4) }, - { PREFIX_TABLE (PREFIX_EVEX_0FC5) }, + { EVEX_LEN_TABLE (EVEX_LEN_0FC4) }, + { EVEX_LEN_TABLE (EVEX_LEN_0FC5) }, { "vshufpX", { XM, Vex, EXx, Ib }, PREFIX_OPCODE }, { Bad_Opcode }, /* C8 */ @@ -237,67 +237,67 @@ static const struct dis386 evex_table[][256] = { { Bad_Opcode }, /* D0 */ { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_VEX_0FD1) }, + { "vpsrlw", { XM, Vex, EXxmm }, PREFIX_DATA }, { VEX_W_TABLE (EVEX_W_0FD2) }, { VEX_W_TABLE (EVEX_W_0FD3) }, { VEX_W_TABLE (EVEX_W_0FD4) }, - { PREFIX_TABLE (PREFIX_VEX_0FD5) }, - { PREFIX_TABLE (PREFIX_EVEX_0FD6) }, + { "vpmullw", { XM, Vex, EXx }, PREFIX_DATA }, + { EVEX_LEN_TABLE (EVEX_LEN_0FD6) }, { Bad_Opcode }, /* D8 */ - { PREFIX_TABLE (PREFIX_VEX_0FD8) }, - { PREFIX_TABLE (PREFIX_VEX_0FD9) }, - { PREFIX_TABLE (PREFIX_VEX_0FDA) }, - { PREFIX_TABLE (PREFIX_EVEX_0FDB) }, - { PREFIX_TABLE (PREFIX_VEX_0FDC) }, - { PREFIX_TABLE (PREFIX_VEX_0FDD) }, - { PREFIX_TABLE (PREFIX_VEX_0FDE) }, - { PREFIX_TABLE (PREFIX_EVEX_0FDF) }, + { "vpsubusb", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpsubusw", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpminub", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpand%DQ", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpaddusb", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpaddusw", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpmaxub", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpandn%DQ", { XM, Vex, EXx }, PREFIX_DATA }, /* E0 */ - { PREFIX_TABLE (PREFIX_VEX_0FE0) }, - { PREFIX_TABLE (PREFIX_VEX_0FE1) }, - { PREFIX_TABLE (PREFIX_EVEX_0FE2) }, - { PREFIX_TABLE (PREFIX_VEX_0FE3) }, - { PREFIX_TABLE (PREFIX_VEX_0FE4) }, - { PREFIX_TABLE (PREFIX_VEX_0FE5) }, + { "vpavgb", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpsraw", { XM, Vex, EXxmm }, PREFIX_DATA }, + { "vpsra%DQ", { XM, Vex, EXxmm }, PREFIX_DATA }, + { "vpavgw", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpmulhuw", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpmulhw", { XM, Vex, EXx }, PREFIX_DATA }, { PREFIX_TABLE (PREFIX_EVEX_0FE6) }, - { PREFIX_TABLE (PREFIX_EVEX_0FE7) }, + { VEX_W_TABLE (EVEX_W_0FE7) }, /* E8 */ - { PREFIX_TABLE (PREFIX_VEX_0FE8) }, - { PREFIX_TABLE (PREFIX_VEX_0FE9) }, - { PREFIX_TABLE (PREFIX_VEX_0FEA) }, - { PREFIX_TABLE (PREFIX_EVEX_0FEB) }, - { PREFIX_TABLE (PREFIX_VEX_0FEC) }, - { PREFIX_TABLE (PREFIX_VEX_0FED) }, - { PREFIX_TABLE (PREFIX_VEX_0FEE) }, - { PREFIX_TABLE (PREFIX_EVEX_0FEF) }, + { "vpsubsb", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpsubsw", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpminsw", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpor%DQ", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpaddsb", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpaddsw", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpmaxsw", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpxor%DQ", { XM, Vex, EXx }, PREFIX_DATA }, /* F0 */ { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_VEX_0FF1) }, + { "vpsllw", { XM, Vex, EXxmm }, PREFIX_DATA }, { VEX_W_TABLE (EVEX_W_0FF2) }, { VEX_W_TABLE (EVEX_W_0FF3) }, { VEX_W_TABLE (EVEX_W_0FF4) }, - { PREFIX_TABLE (PREFIX_VEX_0FF5) }, - { PREFIX_TABLE (PREFIX_VEX_0FF6) }, + { "vpmaddwd", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpsadbw", { XM, Vex, EXx }, PREFIX_DATA }, { Bad_Opcode }, /* F8 */ - { PREFIX_TABLE (PREFIX_VEX_0FF8) }, - { PREFIX_TABLE (PREFIX_VEX_0FF9) }, + { "vpsubb", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpsubw", { XM, Vex, EXx }, PREFIX_DATA }, { VEX_W_TABLE (EVEX_W_0FFA) }, { VEX_W_TABLE (EVEX_W_0FFB) }, - { PREFIX_TABLE (PREFIX_VEX_0FFC) }, - { PREFIX_TABLE (PREFIX_VEX_0FFD) }, + { "vpaddb", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpaddw", { XM, Vex, EXx }, PREFIX_DATA }, { VEX_W_TABLE (EVEX_W_0FFE) }, { Bad_Opcode }, }, /* EVEX_0F38 */ { /* 00 */ - { PREFIX_TABLE (PREFIX_VEX_0F3800) }, + { "vpshufb", { XM, Vex, EXx }, PREFIX_DATA }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_VEX_0F3804) }, + { "vpmaddubsw", { XM, Vex, EXx }, PREFIX_DATA }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, @@ -305,9 +305,9 @@ static const struct dis386 evex_table[][256] = { { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_VEX_0F380B) }, - { PREFIX_TABLE (PREFIX_VEX_0F380C) }, - { PREFIX_TABLE (PREFIX_EVEX_0F380D) }, + { "vpmulhrsw", { XM, Vex, EXx }, PREFIX_DATA }, + { VEX_W_TABLE (VEX_W_0F380C) }, + { VEX_W_TABLE (EVEX_W_0F380D) }, { Bad_Opcode }, { Bad_Opcode }, /* 10 */ @@ -317,17 +317,17 @@ static const struct dis386 evex_table[][256] = { { PREFIX_TABLE (PREFIX_EVEX_0F3813) }, { PREFIX_TABLE (PREFIX_EVEX_0F3814) }, { PREFIX_TABLE (PREFIX_EVEX_0F3815) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3816) }, + { EVEX_LEN_TABLE (EVEX_LEN_0F3816) }, { Bad_Opcode }, /* 18 */ - { PREFIX_TABLE (PREFIX_VEX_0F3818) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3819) }, - { PREFIX_TABLE (PREFIX_EVEX_0F381A) }, - { PREFIX_TABLE (PREFIX_EVEX_0F381B) }, - { PREFIX_TABLE (PREFIX_VEX_0F381C) }, - { PREFIX_TABLE (PREFIX_VEX_0F381D) }, - { PREFIX_TABLE (PREFIX_EVEX_0F381E) }, - { PREFIX_TABLE (PREFIX_EVEX_0F381F) }, + { VEX_W_TABLE (VEX_W_0F3818) }, + { VEX_W_TABLE (EVEX_W_0F3819) }, + { VEX_W_TABLE (EVEX_W_0F381A) }, + { VEX_W_TABLE (EVEX_W_0F381B) }, + { "vpabsb", { XM, EXx }, PREFIX_DATA }, + { "vpabsw", { XM, EXx }, PREFIX_DATA }, + { VEX_W_TABLE (EVEX_W_0F381E) }, + { VEX_W_TABLE (EVEX_W_0F381F) }, /* 20 */ { PREFIX_TABLE (PREFIX_EVEX_0F3820) }, { PREFIX_TABLE (PREFIX_EVEX_0F3821) }, @@ -342,8 +342,8 @@ static const struct dis386 evex_table[][256] = { { PREFIX_TABLE (PREFIX_EVEX_0F3829) }, { PREFIX_TABLE (PREFIX_EVEX_0F382A) }, { VEX_W_TABLE (EVEX_W_0F382B) }, - { PREFIX_TABLE (PREFIX_EVEX_0F382C) }, - { PREFIX_TABLE (PREFIX_EVEX_0F382D) }, + { "vscalefp%XW", { XM, Vex, EXx, EXxEVexR }, PREFIX_DATA }, + { "vscalefs%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexR }, PREFIX_DATA }, { Bad_Opcode }, { Bad_Opcode }, /* 30 */ @@ -353,49 +353,49 @@ static const struct dis386 evex_table[][256] = { { PREFIX_TABLE (PREFIX_EVEX_0F3833) }, { PREFIX_TABLE (PREFIX_EVEX_0F3834) }, { PREFIX_TABLE (PREFIX_EVEX_0F3835) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3836) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3837) }, + { EVEX_LEN_TABLE (EVEX_LEN_0F3836) }, + { VEX_W_TABLE (EVEX_W_0F3837) }, /* 38 */ { PREFIX_TABLE (PREFIX_EVEX_0F3838) }, { PREFIX_TABLE (PREFIX_EVEX_0F3839) }, { PREFIX_TABLE (PREFIX_EVEX_0F383A) }, - { PREFIX_TABLE (PREFIX_EVEX_0F383B) }, - { PREFIX_TABLE (PREFIX_VEX_0F383C) }, - { PREFIX_TABLE (PREFIX_EVEX_0F383D) }, - { PREFIX_TABLE (PREFIX_VEX_0F383E) }, - { PREFIX_TABLE (PREFIX_EVEX_0F383F) }, + { "vpminu%DQ", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpmaxsb", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpmaxs%DQ", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpmaxuw", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpmaxu%DQ", { XM, Vex, EXx }, PREFIX_DATA }, /* 40 */ - { PREFIX_TABLE (PREFIX_EVEX_0F3840) }, - { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_EVEX_0F3842) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3843) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3844) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3845) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3846) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3847) }, + { "vpmull%DQ", { XM, Vex, EXx }, PREFIX_DATA }, + { Bad_Opcode }, + { "vgetexpp%XW", { XM, EXx, EXxEVexS }, PREFIX_DATA }, + { "vgetexps%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexS }, PREFIX_DATA }, + { "vplzcnt%DQ", { XM, EXx }, PREFIX_DATA }, + { "vpsrlv%DQ", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpsrav%DQ", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpsllv%DQ", { XM, Vex, EXx }, PREFIX_DATA }, /* 48 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_EVEX_0F384C) }, - { PREFIX_TABLE (PREFIX_EVEX_0F384D) }, - { PREFIX_TABLE (PREFIX_EVEX_0F384E) }, - { PREFIX_TABLE (PREFIX_EVEX_0F384F) }, + { "vrcp14p%XW", { XM, EXx }, PREFIX_DATA }, + { "vrcp14s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, PREFIX_DATA }, + { "vrsqrt14p%XW", { XM, EXx }, 0 }, + { "vrsqrt14s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, PREFIX_DATA }, /* 50 */ - { PREFIX_TABLE (PREFIX_EVEX_0F3850) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3851) }, + { "vpdpbusd", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpdpbusds", { XM, Vex, EXx }, PREFIX_DATA }, { PREFIX_TABLE (PREFIX_EVEX_0F3852) }, { PREFIX_TABLE (PREFIX_EVEX_0F3853) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3854) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3855) }, + { "vpopcnt%BW", { XM, EXx }, PREFIX_DATA }, + { "vpopcnt%DQ", { XM, EXx }, PREFIX_DATA }, { Bad_Opcode }, { Bad_Opcode }, /* 58 */ - { PREFIX_TABLE (PREFIX_VEX_0F3858) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3859) }, - { PREFIX_TABLE (PREFIX_EVEX_0F385A) }, - { PREFIX_TABLE (PREFIX_EVEX_0F385B) }, + { VEX_W_TABLE (VEX_W_0F3858) }, + { VEX_W_TABLE (EVEX_W_0F3859) }, + { VEX_W_TABLE (EVEX_W_0F385A) }, + { VEX_W_TABLE (EVEX_W_0F385B) }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, @@ -403,11 +403,11 @@ static const struct dis386 evex_table[][256] = { /* 60 */ { Bad_Opcode }, { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_EVEX_0F3862) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3863) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3864) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3865) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3866) }, + { "vpexpand%BW", { XM, EXbwUnit }, PREFIX_DATA }, + { "vpcompress%BW", { EXbwUnit, XM }, PREFIX_DATA }, + { "vpblendm%DQ", { XM, Vex, EXx }, PREFIX_DATA }, + { "vblendmp%XW", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpblendm%BW", { XM, Vex, EXx }, PREFIX_DATA }, { Bad_Opcode }, /* 68 */ { PREFIX_TABLE (PREFIX_EVEX_0F3868) }, @@ -419,113 +419,113 @@ static const struct dis386 evex_table[][256] = { { Bad_Opcode }, { Bad_Opcode }, /* 70 */ - { PREFIX_TABLE (PREFIX_EVEX_0F3870) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3871) }, + { VEX_W_TABLE (EVEX_W_0F3870) }, + { "vpshldv%DQ", { XM, Vex, EXx }, PREFIX_DATA }, { PREFIX_TABLE (PREFIX_EVEX_0F3872) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3873) }, + { "vpshrdv%DQ", { XM, Vex, EXx }, PREFIX_DATA }, { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_EVEX_0F3875) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3876) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3877) }, + { "vpermi2%BW", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpermi2%DQ", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpermi2p%XW", { XM, Vex, EXx }, PREFIX_DATA }, /* 78 */ - { PREFIX_TABLE (PREFIX_VEX_0F3878) }, - { PREFIX_TABLE (PREFIX_VEX_0F3879) }, - { PREFIX_TABLE (PREFIX_EVEX_0F387A) }, - { PREFIX_TABLE (PREFIX_EVEX_0F387B) }, - { PREFIX_TABLE (PREFIX_EVEX_0F387C) }, - { PREFIX_TABLE (PREFIX_EVEX_0F387D) }, - { PREFIX_TABLE (PREFIX_EVEX_0F387E) }, - { PREFIX_TABLE (PREFIX_EVEX_0F387F) }, + { VEX_W_TABLE (VEX_W_0F3878) }, + { VEX_W_TABLE (VEX_W_0F3879) }, + { VEX_W_TABLE (EVEX_W_0F387A) }, + { VEX_W_TABLE (EVEX_W_0F387B) }, + { "vpbroadcastK", { XM, Rdq }, PREFIX_DATA }, + { "vpermt2%BW", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpermt2%DQ", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpermt2p%XW", { XM, Vex, EXx }, PREFIX_DATA }, /* 80 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_EVEX_0F3883) }, + { VEX_W_TABLE (EVEX_W_0F3883) }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, /* 88 */ - { PREFIX_TABLE (PREFIX_EVEX_0F3888) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3889) }, - { PREFIX_TABLE (PREFIX_EVEX_0F388A) }, - { PREFIX_TABLE (PREFIX_EVEX_0F388B) }, + { "vexpandp%XW", { XM, EXEvexXGscat }, PREFIX_DATA }, + { "vpexpand%DQ", { XM, EXEvexXGscat }, PREFIX_DATA }, + { "vcompressp%XW", { EXEvexXGscat, XM }, PREFIX_DATA }, + { "vpcompress%DQ", { EXEvexXGscat, XM }, PREFIX_DATA }, { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_EVEX_0F388D) }, + { "vperm%BW", { XM, Vex, EXx }, PREFIX_DATA }, { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_EVEX_0F388F) }, + { "vpshufbitqmb", { XMask, Vex, EXx }, PREFIX_DATA }, /* 90 */ - { PREFIX_TABLE (PREFIX_EVEX_0F3890) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3891) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3892) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3893) }, + { "vpgatherd%DQ", { XM, MVexVSIBDWpX }, PREFIX_DATA }, + { VEX_W_TABLE (EVEX_W_0F3891) }, + { "vgatherdp%XW", { XM, MVexVSIBDWpX}, PREFIX_DATA }, + { VEX_W_TABLE (EVEX_W_0F3893) }, { Bad_Opcode }, { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_VEX_0F3896) }, - { PREFIX_TABLE (PREFIX_VEX_0F3897) }, + { "vfmaddsub132p%XW", { XM, Vex, EXx, EXxEVexR }, PREFIX_DATA }, + { "vfmsubadd132p%XW", { XM, Vex, EXx, EXxEVexR }, PREFIX_DATA }, /* 98 */ - { PREFIX_TABLE (PREFIX_VEX_0F3898) }, - { PREFIX_TABLE (PREFIX_VEX_0F3899) }, + { "vfmadd132p%XW", { XM, Vex, EXx, EXxEVexR }, PREFIX_DATA }, + { "vfmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexR }, PREFIX_DATA }, { PREFIX_TABLE (PREFIX_EVEX_0F389A) }, { PREFIX_TABLE (PREFIX_EVEX_0F389B) }, - { PREFIX_TABLE (PREFIX_VEX_0F389C) }, - { PREFIX_TABLE (PREFIX_VEX_0F389D) }, - { PREFIX_TABLE (PREFIX_VEX_0F389E) }, - { PREFIX_TABLE (PREFIX_VEX_0F389F) }, + { "vfnmadd132p%XW", { XM, Vex, EXx, EXxEVexR }, PREFIX_DATA }, + { "vfnmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexR }, PREFIX_DATA }, + { "vfnmsub132p%XW", { XM, Vex, EXx, EXxEVexR }, PREFIX_DATA }, + { "vfnmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexR }, PREFIX_DATA }, /* A0 */ - { PREFIX_TABLE (PREFIX_EVEX_0F38A0) }, - { PREFIX_TABLE (PREFIX_EVEX_0F38A1) }, - { PREFIX_TABLE (PREFIX_EVEX_0F38A2) }, - { PREFIX_TABLE (PREFIX_EVEX_0F38A3) }, + { "vpscatterd%DQ", { MVexVSIBDWpX, XM }, PREFIX_DATA }, + { VEX_W_TABLE (EVEX_W_0F38A1) }, + { "vscatterdp%XW", { MVexVSIBDWpX, XM }, PREFIX_DATA }, + { VEX_W_TABLE (EVEX_W_0F38A3) }, { Bad_Opcode }, { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_VEX_0F38A6) }, - { PREFIX_TABLE (PREFIX_VEX_0F38A7) }, + { "vfmaddsub213p%XW", { XM, Vex, EXx, EXxEVexR }, PREFIX_DATA }, + { "vfmsubadd213p%XW", { XM, Vex, EXx, EXxEVexR }, PREFIX_DATA }, /* A8 */ - { PREFIX_TABLE (PREFIX_VEX_0F38A8) }, - { PREFIX_TABLE (PREFIX_VEX_0F38A9) }, + { "vfmadd213p%XW", { XM, Vex, EXx, EXxEVexR }, PREFIX_DATA }, + { "vfmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexR }, PREFIX_DATA }, { PREFIX_TABLE (PREFIX_EVEX_0F38AA) }, { PREFIX_TABLE (PREFIX_EVEX_0F38AB) }, - { PREFIX_TABLE (PREFIX_VEX_0F38AC) }, - { PREFIX_TABLE (PREFIX_VEX_0F38AD) }, - { PREFIX_TABLE (PREFIX_VEX_0F38AE) }, - { PREFIX_TABLE (PREFIX_VEX_0F38AF) }, + { "vfnmadd213p%XW", { XM, Vex, EXx, EXxEVexR }, PREFIX_DATA }, + { "vfnmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexR }, PREFIX_DATA }, + { "vfnmsub213p%XW", { XM, Vex, EXx, EXxEVexR }, PREFIX_DATA }, + { "vfnmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexR }, PREFIX_DATA }, /* B0 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_EVEX_0F38B4) }, - { PREFIX_TABLE (PREFIX_EVEX_0F38B5) }, - { PREFIX_TABLE (PREFIX_VEX_0F38B6) }, - { PREFIX_TABLE (PREFIX_VEX_0F38B7) }, + { "vpmadd52luq", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpmadd52huq", { XM, Vex, EXx }, PREFIX_DATA }, + { "vfmaddsub231p%XW", { XM, Vex, EXx, EXxEVexR }, PREFIX_DATA }, + { "vfmsubadd231p%XW", { XM, Vex, EXx, EXxEVexR }, PREFIX_DATA }, /* B8 */ - { PREFIX_TABLE (PREFIX_VEX_0F38B8) }, - { PREFIX_TABLE (PREFIX_VEX_0F38B9) }, - { PREFIX_TABLE (PREFIX_VEX_0F38BA) }, - { PREFIX_TABLE (PREFIX_VEX_0F38BB) }, - { PREFIX_TABLE (PREFIX_VEX_0F38BC) }, - { PREFIX_TABLE (PREFIX_VEX_0F38BD) }, - { PREFIX_TABLE (PREFIX_VEX_0F38BE) }, - { PREFIX_TABLE (PREFIX_VEX_0F38BF) }, + { "vfmadd231p%XW", { XM, Vex, EXx, EXxEVexR }, PREFIX_DATA }, + { "vfmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexR }, PREFIX_DATA }, + { "vfmsub231p%XW", { XM, Vex, EXx, EXxEVexR }, PREFIX_DATA }, + { "vfmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexR }, PREFIX_DATA }, + { "vfnmadd231p%XW", { XM, Vex, EXx, EXxEVexR }, PREFIX_DATA }, + { "vfnmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexR }, PREFIX_DATA }, + { "vfnmsub231p%XW", { XM, Vex, EXx, EXxEVexR }, PREFIX_DATA }, + { "vfnmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexR }, PREFIX_DATA }, /* C0 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_EVEX_0F38C4) }, + { "vpconflict%DQ", { XM, EXx }, PREFIX_DATA }, { Bad_Opcode }, { REG_TABLE (REG_EVEX_0F38C6) }, { REG_TABLE (REG_EVEX_0F38C7) }, /* C8 */ - { PREFIX_TABLE (PREFIX_EVEX_0F38C8) }, + { "vexp2p%XW", { XM, EXx, EXxEVexS }, PREFIX_DATA }, { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_EVEX_0F38CA) }, - { PREFIX_TABLE (PREFIX_EVEX_0F38CB) }, - { PREFIX_TABLE (PREFIX_EVEX_0F38CC) }, - { PREFIX_TABLE (PREFIX_EVEX_0F38CD) }, + { "vrcp28p%XW", { XM, EXx, EXxEVexS }, PREFIX_DATA }, + { "vrcp28s%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexS }, PREFIX_DATA }, + { "vrsqrt28p%XW", { XM, EXx, EXxEVexS }, PREFIX_DATA }, + { "vrsqrt28s%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexS }, PREFIX_DATA }, { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_VEX_0F38CF) }, + { VEX_W_TABLE (VEX_W_0F38CF) }, /* D0 */ { Bad_Opcode }, { Bad_Opcode }, @@ -540,10 +540,10 @@ static const struct dis386 evex_table[][256] = { { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_VEX_0F38DC) }, - { PREFIX_TABLE (PREFIX_VEX_0F38DD) }, - { PREFIX_TABLE (PREFIX_VEX_0F38DE) }, - { PREFIX_TABLE (PREFIX_VEX_0F38DF) }, + { "vaesenc", { XM, Vex, EXx }, PREFIX_DATA }, + { "vaesenclast", { XM, Vex, EXx }, PREFIX_DATA }, + { "vaesdec", { XM, Vex, EXx }, PREFIX_DATA }, + { "vaesdeclast", { XM, Vex, EXx }, PREFIX_DATA }, /* E0 */ { Bad_Opcode }, { Bad_Opcode }, @@ -584,50 +584,50 @@ static const struct dis386 evex_table[][256] = { /* EVEX_0F3A */ { /* 00 */ - { PREFIX_TABLE (PREFIX_EVEX_0F3A00) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A01) }, + { VEX_W_TABLE (EVEX_W_0F3A00) }, + { VEX_W_TABLE (EVEX_W_0F3A01) }, { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A03) }, - { PREFIX_TABLE (PREFIX_VEX_0F3A04) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A05) }, + { "valign%DQ", { XM, Vex, EXx, Ib }, PREFIX_DATA }, + { VEX_W_TABLE (VEX_W_0F3A04) }, + { VEX_W_TABLE (EVEX_W_0F3A05) }, { Bad_Opcode }, { Bad_Opcode }, /* 08 */ - { PREFIX_TABLE (PREFIX_EVEX_0F3A08) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A09) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A0A) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A0B) }, + { VEX_W_TABLE (EVEX_W_0F3A08) }, + { VEX_W_TABLE (EVEX_W_0F3A09) }, + { VEX_W_TABLE (EVEX_W_0F3A0A) }, + { VEX_W_TABLE (EVEX_W_0F3A0B) }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_VEX_0F3A0F) }, + { "vpalignr", { XM, Vex, EXx, Ib }, PREFIX_DATA }, /* 10 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A14) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A15) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A16) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A17) }, + { EVEX_LEN_TABLE (EVEX_LEN_0F3A14) }, + { EVEX_LEN_TABLE (EVEX_LEN_0F3A15) }, + { EVEX_LEN_TABLE (EVEX_LEN_0F3A16) }, + { EVEX_LEN_TABLE (EVEX_LEN_0F3A17) }, /* 18 */ - { PREFIX_TABLE (PREFIX_EVEX_0F3A18) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A19) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A1A) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A1B) }, - { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_VEX_0F3A1D) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A1E) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A1F) }, + { VEX_W_TABLE (EVEX_W_0F3A18) }, + { VEX_W_TABLE (EVEX_W_0F3A19) }, + { VEX_W_TABLE (EVEX_W_0F3A1A) }, + { VEX_W_TABLE (EVEX_W_0F3A1B) }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3A1D) }, + { "vpcmpu%DQ", { XMask, Vex, EXx, VPCMP }, PREFIX_DATA }, + { "vpcmp%DQ", { XMask, Vex, EXx, VPCMP }, PREFIX_DATA }, /* 20 */ - { PREFIX_TABLE (PREFIX_EVEX_0F3A20) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A21) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A22) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A23) }, - { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A25) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A26) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A27) }, + { EVEX_LEN_TABLE (EVEX_LEN_0F3A20) }, + { VEX_W_TABLE (EVEX_W_0F3A21) }, + { EVEX_LEN_TABLE (EVEX_LEN_0F3A22) }, + { VEX_W_TABLE (EVEX_W_0F3A23) }, + { Bad_Opcode }, + { "vpternlog%DQ", { XM, Vex, EXx, Ib }, PREFIX_DATA }, + { "vgetmantp%XW", { XM, EXx, EXxEVexS, Ib }, PREFIX_DATA }, + { "vgetmants%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexS, Ib }, PREFIX_DATA }, /* 28 */ { Bad_Opcode }, { Bad_Opcode }, @@ -647,20 +647,20 @@ static const struct dis386 evex_table[][256] = { { Bad_Opcode }, { Bad_Opcode }, /* 38 */ - { PREFIX_TABLE (PREFIX_EVEX_0F3A38) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A39) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A3A) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A3B) }, + { VEX_W_TABLE (EVEX_W_0F3A38) }, + { VEX_W_TABLE (EVEX_W_0F3A39) }, + { VEX_W_TABLE (EVEX_W_0F3A3A) }, + { VEX_W_TABLE (EVEX_W_0F3A3B) }, { Bad_Opcode }, { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A3E) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A3F) }, + { "vpcmpu%BW", { XMask, Vex, EXx, VPCMP }, PREFIX_DATA }, + { "vpcmp%BW", { XMask, Vex, EXx, VPCMP }, PREFIX_DATA }, /* 40 */ { Bad_Opcode }, { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A42) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A43) }, - { PREFIX_TABLE (PREFIX_VEX_0F3A44) }, + { VEX_W_TABLE (EVEX_W_0F3A42) }, + { VEX_W_TABLE (EVEX_W_0F3A43) }, + { "vpclmulqdq", { XM, Vex, EXx, PCLMUL }, PREFIX_DATA }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, @@ -674,14 +674,14 @@ static const struct dis386 evex_table[][256] = { { Bad_Opcode }, { Bad_Opcode }, /* 50 */ - { PREFIX_TABLE (PREFIX_EVEX_0F3A50) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A51) }, + { "vrangep%XW", { XM, Vex, EXx, EXxEVexS, Ib }, PREFIX_DATA }, + { "vranges%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexS, Ib }, PREFIX_DATA }, { Bad_Opcode }, { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A54) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A55) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A56) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A57) }, + { "vfixupimmp%XW", { XM, Vex, EXx, EXxEVexS, Ib }, PREFIX_DATA }, + { "vfixupimms%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexS, Ib }, PREFIX_DATA }, + { "vreducep%XW", { XM, EXx, EXxEVexS, Ib }, PREFIX_DATA }, + { "vreduces%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexS, Ib }, PREFIX_DATA }, /* 58 */ { Bad_Opcode }, { Bad_Opcode }, @@ -698,8 +698,8 @@ static const struct dis386 evex_table[][256] = { { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A66) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A67) }, + { "vfpclassp%XW%XZ", { XMask, EXx, Ib }, PREFIX_DATA }, + { "vfpclasss%XW", { XMask, EXVexWdqScalar, Ib }, PREFIX_DATA }, /* 68 */ { Bad_Opcode }, { Bad_Opcode }, @@ -710,10 +710,10 @@ static const struct dis386 evex_table[][256] = { { Bad_Opcode }, { Bad_Opcode }, /* 70 */ - { PREFIX_TABLE (PREFIX_EVEX_0F3A70) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A71) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A72) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A73) }, + { VEX_W_TABLE (EVEX_W_0F3A70) }, + { "vpshld%DQ", { XM, Vex, EXx, Ib }, PREFIX_DATA }, + { VEX_W_TABLE (EVEX_W_0F3A72) }, + { "vpshrd%DQ", { XM, Vex, EXx, Ib }, PREFIX_DATA }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, @@ -815,8 +815,8 @@ static const struct dis386 evex_table[][256] = { { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_VEX_0F3ACE) }, - { PREFIX_TABLE (PREFIX_VEX_0F3ACF) }, + { VEX_W_TABLE (VEX_W_0F3ACE) }, + { VEX_W_TABLE (VEX_W_0F3ACF) }, /* D0 */ { Bad_Opcode }, { Bad_Opcode }, |