]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blobdiff - opcodes/i386-dis-evex-prefix.h
x86: AVX512 VPERM{D,Q,PS,PD} insns need to honor EVEX.L'L
[thirdparty/binutils-gdb.git] / opcodes / i386-dis-evex-prefix.h
index 86bae37834b7eef0254873440867644135cd1867..25514dbfc7ea071851c8004eb41c1e14527c47a9 100644 (file)
@@ -1,65 +1,29 @@
   /* PREFIX_EVEX_0F10 */
   {
-    { VEX_W_TABLE (EVEX_W_0F10_P_0) },
+    { "vmovupX",       { XM, EXEvexXNoBcst }, PREFIX_OPCODE },
     { VEX_W_TABLE (EVEX_W_0F10_P_1) },
-    { VEX_W_TABLE (EVEX_W_0F10_P_2) },
+    { "vmovupX",       { XM, EXEvexXNoBcst }, PREFIX_OPCODE },
     { VEX_W_TABLE (EVEX_W_0F10_P_3) },
   },
   /* PREFIX_EVEX_0F11 */
   {
-    { VEX_W_TABLE (EVEX_W_0F11_P_0) },
+    { "vmovupX",       { EXxS, XM }, PREFIX_OPCODE },
     { VEX_W_TABLE (EVEX_W_0F11_P_1) },
-    { VEX_W_TABLE (EVEX_W_0F11_P_2) },
+    { "vmovupX",       { EXxS, XM }, PREFIX_OPCODE },
     { VEX_W_TABLE (EVEX_W_0F11_P_3) },
   },
   /* PREFIX_EVEX_0F12 */
   {
     { MOD_TABLE (MOD_EVEX_0F12_PREFIX_0) },
     { VEX_W_TABLE (EVEX_W_0F12_P_1) },
-    { VEX_W_TABLE (EVEX_W_0F12_P_2) },
+    { MOD_TABLE (MOD_EVEX_0F12_PREFIX_2) },
     { VEX_W_TABLE (EVEX_W_0F12_P_3) },
   },
-  /* PREFIX_EVEX_0F13 */
-  {
-    { VEX_W_TABLE (EVEX_W_0F13_P_0) },
-    { Bad_Opcode },
-    { VEX_W_TABLE (EVEX_W_0F13_P_2) },
-  },
-  /* PREFIX_EVEX_0F14 */
-  {
-    { VEX_W_TABLE (EVEX_W_0F14_P_0) },
-    { Bad_Opcode },
-    { VEX_W_TABLE (EVEX_W_0F14_P_2) },
-  },
-  /* PREFIX_EVEX_0F15 */
-  {
-    { VEX_W_TABLE (EVEX_W_0F15_P_0) },
-    { Bad_Opcode },
-    { VEX_W_TABLE (EVEX_W_0F15_P_2) },
-  },
   /* PREFIX_EVEX_0F16 */
   {
     { MOD_TABLE (MOD_EVEX_0F16_PREFIX_0) },
     { VEX_W_TABLE (EVEX_W_0F16_P_1) },
-    { VEX_W_TABLE (EVEX_W_0F16_P_2) },
-  },
-  /* PREFIX_EVEX_0F17 */
-  {
-    { VEX_W_TABLE (EVEX_W_0F17_P_0) },
-    { Bad_Opcode },
-    { VEX_W_TABLE (EVEX_W_0F17_P_2) },
-  },
-  /* PREFIX_EVEX_0F28 */
-  {
-    { VEX_W_TABLE (EVEX_W_0F28_P_0) },
-    { Bad_Opcode },
-    { VEX_W_TABLE (EVEX_W_0F28_P_2) },
-  },
-  /* PREFIX_EVEX_0F29 */
-  {
-    { VEX_W_TABLE (EVEX_W_0F29_P_0) },
-    { Bad_Opcode },
-    { VEX_W_TABLE (EVEX_W_0F29_P_2) },
+    { MOD_TABLE (MOD_EVEX_0F16_PREFIX_2) },
   },
   /* PREFIX_EVEX_0F2A */
   {
     { Bad_Opcode },
     { VEX_W_TABLE (EVEX_W_0F2A_P_3) },
   },
