From 4e7d34a6c292d5b9259fdd1f913aea0be83b8bae Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Fri, 28 Sep 2007 20:50:59 +0000 Subject: [PATCH] 2007-09-28 H.J. Lu * 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. --- opcodes/ChangeLog | 37 + opcodes/i386-dis.c | 3812 ++++++++++++++++++++++---------------------- 2 files changed, 1963 insertions(+), 1886 deletions(-) diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog index 1a7e1ac891d..13bd099d9b7 100644 --- a/opcodes/ChangeLog +++ b/opcodes/ChangeLog @@ -1,3 +1,40 @@ +2007-09-28 H.J. Lu + + * 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 * 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 9ae35dc0af5..836cdf21efe 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) }, + }, + + /* PREGRP_0FF7 */ + { + { "maskmovq", { MX, MS } }, + { "(bad)", { XM, EXx } }, + { "maskmovdqu", { XM, XS } }, + { "(bad)", { XM, EXx } }, }, - /* PREGRP39 */ + /* 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,871 +2505,1017 @@ static const struct dis386 prefix_user_table[][4] = { { "(bad)", { XX } }, }, - /* PREGRP86 */ + /* PREGRP_0F3A60 */ { { "(bad)", { XX } }, { "(bad)", { XX } }, - { "pcmpgtq", { XM, EXx } }, + { "pcmpestrm", { XM, EXx, Ib } }, { "(bad)", { XX } }, }, - /* PREGRP87 */ + /* PREGRP_0F3A61 */ { { "(bad)", { XX } }, { "(bad)", { XX } }, + { "pcmpestri", { XM, EXx, Ib } }, { "(bad)", { XX } }, - { "crc32", { Gdq, { CRC32_Fixup, b_mode } } }, }, - /* PREGRP88 */ + /* PREGRP_0F3A62 */ { { "(bad)", { XX } }, { "(bad)", { XX } }, + { "pcmpistrm", { XM, EXx, Ib } }, { "(bad)", { XX } }, - { "crc32", { Gdq, { CRC32_Fixup, v_mode } } }, }, - /* PREGRP89 */ + /* PREGRP_0F3A63 */ { { "(bad)", { XX } }, { "(bad)", { XX } }, - { "pcmpestrm", { XM, EXx, Ib } }, + { "pcmpistri", { XM, EXx, Ib } }, { "(bad)", { XX } }, }, - /* PREGRP90 */ + /* PREGRP_0F73_REG_3 */ { { "(bad)", { XX } }, { "(bad)", { XX } }, - { "pcmpestri", { XM, EXx, Ib } }, + { "psrldq", { MS, Ib } }, { "(bad)", { XX } }, }, - /* PREGRP91 */ + /* PREGRP_0F73_REG_7 */ { { "(bad)", { XX } }, { "(bad)", { XX } }, - { "pcmpistrm", { XM, EXx, Ib } }, + { "pslldq", { MS, Ib } }, { "(bad)", { XX } }, }, - /* PREGRP92 */ + /*PREGRP_0FC7_REG_6 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "pcmpistri", { XM, EXx, Ib } }, + { "vmptrld",{ Mq } }, + { "vmxon", { Mq } }, + { "vmclear",{ Mq } }, { "(bad)", { XX } }, }, +}; - /* PREGRP93 */ +static const struct dis386 x86_64_table[][2] = { + /* X86_64_06 */ { - { "ucomiss",{ XM, EXd } }, - { "(bad)", { XX } }, - { "ucomisd",{ XM, EXq } }, - { "(bad)", { XX } }, + { "push{T|}", { es } }, + { "(bad)", { XX } }, }, - /* PREGRP94 */ + /* X86_64_07 */ { - { "comiss", { XM, EXd } }, - { "(bad)", { XX } }, - { "comisd", { XM, EXq } }, - { "(bad)", { XX } }, + { "pop{T|}", { es } }, + { "(bad)", { XX } }, }, - /* PREGRP95 */ + /* X86_64_0D */ { - { "punpcklbw",{ MX, EMd } }, - { "(bad)", { XX } }, - { "punpcklbw",{ MX, EMx } }, - { "(bad)", { XX } }, + { "push{T|}", { cs } }, + { "(bad)", { XX } }, }, - /* PREGRP96 */ + /* X86_64_16 */ { - { "punpcklwd",{ MX, EMd } }, - { "(bad)", { XX } }, - { "punpcklwd",{ MX, EMx } }, - { "(bad)", { XX } }, + { "push{T|}", { ss } }, + { "(bad)", { XX } }, }, - /* PREGRP97 */ + /* X86_64_17 */ { - { "punpckldq",{ MX, EMd } }, - { "(bad)", { XX } }, - { "punpckldq",{ MX, EMx } }, - { "(bad)", { XX } }, - }, - - /* PREGRP98 */ - { - { "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 */ - { - { "pusha{P|}", { XX } }, + { "pop{T|}", { ss } }, { "(bad)", { XX } }, }, - /* X86_64_1 */ + /* X86_64_1E */ { - { "popa{P|}", { XX } }, + { "push{T|}", { ds } }, { "(bad)", { XX } }, }, - /* X86_64_2 */ + /* X86_64_1F */ { - { OPC_EXT_33 }, + { "pop{T|}", { ds } }, { "(bad)", { XX } }, }, - /* X86_64_3 */ - { - { "arpl", { Ew, Gw } }, - { "movs{lq|xd}", { Gv, Ed } }, - }, - - /* X86_64_4 */ + /* X86_64_27 */ { - { "push{T|}", { es } }, + { "daa", { XX } }, { "(bad)", { XX } }, }, - /* X86_64_5 */ + /* X86_64_2F */ { - { "pop{T|}", { es } }, + { "das", { XX } }, { "(bad)", { XX } }, }, - /* X86_64_6 */ + /* X86_64_37 */ { - { "push{T|}", { cs } }, + { "aaa", { XX } }, { "(bad)", { XX } }, }, - /* X86_64_7 */ + /* X86_64_3F */ { - { "push{T|}", { ss } }, + { "aas", { XX } }, { "(bad)", { XX } }, }, - /* X86_64_8 */ + /* X86_64_60 */ { - { "pop{T|}", { ss } }, + { "pusha{P|}", { XX } }, { "(bad)", { XX } }, }, - /* X86_64_9 */ + /* X86_64_61 */ { - { "push{T|}", { ds } }, + { "popa{P|}", { XX } }, { "(bad)", { XX } }, }, - /* X86_64_10 */ + /* X86_64_62 */ { - { "pop{T|}", { ds } }, + { OPC_EXT_TABLE (OPC_EXT_62_32BIT) }, { "(bad)", { XX } }, }, - /* X86_64_11 */ + /* X86_64_63 */ { - { "daa", { XX } }, - { "(bad)", { XX } }, + { "arpl", { Ew, Gw } }, + { "movs{lq|xd}", { Gv, Ed } }, }, - /* X86_64_12 */ + /* X86_64_6D */ { - { "das", { XX } }, - { "(bad)", { XX } }, + { "ins{R|}", { Yzr, indirDX } }, + { "ins{G|}", { Yzr, indirDX } }, }, - /* X86_64_13 */ + /* X86_64_6F */ { - { "aaa", { XX } }, - { "(bad)", { XX } }, + { "outs{R|}", { indirDXr, Xz } }, + { "outs{G|}", { indirDXr, Xz } }, }, - /* X86_64_14 */ + /* X86_64_9A */ { - { "aas", { XX } }, + { "Jcall{T|}", { Ap } }, { "(bad)", { XX } }, }, - /* X86_64_15 */ - { - { "ins{R|}", { Yzr, indirDX } }, - { "ins{G|}", { Yzr, indirDX } }, - }, - - /* X86_64_16 */ + /* X86_64_C4 */ { - { "outs{R|}", { indirDXr, Xz } }, - { "outs{G|}", { indirDXr, Xz } }, + { OPC_EXT_TABLE (OPC_EXT_C4_32BIT) }, + { "(bad)", { XX } }, }, - /* X86_64_17 */ + /* X86_64_C5 */ { - { "Jcall{T|}", { Ap } }, + { OPC_EXT_TABLE (OPC_EXT_C5_32BIT) }, { "(bad)", { XX } }, }, - /* X86_64_18 */ + /* 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 */ + /* THREE_BYTE_0F24 */ { /* 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 } }, + { "fmaddps", { { OP_DREX4, q_mode } } }, + { "fmaddpd", { { OP_DREX4, q_mode } } }, + { "fmaddss", { { OP_DREX4, w_mode } } }, + { "fmaddsd", { { OP_DREX4, d_mode } } }, + { "fmaddps", { { OP_DREX4, DREX_OC1 + q_mode } } }, + { "fmaddpd", { { OP_DREX4, DREX_OC1 + q_mode } } }, + { "fmaddss", { { OP_DREX4, DREX_OC1 + w_mode } } }, + { "fmaddsd", { { OP_DREX4, DREX_OC1 + d_mode } } }, /* 08 */ - { "psignb", { MX, EM } }, - { "psignw", { MX, EM } }, - { "psignd", { MX, EM } }, - { "pmulhrsw", { MX, EM } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { "fmsubps", { { OP_DREX4, q_mode } } }, + { "fmsubpd", { { OP_DREX4, q_mode } } }, + { "fmsubss", { { OP_DREX4, w_mode } } }, + { "fmsubsd", { { OP_DREX4, d_mode } } }, + { "fmsubps", { { OP_DREX4, DREX_OC1 + q_mode } } }, + { "fmsubpd", { { OP_DREX4, DREX_OC1 + q_mode } } }, + { "fmsubss", { { OP_DREX4, DREX_OC1 + w_mode } } }, + { "fmsubsd", { { OP_DREX4, DREX_OC1 + d_mode } } }, /* 10 */ - { PREGRP39 }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { PREGRP40 }, - { PREGRP41 }, - { "(bad)", { XX } }, - { PREGRP42 }, + { "fnmaddps", { { OP_DREX4, q_mode } } }, + { "fnmaddpd", { { OP_DREX4, q_mode } } }, + { "fnmaddss", { { OP_DREX4, w_mode } } }, + { "fnmaddsd", { { OP_DREX4, d_mode } } }, + { "fnmaddps", { { OP_DREX4, DREX_OC1 + q_mode } } }, + { "fnmaddpd", { { OP_DREX4, DREX_OC1 + q_mode } } }, + { "fnmaddss", { { OP_DREX4, DREX_OC1 + w_mode } } }, + { "fnmaddsd", { { OP_DREX4, DREX_OC1 + d_mode } } }, /* 18 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "pabsb", { MX, EM } }, - { "pabsw", { MX, EM } }, - { "pabsd", { MX, EM } }, - { "(bad)", { XX } }, + { "fnmsubps", { { OP_DREX4, q_mode } } }, + { "fnmsubpd", { { OP_DREX4, q_mode } } }, + { "fnmsubss", { { OP_DREX4, w_mode } } }, + { "fnmsubsd", { { OP_DREX4, d_mode } } }, + { "fnmsubps", { { OP_DREX4, DREX_OC1 + q_mode } } }, + { "fnmsubpd", { { OP_DREX4, DREX_OC1 + q_mode } } }, + { "fnmsubss", { { OP_DREX4, DREX_OC1 + w_mode } } }, + { "fnmsubsd", { { OP_DREX4, DREX_OC1 + d_mode } } }, /* 20 */ - { PREGRP43 }, - { PREGRP44 }, - { PREGRP45 }, - { PREGRP46 }, - { PREGRP47 }, - { PREGRP48 }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { "permps", { { OP_DREX4, q_mode } } }, + { "permpd", { { OP_DREX4, q_mode } } }, + { "pcmov", { { OP_DREX4, q_mode } } }, + { "pperm", { { OP_DREX4, q_mode } } }, + { "permps", { { OP_DREX4, DREX_OC1 + q_mode } } }, + { "permpd", { { OP_DREX4, DREX_OC1 + q_mode } } }, + { "pcmov", { { OP_DREX4, DREX_OC1 + w_mode } } }, + { "pperm", { { OP_DREX4, DREX_OC1 + d_mode } } }, /* 28 */ - { PREGRP49 }, - { PREGRP50 }, - { PREGRP51 }, - { PREGRP52 }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, /* 30 */ - { PREGRP53 }, - { PREGRP54 }, - { PREGRP55 }, - { PREGRP56 }, - { PREGRP57 }, - { PREGRP58 }, - { "(bad)", { XX } }, - { PREGRP86 }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, /* 38 */ - { PREGRP59 }, - { PREGRP60 }, - { PREGRP61 }, - { PREGRP62 }, - { PREGRP63 }, - { PREGRP64 }, - { PREGRP65 }, - { PREGRP66 }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, /* 40 */ - { PREGRP67 }, - { PREGRP68 }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { "protb", { { OP_DREX3, q_mode } } }, + { "protw", { { OP_DREX3, q_mode } } }, + { "protd", { { OP_DREX3, q_mode } } }, + { "protq", { { OP_DREX3, q_mode } } }, + { "pshlb", { { OP_DREX3, q_mode } } }, + { "pshlw", { { OP_DREX3, q_mode } } }, + { "pshld", { { OP_DREX3, q_mode } } }, + { "pshlq", { { OP_DREX3, q_mode } } }, /* 48 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { "pshab", { { OP_DREX3, q_mode } } }, + { "pshaw", { { OP_DREX3, q_mode } } }, + { "pshad", { { OP_DREX3, q_mode } } }, + { "pshaq", { { OP_DREX3, q_mode } } }, + { "(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 } }, + { "(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 } }, + { "(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 } }, + { "(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 } }, + { "(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 } }, + { "(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 } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "pmacssww", { { OP_DREX4, DREX_OC1 + DREX_NO_OC0 + q_mode } } }, + { "pmacsswd", { { OP_DREX4, DREX_OC1 + DREX_NO_OC0 + q_mode } } }, + { "pmacssdql", { { OP_DREX4, DREX_OC1 + DREX_NO_OC0 + q_mode } } }, /* 88 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "pmacssdd", { { OP_DREX4, DREX_OC1 + DREX_NO_OC0 + q_mode } } }, + { "pmacssdqh", { { OP_DREX4, DREX_OC1 + DREX_NO_OC0 + q_mode } } }, /* 90 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "pmacsww", { { OP_DREX4, DREX_OC1 + DREX_NO_OC0 + q_mode } } }, + { "pmacswd", { { OP_DREX4, DREX_OC1 + DREX_NO_OC0 + q_mode } } }, + { "pmacsdql", { { OP_DREX4, DREX_OC1 + DREX_NO_OC0 + q_mode } } }, /* 98 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "pmacsdd", { { OP_DREX4, DREX_OC1 + DREX_NO_OC0 + q_mode } } }, + { "pmacsdqh", { { OP_DREX4, DREX_OC1 + DREX_NO_OC0 + q_mode } } }, /* a0 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "pmadcsswd", { { OP_DREX4, DREX_OC1 + DREX_NO_OC0 + q_mode } } }, + { "(bad)", { XX } }, /* a8 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { "(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 } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "pmadcswd", { { OP_DREX4, DREX_OC1 + DREX_NO_OC0 + q_mode } } }, + { "(bad)", { XX } }, /* b8 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { "(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 } }, + { "(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 } }, + { "(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 } }, + { "(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 } }, + { "(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 } }, + { "(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 } }, + { "(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 } }, + { "(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 } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, }, - /* THREE_BYTE_1 */ + /* THREE_BYTE_0F25 */ { /* 00 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { "(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 } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, /* 10 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { PREGRP76 }, - { PREGRP77 }, - { PREGRP78 }, - { PREGRP79 }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, /* 18 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { "(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 } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(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 } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "comps", { { OP_DREX3, q_mode }, { OP_DREX_FCMP, b_mode } } }, + { "compd", { { OP_DREX3, q_mode }, { OP_DREX_FCMP, b_mode } } }, + { "comss", { { OP_DREX3, w_mode }, { OP_DREX_FCMP, b_mode } } }, + { "comsd", { { OP_DREX3, d_mode }, { OP_DREX_FCMP, b_mode } } }, /* 30 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { "(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 } }, + { "(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 } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(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 } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "pcomb", { { OP_DREX3, q_mode }, { OP_DREX_ICMP, b_mode } } }, + { "pcomw", { { OP_DREX3, q_mode }, { OP_DREX_ICMP, b_mode } } }, + { "pcomd", { { OP_DREX3, q_mode }, { OP_DREX_ICMP, b_mode } } }, + { "pcomq", { { OP_DREX3, q_mode }, { OP_DREX_ICMP, b_mode } } }, /* 50 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { "(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 } }, + { "(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 } }, + { "(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 } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "pcomub", { { OP_DREX3, q_mode }, { OP_DREX_ICMP, b_mode } } }, + { "pcomuw", { { OP_DREX3, q_mode }, { OP_DREX_ICMP, b_mode } } }, + { "pcomud", { { OP_DREX3, q_mode }, { OP_DREX_ICMP, b_mode } } }, + { "pcomuq", { { OP_DREX3, q_mode }, { OP_DREX_ICMP, b_mode } } }, /* 70 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { "(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 } }, + { "(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_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 } }, - /* 88 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(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 } }, - /* 90 */ + /* 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 } }, - /* 98 */ { "(bad)", { XX } }, { "(bad)", { XX } }, { "(bad)", { XX } }, { "(bad)", { XX } }, + /* 48 */ { "(bad)", { XX } }, { "(bad)", { XX } }, { "(bad)", { XX } }, { "(bad)", { XX } }, - /* a0 */ { "(bad)", { XX } }, { "(bad)", { XX } }, { "(bad)", { XX } }, { "(bad)", { XX } }, + /* 50 */ { "(bad)", { XX } }, { "(bad)", { XX } }, { "(bad)", { XX } }, { "(bad)", { XX } }, - /* a8 */ { "(bad)", { XX } }, { "(bad)", { XX } }, { "(bad)", { XX } }, { "(bad)", { XX } }, + /* 58 */ { "(bad)", { XX } }, { "(bad)", { XX } }, { "(bad)", { XX } }, { "(bad)", { XX } }, - /* b0 */ { "(bad)", { XX } }, { "(bad)", { XX } }, { "(bad)", { XX } }, { "(bad)", { XX } }, + /* 60 */ { "(bad)", { XX } }, { "(bad)", { XX } }, { "(bad)", { XX } }, { "(bad)", { XX } }, - /* b8 */ { "(bad)", { XX } }, { "(bad)", { XX } }, { "(bad)", { XX } }, { "(bad)", { XX } }, + /* 68 */ { "(bad)", { XX } }, { "(bad)", { XX } }, { "(bad)", { XX } }, { "(bad)", { XX } }, - /* c0 */ { "(bad)", { XX } }, { "(bad)", { XX } }, { "(bad)", { XX } }, { "(bad)", { XX } }, + /* 70 */ { "(bad)", { XX } }, { "(bad)", { XX } }, { "(bad)", { XX } }, { "(bad)", { XX } }, - /* c8 */ { "(bad)", { XX } }, { "(bad)", { XX } }, { "(bad)", { XX } }, { "(bad)", { XX } }, + /* 78 */ { "(bad)", { XX } }, { "(bad)", { XX } }, { "(bad)", { XX } }, { "(bad)", { XX } }, - /* d0 */ { "(bad)", { XX } }, { "(bad)", { XX } }, { "(bad)", { XX } }, { "(bad)", { XX } }, + /* 80 */ { "(bad)", { XX } }, { "(bad)", { XX } }, { "(bad)", { XX } }, { "(bad)", { XX } }, - /* d8 */ { "(bad)", { XX } }, { "(bad)", { XX } }, { "(bad)", { XX } }, { "(bad)", { XX } }, + /* 88 */ { "(bad)", { XX } }, { "(bad)", { XX } }, { "(bad)", { XX } }, { "(bad)", { XX } }, - /* e0 */ { "(bad)", { XX } }, { "(bad)", { XX } }, { "(bad)", { XX } }, { "(bad)", { XX } }, + /* 90 */ { "(bad)", { XX } }, { "(bad)", { XX } }, { "(bad)", { XX } }, { "(bad)", { XX } }, - /* e8 */ { "(bad)", { XX } }, { "(bad)", { XX } }, { "(bad)", { XX } }, { "(bad)", { XX } }, + /* 98 */ { "(bad)", { XX } }, { "(bad)", { XX } }, { "(bad)", { XX } }, { "(bad)", { XX } }, - /* f0 */ { "(bad)", { XX } }, { "(bad)", { XX } }, { "(bad)", { XX } }, { "(bad)", { XX } }, + /* a0 */ { "(bad)", { XX } }, { "(bad)", { XX } }, { "(bad)", { XX } }, { "(bad)", { XX } }, - /* f8 */ + { "(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 } }, @@ -3274,588 +3524,378 @@ static const struct dis386 three_byte_table[][256] = { { "(bad)", { XX } }, { "(bad)", { XX } }, { "(bad)", { XX } }, - }, - /* THREE_BYTE_SSE5_0F24 */ - { - /* 00 */ - { "fmaddps", { { OP_DREX4, q_mode } } }, - { "fmaddpd", { { OP_DREX4, q_mode } } }, - { "fmaddss", { { OP_DREX4, w_mode } } }, - { "fmaddsd", { { OP_DREX4, d_mode } } }, - { "fmaddps", { { OP_DREX4, DREX_OC1 + q_mode } } }, - { "fmaddpd", { { OP_DREX4, DREX_OC1 + q_mode } } }, - { "fmaddss", { { OP_DREX4, DREX_OC1 + w_mode } } }, - { "fmaddsd", { { OP_DREX4, DREX_OC1 + d_mode } } }, - /* 08 */ - { "fmsubps", { { OP_DREX4, q_mode } } }, - { "fmsubpd", { { OP_DREX4, q_mode } } }, - { "fmsubss", { { OP_DREX4, w_mode } } }, - { "fmsubsd", { { OP_DREX4, d_mode } } }, - { "fmsubps", { { OP_DREX4, DREX_OC1 + q_mode } } }, - { "fmsubpd", { { OP_DREX4, DREX_OC1 + q_mode } } }, - { "fmsubss", { { OP_DREX4, DREX_OC1 + w_mode } } }, - { "fmsubsd", { { OP_DREX4, DREX_OC1 + d_mode } } }, - /* 10 */ - { "fnmaddps", { { OP_DREX4, q_mode } } }, - { "fnmaddpd", { { OP_DREX4, q_mode } } }, - { "fnmaddss", { { OP_DREX4, w_mode } } }, - { "fnmaddsd", { { OP_DREX4, d_mode } } }, - { "fnmaddps", { { OP_DREX4, DREX_OC1 + q_mode } } }, - { "fnmaddpd", { { OP_DREX4, DREX_OC1 + q_mode } } }, - { "fnmaddss", { { OP_DREX4, DREX_OC1 + w_mode } } }, - { "fnmaddsd", { { OP_DREX4, DREX_OC1 + d_mode } } }, - /* 18 */ - { "fnmsubps", { { OP_DREX4, q_mode } } }, - { "fnmsubpd", { { OP_DREX4, q_mode } } }, - { "fnmsubss", { { OP_DREX4, w_mode } } }, - { "fnmsubsd", { { OP_DREX4, d_mode } } }, - { "fnmsubps", { { OP_DREX4, DREX_OC1 + q_mode } } }, - { "fnmsubpd", { { OP_DREX4, DREX_OC1 + q_mode } } }, - { "fnmsubss", { { OP_DREX4, DREX_OC1 + w_mode } } }, - { "fnmsubsd", { { OP_DREX4, DREX_OC1 + d_mode } } }, - /* 20 */ - { "permps", { { OP_DREX4, q_mode } } }, - { "permpd", { { OP_DREX4, q_mode } } }, - { "pcmov", { { OP_DREX4, q_mode } } }, - { "pperm", { { OP_DREX4, q_mode } } }, - { "permps", { { OP_DREX4, DREX_OC1 + q_mode } } }, - { "permpd", { { OP_DREX4, DREX_OC1 + q_mode } } }, - { "pcmov", { { OP_DREX4, DREX_OC1 + w_mode } } }, - { "pperm", { { OP_DREX4, DREX_OC1 + d_mode } } }, - /* 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 */ - { "protb", { { OP_DREX3, q_mode } } }, - { "protw", { { OP_DREX3, q_mode } } }, - { "protd", { { OP_DREX3, q_mode } } }, - { "protq", { { OP_DREX3, q_mode } } }, - { "pshlb", { { OP_DREX3, q_mode } } }, - { "pshlw", { { OP_DREX3, q_mode } } }, - { "pshld", { { OP_DREX3, q_mode } } }, - { "pshlq", { { OP_DREX3, q_mode } } }, - /* 48 */ - { "pshab", { { OP_DREX3, q_mode } } }, - { "pshaw", { { OP_DREX3, q_mode } } }, - { "pshad", { { OP_DREX3, q_mode } } }, - { "pshaq", { { OP_DREX3, q_mode } } }, - { "(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 } }, - { "pmacssww", { { OP_DREX4, DREX_OC1 + DREX_NO_OC0 + q_mode } } }, - { "pmacsswd", { { OP_DREX4, DREX_OC1 + DREX_NO_OC0 + q_mode } } }, - { "pmacssdql", { { OP_DREX4, DREX_OC1 + DREX_NO_OC0 + q_mode } } }, - /* 88 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "pmacssdd", { { OP_DREX4, DREX_OC1 + DREX_NO_OC0 + q_mode } } }, - { "pmacssdqh", { { OP_DREX4, DREX_OC1 + DREX_NO_OC0 + q_mode } } }, - /* 90 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "pmacsww", { { OP_DREX4, DREX_OC1 + DREX_NO_OC0 + q_mode } } }, - { "pmacswd", { { OP_DREX4, DREX_OC1 + DREX_NO_OC0 + q_mode } } }, - { "pmacsdql", { { OP_DREX4, DREX_OC1 + DREX_NO_OC0 + q_mode } } }, - /* 98 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "pmacsdd", { { OP_DREX4, DREX_OC1 + DREX_NO_OC0 + q_mode } } }, - { "pmacsdqh", { { OP_DREX4, DREX_OC1 + DREX_NO_OC0 + q_mode } } }, - /* a0 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "pmadcsswd", { { OP_DREX4, DREX_OC1 + DREX_NO_OC0 + q_mode } } }, - { "(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 } }, - { "pmadcswd", { { OP_DREX4, DREX_OC1 + DREX_NO_OC0 + q_mode } } }, - { "(bad)", { XX } }, /* b8 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { "(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 } }, + { "(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 } }, + { "(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 } }, + { "(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 } }, + { "(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 } }, + { "(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 } }, + { "(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 } }, + { 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 } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, }, - /* THREE_BYTE_SSE5_0F25 */ + /* THREE_BYTE_0F3A */ { /* 00 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, /* 08 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { 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 } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { "(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 } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, /* 20 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { 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 } }, - { "comps", { { OP_DREX3, q_mode }, { OP_DREX_FCMP, b_mode } } }, - { "compd", { { OP_DREX3, q_mode }, { OP_DREX_FCMP, b_mode } } }, - { "comss", { { OP_DREX3, w_mode }, { OP_DREX_FCMP, b_mode } } }, - { "comsd", { { OP_DREX3, d_mode }, { OP_DREX_FCMP, b_mode } } }, + { "(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 } }, + { "(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 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { 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 } }, - { "pcomb", { { OP_DREX3, q_mode }, { OP_DREX_ICMP, b_mode } } }, - { "pcomw", { { OP_DREX3, q_mode }, { OP_DREX_ICMP, b_mode } } }, - { "pcomd", { { OP_DREX3, q_mode }, { OP_DREX_ICMP, b_mode } } }, - { "pcomq", { { OP_DREX3, q_mode }, { OP_DREX_ICMP, b_mode } } }, + { "(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 } }, + { "(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 } }, + { "(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 } }, + { 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 } }, - { "pcomub", { { OP_DREX3, q_mode }, { OP_DREX_ICMP, b_mode } } }, - { "pcomuw", { { OP_DREX3, q_mode }, { OP_DREX_ICMP, b_mode } } }, - { "pcomud", { { OP_DREX3, q_mode }, { OP_DREX_ICMP, b_mode } } }, - { "pcomuq", { { OP_DREX3, q_mode }, { OP_DREX_ICMP, b_mode } } }, + { "(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 } }, + { "(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 } }, + { "(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 } }, + { "(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 } }, + { "(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 } }, + { "(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 } }, + { "(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 } }, + { "(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 } }, + { "(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 } }, + { "(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 } }, + { "(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 } }, + { "(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 } }, + { "(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 } }, + { "(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 } }, + { "(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 } }, + { "(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 } }, + { "(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 } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { "(bad)", { XX } }, }, /* THREE_BYTE_SSE5_0F7A */ { @@ -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]; -- 2.30.2