This is the mail archive of the binutils-cvs@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] x86: Use individual prefix control for each opcode.


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=bf890a93a7c46f63fc0595189cf2b388e9a29316

commit bf890a93a7c46f63fc0595189cf2b388e9a29316
Author: Ilya Tocar <ilya.tocar@intel.com>
Date:   Mon Apr 6 19:33:01 2015 +0300

    x86: Use individual prefix control for each opcode.
    
    2015-04-06  Ilya Tocar  <ilya.tocar@intel.com>
    	    H.J. Lu  <hongjiu.lu@intel.com>
    
    	* i386-dis-evex.h (evex_table): Fill prefix_requirement field.
    	* i386-dis.c (PREFIX_MANDATORY_REPZ, PREFIX_MANDATORY_REPNZ,
    	PREFIX_MANDATORY_DATA, PREFIX_MANDATORY_ADDR, PREFIX_MANDATORY_LOCK,
    	PREFIX_UD_SHIFT, PREFIX_UD_REPZ, REFIX_UD_REPNZ, PREFIX_UD_DATA,
    	PREFIX_UD_ADDR, PREFIX_UD_LOCK, PREFIX_OPTIONAL, PREFIX_MANDATORY):
    	Define.
    	(Bad_Opcode, FLOAT, DIS386, DIS386_PREFIX, THREE_BYTE_TABLE_PREFIX):
    	Fill prefix_requirement field.
    	(struct dis386): Add prefix_requirement field.
    	(dis386): Fill prefix_requirement field.
    	(dis386_twobyte): Ditto.
    	(twobyte_has_mandatory_prefix_: Remove.
    	(reg_table): Fill prefix_requirement field.
    	(prefix_table): Ditto.
    	(x86_64_table): Ditto.
    	(three_byte_table): Ditto.
    	(xop_table): Ditto.
    	(vex_table): Ditto.
    	(vex_len_table): Ditto.
    	(vex_w_table): Ditto.
    	(mod_table): Ditto.
    	(bad_opcode): Ditto.
    	(print_insn): Use prefix_requirement.
    	(FGRPd9_2, FGRPd9_4, FGRPd9_5, FGRPd9_6, FGRPd9_7, FGRPda_5, FGRPdb_4,
    	FGRPde_3, FGRPdf_4): Fill prefix_requirement field.
    	(float_reg): Ditto.

Diff:
---
 opcodes/ChangeLog       |   29 +
 opcodes/i386-dis-evex.h |  944 ++++++++--------
 opcodes/i386-dis.c      | 2882 +++++++++++++++++++++++------------------------
 3 files changed, 1941 insertions(+), 1914 deletions(-)

diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog
index efac707..832e843 100644
--- a/opcodes/ChangeLog
+++ b/opcodes/ChangeLog
@@ -1,3 +1,32 @@
+2015-04-06  Ilya Tocar  <ilya.tocar@intel.com>
+	    H.J. Lu  <hongjiu.lu@intel.com>
+
+	* i386-dis-evex.h (evex_table): Fill prefix_requirement field.
+	* i386-dis.c (PREFIX_MANDATORY_REPZ, PREFIX_MANDATORY_REPNZ,
+	PREFIX_MANDATORY_DATA, PREFIX_MANDATORY_ADDR, PREFIX_MANDATORY_LOCK,
+	PREFIX_UD_SHIFT, PREFIX_UD_REPZ, REFIX_UD_REPNZ, PREFIX_UD_DATA,
+	PREFIX_UD_ADDR, PREFIX_UD_LOCK, PREFIX_MANDATORY): Define.
+	(Bad_Opcode, FLOAT, DIS386, DIS386_PREFIX, THREE_BYTE_TABLE_PREFIX):
+	Fill prefix_requirement field.
+	(struct dis386): Add prefix_requirement field.
+	(dis386): Fill prefix_requirement field.
+	(dis386_twobyte): Ditto.
+	(twobyte_has_mandatory_prefix_: Remove.
+	(reg_table): Fill prefix_requirement field.
+	(prefix_table): Ditto.
+	(x86_64_table): Ditto.
+	(three_byte_table): Ditto.
+	(xop_table): Ditto.
+	(vex_table): Ditto.
+	(vex_len_table): Ditto.
+	(vex_w_table): Ditto.
+	(mod_table): Ditto.
+	(bad_opcode): Ditto.
+	(print_insn): Use prefix_requirement.
+	(FGRPd9_2, FGRPd9_4, FGRPd9_5, FGRPd9_6, FGRPd9_7, FGRPda_5, FGRPdb_4,
+	FGRPde_3, FGRPdf_4): Fill prefix_requirement field.
+	(float_reg): Ditto.
+
 2015-03-30  Mike Frysinger  <vapier@gentoo.org>
 
 	* d10v-opc.c (d10v_reg_name_cnt): Convert old style prototype.
diff --git a/opcodes/i386-dis-evex.h b/opcodes/i386-dis-evex.h
index 383c213..14426b0 100644
--- a/opcodes/i386-dis-evex.h
+++ b/opcodes/i386-dis-evex.h
@@ -1011,16 +1011,16 @@ static const struct dis386 evex_table[][256] = {
   /* PREFIX_EVEX_0F2C */
   {
     { Bad_Opcode },
-    { "vcvttss2si",	{ Gdq, EXxmm_md, EXxEVexS } },
+    { "vcvttss2si",	{ Gdq, EXxmm_md, EXxEVexS }, 0 },
     { Bad_Opcode },
-    { "vcvttsd2si",	{ Gdq, EXxmm_mq, EXxEVexS } },
+    { "vcvttsd2si",	{ Gdq, EXxmm_mq, EXxEVexS }, 0 },
   },
   /* PREFIX_EVEX_0F2D */
   {
     { Bad_Opcode },
-    { "vcvtss2si",	{ Gdq, EXxmm_md, EXxEVexR } },
+    { "vcvtss2si",	{ Gdq, EXxmm_md, EXxEVexR }, 0 },
     { Bad_Opcode },
-    { "vcvtsd2si",	{ Gdq, EXxmm_mq, EXxEVexR } },
+    { "vcvtsd2si",	{ Gdq, EXxmm_mq, EXxEVexR }, 0 },
   },
   /* PREFIX_EVEX_0F2E */
   {
@@ -1124,13 +1124,13 @@ static const struct dis386 evex_table[][256] = {
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpunpcklbw",	{ XM, Vex, EXx } },
+    { "vpunpcklbw",	{ XM, Vex, EXx }, 0 },
   },
   /* PREFIX_EVEX_0F61 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpunpcklwd",	{ XM, Vex, EXx } },
+    { "vpunpcklwd",	{ XM, Vex, EXx }, 0 },
   },
   /* PREFIX_EVEX_0F62 */
   {
@@ -1142,19 +1142,19 @@ static const struct dis386 evex_table[][256] = {
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpacksswb",	{ XM, Vex, EXx } },
+    { "vpacksswb",	{ XM, Vex, EXx }, 0 },
   },
   /* PREFIX_EVEX_0F64 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpcmpgtb",	{ XMask, Vex, EXx } },
+    { "vpcmpgtb",	{ XMask, Vex, EXx }, 0 },
   },
   /* PREFIX_EVEX_0F65 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpcmpgtw",	{ XMask, Vex, EXx } },
+    { "vpcmpgtw",	{ XMask, Vex, EXx }, 0 },
   },
   /* PREFIX_EVEX_0F66 */
   {
@@ -1166,19 +1166,19 @@ static const struct dis386 evex_table[][256] = {
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpackuswb",	{ XM, Vex, EXx } },
+    { "vpackuswb",	{ XM, Vex, EXx }, 0 },
   },
   /* PREFIX_EVEX_0F68 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpunpckhbw",	{ XM, Vex, EXx } },
+    { "vpunpckhbw",	{ XM, Vex, EXx }, 0 },
   },
   /* PREFIX_EVEX_0F69 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpunpckhwd",	{ XM, Vex, EXx } },
+    { "vpunpckhwd",	{ XM, Vex, EXx }, 0 },
   },
   /* PREFIX_EVEX_0F6A */
   {
@@ -1220,39 +1220,39 @@ static const struct dis386 evex_table[][256] = {
   /* PREFIX_EVEX_0F70 */
   {
     { Bad_Opcode },
-    { "vpshufhw",	{ XM, EXx, Ib } },
+    { "vpshufhw",	{ XM, EXx, Ib }, 0 },
     { VEX_W_TABLE (EVEX_W_0F70_P_2) },
-    { "vpshuflw",	{ XM, EXx, Ib } },
+    { "vpshuflw",	{ XM, EXx, Ib }, 0 },
   },
   /* PREFIX_EVEX_0F71_REG_2 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpsrlw",	{ Vex, EXx, Ib } },
+    { "vpsrlw",	{ Vex, EXx, Ib }, 0 },
   },
   /* PREFIX_EVEX_0F71_REG_4 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpsraw",	{ Vex, EXx, Ib } },
+    { "vpsraw",	{ Vex, EXx, Ib }, 0 },
   },
   /* PREFIX_EVEX_0F71_REG_6 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpsllw",	{ Vex, EXx, Ib } },
+    { "vpsllw",	{ Vex, EXx, Ib }, 0 },
   },
   /* PREFIX_EVEX_0F72_REG_0 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpror%LW",	{ Vex, EXx, Ib } },
+    { "vpror%LW",	{ Vex, EXx, Ib }, 0 },
   },
   /* PREFIX_EVEX_0F72_REG_1 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vprol%LW",	{ Vex, EXx, Ib } },
+    { "vprol%LW",	{ Vex, EXx, Ib }, 0 },
   },
   /* PREFIX_EVEX_0F72_REG_2 */
   {
@@ -1264,7 +1264,7 @@ static const struct dis386 evex_table[][256] = {
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpsra%LW",	{ Vex, EXx, Ib } },
+    { "vpsra%LW",	{ Vex, EXx, Ib }, 0 },
   },
   /* PREFIX_EVEX_0F72_REG_6 */
   {
@@ -1282,7 +1282,7 @@ static const struct dis386 evex_table[][256] = {
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpsrldq",	{ Vex, EXx, Ib } },
+    { "vpsrldq",	{ Vex, EXx, Ib }, 0 },
   },
   /* PREFIX_EVEX_0F73_REG_6 */
   {
@@ -1294,19 +1294,19 @@ static const struct dis386 evex_table[][256] = {
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpslldq",	{ Vex, EXx, Ib } },
+    { "vpslldq",	{ Vex, EXx, Ib }, 0 },
   },
   /* PREFIX_EVEX_0F74 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpcmpeqb",	{ XMask, Vex, EXx } },
+    { "vpcmpeqb",	{ XMask, Vex, EXx }, 0 },
   },
   /* PREFIX_EVEX_0F75 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpcmpeqw",	{ XMask, Vex, EXx } },
+    { "vpcmpeqw",	{ XMask, Vex, EXx }, 0 },
   },
   /* PREFIX_EVEX_0F76 */
   {
@@ -1317,16 +1317,16 @@ static const struct dis386 evex_table[][256] = {
   /* PREFIX_EVEX_0F78 */
   {
     { VEX_W_TABLE (EVEX_W_0F78_P_0) },
-    { "vcvttss2usi",	{ Gdq, EXxmm_md, EXxEVexS } },
+    { "vcvttss2usi",	{ Gdq, EXxmm_md, EXxEVexS }, 0 },
     { VEX_W_TABLE (EVEX_W_0F78_P_2) },
-    { "vcvttsd2usi",	{ Gdq, EXxmm_mq, EXxEVexS } },
+    { "vcvttsd2usi",	{ Gdq, EXxmm_mq, EXxEVexS }, 0 },
   },
   /* PREFIX_EVEX_0F79 */
   {
     { VEX_W_TABLE (EVEX_W_0F79_P_0) },
-    { "vcvtss2usi",	{ Gdq, EXxmm_md, EXxEVexR } },
+    { "vcvtss2usi",	{ Gdq, EXxmm_md, EXxEVexR }, 0 },
     { VEX_W_TABLE (EVEX_W_0F79_P_2) },
-    { "vcvtsd2usi",	{ Gdq, EXxmm_mq, EXxEVexR } },
+    { "vcvtsd2usi",	{ Gdq, EXxmm_mq, EXxEVexR }, 0 },
   },
   /* PREFIX_EVEX_0F7A */
   {
@@ -1366,13 +1366,13 @@ static const struct dis386 evex_table[][256] = {
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpinsrw",	{ XM, Vex128, Edw, Ib } },
+    { "vpinsrw",	{ XM, Vex128, Edw, Ib }, 0 },
   },
   /* PREFIX_EVEX_0FC5 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpextrw",	{ Gdq, XS, Ib } },
+    { "vpextrw",	{ Gdq, XS, Ib }, 0 },
   },
   /* PREFIX_EVEX_0FC6 */
   {
@@ -1384,7 +1384,7 @@ static const struct dis386 evex_table[][256] = {
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpsrlw",	{ XM, Vex, EXxmm } },
+    { "vpsrlw",	{ XM, Vex, EXxmm }, 0 },
   },
   /* PREFIX_EVEX_0FD2 */
   {
@@ -1408,7 +1408,7 @@ static const struct dis386 evex_table[][256] = {
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpmullw",	{ XM, Vex, EXx } },
+    { "vpmullw",	{ XM, Vex, EXx }, 0 },
   },
   /* PREFIX_EVEX_0FD6 */
   {
@@ -1420,85 +1420,85 @@ static const struct dis386 evex_table[][256] = {
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpsubusb",	{ XM, Vex, EXx } },
+    { "vpsubusb",	{ XM, Vex, EXx }, 0 },
   },
   /* PREFIX_EVEX_0FD9 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpsubusw",	{ XM, Vex, EXx } },
+    { "vpsubusw",	{ XM, Vex, EXx }, 0 },
   },
   /* PREFIX_EVEX_0FDA */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpminub",	{ XM, Vex, EXx } },
+    { "vpminub",	{ XM, Vex, EXx }, 0 },
   },
   /* PREFIX_EVEX_0FDB */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpand%LW",	{ XM, Vex, EXx } },
+    { "vpand%LW",	{ XM, Vex, EXx }, 0 },
   },
   /* PREFIX_EVEX_0FDC */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpaddusb",	{ XM, Vex, EXx } },
+    { "vpaddusb",	{ XM, Vex, EXx }, 0 },
   },
   /* PREFIX_EVEX_0FDD */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpaddusw",	{ XM, Vex, EXx } },
+    { "vpaddusw",	{ XM, Vex, EXx }, 0 },
   },
   /* PREFIX_EVEX_0FDE */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpmaxub",	{ XM, Vex, EXx } },
+    { "vpmaxub",	{ XM, Vex, EXx }, 0 },
   },
   /* PREFIX_EVEX_0FDF */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpandn%LW",	{ XM, Vex, EXx } },
+    { "vpandn%LW",	{ XM, Vex, EXx }, 0 },
   },
   /* PREFIX_EVEX_0FE0 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpavgb",	{ XM, Vex, EXx } },
+    { "vpavgb",	{ XM, Vex, EXx }, 0 },
   },
   /* PREFIX_EVEX_0FE1 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpsraw",	{ XM, Vex, EXxmm } },
+    { "vpsraw",	{ XM, Vex, EXxmm }, 0 },
   },
   /* PREFIX_EVEX_0FE2 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpsra%LW",	{ XM, Vex, EXxmm } },
+    { "vpsra%LW",	{ XM, Vex, EXxmm }, 0 },
   },
   /* PREFIX_EVEX_0FE3 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpavgw",	{ XM, Vex, EXx } },
+    { "vpavgw",	{ XM, Vex, EXx }, 0 },
   },
   /* PREFIX_EVEX_0FE4 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpmulhuw",	{ XM, Vex, EXx } },
+    { "vpmulhuw",	{ XM, Vex, EXx }, 0 },
   },
   /* PREFIX_EVEX_0FE5 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpmulhw",	{ XM, Vex, EXx } },
+    { "vpmulhw",	{ XM, Vex, EXx }, 0 },
   },
   /* PREFIX_EVEX_0FE6 */
   {
@@ -1517,55 +1517,55 @@ static const struct dis386 evex_table[][256] = {
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpsubsb",	{ XM, Vex, EXx } },
+    { "vpsubsb",	{ XM, Vex, EXx }, 0 },
   },
   /* PREFIX_EVEX_0FE9 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpsubsw",	{ XM, Vex, EXx } },
+    { "vpsubsw",	{ XM, Vex, EXx }, 0 },
   },
   /* PREFIX_EVEX_0FEA */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpminsw",	{ XM, Vex, EXx } },
+    { "vpminsw",	{ XM, Vex, EXx }, 0 },
   },
   /* PREFIX_EVEX_0FEB */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpor%LW",	{ XM, Vex, EXx } },
+    { "vpor%LW",	{ XM, Vex, EXx }, 0 },
   },
   /* PREFIX_EVEX_0FEC */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpaddsb",	{ XM, Vex, EXx } },
+    { "vpaddsb",	{ XM, Vex, EXx }, 0 },
   },
   /* PREFIX_EVEX_0FED */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpaddsw",	{ XM, Vex, EXx } },
+    { "vpaddsw",	{ XM, Vex, EXx }, 0 },
   },
   /* PREFIX_EVEX_0FEE */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpmaxsw",	{ XM, Vex, EXx } },
+    { "vpmaxsw",	{ XM, Vex, EXx }, 0 },
   },
   /* PREFIX_EVEX_0FEF */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpxor%LW",	{ XM, Vex, EXx } },
+    { "vpxor%LW",	{ XM, Vex, EXx }, 0 },
   },
   /* PREFIX_EVEX_0FF1 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpsllw",	{ XM, Vex, EXxmm } },
+    { "vpsllw",	{ XM, Vex, EXxmm }, 0 },
   },
   /* PREFIX_EVEX_0FF2 */
   {
@@ -1589,25 +1589,25 @@ static const struct dis386 evex_table[][256] = {
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpmaddwd",	{ XM, Vex, EXx } },
+    { "vpmaddwd",	{ XM, Vex, EXx }, 0 },
   },
   /* PREFIX_EVEX_0FF6 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpsadbw",	{ XM, Vex, EXx } },
+    { "vpsadbw",	{ XM, Vex, EXx }, 0 },
   },
   /* PREFIX_EVEX_0FF8 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpsubb",	{ XM, Vex, EXx } },
+    { "vpsubb",	{ XM, Vex, EXx }, 0 },
   },
   /* PREFIX_EVEX_0FF9 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpsubw",	{ XM, Vex, EXx } },
+    { "vpsubw",	{ XM, Vex, EXx }, 0 },
   },
   /* PREFIX_EVEX_0FFA */
   {
@@ -1625,13 +1625,13 @@ static const struct dis386 evex_table[][256] = {
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpaddb",	{ XM, Vex, EXx } },
+    { "vpaddb",	{ XM, Vex, EXx }, 0 },
   },
   /* PREFIX_EVEX_0FFD */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpaddw",	{ XM, Vex, EXx } },
+    { "vpaddw",	{ XM, Vex, EXx }, 0 },
   },
   /* PREFIX_EVEX_0FFE */
   {
@@ -1643,19 +1643,19 @@ static const struct dis386 evex_table[][256] = {
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpshufb",	{ XM, Vex, EXx } },
+    { "vpshufb",	{ XM, Vex, EXx }, 0 },
   },
   /* PREFIX_EVEX_0F3804 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpmaddubsw",	{ XM, Vex, EXx } },
+    { "vpmaddubsw",	{ XM, Vex, EXx }, 0 },
   },
   /* PREFIX_EVEX_0F380B */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpmulhrsw",	{ XM, Vex, EXx } },
+    { "vpmulhrsw",	{ XM, Vex, EXx }, 0 },
   },
   /* PREFIX_EVEX_0F380C */
   {
@@ -1697,19 +1697,19 @@ static const struct dis386 evex_table[][256] = {
   {
     { Bad_Opcode },
     { VEX_W_TABLE (EVEX_W_0F3814_P_1) },
-    { "vprorv%LW",	{ XM, Vex, EXx } },
+    { "vprorv%LW",	{ XM, Vex, EXx }, 0 },
   },
   /* PREFIX_EVEX_0F3815 */
   {
     { Bad_Opcode },
     { VEX_W_TABLE (EVEX_W_0F3815_P_1) },
-    { "vprolv%LW",	{ XM, Vex, EXx } },
+    { "vprolv%LW",	{ XM, Vex, EXx }, 0 },
   },
   /* PREFIX_EVEX_0F3816 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpermp%XW",	{ XM, Vex, EXx } },
+    { "vpermp%XW",	{ XM, Vex, EXx }, 0 },
   },
   /* PREFIX_EVEX_0F3818 */
   {
@@ -1739,13 +1739,13 @@ static const struct dis386 evex_table[][256] = {
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpabsb",	{ XM, EXx } },
+    { "vpabsb",	{ XM, EXx }, 0 },
   },
   /* PREFIX_EVEX_0F381D */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpabsw",	{ XM, EXx } },
+    { "vpabsw",	{ XM, EXx }, 0 },
   },
   /* PREFIX_EVEX_0F381E */
   {
@@ -1763,31 +1763,31 @@ static const struct dis386 evex_table[][256] = {
   {
     { Bad_Opcode },
     { VEX_W_TABLE (EVEX_W_0F3820_P_1) },
-    { "vpmovsxbw",	{ XM, EXxmmq } },
+    { "vpmovsxbw",	{ XM, EXxmmq }, 0 },
   },
   /* PREFIX_EVEX_0F3821 */
   {
     { Bad_Opcode },
     { VEX_W_TABLE (EVEX_W_0F3821_P_1) },
-    { "vpmovsxbd",	{ XM, EXxmmqd } },
+    { "vpmovsxbd",	{ XM, EXxmmqd }, 0 },
   },
   /* PREFIX_EVEX_0F3822 */
   {
     { Bad_Opcode },
     { VEX_W_TABLE (EVEX_W_0F3822_P_1) },
-    { "vpmovsxbq",	{ XM, EXxmmdw } },
+    { "vpmovsxbq",	{ XM, EXxmmdw }, 0 },
   },
   /* PREFIX_EVEX_0F3823 */
   {
     { Bad_Opcode },
     { VEX_W_TABLE (EVEX_W_0F3823_P_1) },
-    { "vpmovsxwd",	{ XM, EXxmmq } },
+    { "vpmovsxwd",	{ XM, EXxmmq }, 0 },
   },
   /* PREFIX_EVEX_0F3824 */
   {
     { Bad_Opcode },
     { VEX_W_TABLE (EVEX_W_0F3824_P_1) },
-    { "vpmovsxwq",	{ XM, EXxmmqd } },
+    { "vpmovsxwq",	{ XM, EXxmmqd }, 0 },
   },
   /* PREFIX_EVEX_0F3825 */
   {
@@ -1804,8 +1804,8 @@ static const struct dis386 evex_table[][256] = {
   /* PREFIX_EVEX_0F3827 */
   {
     { Bad_Opcode },
-    { "vptestnm%LW",	{ XMask, Vex, EXx } },
-    { "vptestm%LW",	{ XMask, Vex, EXx } },
+    { "vptestnm%LW",	{ XMask, Vex, EXx }, 0 },
+    { "vptestm%LW",	{ XMask, Vex, EXx }, 0 },
   },
   /* PREFIX_EVEX_0F3828 */
   {
@@ -1835,43 +1835,43 @@ static const struct dis386 evex_table[][256] = {
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vscalefp%XW",	{ XM, Vex, EXx, EXxEVexR } },
+    { "vscalefp%XW",	{ XM, Vex, EXx, EXxEVexR }, 0 },
   },
   /* PREFIX_EVEX_0F382D */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vscalefs%XW",	{ XMScalar, VexScalar, EXxmm_mdq, EXxEVexR } },
+    { "vscalefs%XW",	{ XMScalar, VexScalar, EXxmm_mdq, EXxEVexR }, 0 },
   },
   /* PREFIX_EVEX_0F3830 */
   {
     { Bad_Opcode },
     { VEX_W_TABLE (EVEX_W_0F3830_P_1) },
-    { "vpmovzxbw",	{ XM, EXxmmq } },
+    { "vpmovzxbw",	{ XM, EXxmmq }, 0 },
   },
   /* PREFIX_EVEX_0F3831 */
   {
     { Bad_Opcode },
     { VEX_W_TABLE (EVEX_W_0F3831_P_1) },
-    { "vpmovzxbd",	{ XM, EXxmmqd } },
+    { "vpmovzxbd",	{ XM, EXxmmqd }, 0 },
   },
   /* PREFIX_EVEX_0F3832 */
   {
     { Bad_Opcode },
     { VEX_W_TABLE (EVEX_W_0F3832_P_1) },
-    { "vpmovzxbq",	{ XM, EXxmmdw } },
+    { "vpmovzxbq",	{ XM, EXxmmdw }, 0 },
   },
   /* PREFIX_EVEX_0F3833 */
   {
     { Bad_Opcode },
     { VEX_W_TABLE (EVEX_W_0F3833_P_1) },
-    { "vpmovzxwd",	{ XM, EXxmmq } },
+    { "vpmovzxwd",	{ XM, EXxmmq }, 0 },
   },
   /* PREFIX_EVEX_0F3834 */
   {
     { Bad_Opcode },
     { VEX_W_TABLE (EVEX_W_0F3834_P_1) },
-    { "vpmovzxwq",	{ XM, EXxmmqd } },
+    { "vpmovzxwq",	{ XM, EXxmmqd }, 0 },
   },
   /* PREFIX_EVEX_0F3835 */
   {
@@ -1883,7 +1883,7 @@ static const struct dis386 evex_table[][256] = {
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vperm%LW",	{ XM, Vex, EXx } },
+    { "vperm%LW",	{ XM, Vex, EXx }, 0 },
   },
   /* PREFIX_EVEX_0F3837 */
   {
@@ -1895,49 +1895,49 @@ static const struct dis386 evex_table[][256] = {
   {
     { Bad_Opcode },
     { VEX_W_TABLE (EVEX_W_0F3838_P_1) },
-    { "vpminsb",	{ XM, Vex, EXx } },
+    { "vpminsb",	{ XM, Vex, EXx }, 0 },
   },
   /* PREFIX_EVEX_0F3839 */
   {
     { Bad_Opcode },
     { VEX_W_TABLE (EVEX_W_0F3839_P_1) },
-    { "vpmins%LW",	{ XM, Vex, EXx } },
+    { "vpmins%LW",	{ XM, Vex, EXx }, 0 },
   },
   /* PREFIX_EVEX_0F383A */
   {
     { Bad_Opcode },
     { VEX_W_TABLE (EVEX_W_0F383A_P_1) },
-    { "vpminuw",	{ XM, Vex, EXx } },
+    { "vpminuw",	{ XM, Vex, EXx }, 0 },
   },
   /* PREFIX_EVEX_0F383B */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpminu%LW",	{ XM, Vex, EXx } },
+    { "vpminu%LW",	{ XM, Vex, EXx }, 0 },
   },
   /* PREFIX_EVEX_0F383C */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpmaxsb",	{ XM, Vex, EXx } },
+    { "vpmaxsb",	{ XM, Vex, EXx }, 0 },
   },
   /* PREFIX_EVEX_0F383D */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpmaxs%LW",	{ XM, Vex, EXx } },
+    { "vpmaxs%LW",	{ XM, Vex, EXx }, 0 },
   },
   /* PREFIX_EVEX_0F383E */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpmaxuw",	{ XM, Vex, EXx } },
+    { "vpmaxuw",	{ XM, Vex, EXx }, 0 },
   },
   /* PREFIX_EVEX_0F383F */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpmaxu%LW",	{ XM, Vex, EXx } },
+    { "vpmaxu%LW",	{ XM, Vex, EXx }, 0 },
   },
   /* PREFIX_EVEX_0F3840 */
   {
@@ -1949,61 +1949,61 @@ static const struct dis386 evex_table[][256] = {
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vgetexpp%XW",	{ XM, EXx, EXxEVexS } },
+    { "vgetexpp%XW",	{ XM, EXx, EXxEVexS }, 0 },
   },
   /* PREFIX_EVEX_0F3843 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vgetexps%XW",	{ XMScalar, VexScalar, EXxmm_mdq, EXxEVexS } },
+    { "vgetexps%XW",	{ XMScalar, VexScalar, EXxmm_mdq, EXxEVexS }, 0 },
   },
   /* PREFIX_EVEX_0F3844 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vplzcnt%LW",	{ XM, EXx } },
+    { "vplzcnt%LW",	{ XM, EXx }, 0 },
   },
   /* PREFIX_EVEX_0F3845 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpsrlv%LW",	{ XM, Vex, EXx } },
+    { "vpsrlv%LW",	{ XM, Vex, EXx }, 0 },
   },
   /* PREFIX_EVEX_0F3846 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpsrav%LW",	{ XM, Vex, EXx } },
+    { "vpsrav%LW",	{ XM, Vex, EXx }, 0 },
   },
   /* PREFIX_EVEX_0F3847 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpsllv%LW",	{ XM, Vex, EXx } },
+    { "vpsllv%LW",	{ XM, Vex, EXx }, 0 },
   },
   /* PREFIX_EVEX_0F384C */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vrcp14p%XW",	{ XM, EXx } },
+    { "vrcp14p%XW",	{ XM, EXx }, 0 },
   },
   /* PREFIX_EVEX_0F384D */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vrcp14s%XW",	{ XMScalar, VexScalar, EXxmm_mdq } },
+    { "vrcp14s%XW",	{ XMScalar, VexScalar, EXxmm_mdq }, 0 },
   },
   /* PREFIX_EVEX_0F384E */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vrsqrt14p%XW",	{ XM, EXx } },
+    { "vrsqrt14p%XW",	{ XM, EXx }, 0 },
   },
   /* PREFIX_EVEX_0F384F */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vrsqrt14s%XW",	{ XMScalar, VexScalar, EXxmm_mdq } },
+    { "vrsqrt14s%XW",	{ XMScalar, VexScalar, EXxmm_mdq }, 0 },
   },
   /* PREFIX_EVEX_0F3858 */
   {
@@ -2033,13 +2033,13 @@ static const struct dis386 evex_table[][256] = {
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpblendm%LW",	{ XM, Vex, EXx } },
+    { "vpblendm%LW",	{ XM, Vex, EXx }, 0 },
   },
   /* PREFIX_EVEX_0F3865 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vblendmp%XW",	{ XM, Vex, EXx } },
+    { "vblendmp%XW",	{ XM, Vex, EXx }, 0 },
   },
   /* PREFIX_EVEX_0F3866 */
   {
@@ -2057,13 +2057,13 @@ static const struct dis386 evex_table[][256] = {
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpermi2%LW",	{ XM, Vex, EXx } },
+    { "vpermi2%LW",	{ XM, Vex, EXx }, 0 },
   },
   /* PREFIX_EVEX_0F3877 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpermi2p%XW",	{ XM, Vex, EXx } },
+    { "vpermi2p%XW",	{ XM, Vex, EXx }, 0 },
   },
   /* PREFIX_EVEX_0F3878 */
   {
@@ -2093,7 +2093,7 @@ static const struct dis386 evex_table[][256] = {
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpbroadcast%LW",	{ XM, Rdq } },
+    { "vpbroadcast%LW",	{ XM, Rdq }, 0 },
   },
   /* PREFIX_EVEX_0F387D */
   {
@@ -2105,13 +2105,13 @@ static const struct dis386 evex_table[][256] = {
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpermt2%LW",	{ XM, Vex, EXx } },
+    { "vpermt2%LW",	{ XM, Vex, EXx }, 0 },
   },
   /* PREFIX_EVEX_0F387F */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpermt2p%XW",	{ XM, Vex, EXx } },
+    { "vpermt2p%XW",	{ XM, Vex, EXx }, 0 },
   },
   /* PREFIX_EVEX_0F3883 */
   {
@@ -2123,25 +2123,25 @@ static const struct dis386 evex_table[][256] = {
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vexpandp%XW",	{ XM, EXEvexXGscat } },
+    { "vexpandp%XW",	{ XM, EXEvexXGscat }, 0 },
   },
   /* PREFIX_EVEX_0F3889 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpexpand%LW",	{ XM, EXEvexXGscat } },
+    { "vpexpand%LW",	{ XM, EXEvexXGscat }, 0 },
   },
   /* PREFIX_EVEX_0F388A */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vcompressp%XW",	{ EXEvexXGscat, XM } },
+    { "vcompressp%XW",	{ EXEvexXGscat, XM }, 0 },
   },
   /* PREFIX_EVEX_0F388B */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpcompress%LW",	{ EXEvexXGscat, XM } },
+    { "vpcompress%LW",	{ EXEvexXGscat, XM }, 0 },
   },
   /* PREFIX_EVEX_0F388D */
   {
@@ -2153,7 +2153,7 @@ static const struct dis386 evex_table[][256] = {
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpgatherd%LW",	{ XM, MVexVSIBDWpX } },
+    { "vpgatherd%LW",	{ XM, MVexVSIBDWpX }, 0 },
   },
   /* PREFIX_EVEX_0F3891 */
   {
@@ -2165,7 +2165,7 @@ static const struct dis386 evex_table[][256] = {
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vgatherdp%XW",	{ XM, MVexVSIBDWpX} },
+    { "vgatherdp%XW",	{ XM, MVexVSIBDWpX}, 0 },
   },
   /* PREFIX_EVEX_0F3893 */
   {
@@ -2177,67 +2177,67 @@ static const struct dis386 evex_table[][256] = {
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vfmaddsub132p%XW",	{ XM, Vex, EXx, EXxEVexR } },
+    { "vfmaddsub132p%XW",	{ XM, Vex, EXx, EXxEVexR }, 0 },
   },
   /* PREFIX_EVEX_0F3897 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vfmsubadd132p%XW",	{ XM, Vex, EXx, EXxEVexR } },
+    { "vfmsubadd132p%XW",	{ XM, Vex, EXx, EXxEVexR }, 0 },
   },
   /* PREFIX_EVEX_0F3898 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vfmadd132p%XW",	{ XM, Vex, EXx, EXxEVexR } },
+    { "vfmadd132p%XW",	{ XM, Vex, EXx, EXxEVexR }, 0 },
   },
   /* PREFIX_EVEX_0F3899 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vfmadd132s%XW",	{ XMScalar, VexScalar, EXxmm_mdq, EXxEVexR } },
+    { "vfmadd132s%XW",	{ XMScalar, VexScalar, EXxmm_mdq, EXxEVexR }, 0 },
   },
   /* PREFIX_EVEX_0F389A */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vfmsub132p%XW",	{ XM, Vex, EXx, EXxEVexR } },
+    { "vfmsub132p%XW",	{ XM, Vex, EXx, EXxEVexR }, 0 },
   },
   /* PREFIX_EVEX_0F389B */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vfmsub132s%XW",	{ XMScalar, VexScalar, EXxmm_mdq, EXxEVexR } },
+    { "vfmsub132s%XW",	{ XMScalar, VexScalar, EXxmm_mdq, EXxEVexR }, 0 },
   },
   /* PREFIX_EVEX_0F389C */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vfnmadd132p%XW",	{ XM, Vex, EXx, EXxEVexR } },
+    { "vfnmadd132p%XW",	{ XM, Vex, EXx, EXxEVexR }, 0 },
   },
   /* PREFIX_EVEX_0F389D */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vfnmadd132s%XW",	{ XMScalar, VexScalar, EXxmm_mdq, EXxEVexR } },
+    { "vfnmadd132s%XW",	{ XMScalar, VexScalar, EXxmm_mdq, EXxEVexR }, 0 },
   },
   /* PREFIX_EVEX_0F389E */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vfnmsub132p%XW",	{ XM, Vex, EXx, EXxEVexR } },
+    { "vfnmsub132p%XW",	{ XM, Vex, EXx, EXxEVexR }, 0 },
   },
   /* PREFIX_EVEX_0F389F */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vfnmsub132s%XW",	{ XMScalar, VexScalar, EXxmm_mdq, EXxEVexR } },
+    { "vfnmsub132s%XW",	{ XMScalar, VexScalar, EXxmm_mdq, EXxEVexR }, 0 },
   },
   /* PREFIX_EVEX_0F38A0 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpscatterd%LW",	{ MVexVSIBDWpX, XM } },
+    { "vpscatterd%LW",	{ MVexVSIBDWpX, XM }, 0 },
   },
   /* PREFIX_EVEX_0F38A1 */
   {
@@ -2249,7 +2249,7 @@ static const struct dis386 evex_table[][256] = {
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vscatterdp%XW",	{ MVexVSIBDWpX, XM } },
+    { "vscatterdp%XW",	{ MVexVSIBDWpX, XM }, 0 },
   },
   /* PREFIX_EVEX_0F38A3 */
   {
@@ -2261,163 +2261,163 @@ static const struct dis386 evex_table[][256] = {
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vfmaddsub213p%XW",	{ XM, Vex, EXx, EXxEVexR } },
+    { "vfmaddsub213p%XW",	{ XM, Vex, EXx, EXxEVexR }, 0 },
   },
   /* PREFIX_EVEX_0F38A7 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vfmsubadd213p%XW",	{ XM, Vex, EXx, EXxEVexR } },
+    { "vfmsubadd213p%XW",	{ XM, Vex, EXx, EXxEVexR }, 0 },
   },
   /* PREFIX_EVEX_0F38A8 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vfmadd213p%XW",	{ XM, Vex, EXx, EXxEVexR } },
+    { "vfmadd213p%XW",	{ XM, Vex, EXx, EXxEVexR }, 0 },
   },
   /* PREFIX_EVEX_0F38A9 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vfmadd213s%XW",	{ XMScalar, VexScalar, EXxmm_mdq, EXxEVexR } },
+    { "vfmadd213s%XW",	{ XMScalar, VexScalar, EXxmm_mdq, EXxEVexR }, 0 },
   },
   /* PREFIX_EVEX_0F38AA */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vfmsub213p%XW",	{ XM, Vex, EXx, EXxEVexR } },
+    { "vfmsub213p%XW",	{ XM, Vex, EXx, EXxEVexR }, 0 },
   },
   /* PREFIX_EVEX_0F38AB */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vfmsub213s%XW",	{ XMScalar, VexScalar, EXxmm_mdq, EXxEVexR } },
+    { "vfmsub213s%XW",	{ XMScalar, VexScalar, EXxmm_mdq, EXxEVexR }, 0 },
   },
   /* PREFIX_EVEX_0F38AC */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vfnmadd213p%XW",	{ XM, Vex, EXx, EXxEVexR } },
+    { "vfnmadd213p%XW",	{ XM, Vex, EXx, EXxEVexR }, 0 },
   },
   /* PREFIX_EVEX_0F38AD */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vfnmadd213s%XW",	{ XMScalar, VexScalar, EXxmm_mdq, EXxEVexR } },
+    { "vfnmadd213s%XW",	{ XMScalar, VexScalar, EXxmm_mdq, EXxEVexR }, 0 },
   },
   /* PREFIX_EVEX_0F38AE */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vfnmsub213p%XW",	{ XM, Vex, EXx, EXxEVexR } },
+    { "vfnmsub213p%XW",	{ XM, Vex, EXx, EXxEVexR }, 0 },
   },
   /* PREFIX_EVEX_0F38AF */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vfnmsub213s%XW",	{ XMScalar, VexScalar, EXxmm_mdq, EXxEVexR } },
+    { "vfnmsub213s%XW",	{ XMScalar, VexScalar, EXxmm_mdq, EXxEVexR }, 0 },
   },
   /* PREFIX_EVEX_0F38B4 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpmadd52luq",	{ XM, Vex, EXx }  },
+    { "vpmadd52luq",	{ XM, Vex, EXx }, 0 },
   },
   /* PREFIX_EVEX_0F38B5 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpmadd52huq",	{ XM, Vex, EXx }  },
+    { "vpmadd52huq",	{ XM, Vex, EXx }, 0 },
   },
   /* PREFIX_EVEX_0F38B6 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vfmaddsub231p%XW",	{ XM, Vex, EXx, EXxEVexR } },
+    { "vfmaddsub231p%XW",	{ XM, Vex, EXx, EXxEVexR }, 0 },
   },
   /* PREFIX_EVEX_0F38B7 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vfmsubadd231p%XW",	{ XM, Vex, EXx, EXxEVexR } },
+    { "vfmsubadd231p%XW",	{ XM, Vex, EXx, EXxEVexR }, 0 },
   },
   /* PREFIX_EVEX_0F38B8 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vfmadd231p%XW",	{ XM, Vex, EXx, EXxEVexR } },
+    { "vfmadd231p%XW",	{ XM, Vex, EXx, EXxEVexR }, 0 },
   },
   /* PREFIX_EVEX_0F38B9 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vfmadd231s%XW",	{ XMScalar, VexScalar, EXxmm_mdq, EXxEVexR } },
+    { "vfmadd231s%XW",	{ XMScalar, VexScalar, EXxmm_mdq, EXxEVexR }, 0 },
   },
   /* PREFIX_EVEX_0F38BA */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vfmsub231p%XW",	{ XM, Vex, EXx, EXxEVexR } },
+    { "vfmsub231p%XW",	{ XM, Vex, EXx, EXxEVexR }, 0 },
   },
   /* PREFIX_EVEX_0F38BB */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vfmsub231s%XW",	{ XMScalar, VexScalar, EXxmm_mdq, EXxEVexR } },
+    { "vfmsub231s%XW",	{ XMScalar, VexScalar, EXxmm_mdq, EXxEVexR }, 0 },
   },
   /* PREFIX_EVEX_0F38BC */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vfnmadd231p%XW",	{ XM, Vex, EXx, EXxEVexR } },
+    { "vfnmadd231p%XW",	{ XM, Vex, EXx, EXxEVexR }, 0 },
   },
   /* PREFIX_EVEX_0F38BD */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vfnmadd231s%XW",	{ XMScalar, VexScalar, EXxmm_mdq, EXxEVexR } },