-  /* PREFIX_EVEX_0F2B */
-  {
-    { VEX_W_TABLE (EVEX_W_0F2B_P_0) },
-    { Bad_Opcode },
-    { VEX_W_TABLE (EVEX_W_0F2B_P_2) },
-  },
   /* PREFIX_EVEX_0F2C */
   {
     { Bad_Opcode },
   },
   /* PREFIX_EVEX_0F2E */
   {
-    { VEX_W_TABLE (EVEX_W_0F2E_P_0) },
+    { "vucomisX",      { XMScalar, EXxmm_md, EXxEVexS }, PREFIX_OPCODE },
     { Bad_Opcode },
-    { VEX_W_TABLE (EVEX_W_0F2E_P_2) },
+    { "vucomisX",      { XMScalar, EXxmm_mq, EXxEVexS }, PREFIX_OPCODE },
   },
   /* PREFIX_EVEX_0F2F */
   {
-    { VEX_W_TABLE (EVEX_W_0F2F_P_0) },
+    { "vcomisX",       { XMScalar, EXxmm_md, EXxEVexS }, PREFIX_OPCODE },
     { Bad_Opcode },
-    { VEX_W_TABLE (EVEX_W_0F2F_P_2) },
+    { "vcomisX",       { XMScalar, EXxmm_mq, EXxEVexS }, PREFIX_OPCODE },
   },
   /* PREFIX_EVEX_0F51 */
   {
-    { VEX_W_TABLE (EVEX_W_0F51_P_0) },
+    { "vsqrtpX",       { XM, EXx, EXxEVexR }, PREFIX_OPCODE },
     { VEX_W_TABLE (EVEX_W_0F51_P_1) },
-    { VEX_W_TABLE (EVEX_W_0F51_P_2) },
+    { "vsqrtpX",       { XM, EXx, EXxEVexR }, PREFIX_OPCODE },
     { VEX_W_TABLE (EVEX_W_0F51_P_3) },
   },
