X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=opcodes%2Fi386-dis.c;h=15c968a5290165d392ffad03972d00191b8c00a9;hb=78ca4e81ffc025ba2f18ab6964a84d6693624b5d;hp=2b5718f1647648cf7a6195b6e7ce06549e51b9b2;hpb=2a70cca486d4f175b25db1d484c7c560d14b8216;p=deliverable%2Fbinutils-gdb.git diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c index 2b5718f164..15c968a529 100644 --- a/opcodes/i386-dis.c +++ b/opcodes/i386-dis.c @@ -1,6 +1,6 @@ /* Print i386 instructions for GDB, the GNU debugger. Copyright 1988, 1989, 1991, 1993, 1994, 1995, 1996, 1997, 1998, 1999, - 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 + 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. This file is part of the GNU opcodes library. @@ -53,7 +53,6 @@ static void OP_indirE (int, int); static void print_operand_value (char *, int, bfd_vma); static void OP_E_register (int, int); static void OP_E_memory (int, int); -static void OP_E_extended (int, int); static void print_displacement (char *, bfd_vma); static void OP_E (int, int); static void OP_G (int, int); @@ -92,6 +91,7 @@ static void OP_M (int, int); static void OP_VEX (int, int); static void OP_EX_Vex (int, int); static void OP_EX_VexW (int, int); +static void OP_EX_VexImmW (int, int); static void OP_XMM_Vex (int, int); static void OP_XMM_VexW (int, int); static void OP_REG_VexI4 (int, int); @@ -108,12 +108,17 @@ static void OP_3DNowSuffix (int, int); static void CMP_Fixup (int, int); static void BadOp (void); static void REP_Fixup (int, int); +static void HLE_Fixup1 (int, int); +static void HLE_Fixup2 (int, int); +static void HLE_Fixup3 (int, int); static void CMPXCHG8B_Fixup (int, int); static void XMM_Fixup (int, int); static void CRC32_Fixup (int, int); +static void FXSAVE_Fixup (int, int); static void OP_LWPCB_E (int, int); static void OP_LWP_E (int, int); -static void OP_LWP_I (int, int); +static void OP_Vex_2src_1 (int, int); +static void OP_Vex_2src_2 (int, int); static void MOVBE_Fixup (int, int); @@ -142,10 +147,7 @@ static int prefixes; static int rex; /* Bits of REX we've already used. */ static int rex_used; -/* Original REX prefix. */ -static int rex_original; -/* REX bits in original REX prefix ignored. It may not be the same - as rex_original since some bits may not be ignored. */ +/* REX bits in original REX prefix ignored. */ static int rex_ignored; /* Mark parts used in the REX prefix. When we are testing for empty prefix (for 8bit register REX extension), just mask it @@ -217,6 +219,7 @@ fetch_data (struct disassemble_info *info, bfd_byte *addr) } #define XX { NULL, 0 } +#define Bad_Opcode NULL, { { NULL, 0 } } #define Eb { OP_E, b_mode } #define EbS { OP_E, b_swap_mode } @@ -252,7 +255,9 @@ fetch_data (struct disassemble_info *info, bfd_byte *addr) #define Rm { OP_R, m_mode } #define Ib { OP_I, b_mode } #define sIb { OP_sI, b_mode } /* sign extened byte */ +#define sIbT { OP_sI, b_T_mode } /* sign extened byte like 'T' */ #define Iv { OP_I, v_mode } +#define sIv { OP_sI, v_mode } #define Iq { OP_I, q_mode } #define Iv64 { OP_I64, v_mode } #define Iw { OP_I, w_mode } @@ -281,7 +286,6 @@ fetch_data (struct disassemble_info *info, bfd_byte *addr) #define RMrSI { OP_REG, rSI_reg } #define RMrDI { OP_REG, rDI_reg } #define RMAL { OP_REG, al_reg } -#define RMAL { OP_REG, al_reg } #define RMCL { OP_REG, cl_reg } #define RMDL { OP_REG, dl_reg } #define RMBL { OP_REG, bl_reg } @@ -334,6 +338,8 @@ fetch_data (struct disassemble_info *info, bfd_byte *addr) #define MX { OP_MMX, 0 } #define XM { OP_XMM, 0 } +#define XMScalar { OP_XMM, scalar_mode } +#define XMGatherQ { OP_XMM, vex_vsib_q_w_dq_mode } #define XMM { OP_XMM, xmm_mode } #define EM { OP_EM, v_mode } #define EMS { OP_EM, v_swap_mode } @@ -341,15 +347,25 @@ fetch_data (struct disassemble_info *info, bfd_byte *addr) #define EMx { OP_EM, x_mode } #define EXw { OP_EX, w_mode } #define EXd { OP_EX, d_mode } +#define EXdScalar { OP_EX, d_scalar_mode } #define EXdS { OP_EX, d_swap_mode } #define EXq { OP_EX, q_mode } +#define EXqScalar { OP_EX, q_scalar_mode } +#define EXqScalarS { OP_EX, q_scalar_swap_mode } #define EXqS { OP_EX, q_swap_mode } #define EXx { OP_EX, x_mode } #define EXxS { OP_EX, x_swap_mode } #define EXxmm { OP_EX, xmm_mode } #define EXxmmq { OP_EX, xmmq_mode } +#define EXxmm_mb { OP_EX, xmm_mb_mode } +#define EXxmm_mw { OP_EX, xmm_mw_mode } +#define EXxmm_md { OP_EX, xmm_md_mode } +#define EXxmm_mq { OP_EX, xmm_mq_mode } +#define EXxmmdw { OP_EX, xmmdw_mode } +#define EXxmmqd { OP_EX, xmmqd_mode } #define EXymmq { OP_EX, ymmq_mode } #define EXVexWdq { OP_EX, vex_w_dq_mode } +#define EXVexWdqScalar { OP_EX, vex_scalar_w_dq_mode } #define MS { OP_MS, v_mode } #define XS { OP_XS, v_mode } #define EMCq { OP_EMC, q_mode } @@ -357,25 +373,38 @@ fetch_data (struct disassemble_info *info, bfd_byte *addr) #define OPSUF { OP_3DNowSuffix, 0 } #define CMP { CMP_Fixup, 0 } #define XMM0 { XMM_Fixup, 0 } +#define FXSAVE { FXSAVE_Fixup, 0 } +#define Vex_2src_1 { OP_Vex_2src_1, 0 } +#define Vex_2src_2 { OP_Vex_2src_2, 0 } #define Vex { OP_VEX, vex_mode } +#define VexScalar { OP_VEX, vex_scalar_mode } +#define VexGatherQ { OP_VEX, vex_vsib_q_w_dq_mode } #define Vex128 { OP_VEX, vex128_mode } #define Vex256 { OP_VEX, vex256_mode } +#define VexGdq { OP_VEX, dq_mode } #define VexI4 { VEXI4_Fixup, 0} #define EXdVex { OP_EX_Vex, d_mode } #define EXdVexS { OP_EX_Vex, d_swap_mode } +#define EXdVexScalarS { OP_EX_Vex, d_scalar_swap_mode } #define EXqVex { OP_EX_Vex, q_mode } #define EXqVexS { OP_EX_Vex, q_swap_mode } +#define EXqVexScalarS { OP_EX_Vex, q_scalar_swap_mode } #define EXVexW { OP_EX_VexW, x_mode } #define EXdVexW { OP_EX_VexW, d_mode } #define EXqVexW { OP_EX_VexW, q_mode } +#define EXVexImmW { OP_EX_VexImmW, x_mode } #define XMVex { OP_XMM_Vex, 0 } +#define XMVexScalar { OP_XMM_Vex, scalar_mode } #define XMVexW { OP_XMM_VexW, 0 } #define XMVexI4 { OP_REG_VexI4, x_mode } #define PCLMUL { PCLMUL_Fixup, 0 } #define VZERO { VZERO_Fixup, 0 } #define VCMP { VCMP_Fixup, 0 } +#define MVexVSIBDWpX { OP_M, vex_vsib_d_w_dq_mode } +#define MVexVSIBQWpX { OP_M, vex_vsib_q_w_dq_mode } + /* Used handle "rep" prefix for string instructions. */ #define Xbr { REP_Fixup, eSI_reg } #define Xvr { REP_Fixup, eSI_reg } @@ -386,6 +415,14 @@ fetch_data (struct disassemble_info *info, bfd_byte *addr) #define ALr { REP_Fixup, al_reg } #define eAXr { REP_Fixup, eAX_reg } +/* Used handle HLE prefix for lockable instructions. */ +#define Ebh1 { HLE_Fixup1, b_mode } +#define Evh1 { HLE_Fixup1, v_mode } +#define Ebh2 { HLE_Fixup2, b_mode } +#define Evh2 { HLE_Fixup2, v_mode } +#define Ebh3 { HLE_Fixup3, b_mode } +#define Evh3 { HLE_Fixup3, v_mode } + #define cond_jump_flag { NULL, cond_jump_mode } #define loop_jcxz_flag { NULL, loop_jcxz_mode } @@ -400,6 +437,8 @@ enum b_mode = 1, /* byte operand with operand swapped */ b_swap_mode, + /* byte operand, sign extend like 'T' suffix */ + b_T_mode, /* operand size depends on prefixes */ v_mode, /* operand size depends on prefixes with operand swapped */ @@ -424,8 +463,22 @@ enum xmm_mode, /* 16-byte XMM or quad word operand */ xmmq_mode, + /* XMM register or byte memory operand */ + xmm_mb_mode, + /* XMM register or word memory operand */ + xmm_mw_mode, + /* XMM register or double word memory operand */ + xmm_md_mode, + /* XMM register or quad word memory operand */ + xmm_mq_mode, + /* 16-byte XMM, word or double word operand */ + xmmdw_mode, + /* 16-byte XMM, double word or quad word operand */ + xmmqd_mode, /* 32-byte YMM or quad word operand */ ymmq_mode, + /* 32-byte YMM or 16-byte word operand */ + ymmxmm_mode, /* d_mode in 32bit, q_mode in 64bit mode. */ m_mode, /* pair of v_mode operands */ @@ -458,6 +511,26 @@ enum /* operand size depends on the VEX.W bit. */ vex_w_dq_mode, + /* Similar to vex_w_dq_mode, with VSIB dword indices. */ + vex_vsib_d_w_dq_mode, + /* Similar to vex_w_dq_mode, with VSIB qword indices. */ + vex_vsib_q_w_dq_mode, + + /* scalar, ignore vector length. */ + scalar_mode, + /* like d_mode, ignore vector length. */ + d_scalar_mode, + /* like d_swap_mode, ignore vector length. */ + d_scalar_swap_mode, + /* like q_mode, ignore vector length. */ + q_scalar_mode, + /* like q_swap_mode, ignore vector length. */ + q_scalar_swap_mode, + /* like vex_mode, ignore vector length. */ + vex_scalar_mode, + /* like vex_w_dq_mode, ignore vector length. */ + vex_scalar_w_dq_mode, + es_reg, cs_reg, ss_reg, @@ -517,7 +590,8 @@ enum USE_XOP_8F_TABLE, USE_VEX_C4_TABLE, USE_VEX_C5_TABLE, - USE_VEX_LEN_TABLE + USE_VEX_LEN_TABLE, + USE_VEX_W_TABLE }; #define FLOAT NULL, { { NULL, FLOATCODE } } @@ -533,6 +607,7 @@ enum #define VEX_C4_TABLE(I) DIS386 (USE_VEX_C4_TABLE, (I)) #define VEX_C5_TABLE(I) DIS386 (USE_VEX_C5_TABLE, (I)) #define VEX_LEN_TABLE(I) DIS386 (USE_VEX_LEN_TABLE, (I)) +#define VEX_W_TABLE(I) DIS386 (USE_VEX_W_TABLE, (I)) enum { @@ -564,17 +639,22 @@ enum REG_0FAE, REG_0FBA, REG_0FC7, - REG_VEX_71, - REG_VEX_72, - REG_VEX_73, - REG_VEX_AE, + REG_VEX_0F71, + REG_VEX_0F72, + REG_VEX_0F73, + REG_VEX_0FAE, + REG_VEX_0F38F3, REG_XOP_LWPCB, - REG_XOP_LWP + REG_XOP_LWP, + REG_XOP_TBM_01, + REG_XOP_TBM_02 }; enum { MOD_8D = 0, + MOD_C6_REG_7, + MOD_C7_REG_7, MOD_0F01_REG_0, MOD_0F01_REG_1, MOD_0F01_REG_2, @@ -588,6 +668,10 @@ enum MOD_0F18_REG_1, MOD_0F18_REG_2, MOD_0F18_REG_3, + MOD_0F18_REG_4, + MOD_0F18_REG_5, + MOD_0F18_REG_6, + MOD_0F18_REG_7, MOD_0F20, MOD_0F21, MOD_0F22, @@ -629,40 +713,43 @@ enum MOD_62_32BIT, MOD_C4_32BIT, MOD_C5_32BIT, - MOD_VEX_12_PREFIX_0, - MOD_VEX_13, - MOD_VEX_16_PREFIX_0, - MOD_VEX_17, - MOD_VEX_2B, - MOD_VEX_51, - MOD_VEX_71_REG_2, - MOD_VEX_71_REG_4, - MOD_VEX_71_REG_6, - MOD_VEX_72_REG_2, - MOD_VEX_72_REG_4, - MOD_VEX_72_REG_6, - MOD_VEX_73_REG_2, - MOD_VEX_73_REG_3, - MOD_VEX_73_REG_6, - MOD_VEX_73_REG_7, - MOD_VEX_AE_REG_2, - MOD_VEX_AE_REG_3, - MOD_VEX_D7_PREFIX_2, - MOD_VEX_E7_PREFIX_2, - MOD_VEX_F0_PREFIX_3, - MOD_VEX_3818_PREFIX_2, - MOD_VEX_3819_PREFIX_2, - MOD_VEX_381A_PREFIX_2, - MOD_VEX_382A_PREFIX_2, - MOD_VEX_382C_PREFIX_2, - MOD_VEX_382D_PREFIX_2, - MOD_VEX_382E_PREFIX_2, - MOD_VEX_382F_PREFIX_2 + MOD_VEX_0F12_PREFIX_0, + MOD_VEX_0F13, + MOD_VEX_0F16_PREFIX_0, + MOD_VEX_0F17, + MOD_VEX_0F2B, + MOD_VEX_0F50, + MOD_VEX_0F71_REG_2, + MOD_VEX_0F71_REG_4, + MOD_VEX_0F71_REG_6, + MOD_VEX_0F72_REG_2, + MOD_VEX_0F72_REG_4, + MOD_VEX_0F72_REG_6, + MOD_VEX_0F73_REG_2, + MOD_VEX_0F73_REG_3, + MOD_VEX_0F73_REG_6, + MOD_VEX_0F73_REG_7, + MOD_VEX_0FAE_REG_2, + MOD_VEX_0FAE_REG_3, + MOD_VEX_0FD7_PREFIX_2, + MOD_VEX_0FE7_PREFIX_2, + MOD_VEX_0FF0_PREFIX_3, + MOD_VEX_0F381A_PREFIX_2, + MOD_VEX_0F382A_PREFIX_2, + MOD_VEX_0F382C_PREFIX_2, + MOD_VEX_0F382D_PREFIX_2, + MOD_VEX_0F382E_PREFIX_2, + MOD_VEX_0F382F_PREFIX_2, + MOD_VEX_0F385A_PREFIX_2, + MOD_VEX_0F388C_PREFIX_2, + MOD_VEX_0F388E_PREFIX_2, }; enum { - RM_0F01_REG_0 = 0, + RM_C6_REG_7 = 0, + RM_C7_REG_7, + RM_0F01_REG_0, RM_0F01_REG_1, RM_0F01_REG_2, RM_0F01_REG_3, @@ -711,7 +798,12 @@ enum PREFIX_0F7D, PREFIX_0F7E, PREFIX_0F7F, + PREFIX_0FAE_REG_0, + PREFIX_0FAE_REG_1, + PREFIX_0FAE_REG_2, + PREFIX_0FAE_REG_3, PREFIX_0FB8, + PREFIX_0FBC, PREFIX_0FBD, PREFIX_0FC2, PREFIX_0FC3, @@ -755,6 +847,7 @@ enum PREFIX_0F3841, PREFIX_0F3880, PREFIX_0F3881, + PREFIX_0F3882, PREFIX_0F38DB, PREFIX_0F38DC, PREFIX_0F38DD, @@ -762,6 +855,7 @@ enum PREFIX_0F38DF, PREFIX_0F38F0, PREFIX_0F38F1, + PREFIX_0F38F6, PREFIX_0F3A08, PREFIX_0F3A09, PREFIX_0F3A0A, @@ -785,252 +879,286 @@ enum PREFIX_0F3A62, PREFIX_0F3A63, PREFIX_0F3ADF, - PREFIX_VEX_10, - PREFIX_VEX_11, - PREFIX_VEX_12, - PREFIX_VEX_16, - PREFIX_VEX_2A, - PREFIX_VEX_2C, - PREFIX_VEX_2D, - PREFIX_VEX_2E, - PREFIX_VEX_2F, - PREFIX_VEX_51, - PREFIX_VEX_52, - PREFIX_VEX_53, - PREFIX_VEX_58, - PREFIX_VEX_59, - PREFIX_VEX_5A, - PREFIX_VEX_5B, - PREFIX_VEX_5C, - PREFIX_VEX_5D, - PREFIX_VEX_5E, - PREFIX_VEX_5F, - PREFIX_VEX_60, - PREFIX_VEX_61, - PREFIX_VEX_62, - PREFIX_VEX_63, - PREFIX_VEX_64, - PREFIX_VEX_65, - PREFIX_VEX_66, - PREFIX_VEX_67, - PREFIX_VEX_68, - PREFIX_VEX_69, - PREFIX_VEX_6A, - PREFIX_VEX_6B, - PREFIX_VEX_6C, - PREFIX_VEX_6D, - PREFIX_VEX_6E, - PREFIX_VEX_6F, - PREFIX_VEX_70, - PREFIX_VEX_71_REG_2, - PREFIX_VEX_71_REG_4, - PREFIX_VEX_71_REG_6, - PREFIX_VEX_72_REG_2, - PREFIX_VEX_72_REG_4, - PREFIX_VEX_72_REG_6, - PREFIX_VEX_73_REG_2, - PREFIX_VEX_73_REG_3, - PREFIX_VEX_73_REG_6, - PREFIX_VEX_73_REG_7, - PREFIX_VEX_74, - PREFIX_VEX_75, - PREFIX_VEX_76, - PREFIX_VEX_77, - PREFIX_VEX_7C, - PREFIX_VEX_7D, - PREFIX_VEX_7E, - PREFIX_VEX_7F, - PREFIX_VEX_C2, - PREFIX_VEX_C4, - PREFIX_VEX_C5, - PREFIX_VEX_D0, - PREFIX_VEX_D1, - PREFIX_VEX_D2, - PREFIX_VEX_D3, - PREFIX_VEX_D4, - PREFIX_VEX_D5, - PREFIX_VEX_D6, - PREFIX_VEX_D7, - PREFIX_VEX_D8, - PREFIX_VEX_D9, - PREFIX_VEX_DA, - PREFIX_VEX_DB, - PREFIX_VEX_DC, - PREFIX_VEX_DD, - PREFIX_VEX_DE, - PREFIX_VEX_DF, - PREFIX_VEX_E0, - PREFIX_VEX_E1, - PREFIX_VEX_E2, - PREFIX_VEX_E3, - PREFIX_VEX_E4, - PREFIX_VEX_E5, - PREFIX_VEX_E6, - PREFIX_VEX_E7, - PREFIX_VEX_E8, - PREFIX_VEX_E9, - PREFIX_VEX_EA, - PREFIX_VEX_EB, - PREFIX_VEX_EC, - PREFIX_VEX_ED, - PREFIX_VEX_EE, - PREFIX_VEX_EF, - PREFIX_VEX_F0, - PREFIX_VEX_F1, - PREFIX_VEX_F2, - PREFIX_VEX_F3, - PREFIX_VEX_F4, - PREFIX_VEX_F5, - PREFIX_VEX_F6, - PREFIX_VEX_F7, - PREFIX_VEX_F8, - PREFIX_VEX_F9, - PREFIX_VEX_FA, - PREFIX_VEX_FB, - PREFIX_VEX_FC, - PREFIX_VEX_FD, - PREFIX_VEX_FE, - PREFIX_VEX_3800, - PREFIX_VEX_3801, - PREFIX_VEX_3802, - PREFIX_VEX_3803, - PREFIX_VEX_3804, - PREFIX_VEX_3805, - PREFIX_VEX_3806, - PREFIX_VEX_3807, - PREFIX_VEX_3808, - PREFIX_VEX_3809, - PREFIX_VEX_380A, - PREFIX_VEX_380B, - PREFIX_VEX_380C, - PREFIX_VEX_380D, - PREFIX_VEX_380E, - PREFIX_VEX_380F, - PREFIX_VEX_3817, - PREFIX_VEX_3818, - PREFIX_VEX_3819, - PREFIX_VEX_381A, - PREFIX_VEX_381C, - PREFIX_VEX_381D, - PREFIX_VEX_381E, - PREFIX_VEX_3820, - PREFIX_VEX_3821, - PREFIX_VEX_3822, - PREFIX_VEX_3823, - PREFIX_VEX_3824, - PREFIX_VEX_3825, - PREFIX_VEX_3828, - PREFIX_VEX_3829, - PREFIX_VEX_382A, - PREFIX_VEX_382B, - PREFIX_VEX_382C, - PREFIX_VEX_382D, - PREFIX_VEX_382E, - PREFIX_VEX_382F, - PREFIX_VEX_3830, - PREFIX_VEX_3831, - PREFIX_VEX_3832, - PREFIX_VEX_3833, - PREFIX_VEX_3834, - PREFIX_VEX_3835, - PREFIX_VEX_3837, - PREFIX_VEX_3838, - PREFIX_VEX_3839, - PREFIX_VEX_383A, - PREFIX_VEX_383B, - PREFIX_VEX_383C, - PREFIX_VEX_383D, - PREFIX_VEX_383E, - PREFIX_VEX_383F, - PREFIX_VEX_3840, - PREFIX_VEX_3841, - PREFIX_VEX_3896, - PREFIX_VEX_3897, - PREFIX_VEX_3898, - PREFIX_VEX_3899, - PREFIX_VEX_389A, - PREFIX_VEX_389B, - PREFIX_VEX_389C, - PREFIX_VEX_389D, - PREFIX_VEX_389E, - PREFIX_VEX_389F, - PREFIX_VEX_38A6, - PREFIX_VEX_38A7, - PREFIX_VEX_38A8, - PREFIX_VEX_38A9, - PREFIX_VEX_38AA, - PREFIX_VEX_38AB, - PREFIX_VEX_38AC, - PREFIX_VEX_38AD, - PREFIX_VEX_38AE, - PREFIX_VEX_38AF, - PREFIX_VEX_38B6, - PREFIX_VEX_38B7, - PREFIX_VEX_38B8, - PREFIX_VEX_38B9, - PREFIX_VEX_38BA, - PREFIX_VEX_38BB, - PREFIX_VEX_38BC, - PREFIX_VEX_38BD, - PREFIX_VEX_38BE, - PREFIX_VEX_38BF, - PREFIX_VEX_38DB, - PREFIX_VEX_38DC, - PREFIX_VEX_38DD, - PREFIX_VEX_38DE, - PREFIX_VEX_38DF, - PREFIX_VEX_3A04, - PREFIX_VEX_3A05, - PREFIX_VEX_3A06, - PREFIX_VEX_3A08, - PREFIX_VEX_3A09, - PREFIX_VEX_3A0A, - PREFIX_VEX_3A0B, - PREFIX_VEX_3A0C, - PREFIX_VEX_3A0D, - PREFIX_VEX_3A0E, - PREFIX_VEX_3A0F, - PREFIX_VEX_3A14, - PREFIX_VEX_3A15, - PREFIX_VEX_3A16, - PREFIX_VEX_3A17, - PREFIX_VEX_3A18, - PREFIX_VEX_3A19, - PREFIX_VEX_3A20, - PREFIX_VEX_3A21, - PREFIX_VEX_3A22, - PREFIX_VEX_3A40, - PREFIX_VEX_3A41, - PREFIX_VEX_3A42, - PREFIX_VEX_3A44, - PREFIX_VEX_3A4A, - PREFIX_VEX_3A4B, - PREFIX_VEX_3A4C, - PREFIX_VEX_3A5C, - PREFIX_VEX_3A5D, - PREFIX_VEX_3A5E, - PREFIX_VEX_3A5F, - PREFIX_VEX_3A60, - PREFIX_VEX_3A61, - PREFIX_VEX_3A62, - PREFIX_VEX_3A63, - PREFIX_VEX_3A68, - PREFIX_VEX_3A69, - PREFIX_VEX_3A6A, - PREFIX_VEX_3A6B, - PREFIX_VEX_3A6C, - PREFIX_VEX_3A6D, - PREFIX_VEX_3A6E, - PREFIX_VEX_3A6F, - PREFIX_VEX_3A78, - PREFIX_VEX_3A79, - PREFIX_VEX_3A7A, - PREFIX_VEX_3A7B, - PREFIX_VEX_3A7C, - PREFIX_VEX_3A7D, - PREFIX_VEX_3A7E, - PREFIX_VEX_3A7F, - PREFIX_VEX_3ADF + PREFIX_VEX_0F10, + PREFIX_VEX_0F11, + PREFIX_VEX_0F12, + PREFIX_VEX_0F16, + PREFIX_VEX_0F2A, + PREFIX_VEX_0F2C, + PREFIX_VEX_0F2D, + PREFIX_VEX_0F2E, + PREFIX_VEX_0F2F, + PREFIX_VEX_0F51, + PREFIX_VEX_0F52, + PREFIX_VEX_0F53, + PREFIX_VEX_0F58, + PREFIX_VEX_0F59, + PREFIX_VEX_0F5A, + PREFIX_VEX_0F5B, + PREFIX_VEX_0F5C, + PREFIX_VEX_0F5D, + PREFIX_VEX_0F5E, + PREFIX_VEX_0F5F, + PREFIX_VEX_0F60, + PREFIX_VEX_0F61, + PREFIX_VEX_0F62, + PREFIX_VEX_0F63, + PREFIX_VEX_0F64, + PREFIX_VEX_0F65, + PREFIX_VEX_0F66, + PREFIX_VEX_0F67, + PREFIX_VEX_0F68, + PREFIX_VEX_0F69, + PREFIX_VEX_0F6A, + PREFIX_VEX_0F6B, + PREFIX_VEX_0F6C, + PREFIX_VEX_0F6D, + PREFIX_VEX_0F6E, + PREFIX_VEX_0F6F, + PREFIX_VEX_0F70, + PREFIX_VEX_0F71_REG_2, + PREFIX_VEX_0F71_REG_4, + PREFIX_VEX_0F71_REG_6, + PREFIX_VEX_0F72_REG_2, + PREFIX_VEX_0F72_REG_4, + PREFIX_VEX_0F72_REG_6, + PREFIX_VEX_0F73_REG_2, + PREFIX_VEX_0F73_REG_3, + PREFIX_VEX_0F73_REG_6, + PREFIX_VEX_0F73_REG_7, + PREFIX_VEX_0F74, + PREFIX_VEX_0F75, + PREFIX_VEX_0F76, + PREFIX_VEX_0F77, + PREFIX_VEX_0F7C, + PREFIX_VEX_0F7D, + PREFIX_VEX_0F7E, + PREFIX_VEX_0F7F, + PREFIX_VEX_0FC2, + PREFIX_VEX_0FC4, + PREFIX_VEX_0FC5, + PREFIX_VEX_0FD0, + PREFIX_VEX_0FD1, + PREFIX_VEX_0FD2, + PREFIX_VEX_0FD3, + PREFIX_VEX_0FD4, + PREFIX_VEX_0FD5, + PREFIX_VEX_0FD6, + PREFIX_VEX_0FD7, + PREFIX_VEX_0FD8, + PREFIX_VEX_0FD9, + PREFIX_VEX_0FDA, + PREFIX_VEX_0FDB, + PREFIX_VEX_0FDC, + PREFIX_VEX_0FDD, + PREFIX_VEX_0FDE, + PREFIX_VEX_0FDF, + PREFIX_VEX_0FE0, + PREFIX_VEX_0FE1, + PREFIX_VEX_0FE2, + PREFIX_VEX_0FE3, + PREFIX_VEX_0FE4, + PREFIX_VEX_0FE5, + PREFIX_VEX_0FE6, + PREFIX_VEX_0FE7, + PREFIX_VEX_0FE8, + PREFIX_VEX_0FE9, + PREFIX_VEX_0FEA, + PREFIX_VEX_0FEB, + PREFIX_VEX_0FEC, + PREFIX_VEX_0FED, + PREFIX_VEX_0FEE, + PREFIX_VEX_0FEF, + PREFIX_VEX_0FF0, + PREFIX_VEX_0FF1, + PREFIX_VEX_0FF2, + PREFIX_VEX_0FF3, + PREFIX_VEX_0FF4, + PREFIX_VEX_0FF5, + PREFIX_VEX_0FF6, + PREFIX_VEX_0FF7, + PREFIX_VEX_0FF8, + PREFIX_VEX_0FF9, + PREFIX_VEX_0FFA, + PREFIX_VEX_0FFB, + PREFIX_VEX_0FFC, + PREFIX_VEX_0FFD, + PREFIX_VEX_0FFE, + PREFIX_VEX_0F3800, + PREFIX_VEX_0F3801, + PREFIX_VEX_0F3802, + PREFIX_VEX_0F3803, + PREFIX_VEX_0F3804, + PREFIX_VEX_0F3805, + PREFIX_VEX_0F3806, + PREFIX_VEX_0F3807, + PREFIX_VEX_0F3808, + PREFIX_VEX_0F3809, + PREFIX_VEX_0F380A, + PREFIX_VEX_0F380B, + PREFIX_VEX_0F380C, + PREFIX_VEX_0F380D, + PREFIX_VEX_0F380E, + PREFIX_VEX_0F380F, + PREFIX_VEX_0F3813, + PREFIX_VEX_0F3816, + PREFIX_VEX_0F3817, + PREFIX_VEX_0F3818, + PREFIX_VEX_0F3819, + PREFIX_VEX_0F381A, + PREFIX_VEX_0F381C, + PREFIX_VEX_0F381D, + PREFIX_VEX_0F381E, + PREFIX_VEX_0F3820, + PREFIX_VEX_0F3821, + PREFIX_VEX_0F3822, + PREFIX_VEX_0F3823, + PREFIX_VEX_0F3824, + PREFIX_VEX_0F3825, + PREFIX_VEX_0F3828, + PREFIX_VEX_0F3829, + PREFIX_VEX_0F382A, + PREFIX_VEX_0F382B, + PREFIX_VEX_0F382C, + PREFIX_VEX_0F382D, + PREFIX_VEX_0F382E, + PREFIX_VEX_0F382F, + PREFIX_VEX_0F3830, + PREFIX_VEX_0F3831, + PREFIX_VEX_0F3832, + PREFIX_VEX_0F3833, + PREFIX_VEX_0F3834, + PREFIX_VEX_0F3835, + PREFIX_VEX_0F3836, + PREFIX_VEX_0F3837, + PREFIX_VEX_0F3838, + PREFIX_VEX_0F3839, + PREFIX_VEX_0F383A, + PREFIX_VEX_0F383B, + PREFIX_VEX_0F383C, + PREFIX_VEX_0F383D, + PREFIX_VEX_0F383E, + PREFIX_VEX_0F383F, + PREFIX_VEX_0F3840, + PREFIX_VEX_0F3841, + PREFIX_VEX_0F3845, + PREFIX_VEX_0F3846, + PREFIX_VEX_0F3847, + PREFIX_VEX_0F3858, + PREFIX_VEX_0F3859, + PREFIX_VEX_0F385A, + PREFIX_VEX_0F3878, + PREFIX_VEX_0F3879, + PREFIX_VEX_0F388C, + PREFIX_VEX_0F388E, + PREFIX_VEX_0F3890, + PREFIX_VEX_0F3891, + PREFIX_VEX_0F3892, + PREFIX_VEX_0F3893, + PREFIX_VEX_0F3896, + PREFIX_VEX_0F3897, + PREFIX_VEX_0F3898, + PREFIX_VEX_0F3899, + PREFIX_VEX_0F389A, + PREFIX_VEX_0F389B, + PREFIX_VEX_0F389C, + PREFIX_VEX_0F389D, + PREFIX_VEX_0F389E, + PREFIX_VEX_0F389F, + PREFIX_VEX_0F38A6, + PREFIX_VEX_0F38A7, + PREFIX_VEX_0F38A8, + PREFIX_VEX_0F38A9, + PREFIX_VEX_0F38AA, + PREFIX_VEX_0F38AB, + PREFIX_VEX_0F38AC, + PREFIX_VEX_0F38AD, + PREFIX_VEX_0F38AE, + PREFIX_VEX_0F38AF, + PREFIX_VEX_0F38B6, + PREFIX_VEX_0F38B7, + PREFIX_VEX_0F38B8, + PREFIX_VEX_0F38B9, + PREFIX_VEX_0F38BA, + PREFIX_VEX_0F38BB, + PREFIX_VEX_0F38BC, + PREFIX_VEX_0F38BD, + PREFIX_VEX_0F38BE, + PREFIX_VEX_0F38BF, + PREFIX_VEX_0F38DB, + PREFIX_VEX_0F38DC, + PREFIX_VEX_0F38DD, + PREFIX_VEX_0F38DE, + PREFIX_VEX_0F38DF, + PREFIX_VEX_0F38F2, + PREFIX_VEX_0F38F3_REG_1, + PREFIX_VEX_0F38F3_REG_2, + PREFIX_VEX_0F38F3_REG_3, + PREFIX_VEX_0F38F5, + PREFIX_VEX_0F38F6, + PREFIX_VEX_0F38F7, + PREFIX_VEX_0F3A00, + PREFIX_VEX_0F3A01, + PREFIX_VEX_0F3A02, + PREFIX_VEX_0F3A04, + PREFIX_VEX_0F3A05, + PREFIX_VEX_0F3A06, + PREFIX_VEX_0F3A08, + PREFIX_VEX_0F3A09, + PREFIX_VEX_0F3A0A, + PREFIX_VEX_0F3A0B, + PREFIX_VEX_0F3A0C, + PREFIX_VEX_0F3A0D, + PREFIX_VEX_0F3A0E, + PREFIX_VEX_0F3A0F, + PREFIX_VEX_0F3A14, + PREFIX_VEX_0F3A15, + PREFIX_VEX_0F3A16, + PREFIX_VEX_0F3A17, + PREFIX_VEX_0F3A18, + PREFIX_VEX_0F3A19, + PREFIX_VEX_0F3A1D, + PREFIX_VEX_0F3A20, + PREFIX_VEX_0F3A21, + PREFIX_VEX_0F3A22, + PREFIX_VEX_0F3A38, + PREFIX_VEX_0F3A39, + PREFIX_VEX_0F3A40, + PREFIX_VEX_0F3A41, + PREFIX_VEX_0F3A42, + PREFIX_VEX_0F3A44, + PREFIX_VEX_0F3A46, + PREFIX_VEX_0F3A48, + PREFIX_VEX_0F3A49, + PREFIX_VEX_0F3A4A, + PREFIX_VEX_0F3A4B, + PREFIX_VEX_0F3A4C, + PREFIX_VEX_0F3A5C, + PREFIX_VEX_0F3A5D, + PREFIX_VEX_0F3A5E, + PREFIX_VEX_0F3A5F, + PREFIX_VEX_0F3A60, + PREFIX_VEX_0F3A61, + PREFIX_VEX_0F3A62, + PREFIX_VEX_0F3A63, + PREFIX_VEX_0F3A68, + PREFIX_VEX_0F3A69, + PREFIX_VEX_0F3A6A, + PREFIX_VEX_0F3A6B, + PREFIX_VEX_0F3A6C, + PREFIX_VEX_0F3A6D, + PREFIX_VEX_0F3A6E, + PREFIX_VEX_0F3A6F, + PREFIX_VEX_0F3A78, + PREFIX_VEX_0F3A79, + PREFIX_VEX_0F3A7A, + PREFIX_VEX_0F3A7B, + PREFIX_VEX_0F3A7C, + PREFIX_VEX_0F3A7D, + PREFIX_VEX_0F3A7E, + PREFIX_VEX_0F3A7F, + PREFIX_VEX_0F3ADF, + PREFIX_VEX_0F3AF0 }; enum @@ -1074,7 +1202,8 @@ enum enum { - XOP_09 = 0, + XOP_08 = 0, + XOP_09, XOP_0A }; @@ -1087,208 +1216,396 @@ enum enum { - VEX_LEN_10_P_1 = 0, - VEX_LEN_10_P_3, - VEX_LEN_11_P_1, - VEX_LEN_11_P_3, - VEX_LEN_12_P_0_M_0, - VEX_LEN_12_P_0_M_1, - VEX_LEN_12_P_2, - VEX_LEN_13_M_0, - VEX_LEN_16_P_0_M_0, - VEX_LEN_16_P_0_M_1, - VEX_LEN_16_P_2, - VEX_LEN_17_M_0, - VEX_LEN_2A_P_1, - VEX_LEN_2A_P_3, - VEX_LEN_2C_P_1, - VEX_LEN_2C_P_3, - VEX_LEN_2D_P_1, - VEX_LEN_2D_P_3, - VEX_LEN_2E_P_0, - VEX_LEN_2E_P_2, - VEX_LEN_2F_P_0, - VEX_LEN_2F_P_2, - VEX_LEN_51_P_1, - VEX_LEN_51_P_3, - VEX_LEN_52_P_1, - VEX_LEN_53_P_1, - VEX_LEN_58_P_1, - VEX_LEN_58_P_3, - VEX_LEN_59_P_1, - VEX_LEN_59_P_3, - VEX_LEN_5A_P_1, - VEX_LEN_5A_P_3, - VEX_LEN_5C_P_1, - VEX_LEN_5C_P_3, - VEX_LEN_5D_P_1, - VEX_LEN_5D_P_3, - VEX_LEN_5E_P_1, - VEX_LEN_5E_P_3, - VEX_LEN_5F_P_1, - VEX_LEN_5F_P_3, - VEX_LEN_60_P_2, - VEX_LEN_61_P_2, - VEX_LEN_62_P_2, - VEX_LEN_63_P_2, - VEX_LEN_64_P_2, - VEX_LEN_65_P_2, - VEX_LEN_66_P_2, - VEX_LEN_67_P_2, - VEX_LEN_68_P_2, - VEX_LEN_69_P_2, - VEX_LEN_6A_P_2, - VEX_LEN_6B_P_2, - VEX_LEN_6C_P_2, - VEX_LEN_6D_P_2, - VEX_LEN_6E_P_2, - VEX_LEN_70_P_1, - VEX_LEN_70_P_2, - VEX_LEN_70_P_3, - VEX_LEN_71_R_2_P_2, - VEX_LEN_71_R_4_P_2, - VEX_LEN_71_R_6_P_2, - VEX_LEN_72_R_2_P_2, - VEX_LEN_72_R_4_P_2, - VEX_LEN_72_R_6_P_2, - VEX_LEN_73_R_2_P_2, - VEX_LEN_73_R_3_P_2, - VEX_LEN_73_R_6_P_2, - VEX_LEN_73_R_7_P_2, - VEX_LEN_74_P_2, - VEX_LEN_75_P_2, - VEX_LEN_76_P_2, - VEX_LEN_7E_P_1, - VEX_LEN_7E_P_2, - VEX_LEN_AE_R_2_M_0, - VEX_LEN_AE_R_3_M_0, - VEX_LEN_C2_P_1, - VEX_LEN_C2_P_3, - VEX_LEN_C4_P_2, - VEX_LEN_C5_P_2, - VEX_LEN_D1_P_2, - VEX_LEN_D2_P_2, - VEX_LEN_D3_P_2, - VEX_LEN_D4_P_2, - VEX_LEN_D5_P_2, - VEX_LEN_D6_P_2, - VEX_LEN_D7_P_2_M_1, - VEX_LEN_D8_P_2, - VEX_LEN_D9_P_2, - VEX_LEN_DA_P_2, - VEX_LEN_DB_P_2, - VEX_LEN_DC_P_2, - VEX_LEN_DD_P_2, - VEX_LEN_DE_P_2, - VEX_LEN_DF_P_2, - VEX_LEN_E0_P_2, - VEX_LEN_E1_P_2, - VEX_LEN_E2_P_2, - VEX_LEN_E3_P_2, - VEX_LEN_E4_P_2, - VEX_LEN_E5_P_2, - VEX_LEN_E8_P_2, - VEX_LEN_E9_P_2, - VEX_LEN_EA_P_2, - VEX_LEN_EB_P_2, - VEX_LEN_EC_P_2, - VEX_LEN_ED_P_2, - VEX_LEN_EE_P_2, - VEX_LEN_EF_P_2, - VEX_LEN_F1_P_2, - VEX_LEN_F2_P_2, - VEX_LEN_F3_P_2, - VEX_LEN_F4_P_2, - VEX_LEN_F5_P_2, - VEX_LEN_F6_P_2, - VEX_LEN_F7_P_2, - VEX_LEN_F8_P_2, - VEX_LEN_F9_P_2, - VEX_LEN_FA_P_2, - VEX_LEN_FB_P_2, - VEX_LEN_FC_P_2, - VEX_LEN_FD_P_2, - VEX_LEN_FE_P_2, - VEX_LEN_3800_P_2, - VEX_LEN_3801_P_2, - VEX_LEN_3802_P_2, - VEX_LEN_3803_P_2, - VEX_LEN_3804_P_2, - VEX_LEN_3805_P_2, - VEX_LEN_3806_P_2, - VEX_LEN_3807_P_2, - VEX_LEN_3808_P_2, - VEX_LEN_3809_P_2, - VEX_LEN_380A_P_2, - VEX_LEN_380B_P_2, - VEX_LEN_3819_P_2_M_0, - VEX_LEN_381A_P_2_M_0, - VEX_LEN_381C_P_2, - VEX_LEN_381D_P_2, - VEX_LEN_381E_P_2, - VEX_LEN_3820_P_2, - VEX_LEN_3821_P_2, - VEX_LEN_3822_P_2, - VEX_LEN_3823_P_2, - VEX_LEN_3824_P_2, - VEX_LEN_3825_P_2, - VEX_LEN_3828_P_2, - VEX_LEN_3829_P_2, - VEX_LEN_382A_P_2_M_0, - VEX_LEN_382B_P_2, - VEX_LEN_3830_P_2, - VEX_LEN_3831_P_2, - VEX_LEN_3832_P_2, - VEX_LEN_3833_P_2, - VEX_LEN_3834_P_2, - VEX_LEN_3835_P_2, - VEX_LEN_3837_P_2, - VEX_LEN_3838_P_2, - VEX_LEN_3839_P_2, - VEX_LEN_383A_P_2, - VEX_LEN_383B_P_2, - VEX_LEN_383C_P_2, - VEX_LEN_383D_P_2, - VEX_LEN_383E_P_2, - VEX_LEN_383F_P_2, - VEX_LEN_3840_P_2, - VEX_LEN_3841_P_2, - VEX_LEN_38DB_P_2, - VEX_LEN_38DC_P_2, - VEX_LEN_38DD_P_2, - VEX_LEN_38DE_P_2, - VEX_LEN_38DF_P_2, - VEX_LEN_3A06_P_2, - VEX_LEN_3A0A_P_2, - VEX_LEN_3A0B_P_2, - VEX_LEN_3A0E_P_2, - VEX_LEN_3A0F_P_2, - VEX_LEN_3A14_P_2, - VEX_LEN_3A15_P_2, - VEX_LEN_3A16_P_2, - VEX_LEN_3A17_P_2, - VEX_LEN_3A18_P_2, - VEX_LEN_3A19_P_2, - VEX_LEN_3A20_P_2, - VEX_LEN_3A21_P_2, - VEX_LEN_3A22_P_2, - VEX_LEN_3A41_P_2, - VEX_LEN_3A42_P_2, - VEX_LEN_3A44_P_2, - VEX_LEN_3A4C_P_2, - VEX_LEN_3A60_P_2, - VEX_LEN_3A61_P_2, - VEX_LEN_3A62_P_2, - VEX_LEN_3A63_P_2, - VEX_LEN_3A6A_P_2, - VEX_LEN_3A6B_P_2, - VEX_LEN_3A6E_P_2, - VEX_LEN_3A6F_P_2, - VEX_LEN_3A7A_P_2, - VEX_LEN_3A7B_P_2, - VEX_LEN_3A7E_P_2, - VEX_LEN_3A7F_P_2, - VEX_LEN_3ADF_P_2 + VEX_LEN_0F10_P_1 = 0, + VEX_LEN_0F10_P_3, + VEX_LEN_0F11_P_1, + VEX_LEN_0F11_P_3, + VEX_LEN_0F12_P_0_M_0, + VEX_LEN_0F12_P_0_M_1, + VEX_LEN_0F12_P_2, + VEX_LEN_0F13_M_0, + VEX_LEN_0F16_P_0_M_0, + VEX_LEN_0F16_P_0_M_1, + VEX_LEN_0F16_P_2, + VEX_LEN_0F17_M_0, + VEX_LEN_0F2A_P_1, + VEX_LEN_0F2A_P_3, + VEX_LEN_0F2C_P_1, + VEX_LEN_0F2C_P_3, + VEX_LEN_0F2D_P_1, + VEX_LEN_0F2D_P_3, + VEX_LEN_0F2E_P_0, + VEX_LEN_0F2E_P_2, + VEX_LEN_0F2F_P_0, + VEX_LEN_0F2F_P_2, + VEX_LEN_0F51_P_1, + VEX_LEN_0F51_P_3, + VEX_LEN_0F52_P_1, + VEX_LEN_0F53_P_1, + VEX_LEN_0F58_P_1, + VEX_LEN_0F58_P_3, + VEX_LEN_0F59_P_1, + VEX_LEN_0F59_P_3, + VEX_LEN_0F5A_P_1, + VEX_LEN_0F5A_P_3, + VEX_LEN_0F5C_P_1, + VEX_LEN_0F5C_P_3, + VEX_LEN_0F5D_P_1, + VEX_LEN_0F5D_P_3, + VEX_LEN_0F5E_P_1, + VEX_LEN_0F5E_P_3, + VEX_LEN_0F5F_P_1, + VEX_LEN_0F5F_P_3, + VEX_LEN_0F6E_P_2, + VEX_LEN_0F7E_P_1, + VEX_LEN_0F7E_P_2, + VEX_LEN_0FAE_R_2_M_0, + VEX_LEN_0FAE_R_3_M_0, + VEX_LEN_0FC2_P_1, + VEX_LEN_0FC2_P_3, + VEX_LEN_0FC4_P_2, + VEX_LEN_0FC5_P_2, + VEX_LEN_0FD6_P_2, + VEX_LEN_0FF7_P_2, + VEX_LEN_0F3816_P_2, + VEX_LEN_0F3819_P_2, + VEX_LEN_0F381A_P_2_M_0, + VEX_LEN_0F3836_P_2, + VEX_LEN_0F3841_P_2, + VEX_LEN_0F385A_P_2_M_0, + VEX_LEN_0F38DB_P_2, + VEX_LEN_0F38DC_P_2, + VEX_LEN_0F38DD_P_2, + VEX_LEN_0F38DE_P_2, + VEX_LEN_0F38DF_P_2, + VEX_LEN_0F38F2_P_0, + VEX_LEN_0F38F3_R_1_P_0, + VEX_LEN_0F38F3_R_2_P_0, + VEX_LEN_0F38F3_R_3_P_0, + VEX_LEN_0F38F5_P_0, + VEX_LEN_0F38F5_P_1, + VEX_LEN_0F38F5_P_3, + VEX_LEN_0F38F6_P_3, + VEX_LEN_0F38F7_P_0, + VEX_LEN_0F38F7_P_1, + VEX_LEN_0F38F7_P_2, + VEX_LEN_0F38F7_P_3, + VEX_LEN_0F3A00_P_2, + VEX_LEN_0F3A01_P_2, + VEX_LEN_0F3A06_P_2, + VEX_LEN_0F3A0A_P_2, + VEX_LEN_0F3A0B_P_2, + VEX_LEN_0F3A14_P_2, + VEX_LEN_0F3A15_P_2, + VEX_LEN_0F3A16_P_2, + VEX_LEN_0F3A17_P_2, + VEX_LEN_0F3A18_P_2, + VEX_LEN_0F3A19_P_2, + VEX_LEN_0F3A20_P_2, + VEX_LEN_0F3A21_P_2, + VEX_LEN_0F3A22_P_2, + VEX_LEN_0F3A38_P_2, + VEX_LEN_0F3A39_P_2, + VEX_LEN_0F3A41_P_2, + VEX_LEN_0F3A44_P_2, + VEX_LEN_0F3A46_P_2, + VEX_LEN_0F3A60_P_2, + VEX_LEN_0F3A61_P_2, + VEX_LEN_0F3A62_P_2, + VEX_LEN_0F3A63_P_2, + VEX_LEN_0F3A6A_P_2, + VEX_LEN_0F3A6B_P_2, + VEX_LEN_0F3A6E_P_2, + VEX_LEN_0F3A6F_P_2, + VEX_LEN_0F3A7A_P_2, + VEX_LEN_0F3A7B_P_2, + VEX_LEN_0F3A7E_P_2, + VEX_LEN_0F3A7F_P_2, + VEX_LEN_0F3ADF_P_2, + VEX_LEN_0F3AF0_P_3, + VEX_LEN_0FXOP_08_CC, + VEX_LEN_0FXOP_08_CD, + VEX_LEN_0FXOP_08_CE, + VEX_LEN_0FXOP_08_CF, + VEX_LEN_0FXOP_08_EC, + VEX_LEN_0FXOP_08_ED, + VEX_LEN_0FXOP_08_EE, + VEX_LEN_0FXOP_08_EF, + VEX_LEN_0FXOP_09_80, + VEX_LEN_0FXOP_09_81 +}; + +enum +{ + VEX_W_0F10_P_0 = 0, + VEX_W_0F10_P_1, + VEX_W_0F10_P_2, + VEX_W_0F10_P_3, + VEX_W_0F11_P_0, + VEX_W_0F11_P_1, + VEX_W_0F11_P_2, + VEX_W_0F11_P_3, + VEX_W_0F12_P_0_M_0, + VEX_W_0F12_P_0_M_1, + VEX_W_0F12_P_1, + VEX_W_0F12_P_2, + VEX_W_0F12_P_3, + VEX_W_0F13_M_0, + VEX_W_0F14, + VEX_W_0F15, + VEX_W_0F16_P_0_M_0, + VEX_W_0F16_P_0_M_1, + VEX_W_0F16_P_1, + VEX_W_0F16_P_2, + VEX_W_0F17_M_0, + VEX_W_0F28, + VEX_W_0F29, + VEX_W_0F2B_M_0, + VEX_W_0F2E_P_0, + VEX_W_0F2E_P_2, + VEX_W_0F2F_P_0, + VEX_W_0F2F_P_2, + VEX_W_0F50_M_0, + VEX_W_0F51_P_0, + VEX_W_0F51_P_1, + VEX_W_0F51_P_2, + VEX_W_0F51_P_3, + VEX_W_0F52_P_0, + VEX_W_0F52_P_1, + VEX_W_0F53_P_0, + VEX_W_0F53_P_1, + VEX_W_0F58_P_0, + VEX_W_0F58_P_1, + VEX_W_0F58_P_2, + VEX_W_0F58_P_3, + VEX_W_0F59_P_0, + VEX_W_0F59_P_1, + VEX_W_0F59_P_2, + VEX_W_0F59_P_3, + VEX_W_0F5A_P_0, + VEX_W_0F5A_P_1, + VEX_W_0F5A_P_3, + VEX_W_0F5B_P_0, + VEX_W_0F5B_P_1, + VEX_W_0F5B_P_2, + VEX_W_0F5C_P_0, + VEX_W_0F5C_P_1, + VEX_W_0F5C_P_2, + VEX_W_0F5C_P_3, + VEX_W_0F5D_P_0, + VEX_W_0F5D_P_1, + VEX_W_0F5D_P_2, + VEX_W_0F5D_P_3, + VEX_W_0F5E_P_0, + VEX_W_0F5E_P_1, + VEX_W_0F5E_P_2, + VEX_W_0F5E_P_3, + VEX_W_0F5F_P_0, + VEX_W_0F5F_P_1, + VEX_W_0F5F_P_2, + VEX_W_0F5F_P_3, + VEX_W_0F60_P_2, + VEX_W_0F61_P_2, + VEX_W_0F62_P_2, + VEX_W_0F63_P_2, + VEX_W_0F64_P_2, + VEX_W_0F65_P_2, + VEX_W_0F66_P_2, + VEX_W_0F67_P_2, + VEX_W_0F68_P_2, + VEX_W_0F69_P_2, + VEX_W_0F6A_P_2, + VEX_W_0F6B_P_2, + VEX_W_0F6C_P_2, + VEX_W_0F6D_P_2, + VEX_W_0F6F_P_1, + VEX_W_0F6F_P_2, + VEX_W_0F70_P_1, + VEX_W_0F70_P_2, + VEX_W_0F70_P_3, + VEX_W_0F71_R_2_P_2, + VEX_W_0F71_R_4_P_2, + VEX_W_0F71_R_6_P_2, + VEX_W_0F72_R_2_P_2, + VEX_W_0F72_R_4_P_2, + VEX_W_0F72_R_6_P_2, + VEX_W_0F73_R_2_P_2, + VEX_W_0F73_R_3_P_2, + VEX_W_0F73_R_6_P_2, + VEX_W_0F73_R_7_P_2, + VEX_W_0F74_P_2, + VEX_W_0F75_P_2, + VEX_W_0F76_P_2, + VEX_W_0F77_P_0, + VEX_W_0F7C_P_2, + VEX_W_0F7C_P_3, + VEX_W_0F7D_P_2, + VEX_W_0F7D_P_3, + VEX_W_0F7E_P_1, + VEX_W_0F7F_P_1, + VEX_W_0F7F_P_2, + VEX_W_0FAE_R_2_M_0, + VEX_W_0FAE_R_3_M_0, + VEX_W_0FC2_P_0, + VEX_W_0FC2_P_1, + VEX_W_0FC2_P_2, + VEX_W_0FC2_P_3, + VEX_W_0FC4_P_2, + VEX_W_0FC5_P_2, + VEX_W_0FD0_P_2, + VEX_W_0FD0_P_3, + VEX_W_0FD1_P_2, + VEX_W_0FD2_P_2, + VEX_W_0FD3_P_2, + VEX_W_0FD4_P_2, + VEX_W_0FD5_P_2, + VEX_W_0FD6_P_2, + VEX_W_0FD7_P_2_M_1, + VEX_W_0FD8_P_2, + VEX_W_0FD9_P_2, + VEX_W_0FDA_P_2, + VEX_W_0FDB_P_2, + VEX_W_0FDC_P_2, + VEX_W_0FDD_P_2, + VEX_W_0FDE_P_2, + VEX_W_0FDF_P_2, + VEX_W_0FE0_P_2, + VEX_W_0FE1_P_2, + VEX_W_0FE2_P_2, + VEX_W_0FE3_P_2, + VEX_W_0FE4_P_2, + VEX_W_0FE5_P_2, + VEX_W_0FE6_P_1, + VEX_W_0FE6_P_2, + VEX_W_0FE6_P_3, + VEX_W_0FE7_P_2_M_0, + VEX_W_0FE8_P_2, + VEX_W_0FE9_P_2, + VEX_W_0FEA_P_2, + VEX_W_0FEB_P_2, + VEX_W_0FEC_P_2, + VEX_W_0FED_P_2, + VEX_W_0FEE_P_2, + VEX_W_0FEF_P_2, + VEX_W_0FF0_P_3_M_0, + VEX_W_0FF1_P_2, + VEX_W_0FF2_P_2, + VEX_W_0FF3_P_2, + VEX_W_0FF4_P_2, + VEX_W_0FF5_P_2, + VEX_W_0FF6_P_2, + VEX_W_0FF7_P_2, + VEX_W_0FF8_P_2, + VEX_W_0FF9_P_2, + VEX_W_0FFA_P_2, + VEX_W_0FFB_P_2, + VEX_W_0FFC_P_2, + VEX_W_0FFD_P_2, + VEX_W_0FFE_P_2, + VEX_W_0F3800_P_2, + VEX_W_0F3801_P_2, + VEX_W_0F3802_P_2, + VEX_W_0F3803_P_2, + VEX_W_0F3804_P_2, + VEX_W_0F3805_P_2, + VEX_W_0F3806_P_2, + VEX_W_0F3807_P_2, + VEX_W_0F3808_P_2, + VEX_W_0F3809_P_2, + VEX_W_0F380A_P_2, + VEX_W_0F380B_P_2, + VEX_W_0F380C_P_2, + VEX_W_0F380D_P_2, + VEX_W_0F380E_P_2, + VEX_W_0F380F_P_2, + VEX_W_0F3816_P_2, + VEX_W_0F3817_P_2, + VEX_W_0F3818_P_2, + VEX_W_0F3819_P_2, + VEX_W_0F381A_P_2_M_0, + VEX_W_0F381C_P_2, + VEX_W_0F381D_P_2, + VEX_W_0F381E_P_2, + VEX_W_0F3820_P_2, + VEX_W_0F3821_P_2, + VEX_W_0F3822_P_2, + VEX_W_0F3823_P_2, + VEX_W_0F3824_P_2, + VEX_W_0F3825_P_2, + VEX_W_0F3828_P_2, + VEX_W_0F3829_P_2, + VEX_W_0F382A_P_2_M_0, + VEX_W_0F382B_P_2, + VEX_W_0F382C_P_2_M_0, + VEX_W_0F382D_P_2_M_0, + VEX_W_0F382E_P_2_M_0, + VEX_W_0F382F_P_2_M_0, + VEX_W_0F3830_P_2, + VEX_W_0F3831_P_2, + VEX_W_0F3832_P_2, + VEX_W_0F3833_P_2, + VEX_W_0F3834_P_2, + VEX_W_0F3835_P_2, + VEX_W_0F3836_P_2, + VEX_W_0F3837_P_2, + VEX_W_0F3838_P_2, + VEX_W_0F3839_P_2, + VEX_W_0F383A_P_2, + VEX_W_0F383B_P_2, + VEX_W_0F383C_P_2, + VEX_W_0F383D_P_2, + VEX_W_0F383E_P_2, + VEX_W_0F383F_P_2, + VEX_W_0F3840_P_2, + VEX_W_0F3841_P_2, + VEX_W_0F3846_P_2, + VEX_W_0F3858_P_2, + VEX_W_0F3859_P_2, + VEX_W_0F385A_P_2_M_0, + VEX_W_0F3878_P_2, + VEX_W_0F3879_P_2, + VEX_W_0F38DB_P_2, + VEX_W_0F38DC_P_2, + VEX_W_0F38DD_P_2, + VEX_W_0F38DE_P_2, + VEX_W_0F38DF_P_2, + VEX_W_0F3A00_P_2, + VEX_W_0F3A01_P_2, + VEX_W_0F3A02_P_2, + VEX_W_0F3A04_P_2, + VEX_W_0F3A05_P_2, + VEX_W_0F3A06_P_2, + VEX_W_0F3A08_P_2, + VEX_W_0F3A09_P_2, + VEX_W_0F3A0A_P_2, + VEX_W_0F3A0B_P_2, + VEX_W_0F3A0C_P_2, + VEX_W_0F3A0D_P_2, + VEX_W_0F3A0E_P_2, + VEX_W_0F3A0F_P_2, + VEX_W_0F3A14_P_2, + VEX_W_0F3A15_P_2, + VEX_W_0F3A18_P_2, + VEX_W_0F3A19_P_2, + VEX_W_0F3A20_P_2, + VEX_W_0F3A21_P_2, + VEX_W_0F3A38_P_2, + VEX_W_0F3A39_P_2, + VEX_W_0F3A40_P_2, + VEX_W_0F3A41_P_2, + VEX_W_0F3A42_P_2, + VEX_W_0F3A44_P_2, + VEX_W_0F3A46_P_2, + VEX_W_0F3A48_P_2, + VEX_W_0F3A49_P_2, + VEX_W_0F3A4A_P_2, + VEX_W_0F3A4B_P_2, + VEX_W_0F3A4C_P_2, + VEX_W_0F3A60_P_2, + VEX_W_0F3A61_P_2, + VEX_W_0F3A62_P_2, + VEX_W_0F3A63_P_2, + VEX_W_0F3ADF_P_2 }; typedef void (*op_rtn) (int bytemode, int sizeflag); @@ -1347,6 +1664,7 @@ struct dis386 { "LB" => print "abs" in 64bit mode and behave as 'B' otherwise "LS" => print "abs" in 64bit mode and behave as 'S' otherwise "LV" => print "abs" for 64bit operand and behave as 'S' otherwise + "LW" => print 'd', 'q' depending on the VEX.W bit Many of the above letters print nothing in Intel mode. See "putop" for the details. @@ -1356,8 +1674,8 @@ struct dis386 { static const struct dis386 dis386[] = { /* 00 */ - { "addB", { Eb, Gb } }, - { "addS", { Ev, Gv } }, + { "addB", { Ebh1, Gb } }, + { "addS", { Evh1, Gv } }, { "addB", { Gb, EbS } }, { "addS", { Gv, EvS } }, { "addB", { AL, Ib } }, @@ -1365,17 +1683,17 @@ static const struct dis386 dis386[] = { { X86_64_TABLE (X86_64_06) }, { X86_64_TABLE (X86_64_07) }, /* 08 */ - { "orB", { Eb, Gb } }, - { "orS", { Ev, Gv } }, + { "orB", { Ebh1, Gb } }, + { "orS", { Evh1, Gv } }, { "orB", { Gb, EbS } }, { "orS", { Gv, EvS } }, { "orB", { AL, Ib } }, { "orS", { eAX, Iv } }, { X86_64_TABLE (X86_64_0D) }, - { "(bad)", { XX } }, /* 0x0f extended opcode escape */ + { Bad_Opcode }, /* 0x0f extended opcode escape */ /* 10 */ - { "adcB", { Eb, Gb } }, - { "adcS", { Ev, Gv } }, + { "adcB", { Ebh1, Gb } }, + { "adcS", { Evh1, Gv } }, { "adcB", { Gb, EbS } }, { "adcS", { Gv, EvS } }, { "adcB", { AL, Ib } }, @@ -1383,8 +1701,8 @@ static const struct dis386 dis386[] = { { X86_64_TABLE (X86_64_16) }, { X86_64_TABLE (X86_64_17) }, /* 18 */ - { "sbbB", { Eb, Gb } }, - { "sbbS", { Ev, Gv } }, + { "sbbB", { Ebh1, Gb } }, + { "sbbS", { Evh1, Gv } }, { "sbbB", { Gb, EbS } }, { "sbbS", { Gv, EvS } }, { "sbbB", { AL, Ib } }, @@ -1392,31 +1710,31 @@ static const struct dis386 dis386[] = { { X86_64_TABLE (X86_64_1E) }, { X86_64_TABLE (X86_64_1F) }, /* 20 */ - { "andB", { Eb, Gb } }, - { "andS", { Ev, Gv } }, + { "andB", { Ebh1, Gb } }, + { "andS", { Evh1, Gv } }, { "andB", { Gb, EbS } }, { "andS", { Gv, EvS } }, { "andB", { AL, Ib } }, { "andS", { eAX, Iv } }, - { "(bad)", { XX } }, /* SEG ES prefix */ + { Bad_Opcode }, /* SEG ES prefix */ { X86_64_TABLE (X86_64_27) }, /* 28 */ - { "subB", { Eb, Gb } }, - { "subS", { Ev, Gv } }, + { "subB", { Ebh1, Gb } }, + { "subS", { Evh1, Gv } }, { "subB", { Gb, EbS } }, { "subS", { Gv, EvS } }, { "subB", { AL, Ib } }, { "subS", { eAX, Iv } }, - { "(bad)", { XX } }, /* SEG CS prefix */ + { Bad_Opcode }, /* SEG CS prefix */ { X86_64_TABLE (X86_64_2F) }, /* 30 */ - { "xorB", { Eb, Gb } }, - { "xorS", { Ev, Gv } }, + { "xorB", { Ebh1, Gb } }, + { "xorS", { Evh1, Gv } }, { "xorB", { Gb, EbS } }, { "xorS", { Gv, EvS } }, { "xorB", { AL, Ib } }, { "xorS", { eAX, Iv } }, - { "(bad)", { XX } }, /* SEG SS prefix */ + { Bad_Opcode }, /* SEG SS prefix */ { X86_64_TABLE (X86_64_37) }, /* 38 */ { "cmpB", { Eb, Gb } }, @@ -1425,7 +1743,7 @@ static const struct dis386 dis386[] = { { "cmpS", { Gv, EvS } }, { "cmpB", { AL, Ib } }, { "cmpS", { eAX, Iv } }, - { "(bad)", { XX } }, /* SEG DS prefix */ + { Bad_Opcode }, /* SEG DS prefix */ { X86_64_TABLE (X86_64_3F) }, /* 40 */ { "inc{S|}", { RMeAX } }, @@ -1468,14 +1786,14 @@ static const struct dis386 dis386[] = { { 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 */ - { "(bad)", { XX } }, /* adr size prefix */ + { Bad_Opcode }, /* seg fs */ + { Bad_Opcode }, /* seg gs */ + { Bad_Opcode }, /* op size prefix */ + { Bad_Opcode }, /* adr size prefix */ /* 68 */ - { "pushT", { Iq } }, + { "pushT", { sIv } }, { "imulS", { Gv, Ev, Iv } }, - { "pushT", { sIb } }, + { "pushT", { sIbT } }, { "imulS", { Gv, Ev, sIb } }, { "ins{b|}", { Ybr, indirDX } }, { X86_64_TABLE (X86_64_6D) }, @@ -1502,15 +1820,15 @@ static const struct dis386 dis386[] = { /* 80 */ { REG_TABLE (REG_80) }, { REG_TABLE (REG_81) }, - { "(bad)", { XX } }, + { Bad_Opcode }, { REG_TABLE (REG_82) }, { "testB", { Eb, Gb } }, { "testS", { Ev, Gv } }, - { "xchgB", { Eb, Gb } }, - { "xchgS", { Ev, Gv } }, + { "xchgB", { Ebh2, Gb } }, + { "xchgS", { Evh2, Gv } }, /* 88 */ - { "movB", { Eb, Gb } }, - { "movS", { Ev, Gv } }, + { "movB", { Ebh3, Gb } }, + { "movS", { Evh3, Gv } }, { "movB", { Gb, EbS } }, { "movS", { Gv, EvS } }, { "movD", { Sv, Sw } }, @@ -1530,7 +1848,7 @@ static const struct dis386 dis386[] = { { "cW{t|}R", { XX } }, { "cR{t|}O", { XX } }, { X86_64_TABLE (X86_64_9A) }, - { "(bad)", { XX } }, /* fwait */ + { Bad_Opcode }, /* fwait */ { "pushfT", { XX } }, { "popfT", { XX } }, { "sahf", { XX } }, @@ -1596,7 +1914,7 @@ static const struct dis386 dis386[] = { { REG_TABLE (REG_D3) }, { X86_64_TABLE (X86_64_D4) }, { X86_64_TABLE (X86_64_D5) }, - { "(bad)", { XX } }, + { Bad_Opcode }, { "xlat", { DSBX } }, /* d8 */ { FLOAT }, @@ -1626,10 +1944,10 @@ static const struct dis386 dis386[] = { { "outB", { indirDX, AL } }, { "outG", { indirDX, zAX } }, /* f0 */ - { "(bad)", { XX } }, /* lock prefix */ + { Bad_Opcode }, /* lock prefix */ { "icebp", { XX } }, - { "(bad)", { XX } }, /* repne */ - { "(bad)", { XX } }, /* repz */ + { Bad_Opcode }, /* repne */ + { Bad_Opcode }, /* repz */ { "hlt", { XX } }, { "cmc", { XX } }, { REG_TABLE (REG_F6) }, @@ -1651,16 +1969,16 @@ static const struct dis386 dis386_twobyte[] = { { REG_TABLE (REG_0F01 ) }, { "larS", { Gv, Ew } }, { "lslS", { Gv, Ew } }, - { "(bad)", { XX } }, + { Bad_Opcode }, { "syscall", { XX } }, { "clts", { XX } }, { "sysretP", { XX } }, /* 08 */ { "invd", { XX } }, { "wbinvd", { XX } }, - { "(bad)", { XX } }, - { "ud2a", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { "ud2", { XX } }, + { Bad_Opcode }, { REG_TABLE (REG_0F0D) }, { "femms", { XX } }, { "", { MX, EM, OPSUF } }, /* See OP_3DNowSuffix. */ @@ -1688,9 +2006,9 @@ static const struct dis386 dis386_twobyte[] = { { MOD_TABLE (MOD_0F22) }, { MOD_TABLE (MOD_0F23) }, { MOD_TABLE (MOD_0F24) }, - { "(bad)", { XX } }, + { Bad_Opcode }, { MOD_TABLE (MOD_0F26) }, - { "(bad)", { XX } }, + { Bad_Opcode }, /* 28 */ { "movapX", { XM, EXx } }, { "movapX", { EXxS, XM } }, @@ -1707,17 +2025,17 @@ static const struct dis386 dis386_twobyte[] = { { "rdpmc", { XX } }, { "sysenter", { XX } }, { "sysexit", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, { "getsec", { XX } }, /* 38 */ { THREE_BYTE_TABLE (THREE_BYTE_0F38) }, - { "(bad)", { XX } }, + { Bad_Opcode }, { THREE_BYTE_TABLE (THREE_BYTE_0F3A) }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 40 */ { "cmovoS", { Gv, Ev } }, { "cmovnoS", { Gv, Ev } }, @@ -1785,7 +2103,7 @@ static const struct dis386 dis386_twobyte[] = { { PREFIX_TABLE (PREFIX_0F78) }, { PREFIX_TABLE (PREFIX_0F79) }, { THREE_BYTE_TABLE (THREE_BYTE_0F7A) }, - { "(bad)", { XX } }, + { Bad_Opcode }, { PREFIX_TABLE (PREFIX_0F7C) }, { PREFIX_TABLE (PREFIX_0F7D) }, { PREFIX_TABLE (PREFIX_0F7E) }, @@ -1839,32 +2157,32 @@ static const struct dis386 dis386_twobyte[] = { { "pushT", { gs } }, { "popT", { gs } }, { "rsm", { XX } }, - { "btsS", { Ev, Gv } }, + { "btsS", { Evh1, Gv } }, { "shrdS", { Ev, Gv, Ib } }, { "shrdS", { Ev, Gv, CL } }, { REG_TABLE (REG_0FAE) }, { "imulS", { Gv, Ev } }, /* b0 */ - { "cmpxchgB", { Eb, Gb } }, - { "cmpxchgS", { Ev, Gv } }, + { "cmpxchgB", { Ebh1, Gb } }, + { "cmpxchgS", { Evh1, Gv } }, { MOD_TABLE (MOD_0FB2) }, - { "btrS", { Ev, Gv } }, + { "btrS", { Evh1, Gv } }, { MOD_TABLE (MOD_0FB4) }, { MOD_TABLE (MOD_0FB5) }, { "movz{bR|x}", { Gv, Eb } }, { "movz{wR|x}", { Gv, Ew } }, /* yes, there really is movzww ! */ /* b8 */ { PREFIX_TABLE (PREFIX_0FB8) }, - { "ud2b", { XX } }, + { "ud1", { XX } }, { REG_TABLE (REG_0FBA) }, - { "btcS", { Ev, Gv } }, - { "bsfS", { Gv, Ev } }, + { "btcS", { Evh1, Gv } }, + { PREFIX_TABLE (PREFIX_0FBC) }, { PREFIX_TABLE (PREFIX_0FBD) }, { "movs{bR|x}", { Gv, Eb } }, { "movs{wR|x}", { Gv, Ew } }, /* yes, there really is movsww ! */ /* c0 */ - { "xaddB", { Eb, Gb } }, - { "xaddS", { Ev, Gv } }, + { "xaddB", { Ebh1, Gb } }, + { "xaddS", { Evh1, Gv } }, { PREFIX_TABLE (PREFIX_0FC2) }, { PREFIX_TABLE (PREFIX_0FC3) }, { "pinsrw", { MX, Edqw, Ib } }, @@ -1933,7 +2251,7 @@ static const struct dis386 dis386_twobyte[] = { { "paddb", { MX, EM } }, { "paddw", { MX, EM } }, { "paddd", { MX, EM } }, - { "(bad)", { XX } }, + { Bad_Opcode }, }; static const unsigned char onebyte_has_modrm[256] = { @@ -2009,6 +2327,13 @@ static struct } modrm; static unsigned char need_modrm; +static struct + { + int scale; + int index; + int base; + } +sib; static struct { int register_specifier; @@ -2098,50 +2423,86 @@ static const char *att_index16[] = { "%bx,%si", "%bx,%di", "%bp,%si", "%bp,%di", "%si", "%di", "%bp", "%bx" }; +static const char **names_mm; +static const char *intel_names_mm[] = { + "mm0", "mm1", "mm2", "mm3", + "mm4", "mm5", "mm6", "mm7" +}; +static const char *att_names_mm[] = { + "%mm0", "%mm1", "%mm2", "%mm3", + "%mm4", "%mm5", "%mm6", "%mm7" +}; + +static const char **names_xmm; +static const char *intel_names_xmm[] = { + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15" +}; +static const char *att_names_xmm[] = { + "%xmm0", "%xmm1", "%xmm2", "%xmm3", + "%xmm4", "%xmm5", "%xmm6", "%xmm7", + "%xmm8", "%xmm9", "%xmm10", "%xmm11", + "%xmm12", "%xmm13", "%xmm14", "%xmm15" +}; + +static const char **names_ymm; +static const char *intel_names_ymm[] = { + "ymm0", "ymm1", "ymm2", "ymm3", + "ymm4", "ymm5", "ymm6", "ymm7", + "ymm8", "ymm9", "ymm10", "ymm11", + "ymm12", "ymm13", "ymm14", "ymm15" +}; +static const char *att_names_ymm[] = { + "%ymm0", "%ymm1", "%ymm2", "%ymm3", + "%ymm4", "%ymm5", "%ymm6", "%ymm7", + "%ymm8", "%ymm9", "%ymm10", "%ymm11", + "%ymm12", "%ymm13", "%ymm14", "%ymm15" +}; + static const struct dis386 reg_table[][8] = { /* REG_80 */ { - { "addA", { Eb, Ib } }, - { "orA", { Eb, Ib } }, - { "adcA", { Eb, Ib } }, - { "sbbA", { Eb, Ib } }, - { "andA", { Eb, Ib } }, - { "subA", { Eb, Ib } }, - { "xorA", { Eb, Ib } }, + { "addA", { Ebh1, Ib } }, + { "orA", { Ebh1, Ib } }, + { "adcA", { Ebh1, Ib } }, + { "sbbA", { Ebh1, Ib } }, + { "andA", { Ebh1, Ib } }, + { "subA", { Ebh1, Ib } }, + { "xorA", { Ebh1, Ib } }, { "cmpA", { Eb, Ib } }, }, /* REG_81 */ { - { "addQ", { Ev, Iv } }, - { "orQ", { Ev, Iv } }, - { "adcQ", { Ev, Iv } }, - { "sbbQ", { Ev, Iv } }, - { "andQ", { Ev, Iv } }, - { "subQ", { Ev, Iv } }, - { "xorQ", { Ev, Iv } }, + { "addQ", { Evh1, Iv } }, + { "orQ", { Evh1, Iv } }, + { "adcQ", { Evh1, Iv } }, + { "sbbQ", { Evh1, Iv } }, + { "andQ", { Evh1, Iv } }, + { "subQ", { Evh1, Iv } }, + { "xorQ", { Evh1, Iv } }, { "cmpQ", { Ev, Iv } }, }, /* REG_82 */ { - { "addQ", { Ev, sIb } }, - { "orQ", { Ev, sIb } }, - { "adcQ", { Ev, sIb } }, - { "sbbQ", { Ev, sIb } }, - { "andQ", { Ev, sIb } }, - { "subQ", { Ev, sIb } }, - { "xorQ", { Ev, sIb } }, + { "addQ", { Evh1, sIb } }, + { "orQ", { Evh1, sIb } }, + { "adcQ", { Evh1, sIb } }, + { "sbbQ", { Evh1, sIb } }, + { "andQ", { Evh1, sIb } }, + { "subQ", { Evh1, sIb } }, + { "xorQ", { Evh1, sIb } }, { "cmpQ", { Ev, sIb } }, }, /* REG_8F */ { { "popU", { stackEv } }, { XOP_8F_TABLE (XOP_09) }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, { XOP_8F_TABLE (XOP_09) }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, }, /* REG_C0 */ { @@ -2151,7 +2512,7 @@ static const struct dis386 reg_table[][8] = { { "rcrA", { Eb, Ib } }, { "shlA", { Eb, Ib } }, { "shrA", { Eb, Ib } }, - { "(bad)", { XX } }, + { Bad_Opcode }, { "sarA", { Eb, Ib } }, }, /* REG_C1 */ @@ -2162,30 +2523,30 @@ static const struct dis386 reg_table[][8] = { { "rcrQ", { Ev, Ib } }, { "shlQ", { Ev, Ib } }, { "shrQ", { Ev, Ib } }, - { "(bad)", { XX } }, + { Bad_Opcode }, { "sarQ", { Ev, Ib } }, }, /* REG_C6 */ { - { "movA", { Eb, Ib } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { "movA", { Ebh3, Ib } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { MOD_TABLE (MOD_C6_REG_7) }, }, /* REG_C7 */ { - { "movQ", { Ev, Iv } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { "movQ", { Evh3, Iv } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { MOD_TABLE (MOD_C7_REG_7) }, }, /* REG_D0 */ { @@ -2195,7 +2556,7 @@ static const struct dis386 reg_table[][8] = { { "rcrA", { Eb, I1 } }, { "shlA", { Eb, I1 } }, { "shrA", { Eb, I1 } }, - { "(bad)", { XX } }, + { Bad_Opcode }, { "sarA", { Eb, I1 } }, }, /* REG_D1 */ @@ -2206,7 +2567,7 @@ static const struct dis386 reg_table[][8] = { { "rcrQ", { Ev, I1 } }, { "shlQ", { Ev, I1 } }, { "shrQ", { Ev, I1 } }, - { "(bad)", { XX } }, + { Bad_Opcode }, { "sarQ", { Ev, I1 } }, }, /* REG_D2 */ @@ -2217,7 +2578,7 @@ static const struct dis386 reg_table[][8] = { { "rcrA", { Eb, CL } }, { "shlA", { Eb, CL } }, { "shrA", { Eb, CL } }, - { "(bad)", { XX } }, + { Bad_Opcode }, { "sarA", { Eb, CL } }, }, /* REG_D3 */ @@ -2228,15 +2589,15 @@ static const struct dis386 reg_table[][8] = { { "rcrQ", { Ev, CL } }, { "shlQ", { Ev, CL } }, { "shrQ", { Ev, CL } }, - { "(bad)", { XX } }, + { Bad_Opcode }, { "sarQ", { Ev, CL } }, }, /* REG_F6 */ { { "testA", { Eb, Ib } }, - { "(bad)", { XX } }, - { "notA", { Eb } }, - { "negA", { Eb } }, + { Bad_Opcode }, + { "notA", { Ebh1 } }, + { "negA", { Ebh1 } }, { "mulA", { Eb } }, /* Don't print the implicit %al register, */ { "imulA", { Eb } }, /* to distinguish these opcodes from other */ { "divA", { Eb } }, /* mul/imul opcodes. Do the same for div */ @@ -2245,9 +2606,9 @@ static const struct dis386 reg_table[][8] = { /* REG_F7 */ { { "testQ", { Ev, Iv } }, - { "(bad)", { XX } }, - { "notQ", { Ev } }, - { "negQ", { Ev } }, + { Bad_Opcode }, + { "notQ", { Evh1 } }, + { "negQ", { Evh1 } }, { "mulQ", { Ev } }, /* Don't print the implicit register. */ { "imulQ", { Ev } }, { "divQ", { Ev } }, @@ -2255,25 +2616,19 @@ static const struct dis386 reg_table[][8] = { }, /* REG_FE */ { - { "incA", { Eb } }, - { "decA", { Eb } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { "incA", { Ebh1 } }, + { "decA", { Ebh1 } }, }, /* REG_FF */ { - { "incQ", { Ev } }, - { "decQ", { Ev } }, - { "callT", { indirEv } }, - { "JcallT", { indirEp } }, - { "jmpT", { indirEv } }, - { "JjmpT", { indirEp } }, + { "incQ", { Evh1 } }, + { "decQ", { Evh1 } }, + { "call{T|}", { indirEv } }, + { "Jcall{T|}", { indirEp } }, + { "jmp{T|}", { indirEv } }, + { "Jjmp{T|}", { indirEp } }, { "pushU", { stackEv } }, - { "(bad)", { XX } }, + { Bad_Opcode }, }, /* REG_0F00 */ { @@ -2283,8 +2638,8 @@ static const struct dis386 reg_table[][8] = { { "ltr", { Ew } }, { "verr", { Ew } }, { "verw", { Ew } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, }, /* REG_0F01 */ { @@ -2293,20 +2648,20 @@ static const struct dis386 reg_table[][8] = { { MOD_TABLE (MOD_0F01_REG_2) }, { MOD_TABLE (MOD_0F01_REG_3) }, { "smswD", { Sv } }, - { "(bad)", { XX } }, + { Bad_Opcode }, { "lmsw", { Ew } }, { MOD_TABLE (MOD_0F01_REG_7) }, }, /* REG_0F0D */ { - { "prefetch", { Eb } }, - { "prefetchw", { Eb } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { "prefetch", { Mb } }, + { "prefetchw", { Mb } }, + { "prefetch", { Mb } }, + { "prefetch", { Mb } }, + { "prefetch", { Mb } }, + { "prefetch", { Mb } }, + { "prefetch", { Mb } }, + { "prefetch", { Mb } }, }, /* REG_0F18 */ { @@ -2314,41 +2669,39 @@ static const struct dis386 reg_table[][8] = { { MOD_TABLE (MOD_0F18_REG_1) }, { MOD_TABLE (MOD_0F18_REG_2) }, { MOD_TABLE (MOD_0F18_REG_3) }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { MOD_TABLE (MOD_0F18_REG_4) }, + { MOD_TABLE (MOD_0F18_REG_5) }, + { MOD_TABLE (MOD_0F18_REG_6) }, + { MOD_TABLE (MOD_0F18_REG_7) }, }, /* REG_0F71 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { MOD_TABLE (MOD_0F71_REG_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, { MOD_TABLE (MOD_0F71_REG_4) }, - { "(bad)", { XX } }, + { Bad_Opcode }, { MOD_TABLE (MOD_0F71_REG_6) }, - { "(bad)", { XX } }, }, /* REG_0F72 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { MOD_TABLE (MOD_0F72_REG_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, { MOD_TABLE (MOD_0F72_REG_4) }, - { "(bad)", { XX } }, + { Bad_Opcode }, { MOD_TABLE (MOD_0F72_REG_6) }, - { "(bad)", { XX } }, }, /* REG_0F73 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { MOD_TABLE (MOD_0F73_REG_2) }, { MOD_TABLE (MOD_0F73_REG_3) }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { MOD_TABLE (MOD_0F73_REG_6) }, { MOD_TABLE (MOD_0F73_REG_7) }, }, @@ -2357,11 +2710,6 @@ static const struct dis386 reg_table[][8] = { { "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 } } }, }, /* REG_0FA7 */ { @@ -2371,8 +2719,6 @@ static const struct dis386 reg_table[][8] = { { "xcrypt-ctr", { { OP_0f07, 0 } } }, { "xcrypt-cfb", { { OP_0f07, 0 } } }, { "xcrypt-ofb", { { OP_0f07, 0 } } }, - { "(bad)", { { OP_0f07, 0 } } }, - { "(bad)", { { OP_0f07, 0 } } }, }, /* REG_0FAE */ { @@ -2387,91 +2733,101 @@ static const struct dis386 reg_table[][8] = { }, /* REG_0FBA */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, { "btQ", { Ev, Ib } }, - { "btsQ", { Ev, Ib } }, - { "btrQ", { Ev, Ib } }, - { "btcQ", { Ev, Ib } }, + { "btsQ", { Evh1, Ib } }, + { "btrQ", { Evh1, Ib } }, + { "btcQ", { Evh1, Ib } }, }, /* REG_0FC7 */ { - { "(bad)", { XX } }, + { Bad_Opcode }, { "cmpxchg8b", { { CMPXCHG8B_Fixup, q_mode } } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, { MOD_TABLE (MOD_0FC7_REG_6) }, { MOD_TABLE (MOD_0FC7_REG_7) }, }, - /* REG_VEX_71 */ - { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { MOD_TABLE (MOD_VEX_71_REG_2) }, - { "(bad)", { XX } }, - { MOD_TABLE (MOD_VEX_71_REG_4) }, - { "(bad)", { XX } }, - { MOD_TABLE (MOD_VEX_71_REG_6) }, - { "(bad)", { XX } }, - }, - /* REG_VEX_72 */ - { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { MOD_TABLE (MOD_VEX_72_REG_2) }, - { "(bad)", { XX } }, - { MOD_TABLE (MOD_VEX_72_REG_4) }, - { "(bad)", { XX } }, - { MOD_TABLE (MOD_VEX_72_REG_6) }, - { "(bad)", { XX } }, - }, - /* REG_VEX_73 */ - { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { MOD_TABLE (MOD_VEX_73_REG_2) }, - { MOD_TABLE (MOD_VEX_73_REG_3) }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { MOD_TABLE (MOD_VEX_73_REG_6) }, - { MOD_TABLE (MOD_VEX_73_REG_7) }, - }, - /* REG_VEX_AE */ - { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { MOD_TABLE (MOD_VEX_AE_REG_2) }, - { MOD_TABLE (MOD_VEX_AE_REG_3) }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + /* REG_VEX_0F71 */ + { + { Bad_Opcode }, + { Bad_Opcode }, + { MOD_TABLE (MOD_VEX_0F71_REG_2) }, + { Bad_Opcode }, + { MOD_TABLE (MOD_VEX_0F71_REG_4) }, + { Bad_Opcode }, + { MOD_TABLE (MOD_VEX_0F71_REG_6) }, + }, + /* REG_VEX_0F72 */ + { + { Bad_Opcode }, + { Bad_Opcode }, + { MOD_TABLE (MOD_VEX_0F72_REG_2) }, + { Bad_Opcode }, + { MOD_TABLE (MOD_VEX_0F72_REG_4) }, + { Bad_Opcode }, + { MOD_TABLE (MOD_VEX_0F72_REG_6) }, + }, + /* REG_VEX_0F73 */ + { + { Bad_Opcode }, + { Bad_Opcode }, + { MOD_TABLE (MOD_VEX_0F73_REG_2) }, + { MOD_TABLE (MOD_VEX_0F73_REG_3) }, + { Bad_Opcode }, + { Bad_Opcode }, + { MOD_TABLE (MOD_VEX_0F73_REG_6) }, + { MOD_TABLE (MOD_VEX_0F73_REG_7) }, + }, + /* REG_VEX_0FAE */ + { + { Bad_Opcode }, + { Bad_Opcode }, + { MOD_TABLE (MOD_VEX_0FAE_REG_2) }, + { MOD_TABLE (MOD_VEX_0FAE_REG_3) }, + }, + /* REG_VEX_0F38F3 */ + { + { Bad_Opcode }, + { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_1) }, + { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_2) }, + { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_3) }, }, /* REG_XOP_LWPCB */ { { "llwpcb", { { OP_LWPCB_E, 0 } } }, { "slwpcb", { { OP_LWPCB_E, 0 } } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, }, /* REG_XOP_LWP */ { - { "lwpins", { { OP_LWP_E, 0 }, Ed, { OP_LWP_I, 0 } } }, - { "lwpval", { { OP_LWP_E, 0 }, Ed, { OP_LWP_I, 0 } } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { "lwpins", { { OP_LWP_E, 0 }, Ed, Iq } }, + { "lwpval", { { OP_LWP_E, 0 }, Ed, Iq } }, + }, + /* REG_XOP_TBM_01 */ + { + { Bad_Opcode }, + { "blcfill", { { OP_LWP_E, 0 }, Ev } }, + { "blsfill", { { OP_LWP_E, 0 }, Ev } }, + { "blcs", { { OP_LWP_E, 0 }, Ev } }, + { "tzmsk", { { OP_LWP_E, 0 }, Ev } }, + { "blcic", { { OP_LWP_E, 0 }, Ev } }, + { "blsic", { { OP_LWP_E, 0 }, Ev } }, + { "t1mskc", { { OP_LWP_E, 0 }, Ev } }, + }, + /* REG_XOP_TBM_02 */ + { + { Bad_Opcode }, + { "blcmsk", { { OP_LWP_E, 0 }, Ev } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { "blci", { { OP_LWP_E, 0 }, Ev } }, }, }; @@ -2481,7 +2837,6 @@ static const struct dis386 prefix_table[][4] = { { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } } }, { "pause", { XX } }, { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } } }, - { "(bad)", { XX } }, }, /* PREFIX_0F10 */ @@ -2513,7 +2868,6 @@ static const struct dis386 prefix_table[][4] = { { MOD_TABLE (MOD_0F16_PREFIX_0) }, { "movshdup", { XM, EXx } }, { "movhpd", { XM, EXq } }, - { "(bad)", { XX } }, }, /* PREFIX_0F2A */ @@ -2550,18 +2904,16 @@ static const struct dis386 prefix_table[][4] = { /* PREFIX_0F2E */ { - { "ucomiss",{ XM, EXd } }, - { "(bad)", { XX } }, - { "ucomisd",{ XM, EXq } }, - { "(bad)", { XX } }, + { "ucomiss",{ XM, EXd } }, + { Bad_Opcode }, + { "ucomisd",{ XM, EXq } }, }, /* PREFIX_0F2F */ { { "comiss", { XM, EXd } }, - { "(bad)", { XX } }, + { Bad_Opcode }, { "comisd", { XM, EXq } }, - { "(bad)", { XX } }, }, /* PREFIX_0F51 */ @@ -2576,16 +2928,12 @@ static const struct dis386 prefix_table[][4] = { { { "rsqrtps",{ XM, EXx } }, { "rsqrtss",{ XM, EXd } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, }, /* PREFIX_0F53 */ { { "rcpps", { XM, EXx } }, { "rcpss", { XM, EXd } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, }, /* PREFIX_0F58 */ @@ -2617,7 +2965,6 @@ static const struct dis386 prefix_table[][4] = { { "cvtdq2ps", { XM, EXx } }, { "cvttps2dq", { XM, EXx } }, { "cvtps2dq", { XM, EXx } }, - { "(bad)", { XX } }, }, /* PREFIX_0F5C */ @@ -2655,41 +3002,36 @@ static const struct dis386 prefix_table[][4] = { /* PREFIX_0F60 */ { { "punpcklbw",{ MX, EMd } }, - { "(bad)", { XX } }, + { Bad_Opcode }, { "punpcklbw",{ MX, EMx } }, - { "(bad)", { XX } }, }, /* PREFIX_0F61 */ { { "punpcklwd",{ MX, EMd } }, - { "(bad)", { XX } }, + { Bad_Opcode }, { "punpcklwd",{ MX, EMx } }, - { "(bad)", { XX } }, }, /* PREFIX_0F62 */ { { "punpckldq",{ MX, EMd } }, - { "(bad)", { XX } }, + { Bad_Opcode }, { "punpckldq",{ MX, EMx } }, - { "(bad)", { XX } }, }, /* PREFIX_0F6C */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "punpcklqdq", { XM, EXx } }, - { "(bad)", { XX } }, }, /* PREFIX_0F6D */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "punpckhqdq", { XM, EXx } }, - { "(bad)", { XX } }, }, /* PREFIX_0F6F */ @@ -2697,7 +3039,6 @@ static const struct dis386 prefix_table[][4] = { { "movq", { MX, EM } }, { "movdqu", { XM, EXx } }, { "movdqa", { XM, EXx } }, - { "(bad)", { XX } }, }, /* PREFIX_0F70 */ @@ -2710,24 +3051,22 @@ static const struct dis386 prefix_table[][4] = { /* PREFIX_0F73_REG_3 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "psrldq", { XS, Ib } }, - { "(bad)", { XX } }, }, /* PREFIX_0F73_REG_7 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "pslldq", { XS, Ib } }, - { "(bad)", { XX } }, }, /* PREFIX_0F78 */ { {"vmread", { Em, Gm } }, - {"(bad)", { XX } }, + { Bad_Opcode }, {"extrq", { XS, Ib, Ib } }, {"insertq", { XM, XS, Ib, Ib } }, }, @@ -2735,23 +3074,23 @@ static const struct dis386 prefix_table[][4] = { /* PREFIX_0F79 */ { {"vmwrite", { Gm, Em } }, - {"(bad)", { XX } }, + { Bad_Opcode }, {"extrq", { XM, XS } }, {"insertq", { XM, XS } }, }, /* PREFIX_0F7C */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "haddpd", { XM, EXx } }, { "haddps", { XM, EXx } }, }, /* PREFIX_0F7D */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "hsubpd", { XM, EXx } }, { "hsubps", { XM, EXx } }, }, @@ -2761,7 +3100,6 @@ static const struct dis386 prefix_table[][4] = { { "movK", { Edq, MX } }, { "movq", { XM, EXq } }, { "movK", { Edq, XM } }, - { "(bad)", { XX } }, }, /* PREFIX_0F7F */ @@ -2769,15 +3107,43 @@ static const struct dis386 prefix_table[][4] = { { "movq", { EMS, MX } }, { "movdqu", { EXxS, XM } }, { "movdqa", { EXxS, XM } }, - { "(bad)", { XX } }, + }, + + /* PREFIX_0FAE_REG_0 */ + { + { Bad_Opcode }, + { "rdfsbase", { Ev } }, + }, + + /* PREFIX_0FAE_REG_1 */ + { + { Bad_Opcode }, + { "rdgsbase", { Ev } }, + }, + + /* PREFIX_0FAE_REG_2 */ + { + { Bad_Opcode }, + { "wrfsbase", { Ev } }, + }, + + /* PREFIX_0FAE_REG_3 */ + { + { Bad_Opcode }, + { "wrgsbase", { Ev } }, }, /* PREFIX_0FB8 */ { - { "(bad)", { XX } }, + { Bad_Opcode }, { "popcntS", { Gv, Ev } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + }, + + /* PREFIX_0FBC */ + { + { "bsfS", { Gv, Ev } }, + { "tzcntS", { Gv, Ev } }, + { "bsfS", { Gv, Ev } }, }, /* PREFIX_0FBD */ @@ -2785,7 +3151,6 @@ static const struct dis386 prefix_table[][4] = { { "bsrS", { Gv, Ev } }, { "lzcntS", { Gv, Ev } }, { "bsrS", { Gv, Ev } }, - { "(bad)", { XX } }, }, /* PREFIX_0FC2 */ @@ -2799,9 +3164,6 @@ static const struct dis386 prefix_table[][4] = { /* PREFIX_0FC3 */ { { "movntiS", { Ma, Gv } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, }, /* PREFIX_0FC7_REG_6 */ @@ -2809,20 +3171,19 @@ static const struct dis386 prefix_table[][4] = { { "vmptrld",{ Mq } }, { "vmxon", { Mq } }, { "vmclear",{ Mq } }, - { "(bad)", { XX } }, }, /* PREFIX_0FD0 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "addsubpd", { XM, EXx } }, { "addsubps", { XM, EXx } }, }, /* PREFIX_0FD6 */ { - { "(bad)", { XX } }, + { Bad_Opcode }, { "movq2dq",{ XM, MS } }, { "movq", { EXqS, XM } }, { "movdq2q",{ MX, XS } }, @@ -2830,7 +3191,7 @@ static const struct dis386 prefix_table[][4] = { /* PREFIX_0FE6 */ { - { "(bad)", { XX } }, + { Bad_Opcode }, { "cvtdq2pd", { XM, EXq } }, { "cvttpd2dq", { XM, EXx } }, { "cvtpd2dq", { XM, EXx } }, @@ -2839,2583 +3200,2529 @@ static const struct dis386 prefix_table[][4] = { /* PREFIX_0FE7 */ { { "movntq", { Mq, MX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, { MOD_TABLE (MOD_0FE7_PREFIX_2) }, - { "(bad)", { XX } }, }, /* PREFIX_0FF0 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, { MOD_TABLE (MOD_0FF0_PREFIX_3) }, }, /* PREFIX_0FF7 */ { { "maskmovq", { MX, MS } }, - { "(bad)", { XX } }, + { Bad_Opcode }, { "maskmovdqu", { XM, XS } }, - { "(bad)", { XX } }, }, /* PREFIX_0F3810 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "pblendvb", { XM, EXx, XMM0 } }, - { "(bad)", { XX } }, }, /* PREFIX_0F3814 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "blendvps", { XM, EXx, XMM0 } }, - { "(bad)", { XX } }, }, /* PREFIX_0F3815 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "blendvpd", { XM, EXx, XMM0 } }, - { "(bad)", { XX } }, }, /* PREFIX_0F3817 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "ptest", { XM, EXx } }, - { "(bad)", { XX } }, }, /* PREFIX_0F3820 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "pmovsxbw", { XM, EXq } }, - { "(bad)", { XX } }, }, /* PREFIX_0F3821 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "pmovsxbd", { XM, EXd } }, - { "(bad)", { XX } }, }, /* PREFIX_0F3822 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "pmovsxbq", { XM, EXw } }, - { "(bad)", { XX } }, }, /* PREFIX_0F3823 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "pmovsxwd", { XM, EXq } }, - { "(bad)", { XX } }, }, /* PREFIX_0F3824 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "pmovsxwq", { XM, EXd } }, - { "(bad)", { XX } }, }, /* PREFIX_0F3825 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "pmovsxdq", { XM, EXq } }, - { "(bad)", { XX } }, }, /* PREFIX_0F3828 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "pmuldq", { XM, EXx } }, - { "(bad)", { XX } }, }, /* PREFIX_0F3829 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "pcmpeqq", { XM, EXx } }, - { "(bad)", { XX } }, }, /* PREFIX_0F382A */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { MOD_TABLE (MOD_0F382A_PREFIX_2) }, - { "(bad)", { XX } }, }, /* PREFIX_0F382B */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "packusdw", { XM, EXx } }, - { "(bad)", { XX } }, }, /* PREFIX_0F3830 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "pmovzxbw", { XM, EXq } }, - { "(bad)", { XX } }, }, /* PREFIX_0F3831 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "pmovzxbd", { XM, EXd } }, - { "(bad)", { XX } }, }, /* PREFIX_0F3832 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "pmovzxbq", { XM, EXw } }, - { "(bad)", { XX } }, }, /* PREFIX_0F3833 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "pmovzxwd", { XM, EXq } }, - { "(bad)", { XX } }, }, /* PREFIX_0F3834 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "pmovzxwq", { XM, EXd } }, - { "(bad)", { XX } }, }, /* PREFIX_0F3835 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "pmovzxdq", { XM, EXq } }, - { "(bad)", { XX } }, }, /* PREFIX_0F3837 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "pcmpgtq", { XM, EXx } }, - { "(bad)", { XX } }, }, /* PREFIX_0F3838 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "pminsb", { XM, EXx } }, - { "(bad)", { XX } }, }, /* PREFIX_0F3839 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "pminsd", { XM, EXx } }, - { "(bad)", { XX } }, }, /* PREFIX_0F383A */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "pminuw", { XM, EXx } }, - { "(bad)", { XX } }, }, /* PREFIX_0F383B */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "pminud", { XM, EXx } }, - { "(bad)", { XX } }, }, /* PREFIX_0F383C */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "pmaxsb", { XM, EXx } }, - { "(bad)", { XX } }, }, /* PREFIX_0F383D */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "pmaxsd", { XM, EXx } }, - { "(bad)", { XX } }, }, /* PREFIX_0F383E */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "pmaxuw", { XM, EXx } }, - { "(bad)", { XX } }, }, /* PREFIX_0F383F */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "pmaxud", { XM, EXx } }, - { "(bad)", { XX } }, }, /* PREFIX_0F3840 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "pmulld", { XM, EXx } }, - { "(bad)", { XX } }, }, /* PREFIX_0F3841 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "phminposuw", { XM, EXx } }, - { "(bad)", { XX } }, }, /* PREFIX_0F3880 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "invept", { Gm, Mo } }, - { "(bad)", { XX } }, }, /* PREFIX_0F3881 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "invvpid", { Gm, Mo } }, - { "(bad)", { XX } }, + }, + + /* PREFIX_0F3882 */ + { + { Bad_Opcode }, + { Bad_Opcode }, + { "invpcid", { Gm, M } }, }, /* PREFIX_0F38DB */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "aesimc", { XM, EXx } }, - { "(bad)", { XX } }, }, /* PREFIX_0F38DC */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "aesenc", { XM, EXx } }, - { "(bad)", { XX } }, }, /* PREFIX_0F38DD */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "aesenclast", { XM, EXx } }, - { "(bad)", { XX } }, }, /* PREFIX_0F38DE */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "aesdec", { XM, EXx } }, - { "(bad)", { XX } }, }, /* PREFIX_0F38DF */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "aesdeclast", { XM, EXx } }, - { "(bad)", { XX } }, }, /* PREFIX_0F38F0 */ { { "movbeS", { Gv, { MOVBE_Fixup, v_mode } } }, - { "(bad)", { XX } }, + { Bad_Opcode }, { "movbeS", { Gv, { MOVBE_Fixup, v_mode } } }, - { "crc32", { Gdq, { CRC32_Fixup, b_mode } } }, + { "crc32", { Gdq, { CRC32_Fixup, b_mode } } }, }, /* PREFIX_0F38F1 */ { { "movbeS", { { MOVBE_Fixup, v_mode }, Gv } }, - { "(bad)", { XX } }, + { Bad_Opcode }, { "movbeS", { { MOVBE_Fixup, v_mode }, Gv } }, - { "crc32", { Gdq, { CRC32_Fixup, v_mode } } }, + { "crc32", { Gdq, { CRC32_Fixup, v_mode } } }, + }, + + /* PREFIX_0F38F6 */ + { + { Bad_Opcode }, + { "adoxS", { Gdq, Edq} }, + { "adcxS", { Gdq, Edq} }, + { Bad_Opcode }, }, /* PREFIX_0F3A08 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "roundps", { XM, EXx, Ib } }, - { "(bad)", { XX } }, }, /* PREFIX_0F3A09 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "roundpd", { XM, EXx, Ib } }, - { "(bad)", { XX } }, }, /* PREFIX_0F3A0A */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "roundss", { XM, EXd, Ib } }, - { "(bad)", { XX } }, }, /* PREFIX_0F3A0B */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "roundsd", { XM, EXq, Ib } }, - { "(bad)", { XX } }, }, /* PREFIX_0F3A0C */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "blendps", { XM, EXx, Ib } }, - { "(bad)", { XX } }, }, /* PREFIX_0F3A0D */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "blendpd", { XM, EXx, Ib } }, - { "(bad)", { XX } }, }, /* PREFIX_0F3A0E */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "pblendw", { XM, EXx, Ib } }, - { "(bad)", { XX } }, }, /* PREFIX_0F3A14 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "pextrb", { Edqb, XM, Ib } }, - { "(bad)", { XX } }, }, /* PREFIX_0F3A15 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "pextrw", { Edqw, XM, Ib } }, - { "(bad)", { XX } }, }, /* PREFIX_0F3A16 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "pextrK", { Edq, XM, Ib } }, - { "(bad)", { XX } }, }, /* PREFIX_0F3A17 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "extractps", { Edqd, XM, Ib } }, - { "(bad)", { XX } }, }, /* PREFIX_0F3A20 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "pinsrb", { XM, Edqb, Ib } }, - { "(bad)", { XX } }, }, /* PREFIX_0F3A21 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "insertps", { XM, EXd, Ib } }, - { "(bad)", { XX } }, }, /* PREFIX_0F3A22 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "pinsrK", { XM, Edq, Ib } }, - { "(bad)", { XX } }, }, /* PREFIX_0F3A40 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "dpps", { XM, EXx, Ib } }, - { "(bad)", { XX } }, }, /* PREFIX_0F3A41 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "dppd", { XM, EXx, Ib } }, - { "(bad)", { XX } }, }, /* PREFIX_0F3A42 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "mpsadbw", { XM, EXx, Ib } }, - { "(bad)", { XX } }, }, /* PREFIX_0F3A44 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "pclmulqdq", { XM, EXx, PCLMUL } }, - { "(bad)", { XX } }, }, /* PREFIX_0F3A60 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "pcmpestrm", { XM, EXx, Ib } }, - { "(bad)", { XX } }, }, /* PREFIX_0F3A61 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "pcmpestri", { XM, EXx, Ib } }, - { "(bad)", { XX } }, }, /* PREFIX_0F3A62 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "pcmpistrm", { XM, EXx, Ib } }, - { "(bad)", { XX } }, }, /* PREFIX_0F3A63 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "pcmpistri", { XM, EXx, Ib } }, - { "(bad)", { XX } }, }, /* PREFIX_0F3ADF */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "aeskeygenassist", { XM, EXx, Ib } }, - { "(bad)", { XX } }, }, - /* PREFIX_VEX_10 */ + /* PREFIX_VEX_0F10 */ { - { "vmovups", { XM, EXx } }, - { VEX_LEN_TABLE (VEX_LEN_10_P_1) }, - { "vmovupd", { XM, EXx } }, - { VEX_LEN_TABLE (VEX_LEN_10_P_3) }, + { VEX_W_TABLE (VEX_W_0F10_P_0) }, + { VEX_LEN_TABLE (VEX_LEN_0F10_P_1) }, + { VEX_W_TABLE (VEX_W_0F10_P_2) }, + { VEX_LEN_TABLE (VEX_LEN_0F10_P_3) }, }, - /* PREFIX_VEX_11 */ + /* PREFIX_VEX_0F11 */ { - { "vmovups", { EXxS, XM } }, - { VEX_LEN_TABLE (VEX_LEN_11_P_1) }, - { "vmovupd", { EXxS, XM } }, - { VEX_LEN_TABLE (VEX_LEN_11_P_3) }, + { VEX_W_TABLE (VEX_W_0F11_P_0) }, + { VEX_LEN_TABLE (VEX_LEN_0F11_P_1) }, + { VEX_W_TABLE (VEX_W_0F11_P_2) }, + { VEX_LEN_TABLE (VEX_LEN_0F11_P_3) }, }, - /* PREFIX_VEX_12 */ + /* PREFIX_VEX_0F12 */ { - { MOD_TABLE (MOD_VEX_12_PREFIX_0) }, - { "vmovsldup", { XM, EXx } }, - { VEX_LEN_TABLE (VEX_LEN_12_P_2) }, - { "vmovddup", { XM, EXymmq } }, + { MOD_TABLE (MOD_VEX_0F12_PREFIX_0) }, + { VEX_W_TABLE (VEX_W_0F12_P_1) }, + { VEX_LEN_TABLE (VEX_LEN_0F12_P_2) }, + { VEX_W_TABLE (VEX_W_0F12_P_3) }, }, - /* PREFIX_VEX_16 */ + /* PREFIX_VEX_0F16 */ { - { MOD_TABLE (MOD_VEX_16_PREFIX_0) }, - { "vmovshdup", { XM, EXx } }, - { VEX_LEN_TABLE (VEX_LEN_16_P_2) }, - { "(bad)", { XX } }, + { MOD_TABLE (MOD_VEX_0F16_PREFIX_0) }, + { VEX_W_TABLE (VEX_W_0F16_P_1) }, + { VEX_LEN_TABLE (VEX_LEN_0F16_P_2) }, }, - /* PREFIX_VEX_2A */ + /* PREFIX_VEX_0F2A */ { - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_2A_P_1) }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_2A_P_3) }, + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F2A_P_1) }, + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F2A_P_3) }, }, - /* PREFIX_VEX_2C */ + /* PREFIX_VEX_0F2C */ { - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_2C_P_1) }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_2C_P_3) }, + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F2C_P_1) }, + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F2C_P_3) }, }, - /* PREFIX_VEX_2D */ + /* PREFIX_VEX_0F2D */ { - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_2D_P_1) }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_2D_P_3) }, + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F2D_P_1) }, + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F2D_P_3) }, }, - /* PREFIX_VEX_2E */ + /* PREFIX_VEX_0F2E */ { - { VEX_LEN_TABLE (VEX_LEN_2E_P_0) }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_2E_P_2) }, - { "(bad)", { XX } }, + { VEX_LEN_TABLE (VEX_LEN_0F2E_P_0) }, + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F2E_P_2) }, }, - /* PREFIX_VEX_2F */ + /* PREFIX_VEX_0F2F */ { - { VEX_LEN_TABLE (VEX_LEN_2F_P_0) }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_2F_P_2) }, - { "(bad)", { XX } }, + { VEX_LEN_TABLE (VEX_LEN_0F2F_P_0) }, + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F2F_P_2) }, }, - /* PREFIX_VEX_51 */ + /* PREFIX_VEX_0F51 */ { - { "vsqrtps", { XM, EXx } }, - { VEX_LEN_TABLE (VEX_LEN_51_P_1) }, - { "vsqrtpd", { XM, EXx } }, - { VEX_LEN_TABLE (VEX_LEN_51_P_3) }, + { VEX_W_TABLE (VEX_W_0F51_P_0) }, + { VEX_LEN_TABLE (VEX_LEN_0F51_P_1) }, + { VEX_W_TABLE (VEX_W_0F51_P_2) }, + { VEX_LEN_TABLE (VEX_LEN_0F51_P_3) }, }, - /* PREFIX_VEX_52 */ + /* PREFIX_VEX_0F52 */ { - { "vrsqrtps", { XM, EXx } }, - { VEX_LEN_TABLE (VEX_LEN_52_P_1) }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { VEX_W_TABLE (VEX_W_0F52_P_0) }, + { VEX_LEN_TABLE (VEX_LEN_0F52_P_1) }, }, - /* PREFIX_VEX_53 */ + /* PREFIX_VEX_0F53 */ { - { "vrcpps", { XM, EXx } }, - { VEX_LEN_TABLE (VEX_LEN_53_P_1) }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { VEX_W_TABLE (VEX_W_0F53_P_0) }, + { VEX_LEN_TABLE (VEX_LEN_0F53_P_1) }, }, - /* PREFIX_VEX_58 */ + /* PREFIX_VEX_0F58 */ { - { "vaddps", { XM, Vex, EXx } }, - { VEX_LEN_TABLE (VEX_LEN_58_P_1) }, - { "vaddpd", { XM, Vex, EXx } }, - { VEX_LEN_TABLE (VEX_LEN_58_P_3) }, + { VEX_W_TABLE (VEX_W_0F58_P_0) }, + { VEX_LEN_TABLE (VEX_LEN_0F58_P_1) }, + { VEX_W_TABLE (VEX_W_0F58_P_2) }, + { VEX_LEN_TABLE (VEX_LEN_0F58_P_3) }, }, - /* PREFIX_VEX_59 */ + /* PREFIX_VEX_0F59 */ { - { "vmulps", { XM, Vex, EXx } }, - { VEX_LEN_TABLE (VEX_LEN_59_P_1) }, - { "vmulpd", { XM, Vex, EXx } }, - { VEX_LEN_TABLE (VEX_LEN_59_P_3) }, + { VEX_W_TABLE (VEX_W_0F59_P_0) }, + { VEX_LEN_TABLE (VEX_LEN_0F59_P_1) }, + { VEX_W_TABLE (VEX_W_0F59_P_2) }, + { VEX_LEN_TABLE (VEX_LEN_0F59_P_3) }, }, - /* PREFIX_VEX_5A */ + /* PREFIX_VEX_0F5A */ { - { "vcvtps2pd", { XM, EXxmmq } }, - { VEX_LEN_TABLE (VEX_LEN_5A_P_1) }, + { VEX_W_TABLE (VEX_W_0F5A_P_0) }, + { VEX_LEN_TABLE (VEX_LEN_0F5A_P_1) }, { "vcvtpd2ps%XY", { XMM, EXx } }, - { VEX_LEN_TABLE (VEX_LEN_5A_P_3) }, + { VEX_LEN_TABLE (VEX_LEN_0F5A_P_3) }, + }, + + /* PREFIX_VEX_0F5B */ + { + { VEX_W_TABLE (VEX_W_0F5B_P_0) }, + { VEX_W_TABLE (VEX_W_0F5B_P_1) }, + { VEX_W_TABLE (VEX_W_0F5B_P_2) }, + }, + + /* PREFIX_VEX_0F5C */ + { + { VEX_W_TABLE (VEX_W_0F5C_P_0) }, + { VEX_LEN_TABLE (VEX_LEN_0F5C_P_1) }, + { VEX_W_TABLE (VEX_W_0F5C_P_2) }, + { VEX_LEN_TABLE (VEX_LEN_0F5C_P_3) }, + }, + + /* PREFIX_VEX_0F5D */ + { + { VEX_W_TABLE (VEX_W_0F5D_P_0) }, + { VEX_LEN_TABLE (VEX_LEN_0F5D_P_1) }, + { VEX_W_TABLE (VEX_W_0F5D_P_2) }, + { VEX_LEN_TABLE (VEX_LEN_0F5D_P_3) }, + }, + + /* PREFIX_VEX_0F5E */ + { + { VEX_W_TABLE (VEX_W_0F5E_P_0) }, + { VEX_LEN_TABLE (VEX_LEN_0F5E_P_1) }, + { VEX_W_TABLE (VEX_W_0F5E_P_2) }, + { VEX_LEN_TABLE (VEX_LEN_0F5E_P_3) }, + }, + + /* PREFIX_VEX_0F5F */ + { + { VEX_W_TABLE (VEX_W_0F5F_P_0) }, + { VEX_LEN_TABLE (VEX_LEN_0F5F_P_1) }, + { VEX_W_TABLE (VEX_W_0F5F_P_2) }, + { VEX_LEN_TABLE (VEX_LEN_0F5F_P_3) }, + }, + + /* PREFIX_VEX_0F60 */ + { + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F60_P_2) }, + }, + + /* PREFIX_VEX_0F61 */ + { + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F61_P_2) }, + }, + + /* PREFIX_VEX_0F62 */ + { + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F62_P_2) }, + }, + + /* PREFIX_VEX_0F63 */ + { + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F63_P_2) }, + }, + + /* PREFIX_VEX_0F64 */ + { + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F64_P_2) }, + }, + + /* PREFIX_VEX_0F65 */ + { + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F65_P_2) }, + }, + + /* PREFIX_VEX_0F66 */ + { + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F66_P_2) }, + }, + + /* PREFIX_VEX_0F67 */ + { + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F67_P_2) }, + }, + + /* PREFIX_VEX_0F68 */ + { + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F68_P_2) }, }, - /* PREFIX_VEX_5B */ + /* PREFIX_VEX_0F69 */ { - { "vcvtdq2ps", { XM, EXx } }, - { "vcvttps2dq", { XM, EXx } }, - { "vcvtps2dq", { XM, EXx } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F69_P_2) }, }, - /* PREFIX_VEX_5C */ + /* PREFIX_VEX_0F6A */ { - { "vsubps", { XM, Vex, EXx } }, - { VEX_LEN_TABLE (VEX_LEN_5C_P_1) }, - { "vsubpd", { XM, Vex, EXx } }, - { VEX_LEN_TABLE (VEX_LEN_5C_P_3) }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F6A_P_2) }, }, - /* PREFIX_VEX_5D */ + /* PREFIX_VEX_0F6B */ { - { "vminps", { XM, Vex, EXx } }, - { VEX_LEN_TABLE (VEX_LEN_5D_P_1) }, - { "vminpd", { XM, Vex, EXx } }, - { VEX_LEN_TABLE (VEX_LEN_5D_P_3) }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F6B_P_2) }, }, - /* PREFIX_VEX_5E */ + /* PREFIX_VEX_0F6C */ { - { "vdivps", { XM, Vex, EXx } }, - { VEX_LEN_TABLE (VEX_LEN_5E_P_1) }, - { "vdivpd", { XM, Vex, EXx } }, - { VEX_LEN_TABLE (VEX_LEN_5E_P_3) }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F6C_P_2) }, }, - /* PREFIX_VEX_5F */ + /* PREFIX_VEX_0F6D */ { - { "vmaxps", { XM, Vex, EXx } }, - { VEX_LEN_TABLE (VEX_LEN_5F_P_1) }, - { "vmaxpd", { XM, Vex, EXx } }, - { VEX_LEN_TABLE (VEX_LEN_5F_P_3) }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F6D_P_2) }, }, - /* PREFIX_VEX_60 */ + /* PREFIX_VEX_0F6E */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_60_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F6E_P_2) }, }, - /* PREFIX_VEX_61 */ + /* PREFIX_VEX_0F6F */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_61_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F6F_P_1) }, + { VEX_W_TABLE (VEX_W_0F6F_P_2) }, }, - /* PREFIX_VEX_62 */ + /* PREFIX_VEX_0F70 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_62_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F70_P_1) }, + { VEX_W_TABLE (VEX_W_0F70_P_2) }, + { VEX_W_TABLE (VEX_W_0F70_P_3) }, }, - /* PREFIX_VEX_63 */ + /* PREFIX_VEX_0F71_REG_2 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_63_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F71_R_2_P_2) }, }, - /* PREFIX_VEX_64 */ + /* PREFIX_VEX_0F71_REG_4 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_64_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F71_R_4_P_2) }, }, - /* PREFIX_VEX_65 */ + /* PREFIX_VEX_0F71_REG_6 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_65_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F71_R_6_P_2) }, }, - /* PREFIX_VEX_66 */ + /* PREFIX_VEX_0F72_REG_2 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_66_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F72_R_2_P_2) }, }, - /* PREFIX_VEX_67 */ + /* PREFIX_VEX_0F72_REG_4 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_67_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F72_R_4_P_2) }, }, - /* PREFIX_VEX_68 */ + /* PREFIX_VEX_0F72_REG_6 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_68_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F72_R_6_P_2) }, }, - /* PREFIX_VEX_69 */ + /* PREFIX_VEX_0F73_REG_2 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_69_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F73_R_2_P_2) }, }, - /* PREFIX_VEX_6A */ + /* PREFIX_VEX_0F73_REG_3 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_6A_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F73_R_3_P_2) }, }, - /* PREFIX_VEX_6B */ + /* PREFIX_VEX_0F73_REG_6 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_6B_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F73_R_6_P_2) }, }, - /* PREFIX_VEX_6C */ + /* PREFIX_VEX_0F73_REG_7 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_6C_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F73_R_7_P_2) }, }, - /* PREFIX_VEX_6D */ + /* PREFIX_VEX_0F74 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_6D_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F74_P_2) }, }, - /* PREFIX_VEX_6E */ + /* PREFIX_VEX_0F75 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_6E_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F75_P_2) }, }, - /* PREFIX_VEX_6F */ + /* PREFIX_VEX_0F76 */ { - { "(bad)", { XX } }, - { "vmovdqu", { XM, EXx } }, - { "vmovdqa", { XM, EXx } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F76_P_2) }, }, - /* PREFIX_VEX_70 */ + /* PREFIX_VEX_0F77 */ { - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_70_P_1) }, - { VEX_LEN_TABLE (VEX_LEN_70_P_2) }, - { VEX_LEN_TABLE (VEX_LEN_70_P_3) }, + { VEX_W_TABLE (VEX_W_0F77_P_0) }, }, - /* PREFIX_VEX_71_REG_2 */ + /* PREFIX_VEX_0F7C */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_71_R_2_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F7C_P_2) }, + { VEX_W_TABLE (VEX_W_0F7C_P_3) }, }, - /* PREFIX_VEX_71_REG_4 */ + /* PREFIX_VEX_0F7D */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_71_R_4_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F7D_P_2) }, + { VEX_W_TABLE (VEX_W_0F7D_P_3) }, }, - /* PREFIX_VEX_71_REG_6 */ + /* PREFIX_VEX_0F7E */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_71_R_6_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F7E_P_1) }, + { VEX_LEN_TABLE (VEX_LEN_0F7E_P_2) }, }, - /* PREFIX_VEX_72_REG_2 */ + /* PREFIX_VEX_0F7F */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_72_R_2_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F7F_P_1) }, + { VEX_W_TABLE (VEX_W_0F7F_P_2) }, }, - /* PREFIX_VEX_72_REG_4 */ + /* PREFIX_VEX_0FC2 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_72_R_4_P_2) }, - { "(bad)", { XX } }, + { VEX_W_TABLE (VEX_W_0FC2_P_0) }, + { VEX_LEN_TABLE (VEX_LEN_0FC2_P_1) }, + { VEX_W_TABLE (VEX_W_0FC2_P_2) }, + { VEX_LEN_TABLE (VEX_LEN_0FC2_P_3) }, }, - /* PREFIX_VEX_72_REG_6 */ + /* PREFIX_VEX_0FC4 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_72_R_6_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0FC4_P_2) }, }, - /* PREFIX_VEX_73_REG_2 */ + /* PREFIX_VEX_0FC5 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_73_R_2_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0FC5_P_2) }, }, - /* PREFIX_VEX_73_REG_3 */ + /* PREFIX_VEX_0FD0 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_73_R_3_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0FD0_P_2) }, + { VEX_W_TABLE (VEX_W_0FD0_P_3) }, }, - /* PREFIX_VEX_73_REG_6 */ + /* PREFIX_VEX_0FD1 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_73_R_6_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0FD1_P_2) }, }, - /* PREFIX_VEX_73_REG_7 */ + /* PREFIX_VEX_0FD2 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_73_R_7_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0FD2_P_2) }, }, - /* PREFIX_VEX_74 */ + /* PREFIX_VEX_0FD3 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_74_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0FD3_P_2) }, }, - /* PREFIX_VEX_75 */ + /* PREFIX_VEX_0FD4 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_75_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0FD4_P_2) }, }, - /* PREFIX_VEX_76 */ + /* PREFIX_VEX_0FD5 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_76_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0FD5_P_2) }, }, - /* PREFIX_VEX_77 */ + /* PREFIX_VEX_0FD6 */ { - { "", { VZERO } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0FD6_P_2) }, }, - /* PREFIX_VEX_7C */ + /* PREFIX_VEX_0FD7 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "vhaddpd", { XM, Vex, EXx } }, - { "vhaddps", { XM, Vex, EXx } }, + { Bad_Opcode }, + { Bad_Opcode }, + { MOD_TABLE (MOD_VEX_0FD7_PREFIX_2) }, }, - /* PREFIX_VEX_7D */ + /* PREFIX_VEX_0FD8 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "vhsubpd", { XM, Vex, EXx } }, - { "vhsubps", { XM, Vex, EXx } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0FD8_P_2) }, }, - /* PREFIX_VEX_7E */ + /* PREFIX_VEX_0FD9 */ { - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_7E_P_1) }, - { VEX_LEN_TABLE (VEX_LEN_7E_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0FD9_P_2) }, }, - /* PREFIX_VEX_7F */ + /* PREFIX_VEX_0FDA */ { - { "(bad)", { XX } }, - { "vmovdqu", { EXxS, XM } }, - { "vmovdqa", { EXxS, XM } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0FDA_P_2) }, }, - /* PREFIX_VEX_C2 */ + /* PREFIX_VEX_0FDB */ { - { "vcmpps", { XM, Vex, EXx, VCMP } }, - { VEX_LEN_TABLE (VEX_LEN_C2_P_1) }, - { "vcmppd", { XM, Vex, EXx, VCMP } }, - { VEX_LEN_TABLE (VEX_LEN_C2_P_3) }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0FDB_P_2) }, }, - /* PREFIX_VEX_C4 */ + /* PREFIX_VEX_0FDC */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_C4_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0FDC_P_2) }, }, - /* PREFIX_VEX_C5 */ + /* PREFIX_VEX_0FDD */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_C5_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0FDD_P_2) }, }, - /* PREFIX_VEX_D0 */ + /* PREFIX_VEX_0FDE */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "vaddsubpd", { XM, Vex, EXx } }, - { "vaddsubps", { XM, Vex, EXx } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0FDE_P_2) }, }, - /* PREFIX_VEX_D1 */ + /* PREFIX_VEX_0FDF */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_D1_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0FDF_P_2) }, }, - /* PREFIX_VEX_D2 */ + /* PREFIX_VEX_0FE0 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_D2_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0FE0_P_2) }, }, - /* PREFIX_VEX_D3 */ + /* PREFIX_VEX_0FE1 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_D3_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0FE1_P_2) }, }, - /* PREFIX_VEX_D4 */ + /* PREFIX_VEX_0FE2 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_D4_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0FE2_P_2) }, }, - /* PREFIX_VEX_D5 */ + /* PREFIX_VEX_0FE3 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_D5_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0FE3_P_2) }, }, - /* PREFIX_VEX_D6 */ + /* PREFIX_VEX_0FE4 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_D6_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0FE4_P_2) }, }, - /* PREFIX_VEX_D7 */ + /* PREFIX_VEX_0FE5 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { MOD_TABLE (MOD_VEX_D7_PREFIX_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0FE5_P_2) }, }, - /* PREFIX_VEX_D8 */ + /* PREFIX_VEX_0FE6 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_D8_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0FE6_P_1) }, + { VEX_W_TABLE (VEX_W_0FE6_P_2) }, + { VEX_W_TABLE (VEX_W_0FE6_P_3) }, }, - /* PREFIX_VEX_D9 */ + /* PREFIX_VEX_0FE7 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_D9_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { MOD_TABLE (MOD_VEX_0FE7_PREFIX_2) }, }, - /* PREFIX_VEX_DA */ + /* PREFIX_VEX_0FE8 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_DA_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0FE8_P_2) }, }, - /* PREFIX_VEX_DB */ + /* PREFIX_VEX_0FE9 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_DB_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0FE9_P_2) }, }, - /* PREFIX_VEX_DC */ + /* PREFIX_VEX_0FEA */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_DC_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0FEA_P_2) }, }, - /* PREFIX_VEX_DD */ + /* PREFIX_VEX_0FEB */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_DD_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0FEB_P_2) }, }, - /* PREFIX_VEX_DE */ + /* PREFIX_VEX_0FEC */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_DE_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0FEC_P_2) }, }, - /* PREFIX_VEX_DF */ + /* PREFIX_VEX_0FED */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_DF_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0FED_P_2) }, }, - /* PREFIX_VEX_E0 */ + /* PREFIX_VEX_0FEE */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_E0_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0FEE_P_2) }, }, - /* PREFIX_VEX_E1 */ + /* PREFIX_VEX_0FEF */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_E1_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0FEF_P_2) }, }, - /* PREFIX_VEX_E2 */ + /* PREFIX_VEX_0FF0 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_E2_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { MOD_TABLE (MOD_VEX_0FF0_PREFIX_3) }, }, - /* PREFIX_VEX_E3 */ + /* PREFIX_VEX_0FF1 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_E3_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0FF1_P_2) }, }, - /* PREFIX_VEX_E4 */ + /* PREFIX_VEX_0FF2 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_E4_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0FF2_P_2) }, }, - /* PREFIX_VEX_E5 */ + /* PREFIX_VEX_0FF3 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_E5_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0FF3_P_2) }, }, - /* PREFIX_VEX_E6 */ + /* PREFIX_VEX_0FF4 */ { - { "(bad)", { XX } }, - { "vcvtdq2pd", { XM, EXxmmq } }, - { "vcvttpd2dq%XY", { XMM, EXx } }, - { "vcvtpd2dq%XY", { XMM, EXx } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0FF4_P_2) }, }, - /* PREFIX_VEX_E7 */ + /* PREFIX_VEX_0FF5 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { MOD_TABLE (MOD_VEX_E7_PREFIX_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0FF5_P_2) }, }, - /* PREFIX_VEX_E8 */ + /* PREFIX_VEX_0FF6 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_E8_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0FF6_P_2) }, }, - /* PREFIX_VEX_E9 */ + /* PREFIX_VEX_0FF7 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_E9_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0FF7_P_2) }, }, - /* PREFIX_VEX_EA */ + /* PREFIX_VEX_0FF8 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_EA_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0FF8_P_2) }, }, - /* PREFIX_VEX_EB */ + /* PREFIX_VEX_0FF9 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_EB_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0FF9_P_2) }, }, - /* PREFIX_VEX_EC */ + /* PREFIX_VEX_0FFA */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_EC_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0FFA_P_2) }, }, - /* PREFIX_VEX_ED */ + /* PREFIX_VEX_0FFB */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_ED_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0FFB_P_2) }, }, - /* PREFIX_VEX_EE */ + /* PREFIX_VEX_0FFC */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_EE_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0FFC_P_2) }, }, - /* PREFIX_VEX_EF */ + /* PREFIX_VEX_0FFD */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_EF_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0FFD_P_2) }, }, - /* PREFIX_VEX_F0 */ + /* PREFIX_VEX_0FFE */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { MOD_TABLE (MOD_VEX_F0_PREFIX_3) }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0FFE_P_2) }, }, - /* PREFIX_VEX_F1 */ + /* PREFIX_VEX_0F3800 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_F1_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3800_P_2) }, }, - /* PREFIX_VEX_F2 */ + /* PREFIX_VEX_0F3801 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_F2_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3801_P_2) }, }, - /* PREFIX_VEX_F3 */ + /* PREFIX_VEX_0F3802 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_F3_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3802_P_2) }, }, - /* PREFIX_VEX_F4 */ + /* PREFIX_VEX_0F3803 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_F4_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3803_P_2) }, }, - /* PREFIX_VEX_F5 */ + /* PREFIX_VEX_0F3804 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_F5_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3804_P_2) }, }, - /* PREFIX_VEX_F6 */ + /* PREFIX_VEX_0F3805 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_F6_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3805_P_2) }, }, - /* PREFIX_VEX_F7 */ + /* PREFIX_VEX_0F3806 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_F7_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3806_P_2) }, }, - /* PREFIX_VEX_F8 */ + /* PREFIX_VEX_0F3807 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_F8_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3807_P_2) }, }, - /* PREFIX_VEX_F9 */ + /* PREFIX_VEX_0F3808 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_F9_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3808_P_2) }, }, - /* PREFIX_VEX_FA */ + /* PREFIX_VEX_0F3809 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_FA_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3809_P_2) }, }, - /* PREFIX_VEX_FB */ + /* PREFIX_VEX_0F380A */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_FB_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F380A_P_2) }, }, - /* PREFIX_VEX_FC */ + /* PREFIX_VEX_0F380B */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_FC_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F380B_P_2) }, }, - /* PREFIX_VEX_FD */ + /* PREFIX_VEX_0F380C */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_FD_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F380C_P_2) }, }, - /* PREFIX_VEX_FE */ + /* PREFIX_VEX_0F380D */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_FE_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F380D_P_2) }, }, - /* PREFIX_VEX_3800 */ + /* PREFIX_VEX_0F380E */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_3800_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F380E_P_2) }, }, - /* PREFIX_VEX_3801 */ + /* PREFIX_VEX_0F380F */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_3801_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F380F_P_2) }, }, - /* PREFIX_VEX_3802 */ + /* PREFIX_VEX_0F3813 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_3802_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { "vcvtph2ps", { XM, EXxmmq } }, }, - /* PREFIX_VEX_3803 */ + /* PREFIX_VEX_0F3816 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_3803_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F3816_P_2) }, }, - /* PREFIX_VEX_3804 */ + /* PREFIX_VEX_0F3817 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_3804_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3817_P_2) }, }, - /* PREFIX_VEX_3805 */ + /* PREFIX_VEX_0F3818 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_3805_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3818_P_2) }, }, - /* PREFIX_VEX_3806 */ + /* PREFIX_VEX_0F3819 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_3806_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F3819_P_2) }, }, - /* PREFIX_VEX_3807 */ + /* PREFIX_VEX_0F381A */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_3807_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { MOD_TABLE (MOD_VEX_0F381A_PREFIX_2) }, }, - /* PREFIX_VEX_3808 */ + /* PREFIX_VEX_0F381C */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_3808_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F381C_P_2) }, }, - /* PREFIX_VEX_3809 */ + /* PREFIX_VEX_0F381D */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_3809_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F381D_P_2) }, }, - /* PREFIX_VEX_380A */ + /* PREFIX_VEX_0F381E */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_380A_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F381E_P_2) }, }, - /* PREFIX_VEX_380B */ + /* PREFIX_VEX_0F3820 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_380B_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3820_P_2) }, }, - /* PREFIX_VEX_380C */ + /* PREFIX_VEX_0F3821 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "vpermilps", { XM, Vex, EXx } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3821_P_2) }, }, - /* PREFIX_VEX_380D */ + /* PREFIX_VEX_0F3822 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "vpermilpd", { XM, Vex, EXx } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3822_P_2) }, }, - /* PREFIX_VEX_380E */ + /* PREFIX_VEX_0F3823 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "vtestps", { XM, EXx } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3823_P_2) }, }, - /* PREFIX_VEX_380F */ + /* PREFIX_VEX_0F3824 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "vtestpd", { XM, EXx } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3824_P_2) }, }, - /* PREFIX_VEX_3817 */ + /* PREFIX_VEX_0F3825 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "vptest", { XM, EXx } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3825_P_2) }, }, - /* PREFIX_VEX_3818 */ + /* PREFIX_VEX_0F3828 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { MOD_TABLE (MOD_VEX_3818_PREFIX_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3828_P_2) }, }, - /* PREFIX_VEX_3819 */ + /* PREFIX_VEX_0F3829 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { MOD_TABLE (MOD_VEX_3819_PREFIX_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3829_P_2) }, }, - /* PREFIX_VEX_381A */ + /* PREFIX_VEX_0F382A */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { MOD_TABLE (MOD_VEX_381A_PREFIX_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { MOD_TABLE (MOD_VEX_0F382A_PREFIX_2) }, }, - /* PREFIX_VEX_381C */ + /* PREFIX_VEX_0F382B */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_381C_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F382B_P_2) }, }, - /* PREFIX_VEX_381D */ + /* PREFIX_VEX_0F382C */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_381D_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { MOD_TABLE (MOD_VEX_0F382C_PREFIX_2) }, }, - /* PREFIX_VEX_381E */ + /* PREFIX_VEX_0F382D */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_381E_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { MOD_TABLE (MOD_VEX_0F382D_PREFIX_2) }, }, - /* PREFIX_VEX_3820 */ + /* PREFIX_VEX_0F382E */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_3820_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { MOD_TABLE (MOD_VEX_0F382E_PREFIX_2) }, }, - /* PREFIX_VEX_3821 */ + /* PREFIX_VEX_0F382F */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_3821_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { MOD_TABLE (MOD_VEX_0F382F_PREFIX_2) }, }, - /* PREFIX_VEX_3822 */ + /* PREFIX_VEX_0F3830 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_3822_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3830_P_2) }, }, - /* PREFIX_VEX_3823 */ + /* PREFIX_VEX_0F3831 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_3823_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3831_P_2) }, }, - /* PREFIX_VEX_3824 */ + /* PREFIX_VEX_0F3832 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_3824_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3832_P_2) }, }, - /* PREFIX_VEX_3825 */ + /* PREFIX_VEX_0F3833 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_3825_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3833_P_2) }, }, - /* PREFIX_VEX_3828 */ + /* PREFIX_VEX_0F3834 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_3828_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3834_P_2) }, }, - /* PREFIX_VEX_3829 */ + /* PREFIX_VEX_0F3835 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_3829_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3835_P_2) }, }, - /* PREFIX_VEX_382A */ + /* PREFIX_VEX_0F3836 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { MOD_TABLE (MOD_VEX_382A_PREFIX_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F3836_P_2) }, }, - /* PREFIX_VEX_382B */ + /* PREFIX_VEX_0F3837 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_382B_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3837_P_2) }, }, - /* PREFIX_VEX_382C */ + /* PREFIX_VEX_0F3838 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { MOD_TABLE (MOD_VEX_382C_PREFIX_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3838_P_2) }, }, - /* PREFIX_VEX_382D */ + /* PREFIX_VEX_0F3839 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { MOD_TABLE (MOD_VEX_382D_PREFIX_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3839_P_2) }, }, - /* PREFIX_VEX_382E */ + /* PREFIX_VEX_0F383A */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { MOD_TABLE (MOD_VEX_382E_PREFIX_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F383A_P_2) }, }, - /* PREFIX_VEX_382F */ + /* PREFIX_VEX_0F383B */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { MOD_TABLE (MOD_VEX_382F_PREFIX_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F383B_P_2) }, }, - /* PREFIX_VEX_3830 */ + /* PREFIX_VEX_0F383C */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_3830_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F383C_P_2) }, }, - /* PREFIX_VEX_3831 */ + /* PREFIX_VEX_0F383D */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_3831_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F383D_P_2) }, }, - /* PREFIX_VEX_3832 */ + /* PREFIX_VEX_0F383E */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_3832_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F383E_P_2) }, }, - /* PREFIX_VEX_3833 */ + /* PREFIX_VEX_0F383F */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_3833_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F383F_P_2) }, }, - /* PREFIX_VEX_3834 */ + /* PREFIX_VEX_0F3840 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_3834_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3840_P_2) }, }, - /* PREFIX_VEX_3835 */ + /* PREFIX_VEX_0F3841 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_3835_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F3841_P_2) }, }, - /* PREFIX_VEX_3837 */ + /* PREFIX_VEX_0F3845 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_3837_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { "vpsrlv%LW", { XM, Vex, EXx } }, }, - /* PREFIX_VEX_3838 */ + /* PREFIX_VEX_0F3846 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_3838_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3846_P_2) }, }, - /* PREFIX_VEX_3839 */ + /* PREFIX_VEX_0F3847 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_3839_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { "vpsllv%LW", { XM, Vex, EXx } }, }, - /* PREFIX_VEX_383A */ + /* PREFIX_VEX_0F3858 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_383A_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3858_P_2) }, }, - /* PREFIX_VEX_383B */ + /* PREFIX_VEX_0F3859 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_383B_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3859_P_2) }, }, - /* PREFIX_VEX_383C */ + /* PREFIX_VEX_0F385A */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_383C_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { MOD_TABLE (MOD_VEX_0F385A_PREFIX_2) }, }, - /* PREFIX_VEX_383D */ + /* PREFIX_VEX_0F3878 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_383D_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3878_P_2) }, }, - /* PREFIX_VEX_383E */ + /* PREFIX_VEX_0F3879 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_383E_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3879_P_2) }, }, - /* PREFIX_VEX_383F */ + /* PREFIX_VEX_0F388C */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_383F_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { MOD_TABLE (MOD_VEX_0F388C_PREFIX_2) }, }, - /* PREFIX_VEX_3840 */ + /* PREFIX_VEX_0F388E */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_3840_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { MOD_TABLE (MOD_VEX_0F388E_PREFIX_2) }, }, - /* PREFIX_VEX_3841 */ + /* PREFIX_VEX_0F3890 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_3841_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { "vpgatherd%LW", { XM, MVexVSIBDWpX, Vex } }, }, - /* PREFIX_VEX_3896 */ + /* PREFIX_VEX_0F3891 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { "vpgatherq%LW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ } }, + }, + + /* PREFIX_VEX_0F3892 */ + { + { Bad_Opcode }, + { Bad_Opcode }, + { "vgatherdp%XW", { XM, MVexVSIBDWpX, Vex } }, + }, + + /* PREFIX_VEX_0F3893 */ + { + { Bad_Opcode }, + { Bad_Opcode }, + { "vgatherqp%XW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ } }, + }, + + /* PREFIX_VEX_0F3896 */ + { + { Bad_Opcode }, + { Bad_Opcode }, { "vfmaddsub132p%XW", { XM, Vex, EXx } }, - { "(bad)", { XX } }, }, - /* PREFIX_VEX_3897 */ + /* PREFIX_VEX_0F3897 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "vfmsubadd132p%XW", { XM, Vex, EXx } }, - { "(bad)", { XX } }, }, - /* PREFIX_VEX_3898 */ + /* PREFIX_VEX_0F3898 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "vfmadd132p%XW", { XM, Vex, EXx } }, - { "(bad)", { XX } }, }, - /* PREFIX_VEX_3899 */ + /* PREFIX_VEX_0F3899 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "vfmadd132s%XW", { XM, Vex, EXVexWdq } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { "vfmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } }, }, - /* PREFIX_VEX_389A */ + /* PREFIX_VEX_0F389A */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "vfmsub132p%XW", { XM, Vex, EXx } }, - { "(bad)", { XX } }, }, - /* PREFIX_VEX_389B */ + /* PREFIX_VEX_0F389B */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "vfmsub132s%XW", { XM, Vex, EXVexWdq } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { "vfmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } }, }, - /* PREFIX_VEX_389C */ + /* PREFIX_VEX_0F389C */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "vfnmadd132p%XW", { XM, Vex, EXx } }, - { "(bad)", { XX } }, }, - /* PREFIX_VEX_389D */ + /* PREFIX_VEX_0F389D */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "vfnmadd132s%XW", { XM, Vex, EXVexWdq } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { "vfnmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } }, }, - /* PREFIX_VEX_389E */ + /* PREFIX_VEX_0F389E */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "vfnmsub132p%XW", { XM, Vex, EXx } }, - { "(bad)", { XX } }, }, - /* PREFIX_VEX_389F */ + /* PREFIX_VEX_0F389F */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "vfnmsub132s%XW", { XM, Vex, EXVexWdq } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { "vfnmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } }, }, - /* PREFIX_VEX_38A6 */ + /* PREFIX_VEX_0F38A6 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "vfmaddsub213p%XW", { XM, Vex, EXx } }, - { "(bad)", { XX } }, + { Bad_Opcode }, }, - /* PREFIX_VEX_38A7 */ + /* PREFIX_VEX_0F38A7 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "vfmsubadd213p%XW", { XM, Vex, EXx } }, - { "(bad)", { XX } }, }, - /* PREFIX_VEX_38A8 */ + /* PREFIX_VEX_0F38A8 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "vfmadd213p%XW", { XM, Vex, EXx } }, - { "(bad)", { XX } }, }, - /* PREFIX_VEX_38A9 */ + /* PREFIX_VEX_0F38A9 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "vfmadd213s%XW", { XM, Vex, EXVexWdq } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { "vfmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } }, }, - /* PREFIX_VEX_38AA */ + /* PREFIX_VEX_0F38AA */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "vfmsub213p%XW", { XM, Vex, EXx } }, - { "(bad)", { XX } }, }, - /* PREFIX_VEX_38AB */ + /* PREFIX_VEX_0F38AB */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "vfmsub213s%XW", { XM, Vex, EXVexWdq } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { "vfmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } }, }, - /* PREFIX_VEX_38AC */ + /* PREFIX_VEX_0F38AC */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "vfnmadd213p%XW", { XM, Vex, EXx } }, - { "(bad)", { XX } }, }, - /* PREFIX_VEX_38AD */ + /* PREFIX_VEX_0F38AD */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "vfnmadd213s%XW", { XM, Vex, EXVexWdq } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { "vfnmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } }, }, - /* PREFIX_VEX_38AE */ + /* PREFIX_VEX_0F38AE */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "vfnmsub213p%XW", { XM, Vex, EXx } }, - { "(bad)", { XX } }, }, - /* PREFIX_VEX_38AF */ + /* PREFIX_VEX_0F38AF */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "vfnmsub213s%XW", { XM, Vex, EXVexWdq } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { "vfnmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } }, }, - /* PREFIX_VEX_38B6 */ + /* PREFIX_VEX_0F38B6 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "vfmaddsub231p%XW", { XM, Vex, EXx } }, - { "(bad)", { XX } }, }, - /* PREFIX_VEX_38B7 */ + /* PREFIX_VEX_0F38B7 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "vfmsubadd231p%XW", { XM, Vex, EXx } }, - { "(bad)", { XX } }, }, - /* PREFIX_VEX_38B8 */ + /* PREFIX_VEX_0F38B8 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "vfmadd231p%XW", { XM, Vex, EXx } }, - { "(bad)", { XX } }, }, - /* PREFIX_VEX_38B9 */ + /* PREFIX_VEX_0F38B9 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "vfmadd231s%XW", { XM, Vex, EXVexWdq } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { "vfmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } }, }, - /* PREFIX_VEX_38BA */ + /* PREFIX_VEX_0F38BA */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "vfmsub231p%XW", { XM, Vex, EXx } }, - { "(bad)", { XX } }, }, - /* PREFIX_VEX_38BB */ + /* PREFIX_VEX_0F38BB */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "vfmsub231s%XW", { XM, Vex, EXVexWdq } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { "vfmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } }, }, - /* PREFIX_VEX_38BC */ + /* PREFIX_VEX_0F38BC */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "vfnmadd231p%XW", { XM, Vex, EXx } }, - { "(bad)", { XX } }, }, - /* PREFIX_VEX_38BD */ + /* PREFIX_VEX_0F38BD */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "vfnmadd231s%XW", { XM, Vex, EXVexWdq } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { "vfnmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } }, }, - /* PREFIX_VEX_38BE */ + /* PREFIX_VEX_0F38BE */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "vfnmsub231p%XW", { XM, Vex, EXx } }, - { "(bad)", { XX } }, }, - /* PREFIX_VEX_38BF */ + /* PREFIX_VEX_0F38BF */ + { + { Bad_Opcode }, + { Bad_Opcode }, + { "vfnmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } }, + }, + + /* PREFIX_VEX_0F38DB */ + { + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F38DB_P_2) }, + }, + + /* PREFIX_VEX_0F38DC */ + { + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F38DC_P_2) }, + }, + + /* PREFIX_VEX_0F38DD */ + { + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F38DD_P_2) }, + }, + + /* PREFIX_VEX_0F38DE */ + { + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F38DE_P_2) }, + }, + + /* PREFIX_VEX_0F38DF */ + { + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F38DF_P_2) }, + }, + + /* PREFIX_VEX_0F38F2 */ + { + { VEX_LEN_TABLE (VEX_LEN_0F38F2_P_0) }, + }, + + /* PREFIX_VEX_0F38F3_REG_1 */ + { + { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_1_P_0) }, + }, + + /* PREFIX_VEX_0F38F3_REG_2 */ + { + { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_2_P_0) }, + }, + + /* PREFIX_VEX_0F38F3_REG_3 */ + { + { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_3_P_0) }, + }, + + /* PREFIX_VEX_0F38F5 */ + { + { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_0) }, + { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_1) }, + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_3) }, + }, + + /* PREFIX_VEX_0F38F6 */ + { + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F38F6_P_3) }, + }, + + /* PREFIX_VEX_0F38F7 */ + { + { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_0) }, + { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_1) }, + { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_2) }, + { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_3) }, + }, + + /* PREFIX_VEX_0F3A00 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "vfnmsub231s%XW", { XM, Vex, EXVexWdq } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F3A00_P_2) }, }, - /* PREFIX_VEX_38DB */ + /* PREFIX_VEX_0F3A01 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_38DB_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F3A01_P_2) }, }, - /* PREFIX_VEX_38DC */ + /* PREFIX_VEX_0F3A02 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_38DC_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3A02_P_2) }, }, - /* PREFIX_VEX_38DD */ + /* PREFIX_VEX_0F3A04 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_38DD_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3A04_P_2) }, }, - /* PREFIX_VEX_38DE */ + /* PREFIX_VEX_0F3A05 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_38DE_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3A05_P_2) }, }, - /* PREFIX_VEX_38DF */ + /* PREFIX_VEX_0F3A06 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_38DF_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F3A06_P_2) }, }, - /* PREFIX_VEX_3A04 */ + /* PREFIX_VEX_0F3A08 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "vpermilps", { XM, EXx, Ib } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3A08_P_2) }, }, - /* PREFIX_VEX_3A05 */ + /* PREFIX_VEX_0F3A09 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "vpermilpd", { XM, EXx, Ib } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3A09_P_2) }, }, - /* PREFIX_VEX_3A06 */ + /* PREFIX_VEX_0F3A0A */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_3A06_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F3A0A_P_2) }, }, - /* PREFIX_VEX_3A08 */ + /* PREFIX_VEX_0F3A0B */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "vroundps", { XM, EXx, Ib } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F3A0B_P_2) }, }, - /* PREFIX_VEX_3A09 */ + /* PREFIX_VEX_0F3A0C */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "vroundpd", { XM, EXx, Ib } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3A0C_P_2) }, }, - /* PREFIX_VEX_3A0A */ + /* PREFIX_VEX_0F3A0D */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_3A0A_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3A0D_P_2) }, }, - /* PREFIX_VEX_3A0B */ + /* PREFIX_VEX_0F3A0E */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_3A0B_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3A0E_P_2) }, }, - /* PREFIX_VEX_3A0C */ + /* PREFIX_VEX_0F3A0F */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "vblendps", { XM, Vex, EXx, Ib } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3A0F_P_2) }, }, - /* PREFIX_VEX_3A0D */ + /* PREFIX_VEX_0F3A14 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "vblendpd", { XM, Vex, EXx, Ib } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F3A14_P_2) }, }, - /* PREFIX_VEX_3A0E */ + /* PREFIX_VEX_0F3A15 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_3A0E_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F3A15_P_2) }, }, - /* PREFIX_VEX_3A0F */ + /* PREFIX_VEX_0F3A16 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_3A0F_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F3A16_P_2) }, }, - /* PREFIX_VEX_3A14 */ + /* PREFIX_VEX_0F3A17 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_3A14_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F3A17_P_2) }, }, - /* PREFIX_VEX_3A15 */ + /* PREFIX_VEX_0F3A18 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_3A15_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F3A18_P_2) }, }, - /* PREFIX_VEX_3A16 */ + /* PREFIX_VEX_0F3A19 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_3A16_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F3A19_P_2) }, }, - /* PREFIX_VEX_3A17 */ + /* PREFIX_VEX_0F3A1D */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_3A17_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { "vcvtps2ph", { EXxmmq, XM, Ib } }, }, - /* PREFIX_VEX_3A18 */ + /* PREFIX_VEX_0F3A20 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_3A18_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F3A20_P_2) }, }, - /* PREFIX_VEX_3A19 */ + /* PREFIX_VEX_0F3A21 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_3A19_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F3A21_P_2) }, }, - /* PREFIX_VEX_3A20 */ + /* PREFIX_VEX_0F3A22 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_3A20_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F3A22_P_2) }, }, - /* PREFIX_VEX_3A21 */ + /* PREFIX_VEX_0F3A38 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_3A21_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F3A38_P_2) }, }, - /* PREFIX_VEX_3A22 */ + /* PREFIX_VEX_0F3A39 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_3A22_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F3A39_P_2) }, }, - /* PREFIX_VEX_3A40 */ + /* PREFIX_VEX_0F3A40 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "vdpps", { XM, Vex, EXx, Ib } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3A40_P_2) }, }, - /* PREFIX_VEX_3A41 */ + /* PREFIX_VEX_0F3A41 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_3A41_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F3A41_P_2) }, }, - /* PREFIX_VEX_3A42 */ + /* PREFIX_VEX_0F3A42 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_3A42_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3A42_P_2) }, }, - /* PREFIX_VEX_3A44 */ + /* PREFIX_VEX_0F3A44 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_3A44_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F3A44_P_2) }, }, - /* PREFIX_VEX_3A4A */ + /* PREFIX_VEX_0F3A46 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "vblendvps", { XM, Vex, EXx, XMVexI4 } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F3A46_P_2) }, }, - /* PREFIX_VEX_3A4B */ + /* PREFIX_VEX_0F3A48 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "vblendvpd", { XM, Vex, EXx, XMVexI4 } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3A48_P_2) }, }, - /* PREFIX_VEX_3A4C */ + /* PREFIX_VEX_0F3A49 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_3A4C_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3A49_P_2) }, }, - /* PREFIX_VEX_3A5C */ + /* PREFIX_VEX_0F3A4A */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3A4A_P_2) }, + }, + + /* PREFIX_VEX_0F3A4B */ + { + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3A4B_P_2) }, + }, + + /* PREFIX_VEX_0F3A4C */ + { + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3A4C_P_2) }, + }, + + /* PREFIX_VEX_0F3A5C */ + { + { Bad_Opcode }, + { Bad_Opcode }, { "vfmaddsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } }, - { "(bad)", { XX } }, }, - /* PREFIX_VEX_3A5D */ + /* PREFIX_VEX_0F3A5D */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "vfmaddsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } }, - { "(bad)", { XX } }, }, - /* PREFIX_VEX_3A5E */ + /* PREFIX_VEX_0F3A5E */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "vfmsubaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } }, - { "(bad)", { XX } }, }, - /* PREFIX_VEX_3A5F */ + /* PREFIX_VEX_0F3A5F */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "vfmsubaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } }, - { "(bad)", { XX } }, }, - /* PREFIX_VEX_3A60 */ + /* PREFIX_VEX_0F3A60 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_3A60_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F3A60_P_2) }, + { Bad_Opcode }, }, - /* PREFIX_VEX_3A61 */ + /* PREFIX_VEX_0F3A61 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_3A61_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F3A61_P_2) }, }, - /* PREFIX_VEX_3A62 */ + /* PREFIX_VEX_0F3A62 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_3A62_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F3A62_P_2) }, }, - /* PREFIX_VEX_3A63 */ + /* PREFIX_VEX_0F3A63 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_3A63_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F3A63_P_2) }, }, - /* PREFIX_VEX_3A68 */ + /* PREFIX_VEX_0F3A68 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "vfmaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } }, - { "(bad)", { XX } }, }, - /* PREFIX_VEX_3A69 */ + /* PREFIX_VEX_0F3A69 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "vfmaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } }, - { "(bad)", { XX } }, }, - /* PREFIX_VEX_3A6A */ + /* PREFIX_VEX_0F3A6A */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_3A6A_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F3A6A_P_2) }, }, - /* PREFIX_VEX_3A6B */ + /* PREFIX_VEX_0F3A6B */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_3A6B_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F3A6B_P_2) }, }, - /* PREFIX_VEX_3A6C */ + /* PREFIX_VEX_0F3A6C */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "vfmsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } }, - { "(bad)", { XX } }, }, - /* PREFIX_VEX_3A6D */ + /* PREFIX_VEX_0F3A6D */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "vfmsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } }, - { "(bad)", { XX } }, }, - /* PREFIX_VEX_3A6E */ + /* PREFIX_VEX_0F3A6E */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_3A6E_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F3A6E_P_2) }, }, - /* PREFIX_VEX_3A6F */ + /* PREFIX_VEX_0F3A6F */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_3A6F_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F3A6F_P_2) }, }, - /* PREFIX_VEX_3A78 */ + /* PREFIX_VEX_0F3A78 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "vfnmaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } }, - { "(bad)", { XX } }, }, - /* PREFIX_VEX_3A79 */ + /* PREFIX_VEX_0F3A79 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "vfnmaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } }, - { "(bad)", { XX } }, }, - /* PREFIX_VEX_3A7A */ + /* PREFIX_VEX_0F3A7A */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_3A7A_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F3A7A_P_2) }, }, - /* PREFIX_VEX_3A7B */ + /* PREFIX_VEX_0F3A7B */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_3A7B_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F3A7B_P_2) }, }, - /* PREFIX_VEX_3A7C */ + /* PREFIX_VEX_0F3A7C */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "vfnmsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } }, - { "(bad)", { XX } }, + { Bad_Opcode }, }, - /* PREFIX_VEX_3A7D */ + /* PREFIX_VEX_0F3A7D */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "vfnmsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } }, - { "(bad)", { XX } }, }, - /* PREFIX_VEX_3A7E */ + /* PREFIX_VEX_0F3A7E */ + { + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F3A7E_P_2) }, + }, + + /* PREFIX_VEX_0F3A7F */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_3A7E_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F3A7F_P_2) }, }, - /* PREFIX_VEX_3A7F */ + /* PREFIX_VEX_0F3ADF */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_3A7F_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F3ADF_P_2) }, }, - /* PREFIX_VEX_3ADF */ + /* PREFIX_VEX_0F3AF0 */ { - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_3ADF_P_2) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F3AF0_P_3) }, }, }; static const struct dis386 x86_64_table[][2] = { /* X86_64_06 */ { - { "push{T|}", { es } }, - { "(bad)", { XX } }, + { "pushP", { es } }, }, /* X86_64_07 */ { - { "pop{T|}", { es } }, - { "(bad)", { XX } }, + { "popP", { es } }, }, /* X86_64_0D */ { - { "push{T|}", { cs } }, - { "(bad)", { XX } }, + { "pushP", { cs } }, }, /* X86_64_16 */ { - { "push{T|}", { ss } }, - { "(bad)", { XX } }, + { "pushP", { ss } }, }, /* X86_64_17 */ { - { "pop{T|}", { ss } }, - { "(bad)", { XX } }, + { "popP", { ss } }, }, /* X86_64_1E */ { - { "push{T|}", { ds } }, - { "(bad)", { XX } }, + { "pushP", { ds } }, }, /* X86_64_1F */ { - { "pop{T|}", { ds } }, - { "(bad)", { XX } }, + { "popP", { ds } }, }, /* X86_64_27 */ { { "daa", { XX } }, - { "(bad)", { XX } }, }, /* X86_64_2F */ { { "das", { XX } }, - { "(bad)", { XX } }, }, /* X86_64_37 */ { { "aaa", { XX } }, - { "(bad)", { XX } }, }, /* X86_64_3F */ { { "aas", { XX } }, - { "(bad)", { XX } }, }, /* X86_64_60 */ { - { "pusha{P|}", { XX } }, - { "(bad)", { XX } }, + { "pushaP", { XX } }, }, /* X86_64_61 */ { - { "popa{P|}", { XX } }, - { "(bad)", { XX } }, + { "popaP", { XX } }, }, /* X86_64_62 */ { { MOD_TABLE (MOD_62_32BIT) }, - { "(bad)", { XX } }, }, /* X86_64_63 */ @@ -5439,7 +5746,6 @@ static const struct dis386 x86_64_table[][2] = { /* X86_64_9A */ { { "Jcall{T|}", { Ap } }, - { "(bad)", { XX } }, }, /* X86_64_C4 */ @@ -5457,25 +5763,21 @@ static const struct dis386 x86_64_table[][2] = { /* X86_64_CE */ { { "into", { XX } }, - { "(bad)", { XX } }, }, /* X86_64_D4 */ { - { "aam", { sIb } }, - { "(bad)", { XX } }, + { "aam", { Ib } }, }, /* X86_64_D5 */ { - { "aad", { sIb } }, - { "(bad)", { XX } }, + { "aad", { Ib } }, }, /* X86_64_EA */ { { "Jjmp{T|}", { Ap } }, - { "(bad)", { XX } }, }, /* X86_64_0F01_REG_0 */ @@ -5521,28 +5823,28 @@ static const struct dis386 three_byte_table[][256] = { { "psignw", { MX, EM } }, { "psignd", { MX, EM } }, { "pmulhrsw", { MX, EM } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 10 */ { PREFIX_TABLE (PREFIX_0F3810) }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, { PREFIX_TABLE (PREFIX_0F3814) }, { PREFIX_TABLE (PREFIX_0F3815) }, - { "(bad)", { XX } }, + { Bad_Opcode }, { PREFIX_TABLE (PREFIX_0F3817) }, /* 18 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, { "pabsb", { MX, EM } }, { "pabsw", { MX, EM } }, { "pabsd", { MX, EM } }, - { "(bad)", { XX } }, + { Bad_Opcode }, /* 20 */ { PREFIX_TABLE (PREFIX_0F3820) }, { PREFIX_TABLE (PREFIX_0F3821) }, @@ -5550,17 +5852,17 @@ static const struct dis386 three_byte_table[][256] = { { PREFIX_TABLE (PREFIX_0F3823) }, { PREFIX_TABLE (PREFIX_0F3824) }, { PREFIX_TABLE (PREFIX_0F3825) }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, /* 28 */ { PREFIX_TABLE (PREFIX_0F3828) }, { PREFIX_TABLE (PREFIX_0F3829) }, { PREFIX_TABLE (PREFIX_0F382A) }, { PREFIX_TABLE (PREFIX_0F382B) }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 30 */ { PREFIX_TABLE (PREFIX_0F3830) }, { PREFIX_TABLE (PREFIX_0F3831) }, @@ -5568,7 +5870,7 @@ static const struct dis386 three_byte_table[][256] = { { PREFIX_TABLE (PREFIX_0F3833) }, { PREFIX_TABLE (PREFIX_0F3834) }, { PREFIX_TABLE (PREFIX_0F3835) }, - { "(bad)", { XX } }, + { Bad_Opcode }, { PREFIX_TABLE (PREFIX_0F3837) }, /* 38 */ { PREFIX_TABLE (PREFIX_0F3838) }, @@ -5582,231 +5884,231 @@ static const struct dis386 three_byte_table[][256] = { /* 40 */ { PREFIX_TABLE (PREFIX_0F3840) }, { PREFIX_TABLE (PREFIX_0F3841) }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 48 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 50 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 58 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 60 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 68 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 70 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 78 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 80 */ { PREFIX_TABLE (PREFIX_0F3880) }, { PREFIX_TABLE (PREFIX_0F3881) }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { PREFIX_TABLE (PREFIX_0F3882) }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 88 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 90 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 98 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* a0 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* a8 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* b0 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* b8 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* c0 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* c8 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* d0 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* d8 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, { PREFIX_TABLE (PREFIX_0F38DB) }, { PREFIX_TABLE (PREFIX_0F38DC) }, { PREFIX_TABLE (PREFIX_0F38DD) }, { PREFIX_TABLE (PREFIX_0F38DE) }, { PREFIX_TABLE (PREFIX_0F38DF) }, /* e0 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* e8 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* f0 */ { PREFIX_TABLE (PREFIX_0F38F0) }, { PREFIX_TABLE (PREFIX_0F38F1) }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { PREFIX_TABLE (PREFIX_0F38F6) }, + { Bad_Opcode }, /* f8 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, }, /* THREE_BYTE_0F3A */ { /* 00 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 08 */ { PREFIX_TABLE (PREFIX_0F3A08) }, { PREFIX_TABLE (PREFIX_0F3A09) }, @@ -5817,1152 +6119,1443 @@ static const struct dis386 three_byte_table[][256] = { { PREFIX_TABLE (PREFIX_0F3A0E) }, { "palignr", { MX, EM, Ib } }, /* 10 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, { PREFIX_TABLE (PREFIX_0F3A14) }, { PREFIX_TABLE (PREFIX_0F3A15) }, { PREFIX_TABLE (PREFIX_0F3A16) }, { PREFIX_TABLE (PREFIX_0F3A17) }, /* 18 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 20 */ { PREFIX_TABLE (PREFIX_0F3A20) }, { PREFIX_TABLE (PREFIX_0F3A21) }, { PREFIX_TABLE (PREFIX_0F3A22) }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 28 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 30 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 38 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 40 */ { PREFIX_TABLE (PREFIX_0F3A40) }, { PREFIX_TABLE (PREFIX_0F3A41) }, { PREFIX_TABLE (PREFIX_0F3A42) }, - { "(bad)", { XX } }, + { Bad_Opcode }, { PREFIX_TABLE (PREFIX_0F3A44) }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 48 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 50 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 58 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 60 */ { PREFIX_TABLE (PREFIX_0F3A60) }, { PREFIX_TABLE (PREFIX_0F3A61) }, { PREFIX_TABLE (PREFIX_0F3A62) }, { PREFIX_TABLE (PREFIX_0F3A63) }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 68 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 70 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 78 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 80 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 88 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 90 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 98 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* a0 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* a8 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* b0 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* b8 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* c0 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* c8 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* d0 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* d8 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, { PREFIX_TABLE (PREFIX_0F3ADF) }, /* e0 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* e8 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* f0 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* f8 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, }, /* THREE_BYTE_0F7A */ { /* 00 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 08 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 10 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 18 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 20 */ { "ptest", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 28 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 30 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 38 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 40 */ - { "(bad)", { XX } }, + { Bad_Opcode }, { "phaddbw", { XM, EXq } }, { "phaddbd", { XM, EXq } }, { "phaddbq", { XM, EXq } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "phaddwd", { XM, EXq } }, { "phaddwq", { XM, EXq } }, /* 48 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, { "phadddq", { XM, EXq } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 50 */ - { "(bad)", { XX } }, + { Bad_Opcode }, { "phaddubw", { XM, EXq } }, { "phaddubd", { XM, EXq } }, { "phaddubq", { XM, EXq } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "phadduwd", { XM, EXq } }, { "phadduwq", { XM, EXq } }, /* 58 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, { "phaddudq", { XM, EXq } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 60 */ - { "(bad)", { XX } }, + { Bad_Opcode }, { "phsubbw", { XM, EXq } }, { "phsubbd", { XM, EXq } }, { "phsubbq", { XM, EXq } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 68 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 70 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 78 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 80 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 88 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 90 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 98 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* a0 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* a8 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* b0 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* b8 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* c0 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* c8 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* d0 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* d8 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* e0 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* e8 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* f0 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* f8 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, }, }; static const struct dis386 xop_table[][256] = { + /* XOP_08 */ + { + /* 00 */ + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + /* 08 */ + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + /* 10 */ + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + /* 18 */ + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + /* 20 */ + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + /* 28 */ + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + /* 30 */ + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + /* 38 */ + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + /* 40 */ + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + /* 48 */ + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + /* 50 */ + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + /* 58 */ + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + /* 60 */ + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + /* 68 */ + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + /* 70 */ + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + /* 78 */ + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + /* 80 */ + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { "vpmacssww", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } }, + { "vpmacsswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } }, + { "vpmacssdql", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } }, + /* 88 */ + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { "vpmacssdd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } }, + { "vpmacssdqh", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } }, + /* 90 */ + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { "vpmacsww", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } }, + { "vpmacswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } }, + { "vpmacsdql", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } }, + /* 98 */ + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { "vpmacsdd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } }, + { "vpmacsdqh", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } }, + /* a0 */ + { Bad_Opcode }, + { Bad_Opcode }, + { "vpcmov", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } }, + { "vpperm", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } }, + { Bad_Opcode }, + { Bad_Opcode }, + { "vpmadcsswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } }, + { Bad_Opcode }, + /* a8 */ + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + /* b0 */ + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { "vpmadcswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } }, + { Bad_Opcode }, + /* b8 */ + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + /* c0 */ + { "vprotb", { XM, Vex_2src_1, Ib } }, + { "vprotw", { XM, Vex_2src_1, Ib } }, + { "vprotd", { XM, Vex_2src_1, Ib } }, + { "vprotq", { XM, Vex_2src_1, Ib } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + /* c8 */ + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CC) }, + { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CD) }, + { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CE) }, + { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CF) }, + /* d0 */ + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + /* d8 */ + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + /* e0 */ + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + /* e8 */ + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EC) }, + { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_ED) }, + { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EE) }, + { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EF) }, + /* f0 */ + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + /* f8 */ + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + }, /* XOP_09 */ { /* 00 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { REG_TABLE (REG_XOP_TBM_01) }, + { REG_TABLE (REG_XOP_TBM_02) }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 08 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 10 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { REG_TABLE (REG_XOP_LWPCB) }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 18 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 20 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 28 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 30 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 38 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 40 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 48 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 50 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 58 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 60 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 68 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 70 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 78 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 80 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_80) }, + { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_81) }, + { "vfrczss", { XM, EXd } }, + { "vfrczsd", { XM, EXq } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 88 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 90 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { "vprotb", { XM, Vex_2src_1, Vex_2src_2 } }, + { "vprotw", { XM, Vex_2src_1, Vex_2src_2 } }, + { "vprotd", { XM, Vex_2src_1, Vex_2src_2 } }, + { "vprotq", { XM, Vex_2src_1, Vex_2src_2 } }, + { "vpshlb", { XM, Vex_2src_1, Vex_2src_2 } }, + { "vpshlw", { XM, Vex_2src_1, Vex_2src_2 } }, + { "vpshld", { XM, Vex_2src_1, Vex_2src_2 } }, + { "vpshlq", { XM, Vex_2src_1, Vex_2src_2 } }, /* 98 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { "vpshab", { XM, Vex_2src_1, Vex_2src_2 } }, + { "vpshaw", { XM, Vex_2src_1, Vex_2src_2 } }, + { "vpshad", { XM, Vex_2src_1, Vex_2src_2 } }, + { "vpshaq", { XM, Vex_2src_1, Vex_2src_2 } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* a0 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* a8 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* b0 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* b8 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* c0 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { "vphaddbw", { XM, EXxmm } }, + { "vphaddbd", { XM, EXxmm } }, + { "vphaddbq", { XM, EXxmm } }, + { Bad_Opcode }, + { Bad_Opcode }, + { "vphaddwd", { XM, EXxmm } }, + { "vphaddwq", { XM, EXxmm } }, /* c8 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { "vphadddq", { XM, EXxmm } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* d0 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { "vphaddubw", { XM, EXxmm } }, + { "vphaddubd", { XM, EXxmm } }, + { "vphaddubq", { XM, EXxmm } }, + { Bad_Opcode }, + { Bad_Opcode }, + { "vphadduwd", { XM, EXxmm } }, + { "vphadduwq", { XM, EXxmm } }, /* d8 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { "vphaddudq", { XM, EXxmm } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* e0 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { "vphsubbw", { XM, EXxmm } }, + { "vphsubwd", { XM, EXxmm } }, + { "vphsubdq", { XM, EXxmm } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* e8 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* f0 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* f8 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, }, /* XOP_0A */ { /* 00 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 08 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 10 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { "bextr", { Gv, Ev, Iq } }, + { Bad_Opcode }, { REG_TABLE (REG_XOP_LWP) }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 18 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 20 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 28 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 30 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 38 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 40 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 48 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 50 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 58 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 60 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 68 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 70 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 78 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 80 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 88 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 90 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 98 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* a0 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* a8 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* b0 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* b8 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* c0 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* c8 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* d0 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* d8 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* e0 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* e8 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* f0 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* f8 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, }, }; @@ -6970,2089 +7563,2600 @@ static const struct dis386 vex_table[][256] = { /* VEX_0F */ { /* 00 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 08 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 10 */ - { PREFIX_TABLE (PREFIX_VEX_10) }, - { PREFIX_TABLE (PREFIX_VEX_11) }, - { PREFIX_TABLE (PREFIX_VEX_12) }, - { MOD_TABLE (MOD_VEX_13) }, - { "vunpcklpX", { XM, Vex, EXx } }, - { "vunpckhpX", { XM, Vex, EXx } }, - { PREFIX_TABLE (PREFIX_VEX_16) }, - { MOD_TABLE (MOD_VEX_17) }, + { PREFIX_TABLE (PREFIX_VEX_0F10) }, + { PREFIX_TABLE (PREFIX_VEX_0F11) }, + { PREFIX_TABLE (PREFIX_VEX_0F12) }, + { MOD_TABLE (MOD_VEX_0F13) }, + { VEX_W_TABLE (VEX_W_0F14) }, + { VEX_W_TABLE (VEX_W_0F15) }, + { PREFIX_TABLE (PREFIX_VEX_0F16) }, + { MOD_TABLE (MOD_VEX_0F17) }, /* 18 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 20 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 28 */ - { "vmovapX", { XM, EXx } }, - { "vmovapX", { EXxS, XM } }, - { PREFIX_TABLE (PREFIX_VEX_2A) }, - { MOD_TABLE (MOD_VEX_2B) }, - { PREFIX_TABLE (PREFIX_VEX_2C) }, - { PREFIX_TABLE (PREFIX_VEX_2D) }, - { PREFIX_TABLE (PREFIX_VEX_2E) }, - { PREFIX_TABLE (PREFIX_VEX_2F) }, + { VEX_W_TABLE (VEX_W_0F28) }, + { VEX_W_TABLE (VEX_W_0F29) }, + { PREFIX_TABLE (PREFIX_VEX_0F2A) }, + { MOD_TABLE (MOD_VEX_0F2B) }, + { PREFIX_TABLE (PREFIX_VEX_0F2C) }, + { PREFIX_TABLE (PREFIX_VEX_0F2D) }, + { PREFIX_TABLE (PREFIX_VEX_0F2E) }, + { PREFIX_TABLE (PREFIX_VEX_0F2F) }, /* 30 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 38 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 40 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 48 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 50 */ - { MOD_TABLE (MOD_VEX_51) }, - { PREFIX_TABLE (PREFIX_VEX_51) }, - { PREFIX_TABLE (PREFIX_VEX_52) }, - { PREFIX_TABLE (PREFIX_VEX_53) }, + { MOD_TABLE (MOD_VEX_0F50) }, + { PREFIX_TABLE (PREFIX_VEX_0F51) }, + { PREFIX_TABLE (PREFIX_VEX_0F52) }, + { PREFIX_TABLE (PREFIX_VEX_0F53) }, { "vandpX", { XM, Vex, EXx } }, { "vandnpX", { XM, Vex, EXx } }, { "vorpX", { XM, Vex, EXx } }, { "vxorpX", { XM, Vex, EXx } }, /* 58 */ - { PREFIX_TABLE (PREFIX_VEX_58) }, - { PREFIX_TABLE (PREFIX_VEX_59) }, - { PREFIX_TABLE (PREFIX_VEX_5A) }, - { PREFIX_TABLE (PREFIX_VEX_5B) }, - { PREFIX_TABLE (PREFIX_VEX_5C) }, - { PREFIX_TABLE (PREFIX_VEX_5D) }, - { PREFIX_TABLE (PREFIX_VEX_5E) }, - { PREFIX_TABLE (PREFIX_VEX_5F) }, + { PREFIX_TABLE (PREFIX_VEX_0F58) }, + { PREFIX_TABLE (PREFIX_VEX_0F59) }, + { PREFIX_TABLE (PREFIX_VEX_0F5A) }, + { PREFIX_TABLE (PREFIX_VEX_0F5B) }, + { PREFIX_TABLE (PREFIX_VEX_0F5C) }, + { PREFIX_TABLE (PREFIX_VEX_0F5D) }, + { PREFIX_TABLE (PREFIX_VEX_0F5E) }, + { PREFIX_TABLE (PREFIX_VEX_0F5F) }, /* 60 */ - { PREFIX_TABLE (PREFIX_VEX_60) }, - { PREFIX_TABLE (PREFIX_VEX_61) }, - { PREFIX_TABLE (PREFIX_VEX_62) }, - { PREFIX_TABLE (PREFIX_VEX_63) }, - { PREFIX_TABLE (PREFIX_VEX_64) }, - { PREFIX_TABLE (PREFIX_VEX_65) }, - { PREFIX_TABLE (PREFIX_VEX_66) }, - { PREFIX_TABLE (PREFIX_VEX_67) }, + { PREFIX_TABLE (PREFIX_VEX_0F60) }, + { PREFIX_TABLE (PREFIX_VEX_0F61) }, + { PREFIX_TABLE (PREFIX_VEX_0F62) }, + { PREFIX_TABLE (PREFIX_VEX_0F63) }, + { PREFIX_TABLE (PREFIX_VEX_0F64) }, + { PREFIX_TABLE (PREFIX_VEX_0F65) }, + { PREFIX_TABLE (PREFIX_VEX_0F66) }, + { PREFIX_TABLE (PREFIX_VEX_0F67) }, /* 68 */ - { PREFIX_TABLE (PREFIX_VEX_68) }, - { PREFIX_TABLE (PREFIX_VEX_69) }, - { PREFIX_TABLE (PREFIX_VEX_6A) }, - { PREFIX_TABLE (PREFIX_VEX_6B) }, - { PREFIX_TABLE (PREFIX_VEX_6C) }, - { PREFIX_TABLE (PREFIX_VEX_6D) }, - { PREFIX_TABLE (PREFIX_VEX_6E) }, - { PREFIX_TABLE (PREFIX_VEX_6F) }, + { PREFIX_TABLE (PREFIX_VEX_0F68) }, + { PREFIX_TABLE (PREFIX_VEX_0F69) }, + { PREFIX_TABLE (PREFIX_VEX_0F6A) }, + { PREFIX_TABLE (PREFIX_VEX_0F6B) }, + { PREFIX_TABLE (PREFIX_VEX_0F6C) }, + { PREFIX_TABLE (PREFIX_VEX_0F6D) }, + { PREFIX_TABLE (PREFIX_VEX_0F6E) }, + { PREFIX_TABLE (PREFIX_VEX_0F6F) }, /* 70 */ - { PREFIX_TABLE (PREFIX_VEX_70) }, - { REG_TABLE (REG_VEX_71) }, - { REG_TABLE (REG_VEX_72) }, - { REG_TABLE (REG_VEX_73) }, - { PREFIX_TABLE (PREFIX_VEX_74) }, - { PREFIX_TABLE (PREFIX_VEX_75) }, - { PREFIX_TABLE (PREFIX_VEX_76) }, - { PREFIX_TABLE (PREFIX_VEX_77) }, + { PREFIX_TABLE (PREFIX_VEX_0F70) }, + { REG_TABLE (REG_VEX_0F71) }, + { REG_TABLE (REG_VEX_0F72) }, + { REG_TABLE (REG_VEX_0F73) }, + { PREFIX_TABLE (PREFIX_VEX_0F74) }, + { PREFIX_TABLE (PREFIX_VEX_0F75) }, + { PREFIX_TABLE (PREFIX_VEX_0F76) }, + { PREFIX_TABLE (PREFIX_VEX_0F77) }, /* 78 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { PREFIX_TABLE (PREFIX_VEX_7C) }, - { PREFIX_TABLE (PREFIX_VEX_7D) }, - { PREFIX_TABLE (PREFIX_VEX_7E) }, - { PREFIX_TABLE (PREFIX_VEX_7F) }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { PREFIX_TABLE (PREFIX_VEX_0F7C) }, + { PREFIX_TABLE (PREFIX_VEX_0F7D) }, + { PREFIX_TABLE (PREFIX_VEX_0F7E) }, + { PREFIX_TABLE (PREFIX_VEX_0F7F) }, /* 80 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 88 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 90 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 98 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* a0 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* a8 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { REG_TABLE (REG_VEX_AE) }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { REG_TABLE (REG_VEX_0FAE) }, + { Bad_Opcode }, /* b0 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* b8 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* c0 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { PREFIX_TABLE (PREFIX_VEX_C2) }, - { "(bad)", { XX } }, - { PREFIX_TABLE (PREFIX_VEX_C4) }, - { PREFIX_TABLE (PREFIX_VEX_C5) }, + { Bad_Opcode }, + { Bad_Opcode }, + { PREFIX_TABLE (PREFIX_VEX_0FC2) }, + { Bad_Opcode }, + { PREFIX_TABLE (PREFIX_VEX_0FC4) }, + { PREFIX_TABLE (PREFIX_VEX_0FC5) }, { "vshufpX", { XM, Vex, EXx, Ib } }, - { "(bad)", { XX } }, + { Bad_Opcode }, /* c8 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* d0 */ - { PREFIX_TABLE (PREFIX_VEX_D0) }, - { PREFIX_TABLE (PREFIX_VEX_D1) }, - { PREFIX_TABLE (PREFIX_VEX_D2) }, - { PREFIX_TABLE (PREFIX_VEX_D3) }, - { PREFIX_TABLE (PREFIX_VEX_D4) }, - { PREFIX_TABLE (PREFIX_VEX_D5) }, - { PREFIX_TABLE (PREFIX_VEX_D6) }, - { PREFIX_TABLE (PREFIX_VEX_D7) }, + { PREFIX_TABLE (PREFIX_VEX_0FD0) }, + { PREFIX_TABLE (PREFIX_VEX_0FD1) }, + { PREFIX_TABLE (PREFIX_VEX_0FD2) }, + { PREFIX_TABLE (PREFIX_VEX_0FD3) }, + { PREFIX_TABLE (PREFIX_VEX_0FD4) }, + { PREFIX_TABLE (PREFIX_VEX_0FD5) }, + { PREFIX_TABLE (PREFIX_VEX_0FD6) }, + { PREFIX_TABLE (PREFIX_VEX_0FD7) }, /* d8 */ - { PREFIX_TABLE (PREFIX_VEX_D8) }, - { PREFIX_TABLE (PREFIX_VEX_D9) }, - { PREFIX_TABLE (PREFIX_VEX_DA) }, - { PREFIX_TABLE (PREFIX_VEX_DB) }, - { PREFIX_TABLE (PREFIX_VEX_DC) }, - { PREFIX_TABLE (PREFIX_VEX_DD) }, - { PREFIX_TABLE (PREFIX_VEX_DE) }, - { PREFIX_TABLE (PREFIX_VEX_DF) }, + { PREFIX_TABLE (PREFIX_VEX_0FD8) }, + { PREFIX_TABLE (PREFIX_VEX_0FD9) }, + { PREFIX_TABLE (PREFIX_VEX_0FDA) }, + { PREFIX_TABLE (PREFIX_VEX_0FDB) }, + { PREFIX_TABLE (PREFIX_VEX_0FDC) }, + { PREFIX_TABLE (PREFIX_VEX_0FDD) }, + { PREFIX_TABLE (PREFIX_VEX_0FDE) }, + { PREFIX_TABLE (PREFIX_VEX_0FDF) }, /* e0 */ - { PREFIX_TABLE (PREFIX_VEX_E0) }, - { PREFIX_TABLE (PREFIX_VEX_E1) }, - { PREFIX_TABLE (PREFIX_VEX_E2) }, - { PREFIX_TABLE (PREFIX_VEX_E3) }, - { PREFIX_TABLE (PREFIX_VEX_E4) }, - { PREFIX_TABLE (PREFIX_VEX_E5) }, - { PREFIX_TABLE (PREFIX_VEX_E6) }, - { PREFIX_TABLE (PREFIX_VEX_E7) }, + { PREFIX_TABLE (PREFIX_VEX_0FE0) }, + { PREFIX_TABLE (PREFIX_VEX_0FE1) }, + { PREFIX_TABLE (PREFIX_VEX_0FE2) }, + { PREFIX_TABLE (PREFIX_VEX_0FE3) }, + { PREFIX_TABLE (PREFIX_VEX_0FE4) }, + { PREFIX_TABLE (PREFIX_VEX_0FE5) }, + { PREFIX_TABLE (PREFIX_VEX_0FE6) }, + { PREFIX_TABLE (PREFIX_VEX_0FE7) }, /* e8 */ - { PREFIX_TABLE (PREFIX_VEX_E8) }, - { PREFIX_TABLE (PREFIX_VEX_E9) }, - { PREFIX_TABLE (PREFIX_VEX_EA) }, - { PREFIX_TABLE (PREFIX_VEX_EB) }, - { PREFIX_TABLE (PREFIX_VEX_EC) }, - { PREFIX_TABLE (PREFIX_VEX_ED) }, - { PREFIX_TABLE (PREFIX_VEX_EE) }, - { PREFIX_TABLE (PREFIX_VEX_EF) }, + { PREFIX_TABLE (PREFIX_VEX_0FE8) }, + { PREFIX_TABLE (PREFIX_VEX_0FE9) }, + { PREFIX_TABLE (PREFIX_VEX_0FEA) }, + { PREFIX_TABLE (PREFIX_VEX_0FEB) }, + { PREFIX_TABLE (PREFIX_VEX_0FEC) }, + { PREFIX_TABLE (PREFIX_VEX_0FED) }, + { PREFIX_TABLE (PREFIX_VEX_0FEE) }, + { PREFIX_TABLE (PREFIX_VEX_0FEF) }, /* f0 */ - { PREFIX_TABLE (PREFIX_VEX_F0) }, - { PREFIX_TABLE (PREFIX_VEX_F1) }, - { PREFIX_TABLE (PREFIX_VEX_F2) }, - { PREFIX_TABLE (PREFIX_VEX_F3) }, - { PREFIX_TABLE (PREFIX_VEX_F4) }, - { PREFIX_TABLE (PREFIX_VEX_F5) }, - { PREFIX_TABLE (PREFIX_VEX_F6) }, - { PREFIX_TABLE (PREFIX_VEX_F7) }, + { PREFIX_TABLE (PREFIX_VEX_0FF0) }, + { PREFIX_TABLE (PREFIX_VEX_0FF1) }, + { PREFIX_TABLE (PREFIX_VEX_0FF2) }, + { PREFIX_TABLE (PREFIX_VEX_0FF3) }, + { PREFIX_TABLE (PREFIX_VEX_0FF4) }, + { PREFIX_TABLE (PREFIX_VEX_0FF5) }, + { PREFIX_TABLE (PREFIX_VEX_0FF6) }, + { PREFIX_TABLE (PREFIX_VEX_0FF7) }, /* f8 */ - { PREFIX_TABLE (PREFIX_VEX_F8) }, - { PREFIX_TABLE (PREFIX_VEX_F9) }, - { PREFIX_TABLE (PREFIX_VEX_FA) }, - { PREFIX_TABLE (PREFIX_VEX_FB) }, - { PREFIX_TABLE (PREFIX_VEX_FC) }, - { PREFIX_TABLE (PREFIX_VEX_FD) }, - { PREFIX_TABLE (PREFIX_VEX_FE) }, - { "(bad)", { XX } }, + { PREFIX_TABLE (PREFIX_VEX_0FF8) }, + { PREFIX_TABLE (PREFIX_VEX_0FF9) }, + { PREFIX_TABLE (PREFIX_VEX_0FFA) }, + { PREFIX_TABLE (PREFIX_VEX_0FFB) }, + { PREFIX_TABLE (PREFIX_VEX_0FFC) }, + { PREFIX_TABLE (PREFIX_VEX_0FFD) }, + { PREFIX_TABLE (PREFIX_VEX_0FFE) }, + { Bad_Opcode }, }, /* VEX_0F38 */ { /* 00 */ - { PREFIX_TABLE (PREFIX_VEX_3800) }, - { PREFIX_TABLE (PREFIX_VEX_3801) }, - { PREFIX_TABLE (PREFIX_VEX_3802) }, - { PREFIX_TABLE (PREFIX_VEX_3803) }, - { PREFIX_TABLE (PREFIX_VEX_3804) }, - { PREFIX_TABLE (PREFIX_VEX_3805) }, - { PREFIX_TABLE (PREFIX_VEX_3806) }, - { PREFIX_TABLE (PREFIX_VEX_3807) }, + { PREFIX_TABLE (PREFIX_VEX_0F3800) }, + { PREFIX_TABLE (PREFIX_VEX_0F3801) }, + { PREFIX_TABLE (PREFIX_VEX_0F3802) }, + { PREFIX_TABLE (PREFIX_VEX_0F3803) }, + { PREFIX_TABLE (PREFIX_VEX_0F3804) }, + { PREFIX_TABLE (PREFIX_VEX_0F3805) }, + { PREFIX_TABLE (PREFIX_VEX_0F3806) }, + { PREFIX_TABLE (PREFIX_VEX_0F3807) }, /* 08 */ - { PREFIX_TABLE (PREFIX_VEX_3808) }, - { PREFIX_TABLE (PREFIX_VEX_3809) }, - { PREFIX_TABLE (PREFIX_VEX_380A) }, - { PREFIX_TABLE (PREFIX_VEX_380B) }, - { PREFIX_TABLE (PREFIX_VEX_380C) }, - { PREFIX_TABLE (PREFIX_VEX_380D) }, - { PREFIX_TABLE (PREFIX_VEX_380E) }, - { PREFIX_TABLE (PREFIX_VEX_380F) }, + { PREFIX_TABLE (PREFIX_VEX_0F3808) }, + { PREFIX_TABLE (PREFIX_VEX_0F3809) }, + { PREFIX_TABLE (PREFIX_VEX_0F380A) }, + { PREFIX_TABLE (PREFIX_VEX_0F380B) }, + { PREFIX_TABLE (PREFIX_VEX_0F380C) }, + { PREFIX_TABLE (PREFIX_VEX_0F380D) }, + { PREFIX_TABLE (PREFIX_VEX_0F380E) }, + { PREFIX_TABLE (PREFIX_VEX_0F380F) }, /* 10 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { PREFIX_TABLE (PREFIX_VEX_3817) }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { PREFIX_TABLE (PREFIX_VEX_0F3813) }, + { Bad_Opcode }, + { Bad_Opcode }, + { PREFIX_TABLE (PREFIX_VEX_0F3816) }, + { PREFIX_TABLE (PREFIX_VEX_0F3817) }, /* 18 */ - { PREFIX_TABLE (PREFIX_VEX_3818) }, - { PREFIX_TABLE (PREFIX_VEX_3819) }, - { PREFIX_TABLE (PREFIX_VEX_381A) }, - { "(bad)", { XX } }, - { PREFIX_TABLE (PREFIX_VEX_381C) }, - { PREFIX_TABLE (PREFIX_VEX_381D) }, - { PREFIX_TABLE (PREFIX_VEX_381E) }, - { "(bad)", { XX } }, + { PREFIX_TABLE (PREFIX_VEX_0F3818) }, + { PREFIX_TABLE (PREFIX_VEX_0F3819) }, + { PREFIX_TABLE (PREFIX_VEX_0F381A) }, + { Bad_Opcode }, + { PREFIX_TABLE (PREFIX_VEX_0F381C) }, + { PREFIX_TABLE (PREFIX_VEX_0F381D) }, + { PREFIX_TABLE (PREFIX_VEX_0F381E) }, + { Bad_Opcode }, /* 20 */ - { PREFIX_TABLE (PREFIX_VEX_3820) }, - { PREFIX_TABLE (PREFIX_VEX_3821) }, - { PREFIX_TABLE (PREFIX_VEX_3822) }, - { PREFIX_TABLE (PREFIX_VEX_3823) }, - { PREFIX_TABLE (PREFIX_VEX_3824) }, - { PREFIX_TABLE (PREFIX_VEX_3825) }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { PREFIX_TABLE (PREFIX_VEX_0F3820) }, + { PREFIX_TABLE (PREFIX_VEX_0F3821) }, + { PREFIX_TABLE (PREFIX_VEX_0F3822) }, + { PREFIX_TABLE (PREFIX_VEX_0F3823) }, + { PREFIX_TABLE (PREFIX_VEX_0F3824) }, + { PREFIX_TABLE (PREFIX_VEX_0F3825) }, + { Bad_Opcode }, + { Bad_Opcode }, /* 28 */ - { PREFIX_TABLE (PREFIX_VEX_3828) }, - { PREFIX_TABLE (PREFIX_VEX_3829) }, - { PREFIX_TABLE (PREFIX_VEX_382A) }, - { PREFIX_TABLE (PREFIX_VEX_382B) }, - { PREFIX_TABLE (PREFIX_VEX_382C) }, - { PREFIX_TABLE (PREFIX_VEX_382D) }, - { PREFIX_TABLE (PREFIX_VEX_382E) }, - { PREFIX_TABLE (PREFIX_VEX_382F) }, + { PREFIX_TABLE (PREFIX_VEX_0F3828) }, + { PREFIX_TABLE (PREFIX_VEX_0F3829) }, + { PREFIX_TABLE (PREFIX_VEX_0F382A) }, + { PREFIX_TABLE (PREFIX_VEX_0F382B) }, + { PREFIX_TABLE (PREFIX_VEX_0F382C) }, + { PREFIX_TABLE (PREFIX_VEX_0F382D) }, + { PREFIX_TABLE (PREFIX_VEX_0F382E) }, + { PREFIX_TABLE (PREFIX_VEX_0F382F) }, /* 30 */ - { PREFIX_TABLE (PREFIX_VEX_3830) }, - { PREFIX_TABLE (PREFIX_VEX_3831) }, - { PREFIX_TABLE (PREFIX_VEX_3832) }, - { PREFIX_TABLE (PREFIX_VEX_3833) }, - { PREFIX_TABLE (PREFIX_VEX_3834) }, - { PREFIX_TABLE (PREFIX_VEX_3835) }, - { "(bad)", { XX } }, - { PREFIX_TABLE (PREFIX_VEX_3837) }, + { PREFIX_TABLE (PREFIX_VEX_0F3830) }, + { PREFIX_TABLE (PREFIX_VEX_0F3831) }, + { PREFIX_TABLE (PREFIX_VEX_0F3832) }, + { PREFIX_TABLE (PREFIX_VEX_0F3833) }, + { PREFIX_TABLE (PREFIX_VEX_0F3834) }, + { PREFIX_TABLE (PREFIX_VEX_0F3835) }, + { PREFIX_TABLE (PREFIX_VEX_0F3836) }, + { PREFIX_TABLE (PREFIX_VEX_0F3837) }, /* 38 */ - { PREFIX_TABLE (PREFIX_VEX_3838) }, - { PREFIX_TABLE (PREFIX_VEX_3839) }, - { PREFIX_TABLE (PREFIX_VEX_383A) }, - { PREFIX_TABLE (PREFIX_VEX_383B) }, - { PREFIX_TABLE (PREFIX_VEX_383C) }, - { PREFIX_TABLE (PREFIX_VEX_383D) }, - { PREFIX_TABLE (PREFIX_VEX_383E) }, - { PREFIX_TABLE (PREFIX_VEX_383F) }, + { PREFIX_TABLE (PREFIX_VEX_0F3838) }, + { PREFIX_TABLE (PREFIX_VEX_0F3839) }, + { PREFIX_TABLE (PREFIX_VEX_0F383A) }, + { PREFIX_TABLE (PREFIX_VEX_0F383B) }, + { PREFIX_TABLE (PREFIX_VEX_0F383C) }, + { PREFIX_TABLE (PREFIX_VEX_0F383D) }, + { PREFIX_TABLE (PREFIX_VEX_0F383E) }, + { PREFIX_TABLE (PREFIX_VEX_0F383F) }, /* 40 */ - { PREFIX_TABLE (PREFIX_VEX_3840) }, - { PREFIX_TABLE (PREFIX_VEX_3841) }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { PREFIX_TABLE (PREFIX_VEX_0F3840) }, + { PREFIX_TABLE (PREFIX_VEX_0F3841) }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { PREFIX_TABLE (PREFIX_VEX_0F3845) }, + { PREFIX_TABLE (PREFIX_VEX_0F3846) }, + { PREFIX_TABLE (PREFIX_VEX_0F3847) }, /* 48 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 50 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 58 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { PREFIX_TABLE (PREFIX_VEX_0F3858) }, + { PREFIX_TABLE (PREFIX_VEX_0F3859) }, + { PREFIX_TABLE (PREFIX_VEX_0F385A) }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 60 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 68 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 70 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 78 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { PREFIX_TABLE (PREFIX_VEX_0F3878) }, + { PREFIX_TABLE (PREFIX_VEX_0F3879) }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 80 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 88 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { PREFIX_TABLE (PREFIX_VEX_0F388C) }, + { Bad_Opcode }, + { PREFIX_TABLE (PREFIX_VEX_0F388E) }, + { Bad_Opcode }, /* 90 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { PREFIX_TABLE (PREFIX_VEX_3896) }, - { PREFIX_TABLE (PREFIX_VEX_3897) }, + { PREFIX_TABLE (PREFIX_VEX_0F3890) }, + { PREFIX_TABLE (PREFIX_VEX_0F3891) }, + { PREFIX_TABLE (PREFIX_VEX_0F3892) }, + { PREFIX_TABLE (PREFIX_VEX_0F3893) }, + { Bad_Opcode }, + { Bad_Opcode }, + { PREFIX_TABLE (PREFIX_VEX_0F3896) }, + { PREFIX_TABLE (PREFIX_VEX_0F3897) }, /* 98 */ - { PREFIX_TABLE (PREFIX_VEX_3898) }, - { PREFIX_TABLE (PREFIX_VEX_3899) }, - { PREFIX_TABLE (PREFIX_VEX_389A) }, - { PREFIX_TABLE (PREFIX_VEX_389B) }, - { PREFIX_TABLE (PREFIX_VEX_389C) }, - { PREFIX_TABLE (PREFIX_VEX_389D) }, - { PREFIX_TABLE (PREFIX_VEX_389E) }, - { PREFIX_TABLE (PREFIX_VEX_389F) }, + { PREFIX_TABLE (PREFIX_VEX_0F3898) }, + { PREFIX_TABLE (PREFIX_VEX_0F3899) }, + { PREFIX_TABLE (PREFIX_VEX_0F389A) }, + { PREFIX_TABLE (PREFIX_VEX_0F389B) }, + { PREFIX_TABLE (PREFIX_VEX_0F389C) }, + { PREFIX_TABLE (PREFIX_VEX_0F389D) }, + { PREFIX_TABLE (PREFIX_VEX_0F389E) }, + { PREFIX_TABLE (PREFIX_VEX_0F389F) }, /* a0 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { PREFIX_TABLE (PREFIX_VEX_38A6) }, - { PREFIX_TABLE (PREFIX_VEX_38A7) }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { PREFIX_TABLE (PREFIX_VEX_0F38A6) }, + { PREFIX_TABLE (PREFIX_VEX_0F38A7) }, /* a8 */ - { PREFIX_TABLE (PREFIX_VEX_38A8) }, - { PREFIX_TABLE (PREFIX_VEX_38A9) }, - { PREFIX_TABLE (PREFIX_VEX_38AA) }, - { PREFIX_TABLE (PREFIX_VEX_38AB) }, - { PREFIX_TABLE (PREFIX_VEX_38AC) }, - { PREFIX_TABLE (PREFIX_VEX_38AD) }, - { PREFIX_TABLE (PREFIX_VEX_38AE) }, - { PREFIX_TABLE (PREFIX_VEX_38AF) }, + { PREFIX_TABLE (PREFIX_VEX_0F38A8) }, + { PREFIX_TABLE (PREFIX_VEX_0F38A9) }, + { PREFIX_TABLE (PREFIX_VEX_0F38AA) }, + { PREFIX_TABLE (PREFIX_VEX_0F38AB) }, + { PREFIX_TABLE (PREFIX_VEX_0F38AC) }, + { PREFIX_TABLE (PREFIX_VEX_0F38AD) }, + { PREFIX_TABLE (PREFIX_VEX_0F38AE) }, + { PREFIX_TABLE (PREFIX_VEX_0F38AF) }, /* b0 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { PREFIX_TABLE (PREFIX_VEX_38B6) }, - { PREFIX_TABLE (PREFIX_VEX_38B7) }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { PREFIX_TABLE (PREFIX_VEX_0F38B6) }, + { PREFIX_TABLE (PREFIX_VEX_0F38B7) }, /* b8 */ - { PREFIX_TABLE (PREFIX_VEX_38B8) }, - { PREFIX_TABLE (PREFIX_VEX_38B9) }, - { PREFIX_TABLE (PREFIX_VEX_38BA) }, - { PREFIX_TABLE (PREFIX_VEX_38BB) }, - { PREFIX_TABLE (PREFIX_VEX_38BC) }, - { PREFIX_TABLE (PREFIX_VEX_38BD) }, - { PREFIX_TABLE (PREFIX_VEX_38BE) }, - { PREFIX_TABLE (PREFIX_VEX_38BF) }, + { PREFIX_TABLE (PREFIX_VEX_0F38B8) }, + { PREFIX_TABLE (PREFIX_VEX_0F38B9) }, + { PREFIX_TABLE (PREFIX_VEX_0F38BA) }, + { PREFIX_TABLE (PREFIX_VEX_0F38BB) }, + { PREFIX_TABLE (PREFIX_VEX_0F38BC) }, + { PREFIX_TABLE (PREFIX_VEX_0F38BD) }, + { PREFIX_TABLE (PREFIX_VEX_0F38BE) }, + { PREFIX_TABLE (PREFIX_VEX_0F38BF) }, /* c0 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* c8 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* d0 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* d8 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { PREFIX_TABLE (PREFIX_VEX_38DB) }, - { PREFIX_TABLE (PREFIX_VEX_38DC) }, - { PREFIX_TABLE (PREFIX_VEX_38DD) }, - { PREFIX_TABLE (PREFIX_VEX_38DE) }, - { PREFIX_TABLE (PREFIX_VEX_38DF) }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { PREFIX_TABLE (PREFIX_VEX_0F38DB) }, + { PREFIX_TABLE (PREFIX_VEX_0F38DC) }, + { PREFIX_TABLE (PREFIX_VEX_0F38DD) }, + { PREFIX_TABLE (PREFIX_VEX_0F38DE) }, + { PREFIX_TABLE (PREFIX_VEX_0F38DF) }, /* e0 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* e8 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* f0 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { PREFIX_TABLE (PREFIX_VEX_0F38F2) }, + { REG_TABLE (REG_VEX_0F38F3) }, + { Bad_Opcode }, + { PREFIX_TABLE (PREFIX_VEX_0F38F5) }, + { PREFIX_TABLE (PREFIX_VEX_0F38F6) }, + { PREFIX_TABLE (PREFIX_VEX_0F38F7) }, /* f8 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, }, /* VEX_0F3A */ { /* 00 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { PREFIX_TABLE (PREFIX_VEX_3A04) }, - { PREFIX_TABLE (PREFIX_VEX_3A05) }, - { PREFIX_TABLE (PREFIX_VEX_3A06) }, - { "(bad)", { XX } }, + { PREFIX_TABLE (PREFIX_VEX_0F3A00) }, + { PREFIX_TABLE (PREFIX_VEX_0F3A01) }, + { PREFIX_TABLE (PREFIX_VEX_0F3A02) }, + { Bad_Opcode }, + { PREFIX_TABLE (PREFIX_VEX_0F3A04) }, + { PREFIX_TABLE (PREFIX_VEX_0F3A05) }, + { PREFIX_TABLE (PREFIX_VEX_0F3A06) }, + { Bad_Opcode }, /* 08 */ - { PREFIX_TABLE (PREFIX_VEX_3A08) }, - { PREFIX_TABLE (PREFIX_VEX_3A09) }, - { PREFIX_TABLE (PREFIX_VEX_3A0A) }, - { PREFIX_TABLE (PREFIX_VEX_3A0B) }, - { PREFIX_TABLE (PREFIX_VEX_3A0C) }, - { PREFIX_TABLE (PREFIX_VEX_3A0D) }, - { PREFIX_TABLE (PREFIX_VEX_3A0E) }, - { PREFIX_TABLE (PREFIX_VEX_3A0F) }, + { PREFIX_TABLE (PREFIX_VEX_0F3A08) }, + { PREFIX_TABLE (PREFIX_VEX_0F3A09) }, + { PREFIX_TABLE (PREFIX_VEX_0F3A0A) }, + { PREFIX_TABLE (PREFIX_VEX_0F3A0B) }, + { PREFIX_TABLE (PREFIX_VEX_0F3A0C) }, + { PREFIX_TABLE (PREFIX_VEX_0F3A0D) }, + { PREFIX_TABLE (PREFIX_VEX_0F3A0E) }, + { PREFIX_TABLE (PREFIX_VEX_0F3A0F) }, /* 10 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { PREFIX_TABLE (PREFIX_VEX_3A14) }, - { PREFIX_TABLE (PREFIX_VEX_3A15) }, - { PREFIX_TABLE (PREFIX_VEX_3A16) }, - { PREFIX_TABLE (PREFIX_VEX_3A17) }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { PREFIX_TABLE (PREFIX_VEX_0F3A14) }, + { PREFIX_TABLE (PREFIX_VEX_0F3A15) }, + { PREFIX_TABLE (PREFIX_VEX_0F3A16) }, + { PREFIX_TABLE (PREFIX_VEX_0F3A17) }, /* 18 */ - { PREFIX_TABLE (PREFIX_VEX_3A18) }, - { PREFIX_TABLE (PREFIX_VEX_3A19) }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { PREFIX_TABLE (PREFIX_VEX_0F3A18) }, + { PREFIX_TABLE (PREFIX_VEX_0F3A19) }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { PREFIX_TABLE (PREFIX_VEX_0F3A1D) }, + { Bad_Opcode }, + { Bad_Opcode }, /* 20 */ - { PREFIX_TABLE (PREFIX_VEX_3A20) }, - { PREFIX_TABLE (PREFIX_VEX_3A21) }, - { PREFIX_TABLE (PREFIX_VEX_3A22) }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { PREFIX_TABLE (PREFIX_VEX_0F3A20) }, + { PREFIX_TABLE (PREFIX_VEX_0F3A21) }, + { PREFIX_TABLE (PREFIX_VEX_0F3A22) }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 28 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 30 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 38 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { PREFIX_TABLE (PREFIX_VEX_0F3A38) }, + { PREFIX_TABLE (PREFIX_VEX_0F3A39) }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 40 */ - { PREFIX_TABLE (PREFIX_VEX_3A40) }, - { PREFIX_TABLE (PREFIX_VEX_3A41) }, - { PREFIX_TABLE (PREFIX_VEX_3A42) }, - { "(bad)", { XX } }, - { PREFIX_TABLE (PREFIX_VEX_3A44) }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { PREFIX_TABLE (PREFIX_VEX_0F3A40) }, + { PREFIX_TABLE (PREFIX_VEX_0F3A41) }, + { PREFIX_TABLE (PREFIX_VEX_0F3A42) }, + { Bad_Opcode }, + { PREFIX_TABLE (PREFIX_VEX_0F3A44) }, + { Bad_Opcode }, + { PREFIX_TABLE (PREFIX_VEX_0F3A46) }, + { Bad_Opcode }, /* 48 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { PREFIX_TABLE (PREFIX_VEX_3A4A) }, - { PREFIX_TABLE (PREFIX_VEX_3A4B) }, - { PREFIX_TABLE (PREFIX_VEX_3A4C) }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { PREFIX_TABLE (PREFIX_VEX_0F3A48) }, + { PREFIX_TABLE (PREFIX_VEX_0F3A49) }, + { PREFIX_TABLE (PREFIX_VEX_0F3A4A) }, + { PREFIX_TABLE (PREFIX_VEX_0F3A4B) }, + { PREFIX_TABLE (PREFIX_VEX_0F3A4C) }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 50 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 58 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { PREFIX_TABLE (PREFIX_VEX_3A5C) }, - { PREFIX_TABLE (PREFIX_VEX_3A5D) }, - { PREFIX_TABLE (PREFIX_VEX_3A5E) }, - { PREFIX_TABLE (PREFIX_VEX_3A5F) }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { PREFIX_TABLE (PREFIX_VEX_0F3A5C) }, + { PREFIX_TABLE (PREFIX_VEX_0F3A5D) }, + { PREFIX_TABLE (PREFIX_VEX_0F3A5E) }, + { PREFIX_TABLE (PREFIX_VEX_0F3A5F) }, /* 60 */ - { PREFIX_TABLE (PREFIX_VEX_3A60) }, - { PREFIX_TABLE (PREFIX_VEX_3A61) }, - { PREFIX_TABLE (PREFIX_VEX_3A62) }, - { PREFIX_TABLE (PREFIX_VEX_3A63) }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { PREFIX_TABLE (PREFIX_VEX_0F3A60) }, + { PREFIX_TABLE (PREFIX_VEX_0F3A61) }, + { PREFIX_TABLE (PREFIX_VEX_0F3A62) }, + { PREFIX_TABLE (PREFIX_VEX_0F3A63) }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 68 */ - { PREFIX_TABLE (PREFIX_VEX_3A68) }, - { PREFIX_TABLE (PREFIX_VEX_3A69) }, - { PREFIX_TABLE (PREFIX_VEX_3A6A) }, - { PREFIX_TABLE (PREFIX_VEX_3A6B) }, - { PREFIX_TABLE (PREFIX_VEX_3A6C) }, - { PREFIX_TABLE (PREFIX_VEX_3A6D) }, - { PREFIX_TABLE (PREFIX_VEX_3A6E) }, - { PREFIX_TABLE (PREFIX_VEX_3A6F) }, + { PREFIX_TABLE (PREFIX_VEX_0F3A68) }, + { PREFIX_TABLE (PREFIX_VEX_0F3A69) }, + { PREFIX_TABLE (PREFIX_VEX_0F3A6A) }, + { PREFIX_TABLE (PREFIX_VEX_0F3A6B) }, + { PREFIX_TABLE (PREFIX_VEX_0F3A6C) }, + { PREFIX_TABLE (PREFIX_VEX_0F3A6D) }, + { PREFIX_TABLE (PREFIX_VEX_0F3A6E) }, + { PREFIX_TABLE (PREFIX_VEX_0F3A6F) }, /* 70 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 78 */ - { PREFIX_TABLE (PREFIX_VEX_3A78) }, - { PREFIX_TABLE (PREFIX_VEX_3A79) }, - { PREFIX_TABLE (PREFIX_VEX_3A7A) }, - { PREFIX_TABLE (PREFIX_VEX_3A7B) }, - { PREFIX_TABLE (PREFIX_VEX_3A7C) }, - { PREFIX_TABLE (PREFIX_VEX_3A7D) }, - { PREFIX_TABLE (PREFIX_VEX_3A7E) }, - { PREFIX_TABLE (PREFIX_VEX_3A7F) }, + { PREFIX_TABLE (PREFIX_VEX_0F3A78) }, + { PREFIX_TABLE (PREFIX_VEX_0F3A79) }, + { PREFIX_TABLE (PREFIX_VEX_0F3A7A) }, + { PREFIX_TABLE (PREFIX_VEX_0F3A7B) }, + { PREFIX_TABLE (PREFIX_VEX_0F3A7C) }, + { PREFIX_TABLE (PREFIX_VEX_0F3A7D) }, + { PREFIX_TABLE (PREFIX_VEX_0F3A7E) }, + { PREFIX_TABLE (PREFIX_VEX_0F3A7F) }, /* 80 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 88 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 90 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 98 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* a0 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* a8 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* b0 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* b8 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* c0 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* c8 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* d0 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* d8 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { PREFIX_TABLE (PREFIX_VEX_3ADF) }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { PREFIX_TABLE (PREFIX_VEX_0F3ADF) }, /* e0 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* e8 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* f0 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { PREFIX_TABLE (PREFIX_VEX_0F3AF0) }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* f8 */ - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, }, }; static const struct dis386 vex_len_table[][2] = { - /* VEX_LEN_10_P_1 */ + /* VEX_LEN_0F10_P_1 */ { - { "vmovss", { XMVex, Vex128, EXd } }, - { "(bad)", { XX } }, + { VEX_W_TABLE (VEX_W_0F10_P_1) }, + { VEX_W_TABLE (VEX_W_0F10_P_1) }, }, - /* VEX_LEN_10_P_3 */ + /* VEX_LEN_0F10_P_3 */ { - { "vmovsd", { XMVex, Vex128, EXq } }, - { "(bad)", { XX } }, + { VEX_W_TABLE (VEX_W_0F10_P_3) }, + { VEX_W_TABLE (VEX_W_0F10_P_3) }, }, - /* VEX_LEN_11_P_1 */ + /* VEX_LEN_0F11_P_1 */ { - { "vmovss", { EXdVexS, Vex128, XM } }, - { "(bad)", { XX } }, + { VEX_W_TABLE (VEX_W_0F11_P_1) }, + { VEX_W_TABLE (VEX_W_0F11_P_1) }, }, - /* VEX_LEN_11_P_3 */ + /* VEX_LEN_0F11_P_3 */ { - { "vmovsd", { EXqVexS, Vex128, XM } }, - { "(bad)", { XX } }, + { VEX_W_TABLE (VEX_W_0F11_P_3) }, + { VEX_W_TABLE (VEX_W_0F11_P_3) }, }, - /* VEX_LEN_12_P_0_M_0 */ + /* VEX_LEN_0F12_P_0_M_0 */ { - { "vmovlps", { XM, Vex128, EXq } }, - { "(bad)", { XX } }, + { VEX_W_TABLE (VEX_W_0F12_P_0_M_0) }, }, - /* VEX_LEN_12_P_0_M_1 */ + /* VEX_LEN_0F12_P_0_M_1 */ { - { "vmovhlps", { XM, Vex128, EXq } }, - { "(bad)", { XX } }, + { VEX_W_TABLE (VEX_W_0F12_P_0_M_1) }, }, - /* VEX_LEN_12_P_2 */ + /* VEX_LEN_0F12_P_2 */ { - { "vmovlpd", { XM, Vex128, EXq } }, - { "(bad)", { XX } }, + { VEX_W_TABLE (VEX_W_0F12_P_2) }, }, - /* VEX_LEN_13_M_0 */ + /* VEX_LEN_0F13_M_0 */ { - { "vmovlpX", { EXq, XM } }, - { "(bad)", { XX } }, + { VEX_W_TABLE (VEX_W_0F13_M_0) }, }, - /* VEX_LEN_16_P_0_M_0 */ + /* VEX_LEN_0F16_P_0_M_0 */ { - { "vmovhps", { XM, Vex128, EXq } }, - { "(bad)", { XX } }, + { VEX_W_TABLE (VEX_W_0F16_P_0_M_0) }, }, - /* VEX_LEN_16_P_0_M_1 */ + /* VEX_LEN_0F16_P_0_M_1 */ { - { "vmovlhps", { XM, Vex128, EXq } }, - { "(bad)", { XX } }, + { VEX_W_TABLE (VEX_W_0F16_P_0_M_1) }, }, - /* VEX_LEN_16_P_2 */ + /* VEX_LEN_0F16_P_2 */ { - { "vmovhpd", { XM, Vex128, EXq } }, - { "(bad)", { XX } }, + { VEX_W_TABLE (VEX_W_0F16_P_2) }, }, - /* VEX_LEN_17_M_0 */ + /* VEX_LEN_0F17_M_0 */ { - { "vmovhpX", { EXq, XM } }, - { "(bad)", { XX } }, + { VEX_W_TABLE (VEX_W_0F17_M_0) }, }, - /* VEX_LEN_2A_P_1 */ + /* VEX_LEN_0F2A_P_1 */ { - { "vcvtsi2ss%LQ", { XM, Vex128, Ev } }, - { "(bad)", { XX } }, + { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Ev } }, + { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Ev } }, }, - /* VEX_LEN_2A_P_3 */ + /* VEX_LEN_0F2A_P_3 */ { - { "vcvtsi2sd%LQ", { XM, Vex128, Ev } }, - { "(bad)", { XX } }, + { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Ev } }, + { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Ev } }, }, - /* VEX_LEN_2C_P_1 */ + /* VEX_LEN_0F2C_P_1 */ { - { "vcvttss2siY", { Gv, EXd } }, - { "(bad)", { XX } }, + { "vcvttss2siY", { Gv, EXdScalar } }, + { "vcvttss2siY", { Gv, EXdScalar } }, }, - /* VEX_LEN_2C_P_3 */ + /* VEX_LEN_0F2C_P_3 */ { - { "vcvttsd2siY", { Gv, EXq } }, - { "(bad)", { XX } }, + { "vcvttsd2siY", { Gv, EXqScalar } }, + { "vcvttsd2siY", { Gv, EXqScalar } }, }, - /* VEX_LEN_2D_P_1 */ + /* VEX_LEN_0F2D_P_1 */ { - { "vcvtss2siY", { Gv, EXd } }, - { "(bad)", { XX } }, + { "vcvtss2siY", { Gv, EXdScalar } }, + { "vcvtss2siY", { Gv, EXdScalar } }, }, - /* VEX_LEN_2D_P_3 */ + /* VEX_LEN_0F2D_P_3 */ { - { "vcvtsd2siY", { Gv, EXq } }, - { "(bad)", { XX } }, + { "vcvtsd2siY", { Gv, EXqScalar } }, + { "vcvtsd2siY", { Gv, EXqScalar } }, }, - /* VEX_LEN_2E_P_0 */ + /* VEX_LEN_0F2E_P_0 */ { - { "vucomiss", { XM, EXd } }, - { "(bad)", { XX } }, + { VEX_W_TABLE (VEX_W_0F2E_P_0) }, + { VEX_W_TABLE (VEX_W_0F2E_P_0) }, }, - /* VEX_LEN_2E_P_2 */ + /* VEX_LEN_0F2E_P_2 */ { - { "vucomisd", { XM, EXq } }, - { "(bad)", { XX } }, + { VEX_W_TABLE (VEX_W_0F2E_P_2) }, + { VEX_W_TABLE (VEX_W_0F2E_P_2) }, }, - /* VEX_LEN_2F_P_0 */ + /* VEX_LEN_0F2F_P_0 */ { - { "vcomiss", { XM, EXd } }, - { "(bad)", { XX } }, + { VEX_W_TABLE (VEX_W_0F2F_P_0) }, + { VEX_W_TABLE (VEX_W_0F2F_P_0) }, }, - /* VEX_LEN_2F_P_2 */ + /* VEX_LEN_0F2F_P_2 */ { - { "vcomisd", { XM, EXq } }, - { "(bad)", { XX } }, + { VEX_W_TABLE (VEX_W_0F2F_P_2) }, + { VEX_W_TABLE (VEX_W_0F2F_P_2) }, }, - /* VEX_LEN_51_P_1 */ + /* VEX_LEN_0F51_P_1 */ { - { "vsqrtss", { XM, Vex128, EXd } }, - { "(bad)", { XX } }, + { VEX_W_TABLE (VEX_W_0F51_P_1) }, + { VEX_W_TABLE (VEX_W_0F51_P_1) }, }, - /* VEX_LEN_51_P_3 */ + /* VEX_LEN_0F51_P_3 */ { - { "vsqrtsd", { XM, Vex128, EXq } }, - { "(bad)", { XX } }, + { VEX_W_TABLE (VEX_W_0F51_P_3) }, + { VEX_W_TABLE (VEX_W_0F51_P_3) }, }, - /* VEX_LEN_52_P_1 */ + /* VEX_LEN_0F52_P_1 */ { - { "vrsqrtss", { XM, Vex128, EXd } }, - { "(bad)", { XX } }, + { VEX_W_TABLE (VEX_W_0F52_P_1) }, + { VEX_W_TABLE (VEX_W_0F52_P_1) }, }, - /* VEX_LEN_53_P_1 */ + /* VEX_LEN_0F53_P_1 */ { - { "vrcpss", { XM, Vex128, EXd } }, - { "(bad)", { XX } }, + { VEX_W_TABLE (VEX_W_0F53_P_1) }, + { VEX_W_TABLE (VEX_W_0F53_P_1) }, }, - /* VEX_LEN_58_P_1 */ + /* VEX_LEN_0F58_P_1 */ { - { "vaddss", { XM, Vex128, EXd } }, - { "(bad)", { XX } }, + { VEX_W_TABLE (VEX_W_0F58_P_1) }, + { VEX_W_TABLE (VEX_W_0F58_P_1) }, }, - /* VEX_LEN_58_P_3 */ + /* VEX_LEN_0F58_P_3 */ { - { "vaddsd", { XM, Vex128, EXq } }, - { "(bad)", { XX } }, + { VEX_W_TABLE (VEX_W_0F58_P_3) }, + { VEX_W_TABLE (VEX_W_0F58_P_3) }, }, - /* VEX_LEN_59_P_1 */ + /* VEX_LEN_0F59_P_1 */ { - { "vmulss", { XM, Vex128, EXd } }, - { "(bad)", { XX } }, + { VEX_W_TABLE (VEX_W_0F59_P_1) }, + { VEX_W_TABLE (VEX_W_0F59_P_1) }, }, - /* VEX_LEN_59_P_3 */ + /* VEX_LEN_0F59_P_3 */ { - { "vmulsd", { XM, Vex128, EXq } }, - { "(bad)", { XX } }, + { VEX_W_TABLE (VEX_W_0F59_P_3) }, + { VEX_W_TABLE (VEX_W_0F59_P_3) }, }, - /* VEX_LEN_5A_P_1 */ + /* VEX_LEN_0F5A_P_1 */ { - { "vcvtss2sd", { XM, Vex128, EXd } }, - { "(bad)", { XX } }, + { VEX_W_TABLE (VEX_W_0F5A_P_1) }, + { VEX_W_TABLE (VEX_W_0F5A_P_1) }, }, - /* VEX_LEN_5A_P_3 */ + /* VEX_LEN_0F5A_P_3 */ { - { "vcvtsd2ss", { XM, Vex128, EXq } }, - { "(bad)", { XX } }, + { VEX_W_TABLE (VEX_W_0F5A_P_3) }, + { VEX_W_TABLE (VEX_W_0F5A_P_3) }, }, - /* VEX_LEN_5C_P_1 */ + /* VEX_LEN_0F5C_P_1 */ { - { "vsubss", { XM, Vex128, EXd } }, - { "(bad)", { XX } }, + { VEX_W_TABLE (VEX_W_0F5C_P_1) }, + { VEX_W_TABLE (VEX_W_0F5C_P_1) }, }, - /* VEX_LEN_5C_P_3 */ + /* VEX_LEN_0F5C_P_3 */ { - { "vsubsd", { XM, Vex128, EXq } }, - { "(bad)", { XX } }, + { VEX_W_TABLE (VEX_W_0F5C_P_3) }, + { VEX_W_TABLE (VEX_W_0F5C_P_3) }, }, - /* VEX_LEN_5D_P_1 */ + /* VEX_LEN_0F5D_P_1 */ { - { "vminss", { XM, Vex128, EXd } }, - { "(bad)", { XX } }, + { VEX_W_TABLE (VEX_W_0F5D_P_1) }, + { VEX_W_TABLE (VEX_W_0F5D_P_1) }, }, - /* VEX_LEN_5D_P_3 */ + /* VEX_LEN_0F5D_P_3 */ { - { "vminsd", { XM, Vex128, EXq } }, - { "(bad)", { XX } }, + { VEX_W_TABLE (VEX_W_0F5D_P_3) }, + { VEX_W_TABLE (VEX_W_0F5D_P_3) }, }, - /* VEX_LEN_5E_P_1 */ + /* VEX_LEN_0F5E_P_1 */ { - { "vdivss", { XM, Vex128, EXd } }, - { "(bad)", { XX } }, + { VEX_W_TABLE (VEX_W_0F5E_P_1) }, + { VEX_W_TABLE (VEX_W_0F5E_P_1) }, }, - /* VEX_LEN_5E_P_3 */ + /* VEX_LEN_0F5E_P_3 */ { - { "vdivsd", { XM, Vex128, EXq } }, - { "(bad)", { XX } }, + { VEX_W_TABLE (VEX_W_0F5E_P_3) }, + { VEX_W_TABLE (VEX_W_0F5E_P_3) }, }, - /* VEX_LEN_5F_P_1 */ + /* VEX_LEN_0F5F_P_1 */ { - { "vmaxss", { XM, Vex128, EXd } }, - { "(bad)", { XX } }, + { VEX_W_TABLE (VEX_W_0F5F_P_1) }, + { VEX_W_TABLE (VEX_W_0F5F_P_1) }, }, - /* VEX_LEN_5F_P_3 */ + /* VEX_LEN_0F5F_P_3 */ { - { "vmaxsd", { XM, Vex128, EXq } }, - { "(bad)", { XX } }, + { VEX_W_TABLE (VEX_W_0F5F_P_3) }, + { VEX_W_TABLE (VEX_W_0F5F_P_3) }, }, - /* VEX_LEN_60_P_2 */ + /* VEX_LEN_0F6E_P_2 */ { - { "vpunpcklbw", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + { "vmovK", { XMScalar, Edq } }, + { "vmovK", { XMScalar, Edq } }, }, - /* VEX_LEN_61_P_2 */ + /* VEX_LEN_0F7E_P_1 */ { - { "vpunpcklwd", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + { VEX_W_TABLE (VEX_W_0F7E_P_1) }, + { VEX_W_TABLE (VEX_W_0F7E_P_1) }, }, - /* VEX_LEN_62_P_2 */ + /* VEX_LEN_0F7E_P_2 */ { - { "vpunpckldq", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + { "vmovK", { Edq, XMScalar } }, + { "vmovK", { Edq, XMScalar } }, }, - /* VEX_LEN_63_P_2 */ + /* VEX_LEN_0FAE_R_2_M_0 */ { - { "vpacksswb", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + { VEX_W_TABLE (VEX_W_0FAE_R_2_M_0) }, }, - /* VEX_LEN_64_P_2 */ + /* VEX_LEN_0FAE_R_3_M_0 */ { - { "vpcmpgtb", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + { VEX_W_TABLE (VEX_W_0FAE_R_3_M_0) }, }, - /* VEX_LEN_65_P_2 */ + /* VEX_LEN_0FC2_P_1 */ { - { "vpcmpgtw", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + { VEX_W_TABLE (VEX_W_0FC2_P_1) }, + { VEX_W_TABLE (VEX_W_0FC2_P_1) }, }, - /* VEX_LEN_66_P_2 */ + /* VEX_LEN_0FC2_P_3 */ { - { "vpcmpgtd", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + { VEX_W_TABLE (VEX_W_0FC2_P_3) }, + { VEX_W_TABLE (VEX_W_0FC2_P_3) }, }, - /* VEX_LEN_67_P_2 */ + /* VEX_LEN_0FC4_P_2 */ { - { "vpackuswb", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + { VEX_W_TABLE (VEX_W_0FC4_P_2) }, }, - /* VEX_LEN_68_P_2 */ + /* VEX_LEN_0FC5_P_2 */ { - { "vpunpckhbw", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + { VEX_W_TABLE (VEX_W_0FC5_P_2) }, }, - /* VEX_LEN_69_P_2 */ + /* VEX_LEN_0FD6_P_2 */ { - { "vpunpckhwd", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + { VEX_W_TABLE (VEX_W_0FD6_P_2) }, + { VEX_W_TABLE (VEX_W_0FD6_P_2) }, }, - /* VEX_LEN_6A_P_2 */ + /* VEX_LEN_0FF7_P_2 */ { - { "vpunpckhdq", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + { VEX_W_TABLE (VEX_W_0FF7_P_2) }, }, - /* VEX_LEN_6B_P_2 */ + /* VEX_LEN_0F3816_P_2 */ { - { "vpackssdw", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3816_P_2) }, }, - /* VEX_LEN_6C_P_2 */ + /* VEX_LEN_0F3819_P_2 */ { - { "vpunpcklqdq", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3819_P_2) }, }, - /* VEX_LEN_6D_P_2 */ + /* VEX_LEN_0F381A_P_2_M_0 */ { - { "vpunpckhqdq", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F381A_P_2_M_0) }, }, - /* VEX_LEN_6E_P_2 */ + /* VEX_LEN_0F3836_P_2 */ { - { "vmovK", { XM, Edq } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3836_P_2) }, }, - /* VEX_LEN_70_P_1 */ + /* VEX_LEN_0F3841_P_2 */ { - { "vpshufhw", { XM, EXx, Ib } }, - { "(bad)", { XX } }, + { VEX_W_TABLE (VEX_W_0F3841_P_2) }, }, - /* VEX_LEN_70_P_2 */ + /* VEX_LEN_0F385A_P_2_M_0 */ { - { "vpshufd", { XM, EXx, Ib } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F385A_P_2_M_0) }, }, - /* VEX_LEN_70_P_3 */ + /* VEX_LEN_0F38DB_P_2 */ { - { "vpshuflw", { XM, EXx, Ib } }, - { "(bad)", { XX } }, + { VEX_W_TABLE (VEX_W_0F38DB_P_2) }, }, - /* VEX_LEN_71_R_2_P_2 */ + /* VEX_LEN_0F38DC_P_2 */ { - { "vpsrlw", { Vex128, XS, Ib } }, - { "(bad)", { XX } }, + { VEX_W_TABLE (VEX_W_0F38DC_P_2) }, }, - /* VEX_LEN_71_R_4_P_2 */ + /* VEX_LEN_0F38DD_P_2 */ { - { "vpsraw", { Vex128, XS, Ib } }, - { "(bad)", { XX } }, + { VEX_W_TABLE (VEX_W_0F38DD_P_2) }, }, - /* VEX_LEN_71_R_6_P_2 */ + /* VEX_LEN_0F38DE_P_2 */ { - { "vpsllw", { Vex128, XS, Ib } }, - { "(bad)", { XX } }, + { VEX_W_TABLE (VEX_W_0F38DE_P_2) }, }, - /* VEX_LEN_72_R_2_P_2 */ + /* VEX_LEN_0F38DF_P_2 */ { - { "vpsrld", { Vex128, XS, Ib } }, - { "(bad)", { XX } }, + { VEX_W_TABLE (VEX_W_0F38DF_P_2) }, }, - /* VEX_LEN_72_R_4_P_2 */ + /* VEX_LEN_0F38F2_P_0 */ { - { "vpsrad", { Vex128, XS, Ib } }, - { "(bad)", { XX } }, + { "andnS", { Gdq, VexGdq, Edq } }, }, - /* VEX_LEN_72_R_6_P_2 */ + /* VEX_LEN_0F38F3_R_1_P_0 */ { - { "vpslld", { Vex128, XS, Ib } }, - { "(bad)", { XX } }, + { "blsrS", { VexGdq, Edq } }, }, - /* VEX_LEN_73_R_2_P_2 */ + /* VEX_LEN_0F38F3_R_2_P_0 */ { - { "vpsrlq", { Vex128, XS, Ib } }, - { "(bad)", { XX } }, + { "blsmskS", { VexGdq, Edq } }, }, - /* VEX_LEN_73_R_3_P_2 */ + /* VEX_LEN_0F38F3_R_3_P_0 */ { - { "vpsrldq", { Vex128, XS, Ib } }, - { "(bad)", { XX } }, + { "blsiS", { VexGdq, Edq } }, }, - /* VEX_LEN_73_R_6_P_2 */ + /* VEX_LEN_0F38F5_P_0 */ { - { "vpsllq", { Vex128, XS, Ib } }, - { "(bad)", { XX } }, + { "bzhiS", { Gdq, Edq, VexGdq } }, }, - /* VEX_LEN_73_R_7_P_2 */ + /* VEX_LEN_0F38F5_P_1 */ { - { "vpslldq", { Vex128, XS, Ib } }, - { "(bad)", { XX } }, + { "pextS", { Gdq, VexGdq, Edq } }, }, - /* VEX_LEN_74_P_2 */ + /* VEX_LEN_0F38F5_P_3 */ { - { "vpcmpeqb", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + { "pdepS", { Gdq, VexGdq, Edq } }, }, - /* VEX_LEN_75_P_2 */ + /* VEX_LEN_0F38F6_P_3 */ { - { "vpcmpeqw", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + { "mulxS", { Gdq, VexGdq, Edq } }, }, - /* VEX_LEN_76_P_2 */ + /* VEX_LEN_0F38F7_P_0 */ { - { "vpcmpeqd", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + { "bextrS", { Gdq, Edq, VexGdq } }, }, - /* VEX_LEN_7E_P_1 */ + /* VEX_LEN_0F38F7_P_1 */ { - { "vmovq", { XM, EXq } }, - { "(bad)", { XX } }, + { "sarxS", { Gdq, Edq, VexGdq } }, }, - /* VEX_LEN_7E_P_2 */ + /* VEX_LEN_0F38F7_P_2 */ { - { "vmovK", { Edq, XM } }, - { "(bad)", { XX } }, + { "shlxS", { Gdq, Edq, VexGdq } }, }, - /* VEX_LEN_AE_R_2_M_0 */ + /* VEX_LEN_0F38F7_P_3 */ { - { "vldmxcsr", { Md } }, - { "(bad)", { XX } }, + { "shrxS", { Gdq, Edq, VexGdq } }, }, - /* VEX_LEN_AE_R_3_M_0 */ + /* VEX_LEN_0F3A00_P_2 */ { - { "vstmxcsr", { Md } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3A00_P_2) }, }, - /* VEX_LEN_C2_P_1 */ + /* VEX_LEN_0F3A01_P_2 */ { - { "vcmpss", { XM, Vex128, EXd, VCMP } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3A01_P_2) }, }, - /* VEX_LEN_C2_P_3 */ + /* VEX_LEN_0F3A06_P_2 */ { - { "vcmpsd", { XM, Vex128, EXq, VCMP } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3A06_P_2) }, }, - /* VEX_LEN_C4_P_2 */ + /* VEX_LEN_0F3A0A_P_2 */ { - { "vpinsrw", { XM, Vex128, Edqw, Ib } }, - { "(bad)", { XX } }, + { VEX_W_TABLE (VEX_W_0F3A0A_P_2) }, + { VEX_W_TABLE (VEX_W_0F3A0A_P_2) }, }, - /* VEX_LEN_C5_P_2 */ + /* VEX_LEN_0F3A0B_P_2 */ { - { "vpextrw", { Gdq, XS, Ib } }, - { "(bad)", { XX } }, + { VEX_W_TABLE (VEX_W_0F3A0B_P_2) }, + { VEX_W_TABLE (VEX_W_0F3A0B_P_2) }, }, - /* VEX_LEN_D1_P_2 */ + /* VEX_LEN_0F3A14_P_2 */ { - { "vpsrlw", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + { VEX_W_TABLE (VEX_W_0F3A14_P_2) }, }, - /* VEX_LEN_D2_P_2 */ + /* VEX_LEN_0F3A15_P_2 */ { - { "vpsrld", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + { VEX_W_TABLE (VEX_W_0F3A15_P_2) }, }, - /* VEX_LEN_D3_P_2 */ + /* VEX_LEN_0F3A16_P_2 */ { - { "vpsrlq", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + { "vpextrK", { Edq, XM, Ib } }, }, - /* VEX_LEN_D4_P_2 */ + /* VEX_LEN_0F3A17_P_2 */ { - { "vpaddq", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + { "vextractps", { Edqd, XM, Ib } }, }, - /* VEX_LEN_D5_P_2 */ + /* VEX_LEN_0F3A18_P_2 */ { - { "vpmullw", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3A18_P_2) }, }, - /* VEX_LEN_D6_P_2 */ + /* VEX_LEN_0F3A19_P_2 */ { - { "vmovq", { EXqS, XM } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3A19_P_2) }, }, - /* VEX_LEN_D7_P_2_M_1 */ + /* VEX_LEN_0F3A20_P_2 */ { - { "vpmovmskb", { Gdq, XS } }, - { "(bad)", { XX } }, + { VEX_W_TABLE (VEX_W_0F3A20_P_2) }, }, - /* VEX_LEN_D8_P_2 */ + /* VEX_LEN_0F3A21_P_2 */ { - { "vpsubusb", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + { VEX_W_TABLE (VEX_W_0F3A21_P_2) }, }, - /* VEX_LEN_D9_P_2 */ + /* VEX_LEN_0F3A22_P_2 */ { - { "vpsubusw", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + { "vpinsrK", { XM, Vex128, Edq, Ib } }, }, - /* VEX_LEN_DA_P_2 */ + /* VEX_LEN_0F3A38_P_2 */ { - { "vpminub", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3A38_P_2) }, }, - /* VEX_LEN_DB_P_2 */ + /* VEX_LEN_0F3A39_P_2 */ { - { "vpand", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3A39_P_2) }, }, - /* VEX_LEN_DC_P_2 */ + /* VEX_LEN_0F3A41_P_2 */ { - { "vpaddusb", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + { VEX_W_TABLE (VEX_W_0F3A41_P_2) }, }, - /* VEX_LEN_DD_P_2 */ + /* VEX_LEN_0F3A44_P_2 */ { - { "vpaddusw", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + { VEX_W_TABLE (VEX_W_0F3A44_P_2) }, }, - /* VEX_LEN_DE_P_2 */ + /* VEX_LEN_0F3A46_P_2 */ { - { "vpmaxub", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3A46_P_2) }, }, - /* VEX_LEN_DF_P_2 */ + /* VEX_LEN_0F3A60_P_2 */ { - { "vpandn", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + { VEX_W_TABLE (VEX_W_0F3A60_P_2) }, }, - /* VEX_LEN_E0_P_2 */ + /* VEX_LEN_0F3A61_P_2 */ { - { "vpavgb", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + { VEX_W_TABLE (VEX_W_0F3A61_P_2) }, }, - /* VEX_LEN_E1_P_2 */ + /* VEX_LEN_0F3A62_P_2 */ { - { "vpsraw", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + { VEX_W_TABLE (VEX_W_0F3A62_P_2) }, }, - /* VEX_LEN_E2_P_2 */ + /* VEX_LEN_0F3A63_P_2 */ { - { "vpsrad", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + { VEX_W_TABLE (VEX_W_0F3A63_P_2) }, }, - /* VEX_LEN_E3_P_2 */ + /* VEX_LEN_0F3A6A_P_2 */ { - { "vpavgw", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + { "vfmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } }, }, - /* VEX_LEN_E4_P_2 */ + /* VEX_LEN_0F3A6B_P_2 */ { - { "vpmulhuw", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + { "vfmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } }, }, - /* VEX_LEN_E5_P_2 */ + /* VEX_LEN_0F3A6E_P_2 */ { - { "vpmulhw", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + { "vfmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } }, }, - /* VEX_LEN_E8_P_2 */ + /* VEX_LEN_0F3A6F_P_2 */ { - { "vpsubsb", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + { "vfmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } }, }, - /* VEX_LEN_E9_P_2 */ + /* VEX_LEN_0F3A7A_P_2 */ { - { "vpsubsw", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + { "vfnmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } }, }, - /* VEX_LEN_EA_P_2 */ + /* VEX_LEN_0F3A7B_P_2 */ { - { "vpminsw", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + { "vfnmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } }, }, - /* VEX_LEN_EB_P_2 */ + /* VEX_LEN_0F3A7E_P_2 */ { - { "vpor", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + { "vfnmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } }, }, - /* VEX_LEN_EC_P_2 */ + /* VEX_LEN_0F3A7F_P_2 */ { - { "vpaddsb", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + { "vfnmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } }, }, - /* VEX_LEN_ED_P_2 */ + /* VEX_LEN_0F3ADF_P_2 */ { - { "vpaddsw", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + { VEX_W_TABLE (VEX_W_0F3ADF_P_2) }, }, - /* VEX_LEN_EE_P_2 */ + /* VEX_LEN_0F3AF0_P_3 */ { - { "vpmaxsw", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + { "rorxS", { Gdq, Edq, Ib } }, }, - /* VEX_LEN_EF_P_2 */ + /* VEX_LEN_0FXOP_08_CC */ { - { "vpxor", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + { "vpcomb", { XM, Vex128, EXx, Ib } }, }, - /* VEX_LEN_F1_P_2 */ + /* VEX_LEN_0FXOP_08_CD */ { - { "vpsllw", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + { "vpcomw", { XM, Vex128, EXx, Ib } }, }, - /* VEX_LEN_F2_P_2 */ + /* VEX_LEN_0FXOP_08_CE */ { - { "vpslld", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + { "vpcomd", { XM, Vex128, EXx, Ib } }, }, - /* VEX_LEN_F3_P_2 */ + /* VEX_LEN_0FXOP_08_CF */ { - { "vpsllq", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + { "vpcomq", { XM, Vex128, EXx, Ib } }, }, - /* VEX_LEN_F4_P_2 */ + /* VEX_LEN_0FXOP_08_EC */ { - { "vpmuludq", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + { "vpcomub", { XM, Vex128, EXx, Ib } }, }, - /* VEX_LEN_F5_P_2 */ + /* VEX_LEN_0FXOP_08_ED */ { - { "vpmaddwd", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + { "vpcomuw", { XM, Vex128, EXx, Ib } }, }, - /* VEX_LEN_F6_P_2 */ + /* VEX_LEN_0FXOP_08_EE */ { - { "vpsadbw", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + { "vpcomud", { XM, Vex128, EXx, Ib } }, }, - /* VEX_LEN_F7_P_2 */ + /* VEX_LEN_0FXOP_08_EF */ { - { "vmaskmovdqu", { XM, XS } }, - { "(bad)", { XX } }, + { "vpcomuq", { XM, Vex128, EXx, Ib } }, }, - /* VEX_LEN_F8_P_2 */ + /* VEX_LEN_0FXOP_09_80 */ { - { "vpsubb", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + { "vfrczps", { XM, EXxmm } }, + { "vfrczps", { XM, EXymmq } }, }, - /* VEX_LEN_F9_P_2 */ + /* VEX_LEN_0FXOP_09_81 */ { - { "vpsubw", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + { "vfrczpd", { XM, EXxmm } }, + { "vfrczpd", { XM, EXymmq } }, }, +}; - /* VEX_LEN_FA_P_2 */ +static const struct dis386 vex_w_table[][2] = { { - { "vpsubd", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + /* VEX_W_0F10_P_0 */ + { "vmovups", { XM, EXx } }, }, - - /* VEX_LEN_FB_P_2 */ { - { "vpsubq", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + /* VEX_W_0F10_P_1 */ + { "vmovss", { XMVexScalar, VexScalar, EXdScalar } }, }, - - /* VEX_LEN_FC_P_2 */ { - { "vpaddb", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + /* VEX_W_0F10_P_2 */ + { "vmovupd", { XM, EXx } }, }, - - /* VEX_LEN_FD_P_2 */ { - { "vpaddw", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + /* VEX_W_0F10_P_3 */ + { "vmovsd", { XMVexScalar, VexScalar, EXqScalar } }, }, - - /* VEX_LEN_FE_P_2 */ { - { "vpaddd", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + /* VEX_W_0F11_P_0 */ + { "vmovups", { EXxS, XM } }, }, - - /* VEX_LEN_3800_P_2 */ { - { "vpshufb", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + /* VEX_W_0F11_P_1 */ + { "vmovss", { EXdVexScalarS, VexScalar, XMScalar } }, }, - - /* VEX_LEN_3801_P_2 */ { - { "vphaddw", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + /* VEX_W_0F11_P_2 */ + { "vmovupd", { EXxS, XM } }, }, - - /* VEX_LEN_3802_P_2 */ { - { "vphaddd", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + /* VEX_W_0F11_P_3 */ + { "vmovsd", { EXqVexScalarS, VexScalar, XMScalar } }, }, - - /* VEX_LEN_3803_P_2 */ { - { "vphaddsw", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + /* VEX_W_0F12_P_0_M_0 */ + { "vmovlps", { XM, Vex128, EXq } }, }, - - /* VEX_LEN_3804_P_2 */ { - { "vpmaddubsw", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + /* VEX_W_0F12_P_0_M_1 */ + { "vmovhlps", { XM, Vex128, EXq } }, }, - - /* VEX_LEN_3805_P_2 */ { - { "vphsubw", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + /* VEX_W_0F12_P_1 */ + { "vmovsldup", { XM, EXx } }, }, - - /* VEX_LEN_3806_P_2 */ { - { "vphsubd", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + /* VEX_W_0F12_P_2 */ + { "vmovlpd", { XM, Vex128, EXq } }, }, - - /* VEX_LEN_3807_P_2 */ { - { "vphsubsw", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + /* VEX_W_0F12_P_3 */ + { "vmovddup", { XM, EXymmq } }, }, - - /* VEX_LEN_3808_P_2 */ { - { "vpsignb", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + /* VEX_W_0F13_M_0 */ + { "vmovlpX", { EXq, XM } }, }, - - /* VEX_LEN_3809_P_2 */ { - { "vpsignw", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + /* VEX_W_0F14 */ + { "vunpcklpX", { XM, Vex, EXx } }, }, - - /* VEX_LEN_380A_P_2 */ { - { "vpsignd", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + /* VEX_W_0F15 */ + { "vunpckhpX", { XM, Vex, EXx } }, }, - - /* VEX_LEN_380B_P_2 */ { - { "vpmulhrsw", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + /* VEX_W_0F16_P_0_M_0 */ + { "vmovhps", { XM, Vex128, EXq } }, }, - - /* VEX_LEN_3819_P_2_M_0 */ { - { "(bad)", { XX } }, - { "vbroadcastsd", { XM, Mq } }, + /* VEX_W_0F16_P_0_M_1 */ + { "vmovlhps", { XM, Vex128, EXq } }, }, - - /* VEX_LEN_381A_P_2_M_0 */ { - { "(bad)", { XX } }, - { "vbroadcastf128", { XM, Mxmm } }, + /* VEX_W_0F16_P_1 */ + { "vmovshdup", { XM, EXx } }, }, - - /* VEX_LEN_381C_P_2 */ { - { "vpabsb", { XM, EXx } }, - { "(bad)", { XX } }, + /* VEX_W_0F16_P_2 */ + { "vmovhpd", { XM, Vex128, EXq } }, }, - - /* VEX_LEN_381D_P_2 */ { - { "vpabsw", { XM, EXx } }, - { "(bad)", { XX } }, + /* VEX_W_0F17_M_0 */ + { "vmovhpX", { EXq, XM } }, + }, + { + /* VEX_W_0F28 */ + { "vmovapX", { XM, EXx } }, + }, + { + /* VEX_W_0F29 */ + { "vmovapX", { EXxS, XM } }, + }, + { + /* VEX_W_0F2B_M_0 */ + { "vmovntpX", { Mx, XM } }, + }, + { + /* VEX_W_0F2E_P_0 */ + { "vucomiss", { XMScalar, EXdScalar } }, + }, + { + /* VEX_W_0F2E_P_2 */ + { "vucomisd", { XMScalar, EXqScalar } }, + }, + { + /* VEX_W_0F2F_P_0 */ + { "vcomiss", { XMScalar, EXdScalar } }, + }, + { + /* VEX_W_0F2F_P_2 */ + { "vcomisd", { XMScalar, EXqScalar } }, + }, + { + /* VEX_W_0F50_M_0 */ + { "vmovmskpX", { Gdq, XS } }, + }, + { + /* VEX_W_0F51_P_0 */ + { "vsqrtps", { XM, EXx } }, + }, + { + /* VEX_W_0F51_P_1 */ + { "vsqrtss", { XMScalar, VexScalar, EXdScalar } }, + }, + { + /* VEX_W_0F51_P_2 */ + { "vsqrtpd", { XM, EXx } }, + }, + { + /* VEX_W_0F51_P_3 */ + { "vsqrtsd", { XMScalar, VexScalar, EXqScalar } }, + }, + { + /* VEX_W_0F52_P_0 */ + { "vrsqrtps", { XM, EXx } }, + }, + { + /* VEX_W_0F52_P_1 */ + { "vrsqrtss", { XMScalar, VexScalar, EXdScalar } }, + }, + { + /* VEX_W_0F53_P_0 */ + { "vrcpps", { XM, EXx } }, + }, + { + /* VEX_W_0F53_P_1 */ + { "vrcpss", { XMScalar, VexScalar, EXdScalar } }, + }, + { + /* VEX_W_0F58_P_0 */ + { "vaddps", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0F58_P_1 */ + { "vaddss", { XMScalar, VexScalar, EXdScalar } }, + }, + { + /* VEX_W_0F58_P_2 */ + { "vaddpd", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0F58_P_3 */ + { "vaddsd", { XMScalar, VexScalar, EXqScalar } }, + }, + { + /* VEX_W_0F59_P_0 */ + { "vmulps", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0F59_P_1 */ + { "vmulss", { XMScalar, VexScalar, EXdScalar } }, + }, + { + /* VEX_W_0F59_P_2 */ + { "vmulpd", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0F59_P_3 */ + { "vmulsd", { XMScalar, VexScalar, EXqScalar } }, + }, + { + /* VEX_W_0F5A_P_0 */ + { "vcvtps2pd", { XM, EXxmmq } }, + }, + { + /* VEX_W_0F5A_P_1 */ + { "vcvtss2sd", { XMScalar, VexScalar, EXdScalar } }, + }, + { + /* VEX_W_0F5A_P_3 */ + { "vcvtsd2ss", { XMScalar, VexScalar, EXqScalar } }, + }, + { + /* VEX_W_0F5B_P_0 */ + { "vcvtdq2ps", { XM, EXx } }, + }, + { + /* VEX_W_0F5B_P_1 */ + { "vcvttps2dq", { XM, EXx } }, + }, + { + /* VEX_W_0F5B_P_2 */ + { "vcvtps2dq", { XM, EXx } }, + }, + { + /* VEX_W_0F5C_P_0 */ + { "vsubps", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0F5C_P_1 */ + { "vsubss", { XMScalar, VexScalar, EXdScalar } }, + }, + { + /* VEX_W_0F5C_P_2 */ + { "vsubpd", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0F5C_P_3 */ + { "vsubsd", { XMScalar, VexScalar, EXqScalar } }, + }, + { + /* VEX_W_0F5D_P_0 */ + { "vminps", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0F5D_P_1 */ + { "vminss", { XMScalar, VexScalar, EXdScalar } }, + }, + { + /* VEX_W_0F5D_P_2 */ + { "vminpd", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0F5D_P_3 */ + { "vminsd", { XMScalar, VexScalar, EXqScalar } }, + }, + { + /* VEX_W_0F5E_P_0 */ + { "vdivps", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0F5E_P_1 */ + { "vdivss", { XMScalar, VexScalar, EXdScalar } }, + }, + { + /* VEX_W_0F5E_P_2 */ + { "vdivpd", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0F5E_P_3 */ + { "vdivsd", { XMScalar, VexScalar, EXqScalar } }, + }, + { + /* VEX_W_0F5F_P_0 */ + { "vmaxps", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0F5F_P_1 */ + { "vmaxss", { XMScalar, VexScalar, EXdScalar } }, + }, + { + /* VEX_W_0F5F_P_2 */ + { "vmaxpd", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0F5F_P_3 */ + { "vmaxsd", { XMScalar, VexScalar, EXqScalar } }, + }, + { + /* VEX_W_0F60_P_2 */ + { "vpunpcklbw", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0F61_P_2 */ + { "vpunpcklwd", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0F62_P_2 */ + { "vpunpckldq", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0F63_P_2 */ + { "vpacksswb", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0F64_P_2 */ + { "vpcmpgtb", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0F65_P_2 */ + { "vpcmpgtw", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0F66_P_2 */ + { "vpcmpgtd", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0F67_P_2 */ + { "vpackuswb", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0F68_P_2 */ + { "vpunpckhbw", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0F69_P_2 */ + { "vpunpckhwd", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0F6A_P_2 */ + { "vpunpckhdq", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0F6B_P_2 */ + { "vpackssdw", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0F6C_P_2 */ + { "vpunpcklqdq", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0F6D_P_2 */ + { "vpunpckhqdq", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0F6F_P_1 */ + { "vmovdqu", { XM, EXx } }, + }, + { + /* VEX_W_0F6F_P_2 */ + { "vmovdqa", { XM, EXx } }, + }, + { + /* VEX_W_0F70_P_1 */ + { "vpshufhw", { XM, EXx, Ib } }, + }, + { + /* VEX_W_0F70_P_2 */ + { "vpshufd", { XM, EXx, Ib } }, + }, + { + /* VEX_W_0F70_P_3 */ + { "vpshuflw", { XM, EXx, Ib } }, + }, + { + /* VEX_W_0F71_R_2_P_2 */ + { "vpsrlw", { Vex, XS, Ib } }, + }, + { + /* VEX_W_0F71_R_4_P_2 */ + { "vpsraw", { Vex, XS, Ib } }, + }, + { + /* VEX_W_0F71_R_6_P_2 */ + { "vpsllw", { Vex, XS, Ib } }, + }, + { + /* VEX_W_0F72_R_2_P_2 */ + { "vpsrld", { Vex, XS, Ib } }, + }, + { + /* VEX_W_0F72_R_4_P_2 */ + { "vpsrad", { Vex, XS, Ib } }, + }, + { + /* VEX_W_0F72_R_6_P_2 */ + { "vpslld", { Vex, XS, Ib } }, + }, + { + /* VEX_W_0F73_R_2_P_2 */ + { "vpsrlq", { Vex, XS, Ib } }, + }, + { + /* VEX_W_0F73_R_3_P_2 */ + { "vpsrldq", { Vex, XS, Ib } }, + }, + { + /* VEX_W_0F73_R_6_P_2 */ + { "vpsllq", { Vex, XS, Ib } }, + }, + { + /* VEX_W_0F73_R_7_P_2 */ + { "vpslldq", { Vex, XS, Ib } }, + }, + { + /* VEX_W_0F74_P_2 */ + { "vpcmpeqb", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0F75_P_2 */ + { "vpcmpeqw", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0F76_P_2 */ + { "vpcmpeqd", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0F77_P_0 */ + { "", { VZERO } }, + }, + { + /* VEX_W_0F7C_P_2 */ + { "vhaddpd", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0F7C_P_3 */ + { "vhaddps", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0F7D_P_2 */ + { "vhsubpd", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0F7D_P_3 */ + { "vhsubps", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0F7E_P_1 */ + { "vmovq", { XMScalar, EXqScalar } }, + }, + { + /* VEX_W_0F7F_P_1 */ + { "vmovdqu", { EXxS, XM } }, + }, + { + /* VEX_W_0F7F_P_2 */ + { "vmovdqa", { EXxS, XM } }, + }, + { + /* VEX_W_0FAE_R_2_M_0 */ + { "vldmxcsr", { Md } }, + }, + { + /* VEX_W_0FAE_R_3_M_0 */ + { "vstmxcsr", { Md } }, + }, + { + /* VEX_W_0FC2_P_0 */ + { "vcmpps", { XM, Vex, EXx, VCMP } }, + }, + { + /* VEX_W_0FC2_P_1 */ + { "vcmpss", { XMScalar, VexScalar, EXdScalar, VCMP } }, + }, + { + /* VEX_W_0FC2_P_2 */ + { "vcmppd", { XM, Vex, EXx, VCMP } }, + }, + { + /* VEX_W_0FC2_P_3 */ + { "vcmpsd", { XMScalar, VexScalar, EXqScalar, VCMP } }, + }, + { + /* VEX_W_0FC4_P_2 */ + { "vpinsrw", { XM, Vex128, Edqw, Ib } }, + }, + { + /* VEX_W_0FC5_P_2 */ + { "vpextrw", { Gdq, XS, Ib } }, + }, + { + /* VEX_W_0FD0_P_2 */ + { "vaddsubpd", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0FD0_P_3 */ + { "vaddsubps", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0FD1_P_2 */ + { "vpsrlw", { XM, Vex, EXxmm } }, + }, + { + /* VEX_W_0FD2_P_2 */ + { "vpsrld", { XM, Vex, EXxmm } }, + }, + { + /* VEX_W_0FD3_P_2 */ + { "vpsrlq", { XM, Vex, EXxmm } }, + }, + { + /* VEX_W_0FD4_P_2 */ + { "vpaddq", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0FD5_P_2 */ + { "vpmullw", { XM, Vex, EXx } }, }, - - /* VEX_LEN_381E_P_2 */ { + /* VEX_W_0FD6_P_2 */ + { "vmovq", { EXqScalarS, XMScalar } }, + }, + { + /* VEX_W_0FD7_P_2_M_1 */ + { "vpmovmskb", { Gdq, XS } }, + }, + { + /* VEX_W_0FD8_P_2 */ + { "vpsubusb", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0FD9_P_2 */ + { "vpsubusw", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0FDA_P_2 */ + { "vpminub", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0FDB_P_2 */ + { "vpand", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0FDC_P_2 */ + { "vpaddusb", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0FDD_P_2 */ + { "vpaddusw", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0FDE_P_2 */ + { "vpmaxub", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0FDF_P_2 */ + { "vpandn", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0FE0_P_2 */ + { "vpavgb", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0FE1_P_2 */ + { "vpsraw", { XM, Vex, EXxmm } }, + }, + { + /* VEX_W_0FE2_P_2 */ + { "vpsrad", { XM, Vex, EXxmm } }, + }, + { + /* VEX_W_0FE3_P_2 */ + { "vpavgw", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0FE4_P_2 */ + { "vpmulhuw", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0FE5_P_2 */ + { "vpmulhw", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0FE6_P_1 */ + { "vcvtdq2pd", { XM, EXxmmq } }, + }, + { + /* VEX_W_0FE6_P_2 */ + { "vcvttpd2dq%XY", { XMM, EXx } }, + }, + { + /* VEX_W_0FE6_P_3 */ + { "vcvtpd2dq%XY", { XMM, EXx } }, + }, + { + /* VEX_W_0FE7_P_2_M_0 */ + { "vmovntdq", { Mx, XM } }, + }, + { + /* VEX_W_0FE8_P_2 */ + { "vpsubsb", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0FE9_P_2 */ + { "vpsubsw", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0FEA_P_2 */ + { "vpminsw", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0FEB_P_2 */ + { "vpor", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0FEC_P_2 */ + { "vpaddsb", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0FED_P_2 */ + { "vpaddsw", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0FEE_P_2 */ + { "vpmaxsw", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0FEF_P_2 */ + { "vpxor", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0FF0_P_3_M_0 */ + { "vlddqu", { XM, M } }, + }, + { + /* VEX_W_0FF1_P_2 */ + { "vpsllw", { XM, Vex, EXxmm } }, + }, + { + /* VEX_W_0FF2_P_2 */ + { "vpslld", { XM, Vex, EXxmm } }, + }, + { + /* VEX_W_0FF3_P_2 */ + { "vpsllq", { XM, Vex, EXxmm } }, + }, + { + /* VEX_W_0FF4_P_2 */ + { "vpmuludq", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0FF5_P_2 */ + { "vpmaddwd", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0FF6_P_2 */ + { "vpsadbw", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0FF7_P_2 */ + { "vmaskmovdqu", { XM, XS } }, + }, + { + /* VEX_W_0FF8_P_2 */ + { "vpsubb", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0FF9_P_2 */ + { "vpsubw", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0FFA_P_2 */ + { "vpsubd", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0FFB_P_2 */ + { "vpsubq", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0FFC_P_2 */ + { "vpaddb", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0FFD_P_2 */ + { "vpaddw", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0FFE_P_2 */ + { "vpaddd", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0F3800_P_2 */ + { "vpshufb", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0F3801_P_2 */ + { "vphaddw", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0F3802_P_2 */ + { "vphaddd", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0F3803_P_2 */ + { "vphaddsw", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0F3804_P_2 */ + { "vpmaddubsw", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0F3805_P_2 */ + { "vphsubw", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0F3806_P_2 */ + { "vphsubd", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0F3807_P_2 */ + { "vphsubsw", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0F3808_P_2 */ + { "vpsignb", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0F3809_P_2 */ + { "vpsignw", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0F380A_P_2 */ + { "vpsignd", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0F380B_P_2 */ + { "vpmulhrsw", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0F380C_P_2 */ + { "vpermilps", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0F380D_P_2 */ + { "vpermilpd", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0F380E_P_2 */ + { "vtestps", { XM, EXx } }, + }, + { + /* VEX_W_0F380F_P_2 */ + { "vtestpd", { XM, EXx } }, + }, + { + /* VEX_W_0F3816_P_2 */ + { "vpermps", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0F3817_P_2 */ + { "vptest", { XM, EXx } }, + }, + { + /* VEX_W_0F3818_P_2 */ + { "vbroadcastss", { XM, EXxmm_md } }, + }, + { + /* VEX_W_0F3819_P_2 */ + { "vbroadcastsd", { XM, EXxmm_mq } }, + }, + { + /* VEX_W_0F381A_P_2_M_0 */ + { "vbroadcastf128", { XM, Mxmm } }, + }, + { + /* VEX_W_0F381C_P_2 */ + { "vpabsb", { XM, EXx } }, + }, + { + /* VEX_W_0F381D_P_2 */ + { "vpabsw", { XM, EXx } }, + }, + { + /* VEX_W_0F381E_P_2 */ { "vpabsd", { XM, EXx } }, - { "(bad)", { XX } }, }, - - /* VEX_LEN_3820_P_2 */ { - { "vpmovsxbw", { XM, EXq } }, - { "(bad)", { XX } }, + /* VEX_W_0F3820_P_2 */ + { "vpmovsxbw", { XM, EXxmmq } }, }, - - /* VEX_LEN_3821_P_2 */ { - { "vpmovsxbd", { XM, EXd } }, - { "(bad)", { XX } }, + /* VEX_W_0F3821_P_2 */ + { "vpmovsxbd", { XM, EXxmmqd } }, }, - - /* VEX_LEN_3822_P_2 */ { - { "vpmovsxbq", { XM, EXw } }, - { "(bad)", { XX } }, + /* VEX_W_0F3822_P_2 */ + { "vpmovsxbq", { XM, EXxmmdw } }, }, - - /* VEX_LEN_3823_P_2 */ { - { "vpmovsxwd", { XM, EXq } }, - { "(bad)", { XX } }, + /* VEX_W_0F3823_P_2 */ + { "vpmovsxwd", { XM, EXxmmq } }, }, - - /* VEX_LEN_3824_P_2 */ { - { "vpmovsxwq", { XM, EXd } }, - { "(bad)", { XX } }, + /* VEX_W_0F3824_P_2 */ + { "vpmovsxwq", { XM, EXxmmqd } }, }, - - /* VEX_LEN_3825_P_2 */ { - { "vpmovsxdq", { XM, EXq } }, - { "(bad)", { XX } }, + /* VEX_W_0F3825_P_2 */ + { "vpmovsxdq", { XM, EXxmmq } }, }, - - /* VEX_LEN_3828_P_2 */ { - { "vpmuldq", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + /* VEX_W_0F3828_P_2 */ + { "vpmuldq", { XM, Vex, EXx } }, }, - - /* VEX_LEN_3829_P_2 */ { - { "vpcmpeqq", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + /* VEX_W_0F3829_P_2 */ + { "vpcmpeqq", { XM, Vex, EXx } }, }, - - /* VEX_LEN_382A_P_2_M_0 */ { + /* VEX_W_0F382A_P_2_M_0 */ { "vmovntdqa", { XM, Mx } }, - { "(bad)", { XX } }, }, - - /* VEX_LEN_382B_P_2 */ { - { "vpackusdw", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + /* VEX_W_0F382B_P_2 */ + { "vpackusdw", { XM, Vex, EXx } }, }, - - /* VEX_LEN_3830_P_2 */ { - { "vpmovzxbw", { XM, EXq } }, - { "(bad)", { XX } }, + /* VEX_W_0F382C_P_2_M_0 */ + { "vmaskmovps", { XM, Vex, Mx } }, }, - - /* VEX_LEN_3831_P_2 */ { - { "vpmovzxbd", { XM, EXd } }, - { "(bad)", { XX } }, + /* VEX_W_0F382D_P_2_M_0 */ + { "vmaskmovpd", { XM, Vex, Mx } }, }, - - /* VEX_LEN_3832_P_2 */ { - { "vpmovzxbq", { XM, EXw } }, - { "(bad)", { XX } }, + /* VEX_W_0F382E_P_2_M_0 */ + { "vmaskmovps", { Mx, Vex, XM } }, }, - - /* VEX_LEN_3833_P_2 */ { - { "vpmovzxwd", { XM, EXq } }, - { "(bad)", { XX } }, + /* VEX_W_0F382F_P_2_M_0 */ + { "vmaskmovpd", { Mx, Vex, XM } }, }, - - /* VEX_LEN_3834_P_2 */ { - { "vpmovzxwq", { XM, EXd } }, - { "(bad)", { XX } }, + /* VEX_W_0F3830_P_2 */ + { "vpmovzxbw", { XM, EXxmmq } }, }, - - /* VEX_LEN_3835_P_2 */ { - { "vpmovzxdq", { XM, EXq } }, - { "(bad)", { XX } }, + /* VEX_W_0F3831_P_2 */ + { "vpmovzxbd", { XM, EXxmmqd } }, }, - - /* VEX_LEN_3837_P_2 */ { - { "vpcmpgtq", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + /* VEX_W_0F3832_P_2 */ + { "vpmovzxbq", { XM, EXxmmdw } }, }, - - /* VEX_LEN_3838_P_2 */ { - { "vpminsb", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + /* VEX_W_0F3833_P_2 */ + { "vpmovzxwd", { XM, EXxmmq } }, }, - - /* VEX_LEN_3839_P_2 */ { - { "vpminsd", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + /* VEX_W_0F3834_P_2 */ + { "vpmovzxwq", { XM, EXxmmqd } }, }, - - /* VEX_LEN_383A_P_2 */ { - { "vpminuw", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + /* VEX_W_0F3835_P_2 */ + { "vpmovzxdq", { XM, EXxmmq } }, }, - - /* VEX_LEN_383B_P_2 */ { - { "vpminud", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + /* VEX_W_0F3836_P_2 */ + { "vpermd", { XM, Vex, EXx } }, }, - - /* VEX_LEN_383C_P_2 */ { - { "vpmaxsb", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + /* VEX_W_0F3837_P_2 */ + { "vpcmpgtq", { XM, Vex, EXx } }, }, - - /* VEX_LEN_383D_P_2 */ { - { "vpmaxsd", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + /* VEX_W_0F3838_P_2 */ + { "vpminsb", { XM, Vex, EXx } }, }, - - /* VEX_LEN_383E_P_2 */ { - { "vpmaxuw", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + /* VEX_W_0F3839_P_2 */ + { "vpminsd", { XM, Vex, EXx } }, }, - - /* VEX_LEN_383F_P_2 */ { - { "vpmaxud", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + /* VEX_W_0F383A_P_2 */ + { "vpminuw", { XM, Vex, EXx } }, }, - - /* VEX_LEN_3840_P_2 */ { - { "vpmulld", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, + /* VEX_W_0F383B_P_2 */ + { "vpminud", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0F383C_P_2 */ + { "vpmaxsb", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0F383D_P_2 */ + { "vpmaxsd", { XM, Vex, EXx } }, }, - - /* VEX_LEN_3841_P_2 */ { + /* VEX_W_0F383E_P_2 */ + { "vpmaxuw", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0F383F_P_2 */ + { "vpmaxud", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0F3840_P_2 */ + { "vpmulld", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0F3841_P_2 */ { "vphminposuw", { XM, EXx } }, - { "(bad)", { XX } }, }, - - /* VEX_LEN_38DB_P_2 */ { + /* VEX_W_0F3846_P_2 */ + { "vpsravd", { XM, Vex, EXx } }, + }, + { + /* VEX_W_0F3858_P_2 */ + { "vpbroadcastd", { XM, EXxmm_md } }, + }, + { + /* VEX_W_0F3859_P_2 */ + { "vpbroadcastq", { XM, EXxmm_mq } }, + }, + { + /* VEX_W_0F385A_P_2_M_0 */ + { "vbroadcasti128", { XM, Mxmm } }, + }, + { + /* VEX_W_0F3878_P_2 */ + { "vpbroadcastb", { XM, EXxmm_mb } }, + }, + { + /* VEX_W_0F3879_P_2 */ + { "vpbroadcastw", { XM, EXxmm_mw } }, + }, + { + /* VEX_W_0F38DB_P_2 */ { "vaesimc", { XM, EXx } }, - { "(bad)", { XX } }, }, - - /* VEX_LEN_38DC_P_2 */ { + /* VEX_W_0F38DC_P_2 */ { "vaesenc", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, }, - - /* VEX_LEN_38DD_P_2 */ { + /* VEX_W_0F38DD_P_2 */ { "vaesenclast", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, }, - - /* VEX_LEN_38DE_P_2 */ { + /* VEX_W_0F38DE_P_2 */ { "vaesdec", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, }, - - /* VEX_LEN_38DF_P_2 */ { + /* VEX_W_0F38DF_P_2 */ { "vaesdeclast", { XM, Vex128, EXx } }, - { "(bad)", { XX } }, }, - - /* VEX_LEN_3A06_P_2 */ { - { "(bad)", { XX } }, - { "vperm2f128", { XM, Vex256, EXx, Ib } }, + /* VEX_W_0F3A00_P_2 */ + { Bad_Opcode }, + { "vpermq", { XM, EXx, Ib } }, + }, + { + /* VEX_W_0F3A01_P_2 */ + { Bad_Opcode }, + { "vpermpd", { XM, EXx, Ib } }, + }, + { + /* VEX_W_0F3A02_P_2 */ + { "vpblendd", { XM, Vex, EXx, Ib } }, + }, + { + /* VEX_W_0F3A04_P_2 */ + { "vpermilps", { XM, EXx, Ib } }, + }, + { + /* VEX_W_0F3A05_P_2 */ + { "vpermilpd", { XM, EXx, Ib } }, + }, + { + /* VEX_W_0F3A06_P_2 */ + { "vperm2f128", { XM, Vex256, EXx, Ib } }, + }, + { + /* VEX_W_0F3A08_P_2 */ + { "vroundps", { XM, EXx, Ib } }, + }, + { + /* VEX_W_0F3A09_P_2 */ + { "vroundpd", { XM, EXx, Ib } }, }, - - /* VEX_LEN_3A0A_P_2 */ { - { "vroundss", { XM, Vex128, EXd, Ib } }, - { "(bad)", { XX } }, + /* VEX_W_0F3A0A_P_2 */ + { "vroundss", { XMScalar, VexScalar, EXdScalar, Ib } }, }, - - /* VEX_LEN_3A0B_P_2 */ { - { "vroundsd", { XM, Vex128, EXq, Ib } }, - { "(bad)", { XX } }, + /* VEX_W_0F3A0B_P_2 */ + { "vroundsd", { XMScalar, VexScalar, EXqScalar, Ib } }, }, - - /* VEX_LEN_3A0E_P_2 */ { - { "vpblendw", { XM, Vex128, EXx, Ib } }, - { "(bad)", { XX } }, + /* VEX_W_0F3A0C_P_2 */ + { "vblendps", { XM, Vex, EXx, Ib } }, }, - - /* VEX_LEN_3A0F_P_2 */ { - { "vpalignr", { XM, Vex128, EXx, Ib } }, - { "(bad)", { XX } }, + /* VEX_W_0F3A0D_P_2 */ + { "vblendpd", { XM, Vex, EXx, Ib } }, }, - - /* VEX_LEN_3A14_P_2 */ { - { "vpextrb", { Edqb, XM, Ib } }, - { "(bad)", { XX } }, + /* VEX_W_0F3A0E_P_2 */ + { "vpblendw", { XM, Vex, EXx, Ib } }, }, - - /* VEX_LEN_3A15_P_2 */ { - { "vpextrw", { Edqw, XM, Ib } }, - { "(bad)", { XX } }, + /* VEX_W_0F3A0F_P_2 */ + { "vpalignr", { XM, Vex, EXx, Ib } }, }, - - /* VEX_LEN_3A16_P_2 */ { - { "vpextrK", { Edq, XM, Ib } }, - { "(bad)", { XX } }, + /* VEX_W_0F3A14_P_2 */ + { "vpextrb", { Edqb, XM, Ib } }, }, - - /* VEX_LEN_3A17_P_2 */ { - { "vextractps", { Edqd, XM, Ib } }, - { "(bad)", { XX } }, + /* VEX_W_0F3A15_P_2 */ + { "vpextrw", { Edqw, XM, Ib } }, }, - - /* VEX_LEN_3A18_P_2 */ { - { "(bad)", { XX } }, + /* VEX_W_0F3A18_P_2 */ { "vinsertf128", { XM, Vex256, EXxmm, Ib } }, }, - - /* VEX_LEN_3A19_P_2 */ { - { "(bad)", { XX } }, + /* VEX_W_0F3A19_P_2 */ { "vextractf128", { EXxmm, XM, Ib } }, }, - - /* VEX_LEN_3A20_P_2 */ { + /* VEX_W_0F3A20_P_2 */ { "vpinsrb", { XM, Vex128, Edqb, Ib } }, - { "(bad)", { XX } }, }, - - /* VEX_LEN_3A21_P_2 */ { + /* VEX_W_0F3A21_P_2 */ { "vinsertps", { XM, Vex128, EXd, Ib } }, - { "(bad)", { XX } }, - }, - - /* VEX_LEN_3A22_P_2 */ - { - { "vpinsrK", { XM, Vex128, Edq, Ib } }, - { "(bad)", { XX } }, }, - - /* VEX_LEN_3A41_P_2 */ { - { "vdppd", { XM, Vex128, EXx, Ib } }, - { "(bad)", { XX } }, + /* VEX_W_0F3A38_P_2 */ + { "vinserti128", { XM, Vex256, EXxmm, Ib } }, }, - - /* VEX_LEN_3A42_P_2 */ { - { "vmpsadbw", { XM, Vex128, EXx, Ib } }, - { "(bad)", { XX } }, + /* VEX_W_0F3A39_P_2 */ + { "vextracti128", { EXxmm, XM, Ib } }, }, - - /* VEX_LEN_3A44_P_2 */ { - { "vpclmulqdq", { XM, Vex128, EXx, PCLMUL } }, - { "(bad)", { XX } }, + /* VEX_W_0F3A40_P_2 */ + { "vdpps", { XM, Vex, EXx, Ib } }, }, - - /* VEX_LEN_3A4C_P_2 */ { - { "vpblendvb", { XM, Vex128, EXx, XMVexI4 } }, - { "(bad)", { XX } }, + /* VEX_W_0F3A41_P_2 */ + { "vdppd", { XM, Vex128, EXx, Ib } }, }, - - /* VEX_LEN_3A60_P_2 */ { - { "vpcmpestrm", { XM, EXx, Ib } }, - { "(bad)", { XX } }, + /* VEX_W_0F3A42_P_2 */ + { "vmpsadbw", { XM, Vex, EXx, Ib } }, }, - - /* VEX_LEN_3A61_P_2 */ { - { "vpcmpestri", { XM, EXx, Ib } }, - { "(bad)", { XX } }, + /* VEX_W_0F3A44_P_2 */ + { "vpclmulqdq", { XM, Vex128, EXx, PCLMUL } }, }, - - /* VEX_LEN_3A62_P_2 */ { - { "vpcmpistrm", { XM, EXx, Ib } }, - { "(bad)", { XX } }, + /* VEX_W_0F3A46_P_2 */ + { "vperm2i128", { XM, Vex256, EXx, Ib } }, }, - - /* VEX_LEN_3A63_P_2 */ { - { "vpcmpistri", { XM, EXx, Ib } }, - { "(bad)", { XX } }, + /* VEX_W_0F3A48_P_2 */ + { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } }, + { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } }, }, - - /* VEX_LEN_3A6A_P_2 */ { - { "vfmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } }, - { "(bad)", { XX } }, + /* VEX_W_0F3A49_P_2 */ + { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } }, + { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } }, }, - - /* VEX_LEN_3A6B_P_2 */ { - { "vfmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } }, - { "(bad)", { XX } }, + /* VEX_W_0F3A4A_P_2 */ + { "vblendvps", { XM, Vex, EXx, XMVexI4 } }, }, - - /* VEX_LEN_3A6E_P_2 */ { - { "vfmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } }, - { "(bad)", { XX } }, + /* VEX_W_0F3A4B_P_2 */ + { "vblendvpd", { XM, Vex, EXx, XMVexI4 } }, }, - - /* VEX_LEN_3A6F_P_2 */ { - { "vfmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } }, - { "(bad)", { XX } }, + /* VEX_W_0F3A4C_P_2 */ + { "vpblendvb", { XM, Vex, EXx, XMVexI4 } }, }, - - /* VEX_LEN_3A7A_P_2 */ { - { "vfnmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } }, - { "(bad)", { XX } }, + /* VEX_W_0F3A60_P_2 */ + { "vpcmpestrm", { XM, EXx, Ib } }, }, - - /* VEX_LEN_3A7B_P_2 */ { - { "vfnmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } }, - { "(bad)", { XX } }, + /* VEX_W_0F3A61_P_2 */ + { "vpcmpestri", { XM, EXx, Ib } }, }, - - /* VEX_LEN_3A7E_P_2 */ { - { "vfnmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } }, - { "(bad)", { XX } }, + /* VEX_W_0F3A62_P_2 */ + { "vpcmpistrm", { XM, EXx, Ib } }, }, - - /* VEX_LEN_3A7F_P_2 */ { - { "vfnmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } }, - { "(bad)", { XX } }, + /* VEX_W_0F3A63_P_2 */ + { "vpcmpistri", { XM, EXx, Ib } }, }, - - /* VEX_LEN_3ADF_P_2 */ { + /* VEX_W_0F3ADF_P_2 */ { "vaeskeygenassist", { XM, EXx, Ib } }, - { "(bad)", { XX } }, }, }; @@ -9060,7 +10164,16 @@ static const struct dis386 mod_table[][2] = { { /* MOD_8D */ { "leaS", { Gv, M } }, - { "(bad)", { XX } }, + }, + { + /* MOD_C6_REG_7 */ + { Bad_Opcode }, + { RM_TABLE (RM_C6_REG_7) }, + }, + { + /* MOD_C7_REG_7 */ + { Bad_Opcode }, + { RM_TABLE (RM_C7_REG_7) }, }, { /* MOD_0F01_REG_0 */ @@ -9095,7 +10208,6 @@ static const struct dis386 mod_table[][2] = { { /* MOD_0F13 */ { "movlpX", { EXq, XM } }, - { "(bad)", { XX } }, }, { /* MOD_0F16_PREFIX_0 */ @@ -9105,166 +10217,172 @@ static const struct dis386 mod_table[][2] = { { /* MOD_0F17 */ { "movhpX", { EXq, XM } }, - { "(bad)", { XX } }, }, { /* MOD_0F18_REG_0 */ { "prefetchnta", { Mb } }, - { "(bad)", { XX } }, }, { /* MOD_0F18_REG_1 */ { "prefetcht0", { Mb } }, - { "(bad)", { XX } }, }, { /* MOD_0F18_REG_2 */ { "prefetcht1", { Mb } }, - { "(bad)", { XX } }, }, { /* MOD_0F18_REG_3 */ { "prefetcht2", { Mb } }, - { "(bad)", { XX } }, + }, + { + /* MOD_0F18_REG_4 */ + { "nop/reserved", { Mb } }, + }, + { + /* MOD_0F18_REG_5 */ + { "nop/reserved", { Mb } }, + }, + { + /* MOD_0F18_REG_6 */ + { "nop/reserved", { Mb } }, + }, + { + /* MOD_0F18_REG_7 */ + { "nop/reserved", { Mb } }, }, { /* MOD_0F20 */ - { "(bad)", { XX } }, + { Bad_Opcode }, { "movZ", { Rm, Cm } }, }, { /* MOD_0F21 */ - { "(bad)", { XX } }, + { Bad_Opcode }, { "movZ", { Rm, Dm } }, }, { /* MOD_0F22 */ - { "(bad)", { XX } }, + { Bad_Opcode }, { "movZ", { Cm, Rm } }, }, { /* MOD_0F23 */ - { "(bad)", { XX } }, + { Bad_Opcode }, { "movZ", { Dm, Rm } }, }, { /* MOD_0F24 */ - { "(bad)", { XX } }, + { Bad_Opcode }, { "movL", { Rd, Td } }, }, { /* MOD_0F26 */ - { "(bad)", { XX } }, + { Bad_Opcode }, { "movL", { Td, Rd } }, }, { /* MOD_0F2B_PREFIX_0 */ {"movntps", { Mx, XM } }, - { "(bad)", { XX } }, }, { /* MOD_0F2B_PREFIX_1 */ {"movntss", { Md, XM } }, - { "(bad)", { XX } }, }, { /* MOD_0F2B_PREFIX_2 */ {"movntpd", { Mx, XM } }, - { "(bad)", { XX } }, }, { /* MOD_0F2B_PREFIX_3 */ {"movntsd", { Mq, XM } }, - { "(bad)", { XX } }, }, { /* MOD_0F51 */ - { "(bad)", { XX } }, + { Bad_Opcode }, { "movmskpX", { Gdq, XS } }, }, { /* MOD_0F71_REG_2 */ - { "(bad)", { XX } }, + { Bad_Opcode }, { "psrlw", { MS, Ib } }, }, { /* MOD_0F71_REG_4 */ - { "(bad)", { XX } }, + { Bad_Opcode }, { "psraw", { MS, Ib } }, }, { /* MOD_0F71_REG_6 */ - { "(bad)", { XX } }, + { Bad_Opcode }, { "psllw", { MS, Ib } }, }, { /* MOD_0F72_REG_2 */ - { "(bad)", { XX } }, + { Bad_Opcode }, { "psrld", { MS, Ib } }, }, { /* MOD_0F72_REG_4 */ - { "(bad)", { XX } }, + { Bad_Opcode }, { "psrad", { MS, Ib } }, }, { /* MOD_0F72_REG_6 */ - { "(bad)", { XX } }, + { Bad_Opcode }, { "pslld", { MS, Ib } }, }, { /* MOD_0F73_REG_2 */ - { "(bad)", { XX } }, + { Bad_Opcode }, { "psrlq", { MS, Ib } }, }, { /* MOD_0F73_REG_3 */ - { "(bad)", { XX } }, + { Bad_Opcode }, { PREFIX_TABLE (PREFIX_0F73_REG_3) }, }, { /* MOD_0F73_REG_6 */ - { "(bad)", { XX } }, + { Bad_Opcode }, { "psllq", { MS, Ib } }, }, { /* MOD_0F73_REG_7 */ - { "(bad)", { XX } }, + { Bad_Opcode }, { PREFIX_TABLE (PREFIX_0F73_REG_7) }, }, { /* MOD_0FAE_REG_0 */ - { "fxsave", { M } }, - { "(bad)", { XX } }, + { "fxsave", { FXSAVE } }, + { PREFIX_TABLE (PREFIX_0FAE_REG_0) }, }, { /* MOD_0FAE_REG_1 */ - { "fxrstor", { M } }, - { "(bad)", { XX } }, + { "fxrstor", { FXSAVE } }, + { PREFIX_TABLE (PREFIX_0FAE_REG_1) }, }, { /* MOD_0FAE_REG_2 */ { "ldmxcsr", { Md } }, - { "(bad)", { XX } }, + { PREFIX_TABLE (PREFIX_0FAE_REG_2) }, }, { /* MOD_0FAE_REG_3 */ { "stmxcsr", { Md } }, - { "(bad)", { XX } }, + { PREFIX_TABLE (PREFIX_0FAE_REG_3) }, }, { /* MOD_0FAE_REG_4 */ - { "xsave", { M } }, - { "(bad)", { XX } }, + { "xsave", { FXSAVE } }, }, { /* MOD_0FAE_REG_5 */ - { "xrstor", { M } }, + { "xrstor", { FXSAVE } }, { RM_TABLE (RM_0FAE_REG_5) }, }, { /* MOD_0FAE_REG_6 */ - { "xsaveopt", { M } }, + { "xsaveopt", { FXSAVE } }, { RM_TABLE (RM_0FAE_REG_6) }, }, { @@ -9275,52 +10393,45 @@ static const struct dis386 mod_table[][2] = { { /* MOD_0FB2 */ { "lssS", { Gv, Mp } }, - { "(bad)", { XX } }, }, { /* MOD_0FB4 */ { "lfsS", { Gv, Mp } }, - { "(bad)", { XX } }, }, { /* MOD_0FB5 */ { "lgsS", { Gv, Mp } }, - { "(bad)", { XX } }, }, { /* MOD_0FC7_REG_6 */ { PREFIX_TABLE (PREFIX_0FC7_REG_6) }, - { "(bad)", { XX } }, + { "rdrand", { Ev } }, }, { /* MOD_0FC7_REG_7 */ { "vmptrst", { Mq } }, - { "(bad)", { XX } }, + { "rdseed", { Ev } }, }, { /* MOD_0FD7 */ - { "(bad)", { XX } }, + { Bad_Opcode }, { "pmovmskb", { Gdq, MS } }, }, { /* MOD_0FE7_PREFIX_2 */ { "movntdq", { Mx, XM } }, - { "(bad)", { XX } }, }, { /* MOD_0FF0_PREFIX_3 */ { "lddqu", { XM, M } }, - { "(bad)", { XX } }, }, { /* MOD_0F382A_PREFIX_2 */ { "movntdqa", { XM, Mx } }, - { "(bad)", { XX } }, }, { /* MOD_62_32BIT */ { "bound{S|}", { Gv, Ma } }, - { "(bad)", { XX } }, }, { /* MOD_C4_32BIT */ @@ -9333,185 +10444,173 @@ static const struct dis386 mod_table[][2] = { { VEX_C5_TABLE (VEX_0F) }, }, { - /* MOD_VEX_12_PREFIX_0 */ - { VEX_LEN_TABLE (VEX_LEN_12_P_0_M_0) }, - { VEX_LEN_TABLE (VEX_LEN_12_P_0_M_1) }, + /* MOD_VEX_0F12_PREFIX_0 */ + { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_0) }, + { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_1) }, }, { - /* MOD_VEX_13 */ - { VEX_LEN_TABLE (VEX_LEN_13_M_0) }, - { "(bad)", { XX } }, + /* MOD_VEX_0F13 */ + { VEX_LEN_TABLE (VEX_LEN_0F13_M_0) }, }, { - /* MOD_VEX_16_PREFIX_0 */ - { VEX_LEN_TABLE (VEX_LEN_16_P_0_M_0) }, - { VEX_LEN_TABLE (VEX_LEN_16_P_0_M_1) }, + /* MOD_VEX_0F16_PREFIX_0 */ + { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_0) }, + { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_1) }, }, { - /* MOD_VEX_17 */ - { VEX_LEN_TABLE (VEX_LEN_17_M_0) }, - { "(bad)", { XX } }, + /* MOD_VEX_0F17 */ + { VEX_LEN_TABLE (VEX_LEN_0F17_M_0) }, }, { - /* MOD_VEX_2B */ - { "vmovntpX", { Mx, XM } }, - { "(bad)", { XX } }, + /* MOD_VEX_0F2B */ + { VEX_W_TABLE (VEX_W_0F2B_M_0) }, }, { - /* MOD_VEX_51 */ - { "(bad)", { XX } }, - { "vmovmskpX", { Gdq, XS } }, + /* MOD_VEX_0F50 */ + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F50_M_0) }, }, { - /* MOD_VEX_71_REG_2 */ - { "(bad)", { XX } }, - { PREFIX_TABLE (PREFIX_VEX_71_REG_2) }, + /* MOD_VEX_0F71_REG_2 */ + { Bad_Opcode }, + { PREFIX_TABLE (PREFIX_VEX_0F71_REG_2) }, }, { - /* MOD_VEX_71_REG_4 */ - { "(bad)", { XX } }, - { PREFIX_TABLE (PREFIX_VEX_71_REG_4) }, + /* MOD_VEX_0F71_REG_4 */ + { Bad_Opcode }, + { PREFIX_TABLE (PREFIX_VEX_0F71_REG_4) }, }, { - /* MOD_VEX_71_REG_6 */ - { "(bad)", { XX } }, - { PREFIX_TABLE (PREFIX_VEX_71_REG_6) }, + /* MOD_VEX_0F71_REG_6 */ + { Bad_Opcode }, + { PREFIX_TABLE (PREFIX_VEX_0F71_REG_6) }, }, { - /* MOD_VEX_72_REG_2 */ - { "(bad)", { XX } }, - { PREFIX_TABLE (PREFIX_VEX_72_REG_2) }, + /* MOD_VEX_0F72_REG_2 */ + { Bad_Opcode }, + { PREFIX_TABLE (PREFIX_VEX_0F72_REG_2) }, }, { - /* MOD_VEX_72_REG_4 */ - { "(bad)", { XX } }, - { PREFIX_TABLE (PREFIX_VEX_72_REG_4) }, + /* MOD_VEX_0F72_REG_4 */ + { Bad_Opcode }, + { PREFIX_TABLE (PREFIX_VEX_0F72_REG_4) }, }, { - /* MOD_VEX_72_REG_6 */ - { "(bad)", { XX } }, - { PREFIX_TABLE (PREFIX_VEX_72_REG_6) }, + /* MOD_VEX_0F72_REG_6 */ + { Bad_Opcode }, + { PREFIX_TABLE (PREFIX_VEX_0F72_REG_6) }, }, { - /* MOD_VEX_73_REG_2 */ - { "(bad)", { XX } }, - { PREFIX_TABLE (PREFIX_VEX_73_REG_2) }, + /* MOD_VEX_0F73_REG_2 */ + { Bad_Opcode }, + { PREFIX_TABLE (PREFIX_VEX_0F73_REG_2) }, }, { - /* MOD_VEX_73_REG_3 */ - { "(bad)", { XX } }, - { PREFIX_TABLE (PREFIX_VEX_73_REG_3) }, + /* MOD_VEX_0F73_REG_3 */ + { Bad_Opcode }, + { PREFIX_TABLE (PREFIX_VEX_0F73_REG_3) }, }, { - /* MOD_VEX_73_REG_6 */ - { "(bad)", { XX } }, - { PREFIX_TABLE (PREFIX_VEX_73_REG_6) }, + /* MOD_VEX_0F73_REG_6 */ + { Bad_Opcode }, + { PREFIX_TABLE (PREFIX_VEX_0F73_REG_6) }, }, { - /* MOD_VEX_73_REG_7 */ - { "(bad)", { XX } }, - { PREFIX_TABLE (PREFIX_VEX_73_REG_7) }, + /* MOD_VEX_0F73_REG_7 */ + { Bad_Opcode }, + { PREFIX_TABLE (PREFIX_VEX_0F73_REG_7) }, }, { - /* MOD_VEX_AE_REG_2 */ - { VEX_LEN_TABLE (VEX_LEN_AE_R_2_M_0) }, - { "(bad)", { XX } }, + /* MOD_VEX_0FAE_REG_2 */ + { VEX_LEN_TABLE (VEX_LEN_0FAE_R_2_M_0) }, }, { - /* MOD_VEX_AE_REG_3 */ - { VEX_LEN_TABLE (VEX_LEN_AE_R_3_M_0) }, - { "(bad)", { XX } }, + /* MOD_VEX_0FAE_REG_3 */ + { VEX_LEN_TABLE (VEX_LEN_0FAE_R_3_M_0) }, }, { - /* MOD_VEX_D7_PREFIX_2 */ - { "(bad)", { XX } }, - { VEX_LEN_TABLE (VEX_LEN_D7_P_2_M_1) }, + /* MOD_VEX_0FD7_PREFIX_2 */ + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0FD7_P_2_M_1) }, }, { - /* MOD_VEX_E7_PREFIX_2 */ - { "vmovntdq", { Mx, XM } }, - { "(bad)", { XX } }, + /* MOD_VEX_0FE7_PREFIX_2 */ + { VEX_W_TABLE (VEX_W_0FE7_P_2_M_0) }, }, { - /* MOD_VEX_F0_PREFIX_3 */ - { "vlddqu", { XM, M } }, - { "(bad)", { XX } }, + /* MOD_VEX_0FF0_PREFIX_3 */ + { VEX_W_TABLE (VEX_W_0FF0_P_3_M_0) }, }, { - /* MOD_VEX_3818_PREFIX_2 */ - { "vbroadcastss", { XM, Md } }, - { "(bad)", { XX } }, + /* MOD_VEX_0F381A_PREFIX_2 */ + { VEX_LEN_TABLE (VEX_LEN_0F381A_P_2_M_0) }, }, { - /* MOD_VEX_3819_PREFIX_2 */ - { VEX_LEN_TABLE (VEX_LEN_3819_P_2_M_0) }, - { "(bad)", { XX } }, + /* MOD_VEX_0F382A_PREFIX_2 */ + { VEX_W_TABLE (VEX_W_0F382A_P_2_M_0) }, }, { - /* MOD_VEX_381A_PREFIX_2 */ - { VEX_LEN_TABLE (VEX_LEN_381A_P_2_M_0) }, - { "(bad)", { XX } }, + /* MOD_VEX_0F382C_PREFIX_2 */ + { VEX_W_TABLE (VEX_W_0F382C_P_2_M_0) }, }, { - /* MOD_VEX_382A_PREFIX_2 */ - { VEX_LEN_TABLE (VEX_LEN_382A_P_2_M_0) }, - { "(bad)", { XX } }, + /* MOD_VEX_0F382D_PREFIX_2 */ + { VEX_W_TABLE (VEX_W_0F382D_P_2_M_0) }, }, { - /* MOD_VEX_382C_PREFIX_2 */ - { "vmaskmovps", { XM, Vex, Mx } }, - { "(bad)", { XX } }, + /* MOD_VEX_0F382E_PREFIX_2 */ + { VEX_W_TABLE (VEX_W_0F382E_P_2_M_0) }, }, { - /* MOD_VEX_382D_PREFIX_2 */ - { "vmaskmovpd", { XM, Vex, Mx } }, - { "(bad)", { XX } }, + /* MOD_VEX_0F382F_PREFIX_2 */ + { VEX_W_TABLE (VEX_W_0F382F_P_2_M_0) }, }, { - /* MOD_VEX_382E_PREFIX_2 */ - { "vmaskmovps", { Mx, Vex, XM } }, - { "(bad)", { XX } }, + /* MOD_VEX_0F385A_PREFIX_2 */ + { VEX_LEN_TABLE (VEX_LEN_0F385A_P_2_M_0) }, }, { - /* MOD_VEX_382F_PREFIX_2 */ - { "vmaskmovpd", { Mx, Vex, XM } }, - { "(bad)", { XX } }, + /* MOD_VEX_0F388C_PREFIX_2 */ + { "vpmaskmov%LW", { XM, Vex, Mx } }, + }, + { + /* MOD_VEX_0F388E_PREFIX_2 */ + { "vpmaskmov%LW", { Mx, Vex, XM } }, }, }; static const struct dis386 rm_table[][8] = { + { + /* RM_C6_REG_7 */ + { "xabort", { Skip_MODRM, Ib } }, + }, + { + /* RM_C7_REG_7 */ + { "xbeginT", { Skip_MODRM, Jv } }, + }, { /* RM_0F01_REG_0 */ - { "(bad)", { XX } }, + { Bad_Opcode }, { "vmcall", { Skip_MODRM } }, { "vmlaunch", { Skip_MODRM } }, { "vmresume", { Skip_MODRM } }, { "vmxoff", { Skip_MODRM } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, }, { /* RM_0F01_REG_1 */ { "monitor", { { OP_Monitor, 0 } } }, { "mwait", { { OP_Mwait, 0 } } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, }, { /* RM_0F01_REG_2 */ { "xgetbv", { Skip_MODRM } }, { "xsetbv", { Skip_MODRM } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { "vmfunc", { Skip_MODRM } }, + { "xend", { Skip_MODRM } }, + { "xtest", { Skip_MODRM } }, + { Bad_Opcode }, }, { /* RM_0F01_REG_3 */ @@ -9528,45 +10627,18 @@ static const struct dis386 rm_table[][8] = { /* RM_0F01_REG_7 */ { "swapgs", { Skip_MODRM } }, { "rdtscp", { Skip_MODRM } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, }, { /* RM_0FAE_REG_5 */ { "lfence", { Skip_MODRM } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, }, { /* RM_0FAE_REG_6 */ { "mfence", { Skip_MODRM } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, }, { /* RM_0FAE_REG_7 */ { "sfence", { Skip_MODRM } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, }, }; @@ -9579,13 +10651,14 @@ static const struct dis386 rm_table[][8] = { #define DATA16_PREFIX (0x66 | 0x100) #define DATA32_PREFIX (0x66 | 0x200) #define REP_PREFIX (0xf3 | 0x100) +#define XACQUIRE_PREFIX (0xf2 | 0x200) +#define XRELEASE_PREFIX (0xf3 | 0x400) static int ckprefix (void) { int newrex, i, length; rex = 0; - rex_original = 0; rex_ignored = 0; prefixes = 0; used_prefixes = 0; @@ -9699,7 +10772,6 @@ ckprefix (void) if (*codep != FWAIT_OPCODE) all_prefixes[i++] = *codep; rex = newrex; - rex_original = rex; codep++; length++; } @@ -9811,6 +10883,10 @@ prefix_name (int pref, int sizeflag) return "data32"; case REP_PREFIX: return "rep"; + case XACQUIRE_PREFIX: + return "xacquire"; + case XRELEASE_PREFIX: + return "xrelease"; default: return NULL; } @@ -9890,12 +10966,15 @@ with the -M switch (multiple options should be separated by commas):\n")); fprintf (stream, _(" suffix Always display instruction suffix in AT&T syntax\n")); } +/* Bad opcode. */ +static const struct dis386 bad_opcode = { "(bad)", { XX } }; + /* Get a pointer to struct dis386 with a valid name. */ static const struct dis386 * get_valid_dis386 (const struct dis386 *dp, disassemble_info *info) { - int index, vex_table_index; + int vindex, vex_table_index; if (dp->name != NULL) return dp; @@ -9907,8 +10986,8 @@ get_valid_dis386 (const struct dis386 *dp, disassemble_info *info) break; case USE_MOD_TABLE: - index = modrm.mod == 0x3 ? 1 : 0; - dp = &mod_table[dp->op[1].bytemode][index]; + vindex = modrm.mod == 0x3 ? 1 : 0; + dp = &mod_table[dp->op[1].bytemode][vindex]; break; case USE_RM_TABLE: @@ -9922,29 +11001,29 @@ get_valid_dis386 (const struct dis386 *dp, disassemble_info *info) switch (vex.prefix) { case 0: - index = 0; + vindex = 0; break; case REPE_PREFIX_OPCODE: - index = 1; + vindex = 1; break; case DATA_PREFIX_OPCODE: - index = 2; + vindex = 2; break; case REPNE_PREFIX_OPCODE: - index = 3; + vindex = 3; break; default: abort (); break; } } - else + else { - index = 0; + vindex = 0; used_prefixes |= (prefixes & PREFIX_REPZ); if (prefixes & PREFIX_REPZ) { - index = 1; + vindex = 1; all_prefixes[last_repz_prefix] = 0; } else @@ -9954,7 +11033,7 @@ get_valid_dis386 (const struct dis386 *dp, disassemble_info *info) used_prefixes |= (prefixes & PREFIX_REPNZ); if (prefixes & PREFIX_REPNZ) { - index = 3; + vindex = 3; all_prefixes[last_repnz_prefix] = 0; } else @@ -9962,24 +11041,24 @@ get_valid_dis386 (const struct dis386 *dp, disassemble_info *info) used_prefixes |= (prefixes & PREFIX_DATA); if (prefixes & PREFIX_DATA) { - index = 2; + vindex = 2; all_prefixes[last_data_prefix] = 0; } } } } - dp = &prefix_table[dp->op[1].bytemode][index]; + dp = &prefix_table[dp->op[1].bytemode][vindex]; break; case USE_X86_64_TABLE: - index = address_mode == mode_64bit ? 1 : 0; - dp = &x86_64_table[dp->op[1].bytemode][index]; + vindex = address_mode == mode_64bit ? 1 : 0; + dp = &x86_64_table[dp->op[1].bytemode][vindex]; break; case USE_3BYTE_TABLE: FETCH_DATA (info, codep + 2); - index = *codep++; - dp = &three_byte_table[dp->op[1].bytemode][index]; + vindex = *codep++; + dp = &three_byte_table[dp->op[1].bytemode][vindex]; modrm.mod = (*codep >> 6) & 3; modrm.reg = (*codep >> 3) & 7; modrm.rm = *codep & 7; @@ -9992,17 +11071,17 @@ get_valid_dis386 (const struct dis386 *dp, disassemble_info *info) switch (vex.length) { case 128: - index = 0; + vindex = 0; break; case 256: - index = 1; + vindex = 1; break; default: abort (); break; } - dp = &vex_len_table[dp->op[1].bytemode][index]; + dp = &vex_len_table[dp->op[1].bytemode][vindex]; break; case USE_XOP_8F_TABLE: @@ -10015,7 +11094,11 @@ get_valid_dis386 (const struct dis386 *dp, disassemble_info *info) switch ((*codep & 0x1f)) { default: - BadOp (); + dp = &bad_opcode; + return dp; + case 0x8: + vex_table_index = XOP_08; + break; case 0x9: vex_table_index = XOP_09; break; @@ -10031,7 +11114,10 @@ get_valid_dis386 (const struct dis386 *dp, disassemble_info *info) vex.register_specifier = (~(*codep >> 3)) & 0xf; if (address_mode != mode_64bit && vex.register_specifier > 0x7) - BadOp (); + { + dp = &bad_opcode; + return dp; + } vex.length = (*codep & 0x4) ? 256 : 128; switch ((*codep & 0x3)) @@ -10052,8 +11138,8 @@ get_valid_dis386 (const struct dis386 *dp, disassemble_info *info) need_vex = 1; need_vex_reg = 1; codep++; - index = *codep++; - dp = &xop_table[vex_table_index][index]; + vindex = *codep++; + dp = &xop_table[vex_table_index][vindex]; FETCH_DATA (info, codep + 1); modrm.mod = (*codep >> 6) & 3; @@ -10069,7 +11155,8 @@ get_valid_dis386 (const struct dis386 *dp, disassemble_info *info) switch ((*codep & 0x1f)) { default: - BadOp (); + dp = &bad_opcode; + return dp; case 0x1: vex_table_index = VEX_0F; break; @@ -10088,7 +11175,10 @@ get_valid_dis386 (const struct dis386 *dp, disassemble_info *info) vex.register_specifier = (~(*codep >> 3)) & 0xf; if (address_mode != mode_64bit && vex.register_specifier > 0x7) - BadOp (); + { + dp = &bad_opcode; + return dp; + } vex.length = (*codep & 0x4) ? 256 : 128; switch ((*codep & 0x3)) @@ -10109,10 +11199,10 @@ get_valid_dis386 (const struct dis386 *dp, disassemble_info *info) need_vex = 1; need_vex_reg = 1; codep++; - index = *codep++; - dp = &vex_table[vex_table_index][index]; + vindex = *codep++; + dp = &vex_table[vex_table_index][vindex]; /* There is no MODRM byte for VEX [82|77]. */ - if (index != 0x77 && index != 0x82) + if (vindex != 0x77 && vindex != 0x82) { FETCH_DATA (info, codep + 1); modrm.mod = (*codep >> 6) & 3; @@ -10130,7 +11220,12 @@ get_valid_dis386 (const struct dis386 *dp, disassemble_info *info) vex.register_specifier = (~(*codep >> 3)) & 0xf; if (address_mode != mode_64bit && vex.register_specifier > 0x7) - BadOp (); + { + dp = &bad_opcode; + return dp; + } + + vex.w = 0; vex.length = (*codep & 0x4) ? 256 : 128; switch ((*codep & 0x3)) @@ -10151,10 +11246,10 @@ get_valid_dis386 (const struct dis386 *dp, disassemble_info *info) need_vex = 1; need_vex_reg = 1; codep++; - index = *codep++; - dp = &vex_table[dp->op[1].bytemode][index]; + vindex = *codep++; + dp = &vex_table[dp->op[1].bytemode][vindex]; /* There is no MODRM byte for VEX [82|77]. */ - if (index != 0x77 && index != 0x82) + if (vindex != 0x77 && vindex != 0x82) { FETCH_DATA (info, codep + 1); modrm.mod = (*codep >> 6) & 3; @@ -10163,6 +11258,17 @@ get_valid_dis386 (const struct dis386 *dp, disassemble_info *info) } break; + case USE_VEX_W_TABLE: + if (!need_vex) + abort (); + + dp = &vex_w_table[dp->op[1].bytemode][vex.w ? 1 : 0]; + break; + + case 0: + dp = &bad_opcode; + break; + default: abort (); } @@ -10173,6 +11279,22 @@ get_valid_dis386 (const struct dis386 *dp, disassemble_info *info) return get_valid_dis386 (dp, info); } +static void +get_sib (disassemble_info *info) +{ + /* If modrm.mod == 3, operand must be register. */ + if (need_modrm + && address_mode != mode_16bit + && modrm.mod != 3 + && modrm.rm == 4) + { + FETCH_DATA (info, codep + 2); + sib.index = (codep [1] >> 3) & 7; + sib.scale = (codep [1] >> 6) & 3; + sib.base = codep [1] & 7; + } +} + static int print_insn (bfd_vma pc, disassemble_info *info) { @@ -10183,34 +11305,22 @@ print_insn (bfd_vma pc, disassemble_info *info) int sizeflag; const char *p; struct dis_private priv; - unsigned char op; int prefix_length; int default_prefixes; - if (info->mach == bfd_mach_x86_64_intel_syntax - || info->mach == bfd_mach_x86_64 - || info->mach == bfd_mach_l1om - || info->mach == bfd_mach_l1om_intel_syntax) - address_mode = mode_64bit; - else + priv.orig_sizeflag = AFLAG | DFLAG; + if ((info->mach & bfd_mach_i386_i386) != 0) address_mode = mode_32bit; - - if (intel_syntax == (char) -1) - intel_syntax = (info->mach == bfd_mach_i386_i386_intel_syntax - || info->mach == bfd_mach_x86_64_intel_syntax - || info->mach == bfd_mach_l1om_intel_syntax); - - if (info->mach == bfd_mach_i386_i386 - || info->mach == bfd_mach_x86_64 - || info->mach == bfd_mach_l1om - || info->mach == bfd_mach_i386_i386_intel_syntax - || info->mach == bfd_mach_x86_64_intel_syntax - || info->mach == bfd_mach_l1om_intel_syntax) - priv.orig_sizeflag = AFLAG | DFLAG; else if (info->mach == bfd_mach_i386_i8086) - priv.orig_sizeflag = 0; + { + address_mode = mode_16bit; + priv.orig_sizeflag = 0; + } else - abort (); + address_mode = mode_64bit; + + if (intel_syntax == (char) -1) + intel_syntax = (info->mach & bfd_mach_i386_intel_syntax) != 0; for (p = info->disassembler_options; p != NULL; ) { @@ -10281,6 +11391,9 @@ print_insn (bfd_vma pc, disassemble_info *info) names8 = intel_names8; names8rex = intel_names8rex; names_seg = intel_names_seg; + names_mm = intel_names_mm; + names_xmm = intel_names_xmm; + names_ymm = intel_names_ymm; index64 = intel_index64; index32 = intel_index32; index16 = intel_index16; @@ -10297,6 +11410,9 @@ print_insn (bfd_vma pc, disassemble_info *info) names8 = att_names8; names8rex = att_names8rex; names_seg = att_names_seg; + names_mm = att_names_mm; + names_xmm = att_names_xmm; + names_ymm = att_names_ymm; index64 = att_index64; index32 = att_index32; index16 = att_index16; @@ -10309,8 +11425,7 @@ print_insn (bfd_vma pc, disassemble_info *info) /* The output looks better if we put 7 bytes on a line, since that puts most long word instructions on a single line. Use 8 bytes for Intel L1OM. */ - if (info->mach == bfd_mach_l1om - || info->mach == bfd_mach_l1om_intel_syntax) + if ((info->mach & bfd_mach_l1om) != 0) info->bytes_per_line = 8; else info->bytes_per_line = 7; @@ -10363,11 +11478,12 @@ print_insn (bfd_vma pc, disassemble_info *info) { /* Too many prefixes or unused REX prefixes. */ for (i = 0; - all_prefixes[i] && i < (int) ARRAY_SIZE (all_prefixes); + i < (int) ARRAY_SIZE (all_prefixes) && all_prefixes[i]; i++) - (*info->fprintf_func) (info->stream, "%s", + (*info->fprintf_func) (info->stream, "%s%s", + i == 0 ? "" : " ", prefix_name (all_prefixes[i], sizeflag)); - return 1; + return i; } insn_codep = codep; @@ -10382,8 +11498,6 @@ print_insn (bfd_vma pc, disassemble_info *info) return 1; } - op = 0; - if (*codep == 0x0f) { unsigned char threebyte; @@ -10449,12 +11563,13 @@ print_insn (bfd_vma pc, disassemble_info *info) modrm.rm = *codep & 7; } - need_vex = 0; - need_vex_reg = 0; - vex_w_done = 0; + need_vex = 0; + need_vex_reg = 0; + vex_w_done = 0; if (dp->name == NULL && dp->op[0].bytemode == FLOATCODE) { + get_sib (info); dofloat (sizeflag); } else @@ -10462,6 +11577,7 @@ print_insn (bfd_vma pc, disassemble_info *info) dp = get_valid_dis386 (dp, info); if (dp != NULL && putop (dp->name, sizeflag) == 0) { + get_sib (info); for (i = 0; i < MAX_OPERANDS; ++i) { obufp = op_out[i]; @@ -10490,23 +11606,23 @@ print_insn (bfd_vma pc, disassemble_info *info) } } - /* Check if the REX prefix used. */ + /* Check if the REX prefix is used. */ if (rex_ignored == 0 && (rex ^ rex_used) == 0) all_prefixes[last_rex_prefix] = 0; - /* Check if the SEG prefix used. */ + /* Check if the SEG prefix is used. */ if ((prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS | PREFIX_ES | PREFIX_FS | PREFIX_GS)) != 0 && (used_prefixes & seg_prefix (all_prefixes[last_seg_prefix])) != 0) all_prefixes[last_seg_prefix] = 0; - /* Check if the ADDR prefix used. */ + /* Check if the ADDR prefix is used. */ if ((prefixes & PREFIX_ADDR) != 0 && (used_prefixes & PREFIX_ADDR) != 0) all_prefixes[last_addr_prefix] = 0; - /* Check if the DATA prefix used. */ + /* Check if the DATA prefix is used. */ if ((prefixes & PREFIX_DATA) != 0 && (used_prefixes & PREFIX_DATA) != 0) all_prefixes[last_data_prefix] = 0; @@ -10765,7 +11881,7 @@ static const struct dis386 float_reg[][8] = { { "fld", { STi } }, { "fxch", { STi } }, { FGRPd9_2 }, - { "(bad)", { XX } }, + { Bad_Opcode }, { FGRPd9_4 }, { FGRPd9_5 }, { FGRPd9_6 }, @@ -10777,10 +11893,10 @@ static const struct dis386 float_reg[][8] = { { "fcmove", { ST, STi } }, { "fcmovbe",{ ST, STi } }, { "fcmovu", { ST, STi } }, - { "(bad)", { XX } }, + { Bad_Opcode }, { FGRPda_5 }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, }, /* db */ { @@ -10791,14 +11907,14 @@ static const struct dis386 float_reg[][8] = { { FGRPdb_4 }, { "fucomi", { ST, STi } }, { "fcomi", { ST, STi } }, - { "(bad)", { XX } }, + { Bad_Opcode }, }, /* dc */ { { "fadd", { STi, ST } }, { "fmul", { STi, ST } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, { "fsub!M", { STi, ST } }, { "fsubM", { STi, ST } }, { "fdiv!M", { STi, ST } }, @@ -10807,19 +11923,19 @@ static const struct dis386 float_reg[][8] = { /* dd */ { { "ffree", { STi } }, - { "(bad)", { XX } }, + { Bad_Opcode }, { "fst", { STi } }, { "fstp", { STi } }, { "fucom", { STi } }, { "fucomp", { STi } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, }, /* de */ { { "faddp", { STi, ST } }, { "fmulp", { STi, ST } }, - { "(bad)", { XX } }, + { Bad_Opcode }, { FGRPde_3 }, { "fsub!Mp", { STi, ST } }, { "fsubMp", { STi, ST } }, @@ -10829,13 +11945,13 @@ static const struct dis386 float_reg[][8] = { /* df */ { { "ffreep", { STi } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, { FGRPdf_4 }, { "fucomip", { ST, STi } }, { "fcomip", { ST, STi } }, - { "(bad)", { XX } }, + { Bad_Opcode }, }, }; @@ -11188,9 +12304,9 @@ case_L: used_prefixes |= (prefixes & PREFIX_DATA); break; case 'T': - if (intel_syntax) - break; - if (address_mode == mode_64bit && (sizeflag & DFLAG)) + if (!intel_syntax + && address_mode == mode_64bit + && ((sizeflag & DFLAG) || (rex & REX_W))) { *obufp++ = 'q'; break; @@ -11198,7 +12314,16 @@ case_L: /* Fall through. */ case 'P': if (intel_syntax) - break; + { + if ((rex & REX_W) == 0 + && (prefixes & PREFIX_DATA)) + { + if ((sizeflag & DFLAG) == 0) + *obufp++ = 'w'; + used_prefixes |= (prefixes & PREFIX_DATA); + } + break; + } if ((prefixes & PREFIX_DATA) || (rex & REX_W) || (sizeflag & SUFFIX_ALWAYS)) @@ -11219,7 +12344,8 @@ case_L: case 'U': if (intel_syntax) break; - if (address_mode == mode_64bit && (sizeflag & DFLAG)) + if (address_mode == mode_64bit + && ((sizeflag & DFLAG) || (rex & REX_W))) { if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS)) *obufp++ = 'q'; @@ -11291,7 +12417,8 @@ case_Q: { if (intel_syntax) break; - if (address_mode == mode_64bit && (sizeflag & DFLAG)) + if (address_mode == mode_64bit + && ((sizeflag & DFLAG) || (rex & REX_W))) { if (sizeflag & SUFFIX_ALWAYS) *obufp++ = 'q'; @@ -11438,14 +12565,20 @@ case_S: } else { - if (l != 1 || len != 2 || last[0] != 'X') + if (l != 1 + || len != 2 + || (last[0] != 'X' + && last[0] != 'L')) { SAVE_LAST (*p); break; } if (!need_vex) abort (); - *obufp++ = vex.w ? 'd': 's'; + if (last[0] == 'X') + *obufp++ = vex.w ? 'd': 's'; + else + *obufp++ = vex.w ? 'q': 'd'; } break; } @@ -11621,7 +12754,7 @@ intel_operand_size (int bytemode, int sizeflag) oappend ("WORD PTR "); break; case stack_v_mode: - if (address_mode == mode_64bit && (sizeflag & DFLAG)) + if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W))) { oappend ("QWORD PTR "); break; @@ -11657,11 +12790,15 @@ intel_operand_size (int bytemode, int sizeflag) used_prefixes |= (prefixes & PREFIX_DATA); break; case d_mode: + case d_scalar_mode: + case d_scalar_swap_mode: case d_swap_mode: case dqd_mode: oappend ("DWORD PTR "); break; case q_mode: + case q_scalar_mode: + case q_scalar_swap_mode: case q_swap_mode: oappend ("QWORD PTR "); break; @@ -11719,6 +12856,94 @@ intel_operand_size (int bytemode, int sizeflag) abort (); } break; + case xmm_mb_mode: + if (!need_vex) + abort (); + + switch (vex.length) + { + case 128: + case 256: + oappend ("BYTE PTR "); + break; + default: + abort (); + } + break; + case xmm_mw_mode: + if (!need_vex) + abort (); + + switch (vex.length) + { + case 128: + case 256: + oappend ("WORD PTR "); + break; + default: + abort (); + } + break; + case xmm_md_mode: + if (!need_vex) + abort (); + + switch (vex.length) + { + case 128: + case 256: + oappend ("DWORD PTR "); + break; + default: + abort (); + } + break; + case xmm_mq_mode: + if (!need_vex) + abort (); + + switch (vex.length) + { + case 128: + case 256: + oappend ("QWORD PTR "); + break; + default: + abort (); + } + break; + case xmmdw_mode: + if (!need_vex) + abort (); + + switch (vex.length) + { + case 128: + oappend ("WORD PTR "); + break; + case 256: + oappend ("DWORD PTR "); + break; + default: + abort (); + } + break; + case xmmqd_mode: + if (!need_vex) + abort (); + + switch (vex.length) + { + case 128: + oappend ("DWORD PTR "); + break; + case 256: + oappend ("QWORD PTR "); + break; + default: + abort (); + } + break; case ymmq_mode: if (!need_vex) abort (); @@ -11735,10 +12960,27 @@ intel_operand_size (int bytemode, int sizeflag) abort (); } break; + case ymmxmm_mode: + if (!need_vex) + abort (); + + switch (vex.length) + { + case 128: + case 256: + oappend ("XMMWORD PTR "); + break; + default: + abort (); + } + break; case o_mode: oappend ("OWORD PTR "); break; case vex_w_dq_mode: + case vex_scalar_w_dq_mode: + case vex_vsib_d_w_dq_mode: + case vex_vsib_q_w_dq_mode: if (!need_vex) abort (); @@ -11789,7 +13031,7 @@ OP_E_register (int bytemode, int sizeflag) names = address_mode == mode_64bit ? names64 : names32; break; case stack_v_mode: - if (address_mode == mode_64bit && (sizeflag & DFLAG)) + if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W))) { names = names64; break; @@ -11807,7 +13049,7 @@ OP_E_register (int bytemode, int sizeflag) names = names64; else { - if ((sizeflag & DFLAG) + if ((sizeflag & DFLAG) || (bytemode != v_mode && bytemode != v_swap_mode)) names = names32; @@ -11846,8 +13088,10 @@ OP_E_memory (int bytemode, int sizeflag) int haveindex; int needindex; int base, rbase; - int index = 0; + int vindex = 0; int scale = 0; + const char **indexes64 = names64; + const char **indexes32 = names32; havesib = 0; havebase = 1; @@ -11857,14 +13101,39 @@ OP_E_memory (int bytemode, int sizeflag) if (base == 4) { havesib = 1; - FETCH_DATA (the_info, codep + 1); - index = (*codep >> 3) & 7; - scale = (*codep >> 6) & 3; - base = *codep & 7; + vindex = sib.index; USED_REX (REX_X); if (rex & REX_X) - index += 8; - haveindex = index != 4; + vindex += 8; + switch (bytemode) + { + case vex_vsib_d_w_dq_mode: + case vex_vsib_q_w_dq_mode: + if (!need_vex) + abort (); + + haveindex = 1; + switch (vex.length) + { + case 128: + indexes64 = indexes32 = names_xmm; + break; + case 256: + if (!vex.w || bytemode == vex_vsib_q_w_dq_mode) + indexes64 = indexes32 = names_ymm; + else + indexes64 = indexes32 = names_xmm; + break; + default: + abort (); + } + break; + default: + haveindex = vindex != 4; + break; + } + scale = sib.scale; + base = sib.base; codep++; } rbase = base + add; @@ -11946,11 +13215,11 @@ OP_E_memory (int bytemode, int sizeflag) *obufp = '\0'; } if (haveindex) - oappend (address_mode == mode_64bit + oappend (address_mode == mode_64bit && (sizeflag & AFLAG) - ? names64[index] : names32[index]); + ? indexes64[vindex] : indexes32[vindex]); else - oappend (address_mode == mode_64bit + oappend (address_mode == mode_64bit && (sizeflag & AFLAG) ? index64 : index32); @@ -12080,7 +13349,7 @@ OP_E_memory (int bytemode, int sizeflag) } static void -OP_E_extended (int bytemode, int sizeflag) +OP_E (int bytemode, int sizeflag) { /* Skip mod/rm byte. */ MODRM_CHECK; @@ -12089,16 +13358,9 @@ OP_E_extended (int bytemode, int sizeflag) if (modrm.mod == 3) OP_E_register (bytemode, sizeflag); else - OP_E_memory (bytemode, sizeflag); -} - -static void -OP_E (int bytemode, int sizeflag) -{ - OP_E_extended (bytemode, sizeflag); + OP_E_memory (bytemode, sizeflag); } - static void OP_G (int bytemode, int sizeflag) { @@ -12240,6 +13502,15 @@ OP_REG (int code, int sizeflag) { const char *s; int add; + + switch (code) + { + case es_reg: case ss_reg: case cs_reg: + case ds_reg: case fs_reg: case gs_reg: + oappend (names_seg[code - es_reg]); + return; + } + USED_REX (REX_B); if (rex & REX_B) add = 8; @@ -12252,10 +13523,6 @@ OP_REG (int code, int sizeflag) case sp_reg: case bp_reg: case si_reg: case di_reg: s = names16[code - ax_reg + add]; break; - case es_reg: case ss_reg: case cs_reg: - case ds_reg: case fs_reg: case gs_reg: - s = names_seg[code - es_reg + add]; - break; case al_reg: case ah_reg: case cl_reg: case ch_reg: case dl_reg: case dh_reg: case bl_reg: case bh_reg: USED_REX (0); @@ -12266,7 +13533,8 @@ OP_REG (int code, int sizeflag) break; case rAX_reg: case rCX_reg: case rDX_reg: case rBX_reg: case rSP_reg: case rBP_reg: case rSI_reg: case rDI_reg: - if (address_mode == mode_64bit && (sizeflag & DFLAG)) + if (address_mode == mode_64bit + && ((sizeflag & DFLAG) || (rex & REX_W))) { s = names64[code - rAX_reg + add]; break; @@ -12469,43 +13737,44 @@ static void OP_sI (int bytemode, int sizeflag) { bfd_signed_vma op; - bfd_signed_vma mask = -1; switch (bytemode) { case b_mode: + case b_T_mode: FETCH_DATA (the_info, codep + 1); op = *codep++; if ((op & 0x80) != 0) op -= 0x100; - mask = 0xffffffff; - break; - case v_mode: - USED_REX (REX_W); - if (rex & REX_W) - op = get32s (); - else + if (bytemode == b_T_mode) { - if (sizeflag & DFLAG) + if (address_mode != mode_64bit + || !((sizeflag & DFLAG) || (rex & REX_W))) { - op = get32s (); - mask = 0xffffffff; - } - else + /* The operand-size prefix is overridden by a REX prefix. */ + if ((sizeflag & DFLAG) || (rex & REX_W)) + op &= 0xffffffff; + else + op &= 0xffff; + } + } + else + { + if (!(rex & REX_W)) { - mask = 0xffffffff; - op = get16 (); - if ((op & 0x8000) != 0) - op -= 0x10000; + if (sizeflag & DFLAG) + op &= 0xffffffff; + else + op &= 0xffff; } - used_prefixes |= (prefixes & PREFIX_DATA); } break; - case w_mode: - op = get16 (); - mask = 0xffffffff; - if ((op & 0x8000) != 0) - op -= 0x10000; + case v_mode: + /* The operand-size prefix is overridden by a REX prefix. */ + if ((sizeflag & DFLAG) || (rex & REX_W)) + op = get32s (); + else + op = get16 (); break; default: oappend (INTERNAL_DISASSEMBLER_ERROR); @@ -12557,7 +13826,7 @@ OP_J (int bytemode, int sizeflag) oappend (INTERNAL_DISASSEMBLER_ERROR); return; } - disp = ((start_pc + codep - start_codep + disp) & mask) | segment; + disp = ((start_pc + (codep - start_codep) + disp) & mask) | segment; set_op (disp, 0); print_operand_value (scratchbuf, 1, disp); oappend (scratchbuf); @@ -12787,53 +14056,61 @@ OP_R (int bytemode, int sizeflag) static void OP_MMX (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED) { + int reg = modrm.reg; + const char **names; + used_prefixes |= (prefixes & PREFIX_DATA); if (prefixes & PREFIX_DATA) { - int add; + names = names_xmm; USED_REX (REX_R); if (rex & REX_R) - add = 8; - else - add = 0; - sprintf (scratchbuf, "%%xmm%d", modrm.reg + add); + reg += 8; } else - sprintf (scratchbuf, "%%mm%d", modrm.reg); - oappend (scratchbuf + intel_syntax); + names = names_mm; + oappend (names[reg]); } static void OP_XMM (int bytemode, int sizeflag ATTRIBUTE_UNUSED) { - int add; + int reg = modrm.reg; + const char **names; + USED_REX (REX_R); if (rex & REX_R) - add = 8; - else - add = 0; - if (need_vex && bytemode != xmm_mode) + reg += 8; + if (need_vex + && bytemode != xmm_mode + && bytemode != scalar_mode) { switch (vex.length) { case 128: - sprintf (scratchbuf, "%%xmm%d", modrm.reg + add); + names = names_xmm; break; case 256: - sprintf (scratchbuf, "%%ymm%d", modrm.reg + add); + if (vex.w || bytemode != vex_vsib_q_w_dq_mode) + names = names_ymm; + else + names = names_xmm; break; default: abort (); } } else - sprintf (scratchbuf, "%%xmm%d", modrm.reg + add); - oappend (scratchbuf + intel_syntax); + names = names_xmm; + oappend (names[reg]); } static void OP_EM (int bytemode, int sizeflag) { + int reg; + const char **names; + if (modrm.mod != 3) { if (intel_syntax @@ -12853,20 +14130,17 @@ OP_EM (int bytemode, int sizeflag) MODRM_CHECK; codep++; used_prefixes |= (prefixes & PREFIX_DATA); + reg = modrm.rm; if (prefixes & PREFIX_DATA) { - int add; - + names = names_xmm; USED_REX (REX_B); if (rex & REX_B) - add = 8; - else - add = 0; - sprintf (scratchbuf, "%%xmm%d", modrm.rm + add); + reg += 8; } else - sprintf (scratchbuf, "%%mm%d", modrm.rm); - oappend (scratchbuf + intel_syntax); + names = names_mm; + oappend (names[reg]); } /* cvt* are the only instructions in sse2 which have @@ -12892,22 +14166,21 @@ OP_EMC (int bytemode, int sizeflag) MODRM_CHECK; codep++; used_prefixes |= (prefixes & PREFIX_DATA); - sprintf (scratchbuf, "%%mm%d", modrm.rm); - oappend (scratchbuf + intel_syntax); + oappend (names_mm[modrm.rm]); } static void OP_MXC (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED) { used_prefixes |= (prefixes & PREFIX_DATA); - sprintf (scratchbuf, "%%mm%d", modrm.reg); - oappend (scratchbuf + intel_syntax); + oappend (names_mm[modrm.reg]); } static void OP_EX (int bytemode, int sizeflag) { - int add; + int reg; + const char **names; /* Skip mod/rm byte. */ MODRM_CHECK; @@ -12919,37 +14192,49 @@ OP_EX (int bytemode, int sizeflag) return; } + reg = modrm.rm; USED_REX (REX_B); if (rex & REX_B) - add = 8; - else - add = 0; + reg += 8; if ((sizeflag & SUFFIX_ALWAYS) && (bytemode == x_swap_mode || bytemode == d_swap_mode - || bytemode == q_swap_mode)) + || bytemode == d_scalar_swap_mode + || bytemode == q_swap_mode + || bytemode == q_scalar_swap_mode)) swap_operand (); if (need_vex && bytemode != xmm_mode - && bytemode != xmmq_mode) + && bytemode != xmmdw_mode + && bytemode != xmmqd_mode + && bytemode != xmm_mb_mode + && bytemode != xmm_mw_mode + && bytemode != xmm_md_mode + && bytemode != xmm_mq_mode + && bytemode != xmmq_mode + && bytemode != d_scalar_mode + && bytemode != d_scalar_swap_mode + && bytemode != q_scalar_mode + && bytemode != q_scalar_swap_mode + && bytemode != vex_scalar_w_dq_mode) { switch (vex.length) { case 128: - sprintf (scratchbuf, "%%xmm%d", modrm.rm + add); + names = names_xmm; break; case 256: - sprintf (scratchbuf, "%%ymm%d", modrm.rm + add); + names = names_ymm; break; default: abort (); } } else - sprintf (scratchbuf, "%%xmm%d", modrm.rm + add); - oappend (scratchbuf + intel_syntax); + names = names_xmm; + oappend (names[reg]); } static void @@ -13231,6 +14516,57 @@ REP_Fixup (int bytemode, int sizeflag) } } +/* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as + "xacquire"/"xrelease" for memory operand if there is a LOCK prefix. + */ + +static void +HLE_Fixup1 (int bytemode, int sizeflag) +{ + if (modrm.mod != 3 + && (prefixes & PREFIX_LOCK) != 0) + { + if (prefixes & PREFIX_REPZ) + all_prefixes[last_repz_prefix] = XRELEASE_PREFIX; + if (prefixes & PREFIX_REPNZ) + all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX; + } + + OP_E (bytemode, sizeflag); +} + +/* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as + "xacquire"/"xrelease" for memory operand. No check for LOCK prefix. + */ + +static void +HLE_Fixup2 (int bytemode, int sizeflag) +{ + if (modrm.mod != 3) + { + if (prefixes & PREFIX_REPZ) + all_prefixes[last_repz_prefix] = XRELEASE_PREFIX; + if (prefixes & PREFIX_REPNZ) + all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX; + } + + OP_E (bytemode, sizeflag); +} + +/* Similar to OP_E. But the 0xf3 prefixes should be displayed as + "xrelease" for memory operand. No check for LOCK prefix. */ + +static void +HLE_Fixup3 (int bytemode, int sizeflag) +{ + if (modrm.mod != 3 + && last_repz_prefix > last_repnz_prefix + && (prefixes & PREFIX_REPZ) != 0) + all_prefixes[last_repz_prefix] = XRELEASE_PREFIX; + + OP_E (bytemode, sizeflag); +} + static void CMPXCHG8B_Fixup (int bytemode, int sizeflag) { @@ -13242,29 +14578,39 @@ CMPXCHG8B_Fixup (int bytemode, int sizeflag) mnemonicendp = stpcpy (p, "16b"); bytemode = o_mode; } + else if ((prefixes & PREFIX_LOCK) != 0) + { + if (prefixes & PREFIX_REPZ) + all_prefixes[last_repz_prefix] = XRELEASE_PREFIX; + if (prefixes & PREFIX_REPNZ) + all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX; + } + OP_M (bytemode, sizeflag); } static void XMM_Fixup (int reg, int sizeflag ATTRIBUTE_UNUSED) { + const char **names; + if (need_vex) { switch (vex.length) { case 128: - sprintf (scratchbuf, "%%xmm%d", reg); + names = names_xmm; break; case 256: - sprintf (scratchbuf, "%%ymm%d", reg); + names = names_ymm; break; default: abort (); } } else - sprintf (scratchbuf, "%%xmm%d", reg); - oappend (scratchbuf + intel_syntax); + names = names_xmm; + oappend (names[reg]); } static void @@ -13288,7 +14634,7 @@ CRC32_Fixup (int bytemode, int sizeflag) USED_REX (REX_W); if (rex & REX_W) *p++ = 'q'; - else + else { if (sizeflag & DFLAG) *p++ = 'l'; @@ -13338,18 +14684,44 @@ skip: OP_E (bytemode, sizeflag); } +static void +FXSAVE_Fixup (int bytemode, int sizeflag) +{ + /* Add proper suffix to "fxsave" and "fxrstor". */ + USED_REX (REX_W); + if (rex & REX_W) + { + char *p = mnemonicendp; + *p++ = '6'; + *p++ = '4'; + *p = '\0'; + mnemonicendp = p; + } + OP_M (bytemode, sizeflag); +} + /* Display the destination register operand for instructions with VEX. */ static void OP_VEX (int bytemode, int sizeflag ATTRIBUTE_UNUSED) { + int reg; + const char **names; + if (!need_vex) abort (); if (!need_vex_reg) return; + reg = vex.register_specifier; + if (bytemode == vex_scalar_mode) + { + oappend (names_xmm[reg]); + return; + } + switch (vex.length) { case 128: @@ -13357,96 +14729,123 @@ OP_VEX (int bytemode, int sizeflag ATTRIBUTE_UNUSED) { case vex_mode: case vex128_mode: + case vex_vsib_q_w_dq_mode: + names = names_xmm; + break; + case dq_mode: + if (vex.w) + names = names64; + else + names = names32; break; default: abort (); return; } - - sprintf (scratchbuf, "%%xmm%d", vex.register_specifier); break; case 256: switch (bytemode) { case vex_mode: case vex256_mode: + names = names_ymm; + break; + case vex_vsib_q_w_dq_mode: + names = vex.w ? names_ymm : names_xmm; break; default: abort (); return; } - - sprintf (scratchbuf, "%%ymm%d", vex.register_specifier); break; default: abort (); break; } - oappend (scratchbuf + intel_syntax); + oappend (names[reg]); } /* Get the VEX immediate byte without moving codep. */ static unsigned char -get_vex_imm8 (int sizeflag) +get_vex_imm8 (int sizeflag, int opnum) { int bytes_before_imm = 0; - /* Skip mod/rm byte. */ - MODRM_CHECK; - codep++; - if (modrm.mod != 3) { /* There are SIB/displacement bytes. */ if ((sizeflag & AFLAG) || address_mode == mode_64bit) - { + { /* 32/64 bit address mode */ - int base = modrm.rm; + int base = modrm.rm; /* Check SIB byte. */ - if (base == 4) - { - FETCH_DATA (the_info, codep + 1); - base = *codep & 7; - bytes_before_imm++; - } - - switch (modrm.mod) - { - case 0: - /* When modrm.rm == 5 or modrm.rm == 4 and base in - SIB == 5, there is a 4 byte displacement. */ - if (base != 5) - /* No displacement. */ - break; - case 2: - /* 4 byte displacement. */ - bytes_before_imm += 4; - break; - case 1: - /* 1 byte displacement. */ - bytes_before_imm++; - break; - } - } + if (base == 4) + { + FETCH_DATA (the_info, codep + 1); + base = *codep & 7; + /* When decoding the third source, don't increase + bytes_before_imm as this has already been incremented + by one in OP_E_memory while decoding the second + source operand. */ + if (opnum == 0) + bytes_before_imm++; + } + + /* Don't increase bytes_before_imm when decoding the third source, + it has already been incremented by OP_E_memory while decoding + the second source operand. */ + if (opnum == 0) + { + switch (modrm.mod) + { + case 0: + /* When modrm.rm == 5 or modrm.rm == 4 and base in + SIB == 5, there is a 4 byte displacement. */ + if (base != 5) + /* No displacement. */ + break; + case 2: + /* 4 byte displacement. */ + bytes_before_imm += 4; + break; + case 1: + /* 1 byte displacement. */ + bytes_before_imm++; + break; + } + } + } else - { /* 16 bit address mode */ - switch (modrm.mod) - { - case 0: - /* When modrm.rm == 6, there is a 2 byte displacement. */ - if (modrm.rm != 6) - /* No displacement. */ - break; - case 2: - /* 2 byte displacement. */ - bytes_before_imm += 2; - break; - case 1: - /* 1 byte displacement. */ - bytes_before_imm++; - break; + { + /* 16 bit address mode */ + /* Don't increase bytes_before_imm when decoding the third source, + it has already been incremented by OP_E_memory while decoding + the second source operand. */ + if (opnum == 0) + { + switch (modrm.mod) + { + case 0: + /* When modrm.rm == 6, there is a 2 byte displacement. */ + if (modrm.rm != 6) + /* No displacement. */ + break; + case 2: + /* 2 byte displacement. */ + bytes_before_imm += 2; + break; + case 1: + /* 1 byte displacement: when decoding the third source, + don't increase bytes_before_imm as this has already + been incremented by one in OP_E_memory while decoding + the second source operand. */ + if (opnum == 0) + bytes_before_imm++; + + break; + } } } } @@ -13458,6 +14857,8 @@ get_vex_imm8 (int sizeflag) static void OP_EX_VexReg (int bytemode, int sizeflag, int reg) { + const char **names; + if (reg == -1 && modrm.mod != 3) { OP_E_memory (bytemode, sizeflag); @@ -13479,15 +14880,104 @@ OP_EX_VexReg (int bytemode, int sizeflag, int reg) switch (vex.length) { case 128: - sprintf (scratchbuf, "%%xmm%d", reg); + names = names_xmm; break; case 256: - sprintf (scratchbuf, "%%ymm%d", reg); + names = names_ymm; break; default: abort (); } - oappend (scratchbuf + intel_syntax); + oappend (names[reg]); +} + +static void +OP_EX_VexImmW (int bytemode, int sizeflag) +{ + int reg = -1; + static unsigned char vex_imm8; + + if (vex_w_done == 0) + { + vex_w_done = 1; + + /* Skip mod/rm byte. */ + MODRM_CHECK; + codep++; + + vex_imm8 = get_vex_imm8 (sizeflag, 0); + + if (vex.w) + reg = vex_imm8 >> 4; + + OP_EX_VexReg (bytemode, sizeflag, reg); + } + else if (vex_w_done == 1) + { + vex_w_done = 2; + + if (!vex.w) + reg = vex_imm8 >> 4; + + OP_EX_VexReg (bytemode, sizeflag, reg); + } + else + { + /* Output the imm8 directly. */ + scratchbuf[0] = '$'; + print_operand_value (scratchbuf + 1, 1, vex_imm8 & 0xf); + oappend (scratchbuf + intel_syntax); + scratchbuf[0] = '\0'; + codep++; + } +} + +static void +OP_Vex_2src (int bytemode, int sizeflag) +{ + if (modrm.mod == 3) + { + int reg = modrm.rm; + USED_REX (REX_B); + if (rex & REX_B) + reg += 8; + oappend (names_xmm[reg]); + } + else + { + if (intel_syntax + && (bytemode == v_mode || bytemode == v_swap_mode)) + { + bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode; + used_prefixes |= (prefixes & PREFIX_DATA); + } + OP_E (bytemode, sizeflag); + } +} + +static void +OP_Vex_2src_1 (int bytemode, int sizeflag) +{ + if (modrm.mod == 3) + { + /* Skip mod/rm byte. */ + MODRM_CHECK; + codep++; + } + + if (vex.w) + oappend (names_xmm[vex.register_specifier]); + else + OP_Vex_2src (bytemode, sizeflag); +} + +static void +OP_Vex_2src_2 (int bytemode, int sizeflag) +{ + if (vex.w) + OP_Vex_2src (bytemode, sizeflag); + else + oappend (names_xmm[vex.register_specifier]); } static void @@ -13498,13 +14988,18 @@ OP_EX_VexW (int bytemode, int sizeflag) if (!vex_w_done) { vex_w_done = 1; + + /* Skip mod/rm byte. */ + MODRM_CHECK; + codep++; + if (vex.w) - reg = get_vex_imm8 (sizeflag) >> 4; + reg = get_vex_imm8 (sizeflag, 0) >> 4; } else { if (!vex.w) - reg = get_vex_imm8 (sizeflag) >> 4; + reg = get_vex_imm8 (sizeflag, 1) >> 4; } OP_EX_VexReg (bytemode, sizeflag, reg); @@ -13524,6 +15019,8 @@ static void OP_REG_VexI4 (int bytemode, int sizeflag ATTRIBUTE_UNUSED) { int reg; + const char **names; + FETCH_DATA (the_info, codep + 1); reg = *codep++; @@ -13540,15 +15037,15 @@ OP_REG_VexI4 (int bytemode, int sizeflag ATTRIBUTE_UNUSED) switch (vex.length) { case 128: - sprintf (scratchbuf, "%%xmm%d", reg); + names = names_xmm; break; case 256: - sprintf (scratchbuf, "%%ymm%d", reg); + names = names_ymm; break; default: abort (); } - oappend (scratchbuf + intel_syntax); + oappend (names[reg]); } static void @@ -13689,7 +15186,7 @@ PCLMUL_Fixup (int bytemode ATTRIBUTE_UNUSED, break; default: break; - } + } if (pclmul_type < ARRAY_SIZE (pclmul_op)) { char suffix [4]; @@ -13761,10 +15258,8 @@ OP_LWPCB_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED) if (vex.w) names = names64; - else if (vex.length == 256) - names = names32; else - names = names16; + names = names32; reg = modrm.rm; USED_REX (REX_B); @@ -13781,20 +15276,8 @@ OP_LWP_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED) if (vex.w) names = names64; - else if (vex.length == 256) - names = names32; else - names = names16; + names = names32; oappend (names[vex.register_specifier]); } - -static void -OP_LWP_I (int bytemode ATTRIBUTE_UNUSED, int sizeflag) -{ - if (vex.w || vex.length == 256) - OP_I (q_mode, sizeflag); - else - OP_I (w_mode, sizeflag); -} -