+    { "vfnmadd231s%XW",	{ XMScalar, VexScalar, EXxmm_mdq, EXxEVexR }, 0 },
   },
   /* PREFIX_EVEX_0F38BE */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vfnmsub231p%XW",	{ XM, Vex, EXx, EXxEVexR } },
+    { "vfnmsub231p%XW",	{ XM, Vex, EXx, EXxEVexR }, 0 },
   },
   /* PREFIX_EVEX_0F38BF */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vfnmsub231s%XW",	{ XMScalar, VexScalar, EXxmm_mdq, EXxEVexR } },
+    { "vfnmsub231s%XW",	{ XMScalar, VexScalar, EXxmm_mdq, EXxEVexR }, 0 },
   },
   /* PREFIX_EVEX_0F38C4 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpconflict%LW",	{ XM, EXx } },
+    { "vpconflict%LW",	{ XM, EXx }, 0 },
   },
   /* PREFIX_EVEX_0F38C6_REG_1 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vgatherpf0dp%XW",  { MVexVSIBDWpX } },
+    { "vgatherpf0dp%XW",  { MVexVSIBDWpX }, 0 },
   },
   /* PREFIX_EVEX_0F38C6_REG_2 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vgatherpf1dp%XW",  { MVexVSIBDWpX } },
+    { "vgatherpf1dp%XW",  { MVexVSIBDWpX }, 0 },
   },
   /* PREFIX_EVEX_0F38C6_REG_5 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vscatterpf0dp%XW",  { MVexVSIBDWpX } },
+    { "vscatterpf0dp%XW",  { MVexVSIBDWpX }, 0 },
   },
   /* PREFIX_EVEX_0F38C6_REG_6 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vscatterpf1dp%XW",  { MVexVSIBDWpX } },
+    { "vscatterpf1dp%XW",  { MVexVSIBDWpX }, 0 },
   },
   /* PREFIX_EVEX_0F38C7_REG_1 */
   {
@@ -2447,31 +2447,31 @@ static const struct dis386 evex_table[][256] = {
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vexp2p%XW",        { XM, EXx, EXxEVexS } },
+    { "vexp2p%XW",        { XM, EXx, EXxEVexS }, 0 },
   },
   /* PREFIX_EVEX_0F38CA */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vrcp28p%XW",       { XM, EXx, EXxEVexS } },
+    { "vrcp28p%XW",       { XM, EXx, EXxEVexS }, 0 },
   },
   /* PREFIX_EVEX_0F38CB */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vrcp28s%XW",       { XMScalar, VexScalar, EXxmm_mdq, EXxEVexS } },