-  /* PREFIX_EVEX_0F54 */
-  {
-    { VEX_W_TABLE (EVEX_W_0F54_P_0) },
-    { Bad_Opcode },
-    { VEX_W_TABLE (EVEX_W_0F54_P_2) },
-  },
-  /* PREFIX_EVEX_0F55 */
-  {
-    { VEX_W_TABLE (EVEX_W_0F55_P_0) },
-    { Bad_Opcode },
-    { VEX_W_TABLE (EVEX_W_0F55_P_2) },
-  },
-  /* PREFIX_EVEX_0F56 */
-  {
-    { VEX_W_TABLE (EVEX_W_0F56_P_0) },
-    { Bad_Opcode },
-    { VEX_W_TABLE (EVEX_W_0F56_P_2) },
-  },
-  /* PREFIX_EVEX_0F57 */
-  {
-    { VEX_W_TABLE (EVEX_W_0F57_P_0) },
-    { Bad_Opcode },
-    { VEX_W_TABLE (EVEX_W_0F57_P_2) },
-  },
   /* PREFIX_EVEX_0F58 */
   {
-    { VEX_W_TABLE (EVEX_W_0F58_P_0) },
+    { "vaddpX",        { XM, Vex, EXx, EXxEVexR }, PREFIX_OPCODE },
     { VEX_W_TABLE (EVEX_W_0F58_P_1) },
-    { VEX_W_TABLE (EVEX_W_0F58_P_2) },
+    { "vaddpX",        { XM, Vex, EXx, EXxEVexR }, PREFIX_OPCODE },
     { VEX_W_TABLE (EVEX_W_0F58_P_3) },
   },
   /* PREFIX_EVEX_0F59 */
   {
-    { VEX_W_TABLE (EVEX_W_0F59_P_0) },
+    { "vmulpX",        { XM, Vex, EXx, EXxEVexR }, PREFIX_OPCODE },
     { VEX_W_TABLE (EVEX_W_0F59_P_1) },
-    { VEX_W_TABLE (EVEX_W_0F59_P_2) },
+    { "vmulpX",        { XM, Vex, EXx, EXxEVexR }, PREFIX_OPCODE },
     { VEX_W_TABLE (EVEX_W_0F59_P_3) },
   },
   /* PREFIX_EVEX_0F5A */
   },
   /* PREFIX_EVEX_0F5C */
   {
-    { VEX_W_TABLE (EVEX_W_0F5C_P_0) },
+    { "vsubpX",        { XM, Vex, EXx, EXxEVexR }, PREFIX_OPCODE },
     { VEX_W_TABLE (EVEX_W_0F5C_P_1) },
-    { VEX_W_TABLE (EVEX_W_0F5C_P_2) },
+    { "vsubpX",        { XM, Vex, EXx, EXxEVexR }, PREFIX_OPCODE },
     { VEX_W_TABLE (EVEX_W_0F5C_P_3) },
   },
   /* PREFIX_EVEX_0F5D */
   {
-    { VEX_W_TABLE (EVEX_W_0F5D_P_0) },
+    { "vminpX",        { XM, Vex, EXx, EXxEVexS }, PREFIX_OPCODE },
     { VEX_W_TABLE (EVEX_W_0F5D_P_1) },
-    { VEX_W_TABLE (EVEX_W_0F5D_P_2) },
+    { "vminpX",        { XM, Vex, EXx, EXxEVexS }, PREFIX_OPCODE },
     { VEX_W_TABLE (EVEX_W_0F5D_P_3) },
   },
   /* PREFIX_EVEX_0F5E */
   {
-    { VEX_W_TABLE (EVEX_W_0F5E_P_0) },
+    { "vdivpX",        { XM, Vex, EXx, EXxEVexR }, PREFIX_OPCODE },
     { VEX_W_TABLE (EVEX_W_0F5E_P_1) },
-    { VEX_W_TABLE (EVEX_W_0F5E_P_2) },
+    { "vdivpX",        { XM, Vex, EXx, EXxEVexR }, PREFIX_OPCODE },
     { VEX_W_TABLE (EVEX_W_0F5E_P_3) },
   },
   /* PREFIX_EVEX_0F5F */
   {
-    { VEX_W_TABLE (EVEX_W_0F5F_P_0) },
+    { "vmaxpX",        { XM, Vex, EXx, EXxEVexS }, PREFIX_OPCODE },
     { VEX_W_TABLE (EVEX_W_0F5F_P_1) },
-    { VEX_W_TABLE (EVEX_W_0F5F_P_2) },
+    { "vmaxpX",        { XM, Vex, EXx, EXxEVexS }, PREFIX_OPCODE },
     { VEX_W_TABLE (EVEX_W_0F5F_P_3) },
   },
-  /* PREFIX_EVEX_0F60 */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vpunpcklbw",    { XM, Vex, EXx }, 0 },
-  },
-  /* PREFIX_EVEX_0F61 */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vpunpcklwd",    { XM, Vex, EXx }, 0 },
-  },
   /* PREFIX_EVEX_0F62 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
     { VEX_W_TABLE (EVEX_W_0F62_P_2) },
   },
-  /* PREFIX_EVEX_0F63 */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vpacksswb",     { XM, Vex, EXx }, 0 },
-  },
   /* PREFIX_EVEX_0F64 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
     { VEX_W_TABLE (EVEX_W_0F66_P_2) },
   },
-  /* PREFIX_EVEX_0F67 */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vpackuswb",     { XM, Vex, EXx }, 0 },
-  },
-  /* PREFIX_EVEX_0F68 */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vpunpckhbw",    { XM, Vex, EXx }, 0 },
-  },
-  /* PREFIX_EVEX_0F69 */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vpunpckhwd",    { XM, Vex, EXx }, 0 },
-  },
   /* PREFIX_EVEX_0F6A */
   {
     { Bad_Opcode },
   },
   /* PREFIX_EVEX_0FC2 */
   {
-    { VEX_W_TABLE (EVEX_W_0FC2_P_0) },
+    { "vcmppX",        { XMask, Vex, EXx, EXxEVexS, VCMP }, PREFIX_OPCODE },
     { VEX_W_TABLE (EVEX_W_0FC2_P_1) },
-    { VEX_W_TABLE (EVEX_W_0FC2_P_2) },
+    { "vcmppX",        { XMask, Vex, EXx, EXxEVexS, VCMP }, PREFIX_OPCODE },
     { VEX_W_TABLE (EVEX_W_0FC2_P_3) },
   },
   /* PREFIX_EVEX_0FC4 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpinsrw",       { XM, Vex128, Edw, Ib }, 0 },
+    { EVEX_LEN_TABLE (EVEX_LEN_0FC4_P_2) },
   },
   /* PREFIX_EVEX_0FC5 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpextrw",       { Gdq, XS, Ib }, 0 },
-  },
-  /* PREFIX_EVEX_0FC6 */
-  {
-    { VEX_W_TABLE (EVEX_W_0FC6_P_0) },
-    { Bad_Opcode },
-    { VEX_W_TABLE (EVEX_W_0FC6_P_2) },
-  },
-  /* PREFIX_EVEX_0FD1 */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vpsrlw",        { XM, Vex, EXxmm }, 0 },
+    { EVEX_LEN_TABLE (EVEX_LEN_0FC5_P_2) },
   },
   /* PREFIX_EVEX_0FD2 */
   {
     { Bad_Opcode },
     { VEX_W_TABLE (EVEX_W_0FD4_P_2) },
   },
