static void NOP_Fixup1 (int, int);
static void NOP_Fixup2 (int, int);
static void OP_3DNowSuffix (int, int);
-static void OP_SIMD_Suffix (int, int);
+static void CMP_Fixup (int, int);
static void BadOp (void);
static void REP_Fixup (int, int);
static void CMPXCHG8B_Fixup (int, int);
#define Md { OP_M, d_mode }
#define Mp { OP_M, f_mode } /* 32 or 48 bit memory operand for LDS, LES etc */
#define Mq { OP_M, q_mode }
+#define Mx { OP_M, x_mode }
#define Gb { OP_G, b_mode }
#define Gv { OP_G, v_mode }
#define Gd { OP_G, d_mode }
#define EMCq { OP_EMC, q_mode }
#define MXC { OP_MXC, 0 }
#define OPSUF { OP_3DNowSuffix, 0 }
-#define OPSIMD { OP_SIMD_Suffix, 0 }
+#define CMP { CMP_Fixup, 0 }
#define XMM0 { XMM_Fixup, 0 }
/* Used handle "rep" prefix for string instructions. */
#define AFLAG 2
#define DFLAG 1
-#define b_mode 1 /* byte operand */
-#define v_mode 2 /* operand size depends on prefixes */
-#define w_mode 3 /* word operand */
-#define d_mode 4 /* double word operand */
-#define q_mode 5 /* quad word operand */
-#define t_mode 6 /* ten-byte operand */
-#define x_mode 7 /* 16-byte XMM operand */
-#define m_mode 8 /* d_mode in 32bit, q_mode in 64bit mode. */
-#define cond_jump_mode 9
-#define loop_jcxz_mode 10
-#define dq_mode 11 /* operand size depends on REX prefixes. */
-#define dqw_mode 12 /* registers like dq_mode, memory like w_mode. */
-#define f_mode 13 /* 4- or 6-byte pointer operand */
-#define const_1_mode 14
-#define stack_v_mode 15 /* v_mode for stack-related opcodes. */
-#define z_mode 16 /* non-quad operand size depends on prefixes */
-#define o_mode 17 /* 16-byte operand */
-#define dqb_mode 18 /* registers like dq_mode, memory like b_mode. */
-#define dqd_mode 19 /* registers like dq_mode, memory like d_mode. */
-
-/* Flags that are OR'ed into the bytemode field to pass extra information. */
-#define DREX_OC1 0x4000 /* OC1 bit set */
-#define DREX_NO_OC0 0x2000 /* OC0 bit not used */
-#define DREX_MASK 0x6000 /* mask to delete */
-
-#define es_reg 100
-#define cs_reg 101
-#define ss_reg 102
-#define ds_reg 103
-#define fs_reg 104
-#define gs_reg 105
-
-#define eAX_reg 108
-#define eCX_reg 109
-#define eDX_reg 110
-#define eBX_reg 111
-#define eSP_reg 112
-#define eBP_reg 113
-#define eSI_reg 114
-#define eDI_reg 115
-
-#define al_reg 116
-#define cl_reg 117
-#define dl_reg 118
-#define bl_reg 119
-#define ah_reg 120
-#define ch_reg 121
-#define dh_reg 122
-#define bh_reg 123
-
-#define ax_reg 124
-#define cx_reg 125
-#define dx_reg 126
-#define bx_reg 127
-#define sp_reg 128
-#define bp_reg 129
-#define si_reg 130
-#define di_reg 131
-
-#define rAX_reg 132
-#define rCX_reg 133
-#define rDX_reg 134
-#define rBX_reg 135
-#define rSP_reg 136
-#define rBP_reg 137
-#define rSI_reg 138
-#define rDI_reg 139
-
-#define z_mode_ax_reg 149
-#define indir_dx_reg 150
-
-#define FLOATCODE 1
-#define USE_GROUPS 2
-#define USE_PREFIX_TABLE 3
-#define USE_X86_64_TABLE 4
-#define USE_3BYTE_TABLE 5
-#define USE_OPC_EXT_TABLE 6
-#define USE_OPC_EXT_RM_TABLE 7
-
-#define FLOAT NULL, { { NULL, FLOATCODE } }
+/* byte operand */
+#define b_mode 1
+/* operand size depends on prefixes */
+#define v_mode (b_mode + 1)
+/* word operand */
+#define w_mode (v_mode + 1)
+/* double word operand */
+#define d_mode (w_mode + 1)
+/* quad word operand */
+#define q_mode (d_mode + 1)
+/* ten-byte operand */
+#define t_mode (q_mode + 1)
+/* 16-byte XMM operand */
+#define x_mode (t_mode + 1)
+/* d_mode in 32bit, q_mode in 64bit mode. */
+#define m_mode (x_mode + 1)
+#define cond_jump_mode (m_mode + 1)
+#define loop_jcxz_mode (cond_jump_mode + 1)
+/* operand size depends on REX prefixes. */
+#define dq_mode (loop_jcxz_mode + 1)
+/* registers like dq_mode, memory like w_mode. */
+#define dqw_mode (dq_mode + 1)
+/* 4- or 6-byte pointer operand */
+#define f_mode (dqw_mode + 1)
+#define const_1_mode (f_mode + 1)
+/* v_mode for stack-related opcodes. */
+#define stack_v_mode (const_1_mode + 1)
+/* non-quad operand size depends on prefixes */
+#define z_mode (stack_v_mode + 1)
+/* 16-byte operand */
+#define o_mode (z_mode + 1)
+/* registers like dq_mode, memory like b_mode. */
+#define dqb_mode (o_mode + 1)
+/* registers like dq_mode, memory like d_mode. */
+#define dqd_mode (dqb_mode + 1)
+
+#define es_reg (dqd_mode + 1)
+#define cs_reg (es_reg + 1)
+#define ss_reg (cs_reg + 1)
+#define ds_reg (ss_reg + 1)
+#define fs_reg (ds_reg + 1)
+#define gs_reg (fs_reg + 1)
+
+#define eAX_reg (gs_reg + 1)
+#define eCX_reg (eAX_reg + 1)
+#define eDX_reg (eCX_reg + 1)
+#define eBX_reg (eDX_reg + 1)
+#define eSP_reg (eBX_reg + 1)
+#define eBP_reg (eSP_reg + 1)
+#define eSI_reg (eBP_reg + 1)
+#define eDI_reg (eSI_reg + 1)
+
+#define al_reg (eDI_reg + 1)
+#define cl_reg (al_reg + 1)
+#define dl_reg (cl_reg + 1)
+#define bl_reg (dl_reg + 1)
+#define ah_reg (bl_reg + 1)
+#define ch_reg (ah_reg + 1)
+#define dh_reg (ch_reg + 1)
+#define bh_reg (dh_reg + 1)
+
+#define ax_reg (bh_reg + 1)
+#define cx_reg (ax_reg + 1)
+#define dx_reg (cx_reg + 1)
+#define bx_reg (dx_reg + 1)
+#define sp_reg (bx_reg + 1)
+#define bp_reg (sp_reg + 1)
+#define si_reg (bp_reg + 1)
+#define di_reg (si_reg + 1)
+
+#define rAX_reg (di_reg + 1)
+#define rCX_reg (rAX_reg + 1)
+#define rDX_reg (rCX_reg + 1)
+#define rBX_reg (rDX_reg + 1)
+#define rSP_reg (rBX_reg + 1)
+#define rBP_reg (rSP_reg + 1)
+#define rSI_reg (rBP_reg + 1)
+#define rDI_reg (rSI_reg + 1)
+
+#define z_mode_ax_reg (rDI_reg + 1)
+#define indir_dx_reg (z_mode_ax_reg + 1)
+
+#define MAX_BYTEMODE indir_dx_reg
+
+/* Flags that are OR'ed into the bytemode field to pass extra
+ information. */
+#define DREX_OC1 0x10000 /* OC1 bit set */
+#define DREX_NO_OC0 0x20000 /* OC0 bit not used */
+#define DREX_MASK 0x40000 /* mask to delete */
+
+#if MAX_BYTEMODE >= DREX_OC1
+#error MAX_BYTEMODE must be less than DREX_OC1
+#endif
+
+#define FLOATCODE 1
+#define USE_REG_TABLE (FLOATCODE + 1)
+#define USE_MOD_TABLE (USE_REG_TABLE + 1)
+#define USE_RM_TABLE (USE_MOD_TABLE + 1)
+#define USE_PREFIX_TABLE (USE_RM_TABLE + 1)
+#define USE_X86_64_TABLE (USE_PREFIX_TABLE + 1)
+#define USE_3BYTE_TABLE (USE_X86_64_TABLE + 1)
+
+#define FLOAT NULL, { { NULL, FLOATCODE } }
#define DIS386(T, I) NULL, { { NULL, (T)}, { NULL, (I) } }
-#define GRP(I) DIS386 (USE_GROUPS, (I))
-#define PREGRP(I) DIS386 (USE_PREFIX_TABLE, (I))
+#define REG_TABLE(I) DIS386 (USE_REG_TABLE, (I))
+#define MOD_TABLE(I) DIS386 (USE_MOD_TABLE, (I))
+#define RM_TABLE(I) DIS386 (USE_RM_TABLE, (I))
+#define PREFIX_TABLE(I) DIS386 (USE_PREFIX_TABLE, (I))
#define X86_64_TABLE(I) DIS386 (USE_X86_64_TABLE, (I))
#define THREE_BYTE_TABLE(I) DIS386 (USE_3BYTE_TABLE, (I))
-#define OPC_EXT_TABLE(I) DIS386 (USE_OPC_EXT_TABLE, (I))
-#define OPC_EXT_RM_TABLE(I) DIS386 (USE_OPC_EXT_RM_TABLE, (I))
-
-#define GRP_80 0
-#define GRP_81 (GRP_80 + 1)
-#define GRP_82 (GRP_81 + 1)
-#define GRP_8F (GRP_82 + 1)
-#define GRP_C0 (GRP_8F + 1)
-#define GRP_C1 (GRP_C0 + 1)
-#define GRP_C6 (GRP_C1 + 1)
-#define GRP_C7 (GRP_C6 + 1)
-#define GRP_D0 (GRP_C7 + 1)
-#define GRP_D1 (GRP_D0 + 1)
-#define GRP_D2 (GRP_D1 + 1)
-#define GRP_D3 (GRP_D2 + 1)
-#define GRP_F6 (GRP_D3 + 1)
-#define GRP_F7 (GRP_F6 + 1)
-#define GRP_FE (GRP_F7 + 1)
-#define GRP_FF (GRP_FE + 1)
-#define GRP_0F00 (GRP_FF + 1)
-#define GRP_0F01 (GRP_0F00 + 1)
-#define GRP_0F0E (GRP_0F01 + 1)
-#define GRP_0F18 (GRP_0F0E + 1)
-#define GRP_0F71 (GRP_0F18 + 1)
-#define GRP_0F72 (GRP_0F71 + 1)
-#define GRP_0F73 (GRP_0F72 + 1)
-#define GRP_0FA6 (GRP_0F73 + 1)
-#define GRP_0FA7 (GRP_0FA6 + 1)
-#define GRP_0FAE (GRP_0FA7 + 1)
-#define GRP_0FBA (GRP_0FAE + 1)
-#define GRP_0FC7 (GRP_0FBA + 1)
-
-#define PREGRP_90 0
-#define PREGRP_0F10 (PREGRP_90 + 1)
-#define PREGRP_0F11 (PREGRP_0F10 + 1)
-#define PREGRP_0F12 (PREGRP_0F11 + 1)
-#define PREGRP_0F16 (PREGRP_0F12 + 1)
-#define PREGRP_0F2A (PREGRP_0F16 + 1)
-#define PREGRP_0F2B (PREGRP_0F2A + 1)
-#define PREGRP_0F2C (PREGRP_0F2B + 1)
-#define PREGRP_0F2D (PREGRP_0F2C + 1)
-#define PREGRP_0F2E (PREGRP_0F2D + 1)
-#define PREGRP_0F2F (PREGRP_0F2E + 1)
-#define PREGRP_0F51 (PREGRP_0F2F + 1)
-#define PREGRP_0F52 (PREGRP_0F51 + 1)
-#define PREGRP_0F53 (PREGRP_0F52 + 1)
-#define PREGRP_0F58 (PREGRP_0F53 + 1)
-#define PREGRP_0F59 (PREGRP_0F58 + 1)
-#define PREGRP_0F5A (PREGRP_0F59 + 1)
-#define PREGRP_0F5B (PREGRP_0F5A + 1)
-#define PREGRP_0F5C (PREGRP_0F5B + 1)
-#define PREGRP_0F5D (PREGRP_0F5C + 1)
-#define PREGRP_0F5E (PREGRP_0F5D + 1)
-#define PREGRP_0F5F (PREGRP_0F5E + 1)
-#define PREGRP_0F60 (PREGRP_0F5F + 1)
-#define PREGRP_0F61 (PREGRP_0F60 + 1)
-#define PREGRP_0F62 (PREGRP_0F61 + 1)
-#define PREGRP_0F6C (PREGRP_0F62 + 1)
-#define PREGRP_0F6D (PREGRP_0F6C + 1)
-#define PREGRP_0F6F (PREGRP_0F6D + 1)
-#define PREGRP_0F70 (PREGRP_0F6F + 1)
-#define PREGRP_0F78 (PREGRP_0F70 + 1)
-#define PREGRP_0F79 (PREGRP_0F78 + 1)
-#define PREGRP_0F7C (PREGRP_0F79 + 1)
-#define PREGRP_0F7D (PREGRP_0F7C + 1)
-#define PREGRP_0F7E (PREGRP_0F7D + 1)
-#define PREGRP_0F7F (PREGRP_0F7E + 1)
-#define PREGRP_0FB8 (PREGRP_0F7F + 1)
-#define PREGRP_0FBD (PREGRP_0FB8 + 1)
-#define PREGRP_0FC2 (PREGRP_0FBD + 1)
-#define PREGRP_0FD0 (PREGRP_0FC2 + 1)
-#define PREGRP_0FD6 (PREGRP_0FD0 + 1)
-#define PREGRP_0FE6 (PREGRP_0FD6 + 1)
-#define PREGRP_0FE7 (PREGRP_0FE6 + 1)
-#define PREGRP_0FF0 (PREGRP_0FE7 + 1)
-#define PREGRP_0FF7 (PREGRP_0FF0 + 1)
-#define PREGRP_0F3810 (PREGRP_0FF7 + 1)
-#define PREGRP_0F3814 (PREGRP_0F3810 + 1)
-#define PREGRP_0F3815 (PREGRP_0F3814 + 1)
-#define PREGRP_0F3817 (PREGRP_0F3815 + 1)
-#define PREGRP_0F3820 (PREGRP_0F3817 + 1)
-#define PREGRP_0F3821 (PREGRP_0F3820 + 1)
-#define PREGRP_0F3822 (PREGRP_0F3821 + 1)
-#define PREGRP_0F3823 (PREGRP_0F3822 + 1)
-#define PREGRP_0F3824 (PREGRP_0F3823 + 1)
-#define PREGRP_0F3825 (PREGRP_0F3824 + 1)
-#define PREGRP_0F3828 (PREGRP_0F3825 + 1)
-#define PREGRP_0F3829 (PREGRP_0F3828 + 1)
-#define PREGRP_0F382A (PREGRP_0F3829 + 1)
-#define PREGRP_0F382B (PREGRP_0F382A + 1)
-#define PREGRP_0F3830 (PREGRP_0F382B + 1)
-#define PREGRP_0F3831 (PREGRP_0F3830 + 1)
-#define PREGRP_0F3832 (PREGRP_0F3831 + 1)
-#define PREGRP_0F3833 (PREGRP_0F3832 + 1)
-#define PREGRP_0F3834 (PREGRP_0F3833 + 1)
-#define PREGRP_0F3835 (PREGRP_0F3834 + 1)
-#define PREGRP_0F3837 (PREGRP_0F3835 + 1)
-#define PREGRP_0F3838 (PREGRP_0F3837 + 1)
-#define PREGRP_0F3839 (PREGRP_0F3838 + 1)
-#define PREGRP_0F383A (PREGRP_0F3839 + 1)
-#define PREGRP_0F383B (PREGRP_0F383A + 1)
-#define PREGRP_0F383C (PREGRP_0F383B + 1)
-#define PREGRP_0F383D (PREGRP_0F383C + 1)
-#define PREGRP_0F383E (PREGRP_0F383D + 1)
-#define PREGRP_0F383F (PREGRP_0F383E + 1)
-#define PREGRP_0F3840 (PREGRP_0F383F + 1)
-#define PREGRP_0F3841 (PREGRP_0F3840 + 1)
-#define PREGRP_0F38F0 (PREGRP_0F3841 + 1)
-#define PREGRP_0F38F1 (PREGRP_0F38F0 + 1)
-#define PREGRP_0F3A08 (PREGRP_0F38F1 + 1)
-#define PREGRP_0F3A09 (PREGRP_0F3A08 + 1)
-#define PREGRP_0F3A0A (PREGRP_0F3A09 + 1)
-#define PREGRP_0F3A0B (PREGRP_0F3A0A + 1)
-#define PREGRP_0F3A0C (PREGRP_0F3A0B + 1)
-#define PREGRP_0F3A0D (PREGRP_0F3A0C + 1)
-#define PREGRP_0F3A0E (PREGRP_0F3A0D + 1)
-#define PREGRP_0F3A14 (PREGRP_0F3A0E + 1)
-#define PREGRP_0F3A15 (PREGRP_0F3A14 + 1)
-#define PREGRP_0F3A16 (PREGRP_0F3A15 + 1)
-#define PREGRP_0F3A17 (PREGRP_0F3A16 + 1)
-#define PREGRP_0F3A20 (PREGRP_0F3A17 + 1)
-#define PREGRP_0F3A21 (PREGRP_0F3A20 + 1)
-#define PREGRP_0F3A22 (PREGRP_0F3A21 + 1)
-#define PREGRP_0F3A40 (PREGRP_0F3A22 + 1)
-#define PREGRP_0F3A41 (PREGRP_0F3A40 + 1)
-#define PREGRP_0F3A42 (PREGRP_0F3A41 + 1)
-#define PREGRP_0F3A60 (PREGRP_0F3A42 + 1)
-#define PREGRP_0F3A61 (PREGRP_0F3A60 + 1)
-#define PREGRP_0F3A62 (PREGRP_0F3A61 + 1)
-#define PREGRP_0F3A63 (PREGRP_0F3A62 + 1)
-#define PREGRP_0F73_REG_3 (PREGRP_0F3A63 + 1)
-#define PREGRP_0F73_REG_7 (PREGRP_0F73_REG_3 + 1)
-#define PREGRP_0FC7_REG_6 (PREGRP_0F73_REG_7 + 1)
+
+#define REG_80 0
+#define REG_81 (REG_80 + 1)
+#define REG_82 (REG_81 + 1)
+#define REG_8F (REG_82 + 1)
+#define REG_C0 (REG_8F + 1)
+#define REG_C1 (REG_C0 + 1)
+#define REG_C6 (REG_C1 + 1)
+#define REG_C7 (REG_C6 + 1)
+#define REG_D0 (REG_C7 + 1)
+#define REG_D1 (REG_D0 + 1)
+#define REG_D2 (REG_D1 + 1)
+#define REG_D3 (REG_D2 + 1)
+#define REG_F6 (REG_D3 + 1)
+#define REG_F7 (REG_F6 + 1)
+#define REG_FE (REG_F7 + 1)
+#define REG_FF (REG_FE + 1)
+#define REG_0F00 (REG_FF + 1)
+#define REG_0F01 (REG_0F00 + 1)
+#define REG_0F0D (REG_0F01 + 1)
+#define REG_0F18 (REG_0F0D + 1)
+#define REG_0F71 (REG_0F18 + 1)
+#define REG_0F72 (REG_0F71 + 1)
+#define REG_0F73 (REG_0F72 + 1)
+#define REG_0FA6 (REG_0F73 + 1)
+#define REG_0FA7 (REG_0FA6 + 1)
+#define REG_0FAE (REG_0FA7 + 1)
+#define REG_0FBA (REG_0FAE + 1)
+#define REG_0FC7 (REG_0FBA + 1)
+
+#define MOD_8D 0
+#define MOD_0F01_REG_0 (MOD_8D + 1)
+#define MOD_0F01_REG_1 (MOD_0F01_REG_0 + 1)
+#define MOD_0F01_REG_2 (MOD_0F01_REG_1 + 1)
+#define MOD_0F01_REG_3 (MOD_0F01_REG_2 + 1)
+#define MOD_0F01_REG_7 (MOD_0F01_REG_3 + 1)
+#define MOD_0F12_PREFIX_0 (MOD_0F01_REG_7 + 1)
+#define MOD_0F13 (MOD_0F12_PREFIX_0 + 1)
+#define MOD_0F16_PREFIX_0 (MOD_0F13 + 1)
+#define MOD_0F17 (MOD_0F16_PREFIX_0 + 1)
+#define MOD_0F18_REG_0 (MOD_0F17 + 1)
+#define MOD_0F18_REG_1 (MOD_0F18_REG_0 + 1)
+#define MOD_0F18_REG_2 (MOD_0F18_REG_1 + 1)
+#define MOD_0F18_REG_3 (MOD_0F18_REG_2 + 1)
+#define MOD_0F20 (MOD_0F18_REG_3 + 1)
+#define MOD_0F21 (MOD_0F20 + 1)
+#define MOD_0F22 (MOD_0F21 + 1)
+#define MOD_0F23 (MOD_0F22 + 1)
+#define MOD_0F24 (MOD_0F23 + 1)
+#define MOD_0F26 (MOD_0F24 + 1)
+#define MOD_0F2B_PREFIX_0 (MOD_0F26 + 1)
+#define MOD_0F2B_PREFIX_1 (MOD_0F2B_PREFIX_0 + 1)
+#define MOD_0F2B_PREFIX_2 (MOD_0F2B_PREFIX_1 + 1)
+#define MOD_0F2B_PREFIX_3 (MOD_0F2B_PREFIX_2 + 1)
+#define MOD_0F51 (MOD_0F2B_PREFIX_3 + 1)
+#define MOD_0F71_REG_2 (MOD_0F51 + 1)
+#define MOD_0F71_REG_4 (MOD_0F71_REG_2 + 1)
+#define MOD_0F71_REG_6 (MOD_0F71_REG_4 + 1)
+#define MOD_0F72_REG_2 (MOD_0F71_REG_6 + 1)
+#define MOD_0F72_REG_4 (MOD_0F72_REG_2 + 1)
+#define MOD_0F72_REG_6 (MOD_0F72_REG_4 + 1)
+#define MOD_0F73_REG_2 (MOD_0F72_REG_6 + 1)
+#define MOD_0F73_REG_3 (MOD_0F73_REG_2 + 1)
+#define MOD_0F73_REG_6 (MOD_0F73_REG_3 + 1)
+#define MOD_0F73_REG_7 (MOD_0F73_REG_6 + 1)
+#define MOD_0FAE_REG_0 (MOD_0F73_REG_7 + 1)
+#define MOD_0FAE_REG_1 (MOD_0FAE_REG_0 + 1)
+#define MOD_0FAE_REG_2 (MOD_0FAE_REG_1 + 1)
+#define MOD_0FAE_REG_3 (MOD_0FAE_REG_2 + 1)
+#define MOD_0FAE_REG_5 (MOD_0FAE_REG_3 + 1)
+#define MOD_0FAE_REG_6 (MOD_0FAE_REG_5 + 1)
+#define MOD_0FAE_REG_7 (MOD_0FAE_REG_6 + 1)
+#define MOD_0FB2 (MOD_0FAE_REG_7 + 1)
+#define MOD_0FB4 (MOD_0FB2 + 1)
+#define MOD_0FB5 (MOD_0FB4 + 1)
+#define MOD_0FC7_REG_6 (MOD_0FB5 + 1)
+#define MOD_0FC7_REG_7 (MOD_0FC7_REG_6 + 1)
+#define MOD_0FD7 (MOD_0FC7_REG_7 + 1)
+#define MOD_0FE7_PREFIX_2 (MOD_0FD7 + 1)
+#define MOD_0FF0_PREFIX_3 (MOD_0FE7_PREFIX_2 + 1)
+#define MOD_0F382A_PREFIX_2 (MOD_0FF0_PREFIX_3 + 1)
+#define MOD_62_32BIT (MOD_0F382A_PREFIX_2 + 1)
+#define MOD_C4_32BIT (MOD_62_32BIT + 1)
+#define MOD_C5_32BIT (MOD_C4_32BIT + 1)
+
+#define RM_0F01_REG_0 0
+#define RM_0F01_REG_1 (RM_0F01_REG_0 + 1)
+#define RM_0F01_REG_3 (RM_0F01_REG_1 + 1)
+#define RM_0F01_REG_7 (RM_0F01_REG_3 + 1)
+#define RM_0FAE_REG_5 (RM_0F01_REG_7 + 1)
+#define RM_0FAE_REG_6 (RM_0FAE_REG_5 + 1)
+#define RM_0FAE_REG_7 (RM_0FAE_REG_6 + 1)
+
+#define PREFIX_90 0
+#define PREFIX_0F10 (PREFIX_90 + 1)
+#define PREFIX_0F11 (PREFIX_0F10 + 1)
+#define PREFIX_0F12 (PREFIX_0F11 + 1)
+#define PREFIX_0F16 (PREFIX_0F12 + 1)
+#define PREFIX_0F2A (PREFIX_0F16 + 1)
+#define PREFIX_0F2B (PREFIX_0F2A + 1)
+#define PREFIX_0F2C (PREFIX_0F2B + 1)
+#define PREFIX_0F2D (PREFIX_0F2C + 1)
+#define PREFIX_0F2E (PREFIX_0F2D + 1)
+#define PREFIX_0F2F (PREFIX_0F2E + 1)
+#define PREFIX_0F51 (PREFIX_0F2F + 1)
+#define PREFIX_0F52 (PREFIX_0F51 + 1)
+#define PREFIX_0F53 (PREFIX_0F52 + 1)
+#define PREFIX_0F58 (PREFIX_0F53 + 1)
+#define PREFIX_0F59 (PREFIX_0F58 + 1)
+#define PREFIX_0F5A (PREFIX_0F59 + 1)
+#define PREFIX_0F5B (PREFIX_0F5A + 1)
+#define PREFIX_0F5C (PREFIX_0F5B + 1)
+#define PREFIX_0F5D (PREFIX_0F5C + 1)
+#define PREFIX_0F5E (PREFIX_0F5D + 1)
+#define PREFIX_0F5F (PREFIX_0F5E + 1)
+#define PREFIX_0F60 (PREFIX_0F5F + 1)
+#define PREFIX_0F61 (PREFIX_0F60 + 1)
+#define PREFIX_0F62 (PREFIX_0F61 + 1)
+#define PREFIX_0F6C (PREFIX_0F62 + 1)
+#define PREFIX_0F6D (PREFIX_0F6C + 1)
+#define PREFIX_0F6F (PREFIX_0F6D + 1)
+#define PREFIX_0F70 (PREFIX_0F6F + 1)
+#define PREFIX_0F73_REG_3 (PREFIX_0F70 + 1)
+#define PREFIX_0F73_REG_7 (PREFIX_0F73_REG_3 + 1)
+#define PREFIX_0F78 (PREFIX_0F73_REG_7 + 1)
+#define PREFIX_0F79 (PREFIX_0F78 + 1)
+#define PREFIX_0F7C (PREFIX_0F79 + 1)
+#define PREFIX_0F7D (PREFIX_0F7C + 1)
+#define PREFIX_0F7E (PREFIX_0F7D + 1)
+#define PREFIX_0F7F (PREFIX_0F7E + 1)
+#define PREFIX_0FB8 (PREFIX_0F7F + 1)
+#define PREFIX_0FBD (PREFIX_0FB8 + 1)
+#define PREFIX_0FC2 (PREFIX_0FBD + 1)
+#define PREFIX_0FC3 (PREFIX_0FC2 + 1)
+#define PREFIX_0FC7_REG_6 (PREFIX_0FC3 + 1)
+#define PREFIX_0FD0 (PREFIX_0FC7_REG_6 + 1)
+#define PREFIX_0FD6 (PREFIX_0FD0 + 1)
+#define PREFIX_0FE6 (PREFIX_0FD6 + 1)
+#define PREFIX_0FE7 (PREFIX_0FE6 + 1)
+#define PREFIX_0FF0 (PREFIX_0FE7 + 1)
+#define PREFIX_0FF7 (PREFIX_0FF0 + 1)
+#define PREFIX_0F3810 (PREFIX_0FF7 + 1)
+#define PREFIX_0F3814 (PREFIX_0F3810 + 1)
+#define PREFIX_0F3815 (PREFIX_0F3814 + 1)
+#define PREFIX_0F3817 (PREFIX_0F3815 + 1)
+#define PREFIX_0F3820 (PREFIX_0F3817 + 1)
+#define PREFIX_0F3821 (PREFIX_0F3820 + 1)
+#define PREFIX_0F3822 (PREFIX_0F3821 + 1)
+#define PREFIX_0F3823 (PREFIX_0F3822 + 1)
+#define PREFIX_0F3824 (PREFIX_0F3823 + 1)
+#define PREFIX_0F3825 (PREFIX_0F3824 + 1)
+#define PREFIX_0F3828 (PREFIX_0F3825 + 1)
+#define PREFIX_0F3829 (PREFIX_0F3828 + 1)
+#define PREFIX_0F382A (PREFIX_0F3829 + 1)
+#define PREFIX_0F382B (PREFIX_0F382A + 1)
+#define PREFIX_0F3830 (PREFIX_0F382B + 1)
+#define PREFIX_0F3831 (PREFIX_0F3830 + 1)
+#define PREFIX_0F3832 (PREFIX_0F3831 + 1)
+#define PREFIX_0F3833 (PREFIX_0F3832 + 1)
+#define PREFIX_0F3834 (PREFIX_0F3833 + 1)
+#define PREFIX_0F3835 (PREFIX_0F3834 + 1)
+#define PREFIX_0F3837 (PREFIX_0F3835 + 1)
+#define PREFIX_0F3838 (PREFIX_0F3837 + 1)
+#define PREFIX_0F3839 (PREFIX_0F3838 + 1)
+#define PREFIX_0F383A (PREFIX_0F3839 + 1)
+#define PREFIX_0F383B (PREFIX_0F383A + 1)
+#define PREFIX_0F383C (PREFIX_0F383B + 1)
+#define PREFIX_0F383D (PREFIX_0F383C + 1)
+#define PREFIX_0F383E (PREFIX_0F383D + 1)
+#define PREFIX_0F383F (PREFIX_0F383E + 1)
+#define PREFIX_0F3840 (PREFIX_0F383F + 1)
+#define PREFIX_0F3841 (PREFIX_0F3840 + 1)
+#define PREFIX_0F38F0 (PREFIX_0F3841 + 1)
+#define PREFIX_0F38F1 (PREFIX_0F38F0 + 1)
+#define PREFIX_0F3A08 (PREFIX_0F38F1 + 1)
+#define PREFIX_0F3A09 (PREFIX_0F3A08 + 1)
+#define PREFIX_0F3A0A (PREFIX_0F3A09 + 1)
+#define PREFIX_0F3A0B (PREFIX_0F3A0A + 1)
+#define PREFIX_0F3A0C (PREFIX_0F3A0B + 1)
+#define PREFIX_0F3A0D (PREFIX_0F3A0C + 1)
+#define PREFIX_0F3A0E (PREFIX_0F3A0D + 1)
+#define PREFIX_0F3A14 (PREFIX_0F3A0E + 1)
+#define PREFIX_0F3A15 (PREFIX_0F3A14 + 1)
+#define PREFIX_0F3A16 (PREFIX_0F3A15 + 1)
+#define PREFIX_0F3A17 (PREFIX_0F3A16 + 1)
+#define PREFIX_0F3A20 (PREFIX_0F3A17 + 1)
+#define PREFIX_0F3A21 (PREFIX_0F3A20 + 1)
+#define PREFIX_0F3A22 (PREFIX_0F3A21 + 1)
+#define PREFIX_0F3A40 (PREFIX_0F3A22 + 1)
+#define PREFIX_0F3A41 (PREFIX_0F3A40 + 1)
+#define PREFIX_0F3A42 (PREFIX_0F3A41 + 1)
+#define PREFIX_0F3A60 (PREFIX_0F3A42 + 1)
+#define PREFIX_0F3A61 (PREFIX_0F3A60 + 1)
+#define PREFIX_0F3A62 (PREFIX_0F3A61 + 1)
+#define PREFIX_0F3A63 (PREFIX_0F3A62 + 1)
#define X86_64_06 0
#define X86_64_07 (X86_64_06 + 1)
#define THREE_BYTE_0F38 (THREE_BYTE_0F25 + 1)
#define THREE_BYTE_0F3A (THREE_BYTE_0F38 + 1)
#define THREE_BYTE_0F7A (THREE_BYTE_0F3A + 1)
-#define THREE_BYTE_0FBA (THREE_BYTE_0F7A + 1)
-
-#define OPC_EXT_8D 0
-#define OPC_EXT_0F13 (OPC_EXT_8D + 1)
-#define OPC_EXT_0F17 (OPC_EXT_0F13 + 1)
-#define OPC_EXT_0F20 (OPC_EXT_0F17 + 1)
-#define OPC_EXT_0F21 (OPC_EXT_0F20 + 1)
-#define OPC_EXT_0F22 (OPC_EXT_0F21 + 1)
-#define OPC_EXT_0F23 (OPC_EXT_0F22 + 1)
-#define OPC_EXT_0F24 (OPC_EXT_0F23 + 1)
-#define OPC_EXT_0F26 (OPC_EXT_0F24 + 1)
-#define OPC_EXT_0FB2 (OPC_EXT_0F26 + 1)
-#define OPC_EXT_0FB4 (OPC_EXT_0FB2 + 1)
-#define OPC_EXT_0FB5 (OPC_EXT_0FB4 + 1)
-#define OPC_EXT_0F01_REG_0 (OPC_EXT_0FB5 + 1)
-#define OPC_EXT_0F01_REG_1 (OPC_EXT_0F01_REG_0 + 1)
-#define OPC_EXT_0F01_REG_2 (OPC_EXT_0F01_REG_1 + 1)
-#define OPC_EXT_0F01_REG_3 (OPC_EXT_0F01_REG_2 + 1)
-#define OPC_EXT_0F01_REG_7 (OPC_EXT_0F01_REG_3 + 1)
-#define OPC_EXT_0F18_REG_0 (OPC_EXT_0F01_REG_7 + 1)
-#define OPC_EXT_0F18_REG_1 (OPC_EXT_0F18_REG_0 + 1)
-#define OPC_EXT_0F18_REG_2 (OPC_EXT_0F18_REG_1 + 1)
-#define OPC_EXT_0F18_REG_3 (OPC_EXT_0F18_REG_2 + 1)
-#define OPC_EXT_0F71_REG_2 (OPC_EXT_0F18_REG_3 + 1)
-#define OPC_EXT_0F71_REG_4 (OPC_EXT_0F71_REG_2 + 1)
-#define OPC_EXT_0F71_REG_6 (OPC_EXT_0F71_REG_4 + 1)
-#define OPC_EXT_0F72_REG_2 (OPC_EXT_0F71_REG_6 + 1)
-#define OPC_EXT_0F72_REG_4 (OPC_EXT_0F72_REG_2 + 1)
-#define OPC_EXT_0F72_REG_6 (OPC_EXT_0F72_REG_4 + 1)
-#define OPC_EXT_0F73_REG_2 (OPC_EXT_0F72_REG_6 + 1)
-#define OPC_EXT_0F73_REG_3 (OPC_EXT_0F73_REG_2 + 1)
-#define OPC_EXT_0F73_REG_6 (OPC_EXT_0F73_REG_3 + 1)
-#define OPC_EXT_0F73_REG_7 (OPC_EXT_0F73_REG_6 + 1)
-#define OPC_EXT_0FAE_REG_0 (OPC_EXT_0F73_REG_7 + 1)
-#define OPC_EXT_0FAE_REG_1 (OPC_EXT_0FAE_REG_0 + 1)
-#define OPC_EXT_0FAE_REG_2 (OPC_EXT_0FAE_REG_1 + 1)
-#define OPC_EXT_0FAE_REG_3 (OPC_EXT_0FAE_REG_2 + 1)
-#define OPC_EXT_0FAE_REG_5 (OPC_EXT_0FAE_REG_3 + 1)
-#define OPC_EXT_0FAE_REG_6 (OPC_EXT_0FAE_REG_5 + 1)
-#define OPC_EXT_0FAE_REG_7 (OPC_EXT_0FAE_REG_6 + 1)
-#define OPC_EXT_0FC7_REG_6 (OPC_EXT_0FAE_REG_7 + 1)
-#define OPC_EXT_0FC7_REG_7 (OPC_EXT_0FC7_REG_6 + 1)
-#define OPC_EXT_0F12_PREFIX_0 (OPC_EXT_0FC7_REG_7 + 1)
-#define OPC_EXT_0F16_PREFIX_0 (OPC_EXT_0F12_PREFIX_0 + 1)
-#define OPC_EXT_0FF0_PREFIX_3 (OPC_EXT_0F16_PREFIX_0 + 1)
-#define OPC_EXT_62_32BIT (OPC_EXT_0FF0_PREFIX_3 + 1)
-#define OPC_EXT_C4_32BIT (OPC_EXT_62_32BIT + 1)
-#define OPC_EXT_C5_32BIT (OPC_EXT_C4_32BIT + 1)
-
-#define OPC_EXT_RM_0F01_REG_0 0
-#define OPC_EXT_RM_0F01_REG_1 (OPC_EXT_RM_0F01_REG_0 + 1)
-#define OPC_EXT_RM_0F01_REG_3 (OPC_EXT_RM_0F01_REG_1 + 1)
-#define OPC_EXT_RM_0F01_REG_7 (OPC_EXT_RM_0F01_REG_3 + 1)
-#define OPC_EXT_RM_0FAE_REG_5 (OPC_EXT_RM_0F01_REG_7 + 1)
-#define OPC_EXT_RM_0FAE_REG_6 (OPC_EXT_RM_0FAE_REG_5 + 1)
-#define OPC_EXT_RM_0FAE_REG_7 (OPC_EXT_RM_0FAE_REG_6 + 1)
+#define THREE_BYTE_0F7B (THREE_BYTE_0F7A + 1)
typedef void (*op_rtn) (int bytemode, int sizeflag);
'A' => print 'b' if no register operands or suffix_always is true
'B' => print 'b' if suffix_always is true
'C' => print 's' or 'l' ('w' or 'd' in Intel mode) depending on operand
- . size prefix
+ size prefix
'D' => print 'w' if no register operands or 'w', 'l' or 'q', if
- . suffix_always is true
+ suffix_always is true
'E' => print 'e' if 32-bit form of jcxz
'F' => print 'w' or 'l' depending on address size prefix (loop insns)
'G' => print 'w' or 'l' depending on operand size prefix (i/o insns)
'H' => print ",pt" or ",pn" branch hint
'I' => honor following macro letter even in Intel mode (implemented only
- . for some of the macro letters)
+ for some of the macro letters)
'J' => print 'l'
'K' => print 'd' or 'q' if rex prefix is present.
'L' => print 'l' if suffix_always is true
+ 'M' => print 'r' if intel_mnemonic is false.
'N' => print 'n' if instruction has no wait "prefix"
'O' => print 'd' or 'o' (or 'q' in Intel mode)
'P' => print 'w', 'l' or 'q' if instruction has an operand size prefix,
- . or suffix_always is true. print 'q' if rex prefix is present.
- 'Q' => print 'w', 'l' or 'q' if no register operands or suffix_always
- . is true
+ or suffix_always is true. print 'q' if rex prefix is present.
+ 'Q' => print 'w', 'l' or 'q' for memory operand or suffix_always
+ is true
'R' => print 'w', 'l' or 'q' ('d' for 'l' and 'e' in Intel mode)
'S' => print 'w', 'l' or 'q' if suffix_always is true
'T' => print 'q' in 64bit mode and behave as 'P' otherwise
'V' => print 'q' in 64bit mode and behave as 'S' otherwise
'W' => print 'b', 'w' or 'l' ('d' in Intel mode)
'X' => print 's', 'd' depending on data16 prefix (for XMM)
- 'Y' => 'q' if instruction has an REX 64bit overwrite prefix
+ 'Y' => 'q' if instruction has an REX 64bit overwrite prefix and
+ suffix_always is true.
'Z' => print 'q' in 64bit mode and behave as 'L' otherwise
+ '!' => change condition from true to false or from false to true.
+ '%' => add 1 upper case letter to the macro.
+
+ 2 upper case letter macros:
+ 'LQ' => print 'l' ('d' in Intel mode) or 'q' for memory operand
+ or suffix_always is true
Many of the above letters print nothing in Intel mode. See "putop"
for the details.
{ "jleH", { Jb, XX, cond_jump_flag } },
{ "jgH", { Jb, XX, cond_jump_flag } },
/* 80 */
- { GRP (GRP_80) },
- { GRP (GRP_81) },
+ { REG_TABLE (REG_80) },
+ { REG_TABLE (REG_81) },
{ "(bad)", { XX } },
- { GRP (GRP_82) },
+ { REG_TABLE (REG_82) },
{ "testB", { Eb, Gb } },
{ "testS", { Ev, Gv } },
{ "xchgB", { Eb, Gb } },
{ "movB", { Gb, Eb } },
{ "movS", { Gv, Ev } },
{ "movD", { Sv, Sw } },
- { OPC_EXT_TABLE (OPC_EXT_8D) },
+ { MOD_TABLE (MOD_8D) },
{ "movD", { Sw, Sv } },
- { GRP (GRP_8F) },
+ { REG_TABLE (REG_8F) },
/* 90 */
- { PREGRP (PREGRP_90) },
+ { PREFIX_TABLE (PREFIX_90) },
{ "xchgS", { RMeCX, eAX } },
{ "xchgS", { RMeDX, eAX } },
{ "xchgS", { RMeBX, eAX } },
{ "movS", { RMeSI, Iv64 } },
{ "movS", { RMeDI, Iv64 } },
/* c0 */
- { GRP (GRP_C0) },
- { GRP (GRP_C1) },
+ { REG_TABLE (REG_C0) },
+ { REG_TABLE (REG_C1) },
{ "retT", { Iw } },
{ "retT", { XX } },
{ X86_64_TABLE (X86_64_C4) },
{ X86_64_TABLE (X86_64_C5) },
- { GRP (GRP_C6) },
- { GRP (GRP_C7) },
+ { REG_TABLE (REG_C6) },
+ { REG_TABLE (REG_C7) },
/* c8 */
{ "enterT", { Iw, Ib } },
{ "leaveT", { XX } },
{ X86_64_TABLE (X86_64_CE) },
{ "iretP", { XX } },
/* d0 */
- { GRP (GRP_D0) },
- { GRP (GRP_D1) },
- { GRP (GRP_D2) },
- { GRP (GRP_D3) },
+ { REG_TABLE (REG_D0) },
+ { REG_TABLE (REG_D1) },
+ { REG_TABLE (REG_D2) },
+ { REG_TABLE (REG_D3) },
{ X86_64_TABLE (X86_64_D4) },
{ X86_64_TABLE (X86_64_D5) },
{ "(bad)", { XX } },
{ "(bad)", { XX } }, /* repz */
{ "hlt", { XX } },
{ "cmc", { XX } },
- { GRP (GRP_F6) },
- { GRP (GRP_F7) },
+ { REG_TABLE (REG_F6) },
+ { REG_TABLE (REG_F7) },
/* f8 */
{ "clc", { XX } },
{ "stc", { XX } },
{ "sti", { XX } },
{ "cld", { XX } },
{ "std", { XX } },
- { GRP (GRP_FE) },
- { GRP (GRP_FF) },
+ { REG_TABLE (REG_FE) },
+ { REG_TABLE (REG_FF) },
};
static const struct dis386 dis386_twobyte[] = {
/* 00 */
- { GRP (GRP_0F00 ) },
- { GRP (GRP_0F01 ) },
+ { REG_TABLE (REG_0F00 ) },
+ { REG_TABLE (REG_0F01 ) },
{ "larS", { Gv, Ew } },
{ "lslS", { Gv, Ew } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "ud2a", { XX } },
{ "(bad)", { XX } },
- { GRP (GRP_0F0E) },
+ { REG_TABLE (REG_0F0D) },
{ "femms", { XX } },
{ "", { MX, EM, OPSUF } }, /* See OP_3DNowSuffix. */
/* 10 */
- { PREGRP (PREGRP_0F10) },
- { PREGRP (PREGRP_0F11) },
- { PREGRP (PREGRP_0F12) },
- { OPC_EXT_TABLE (OPC_EXT_0F13) },
- { "unpcklpX", { XM, EXq } },
- { "unpckhpX", { XM, EXq } },
- { PREGRP (PREGRP_0F16) },
- { OPC_EXT_TABLE (OPC_EXT_0F17) },
+ { PREFIX_TABLE (PREFIX_0F10) },
+ { PREFIX_TABLE (PREFIX_0F11) },
+ { PREFIX_TABLE (PREFIX_0F12) },
+ { MOD_TABLE (MOD_0F13) },
+ { "unpcklpX", { XM, EXx } },
+ { "unpckhpX", { XM, EXx } },
+ { PREFIX_TABLE (PREFIX_0F16) },
+ { MOD_TABLE (MOD_0F17) },
/* 18 */
- { GRP (GRP_0F18) },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { REG_TABLE (REG_0F18) },
+ { "nopQ", { Ev } },
+ { "nopQ", { Ev } },
+ { "nopQ", { Ev } },
+ { "nopQ", { Ev } },
+ { "nopQ", { Ev } },
+ { "nopQ", { Ev } },
{ "nopQ", { Ev } },
/* 20 */
- { OPC_EXT_TABLE (OPC_EXT_0F20) },
- { OPC_EXT_TABLE (OPC_EXT_0F21) },
- { OPC_EXT_TABLE (OPC_EXT_0F22) },
- { OPC_EXT_TABLE (OPC_EXT_0F23) },
- { OPC_EXT_TABLE (OPC_EXT_0F24) },
+ { MOD_TABLE (MOD_0F20) },
+ { MOD_TABLE (MOD_0F21) },
+ { MOD_TABLE (MOD_0F22) },
+ { MOD_TABLE (MOD_0F23) },
+ { MOD_TABLE (MOD_0F24) },
{ THREE_BYTE_TABLE (THREE_BYTE_0F25) },
- { OPC_EXT_TABLE (OPC_EXT_0F26) },
+ { MOD_TABLE (MOD_0F26) },
{ "(bad)", { XX } },
/* 28 */
{ "movapX", { XM, EXx } },
- { "movapX", { EXx, XM } },
- { PREGRP (PREGRP_0F2A) },
- { PREGRP (PREGRP_0F2B) },
- { PREGRP (PREGRP_0F2C) },
- { PREGRP (PREGRP_0F2D) },
- { PREGRP (PREGRP_0F2E) },
- { PREGRP (PREGRP_0F2F) },
+ { "movapX", { EXx, XM } },
+ { PREFIX_TABLE (PREFIX_0F2A) },
+ { PREFIX_TABLE (PREFIX_0F2B) },
+ { PREFIX_TABLE (PREFIX_0F2C) },
+ { PREFIX_TABLE (PREFIX_0F2D) },
+ { PREFIX_TABLE (PREFIX_0F2E) },
+ { PREFIX_TABLE (PREFIX_0F2F) },
/* 30 */
{ "wrmsr", { XX } },
{ "rdtsc", { XX } },
{ "sysenter", { XX } },
{ "sysexit", { XX } },
{ "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "getsec", { XX } },
/* 38 */
{ THREE_BYTE_TABLE (THREE_BYTE_0F38) },
{ "(bad)", { XX } },
{ "cmovle", { Gv, Ev } },
{ "cmovg", { Gv, Ev } },
/* 50 */
- { "movmskpX", { Gdq, XS } },
- { PREGRP (PREGRP_0F51) },
- { PREGRP (PREGRP_0F52) },
- { PREGRP (PREGRP_0F53) },
+ { MOD_TABLE (MOD_0F51) },
+ { PREFIX_TABLE (PREFIX_0F51) },
+ { PREFIX_TABLE (PREFIX_0F52) },
+ { PREFIX_TABLE (PREFIX_0F53) },
{ "andpX", { XM, EXx } },
{ "andnpX", { XM, EXx } },
{ "orpX", { XM, EXx } },
{ "xorpX", { XM, EXx } },
/* 58 */
- { PREGRP (PREGRP_0F58) },
- { PREGRP (PREGRP_0F59) },
- { PREGRP (PREGRP_0F5A) },
- { PREGRP (PREGRP_0F5B) },
- { PREGRP (PREGRP_0F5C) },
- { PREGRP (PREGRP_0F5D) },
- { PREGRP (PREGRP_0F5E) },
- { PREGRP (PREGRP_0F5F) },
+ { PREFIX_TABLE (PREFIX_0F58) },
+ { PREFIX_TABLE (PREFIX_0F59) },
+ { PREFIX_TABLE (PREFIX_0F5A) },
+ { PREFIX_TABLE (PREFIX_0F5B) },
+ { PREFIX_TABLE (PREFIX_0F5C) },
+ { PREFIX_TABLE (PREFIX_0F5D) },
+ { PREFIX_TABLE (PREFIX_0F5E) },
+ { PREFIX_TABLE (PREFIX_0F5F) },
/* 60 */
- { PREGRP (PREGRP_0F60) },
- { PREGRP (PREGRP_0F61) },
- { PREGRP (PREGRP_0F62) },
+ { PREFIX_TABLE (PREFIX_0F60) },
+ { PREFIX_TABLE (PREFIX_0F61) },
+ { PREFIX_TABLE (PREFIX_0F62) },
{ "packsswb", { MX, EM } },
{ "pcmpgtb", { MX, EM } },
{ "pcmpgtw", { MX, EM } },
{ "punpckhwd", { MX, EM } },
{ "punpckhdq", { MX, EM } },
{ "packssdw", { MX, EM } },
- { PREGRP (PREGRP_0F6C) },
- { PREGRP (PREGRP_0F6D) },
+ { PREFIX_TABLE (PREFIX_0F6C) },
+ { PREFIX_TABLE (PREFIX_0F6D) },
{ "movK", { MX, Edq } },
- { PREGRP (PREGRP_0F6F) },
+ { PREFIX_TABLE (PREFIX_0F6F) },
/* 70 */
- { PREGRP (PREGRP_0F70) },
- { GRP (GRP_0F71) },
- { GRP (GRP_0F72) },
- { GRP (GRP_0F73) },
+ { PREFIX_TABLE (PREFIX_0F70) },
+ { REG_TABLE (REG_0F71) },
+ { REG_TABLE (REG_0F72) },
+ { REG_TABLE (REG_0F73) },
{ "pcmpeqb", { MX, EM } },
{ "pcmpeqw", { MX, EM } },
{ "pcmpeqd", { MX, EM } },
{ "emms", { XX } },
/* 78 */
- { PREGRP (PREGRP_0F78) },
- { PREGRP (PREGRP_0F79) },
+ { PREFIX_TABLE (PREFIX_0F78) },
+ { PREFIX_TABLE (PREFIX_0F79) },
{ THREE_BYTE_TABLE (THREE_BYTE_0F7A) },
- { THREE_BYTE_TABLE (THREE_BYTE_0FBA) },
- { PREGRP (PREGRP_0F7C) },
- { PREGRP (PREGRP_0F7D) },
- { PREGRP (PREGRP_0F7E) },
- { PREGRP (PREGRP_0F7F) },
+ { THREE_BYTE_TABLE (THREE_BYTE_0F7B) },
+ { PREFIX_TABLE (PREFIX_0F7C) },
+ { PREFIX_TABLE (PREFIX_0F7D) },
+ { PREFIX_TABLE (PREFIX_0F7E) },
+ { PREFIX_TABLE (PREFIX_0F7F) },
/* 80 */
{ "joH", { Jv, XX, cond_jump_flag } },
{ "jnoH", { Jv, XX, cond_jump_flag } },
{ "btS", { Ev, Gv } },
{ "shldS", { Ev, Gv, Ib } },
{ "shldS", { Ev, Gv, CL } },
- { GRP (GRP_0FA6) },
- { GRP (GRP_0FA7) },
+ { REG_TABLE (REG_0FA6) },
+ { REG_TABLE (REG_0FA7) },
/* a8 */
{ "pushT", { gs } },
{ "popT", { gs } },
{ "btsS", { Ev, Gv } },
{ "shrdS", { Ev, Gv, Ib } },
{ "shrdS", { Ev, Gv, CL } },
- { GRP (GRP_0FAE) },
+ { REG_TABLE (REG_0FAE) },
{ "imulS", { Gv, Ev } },
/* b0 */
{ "cmpxchgB", { Eb, Gb } },
{ "cmpxchgS", { Ev, Gv } },
- { OPC_EXT_TABLE (OPC_EXT_0FB2) },
+ { MOD_TABLE (MOD_0FB2) },
{ "btrS", { Ev, Gv } },
- { OPC_EXT_TABLE (OPC_EXT_0FB4) },
- { OPC_EXT_TABLE (OPC_EXT_0FB5) },
+ { MOD_TABLE (MOD_0FB4) },
+ { MOD_TABLE (MOD_0FB5) },
{ "movz{bR|x}", { Gv, Eb } },
{ "movz{wR|x}", { Gv, Ew } }, /* yes, there really is movzww ! */
/* b8 */
- { PREGRP (PREGRP_0FB8) },
+ { PREFIX_TABLE (PREFIX_0FB8) },
{ "ud2b", { XX } },
- { GRP (GRP_0FBA) },
+ { REG_TABLE (REG_0FBA) },
{ "btcS", { Ev, Gv } },
{ "bsfS", { Gv, Ev } },
- { PREGRP (PREGRP_0FBD) },
+ { 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 } },
- { PREGRP (PREGRP_0FC2) },
- { "movntiS", { Ev, Gv } },
+ { PREFIX_TABLE (PREFIX_0FC2) },
+ { PREFIX_TABLE (PREFIX_0FC3) },
{ "pinsrw", { MX, Edqw, Ib } },
{ "pextrw", { Gdq, MS, Ib } },
{ "shufpX", { XM, EXx, Ib } },
- { GRP (GRP_0FC7) },
+ { REG_TABLE (REG_0FC7) },
/* c8 */
{ "bswap", { RMeAX } },
{ "bswap", { RMeCX } },
{ "bswap", { RMeSI } },
{ "bswap", { RMeDI } },
/* d0 */
- { PREGRP (PREGRP_0FD0) },
+ { PREFIX_TABLE (PREFIX_0FD0) },
{ "psrlw", { MX, EM } },
{ "psrld", { MX, EM } },
{ "psrlq", { MX, EM } },
{ "paddq", { MX, EM } },
{ "pmullw", { MX, EM } },
- { PREGRP (PREGRP_0FD6) },
- { "pmovmskb", { Gdq, MS } },
+ { PREFIX_TABLE (PREFIX_0FD6) },
+ { MOD_TABLE (MOD_0FD7) },
/* d8 */
{ "psubusb", { MX, EM } },
{ "psubusw", { MX, EM } },
{ "pavgw", { MX, EM } },
{ "pmulhuw", { MX, EM } },
{ "pmulhw", { MX, EM } },
- { PREGRP (PREGRP_0FE6) },
- { PREGRP (PREGRP_0FE7) },
+ { PREFIX_TABLE (PREFIX_0FE6) },
+ { PREFIX_TABLE (PREFIX_0FE7) },
/* e8 */
{ "psubsb", { MX, EM } },
{ "psubsw", { MX, EM } },
{ "pmaxsw", { MX, EM } },
{ "pxor", { MX, EM } },
/* f0 */
- { PREGRP (PREGRP_0FF0) },
+ { PREFIX_TABLE (PREFIX_0FF0) },
{ "psllw", { MX, EM } },
{ "pslld", { MX, EM } },
{ "psllq", { MX, EM } },
{ "pmuludq", { MX, EM } },
{ "pmaddwd", { MX, EM } },
{ "psadbw", { MX, EM } },
- { PREGRP (PREGRP_0FF7) },
+ { PREFIX_TABLE (PREFIX_0FF7) },
/* f8 */
{ "psubb", { MX, EM } },
{ "psubw", { MX, EM } },
/* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
/* ------------------------------- */
/* 00 */ 1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1, /* 0f */
- /* 10 */ 1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1, /* 1f */
+ /* 10 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 1f */
/* 20 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 2f */
/* 30 */ 0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0, /* 3f */
/* 40 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 4f */
"%bx,%si", "%bx,%di", "%bp,%si", "%bp,%di", "%si", "%di", "%bp", "%bx"
};
-static const struct dis386 grps[][8] = {
- /* GRP_80 */
+static const struct dis386 reg_table[][8] = {
+ /* REG_80 */
{
{ "addA", { Eb, Ib } },
{ "orA", { Eb, Ib } },
{ "xorA", { Eb, Ib } },
{ "cmpA", { Eb, Ib } },
},
- /* GRP_81 */
+ /* REG_81 */
{
{ "addQ", { Ev, Iv } },
{ "orQ", { Ev, Iv } },
{ "xorQ", { Ev, Iv } },
{ "cmpQ", { Ev, Iv } },
},
- /* GRP_82 */
+ /* REG_82 */
{
{ "addQ", { Ev, sIb } },
{ "orQ", { Ev, sIb } },
{ "xorQ", { Ev, sIb } },
{ "cmpQ", { Ev, sIb } },
},
- /* GRP_8F */
+ /* REG_8F */
{
{ "popU", { stackEv } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
},
- /* GRP_C0 */
+ /* REG_C0 */
{
{ "rolA", { Eb, Ib } },
{ "rorA", { Eb, Ib } },
{ "(bad)", { XX } },
{ "sarA", { Eb, Ib } },
},
- /* GRP_C1 */
+ /* REG_C1 */
{
{ "rolQ", { Ev, Ib } },
{ "rorQ", { Ev, Ib } },
{ "(bad)", { XX } },
{ "sarQ", { Ev, Ib } },
},
- /* GRP_C6 */
+ /* REG_C6 */
{
{ "movA", { Eb, Ib } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
},
- /* GRP_C7 */
+ /* REG_C7 */
{
{ "movQ", { Ev, Iv } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
},
- /* GRP_D0 */
+ /* REG_D0 */
{
{ "rolA", { Eb, I1 } },
{ "rorA", { Eb, I1 } },
{ "(bad)", { XX } },
{ "sarA", { Eb, I1 } },
},
- /* GRP_D1 */
+ /* REG_D1 */
{
{ "rolQ", { Ev, I1 } },
{ "rorQ", { Ev, I1 } },
{ "(bad)", { XX } },
{ "sarQ", { Ev, I1 } },
},
- /* GRP_D2 */
+ /* REG_D2 */
{
{ "rolA", { Eb, CL } },
{ "rorA", { Eb, CL } },
{ "(bad)", { XX } },
{ "sarA", { Eb, CL } },
},
- /* GRP_D3 */
+ /* REG_D3 */
{
{ "rolQ", { Ev, CL } },
{ "rorQ", { Ev, CL } },
{ "(bad)", { XX } },
{ "sarQ", { Ev, CL } },
},
- /* GRP_F6 */
+ /* REG_F6 */
{
{ "testA", { Eb, Ib } },
- { "(bad)", { Eb } },
+ { "(bad)", { XX } },
{ "notA", { Eb } },
{ "negA", { Eb } },
{ "mulA", { Eb } }, /* Don't print the implicit %al register, */
{ "divA", { Eb } }, /* mul/imul opcodes. Do the same for div */
{ "idivA", { Eb } }, /* and idiv for consistency. */
},
- /* GRP_F7 */
+ /* REG_F7 */
{
{ "testQ", { Ev, Iv } },
{ "(bad)", { XX } },
{ "divQ", { Ev } },
{ "idivQ", { Ev } },
},
- /* GRP_FE */
+ /* REG_FE */
{
{ "incA", { Eb } },
{ "decA", { Eb } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
},
- /* GRP_FF */
+ /* REG_FF */
{
{ "incQ", { Ev } },
{ "decQ", { Ev } },
{ "pushU", { stackEv } },
{ "(bad)", { XX } },
},
- /* GRP_0F00 */
+ /* REG_0F00 */
{
{ "sldtD", { Sv } },
{ "strD", { Sv } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
},
- /* GRP_0F01 */
+ /* REG_0F01 */
{
- { OPC_EXT_TABLE (OPC_EXT_0F01_REG_0) },
- { OPC_EXT_TABLE (OPC_EXT_0F01_REG_1) },
- { OPC_EXT_TABLE (OPC_EXT_0F01_REG_2) },
- { OPC_EXT_TABLE (OPC_EXT_0F01_REG_3) },
+ { MOD_TABLE (MOD_0F01_REG_0) },
+ { MOD_TABLE (MOD_0F01_REG_1) },
+ { MOD_TABLE (MOD_0F01_REG_2) },
+ { MOD_TABLE (MOD_0F01_REG_3) },
{ "smswD", { Sv } },
{ "(bad)", { XX } },
{ "lmsw", { Ew } },
- { OPC_EXT_TABLE (OPC_EXT_0F01_REG_7) },
+ { MOD_TABLE (MOD_0F01_REG_7) },
},
- /* GRP_0F0E */
+ /* REG_0F0D */
{
{ "prefetch", { Eb } },
{ "prefetchw", { Eb } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
},
- /* GRP_0F18 */
+ /* REG_0F18 */
{
- { OPC_EXT_TABLE (OPC_EXT_0F18_REG_0) },
- { OPC_EXT_TABLE (OPC_EXT_0F18_REG_1) },
- { OPC_EXT_TABLE (OPC_EXT_0F18_REG_2) },
- { OPC_EXT_TABLE (OPC_EXT_0F18_REG_3) },
+ { MOD_TABLE (MOD_0F18_REG_0) },
+ { 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 } },
},
- /* GRP_0F71 */
+ /* REG_0F71 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
- { OPC_EXT_TABLE (OPC_EXT_0F71_REG_2) },
+ { MOD_TABLE (MOD_0F71_REG_2) },
{ "(bad)", { XX } },
- { OPC_EXT_TABLE (OPC_EXT_0F71_REG_4) },
+ { MOD_TABLE (MOD_0F71_REG_4) },
{ "(bad)", { XX } },
- { OPC_EXT_TABLE (OPC_EXT_0F71_REG_6) },
+ { MOD_TABLE (MOD_0F71_REG_6) },
{ "(bad)", { XX } },
},
- /* GRP_0F72 */
+ /* REG_0F72 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
- { OPC_EXT_TABLE (OPC_EXT_0F72_REG_2) },
+ { MOD_TABLE (MOD_0F72_REG_2) },
{ "(bad)", { XX } },
- { OPC_EXT_TABLE (OPC_EXT_0F72_REG_4) },
+ { MOD_TABLE (MOD_0F72_REG_4) },
{ "(bad)", { XX } },
- { OPC_EXT_TABLE (OPC_EXT_0F72_REG_6) },
+ { MOD_TABLE (MOD_0F72_REG_6) },
{ "(bad)", { XX } },
},
- /* GRP_0F73 */
+ /* REG_0F73 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
- { OPC_EXT_TABLE (OPC_EXT_0F73_REG_2) },
- { OPC_EXT_TABLE (OPC_EXT_0F73_REG_3) },
+ { MOD_TABLE (MOD_0F73_REG_2) },
+ { MOD_TABLE (MOD_0F73_REG_3) },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
- { OPC_EXT_TABLE (OPC_EXT_0F73_REG_6) },
- { OPC_EXT_TABLE (OPC_EXT_0F73_REG_7) },
+ { MOD_TABLE (MOD_0F73_REG_6) },
+ { MOD_TABLE (MOD_0F73_REG_7) },
},
- /* GRP_0FA6 */
+ /* REG_0FA6 */
{
{ "montmul", { { OP_0f07, 0 } } },
{ "xsha1", { { OP_0f07, 0 } } },
{ "(bad)", { { OP_0f07, 0 } } },
{ "(bad)", { { OP_0f07, 0 } } },
},
- /* GRP_0FA7 */
+ /* REG_0FA7 */
{
{ "xstore-rng", { { OP_0f07, 0 } } },
{ "xcrypt-ecb", { { OP_0f07, 0 } } },
{ "(bad)", { { OP_0f07, 0 } } },
{ "(bad)", { { OP_0f07, 0 } } },
},
- /* GRP_0FAE */
+ /* REG_0FAE */
{
- { OPC_EXT_TABLE (OPC_EXT_0FAE_REG_0) },
- { OPC_EXT_TABLE (OPC_EXT_0FAE_REG_1) },
- { OPC_EXT_TABLE (OPC_EXT_0FAE_REG_2) },
- { OPC_EXT_TABLE (OPC_EXT_0FAE_REG_3) },
+ { MOD_TABLE (MOD_0FAE_REG_0) },
+ { MOD_TABLE (MOD_0FAE_REG_1) },
+ { MOD_TABLE (MOD_0FAE_REG_2) },
+ { MOD_TABLE (MOD_0FAE_REG_3) },
{ "(bad)", { XX } },
- { OPC_EXT_TABLE (OPC_EXT_0FAE_REG_5) },
- { OPC_EXT_TABLE (OPC_EXT_0FAE_REG_6) },
- { OPC_EXT_TABLE (OPC_EXT_0FAE_REG_7) },
+ { MOD_TABLE (MOD_0FAE_REG_5) },
+ { MOD_TABLE (MOD_0FAE_REG_6) },
+ { MOD_TABLE (MOD_0FAE_REG_7) },
},
- /* GRP_0FBA */
+ /* REG_0FBA */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "btrQ", { Ev, Ib } },
{ "btcQ", { Ev, Ib } },
},
- /* GRP_0FC7 */
+ /* REG_0FC7 */
{
{ "(bad)", { XX } },
{ "cmpxchg8b", { { CMPXCHG8B_Fixup, q_mode } } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
- { OPC_EXT_TABLE (OPC_EXT_0FC7_REG_6) },
- { OPC_EXT_TABLE (OPC_EXT_0FC7_REG_7) },
+ { MOD_TABLE (MOD_0FC7_REG_6) },
+ { MOD_TABLE (MOD_0FC7_REG_7) },
},
};
-static const struct dis386 prefix_user_table[][4] = {
- /* PREGRP_90 */
+static const struct dis386 prefix_table[][4] = {
+ /* PREFIX_90 */
{
{ "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } } },
{ "pause", { XX } },
{ "(bad)", { XX } },
},
- /* PREGRP_0F10 */
+ /* PREFIX_0F10 */
{
{ "movups", { XM, EXx } },
{ "movss", { XM, EXd } },
{ "movsd", { XM, EXq } },
},
- /* PREGRP_0F11 */
+ /* PREFIX_0F11 */
{
- { "movups", { EXx, XM } },
- { "movss", { EXd, XM } },
- { "movupd", { EXx, XM } },
- { "movsd", { EXq, XM } },
+ { "movups", { EXx, XM } },
+ { "movss", { EXd, XM } },
+ { "movupd", { EXx, XM } },
+ { "movsd", { EXq, XM } },
},
- /* PREGRP_0F12 */
+ /* PREFIX_0F12 */
{
- { OPC_EXT_TABLE (OPC_EXT_0F12_PREFIX_0) },
+ { MOD_TABLE (MOD_0F12_PREFIX_0) },
{ "movsldup", { XM, EXx } },
{ "movlpd", { XM, EXq } },
{ "movddup", { XM, EXq } },
},
- /* PREGRP_0F16 */
+ /* PREFIX_0F16 */
{
- { OPC_EXT_TABLE (OPC_EXT_0F16_PREFIX_0) },
+ { MOD_TABLE (MOD_0F16_PREFIX_0) },
{ "movshdup", { XM, EXx } },
{ "movhpd", { XM, EXq } },
- { "(bad)", { XM, EXq } },
+ { "(bad)", { XX } },
},
- /* PREGRP_0F2A */
+ /* PREFIX_0F2A */
{
{ "cvtpi2ps", { XM, EMCq } },
- { "cvtsi2ssY", { XM, Ev } },
+ { "cvtsi2ss%LQ", { XM, Ev } },
{ "cvtpi2pd", { XM, EMCq } },
- { "cvtsi2sdY", { XM, Ev } },
+ { "cvtsi2sd%LQ", { XM, Ev } },
},
- /* PREGRP_0F2B */
+ /* PREFIX_0F2B */
{
- {"movntps", { Ev, XM } },
- {"movntss", { Ed, XM } },
- {"movntpd", { Ev, XM } },
- {"movntsd", { Eq, XM } },
+ { MOD_TABLE (MOD_0F2B_PREFIX_0) },
+ { MOD_TABLE (MOD_0F2B_PREFIX_1) },
+ { MOD_TABLE (MOD_0F2B_PREFIX_2) },
+ { MOD_TABLE (MOD_0F2B_PREFIX_3) },
},
- /* PREGRP_0F2C */
+ /* PREFIX_0F2C */
{
{ "cvttps2pi", { MXC, EXq } },
{ "cvttss2siY", { Gv, EXd } },
{ "cvttsd2siY", { Gv, EXq } },
},
- /* PREGRP_0F2D */
+ /* PREFIX_0F2D */
{
{ "cvtps2pi", { MXC, EXq } },
{ "cvtss2siY", { Gv, EXd } },
{ "cvtsd2siY", { Gv, EXq } },
},
- /* PREGRP_0F2E */
+ /* PREFIX_0F2E */
{
{ "ucomiss",{ XM, EXd } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
},
- /* PREGRP_0F2F */
+ /* PREFIX_0F2F */
{
{ "comiss", { XM, EXd } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
},
- /* PREGRP_0F51 */
+ /* PREFIX_0F51 */
{
{ "sqrtps", { XM, EXx } },
{ "sqrtss", { XM, EXd } },
{ "sqrtsd", { XM, EXq } },
},
- /* PREGRP_0F52 */
+ /* PREFIX_0F52 */
{
{ "rsqrtps",{ XM, EXx } },
{ "rsqrtss",{ XM, EXd } },
- { "(bad)", { XM, EXx } },
- { "(bad)", { XM, EXx } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
},
- /* PREGRP_0F53 */
+ /* PREFIX_0F53 */
{
{ "rcpps", { XM, EXx } },
{ "rcpss", { XM, EXd } },
- { "(bad)", { XM, EXx } },
- { "(bad)", { XM, EXx } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
},
- /* PREGRP_0F58 */
+ /* PREFIX_0F58 */
{
{ "addps", { XM, EXx } },
{ "addss", { XM, EXd } },
{ "addsd", { XM, EXq } },
},
- /* PREGRP_0F59 */
+ /* PREFIX_0F59 */
{
{ "mulps", { XM, EXx } },
{ "mulss", { XM, EXd } },
{ "mulsd", { XM, EXq } },
},
- /* PREGRP_0F5A */
+ /* PREFIX_0F5A */
{
{ "cvtps2pd", { XM, EXq } },
{ "cvtss2sd", { XM, EXd } },
{ "cvtsd2ss", { XM, EXq } },
},
- /* PREGRP_0F5B */
+ /* PREFIX_0F5B */
{
{ "cvtdq2ps", { XM, EXx } },
{ "cvttps2dq", { XM, EXx } },
{ "cvtps2dq", { XM, EXx } },
- { "(bad)", { XM, EXx } },
+ { "(bad)", { XX } },
},
- /* PREGRP_0F5C */
+ /* PREFIX_0F5C */
{
{ "subps", { XM, EXx } },
{ "subss", { XM, EXd } },
{ "subsd", { XM, EXq } },
},
- /* PREGRP_0F5D */
+ /* PREFIX_0F5D */
{
{ "minps", { XM, EXx } },
{ "minss", { XM, EXd } },
{ "minsd", { XM, EXq } },
},
- /* PREGRP_0F5E */
+ /* PREFIX_0F5E */
{
{ "divps", { XM, EXx } },
{ "divss", { XM, EXd } },
{ "divsd", { XM, EXq } },
},
- /* PREGRP_0F5F */
+ /* PREFIX_0F5F */
{
{ "maxps", { XM, EXx } },
{ "maxss", { XM, EXd } },
{ "maxsd", { XM, EXq } },
},
- /* PREGRP_0F60 */
+ /* PREFIX_0F60 */
{
{ "punpcklbw",{ MX, EMd } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
},
- /* PREGRP_0F61 */
+ /* PREFIX_0F61 */
{
{ "punpcklwd",{ MX, EMd } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
},
- /* PREGRP_0F62 */
+ /* PREFIX_0F62 */
{
{ "punpckldq",{ MX, EMd } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
},
- /* PREGRP_0F6C */
+ /* PREFIX_0F6C */
{
- { "(bad)", { MX, EXx } },
- { "(bad)", { XM, EXx } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
{ "punpcklqdq", { XM, EXx } },
- { "(bad)", { XM, EXx } },
+ { "(bad)", { XX } },
},
- /* PREGRP_0F6D */
+ /* PREFIX_0F6D */
{
- { "(bad)", { MX, EXx } },
- { "(bad)", { XM, EXx } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
{ "punpckhqdq", { XM, EXx } },
- { "(bad)", { XM, EXx } },
+ { "(bad)", { XX } },
},
- /* PREGRP_0F6F */
+ /* PREFIX_0F6F */
{
{ "movq", { MX, EM } },
{ "movdqu", { XM, EXx } },
{ "movdqa", { XM, EXx } },
- { "(bad)", { XM, EXx } },
+ { "(bad)", { XX } },
},
- /* PREGRP_0F70 */
+ /* PREFIX_0F70 */
{
{ "pshufw", { MX, EM, Ib } },
{ "pshufhw",{ XM, EXx, Ib } },
{ "pshuflw",{ XM, EXx, Ib } },
},
- /* PREGRP_0F78 */
+ /* PREFIX_0F73_REG_3 */
+ {
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "psrldq", { XS, Ib } },
+ { "(bad)", { XX } },
+ },
+
+ /* PREFIX_0F73_REG_7 */
+ {
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "pslldq", { XS, Ib } },
+ { "(bad)", { XX } },
+ },
+
+ /* PREFIX_0F78 */
{
{"vmread", { Em, Gm } },
{"(bad)", { XX } },
{"insertq", { XM, XS, Ib, Ib } },
},
- /* PREGRP_0F79 */
+ /* PREFIX_0F79 */
{
{"vmwrite", { Gm, Em } },
{"(bad)", { XX } },
{"insertq", { XM, XS } },
},
- /* PREGRP_0F7C */
+ /* PREFIX_0F7C */
{
- { "(bad)", { MX, EXx } },
- { "(bad)", { XM, EXx } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
{ "haddpd", { XM, EXx } },
{ "haddps", { XM, EXx } },
},
- /* PREGRP_0F7D */
+ /* PREFIX_0F7D */
{
- { "(bad)", { MX, EXx } },
- { "(bad)", { XM, EXx } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
{ "hsubpd", { XM, EXx } },
{ "hsubps", { XM, EXx } },
},
- /* PREGRP_0F7E */
+ /* PREFIX_0F7E */
{
{ "movK", { Edq, MX } },
{ "movq", { XM, EXq } },
{ "movK", { Edq, XM } },
- { "(bad)", { Ed, XM } },
+ { "(bad)", { XX } },
},
- /* PREGRP_0F7F */
+ /* PREFIX_0F7F */
{
{ "movq", { EM, MX } },
- { "movdqu", { EXx, XM } },
- { "movdqa", { EXx, XM } },
- { "(bad)", { EXx, XM } },
+ { "movdqu", { EXx, XM } },
+ { "movdqa", { EXx, XM } },
+ { "(bad)", { XX } },
},
- /* PREGRP_0FB8 */
+ /* PREFIX_0FB8 */
{
{ "(bad)", { XX } },
{ "popcntS", { Gv, Ev } },
{ "(bad)", { XX } },
},
- /* PREGRP_0FBD */
+ /* PREFIX_0FBD */
{
{ "bsrS", { Gv, Ev } },
{ "lzcntS", { Gv, Ev } },
{ "(bad)", { XX } },
},
- /* PREGRP_0FC2 */
+ /* PREFIX_0FC2 */
+ {
+ { "cmpps", { XM, EXx, CMP } },
+ { "cmpss", { XM, EXd, CMP } },
+ { "cmppd", { XM, EXx, CMP } },
+ { "cmpsd", { XM, EXq, CMP } },
+ },
+
+ /* PREFIX_0FC3 */
+ {
+ { "movntiS", { Ma, Gv } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ },
+
+ /* PREFIX_0FC7_REG_6 */
{
- { "", { XM, EXx, OPSIMD } }, /* See OP_SIMD_SUFFIX. */
- { "", { XM, EXd, OPSIMD } },
- { "", { XM, EXx, OPSIMD } },
- { "", { XM, EXq, OPSIMD } },
+ { "vmptrld",{ Mq } },
+ { "vmxon", { Mq } },
+ { "vmclear",{ Mq } },
+ { "(bad)", { XX } },
},
- /* PREGRP_0FD0 */
+ /* PREFIX_0FD0 */
{
- { "(bad)", { MX, EXx } },
- { "(bad)", { XM, EXx } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
{ "addsubpd", { XM, EXx } },
{ "addsubps", { XM, EXx } },
},
- /* PREGRP_0FD6 */
+ /* PREFIX_0FD6 */
{
- { "(bad)", { EXx, XM } },
+ { "(bad)", { XX } },
{ "movq2dq",{ XM, MS } },
{ "movq", { EXq, XM } },
{ "movdq2q",{ MX, XS } },
},
- /* PREGRP_0FE6 */
+ /* PREFIX_0FE6 */
{
- { "(bad)", { XM, EXx } },
+ { "(bad)", { XX } },
{ "cvtdq2pd", { XM, EXq } },
{ "cvttpd2dq", { XM, EXx } },
{ "cvtpd2dq", { XM, EXx } },
},
- /* PREGRP_0FE7 */
+ /* PREFIX_0FE7 */
{
- { "movntq", { EM, MX } },
- { "(bad)", { EM, XM } },
- { "movntdq",{ EM, XM } },
- { "(bad)", { EM, XM } },
+ { "movntq", { Mq, MX } },
+ { "(bad)", { XX } },
+ { MOD_TABLE (MOD_0FE7_PREFIX_2) },
+ { "(bad)", { XX } },
},
- /* PREGRP_0FF0 */
+ /* PREFIX_0FF0 */
{
- { "(bad)", { XM, EXx } },
- { "(bad)", { XM, EXx } },
- { "(bad)", { XM, EXx } },
- { OPC_EXT_TABLE (OPC_EXT_0FF0_PREFIX_3) },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { MOD_TABLE (MOD_0FF0_PREFIX_3) },
},
- /* PREGRP_0FF7 */
+ /* PREFIX_0FF7 */
{
{ "maskmovq", { MX, MS } },
- { "(bad)", { XM, EXx } },
+ { "(bad)", { XX } },
{ "maskmovdqu", { XM, XS } },
- { "(bad)", { XM, EXx } },
+ { "(bad)", { XX } },
},
- /* PREGRP_0F3810 */
+ /* PREFIX_0F3810 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
- { "pblendvb", {XM, EXx, XMM0 } },
+ { "pblendvb", { XM, EXx, XMM0 } },
{ "(bad)", { XX } },
},
- /* PREGRP_0F3814 */
+ /* PREFIX_0F3814 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
- { "blendvps", {XM, EXx, XMM0 } },
+ { "blendvps", { XM, EXx, XMM0 } },
{ "(bad)", { XX } },
},
- /* PREGRP_0F3815 */
+ /* PREFIX_0F3815 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
},
- /* PREGRP_0F3817 */
+ /* PREFIX_0F3817 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
},
- /* PREGRP_0F3820 */
+ /* PREFIX_0F3820 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
},
- /* PREGRP_0F3821 */
+ /* PREFIX_0F3821 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
},
- /* PREGRP_0F3822 */
+ /* PREFIX_0F3822 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
},
- /* PREGRP_0F3823 */
+ /* PREFIX_0F3823 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
},
- /* PREGRP_0F3824 */
+ /* PREFIX_0F3824 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
},
- /* PREGRP_0F3825 */
+ /* PREFIX_0F3825 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
},
- /* PREGRP_0F3828 */
+ /* PREFIX_0F3828 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
},
- /* PREGRP_0F3829 */
+ /* PREFIX_0F3829 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
},
- /* PREGRP_0F382A */
+ /* PREFIX_0F382A */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
- { "movntdqa", { XM, EM } },
+ { MOD_TABLE (MOD_0F382A_PREFIX_2) },
{ "(bad)", { XX } },
},
- /* PREGRP_0F382B */
+ /* PREFIX_0F382B */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
},
- /* PREGRP_0F3830 */
+ /* PREFIX_0F3830 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
},
- /* PREGRP_0F3831 */
+ /* PREFIX_0F3831 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
},
- /* PREGRP_0F3832 */
+ /* PREFIX_0F3832 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
},
- /* PREGRP_0F3833 */
+ /* PREFIX_0F3833 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
},
- /* PREGRP_0F3834 */
+ /* PREFIX_0F3834 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
},
- /* PREGRP_0F3835 */
+ /* PREFIX_0F3835 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
},
- /* PREGRP_0F3837 */
+ /* PREFIX_0F3837 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
},
- /* PREGRP_0F3838 */
+ /* PREFIX_0F3838 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
},
- /* PREGRP_0F3839 */
+ /* PREFIX_0F3839 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
},
- /* PREGRP_0F383A */
+ /* PREFIX_0F383A */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
},
- /* PREGRP_0F383B */
+ /* PREFIX_0F383B */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
},
- /* PREGRP_0F383C */
+ /* PREFIX_0F383C */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
},
- /* PREGRP_0F383D */
+ /* PREFIX_0F383D */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
},
- /* PREGRP_0F383E */
+ /* PREFIX_0F383E */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
},
- /* PREGRP_0F383F */
+ /* PREFIX_0F383F */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
},
- /* PREGRP_0F3840 */
+ /* PREFIX_0F3840 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
},
- /* PREGRP_0F3841 */
+ /* PREFIX_0F3841 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
},
- /* PREGRP_0F38F0 */
+ /* PREFIX_0F38F0 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "crc32", { Gdq, { CRC32_Fixup, b_mode } } },
},
- /* PREGRP_0F38F1 */
+ /* PREFIX_0F38F1 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "crc32", { Gdq, { CRC32_Fixup, v_mode } } },
},
- /* PREGRP_0F3A08 */
+ /* PREFIX_0F3A08 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
},
- /* PREGRP_0F3A09 */
+ /* PREFIX_0F3A09 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
},
- /* PREGRP_0F3A0A */
+ /* PREFIX_0F3A0A */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
},
- /* PREGRP_0F3A0B */
+ /* PREFIX_0F3A0B */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
},
- /* PREGRP_0F3A0C */
+ /* PREFIX_0F3A0C */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
},
- /* PREGRP_0F3A0D */
+ /* PREFIX_0F3A0D */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
},
- /* PREGRP_0F3A0E */
+ /* PREFIX_0F3A0E */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
},
- /* PREGRP_0F3A14 */
+ /* PREFIX_0F3A14 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
},
- /* PREGRP_0F3A15 */
+ /* PREFIX_0F3A15 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
},
- /* PREGRP_0F3A16 */
+ /* PREFIX_0F3A16 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
},
- /* PREGRP_0F3A17 */
+ /* PREFIX_0F3A17 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
},
- /* PREGRP_0F3A20 */
+ /* PREFIX_0F3A20 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
},
- /* PREGRP_0F3A21 */
+ /* PREFIX_0F3A21 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
},
- /* PREGRP_0F3A22 */
+ /* PREFIX_0F3A22 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
},
- /* PREGRP_0F3A40 */
+ /* PREFIX_0F3A40 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
},
- /* PREGRP_0F3A41 */
+ /* PREFIX_0F3A41 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
},
- /* PREGRP_0F3A42 */
+ /* PREFIX_0F3A42 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
},
- /* PREGRP_0F3A60 */
+ /* PREFIX_0F3A60 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
},
- /* PREGRP_0F3A61 */
+ /* PREFIX_0F3A61 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
},
- /* PREGRP_0F3A62 */
+ /* PREFIX_0F3A62 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
},
- /* PREGRP_0F3A63 */
+ /* PREFIX_0F3A63 */
{
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "pcmpistri", { XM, EXx, Ib } },
{ "(bad)", { XX } },
},
-
- /* PREGRP_0F73_REG_3 */
- {
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "psrldq", { MS, Ib } },
- { "(bad)", { XX } },
- },
-
- /* PREGRP_0F73_REG_7 */
- {
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "pslldq", { MS, Ib } },
- { "(bad)", { XX } },
- },
-
- /*PREGRP_0FC7_REG_6 */
- {
- { "vmptrld",{ Mq } },
- { "vmxon", { Mq } },
- { "vmclear",{ Mq } },
- { "(bad)", { XX } },
- },
};
static const struct dis386 x86_64_table[][2] = {
/* X86_64_62 */
{
- { OPC_EXT_TABLE (OPC_EXT_62_32BIT) },
+ { MOD_TABLE (MOD_62_32BIT) },
{ "(bad)", { XX } },
},
/* X86_64_C4 */
{
- { OPC_EXT_TABLE (OPC_EXT_C4_32BIT) },
+ { MOD_TABLE (MOD_C4_32BIT) },
{ "(bad)", { XX } },
},
/* X86_64_C5 */
{
- { OPC_EXT_TABLE (OPC_EXT_C5_32BIT) },
+ { MOD_TABLE (MOD_C5_32BIT) },
{ "(bad)", { XX } },
},
/* THREE_BYTE_0F38 */
{
/* 00 */
- { "pshufb", { MX, EM } },
- { "phaddw", { MX, EM } },
- { "phaddd", { MX, EM } },
- { "phaddsw", { MX, EM } },
- { "pmaddubsw", { MX, EM } },
- { "phsubw", { MX, EM } },
- { "phsubd", { MX, EM } },
- { "phsubsw", { MX, EM } },
+ { "pshufb", { MX, EM } },
+ { "phaddw", { MX, EM } },
+ { "phaddd", { MX, EM } },
+ { "phaddsw", { MX, EM } },
+ { "pmaddubsw", { MX, EM } },
+ { "phsubw", { MX, EM } },
+ { "phsubd", { MX, EM } },
+ { "phsubsw", { MX, EM } },
/* 08 */
- { "psignb", { MX, EM } },
- { "psignw", { MX, EM } },
- { "psignd", { MX, EM } },
- { "pmulhrsw", { MX, EM } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "psignb", { MX, EM } },
+ { "psignw", { MX, EM } },
+ { "psignd", { MX, EM } },
+ { "pmulhrsw", { MX, EM } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* 10 */
- { PREGRP (PREGRP_0F3810) },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { PREGRP (PREGRP_0F3814) },
- { PREGRP (PREGRP_0F3815) },
- { "(bad)", { XX } },
- { PREGRP (PREGRP_0F3817) },
+ { PREFIX_TABLE (PREFIX_0F3810) },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { PREFIX_TABLE (PREFIX_0F3814) },
+ { PREFIX_TABLE (PREFIX_0F3815) },
+ { "(bad)", { XX } },
+ { PREFIX_TABLE (PREFIX_0F3817) },
/* 18 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "pabsb", { MX, EM } },
- { "pabsw", { MX, EM } },
- { "pabsd", { MX, EM } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "pabsb", { MX, EM } },
+ { "pabsw", { MX, EM } },
+ { "pabsd", { MX, EM } },
+ { "(bad)", { XX } },
/* 20 */
- { PREGRP (PREGRP_0F3820) },
- { PREGRP (PREGRP_0F3821) },
- { PREGRP (PREGRP_0F3822) },
- { PREGRP (PREGRP_0F3823) },
- { PREGRP (PREGRP_0F3824) },
- { PREGRP (PREGRP_0F3825) },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { PREFIX_TABLE (PREFIX_0F3820) },
+ { PREFIX_TABLE (PREFIX_0F3821) },
+ { PREFIX_TABLE (PREFIX_0F3822) },
+ { PREFIX_TABLE (PREFIX_0F3823) },
+ { PREFIX_TABLE (PREFIX_0F3824) },
+ { PREFIX_TABLE (PREFIX_0F3825) },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* 28 */
- { PREGRP (PREGRP_0F3828) },
- { PREGRP (PREGRP_0F3829) },
- { PREGRP (PREGRP_0F382A) },
- { PREGRP (PREGRP_0F382B) },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { PREFIX_TABLE (PREFIX_0F3828) },
+ { PREFIX_TABLE (PREFIX_0F3829) },
+ { PREFIX_TABLE (PREFIX_0F382A) },
+ { PREFIX_TABLE (PREFIX_0F382B) },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* 30 */
- { PREGRP (PREGRP_0F3830) },
- { PREGRP (PREGRP_0F3831) },
- { PREGRP (PREGRP_0F3832) },
- { PREGRP (PREGRP_0F3833) },
- { PREGRP (PREGRP_0F3834) },
- { PREGRP (PREGRP_0F3835) },
- { "(bad)", { XX } },
- { PREGRP (PREGRP_0F3837) },
+ { PREFIX_TABLE (PREFIX_0F3830) },
+ { PREFIX_TABLE (PREFIX_0F3831) },
+ { PREFIX_TABLE (PREFIX_0F3832) },
+ { PREFIX_TABLE (PREFIX_0F3833) },
+ { PREFIX_TABLE (PREFIX_0F3834) },
+ { PREFIX_TABLE (PREFIX_0F3835) },
+ { "(bad)", { XX } },
+ { PREFIX_TABLE (PREFIX_0F3837) },
/* 38 */
- { PREGRP (PREGRP_0F3838) },
- { PREGRP (PREGRP_0F3839) },
- { PREGRP (PREGRP_0F383A) },
- { PREGRP (PREGRP_0F383B) },
- { PREGRP (PREGRP_0F383C) },
- { PREGRP (PREGRP_0F383D) },
- { PREGRP (PREGRP_0F383E) },
- { PREGRP (PREGRP_0F383F) },
+ { PREFIX_TABLE (PREFIX_0F3838) },
+ { PREFIX_TABLE (PREFIX_0F3839) },
+ { PREFIX_TABLE (PREFIX_0F383A) },
+ { PREFIX_TABLE (PREFIX_0F383B) },
+ { PREFIX_TABLE (PREFIX_0F383C) },
+ { PREFIX_TABLE (PREFIX_0F383D) },
+ { PREFIX_TABLE (PREFIX_0F383E) },
+ { PREFIX_TABLE (PREFIX_0F383F) },
/* 40 */
- { PREGRP (PREGRP_0F3840) },
- { PREGRP (PREGRP_0F3841) },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { PREFIX_TABLE (PREFIX_0F3840) },
+ { PREFIX_TABLE (PREFIX_0F3841) },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* 48 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* 50 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* 58 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* 60 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* 68 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* 70 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* 78 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* 80 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* 88 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* 90 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* 98 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* a0 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* a8 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* b0 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* b8 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* c0 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* c8 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* d0 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* d8 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* e0 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* e8 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* f0 */
- { PREGRP (PREGRP_0F38F0) },
- { PREGRP (PREGRP_0F38F1) },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { PREFIX_TABLE (PREFIX_0F38F0) },
+ { PREFIX_TABLE (PREFIX_0F38F1) },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* f8 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
},
/* THREE_BYTE_0F3A */
{
/* 00 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* 08 */
- { PREGRP (PREGRP_0F3A08) },
- { PREGRP (PREGRP_0F3A09) },
- { PREGRP (PREGRP_0F3A0A) },
- { PREGRP (PREGRP_0F3A0B) },
- { PREGRP (PREGRP_0F3A0C) },
- { PREGRP (PREGRP_0F3A0D) },
- { PREGRP (PREGRP_0F3A0E) },
- { "palignr", { MX, EM, Ib } },
+ { PREFIX_TABLE (PREFIX_0F3A08) },
+ { PREFIX_TABLE (PREFIX_0F3A09) },
+ { PREFIX_TABLE (PREFIX_0F3A0A) },
+ { PREFIX_TABLE (PREFIX_0F3A0B) },
+ { PREFIX_TABLE (PREFIX_0F3A0C) },
+ { PREFIX_TABLE (PREFIX_0F3A0D) },
+ { PREFIX_TABLE (PREFIX_0F3A0E) },
+ { "palignr", { MX, EM, Ib } },
/* 10 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { PREGRP (PREGRP_0F3A14) },
- { PREGRP (PREGRP_0F3A15) },
- { PREGRP (PREGRP_0F3A16) },
- { PREGRP (PREGRP_0F3A17) },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { 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)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* 20 */
- { PREGRP (PREGRP_0F3A20) },
- { PREGRP (PREGRP_0F3A21) },
- { PREGRP (PREGRP_0F3A22) },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { PREFIX_TABLE (PREFIX_0F3A20) },
+ { PREFIX_TABLE (PREFIX_0F3A21) },
+ { PREFIX_TABLE (PREFIX_0F3A22) },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* 28 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* 30 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* 38 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* 40 */
- { PREGRP (PREGRP_0F3A40) },
- { PREGRP (PREGRP_0F3A41) },
- { PREGRP (PREGRP_0F3A42) },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { PREFIX_TABLE (PREFIX_0F3A40) },
+ { PREFIX_TABLE (PREFIX_0F3A41) },
+ { PREFIX_TABLE (PREFIX_0F3A42) },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* 48 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* 50 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* 58 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* 60 */
- { PREGRP (PREGRP_0F3A60) },
- { PREGRP (PREGRP_0F3A61) },
- { PREGRP (PREGRP_0F3A62) },
- { PREGRP (PREGRP_0F3A63) },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { PREFIX_TABLE (PREFIX_0F3A60) },
+ { PREFIX_TABLE (PREFIX_0F3A61) },
+ { PREFIX_TABLE (PREFIX_0F3A62) },
+ { PREFIX_TABLE (PREFIX_0F3A63) },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* 68 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* 70 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* 78 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* 80 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* 88 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* 90 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* 98 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* a0 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* a8 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* b0 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* b8 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* c0 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* c8 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* d0 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* d8 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* e0 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* e8 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* f0 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* f8 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
},
- /* THREE_BYTE_SSE5_0F7A */
+ /* THREE_BYTE_0F7A */
{
/* 00 */
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* 30 */
{ "cvtph2ps", { XM, EXd } },
{ "cvtps2ph", { EXd, XM } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* 38 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* 40 */
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
{ "phaddbw", { XM, EXq } },
{ "phaddbd", { XM, EXq } },
{ "phaddbq", { XM, EXq } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
{ "phaddwd", { XM, EXq } },
{ "phaddwq", { XM, EXq } },
/* 48 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
{ "phadddq", { XM, EXq } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* 50 */
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
{ "phaddubw", { XM, EXq } },
{ "phaddubd", { XM, EXq } },
{ "phaddubq", { XM, EXq } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
{ "phadduwd", { XM, EXq } },
{ "phadduwq", { XM, EXq } },
/* 58 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
{ "phaddudq", { XM, EXq } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* 60 */
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
{ "phsubbw", { XM, EXq } },
{ "phsubbd", { XM, EXq } },
{ "phsubbq", { XM, EXq } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* 68 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* 70 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* 78 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* 80 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* 88 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* 90 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* 98 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* a0 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* a8 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* b0 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* b8 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* c0 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* c8 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* d0 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* d8 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* e0 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* e8 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* f0 */
{ "(bad)", { XX } },
{ "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* f8 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
},
- /* THREE_BYTE_SSE5_0F7B */
+ /* THREE_BYTE_0F7B */
{
/* 00 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* 08 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* 10 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* 18 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* 20 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* 28 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* 30 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
/* 38 */
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* 40 */
{ "protb", { XM, EXq, Ib } },
{ "protw", { XM, EXq, Ib } },
{ "pshad", { XM, EXq, Ib } },
{ "pshaq", { XM, EXq, Ib } },
{ "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* 50 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* 58 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* 60 */
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* 68 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* 70 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* 78 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* 80 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* 88 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* 90 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* 98 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* a0 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* a8 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* b0 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* b8 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* c0 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- /* c8 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ /* c8 */
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* d0 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* d8 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* e0 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* e8 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* f0 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
/* f8 */
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
- { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
+ { "(bad)", { XX } },
}
};
-static const struct dis386 opc_ext_table[][2] = {
+static const struct dis386 mod_table[][2] = {
{
- /* OPC_EXT_8D */
+ /* MOD_8D */
{ "leaS", { Gv, M } },
{ "(bad)", { XX } },
},
{
- /* OPC_EXT_0F13 */
- { "movlpX", { EXq, XM } },
- { "(bad)", { XX } },
+ /* MOD_0F01_REG_0 */
+ { X86_64_TABLE (X86_64_0F01_REG_0) },
+ { RM_TABLE (RM_0F01_REG_0) },
},
{
- /* OPC_EXT_0F17 */
- { "movhpX", { EXq, XM } },
- { "(bad)", { XX } },
+ /* MOD_0F01_REG_1 */
+ { X86_64_TABLE (X86_64_0F01_REG_1) },
+ { RM_TABLE (RM_0F01_REG_1) },
},
{
- /* OPC_EXT_0F20 */
+ /* MOD_0F01_REG_2 */
+ { X86_64_TABLE (X86_64_0F01_REG_2) },
{ "(bad)", { XX } },
- { "movZ", { Rm, Cm } },
},
{
- /* OPC_EXT_0F21 */
- { "(bad)", { XX } },
- { "movZ", { Rm, Dm } },
+ /* MOD_0F01_REG_3 */
+ { X86_64_TABLE (X86_64_0F01_REG_3) },
+ { RM_TABLE (RM_0F01_REG_3) },
+ },
+ {
+ /* MOD_0F01_REG_7 */
+ { "invlpg", { Mb } },
+ { RM_TABLE (RM_0F01_REG_7) },
},
{
- /* OPC_EXT_0F22 */
+ /* MOD_0F12_PREFIX_0 */
+ { "movlps", { XM, EXq } },
+ { "movhlps", { XM, EXq } },
+ },
+ {
+ /* MOD_0F13 */
+ { "movlpX", { EXq, XM } },
{ "(bad)", { XX } },
- { "movZ", { Cm, Rm } },
},
{
- /* OPC_EXT_0F23 */
+ /* MOD_0F16_PREFIX_0 */
+ { "movhps", { XM, EXq } },
+ { "movlhps", { XM, EXq } },
+ },
+ {
+ /* MOD_0F17 */
+ { "movhpX", { EXq, XM } },
{ "(bad)", { XX } },
- { "movZ", { Dm, Rm } },
},
{
- /* OPC_EXT_0F24 */
- { THREE_BYTE_TABLE (THREE_BYTE_0F24) },
- { "movL", { Rd, Td } },
+ /* MOD_0F18_REG_0 */
+ { "prefetchnta", { Mb } },
+ { "(bad)", { XX } },
},
{
- /* OPC_EXT_0F26 */
+ /* MOD_0F18_REG_1 */
+ { "prefetcht0", { Mb } },
{ "(bad)", { XX } },
- { "movL", { Td, Rd } },
},
{
- /* OPC_EXT_0FB2 */
- { "lssS", { Gv, Mp } },
+ /* MOD_0F18_REG_2 */
+ { "prefetcht1", { Mb } },
{ "(bad)", { XX } },
},
{
- /* OPC_EXT_0FB4 */
- { "lfsS", { Gv, Mp } },
+ /* MOD_0F18_REG_3 */
+ { "prefetcht2", { Mb } },
{ "(bad)", { XX } },
},
{
- /* OPC_EXT_0FB5 */
- { "lgsS", { Gv, Mp } },
+ /* MOD_0F20 */
{ "(bad)", { XX } },
+ { "movZ", { Rm, Cm } },
},
{
- /* OPC_EXT_0F01_REG_0 */
- { X86_64_TABLE (X86_64_0F01_REG_0) },
- { OPC_EXT_RM_TABLE (OPC_EXT_RM_0F01_REG_0) },
+ /* MOD_0F21 */
+ { "(bad)", { XX } },
+ { "movZ", { Rm, Dm } },
},
{
- /* OPC_EXT_0F01_REG_1 */
- { X86_64_TABLE (X86_64_0F01_REG_1) },
- { OPC_EXT_RM_TABLE (OPC_EXT_RM_0F01_REG_1) },
+ /* MOD_0F22 */
+ { "(bad)", { XX } },
+ { "movZ", { Cm, Rm } },
},
{
- /* OPC_EXT_0F01_REG_2 */
- { X86_64_TABLE (X86_64_0F01_REG_2) },
+ /* MOD_0F23 */
{ "(bad)", { XX } },
+ { "movZ", { Dm, Rm } },
},
{
- /* OPC_EXT_0F01_REG_3 */
- { X86_64_TABLE (X86_64_0F01_REG_3) },
- { OPC_EXT_RM_TABLE (OPC_EXT_RM_0F01_REG_3) },
+ /* MOD_0F24 */
+ { THREE_BYTE_TABLE (THREE_BYTE_0F24) },
+ { "movL", { Rd, Td } },
},
{
- /* OPC_EXT_0F01_REG_7 */
- { "invlpg", { Mb } },
- { OPC_EXT_RM_TABLE (OPC_EXT_RM_0F01_REG_7) },
+ /* MOD_0F26 */
+ { "(bad)", { XX } },
+ { "movL", { Td, Rd } },
},
{
- /* OPC_EXT_0F18_REG_0 */
- { "prefetchnta", { Mb } },
+ /* MOD_0F2B_PREFIX_0 */
+ {"movntps", { Mx, XM } },
{ "(bad)", { XX } },
},
{
- /* OPC_EXT_0F18_REG_1 */
- { "prefetcht0", { Mb } },
+ /* MOD_0F2B_PREFIX_1 */
+ {"movntss", { Md, XM } },
{ "(bad)", { XX } },
},
{
- /* OPC_EXT_0F18_REG_2 */
- { "prefetcht1", { Mb } },
+ /* MOD_0F2B_PREFIX_2 */
+ {"movntpd", { Mx, XM } },
{ "(bad)", { XX } },
},
{
- /* OPC_EXT_0F18_REG_3 */
- { "prefetcht2", { Mb } },
+ /* MOD_0F2B_PREFIX_3 */
+ {"movntsd", { Mq, XM } },
+ { "(bad)", { XX } },
+ },
+ {
+ /* MOD_0F51 */
{ "(bad)", { XX } },
+ { "movmskpX", { Gdq, XS } },
},
{
- /* OPC_EXT_0F71_REG_2 */
+ /* MOD_0F71_REG_2 */
{ "(bad)", { XX } },
{ "psrlw", { MS, Ib } },
},
{
- /* OPC_EXT_0F71_REG_4 */
+ /* MOD_0F71_REG_4 */
{ "(bad)", { XX } },
{ "psraw", { MS, Ib } },
},
{
- /* OPC_EXT_0F71_REG_6 */
+ /* MOD_0F71_REG_6 */
{ "(bad)", { XX } },
{ "psllw", { MS, Ib } },
},
{
- /* OPC_EXT_0F72_REG_2 */
+ /* MOD_0F72_REG_2 */
{ "(bad)", { XX } },
{ "psrld", { MS, Ib } },
},
{
- /* OPC_EXT_0F72_REG_4 */
+ /* MOD_0F72_REG_4 */
{ "(bad)", { XX } },
{ "psrad", { MS, Ib } },
},
{
- /* OPC_EXT_0F72_REG_6 */
+ /* MOD_0F72_REG_6 */
{ "(bad)", { XX } },
{ "pslld", { MS, Ib } },
},
{
- /* OPC_EXT_0F73_REG_2 */
+ /* MOD_0F73_REG_2 */
{ "(bad)", { XX } },
{ "psrlq", { MS, Ib } },
},
{
- /* OPC_EXT_0F73_REG_3 */
+ /* MOD_0F73_REG_3 */
{ "(bad)", { XX } },
- { PREGRP (PREGRP_0F73_REG_3) },
+ { PREFIX_TABLE (PREFIX_0F73_REG_3) },
},
{
- /* OPC_EXT_0F73_REG_6 */
+ /* MOD_0F73_REG_6 */
{ "(bad)", { XX } },
{ "psllq", { MS, Ib } },
},
{
- /* OPC_EXT_0F73_REG_7 */
+ /* MOD_0F73_REG_7 */
{ "(bad)", { XX } },
- { PREGRP (PREGRP_0F73_REG_7) },
+ { PREFIX_TABLE (PREFIX_0F73_REG_7) },
},
{
- /* OPC_EXT_0FAE_REG_0 */
+ /* MOD_0FAE_REG_0 */
{ "fxsave", { M } },
{ "(bad)", { XX } },
},
{
- /* OPC_EXT_0FAE_REG_1 */
+ /* MOD_0FAE_REG_1 */
{ "fxrstor", { M } },
{ "(bad)", { XX } },
},
{
- /* OPC_EXT_0FAE_REG_2 */
+ /* MOD_0FAE_REG_2 */
{ "ldmxcsr", { Md } },
{ "(bad)", { XX } },
},
{
- /* OPC_EXT_0FAE_REG_3 */
+ /* MOD_0FAE_REG_3 */
{ "stmxcsr", { Md } },
{ "(bad)", { XX } },
},
{
- /* OPC_EXT_0FAE_REG_5 */
+ /* MOD_0FAE_REG_5 */
{ "(bad)", { XX } },
- { OPC_EXT_RM_TABLE (OPC_EXT_RM_0FAE_REG_5) },
+ { RM_TABLE (RM_0FAE_REG_5) },
},
{
- /* OPC_EXT_0FAE_REG_6 */
+ /* MOD_0FAE_REG_6 */
{ "(bad)", { XX } },
- { OPC_EXT_RM_TABLE (OPC_EXT_RM_0FAE_REG_6) },
+ { RM_TABLE (RM_0FAE_REG_6) },
},
{
- /* OPC_EXT_0FAE_REG_7 */
+ /* MOD_0FAE_REG_7 */
{ "clflush", { Mb } },
- { OPC_EXT_RM_TABLE (OPC_EXT_RM_0FAE_REG_7) },
+ { RM_TABLE (RM_0FAE_REG_7) },
+ },
+ {
+ /* MOD_0FB2 */
+ { "lssS", { Gv, Mp } },
+ { "(bad)", { XX } },
+ },
+ {
+ /* MOD_0FB4 */
+ { "lfsS", { Gv, Mp } },
+ { "(bad)", { XX } },
+ },
+ {
+ /* MOD_0FB5 */
+ { "lgsS", { Gv, Mp } },
+ { "(bad)", { XX } },
},
{
- /* OPC_EXT_0FC7_REG_6 */
- { PREGRP (PREGRP_0FC7_REG_6) },
+ /* MOD_0FC7_REG_6 */
+ { PREFIX_TABLE (PREFIX_0FC7_REG_6) },
{ "(bad)", { XX } },
},
{
- /* OPC_EXT_0FC7_REG_7 */
+ /* MOD_0FC7_REG_7 */
{ "vmptrst", { Mq } },
{ "(bad)", { XX } },
},
{
- /* OPC_EXT_0F12_PREFIX_0 */
- { "movlpX", { XM, EXq } },
- { "movhlpX", { XM, EXq } },
+ /* MOD_0FD7 */
+ { "(bad)", { XX } },
+ { "pmovmskb", { Gdq, MS } },
},
{
- /* OPC_EXT_0F16_PREFIX_0 */
- { "movhpX", { XM, EXq } },
- { "movlhpX", { XM, EXq } },
+ /* MOD_0FE7_PREFIX_2 */
+ { "movntdq", { Mx, XM } },
+ { "(bad)", { XX } },
},
{
- /* OPC_EXT_0FF0_PREFIX_3 */
+ /* MOD_0FF0_PREFIX_3 */
{ "lddqu", { XM, M } },
{ "(bad)", { XX } },
},
{
- /* OPC_EXT_62_32BIT */
+ /* MOD_0F382A_PREFIX_2 */
+ { "movntdqa", { XM, Mx } },
+ { "(bad)", { XX } },
+ },
+ {
+ /* MOD_62_32BIT */
{ "bound{S|}", { Gv, Ma } },
{ "(bad)", { XX } },
},
{
- /* OPC_EXT_C4_32BIT */
+ /* MOD_C4_32BIT */
{ "lesS", { Gv, Mp } },
{ "(bad)", { XX } },
},
{
- /* OPC_EXT_C5_32BIT */
+ /* MOD_C5_32BIT */
{ "ldsS", { Gv, Mp } },
{ "(bad)", { XX } },
},
};
-static const struct dis386 opc_ext_rm_table[][8] = {
+static const struct dis386 rm_table[][8] = {
{
- /* OPC_EXT_RM_0F01_REG_0 */
+ /* RM_0F01_REG_0 */
{ "(bad)", { XX } },
{ "vmcall", { Skip_MODRM } },
{ "vmlaunch", { Skip_MODRM } },
{ "(bad)", { XX } },
},
{
- /* OPC_EXT_RM_0F01_REG_1 */
+ /* RM_0F01_REG_1 */
{ "monitor", { { OP_Monitor, 0 } } },
{ "mwait", { { OP_Mwait, 0 } } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
},
{
- /* OPC_EXT_RM_0F01_REG_3 */
+ /* RM_0F01_REG_3 */
{ "vmrun", { Skip_MODRM } },
{ "vmmcall", { Skip_MODRM } },
{ "vmload", { Skip_MODRM } },
{ "invlpga", { Skip_MODRM } },
},
{
- /* OPC_EXT_RM_0F01_REG_7 */
+ /* RM_0F01_REG_7 */
{ "swapgs", { Skip_MODRM } },
{ "rdtscp", { Skip_MODRM } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
},
{
- /* OPC_EXT_RM_0FAE_REG_5 */
+ /* RM_0FAE_REG_5 */
{ "lfence", { Skip_MODRM } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
},
{
- /* OPC_EXT_RM_0FAE_REG_6 */
+ /* RM_0FAE_REG_6 */
{ "mfence", { Skip_MODRM } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
},
{
- /* OPC_EXT_RM_0FAE_REG_7 */
+ /* RM_0FAE_REG_7 */
{ "sfence", { Skip_MODRM } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
*/
static char intel_syntax;
+static char intel_mnemonic = !SYSV386_COMPAT;
static char open_char;
static char close_char;
static char separator_char;
fprintf (stream, _(" i8086 Disassemble in 16bit mode\n"));
fprintf (stream, _(" att Display instruction in AT&T syntax\n"));
fprintf (stream, _(" intel Display instruction in Intel syntax\n"));
+ fprintf (stream, _(" att-mnemonic\n"
+ " Display instruction in AT&T mnemonic\n"));
+ fprintf (stream, _(" intel-mnemonic\n"
+ " Display instruction in Intel mnemonic\n"));
fprintf (stream, _(" addr64 Assume 64bit address size\n"));
fprintf (stream, _(" addr32 Assume 32bit address size\n"));
fprintf (stream, _(" addr16 Assume 16bit address size\n"));
switch (dp->op[0].bytemode)
{
- case USE_GROUPS:
- dp = &grps[dp->op[1].bytemode][modrm.reg];
+ case USE_REG_TABLE:
+ dp = ®_table[dp->op[1].bytemode][modrm.reg];
+ break;
+
+ case USE_MOD_TABLE:
+ index = modrm.mod == 0x3 ? 1 : 0;
+ dp = &mod_table[dp->op[1].bytemode][index];
+ break;
+
+ case USE_RM_TABLE:
+ dp = &rm_table[dp->op[1].bytemode][modrm.rm];
break;
case USE_PREFIX_TABLE:
}
}
}
- dp = &prefix_user_table[dp->op[1].bytemode][index];
+ dp = &prefix_table[dp->op[1].bytemode][index];
break;
case USE_X86_64_TABLE:
modrm.rm = *codep & 7;
break;
- case USE_OPC_EXT_TABLE:
- index = modrm.mod == 0x3 ? 1 : 0;
- dp = &opc_ext_table[dp->op[1].bytemode][index];
- break;
-
- case USE_OPC_EXT_RM_TABLE:
- index = modrm.rm;
- dp = &opc_ext_rm_table[dp->op[1].bytemode][index];
- break;
-
default:
oappend (INTERNAL_DISASSEMBLER_ERROR);
return NULL;
else if (CONST_STRNEQ (p, "intel"))
{
intel_syntax = 1;
+ if (CONST_STRNEQ (p + 5, "-mnemonic"))
+ intel_mnemonic = 1;
}
else if (CONST_STRNEQ (p, "att"))
{
intel_syntax = 0;
+ if (CONST_STRNEQ (p + 3, "-mnemonic"))
+ intel_mnemonic = 0;
}
else if (CONST_STRNEQ (p, "addr"))
{
{ "fmul", { STi, ST } },
{ "(bad)", { XX } },
{ "(bad)", { XX } },
-#if SYSV386_COMPAT
- { "fsub", { STi, ST } },
- { "fsubr", { STi, ST } },
- { "fdiv", { STi, ST } },
- { "fdivr", { STi, ST } },
-#else
- { "fsubr", { STi, ST } },
- { "fsub", { STi, ST } },
- { "fdivr", { STi, ST } },
- { "fdiv", { STi, ST } },
-#endif
+ { "fsub!M", { STi, ST } },
+ { "fsubM", { STi, ST } },
+ { "fdiv!M", { STi, ST } },
+ { "fdivM", { STi, ST } },
},
/* dd */
{
{ "fmulp", { STi, ST } },
{ "(bad)", { XX } },
{ FGRPde_3 },
-#if SYSV386_COMPAT
- { "fsubp", { STi, ST } },
- { "fsubrp", { STi, ST } },
- { "fdivp", { STi, ST } },
- { "fdivrp", { STi, ST } },
-#else
- { "fsubrp", { STi, ST } },
- { "fsubp", { STi, ST } },
- { "fdivrp", { STi, ST } },
- { "fdivp", { STi, ST } },
-#endif
+ { "fsub!Mp", { STi, ST } },
+ { "fsubMp", { STi, ST } },
+ { "fdiv!Mp", { STi, ST } },
+ { "fdivMp", { STi, ST } },
},
/* df */
{
{
const char *p;
int alt = 0;
+ int cond = 1;
+ unsigned int l = 0, len = 1;
+ char last[4];
+
+#define SAVE_LAST(c) \
+ if (l < len && l < sizeof (last)) \
+ last[l++] = c; \
+ else \
+ abort ();
for (p = template; *p; p++)
{
default:
*obufp++ = *p;
break;
+ case '%':
+ len++;
+ break;
+ case '!':
+ cond = 0;
+ break;
case '{':
alt = 0;
if (intel_syntax)
break;
}
/* Fall through. */
+ goto case_L;
case 'L':
+ if (l != 0 || len != 1)
+ {
+ SAVE_LAST (*p);
+ break;
+ }
+case_L:
if (intel_syntax)
break;
if (sizeflag & SUFFIX_ALWAYS)
*obufp++ = 'l';
break;
+ case 'M':
+ if (intel_mnemonic != cond)
+ *obufp++ = 'r';
+ break;
case 'N':
if ((prefixes & PREFIX_FWAIT) == 0)
*obufp++ = 'n';
break;
}
/* Fall through. */
+ goto case_Q;
case 'Q':
- if (intel_syntax && !alt)
- break;
- USED_REX (REX_W);
- if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
+ if (l == 0 && len == 1)
{
- if (rex & REX_W)
- *obufp++ = 'q';
- else
+case_Q:
+ if (intel_syntax && !alt)
+ break;
+ USED_REX (REX_W);
+ if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
{
- if (sizeflag & DFLAG)
- *obufp++ = intel_syntax ? 'd' : 'l';
+ if (rex & REX_W)
+ *obufp++ = 'q';
else
- *obufp++ = 'w';
+ {
+ if (sizeflag & DFLAG)
+ *obufp++ = intel_syntax ? 'd' : 'l';
+ else
+ *obufp++ = 'w';
+ }
+ used_prefixes |= (prefixes & PREFIX_DATA);
}
- used_prefixes |= (prefixes & PREFIX_DATA);
+ }
+ else
+ {
+ if (l != 1 || len != 2 || last[0] != 'L')
+ {
+ SAVE_LAST (*p);
+ break;
+ }
+ if (intel_syntax
+ || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
+ break;
+ if ((rex & REX_W))
+ {
+ USED_REX (REX_W);
+ *obufp++ = 'q';
+ }
+ else
+ *obufp++ = 'l';
}
break;
case 'R':
used_prefixes |= (prefixes & PREFIX_DATA);
break;
case 'Y':
- if (intel_syntax)
+ if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
break;
if (rex & REX_W)
{
int havebase;
int haveindex;
int needindex;
- int base;
+ int base, rbase;
int index = 0;
int scale = 0;
haveindex = index != 4;
codep++;
}
- base += add;
+ rbase = base + add;
/* If we have a DREX byte, skip it now
(it has already been handled) */
switch (modrm.mod)
{
case 0:
- if ((base & 7) == 5)
+ if (base == 5)
{
havebase = 0;
if (address_mode == mode_64bit && !havesib)
|| (havesib && (haveindex || scale != 0)));
if (!intel_syntax)
- if (modrm.mod != 0 || (base & 7) == 5)
+ if (modrm.mod != 0 || base == 5)
{
if (havedisp || riprel)
print_displacement (scratchbuf, disp);
*obufp = '\0';
if (havebase)
oappend (address_mode == mode_64bit && (sizeflag & AFLAG)
- ? names64[base] : names32[base]);
+ ? names64[rbase] : names32[rbase]);
if (havesib)
{
/* ESP/RSP won't allow index. If base isn't ESP/RSP,
}
}
if (intel_syntax
- && (disp || modrm.mod != 0 || (base & 7) == 5))
+ && (disp || modrm.mod != 0 || base == 5))
{
if (!havedisp || (bfd_signed_vma) disp >= 0)
{
}
else if (intel_syntax)
{
- if (modrm.mod != 0 || (base & 7) == 5)
+ if (modrm.mod != 0 || base == 5)
{
if (prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
| PREFIX_ES | PREFIX_FS | PREFIX_GS))
OP_REG (int code, int sizeflag)
{
const char *s;
- int add = 0;
+ int add;
USED_REX (REX_B);
if (rex & REX_B)
add = 8;
+ else
+ add = 0;
switch (code)
{
static void
OP_C (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
{
- int add = 0;
+ int add;
if (rex & REX_R)
{
USED_REX (REX_R);
used_prefixes |= PREFIX_LOCK;
add = 8;
}
+ else
+ add = 0;
sprintf (scratchbuf, "%%cr%d", modrm.reg + add);
oappend (scratchbuf + intel_syntax);
}
static void
OP_D (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
{
- int add = 0;
+ int add;
USED_REX (REX_R);
if (rex & REX_R)
add = 8;
+ else
+ add = 0;
if (intel_syntax)
sprintf (scratchbuf, "db%d", modrm.reg + add);
else
used_prefixes |= (prefixes & PREFIX_DATA);
if (prefixes & PREFIX_DATA)
{
- int add = 0;
+ int add;
USED_REX (REX_R);
if (rex & REX_R)
add = 8;
+ else
+ add = 0;
sprintf (scratchbuf, "%%xmm%d", modrm.reg + add);
}
else
static void
OP_XMM (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
{
- int add = 0;
+ int add;
USED_REX (REX_R);
if (rex & REX_R)
add = 8;
+ else
+ add = 0;
sprintf (scratchbuf, "%%xmm%d", modrm.reg + add);
oappend (scratchbuf + intel_syntax);
}
used_prefixes |= (prefixes & PREFIX_DATA);
if (prefixes & PREFIX_DATA)
{
- int add = 0;
+ int add;
USED_REX (REX_B);
if (rex & REX_B)
add = 8;
+ else
+ add = 0;
sprintf (scratchbuf, "%%xmm%d", modrm.rm + add);
}
else
static void
OP_EX (int bytemode, int sizeflag)
{
- int add = 0;
+ int add;
if (modrm.mod != 3)
{
OP_E (bytemode, sizeflag);
USED_REX (REX_B);
if (rex & REX_B)
add = 8;
+ else
+ add = 0;
/* Skip mod/rm byte. */
MODRM_CHECK;
};
static void
-OP_SIMD_Suffix (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
+CMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
{
unsigned int cmp_type;
FETCH_DATA (the_info, codep + 1);
- obufp = obuf + strlen (obuf);
cmp_type = *codep++ & 0xff;
if (cmp_type < 8)
{
- char suffix1 = 'p', suffix2 = 's';
- used_prefixes |= (prefixes & PREFIX_REPZ);
- if (prefixes & PREFIX_REPZ)
- suffix1 = 's';
- else
- {
- used_prefixes |= (prefixes & PREFIX_DATA);
- if (prefixes & PREFIX_DATA)
- suffix2 = 'd';
- else
- {
- used_prefixes |= (prefixes & PREFIX_REPNZ);
- if (prefixes & PREFIX_REPNZ)
- suffix1 = 's', suffix2 = 'd';
- }
- }
- sprintf (scratchbuf, "cmp%s%c%c",
- simd_cmp_op[cmp_type], suffix1, suffix2);
- used_prefixes |= (prefixes & PREFIX_REPZ);
- oappend (scratchbuf);
+ char suffix [3];
+ char *p = obuf + strlen (obuf) - 2;
+ suffix[0] = p[0];
+ suffix[1] = p[1];
+ suffix[2] = '\0';
+ sprintf (p, "%s%s", simd_cmp_op[cmp_type], suffix);
}
else
{
- /* We have a bad extension byte. Clean up. */
- op_out[0][0] = '\0';
- op_out[1][0] = '\0';
- BadOp ();
+ /* We have a reserved extension byte. Output it directly. */
+ scratchbuf[0] = '$';
+ print_operand_value (scratchbuf + 1, 1, cmp_type);
+ oappend (scratchbuf + intel_syntax);
+ scratchbuf[0] = '\0';
}
}