+    { "vrcp28s%XW",       { XMScalar, VexScalar, EXxmm_mdq, EXxEVexS }, 0 },
   },
   /* PREFIX_EVEX_0F38CC */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vrsqrt28p%XW",     { XM, EXx, EXxEVexS } },
+    { "vrsqrt28p%XW",     { XM, EXx, EXxEVexS }, 0 },
   },
   /* PREFIX_EVEX_0F38CD */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vrsqrt28s%XW",     { XMScalar, VexScalar, EXxmm_mdq, EXxEVexS } },
+    { "vrsqrt28s%XW",     { XMScalar, VexScalar, EXxmm_mdq, EXxEVexS }, 0 },
   },
   /* PREFIX_EVEX_0F3A00 */
   {
@@ -2489,7 +2489,7 @@ static const struct dis386 evex_table[][256] = {
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "valign%LW",	{ XM, Vex, EXx, Ib } },
+    { "valign%LW",	{ XM, Vex, EXx, Ib }, 0 },
   },
   /* PREFIX_EVEX_0F3A04 */
   {
@@ -2531,19 +2531,19 @@ static const struct dis386 evex_table[][256] = {
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpalignr",	{ XM, Vex, EXx, Ib } },
+    { "vpalignr",	{ XM, Vex, EXx, Ib }, 0 },
   },
   /* PREFIX_EVEX_0F3A14 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpextrb",	{ Edqb, XM, Ib } },
+    { "vpextrb",	{ Edqb, XM, Ib }, 0 },
   },
   /* PREFIX_EVEX_0F3A15 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpextrw",	{ EdqwS, XM, Ib } },
+    { "vpextrw",	{ EdqwS, XM, Ib }, 0 },
   },
   /* PREFIX_EVEX_0F3A16 */
   {
@@ -2555,7 +2555,7 @@ static const struct dis386 evex_table[][256] = {
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vextractps",	{ Edqd, XMM, Ib } },
+    { "vextractps",	{ Edqd, XMM, Ib }, 0 },
   },
   /* PREFIX_EVEX_0F3A18 */
   {
@@ -2591,19 +2591,19 @@ static const struct dis386 evex_table[][256] = {
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpcmpu%LW",	{ XMask, Vex, EXx, VPCMP } },
+    { "vpcmpu%LW",	{ XMask, Vex, EXx, VPCMP }, 0 },
   },
   /* PREFIX_EVEX_0F3A1F */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpcmp%LW",	{ XMask, Vex, EXx, VPCMP } },
+    { "vpcmp%LW",	{ XMask, Vex, EXx, VPCMP }, 0 },
   },
   /* PREFIX_EVEX_0F3A20 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpinsrb",	{ XM, Vex128, Edb, Ib } },
+    { "vpinsrb",	{ XM, Vex128, Edb, Ib }, 0 },
   },
   /* PREFIX_EVEX_0F3A21 */
   {
@@ -2627,19 +2627,19 @@ static const struct dis386 evex_table[][256] = {
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpternlog%LW",	{ XM, Vex, EXx, Ib } },
+    { "vpternlog%LW",	{ XM, Vex, EXx, Ib }, 0 },
   },
   /* PREFIX_EVEX_0F3A26 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vgetmantp%XW",	{ XM, EXx, EXxEVexS, Ib } },
+    { "vgetmantp%XW",	{ XM, EXx, EXxEVexS, Ib }, 0 },
   },
   /* PREFIX_EVEX_0F3A27 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vgetmants%XW",	{ XMScalar, VexScalar, EXxmm_mdq, EXxEVexS, Ib } },
+    { "vgetmants%XW",	{ XMScalar, VexScalar, EXxmm_mdq, EXxEVexS, Ib }, 0 },
   },
   /* PREFIX_EVEX_0F3A38 */
   {
@@ -2705,13 +2705,13 @@ static const struct dis386 evex_table[][256] = {
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vfixupimmp%XW",	{ XM, Vex, EXx, EXxEVexS, Ib } },
+    { "vfixupimmp%XW",	{ XM, Vex, EXx, EXxEVexS, Ib }, 0 },
   },
   /* PREFIX_EVEX_0F3A55 */
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vfixupimms%XW",	{ XMScalar, VexScalar, EXxmm_mdq, EXxEVexS, Ib } },
+    { "vfixupimms%XW",	{ XMScalar, VexScalar, EXxmm_mdq, EXxEVexS, Ib }, 0 },
   },
   /* PREFIX_EVEX_0F3A56 */
   {
@@ -2742,1071 +2742,1071 @@ static const struct dis386 evex_table[][256] = {
 #ifdef NEED_VEX_W_TABLE
   /* EVEX_W_0F10_P_0 */
   {
-    { "vmovups",	{ XM, EXEvexXNoBcst } },
+    { "vmovups",	{ XM, EXEvexXNoBcst }, 0 },
   },
   /* EVEX_W_0F10_P_1_M_0 */
   {
-    { "vmovss",	{ XMScalar, EXdScalar } },
+    { "vmovss",	{ XMScalar, EXdScalar }, 0 },
   },
   /* EVEX_W_0F10_P_1_M_1 */
   {
-    { "vmovss",	{ XMScalar, VexScalar, EXxmm_md } },
+    { "vmovss",	{ XMScalar, VexScalar, EXxmm_md }, 0 },
   },
   /* EVEX_W_0F10_P_2 */
   {
     { Bad_Opcode },
-    { "vmovupd",	{ XM, EXEvexXNoBcst } },
+    { "vmovupd",	{ XM, EXEvexXNoBcst }, 0 },
   },
   /* EVEX_W_0F10_P_3_M_0 */
   {
     { Bad_Opcode },
-    { "vmovsd",	{ XMScalar, EXqScalar } },
+    { "vmovsd",	{ XMScalar, EXqScalar }, 0 },
   },
   /* EVEX_W_0F10_P_3_M_1 */
   {
     { Bad_Opcode },
-    { "vmovsd",	{ XMScalar, VexScalar, EXxmm_mq } },
+    { "vmovsd",	{ XMScalar, VexScalar, EXxmm_mq }, 0 },
   },
   /* EVEX_W_0F11_P_0 */
   {
-    { "vmovups",	{ EXxS, XM } },
+    { "vmovups",	{ EXxS, XM }, 0 },
   },
   /* EVEX_W_0F11_P_1_M_0 */
   {
-    { "vmovss",	{ EXdScalarS, XMScalar } },
+    { "vmovss",	{ EXdScalarS, XMScalar }, 0 },
   },
   /* EVEX_W_0F11_P_1_M_1 */
   {
-    { "vmovss",	{ EXxS, Vex, XMScalar } },
+    { "vmovss",	{ EXxS, Vex, XMScalar }, 0 },
   },
   /* EVEX_W_0F11_P_2 */
   {
     { Bad_Opcode },
-    { "vmovupd",	{ EXxS, XM } },
+    { "vmovupd",	{ EXxS, XM }, 0 },
   },
   /* EVEX_W_0F11_P_3_M_0 */
   {
     { Bad_Opcode },
-    { "vmovsd",	{ EXqScalarS, XMScalar } },
+    { "vmovsd",	{ EXqScalarS, XMScalar }, 0 },
   },
   /* EVEX_W_0F11_P_3_M_1 */
   {
     { Bad_Opcode },
-    { "vmovsd",	{ EXxS, Vex, XMScalar } },
+    { "vmovsd",	{ EXxS, Vex, XMScalar }, 0 },
   },
   /* EVEX_W_0F12_P_0_M_0 */
   {
-    { "vmovlps",	{ XMM, Vex, EXxmm_mq } },
+    { "vmovlps",	{ XMM, Vex, EXxmm_mq }, 0 },
   },
   /* EVEX_W_0F12_P_0_M_1 */
   {
-    { "vmovhlps",	{ XMM, Vex, EXxmm_mq } },
+    { "vmovhlps",	{ XMM, Vex, EXxmm_mq }, 0 },
   },
   /* EVEX_W_0F12_P_1 */
   {
-    { "vmovsldup",	{ XM, EXEvexXNoBcst } },
+    { "vmovsldup",	{ XM, EXEvexXNoBcst }, 0 },
   },
   /* EVEX_W_0F12_P_2 */
   {
     { Bad_Opcode },
-    { "vmovlpd",	{ XMM, Vex, EXxmm_mq } },
+    { "vmovlpd",	{ XMM, Vex, EXxmm_mq }, 0 },
   },
   /* EVEX_W_0F12_P_3 */
   {
     { Bad_Opcode },
-    { "vmovddup",	{ XM, EXymmq } },
+    { "vmovddup",	{ XM, EXymmq }, 0 },
   },
   /* EVEX_W_0F13_P_0 */
   {
-    { "vmovlps",	{ EXxmm_mq, XMM } },
+    { "vmovlps",	{ EXxmm_mq, XMM }, 0 },
   },
   /* EVEX_W_0F13_P_2 */
   {
     { Bad_Opcode },
-    { "vmovlpd",	{ EXxmm_mq, XMM } },
+    { "vmovlpd",	{ EXxmm_mq, XMM }, 0 },
   },
   /* EVEX_W_0F14_P_0 */
   {
-    { "vunpcklps",	{ XM, Vex, EXx } },
+    { "vunpcklps",	{ XM, Vex, EXx }, 0 },
   },
   /* EVEX_W_0F14_P_2 */
   {
     { Bad_Opcode },
-    { "vunpcklpd",	{ XM, Vex, EXx } },
+    { "vunpcklpd",	{ XM, Vex, EXx }, 0 },
   },
   /* EVEX_W_0F15_P_0 */
   {
-    { "vunpckhps",	{ XM, Vex, EXx } },
+    { "vunpckhps",	{ XM, Vex, EXx }, 0 },
   },
   /* EVEX_W_0F15_P_2 */
   {
     { Bad_Opcode },
-    { "vunpckhpd",	{ XM, Vex, EXx } },
+    { "vunpckhpd",	{ XM, Vex, EXx }, 0 },
   },
   /* EVEX_W_0F16_P_0_M_0 */
   {
-    { "vmovhps",	{ XMM, Vex, EXxmm_mq } },
+    { "vmovhps",	{ XMM, Vex, EXxmm_mq }, 0 },
   },
   /* EVEX_W_0F16_P_0_M_1 */
   {
-    { "vmovlhps",	{ XMM, Vex, EXx } },
+    { "vmovlhps",	{ XMM, Vex, EXx }, 0 },
   },
   /* EVEX_W_0F16_P_1 */
   {
-    { "vmovshdup",	{ XM, EXx } },
+    { "vmovshdup",	{ XM, EXx }, 0 },
   },
   /* EVEX_W_0F16_P_2 */
   {
     { Bad_Opcode },
-    { "vmovhpd",	{ XMM, Vex, EXxmm_mq } },
+    { "vmovhpd",	{ XMM, Vex, EXxmm_mq }, 0 },
   },
   /* EVEX_W_0F17_P_0 */
   {
-    { "vmovhps",	{ EXxmm_mq, XMM } },
+    { "vmovhps",	{ EXxmm_mq, XMM }, 0 },
   },
   /* EVEX_W_0F17_P_2 */
   {
     { Bad_Opcode },
-    { "vmovhpd",	{ EXxmm_mq, XMM } },
+    { "vmovhpd",	{ EXxmm_mq, XMM }, 0 },
   },
   /* EVEX_W_0F28_P_0 */
   {
-    { "vmovaps",	{ XM, EXx } },
+    { "vmovaps",	{ XM, EXx }, 0 },
   },
   /* EVEX_W_0F28_P_2 */
   {
     { Bad_Opcode },
-    { "vmovapd",	{ XM, EXx } },
+    { "vmovapd",	{ XM, EXx }, 0 },
   },
   /* EVEX_W_0F29_P_0 */
   {
-    { "vmovaps",	{ EXxS, XM } },
+    { "vmovaps",	{ EXxS, XM }, 0 },
   },
   /* EVEX_W_0F29_P_2 */
   {
     { Bad_Opcode },
-    { "vmovapd",	{ EXxS, XM } },
+    { "vmovapd",	{ EXxS, XM }, 0 },
   },
   /* EVEX_W_0F2A_P_1 */
   {
-    { "vcvtsi2ss",	{ XMScalar, VexScalar, EXxEVexR, Ed } },
-    { "vcvtsi2ss",	{ XMScalar, VexScalar, EXxEVexR, Eq } },
+    { "vcvtsi2ss",	{ XMScalar, VexScalar, EXxEVexR, Ed }, 0 },
+    { "vcvtsi2ss",	{ XMScalar, VexScalar, EXxEVexR, Eq }, 0 },
   },
   /* EVEX_W_0F2A_P_3 */
   {
-    { "vcvtsi2sd",	{ XMScalar, VexScalar, Ed } },
-    { "vcvtsi2sd",	{ XMScalar, VexScalar, EXxEVexR, Eq } },
+    { "vcvtsi2sd",	{ XMScalar, VexScalar, Ed }, 0 },
+    { "vcvtsi2sd",	{ XMScalar, VexScalar, EXxEVexR, Eq }, 0 },
   },
   /* EVEX_W_0F2B_P_0 */
   {
-    { "vmovntps",	{ EXx, XM } },
+    { "vmovntps",	{ EXx, XM }, 0 },
   },
   /* EVEX_W_0F2B_P_2 */
   {
     { Bad_Opcode },
-    { "vmovntpd",	{ EXx, XM } },
+    { "vmovntpd",	{ EXx, XM }, 0 },
   },
   /* EVEX_W_0F2E_P_0 */
   {
-    { "vucomiss",	{ XMScalar, EXxmm_md, EXxEVexS } },
+    { "vucomiss",	{ XMScalar, EXxmm_md, EXxEVexS }, 0 },
   },
   /* EVEX_W_0F2E_P_2 */
   {
     { Bad_Opcode },
-    { "vucomisd",	{ XMScalar, EXxmm_mq, EXxEVexS } },
+    { "vucomisd",	{ XMScalar, EXxmm_mq, EXxEVexS }, 0 },
   },
   /* EVEX_W_0F2F_P_0 */
   {
-    { "vcomiss",	{ XMScalar, EXxmm_md, EXxEVexS } },
+    { "vcomiss",	{ XMScalar, EXxmm_md, EXxEVexS }, 0 },
   },
   /* EVEX_W_0F2F_P_2 */
   {
     { Bad_Opcode },
-    { "vcomisd",	{ XMScalar, EXxmm_mq, EXxEVexS } },
+    { "vcomisd",	{ XMScalar, EXxmm_mq, EXxEVexS }, 0 },
   },
   /* EVEX_W_0F51_P_0 */
   {
-    { "vsqrtps",	{ XM, EXx, EXxEVexR } },
+    { "vsqrtps",	{ XM, EXx, EXxEVexR }, 0 },
   },
   /* EVEX_W_0F51_P_1 */
   {
-    { "vsqrtss",	{ XMScalar, VexScalar, EXxmm_md, EXxEVexR } },
+    { "vsqrtss",	{ XMScalar, VexScalar, EXxmm_md, EXxEVexR }, 0 },
   },
   /* EVEX_W_0F51_P_2 */
   {
     { Bad_Opcode },
-    { "vsqrtpd",	{ XM, EXx, EXxEVexR } },
+    { "vsqrtpd",	{ XM, EXx, EXxEVexR }, 0 },
   },
   /* EVEX_W_0F51_P_3 */
   {
     { Bad_Opcode },
-    { "vsqrtsd",	{ XMScalar, VexScalar, EXxmm_mq, EXxEVexR } },
+    { "vsqrtsd",	{ XMScalar, VexScalar, EXxmm_mq, EXxEVexR }, 0 },
   },
   /* EVEX_W_0F54_P_0 */
   {
-    { "vandps",	{ XM, Vex, EXx } },
+    { "vandps",	{ XM, Vex, EXx }, 0 },
   },
   /* EVEX_W_0F54_P_2 */
   {
     { Bad_Opcode },
-    { "vandpd",	{ XM, Vex, EXx } },
+    { "vandpd",	{ XM, Vex, EXx }, 0 },
   },
   /* EVEX_W_0F55_P_0 */
   {
-    { "vandnps",	{ XM, Vex, EXx } },
+    { "vandnps",	{ XM, Vex, EXx }, 0 },
   },
   /* EVEX_W_0F55_P_2 */
   {
     { Bad_Opcode },
-    { "vandnpd",	{ XM, Vex, EXx } },
+    { "vandnpd",	{ XM, Vex, EXx }, 0 },
   },
   /* EVEX_W_0F56_P_0 */
   {
-    { "vorps",	{ XM, Vex, EXx } },
+    { "vorps",	{ XM, Vex, EXx }, 0 },
   },
   /* EVEX_W_0F56_P_2 */
   {
     { Bad_Opcode },
-    { "vorpd",	{ XM, Vex, EXx } },
+    { "vorpd",	{ XM, Vex, EXx }, 0 },
   },
   /* EVEX_W_0F57_P_0 */
   {
-    { "vxorps",	{ XM, Vex, EXx } },
+    { "vxorps",	{ XM, Vex, EXx }, 0 },
   },
   /* EVEX_W_0F57_P_2 */
   {
     { Bad_Opcode },
-    { "vxorpd",	{ XM, Vex, EXx } },
+    { "vxorpd",	{ XM, Vex, EXx }, 0 },
   },
   /* EVEX_W_0F58_P_0 */
   {
-    { "vaddps",	{ XM, Vex, EXx, EXxEVexR } },
+    { "vaddps",	{ XM, Vex, EXx, EXxEVexR }, 0 },
   },
   /* EVEX_W_0F58_P_1 */
   {
-    { "vaddss",	{ XMScalar, VexScalar, EXxmm_md, EXxEVexR } },
+    { "vaddss",	{ XMScalar, VexScalar, EXxmm_md, EXxEVexR }, 0 },
   },
   /* EVEX_W_0F58_P_2 */
   {
     { Bad_Opcode },
-    { "vaddpd",	{ XM, Vex, EXx, EXxEVexR } },
+    { "vaddpd",	{ XM, Vex, EXx, EXxEVexR }, 0 },
   },
   /* EVEX_W_0F58_P_3 */
   {
     { Bad_Opcode },
-    { "vaddsd",	{ XMScalar, VexScalar, EXxmm_mq, EXxEVexR } },
+    { "vaddsd",	{ XMScalar, VexScalar, EXxmm_mq, EXxEVexR }, 0 },
   },
   /* EVEX_W_0F59_P_0 */
   {
-    { "vmulps",	{ XM, Vex, EXx, EXxEVexR } },
+    { "vmulps",	{ XM, Vex, EXx, EXxEVexR }, 0 },
   },
   /* EVEX_W_0F59_P_1 */
   {
-    { "vmulss",	{ XMScalar, VexScalar, EXxmm_md, EXxEVexR } },
+    { "vmulss",	{ XMScalar, VexScalar, EXxmm_md, EXxEVexR }, 0 },
   },
   /* EVEX_W_0F59_P_2 */
   {
     { Bad_Opcode },
-    { "vmulpd",	{ XM, Vex, EXx, EXxEVexR } },
+    { "vmulpd",	{ XM, Vex, EXx, EXxEVexR }, 0 },
   },
   /* EVEX_W_0F59_P_3 */
   {
     { Bad_Opcode },
-    { "vmulsd",	{ XMScalar, VexScalar, EXxmm_mq, EXxEVexR } },
+    { "vmulsd",	{ XMScalar, VexScalar, EXxmm_mq, EXxEVexR }, 0 },
   },
   /* EVEX_W_0F5A_P_0 */
   {
-    { "vcvtps2pd",   { XM, EXEvexHalfBcstXmmq, EXxEVexS } },
+    { "vcvtps2pd",   { XM, EXEvexHalfBcstXmmq, EXxEVexS }, 0 },
   },
   /* EVEX_W_0F5A_P_1 */
   {
-    { "vcvtss2sd",	{ XMScalar, VexScalar, EXxmm_md, EXxEVexS } },
+    { "vcvtss2sd",	{ XMScalar, VexScalar, EXxmm_md, EXxEVexS }, 0 },
   },
   /* EVEX_W_0F5A_P_2 */
   {
     { Bad_Opcode },
-    { "vcvtpd2ps",	{ XMxmmq, EXx, EXxEVexR } },
+    { "vcvtpd2ps",	{ XMxmmq, EXx, EXxEVexR }, 0 },
   },
   /* EVEX_W_0F5A_P_3 */
   {
     { Bad_Opcode },
-    { "vcvtsd2ss",	{ XMScalar, VexScalar, EXxmm_mq, EXxEVexR } },
+    { "vcvtsd2ss",	{ XMScalar, VexScalar, EXxmm_mq, EXxEVexR }, 0 },
   },
   /* EVEX_W_0F5B_P_0 */
   {
-    { "vcvtdq2ps",	{ XM, EXx, EXxEVexR } },
-    { "vcvtqq2ps",	{ XMxmmq, EXx, EXxEVexR } },
+    { "vcvtdq2ps",	{ XM, EXx, EXxEVexR }, 0 },
+    { "vcvtqq2ps",	{ XMxmmq, EXx, EXxEVexR }, 0 },
   },
   /* EVEX_W_0F5B_P_1 */
   {
-    { "vcvttps2dq",	{ XM, EXx, EXxEVexS } },
+    { "vcvttps2dq",	{ XM, EXx, EXxEVexS }, 0 },
   },
   /* EVEX_W_0F5B_P_2 */
   {
-    { "vcvtps2dq",	{ XM, EXx, EXxEVexR } },
+    { "vcvtps2dq",	{ XM, EXx, EXxEVexR }, 0 },
   },
   /* EVEX_W_0F5C_P_0 */
   {
-    { "vsubps",	{ XM, Vex, EXx, EXxEVexR } },
+    { "vsubps",	{ XM, Vex, EXx, EXxEVexR }, 0 },
   },
   /* EVEX_W_0F5C_P_1 */
   {
-    { "vsubss",	{ XMScalar, VexScalar, EXxmm_md, EXxEVexR } },
+    { "vsubss",	{ XMScalar, VexScalar, EXxmm_md, EXxEVexR }, 0 },
   },
   /* EVEX_W_0F5C_P_2 */
   {
     { Bad_Opcode },
-    { "vsubpd",	{ XM, Vex, EXx, EXxEVexR } },
+    { "vsubpd",	{ XM, Vex, EXx, EXxEVexR }, 0 },
   },
   /* EVEX_W_0F5C_P_3 */
   {
     { Bad_Opcode },
-    { "vsubsd",	{ XMScalar, VexScalar, EXxmm_mq, EXxEVexR } },
+    { "vsubsd",	{ XMScalar, VexScalar, EXxmm_mq, EXxEVexR }, 0 },
   },
   /* EVEX_W_0F5D_P_0 */
   {
-    { "vminps",	{ XM, Vex, EXx, EXxEVexS } },
+    { "vminps",	{ XM, Vex, EXx, EXxEVexS }, 0 },
   },
   /* EVEX_W_0F5D_P_1 */
   {
-    { "vminss",	{ XMScalar, VexScalar, EXxmm_md, EXxEVexS } },
+    { "vminss",	{ XMScalar, VexScalar, EXxmm_md, EXxEVexS }, 0 },
   },
   /* EVEX_W_0F5D_P_2 */
   {
     { Bad_Opcode },
-    { "vminpd",	{ XM, Vex, EXx, EXxEVexS } },
+    { "vminpd",	{ XM, Vex, EXx, EXxEVexS }, 0 },
   },
   /* EVEX_W_0F5D_P_3 */
   {
     { Bad_Opcode },
-    { "vminsd",	{ XMScalar, VexScalar, EXxmm_mq, EXxEVexS } },
+    { "vminsd",	{ XMScalar, VexScalar, EXxmm_mq, EXxEVexS }, 0 },
   },
   /* EVEX_W_0F5E_P_0 */
   {
-    { "vdivps",	{ XM, Vex, EXx, EXxEVexR } },
+    { "vdivps",	{ XM, Vex, EXx, EXxEVexR }, 0 },
   },
   /* EVEX_W_0F5E_P_1 */
   {
-    { "vdivss",	{ XMScalar, VexScalar, EXxmm_md, EXxEVexR } },
+    { "vdivss",	{ XMScalar, VexScalar, EXxmm_md, EXxEVexR }, 0 },
   },
   /* EVEX_W_0F5E_P_2 */
   {
     { Bad_Opcode },
-    { "vdivpd",	{ XM, Vex, EXx, EXxEVexR } },
+    { "vdivpd",	{ XM, Vex, EXx, EXxEVexR }, 0 },
   },
   /* EVEX_W_0F5E_P_3 */
   {
     { Bad_Opcode },
-    { "vdivsd",	{ XMScalar, VexScalar, EXxmm_mq, EXxEVexR } },
+    { "vdivsd",	{ XMScalar, VexScalar, EXxmm_mq, EXxEVexR }, 0 },
   },
   /* EVEX_W_0F5F_P_0 */
   {
-    { "vmaxps",	{ XM, Vex, EXx, EXxEVexS } },
+    { "vmaxps",	{ XM, Vex, EXx, EXxEVexS }, 0 },
   },
   /* EVEX_W_0F5F_P_1 */
   {
-    { "vmaxss",	{ XMScalar, VexScalar, EXxmm_md, EXxEVexS } },
+    { "vmaxss",	{ XMScalar, VexScalar, EXxmm_md, EXxEVexS }, 0 },
   },
   /* EVEX_W_0F5F_P_2 */
   {
     { Bad_Opcode },
-    { "vmaxpd",	{ XM, Vex, EXx, EXxEVexS } },
+    { "vmaxpd",	{ XM, Vex, EXx, EXxEVexS }, 0 },
   },
   /* EVEX_W_0F5F_P_3 */
   {
     { Bad_Opcode },
-    { "vmaxsd",	{ XMScalar, VexScalar, EXxmm_mq, EXxEVexS } },
+    { "vmaxsd",	{ XMScalar, VexScalar, EXxmm_mq, EXxEVexS }, 0 },
   },
   /* EVEX_W_0F62_P_2 */
   {
-    { "vpunpckldq",	{ XM, Vex, EXx } },
+    { "vpunpckldq",	{ XM, Vex, EXx }, 0 },
   },
   /* EVEX_W_0F66_P_2 */
   {
-    { "vpcmpgtd",	{ XMask, Vex, EXx } },
+    { "vpcmpgtd",	{ XMask, Vex, EXx }, 0 },
   },
   /* EVEX_W_0F6A_P_2 */
   {
-    { "vpunpckhdq",	{ XM, Vex, EXx } },
+    { "vpunpckhdq",	{ XM, Vex, EXx }, 0 },
   },
   /* EVEX_W_0F6B_P_2 */
   {
-    { "vpackssdw",	{ XM, Vex, EXx } },
+    { "vpackssdw",	{ XM, Vex, EXx }, 0 },
   },
   /* EVEX_W_0F6C_P_2 */
   {
     { Bad_Opcode },
-    { "vpunpcklqdq",	{ XM, Vex, EXx } },
+    { "vpunpcklqdq",	{ XM, Vex, EXx }, 0 },
   },
   /* EVEX_W_0F6D_P_2 */
   {
     { Bad_Opcode },
-    { "vpunpckhqdq",	{ XM, Vex, EXx } },
+    { "vpunpckhqdq",	{ XM, Vex, EXx }, 0 },
   },
   /* EVEX_W_0F6E_P_2 */
   {
-    { "vmovd",	{ XMScalar, Ed } },
-    { "vmovq",	{ XMScalar, Eq } },
+    { "vmovd",	{ XMScalar, Ed }, 0 },
+    { "vmovq",	{ XMScalar, Eq }, 0 },
   },
   /* EVEX_W_0F6F_P_1 */
   {
-    { "vmovdqu32",	{ XM, EXEvexXNoBcst } },
-    { "vmovdqu64",	{ XM, EXEvexXNoBcst } },
+    { "vmovdqu32",	{ XM, EXEvexXNoBcst }, 0 },
+    { "vmovdqu64",	{ XM, EXEvexXNoBcst }, 0 },
   },
   /* EVEX_W_0F6F_P_2 */
   {
-    { "vmovdqa32",	{ XM, EXEvexXNoBcst } },
-    { "vmovdqa64",	{ XM, EXEvexXNoBcst } },
+    { "vmovdqa32",	{ XM, EXEvexXNoBcst }, 0 },
+    { "vmovdqa64",	{ XM, EXEvexXNoBcst }, 0 },
   },
   /* EVEX_W_0F6F_P_3 */
   {
-    { "vmovdqu8",	{ XM, EXx } },
-    { "vmovdqu16",	{ XM, EXx } },
+    { "vmovdqu8",	{ XM, EXx }, 0 },
+    { "vmovdqu16",	{ XM, EXx }, 0 },
   },
   /* EVEX_W_0F70_P_2 */
   {
-    { "vpshufd",	{ XM, EXx, Ib } },
+    { "vpshufd",	{ XM, EXx, Ib }, 0 },
   },
   /* EVEX_W_0F72_R_2_P_2 */
   {
-    { "vpsrld",	{ Vex, EXx, Ib } },
+    { "vpsrld",	{ Vex, EXx, Ib }, 0 },
   },
   /* EVEX_W_0F72_R_6_P_2 */
   {
-    { "vpslld",	{ Vex, EXx, Ib } },
+    { "vpslld",	{ Vex, EXx, Ib }, 0 },
   },
   /* EVEX_W_0F73_R_2_P_2 */
   {
     { Bad_Opcode },
-    { "vpsrlq",	{ Vex, EXx, Ib } },
+    { "vpsrlq",	{ Vex, EXx, Ib }, 0 },
   },
   /* EVEX_W_0F73_R_6_P_2 */
   {
     { Bad_Opcode },
-    { "vpsllq",	{ Vex, EXx, Ib } },
+    { "vpsllq",	{ Vex, EXx, Ib }, 0 },
   },
   /* EVEX_W_0F76_P_2 */
   {
-    { "vpcmpeqd",	{ XMask, Vex, EXx } },
+    { "vpcmpeqd",	{ XMask, Vex, EXx }, 0 },
   },
   /* EVEX_W_0F78_P_0 */
   {
-    { "vcvttps2udq",	{ XM, EXx, EXxEVexS } },
-    { "vcvttpd2udq",	{ XMxmmq, EXx, EXxEVexS } },
+    { "vcvttps2udq",	{ XM, EXx, EXxEVexS }, 0 },
+    { "vcvttpd2udq",	{ XMxmmq, EXx, EXxEVexS }, 0 },
   },
   /* EVEX_W_0F78_P_2 */
   {
-    { "vcvttps2uqq",	{ XM, EXxmmq, EXxEVexS } },
-    { "vcvttpd2uqq",	{ XM, EXx, EXxEVexS } },
+    { "vcvttps2uqq",	{ XM, EXxmmq, EXxEVexS }, 0 },
+    { "vcvttpd2uqq",	{ XM, EXx, EXxEVexS }, 0 },
   },
   /* EVEX_W_0F79_P_0 */
   {
-    { "vcvtps2udq",	{ XM, EXx, EXxEVexR } },
-    { "vcvtpd2udq",	{ XMxmmq, EXx, EXxEVexR } },
+    { "vcvtps2udq",	{ XM, EXx, EXxEVexR }, 0 },
+    { "vcvtpd2udq",	{ XMxmmq, EXx, EXxEVexR }, 0 },
   },
   /* EVEX_W_0F79_P_2 */
   {
-    { "vcvtps2uqq",	{ XM, EXxmmq, EXxEVexR } },
-    { "vcvtpd2uqq",	{ XM, EXx, EXxEVexR } },
+    { "vcvtps2uqq",	{ XM, EXxmmq, EXxEVexR }, 0 },
+    { "vcvtpd2uqq",	{ XM, EXx, EXxEVexR }, 0 },
   },
   /* EVEX_W_0F7A_P_1 */
   {
-    { "vcvtudq2pd",	{ XM, EXEvexHalfBcstXmmq } },
-    { "vcvtuqq2pd",	{ XM, EXx, EXxEVexR } },
+    { "vcvtudq2pd",	{ XM, EXEvexHalfBcstXmmq }, 0 },
+    { "vcvtuqq2pd",	{ XM, EXx, EXxEVexR }, 0 },
   },
   /* EVEX_W_0F7A_P_2 */
   {
-    { "vcvttps2qq",	{ XM, EXxmmq, EXxEVexS } },
-    { "vcvttpd2qq",	{ XM, EXx, EXxEVexS } },
+    { "vcvttps2qq",	{ XM, EXxmmq, EXxEVexS }, 0 },
+    { "vcvttpd2qq",	{ XM, EXx, EXxEVexS }, 0 },
   },
   /* EVEX_W_0F7A_P_3 */
   {
-    { "vcvtudq2ps",	{ XM, EXx, EXxEVexR } },
-    { "vcvtuqq2ps",	{ XMxmmq, EXx, EXxEVexR } },
+    { "vcvtudq2ps",	{ XM, EXx, EXxEVexR }, 0 },
+    { "vcvtuqq2ps",	{ XMxmmq, EXx, EXxEVexR }, 0 },
   },
   /* EVEX_W_0F7B_P_1 */
   {
-    { "vcvtusi2ss",	{ XMScalar, VexScalar, EXxEVexR, Ed } },
-    { "vcvtusi2ss",	{ XMScalar, VexScalar, EXxEVexR, Eq } },
+    { "vcvtusi2ss",	{ XMScalar, VexScalar, EXxEVexR, Ed }, 0 },
+    { "vcvtusi2ss",	{ XMScalar, VexScalar, EXxEVexR, Eq }, 0 },
   },
   /* EVEX_W_0F7B_P_2 */
   {
-    { "vcvtps2qq",	{ XM, EXxmmq, EXxEVexR } },
-    { "vcvtpd2qq",	{ XM, EXx, EXxEVexR } },
+    { "vcvtps2qq",	{ XM, EXxmmq, EXxEVexR }, 0 },
+    { "vcvtpd2qq",	{ XM, EXx, EXxEVexR }, 0 },
   },
   /* EVEX_W_0F7B_P_3 */
   {
-    { "vcvtusi2sd",	{ XMScalar, VexScalar, Ed } },
-    { "vcvtusi2sd",	{ XMScalar, VexScalar, EXxEVexR, Eq } },
+    { "vcvtusi2sd",	{ XMScalar, VexScalar, Ed }, 0 },
+    { "vcvtusi2sd",	{ XMScalar, VexScalar, EXxEVexR, Eq }, 0 },
   },
   /* EVEX_W_0F7E_P_1 */
   {
     { Bad_Opcode },
-    { "vmovq",	{ XMScalar, EXxmm_mq } },
+    { "vmovq",	{ XMScalar, EXxmm_mq }, 0 },
   },
   /* EVEX_W_0F7E_P_2 */
   {
-    { "vmovd",	{ Ed, XMScalar } },
-    { "vmovq",	{ Eq, XMScalar } },
+    { "vmovd",	{ Ed, XMScalar }, 0 },
+    { "vmovq",	{ Eq, XMScalar }, 0 },
   },
   /* EVEX_W_0F7F_P_1 */
   {
-    { "vmovdqu32",	{ EXxS, XM } },
-    { "vmovdqu64",	{ EXxS, XM } },
+    { "vmovdqu32",	{ EXxS, XM }, 0 },
+    { "vmovdqu64",	{ EXxS, XM }, 0 },
   },
   /* EVEX_W_0F7F_P_2 */
   {
-    { "vmovdqa32",	{ EXxS, XM } },
-    { "vmovdqa64",	{ EXxS, XM } },
+    { "vmovdqa32",	{ EXxS, XM }, 0 },
+    { "vmovdqa64",	{ EXxS, XM }, 0 },
   },
   /* EVEX_W_0F7F_P_3 */
   {
-    { "vmovdqu8",	{ EXxS, XM } },
-    { "vmovdqu16",	{ EXxS, XM } },
+    { "vmovdqu8",	{ EXxS, XM }, 0 },
+    { "vmovdqu16",	{ EXxS, XM }, 0 },
   },
   /* EVEX_W_0FC2_P_0 */
   {
-    { "vcmpps",	{ XMask, Vex, EXx, EXxEVexS, VCMP } },
+    { "vcmpps",	{ XMask, Vex, EXx, EXxEVexS, VCMP }, 0 },
   },
   /* EVEX_W_0FC2_P_1 */
   {
-    { "vcmpss",	{ XMask, VexScalar, EXxmm_md, EXxEVexS, VCMP } },
+    { "vcmpss",	{ XMask, VexScalar, EXxmm_md, EXxEVexS, VCMP }, 0 },
   },
   /* EVEX_W_0FC2_P_2 */
   {
     { Bad_Opcode },
-    { "vcmppd",	{ XMask, Vex, EXx, EXxEVexS, VCMP } },
+    { "vcmppd",	{ XMask, Vex, EXx, EXxEVexS, VCMP }, 0 },
   },
   /* EVEX_W_0FC2_P_3 */
   {
     { Bad_Opcode },
-    { "vcmpsd",	{ XMask, VexScalar, EXxmm_mq, EXxEVexS, VCMP } },
+    { "vcmpsd",	{ XMask, VexScalar, EXxmm_mq, EXxEVexS, VCMP }, 0 },
   },
   /* EVEX_W_0FC6_P_0 */
   {
-    { "vshufps",	{ XM, Vex, EXx, Ib } },
+    { "vshufps",	{ XM, Vex, EXx, Ib }, 0 },
   },
   /* EVEX_W_0FC6_P_2 */
   {
     { Bad_Opcode },
-    { "vshufpd",	{ XM, Vex, EXx, Ib } },
+    { "vshufpd",	{ XM, Vex, EXx, Ib }, 0 },
   },
   /* EVEX_W_0FD2_P_2 */
   {
-    { "vpsrld",	{ XM, Vex, EXxmm } },
+    { "vpsrld",	{ XM, Vex, EXxmm }, 0 },
   },
   /* EVEX_W_0FD3_P_2 */
   {
     { Bad_Opcode },
-    { "vpsrlq",	{ XM, Vex, EXxmm } },
+    { "vpsrlq",	{ XM, Vex, EXxmm }, 0 },
   },
   /* EVEX_W_0FD4_P_2 */
   {
     { Bad_Opcode },
-    { "vpaddq",	{ XM, Vex, EXx } },
+    { "vpaddq",	{ XM, Vex, EXx }, 0 },
   },
   /* EVEX_W_0FD6_P_2 */
   {
     { Bad_Opcode },
-    { "vmovq",	{ EXxmm_mq, XMScalar } },
+    { "vmovq",	{ EXxmm_mq, XMScalar }, 0 },
   },
   /* EVEX_W_0FE6_P_1 */
   {
-    { "vcvtdq2pd",	{ XM, EXEvexHalfBcstXmmq } },
-    { "vcvtqq2pd",	{ XM, EXx, EXxEVexR } },
+    { "vcvtdq2pd",	{ XM, EXEvexHalfBcstXmmq }, 0 },
+    { "vcvtqq2pd",	{ XM, EXx, EXxEVexR }, 0 },
   },
   /* EVEX_W_0FE6_P_2 */
   {
     { Bad_Opcode },
-    { "vcvttpd2dq",	{ XMxmmq, EXx, EXxEVexS } },
+    { "vcvttpd2dq",	{ XMxmmq, EXx, EXxEVexS }, 0 },
   },
   /* EVEX_W_0FE6_P_3 */
   {
     { Bad_Opcode },
-    { "vcvtpd2dq",	{ XMxmmq, EXx, EXxEVexR } },
+    { "vcvtpd2dq",	{ XMxmmq, EXx, EXxEVexR }, 0 },
   },
   /* EVEX_W_0FE7_P_2 */
   {
-    { "vmovntdq",	{ EXEvexXNoBcst, XM } },
+    { "vmovntdq",	{ EXEvexXNoBcst, XM }, 0 },
   },
   /* EVEX_W_0FF2_P_2 */
   {
-    { "vpslld",	{ XM, Vex, EXxmm } },
+    { "vpslld",	{ XM, Vex, EXxmm }, 0 },
   },
   /* EVEX_W_0FF3_P_2 */
   {
     { Bad_Opcode },
-    { "vpsllq",	{ XM, Vex, EXxmm } },
+    { "vpsllq",	{ XM, Vex, EXxmm }, 0 },
   },
   /* EVEX_W_0FF4_P_2 */
   {
     { Bad_Opcode },
-    { "vpmuludq",	{ XM, Vex, EXx } },
+    { "vpmuludq",	{ XM, Vex, EXx }, 0 },
   },
   /* EVEX_W_0FFA_P_2 */
   {
-    { "vpsubd",	{ XM, Vex, EXx } },
+    { "vpsubd",	{ XM, Vex, EXx }, 0 },
   },
   /* EVEX_W_0FFB_P_2 */
   {
     { Bad_Opcode },
-    { "vpsubq",	{ XM, Vex, EXx } },
+    { "vpsubq",	{ XM, Vex, EXx }, 0 },
   },
   /* EVEX_W_0FFE_P_2 */
   {
-    { "vpaddd",	{ XM, Vex, EXx } },
+    { "vpaddd",	{ XM, Vex, EXx }, 0 },
   },
   /* EVEX_W_0F380C_P_2 */
   {
-    { "vpermilps",	{ XM, Vex, EXx } },
+    { "vpermilps",	{ XM, Vex, EXx }, 0 },
   },
   /* EVEX_W_0F380D_P_2 */
   {
     { Bad_Opcode },
-    { "vpermilpd",	{ XM, Vex, EXx } },
+    { "vpermilpd",	{ XM, Vex, EXx }, 0 },
   },
   /* EVEX_W_0F3810_P_1 */
   {
-    { "vpmovuswb",	{ EXxmmq, XM } },
+    { "vpmovuswb",	{ EXxmmq, XM }, 0 },
   },
   /* EVEX_W_0F3810_P_2 */
   {
     { Bad_Opcode },
-    { "vpsrlvw",	{ XM, Vex, EXx } },
+    { "vpsrlvw",	{ XM, Vex, EXx }, 0 },
   },
   /* EVEX_W_0F3811_P_1 */
   {
-    { "vpmovusdb",	{ EXxmmqd, XM } },
+    { "vpmovusdb",	{ EXxmmqd, XM }, 0 },
   },
   /* EVEX_W_0F3811_P_2 */
   {
     { Bad_Opcode },
-    { "vpsravw",	{ XM, Vex, EXx } },
+    { "vpsravw",	{ XM, Vex, EXx }, 0 },
   },
   /* EVEX_W_0F3812_P_1 */
   {
-    { "vpmovusqb",	{ EXxmmdw, XM } },
+    { "vpmovusqb",	{ EXxmmdw, XM }, 0 },
   },
   /* EVEX_W_0F3812_P_2 */
   {
     { Bad_Opcode },
-    { "vpsllvw",	{ XM, Vex, EXx } },
+    { "vpsllvw",	{ XM, Vex, EXx }, 0 },
   },
   /* EVEX_W_0F3813_P_1 */
   {
-    { "vpmovusdw",	{ EXxmmq, XM } },
+    { "vpmovusdw",	{ EXxmmq, XM }, 0 },
   },
   /* EVEX_W_0F3813_P_2 */
   {
-    { "vcvtph2ps",	{ XM, EXxmmq, EXxEVexS } },
+    { "vcvtph2ps",	{ XM, EXxmmq, EXxEVexS }, 0 },
   },
   /* EVEX_W_0F3814_P_1 */
   {
-    { "vpmovusqw",	{ EXxmmqd, XM } },
+    { "vpmovusqw",	{ EXxmmqd, XM }, 0 },
   },
   /* EVEX_W_0F3815_P_1 */
   {
-    { "vpmovusqd",	{ EXxmmq, XM } },
+    { "vpmovusqd",	{ EXxmmq, XM }, 0 },
   },
   /* EVEX_W_0F3818_P_2 */
   {
-    { "vbroadcastss",	{ XM, EXxmm_md } },
+    { "vbroadcastss",	{ XM, EXxmm_md }, 0 },
   },
   /* EVEX_W_0F3819_P_2 */
   {
-    { "vbroadcastf32x2",	{ XM, EXxmm_mq } },
-    { "vbroadcastsd",	{ XM, EXxmm_mq } },
+    { "vbroadcastf32x2",	{ XM, EXxmm_mq }, 0 },
+    { "vbroadcastsd",	{ XM, EXxmm_mq }, 0 },
   },
   /* EVEX_W_0F381A_P_2 */
   {
-    { "vbroadcastf32x4",	{ XM, EXxmm } },
-    { "vbroadcastf64x2",	{ XM, EXxmm } },
+    { "vbroadcastf32x4",	{ XM, EXxmm }, 0 },
+    { "vbroadcastf64x2",	{ XM, EXxmm }, 0 },
   },
   /* EVEX_W_0F381B_P_2 */
   {
-    { "vbroadcastf32x8",	{ XM, EXxmmq } },
-    { "vbroadcastf64x4",	{ XM, EXymm } },
+    { "vbroadcastf32x8",	{ XM, EXxmmq }, 0 },
+    { "vbroadcastf64x4",	{ XM, EXymm }, 0 },
   },
   /* EVEX_W_0F381E_P_2 */
   {
-    { "vpabsd",	{ XM, EXx } },
+    { "vpabsd",	{ XM, EXx }, 0 },
   },
   /* EVEX_W_0F381F_P_2 */
   {
     { Bad_Opcode },
-    { "vpabsq",	{ XM, EXx } },
+    { "vpabsq",	{ XM, EXx }, 0 },
   },
   /* EVEX_W_0F3820_P_1 */
   {
-    { "vpmovswb",	{ EXxmmq, XM } },
+    { "vpmovswb",	{ EXxmmq, XM }, 0 },
   },
   /* EVEX_W_0F3821_P_1 */
   {
-    { "vpmovsdb",	{ EXxmmqd, XM } },
+    { "vpmovsdb",	{ EXxmmqd, XM }, 0 },
   },
   /* EVEX_W_0F3822_P_1 */
   {
-    { "vpmovsqb",	{ EXxmmdw, XM } },
+    { "vpmovsqb",	{ EXxmmdw, XM }, 0 },
   },
   /* EVEX_W_0F3823_P_1 */
   {
-    { "vpmovsdw",	{ EXxmmq, XM } },
+    { "vpmovsdw",	{ EXxmmq, XM }, 0 },
   },
   /* EVEX_W_0F3824_P_1 */
   {
-    { "vpmovsqw",	{ EXxmmqd, XM } },
+    { "vpmovsqw",	{ EXxmmqd, XM }, 0 },
   },
   /* EVEX_W_0F3825_P_1 */
   {
-    { "vpmovsqd",	{ EXxmmq, XM } },
+    { "vpmovsqd",	{ EXxmmq, XM }, 0 },
   },
   /* EVEX_W_0F3825_P_2 */
   {
-    { "vpmovsxdq",	{ XM, EXxmmq } },
+    { "vpmovsxdq",	{ XM, EXxmmq }, 0 },
   },
   /* EVEX_W_0F3826_P_1 */
   {
-    { "vptestnmb",	{ XMask, Vex, EXx } },
-    { "vptestnmw",	{ XMask, Vex, EXx } },
+    { "vptestnmb",	{ XMask, Vex, EXx }, 0 },
+    { "vptestnmw",	{ XMask, Vex, EXx }, 0 },
   },
   /* EVEX_W_0F3826_P_2 */
   {
-    { "vptestmb",	{ XMask, Vex, EXx } },
-    { "vptestmw",	{ XMask, Vex, EXx } },
+    { "vptestmb",	{ XMask, Vex, EXx }, 0 },
+    { "vptestmw",	{ XMask, Vex, EXx }, 0 },
   },
   /* EVEX_W_0F3828_P_1 */
   {
-    { "vpmovm2b",	{ XM, MaskR } },
-    { "vpmovm2w",	{ XM, MaskR } },
+    { "vpmovm2b",	{ XM, MaskR }, 0 },
+    { "vpmovm2w",	{ XM, MaskR }, 0 },
   },
   /* EVEX_W_0F3828_P_2 */
   {
     { Bad_Opcode },
-    { "vpmuldq",	{ XM, Vex, EXx } },
+    { "vpmuldq",	{ XM, Vex, EXx }, 0 },
   },
   /* EVEX_W_0F3829_P_1 */
   {
-    { "vpmovb2m",	{ XMask, EXx } },
-    { "vpmovw2m",	{ XMask, EXx } },
+    { "vpmovb2m",	{ XMask, EXx }, 0 },
+    { "vpmovw2m",	{ XMask, EXx }, 0 },
   },
   /* EVEX_W_0F3829_P_2 */
   {
     { Bad_Opcode },
-    { "vpcmpeqq",	{ XMask, Vex, EXx } },
+    { "vpcmpeqq",	{ XMask, Vex, EXx }, 0 },
   },
   /* EVEX_W_0F382A_P_1 */
   {
     { Bad_Opcode },
-    { "vpbroadcastmb2q",	{ XM, MaskR } },
+    { "vpbroadcastmb2q",	{ XM, MaskR }, 0 },
   },
   /* EVEX_W_0F382A_P_2 */
   {
-    { "vmovntdqa",	{ XM, EXEvexXNoBcst } },
+    { "vmovntdqa",	{ XM, EXEvexXNoBcst }, 0 },
   },
   /* EVEX_W_0F382B_P_2 */
   {
-    { "vpackusdw",	{ XM, Vex, EXx } },
+    { "vpackusdw",	{ XM, Vex, EXx }, 0 },
   },
   /* EVEX_W_0F3830_P_1 */
   {
-    { "vpmovwb",	{ EXxmmq, XM } },
+    { "vpmovwb",	{ EXxmmq, XM }, 0 },
   },
   /* EVEX_W_0F3831_P_1 */
   {
-    { "vpmovdb",	{ EXxmmqd, XM } },
+    { "vpmovdb",	{ EXxmmqd, XM }, 0 },
   },
   /* EVEX_W_0F3832_P_1 */
   {
-    { "vpmovqb",	{ EXxmmdw, XM } },
+    { "vpmovqb",	{ EXxmmdw, XM }, 0 },
   },
   /* EVEX_W_0F3833_P_1 */
   {
-    { "vpmovdw",	{ EXxmmq, XM } },
+    { "vpmovdw",	{ EXxmmq, XM }, 0 },
   },
   /* EVEX_W_0F3834_P_1 */
   {
-    { "vpmovqw",	{ EXxmmqd, XM } },
+    { "vpmovqw",	{ EXxmmqd, XM }, 0 },
   },
   /* EVEX_W_0F3835_P_1 */
   {
-    { "vpmovqd",	{ EXxmmq, XM } },
+    { "vpmovqd",	{ EXxmmq, XM }, 0 },
   },
   /* EVEX_W_0F3835_P_2 */
   {
-    { "vpmovzxdq",	{ XM, EXxmmq } },
+    { "vpmovzxdq",	{ XM, EXxmmq }, 0 },
   },
   /* EVEX_W_0F3837_P_2 */
   {
     { Bad_Opcode },
-    { "vpcmpgtq",	{ XMask, Vex, EXx } },
+    { "vpcmpgtq",	{ XMask, Vex, EXx }, 0 },
   },
   /* EVEX_W_0F3838_P_1 */
   {
-    { "vpmovm2d",	{ XM, MaskR } },
-    { "vpmovm2q",	{ XM, MaskR } },
+    { "vpmovm2d",	{ XM, MaskR }, 0 },
+    { "vpmovm2q",	{ XM, MaskR }, 0 },
   },
   /* EVEX_W_0F3839_P_1 */
   {
-    { "vpmovd2m",	{ XMask, EXx } },
-    { "vpmovq2m",	{ XMask, EXx } },
+    { "vpmovd2m",	{ XMask, EXx }, 0 },
+    { "vpmovq2m",	{ XMask, EXx }, 0 },
   },
   /* EVEX_W_0F383A_P_1 */
   {
-    { "vpbroadcastmw2d",	{ XM, MaskR } },
+    { "vpbroadcastmw2d",	{ XM, MaskR }, 0 },
   },
   /* EVEX_W_0F3840_P_2 */
   {
-    { "vpmulld",	{ XM, Vex, EXx } },
-    { "vpmullq",	{ XM, Vex, EXx } },
+    { "vpmulld",	{ XM, Vex, EXx }, 0 },
+    { "vpmullq",	{ XM, Vex, EXx }, 0 },
   },
   /* EVEX_W_0F3858_P_2 */
   {
-    { "vpbroadcastd",	{ XM, EXxmm_md } },
+    { "vpbroadcastd",	{ XM, EXxmm_md }, 0 },
   },
   /* EVEX_W_0F3859_P_2 */
   {
-    { "vbroadcasti32x2",	{ XM, EXxmm_mq } },
-    { "vpbroadcastq",	{ XM, EXxmm_mq } },
+    { "vbroadcasti32x2",	{ XM, EXxmm_mq }, 0 },
+    { "vpbroadcastq",	{ XM, EXxmm_mq }, 0 },
   },
   /* EVEX_W_0F385A_P_2 */
   {
-    { "vbroadcasti32x4",	{ XM, EXxmm } },
-    { "vbroadcasti64x2",	{ XM, EXxmm } },
+    { "vbroadcasti32x4",	{ XM, EXxmm }, 0 },
+    { "vbroadcasti64x2",	{ XM, EXxmm }, 0 },
   },
   /* EVEX_W_0F385B_P_2 */
   {
-    { "vbroadcasti32x8",	{ XM, EXxmmq } },
-    { "vbroadcasti64x4",	{ XM, EXymm } },
+    { "vbroadcasti32x8",	{ XM, EXxmmq }, 0 },
+    { "vbroadcasti64x4",	{ XM, EXymm }, 0 },
   },
   /* EVEX_W_0F3866_P_2 */
   {
-    { "vpblendmb",	{ XM, Vex, EXx } },
-    { "vpblendmw",	{ XM, Vex, EXx } },
+    { "vpblendmb",	{ XM, Vex, EXx }, 0 },
+    { "vpblendmw",	{ XM, Vex, EXx }, 0 },
   },
   /* EVEX_W_0F3875_P_2 */
   {
-    { "vpermi2b",	{ XM, Vex, EXx } },
-    { "vpermi2w",	{ XM, Vex, EXx } },
+    { "vpermi2b",	{ XM, Vex, EXx }, 0 },
+    { "vpermi2w",	{ XM, Vex, EXx }, 0 },
   },
   /* EVEX_W_0F3878_P_2 */
   {
-    { "vpbroadcastb",	{ XM, EXxmm_mb } },
+    { "vpbroadcastb",	{ XM, EXxmm_mb }, 0 },
   },
   /* EVEX_W_0F3879_P_2 */
   {
-    { "vpbroadcastw",	{ XM, EXxmm_mw } },
+    { "vpbroadcastw",	{ XM, EXxmm_mw }, 0 },
   },
   /* EVEX_W_0F387A_P_2 */
   {
-    { "vpbroadcastb",	{ XM, Rd } },
+    { "vpbroadcastb",	{ XM, Rd }, 0 },
   },
   /* EVEX_W_0F387B_P_2 */
   {
-    { "vpbroadcastw",	{ XM, Rd } },
+    { "vpbroadcastw",	{ XM, Rd }, 0 },
   },
   /* EVEX_W_0F387D_P_2 */
   {
-    { "vpermt2b",	{ XM, Vex, EXx } },
-    { "vpermt2w",	{ XM, Vex, EXx } },
+    { "vpermt2b",	{ XM, Vex, EXx }, 0 },
+    { "vpermt2w",	{ XM, Vex, EXx }, 0 },
   },
   /* EVEX_W_0F3883_P_2 */
   {
     { Bad_Opcode },
-    { "vpmultishiftqb",	{ XM, Vex, EXx } },
+    { "vpmultishiftqb",	{ XM, Vex, EXx }, 0 },
   },
   /* EVEX_W_0F388D_P_2 */
   {
-    { "vpermb",	{ XM, Vex, EXx } },
-    { "vpermw",	{ XM, Vex, EXx } },
+    { "vpermb",	{ XM, Vex, EXx }, 0 },
+    { "vpermw",	{ XM, Vex, EXx }, 0 },
   },
   /* EVEX_W_0F3891_P_2 */
   {
-    { "vpgatherqd",	{ XMxmmq, MVexVSIBQDWpX } },
-    { "vpgatherqq",	{ XM, MVexVSIBQWpX } },
+    { "vpgatherqd",	{ XMxmmq, MVexVSIBQDWpX }, 0 },
+    { "vpgatherqq",	{ XM, MVexVSIBQWpX }, 0 },
   },
   /* EVEX_W_0F3893_P_2 */
   {
-    { "vgatherqps",	{ XMxmmq, MVexVSIBQDWpX } },
-    { "vgatherqpd",	{ XM, MVexVSIBQWpX } },
+    { "vgatherqps",	{ XMxmmq, MVexVSIBQDWpX }, 0 },
+    { "vgatherqpd",	{ XM, MVexVSIBQWpX }, 0 },
   },
   /* EVEX_W_0F38A1_P_2 */
   {
-    { "vpscatterqd",	{ MVexVSIBQDWpX, XMxmmq } },
-    { "vpscatterqq",	{ MVexVSIBQWpX, XM } },
+    { "vpscatterqd",	{ MVexVSIBQDWpX, XMxmmq }, 0 },
+    { "vpscatterqq",	{ MVexVSIBQWpX, XM }, 0 },
   },
   /* EVEX_W_0F38A3_P_2 */
   {
-    { "vscatterqps",	{ MVexVSIBQDWpX, XMxmmq } },
-    { "vscatterqpd",	{ MVexVSIBQWpX, XM } },
+    { "vscatterqps",	{ MVexVSIBQDWpX, XMxmmq }, 0 },
+    { "vscatterqpd",	{ MVexVSIBQWpX, XM }, 0 },
   },
   /* EVEX_W_0F38C7_R_1_P_2 */
   {
-    { "vgatherpf0qps",  { MVexVSIBDQWpX } },
-    { "vgatherpf0qpd",  { MVexVSIBQWpX } },
+    { "vgatherpf0qps",  { MVexVSIBDQWpX }, 0 },
+    { "vgatherpf0qpd",  { MVexVSIBQWpX }, 0 },
   },
   /* EVEX_W_0F38C7_R_2_P_2 */
   {
-    { "vgatherpf1qps",  { MVexVSIBDQWpX } },
-    { "vgatherpf1qpd",  { MVexVSIBQWpX } },
+    { "vgatherpf1qps",  { MVexVSIBDQWpX }, 0 },
+    { "vgatherpf1qpd",  { MVexVSIBQWpX }, 0 },
   },
   /* EVEX_W_0F38C7_R_5_P_2 */
   {
-    { "vscatterpf0qps",  { MVexVSIBDQWpX } },
-    { "vscatterpf0qpd",  { MVexVSIBQWpX } },
+    { "vscatterpf0qps",  { MVexVSIBDQWpX }, 0 },
+    { "vscatterpf0qpd",  { MVexVSIBQWpX }, 0 },
   },
   /* EVEX_W_0F38C7_R_6_P_2 */
   {
-    { "vscatterpf1qps",  { MVexVSIBDQWpX } },
-    { "vscatterpf1qpd",  { MVexVSIBQWpX } },
+    { "vscatterpf1qps",  { MVexVSIBDQWpX }, 0 },
+    { "vscatterpf1qpd",  { MVexVSIBQWpX }, 0 },
   },
   /* EVEX_W_0F3A00_P_2 */
   {
     { Bad_Opcode },
-    { "vpermq",	{ XM, EXx, Ib } },
+    { "vpermq",	{ XM, EXx, Ib }, 0 },
   },
   /* EVEX_W_0F3A01_P_2 */
   {
     { Bad_Opcode },
-    { "vpermpd",	{ XM, EXx, Ib } },
+    { "vpermpd",	{ XM, EXx, Ib }, 0 },
   },
   /* EVEX_W_0F3A04_P_2 */
   {
-    { "vpermilps",	{ XM, EXx, Ib } },
+    { "vpermilps",	{ XM, EXx, Ib }, 0 },
   },
   /* EVEX_W_0F3A05_P_2 */
   {
     { Bad_Opcode },
-    { "vpermilpd",	{ XM, EXx, Ib } },
+    { "vpermilpd",	{ XM, EXx, Ib }, 0 },
   },
   /* EVEX_W_0F3A08_P_2 */
   {
-    { "vrndscaleps",	{ XM, EXx, EXxEVexS, Ib } },
+    { "vrndscaleps",	{ XM, EXx, EXxEVexS, Ib }, 0 },
   },
   /* EVEX_W_0F3A09_P_2 */
   {
     { Bad_Opcode },
-    { "vrndscalepd",	{ XM, EXx, EXxEVexS, Ib } },
+    { "vrndscalepd",	{ XM, EXx, EXxEVexS, Ib }, 0 },
   },
   /* EVEX_W_0F3A0A_P_2 */
   {
-    { "vrndscaless",	{ XMScalar, VexScalar, EXxmm_md, EXxEVexS, Ib } },
+    { "vrndscaless",	{ XMScalar, VexScalar, EXxmm_md, EXxEVexS, Ib }, 0 },
   },
   /* EVEX_W_0F3A0B_P_2 */
   {
     { Bad_Opcode },
-    { "vrndscalesd",	{ XMScalar, VexScalar, EXxmm_mq, EXxEVexS, Ib } },
+    { "vrndscalesd",	{ XMScalar, VexScalar, EXxmm_mq, EXxEVexS, Ib }, 0 },
   },
   /* EVEX_W_0F3A16_P_2 */
   {
-    { "vpextrd",	{ Edqd, XM, Ib } },
-    { "vpextrq",	{ Eq, XM, Ib } },
+    { "vpextrd",	{ Edqd, XM, Ib }, 0 },
+    { "vpextrq",	{ Eq, XM, Ib }, 0 },
   },
   /* EVEX_W_0F3A18_P_2 */
   {
-    { "vinsertf32x4",	{ XM, Vex, EXxmm, Ib } },
-    { "vinsertf64x2",	{ XM, Vex, EXxmm, Ib } },
+    { "vinsertf32x4",	{ XM, Vex, EXxmm, Ib }, 0 },
+    { "vinsertf64x2",	{ XM, Vex, EXxmm, Ib }, 0 },
   },
   /* EVEX_W_0F3A19_P_2 */
   {
-    { "vextractf32x4",	{ EXxmm, XM, Ib } },
-    { "vextractf64x2",	{ EXxmm, XM, Ib } },
+    { "vextractf32x4",	{ EXxmm, XM, Ib }, 0 },
+    { "vextractf64x2",	{ EXxmm, XM, Ib }, 0 },
   },
   /* EVEX_W_0F3A1A_P_2 */
   {
-    { "vinsertf32x8",	{ XM, Vex, EXxmmq, Ib } },
-    { "vinsertf64x4",	{ XM, Vex, EXxmmq, Ib } },
+    { "vinsertf32x8",	{ XM, Vex, EXxmmq, Ib }, 0 },
+    { "vinsertf64x4",	{ XM, Vex, EXxmmq, Ib }, 0 },
   },
   /* EVEX_W_0F3A1B_P_2 */
   {
-    { "vextractf32x8",	{ EXxmmq, XM, Ib } },
-    { "vextractf64x4",	{ EXxmmq, XM, Ib } },
+    { "vextractf32x8",	{ EXxmmq, XM, Ib }, 0 },
+    { "vextractf64x4",	{ EXxmmq, XM, Ib }, 0 },
   },
   /* EVEX_W_0F3A1D_P_2 */
   {
-    { "vcvtps2ph",	{ EXxmmq, XM, EXxEVexS, Ib } },
+    { "vcvtps2ph",	{ EXxmmq, XM, EXxEVexS, Ib }, 0 },
   },
   /* EVEX_W_0F3A21_P_2 */
   {
-    { "vinsertps",	{ XMM, Vex, EXxmm_md, Ib } },
+    { "vinsertps",	{ XMM, Vex, EXxmm_md, Ib }, 0 },
   },
   /* EVEX_W_0F3A22_P_2 */
   {
-    { "vpinsrd",	{ XM, Vex128, Edqd, Ib } },
-    { "vpinsrq",	{ XM, Vex128, Eq, Ib } },
+    { "vpinsrd",	{ XM, Vex128, Edqd, Ib }, 0 },
+    { "vpinsrq",	{ XM, Vex128, Eq, Ib }, 0 },
   },
   /* EVEX_W_0F3A23_P_2 */
   {
-    { "vshuff32x4",	{ XM, Vex, EXx, Ib } },
-    { "vshuff64x2",	{ XM, Vex, EXx, Ib } },
+    { "vshuff32x4",	{ XM, Vex, EXx, Ib }, 0 },
+    { "vshuff64x2",	{ XM, Vex, EXx, Ib }, 0 },
   },
   /* EVEX_W_0F3A38_P_2 */
   {
-    { "vinserti32x4",	{ XM, Vex, EXxmm, Ib } },
-    { "vinserti64x2",	{ XM, Vex, EXxmm, Ib } },
+    { "vinserti32x4",	{ XM, Vex, EXxmm, Ib }, 0 },
+    { "vinserti64x2",	{ XM, Vex, EXxmm, Ib }, 0 },
   },
   /* EVEX_W_0F3A39_P_2 */
   {
-    { "vextracti32x4",	{ EXxmm, XM, Ib } },
-    { "vextracti64x2",	{ EXxmm, XM, Ib } },
+    { "vextracti32x4",	{ EXxmm, XM, Ib }, 0 },
+    { "vextracti64x2",	{ EXxmm, XM, Ib }, 0 },
   },
   /* EVEX_W_0F3A3A_P_2 */
   {
-    { "vinserti32x8",	{ XM, Vex, EXxmmq, Ib } },
-    { "vinserti64x4",	{ XM, Vex, EXxmmq, Ib } },
+    { "vinserti32x8",	{ XM, Vex, EXxmmq, Ib }, 0 },
+    { "vinserti64x4",	{ XM, Vex, EXxmmq, Ib }, 0 },
   },
   /* EVEX_W_0F3A3B_P_2 */
   {
-    { "vextracti32x8",	{ EXxmmq, XM, Ib } },
-    { "vextracti64x4",	{ EXxmmq, XM, Ib } },
+    { "vextracti32x8",	{ EXxmmq, XM, Ib }, 0 },
+    { "vextracti64x4",	{ EXxmmq, XM, Ib }, 0 },
   },
   /* EVEX_W_0F3A3E_P_2 */
   {
-    { "vpcmpub",	{ XMask, Vex, EXx, Ib } },
-    { "vpcmpuw",	{ XMask, Vex, EXx, Ib } },
+    { "vpcmpub",	{ XMask, Vex, EXx, Ib }, 0 },
+    { "vpcmpuw",	{ XMask, Vex, EXx, Ib }, 0 },
   },
   /* EVEX_W_0F3A3F_P_2 */
   {
-    { "vpcmpb",	{ XMask, Vex, EXx, Ib } },
-    { "vpcmpw",	{ XMask, Vex, EXx, Ib } },
+    { "vpcmpb",	{ XMask, Vex, EXx, Ib }, 0 },
+    { "vpcmpw",	{ XMask, Vex, EXx, Ib }, 0 },
   },
   /* EVEX_W_0F3A42_P_2 */
   {
-    { "vdbpsadbw",	{ XM, Vex, EXx, Ib } },
+    { "vdbpsadbw",	{ XM, Vex, EXx, Ib }, 0 },
   },
   /* EVEX_W_0F3A43_P_2 */
   {
-    { "vshufi32x4",	{ XM, Vex, EXx, Ib } },
-    { "vshufi64x2",	{ XM, Vex, EXx, Ib } },
+    { "vshufi32x4",	{ XM, Vex, EXx, Ib }, 0 },
+    { "vshufi64x2",	{ XM, Vex, EXx, Ib }, 0 },
   },
   /* EVEX_W_0F3A50_P_2 */
   {
-    { "vrangeps",	{ XM, Vex, EXx, EXxEVexS, Ib } },
-    { "vrangepd",	{ XM, Vex, EXx, EXxEVexS, Ib } },
+    { "vrangeps",	{ XM, Vex, EXx, EXxEVexS, Ib }, 0 },
+    { "vrangepd",	{ XM, Vex, EXx, EXxEVexS, Ib }, 0 },
   },
   /* EVEX_W_0F3A51_P_2 */
   {
-    { "vrangess",	{ XMScalar, VexScalar, EXxmm_md, EXxEVexS, Ib } },
-    { "vrangesd",	{ XMScalar, VexScalar, EXxmm_mq, EXxEVexS, Ib } },
+    { "vrangess",	{ XMScalar, VexScalar, EXxmm_md, EXxEVexS, Ib }, 0 },
+    { "vrangesd",	{ XMScalar, VexScalar, EXxmm_mq, EXxEVexS, Ib }, 0 },
   },
   /* EVEX_W_0F3A56_P_2 */
   {
-    { "vreduceps",	{ XM, EXx, EXxEVexS, Ib } },
-    { "vreducepd",	{ XM, EXx, EXxEVexS, Ib } },
+    { "vreduceps",	{ XM, EXx, EXxEVexS, Ib }, 0 },
+    { "vreducepd",	{ XM, EXx, EXxEVexS, Ib }, 0 },
   },
   /* EVEX_W_0F3A57_P_2 */
   {
-    { "vreducess",	{ XMScalar, VexScalar, EXxmm_md, EXxEVexS, Ib } },
-    { "vreducesd",	{ XMScalar, VexScalar, EXxmm_mq, EXxEVexS, Ib } },
+    { "vreducess",	{ XMScalar, VexScalar, EXxmm_md, EXxEVexS, Ib }, 0 },
+    { "vreducesd",	{ XMScalar, VexScalar, EXxmm_mq, EXxEVexS, Ib }, 0 },
   },
   /* EVEX_W_0F3A66_P_2 */
   {
-    { "vfpclassps",	{ XMask, EXx, Ib } },
-    { "vfpclasspd",	{ XMask, EXx, Ib } },
+    { "vfpclassps",	{ XMask, EXx, Ib }, 0 },
+    { "vfpclasspd",	{ XMask, EXx, Ib }, 0 },
   },
   /* EVEX_W_0F3A67_P_2 */
   {
-    { "vfpclassss",	{ XMask, EXxmm_md, Ib } },
-    { "vfpclasssd",	{ XMask, EXxmm_mq, Ib } },
+    { "vfpclassss",	{ XMask, EXxmm_md, Ib }, 0 },
+    { "vfpclasssd",	{ XMask, EXxmm_mq, Ib }, 0 },
   },
 #endif /* NEED_VEX_W_TABLE */
 #ifdef NEED_MOD_TABLE
diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c
index 3ff9db0..740b800 100644
--- a/opcodes/i386-dis.c
+++ b/opcodes/i386-dis.c
@@ -221,8 +221,25 @@ fetch_data (struct disassemble_info *info, bfd_byte *addr)
   return 1;
 }
 
+/* Possible values for prefix requirement.  */
+#define PREFIX_MANDATORY_REPZ	PREFIX_REPZ
+#define PREFIX_MANDATORY_REPNZ	PREFIX_REPNZ
+#define PREFIX_MANDATORY_DATA	PREFIX_DATA
+#define PREFIX_MANDATORY_ADDR	PREFIX_ADDR
+#define PREFIX_MANDATORY_LOCK	PREFIX_LOCK
+#define PREFIX_UD_SHIFT		16
+#define PREFIX_UD_REPZ		(PREFIX_MANDATORY_REPZ << PREFIX_UD_SHIFT)
+#define PREFIX_UD_REPNZ		(PREFIX_MANDATORY_REPNZ << PREFIX_UD_SHIFT)
+#define PREFIX_UD_DATA		(PREFIX_MANDATORY_DATA << PREFIX_UD_SHIFT)
+#define PREFIX_UD_ADDR		(PREFIX_MANDATORY_ADDR << PREFIX_UD_SHIFT)
+#define PREFIX_UD_LOCK		(PREFIX_MANDATORY_LOCK << PREFIX_UD_SHIFT)
+
+#define PREFIX_MANDATORY	(PREFIX_MANDATORY_REPZ \
+				 | PREFIX_MANDATORY_REPNZ \
+				 | PREFIX_MANDATORY_DATA)
+
 #define XX { NULL, 0 }
-#define Bad_Opcode NULL, { { NULL, 0 } }
+#define Bad_Opcode NULL, { { NULL, 0 } }, PREFIX_MANDATORY
 
 #define Eb { OP_E, b_mode }
 #define Ebnd { OP_E, bnd_mode }
@@ -663,15 +680,17 @@ enum
   USE_EVEX_TABLE
 };
 
-#define FLOAT			NULL, { { NULL, FLOATCODE } }
+#define FLOAT			NULL, { { NULL, FLOATCODE } }, 0
 
-#define DIS386(T, I)		NULL, { { NULL, (T)}, { NULL,  (I) } }
+#define DIS386(T, I)		NULL, { { NULL, (T)}, { NULL,  (I) } }, 0
+#define DIS386_PREFIX(T, I, P)		NULL, { { NULL, (T)}, { NULL,  (I) } }, P
 #define REG_TABLE(I)		DIS386 (USE_REG_TABLE, (I))
 #define MOD_TABLE(I)		DIS386 (USE_MOD_TABLE, (I))
 #define RM_TABLE(I)		DIS386 (USE_RM_TABLE, (I))
 #define PREFIX_TABLE(I)		DIS386 (USE_PREFIX_TABLE, (I))
 #define X86_64_TABLE(I)		DIS386 (USE_X86_64_TABLE, (I))
 #define THREE_BYTE_TABLE(I)	DIS386 (USE_3BYTE_TABLE, (I))
+#define THREE_BYTE_TABLE_PREFIX(I, P)	DIS386_PREFIX (USE_3BYTE_TABLE, (I), P)
 #define XOP_8F_TABLE(I)		DIS386 (USE_XOP_8F_TABLE, (I))
 #define VEX_C4_TABLE(I)		DIS386 (USE_VEX_C4_TABLE, (I))
 #define VEX_C5_TABLE(I)		DIS386 (USE_VEX_C5_TABLE, (I))
@@ -2351,6 +2370,7 @@ struct dis386 {
       op_rtn rtn;
       int bytemode;
     } op[MAX_OPERANDS];
+  unsigned int prefix_requirement;
 };
 
 /* Upper case letters in the instruction names here are macros.
@@ -2411,113 +2431,113 @@ struct dis386 {
 
 static const struct dis386 dis386[] = {
   /* 00 */
-  { "addB",		{ Ebh1, Gb } },
-  { "addS",		{ Evh1, Gv } },
-  { "addB",		{ Gb, EbS } },
-  { "addS",		{ Gv, EvS } },
-  { "addB",		{ AL, Ib } },
-  { "addS",		{ eAX, Iv } },
+  { "addB",		{ Ebh1, Gb }, 0 },
+  { "addS",		{ Evh1, Gv }, 0 },
+  { "addB",		{ Gb, EbS }, 0 },
+  { "addS",		{ Gv, EvS }, 0 },
+  { "addB",		{ AL, Ib }, 0 },
+  { "addS",		{ eAX, Iv }, 0 },
   { X86_64_TABLE (X86_64_06) },
   { X86_64_TABLE (X86_64_07) },
   /* 08 */
-  { "orB",		{ Ebh1, Gb } },
-  { "orS",		{ Evh1, Gv } },
-  { "orB",		{ Gb, EbS } },
-  { "orS",		{ Gv, EvS } },
-  { "orB",		{ AL, Ib } },
-  { "orS",		{ eAX, Iv } },
+  { "orB",		{ Ebh1, Gb }, 0 },
+  { "orS",		{ Evh1, Gv }, 0 },
+  { "orB",		{ Gb, EbS }, 0 },
+  { "orS",		{ Gv, EvS }, 0 },
+  { "orB",		{ AL, Ib }, 0 },
+  { "orS",		{ eAX, Iv }, 0 },
   { X86_64_TABLE (X86_64_0D) },
   { Bad_Opcode },	/* 0x0f extended opcode escape */
   /* 10 */
-  { "adcB",		{ Ebh1, Gb } },
-  { "adcS",		{ Evh1, Gv } },
-  { "adcB",		{ Gb, EbS } },
-  { "adcS",		{ Gv, EvS } },
-  { "adcB",		{ AL, Ib } },
-  { "adcS",		{ eAX, Iv } },
+  { "adcB",		{ Ebh1, Gb }, 0 },
+  { "adcS",		{ Evh1, Gv }, 0 },
+  { "adcB",		{ Gb, EbS }, 0 },
+  { "adcS",		{ Gv, EvS }, 0 },
+  { "adcB",		{ AL, Ib }, 0 },
+  { "adcS",		{ eAX, Iv }, 0 },
   { X86_64_TABLE (X86_64_16) },
   { X86_64_TABLE (X86_64_17) },
   /* 18 */
-  { "sbbB",		{ Ebh1, Gb } },
-  { "sbbS",		{ Evh1, Gv } },
-  { "sbbB",		{ Gb, EbS } },
-  { "sbbS",		{ Gv, EvS } },
-  { "sbbB",		{ AL, Ib } },
-  { "sbbS",		{ eAX, Iv } },
+  { "sbbB",		{ Ebh1, Gb }, 0 },
+  { "sbbS",		{ Evh1, Gv }, 0 },
+  { "sbbB",		{ Gb, EbS }, 0 },
+  { "sbbS",		{ Gv, EvS }, 0 },
+  { "sbbB",		{ AL, Ib }, 0 },
+  { "sbbS",		{ eAX, Iv }, 0 },
   { X86_64_TABLE (X86_64_1E) },
   { X86_64_TABLE (X86_64_1F) },
   /* 20 */
-  { "andB",		{ Ebh1, Gb } },
-  { "andS",		{ Evh1, Gv } },
-  { "andB",		{ Gb, EbS } },
-  { "andS",		{ Gv, EvS } },
-  { "andB",		{ AL, Ib } },
-  { "andS",		{ eAX, Iv } },
+  { "andB",		{ Ebh1, Gb }, 0 },
+  { "andS",		{ Evh1, Gv }, 0 },
+  { "andB",		{ Gb, EbS }, 0 },
+  { "andS",		{ Gv, EvS }, 0 },
+  { "andB",		{ AL, Ib }, 0 },
+  { "andS",		{ eAX, Iv }, 0 },
   { Bad_Opcode },	/* SEG ES prefix */
   { X86_64_TABLE (X86_64_27) },
   /* 28 */
-  { "subB",		{ Ebh1, Gb } },
-  { "subS",		{ Evh1, Gv } },
-  { "subB",		{ Gb, EbS } },
-  { "subS",		{ Gv, EvS } },
-  { "subB",		{ AL, Ib } },
-  { "subS",		{ eAX, Iv } },
+  { "subB",		{ Ebh1, Gb }, 0 },
+  { "subS",		{ Evh1, Gv }, 0 },
+  { "subB",		{ Gb, EbS }, 0 },
+  { "subS",		{ Gv, EvS }, 0 },
+  { "subB",		{ AL, Ib }, 0 },
+  { "subS",		{ eAX, Iv }, 0 },
   { Bad_Opcode },	/* SEG CS prefix */
   { X86_64_TABLE (X86_64_2F) },
   /* 30 */
-  { "xorB",		{ Ebh1, Gb } },
-  { "xorS",		{ Evh1, Gv } },
-  { "xorB",		{ Gb, EbS } },
-  { "xorS",		{ Gv, EvS } },
-  { "xorB",		{ AL, Ib } },
-  { "xorS",		{ eAX, Iv } },
+  { "xorB",		{ Ebh1, Gb }, 0 },
+  { "xorS",		{ Evh1, Gv }, 0 },
+  { "xorB",		{ Gb, EbS }, 0 },
+  { "xorS",		{ Gv, EvS }, 0 },
+  { "xorB",		{ AL, Ib }, 0 },
+  { "xorS",		{ eAX, Iv }, 0 },
   { Bad_Opcode },	/* SEG SS prefix */
   { X86_64_TABLE (X86_64_37) },
   /* 38 */
-  { "cmpB",		{ Eb, Gb } },
-  { "cmpS",		{ Ev, Gv } },
-  { "cmpB",		{ Gb, EbS } },
-  { "cmpS",		{ Gv, EvS } },
-  { "cmpB",		{ AL, Ib } },
-  { "cmpS",		{ eAX, Iv } },
+  { "cmpB",		{ Eb, Gb }, 0 },
+  { "cmpS",		{ Ev, Gv }, 0 },
+  { "cmpB",		{ Gb, EbS }, 0 },
+  { "cmpS",		{ Gv, EvS }, 0 },
+  { "cmpB",		{ AL, Ib }, 0 },
+  { "cmpS",		{ eAX, Iv }, 0 },
   { Bad_Opcode },	/* SEG DS prefix */
   { X86_64_TABLE (X86_64_3F) },
   /* 40 */
-  { "inc{S|}",		{ RMeAX } },
-  { "inc{S|}",		{ RMeCX } },
-  { "inc{S|}",		{ RMeDX } },
-  { "inc{S|}",		{ RMeBX } },
-  { "inc{S|}",		{ RMeSP } },
-  { "inc{S|}",		{ RMeBP } },
-  { "inc{S|}",		{ RMeSI } },
-  { "inc{S|}",		{ RMeDI } },
+  { "inc{S|}",		{ RMeAX }, 0 },
+  { "inc{S|}",		{ RMeCX }, 0 },
+  { "inc{S|}",		{ RMeDX }, 0 },
+  { "inc{S|}",		{ RMeBX }, 0 },
+  { "inc{S|}",		{ RMeSP }, 0 },
+  { "inc{S|}",		{ RMeBP }, 0 },
+  { "inc{S|}",		{ RMeSI }, 0 },
+  { "inc{S|}",		{ RMeDI }, 0 },
   /* 48 */
-  { "dec{S|}",		{ RMeAX } },
-  { "dec{S|}",		{ RMeCX } },
-  { "dec{S|}",		{ RMeDX } },
-  { "dec{S|}",		{ RMeBX } },
-  { "dec{S|}",		{ RMeSP } },
-  { "dec{S|}",		{ RMeBP } },
-  { "dec{S|}",		{ RMeSI } },
-  { "dec{S|}",		{ RMeDI } },
+  { "dec{S|}",		{ RMeAX }, 0 },
+  { "dec{S|}",		{ RMeCX }, 0 },
+  { "dec{S|}",		{ RMeDX }, 0 },
+  { "dec{S|}",		{ RMeBX }, 0 },
+  { "dec{S|}",		{ RMeSP }, 0 },
+  { "dec{S|}",		{ RMeBP }, 0 },
+  { "dec{S|}",		{ RMeSI }, 0 },
+  { "dec{S|}",		{ RMeDI }, 0 },
   /* 50 */
-  { "pushV",		{ RMrAX } },
-  { "pushV",		{ RMrCX } },
-  { "pushV",		{ RMrDX } },
-  { "pushV",		{ RMrBX } },
-  { "pushV",		{ RMrSP } },
-  { "pushV",		{ RMrBP } },
-  { "pushV",		{ RMrSI } },
-  { "pushV",		{ RMrDI } },
+  { "pushV",		{ RMrAX }, 0 },
+  { "pushV",		{ RMrCX }, 0 },
+  { "pushV",		{ RMrDX }, 0 },
+  { "pushV",		{ RMrBX }, 0 },
+  { "pushV",		{ RMrSP }, 0 },
+  { "pushV",		{ RMrBP }, 0 },
+  { "pushV",		{ RMrSI }, 0 },
+  { "pushV",		{ RMrDI }, 0 },
   /* 58 */
-  { "popV",		{ RMrAX } },
-  { "popV",		{ RMrCX } },
-  { "popV",		{ RMrDX } },
-  { "popV",		{ RMrBX } },
-  { "popV",		{ RMrSP } },
-  { "popV",		{ RMrBP } },
-  { "popV",		{ RMrSI } },
-  { "popV",		{ RMrDI } },
+  { "popV",		{ RMrAX }, 0 },
+  { "popV",		{ RMrCX }, 0 },
+  { "popV",		{ RMrDX }, 0 },
+  { "popV",		{ RMrBX }, 0 },
+  { "popV",		{ RMrSP }, 0 },
+  { "popV",		{ RMrBP }, 0 },
+  { "popV",		{ RMrSI }, 0 },
+  { "popV",		{ RMrDI }, 0 },
   /* 60 */
   { X86_64_TABLE (X86_64_60) },
   { X86_64_TABLE (X86_64_61) },
@@ -2528,122 +2548,122 @@ static const struct dis386 dis386[] = {
   { Bad_Opcode },	/* op size prefix */
   { Bad_Opcode },	/* adr size prefix */
   /* 68 */
-  { "pushT",		{ sIv } },
-  { "imulS",		{ Gv, Ev, Iv } },
-  { "pushT",		{ sIbT } },
-  { "imulS",		{ Gv, Ev, sIb } },
-  { "ins{b|}",		{ Ybr, indirDX } },
+  { "pushT",		{ sIv }, 0 },
+  { "imulS",		{ Gv, Ev, Iv }, 0 },
+  { "pushT",		{ sIbT }, 0 },
+  { "imulS",		{ Gv, Ev, sIb }, 0 },
+  { "ins{b|}",		{ Ybr, indirDX }, 0 },
   { X86_64_TABLE (X86_64_6D) },
-  { "outs{b|}",		{ indirDXr, Xb } },
+  { "outs{b|}",		{ indirDXr, Xb }, 0 },
   { X86_64_TABLE (X86_64_6F) },
   /* 70 */
-  { "joH",		{ Jb, BND, cond_jump_flag } },
-  { "jnoH",		{ Jb, BND, cond_jump_flag } },
-  { "jbH",		{ Jb, BND, cond_jump_flag } },
-  { "jaeH",		{ Jb, BND, cond_jump_flag } },
-  { "jeH",		{ Jb, BND, cond_jump_flag } },
-  { "jneH",		{ Jb, BND, cond_jump_flag } },
-  { "jbeH",		{ Jb, BND, cond_jump_flag } },
-  { "jaH",		{ Jb, BND, cond_jump_flag } },
+  { "joH",		{ Jb, BND, cond_jump_flag }, 0 },
+  { "jnoH",		{ Jb, BND, cond_jump_flag }, 0 },
+  { "jbH",		{ Jb, BND, cond_jump_flag }, 0 },
+  { "jaeH",		{ Jb, BND, cond_jump_flag }, 0 },
+  { "jeH",		{ Jb, BND, cond_jump_flag }, 0 },
+  { "jneH",		{ Jb, BND, cond_jump_flag }, 0 },
+  { "jbeH",		{ Jb, BND, cond_jump_flag }, 0 },
+  { "jaH",		{ Jb, BND, cond_jump_flag }, 0 },
   /* 78 */
-  { "jsH",		{ Jb, BND, cond_jump_flag } },
-  { "jnsH",		{ Jb, BND, cond_jump_flag } },
-  { "jpH",		{ Jb, BND, cond_jump_flag } },
-  { "jnpH",		{ Jb, BND, cond_jump_flag } },
-  { "jlH",		{ Jb, BND, cond_jump_flag } },
-  { "jgeH",		{ Jb, BND, cond_jump_flag } },
-  { "jleH",		{ Jb, BND, cond_jump_flag } },
-  { "jgH",		{ Jb, BND, cond_jump_flag } },
+  { "jsH",		{ Jb, BND, cond_jump_flag }, 0 },
+  { "jnsH",		{ Jb, BND, cond_jump_flag }, 0 },
+  { "jpH",		{ Jb, BND, cond_jump_flag }, 0 },
+  { "jnpH",		{ Jb, BND, cond_jump_flag }, 0 },
+  { "jlH",		{ Jb, BND, cond_jump_flag }, 0 },
+  { "jgeH",		{ Jb, BND, cond_jump_flag }, 0 },
+  { "jleH",		{ Jb, BND, cond_jump_flag }, 0 },
+  { "jgH",		{ Jb, BND, cond_jump_flag }, 0 },
   /* 80 */
   { REG_TABLE (REG_80) },
   { REG_TABLE (REG_81) },
   { Bad_Opcode },
   { REG_TABLE (REG_82) },
-  { "testB",		{ Eb, Gb } },
-  { "testS",		{ Ev, Gv } },
-  { "xchgB",		{ Ebh2, Gb } },
-  { "xchgS",		{ Evh2, Gv } },
+  { "testB",		{ Eb, Gb }, 0 },
+  { "testS",		{ Ev, Gv }, 0 },
+  { "xchgB",		{ Ebh2, Gb }, 0 },
+  { "xchgS",		{ Evh2, Gv }, 0 },
   /* 88 */
-  { "movB",		{ Ebh3, Gb } },
-  { "movS",		{ Evh3, Gv } },
-  { "movB",		{ Gb, EbS } },
-  { "movS",		{ Gv, EvS } },
-  { "movD",		{ Sv, Sw } },
+  { "movB",		{ Ebh3, Gb }, 0 },
+  { "movS",		{ Evh3, Gv }, 0 },
+  { "movB",		{ Gb, EbS }, 0 },
+  { "movS",		{ Gv, EvS }, 0 },
+  { "movD",		{ Sv, Sw }, 0 },
   { MOD_TABLE (MOD_8D) },
-  { "movD",		{ Sw, Sv } },
+  { "movD",		{ Sw, Sv }, 0 },
   { REG_TABLE (REG_8F) },
   /* 90 */
   { PREFIX_TABLE (PREFIX_90) },
-  { "xchgS",		{ RMeCX, eAX } },
-  { "xchgS",		{ RMeDX, eAX } },
-  { "xchgS",		{ RMeBX, eAX } },
-  { "xchgS",		{ RMeSP, eAX } },
-  { "xchgS",		{ RMeBP, eAX } },
-  { "xchgS",		{ RMeSI, eAX } },
-  { "xchgS",		{ RMeDI, eAX } },
+  { "xchgS",		{ RMeCX, eAX }, 0 },
+  { "xchgS",		{ RMeDX, eAX }, 0 },
+  { "xchgS",		{ RMeBX, eAX }, 0 },
+  { "xchgS",		{ RMeSP, eAX }, 0 },
+  { "xchgS",		{ RMeBP, eAX }, 0 },
+  { "xchgS",		{ RMeSI, eAX }, 0 },
+  { "xchgS",		{ RMeDI, eAX }, 0 },
   /* 98 */
-  { "cW{t|}R",		{ XX } },
-  { "cR{t|}O",		{ XX } },
+  { "cW{t|}R",		{ XX }, 0 },
+  { "cR{t|}O",		{ XX }, 0 },
   { X86_64_TABLE (X86_64_9A) },
   { Bad_Opcode },	/* fwait */
-  { "pushfT",		{ XX } },
-  { "popfT",		{ XX } },
-  { "sahf",		{ XX } },
-  { "lahf",		{ XX } },
+  { "pushfT",		{ XX }, 0 },
+  { "popfT",		{ XX }, 0 },
+  { "sahf",		{ XX }, 0 },
+  { "lahf",		{ XX }, 0 },
   /* a0 */
-  { "mov%LB",		{ AL, Ob } },
-  { "mov%LS",		{ eAX, Ov } },
-  { "mov%LB",		{ Ob, AL } },
-  { "mov%LS",		{ Ov, eAX } },
-  { "movs{b|}",		{ Ybr, Xb } },
-  { "movs{R|}",		{ Yvr, Xv } },
-  { "cmps{b|}",		{ Xb, Yb } },
-  { "cmps{R|}",		{ Xv, Yv } },
+  { "mov%LB",		{ AL, Ob }, 0 },
+  { "mov%LS",		{ eAX, Ov }, 0 },
+  { "mov%LB",		{ Ob, AL }, 0 },
+  { "mov%LS",		{ Ov, eAX }, 0 },
+  { "movs{b|}",		{ Ybr, Xb }, 0 },
+  { "movs{R|}",		{ Yvr, Xv }, 0 },
+  { "cmps{b|}",		{ Xb, Yb }, 0 },
+  { "cmps{R|}",		{ Xv, Yv }, 0 },
   /* a8 */
-  { "testB",		{ AL, Ib } },
-  { "testS",		{ eAX, Iv } },
-  { "stosB",		{ Ybr, AL } },
-  { "stosS",		{ Yvr, eAX } },
-  { "lodsB",		{ ALr, Xb } },
-  { "lodsS",		{ eAXr, Xv } },
-  { "scasB",		{ AL, Yb } },
-  { "scasS",		{ eAX, Yv } },
+  { "testB",		{ AL, Ib }, 0 },
+  { "testS",		{ eAX, Iv }, 0 },
+  { "stosB",		{ Ybr, AL }, 0 },
+  { "stosS",		{ Yvr, eAX }, 0 },
+  { "lodsB",		{ ALr, Xb }, 0 },
+  { "lodsS",		{ eAXr, Xv }, 0 },
+  { "scasB",		{ AL, Yb }, 0 },
+  { "scasS",		{ eAX, Yv }, 0 },
   /* b0 */
-  { "movB",		{ RMAL, Ib } },
-  { "movB",		{ RMCL, Ib } },
-  { "movB",		{ RMDL, Ib } },
-  { "movB",		{ RMBL, Ib } },
-  { "movB",		{ RMAH, Ib } },
-  { "movB",		{ RMCH, Ib } },
-  { "movB",		{ RMDH, Ib } },
-  { "movB",		{ RMBH, Ib } },
+  { "movB",		{ RMAL, Ib }, 0 },
+  { "movB",		{ RMCL, Ib }, 0 },
+  { "movB",		{ RMDL, Ib }, 0 },
+  { "movB",		{ RMBL, Ib }, 0 },
+  { "movB",		{ RMAH, Ib }, 0 },
+  { "movB",		{ RMCH, Ib }, 0 },
+  { "movB",		{ RMDH, Ib }, 0 },
+  { "movB",		{ RMBH, Ib }, 0 },
   /* b8 */
-  { "mov%LV",		{ RMeAX, Iv64 } },
-  { "mov%LV",		{ RMeCX, Iv64 } },
-  { "mov%LV",		{ RMeDX, Iv64 } },
-  { "mov%LV",		{ RMeBX, Iv64 } },
-  { "mov%LV",		{ RMeSP, Iv64 } },
-  { "mov%LV",		{ RMeBP, Iv64 } },
-  { "mov%LV",		{ RMeSI, Iv64 } },
-  { "mov%LV",		{ RMeDI, Iv64 } },
+  { "mov%LV",		{ RMeAX, Iv64 }, 0 },
+  { "mov%LV",		{ RMeCX, Iv64 }, 0 },
+  { "mov%LV",		{ RMeDX, Iv64 }, 0 },
+  { "mov%LV",		{ RMeBX, Iv64 }, 0 },
+  { "mov%LV",		{ RMeSP, Iv64 }, 0 },
+  { "mov%LV",		{ RMeBP, Iv64 }, 0 },
+  { "mov%LV",		{ RMeSI, Iv64 }, 0 },
+  { "mov%LV",		{ RMeDI, Iv64 }, 0 },
   /* c0 */
   { REG_TABLE (REG_C0) },
   { REG_TABLE (REG_C1) },
-  { "retT",		{ Iw, BND } },
-  { "retT",		{ BND } },
+  { "retT",		{ Iw, BND }, 0 },
+  { "retT",		{ BND }, 0 },
   { X86_64_TABLE (X86_64_C4) },
   { X86_64_TABLE (X86_64_C5) },
   { REG_TABLE (REG_C6) },
   { REG_TABLE (REG_C7) },
   /* c8 */
-  { "enterT",		{ Iw, Ib } },
-  { "leaveT",		{ XX } },
-  { "Jret{|f}P",	{ Iw } },
-  { "Jret{|f}P",	{ XX } },
-  { "int3",		{ XX } },
-  { "int",		{ Ib } },
+  { "enterT",		{ Iw, Ib }, 0 },
+  { "leaveT",		{ XX }, 0 },
+  { "Jret{|f}P",	{ Iw }, 0 },
+  { "Jret{|f}P",	{ XX }, 0 },
+  { "int3",		{ XX }, 0 },
+  { "int",		{ Ib }, 0 },
   { X86_64_TABLE (X86_64_CE) },
-  { "iret%LP",		{ XX } },
+  { "iret%LP",		{ XX }, 0 },
   /* d0 */
   { REG_TABLE (REG_D0) },
   { REG_TABLE (REG_D1) },
@@ -2652,7 +2672,7 @@ static const struct dis386 dis386[] = {
   { X86_64_TABLE (X86_64_D4) },
   { X86_64_TABLE (X86_64_D5) },
   { Bad_Opcode },
-  { "xlat",		{ DSBX } },
+  { "xlat",		{ DSBX }, 0 },
   /* d8 */
   { FLOAT },
   { FLOAT },
@@ -2663,39 +2683,39 @@ static const struct dis386 dis386[] = {
   { FLOAT },
   { FLOAT },
   /* e0 */
-  { "loopneFH",		{ Jb, XX, loop_jcxz_flag } },
-  { "loopeFH",		{ Jb, XX, loop_jcxz_flag } },
-  { "loopFH",		{ Jb, XX, loop_jcxz_flag } },
-  { "jEcxzH",		{ Jb, XX, loop_jcxz_flag } },
-  { "inB",		{ AL, Ib } },
-  { "inG",		{ zAX, Ib } },
-  { "outB",		{ Ib, AL } },
-  { "outG",		{ Ib, zAX } },
+  { "loopneFH",		{ Jb, XX, loop_jcxz_flag }, 0 },
+  { "loopeFH",		{ Jb, XX, loop_jcxz_flag }, 0 },
+  { "loopFH",		{ Jb, XX, loop_jcxz_flag }, 0 },
+  { "jEcxzH",		{ Jb, XX, loop_jcxz_flag }, 0 },
+  { "inB",		{ AL, Ib }, 0 },
+  { "inG",		{ zAX, Ib }, 0 },
+  { "outB",		{ Ib, AL }, 0 },
+  { "outG",		{ Ib, zAX }, 0 },
   /* e8 */
-  { "callT",		{ Jv, BND } },
-  { "jmpT",		{ Jv, BND } },
+  { "callT",		{ Jv, BND }, 0 },
+  { "jmpT",		{ Jv, BND }, 0 },
   { X86_64_TABLE (X86_64_EA) },
-  { "jmp",		{ Jb, BND } },
-  { "inB",		{ AL, indirDX } },
-  { "inG",		{ zAX, indirDX } },
-  { "outB",		{ indirDX, AL } },
-  { "outG",		{ indirDX, zAX } },
+  { "jmp",		{ Jb, BND }, 0 },
+  { "inB",		{ AL, indirDX }, 0 },
+  { "inG",		{ zAX, indirDX }, 0 },
+  { "outB",		{ indirDX, AL }, 0 },
+  { "outG",		{ indirDX, zAX }, 0 },
   /* f0 */
   { Bad_Opcode },	/* lock prefix */
-  { "icebp",		{ XX } },
+  { "icebp",		{ XX }, 0 },
   { Bad_Opcode },	/* repne */
   { Bad_Opcode },	/* repz */
-  { "hlt",		{ XX } },
-  { "cmc",		{ XX } },
+  { "hlt",		{ XX }, 0 },
+  { "cmc",		{ XX }, 0 },
   { REG_TABLE (REG_F6) },
   { REG_TABLE (REG_F7) },
   /* f8 */
-  { "clc",		{ XX } },
-  { "stc",		{ XX } },
-  { "cli",		{ XX } },
-  { "sti",		{ XX } },
-  { "cld",		{ XX } },
-  { "std",		{ XX } },
+  { "clc",		{ XX }, 0 },
+  { "stc",		{ XX }, 0 },
+  { "cli",		{ XX }, 0 },
+  { "sti",		{ XX }, 0 },
+  { "cld",		{ XX }, 0 },
+  { "std",		{ XX }, 0 },
   { REG_TABLE (REG_FE) },
   { REG_TABLE (REG_FF) },
 };
@@ -2704,51 +2724,51 @@ static const struct dis386 dis386_twobyte[] = {
   /* 00 */
   { REG_TABLE (REG_0F00 ) },
   { REG_TABLE (REG_0F01 ) },
-  { "larS",		{ Gv, Ew } },
-  { "lslS",		{ Gv, Ew } },
+  { "larS",		{ Gv, Ew }, 0 },
+  { "lslS",		{ Gv, Ew }, 0 },
   { Bad_Opcode },
-  { "syscall",		{ XX } },
-  { "clts",		{ XX } },
-  { "sysret%LP",		{ XX } },
+  { "syscall",		{ XX }, 0 },
+  { "clts",		{ XX }, 0 },
+  { "sysret%LP",		{ XX }, 0 },
   /* 08 */
-  { "invd",		{ XX } },
-  { "wbinvd",		{ XX } },
+  { "invd",		{ XX }, 0 },
+  { "wbinvd",		{ XX }, 0 },
   { Bad_Opcode },
-  { "ud2",		{ XX } },
+  { "ud2",		{ XX }, 0 },
   { Bad_Opcode },
   { REG_TABLE (REG_0F0D) },
-  { "femms",		{ XX } },
-  { "",			{ MX, EM, OPSUF } }, /* See OP_3DNowSuffix.  */
+  { "femms",		{ XX }, 0 },
+  { "",			{ MX, EM, OPSUF }, 0 }, /* See OP_3DNowSuffix.  */
   /* 10 */
   { PREFIX_TABLE (PREFIX_0F10) },
   { PREFIX_TABLE (PREFIX_0F11) },
   { PREFIX_TABLE (PREFIX_0F12) },
   { MOD_TABLE (MOD_0F13) },
-  { "unpcklpX",		{ XM, EXx } },
-  { "unpckhpX",		{ XM, EXx } },
+  { "unpcklpX",		{ XM, EXx }, PREFIX_MANDATORY },
+  { "unpckhpX",		{ XM, EXx }, PREFIX_MANDATORY },
   { PREFIX_TABLE (PREFIX_0F16) },
   { MOD_TABLE (MOD_0F17) },
   /* 18 */
   { REG_TABLE (REG_0F18) },
-  { "nopQ",		{ Ev } },
+  { "nopQ",		{ Ev }, 0 },
   { PREFIX_TABLE (PREFIX_0F1A) },
   { PREFIX_TABLE (PREFIX_0F1B) },
-  { "nopQ",		{ Ev } },
-  { "nopQ",		{ Ev } },
-  { "nopQ",		{ Ev } },
-  { "nopQ",		{ Ev } },
+  { "nopQ",		{ Ev }, 0 },
+  { "nopQ",		{ Ev }, 0 },
+  { "nopQ",		{ Ev }, 0 },
+  { "nopQ",		{ Ev }, 0 },
   /* 20 */
-  { "movZ",		{ Rm, Cm } },
-  { "movZ",		{ Rm, Dm } },
-  { "movZ",		{ Cm, Rm } },
-  { "movZ",		{ Dm, Rm } },
+  { "movZ",		{ Rm, Cm }, 0 },
+  { "movZ",		{ Rm, Dm }, 0 },
+  { "movZ",		{ Cm, Rm }, 0 },
+  { "movZ",		{ Dm, Rm }, 0 },
   { MOD_TABLE (MOD_0F24) },
   { Bad_Opcode },
   { MOD_TABLE (MOD_0F26) },
   { Bad_Opcode },
   /* 28 */
-  { "movapX",		{ XM, EXx } },
-  { "movapX",		{ EXxS, XM } },
+  { "movapX",		{ XM, EXx }, PREFIX_MANDATORY },
+  { "movapX",		{ EXxS, XM }, PREFIX_MANDATORY },
   { PREFIX_TABLE (PREFIX_0F2A) },
   { PREFIX_TABLE (PREFIX_0F2B) },
   { PREFIX_TABLE (PREFIX_0F2C) },
@@ -2756,50 +2776,50 @@ static const struct dis386 dis386_twobyte[] = {
   { PREFIX_TABLE (PREFIX_0F2E) },
   { PREFIX_TABLE (PREFIX_0F2F) },
   /* 30 */
-  { "wrmsr",		{ XX } },
-  { "rdtsc",		{ XX } },
-  { "rdmsr",		{ XX } },
-  { "rdpmc",		{ XX } },
-  { "sysenter",		{ XX } },
-  { "sysexit",		{ XX } },
+  { "wrmsr",		{ XX }, 0 },
+  { "rdtsc",		{ XX }, 0 },
+  { "rdmsr",		{ XX }, 0 },
+  { "rdpmc",		{ XX }, 0 },
+  { "sysenter",		{ XX }, 0 },
+  { "sysexit",		{ XX }, 0 },
   { Bad_Opcode },
-  { "getsec",		{ XX } },
+  { "getsec",		{ XX }, 0 },
   /* 38 */
-  { THREE_BYTE_TABLE (THREE_BYTE_0F38) },
+  { THREE_BYTE_TABLE_PREFIX (THREE_BYTE_0F38, PREFIX_MANDATORY) },
   { Bad_Opcode },
-  { THREE_BYTE_TABLE (THREE_BYTE_0F3A) },
+  { THREE_BYTE_TABLE_PREFIX (THREE_BYTE_0F3A, PREFIX_MANDATORY) },
   { Bad_Opcode },
   { Bad_Opcode },
   { Bad_Opcode },
   { Bad_Opcode },
   { Bad_Opcode },
   /* 40 */
-  { "cmovoS",		{ Gv, Ev } },
-  { "cmovnoS",		{ Gv, Ev } },
-  { "cmovbS",		{ Gv, Ev } },
-  { "cmovaeS",		{ Gv, Ev } },
-  { "cmoveS",		{ Gv, Ev } },
-  { "cmovneS",		{ Gv, Ev } },
-  { "cmovbeS",		{ Gv, Ev } },
-  { "cmovaS",		{ Gv, Ev } },
+  { "cmovoS",		{ Gv, Ev }, 0 },
+  { "cmovnoS",		{ Gv, Ev }, 0 },
+  { "cmovbS",		{ Gv, Ev }, 0 },
+  { "cmovaeS",		{ Gv, Ev }, 0 },
+  { "cmoveS",		{ Gv, Ev }, 0 },
+  { "cmovneS",		{ Gv, Ev }, 0 },
+  { "cmovbeS",		{ Gv, Ev }, 0 },
+  { "cmovaS",		{ Gv, Ev }, 0 },
   /* 48 */
-  { "cmovsS",		{ Gv, Ev } },
-  { "cmovnsS",		{ Gv, Ev } },
-  { "cmovpS",		{ Gv, Ev } },
-  { "cmovnpS",		{ Gv, Ev } },
-  { "cmovlS",		{ Gv, Ev } },
-  { "cmovgeS",		{ Gv, Ev } },
-  { "cmovleS",		{ Gv, Ev } },
-  { "cmovgS",		{ Gv, Ev } },
+  { "cmovsS",		{ Gv, Ev }, 0 },
+  { "cmovnsS",		{ Gv, Ev }, 0 },
+  { "cmovpS",		{ Gv, Ev }, 0 },
+  { "cmovnpS",		{ Gv, Ev }, 0 },
+  { "cmovlS",		{ Gv, Ev }, 0 },
+  { "cmovgeS",		{ Gv, Ev }, 0 },
+  { "cmovleS",		{ Gv, Ev }, 0 },
+  { "cmovgS",		{ Gv, Ev }, 0 },
   /* 50 */
   { MOD_TABLE (MOD_0F51) },
   { PREFIX_TABLE (PREFIX_0F51) },
   { PREFIX_TABLE (PREFIX_0F52) },
   { PREFIX_TABLE (PREFIX_0F53) },
-  { "andpX",		{ XM, EXx } },
-  { "andnpX",		{ XM, EXx } },
-  { "orpX",		{ XM, EXx } },
-  { "xorpX",		{ XM, EXx } },
+  { "andpX",		{ XM, EXx }, PREFIX_MANDATORY },
+  { "andnpX",		{ XM, EXx }, PREFIX_MANDATORY },
+  { "orpX",		{ XM, EXx }, PREFIX_MANDATORY },
+  { "xorpX",		{ XM, EXx }, PREFIX_MANDATORY },
   /* 58 */
   { PREFIX_TABLE (PREFIX_0F58) },
   { PREFIX_TABLE (PREFIX_0F59) },
@@ -2813,29 +2833,29 @@ static const struct dis386 dis386_twobyte[] = {
   { PREFIX_TABLE (PREFIX_0F60) },
   { PREFIX_TABLE (PREFIX_0F61) },
   { PREFIX_TABLE (PREFIX_0F62) },
-  { "packsswb",		{ MX, EM } },
-  { "pcmpgtb",		{ MX, EM } },
-  { "pcmpgtw",		{ MX, EM } },
-  { "pcmpgtd",		{ MX, EM } },
-  { "packuswb",		{ MX, EM } },
+  { "packsswb",		{ MX, EM }, PREFIX_MANDATORY },
+  { "pcmpgtb",		{ MX, EM }, PREFIX_MANDATORY },
+  { "pcmpgtw",		{ MX, EM }, PREFIX_MANDATORY },
+  { "pcmpgtd",		{ MX, EM }, PREFIX_MANDATORY },
+  { "packuswb",		{ MX, EM }, PREFIX_MANDATORY },
   /* 68 */
-  { "punpckhbw",	{ MX, EM } },
-  { "punpckhwd",	{ MX, EM } },
-  { "punpckhdq",	{ MX, EM } },
-  { "packssdw",		{ MX, EM } },
+  { "punpckhbw",	{ MX, EM }, PREFIX_MANDATORY },
+  { "punpckhwd",	{ MX, EM }, PREFIX_MANDATORY },
+  { "punpckhdq",	{ MX, EM }, PREFIX_MANDATORY },
+  { "packssdw",		{ MX, EM }, PREFIX_MANDATORY },
   { PREFIX_TABLE (PREFIX_0F6C) },
   { PREFIX_TABLE (PREFIX_0F6D) },
-  { "movK",		{ MX, Edq } },
+  { "movK",		{ MX, Edq }, PREFIX_MANDATORY },
   { PREFIX_TABLE (PREFIX_0F6F) },
   /* 70 */
   { PREFIX_TABLE (PREFIX_0F70) },
   { REG_TABLE (REG_0F71) },
   { REG_TABLE (REG_0F72) },
   { REG_TABLE (REG_0F73) },
-  { "pcmpeqb",		{ MX, EM } },
-  { "pcmpeqw",		{ MX, EM } },
-  { "pcmpeqd",		{ MX, EM } },
-  { "emms",		{ XX } },
+  { "pcmpeqb",		{ MX, EM }, PREFIX_MANDATORY },
+  { "pcmpeqw",		{ MX, EM }, PREFIX_MANDATORY },
+  { "pcmpeqd",		{ MX, EM }, PREFIX_MANDATORY },
+  { "emms",		{ XX }, PREFIX_MANDATORY },
   /* 78 */
   { PREFIX_TABLE (PREFIX_0F78) },
   { PREFIX_TABLE (PREFIX_0F79) },
@@ -2846,148 +2866,148 @@ static const struct dis386 dis386_twobyte[] = {
   { PREFIX_TABLE (PREFIX_0F7E) },
   { PREFIX_TABLE (PREFIX_0F7F) },
   /* 80 */
-  { "joH",		{ Jv, BND, cond_jump_flag } },
-  { "jnoH",		{ Jv, BND, cond_jump_flag } },
-  { "jbH",		{ Jv, BND, cond_jump_flag } },
-  { "jaeH",		{ Jv, BND, cond_jump_flag } },
-  { "jeH",		{ Jv, BND, cond_jump_flag } },
-  { "jneH",		{ Jv, BND, cond_jump_flag } },
-  { "jbeH",		{ Jv, BND, cond_jump_flag } },
-  { "jaH",		{ Jv, BND, cond_jump_flag } },
+  { "joH",		{ Jv, BND, cond_jump_flag }, 0 },
+  { "jnoH",		{ Jv, BND, cond_jump_flag }, 0 },
+  { "jbH",		{ Jv, BND, cond_jump_flag }, 0 },
+  { "jaeH",		{ Jv, BND, cond_jump_flag }, 0 },
+  { "jeH",		{ Jv, BND, cond_jump_flag }, 0 },
+  { "jneH",		{ Jv, BND, cond_jump_flag }, 0 },
+  { "jbeH",		{ Jv, BND, cond_jump_flag }, 0 },
+  { "jaH",		{ Jv, BND, cond_jump_flag }, 0 },
   /* 88 */
-  { "jsH",		{ Jv, BND, cond_jump_flag } },
-  { "jnsH",		{ Jv, BND, cond_jump_flag } },
-  { "jpH",		{ Jv, BND, cond_jump_flag } },
-  { "jnpH",		{ Jv, BND, cond_jump_flag } },
-  { "jlH",		{ Jv, BND, cond_jump_flag } },
-  { "jgeH",		{ Jv, BND, cond_jump_flag } },
-  { "jleH",		{ Jv, BND, cond_jump_flag } },
-  { "jgH",		{ Jv, BND, cond_jump_flag } },
+  { "jsH",		{ Jv, BND, cond_jump_flag }, 0 },
+  { "jnsH",		{ Jv, BND, cond_jump_flag }, 0 },
+  { "jpH",		{ Jv, BND, cond_jump_flag }, 0 },
+  { "jnpH",		{ Jv, BND, cond_jump_flag }, 0 },
+  { "jlH",		{ Jv, BND, cond_jump_flag }, 0 },
+  { "jgeH",		{ Jv, BND, cond_jump_flag }, 0 },
+  { "jleH",		{ Jv, BND, cond_jump_flag }, 0 },
+  { "jgH",		{ Jv, BND, cond_jump_flag }, 0 },
   /* 90 */
-  { "seto",		{ Eb } },
-  { "setno",		{ Eb } },
-  { "setb",		{ Eb } },
-  { "setae",		{ Eb } },
-  { "sete",		{ Eb } },
-  { "setne",		{ Eb } },
-  { "setbe",		{ Eb } },
-  { "seta",		{ Eb } },
+  { "seto",		{ Eb }, 0 },
+  { "setno",		{ Eb }, 0 },
+  { "setb",		{ Eb }, 0 },
+  { "setae",		{ Eb }, 0 },
+  { "sete",		{ Eb }, 0 },
+  { "setne",		{ Eb }, 0 },
+  { "setbe",		{ Eb }, 0 },
+  { "seta",		{ Eb }, 0 },
   /* 98 */
-  { "sets",		{ Eb } },
-  { "setns",		{ Eb } },
-  { "setp",		{ Eb } },
-  { "setnp",		{ Eb } },
-  { "setl",		{ Eb } },
-  { "setge",		{ Eb } },
-  { "setle",		{ Eb } },
-  { "setg",		{ Eb } },
+  { "sets",		{ Eb }, 0 },
+  { "setns",		{ Eb }, 0 },
+  { "setp",		{ Eb }, 0 },
+  { "setnp",		{ Eb }, 0 },
+  { "setl",		{ Eb }, 0 },
+  { "setge",		{ Eb }, 0 },
+  { "setle",		{ Eb }, 0 },
+  { "setg",		{ Eb }, 0 },
   /* a0 */
-  { "pushT",		{ fs } },
-  { "popT",		{ fs } },
-  { "cpuid",		{ XX } },
-  { "btS",		{ Ev, Gv } },
-  { "shldS",		{ Ev, Gv, Ib } },
-  { "shldS",		{ Ev, Gv, CL } },
+  { "pushT",		{ fs }, 0 },
+  { "popT",		{ fs }, 0 },
+  { "cpuid",		{ XX }, 0 },
+  { "btS",		{ Ev, Gv }, 0 },
+  { "shldS",		{ Ev, Gv, Ib }, 0 },
+  { "shldS",		{ Ev, Gv, CL }, 0 },
   { REG_TABLE (REG_0FA6) },
   { REG_TABLE (REG_0FA7) },
   /* a8 */
-  { "pushT",		{ gs } },
-  { "popT",		{ gs } },
-  { "rsm",		{ XX } },
-  { "btsS[...]

[diff truncated at 100000 bytes]


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]