-  /* PREFIX_EVEX_0FD5 */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vpmullw",       { XM, Vex, EXx }, 0 },
-  },
   /* PREFIX_EVEX_0FD6 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
     { EVEX_LEN_TABLE (EVEX_LEN_0FD6_P_2) },
   },
-  /* PREFIX_EVEX_0FD8 */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vpsubusb",      { XM, Vex, EXx }, 0 },
-  },
-  /* PREFIX_EVEX_0FD9 */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vpsubusw",      { XM, Vex, EXx }, 0 },
-  },
-  /* PREFIX_EVEX_0FDA */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vpminub",       { XM, Vex, EXx }, 0 },
-  },
   /* PREFIX_EVEX_0FDB */
   {
     { Bad_Opcode },
     { Bad_Opcode },
     { "vpand%LW",      { XM, Vex, EXx }, 0 },
   },
-  /* PREFIX_EVEX_0FDC */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vpaddusb",      { XM, Vex, EXx }, 0 },
-  },
-  /* PREFIX_EVEX_0FDD */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vpaddusw",      { XM, Vex, EXx }, 0 },
-  },
-  /* PREFIX_EVEX_0FDE */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vpmaxub",       { XM, Vex, EXx }, 0 },
-  },
   /* PREFIX_EVEX_0FDF */
   {
     { Bad_Opcode },
     { Bad_Opcode },
     { "vpandn%LW",     { XM, Vex, EXx }, 0 },
   },
-  /* PREFIX_EVEX_0FE0 */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vpavgb",        { XM, Vex, EXx }, 0 },
-  },
-  /* PREFIX_EVEX_0FE1 */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vpsraw",        { XM, Vex, EXxmm }, 0 },
-  },
   /* PREFIX_EVEX_0FE2 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
     { "vpsra%LW",      { XM, Vex, EXxmm }, 0 },
   },
-  /* PREFIX_EVEX_0FE3 */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vpavgw",        { XM, Vex, EXx }, 0 },
-  },
-  /* PREFIX_EVEX_0FE4 */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vpmulhuw",      { XM, Vex, EXx }, 0 },
-  },
-  /* PREFIX_EVEX_0FE5 */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vpmulhw",       { XM, Vex, EXx }, 0 },
-  },
   /* PREFIX_EVEX_0FE6 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
     { VEX_W_TABLE (EVEX_W_0FE7_P_2) },
   },
-  /* PREFIX_EVEX_0FE8 */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vpsubsb",       { XM, Vex, EXx }, 0 },
-  },
-  /* PREFIX_EVEX_0FE9 */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vpsubsw",       { XM, Vex, EXx }, 0 },
-  },
-  /* PREFIX_EVEX_0FEA */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vpminsw",       { XM, Vex, EXx }, 0 },
-  },
   /* PREFIX_EVEX_0FEB */
   {
     { Bad_Opcode },
     { Bad_Opcode },
     { "vpor%LW",       { XM, Vex, EXx }, 0 },
   },
