summaryrefslogtreecommitdiffstats
path: root/opcodes
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2007-09-28 20:50:59 +0000
committerH.J. Lu <hjl.tools@gmail.com>2007-09-28 20:50:59 +0000
commit4e7d34a6c292d5b9259fdd1f913aea0be83b8bae (patch)
tree1748f9ddd53fdcf53bed729a40b4645909150e91 /opcodes
parentfcda367bb90421d3d1ff981d70f534f70c8b12f2 (diff)
downloadppe42-binutils-4e7d34a6c292d5b9259fdd1f913aea0be83b8bae.tar.gz
ppe42-binutils-4e7d34a6c292d5b9259fdd1f913aea0be83b8bae.zip
2007-09-28 H.J. Lu <hongjiu.lu@intel.com>
* 386-dis.c (USE_PREFIX_USER_TABLE): Renamed to ... (USE_PREFIX_TABLE): This. (X86_64_SPECIAL): Renamed to ... (USE_X86_64_TABLE): This. (IS_3BYTE_OPCODE): Renamed to ... (USE_3BYTE_TABLE): This. (GRPXXX): Removed. (PREGRPXXX): Likewise. (X86_64_XXX): Likewise. (THREE_BYTE_XXX): Likewise. (OPC_EXT_XXX): Likewise. (OPC_EXT_RM_XXX): Likewise. (DIS386): New. (GRP): Likewise. (PREGRP): Likewise. (X86_64_TABLE): Likewise. (THREE_BYTE_TABLE): Likewise. (OPC_EXT_TABLE): Likewise. (OPC_EXT_RM_TABLE): Likewise. (GRP_XXX): Likewise. (PREGRP_XXX): Likewise. (X86_64_XXX): Likewise. (THREE_BYTE_XXX): Likewise. (OPC_EXT_XXX): Likewise. (OPC_EXT_RM_XXX): Likewise. (dis386): Updated. (dis386_twobyte): Likewise. (grps): Likewise. (prefix_user_table): Likewise. (x86_64_table): Likewise. (three_byte_table): Likewise. (opc_ext_table): Likewise. (opc_ext_rm_table): Likewise. (get_valid_dis386): Likewise.
Diffstat (limited to 'opcodes')
-rw-r--r--opcodes/ChangeLog37
-rw-r--r--opcodes/i386-dis.c3068
2 files changed, 1591 insertions, 1514 deletions
diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog
index 1a7e1ac891..13bd099d9b 100644
--- a/opcodes/ChangeLog
+++ b/opcodes/ChangeLog
@@ -1,3 +1,40 @@
+2007-09-28 H.J. Lu <hongjiu.lu@intel.com>
+
+ * 386-dis.c (USE_PREFIX_USER_TABLE): Renamed to ...
+ (USE_PREFIX_TABLE): This.
+ (X86_64_SPECIAL): Renamed to ...
+ (USE_X86_64_TABLE): This.
+ (IS_3BYTE_OPCODE): Renamed to ...
+ (USE_3BYTE_TABLE): This.
+ (GRPXXX): Removed.
+ (PREGRPXXX): Likewise.
+ (X86_64_XXX): Likewise.
+ (THREE_BYTE_XXX): Likewise.
+ (OPC_EXT_XXX): Likewise.
+ (OPC_EXT_RM_XXX): Likewise.
+ (DIS386): New.
+ (GRP): Likewise.
+ (PREGRP): Likewise.
+ (X86_64_TABLE): Likewise.
+ (THREE_BYTE_TABLE): Likewise.
+ (OPC_EXT_TABLE): Likewise.
+ (OPC_EXT_RM_TABLE): Likewise.
+ (GRP_XXX): Likewise.
+ (PREGRP_XXX): Likewise.
+ (X86_64_XXX): Likewise.
+ (THREE_BYTE_XXX): Likewise.
+ (OPC_EXT_XXX): Likewise.
+ (OPC_EXT_RM_XXX): Likewise.
+ (dis386): Updated.
+ (dis386_twobyte): Likewise.
+ (grps): Likewise.
+ (prefix_user_table): Likewise.
+ (x86_64_table): Likewise.
+ (three_byte_table): Likewise.
+ (opc_ext_table): Likewise.
+ (opc_ext_rm_table): Likewise.
+ (get_valid_dis386): Likewise.
+
2007-09-27 H.J. Lu <hongjiu.lu@intel.com>
* i386-dis.c (dis386): Swap X86_64_27 with OPC_EXT_2.
diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c
index 9ae35dc0af..836cdf21ef 100644
--- a/opcodes/i386-dis.c
+++ b/opcodes/i386-dis.c
@@ -434,236 +434,243 @@ fetch_data (struct disassemble_info *info, bfd_byte *addr)
#define FLOATCODE 1
#define USE_GROUPS 2
-#define USE_PREFIX_USER_TABLE 3
-#define X86_64_SPECIAL 4
-#define IS_3BYTE_OPCODE 5
+#define USE_PREFIX_TABLE 3
+#define USE_X86_64_TABLE 4
+#define USE_3BYTE_TABLE 5
#define USE_OPC_EXT_TABLE 6
#define USE_OPC_EXT_RM_TABLE 7
#define FLOAT NULL, { { NULL, FLOATCODE } }
-#define GRP1a NULL, { { NULL, USE_GROUPS }, { NULL, 0 } }
-#define GRP1b NULL, { { NULL, USE_GROUPS }, { NULL, 1 } }
-#define GRP1S NULL, { { NULL, USE_GROUPS }, { NULL, 2 } }
-#define GRP1Ss NULL, { { NULL, USE_GROUPS }, { NULL, 3 } }
-#define GRP2b NULL, { { NULL, USE_GROUPS }, { NULL, 4 } }
-#define GRP2S NULL, { { NULL, USE_GROUPS }, { NULL, 5 } }
-#define GRP2b_one NULL, { { NULL, USE_GROUPS }, { NULL, 6 } }
-#define GRP2S_one NULL, { { NULL, USE_GROUPS }, { NULL, 7 } }
-#define GRP2b_cl NULL, { { NULL, USE_GROUPS }, { NULL, 8 } }
-#define GRP2S_cl NULL, { { NULL, USE_GROUPS }, { NULL, 9 } }
-#define GRP3b NULL, { { NULL, USE_GROUPS }, { NULL, 10 } }
-#define GRP3S NULL, { { NULL, USE_GROUPS }, { NULL, 11 } }
-#define GRP4 NULL, { { NULL, USE_GROUPS }, { NULL, 12 } }
-#define GRP5 NULL, { { NULL, USE_GROUPS }, { NULL, 13 } }
-#define GRP6 NULL, { { NULL, USE_GROUPS }, { NULL, 14 } }
-#define GRP7 NULL, { { NULL, USE_GROUPS }, { NULL, 15 } }
-#define GRP8 NULL, { { NULL, USE_GROUPS }, { NULL, 16 } }
-#define GRP9 NULL, { { NULL, USE_GROUPS }, { NULL, 17 } }
-#define GRP11_C6 NULL, { { NULL, USE_GROUPS }, { NULL, 18 } }
-#define GRP11_C7 NULL, { { NULL, USE_GROUPS }, { NULL, 19 } }
-#define GRP12 NULL, { { NULL, USE_GROUPS }, { NULL, 20 } }
-#define GRP13 NULL, { { NULL, USE_GROUPS }, { NULL, 21 } }
-#define GRP14 NULL, { { NULL, USE_GROUPS }, { NULL, 22 } }
-#define GRP15 NULL, { { NULL, USE_GROUPS }, { NULL, 23 } }
-#define GRP16 NULL, { { NULL, USE_GROUPS }, { NULL, 24 } }
-#define GRPAMD NULL, { { NULL, USE_GROUPS }, { NULL, 25 } }
-#define GRPPADLCK1 NULL, { { NULL, USE_GROUPS }, { NULL, 26 } }
-#define GRPPADLCK2 NULL, { { NULL, USE_GROUPS }, { NULL, 27 } }
-
-#define PREGRP0 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 0 } }
-#define PREGRP1 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 1 } }
-#define PREGRP2 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 2 } }
-#define PREGRP3 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 3 } }
-#define PREGRP4 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 4 } }
-#define PREGRP5 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 5 } }
-#define PREGRP6 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 6 } }
-#define PREGRP7 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 7 } }
-#define PREGRP8 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 8 } }
-#define PREGRP9 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 9 } }
-#define PREGRP10 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 10 } }
-#define PREGRP11 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 11 } }
-#define PREGRP12 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 12 } }
-#define PREGRP13 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 13 } }
-#define PREGRP14 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 14 } }
-#define PREGRP15 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 15 } }
-#define PREGRP16 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 16 } }
-#define PREGRP17 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 17 } }
-#define PREGRP18 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 18 } }
-#define PREGRP19 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 19 } }
-#define PREGRP20 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 20 } }
-#define PREGRP21 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 21 } }
-#define PREGRP22 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 22 } }
-#define PREGRP23 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 23 } }
-#define PREGRP24 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 24 } }
-#define PREGRP25 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 25 } }
-#define PREGRP26 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 26 } }
-#define PREGRP27 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 27 } }
-#define PREGRP28 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 28 } }
-#define PREGRP29 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 29 } }
-#define PREGRP30 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 30 } }
-#define PREGRP31 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 31 } }
-#define PREGRP32 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 32 } }
-#define PREGRP33 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 33 } }
-#define PREGRP34 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 34 } }
-#define PREGRP35 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 35 } }
-#define PREGRP36 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 36 } }
-#define PREGRP37 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 37 } }
-#define PREGRP38 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 38 } }
-#define PREGRP39 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 39 } }
-#define PREGRP40 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 40 } }
-#define PREGRP41 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 41 } }
-#define PREGRP42 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 42 } }
-#define PREGRP43 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 43 } }
-#define PREGRP44 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 44 } }
-#define PREGRP45 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 45 } }
-#define PREGRP46 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 46 } }
-#define PREGRP47 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 47 } }
-#define PREGRP48 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 48 } }
-#define PREGRP49 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 49 } }
-#define PREGRP50 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 50 } }
-#define PREGRP51 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 51 } }
-#define PREGRP52 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 52 } }
-#define PREGRP53 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 53 } }
-#define PREGRP54 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 54 } }
-#define PREGRP55 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 55 } }
-#define PREGRP56 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 56 } }
-#define PREGRP57 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 57 } }
-#define PREGRP58 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 58 } }
-#define PREGRP59 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 59 } }
-#define PREGRP60 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 60 } }
-#define PREGRP61 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 61 } }
-#define PREGRP62 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 62 } }
-#define PREGRP63 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 63 } }
-#define PREGRP64 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 64 } }
-#define PREGRP65 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 65 } }
-#define PREGRP66 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 66 } }
-#define PREGRP67 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 67 } }
-#define PREGRP68 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 68 } }
-#define PREGRP69 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 69 } }
-#define PREGRP70 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 70 } }
-#define PREGRP71 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 71 } }
-#define PREGRP72 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 72 } }
-#define PREGRP73 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 73 } }
-#define PREGRP74 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 74 } }
-#define PREGRP75 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 75 } }
-#define PREGRP76 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 76 } }
-#define PREGRP77 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 77 } }
-#define PREGRP78 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 78 } }
-#define PREGRP79 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 79 } }
-#define PREGRP80 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 80 } }
-#define PREGRP81 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 81 } }
-#define PREGRP82 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 82 } }
-#define PREGRP83 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 83 } }
-#define PREGRP84 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 84 } }
-#define PREGRP85 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 85 } }
-#define PREGRP86 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 86 } }
-#define PREGRP87 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 87 } }
-#define PREGRP88 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 88 } }
-#define PREGRP89 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 89 } }
-#define PREGRP90 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 90 } }
-#define PREGRP91 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 91 } }
-#define PREGRP92 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 92 } }
-#define PREGRP93 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 93 } }
-#define PREGRP94 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 94 } }
-#define PREGRP95 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 95 } }
-#define PREGRP96 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 96 } }
-#define PREGRP97 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 97 } }
-#define PREGRP98 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 98 } }
-#define PREGRP99 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 99 } }
-#define PREGRP100 NULL, { { NULL, USE_PREFIX_USER_TABLE }, { NULL, 100 } }
-
-
-#define X86_64_0 NULL, { { NULL, X86_64_SPECIAL }, { NULL, 0 } }
-#define X86_64_1 NULL, { { NULL, X86_64_SPECIAL }, { NULL, 1 } }
-#define X86_64_2 NULL, { { NULL, X86_64_SPECIAL }, { NULL, 2 } }
-#define X86_64_3 NULL, { { NULL, X86_64_SPECIAL }, { NULL, 3 } }
-#define X86_64_4 NULL, { { NULL, X86_64_SPECIAL }, { NULL, 4 } }
-#define X86_64_5 NULL, { { NULL, X86_64_SPECIAL }, { NULL, 5 } }
-#define X86_64_6 NULL, { { NULL, X86_64_SPECIAL }, { NULL, 6 } }
-#define X86_64_7 NULL, { { NULL, X86_64_SPECIAL }, { NULL, 7 } }
-#define X86_64_8 NULL, { { NULL, X86_64_SPECIAL }, { NULL, 8 } }
-#define X86_64_9 NULL, { { NULL, X86_64_SPECIAL }, { NULL, 9 } }
-#define X86_64_10 NULL, { { NULL, X86_64_SPECIAL }, { NULL, 10 } }
-#define X86_64_11 NULL, { { NULL, X86_64_SPECIAL }, { NULL, 11 } }
-#define X86_64_12 NULL, { { NULL, X86_64_SPECIAL }, { NULL, 12 } }
-#define X86_64_13 NULL, { { NULL, X86_64_SPECIAL }, { NULL, 13 } }
-#define X86_64_14 NULL, { { NULL, X86_64_SPECIAL }, { NULL, 14 } }
-#define X86_64_15 NULL, { { NULL, X86_64_SPECIAL }, { NULL, 15 } }
-#define X86_64_16 NULL, { { NULL, X86_64_SPECIAL }, { NULL, 16 } }
-#define X86_64_17 NULL, { { NULL, X86_64_SPECIAL }, { NULL, 17 } }
-#define X86_64_18 NULL, { { NULL, X86_64_SPECIAL }, { NULL, 18 } }
-#define X86_64_19 NULL, { { NULL, X86_64_SPECIAL }, { NULL, 19 } }
-#define X86_64_20 NULL, { { NULL, X86_64_SPECIAL }, { NULL, 20 } }
-#define X86_64_21 NULL, { { NULL, X86_64_SPECIAL }, { NULL, 21 } }
-#define X86_64_22 NULL, { { NULL, X86_64_SPECIAL }, { NULL, 22 } }
-#define X86_64_23 NULL, { { NULL, X86_64_SPECIAL }, { NULL, 23 } }
-#define X86_64_24 NULL, { { NULL, X86_64_SPECIAL }, { NULL, 24 } }
-#define X86_64_25 NULL, { { NULL, X86_64_SPECIAL }, { NULL, 25 } }
-#define X86_64_26 NULL, { { NULL, X86_64_SPECIAL }, { NULL, 26 } }
-#define X86_64_27 NULL, { { NULL, X86_64_SPECIAL }, { NULL, 27 } }
-
-#define THREE_BYTE_0 NULL, { { NULL, IS_3BYTE_OPCODE }, { NULL, 0 } }
-#define THREE_BYTE_1 NULL, { { NULL, IS_3BYTE_OPCODE }, { NULL, 1 } }
-#define THREE_BYTE_SSE5_0F24 NULL, { { NULL, IS_3BYTE_OPCODE }, { NULL, 2 } }
-#define THREE_BYTE_SSE5_0F25 NULL, { { NULL, IS_3BYTE_OPCODE }, { NULL, 3 } }
-#define THREE_BYTE_SSE5_0F7A NULL, { { NULL, IS_3BYTE_OPCODE }, { NULL, 4 } }
-#define THREE_BYTE_SSE5_0F7B NULL, { { NULL, IS_3BYTE_OPCODE }, { NULL, 5 } }
-
-#define OPC_EXT_0 NULL, { { NULL, USE_OPC_EXT_TABLE }, { NULL, 0 } }
-#define OPC_EXT_1 NULL, { { NULL, USE_OPC_EXT_TABLE }, { NULL, 1 } }
-#define OPC_EXT_2 NULL, { { NULL, USE_OPC_EXT_TABLE }, { NULL, 2 } }
-#define OPC_EXT_3 NULL, { { NULL, USE_OPC_EXT_TABLE }, { NULL, 3 } }
-#define OPC_EXT_4 NULL, { { NULL, USE_OPC_EXT_TABLE }, { NULL, 4 } }
-#define OPC_EXT_5 NULL, { { NULL, USE_OPC_EXT_TABLE }, { NULL, 5 } }
-#define OPC_EXT_6 NULL, { { NULL, USE_OPC_EXT_TABLE }, { NULL, 6 } }
-#define OPC_EXT_7 NULL, { { NULL, USE_OPC_EXT_TABLE }, { NULL, 7 } }
-#define OPC_EXT_8 NULL, { { NULL, USE_OPC_EXT_TABLE }, { NULL, 8 } }
-#define OPC_EXT_9 NULL, { { NULL, USE_OPC_EXT_TABLE }, { NULL, 9 } }
-#define OPC_EXT_10 NULL, { { NULL, USE_OPC_EXT_TABLE }, { NULL, 10 } }
-#define OPC_EXT_11 NULL, { { NULL, USE_OPC_EXT_TABLE }, { NULL, 11 } }
-#define OPC_EXT_12 NULL, { { NULL, USE_OPC_EXT_TABLE }, { NULL, 12 } }
-#define OPC_EXT_13 NULL, { { NULL, USE_OPC_EXT_TABLE }, { NULL, 13 } }
-#define OPC_EXT_14 NULL, { { NULL, USE_OPC_EXT_TABLE }, { NULL, 14 } }
-#define OPC_EXT_15 NULL, { { NULL, USE_OPC_EXT_TABLE }, { NULL, 15 } }
-#define OPC_EXT_16 NULL, { { NULL, USE_OPC_EXT_TABLE }, { NULL, 16 } }
-#define OPC_EXT_17 NULL, { { NULL, USE_OPC_EXT_TABLE }, { NULL, 17 } }
-#define OPC_EXT_18 NULL, { { NULL, USE_OPC_EXT_TABLE }, { NULL, 18 } }
-#define OPC_EXT_19 NULL, { { NULL, USE_OPC_EXT_TABLE }, { NULL, 19 } }
-#define OPC_EXT_20 NULL, { { NULL, USE_OPC_EXT_TABLE }, { NULL, 20 } }
-#define OPC_EXT_21 NULL, { { NULL, USE_OPC_EXT_TABLE }, { NULL, 21 } }
-#define OPC_EXT_22 NULL, { { NULL, USE_OPC_EXT_TABLE }, { NULL, 22 } }
-#define OPC_EXT_23 NULL, { { NULL, USE_OPC_EXT_TABLE }, { NULL, 23 } }
-#define OPC_EXT_24 NULL, { { NULL, USE_OPC_EXT_TABLE }, { NULL, 24 } }
-#define OPC_EXT_25 NULL, { { NULL, USE_OPC_EXT_TABLE }, { NULL, 25 } }
-#define OPC_EXT_26 NULL, { { NULL, USE_OPC_EXT_TABLE }, { NULL, 26 } }
-#define OPC_EXT_27 NULL, { { NULL, USE_OPC_EXT_TABLE }, { NULL, 27 } }
-#define OPC_EXT_28 NULL, { { NULL, USE_OPC_EXT_TABLE }, { NULL, 28 } }
-#define OPC_EXT_29 NULL, { { NULL, USE_OPC_EXT_TABLE }, { NULL, 29 } }
-#define OPC_EXT_30 NULL, { { NULL, USE_OPC_EXT_TABLE }, { NULL, 30 } }
-#define OPC_EXT_31 NULL, { { NULL, USE_OPC_EXT_TABLE }, { NULL, 31 } }
-#define OPC_EXT_32 NULL, { { NULL, USE_OPC_EXT_TABLE }, { NULL, 32 } }
-#define OPC_EXT_33 NULL, { { NULL, USE_OPC_EXT_TABLE }, { NULL, 33 } }
-#define OPC_EXT_34 NULL, { { NULL, USE_OPC_EXT_TABLE }, { NULL, 34 } }
-#define OPC_EXT_35 NULL, { { NULL, USE_OPC_EXT_TABLE }, { NULL, 35 } }
-#define OPC_EXT_36 NULL, { { NULL, USE_OPC_EXT_TABLE }, { NULL, 36 } }
-#define OPC_EXT_37 NULL, { { NULL, USE_OPC_EXT_TABLE }, { NULL, 37 } }
-#define OPC_EXT_38 NULL, { { NULL, USE_OPC_EXT_TABLE }, { NULL, 38 } }
-#define OPC_EXT_39 NULL, { { NULL, USE_OPC_EXT_TABLE }, { NULL, 39 } }
-#define OPC_EXT_40 NULL, { { NULL, USE_OPC_EXT_TABLE }, { NULL, 40 } }
-#define OPC_EXT_41 NULL, { { NULL, USE_OPC_EXT_TABLE }, { NULL, 41 } }
-#define OPC_EXT_42 NULL, { { NULL, USE_OPC_EXT_TABLE }, { NULL, 42 } }
-#define OPC_EXT_43 NULL, { { NULL, USE_OPC_EXT_TABLE }, { NULL, 43 } }
-#define OPC_EXT_44 NULL, { { NULL, USE_OPC_EXT_TABLE }, { NULL, 44 } }
-#define OPC_EXT_45 NULL, { { NULL, USE_OPC_EXT_TABLE }, { NULL, 45 } }
-
-#define OPC_EXT_RM_0 NULL, { { NULL, USE_OPC_EXT_RM_TABLE }, { NULL, 0 } }
-#define OPC_EXT_RM_1 NULL, { { NULL, USE_OPC_EXT_RM_TABLE }, { NULL, 1 } }
-#define OPC_EXT_RM_2 NULL, { { NULL, USE_OPC_EXT_RM_TABLE }, { NULL, 2 } }
-#define OPC_EXT_RM_3 NULL, { { NULL, USE_OPC_EXT_RM_TABLE }, { NULL, 3 } }
-#define OPC_EXT_RM_4 NULL, { { NULL, USE_OPC_EXT_RM_TABLE }, { NULL, 4 } }
-#define OPC_EXT_RM_5 NULL, { { NULL, USE_OPC_EXT_RM_TABLE }, { NULL, 5 } }
-#define OPC_EXT_RM_6 NULL, { { NULL, USE_OPC_EXT_RM_TABLE }, { NULL, 6 } }
+#define DIS386(T, I) NULL, { { NULL, (T)}, { NULL, (I) } }
+#define GRP(I) DIS386 (USE_GROUPS, (I))
+#define PREGRP(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 OPC_EXT_TABLE(I) DIS386 (USE_OPC_EXT_TABLE, (I))
+#define OPC_EXT_RM_TABLE(I) DIS386 (USE_OPC_EXT_RM_TABLE, (I))
+
+#define GRP_80 0
+#define GRP_81 (GRP_80 + 1)
+#define GRP_82 (GRP_81 + 1)
+#define GRP_8F (GRP_82 + 1)
+#define GRP_C0 (GRP_8F + 1)
+#define GRP_C1 (GRP_C0 + 1)
+#define GRP_C6 (GRP_C1 + 1)
+#define GRP_C7 (GRP_C6 + 1)
+#define GRP_D0 (GRP_C7 + 1)
+#define GRP_D1 (GRP_D0 + 1)
+#define GRP_D2 (GRP_D1 + 1)
+#define GRP_D3 (GRP_D2 + 1)
+#define GRP_F6 (GRP_D3 + 1)
+#define GRP_F7 (GRP_F6 + 1)
+#define GRP_FE (GRP_F7 + 1)
+#define GRP_FF (GRP_FE + 1)
+#define GRP_0F00 (GRP_FF + 1)
+#define GRP_0F01 (GRP_0F00 + 1)
+#define GRP_0F0E (GRP_0F01 + 1)
+#define GRP_0F18 (GRP_0F0E + 1)
+#define GRP_0F71 (GRP_0F18 + 1)
+#define GRP_0F72 (GRP_0F71 + 1)
+#define GRP_0F73 (GRP_0F72 + 1)
+#define GRP_0FA6 (GRP_0F73 + 1)
+#define GRP_0FA7 (GRP_0FA6 + 1)
+#define GRP_0FAE (GRP_0FA7 + 1)
+#define GRP_0FBA (GRP_0FAE + 1)
+#define GRP_0FC7 (GRP_0FBA + 1)
+
+#define PREGRP_90 0
+#define PREGRP_0F10 (PREGRP_90 + 1)
+#define PREGRP_0F11 (PREGRP_0F10 + 1)
+#define PREGRP_0F12 (PREGRP_0F11 + 1)
+#define PREGRP_0F16 (PREGRP_0F12 + 1)
+#define PREGRP_0F2A (PREGRP_0F16 + 1)
+#define PREGRP_0F2B (PREGRP_0F2A + 1)
+#define PREGRP_0F2C (PREGRP_0F2B + 1)
+#define PREGRP_0F2D (PREGRP_0F2C + 1)
+#define PREGRP_0F2E (PREGRP_0F2D + 1)
+#define PREGRP_0F2F (PREGRP_0F2E + 1)
+#define PREGRP_0F51 (PREGRP_0F2F + 1)
+#define PREGRP_0F52 (PREGRP_0F51 + 1)
+#define PREGRP_0F53 (PREGRP_0F52 + 1)
+#define PREGRP_0F58 (PREGRP_0F53 + 1)
+#define PREGRP_0F59 (PREGRP_0F58 + 1)
+#define PREGRP_0F5A (PREGRP_0F59 + 1)
+#define PREGRP_0F5B (PREGRP_0F5A + 1)
+#define PREGRP_0F5C (PREGRP_0F5B + 1)
+#define PREGRP_0F5D (PREGRP_0F5C + 1)
+#define PREGRP_0F5E (PREGRP_0F5D + 1)
+#define PREGRP_0F5F (PREGRP_0F5E + 1)
+#define PREGRP_0F60 (PREGRP_0F5F + 1)
+#define PREGRP_0F61 (PREGRP_0F60 + 1)
+#define PREGRP_0F62 (PREGRP_0F61 + 1)
+#define PREGRP_0F6C (PREGRP_0F62 + 1)
+#define PREGRP_0F6D (PREGRP_0F6C + 1)
+#define PREGRP_0F6F (PREGRP_0F6D + 1)
+#define PREGRP_0F70 (PREGRP_0F6F + 1)
+#define PREGRP_0F78 (PREGRP_0F70 + 1)
+#define PREGRP_0F79 (PREGRP_0F78 + 1)
+#define PREGRP_0F7C (PREGRP_0F79 + 1)
+#define PREGRP_0F7D (PREGRP_0F7C + 1)
+#define PREGRP_0F7E (PREGRP_0F7D + 1)
+#define PREGRP_0F7F (PREGRP_0F7E + 1)
+#define PREGRP_0FB8 (PREGRP_0F7F + 1)
+#define PREGRP_0FBD (PREGRP_0FB8 + 1)
+#define PREGRP_0FC2 (PREGRP_0FBD + 1)
+#define PREGRP_0FD0 (PREGRP_0FC2 + 1)
+#define PREGRP_0FD6 (PREGRP_0FD0 + 1)
+#define PREGRP_0FE6 (PREGRP_0FD6 + 1)
+#define PREGRP_0FE7 (PREGRP_0FE6 + 1)
+#define PREGRP_0FF0 (PREGRP_0FE7 + 1)
+#define PREGRP_0FF7 (PREGRP_0FF0 + 1)
+#define PREGRP_0F3810 (PREGRP_0FF7 + 1)
+#define PREGRP_0F3814 (PREGRP_0F3810 + 1)
+#define PREGRP_0F3815 (PREGRP_0F3814 + 1)
+#define PREGRP_0F3817 (PREGRP_0F3815 + 1)
+#define PREGRP_0F3820 (PREGRP_0F3817 + 1)
+#define PREGRP_0F3821 (PREGRP_0F3820 + 1)
+#define PREGRP_0F3822 (PREGRP_0F3821 + 1)
+#define PREGRP_0F3823 (PREGRP_0F3822 + 1)
+#define PREGRP_0F3824 (PREGRP_0F3823 + 1)
+#define PREGRP_0F3825 (PREGRP_0F3824 + 1)
+#define PREGRP_0F3828 (PREGRP_0F3825 + 1)
+#define PREGRP_0F3829 (PREGRP_0F3828 + 1)
+#define PREGRP_0F382A (PREGRP_0F3829 + 1)
+#define PREGRP_0F382B (PREGRP_0F382A + 1)
+#define PREGRP_0F3830 (PREGRP_0F382B + 1)
+#define PREGRP_0F3831 (PREGRP_0F3830 + 1)
+#define PREGRP_0F3832 (PREGRP_0F3831 + 1)
+#define PREGRP_0F3833 (PREGRP_0F3832 + 1)
+#define PREGRP_0F3834 (PREGRP_0F3833 + 1)
+#define PREGRP_0F3835 (PREGRP_0F3834 + 1)
+#define PREGRP_0F3837 (PREGRP_0F3835 + 1)
+#define PREGRP_0F3838 (PREGRP_0F3837 + 1)
+#define PREGRP_0F3839 (PREGRP_0F3838 + 1)
+#define PREGRP_0F383A (PREGRP_0F3839 + 1)
+#define PREGRP_0F383B (PREGRP_0F383A + 1)
+#define PREGRP_0F383C (PREGRP_0F383B + 1)
+#define PREGRP_0F383D (PREGRP_0F383C + 1)
+#define PREGRP_0F383E (PREGRP_0F383D + 1)
+#define PREGRP_0F383F (PREGRP_0F383E + 1)
+#define PREGRP_0F3840 (PREGRP_0F383F + 1)
+#define PREGRP_0F3841 (PREGRP_0F3840 + 1)
+#define PREGRP_0F38F0 (PREGRP_0F3841 + 1)
+#define PREGRP_0F38F1 (PREGRP_0F38F0 + 1)
+#define PREGRP_0F3A08 (PREGRP_0F38F1 + 1)
+#define PREGRP_0F3A09 (PREGRP_0F3A08 + 1)
+#define PREGRP_0F3A0A (PREGRP_0F3A09 + 1)
+#define PREGRP_0F3A0B (PREGRP_0F3A0A + 1)
+#define PREGRP_0F3A0C (PREGRP_0F3A0B + 1)
+#define PREGRP_0F3A0D (PREGRP_0F3A0C + 1)
+#define PREGRP_0F3A0E (PREGRP_0F3A0D + 1)
+#define PREGRP_0F3A14 (PREGRP_0F3A0E + 1)
+#define PREGRP_0F3A15 (PREGRP_0F3A14 + 1)
+#define PREGRP_0F3A16 (PREGRP_0F3A15 + 1)
+#define PREGRP_0F3A17 (PREGRP_0F3A16 + 1)
+#define PREGRP_0F3A20 (PREGRP_0F3A17 + 1)
+#define PREGRP_0F3A21 (PREGRP_0F3A20 + 1)
+#define PREGRP_0F3A22 (PREGRP_0F3A21 + 1)
+#define PREGRP_0F3A40 (PREGRP_0F3A22 + 1)
+#define PREGRP_0F3A41 (PREGRP_0F3A40 + 1)
+#define PREGRP_0F3A42 (PREGRP_0F3A41 + 1)
+#define PREGRP_0F3A60 (PREGRP_0F3A42 + 1)
+#define PREGRP_0F3A61 (PREGRP_0F3A60 + 1)
+#define PREGRP_0F3A62 (PREGRP_0F3A61 + 1)
+#define PREGRP_0F3A63 (PREGRP_0F3A62 + 1)
+#define PREGRP_0F73_REG_3 (PREGRP_0F3A63 + 1)
+#define PREGRP_0F73_REG_7 (PREGRP_0F73_REG_3 + 1)
+#define PREGRP_0FC7_REG_6 (PREGRP_0F73_REG_7 + 1)
+
+#define X86_64_06 0
+#define X86_64_07 (X86_64_06 + 1)
+#define X86_64_0D (X86_64_07 + 1)
+#define X86_64_16 (X86_64_0D + 1)
+#define X86_64_17 (X86_64_16 + 1)
+#define X86_64_1E (X86_64_17 + 1)
+#define X86_64_1F (X86_64_1E + 1)
+#define X86_64_27 (X86_64_1F + 1)
+#define X86_64_2F (X86_64_27 + 1)
+#define X86_64_37 (X86_64_2F + 1)
+#define X86_64_3F (X86_64_37 + 1)
+#define X86_64_60 (X86_64_3F + 1)
+#define X86_64_61 (X86_64_60 + 1)
+#define X86_64_62 (X86_64_61 + 1)
+#define X86_64_63 (X86_64_62 + 1)
+#define X86_64_6D (X86_64_63 + 1)
+#define X86_64_6F (X86_64_6D + 1)
+#define X86_64_9A (X86_64_6F + 1)
+#define X86_64_C4 (X86_64_9A + 1)
+#define X86_64_C5 (X86_64_C4 + 1)
+#define X86_64_CE (X86_64_C5 + 1)
+#define X86_64_D4 (X86_64_CE + 1)
+#define X86_64_D5 (X86_64_D4 + 1)
+#define X86_64_EA (X86_64_D5 + 1)
+#define X86_64_0F01_REG_0 (X86_64_EA + 1)
+#define X86_64_0F01_REG_1 (X86_64_0F01_REG_0 + 1)
+#define X86_64_0F01_REG_2 (X86_64_0F01_REG_1 + 1)
+#define X86_64_0F01_REG_3 (X86_64_0F01_REG_2 + 1)
+
+#define THREE_BYTE_0F24 0
+#define THREE_BYTE_0F25 (THREE_BYTE_0F24 + 1)
+#define THREE_BYTE_0F38 (THREE_BYTE_0F25 + 1)
+#define THREE_BYTE_0F3A (THREE_BYTE_0F38 + 1)
+#define THREE_BYTE_0F7A (THREE_BYTE_0F3A + 1)
+#define THREE_BYTE_0FBA (THREE_BYTE_0F7A + 1)
+
+#define OPC_EXT_8D 0
+#define OPC_EXT_0F13 (OPC_EXT_8D + 1)
+#define OPC_EXT_0F17 (OPC_EXT_0F13 + 1)
+#define OPC_EXT_0F20 (OPC_EXT_0F17 + 1)
+#define OPC_EXT_0F21 (OPC_EXT_0F20 + 1)
+#define OPC_EXT_0F22 (OPC_EXT_0F21 + 1)
+#define OPC_EXT_0F23 (OPC_EXT_0F22 + 1)
+#define OPC_EXT_0F24 (OPC_EXT_0F23 + 1)
+#define OPC_EXT_0F26 (OPC_EXT_0F24 + 1)
+#define OPC_EXT_0FB2 (OPC_EXT_0F26 + 1)
+#define OPC_EXT_0FB4 (OPC_EXT_0FB2 + 1)
+#define OPC_EXT_0FB5 (OPC_EXT_0FB4 + 1)
+#define OPC_EXT_0F01_REG_0 (OPC_EXT_0FB5 + 1)
+#define OPC_EXT_0F01_REG_1 (OPC_EXT_0F01_REG_0 + 1)
+#define OPC_EXT_0F01_REG_2 (OPC_EXT_0F01_REG_1 + 1)
+#define OPC_EXT_0F01_REG_3 (OPC_EXT_0F01_REG_2 + 1)
+#define OPC_EXT_0F01_REG_7 (OPC_EXT_0F01_REG_3 + 1)
+#define OPC_EXT_0F18_REG_0 (OPC_EXT_0F01_REG_7 + 1)
+#define OPC_EXT_0F18_REG_1 (OPC_EXT_0F18_REG_0 + 1)
+#define OPC_EXT_0F18_REG_2 (OPC_EXT_0F18_REG_1 + 1)
+#define OPC_EXT_0F18_REG_3 (OPC_EXT_0F18_REG_2 + 1)
+#define OPC_EXT_0F71_REG_2 (OPC_EXT_0F18_REG_3 + 1)
+#define OPC_EXT_0F71_REG_4 (OPC_EXT_0F71_REG_2 + 1)
+#define OPC_EXT_0F71_REG_6 (OPC_EXT_0F71_REG_4 + 1)
+#define OPC_EXT_0F72_REG_2 (OPC_EXT_0F71_REG_6 + 1)
+#define OPC_EXT_0F72_REG_4 (OPC_EXT_0F72_REG_2 + 1)
+#define OPC_EXT_0F72_REG_6 (OPC_EXT_0F72_REG_4 + 1)
+#define OPC_EXT_0F73_REG_2 (OPC_EXT_0F72_REG_6 + 1)
+#define OPC_EXT_0F73_REG_3 (OPC_EXT_0F73_REG_2 + 1)
+#define OPC_EXT_0F73_REG_6 (OPC_EXT_0F73_REG_3 + 1)
+#define OPC_EXT_0F73_REG_7 (OPC_EXT_0F73_REG_6 + 1)
+#define OPC_EXT_0FAE_REG_0 (OPC_EXT_0F73_REG_7 + 1)
+#define OPC_EXT_0FAE_REG_1 (OPC_EXT_0FAE_REG_0 + 1)
+#define OPC_EXT_0FAE_REG_2 (OPC_EXT_0FAE_REG_1 + 1)
+#define OPC_EXT_0FAE_REG_3 (OPC_EXT_0FAE_REG_2 + 1)
+#define OPC_EXT_0FAE_REG_5 (OPC_EXT_0FAE_REG_3 + 1)
+#define OPC_EXT_0FAE_REG_6 (OPC_EXT_0FAE_REG_5 + 1)
+#define OPC_EXT_0FAE_REG_7 (OPC_EXT_0FAE_REG_6 + 1)
+#define OPC_EXT_0FC7_REG_6 (OPC_EXT_0FAE_REG_7 + 1)
+#define OPC_EXT_0FC7_REG_7 (OPC_EXT_0FC7_REG_6 + 1)
+#define OPC_EXT_0F12_PREFIX_0 (OPC_EXT_0FC7_REG_7 + 1)
+#define OPC_EXT_0F16_PREFIX_0 (OPC_EXT_0F12_PREFIX_0 + 1)
+#define OPC_EXT_0FF0_PREFIX_3 (OPC_EXT_0F16_PREFIX_0 + 1)
+#define OPC_EXT_62_32BIT (OPC_EXT_0FF0_PREFIX_3 + 1)
+#define OPC_EXT_C4_32BIT (OPC_EXT_62_32BIT + 1)
+#define OPC_EXT_C5_32BIT (OPC_EXT_C4_32BIT + 1)
+
+#define OPC_EXT_RM_0F01_REG_0 0
+#define OPC_EXT_RM_0F01_REG_1 (OPC_EXT_RM_0F01_REG_0 + 1)
+#define OPC_EXT_RM_0F01_REG_3 (OPC_EXT_RM_0F01_REG_1 + 1)
+#define OPC_EXT_RM_0F01_REG_7 (OPC_EXT_RM_0F01_REG_3 + 1)
+#define OPC_EXT_RM_0FAE_REG_5 (OPC_EXT_RM_0F01_REG_7 + 1)
+#define OPC_EXT_RM_0FAE_REG_6 (OPC_EXT_RM_0FAE_REG_5 + 1)
+#define OPC_EXT_RM_0FAE_REG_7 (OPC_EXT_RM_0FAE_REG_6 + 1)
typedef void (*op_rtn) (int bytemode, int sizeflag);
@@ -722,8 +729,8 @@ static const struct dis386 dis386[] = {
{ "addS", { Gv, Ev } },
{ "addB", { AL, Ib } },
{ "addS", { eAX, Iv } },
- { X86_64_4 },
- { X86_64_5 },
+ { X86_64_TABLE (X86_64_06) },
+ { X86_64_TABLE (X86_64_07) },
/* 08 */
{ "orB", { Eb, Gb } },
{ "orS", { Ev, Gv } },
@@ -731,7 +738,7 @@ static const struct dis386 dis386[] = {
{ "orS", { Gv, Ev } },
{ "orB", { AL, Ib } },
{ "orS", { eAX, Iv } },
- { X86_64_6 },
+ { X86_64_TABLE (X86_64_0D) },
{ "(bad)", { XX } }, /* 0x0f extended opcode escape */
/* 10 */
{ "adcB", { Eb, Gb } },
@@ -740,8 +747,8 @@ static const struct dis386 dis386[] = {
{ "adcS", { Gv, Ev } },
{ "adcB", { AL, Ib } },
{ "adcS", { eAX, Iv } },
- { X86_64_7 },
- { X86_64_8 },
+ { X86_64_TABLE (X86_64_16) },
+ { X86_64_TABLE (X86_64_17) },
/* 18 */
{ "sbbB", { Eb, Gb } },
{ "sbbS", { Ev, Gv } },
@@ -749,8 +756,8 @@ static const struct dis386 dis386[] = {
{ "sbbS", { Gv, Ev } },
{ "sbbB", { AL, Ib } },
{ "sbbS", { eAX, Iv } },
- { X86_64_9 },
- { X86_64_10 },
+ { X86_64_TABLE (X86_64_1E) },
+ { X86_64_TABLE (X86_64_1F) },
/* 20 */
{ "andB", { Eb, Gb } },
{ "andS", { Ev, Gv } },
@@ -759,7 +766,7 @@ static const struct dis386 dis386[] = {
{ "andB", { AL, Ib } },
{ "andS", { eAX, Iv } },
{ "(bad)", { XX } }, /* SEG ES prefix */
- { X86_64_11 },
+ { X86_64_TABLE (X86_64_27) },
/* 28 */
{ "subB", { Eb, Gb } },
{ "subS", { Ev, Gv } },
@@ -768,7 +775,7 @@ static const struct dis386 dis386[] = {
{ "subB", { AL, Ib } },
{ "subS", { eAX, Iv } },
{ "(bad)", { XX } }, /* SEG CS prefix */
- { X86_64_12 },
+ { X86_64_TABLE (X86_64_2F) },
/* 30 */
{ "xorB", { Eb, Gb } },
{ "xorS", { Ev, Gv } },
@@ -777,7 +784,7 @@ static const struct dis386 dis386[] = {
{ "xorB", { AL, Ib } },
{ "xorS", { eAX, Iv } },
{ "(bad)", { XX } }, /* SEG SS prefix */
- { X86_64_13 },
+ { X86_64_TABLE (X86_64_37) },
/* 38 */
{ "cmpB", { Eb, Gb } },
{ "cmpS", { Ev, Gv } },
@@ -786,7 +793,7 @@ static const struct dis386 dis386[] = {
{ "cmpB", { AL, Ib } },
{ "cmpS", { eAX, Iv } },
{ "(bad)", { XX } }, /* SEG DS prefix */
- { X86_64_14 },
+ { X86_64_TABLE (X86_64_3F) },
/* 40 */
{ "inc{S|}", { RMeAX } },
{ "inc{S|}", { RMeCX } },
@@ -824,10 +831,10 @@ static const struct dis386 dis386[] = {
{ "popV", { RMrSI } },
{ "popV", { RMrDI } },
/* 60 */
- { X86_64_0 },
- { X86_64_1 },
- { X86_64_2 },
- { X86_64_3 },
+ { X86_64_TABLE (X86_64_60) },
+ { X86_64_TABLE (X86_64_61) },
+ { X86_64_TABLE (X86_64_62) },
+ { X86_64_TABLE (X86_64_63) },
{ "(bad)", { XX } }, /* seg fs */
{ "(bad)", { XX } }, /* seg gs */
{ "(bad)", { XX } }, /* op size prefix */
@@ -838,9 +845,9 @@ static const struct dis386 dis386[] = {
{ "pushT", { sIb } },
{ "imulS", { Gv, Ev, sIb } },
{ "ins{b|}", { Ybr, indirDX } },
- { X86_64_15 },
+ { X86_64_TABLE (X86_64_6D) },
{ "outs{b|}", { indirDXr, Xb } },
- { X86_64_16 },
+ { X86_64_TABLE (X86_64_6F) },
/* 70 */
{ "joH", { Jb, XX, cond_jump_flag } },
{ "jnoH", { Jb, XX, cond_jump_flag } },
@@ -860,10 +867,10 @@ static const struct dis386 dis386[] = {
{ "jleH", { Jb, XX, cond_jump_flag } },
{ "jgH", { Jb, XX, cond_jump_flag } },
/* 80 */
- { GRP1b },
- { GRP1S },
+ { GRP (GRP_80) },
+ { GRP (GRP_81) },
{ "(bad)", { XX } },
- { GRP1Ss },
+ { GRP (GRP_82) },
{ "testB", { Eb, Gb } },
{ "testS", { Ev, Gv } },
{ "xchgB", { Eb, Gb } },
@@ -874,11 +881,11 @@ static const struct dis386 dis386[] = {
{ "movB", { Gb, Eb } },
{ "movS", { Gv, Ev } },
{ "movD", { Sv, Sw } },
- { OPC_EXT_0 },
+ { OPC_EXT_TABLE (OPC_EXT_8D) },
{ "movD", { Sw, Sv } },
- { GRP1a },
+ { GRP (GRP_8F) },
/* 90 */
- { PREGRP38 },
+ { PREGRP (PREGRP_90) },
{ "xchgS", { RMeCX, eAX } },
{ "xchgS", { RMeDX, eAX } },
{ "xchgS", { RMeBX, eAX } },
@@ -889,7 +896,7 @@ static const struct dis386 dis386[] = {
/* 98 */
{ "cW{t|}R", { XX } },
{ "cR{t|}O", { XX } },
- { X86_64_17 },
+ { X86_64_TABLE (X86_64_9A) },
{ "(bad)", { XX } }, /* fwait */
{ "pushfT", { XX } },
{ "popfT", { XX } },
@@ -932,14 +939,14 @@ static const struct dis386 dis386[] = {
{ "movS", { RMeSI, Iv64 } },
{ "movS", { RMeDI, Iv64 } },
/* c0 */
- { GRP2b },
- { GRP2S },
+ { GRP (GRP_C0) },
+ { GRP (GRP_C1) },
{ "retT", { Iw } },
{ "retT", { XX } },
- { OPC_EXT_1 },
- { X86_64_27 },
- { GRP11_C6 },
- { GRP11_C7 },
+ { X86_64_TABLE (X86_64_C4) },
+ { X86_64_TABLE (X86_64_C5) },
+ { GRP (GRP_C6) },
+ { GRP (GRP_C7) },
/* c8 */
{ "enterT", { Iw, Ib } },
{ "leaveT", { XX } },
@@ -947,15 +954,15 @@ static const struct dis386 dis386[] = {
{ "lretP", { XX } },
{ "int3", { XX } },
{ "int", { Ib } },
- { X86_64_18 },
+ { X86_64_TABLE (X86_64_CE) },
{ "iretP", { XX } },
/* d0 */
- { GRP2b_one },
- { GRP2S_one },
- { GRP2b_cl },
- { GRP2S_cl },
- { X86_64_19 },
- { X86_64_20 },
+ { GRP (GRP_D0) },
+ { GRP (GRP_D1) },
+ { GRP (GRP_D2) },
+ { GRP (GRP_D3) },
+ { X86_64_TABLE (X86_64_D4) },
+ { X86_64_TABLE (X86_64_D5) },
{ "(bad)", { XX } },
{ "xlat", { DSBX } },
/* d8 */
@@ -979,7 +986,7 @@ static const struct dis386 dis386[] = {
/* e8 */
{ "callT", { Jv } },
{ "jmpT", { Jv } },
- { X86_64_21 },
+ { X86_64_TABLE (X86_64_EA) },
{ "jmp", { Jb } },
{ "inB", { AL, indirDX } },
{ "inG", { zAX, indirDX } },
@@ -992,8 +999,8 @@ static const struct dis386 dis386[] = {
{ "(bad)", { XX } }, /* repz */
{ "hlt", { XX } },
{ "cmc", { XX } },
- { GRP3b },
- { GRP3S },
+ { GRP (GRP_F6) },
+ { GRP (GRP_F7) },
/* f8 */
{ "clc", { XX } },
{ "stc", { XX } },
@@ -1001,14 +1008,14 @@ static const struct dis386 dis386[] = {
{ "sti", { XX } },
{ "cld", { XX } },
{ "std", { XX } },
- { GRP4 },
- { GRP5 },
+ { GRP (GRP_FE) },
+ { GRP (GRP_FF) },
};
static const struct dis386 dis386_twobyte[] = {
/* 00 */
- { GRP6 },
- { GRP7 },
+ { GRP (GRP_0F00 ) },
+ { GRP (GRP_0F01 ) },
{ "larS", { Gv, Ew } },
{ "lslS", { Gv, Ew } },
{ "(bad)", { XX } },
@@ -1021,20 +1028,20 @@ static const struct dis386 dis386_twobyte[] = {
{ "(bad)", { XX } },
{ "ud2a", { XX } },
{ "(bad)", { XX } },
- { GRPAMD },
+ { GRP (GRP_0F0E) },
{ "femms", { XX } },
{ "", { MX, EM, OPSUF } }, /* See OP_3DNowSuffix. */
/* 10 */
- { PREGRP8 },
- { PREGRP9 },
- { PREGRP30 },
- { OPC_EXT_34 },
+ { PREGRP (PREGRP_0F10) },
+ { PREGRP (PREGRP_0F11) },
+ { PREGRP (PREGRP_0F12) },
+ { OPC_EXT_TABLE (OPC_EXT_0F13) },
{ "unpcklpX", { XM, EXq } },
{ "unpckhpX", { XM, EXq } },
- { PREGRP31 },
- { OPC_EXT_35 },
+ { PREGRP (PREGRP_0F16) },
+ { OPC_EXT_TABLE (OPC_EXT_0F17) },
/* 18 */
- { GRP16 },
+ { GRP (GRP_0F18) },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
@@ -1043,23 +1050,23 @@ static const struct dis386 dis386_twobyte[] = {
{ "(bad)", { XX } },
{ "nopQ", { Ev } },
/* 20 */
- { OPC_EXT_40 },
- { OPC_EXT_41 },
- { OPC_EXT_42 },
- { OPC_EXT_43 },
- { OPC_EXT_44 },
- { THREE_BYTE_SSE5_0F25 },
- { OPC_EXT_45 },
+ { OPC_EXT_TABLE (OPC_EXT_0F20) },
+ { OPC_EXT_TABLE (OPC_EXT_0F21) },
+ { OPC_EXT_TABLE (OPC_EXT_0F22) },
+ { OPC_EXT_TABLE (OPC_EXT_0F23) },
+ { OPC_EXT_TABLE (OPC_EXT_0F24) },
+ { THREE_BYTE_TABLE (THREE_BYTE_0F25) },
+ { OPC_EXT_TABLE (OPC_EXT_0F26) },
{ "(bad)", { XX } },
/* 28 */
{ "movapX", { XM, EXx } },
{ "movapX", { EXx, XM } },
- { PREGRP2 },
- { PREGRP33 },
- { PREGRP4 },
- { PREGRP3 },
- { PREGRP93 },
- { PREGRP94 },
+ { PREGRP (PREGRP_0F2A) },
+ { PREGRP (PREGRP_0F2B) },
+ { PREGRP (PREGRP_0F2C) },
+ { PREGRP (PREGRP_0F2D) },
+ { PREGRP (PREGRP_0F2E) },
+ { PREGRP (PREGRP_0F2F) },
/* 30 */
{ "wrmsr", { XX } },
{ "rdtsc", { XX } },
@@ -1070,9 +1077,9 @@ static const struct dis386 dis386_twobyte[] = {
{ "(bad)", { XX } },
{ "(bad)", { XX } },
/* 38 */
- { THREE_BYTE_0 },
+ { THREE_BYTE_TABLE (THREE_BYTE_0F38) },
{ "(bad)", { XX } },
- { THREE_BYTE_1 },
+ { THREE_BYTE_TABLE (THREE_BYTE_0F3A) },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
@@ -1098,26 +1105,26 @@ static const struct dis386 dis386_twobyte[] = {
{ "cmovg", { Gv, Ev } },
/* 50 */
{ "movmskpX", { Gdq, XS } },
- { PREGRP13 },
- { PREGRP12 },
- { PREGRP11 },
+ { PREGRP (PREGRP_0F51) },
+ { PREGRP (PREGRP_0F52) },
+ { PREGRP (PREGRP_0F53) },
{ "andpX", { XM, EXx } },
{ "andnpX", { XM, EXx } },
{ "orpX", { XM, EXx } },
{ "xorpX", { XM, EXx } },
/* 58 */
- { PREGRP0 },
- { PREGRP10 },
- { PREGRP17 },
- { PREGRP16 },
- { PREGRP14 },
- { PREGRP7 },
- { PREGRP5 },
- { PREGRP6 },
+ { PREGRP (PREGRP_0F58) },
+ { PREGRP (PREGRP_0F59) },
+ { PREGRP (PREGRP_0F5A) },
+ { PREGRP (PREGRP_0F5B) },
+ { PREGRP (PREGRP_0F5C) },
+ { PREGRP (PREGRP_0F5D) },
+ { PREGRP (PREGRP_0F5E) },
+ { PREGRP (PREGRP_0F5F) },
/* 60 */
- { PREGRP95 },
- { PREGRP96 },
- { PREGRP97 },
+ { PREGRP (PREGRP_0F60) },
+ { PREGRP (PREGRP_0F61) },
+ { PREGRP (PREGRP_0F62) },
{ "packsswb", { MX, EM } },
{ "pcmpgtb", { MX, EM } },
{ "pcmpgtw", { MX, EM } },
@@ -1128,28 +1135,28 @@ static const struct dis386 dis386_twobyte[] = {
{ "punpckhwd", { MX, EM } },
{ "punpckhdq", { MX, EM } },
{ "packssdw", { MX, EM } },
- { PREGRP26 },
- { PREGRP24 },
+ { PREGRP (PREGRP_0F6C) },
+ { PREGRP (PREGRP_0F6D) },
{ "movK", { MX, Edq } },
- { PREGRP19 },
+ { PREGRP (PREGRP_0F6F) },
/* 70 */
- { PREGRP22 },
- { GRP12 },
- { GRP13 },
- { GRP14 },
+ { PREGRP (PREGRP_0F70) },
+ { GRP (GRP_0F71) },
+ { GRP (GRP_0F72) },
+ { GRP (GRP_0F73) },
{ "pcmpeqb", { MX, EM } },
{ "pcmpeqw", { MX, EM } },
{ "pcmpeqd", { MX, EM } },
{ "emms", { XX } },
/* 78 */
- { PREGRP34 },
- { PREGRP35 },
- { THREE_BYTE_SSE5_0F7A },
- { THREE_BYTE_SSE5_0F7B },
- { PREGRP28 },
- { PREGRP29 },
- { PREGRP23 },
- { PREGRP20 },
+ { PREGRP (PREGRP_0F78) },
+ { PREGRP (PREGRP_0F79) },
+ { THREE_BYTE_TABLE (THREE_BYTE_0F7A) },
+ { THREE_BYTE_TABLE (THREE_BYTE_0FBA) },
+ { PREGRP (PREGRP_0F7C) },
+ { PREGRP (PREGRP_0F7D) },
+ { PREGRP (PREGRP_0F7E) },
+ { PREGRP (PREGRP_0F7F) },
/* 80 */
{ "joH", { Jv, XX, cond_jump_flag } },
{ "jnoH", { Jv, XX, cond_jump_flag } },
@@ -1193,8 +1200,8 @@ static const struct dis386 dis386_twobyte[] = {
{ "btS", { Ev, Gv } },
{ "shldS", { Ev, Gv, Ib } },
{ "shldS", { Ev, Gv, CL } },
- { GRPPADLCK2 },
- { GRPPADLCK1 },
+ { GRP (GRP_0FA6) },
+ { GRP (GRP_0FA7) },
/* a8 */
{ "pushT", { gs } },
{ "popT", { gs } },
@@ -1202,35 +1209,35 @@ static const struct dis386 dis386_twobyte[] = {
{ "btsS", { Ev, Gv } },
{ "shrdS", { Ev, Gv, Ib } },
{ "shrdS", { Ev, Gv, CL } },
- { GRP15 },
+ { GRP (GRP_0FAE) },
{ "imulS", { Gv, Ev } },
/* b0 */
{ "cmpxchgB", { Eb, Gb } },
{ "cmpxchgS", { Ev, Gv } },
- { OPC_EXT_3 },
+ { OPC_EXT_TABLE (OPC_EXT_0FB2) },
{ "btrS", { Ev, Gv } },
- { OPC_EXT_4 },
- { OPC_EXT_5 },
+ { OPC_EXT_TABLE (OPC_EXT_0FB4) },
+ { OPC_EXT_TABLE (OPC_EXT_0FB5) },
{ "movz{bR|x}", { Gv, Eb } },
{ "movz{wR|x}", { Gv, Ew } }, /* yes, there really is movzww ! */
/* b8 */
- { PREGRP37 },
+ { PREGRP (PREGRP_0FB8) },
{ "ud2b", { XX } },
- { GRP8 },
+ { GRP (GRP_0FBA) },
{ "btcS", { Ev, Gv } },
{ "bsfS", { Gv, Ev } },
- { PREGRP36 },
+ { PREGRP (PREGRP_0FBD) },
{ "movs{bR|x}", { Gv, Eb } },
{ "movs{wR|x}", { Gv, Ew } }, /* yes, there really is movsww ! */
/* c0 */
{ "xaddB", { Eb, Gb } },
{ "xaddS", { Ev, Gv } },
- { PREGRP1 },
+ { PREGRP (PREGRP_0FC2) },
{ "movntiS", { Ev, Gv } },
{ "pinsrw", { MX, Edqw, Ib } },
{ "pextrw", { Gdq, MS, Ib } },
{ "shufpX", { XM, EXx, Ib } },
- { GRP9 },
+ { GRP (GRP_0FC7) },
/* c8 */
{ "bswap", { RMeAX } },
{ "bswap", { RMeCX } },
@@ -1241,13 +1248,13 @@ static const struct dis386 dis386_twobyte[] = {
{ "bswap", { RMeSI } },
{ "bswap", { RMeDI } },
/* d0 */
- { PREGRP27 },
+ { PREGRP (PREGRP_0FD0) },
{ "psrlw", { MX, EM } },
{ "psrld", { MX, EM } },
{ "psrlq", { MX, EM } },
{ "paddq", { MX, EM } },
{ "pmullw", { MX, EM } },
- { PREGRP21 },
+ { PREGRP (PREGRP_0FD6) },
{ "pmovmskb", { Gdq, MS } },
/* d8 */
{ "psubusb", { MX, EM } },
@@ -1265,8 +1272,8 @@ static const struct dis386 dis386_twobyte[] = {
{ "pavgw", { MX, EM } },
{ "pmulhuw", { MX, EM } },
{ "pmulhw", { MX, EM } },
- { PREGRP15 },
- { PREGRP25 },
+ { PREGRP (PREGRP_0FE6) },
+ { PREGRP (PREGRP_0FE7) },
/* e8 */
{ "psubsb", { MX, EM } },
{ "psubsw", { MX, EM } },
@@ -1277,14 +1284,14 @@ static const struct dis386 dis386_twobyte[] = {
{ "pmaxsw", { MX, EM } },
{ "pxor", { MX, EM } },
/* f0 */
- { PREGRP32 },
+ { PREGRP (PREGRP_0FF0) },
{ "psllw", { MX, EM } },
{ "pslld", { MX, EM } },
{ "psllq", { MX, EM } },
{ "pmuludq", { MX, EM } },
{ "pmaddwd", { MX, EM } },
{ "psadbw", { MX, EM } },
- { PREGRP18 },
+ { PREGRP (PREGRP_0FF7) },
/* f8 */
{ "psubb", { MX, EM } },
{ "psubw", { MX, EM } },
@@ -1435,18 +1442,7 @@ static const char *att_index16[] = {
};
static const struct dis386 grps[][8] = {
- /* GRP1a */
- {
- { "popU", { stackEv } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- },
- /* GRP1b */
+ /* GRP_80 */
{
{ "addA", { Eb, Ib } },
{ "orA", { Eb, Ib } },
@@ -1457,7 +1453,7 @@ static const struct dis386 grps[][8] = {
{ "xorA", { Eb, Ib } },
{ "cmpA", { Eb, Ib } },
},
- /* GRP1S */
+ /* GRP_81 */
{
{ "addQ", { Ev, Iv } },
{ "orQ", { Ev, Iv } },
@@ -1468,7 +1464,7 @@ static const struct dis386 grps[][8] = {
{ "xorQ", { Ev, Iv } },
{ "cmpQ", { Ev, Iv } },
},
- /* GRP1Ss */
+ /* GRP_82 */
{
{ "addQ", { Ev, sIb } },
{ "orQ", { Ev, sIb } },
@@ -1479,7 +1475,18 @@ static const struct dis386 grps[][8] = {
{ "xorQ", { Ev, sIb } },
{ "cmpQ", { Ev, sIb } },
},
- /* GRP2b */
+ /* GRP_8F */
+ {
+ { "popU", { stackEv } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ },
+ /* GRP_C0 */
{
{ "rolA", { Eb, Ib } },
{ "rorA", { Eb, Ib } },
@@ -1490,7 +1497,7 @@ static const struct dis386 grps[][8] = {
{ "(bad)", { XX } },
{ "sarA", { Eb, Ib } },
},
- /* GRP2S */
+ /* GRP_C1 */
{
{ "rolQ", { Ev, Ib } },
{ "rorQ", { Ev, Ib } },
@@ -1501,7 +1508,29 @@ static const struct dis386 grps[][8] = {
{ "(bad)", { XX } },
{ "sarQ", { Ev, Ib } },
},
- /* GRP2b_one */
+ /* GRP_C6 */
+ {
+ { "movA", { Eb, Ib } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ },
+ /* GRP_C7 */
+ {
+ { "movQ", { Ev, Iv } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ },
+ /* GRP_D0 */
{
{ "rolA", { Eb, I1 } },
{ "rorA", { Eb, I1 } },
@@ -1512,7 +1541,7 @@ static const struct dis386 grps[][8] = {
{ "(bad)", { XX } },
{ "sarA", { Eb, I1 } },
},
- /* GRP2S_one */
+ /* GRP_D1 */
{
{ "rolQ", { Ev, I1 } },
{ "rorQ", { Ev, I1 } },
@@ -1523,7 +1552,7 @@ static const struct dis386 grps[][8] = {
{ "(bad)", { XX } },
{ "sarQ", { Ev, I1 } },
},
- /* GRP2b_cl */
+ /* GRP_D2 */
{
{ "rolA", { Eb, CL } },
{ "rorA", { Eb, CL } },
@@ -1534,7 +1563,7 @@ static const struct dis386 grps[][8] = {
{ "(bad)", { XX } },
{ "sarA", { Eb, CL } },
},
- /* GRP2S_cl */
+ /* GRP_D3 */
{
{ "rolQ", { Ev, CL } },
{ "rorQ", { Ev, CL } },
@@ -1545,7 +1574,7 @@ static const struct dis386 grps[][8] = {
{ "(bad)", { XX } },
{ "sarQ", { Ev, CL } },
},
- /* GRP3b */
+ /* GRP_F6 */
{
{ "testA", { Eb, Ib } },
{ "(bad)", { Eb } },
@@ -1556,7 +1585,7 @@ static const struct dis386 grps[][8] = {
{ "divA", { Eb } }, /* mul/imul opcodes. Do the same for div */
{ "idivA", { Eb } }, /* and idiv for consistency. */
},
- /* GRP3S */
+ /* GRP_F7 */
{
{ "testQ", { Ev, Iv } },
{ "(bad)", { XX } },
@@ -1567,7 +1596,7 @@ static const struct dis386 grps[][8] = {
{ "divQ", { Ev } },
{ "idivQ", { Ev } },
},
- /* GRP4 */
+ /* GRP_FE */
{
{ "incA", { Eb } },
{ "decA", { Eb } },
@@ -1578,7 +1607,7 @@ static const struct dis386 grps[][8] = {
{ "(bad)", { XX } },
{ "(bad)", { XX } },
},
- /* GRP5 */
+ /* GRP_FF */
{
{ "incQ", { Ev } },
{ "decQ", { Ev } },
@@ -1589,7 +1618,7 @@ static const struct dis386 grps[][8] = {
{ "pushU", { stackEv } },
{ "(bad)", { XX } },
},
- /* GRP6 */
+ /* GRP_0F00 */
{
{ "sldtD", { Sv } },
{ "strD", { Sv } },
@@ -1600,432 +1629,483 @@ static const struct dis386 grps[][8] = {
{ "(bad)", { XX } },
{ "(bad)", { XX } },
},
- /* GRP7 */
+ /* GRP_0F01 */
{
- { OPC_EXT_6 },
- { OPC_EXT_7 },
- { OPC_EXT_8 },
- { OPC_EXT_39 },
+ { OPC_EXT_TABLE (OPC_EXT_0F01_REG_0) },
+ { OPC_EXT_TABLE (OPC_EXT_0F01_REG_1) },
+ { OPC_EXT_TABLE (OPC_EXT_0F01_REG_2) },
+ { OPC_EXT_TABLE (OPC_EXT_0F01_REG_3) },
{ "smswD", { Sv } },
{ "(bad)", { XX } },
{ "lmsw", { Ew } },
- { OPC_EXT_38 },
+ { OPC_EXT_TABLE (OPC_EXT_0F01_REG_7) },
},
- /* GRP8 */
+ /* GRP_0F0E */
{
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "btQ", { Ev, Ib } },
- { "btsQ", { Ev, Ib } },
- { "btrQ", { Ev, Ib } },
- { "btcQ", { Ev, Ib } },
+ { "prefetch", { Eb } },
+ { "prefetchw", { Eb } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
},
- /* GRP9 */
+ /* GRP_0F18 */
{
- { "(bad)", { XX } },
- { "cmpxchg8b", { { CMPXCHG8B_Fixup, q_mode } } },
+ { OPC_EXT_TABLE (OPC_EXT_0F18_REG_0) },
+ { OPC_EXT_TABLE (OPC_EXT_0F18_REG_1) },
+ { OPC_EXT_TABLE (OPC_EXT_0F18_REG_2) },
+ { OPC_EXT_TABLE (OPC_EXT_0F18_REG_3) },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
- { OPC_EXT_9 },
- { OPC_EXT_10 },
},
- /* GRP11_C6 */
+ /* GRP_0F71 */
{
- { "movA", { Eb, Ib } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
+ { OPC_EXT_TABLE (OPC_EXT_0F71_REG_2) },
{ "(bad)", { XX } },
+ { OPC_EXT_TABLE (OPC_EXT_0F71_REG_4) },
{ "(bad)", { XX } },
+ { OPC_EXT_TABLE (OPC_EXT_0F71_REG_6) },
{ "(bad)", { XX } },
},
- /* GRP11_C7 */
+ /* GRP_0F72 */
{
- { "movQ", { Ev, Iv } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
+ { OPC_EXT_TABLE (OPC_EXT_0F72_REG_2) },
{ "(bad)", { XX } },
+ { OPC_EXT_TABLE (OPC_EXT_0F72_REG_4) },
{ "(bad)", { XX } },
+ { OPC_EXT_TABLE (OPC_EXT_0F72_REG_6) },
{ "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
},
- /* GRP12 */
+ /* GRP_0F73 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
- { OPC_EXT_11 },
+ { OPC_EXT_TABLE (OPC_EXT_0F73_REG_2) },
+ { OPC_EXT_TABLE (OPC_EXT_0F73_REG_3) },
{ "(bad)", { XX } },
- { OPC_EXT_12 },
- { "(bad)", { XX } },
- { OPC_EXT_13 },
{ "(bad)", { XX } },
+ { OPC_EXT_TABLE (OPC_EXT_0F73_REG_6) },
+ { OPC_EXT_TABLE (OPC_EXT_0F73_REG_7) },
},
- /* GRP13 */
+ /* GRP_0FA6 */
{
+ { "montmul", { { OP_0f07, 0 } } },
+ { "xsha1", { { OP_0f07, 0 } } },
+ { "xsha256", { { OP_0f07, 0 } } },
+ { "(bad)", { { OP_0f07, 0 } } },
+ { "(bad)", { { OP_0f07, 0 } } },
+ { "(bad)", { { OP_0f07, 0 } } },
+ { "(bad)", { { OP_0f07, 0 } } },
+ { "(bad)", { { OP_0f07, 0 } } },
+ },
+ /* GRP_0FA7 */
+ {
+ { "xstore-rng", { { OP_0f07, 0 } } },
+ { "xcrypt-ecb", { { OP_0f07, 0 } } },
+ { "xcrypt-cbc", { { OP_0f07, 0 } } },
+ { "xcrypt-ctr", { { OP_0f07, 0 } } },
+ { "xcrypt-cfb", { { OP_0f07, 0 } } },
+ { "xcrypt-ofb", { { OP_0f07, 0 } } },
+ { "(bad)", { { OP_0f07, 0 } } },
+ { "(bad)", { { OP_0f07, 0 } } },
+ },
+ /* GRP_0FAE */
+ {
+ { OPC_EXT_TABLE (OPC_EXT_0FAE_REG_0) },
+ { OPC_EXT_TABLE (OPC_EXT_0FAE_REG_1) },
+ { OPC_EXT_TABLE (OPC_EXT_0FAE_REG_2) },
+ { OPC_EXT_TABLE (OPC_EXT_0FAE_REG_3) },
{ "(bad)", { XX } },
- { "(bad)", { XX } },
- { OPC_EXT_14 },
- { "(bad)", { XX } },
- { OPC_EXT_15 },
- { "(bad)", { XX } },
- { OPC_EXT_16 },
- { "(bad)", { XX } },
+ { OPC_EXT_TABLE (OPC_EXT_0FAE_REG_5) },
+ { OPC_EXT_TABLE (OPC_EXT_0FAE_REG_6) },
+ { OPC_EXT_TABLE (OPC_EXT_0FAE_REG_7) },
},
- /* GRP14 */
+ /* GRP_0FBA */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
- { OPC_EXT_17 },
- { OPC_EXT_18 },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
- { OPC_EXT_19 },
- { OPC_EXT_20 },
+ { "btQ", { Ev, Ib } },
+ { "btsQ", { Ev, Ib } },
+ { "btrQ", { Ev, Ib } },
+ { "btcQ", { Ev, Ib } },
},
- /* GRP15 */
+ /* GRP_0FC7 */
{
- { OPC_EXT_21 },
- { OPC_EXT_22 },
- { OPC_EXT_23 },
- { OPC_EXT_24 },
{ "(bad)", { XX } },
- { OPC_EXT_25 },
- { OPC_EXT_26 },
- { OPC_EXT_27 },
- },
- /* GRP16 */
- {
- { OPC_EXT_28 },
- { OPC_EXT_29 },
- { OPC_EXT_30 },
- { OPC_EXT_31 },
+ { "cmpxchg8b", { { CMPXCHG8B_Fixup, q_mode } } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
+ { OPC_EXT_TABLE (OPC_EXT_0FC7_REG_6) },
+ { OPC_EXT_TABLE (OPC_EXT_0FC7_REG_7) },
},
- /* GRPAMD */
+};
+
+static const struct dis386 prefix_user_table[][4] = {
+ /* PREGRP_90 */
{
- { "prefetch", { Eb } },
- { "prefetchw", { Eb } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } } },
+ { "pause", { XX } },
+ { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } } },
+ { "(bad)", { XX } },
},
- /* GRPPADLCK1 */
+
+ /* PREGRP_0F10 */
{
- { "xstore-rng", { { OP_0f07, 0 } } },
- { "xcrypt-ecb", { { OP_0f07, 0 } } },
- { "xcrypt-cbc", { { OP_0f07, 0 } } },
- { "xcrypt-ctr", { { OP_0f07, 0 } } },
- { "xcrypt-cfb", { { OP_0f07, 0 } } },
- { "xcrypt-ofb", { { OP_0f07, 0 } } },
- { "(bad)", { { OP_0f07, 0 } } },
- { "(bad)", { { OP_0f07, 0 } } },
+ { "movups", { XM, EXx } },
+ { "movss", { XM, EXd } },
+ { "movupd", { XM, EXx } },
+ { "movsd", { XM, EXq } },
},
- /* GRPPADLCK2 */
+
+ /* PREGRP_0F11 */
{
- { "montmul", { { OP_0f07, 0 } } },
- { "xsha1", { { OP_0f07, 0 } } },
- { "xsha256", { { OP_0f07, 0 } } },
- { "(bad)", { { OP_0f07, 0 } } },
- { "(bad)", { { OP_0f07, 0 } } },
- { "(bad)", { { OP_0f07, 0 } } },
- { "(bad)", { { OP_0f07, 0 } } },
- { "(bad)", { { OP_0f07, 0 } } },
- }
-};
+ { "movups", { EXx, XM } },
+ { "movss", { EXd, XM } },
+ { "movupd", { EXx, XM } },
+ { "movsd", { EXq, XM } },
+ },
-static const struct dis386 prefix_user_table[][4] = {
- /* PREGRP0 */
+ /* PREGRP_0F12 */
{
- { "addps", { XM, EXx } },
- { "addss", { XM, EXd } },
- { "addpd", { XM, EXx } },
- { "addsd", { XM, EXq } },
+ { OPC_EXT_TABLE (OPC_EXT_0F12_PREFIX_0) },
+ { "movsldup", { XM, EXx } },
+ { "movlpd", { XM, EXq } },
+ { "movddup", { XM, EXq } },
},
- /* PREGRP1 */
+
+ /* PREGRP_0F16 */
{
- { "", { XM, EXx, OPSIMD } }, /* See OP_SIMD_SUFFIX. */
- { "", { XM, EXd, OPSIMD } },
- { "", { XM, EXx, OPSIMD } },
- { "", { XM, EXq, OPSIMD } },
+ { OPC_EXT_TABLE (OPC_EXT_0F16_PREFIX_0) },
+ { "movshdup", { XM, EXx } },
+ { "movhpd", { XM, EXq } },
+ { "(bad)", { XM, EXq } },
},
- /* PREGRP2 */
+
+ /* PREGRP_0F2A */
{
{ "cvtpi2ps", { XM, EMCq } },
{ "cvtsi2ssY", { XM, Ev } },
{ "cvtpi2pd", { XM, EMCq } },
{ "cvtsi2sdY", { XM, Ev } },
},
- /* PREGRP3 */
+
+ /* PREGRP_0F2B */
{
- { "cvtps2pi", { MXC, EXq } },
- { "cvtss2siY", { Gv, EXd } },
- { "cvtpd2pi", { MXC, EXx } },
- { "cvtsd2siY", { Gv, EXq } },
+ {"movntps", { Ev, XM } },
+ {"movntss", { Ed, XM } },
+ {"movntpd", { Ev, XM } },
+ {"movntsd", { Eq, XM } },
},
- /* PREGRP4 */
+
+ /* PREGRP_0F2C */
{
{ "cvttps2pi", { MXC, EXq } },
{ "cvttss2siY", { Gv, EXd } },
{ "cvttpd2pi", { MXC, EXx } },
{ "cvttsd2siY", { Gv, EXq } },
},
- /* PREGRP5 */
- {
- { "divps", { XM, EXx } },
- { "divss", { XM, EXd } },
- { "divpd", { XM, EXx } },
- { "divsd", { XM, EXq } },
- },
- /* PREGRP6 */
- {
- { "maxps", { XM, EXx } },
- { "maxss", { XM, EXd } },
- { "maxpd", { XM, EXx } },
- { "maxsd", { XM, EXq } },
- },
- /* PREGRP7 */
+
+ /* PREGRP_0F2D */
{
- { "minps", { XM, EXx } },
- { "minss", { XM, EXd } },
- { "minpd", { XM, EXx } },
- { "minsd", { XM, EXq } },
+ { "cvtps2pi", { MXC, EXq } },
+ { "cvtss2siY", { Gv, EXd } },
+ { "cvtpd2pi", { MXC, EXx } },
+ { "cvtsd2siY", { Gv, EXq } },
},
- /* PREGRP8 */
+
+ /* PREGRP_0F2E */
{
- { "movups", { XM, EXx } },
- { "movss", { XM, EXd } },
- { "movupd", { XM, EXx } },
- { "movsd", { XM, EXq } },
+ { "ucomiss",{ XM, EXd } },
+ { "(bad)", { XX } },
+ { "ucomisd",{ XM, EXq } },
+ { "(bad)", { XX } },
},
- /* PREGRP9 */
+
+ /* PREGRP_0F2F */
{
- { "movups", { EXx, XM } },
- { "movss", { EXd, XM } },
- { "movupd", { EXx, XM } },
- { "movsd", { EXq, XM } },
+ { "comiss", { XM, EXd } },
+ { "(bad)", { XX } },
+ { "comisd", { XM, EXq } },
+ { "(bad)", { XX } },
},
- /* PREGRP10 */
+
+ /* PREGRP_0F51 */
{
- { "mulps", { XM, EXx } },
- { "mulss", { XM, EXd } },
- { "mulpd", { XM, EXx } },
- { "mulsd", { XM, EXq } },
+ { "sqrtps", { XM, EXx } },
+ { "sqrtss", { XM, EXd } },
+ { "sqrtpd", { XM, EXx } },
+ { "sqrtsd", { XM, EXq } },
},
- /* PREGRP11 */
+
+ /* PREGRP_0F52 */
{
- { "rcpps", { XM, EXx } },
- { "rcpss", { XM, EXd } },
+ { "rsqrtps",{ XM, EXx } },
+ { "rsqrtss",{ XM, EXd } },
{ "(bad)", { XM, EXx } },
{ "(bad)", { XM, EXx } },
},
- /* PREGRP12 */
+
+ /* PREGRP_0F53 */
{
- { "rsqrtps",{ XM, EXx } },
- { "rsqrtss",{ XM, EXd } },
+ { "rcpps", { XM, EXx } },
+ { "rcpss", { XM, EXd } },
{ "(bad)", { XM, EXx } },
{ "(bad)", { XM, EXx } },
},
- /* PREGRP13 */
+
+ /* PREGRP_0F58 */
{
- { "sqrtps", { XM, EXx } },
- { "sqrtss", { XM, EXd } },
- { "sqrtpd", { XM, EXx } },
- { "sqrtsd", { XM, EXq } },
+ { "addps", { XM, EXx } },
+ { "addss", { XM, EXd } },
+ { "addpd", { XM, EXx } },
+ { "addsd", { XM, EXq } },
},
- /* PREGRP14 */
+
+ /* PREGRP_0F59 */
{
- { "subps", { XM, EXx } },
- { "subss", { XM, EXd } },
- { "subpd", { XM, EXx } },
- { "subsd", { XM, EXq } },
+ { "mulps", { XM, EXx } },
+ { "mulss", { XM, EXd } },
+ { "mulpd", { XM, EXx } },
+ { "mulsd", { XM, EXq } },
},
- /* PREGRP15 */
+
+ /* PREGRP_0F5A */
{
- { "(bad)", { XM, EXx } },
- { "cvtdq2pd", { XM, EXq } },
- { "cvttpd2dq", { XM, EXx } },
- { "cvtpd2dq", { XM, EXx } },
+ { "cvtps2pd", { XM, EXq } },
+ { "cvtss2sd", { XM, EXd } },
+ { "cvtpd2ps", { XM, EXx } },
+ { "cvtsd2ss", { XM, EXq } },
},
- /* PREGRP16 */
+
+ /* PREGRP_0F5B */
{
{ "cvtdq2ps", { XM, EXx } },
{ "cvttps2dq", { XM, EXx } },
{ "cvtps2dq", { XM, EXx } },
{ "(bad)", { XM, EXx } },
},
- /* PREGRP17 */
+
+ /* PREGRP_0F5C */
{
- { "cvtps2pd", { XM, EXq } },
- { "cvtss2sd", { XM, EXd } },
- { "cvtpd2ps", { XM, EXx } },
- { "cvtsd2ss", { XM, EXq } },
+ { "subps", { XM, EXx } },
+ { "subss", { XM, EXd } },
+ { "subpd", { XM, EXx } },
+ { "subsd", { XM, EXq } },
},
- /* PREGRP18 */
+
+ /* PREGRP_0F5D */
{
- { "maskmovq", { MX, MS } },
- { "(bad)", { XM, EXx } },
- { "maskmovdqu", { XM, XS } },
- { "(bad)", { XM, EXx } },
+ { "minps", { XM, EXx } },
+ { "minss", { XM, EXd } },
+ { "minpd", { XM, EXx } },
+ { "minsd", { XM, EXq } },
},
- /* PREGRP19 */
+
+ /* PREGRP_0F5E */
{
- { "movq", { MX, EM } },
- { "movdqu", { XM, EXx } },
- { "movdqa", { XM, EXx } },
- { "(bad)", { XM, EXx } },
+ { "divps", { XM, EXx } },
+ { "divss", { XM, EXd } },
+ { "divpd", { XM, EXx } },
+ { "divsd", { XM, EXq } },
},
- /* PREGRP20 */
+
+ /* PREGRP_0F5F */
{
- { "movq", { EM, MX } },
- { "movdqu", { EXx, XM } },
- { "movdqa", { EXx, XM } },
- { "(bad)", { EXx, XM } },
+ { "maxps", { XM, EXx } },
+ { "maxss", { XM, EXd } },
+ { "maxpd", { XM, EXx } },
+ { "maxsd", { XM, EXq } },
},
- /* PREGRP21 */
+
+ /* PREGRP_0F60 */
{
- { "(bad)", { EXx, XM } },
- { "movq2dq",{ XM, MS } },
- { "movq", { EXq, XM } },
- { "movdq2q",{ MX, XS } },
+ { "punpcklbw",{ MX, EMd } },
+ { "(bad)", { XX } },
+ { "punpcklbw",{ MX, EMx } },
+ { "(bad)", { XX } },
},
- /* PREGRP22 */
+
+ /* PREGRP_0F61 */
{
- { "pshufw", { MX, EM, Ib } },
- { "pshufhw",{ XM, EXx, Ib } },
- { "pshufd", { XM, EXx, Ib } },
- { "pshuflw",{ XM, EXx, Ib } },
+ { "punpcklwd",{ MX, EMd } },
+ { "(bad)", { XX } },
+ { "punpcklwd",{ MX, EMx } },
+ { "(bad)", { XX } },
},
- /* PREGRP23 */
+
+ /* PREGRP_0F62 */
{
- { "movK", { Edq, MX } },
- { "movq", { XM, EXq } },
- { "movK", { Edq, XM } },
- { "(bad)", { Ed, XM } },
+ { "punpckldq",{ MX, EMd } },
+ { "(bad)", { XX } },
+ { "punpckldq",{ MX, EMx } },
+ { "(bad)", { XX } },
},
- /* PREGRP24 */
+
+ /* PREGRP_0F6C */
{
{ "(bad)", { MX, EXx } },
{ "(bad)", { XM, EXx } },
- { "punpckhqdq", { XM, EXx } },
+ { "punpcklqdq", { XM, EXx } },
{ "(bad)", { XM, EXx } },
},
- /* PREGRP25 */
- {
- { "movntq", { EM, MX } },
- { "(bad)", { EM, XM } },
- { "movntdq",{ EM, XM } },
- { "(bad)", { EM, XM } },
- },
- /* PREGRP26 */
+
+ /* PREGRP_0F6D */
{
{ "(bad)", { MX, EXx } },
{ "(bad)", { XM, EXx } },
- { "punpcklqdq", { XM, EXx } },
+ { "punpckhqdq", { XM, EXx } },
{ "(bad)", { XM, EXx } },
},
- /* PREGRP27 */
+
+ /* PREGRP_0F6F */
{
- { "(bad)", { MX, EXx } },
+ { "movq", { MX, EM } },
+ { "movdqu", { XM, EXx } },
+ { "movdqa", { XM, EXx } },
{ "(bad)", { XM, EXx } },
- { "addsubpd", { XM, EXx } },
- { "addsubps", { XM, EXx } },
},
- /* PREGRP28 */
+
+ /* PREGRP_0F70 */
+ {
+ { "pshufw", { MX, EM, Ib } },
+ { "pshufhw",{ XM, EXx, Ib } },
+ { "pshufd", { XM, EXx, Ib } },
+ { "pshuflw",{ XM, EXx, Ib } },
+ },
+
+ /* PREGRP_0F78 */
+ {
+ {"vmread", { Em, Gm } },
+ {"(bad)", { XX } },
+ {"extrq", { XS, Ib, Ib } },
+ {"insertq", { XM, XS, Ib, Ib } },
+ },
+
+ /* PREGRP_0F79 */
+ {
+ {"vmwrite", { Gm, Em } },
+ {"(bad)", { XX } },
+ {"extrq", { XM, XS } },
+ {"insertq", { XM, XS } },
+ },
+
+ /* PREGRP_0F7C */
{
{ "(bad)", { MX, EXx } },
{ "(bad)", { XM, EXx } },
{ "haddpd", { XM, EXx } },
{ "haddps", { XM, EXx } },
},
- /* PREGRP29 */
+
+ /* PREGRP_0F7D */
{
{ "(bad)", { MX, EXx } },
{ "(bad)", { XM, EXx } },
{ "hsubpd", { XM, EXx } },
{ "hsubps", { XM, EXx } },
},
- /* PREGRP30 */
+
+ /* PREGRP_0F7E */
{
- { OPC_EXT_36 },
- { "movsldup", { XM, EXx } },
- { "movlpd", { XM, EXq } },
- { "movddup", { XM, EXq } },
+ { "movK", { Edq, MX } },
+ { "movq", { XM, EXq } },
+ { "movK", { Edq, XM } },
+ { "(bad)", { Ed, XM } },
},
- /* PREGRP31 */
+
+ /* PREGRP_0F7F */
{
- { OPC_EXT_37 },
- { "movshdup", { XM, EXx } },
- { "movhpd", { XM, EXq } },
- { "(bad)", { XM, EXq } },
+ { "movq", { EM, MX } },
+ { "movdqu", { EXx, XM } },
+ { "movdqa", { EXx, XM } },
+ { "(bad)", { EXx, XM } },
},
- /* PREGRP32 */
+
+ /* PREGRP_0FB8 */
{
- { "(bad)", { XM, EXx } },
- { "(bad)", { XM, EXx } },
- { "(bad)", { XM, EXx } },
- { OPC_EXT_32 },
+ { "(bad)", { XX } },
+ { "popcntS", { Gv, Ev } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
},
- /* PREGRP33 */
+
+ /* PREGRP_0FBD */
{
- {"movntps", { Ev, XM } },
- {"movntss", { Ed, XM } },
- {"movntpd", { Ev, XM } },
- {"movntsd", { Eq, XM } },
+ { "bsrS", { Gv, Ev } },
+ { "lzcntS", { Gv, Ev } },
+ { "bsrS", { Gv, Ev } },
+ { "(bad)", { XX } },
},
- /* PREGRP34 */
+ /* PREGRP_0FC2 */
{
- {"vmread", { Em, Gm } },
- {"(bad)", { XX } },
- {"extrq", { XS, Ib, Ib } },
- {"insertq", { XM, XS, Ib, Ib } },
+ { "", { XM, EXx, OPSIMD } }, /* See OP_SIMD_SUFFIX. */
+ { "", { XM, EXd, OPSIMD } },
+ { "", { XM, EXx, OPSIMD } },
+ { "", { XM, EXq, OPSIMD } },
},
- /* PREGRP35 */
+ /* PREGRP_0FD0 */
{
- {"vmwrite", { Gm, Em } },
- {"(bad)", { XX } },
- {"extrq", { XM, XS } },
- {"insertq", { XM, XS } },
+ { "(bad)", { MX, EXx } },
+ { "(bad)", { XM, EXx } },
+ { "addsubpd", { XM, EXx } },
+ { "addsubps", { XM, EXx } },
},
- /* PREGRP36 */
+ /* PREGRP_0FD6 */
{
- { "bsrS", { Gv, Ev } },
- { "lzcntS", { Gv, Ev } },
- { "bsrS", { Gv, Ev } },
- { "(bad)", { XX } },
+ { "(bad)", { EXx, XM } },
+ { "movq2dq",{ XM, MS } },
+ { "movq", { EXq, XM } },
+ { "movdq2q",{ MX, XS } },
},
- /* PREGRP37 */
+ /* PREGRP_0FE6 */
{
- { "(bad)", { XX } },
- { "popcntS", { Gv, Ev } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XM, EXx } },
+ { "cvtdq2pd", { XM, EXq } },
+ { "cvttpd2dq", { XM, EXx } },
+ { "cvtpd2dq", { XM, EXx } },
},
- /* PREGRP38 */
+ /* PREGRP_0FE7 */
{
- { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } } },
- { "pause", { XX } },
- { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } } },
- { "(bad)", { XX } },
+ { "movntq", { EM, MX } },
+ { "(bad)", { EM, XM } },
+ { "movntdq",{ EM, XM } },
+ { "(bad)", { EM, XM } },
+ },
+
+ /* PREGRP_0FF0 */
+ {
+ { "(bad)", { XM, EXx } },
+ { "(bad)", { XM, EXx } },
+ { "(bad)", { XM, EXx } },
+ { OPC_EXT_TABLE (OPC_EXT_0FF0_PREFIX_3) },
},
- /* PREGRP39 */
+ /* PREGRP_0FF7 */
+ {
+ { "maskmovq", { MX, MS } },
+ { "(bad)", { XM, EXx } },
+ { "maskmovdqu", { XM, XS } },
+ { "(bad)", { XM, EXx } },
+ },
+
+ /* PREGRP_0F3810 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
@@ -2033,7 +2113,7 @@ static const struct dis386 prefix_user_table[][4] = {
{ "(bad)", { XX } },
},
- /* PREGRP40 */
+ /* PREGRP_0F3814 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
@@ -2041,7 +2121,7 @@ static const struct dis386 prefix_user_table[][4] = {
{ "(bad)", { XX } },
},
- /* PREGRP41 */
+ /* PREGRP_0F3815 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
@@ -2049,7 +2129,7 @@ static const struct dis386 prefix_user_table[][4] = {
{ "(bad)", { XX } },
},
- /* PREGRP42 */
+ /* PREGRP_0F3817 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
@@ -2057,7 +2137,7 @@ static const struct dis386 prefix_user_table[][4] = {
{ "(bad)", { XX } },
},
- /* PREGRP43 */
+ /* PREGRP_0F3820 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
@@ -2065,7 +2145,7 @@ static const struct dis386 prefix_user_table[][4] = {
{ "(bad)", { XX } },
},
- /* PREGRP44 */
+ /* PREGRP_0F3821 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
@@ -2073,7 +2153,7 @@ static const struct dis386 prefix_user_table[][4] = {
{ "(bad)", { XX } },
},
- /* PREGRP45 */
+ /* PREGRP_0F3822 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
@@ -2081,7 +2161,7 @@ static const struct dis386 prefix_user_table[][4] = {
{ "(bad)", { XX } },
},
- /* PREGRP46 */
+ /* PREGRP_0F3823 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
@@ -2089,7 +2169,7 @@ static const struct dis386 prefix_user_table[][4] = {
{ "(bad)", { XX } },
},
- /* PREGRP47 */
+ /* PREGRP_0F3824 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
@@ -2097,7 +2177,7 @@ static const struct dis386 prefix_user_table[][4] = {
{ "(bad)", { XX } },
},
- /* PREGRP48 */
+ /* PREGRP_0F3825 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
@@ -2105,7 +2185,7 @@ static const struct dis386 prefix_user_table[][4] = {
{ "(bad)", { XX } },
},
- /* PREGRP49 */
+ /* PREGRP_0F3828 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
@@ -2113,7 +2193,7 @@ static const struct dis386 prefix_user_table[][4] = {
{ "(bad)", { XX } },
},
- /* PREGRP50 */
+ /* PREGRP_0F3829 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
@@ -2121,7 +2201,7 @@ static const struct dis386 prefix_user_table[][4] = {
{ "(bad)", { XX } },
},
- /* PREGRP51 */
+ /* PREGRP_0F382A */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
@@ -2129,7 +2209,7 @@ static const struct dis386 prefix_user_table[][4] = {
{ "(bad)", { XX } },
},
- /* PREGRP52 */
+ /* PREGRP_0F382B */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
@@ -2137,7 +2217,7 @@ static const struct dis386 prefix_user_table[][4] = {
{ "(bad)", { XX } },
},
- /* PREGRP53 */
+ /* PREGRP_0F3830 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
@@ -2145,7 +2225,7 @@ static const struct dis386 prefix_user_table[][4] = {
{ "(bad)", { XX } },
},
- /* PREGRP54 */
+ /* PREGRP_0F3831 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
@@ -2153,7 +2233,7 @@ static const struct dis386 prefix_user_table[][4] = {
{ "(bad)", { XX } },
},
- /* PREGRP55 */
+ /* PREGRP_0F3832 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
@@ -2161,7 +2241,7 @@ static const struct dis386 prefix_user_table[][4] = {
{ "(bad)", { XX } },
},
- /* PREGRP56 */
+ /* PREGRP_0F3833 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
@@ -2169,7 +2249,7 @@ static const struct dis386 prefix_user_table[][4] = {
{ "(bad)", { XX } },
},
- /* PREGRP57 */
+ /* PREGRP_0F3834 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
@@ -2177,7 +2257,7 @@ static const struct dis386 prefix_user_table[][4] = {
{ "(bad)", { XX } },
},
- /* PREGRP58 */
+ /* PREGRP_0F3835 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
@@ -2185,7 +2265,15 @@ static const struct dis386 prefix_user_table[][4] = {
{ "(bad)", { XX } },
},
- /* PREGRP59 */
+ /* PREGRP_0F3837 */
+ {
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "pcmpgtq", { XM, EXx } },
+ { "(bad)", { XX } },
+ },
+
+ /* PREGRP_0F3838 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
@@ -2193,7 +2281,7 @@ static const struct dis386 prefix_user_table[][4] = {
{ "(bad)", { XX } },
},
- /* PREGRP60 */
+ /* PREGRP_0F3839 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
@@ -2201,7 +2289,7 @@ static const struct dis386 prefix_user_table[][4] = {
{ "(bad)", { XX } },
},
- /* PREGRP61 */
+ /* PREGRP_0F383A */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
@@ -2209,7 +2297,7 @@ static const struct dis386 prefix_user_table[][4] = {
{ "(bad)", { XX } },
},
- /* PREGRP62 */
+ /* PREGRP_0F383B */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
@@ -2217,7 +2305,7 @@ static const struct dis386 prefix_user_table[][4] = {
{ "(bad)", { XX } },
},
- /* PREGRP63 */
+ /* PREGRP_0F383C */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
@@ -2225,7 +2313,7 @@ static const struct dis386 prefix_user_table[][4] = {
{ "(bad)", { XX } },
},
- /* PREGRP64 */
+ /* PREGRP_0F383D */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
@@ -2233,7 +2321,7 @@ static const struct dis386 prefix_user_table[][4] = {
{ "(bad)", { XX } },
},
- /* PREGRP65 */
+ /* PREGRP_0F383E */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
@@ -2241,7 +2329,7 @@ static const struct dis386 prefix_user_table[][4] = {
{ "(bad)", { XX } },
},
- /* PREGRP66 */
+ /* PREGRP_0F383F */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
@@ -2249,7 +2337,7 @@ static const struct dis386 prefix_user_table[][4] = {
{ "(bad)", { XX } },
},
- /* PREGRP67 */
+ /* PREGRP_0F3840 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
@@ -2257,7 +2345,7 @@ static const struct dis386 prefix_user_table[][4] = {
{ "(bad)", { XX } },
},
- /* PREGRP68 */
+ /* PREGRP_0F3841 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
@@ -2265,7 +2353,23 @@ static const struct dis386 prefix_user_table[][4] = {
{ "(bad)", { XX } },
},
- /* PREGRP69 */
+ /* PREGRP_0F38F0 */
+ {
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "crc32", { Gdq, { CRC32_Fixup, b_mode } } },
+ },
+
+ /* PREGRP_0F38F1 */
+ {
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "crc32", { Gdq, { CRC32_Fixup, v_mode } } },
+ },
+
+ /* PREGRP_0F3A08 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
@@ -2273,7 +2377,7 @@ static const struct dis386 prefix_user_table[][4] = {
{ "(bad)", { XX } },
},
- /* PREGRP70 */
+ /* PREGRP_0F3A09 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
@@ -2281,7 +2385,7 @@ static const struct dis386 prefix_user_table[][4] = {
{ "(bad)", { XX } },
},
- /* PREGRP71 */
+ /* PREGRP_0F3A0A */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
@@ -2289,7 +2393,7 @@ static const struct dis386 prefix_user_table[][4] = {
{ "(bad)", { XX } },
},
- /* PREGRP72 */
+ /* PREGRP_0F3A0B */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
@@ -2297,7 +2401,7 @@ static const struct dis386 prefix_user_table[][4] = {
{ "(bad)", { XX } },
},
- /* PREGRP73 */
+ /* PREGRP_0F3A0C */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
@@ -2305,7 +2409,7 @@ static const struct dis386 prefix_user_table[][4] = {
{ "(bad)", { XX } },
},
- /* PREGRP74 */
+ /* PREGRP_0F3A0D */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
@@ -2313,7 +2417,7 @@ static const struct dis386 prefix_user_table[][4] = {
{ "(bad)", { XX } },
},
- /* PREGRP75 */
+ /* PREGRP_0F3A0E */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
@@ -2321,7 +2425,7 @@ static const struct dis386 prefix_user_table[][4] = {
{ "(bad)", { XX } },
},
- /* PREGRP76 */
+ /* PREGRP_0F3A14 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
@@ -2329,7 +2433,7 @@ static const struct dis386 prefix_user_table[][4] = {
{ "(bad)", { XX } },
},
- /* PREGRP77 */
+ /* PREGRP_0F3A15 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
@@ -2337,7 +2441,7 @@ static const struct dis386 prefix_user_table[][4] = {
{ "(bad)", { XX } },
},
- /* PREGRP78 */
+ /* PREGRP_0F3A16 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
@@ -2345,7 +2449,7 @@ static const struct dis386 prefix_user_table[][4] = {
{ "(bad)", { XX } },
},
- /* PREGRP79 */
+ /* PREGRP_0F3A17 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
@@ -2353,7 +2457,7 @@ static const struct dis386 prefix_user_table[][4] = {
{ "(bad)", { XX } },
},
- /* PREGRP80 */
+ /* PREGRP_0F3A20 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
@@ -2361,7 +2465,7 @@ static const struct dis386 prefix_user_table[][4] = {
{ "(bad)", { XX } },
},
- /* PREGRP81 */
+ /* PREGRP_0F3A21 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
@@ -2369,7 +2473,7 @@ static const struct dis386 prefix_user_table[][4] = {
{ "(bad)", { XX } },
},
- /* PREGRP82 */
+ /* PREGRP_0F3A22 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
@@ -2377,7 +2481,7 @@ static const struct dis386 prefix_user_table[][4] = {
{ "(bad)", { XX } },
},
- /* PREGRP83 */
+ /* PREGRP_0F3A40 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
@@ -2385,7 +2489,7 @@ static const struct dis386 prefix_user_table[][4] = {
{ "(bad)", { XX } },
},
- /* PREGRP84 */
+ /* PREGRP_0F3A41 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
@@ -2393,7 +2497,7 @@ static const struct dis386 prefix_user_table[][4] = {
{ "(bad)", { XX } },
},
- /* PREGRP85 */
+ /* PREGRP_0F3A42 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
@@ -2401,31 +2505,7 @@ static const struct dis386 prefix_user_table[][4] = {
{ "(bad)", { XX } },
},
- /* PREGRP86 */
- {
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "pcmpgtq", { XM, EXx } },
- { "(bad)", { XX } },
- },
-
- /* PREGRP87 */
- {
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "crc32", { Gdq, { CRC32_Fixup, b_mode } } },
- },
-
- /* PREGRP88 */
- {
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "crc32", { Gdq, { CRC32_Fixup, v_mode } } },
- },
-
- /* PREGRP89 */
+ /* PREGRP_0F3A60 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
@@ -2433,7 +2513,7 @@ static const struct dis386 prefix_user_table[][4] = {
{ "(bad)", { XX } },
},
- /* PREGRP90 */
+ /* PREGRP_0F3A61 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
@@ -2441,7 +2521,7 @@ static const struct dis386 prefix_user_table[][4] = {
{ "(bad)", { XX } },
},
- /* PREGRP91 */
+ /* PREGRP_0F3A62 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
@@ -2449,7 +2529,7 @@ static const struct dis386 prefix_user_table[][4] = {
{ "(bad)", { XX } },
},
- /* PREGRP92 */
+ /* PREGRP_0F3A63 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
@@ -2457,825 +2537,203 @@ static const struct dis386 prefix_user_table[][4] = {
{ "(bad)", { XX } },
},
- /* PREGRP93 */
- {
- { "ucomiss",{ XM, EXd } },
- { "(bad)", { XX } },
- { "ucomisd",{ XM, EXq } },
- { "(bad)", { XX } },
- },
-
- /* PREGRP94 */
+ /* PREGRP_0F73_REG_3 */
{
- { "comiss", { XM, EXd } },
- { "(bad)", { XX } },
- { "comisd", { XM, EXq } },
{ "(bad)", { XX } },
- },
-
- /* PREGRP95 */
- {
- { "punpcklbw",{ MX, EMd } },
{ "(bad)", { XX } },
- { "punpcklbw",{ MX, EMx } },
+ { "psrldq", { MS, Ib } },
{ "(bad)", { XX } },
},
- /* PREGRP96 */
+ /* PREGRP_0F73_REG_7 */
{
- { "punpcklwd",{ MX, EMd } },
{ "(bad)", { XX } },
- { "punpcklwd",{ MX, EMx } },
- { "(bad)", { XX } },
- },
-
- /* PREGRP97 */
- {
- { "punpckldq",{ MX, EMd } },
{ "(bad)", { XX } },
- { "punpckldq",{ MX, EMx } },
+ { "pslldq", { MS, Ib } },
{ "(bad)", { XX } },
},
- /* PREGRP98 */
+ /*PREGRP_0FC7_REG_6 */
{
{ "vmptrld",{ Mq } },
{ "vmxon", { Mq } },
{ "vmclear",{ Mq } },
{ "(bad)", { XX } },
},
-
- /* PREGRP99 */
- {
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "psrldq", { MS, Ib } },
- { "(bad)", { XX } },
- },
-
- /* PREGRP100 */
- {
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "pslldq", { MS, Ib } },
- { "(bad)", { XX } },
- },
};
static const struct dis386 x86_64_table[][2] = {
- /* X86_64_0 */
+ /* X86_64_06 */
{
- { "pusha{P|}", { XX } },
+ { "push{T|}", { es } },
{ "(bad)", { XX } },
},
- /* X86_64_1 */
+ /* X86_64_07 */
{
- { "popa{P|}", { XX } },
+ { "pop{T|}", { es } },
{ "(bad)", { XX } },
},
- /* X86_64_2 */
+ /* X86_64_0D */
{
- { OPC_EXT_33 },
+ { "push{T|}", { cs } },
{ "(bad)", { XX } },
},
- /* X86_64_3 */
+ /* X86_64_16 */
{
- { "arpl", { Ew, Gw } },
- { "movs{lq|xd}", { Gv, Ed } },
+ { "push{T|}", { ss } },
+ { "(bad)", { XX } },
},
- /* X86_64_4 */
+ /* X86_64_17 */
{
- { "push{T|}", { es } },
+ { "pop{T|}", { ss } },
{ "(bad)", { XX } },
},
- /* X86_64_5 */
+ /* X86_64_1E */
{
- { "pop{T|}", { es } },
+ { "push{T|}", { ds } },
{ "(bad)", { XX } },
},
- /* X86_64_6 */
+ /* X86_64_1F */
{
- { "push{T|}", { cs } },
+ { "pop{T|}", { ds } },
{ "(bad)", { XX } },
},
- /* X86_64_7 */
+ /* X86_64_27 */
{
- { "push{T|}", { ss } },
+ { "daa", { XX } },
{ "(bad)", { XX } },
},
- /* X86_64_8 */
+ /* X86_64_2F */
{
- { "pop{T|}", { ss } },
+ { "das", { XX } },
{ "(bad)", { XX } },
},
- /* X86_64_9 */
+ /* X86_64_37 */
{
- { "push{T|}", { ds } },
+ { "aaa", { XX } },
{ "(bad)", { XX } },
},
- /* X86_64_10 */
+ /* X86_64_3F */
{
- { "pop{T|}", { ds } },
+ { "aas", { XX } },
{ "(bad)", { XX } },
},
- /* X86_64_11 */
+ /* X86_64_60 */
{
- { "daa", { XX } },
+ { "pusha{P|}", { XX } },
{ "(bad)", { XX } },
},
- /* X86_64_12 */
+ /* X86_64_61 */
{
- { "das", { XX } },
+ { "popa{P|}", { XX } },
{ "(bad)", { XX } },
},
- /* X86_64_13 */
+ /* X86_64_62 */
{
- { "aaa", { XX } },
+ { OPC_EXT_TABLE (OPC_EXT_62_32BIT) },
{ "(bad)", { XX } },
},
- /* X86_64_14 */
+ /* X86_64_63 */
{
- { "aas", { XX } },
- { "(bad)", { XX } },
+ { "arpl", { Ew, Gw } },
+ { "movs{lq|xd}", { Gv, Ed } },
},
- /* X86_64_15 */
+ /* X86_64_6D */
{
{ "ins{R|}", { Yzr, indirDX } },
{ "ins{G|}", { Yzr, indirDX } },
},
- /* X86_64_16 */
+ /* X86_64_6F */
{
{ "outs{R|}", { indirDXr, Xz } },
{ "outs{G|}", { indirDXr, Xz } },
},
- /* X86_64_17 */
+ /* X86_64_9A */
{
{ "Jcall{T|}", { Ap } },
{ "(bad)", { XX } },
},
- /* X86_64_18 */
+ /* X86_64_C4 */
+ {
+ { OPC_EXT_TABLE (OPC_EXT_C4_32BIT) },
+ { "(bad)", { XX } },
+ },
+
+ /* X86_64_C5 */
+ {
+ { OPC_EXT_TABLE (OPC_EXT_C5_32BIT) },
+ { "(bad)", { XX } },
+ },
+
+ /* X86_64_CE */
{
{ "into", { XX } },
{ "(bad)", { XX } },
},
- /* X86_64_19 */
+ /* X86_64_D4 */
{
{ "aam", { sIb } },
{ "(bad)", { XX } },
},
- /* X86_64_20 */
+ /* X86_64_D5 */
{
{ "aad", { sIb } },
{ "(bad)", { XX } },
},
- /* X86_64_21 */
+ /* X86_64_EA */
{
{ "Jjmp{T|}", { Ap } },
{ "(bad)", { XX } },
},
- /* X86_64_22 */
+ /* X86_64_0F01_REG_0 */
{
{ "sgdt{Q|IQ}", { M } },
{ "sgdt", { M } },
},
- /* X86_64_23 */
+ /* X86_64_0F01_REG_1 */
{
{ "sidt{Q|IQ}", { M } },
{ "sidt", { M } },
},
- /* X86_64_24 */
+ /* X86_64_0F01_REG_2 */
{
{ "lgdt{Q|Q}", { M } },
{ "lgdt", { M } },
},
- /* X86_64_25 */
+ /* X86_64_0F01_REG_3 */
{
{ "lidt{Q|Q}", { M } },
{ "lidt", { M } },
},
-
- /* X86_64_26 */
- {
- { "lesS", { Gv, Mp } },
- { "(bad)", { XX } },
- },
-
- /* X86_64_27 */
- {
- { OPC_EXT_2 },
- { "(bad)", { XX } },
- },
};
static const struct dis386 three_byte_table[][256] = {
- /* THREE_BYTE_0 */
- {
- /* 00 */
- { "pshufb", { MX, EM } },
- { "phaddw", { MX, EM } },
- { "phaddd", { MX, EM } },
- { "phaddsw", { MX, EM } },
- { "pmaddubsw", { MX, EM } },
- { "phsubw", { MX, EM } },
- { "phsubd", { MX, EM } },
- { "phsubsw", { MX, EM } },
- /* 08 */
- { "psignb", { MX, EM } },
- { "psignw", { MX, EM } },
- { "psignd", { MX, EM } },
- { "pmulhrsw", { MX, EM } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- /* 10 */
- { PREGRP39 },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { PREGRP40 },
- { PREGRP41 },
- { "(bad)", { XX } },
- { PREGRP42 },
- /* 18 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "pabsb", { MX, EM } },
- { "pabsw", { MX, EM } },
- { "pabsd", { MX, EM } },
- { "(bad)", { XX } },
- /* 20 */
- { PREGRP43 },
- { PREGRP44 },
- { PREGRP45 },
- { PREGRP46 },
- { PREGRP47 },
- { PREGRP48 },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- /* 28 */
- { PREGRP49 },
- { PREGRP50 },
- { PREGRP51 },
- { PREGRP52 },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- /* 30 */
- { PREGRP53 },
- { PREGRP54 },
- { PREGRP55 },
- { PREGRP56 },
- { PREGRP57 },
- { PREGRP58 },
- { "(bad)", { XX } },
- { PREGRP86 },
- /* 38 */
- { PREGRP59 },
- { PREGRP60 },
- { PREGRP61 },
- { PREGRP62 },
- { PREGRP63 },
- { PREGRP64 },
- { PREGRP65 },
- { PREGRP66 },
- /* 40 */
- { PREGRP67 },
- { PREGRP68 },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- /* 48 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- /* 50 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- /* 58 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- /* 60 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- /* 68 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- /* 70 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- /* 78 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- /* 80 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- /* 88 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- /* 90 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- /* 98 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- /* a0 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- /* a8 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- /* b0 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- /* b8 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- /* c0 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- /* c8 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- /* d0 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- /* d8 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- /* e0 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- /* e8 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- /* f0 */
- { PREGRP87 },
- { PREGRP88 },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- /* f8 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- },
- /* THREE_BYTE_1 */
- {
- /* 00 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- /* 08 */
- { PREGRP69 },
- { PREGRP70 },
- { PREGRP71 },
- { PREGRP72 },
- { PREGRP73 },
- { PREGRP74 },
- { PREGRP75 },
- { "palignr", { MX, EM, Ib } },
- /* 10 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { PREGRP76 },
- { PREGRP77 },
- { PREGRP78 },
- { PREGRP79 },
- /* 18 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- /* 20 */
- { PREGRP80 },
- { PREGRP81 },
- { PREGRP82 },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- /* 28 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- /* 30 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- /* 38 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- /* 40 */
- { PREGRP83 },
- { PREGRP84 },
- { PREGRP85 },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- /* 48 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- /* 50 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- /* 58 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- /* 60 */
- { PREGRP89 },
- { PREGRP90 },
- { PREGRP91 },
- { PREGRP92 },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- /* 68 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- /* 70 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- /* 78 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- /* 80 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- /* 88 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- /* 90 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- /* 98 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- /* a0 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- /* a8 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- /* b0 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- /* b8 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- /* c0 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- /* c8 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- /* d0 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- /* d8 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- /* e0 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- /* e8 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- /* f0 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- /* f8 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- },
- /* THREE_BYTE_SSE5_0F24 */
+ /* THREE_BYTE_0F24 */
{
/* 00 */
{ "fmaddps", { { OP_DREX4, q_mode } } },
@@ -3566,7 +3024,7 @@ static const struct dis386 three_byte_table[][256] = {
{ "(bad)", { XX } },
{ "(bad)", { XX } },
},
- /* THREE_BYTE_SSE5_0F25 */
+ /* THREE_BYTE_0F25 */
{
/* 00 */
{ "(bad)", { XX } },
@@ -3857,6 +3315,588 @@ static const struct dis386 three_byte_table[][256] = {
{ "(bad)", { XX } },
{ "(bad)", { XX } },
},
+ /* THREE_BYTE_0F38 */
+ {
+ /* 00 */
+ { "pshufb", { MX, EM } },
+ { "phaddw", { MX, EM } },
+ { "phaddd", { MX, EM } },
+ { "phaddsw", { MX, EM } },
+ { "pmaddubsw", { MX, EM } },
+ { "phsubw", { MX, EM } },
+ { "phsubd", { MX, EM } },
+ { "phsubsw", { MX, EM } },
+ /* 08 */
+ { "psignb", { MX, EM } },
+ { "psignw", { MX, EM } },
+ { "psignd", { MX, EM } },
+ { "pmulhrsw", { MX, EM } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* 10 */
+ { PREGRP (PREGRP_0F3810) },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { PREGRP (PREGRP_0F3814) },
+ { PREGRP (PREGRP_0F3815) },
+ { "(bad)", { XX } },
+ { PREGRP (PREGRP_0F3817) },
+ /* 18 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "pabsb", { MX, EM } },
+ { "pabsw", { MX, EM } },
+ { "pabsd", { MX, EM } },
+ { "(bad)", { XX } },
+ /* 20 */
+ { PREGRP (PREGRP_0F3820) },
+ { PREGRP (PREGRP_0F3821) },
+ { PREGRP (PREGRP_0F3822) },
+ { PREGRP (PREGRP_0F3823) },
+ { PREGRP (PREGRP_0F3824) },
+ { PREGRP (PREGRP_0F3825) },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* 28 */
+ { PREGRP (PREGRP_0F3828) },
+ { PREGRP (PREGRP_0F3829) },
+ { PREGRP (PREGRP_0F382A) },
+ { PREGRP (PREGRP_0F382B) },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* 30 */
+ { PREGRP (PREGRP_0F3830) },
+ { PREGRP (PREGRP_0F3831) },
+ { PREGRP (PREGRP_0F3832) },
+ { PREGRP (PREGRP_0F3833) },
+ { PREGRP (PREGRP_0F3834) },
+ { PREGRP (PREGRP_0F3835) },
+ { "(bad)", { XX } },
+ { PREGRP (PREGRP_0F3837) },
+ /* 38 */
+ { PREGRP (PREGRP_0F3838) },
+ { PREGRP (PREGRP_0F3839) },
+ { PREGRP (PREGRP_0F383A) },
+ { PREGRP (PREGRP_0F383B) },
+ { PREGRP (PREGRP_0F383C) },
+ { PREGRP (PREGRP_0F383D) },
+ { PREGRP (PREGRP_0F383E) },
+ { PREGRP (PREGRP_0F383F) },
+ /* 40 */
+ { PREGRP (PREGRP_0F3840) },
+ { PREGRP (PREGRP_0F3841) },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* 48 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* 50 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* 58 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* 60 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* 68 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* 70 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* 78 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* 80 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* 88 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* 90 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* 98 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* a0 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* a8 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* b0 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* b8 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* c0 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* c8 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* d0 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* d8 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* e0 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* e8 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* f0 */
+ { PREGRP (PREGRP_0F38F0) },
+ { PREGRP (PREGRP_0F38F1) },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* f8 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ },
+ /* THREE_BYTE_0F3A */
+ {
+ /* 00 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* 08 */
+ { PREGRP (PREGRP_0F3A08) },
+ { PREGRP (PREGRP_0F3A09) },
+ { PREGRP (PREGRP_0F3A0A) },
+ { PREGRP (PREGRP_0F3A0B) },
+ { PREGRP (PREGRP_0F3A0C) },
+ { PREGRP (PREGRP_0F3A0D) },
+ { PREGRP (PREGRP_0F3A0E) },
+ { "palignr", { MX, EM, Ib } },
+ /* 10 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { PREGRP (PREGRP_0F3A14) },
+ { PREGRP (PREGRP_0F3A15) },
+ { PREGRP (PREGRP_0F3A16) },
+ { PREGRP (PREGRP_0F3A17) },
+ /* 18 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* 20 */
+ { PREGRP (PREGRP_0F3A20) },
+ { PREGRP (PREGRP_0F3A21) },
+ { PREGRP (PREGRP_0F3A22) },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* 28 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* 30 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* 38 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* 40 */
+ { PREGRP (PREGRP_0F3A40) },
+ { PREGRP (PREGRP_0F3A41) },
+ { PREGRP (PREGRP_0F3A42) },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* 48 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* 50 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* 58 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* 60 */
+ { PREGRP (PREGRP_0F3A60) },
+ { PREGRP (PREGRP_0F3A61) },
+ { PREGRP (PREGRP_0F3A62) },
+ { PREGRP (PREGRP_0F3A63) },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* 68 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* 70 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* 78 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* 80 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* 88 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* 90 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* 98 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* a0 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* a8 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* b0 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* b8 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* c0 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* c8 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* d0 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* d8 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* e0 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* e8 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* f0 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* f8 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ },
/* THREE_BYTE_SSE5_0F7A */
{
/* 00 */
@@ -4443,240 +4483,240 @@ static const struct dis386 three_byte_table[][256] = {
static const struct dis386 opc_ext_table[][2] = {
{
- /* OPC_EXT_0 */
+ /* OPC_EXT_8D */
{ "leaS", { Gv, M } },
{ "(bad)", { XX } },
},
{
- /* OPC_EXT_1 */
- { X86_64_26 },
+ /* OPC_EXT_0F13 */
+ { "movlpX", { EXq, XM } },
{ "(bad)", { XX } },
},
{
- /* OPC_EXT_2 */
- { "ldsS", { Gv, Mp } },
+ /* OPC_EXT_0F17 */
+ { "movhpX", { EXq, XM } },
{ "(bad)", { XX } },
},
{
- /* OPC_EXT_3 */
- { "lssS", { Gv, Mp } },
+ /* OPC_EXT_0F20 */
{ "(bad)", { XX } },
+ { "movZ", { Rm, Cm } },
},
{
- /* OPC_EXT_4 */
- { "lfsS", { Gv, Mp } },
+ /* OPC_EXT_0F21 */
{ "(bad)", { XX } },
+ { "movZ", { Rm, Dm } },
},
{
- /* OPC_EXT_5 */
- { "lgsS", { Gv, Mp } },
+ /* OPC_EXT_0F22 */
{ "(bad)", { XX } },
+ { "movZ", { Cm, Rm } },
},
{
- /* OPC_EXT_6 */
- { X86_64_22 },
- { OPC_EXT_RM_0 },
+ /* OPC_EXT_0F23 */
+ { "(bad)", { XX } },
+ { "movZ", { Dm, Rm } },
},
{
- /* OPC_EXT_7 */
- { X86_64_23 },
- { OPC_EXT_RM_1 },
+ /* OPC_EXT_0F24 */
+ { THREE_BYTE_TABLE (THREE_BYTE_0F24) },
+ { "movL", { Rd, Td } },
},
{
- /* OPC_EXT_8 */
- { X86_64_24 },
+ /* OPC_EXT_0F26 */
{ "(bad)", { XX } },
+ { "movL", { Td, Rd } },
},
{
- /* OPC_EXT_9 */
- { PREGRP98 },
+ /* OPC_EXT_0FB2 */
+ { "lssS", { Gv, Mp } },
{ "(bad)", { XX } },
},
{
- /* OPC_EXT_10 */
- { "vmptrst", { Mq } },
+ /* OPC_EXT_0FB4 */
+ { "lfsS", { Gv, Mp } },
{ "(bad)", { XX } },
},
{
- /* OPC_EXT_11 */
+ /* OPC_EXT_0FB5 */
+ { "lgsS", { Gv, Mp } },
{ "(bad)", { XX } },
- { "psrlw", { MS, Ib } },
},
{
- /* OPC_EXT_12 */
- { "(bad)", { XX } },
- { "psraw", { MS, Ib } },
+ /* OPC_EXT_0F01_REG_0 */
+ { X86_64_TABLE (X86_64_0F01_REG_0) },
+ { OPC_EXT_RM_TABLE (OPC_EXT_RM_0F01_REG_0) },
},
{
- /* OPC_EXT_13 */
- { "(bad)", { XX } },
- { "psllw", { MS, Ib } },
+ /* OPC_EXT_0F01_REG_1 */
+ { X86_64_TABLE (X86_64_0F01_REG_1) },
+ { OPC_EXT_RM_TABLE (OPC_EXT_RM_0F01_REG_1) },
},
{
- /* OPC_EXT_14 */
+ /* OPC_EXT_0F01_REG_2 */
+ { X86_64_TABLE (X86_64_0F01_REG_2) },
{ "(bad)", { XX } },
- { "psrld", { MS, Ib } },
},
{
- /* OPC_EXT_15 */
- { "(bad)", { XX } },
- { "psrad", { MS, Ib } },
+ /* OPC_EXT_0F01_REG_3 */
+ { X86_64_TABLE (X86_64_0F01_REG_3) },
+ { OPC_EXT_RM_TABLE (OPC_EXT_RM_0F01_REG_3) },
},
{
- /* OPC_EXT_16 */
- { "(bad)", { XX } },
- { "pslld", { MS, Ib } },
+ /* OPC_EXT_0F01_REG_7 */
+ { "invlpg", { Mb } },
+ { OPC_EXT_RM_TABLE (OPC_EXT_RM_0F01_REG_7) },
},
{
- /* OPC_EXT_17 */
+ /* OPC_EXT_0F18_REG_0 */
+ { "prefetchnta", { Mb } },
{ "(bad)", { XX } },
- { "psrlq", { MS, Ib } },
},
{
- /* OPC_EXT_18 */
+ /* OPC_EXT_0F18_REG_1 */
+ { "prefetcht0", { Mb } },
{ "(bad)", { XX } },
- { PREGRP99 },
},
{
- /* OPC_EXT_19 */
+ /* OPC_EXT_0F18_REG_2 */
+ { "prefetcht1", { Mb } },
{ "(bad)", { XX } },
- { "psllq", { MS, Ib } },
},
{
- /* OPC_EXT_20 */
+ /* OPC_EXT_0F18_REG_3 */
+ { "prefetcht2", { Mb } },
{ "(bad)", { XX } },
- { PREGRP100 },
},
{
- /* OPC_EXT_21 */
- { "fxsave", { M } },
+ /* OPC_EXT_0F71_REG_2 */
{ "(bad)", { XX } },
+ { "psrlw", { MS, Ib } },
},
{
- /* OPC_EXT_22 */
- { "fxrstor", { M } },
+ /* OPC_EXT_0F71_REG_4 */
{ "(bad)", { XX } },
+ { "psraw", { MS, Ib } },
},
{
- /* OPC_EXT_23 */
- { "ldmxcsr", { Md } },
+ /* OPC_EXT_0F71_REG_6 */
{ "(bad)", { XX } },
+ { "psllw", { MS, Ib } },
},
{
- /* OPC_EXT_24 */
- { "stmxcsr", { Md } },
+ /* OPC_EXT_0F72_REG_2 */
{ "(bad)", { XX } },
+ { "psrld", { MS, Ib } },
},
{
- /* OPC_EXT_25 */
+ /* OPC_EXT_0F72_REG_4 */
{ "(bad)", { XX } },
- { OPC_EXT_RM_2 },
+ { "psrad", { MS, Ib } },
},
{
- /* OPC_EXT_26 */
+ /* OPC_EXT_0F72_REG_6 */
{ "(bad)", { XX } },
- { OPC_EXT_RM_3 },
+ { "pslld", { MS, Ib } },
},
{
- /* OPC_EXT_27 */
- { "clflush", { Mb } },
- { OPC_EXT_RM_4 },
+ /* OPC_EXT_0F73_REG_2 */
+ { "(bad)", { XX } },
+ { "psrlq", { MS, Ib } },
},
{
- /* OPC_EXT_28 */
- { "prefetchnta", { Mb } },
+ /* OPC_EXT_0F73_REG_3 */
{ "(bad)", { XX } },
+ { PREGRP (PREGRP_0F73_REG_3) },
},
{
- /* OPC_EXT_29 */
- { "prefetcht0", { Mb } },
+ /* OPC_EXT_0F73_REG_6 */
{ "(bad)", { XX } },
+ { "psllq", { MS, Ib } },
},
{
- /* OPC_EXT_30 */
- { "prefetcht1", { Mb } },
+ /* OPC_EXT_0F73_REG_7 */
{ "(bad)", { XX } },
+ { PREGRP (PREGRP_0F73_REG_7) },
},
{
- /* OPC_EXT_31 */
- { "prefetcht2", { Mb } },
+ /* OPC_EXT_0FAE_REG_0 */
+ { "fxsave", { M } },
{ "(bad)", { XX } },
},
{
- /* OPC_EXT_32 */
- { "lddqu", { XM, M } },
+ /* OPC_EXT_0FAE_REG_1 */
+ { "fxrstor", { M } },
{ "(bad)", { XX } },
},
{
- /* OPC_EXT_33 */
- { "bound{S|}", { Gv, Ma } },
+ /* OPC_EXT_0FAE_REG_2 */
+ { "ldmxcsr", { Md } },
{ "(bad)", { XX } },
},
{
- /* OPC_EXT_34 */
- { "movlpX", { EXq, XM } },
+ /* OPC_EXT_0FAE_REG_3 */
+ { "stmxcsr", { Md } },
{ "(bad)", { XX } },
},
{
- /* OPC_EXT_35 */
- { "movhpX", { EXq, XM } },
+ /* OPC_EXT_0FAE_REG_5 */
{ "(bad)", { XX } },
+ { OPC_EXT_RM_TABLE (OPC_EXT_RM_0FAE_REG_5) },
},
{
- /* OPC_EXT_36 */
- { "movlpX", { XM, EXq } },
- { "movhlpX", { XM, EXq } },
+ /* OPC_EXT_0FAE_REG_6 */
+ { "(bad)", { XX } },
+ { OPC_EXT_RM_TABLE (OPC_EXT_RM_0FAE_REG_6) },
},
{
- /* OPC_EXT_37 */
- { "movhpX", { XM, EXq } },
- { "movlhpX", { XM, EXq } },
+ /* OPC_EXT_0FAE_REG_7 */
+ { "clflush", { Mb } },
+ { OPC_EXT_RM_TABLE (OPC_EXT_RM_0FAE_REG_7) },
},
{
- /* OPC_EXT_38 */
- { "invlpg", { Mb } },
- { OPC_EXT_RM_5 },
+ /* OPC_EXT_0FC7_REG_6 */
+ { PREGRP (PREGRP_0FC7_REG_6) },
+ { "(bad)", { XX } },
},
{
- /* OPC_EXT_39 */
- { X86_64_25 },
- { OPC_EXT_RM_6 },
+ /* OPC_EXT_0FC7_REG_7 */
+ { "vmptrst", { Mq } },
+ { "(bad)", { XX } },
},
{
- /* OPC_EXT_40 */
- { "(bad)", { XX } },
- { "movZ", { Rm, Cm } },
+ /* OPC_EXT_0F12_PREFIX_0 */
+ { "movlpX", { XM, EXq } },
+ { "movhlpX", { XM, EXq } },
},
{
- /* OPC_EXT_41 */
- { "(bad)", { XX } },
- { "movZ", { Rm, Dm } },
+ /* OPC_EXT_0F16_PREFIX_0 */
+ { "movhpX", { XM, EXq } },
+ { "movlhpX", { XM, EXq } },
},
{
- /* OPC_EXT_42 */
+ /* OPC_EXT_0FF0_PREFIX_3 */
+ { "lddqu", { XM, M } },
{ "(bad)", { XX } },
- { "movZ", { Cm, Rm } },
},
{
- /* OPC_EXT_43 */
+ /* OPC_EXT_62_32BIT */
+ { "bound{S|}", { Gv, Ma } },
{ "(bad)", { XX } },
- { "movZ", { Dm, Rm } },
},
{
- /* OPC_EXT_44 */
- { THREE_BYTE_SSE5_0F24 },
- { "movL", { Rd, Td } },
+ /* OPC_EXT_C4_32BIT */
+ { "lesS", { Gv, Mp } },
+ { "(bad)", { XX } },
},
{
- /* OPC_EXT_45 */
+ /* OPC_EXT_C5_32BIT */
+ { "ldsS", { Gv, Mp } },
{ "(bad)", { XX } },
- { "movL", { Td, Rd } },
},
};
static const struct dis386 opc_ext_rm_table[][8] = {
{
- /* OPC_EXT_RM_0 */
+ /* OPC_EXT_RM_0F01_REG_0 */
{ "(bad)", { XX } },
{ "vmcall", { Skip_MODRM } },
{ "vmlaunch", { Skip_MODRM } },
@@ -4687,7 +4727,7 @@ static const struct dis386 opc_ext_rm_table[][8] = {
{ "(bad)", { XX } },
},
{
- /* OPC_EXT_RM_1 */
+ /* OPC_EXT_RM_0F01_REG_1 */
{ "monitor", { { OP_Monitor, 0 } } },
{ "mwait", { { OP_Mwait, 0 } } },
{ "(bad)", { XX } },
@@ -4698,9 +4738,20 @@ static const struct dis386 opc_ext_rm_table[][8] = {
{ "(bad)", { XX } },
},
{
- /* OPC_EXT_RM_2 */
- { "lfence", { Skip_MODRM } },
- { "(bad)", { XX } },
+ /* OPC_EXT_RM_0F01_REG_3 */
+ { "vmrun", { Skip_MODRM } },
+ { "vmmcall", { Skip_MODRM } },
+ { "vmload", { Skip_MODRM } },
+ { "vmsave", { Skip_MODRM } },
+ { "stgi", { Skip_MODRM } },
+ { "clgi", { Skip_MODRM } },
+ { "skinit", { Skip_MODRM } },
+ { "invlpga", { Skip_MODRM } },
+ },
+ {
+ /* OPC_EXT_RM_0F01_REG_7 */
+ { "swapgs", { Skip_MODRM } },
+ { "rdtscp", { Skip_MODRM } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
@@ -4709,8 +4760,8 @@ static const struct dis386 opc_ext_rm_table[][8] = {
{ "(bad)", { XX } },
},
{
- /* OPC_EXT_RM_3 */
- { "mfence", { Skip_MODRM } },
+ /* OPC_EXT_RM_0FAE_REG_5 */
+ { "lfence", { Skip_MODRM } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
@@ -4720,8 +4771,8 @@ static const struct dis386 opc_ext_rm_table[][8] = {
{ "(bad)", { XX } },
},
{
- /* OPC_EXT_RM_4 */
- { "sfence", { Skip_MODRM } },
+ /* OPC_EXT_RM_0FAE_REG_6 */
+ { "mfence", { Skip_MODRM } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
@@ -4731,26 +4782,15 @@ static const struct dis386 opc_ext_rm_table[][8] = {
{ "(bad)", { XX } },
},
{
- /* OPC_EXT_RM_5 */
- { "swapgs", { Skip_MODRM } },
- { "rdtscp", { Skip_MODRM } },
+ /* OPC_EXT_RM_0FAE_REG_7 */
+ { "sfence", { Skip_MODRM } },
+ { "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
- },
- {
- /* OPC_EXT_RM_6 */
- { "vmrun", { Skip_MODRM } },
- { "vmmcall", { Skip_MODRM } },
- { "vmload", { Skip_MODRM } },
- { "vmsave", { Skip_MODRM } },
- { "stgi", { Skip_MODRM } },
- { "clgi", { Skip_MODRM } },
- { "skinit", { Skip_MODRM } },
- { "invlpga", { Skip_MODRM } },
},
};
@@ -5014,7 +5054,7 @@ get_valid_dis386 (const struct dis386 *dp, disassemble_info *info)
dp = &grps[dp->op[1].bytemode][modrm.reg];
break;
- case USE_PREFIX_USER_TABLE:
+ case USE_PREFIX_TABLE:
index = 0;
used_prefixes |= (prefixes & PREFIX_REPZ);
if (prefixes & PREFIX_REPZ)
@@ -5045,12 +5085,12 @@ get_valid_dis386 (const struct dis386 *dp, disassemble_info *info)
dp = &prefix_user_table[dp->op[1].bytemode][index];
break;
- case X86_64_SPECIAL:
+ case USE_X86_64_TABLE:
index = address_mode == mode_64bit ? 1 : 0;
dp = &x86_64_table[dp->op[1].bytemode][index];
break;
- case IS_3BYTE_OPCODE:
+ case USE_3BYTE_TABLE:
FETCH_DATA (info, codep + 2);
index = *codep++;
dp = &three_byte_table[dp->op[1].bytemode][index];
OpenPOWER on IntegriCloud