-  /* PREFIX_EVEX_0FEC */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vpaddsb",       { XM, Vex, EXx }, 0 },
-  },
-  /* PREFIX_EVEX_0FED */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vpaddsw",       { XM, Vex, EXx }, 0 },
-  },
-  /* PREFIX_EVEX_0FEE */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vpmaxsw",       { XM, Vex, EXx }, 0 },
-  },
   /* PREFIX_EVEX_0FEF */
   {
     { Bad_Opcode },
     { Bad_Opcode },
     { "vpxor%LW",      { XM, Vex, EXx }, 0 },
   },
-  /* PREFIX_EVEX_0FF1 */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vpsllw",        { XM, Vex, EXxmm }, 0 },
-  },
   /* PREFIX_EVEX_0FF2 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
     { VEX_W_TABLE (EVEX_W_0FF4_P_2) },
   },
-  /* PREFIX_EVEX_0FF5 */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vpmaddwd",      { XM, Vex, EXx }, 0 },
-  },
-  /* PREFIX_EVEX_0FF6 */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vpsadbw",       { XM, Vex, EXx }, 0 },
-  },
-  /* PREFIX_EVEX_0FF8 */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vpsubb",        { XM, Vex, EXx }, 0 },
-  },
-  /* PREFIX_EVEX_0FF9 */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vpsubw",        { XM, Vex, EXx }, 0 },
-  },
   /* PREFIX_EVEX_0FFA */
   {
     { Bad_Opcode },
     { Bad_Opcode },
     { VEX_W_TABLE (EVEX_W_0FFB_P_2) },
   },
-  /* PREFIX_EVEX_0FFC */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vpaddb",        { XM, Vex, EXx }, 0 },
-  },
-  /* PREFIX_EVEX_0FFD */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vpaddw",        { XM, Vex, EXx }, 0 },
-  },
   /* PREFIX_EVEX_0FFE */
   {
     { Bad_Opcode },
     { Bad_Opcode },
     { VEX_W_TABLE (EVEX_W_0FFE_P_2) },
   },
-  /* PREFIX_EVEX_0F3800 */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vpshufb",       { XM, Vex, EXx }, 0 },
-  },
-  /* PREFIX_EVEX_0F3804 */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vpmaddubsw",    { XM, Vex, EXx }, 0 },
-  },
-  /* PREFIX_EVEX_0F380B */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vpmulhrsw",     { XM, Vex, EXx }, 0 },
-  },
-  /* PREFIX_EVEX_0F380C */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { VEX_W_TABLE (EVEX_W_0F380C_P_2) },
-  },
   /* PREFIX_EVEX_0F380D */
   {
     { Bad_Opcode },
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpermp%XW",     { XM, Vex, EXx }, 0 },
-  },
-  /* PREFIX_EVEX_0F3818 */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { VEX_W_TABLE (EVEX_W_0F3818_P_2) },
+    { EVEX_LEN_TABLE (EVEX_LEN_0F3816_P_2) },
   },
   /* PREFIX_EVEX_0F3819 */
   {
     { Bad_Opcode },
     { VEX_W_TABLE (EVEX_W_0F381B_P_2) },
   },
-  /* PREFIX_EVEX_0F381C */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vpabsb",        { XM, EXx }, 0 },
-  },
-  /* PREFIX_EVEX_0F381D */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vpabsw",        { XM, EXx }, 0 },
-  },
   /* PREFIX_EVEX_0F381E */
   {
     { Bad_Opcode },
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vscalefs%XW",   { XMScalar, VexScalar, EXxmm_mdq, EXxEVexR }, 0 },
+    { "vscalefs%XW",   { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexR }, 0 },
   },
   /* PREFIX_EVEX_0F3830 */
   {
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vperm%LW",      { XM, Vex, EXx }, 0 },
+    { EVEX_LEN_TABLE (EVEX_LEN_0F3836_P_2) },
   },
   /* PREFIX_EVEX_0F3837 */
   {
     { Bad_Opcode },
     { "vpminu%LW",     { XM, Vex, EXx }, 0 },
   },
-  /* PREFIX_EVEX_0F383C */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vpmaxsb",       { XM, Vex, EXx }, 0 },
-  },
   /* PREFIX_EVEX_0F383D */
   {
     { Bad_Opcode },
     { Bad_Opcode },
     { "vpmaxs%LW",     { XM, Vex, EXx }, 0 },
   },
-  /* PREFIX_EVEX_0F383E */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vpmaxuw",       { XM, Vex, EXx }, 0 },
-  },
   /* PREFIX_EVEX_0F383F */
   {
     { Bad_Opcode },
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vgetexps%XW",   { XMScalar, VexScalar, EXxmm_mdq, EXxEVexS }, 0 },
+    { "vgetexps%XW",   { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexS }, 0 },
   },
   /* PREFIX_EVEX_0F3844 */
   {
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vrcp14s%XW",    { XMScalar, VexScalar, EXxmm_mdq }, 0 },
+    { "vrcp14s%XW",    { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
   },
   /* PREFIX_EVEX_0F384E */
   {
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vrsqrt14s%XW",  { XMScalar, VexScalar, EXxmm_mdq }, 0 },
+    { "vrsqrt14s%XW",  { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
   },
   /* PREFIX_EVEX_0F3850 */
   {
     { Bad_Opcode },
     { VEX_W_TABLE (EVEX_W_0F3855_P_2) },
   },
-  /* PREFIX_EVEX_0F3858 */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { VEX_W_TABLE (EVEX_W_0F3858_P_2) },
-  },
   /* PREFIX_EVEX_0F3859 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
     { "vpermi2p%XW",   { XM, Vex, EXx }, 0 },
   },
-  /* PREFIX_EVEX_0F3878 */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { VEX_W_TABLE (EVEX_W_0F3878_P_2) },
-  },
-  /* PREFIX_EVEX_0F3879 */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { VEX_W_TABLE (EVEX_W_0F3879_P_2) },
-  },
   /* PREFIX_EVEX_0F387A */
   {
     { Bad_Opcode },
     { Bad_Opcode },
     { VEX_W_TABLE (EVEX_W_0F3893_P_2) },
   },
-  /* PREFIX_EVEX_0F3896 */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vfmaddsub132p%XW",      { XM, Vex, EXx, EXxEVexR }, 0 },
-  },
-  /* PREFIX_EVEX_0F3897 */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vfmsubadd132p%XW",      { XM, Vex, EXx, EXxEVexR }, 0 },
-  },
-  /* PREFIX_EVEX_0F3898 */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vfmadd132p%XW", { XM, Vex, EXx, EXxEVexR }, 0 },
-  },
-  /* PREFIX_EVEX_0F3899 */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vfmadd132s%XW", { XMScalar, VexScalar, EXxmm_mdq, EXxEVexR }, 0 },
-  },
   /* PREFIX_EVEX_0F389A */
   {
     { Bad_Opcode },
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vfmsub132s%XW", { XMScalar, VexScalar, EXxmm_mdq, EXxEVexR }, 0 },
+    { "vfmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexR }, 0 },
     { "v4fmaddss",     { XMScalar, VexScalar, Mxmm }, 0 },
   },
-  /* PREFIX_EVEX_0F389C */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vfnmadd132p%XW",        { XM, Vex, EXx, EXxEVexR }, 0 },
-  },
-  /* PREFIX_EVEX_0F389D */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vfnmadd132s%XW",        { XMScalar, VexScalar, EXxmm_mdq, EXxEVexR }, 0 },
-  },
-  /* PREFIX_EVEX_0F389E */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vfnmsub132p%XW",        { XM, Vex, EXx, EXxEVexR }, 0 },
-  },
-  /* PREFIX_EVEX_0F389F */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vfnmsub132s%XW",        { XMScalar, VexScalar, EXxmm_mdq, EXxEVexR }, 0 },
-  },
   /* PREFIX_EVEX_0F38A0 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
     { VEX_W_TABLE (EVEX_W_0F38A3_P_2) },
   },
-  /* PREFIX_EVEX_0F38A6 */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vfmaddsub213p%XW",      { XM, Vex, EXx, EXxEVexR }, 0 },
-  },
-  /* PREFIX_EVEX_0F38A7 */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vfmsubadd213p%XW",      { XM, Vex, EXx, EXxEVexR }, 0 },
-  },
-  /* PREFIX_EVEX_0F38A8 */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vfmadd213p%XW", { XM, Vex, EXx, EXxEVexR }, 0 },
-  },
-  /* PREFIX_EVEX_0F38A9 */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vfmadd213s%XW", { XMScalar, VexScalar, EXxmm_mdq, EXxEVexR }, 0 },
-  },
   /* PREFIX_EVEX_0F38AA */
   {
     { Bad_Opcode },
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vfmsub213s%XW", { XMScalar, VexScalar, EXxmm_mdq, EXxEVexR }, 0 },
+    { "vfmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexR }, 0 },
     { "v4fnmaddss",    { XMScalar, VexScalar, Mxmm }, 0 },
   },
-  /* PREFIX_EVEX_0F38AC */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vfnmadd213p%XW",        { XM, Vex, EXx, EXxEVexR }, 0 },
-  },
-  /* PREFIX_EVEX_0F38AD */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vfnmadd213s%XW",        { XMScalar, VexScalar, EXxmm_mdq, EXxEVexR }, 0 },
-  },
-  /* PREFIX_EVEX_0F38AE */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vfnmsub213p%XW",        { XM, Vex, EXx, EXxEVexR }, 0 },
-  },
-  /* PREFIX_EVEX_0F38AF */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vfnmsub213s%XW",        { XMScalar, VexScalar, EXxmm_mdq, EXxEVexR }, 0 },
-  },
   /* PREFIX_EVEX_0F38B4 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
     { "vpmadd52huq",   { XM, Vex, EXx }, 0 },
   },
-  /* PREFIX_EVEX_0F38B6 */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vfmaddsub231p%XW",      { XM, Vex, EXx, EXxEVexR }, 0 },
-  },
-  /* PREFIX_EVEX_0F38B7 */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vfmsubadd231p%XW",      { XM, Vex, EXx, EXxEVexR }, 0 },
-  },
-  /* PREFIX_EVEX_0F38B8 */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vfmadd231p%XW", { XM, Vex, EXx, EXxEVexR }, 0 },
-  },
-  /* PREFIX_EVEX_0F38B9 */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vfmadd231s%XW", { XMScalar, VexScalar, EXxmm_mdq, EXxEVexR }, 0 },
-  },
-  /* PREFIX_EVEX_0F38BA */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vfmsub231p%XW", { XM, Vex, EXx, EXxEVexR }, 0 },
-  },
-  /* PREFIX_EVEX_0F38BB */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vfmsub231s%XW", { XMScalar, VexScalar, EXxmm_mdq, EXxEVexR }, 0 },
-  },
-  /* PREFIX_EVEX_0F38BC */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vfnmadd231p%XW",        { XM, Vex, EXx, EXxEVexR }, 0 },
-  },
-  /* PREFIX_EVEX_0F38BD */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vfnmadd231s%XW",        { XMScalar, VexScalar, EXxmm_mdq, EXxEVexR }, 0 },
-  },
-  /* PREFIX_EVEX_0F38BE */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vfnmsub231p%XW",        { XM, Vex, EXx, EXxEVexR }, 0 },
-  },
-  /* PREFIX_EVEX_0F38BF */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vfnmsub231s%XW",        { XMScalar, VexScalar, EXxmm_mdq, EXxEVexR }, 0 },
-  },
   /* PREFIX_EVEX_0F38C4 */
   {
     { Bad_Opcode },
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vrcp28s%XW",       { XMScalar, VexScalar, EXxmm_mdq, EXxEVexS }, 0 },
+    { "vrcp28s%XW",    { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexS }, 0 },
   },
   /* PREFIX_EVEX_0F38CC */
   {
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vrsqrt28s%XW",     { XMScalar, VexScalar, EXxmm_mdq, EXxEVexS }, 0 },
-  },
-  /* PREFIX_EVEX_0F38CF */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vgf2p8mulb",    { XM, Vex, EXx }, 0 }, 
-  },
-  /* PREFIX_EVEX_0F38DC */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vaesenc",       { XM, Vex, EXx }, 0 },
-  },
-  /* PREFIX_EVEX_0F38DD */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vaesenclast",   { XM, Vex, EXx }, 0 },
-  },
-  /* PREFIX_EVEX_0F38DE */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vaesdec",       { XM, Vex, EXx }, 0 },
-  },
-  /* PREFIX_EVEX_0F38DF */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vaesdeclast",   { XM, Vex, EXx }, 0 },
+    { "vrsqrt28s%XW",  { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexS }, 0 },
   },
   /* PREFIX_EVEX_0F3A00 */
   {
     { Bad_Opcode },
     { "valign%LW",     { XM, Vex, EXx, Ib }, 0 },
   },
-  /* PREFIX_EVEX_0F3A04 */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { VEX_W_TABLE (EVEX_W_0F3A04_P_2) },
-  },
   /* PREFIX_EVEX_0F3A05 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
     { VEX_W_TABLE (EVEX_W_0F3A0B_P_2) },
   },
-  /* PREFIX_EVEX_0F3A0F */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vpalignr",      { XM, Vex, EXx, Ib }, 0 },
-  },
   /* PREFIX_EVEX_0F3A14 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpextrb",       { Edqb, XM, Ib }, 0 },
+    { EVEX_LEN_TABLE (EVEX_LEN_0F3A14_P_2) },
   },
   /* PREFIX_EVEX_0F3A15 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpextrw",       { Edqw, XM, Ib }, 0 },
+    { EVEX_LEN_TABLE (EVEX_LEN_0F3A15_P_2) },
   },
   /* PREFIX_EVEX_0F3A16 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpextrK",       { Edq, XM, Ib }, 0 },
+    { EVEX_LEN_TABLE (EVEX_LEN_0F3A16_P_2) },
   },
   /* PREFIX_EVEX_0F3A17 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vextractps",    { Edqd, XMM, Ib }, 0 },
+    { EVEX_LEN_TABLE (EVEX_LEN_0F3A17_P_2) },
   },
   /* PREFIX_EVEX_0F3A18 */
   {
     { Bad_Opcode },
     { VEX_W_TABLE (EVEX_W_0F3A1B_P_2) },
   },
-  /* PREFIX_EVEX_0F3A1D */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { VEX_W_TABLE (EVEX_W_0F3A1D_P_2) },
-  },
   /* PREFIX_EVEX_0F3A1E */
   {
     { Bad_Opcode },
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpinsrb",       { XM, Vex128, Edb, Ib }, 0 },
+    { EVEX_LEN_TABLE (EVEX_LEN_0F3A20_P_2) },
   },
   /* PREFIX_EVEX_0F3A21 */
   {
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpinsrK",       { XM, Vex128, Edq, Ib }, 0 },
+    { EVEX_LEN_TABLE (EVEX_LEN_0F3A22_P_2) },
   },
   /* PREFIX_EVEX_0F3A23 */
   {
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vgetmants%XW",  { XMScalar, VexScalar, EXxmm_mdq, EXxEVexS, Ib }, 0 },
+    { "vgetmants%XW",  { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexS, Ib }, 0 },
   },
   /* PREFIX_EVEX_0F3A38 */
   {
     { Bad_Opcode },
     { VEX_W_TABLE (EVEX_W_0F3A43_P_2) },
   },
-  /* PREFIX_EVEX_0F3A44 */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { "vpclmulqdq",    { XM, Vex, EXx, PCLMUL }, 0 },
-  },
   /* PREFIX_EVEX_0F3A50 */
   {
     { Bad_Opcode },
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vfixupimms%XW", { XMScalar, VexScalar, EXxmm_mdq, EXxEVexS, Ib }, 0 },
+    { "vfixupimms%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexS, Ib }, 0 },
   },
   /* PREFIX_EVEX_0F3A56 */
   {
     { Bad_Opcode },
     { VEX_W_TABLE (EVEX_W_0F3A73_P_2) },
   },
-  /* PREFIX_EVEX_0F3ACE */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { VEX_W_TABLE (EVEX_W_0F3ACE_P_2) },
-  },
-  /* PREFIX_EVEX_0F3ACF */
-  {
-    { Bad_Opcode },
-    { Bad_Opcode },
-    { VEX_W_TABLE (EVEX_W_0F3ACF_P_2) },
-  },