diff --git a/bochs/cpu/cpu.h b/bochs/cpu/cpu.h index e9b32bd7e..0ae172799 100644 --- a/bochs/cpu/cpu.h +++ b/bochs/cpu/cpu.h @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////// -// $Id: cpu.h,v 1.710 2011-01-20 16:24:42 sshwarts Exp $ +// $Id: cpu.h,v 1.711 2011-01-21 16:07:51 sshwarts Exp $ ///////////////////////////////////////////////////////////////////////// // // Copyright (C) 2001-2011 The Bochs Project @@ -2752,7 +2752,6 @@ public: // for now... BX_SMF void SYSCALL(bxInstruction_c *) BX_CPP_AttrRegparmN(1); BX_SMF void SYSRET(bxInstruction_c *) BX_CPP_AttrRegparmN(1); - BX_SMF void RDTSCP(bxInstruction_c *) BX_CPP_AttrRegparmN(1); BX_SMF void CMPXCHG16B(bxInstruction_c *) BX_CPP_AttrRegparmN(1); BX_SMF void SWAPGS(bxInstruction_c *) BX_CPP_AttrRegparmN(1); @@ -2773,6 +2772,8 @@ public: // for now... BX_SMF void MOVNTI_MqGq(bxInstruction_c *) BX_CPP_AttrRegparmN(1); #endif // #if BX_SUPPORT_X86_64 + BX_SMF void RDTSCP(bxInstruction_c *) BX_CPP_AttrRegparmN(1); + BX_SMF void INVLPG(bxInstruction_c *) BX_CPP_AttrRegparmN(1); BX_SMF void RSM(bxInstruction_c *) BX_CPP_AttrRegparmN(1); @@ -3888,9 +3889,10 @@ enum { #define BxPrefixSSEF2 0x0030 // Group encoding: 0011, SSE_PREFIX_F2 #define BxPrefixSSE 0x0040 // Group encoding: 0100 #define BxGroupN 0x0050 // Group encoding: 0101 -#define BxFPEscape 0x0060 // Group encoding: 0110 -#define Bx3ByteOp 0x0070 // Group encoding: 0111 -#define BxOSizeGrp 0x0080 // Group encoding: 1000 +#define BxSplitGroupN 0x0060 // Group encoding: 0110 +#define BxFPEscape 0x0070 // Group encoding: 0111 +#define Bx3ByteOp 0x0080 // Group encoding: 1000 +#define BxOSizeGrp 0x0090 // Group encoding: 1001 // The BxImmediate2 mask specifies kind of second immediate data // required by instruction. @@ -3921,7 +3923,7 @@ enum { #define BxGroup4 BxGroupN #define BxGroup5 BxGroupN #define BxGroup6 BxGroupN -#define BxGroup7 BxGroupN +#define BxGroup7 BxFPEscape #define BxGroup8 BxGroupN #define BxGroup9 BxGroupN @@ -3929,10 +3931,9 @@ enum { #define BxGroup12 BxGroupN #define BxGroup13 BxGroupN #define BxGroup14 BxGroupN -#define BxGroup15 BxGroupN -#define BxGroup16 BxGroupN +#define BxGroup15 BxSplitGroupN -#define BxGroupFP BxGroupN +#define BxGroupFP BxSplitGroupN // diff --git a/bochs/cpu/fetchdecode.cc b/bochs/cpu/fetchdecode.cc index 60c595196..239517c40 100644 --- a/bochs/cpu/fetchdecode.cc +++ b/bochs/cpu/fetchdecode.cc @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////// -// $Id: fetchdecode.cc,v 1.294 2011-01-20 16:24:42 sshwarts Exp $ +// $Id: fetchdecode.cc,v 1.295 2011-01-21 16:07:51 sshwarts Exp $ ///////////////////////////////////////////////////////////////////////// // // Copyright (C) 2001-2011 The Bochs Project @@ -173,2161 +173,1101 @@ bxIAOpcodeTable BxOpcodesTable[] = { }; #undef bx_define_opcode -/* **************************** */ -/* 512*2 entries for 16bit mode */ -/* 512*2 entries for 32bit mode */ -/* **************************** */ +/* ************************** */ +/* 512 entries for 16bit mode */ +/* 512 entries for 32bit mode */ +/* ************************** */ -static const BxOpcodeInfo_t BxOpcodeInfo32[512*2*2] = { - // 512 (/r) + 512 (/m) entries for 16bit mode - /* 00 /wr */ { BxArithDstRM, BX_IA_ADD_EbGb }, - /* 00 /wm */ { BxLockable, BX_IA_ADD_EbGb }, - /* 01 /wr */ { BxArithDstRM, BX_IA_ADD_EwGw }, - /* 01 /wm */ { BxLockable, BX_IA_ADD_EwGw }, - /* 02 /wr */ { 0, BX_IA_ADD_GbEb }, - /* 02 /wm */ { 0, BX_IA_ADD_GbEb }, - /* 03 /wr */ { 0, BX_IA_ADD_GwEw }, - /* 03 /wm */ { 0, BX_IA_ADD_GwEw }, - /* 04 /wr */ { BxImmediate_Ib, BX_IA_ADD_ALIb }, - /* 04 /wm */ { BxImmediate_Ib, BX_IA_ADD_ALIb }, - /* 05 /wr */ { BxImmediate_Iw, BX_IA_ADD_AXIw }, - /* 05 /wm */ { BxImmediate_Iw, BX_IA_ADD_AXIw }, - /* 06 /wr */ { 0, BX_IA_PUSH16_ES }, - /* 06 /wm */ { 0, BX_IA_PUSH16_ES }, - /* 07 /wr */ { 0, BX_IA_POP16_ES }, - /* 07 /wm */ { 0, BX_IA_POP16_ES }, - /* 08 /wr */ { BxArithDstRM, BX_IA_OR_EbGb }, - /* 08 /wm */ { BxLockable, BX_IA_OR_EbGb }, - /* 09 /wr */ { BxArithDstRM, BX_IA_OR_EwGw }, - /* 09 /wm */ { BxLockable, BX_IA_OR_EwGw }, - /* 0A /wr */ { 0, BX_IA_OR_GbEb }, - /* 0A /wm */ { 0, BX_IA_OR_GbEb }, - /* 0B /wr */ { 0, BX_IA_OR_GwEw }, - /* 0B /wm */ { 0, BX_IA_OR_GwEw }, - /* 0C /wr */ { BxImmediate_Ib, BX_IA_OR_ALIb }, - /* 0C /wm */ { BxImmediate_Ib, BX_IA_OR_ALIb }, - /* 0D /wr */ { BxImmediate_Iw, BX_IA_OR_AXIw }, - /* 0D /wm */ { BxImmediate_Iw, BX_IA_OR_AXIw }, - /* 0E /wr */ { 0, BX_IA_PUSH16_CS }, - /* 0E /wm */ { 0, BX_IA_PUSH16_CS }, - /* 0F /wr */ { 0, BX_IA_ERROR }, // 2-byte escape - /* 0F /wm */ { 0, BX_IA_ERROR }, // 2-byte escape - /* 10 /wr */ { BxArithDstRM, BX_IA_ADC_EbGb }, - /* 10 /wm */ { BxLockable, BX_IA_ADC_EbGb }, - /* 11 /wr */ { BxArithDstRM, BX_IA_ADC_EwGw }, - /* 11 /wm */ { BxLockable, BX_IA_ADC_EwGw }, - /* 12 /wr */ { 0, BX_IA_ADC_GbEb }, - /* 12 /wm */ { 0, BX_IA_ADC_GbEb }, - /* 13 /wr */ { 0, BX_IA_ADC_GwEw }, - /* 13 /wm */ { 0, BX_IA_ADC_GwEw }, - /* 14 /wr */ { BxImmediate_Ib, BX_IA_ADC_ALIb }, - /* 14 /wm */ { BxImmediate_Ib, BX_IA_ADC_ALIb }, - /* 15 /wr */ { BxImmediate_Iw, BX_IA_ADC_AXIw }, - /* 15 /wm */ { BxImmediate_Iw, BX_IA_ADC_AXIw }, - /* 16 /wr */ { 0, BX_IA_PUSH16_SS }, - /* 16 /wm */ { 0, BX_IA_PUSH16_SS }, - /* 17 /wr */ { BxTraceEnd, BX_IA_POP16_SS }, // async_event = 1 - /* 17 /wm */ { BxTraceEnd, BX_IA_POP16_SS }, // async_event = 1 - /* 18 /wr */ { BxArithDstRM, BX_IA_SBB_EbGb }, - /* 18 /wm */ { BxLockable, BX_IA_SBB_EbGb }, - /* 19 /wr */ { BxArithDstRM, BX_IA_SBB_EwGw }, - /* 19 /wm */ { BxLockable, BX_IA_SBB_EwGw }, - /* 1A /wr */ { 0, BX_IA_SBB_GbEb }, - /* 1A /wm */ { 0, BX_IA_SBB_GbEb }, - /* 1B /wr */ { 0, BX_IA_SBB_GwEw }, - /* 1B /wm */ { 0, BX_IA_SBB_GwEw }, - /* 1C /wr */ { BxImmediate_Ib, BX_IA_SBB_ALIb }, - /* 1C /wm */ { BxImmediate_Ib, BX_IA_SBB_ALIb }, - /* 1D /wr */ { BxImmediate_Iw, BX_IA_SBB_AXIw }, - /* 1D /wm */ { BxImmediate_Iw, BX_IA_SBB_AXIw }, - /* 1E /wr */ { 0, BX_IA_PUSH16_DS }, - /* 1E /wm */ { 0, BX_IA_PUSH16_DS }, - /* 1F /wr */ { 0, BX_IA_POP16_DS }, - /* 1F /wm */ { 0, BX_IA_POP16_DS }, - /* 20 /wr */ { BxArithDstRM, BX_IA_AND_EbGb }, - /* 20 /wm */ { BxLockable, BX_IA_AND_EbGb }, - /* 21 /wr */ { BxArithDstRM, BX_IA_AND_EwGw }, - /* 21 /wm */ { BxLockable, BX_IA_AND_EwGw }, - /* 22 /wr */ { 0, BX_IA_AND_GbEb }, - /* 22 /wm */ { 0, BX_IA_AND_GbEb }, - /* 23 /wr */ { 0, BX_IA_AND_GwEw }, - /* 23 /wm */ { 0, BX_IA_AND_GwEw }, - /* 24 /wr */ { BxImmediate_Ib, BX_IA_AND_ALIb }, - /* 24 /wm */ { BxImmediate_Ib, BX_IA_AND_ALIb }, - /* 25 /wr */ { BxImmediate_Iw, BX_IA_AND_AXIw }, - /* 25 /wm */ { BxImmediate_Iw, BX_IA_AND_AXIw }, - /* 26 /wr */ { 0, BX_IA_ERROR }, // ES: - /* 26 /wm */ { 0, BX_IA_ERROR }, // ES: - /* 27 /wr */ { 0, BX_IA_DAA }, - /* 27 /wm */ { 0, BX_IA_DAA }, - /* 28 /wr */ { BxArithDstRM, BX_IA_SUB_EbGb }, - /* 28 /wm */ { BxLockable, BX_IA_SUB_EbGb }, - /* 29 /wr */ { BxArithDstRM, BX_IA_SUB_EwGw }, - /* 29 /wm */ { BxLockable, BX_IA_SUB_EwGw }, - /* 2A /wr */ { 0, BX_IA_SUB_GbEb }, - /* 2A /wm */ { 0, BX_IA_SUB_GbEb }, - /* 2B /wr */ { 0, BX_IA_SUB_GwEw }, - /* 2B /wm */ { 0, BX_IA_SUB_GwEw }, - /* 2C /wr */ { BxImmediate_Ib, BX_IA_SUB_ALIb }, - /* 2C /wm */ { BxImmediate_Ib, BX_IA_SUB_ALIb }, - /* 2D /wr */ { BxImmediate_Iw, BX_IA_SUB_AXIw }, - /* 2D /wm */ { BxImmediate_Iw, BX_IA_SUB_AXIw }, - /* 2E /wr */ { 0, BX_IA_ERROR }, // CS: - /* 2E /wm */ { 0, BX_IA_ERROR }, // CS: - /* 2F /wr */ { 0, BX_IA_DAS }, - /* 2F /wm */ { 0, BX_IA_DAS }, - /* 30 /wr */ { BxArithDstRM, BX_IA_XOR_EbGb }, - /* 30 /wm */ { BxLockable, BX_IA_XOR_EbGb }, - /* 31 /wr */ { BxArithDstRM, BX_IA_XOR_EwGw }, - /* 31 /wm */ { BxLockable, BX_IA_XOR_EwGw }, - /* 32 /wr */ { 0, BX_IA_XOR_GbEb }, - /* 32 /wm */ { 0, BX_IA_XOR_GbEb }, - /* 33 /wr */ { 0, BX_IA_XOR_GwEw }, - /* 33 /wm */ { 0, BX_IA_XOR_GwEw }, - /* 34 /wr */ { BxImmediate_Ib, BX_IA_XOR_ALIb }, - /* 34 /wm */ { BxImmediate_Ib, BX_IA_XOR_ALIb }, - /* 35 /wr */ { BxImmediate_Iw, BX_IA_XOR_AXIw }, - /* 35 /wm */ { BxImmediate_Iw, BX_IA_XOR_AXIw }, - /* 36 /wr */ { 0, BX_IA_ERROR }, // SS: - /* 36 /wm */ { 0, BX_IA_ERROR }, // SS: - /* 37 /wr */ { 0, BX_IA_AAA }, - /* 37 /wm */ { 0, BX_IA_AAA }, - /* 38 /wr */ { BxArithDstRM, BX_IA_CMP_EbGb }, - /* 38 /wm */ { 0, BX_IA_CMP_EbGb }, - /* 39 /wr */ { BxArithDstRM, BX_IA_CMP_EwGw }, - /* 39 /wm */ { 0, BX_IA_CMP_EwGw }, - /* 3A /wr */ { 0, BX_IA_CMP_GbEb }, - /* 3A /wm */ { 0, BX_IA_CMP_GbEb }, - /* 3B /wr */ { 0, BX_IA_CMP_GwEw }, - /* 3B /wm */ { 0, BX_IA_CMP_GwEw }, - /* 3C /wr */ { BxImmediate_Ib, BX_IA_CMP_ALIb }, - /* 3C /wm */ { BxImmediate_Ib, BX_IA_CMP_ALIb }, - /* 3D /wr */ { BxImmediate_Iw, BX_IA_CMP_AXIw }, - /* 3D /wm */ { BxImmediate_Iw, BX_IA_CMP_AXIw }, - /* 3E /wr */ { 0, BX_IA_ERROR }, // DS: - /* 3E /wm */ { 0, BX_IA_ERROR }, // DS: - /* 3F /wr */ { 0, BX_IA_AAS }, - /* 3F /wm */ { 0, BX_IA_AAS }, - /* 40 /wr */ { 0, BX_IA_INC_RX }, - /* 40 /wm */ { 0, BX_IA_INC_RX }, - /* 41 /wr */ { 0, BX_IA_INC_RX }, - /* 41 /wm */ { 0, BX_IA_INC_RX }, - /* 42 /wr */ { 0, BX_IA_INC_RX }, - /* 42 /wm */ { 0, BX_IA_INC_RX }, - /* 43 /wr */ { 0, BX_IA_INC_RX }, - /* 43 /wm */ { 0, BX_IA_INC_RX }, - /* 44 /wr */ { 0, BX_IA_INC_RX }, - /* 44 /wm */ { 0, BX_IA_INC_RX }, - /* 45 /wr */ { 0, BX_IA_INC_RX }, - /* 45 /wm */ { 0, BX_IA_INC_RX }, - /* 46 /wr */ { 0, BX_IA_INC_RX }, - /* 46 /wm */ { 0, BX_IA_INC_RX }, - /* 47 /wr */ { 0, BX_IA_INC_RX }, - /* 47 /wm */ { 0, BX_IA_INC_RX }, - /* 48 /wr */ { 0, BX_IA_DEC_RX }, - /* 48 /wm */ { 0, BX_IA_DEC_RX }, - /* 49 /wr */ { 0, BX_IA_DEC_RX }, - /* 49 /wm */ { 0, BX_IA_DEC_RX }, - /* 4A /wr */ { 0, BX_IA_DEC_RX }, - /* 4A /wm */ { 0, BX_IA_DEC_RX }, - /* 4B /wr */ { 0, BX_IA_DEC_RX }, - /* 4B /wm */ { 0, BX_IA_DEC_RX }, - /* 4C /wr */ { 0, BX_IA_DEC_RX }, - /* 4C /wm */ { 0, BX_IA_DEC_RX }, - /* 4D /wr */ { 0, BX_IA_DEC_RX }, - /* 4D /wm */ { 0, BX_IA_DEC_RX }, - /* 4E /wr */ { 0, BX_IA_DEC_RX }, - /* 4E /wm */ { 0, BX_IA_DEC_RX }, - /* 4F /wr */ { 0, BX_IA_DEC_RX }, - /* 4F /wm */ { 0, BX_IA_DEC_RX }, - /* 50 /wr */ { 0, BX_IA_PUSH_RX }, - /* 50 /wm */ { 0, BX_IA_PUSH_RX }, - /* 51 /wr */ { 0, BX_IA_PUSH_RX }, - /* 51 /wm */ { 0, BX_IA_PUSH_RX }, - /* 52 /wr */ { 0, BX_IA_PUSH_RX }, - /* 52 /wm */ { 0, BX_IA_PUSH_RX }, - /* 53 /wr */ { 0, BX_IA_PUSH_RX }, - /* 53 /wm */ { 0, BX_IA_PUSH_RX }, - /* 54 /wr */ { 0, BX_IA_PUSH_RX }, - /* 54 /wm */ { 0, BX_IA_PUSH_RX }, - /* 55 /wr */ { 0, BX_IA_PUSH_RX }, - /* 55 /wm */ { 0, BX_IA_PUSH_RX }, - /* 56 /wr */ { 0, BX_IA_PUSH_RX }, - /* 56 /wm */ { 0, BX_IA_PUSH_RX }, - /* 57 /wr */ { 0, BX_IA_PUSH_RX }, - /* 57 /wm */ { 0, BX_IA_PUSH_RX }, - /* 58 /wr */ { 0, BX_IA_POP_RX }, - /* 58 /wm */ { 0, BX_IA_POP_RX }, - /* 59 /wr */ { 0, BX_IA_POP_RX }, - /* 59 /wm */ { 0, BX_IA_POP_RX }, - /* 5A /wr */ { 0, BX_IA_POP_RX }, - /* 5A /wm */ { 0, BX_IA_POP_RX }, - /* 5B /wr */ { 0, BX_IA_POP_RX }, - /* 5B /wm */ { 0, BX_IA_POP_RX }, - /* 5C /wr */ { 0, BX_IA_POP_RX }, - /* 5C /wm */ { 0, BX_IA_POP_RX }, - /* 5D /wr */ { 0, BX_IA_POP_RX }, - /* 5D /wm */ { 0, BX_IA_POP_RX }, - /* 5E /wr */ { 0, BX_IA_POP_RX }, - /* 5E /wm */ { 0, BX_IA_POP_RX }, - /* 5F /wr */ { 0, BX_IA_POP_RX }, - /* 5F /wm */ { 0, BX_IA_POP_RX }, - /* 60 /wr */ { 0, BX_IA_PUSHAD16 }, - /* 60 /wm */ { 0, BX_IA_PUSHAD16 }, - /* 61 /wr */ { 0, BX_IA_POPAD16 }, - /* 61 /wm */ { 0, BX_IA_POPAD16 }, - /* 62 /wr */ { 0, BX_IA_ERROR }, // BOUND - /* 62 /wm */ { 0, BX_IA_BOUND_GwMa }, - /* 63 /wr */ { 0, BX_IA_ARPL_EwGw }, - /* 63 /wm */ { 0, BX_IA_ARPL_EwGw }, - /* 64 /wr */ { 0, BX_IA_ERROR }, // FS: - /* 64 /wm */ { 0, BX_IA_ERROR }, // FS: - /* 65 /wr */ { 0, BX_IA_ERROR }, // GS: - /* 65 /wm */ { 0, BX_IA_ERROR }, // GS: - /* 66 /wr */ { 0, BX_IA_ERROR }, // OS: - /* 66 /wm */ { 0, BX_IA_ERROR }, // OS: - /* 67 /wr */ { 0, BX_IA_ERROR }, // AS: - /* 67 /wm */ { 0, BX_IA_ERROR }, // AS: - /* 68 /wr */ { BxImmediate_Iw, BX_IA_PUSH_Iw }, - /* 68 /wm */ { BxImmediate_Iw, BX_IA_PUSH_Iw }, - /* 69 /wr */ { BxImmediate_Iw, BX_IA_IMUL_GwEwIw }, - /* 69 /wm */ { BxImmediate_Iw, BX_IA_IMUL_GwEwIw }, - /* 6A /wr */ { BxImmediate_Ib_SE, BX_IA_PUSH_Iw }, - /* 6A /wm */ { BxImmediate_Ib_SE, BX_IA_PUSH_Iw }, - /* 6B /wr */ { BxImmediate_Ib_SE, BX_IA_IMUL_GwEwIw }, - /* 6B /wm */ { BxImmediate_Ib_SE, BX_IA_IMUL_GwEwIw }, - /* 6C /wr */ { 0, BX_IA_REP_INSB_YbDX }, - /* 6C /wm */ { 0, BX_IA_REP_INSB_YbDX }, - /* 6D /wr */ { 0, BX_IA_REP_INSW_YwDX }, - /* 6D /wm */ { 0, BX_IA_REP_INSW_YwDX }, - /* 6E /wr */ { 0, BX_IA_REP_OUTSB_DXXb }, - /* 6E /wm */ { 0, BX_IA_REP_OUTSB_DXXb }, - /* 6F /wr */ { 0, BX_IA_REP_OUTSW_DXXw }, - /* 6F /wm */ { 0, BX_IA_REP_OUTSW_DXXw }, - /* 70 /wr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JO_Jw }, - /* 70 /wm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JO_Jw }, - /* 71 /wr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNO_Jw }, - /* 71 /wm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNO_Jw }, - /* 72 /wr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JB_Jw }, - /* 72 /wm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JB_Jw }, - /* 73 /wr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNB_Jw }, - /* 73 /wm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNB_Jw }, - /* 74 /wr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JZ_Jw }, - /* 74 /wm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JZ_Jw }, - /* 75 /wr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNZ_Jw }, - /* 75 /wm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNZ_Jw }, - /* 76 /wr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JBE_Jw }, - /* 76 /wm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JBE_Jw }, - /* 77 /wr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNBE_Jw }, - /* 77 /wm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNBE_Jw }, - /* 78 /wr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JS_Jw }, - /* 78 /wm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JS_Jw }, - /* 79 /wr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNS_Jw }, - /* 79 /wm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNS_Jw }, - /* 7A /wr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JP_Jw }, - /* 7A /wm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JP_Jw }, - /* 7B /wr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNP_Jw }, - /* 7B /wm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNP_Jw }, - /* 7C /wr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JL_Jw }, - /* 7C /wm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JL_Jw }, - /* 7D /wr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNL_Jw }, - /* 7D /wm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNL_Jw }, - /* 7E /wr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JLE_Jw }, - /* 7E /wm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JLE_Jw }, - /* 7F /wr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNLE_Jw }, - /* 7F /wm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNLE_Jw }, - /* 80 /wr */ { BxGroup1 | BxImmediate_Ib, BX_IA_ERROR, BxOpcodeInfoG1EbIb }, - /* 80 /wm */ { BxGroup1 | BxImmediate_Ib, BX_IA_ERROR, BxOpcodeInfoG1EbIb }, - /* 81 /wr */ { BxGroup1 | BxImmediate_Iw, BX_IA_ERROR, BxOpcodeInfoG1Ew }, - /* 81 /wm */ { BxGroup1 | BxImmediate_Iw, BX_IA_ERROR, BxOpcodeInfoG1Ew }, - /* 82 /wr */ { BxGroup1 | BxImmediate_Ib, BX_IA_ERROR, BxOpcodeInfoG1EbIb }, - /* 82 /wm */ { BxGroup1 | BxImmediate_Ib, BX_IA_ERROR, BxOpcodeInfoG1EbIb }, - /* 83 /wr */ { BxGroup1 | BxImmediate_Ib_SE, BX_IA_ERROR, BxOpcodeInfoG1Ew }, - /* 83 /wm */ { BxGroup1 | BxImmediate_Ib_SE, BX_IA_ERROR, BxOpcodeInfoG1Ew }, - /* 84 /wr */ { 0, BX_IA_TEST_EbGb }, - /* 84 /wm */ { 0, BX_IA_TEST_EbGb }, - /* 85 /wr */ { 0, BX_IA_TEST_EwGw }, - /* 85 /wm */ { 0, BX_IA_TEST_EwGw }, - /* 86 /wr */ { 0, BX_IA_XCHG_EbGb }, - /* 86 /wm */ { BxLockable, BX_IA_XCHG_EbGb }, - /* 87 /wr */ { 0, BX_IA_XCHG_EwGw }, - /* 87 /wm */ { BxLockable, BX_IA_XCHG_EwGw }, - /* 88 /wr */ { BxArithDstRM, BX_IA_MOV_GbEbR }, - /* 88 /wm */ { 0, BX_IA_MOV_EbGbM }, - /* 89 /wr */ { BxArithDstRM, BX_IA_MOV_GwEwR }, - /* 89 /wm */ { 0, BX_IA_MOV_EwGwM }, - /* 8A /wr */ { 0, BX_IA_MOV_GbEbR }, - /* 8A /wm */ { 0, BX_IA_MOV_GbEbM }, - /* 8B /wr */ { 0, BX_IA_MOV_GwEwR }, - /* 8B /wm */ { 0, BX_IA_MOV_GwEwM }, - /* 8C /wr */ { 0, BX_IA_MOV_EwSwR }, - /* 8C /wm */ { 0, BX_IA_MOV_EwSwM }, - /* 8D /wr */ { 0, BX_IA_ERROR }, // LEA - /* 8D /wm */ { 0, BX_IA_LEA_GwM }, - /* 8E /wr */ { 0, BX_IA_MOV_SwEw }, - /* 8E /wm */ { 0, BX_IA_MOV_SwEw }, - /* 8F /wr */ { BxGroup1A, BX_IA_ERROR, BxOpcodeInfoG1AEw }, - /* 8F /wm */ { BxGroup1A, BX_IA_ERROR, BxOpcodeInfoG1AEw }, - /* 90 /wr */ { BxPrefixSSE, BX_IA_NOP, BxOpcodeGroupSSE_PAUSE }, - /* 90 /wm */ { BxPrefixSSE, BX_IA_NOP, BxOpcodeGroupSSE_PAUSE }, - /* 91 /wr */ { 0, BX_IA_XCHG_RXAX }, - /* 91 /wm */ { 0, BX_IA_XCHG_RXAX }, - /* 92 /wr */ { 0, BX_IA_XCHG_RXAX }, - /* 92 /wm */ { 0, BX_IA_XCHG_RXAX }, - /* 93 /wr */ { 0, BX_IA_XCHG_RXAX }, - /* 93 /wm */ { 0, BX_IA_XCHG_RXAX }, - /* 94 /wr */ { 0, BX_IA_XCHG_RXAX }, - /* 94 /wm */ { 0, BX_IA_XCHG_RXAX }, - /* 95 /wr */ { 0, BX_IA_XCHG_RXAX }, - /* 95 /wm */ { 0, BX_IA_XCHG_RXAX }, - /* 96 /wr */ { 0, BX_IA_XCHG_RXAX }, - /* 96 /wm */ { 0, BX_IA_XCHG_RXAX }, - /* 97 /wr */ { 0, BX_IA_XCHG_RXAX }, - /* 97 /wm */ { 0, BX_IA_XCHG_RXAX }, - /* 98 /wr */ { 0, BX_IA_CBW }, - /* 98 /wm */ { 0, BX_IA_CBW }, - /* 99 /wr */ { 0, BX_IA_CWD }, - /* 99 /wm */ { 0, BX_IA_CWD }, - /* 9A /wr */ { BxImmediate_Iw | BxImmediate_Iw2 | BxTraceEnd, BX_IA_CALL16_Ap }, - /* 9A /wm */ { BxImmediate_Iw | BxImmediate_Iw2 | BxTraceEnd, BX_IA_CALL16_Ap }, - /* 9B /wr */ { 0, BX_IA_FWAIT }, - /* 9B /wm */ { 0, BX_IA_FWAIT }, - /* 9C /wr */ { 0, BX_IA_PUSHF_Fw }, - /* 9C /wm */ { 0, BX_IA_PUSHF_Fw }, - /* 9D /wr */ { 0, BX_IA_POPF_Fw }, - /* 9D /wm */ { 0, BX_IA_POPF_Fw }, - /* 9E /wr */ { 0, BX_IA_SAHF }, - /* 9E /wm */ { 0, BX_IA_SAHF }, - /* 9F /wr */ { 0, BX_IA_LAHF }, - /* 9F /wm */ { 0, BX_IA_LAHF }, - /* A0 /wr */ { BxImmediate_O, BX_IA_MOV_ALOd }, - /* A0 /wm */ { BxImmediate_O, BX_IA_MOV_ALOd }, - /* A1 /wr */ { BxImmediate_O, BX_IA_MOV_AXOd }, - /* A1 /wm */ { BxImmediate_O, BX_IA_MOV_AXOd }, - /* A2 /wr */ { BxImmediate_O, BX_IA_MOV_OdAL }, - /* A2 /wm */ { BxImmediate_O, BX_IA_MOV_OdAL }, - /* A3 /wr */ { BxImmediate_O, BX_IA_MOV_OdAX }, - /* A3 /wm */ { BxImmediate_O, BX_IA_MOV_OdAX }, - /* A4 /wr */ { 0, BX_IA_REP_MOVSB_XbYb }, - /* A4 /wm */ { 0, BX_IA_REP_MOVSB_XbYb }, - /* A5 /wr */ { 0, BX_IA_REP_MOVSW_XwYw }, - /* A5 /wm */ { 0, BX_IA_REP_MOVSW_XwYw }, - /* A6 /wr */ { 0, BX_IA_REP_CMPSB_XbYb }, - /* A6 /wm */ { 0, BX_IA_REP_CMPSB_XbYb }, - /* A7 /wr */ { 0, BX_IA_REP_CMPSW_XwYw }, - /* A7 /wm */ { 0, BX_IA_REP_CMPSW_XwYw }, - /* A8 /wr */ { BxImmediate_Ib, BX_IA_TEST_ALIb }, - /* A8 /wm */ { BxImmediate_Ib, BX_IA_TEST_ALIb }, - /* A9 /wr */ { BxImmediate_Iw, BX_IA_TEST_AXIw }, - /* A9 /wm */ { BxImmediate_Iw, BX_IA_TEST_AXIw }, - /* AA /wr */ { 0, BX_IA_REP_STOSB_YbAL }, - /* AA /wm */ { 0, BX_IA_REP_STOSB_YbAL }, - /* AB /wr */ { 0, BX_IA_REP_STOSW_YwAX }, - /* AB /wm */ { 0, BX_IA_REP_STOSW_YwAX }, - /* AC /wr */ { 0, BX_IA_REP_LODSB_ALXb }, - /* AC /wm */ { 0, BX_IA_REP_LODSB_ALXb }, - /* AD /wr */ { 0, BX_IA_REP_LODSW_AXXw }, - /* AD /wm */ { 0, BX_IA_REP_LODSW_AXXw }, - /* AE /wr */ { 0, BX_IA_REP_SCASB_ALXb }, - /* AE /wm */ { 0, BX_IA_REP_SCASB_ALXb }, - /* AF /wr */ { 0, BX_IA_REP_SCASW_AXXw }, - /* AF /wm */ { 0, BX_IA_REP_SCASW_AXXw }, - /* B0 /wr */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, - /* B0 /wm */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, - /* B1 /wr */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, - /* B1 /wm */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, - /* B2 /wr */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, - /* B2 /wm */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, - /* B3 /wr */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, - /* B3 /wm */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, - /* B4 /wr */ { BxImmediate_Ib, BX_IA_MOV_RHIb }, - /* B4 /wm */ { BxImmediate_Ib, BX_IA_MOV_RHIb }, - /* B5 /wr */ { BxImmediate_Ib, BX_IA_MOV_RHIb }, - /* B5 /wm */ { BxImmediate_Ib, BX_IA_MOV_RHIb }, - /* B6 /wr */ { BxImmediate_Ib, BX_IA_MOV_RHIb }, - /* B6 /wm */ { BxImmediate_Ib, BX_IA_MOV_RHIb }, - /* B7 /wr */ { BxImmediate_Ib, BX_IA_MOV_RHIb }, - /* B7 /wm */ { BxImmediate_Ib, BX_IA_MOV_RHIb }, - /* B8 /wr */ { BxImmediate_Iw, BX_IA_MOV_RXIw }, - /* B8 /wm */ { BxImmediate_Iw, BX_IA_MOV_RXIw }, - /* B9 /wr */ { BxImmediate_Iw, BX_IA_MOV_RXIw }, - /* B9 /wm */ { BxImmediate_Iw, BX_IA_MOV_RXIw }, - /* BA /wr */ { BxImmediate_Iw, BX_IA_MOV_RXIw }, - /* BA /wm */ { BxImmediate_Iw, BX_IA_MOV_RXIw }, - /* BB /wr */ { BxImmediate_Iw, BX_IA_MOV_RXIw }, - /* BB /wm */ { BxImmediate_Iw, BX_IA_MOV_RXIw }, - /* BC /wr */ { BxImmediate_Iw, BX_IA_MOV_RXIw }, - /* BC /wm */ { BxImmediate_Iw, BX_IA_MOV_RXIw }, - /* BD /wr */ { BxImmediate_Iw, BX_IA_MOV_RXIw }, - /* BD /wm */ { BxImmediate_Iw, BX_IA_MOV_RXIw }, - /* BE /wr */ { BxImmediate_Iw, BX_IA_MOV_RXIw }, - /* BE /wm */ { BxImmediate_Iw, BX_IA_MOV_RXIw }, - /* BF /wr */ { BxImmediate_Iw, BX_IA_MOV_RXIw }, - /* BF /wm */ { BxImmediate_Iw, BX_IA_MOV_RXIw }, - /* C0 /wr */ { BxGroup2 | BxImmediate_Ib, BX_IA_ERROR, BxOpcodeInfoG2Eb }, - /* C0 /wm */ { BxGroup2 | BxImmediate_Ib, BX_IA_ERROR, BxOpcodeInfoG2Eb }, - /* C1 /wr */ { BxGroup2 | BxImmediate_Ib, BX_IA_ERROR, BxOpcodeInfoG2Ew }, - /* C1 /wm */ { BxGroup2 | BxImmediate_Ib, BX_IA_ERROR, BxOpcodeInfoG2Ew }, - /* C2 /wr */ { BxImmediate_Iw | BxTraceEnd, BX_IA_RETnear16_Iw }, - /* C2 /wm */ { BxImmediate_Iw | BxTraceEnd, BX_IA_RETnear16_Iw }, - /* C3 /wr */ { BxTraceEnd, BX_IA_RETnear16 }, - /* C3 /wm */ { BxTraceEnd, BX_IA_RETnear16 }, - /* C4 /wr */ { 0, BX_IA_ERROR }, // LES - /* C4 /wm */ { 0, BX_IA_LES_GwMp }, - /* C5 /wr */ { 0, BX_IA_ERROR }, // LDS - /* C5 /wm */ { 0, BX_IA_LDS_GwMp }, - /* C6 /wr */ { BxGroup11, BX_IA_ERROR, BxOpcodeInfoG11Eb }, - /* C6 /wm */ { BxGroup11, BX_IA_ERROR, BxOpcodeInfoG11Eb }, - /* C7 /wr */ { BxGroup11, BX_IA_ERROR, BxOpcodeInfoG11Ew }, - /* C7 /wm */ { BxGroup11, BX_IA_ERROR, BxOpcodeInfoG11Ew }, - /* C8 /wr */ { BxImmediate_Iw | BxImmediate_Ib2, BX_IA_ENTER16_IwIb }, - /* C8 /wm */ { BxImmediate_Iw | BxImmediate_Ib2, BX_IA_ENTER16_IwIb }, - /* C9 /wr */ { 0, BX_IA_LEAVE16 }, - /* C9 /wm */ { 0, BX_IA_LEAVE16 }, - /* CA /wr */ { BxImmediate_Iw | BxTraceEnd, BX_IA_RETfar16_Iw }, - /* CA /wm */ { BxImmediate_Iw | BxTraceEnd, BX_IA_RETfar16_Iw }, - /* CB /wr */ { BxTraceEnd, BX_IA_RETfar16 }, - /* CB /wm */ { BxTraceEnd, BX_IA_RETfar16 }, - /* CC /wr */ { BxTraceEnd, BX_IA_INT3 }, - /* CC /wm */ { BxTraceEnd, BX_IA_INT3 }, - /* CD /wr */ { BxImmediate_Ib | BxTraceEnd, BX_IA_INT_Ib }, - /* CD /wm */ { BxImmediate_Ib | BxTraceEnd, BX_IA_INT_Ib }, - /* CE /wr */ { BxTraceEnd, BX_IA_INTO }, - /* CE /wm */ { BxTraceEnd, BX_IA_INTO }, - /* CF /wr */ { BxTraceEnd, BX_IA_IRET16 }, - /* CF /wm */ { BxTraceEnd, BX_IA_IRET16 }, - /* D0 /wr */ { BxGroup2 | BxImmediate_I1, BX_IA_ERROR, BxOpcodeInfoG2Eb }, - /* D0 /wm */ { BxGroup2 | BxImmediate_I1, BX_IA_ERROR, BxOpcodeInfoG2Eb }, - /* D1 /wr */ { BxGroup2 | BxImmediate_I1, BX_IA_ERROR, BxOpcodeInfoG2Ew }, - /* D1 /wm */ { BxGroup2 | BxImmediate_I1, BX_IA_ERROR, BxOpcodeInfoG2Ew }, - /* D2 /wr */ { BxGroup2, BX_IA_ERROR, BxOpcodeInfoG2Eb }, - /* D2 /wm */ { BxGroup2, BX_IA_ERROR, BxOpcodeInfoG2Eb }, - /* D3 /wr */ { BxGroup2, BX_IA_ERROR, BxOpcodeInfoG2Ew }, - /* D3 /wm */ { BxGroup2, BX_IA_ERROR, BxOpcodeInfoG2Ew }, - /* D4 /wr */ { BxImmediate_Ib, BX_IA_AAM }, - /* D4 /wm */ { BxImmediate_Ib, BX_IA_AAM }, - /* D5 /wr */ { BxImmediate_Ib, BX_IA_AAD }, - /* D5 /wm */ { BxImmediate_Ib, BX_IA_AAD }, - /* D6 /wr */ { 0, BX_IA_SALC }, - /* D6 /wm */ { 0, BX_IA_SALC }, - /* D7 /wr */ { 0, BX_IA_XLAT }, - /* D7 /wm */ { 0, BX_IA_XLAT }, +static const BxOpcodeInfo_t BxOpcodeInfo32[512*2] = { + // 512 entries for 16bit mode + /* 00 /w */ { BxLockable | BxArithDstRM, BX_IA_ADD_EbGb }, + /* 01 /w */ { BxLockable | BxArithDstRM, BX_IA_ADD_EwGw }, + /* 02 /w */ { 0, BX_IA_ADD_GbEb }, + /* 03 /w */ { 0, BX_IA_ADD_GwEw }, + /* 04 /w */ { BxImmediate_Ib, BX_IA_ADD_ALIb }, + /* 05 /w */ { BxImmediate_Iw, BX_IA_ADD_AXIw }, + /* 06 /w */ { 0, BX_IA_PUSH16_ES }, + /* 07 /w */ { 0, BX_IA_POP16_ES }, + /* 08 /w */ { BxLockable | BxArithDstRM, BX_IA_OR_EbGb }, + /* 09 /w */ { BxLockable | BxArithDstRM, BX_IA_OR_EwGw }, + /* 0A /w */ { 0, BX_IA_OR_GbEb }, + /* 0B /w */ { 0, BX_IA_OR_GwEw }, + /* 0C /w */ { BxImmediate_Ib, BX_IA_OR_ALIb }, + /* 0D /w */ { BxImmediate_Iw, BX_IA_OR_AXIw }, + /* 0E /w */ { 0, BX_IA_PUSH16_CS }, + /* 0F /w */ { 0, BX_IA_ERROR }, // 2-byte escape + /* 10 /w */ { BxLockable | BxArithDstRM, BX_IA_ADC_EbGb }, + /* 11 /w */ { BxLockable | BxArithDstRM, BX_IA_ADC_EwGw }, + /* 12 /w */ { 0, BX_IA_ADC_GbEb }, + /* 13 /w */ { 0, BX_IA_ADC_GwEw }, + /* 14 /w */ { BxImmediate_Ib, BX_IA_ADC_ALIb }, + /* 15 /w */ { BxImmediate_Iw, BX_IA_ADC_AXIw }, + /* 16 /w */ { 0, BX_IA_PUSH16_SS }, + /* 17 /w */ { BxTraceEnd, BX_IA_POP16_SS }, // async_event = 1 + /* 18 /w */ { BxLockable | BxArithDstRM, BX_IA_SBB_EbGb }, + /* 19 /w */ { BxLockable | BxArithDstRM, BX_IA_SBB_EwGw }, + /* 1A /w */ { 0, BX_IA_SBB_GbEb }, + /* 1B /w */ { 0, BX_IA_SBB_GwEw }, + /* 1C /w */ { BxImmediate_Ib, BX_IA_SBB_ALIb }, + /* 1D /w */ { BxImmediate_Iw, BX_IA_SBB_AXIw }, + /* 1E /w */ { 0, BX_IA_PUSH16_DS }, + /* 1F /w */ { 0, BX_IA_POP16_DS }, + /* 20 /w */ { BxLockable | BxArithDstRM, BX_IA_AND_EbGb }, + /* 21 /w */ { BxLockable | BxArithDstRM, BX_IA_AND_EwGw }, + /* 22 /w */ { 0, BX_IA_AND_GbEb }, + /* 23 /w */ { 0, BX_IA_AND_GwEw }, + /* 24 /w */ { BxImmediate_Ib, BX_IA_AND_ALIb }, + /* 25 /w */ { BxImmediate_Iw, BX_IA_AND_AXIw }, + /* 26 /w */ { 0, BX_IA_ERROR }, // ES: + /* 27 /w */ { 0, BX_IA_DAA }, + /* 28 /w */ { BxLockable | BxArithDstRM, BX_IA_SUB_EbGb }, + /* 29 /w */ { BxLockable | BxArithDstRM, BX_IA_SUB_EwGw }, + /* 2A /w */ { 0, BX_IA_SUB_GbEb }, + /* 2B /w */ { 0, BX_IA_SUB_GwEw }, + /* 2C /w */ { BxImmediate_Ib, BX_IA_SUB_ALIb }, + /* 2D /w */ { BxImmediate_Iw, BX_IA_SUB_AXIw }, + /* 2E /w */ { 0, BX_IA_ERROR }, // CS: + /* 2F /w */ { 0, BX_IA_DAS }, + /* 30 /w */ { BxLockable | BxArithDstRM, BX_IA_XOR_EbGb }, + /* 31 /w */ { BxLockable | BxArithDstRM, BX_IA_XOR_EwGw }, + /* 32 /w */ { 0, BX_IA_XOR_GbEb }, + /* 33 /w */ { 0, BX_IA_XOR_GwEw }, + /* 34 /w */ { BxImmediate_Ib, BX_IA_XOR_ALIb }, + /* 35 /w */ { BxImmediate_Iw, BX_IA_XOR_AXIw }, + /* 36 /w */ { 0, BX_IA_ERROR }, // SS: + /* 37 /w */ { 0, BX_IA_AAA }, + /* 38 /w */ { BxArithDstRM, BX_IA_CMP_EbGb }, + /* 39 /w */ { BxArithDstRM, BX_IA_CMP_EwGw }, + /* 3A /w */ { 0, BX_IA_CMP_GbEb }, + /* 3B /w */ { 0, BX_IA_CMP_GwEw }, + /* 3C /w */ { BxImmediate_Ib, BX_IA_CMP_ALIb }, + /* 3D /w */ { BxImmediate_Iw, BX_IA_CMP_AXIw }, + /* 3E /w */ { 0, BX_IA_ERROR }, // DS: + /* 3F /w */ { 0, BX_IA_AAS }, + /* 40 /w */ { 0, BX_IA_INC_RX }, + /* 41 /w */ { 0, BX_IA_INC_RX }, + /* 42 /w */ { 0, BX_IA_INC_RX }, + /* 43 /w */ { 0, BX_IA_INC_RX }, + /* 44 /w */ { 0, BX_IA_INC_RX }, + /* 45 /w */ { 0, BX_IA_INC_RX }, + /* 46 /w */ { 0, BX_IA_INC_RX }, + /* 47 /w */ { 0, BX_IA_INC_RX }, + /* 48 /w */ { 0, BX_IA_DEC_RX }, + /* 49 /w */ { 0, BX_IA_DEC_RX }, + /* 4A /w */ { 0, BX_IA_DEC_RX }, + /* 4B /w */ { 0, BX_IA_DEC_RX }, + /* 4C /w */ { 0, BX_IA_DEC_RX }, + /* 4D /w */ { 0, BX_IA_DEC_RX }, + /* 4E /w */ { 0, BX_IA_DEC_RX }, + /* 4F /w */ { 0, BX_IA_DEC_RX }, + /* 50 /w */ { 0, BX_IA_PUSH_RX }, + /* 51 /w */ { 0, BX_IA_PUSH_RX }, + /* 52 /w */ { 0, BX_IA_PUSH_RX }, + /* 53 /w */ { 0, BX_IA_PUSH_RX }, + /* 54 /w */ { 0, BX_IA_PUSH_RX }, + /* 55 /w */ { 0, BX_IA_PUSH_RX }, + /* 56 /w */ { 0, BX_IA_PUSH_RX }, + /* 57 /w */ { 0, BX_IA_PUSH_RX }, + /* 58 /w */ { 0, BX_IA_POP_RX }, + /* 59 /w */ { 0, BX_IA_POP_RX }, + /* 5A /w */ { 0, BX_IA_POP_RX }, + /* 5B /w */ { 0, BX_IA_POP_RX }, + /* 5C /w */ { 0, BX_IA_POP_RX }, + /* 5D /w */ { 0, BX_IA_POP_RX }, + /* 5E /w */ { 0, BX_IA_POP_RX }, + /* 5F /w */ { 0, BX_IA_POP_RX }, + /* 60 /w */ { 0, BX_IA_PUSHAD16 }, + /* 61 /w */ { 0, BX_IA_POPAD16 }, + /* 62 /w */ { 0, BX_IA_BOUND_GwMa }, + /* 63 /w */ { 0, BX_IA_ARPL_EwGw }, + /* 64 /w */ { 0, BX_IA_ERROR }, // FS: + /* 65 /w */ { 0, BX_IA_ERROR }, // GS: + /* 66 /w */ { 0, BX_IA_ERROR }, // OS: + /* 67 /w */ { 0, BX_IA_ERROR }, // AS: + /* 68 /w */ { BxImmediate_Iw, BX_IA_PUSH_Iw }, + /* 69 /w */ { BxImmediate_Iw, BX_IA_IMUL_GwEwIw }, + /* 6A /w */ { BxImmediate_Ib_SE, BX_IA_PUSH_Iw }, + /* 6B /w */ { BxImmediate_Ib_SE, BX_IA_IMUL_GwEwIw }, + /* 6C /w */ { 0, BX_IA_REP_INSB_YbDX }, + /* 6D /w */ { 0, BX_IA_REP_INSW_YwDX }, + /* 6E /w */ { 0, BX_IA_REP_OUTSB_DXXb }, + /* 6F /w */ { 0, BX_IA_REP_OUTSW_DXXw }, + /* 70 /w */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JO_Jw }, + /* 71 /w */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNO_Jw }, + /* 72 /w */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JB_Jw }, + /* 73 /w */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNB_Jw }, + /* 74 /w */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JZ_Jw }, + /* 75 /w */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNZ_Jw }, + /* 76 /w */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JBE_Jw }, + /* 77 /w */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNBE_Jw }, + /* 78 /w */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JS_Jw }, + /* 79 /w */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNS_Jw }, + /* 7A /w */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JP_Jw }, + /* 7B /w */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNP_Jw }, + /* 7C /w */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JL_Jw }, + /* 7D /w */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNL_Jw }, + /* 7E /w */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JLE_Jw }, + /* 7F /w */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNLE_Jw }, + /* 80 /w */ { BxGroup1 | BxImmediate_Ib, BX_IA_ERROR, BxOpcodeInfoG1EbIb }, + /* 81 /w */ { BxGroup1 | BxImmediate_Iw, BX_IA_ERROR, BxOpcodeInfoG1Ew }, + /* 82 /w */ { BxGroup1 | BxImmediate_Ib, BX_IA_ERROR, BxOpcodeInfoG1EbIb }, + /* 83 /w */ { BxGroup1 | BxImmediate_Ib_SE, BX_IA_ERROR, BxOpcodeInfoG1Ew }, + /* 84 /w */ { 0, BX_IA_TEST_EbGb }, + /* 85 /w */ { 0, BX_IA_TEST_EwGw }, + /* 86 /w */ { BxLockable, BX_IA_XCHG_EbGb }, + /* 87 /w */ { BxLockable, BX_IA_XCHG_EwGw }, + /* 88 /w */ { BxArithDstRM, BX_IA_MOV_EbGb }, + /* 89 /w */ { BxArithDstRM, BX_IA_MOV_EwGw }, + /* 8A /w */ { 0, BX_IA_MOV_GbEb }, + /* 8B /w */ { 0, BX_IA_MOV_GwEw }, + /* 8C /w */ { 0, BX_IA_MOV_EwSw }, + /* 8D /w */ { 0, BX_IA_LEA_GwM }, + /* 8E /w */ { 0, BX_IA_MOV_SwEw }, + /* 8F /w */ { BxGroup1A, BX_IA_ERROR, BxOpcodeInfoG1AEw }, + /* 90 /w */ { BxPrefixSSE, BX_IA_NOP, BxOpcodeGroupSSE_PAUSE }, + /* 91 /w */ { 0, BX_IA_XCHG_RXAX }, + /* 92 /w */ { 0, BX_IA_XCHG_RXAX }, + /* 93 /w */ { 0, BX_IA_XCHG_RXAX }, + /* 94 /w */ { 0, BX_IA_XCHG_RXAX }, + /* 95 /w */ { 0, BX_IA_XCHG_RXAX }, + /* 96 /w */ { 0, BX_IA_XCHG_RXAX }, + /* 97 /w */ { 0, BX_IA_XCHG_RXAX }, + /* 98 /w */ { 0, BX_IA_CBW }, + /* 99 /w */ { 0, BX_IA_CWD }, + /* 9A /w */ { BxImmediate_Iw | BxImmediate_Iw2 | BxTraceEnd, BX_IA_CALL16_Ap }, + /* 9B /w */ { 0, BX_IA_FWAIT }, + /* 9C /w */ { 0, BX_IA_PUSHF_Fw }, + /* 9D /w */ { 0, BX_IA_POPF_Fw }, + /* 9E /w */ { 0, BX_IA_SAHF }, + /* 9F /w */ { 0, BX_IA_LAHF }, + /* A0 /w */ { BxImmediate_O, BX_IA_MOV_ALOd }, + /* A1 /w */ { BxImmediate_O, BX_IA_MOV_AXOd }, + /* A2 /w */ { BxImmediate_O, BX_IA_MOV_OdAL }, + /* A3 /w */ { BxImmediate_O, BX_IA_MOV_OdAX }, + /* A4 /w */ { 0, BX_IA_REP_MOVSB_XbYb }, + /* A5 /w */ { 0, BX_IA_REP_MOVSW_XwYw }, + /* A6 /w */ { 0, BX_IA_REP_CMPSB_XbYb }, + /* A7 /w */ { 0, BX_IA_REP_CMPSW_XwYw }, + /* A8 /w */ { BxImmediate_Ib, BX_IA_TEST_ALIb }, + /* A9 /w */ { BxImmediate_Iw, BX_IA_TEST_AXIw }, + /* AA /w */ { 0, BX_IA_REP_STOSB_YbAL }, + /* AB /w */ { 0, BX_IA_REP_STOSW_YwAX }, + /* AC /w */ { 0, BX_IA_REP_LODSB_ALXb }, + /* AD /w */ { 0, BX_IA_REP_LODSW_AXXw }, + /* AE /w */ { 0, BX_IA_REP_SCASB_ALXb }, + /* AF /w */ { 0, BX_IA_REP_SCASW_AXXw }, + /* B0 /w */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, + /* B1 /w */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, + /* B2 /w */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, + /* B3 /w */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, + /* B4 /w */ { BxImmediate_Ib, BX_IA_MOV_RHIb }, + /* B5 /w */ { BxImmediate_Ib, BX_IA_MOV_RHIb }, + /* B6 /w */ { BxImmediate_Ib, BX_IA_MOV_RHIb }, + /* B7 /w */ { BxImmediate_Ib, BX_IA_MOV_RHIb }, + /* B8 /w */ { BxImmediate_Iw, BX_IA_MOV_RXIw }, + /* B9 /w */ { BxImmediate_Iw, BX_IA_MOV_RXIw }, + /* BA /w */ { BxImmediate_Iw, BX_IA_MOV_RXIw }, + /* BB /w */ { BxImmediate_Iw, BX_IA_MOV_RXIw }, + /* BC /w */ { BxImmediate_Iw, BX_IA_MOV_RXIw }, + /* BD /w */ { BxImmediate_Iw, BX_IA_MOV_RXIw }, + /* BE /w */ { BxImmediate_Iw, BX_IA_MOV_RXIw }, + /* BF /w */ { BxImmediate_Iw, BX_IA_MOV_RXIw }, + /* C0 /w */ { BxGroup2 | BxImmediate_Ib, BX_IA_ERROR, BxOpcodeInfoG2Eb }, + /* C1 /w */ { BxGroup2 | BxImmediate_Ib, BX_IA_ERROR, BxOpcodeInfoG2Ew }, + /* C2 /w */ { BxImmediate_Iw | BxTraceEnd, BX_IA_RETnear16_Iw }, + /* C3 /w */ { BxTraceEnd, BX_IA_RETnear16 }, + /* C4 /w */ { 0, BX_IA_LES_GwMp }, + /* C5 /w */ { 0, BX_IA_LDS_GwMp }, + /* C6 /w */ { BxGroup11, BX_IA_ERROR, BxOpcodeInfoG11Eb }, + /* C7 /w */ { BxGroup11, BX_IA_ERROR, BxOpcodeInfoG11Ew }, + /* C8 /w */ { BxImmediate_Iw | BxImmediate_Ib2, BX_IA_ENTER16_IwIb }, + /* C9 /w */ { 0, BX_IA_LEAVE16 }, + /* CA /w */ { BxImmediate_Iw | BxTraceEnd, BX_IA_RETfar16_Iw }, + /* CB /w */ { BxTraceEnd, BX_IA_RETfar16 }, + /* CC /w */ { BxTraceEnd, BX_IA_INT3 }, + /* CD /w */ { BxImmediate_Ib | BxTraceEnd, BX_IA_INT_Ib }, + /* CE /w */ { BxTraceEnd, BX_IA_INTO }, + /* CF /w */ { BxTraceEnd, BX_IA_IRET16 }, + /* D0 /w */ { BxGroup2 | BxImmediate_I1, BX_IA_ERROR, BxOpcodeInfoG2Eb }, + /* D1 /w */ { BxGroup2 | BxImmediate_I1, BX_IA_ERROR, BxOpcodeInfoG2Ew }, + /* D2 /w */ { BxGroup2, BX_IA_ERROR, BxOpcodeInfoG2Eb }, + /* D3 /w */ { BxGroup2, BX_IA_ERROR, BxOpcodeInfoG2Ew }, + /* D4 /w */ { BxImmediate_Ib, BX_IA_AAM }, + /* D5 /w */ { BxImmediate_Ib, BX_IA_AAD }, + /* D6 /w */ { 0, BX_IA_SALC }, + /* D7 /w */ { 0, BX_IA_XLAT }, #if BX_SUPPORT_FPU - /* D8 /wr */ { BxGroupN, BX_IA_ERROR, BxOpcodeInfo_FloatingPointD8 }, - /* D8 /wm */ { BxGroupFP, BX_IA_ERROR, BxOpcodeInfo_FPGroupD8 }, - /* D9 /wr */ { BxFPEscape, BX_IA_ERROR, BxOpcodeInfo_FloatingPointD9 }, - /* D9 /wm */ { BxGroupFP, BX_IA_ERROR, BxOpcodeInfo_FPGroupD9 }, - /* DA /wr */ { BxFPEscape, BX_IA_ERROR, BxOpcodeInfo_FloatingPointDA }, - /* DA /wm */ { BxGroupFP, BX_IA_ERROR, BxOpcodeInfo_FPGroupDA }, - /* DB /wr */ { BxFPEscape, BX_IA_ERROR, BxOpcodeInfo_FloatingPointDB }, - /* DB /wm */ { BxGroupFP, BX_IA_ERROR, BxOpcodeInfo_FPGroupDB }, - /* DC /wr */ { BxGroupN, BX_IA_ERROR, BxOpcodeInfo_FloatingPointDC }, - /* DC /wm */ { BxGroupFP, BX_IA_ERROR, BxOpcodeInfo_FPGroupDC }, - /* DD /wr */ { BxGroupN, BX_IA_ERROR, BxOpcodeInfo_FloatingPointDD }, - /* DD /wm */ { BxGroupFP, BX_IA_ERROR, BxOpcodeInfo_FPGroupDD }, - /* DE /wr */ { BxFPEscape, BX_IA_ERROR, BxOpcodeInfo_FloatingPointDE }, - /* DE /wm */ { BxGroupFP, BX_IA_ERROR, BxOpcodeInfo_FPGroupDE }, - /* DF /wr */ { BxFPEscape, BX_IA_ERROR, BxOpcodeInfo_FloatingPointDF }, - /* DF /wm */ { BxGroupFP, BX_IA_ERROR, BxOpcodeInfo_FPGroupDF }, + /* D8 /w */ { BxGroupFP, BX_IA_ERROR, BxOpcodeInfo_FPGroupD8 }, + /* D9 /w */ { BxFPEscape, BX_IA_ERROR, BxOpcodeInfo_FloatingPointD9 }, + /* DA /w */ { BxFPEscape, BX_IA_ERROR, BxOpcodeInfo_FloatingPointDA }, + /* DB /w */ { BxFPEscape, BX_IA_ERROR, BxOpcodeInfo_FloatingPointDB }, + /* DC /w */ { BxGroupFP, BX_IA_ERROR, BxOpcodeInfo_FPGroupDC }, + /* DD /w */ { BxGroupFP, BX_IA_ERROR, BxOpcodeInfo_FPGroupDD }, + /* DE /w */ { BxFPEscape, BX_IA_ERROR, BxOpcodeInfo_FloatingPointDE }, + /* DF /w */ { BxFPEscape, BX_IA_ERROR, BxOpcodeInfo_FloatingPointDF }, #else - /* D8 /wr */ { 0, BX_IA_FPU_ESC }, - /* D8 /wm */ { 0, BX_IA_FPU_ESC }, - /* D9 /wr */ { 0, BX_IA_FPU_ESC }, - /* D9 /wm */ { 0, BX_IA_FPU_ESC }, - /* DA /wr */ { 0, BX_IA_FPU_ESC }, - /* DA /wm */ { 0, BX_IA_FPU_ESC }, - /* DB /wr */ { 0, BX_IA_FPU_ESC }, - /* DB /wm */ { 0, BX_IA_FPU_ESC }, - /* DC /wr */ { 0, BX_IA_FPU_ESC }, - /* DC /wm */ { 0, BX_IA_FPU_ESC }, - /* DD /wr */ { 0, BX_IA_FPU_ESC }, - /* DD /wm */ { 0, BX_IA_FPU_ESC }, - /* DE /wr */ { 0, BX_IA_FPU_ESC }, - /* DE /wm */ { 0, BX_IA_FPU_ESC }, - /* DF /wr */ { 0, BX_IA_FPU_ESC }, - /* DF /wm */ { 0, BX_IA_FPU_ESC }, + /* D8 /w */ { 0, BX_IA_FPU_ESC }, + /* D9 /w */ { 0, BX_IA_FPU_ESC }, + /* DA /w */ { 0, BX_IA_FPU_ESC }, + /* DB /w */ { 0, BX_IA_FPU_ESC }, + /* DC /w */ { 0, BX_IA_FPU_ESC }, + /* DD /w */ { 0, BX_IA_FPU_ESC }, + /* DE /w */ { 0, BX_IA_FPU_ESC }, + /* DF /w */ { 0, BX_IA_FPU_ESC }, #endif - /* E0 /wr */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_LOOPNE16_Jb }, - /* E0 /wm */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_LOOPNE16_Jb }, - /* E1 /wr */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_LOOPE16_Jb }, - /* E1 /wm */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_LOOPE16_Jb }, - /* E2 /wr */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_LOOP16_Jb }, - /* E2 /wm */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_LOOP16_Jb }, - /* E3 /wr */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_JCXZ_Jb }, - /* E3 /wm */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_JCXZ_Jb }, - /* E4 /wr */ { BxImmediate_Ib, BX_IA_IN_ALIb }, - /* E4 /wm */ { BxImmediate_Ib, BX_IA_IN_ALIb }, - /* E5 /wr */ { BxImmediate_Ib, BX_IA_IN_AXIb }, - /* E5 /wm */ { BxImmediate_Ib, BX_IA_IN_AXIb }, - /* E6 /wr */ { BxImmediate_Ib, BX_IA_OUT_IbAL }, - /* E6 /wm */ { BxImmediate_Ib, BX_IA_OUT_IbAL }, - /* E7 /wr */ { BxImmediate_Ib, BX_IA_OUT_IbAX }, - /* E7 /wm */ { BxImmediate_Ib, BX_IA_OUT_IbAX }, - /* E8 /wr */ { BxImmediate_BrOff16 | BxTraceEnd, BX_IA_CALL_Jw }, - /* E8 /wm */ { BxImmediate_BrOff16 | BxTraceEnd, BX_IA_CALL_Jw }, - /* E9 /wr */ { BxImmediate_BrOff16 | BxTraceEnd, BX_IA_JMP_Jw }, - /* E9 /wm */ { BxImmediate_BrOff16 | BxTraceEnd, BX_IA_JMP_Jw }, - /* EA /wr */ { BxImmediate_Iw | BxImmediate_Iw2 | BxTraceEnd, BX_IA_JMP_Ap }, - /* EA /wm */ { BxImmediate_Iw | BxImmediate_Iw2 | BxTraceEnd, BX_IA_JMP_Ap }, - /* EB /wr */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_JMP_Jw }, - /* EB /wm */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_JMP_Jw }, - /* EC /wr */ { 0, BX_IA_IN_ALDX }, - /* EC /wm */ { 0, BX_IA_IN_ALDX }, - /* ED /wr */ { 0, BX_IA_IN_AXDX }, - /* ED /wm */ { 0, BX_IA_IN_AXDX }, - /* EE /wr */ { 0, BX_IA_OUT_DXAL }, - /* EE /wm */ { 0, BX_IA_OUT_DXAL }, - /* EF /wr */ { 0, BX_IA_OUT_DXAX }, - /* EF /wm */ { 0, BX_IA_OUT_DXAX }, - /* F0 /wr */ { 0, BX_IA_ERROR }, // LOCK - /* F0 /wm */ { 0, BX_IA_ERROR }, // LOCK - /* F1 /wr */ { BxTraceEnd, BX_IA_INT1 }, - /* F1 /wm */ { BxTraceEnd, BX_IA_INT1 }, - /* F2 /wr */ { 0, BX_IA_ERROR }, // REPNE/REPNZ - /* F2 /wm */ { 0, BX_IA_ERROR }, // REPNE/REPNZ - /* F3 /wr */ { 0, BX_IA_ERROR }, // REP, REPE/REPZ - /* F3 /wm */ { 0, BX_IA_ERROR }, // REP, REPE/REPZ - /* F4 /wr */ { BxTraceEnd, BX_IA_HLT }, - /* F4 /wm */ { BxTraceEnd, BX_IA_HLT }, - /* F5 /wr */ { 0, BX_IA_CMC }, - /* F5 /wm */ { 0, BX_IA_CMC }, - /* F6 /wr */ { BxGroup3, BX_IA_ERROR, BxOpcodeInfoG3Eb }, - /* F6 /wm */ { BxGroup3, BX_IA_ERROR, BxOpcodeInfoG3Eb }, - /* F7 /wr */ { BxGroup3, BX_IA_ERROR, BxOpcodeInfoG3Ew }, - /* F7 /wm */ { BxGroup3, BX_IA_ERROR, BxOpcodeInfoG3Ew }, - /* F8 /wr */ { 0, BX_IA_CLC }, - /* F8 /wm */ { 0, BX_IA_CLC }, - /* F9 /wr */ { 0, BX_IA_STC }, - /* F9 /wm */ { 0, BX_IA_STC }, - /* FA /wr */ { 0, BX_IA_CLI }, - /* FA /wm */ { 0, BX_IA_CLI }, - /* FB /wr */ { 0, BX_IA_STI }, - /* FB /wm */ { 0, BX_IA_STI }, - /* FC /wr */ { 0, BX_IA_CLD }, - /* FC /wm */ { 0, BX_IA_CLD }, - /* FD /wr */ { 0, BX_IA_STD }, - /* FD /wm */ { 0, BX_IA_STD }, - /* FE /wr */ { BxGroup4, BX_IA_ERROR, BxOpcodeInfoG4 }, - /* FE /wm */ { BxGroup4, BX_IA_ERROR, BxOpcodeInfoG4 }, - /* FF /wr */ { BxGroup5, BX_IA_ERROR, BxOpcodeInfoG5w }, - /* FF /wm */ { BxGroup5, BX_IA_ERROR, BxOpcodeInfoG5w }, + /* E0 /w */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_LOOPNE16_Jb }, + /* E1 /w */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_LOOPE16_Jb }, + /* E2 /w */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_LOOP16_Jb }, + /* E3 /w */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_JCXZ_Jb }, + /* E4 /w */ { BxImmediate_Ib, BX_IA_IN_ALIb }, + /* E5 /w */ { BxImmediate_Ib, BX_IA_IN_AXIb }, + /* E6 /w */ { BxImmediate_Ib, BX_IA_OUT_IbAL }, + /* E7 /w */ { BxImmediate_Ib, BX_IA_OUT_IbAX }, + /* E8 /w */ { BxImmediate_BrOff16 | BxTraceEnd, BX_IA_CALL_Jw }, + /* E9 /w */ { BxImmediate_BrOff16 | BxTraceEnd, BX_IA_JMP_Jw }, + /* EA /w */ { BxImmediate_Iw | BxImmediate_Iw2 | BxTraceEnd, BX_IA_JMP_Ap }, + /* EB /w */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_JMP_Jw }, + /* EC /w */ { 0, BX_IA_IN_ALDX }, + /* ED /w */ { 0, BX_IA_IN_AXDX }, + /* EE /w */ { 0, BX_IA_OUT_DXAL }, + /* EF /w */ { 0, BX_IA_OUT_DXAX }, + /* F0 /w */ { 0, BX_IA_ERROR }, // LOCK + /* F1 /w */ { BxTraceEnd, BX_IA_INT1 }, + /* F2 /w */ { 0, BX_IA_ERROR }, // REPNE/REPNZ + /* F3 /w */ { 0, BX_IA_ERROR }, // REP, REPE/REPZ + /* F4 /w */ { BxTraceEnd, BX_IA_HLT }, + /* F5 /w */ { 0, BX_IA_CMC }, + /* F6 /w */ { BxGroup3, BX_IA_ERROR, BxOpcodeInfoG3Eb }, + /* F7 /w */ { BxGroup3, BX_IA_ERROR, BxOpcodeInfoG3Ew }, + /* F8 /w */ { 0, BX_IA_CLC }, + /* F9 /w */ { 0, BX_IA_STC }, + /* FA /w */ { 0, BX_IA_CLI }, + /* FB /w */ { 0, BX_IA_STI }, + /* FC /w */ { 0, BX_IA_CLD }, + /* FD /w */ { 0, BX_IA_STD }, + /* FE /w */ { BxGroup4, BX_IA_ERROR, BxOpcodeInfoG4 }, + /* FF /w */ { BxGroup5, BX_IA_ERROR, BxOpcodeInfoG5w }, - /* 0F 00 /wr */ { BxGroup6, BX_IA_ERROR, BxOpcodeInfoG6 }, - /* 0F 00 /wm */ { BxGroup6, BX_IA_ERROR, BxOpcodeInfoG6 }, - /* 0F 01 /wr */ { BxFPEscape, BX_IA_ERROR, BxOpcodeInfoG7R }, - /* 0F 01 /wm */ { BxGroup7, BX_IA_ERROR, BxOpcodeInfoG7M }, - /* 0F 02 /wr */ { 0, BX_IA_LAR_GvEw }, - /* 0F 02 /wm */ { 0, BX_IA_LAR_GvEw }, - /* 0F 03 /wr */ { 0, BX_IA_LSL_GvEw }, - /* 0F 03 /wm */ { 0, BX_IA_LSL_GvEw }, - /* 0F 04 /wr */ { 0, BX_IA_ERROR }, - /* 0F 04 /wm */ { 0, BX_IA_ERROR }, + /* 0F 00 /w */ { BxGroup6, BX_IA_ERROR, BxOpcodeInfoG6 }, + /* 0F 01 /w */ { BxGroup7, BX_IA_ERROR, BxOpcodeInfoG7 }, + /* 0F 02 /w */ { 0, BX_IA_LAR_GvEw }, + /* 0F 03 /w */ { 0, BX_IA_LSL_GvEw }, + /* 0F 04 /w */ { 0, BX_IA_ERROR }, #if BX_SUPPORT_X86_64 - /* 0F 05 /wr */ { BxTraceEnd, BX_IA_SYSCALL }, - /* 0F 05 /wm */ { BxTraceEnd, BX_IA_SYSCALL }, + /* 0F 05 /w */ { BxTraceEnd, BX_IA_SYSCALL }, #else - /* 0F 05 /wr */ { 0, BX_IA_ERROR }, - /* 0F 05 /wm */ { 0, BX_IA_ERROR }, + /* 0F 05 /w */ { 0, BX_IA_ERROR }, #endif - /* 0F 06 /wr */ { 0, BX_IA_CLTS }, - /* 0F 06 /wm */ { 0, BX_IA_CLTS }, + /* 0F 06 /w */ { 0, BX_IA_CLTS }, #if BX_SUPPORT_X86_64 - /* 0F 07 /wr */ { BxTraceEnd, BX_IA_SYSRET }, - /* 0F 07 /wm */ { BxTraceEnd, BX_IA_SYSRET }, + /* 0F 07 /w */ { BxTraceEnd, BX_IA_SYSRET }, #else - /* 0F 07 /wr */ { 0, BX_IA_ERROR }, - /* 0F 07 /wm */ { 0, BX_IA_ERROR }, + /* 0F 07 /w */ { 0, BX_IA_ERROR }, #endif - /* 0F 08 /wr */ { BxTraceEnd, BX_IA_INVD }, - /* 0F 08 /wm */ { BxTraceEnd, BX_IA_INVD }, - /* 0F 09 /wr */ { BxTraceEnd, BX_IA_WBINVD }, - /* 0F 09 /wm */ { BxTraceEnd, BX_IA_WBINVD }, - /* 0F 0A /wr */ { 0, BX_IA_ERROR }, - /* 0F 0A /wm */ { 0, BX_IA_ERROR }, - /* 0F 0B /wr */ { BxTraceEnd, BX_IA_UD2A }, - /* 0F 0B /wm */ { BxTraceEnd, BX_IA_UD2A }, - /* 0F 0C /wr */ { 0, BX_IA_ERROR }, - /* 0F 0C /wm */ { 0, BX_IA_ERROR }, - /* 0F 0D /wr */ { 0, BX_IA_PREFETCHW }, // 3DNow! PREFETCHW on AMD, NOP on Intel - /* 0F 0D /wm */ { 0, BX_IA_PREFETCHW }, // 3DNow! PREFETCHW on AMD, NOP on Intel - /* 0F 0E /wr */ { 0, BX_IA_FEMMS }, // 3DNow! FEMMS - /* 0F 0E /wm */ { 0, BX_IA_FEMMS }, // 3DNow! FEMMS - /* 0F 0F /wr */ { BxImmediate_Ib, BX_IA_ERROR }, // 3DNow! Opcode Table - /* 0F 0F /wm */ { BxImmediate_Ib, BX_IA_ERROR }, // 3DNow! Opcode Table - /* 0F 10 /wr */ { BxPrefixSSE, BX_IA_MOVUPS_VpsWps, BxOpcodeGroupSSE_0f10 }, - /* 0F 10 /wm */ { BxPrefixSSE, BX_IA_MOVUPS_VpsWps, BxOpcodeGroupSSE_0f10 }, - /* 0F 11 /wr */ { BxPrefixSSE | BxArithDstRM, BX_IA_MOVUPS_WpsVps, BxOpcodeGroupSSE_0f11 }, - /* 0F 11 /wm */ { BxPrefixSSE, BX_IA_MOVUPS_WpsVps, BxOpcodeGroupSSE_0f11 }, - /* 0F 12 /wr */ { BxPrefixSSE, BX_IA_MOVLPS_VpsMq, BxOpcodeGroupSSE_0f12 }, - /* 0F 12 /wm */ { BxPrefixSSE, BX_IA_MOVLPS_VpsMq, BxOpcodeGroupSSE_0f12 }, - /* 0F 13 /wr */ { 0, BX_IA_ERROR }, // MOVLPS/PD SSE group - /* 0F 13 /wm */ { BxPrefixSSE, BX_IA_MOVLPS_MqVps, BxOpcodeGroupSSE_0f13M }, - /* 0F 14 /wr */ { BxPrefixSSE, BX_IA_UNPCKLPS_VpsWdq, BxOpcodeGroupSSE_0f14 }, - /* 0F 14 /wm */ { BxPrefixSSE, BX_IA_UNPCKLPS_VpsWdq, BxOpcodeGroupSSE_0f14 }, - /* 0F 15 /wr */ { BxPrefixSSE, BX_IA_UNPCKHPS_VpsWdq, BxOpcodeGroupSSE_0f15 }, - /* 0F 15 /wm */ { BxPrefixSSE, BX_IA_UNPCKHPS_VpsWdq, BxOpcodeGroupSSE_0f15 }, - /* 0F 16 /wr */ { BxPrefixSSE, BX_IA_MOVHPS_VpsMq, BxOpcodeGroupSSE_0f16 }, - /* 0F 16 /wm */ { BxPrefixSSE, BX_IA_MOVHPS_VpsMq, BxOpcodeGroupSSE_0f16 }, - /* 0F 17 /wr */ { 0, BX_IA_ERROR }, // MOHLPS/PD SSE group - /* 0F 17 /wm */ { BxPrefixSSE, BX_IA_MOVHPS_MqVps, BxOpcodeGroupSSE_0f17M }, + /* 0F 08 /w */ { BxTraceEnd, BX_IA_INVD }, + /* 0F 09 /w */ { BxTraceEnd, BX_IA_WBINVD }, + /* 0F 0A /w */ { 0, BX_IA_ERROR }, + /* 0F 0B /w */ { BxTraceEnd, BX_IA_UD2A }, + /* 0F 0C /w */ { 0, BX_IA_ERROR }, + /* 0F 0D /w */ { 0, BX_IA_PREFETCHW }, // 3DNow! PREFETCHW on AMD, NOP on Intel + /* 0F 0E /w */ { 0, BX_IA_FEMMS }, // 3DNow! FEMMS + /* 0F 0F /w */ { BxImmediate_Ib, BX_IA_ERROR }, // 3DNow! Opcode Table + /* 0F 10 /w */ { BxPrefixSSE, BX_IA_MOVUPS_VpsWps, BxOpcodeGroupSSE_0f10 }, + /* 0F 11 /w */ { BxPrefixSSE | BxArithDstRM, BX_IA_MOVUPS_WpsVps, BxOpcodeGroupSSE_0f11 }, + /* 0F 12 /w */ { BxPrefixSSE, BX_IA_MOVLPS_VpsMq, BxOpcodeGroupSSE_0f12 }, + /* 0F 13 /w */ { BxPrefixSSE, BX_IA_MOVLPS_MqVps, BxOpcodeGroupSSE_0f13M }, + /* 0F 14 /w */ { BxPrefixSSE, BX_IA_UNPCKLPS_VpsWdq, BxOpcodeGroupSSE_0f14 }, + /* 0F 15 /w */ { BxPrefixSSE, BX_IA_UNPCKHPS_VpsWdq, BxOpcodeGroupSSE_0f15 }, + /* 0F 16 /w */ { BxPrefixSSE, BX_IA_MOVHPS_VpsMq, BxOpcodeGroupSSE_0f16 }, + /* 0F 17 /w */ { BxPrefixSSE, BX_IA_MOVHPS_MqVps, BxOpcodeGroupSSE_0f17M }, #if BX_CPU_LEVEL >= 6 - /* 0F 18 /wr */ { 0, BX_IA_NOP }, // PREFETCH HINT - /* 0F 18 /wm */ { 0, BX_IA_PREFETCH }, // opcode group G16, PREFETCH hints - /* 0F 19 /wr */ { 0, BX_IA_NOP }, // multi-byte NOP - /* 0F 19 /wm */ { 0, BX_IA_NOP }, // multi-byte NOP - /* 0F 1A /wr */ { 0, BX_IA_NOP }, // multi-byte NOP - /* 0F 1A /wm */ { 0, BX_IA_NOP }, // multi-byte NOP - /* 0F 1B /wr */ { 0, BX_IA_NOP }, // multi-byte NOP - /* 0F 1B /wm */ { 0, BX_IA_NOP }, // multi-byte NOP - /* 0F 1C /wr */ { 0, BX_IA_NOP }, // multi-byte NOP - /* 0F 1C /wm */ { 0, BX_IA_NOP }, // multi-byte NOP - /* 0F 1D /wr */ { 0, BX_IA_NOP }, // multi-byte NOP - /* 0F 1D /wm */ { 0, BX_IA_NOP }, // multi-byte NOP - /* 0F 1E /wr */ { 0, BX_IA_NOP }, // multi-byte NOP - /* 0F 1E /wm */ { 0, BX_IA_NOP }, // multi-byte NOP - /* 0F 1F /wr */ { 0, BX_IA_NOP }, // multi-byte NOP - /* 0F 1F /wm */ { 0, BX_IA_NOP }, // multi-byte NOP + /* 0F 18 /w */ { 0, BX_IA_PREFETCH }, // opcode group G16, PREFETCH hints + /* 0F 19 /w */ { 0, BX_IA_NOP }, // multi-byte NOP + /* 0F 1A /w */ { 0, BX_IA_NOP }, // multi-byte NOP + /* 0F 1B /w */ { 0, BX_IA_NOP }, // multi-byte NOP + /* 0F 1C /w */ { 0, BX_IA_NOP }, // multi-byte NOP + /* 0F 1D /w */ { 0, BX_IA_NOP }, // multi-byte NOP + /* 0F 1E /w */ { 0, BX_IA_NOP }, // multi-byte NOP + /* 0F 1F /w */ { 0, BX_IA_NOP }, // multi-byte NOP #else - /* 0F 18 /wr */ { 0, BX_IA_ERROR }, - /* 0F 18 /wm */ { 0, BX_IA_ERROR }, - /* 0F 19 /wr */ { 0, BX_IA_ERROR }, - /* 0F 19 /wm */ { 0, BX_IA_ERROR }, - /* 0F 1A /wr */ { 0, BX_IA_ERROR }, - /* 0F 1A /wm */ { 0, BX_IA_ERROR }, - /* 0F 1B /wr */ { 0, BX_IA_ERROR }, - /* 0F 1B /wm */ { 0, BX_IA_ERROR }, - /* 0F 1C /wr */ { 0, BX_IA_ERROR }, - /* 0F 1C /wm */ { 0, BX_IA_ERROR }, - /* 0F 1D /wr */ { 0, BX_IA_ERROR }, - /* 0F 1D /wm */ { 0, BX_IA_ERROR }, - /* 0F 1E /wr */ { 0, BX_IA_ERROR }, - /* 0F 1E /wm */ { 0, BX_IA_ERROR }, - /* 0F 1F /wr */ { 0, BX_IA_ERROR }, - /* 0F 1F /wm */ { 0, BX_IA_ERROR }, + /* 0F 18 /w */ { 0, BX_IA_ERROR }, + /* 0F 19 /w */ { 0, BX_IA_ERROR }, + /* 0F 1A /w */ { 0, BX_IA_ERROR }, + /* 0F 1B /w */ { 0, BX_IA_ERROR }, + /* 0F 1C /w */ { 0, BX_IA_ERROR }, + /* 0F 1D /w */ { 0, BX_IA_ERROR }, + /* 0F 1E /w */ { 0, BX_IA_ERROR }, + /* 0F 1F /w */ { 0, BX_IA_ERROR }, #endif - /* 0F 20 /wr */ { BxGroupN, BX_IA_ERROR, BxOpcodeInfoMOV_RdCd }, - /* 0F 20 /wm */ { 0, BX_IA_ERROR }, - /* 0F 21 /wr */ { 0, BX_IA_MOV_RdDd }, - /* 0F 21 /wm */ { 0, BX_IA_ERROR }, - /* 0F 22 /wr */ { BxGroupN, BX_IA_ERROR, BxOpcodeInfoMOV_CdRd }, - /* 0F 22 /wm */ { 0, BX_IA_ERROR }, - /* 0F 23 /wr */ { BxTraceEnd, BX_IA_MOV_DdRd }, - /* 0F 23 /wm */ { 0, BX_IA_ERROR}, - /* 0F 24 /wr */ { BxTraceEnd, BX_IA_MOV_RdTd }, // not implemented - /* 0F 24 /wm */ { BxTraceEnd, BX_IA_MOV_RdTd }, // not implemented - /* 0F 25 /wr */ { 0, BX_IA_ERROR }, - /* 0F 25 /wm */ { 0, BX_IA_ERROR }, - /* 0F 26 /wr */ { BxTraceEnd, BX_IA_MOV_TdRd }, // not implemented - /* 0F 26 /wm */ { BxTraceEnd, BX_IA_MOV_TdRd }, // not implemented - /* 0F 27 /wr */ { 0, BX_IA_ERROR }, - /* 0F 27 /wm */ { 0, BX_IA_ERROR }, - /* 0F 28 /wr */ { BxPrefixSSE, BX_IA_MOVAPS_VpsWps, BxOpcodeGroupSSE_0f28 }, - /* 0F 28 /wm */ { BxPrefixSSE, BX_IA_MOVAPS_VpsWps, BxOpcodeGroupSSE_0f28 }, - /* 0F 29 /wr */ { BxPrefixSSE | BxArithDstRM, BX_IA_MOVAPS_WpsVps, BxOpcodeGroupSSE_0f29 }, - /* 0F 29 /wm */ { BxPrefixSSE, BX_IA_MOVAPS_WpsVps, BxOpcodeGroupSSE_0f29 }, - /* 0F 2A /wr */ { BxPrefixSSE, BX_IA_CVTPI2PS_VpsQq, BxOpcodeGroupSSE_0f2a }, - /* 0F 2A /wm */ { BxPrefixSSE, BX_IA_CVTPI2PS_VpsQq, BxOpcodeGroupSSE_0f2a }, - /* 0F 2B /wr */ { 0, BX_IA_ERROR }, // MOVNTPS/PD/SS/SD - /* 0F 2B /wm */ { BxPrefixSSE, BX_IA_MOVNTPS_MpsVps, BxOpcodeGroupSSE_0f2bM }, - /* 0F 2C /wr */ { BxPrefixSSE, BX_IA_CVTTPS2PI_PqWps, BxOpcodeGroupSSE_0f2c }, - /* 0F 2C /wm */ { BxPrefixSSE, BX_IA_CVTTPS2PI_PqWps, BxOpcodeGroupSSE_0f2c }, - /* 0F 2D /wr */ { BxPrefixSSE, BX_IA_CVTPS2PI_PqWps, BxOpcodeGroupSSE_0f2d }, - /* 0F 2D /wm */ { BxPrefixSSE, BX_IA_CVTPS2PI_PqWps, BxOpcodeGroupSSE_0f2d }, - /* 0F 2E /wr */ { BxPrefixSSE, BX_IA_UCOMISS_VssWss, BxOpcodeGroupSSE_0f2e }, - /* 0F 2E /wm */ { BxPrefixSSE, BX_IA_UCOMISS_VssWss, BxOpcodeGroupSSE_0f2e }, - /* 0F 2F /wr */ { BxPrefixSSE, BX_IA_COMISS_VpsWps, BxOpcodeGroupSSE_0f2f }, - /* 0F 2F /wm */ { BxPrefixSSE, BX_IA_COMISS_VpsWps, BxOpcodeGroupSSE_0f2f }, - /* 0F 30 /wr */ { 0, BX_IA_WRMSR }, - /* 0F 30 /wm */ { 0, BX_IA_WRMSR }, - /* 0F 31 /wr */ { 0, BX_IA_RDTSC }, - /* 0F 31 /wm */ { 0, BX_IA_RDTSC }, - /* 0F 32 /wr */ { 0, BX_IA_RDMSR }, - /* 0F 32 /wm */ { 0, BX_IA_RDMSR }, - /* 0F 33 /wr */ { 0, BX_IA_RDPMC }, - /* 0F 33 /wm */ { 0, BX_IA_RDPMC }, - /* 0F 34 /wr */ { BxTraceEnd, BX_IA_SYSENTER }, - /* 0F 34 /wm */ { BxTraceEnd, BX_IA_SYSENTER }, - /* 0F 35 /wr */ { BxTraceEnd, BX_IA_SYSEXIT }, - /* 0F 35 /wm */ { BxTraceEnd, BX_IA_SYSEXIT }, - /* 0F 36 /wr */ { 0, BX_IA_ERROR }, - /* 0F 36 /wm */ { 0, BX_IA_ERROR }, - /* 0F 37 /wr */ { 0, BX_IA_ERROR }, - /* 0F 37 /wm */ { 0, BX_IA_ERROR }, - /* 0F 38 /wr */ { Bx3ByteOp, BX_IA_ERROR, BxOpcode3ByteTable0f38 }, // 3-byte escape - /* 0F 38 /wm */ { Bx3ByteOp, BX_IA_ERROR, BxOpcode3ByteTable0f38 }, // 3-byte escape - /* 0F 39 /wr */ { 0, BX_IA_ERROR }, - /* 0F 39 /wm */ { 0, BX_IA_ERROR }, - /* 0F 3A /wr */ { Bx3ByteOp | BxImmediate_Ib, BX_IA_ERROR, BxOpcode3ByteTable0f3a }, // 3-byte escape - /* 0F 3A /wm */ { Bx3ByteOp | BxImmediate_Ib, BX_IA_ERROR, BxOpcode3ByteTable0f3a }, // 3-byte escape - /* 0F 3B /wr */ { 0, BX_IA_ERROR }, - /* 0F 3B /wm */ { 0, BX_IA_ERROR }, - /* 0F 3C /wr */ { 0, BX_IA_ERROR }, - /* 0F 3C /wm */ { 0, BX_IA_ERROR }, - /* 0F 3D /wr */ { 0, BX_IA_ERROR }, - /* 0F 3D /wm */ { 0, BX_IA_ERROR }, - /* 0F 3E /wr */ { 0, BX_IA_ERROR }, - /* 0F 3E /wm */ { 0, BX_IA_ERROR }, - /* 0F 3F /wr */ { 0, BX_IA_ERROR }, - /* 0F 3F /wm */ { 0, BX_IA_ERROR }, - /* 0F 40 /wr */ { 0, BX_IA_CMOVO_GwEw }, - /* 0F 40 /wm */ { 0, BX_IA_CMOVO_GwEw }, - /* 0F 41 /wr */ { 0, BX_IA_CMOVNO_GwEw }, - /* 0F 41 /wm */ { 0, BX_IA_CMOVNO_GwEw }, - /* 0F 42 /wr */ { 0, BX_IA_CMOVB_GwEw }, - /* 0F 42 /wm */ { 0, BX_IA_CMOVB_GwEw }, - /* 0F 43 /wr */ { 0, BX_IA_CMOVNB_GwEw }, - /* 0F 43 /wm */ { 0, BX_IA_CMOVNB_GwEw }, - /* 0F 44 /wr */ { 0, BX_IA_CMOVZ_GwEw }, - /* 0F 44 /wm */ { 0, BX_IA_CMOVZ_GwEw }, - /* 0F 45 /wr */ { 0, BX_IA_CMOVNZ_GwEw }, - /* 0F 45 /wm */ { 0, BX_IA_CMOVNZ_GwEw }, - /* 0F 46 /wr */ { 0, BX_IA_CMOVBE_GwEw }, - /* 0F 46 /wm */ { 0, BX_IA_CMOVBE_GwEw }, - /* 0F 47 /wr */ { 0, BX_IA_CMOVNBE_GwEw }, - /* 0F 47 /wm */ { 0, BX_IA_CMOVNBE_GwEw }, - /* 0F 48 /wr */ { 0, BX_IA_CMOVS_GwEw }, - /* 0F 48 /wm */ { 0, BX_IA_CMOVS_GwEw }, - /* 0F 49 /wr */ { 0, BX_IA_CMOVNS_GwEw }, - /* 0F 49 /wm */ { 0, BX_IA_CMOVNS_GwEw }, - /* 0F 4A /wr */ { 0, BX_IA_CMOVP_GwEw }, - /* 0F 4A /wm */ { 0, BX_IA_CMOVP_GwEw }, - /* 0F 4B /wr */ { 0, BX_IA_CMOVNP_GwEw }, - /* 0F 4B /wm */ { 0, BX_IA_CMOVNP_GwEw }, - /* 0F 4C /wr */ { 0, BX_IA_CMOVL_GwEw }, - /* 0F 4C /wm */ { 0, BX_IA_CMOVL_GwEw }, - /* 0F 4D /wr */ { 0, BX_IA_CMOVNL_GwEw }, - /* 0F 4D /wm */ { 0, BX_IA_CMOVNL_GwEw }, - /* 0F 4E /wr */ { 0, BX_IA_CMOVLE_GwEw }, - /* 0F 4E /wm */ { 0, BX_IA_CMOVLE_GwEw }, - /* 0F 4F /wr */ { 0, BX_IA_CMOVNLE_GwEw }, - /* 0F 4F /wm */ { 0, BX_IA_CMOVNLE_GwEw }, - /* 0F 50 /wr */ { BxPrefixSSE, BX_IA_MOVMSKPS_GdVRps, BxOpcodeGroupSSE_0f50R }, - /* 0F 50 /wm */ { 0, BX_IA_ERROR }, // MOVMSKPS/PD - /* 0F 51 /wr */ { BxPrefixSSE, BX_IA_SQRTPS_VpsWps, BxOpcodeGroupSSE_0f51 }, - /* 0F 51 /wm */ { BxPrefixSSE, BX_IA_SQRTPS_VpsWps, BxOpcodeGroupSSE_0f51 }, - /* 0F 52 /wr */ { BxPrefixSSE, BX_IA_RSQRTPS_VpsWps, BxOpcodeGroupSSE_0f52 }, - /* 0F 52 /wm */ { BxPrefixSSE, BX_IA_RSQRTPS_VpsWps, BxOpcodeGroupSSE_0f52 }, - /* 0F 53 /wr */ { BxPrefixSSE, BX_IA_RCPPS_VpsWps, BxOpcodeGroupSSE_0f53 }, - /* 0F 53 /wm */ { BxPrefixSSE, BX_IA_RCPPS_VpsWps, BxOpcodeGroupSSE_0f53 }, - /* 0F 54 /wr */ { BxPrefixSSE, BX_IA_ANDPS_VpsWps, BxOpcodeGroupSSE_0f54 }, - /* 0F 54 /wm */ { BxPrefixSSE, BX_IA_ANDPS_VpsWps, BxOpcodeGroupSSE_0f54 }, - /* 0F 55 /wr */ { BxPrefixSSE, BX_IA_ANDNPS_VpsWps, BxOpcodeGroupSSE_0f55 }, - /* 0F 55 /wm */ { BxPrefixSSE, BX_IA_ANDNPS_VpsWps, BxOpcodeGroupSSE_0f55 }, - /* 0F 56 /wr */ { BxPrefixSSE, BX_IA_ORPS_VpsWps, BxOpcodeGroupSSE_0f56 }, - /* 0F 56 /wm */ { BxPrefixSSE, BX_IA_ORPS_VpsWps, BxOpcodeGroupSSE_0f56 }, - /* 0F 57 /wr */ { BxPrefixSSE, BX_IA_XORPS_VpsWps, BxOpcodeGroupSSE_0f57 }, - /* 0F 57 /wm */ { BxPrefixSSE, BX_IA_XORPS_VpsWps, BxOpcodeGroupSSE_0f57 }, - /* 0F 58 /wr */ { BxPrefixSSE, BX_IA_ADDPS_VpsWps, BxOpcodeGroupSSE_0f58 }, - /* 0F 58 /wm */ { BxPrefixSSE, BX_IA_ADDPS_VpsWps, BxOpcodeGroupSSE_0f58 }, - /* 0F 59 /wr */ { BxPrefixSSE, BX_IA_MULPS_VpsWps, BxOpcodeGroupSSE_0f59 }, - /* 0F 59 /wm */ { BxPrefixSSE, BX_IA_MULPS_VpsWps, BxOpcodeGroupSSE_0f59 }, - /* 0F 5A /wr */ { BxPrefixSSE, BX_IA_CVTPS2PD_VpsWps, BxOpcodeGroupSSE_0f5a }, - /* 0F 5A /wm */ { BxPrefixSSE, BX_IA_CVTPS2PD_VpsWps, BxOpcodeGroupSSE_0f5a }, - /* 0F 5B /wr */ { BxPrefixSSE, BX_IA_CVTDQ2PS_VpsWdq, BxOpcodeGroupSSE_0f5b }, - /* 0F 5B /wm */ { BxPrefixSSE, BX_IA_CVTDQ2PS_VpsWdq, BxOpcodeGroupSSE_0f5b }, - /* 0F 5C /wr */ { BxPrefixSSE, BX_IA_SUBPS_VpsWps, BxOpcodeGroupSSE_0f5c }, - /* 0F 5C /wm */ { BxPrefixSSE, BX_IA_SUBPS_VpsWps, BxOpcodeGroupSSE_0f5c }, - /* 0F 5D /wr */ { BxPrefixSSE, BX_IA_MINPS_VpsWps, BxOpcodeGroupSSE_0f5d }, - /* 0F 5D /wm */ { BxPrefixSSE, BX_IA_MINPS_VpsWps, BxOpcodeGroupSSE_0f5d }, - /* 0F 5E /wr */ { BxPrefixSSE, BX_IA_DIVPS_VpsWps, BxOpcodeGroupSSE_0f5e }, - /* 0F 5E /wm */ { BxPrefixSSE, BX_IA_DIVPS_VpsWps, BxOpcodeGroupSSE_0f5e }, - /* 0F 5F /wr */ { BxPrefixSSE, BX_IA_MAXPS_VpsWps, BxOpcodeGroupSSE_0f5f }, - /* 0F 5F /wm */ { BxPrefixSSE, BX_IA_MAXPS_VpsWps, BxOpcodeGroupSSE_0f5f }, - /* 0F 60 /wr */ { BxPrefixSSE, BX_IA_PUNPCKLBW_PqQd, BxOpcodeGroupSSE_0f60 }, - /* 0F 60 /wm */ { BxPrefixSSE, BX_IA_PUNPCKLBW_PqQd, BxOpcodeGroupSSE_0f60 }, - /* 0F 61 /wr */ { BxPrefixSSE, BX_IA_PUNPCKLWD_PqQd, BxOpcodeGroupSSE_0f61 }, - /* 0F 61 /wm */ { BxPrefixSSE, BX_IA_PUNPCKLWD_PqQd, BxOpcodeGroupSSE_0f61 }, - /* 0F 62 /wr */ { BxPrefixSSE, BX_IA_PUNPCKLDQ_PqQd, BxOpcodeGroupSSE_0f62 }, - /* 0F 62 /wm */ { BxPrefixSSE, BX_IA_PUNPCKLDQ_PqQd, BxOpcodeGroupSSE_0f62 }, - /* 0F 63 /wr */ { BxPrefixSSE, BX_IA_PACKSSWB_PqQq, BxOpcodeGroupSSE_0f63 }, - /* 0F 63 /wm */ { BxPrefixSSE, BX_IA_PACKSSWB_PqQq, BxOpcodeGroupSSE_0f63 }, - /* 0F 64 /wr */ { BxPrefixSSE, BX_IA_PCMPGTB_PqQq, BxOpcodeGroupSSE_0f64 }, - /* 0F 64 /wm */ { BxPrefixSSE, BX_IA_PCMPGTB_PqQq, BxOpcodeGroupSSE_0f64 }, - /* 0F 65 /wr */ { BxPrefixSSE, BX_IA_PCMPGTW_PqQq, BxOpcodeGroupSSE_0f65 }, - /* 0F 65 /wm */ { BxPrefixSSE, BX_IA_PCMPGTW_PqQq, BxOpcodeGroupSSE_0f65 }, - /* 0F 66 /wr */ { BxPrefixSSE, BX_IA_PCMPGTD_PqQq, BxOpcodeGroupSSE_0f66 }, - /* 0F 66 /wm */ { BxPrefixSSE, BX_IA_PCMPGTD_PqQq, BxOpcodeGroupSSE_0f66 }, - /* 0F 67 /wr */ { BxPrefixSSE, BX_IA_PACKUSWB_PqQq, BxOpcodeGroupSSE_0f67 }, - /* 0F 67 /wm */ { BxPrefixSSE, BX_IA_PACKUSWB_PqQq, BxOpcodeGroupSSE_0f67 }, - /* 0F 68 /wr */ { BxPrefixSSE, BX_IA_PUNPCKHBW_PqQq, BxOpcodeGroupSSE_0f68 }, - /* 0F 68 /wm */ { BxPrefixSSE, BX_IA_PUNPCKHBW_PqQq, BxOpcodeGroupSSE_0f68 }, - /* 0F 69 /wr */ { BxPrefixSSE, BX_IA_PUNPCKHWD_PqQq, BxOpcodeGroupSSE_0f69 }, - /* 0F 69 /wm */ { BxPrefixSSE, BX_IA_PUNPCKHWD_PqQq, BxOpcodeGroupSSE_0f69 }, - /* 0F 6A /wr */ { BxPrefixSSE, BX_IA_PUNPCKHDQ_PqQq, BxOpcodeGroupSSE_0f6a }, - /* 0F 6A /wm */ { BxPrefixSSE, BX_IA_PUNPCKHDQ_PqQq, BxOpcodeGroupSSE_0f6a }, - /* 0F 6B /wr */ { BxPrefixSSE, BX_IA_PACKSSDW_PqQq, BxOpcodeGroupSSE_0f6b }, - /* 0F 6B /wm */ { BxPrefixSSE, BX_IA_PACKSSDW_PqQq, BxOpcodeGroupSSE_0f6b }, - /* 0F 6C /wr */ { BxPrefixSSE66, BX_IA_PUNPCKLQDQ_VdqWdq }, - /* 0F 6C /wm */ { BxPrefixSSE66, BX_IA_PUNPCKLQDQ_VdqWdq }, - /* 0F 6D /wr */ { BxPrefixSSE66, BX_IA_PUNPCKHQDQ_VdqWdq }, - /* 0F 6D /wm */ { BxPrefixSSE66, BX_IA_PUNPCKHQDQ_VdqWdq }, - /* 0F 6E /wr */ { BxPrefixSSE, BX_IA_MOVD_PqEd, BxOpcodeGroupSSE_0f6e }, - /* 0F 6E /wm */ { BxPrefixSSE, BX_IA_MOVD_PqEd, BxOpcodeGroupSSE_0f6e }, - /* 0F 6F /wr */ { BxPrefixSSE, BX_IA_MOVQ_PqQq, BxOpcodeGroupSSE_0f6f }, - /* 0F 6F /wm */ { BxPrefixSSE, BX_IA_MOVQ_PqQq, BxOpcodeGroupSSE_0f6f }, - /* 0F 70 /wr */ { BxPrefixSSE | BxImmediate_Ib, BX_IA_PSHUFW_PqQqIb, BxOpcodeGroupSSE_0f70 }, - /* 0F 70 /wm */ { BxPrefixSSE | BxImmediate_Ib, BX_IA_PSHUFW_PqQqIb, BxOpcodeGroupSSE_0f70 }, - /* 0F 71 /wr */ { BxGroup12, BX_IA_ERROR, BxOpcodeInfoG12R }, - /* 0F 71 /wm */ { 0, BX_IA_ERROR }, // SSE Group G12 - /* 0F 72 /wr */ { BxGroup13, BX_IA_ERROR, BxOpcodeInfoG13R }, - /* 0F 72 /wm */ { 0, BX_IA_ERROR }, // SSE Group G13 - /* 0F 73 /wr */ { BxGroup14, BX_IA_ERROR, BxOpcodeInfoG14R }, - /* 0F 73 /wm */ { 0, BX_IA_ERROR }, // SSE Group G14 - /* 0F 74 /wr */ { BxPrefixSSE, BX_IA_PCMPEQB_PqQq, BxOpcodeGroupSSE_0f74 }, - /* 0F 74 /wm */ { BxPrefixSSE, BX_IA_PCMPEQB_PqQq, BxOpcodeGroupSSE_0f74 }, - /* 0F 75 /wr */ { BxPrefixSSE, BX_IA_PCMPEQW_PqQq, BxOpcodeGroupSSE_0f75 }, - /* 0F 75 /wm */ { BxPrefixSSE, BX_IA_PCMPEQW_PqQq, BxOpcodeGroupSSE_0f75 }, - /* 0F 76 /wr */ { BxPrefixSSE, BX_IA_PCMPEQD_PqQq, BxOpcodeGroupSSE_0f76 }, - /* 0F 76 /wm */ { BxPrefixSSE, BX_IA_PCMPEQD_PqQq, BxOpcodeGroupSSE_0f76 }, - /* 0F 77 /wr */ { BxPrefixSSE, BX_IA_EMMS, BxOpcodeGroupSSE_ERR }, - /* 0F 77 /wm */ { BxPrefixSSE, BX_IA_EMMS, BxOpcodeGroupSSE_ERR }, - /* 0F 78 /wr */ { BxPrefixSSE, BX_IA_VMREAD_EdGd, BxOpcodeGroupSSE_ERR }, - /* 0F 78 /wm */ { BxPrefixSSE, BX_IA_VMREAD_EdGd, BxOpcodeGroupSSE_ERR }, - /* 0F 79 /wr */ { BxPrefixSSE, BX_IA_VMWRITE_GdEd, BxOpcodeGroupSSE_ERR }, - /* 0F 79 /wm */ { BxPrefixSSE, BX_IA_VMWRITE_GdEd, BxOpcodeGroupSSE_ERR }, - /* 0F 7A /wr */ { 0, BX_IA_ERROR }, - /* 0F 7A /wm */ { 0, BX_IA_ERROR }, - /* 0F 7B /wr */ { 0, BX_IA_ERROR }, - /* 0F 7B /wm */ { 0, BX_IA_ERROR }, - /* 0F 7C /wr */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f7c }, - /* 0F 7C /wm */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f7c }, - /* 0F 7D /wr */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f7d }, - /* 0F 7D /wm */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f7d }, - /* 0F 7E /wr */ { BxPrefixSSE, BX_IA_MOVD_EdPd, BxOpcodeGroupSSE_0f7e }, - /* 0F 7E /wm */ { BxPrefixSSE, BX_IA_MOVD_EdPd, BxOpcodeGroupSSE_0f7e }, - /* 0F 7F /wr */ { BxPrefixSSE, BX_IA_MOVQ_QqPq, BxOpcodeGroupSSE_0f7f }, - /* 0F 7F /wm */ { BxPrefixSSE, BX_IA_MOVQ_QqPq, BxOpcodeGroupSSE_0f7f }, - /* 0F 80 /wr */ { BxImmediate_BrOff16 | BxTraceJCC, BX_IA_JO_Jw }, - /* 0F 80 /wm */ { BxImmediate_BrOff16 | BxTraceJCC, BX_IA_JO_Jw }, - /* 0F 81 /wr */ { BxImmediate_BrOff16 | BxTraceJCC, BX_IA_JNO_Jw }, - /* 0F 81 /wm */ { BxImmediate_BrOff16 | BxTraceJCC, BX_IA_JNO_Jw }, - /* 0F 82 /wr */ { BxImmediate_BrOff16 | BxTraceJCC, BX_IA_JB_Jw }, - /* 0F 82 /wm */ { BxImmediate_BrOff16 | BxTraceJCC, BX_IA_JB_Jw }, - /* 0F 83 /wr */ { BxImmediate_BrOff16 | BxTraceJCC, BX_IA_JNB_Jw }, - /* 0F 83 /wm */ { BxImmediate_BrOff16 | BxTraceJCC, BX_IA_JNB_Jw }, - /* 0F 84 /wr */ { BxImmediate_BrOff16 | BxTraceJCC, BX_IA_JZ_Jw }, - /* 0F 84 /wm */ { BxImmediate_BrOff16 | BxTraceJCC, BX_IA_JZ_Jw }, - /* 0F 85 /wr */ { BxImmediate_BrOff16 | BxTraceJCC, BX_IA_JNZ_Jw }, - /* 0F 85 /wm */ { BxImmediate_BrOff16 | BxTraceJCC, BX_IA_JNZ_Jw }, - /* 0F 86 /wr */ { BxImmediate_BrOff16 | BxTraceJCC, BX_IA_JBE_Jw }, - /* 0F 86 /wm */ { BxImmediate_BrOff16 | BxTraceJCC, BX_IA_JBE_Jw }, - /* 0F 87 /wr */ { BxImmediate_BrOff16 | BxTraceJCC, BX_IA_JNBE_Jw }, - /* 0F 87 /wm */ { BxImmediate_BrOff16 | BxTraceJCC, BX_IA_JNBE_Jw }, - /* 0F 88 /wr */ { BxImmediate_BrOff16 | BxTraceJCC, BX_IA_JS_Jw }, - /* 0F 88 /wm */ { BxImmediate_BrOff16 | BxTraceJCC, BX_IA_JS_Jw }, - /* 0F 89 /wr */ { BxImmediate_BrOff16 | BxTraceJCC, BX_IA_JNS_Jw }, - /* 0F 89 /wm */ { BxImmediate_BrOff16 | BxTraceJCC, BX_IA_JNS_Jw }, - /* 0F 8A /wr */ { BxImmediate_BrOff16 | BxTraceJCC, BX_IA_JP_Jw }, - /* 0F 8A /wm */ { BxImmediate_BrOff16 | BxTraceJCC, BX_IA_JP_Jw }, - /* 0F 8B /wr */ { BxImmediate_BrOff16 | BxTraceJCC, BX_IA_JNP_Jw }, - /* 0F 8B /wm */ { BxImmediate_BrOff16 | BxTraceJCC, BX_IA_JNP_Jw }, - /* 0F 8C /wr */ { BxImmediate_BrOff16 | BxTraceJCC, BX_IA_JL_Jw }, - /* 0F 8C /wm */ { BxImmediate_BrOff16 | BxTraceJCC, BX_IA_JL_Jw }, - /* 0F 8D /wr */ { BxImmediate_BrOff16 | BxTraceJCC, BX_IA_JNL_Jw }, - /* 0F 8D /wm */ { BxImmediate_BrOff16 | BxTraceJCC, BX_IA_JNL_Jw }, - /* 0F 8E /wr */ { BxImmediate_BrOff16 | BxTraceJCC, BX_IA_JLE_Jw }, - /* 0F 8E /wm */ { BxImmediate_BrOff16 | BxTraceJCC, BX_IA_JLE_Jw }, - /* 0F 8F /wr */ { BxImmediate_BrOff16 | BxTraceJCC, BX_IA_JNLE_Jw }, - /* 0F 8F /wm */ { BxImmediate_BrOff16 | BxTraceJCC, BX_IA_JNLE_Jw }, - /* 0F 90 /wr */ { 0, BX_IA_SETO_Eb }, - /* 0F 90 /wm */ { 0, BX_IA_SETO_Eb }, - /* 0F 91 /wr */ { 0, BX_IA_SETNO_Eb }, - /* 0F 91 /wm */ { 0, BX_IA_SETNO_Eb }, - /* 0F 92 /wr */ { 0, BX_IA_SETB_Eb }, - /* 0F 92 /wm */ { 0, BX_IA_SETB_Eb }, - /* 0F 93 /wr */ { 0, BX_IA_SETNB_Eb }, - /* 0F 93 /wm */ { 0, BX_IA_SETNB_Eb }, - /* 0F 94 /wr */ { 0, BX_IA_SETZ_Eb }, - /* 0F 94 /wm */ { 0, BX_IA_SETZ_Eb }, - /* 0F 95 /wr */ { 0, BX_IA_SETNZ_Eb }, - /* 0F 95 /wm */ { 0, BX_IA_SETNZ_Eb }, - /* 0F 96 /wr */ { 0, BX_IA_SETBE_Eb }, - /* 0F 96 /wm */ { 0, BX_IA_SETBE_Eb }, - /* 0F 97 /wr */ { 0, BX_IA_SETNBE_Eb }, - /* 0F 97 /wm */ { 0, BX_IA_SETNBE_Eb }, - /* 0F 98 /wr */ { 0, BX_IA_SETS_Eb }, - /* 0F 98 /wm */ { 0, BX_IA_SETS_Eb }, - /* 0F 99 /wr */ { 0, BX_IA_SETNS_Eb }, - /* 0F 99 /wm */ { 0, BX_IA_SETNS_Eb }, - /* 0F 9A /wr */ { 0, BX_IA_SETP_Eb }, - /* 0F 9A /wm */ { 0, BX_IA_SETP_Eb }, - /* 0F 9B /wr */ { 0, BX_IA_SETNP_Eb }, - /* 0F 9B /wm */ { 0, BX_IA_SETNP_Eb }, - /* 0F 9C /wr */ { 0, BX_IA_SETL_Eb }, - /* 0F 9C /wm */ { 0, BX_IA_SETL_Eb }, - /* 0F 9D /wr */ { 0, BX_IA_SETNL_Eb }, - /* 0F 9D /wm */ { 0, BX_IA_SETNL_Eb }, - /* 0F 9E /wr */ { 0, BX_IA_SETLE_Eb }, - /* 0F 9E /wm */ { 0, BX_IA_SETLE_Eb }, - /* 0F 9F /wr */ { 0, BX_IA_SETNLE_Eb }, - /* 0F 9F /wm */ { 0, BX_IA_SETNLE_Eb }, - /* 0F A0 /wr */ { 0, BX_IA_PUSH16_FS }, - /* 0F A0 /wm */ { 0, BX_IA_PUSH16_FS }, - /* 0F A1 /wr */ { 0, BX_IA_POP16_FS }, - /* 0F A1 /wm */ { 0, BX_IA_POP16_FS }, - /* 0F A2 /wr */ { 0, BX_IA_CPUID }, - /* 0F A2 /wm */ { 0, BX_IA_CPUID }, - /* 0F A3 /wr */ { 0, BX_IA_BT_EwGwR }, - /* 0F A3 /wm */ { 0, BX_IA_BT_EwGwM }, - /* 0F A4 /wr */ { BxImmediate_Ib, BX_IA_SHLD_EwGw }, - /* 0F A4 /wm */ { BxImmediate_Ib, BX_IA_SHLD_EwGw }, - /* 0F A5 /wr */ { 0, BX_IA_SHLD_EwGw }, - /* 0F A5 /wm */ { 0, BX_IA_SHLD_EwGw }, - /* 0F A6 /wr */ { BxTraceEnd, BX_IA_CMPXCHG_XBTS }, // not implemented - /* 0F A6 /wm */ { BxTraceEnd, BX_IA_CMPXCHG_XBTS }, // not implemented - /* 0F A7 /wr */ { BxTraceEnd, BX_IA_CMPXCHG_IBTS }, // not implemented - /* 0F A7 /wm */ { BxTraceEnd, BX_IA_CMPXCHG_IBTS }, // not implemented - /* 0F A8 /wr */ { 0, BX_IA_PUSH16_GS }, - /* 0F A8 /wm */ { 0, BX_IA_PUSH16_GS }, - /* 0F A9 /wr */ { 0, BX_IA_POP16_GS }, - /* 0F A9 /wm */ { 0, BX_IA_POP16_GS }, - /* 0F AA /wr */ { BxTraceEnd, BX_IA_RSM }, - /* 0F AA /wm */ { BxTraceEnd, BX_IA_RSM }, - /* 0F AB /wr */ { 0, BX_IA_BTS_EwGwR }, - /* 0F AB /wm */ { BxLockable, BX_IA_BTS_EwGwM }, - /* 0F AC /wr */ { BxImmediate_Ib, BX_IA_SHRD_EwGw }, - /* 0F AC /wm */ { BxImmediate_Ib, BX_IA_SHRD_EwGw }, - /* 0F AD /wr */ { 0, BX_IA_SHRD_EwGw }, - /* 0F AD /wm */ { 0, BX_IA_SHRD_EwGw }, - /* 0F AE /wr */ { BxGroup15, BX_IA_ERROR, BxOpcodeInfoG15R }, - /* 0F AE /wm */ { BxGroup15, BX_IA_ERROR, BxOpcodeInfoG15M }, - /* 0F AF /wr */ { 0, BX_IA_IMUL_GwEw }, - /* 0F AF /wm */ { 0, BX_IA_IMUL_GwEw }, - /* 0F B0 /wr */ { 0, BX_IA_CMPXCHG_EbGb }, - /* 0F B0 /wm */ { BxLockable, BX_IA_CMPXCHG_EbGb }, - /* 0F B1 /wr */ { 0, BX_IA_CMPXCHG_EwGw }, - /* 0F B1 /wm */ { BxLockable, BX_IA_CMPXCHG_EwGw }, - /* 0F B2 /wr */ { 0, BX_IA_ERROR }, // LSS - /* 0F B2 /wm */ { 0, BX_IA_LSS_GwMp }, - /* 0F B3 /wr */ { 0, BX_IA_BTR_EwGwR }, - /* 0F B3 /wm */ { BxLockable, BX_IA_BTR_EwGwM }, - /* 0F B4 /wr */ { 0, BX_IA_ERROR }, // LFS - /* 0F B4 /wm */ { 0, BX_IA_LFS_GwMp }, - /* 0F B5 /wr */ { 0, BX_IA_ERROR }, // LGS - /* 0F B5 /wm */ { 0, BX_IA_LGS_GwMp }, - /* 0F B6 /wr */ { 0, BX_IA_MOVZX_GwEb }, - /* 0F B6 /wm */ { 0, BX_IA_MOVZX_GwEb }, - /* 0F B7 /wr */ { 0, BX_IA_MOV_GwEwR }, // MOVZX_GwEw - /* 0F B7 /wm */ { 0, BX_IA_MOV_GwEwM }, // MOVZX_GwEw - /* 0F B8 /wr */ { BxPrefixSSEF3, BX_IA_POPCNT_GwEw }, - /* 0F B8 /wm */ { BxPrefixSSEF3, BX_IA_POPCNT_GwEw }, - /* 0F B9 /wr */ { 0, BX_IA_UD2B }, - /* 0F B9 /wm */ { BxTraceEnd, BX_IA_UD2B }, - /* 0F BA /wr */ { BxGroup8, BX_IA_ERROR, BxOpcodeInfoG8EwIb }, - /* 0F BA /wm */ { BxGroup8, BX_IA_ERROR, BxOpcodeInfoG8EwIb }, - /* 0F BB /wr */ { 0, BX_IA_BTC_EwGwR }, - /* 0F BB /wm */ { BxLockable, BX_IA_BTC_EwGwM }, - /* 0F BC /wr */ { 0, BX_IA_BSF_GwEw }, - /* 0F BC /wm */ { 0, BX_IA_BSF_GwEw }, - /* 0F BD /wr */ { 0, BX_IA_BSR_GwEw }, - /* 0F BD /wm */ { 0, BX_IA_BSR_GwEw }, - /* 0F BE /wr */ { 0, BX_IA_MOVSX_GwEb }, - /* 0F BE /wm */ { 0, BX_IA_MOVSX_GwEb }, - /* 0F BF /wr */ { 0, BX_IA_MOV_GwEwR }, // MOVSX_GwEw - /* 0F BF /wm */ { 0, BX_IA_MOV_GwEwM }, // MOVSX_GwEw - /* 0F C0 /wr */ { 0, BX_IA_XADD_EbGb }, - /* 0F C0 /wm */ { BxLockable, BX_IA_XADD_EbGb }, - /* 0F C1 /wr */ { 0, BX_IA_XADD_EwGw }, - /* 0F C1 /wm */ { BxLockable, BX_IA_XADD_EwGw }, - /* 0F C2 /wr */ { BxPrefixSSE | BxImmediate_Ib, BX_IA_CMPPS_VpsWpsIb, BxOpcodeGroupSSE_0fc2 }, - /* 0F C2 /wm */ { BxPrefixSSE | BxImmediate_Ib, BX_IA_CMPPS_VpsWpsIb, BxOpcodeGroupSSE_0fc2 }, - /* 0F C3 /wr */ { 0, BX_IA_ERROR }, // MOVNTI SSE group - /* 0F C3 /wm */ { BxPrefixSSE, BX_IA_MOVNTI_MdGd, BxOpcodeGroupSSE_ERR }, - /* 0F C4 /wr */ { BxPrefixSSE | BxImmediate_Ib, BX_IA_PINSRW_PqEwIb, BxOpcodeGroupSSE_0fc4 }, - /* 0F C4 /wm */ { BxPrefixSSE | BxImmediate_Ib, BX_IA_PINSRW_PqEwIb, BxOpcodeGroupSSE_0fc4 }, - /* 0F C5 /wr */ { BxPrefixSSE | BxImmediate_Ib, BX_IA_PEXTRW_GdPqIb, BxOpcodeGroupSSE_0fc5R }, - /* 0F C5 /wm */ { 0, BX_IA_ERROR }, // PEXTRW SSE group - /* 0F C6 /wr */ { BxPrefixSSE | BxImmediate_Ib, BX_IA_SHUFPS_VpsWpsIb, BxOpcodeGroupSSE_0fc6 }, - /* 0F C6 /wm */ { BxPrefixSSE | BxImmediate_Ib, BX_IA_SHUFPS_VpsWpsIb, BxOpcodeGroupSSE_0fc6 }, - /* 0F C7 /wr */ { 0, BX_IA_ERROR }, // CMPXCHG8B G9 group - /* 0F C7 /wm */ { BxGroup9, BX_IA_ERROR, BxOpcodeInfoG9M }, - /* 0F C8 /wr */ { 0, BX_IA_BSWAP_RX }, - /* 0F C8 /wm */ { 0, BX_IA_BSWAP_RX }, - /* 0F C9 /wr */ { 0, BX_IA_BSWAP_RX }, - /* 0F C9 /wm */ { 0, BX_IA_BSWAP_RX }, - /* 0F CA /wr */ { 0, BX_IA_BSWAP_RX }, - /* 0F CA /wm */ { 0, BX_IA_BSWAP_RX }, - /* 0F CB /wr */ { 0, BX_IA_BSWAP_RX }, - /* 0F CB /wm */ { 0, BX_IA_BSWAP_RX }, - /* 0F CC /wr */ { 0, BX_IA_BSWAP_RX }, - /* 0F CC /wm */ { 0, BX_IA_BSWAP_RX }, - /* 0F CD /wr */ { 0, BX_IA_BSWAP_RX }, - /* 0F CD /wm */ { 0, BX_IA_BSWAP_RX }, - /* 0F CE /wr */ { 0, BX_IA_BSWAP_RX }, - /* 0F CE /wm */ { 0, BX_IA_BSWAP_RX }, - /* 0F CF /wr */ { 0, BX_IA_BSWAP_RX }, - /* 0F CF /wm */ { 0, BX_IA_BSWAP_RX }, - /* 0F D0 /wr */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0fd0 }, - /* 0F D0 /wm */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0fd0 }, - /* 0F D1 /wr */ { BxPrefixSSE, BX_IA_PSRLW_PqQq, BxOpcodeGroupSSE_0fd1 }, - /* 0F D1 /wm */ { BxPrefixSSE, BX_IA_PSRLW_PqQq, BxOpcodeGroupSSE_0fd1 }, - /* 0F D2 /wr */ { BxPrefixSSE, BX_IA_PSRLD_PqQq, BxOpcodeGroupSSE_0fd2 }, - /* 0F D2 /wm */ { BxPrefixSSE, BX_IA_PSRLD_PqQq, BxOpcodeGroupSSE_0fd2 }, - /* 0F D3 /wr */ { BxPrefixSSE, BX_IA_PSRLQ_PqQq, BxOpcodeGroupSSE_0fd3 }, - /* 0F D3 /wm */ { BxPrefixSSE, BX_IA_PSRLQ_PqQq, BxOpcodeGroupSSE_0fd3 }, - /* 0F D4 /wr */ { BxPrefixSSE, BX_IA_PADDQ_PqQq, BxOpcodeGroupSSE_0fd4 }, - /* 0F D4 /wm */ { BxPrefixSSE, BX_IA_PADDQ_PqQq, BxOpcodeGroupSSE_0fd4 }, - /* 0F D5 /wr */ { BxPrefixSSE, BX_IA_PMULLW_PqQq, BxOpcodeGroupSSE_0fd5 }, - /* 0F D5 /wm */ { BxPrefixSSE, BX_IA_PMULLW_PqQq, BxOpcodeGroupSSE_0fd5 }, - /* 0F D6 /wr */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0fd6 }, - /* 0F D6 /wm */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0fd6 }, - /* 0F D7 /wr */ { BxPrefixSSE, BX_IA_PMOVMSKB_GdPRq, BxOpcodeGroupSSE_0fd7 }, - /* 0F D7 /wm */ { 0, BX_IA_ERROR }, // PMOVMSKB is reg/reg form only - /* 0F D8 /wr */ { BxPrefixSSE, BX_IA_PSUBUSB_PqQq, BxOpcodeGroupSSE_0fd8 }, - /* 0F D8 /wm */ { BxPrefixSSE, BX_IA_PSUBUSB_PqQq, BxOpcodeGroupSSE_0fd8 }, - /* 0F D9 /wr */ { BxPrefixSSE, BX_IA_PSUBUSW_PqQq, BxOpcodeGroupSSE_0fd9 }, - /* 0F D9 /wm */ { BxPrefixSSE, BX_IA_PSUBUSW_PqQq, BxOpcodeGroupSSE_0fd9 }, - /* 0F DA /wr */ { BxPrefixSSE, BX_IA_PMINUB_PqQq, BxOpcodeGroupSSE_0fda }, - /* 0F DA /wm */ { BxPrefixSSE, BX_IA_PMINUB_PqQq, BxOpcodeGroupSSE_0fda }, - /* 0F DB /wr */ { BxPrefixSSE, BX_IA_PAND_PqQq, BxOpcodeGroupSSE_0fdb }, - /* 0F DB /wm */ { BxPrefixSSE, BX_IA_PAND_PqQq, BxOpcodeGroupSSE_0fdb }, - /* 0F DC /wr */ { BxPrefixSSE, BX_IA_PADDUSB_PqQq, BxOpcodeGroupSSE_0fdc }, - /* 0F DC /wm */ { BxPrefixSSE, BX_IA_PADDUSB_PqQq, BxOpcodeGroupSSE_0fdc }, - /* 0F DD /wr */ { BxPrefixSSE, BX_IA_PADDUSW_PqQq, BxOpcodeGroupSSE_0fdd }, - /* 0F DD /wm */ { BxPrefixSSE, BX_IA_PADDUSW_PqQq, BxOpcodeGroupSSE_0fdd }, - /* 0F DE /wr */ { BxPrefixSSE, BX_IA_PMAXUB_PqQq, BxOpcodeGroupSSE_0fde }, - /* 0F DE /wm */ { BxPrefixSSE, BX_IA_PMAXUB_PqQq, BxOpcodeGroupSSE_0fde }, - /* 0F DF /wr */ { BxPrefixSSE, BX_IA_PANDN_PqQq, BxOpcodeGroupSSE_0fdf }, - /* 0F DF /wm */ { BxPrefixSSE, BX_IA_PANDN_PqQq, BxOpcodeGroupSSE_0fdf }, - /* 0F E0 /wr */ { BxPrefixSSE, BX_IA_PAVGB_PqQq, BxOpcodeGroupSSE_0fe0 }, - /* 0F E0 /wm */ { BxPrefixSSE, BX_IA_PAVGB_PqQq, BxOpcodeGroupSSE_0fe0 }, - /* 0F E1 /wr */ { BxPrefixSSE, BX_IA_PSRAW_PqQq, BxOpcodeGroupSSE_0fe1 }, - /* 0F E1 /wm */ { BxPrefixSSE, BX_IA_PSRAW_PqQq, BxOpcodeGroupSSE_0fe1 }, - /* 0F E2 /wr */ { BxPrefixSSE, BX_IA_PSRAD_PqQq, BxOpcodeGroupSSE_0fe2 }, - /* 0F E2 /wm */ { BxPrefixSSE, BX_IA_PSRAD_PqQq, BxOpcodeGroupSSE_0fe2 }, - /* 0F E3 /wr */ { BxPrefixSSE, BX_IA_PAVGW_PqQq, BxOpcodeGroupSSE_0fe3 }, - /* 0F E3 /wm */ { BxPrefixSSE, BX_IA_PAVGW_PqQq, BxOpcodeGroupSSE_0fe3 }, - /* 0F E4 /wr */ { BxPrefixSSE, BX_IA_PMULHUW_PqQq, BxOpcodeGroupSSE_0fe4 }, - /* 0F E4 /wm */ { BxPrefixSSE, BX_IA_PMULHUW_PqQq, BxOpcodeGroupSSE_0fe4 }, - /* 0F E5 /wr */ { BxPrefixSSE, BX_IA_PMULHW_PqQq, BxOpcodeGroupSSE_0fe5 }, - /* 0F E5 /wm */ { BxPrefixSSE, BX_IA_PMULHW_PqQq, BxOpcodeGroupSSE_0fe5 }, - /* 0F E6 /wr */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0fe6 }, - /* 0F E6 /wm */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0fe6 }, - /* 0F E7 /wr */ { 0, BX_IA_ERROR }, // MOVNTQ/MOVNTDQ SSE group - /* 0F E7 /wm */ { BxPrefixSSE, BX_IA_MOVNTQ_MqPq, BxOpcodeGroupSSE_0fe7M }, - /* 0F E8 /wr */ { BxPrefixSSE, BX_IA_PSUBSB_PqQq, BxOpcodeGroupSSE_0fe8 }, - /* 0F E8 /wm */ { BxPrefixSSE, BX_IA_PSUBSB_PqQq, BxOpcodeGroupSSE_0fe8 }, - /* 0F E9 /wr */ { BxPrefixSSE, BX_IA_PSUBSW_PqQq, BxOpcodeGroupSSE_0fe9 }, - /* 0F E9 /wm */ { BxPrefixSSE, BX_IA_PSUBSW_PqQq, BxOpcodeGroupSSE_0fe9 }, - /* 0F EA /wr */ { BxPrefixSSE, BX_IA_PMINSW_PqQq, BxOpcodeGroupSSE_0fea }, - /* 0F EA /wm */ { BxPrefixSSE, BX_IA_PMINSW_PqQq, BxOpcodeGroupSSE_0fea }, - /* 0F EB /wr */ { BxPrefixSSE, BX_IA_POR_PqQq, BxOpcodeGroupSSE_0feb }, - /* 0F EB /wm */ { BxPrefixSSE, BX_IA_POR_PqQq, BxOpcodeGroupSSE_0feb }, - /* 0F EC /wr */ { BxPrefixSSE, BX_IA_PADDSB_PqQq, BxOpcodeGroupSSE_0fec }, - /* 0F EC /wm */ { BxPrefixSSE, BX_IA_PADDSB_PqQq, BxOpcodeGroupSSE_0fec }, - /* 0F ED /wr */ { BxPrefixSSE, BX_IA_PADDSW_PqQq, BxOpcodeGroupSSE_0fed }, - /* 0F ED /wm */ { BxPrefixSSE, BX_IA_PADDSW_PqQq, BxOpcodeGroupSSE_0fed }, - /* 0F EE /wr */ { BxPrefixSSE, BX_IA_PMAXSW_PqQq, BxOpcodeGroupSSE_0fee }, - /* 0F EE /wm */ { BxPrefixSSE, BX_IA_PMAXSW_PqQq, BxOpcodeGroupSSE_0fee }, - /* 0F EF /wr */ { BxPrefixSSE, BX_IA_PXOR_PqQq, BxOpcodeGroupSSE_0fef }, - /* 0F EF /wm */ { BxPrefixSSE, BX_IA_PXOR_PqQq, BxOpcodeGroupSSE_0fef }, - /* 0F F0 /wr */ { 0, BX_IA_ERROR }, // LDDQU SSE group - /* 0F F0 /wm */ { BxPrefixSSEF2, BX_IA_LDDQU_VdqMdq }, - /* 0F F1 /wr */ { BxPrefixSSE, BX_IA_PSLLW_PqQq, BxOpcodeGroupSSE_0ff1 }, - /* 0F F1 /wm */ { BxPrefixSSE, BX_IA_PSLLW_PqQq, BxOpcodeGroupSSE_0ff1 }, - /* 0F F2 /wr */ { BxPrefixSSE, BX_IA_PSLLD_PqQq, BxOpcodeGroupSSE_0ff2 }, - /* 0F F2 /wm */ { BxPrefixSSE, BX_IA_PSLLD_PqQq, BxOpcodeGroupSSE_0ff2 }, - /* 0F F3 /wr */ { BxPrefixSSE, BX_IA_PSLLQ_PqQq, BxOpcodeGroupSSE_0ff3 }, - /* 0F F3 /wm */ { BxPrefixSSE, BX_IA_PSLLQ_PqQq, BxOpcodeGroupSSE_0ff3 }, - /* 0F F4 /wr */ { BxPrefixSSE, BX_IA_PMULUDQ_PqQq, BxOpcodeGroupSSE_0ff4 }, - /* 0F F4 /wm */ { BxPrefixSSE, BX_IA_PMULUDQ_PqQq, BxOpcodeGroupSSE_0ff4 }, - /* 0F F5 /wr */ { BxPrefixSSE, BX_IA_PMADDWD_PqQq, BxOpcodeGroupSSE_0ff5 }, - /* 0F F5 /wm */ { BxPrefixSSE, BX_IA_PMADDWD_PqQq, BxOpcodeGroupSSE_0ff5 }, - /* 0F F6 /wr */ { BxPrefixSSE, BX_IA_PSADBW_PqQq, BxOpcodeGroupSSE_0ff6 }, - /* 0F F6 /wm */ { BxPrefixSSE, BX_IA_PSADBW_PqQq, BxOpcodeGroupSSE_0ff6 }, - /* 0F F7 /wr */ { BxPrefixSSE, BX_IA_MASKMOVQ_PqPRq, BxOpcodeGroupSSE_0ff7R }, - /* 0F F7 /wm */ { 0, BX_IA_ERROR }, // MASKMOV SSE group - /* 0F F8 /wr */ { BxPrefixSSE, BX_IA_PSUBB_PqQq, BxOpcodeGroupSSE_0ff8 }, - /* 0F F8 /wm */ { BxPrefixSSE, BX_IA_PSUBB_PqQq, BxOpcodeGroupSSE_0ff8 }, - /* 0F F9 /wr */ { BxPrefixSSE, BX_IA_PSUBW_PqQq, BxOpcodeGroupSSE_0ff9 }, - /* 0F F9 /wm */ { BxPrefixSSE, BX_IA_PSUBW_PqQq, BxOpcodeGroupSSE_0ff9 }, - /* 0F FA /wr */ { BxPrefixSSE, BX_IA_PSUBD_PqQq, BxOpcodeGroupSSE_0ffa }, - /* 0F FA /wm */ { BxPrefixSSE, BX_IA_PSUBD_PqQq, BxOpcodeGroupSSE_0ffa }, - /* 0F FB /wr */ { BxPrefixSSE, BX_IA_PSUBQ_PqQq, BxOpcodeGroupSSE_0ffb }, - /* 0F FB /wm */ { BxPrefixSSE, BX_IA_PSUBQ_PqQq, BxOpcodeGroupSSE_0ffb }, - /* 0F FC /wr */ { BxPrefixSSE, BX_IA_PADDB_PqQq, BxOpcodeGroupSSE_0ffc }, - /* 0F FC /wm */ { BxPrefixSSE, BX_IA_PADDB_PqQq, BxOpcodeGroupSSE_0ffc }, - /* 0F FD /wr */ { BxPrefixSSE, BX_IA_PADDW_PqQq, BxOpcodeGroupSSE_0ffd }, - /* 0F FD /wm */ { BxPrefixSSE, BX_IA_PADDW_PqQq, BxOpcodeGroupSSE_0ffd }, - /* 0F FE /wr */ { BxPrefixSSE, BX_IA_PADDD_PqQq, BxOpcodeGroupSSE_0ffe }, - /* 0F FE /wm */ { BxPrefixSSE, BX_IA_PADDD_PqQq, BxOpcodeGroupSSE_0ffe }, - /* 0F FF /wr */ { 0, BX_IA_ERROR }, - /* 0F FF /wm */ { 0, BX_IA_ERROR }, + /* 0F 20 /w */ { BxGroupN, BX_IA_ERROR, BxOpcodeInfoMOV_RdCd }, + /* 0F 21 /w */ { 0, BX_IA_MOV_RdDd }, + /* 0F 22 /w */ { BxGroupN, BX_IA_ERROR, BxOpcodeInfoMOV_CdRd }, + /* 0F 23 /w */ { BxTraceEnd, BX_IA_MOV_DdRd }, + /* 0F 24 /w */ { BxTraceEnd, BX_IA_MOV_RdTd }, // not implemented + /* 0F 25 /w */ { 0, BX_IA_ERROR }, + /* 0F 26 /w */ { BxTraceEnd, BX_IA_MOV_TdRd }, // not implemented + /* 0F 27 /w */ { 0, BX_IA_ERROR }, + /* 0F 28 /w */ { BxPrefixSSE, BX_IA_MOVAPS_VpsWps, BxOpcodeGroupSSE_0f28 }, + /* 0F 29 /w */ { BxPrefixSSE | BxArithDstRM, BX_IA_MOVAPS_WpsVps, BxOpcodeGroupSSE_0f29 }, + /* 0F 2A /w */ { BxPrefixSSE, BX_IA_CVTPI2PS_VpsQq, BxOpcodeGroupSSE_0f2a }, + /* 0F 2B /w */ { BxPrefixSSE, BX_IA_MOVNTPS_MpsVps, BxOpcodeGroupSSE_0f2bM }, + /* 0F 2C /w */ { BxPrefixSSE, BX_IA_CVTTPS2PI_PqWps, BxOpcodeGroupSSE_0f2c }, + /* 0F 2D /w */ { BxPrefixSSE, BX_IA_CVTPS2PI_PqWps, BxOpcodeGroupSSE_0f2d }, + /* 0F 2E /w */ { BxPrefixSSE, BX_IA_UCOMISS_VssWss, BxOpcodeGroupSSE_0f2e }, + /* 0F 2F /w */ { BxPrefixSSE, BX_IA_COMISS_VpsWps, BxOpcodeGroupSSE_0f2f }, + /* 0F 30 /w */ { 0, BX_IA_WRMSR }, + /* 0F 31 /w */ { 0, BX_IA_RDTSC }, + /* 0F 32 /w */ { 0, BX_IA_RDMSR }, + /* 0F 33 /w */ { 0, BX_IA_RDPMC }, + /* 0F 34 /w */ { BxTraceEnd, BX_IA_SYSENTER }, + /* 0F 35 /w */ { BxTraceEnd, BX_IA_SYSEXIT }, + /* 0F 36 /w */ { 0, BX_IA_ERROR }, + /* 0F 37 /w */ { 0, BX_IA_ERROR }, + /* 0F 38 /w */ { Bx3ByteOp, BX_IA_ERROR, BxOpcode3ByteTable0f38 }, // 3-byte escape + /* 0F 39 /w */ { 0, BX_IA_ERROR }, + /* 0F 3A /w */ { Bx3ByteOp | BxImmediate_Ib, BX_IA_ERROR, BxOpcode3ByteTable0f3a }, // 3-byte escape + /* 0F 3B /w */ { 0, BX_IA_ERROR }, + /* 0F 3C /w */ { 0, BX_IA_ERROR }, + /* 0F 3D /w */ { 0, BX_IA_ERROR }, + /* 0F 3E /w */ { 0, BX_IA_ERROR }, + /* 0F 3F /w */ { 0, BX_IA_ERROR }, + /* 0F 40 /w */ { 0, BX_IA_CMOVO_GwEw }, + /* 0F 41 /w */ { 0, BX_IA_CMOVNO_GwEw }, + /* 0F 42 /w */ { 0, BX_IA_CMOVB_GwEw }, + /* 0F 43 /w */ { 0, BX_IA_CMOVNB_GwEw }, + /* 0F 44 /w */ { 0, BX_IA_CMOVZ_GwEw }, + /* 0F 45 /w */ { 0, BX_IA_CMOVNZ_GwEw }, + /* 0F 46 /w */ { 0, BX_IA_CMOVBE_GwEw }, + /* 0F 47 /w */ { 0, BX_IA_CMOVNBE_GwEw }, + /* 0F 48 /w */ { 0, BX_IA_CMOVS_GwEw }, + /* 0F 49 /w */ { 0, BX_IA_CMOVNS_GwEw }, + /* 0F 4A /w */ { 0, BX_IA_CMOVP_GwEw }, + /* 0F 4B /w */ { 0, BX_IA_CMOVNP_GwEw }, + /* 0F 4C /w */ { 0, BX_IA_CMOVL_GwEw }, + /* 0F 4D /w */ { 0, BX_IA_CMOVNL_GwEw }, + /* 0F 4E /w */ { 0, BX_IA_CMOVLE_GwEw }, + /* 0F 4F /w */ { 0, BX_IA_CMOVNLE_GwEw }, + /* 0F 50 /w */ { BxPrefixSSE, BX_IA_MOVMSKPS_GdVRps, BxOpcodeGroupSSE_0f50R }, + /* 0F 51 /w */ { BxPrefixSSE, BX_IA_SQRTPS_VpsWps, BxOpcodeGroupSSE_0f51 }, + /* 0F 52 /w */ { BxPrefixSSE, BX_IA_RSQRTPS_VpsWps, BxOpcodeGroupSSE_0f52 }, + /* 0F 53 /w */ { BxPrefixSSE, BX_IA_RCPPS_VpsWps, BxOpcodeGroupSSE_0f53 }, + /* 0F 54 /w */ { BxPrefixSSE, BX_IA_ANDPS_VpsWps, BxOpcodeGroupSSE_0f54 }, + /* 0F 55 /w */ { BxPrefixSSE, BX_IA_ANDNPS_VpsWps, BxOpcodeGroupSSE_0f55 }, + /* 0F 56 /w */ { BxPrefixSSE, BX_IA_ORPS_VpsWps, BxOpcodeGroupSSE_0f56 }, + /* 0F 57 /w */ { BxPrefixSSE, BX_IA_XORPS_VpsWps, BxOpcodeGroupSSE_0f57 }, + /* 0F 58 /w */ { BxPrefixSSE, BX_IA_ADDPS_VpsWps, BxOpcodeGroupSSE_0f58 }, + /* 0F 59 /w */ { BxPrefixSSE, BX_IA_MULPS_VpsWps, BxOpcodeGroupSSE_0f59 }, + /* 0F 5A /w */ { BxPrefixSSE, BX_IA_CVTPS2PD_VpsWps, BxOpcodeGroupSSE_0f5a }, + /* 0F 5B /w */ { BxPrefixSSE, BX_IA_CVTDQ2PS_VpsWdq, BxOpcodeGroupSSE_0f5b }, + /* 0F 5C /w */ { BxPrefixSSE, BX_IA_SUBPS_VpsWps, BxOpcodeGroupSSE_0f5c }, + /* 0F 5D /w */ { BxPrefixSSE, BX_IA_MINPS_VpsWps, BxOpcodeGroupSSE_0f5d }, + /* 0F 5E /w */ { BxPrefixSSE, BX_IA_DIVPS_VpsWps, BxOpcodeGroupSSE_0f5e }, + /* 0F 5F /w */ { BxPrefixSSE, BX_IA_MAXPS_VpsWps, BxOpcodeGroupSSE_0f5f }, + /* 0F 60 /w */ { BxPrefixSSE, BX_IA_PUNPCKLBW_PqQd, BxOpcodeGroupSSE_0f60 }, + /* 0F 61 /w */ { BxPrefixSSE, BX_IA_PUNPCKLWD_PqQd, BxOpcodeGroupSSE_0f61 }, + /* 0F 62 /w */ { BxPrefixSSE, BX_IA_PUNPCKLDQ_PqQd, BxOpcodeGroupSSE_0f62 }, + /* 0F 63 /w */ { BxPrefixSSE, BX_IA_PACKSSWB_PqQq, BxOpcodeGroupSSE_0f63 }, + /* 0F 64 /w */ { BxPrefixSSE, BX_IA_PCMPGTB_PqQq, BxOpcodeGroupSSE_0f64 }, + /* 0F 65 /w */ { BxPrefixSSE, BX_IA_PCMPGTW_PqQq, BxOpcodeGroupSSE_0f65 }, + /* 0F 66 /w */ { BxPrefixSSE, BX_IA_PCMPGTD_PqQq, BxOpcodeGroupSSE_0f66 }, + /* 0F 67 /w */ { BxPrefixSSE, BX_IA_PACKUSWB_PqQq, BxOpcodeGroupSSE_0f67 }, + /* 0F 68 /w */ { BxPrefixSSE, BX_IA_PUNPCKHBW_PqQq, BxOpcodeGroupSSE_0f68 }, + /* 0F 69 /w */ { BxPrefixSSE, BX_IA_PUNPCKHWD_PqQq, BxOpcodeGroupSSE_0f69 }, + /* 0F 6A /w */ { BxPrefixSSE, BX_IA_PUNPCKHDQ_PqQq, BxOpcodeGroupSSE_0f6a }, + /* 0F 6B /w */ { BxPrefixSSE, BX_IA_PACKSSDW_PqQq, BxOpcodeGroupSSE_0f6b }, + /* 0F 6C /w */ { BxPrefixSSE66, BX_IA_PUNPCKLQDQ_VdqWdq }, + /* 0F 6D /w */ { BxPrefixSSE66, BX_IA_PUNPCKHQDQ_VdqWdq }, + /* 0F 6E /w */ { BxPrefixSSE, BX_IA_MOVD_PqEd, BxOpcodeGroupSSE_0f6e }, + /* 0F 6F /w */ { BxPrefixSSE, BX_IA_MOVQ_PqQq, BxOpcodeGroupSSE_0f6f }, + /* 0F 70 /w */ { BxPrefixSSE | BxImmediate_Ib, BX_IA_PSHUFW_PqQqIb, BxOpcodeGroupSSE_0f70 }, + /* 0F 71 /w */ { BxGroup12, BX_IA_ERROR, BxOpcodeInfoG12R }, + /* 0F 72 /w */ { BxGroup13, BX_IA_ERROR, BxOpcodeInfoG13R }, + /* 0F 73 /w */ { BxGroup14, BX_IA_ERROR, BxOpcodeInfoG14R }, + /* 0F 74 /w */ { BxPrefixSSE, BX_IA_PCMPEQB_PqQq, BxOpcodeGroupSSE_0f74 }, + /* 0F 75 /w */ { BxPrefixSSE, BX_IA_PCMPEQW_PqQq, BxOpcodeGroupSSE_0f75 }, + /* 0F 76 /w */ { BxPrefixSSE, BX_IA_PCMPEQD_PqQq, BxOpcodeGroupSSE_0f76 }, + /* 0F 77 /w */ { BxPrefixSSE, BX_IA_EMMS, BxOpcodeGroupSSE_ERR }, + /* 0F 78 /w */ { BxPrefixSSE, BX_IA_VMREAD_EdGd, BxOpcodeGroupSSE_ERR }, + /* 0F 79 /w */ { BxPrefixSSE, BX_IA_VMWRITE_GdEd, BxOpcodeGroupSSE_ERR }, + /* 0F 7A /w */ { 0, BX_IA_ERROR }, + /* 0F 7B /w */ { 0, BX_IA_ERROR }, + /* 0F 7C /w */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f7c }, + /* 0F 7D /w */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f7d }, + /* 0F 7E /w */ { BxPrefixSSE, BX_IA_MOVD_EdPd, BxOpcodeGroupSSE_0f7e }, + /* 0F 7F /w */ { BxPrefixSSE, BX_IA_MOVQ_QqPq, BxOpcodeGroupSSE_0f7f }, + /* 0F 80 /w */ { BxImmediate_BrOff16 | BxTraceJCC, BX_IA_JO_Jw }, + /* 0F 81 /w */ { BxImmediate_BrOff16 | BxTraceJCC, BX_IA_JNO_Jw }, + /* 0F 82 /w */ { BxImmediate_BrOff16 | BxTraceJCC, BX_IA_JB_Jw }, + /* 0F 83 /w */ { BxImmediate_BrOff16 | BxTraceJCC, BX_IA_JNB_Jw }, + /* 0F 84 /w */ { BxImmediate_BrOff16 | BxTraceJCC, BX_IA_JZ_Jw }, + /* 0F 85 /w */ { BxImmediate_BrOff16 | BxTraceJCC, BX_IA_JNZ_Jw }, + /* 0F 86 /w */ { BxImmediate_BrOff16 | BxTraceJCC, BX_IA_JBE_Jw }, + /* 0F 87 /w */ { BxImmediate_BrOff16 | BxTraceJCC, BX_IA_JNBE_Jw }, + /* 0F 88 /w */ { BxImmediate_BrOff16 | BxTraceJCC, BX_IA_JS_Jw }, + /* 0F 89 /w */ { BxImmediate_BrOff16 | BxTraceJCC, BX_IA_JNS_Jw }, + /* 0F 8A /w */ { BxImmediate_BrOff16 | BxTraceJCC, BX_IA_JP_Jw }, + /* 0F 8B /w */ { BxImmediate_BrOff16 | BxTraceJCC, BX_IA_JNP_Jw }, + /* 0F 8C /w */ { BxImmediate_BrOff16 | BxTraceJCC, BX_IA_JL_Jw }, + /* 0F 8D /w */ { BxImmediate_BrOff16 | BxTraceJCC, BX_IA_JNL_Jw }, + /* 0F 8E /w */ { BxImmediate_BrOff16 | BxTraceJCC, BX_IA_JLE_Jw }, + /* 0F 8F /w */ { BxImmediate_BrOff16 | BxTraceJCC, BX_IA_JNLE_Jw }, + /* 0F 90 /w */ { 0, BX_IA_SETO_Eb }, + /* 0F 91 /w */ { 0, BX_IA_SETNO_Eb }, + /* 0F 92 /w */ { 0, BX_IA_SETB_Eb }, + /* 0F 93 /w */ { 0, BX_IA_SETNB_Eb }, + /* 0F 94 /w */ { 0, BX_IA_SETZ_Eb }, + /* 0F 95 /w */ { 0, BX_IA_SETNZ_Eb }, + /* 0F 96 /w */ { 0, BX_IA_SETBE_Eb }, + /* 0F 97 /w */ { 0, BX_IA_SETNBE_Eb }, + /* 0F 98 /w */ { 0, BX_IA_SETS_Eb }, + /* 0F 99 /w */ { 0, BX_IA_SETNS_Eb }, + /* 0F 9A /w */ { 0, BX_IA_SETP_Eb }, + /* 0F 9B /w */ { 0, BX_IA_SETNP_Eb }, + /* 0F 9C /w */ { 0, BX_IA_SETL_Eb }, + /* 0F 9D /w */ { 0, BX_IA_SETNL_Eb }, + /* 0F 9E /w */ { 0, BX_IA_SETLE_Eb }, + /* 0F 9F /w */ { 0, BX_IA_SETNLE_Eb }, + /* 0F A0 /w */ { 0, BX_IA_PUSH16_FS }, + /* 0F A1 /w */ { 0, BX_IA_POP16_FS }, + /* 0F A2 /w */ { 0, BX_IA_CPUID }, + /* 0F A3 /w */ { 0, BX_IA_BT_EwGw }, + /* 0F A4 /w */ { BxImmediate_Ib, BX_IA_SHLD_EwGw }, + /* 0F A5 /w */ { 0, BX_IA_SHLD_EwGw }, + /* 0F A6 /w */ { BxTraceEnd, BX_IA_CMPXCHG_XBTS }, // not implemented + /* 0F A7 /w */ { BxTraceEnd, BX_IA_CMPXCHG_IBTS }, // not implemented + /* 0F A8 /w */ { 0, BX_IA_PUSH16_GS }, + /* 0F A9 /w */ { 0, BX_IA_POP16_GS }, + /* 0F AA /w */ { BxTraceEnd, BX_IA_RSM }, + /* 0F AB /w */ { BxLockable, BX_IA_BTS_EwGw }, + /* 0F AC /w */ { BxImmediate_Ib, BX_IA_SHRD_EwGw }, + /* 0F AD /w */ { 0, BX_IA_SHRD_EwGw }, + /* 0F AE /w */ { BxGroup15, BX_IA_ERROR, BxOpcodeInfoG15 }, + /* 0F AF /w */ { 0, BX_IA_IMUL_GwEw }, + /* 0F B0 /w */ { BxLockable, BX_IA_CMPXCHG_EbGb }, + /* 0F B1 /w */ { BxLockable, BX_IA_CMPXCHG_EwGw }, + /* 0F B2 /w */ { 0, BX_IA_LSS_GwMp }, + /* 0F B3 /w */ { BxLockable, BX_IA_BTR_EwGw }, + /* 0F B4 /w */ { 0, BX_IA_LFS_GwMp }, + /* 0F B5 /w */ { 0, BX_IA_LGS_GwMp }, + /* 0F B6 /w */ { 0, BX_IA_MOVZX_GwEb }, + /* 0F B7 /w */ { 0, BX_IA_MOV_GwEw }, // MOVZX_GwEw + /* 0F B8 /w */ { BxPrefixSSEF3, BX_IA_POPCNT_GwEw }, + /* 0F B9 /w */ { BxTraceEnd, BX_IA_UD2B }, + /* 0F BA /w */ { BxGroup8, BX_IA_ERROR, BxOpcodeInfoG8EwIb }, + /* 0F BB /w */ { BxLockable, BX_IA_BTC_EwGw }, + /* 0F BC /w */ { 0, BX_IA_BSF_GwEw }, + /* 0F BD /w */ { 0, BX_IA_BSR_GwEw }, + /* 0F BE /w */ { 0, BX_IA_MOVSX_GwEb }, + /* 0F BF /w */ { 0, BX_IA_MOV_GwEw }, // MOVSX_GwEw + /* 0F C0 /w */ { BxLockable, BX_IA_XADD_EbGb }, + /* 0F C1 /w */ { BxLockable, BX_IA_XADD_EwGw }, + /* 0F C2 /w */ { BxPrefixSSE | BxImmediate_Ib, BX_IA_CMPPS_VpsWpsIb, BxOpcodeGroupSSE_0fc2 }, + /* 0F C3 /w */ { BxPrefixSSE, BX_IA_MOVNTI_MdGd, BxOpcodeGroupSSE_ERR }, + /* 0F C4 /w */ { BxPrefixSSE | BxImmediate_Ib, BX_IA_PINSRW_PqEwIb, BxOpcodeGroupSSE_0fc4 }, + /* 0F C5 /w */ { BxPrefixSSE | BxImmediate_Ib, BX_IA_PEXTRW_GdPqIb, BxOpcodeGroupSSE_0fc5R }, + /* 0F C6 /w */ { BxPrefixSSE | BxImmediate_Ib, BX_IA_SHUFPS_VpsWpsIb, BxOpcodeGroupSSE_0fc6 }, + /* 0F C7 /w */ { BxGroup9, BX_IA_ERROR, BxOpcodeInfoG9M }, + /* 0F C8 /w */ { 0, BX_IA_BSWAP_RX }, + /* 0F C9 /w */ { 0, BX_IA_BSWAP_RX }, + /* 0F CA /w */ { 0, BX_IA_BSWAP_RX }, + /* 0F CB /w */ { 0, BX_IA_BSWAP_RX }, + /* 0F CC /w */ { 0, BX_IA_BSWAP_RX }, + /* 0F CD /w */ { 0, BX_IA_BSWAP_RX }, + /* 0F CE /w */ { 0, BX_IA_BSWAP_RX }, + /* 0F CF /w */ { 0, BX_IA_BSWAP_RX }, + /* 0F D0 /w */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0fd0 }, + /* 0F D1 /w */ { BxPrefixSSE, BX_IA_PSRLW_PqQq, BxOpcodeGroupSSE_0fd1 }, + /* 0F D2 /w */ { BxPrefixSSE, BX_IA_PSRLD_PqQq, BxOpcodeGroupSSE_0fd2 }, + /* 0F D3 /w */ { BxPrefixSSE, BX_IA_PSRLQ_PqQq, BxOpcodeGroupSSE_0fd3 }, + /* 0F D4 /w */ { BxPrefixSSE, BX_IA_PADDQ_PqQq, BxOpcodeGroupSSE_0fd4 }, + /* 0F D5 /w */ { BxPrefixSSE, BX_IA_PMULLW_PqQq, BxOpcodeGroupSSE_0fd5 }, + /* 0F D6 /w */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0fd6 }, + /* 0F D7 /w */ { BxPrefixSSE, BX_IA_PMOVMSKB_GdPRq, BxOpcodeGroupSSE_0fd7R }, + /* 0F D8 /w */ { BxPrefixSSE, BX_IA_PSUBUSB_PqQq, BxOpcodeGroupSSE_0fd8 }, + /* 0F D9 /w */ { BxPrefixSSE, BX_IA_PSUBUSW_PqQq, BxOpcodeGroupSSE_0fd9 }, + /* 0F DA /w */ { BxPrefixSSE, BX_IA_PMINUB_PqQq, BxOpcodeGroupSSE_0fda }, + /* 0F DB /w */ { BxPrefixSSE, BX_IA_PAND_PqQq, BxOpcodeGroupSSE_0fdb }, + /* 0F DC /w */ { BxPrefixSSE, BX_IA_PADDUSB_PqQq, BxOpcodeGroupSSE_0fdc }, + /* 0F DD /w */ { BxPrefixSSE, BX_IA_PADDUSW_PqQq, BxOpcodeGroupSSE_0fdd }, + /* 0F DE /w */ { BxPrefixSSE, BX_IA_PMAXUB_PqQq, BxOpcodeGroupSSE_0fde }, + /* 0F DF /w */ { BxPrefixSSE, BX_IA_PANDN_PqQq, BxOpcodeGroupSSE_0fdf }, + /* 0F E0 /w */ { BxPrefixSSE, BX_IA_PAVGB_PqQq, BxOpcodeGroupSSE_0fe0 }, + /* 0F E1 /w */ { BxPrefixSSE, BX_IA_PSRAW_PqQq, BxOpcodeGroupSSE_0fe1 }, + /* 0F E2 /w */ { BxPrefixSSE, BX_IA_PSRAD_PqQq, BxOpcodeGroupSSE_0fe2 }, + /* 0F E3 /w */ { BxPrefixSSE, BX_IA_PAVGW_PqQq, BxOpcodeGroupSSE_0fe3 }, + /* 0F E4 /w */ { BxPrefixSSE, BX_IA_PMULHUW_PqQq, BxOpcodeGroupSSE_0fe4 }, + /* 0F E5 /w */ { BxPrefixSSE, BX_IA_PMULHW_PqQq, BxOpcodeGroupSSE_0fe5 }, + /* 0F E6 /w */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0fe6 }, + /* 0F E7 /w */ { BxPrefixSSE, BX_IA_MOVNTQ_MqPq, BxOpcodeGroupSSE_0fe7M }, + /* 0F E8 /w */ { BxPrefixSSE, BX_IA_PSUBSB_PqQq, BxOpcodeGroupSSE_0fe8 }, + /* 0F E9 /w */ { BxPrefixSSE, BX_IA_PSUBSW_PqQq, BxOpcodeGroupSSE_0fe9 }, + /* 0F EA /w */ { BxPrefixSSE, BX_IA_PMINSW_PqQq, BxOpcodeGroupSSE_0fea }, + /* 0F EB /w */ { BxPrefixSSE, BX_IA_POR_PqQq, BxOpcodeGroupSSE_0feb }, + /* 0F EC /w */ { BxPrefixSSE, BX_IA_PADDSB_PqQq, BxOpcodeGroupSSE_0fec }, + /* 0F ED /w */ { BxPrefixSSE, BX_IA_PADDSW_PqQq, BxOpcodeGroupSSE_0fed }, + /* 0F EE /w */ { BxPrefixSSE, BX_IA_PMAXSW_PqQq, BxOpcodeGroupSSE_0fee }, + /* 0F EF /w */ { BxPrefixSSE, BX_IA_PXOR_PqQq, BxOpcodeGroupSSE_0fef }, + /* 0F F0 /w */ { BxPrefixSSEF2, BX_IA_LDDQU_VdqMdq }, + /* 0F F1 /w */ { BxPrefixSSE, BX_IA_PSLLW_PqQq, BxOpcodeGroupSSE_0ff1 }, + /* 0F F2 /w */ { BxPrefixSSE, BX_IA_PSLLD_PqQq, BxOpcodeGroupSSE_0ff2 }, + /* 0F F3 /w */ { BxPrefixSSE, BX_IA_PSLLQ_PqQq, BxOpcodeGroupSSE_0ff3 }, + /* 0F F4 /w */ { BxPrefixSSE, BX_IA_PMULUDQ_PqQq, BxOpcodeGroupSSE_0ff4 }, + /* 0F F5 /w */ { BxPrefixSSE, BX_IA_PMADDWD_PqQq, BxOpcodeGroupSSE_0ff5 }, + /* 0F F6 /w */ { BxPrefixSSE, BX_IA_PSADBW_PqQq, BxOpcodeGroupSSE_0ff6 }, + /* 0F F7 /w */ { BxPrefixSSE, BX_IA_MASKMOVQ_PqPRq, BxOpcodeGroupSSE_0ff7R }, + /* 0F F8 /w */ { BxPrefixSSE, BX_IA_PSUBB_PqQq, BxOpcodeGroupSSE_0ff8 }, + /* 0F F9 /w */ { BxPrefixSSE, BX_IA_PSUBW_PqQq, BxOpcodeGroupSSE_0ff9 }, + /* 0F FA /w */ { BxPrefixSSE, BX_IA_PSUBD_PqQq, BxOpcodeGroupSSE_0ffa }, + /* 0F FB /w */ { BxPrefixSSE, BX_IA_PSUBQ_PqQq, BxOpcodeGroupSSE_0ffb }, + /* 0F FC /w */ { BxPrefixSSE, BX_IA_PADDB_PqQq, BxOpcodeGroupSSE_0ffc }, + /* 0F FD /w */ { BxPrefixSSE, BX_IA_PADDW_PqQq, BxOpcodeGroupSSE_0ffd }, + /* 0F FE /w */ { BxPrefixSSE, BX_IA_PADDD_PqQq, BxOpcodeGroupSSE_0ffe }, + /* 0F FF /w */ { 0, BX_IA_ERROR }, - // 512 (/r) + 512 (/m) entries for 32bit mode - /* 00 /dr */ { BxArithDstRM, BX_IA_ADD_EbGb }, - /* 00 /dm */ { BxLockable, BX_IA_ADD_EbGb }, - /* 01 /dr */ { BxArithDstRM, BX_IA_ADD_EdGd }, - /* 01 /dm */ { BxLockable, BX_IA_ADD_EdGd }, - /* 02 /dr */ { 0, BX_IA_ADD_GbEb }, - /* 02 /dm */ { 0, BX_IA_ADD_GbEb }, - /* 03 /dr */ { 0, BX_IA_ADD_GdEd }, - /* 03 /dm */ { 0, BX_IA_ADD_GdEd }, - /* 04 /dr */ { BxImmediate_Ib, BX_IA_ADD_ALIb }, - /* 04 /dm */ { BxImmediate_Ib, BX_IA_ADD_ALIb }, - /* 05 /dr */ { BxImmediate_Id, BX_IA_ADD_EAXId }, - /* 05 /dm */ { BxImmediate_Id, BX_IA_ADD_EAXId }, - /* 06 /dr */ { 0, BX_IA_PUSH32_ES }, - /* 06 /dm */ { 0, BX_IA_PUSH32_ES }, - /* 07 /dr */ { 0, BX_IA_POP32_ES }, - /* 07 /dm */ { 0, BX_IA_POP32_ES }, - /* 08 /dr */ { BxArithDstRM, BX_IA_OR_EbGb }, - /* 08 /dm */ { BxLockable, BX_IA_OR_EbGb }, - /* 09 /dr */ { BxArithDstRM, BX_IA_OR_EdGd }, - /* 09 /dm */ { BxLockable, BX_IA_OR_EdGd }, - /* 0A /dr */ { 0, BX_IA_OR_GbEb }, - /* 0A /dm */ { 0, BX_IA_OR_GbEb }, - /* 0B /dr */ { 0, BX_IA_OR_GdEd }, - /* 0B /dm */ { 0, BX_IA_OR_GdEd }, - /* 0C /dr */ { BxImmediate_Ib, BX_IA_OR_ALIb }, - /* 0C /dm */ { BxImmediate_Ib, BX_IA_OR_ALIb }, - /* 0D /dr */ { BxImmediate_Id, BX_IA_OR_EAXId }, - /* 0D /dm */ { BxImmediate_Id, BX_IA_OR_EAXId }, - /* 0E /dr */ { 0, BX_IA_PUSH32_CS }, - /* 0E /dm */ { 0, BX_IA_PUSH32_CS }, - /* 0F /dr */ { 0, BX_IA_ERROR }, // 2-byte escape - /* 0F /dm */ { 0, BX_IA_ERROR }, // 2-byte escape - /* 10 /dr */ { BxArithDstRM, BX_IA_ADC_EbGb }, - /* 10 /dm */ { BxLockable, BX_IA_ADC_EbGb }, - /* 11 /dr */ { BxArithDstRM, BX_IA_ADC_EdGd }, - /* 11 /dm */ { BxLockable, BX_IA_ADC_EdGd }, - /* 12 /dr */ { 0, BX_IA_ADC_GbEb }, - /* 12 /dm */ { 0, BX_IA_ADC_GbEb }, - /* 13 /dr */ { 0, BX_IA_ADC_GdEd }, - /* 13 /dm */ { 0, BX_IA_ADC_GdEd }, - /* 14 /dr */ { BxImmediate_Ib, BX_IA_ADC_ALIb }, - /* 14 /dm */ { BxImmediate_Ib, BX_IA_ADC_ALIb }, - /* 15 /dr */ { BxImmediate_Id, BX_IA_ADC_EAXId }, - /* 15 /dm */ { BxImmediate_Id, BX_IA_ADC_EAXId }, - /* 16 /dr */ { 0, BX_IA_PUSH32_SS }, - /* 16 /dm */ { 0, BX_IA_PUSH32_SS }, - /* 17 /dr */ { BxTraceEnd, BX_IA_POP32_SS }, // async_event = 1 - /* 17 /dm */ { BxTraceEnd, BX_IA_POP32_SS }, // async_event = 1 - /* 18 /dr */ { BxArithDstRM, BX_IA_SBB_EbGb }, - /* 18 /dm */ { BxLockable, BX_IA_SBB_EbGb }, - /* 19 /dr */ { BxArithDstRM, BX_IA_SBB_EdGd }, - /* 19 /dm */ { BxLockable, BX_IA_SBB_EdGd }, - /* 1A /dr */ { 0, BX_IA_SBB_GbEb }, - /* 1A /dm */ { 0, BX_IA_SBB_GbEb }, - /* 1B /dr */ { 0, BX_IA_SBB_GdEd }, - /* 1B /dm */ { 0, BX_IA_SBB_GdEd }, - /* 1C /dr */ { BxImmediate_Ib, BX_IA_SBB_ALIb }, - /* 1C /dm */ { BxImmediate_Ib, BX_IA_SBB_ALIb }, - /* 1D /dr */ { BxImmediate_Id, BX_IA_SBB_EAXId }, - /* 1D /dm */ { BxImmediate_Id, BX_IA_SBB_EAXId }, - /* 1E /dr */ { 0, BX_IA_PUSH32_DS }, - /* 1E /dm */ { 0, BX_IA_PUSH32_DS }, - /* 1F /dr */ { 0, BX_IA_POP32_DS }, - /* 1F /dm */ { 0, BX_IA_POP32_DS }, - /* 20 /dr */ { BxArithDstRM, BX_IA_AND_EbGb }, - /* 20 /dm */ { BxLockable, BX_IA_AND_EbGb }, - /* 21 /dr */ { BxArithDstRM, BX_IA_AND_EdGd }, - /* 21 /dm */ { BxLockable, BX_IA_AND_EdGd }, - /* 22 /dr */ { 0, BX_IA_AND_GbEb }, - /* 22 /dm */ { 0, BX_IA_AND_GbEb }, - /* 23 /dr */ { 0, BX_IA_AND_GdEd }, - /* 23 /dm */ { 0, BX_IA_AND_GdEd }, - /* 24 /dr */ { BxImmediate_Ib, BX_IA_AND_ALIb }, - /* 24 /dm */ { BxImmediate_Ib, BX_IA_AND_ALIb }, - /* 25 /dr */ { BxImmediate_Id, BX_IA_AND_EAXId }, - /* 25 /dm */ { BxImmediate_Id, BX_IA_AND_EAXId }, - /* 26 /dr */ { 0, BX_IA_ERROR }, // ES: - /* 26 /dm */ { 0, BX_IA_ERROR }, // ES: - /* 27 /dr */ { 0, BX_IA_DAA }, - /* 27 /dm */ { 0, BX_IA_DAA }, - /* 28 /dr */ { BxArithDstRM, BX_IA_SUB_EbGb }, - /* 28 /dm */ { BxLockable, BX_IA_SUB_EbGb }, - /* 29 /dr */ { BxArithDstRM, BX_IA_SUB_EdGd }, - /* 29 /dm */ { BxLockable, BX_IA_SUB_EdGd }, - /* 2A /dr */ { 0, BX_IA_SUB_GbEb }, - /* 2A /dm */ { 0, BX_IA_SUB_GbEb }, - /* 2B /dr */ { 0, BX_IA_SUB_GdEd }, - /* 2B /dm */ { 0, BX_IA_SUB_GdEd }, - /* 2C /dr */ { BxImmediate_Ib, BX_IA_SUB_ALIb }, - /* 2C /dm */ { BxImmediate_Ib, BX_IA_SUB_ALIb }, - /* 2D /dr */ { BxImmediate_Id, BX_IA_SUB_EAXId }, - /* 2D /dm */ { BxImmediate_Id, BX_IA_SUB_EAXId }, - /* 2E /dr */ { 0, BX_IA_ERROR }, // CS: - /* 2E /dm */ { 0, BX_IA_ERROR }, // CS: - /* 2F /dr */ { 0, BX_IA_DAS }, - /* 2F /dm */ { 0, BX_IA_DAS }, - /* 30 /dr */ { BxArithDstRM, BX_IA_XOR_EbGb }, - /* 30 /dm */ { BxLockable, BX_IA_XOR_EbGb }, - /* 31 /dr */ { BxArithDstRM, BX_IA_XOR_EdGd }, - /* 31 /dm */ { BxLockable, BX_IA_XOR_EdGd }, - /* 32 /dr */ { 0, BX_IA_XOR_GbEb }, - /* 32 /dm */ { 0, BX_IA_XOR_GbEb }, - /* 33 /dr */ { 0, BX_IA_XOR_GdEd }, - /* 33 /dm */ { 0, BX_IA_XOR_GdEd }, - /* 34 /dr */ { BxImmediate_Ib, BX_IA_XOR_ALIb }, - /* 34 /dm */ { BxImmediate_Ib, BX_IA_XOR_ALIb }, - /* 35 /dr */ { BxImmediate_Id, BX_IA_XOR_EAXId }, - /* 35 /dm */ { BxImmediate_Id, BX_IA_XOR_EAXId }, - /* 36 /dr */ { 0, BX_IA_ERROR }, // SS: - /* 36 /dm */ { 0, BX_IA_ERROR }, // SS: - /* 37 /dr */ { 0, BX_IA_AAA }, - /* 37 /dm */ { 0, BX_IA_AAA }, - /* 38 /dr */ { BxArithDstRM, BX_IA_CMP_EbGb }, - /* 38 /dm */ { 0, BX_IA_CMP_EbGb }, - /* 39 /dr */ { BxArithDstRM, BX_IA_CMP_EdGd }, - /* 39 /dm */ { 0, BX_IA_CMP_EdGd }, - /* 3A /dr */ { 0, BX_IA_CMP_GbEb }, - /* 3A /dm */ { 0, BX_IA_CMP_GbEb }, - /* 3B /dr */ { 0, BX_IA_CMP_GdEd }, - /* 3B /dm */ { 0, BX_IA_CMP_GdEd }, - /* 3C /dr */ { BxImmediate_Ib, BX_IA_CMP_ALIb }, - /* 3C /dm */ { BxImmediate_Ib, BX_IA_CMP_ALIb }, - /* 3D /dr */ { BxImmediate_Id, BX_IA_CMP_EAXId }, - /* 3D /dm */ { BxImmediate_Id, BX_IA_CMP_EAXId }, - /* 3E /dr */ { 0, BX_IA_ERROR }, // DS: - /* 3E /dm */ { 0, BX_IA_ERROR }, // DS: - /* 3F /dr */ { 0, BX_IA_AAS }, - /* 3F /dm */ { 0, BX_IA_AAS }, - /* 40 /dr */ { 0, BX_IA_INC_ERX }, - /* 40 /dm */ { 0, BX_IA_INC_ERX }, - /* 41 /dr */ { 0, BX_IA_INC_ERX }, - /* 41 /dm */ { 0, BX_IA_INC_ERX }, - /* 42 /dr */ { 0, BX_IA_INC_ERX }, - /* 42 /dm */ { 0, BX_IA_INC_ERX }, - /* 43 /dr */ { 0, BX_IA_INC_ERX }, - /* 43 /dm */ { 0, BX_IA_INC_ERX }, - /* 44 /dr */ { 0, BX_IA_INC_ERX }, - /* 44 /dm */ { 0, BX_IA_INC_ERX }, - /* 45 /dr */ { 0, BX_IA_INC_ERX }, - /* 45 /dm */ { 0, BX_IA_INC_ERX }, - /* 46 /dr */ { 0, BX_IA_INC_ERX }, - /* 46 /dm */ { 0, BX_IA_INC_ERX }, - /* 47 /dr */ { 0, BX_IA_INC_ERX }, - /* 47 /dm */ { 0, BX_IA_INC_ERX }, - /* 48 /dr */ { 0, BX_IA_DEC_ERX }, - /* 48 /dm */ { 0, BX_IA_DEC_ERX }, - /* 49 /dr */ { 0, BX_IA_DEC_ERX }, - /* 49 /dm */ { 0, BX_IA_DEC_ERX }, - /* 4A /dr */ { 0, BX_IA_DEC_ERX }, - /* 4A /dm */ { 0, BX_IA_DEC_ERX }, - /* 4B /dr */ { 0, BX_IA_DEC_ERX }, - /* 4B /dm */ { 0, BX_IA_DEC_ERX }, - /* 4C /dr */ { 0, BX_IA_DEC_ERX }, - /* 4C /dm */ { 0, BX_IA_DEC_ERX }, - /* 4D /dr */ { 0, BX_IA_DEC_ERX }, - /* 4D /dm */ { 0, BX_IA_DEC_ERX }, - /* 4E /dr */ { 0, BX_IA_DEC_ERX }, - /* 4E /dm */ { 0, BX_IA_DEC_ERX }, - /* 4F /dr */ { 0, BX_IA_DEC_ERX }, - /* 4F /dm */ { 0, BX_IA_DEC_ERX }, - /* 50 /dr */ { 0, BX_IA_PUSH_ERX }, - /* 50 /dm */ { 0, BX_IA_PUSH_ERX }, - /* 51 /dr */ { 0, BX_IA_PUSH_ERX }, - /* 51 /dm */ { 0, BX_IA_PUSH_ERX }, - /* 52 /dr */ { 0, BX_IA_PUSH_ERX }, - /* 52 /dm */ { 0, BX_IA_PUSH_ERX }, - /* 53 /dr */ { 0, BX_IA_PUSH_ERX }, - /* 53 /dm */ { 0, BX_IA_PUSH_ERX }, - /* 54 /dr */ { 0, BX_IA_PUSH_ERX }, - /* 54 /dm */ { 0, BX_IA_PUSH_ERX }, - /* 55 /dr */ { 0, BX_IA_PUSH_ERX }, - /* 55 /dm */ { 0, BX_IA_PUSH_ERX }, - /* 56 /dr */ { 0, BX_IA_PUSH_ERX }, - /* 56 /dm */ { 0, BX_IA_PUSH_ERX }, - /* 57 /dr */ { 0, BX_IA_PUSH_ERX }, - /* 57 /dm */ { 0, BX_IA_PUSH_ERX }, - /* 58 /dr */ { 0, BX_IA_POP_ERX }, - /* 58 /dm */ { 0, BX_IA_POP_ERX }, - /* 59 /dr */ { 0, BX_IA_POP_ERX }, - /* 59 /dm */ { 0, BX_IA_POP_ERX }, - /* 5A /dr */ { 0, BX_IA_POP_ERX }, - /* 5A /dm */ { 0, BX_IA_POP_ERX }, - /* 5B /dr */ { 0, BX_IA_POP_ERX }, - /* 5B /dm */ { 0, BX_IA_POP_ERX }, - /* 5C /dr */ { 0, BX_IA_POP_ERX }, - /* 5C /dm */ { 0, BX_IA_POP_ERX }, - /* 5D /dr */ { 0, BX_IA_POP_ERX }, - /* 5D /dm */ { 0, BX_IA_POP_ERX }, - /* 5E /dr */ { 0, BX_IA_POP_ERX }, - /* 5E /dm */ { 0, BX_IA_POP_ERX }, - /* 5F /dr */ { 0, BX_IA_POP_ERX }, - /* 5F /dm */ { 0, BX_IA_POP_ERX }, - /* 60 /dr */ { 0, BX_IA_PUSHAD32 }, - /* 60 /dm */ { 0, BX_IA_PUSHAD32 }, - /* 61 /dr */ { 0, BX_IA_POPAD32 }, - /* 61 /dm */ { 0, BX_IA_POPAD32 }, - /* 62 /dr */ { 0, BX_IA_ERROR }, // BOUND - /* 62 /dm */ { 0, BX_IA_BOUND_GdMa }, - /* 63 /dr */ { 0, BX_IA_ARPL_EwGw }, - /* 63 /dm */ { 0, BX_IA_ARPL_EwGw }, - /* 64 /dr */ { 0, BX_IA_ERROR }, // FS: - /* 64 /dm */ { 0, BX_IA_ERROR }, // FS: - /* 65 /dr */ { 0, BX_IA_ERROR }, // GS: - /* 65 /dm */ { 0, BX_IA_ERROR }, // GS: - /* 66 /dr */ { 0, BX_IA_ERROR }, // OS: - /* 66 /dm */ { 0, BX_IA_ERROR }, // OS: - /* 67 /dr */ { 0, BX_IA_ERROR }, // AS: - /* 67 /dm */ { 0, BX_IA_ERROR }, // AS: - /* 68 /dr */ { BxImmediate_Id, BX_IA_PUSH_Id }, - /* 68 /dm */ { BxImmediate_Id, BX_IA_PUSH_Id }, - /* 69 /dr */ { BxImmediate_Id, BX_IA_IMUL_GdEdId }, - /* 69 /dm */ { BxImmediate_Id, BX_IA_IMUL_GdEdId }, - /* 6A /dr */ { BxImmediate_Ib_SE, BX_IA_PUSH_Id }, - /* 6A /dm */ { BxImmediate_Ib_SE, BX_IA_PUSH_Id }, - /* 6B /dr */ { BxImmediate_Ib_SE, BX_IA_IMUL_GdEdId }, - /* 6B /dm */ { BxImmediate_Ib_SE, BX_IA_IMUL_GdEdId }, - /* 6C /dr */ { 0, BX_IA_REP_INSB_YbDX }, - /* 6C /dm */ { 0, BX_IA_REP_INSB_YbDX }, - /* 6D /dr */ { 0, BX_IA_REP_INSD_YdDX }, - /* 6D /dm */ { 0, BX_IA_REP_INSD_YdDX }, - /* 6E /dr */ { 0, BX_IA_REP_OUTSB_DXXb }, - /* 6E /dm */ { 0, BX_IA_REP_OUTSB_DXXb }, - /* 6F /dr */ { 0, BX_IA_REP_OUTSD_DXXd }, - /* 6F /dm */ { 0, BX_IA_REP_OUTSD_DXXd }, - /* 70 /dr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JO_Jd }, - /* 70 /dm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JO_Jd }, - /* 71 /dr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNO_Jd }, - /* 71 /dm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNO_Jd }, - /* 72 /dr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JB_Jd }, - /* 72 /dm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JB_Jd }, - /* 73 /dr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNB_Jd }, - /* 73 /dm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNB_Jd }, - /* 74 /dr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JZ_Jd }, - /* 74 /dm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JZ_Jd }, - /* 75 /dr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNZ_Jd }, - /* 75 /dm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNZ_Jd }, - /* 76 /dr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JBE_Jd }, - /* 76 /dm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JBE_Jd }, - /* 77 /dr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNBE_Jd }, - /* 77 /dm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNBE_Jd }, - /* 78 /dr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JS_Jd }, - /* 78 /dm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JS_Jd }, - /* 79 /dr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNS_Jd }, - /* 79 /dm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNS_Jd }, - /* 7A /dr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JP_Jd }, - /* 7A /dm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JP_Jd }, - /* 7B /dr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNP_Jd }, - /* 7B /dm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNP_Jd }, - /* 7C /dr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JL_Jd }, - /* 7C /dm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JL_Jd }, - /* 7D /dr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNL_Jd }, - /* 7D /dm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNL_Jd }, - /* 7E /dr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JLE_Jd }, - /* 7E /dm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JLE_Jd }, - /* 7F /dr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNLE_Jd }, - /* 7F /dm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNLE_Jd }, - /* 80 /dr */ { BxGroup1 | BxImmediate_Ib, BX_IA_ERROR, BxOpcodeInfoG1EbIb }, - /* 80 /dm */ { BxGroup1 | BxImmediate_Ib, BX_IA_ERROR, BxOpcodeInfoG1EbIb }, - /* 81 /dr */ { BxGroup1 | BxImmediate_Id, BX_IA_ERROR, BxOpcodeInfoG1Ed }, - /* 81 /dm */ { BxGroup1 | BxImmediate_Id, BX_IA_ERROR, BxOpcodeInfoG1Ed }, - /* 82 /dr */ { BxGroup1 | BxImmediate_Ib, BX_IA_ERROR, BxOpcodeInfoG1EbIb }, - /* 82 /dm */ { BxGroup1 | BxImmediate_Ib, BX_IA_ERROR, BxOpcodeInfoG1EbIb }, - /* 83 /dr */ { BxGroup1 | BxImmediate_Ib_SE, BX_IA_ERROR, BxOpcodeInfoG1Ed }, - /* 83 /dm */ { BxGroup1 | BxImmediate_Ib_SE, BX_IA_ERROR, BxOpcodeInfoG1Ed }, - /* 84 /dr */ { 0, BX_IA_TEST_EbGb }, - /* 84 /dm */ { 0, BX_IA_TEST_EbGb }, - /* 85 /dr */ { 0, BX_IA_TEST_EdGd }, - /* 85 /dm */ { 0, BX_IA_TEST_EdGd }, - /* 86 /dr */ { 0, BX_IA_XCHG_EbGb }, - /* 86 /dm */ { BxLockable, BX_IA_XCHG_EbGb }, - /* 87 /dr */ { 0, BX_IA_XCHG_EdGd }, - /* 87 /dm */ { BxLockable, BX_IA_XCHG_EdGd }, - /* 88 /dr */ { BxArithDstRM, BX_IA_MOV_GbEbR }, - /* 88 /dm */ { 0, BX_IA_MOV_EbGbM }, - /* 89 /dr */ { BxArithDstRM, BX_IA_MOV_GdEdR }, - /* 89 /dm */ { 0, BX_IA_MOV32_EdGdM }, - /* 8A /dr */ { 0, BX_IA_MOV_GbEbR }, - /* 8A /dm */ { 0, BX_IA_MOV_GbEbM }, - /* 8B /dr */ { 0, BX_IA_MOV_GdEdR }, - /* 8B /dm */ { 0, BX_IA_MOV32_GdEdM }, - /* 8C /dr */ { 0, BX_IA_MOV_EwSwR }, - /* 8C /dm */ { 0, BX_IA_MOV_EwSwM }, - /* 8D /dr */ { 0, BX_IA_ERROR }, // LEA - /* 8D /dm */ { 0, BX_IA_LEA_GdM }, - /* 8E /dr */ { 0, BX_IA_MOV_SwEw }, - /* 8E /dm */ { 0, BX_IA_MOV_SwEw }, - /* 8F /dr */ { BxGroup1A, BX_IA_ERROR, BxOpcodeInfoG1AEd }, - /* 8F /dm */ { BxGroup1A, BX_IA_ERROR, BxOpcodeInfoG1AEd }, - /* 90 /dr */ { BxPrefixSSE, BX_IA_NOP, BxOpcodeGroupSSE_PAUSE }, - /* 90 /dm */ { BxPrefixSSE, BX_IA_NOP, BxOpcodeGroupSSE_PAUSE }, - /* 91 /dr */ { 0, BX_IA_XCHG_ERXEAX }, - /* 91 /dm */ { 0, BX_IA_XCHG_ERXEAX }, - /* 92 /dr */ { 0, BX_IA_XCHG_ERXEAX }, - /* 92 /dm */ { 0, BX_IA_XCHG_ERXEAX }, - /* 93 /dr */ { 0, BX_IA_XCHG_ERXEAX }, - /* 93 /dm */ { 0, BX_IA_XCHG_ERXEAX }, - /* 94 /dr */ { 0, BX_IA_XCHG_ERXEAX }, - /* 94 /dm */ { 0, BX_IA_XCHG_ERXEAX }, - /* 95 /dr */ { 0, BX_IA_XCHG_ERXEAX }, - /* 95 /dm */ { 0, BX_IA_XCHG_ERXEAX }, - /* 96 /dr */ { 0, BX_IA_XCHG_ERXEAX }, - /* 96 /dm */ { 0, BX_IA_XCHG_ERXEAX }, - /* 97 /dr */ { 0, BX_IA_XCHG_ERXEAX }, - /* 97 /dm */ { 0, BX_IA_XCHG_ERXEAX }, - /* 98 /dr */ { 0, BX_IA_CWDE }, - /* 98 /dm */ { 0, BX_IA_CWDE }, - /* 99 /dr */ { 0, BX_IA_CDQ }, - /* 99 /dm */ { 0, BX_IA_CDQ }, - /* 9A /dr */ { BxImmediate_Id | BxImmediate_Iw2 | BxTraceEnd, BX_IA_CALL32_Ap }, - /* 9A /dm */ { BxImmediate_Id | BxImmediate_Iw2 | BxTraceEnd, BX_IA_CALL32_Ap }, - /* 9B /dr */ { 0, BX_IA_FWAIT }, - /* 9B /dm */ { 0, BX_IA_FWAIT }, - /* 9C /dr */ { 0, BX_IA_PUSHF_Fd }, - /* 9C /dm */ { 0, BX_IA_PUSHF_Fd }, - /* 9D /dr */ { 0, BX_IA_POPF_Fd }, - /* 9D /dm */ { 0, BX_IA_POPF_Fd }, - /* 9E /dr */ { 0, BX_IA_SAHF }, - /* 9E /dm */ { 0, BX_IA_SAHF }, - /* 9F /dr */ { 0, BX_IA_LAHF }, - /* 9F /dm */ { 0, BX_IA_LAHF }, - /* A0 /dr */ { BxImmediate_O, BX_IA_MOV_ALOd }, - /* A0 /dm */ { BxImmediate_O, BX_IA_MOV_ALOd }, - /* A1 /dr */ { BxImmediate_O, BX_IA_MOV_EAXOd }, - /* A1 /dm */ { BxImmediate_O, BX_IA_MOV_EAXOd }, - /* A2 /dr */ { BxImmediate_O, BX_IA_MOV_OdAL }, - /* A2 /dm */ { BxImmediate_O, BX_IA_MOV_OdAL }, - /* A3 /dr */ { BxImmediate_O, BX_IA_MOV_OdEAX }, - /* A3 /dm */ { BxImmediate_O, BX_IA_MOV_OdEAX }, - /* A4 /dr */ { 0, BX_IA_REP_MOVSB_XbYb }, - /* A4 /dm */ { 0, BX_IA_REP_MOVSB_XbYb }, - /* A5 /dr */ { 0, BX_IA_REP_MOVSD_XdYd }, - /* A5 /dm */ { 0, BX_IA_REP_MOVSD_XdYd }, - /* A6 /dr */ { 0, BX_IA_REP_CMPSB_XbYb }, - /* A6 /dm */ { 0, BX_IA_REP_CMPSB_XbYb }, - /* A7 /dr */ { 0, BX_IA_REP_CMPSD_XdYd }, - /* A7 /dm */ { 0, BX_IA_REP_CMPSD_XdYd }, - /* A8 /dr */ { BxImmediate_Ib, BX_IA_TEST_ALIb }, - /* A8 /dm */ { BxImmediate_Ib, BX_IA_TEST_ALIb }, - /* A9 /dr */ { BxImmediate_Id, BX_IA_TEST_EAXId }, - /* A9 /dm */ { BxImmediate_Id, BX_IA_TEST_EAXId }, - /* AA /dr */ { 0, BX_IA_REP_STOSB_YbAL }, - /* AA /dm */ { 0, BX_IA_REP_STOSB_YbAL }, - /* AB /dr */ { 0, BX_IA_REP_STOSD_YdEAX }, - /* AB /dm */ { 0, BX_IA_REP_STOSD_YdEAX }, - /* AC /dr */ { 0, BX_IA_REP_LODSB_ALXb }, - /* AC /dm */ { 0, BX_IA_REP_LODSB_ALXb }, - /* AD /dr */ { 0, BX_IA_REP_LODSD_EAXXd }, - /* AD /dm */ { 0, BX_IA_REP_LODSD_EAXXd }, - /* AE /dr */ { 0, BX_IA_REP_SCASB_ALXb }, - /* AE /dm */ { 0, BX_IA_REP_SCASB_ALXb }, - /* AF /dr */ { 0, BX_IA_REP_SCASD_EAXXd }, - /* AF /dm */ { 0, BX_IA_REP_SCASD_EAXXd }, - /* B0 /dr */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, - /* B0 /dm */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, - /* B1 /dr */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, - /* B1 /dm */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, - /* B2 /dr */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, - /* B2 /dm */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, - /* B3 /dr */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, - /* B3 /dm */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, - /* B4 /dr */ { BxImmediate_Ib, BX_IA_MOV_RHIb }, - /* B4 /dm */ { BxImmediate_Ib, BX_IA_MOV_RHIb }, - /* B5 /dr */ { BxImmediate_Ib, BX_IA_MOV_RHIb }, - /* B5 /dm */ { BxImmediate_Ib, BX_IA_MOV_RHIb }, - /* B6 /dr */ { BxImmediate_Ib, BX_IA_MOV_RHIb }, - /* B6 /dm */ { BxImmediate_Ib, BX_IA_MOV_RHIb }, - /* B7 /dr */ { BxImmediate_Ib, BX_IA_MOV_RHIb }, - /* B7 /dm */ { BxImmediate_Ib, BX_IA_MOV_RHIb }, - /* B8 /dr */ { BxImmediate_Id, BX_IA_MOV_ERXId }, - /* B8 /dm */ { BxImmediate_Id, BX_IA_MOV_ERXId }, - /* B9 /dr */ { BxImmediate_Id, BX_IA_MOV_ERXId }, - /* B9 /dm */ { BxImmediate_Id, BX_IA_MOV_ERXId }, - /* BA /dr */ { BxImmediate_Id, BX_IA_MOV_ERXId }, - /* BA /dm */ { BxImmediate_Id, BX_IA_MOV_ERXId }, - /* BB /dr */ { BxImmediate_Id, BX_IA_MOV_ERXId }, - /* BB /dm */ { BxImmediate_Id, BX_IA_MOV_ERXId }, - /* BC /dr */ { BxImmediate_Id, BX_IA_MOV_ERXId }, - /* BC /dm */ { BxImmediate_Id, BX_IA_MOV_ERXId }, - /* BD /dr */ { BxImmediate_Id, BX_IA_MOV_ERXId }, - /* BD /dm */ { BxImmediate_Id, BX_IA_MOV_ERXId }, - /* BE /dr */ { BxImmediate_Id, BX_IA_MOV_ERXId }, - /* BE /dm */ { BxImmediate_Id, BX_IA_MOV_ERXId }, - /* BF /dr */ { BxImmediate_Id, BX_IA_MOV_ERXId }, - /* BF /dm */ { BxImmediate_Id, BX_IA_MOV_ERXId }, - /* C0 /dr */ { BxGroup2 | BxImmediate_Ib, BX_IA_ERROR, BxOpcodeInfoG2Eb }, - /* C0 /dm */ { BxGroup2 | BxImmediate_Ib, BX_IA_ERROR, BxOpcodeInfoG2Eb }, - /* C1 /dr */ { BxGroup2 | BxImmediate_Ib, BX_IA_ERROR, BxOpcodeInfoG2Ed }, - /* C1 /dm */ { BxGroup2 | BxImmediate_Ib, BX_IA_ERROR, BxOpcodeInfoG2Ed }, - /* C2 /dr */ { BxImmediate_Iw | BxTraceEnd, BX_IA_RETnear32_Iw }, - /* C2 /dm */ { BxImmediate_Iw | BxTraceEnd, BX_IA_RETnear32_Iw }, - /* C3 /dr */ { BxTraceEnd, BX_IA_RETnear32 }, - /* C3 /dm */ { BxTraceEnd, BX_IA_RETnear32 }, - /* C4 /dr */ { 0, BX_IA_ERROR }, // LES - /* C4 /dm */ { 0, BX_IA_LES_GdMp }, - /* C5 /dr */ { 0, BX_IA_ERROR }, // LDS - /* C5 /dm */ { 0, BX_IA_LDS_GdMp }, - /* C6 /dr */ { BxGroup11, BX_IA_ERROR, BxOpcodeInfoG11Eb }, - /* C6 /dm */ { BxGroup11, BX_IA_ERROR, BxOpcodeInfoG11Eb }, - /* C7 /dr */ { BxGroup11, BX_IA_ERROR, BxOpcodeInfoG11Ed }, - /* C7 /dm */ { BxGroup11, BX_IA_ERROR, BxOpcodeInfoG11Ed }, - /* C8 /dr */ { BxImmediate_Iw | BxImmediate_Ib2, BX_IA_ENTER32_IwIb }, - /* C8 /dm */ { BxImmediate_Iw | BxImmediate_Ib2, BX_IA_ENTER32_IwIb }, - /* C9 /dr */ { 0, BX_IA_LEAVE32 }, - /* C9 /dm */ { 0, BX_IA_LEAVE32 }, - /* CA /dr */ { BxImmediate_Iw | BxTraceEnd, BX_IA_RETfar32_Iw }, - /* CA /dm */ { BxImmediate_Iw | BxTraceEnd, BX_IA_RETfar32_Iw }, - /* CB /dr */ { BxTraceEnd, BX_IA_RETfar32 }, - /* CB /dm */ { BxTraceEnd, BX_IA_RETfar32 }, - /* CC /dr */ { BxTraceEnd, BX_IA_INT3 }, - /* CC /dm */ { BxTraceEnd, BX_IA_INT3 }, - /* CD /dr */ { BxImmediate_Ib | BxTraceEnd, BX_IA_INT_Ib }, - /* CD /dm */ { BxImmediate_Ib | BxTraceEnd, BX_IA_INT_Ib }, - /* CE /dr */ { BxTraceEnd, BX_IA_INTO }, - /* CE /dm */ { BxTraceEnd, BX_IA_INTO }, - /* CF /dr */ { BxTraceEnd, BX_IA_IRET32 }, - /* CF /dm */ { BxTraceEnd, BX_IA_IRET32 }, - /* D0 /dr */ { BxGroup2 | BxImmediate_I1, BX_IA_ERROR, BxOpcodeInfoG2Eb }, - /* D0 /dm */ { BxGroup2 | BxImmediate_I1, BX_IA_ERROR, BxOpcodeInfoG2Eb }, - /* D1 /dr */ { BxGroup2 | BxImmediate_I1, BX_IA_ERROR, BxOpcodeInfoG2Ed }, - /* D1 /dm */ { BxGroup2 | BxImmediate_I1, BX_IA_ERROR, BxOpcodeInfoG2Ed }, - /* D2 /dr */ { BxGroup2, BX_IA_ERROR, BxOpcodeInfoG2Eb }, - /* D2 /dm */ { BxGroup2, BX_IA_ERROR, BxOpcodeInfoG2Eb }, - /* D3 /dr */ { BxGroup2, BX_IA_ERROR, BxOpcodeInfoG2Ed }, - /* D3 /dm */ { BxGroup2, BX_IA_ERROR, BxOpcodeInfoG2Ed }, - /* D4 /dr */ { BxImmediate_Ib, BX_IA_AAM }, - /* D4 /dm */ { BxImmediate_Ib, BX_IA_AAM }, - /* D5 /dr */ { BxImmediate_Ib, BX_IA_AAD }, - /* D5 /dm */ { BxImmediate_Ib, BX_IA_AAD }, - /* D6 /dr */ { 0, BX_IA_SALC }, - /* D6 /dm */ { 0, BX_IA_SALC }, - /* D7 /dr */ { 0, BX_IA_XLAT }, - /* D7 /dm */ { 0, BX_IA_XLAT }, + // 512 entries for 32bit mode + /* 00 /d */ { BxLockable | BxArithDstRM, BX_IA_ADD_EbGb }, + /* 01 /d */ { BxLockable | BxArithDstRM, BX_IA_ADD_EdGd }, + /* 02 /d */ { 0, BX_IA_ADD_GbEb }, + /* 03 /d */ { 0, BX_IA_ADD_GdEd }, + /* 04 /d */ { BxImmediate_Ib, BX_IA_ADD_ALIb }, + /* 05 /d */ { BxImmediate_Id, BX_IA_ADD_EAXId }, + /* 06 /d */ { 0, BX_IA_PUSH32_ES }, + /* 07 /d */ { 0, BX_IA_POP32_ES }, + /* 08 /d */ { BxLockable | BxArithDstRM, BX_IA_OR_EbGb }, + /* 09 /d */ { BxLockable | BxArithDstRM, BX_IA_OR_EdGd }, + /* 0A /d */ { 0, BX_IA_OR_GbEb }, + /* 0B /d */ { 0, BX_IA_OR_GdEd }, + /* 0C /d */ { BxImmediate_Ib, BX_IA_OR_ALIb }, + /* 0D /d */ { BxImmediate_Id, BX_IA_OR_EAXId }, + /* 0E /d */ { 0, BX_IA_PUSH32_CS }, + /* 0F /d */ { 0, BX_IA_ERROR }, // 2-byte escape + /* 10 /d */ { BxLockable | BxArithDstRM, BX_IA_ADC_EbGb }, + /* 11 /d */ { BxLockable | BxArithDstRM, BX_IA_ADC_EdGd }, + /* 12 /d */ { 0, BX_IA_ADC_GbEb }, + /* 13 /d */ { 0, BX_IA_ADC_GdEd }, + /* 14 /d */ { BxImmediate_Ib, BX_IA_ADC_ALIb }, + /* 15 /d */ { BxImmediate_Id, BX_IA_ADC_EAXId }, + /* 16 /d */ { 0, BX_IA_PUSH32_SS }, + /* 17 /d */ { BxTraceEnd, BX_IA_POP32_SS }, // async_event = 1 + /* 18 /d */ { BxLockable | BxArithDstRM, BX_IA_SBB_EbGb }, + /* 19 /d */ { BxLockable | BxArithDstRM, BX_IA_SBB_EdGd }, + /* 1A /d */ { 0, BX_IA_SBB_GbEb }, + /* 1B /d */ { 0, BX_IA_SBB_GdEd }, + /* 1C /d */ { BxImmediate_Ib, BX_IA_SBB_ALIb }, + /* 1D /d */ { BxImmediate_Id, BX_IA_SBB_EAXId }, + /* 1E /d */ { 0, BX_IA_PUSH32_DS }, + /* 1F /d */ { 0, BX_IA_POP32_DS }, + /* 20 /d */ { BxLockable | BxArithDstRM, BX_IA_AND_EbGb }, + /* 21 /d */ { BxLockable | BxArithDstRM, BX_IA_AND_EdGd }, + /* 22 /d */ { 0, BX_IA_AND_GbEb }, + /* 23 /d */ { 0, BX_IA_AND_GdEd }, + /* 24 /d */ { BxImmediate_Ib, BX_IA_AND_ALIb }, + /* 25 /d */ { BxImmediate_Id, BX_IA_AND_EAXId }, + /* 26 /d */ { 0, BX_IA_ERROR }, // ES: + /* 27 /d */ { 0, BX_IA_DAA }, + /* 28 /d */ { BxLockable | BxArithDstRM, BX_IA_SUB_EbGb }, + /* 29 /d */ { BxLockable | BxArithDstRM, BX_IA_SUB_EdGd }, + /* 2A /d */ { 0, BX_IA_SUB_GbEb }, + /* 2B /d */ { 0, BX_IA_SUB_GdEd }, + /* 2C /d */ { BxImmediate_Ib, BX_IA_SUB_ALIb }, + /* 2D /d */ { BxImmediate_Id, BX_IA_SUB_EAXId }, + /* 2E /d */ { 0, BX_IA_ERROR }, // CS: + /* 2F /d */ { 0, BX_IA_DAS }, + /* 30 /d */ { BxLockable | BxArithDstRM, BX_IA_XOR_EbGb }, + /* 31 /d */ { BxLockable | BxArithDstRM, BX_IA_XOR_EdGd }, + /* 32 /d */ { 0, BX_IA_XOR_GbEb }, + /* 33 /d */ { 0, BX_IA_XOR_GdEd }, + /* 34 /d */ { BxImmediate_Ib, BX_IA_XOR_ALIb }, + /* 35 /d */ { BxImmediate_Id, BX_IA_XOR_EAXId }, + /* 36 /d */ { 0, BX_IA_ERROR }, // SS: + /* 37 /d */ { 0, BX_IA_AAA }, + /* 38 /d */ { BxArithDstRM, BX_IA_CMP_EbGb }, + /* 39 /d */ { BxArithDstRM, BX_IA_CMP_EdGd }, + /* 3A /d */ { 0, BX_IA_CMP_GbEb }, + /* 3B /d */ { 0, BX_IA_CMP_GdEd }, + /* 3C /d */ { BxImmediate_Ib, BX_IA_CMP_ALIb }, + /* 3D /d */ { BxImmediate_Id, BX_IA_CMP_EAXId }, + /* 3E /d */ { 0, BX_IA_ERROR }, // DS: + /* 3F /d */ { 0, BX_IA_AAS }, + /* 40 /d */ { 0, BX_IA_INC_ERX }, + /* 41 /d */ { 0, BX_IA_INC_ERX }, + /* 42 /d */ { 0, BX_IA_INC_ERX }, + /* 43 /d */ { 0, BX_IA_INC_ERX }, + /* 44 /d */ { 0, BX_IA_INC_ERX }, + /* 45 /d */ { 0, BX_IA_INC_ERX }, + /* 46 /d */ { 0, BX_IA_INC_ERX }, + /* 47 /d */ { 0, BX_IA_INC_ERX }, + /* 48 /d */ { 0, BX_IA_DEC_ERX }, + /* 49 /d */ { 0, BX_IA_DEC_ERX }, + /* 4A /d */ { 0, BX_IA_DEC_ERX }, + /* 4B /d */ { 0, BX_IA_DEC_ERX }, + /* 4C /d */ { 0, BX_IA_DEC_ERX }, + /* 4D /d */ { 0, BX_IA_DEC_ERX }, + /* 4E /d */ { 0, BX_IA_DEC_ERX }, + /* 4F /d */ { 0, BX_IA_DEC_ERX }, + /* 50 /d */ { 0, BX_IA_PUSH_ERX }, + /* 51 /d */ { 0, BX_IA_PUSH_ERX }, + /* 52 /d */ { 0, BX_IA_PUSH_ERX }, + /* 53 /d */ { 0, BX_IA_PUSH_ERX }, + /* 54 /d */ { 0, BX_IA_PUSH_ERX }, + /* 55 /d */ { 0, BX_IA_PUSH_ERX }, + /* 56 /d */ { 0, BX_IA_PUSH_ERX }, + /* 57 /d */ { 0, BX_IA_PUSH_ERX }, + /* 58 /d */ { 0, BX_IA_POP_ERX }, + /* 59 /d */ { 0, BX_IA_POP_ERX }, + /* 5A /d */ { 0, BX_IA_POP_ERX }, + /* 5B /d */ { 0, BX_IA_POP_ERX }, + /* 5C /d */ { 0, BX_IA_POP_ERX }, + /* 5D /d */ { 0, BX_IA_POP_ERX }, + /* 5E /d */ { 0, BX_IA_POP_ERX }, + /* 5F /d */ { 0, BX_IA_POP_ERX }, + /* 60 /d */ { 0, BX_IA_PUSHAD32 }, + /* 61 /d */ { 0, BX_IA_POPAD32 }, + /* 62 /d */ { 0, BX_IA_BOUND_GdMa }, + /* 63 /d */ { 0, BX_IA_ARPL_EwGw }, + /* 64 /d */ { 0, BX_IA_ERROR }, // FS: + /* 65 /d */ { 0, BX_IA_ERROR }, // GS: + /* 66 /d */ { 0, BX_IA_ERROR }, // OS: + /* 67 /d */ { 0, BX_IA_ERROR }, // AS: + /* 68 /d */ { BxImmediate_Id, BX_IA_PUSH_Id }, + /* 69 /d */ { BxImmediate_Id, BX_IA_IMUL_GdEdId }, + /* 6A /d */ { BxImmediate_Ib_SE, BX_IA_PUSH_Id }, + /* 6B /d */ { BxImmediate_Ib_SE, BX_IA_IMUL_GdEdId }, + /* 6C /d */ { 0, BX_IA_REP_INSB_YbDX }, + /* 6D /d */ { 0, BX_IA_REP_INSD_YdDX }, + /* 6E /d */ { 0, BX_IA_REP_OUTSB_DXXb }, + /* 6F /d */ { 0, BX_IA_REP_OUTSD_DXXd }, + /* 70 /d */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JO_Jd }, + /* 71 /d */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNO_Jd }, + /* 72 /d */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JB_Jd }, + /* 73 /d */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNB_Jd }, + /* 74 /d */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JZ_Jd }, + /* 75 /d */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNZ_Jd }, + /* 76 /d */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JBE_Jd }, + /* 77 /d */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNBE_Jd }, + /* 78 /d */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JS_Jd }, + /* 79 /d */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNS_Jd }, + /* 7A /d */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JP_Jd }, + /* 7B /d */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNP_Jd }, + /* 7C /d */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JL_Jd }, + /* 7D /d */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNL_Jd }, + /* 7E /d */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JLE_Jd }, + /* 7F /d */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNLE_Jd }, + /* 80 /d */ { BxGroup1 | BxImmediate_Ib, BX_IA_ERROR, BxOpcodeInfoG1EbIb }, + /* 81 /d */ { BxGroup1 | BxImmediate_Id, BX_IA_ERROR, BxOpcodeInfoG1Ed }, + /* 82 /d */ { BxGroup1 | BxImmediate_Ib, BX_IA_ERROR, BxOpcodeInfoG1EbIb }, + /* 83 /d */ { BxGroup1 | BxImmediate_Ib_SE, BX_IA_ERROR, BxOpcodeInfoG1Ed }, + /* 84 /d */ { 0, BX_IA_TEST_EbGb }, + /* 85 /d */ { 0, BX_IA_TEST_EdGd }, + /* 86 /d */ { BxLockable, BX_IA_XCHG_EbGb }, + /* 87 /d */ { BxLockable, BX_IA_XCHG_EdGd }, + /* 88 /d */ { BxArithDstRM, BX_IA_MOV_EbGb }, + /* 89 /d */ { BxArithDstRM, BX_IA_MOV32_EdGd }, + /* 8A /d */ { 0, BX_IA_MOV_GbEb }, + /* 8B /d */ { 0, BX_IA_MOV32_GdEd }, + /* 8C /d */ { 0, BX_IA_MOV_EwSw }, + /* 8D /d */ { 0, BX_IA_LEA_GdM }, + /* 8E /d */ { 0, BX_IA_MOV_SwEw }, + /* 8F /d */ { BxGroup1A, BX_IA_ERROR, BxOpcodeInfoG1AEd }, + /* 90 /d */ { BxPrefixSSE, BX_IA_NOP, BxOpcodeGroupSSE_PAUSE }, + /* 91 /d */ { 0, BX_IA_XCHG_ERXEAX }, + /* 92 /d */ { 0, BX_IA_XCHG_ERXEAX }, + /* 93 /d */ { 0, BX_IA_XCHG_ERXEAX }, + /* 94 /d */ { 0, BX_IA_XCHG_ERXEAX }, + /* 95 /d */ { 0, BX_IA_XCHG_ERXEAX }, + /* 96 /d */ { 0, BX_IA_XCHG_ERXEAX }, + /* 97 /d */ { 0, BX_IA_XCHG_ERXEAX }, + /* 98 /d */ { 0, BX_IA_CWDE }, + /* 99 /d */ { 0, BX_IA_CDQ }, + /* 9A /d */ { BxImmediate_Id | BxImmediate_Iw2 | BxTraceEnd, BX_IA_CALL32_Ap }, + /* 9B /d */ { 0, BX_IA_FWAIT }, + /* 9C /d */ { 0, BX_IA_PUSHF_Fd }, + /* 9D /d */ { 0, BX_IA_POPF_Fd }, + /* 9E /d */ { 0, BX_IA_SAHF }, + /* 9F /d */ { 0, BX_IA_LAHF }, + /* A0 /d */ { BxImmediate_O, BX_IA_MOV_ALOd }, + /* A1 /d */ { BxImmediate_O, BX_IA_MOV_EAXOd }, + /* A2 /d */ { BxImmediate_O, BX_IA_MOV_OdAL }, + /* A3 /d */ { BxImmediate_O, BX_IA_MOV_OdEAX }, + /* A4 /d */ { 0, BX_IA_REP_MOVSB_XbYb }, + /* A5 /d */ { 0, BX_IA_REP_MOVSD_XdYd }, + /* A6 /d */ { 0, BX_IA_REP_CMPSB_XbYb }, + /* A7 /d */ { 0, BX_IA_REP_CMPSD_XdYd }, + /* A8 /d */ { BxImmediate_Ib, BX_IA_TEST_ALIb }, + /* A9 /d */ { BxImmediate_Id, BX_IA_TEST_EAXId }, + /* AA /d */ { 0, BX_IA_REP_STOSB_YbAL }, + /* AB /d */ { 0, BX_IA_REP_STOSD_YdEAX }, + /* AC /d */ { 0, BX_IA_REP_LODSB_ALXb }, + /* AD /d */ { 0, BX_IA_REP_LODSD_EAXXd }, + /* AE /d */ { 0, BX_IA_REP_SCASB_ALXb }, + /* AF /d */ { 0, BX_IA_REP_SCASD_EAXXd }, + /* B0 /d */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, + /* B1 /d */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, + /* B2 /d */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, + /* B3 /d */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, + /* B4 /d */ { BxImmediate_Ib, BX_IA_MOV_RHIb }, + /* B5 /d */ { BxImmediate_Ib, BX_IA_MOV_RHIb }, + /* B6 /d */ { BxImmediate_Ib, BX_IA_MOV_RHIb }, + /* B7 /d */ { BxImmediate_Ib, BX_IA_MOV_RHIb }, + /* B8 /d */ { BxImmediate_Id, BX_IA_MOV_ERXId }, + /* B9 /d */ { BxImmediate_Id, BX_IA_MOV_ERXId }, + /* BA /d */ { BxImmediate_Id, BX_IA_MOV_ERXId }, + /* BB /d */ { BxImmediate_Id, BX_IA_MOV_ERXId }, + /* BC /d */ { BxImmediate_Id, BX_IA_MOV_ERXId }, + /* BD /d */ { BxImmediate_Id, BX_IA_MOV_ERXId }, + /* BE /d */ { BxImmediate_Id, BX_IA_MOV_ERXId }, + /* BF /d */ { BxImmediate_Id, BX_IA_MOV_ERXId }, + /* C0 /d */ { BxGroup2 | BxImmediate_Ib, BX_IA_ERROR, BxOpcodeInfoG2Eb }, + /* C1 /d */ { BxGroup2 | BxImmediate_Ib, BX_IA_ERROR, BxOpcodeInfoG2Ed }, + /* C2 /d */ { BxImmediate_Iw | BxTraceEnd, BX_IA_RETnear32_Iw }, + /* C3 /d */ { BxTraceEnd, BX_IA_RETnear32 }, + /* C4 /d */ { 0, BX_IA_LES_GdMp }, + /* C5 /d */ { 0, BX_IA_LDS_GdMp }, + /* C6 /d */ { BxGroup11, BX_IA_ERROR, BxOpcodeInfoG11Eb }, + /* C7 /d */ { BxGroup11, BX_IA_ERROR, BxOpcodeInfoG11Ed }, + /* C8 /d */ { BxImmediate_Iw | BxImmediate_Ib2, BX_IA_ENTER32_IwIb }, + /* C9 /d */ { 0, BX_IA_LEAVE32 }, + /* CA /d */ { BxImmediate_Iw | BxTraceEnd, BX_IA_RETfar32_Iw }, + /* CB /d */ { BxTraceEnd, BX_IA_RETfar32 }, + /* CC /d */ { BxTraceEnd, BX_IA_INT3 }, + /* CD /d */ { BxImmediate_Ib | BxTraceEnd, BX_IA_INT_Ib }, + /* CE /d */ { BxTraceEnd, BX_IA_INTO }, + /* CF /d */ { BxTraceEnd, BX_IA_IRET32 }, + /* D0 /d */ { BxGroup2 | BxImmediate_I1, BX_IA_ERROR, BxOpcodeInfoG2Eb }, + /* D1 /d */ { BxGroup2 | BxImmediate_I1, BX_IA_ERROR, BxOpcodeInfoG2Ed }, + /* D2 /d */ { BxGroup2, BX_IA_ERROR, BxOpcodeInfoG2Eb }, + /* D3 /d */ { BxGroup2, BX_IA_ERROR, BxOpcodeInfoG2Ed }, + /* D4 /d */ { BxImmediate_Ib, BX_IA_AAM }, + /* D5 /d */ { BxImmediate_Ib, BX_IA_AAD }, + /* D6 /d */ { 0, BX_IA_SALC }, + /* D7 /d */ { 0, BX_IA_XLAT }, #if BX_SUPPORT_FPU - /* D8 /dr */ { BxGroupN, BX_IA_ERROR, BxOpcodeInfo_FloatingPointD8 }, - /* D8 /dm */ { BxGroupFP, BX_IA_ERROR, BxOpcodeInfo_FPGroupD8 }, - /* D9 /dr */ { BxFPEscape, BX_IA_ERROR, BxOpcodeInfo_FloatingPointD9 }, - /* D9 /dm */ { BxGroupFP, BX_IA_ERROR, BxOpcodeInfo_FPGroupD9 }, - /* DA /dr */ { BxFPEscape, BX_IA_ERROR, BxOpcodeInfo_FloatingPointDA }, - /* DA /dm */ { BxGroupFP, BX_IA_ERROR, BxOpcodeInfo_FPGroupDA }, - /* DB /dr */ { BxFPEscape, BX_IA_ERROR, BxOpcodeInfo_FloatingPointDB }, - /* DB /dm */ { BxGroupFP, BX_IA_ERROR, BxOpcodeInfo_FPGroupDB }, - /* DC /dr */ { BxGroupN, BX_IA_ERROR, BxOpcodeInfo_FloatingPointDC }, - /* DC /dm */ { BxGroupFP, BX_IA_ERROR, BxOpcodeInfo_FPGroupDC }, - /* DD /dr */ { BxGroupN, BX_IA_ERROR, BxOpcodeInfo_FloatingPointDD }, - /* DD /dm */ { BxGroupFP, BX_IA_ERROR, BxOpcodeInfo_FPGroupDD }, - /* DE /dr */ { BxFPEscape, BX_IA_ERROR, BxOpcodeInfo_FloatingPointDE }, - /* DE /dm */ { BxGroupFP, BX_IA_ERROR, BxOpcodeInfo_FPGroupDE }, - /* DF /dr */ { BxFPEscape, BX_IA_ERROR, BxOpcodeInfo_FloatingPointDF }, - /* DF /dm */ { BxGroupFP, BX_IA_ERROR, BxOpcodeInfo_FPGroupDF }, + /* D8 /d */ { BxGroupFP, BX_IA_ERROR, BxOpcodeInfo_FPGroupD8 }, + /* D9 /d */ { BxFPEscape, BX_IA_ERROR, BxOpcodeInfo_FloatingPointD9 }, + /* DA /d */ { BxFPEscape, BX_IA_ERROR, BxOpcodeInfo_FloatingPointDA }, + /* DB /d */ { BxFPEscape, BX_IA_ERROR, BxOpcodeInfo_FloatingPointDB }, + /* DC /d */ { BxGroupFP, BX_IA_ERROR, BxOpcodeInfo_FPGroupDC }, + /* DD /d */ { BxGroupFP, BX_IA_ERROR, BxOpcodeInfo_FPGroupDD }, + /* DE /d */ { BxFPEscape, BX_IA_ERROR, BxOpcodeInfo_FloatingPointDE }, + /* DF /d */ { BxFPEscape, BX_IA_ERROR, BxOpcodeInfo_FloatingPointDF }, #else - /* D8 /dr */ { 0, BX_IA_FPU_ESC }, - /* D8 /dm */ { 0, BX_IA_FPU_ESC }, - /* D9 /dr */ { 0, BX_IA_FPU_ESC }, - /* D9 /dm */ { 0, BX_IA_FPU_ESC }, - /* DA /dr */ { 0, BX_IA_FPU_ESC }, - /* DA /dm */ { 0, BX_IA_FPU_ESC }, - /* DB /dr */ { 0, BX_IA_FPU_ESC }, - /* DB /dm */ { 0, BX_IA_FPU_ESC }, - /* DC /dr */ { 0, BX_IA_FPU_ESC }, - /* DC /dm */ { 0, BX_IA_FPU_ESC }, - /* DD /dr */ { 0, BX_IA_FPU_ESC }, - /* DD /dm */ { 0, BX_IA_FPU_ESC }, - /* DE /dr */ { 0, BX_IA_FPU_ESC }, - /* DE /dm */ { 0, BX_IA_FPU_ESC }, - /* DF /dr */ { 0, BX_IA_FPU_ESC }, - /* DF /dm */ { 0, BX_IA_FPU_ESC }, + /* D8 /d */ { 0, BX_IA_FPU_ESC }, + /* D9 /d */ { 0, BX_IA_FPU_ESC }, + /* DA /d */ { 0, BX_IA_FPU_ESC }, + /* DB /d */ { 0, BX_IA_FPU_ESC }, + /* DC /d */ { 0, BX_IA_FPU_ESC }, + /* DD /d */ { 0, BX_IA_FPU_ESC }, + /* DE /d */ { 0, BX_IA_FPU_ESC }, + /* DF /d */ { 0, BX_IA_FPU_ESC }, #endif - /* E0 /dr */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_LOOPNE32_Jb }, - /* E0 /dm */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_LOOPNE32_Jb }, - /* E1 /dr */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_LOOPE32_Jb }, - /* E1 /dm */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_LOOPE32_Jb }, - /* E2 /dr */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_LOOP32_Jb }, - /* E2 /dm */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_LOOP32_Jb }, - /* E3 /dr */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_JECXZ_Jb }, - /* E3 /dm */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_JECXZ_Jb }, - /* E4 /dr */ { BxImmediate_Ib, BX_IA_IN_ALIb }, - /* E4 /dm */ { BxImmediate_Ib, BX_IA_IN_ALIb }, - /* E5 /dr */ { BxImmediate_Ib, BX_IA_IN_EAXIb }, - /* E5 /dm */ { BxImmediate_Ib, BX_IA_IN_EAXIb }, - /* E6 /dr */ { BxImmediate_Ib, BX_IA_OUT_IbAL }, - /* E6 /dm */ { BxImmediate_Ib, BX_IA_OUT_IbAL }, - /* E7 /dr */ { BxImmediate_Ib, BX_IA_OUT_IbEAX }, - /* E7 /dm */ { BxImmediate_Ib, BX_IA_OUT_IbEAX }, - /* E8 /dr */ { BxImmediate_BrOff32 | BxTraceEnd, BX_IA_CALL_Jd }, - /* E8 /dm */ { BxImmediate_BrOff32 | BxTraceEnd, BX_IA_CALL_Jd }, - /* E9 /dr */ { BxImmediate_BrOff32 | BxTraceEnd, BX_IA_JMP_Jd }, - /* E9 /dm */ { BxImmediate_BrOff32 | BxTraceEnd, BX_IA_JMP_Jd }, - /* EA /dr */ { BxImmediate_Id | BxImmediate_Iw2 | BxTraceEnd, BX_IA_JMP_Ap }, - /* EA /dm */ { BxImmediate_Id | BxImmediate_Iw2 | BxTraceEnd, BX_IA_JMP_Ap }, - /* EB /dr */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_JMP_Jd }, - /* EB /dm */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_JMP_Jd }, - /* EC /dr */ { 0, BX_IA_IN_ALDX }, - /* EC /dm */ { 0, BX_IA_IN_ALDX }, - /* ED /dr */ { 0, BX_IA_IN_EAXDX }, - /* ED /dm */ { 0, BX_IA_IN_EAXDX }, - /* EE /dr */ { 0, BX_IA_OUT_DXAL }, - /* EE /dm */ { 0, BX_IA_OUT_DXAL }, - /* EF /dr */ { 0, BX_IA_OUT_DXEAX }, - /* EF /dm */ { 0, BX_IA_OUT_DXEAX }, - /* F0 /dr */ { 0, BX_IA_ERROR }, // LOCK: - /* F0 /dm */ { 0, BX_IA_ERROR }, // LOCK: - /* F1 /dr */ { BxTraceEnd, BX_IA_INT1 }, - /* F1 /dm */ { BxTraceEnd, BX_IA_INT1 }, - /* F2 /dr */ { 0, BX_IA_ERROR }, // REPNE/REPNZ - /* F2 /dm */ { 0, BX_IA_ERROR }, // REPNE/REPNZ - /* F3 /dr */ { 0, BX_IA_ERROR }, // REP,REPE/REPZ - /* F3 /dm */ { 0, BX_IA_ERROR }, // REP,REPE/REPZ - /* F4 /dr */ { BxTraceEnd, BX_IA_HLT }, - /* F4 /dm */ { BxTraceEnd, BX_IA_HLT }, - /* F5 /dr */ { 0, BX_IA_CMC }, - /* F5 /dm */ { 0, BX_IA_CMC }, - /* F6 /dr */ { BxGroup3, BX_IA_ERROR, BxOpcodeInfoG3Eb }, - /* F6 /dm */ { BxGroup3, BX_IA_ERROR, BxOpcodeInfoG3Eb }, - /* F7 /dr */ { BxGroup3, BX_IA_ERROR, BxOpcodeInfoG3Ed }, - /* F7 /dm */ { BxGroup3, BX_IA_ERROR, BxOpcodeInfoG3Ed }, - /* F8 /dr */ { 0, BX_IA_CLC }, - /* F8 /dm */ { 0, BX_IA_CLC }, - /* F9 /dr */ { 0, BX_IA_STC }, - /* F9 /dm */ { 0, BX_IA_STC }, - /* FA /dr */ { 0, BX_IA_CLI }, - /* FA /dm */ { 0, BX_IA_CLI }, - /* FB /dr */ { 0, BX_IA_STI }, - /* FB /dm */ { 0, BX_IA_STI }, - /* FC /dr */ { 0, BX_IA_CLD }, - /* FC /dm */ { 0, BX_IA_CLD }, - /* FD /dr */ { 0, BX_IA_STD }, - /* FD /dm */ { 0, BX_IA_STD }, - /* FE /dr */ { BxGroup4, BX_IA_ERROR, BxOpcodeInfoG4 }, - /* FE /dm */ { BxGroup4, BX_IA_ERROR, BxOpcodeInfoG4 }, - /* FF /dr */ { BxGroup5, BX_IA_ERROR, BxOpcodeInfoG5d }, - /* FF /dm */ { BxGroup5, BX_IA_ERROR, BxOpcodeInfoG5d }, + /* E0 /d */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_LOOPNE32_Jb }, + /* E1 /d */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_LOOPE32_Jb }, + /* E2 /d */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_LOOP32_Jb }, + /* E3 /d */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_JECXZ_Jb }, + /* E4 /d */ { BxImmediate_Ib, BX_IA_IN_ALIb }, + /* E5 /d */ { BxImmediate_Ib, BX_IA_IN_EAXIb }, + /* E6 /d */ { BxImmediate_Ib, BX_IA_OUT_IbAL }, + /* E7 /d */ { BxImmediate_Ib, BX_IA_OUT_IbEAX }, + /* E8 /d */ { BxImmediate_BrOff32 | BxTraceEnd, BX_IA_CALL_Jd }, + /* E9 /d */ { BxImmediate_BrOff32 | BxTraceEnd, BX_IA_JMP_Jd }, + /* EA /d */ { BxImmediate_Id | BxImmediate_Iw2 | BxTraceEnd, BX_IA_JMP_Ap }, + /* EB /d */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_JMP_Jd }, + /* EC /d */ { 0, BX_IA_IN_ALDX }, + /* ED /d */ { 0, BX_IA_IN_EAXDX }, + /* EE /d */ { 0, BX_IA_OUT_DXAL }, + /* EF /d */ { 0, BX_IA_OUT_DXEAX }, + /* F0 /d */ { 0, BX_IA_ERROR }, // LOCK: + /* F1 /d */ { BxTraceEnd, BX_IA_INT1 }, + /* F2 /d */ { 0, BX_IA_ERROR }, // REPNE/REPNZ + /* F3 /d */ { 0, BX_IA_ERROR }, // REP,REPE/REPZ + /* F4 /d */ { BxTraceEnd, BX_IA_HLT }, + /* F5 /d */ { 0, BX_IA_CMC }, + /* F6 /d */ { BxGroup3, BX_IA_ERROR, BxOpcodeInfoG3Eb }, + /* F7 /d */ { BxGroup3, BX_IA_ERROR, BxOpcodeInfoG3Ed }, + /* F8 /d */ { 0, BX_IA_CLC }, + /* F9 /d */ { 0, BX_IA_STC }, + /* FA /d */ { 0, BX_IA_CLI }, + /* FB /d */ { 0, BX_IA_STI }, + /* FC /d */ { 0, BX_IA_CLD }, + /* FD /d */ { 0, BX_IA_STD }, + /* FE /d */ { BxGroup4, BX_IA_ERROR, BxOpcodeInfoG4 }, + /* FF /d */ { BxGroup5, BX_IA_ERROR, BxOpcodeInfoG5d }, - /* 0F 00 /dr */ { BxGroup6, BX_IA_ERROR, BxOpcodeInfoG6 }, - /* 0F 00 /dm */ { BxGroup6, BX_IA_ERROR, BxOpcodeInfoG6 }, - /* 0F 01 /dr */ { BxFPEscape, BX_IA_ERROR, BxOpcodeInfoG7R }, - /* 0F 01 /dm */ { BxGroup7, BX_IA_ERROR, BxOpcodeInfoG7M }, - /* 0F 02 /dr */ { 0, BX_IA_LAR_GvEw }, - /* 0F 02 /dm */ { 0, BX_IA_LAR_GvEw }, - /* 0F 03 /dr */ { 0, BX_IA_LSL_GvEw }, - /* 0F 03 /dm */ { 0, BX_IA_LSL_GvEw }, - /* 0F 04 /dr */ { 0, BX_IA_ERROR }, - /* 0F 04 /dm */ { 0, BX_IA_ERROR }, + /* 0F 00 /d */ { BxGroup6, BX_IA_ERROR, BxOpcodeInfoG6 }, + /* 0F 01 /d */ { BxGroup7, BX_IA_ERROR, BxOpcodeInfoG7 }, + /* 0F 02 /d */ { 0, BX_IA_LAR_GvEw }, + /* 0F 03 /d */ { 0, BX_IA_LSL_GvEw }, + /* 0F 04 /d */ { 0, BX_IA_ERROR }, #if BX_SUPPORT_X86_64 - /* 0F 05 /dr */ { BxTraceEnd, BX_IA_SYSCALL }, - /* 0F 05 /dm */ { BxTraceEnd, BX_IA_SYSCALL }, + /* 0F 05 /d */ { BxTraceEnd, BX_IA_SYSCALL }, #else - /* 0F 05 /dr */ { 0, BX_IA_ERROR }, - /* 0F 05 /dm */ { 0, BX_IA_ERROR }, + /* 0F 05 /d */ { 0, BX_IA_ERROR }, #endif - /* 0F 06 /dr */ { 0, BX_IA_CLTS }, - /* 0F 06 /dm */ { 0, BX_IA_CLTS }, + /* 0F 06 /d */ { 0, BX_IA_CLTS }, #if BX_SUPPORT_X86_64 - /* 0F 07 /dr */ { BxTraceEnd, BX_IA_SYSRET }, - /* 0F 07 /dm */ { BxTraceEnd, BX_IA_SYSRET }, + /* 0F 07 /d */ { BxTraceEnd, BX_IA_SYSRET }, #else - /* 0F 07 /dr */ { 0, BX_IA_ERROR }, - /* 0F 07 /dm */ { 0, BX_IA_ERROR }, + /* 0F 07 /d */ { 0, BX_IA_ERROR }, #endif - /* 0F 08 /dr */ { BxTraceEnd, BX_IA_INVD }, - /* 0F 08 /dm */ { BxTraceEnd, BX_IA_INVD }, - /* 0F 09 /dr */ { BxTraceEnd, BX_IA_WBINVD }, - /* 0F 09 /dm */ { BxTraceEnd, BX_IA_WBINVD }, - /* 0F 0A /dr */ { 0, BX_IA_ERROR }, - /* 0F 0A /dm */ { 0, BX_IA_ERROR }, - /* 0F 0B /dr */ { BxTraceEnd, BX_IA_UD2A }, - /* 0F 0B /dm */ { BxTraceEnd, BX_IA_UD2A }, - /* 0F 0C /dr */ { 0, BX_IA_ERROR }, - /* 0F 0C /dm */ { 0, BX_IA_ERROR }, - /* 0F 0D /dr */ { 0, BX_IA_PREFETCHW }, // 3DNow! PREFETCHW on AMD, NOP on Intel - /* 0F 0D /dm */ { 0, BX_IA_PREFETCHW }, // 3DNow! PREFETCHW on AMD, NOP on Intel - /* 0F 0E /dr */ { 0, BX_IA_FEMMS }, // 3DNow! FEMMS - /* 0F 0E /dm */ { 0, BX_IA_FEMMS }, // 3DNow! FEMMS - /* 0F 0F /dr */ { BxImmediate_Ib, BX_IA_ERROR }, // 3DNow! Opcode Table - /* 0F 0F /dm */ { BxImmediate_Ib, BX_IA_ERROR }, // 3DNow! Opcode Table - /* 0F 10 /dr */ { BxPrefixSSE, BX_IA_MOVUPS_VpsWps, BxOpcodeGroupSSE_0f10 }, - /* 0F 10 /dm */ { BxPrefixSSE, BX_IA_MOVUPS_VpsWps, BxOpcodeGroupSSE_0f10 }, - /* 0F 11 /dr */ { BxPrefixSSE | BxArithDstRM, BX_IA_MOVUPS_WpsVps, BxOpcodeGroupSSE_0f11 }, - /* 0F 11 /dm */ { BxPrefixSSE, BX_IA_MOVUPS_WpsVps, BxOpcodeGroupSSE_0f11 }, - /* 0F 12 /dr */ { BxPrefixSSE, BX_IA_MOVLPS_VpsMq, BxOpcodeGroupSSE_0f12 }, - /* 0F 12 /dm */ { BxPrefixSSE, BX_IA_MOVLPS_VpsMq, BxOpcodeGroupSSE_0f12 }, - /* 0F 13 /dr */ { 0, BX_IA_ERROR }, // MOVLPS/PD SSE group - /* 0F 13 /dm */ { BxPrefixSSE, BX_IA_MOVLPS_MqVps, BxOpcodeGroupSSE_0f13M }, - /* 0F 14 /dr */ { BxPrefixSSE, BX_IA_UNPCKLPS_VpsWdq, BxOpcodeGroupSSE_0f14 }, - /* 0F 14 /dm */ { BxPrefixSSE, BX_IA_UNPCKLPS_VpsWdq, BxOpcodeGroupSSE_0f14 }, - /* 0F 15 /dr */ { BxPrefixSSE, BX_IA_UNPCKHPS_VpsWdq, BxOpcodeGroupSSE_0f15 }, - /* 0F 15 /dm */ { BxPrefixSSE, BX_IA_UNPCKHPS_VpsWdq, BxOpcodeGroupSSE_0f15 }, - /* 0F 16 /dr */ { BxPrefixSSE, BX_IA_MOVHPS_VpsMq, BxOpcodeGroupSSE_0f16 }, - /* 0F 16 /dm */ { BxPrefixSSE, BX_IA_MOVHPS_VpsMq, BxOpcodeGroupSSE_0f16 }, - /* 0F 17 /dr */ { 0, BX_IA_ERROR }, // MOHLPS/PD SSE group - /* 0F 17 /dm */ { BxPrefixSSE, BX_IA_MOVHPS_MqVps, BxOpcodeGroupSSE_0f17M }, + /* 0F 08 /d */ { BxTraceEnd, BX_IA_INVD }, + /* 0F 09 /d */ { BxTraceEnd, BX_IA_WBINVD }, + /* 0F 0A /d */ { 0, BX_IA_ERROR }, + /* 0F 0B /d */ { BxTraceEnd, BX_IA_UD2A }, + /* 0F 0C /d */ { 0, BX_IA_ERROR }, + /* 0F 0D /d */ { 0, BX_IA_PREFETCHW }, // 3DNow! PREFETCHW on AMD, NOP on Intel + /* 0F 0E /d */ { 0, BX_IA_FEMMS }, // 3DNow! FEMMS + /* 0F 0F /d */ { BxImmediate_Ib, BX_IA_ERROR }, // 3DNow! Opcode Table + /* 0F 10 /d */ { BxPrefixSSE, BX_IA_MOVUPS_VpsWps, BxOpcodeGroupSSE_0f10 }, + /* 0F 11 /d */ { BxPrefixSSE | BxArithDstRM, BX_IA_MOVUPS_WpsVps, BxOpcodeGroupSSE_0f11 }, + /* 0F 12 /d */ { BxPrefixSSE, BX_IA_MOVLPS_VpsMq, BxOpcodeGroupSSE_0f12 }, + /* 0F 13 /d */ { BxPrefixSSE, BX_IA_MOVLPS_MqVps, BxOpcodeGroupSSE_0f13M }, + /* 0F 14 /d */ { BxPrefixSSE, BX_IA_UNPCKLPS_VpsWdq, BxOpcodeGroupSSE_0f14 }, + /* 0F 15 /d */ { BxPrefixSSE, BX_IA_UNPCKHPS_VpsWdq, BxOpcodeGroupSSE_0f15 }, + /* 0F 16 /d */ { BxPrefixSSE, BX_IA_MOVHPS_VpsMq, BxOpcodeGroupSSE_0f16 }, + /* 0F 17 /d */ { BxPrefixSSE, BX_IA_MOVHPS_MqVps, BxOpcodeGroupSSE_0f17M }, #if BX_CPU_LEVEL >= 6 - /* 0F 18 /dr */ { 0, BX_IA_NOP }, // PREFETCH HINT - /* 0F 18 /dm */ { 0, BX_IA_PREFETCH }, // opcode group G16, PREFETCH hints - /* 0F 19 /dr */ { 0, BX_IA_NOP }, // multi-byte NOP - /* 0F 19 /dm */ { 0, BX_IA_NOP }, // multi-byte NOP - /* 0F 1A /dr */ { 0, BX_IA_NOP }, // multi-byte NOP - /* 0F 1A /dm */ { 0, BX_IA_NOP }, // multi-byte NOP - /* 0F 1B /dr */ { 0, BX_IA_NOP }, // multi-byte NOP - /* 0F 1B /dm */ { 0, BX_IA_NOP }, // multi-byte NOP - /* 0F 1C /dr */ { 0, BX_IA_NOP }, // multi-byte NOP - /* 0F 1C /dm */ { 0, BX_IA_NOP }, // multi-byte NOP - /* 0F 1D /dr */ { 0, BX_IA_NOP }, // multi-byte NOP - /* 0F 1D /dm */ { 0, BX_IA_NOP }, // multi-byte NOP - /* 0F 1E /dr */ { 0, BX_IA_NOP }, // multi-byte NOP - /* 0F 1E /dm */ { 0, BX_IA_NOP }, // multi-byte NOP - /* 0F 1F /dr */ { 0, BX_IA_NOP }, // multi-byte NOP - /* 0F 1F /dm */ { 0, BX_IA_NOP }, // multi-byte NOP + /* 0F 18 /d */ { 0, BX_IA_PREFETCH }, // opcode group G16, PREFETCH hints + /* 0F 19 /d */ { 0, BX_IA_NOP }, // multi-byte NOP + /* 0F 1A /d */ { 0, BX_IA_NOP }, // multi-byte NOP + /* 0F 1B /d */ { 0, BX_IA_NOP }, // multi-byte NOP + /* 0F 1C /d */ { 0, BX_IA_NOP }, // multi-byte NOP + /* 0F 1D /d */ { 0, BX_IA_NOP }, // multi-byte NOP + /* 0F 1E /d */ { 0, BX_IA_NOP }, // multi-byte NOP + /* 0F 1F /d */ { 0, BX_IA_NOP }, // multi-byte NOP #else - /* 0F 18 /dr */ { 0, BX_IA_ERROR }, - /* 0F 18 /dm */ { 0, BX_IA_ERROR }, - /* 0F 19 /dr */ { 0, BX_IA_ERROR }, - /* 0F 19 /dm */ { 0, BX_IA_ERROR }, - /* 0F 1A /dr */ { 0, BX_IA_ERROR }, - /* 0F 1A /dm */ { 0, BX_IA_ERROR }, - /* 0F 1B /dr */ { 0, BX_IA_ERROR }, - /* 0F 1B /dm */ { 0, BX_IA_ERROR }, - /* 0F 1C /dr */ { 0, BX_IA_ERROR }, - /* 0F 1C /dm */ { 0, BX_IA_ERROR }, - /* 0F 1D /dr */ { 0, BX_IA_ERROR }, - /* 0F 1D /dm */ { 0, BX_IA_ERROR }, - /* 0F 1E /dr */ { 0, BX_IA_ERROR }, - /* 0F 1E /dm */ { 0, BX_IA_ERROR }, - /* 0F 1F /dr */ { 0, BX_IA_ERROR }, - /* 0F 1F /dm */ { 0, BX_IA_ERROR }, + /* 0F 18 /d */ { 0, BX_IA_ERROR }, + /* 0F 19 /d */ { 0, BX_IA_ERROR }, + /* 0F 1A /d */ { 0, BX_IA_ERROR }, + /* 0F 1B /d */ { 0, BX_IA_ERROR }, + /* 0F 1C /d */ { 0, BX_IA_ERROR }, + /* 0F 1D /d */ { 0, BX_IA_ERROR }, + /* 0F 1E /d */ { 0, BX_IA_ERROR }, + /* 0F 1F /d */ { 0, BX_IA_ERROR }, #endif - /* 0F 20 /dr */ { BxGroupN, BX_IA_ERROR, BxOpcodeInfoMOV_RdCd }, - /* 0F 20 /dm */ { 0, BX_IA_ERROR }, - /* 0F 21 /dr */ { 0, BX_IA_MOV_RdDd }, - /* 0F 21 /dm */ { 0, BX_IA_ERROR }, - /* 0F 22 /dr */ { BxGroupN, BX_IA_ERROR, BxOpcodeInfoMOV_CdRd }, - /* 0F 22 /dm */ { 0, BX_IA_ERROR }, - /* 0F 23 /dr */ { BxTraceEnd, BX_IA_MOV_DdRd }, - /* 0F 23 /dm */ { 0, BX_IA_ERROR }, - /* 0F 24 /dr */ { BxTraceEnd, BX_IA_MOV_RdTd }, // not implemented - /* 0F 24 /dm */ { BxTraceEnd, BX_IA_MOV_RdTd }, // not implemented - /* 0F 25 /dr */ { 0, BX_IA_ERROR }, - /* 0F 25 /dm */ { 0, BX_IA_ERROR }, - /* 0F 26 /dr */ { BxTraceEnd, BX_IA_MOV_TdRd }, // not implemented - /* 0F 26 /dm */ { BxTraceEnd, BX_IA_MOV_TdRd }, // not implemented - /* 0F 27 /dr */ { 0, BX_IA_ERROR }, - /* 0F 27 /dm */ { 0, BX_IA_ERROR }, - /* 0F 28 /dr */ { BxPrefixSSE, BX_IA_MOVAPS_VpsWps, BxOpcodeGroupSSE_0f28 }, - /* 0F 28 /dm */ { BxPrefixSSE, BX_IA_MOVAPS_VpsWps, BxOpcodeGroupSSE_0f28 }, - /* 0F 29 /dr */ { BxPrefixSSE | BxArithDstRM, BX_IA_MOVAPS_WpsVps, BxOpcodeGroupSSE_0f29 }, - /* 0F 29 /dm */ { BxPrefixSSE, BX_IA_MOVAPS_WpsVps, BxOpcodeGroupSSE_0f29 }, - /* 0F 2A /dr */ { BxPrefixSSE, BX_IA_CVTPI2PS_VpsQq, BxOpcodeGroupSSE_0f2a }, - /* 0F 2A /dm */ { BxPrefixSSE, BX_IA_CVTPI2PS_VpsQq, BxOpcodeGroupSSE_0f2a }, - /* 0F 2B /dr */ { 0, BX_IA_ERROR }, // MOVNTPS/PD/SS/SD - /* 0F 2B /dm */ { BxPrefixSSE, BX_IA_MOVNTPS_MpsVps, BxOpcodeGroupSSE_0f2bM }, - /* 0F 2C /dr */ { BxPrefixSSE, BX_IA_CVTTPS2PI_PqWps, BxOpcodeGroupSSE_0f2c }, - /* 0F 2C /dm */ { BxPrefixSSE, BX_IA_CVTTPS2PI_PqWps, BxOpcodeGroupSSE_0f2c }, - /* 0F 2D /dr */ { BxPrefixSSE, BX_IA_CVTPS2PI_PqWps, BxOpcodeGroupSSE_0f2d }, - /* 0F 2D /dm */ { BxPrefixSSE, BX_IA_CVTPS2PI_PqWps, BxOpcodeGroupSSE_0f2d }, - /* 0F 2E /dr */ { BxPrefixSSE, BX_IA_UCOMISS_VssWss, BxOpcodeGroupSSE_0f2e }, - /* 0F 2E /dm */ { BxPrefixSSE, BX_IA_UCOMISS_VssWss, BxOpcodeGroupSSE_0f2e }, - /* 0F 2F /dr */ { BxPrefixSSE, BX_IA_COMISS_VpsWps, BxOpcodeGroupSSE_0f2f }, - /* 0F 2F /dm */ { BxPrefixSSE, BX_IA_COMISS_VpsWps, BxOpcodeGroupSSE_0f2f }, - /* 0F 30 /dr */ { 0, BX_IA_WRMSR }, - /* 0F 30 /dm */ { 0, BX_IA_WRMSR }, - /* 0F 31 /dr */ { 0, BX_IA_RDTSC }, - /* 0F 31 /dm */ { 0, BX_IA_RDTSC }, - /* 0F 32 /dr */ { 0, BX_IA_RDMSR }, - /* 0F 32 /dm */ { 0, BX_IA_RDMSR }, - /* 0F 33 /dr */ { 0, BX_IA_RDPMC }, - /* 0F 33 /dm */ { 0, BX_IA_RDPMC }, - /* 0F 34 /dr */ { BxTraceEnd, BX_IA_SYSENTER }, - /* 0F 34 /dm */ { BxTraceEnd, BX_IA_SYSENTER }, - /* 0F 35 /dr */ { BxTraceEnd, BX_IA_SYSEXIT }, - /* 0F 35 /dm */ { BxTraceEnd, BX_IA_SYSEXIT }, - /* 0F 36 /dr */ { 0, BX_IA_ERROR }, - /* 0F 36 /dm */ { 0, BX_IA_ERROR }, - /* 0F 37 /dr */ { 0, BX_IA_ERROR }, - /* 0F 37 /dm */ { 0, BX_IA_ERROR }, - /* 0F 38 /dr */ { Bx3ByteOp, BX_IA_ERROR, BxOpcode3ByteTable0f38 }, // 3-byte escape - /* 0F 38 /dm */ { Bx3ByteOp, BX_IA_ERROR, BxOpcode3ByteTable0f38 }, // 3-byte escape - /* 0F 39 /dr */ { 0, BX_IA_ERROR }, - /* 0F 39 /dm */ { 0, BX_IA_ERROR }, - /* 0F 3A /dr */ { Bx3ByteOp | BxImmediate_Ib, BX_IA_ERROR, BxOpcode3ByteTable0f3a }, // 3-byte escape - /* 0F 3A /dm */ { Bx3ByteOp | BxImmediate_Ib, BX_IA_ERROR, BxOpcode3ByteTable0f3a }, // 3-byte escape - /* 0F 3B /dr */ { 0, BX_IA_ERROR }, - /* 0F 3B /dm */ { 0, BX_IA_ERROR }, - /* 0F 3C /dr */ { 0, BX_IA_ERROR }, - /* 0F 3C /dm */ { 0, BX_IA_ERROR }, - /* 0F 3D /dr */ { 0, BX_IA_ERROR }, - /* 0F 3D /dm */ { 0, BX_IA_ERROR }, - /* 0F 3E /dr */ { 0, BX_IA_ERROR }, - /* 0F 3E /dm */ { 0, BX_IA_ERROR }, - /* 0F 3F /dr */ { 0, BX_IA_ERROR }, - /* 0F 3F /dm */ { 0, BX_IA_ERROR }, - /* 0F 40 /dr */ { 0, BX_IA_CMOVO_GdEd }, - /* 0F 40 /dm */ { 0, BX_IA_CMOVO_GdEd }, - /* 0F 41 /dr */ { 0, BX_IA_CMOVNO_GdEd }, - /* 0F 41 /dm */ { 0, BX_IA_CMOVNO_GdEd }, - /* 0F 42 /dr */ { 0, BX_IA_CMOVB_GdEd }, - /* 0F 42 /dm */ { 0, BX_IA_CMOVB_GdEd }, - /* 0F 43 /dr */ { 0, BX_IA_CMOVNB_GdEd }, - /* 0F 43 /dm */ { 0, BX_IA_CMOVNB_GdEd }, - /* 0F 44 /dr */ { 0, BX_IA_CMOVZ_GdEd }, - /* 0F 44 /dm */ { 0, BX_IA_CMOVZ_GdEd }, - /* 0F 45 /dr */ { 0, BX_IA_CMOVNZ_GdEd }, - /* 0F 45 /dm */ { 0, BX_IA_CMOVNZ_GdEd }, - /* 0F 46 /dr */ { 0, BX_IA_CMOVBE_GdEd }, - /* 0F 46 /dm */ { 0, BX_IA_CMOVBE_GdEd }, - /* 0F 47 /dr */ { 0, BX_IA_CMOVNBE_GdEd }, - /* 0F 47 /dm */ { 0, BX_IA_CMOVNBE_GdEd }, - /* 0F 48 /dr */ { 0, BX_IA_CMOVS_GdEd }, - /* 0F 48 /dm */ { 0, BX_IA_CMOVS_GdEd }, - /* 0F 49 /dr */ { 0, BX_IA_CMOVNS_GdEd }, - /* 0F 49 /dm */ { 0, BX_IA_CMOVNS_GdEd }, - /* 0F 4A /dr */ { 0, BX_IA_CMOVP_GdEd }, - /* 0F 4A /dm */ { 0, BX_IA_CMOVP_GdEd }, - /* 0F 4B /dr */ { 0, BX_IA_CMOVNP_GdEd }, - /* 0F 4B /dm */ { 0, BX_IA_CMOVNP_GdEd }, - /* 0F 4C /dr */ { 0, BX_IA_CMOVL_GdEd }, - /* 0F 4C /dm */ { 0, BX_IA_CMOVL_GdEd }, - /* 0F 4D /dr */ { 0, BX_IA_CMOVNL_GdEd }, - /* 0F 4D /dm */ { 0, BX_IA_CMOVNL_GdEd }, - /* 0F 4E /dr */ { 0, BX_IA_CMOVLE_GdEd }, - /* 0F 4E /dm */ { 0, BX_IA_CMOVLE_GdEd }, - /* 0F 4F /dr */ { 0, BX_IA_CMOVNLE_GdEd }, - /* 0F 4F /dm */ { 0, BX_IA_CMOVNLE_GdEd }, - /* 0F 50 /dr */ { BxPrefixSSE, BX_IA_MOVMSKPS_GdVRps, BxOpcodeGroupSSE_0f50R }, - /* 0F 50 /dm */ { 0, BX_IA_ERROR }, // MOVMSKPS/PD - /* 0F 51 /dr */ { BxPrefixSSE, BX_IA_SQRTPS_VpsWps, BxOpcodeGroupSSE_0f51 }, - /* 0F 51 /dm */ { BxPrefixSSE, BX_IA_SQRTPS_VpsWps, BxOpcodeGroupSSE_0f51 }, - /* 0F 52 /dr */ { BxPrefixSSE, BX_IA_RSQRTPS_VpsWps, BxOpcodeGroupSSE_0f52 }, - /* 0F 52 /dm */ { BxPrefixSSE, BX_IA_RSQRTPS_VpsWps, BxOpcodeGroupSSE_0f52 }, - /* 0F 53 /dr */ { BxPrefixSSE, BX_IA_RCPPS_VpsWps, BxOpcodeGroupSSE_0f53 }, - /* 0F 53 /dm */ { BxPrefixSSE, BX_IA_RCPPS_VpsWps, BxOpcodeGroupSSE_0f53 }, - /* 0F 54 /dr */ { BxPrefixSSE, BX_IA_ANDPS_VpsWps, BxOpcodeGroupSSE_0f54 }, - /* 0F 54 /dm */ { BxPrefixSSE, BX_IA_ANDPS_VpsWps, BxOpcodeGroupSSE_0f54 }, - /* 0F 55 /dr */ { BxPrefixSSE, BX_IA_ANDNPS_VpsWps, BxOpcodeGroupSSE_0f55 }, - /* 0F 55 /dm */ { BxPrefixSSE, BX_IA_ANDNPS_VpsWps, BxOpcodeGroupSSE_0f55 }, - /* 0F 56 /dr */ { BxPrefixSSE, BX_IA_ORPS_VpsWps, BxOpcodeGroupSSE_0f56 }, - /* 0F 56 /dm */ { BxPrefixSSE, BX_IA_ORPS_VpsWps, BxOpcodeGroupSSE_0f56 }, - /* 0F 57 /dr */ { BxPrefixSSE, BX_IA_XORPS_VpsWps, BxOpcodeGroupSSE_0f57 }, - /* 0F 57 /dm */ { BxPrefixSSE, BX_IA_XORPS_VpsWps, BxOpcodeGroupSSE_0f57 }, - /* 0F 58 /dr */ { BxPrefixSSE, BX_IA_ADDPS_VpsWps, BxOpcodeGroupSSE_0f58 }, - /* 0F 58 /dm */ { BxPrefixSSE, BX_IA_ADDPS_VpsWps, BxOpcodeGroupSSE_0f58 }, - /* 0F 59 /dr */ { BxPrefixSSE, BX_IA_MULPS_VpsWps, BxOpcodeGroupSSE_0f59 }, - /* 0F 59 /dm */ { BxPrefixSSE, BX_IA_MULPS_VpsWps, BxOpcodeGroupSSE_0f59 }, - /* 0F 5A /dr */ { BxPrefixSSE, BX_IA_CVTPS2PD_VpsWps, BxOpcodeGroupSSE_0f5a }, - /* 0F 5A /dm */ { BxPrefixSSE, BX_IA_CVTPS2PD_VpsWps, BxOpcodeGroupSSE_0f5a }, - /* 0F 5B /dr */ { BxPrefixSSE, BX_IA_CVTDQ2PS_VpsWdq, BxOpcodeGroupSSE_0f5b }, - /* 0F 5B /dm */ { BxPrefixSSE, BX_IA_CVTDQ2PS_VpsWdq, BxOpcodeGroupSSE_0f5b }, - /* 0F 5C /dr */ { BxPrefixSSE, BX_IA_SUBPS_VpsWps, BxOpcodeGroupSSE_0f5c }, - /* 0F 5C /dm */ { BxPrefixSSE, BX_IA_SUBPS_VpsWps, BxOpcodeGroupSSE_0f5c }, - /* 0F 5D /dr */ { BxPrefixSSE, BX_IA_MINPS_VpsWps, BxOpcodeGroupSSE_0f5d }, - /* 0F 5D /dm */ { BxPrefixSSE, BX_IA_MINPS_VpsWps, BxOpcodeGroupSSE_0f5d }, - /* 0F 5E /dr */ { BxPrefixSSE, BX_IA_DIVPS_VpsWps, BxOpcodeGroupSSE_0f5e }, - /* 0F 5E /dm */ { BxPrefixSSE, BX_IA_DIVPS_VpsWps, BxOpcodeGroupSSE_0f5e }, - /* 0F 5F /dr */ { BxPrefixSSE, BX_IA_MAXPS_VpsWps, BxOpcodeGroupSSE_0f5f }, - /* 0F 5F /dm */ { BxPrefixSSE, BX_IA_MAXPS_VpsWps, BxOpcodeGroupSSE_0f5f }, - /* 0F 60 /dr */ { BxPrefixSSE, BX_IA_PUNPCKLBW_PqQd, BxOpcodeGroupSSE_0f60 }, - /* 0F 60 /dm */ { BxPrefixSSE, BX_IA_PUNPCKLBW_PqQd, BxOpcodeGroupSSE_0f60 }, - /* 0F 61 /dr */ { BxPrefixSSE, BX_IA_PUNPCKLWD_PqQd, BxOpcodeGroupSSE_0f61 }, - /* 0F 61 /dm */ { BxPrefixSSE, BX_IA_PUNPCKLWD_PqQd, BxOpcodeGroupSSE_0f61 }, - /* 0F 62 /dr */ { BxPrefixSSE, BX_IA_PUNPCKLDQ_PqQd, BxOpcodeGroupSSE_0f62 }, - /* 0F 62 /dm */ { BxPrefixSSE, BX_IA_PUNPCKLDQ_PqQd, BxOpcodeGroupSSE_0f62 }, - /* 0F 63 /dr */ { BxPrefixSSE, BX_IA_PACKSSWB_PqQq, BxOpcodeGroupSSE_0f63 }, - /* 0F 63 /dm */ { BxPrefixSSE, BX_IA_PACKSSWB_PqQq, BxOpcodeGroupSSE_0f63 }, - /* 0F 64 /dr */ { BxPrefixSSE, BX_IA_PCMPGTB_PqQq, BxOpcodeGroupSSE_0f64 }, - /* 0F 64 /dm */ { BxPrefixSSE, BX_IA_PCMPGTB_PqQq, BxOpcodeGroupSSE_0f64 }, - /* 0F 65 /dr */ { BxPrefixSSE, BX_IA_PCMPGTW_PqQq, BxOpcodeGroupSSE_0f65 }, - /* 0F 65 /dm */ { BxPrefixSSE, BX_IA_PCMPGTW_PqQq, BxOpcodeGroupSSE_0f65 }, - /* 0F 66 /dr */ { BxPrefixSSE, BX_IA_PCMPGTD_PqQq, BxOpcodeGroupSSE_0f66 }, - /* 0F 66 /dm */ { BxPrefixSSE, BX_IA_PCMPGTD_PqQq, BxOpcodeGroupSSE_0f66 }, - /* 0F 67 /dr */ { BxPrefixSSE, BX_IA_PACKUSWB_PqQq, BxOpcodeGroupSSE_0f67 }, - /* 0F 67 /dm */ { BxPrefixSSE, BX_IA_PACKUSWB_PqQq, BxOpcodeGroupSSE_0f67 }, - /* 0F 68 /dr */ { BxPrefixSSE, BX_IA_PUNPCKHBW_PqQq, BxOpcodeGroupSSE_0f68 }, - /* 0F 68 /dm */ { BxPrefixSSE, BX_IA_PUNPCKHBW_PqQq, BxOpcodeGroupSSE_0f68 }, - /* 0F 69 /dr */ { BxPrefixSSE, BX_IA_PUNPCKHWD_PqQq, BxOpcodeGroupSSE_0f69 }, - /* 0F 69 /dm */ { BxPrefixSSE, BX_IA_PUNPCKHWD_PqQq, BxOpcodeGroupSSE_0f69 }, - /* 0F 6A /dr */ { BxPrefixSSE, BX_IA_PUNPCKHDQ_PqQq, BxOpcodeGroupSSE_0f6a }, - /* 0F 6A /dm */ { BxPrefixSSE, BX_IA_PUNPCKHDQ_PqQq, BxOpcodeGroupSSE_0f6a }, - /* 0F 6B /dr */ { BxPrefixSSE, BX_IA_PACKSSDW_PqQq, BxOpcodeGroupSSE_0f6b }, - /* 0F 6B /dm */ { BxPrefixSSE, BX_IA_PACKSSDW_PqQq, BxOpcodeGroupSSE_0f6b }, - /* 0F 6C /dr */ { BxPrefixSSE66, BX_IA_PUNPCKLQDQ_VdqWdq }, - /* 0F 6C /dm */ { BxPrefixSSE66, BX_IA_PUNPCKLQDQ_VdqWdq }, - /* 0F 6D /dr */ { BxPrefixSSE66, BX_IA_PUNPCKHQDQ_VdqWdq }, - /* 0F 6D /dm */ { BxPrefixSSE66, BX_IA_PUNPCKHQDQ_VdqWdq }, - /* 0F 6E /dr */ { BxPrefixSSE, BX_IA_MOVD_PqEd, BxOpcodeGroupSSE_0f6e }, - /* 0F 6E /dm */ { BxPrefixSSE, BX_IA_MOVD_PqEd, BxOpcodeGroupSSE_0f6e }, - /* 0F 6F /dr */ { BxPrefixSSE, BX_IA_MOVQ_PqQq, BxOpcodeGroupSSE_0f6f }, - /* 0F 6F /dm */ { BxPrefixSSE, BX_IA_MOVQ_PqQq, BxOpcodeGroupSSE_0f6f }, - /* 0F 70 /dr */ { BxPrefixSSE | BxImmediate_Ib, BX_IA_PSHUFW_PqQqIb, BxOpcodeGroupSSE_0f70 }, - /* 0F 70 /dm */ { BxPrefixSSE | BxImmediate_Ib, BX_IA_PSHUFW_PqQqIb, BxOpcodeGroupSSE_0f70 }, - /* 0F 71 /dr */ { BxGroup12, BX_IA_ERROR, BxOpcodeInfoG12R }, - /* 0F 71 /dm */ { 0, BX_IA_ERROR }, // SSE Group G12 - /* 0F 72 /dr */ { BxGroup13, BX_IA_ERROR, BxOpcodeInfoG13R }, - /* 0F 72 /dm */ { 0, BX_IA_ERROR }, // SSE Group G13 - /* 0F 73 /dr */ { BxGroup14, BX_IA_ERROR, BxOpcodeInfoG14R }, - /* 0F 73 /dm */ { 0, BX_IA_ERROR }, // SSE Group G14 - /* 0F 74 /dr */ { BxPrefixSSE, BX_IA_PCMPEQB_PqQq, BxOpcodeGroupSSE_0f74 }, - /* 0F 74 /dm */ { BxPrefixSSE, BX_IA_PCMPEQB_PqQq, BxOpcodeGroupSSE_0f74 }, - /* 0F 75 /dr */ { BxPrefixSSE, BX_IA_PCMPEQW_PqQq, BxOpcodeGroupSSE_0f75 }, - /* 0F 75 /dm */ { BxPrefixSSE, BX_IA_PCMPEQW_PqQq, BxOpcodeGroupSSE_0f75 }, - /* 0F 76 /dr */ { BxPrefixSSE, BX_IA_PCMPEQD_PqQq, BxOpcodeGroupSSE_0f76 }, - /* 0F 76 /dm */ { BxPrefixSSE, BX_IA_PCMPEQD_PqQq, BxOpcodeGroupSSE_0f76 }, - /* 0F 77 /dr */ { BxPrefixSSE, BX_IA_EMMS, BxOpcodeGroupSSE_ERR }, - /* 0F 77 /dm */ { BxPrefixSSE, BX_IA_EMMS, BxOpcodeGroupSSE_ERR }, - /* 0F 78 /dr */ { BxPrefixSSE, BX_IA_VMREAD_EdGd, BxOpcodeGroupSSE_ERR }, - /* 0F 78 /dm */ { BxPrefixSSE, BX_IA_VMREAD_EdGd, BxOpcodeGroupSSE_ERR }, - /* 0F 79 /dr */ { BxPrefixSSE, BX_IA_VMWRITE_GdEd, BxOpcodeGroupSSE_ERR }, - /* 0F 79 /dm */ { BxPrefixSSE, BX_IA_VMWRITE_GdEd, BxOpcodeGroupSSE_ERR }, - /* 0F 7A /dr */ { 0, BX_IA_ERROR }, - /* 0F 7A /dm */ { 0, BX_IA_ERROR }, - /* 0F 7B /dr */ { 0, BX_IA_ERROR }, - /* 0F 7B /dm */ { 0, BX_IA_ERROR }, - /* 0F 7C /dr */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f7c }, - /* 0F 7C /dm */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f7c }, - /* 0F 7D /dr */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f7d }, - /* 0F 7D /dm */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f7d }, - /* 0F 7E /dr */ { BxPrefixSSE, BX_IA_MOVD_EdPd, BxOpcodeGroupSSE_0f7e }, - /* 0F 7E /dm */ { BxPrefixSSE, BX_IA_MOVD_EdPd, BxOpcodeGroupSSE_0f7e }, - /* 0F 7F /dr */ { BxPrefixSSE, BX_IA_MOVQ_QqPq, BxOpcodeGroupSSE_0f7f }, - /* 0F 7F /dm */ { BxPrefixSSE, BX_IA_MOVQ_QqPq, BxOpcodeGroupSSE_0f7f }, - /* 0F 80 /dr */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JO_Jd }, - /* 0F 80 /dm */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JO_Jd }, - /* 0F 81 /dr */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNO_Jd }, - /* 0F 81 /dm */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNO_Jd }, - /* 0F 82 /dr */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JB_Jd }, - /* 0F 82 /dm */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JB_Jd }, - /* 0F 83 /dr */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNB_Jd }, - /* 0F 83 /dm */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNB_Jd }, - /* 0F 84 /dr */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JZ_Jd }, - /* 0F 84 /dm */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JZ_Jd }, - /* 0F 85 /dr */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNZ_Jd }, - /* 0F 85 /dm */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNZ_Jd }, - /* 0F 86 /dr */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JBE_Jd }, - /* 0F 86 /dm */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JBE_Jd }, - /* 0F 87 /dr */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNBE_Jd }, - /* 0F 87 /dm */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNBE_Jd }, - /* 0F 88 /dr */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JS_Jd }, - /* 0F 88 /dm */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JS_Jd }, - /* 0F 89 /dr */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNS_Jd }, - /* 0F 89 /dm */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNS_Jd }, - /* 0F 8A /dr */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JP_Jd }, - /* 0F 8A /dm */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JP_Jd }, - /* 0F 8B /dr */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNP_Jd }, - /* 0F 8B /dm */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNP_Jd }, - /* 0F 8C /dr */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JL_Jd }, - /* 0F 8C /dm */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JL_Jd }, - /* 0F 8D /dr */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNL_Jd }, - /* 0F 8D /dm */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNL_Jd }, - /* 0F 8E /dr */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JLE_Jd }, - /* 0F 8E /dm */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JLE_Jd }, - /* 0F 8F /dr */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNLE_Jd }, - /* 0F 8F /dm */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNLE_Jd }, - /* 0F 90 /dr */ { 0, BX_IA_SETO_Eb }, - /* 0F 90 /dm */ { 0, BX_IA_SETO_Eb }, - /* 0F 91 /dr */ { 0, BX_IA_SETNO_Eb }, - /* 0F 91 /dm */ { 0, BX_IA_SETNO_Eb }, - /* 0F 92 /dr */ { 0, BX_IA_SETB_Eb }, - /* 0F 92 /dm */ { 0, BX_IA_SETB_Eb }, - /* 0F 93 /dr */ { 0, BX_IA_SETNB_Eb }, - /* 0F 93 /dm */ { 0, BX_IA_SETNB_Eb }, - /* 0F 94 /dr */ { 0, BX_IA_SETZ_Eb }, - /* 0F 94 /dm */ { 0, BX_IA_SETZ_Eb }, - /* 0F 95 /dr */ { 0, BX_IA_SETNZ_Eb }, - /* 0F 95 /dm */ { 0, BX_IA_SETNZ_Eb }, - /* 0F 96 /dr */ { 0, BX_IA_SETBE_Eb }, - /* 0F 96 /dm */ { 0, BX_IA_SETBE_Eb }, - /* 0F 97 /dr */ { 0, BX_IA_SETNBE_Eb }, - /* 0F 97 /dm */ { 0, BX_IA_SETNBE_Eb }, - /* 0F 98 /dr */ { 0, BX_IA_SETS_Eb }, - /* 0F 98 /dm */ { 0, BX_IA_SETS_Eb }, - /* 0F 99 /dr */ { 0, BX_IA_SETNS_Eb }, - /* 0F 99 /dm */ { 0, BX_IA_SETNS_Eb }, - /* 0F 9A /dr */ { 0, BX_IA_SETP_Eb }, - /* 0F 9A /dm */ { 0, BX_IA_SETP_Eb }, - /* 0F 9B /dr */ { 0, BX_IA_SETNP_Eb }, - /* 0F 9B /dm */ { 0, BX_IA_SETNP_Eb }, - /* 0F 9C /dr */ { 0, BX_IA_SETL_Eb }, - /* 0F 9C /dm */ { 0, BX_IA_SETL_Eb }, - /* 0F 9D /dr */ { 0, BX_IA_SETNL_Eb }, - /* 0F 9D /dm */ { 0, BX_IA_SETNL_Eb }, - /* 0F 9E /dr */ { 0, BX_IA_SETLE_Eb }, - /* 0F 9E /dm */ { 0, BX_IA_SETLE_Eb }, - /* 0F 9F /dr */ { 0, BX_IA_SETNLE_Eb }, - /* 0F 9F /dm */ { 0, BX_IA_SETNLE_Eb }, - /* 0F A0 /dr */ { 0, BX_IA_PUSH32_FS }, - /* 0F A0 /dm */ { 0, BX_IA_PUSH32_FS }, - /* 0F A1 /dr */ { 0, BX_IA_POP32_FS }, - /* 0F A1 /dm */ { 0, BX_IA_POP32_FS }, - /* 0F A2 /dr */ { 0, BX_IA_CPUID }, - /* 0F A2 /dm */ { 0, BX_IA_CPUID }, - /* 0F A3 /dr */ { 0, BX_IA_BT_EdGdR }, - /* 0F A3 /dm */ { 0, BX_IA_BT_EdGdM }, - /* 0F A4 /dr */ { BxImmediate_Ib, BX_IA_SHLD_EdGd }, - /* 0F A4 /dm */ { BxImmediate_Ib, BX_IA_SHLD_EdGd }, - /* 0F A5 /dr */ { 0, BX_IA_SHLD_EdGd }, - /* 0F A5 /dm */ { 0, BX_IA_SHLD_EdGd }, - /* 0F A6 /dr */ { BxTraceEnd, BX_IA_CMPXCHG_XBTS }, // not implemented - /* 0F A6 /dm */ { BxTraceEnd, BX_IA_CMPXCHG_XBTS }, // not implemented - /* 0F A7 /dr */ { BxTraceEnd, BX_IA_CMPXCHG_IBTS }, // not implemented - /* 0F A7 /dm */ { BxTraceEnd, BX_IA_CMPXCHG_IBTS }, // not implemented - /* 0F A8 /dr */ { 0, BX_IA_PUSH32_GS }, - /* 0F A8 /dm */ { 0, BX_IA_PUSH32_GS }, - /* 0F A9 /dr */ { 0, BX_IA_POP32_GS }, - /* 0F A9 /dm */ { 0, BX_IA_POP32_GS }, - /* 0F AA /dr */ { BxTraceEnd, BX_IA_RSM }, - /* 0F AA /dm */ { BxTraceEnd, BX_IA_RSM }, - /* 0F AB /dr */ { 0, BX_IA_BTS_EdGdR }, - /* 0F AB /dm */ { BxLockable, BX_IA_BTS_EdGdM }, - /* 0F AC /dr */ { BxImmediate_Ib, BX_IA_SHRD_EdGd }, - /* 0F AC /dm */ { BxImmediate_Ib, BX_IA_SHRD_EdGd }, - /* 0F AD /dr */ { 0, BX_IA_SHRD_EdGd }, - /* 0F AD /dm */ { 0, BX_IA_SHRD_EdGd }, - /* 0F AE /dr */ { BxGroup15, BX_IA_ERROR, BxOpcodeInfoG15R }, - /* 0F AE /dm */ { BxGroup15, BX_IA_ERROR, BxOpcodeInfoG15M }, - /* 0F AF /dr */ { 0, BX_IA_IMUL_GdEd }, - /* 0F AF /dm */ { 0, BX_IA_IMUL_GdEd }, - /* 0F B0 /dr */ { 0, BX_IA_CMPXCHG_EbGb }, - /* 0F B0 /dm */ { BxLockable, BX_IA_CMPXCHG_EbGb }, - /* 0F B1 /dr */ { 0, BX_IA_CMPXCHG_EdGd }, - /* 0F B1 /dm */ { BxLockable, BX_IA_CMPXCHG_EdGd }, - /* 0F B2 /dr */ { 0, BX_IA_ERROR }, // LSS - /* 0F B2 /dm */ { 0, BX_IA_LSS_GdMp }, - /* 0F B3 /dr */ { 0, BX_IA_BTR_EdGdR }, - /* 0F B3 /dm */ { BxLockable, BX_IA_BTR_EdGdM }, - /* 0F B4 /dr */ { 0, BX_IA_ERROR }, // LFS - /* 0F B4 /dm */ { 0, BX_IA_LFS_GdMp }, - /* 0F B5 /dr */ { 0, BX_IA_ERROR }, // LGS - /* 0F B5 /dm */ { 0, BX_IA_LGS_GdMp }, - /* 0F B6 /dr */ { 0, BX_IA_MOVZX_GdEb }, - /* 0F B6 /dm */ { 0, BX_IA_MOVZX_GdEb }, - /* 0F B7 /dr */ { 0, BX_IA_MOVZX_GdEw }, - /* 0F B7 /dm */ { 0, BX_IA_MOVZX_GdEw }, - /* 0F B8 /dr */ { BxPrefixSSEF3, BX_IA_POPCNT_GdEd }, - /* 0F B8 /dm */ { BxPrefixSSEF3, BX_IA_POPCNT_GdEd }, - /* 0F B9 /dr */ { BxTraceEnd, BX_IA_UD2B }, - /* 0F B9 /dm */ { BxTraceEnd, BX_IA_UD2B }, - /* 0F BA /dr */ { BxGroup8, BX_IA_ERROR, BxOpcodeInfoG8EdIb }, - /* 0F BA /dm */ { BxGroup8, BX_IA_ERROR, BxOpcodeInfoG8EdIb }, - /* 0F BB /dr */ { 0, BX_IA_BTC_EdGdR }, - /* 0F BB /dm */ { BxLockable, BX_IA_BTC_EdGdM }, - /* 0F BC /dr */ { 0, BX_IA_BSF_GdEd }, - /* 0F BC /dm */ { 0, BX_IA_BSF_GdEd }, - /* 0F BD /dr */ { 0, BX_IA_BSR_GdEd }, - /* 0F BD /dm */ { 0, BX_IA_BSR_GdEd }, - /* 0F BE /dr */ { 0, BX_IA_MOVSX_GdEb }, - /* 0F BE /dm */ { 0, BX_IA_MOVSX_GdEb }, - /* 0F BF /dr */ { 0, BX_IA_MOVSX_GdEw }, - /* 0F BF /dm */ { 0, BX_IA_MOVSX_GdEw }, - /* 0F C0 /dr */ { 0, BX_IA_XADD_EbGb }, - /* 0F C0 /dm */ { BxLockable, BX_IA_XADD_EbGb }, - /* 0F C1 /dr */ { 0, BX_IA_XADD_EdGd }, - /* 0F C1 /dm */ { BxLockable, BX_IA_XADD_EdGd }, - /* 0F C2 /dr */ { BxPrefixSSE | BxImmediate_Ib, BX_IA_CMPPS_VpsWpsIb, BxOpcodeGroupSSE_0fc2 }, - /* 0F C2 /dm */ { BxPrefixSSE | BxImmediate_Ib, BX_IA_CMPPS_VpsWpsIb, BxOpcodeGroupSSE_0fc2 }, - /* 0F C3 /dr */ { 0, BX_IA_ERROR }, // MOVNTI SSE group - /* 0F C3 /dm */ { BxPrefixSSE, BX_IA_MOVNTI_MdGd, BxOpcodeGroupSSE_ERR }, - /* 0F C4 /dr */ { BxPrefixSSE | BxImmediate_Ib, BX_IA_PINSRW_PqEwIb, BxOpcodeGroupSSE_0fc4 }, - /* 0F C4 /dm */ { BxPrefixSSE | BxImmediate_Ib, BX_IA_PINSRW_PqEwIb, BxOpcodeGroupSSE_0fc4 }, - /* 0F C5 /dr */ { BxPrefixSSE | BxImmediate_Ib, BX_IA_PEXTRW_GdPqIb, BxOpcodeGroupSSE_0fc5R }, - /* 0F C5 /dm */ { 0, BX_IA_ERROR }, // PEXTRW SSE group - /* 0F C6 /dr */ { BxPrefixSSE | BxImmediate_Ib, BX_IA_SHUFPS_VpsWpsIb, BxOpcodeGroupSSE_0fc6 }, - /* 0F C6 /dm */ { BxPrefixSSE | BxImmediate_Ib, BX_IA_SHUFPS_VpsWpsIb, BxOpcodeGroupSSE_0fc6 }, - /* 0F C7 /dr */ { 0, BX_IA_ERROR }, // CMPXCHG8B G9 group - /* 0F C7 /dm */ { BxGroup9, BX_IA_ERROR, BxOpcodeInfoG9M }, - /* 0F C8 /dr */ { 0, BX_IA_BSWAP_ERX }, - /* 0F C8 /dm */ { 0, BX_IA_BSWAP_ERX }, - /* 0F C9 /dr */ { 0, BX_IA_BSWAP_ERX }, - /* 0F C9 /dm */ { 0, BX_IA_BSWAP_ERX }, - /* 0F CA /dr */ { 0, BX_IA_BSWAP_ERX }, - /* 0F CA /dm */ { 0, BX_IA_BSWAP_ERX }, - /* 0F CB /dr */ { 0, BX_IA_BSWAP_ERX }, - /* 0F CB /dm */ { 0, BX_IA_BSWAP_ERX }, - /* 0F CC /dr */ { 0, BX_IA_BSWAP_ERX }, - /* 0F CC /dm */ { 0, BX_IA_BSWAP_ERX }, - /* 0F CD /dr */ { 0, BX_IA_BSWAP_ERX }, - /* 0F CD /dm */ { 0, BX_IA_BSWAP_ERX }, - /* 0F CE /dr */ { 0, BX_IA_BSWAP_ERX }, - /* 0F CE /dm */ { 0, BX_IA_BSWAP_ERX }, - /* 0F CF /dr */ { 0, BX_IA_BSWAP_ERX }, - /* 0F CF /dm */ { 0, BX_IA_BSWAP_ERX }, - /* 0F D0 /dr */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0fd0 }, - /* 0F D0 /dm */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0fd0 }, - /* 0F D1 /dr */ { BxPrefixSSE, BX_IA_PSRLW_PqQq, BxOpcodeGroupSSE_0fd1 }, - /* 0F D1 /dm */ { BxPrefixSSE, BX_IA_PSRLW_PqQq, BxOpcodeGroupSSE_0fd1 }, - /* 0F D2 /dr */ { BxPrefixSSE, BX_IA_PSRLD_PqQq, BxOpcodeGroupSSE_0fd2 }, - /* 0F D2 /dm */ { BxPrefixSSE, BX_IA_PSRLD_PqQq, BxOpcodeGroupSSE_0fd2 }, - /* 0F D3 /dr */ { BxPrefixSSE, BX_IA_PSRLQ_PqQq, BxOpcodeGroupSSE_0fd3 }, - /* 0F D3 /dm */ { BxPrefixSSE, BX_IA_PSRLQ_PqQq, BxOpcodeGroupSSE_0fd3 }, - /* 0F D4 /dr */ { BxPrefixSSE, BX_IA_PADDQ_PqQq, BxOpcodeGroupSSE_0fd4 }, - /* 0F D4 /dm */ { BxPrefixSSE, BX_IA_PADDQ_PqQq, BxOpcodeGroupSSE_0fd4 }, - /* 0F D5 /dr */ { BxPrefixSSE, BX_IA_PMULLW_PqQq, BxOpcodeGroupSSE_0fd5 }, - /* 0F D5 /dm */ { BxPrefixSSE, BX_IA_PMULLW_PqQq, BxOpcodeGroupSSE_0fd5 }, - /* 0F D6 /dr */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0fd6 }, - /* 0F D6 /dm */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0fd6 }, - /* 0F D7 /dr */ { BxPrefixSSE, BX_IA_PMOVMSKB_GdPRq, BxOpcodeGroupSSE_0fd7 }, - /* 0F D7 /dm */ { 0, BX_IA_ERROR }, // PMOVMSKB is reg/reg form only - /* 0F D8 /dr */ { BxPrefixSSE, BX_IA_PSUBUSB_PqQq, BxOpcodeGroupSSE_0fd8 }, - /* 0F D8 /dm */ { BxPrefixSSE, BX_IA_PSUBUSB_PqQq, BxOpcodeGroupSSE_0fd8 }, - /* 0F D9 /dr */ { BxPrefixSSE, BX_IA_PSUBUSW_PqQq, BxOpcodeGroupSSE_0fd9 }, - /* 0F D9 /dm */ { BxPrefixSSE, BX_IA_PSUBUSW_PqQq, BxOpcodeGroupSSE_0fd9 }, - /* 0F DA /dr */ { BxPrefixSSE, BX_IA_PMINUB_PqQq, BxOpcodeGroupSSE_0fda }, - /* 0F DA /dm */ { BxPrefixSSE, BX_IA_PMINUB_PqQq, BxOpcodeGroupSSE_0fda }, - /* 0F DB /dr */ { BxPrefixSSE, BX_IA_PAND_PqQq, BxOpcodeGroupSSE_0fdb }, - /* 0F DB /dm */ { BxPrefixSSE, BX_IA_PAND_PqQq, BxOpcodeGroupSSE_0fdb }, - /* 0F DC /dr */ { BxPrefixSSE, BX_IA_PADDUSB_PqQq, BxOpcodeGroupSSE_0fdc }, - /* 0F DC /dm */ { BxPrefixSSE, BX_IA_PADDUSB_PqQq, BxOpcodeGroupSSE_0fdc }, - /* 0F DD /dr */ { BxPrefixSSE, BX_IA_PADDUSW_PqQq, BxOpcodeGroupSSE_0fdd }, - /* 0F DD /dm */ { BxPrefixSSE, BX_IA_PADDUSW_PqQq, BxOpcodeGroupSSE_0fdd }, - /* 0F DE /dr */ { BxPrefixSSE, BX_IA_PMAXUB_PqQq, BxOpcodeGroupSSE_0fde }, - /* 0F DE /dm */ { BxPrefixSSE, BX_IA_PMAXUB_PqQq, BxOpcodeGroupSSE_0fde }, - /* 0F DF /dr */ { BxPrefixSSE, BX_IA_PANDN_PqQq, BxOpcodeGroupSSE_0fdf }, - /* 0F DF /dm */ { BxPrefixSSE, BX_IA_PANDN_PqQq, BxOpcodeGroupSSE_0fdf }, - /* 0F E0 /dr */ { BxPrefixSSE, BX_IA_PAVGB_PqQq, BxOpcodeGroupSSE_0fe0 }, - /* 0F E0 /dm */ { BxPrefixSSE, BX_IA_PAVGB_PqQq, BxOpcodeGroupSSE_0fe0 }, - /* 0F E1 /dr */ { BxPrefixSSE, BX_IA_PSRAW_PqQq, BxOpcodeGroupSSE_0fe1 }, - /* 0F E1 /dm */ { BxPrefixSSE, BX_IA_PSRAW_PqQq, BxOpcodeGroupSSE_0fe1 }, - /* 0F E2 /dr */ { BxPrefixSSE, BX_IA_PSRAD_PqQq, BxOpcodeGroupSSE_0fe2 }, - /* 0F E2 /dm */ { BxPrefixSSE, BX_IA_PSRAD_PqQq, BxOpcodeGroupSSE_0fe2 }, - /* 0F E3 /dr */ { BxPrefixSSE, BX_IA_PAVGW_PqQq, BxOpcodeGroupSSE_0fe3 }, - /* 0F E3 /dm */ { BxPrefixSSE, BX_IA_PAVGW_PqQq, BxOpcodeGroupSSE_0fe3 }, - /* 0F E4 /dr */ { BxPrefixSSE, BX_IA_PMULHUW_PqQq, BxOpcodeGroupSSE_0fe4 }, - /* 0F E4 /dm */ { BxPrefixSSE, BX_IA_PMULHUW_PqQq, BxOpcodeGroupSSE_0fe4 }, - /* 0F E5 /dr */ { BxPrefixSSE, BX_IA_PMULHW_PqQq, BxOpcodeGroupSSE_0fe5 }, - /* 0F E5 /dm */ { BxPrefixSSE, BX_IA_PMULHW_PqQq, BxOpcodeGroupSSE_0fe5 }, - /* 0F E6 /dr */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0fe6 }, - /* 0F E6 /dm */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0fe6 }, - /* 0F E7 /dr */ { 0, BX_IA_ERROR }, // MOVNTQ/MOVNTDQ SSE group - /* 0F E7 /dm */ { BxPrefixSSE, BX_IA_MOVNTQ_MqPq, BxOpcodeGroupSSE_0fe7M }, - /* 0F E8 /dr */ { BxPrefixSSE, BX_IA_PSUBSB_PqQq, BxOpcodeGroupSSE_0fe8 }, - /* 0F E8 /dm */ { BxPrefixSSE, BX_IA_PSUBSB_PqQq, BxOpcodeGroupSSE_0fe8 }, - /* 0F E9 /dr */ { BxPrefixSSE, BX_IA_PSUBSW_PqQq, BxOpcodeGroupSSE_0fe9 }, - /* 0F E9 /dm */ { BxPrefixSSE, BX_IA_PSUBSW_PqQq, BxOpcodeGroupSSE_0fe9 }, - /* 0F EA /dr */ { BxPrefixSSE, BX_IA_PMINSW_PqQq, BxOpcodeGroupSSE_0fea }, - /* 0F EA /dm */ { BxPrefixSSE, BX_IA_PMINSW_PqQq, BxOpcodeGroupSSE_0fea }, - /* 0F EB /dr */ { BxPrefixSSE, BX_IA_POR_PqQq, BxOpcodeGroupSSE_0feb }, - /* 0F EB /dm */ { BxPrefixSSE, BX_IA_POR_PqQq, BxOpcodeGroupSSE_0feb }, - /* 0F EC /dr */ { BxPrefixSSE, BX_IA_PADDSB_PqQq, BxOpcodeGroupSSE_0fec }, - /* 0F EC /dm */ { BxPrefixSSE, BX_IA_PADDSB_PqQq, BxOpcodeGroupSSE_0fec }, - /* 0F ED /dr */ { BxPrefixSSE, BX_IA_PADDSW_PqQq, BxOpcodeGroupSSE_0fed }, - /* 0F ED /dm */ { BxPrefixSSE, BX_IA_PADDSW_PqQq, BxOpcodeGroupSSE_0fed }, - /* 0F EE /dr */ { BxPrefixSSE, BX_IA_PMAXSW_PqQq, BxOpcodeGroupSSE_0fee }, - /* 0F EE /dm */ { BxPrefixSSE, BX_IA_PMAXSW_PqQq, BxOpcodeGroupSSE_0fee }, - /* 0F EF /dr */ { BxPrefixSSE, BX_IA_PXOR_PqQq, BxOpcodeGroupSSE_0fef }, - /* 0F EF /dm */ { BxPrefixSSE, BX_IA_PXOR_PqQq, BxOpcodeGroupSSE_0fef }, - /* 0F F0 /dr */ { 0, BX_IA_ERROR }, // LDDQU SSE group - /* 0F F0 /wm */ { BxPrefixSSEF2, BX_IA_LDDQU_VdqMdq }, - /* 0F F1 /dr */ { BxPrefixSSE, BX_IA_PSLLW_PqQq, BxOpcodeGroupSSE_0ff1 }, - /* 0F F1 /dm */ { BxPrefixSSE, BX_IA_PSLLW_PqQq, BxOpcodeGroupSSE_0ff1 }, - /* 0F F2 /dr */ { BxPrefixSSE, BX_IA_PSLLD_PqQq, BxOpcodeGroupSSE_0ff2 }, - /* 0F F2 /dm */ { BxPrefixSSE, BX_IA_PSLLD_PqQq, BxOpcodeGroupSSE_0ff2 }, - /* 0F F3 /dr */ { BxPrefixSSE, BX_IA_PSLLQ_PqQq, BxOpcodeGroupSSE_0ff3 }, - /* 0F F3 /dm */ { BxPrefixSSE, BX_IA_PSLLQ_PqQq, BxOpcodeGroupSSE_0ff3 }, - /* 0F F4 /dr */ { BxPrefixSSE, BX_IA_PMULUDQ_PqQq, BxOpcodeGroupSSE_0ff4 }, - /* 0F F4 /dm */ { BxPrefixSSE, BX_IA_PMULUDQ_PqQq, BxOpcodeGroupSSE_0ff4 }, - /* 0F F5 /dr */ { BxPrefixSSE, BX_IA_PMADDWD_PqQq, BxOpcodeGroupSSE_0ff5 }, - /* 0F F5 /dm */ { BxPrefixSSE, BX_IA_PMADDWD_PqQq, BxOpcodeGroupSSE_0ff5 }, - /* 0F F6 /dr */ { BxPrefixSSE, BX_IA_PSADBW_PqQq, BxOpcodeGroupSSE_0ff6 }, - /* 0F F6 /dm */ { BxPrefixSSE, BX_IA_PSADBW_PqQq, BxOpcodeGroupSSE_0ff6 }, - /* 0F F7 /dr */ { BxPrefixSSE, BX_IA_MASKMOVQ_PqPRq, BxOpcodeGroupSSE_0ff7R }, - /* 0F F7 /dm */ { 0, BX_IA_ERROR }, // MASKMOV SSE group - /* 0F F8 /dr */ { BxPrefixSSE, BX_IA_PSUBB_PqQq, BxOpcodeGroupSSE_0ff8 }, - /* 0F F8 /dm */ { BxPrefixSSE, BX_IA_PSUBB_PqQq, BxOpcodeGroupSSE_0ff8 }, - /* 0F F9 /dr */ { BxPrefixSSE, BX_IA_PSUBW_PqQq, BxOpcodeGroupSSE_0ff9 }, - /* 0F F9 /dm */ { BxPrefixSSE, BX_IA_PSUBW_PqQq, BxOpcodeGroupSSE_0ff9 }, - /* 0F FA /dr */ { BxPrefixSSE, BX_IA_PSUBD_PqQq, BxOpcodeGroupSSE_0ffa }, - /* 0F FA /dm */ { BxPrefixSSE, BX_IA_PSUBD_PqQq, BxOpcodeGroupSSE_0ffa }, - /* 0F FB /dr */ { BxPrefixSSE, BX_IA_PSUBQ_PqQq, BxOpcodeGroupSSE_0ffb }, - /* 0F FB /dm */ { BxPrefixSSE, BX_IA_PSUBQ_PqQq, BxOpcodeGroupSSE_0ffb }, - /* 0F FC /dr */ { BxPrefixSSE, BX_IA_PADDB_PqQq, BxOpcodeGroupSSE_0ffc }, - /* 0F FC /dm */ { BxPrefixSSE, BX_IA_PADDB_PqQq, BxOpcodeGroupSSE_0ffc }, - /* 0F FD /dr */ { BxPrefixSSE, BX_IA_PADDW_PqQq, BxOpcodeGroupSSE_0ffd }, - /* 0F FD /dm */ { BxPrefixSSE, BX_IA_PADDW_PqQq, BxOpcodeGroupSSE_0ffd }, - /* 0F FE /dr */ { BxPrefixSSE, BX_IA_PADDD_PqQq, BxOpcodeGroupSSE_0ffe }, - /* 0F FE /dm */ { BxPrefixSSE, BX_IA_PADDD_PqQq, BxOpcodeGroupSSE_0ffe }, - /* 0F FF /dr */ { 0, BX_IA_ERROR }, - /* 0F FF /dm */ { 0, BX_IA_ERROR } + /* 0F 20 /d */ { BxGroupN, BX_IA_ERROR, BxOpcodeInfoMOV_RdCd }, + /* 0F 21 /d */ { 0, BX_IA_MOV_RdDd }, + /* 0F 22 /d */ { BxGroupN, BX_IA_ERROR, BxOpcodeInfoMOV_CdRd }, + /* 0F 23 /d */ { BxTraceEnd, BX_IA_MOV_DdRd }, + /* 0F 24 /d */ { BxTraceEnd, BX_IA_MOV_RdTd }, // not implemented + /* 0F 25 /d */ { 0, BX_IA_ERROR }, + /* 0F 26 /d */ { BxTraceEnd, BX_IA_MOV_TdRd }, // not implemented + /* 0F 27 /d */ { 0, BX_IA_ERROR }, + /* 0F 28 /d */ { BxPrefixSSE, BX_IA_MOVAPS_VpsWps, BxOpcodeGroupSSE_0f28 }, + /* 0F 29 /d */ { BxPrefixSSE | BxArithDstRM, BX_IA_MOVAPS_WpsVps, BxOpcodeGroupSSE_0f29 }, + /* 0F 2A /d */ { BxPrefixSSE, BX_IA_CVTPI2PS_VpsQq, BxOpcodeGroupSSE_0f2a }, + /* 0F 2B /d */ { BxPrefixSSE, BX_IA_MOVNTPS_MpsVps, BxOpcodeGroupSSE_0f2bM }, + /* 0F 2C /d */ { BxPrefixSSE, BX_IA_CVTTPS2PI_PqWps, BxOpcodeGroupSSE_0f2c }, + /* 0F 2D /d */ { BxPrefixSSE, BX_IA_CVTPS2PI_PqWps, BxOpcodeGroupSSE_0f2d }, + /* 0F 2E /d */ { BxPrefixSSE, BX_IA_UCOMISS_VssWss, BxOpcodeGroupSSE_0f2e }, + /* 0F 2F /d */ { BxPrefixSSE, BX_IA_COMISS_VpsWps, BxOpcodeGroupSSE_0f2f }, + /* 0F 30 /d */ { 0, BX_IA_WRMSR }, + /* 0F 31 /d */ { 0, BX_IA_RDTSC }, + /* 0F 32 /d */ { 0, BX_IA_RDMSR }, + /* 0F 33 /d */ { 0, BX_IA_RDPMC }, + /* 0F 34 /d */ { BxTraceEnd, BX_IA_SYSENTER }, + /* 0F 35 /d */ { BxTraceEnd, BX_IA_SYSEXIT }, + /* 0F 36 /d */ { 0, BX_IA_ERROR }, + /* 0F 37 /d */ { 0, BX_IA_ERROR }, + /* 0F 38 /d */ { Bx3ByteOp, BX_IA_ERROR, BxOpcode3ByteTable0f38 }, // 3-byte escape + /* 0F 39 /d */ { 0, BX_IA_ERROR }, + /* 0F 3A /d */ { Bx3ByteOp | BxImmediate_Ib, BX_IA_ERROR, BxOpcode3ByteTable0f3a }, // 3-byte escape + /* 0F 3B /d */ { 0, BX_IA_ERROR }, + /* 0F 3C /d */ { 0, BX_IA_ERROR }, + /* 0F 3D /d */ { 0, BX_IA_ERROR }, + /* 0F 3E /d */ { 0, BX_IA_ERROR }, + /* 0F 3F /d */ { 0, BX_IA_ERROR }, + /* 0F 40 /d */ { 0, BX_IA_CMOVO_GdEd }, + /* 0F 41 /d */ { 0, BX_IA_CMOVNO_GdEd }, + /* 0F 42 /d */ { 0, BX_IA_CMOVB_GdEd }, + /* 0F 43 /d */ { 0, BX_IA_CMOVNB_GdEd }, + /* 0F 44 /d */ { 0, BX_IA_CMOVZ_GdEd }, + /* 0F 45 /d */ { 0, BX_IA_CMOVNZ_GdEd }, + /* 0F 46 /d */ { 0, BX_IA_CMOVBE_GdEd }, + /* 0F 47 /d */ { 0, BX_IA_CMOVNBE_GdEd }, + /* 0F 48 /d */ { 0, BX_IA_CMOVS_GdEd }, + /* 0F 49 /d */ { 0, BX_IA_CMOVNS_GdEd }, + /* 0F 4A /d */ { 0, BX_IA_CMOVP_GdEd }, + /* 0F 4B /d */ { 0, BX_IA_CMOVNP_GdEd }, + /* 0F 4C /d */ { 0, BX_IA_CMOVL_GdEd }, + /* 0F 4D /d */ { 0, BX_IA_CMOVNL_GdEd }, + /* 0F 4E /d */ { 0, BX_IA_CMOVLE_GdEd }, + /* 0F 4F /d */ { 0, BX_IA_CMOVNLE_GdEd }, + /* 0F 50 /d */ { BxPrefixSSE, BX_IA_MOVMSKPS_GdVRps, BxOpcodeGroupSSE_0f50R }, + /* 0F 51 /d */ { BxPrefixSSE, BX_IA_SQRTPS_VpsWps, BxOpcodeGroupSSE_0f51 }, + /* 0F 52 /d */ { BxPrefixSSE, BX_IA_RSQRTPS_VpsWps, BxOpcodeGroupSSE_0f52 }, + /* 0F 53 /d */ { BxPrefixSSE, BX_IA_RCPPS_VpsWps, BxOpcodeGroupSSE_0f53 }, + /* 0F 54 /d */ { BxPrefixSSE, BX_IA_ANDPS_VpsWps, BxOpcodeGroupSSE_0f54 }, + /* 0F 55 /d */ { BxPrefixSSE, BX_IA_ANDNPS_VpsWps, BxOpcodeGroupSSE_0f55 }, + /* 0F 56 /d */ { BxPrefixSSE, BX_IA_ORPS_VpsWps, BxOpcodeGroupSSE_0f56 }, + /* 0F 57 /d */ { BxPrefixSSE, BX_IA_XORPS_VpsWps, BxOpcodeGroupSSE_0f57 }, + /* 0F 58 /d */ { BxPrefixSSE, BX_IA_ADDPS_VpsWps, BxOpcodeGroupSSE_0f58 }, + /* 0F 59 /d */ { BxPrefixSSE, BX_IA_MULPS_VpsWps, BxOpcodeGroupSSE_0f59 }, + /* 0F 5A /d */ { BxPrefixSSE, BX_IA_CVTPS2PD_VpsWps, BxOpcodeGroupSSE_0f5a }, + /* 0F 5B /d */ { BxPrefixSSE, BX_IA_CVTDQ2PS_VpsWdq, BxOpcodeGroupSSE_0f5b }, + /* 0F 5C /d */ { BxPrefixSSE, BX_IA_SUBPS_VpsWps, BxOpcodeGroupSSE_0f5c }, + /* 0F 5D /d */ { BxPrefixSSE, BX_IA_MINPS_VpsWps, BxOpcodeGroupSSE_0f5d }, + /* 0F 5E /d */ { BxPrefixSSE, BX_IA_DIVPS_VpsWps, BxOpcodeGroupSSE_0f5e }, + /* 0F 5F /d */ { BxPrefixSSE, BX_IA_MAXPS_VpsWps, BxOpcodeGroupSSE_0f5f }, + /* 0F 60 /d */ { BxPrefixSSE, BX_IA_PUNPCKLBW_PqQd, BxOpcodeGroupSSE_0f60 }, + /* 0F 61 /d */ { BxPrefixSSE, BX_IA_PUNPCKLWD_PqQd, BxOpcodeGroupSSE_0f61 }, + /* 0F 62 /d */ { BxPrefixSSE, BX_IA_PUNPCKLDQ_PqQd, BxOpcodeGroupSSE_0f62 }, + /* 0F 63 /d */ { BxPrefixSSE, BX_IA_PACKSSWB_PqQq, BxOpcodeGroupSSE_0f63 }, + /* 0F 64 /d */ { BxPrefixSSE, BX_IA_PCMPGTB_PqQq, BxOpcodeGroupSSE_0f64 }, + /* 0F 65 /d */ { BxPrefixSSE, BX_IA_PCMPGTW_PqQq, BxOpcodeGroupSSE_0f65 }, + /* 0F 66 /d */ { BxPrefixSSE, BX_IA_PCMPGTD_PqQq, BxOpcodeGroupSSE_0f66 }, + /* 0F 67 /d */ { BxPrefixSSE, BX_IA_PACKUSWB_PqQq, BxOpcodeGroupSSE_0f67 }, + /* 0F 68 /d */ { BxPrefixSSE, BX_IA_PUNPCKHBW_PqQq, BxOpcodeGroupSSE_0f68 }, + /* 0F 69 /d */ { BxPrefixSSE, BX_IA_PUNPCKHWD_PqQq, BxOpcodeGroupSSE_0f69 }, + /* 0F 6A /d */ { BxPrefixSSE, BX_IA_PUNPCKHDQ_PqQq, BxOpcodeGroupSSE_0f6a }, + /* 0F 6B /d */ { BxPrefixSSE, BX_IA_PACKSSDW_PqQq, BxOpcodeGroupSSE_0f6b }, + /* 0F 6C /d */ { BxPrefixSSE66, BX_IA_PUNPCKLQDQ_VdqWdq }, + /* 0F 6D /d */ { BxPrefixSSE66, BX_IA_PUNPCKHQDQ_VdqWdq }, + /* 0F 6E /d */ { BxPrefixSSE, BX_IA_MOVD_PqEd, BxOpcodeGroupSSE_0f6e }, + /* 0F 6F /d */ { BxPrefixSSE, BX_IA_MOVQ_PqQq, BxOpcodeGroupSSE_0f6f }, + /* 0F 70 /d */ { BxPrefixSSE | BxImmediate_Ib, BX_IA_PSHUFW_PqQqIb, BxOpcodeGroupSSE_0f70 }, + /* 0F 71 /d */ { BxGroup12, BX_IA_ERROR, BxOpcodeInfoG12R }, + /* 0F 72 /d */ { BxGroup13, BX_IA_ERROR, BxOpcodeInfoG13R }, + /* 0F 73 /d */ { BxGroup14, BX_IA_ERROR, BxOpcodeInfoG14R }, + /* 0F 74 /d */ { BxPrefixSSE, BX_IA_PCMPEQB_PqQq, BxOpcodeGroupSSE_0f74 }, + /* 0F 75 /d */ { BxPrefixSSE, BX_IA_PCMPEQW_PqQq, BxOpcodeGroupSSE_0f75 }, + /* 0F 76 /d */ { BxPrefixSSE, BX_IA_PCMPEQD_PqQq, BxOpcodeGroupSSE_0f76 }, + /* 0F 77 /d */ { BxPrefixSSE, BX_IA_EMMS, BxOpcodeGroupSSE_ERR }, + /* 0F 78 /d */ { BxPrefixSSE, BX_IA_VMREAD_EdGd, BxOpcodeGroupSSE_ERR }, + /* 0F 79 /d */ { BxPrefixSSE, BX_IA_VMWRITE_GdEd, BxOpcodeGroupSSE_ERR }, + /* 0F 7A /d */ { 0, BX_IA_ERROR }, + /* 0F 7B /d */ { 0, BX_IA_ERROR }, + /* 0F 7C /d */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f7c }, + /* 0F 7D /d */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f7d }, + /* 0F 7E /d */ { BxPrefixSSE, BX_IA_MOVD_EdPd, BxOpcodeGroupSSE_0f7e }, + /* 0F 7F /d */ { BxPrefixSSE, BX_IA_MOVQ_QqPq, BxOpcodeGroupSSE_0f7f }, + /* 0F 80 /d */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JO_Jd }, + /* 0F 81 /d */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNO_Jd }, + /* 0F 82 /d */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JB_Jd }, + /* 0F 83 /d */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNB_Jd }, + /* 0F 84 /d */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JZ_Jd }, + /* 0F 85 /d */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNZ_Jd }, + /* 0F 86 /d */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JBE_Jd }, + /* 0F 87 /d */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNBE_Jd }, + /* 0F 88 /d */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JS_Jd }, + /* 0F 89 /d */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNS_Jd }, + /* 0F 8A /d */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JP_Jd }, + /* 0F 8B /d */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNP_Jd }, + /* 0F 8C /d */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JL_Jd }, + /* 0F 8D /d */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNL_Jd }, + /* 0F 8E /d */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JLE_Jd }, + /* 0F 8F /d */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNLE_Jd }, + /* 0F 90 /d */ { 0, BX_IA_SETO_Eb }, + /* 0F 91 /d */ { 0, BX_IA_SETNO_Eb }, + /* 0F 92 /d */ { 0, BX_IA_SETB_Eb }, + /* 0F 93 /d */ { 0, BX_IA_SETNB_Eb }, + /* 0F 94 /d */ { 0, BX_IA_SETZ_Eb }, + /* 0F 95 /d */ { 0, BX_IA_SETNZ_Eb }, + /* 0F 96 /d */ { 0, BX_IA_SETBE_Eb }, + /* 0F 97 /d */ { 0, BX_IA_SETNBE_Eb }, + /* 0F 98 /d */ { 0, BX_IA_SETS_Eb }, + /* 0F 99 /d */ { 0, BX_IA_SETNS_Eb }, + /* 0F 9A /d */ { 0, BX_IA_SETP_Eb }, + /* 0F 9B /d */ { 0, BX_IA_SETNP_Eb }, + /* 0F 9C /d */ { 0, BX_IA_SETL_Eb }, + /* 0F 9D /d */ { 0, BX_IA_SETNL_Eb }, + /* 0F 9E /d */ { 0, BX_IA_SETLE_Eb }, + /* 0F 9F /d */ { 0, BX_IA_SETNLE_Eb }, + /* 0F A0 /d */ { 0, BX_IA_PUSH32_FS }, + /* 0F A1 /d */ { 0, BX_IA_POP32_FS }, + /* 0F A2 /d */ { 0, BX_IA_CPUID }, + /* 0F A3 /d */ { 0, BX_IA_BT_EdGd }, + /* 0F A4 /d */ { BxImmediate_Ib, BX_IA_SHLD_EdGd }, + /* 0F A5 /d */ { 0, BX_IA_SHLD_EdGd }, + /* 0F A6 /d */ { BxTraceEnd, BX_IA_CMPXCHG_XBTS }, // not implemented + /* 0F A7 /d */ { BxTraceEnd, BX_IA_CMPXCHG_IBTS }, // not implemented + /* 0F A8 /d */ { 0, BX_IA_PUSH32_GS }, + /* 0F A9 /d */ { 0, BX_IA_POP32_GS }, + /* 0F AA /d */ { BxTraceEnd, BX_IA_RSM }, + /* 0F AB /d */ { BxLockable, BX_IA_BTS_EdGd }, + /* 0F AC /d */ { BxImmediate_Ib, BX_IA_SHRD_EdGd }, + /* 0F AD /d */ { 0, BX_IA_SHRD_EdGd }, + /* 0F AE /d */ { BxGroup15, BX_IA_ERROR, BxOpcodeInfoG15 }, + /* 0F AF /d */ { 0, BX_IA_IMUL_GdEd }, + /* 0F B0 /d */ { BxLockable, BX_IA_CMPXCHG_EbGb }, + /* 0F B1 /d */ { BxLockable, BX_IA_CMPXCHG_EdGd }, + /* 0F B2 /d */ { 0, BX_IA_LSS_GdMp }, + /* 0F B3 /d */ { BxLockable, BX_IA_BTR_EdGd }, + /* 0F B4 /d */ { 0, BX_IA_LFS_GdMp }, + /* 0F B5 /d */ { 0, BX_IA_LGS_GdMp }, + /* 0F B6 /d */ { 0, BX_IA_MOVZX_GdEb }, + /* 0F B7 /d */ { 0, BX_IA_MOVZX_GdEw }, + /* 0F B8 /d */ { BxPrefixSSEF3, BX_IA_POPCNT_GdEd }, + /* 0F B9 /d */ { BxTraceEnd, BX_IA_UD2B }, + /* 0F BA /d */ { BxGroup8, BX_IA_ERROR, BxOpcodeInfoG8EdIb }, + /* 0F BB /d */ { BxLockable, BX_IA_BTC_EdGd }, + /* 0F BC /d */ { 0, BX_IA_BSF_GdEd }, + /* 0F BD /d */ { 0, BX_IA_BSR_GdEd }, + /* 0F BE /d */ { 0, BX_IA_MOVSX_GdEb }, + /* 0F BF /d */ { 0, BX_IA_MOVSX_GdEw }, + /* 0F C0 /d */ { BxLockable, BX_IA_XADD_EbGb }, + /* 0F C1 /d */ { BxLockable, BX_IA_XADD_EdGd }, + /* 0F C2 /d */ { BxPrefixSSE | BxImmediate_Ib, BX_IA_CMPPS_VpsWpsIb, BxOpcodeGroupSSE_0fc2 }, + /* 0F C3 /d */ { BxPrefixSSE, BX_IA_MOVNTI_MdGd, BxOpcodeGroupSSE_ERR }, + /* 0F C4 /d */ { BxPrefixSSE | BxImmediate_Ib, BX_IA_PINSRW_PqEwIb, BxOpcodeGroupSSE_0fc4 }, + /* 0F C5 /d */ { BxPrefixSSE | BxImmediate_Ib, BX_IA_PEXTRW_GdPqIb, BxOpcodeGroupSSE_0fc5R }, + /* 0F C6 /d */ { BxPrefixSSE | BxImmediate_Ib, BX_IA_SHUFPS_VpsWpsIb, BxOpcodeGroupSSE_0fc6 }, + /* 0F C7 /d */ { BxGroup9, BX_IA_ERROR, BxOpcodeInfoG9M }, + /* 0F C8 /d */ { 0, BX_IA_BSWAP_ERX }, + /* 0F C9 /d */ { 0, BX_IA_BSWAP_ERX }, + /* 0F CA /d */ { 0, BX_IA_BSWAP_ERX }, + /* 0F CB /d */ { 0, BX_IA_BSWAP_ERX }, + /* 0F CC /d */ { 0, BX_IA_BSWAP_ERX }, + /* 0F CD /d */ { 0, BX_IA_BSWAP_ERX }, + /* 0F CE /d */ { 0, BX_IA_BSWAP_ERX }, + /* 0F CF /d */ { 0, BX_IA_BSWAP_ERX }, + /* 0F D0 /d */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0fd0 }, + /* 0F D1 /d */ { BxPrefixSSE, BX_IA_PSRLW_PqQq, BxOpcodeGroupSSE_0fd1 }, + /* 0F D2 /d */ { BxPrefixSSE, BX_IA_PSRLD_PqQq, BxOpcodeGroupSSE_0fd2 }, + /* 0F D3 /d */ { BxPrefixSSE, BX_IA_PSRLQ_PqQq, BxOpcodeGroupSSE_0fd3 }, + /* 0F D4 /d */ { BxPrefixSSE, BX_IA_PADDQ_PqQq, BxOpcodeGroupSSE_0fd4 }, + /* 0F D5 /d */ { BxPrefixSSE, BX_IA_PMULLW_PqQq, BxOpcodeGroupSSE_0fd5 }, + /* 0F D6 /d */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0fd6 }, + /* 0F D7 /d */ { BxPrefixSSE, BX_IA_PMOVMSKB_GdPRq, BxOpcodeGroupSSE_0fd7R }, + /* 0F D8 /d */ { BxPrefixSSE, BX_IA_PSUBUSB_PqQq, BxOpcodeGroupSSE_0fd8 }, + /* 0F D9 /d */ { BxPrefixSSE, BX_IA_PSUBUSW_PqQq, BxOpcodeGroupSSE_0fd9 }, + /* 0F DA /d */ { BxPrefixSSE, BX_IA_PMINUB_PqQq, BxOpcodeGroupSSE_0fda }, + /* 0F DB /d */ { BxPrefixSSE, BX_IA_PAND_PqQq, BxOpcodeGroupSSE_0fdb }, + /* 0F DC /d */ { BxPrefixSSE, BX_IA_PADDUSB_PqQq, BxOpcodeGroupSSE_0fdc }, + /* 0F DD /d */ { BxPrefixSSE, BX_IA_PADDUSW_PqQq, BxOpcodeGroupSSE_0fdd }, + /* 0F DE /d */ { BxPrefixSSE, BX_IA_PMAXUB_PqQq, BxOpcodeGroupSSE_0fde }, + /* 0F DF /d */ { BxPrefixSSE, BX_IA_PANDN_PqQq, BxOpcodeGroupSSE_0fdf }, + /* 0F E0 /d */ { BxPrefixSSE, BX_IA_PAVGB_PqQq, BxOpcodeGroupSSE_0fe0 }, + /* 0F E1 /d */ { BxPrefixSSE, BX_IA_PSRAW_PqQq, BxOpcodeGroupSSE_0fe1 }, + /* 0F E2 /d */ { BxPrefixSSE, BX_IA_PSRAD_PqQq, BxOpcodeGroupSSE_0fe2 }, + /* 0F E3 /d */ { BxPrefixSSE, BX_IA_PAVGW_PqQq, BxOpcodeGroupSSE_0fe3 }, + /* 0F E4 /d */ { BxPrefixSSE, BX_IA_PMULHUW_PqQq, BxOpcodeGroupSSE_0fe4 }, + /* 0F E5 /d */ { BxPrefixSSE, BX_IA_PMULHW_PqQq, BxOpcodeGroupSSE_0fe5 }, + /* 0F E6 /d */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0fe6 }, + /* 0F E7 /d */ { BxPrefixSSE, BX_IA_MOVNTQ_MqPq, BxOpcodeGroupSSE_0fe7M }, + /* 0F E8 /d */ { BxPrefixSSE, BX_IA_PSUBSB_PqQq, BxOpcodeGroupSSE_0fe8 }, + /* 0F E9 /d */ { BxPrefixSSE, BX_IA_PSUBSW_PqQq, BxOpcodeGroupSSE_0fe9 }, + /* 0F EA /d */ { BxPrefixSSE, BX_IA_PMINSW_PqQq, BxOpcodeGroupSSE_0fea }, + /* 0F EB /d */ { BxPrefixSSE, BX_IA_POR_PqQq, BxOpcodeGroupSSE_0feb }, + /* 0F EC /d */ { BxPrefixSSE, BX_IA_PADDSB_PqQq, BxOpcodeGroupSSE_0fec }, + /* 0F ED /d */ { BxPrefixSSE, BX_IA_PADDSW_PqQq, BxOpcodeGroupSSE_0fed }, + /* 0F EE /d */ { BxPrefixSSE, BX_IA_PMAXSW_PqQq, BxOpcodeGroupSSE_0fee }, + /* 0F EF /d */ { BxPrefixSSE, BX_IA_PXOR_PqQq, BxOpcodeGroupSSE_0fef }, + /* 0F F0 /d */ { BxPrefixSSEF2, BX_IA_LDDQU_VdqMdq }, + /* 0F F1 /d */ { BxPrefixSSE, BX_IA_PSLLW_PqQq, BxOpcodeGroupSSE_0ff1 }, + /* 0F F2 /d */ { BxPrefixSSE, BX_IA_PSLLD_PqQq, BxOpcodeGroupSSE_0ff2 }, + /* 0F F3 /d */ { BxPrefixSSE, BX_IA_PSLLQ_PqQq, BxOpcodeGroupSSE_0ff3 }, + /* 0F F4 /d */ { BxPrefixSSE, BX_IA_PMULUDQ_PqQq, BxOpcodeGroupSSE_0ff4 }, + /* 0F F5 /d */ { BxPrefixSSE, BX_IA_PMADDWD_PqQq, BxOpcodeGroupSSE_0ff5 }, + /* 0F F6 /d */ { BxPrefixSSE, BX_IA_PSADBW_PqQq, BxOpcodeGroupSSE_0ff6 }, + /* 0F F7 /d */ { BxPrefixSSE, BX_IA_MASKMOVQ_PqPRq, BxOpcodeGroupSSE_0ff7R }, + /* 0F F8 /d */ { BxPrefixSSE, BX_IA_PSUBB_PqQq, BxOpcodeGroupSSE_0ff8 }, + /* 0F F9 /d */ { BxPrefixSSE, BX_IA_PSUBW_PqQq, BxOpcodeGroupSSE_0ff9 }, + /* 0F FA /d */ { BxPrefixSSE, BX_IA_PSUBD_PqQq, BxOpcodeGroupSSE_0ffa }, + /* 0F FB /d */ { BxPrefixSSE, BX_IA_PSUBQ_PqQq, BxOpcodeGroupSSE_0ffb }, + /* 0F FC /d */ { BxPrefixSSE, BX_IA_PADDB_PqQq, BxOpcodeGroupSSE_0ffc }, + /* 0F FD /d */ { BxPrefixSSE, BX_IA_PADDW_PqQq, BxOpcodeGroupSSE_0ffd }, + /* 0F FE /d */ { BxPrefixSSE, BX_IA_PADDD_PqQq, BxOpcodeGroupSSE_0ffe }, + /* 0F FF /d */ { 0, BX_IA_ERROR } }; int BX_CPP_AttrRegparmN(3) @@ -2416,9 +1356,7 @@ fetch_b1: i->setB1(b1); - unsigned offset = os_32 << 9; // *512 - - unsigned index = (b1+offset) << 1; + unsigned index = b1 + (os_32 << 9); // *512 unsigned attr = BxOpcodeInfo32[index].Attr; @@ -2464,7 +1402,6 @@ fetch_b1: } mod_mem = 1; - index++; // /m form i->setRm(BX_TMP_REGISTER); i->setSibBase(rm); // initialize with rm to use BxResolve32Base @@ -2616,6 +1553,9 @@ modrm_done: case BxGroupN: OpcodeInfoPtr = &(OpcodeInfoPtr->AnotherArray[nnn]); break; + case BxSplitGroupN: + OpcodeInfoPtr = &(OpcodeInfoPtr->AnotherArray[nnn + (mod_mem << 3)]); + break; case Bx3ByteOp: OpcodeInfoPtr = &(OpcodeInfoPtr->AnotherArray[b3]); break; @@ -2631,7 +1571,10 @@ modrm_done: } continue; case BxFPEscape: - OpcodeInfoPtr = &(OpcodeInfoPtr->AnotherArray[b2 & 0x3f]); + if (mod_mem) + OpcodeInfoPtr = &(OpcodeInfoPtr->AnotherArray[nnn]); + else + OpcodeInfoPtr = &(OpcodeInfoPtr->AnotherArray[(b2 & 0x3f) + 8]); break; default: BX_PANIC(("fetchdecode: Unknown opcode group")); diff --git a/bochs/cpu/fetchdecode.h b/bochs/cpu/fetchdecode.h index 991a5ca6e..9fa3cde9f 100755 --- a/bochs/cpu/fetchdecode.h +++ b/bochs/cpu/fetchdecode.h @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////// -// $Id: fetchdecode.h,v 1.108 2011-01-20 16:24:42 sshwarts Exp $ +// $Id: fetchdecode.h,v 1.109 2011-01-21 16:07:51 sshwarts Exp $ ///////////////////////////////////////////////////////////////////////// // // Copyright (c) 2005-2011 Stanislav Shwartsman @@ -375,7 +375,18 @@ static const BxOpcodeInfo_t BxOpcodeInfoG6[8] = { /* Group 7 */ /* ******* */ -static const BxOpcodeInfo_t BxOpcodeInfoG7R[64] = { +static const BxOpcodeInfo_t BxOpcodeInfoG7[64+8] = { + /* /m form */ + /* 0 */ { 0, BX_IA_SGDT_Ms }, + /* 1 */ { 0, BX_IA_SIDT_Ms }, + /* 2 */ { 0, BX_IA_LGDT_Ms }, + /* 3 */ { 0, BX_IA_LIDT_Ms }, + /* 4 */ { 0, BX_IA_SMSW_Ew }, + /* 5 */ { 0, BX_IA_ERROR }, + /* 6 */ { BxTraceEnd, BX_IA_LMSW_Ew }, + /* 7 */ { BxTraceEnd, BX_IA_INVLPG }, + + /* /r form */ /* 0F 01 C0 */ { 0, BX_IA_ERROR }, /* 0F 01 C1 */ { BxTraceEnd | BxPrefixSSE, BX_IA_VMCALL, BxOpcodeGroupSSE_ERR }, /* 0F 01 C2 */ { BxTraceEnd | BxPrefixSSE, BX_IA_VMLAUNCH, BxOpcodeGroupSSE_ERR }, @@ -432,13 +443,8 @@ static const BxOpcodeInfo_t BxOpcodeInfoG7R[64] = { /* 0F 01 F5 */ { BxTraceEnd, BX_IA_LMSW_Ew }, /* 0F 01 F6 */ { BxTraceEnd, BX_IA_LMSW_Ew }, /* 0F 01 F7 */ { BxTraceEnd, BX_IA_LMSW_Ew }, -#if BX_SUPPORT_X86_64 - /* 0F 01 F8 */ { 0, BX_IA_SWAPGS }, - /* 0F 01 F9 */ { 0, BX_IA_RDTSCP }, -#else /* 0F 01 F8 */ { 0, BX_IA_ERROR }, - /* 0F 01 F9 */ { 0, BX_IA_ERROR }, -#endif + /* 0F 01 F9 */ { 0, BX_IA_RDTSCP }, /* 0F 01 FA */ { 0, BX_IA_ERROR }, /* 0F 01 FB */ { 0, BX_IA_ERROR }, /* 0F 01 FC */ { 0, BX_IA_ERROR }, @@ -447,20 +453,9 @@ static const BxOpcodeInfo_t BxOpcodeInfoG7R[64] = { /* 0F 01 FF */ { 0, BX_IA_ERROR } }; -static const BxOpcodeInfo_t BxOpcodeInfoG7M[8] = { - // attributes defined in main area - /* 0 */ { 0, BX_IA_SGDT_Ms }, - /* 1 */ { 0, BX_IA_SIDT_Ms }, - /* 2 */ { 0, BX_IA_LGDT_Ms }, - /* 3 */ { 0, BX_IA_LIDT_Ms }, - /* 4 */ { 0, BX_IA_SMSW_Ew }, - /* 5 */ { 0, BX_IA_ERROR }, - /* 6 */ { BxTraceEnd, BX_IA_LMSW_Ew }, - /* 7 */ { BxTraceEnd, BX_IA_INVLPG } -}; - #if BX_SUPPORT_X86_64 -static const BxOpcodeInfo_t BxOpcodeInfo64G7M[8] = { +static const BxOpcodeInfo_t BxOpcodeInfoG7q[64+8] = { + /* /m form */ /* 0 */ { 0, BX_IA_SGDT64_Ms }, /* 1 */ { 0, BX_IA_SIDT64_Ms }, /* 2 */ { 0, BX_IA_LGDT64_Ms }, @@ -468,7 +463,73 @@ static const BxOpcodeInfo_t BxOpcodeInfo64G7M[8] = { /* 4 */ { 0, BX_IA_SMSW_Ew }, /* 5 */ { 0, BX_IA_ERROR }, /* 6 */ { BxTraceEnd, BX_IA_LMSW_Ew }, - /* 7 */ { BxTraceEnd, BX_IA_INVLPG } + /* 7 */ { BxTraceEnd, BX_IA_INVLPG }, + + /* /r form */ + /* 0F 01 C0 */ { 0, BX_IA_ERROR }, + /* 0F 01 C1 */ { BxTraceEnd | BxPrefixSSE, BX_IA_VMCALL, BxOpcodeGroupSSE_ERR }, + /* 0F 01 C2 */ { BxTraceEnd | BxPrefixSSE, BX_IA_VMLAUNCH, BxOpcodeGroupSSE_ERR }, + /* 0F 01 C3 */ { BxTraceEnd | BxPrefixSSE, BX_IA_VMRESUME, BxOpcodeGroupSSE_ERR }, + /* 0F 01 C4 */ { BxTraceEnd | BxPrefixSSE, BX_IA_VMXOFF, BxOpcodeGroupSSE_ERR }, + /* 0F 01 C5 */ { 0, BX_IA_ERROR }, + /* 0F 01 C6 */ { 0, BX_IA_ERROR }, + /* 0F 01 C7 */ { 0, BX_IA_ERROR }, + /* 0F 01 C8 */ { BxPrefixSSE, BX_IA_MONITOR, BxOpcodeGroupSSE_ERR }, + /* 0F 01 C9 */ { BxPrefixSSE | BxTraceEnd, BX_IA_MWAIT, BxOpcodeGroupSSE_ERR }, + /* 0F 01 CA */ { 0, BX_IA_ERROR }, + /* 0F 01 CB */ { 0, BX_IA_ERROR }, + /* 0F 01 CC */ { 0, BX_IA_ERROR }, + /* 0F 01 CD */ { 0, BX_IA_ERROR }, + /* 0F 01 CE */ { 0, BX_IA_ERROR }, + /* 0F 01 CF */ { 0, BX_IA_ERROR }, + /* 0F 01 D0 */ { BxPrefixSSE, BX_IA_XGETBV, BxOpcodeGroupSSE_ERR }, + /* 0F 01 D1 */ { BxPrefixSSE, BX_IA_XSETBV, BxOpcodeGroupSSE_ERR }, + /* 0F 01 D2 */ { 0, BX_IA_ERROR }, + /* 0F 01 D3 */ { 0, BX_IA_ERROR }, + /* 0F 01 D4 */ { 0, BX_IA_ERROR }, + /* 0F 01 D5 */ { 0, BX_IA_ERROR }, + /* 0F 01 D6 */ { 0, BX_IA_ERROR }, + /* 0F 01 D7 */ { 0, BX_IA_ERROR }, + /* 0F 01 D8 */ { 0, BX_IA_ERROR }, + /* 0F 01 D9 */ { 0, BX_IA_ERROR }, + /* 0F 01 DA */ { 0, BX_IA_ERROR }, + /* 0F 01 DB */ { 0, BX_IA_ERROR }, + /* 0F 01 DC */ { 0, BX_IA_ERROR }, + /* 0F 01 DD */ { 0, BX_IA_ERROR }, + /* 0F 01 DE */ { 0, BX_IA_ERROR }, + /* 0F 01 DF */ { 0, BX_IA_ERROR }, + /* 0F 01 E0 */ { 0, BX_IA_SMSW_Ew }, + /* 0F 01 E1 */ { 0, BX_IA_SMSW_Ew }, + /* 0F 01 E2 */ { 0, BX_IA_SMSW_Ew }, + /* 0F 01 E3 */ { 0, BX_IA_SMSW_Ew }, + /* 0F 01 E4 */ { 0, BX_IA_SMSW_Ew }, + /* 0F 01 E5 */ { 0, BX_IA_SMSW_Ew }, + /* 0F 01 E6 */ { 0, BX_IA_SMSW_Ew }, + /* 0F 01 E7 */ { 0, BX_IA_SMSW_Ew }, + /* 0F 01 E8 */ { 0, BX_IA_ERROR }, + /* 0F 01 E9 */ { 0, BX_IA_ERROR }, + /* 0F 01 EA */ { 0, BX_IA_ERROR }, + /* 0F 01 EB */ { 0, BX_IA_ERROR }, + /* 0F 01 EC */ { 0, BX_IA_ERROR }, + /* 0F 01 ED */ { 0, BX_IA_ERROR }, + /* 0F 01 EE */ { 0, BX_IA_ERROR }, + /* 0F 01 EF */ { 0, BX_IA_ERROR }, + /* 0F 01 F0 */ { BxTraceEnd, BX_IA_LMSW_Ew }, + /* 0F 01 F1 */ { BxTraceEnd, BX_IA_LMSW_Ew }, + /* 0F 01 F2 */ { BxTraceEnd, BX_IA_LMSW_Ew }, + /* 0F 01 F3 */ { BxTraceEnd, BX_IA_LMSW_Ew }, + /* 0F 01 F4 */ { BxTraceEnd, BX_IA_LMSW_Ew }, + /* 0F 01 F5 */ { BxTraceEnd, BX_IA_LMSW_Ew }, + /* 0F 01 F6 */ { BxTraceEnd, BX_IA_LMSW_Ew }, + /* 0F 01 F7 */ { BxTraceEnd, BX_IA_LMSW_Ew }, + /* 0F 01 F8 */ { 0, BX_IA_SWAPGS }, + /* 0F 01 F9 */ { 0, BX_IA_RDTSCP }, + /* 0F 01 FA */ { 0, BX_IA_ERROR }, + /* 0F 01 FB */ { 0, BX_IA_ERROR }, + /* 0F 01 FC */ { 0, BX_IA_ERROR }, + /* 0F 01 FD */ { 0, BX_IA_ERROR }, + /* 0F 01 FE */ { 0, BX_IA_ERROR }, + /* 0F 01 FF */ { 0, BX_IA_ERROR } }; #endif @@ -638,7 +699,18 @@ static const BxOpcodeInfo_t BxOpcodeInfoG14R[8] = { /* Group 15 */ /* ******** */ -static const BxOpcodeInfo_t BxOpcodeInfoG15M[8] = { +static const BxOpcodeInfo_t BxOpcodeInfoG15[8*2] = { + /* /r form */ + /* 0 */ { 0, BX_IA_ERROR }, + /* 1 */ { 0, BX_IA_ERROR }, + /* 2 */ { 0, BX_IA_ERROR }, + /* 3 */ { 0, BX_IA_ERROR }, + /* 4 */ { 0, BX_IA_ERROR }, + /* 5 */ { BxPrefixSSE, BX_IA_LFENCE, BxOpcodeGroupSSE_ERR }, + /* 6 */ { BxPrefixSSE, BX_IA_MFENCE, BxOpcodeGroupSSE_ERR }, + /* 7 */ { BxPrefixSSE, BX_IA_SFENCE, BxOpcodeGroupSSE_ERR }, + + /* /m form */ /* 0 */ { BxPrefixSSE, BX_IA_FXSAVE, BxOpcodeGroupSSE_ERR }, /* 1 */ { BxPrefixSSE, BX_IA_FXRSTOR, BxOpcodeGroupSSE_ERR }, /* 2 */ { BxPrefixSSE, BX_IA_LDMXCSR, BxOpcodeGroupSSE_ERR }, @@ -649,19 +721,9 @@ static const BxOpcodeInfo_t BxOpcodeInfoG15M[8] = { /* 7 */ { BxPrefixSSE, BX_IA_CLFLUSH, BxOpcodeGroupSSE_ERR } }; -static const BxOpcodeInfo_t BxOpcodeInfoG15R[8] = { - /* 0 */ { 0, BX_IA_ERROR }, - /* 1 */ { 0, BX_IA_ERROR }, - /* 2 */ { 0, BX_IA_ERROR }, - /* 3 */ { 0, BX_IA_ERROR }, - /* 4 */ { 0, BX_IA_ERROR }, - /* 5 */ { BxPrefixSSE, BX_IA_LFENCE, BxOpcodeGroupSSE_ERR }, - /* 6 */ { BxPrefixSSE, BX_IA_MFENCE, BxOpcodeGroupSSE_ERR }, - /* 7 */ { BxPrefixSSE, BX_IA_SFENCE, BxOpcodeGroupSSE_ERR } -}; - #if BX_SUPPORT_X86_64 -static const BxOpcodeInfo_t BxOpcodeInfoG15R64[8] = { +static const BxOpcodeInfo_t BxOpcodeInfoG15q[8*2] = { + /* /r form */ /* 0 */ { BxPrefixSSEF3, BX_IA_RDFSBASE }, /* 1 */ { BxPrefixSSEF3, BX_IA_RDGSBASE }, /* 2 */ { BxPrefixSSEF3, BX_IA_WRFSBASE }, @@ -669,7 +731,17 @@ static const BxOpcodeInfo_t BxOpcodeInfoG15R64[8] = { /* 4 */ { 0, BX_IA_ERROR }, /* 5 */ { BxPrefixSSE, BX_IA_LFENCE, BxOpcodeGroupSSE_ERR }, /* 6 */ { BxPrefixSSE, BX_IA_MFENCE, BxOpcodeGroupSSE_ERR }, - /* 7 */ { BxPrefixSSE, BX_IA_SFENCE, BxOpcodeGroupSSE_ERR } + /* 7 */ { BxPrefixSSE, BX_IA_SFENCE, BxOpcodeGroupSSE_ERR }, + + /* /m form */ + /* 0 */ { BxPrefixSSE, BX_IA_FXSAVE, BxOpcodeGroupSSE_ERR }, + /* 1 */ { BxPrefixSSE, BX_IA_FXRSTOR, BxOpcodeGroupSSE_ERR }, + /* 2 */ { BxPrefixSSE, BX_IA_LDMXCSR, BxOpcodeGroupSSE_ERR }, + /* 3 */ { BxPrefixSSE, BX_IA_STMXCSR, BxOpcodeGroupSSE_ERR }, + /* 4 */ { BxPrefixSSE, BX_IA_XSAVE, BxOpcodeGroupSSE_ERR }, + /* 5 */ { BxPrefixSSE, BX_IA_XRSTOR, BxOpcodeGroupSSE_ERR }, + /* 6 */ { 0, BX_IA_ERROR }, + /* 7 */ { BxPrefixSSE, BX_IA_CLFLUSH, BxOpcodeGroupSSE_ERR } }; #endif diff --git a/bochs/cpu/fetchdecode64.cc b/bochs/cpu/fetchdecode64.cc index 76df0cafa..abc859954 100644 --- a/bochs/cpu/fetchdecode64.cc +++ b/bochs/cpu/fetchdecode64.cc @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////// -// $Id: fetchdecode64.cc,v 1.289 2011-01-20 16:24:42 sshwarts Exp $ +// $Id: fetchdecode64.cc,v 1.290 2011-01-21 16:07:51 sshwarts Exp $ ///////////////////////////////////////////////////////////////////////// // // Copyright (C) 2001-2011 The Bochs Project @@ -150,3091 +150,1555 @@ static unsigned sreg_mod1or2_base32[16] = { // table of all Bochs opcodes extern struct bxIAOpcodeTable BxOpcodesTable[]; -// 512*2 entries for 16bit operand size -// 512*2 entries for 32bit operand size -// 512*2 entries for 64bit operand size +// 512 entries for 16bit operand size +// 512 entries for 32bit operand size +// 512 entries for 64bit operand size -static const BxOpcodeInfo_t BxOpcodeInfo64[512*3*2] = { - // 512 (/r) + 512 (/m) entries for 16bit mode - /* 00 /wr */ { BxArithDstRM, BX_IA_ADD_EbGb }, - /* 00 /wm */ { BxLockable, BX_IA_ADD_EbGb }, - /* 01 /wr */ { BxArithDstRM, BX_IA_ADD_EwGw }, - /* 01 /wm */ { BxLockable, BX_IA_ADD_EwGw }, - /* 02 /wr */ { 0, BX_IA_ADD_GbEb }, - /* 02 /wm */ { 0, BX_IA_ADD_GbEb }, - /* 03 /wr */ { 0, BX_IA_ADD_GwEw }, - /* 03 /wm */ { 0, BX_IA_ADD_GwEw }, - /* 04 /wr */ { BxImmediate_Ib, BX_IA_ADD_ALIb }, - /* 04 /wm */ { BxImmediate_Ib, BX_IA_ADD_ALIb }, - /* 05 /wr */ { BxImmediate_Iw, BX_IA_ADD_AXIw }, - /* 05 /wm */ { BxImmediate_Iw, BX_IA_ADD_AXIw }, - /* 06 /wr */ { 0, BX_IA_ERROR }, - /* 06 /wm */ { 0, BX_IA_ERROR }, - /* 07 /wr */ { 0, BX_IA_ERROR }, - /* 07 /wm */ { 0, BX_IA_ERROR }, - /* 08 /wr */ { BxArithDstRM, BX_IA_OR_EbGb }, - /* 08 /wm */ { BxLockable, BX_IA_OR_EbGb }, - /* 09 /wr */ { BxArithDstRM, BX_IA_OR_EwGw }, - /* 09 /wm */ { BxLockable, BX_IA_OR_EwGw }, - /* 0A /wr */ { 0, BX_IA_OR_GbEb }, - /* 0A /wm */ { 0, BX_IA_OR_GbEb }, - /* 0B /wr */ { 0, BX_IA_OR_GwEw }, - /* 0B /wm */ { 0, BX_IA_OR_GwEw }, - /* 0C /wr */ { BxImmediate_Ib, BX_IA_OR_ALIb }, - /* 0C /wm */ { BxImmediate_Ib, BX_IA_OR_ALIb }, - /* 0D /wr */ { BxImmediate_Iw, BX_IA_OR_AXIw }, - /* 0D /wm */ { BxImmediate_Iw, BX_IA_OR_AXIw }, - /* 0E /wr */ { 0, BX_IA_ERROR }, - /* 0E /wm */ { 0, BX_IA_ERROR }, - /* 0F /wr */ { 0, BX_IA_ERROR }, // 2-byte escape - /* 0F /wm */ { 0, BX_IA_ERROR }, // 2-byte escape - /* 10 /wr */ { BxArithDstRM, BX_IA_ADC_EbGb }, - /* 10 /wm */ { BxLockable, BX_IA_ADC_EbGb }, - /* 11 /wr */ { BxArithDstRM, BX_IA_ADC_EwGw }, - /* 11 /wm */ { BxLockable, BX_IA_ADC_EwGw }, - /* 12 /wr */ { 0, BX_IA_ADC_GbEb }, - /* 12 /wm */ { 0, BX_IA_ADC_GbEb }, - /* 13 /wr */ { 0, BX_IA_ADC_GwEw }, - /* 13 /wm */ { 0, BX_IA_ADC_GwEw }, - /* 14 /wr */ { BxImmediate_Ib, BX_IA_ADC_ALIb }, - /* 14 /wm */ { BxImmediate_Ib, BX_IA_ADC_ALIb }, - /* 15 /wr */ { BxImmediate_Iw, BX_IA_ADC_AXIw }, - /* 15 /wm */ { BxImmediate_Iw, BX_IA_ADC_AXIw }, - /* 16 /wr */ { 0, BX_IA_ERROR }, - /* 16 /wm */ { 0, BX_IA_ERROR }, - /* 17 /wr */ { 0, BX_IA_ERROR }, - /* 17 /wm */ { 0, BX_IA_ERROR }, - /* 18 /wr */ { BxArithDstRM, BX_IA_SBB_EbGb }, - /* 18 /wm */ { BxLockable, BX_IA_SBB_EbGb }, - /* 19 /wr */ { BxArithDstRM, BX_IA_SBB_EwGw }, - /* 19 /wm */ { BxLockable, BX_IA_SBB_EwGw }, - /* 1A /wr */ { 0, BX_IA_SBB_GbEb }, - /* 1A /wm */ { 0, BX_IA_SBB_GbEb }, - /* 1B /wr */ { 0, BX_IA_SBB_GwEw }, - /* 1B /wm */ { 0, BX_IA_SBB_GwEw }, - /* 1C /wr */ { BxImmediate_Ib, BX_IA_SBB_ALIb }, - /* 1C /wm */ { BxImmediate_Ib, BX_IA_SBB_ALIb }, - /* 1D /wr */ { BxImmediate_Iw, BX_IA_SBB_AXIw }, - /* 1D /wm */ { BxImmediate_Iw, BX_IA_SBB_AXIw }, - /* 1E /wr */ { 0, BX_IA_ERROR }, - /* 1E /wm */ { 0, BX_IA_ERROR }, - /* 1F /wr */ { 0, BX_IA_ERROR }, - /* 1F /wm */ { 0, BX_IA_ERROR }, - /* 20 /wr */ { BxArithDstRM, BX_IA_AND_EbGb }, - /* 20 /wm */ { BxLockable, BX_IA_AND_EbGb }, - /* 21 /wr */ { BxArithDstRM, BX_IA_AND_EwGw }, - /* 21 /wm */ { BxLockable, BX_IA_AND_EwGw }, - /* 22 /wr */ { 0, BX_IA_AND_GbEb }, - /* 22 /wm */ { 0, BX_IA_AND_GbEb }, - /* 23 /wr */ { 0, BX_IA_AND_GwEw }, - /* 23 /wm */ { 0, BX_IA_AND_GwEw }, - /* 24 /wr */ { BxImmediate_Ib, BX_IA_AND_ALIb }, - /* 24 /wm */ { BxImmediate_Ib, BX_IA_AND_ALIb }, - /* 25 /wr */ { BxImmediate_Iw, BX_IA_AND_AXIw }, - /* 25 /wm */ { BxImmediate_Iw, BX_IA_AND_AXIw }, - /* 26 /wr */ { 0, BX_IA_ERROR }, // ES: - /* 26 /wm */ { 0, BX_IA_ERROR }, // ES: - /* 27 /wr */ { 0, BX_IA_ERROR }, - /* 27 /wm */ { 0, BX_IA_ERROR }, - /* 28 /wr */ { BxArithDstRM, BX_IA_SUB_EbGb }, - /* 28 /wm */ { BxLockable, BX_IA_SUB_EbGb }, - /* 29 /wr */ { BxArithDstRM, BX_IA_SUB_EwGw }, - /* 29 /wm */ { BxLockable, BX_IA_SUB_EwGw }, - /* 2A /wr */ { 0, BX_IA_SUB_GbEb }, - /* 2A /wm */ { 0, BX_IA_SUB_GbEb }, - /* 2B /wr */ { 0, BX_IA_SUB_GwEw }, - /* 2B /wm */ { 0, BX_IA_SUB_GwEw }, - /* 2C /wr */ { BxImmediate_Ib, BX_IA_SUB_ALIb }, - /* 2C /wm */ { BxImmediate_Ib, BX_IA_SUB_ALIb }, - /* 2D /wr */ { BxImmediate_Iw, BX_IA_SUB_AXIw }, - /* 2D /wm */ { BxImmediate_Iw, BX_IA_SUB_AXIw }, - /* 2E /wr */ { 0, BX_IA_ERROR }, // CS: - /* 2E /wm */ { 0, BX_IA_ERROR }, // CS: - /* 2F /wr */ { 0, BX_IA_ERROR }, - /* 2F /wm */ { 0, BX_IA_ERROR }, - /* 30 /wr */ { BxArithDstRM, BX_IA_XOR_EbGb }, - /* 30 /wm */ { BxLockable, BX_IA_XOR_EbGb }, - /* 31 /wr */ { BxArithDstRM, BX_IA_XOR_EwGw }, - /* 31 /wm */ { BxLockable, BX_IA_XOR_EwGw }, - /* 32 /wr */ { 0, BX_IA_XOR_GbEb }, - /* 32 /wm */ { 0, BX_IA_XOR_GbEb }, - /* 33 /wr */ { 0, BX_IA_XOR_GwEw }, - /* 33 /wm */ { 0, BX_IA_XOR_GwEw }, - /* 34 /wr */ { BxImmediate_Ib, BX_IA_XOR_ALIb }, - /* 34 /wm */ { BxImmediate_Ib, BX_IA_XOR_ALIb }, - /* 35 /wr */ { BxImmediate_Iw, BX_IA_XOR_AXIw }, - /* 35 /wm */ { BxImmediate_Iw, BX_IA_XOR_AXIw }, - /* 36 /wr */ { 0, BX_IA_ERROR }, // SS: - /* 36 /wm */ { 0, BX_IA_ERROR }, // SS: - /* 37 /wr */ { 0, BX_IA_ERROR }, - /* 37 /wm */ { 0, BX_IA_ERROR }, - /* 38 /wr */ { BxArithDstRM, BX_IA_CMP_EbGb }, - /* 38 /wm */ { 0, BX_IA_CMP_EbGb }, - /* 39 /wr */ { BxArithDstRM, BX_IA_CMP_EwGw }, - /* 39 /wm */ { 0, BX_IA_CMP_EwGw }, - /* 3A /wr */ { 0, BX_IA_CMP_GbEb }, - /* 3A /wm */ { 0, BX_IA_CMP_GbEb }, - /* 3B /wr */ { 0, BX_IA_CMP_GwEw }, - /* 3B /wm */ { 0, BX_IA_CMP_GwEw }, - /* 3C /wr */ { BxImmediate_Ib, BX_IA_CMP_ALIb }, - /* 3C /wm */ { BxImmediate_Ib, BX_IA_CMP_ALIb }, - /* 3D /wr */ { BxImmediate_Iw, BX_IA_CMP_AXIw }, - /* 3D /wm */ { BxImmediate_Iw, BX_IA_CMP_AXIw }, - /* 3E /wr */ { 0, BX_IA_ERROR }, // DS: - /* 3E /wm */ { 0, BX_IA_ERROR }, // DS: - /* 3F /wr */ { 0, BX_IA_ERROR }, - /* 3F /wm */ { 0, BX_IA_ERROR }, - /* 40 /wr */ { 0, BX_IA_ERROR }, // REX: - /* 40 /wm */ { 0, BX_IA_ERROR }, // REX: - /* 41 /wr */ { 0, BX_IA_ERROR }, // REX: - /* 41 /wm */ { 0, BX_IA_ERROR }, // REX: - /* 42 /wr */ { 0, BX_IA_ERROR }, // REX: - /* 42 /wm */ { 0, BX_IA_ERROR }, // REX: - /* 43 /wr */ { 0, BX_IA_ERROR }, // REX: - /* 43 /wm */ { 0, BX_IA_ERROR }, // REX: - /* 44 /wr */ { 0, BX_IA_ERROR }, // REX: - /* 44 /wm */ { 0, BX_IA_ERROR }, // REX: - /* 45 /wr */ { 0, BX_IA_ERROR }, // REX: - /* 45 /wm */ { 0, BX_IA_ERROR }, // REX: - /* 46 /wr */ { 0, BX_IA_ERROR }, // REX: - /* 46 /wm */ { 0, BX_IA_ERROR }, // REX: - /* 47 /wr */ { 0, BX_IA_ERROR }, // REX: - /* 47 /wm */ { 0, BX_IA_ERROR }, // REX: - /* 48 /wr */ { 0, BX_IA_ERROR }, // REX: - /* 48 /wm */ { 0, BX_IA_ERROR }, // REX: - /* 49 /wr */ { 0, BX_IA_ERROR }, // REX: - /* 49 /wm */ { 0, BX_IA_ERROR }, // REX: - /* 4A /wr */ { 0, BX_IA_ERROR }, // REX: - /* 4A /wm */ { 0, BX_IA_ERROR }, // REX: - /* 4B /wr */ { 0, BX_IA_ERROR }, // REX: - /* 4B /wm */ { 0, BX_IA_ERROR }, // REX: - /* 4C /wr */ { 0, BX_IA_ERROR }, // REX: - /* 4C /wm */ { 0, BX_IA_ERROR }, // REX: - /* 4D /wr */ { 0, BX_IA_ERROR }, // REX: - /* 4D /wm */ { 0, BX_IA_ERROR }, // REX: - /* 4E /wr */ { 0, BX_IA_ERROR }, // REX: - /* 4E /wm */ { 0, BX_IA_ERROR }, // REX: - /* 4F /wr */ { 0, BX_IA_ERROR }, // REX: - /* 4F /wm */ { 0, BX_IA_ERROR }, // REX: - /* 50 /wr */ { 0, BX_IA_PUSH_RX }, - /* 50 /wm */ { 0, BX_IA_PUSH_RX }, - /* 51 /wr */ { 0, BX_IA_PUSH_RX }, - /* 51 /wm */ { 0, BX_IA_PUSH_RX }, - /* 52 /wr */ { 0, BX_IA_PUSH_RX }, - /* 52 /wm */ { 0, BX_IA_PUSH_RX }, - /* 53 /wr */ { 0, BX_IA_PUSH_RX }, - /* 53 /wm */ { 0, BX_IA_PUSH_RX }, - /* 54 /wr */ { 0, BX_IA_PUSH_RX }, - /* 54 /wm */ { 0, BX_IA_PUSH_RX }, - /* 55 /wr */ { 0, BX_IA_PUSH_RX }, - /* 55 /wm */ { 0, BX_IA_PUSH_RX }, - /* 56 /wr */ { 0, BX_IA_PUSH_RX }, - /* 56 /wm */ { 0, BX_IA_PUSH_RX }, - /* 57 /wr */ { 0, BX_IA_PUSH_RX }, - /* 57 /wm */ { 0, BX_IA_PUSH_RX }, - /* 58 /wr */ { 0, BX_IA_POP_RX }, - /* 58 /wm */ { 0, BX_IA_POP_RX }, - /* 59 /wr */ { 0, BX_IA_POP_RX }, - /* 59 /wm */ { 0, BX_IA_POP_RX }, - /* 5A /wr */ { 0, BX_IA_POP_RX }, - /* 5A /wm */ { 0, BX_IA_POP_RX }, - /* 5B /wr */ { 0, BX_IA_POP_RX }, - /* 5B /wm */ { 0, BX_IA_POP_RX }, - /* 5C /wr */ { 0, BX_IA_POP_RX }, - /* 5C /wm */ { 0, BX_IA_POP_RX }, - /* 5D /wr */ { 0, BX_IA_POP_RX }, - /* 5D /wm */ { 0, BX_IA_POP_RX }, - /* 5E /wr */ { 0, BX_IA_POP_RX }, - /* 5E /wm */ { 0, BX_IA_POP_RX }, - /* 5F /wr */ { 0, BX_IA_POP_RX }, - /* 5F /wm */ { 0, BX_IA_POP_RX }, - /* 60 /wr */ { 0, BX_IA_ERROR }, - /* 60 /wm */ { 0, BX_IA_ERROR }, - /* 61 /wr */ { 0, BX_IA_ERROR }, - /* 61 /wm */ { 0, BX_IA_ERROR }, - /* 62 /wr */ { 0, BX_IA_ERROR }, - /* 62 /wm */ { 0, BX_IA_ERROR }, - /* 63 /wr */ { 0, BX_IA_MOV_GwEwR }, // MOVSX_GwEw - /* 63 /wm */ { 0, BX_IA_MOV_GwEwM }, // MOVSX_GwEw - /* 64 /wr */ { 0, BX_IA_ERROR }, // FS: - /* 64 /wm */ { 0, BX_IA_ERROR }, // FS: - /* 65 /wr */ { 0, BX_IA_ERROR }, // GS: - /* 65 /wm */ { 0, BX_IA_ERROR }, // GS: - /* 66 /wr */ { 0, BX_IA_ERROR }, // OS: - /* 66 /wm */ { 0, BX_IA_ERROR }, // OS: - /* 67 /wr */ { 0, BX_IA_ERROR }, // AS: - /* 67 /wm */ { 0, BX_IA_ERROR }, // AS: - /* 68 /wr */ { BxImmediate_Iw, BX_IA_PUSH_Iw }, - /* 68 /wm */ { BxImmediate_Iw, BX_IA_PUSH_Iw }, - /* 69 /wr */ { BxImmediate_Iw, BX_IA_IMUL_GwEwIw }, - /* 69 /wm */ { BxImmediate_Iw, BX_IA_IMUL_GwEwIw }, - /* 6A /wr */ { BxImmediate_Ib_SE, BX_IA_PUSH_Iw }, - /* 6A /wm */ { BxImmediate_Ib_SE, BX_IA_PUSH_Iw }, - /* 6B /wr */ { BxImmediate_Ib_SE, BX_IA_IMUL_GwEwIw }, - /* 6B /wm */ { BxImmediate_Ib_SE, BX_IA_IMUL_GwEwIw }, - /* 6C /wr */ { 0, BX_IA_REP_INSB_YbDX }, - /* 6C /wm */ { 0, BX_IA_REP_INSB_YbDX }, - /* 6D /wr */ { 0, BX_IA_REP_INSW_YwDX }, - /* 6D /wm */ { 0, BX_IA_REP_INSW_YwDX }, - /* 6E /wr */ { 0, BX_IA_REP_OUTSB_DXXb }, - /* 6E /wm */ { 0, BX_IA_REP_OUTSB_DXXb }, - /* 6F /wr */ { 0, BX_IA_REP_OUTSW_DXXw }, - /* 6F /wm */ { 0, BX_IA_REP_OUTSW_DXXw }, - /* 70 /wr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JO_Jq }, - /* 70 /wm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JO_Jq }, - /* 71 /wr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNO_Jq }, - /* 71 /wm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNO_Jq }, - /* 72 /wr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JB_Jq }, - /* 72 /wm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JB_Jq }, - /* 73 /wr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNB_Jq }, - /* 73 /wm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNB_Jq }, - /* 74 /wr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JZ_Jq }, - /* 74 /wm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JZ_Jq }, - /* 75 /wr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNZ_Jq }, - /* 75 /wm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNZ_Jq }, - /* 76 /wr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JBE_Jq }, - /* 76 /wm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JBE_Jq }, - /* 77 /wr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNBE_Jq }, - /* 77 /wm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNBE_Jq }, - /* 78 /wr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JS_Jq }, - /* 78 /wm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JS_Jq }, - /* 79 /wr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNS_Jq }, - /* 79 /wm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNS_Jq }, - /* 7A /wr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JP_Jq }, - /* 7A /wm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JP_Jq }, - /* 7B /wr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNP_Jq }, - /* 7B /wm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNP_Jq }, - /* 7C /wr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JL_Jq }, - /* 7C /wm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JL_Jq }, - /* 7D /wr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNL_Jq }, - /* 7D /wm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNL_Jq }, - /* 7E /wr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JLE_Jq }, - /* 7E /wm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JLE_Jq }, - /* 7F /wr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNLE_Jq }, - /* 7F /wm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNLE_Jq }, - /* 80 /wr */ { BxGroup1 | BxImmediate_Ib, BX_IA_ERROR, BxOpcodeInfoG1EbIb }, - /* 80 /wm */ { BxGroup1 | BxImmediate_Ib, BX_IA_ERROR, BxOpcodeInfoG1EbIb }, - /* 81 /wr */ { BxGroup1 | BxImmediate_Iw, BX_IA_ERROR, BxOpcodeInfoG1Ew }, - /* 81 /wm */ { BxGroup1 | BxImmediate_Iw, BX_IA_ERROR, BxOpcodeInfoG1Ew }, - /* 82 /wr */ { 0, BX_IA_ERROR }, - /* 82 /wm */ { 0, BX_IA_ERROR }, - /* 83 /wr */ { BxGroup1 | BxImmediate_Ib_SE, BX_IA_ERROR, BxOpcodeInfoG1Ew }, - /* 83 /wm */ { BxGroup1 | BxImmediate_Ib_SE, BX_IA_ERROR, BxOpcodeInfoG1Ew }, - /* 84 /wr */ { 0, BX_IA_TEST_EbGb }, - /* 84 /wm */ { 0, BX_IA_TEST_EbGb }, - /* 85 /wr */ { 0, BX_IA_TEST_EwGw }, - /* 85 /wm */ { 0, BX_IA_TEST_EwGw }, - /* 86 /wr */ { 0, BX_IA_XCHG_EbGb }, - /* 86 /wm */ { BxLockable, BX_IA_XCHG_EbGb }, - /* 87 /wr */ { 0, BX_IA_XCHG_EwGw }, - /* 87 /wm */ { BxLockable, BX_IA_XCHG_EwGw }, - /* 88 /wr */ { BxArithDstRM, BX_IA_MOV_GbEbR }, - /* 88 /wm */ { 0, BX_IA_MOV_EbGbM }, - /* 89 /wr */ { BxArithDstRM, BX_IA_MOV_GwEwR }, - /* 89 /wm */ { 0, BX_IA_MOV_EwGwM }, - /* 8A /wr */ { 0, BX_IA_MOV_GbEbR }, - /* 8A /wm */ { 0, BX_IA_MOV_GbEbM }, - /* 8B /wr */ { 0, BX_IA_MOV_GwEwR }, - /* 8B /wm */ { 0, BX_IA_MOV_GwEwM }, - /* 8C /wr */ { 0, BX_IA_MOV_EwSwR }, - /* 8C /wm */ { 0, BX_IA_MOV_EwSwM }, - /* 8D /wr */ { 0, BX_IA_ERROR }, // LEA - /* 8D /wm */ { 0, BX_IA_LEA_GwM }, - /* 8E /wr */ { 0, BX_IA_MOV_SwEw }, - /* 8E /wm */ { 0, BX_IA_MOV_SwEw }, - /* 8F /wr */ { BxGroup1A, BX_IA_ERROR, BxOpcodeInfoG1AEw }, - /* 8F /wm */ { BxGroup1A, BX_IA_ERROR, BxOpcodeInfoG1AEw }, - /* 90 /wr */ { 0, BX_IA_XCHG_RXAX }, // handles XCHG R8w, AX - /* 90 /wm */ { 0, BX_IA_XCHG_RXAX }, // handles XCHG R8w, AX - /* 91 /wr */ { 0, BX_IA_XCHG_RXAX }, - /* 91 /wm */ { 0, BX_IA_XCHG_RXAX }, - /* 92 /wr */ { 0, BX_IA_XCHG_RXAX }, - /* 92 /wm */ { 0, BX_IA_XCHG_RXAX }, - /* 93 /wr */ { 0, BX_IA_XCHG_RXAX }, - /* 93 /wm */ { 0, BX_IA_XCHG_RXAX }, - /* 94 /wr */ { 0, BX_IA_XCHG_RXAX }, - /* 94 /wm */ { 0, BX_IA_XCHG_RXAX }, - /* 95 /wr */ { 0, BX_IA_XCHG_RXAX }, - /* 95 /wm */ { 0, BX_IA_XCHG_RXAX }, - /* 96 /wr */ { 0, BX_IA_XCHG_RXAX }, - /* 96 /wm */ { 0, BX_IA_XCHG_RXAX }, - /* 97 /wr */ { 0, BX_IA_XCHG_RXAX }, - /* 97 /wm */ { 0, BX_IA_XCHG_RXAX }, - /* 98 /wr */ { 0, BX_IA_CBW }, - /* 98 /wm */ { 0, BX_IA_CBW }, - /* 99 /wr */ { 0, BX_IA_CWD }, - /* 99 /wm */ { 0, BX_IA_CWD }, - /* 9A /wr */ { 0, BX_IA_ERROR }, - /* 9A /wm */ { 0, BX_IA_ERROR }, - /* 9B /wr */ { 0, BX_IA_FWAIT }, - /* 9B /wm */ { 0, BX_IA_FWAIT }, - /* 9C /wr */ { 0, BX_IA_PUSHF_Fw }, - /* 9C /wm */ { 0, BX_IA_PUSHF_Fw }, - /* 9D /wr */ { 0, BX_IA_POPF_Fw }, - /* 9D /wm */ { 0, BX_IA_POPF_Fw }, - /* 9E /wr */ { 0, BX_IA_SAHF }, - /* 9E /wm */ { 0, BX_IA_SAHF }, - /* 9F /wr */ { 0, BX_IA_LAHF }, - /* 9F /wm */ { 0, BX_IA_LAHF }, - /* A0 /wr */ { BxImmediate_O, BX_IA_MOV_ALOq }, - /* A0 /wm */ { BxImmediate_O, BX_IA_MOV_ALOq }, - /* A1 /wr */ { BxImmediate_O, BX_IA_MOV_AXOq }, - /* A1 /wm */ { BxImmediate_O, BX_IA_MOV_AXOq }, - /* A2 /wr */ { BxImmediate_O, BX_IA_MOV_OqAL }, - /* A2 /wm */ { BxImmediate_O, BX_IA_MOV_OqAL }, - /* A3 /wr */ { BxImmediate_O, BX_IA_MOV_OqAX }, - /* A3 /wm */ { BxImmediate_O, BX_IA_MOV_OqAX }, - /* A4 /wr */ { 0, BX_IA_REP_MOVSB_XbYb }, - /* A4 /wm */ { 0, BX_IA_REP_MOVSB_XbYb }, - /* A5 /wr */ { 0, BX_IA_REP_MOVSW_XwYw }, - /* A5 /wm */ { 0, BX_IA_REP_MOVSW_XwYw }, - /* A6 /wr */ { 0, BX_IA_REP_CMPSB_XbYb }, - /* A6 /wm */ { 0, BX_IA_REP_CMPSB_XbYb }, - /* A7 /wr */ { 0, BX_IA_REP_CMPSW_XwYw }, - /* A7 /wm */ { 0, BX_IA_REP_CMPSW_XwYw }, - /* A8 /wr */ { BxImmediate_Ib, BX_IA_TEST_ALIb }, - /* A8 /wm */ { BxImmediate_Ib, BX_IA_TEST_ALIb }, - /* A9 /wr */ { BxImmediate_Iw, BX_IA_TEST_AXIw }, - /* A9 /wm */ { BxImmediate_Iw, BX_IA_TEST_AXIw }, - /* AA /wr */ { 0, BX_IA_REP_STOSB_YbAL }, - /* AA /wm */ { 0, BX_IA_REP_STOSB_YbAL }, - /* AB /wr */ { 0, BX_IA_REP_STOSW_YwAX }, - /* AB /wm */ { 0, BX_IA_REP_STOSW_YwAX }, - /* AC /wr */ { 0, BX_IA_REP_LODSB_ALXb }, - /* AC /wm */ { 0, BX_IA_REP_LODSB_ALXb }, - /* AD /wr */ { 0, BX_IA_REP_LODSW_AXXw }, - /* AD /wm */ { 0, BX_IA_REP_LODSW_AXXw }, - /* AE /wr */ { 0, BX_IA_REP_SCASB_ALXb }, - /* AE /wm */ { 0, BX_IA_REP_SCASB_ALXb }, - /* AF /wr */ { 0, BX_IA_REP_SCASW_AXXw }, - /* AF /wm */ { 0, BX_IA_REP_SCASW_AXXw }, - /* B0 /wr */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, - /* B0 /wm */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, - /* B1 /wr */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, - /* B1 /wm */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, - /* B2 /wr */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, - /* B2 /wm */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, - /* B3 /wr */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, - /* B3 /wm */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, - /* B4 /wr */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, - /* B4 /wm */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, - /* B5 /wr */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, - /* B5 /wm */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, - /* B6 /wr */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, - /* B6 /wm */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, - /* B7 /wr */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, - /* B7 /wm */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, - /* B8 /wr */ { BxImmediate_Iw, BX_IA_MOV_RXIw }, - /* B8 /wm */ { BxImmediate_Iw, BX_IA_MOV_RXIw }, - /* B9 /wr */ { BxImmediate_Iw, BX_IA_MOV_RXIw }, - /* B9 /wm */ { BxImmediate_Iw, BX_IA_MOV_RXIw }, - /* BA /wr */ { BxImmediate_Iw, BX_IA_MOV_RXIw }, - /* BA /wm */ { BxImmediate_Iw, BX_IA_MOV_RXIw }, - /* BB /wr */ { BxImmediate_Iw, BX_IA_MOV_RXIw }, - /* BB /wm */ { BxImmediate_Iw, BX_IA_MOV_RXIw }, - /* BC /wr */ { BxImmediate_Iw, BX_IA_MOV_RXIw }, - /* BC /wm */ { BxImmediate_Iw, BX_IA_MOV_RXIw }, - /* BD /wr */ { BxImmediate_Iw, BX_IA_MOV_RXIw }, - /* BD /wm */ { BxImmediate_Iw, BX_IA_MOV_RXIw }, - /* BE /wr */ { BxImmediate_Iw, BX_IA_MOV_RXIw }, - /* BE /wm */ { BxImmediate_Iw, BX_IA_MOV_RXIw }, - /* BF /wr */ { BxImmediate_Iw, BX_IA_MOV_RXIw }, - /* BF /wm */ { BxImmediate_Iw, BX_IA_MOV_RXIw }, - /* C0 /wr */ { BxGroup2 | BxImmediate_Ib, BX_IA_ERROR, BxOpcodeInfoG2Eb }, - /* C0 /wm */ { BxGroup2 | BxImmediate_Ib, BX_IA_ERROR, BxOpcodeInfoG2Eb }, - /* C1 /wr */ { BxGroup2 | BxImmediate_Ib, BX_IA_ERROR, BxOpcodeInfoG2Ew }, - /* C1 /wm */ { BxGroup2 | BxImmediate_Ib, BX_IA_ERROR, BxOpcodeInfoG2Ew }, - /* C2 /wr */ { BxImmediate_Iw | BxTraceEnd, BX_IA_RETnear64_Iw }, - /* C2 /wm */ { BxImmediate_Iw | BxTraceEnd, BX_IA_RETnear64_Iw }, - /* C3 /wr */ { BxTraceEnd, BX_IA_RETnear64 }, - /* C3 /wm */ { BxTraceEnd, BX_IA_RETnear64 }, - /* C4 /wr */ { 0, BX_IA_ERROR }, - /* C4 /wm */ { 0, BX_IA_ERROR }, - /* C5 /wr */ { 0, BX_IA_ERROR }, - /* C5 /wm */ { 0, BX_IA_ERROR }, - /* C6 /wr */ { BxGroup11, BX_IA_ERROR, BxOpcodeInfoG11Eb }, - /* C6 /wm */ { BxGroup11, BX_IA_ERROR, BxOpcodeInfoG11Eb }, - /* C7 /wr */ { BxGroup11, BX_IA_ERROR, BxOpcodeInfoG11Ew }, - /* C7 /wm */ { BxGroup11, BX_IA_ERROR, BxOpcodeInfoG11Ew }, - /* C8 /wr */ { BxImmediate_Iw | BxImmediate_Ib2, BX_IA_ENTER64_IwIb }, - /* C8 /wm */ { BxImmediate_Iw | BxImmediate_Ib2, BX_IA_ENTER64_IwIb }, - /* C9 /wr */ { 0, BX_IA_LEAVE64 }, - /* C9 /wm */ { 0, BX_IA_LEAVE64 }, - /* CA /wr */ { BxImmediate_Iw | BxTraceEnd, BX_IA_RETfar16_Iw }, - /* CA /wm */ { BxImmediate_Iw | BxTraceEnd, BX_IA_RETfar16_Iw }, - /* CB /wr */ { BxTraceEnd, BX_IA_RETfar16 }, - /* CB /wm */ { BxTraceEnd, BX_IA_RETfar16 }, - /* CC /wr */ { BxTraceEnd, BX_IA_INT3 }, - /* CC /wm */ { BxTraceEnd, BX_IA_INT3 }, - /* CD /wr */ { BxImmediate_Ib | BxTraceEnd, BX_IA_INT_Ib }, - /* CD /wm */ { BxImmediate_Ib | BxTraceEnd, BX_IA_INT_Ib }, - /* CE /wr */ { 0, BX_IA_ERROR }, - /* CE /wm */ { 0, BX_IA_ERROR }, - /* CF /wr */ { BxTraceEnd, BX_IA_IRET64 }, - /* CF /wm */ { BxTraceEnd, BX_IA_IRET64 }, - /* D0 /wr */ { BxGroup2 | BxImmediate_I1, BX_IA_ERROR, BxOpcodeInfoG2Eb }, - /* D0 /wm */ { BxGroup2 | BxImmediate_I1, BX_IA_ERROR, BxOpcodeInfoG2Eb }, - /* D1 /wr */ { BxGroup2 | BxImmediate_I1, BX_IA_ERROR, BxOpcodeInfoG2Ew }, - /* D1 /wm */ { BxGroup2 | BxImmediate_I1, BX_IA_ERROR, BxOpcodeInfoG2Ew }, - /* D2 /wr */ { BxGroup2, BX_IA_ERROR, BxOpcodeInfoG2Eb }, - /* D2 /wm */ { BxGroup2, BX_IA_ERROR, BxOpcodeInfoG2Eb }, - /* D3 /wr */ { BxGroup2, BX_IA_ERROR, BxOpcodeInfoG2Ew }, - /* D3 /wm */ { BxGroup2, BX_IA_ERROR, BxOpcodeInfoG2Ew }, - /* D4 /wr */ { 0, BX_IA_ERROR }, - /* D4 /wm */ { 0, BX_IA_ERROR }, - /* D5 /wr */ { 0, BX_IA_ERROR }, - /* D5 /wm */ { 0, BX_IA_ERROR }, - /* D6 /wr */ { 0, BX_IA_ERROR }, - /* D6 /wm */ { 0, BX_IA_ERROR }, - /* D7 /wr */ { 0, BX_IA_XLAT }, - /* D7 /wm */ { 0, BX_IA_XLAT }, - /* D8 /wr */ { BxGroupN, BX_IA_ERROR, BxOpcodeInfo_FloatingPointD8 }, - /* D8 /wm */ { BxGroupFP, BX_IA_ERROR, BxOpcodeInfo_FPGroupD8 }, - /* D9 /wr */ { BxFPEscape, BX_IA_ERROR, BxOpcodeInfo_FloatingPointD9 }, - /* D9 /wm */ { BxGroupFP, BX_IA_ERROR, BxOpcodeInfo_FPGroupD9 }, - /* DA /wr */ { BxFPEscape, BX_IA_ERROR, BxOpcodeInfo_FloatingPointDA }, - /* DA /wm */ { BxGroupFP, BX_IA_ERROR, BxOpcodeInfo_FPGroupDA }, - /* DB /wr */ { BxFPEscape, BX_IA_ERROR, BxOpcodeInfo_FloatingPointDB }, - /* DB /wm */ { BxGroupFP, BX_IA_ERROR, BxOpcodeInfo_FPGroupDB }, - /* DC /wr */ { BxGroupN, BX_IA_ERROR, BxOpcodeInfo_FloatingPointDC }, - /* DC /wm */ { BxGroupFP, BX_IA_ERROR, BxOpcodeInfo_FPGroupDC }, - /* DD /wr */ { BxGroupN, BX_IA_ERROR, BxOpcodeInfo_FloatingPointDD }, - /* DD /wm */ { BxGroupFP, BX_IA_ERROR, BxOpcodeInfo_FPGroupDD }, - /* DE /wr */ { BxFPEscape, BX_IA_ERROR, BxOpcodeInfo_FloatingPointDE }, - /* DE /wm */ { BxGroupFP, BX_IA_ERROR, BxOpcodeInfo_FPGroupDE }, - /* DF /wr */ { BxFPEscape, BX_IA_ERROR, BxOpcodeInfo_FloatingPointDF }, - /* DF /wm */ { BxGroupFP, BX_IA_ERROR, BxOpcodeInfo_FPGroupDF }, - /* E0 /wr */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_LOOPNE64_Jb }, - /* E0 /wm */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_LOOPNE64_Jb }, - /* E1 /wr */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_LOOPE64_Jb }, - /* E1 /wm */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_LOOPE64_Jb }, - /* E2 /wr */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_LOOP64_Jb }, - /* E2 /wm */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_LOOP64_Jb }, - /* E3 /wr */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_JRCXZ_Jb }, - /* E3 /wm */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_JRCXZ_Jb }, - /* E4 /wr */ { BxImmediate_Ib, BX_IA_IN_ALIb }, - /* E4 /wm */ { BxImmediate_Ib, BX_IA_IN_ALIb }, - /* E5 /wr */ { BxImmediate_Ib, BX_IA_IN_AXIb }, - /* E5 /wm */ { BxImmediate_Ib, BX_IA_IN_AXIb }, - /* E6 /wr */ { BxImmediate_Ib, BX_IA_OUT_IbAL }, - /* E6 /wm */ { BxImmediate_Ib, BX_IA_OUT_IbAL }, - /* E7 /wr */ { BxImmediate_Ib, BX_IA_OUT_IbAX }, - /* E7 /wm */ { BxImmediate_Ib, BX_IA_OUT_IbAX }, - /* E8 /wr */ { BxImmediate_BrOff32 | BxTraceEnd, BX_IA_CALL_Jq }, - /* E8 /wm */ { BxImmediate_BrOff32 | BxTraceEnd, BX_IA_CALL_Jq }, - /* E9 /wr */ { BxImmediate_BrOff32 | BxTraceEnd, BX_IA_JMP_Jq }, - /* E9 /wm */ { BxImmediate_BrOff32 | BxTraceEnd, BX_IA_JMP_Jq }, - /* EA /wr */ { 0, BX_IA_ERROR }, - /* EA /wm */ { 0, BX_IA_ERROR }, - /* EB /wr */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_JMP_Jq }, - /* EB /wm */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_JMP_Jq }, - /* EC /wr */ { 0, BX_IA_IN_ALDX }, - /* EC /wm */ { 0, BX_IA_IN_ALDX }, - /* ED /wr */ { 0, BX_IA_IN_AXDX }, - /* ED /wm */ { 0, BX_IA_IN_AXDX }, - /* EE /wr */ { 0, BX_IA_OUT_DXAL }, - /* EE /wm */ { 0, BX_IA_OUT_DXAL }, - /* EF /wr */ { 0, BX_IA_OUT_DXAX }, - /* EF /wm */ { 0, BX_IA_OUT_DXAX }, - /* F0 /wr */ { 0, BX_IA_ERROR }, // LOCK - /* F0 /wm */ { 0, BX_IA_ERROR }, // LOCK - /* F1 /wr */ { BxTraceEnd, BX_IA_INT1 }, - /* F1 /wm */ { BxTraceEnd, BX_IA_INT1 }, - /* F2 /wr */ { 0, BX_IA_ERROR }, // REPNE/REPNZ - /* F2 /wm */ { 0, BX_IA_ERROR }, // REPNE/REPNZ - /* F3 /wr */ { 0, BX_IA_ERROR }, // REP, REPE/REPZ - /* F3 /wm */ { 0, BX_IA_ERROR }, // REP, REPE/REPZ - /* F4 /wr */ { BxTraceEnd, BX_IA_HLT }, - /* F4 /wm */ { BxTraceEnd, BX_IA_HLT }, - /* F5 /wr */ { 0, BX_IA_CMC }, - /* F5 /wm */ { 0, BX_IA_CMC }, - /* F6 /wr */ { BxGroup3, BX_IA_ERROR, BxOpcodeInfoG3Eb }, - /* F6 /wm */ { BxGroup3, BX_IA_ERROR, BxOpcodeInfoG3Eb }, - /* F7 /wr */ { BxGroup3, BX_IA_ERROR, BxOpcodeInfoG3Ew }, - /* F7 /wm */ { BxGroup3, BX_IA_ERROR, BxOpcodeInfoG3Ew }, - /* F8 /wr */ { 0, BX_IA_CLC }, - /* F8 /wm */ { 0, BX_IA_CLC }, - /* F9 /wr */ { 0, BX_IA_STC }, - /* F9 /wm */ { 0, BX_IA_STC }, - /* FA /wr */ { 0, BX_IA_CLI }, - /* FA /wm */ { 0, BX_IA_CLI }, - /* FB /wr */ { 0, BX_IA_STI }, - /* FB /wm */ { 0, BX_IA_STI }, - /* FC /wr */ { 0, BX_IA_CLD }, - /* FC /wm */ { 0, BX_IA_CLD }, - /* FD /wr */ { 0, BX_IA_STD }, - /* FD /wm */ { 0, BX_IA_STD }, - /* FE /wr */ { BxGroup4, BX_IA_ERROR, BxOpcodeInfoG4 }, - /* FE /wm */ { BxGroup4, BX_IA_ERROR, BxOpcodeInfoG4 }, - /* FF /wr */ { BxGroup5, BX_IA_ERROR, BxOpcodeInfo64G5w }, - /* FF /wm */ { BxGroup5, BX_IA_ERROR, BxOpcodeInfo64G5w }, +static const BxOpcodeInfo_t BxOpcodeInfo64[512*3] = { + // 512 entries for 16bit mode + /* 00 /w */ { BxArithDstRM | BxLockable, BX_IA_ADD_EbGb }, + /* 01 /w */ { BxArithDstRM | BxLockable, BX_IA_ADD_EwGw }, + /* 02 /w */ { 0, BX_IA_ADD_GbEb }, + /* 03 /w */ { 0, BX_IA_ADD_GwEw }, + /* 04 /w */ { BxImmediate_Ib, BX_IA_ADD_ALIb }, + /* 05 /w */ { BxImmediate_Iw, BX_IA_ADD_AXIw }, + /* 06 /w */ { 0, BX_IA_ERROR }, + /* 07 /w */ { 0, BX_IA_ERROR }, + /* 08 /w */ { BxArithDstRM | BxLockable, BX_IA_OR_EbGb }, + /* 09 /w */ { BxArithDstRM | BxLockable, BX_IA_OR_EwGw }, + /* 0A /w */ { 0, BX_IA_OR_GbEb }, + /* 0B /w */ { 0, BX_IA_OR_GwEw }, + /* 0C /w */ { BxImmediate_Ib, BX_IA_OR_ALIb }, + /* 0D /w */ { BxImmediate_Iw, BX_IA_OR_AXIw }, + /* 0E /w */ { 0, BX_IA_ERROR }, + /* 0F /w */ { 0, BX_IA_ERROR }, // 2-byte escape + /* 10 /w */ { BxArithDstRM | BxLockable, BX_IA_ADC_EbGb }, + /* 11 /w */ { BxArithDstRM | BxLockable, BX_IA_ADC_EwGw }, + /* 12 /w */ { 0, BX_IA_ADC_GbEb }, + /* 13 /w */ { 0, BX_IA_ADC_GwEw }, + /* 14 /w */ { BxImmediate_Ib, BX_IA_ADC_ALIb }, + /* 15 /w */ { BxImmediate_Iw, BX_IA_ADC_AXIw }, + /* 16 /w */ { 0, BX_IA_ERROR }, + /* 17 /w */ { 0, BX_IA_ERROR }, + /* 18 /w */ { BxArithDstRM | BxLockable, BX_IA_SBB_EbGb }, + /* 19 /w */ { BxArithDstRM | BxLockable, BX_IA_SBB_EwGw }, + /* 1A /w */ { 0, BX_IA_SBB_GbEb }, + /* 1B /w */ { 0, BX_IA_SBB_GwEw }, + /* 1C /w */ { BxImmediate_Ib, BX_IA_SBB_ALIb }, + /* 1D /w */ { BxImmediate_Iw, BX_IA_SBB_AXIw }, + /* 1E /w */ { 0, BX_IA_ERROR }, + /* 1F /w */ { 0, BX_IA_ERROR }, + /* 20 /w */ { BxArithDstRM | BxLockable, BX_IA_AND_EbGb }, + /* 21 /w */ { BxArithDstRM | BxLockable, BX_IA_AND_EwGw }, + /* 22 /w */ { 0, BX_IA_AND_GbEb }, + /* 23 /w */ { 0, BX_IA_AND_GwEw }, + /* 24 /w */ { BxImmediate_Ib, BX_IA_AND_ALIb }, + /* 25 /w */ { BxImmediate_Iw, BX_IA_AND_AXIw }, + /* 26 /w */ { 0, BX_IA_ERROR }, // ES: + /* 27 /w */ { 0, BX_IA_ERROR }, + /* 28 /w */ { BxArithDstRM | BxLockable, BX_IA_SUB_EbGb }, + /* 29 /w */ { BxArithDstRM | BxLockable, BX_IA_SUB_EwGw }, + /* 2A /w */ { 0, BX_IA_SUB_GbEb }, + /* 2B /w */ { 0, BX_IA_SUB_GwEw }, + /* 2C /w */ { BxImmediate_Ib, BX_IA_SUB_ALIb }, + /* 2D /w */ { BxImmediate_Iw, BX_IA_SUB_AXIw }, + /* 2E /w */ { 0, BX_IA_ERROR }, // CS: + /* 2F /w */ { 0, BX_IA_ERROR }, + /* 30 /w */ { BxArithDstRM | BxLockable, BX_IA_XOR_EbGb }, + /* 31 /w */ { BxArithDstRM | BxLockable, BX_IA_XOR_EwGw }, + /* 32 /w */ { 0, BX_IA_XOR_GbEb }, + /* 33 /w */ { 0, BX_IA_XOR_GwEw }, + /* 34 /w */ { BxImmediate_Ib, BX_IA_XOR_ALIb }, + /* 35 /w */ { BxImmediate_Iw, BX_IA_XOR_AXIw }, + /* 36 /w */ { 0, BX_IA_ERROR }, // SS: + /* 37 /w */ { 0, BX_IA_ERROR }, + /* 38 /w */ { BxArithDstRM, BX_IA_CMP_EbGb }, + /* 39 /w */ { BxArithDstRM, BX_IA_CMP_EwGw }, + /* 3A /w */ { 0, BX_IA_CMP_GbEb }, + /* 3B /w */ { 0, BX_IA_CMP_GwEw }, + /* 3C /w */ { BxImmediate_Ib, BX_IA_CMP_ALIb }, + /* 3D /w */ { BxImmediate_Iw, BX_IA_CMP_AXIw }, + /* 3E /w */ { 0, BX_IA_ERROR }, // DS: + /* 3F /w */ { 0, BX_IA_ERROR }, + /* 40 /w */ { 0, BX_IA_ERROR }, // REX: + /* 41 /w */ { 0, BX_IA_ERROR }, // REX: + /* 42 /w */ { 0, BX_IA_ERROR }, // REX: + /* 43 /w */ { 0, BX_IA_ERROR }, // REX: + /* 44 /w */ { 0, BX_IA_ERROR }, // REX: + /* 45 /w */ { 0, BX_IA_ERROR }, // REX: + /* 46 /w */ { 0, BX_IA_ERROR }, // REX: + /* 47 /w */ { 0, BX_IA_ERROR }, // REX: + /* 48 /w */ { 0, BX_IA_ERROR }, // REX: + /* 49 /w */ { 0, BX_IA_ERROR }, // REX: + /* 4A /w */ { 0, BX_IA_ERROR }, // REX: + /* 4B /w */ { 0, BX_IA_ERROR }, // REX: + /* 4C /w */ { 0, BX_IA_ERROR }, // REX: + /* 4D /w */ { 0, BX_IA_ERROR }, // REX: + /* 4E /w */ { 0, BX_IA_ERROR }, // REX: + /* 4F /w */ { 0, BX_IA_ERROR }, // REX: + /* 50 /w */ { 0, BX_IA_PUSH_RX }, + /* 51 /w */ { 0, BX_IA_PUSH_RX }, + /* 52 /w */ { 0, BX_IA_PUSH_RX }, + /* 53 /w */ { 0, BX_IA_PUSH_RX }, + /* 54 /w */ { 0, BX_IA_PUSH_RX }, + /* 55 /w */ { 0, BX_IA_PUSH_RX }, + /* 56 /w */ { 0, BX_IA_PUSH_RX }, + /* 57 /w */ { 0, BX_IA_PUSH_RX }, + /* 58 /w */ { 0, BX_IA_POP_RX }, + /* 59 /w */ { 0, BX_IA_POP_RX }, + /* 5A /w */ { 0, BX_IA_POP_RX }, + /* 5B /w */ { 0, BX_IA_POP_RX }, + /* 5C /w */ { 0, BX_IA_POP_RX }, + /* 5D /w */ { 0, BX_IA_POP_RX }, + /* 5E /w */ { 0, BX_IA_POP_RX }, + /* 5F /w */ { 0, BX_IA_POP_RX }, + /* 60 /w */ { 0, BX_IA_ERROR }, + /* 61 /w */ { 0, BX_IA_ERROR }, + /* 62 /w */ { 0, BX_IA_ERROR }, + /* 63 /w */ { 0, BX_IA_MOV_GwEw }, // MOVSX_GwEw + /* 64 /w */ { 0, BX_IA_ERROR }, // FS: + /* 65 /w */ { 0, BX_IA_ERROR }, // GS: + /* 66 /w */ { 0, BX_IA_ERROR }, // OS: + /* 67 /w */ { 0, BX_IA_ERROR }, // AS: + /* 68 /w */ { BxImmediate_Iw, BX_IA_PUSH_Iw }, + /* 69 /w */ { BxImmediate_Iw, BX_IA_IMUL_GwEwIw }, + /* 6A /w */ { BxImmediate_Ib_SE, BX_IA_PUSH_Iw }, + /* 6B /w */ { BxImmediate_Ib_SE, BX_IA_IMUL_GwEwIw }, + /* 6C /w */ { 0, BX_IA_REP_INSB_YbDX }, + /* 6D /w */ { 0, BX_IA_REP_INSW_YwDX }, + /* 6E /w */ { 0, BX_IA_REP_OUTSB_DXXb }, + /* 6F /w */ { 0, BX_IA_REP_OUTSW_DXXw }, + /* 70 /w */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JO_Jq }, + /* 71 /w */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNO_Jq }, + /* 72 /w */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JB_Jq }, + /* 73 /w */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNB_Jq }, + /* 74 /w */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JZ_Jq }, + /* 75 /w */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNZ_Jq }, + /* 76 /w */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JBE_Jq }, + /* 77 /w */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNBE_Jq }, + /* 78 /w */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JS_Jq }, + /* 79 /w */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNS_Jq }, + /* 7A /w */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JP_Jq }, + /* 7B /w */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNP_Jq }, + /* 7C /w */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JL_Jq }, + /* 7D /w */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNL_Jq }, + /* 7E /w */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JLE_Jq }, + /* 7F /w */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNLE_Jq }, + /* 80 /w */ { BxGroup1 | BxImmediate_Ib, BX_IA_ERROR, BxOpcodeInfoG1EbIb }, + /* 81 /w */ { BxGroup1 | BxImmediate_Iw, BX_IA_ERROR, BxOpcodeInfoG1Ew }, + /* 82 /w */ { 0, BX_IA_ERROR }, + /* 83 /w */ { BxGroup1 | BxImmediate_Ib_SE, BX_IA_ERROR, BxOpcodeInfoG1Ew }, + /* 84 /w */ { 0, BX_IA_TEST_EbGb }, + /* 85 /w */ { 0, BX_IA_TEST_EwGw }, + /* 86 /w */ { BxLockable, BX_IA_XCHG_EbGb }, + /* 87 /w */ { BxLockable, BX_IA_XCHG_EwGw }, + /* 88 /w */ { BxArithDstRM, BX_IA_MOV_EbGb }, + /* 89 /w */ { BxArithDstRM, BX_IA_MOV_EwGw }, + /* 8A /w */ { 0, BX_IA_MOV_GbEb }, + /* 8B /w */ { 0, BX_IA_MOV_GwEw }, + /* 8C /w */ { 0, BX_IA_MOV_EwSw }, + /* 8D /w */ { 0, BX_IA_LEA_GwM }, + /* 8E /w */ { 0, BX_IA_MOV_SwEw }, + /* 8F /w */ { BxGroup1A, BX_IA_ERROR, BxOpcodeInfoG1AEw }, + /* 90 /w */ { 0, BX_IA_XCHG_RXAX }, // handles XCHG R8w, AX + /* 91 /w */ { 0, BX_IA_XCHG_RXAX }, + /* 92 /w */ { 0, BX_IA_XCHG_RXAX }, + /* 93 /w */ { 0, BX_IA_XCHG_RXAX }, + /* 94 /w */ { 0, BX_IA_XCHG_RXAX }, + /* 95 /w */ { 0, BX_IA_XCHG_RXAX }, + /* 96 /w */ { 0, BX_IA_XCHG_RXAX }, + /* 97 /w */ { 0, BX_IA_XCHG_RXAX }, + /* 98 /w */ { 0, BX_IA_CBW }, + /* 99 /w */ { 0, BX_IA_CWD }, + /* 9A /w */ { 0, BX_IA_ERROR }, + /* 9B /w */ { 0, BX_IA_FWAIT }, + /* 9C /w */ { 0, BX_IA_PUSHF_Fw }, + /* 9D /w */ { 0, BX_IA_POPF_Fw }, + /* 9E /w */ { 0, BX_IA_SAHF }, + /* 9F /w */ { 0, BX_IA_LAHF }, + /* A0 /w */ { BxImmediate_O, BX_IA_MOV_ALOq }, + /* A1 /w */ { BxImmediate_O, BX_IA_MOV_AXOq }, + /* A2 /w */ { BxImmediate_O, BX_IA_MOV_OqAL }, + /* A3 /w */ { BxImmediate_O, BX_IA_MOV_OqAX }, + /* A4 /w */ { 0, BX_IA_REP_MOVSB_XbYb }, + /* A5 /w */ { 0, BX_IA_REP_MOVSW_XwYw }, + /* A6 /w */ { 0, BX_IA_REP_CMPSB_XbYb }, + /* A7 /w */ { 0, BX_IA_REP_CMPSW_XwYw }, + /* A8 /w */ { BxImmediate_Ib, BX_IA_TEST_ALIb }, + /* A9 /w */ { BxImmediate_Iw, BX_IA_TEST_AXIw }, + /* AA /w */ { 0, BX_IA_REP_STOSB_YbAL }, + /* AB /w */ { 0, BX_IA_REP_STOSW_YwAX }, + /* AC /w */ { 0, BX_IA_REP_LODSB_ALXb }, + /* AD /w */ { 0, BX_IA_REP_LODSW_AXXw }, + /* AE /w */ { 0, BX_IA_REP_SCASB_ALXb }, + /* AF /w */ { 0, BX_IA_REP_SCASW_AXXw }, + /* B0 /w */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, + /* B1 /w */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, + /* B2 /w */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, + /* B3 /w */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, + /* B4 /w */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, + /* B5 /w */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, + /* B6 /w */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, + /* B7 /w */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, + /* B8 /w */ { BxImmediate_Iw, BX_IA_MOV_RXIw }, + /* B9 /w */ { BxImmediate_Iw, BX_IA_MOV_RXIw }, + /* BA /w */ { BxImmediate_Iw, BX_IA_MOV_RXIw }, + /* BB /w */ { BxImmediate_Iw, BX_IA_MOV_RXIw }, + /* BC /w */ { BxImmediate_Iw, BX_IA_MOV_RXIw }, + /* BD /w */ { BxImmediate_Iw, BX_IA_MOV_RXIw }, + /* BE /w */ { BxImmediate_Iw, BX_IA_MOV_RXIw }, + /* BF /w */ { BxImmediate_Iw, BX_IA_MOV_RXIw }, + /* C0 /w */ { BxGroup2 | BxImmediate_Ib, BX_IA_ERROR, BxOpcodeInfoG2Eb }, + /* C1 /w */ { BxGroup2 | BxImmediate_Ib, BX_IA_ERROR, BxOpcodeInfoG2Ew }, + /* C2 /w */ { BxImmediate_Iw | BxTraceEnd, BX_IA_RETnear64_Iw }, + /* C3 /w */ { BxTraceEnd, BX_IA_RETnear64 }, + /* C4 /w */ { 0, BX_IA_ERROR }, + /* C5 /w */ { 0, BX_IA_ERROR }, + /* C6 /w */ { BxGroup11, BX_IA_ERROR, BxOpcodeInfoG11Eb }, + /* C7 /w */ { BxGroup11, BX_IA_ERROR, BxOpcodeInfoG11Ew }, + /* C8 /w */ { BxImmediate_Iw | BxImmediate_Ib2, BX_IA_ENTER64_IwIb }, + /* C9 /w */ { 0, BX_IA_LEAVE64 }, + /* CA /w */ { BxImmediate_Iw | BxTraceEnd, BX_IA_RETfar16_Iw }, + /* CB /w */ { BxTraceEnd, BX_IA_RETfar16 }, + /* CC /w */ { BxTraceEnd, BX_IA_INT3 }, + /* CD /w */ { BxImmediate_Ib | BxTraceEnd, BX_IA_INT_Ib }, + /* CE /w */ { 0, BX_IA_ERROR }, + /* CF /w */ { BxTraceEnd, BX_IA_IRET64 }, + /* D0 /w */ { BxGroup2 | BxImmediate_I1, BX_IA_ERROR, BxOpcodeInfoG2Eb }, + /* D1 /w */ { BxGroup2 | BxImmediate_I1, BX_IA_ERROR, BxOpcodeInfoG2Ew }, + /* D2 /w */ { BxGroup2, BX_IA_ERROR, BxOpcodeInfoG2Eb }, + /* D3 /w */ { BxGroup2, BX_IA_ERROR, BxOpcodeInfoG2Ew }, + /* D4 /w */ { 0, BX_IA_ERROR }, + /* D5 /w */ { 0, BX_IA_ERROR }, + /* D6 /w */ { 0, BX_IA_ERROR }, + /* D7 /w */ { 0, BX_IA_XLAT }, + /* D8 /w */ { BxGroupFP, BX_IA_ERROR, BxOpcodeInfo_FPGroupD8 }, + /* D9 /w */ { BxFPEscape, BX_IA_ERROR, BxOpcodeInfo_FloatingPointD9 }, + /* DA /w */ { BxFPEscape, BX_IA_ERROR, BxOpcodeInfo_FloatingPointDA }, + /* DB /w */ { BxFPEscape, BX_IA_ERROR, BxOpcodeInfo_FloatingPointDB }, + /* DC /w */ { BxGroupFP, BX_IA_ERROR, BxOpcodeInfo_FPGroupDC }, + /* DD /w */ { BxGroupFP, BX_IA_ERROR, BxOpcodeInfo_FPGroupDD }, + /* DE /w */ { BxFPEscape, BX_IA_ERROR, BxOpcodeInfo_FloatingPointDE }, + /* DF /w */ { BxFPEscape, BX_IA_ERROR, BxOpcodeInfo_FloatingPointDF }, + /* E0 /w */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_LOOPNE64_Jb }, + /* E1 /w */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_LOOPE64_Jb }, + /* E2 /w */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_LOOP64_Jb }, + /* E3 /w */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_JRCXZ_Jb }, + /* E4 /w */ { BxImmediate_Ib, BX_IA_IN_ALIb }, + /* E5 /w */ { BxImmediate_Ib, BX_IA_IN_AXIb }, + /* E6 /w */ { BxImmediate_Ib, BX_IA_OUT_IbAL }, + /* E7 /w */ { BxImmediate_Ib, BX_IA_OUT_IbAX }, + /* E8 /w */ { BxImmediate_BrOff32 | BxTraceEnd, BX_IA_CALL_Jq }, + /* E9 /w */ { BxImmediate_BrOff32 | BxTraceEnd, BX_IA_JMP_Jq }, + /* EA /w */ { 0, BX_IA_ERROR }, + /* EB /w */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_JMP_Jq }, + /* EC /w */ { 0, BX_IA_IN_ALDX }, + /* ED /w */ { 0, BX_IA_IN_AXDX }, + /* EE /w */ { 0, BX_IA_OUT_DXAL }, + /* EF /w */ { 0, BX_IA_OUT_DXAX }, + /* F0 /w */ { 0, BX_IA_ERROR }, // LOCK + /* F1 /w */ { BxTraceEnd, BX_IA_INT1 }, + /* F2 /w */ { 0, BX_IA_ERROR }, // REPNE/REPNZ + /* F3 /w */ { 0, BX_IA_ERROR }, // REP, REPE/REPZ + /* F4 /w */ { BxTraceEnd, BX_IA_HLT }, + /* F5 /w */ { 0, BX_IA_CMC }, + /* F6 /w */ { BxGroup3, BX_IA_ERROR, BxOpcodeInfoG3Eb }, + /* F7 /w */ { BxGroup3, BX_IA_ERROR, BxOpcodeInfoG3Ew }, + /* F8 /w */ { 0, BX_IA_CLC }, + /* F9 /w */ { 0, BX_IA_STC }, + /* FA /w */ { 0, BX_IA_CLI }, + /* FB /w */ { 0, BX_IA_STI }, + /* FC /w */ { 0, BX_IA_CLD }, + /* FD /w */ { 0, BX_IA_STD }, + /* FE /w */ { BxGroup4, BX_IA_ERROR, BxOpcodeInfoG4 }, + /* FF /w */ { BxGroup5, BX_IA_ERROR, BxOpcodeInfo64G5w }, - /* 0F 00 /wr */ { BxGroup6, BX_IA_ERROR, BxOpcodeInfoG6 }, - /* 0F 00 /wm */ { BxGroup6, BX_IA_ERROR, BxOpcodeInfoG6 }, - /* 0F 01 /wr */ { BxFPEscape, BX_IA_ERROR, BxOpcodeInfoG7R }, - /* 0F 01 /wm */ { BxGroup7, BX_IA_ERROR, BxOpcodeInfo64G7M }, - /* 0F 02 /wr */ { 0, BX_IA_LAR_GvEw }, - /* 0F 02 /wm */ { 0, BX_IA_LAR_GvEw }, - /* 0F 03 /wr */ { 0, BX_IA_LSL_GvEw }, - /* 0F 03 /wm */ { 0, BX_IA_LSL_GvEw }, - /* 0F 04 /wr */ { 0, BX_IA_ERROR }, - /* 0F 04 /wm */ { 0, BX_IA_ERROR }, - /* 0F 05 /wr */ { BxTraceEnd, BX_IA_SYSCALL }, - /* 0F 05 /wm */ { BxTraceEnd, BX_IA_SYSCALL }, - /* 0F 06 /wr */ { 0, BX_IA_CLTS }, - /* 0F 06 /wm */ { 0, BX_IA_CLTS }, - /* 0F 07 /wr */ { BxTraceEnd, BX_IA_SYSRET }, - /* 0F 07 /wm */ { BxTraceEnd, BX_IA_SYSRET }, - /* 0F 08 /wr */ { BxTraceEnd, BX_IA_INVD }, - /* 0F 08 /wm */ { BxTraceEnd, BX_IA_INVD }, - /* 0F 09 /wr */ { BxTraceEnd, BX_IA_WBINVD }, - /* 0F 09 /wm */ { BxTraceEnd, BX_IA_WBINVD }, - /* 0F 0A /wr */ { 0, BX_IA_ERROR }, - /* 0F 0A /wm */ { 0, BX_IA_ERROR }, - /* 0F 0B /wr */ { BxTraceEnd, BX_IA_UD2A }, - /* 0F 0B /wm */ { BxTraceEnd, BX_IA_UD2A }, - /* 0F 0C /wr */ { 0, BX_IA_ERROR }, - /* 0F 0C /wm */ { 0, BX_IA_ERROR }, - /* 0F 0D /wr */ { 0, BX_IA_PREFETCHW }, // 3DNow! PREFETCHW on AMD, NOP on Intel - /* 0F 0D /wm */ { 0, BX_IA_PREFETCHW }, // 3DNow! PREFETCHW on AMD, NOP on Intel - /* 0F 0E /wr */ { 0, BX_IA_FEMMS }, // 3DNow! FEMMS - /* 0F 0E /wm */ { 0, BX_IA_FEMMS }, // 3DNow! FEMMS - /* 0F 0F /wr */ { BxImmediate_Ib, BX_IA_ERROR }, // 3DNow! Opcode Table - /* 0F 0F /wm */ { BxImmediate_Ib, BX_IA_ERROR }, // 3DNow! Opcode Table - /* 0F 10 /wr */ { BxPrefixSSE, BX_IA_MOVUPS_VpsWps, BxOpcodeGroupSSE_0f10 }, - /* 0F 10 /wm */ { BxPrefixSSE, BX_IA_MOVUPS_VpsWps, BxOpcodeGroupSSE_0f10 }, - /* 0F 11 /wr */ { BxPrefixSSE | BxArithDstRM, BX_IA_MOVUPS_WpsVps, BxOpcodeGroupSSE_0f11 }, - /* 0F 11 /wm */ { BxPrefixSSE, BX_IA_MOVUPS_WpsVps, BxOpcodeGroupSSE_0f11 }, - /* 0F 12 /wr */ { BxPrefixSSE, BX_IA_MOVLPS_VpsMq, BxOpcodeGroupSSE_0f12 }, - /* 0F 12 /wm */ { BxPrefixSSE, BX_IA_MOVLPS_VpsMq, BxOpcodeGroupSSE_0f12 }, - /* 0F 13 /wr */ { 0, BX_IA_ERROR }, // MOVLPS/PD SSE group - /* 0F 13 /wm */ { BxPrefixSSE, BX_IA_MOVLPS_MqVps, BxOpcodeGroupSSE_0f13M }, - /* 0F 14 /wr */ { BxPrefixSSE, BX_IA_UNPCKLPS_VpsWdq, BxOpcodeGroupSSE_0f14 }, - /* 0F 14 /wm */ { BxPrefixSSE, BX_IA_UNPCKLPS_VpsWdq, BxOpcodeGroupSSE_0f14 }, - /* 0F 15 /wr */ { BxPrefixSSE, BX_IA_UNPCKHPS_VpsWdq, BxOpcodeGroupSSE_0f15 }, - /* 0F 15 /wm */ { BxPrefixSSE, BX_IA_UNPCKHPS_VpsWdq, BxOpcodeGroupSSE_0f15 }, - /* 0F 16 /wr */ { BxPrefixSSE, BX_IA_MOVHPS_VpsMq, BxOpcodeGroupSSE_0f16 }, - /* 0F 16 /wm */ { BxPrefixSSE, BX_IA_MOVHPS_VpsMq, BxOpcodeGroupSSE_0f16 }, - /* 0F 17 /wr */ { 0, BX_IA_ERROR }, // MOHLPS/PD SSE group - /* 0F 17 /wm */ { BxPrefixSSE, BX_IA_MOVHPS_MqVps, BxOpcodeGroupSSE_0f17M }, - /* 0F 18 /wr */ { 0, BX_IA_NOP }, // PREFETCH HINT - /* 0F 18 /wm */ { 0, BX_IA_PREFETCH }, // opcode group G16, PREFETCH hints - /* 0F 19 /wr */ { 0, BX_IA_NOP }, // multi-byte NOP - /* 0F 19 /wm */ { 0, BX_IA_NOP }, // multi-byte NOP - /* 0F 1A /wr */ { 0, BX_IA_NOP }, // multi-byte NOP - /* 0F 1A /wm */ { 0, BX_IA_NOP }, // multi-byte NOP - /* 0F 1B /wr */ { 0, BX_IA_NOP }, // multi-byte NOP - /* 0F 1B /wm */ { 0, BX_IA_NOP }, // multi-byte NOP - /* 0F 1C /wr */ { 0, BX_IA_NOP }, // multi-byte NOP - /* 0F 1C /wm */ { 0, BX_IA_NOP }, // multi-byte NOP - /* 0F 1D /wr */ { 0, BX_IA_NOP }, // multi-byte NOP - /* 0F 1D /wm */ { 0, BX_IA_NOP }, // multi-byte NOP - /* 0F 1E /wr */ { 0, BX_IA_NOP }, // multi-byte NOP - /* 0F 1E /wm */ { 0, BX_IA_NOP }, // multi-byte NOP - /* 0F 1F /wr */ { 0, BX_IA_NOP }, // multi-byte NOP - /* 0F 1F /wm */ { 0, BX_IA_NOP }, // multi-byte NOP - /* 0F 20 /wr */ { BxGroupN, BX_IA_ERROR, BxOpcodeInfoMOV_RqCq }, - /* 0F 20 /wm */ { 0, BX_IA_ERROR }, - /* 0F 21 /wr */ { 0, BX_IA_MOV_RqDq }, - /* 0F 21 /wm */ { 0, BX_IA_ERROR }, - /* 0F 22 /wr */ { BxGroupN, BX_IA_ERROR, BxOpcodeInfoMOV_CqRq }, - /* 0F 22 /wm */ { 0, BX_IA_ERROR }, - /* 0F 23 /wr */ { BxTraceEnd, BX_IA_MOV_DqRq }, - /* 0F 23 /wm */ { 0, BX_IA_ERROR }, - /* 0F 24 /wr */ { 0, BX_IA_ERROR }, - /* 0F 24 /wm */ { 0, BX_IA_ERROR }, - /* 0F 25 /wr */ { 0, BX_IA_ERROR }, - /* 0F 25 /wm */ { 0, BX_IA_ERROR }, - /* 0F 26 /wr */ { 0, BX_IA_ERROR }, - /* 0F 26 /wm */ { 0, BX_IA_ERROR }, - /* 0F 27 /wr */ { 0, BX_IA_ERROR }, - /* 0F 27 /wm */ { 0, BX_IA_ERROR }, - /* 0F 28 /wr */ { BxPrefixSSE, BX_IA_MOVAPS_VpsWps, BxOpcodeGroupSSE_0f28 }, - /* 0F 28 /wm */ { BxPrefixSSE, BX_IA_MOVAPS_VpsWps, BxOpcodeGroupSSE_0f28 }, - /* 0F 29 /wr */ { BxPrefixSSE | BxArithDstRM, BX_IA_MOVAPS_WpsVps, BxOpcodeGroupSSE_0f29 }, - /* 0F 29 /wm */ { BxPrefixSSE, BX_IA_MOVAPS_WpsVps, BxOpcodeGroupSSE_0f29 }, - /* 0F 2A /wr */ { BxPrefixSSE, BX_IA_CVTPI2PS_VpsQq, BxOpcodeGroupSSE_0f2a }, - /* 0F 2A /wm */ { BxPrefixSSE, BX_IA_CVTPI2PS_VpsQq, BxOpcodeGroupSSE_0f2a }, - /* 0F 2B /wr */ { 0, BX_IA_ERROR }, // MOVNTPS/PD/SS/SD - /* 0F 2B /wm */ { BxPrefixSSE, BX_IA_MOVNTPS_MpsVps, BxOpcodeGroupSSE_0f2bM }, - /* 0F 2C /wr */ { BxPrefixSSE, BX_IA_CVTTPS2PI_PqWps, BxOpcodeGroupSSE_0f2c }, - /* 0F 2C /wm */ { BxPrefixSSE, BX_IA_CVTTPS2PI_PqWps, BxOpcodeGroupSSE_0f2c }, - /* 0F 2D /wr */ { BxPrefixSSE, BX_IA_CVTPS2PI_PqWps, BxOpcodeGroupSSE_0f2d }, - /* 0F 2D /wm */ { BxPrefixSSE, BX_IA_CVTPS2PI_PqWps, BxOpcodeGroupSSE_0f2d }, - /* 0F 2E /wr */ { BxPrefixSSE, BX_IA_UCOMISS_VssWss, BxOpcodeGroupSSE_0f2e }, - /* 0F 2E /wm */ { BxPrefixSSE, BX_IA_UCOMISS_VssWss, BxOpcodeGroupSSE_0f2e }, - /* 0F 2F /wr */ { BxPrefixSSE, BX_IA_COMISS_VpsWps, BxOpcodeGroupSSE_0f2f }, - /* 0F 2F /wm */ { BxPrefixSSE, BX_IA_COMISS_VpsWps, BxOpcodeGroupSSE_0f2f }, - /* 0F 30 /wr */ { 0, BX_IA_WRMSR }, - /* 0F 30 /wm */ { 0, BX_IA_WRMSR }, - /* 0F 31 /wr */ { 0, BX_IA_RDTSC }, - /* 0F 31 /wm */ { 0, BX_IA_RDTSC }, - /* 0F 32 /wr */ { 0, BX_IA_RDMSR }, - /* 0F 32 /wm */ { 0, BX_IA_RDMSR }, - /* 0F 33 /wr */ { 0, BX_IA_RDPMC }, - /* 0F 33 /wm */ { 0, BX_IA_RDPMC }, - /* 0F 34 /wr */ { BxTraceEnd, BX_IA_SYSENTER }, - /* 0F 34 /wm */ { BxTraceEnd, BX_IA_SYSENTER }, - /* 0F 35 /wr */ { BxTraceEnd, BX_IA_SYSEXIT }, - /* 0F 35 /wm */ { BxTraceEnd, BX_IA_SYSEXIT }, - /* 0F 36 /wr */ { 0, BX_IA_ERROR }, - /* 0F 36 /wm */ { 0, BX_IA_ERROR }, - /* 0F 37 /wr */ { 0, BX_IA_ERROR }, - /* 0F 37 /wm */ { 0, BX_IA_ERROR }, - /* 0F 38 /wr */ { Bx3ByteOp, BX_IA_ERROR, BxOpcode3ByteTable0f38 }, // 3-byte escape - /* 0F 38 /wm */ { Bx3ByteOp, BX_IA_ERROR, BxOpcode3ByteTable0f38 }, // 3-byte escape - /* 0F 39 /wr */ { 0, BX_IA_ERROR }, - /* 0F 39 /wm */ { 0, BX_IA_ERROR }, - /* 0F 3A /wr */ { Bx3ByteOp | BxImmediate_Ib, BX_IA_ERROR, BxOpcode3ByteTable0f3a }, // 3-byte escape - /* 0F 3A /wm */ { Bx3ByteOp | BxImmediate_Ib, BX_IA_ERROR, BxOpcode3ByteTable0f3a }, // 3-byte escape - /* 0F 3B /wr */ { 0, BX_IA_ERROR }, - /* 0F 3B /wm */ { 0, BX_IA_ERROR }, - /* 0F 3C /wr */ { 0, BX_IA_ERROR }, - /* 0F 3C /wm */ { 0, BX_IA_ERROR }, - /* 0F 3D /wr */ { 0, BX_IA_ERROR }, - /* 0F 3D /wm */ { 0, BX_IA_ERROR }, - /* 0F 3E /wr */ { 0, BX_IA_ERROR }, - /* 0F 3E /wm */ { 0, BX_IA_ERROR }, - /* 0F 3F /wr */ { 0, BX_IA_ERROR }, - /* 0F 3F /wm */ { 0, BX_IA_ERROR }, - /* 0F 40 /wr */ { 0, BX_IA_CMOVO_GwEw }, - /* 0F 40 /wm */ { 0, BX_IA_CMOVO_GwEw }, - /* 0F 41 /wr */ { 0, BX_IA_CMOVNO_GwEw }, - /* 0F 41 /wm */ { 0, BX_IA_CMOVNO_GwEw }, - /* 0F 42 /wr */ { 0, BX_IA_CMOVB_GwEw }, - /* 0F 42 /wm */ { 0, BX_IA_CMOVB_GwEw }, - /* 0F 43 /wr */ { 0, BX_IA_CMOVNB_GwEw }, - /* 0F 43 /wm */ { 0, BX_IA_CMOVNB_GwEw }, - /* 0F 44 /wr */ { 0, BX_IA_CMOVZ_GwEw }, - /* 0F 44 /wm */ { 0, BX_IA_CMOVZ_GwEw }, - /* 0F 45 /wr */ { 0, BX_IA_CMOVNZ_GwEw }, - /* 0F 45 /wm */ { 0, BX_IA_CMOVNZ_GwEw }, - /* 0F 46 /wr */ { 0, BX_IA_CMOVBE_GwEw }, - /* 0F 46 /wm */ { 0, BX_IA_CMOVBE_GwEw }, - /* 0F 47 /wr */ { 0, BX_IA_CMOVNBE_GwEw }, - /* 0F 47 /wm */ { 0, BX_IA_CMOVNBE_GwEw }, - /* 0F 48 /wr */ { 0, BX_IA_CMOVS_GwEw }, - /* 0F 48 /wm */ { 0, BX_IA_CMOVS_GwEw }, - /* 0F 49 /wr */ { 0, BX_IA_CMOVNS_GwEw }, - /* 0F 49 /wm */ { 0, BX_IA_CMOVNS_GwEw }, - /* 0F 4A /wr */ { 0, BX_IA_CMOVP_GwEw }, - /* 0F 4A /wm */ { 0, BX_IA_CMOVP_GwEw }, - /* 0F 4B /wr */ { 0, BX_IA_CMOVNP_GwEw }, - /* 0F 4B /wm */ { 0, BX_IA_CMOVNP_GwEw }, - /* 0F 4C /wr */ { 0, BX_IA_CMOVL_GwEw }, - /* 0F 4C /wm */ { 0, BX_IA_CMOVL_GwEw }, - /* 0F 4D /wr */ { 0, BX_IA_CMOVNL_GwEw }, - /* 0F 4D /wm */ { 0, BX_IA_CMOVNL_GwEw }, - /* 0F 4E /wr */ { 0, BX_IA_CMOVLE_GwEw }, - /* 0F 4E /wm */ { 0, BX_IA_CMOVLE_GwEw }, - /* 0F 4F /wr */ { 0, BX_IA_CMOVNLE_GwEw }, - /* 0F 4F /wm */ { 0, BX_IA_CMOVNLE_GwEw }, - /* 0F 50 /wr */ { BxPrefixSSE, BX_IA_MOVMSKPS_GdVRps, BxOpcodeGroupSSE_0f50R }, - /* 0F 50 /wm */ { 0, BX_IA_ERROR }, // MOVMSKPS/PD - /* 0F 51 /wr */ { BxPrefixSSE, BX_IA_SQRTPS_VpsWps, BxOpcodeGroupSSE_0f51 }, - /* 0F 51 /wm */ { BxPrefixSSE, BX_IA_SQRTPS_VpsWps, BxOpcodeGroupSSE_0f51 }, - /* 0F 52 /wr */ { BxPrefixSSE, BX_IA_RSQRTPS_VpsWps, BxOpcodeGroupSSE_0f52 }, - /* 0F 52 /wm */ { BxPrefixSSE, BX_IA_RSQRTPS_VpsWps, BxOpcodeGroupSSE_0f52 }, - /* 0F 53 /wr */ { BxPrefixSSE, BX_IA_RCPPS_VpsWps, BxOpcodeGroupSSE_0f53 }, - /* 0F 53 /wm */ { BxPrefixSSE, BX_IA_RCPPS_VpsWps, BxOpcodeGroupSSE_0f53 }, - /* 0F 54 /wr */ { BxPrefixSSE, BX_IA_ANDPS_VpsWps, BxOpcodeGroupSSE_0f54 }, - /* 0F 54 /wm */ { BxPrefixSSE, BX_IA_ANDPS_VpsWps, BxOpcodeGroupSSE_0f54 }, - /* 0F 55 /wr */ { BxPrefixSSE, BX_IA_ANDNPS_VpsWps, BxOpcodeGroupSSE_0f55 }, - /* 0F 55 /wm */ { BxPrefixSSE, BX_IA_ANDNPS_VpsWps, BxOpcodeGroupSSE_0f55 }, - /* 0F 56 /wr */ { BxPrefixSSE, BX_IA_ORPS_VpsWps, BxOpcodeGroupSSE_0f56 }, - /* 0F 56 /wm */ { BxPrefixSSE, BX_IA_ORPS_VpsWps, BxOpcodeGroupSSE_0f56 }, - /* 0F 57 /wr */ { BxPrefixSSE, BX_IA_XORPS_VpsWps, BxOpcodeGroupSSE_0f57 }, - /* 0F 57 /wm */ { BxPrefixSSE, BX_IA_XORPS_VpsWps, BxOpcodeGroupSSE_0f57 }, - /* 0F 58 /wr */ { BxPrefixSSE, BX_IA_ADDPS_VpsWps, BxOpcodeGroupSSE_0f58 }, - /* 0F 58 /wm */ { BxPrefixSSE, BX_IA_ADDPS_VpsWps, BxOpcodeGroupSSE_0f58 }, - /* 0F 59 /wr */ { BxPrefixSSE, BX_IA_MULPS_VpsWps, BxOpcodeGroupSSE_0f59 }, - /* 0F 59 /wm */ { BxPrefixSSE, BX_IA_MULPS_VpsWps, BxOpcodeGroupSSE_0f59 }, - /* 0F 5A /wr */ { BxPrefixSSE, BX_IA_CVTPS2PD_VpsWps, BxOpcodeGroupSSE_0f5a }, - /* 0F 5A /wm */ { BxPrefixSSE, BX_IA_CVTPS2PD_VpsWps, BxOpcodeGroupSSE_0f5a }, - /* 0F 5B /wr */ { BxPrefixSSE, BX_IA_CVTDQ2PS_VpsWdq, BxOpcodeGroupSSE_0f5b }, - /* 0F 5B /wm */ { BxPrefixSSE, BX_IA_CVTDQ2PS_VpsWdq, BxOpcodeGroupSSE_0f5b }, - /* 0F 5C /wr */ { BxPrefixSSE, BX_IA_SUBPS_VpsWps, BxOpcodeGroupSSE_0f5c }, - /* 0F 5C /wm */ { BxPrefixSSE, BX_IA_SUBPS_VpsWps, BxOpcodeGroupSSE_0f5c }, - /* 0F 5D /wr */ { BxPrefixSSE, BX_IA_MINPS_VpsWps, BxOpcodeGroupSSE_0f5d }, - /* 0F 5D /wm */ { BxPrefixSSE, BX_IA_MINPS_VpsWps, BxOpcodeGroupSSE_0f5d }, - /* 0F 5E /wr */ { BxPrefixSSE, BX_IA_DIVPS_VpsWps, BxOpcodeGroupSSE_0f5e }, - /* 0F 5E /wm */ { BxPrefixSSE, BX_IA_DIVPS_VpsWps, BxOpcodeGroupSSE_0f5e }, - /* 0F 5F /wr */ { BxPrefixSSE, BX_IA_MAXPS_VpsWps, BxOpcodeGroupSSE_0f5f }, - /* 0F 5F /wm */ { BxPrefixSSE, BX_IA_MAXPS_VpsWps, BxOpcodeGroupSSE_0f5f }, - /* 0F 60 /wr */ { BxPrefixSSE, BX_IA_PUNPCKLBW_PqQd, BxOpcodeGroupSSE_0f60 }, - /* 0F 60 /wm */ { BxPrefixSSE, BX_IA_PUNPCKLBW_PqQd, BxOpcodeGroupSSE_0f60 }, - /* 0F 61 /wr */ { BxPrefixSSE, BX_IA_PUNPCKLWD_PqQd, BxOpcodeGroupSSE_0f61 }, - /* 0F 61 /wm */ { BxPrefixSSE, BX_IA_PUNPCKLWD_PqQd, BxOpcodeGroupSSE_0f61 }, - /* 0F 62 /wr */ { BxPrefixSSE, BX_IA_PUNPCKLDQ_PqQd, BxOpcodeGroupSSE_0f62 }, - /* 0F 62 /wm */ { BxPrefixSSE, BX_IA_PUNPCKLDQ_PqQd, BxOpcodeGroupSSE_0f62 }, - /* 0F 63 /wr */ { BxPrefixSSE, BX_IA_PACKSSWB_PqQq, BxOpcodeGroupSSE_0f63 }, - /* 0F 63 /wm */ { BxPrefixSSE, BX_IA_PACKSSWB_PqQq, BxOpcodeGroupSSE_0f63 }, - /* 0F 64 /wr */ { BxPrefixSSE, BX_IA_PCMPGTB_PqQq, BxOpcodeGroupSSE_0f64 }, - /* 0F 64 /wm */ { BxPrefixSSE, BX_IA_PCMPGTB_PqQq, BxOpcodeGroupSSE_0f64 }, - /* 0F 65 /wr */ { BxPrefixSSE, BX_IA_PCMPGTW_PqQq, BxOpcodeGroupSSE_0f65 }, - /* 0F 65 /wm */ { BxPrefixSSE, BX_IA_PCMPGTW_PqQq, BxOpcodeGroupSSE_0f65 }, - /* 0F 66 /wr */ { BxPrefixSSE, BX_IA_PCMPGTD_PqQq, BxOpcodeGroupSSE_0f66 }, - /* 0F 66 /wm */ { BxPrefixSSE, BX_IA_PCMPGTD_PqQq, BxOpcodeGroupSSE_0f66 }, - /* 0F 67 /wr */ { BxPrefixSSE, BX_IA_PACKUSWB_PqQq, BxOpcodeGroupSSE_0f67 }, - /* 0F 67 /wm */ { BxPrefixSSE, BX_IA_PACKUSWB_PqQq, BxOpcodeGroupSSE_0f67 }, - /* 0F 68 /wr */ { BxPrefixSSE, BX_IA_PUNPCKHBW_PqQq, BxOpcodeGroupSSE_0f68 }, - /* 0F 68 /wm */ { BxPrefixSSE, BX_IA_PUNPCKHBW_PqQq, BxOpcodeGroupSSE_0f68 }, - /* 0F 69 /wr */ { BxPrefixSSE, BX_IA_PUNPCKHWD_PqQq, BxOpcodeGroupSSE_0f69 }, - /* 0F 69 /wm */ { BxPrefixSSE, BX_IA_PUNPCKHWD_PqQq, BxOpcodeGroupSSE_0f69 }, - /* 0F 6A /wr */ { BxPrefixSSE, BX_IA_PUNPCKHDQ_PqQq, BxOpcodeGroupSSE_0f6a }, - /* 0F 6A /wm */ { BxPrefixSSE, BX_IA_PUNPCKHDQ_PqQq, BxOpcodeGroupSSE_0f6a }, - /* 0F 6B /wr */ { BxPrefixSSE, BX_IA_PACKSSDW_PqQq, BxOpcodeGroupSSE_0f6b }, - /* 0F 6B /wm */ { BxPrefixSSE, BX_IA_PACKSSDW_PqQq, BxOpcodeGroupSSE_0f6b }, - /* 0F 6C /wr */ { BxPrefixSSE66, BX_IA_PUNPCKLQDQ_VdqWdq }, - /* 0F 6C /wm */ { BxPrefixSSE66, BX_IA_PUNPCKLQDQ_VdqWdq }, - /* 0F 6D /wr */ { BxPrefixSSE66, BX_IA_PUNPCKHQDQ_VdqWdq }, - /* 0F 6D /wm */ { BxPrefixSSE66, BX_IA_PUNPCKHQDQ_VdqWdq }, - /* 0F 6E /wr */ { BxPrefixSSE, BX_IA_MOVD_PqEd, BxOpcodeGroupSSE_0f6e }, - /* 0F 6E /wm */ { BxPrefixSSE, BX_IA_MOVD_PqEd, BxOpcodeGroupSSE_0f6e }, - /* 0F 6F /wr */ { BxPrefixSSE, BX_IA_MOVQ_PqQq, BxOpcodeGroupSSE_0f6f }, - /* 0F 6F /wm */ { BxPrefixSSE, BX_IA_MOVQ_PqQq, BxOpcodeGroupSSE_0f6f }, - /* 0F 70 /wr */ { BxPrefixSSE | BxImmediate_Ib, BX_IA_PSHUFW_PqQqIb, BxOpcodeGroupSSE_0f70 }, - /* 0F 70 /wm */ { BxPrefixSSE | BxImmediate_Ib, BX_IA_PSHUFW_PqQqIb, BxOpcodeGroupSSE_0f70 }, - /* 0F 71 /wr */ { BxGroup12, BX_IA_ERROR, BxOpcodeInfoG12R }, - /* 0F 71 /wm */ { 0, BX_IA_ERROR }, // SSE Group G12 - /* 0F 72 /wr */ { BxGroup13, BX_IA_ERROR, BxOpcodeInfoG13R }, - /* 0F 72 /wm */ { 0, BX_IA_ERROR }, // SSE Group G13 - /* 0F 73 /wr */ { BxGroup14, BX_IA_ERROR, BxOpcodeInfoG14R }, - /* 0F 73 /wm */ { 0, BX_IA_ERROR }, // SSE Group G14 - /* 0F 74 /wr */ { BxPrefixSSE, BX_IA_PCMPEQB_PqQq, BxOpcodeGroupSSE_0f74 }, - /* 0F 74 /wm */ { BxPrefixSSE, BX_IA_PCMPEQB_PqQq, BxOpcodeGroupSSE_0f74 }, - /* 0F 75 /wr */ { BxPrefixSSE, BX_IA_PCMPEQW_PqQq, BxOpcodeGroupSSE_0f75 }, - /* 0F 75 /wm */ { BxPrefixSSE, BX_IA_PCMPEQW_PqQq, BxOpcodeGroupSSE_0f75 }, - /* 0F 76 /wr */ { BxPrefixSSE, BX_IA_PCMPEQD_PqQq, BxOpcodeGroupSSE_0f76 }, - /* 0F 76 /wm */ { BxPrefixSSE, BX_IA_PCMPEQD_PqQq, BxOpcodeGroupSSE_0f76 }, - /* 0F 77 /wr */ { BxPrefixSSE, BX_IA_EMMS, BxOpcodeGroupSSE_ERR }, - /* 0F 77 /wm */ { BxPrefixSSE, BX_IA_EMMS, BxOpcodeGroupSSE_ERR }, - /* 0F 78 /wr */ { BxPrefixSSE, BX_IA_VMREAD_EqGq, BxOpcodeGroupSSE_ERR }, - /* 0F 78 /wm */ { BxPrefixSSE, BX_IA_VMREAD_EqGq, BxOpcodeGroupSSE_ERR }, - /* 0F 79 /wr */ { BxPrefixSSE, BX_IA_VMWRITE_GqEq, BxOpcodeGroupSSE_ERR }, - /* 0F 79 /wm */ { BxPrefixSSE, BX_IA_VMWRITE_GqEq, BxOpcodeGroupSSE_ERR }, - /* 0F 7A /wr */ { 0, BX_IA_ERROR }, - /* 0F 7A /wm */ { 0, BX_IA_ERROR }, - /* 0F 7B /wr */ { 0, BX_IA_ERROR }, - /* 0F 7B /wm */ { 0, BX_IA_ERROR }, - /* 0F 7C /wr */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f7c }, - /* 0F 7C /wm */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f7c }, - /* 0F 7D /wr */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f7d }, - /* 0F 7D /wm */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f7d }, - /* 0F 7E /wr */ { BxPrefixSSE, BX_IA_MOVD_EdPd, BxOpcodeGroupSSE_0f7e }, - /* 0F 7E /wm */ { BxPrefixSSE, BX_IA_MOVD_EdPd, BxOpcodeGroupSSE_0f7e }, - /* 0F 7F /wr */ { BxPrefixSSE, BX_IA_MOVQ_QqPq, BxOpcodeGroupSSE_0f7f }, - /* 0F 7F /wm */ { BxPrefixSSE, BX_IA_MOVQ_QqPq, BxOpcodeGroupSSE_0f7f }, - /* 0F 80 /wr */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JO_Jq }, - /* 0F 80 /wm */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JO_Jq }, - /* 0F 81 /wr */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNO_Jq }, - /* 0F 81 /wm */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNO_Jq }, - /* 0F 82 /wr */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JB_Jq }, - /* 0F 82 /wm */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JB_Jq }, - /* 0F 83 /wr */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNB_Jq }, - /* 0F 83 /wm */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNB_Jq }, - /* 0F 84 /wr */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JZ_Jq }, - /* 0F 84 /wm */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JZ_Jq }, - /* 0F 85 /wr */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNZ_Jq }, - /* 0F 85 /wm */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNZ_Jq }, - /* 0F 86 /wr */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JBE_Jq }, - /* 0F 86 /wm */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JBE_Jq }, - /* 0F 87 /wr */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNBE_Jq }, - /* 0F 87 /wm */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNBE_Jq }, - /* 0F 88 /wr */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JS_Jq }, - /* 0F 88 /wm */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JS_Jq }, - /* 0F 89 /wr */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNS_Jq }, - /* 0F 89 /wm */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNS_Jq }, - /* 0F 8A /wr */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JP_Jq }, - /* 0F 8A /wm */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JP_Jq }, - /* 0F 8B /wr */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNP_Jq }, - /* 0F 8B /wm */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNP_Jq }, - /* 0F 8C /wr */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JL_Jq }, - /* 0F 8C /wm */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JL_Jq }, - /* 0F 8D /wr */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNL_Jq }, - /* 0F 8D /wm */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNL_Jq }, - /* 0F 8E /wr */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JLE_Jq }, - /* 0F 8E /wm */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JLE_Jq }, - /* 0F 8F /wr */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNLE_Jq }, - /* 0F 8F /wm */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNLE_Jq }, - /* 0F 90 /wr */ { 0, BX_IA_SETO_Eb }, - /* 0F 90 /wm */ { 0, BX_IA_SETO_Eb }, - /* 0F 91 /wr */ { 0, BX_IA_SETNO_Eb }, - /* 0F 91 /wm */ { 0, BX_IA_SETNO_Eb }, - /* 0F 92 /wr */ { 0, BX_IA_SETB_Eb }, - /* 0F 92 /wm */ { 0, BX_IA_SETB_Eb }, - /* 0F 93 /wr */ { 0, BX_IA_SETNB_Eb }, - /* 0F 93 /wm */ { 0, BX_IA_SETNB_Eb }, - /* 0F 94 /wr */ { 0, BX_IA_SETZ_Eb }, - /* 0F 94 /wm */ { 0, BX_IA_SETZ_Eb }, - /* 0F 95 /wr */ { 0, BX_IA_SETNZ_Eb }, - /* 0F 95 /wm */ { 0, BX_IA_SETNZ_Eb }, - /* 0F 96 /wr */ { 0, BX_IA_SETBE_Eb }, - /* 0F 96 /wm */ { 0, BX_IA_SETBE_Eb }, - /* 0F 97 /wr */ { 0, BX_IA_SETNBE_Eb }, - /* 0F 97 /wm */ { 0, BX_IA_SETNBE_Eb }, - /* 0F 98 /wr */ { 0, BX_IA_SETS_Eb }, - /* 0F 98 /wm */ { 0, BX_IA_SETS_Eb }, - /* 0F 99 /wr */ { 0, BX_IA_SETNS_Eb }, - /* 0F 99 /wm */ { 0, BX_IA_SETNS_Eb }, - /* 0F 9A /wr */ { 0, BX_IA_SETP_Eb }, - /* 0F 9A /wm */ { 0, BX_IA_SETP_Eb }, - /* 0F 9B /wr */ { 0, BX_IA_SETNP_Eb }, - /* 0F 9B /wm */ { 0, BX_IA_SETNP_Eb }, - /* 0F 9C /wr */ { 0, BX_IA_SETL_Eb }, - /* 0F 9C /wm */ { 0, BX_IA_SETL_Eb }, - /* 0F 9D /wr */ { 0, BX_IA_SETNL_Eb }, - /* 0F 9D /wm */ { 0, BX_IA_SETNL_Eb }, - /* 0F 9E /wr */ { 0, BX_IA_SETLE_Eb }, - /* 0F 9E /wm */ { 0, BX_IA_SETLE_Eb }, - /* 0F 9F /wr */ { 0, BX_IA_SETNLE_Eb }, - /* 0F 9F /wm */ { 0, BX_IA_SETNLE_Eb }, - /* 0F A0 /wr */ { 0, BX_IA_PUSH16_FS }, - /* 0F A0 /wm */ { 0, BX_IA_PUSH16_FS }, - /* 0F A1 /wr */ { 0, BX_IA_POP16_FS }, - /* 0F A1 /wm */ { 0, BX_IA_POP16_FS }, - /* 0F A2 /wr */ { 0, BX_IA_CPUID }, - /* 0F A2 /wm */ { 0, BX_IA_CPUID }, - /* 0F A3 /wr */ { 0, BX_IA_BT_EwGwR }, - /* 0F A3 /wm */ { 0, BX_IA_BT_EwGwM }, - /* 0F A4 /wr */ { BxImmediate_Ib, BX_IA_SHLD_EwGw }, - /* 0F A4 /wm */ { BxImmediate_Ib, BX_IA_SHLD_EwGw }, - /* 0F A5 /wr */ { 0, BX_IA_SHLD_EwGw }, - /* 0F A5 /wm */ { 0, BX_IA_SHLD_EwGw }, - /* 0F A6 /wr */ { 0, BX_IA_ERROR }, - /* 0F A6 /wm */ { 0, BX_IA_ERROR }, - /* 0F A7 /wr */ { 0, BX_IA_ERROR }, - /* 0F A7 /wm */ { 0, BX_IA_ERROR }, - /* 0F A8 /wr */ { 0, BX_IA_PUSH16_GS }, - /* 0F A8 /wm */ { 0, BX_IA_PUSH16_GS }, - /* 0F A9 /wr */ { 0, BX_IA_POP16_GS }, - /* 0F A9 /wm */ { 0, BX_IA_POP16_GS }, - /* 0F AA /wr */ { BxTraceEnd, BX_IA_RSM }, - /* 0F AA /wm */ { BxTraceEnd, BX_IA_RSM }, - /* 0F AB /wr */ { 0, BX_IA_BTS_EwGwR }, - /* 0F AB /wm */ { BxLockable, BX_IA_BTS_EwGwM }, - /* 0F AC /wr */ { BxImmediate_Ib, BX_IA_SHRD_EwGw }, - /* 0F AC /wm */ { BxImmediate_Ib, BX_IA_SHRD_EwGw }, - /* 0F AD /wr */ { 0, BX_IA_SHRD_EwGw }, - /* 0F AD /wm */ { 0, BX_IA_SHRD_EwGw }, - /* 0F AE /wr */ { BxGroup15, BX_IA_ERROR, BxOpcodeInfoG15R64 }, - /* 0F AE /wm */ { BxGroup15, BX_IA_ERROR, BxOpcodeInfoG15M }, - /* 0F AF /wr */ { 0, BX_IA_IMUL_GwEw }, - /* 0F AF /wm */ { 0, BX_IA_IMUL_GwEw }, - /* 0F B0 /wr */ { 0, BX_IA_CMPXCHG_EbGb }, - /* 0F B0 /wm */ { BxLockable, BX_IA_CMPXCHG_EbGb }, - /* 0F B1 /wr */ { 0, BX_IA_CMPXCHG_EwGw }, - /* 0F B1 /wm */ { BxLockable, BX_IA_CMPXCHG_EwGw }, - /* 0F B2 /wr */ { 0, BX_IA_ERROR }, // LSS - /* 0F B2 /wm */ { 0, BX_IA_LSS_GwMp }, - /* 0F B3 /wr */ { 0, BX_IA_BTR_EwGwR }, - /* 0F B3 /wm */ { BxLockable, BX_IA_BTR_EwGwM }, - /* 0F B4 /wr */ { 0, BX_IA_ERROR }, // LFS - /* 0F B4 /wm */ { 0, BX_IA_LFS_GwMp }, - /* 0F B5 /wr */ { 0, BX_IA_ERROR }, // LGS - /* 0F B5 /wm */ { 0, BX_IA_LGS_GwMp }, - /* 0F B6 /wr */ { 0, BX_IA_MOVZX_GwEb }, - /* 0F B6 /wm */ { 0, BX_IA_MOVZX_GwEb }, - /* 0F B7 /wr */ { 0, BX_IA_MOV_GwEwR }, // MOVZX_GwEw - /* 0F B7 /wm */ { 0, BX_IA_MOV_GwEwM }, // MOVZX_GwEw - /* 0F B8 /wr */ { BxPrefixSSEF3, BX_IA_POPCNT_GwEw }, - /* 0F B8 /wm */ { BxPrefixSSEF3, BX_IA_POPCNT_GwEw }, - /* 0F B9 /wr */ { BxTraceEnd, BX_IA_UD2B }, - /* 0F B9 /wm */ { BxTraceEnd, BX_IA_UD2B }, - /* 0F BA /wr */ { BxGroup8, BX_IA_ERROR, BxOpcodeInfoG8EwIb }, - /* 0F BA /wm */ { BxGroup8, BX_IA_ERROR, BxOpcodeInfoG8EwIb }, - /* 0F BB /wr */ { 0, BX_IA_BTC_EwGwR }, - /* 0F BB /wm */ { BxLockable, BX_IA_BTC_EwGwM }, - /* 0F BC /wr */ { 0, BX_IA_BSF_GwEw }, - /* 0F BC /wm */ { 0, BX_IA_BSF_GwEw }, - /* 0F BD /wr */ { 0, BX_IA_BSR_GwEw }, - /* 0F BD /wm */ { 0, BX_IA_BSR_GwEw }, - /* 0F BE /wr */ { 0, BX_IA_MOVSX_GwEb }, - /* 0F BE /wm */ { 0, BX_IA_MOVSX_GwEb }, - /* 0F BF /wr */ { 0, BX_IA_MOV_GwEwR }, // MOVSX_GwEw - /* 0F BF /wm */ { 0, BX_IA_MOV_GwEwM }, // MOVSX_GwEw - /* 0F C0 /wr */ { 0, BX_IA_XADD_EbGb }, - /* 0F C0 /wm */ { BxLockable, BX_IA_XADD_EbGb }, - /* 0F C1 /wr */ { 0, BX_IA_XADD_EwGw }, - /* 0F C1 /wm */ { BxLockable, BX_IA_XADD_EwGw }, - /* 0F C2 /wr */ { BxPrefixSSE | BxImmediate_Ib, BX_IA_CMPPS_VpsWpsIb, BxOpcodeGroupSSE_0fc2 }, - /* 0F C2 /wm */ { BxPrefixSSE | BxImmediate_Ib, BX_IA_CMPPS_VpsWpsIb, BxOpcodeGroupSSE_0fc2 }, - /* 0F C3 /wr */ { 0, BX_IA_ERROR }, // MOVNTI SSE group - /* 0F C3 /wm */ { BxPrefixSSE, BX_IA_MOVNTI_MdGd, BxOpcodeGroupSSE_ERR }, - /* 0F C4 /wr */ { BxPrefixSSE | BxImmediate_Ib, BX_IA_PINSRW_PqEwIb, BxOpcodeGroupSSE_0fc4 }, - /* 0F C4 /wm */ { BxPrefixSSE | BxImmediate_Ib, BX_IA_PINSRW_PqEwIb, BxOpcodeGroupSSE_0fc4 }, - /* 0F C5 /wr */ { BxPrefixSSE | BxImmediate_Ib, BX_IA_PEXTRW_GdPqIb, BxOpcodeGroupSSE_0fc5R }, - /* 0F C5 /wm */ { 0, BX_IA_ERROR }, // PEXTRW SSE group - /* 0F C6 /wr */ { BxPrefixSSE | BxImmediate_Ib, BX_IA_SHUFPS_VpsWpsIb, BxOpcodeGroupSSE_0fc6 }, - /* 0F C6 /wm */ { BxPrefixSSE | BxImmediate_Ib, BX_IA_SHUFPS_VpsWpsIb, BxOpcodeGroupSSE_0fc6 }, - /* 0F C7 /wr */ { 0, BX_IA_ERROR }, // CMPXCHG8B G9 group - /* 0F C7 /wm */ { BxGroup9, BX_IA_ERROR, BxOpcodeInfoG9M }, - /* 0F C8 /wr */ { 0, BX_IA_BSWAP_RX }, - /* 0F C8 /wm */ { 0, BX_IA_BSWAP_RX }, - /* 0F C9 /wr */ { 0, BX_IA_BSWAP_RX }, - /* 0F C9 /wm */ { 0, BX_IA_BSWAP_RX }, - /* 0F CA /wr */ { 0, BX_IA_BSWAP_RX }, - /* 0F CA /wm */ { 0, BX_IA_BSWAP_RX }, - /* 0F CB /wr */ { 0, BX_IA_BSWAP_RX }, - /* 0F CB /wm */ { 0, BX_IA_BSWAP_RX }, - /* 0F CC /wr */ { 0, BX_IA_BSWAP_RX }, - /* 0F CC /wm */ { 0, BX_IA_BSWAP_RX }, - /* 0F CD /wr */ { 0, BX_IA_BSWAP_RX }, - /* 0F CD /wm */ { 0, BX_IA_BSWAP_RX }, - /* 0F CE /wr */ { 0, BX_IA_BSWAP_RX }, - /* 0F CE /wm */ { 0, BX_IA_BSWAP_RX }, - /* 0F CF /wr */ { 0, BX_IA_BSWAP_RX }, - /* 0F CF /wm */ { 0, BX_IA_BSWAP_RX }, - /* 0F D0 /wr */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0fd0 }, - /* 0F D0 /wm */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0fd0 }, - /* 0F D1 /wr */ { BxPrefixSSE, BX_IA_PSRLW_PqQq, BxOpcodeGroupSSE_0fd1 }, - /* 0F D1 /wm */ { BxPrefixSSE, BX_IA_PSRLW_PqQq, BxOpcodeGroupSSE_0fd1 }, - /* 0F D2 /wr */ { BxPrefixSSE, BX_IA_PSRLD_PqQq, BxOpcodeGroupSSE_0fd2 }, - /* 0F D2 /wm */ { BxPrefixSSE, BX_IA_PSRLD_PqQq, BxOpcodeGroupSSE_0fd2 }, - /* 0F D3 /wr */ { BxPrefixSSE, BX_IA_PSRLQ_PqQq, BxOpcodeGroupSSE_0fd3 }, - /* 0F D3 /wm */ { BxPrefixSSE, BX_IA_PSRLQ_PqQq, BxOpcodeGroupSSE_0fd3 }, - /* 0F D4 /wr */ { BxPrefixSSE, BX_IA_PADDQ_PqQq, BxOpcodeGroupSSE_0fd4 }, - /* 0F D4 /wm */ { BxPrefixSSE, BX_IA_PADDQ_PqQq, BxOpcodeGroupSSE_0fd4 }, - /* 0F D5 /wr */ { BxPrefixSSE, BX_IA_PMULLW_PqQq, BxOpcodeGroupSSE_0fd5 }, - /* 0F D5 /wm */ { BxPrefixSSE, BX_IA_PMULLW_PqQq, BxOpcodeGroupSSE_0fd5 }, - /* 0F D6 /wr */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0fd6 }, - /* 0F D6 /wm */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0fd6 }, - /* 0F D7 /wr */ { BxPrefixSSE, BX_IA_PMOVMSKB_GdPRq, BxOpcodeGroupSSE_0fd7 }, - /* 0F D7 /wm */ { 0, BX_IA_ERROR }, // PMOVMSKB is reg/reg form only - /* 0F D8 /wr */ { BxPrefixSSE, BX_IA_PSUBUSB_PqQq, BxOpcodeGroupSSE_0fd8 }, - /* 0F D8 /wm */ { BxPrefixSSE, BX_IA_PSUBUSB_PqQq, BxOpcodeGroupSSE_0fd8 }, - /* 0F D9 /wr */ { BxPrefixSSE, BX_IA_PSUBUSW_PqQq, BxOpcodeGroupSSE_0fd9 }, - /* 0F D9 /wm */ { BxPrefixSSE, BX_IA_PSUBUSW_PqQq, BxOpcodeGroupSSE_0fd9 }, - /* 0F DA /wr */ { BxPrefixSSE, BX_IA_PMINUB_PqQq, BxOpcodeGroupSSE_0fda }, - /* 0F DA /wm */ { BxPrefixSSE, BX_IA_PMINUB_PqQq, BxOpcodeGroupSSE_0fda }, - /* 0F DB /wr */ { BxPrefixSSE, BX_IA_PAND_PqQq, BxOpcodeGroupSSE_0fdb }, - /* 0F DB /wm */ { BxPrefixSSE, BX_IA_PAND_PqQq, BxOpcodeGroupSSE_0fdb }, - /* 0F DC /wr */ { BxPrefixSSE, BX_IA_PADDUSB_PqQq, BxOpcodeGroupSSE_0fdc }, - /* 0F DC /wm */ { BxPrefixSSE, BX_IA_PADDUSB_PqQq, BxOpcodeGroupSSE_0fdc }, - /* 0F DD /wr */ { BxPrefixSSE, BX_IA_PADDUSW_PqQq, BxOpcodeGroupSSE_0fdd }, - /* 0F DD /wm */ { BxPrefixSSE, BX_IA_PADDUSW_PqQq, BxOpcodeGroupSSE_0fdd }, - /* 0F DE /wr */ { BxPrefixSSE, BX_IA_PMAXUB_PqQq, BxOpcodeGroupSSE_0fde }, - /* 0F DE /wm */ { BxPrefixSSE, BX_IA_PMAXUB_PqQq, BxOpcodeGroupSSE_0fde }, - /* 0F DF /wr */ { BxPrefixSSE, BX_IA_PANDN_PqQq, BxOpcodeGroupSSE_0fdf }, - /* 0F DF /wm */ { BxPrefixSSE, BX_IA_PANDN_PqQq, BxOpcodeGroupSSE_0fdf }, - /* 0F E0 /wr */ { BxPrefixSSE, BX_IA_PAVGB_PqQq, BxOpcodeGroupSSE_0fe0 }, - /* 0F E0 /wm */ { BxPrefixSSE, BX_IA_PAVGB_PqQq, BxOpcodeGroupSSE_0fe0 }, - /* 0F E1 /wr */ { BxPrefixSSE, BX_IA_PSRAW_PqQq, BxOpcodeGroupSSE_0fe1 }, - /* 0F E1 /wm */ { BxPrefixSSE, BX_IA_PSRAW_PqQq, BxOpcodeGroupSSE_0fe1 }, - /* 0F E2 /wr */ { BxPrefixSSE, BX_IA_PSRAD_PqQq, BxOpcodeGroupSSE_0fe2 }, - /* 0F E2 /wm */ { BxPrefixSSE, BX_IA_PSRAD_PqQq, BxOpcodeGroupSSE_0fe2 }, - /* 0F E3 /wr */ { BxPrefixSSE, BX_IA_PAVGW_PqQq, BxOpcodeGroupSSE_0fe3 }, - /* 0F E3 /wm */ { BxPrefixSSE, BX_IA_PAVGW_PqQq, BxOpcodeGroupSSE_0fe3 }, - /* 0F E4 /wr */ { BxPrefixSSE, BX_IA_PMULHUW_PqQq, BxOpcodeGroupSSE_0fe4 }, - /* 0F E4 /wm */ { BxPrefixSSE, BX_IA_PMULHUW_PqQq, BxOpcodeGroupSSE_0fe4 }, - /* 0F E5 /wr */ { BxPrefixSSE, BX_IA_PMULHW_PqQq, BxOpcodeGroupSSE_0fe5 }, - /* 0F E5 /wm */ { BxPrefixSSE, BX_IA_PMULHW_PqQq, BxOpcodeGroupSSE_0fe5 }, - /* 0F E6 /wr */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0fe6 }, - /* 0F E6 /wm */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0fe6 }, - /* 0F E7 /wr */ { 0, BX_IA_ERROR }, // MOVNTQ/MOVNTDQ SSE group - /* 0F E7 /wm */ { BxPrefixSSE, BX_IA_MOVNTQ_MqPq, BxOpcodeGroupSSE_0fe7M }, - /* 0F E8 /wr */ { BxPrefixSSE, BX_IA_PSUBSB_PqQq, BxOpcodeGroupSSE_0fe8 }, - /* 0F E8 /wm */ { BxPrefixSSE, BX_IA_PSUBSB_PqQq, BxOpcodeGroupSSE_0fe8 }, - /* 0F E9 /wr */ { BxPrefixSSE, BX_IA_PSUBSW_PqQq, BxOpcodeGroupSSE_0fe9 }, - /* 0F E9 /wm */ { BxPrefixSSE, BX_IA_PSUBSW_PqQq, BxOpcodeGroupSSE_0fe9 }, - /* 0F EA /wr */ { BxPrefixSSE, BX_IA_PMINSW_PqQq, BxOpcodeGroupSSE_0fea }, - /* 0F EA /wm */ { BxPrefixSSE, BX_IA_PMINSW_PqQq, BxOpcodeGroupSSE_0fea }, - /* 0F EB /wr */ { BxPrefixSSE, BX_IA_POR_PqQq, BxOpcodeGroupSSE_0feb }, - /* 0F EB /wm */ { BxPrefixSSE, BX_IA_POR_PqQq, BxOpcodeGroupSSE_0feb }, - /* 0F EC /wr */ { BxPrefixSSE, BX_IA_PADDSB_PqQq, BxOpcodeGroupSSE_0fec }, - /* 0F EC /wm */ { BxPrefixSSE, BX_IA_PADDSB_PqQq, BxOpcodeGroupSSE_0fec }, - /* 0F ED /wr */ { BxPrefixSSE, BX_IA_PADDSW_PqQq, BxOpcodeGroupSSE_0fed }, - /* 0F ED /wm */ { BxPrefixSSE, BX_IA_PADDSW_PqQq, BxOpcodeGroupSSE_0fed }, - /* 0F EE /wr */ { BxPrefixSSE, BX_IA_PMAXSW_PqQq, BxOpcodeGroupSSE_0fee }, - /* 0F EE /wm */ { BxPrefixSSE, BX_IA_PMAXSW_PqQq, BxOpcodeGroupSSE_0fee }, - /* 0F EF /wr */ { BxPrefixSSE, BX_IA_PXOR_PqQq, BxOpcodeGroupSSE_0fef }, - /* 0F EF /wm */ { BxPrefixSSE, BX_IA_PXOR_PqQq, BxOpcodeGroupSSE_0fef }, - /* 0F F0 /wr */ { 0, BX_IA_ERROR }, // LDDQU SSE group - /* 0F F0 /wm */ { BxPrefixSSEF2, BX_IA_LDDQU_VdqMdq }, - /* 0F F1 /wr */ { BxPrefixSSE, BX_IA_PSLLW_PqQq, BxOpcodeGroupSSE_0ff1 }, - /* 0F F1 /wm */ { BxPrefixSSE, BX_IA_PSLLW_PqQq, BxOpcodeGroupSSE_0ff1 }, - /* 0F F2 /wr */ { BxPrefixSSE, BX_IA_PSLLD_PqQq, BxOpcodeGroupSSE_0ff2 }, - /* 0F F2 /wm */ { BxPrefixSSE, BX_IA_PSLLD_PqQq, BxOpcodeGroupSSE_0ff2 }, - /* 0F F3 /wr */ { BxPrefixSSE, BX_IA_PSLLQ_PqQq, BxOpcodeGroupSSE_0ff3 }, - /* 0F F3 /wm */ { BxPrefixSSE, BX_IA_PSLLQ_PqQq, BxOpcodeGroupSSE_0ff3 }, - /* 0F F4 /wr */ { BxPrefixSSE, BX_IA_PMULUDQ_PqQq, BxOpcodeGroupSSE_0ff4 }, - /* 0F F4 /wm */ { BxPrefixSSE, BX_IA_PMULUDQ_PqQq, BxOpcodeGroupSSE_0ff4 }, - /* 0F F5 /wr */ { BxPrefixSSE, BX_IA_PMADDWD_PqQq, BxOpcodeGroupSSE_0ff5 }, - /* 0F F5 /wm */ { BxPrefixSSE, BX_IA_PMADDWD_PqQq, BxOpcodeGroupSSE_0ff5 }, - /* 0F F6 /wr */ { BxPrefixSSE, BX_IA_PSADBW_PqQq, BxOpcodeGroupSSE_0ff6 }, - /* 0F F6 /wm */ { BxPrefixSSE, BX_IA_PSADBW_PqQq, BxOpcodeGroupSSE_0ff6 }, - /* 0F F7 /wr */ { BxPrefixSSE, BX_IA_MASKMOVQ_PqPRq, BxOpcodeGroupSSE_0ff7R }, - /* 0F F7 /wm */ { 0, BX_IA_ERROR }, // MASKMOV SSE group - /* 0F F8 /wr */ { BxPrefixSSE, BX_IA_PSUBB_PqQq, BxOpcodeGroupSSE_0ff8 }, - /* 0F F8 /wm */ { BxPrefixSSE, BX_IA_PSUBB_PqQq, BxOpcodeGroupSSE_0ff8 }, - /* 0F F9 /wr */ { BxPrefixSSE, BX_IA_PSUBW_PqQq, BxOpcodeGroupSSE_0ff9 }, - /* 0F F9 /wm */ { BxPrefixSSE, BX_IA_PSUBW_PqQq, BxOpcodeGroupSSE_0ff9 }, - /* 0F FA /wr */ { BxPrefixSSE, BX_IA_PSUBD_PqQq, BxOpcodeGroupSSE_0ffa }, - /* 0F FA /wm */ { BxPrefixSSE, BX_IA_PSUBD_PqQq, BxOpcodeGroupSSE_0ffa }, - /* 0F FB /wr */ { BxPrefixSSE, BX_IA_PSUBQ_PqQq, BxOpcodeGroupSSE_0ffb }, - /* 0F FB /wm */ { BxPrefixSSE, BX_IA_PSUBQ_PqQq, BxOpcodeGroupSSE_0ffb }, - /* 0F FC /wr */ { BxPrefixSSE, BX_IA_PADDB_PqQq, BxOpcodeGroupSSE_0ffc }, - /* 0F FC /wm */ { BxPrefixSSE, BX_IA_PADDB_PqQq, BxOpcodeGroupSSE_0ffc }, - /* 0F FD /wr */ { BxPrefixSSE, BX_IA_PADDW_PqQq, BxOpcodeGroupSSE_0ffd }, - /* 0F FD /wm */ { BxPrefixSSE, BX_IA_PADDW_PqQq, BxOpcodeGroupSSE_0ffd }, - /* 0F FE /wr */ { BxPrefixSSE, BX_IA_PADDD_PqQq, BxOpcodeGroupSSE_0ffe }, - /* 0F FE /wm */ { BxPrefixSSE, BX_IA_PADDD_PqQq, BxOpcodeGroupSSE_0ffe }, - /* 0F FF /wr */ { 0, BX_IA_ERROR }, - /* 0F FF /wm */ { 0, BX_IA_ERROR }, + /* 0F 00 /w */ { BxGroup6, BX_IA_ERROR, BxOpcodeInfoG6 }, + /* 0F 01 /w */ { BxGroup7, BX_IA_ERROR, BxOpcodeInfoG7q }, + /* 0F 02 /w */ { 0, BX_IA_LAR_GvEw }, + /* 0F 03 /w */ { 0, BX_IA_LSL_GvEw }, + /* 0F 04 /w */ { 0, BX_IA_ERROR }, + /* 0F 05 /w */ { BxTraceEnd, BX_IA_SYSCALL }, + /* 0F 06 /w */ { 0, BX_IA_CLTS }, + /* 0F 07 /w */ { BxTraceEnd, BX_IA_SYSRET }, + /* 0F 08 /w */ { BxTraceEnd, BX_IA_INVD }, + /* 0F 09 /w */ { BxTraceEnd, BX_IA_WBINVD }, + /* 0F 0A /w */ { 0, BX_IA_ERROR }, + /* 0F 0B /w */ { BxTraceEnd, BX_IA_UD2A }, + /* 0F 0C /w */ { 0, BX_IA_ERROR }, + /* 0F 0D /w */ { 0, BX_IA_PREFETCHW }, // 3DNow! PREFETCHW on AMD, NOP on Intel + /* 0F 0E /w */ { 0, BX_IA_FEMMS }, // 3DNow! FEMMS + /* 0F 0F /w */ { BxImmediate_Ib, BX_IA_ERROR }, // 3DNow! Opcode Table + /* 0F 10 /w */ { BxPrefixSSE, BX_IA_MOVUPS_VpsWps, BxOpcodeGroupSSE_0f10 }, + /* 0F 11 /w */ { BxPrefixSSE | BxArithDstRM, BX_IA_MOVUPS_WpsVps, BxOpcodeGroupSSE_0f11 }, + /* 0F 12 /w */ { BxPrefixSSE, BX_IA_MOVLPS_VpsMq, BxOpcodeGroupSSE_0f12 }, + /* 0F 13 /w */ { BxPrefixSSE, BX_IA_MOVLPS_MqVps, BxOpcodeGroupSSE_0f13M }, + /* 0F 14 /w */ { BxPrefixSSE, BX_IA_UNPCKLPS_VpsWdq, BxOpcodeGroupSSE_0f14 }, + /* 0F 15 /w */ { BxPrefixSSE, BX_IA_UNPCKHPS_VpsWdq, BxOpcodeGroupSSE_0f15 }, + /* 0F 16 /w */ { BxPrefixSSE, BX_IA_MOVHPS_VpsMq, BxOpcodeGroupSSE_0f16 }, + /* 0F 17 /w */ { BxPrefixSSE, BX_IA_MOVHPS_MqVps, BxOpcodeGroupSSE_0f17M }, + /* 0F 18 /w */ { 0, BX_IA_PREFETCH }, // opcode group G16, PREFETCH hints + /* 0F 19 /w */ { 0, BX_IA_NOP }, // multi-byte NOP + /* 0F 1A /w */ { 0, BX_IA_NOP }, // multi-byte NOP + /* 0F 1B /w */ { 0, BX_IA_NOP }, // multi-byte NOP + /* 0F 1C /w */ { 0, BX_IA_NOP }, // multi-byte NOP + /* 0F 1D /w */ { 0, BX_IA_NOP }, // multi-byte NOP + /* 0F 1E /w */ { 0, BX_IA_NOP }, // multi-byte NOP + /* 0F 1F /w */ { 0, BX_IA_NOP }, // multi-byte NOP + /* 0F 20 /w */ { BxGroupN, BX_IA_ERROR, BxOpcodeInfoMOV_RqCq }, + /* 0F 21 /w */ { 0, BX_IA_MOV_RqDq }, + /* 0F 22 /w */ { BxGroupN, BX_IA_ERROR, BxOpcodeInfoMOV_CqRq }, + /* 0F 23 /w */ { BxTraceEnd, BX_IA_MOV_DqRq }, + /* 0F 24 /w */ { 0, BX_IA_ERROR }, + /* 0F 25 /w */ { 0, BX_IA_ERROR }, + /* 0F 26 /w */ { 0, BX_IA_ERROR }, + /* 0F 27 /w */ { 0, BX_IA_ERROR }, + /* 0F 28 /w */ { BxPrefixSSE, BX_IA_MOVAPS_VpsWps, BxOpcodeGroupSSE_0f28 }, + /* 0F 29 /w */ { BxPrefixSSE | BxArithDstRM, BX_IA_MOVAPS_WpsVps, BxOpcodeGroupSSE_0f29 }, + /* 0F 2A /w */ { BxPrefixSSE, BX_IA_CVTPI2PS_VpsQq, BxOpcodeGroupSSE_0f2a }, + /* 0F 2B /w */ { BxPrefixSSE, BX_IA_MOVNTPS_MpsVps, BxOpcodeGroupSSE_0f2bM }, + /* 0F 2C /w */ { BxPrefixSSE, BX_IA_CVTTPS2PI_PqWps, BxOpcodeGroupSSE_0f2c }, + /* 0F 2D /w */ { BxPrefixSSE, BX_IA_CVTPS2PI_PqWps, BxOpcodeGroupSSE_0f2d }, + /* 0F 2E /w */ { BxPrefixSSE, BX_IA_UCOMISS_VssWss, BxOpcodeGroupSSE_0f2e }, + /* 0F 2F /w */ { BxPrefixSSE, BX_IA_COMISS_VpsWps, BxOpcodeGroupSSE_0f2f }, + /* 0F 30 /w */ { 0, BX_IA_WRMSR }, + /* 0F 31 /w */ { 0, BX_IA_RDTSC }, + /* 0F 32 /w */ { 0, BX_IA_RDMSR }, + /* 0F 33 /w */ { 0, BX_IA_RDPMC }, + /* 0F 34 /w */ { BxTraceEnd, BX_IA_SYSENTER }, + /* 0F 35 /w */ { BxTraceEnd, BX_IA_SYSEXIT }, + /* 0F 36 /w */ { 0, BX_IA_ERROR }, + /* 0F 37 /w */ { 0, BX_IA_ERROR }, + /* 0F 38 /w */ { Bx3ByteOp, BX_IA_ERROR, BxOpcode3ByteTable0f38 }, // 3-byte escape + /* 0F 39 /w */ { 0, BX_IA_ERROR }, + /* 0F 3A /w */ { Bx3ByteOp | BxImmediate_Ib, BX_IA_ERROR, BxOpcode3ByteTable0f3a }, // 3-byte escape + /* 0F 3B /w */ { 0, BX_IA_ERROR }, + /* 0F 3C /w */ { 0, BX_IA_ERROR }, + /* 0F 3D /w */ { 0, BX_IA_ERROR }, + /* 0F 3E /w */ { 0, BX_IA_ERROR }, + /* 0F 3F /w */ { 0, BX_IA_ERROR }, + /* 0F 40 /w */ { 0, BX_IA_CMOVO_GwEw }, + /* 0F 41 /w */ { 0, BX_IA_CMOVNO_GwEw }, + /* 0F 42 /w */ { 0, BX_IA_CMOVB_GwEw }, + /* 0F 43 /w */ { 0, BX_IA_CMOVNB_GwEw }, + /* 0F 44 /w */ { 0, BX_IA_CMOVZ_GwEw }, + /* 0F 45 /w */ { 0, BX_IA_CMOVNZ_GwEw }, + /* 0F 46 /w */ { 0, BX_IA_CMOVBE_GwEw }, + /* 0F 47 /w */ { 0, BX_IA_CMOVNBE_GwEw }, + /* 0F 48 /w */ { 0, BX_IA_CMOVS_GwEw }, + /* 0F 49 /w */ { 0, BX_IA_CMOVNS_GwEw }, + /* 0F 4A /w */ { 0, BX_IA_CMOVP_GwEw }, + /* 0F 4B /w */ { 0, BX_IA_CMOVNP_GwEw }, + /* 0F 4C /w */ { 0, BX_IA_CMOVL_GwEw }, + /* 0F 4D /w */ { 0, BX_IA_CMOVNL_GwEw }, + /* 0F 4E /w */ { 0, BX_IA_CMOVLE_GwEw }, + /* 0F 4F /w */ { 0, BX_IA_CMOVNLE_GwEw }, + /* 0F 50 /w */ { BxPrefixSSE, BX_IA_MOVMSKPS_GdVRps, BxOpcodeGroupSSE_0f50R }, + /* 0F 51 /w */ { BxPrefixSSE, BX_IA_SQRTPS_VpsWps, BxOpcodeGroupSSE_0f51 }, + /* 0F 52 /w */ { BxPrefixSSE, BX_IA_RSQRTPS_VpsWps, BxOpcodeGroupSSE_0f52 }, + /* 0F 53 /w */ { BxPrefixSSE, BX_IA_RCPPS_VpsWps, BxOpcodeGroupSSE_0f53 }, + /* 0F 54 /w */ { BxPrefixSSE, BX_IA_ANDPS_VpsWps, BxOpcodeGroupSSE_0f54 }, + /* 0F 55 /w */ { BxPrefixSSE, BX_IA_ANDNPS_VpsWps, BxOpcodeGroupSSE_0f55 }, + /* 0F 56 /w */ { BxPrefixSSE, BX_IA_ORPS_VpsWps, BxOpcodeGroupSSE_0f56 }, + /* 0F 57 /w */ { BxPrefixSSE, BX_IA_XORPS_VpsWps, BxOpcodeGroupSSE_0f57 }, + /* 0F 58 /w */ { BxPrefixSSE, BX_IA_ADDPS_VpsWps, BxOpcodeGroupSSE_0f58 }, + /* 0F 59 /w */ { BxPrefixSSE, BX_IA_MULPS_VpsWps, BxOpcodeGroupSSE_0f59 }, + /* 0F 5A /w */ { BxPrefixSSE, BX_IA_CVTPS2PD_VpsWps, BxOpcodeGroupSSE_0f5a }, + /* 0F 5B /w */ { BxPrefixSSE, BX_IA_CVTDQ2PS_VpsWdq, BxOpcodeGroupSSE_0f5b }, + /* 0F 5C /w */ { BxPrefixSSE, BX_IA_SUBPS_VpsWps, BxOpcodeGroupSSE_0f5c }, + /* 0F 5D /w */ { BxPrefixSSE, BX_IA_MINPS_VpsWps, BxOpcodeGroupSSE_0f5d }, + /* 0F 5E /w */ { BxPrefixSSE, BX_IA_DIVPS_VpsWps, BxOpcodeGroupSSE_0f5e }, + /* 0F 5F /w */ { BxPrefixSSE, BX_IA_MAXPS_VpsWps, BxOpcodeGroupSSE_0f5f }, + /* 0F 60 /w */ { BxPrefixSSE, BX_IA_PUNPCKLBW_PqQd, BxOpcodeGroupSSE_0f60 }, + /* 0F 61 /w */ { BxPrefixSSE, BX_IA_PUNPCKLWD_PqQd, BxOpcodeGroupSSE_0f61 }, + /* 0F 62 /w */ { BxPrefixSSE, BX_IA_PUNPCKLDQ_PqQd, BxOpcodeGroupSSE_0f62 }, + /* 0F 63 /w */ { BxPrefixSSE, BX_IA_PACKSSWB_PqQq, BxOpcodeGroupSSE_0f63 }, + /* 0F 64 /w */ { BxPrefixSSE, BX_IA_PCMPGTB_PqQq, BxOpcodeGroupSSE_0f64 }, + /* 0F 65 /w */ { BxPrefixSSE, BX_IA_PCMPGTW_PqQq, BxOpcodeGroupSSE_0f65 }, + /* 0F 66 /w */ { BxPrefixSSE, BX_IA_PCMPGTD_PqQq, BxOpcodeGroupSSE_0f66 }, + /* 0F 67 /w */ { BxPrefixSSE, BX_IA_PACKUSWB_PqQq, BxOpcodeGroupSSE_0f67 }, + /* 0F 68 /w */ { BxPrefixSSE, BX_IA_PUNPCKHBW_PqQq, BxOpcodeGroupSSE_0f68 }, + /* 0F 69 /w */ { BxPrefixSSE, BX_IA_PUNPCKHWD_PqQq, BxOpcodeGroupSSE_0f69 }, + /* 0F 6A /w */ { BxPrefixSSE, BX_IA_PUNPCKHDQ_PqQq, BxOpcodeGroupSSE_0f6a }, + /* 0F 6B /w */ { BxPrefixSSE, BX_IA_PACKSSDW_PqQq, BxOpcodeGroupSSE_0f6b }, + /* 0F 6C /w */ { BxPrefixSSE66, BX_IA_PUNPCKLQDQ_VdqWdq }, + /* 0F 6D /w */ { BxPrefixSSE66, BX_IA_PUNPCKHQDQ_VdqWdq }, + /* 0F 6E /w */ { BxPrefixSSE, BX_IA_MOVD_PqEd, BxOpcodeGroupSSE_0f6e }, + /* 0F 6F /w */ { BxPrefixSSE, BX_IA_MOVQ_PqQq, BxOpcodeGroupSSE_0f6f }, + /* 0F 70 /w */ { BxPrefixSSE | BxImmediate_Ib, BX_IA_PSHUFW_PqQqIb, BxOpcodeGroupSSE_0f70 }, + /* 0F 71 /w */ { BxGroup12, BX_IA_ERROR, BxOpcodeInfoG12R }, + /* 0F 72 /w */ { BxGroup13, BX_IA_ERROR, BxOpcodeInfoG13R }, + /* 0F 73 /w */ { BxGroup14, BX_IA_ERROR, BxOpcodeInfoG14R }, + /* 0F 74 /w */ { BxPrefixSSE, BX_IA_PCMPEQB_PqQq, BxOpcodeGroupSSE_0f74 }, + /* 0F 75 /w */ { BxPrefixSSE, BX_IA_PCMPEQW_PqQq, BxOpcodeGroupSSE_0f75 }, + /* 0F 76 /w */ { BxPrefixSSE, BX_IA_PCMPEQD_PqQq, BxOpcodeGroupSSE_0f76 }, + /* 0F 77 /w */ { BxPrefixSSE, BX_IA_EMMS, BxOpcodeGroupSSE_ERR }, + /* 0F 78 /w */ { BxPrefixSSE, BX_IA_VMREAD_EqGq, BxOpcodeGroupSSE_ERR }, + /* 0F 79 /w */ { BxPrefixSSE, BX_IA_VMWRITE_GqEq, BxOpcodeGroupSSE_ERR }, + /* 0F 7A /w */ { 0, BX_IA_ERROR }, + /* 0F 7B /w */ { 0, BX_IA_ERROR }, + /* 0F 7C /w */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f7c }, + /* 0F 7D /w */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f7d }, + /* 0F 7E /w */ { BxPrefixSSE, BX_IA_MOVD_EdPd, BxOpcodeGroupSSE_0f7e }, + /* 0F 7F /w */ { BxPrefixSSE, BX_IA_MOVQ_QqPq, BxOpcodeGroupSSE_0f7f }, + /* 0F 80 /w */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JO_Jq }, + /* 0F 81 /w */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNO_Jq }, + /* 0F 82 /w */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JB_Jq }, + /* 0F 83 /w */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNB_Jq }, + /* 0F 84 /w */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JZ_Jq }, + /* 0F 85 /w */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNZ_Jq }, + /* 0F 86 /w */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JBE_Jq }, + /* 0F 87 /w */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNBE_Jq }, + /* 0F 88 /w */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JS_Jq }, + /* 0F 89 /w */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNS_Jq }, + /* 0F 8A /w */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JP_Jq }, + /* 0F 8B /w */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNP_Jq }, + /* 0F 8C /w */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JL_Jq }, + /* 0F 8D /w */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNL_Jq }, + /* 0F 8E /w */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JLE_Jq }, + /* 0F 8F /w */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNLE_Jq }, + /* 0F 90 /w */ { 0, BX_IA_SETO_Eb }, + /* 0F 91 /w */ { 0, BX_IA_SETNO_Eb }, + /* 0F 92 /w */ { 0, BX_IA_SETB_Eb }, + /* 0F 93 /w */ { 0, BX_IA_SETNB_Eb }, + /* 0F 94 /w */ { 0, BX_IA_SETZ_Eb }, + /* 0F 95 /w */ { 0, BX_IA_SETNZ_Eb }, + /* 0F 96 /w */ { 0, BX_IA_SETBE_Eb }, + /* 0F 97 /w */ { 0, BX_IA_SETNBE_Eb }, + /* 0F 98 /w */ { 0, BX_IA_SETS_Eb }, + /* 0F 99 /w */ { 0, BX_IA_SETNS_Eb }, + /* 0F 9A /w */ { 0, BX_IA_SETP_Eb }, + /* 0F 9B /w */ { 0, BX_IA_SETNP_Eb }, + /* 0F 9C /w */ { 0, BX_IA_SETL_Eb }, + /* 0F 9D /w */ { 0, BX_IA_SETNL_Eb }, + /* 0F 9E /w */ { 0, BX_IA_SETLE_Eb }, + /* 0F 9F /w */ { 0, BX_IA_SETNLE_Eb }, + /* 0F A0 /w */ { 0, BX_IA_PUSH16_FS }, + /* 0F A1 /w */ { 0, BX_IA_POP16_FS }, + /* 0F A2 /w */ { 0, BX_IA_CPUID }, + /* 0F A3 /w */ { 0, BX_IA_BT_EwGw }, + /* 0F A4 /w */ { BxImmediate_Ib, BX_IA_SHLD_EwGw }, + /* 0F A5 /w */ { 0, BX_IA_SHLD_EwGw }, + /* 0F A6 /w */ { 0, BX_IA_ERROR }, + /* 0F A7 /w */ { 0, BX_IA_ERROR }, + /* 0F A8 /w */ { 0, BX_IA_PUSH16_GS }, + /* 0F A9 /w */ { 0, BX_IA_POP16_GS }, + /* 0F AA /w */ { BxTraceEnd, BX_IA_RSM }, + /* 0F AB /w */ { BxLockable, BX_IA_BTS_EwGw }, + /* 0F AC /w */ { BxImmediate_Ib, BX_IA_SHRD_EwGw }, + /* 0F AD /w */ { 0, BX_IA_SHRD_EwGw }, + /* 0F AE /w */ { BxGroup15, BX_IA_ERROR, BxOpcodeInfoG15q }, + /* 0F AF /w */ { 0, BX_IA_IMUL_GwEw }, + /* 0F B0 /w */ { BxLockable, BX_IA_CMPXCHG_EbGb }, + /* 0F B1 /w */ { BxLockable, BX_IA_CMPXCHG_EwGw }, + /* 0F B2 /w */ { 0, BX_IA_LSS_GwMp }, + /* 0F B3 /w */ { BxLockable, BX_IA_BTR_EwGw }, + /* 0F B4 /w */ { 0, BX_IA_LFS_GwMp }, + /* 0F B5 /w */ { 0, BX_IA_LGS_GwMp }, + /* 0F B6 /w */ { 0, BX_IA_MOVZX_GwEb }, + /* 0F B7 /w */ { 0, BX_IA_MOV_GwEw }, // MOVZX_GwEw + /* 0F B8 /w */ { BxPrefixSSEF3, BX_IA_POPCNT_GwEw }, + /* 0F B9 /w */ { BxTraceEnd, BX_IA_UD2B }, + /* 0F BA /w */ { BxGroup8, BX_IA_ERROR, BxOpcodeInfoG8EwIb }, + /* 0F BB /w */ { BxLockable, BX_IA_BTC_EwGw }, + /* 0F BC /w */ { 0, BX_IA_BSF_GwEw }, + /* 0F BD /w */ { 0, BX_IA_BSR_GwEw }, + /* 0F BE /w */ { 0, BX_IA_MOVSX_GwEb }, + /* 0F BF /w */ { 0, BX_IA_MOV_GwEw }, // MOVSX_GwEw + /* 0F C0 /w */ { BxLockable, BX_IA_XADD_EbGb }, + /* 0F C1 /w */ { BxLockable, BX_IA_XADD_EwGw }, + /* 0F C2 /w */ { BxPrefixSSE | BxImmediate_Ib, BX_IA_CMPPS_VpsWpsIb, BxOpcodeGroupSSE_0fc2 }, + /* 0F C3 /w */ { BxPrefixSSE, BX_IA_MOVNTI_MdGd, BxOpcodeGroupSSE_ERR }, + /* 0F C4 /w */ { BxPrefixSSE | BxImmediate_Ib, BX_IA_PINSRW_PqEwIb, BxOpcodeGroupSSE_0fc4 }, + /* 0F C5 /w */ { BxPrefixSSE | BxImmediate_Ib, BX_IA_PEXTRW_GdPqIb, BxOpcodeGroupSSE_0fc5R }, + /* 0F C6 /w */ { BxPrefixSSE | BxImmediate_Ib, BX_IA_SHUFPS_VpsWpsIb, BxOpcodeGroupSSE_0fc6 }, + /* 0F C7 /w */ { BxGroup9, BX_IA_ERROR, BxOpcodeInfoG9M }, + /* 0F C8 /w */ { 0, BX_IA_BSWAP_RX }, + /* 0F C9 /w */ { 0, BX_IA_BSWAP_RX }, + /* 0F CA /w */ { 0, BX_IA_BSWAP_RX }, + /* 0F CB /w */ { 0, BX_IA_BSWAP_RX }, + /* 0F CC /w */ { 0, BX_IA_BSWAP_RX }, + /* 0F CD /w */ { 0, BX_IA_BSWAP_RX }, + /* 0F CE /w */ { 0, BX_IA_BSWAP_RX }, + /* 0F CF /w */ { 0, BX_IA_BSWAP_RX }, + /* 0F D0 /w */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0fd0 }, + /* 0F D1 /w */ { BxPrefixSSE, BX_IA_PSRLW_PqQq, BxOpcodeGroupSSE_0fd1 }, + /* 0F D2 /w */ { BxPrefixSSE, BX_IA_PSRLD_PqQq, BxOpcodeGroupSSE_0fd2 }, + /* 0F D3 /w */ { BxPrefixSSE, BX_IA_PSRLQ_PqQq, BxOpcodeGroupSSE_0fd3 }, + /* 0F D4 /w */ { BxPrefixSSE, BX_IA_PADDQ_PqQq, BxOpcodeGroupSSE_0fd4 }, + /* 0F D5 /w */ { BxPrefixSSE, BX_IA_PMULLW_PqQq, BxOpcodeGroupSSE_0fd5 }, + /* 0F D6 /w */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0fd6 }, + /* 0F D7 /w */ { BxPrefixSSE, BX_IA_PMOVMSKB_GdPRq, BxOpcodeGroupSSE_0fd7R }, + /* 0F D8 /w */ { BxPrefixSSE, BX_IA_PSUBUSB_PqQq, BxOpcodeGroupSSE_0fd8 }, + /* 0F D9 /w */ { BxPrefixSSE, BX_IA_PSUBUSW_PqQq, BxOpcodeGroupSSE_0fd9 }, + /* 0F DA /w */ { BxPrefixSSE, BX_IA_PMINUB_PqQq, BxOpcodeGroupSSE_0fda }, + /* 0F DB /w */ { BxPrefixSSE, BX_IA_PAND_PqQq, BxOpcodeGroupSSE_0fdb }, + /* 0F DC /w */ { BxPrefixSSE, BX_IA_PADDUSB_PqQq, BxOpcodeGroupSSE_0fdc }, + /* 0F DD /w */ { BxPrefixSSE, BX_IA_PADDUSW_PqQq, BxOpcodeGroupSSE_0fdd }, + /* 0F DE /w */ { BxPrefixSSE, BX_IA_PMAXUB_PqQq, BxOpcodeGroupSSE_0fde }, + /* 0F DF /w */ { BxPrefixSSE, BX_IA_PANDN_PqQq, BxOpcodeGroupSSE_0fdf }, + /* 0F E0 /w */ { BxPrefixSSE, BX_IA_PAVGB_PqQq, BxOpcodeGroupSSE_0fe0 }, + /* 0F E1 /w */ { BxPrefixSSE, BX_IA_PSRAW_PqQq, BxOpcodeGroupSSE_0fe1 }, + /* 0F E2 /w */ { BxPrefixSSE, BX_IA_PSRAD_PqQq, BxOpcodeGroupSSE_0fe2 }, + /* 0F E3 /w */ { BxPrefixSSE, BX_IA_PAVGW_PqQq, BxOpcodeGroupSSE_0fe3 }, + /* 0F E4 /w */ { BxPrefixSSE, BX_IA_PMULHUW_PqQq, BxOpcodeGroupSSE_0fe4 }, + /* 0F E5 /w */ { BxPrefixSSE, BX_IA_PMULHW_PqQq, BxOpcodeGroupSSE_0fe5 }, + /* 0F E6 /w */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0fe6 }, + /* 0F E7 /w */ { BxPrefixSSE, BX_IA_MOVNTQ_MqPq, BxOpcodeGroupSSE_0fe7M }, + /* 0F E8 /w */ { BxPrefixSSE, BX_IA_PSUBSB_PqQq, BxOpcodeGroupSSE_0fe8 }, + /* 0F E9 /w */ { BxPrefixSSE, BX_IA_PSUBSW_PqQq, BxOpcodeGroupSSE_0fe9 }, + /* 0F EA /w */ { BxPrefixSSE, BX_IA_PMINSW_PqQq, BxOpcodeGroupSSE_0fea }, + /* 0F EB /w */ { BxPrefixSSE, BX_IA_POR_PqQq, BxOpcodeGroupSSE_0feb }, + /* 0F EC /w */ { BxPrefixSSE, BX_IA_PADDSB_PqQq, BxOpcodeGroupSSE_0fec }, + /* 0F ED /w */ { BxPrefixSSE, BX_IA_PADDSW_PqQq, BxOpcodeGroupSSE_0fed }, + /* 0F EE /w */ { BxPrefixSSE, BX_IA_PMAXSW_PqQq, BxOpcodeGroupSSE_0fee }, + /* 0F EF /w */ { BxPrefixSSE, BX_IA_PXOR_PqQq, BxOpcodeGroupSSE_0fef }, + /* 0F F0 /w */ { BxPrefixSSEF2, BX_IA_LDDQU_VdqMdq }, + /* 0F F1 /w */ { BxPrefixSSE, BX_IA_PSLLW_PqQq, BxOpcodeGroupSSE_0ff1 }, + /* 0F F2 /w */ { BxPrefixSSE, BX_IA_PSLLD_PqQq, BxOpcodeGroupSSE_0ff2 }, + /* 0F F3 /w */ { BxPrefixSSE, BX_IA_PSLLQ_PqQq, BxOpcodeGroupSSE_0ff3 }, + /* 0F F4 /w */ { BxPrefixSSE, BX_IA_PMULUDQ_PqQq, BxOpcodeGroupSSE_0ff4 }, + /* 0F F5 /w */ { BxPrefixSSE, BX_IA_PMADDWD_PqQq, BxOpcodeGroupSSE_0ff5 }, + /* 0F F6 /w */ { BxPrefixSSE, BX_IA_PSADBW_PqQq, BxOpcodeGroupSSE_0ff6 }, + /* 0F F7 /w */ { BxPrefixSSE, BX_IA_MASKMOVQ_PqPRq, BxOpcodeGroupSSE_0ff7R }, + /* 0F F8 /w */ { BxPrefixSSE, BX_IA_PSUBB_PqQq, BxOpcodeGroupSSE_0ff8 }, + /* 0F F9 /w */ { BxPrefixSSE, BX_IA_PSUBW_PqQq, BxOpcodeGroupSSE_0ff9 }, + /* 0F FA /w */ { BxPrefixSSE, BX_IA_PSUBD_PqQq, BxOpcodeGroupSSE_0ffa }, + /* 0F FB /w */ { BxPrefixSSE, BX_IA_PSUBQ_PqQq, BxOpcodeGroupSSE_0ffb }, + /* 0F FC /w */ { BxPrefixSSE, BX_IA_PADDB_PqQq, BxOpcodeGroupSSE_0ffc }, + /* 0F FD /w */ { BxPrefixSSE, BX_IA_PADDW_PqQq, BxOpcodeGroupSSE_0ffd }, + /* 0F FE /w */ { BxPrefixSSE, BX_IA_PADDD_PqQq, BxOpcodeGroupSSE_0ffe }, + /* 0F FF /w */ { 0, BX_IA_ERROR }, - // 512 (/r) + 512 (/m) entries for 32bit mode - /* 00 /dr */ { BxArithDstRM, BX_IA_ADD_EbGb }, - /* 00 /dm */ { BxLockable, BX_IA_ADD_EbGb }, - /* 01 /dr */ { BxArithDstRM, BX_IA_ADD_EdGd }, - /* 01 /dm */ { BxLockable, BX_IA_ADD_EdGd }, - /* 02 /dr */ { 0, BX_IA_ADD_GbEb }, - /* 02 /dm */ { 0, BX_IA_ADD_GbEb }, - /* 03 /dr */ { 0, BX_IA_ADD_GdEd }, - /* 03 /dm */ { 0, BX_IA_ADD_GdEd }, - /* 04 /dr */ { BxImmediate_Ib, BX_IA_ADD_ALIb }, - /* 04 /dm */ { BxImmediate_Ib, BX_IA_ADD_ALIb }, - /* 05 /dr */ { BxImmediate_Id, BX_IA_ADD_EAXId }, - /* 05 /dm */ { BxImmediate_Id, BX_IA_ADD_EAXId }, - /* 06 /dr */ { 0, BX_IA_ERROR }, - /* 06 /dm */ { 0, BX_IA_ERROR }, - /* 07 /dr */ { 0, BX_IA_ERROR }, - /* 07 /dm */ { 0, BX_IA_ERROR }, - /* 08 /dr */ { BxArithDstRM, BX_IA_OR_EbGb }, - /* 08 /dm */ { BxLockable, BX_IA_OR_EbGb }, - /* 09 /dr */ { BxArithDstRM, BX_IA_OR_EdGd }, - /* 09 /dm */ { BxLockable, BX_IA_OR_EdGd }, - /* 0A /dr */ { 0, BX_IA_OR_GbEb }, - /* 0A /dm */ { 0, BX_IA_OR_GbEb }, - /* 0B /dr */ { 0, BX_IA_OR_GdEd }, - /* 0B /dm */ { 0, BX_IA_OR_GdEd }, - /* 0C /dr */ { BxImmediate_Ib, BX_IA_OR_ALIb }, - /* 0C /dm */ { BxImmediate_Ib, BX_IA_OR_ALIb }, - /* 0D /dr */ { BxImmediate_Id, BX_IA_OR_EAXId }, - /* 0D /dm */ { BxImmediate_Id, BX_IA_OR_EAXId }, - /* 0E /dr */ { 0, BX_IA_ERROR }, - /* 0E /dm */ { 0, BX_IA_ERROR }, - /* 0F /dr */ { 0, BX_IA_ERROR }, // 2-byte escape - /* 0F /dm */ { 0, BX_IA_ERROR }, // 2-byte escape - /* 10 /dr */ { BxArithDstRM, BX_IA_ADC_EbGb }, - /* 10 /dm */ { BxLockable, BX_IA_ADC_EbGb }, - /* 11 /dr */ { BxArithDstRM, BX_IA_ADC_EdGd }, - /* 11 /dm */ { BxLockable, BX_IA_ADC_EdGd }, - /* 12 /dr */ { 0, BX_IA_ADC_GbEb }, - /* 12 /dm */ { 0, BX_IA_ADC_GbEb }, - /* 13 /dr */ { 0, BX_IA_ADC_GdEd }, - /* 13 /dm */ { 0, BX_IA_ADC_GdEd }, - /* 14 /dr */ { BxImmediate_Ib, BX_IA_ADC_ALIb }, - /* 14 /dm */ { BxImmediate_Ib, BX_IA_ADC_ALIb }, - /* 15 /dr */ { BxImmediate_Id, BX_IA_ADC_EAXId }, - /* 15 /dm */ { BxImmediate_Id, BX_IA_ADC_EAXId }, - /* 16 /dr */ { 0, BX_IA_ERROR }, - /* 16 /dm */ { 0, BX_IA_ERROR }, - /* 17 /dr */ { 0, BX_IA_ERROR }, - /* 17 /dm */ { 0, BX_IA_ERROR }, - /* 18 /dr */ { BxArithDstRM, BX_IA_SBB_EbGb }, - /* 18 /dm */ { BxLockable, BX_IA_SBB_EbGb }, - /* 19 /dr */ { BxArithDstRM, BX_IA_SBB_EdGd }, - /* 19 /dm */ { BxLockable, BX_IA_SBB_EdGd }, - /* 1A /dr */ { 0, BX_IA_SBB_GbEb }, - /* 1A /dm */ { 0, BX_IA_SBB_GbEb }, - /* 1B /dr */ { 0, BX_IA_SBB_GdEd }, - /* 1B /dm */ { 0, BX_IA_SBB_GdEd }, - /* 1C /dr */ { BxImmediate_Ib, BX_IA_SBB_ALIb }, - /* 1C /dm */ { BxImmediate_Ib, BX_IA_SBB_ALIb }, - /* 1D /dr */ { BxImmediate_Id, BX_IA_SBB_EAXId }, - /* 1D /dm */ { BxImmediate_Id, BX_IA_SBB_EAXId }, - /* 1E /dr */ { 0, BX_IA_ERROR }, - /* 1E /dm */ { 0, BX_IA_ERROR }, - /* 1F /dr */ { 0, BX_IA_ERROR }, - /* 1F /dm */ { 0, BX_IA_ERROR }, - /* 20 /dr */ { BxArithDstRM, BX_IA_AND_EbGb }, - /* 20 /dm */ { BxLockable, BX_IA_AND_EbGb }, - /* 21 /dr */ { BxArithDstRM, BX_IA_AND_EdGd }, - /* 21 /dm */ { BxLockable, BX_IA_AND_EdGd }, - /* 22 /dr */ { 0, BX_IA_AND_GbEb }, - /* 22 /dm */ { 0, BX_IA_AND_GbEb }, - /* 23 /dr */ { 0, BX_IA_AND_GdEd }, - /* 23 /dm */ { 0, BX_IA_AND_GdEd }, - /* 24 /dr */ { BxImmediate_Ib, BX_IA_AND_ALIb }, - /* 24 /dm */ { BxImmediate_Ib, BX_IA_AND_ALIb }, - /* 25 /dr */ { BxImmediate_Id, BX_IA_AND_EAXId }, - /* 25 /dm */ { BxImmediate_Id, BX_IA_AND_EAXId }, - /* 26 /dr */ { 0, BX_IA_ERROR }, // ES: - /* 26 /dm */ { 0, BX_IA_ERROR }, // ES: - /* 27 /dr */ { 0, BX_IA_ERROR }, - /* 27 /dm */ { 0, BX_IA_ERROR }, - /* 28 /dr */ { BxArithDstRM, BX_IA_SUB_EbGb }, - /* 28 /dm */ { BxLockable, BX_IA_SUB_EbGb }, - /* 29 /dr */ { BxArithDstRM, BX_IA_SUB_EdGd }, - /* 29 /dm */ { BxLockable, BX_IA_SUB_EdGd }, - /* 2A /dr */ { 0, BX_IA_SUB_GbEb }, - /* 2A /dm */ { 0, BX_IA_SUB_GbEb }, - /* 2B /dr */ { 0, BX_IA_SUB_GdEd }, - /* 2B /dm */ { 0, BX_IA_SUB_GdEd }, - /* 2C /dr */ { BxImmediate_Ib, BX_IA_SUB_ALIb }, - /* 2C /dm */ { BxImmediate_Ib, BX_IA_SUB_ALIb }, - /* 2D /dr */ { BxImmediate_Id, BX_IA_SUB_EAXId }, - /* 2D /dm */ { BxImmediate_Id, BX_IA_SUB_EAXId }, - /* 2E /dr */ { 0, BX_IA_ERROR }, // CS: - /* 2E /dm */ { 0, BX_IA_ERROR }, // CS: - /* 2F /dr */ { 0, BX_IA_ERROR }, - /* 2F /dm */ { 0, BX_IA_ERROR }, - /* 30 /dr */ { BxArithDstRM, BX_IA_XOR_EbGb }, - /* 30 /dm */ { BxLockable, BX_IA_XOR_EbGb }, - /* 31 /dr */ { BxArithDstRM, BX_IA_XOR_EdGd }, - /* 31 /dm */ { BxLockable, BX_IA_XOR_EdGd }, - /* 32 /dr */ { 0, BX_IA_XOR_GbEb }, - /* 32 /dm */ { 0, BX_IA_XOR_GbEb }, - /* 33 /dr */ { 0, BX_IA_XOR_GdEd }, - /* 33 /dm */ { 0, BX_IA_XOR_GdEd }, - /* 34 /dr */ { BxImmediate_Ib, BX_IA_XOR_ALIb }, - /* 34 /dm */ { BxImmediate_Ib, BX_IA_XOR_ALIb }, - /* 35 /dr */ { BxImmediate_Id, BX_IA_XOR_EAXId }, - /* 35 /dm */ { BxImmediate_Id, BX_IA_XOR_EAXId }, - /* 36 /dr */ { 0, BX_IA_ERROR }, // SS: - /* 36 /dm */ { 0, BX_IA_ERROR }, // SS: - /* 37 /dr */ { 0, BX_IA_ERROR }, - /* 37 /dm */ { 0, BX_IA_ERROR }, - /* 38 /dr */ { BxArithDstRM, BX_IA_CMP_EbGb }, - /* 38 /dm */ { 0, BX_IA_CMP_EbGb }, - /* 39 /dr */ { BxArithDstRM, BX_IA_CMP_EdGd }, - /* 39 /dm */ { 0, BX_IA_CMP_EdGd }, - /* 3A /dr */ { 0, BX_IA_CMP_GbEb }, - /* 3A /dm */ { 0, BX_IA_CMP_GbEb }, - /* 3B /dr */ { 0, BX_IA_CMP_GdEd }, - /* 3B /dm */ { 0, BX_IA_CMP_GdEd }, - /* 3C /dr */ { BxImmediate_Ib, BX_IA_CMP_ALIb }, - /* 3C /dm */ { BxImmediate_Ib, BX_IA_CMP_ALIb }, - /* 3D /dr */ { BxImmediate_Id, BX_IA_CMP_EAXId }, - /* 3D /dm */ { BxImmediate_Id, BX_IA_CMP_EAXId }, - /* 3E /dr */ { 0, BX_IA_ERROR }, // DS: - /* 3E /dm */ { 0, BX_IA_ERROR }, // DS: - /* 3F /dr */ { 0, BX_IA_ERROR }, - /* 3F /dm */ { 0, BX_IA_ERROR }, - /* 40 /dr */ { 0, BX_IA_ERROR }, // REX: - /* 40 /dm */ { 0, BX_IA_ERROR }, // REX: - /* 41 /dr */ { 0, BX_IA_ERROR }, // REX: - /* 41 /dm */ { 0, BX_IA_ERROR }, // REX: - /* 42 /dr */ { 0, BX_IA_ERROR }, // REX: - /* 42 /dm */ { 0, BX_IA_ERROR }, // REX: - /* 43 /dr */ { 0, BX_IA_ERROR }, // REX: - /* 43 /dm */ { 0, BX_IA_ERROR }, // REX: - /* 44 /dr */ { 0, BX_IA_ERROR }, // REX: - /* 44 /dm */ { 0, BX_IA_ERROR }, // REX: - /* 45 /dr */ { 0, BX_IA_ERROR }, // REX: - /* 45 /dm */ { 0, BX_IA_ERROR }, // REX: - /* 46 /dr */ { 0, BX_IA_ERROR }, // REX: - /* 46 /dm */ { 0, BX_IA_ERROR }, // REX: - /* 47 /dr */ { 0, BX_IA_ERROR }, // REX: - /* 47 /dm */ { 0, BX_IA_ERROR }, // REX: - /* 48 /dr */ { 0, BX_IA_ERROR }, // REX: - /* 48 /dm */ { 0, BX_IA_ERROR }, // REX: - /* 49 /dr */ { 0, BX_IA_ERROR }, // REX: - /* 49 /dm */ { 0, BX_IA_ERROR }, // REX: - /* 4A /dr */ { 0, BX_IA_ERROR }, // REX: - /* 4A /dm */ { 0, BX_IA_ERROR }, // REX: - /* 4B /dr */ { 0, BX_IA_ERROR }, // REX: - /* 4B /dm */ { 0, BX_IA_ERROR }, // REX: - /* 4C /dr */ { 0, BX_IA_ERROR }, // REX: - /* 4C /dm */ { 0, BX_IA_ERROR }, // REX: - /* 4D /dr */ { 0, BX_IA_ERROR }, // REX: - /* 4D /dm */ { 0, BX_IA_ERROR }, // REX: - /* 4E /dr */ { 0, BX_IA_ERROR }, // REX: - /* 4E /dm */ { 0, BX_IA_ERROR }, // REX: - /* 4F /dr */ { 0, BX_IA_ERROR }, // REX: - /* 4F /dm */ { 0, BX_IA_ERROR }, // REX: - /* 50 /dr */ { 0, BX_IA_PUSH_RRX }, - /* 50 /dm */ { 0, BX_IA_PUSH_RRX }, - /* 51 /dr */ { 0, BX_IA_PUSH_RRX }, - /* 51 /dm */ { 0, BX_IA_PUSH_RRX }, - /* 52 /dr */ { 0, BX_IA_PUSH_RRX }, - /* 52 /dm */ { 0, BX_IA_PUSH_RRX }, - /* 53 /dr */ { 0, BX_IA_PUSH_RRX }, - /* 53 /dm */ { 0, BX_IA_PUSH_RRX }, - /* 54 /dr */ { 0, BX_IA_PUSH_RRX }, - /* 54 /dm */ { 0, BX_IA_PUSH_RRX }, - /* 55 /dr */ { 0, BX_IA_PUSH_RRX }, - /* 55 /dm */ { 0, BX_IA_PUSH_RRX }, - /* 56 /dr */ { 0, BX_IA_PUSH_RRX }, - /* 56 /dm */ { 0, BX_IA_PUSH_RRX }, - /* 57 /dr */ { 0, BX_IA_PUSH_RRX }, - /* 57 /dm */ { 0, BX_IA_PUSH_RRX }, - /* 58 /dr */ { 0, BX_IA_POP_RRX }, - /* 58 /dm */ { 0, BX_IA_POP_RRX }, - /* 59 /dr */ { 0, BX_IA_POP_RRX }, - /* 59 /dm */ { 0, BX_IA_POP_RRX }, - /* 5A /dr */ { 0, BX_IA_POP_RRX }, - /* 5A /dm */ { 0, BX_IA_POP_RRX }, - /* 5B /dr */ { 0, BX_IA_POP_RRX }, - /* 5B /dm */ { 0, BX_IA_POP_RRX }, - /* 5C /dr */ { 0, BX_IA_POP_RRX }, - /* 5C /dm */ { 0, BX_IA_POP_RRX }, - /* 5D /dr */ { 0, BX_IA_POP_RRX }, - /* 5D /dm */ { 0, BX_IA_POP_RRX }, - /* 5E /dr */ { 0, BX_IA_POP_RRX }, - /* 5E /dm */ { 0, BX_IA_POP_RRX }, - /* 5F /dr */ { 0, BX_IA_POP_RRX }, - /* 5F /dm */ { 0, BX_IA_POP_RRX }, - /* 60 /dr */ { 0, BX_IA_ERROR }, - /* 60 /dm */ { 0, BX_IA_ERROR }, - /* 61 /dr */ { 0, BX_IA_ERROR }, - /* 61 /dm */ { 0, BX_IA_ERROR }, - /* 62 /dr */ { 0, BX_IA_ERROR }, - /* 62 /dm */ { 0, BX_IA_ERROR }, - /* 63 /dr */ { 0, BX_IA_MOV_GdEdR }, // MOVSX_GdEd - /* 63 /dm */ { 0, BX_IA_MOV64_GdEdM }, // MOVSX_GdEd - /* 64 /dr */ { 0, BX_IA_ERROR }, // FS: - /* 64 /dm */ { 0, BX_IA_ERROR }, // FS: - /* 65 /dr */ { 0, BX_IA_ERROR }, // GS: - /* 65 /dm */ { 0, BX_IA_ERROR }, // GS: - /* 66 /dr */ { 0, BX_IA_ERROR }, // OS: - /* 66 /dm */ { 0, BX_IA_ERROR }, // OS: - /* 67 /dr */ { 0, BX_IA_ERROR }, // AS: - /* 67 /dm */ { 0, BX_IA_ERROR }, // AS: - /* 68 /dr */ { BxImmediate_Id, BX_IA_PUSH64_Id }, - /* 68 /dm */ { BxImmediate_Id, BX_IA_PUSH64_Id }, - /* 69 /dr */ { BxImmediate_Id, BX_IA_IMUL_GdEdId }, - /* 69 /dm */ { BxImmediate_Id, BX_IA_IMUL_GdEdId }, - /* 6A /dr */ { BxImmediate_Ib_SE, BX_IA_PUSH64_Id }, - /* 6A /dm */ { BxImmediate_Ib_SE, BX_IA_PUSH64_Id }, - /* 6B /dr */ { BxImmediate_Ib_SE, BX_IA_IMUL_GdEdId }, - /* 6B /dm */ { BxImmediate_Ib_SE, BX_IA_IMUL_GdEdId }, - /* 6C /dr */ { 0, BX_IA_REP_INSB_YbDX }, - /* 6C /dm */ { 0, BX_IA_REP_INSB_YbDX }, - /* 6D /dr */ { 0, BX_IA_REP_INSD_YdDX }, - /* 6D /dm */ { 0, BX_IA_REP_INSD_YdDX }, - /* 6E /dr */ { 0, BX_IA_REP_OUTSB_DXXb }, - /* 6E /dm */ { 0, BX_IA_REP_OUTSB_DXXb }, - /* 6F /dr */ { 0, BX_IA_REP_OUTSD_DXXd }, - /* 6F /dm */ { 0, BX_IA_REP_OUTSD_DXXd }, - /* 70 /dr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JO_Jq }, - /* 70 /dm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JO_Jq }, - /* 71 /dr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNO_Jq }, - /* 71 /dm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNO_Jq }, - /* 72 /dr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JB_Jq }, - /* 72 /dm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JB_Jq }, - /* 73 /dr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNB_Jq }, - /* 73 /dm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNB_Jq }, - /* 74 /dr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JZ_Jq }, - /* 74 /dm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JZ_Jq }, - /* 75 /dr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNZ_Jq }, - /* 75 /dm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNZ_Jq }, - /* 76 /dr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JBE_Jq }, - /* 76 /dm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JBE_Jq }, - /* 77 /dr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNBE_Jq }, - /* 77 /dm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNBE_Jq }, - /* 78 /dr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JS_Jq }, - /* 78 /dm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JS_Jq }, - /* 79 /dr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNS_Jq }, - /* 79 /dm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNS_Jq }, - /* 7A /dr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JP_Jq }, - /* 7A /dm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JP_Jq }, - /* 7B /dr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNP_Jq }, - /* 7B /dm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNP_Jq }, - /* 7C /dr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JL_Jq }, - /* 7C /dm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JL_Jq }, - /* 7D /dr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNL_Jq }, - /* 7D /dm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNL_Jq }, - /* 7E /dr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JLE_Jq }, - /* 7E /dm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JLE_Jq }, - /* 7F /dr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNLE_Jq }, - /* 7F /dm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNLE_Jq }, - /* 80 /dr */ { BxGroup1 | BxImmediate_Ib, BX_IA_ERROR, BxOpcodeInfoG1EbIb }, - /* 80 /dm */ { BxGroup1 | BxImmediate_Ib, BX_IA_ERROR, BxOpcodeInfoG1EbIb }, - /* 81 /dr */ { BxGroup5 | BxImmediate_Id, BX_IA_ERROR, BxOpcodeInfoG1Ed }, - /* 81 /dm */ { BxGroup1 | BxImmediate_Id, BX_IA_ERROR, BxOpcodeInfoG1Ed }, - /* 82 /dr */ { 0, BX_IA_ERROR }, - /* 82 /dm */ { 0, BX_IA_ERROR }, - /* 83 /dr */ { BxGroup5 | BxImmediate_Ib_SE, BX_IA_ERROR, BxOpcodeInfoG1Ed }, - /* 83 /dm */ { BxGroup1 | BxImmediate_Ib_SE, BX_IA_ERROR, BxOpcodeInfoG1Ed }, - /* 84 /dr */ { 0, BX_IA_TEST_EbGb }, - /* 84 /dm */ { 0, BX_IA_TEST_EbGb }, - /* 85 /dr */ { 0, BX_IA_TEST_EdGd }, - /* 85 /dm */ { 0, BX_IA_TEST_EdGd }, - /* 86 /dr */ { 0, BX_IA_XCHG_EbGb }, - /* 86 /dm */ { BxLockable, BX_IA_XCHG_EbGb }, - /* 87 /dr */ { 0, BX_IA_XCHG_EdGd }, - /* 87 /dm */ { BxLockable, BX_IA_XCHG_EdGd }, - /* 88 /dr */ { BxArithDstRM, BX_IA_MOV_GbEbR }, - /* 88 /dm */ { 0, BX_IA_MOV_EbGbM }, - /* 89 /dr */ { BxArithDstRM, BX_IA_MOV_GdEdR }, - /* 89 /dm */ { 0, BX_IA_MOV64_EdGdM }, - /* 8A /dr */ { 0, BX_IA_MOV_GbEbR }, - /* 8A /dm */ { 0, BX_IA_MOV_GbEbM }, - /* 8B /dr */ { 0, BX_IA_MOV_GdEdR }, - /* 8B /dm */ { 0, BX_IA_MOV64_GdEdM }, - /* 8C /dr */ { 0, BX_IA_MOV_EwSwR }, - /* 8C /dm */ { 0, BX_IA_MOV_EwSwM }, - /* 8D /dr */ { 0, BX_IA_ERROR }, // LEA - /* 8D /dm */ { 0, BX_IA_LEA_GdM }, - /* 8E /dr */ { 0, BX_IA_MOV_SwEw }, - /* 8E /dm */ { 0, BX_IA_MOV_SwEw }, - /* 8F /dr */ { BxGroup1A, BX_IA_ERROR, BxOpcodeInfo64G1AEq }, - /* 8F /dm */ { BxGroup1A, BX_IA_ERROR, BxOpcodeInfo64G1AEq }, - /* 90 /dr */ { 0, BX_IA_XCHG_ERXEAX }, // handles XCHG R8d, EAX - /* 90 /dm */ { 0, BX_IA_XCHG_ERXEAX }, // handles XCHG R8d, EAX - /* 91 /dr */ { 0, BX_IA_XCHG_ERXEAX }, - /* 91 /dm */ { 0, BX_IA_XCHG_ERXEAX }, - /* 92 /dr */ { 0, BX_IA_XCHG_ERXEAX }, - /* 92 /dm */ { 0, BX_IA_XCHG_ERXEAX }, - /* 93 /dr */ { 0, BX_IA_XCHG_ERXEAX }, - /* 93 /dm */ { 0, BX_IA_XCHG_ERXEAX }, - /* 94 /dr */ { 0, BX_IA_XCHG_ERXEAX }, - /* 94 /dm */ { 0, BX_IA_XCHG_ERXEAX }, - /* 95 /dr */ { 0, BX_IA_XCHG_ERXEAX }, - /* 95 /dm */ { 0, BX_IA_XCHG_ERXEAX }, - /* 96 /dr */ { 0, BX_IA_XCHG_ERXEAX }, - /* 96 /dm */ { 0, BX_IA_XCHG_ERXEAX }, - /* 97 /dr */ { 0, BX_IA_XCHG_ERXEAX }, - /* 97 /dm */ { 0, BX_IA_XCHG_ERXEAX }, - /* 98 /dr */ { 0, BX_IA_CWDE }, - /* 98 /dm */ { 0, BX_IA_CWDE }, - /* 99 /dr */ { 0, BX_IA_CDQ }, - /* 99 /dm */ { 0, BX_IA_CDQ }, - /* 9A /dr */ { 0, BX_IA_ERROR }, - /* 9A /dm */ { 0, BX_IA_ERROR }, - /* 9B /dr */ { 0, BX_IA_FWAIT }, - /* 9B /dm */ { 0, BX_IA_FWAIT }, - /* 9C /dr */ { 0, BX_IA_PUSHF_Fq }, - /* 9C /dm */ { 0, BX_IA_PUSHF_Fq }, - /* 9D /dr */ { 0, BX_IA_POPF_Fq }, - /* 9D /dm */ { 0, BX_IA_POPF_Fq }, - /* 9E /dr */ { 0, BX_IA_SAHF }, - /* 9E /dm */ { 0, BX_IA_SAHF }, - /* 9F /dr */ { 0, BX_IA_LAHF }, - /* 9F /dm */ { 0, BX_IA_LAHF }, - /* A0 /dr */ { BxImmediate_O, BX_IA_MOV_ALOq }, - /* A0 /dm */ { BxImmediate_O, BX_IA_MOV_ALOq }, - /* A1 /dr */ { BxImmediate_O, BX_IA_MOV_EAXOq }, - /* A1 /dm */ { BxImmediate_O, BX_IA_MOV_EAXOq }, - /* A2 /dr */ { BxImmediate_O, BX_IA_MOV_OqAL }, - /* A2 /dm */ { BxImmediate_O, BX_IA_MOV_OqAL }, - /* A3 /dr */ { BxImmediate_O, BX_IA_MOV_OqEAX }, - /* A3 /dm */ { BxImmediate_O, BX_IA_MOV_OqEAX }, - /* A4 /dr */ { 0, BX_IA_REP_MOVSB_XbYb }, - /* A4 /dm */ { 0, BX_IA_REP_MOVSB_XbYb }, - /* A5 /dr */ { 0, BX_IA_REP_MOVSD_XdYd }, - /* A5 /dm */ { 0, BX_IA_REP_MOVSD_XdYd }, - /* A6 /dr */ { 0, BX_IA_REP_CMPSB_XbYb }, - /* A6 /dm */ { 0, BX_IA_REP_CMPSB_XbYb }, - /* A7 /dr */ { 0, BX_IA_REP_CMPSD_XdYd }, - /* A7 /dm */ { 0, BX_IA_REP_CMPSD_XdYd }, - /* A8 /dr */ { BxImmediate_Ib, BX_IA_TEST_ALIb }, - /* A8 /dm */ { BxImmediate_Ib, BX_IA_TEST_ALIb }, - /* A9 /dr */ { BxImmediate_Id, BX_IA_TEST_EAXId }, - /* A9 /dm */ { BxImmediate_Id, BX_IA_TEST_EAXId }, - /* AA /dr */ { 0, BX_IA_REP_STOSB_YbAL }, - /* AA /dm */ { 0, BX_IA_REP_STOSB_YbAL }, - /* AB /dr */ { 0, BX_IA_REP_STOSD_YdEAX }, - /* AB /dm */ { 0, BX_IA_REP_STOSD_YdEAX }, - /* AC /dr */ { 0, BX_IA_REP_LODSB_ALXb }, - /* AC /dm */ { 0, BX_IA_REP_LODSB_ALXb }, - /* AD /dr */ { 0, BX_IA_REP_LODSD_EAXXd }, - /* AD /dm */ { 0, BX_IA_REP_LODSD_EAXXd }, - /* AE /dr */ { 0, BX_IA_REP_SCASB_ALXb }, - /* AE /dm */ { 0, BX_IA_REP_SCASB_ALXb }, - /* AF /dr */ { 0, BX_IA_REP_SCASD_EAXXd }, - /* AF /dm */ { 0, BX_IA_REP_SCASD_EAXXd }, - /* B0 /dr */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, - /* B0 /dm */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, - /* B1 /dr */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, - /* B1 /dm */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, - /* B2 /dr */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, - /* B2 /dm */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, - /* B3 /dr */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, - /* B3 /dm */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, - /* B4 /dr */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, - /* B4 /dm */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, - /* B5 /dr */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, - /* B5 /dm */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, - /* B6 /dr */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, - /* B6 /dm */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, - /* B7 /dr */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, - /* B7 /dm */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, - /* B8 /dr */ { BxImmediate_Id, BX_IA_MOV_ERXId }, - /* B8 /dm */ { BxImmediate_Id, BX_IA_MOV_ERXId }, - /* B9 /dr */ { BxImmediate_Id, BX_IA_MOV_ERXId }, - /* B9 /dm */ { BxImmediate_Id, BX_IA_MOV_ERXId }, - /* BA /dr */ { BxImmediate_Id, BX_IA_MOV_ERXId }, - /* BA /dm */ { BxImmediate_Id, BX_IA_MOV_ERXId }, - /* BB /dr */ { BxImmediate_Id, BX_IA_MOV_ERXId }, - /* BB /dm */ { BxImmediate_Id, BX_IA_MOV_ERXId }, - /* BC /dr */ { BxImmediate_Id, BX_IA_MOV_ERXId }, - /* BC /dm */ { BxImmediate_Id, BX_IA_MOV_ERXId }, - /* BD /dr */ { BxImmediate_Id, BX_IA_MOV_ERXId }, - /* BD /dm */ { BxImmediate_Id, BX_IA_MOV_ERXId }, - /* BE /dr */ { BxImmediate_Id, BX_IA_MOV_ERXId }, - /* BE /dm */ { BxImmediate_Id, BX_IA_MOV_ERXId }, - /* BF /dr */ { BxImmediate_Id, BX_IA_MOV_ERXId }, - /* BF /dm */ { BxImmediate_Id, BX_IA_MOV_ERXId }, - /* C0 /dr */ { BxGroup2 | BxImmediate_Ib, BX_IA_ERROR, BxOpcodeInfoG2Eb }, - /* C0 /dm */ { BxGroup2 | BxImmediate_Ib, BX_IA_ERROR, BxOpcodeInfoG2Eb }, - /* C1 /dr */ { BxGroup2 | BxImmediate_Ib, BX_IA_ERROR, BxOpcodeInfoG2Ed }, - /* C1 /dm */ { BxGroup2 | BxImmediate_Ib, BX_IA_ERROR, BxOpcodeInfoG2Ed }, - /* C2 /dr */ { BxImmediate_Iw | BxTraceEnd, BX_IA_RETnear64_Iw }, - /* C2 /dm */ { BxImmediate_Iw | BxTraceEnd, BX_IA_RETnear64_Iw }, - /* C3 /dr */ { BxTraceEnd, BX_IA_RETnear64 }, - /* C3 /dm */ { BxTraceEnd, BX_IA_RETnear64 }, - /* C4 /dr */ { 0, BX_IA_ERROR }, - /* C4 /dm */ { 0, BX_IA_ERROR }, - /* C5 /dr */ { 0, BX_IA_ERROR }, - /* C5 /dm */ { 0, BX_IA_ERROR }, - /* C6 /dr */ { BxGroup11, BX_IA_ERROR, BxOpcodeInfoG11Eb }, - /* C6 /dm */ { BxGroup11, BX_IA_ERROR, BxOpcodeInfoG11Eb }, - /* C7 /dr */ { BxGroup11, BX_IA_ERROR, BxOpcodeInfoG11Ed }, - /* C7 /dm */ { BxGroup11, BX_IA_ERROR, BxOpcodeInfoG11Ed }, - /* C8 /dr */ { BxImmediate_Iw | BxImmediate_Ib2, BX_IA_ENTER64_IwIb }, - /* C8 /dm */ { BxImmediate_Iw | BxImmediate_Ib2, BX_IA_ENTER64_IwIb }, - /* C9 /dr */ { 0, BX_IA_LEAVE64 }, - /* C9 /dm */ { 0, BX_IA_LEAVE64 }, - /* CA /dr */ { BxImmediate_Iw | BxTraceEnd, BX_IA_RETfar32_Iw }, - /* CA /dm */ { BxImmediate_Iw | BxTraceEnd, BX_IA_RETfar32_Iw }, - /* CB /dr */ { BxTraceEnd, BX_IA_RETfar32 }, - /* CB /dm */ { BxTraceEnd, BX_IA_RETfar32 }, - /* CC /dr */ { BxTraceEnd, BX_IA_INT3 }, - /* CC /dm */ { BxTraceEnd, BX_IA_INT3 }, - /* CD /dr */ { BxImmediate_Ib | BxTraceEnd, BX_IA_INT_Ib }, - /* CD /dm */ { BxImmediate_Ib | BxTraceEnd, BX_IA_INT_Ib }, - /* CE /dr */ { 0, BX_IA_ERROR }, - /* CE /dm */ { 0, BX_IA_ERROR }, - /* CF /dr */ { BxTraceEnd, BX_IA_IRET64 }, - /* CF /dm */ { BxTraceEnd, BX_IA_IRET64 }, - /* D0 /dr */ { BxGroup2 | BxImmediate_I1, BX_IA_ERROR, BxOpcodeInfoG2Eb }, - /* D0 /dm */ { BxGroup2 | BxImmediate_I1, BX_IA_ERROR, BxOpcodeInfoG2Eb }, - /* D1 /dr */ { BxGroup2 | BxImmediate_I1, BX_IA_ERROR, BxOpcodeInfoG2Ed }, - /* D1 /dm */ { BxGroup2 | BxImmediate_I1, BX_IA_ERROR, BxOpcodeInfoG2Ed }, - /* D2 /dr */ { BxGroup2, BX_IA_ERROR, BxOpcodeInfoG2Eb }, - /* D2 /dm */ { BxGroup2, BX_IA_ERROR, BxOpcodeInfoG2Eb }, - /* D3 /dr */ { BxGroup2, BX_IA_ERROR, BxOpcodeInfoG2Ed }, - /* D3 /dm */ { BxGroup2, BX_IA_ERROR, BxOpcodeInfoG2Ed }, - /* D4 /dr */ { 0, BX_IA_ERROR }, - /* D4 /dm */ { 0, BX_IA_ERROR }, - /* D5 /dr */ { 0, BX_IA_ERROR }, - /* D5 /dm */ { 0, BX_IA_ERROR }, - /* D6 /dr */ { 0, BX_IA_ERROR }, - /* D6 /dm */ { 0, BX_IA_ERROR }, - /* D7 /dr */ { 0, BX_IA_XLAT }, - /* D7 /dm */ { 0, BX_IA_XLAT }, - /* D8 /dr */ { BxGroupN, BX_IA_ERROR, BxOpcodeInfo_FloatingPointD8 }, - /* D8 /dm */ { BxGroupFP, BX_IA_ERROR, BxOpcodeInfo_FPGroupD8 }, - /* D9 /dr */ { BxFPEscape, BX_IA_ERROR, BxOpcodeInfo_FloatingPointD9 }, - /* D9 /dm */ { BxGroupFP, BX_IA_ERROR, BxOpcodeInfo_FPGroupD9 }, - /* DA /dr */ { BxFPEscape, BX_IA_ERROR, BxOpcodeInfo_FloatingPointDA }, - /* DA /dm */ { BxGroupFP, BX_IA_ERROR, BxOpcodeInfo_FPGroupDA }, - /* DB /dr */ { BxFPEscape, BX_IA_ERROR, BxOpcodeInfo_FloatingPointDB }, - /* DB /dm */ { BxGroupFP, BX_IA_ERROR, BxOpcodeInfo_FPGroupDB }, - /* DC /dr */ { BxGroupN, BX_IA_ERROR, BxOpcodeInfo_FloatingPointDC }, - /* DC /dm */ { BxGroupFP, BX_IA_ERROR, BxOpcodeInfo_FPGroupDC }, - /* DD /dr */ { BxGroupN, BX_IA_ERROR, BxOpcodeInfo_FloatingPointDD }, - /* DD /dm */ { BxGroupFP, BX_IA_ERROR, BxOpcodeInfo_FPGroupDD }, - /* DE /dr */ { BxFPEscape, BX_IA_ERROR, BxOpcodeInfo_FloatingPointDE }, - /* DE /dm */ { BxGroupFP, BX_IA_ERROR, BxOpcodeInfo_FPGroupDE }, - /* DF /dr */ { BxFPEscape, BX_IA_ERROR, BxOpcodeInfo_FloatingPointDF }, - /* DF /dm */ { BxGroupFP, BX_IA_ERROR, BxOpcodeInfo_FPGroupDF }, - /* E0 /dr */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_LOOPNE64_Jb }, - /* E0 /dm */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_LOOPNE64_Jb }, - /* E1 /dr */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_LOOPE64_Jb }, - /* E1 /dm */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_LOOPE64_Jb }, - /* E2 /dr */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_LOOP64_Jb }, - /* E2 /dm */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_LOOP64_Jb }, - /* E3 /dr */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_JRCXZ_Jb }, - /* E3 /dm */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_JRCXZ_Jb }, - /* E4 /dr */ { BxImmediate_Ib, BX_IA_IN_ALIb }, - /* E4 /dm */ { BxImmediate_Ib, BX_IA_IN_ALIb }, - /* E5 /dr */ { BxImmediate_Ib, BX_IA_IN_EAXIb }, - /* E5 /dm */ { BxImmediate_Ib, BX_IA_IN_EAXIb }, - /* E6 /dr */ { BxImmediate_Ib, BX_IA_OUT_IbAL }, - /* E6 /dm */ { BxImmediate_Ib, BX_IA_OUT_IbAL }, - /* E7 /dr */ { BxImmediate_Ib, BX_IA_OUT_IbEAX }, - /* E7 /dm */ { BxImmediate_Ib, BX_IA_OUT_IbEAX }, - /* E8 /dr */ { BxImmediate_BrOff32 | BxTraceEnd, BX_IA_CALL_Jq }, - /* E8 /dm */ { BxImmediate_BrOff32 | BxTraceEnd, BX_IA_CALL_Jq }, - /* E9 /dr */ { BxImmediate_BrOff32 | BxTraceEnd, BX_IA_JMP_Jq }, - /* E9 /dm */ { BxImmediate_BrOff32 | BxTraceEnd, BX_IA_JMP_Jq }, - /* EA /dr */ { 0, BX_IA_ERROR }, - /* EA /dm */ { 0, BX_IA_ERROR }, - /* EB /dr */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_JMP_Jq }, - /* EB /dm */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_JMP_Jq }, - /* EC /dr */ { 0, BX_IA_IN_ALDX }, - /* EC /dm */ { 0, BX_IA_IN_ALDX }, - /* ED /dr */ { 0, BX_IA_IN_EAXDX }, - /* ED /dm */ { 0, BX_IA_IN_EAXDX }, - /* EE /dr */ { 0, BX_IA_OUT_DXAL }, - /* EE /dm */ { 0, BX_IA_OUT_DXAL }, - /* EF /dr */ { 0, BX_IA_OUT_DXEAX }, - /* EF /dm */ { 0, BX_IA_OUT_DXEAX }, - /* F0 /dr */ { 0, BX_IA_ERROR }, // LOCK: - /* F0 /dm */ { 0, BX_IA_ERROR }, // LOCK: - /* F1 /dr */ { BxTraceEnd, BX_IA_INT1 }, - /* F1 /dm */ { BxTraceEnd, BX_IA_INT1 }, - /* F2 /dr */ { 0, BX_IA_ERROR }, // REPNE/REPNZ - /* F2 /dm */ { 0, BX_IA_ERROR }, // REPNE/REPNZ - /* F3 /dr */ { 0, BX_IA_ERROR }, // REP,REPE/REPZ - /* F3 /dm */ { 0, BX_IA_ERROR }, // REP,REPE/REPZ - /* F4 /dr */ { BxTraceEnd, BX_IA_HLT }, - /* F4 /dm */ { BxTraceEnd, BX_IA_HLT }, - /* F5 /dr */ { 0, BX_IA_CMC }, - /* F5 /dm */ { 0, BX_IA_CMC }, - /* F6 /dr */ { BxGroup3, BX_IA_ERROR, BxOpcodeInfoG3Eb }, - /* F6 /dm */ { BxGroup3, BX_IA_ERROR, BxOpcodeInfoG3Eb }, - /* F7 /dr */ { BxGroup3, BX_IA_ERROR, BxOpcodeInfoG3Ed }, - /* F7 /dm */ { BxGroup3, BX_IA_ERROR, BxOpcodeInfoG3Ed }, - /* F8 /dr */ { 0, BX_IA_CLC }, - /* F8 /dm */ { 0, BX_IA_CLC }, - /* F9 /dr */ { 0, BX_IA_STC }, - /* F9 /dm */ { 0, BX_IA_STC }, - /* FA /dr */ { 0, BX_IA_CLI }, - /* FA /dm */ { 0, BX_IA_CLI }, - /* FB /dr */ { 0, BX_IA_STI }, - /* FB /dm */ { 0, BX_IA_STI }, - /* FC /dr */ { 0, BX_IA_CLD }, - /* FC /dm */ { 0, BX_IA_CLD }, - /* FD /dr */ { 0, BX_IA_STD }, - /* FD /dm */ { 0, BX_IA_STD }, - /* FE /dr */ { BxGroup4, BX_IA_ERROR, BxOpcodeInfoG4 }, - /* FE /dm */ { BxGroup4, BX_IA_ERROR, BxOpcodeInfoG4 }, - /* FF /dr */ { BxGroup5, BX_IA_ERROR, BxOpcodeInfo64G5d }, - /* FF /dm */ { BxGroup5, BX_IA_ERROR, BxOpcodeInfo64G5d }, + // 512 entries for 32bit mode + /* 00 /d */ { BxArithDstRM | BxLockable, BX_IA_ADD_EbGb }, + /* 01 /d */ { BxArithDstRM | BxLockable, BX_IA_ADD_EdGd }, + /* 02 /d */ { 0, BX_IA_ADD_GbEb }, + /* 03 /d */ { 0, BX_IA_ADD_GdEd }, + /* 04 /d */ { BxImmediate_Ib, BX_IA_ADD_ALIb }, + /* 05 /d */ { BxImmediate_Id, BX_IA_ADD_EAXId }, + /* 06 /d */ { 0, BX_IA_ERROR }, + /* 07 /d */ { 0, BX_IA_ERROR }, + /* 08 /d */ { BxArithDstRM | BxLockable, BX_IA_OR_EbGb }, + /* 09 /d */ { BxArithDstRM | BxLockable, BX_IA_OR_EdGd }, + /* 0A /d */ { 0, BX_IA_OR_GbEb }, + /* 0B /d */ { 0, BX_IA_OR_GdEd }, + /* 0C /d */ { BxImmediate_Ib, BX_IA_OR_ALIb }, + /* 0D /d */ { BxImmediate_Id, BX_IA_OR_EAXId }, + /* 0E /d */ { 0, BX_IA_ERROR }, + /* 0F /d */ { 0, BX_IA_ERROR }, // 2-byte escape + /* 10 /d */ { BxArithDstRM | BxLockable, BX_IA_ADC_EbGb }, + /* 11 /d */ { BxArithDstRM | BxLockable, BX_IA_ADC_EdGd }, + /* 12 /d */ { 0, BX_IA_ADC_GbEb }, + /* 13 /d */ { 0, BX_IA_ADC_GdEd }, + /* 14 /d */ { BxImmediate_Ib, BX_IA_ADC_ALIb }, + /* 15 /d */ { BxImmediate_Id, BX_IA_ADC_EAXId }, + /* 16 /d */ { 0, BX_IA_ERROR }, + /* 17 /d */ { 0, BX_IA_ERROR }, + /* 18 /d */ { BxArithDstRM | BxLockable, BX_IA_SBB_EbGb }, + /* 19 /d */ { BxArithDstRM | BxLockable, BX_IA_SBB_EdGd }, + /* 1A /d */ { 0, BX_IA_SBB_GbEb }, + /* 1B /d */ { 0, BX_IA_SBB_GdEd }, + /* 1C /d */ { BxImmediate_Ib, BX_IA_SBB_ALIb }, + /* 1D /d */ { BxImmediate_Id, BX_IA_SBB_EAXId }, + /* 1E /d */ { 0, BX_IA_ERROR }, + /* 1F /d */ { 0, BX_IA_ERROR }, + /* 20 /d */ { BxArithDstRM | BxLockable, BX_IA_AND_EbGb }, + /* 21 /d */ { BxArithDstRM | BxLockable, BX_IA_AND_EdGd }, + /* 22 /d */ { 0, BX_IA_AND_GbEb }, + /* 23 /d */ { 0, BX_IA_AND_GdEd }, + /* 24 /d */ { BxImmediate_Ib, BX_IA_AND_ALIb }, + /* 25 /d */ { BxImmediate_Id, BX_IA_AND_EAXId }, + /* 26 /d */ { 0, BX_IA_ERROR }, // ES: + /* 27 /d */ { 0, BX_IA_ERROR }, + /* 28 /d */ { BxArithDstRM | BxLockable, BX_IA_SUB_EbGb }, + /* 29 /d */ { BxArithDstRM | BxLockable, BX_IA_SUB_EdGd }, + /* 2A /d */ { 0, BX_IA_SUB_GbEb }, + /* 2B /d */ { 0, BX_IA_SUB_GdEd }, + /* 2C /d */ { BxImmediate_Ib, BX_IA_SUB_ALIb }, + /* 2D /d */ { BxImmediate_Id, BX_IA_SUB_EAXId }, + /* 2E /d */ { 0, BX_IA_ERROR }, // CS: + /* 2F /d */ { 0, BX_IA_ERROR }, + /* 30 /d */ { BxArithDstRM | BxLockable, BX_IA_XOR_EbGb }, + /* 31 /d */ { BxArithDstRM | BxLockable, BX_IA_XOR_EdGd }, + /* 32 /d */ { 0, BX_IA_XOR_GbEb }, + /* 33 /d */ { 0, BX_IA_XOR_GdEd }, + /* 34 /d */ { BxImmediate_Ib, BX_IA_XOR_ALIb }, + /* 35 /d */ { BxImmediate_Id, BX_IA_XOR_EAXId }, + /* 36 /d */ { 0, BX_IA_ERROR }, // SS: + /* 37 /d */ { 0, BX_IA_ERROR }, + /* 38 /d */ { BxArithDstRM, BX_IA_CMP_EbGb }, + /* 39 /d */ { BxArithDstRM, BX_IA_CMP_EdGd }, + /* 3A /d */ { 0, BX_IA_CMP_GbEb }, + /* 3B /d */ { 0, BX_IA_CMP_GdEd }, + /* 3C /d */ { BxImmediate_Ib, BX_IA_CMP_ALIb }, + /* 3D /d */ { BxImmediate_Id, BX_IA_CMP_EAXId }, + /* 3E /d */ { 0, BX_IA_ERROR }, // DS: + /* 3F /d */ { 0, BX_IA_ERROR }, + /* 40 /d */ { 0, BX_IA_ERROR }, // REX: + /* 41 /d */ { 0, BX_IA_ERROR }, // REX: + /* 42 /d */ { 0, BX_IA_ERROR }, // REX: + /* 43 /d */ { 0, BX_IA_ERROR }, // REX: + /* 44 /d */ { 0, BX_IA_ERROR }, // REX: + /* 45 /d */ { 0, BX_IA_ERROR }, // REX: + /* 46 /d */ { 0, BX_IA_ERROR }, // REX: + /* 47 /d */ { 0, BX_IA_ERROR }, // REX: + /* 48 /d */ { 0, BX_IA_ERROR }, // REX: + /* 49 /d */ { 0, BX_IA_ERROR }, // REX: + /* 4A /d */ { 0, BX_IA_ERROR }, // REX: + /* 4B /d */ { 0, BX_IA_ERROR }, // REX: + /* 4C /d */ { 0, BX_IA_ERROR }, // REX: + /* 4D /d */ { 0, BX_IA_ERROR }, // REX: + /* 4E /d */ { 0, BX_IA_ERROR }, // REX: + /* 4F /d */ { 0, BX_IA_ERROR }, // REX: + /* 50 /d */ { 0, BX_IA_PUSH_RRX }, + /* 51 /d */ { 0, BX_IA_PUSH_RRX }, + /* 52 /d */ { 0, BX_IA_PUSH_RRX }, + /* 53 /d */ { 0, BX_IA_PUSH_RRX }, + /* 54 /d */ { 0, BX_IA_PUSH_RRX }, + /* 55 /d */ { 0, BX_IA_PUSH_RRX }, + /* 56 /d */ { 0, BX_IA_PUSH_RRX }, + /* 57 /d */ { 0, BX_IA_PUSH_RRX }, + /* 58 /d */ { 0, BX_IA_POP_RRX }, + /* 59 /d */ { 0, BX_IA_POP_RRX }, + /* 5A /d */ { 0, BX_IA_POP_RRX }, + /* 5B /d */ { 0, BX_IA_POP_RRX }, + /* 5C /d */ { 0, BX_IA_POP_RRX }, + /* 5D /d */ { 0, BX_IA_POP_RRX }, + /* 5E /d */ { 0, BX_IA_POP_RRX }, + /* 5F /d */ { 0, BX_IA_POP_RRX }, + /* 60 /d */ { 0, BX_IA_ERROR }, + /* 61 /d */ { 0, BX_IA_ERROR }, + /* 62 /d */ { 0, BX_IA_ERROR }, + /* 63 /d */ { 0, BX_IA_MOV64_GdEd }, // MOVSX_GdEd + /* 64 /d */ { 0, BX_IA_ERROR }, // FS: + /* 65 /d */ { 0, BX_IA_ERROR }, // GS: + /* 66 /d */ { 0, BX_IA_ERROR }, // OS: + /* 67 /d */ { 0, BX_IA_ERROR }, // AS: + /* 68 /d */ { BxImmediate_Id, BX_IA_PUSH64_Id }, + /* 69 /d */ { BxImmediate_Id, BX_IA_IMUL_GdEdId }, + /* 6A /d */ { BxImmediate_Ib_SE, BX_IA_PUSH64_Id }, + /* 6B /d */ { BxImmediate_Ib_SE, BX_IA_IMUL_GdEdId }, + /* 6C /d */ { 0, BX_IA_REP_INSB_YbDX }, + /* 6D /d */ { 0, BX_IA_REP_INSD_YdDX }, + /* 6E /d */ { 0, BX_IA_REP_OUTSB_DXXb }, + /* 6F /d */ { 0, BX_IA_REP_OUTSD_DXXd }, + /* 70 /d */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JO_Jq }, + /* 71 /d */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNO_Jq }, + /* 72 /d */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JB_Jq }, + /* 73 /d */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNB_Jq }, + /* 74 /d */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JZ_Jq }, + /* 75 /d */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNZ_Jq }, + /* 76 /d */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JBE_Jq }, + /* 77 /d */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNBE_Jq }, + /* 78 /d */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JS_Jq }, + /* 79 /d */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNS_Jq }, + /* 7A /d */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JP_Jq }, + /* 7B /d */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNP_Jq }, + /* 7C /d */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JL_Jq }, + /* 7D /d */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNL_Jq }, + /* 7E /d */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JLE_Jq }, + /* 7F /d */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNLE_Jq }, + /* 80 /d */ { BxGroup1 | BxImmediate_Ib, BX_IA_ERROR, BxOpcodeInfoG1EbIb }, + /* 81 /d */ { BxGroup1 | BxImmediate_Id, BX_IA_ERROR, BxOpcodeInfoG1Ed }, + /* 82 /d */ { 0, BX_IA_ERROR }, + /* 83 /d */ { BxGroup1 | BxImmediate_Ib_SE, BX_IA_ERROR, BxOpcodeInfoG1Ed }, + /* 84 /d */ { 0, BX_IA_TEST_EbGb }, + /* 85 /d */ { 0, BX_IA_TEST_EdGd }, + /* 86 /d */ { BxLockable, BX_IA_XCHG_EbGb }, + /* 87 /d */ { BxLockable, BX_IA_XCHG_EdGd }, + /* 88 /d */ { BxArithDstRM, BX_IA_MOV_EbGb }, + /* 89 /d */ { BxArithDstRM, BX_IA_MOV64_EdGd }, + /* 8A /d */ { 0, BX_IA_MOV_GbEb }, + /* 8B /d */ { 0, BX_IA_MOV64_GdEd }, + /* 8C /d */ { 0, BX_IA_MOV_EwSw }, + /* 8D /d */ { 0, BX_IA_LEA_GdM }, + /* 8E /d */ { 0, BX_IA_MOV_SwEw }, + /* 8F /d */ { BxGroup1A, BX_IA_ERROR, BxOpcodeInfo64G1AEq }, + /* 90 /d */ { 0, BX_IA_XCHG_ERXEAX }, // handles XCHG R8d, EAX + /* 91 /d */ { 0, BX_IA_XCHG_ERXEAX }, + /* 92 /d */ { 0, BX_IA_XCHG_ERXEAX }, + /* 93 /d */ { 0, BX_IA_XCHG_ERXEAX }, + /* 94 /d */ { 0, BX_IA_XCHG_ERXEAX }, + /* 95 /d */ { 0, BX_IA_XCHG_ERXEAX }, + /* 96 /d */ { 0, BX_IA_XCHG_ERXEAX }, + /* 97 /d */ { 0, BX_IA_XCHG_ERXEAX }, + /* 98 /d */ { 0, BX_IA_CWDE }, + /* 99 /d */ { 0, BX_IA_CDQ }, + /* 9A /d */ { 0, BX_IA_ERROR }, + /* 9B /d */ { 0, BX_IA_FWAIT }, + /* 9C /d */ { 0, BX_IA_PUSHF_Fq }, + /* 9D /d */ { 0, BX_IA_POPF_Fq }, + /* 9E /d */ { 0, BX_IA_SAHF }, + /* 9F /d */ { 0, BX_IA_LAHF }, + /* A0 /d */ { BxImmediate_O, BX_IA_MOV_ALOq }, + /* A1 /d */ { BxImmediate_O, BX_IA_MOV_EAXOq }, + /* A2 /d */ { BxImmediate_O, BX_IA_MOV_OqAL }, + /* A3 /d */ { BxImmediate_O, BX_IA_MOV_OqEAX }, + /* A4 /d */ { 0, BX_IA_REP_MOVSB_XbYb }, + /* A5 /d */ { 0, BX_IA_REP_MOVSD_XdYd }, + /* A6 /d */ { 0, BX_IA_REP_CMPSB_XbYb }, + /* A7 /d */ { 0, BX_IA_REP_CMPSD_XdYd }, + /* A8 /d */ { BxImmediate_Ib, BX_IA_TEST_ALIb }, + /* A9 /d */ { BxImmediate_Id, BX_IA_TEST_EAXId }, + /* AA /d */ { 0, BX_IA_REP_STOSB_YbAL }, + /* AB /d */ { 0, BX_IA_REP_STOSD_YdEAX }, + /* AC /d */ { 0, BX_IA_REP_LODSB_ALXb }, + /* AD /d */ { 0, BX_IA_REP_LODSD_EAXXd }, + /* AE /d */ { 0, BX_IA_REP_SCASB_ALXb }, + /* AF /d */ { 0, BX_IA_REP_SCASD_EAXXd }, + /* B0 /d */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, + /* B1 /d */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, + /* B2 /d */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, + /* B3 /d */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, + /* B4 /d */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, + /* B5 /d */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, + /* B6 /d */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, + /* B7 /d */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, + /* B8 /d */ { BxImmediate_Id, BX_IA_MOV_ERXId }, + /* B9 /d */ { BxImmediate_Id, BX_IA_MOV_ERXId }, + /* BA /d */ { BxImmediate_Id, BX_IA_MOV_ERXId }, + /* BB /d */ { BxImmediate_Id, BX_IA_MOV_ERXId }, + /* BC /d */ { BxImmediate_Id, BX_IA_MOV_ERXId }, + /* BD /d */ { BxImmediate_Id, BX_IA_MOV_ERXId }, + /* BE /d */ { BxImmediate_Id, BX_IA_MOV_ERXId }, + /* BF /d */ { BxImmediate_Id, BX_IA_MOV_ERXId }, + /* C0 /d */ { BxGroup2 | BxImmediate_Ib, BX_IA_ERROR, BxOpcodeInfoG2Eb }, + /* C1 /d */ { BxGroup2 | BxImmediate_Ib, BX_IA_ERROR, BxOpcodeInfoG2Ed }, + /* C2 /d */ { BxImmediate_Iw | BxTraceEnd, BX_IA_RETnear64_Iw }, + /* C3 /d */ { BxTraceEnd, BX_IA_RETnear64 }, + /* C4 /d */ { 0, BX_IA_ERROR }, + /* C5 /d */ { 0, BX_IA_ERROR }, + /* C6 /d */ { BxGroup11, BX_IA_ERROR, BxOpcodeInfoG11Eb }, + /* C7 /d */ { BxGroup11, BX_IA_ERROR, BxOpcodeInfoG11Ed }, + /* C8 /d */ { BxImmediate_Iw | BxImmediate_Ib2, BX_IA_ENTER64_IwIb }, + /* C9 /d */ { 0, BX_IA_LEAVE64 }, + /* CA /d */ { BxImmediate_Iw | BxTraceEnd, BX_IA_RETfar32_Iw }, + /* CB /d */ { BxTraceEnd, BX_IA_RETfar32 }, + /* CC /d */ { BxTraceEnd, BX_IA_INT3 }, + /* CD /d */ { BxImmediate_Ib | BxTraceEnd, BX_IA_INT_Ib }, + /* CE /d */ { 0, BX_IA_ERROR }, + /* CF /d */ { BxTraceEnd, BX_IA_IRET64 }, + /* D0 /d */ { BxGroup2 | BxImmediate_I1, BX_IA_ERROR, BxOpcodeInfoG2Eb }, + /* D1 /d */ { BxGroup2 | BxImmediate_I1, BX_IA_ERROR, BxOpcodeInfoG2Ed }, + /* D2 /d */ { BxGroup2, BX_IA_ERROR, BxOpcodeInfoG2Eb }, + /* D3 /d */ { BxGroup2, BX_IA_ERROR, BxOpcodeInfoG2Ed }, + /* D4 /d */ { 0, BX_IA_ERROR }, + /* D5 /d */ { 0, BX_IA_ERROR }, + /* D6 /d */ { 0, BX_IA_ERROR }, + /* D7 /d */ { 0, BX_IA_XLAT }, + /* D8 /d */ { BxGroupFP, BX_IA_ERROR, BxOpcodeInfo_FPGroupD8 }, + /* D9 /d */ { BxFPEscape, BX_IA_ERROR, BxOpcodeInfo_FloatingPointD9 }, + /* DA /d */ { BxFPEscape, BX_IA_ERROR, BxOpcodeInfo_FloatingPointDA }, + /* DB /d */ { BxFPEscape, BX_IA_ERROR, BxOpcodeInfo_FloatingPointDB }, + /* DC /d */ { BxGroupFP, BX_IA_ERROR, BxOpcodeInfo_FPGroupDC }, + /* DD /d */ { BxGroupFP, BX_IA_ERROR, BxOpcodeInfo_FPGroupDD }, + /* DE /d */ { BxFPEscape, BX_IA_ERROR, BxOpcodeInfo_FloatingPointDE }, + /* DF /d */ { BxFPEscape, BX_IA_ERROR, BxOpcodeInfo_FloatingPointDF }, + /* E0 /d */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_LOOPNE64_Jb }, + /* E1 /d */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_LOOPE64_Jb }, + /* E2 /d */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_LOOP64_Jb }, + /* E3 /d */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_JRCXZ_Jb }, + /* E4 /d */ { BxImmediate_Ib, BX_IA_IN_ALIb }, + /* E5 /d */ { BxImmediate_Ib, BX_IA_IN_EAXIb }, + /* E6 /d */ { BxImmediate_Ib, BX_IA_OUT_IbAL }, + /* E7 /d */ { BxImmediate_Ib, BX_IA_OUT_IbEAX }, + /* E8 /d */ { BxImmediate_BrOff32 | BxTraceEnd, BX_IA_CALL_Jq }, + /* E9 /d */ { BxImmediate_BrOff32 | BxTraceEnd, BX_IA_JMP_Jq }, + /* EA /d */ { 0, BX_IA_ERROR }, + /* EB /d */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_JMP_Jq }, + /* EC /d */ { 0, BX_IA_IN_ALDX }, + /* ED /d */ { 0, BX_IA_IN_EAXDX }, + /* EE /d */ { 0, BX_IA_OUT_DXAL }, + /* EF /d */ { 0, BX_IA_OUT_DXEAX }, + /* F0 /d */ { 0, BX_IA_ERROR }, // LOCK: + /* F1 /d */ { BxTraceEnd, BX_IA_INT1 }, + /* F2 /d */ { 0, BX_IA_ERROR }, // REPNE/REPNZ + /* F3 /d */ { 0, BX_IA_ERROR }, // REP,REPE/REPZ + /* F4 /d */ { BxTraceEnd, BX_IA_HLT }, + /* F5 /d */ { 0, BX_IA_CMC }, + /* F6 /d */ { BxGroup3, BX_IA_ERROR, BxOpcodeInfoG3Eb }, + /* F7 /d */ { BxGroup3, BX_IA_ERROR, BxOpcodeInfoG3Ed }, + /* F8 /d */ { 0, BX_IA_CLC }, + /* F9 /d */ { 0, BX_IA_STC }, + /* FA /d */ { 0, BX_IA_CLI }, + /* FB /d */ { 0, BX_IA_STI }, + /* FC /d */ { 0, BX_IA_CLD }, + /* FD /d */ { 0, BX_IA_STD }, + /* FE /d */ { BxGroup4, BX_IA_ERROR, BxOpcodeInfoG4 }, + /* FF /d */ { BxGroup5, BX_IA_ERROR, BxOpcodeInfo64G5d }, - /* 0F 00 /dr */ { BxGroup6, BX_IA_ERROR, BxOpcodeInfoG6 }, - /* 0F 00 /dm */ { BxGroup6, BX_IA_ERROR, BxOpcodeInfoG6 }, - /* 0F 01 /dr */ { BxFPEscape, BX_IA_ERROR, BxOpcodeInfoG7R }, - /* 0F 01 /dm */ { BxGroup7, BX_IA_ERROR, BxOpcodeInfo64G7M }, - /* 0F 02 /dr */ { 0, BX_IA_LAR_GvEw }, - /* 0F 02 /dm */ { 0, BX_IA_LAR_GvEw }, - /* 0F 03 /dr */ { 0, BX_IA_LSL_GvEw }, - /* 0F 03 /dm */ { 0, BX_IA_LSL_GvEw }, - /* 0F 04 /dr */ { 0, BX_IA_ERROR }, - /* 0F 04 /dm */ { 0, BX_IA_ERROR }, - /* 0F 05 /dr */ { BxTraceEnd, BX_IA_SYSCALL }, - /* 0F 05 /dm */ { BxTraceEnd, BX_IA_SYSCALL }, - /* 0F 06 /dr */ { 0, BX_IA_CLTS }, - /* 0F 06 /dm */ { 0, BX_IA_CLTS }, - /* 0F 07 /dr */ { BxTraceEnd, BX_IA_SYSRET }, - /* 0F 07 /dm */ { BxTraceEnd, BX_IA_SYSRET }, - /* 0F 08 /dr */ { BxTraceEnd, BX_IA_INVD }, - /* 0F 08 /dm */ { BxTraceEnd, BX_IA_INVD }, - /* 0F 09 /dr */ { BxTraceEnd, BX_IA_WBINVD }, - /* 0F 09 /dm */ { BxTraceEnd, BX_IA_WBINVD }, - /* 0F 0A /dr */ { 0, BX_IA_ERROR }, - /* 0F 0A /dm */ { 0, BX_IA_ERROR }, - /* 0F 0B /dr */ { BxTraceEnd, BX_IA_UD2A }, - /* 0F 0B /dm */ { BxTraceEnd, BX_IA_UD2A }, - /* 0F 0C /dr */ { 0, BX_IA_ERROR }, - /* 0F 0C /dm */ { 0, BX_IA_ERROR }, - /* 0F 0D /dr */ { 0, BX_IA_PREFETCHW }, // 3DNow! PREFETCHW on AMD, NOP on Intel - /* 0F 0D /dm */ { 0, BX_IA_PREFETCHW }, // 3DNow! PREFETCHW on AMD, NOP on Intel - /* 0F 0E /dr */ { 0, BX_IA_FEMMS }, // 3DNow! FEMMS - /* 0F 0E /dm */ { 0, BX_IA_FEMMS }, // 3DNow! FEMMS - /* 0F 0F /dr */ { BxImmediate_Ib, BX_IA_ERROR }, // 3DNow! Opcode Table - /* 0F 0F /dm */ { BxImmediate_Ib, BX_IA_ERROR }, // 3DNow! Opcode Table - /* 0F 10 /dr */ { BxPrefixSSE, BX_IA_MOVUPS_VpsWps, BxOpcodeGroupSSE_0f10 }, - /* 0F 10 /dm */ { BxPrefixSSE, BX_IA_MOVUPS_VpsWps, BxOpcodeGroupSSE_0f10 }, - /* 0F 11 /dr */ { BxPrefixSSE | BxArithDstRM, BX_IA_MOVUPS_WpsVps, BxOpcodeGroupSSE_0f11 }, - /* 0F 11 /dm */ { BxPrefixSSE, BX_IA_MOVUPS_WpsVps, BxOpcodeGroupSSE_0f11 }, - /* 0F 12 /dr */ { BxPrefixSSE, BX_IA_MOVLPS_VpsMq, BxOpcodeGroupSSE_0f12 }, - /* 0F 12 /dm */ { BxPrefixSSE, BX_IA_MOVLPS_VpsMq, BxOpcodeGroupSSE_0f12 }, - /* 0F 13 /dr */ { 0, BX_IA_ERROR }, // MOVLPS/PD SSE group - /* 0F 13 /dm */ { BxPrefixSSE, BX_IA_MOVLPS_MqVps, BxOpcodeGroupSSE_0f13M }, - /* 0F 14 /dr */ { BxPrefixSSE, BX_IA_UNPCKLPS_VpsWdq, BxOpcodeGroupSSE_0f14 }, - /* 0F 14 /dm */ { BxPrefixSSE, BX_IA_UNPCKLPS_VpsWdq, BxOpcodeGroupSSE_0f14 }, - /* 0F 15 /dr */ { BxPrefixSSE, BX_IA_UNPCKHPS_VpsWdq, BxOpcodeGroupSSE_0f15 }, - /* 0F 15 /dm */ { BxPrefixSSE, BX_IA_UNPCKHPS_VpsWdq, BxOpcodeGroupSSE_0f15 }, - /* 0F 16 /dr */ { BxPrefixSSE, BX_IA_MOVHPS_VpsMq, BxOpcodeGroupSSE_0f16 }, - /* 0F 16 /dm */ { BxPrefixSSE, BX_IA_MOVHPS_VpsMq, BxOpcodeGroupSSE_0f16 }, - /* 0F 17 /dr */ { 0, BX_IA_ERROR }, // MOHLPS/PD SSE group - /* 0F 17 /dm */ { BxPrefixSSE, BX_IA_MOVHPS_MqVps, BxOpcodeGroupSSE_0f17M }, - /* 0F 18 /dr */ { 0, BX_IA_NOP }, // PREFETCH HINT - /* 0F 18 /dm */ { 0, BX_IA_PREFETCH }, // opcode group G16, PREFETCH hints - /* 0F 19 /dr */ { 0, BX_IA_NOP }, // multi-byte NOP - /* 0F 19 /dm */ { 0, BX_IA_NOP }, // multi-byte NOP - /* 0F 1A /dr */ { 0, BX_IA_NOP }, // multi-byte NOP - /* 0F 1A /dm */ { 0, BX_IA_NOP }, // multi-byte NOP - /* 0F 1B /dr */ { 0, BX_IA_NOP }, // multi-byte NOP - /* 0F 1B /dm */ { 0, BX_IA_NOP }, // multi-byte NOP - /* 0F 1C /dr */ { 0, BX_IA_NOP }, // multi-byte NOP - /* 0F 1C /dm */ { 0, BX_IA_NOP }, // multi-byte NOP - /* 0F 1D /dr */ { 0, BX_IA_NOP }, // multi-byte NOP - /* 0F 1D /dm */ { 0, BX_IA_NOP }, // multi-byte NOP - /* 0F 1E /dr */ { 0, BX_IA_NOP }, // multi-byte NOP - /* 0F 1E /dm */ { 0, BX_IA_NOP }, // multi-byte NOP - /* 0F 1F /dr */ { 0, BX_IA_NOP }, // multi-byte NOP - /* 0F 1F /dm */ { 0, BX_IA_NOP }, // multi-byte NOP - /* 0F 20 /dr */ { BxGroupN, BX_IA_ERROR, BxOpcodeInfoMOV_RqCq }, - /* 0F 20 /dm */ { 0, BX_IA_ERROR }, - /* 0F 21 /dr */ { 0, BX_IA_MOV_RqDq }, - /* 0F 21 /dm */ { 0, BX_IA_ERROR }, - /* 0F 22 /dr */ { BxGroupN, BX_IA_ERROR, BxOpcodeInfoMOV_CqRq }, - /* 0F 22 /dm */ { 0, BX_IA_ERROR }, - /* 0F 23 /dr */ { BxTraceEnd, BX_IA_MOV_DqRq }, - /* 0F 23 /dm */ { 0, BX_IA_ERROR }, - /* 0F 24 /dr */ { 0, BX_IA_ERROR }, - /* 0F 24 /dm */ { 0, BX_IA_ERROR }, - /* 0F 25 /dr */ { 0, BX_IA_ERROR }, - /* 0F 25 /dm */ { 0, BX_IA_ERROR }, - /* 0F 26 /dr */ { 0, BX_IA_ERROR }, - /* 0F 26 /dm */ { 0, BX_IA_ERROR }, - /* 0F 27 /dr */ { 0, BX_IA_ERROR }, - /* 0F 27 /dm */ { 0, BX_IA_ERROR }, - /* 0F 28 /dr */ { BxPrefixSSE, BX_IA_MOVAPS_VpsWps, BxOpcodeGroupSSE_0f28 }, - /* 0F 28 /dm */ { BxPrefixSSE, BX_IA_MOVAPS_VpsWps, BxOpcodeGroupSSE_0f28 }, - /* 0F 29 /dr */ { BxPrefixSSE | BxArithDstRM, BX_IA_MOVAPS_WpsVps, BxOpcodeGroupSSE_0f29 }, - /* 0F 29 /dm */ { BxPrefixSSE, BX_IA_MOVAPS_WpsVps, BxOpcodeGroupSSE_0f29 }, - /* 0F 2A /dr */ { BxPrefixSSE, BX_IA_CVTPI2PS_VpsQq, BxOpcodeGroupSSE_0f2a }, - /* 0F 2A /dm */ { BxPrefixSSE, BX_IA_CVTPI2PS_VpsQq, BxOpcodeGroupSSE_0f2a }, - /* 0F 2B /dr */ { 0, BX_IA_ERROR }, // MOVNTPS/PD/SS/SD - /* 0F 2B /dm */ { BxPrefixSSE, BX_IA_MOVNTPS_MpsVps, BxOpcodeGroupSSE_0f2bM }, - /* 0F 2C /dr */ { BxPrefixSSE, BX_IA_CVTTPS2PI_PqWps, BxOpcodeGroupSSE_0f2c }, - /* 0F 2C /dm */ { BxPrefixSSE, BX_IA_CVTTPS2PI_PqWps, BxOpcodeGroupSSE_0f2c }, - /* 0F 2D /dr */ { BxPrefixSSE, BX_IA_CVTPS2PI_PqWps, BxOpcodeGroupSSE_0f2d }, - /* 0F 2D /dm */ { BxPrefixSSE, BX_IA_CVTPS2PI_PqWps, BxOpcodeGroupSSE_0f2d }, - /* 0F 2E /dr */ { BxPrefixSSE, BX_IA_UCOMISS_VssWss, BxOpcodeGroupSSE_0f2e }, - /* 0F 2E /dm */ { BxPrefixSSE, BX_IA_UCOMISS_VssWss, BxOpcodeGroupSSE_0f2e }, - /* 0F 2F /dr */ { BxPrefixSSE, BX_IA_COMISS_VpsWps, BxOpcodeGroupSSE_0f2f }, - /* 0F 2F /dm */ { BxPrefixSSE, BX_IA_COMISS_VpsWps, BxOpcodeGroupSSE_0f2f }, - /* 0F 30 /dr */ { 0, BX_IA_WRMSR }, - /* 0F 30 /dm */ { 0, BX_IA_WRMSR }, - /* 0F 31 /dr */ { 0, BX_IA_RDTSC }, - /* 0F 31 /dm */ { 0, BX_IA_RDTSC }, - /* 0F 32 /dr */ { 0, BX_IA_RDMSR }, - /* 0F 32 /dm */ { 0, BX_IA_RDMSR }, - /* 0F 33 /dr */ { 0, BX_IA_RDPMC }, - /* 0F 33 /dm */ { 0, BX_IA_RDPMC }, - /* 0F 34 /dr */ { BxTraceEnd, BX_IA_SYSENTER }, - /* 0F 34 /dm */ { BxTraceEnd, BX_IA_SYSENTER }, - /* 0F 35 /dr */ { BxTraceEnd, BX_IA_SYSEXIT }, - /* 0F 35 /dm */ { BxTraceEnd, BX_IA_SYSEXIT }, - /* 0F 36 /dr */ { 0, BX_IA_ERROR }, - /* 0F 36 /dm */ { 0, BX_IA_ERROR }, - /* 0F 37 /dr */ { 0, BX_IA_ERROR }, - /* 0F 37 /dm */ { 0, BX_IA_ERROR }, - /* 0F 38 /dr */ { Bx3ByteOp, BX_IA_ERROR, BxOpcode3ByteTable0f38 }, // 3-byte escape - /* 0F 38 /dm */ { Bx3ByteOp, BX_IA_ERROR, BxOpcode3ByteTable0f38 }, // 3-byte escape - /* 0F 39 /dr */ { 0, BX_IA_ERROR }, - /* 0F 39 /dm */ { 0, BX_IA_ERROR }, - /* 0F 3A /dr */ { Bx3ByteOp | BxImmediate_Ib, BX_IA_ERROR, BxOpcode3ByteTable0f3a }, // 3-byte escape - /* 0F 3A /dm */ { Bx3ByteOp | BxImmediate_Ib, BX_IA_ERROR, BxOpcode3ByteTable0f3a }, // 3-byte escape - /* 0F 3B /dr */ { 0, BX_IA_ERROR }, - /* 0F 3B /dm */ { 0, BX_IA_ERROR }, - /* 0F 3C /dr */ { 0, BX_IA_ERROR }, - /* 0F 3C /dm */ { 0, BX_IA_ERROR }, - /* 0F 3D /dr */ { 0, BX_IA_ERROR }, - /* 0F 3D /dm */ { 0, BX_IA_ERROR }, - /* 0F 3E /dr */ { 0, BX_IA_ERROR }, - /* 0F 3E /dm */ { 0, BX_IA_ERROR }, - /* 0F 3F /dr */ { 0, BX_IA_ERROR }, - /* 0F 3F /dm */ { 0, BX_IA_ERROR }, - /* 0F 40 /dr */ { 0, BX_IA_CMOVO_GdEd }, - /* 0F 40 /dm */ { 0, BX_IA_CMOVO_GdEd }, - /* 0F 41 /dr */ { 0, BX_IA_CMOVNO_GdEd }, - /* 0F 41 /dm */ { 0, BX_IA_CMOVNO_GdEd }, - /* 0F 42 /dr */ { 0, BX_IA_CMOVB_GdEd }, - /* 0F 42 /dm */ { 0, BX_IA_CMOVB_GdEd }, - /* 0F 43 /dr */ { 0, BX_IA_CMOVNB_GdEd }, - /* 0F 43 /dm */ { 0, BX_IA_CMOVNB_GdEd }, - /* 0F 44 /dr */ { 0, BX_IA_CMOVZ_GdEd }, - /* 0F 44 /dm */ { 0, BX_IA_CMOVZ_GdEd }, - /* 0F 45 /dr */ { 0, BX_IA_CMOVNZ_GdEd }, - /* 0F 45 /dm */ { 0, BX_IA_CMOVNZ_GdEd }, - /* 0F 46 /dr */ { 0, BX_IA_CMOVBE_GdEd }, - /* 0F 46 /dm */ { 0, BX_IA_CMOVBE_GdEd }, - /* 0F 47 /dr */ { 0, BX_IA_CMOVNBE_GdEd }, - /* 0F 47 /dm */ { 0, BX_IA_CMOVNBE_GdEd }, - /* 0F 48 /dr */ { 0, BX_IA_CMOVS_GdEd }, - /* 0F 48 /dm */ { 0, BX_IA_CMOVS_GdEd }, - /* 0F 49 /dr */ { 0, BX_IA_CMOVNS_GdEd }, - /* 0F 49 /dm */ { 0, BX_IA_CMOVNS_GdEd }, - /* 0F 4A /dr */ { 0, BX_IA_CMOVP_GdEd }, - /* 0F 4A /dm */ { 0, BX_IA_CMOVP_GdEd }, - /* 0F 4B /dr */ { 0, BX_IA_CMOVNP_GdEd }, - /* 0F 4B /dm */ { 0, BX_IA_CMOVNP_GdEd }, - /* 0F 4C /dr */ { 0, BX_IA_CMOVL_GdEd }, - /* 0F 4C /dm */ { 0, BX_IA_CMOVL_GdEd }, - /* 0F 4D /dr */ { 0, BX_IA_CMOVNL_GdEd }, - /* 0F 4D /dm */ { 0, BX_IA_CMOVNL_GdEd }, - /* 0F 4E /dr */ { 0, BX_IA_CMOVLE_GdEd }, - /* 0F 4E /dm */ { 0, BX_IA_CMOVLE_GdEd }, - /* 0F 4F /dr */ { 0, BX_IA_CMOVNLE_GdEd }, - /* 0F 4F /dm */ { 0, BX_IA_CMOVNLE_GdEd }, - /* 0F 50 /dr */ { BxPrefixSSE, BX_IA_MOVMSKPS_GdVRps, BxOpcodeGroupSSE_0f50R }, - /* 0F 50 /dm */ { 0, BX_IA_ERROR }, // MOVMSKPS/PD - /* 0F 51 /dr */ { BxPrefixSSE, BX_IA_SQRTPS_VpsWps, BxOpcodeGroupSSE_0f51 }, - /* 0F 51 /dm */ { BxPrefixSSE, BX_IA_SQRTPS_VpsWps, BxOpcodeGroupSSE_0f51 }, - /* 0F 52 /dr */ { BxPrefixSSE, BX_IA_RSQRTPS_VpsWps, BxOpcodeGroupSSE_0f52 }, - /* 0F 52 /dm */ { BxPrefixSSE, BX_IA_RSQRTPS_VpsWps, BxOpcodeGroupSSE_0f52 }, - /* 0F 53 /dr */ { BxPrefixSSE, BX_IA_RCPPS_VpsWps, BxOpcodeGroupSSE_0f53 }, - /* 0F 53 /dm */ { BxPrefixSSE, BX_IA_RCPPS_VpsWps, BxOpcodeGroupSSE_0f53 }, - /* 0F 54 /dr */ { BxPrefixSSE, BX_IA_ANDPS_VpsWps, BxOpcodeGroupSSE_0f54 }, - /* 0F 54 /dm */ { BxPrefixSSE, BX_IA_ANDPS_VpsWps, BxOpcodeGroupSSE_0f54 }, - /* 0F 55 /dr */ { BxPrefixSSE, BX_IA_ANDNPS_VpsWps, BxOpcodeGroupSSE_0f55 }, - /* 0F 55 /dm */ { BxPrefixSSE, BX_IA_ANDNPS_VpsWps, BxOpcodeGroupSSE_0f55 }, - /* 0F 56 /dr */ { BxPrefixSSE, BX_IA_ORPS_VpsWps, BxOpcodeGroupSSE_0f56 }, - /* 0F 56 /dm */ { BxPrefixSSE, BX_IA_ORPS_VpsWps, BxOpcodeGroupSSE_0f56 }, - /* 0F 57 /dr */ { BxPrefixSSE, BX_IA_XORPS_VpsWps, BxOpcodeGroupSSE_0f57 }, - /* 0F 57 /dm */ { BxPrefixSSE, BX_IA_XORPS_VpsWps, BxOpcodeGroupSSE_0f57 }, - /* 0F 58 /dr */ { BxPrefixSSE, BX_IA_ADDPS_VpsWps, BxOpcodeGroupSSE_0f58 }, - /* 0F 58 /dm */ { BxPrefixSSE, BX_IA_ADDPS_VpsWps, BxOpcodeGroupSSE_0f58 }, - /* 0F 59 /dr */ { BxPrefixSSE, BX_IA_MULPS_VpsWps, BxOpcodeGroupSSE_0f59 }, - /* 0F 59 /dm */ { BxPrefixSSE, BX_IA_MULPS_VpsWps, BxOpcodeGroupSSE_0f59 }, - /* 0F 5A /dr */ { BxPrefixSSE, BX_IA_CVTPS2PD_VpsWps, BxOpcodeGroupSSE_0f5a }, - /* 0F 5A /dm */ { BxPrefixSSE, BX_IA_CVTPS2PD_VpsWps, BxOpcodeGroupSSE_0f5a }, - /* 0F 5B /dr */ { BxPrefixSSE, BX_IA_CVTDQ2PS_VpsWdq, BxOpcodeGroupSSE_0f5b }, - /* 0F 5B /dm */ { BxPrefixSSE, BX_IA_CVTDQ2PS_VpsWdq, BxOpcodeGroupSSE_0f5b }, - /* 0F 5C /dr */ { BxPrefixSSE, BX_IA_SUBPS_VpsWps, BxOpcodeGroupSSE_0f5c }, - /* 0F 5C /dm */ { BxPrefixSSE, BX_IA_SUBPS_VpsWps, BxOpcodeGroupSSE_0f5c }, - /* 0F 5D /dr */ { BxPrefixSSE, BX_IA_MINPS_VpsWps, BxOpcodeGroupSSE_0f5d }, - /* 0F 5D /dm */ { BxPrefixSSE, BX_IA_MINPS_VpsWps, BxOpcodeGroupSSE_0f5d }, - /* 0F 5E /dr */ { BxPrefixSSE, BX_IA_DIVPS_VpsWps, BxOpcodeGroupSSE_0f5e }, - /* 0F 5E /dm */ { BxPrefixSSE, BX_IA_DIVPS_VpsWps, BxOpcodeGroupSSE_0f5e }, - /* 0F 5F /dr */ { BxPrefixSSE, BX_IA_MAXPS_VpsWps, BxOpcodeGroupSSE_0f5f }, - /* 0F 5F /dm */ { BxPrefixSSE, BX_IA_MAXPS_VpsWps, BxOpcodeGroupSSE_0f5f }, - /* 0F 60 /dr */ { BxPrefixSSE, BX_IA_PUNPCKLBW_PqQd, BxOpcodeGroupSSE_0f60 }, - /* 0F 60 /dm */ { BxPrefixSSE, BX_IA_PUNPCKLBW_PqQd, BxOpcodeGroupSSE_0f60 }, - /* 0F 61 /dr */ { BxPrefixSSE, BX_IA_PUNPCKLWD_PqQd, BxOpcodeGroupSSE_0f61 }, - /* 0F 61 /dm */ { BxPrefixSSE, BX_IA_PUNPCKLWD_PqQd, BxOpcodeGroupSSE_0f61 }, - /* 0F 62 /dr */ { BxPrefixSSE, BX_IA_PUNPCKLDQ_PqQd, BxOpcodeGroupSSE_0f62 }, - /* 0F 62 /dm */ { BxPrefixSSE, BX_IA_PUNPCKLDQ_PqQd, BxOpcodeGroupSSE_0f62 }, - /* 0F 63 /dr */ { BxPrefixSSE, BX_IA_PACKSSWB_PqQq, BxOpcodeGroupSSE_0f63 }, - /* 0F 63 /dm */ { BxPrefixSSE, BX_IA_PACKSSWB_PqQq, BxOpcodeGroupSSE_0f63 }, - /* 0F 64 /dr */ { BxPrefixSSE, BX_IA_PCMPGTB_PqQq, BxOpcodeGroupSSE_0f64 }, - /* 0F 64 /dm */ { BxPrefixSSE, BX_IA_PCMPGTB_PqQq, BxOpcodeGroupSSE_0f64 }, - /* 0F 65 /dr */ { BxPrefixSSE, BX_IA_PCMPGTW_PqQq, BxOpcodeGroupSSE_0f65 }, - /* 0F 65 /dm */ { BxPrefixSSE, BX_IA_PCMPGTW_PqQq, BxOpcodeGroupSSE_0f65 }, - /* 0F 66 /dr */ { BxPrefixSSE, BX_IA_PCMPGTD_PqQq, BxOpcodeGroupSSE_0f66 }, - /* 0F 66 /dm */ { BxPrefixSSE, BX_IA_PCMPGTD_PqQq, BxOpcodeGroupSSE_0f66 }, - /* 0F 67 /dr */ { BxPrefixSSE, BX_IA_PACKUSWB_PqQq, BxOpcodeGroupSSE_0f67 }, - /* 0F 67 /dm */ { BxPrefixSSE, BX_IA_PACKUSWB_PqQq, BxOpcodeGroupSSE_0f67 }, - /* 0F 68 /dr */ { BxPrefixSSE, BX_IA_PUNPCKHBW_PqQq, BxOpcodeGroupSSE_0f68 }, - /* 0F 68 /dm */ { BxPrefixSSE, BX_IA_PUNPCKHBW_PqQq, BxOpcodeGroupSSE_0f68 }, - /* 0F 69 /dr */ { BxPrefixSSE, BX_IA_PUNPCKHWD_PqQq, BxOpcodeGroupSSE_0f69 }, - /* 0F 69 /dm */ { BxPrefixSSE, BX_IA_PUNPCKHWD_PqQq, BxOpcodeGroupSSE_0f69 }, - /* 0F 6A /dr */ { BxPrefixSSE, BX_IA_PUNPCKHDQ_PqQq, BxOpcodeGroupSSE_0f6a }, - /* 0F 6A /dm */ { BxPrefixSSE, BX_IA_PUNPCKHDQ_PqQq, BxOpcodeGroupSSE_0f6a }, - /* 0F 6B /dr */ { BxPrefixSSE, BX_IA_PACKSSDW_PqQq, BxOpcodeGroupSSE_0f6b }, - /* 0F 6B /dm */ { BxPrefixSSE, BX_IA_PACKSSDW_PqQq, BxOpcodeGroupSSE_0f6b }, - /* 0F 6C /dr */ { BxPrefixSSE66, BX_IA_PUNPCKLQDQ_VdqWdq }, - /* 0F 6C /dm */ { BxPrefixSSE66, BX_IA_PUNPCKLQDQ_VdqWdq }, - /* 0F 6D /dr */ { BxPrefixSSE66, BX_IA_PUNPCKHQDQ_VdqWdq }, - /* 0F 6D /dm */ { BxPrefixSSE66, BX_IA_PUNPCKHQDQ_VdqWdq }, - /* 0F 6E /dr */ { BxPrefixSSE, BX_IA_MOVD_PqEd, BxOpcodeGroupSSE_0f6e }, - /* 0F 6E /dm */ { BxPrefixSSE, BX_IA_MOVD_PqEd, BxOpcodeGroupSSE_0f6e }, - /* 0F 6F /dr */ { BxPrefixSSE, BX_IA_MOVQ_PqQq, BxOpcodeGroupSSE_0f6f }, - /* 0F 6F /dm */ { BxPrefixSSE, BX_IA_MOVQ_PqQq, BxOpcodeGroupSSE_0f6f }, - /* 0F 70 /dr */ { BxPrefixSSE | BxImmediate_Ib, BX_IA_PSHUFW_PqQqIb, BxOpcodeGroupSSE_0f70 }, - /* 0F 70 /dm */ { BxPrefixSSE | BxImmediate_Ib, BX_IA_PSHUFW_PqQqIb, BxOpcodeGroupSSE_0f70 }, - /* 0F 71 /dr */ { BxGroup12, BX_IA_ERROR, BxOpcodeInfoG12R }, - /* 0F 71 /dm */ { 0, BX_IA_ERROR }, // SSE Group G12 - /* 0F 72 /dr */ { BxGroup13, BX_IA_ERROR, BxOpcodeInfoG13R }, - /* 0F 72 /dm */ { 0, BX_IA_ERROR }, // SSE Group G13 - /* 0F 73 /dr */ { BxGroup14, BX_IA_ERROR, BxOpcodeInfoG14R }, - /* 0F 73 /dm */ { 0, BX_IA_ERROR }, // SSE Group G14 - /* 0F 74 /dr */ { BxPrefixSSE, BX_IA_PCMPEQB_PqQq, BxOpcodeGroupSSE_0f74 }, - /* 0F 74 /dm */ { BxPrefixSSE, BX_IA_PCMPEQB_PqQq, BxOpcodeGroupSSE_0f74 }, - /* 0F 75 /dr */ { BxPrefixSSE, BX_IA_PCMPEQW_PqQq, BxOpcodeGroupSSE_0f75 }, - /* 0F 75 /dm */ { BxPrefixSSE, BX_IA_PCMPEQW_PqQq, BxOpcodeGroupSSE_0f75 }, - /* 0F 76 /dr */ { BxPrefixSSE, BX_IA_PCMPEQD_PqQq, BxOpcodeGroupSSE_0f76 }, - /* 0F 76 /dm */ { BxPrefixSSE, BX_IA_PCMPEQD_PqQq, BxOpcodeGroupSSE_0f76 }, - /* 0F 77 /dr */ { BxPrefixSSE, BX_IA_EMMS, BxOpcodeGroupSSE_ERR }, - /* 0F 77 /dm */ { BxPrefixSSE, BX_IA_EMMS, BxOpcodeGroupSSE_ERR }, - /* 0F 78 /dr */ { BxPrefixSSE, BX_IA_VMREAD_EqGq, BxOpcodeGroupSSE_ERR }, - /* 0F 78 /dm */ { BxPrefixSSE, BX_IA_VMREAD_EqGq, BxOpcodeGroupSSE_ERR }, - /* 0F 79 /dr */ { BxPrefixSSE, BX_IA_VMWRITE_GqEq, BxOpcodeGroupSSE_ERR }, - /* 0F 79 /dm */ { BxPrefixSSE, BX_IA_VMWRITE_GqEq, BxOpcodeGroupSSE_ERR }, - /* 0F 7A /dr */ { 0, BX_IA_ERROR }, - /* 0F 7A /dm */ { 0, BX_IA_ERROR }, - /* 0F 7B /dr */ { 0, BX_IA_ERROR }, - /* 0F 7B /dm */ { 0, BX_IA_ERROR }, - /* 0F 7C /dr */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f7c }, - /* 0F 7C /dm */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f7c }, - /* 0F 7D /dr */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f7d }, - /* 0F 7D /dm */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f7d }, - /* 0F 7E /dr */ { BxPrefixSSE, BX_IA_MOVD_EdPd, BxOpcodeGroupSSE_0f7e }, - /* 0F 7E /dm */ { BxPrefixSSE, BX_IA_MOVD_EdPd, BxOpcodeGroupSSE_0f7e }, - /* 0F 7F /dr */ { BxPrefixSSE, BX_IA_MOVQ_QqPq, BxOpcodeGroupSSE_0f7f }, - /* 0F 7F /dm */ { BxPrefixSSE, BX_IA_MOVQ_QqPq, BxOpcodeGroupSSE_0f7f }, - /* 0F 80 /dr */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JO_Jq }, - /* 0F 80 /dm */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JO_Jq }, - /* 0F 81 /dr */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNO_Jq }, - /* 0F 81 /dm */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNO_Jq }, - /* 0F 82 /dr */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JB_Jq }, - /* 0F 82 /dm */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JB_Jq }, - /* 0F 83 /dr */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNB_Jq }, - /* 0F 83 /dm */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNB_Jq }, - /* 0F 84 /dr */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JZ_Jq }, - /* 0F 84 /dm */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JZ_Jq }, - /* 0F 85 /dr */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNZ_Jq }, - /* 0F 85 /dm */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNZ_Jq }, - /* 0F 86 /dr */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JBE_Jq }, - /* 0F 86 /dm */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JBE_Jq }, - /* 0F 87 /dr */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNBE_Jq }, - /* 0F 87 /dm */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNBE_Jq }, - /* 0F 88 /dr */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JS_Jq }, - /* 0F 88 /dm */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JS_Jq }, - /* 0F 89 /dr */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNS_Jq }, - /* 0F 89 /dm */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNS_Jq }, - /* 0F 8A /dr */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JP_Jq }, - /* 0F 8A /dm */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JP_Jq }, - /* 0F 8B /dr */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNP_Jq }, - /* 0F 8B /dm */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNP_Jq }, - /* 0F 8C /dr */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JL_Jq }, - /* 0F 8C /dm */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JL_Jq }, - /* 0F 8D /dr */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNL_Jq }, - /* 0F 8D /dm */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNL_Jq }, - /* 0F 8E /dr */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JLE_Jq }, - /* 0F 8E /dm */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JLE_Jq }, - /* 0F 8F /dr */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNLE_Jq }, - /* 0F 8F /dm */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNLE_Jq }, - /* 0F 90 /dr */ { 0, BX_IA_SETO_Eb }, - /* 0F 90 /dm */ { 0, BX_IA_SETO_Eb }, - /* 0F 91 /dr */ { 0, BX_IA_SETNO_Eb }, - /* 0F 91 /dm */ { 0, BX_IA_SETNO_Eb }, - /* 0F 92 /dr */ { 0, BX_IA_SETB_Eb }, - /* 0F 92 /dm */ { 0, BX_IA_SETB_Eb }, - /* 0F 93 /dr */ { 0, BX_IA_SETNB_Eb }, - /* 0F 93 /dm */ { 0, BX_IA_SETNB_Eb }, - /* 0F 94 /dr */ { 0, BX_IA_SETZ_Eb }, - /* 0F 94 /dm */ { 0, BX_IA_SETZ_Eb }, - /* 0F 95 /dr */ { 0, BX_IA_SETNZ_Eb }, - /* 0F 95 /dm */ { 0, BX_IA_SETNZ_Eb }, - /* 0F 96 /dr */ { 0, BX_IA_SETBE_Eb }, - /* 0F 96 /dm */ { 0, BX_IA_SETBE_Eb }, - /* 0F 97 /dr */ { 0, BX_IA_SETNBE_Eb }, - /* 0F 97 /dm */ { 0, BX_IA_SETNBE_Eb }, - /* 0F 98 /dr */ { 0, BX_IA_SETS_Eb }, - /* 0F 98 /dm */ { 0, BX_IA_SETS_Eb }, - /* 0F 99 /dr */ { 0, BX_IA_SETNS_Eb }, - /* 0F 99 /dm */ { 0, BX_IA_SETNS_Eb }, - /* 0F 9A /dr */ { 0, BX_IA_SETP_Eb }, - /* 0F 9A /dm */ { 0, BX_IA_SETP_Eb }, - /* 0F 9B /dr */ { 0, BX_IA_SETNP_Eb }, - /* 0F 9B /dm */ { 0, BX_IA_SETNP_Eb }, - /* 0F 9C /dr */ { 0, BX_IA_SETL_Eb }, - /* 0F 9C /dm */ { 0, BX_IA_SETL_Eb }, - /* 0F 9D /dr */ { 0, BX_IA_SETNL_Eb }, - /* 0F 9D /dm */ { 0, BX_IA_SETNL_Eb }, - /* 0F 9E /dr */ { 0, BX_IA_SETLE_Eb }, - /* 0F 9E /dm */ { 0, BX_IA_SETLE_Eb }, - /* 0F 9F /dr */ { 0, BX_IA_SETNLE_Eb }, - /* 0F 9F /dm */ { 0, BX_IA_SETNLE_Eb }, - /* 0F A0 /dr */ { 0, BX_IA_PUSH64_FS }, - /* 0F A0 /dm */ { 0, BX_IA_PUSH64_FS }, - /* 0F A1 /dr */ { 0, BX_IA_POP64_FS }, - /* 0F A1 /dm */ { 0, BX_IA_POP64_FS }, - /* 0F A2 /dr */ { 0, BX_IA_CPUID }, - /* 0F A2 /dm */ { 0, BX_IA_CPUID }, - /* 0F A3 /dr */ { 0, BX_IA_BT_EdGdR }, - /* 0F A3 /dm */ { 0, BX_IA_BT_EdGdM }, - /* 0F A4 /dr */ { BxImmediate_Ib, BX_IA_SHLD_EdGd }, - /* 0F A4 /dm */ { BxImmediate_Ib, BX_IA_SHLD_EdGd }, - /* 0F A5 /dr */ { 0, BX_IA_SHLD_EdGd }, - /* 0F A5 /dm */ { 0, BX_IA_SHLD_EdGd }, - /* 0F A6 /dr */ { 0, BX_IA_ERROR }, - /* 0F A6 /dm */ { 0, BX_IA_ERROR }, - /* 0F A7 /dr */ { 0, BX_IA_ERROR }, - /* 0F A7 /dm */ { 0, BX_IA_ERROR }, - /* 0F A8 /dr */ { 0, BX_IA_PUSH64_GS }, - /* 0F A8 /dm */ { 0, BX_IA_PUSH64_GS }, - /* 0F A9 /dr */ { 0, BX_IA_POP64_GS }, - /* 0F A9 /dm */ { 0, BX_IA_POP64_GS }, - /* 0F AA /dr */ { BxTraceEnd, BX_IA_RSM }, - /* 0F AA /dm */ { BxTraceEnd, BX_IA_RSM }, - /* 0F AB /dr */ { 0, BX_IA_BTS_EdGdR }, - /* 0F AB /dm */ { BxLockable, BX_IA_BTS_EdGdM }, - /* 0F AC /dr */ { BxImmediate_Ib, BX_IA_SHRD_EdGd }, - /* 0F AC /dm */ { BxImmediate_Ib, BX_IA_SHRD_EdGd }, - /* 0F AD /dr */ { 0, BX_IA_SHRD_EdGd }, - /* 0F AD /dm */ { 0, BX_IA_SHRD_EdGd }, - /* 0F AE /dr */ { BxGroup15, BX_IA_ERROR, BxOpcodeInfoG15R64 }, - /* 0F AE /dm */ { BxGroup15, BX_IA_ERROR, BxOpcodeInfoG15M }, - /* 0F AF /dr */ { 0, BX_IA_IMUL_GdEd }, - /* 0F AF /dm */ { 0, BX_IA_IMUL_GdEd }, - /* 0F B0 /dr */ { 0, BX_IA_CMPXCHG_EbGb }, - /* 0F B0 /dm */ { BxLockable, BX_IA_CMPXCHG_EbGb }, - /* 0F B1 /dr */ { 0, BX_IA_CMPXCHG_EdGd }, - /* 0F B1 /dm */ { BxLockable, BX_IA_CMPXCHG_EdGd }, - /* 0F B2 /dr */ { 0, BX_IA_ERROR }, // LSS - /* 0F B2 /dm */ { 0, BX_IA_LSS_GdMp }, - /* 0F B3 /dr */ { 0, BX_IA_BTR_EdGdR }, - /* 0F B3 /dm */ { BxLockable, BX_IA_BTR_EdGdM }, - /* 0F B4 /dr */ { 0, BX_IA_ERROR }, // LFS - /* 0F B4 /dm */ { 0, BX_IA_LFS_GdMp }, - /* 0F B5 /dr */ { 0, BX_IA_ERROR }, // LFS - /* 0F B5 /dm */ { 0, BX_IA_LGS_GdMp }, - /* 0F B6 /dr */ { 0, BX_IA_MOVZX_GdEb }, - /* 0F B6 /dm */ { 0, BX_IA_MOVZX_GdEb }, - /* 0F B7 /dr */ { 0, BX_IA_MOVZX_GdEw }, - /* 0F B7 /dm */ { 0, BX_IA_MOVZX_GdEw }, - /* 0F B8 /dr */ { BxPrefixSSEF3, BX_IA_POPCNT_GdEd }, - /* 0F B8 /dm */ { BxPrefixSSEF3, BX_IA_POPCNT_GdEd }, - /* 0F B9 /dr */ { BxTraceEnd, BX_IA_UD2B }, - /* 0F B9 /dm */ { BxTraceEnd, BX_IA_UD2B }, - /* 0F BA /dr */ { BxGroup8, BX_IA_ERROR, BxOpcodeInfoG8EdIb }, - /* 0F BA /dm */ { BxGroup8, BX_IA_ERROR, BxOpcodeInfoG8EdIb }, - /* 0F BB /dr */ { 0, BX_IA_BTC_EdGdR }, - /* 0F BB /dm */ { BxLockable, BX_IA_BTC_EdGdM }, - /* 0F BC /dr */ { 0, BX_IA_BSF_GdEd }, - /* 0F BC /dm */ { 0, BX_IA_BSF_GdEd }, - /* 0F BD /dr */ { 0, BX_IA_BSR_GdEd }, - /* 0F BD /dm */ { 0, BX_IA_BSR_GdEd }, - /* 0F BE /dr */ { 0, BX_IA_MOVSX_GdEb }, - /* 0F BE /dm */ { 0, BX_IA_MOVSX_GdEb }, - /* 0F BF /dr */ { 0, BX_IA_MOVSX_GdEw }, - /* 0F BF /dm */ { 0, BX_IA_MOVSX_GdEw }, - /* 0F C0 /dr */ { 0, BX_IA_XADD_EbGb }, - /* 0F C0 /dm */ { BxLockable, BX_IA_XADD_EbGb }, - /* 0F C1 /dr */ { 0, BX_IA_XADD_EdGd }, - /* 0F C1 /dm */ { BxLockable, BX_IA_XADD_EdGd }, - /* 0F C2 /dr */ { BxPrefixSSE | BxImmediate_Ib, BX_IA_CMPPS_VpsWpsIb, BxOpcodeGroupSSE_0fc2 }, - /* 0F C2 /dm */ { BxPrefixSSE | BxImmediate_Ib, BX_IA_CMPPS_VpsWpsIb, BxOpcodeGroupSSE_0fc2 }, - /* 0F C3 /dr */ { 0, BX_IA_ERROR }, // MOVNTI SSE group - /* 0F C3 /dm */ { BxPrefixSSE, BX_IA_MOVNTI_MdGd, BxOpcodeGroupSSE_ERR }, - /* 0F C4 /dr */ { BxPrefixSSE | BxImmediate_Ib, BX_IA_PINSRW_PqEwIb, BxOpcodeGroupSSE_0fc4 }, - /* 0F C4 /dm */ { BxPrefixSSE | BxImmediate_Ib, BX_IA_PINSRW_PqEwIb, BxOpcodeGroupSSE_0fc4 }, - /* 0F C5 /dr */ { BxPrefixSSE | BxImmediate_Ib, BX_IA_PEXTRW_GdPqIb, BxOpcodeGroupSSE_0fc5R }, - /* 0F C5 /dm */ { 0, BX_IA_ERROR }, // PEXTRW SSE group - /* 0F C6 /dr */ { BxPrefixSSE | BxImmediate_Ib, BX_IA_SHUFPS_VpsWpsIb, BxOpcodeGroupSSE_0fc6 }, - /* 0F C6 /dm */ { BxPrefixSSE | BxImmediate_Ib, BX_IA_SHUFPS_VpsWpsIb, BxOpcodeGroupSSE_0fc6 }, - /* 0F C7 /dr */ { 0, BX_IA_ERROR }, // CMPXCHG8B G9 group - /* 0F C7 /dm */ { BxGroup9, BX_IA_ERROR, BxOpcodeInfoG9M }, - /* 0F C8 /dr */ { 0, BX_IA_BSWAP_ERX }, - /* 0F C8 /dm */ { 0, BX_IA_BSWAP_ERX }, - /* 0F C9 /dr */ { 0, BX_IA_BSWAP_ERX }, - /* 0F C9 /dm */ { 0, BX_IA_BSWAP_ERX }, - /* 0F CA /dr */ { 0, BX_IA_BSWAP_ERX }, - /* 0F CA /dm */ { 0, BX_IA_BSWAP_ERX }, - /* 0F CB /dr */ { 0, BX_IA_BSWAP_ERX }, - /* 0F CB /dm */ { 0, BX_IA_BSWAP_ERX }, - /* 0F CC /dr */ { 0, BX_IA_BSWAP_ERX }, - /* 0F CC /dm */ { 0, BX_IA_BSWAP_ERX }, - /* 0F CD /dr */ { 0, BX_IA_BSWAP_ERX }, - /* 0F CD /dm */ { 0, BX_IA_BSWAP_ERX }, - /* 0F CE /dr */ { 0, BX_IA_BSWAP_ERX }, - /* 0F CE /dm */ { 0, BX_IA_BSWAP_ERX }, - /* 0F CF /dr */ { 0, BX_IA_BSWAP_ERX }, - /* 0F CF /dm */ { 0, BX_IA_BSWAP_ERX }, - /* 0F D0 /dr */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0fd0 }, - /* 0F D0 /dm */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0fd0 }, - /* 0F D1 /dr */ { BxPrefixSSE, BX_IA_PSRLW_PqQq, BxOpcodeGroupSSE_0fd1 }, - /* 0F D1 /dm */ { BxPrefixSSE, BX_IA_PSRLW_PqQq, BxOpcodeGroupSSE_0fd1 }, - /* 0F D2 /dr */ { BxPrefixSSE, BX_IA_PSRLD_PqQq, BxOpcodeGroupSSE_0fd2 }, - /* 0F D2 /dm */ { BxPrefixSSE, BX_IA_PSRLD_PqQq, BxOpcodeGroupSSE_0fd2 }, - /* 0F D3 /dr */ { BxPrefixSSE, BX_IA_PSRLQ_PqQq, BxOpcodeGroupSSE_0fd3 }, - /* 0F D3 /dm */ { BxPrefixSSE, BX_IA_PSRLQ_PqQq, BxOpcodeGroupSSE_0fd3 }, - /* 0F D4 /dr */ { BxPrefixSSE, BX_IA_PADDQ_PqQq, BxOpcodeGroupSSE_0fd4 }, - /* 0F D4 /dm */ { BxPrefixSSE, BX_IA_PADDQ_PqQq, BxOpcodeGroupSSE_0fd4 }, - /* 0F D5 /dr */ { BxPrefixSSE, BX_IA_PMULLW_PqQq, BxOpcodeGroupSSE_0fd5 }, - /* 0F D5 /dm */ { BxPrefixSSE, BX_IA_PMULLW_PqQq, BxOpcodeGroupSSE_0fd5 }, - /* 0F D6 /dr */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0fd6 }, - /* 0F D6 /dm */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0fd6 }, - /* 0F D7 /dr */ { BxPrefixSSE, BX_IA_PMOVMSKB_GdPRq, BxOpcodeGroupSSE_0fd7 }, - /* 0F D7 /dm */ { 0, BX_IA_ERROR }, // PMOVMSKB is reg/reg form only - /* 0F D8 /dr */ { BxPrefixSSE, BX_IA_PSUBUSB_PqQq, BxOpcodeGroupSSE_0fd8 }, - /* 0F D8 /dm */ { BxPrefixSSE, BX_IA_PSUBUSB_PqQq, BxOpcodeGroupSSE_0fd8 }, - /* 0F D9 /dr */ { BxPrefixSSE, BX_IA_PSUBUSW_PqQq, BxOpcodeGroupSSE_0fd9 }, - /* 0F D9 /dm */ { BxPrefixSSE, BX_IA_PSUBUSW_PqQq, BxOpcodeGroupSSE_0fd9 }, - /* 0F DA /dr */ { BxPrefixSSE, BX_IA_PMINUB_PqQq, BxOpcodeGroupSSE_0fda }, - /* 0F DA /dm */ { BxPrefixSSE, BX_IA_PMINUB_PqQq, BxOpcodeGroupSSE_0fda }, - /* 0F DB /dr */ { BxPrefixSSE, BX_IA_PAND_PqQq, BxOpcodeGroupSSE_0fdb }, - /* 0F DB /dm */ { BxPrefixSSE, BX_IA_PAND_PqQq, BxOpcodeGroupSSE_0fdb }, - /* 0F DC /dr */ { BxPrefixSSE, BX_IA_PADDUSB_PqQq, BxOpcodeGroupSSE_0fdc }, - /* 0F DC /dm */ { BxPrefixSSE, BX_IA_PADDUSB_PqQq, BxOpcodeGroupSSE_0fdc }, - /* 0F DD /dr */ { BxPrefixSSE, BX_IA_PADDUSW_PqQq, BxOpcodeGroupSSE_0fdd }, - /* 0F DD /dm */ { BxPrefixSSE, BX_IA_PADDUSW_PqQq, BxOpcodeGroupSSE_0fdd }, - /* 0F DE /dr */ { BxPrefixSSE, BX_IA_PMAXUB_PqQq, BxOpcodeGroupSSE_0fde }, - /* 0F DE /dm */ { BxPrefixSSE, BX_IA_PMAXUB_PqQq, BxOpcodeGroupSSE_0fde }, - /* 0F DF /dr */ { BxPrefixSSE, BX_IA_PANDN_PqQq, BxOpcodeGroupSSE_0fdf }, - /* 0F DF /dm */ { BxPrefixSSE, BX_IA_PANDN_PqQq, BxOpcodeGroupSSE_0fdf }, - /* 0F E0 /dr */ { BxPrefixSSE, BX_IA_PAVGB_PqQq, BxOpcodeGroupSSE_0fe0 }, - /* 0F E0 /dm */ { BxPrefixSSE, BX_IA_PAVGB_PqQq, BxOpcodeGroupSSE_0fe0 }, - /* 0F E1 /dr */ { BxPrefixSSE, BX_IA_PSRAW_PqQq, BxOpcodeGroupSSE_0fe1 }, - /* 0F E1 /dm */ { BxPrefixSSE, BX_IA_PSRAW_PqQq, BxOpcodeGroupSSE_0fe1 }, - /* 0F E2 /dr */ { BxPrefixSSE, BX_IA_PSRAD_PqQq, BxOpcodeGroupSSE_0fe2 }, - /* 0F E2 /dm */ { BxPrefixSSE, BX_IA_PSRAD_PqQq, BxOpcodeGroupSSE_0fe2 }, - /* 0F E3 /dr */ { BxPrefixSSE, BX_IA_PAVGW_PqQq, BxOpcodeGroupSSE_0fe3 }, - /* 0F E3 /dm */ { BxPrefixSSE, BX_IA_PAVGW_PqQq, BxOpcodeGroupSSE_0fe3 }, - /* 0F E4 /dr */ { BxPrefixSSE, BX_IA_PMULHUW_PqQq, BxOpcodeGroupSSE_0fe4 }, - /* 0F E4 /dm */ { BxPrefixSSE, BX_IA_PMULHUW_PqQq, BxOpcodeGroupSSE_0fe4 }, - /* 0F E5 /dr */ { BxPrefixSSE, BX_IA_PMULHW_PqQq, BxOpcodeGroupSSE_0fe5 }, - /* 0F E5 /dm */ { BxPrefixSSE, BX_IA_PMULHW_PqQq, BxOpcodeGroupSSE_0fe5 }, - /* 0F E6 /dr */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0fe6 }, - /* 0F E6 /dm */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0fe6 }, - /* 0F E7 /dr */ { 0, BX_IA_ERROR }, // MOVNTQ/MOVNTDQ SSE group - /* 0F E7 /dm */ { BxPrefixSSE, BX_IA_MOVNTQ_MqPq, BxOpcodeGroupSSE_0fe7M }, - /* 0F E8 /dr */ { BxPrefixSSE, BX_IA_PSUBSB_PqQq, BxOpcodeGroupSSE_0fe8 }, - /* 0F E8 /dm */ { BxPrefixSSE, BX_IA_PSUBSB_PqQq, BxOpcodeGroupSSE_0fe8 }, - /* 0F E9 /dr */ { BxPrefixSSE, BX_IA_PSUBSW_PqQq, BxOpcodeGroupSSE_0fe9 }, - /* 0F E9 /dm */ { BxPrefixSSE, BX_IA_PSUBSW_PqQq, BxOpcodeGroupSSE_0fe9 }, - /* 0F EA /dr */ { BxPrefixSSE, BX_IA_PMINSW_PqQq, BxOpcodeGroupSSE_0fea }, - /* 0F EA /dm */ { BxPrefixSSE, BX_IA_PMINSW_PqQq, BxOpcodeGroupSSE_0fea }, - /* 0F EB /dr */ { BxPrefixSSE, BX_IA_POR_PqQq, BxOpcodeGroupSSE_0feb }, - /* 0F EB /dm */ { BxPrefixSSE, BX_IA_POR_PqQq, BxOpcodeGroupSSE_0feb }, - /* 0F EC /dr */ { BxPrefixSSE, BX_IA_PADDSB_PqQq, BxOpcodeGroupSSE_0fec }, - /* 0F EC /dm */ { BxPrefixSSE, BX_IA_PADDSB_PqQq, BxOpcodeGroupSSE_0fec }, - /* 0F ED /dr */ { BxPrefixSSE, BX_IA_PADDSW_PqQq, BxOpcodeGroupSSE_0fed }, - /* 0F ED /dm */ { BxPrefixSSE, BX_IA_PADDSW_PqQq, BxOpcodeGroupSSE_0fed }, - /* 0F EE /dr */ { BxPrefixSSE, BX_IA_PMAXSW_PqQq, BxOpcodeGroupSSE_0fee }, - /* 0F EE /dm */ { BxPrefixSSE, BX_IA_PMAXSW_PqQq, BxOpcodeGroupSSE_0fee }, - /* 0F EF /dr */ { BxPrefixSSE, BX_IA_PXOR_PqQq, BxOpcodeGroupSSE_0fef }, - /* 0F EF /dm */ { BxPrefixSSE, BX_IA_PXOR_PqQq, BxOpcodeGroupSSE_0fef }, - /* 0F F0 /dr */ { 0, BX_IA_ERROR }, // LDDQU SSE group - /* 0F F0 /wm */ { BxPrefixSSEF2, BX_IA_LDDQU_VdqMdq }, - /* 0F F1 /dr */ { BxPrefixSSE, BX_IA_PSLLW_PqQq, BxOpcodeGroupSSE_0ff1 }, - /* 0F F1 /dm */ { BxPrefixSSE, BX_IA_PSLLW_PqQq, BxOpcodeGroupSSE_0ff1 }, - /* 0F F2 /dr */ { BxPrefixSSE, BX_IA_PSLLD_PqQq, BxOpcodeGroupSSE_0ff2 }, - /* 0F F2 /dm */ { BxPrefixSSE, BX_IA_PSLLD_PqQq, BxOpcodeGroupSSE_0ff2 }, - /* 0F F3 /dr */ { BxPrefixSSE, BX_IA_PSLLQ_PqQq, BxOpcodeGroupSSE_0ff3 }, - /* 0F F3 /dm */ { BxPrefixSSE, BX_IA_PSLLQ_PqQq, BxOpcodeGroupSSE_0ff3 }, - /* 0F F4 /dr */ { BxPrefixSSE, BX_IA_PMULUDQ_PqQq, BxOpcodeGroupSSE_0ff4 }, - /* 0F F4 /dm */ { BxPrefixSSE, BX_IA_PMULUDQ_PqQq, BxOpcodeGroupSSE_0ff4 }, - /* 0F F5 /dr */ { BxPrefixSSE, BX_IA_PMADDWD_PqQq, BxOpcodeGroupSSE_0ff5 }, - /* 0F F5 /dm */ { BxPrefixSSE, BX_IA_PMADDWD_PqQq, BxOpcodeGroupSSE_0ff5 }, - /* 0F F6 /dr */ { BxPrefixSSE, BX_IA_PSADBW_PqQq, BxOpcodeGroupSSE_0ff6 }, - /* 0F F6 /dm */ { BxPrefixSSE, BX_IA_PSADBW_PqQq, BxOpcodeGroupSSE_0ff6 }, - /* 0F F7 /dr */ { BxPrefixSSE, BX_IA_MASKMOVQ_PqPRq, BxOpcodeGroupSSE_0ff7R }, - /* 0F F7 /dm */ { 0, BX_IA_ERROR }, // MASKMOV SSE group - /* 0F F8 /dr */ { BxPrefixSSE, BX_IA_PSUBB_PqQq, BxOpcodeGroupSSE_0ff8 }, - /* 0F F8 /dm */ { BxPrefixSSE, BX_IA_PSUBB_PqQq, BxOpcodeGroupSSE_0ff8 }, - /* 0F F9 /dr */ { BxPrefixSSE, BX_IA_PSUBW_PqQq, BxOpcodeGroupSSE_0ff9 }, - /* 0F F9 /dm */ { BxPrefixSSE, BX_IA_PSUBW_PqQq, BxOpcodeGroupSSE_0ff9 }, - /* 0F FA /dr */ { BxPrefixSSE, BX_IA_PSUBD_PqQq, BxOpcodeGroupSSE_0ffa }, - /* 0F FA /dm */ { BxPrefixSSE, BX_IA_PSUBD_PqQq, BxOpcodeGroupSSE_0ffa }, - /* 0F FB /dr */ { BxPrefixSSE, BX_IA_PSUBQ_PqQq, BxOpcodeGroupSSE_0ffb }, - /* 0F FB /dm */ { BxPrefixSSE, BX_IA_PSUBQ_PqQq, BxOpcodeGroupSSE_0ffb }, - /* 0F FC /dr */ { BxPrefixSSE, BX_IA_PADDB_PqQq, BxOpcodeGroupSSE_0ffc }, - /* 0F FC /dm */ { BxPrefixSSE, BX_IA_PADDB_PqQq, BxOpcodeGroupSSE_0ffc }, - /* 0F FD /dr */ { BxPrefixSSE, BX_IA_PADDW_PqQq, BxOpcodeGroupSSE_0ffd }, - /* 0F FD /dm */ { BxPrefixSSE, BX_IA_PADDW_PqQq, BxOpcodeGroupSSE_0ffd }, - /* 0F FE /dr */ { BxPrefixSSE, BX_IA_PADDD_PqQq, BxOpcodeGroupSSE_0ffe }, - /* 0F FE /dm */ { BxPrefixSSE, BX_IA_PADDD_PqQq, BxOpcodeGroupSSE_0ffe }, - /* 0F FF /dr */ { 0, BX_IA_ERROR }, - /* 0F FF /dm */ { 0, BX_IA_ERROR }, + /* 0F 00 /d */ { BxGroup6, BX_IA_ERROR, BxOpcodeInfoG6 }, + /* 0F 01 /d */ { BxGroup7, BX_IA_ERROR, BxOpcodeInfoG7q }, + /* 0F 02 /d */ { 0, BX_IA_LAR_GvEw }, + /* 0F 03 /d */ { 0, BX_IA_LSL_GvEw }, + /* 0F 04 /d */ { 0, BX_IA_ERROR }, + /* 0F 05 /d */ { BxTraceEnd, BX_IA_SYSCALL }, + /* 0F 06 /d */ { 0, BX_IA_CLTS }, + /* 0F 07 /d */ { BxTraceEnd, BX_IA_SYSRET }, + /* 0F 08 /d */ { BxTraceEnd, BX_IA_INVD }, + /* 0F 09 /d */ { BxTraceEnd, BX_IA_WBINVD }, + /* 0F 0A /d */ { 0, BX_IA_ERROR }, + /* 0F 0B /d */ { BxTraceEnd, BX_IA_UD2A }, + /* 0F 0C /d */ { 0, BX_IA_ERROR }, + /* 0F 0D /d */ { 0, BX_IA_PREFETCHW }, // 3DNow! PREFETCHW on AMD, NOP on Intel + /* 0F 0E /d */ { 0, BX_IA_FEMMS }, // 3DNow! FEMMS + /* 0F 0F /d */ { BxImmediate_Ib, BX_IA_ERROR }, // 3DNow! Opcode Table + /* 0F 10 /d */ { BxPrefixSSE, BX_IA_MOVUPS_VpsWps, BxOpcodeGroupSSE_0f10 }, + /* 0F 11 /d */ { BxPrefixSSE | BxArithDstRM, BX_IA_MOVUPS_WpsVps, BxOpcodeGroupSSE_0f11 }, + /* 0F 12 /d */ { BxPrefixSSE, BX_IA_MOVLPS_VpsMq, BxOpcodeGroupSSE_0f12 }, + /* 0F 13 /d */ { BxPrefixSSE, BX_IA_MOVLPS_MqVps, BxOpcodeGroupSSE_0f13M }, + /* 0F 14 /d */ { BxPrefixSSE, BX_IA_UNPCKLPS_VpsWdq, BxOpcodeGroupSSE_0f14 }, + /* 0F 15 /d */ { BxPrefixSSE, BX_IA_UNPCKHPS_VpsWdq, BxOpcodeGroupSSE_0f15 }, + /* 0F 16 /d */ { BxPrefixSSE, BX_IA_MOVHPS_VpsMq, BxOpcodeGroupSSE_0f16 }, + /* 0F 17 /d */ { BxPrefixSSE, BX_IA_MOVHPS_MqVps, BxOpcodeGroupSSE_0f17M }, + /* 0F 18 /d */ { 0, BX_IA_PREFETCH }, // opcode group G16, PREFETCH hints + /* 0F 19 /d */ { 0, BX_IA_NOP }, // multi-byte NOP + /* 0F 1A /d */ { 0, BX_IA_NOP }, // multi-byte NOP + /* 0F 1B /d */ { 0, BX_IA_NOP }, // multi-byte NOP + /* 0F 1C /d */ { 0, BX_IA_NOP }, // multi-byte NOP + /* 0F 1D /d */ { 0, BX_IA_NOP }, // multi-byte NOP + /* 0F 1E /d */ { 0, BX_IA_NOP }, // multi-byte NOP + /* 0F 1F /d */ { 0, BX_IA_NOP }, // multi-byte NOP + /* 0F 20 /d */ { BxGroupN, BX_IA_ERROR, BxOpcodeInfoMOV_RqCq }, + /* 0F 21 /d */ { 0, BX_IA_MOV_RqDq }, + /* 0F 22 /d */ { BxGroupN, BX_IA_ERROR, BxOpcodeInfoMOV_CqRq }, + /* 0F 23 /d */ { BxTraceEnd, BX_IA_MOV_DqRq }, + /* 0F 24 /d */ { 0, BX_IA_ERROR }, + /* 0F 25 /d */ { 0, BX_IA_ERROR }, + /* 0F 26 /d */ { 0, BX_IA_ERROR }, + /* 0F 27 /d */ { 0, BX_IA_ERROR }, + /* 0F 28 /d */ { BxPrefixSSE, BX_IA_MOVAPS_VpsWps, BxOpcodeGroupSSE_0f28 }, + /* 0F 29 /d */ { BxPrefixSSE | BxArithDstRM, BX_IA_MOVAPS_WpsVps, BxOpcodeGroupSSE_0f29 }, + /* 0F 2A /d */ { BxPrefixSSE, BX_IA_CVTPI2PS_VpsQq, BxOpcodeGroupSSE_0f2a }, + /* 0F 2B /d */ { BxPrefixSSE, BX_IA_MOVNTPS_MpsVps, BxOpcodeGroupSSE_0f2bM }, + /* 0F 2C /d */ { BxPrefixSSE, BX_IA_CVTTPS2PI_PqWps, BxOpcodeGroupSSE_0f2c }, + /* 0F 2D /d */ { BxPrefixSSE, BX_IA_CVTPS2PI_PqWps, BxOpcodeGroupSSE_0f2d }, + /* 0F 2E /d */ { BxPrefixSSE, BX_IA_UCOMISS_VssWss, BxOpcodeGroupSSE_0f2e }, + /* 0F 2F /d */ { BxPrefixSSE, BX_IA_COMISS_VpsWps, BxOpcodeGroupSSE_0f2f }, + /* 0F 30 /d */ { 0, BX_IA_WRMSR }, + /* 0F 31 /d */ { 0, BX_IA_RDTSC }, + /* 0F 32 /d */ { 0, BX_IA_RDMSR }, + /* 0F 33 /d */ { 0, BX_IA_RDPMC }, + /* 0F 34 /d */ { BxTraceEnd, BX_IA_SYSENTER }, + /* 0F 35 /d */ { BxTraceEnd, BX_IA_SYSEXIT }, + /* 0F 36 /d */ { 0, BX_IA_ERROR }, + /* 0F 37 /d */ { 0, BX_IA_ERROR }, + /* 0F 38 /d */ { Bx3ByteOp, BX_IA_ERROR, BxOpcode3ByteTable0f38 }, // 3-byte escape + /* 0F 39 /d */ { 0, BX_IA_ERROR }, + /* 0F 3A /d */ { Bx3ByteOp | BxImmediate_Ib, BX_IA_ERROR, BxOpcode3ByteTable0f3a }, // 3-byte escape + /* 0F 3B /d */ { 0, BX_IA_ERROR }, + /* 0F 3C /d */ { 0, BX_IA_ERROR }, + /* 0F 3D /d */ { 0, BX_IA_ERROR }, + /* 0F 3E /d */ { 0, BX_IA_ERROR }, + /* 0F 3F /d */ { 0, BX_IA_ERROR }, + /* 0F 40 /d */ { 0, BX_IA_CMOVO_GdEd }, + /* 0F 41 /d */ { 0, BX_IA_CMOVNO_GdEd }, + /* 0F 42 /d */ { 0, BX_IA_CMOVB_GdEd }, + /* 0F 43 /d */ { 0, BX_IA_CMOVNB_GdEd }, + /* 0F 44 /d */ { 0, BX_IA_CMOVZ_GdEd }, + /* 0F 45 /d */ { 0, BX_IA_CMOVNZ_GdEd }, + /* 0F 46 /d */ { 0, BX_IA_CMOVBE_GdEd }, + /* 0F 47 /d */ { 0, BX_IA_CMOVNBE_GdEd }, + /* 0F 48 /d */ { 0, BX_IA_CMOVS_GdEd }, + /* 0F 49 /d */ { 0, BX_IA_CMOVNS_GdEd }, + /* 0F 4A /d */ { 0, BX_IA_CMOVP_GdEd }, + /* 0F 4B /d */ { 0, BX_IA_CMOVNP_GdEd }, + /* 0F 4C /d */ { 0, BX_IA_CMOVL_GdEd }, + /* 0F 4D /d */ { 0, BX_IA_CMOVNL_GdEd }, + /* 0F 4E /d */ { 0, BX_IA_CMOVLE_GdEd }, + /* 0F 4F /d */ { 0, BX_IA_CMOVNLE_GdEd }, + /* 0F 50 /d */ { BxPrefixSSE, BX_IA_MOVMSKPS_GdVRps, BxOpcodeGroupSSE_0f50R }, + /* 0F 51 /d */ { BxPrefixSSE, BX_IA_SQRTPS_VpsWps, BxOpcodeGroupSSE_0f51 }, + /* 0F 52 /d */ { BxPrefixSSE, BX_IA_RSQRTPS_VpsWps, BxOpcodeGroupSSE_0f52 }, + /* 0F 53 /d */ { BxPrefixSSE, BX_IA_RCPPS_VpsWps, BxOpcodeGroupSSE_0f53 }, + /* 0F 54 /d */ { BxPrefixSSE, BX_IA_ANDPS_VpsWps, BxOpcodeGroupSSE_0f54 }, + /* 0F 55 /d */ { BxPrefixSSE, BX_IA_ANDNPS_VpsWps, BxOpcodeGroupSSE_0f55 }, + /* 0F 56 /d */ { BxPrefixSSE, BX_IA_ORPS_VpsWps, BxOpcodeGroupSSE_0f56 }, + /* 0F 57 /d */ { BxPrefixSSE, BX_IA_XORPS_VpsWps, BxOpcodeGroupSSE_0f57 }, + /* 0F 58 /d */ { BxPrefixSSE, BX_IA_ADDPS_VpsWps, BxOpcodeGroupSSE_0f58 }, + /* 0F 59 /d */ { BxPrefixSSE, BX_IA_MULPS_VpsWps, BxOpcodeGroupSSE_0f59 }, + /* 0F 5A /d */ { BxPrefixSSE, BX_IA_CVTPS2PD_VpsWps, BxOpcodeGroupSSE_0f5a }, + /* 0F 5B /d */ { BxPrefixSSE, BX_IA_CVTDQ2PS_VpsWdq, BxOpcodeGroupSSE_0f5b }, + /* 0F 5C /d */ { BxPrefixSSE, BX_IA_SUBPS_VpsWps, BxOpcodeGroupSSE_0f5c }, + /* 0F 5D /d */ { BxPrefixSSE, BX_IA_MINPS_VpsWps, BxOpcodeGroupSSE_0f5d }, + /* 0F 5E /d */ { BxPrefixSSE, BX_IA_DIVPS_VpsWps, BxOpcodeGroupSSE_0f5e }, + /* 0F 5F /d */ { BxPrefixSSE, BX_IA_MAXPS_VpsWps, BxOpcodeGroupSSE_0f5f }, + /* 0F 60 /d */ { BxPrefixSSE, BX_IA_PUNPCKLBW_PqQd, BxOpcodeGroupSSE_0f60 }, + /* 0F 61 /d */ { BxPrefixSSE, BX_IA_PUNPCKLWD_PqQd, BxOpcodeGroupSSE_0f61 }, + /* 0F 62 /d */ { BxPrefixSSE, BX_IA_PUNPCKLDQ_PqQd, BxOpcodeGroupSSE_0f62 }, + /* 0F 63 /d */ { BxPrefixSSE, BX_IA_PACKSSWB_PqQq, BxOpcodeGroupSSE_0f63 }, + /* 0F 64 /d */ { BxPrefixSSE, BX_IA_PCMPGTB_PqQq, BxOpcodeGroupSSE_0f64 }, + /* 0F 65 /d */ { BxPrefixSSE, BX_IA_PCMPGTW_PqQq, BxOpcodeGroupSSE_0f65 }, + /* 0F 66 /d */ { BxPrefixSSE, BX_IA_PCMPGTD_PqQq, BxOpcodeGroupSSE_0f66 }, + /* 0F 67 /d */ { BxPrefixSSE, BX_IA_PACKUSWB_PqQq, BxOpcodeGroupSSE_0f67 }, + /* 0F 68 /d */ { BxPrefixSSE, BX_IA_PUNPCKHBW_PqQq, BxOpcodeGroupSSE_0f68 }, + /* 0F 69 /d */ { BxPrefixSSE, BX_IA_PUNPCKHWD_PqQq, BxOpcodeGroupSSE_0f69 }, + /* 0F 6A /d */ { BxPrefixSSE, BX_IA_PUNPCKHDQ_PqQq, BxOpcodeGroupSSE_0f6a }, + /* 0F 6B /d */ { BxPrefixSSE, BX_IA_PACKSSDW_PqQq, BxOpcodeGroupSSE_0f6b }, + /* 0F 6C /d */ { BxPrefixSSE66, BX_IA_PUNPCKLQDQ_VdqWdq }, + /* 0F 6D /d */ { BxPrefixSSE66, BX_IA_PUNPCKHQDQ_VdqWdq }, + /* 0F 6E /d */ { BxPrefixSSE, BX_IA_MOVD_PqEd, BxOpcodeGroupSSE_0f6e }, + /* 0F 6F /d */ { BxPrefixSSE, BX_IA_MOVQ_PqQq, BxOpcodeGroupSSE_0f6f }, + /* 0F 70 /d */ { BxPrefixSSE | BxImmediate_Ib, BX_IA_PSHUFW_PqQqIb, BxOpcodeGroupSSE_0f70 }, + /* 0F 71 /d */ { BxGroup12, BX_IA_ERROR, BxOpcodeInfoG12R }, + /* 0F 72 /d */ { BxGroup13, BX_IA_ERROR, BxOpcodeInfoG13R }, + /* 0F 73 /d */ { BxGroup14, BX_IA_ERROR, BxOpcodeInfoG14R }, + /* 0F 74 /d */ { BxPrefixSSE, BX_IA_PCMPEQB_PqQq, BxOpcodeGroupSSE_0f74 }, + /* 0F 75 /d */ { BxPrefixSSE, BX_IA_PCMPEQW_PqQq, BxOpcodeGroupSSE_0f75 }, + /* 0F 76 /d */ { BxPrefixSSE, BX_IA_PCMPEQD_PqQq, BxOpcodeGroupSSE_0f76 }, + /* 0F 77 /d */ { BxPrefixSSE, BX_IA_EMMS, BxOpcodeGroupSSE_ERR }, + /* 0F 78 /d */ { BxPrefixSSE, BX_IA_VMREAD_EqGq, BxOpcodeGroupSSE_ERR }, + /* 0F 79 /d */ { BxPrefixSSE, BX_IA_VMWRITE_GqEq, BxOpcodeGroupSSE_ERR }, + /* 0F 7A /d */ { 0, BX_IA_ERROR }, + /* 0F 7B /d */ { 0, BX_IA_ERROR }, + /* 0F 7C /d */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f7c }, + /* 0F 7D /d */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f7d }, + /* 0F 7E /d */ { BxPrefixSSE, BX_IA_MOVD_EdPd, BxOpcodeGroupSSE_0f7e }, + /* 0F 7F /d */ { BxPrefixSSE, BX_IA_MOVQ_QqPq, BxOpcodeGroupSSE_0f7f }, + /* 0F 80 /d */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JO_Jq }, + /* 0F 81 /d */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNO_Jq }, + /* 0F 82 /d */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JB_Jq }, + /* 0F 83 /d */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNB_Jq }, + /* 0F 84 /d */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JZ_Jq }, + /* 0F 85 /d */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNZ_Jq }, + /* 0F 86 /d */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JBE_Jq }, + /* 0F 87 /d */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNBE_Jq }, + /* 0F 88 /d */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JS_Jq }, + /* 0F 89 /d */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNS_Jq }, + /* 0F 8A /d */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JP_Jq }, + /* 0F 8B /d */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNP_Jq }, + /* 0F 8C /d */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JL_Jq }, + /* 0F 8D /d */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNL_Jq }, + /* 0F 8E /d */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JLE_Jq }, + /* 0F 8F /d */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNLE_Jq }, + /* 0F 90 /d */ { 0, BX_IA_SETO_Eb }, + /* 0F 91 /d */ { 0, BX_IA_SETNO_Eb }, + /* 0F 92 /d */ { 0, BX_IA_SETB_Eb }, + /* 0F 93 /d */ { 0, BX_IA_SETNB_Eb }, + /* 0F 94 /d */ { 0, BX_IA_SETZ_Eb }, + /* 0F 95 /d */ { 0, BX_IA_SETNZ_Eb }, + /* 0F 96 /d */ { 0, BX_IA_SETBE_Eb }, + /* 0F 97 /d */ { 0, BX_IA_SETNBE_Eb }, + /* 0F 98 /d */ { 0, BX_IA_SETS_Eb }, + /* 0F 99 /d */ { 0, BX_IA_SETNS_Eb }, + /* 0F 9A /d */ { 0, BX_IA_SETP_Eb }, + /* 0F 9B /d */ { 0, BX_IA_SETNP_Eb }, + /* 0F 9C /d */ { 0, BX_IA_SETL_Eb }, + /* 0F 9D /d */ { 0, BX_IA_SETNL_Eb }, + /* 0F 9E /d */ { 0, BX_IA_SETLE_Eb }, + /* 0F 9F /d */ { 0, BX_IA_SETNLE_Eb }, + /* 0F A0 /d */ { 0, BX_IA_PUSH64_FS }, + /* 0F A1 /d */ { 0, BX_IA_POP64_FS }, + /* 0F A2 /d */ { 0, BX_IA_CPUID }, + /* 0F A3 /d */ { 0, BX_IA_BT_EdGd }, + /* 0F A4 /d */ { BxImmediate_Ib, BX_IA_SHLD_EdGd }, + /* 0F A5 /d */ { 0, BX_IA_SHLD_EdGd }, + /* 0F A6 /d */ { 0, BX_IA_ERROR }, + /* 0F A7 /d */ { 0, BX_IA_ERROR }, + /* 0F A8 /d */ { 0, BX_IA_PUSH64_GS }, + /* 0F A9 /d */ { 0, BX_IA_POP64_GS }, + /* 0F AA /d */ { BxTraceEnd, BX_IA_RSM }, + /* 0F AB /d */ { BxLockable, BX_IA_BTS_EdGd }, + /* 0F AC /d */ { BxImmediate_Ib, BX_IA_SHRD_EdGd }, + /* 0F AD /d */ { 0, BX_IA_SHRD_EdGd }, + /* 0F AE /d */ { BxGroup15, BX_IA_ERROR, BxOpcodeInfoG15q }, + /* 0F AF /d */ { 0, BX_IA_IMUL_GdEd }, + /* 0F B0 /d */ { BxLockable, BX_IA_CMPXCHG_EbGb }, + /* 0F B1 /d */ { BxLockable, BX_IA_CMPXCHG_EdGd }, + /* 0F B2 /d */ { 0, BX_IA_LSS_GdMp }, + /* 0F B3 /d */ { BxLockable, BX_IA_BTR_EdGd }, + /* 0F B4 /d */ { 0, BX_IA_LFS_GdMp }, + /* 0F B5 /d */ { 0, BX_IA_LGS_GdMp }, + /* 0F B6 /d */ { 0, BX_IA_MOVZX_GdEb }, + /* 0F B7 /d */ { 0, BX_IA_MOVZX_GdEw }, + /* 0F B8 /d */ { BxPrefixSSEF3, BX_IA_POPCNT_GdEd }, + /* 0F B9 /d */ { BxTraceEnd, BX_IA_UD2B }, + /* 0F BA /d */ { BxGroup8, BX_IA_ERROR, BxOpcodeInfoG8EdIb }, + /* 0F BB /d */ { BxLockable, BX_IA_BTC_EdGd }, + /* 0F BC /d */ { 0, BX_IA_BSF_GdEd }, + /* 0F BD /d */ { 0, BX_IA_BSR_GdEd }, + /* 0F BE /d */ { 0, BX_IA_MOVSX_GdEb }, + /* 0F BF /d */ { 0, BX_IA_MOVSX_GdEw }, + /* 0F C0 /d */ { BxLockable, BX_IA_XADD_EbGb }, + /* 0F C1 /d */ { BxLockable, BX_IA_XADD_EdGd }, + /* 0F C2 /d */ { BxPrefixSSE | BxImmediate_Ib, BX_IA_CMPPS_VpsWpsIb, BxOpcodeGroupSSE_0fc2 }, + /* 0F C3 /d */ { BxPrefixSSE, BX_IA_MOVNTI_MdGd, BxOpcodeGroupSSE_ERR }, + /* 0F C4 /d */ { BxPrefixSSE | BxImmediate_Ib, BX_IA_PINSRW_PqEwIb, BxOpcodeGroupSSE_0fc4 }, + /* 0F C5 /d */ { BxPrefixSSE | BxImmediate_Ib, BX_IA_PEXTRW_GdPqIb, BxOpcodeGroupSSE_0fc5R }, + /* 0F C6 /d */ { BxPrefixSSE | BxImmediate_Ib, BX_IA_SHUFPS_VpsWpsIb, BxOpcodeGroupSSE_0fc6 }, + /* 0F C7 /d */ { BxGroup9, BX_IA_ERROR, BxOpcodeInfoG9M }, + /* 0F C8 /d */ { 0, BX_IA_BSWAP_ERX }, + /* 0F C9 /d */ { 0, BX_IA_BSWAP_ERX }, + /* 0F CA /d */ { 0, BX_IA_BSWAP_ERX }, + /* 0F CB /d */ { 0, BX_IA_BSWAP_ERX }, + /* 0F CC /d */ { 0, BX_IA_BSWAP_ERX }, + /* 0F CD /d */ { 0, BX_IA_BSWAP_ERX }, + /* 0F CE /d */ { 0, BX_IA_BSWAP_ERX }, + /* 0F CF /d */ { 0, BX_IA_BSWAP_ERX }, + /* 0F D0 /d */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0fd0 }, + /* 0F D1 /d */ { BxPrefixSSE, BX_IA_PSRLW_PqQq, BxOpcodeGroupSSE_0fd1 }, + /* 0F D2 /d */ { BxPrefixSSE, BX_IA_PSRLD_PqQq, BxOpcodeGroupSSE_0fd2 }, + /* 0F D3 /d */ { BxPrefixSSE, BX_IA_PSRLQ_PqQq, BxOpcodeGroupSSE_0fd3 }, + /* 0F D4 /d */ { BxPrefixSSE, BX_IA_PADDQ_PqQq, BxOpcodeGroupSSE_0fd4 }, + /* 0F D5 /d */ { BxPrefixSSE, BX_IA_PMULLW_PqQq, BxOpcodeGroupSSE_0fd5 }, + /* 0F D6 /d */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0fd6 }, + /* 0F D7 /d */ { BxPrefixSSE, BX_IA_PMOVMSKB_GdPRq, BxOpcodeGroupSSE_0fd7R }, + /* 0F D8 /d */ { BxPrefixSSE, BX_IA_PSUBUSB_PqQq, BxOpcodeGroupSSE_0fd8 }, + /* 0F D9 /d */ { BxPrefixSSE, BX_IA_PSUBUSW_PqQq, BxOpcodeGroupSSE_0fd9 }, + /* 0F DA /d */ { BxPrefixSSE, BX_IA_PMINUB_PqQq, BxOpcodeGroupSSE_0fda }, + /* 0F DB /d */ { BxPrefixSSE, BX_IA_PAND_PqQq, BxOpcodeGroupSSE_0fdb }, + /* 0F DC /d */ { BxPrefixSSE, BX_IA_PADDUSB_PqQq, BxOpcodeGroupSSE_0fdc }, + /* 0F DD /d */ { BxPrefixSSE, BX_IA_PADDUSW_PqQq, BxOpcodeGroupSSE_0fdd }, + /* 0F DE /d */ { BxPrefixSSE, BX_IA_PMAXUB_PqQq, BxOpcodeGroupSSE_0fde }, + /* 0F DF /d */ { BxPrefixSSE, BX_IA_PANDN_PqQq, BxOpcodeGroupSSE_0fdf }, + /* 0F E0 /d */ { BxPrefixSSE, BX_IA_PAVGB_PqQq, BxOpcodeGroupSSE_0fe0 }, + /* 0F E1 /d */ { BxPrefixSSE, BX_IA_PSRAW_PqQq, BxOpcodeGroupSSE_0fe1 }, + /* 0F E2 /d */ { BxPrefixSSE, BX_IA_PSRAD_PqQq, BxOpcodeGroupSSE_0fe2 }, + /* 0F E3 /d */ { BxPrefixSSE, BX_IA_PAVGW_PqQq, BxOpcodeGroupSSE_0fe3 }, + /* 0F E4 /d */ { BxPrefixSSE, BX_IA_PMULHUW_PqQq, BxOpcodeGroupSSE_0fe4 }, + /* 0F E5 /d */ { BxPrefixSSE, BX_IA_PMULHW_PqQq, BxOpcodeGroupSSE_0fe5 }, + /* 0F E6 /d */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0fe6 }, + /* 0F E7 /d */ { BxPrefixSSE, BX_IA_MOVNTQ_MqPq, BxOpcodeGroupSSE_0fe7M }, + /* 0F E8 /d */ { BxPrefixSSE, BX_IA_PSUBSB_PqQq, BxOpcodeGroupSSE_0fe8 }, + /* 0F E9 /d */ { BxPrefixSSE, BX_IA_PSUBSW_PqQq, BxOpcodeGroupSSE_0fe9 }, + /* 0F EA /d */ { BxPrefixSSE, BX_IA_PMINSW_PqQq, BxOpcodeGroupSSE_0fea }, + /* 0F EB /d */ { BxPrefixSSE, BX_IA_POR_PqQq, BxOpcodeGroupSSE_0feb }, + /* 0F EC /d */ { BxPrefixSSE, BX_IA_PADDSB_PqQq, BxOpcodeGroupSSE_0fec }, + /* 0F ED /d */ { BxPrefixSSE, BX_IA_PADDSW_PqQq, BxOpcodeGroupSSE_0fed }, + /* 0F EE /d */ { BxPrefixSSE, BX_IA_PMAXSW_PqQq, BxOpcodeGroupSSE_0fee }, + /* 0F EF /d */ { BxPrefixSSE, BX_IA_PXOR_PqQq, BxOpcodeGroupSSE_0fef }, + /* 0F F0 /d */ { BxPrefixSSEF2, BX_IA_LDDQU_VdqMdq }, + /* 0F F1 /d */ { BxPrefixSSE, BX_IA_PSLLW_PqQq, BxOpcodeGroupSSE_0ff1 }, + /* 0F F2 /d */ { BxPrefixSSE, BX_IA_PSLLD_PqQq, BxOpcodeGroupSSE_0ff2 }, + /* 0F F3 /d */ { BxPrefixSSE, BX_IA_PSLLQ_PqQq, BxOpcodeGroupSSE_0ff3 }, + /* 0F F4 /d */ { BxPrefixSSE, BX_IA_PMULUDQ_PqQq, BxOpcodeGroupSSE_0ff4 }, + /* 0F F5 /d */ { BxPrefixSSE, BX_IA_PMADDWD_PqQq, BxOpcodeGroupSSE_0ff5 }, + /* 0F F6 /d */ { BxPrefixSSE, BX_IA_PSADBW_PqQq, BxOpcodeGroupSSE_0ff6 }, + /* 0F F7 /d */ { BxPrefixSSE, BX_IA_MASKMOVQ_PqPRq, BxOpcodeGroupSSE_0ff7R }, + /* 0F F8 /d */ { BxPrefixSSE, BX_IA_PSUBB_PqQq, BxOpcodeGroupSSE_0ff8 }, + /* 0F F9 /d */ { BxPrefixSSE, BX_IA_PSUBW_PqQq, BxOpcodeGroupSSE_0ff9 }, + /* 0F FA /d */ { BxPrefixSSE, BX_IA_PSUBD_PqQq, BxOpcodeGroupSSE_0ffa }, + /* 0F FB /d */ { BxPrefixSSE, BX_IA_PSUBQ_PqQq, BxOpcodeGroupSSE_0ffb }, + /* 0F FC /d */ { BxPrefixSSE, BX_IA_PADDB_PqQq, BxOpcodeGroupSSE_0ffc }, + /* 0F FD /d */ { BxPrefixSSE, BX_IA_PADDW_PqQq, BxOpcodeGroupSSE_0ffd }, + /* 0F FE /d */ { BxPrefixSSE, BX_IA_PADDD_PqQq, BxOpcodeGroupSSE_0ffe }, + /* 0F FF /d */ { 0, BX_IA_ERROR }, - // 512 (/r) + 512 (/m) entries for 64bit mode - /* 00 /qr */ { BxArithDstRM, BX_IA_ADD_EbGb }, - /* 00 /qm */ { BxLockable, BX_IA_ADD_EbGb }, - /* 01 /qr */ { BxArithDstRM, BX_IA_ADD_EqGq }, - /* 01 /qm */ { BxLockable, BX_IA_ADD_EqGq }, - /* 02 /qr */ { 0, BX_IA_ADD_GbEb }, - /* 02 /qm */ { 0, BX_IA_ADD_GbEb }, - /* 03 /qr */ { 0, BX_IA_ADD_GqEq }, - /* 03 /qm */ { 0, BX_IA_ADD_GqEq }, - /* 04 /qr */ { BxImmediate_Ib, BX_IA_ADD_ALIb }, - /* 04 /qm */ { BxImmediate_Ib, BX_IA_ADD_ALIb }, - /* 05 /qr */ { BxImmediate_Id, BX_IA_ADD_RAXId }, - /* 05 /qm */ { BxImmediate_Id, BX_IA_ADD_RAXId }, - /* 06 /qr */ { 0, BX_IA_ERROR }, - /* 06 /qm */ { 0, BX_IA_ERROR }, - /* 07 /qr */ { 0, BX_IA_ERROR }, - /* 07 /qm */ { 0, BX_IA_ERROR }, - /* 08 /qr */ { BxArithDstRM, BX_IA_OR_EbGb }, - /* 08 /qm */ { BxLockable, BX_IA_OR_EbGb }, - /* 09 /qr */ { BxArithDstRM, BX_IA_OR_EqGq }, - /* 09 /qm */ { BxLockable, BX_IA_OR_EqGq }, - /* 0A /qr */ { 0, BX_IA_OR_GbEb }, - /* 0A /qm */ { 0, BX_IA_OR_GbEb }, - /* 0B /qr */ { 0, BX_IA_OR_GqEq }, - /* 0B /qm */ { 0, BX_IA_OR_GqEq }, - /* 0C /qr */ { BxImmediate_Ib, BX_IA_OR_ALIb }, - /* 0C /qm */ { BxImmediate_Ib, BX_IA_OR_ALIb }, - /* 0D /qr */ { BxImmediate_Id, BX_IA_OR_RAXId }, - /* 0D /qm */ { BxImmediate_Id, BX_IA_OR_RAXId }, - /* 0E /qr */ { 0, BX_IA_ERROR }, - /* 0E /qm */ { 0, BX_IA_ERROR }, - /* 0F /qr */ { 0, BX_IA_ERROR }, // 2-byte escape - /* 0F /qm */ { 0, BX_IA_ERROR }, // 2-byte escape - /* 10 /qr */ { BxArithDstRM, BX_IA_ADC_EbGb }, - /* 10 /qm */ { BxLockable, BX_IA_ADC_EbGb }, - /* 11 /qr */ { BxArithDstRM, BX_IA_ADC_EqGq }, - /* 11 /qm */ { BxLockable, BX_IA_ADC_EqGq }, - /* 12 /qr */ { 0, BX_IA_ADC_GbEb }, - /* 12 /qm */ { 0, BX_IA_ADC_GbEb }, - /* 13 /qr */ { 0, BX_IA_ADC_GqEq }, - /* 13 /qm */ { 0, BX_IA_ADC_GqEq }, - /* 14 /qr */ { BxImmediate_Ib, BX_IA_ADC_ALIb }, - /* 14 /qm */ { BxImmediate_Ib, BX_IA_ADC_ALIb }, - /* 15 /qr */ { BxImmediate_Id, BX_IA_ADC_RAXId }, - /* 15 /qm */ { BxImmediate_Id, BX_IA_ADC_RAXId }, - /* 16 /qr */ { 0, BX_IA_ERROR }, - /* 16 /qm */ { 0, BX_IA_ERROR }, - /* 17 /qr */ { 0, BX_IA_ERROR }, - /* 17 /qm */ { 0, BX_IA_ERROR }, - /* 18 /qr */ { BxArithDstRM, BX_IA_SBB_EbGb }, - /* 18 /qm */ { BxLockable, BX_IA_SBB_EbGb }, - /* 19 /qr */ { BxArithDstRM, BX_IA_SBB_EqGq }, - /* 19 /qm */ { BxLockable, BX_IA_SBB_EqGq }, - /* 1A /qr */ { 0, BX_IA_SBB_GbEb }, - /* 1A /qm */ { 0, BX_IA_SBB_GbEb }, - /* 1B /qr */ { 0, BX_IA_SBB_GqEq }, - /* 1B /qm */ { 0, BX_IA_SBB_GqEq }, - /* 1C /qr */ { BxImmediate_Ib, BX_IA_SBB_ALIb }, - /* 1C /qm */ { BxImmediate_Ib, BX_IA_SBB_ALIb }, - /* 1D /qr */ { BxImmediate_Id, BX_IA_SBB_RAXId }, - /* 1D /qm */ { BxImmediate_Id, BX_IA_SBB_RAXId }, - /* 1E /qr */ { 0, BX_IA_ERROR }, - /* 1E /qm */ { 0, BX_IA_ERROR }, - /* 1F /qr */ { 0, BX_IA_ERROR }, - /* 1F /qm */ { 0, BX_IA_ERROR }, - /* 20 /qr */ { BxArithDstRM, BX_IA_AND_EbGb }, - /* 20 /qm */ { BxLockable, BX_IA_AND_EbGb }, - /* 21 /qr */ { BxArithDstRM, BX_IA_AND_EqGq }, - /* 21 /qm */ { BxLockable, BX_IA_AND_EqGq }, - /* 22 /qr */ { 0, BX_IA_AND_GbEb }, - /* 22 /qm */ { 0, BX_IA_AND_GbEb }, - /* 23 /qr */ { 0, BX_IA_AND_GqEq }, - /* 23 /qm */ { 0, BX_IA_AND_GqEq }, - /* 24 /qr */ { BxImmediate_Ib, BX_IA_AND_ALIb }, - /* 24 /qm */ { BxImmediate_Ib, BX_IA_AND_ALIb }, - /* 25 /qr */ { BxImmediate_Id, BX_IA_AND_RAXId }, - /* 25 /qm */ { BxImmediate_Id, BX_IA_AND_RAXId }, - /* 26 /qr */ { 0, BX_IA_ERROR }, // ES: - /* 26 /qm */ { 0, BX_IA_ERROR }, // ES: - /* 27 /qr */ { 0, BX_IA_ERROR }, - /* 27 /qm */ { 0, BX_IA_ERROR }, - /* 28 /qr */ { BxArithDstRM, BX_IA_SUB_EbGb }, - /* 28 /qm */ { BxLockable, BX_IA_SUB_EbGb }, - /* 29 /qr */ { BxArithDstRM, BX_IA_SUB_EqGq }, - /* 29 /qm */ { BxLockable, BX_IA_SUB_EqGq }, - /* 2A /qr */ { 0, BX_IA_SUB_GbEb }, - /* 2A /qm */ { 0, BX_IA_SUB_GbEb }, - /* 2B /qr */ { 0, BX_IA_SUB_GqEq }, - /* 2B /qm */ { 0, BX_IA_SUB_GqEq }, - /* 2C /qr */ { BxImmediate_Ib, BX_IA_SUB_ALIb }, - /* 2C /qm */ { BxImmediate_Ib, BX_IA_SUB_ALIb }, - /* 2D /qr */ { BxImmediate_Id, BX_IA_SUB_RAXId }, - /* 2D /qm */ { BxImmediate_Id, BX_IA_SUB_RAXId }, - /* 2E /qr */ { 0, BX_IA_ERROR }, // CS: - /* 2E /qm */ { 0, BX_IA_ERROR }, // CS: - /* 2F /qr */ { 0, BX_IA_ERROR }, - /* 2F /qm */ { 0, BX_IA_ERROR }, - /* 30 /qr */ { BxArithDstRM, BX_IA_XOR_EbGb }, - /* 30 /qm */ { BxLockable, BX_IA_XOR_EbGb }, - /* 31 /qr */ { BxArithDstRM, BX_IA_XOR_EqGq }, - /* 31 /qm */ { BxLockable, BX_IA_XOR_EqGq }, - /* 32 /qr */ { 0, BX_IA_XOR_GbEb }, - /* 32 /qm */ { 0, BX_IA_XOR_GbEb }, - /* 33 /qr */ { 0, BX_IA_XOR_GqEq }, - /* 33 /qm */ { 0, BX_IA_XOR_GqEq }, - /* 34 /qr */ { BxImmediate_Ib, BX_IA_XOR_ALIb }, - /* 34 /qm */ { BxImmediate_Ib, BX_IA_XOR_ALIb }, - /* 35 /qr */ { BxImmediate_Id, BX_IA_XOR_RAXId }, - /* 35 /qm */ { BxImmediate_Id, BX_IA_XOR_RAXId }, - /* 36 /qr */ { 0, BX_IA_ERROR }, // SS: - /* 36 /qm */ { 0, BX_IA_ERROR }, // SS: - /* 37 /qr */ { 0, BX_IA_ERROR }, - /* 37 /qm */ { 0, BX_IA_ERROR }, - /* 38 /qr */ { BxArithDstRM, BX_IA_CMP_EbGb }, - /* 38 /qm */ { 0, BX_IA_CMP_EbGb }, - /* 39 /qr */ { BxArithDstRM, BX_IA_CMP_EqGq }, - /* 39 /qm */ { 0, BX_IA_CMP_EqGq }, - /* 3A /qr */ { 0, BX_IA_CMP_GbEb }, - /* 3A /qm */ { 0, BX_IA_CMP_GbEb }, - /* 3B /qr */ { 0, BX_IA_CMP_GqEq }, - /* 3B /qm */ { 0, BX_IA_CMP_GqEq }, - /* 3C /qr */ { BxImmediate_Ib, BX_IA_CMP_ALIb }, - /* 3C /qm */ { BxImmediate_Ib, BX_IA_CMP_ALIb }, - /* 3D /qr */ { BxImmediate_Id, BX_IA_CMP_RAXId }, - /* 3D /qm */ { BxImmediate_Id, BX_IA_CMP_RAXId }, - /* 3E /qr */ { 0, BX_IA_ERROR }, // DS: - /* 3E /qm */ { 0, BX_IA_ERROR }, // DS: - /* 3F /qr */ { 0, BX_IA_ERROR }, - /* 3F /qm */ { 0, BX_IA_ERROR }, - /* 40 /qr */ { 0, BX_IA_ERROR }, // REX: - /* 40 /qm */ { 0, BX_IA_ERROR }, // REX: - /* 41 /qr */ { 0, BX_IA_ERROR }, // REX: - /* 41 /qm */ { 0, BX_IA_ERROR }, // REX: - /* 42 /qr */ { 0, BX_IA_ERROR }, // REX: - /* 42 /qm */ { 0, BX_IA_ERROR }, // REX: - /* 43 /qr */ { 0, BX_IA_ERROR }, // REX: - /* 43 /qm */ { 0, BX_IA_ERROR }, // REX: - /* 44 /qr */ { 0, BX_IA_ERROR }, // REX: - /* 44 /qm */ { 0, BX_IA_ERROR }, // REX: - /* 45 /qr */ { 0, BX_IA_ERROR }, // REX: - /* 45 /qm */ { 0, BX_IA_ERROR }, // REX: - /* 46 /qr */ { 0, BX_IA_ERROR }, // REX: - /* 46 /qm */ { 0, BX_IA_ERROR }, // REX: - /* 47 /qr */ { 0, BX_IA_ERROR }, // REX: - /* 47 /qm */ { 0, BX_IA_ERROR }, // REX: - /* 48 /qr */ { 0, BX_IA_ERROR }, // REX: - /* 48 /qm */ { 0, BX_IA_ERROR }, // REX: - /* 49 /qr */ { 0, BX_IA_ERROR }, // REX: - /* 49 /qm */ { 0, BX_IA_ERROR }, // REX: - /* 4A /qr */ { 0, BX_IA_ERROR }, // REX: - /* 4A /qm */ { 0, BX_IA_ERROR }, // REX: - /* 4B /qr */ { 0, BX_IA_ERROR }, // REX: - /* 4B /qm */ { 0, BX_IA_ERROR }, // REX: - /* 4C /qr */ { 0, BX_IA_ERROR }, // REX: - /* 4C /qm */ { 0, BX_IA_ERROR }, // REX: - /* 4D /qr */ { 0, BX_IA_ERROR }, // REX: - /* 4D /qm */ { 0, BX_IA_ERROR }, // REX: - /* 4E /qr */ { 0, BX_IA_ERROR }, // REX: - /* 4E /qm */ { 0, BX_IA_ERROR }, // REX: - /* 4F /qr */ { 0, BX_IA_ERROR }, // REX: - /* 4F /qm */ { 0, BX_IA_ERROR }, // REX: - /* 50 /qr */ { 0, BX_IA_PUSH_RRX }, - /* 50 /qm */ { 0, BX_IA_PUSH_RRX }, - /* 51 /qr */ { 0, BX_IA_PUSH_RRX }, - /* 51 /qm */ { 0, BX_IA_PUSH_RRX }, - /* 52 /qr */ { 0, BX_IA_PUSH_RRX }, - /* 52 /qm */ { 0, BX_IA_PUSH_RRX }, - /* 53 /qr */ { 0, BX_IA_PUSH_RRX }, - /* 53 /qm */ { 0, BX_IA_PUSH_RRX }, - /* 54 /qr */ { 0, BX_IA_PUSH_RRX }, - /* 54 /qm */ { 0, BX_IA_PUSH_RRX }, - /* 55 /qr */ { 0, BX_IA_PUSH_RRX }, - /* 55 /qm */ { 0, BX_IA_PUSH_RRX }, - /* 56 /qr */ { 0, BX_IA_PUSH_RRX }, - /* 56 /qm */ { 0, BX_IA_PUSH_RRX }, - /* 57 /qr */ { 0, BX_IA_PUSH_RRX }, - /* 57 /qm */ { 0, BX_IA_PUSH_RRX }, - /* 58 /qr */ { 0, BX_IA_POP_RRX }, - /* 58 /qm */ { 0, BX_IA_POP_RRX }, - /* 59 /qr */ { 0, BX_IA_POP_RRX }, - /* 59 /qm */ { 0, BX_IA_POP_RRX }, - /* 5A /qr */ { 0, BX_IA_POP_RRX }, - /* 5A /qm */ { 0, BX_IA_POP_RRX }, - /* 5B /qr */ { 0, BX_IA_POP_RRX }, - /* 5B /qm */ { 0, BX_IA_POP_RRX }, - /* 5C /qr */ { 0, BX_IA_POP_RRX }, - /* 5C /qm */ { 0, BX_IA_POP_RRX }, - /* 5D /qr */ { 0, BX_IA_POP_RRX }, - /* 5D /qm */ { 0, BX_IA_POP_RRX }, - /* 5E /qr */ { 0, BX_IA_POP_RRX }, - /* 5E /qm */ { 0, BX_IA_POP_RRX }, - /* 5F /qr */ { 0, BX_IA_POP_RRX }, - /* 5F /qm */ { 0, BX_IA_POP_RRX }, - /* 60 /qr */ { 0, BX_IA_ERROR }, - /* 60 /qm */ { 0, BX_IA_ERROR }, - /* 61 /qr */ { 0, BX_IA_ERROR }, - /* 61 /qm */ { 0, BX_IA_ERROR }, - /* 62 /qr */ { 0, BX_IA_ERROR }, - /* 62 /qm */ { 0, BX_IA_ERROR }, - /* 63 /qr */ { 0, BX_IA_MOVSX_GqEd }, - /* 63 /qm */ { 0, BX_IA_MOVSX_GqEd }, - /* 64 /qr */ { 0, BX_IA_ERROR }, // FS: - /* 64 /qm */ { 0, BX_IA_ERROR }, // FS: - /* 65 /qr */ { 0, BX_IA_ERROR }, // GS: - /* 65 /qm */ { 0, BX_IA_ERROR }, // GS: - /* 66 /qr */ { 0, BX_IA_ERROR }, // OS: - /* 66 /qm */ { 0, BX_IA_ERROR }, // OS: - /* 67 /qr */ { 0, BX_IA_ERROR }, // AS: - /* 67 /qm */ { 0, BX_IA_ERROR }, // AS: - /* 68 /qr */ { BxImmediate_Id, BX_IA_PUSH64_Id }, - /* 68 /qm */ { BxImmediate_Id, BX_IA_PUSH64_Id }, - /* 69 /qr */ { BxImmediate_Id, BX_IA_IMUL_GqEqId }, - /* 69 /qm */ { BxImmediate_Id, BX_IA_IMUL_GqEqId }, - /* 6A /qr */ { BxImmediate_Ib_SE, BX_IA_PUSH64_Id }, - /* 6A /qm */ { BxImmediate_Ib_SE, BX_IA_PUSH64_Id }, - /* 6B /qr */ { BxImmediate_Ib_SE, BX_IA_IMUL_GqEqId }, - /* 6B /qm */ { BxImmediate_Ib_SE, BX_IA_IMUL_GqEqId }, - /* 6C /qr */ { 0, BX_IA_REP_INSB_YbDX }, - /* 6C /qm */ { 0, BX_IA_REP_INSB_YbDX }, - /* 6D /qr */ { 0, BX_IA_REP_INSD_YdDX }, - /* 6D /qm */ { 0, BX_IA_REP_INSD_YdDX }, - /* 6E /qr */ { 0, BX_IA_REP_OUTSB_DXXb }, - /* 6E /qm */ { 0, BX_IA_REP_OUTSB_DXXb }, - /* 6F /qr */ { 0, BX_IA_REP_OUTSD_DXXd }, - /* 6F /qm */ { 0, BX_IA_REP_OUTSD_DXXd }, - /* 70 /qr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JO_Jq }, - /* 70 /qm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JO_Jq }, - /* 71 /qr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNO_Jq }, - /* 71 /qm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNO_Jq }, - /* 72 /qr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JB_Jq }, - /* 72 /qm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JB_Jq }, - /* 73 /qr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNB_Jq }, - /* 73 /qm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNB_Jq }, - /* 74 /qr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JZ_Jq }, - /* 74 /qm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JZ_Jq }, - /* 75 /qr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNZ_Jq }, - /* 75 /qm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNZ_Jq }, - /* 76 /qr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JBE_Jq }, - /* 76 /qm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JBE_Jq }, - /* 77 /qr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNBE_Jq }, - /* 77 /qm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNBE_Jq }, - /* 78 /qr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JS_Jq }, - /* 78 /qm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JS_Jq }, - /* 79 /qr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNS_Jq }, - /* 79 /qm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNS_Jq }, - /* 7A /qr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JP_Jq }, - /* 7A /qm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JP_Jq }, - /* 7B /qr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNP_Jq }, - /* 7B /qm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNP_Jq }, - /* 7C /qr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JL_Jq }, - /* 7C /qm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JL_Jq }, - /* 7D /qr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNL_Jq }, - /* 7D /qm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNL_Jq }, - /* 7E /qr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JLE_Jq }, - /* 7E /qm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JLE_Jq }, - /* 7F /qr */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNLE_Jq }, - /* 7F /qm */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNLE_Jq }, - /* 80 /qr */ { BxGroup1 | BxImmediate_Ib, BX_IA_ERROR, BxOpcodeInfoG1EbIb }, - /* 80 /qm */ { BxGroup1 | BxImmediate_Ib, BX_IA_ERROR, BxOpcodeInfoG1EbIb }, - /* 81 /qr */ { BxGroup1 | BxImmediate_Id, BX_IA_ERROR, BxOpcodeInfo64G1Eq }, - /* 81 /qm */ { BxGroup1 | BxImmediate_Id, BX_IA_ERROR, BxOpcodeInfo64G1Eq }, - /* 82 /qr */ { 0, BX_IA_ERROR }, - /* 82 /qm */ { 0, BX_IA_ERROR }, - /* 83 /qr */ { BxGroup1 | BxImmediate_Ib_SE, BX_IA_ERROR, BxOpcodeInfo64G1Eq }, - /* 83 /qm */ { BxGroup1 | BxImmediate_Ib_SE, BX_IA_ERROR, BxOpcodeInfo64G1Eq }, - /* 84 /qr */ { 0, BX_IA_TEST_EbGb }, - /* 84 /qm */ { 0, BX_IA_TEST_EbGb }, - /* 85 /qr */ { 0, BX_IA_TEST_EqGq }, - /* 85 /qm */ { 0, BX_IA_TEST_EqGq }, - /* 86 /qr */ { 0, BX_IA_XCHG_EbGb }, - /* 86 /qm */ { BxLockable, BX_IA_XCHG_EbGb }, - /* 87 /qr */ { 0, BX_IA_XCHG_EqGq }, - /* 87 /qm */ { BxLockable, BX_IA_XCHG_EqGq }, - /* 88 /qr */ { BxArithDstRM, BX_IA_MOV_GbEbR }, - /* 88 /qm */ { 0, BX_IA_MOV_EbGbM }, - /* 89 /qr */ { BxArithDstRM, BX_IA_MOV_GqEqR }, - /* 89 /qm */ { 0, BX_IA_MOV_EqGqM }, - /* 8A /qr */ { 0, BX_IA_MOV_GbEbR }, - /* 8A /qm */ { 0, BX_IA_MOV_GbEbM }, - /* 8B /qr */ { 0, BX_IA_MOV_GqEqR }, - /* 8B /qm */ { 0, BX_IA_MOV_GqEqM }, - /* 8C /qr */ { 0, BX_IA_MOV_EwSwR }, - /* 8C /qm */ { 0, BX_IA_MOV_EwSwM }, - /* 8D /qr */ { 0, BX_IA_ERROR }, // LEA - /* 8D /qm */ { 0, BX_IA_LEA_GqM }, - /* 8E /qr */ { 0, BX_IA_MOV_SwEw }, - /* 8E /qm */ { 0, BX_IA_MOV_SwEw }, - /* 8F /qr */ { BxGroup1A, BX_IA_ERROR, BxOpcodeInfo64G1AEq }, - /* 8F /qm */ { BxGroup1A, BX_IA_ERROR, BxOpcodeInfo64G1AEq }, - /* 90 /qr */ { 0, BX_IA_XCHG_RRXRAX }, // handles XCHG R8, RAX - /* 90 /qm */ { 0, BX_IA_XCHG_RRXRAX }, // handles XCHG R8, RAX - /* 91 /qr */ { 0, BX_IA_XCHG_RRXRAX }, - /* 91 /qm */ { 0, BX_IA_XCHG_RRXRAX }, - /* 92 /qr */ { 0, BX_IA_XCHG_RRXRAX }, - /* 92 /qm */ { 0, BX_IA_XCHG_RRXRAX }, - /* 93 /qr */ { 0, BX_IA_XCHG_RRXRAX }, - /* 93 /qm */ { 0, BX_IA_XCHG_RRXRAX }, - /* 94 /qr */ { 0, BX_IA_XCHG_RRXRAX }, - /* 94 /qm */ { 0, BX_IA_XCHG_RRXRAX }, - /* 95 /qr */ { 0, BX_IA_XCHG_RRXRAX }, - /* 95 /qm */ { 0, BX_IA_XCHG_RRXRAX }, - /* 96 /qr */ { 0, BX_IA_XCHG_RRXRAX }, - /* 96 /qm */ { 0, BX_IA_XCHG_RRXRAX }, - /* 97 /qr */ { 0, BX_IA_XCHG_RRXRAX }, - /* 97 /qm */ { 0, BX_IA_XCHG_RRXRAX }, - /* 98 /qr */ { 0, BX_IA_CDQE }, - /* 98 /qm */ { 0, BX_IA_CDQE }, - /* 99 /qr */ { 0, BX_IA_CQO }, - /* 99 /qm */ { 0, BX_IA_CQO }, - /* 9A /qr */ { 0, BX_IA_ERROR }, - /* 9A /qm */ { 0, BX_IA_ERROR }, - /* 9B /qr */ { 0, BX_IA_FWAIT }, - /* 9B /qm */ { 0, BX_IA_FWAIT }, - /* 9C /qr */ { 0, BX_IA_PUSHF_Fq }, - /* 9C /qm */ { 0, BX_IA_PUSHF_Fq }, - /* 9D /qr */ { 0, BX_IA_POPF_Fq }, - /* 9D /qm */ { 0, BX_IA_POPF_Fq }, - /* 9E /qr */ { 0, BX_IA_SAHF }, - /* 9E /qm */ { 0, BX_IA_SAHF }, - /* 9F /qr */ { 0, BX_IA_LAHF }, - /* 9F /qm */ { 0, BX_IA_LAHF }, - /* A0 /qr */ { BxImmediate_O, BX_IA_MOV_ALOq }, - /* A0 /qm */ { BxImmediate_O, BX_IA_MOV_ALOq }, - /* A1 /qr */ { BxImmediate_O, BX_IA_MOV_RAXOq }, - /* A1 /qm */ { BxImmediate_O, BX_IA_MOV_RAXOq }, - /* A2 /qr */ { BxImmediate_O, BX_IA_MOV_OqAL }, - /* A2 /qm */ { BxImmediate_O, BX_IA_MOV_OqAL }, - /* A3 /qr */ { BxImmediate_O, BX_IA_MOV_OqRAX }, - /* A3 /qm */ { BxImmediate_O, BX_IA_MOV_OqRAX }, - /* A4 /qr */ { 0, BX_IA_REP_MOVSB_XbYb }, - /* A4 /qm */ { 0, BX_IA_REP_MOVSB_XbYb }, - /* A5 /qr */ { 0, BX_IA_REP_MOVSQ_XqYq }, - /* A5 /qm */ { 0, BX_IA_REP_MOVSQ_XqYq }, - /* A6 /qr */ { 0, BX_IA_REP_CMPSB_XbYb }, - /* A6 /qm */ { 0, BX_IA_REP_CMPSB_XbYb }, - /* A7 /qr */ { 0, BX_IA_REP_CMPSQ_XqYq }, - /* A7 /qm */ { 0, BX_IA_REP_CMPSQ_XqYq }, - /* A8 /qr */ { BxImmediate_Ib, BX_IA_TEST_ALIb }, - /* A8 /qm */ { BxImmediate_Ib, BX_IA_TEST_ALIb }, - /* A9 /qr */ { BxImmediate_Id, BX_IA_TEST_RAXId }, - /* A9 /qm */ { BxImmediate_Id, BX_IA_TEST_RAXId }, - /* AA /qr */ { 0, BX_IA_REP_STOSB_YbAL }, - /* AA /qm */ { 0, BX_IA_REP_STOSB_YbAL }, - /* AB /qr */ { 0, BX_IA_REP_STOSQ_YqRAX }, - /* AB /qm */ { 0, BX_IA_REP_STOSQ_YqRAX }, - /* AC /qr */ { 0, BX_IA_REP_LODSB_ALXb }, - /* AC /qm */ { 0, BX_IA_REP_LODSB_ALXb }, - /* AD /qr */ { 0, BX_IA_REP_LODSQ_RAXXq }, - /* AD /qm */ { 0, BX_IA_REP_LODSQ_RAXXq }, - /* AE /qr */ { 0, BX_IA_REP_SCASB_ALXb }, - /* AE /qm */ { 0, BX_IA_REP_SCASB_ALXb }, - /* AF /qr */ { 0, BX_IA_REP_SCASQ_RAXXq }, - /* AF /qm */ { 0, BX_IA_REP_SCASQ_RAXXq }, - /* B0 /qr */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, - /* B0 /qm */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, - /* B1 /qr */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, - /* B1 /qm */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, - /* B2 /qr */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, - /* B2 /qm */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, - /* B3 /qr */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, - /* B3 /qm */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, - /* B4 /qr */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, - /* B4 /qm */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, - /* B5 /qr */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, - /* B5 /qm */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, - /* B6 /qr */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, - /* B6 /qm */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, - /* B7 /qr */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, - /* B7 /qm */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, - /* B8 /qr */ { BxImmediate_Iq, BX_IA_MOV_RRXIq }, - /* B8 /qm */ { BxImmediate_Iq, BX_IA_MOV_RRXIq }, - /* B9 /qr */ { BxImmediate_Iq, BX_IA_MOV_RRXIq }, - /* B9 /qm */ { BxImmediate_Iq, BX_IA_MOV_RRXIq }, - /* BA /qr */ { BxImmediate_Iq, BX_IA_MOV_RRXIq }, - /* BA /qm */ { BxImmediate_Iq, BX_IA_MOV_RRXIq }, - /* BB /qr */ { BxImmediate_Iq, BX_IA_MOV_RRXIq }, - /* BB /qm */ { BxImmediate_Iq, BX_IA_MOV_RRXIq }, - /* BC /qr */ { BxImmediate_Iq, BX_IA_MOV_RRXIq }, - /* BC /qm */ { BxImmediate_Iq, BX_IA_MOV_RRXIq }, - /* BD /qr */ { BxImmediate_Iq, BX_IA_MOV_RRXIq }, - /* BD /qm */ { BxImmediate_Iq, BX_IA_MOV_RRXIq }, - /* BE /qr */ { BxImmediate_Iq, BX_IA_MOV_RRXIq }, - /* BE /qm */ { BxImmediate_Iq, BX_IA_MOV_RRXIq }, - /* BF /qr */ { BxImmediate_Iq, BX_IA_MOV_RRXIq }, - /* BF /qm */ { BxImmediate_Iq, BX_IA_MOV_RRXIq }, - /* C0 /qr */ { BxGroup2 | BxImmediate_Ib, BX_IA_ERROR, BxOpcodeInfoG2Eb }, - /* C0 /qm */ { BxGroup2 | BxImmediate_Ib, BX_IA_ERROR, BxOpcodeInfoG2Eb }, - /* C1 /qr */ { BxGroup2 | BxImmediate_Ib, BX_IA_ERROR, BxOpcodeInfo64G2Eq }, - /* C1 /qm */ { BxGroup2 | BxImmediate_Ib, BX_IA_ERROR, BxOpcodeInfo64G2Eq }, - /* C2 /qr */ { BxImmediate_Iw | BxTraceEnd, BX_IA_RETnear64_Iw }, - /* C2 /qm */ { BxImmediate_Iw | BxTraceEnd, BX_IA_RETnear64_Iw }, - /* C3 /qr */ { BxTraceEnd, BX_IA_RETnear64 }, - /* C3 /qm */ { BxTraceEnd, BX_IA_RETnear64 }, - /* C4 /qr */ { 0, BX_IA_ERROR }, - /* C4 /qm */ { 0, BX_IA_ERROR }, - /* C5 /qr */ { 0, BX_IA_ERROR }, - /* C5 /qm */ { 0, BX_IA_ERROR }, - /* C6 /qr */ { BxGroup11, BX_IA_ERROR, BxOpcodeInfoG11Eb }, - /* C6 /qm */ { BxGroup11, BX_IA_ERROR, BxOpcodeInfoG11Eb }, - /* C7 /qr */ { BxGroup11, BX_IA_ERROR, BxOpcodeInfo64G11Eq }, - /* C7 /qm */ { BxGroup11, BX_IA_ERROR, BxOpcodeInfo64G11Eq }, - /* C8 /qr */ { BxImmediate_Iw | BxImmediate_Ib2, BX_IA_ENTER64_IwIb }, - /* C8 /qm */ { BxImmediate_Iw | BxImmediate_Ib2, BX_IA_ENTER64_IwIb }, - /* C9 /qr */ { 0, BX_IA_LEAVE64 }, - /* C9 /qm */ { 0, BX_IA_LEAVE64 }, - /* CA /qr */ { BxImmediate_Iw | BxTraceEnd, BX_IA_RETfar64_Iw }, - /* CA /qm */ { BxImmediate_Iw | BxTraceEnd, BX_IA_RETfar64_Iw }, - /* CB /qr */ { BxTraceEnd, BX_IA_RETfar64 }, - /* CB /qm */ { BxTraceEnd, BX_IA_RETfar64 }, - /* CC /qr */ { BxTraceEnd, BX_IA_INT3 }, - /* CC /qm */ { BxTraceEnd, BX_IA_INT3 }, - /* CD /qr */ { BxImmediate_Ib | BxTraceEnd, BX_IA_INT_Ib }, - /* CD /qm */ { BxImmediate_Ib | BxTraceEnd, BX_IA_INT_Ib }, - /* CE /qr */ { 0, BX_IA_ERROR }, - /* CE /qm */ { 0, BX_IA_ERROR }, - /* CF /qr */ { BxTraceEnd, BX_IA_IRET64 }, - /* CF /qm */ { BxTraceEnd, BX_IA_IRET64 }, - /* D0 /qr */ { BxGroup2 | BxImmediate_I1, BX_IA_ERROR, BxOpcodeInfoG2Eb }, - /* D0 /qm */ { BxGroup2 | BxImmediate_I1, BX_IA_ERROR, BxOpcodeInfoG2Eb }, - /* D1 /qr */ { BxGroup2 | BxImmediate_I1, BX_IA_ERROR, BxOpcodeInfo64G2Eq }, - /* D1 /qm */ { BxGroup2 | BxImmediate_I1, BX_IA_ERROR, BxOpcodeInfo64G2Eq }, - /* D2 /qr */ { BxGroup2, BX_IA_ERROR, BxOpcodeInfoG2Eb }, - /* D2 /qm */ { BxGroup2, BX_IA_ERROR, BxOpcodeInfoG2Eb }, - /* D3 /qr */ { BxGroup2, BX_IA_ERROR, BxOpcodeInfo64G2Eq }, - /* D3 /qm */ { BxGroup2, BX_IA_ERROR, BxOpcodeInfo64G2Eq }, - /* D4 /qr */ { 0, BX_IA_ERROR }, - /* D4 /qm */ { 0, BX_IA_ERROR }, - /* D5 /qr */ { 0, BX_IA_ERROR }, - /* D5 /qm */ { 0, BX_IA_ERROR }, - /* D6 /qr */ { 0, BX_IA_ERROR }, - /* D6 /qm */ { 0, BX_IA_ERROR }, - /* D7 /qr */ { 0, BX_IA_XLAT }, - /* D7 /qm */ { 0, BX_IA_XLAT }, - /* D8 /qr */ { BxGroupN, BX_IA_ERROR, BxOpcodeInfo_FloatingPointD8 }, - /* D8 /qm */ { BxGroupFP, BX_IA_ERROR, BxOpcodeInfo_FPGroupD8 }, - /* D9 /qr */ { BxFPEscape, BX_IA_ERROR, BxOpcodeInfo_FloatingPointD9 }, - /* D9 /qm */ { BxGroupFP, BX_IA_ERROR, BxOpcodeInfo_FPGroupD9 }, - /* DA /qr */ { BxFPEscape, BX_IA_ERROR, BxOpcodeInfo_FloatingPointDA }, - /* DA /qm */ { BxGroupFP, BX_IA_ERROR, BxOpcodeInfo_FPGroupDA }, - /* DB /qr */ { BxFPEscape, BX_IA_ERROR, BxOpcodeInfo_FloatingPointDB }, - /* DB /qm */ { BxGroupFP, BX_IA_ERROR, BxOpcodeInfo_FPGroupDB }, - /* DC /qr */ { BxGroupN, BX_IA_ERROR, BxOpcodeInfo_FloatingPointDC }, - /* DC /qm */ { BxGroupFP, BX_IA_ERROR, BxOpcodeInfo_FPGroupDC }, - /* DD /qr */ { BxGroupN, BX_IA_ERROR, BxOpcodeInfo_FloatingPointDD }, - /* DD /qm */ { BxGroupFP, BX_IA_ERROR, BxOpcodeInfo_FPGroupDD }, - /* DE /qr */ { BxFPEscape, BX_IA_ERROR, BxOpcodeInfo_FloatingPointDE }, - /* DE /qm */ { BxGroupFP, BX_IA_ERROR, BxOpcodeInfo_FPGroupDE }, - /* DF /qr */ { BxFPEscape, BX_IA_ERROR, BxOpcodeInfo_FloatingPointDF }, - /* DF /qm */ { BxGroupFP, BX_IA_ERROR, BxOpcodeInfo_FPGroupDF }, - /* E0 /qr */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_LOOPNE64_Jb }, - /* E0 /qm */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_LOOPNE64_Jb }, - /* E1 /qr */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_LOOPE64_Jb }, - /* E1 /qm */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_LOOPE64_Jb }, - /* E2 /qr */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_LOOP64_Jb }, - /* E2 /qm */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_LOOP64_Jb }, - /* E3 /qr */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_JRCXZ_Jb }, - /* E3 /qm */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_JRCXZ_Jb }, - /* E4 /qr */ { BxImmediate_Ib, BX_IA_IN_ALIb }, - /* E4 /qm */ { BxImmediate_Ib, BX_IA_IN_ALIb }, - /* E5 /qr */ { BxImmediate_Ib, BX_IA_IN_EAXIb }, - /* E5 /qm */ { BxImmediate_Ib, BX_IA_IN_EAXIb }, - /* E6 /qr */ { BxImmediate_Ib, BX_IA_OUT_IbAL }, - /* E6 /qm */ { BxImmediate_Ib, BX_IA_OUT_IbAL }, - /* E7 /qr */ { BxImmediate_Ib, BX_IA_OUT_IbEAX }, - /* E7 /qm */ { BxImmediate_Ib, BX_IA_OUT_IbEAX }, - /* E8 /qr */ { BxImmediate_BrOff32 | BxTraceEnd, BX_IA_CALL_Jq }, - /* E8 /qm */ { BxImmediate_BrOff32 | BxTraceEnd, BX_IA_CALL_Jq }, - /* E9 /qr */ { BxImmediate_BrOff32 | BxTraceEnd, BX_IA_JMP_Jq }, - /* E9 /qm */ { BxImmediate_BrOff32 | BxTraceEnd, BX_IA_JMP_Jq }, - /* EA /qr */ { 0, BX_IA_ERROR }, - /* EA /qm */ { 0, BX_IA_ERROR }, - /* EB /qr */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_JMP_Jq }, - /* EB /qm */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_JMP_Jq }, - /* EC /qr */ { 0, BX_IA_IN_ALDX }, - /* EC /qm */ { 0, BX_IA_IN_ALDX }, - /* ED /qr */ { 0, BX_IA_IN_EAXDX }, - /* ED /qm */ { 0, BX_IA_IN_EAXDX }, - /* EE /qr */ { 0, BX_IA_OUT_DXAL }, - /* EE /qm */ { 0, BX_IA_OUT_DXAL }, - /* EF /qr */ { 0, BX_IA_OUT_DXEAX }, - /* EF /qm */ { 0, BX_IA_OUT_DXEAX }, - /* F0 /qr */ { 0, BX_IA_ERROR }, // LOCK: - /* F0 /qm */ { 0, BX_IA_ERROR }, // LOCK: - /* F1 /qr */ { BxTraceEnd, BX_IA_INT1 }, - /* F1 /qm */ { BxTraceEnd, BX_IA_INT1 }, - /* F2 /qr */ { 0, BX_IA_ERROR }, // REPNE/REPNZ - /* F2 /qm */ { 0, BX_IA_ERROR }, // REPNE/REPNZ - /* F3 /qr */ { 0, BX_IA_ERROR }, // REP,REPE/REPZ - /* F3 /qm */ { 0, BX_IA_ERROR }, // REP,REPE/REPZ - /* F4 /qr */ { BxTraceEnd, BX_IA_HLT }, - /* F4 /qm */ { BxTraceEnd, BX_IA_HLT }, - /* F5 /qr */ { 0, BX_IA_CMC }, - /* F5 /qm */ { 0, BX_IA_CMC }, - /* F6 /qr */ { BxGroup3, BX_IA_ERROR, BxOpcodeInfoG3Eb }, - /* F6 /qm */ { BxGroup3, BX_IA_ERROR, BxOpcodeInfoG3Eb }, - /* F7 /qr */ { BxGroup3, BX_IA_ERROR, BxOpcodeInfo64G3Eq }, - /* F7 /qm */ { BxGroup3, BX_IA_ERROR, BxOpcodeInfo64G3Eq }, - /* F8 /qr */ { 0, BX_IA_CLC }, - /* F8 /qm */ { 0, BX_IA_CLC }, - /* F9 /qr */ { 0, BX_IA_STC }, - /* F9 /qm */ { 0, BX_IA_STC }, - /* FA /qr */ { 0, BX_IA_CLI }, - /* FA /qm */ { 0, BX_IA_CLI }, - /* FB /qr */ { 0, BX_IA_STI }, - /* FB /qm */ { 0, BX_IA_STI }, - /* FC /qr */ { 0, BX_IA_CLD }, - /* FC /qm */ { 0, BX_IA_CLD }, - /* FD /qr */ { 0, BX_IA_STD }, - /* FD /qm */ { 0, BX_IA_STD }, - /* FE /qr */ { BxGroup4, BX_IA_ERROR, BxOpcodeInfoG4 }, - /* FE /qm */ { BxGroup4, BX_IA_ERROR, BxOpcodeInfoG4 }, - /* FF /qr */ { BxGroup5, BX_IA_ERROR, BxOpcodeInfo64G5q }, - /* FF /qm */ { BxGroup5, BX_IA_ERROR, BxOpcodeInfo64G5q }, + // 512 entries for 64bit mode + /* 00 /q */ { BxArithDstRM | BxLockable, BX_IA_ADD_EbGb }, + /* 01 /q */ { BxArithDstRM | BxLockable, BX_IA_ADD_EqGq }, + /* 02 /q */ { 0, BX_IA_ADD_GbEb }, + /* 03 /q */ { 0, BX_IA_ADD_GqEq }, + /* 04 /q */ { BxImmediate_Ib, BX_IA_ADD_ALIb }, + /* 05 /q */ { BxImmediate_Id, BX_IA_ADD_RAXId }, + /* 06 /q */ { 0, BX_IA_ERROR }, + /* 07 /q */ { 0, BX_IA_ERROR }, + /* 08 /q */ { BxArithDstRM | BxLockable, BX_IA_OR_EbGb }, + /* 09 /q */ { BxArithDstRM | BxLockable, BX_IA_OR_EqGq }, + /* 0A /q */ { 0, BX_IA_OR_GbEb }, + /* 0B /q */ { 0, BX_IA_OR_GqEq }, + /* 0C /q */ { BxImmediate_Ib, BX_IA_OR_ALIb }, + /* 0D /q */ { BxImmediate_Id, BX_IA_OR_RAXId }, + /* 0E /q */ { 0, BX_IA_ERROR }, + /* 0F /q */ { 0, BX_IA_ERROR }, // 2-byte escape + /* 10 /q */ { BxArithDstRM | BxLockable, BX_IA_ADC_EbGb }, + /* 11 /q */ { BxArithDstRM | BxLockable, BX_IA_ADC_EqGq }, + /* 12 /q */ { 0, BX_IA_ADC_GbEb }, + /* 13 /q */ { 0, BX_IA_ADC_GqEq }, + /* 14 /q */ { BxImmediate_Ib, BX_IA_ADC_ALIb }, + /* 15 /q */ { BxImmediate_Id, BX_IA_ADC_RAXId }, + /* 16 /q */ { 0, BX_IA_ERROR }, + /* 17 /q */ { 0, BX_IA_ERROR }, + /* 18 /q */ { BxArithDstRM | BxLockable, BX_IA_SBB_EbGb }, + /* 19 /q */ { BxArithDstRM | BxLockable, BX_IA_SBB_EqGq }, + /* 1A /q */ { 0, BX_IA_SBB_GbEb }, + /* 1B /q */ { 0, BX_IA_SBB_GqEq }, + /* 1C /q */ { BxImmediate_Ib, BX_IA_SBB_ALIb }, + /* 1D /q */ { BxImmediate_Id, BX_IA_SBB_RAXId }, + /* 1E /q */ { 0, BX_IA_ERROR }, + /* 1F /q */ { 0, BX_IA_ERROR }, + /* 20 /q */ { BxArithDstRM | BxLockable, BX_IA_AND_EbGb }, + /* 21 /q */ { BxArithDstRM | BxLockable, BX_IA_AND_EqGq }, + /* 22 /q */ { 0, BX_IA_AND_GbEb }, + /* 23 /q */ { 0, BX_IA_AND_GqEq }, + /* 24 /q */ { BxImmediate_Ib, BX_IA_AND_ALIb }, + /* 25 /q */ { BxImmediate_Id, BX_IA_AND_RAXId }, + /* 26 /q */ { 0, BX_IA_ERROR }, // ES: + /* 27 /q */ { 0, BX_IA_ERROR }, + /* 28 /q */ { BxArithDstRM | BxLockable, BX_IA_SUB_EbGb }, + /* 29 /q */ { BxArithDstRM | BxLockable, BX_IA_SUB_EqGq }, + /* 2A /q */ { 0, BX_IA_SUB_GbEb }, + /* 2B /q */ { 0, BX_IA_SUB_GqEq }, + /* 2C /q */ { BxImmediate_Ib, BX_IA_SUB_ALIb }, + /* 2D /q */ { BxImmediate_Id, BX_IA_SUB_RAXId }, + /* 2E /q */ { 0, BX_IA_ERROR }, // CS: + /* 2F /q */ { 0, BX_IA_ERROR }, + /* 30 /q */ { BxArithDstRM | BxLockable, BX_IA_XOR_EbGb }, + /* 31 /q */ { BxArithDstRM | BxLockable, BX_IA_XOR_EqGq }, + /* 32 /q */ { 0, BX_IA_XOR_GbEb }, + /* 33 /q */ { 0, BX_IA_XOR_GqEq }, + /* 34 /q */ { BxImmediate_Ib, BX_IA_XOR_ALIb }, + /* 35 /q */ { BxImmediate_Id, BX_IA_XOR_RAXId }, + /* 36 /q */ { 0, BX_IA_ERROR }, // SS: + /* 37 /q */ { 0, BX_IA_ERROR }, + /* 38 /q */ { BxArithDstRM, BX_IA_CMP_EbGb }, + /* 39 /q */ { BxArithDstRM, BX_IA_CMP_EqGq }, + /* 3A /q */ { 0, BX_IA_CMP_GbEb }, + /* 3B /q */ { 0, BX_IA_CMP_GqEq }, + /* 3C /q */ { BxImmediate_Ib, BX_IA_CMP_ALIb }, + /* 3D /q */ { BxImmediate_Id, BX_IA_CMP_RAXId }, + /* 3E /q */ { 0, BX_IA_ERROR }, // DS: + /* 3F /q */ { 0, BX_IA_ERROR }, + /* 40 /q */ { 0, BX_IA_ERROR }, // REX: + /* 41 /q */ { 0, BX_IA_ERROR }, // REX: + /* 42 /q */ { 0, BX_IA_ERROR }, // REX: + /* 43 /q */ { 0, BX_IA_ERROR }, // REX: + /* 44 /q */ { 0, BX_IA_ERROR }, // REX: + /* 45 /q */ { 0, BX_IA_ERROR }, // REX: + /* 46 /q */ { 0, BX_IA_ERROR }, // REX: + /* 47 /q */ { 0, BX_IA_ERROR }, // REX: + /* 48 /q */ { 0, BX_IA_ERROR }, // REX: + /* 49 /q */ { 0, BX_IA_ERROR }, // REX: + /* 4A /q */ { 0, BX_IA_ERROR }, // REX: + /* 4B /q */ { 0, BX_IA_ERROR }, // REX: + /* 4C /q */ { 0, BX_IA_ERROR }, // REX: + /* 4D /q */ { 0, BX_IA_ERROR }, // REX: + /* 4E /q */ { 0, BX_IA_ERROR }, // REX: + /* 4F /q */ { 0, BX_IA_ERROR }, // REX: + /* 50 /q */ { 0, BX_IA_PUSH_RRX }, + /* 51 /q */ { 0, BX_IA_PUSH_RRX }, + /* 52 /q */ { 0, BX_IA_PUSH_RRX }, + /* 53 /q */ { 0, BX_IA_PUSH_RRX }, + /* 54 /q */ { 0, BX_IA_PUSH_RRX }, + /* 55 /q */ { 0, BX_IA_PUSH_RRX }, + /* 56 /q */ { 0, BX_IA_PUSH_RRX }, + /* 57 /q */ { 0, BX_IA_PUSH_RRX }, + /* 58 /q */ { 0, BX_IA_POP_RRX }, + /* 59 /q */ { 0, BX_IA_POP_RRX }, + /* 5A /q */ { 0, BX_IA_POP_RRX }, + /* 5B /q */ { 0, BX_IA_POP_RRX }, + /* 5C /q */ { 0, BX_IA_POP_RRX }, + /* 5D /q */ { 0, BX_IA_POP_RRX }, + /* 5E /q */ { 0, BX_IA_POP_RRX }, + /* 5F /q */ { 0, BX_IA_POP_RRX }, + /* 60 /q */ { 0, BX_IA_ERROR }, + /* 61 /q */ { 0, BX_IA_ERROR }, + /* 62 /q */ { 0, BX_IA_ERROR }, + /* 63 /q */ { 0, BX_IA_MOVSX_GqEd }, + /* 64 /q */ { 0, BX_IA_ERROR }, // FS: + /* 65 /q */ { 0, BX_IA_ERROR }, // GS: + /* 66 /q */ { 0, BX_IA_ERROR }, // OS: + /* 67 /q */ { 0, BX_IA_ERROR }, // AS: + /* 68 /q */ { BxImmediate_Id, BX_IA_PUSH64_Id }, + /* 69 /q */ { BxImmediate_Id, BX_IA_IMUL_GqEqId }, + /* 6A /q */ { BxImmediate_Ib_SE, BX_IA_PUSH64_Id }, + /* 6B /q */ { BxImmediate_Ib_SE, BX_IA_IMUL_GqEqId }, + /* 6C /q */ { 0, BX_IA_REP_INSB_YbDX }, + /* 6D /q */ { 0, BX_IA_REP_INSD_YdDX }, + /* 6E /q */ { 0, BX_IA_REP_OUTSB_DXXb }, + /* 6F /q */ { 0, BX_IA_REP_OUTSD_DXXd }, + /* 70 /q */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JO_Jq }, + /* 71 /q */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNO_Jq }, + /* 72 /q */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JB_Jq }, + /* 73 /q */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNB_Jq }, + /* 74 /q */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JZ_Jq }, + /* 75 /q */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNZ_Jq }, + /* 76 /q */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JBE_Jq }, + /* 77 /q */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNBE_Jq }, + /* 78 /q */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JS_Jq }, + /* 79 /q */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNS_Jq }, + /* 7A /q */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JP_Jq }, + /* 7B /q */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNP_Jq }, + /* 7C /q */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JL_Jq }, + /* 7D /q */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNL_Jq }, + /* 7E /q */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JLE_Jq }, + /* 7F /q */ { BxImmediate_BrOff8 | BxTraceJCC, BX_IA_JNLE_Jq }, + /* 80 /q */ { BxGroup1 | BxImmediate_Ib, BX_IA_ERROR, BxOpcodeInfoG1EbIb }, + /* 81 /q */ { BxGroup1 | BxImmediate_Id, BX_IA_ERROR, BxOpcodeInfo64G1Eq }, + /* 82 /q */ { 0, BX_IA_ERROR }, + /* 83 /q */ { BxGroup1 | BxImmediate_Ib_SE, BX_IA_ERROR, BxOpcodeInfo64G1Eq }, + /* 84 /q */ { 0, BX_IA_TEST_EbGb }, + /* 85 /q */ { 0, BX_IA_TEST_EqGq }, + /* 86 /q */ { BxLockable, BX_IA_XCHG_EbGb }, + /* 87 /q */ { BxLockable, BX_IA_XCHG_EqGq }, + /* 88 /q */ { BxArithDstRM, BX_IA_MOV_EbGb }, + /* 89 /q */ { BxArithDstRM, BX_IA_MOV_EqGq }, + /* 8A /q */ { 0, BX_IA_MOV_GbEb }, + /* 8B /q */ { 0, BX_IA_MOV_GqEq }, + /* 8C /q */ { 0, BX_IA_MOV_EwSw }, + /* 8D /q */ { 0, BX_IA_LEA_GqM }, + /* 8E /q */ { 0, BX_IA_MOV_SwEw }, + /* 8F /q */ { BxGroup1A, BX_IA_ERROR, BxOpcodeInfo64G1AEq }, + /* 90 /q */ { 0, BX_IA_XCHG_RRXRAX }, // handles XCHG R8, RAX + /* 91 /q */ { 0, BX_IA_XCHG_RRXRAX }, + /* 92 /q */ { 0, BX_IA_XCHG_RRXRAX }, + /* 93 /q */ { 0, BX_IA_XCHG_RRXRAX }, + /* 94 /q */ { 0, BX_IA_XCHG_RRXRAX }, + /* 95 /q */ { 0, BX_IA_XCHG_RRXRAX }, + /* 96 /q */ { 0, BX_IA_XCHG_RRXRAX }, + /* 97 /q */ { 0, BX_IA_XCHG_RRXRAX }, + /* 98 /q */ { 0, BX_IA_CDQE }, + /* 99 /q */ { 0, BX_IA_CQO }, + /* 9A /q */ { 0, BX_IA_ERROR }, + /* 9B /q */ { 0, BX_IA_FWAIT }, + /* 9C /q */ { 0, BX_IA_PUSHF_Fq }, + /* 9D /q */ { 0, BX_IA_POPF_Fq }, + /* 9E /q */ { 0, BX_IA_SAHF }, + /* 9F /q */ { 0, BX_IA_LAHF }, + /* A0 /q */ { BxImmediate_O, BX_IA_MOV_ALOq }, + /* A1 /q */ { BxImmediate_O, BX_IA_MOV_RAXOq }, + /* A2 /q */ { BxImmediate_O, BX_IA_MOV_OqAL }, + /* A3 /q */ { BxImmediate_O, BX_IA_MOV_OqRAX }, + /* A4 /q */ { 0, BX_IA_REP_MOVSB_XbYb }, + /* A5 /q */ { 0, BX_IA_REP_MOVSQ_XqYq }, + /* A6 /q */ { 0, BX_IA_REP_CMPSB_XbYb }, + /* A7 /q */ { 0, BX_IA_REP_CMPSQ_XqYq }, + /* A8 /q */ { BxImmediate_Ib, BX_IA_TEST_ALIb }, + /* A9 /q */ { BxImmediate_Id, BX_IA_TEST_RAXId }, + /* AA /q */ { 0, BX_IA_REP_STOSB_YbAL }, + /* AB /q */ { 0, BX_IA_REP_STOSQ_YqRAX }, + /* AC /q */ { 0, BX_IA_REP_LODSB_ALXb }, + /* AD /q */ { 0, BX_IA_REP_LODSQ_RAXXq }, + /* AE /q */ { 0, BX_IA_REP_SCASB_ALXb }, + /* AF /q */ { 0, BX_IA_REP_SCASQ_RAXXq }, + /* B0 /q */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, + /* B1 /q */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, + /* B2 /q */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, + /* B3 /q */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, + /* B4 /q */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, + /* B5 /q */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, + /* B6 /q */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, + /* B7 /q */ { BxImmediate_Ib, BX_IA_MOV_RLIb }, + /* B8 /q */ { BxImmediate_Iq, BX_IA_MOV_RRXIq }, + /* B9 /q */ { BxImmediate_Iq, BX_IA_MOV_RRXIq }, + /* BA /q */ { BxImmediate_Iq, BX_IA_MOV_RRXIq }, + /* BB /q */ { BxImmediate_Iq, BX_IA_MOV_RRXIq }, + /* BC /q */ { BxImmediate_Iq, BX_IA_MOV_RRXIq }, + /* BD /q */ { BxImmediate_Iq, BX_IA_MOV_RRXIq }, + /* BE /q */ { BxImmediate_Iq, BX_IA_MOV_RRXIq }, + /* BF /q */ { BxImmediate_Iq, BX_IA_MOV_RRXIq }, + /* C0 /q */ { BxGroup2 | BxImmediate_Ib, BX_IA_ERROR, BxOpcodeInfoG2Eb }, + /* C1 /q */ { BxGroup2 | BxImmediate_Ib, BX_IA_ERROR, BxOpcodeInfo64G2Eq }, + /* C2 /q */ { BxImmediate_Iw | BxTraceEnd, BX_IA_RETnear64_Iw }, + /* C3 /q */ { BxTraceEnd, BX_IA_RETnear64 }, + /* C4 /q */ { 0, BX_IA_ERROR }, + /* C5 /q */ { 0, BX_IA_ERROR }, + /* C6 /q */ { BxGroup11, BX_IA_ERROR, BxOpcodeInfoG11Eb }, + /* C7 /q */ { BxGroup11, BX_IA_ERROR, BxOpcodeInfo64G11Eq }, + /* C8 /q */ { BxImmediate_Iw | BxImmediate_Ib2, BX_IA_ENTER64_IwIb }, + /* C9 /q */ { 0, BX_IA_LEAVE64 }, + /* CA /q */ { BxImmediate_Iw | BxTraceEnd, BX_IA_RETfar64_Iw }, + /* CB /q */ { BxTraceEnd, BX_IA_RETfar64 }, + /* CC /q */ { BxTraceEnd, BX_IA_INT3 }, + /* CD /q */ { BxImmediate_Ib | BxTraceEnd, BX_IA_INT_Ib }, + /* CE /q */ { 0, BX_IA_ERROR }, + /* CF /q */ { BxTraceEnd, BX_IA_IRET64 }, + /* D0 /q */ { BxGroup2 | BxImmediate_I1, BX_IA_ERROR, BxOpcodeInfoG2Eb }, + /* D1 /q */ { BxGroup2 | BxImmediate_I1, BX_IA_ERROR, BxOpcodeInfo64G2Eq }, + /* D2 /q */ { BxGroup2, BX_IA_ERROR, BxOpcodeInfoG2Eb }, + /* D3 /q */ { BxGroup2, BX_IA_ERROR, BxOpcodeInfo64G2Eq }, + /* D4 /q */ { 0, BX_IA_ERROR }, + /* D5 /q */ { 0, BX_IA_ERROR }, + /* D6 /q */ { 0, BX_IA_ERROR }, + /* D7 /q */ { 0, BX_IA_XLAT }, + /* D8 /q */ { BxGroupFP, BX_IA_ERROR, BxOpcodeInfo_FPGroupD8 }, + /* D9 /q */ { BxFPEscape, BX_IA_ERROR, BxOpcodeInfo_FloatingPointD9 }, + /* DA /q */ { BxFPEscape, BX_IA_ERROR, BxOpcodeInfo_FloatingPointDA }, + /* DB /q */ { BxFPEscape, BX_IA_ERROR, BxOpcodeInfo_FloatingPointDB }, + /* DC /q */ { BxGroupFP, BX_IA_ERROR, BxOpcodeInfo_FPGroupDC }, + /* DD /q */ { BxGroupFP, BX_IA_ERROR, BxOpcodeInfo_FPGroupDD }, + /* DE /q */ { BxFPEscape, BX_IA_ERROR, BxOpcodeInfo_FloatingPointDE }, + /* DF /q */ { BxFPEscape, BX_IA_ERROR, BxOpcodeInfo_FloatingPointDF }, + /* E0 /q */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_LOOPNE64_Jb }, + /* E1 /q */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_LOOPE64_Jb }, + /* E2 /q */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_LOOP64_Jb }, + /* E3 /q */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_JRCXZ_Jb }, + /* E4 /q */ { BxImmediate_Ib, BX_IA_IN_ALIb }, + /* E5 /q */ { BxImmediate_Ib, BX_IA_IN_EAXIb }, + /* E6 /q */ { BxImmediate_Ib, BX_IA_OUT_IbAL }, + /* E7 /q */ { BxImmediate_Ib, BX_IA_OUT_IbEAX }, + /* E8 /q */ { BxImmediate_BrOff32 | BxTraceEnd, BX_IA_CALL_Jq }, + /* E9 /q */ { BxImmediate_BrOff32 | BxTraceEnd, BX_IA_JMP_Jq }, + /* EA /q */ { 0, BX_IA_ERROR }, + /* EB /q */ { BxImmediate_BrOff8 | BxTraceEnd, BX_IA_JMP_Jq }, + /* EC /q */ { 0, BX_IA_IN_ALDX }, + /* ED /q */ { 0, BX_IA_IN_EAXDX }, + /* EE /q */ { 0, BX_IA_OUT_DXAL }, + /* EF /q */ { 0, BX_IA_OUT_DXEAX }, + /* F0 /q */ { 0, BX_IA_ERROR }, // LOCK: + /* F1 /q */ { BxTraceEnd, BX_IA_INT1 }, + /* F2 /q */ { 0, BX_IA_ERROR }, // REPNE/REPNZ + /* F3 /q */ { 0, BX_IA_ERROR }, // REP,REPE/REPZ + /* F4 /q */ { BxTraceEnd, BX_IA_HLT }, + /* F5 /q */ { 0, BX_IA_CMC }, + /* F6 /q */ { BxGroup3, BX_IA_ERROR, BxOpcodeInfoG3Eb }, + /* F7 /q */ { BxGroup3, BX_IA_ERROR, BxOpcodeInfo64G3Eq }, + /* F8 /q */ { 0, BX_IA_CLC }, + /* F9 /q */ { 0, BX_IA_STC }, + /* FA /q */ { 0, BX_IA_CLI }, + /* FB /q */ { 0, BX_IA_STI }, + /* FC /q */ { 0, BX_IA_CLD }, + /* FD /q */ { 0, BX_IA_STD }, + /* FE /q */ { BxGroup4, BX_IA_ERROR, BxOpcodeInfoG4 }, + /* FF /q */ { BxGroup5, BX_IA_ERROR, BxOpcodeInfo64G5q }, - /* 0F 00 /qr */ { BxGroup6, BX_IA_ERROR, BxOpcodeInfoG6 }, - /* 0F 00 /qm */ { BxGroup6, BX_IA_ERROR, BxOpcodeInfoG6 }, - /* 0F 01 /qr */ { BxFPEscape, BX_IA_ERROR, BxOpcodeInfoG7R }, - /* 0F 01 /qm */ { BxGroup7, BX_IA_ERROR, BxOpcodeInfo64G7M }, - /* 0F 02 /qr */ { 0, BX_IA_LAR_GvEw }, - /* 0F 02 /qm */ { 0, BX_IA_LAR_GvEw }, - /* 0F 03 /qr */ { 0, BX_IA_LSL_GvEw }, - /* 0F 03 /qm */ { 0, BX_IA_LSL_GvEw }, - /* 0F 04 /qr */ { 0, BX_IA_ERROR }, - /* 0F 04 /qm */ { 0, BX_IA_ERROR }, - /* 0F 05 /qr */ { BxTraceEnd, BX_IA_SYSCALL }, - /* 0F 05 /qm */ { BxTraceEnd, BX_IA_SYSCALL }, - /* 0F 06 /qr */ { 0, BX_IA_CLTS }, - /* 0F 06 /qm */ { 0, BX_IA_CLTS }, - /* 0F 07 /qr */ { BxTraceEnd, BX_IA_SYSRET }, - /* 0F 07 /qm */ { BxTraceEnd, BX_IA_SYSRET }, - /* 0F 08 /qr */ { BxTraceEnd, BX_IA_INVD }, - /* 0F 08 /qm */ { BxTraceEnd, BX_IA_INVD }, - /* 0F 09 /qr */ { BxTraceEnd, BX_IA_WBINVD }, - /* 0F 09 /qm */ { BxTraceEnd, BX_IA_WBINVD }, - /* 0F 0A /qr */ { 0, BX_IA_ERROR }, - /* 0F 0A /qm */ { 0, BX_IA_ERROR }, - /* 0F 0B /qr */ { BxTraceEnd, BX_IA_UD2A }, - /* 0F 0B /qm */ { BxTraceEnd, BX_IA_UD2A }, - /* 0F 0C /qr */ { 0, BX_IA_ERROR }, - /* 0F 0C /qm */ { 0, BX_IA_ERROR }, - /* 0F 0D /qr */ { 0, BX_IA_PREFETCHW }, // 3DNow! PREFETCHW on AMD, NOP on Intel - /* 0F 0D /qm */ { 0, BX_IA_PREFETCHW }, // 3DNow! PREFETCHW on AMD, NOP on Intel - /* 0F 0E /qr */ { 0, BX_IA_FEMMS }, // 3DNow! FEMMS - /* 0F 0E /qm */ { 0, BX_IA_FEMMS }, // 3DNow! FEMMS - /* 0F 0F /qr */ { BxImmediate_Ib, BX_IA_ERROR }, // 3DNow! Opcode Table - /* 0F 0F /qm */ { BxImmediate_Ib, BX_IA_ERROR }, // 3DNow! Opcode Table - /* 0F 10 /qr */ { BxPrefixSSE, BX_IA_MOVUPS_VpsWps, BxOpcodeGroupSSE_0f10 }, - /* 0F 10 /qm */ { BxPrefixSSE, BX_IA_MOVUPS_VpsWps, BxOpcodeGroupSSE_0f10 }, - /* 0F 11 /qr */ { BxPrefixSSE | BxArithDstRM, BX_IA_MOVUPS_WpsVps, BxOpcodeGroupSSE_0f11 }, - /* 0F 11 /qm */ { BxPrefixSSE, BX_IA_MOVUPS_WpsVps, BxOpcodeGroupSSE_0f11 }, - /* 0F 12 /qr */ { BxPrefixSSE, BX_IA_MOVLPS_VpsMq, BxOpcodeGroupSSE_0f12 }, - /* 0F 12 /qm */ { BxPrefixSSE, BX_IA_MOVLPS_VpsMq, BxOpcodeGroupSSE_0f12 }, - /* 0F 13 /qr */ { 0, BX_IA_ERROR }, // MOVLPS/PD SSE group - /* 0F 13 /qm */ { BxPrefixSSE, BX_IA_MOVLPS_MqVps, BxOpcodeGroupSSE_0f13M }, - /* 0F 14 /qr */ { BxPrefixSSE, BX_IA_UNPCKLPS_VpsWdq, BxOpcodeGroupSSE_0f14 }, - /* 0F 14 /qm */ { BxPrefixSSE, BX_IA_UNPCKLPS_VpsWdq, BxOpcodeGroupSSE_0f14 }, - /* 0F 15 /qr */ { BxPrefixSSE, BX_IA_UNPCKHPS_VpsWdq, BxOpcodeGroupSSE_0f15 }, - /* 0F 15 /qm */ { BxPrefixSSE, BX_IA_UNPCKHPS_VpsWdq, BxOpcodeGroupSSE_0f15 }, - /* 0F 16 /qr */ { BxPrefixSSE, BX_IA_MOVHPS_VpsMq, BxOpcodeGroupSSE_0f16 }, - /* 0F 16 /qm */ { BxPrefixSSE, BX_IA_MOVHPS_VpsMq, BxOpcodeGroupSSE_0f16 }, - /* 0F 17 /qr */ { 0, BX_IA_ERROR }, // MOHLPS/PD SSE group - /* 0F 17 /qm */ { BxPrefixSSE, BX_IA_MOVHPS_MqVps, BxOpcodeGroupSSE_0f17M }, - /* 0F 18 /qr */ { 0, BX_IA_NOP }, // PREFETCH HINT - /* 0F 18 /qm */ { 0, BX_IA_PREFETCH }, // opcode group G16, PREFETCH hints - /* 0F 19 /qr */ { 0, BX_IA_NOP }, // multi-byte NOP - /* 0F 19 /qm */ { 0, BX_IA_NOP }, // multi-byte NOP - /* 0F 1A /qr */ { 0, BX_IA_NOP }, // multi-byte NOP - /* 0F 1A /qm */ { 0, BX_IA_NOP }, // multi-byte NOP - /* 0F 1B /qr */ { 0, BX_IA_NOP }, // multi-byte NOP - /* 0F 1B /qm */ { 0, BX_IA_NOP }, // multi-byte NOP - /* 0F 1C /qr */ { 0, BX_IA_NOP }, // multi-byte NOP - /* 0F 1C /qm */ { 0, BX_IA_NOP }, // multi-byte NOP - /* 0F 1D /qr */ { 0, BX_IA_NOP }, // multi-byte NOP - /* 0F 1D /qm */ { 0, BX_IA_NOP }, // multi-byte NOP - /* 0F 1E /qr */ { 0, BX_IA_NOP }, // multi-byte NOP - /* 0F 1E /qm */ { 0, BX_IA_NOP }, // multi-byte NOP - /* 0F 1F /qr */ { 0, BX_IA_NOP }, // multi-byte NOP - /* 0F 1F /qm */ { 0, BX_IA_NOP }, // multi-byte NOP - /* 0F 20 /qr */ { BxGroupN, BX_IA_ERROR, BxOpcodeInfoMOV_RqCq }, - /* 0F 20 /qm */ { 0, BX_IA_ERROR }, - /* 0F 21 /qr */ { 0, BX_IA_MOV_RqDq }, - /* 0F 21 /qm */ { 0, BX_IA_ERROR }, - /* 0F 22 /qr */ { BxGroupN, BX_IA_ERROR, BxOpcodeInfoMOV_CqRq }, - /* 0F 22 /qm */ { 0, BX_IA_ERROR }, - /* 0F 23 /qr */ { BxTraceEnd, BX_IA_MOV_DqRq }, - /* 0F 23 /qm */ { 0, BX_IA_ERROR }, - /* 0F 24 /qr */ { 0, BX_IA_ERROR }, - /* 0F 24 /qm */ { 0, BX_IA_ERROR }, - /* 0F 25 /qr */ { 0, BX_IA_ERROR }, - /* 0F 25 /qm */ { 0, BX_IA_ERROR }, - /* 0F 26 /qr */ { 0, BX_IA_ERROR }, - /* 0F 26 /qm */ { 0, BX_IA_ERROR }, - /* 0F 27 /qr */ { 0, BX_IA_ERROR }, - /* 0F 27 /qm */ { 0, BX_IA_ERROR }, - /* 0F 28 /qr */ { BxPrefixSSE, BX_IA_MOVAPS_VpsWps, BxOpcodeGroupSSE_0f28 }, - /* 0F 28 /qm */ { BxPrefixSSE, BX_IA_MOVAPS_VpsWps, BxOpcodeGroupSSE_0f28 }, - /* 0F 29 /qr */ { BxPrefixSSE | BxArithDstRM, BX_IA_MOVAPS_WpsVps, BxOpcodeGroupSSE_0f29 }, - /* 0F 29 /qm */ { BxPrefixSSE, BX_IA_MOVAPS_WpsVps, BxOpcodeGroupSSE_0f29 }, - /* 0F 2A /qr */ { BxPrefixSSE, BX_IA_CVTPI2PS_VpsQq, BxOpcodeGroupSSE_0f2a }, - /* 0F 2A /qm */ { BxPrefixSSE, BX_IA_CVTPI2PS_VpsQq, BxOpcodeGroupSSE_0f2a }, - /* 0F 2B /qr */ { 0, BX_IA_ERROR }, // MOVNTPS/PD/SS/SD - /* 0F 2B /qm */ { BxPrefixSSE, BX_IA_MOVNTPS_MpsVps, BxOpcodeGroupSSE_0f2bM }, - /* 0F 2C /qr */ { BxPrefixSSE, BX_IA_CVTTPS2PI_PqWps, BxOpcodeGroupSSE_0f2c }, - /* 0F 2C /qm */ { BxPrefixSSE, BX_IA_CVTTPS2PI_PqWps, BxOpcodeGroupSSE_0f2c }, - /* 0F 2D /qr */ { BxPrefixSSE, BX_IA_CVTPS2PI_PqWps, BxOpcodeGroupSSE_0f2d }, - /* 0F 2D /qm */ { BxPrefixSSE, BX_IA_CVTPS2PI_PqWps, BxOpcodeGroupSSE_0f2d }, - /* 0F 2E /qr */ { BxPrefixSSE, BX_IA_UCOMISS_VssWss, BxOpcodeGroupSSE_0f2e }, - /* 0F 2E /qm */ { BxPrefixSSE, BX_IA_UCOMISS_VssWss, BxOpcodeGroupSSE_0f2e }, - /* 0F 2F /qr */ { BxPrefixSSE, BX_IA_COMISS_VpsWps, BxOpcodeGroupSSE_0f2f }, - /* 0F 2F /qm */ { BxPrefixSSE, BX_IA_COMISS_VpsWps, BxOpcodeGroupSSE_0f2f }, - /* 0F 30 /qr */ { 0, BX_IA_WRMSR }, - /* 0F 30 /qm */ { 0, BX_IA_WRMSR }, - /* 0F 31 /qr */ { 0, BX_IA_RDTSC }, - /* 0F 31 /qm */ { 0, BX_IA_RDTSC }, - /* 0F 32 /qr */ { 0, BX_IA_RDMSR }, - /* 0F 32 /qm */ { 0, BX_IA_RDMSR }, - /* 0F 33 /qr */ { 0, BX_IA_RDPMC }, - /* 0F 33 /qm */ { 0, BX_IA_RDPMC }, - /* 0F 34 /qr */ { BxTraceEnd, BX_IA_SYSENTER }, - /* 0F 34 /qm */ { BxTraceEnd, BX_IA_SYSENTER }, - /* 0F 35 /qr */ { BxTraceEnd, BX_IA_SYSEXIT }, - /* 0F 35 /qm */ { BxTraceEnd, BX_IA_SYSEXIT }, - /* 0F 36 /qr */ { 0, BX_IA_ERROR }, - /* 0F 36 /qm */ { 0, BX_IA_ERROR }, - /* 0F 37 /qr */ { 0, BX_IA_ERROR }, - /* 0F 37 /qm */ { 0, BX_IA_ERROR }, - /* 0F 38 /qr */ { Bx3ByteOp, BX_IA_ERROR, BxOpcode3ByteTable0f38 }, // 3-byte escape - /* 0F 38 /qm */ { Bx3ByteOp, BX_IA_ERROR, BxOpcode3ByteTable0f38 }, // 3-byte escape - /* 0F 39 /qr */ { 0, BX_IA_ERROR }, - /* 0F 39 /qm */ { 0, BX_IA_ERROR }, - /* 0F 3A /qr */ { Bx3ByteOp | BxImmediate_Ib, BX_IA_ERROR, BxOpcode3ByteTable0f3a }, // 3-byte escape - /* 0F 3A /qm */ { Bx3ByteOp | BxImmediate_Ib, BX_IA_ERROR, BxOpcode3ByteTable0f3a }, // 3-byte escape - /* 0F 3B /qr */ { 0, BX_IA_ERROR }, - /* 0F 3B /qm */ { 0, BX_IA_ERROR }, - /* 0F 3C /qr */ { 0, BX_IA_ERROR }, - /* 0F 3C /qm */ { 0, BX_IA_ERROR }, - /* 0F 3D /qr */ { 0, BX_IA_ERROR }, - /* 0F 3D /qm */ { 0, BX_IA_ERROR }, - /* 0F 3E /qr */ { 0, BX_IA_ERROR }, - /* 0F 3E /qm */ { 0, BX_IA_ERROR }, - /* 0F 3F /qr */ { 0, BX_IA_ERROR }, - /* 0F 3F /qm */ { 0, BX_IA_ERROR }, - /* 0F 40 /qr */ { 0, BX_IA_CMOVO_GqEq }, - /* 0F 40 /qm */ { 0, BX_IA_CMOVO_GqEq }, - /* 0F 41 /qr */ { 0, BX_IA_CMOVNO_GqEq }, - /* 0F 41 /qm */ { 0, BX_IA_CMOVNO_GqEq }, - /* 0F 42 /qr */ { 0, BX_IA_CMOVB_GqEq }, - /* 0F 42 /qm */ { 0, BX_IA_CMOVB_GqEq }, - /* 0F 43 /qr */ { 0, BX_IA_CMOVNB_GqEq }, - /* 0F 43 /qm */ { 0, BX_IA_CMOVNB_GqEq }, - /* 0F 44 /qr */ { 0, BX_IA_CMOVZ_GqEq }, - /* 0F 44 /qm */ { 0, BX_IA_CMOVZ_GqEq }, - /* 0F 45 /qr */ { 0, BX_IA_CMOVNZ_GqEq }, - /* 0F 45 /qm */ { 0, BX_IA_CMOVNZ_GqEq }, - /* 0F 46 /qr */ { 0, BX_IA_CMOVBE_GqEq }, - /* 0F 46 /qm */ { 0, BX_IA_CMOVBE_GqEq }, - /* 0F 47 /qr */ { 0, BX_IA_CMOVNBE_GqEq }, - /* 0F 47 /qm */ { 0, BX_IA_CMOVNBE_GqEq }, - /* 0F 48 /qr */ { 0, BX_IA_CMOVS_GqEq }, - /* 0F 48 /qm */ { 0, BX_IA_CMOVS_GqEq }, - /* 0F 49 /qr */ { 0, BX_IA_CMOVNS_GqEq }, - /* 0F 49 /qm */ { 0, BX_IA_CMOVNS_GqEq }, - /* 0F 4A /qr */ { 0, BX_IA_CMOVP_GqEq }, - /* 0F 4A /qm */ { 0, BX_IA_CMOVP_GqEq }, - /* 0F 4B /qr */ { 0, BX_IA_CMOVNP_GqEq }, - /* 0F 4B /qm */ { 0, BX_IA_CMOVNP_GqEq }, - /* 0F 4C /qr */ { 0, BX_IA_CMOVL_GqEq }, - /* 0F 4C /qm */ { 0, BX_IA_CMOVL_GqEq }, - /* 0F 4D /qr */ { 0, BX_IA_CMOVNL_GqEq }, - /* 0F 4D /qm */ { 0, BX_IA_CMOVNL_GqEq }, - /* 0F 4E /qr */ { 0, BX_IA_CMOVLE_GqEq }, - /* 0F 4E /qm */ { 0, BX_IA_CMOVLE_GqEq }, - /* 0F 4F /qr */ { 0, BX_IA_CMOVNLE_GqEq }, - /* 0F 4F /qm */ { 0, BX_IA_CMOVNLE_GqEq }, - /* 0F 50 /qr */ { BxPrefixSSE, BX_IA_MOVMSKPS_GdVRps, BxOpcodeGroupSSE_0f50R }, - /* 0F 50 /qm */ { 0, BX_IA_ERROR }, // MOVMSKPS/PD - /* 0F 51 /qr */ { BxPrefixSSE, BX_IA_SQRTPS_VpsWps, BxOpcodeGroupSSE_0f51 }, - /* 0F 51 /qm */ { BxPrefixSSE, BX_IA_SQRTPS_VpsWps, BxOpcodeGroupSSE_0f51 }, - /* 0F 52 /qr */ { BxPrefixSSE, BX_IA_RSQRTPS_VpsWps, BxOpcodeGroupSSE_0f52 }, - /* 0F 52 /qm */ { BxPrefixSSE, BX_IA_RSQRTPS_VpsWps, BxOpcodeGroupSSE_0f52 }, - /* 0F 53 /qr */ { BxPrefixSSE, BX_IA_RCPPS_VpsWps, BxOpcodeGroupSSE_0f53 }, - /* 0F 53 /qm */ { BxPrefixSSE, BX_IA_RCPPS_VpsWps, BxOpcodeGroupSSE_0f53 }, - /* 0F 54 /qr */ { BxPrefixSSE, BX_IA_ANDPS_VpsWps, BxOpcodeGroupSSE_0f54 }, - /* 0F 54 /qm */ { BxPrefixSSE, BX_IA_ANDPS_VpsWps, BxOpcodeGroupSSE_0f54 }, - /* 0F 55 /qr */ { BxPrefixSSE, BX_IA_ANDNPS_VpsWps, BxOpcodeGroupSSE_0f55 }, - /* 0F 55 /qm */ { BxPrefixSSE, BX_IA_ANDNPS_VpsWps, BxOpcodeGroupSSE_0f55 }, - /* 0F 56 /qr */ { BxPrefixSSE, BX_IA_ORPS_VpsWps, BxOpcodeGroupSSE_0f56 }, - /* 0F 56 /qm */ { BxPrefixSSE, BX_IA_ORPS_VpsWps, BxOpcodeGroupSSE_0f56 }, - /* 0F 57 /qr */ { BxPrefixSSE, BX_IA_XORPS_VpsWps, BxOpcodeGroupSSE_0f57 }, - /* 0F 57 /qm */ { BxPrefixSSE, BX_IA_XORPS_VpsWps, BxOpcodeGroupSSE_0f57 }, - /* 0F 58 /qr */ { BxPrefixSSE, BX_IA_ADDPS_VpsWps, BxOpcodeGroupSSE_0f58 }, - /* 0F 58 /qm */ { BxPrefixSSE, BX_IA_ADDPS_VpsWps, BxOpcodeGroupSSE_0f58 }, - /* 0F 59 /qr */ { BxPrefixSSE, BX_IA_MULPS_VpsWps, BxOpcodeGroupSSE_0f59 }, - /* 0F 59 /qm */ { BxPrefixSSE, BX_IA_MULPS_VpsWps, BxOpcodeGroupSSE_0f59 }, - /* 0F 5A /qr */ { BxPrefixSSE, BX_IA_CVTPS2PD_VpsWps, BxOpcodeGroupSSE_0f5a }, - /* 0F 5A /qm */ { BxPrefixSSE, BX_IA_CVTPS2PD_VpsWps, BxOpcodeGroupSSE_0f5a }, - /* 0F 5B /qr */ { BxPrefixSSE, BX_IA_CVTDQ2PS_VpsWdq, BxOpcodeGroupSSE_0f5b }, - /* 0F 5B /qm */ { BxPrefixSSE, BX_IA_CVTDQ2PS_VpsWdq, BxOpcodeGroupSSE_0f5b }, - /* 0F 5C /qr */ { BxPrefixSSE, BX_IA_SUBPS_VpsWps, BxOpcodeGroupSSE_0f5c }, - /* 0F 5C /qm */ { BxPrefixSSE, BX_IA_SUBPS_VpsWps, BxOpcodeGroupSSE_0f5c }, - /* 0F 5D /qr */ { BxPrefixSSE, BX_IA_MINPS_VpsWps, BxOpcodeGroupSSE_0f5d }, - /* 0F 5D /qm */ { BxPrefixSSE, BX_IA_MINPS_VpsWps, BxOpcodeGroupSSE_0f5d }, - /* 0F 5E /qr */ { BxPrefixSSE, BX_IA_DIVPS_VpsWps, BxOpcodeGroupSSE_0f5e }, - /* 0F 5E /qm */ { BxPrefixSSE, BX_IA_DIVPS_VpsWps, BxOpcodeGroupSSE_0f5e }, - /* 0F 5F /qr */ { BxPrefixSSE, BX_IA_MAXPS_VpsWps, BxOpcodeGroupSSE_0f5f }, - /* 0F 5F /qm */ { BxPrefixSSE, BX_IA_MAXPS_VpsWps, BxOpcodeGroupSSE_0f5f }, - /* 0F 60 /qr */ { BxPrefixSSE, BX_IA_PUNPCKLBW_PqQd, BxOpcodeGroupSSE_0f60 }, - /* 0F 60 /qm */ { BxPrefixSSE, BX_IA_PUNPCKLBW_PqQd, BxOpcodeGroupSSE_0f60 }, - /* 0F 61 /qr */ { BxPrefixSSE, BX_IA_PUNPCKLWD_PqQd, BxOpcodeGroupSSE_0f61 }, - /* 0F 61 /qm */ { BxPrefixSSE, BX_IA_PUNPCKLWD_PqQd, BxOpcodeGroupSSE_0f61 }, - /* 0F 62 /qr */ { BxPrefixSSE, BX_IA_PUNPCKLDQ_PqQd, BxOpcodeGroupSSE_0f62 }, - /* 0F 62 /qm */ { BxPrefixSSE, BX_IA_PUNPCKLDQ_PqQd, BxOpcodeGroupSSE_0f62 }, - /* 0F 63 /qr */ { BxPrefixSSE, BX_IA_PACKSSWB_PqQq, BxOpcodeGroupSSE_0f63 }, - /* 0F 63 /qm */ { BxPrefixSSE, BX_IA_PACKSSWB_PqQq, BxOpcodeGroupSSE_0f63 }, - /* 0F 64 /qr */ { BxPrefixSSE, BX_IA_PCMPGTB_PqQq, BxOpcodeGroupSSE_0f64 }, - /* 0F 64 /qm */ { BxPrefixSSE, BX_IA_PCMPGTB_PqQq, BxOpcodeGroupSSE_0f64 }, - /* 0F 65 /qr */ { BxPrefixSSE, BX_IA_PCMPGTW_PqQq, BxOpcodeGroupSSE_0f65 }, - /* 0F 65 /qm */ { BxPrefixSSE, BX_IA_PCMPGTW_PqQq, BxOpcodeGroupSSE_0f65 }, - /* 0F 66 /qr */ { BxPrefixSSE, BX_IA_PCMPGTD_PqQq, BxOpcodeGroupSSE_0f66 }, - /* 0F 66 /qm */ { BxPrefixSSE, BX_IA_PCMPGTD_PqQq, BxOpcodeGroupSSE_0f66 }, - /* 0F 67 /qr */ { BxPrefixSSE, BX_IA_PACKUSWB_PqQq, BxOpcodeGroupSSE_0f67 }, - /* 0F 67 /qm */ { BxPrefixSSE, BX_IA_PACKUSWB_PqQq, BxOpcodeGroupSSE_0f67 }, - /* 0F 68 /qr */ { BxPrefixSSE, BX_IA_PUNPCKHBW_PqQq, BxOpcodeGroupSSE_0f68 }, - /* 0F 68 /qm */ { BxPrefixSSE, BX_IA_PUNPCKHBW_PqQq, BxOpcodeGroupSSE_0f68 }, - /* 0F 69 /qr */ { BxPrefixSSE, BX_IA_PUNPCKHWD_PqQq, BxOpcodeGroupSSE_0f69 }, - /* 0F 69 /qm */ { BxPrefixSSE, BX_IA_PUNPCKHWD_PqQq, BxOpcodeGroupSSE_0f69 }, - /* 0F 6A /qr */ { BxPrefixSSE, BX_IA_PUNPCKHDQ_PqQq, BxOpcodeGroupSSE_0f6a }, - /* 0F 6A /qm */ { BxPrefixSSE, BX_IA_PUNPCKHDQ_PqQq, BxOpcodeGroupSSE_0f6a }, - /* 0F 6B /qr */ { BxPrefixSSE, BX_IA_PACKSSDW_PqQq, BxOpcodeGroupSSE_0f6b }, - /* 0F 6B /qm */ { BxPrefixSSE, BX_IA_PACKSSDW_PqQq, BxOpcodeGroupSSE_0f6b }, - /* 0F 6C /qr */ { BxPrefixSSE66, BX_IA_PUNPCKLQDQ_VdqWdq }, - /* 0F 6C /qm */ { BxPrefixSSE66, BX_IA_PUNPCKLQDQ_VdqWdq }, - /* 0F 6D /qr */ { BxPrefixSSE66, BX_IA_PUNPCKHQDQ_VdqWdq }, - /* 0F 6D /qm */ { BxPrefixSSE66, BX_IA_PUNPCKHQDQ_VdqWdq }, - /* 0F 6E /qr */ { BxPrefixSSE, BX_IA_MOVQ_PqEq, BxOpcodeGroupSSE_0f6eQ }, - /* 0F 6E /qm */ { BxPrefixSSE, BX_IA_MOVQ_PqEq, BxOpcodeGroupSSE_0f6eQ }, - /* 0F 6F /qr */ { BxPrefixSSE, BX_IA_MOVQ_PqQq, BxOpcodeGroupSSE_0f6f }, - /* 0F 6F /qm */ { BxPrefixSSE, BX_IA_MOVQ_PqQq, BxOpcodeGroupSSE_0f6f }, - /* 0F 70 /qr */ { BxPrefixSSE | BxImmediate_Ib, BX_IA_PSHUFW_PqQqIb, BxOpcodeGroupSSE_0f70 }, - /* 0F 70 /qm */ { BxPrefixSSE | BxImmediate_Ib, BX_IA_PSHUFW_PqQqIb, BxOpcodeGroupSSE_0f70 }, - /* 0F 71 /qr */ { BxGroup12, BX_IA_ERROR, BxOpcodeInfoG12R }, - /* 0F 71 /qm */ { 0, BX_IA_ERROR }, // SSE Group G12 - /* 0F 72 /qr */ { BxGroup13, BX_IA_ERROR, BxOpcodeInfoG13R }, - /* 0F 72 /qm */ { 0, BX_IA_ERROR }, // SSE Group G13 - /* 0F 73 /qr */ { BxGroup14, BX_IA_ERROR, BxOpcodeInfoG14R }, - /* 0F 73 /qm */ { 0, BX_IA_ERROR }, // SSE Group G14 - /* 0F 74 /qr */ { BxPrefixSSE, BX_IA_PCMPEQB_PqQq, BxOpcodeGroupSSE_0f74 }, - /* 0F 74 /qm */ { BxPrefixSSE, BX_IA_PCMPEQB_PqQq, BxOpcodeGroupSSE_0f74 }, - /* 0F 75 /qr */ { BxPrefixSSE, BX_IA_PCMPEQW_PqQq, BxOpcodeGroupSSE_0f75 }, - /* 0F 75 /qm */ { BxPrefixSSE, BX_IA_PCMPEQW_PqQq, BxOpcodeGroupSSE_0f75 }, - /* 0F 76 /qr */ { BxPrefixSSE, BX_IA_PCMPEQD_PqQq, BxOpcodeGroupSSE_0f76 }, - /* 0F 76 /qm */ { BxPrefixSSE, BX_IA_PCMPEQD_PqQq, BxOpcodeGroupSSE_0f76 }, - /* 0F 77 /qr */ { BxPrefixSSE, BX_IA_EMMS, BxOpcodeGroupSSE_ERR }, - /* 0F 77 /qm */ { BxPrefixSSE, BX_IA_EMMS, BxOpcodeGroupSSE_ERR }, - /* 0F 78 /qr */ { BxPrefixSSE, BX_IA_VMREAD_EqGq, BxOpcodeGroupSSE_ERR }, - /* 0F 78 /qm */ { BxPrefixSSE, BX_IA_VMREAD_EqGq, BxOpcodeGroupSSE_ERR }, - /* 0F 79 /qr */ { BxPrefixSSE, BX_IA_VMWRITE_GqEq, BxOpcodeGroupSSE_ERR }, - /* 0F 79 /qm */ { BxPrefixSSE, BX_IA_VMWRITE_GqEq, BxOpcodeGroupSSE_ERR }, - /* 0F 7A /qr */ { 0, BX_IA_ERROR }, - /* 0F 7A /qm */ { 0, BX_IA_ERROR }, - /* 0F 7B /qr */ { 0, BX_IA_ERROR }, - /* 0F 7B /qm */ { 0, BX_IA_ERROR }, - /* 0F 7C /qr */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f7c }, - /* 0F 7C /qm */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f7c }, - /* 0F 7D /qr */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f7d }, - /* 0F 7D /qm */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f7d }, - /* 0F 7E /qr */ { BxPrefixSSE, BX_IA_MOVQ_EqPq, BxOpcodeGroupSSE_0f7eQ }, - /* 0F 7E /qm */ { BxPrefixSSE, BX_IA_MOVQ_EqPq, BxOpcodeGroupSSE_0f7eQ }, - /* 0F 7F /qr */ { BxPrefixSSE, BX_IA_MOVQ_QqPq, BxOpcodeGroupSSE_0f7f }, - /* 0F 7F /qm */ { BxPrefixSSE, BX_IA_MOVQ_QqPq, BxOpcodeGroupSSE_0f7f }, - /* 0F 80 /qr */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JO_Jq }, - /* 0F 80 /qm */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JO_Jq }, - /* 0F 81 /qr */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNO_Jq }, - /* 0F 81 /qm */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNO_Jq }, - /* 0F 82 /qr */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JB_Jq }, - /* 0F 82 /qm */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JB_Jq }, - /* 0F 83 /qr */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNB_Jq }, - /* 0F 83 /qm */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNB_Jq }, - /* 0F 84 /qr */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JZ_Jq }, - /* 0F 84 /qm */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JZ_Jq }, - /* 0F 85 /qr */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNZ_Jq }, - /* 0F 85 /qm */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNZ_Jq }, - /* 0F 86 /qr */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JBE_Jq }, - /* 0F 86 /qm */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JBE_Jq }, - /* 0F 87 /qr */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNBE_Jq }, - /* 0F 87 /qm */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNBE_Jq }, - /* 0F 88 /qr */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JS_Jq }, - /* 0F 88 /qm */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JS_Jq }, - /* 0F 89 /qr */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNS_Jq }, - /* 0F 89 /qm */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNS_Jq }, - /* 0F 8A /qr */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JP_Jq }, - /* 0F 8A /qm */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JP_Jq }, - /* 0F 8B /qr */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNP_Jq }, - /* 0F 8B /qm */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNP_Jq }, - /* 0F 8C /qr */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JL_Jq }, - /* 0F 8C /qm */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JL_Jq }, - /* 0F 8D /qr */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNL_Jq }, - /* 0F 8D /qm */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNL_Jq }, - /* 0F 8E /qr */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JLE_Jq }, - /* 0F 8E /qm */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JLE_Jq }, - /* 0F 8F /qr */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNLE_Jq }, - /* 0F 8F /qm */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNLE_Jq }, - /* 0F 90 /qr */ { 0, BX_IA_SETO_Eb }, - /* 0F 90 /qm */ { 0, BX_IA_SETO_Eb }, - /* 0F 91 /qr */ { 0, BX_IA_SETNO_Eb }, - /* 0F 91 /qm */ { 0, BX_IA_SETNO_Eb }, - /* 0F 92 /qr */ { 0, BX_IA_SETB_Eb }, - /* 0F 92 /qm */ { 0, BX_IA_SETB_Eb }, - /* 0F 93 /qr */ { 0, BX_IA_SETNB_Eb }, - /* 0F 93 /qm */ { 0, BX_IA_SETNB_Eb }, - /* 0F 94 /qr */ { 0, BX_IA_SETZ_Eb }, - /* 0F 94 /qm */ { 0, BX_IA_SETZ_Eb }, - /* 0F 95 /qr */ { 0, BX_IA_SETNZ_Eb }, - /* 0F 95 /qm */ { 0, BX_IA_SETNZ_Eb }, - /* 0F 96 /qr */ { 0, BX_IA_SETBE_Eb }, - /* 0F 96 /qm */ { 0, BX_IA_SETBE_Eb }, - /* 0F 97 /qr */ { 0, BX_IA_SETNBE_Eb }, - /* 0F 97 /qm */ { 0, BX_IA_SETNBE_Eb }, - /* 0F 98 /qr */ { 0, BX_IA_SETS_Eb }, - /* 0F 98 /qm */ { 0, BX_IA_SETS_Eb }, - /* 0F 99 /qr */ { 0, BX_IA_SETNS_Eb }, - /* 0F 99 /qm */ { 0, BX_IA_SETNS_Eb }, - /* 0F 9A /qr */ { 0, BX_IA_SETP_Eb }, - /* 0F 9A /qm */ { 0, BX_IA_SETP_Eb }, - /* 0F 9B /qr */ { 0, BX_IA_SETNP_Eb }, - /* 0F 9B /qm */ { 0, BX_IA_SETNP_Eb }, - /* 0F 9C /qr */ { 0, BX_IA_SETL_Eb }, - /* 0F 9C /qm */ { 0, BX_IA_SETL_Eb }, - /* 0F 9D /qr */ { 0, BX_IA_SETNL_Eb }, - /* 0F 9D /qm */ { 0, BX_IA_SETNL_Eb }, - /* 0F 9E /qr */ { 0, BX_IA_SETLE_Eb }, - /* 0F 9E /qm */ { 0, BX_IA_SETLE_Eb }, - /* 0F 9F /qr */ { 0, BX_IA_SETNLE_Eb }, - /* 0F 9F /qm */ { 0, BX_IA_SETNLE_Eb }, - /* 0F A0 /qr */ { 0, BX_IA_PUSH64_FS }, - /* 0F A0 /qm */ { 0, BX_IA_PUSH64_FS }, - /* 0F A1 /qr */ { 0, BX_IA_POP64_FS }, - /* 0F A1 /qm */ { 0, BX_IA_POP64_FS }, - /* 0F A2 /qr */ { 0, BX_IA_CPUID }, - /* 0F A2 /qm */ { 0, BX_IA_CPUID }, - /* 0F A3 /qr */ { 0, BX_IA_BT_EqGqR }, - /* 0F A3 /qm */ { 0, BX_IA_BT_EqGqM }, - /* 0F A4 /qr */ { BxImmediate_Ib, BX_IA_SHLD_EqGq }, - /* 0F A4 /qm */ { BxImmediate_Ib, BX_IA_SHLD_EqGq }, - /* 0F A5 /qr */ { 0, BX_IA_SHLD_EqGq }, - /* 0F A5 /qm */ { 0, BX_IA_SHLD_EqGq }, - /* 0F A6 /qr */ { 0, BX_IA_ERROR }, - /* 0F A6 /qm */ { 0, BX_IA_ERROR }, - /* 0F A7 /qr */ { 0, BX_IA_ERROR }, - /* 0F A7 /qm */ { 0, BX_IA_ERROR }, - /* 0F A8 /qr */ { 0, BX_IA_PUSH64_GS }, - /* 0F A8 /qm */ { 0, BX_IA_PUSH64_GS }, - /* 0F A9 /qr */ { 0, BX_IA_POP64_GS }, - /* 0F A9 /qm */ { 0, BX_IA_POP64_GS }, - /* 0F AA /qr */ { BxTraceEnd, BX_IA_RSM }, - /* 0F AA /qm */ { BxTraceEnd, BX_IA_RSM }, - /* 0F AB /qr */ { 0, BX_IA_BTS_EqGqR }, - /* 0F AB /qm */ { BxLockable, BX_IA_BTS_EqGqM }, - /* 0F AC /qr */ { BxImmediate_Ib, BX_IA_SHRD_EqGq }, - /* 0F AC /qm */ { BxImmediate_Ib, BX_IA_SHRD_EqGq }, - /* 0F AD /qr */ { 0, BX_IA_SHRD_EqGq }, - /* 0F AD /qm */ { 0, BX_IA_SHRD_EqGq }, - /* 0F AE /qr */ { BxGroup15, BX_IA_ERROR, BxOpcodeInfoG15R64 }, - /* 0F AE /qm */ { BxGroup15, BX_IA_ERROR, BxOpcodeInfoG15M }, - /* 0F AF /qr */ { 0, BX_IA_IMUL_GqEq }, - /* 0F AF /qm */ { 0, BX_IA_IMUL_GqEq }, - /* 0F B0 /qr */ { 0, BX_IA_CMPXCHG_EbGb }, - /* 0F B0 /qm */ { BxLockable, BX_IA_CMPXCHG_EbGb }, - /* 0F B1 /qr */ { 0, BX_IA_CMPXCHG_EqGq }, - /* 0F B1 /qm */ { BxLockable, BX_IA_CMPXCHG_EqGq }, - /* 0F B2 /qr */ { 0, BX_IA_ERROR }, // LSS - /* 0F B2 /qm */ { 0, BX_IA_LSS_GqMp }, // TODO: LSS_GdMp for AMD CPU - /* 0F B3 /qr */ { 0, BX_IA_BTR_EqGqR }, - /* 0F B3 /qm */ { BxLockable, BX_IA_BTR_EqGqM }, - /* 0F B4 /qr */ { 0, BX_IA_ERROR }, // LFS - /* 0F B4 /qm */ { 0, BX_IA_LFS_GqMp }, // TODO: LFS_GdMp for AMD CPU - /* 0F B5 /qr */ { 0, BX_IA_ERROR }, // LGS - /* 0F B5 /qm */ { 0, BX_IA_LGS_GqMp }, // TODO: LGS_GdMp for AMD CPU - /* 0F B6 /qr */ { 0, BX_IA_MOVZX_GqEb }, - /* 0F B6 /qm */ { 0, BX_IA_MOVZX_GqEb }, - /* 0F B7 /qr */ { 0, BX_IA_MOVZX_GqEw }, - /* 0F B7 /qm */ { 0, BX_IA_MOVZX_GqEw }, - /* 0F B8 /qr */ { BxPrefixSSEF3, BX_IA_POPCNT_GqEq }, - /* 0F B8 /qm */ { BxPrefixSSEF3, BX_IA_POPCNT_GqEq }, - /* 0F B9 /qr */ { BxTraceEnd, BX_IA_UD2B }, - /* 0F B9 /qm */ { BxTraceEnd, BX_IA_UD2B }, - /* 0F BA /qr */ { BxGroup8, BX_IA_ERROR, BxOpcodeInfo64G8EqIb }, - /* 0F BA /qm */ { BxGroup8, BX_IA_ERROR, BxOpcodeInfo64G8EqIb }, - /* 0F BB /qr */ { 0, BX_IA_BTC_EqGqR }, - /* 0F BB /qm */ { BxLockable, BX_IA_BTC_EqGqM }, - /* 0F BC /qr */ { 0, BX_IA_BSF_GqEq }, - /* 0F BC /qm */ { 0, BX_IA_BSF_GqEq }, - /* 0F BD /qr */ { 0, BX_IA_BSR_GqEq }, - /* 0F BD /qm */ { 0, BX_IA_BSR_GqEq }, - /* 0F BE /qr */ { 0, BX_IA_MOVSX_GqEb }, - /* 0F BE /qm */ { 0, BX_IA_MOVSX_GqEb }, - /* 0F BF /qr */ { 0, BX_IA_MOVSX_GqEw }, - /* 0F BF /qm */ { 0, BX_IA_MOVSX_GqEw }, - /* 0F C0 /qr */ { 0, BX_IA_XADD_EbGb }, - /* 0F C0 /qm */ { BxLockable, BX_IA_XADD_EbGb }, - /* 0F C1 /qr */ { 0, BX_IA_XADD_EqGq }, - /* 0F C1 /qm */ { BxLockable, BX_IA_XADD_EqGq }, - /* 0F C2 /qr */ { BxPrefixSSE | BxImmediate_Ib, BX_IA_CMPPS_VpsWpsIb, BxOpcodeGroupSSE_0fc2 }, - /* 0F C2 /qm */ { BxPrefixSSE | BxImmediate_Ib, BX_IA_CMPPS_VpsWpsIb, BxOpcodeGroupSSE_0fc2 }, - /* 0F C3 /qr */ { 0, BX_IA_ERROR }, // MOVNTI SSE group - /* 0F C3 /qm */ { BxPrefixSSE, BX_IA_MOVNTI_MqGq, BxOpcodeGroupSSE_ERR }, - /* 0F C4 /qr */ { BxPrefixSSE | BxImmediate_Ib, BX_IA_PINSRW_PqEwIb, BxOpcodeGroupSSE_0fc4 }, - /* 0F C4 /qm */ { BxPrefixSSE | BxImmediate_Ib, BX_IA_PINSRW_PqEwIb, BxOpcodeGroupSSE_0fc4 }, - /* 0F C5 /qr */ { BxPrefixSSE | BxImmediate_Ib, BX_IA_PEXTRW_GdPqIb, BxOpcodeGroupSSE_0fc5R }, - /* 0F C5 /qm */ { 0, BX_IA_ERROR }, // PEXTRW SSE group - /* 0F C6 /qr */ { BxPrefixSSE | BxImmediate_Ib, BX_IA_SHUFPS_VpsWpsIb, BxOpcodeGroupSSE_0fc6 }, - /* 0F C6 /qm */ { BxPrefixSSE | BxImmediate_Ib, BX_IA_SHUFPS_VpsWpsIb, BxOpcodeGroupSSE_0fc6 }, - /* 0F C7 /qr */ { 0, BX_IA_ERROR }, // CMPXCHG16B G9 group - /* 0F C7 /qm */ { BxGroup9, BX_IA_ERROR, BxOpcodeInfo64G9qM }, - /* 0F C8 /qr */ { 0, BX_IA_BSWAP_RRX }, - /* 0F C8 /qm */ { 0, BX_IA_BSWAP_RRX }, - /* 0F C9 /qr */ { 0, BX_IA_BSWAP_RRX }, - /* 0F C9 /qm */ { 0, BX_IA_BSWAP_RRX }, - /* 0F CA /qr */ { 0, BX_IA_BSWAP_RRX }, - /* 0F CA /qm */ { 0, BX_IA_BSWAP_RRX }, - /* 0F CB /qr */ { 0, BX_IA_BSWAP_RRX }, - /* 0F CB /qm */ { 0, BX_IA_BSWAP_RRX }, - /* 0F CC /qr */ { 0, BX_IA_BSWAP_RRX }, - /* 0F CC /qm */ { 0, BX_IA_BSWAP_RRX }, - /* 0F CD /qr */ { 0, BX_IA_BSWAP_RRX }, - /* 0F CD /qm */ { 0, BX_IA_BSWAP_RRX }, - /* 0F CE /qr */ { 0, BX_IA_BSWAP_RRX }, - /* 0F CE /qm */ { 0, BX_IA_BSWAP_RRX }, - /* 0F CF /qr */ { 0, BX_IA_BSWAP_RRX }, - /* 0F CF /qm */ { 0, BX_IA_BSWAP_RRX }, - /* 0F D0 /qr */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0fd0 }, - /* 0F D0 /qm */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0fd0 }, - /* 0F D1 /qr */ { BxPrefixSSE, BX_IA_PSRLW_PqQq, BxOpcodeGroupSSE_0fd1 }, - /* 0F D1 /qm */ { BxPrefixSSE, BX_IA_PSRLW_PqQq, BxOpcodeGroupSSE_0fd1 }, - /* 0F D2 /qr */ { BxPrefixSSE, BX_IA_PSRLD_PqQq, BxOpcodeGroupSSE_0fd2 }, - /* 0F D2 /qm */ { BxPrefixSSE, BX_IA_PSRLD_PqQq, BxOpcodeGroupSSE_0fd2 }, - /* 0F D3 /qr */ { BxPrefixSSE, BX_IA_PSRLQ_PqQq, BxOpcodeGroupSSE_0fd3 }, - /* 0F D3 /qm */ { BxPrefixSSE, BX_IA_PSRLQ_PqQq, BxOpcodeGroupSSE_0fd3 }, - /* 0F D4 /qr */ { BxPrefixSSE, BX_IA_PADDQ_PqQq, BxOpcodeGroupSSE_0fd4 }, - /* 0F D4 /qm */ { BxPrefixSSE, BX_IA_PADDQ_PqQq, BxOpcodeGroupSSE_0fd4 }, - /* 0F D5 /qr */ { BxPrefixSSE, BX_IA_PMULLW_PqQq, BxOpcodeGroupSSE_0fd5 }, - /* 0F D5 /qm */ { BxPrefixSSE, BX_IA_PMULLW_PqQq, BxOpcodeGroupSSE_0fd5 }, - /* 0F D6 /qr */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0fd6 }, - /* 0F D6 /qm */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0fd6 }, - /* 0F D7 /qr */ { BxPrefixSSE, BX_IA_PMOVMSKB_GdPRq, BxOpcodeGroupSSE_0fd7 }, - /* 0F D7 /qm */ { 0, BX_IA_ERROR }, // PMOVMSKB is reg/reg form only - /* 0F D8 /qr */ { BxPrefixSSE, BX_IA_PSUBUSB_PqQq, BxOpcodeGroupSSE_0fd8 }, - /* 0F D8 /qm */ { BxPrefixSSE, BX_IA_PSUBUSB_PqQq, BxOpcodeGroupSSE_0fd8 }, - /* 0F D9 /qr */ { BxPrefixSSE, BX_IA_PSUBUSW_PqQq, BxOpcodeGroupSSE_0fd9 }, - /* 0F D9 /qm */ { BxPrefixSSE, BX_IA_PSUBUSW_PqQq, BxOpcodeGroupSSE_0fd9 }, - /* 0F DA /qr */ { BxPrefixSSE, BX_IA_PMINUB_PqQq, BxOpcodeGroupSSE_0fda }, - /* 0F DA /qm */ { BxPrefixSSE, BX_IA_PMINUB_PqQq, BxOpcodeGroupSSE_0fda }, - /* 0F DB /qr */ { BxPrefixSSE, BX_IA_PAND_PqQq, BxOpcodeGroupSSE_0fdb }, - /* 0F DB /qm */ { BxPrefixSSE, BX_IA_PAND_PqQq, BxOpcodeGroupSSE_0fdb }, - /* 0F DC /qr */ { BxPrefixSSE, BX_IA_PADDUSB_PqQq, BxOpcodeGroupSSE_0fdc }, - /* 0F DC /qm */ { BxPrefixSSE, BX_IA_PADDUSB_PqQq, BxOpcodeGroupSSE_0fdc }, - /* 0F DD /qr */ { BxPrefixSSE, BX_IA_PADDUSW_PqQq, BxOpcodeGroupSSE_0fdd }, - /* 0F DD /qm */ { BxPrefixSSE, BX_IA_PADDUSW_PqQq, BxOpcodeGroupSSE_0fdd }, - /* 0F DE /qr */ { BxPrefixSSE, BX_IA_PMAXUB_PqQq, BxOpcodeGroupSSE_0fde }, - /* 0F DE /qm */ { BxPrefixSSE, BX_IA_PMAXUB_PqQq, BxOpcodeGroupSSE_0fde }, - /* 0F DF /qr */ { BxPrefixSSE, BX_IA_PANDN_PqQq, BxOpcodeGroupSSE_0fdf }, - /* 0F DF /qm */ { BxPrefixSSE, BX_IA_PANDN_PqQq, BxOpcodeGroupSSE_0fdf }, - /* 0F E0 /qr */ { BxPrefixSSE, BX_IA_PAVGB_PqQq, BxOpcodeGroupSSE_0fe0 }, - /* 0F E0 /qm */ { BxPrefixSSE, BX_IA_PAVGB_PqQq, BxOpcodeGroupSSE_0fe0 }, - /* 0F E1 /qr */ { BxPrefixSSE, BX_IA_PSRAW_PqQq, BxOpcodeGroupSSE_0fe1 }, - /* 0F E1 /qm */ { BxPrefixSSE, BX_IA_PSRAW_PqQq, BxOpcodeGroupSSE_0fe1 }, - /* 0F E2 /qr */ { BxPrefixSSE, BX_IA_PSRAD_PqQq, BxOpcodeGroupSSE_0fe2 }, - /* 0F E2 /qm */ { BxPrefixSSE, BX_IA_PSRAD_PqQq, BxOpcodeGroupSSE_0fe2 }, - /* 0F E3 /qr */ { BxPrefixSSE, BX_IA_PAVGW_PqQq, BxOpcodeGroupSSE_0fe3 }, - /* 0F E3 /qm */ { BxPrefixSSE, BX_IA_PAVGW_PqQq, BxOpcodeGroupSSE_0fe3 }, - /* 0F E4 /qr */ { BxPrefixSSE, BX_IA_PMULHUW_PqQq, BxOpcodeGroupSSE_0fe4 }, - /* 0F E4 /qm */ { BxPrefixSSE, BX_IA_PMULHUW_PqQq, BxOpcodeGroupSSE_0fe4 }, - /* 0F E5 /qr */ { BxPrefixSSE, BX_IA_PMULHW_PqQq, BxOpcodeGroupSSE_0fe5 }, - /* 0F E5 /qm */ { BxPrefixSSE, BX_IA_PMULHW_PqQq, BxOpcodeGroupSSE_0fe5 }, - /* 0F E6 /qr */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0fe6 }, - /* 0F E6 /qm */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0fe6 }, - /* 0F E7 /qr */ { 0, BX_IA_ERROR }, // MOVNTQ/MOVNTDQ SSE group - /* 0F E7 /qm */ { BxPrefixSSE, BX_IA_MOVNTQ_MqPq, BxOpcodeGroupSSE_0fe7M }, - /* 0F E8 /qr */ { BxPrefixSSE, BX_IA_PSUBSB_PqQq, BxOpcodeGroupSSE_0fe8 }, - /* 0F E8 /qm */ { BxPrefixSSE, BX_IA_PSUBSB_PqQq, BxOpcodeGroupSSE_0fe8 }, - /* 0F E9 /qr */ { BxPrefixSSE, BX_IA_PSUBSW_PqQq, BxOpcodeGroupSSE_0fe9 }, - /* 0F E9 /qm */ { BxPrefixSSE, BX_IA_PSUBSW_PqQq, BxOpcodeGroupSSE_0fe9 }, - /* 0F EA /qr */ { BxPrefixSSE, BX_IA_PMINSW_PqQq, BxOpcodeGroupSSE_0fea }, - /* 0F EA /qm */ { BxPrefixSSE, BX_IA_PMINSW_PqQq, BxOpcodeGroupSSE_0fea }, - /* 0F EB /qr */ { BxPrefixSSE, BX_IA_POR_PqQq, BxOpcodeGroupSSE_0feb }, - /* 0F EB /qm */ { BxPrefixSSE, BX_IA_POR_PqQq, BxOpcodeGroupSSE_0feb }, - /* 0F EC /qr */ { BxPrefixSSE, BX_IA_PADDSB_PqQq, BxOpcodeGroupSSE_0fec }, - /* 0F EC /qm */ { BxPrefixSSE, BX_IA_PADDSB_PqQq, BxOpcodeGroupSSE_0fec }, - /* 0F ED /qr */ { BxPrefixSSE, BX_IA_PADDSW_PqQq, BxOpcodeGroupSSE_0fed }, - /* 0F ED /qm */ { BxPrefixSSE, BX_IA_PADDSW_PqQq, BxOpcodeGroupSSE_0fed }, - /* 0F EE /qr */ { BxPrefixSSE, BX_IA_PMAXSW_PqQq, BxOpcodeGroupSSE_0fee }, - /* 0F EE /qm */ { BxPrefixSSE, BX_IA_PMAXSW_PqQq, BxOpcodeGroupSSE_0fee }, - /* 0F EF /qr */ { BxPrefixSSE, BX_IA_PXOR_PqQq, BxOpcodeGroupSSE_0fef }, - /* 0F EF /qm */ { BxPrefixSSE, BX_IA_PXOR_PqQq, BxOpcodeGroupSSE_0fef }, - /* 0F F0 /qr */ { 0, BX_IA_ERROR }, // LDDQU SSE group - /* 0F F0 /wm */ { BxPrefixSSEF2, BX_IA_LDDQU_VdqMdq }, - /* 0F F1 /qr */ { BxPrefixSSE, BX_IA_PSLLW_PqQq, BxOpcodeGroupSSE_0ff1 }, - /* 0F F1 /qm */ { BxPrefixSSE, BX_IA_PSLLW_PqQq, BxOpcodeGroupSSE_0ff1 }, - /* 0F F2 /qr */ { BxPrefixSSE, BX_IA_PSLLD_PqQq, BxOpcodeGroupSSE_0ff2 }, - /* 0F F2 /qm */ { BxPrefixSSE, BX_IA_PSLLD_PqQq, BxOpcodeGroupSSE_0ff2 }, - /* 0F F3 /qr */ { BxPrefixSSE, BX_IA_PSLLQ_PqQq, BxOpcodeGroupSSE_0ff3 }, - /* 0F F3 /qm */ { BxPrefixSSE, BX_IA_PSLLQ_PqQq, BxOpcodeGroupSSE_0ff3 }, - /* 0F F4 /qr */ { BxPrefixSSE, BX_IA_PMULUDQ_PqQq, BxOpcodeGroupSSE_0ff4 }, - /* 0F F4 /qm */ { BxPrefixSSE, BX_IA_PMULUDQ_PqQq, BxOpcodeGroupSSE_0ff4 }, - /* 0F F5 /qr */ { BxPrefixSSE, BX_IA_PMADDWD_PqQq, BxOpcodeGroupSSE_0ff5 }, - /* 0F F5 /qm */ { BxPrefixSSE, BX_IA_PMADDWD_PqQq, BxOpcodeGroupSSE_0ff5 }, - /* 0F F6 /qr */ { BxPrefixSSE, BX_IA_PSADBW_PqQq, BxOpcodeGroupSSE_0ff6 }, - /* 0F F6 /qm */ { BxPrefixSSE, BX_IA_PSADBW_PqQq, BxOpcodeGroupSSE_0ff6 }, - /* 0F F7 /qr */ { BxPrefixSSE, BX_IA_MASKMOVQ_PqPRq, BxOpcodeGroupSSE_0ff7R }, - /* 0F F7 /qm */ { 0, BX_IA_ERROR }, // MASKMOV SSE group - /* 0F F8 /qr */ { BxPrefixSSE, BX_IA_PSUBB_PqQq, BxOpcodeGroupSSE_0ff8 }, - /* 0F F8 /qm */ { BxPrefixSSE, BX_IA_PSUBB_PqQq, BxOpcodeGroupSSE_0ff8 }, - /* 0F F9 /qr */ { BxPrefixSSE, BX_IA_PSUBW_PqQq, BxOpcodeGroupSSE_0ff9 }, - /* 0F F9 /qm */ { BxPrefixSSE, BX_IA_PSUBW_PqQq, BxOpcodeGroupSSE_0ff9 }, - /* 0F FA /qr */ { BxPrefixSSE, BX_IA_PSUBD_PqQq, BxOpcodeGroupSSE_0ffa }, - /* 0F FA /qm */ { BxPrefixSSE, BX_IA_PSUBD_PqQq, BxOpcodeGroupSSE_0ffa }, - /* 0F FB /qr */ { BxPrefixSSE, BX_IA_PSUBQ_PqQq, BxOpcodeGroupSSE_0ffb }, - /* 0F FB /qm */ { BxPrefixSSE, BX_IA_PSUBQ_PqQq, BxOpcodeGroupSSE_0ffb }, - /* 0F FC /qr */ { BxPrefixSSE, BX_IA_PADDB_PqQq, BxOpcodeGroupSSE_0ffc }, - /* 0F FC /qm */ { BxPrefixSSE, BX_IA_PADDB_PqQq, BxOpcodeGroupSSE_0ffc }, - /* 0F FD /qr */ { BxPrefixSSE, BX_IA_PADDW_PqQq, BxOpcodeGroupSSE_0ffd }, - /* 0F FD /qm */ { BxPrefixSSE, BX_IA_PADDW_PqQq, BxOpcodeGroupSSE_0ffd }, - /* 0F FE /qr */ { BxPrefixSSE, BX_IA_PADDD_PqQq, BxOpcodeGroupSSE_0ffe }, - /* 0F FE /qm */ { BxPrefixSSE, BX_IA_PADDD_PqQq, BxOpcodeGroupSSE_0ffe }, - /* 0F FF /qr */ { 0, BX_IA_ERROR }, - /* 0F FF /qm */ { 0, BX_IA_ERROR } + /* 0F 00 /q */ { BxGroup6, BX_IA_ERROR, BxOpcodeInfoG6 }, + /* 0F 01 /q */ { BxGroup7, BX_IA_ERROR, BxOpcodeInfoG7q }, + /* 0F 02 /q */ { 0, BX_IA_LAR_GvEw }, + /* 0F 03 /q */ { 0, BX_IA_LSL_GvEw }, + /* 0F 04 /q */ { 0, BX_IA_ERROR }, + /* 0F 05 /q */ { BxTraceEnd, BX_IA_SYSCALL }, + /* 0F 06 /q */ { 0, BX_IA_CLTS }, + /* 0F 07 /q */ { BxTraceEnd, BX_IA_SYSRET }, + /* 0F 08 /q */ { BxTraceEnd, BX_IA_INVD }, + /* 0F 09 /q */ { BxTraceEnd, BX_IA_WBINVD }, + /* 0F 0A /q */ { 0, BX_IA_ERROR }, + /* 0F 0B /q */ { BxTraceEnd, BX_IA_UD2A }, + /* 0F 0C /q */ { 0, BX_IA_ERROR }, + /* 0F 0D /q */ { 0, BX_IA_PREFETCHW }, // 3DNow! PREFETCHW on AMD, NOP on Intel + /* 0F 0E /q */ { 0, BX_IA_FEMMS }, // 3DNow! FEMMS + /* 0F 0F /q */ { BxImmediate_Ib, BX_IA_ERROR }, // 3DNow! Opcode Table + /* 0F 10 /q */ { BxPrefixSSE, BX_IA_MOVUPS_VpsWps, BxOpcodeGroupSSE_0f10 }, + /* 0F 11 /q */ { BxPrefixSSE | BxArithDstRM, BX_IA_MOVUPS_WpsVps, BxOpcodeGroupSSE_0f11 }, + /* 0F 12 /q */ { BxPrefixSSE, BX_IA_MOVLPS_VpsMq, BxOpcodeGroupSSE_0f12 }, + /* 0F 13 /q */ { BxPrefixSSE, BX_IA_MOVLPS_MqVps, BxOpcodeGroupSSE_0f13M }, + /* 0F 14 /q */ { BxPrefixSSE, BX_IA_UNPCKLPS_VpsWdq, BxOpcodeGroupSSE_0f14 }, + /* 0F 15 /q */ { BxPrefixSSE, BX_IA_UNPCKHPS_VpsWdq, BxOpcodeGroupSSE_0f15 }, + /* 0F 16 /q */ { BxPrefixSSE, BX_IA_MOVHPS_VpsMq, BxOpcodeGroupSSE_0f16 }, + /* 0F 17 /q */ { BxPrefixSSE, BX_IA_MOVHPS_MqVps, BxOpcodeGroupSSE_0f17M }, + /* 0F 18 /q */ { 0, BX_IA_PREFETCH }, // opcode group G16, PREFETCH hints + /* 0F 19 /q */ { 0, BX_IA_NOP }, // multi-byte NOP + /* 0F 1A /q */ { 0, BX_IA_NOP }, // multi-byte NOP + /* 0F 1B /q */ { 0, BX_IA_NOP }, // multi-byte NOP + /* 0F 1C /q */ { 0, BX_IA_NOP }, // multi-byte NOP + /* 0F 1D /q */ { 0, BX_IA_NOP }, // multi-byte NOP + /* 0F 1E /q */ { 0, BX_IA_NOP }, // multi-byte NOP + /* 0F 1F /q */ { 0, BX_IA_NOP }, // multi-byte NOP + /* 0F 20 /q */ { BxGroupN, BX_IA_ERROR, BxOpcodeInfoMOV_RqCq }, + /* 0F 21 /q */ { 0, BX_IA_MOV_RqDq }, + /* 0F 22 /q */ { BxGroupN, BX_IA_ERROR, BxOpcodeInfoMOV_CqRq }, + /* 0F 23 /q */ { BxTraceEnd, BX_IA_MOV_DqRq }, + /* 0F 24 /q */ { 0, BX_IA_ERROR }, + /* 0F 25 /q */ { 0, BX_IA_ERROR }, + /* 0F 26 /q */ { 0, BX_IA_ERROR }, + /* 0F 27 /q */ { 0, BX_IA_ERROR }, + /* 0F 28 /q */ { BxPrefixSSE, BX_IA_MOVAPS_VpsWps, BxOpcodeGroupSSE_0f28 }, + /* 0F 29 /q */ { BxPrefixSSE | BxArithDstRM, BX_IA_MOVAPS_WpsVps, BxOpcodeGroupSSE_0f29 }, + /* 0F 2A /q */ { BxPrefixSSE, BX_IA_CVTPI2PS_VpsQq, BxOpcodeGroupSSE_0f2a }, + /* 0F 2B /q */ { BxPrefixSSE, BX_IA_MOVNTPS_MpsVps, BxOpcodeGroupSSE_0f2bM }, + /* 0F 2C /q */ { BxPrefixSSE, BX_IA_CVTTPS2PI_PqWps, BxOpcodeGroupSSE_0f2c }, + /* 0F 2D /q */ { BxPrefixSSE, BX_IA_CVTPS2PI_PqWps, BxOpcodeGroupSSE_0f2d }, + /* 0F 2E /q */ { BxPrefixSSE, BX_IA_UCOMISS_VssWss, BxOpcodeGroupSSE_0f2e }, + /* 0F 2F /q */ { BxPrefixSSE, BX_IA_COMISS_VpsWps, BxOpcodeGroupSSE_0f2f }, + /* 0F 30 /q */ { 0, BX_IA_WRMSR }, + /* 0F 31 /q */ { 0, BX_IA_RDTSC }, + /* 0F 32 /q */ { 0, BX_IA_RDMSR }, + /* 0F 33 /q */ { 0, BX_IA_RDPMC }, + /* 0F 34 /q */ { BxTraceEnd, BX_IA_SYSENTER }, + /* 0F 35 /q */ { BxTraceEnd, BX_IA_SYSEXIT }, + /* 0F 36 /q */ { 0, BX_IA_ERROR }, + /* 0F 37 /q */ { 0, BX_IA_ERROR }, + /* 0F 38 /q */ { Bx3ByteOp, BX_IA_ERROR, BxOpcode3ByteTable0f38 }, // 3-byte escape + /* 0F 39 /q */ { 0, BX_IA_ERROR }, + /* 0F 3A /q */ { Bx3ByteOp | BxImmediate_Ib, BX_IA_ERROR, BxOpcode3ByteTable0f3a }, // 3-byte escape + /* 0F 3B /q */ { 0, BX_IA_ERROR }, + /* 0F 3C /q */ { 0, BX_IA_ERROR }, + /* 0F 3D /q */ { 0, BX_IA_ERROR }, + /* 0F 3E /q */ { 0, BX_IA_ERROR }, + /* 0F 3F /q */ { 0, BX_IA_ERROR }, + /* 0F 40 /q */ { 0, BX_IA_CMOVO_GqEq }, + /* 0F 41 /q */ { 0, BX_IA_CMOVNO_GqEq }, + /* 0F 42 /q */ { 0, BX_IA_CMOVB_GqEq }, + /* 0F 43 /q */ { 0, BX_IA_CMOVNB_GqEq }, + /* 0F 44 /q */ { 0, BX_IA_CMOVZ_GqEq }, + /* 0F 45 /q */ { 0, BX_IA_CMOVNZ_GqEq }, + /* 0F 46 /q */ { 0, BX_IA_CMOVBE_GqEq }, + /* 0F 47 /q */ { 0, BX_IA_CMOVNBE_GqEq }, + /* 0F 48 /q */ { 0, BX_IA_CMOVS_GqEq }, + /* 0F 49 /q */ { 0, BX_IA_CMOVNS_GqEq }, + /* 0F 4A /q */ { 0, BX_IA_CMOVP_GqEq }, + /* 0F 4B /q */ { 0, BX_IA_CMOVNP_GqEq }, + /* 0F 4C /q */ { 0, BX_IA_CMOVL_GqEq }, + /* 0F 4D /q */ { 0, BX_IA_CMOVNL_GqEq }, + /* 0F 4E /q */ { 0, BX_IA_CMOVLE_GqEq }, + /* 0F 4F /q */ { 0, BX_IA_CMOVNLE_GqEq }, + /* 0F 50 /q */ { BxPrefixSSE, BX_IA_MOVMSKPS_GdVRps, BxOpcodeGroupSSE_0f50R }, + /* 0F 51 /q */ { BxPrefixSSE, BX_IA_SQRTPS_VpsWps, BxOpcodeGroupSSE_0f51 }, + /* 0F 52 /q */ { BxPrefixSSE, BX_IA_RSQRTPS_VpsWps, BxOpcodeGroupSSE_0f52 }, + /* 0F 53 /q */ { BxPrefixSSE, BX_IA_RCPPS_VpsWps, BxOpcodeGroupSSE_0f53 }, + /* 0F 54 /q */ { BxPrefixSSE, BX_IA_ANDPS_VpsWps, BxOpcodeGroupSSE_0f54 }, + /* 0F 55 /q */ { BxPrefixSSE, BX_IA_ANDNPS_VpsWps, BxOpcodeGroupSSE_0f55 }, + /* 0F 56 /q */ { BxPrefixSSE, BX_IA_ORPS_VpsWps, BxOpcodeGroupSSE_0f56 }, + /* 0F 57 /q */ { BxPrefixSSE, BX_IA_XORPS_VpsWps, BxOpcodeGroupSSE_0f57 }, + /* 0F 58 /q */ { BxPrefixSSE, BX_IA_ADDPS_VpsWps, BxOpcodeGroupSSE_0f58 }, + /* 0F 59 /q */ { BxPrefixSSE, BX_IA_MULPS_VpsWps, BxOpcodeGroupSSE_0f59 }, + /* 0F 5A /q */ { BxPrefixSSE, BX_IA_CVTPS2PD_VpsWps, BxOpcodeGroupSSE_0f5a }, + /* 0F 5B /q */ { BxPrefixSSE, BX_IA_CVTDQ2PS_VpsWdq, BxOpcodeGroupSSE_0f5b }, + /* 0F 5C /q */ { BxPrefixSSE, BX_IA_SUBPS_VpsWps, BxOpcodeGroupSSE_0f5c }, + /* 0F 5D /q */ { BxPrefixSSE, BX_IA_MINPS_VpsWps, BxOpcodeGroupSSE_0f5d }, + /* 0F 5E /q */ { BxPrefixSSE, BX_IA_DIVPS_VpsWps, BxOpcodeGroupSSE_0f5e }, + /* 0F 5F /q */ { BxPrefixSSE, BX_IA_MAXPS_VpsWps, BxOpcodeGroupSSE_0f5f }, + /* 0F 60 /q */ { BxPrefixSSE, BX_IA_PUNPCKLBW_PqQd, BxOpcodeGroupSSE_0f60 }, + /* 0F 61 /q */ { BxPrefixSSE, BX_IA_PUNPCKLWD_PqQd, BxOpcodeGroupSSE_0f61 }, + /* 0F 62 /q */ { BxPrefixSSE, BX_IA_PUNPCKLDQ_PqQd, BxOpcodeGroupSSE_0f62 }, + /* 0F 63 /q */ { BxPrefixSSE, BX_IA_PACKSSWB_PqQq, BxOpcodeGroupSSE_0f63 }, + /* 0F 64 /q */ { BxPrefixSSE, BX_IA_PCMPGTB_PqQq, BxOpcodeGroupSSE_0f64 }, + /* 0F 65 /q */ { BxPrefixSSE, BX_IA_PCMPGTW_PqQq, BxOpcodeGroupSSE_0f65 }, + /* 0F 66 /q */ { BxPrefixSSE, BX_IA_PCMPGTD_PqQq, BxOpcodeGroupSSE_0f66 }, + /* 0F 67 /q */ { BxPrefixSSE, BX_IA_PACKUSWB_PqQq, BxOpcodeGroupSSE_0f67 }, + /* 0F 68 /q */ { BxPrefixSSE, BX_IA_PUNPCKHBW_PqQq, BxOpcodeGroupSSE_0f68 }, + /* 0F 69 /q */ { BxPrefixSSE, BX_IA_PUNPCKHWD_PqQq, BxOpcodeGroupSSE_0f69 }, + /* 0F 6A /q */ { BxPrefixSSE, BX_IA_PUNPCKHDQ_PqQq, BxOpcodeGroupSSE_0f6a }, + /* 0F 6B /q */ { BxPrefixSSE, BX_IA_PACKSSDW_PqQq, BxOpcodeGroupSSE_0f6b }, + /* 0F 6C /q */ { BxPrefixSSE66, BX_IA_PUNPCKLQDQ_VdqWdq }, + /* 0F 6D /q */ { BxPrefixSSE66, BX_IA_PUNPCKHQDQ_VdqWdq }, + /* 0F 6E /q */ { BxPrefixSSE, BX_IA_MOVQ_PqEq, BxOpcodeGroupSSE_0f6eQ }, + /* 0F 6F /q */ { BxPrefixSSE, BX_IA_MOVQ_PqQq, BxOpcodeGroupSSE_0f6f }, + /* 0F 70 /q */ { BxPrefixSSE | BxImmediate_Ib, BX_IA_PSHUFW_PqQqIb, BxOpcodeGroupSSE_0f70 }, + /* 0F 71 /q */ { BxGroup12, BX_IA_ERROR, BxOpcodeInfoG12R }, + /* 0F 72 /q */ { BxGroup13, BX_IA_ERROR, BxOpcodeInfoG13R }, + /* 0F 73 /q */ { BxGroup14, BX_IA_ERROR, BxOpcodeInfoG14R }, + /* 0F 74 /q */ { BxPrefixSSE, BX_IA_PCMPEQB_PqQq, BxOpcodeGroupSSE_0f74 }, + /* 0F 75 /q */ { BxPrefixSSE, BX_IA_PCMPEQW_PqQq, BxOpcodeGroupSSE_0f75 }, + /* 0F 76 /q */ { BxPrefixSSE, BX_IA_PCMPEQD_PqQq, BxOpcodeGroupSSE_0f76 }, + /* 0F 77 /q */ { BxPrefixSSE, BX_IA_EMMS, BxOpcodeGroupSSE_ERR }, + /* 0F 78 /q */ { BxPrefixSSE, BX_IA_VMREAD_EqGq, BxOpcodeGroupSSE_ERR }, + /* 0F 79 /q */ { BxPrefixSSE, BX_IA_VMWRITE_GqEq, BxOpcodeGroupSSE_ERR }, + /* 0F 7A /q */ { 0, BX_IA_ERROR }, + /* 0F 7B /q */ { 0, BX_IA_ERROR }, + /* 0F 7C /q */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f7c }, + /* 0F 7D /q */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f7d }, + /* 0F 7E /q */ { BxPrefixSSE, BX_IA_MOVQ_EqPq, BxOpcodeGroupSSE_0f7eQ }, + /* 0F 7F /q */ { BxPrefixSSE, BX_IA_MOVQ_QqPq, BxOpcodeGroupSSE_0f7f }, + /* 0F 80 /q */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JO_Jq }, + /* 0F 81 /q */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNO_Jq }, + /* 0F 82 /q */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JB_Jq }, + /* 0F 83 /q */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNB_Jq }, + /* 0F 84 /q */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JZ_Jq }, + /* 0F 85 /q */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNZ_Jq }, + /* 0F 86 /q */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JBE_Jq }, + /* 0F 87 /q */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNBE_Jq }, + /* 0F 88 /q */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JS_Jq }, + /* 0F 89 /q */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNS_Jq }, + /* 0F 8A /q */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JP_Jq }, + /* 0F 8B /q */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNP_Jq }, + /* 0F 8C /q */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JL_Jq }, + /* 0F 8D /q */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNL_Jq }, + /* 0F 8E /q */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JLE_Jq }, + /* 0F 8F /q */ { BxImmediate_BrOff32 | BxTraceJCC, BX_IA_JNLE_Jq }, + /* 0F 90 /q */ { 0, BX_IA_SETO_Eb }, + /* 0F 91 /q */ { 0, BX_IA_SETNO_Eb }, + /* 0F 92 /q */ { 0, BX_IA_SETB_Eb }, + /* 0F 93 /q */ { 0, BX_IA_SETNB_Eb }, + /* 0F 94 /q */ { 0, BX_IA_SETZ_Eb }, + /* 0F 95 /q */ { 0, BX_IA_SETNZ_Eb }, + /* 0F 96 /q */ { 0, BX_IA_SETBE_Eb }, + /* 0F 97 /q */ { 0, BX_IA_SETNBE_Eb }, + /* 0F 98 /q */ { 0, BX_IA_SETS_Eb }, + /* 0F 99 /q */ { 0, BX_IA_SETNS_Eb }, + /* 0F 9A /q */ { 0, BX_IA_SETP_Eb }, + /* 0F 9B /q */ { 0, BX_IA_SETNP_Eb }, + /* 0F 9C /q */ { 0, BX_IA_SETL_Eb }, + /* 0F 9D /q */ { 0, BX_IA_SETNL_Eb }, + /* 0F 9E /q */ { 0, BX_IA_SETLE_Eb }, + /* 0F 9F /q */ { 0, BX_IA_SETNLE_Eb }, + /* 0F A0 /q */ { 0, BX_IA_PUSH64_FS }, + /* 0F A1 /q */ { 0, BX_IA_POP64_FS }, + /* 0F A2 /q */ { 0, BX_IA_CPUID }, + /* 0F A3 /q */ { 0, BX_IA_BT_EqGq }, + /* 0F A4 /q */ { BxImmediate_Ib, BX_IA_SHLD_EqGq }, + /* 0F A5 /q */ { 0, BX_IA_SHLD_EqGq }, + /* 0F A6 /q */ { 0, BX_IA_ERROR }, + /* 0F A7 /q */ { 0, BX_IA_ERROR }, + /* 0F A8 /q */ { 0, BX_IA_PUSH64_GS }, + /* 0F A9 /q */ { 0, BX_IA_POP64_GS }, + /* 0F AA /q */ { BxTraceEnd, BX_IA_RSM }, + /* 0F AB /q */ { BxLockable, BX_IA_BTS_EqGq }, + /* 0F AC /q */ { BxImmediate_Ib, BX_IA_SHRD_EqGq }, + /* 0F AD /q */ { 0, BX_IA_SHRD_EqGq }, + /* 0F AE /q */ { BxGroup15, BX_IA_ERROR, BxOpcodeInfoG15q }, + /* 0F AF /q */ { 0, BX_IA_IMUL_GqEq }, + /* 0F B0 /q */ { BxLockable, BX_IA_CMPXCHG_EbGb }, + /* 0F B1 /q */ { BxLockable, BX_IA_CMPXCHG_EqGq }, + /* 0F B2 /q */ { 0, BX_IA_LSS_GqMp }, // TODO: LSS_GdMp for AMD CPU + /* 0F B3 /q */ { BxLockable, BX_IA_BTR_EqGq }, + /* 0F B4 /q */ { 0, BX_IA_LFS_GqMp }, // TODO: LFS_GdMp for AMD CPU + /* 0F B5 /q */ { 0, BX_IA_LGS_GqMp }, // TODO: LGS_GdMp for AMD CPU + /* 0F B6 /q */ { 0, BX_IA_MOVZX_GqEb }, + /* 0F B7 /q */ { 0, BX_IA_MOVZX_GqEw }, + /* 0F B8 /q */ { BxPrefixSSEF3, BX_IA_POPCNT_GqEq }, + /* 0F B9 /q */ { BxTraceEnd, BX_IA_UD2B }, + /* 0F BA /q */ { BxGroup8, BX_IA_ERROR, BxOpcodeInfo64G8EqIb }, + /* 0F BB /q */ { BxLockable, BX_IA_BTC_EqGq }, + /* 0F BC /q */ { 0, BX_IA_BSF_GqEq }, + /* 0F BD /q */ { 0, BX_IA_BSR_GqEq }, + /* 0F BE /q */ { 0, BX_IA_MOVSX_GqEb }, + /* 0F BF /q */ { 0, BX_IA_MOVSX_GqEw }, + /* 0F C0 /q */ { BxLockable, BX_IA_XADD_EbGb }, + /* 0F C1 /q */ { BxLockable, BX_IA_XADD_EqGq }, + /* 0F C2 /q */ { BxPrefixSSE | BxImmediate_Ib, BX_IA_CMPPS_VpsWpsIb, BxOpcodeGroupSSE_0fc2 }, + /* 0F C3 /q */ { BxPrefixSSE, BX_IA_MOVNTI_MqGq, BxOpcodeGroupSSE_ERR }, + /* 0F C4 /q */ { BxPrefixSSE | BxImmediate_Ib, BX_IA_PINSRW_PqEwIb, BxOpcodeGroupSSE_0fc4 }, + /* 0F C5 /q */ { BxPrefixSSE | BxImmediate_Ib, BX_IA_PEXTRW_GdPqIb, BxOpcodeGroupSSE_0fc5R }, + /* 0F C6 /q */ { BxPrefixSSE | BxImmediate_Ib, BX_IA_SHUFPS_VpsWpsIb, BxOpcodeGroupSSE_0fc6 }, + /* 0F C7 /q */ { BxGroup9, BX_IA_ERROR, BxOpcodeInfo64G9qM }, + /* 0F C8 /q */ { 0, BX_IA_BSWAP_RRX }, + /* 0F C9 /q */ { 0, BX_IA_BSWAP_RRX }, + /* 0F CA /q */ { 0, BX_IA_BSWAP_RRX }, + /* 0F CB /q */ { 0, BX_IA_BSWAP_RRX }, + /* 0F CC /q */ { 0, BX_IA_BSWAP_RRX }, + /* 0F CD /q */ { 0, BX_IA_BSWAP_RRX }, + /* 0F CE /q */ { 0, BX_IA_BSWAP_RRX }, + /* 0F CF /q */ { 0, BX_IA_BSWAP_RRX }, + /* 0F D0 /q */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0fd0 }, + /* 0F D1 /q */ { BxPrefixSSE, BX_IA_PSRLW_PqQq, BxOpcodeGroupSSE_0fd1 }, + /* 0F D2 /q */ { BxPrefixSSE, BX_IA_PSRLD_PqQq, BxOpcodeGroupSSE_0fd2 }, + /* 0F D3 /q */ { BxPrefixSSE, BX_IA_PSRLQ_PqQq, BxOpcodeGroupSSE_0fd3 }, + /* 0F D4 /q */ { BxPrefixSSE, BX_IA_PADDQ_PqQq, BxOpcodeGroupSSE_0fd4 }, + /* 0F D5 /q */ { BxPrefixSSE, BX_IA_PMULLW_PqQq, BxOpcodeGroupSSE_0fd5 }, + /* 0F D6 /q */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0fd6 }, + /* 0F D7 /q */ { BxPrefixSSE, BX_IA_PMOVMSKB_GdPRq, BxOpcodeGroupSSE_0fd7R }, + /* 0F D8 /q */ { BxPrefixSSE, BX_IA_PSUBUSB_PqQq, BxOpcodeGroupSSE_0fd8 }, + /* 0F D9 /q */ { BxPrefixSSE, BX_IA_PSUBUSW_PqQq, BxOpcodeGroupSSE_0fd9 }, + /* 0F DA /q */ { BxPrefixSSE, BX_IA_PMINUB_PqQq, BxOpcodeGroupSSE_0fda }, + /* 0F DB /q */ { BxPrefixSSE, BX_IA_PAND_PqQq, BxOpcodeGroupSSE_0fdb }, + /* 0F DC /q */ { BxPrefixSSE, BX_IA_PADDUSB_PqQq, BxOpcodeGroupSSE_0fdc }, + /* 0F DD /q */ { BxPrefixSSE, BX_IA_PADDUSW_PqQq, BxOpcodeGroupSSE_0fdd }, + /* 0F DE /q */ { BxPrefixSSE, BX_IA_PMAXUB_PqQq, BxOpcodeGroupSSE_0fde }, + /* 0F DF /q */ { BxPrefixSSE, BX_IA_PANDN_PqQq, BxOpcodeGroupSSE_0fdf }, + /* 0F E0 /q */ { BxPrefixSSE, BX_IA_PAVGB_PqQq, BxOpcodeGroupSSE_0fe0 }, + /* 0F E1 /q */ { BxPrefixSSE, BX_IA_PSRAW_PqQq, BxOpcodeGroupSSE_0fe1 }, + /* 0F E2 /q */ { BxPrefixSSE, BX_IA_PSRAD_PqQq, BxOpcodeGroupSSE_0fe2 }, + /* 0F E3 /q */ { BxPrefixSSE, BX_IA_PAVGW_PqQq, BxOpcodeGroupSSE_0fe3 }, + /* 0F E4 /q */ { BxPrefixSSE, BX_IA_PMULHUW_PqQq, BxOpcodeGroupSSE_0fe4 }, + /* 0F E5 /q */ { BxPrefixSSE, BX_IA_PMULHW_PqQq, BxOpcodeGroupSSE_0fe5 }, + /* 0F E6 /q */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0fe6 }, + /* 0F E7 /q */ { BxPrefixSSE, BX_IA_MOVNTQ_MqPq, BxOpcodeGroupSSE_0fe7M }, + /* 0F E8 /q */ { BxPrefixSSE, BX_IA_PSUBSB_PqQq, BxOpcodeGroupSSE_0fe8 }, + /* 0F E9 /q */ { BxPrefixSSE, BX_IA_PSUBSW_PqQq, BxOpcodeGroupSSE_0fe9 }, + /* 0F EA /q */ { BxPrefixSSE, BX_IA_PMINSW_PqQq, BxOpcodeGroupSSE_0fea }, + /* 0F EB /q */ { BxPrefixSSE, BX_IA_POR_PqQq, BxOpcodeGroupSSE_0feb }, + /* 0F EC /q */ { BxPrefixSSE, BX_IA_PADDSB_PqQq, BxOpcodeGroupSSE_0fec }, + /* 0F ED /q */ { BxPrefixSSE, BX_IA_PADDSW_PqQq, BxOpcodeGroupSSE_0fed }, + /* 0F EE /q */ { BxPrefixSSE, BX_IA_PMAXSW_PqQq, BxOpcodeGroupSSE_0fee }, + /* 0F EF /q */ { BxPrefixSSE, BX_IA_PXOR_PqQq, BxOpcodeGroupSSE_0fef }, + /* 0F F0 /q */ { BxPrefixSSEF2, BX_IA_LDDQU_VdqMdq }, + /* 0F F1 /q */ { BxPrefixSSE, BX_IA_PSLLW_PqQq, BxOpcodeGroupSSE_0ff1 }, + /* 0F F2 /q */ { BxPrefixSSE, BX_IA_PSLLD_PqQq, BxOpcodeGroupSSE_0ff2 }, + /* 0F F3 /q */ { BxPrefixSSE, BX_IA_PSLLQ_PqQq, BxOpcodeGroupSSE_0ff3 }, + /* 0F F4 /q */ { BxPrefixSSE, BX_IA_PMULUDQ_PqQq, BxOpcodeGroupSSE_0ff4 }, + /* 0F F5 /q */ { BxPrefixSSE, BX_IA_PMADDWD_PqQq, BxOpcodeGroupSSE_0ff5 }, + /* 0F F6 /q */ { BxPrefixSSE, BX_IA_PSADBW_PqQq, BxOpcodeGroupSSE_0ff6 }, + /* 0F F7 /q */ { BxPrefixSSE, BX_IA_MASKMOVQ_PqPRq, BxOpcodeGroupSSE_0ff7R }, + /* 0F F8 /q */ { BxPrefixSSE, BX_IA_PSUBB_PqQq, BxOpcodeGroupSSE_0ff8 }, + /* 0F F9 /q */ { BxPrefixSSE, BX_IA_PSUBW_PqQq, BxOpcodeGroupSSE_0ff9 }, + /* 0F FA /q */ { BxPrefixSSE, BX_IA_PSUBD_PqQq, BxOpcodeGroupSSE_0ffa }, + /* 0F FB /q */ { BxPrefixSSE, BX_IA_PSUBQ_PqQq, BxOpcodeGroupSSE_0ffb }, + /* 0F FC /q */ { BxPrefixSSE, BX_IA_PADDB_PqQq, BxOpcodeGroupSSE_0ffc }, + /* 0F FD /q */ { BxPrefixSSE, BX_IA_PADDW_PqQq, BxOpcodeGroupSSE_0ffd }, + /* 0F FE /q */ { BxPrefixSSE, BX_IA_PADDD_PqQq, BxOpcodeGroupSSE_0ffe }, + /* 0F FF /q */ { 0, BX_IA_ERROR } }; int BX_CPP_AttrRegparmN(3) @@ -3362,7 +1826,7 @@ fetch_b1: i->setB1(b1); - unsigned index = (b1+offset) << 1; + unsigned index = b1+offset; unsigned attr = BxOpcodeInfo64[index].Attr; @@ -3408,7 +1872,6 @@ fetch_b1: } mod_mem = 1; - index++; // /m form i->setRm(BX_TMP_REGISTER); i->setSibBase(rm); // initialize with rm to use BxResolve32Base @@ -3559,6 +2022,9 @@ modrm_done: case BxGroupN: OpcodeInfoPtr = &(OpcodeInfoPtr->AnotherArray[nnn & 0x7]); break; + case BxSplitGroupN: + OpcodeInfoPtr = &(OpcodeInfoPtr->AnotherArray[(nnn & 0x7) + (mod_mem << 3)]); + break; case Bx3ByteOp: OpcodeInfoPtr = &(OpcodeInfoPtr->AnotherArray[b3]); break; @@ -3574,7 +2040,10 @@ modrm_done: } continue; case BxFPEscape: - OpcodeInfoPtr = &(OpcodeInfoPtr->AnotherArray[b2 & 0x3f]); + if (mod_mem) + OpcodeInfoPtr = &(OpcodeInfoPtr->AnotherArray[nnn & 0x7]); + else + OpcodeInfoPtr = &(OpcodeInfoPtr->AnotherArray[(b2 & 0x3f) + 8]); break; default: BX_PANIC(("fetchdecode: Unknown opcode group")); diff --git a/bochs/cpu/fetchdecode_sse.h b/bochs/cpu/fetchdecode_sse.h index 959263b1a..3e0d3111a 100755 --- a/bochs/cpu/fetchdecode_sse.h +++ b/bochs/cpu/fetchdecode_sse.h @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////// -// $Id: fetchdecode_sse.h,v 1.28 2011-01-20 16:24:42 sshwarts Exp $ +// $Id: fetchdecode_sse.h,v 1.29 2011-01-21 16:07:51 sshwarts Exp $ ///////////////////////////////////////////////////////////////////////// // // Copyright (c) 2005-2011 Stanislav Shwartsman @@ -447,7 +447,7 @@ static const BxOpcodeInfo_t BxOpcodeGroupSSE_0fd6[6] = { /* F2 */ { 0, BX_IA_MOVDQ2Q_PqVRq } }; -static const BxOpcodeInfo_t BxOpcodeGroupSSE_0fd7[6] = { +static const BxOpcodeInfo_t BxOpcodeGroupSSE_0fd7R[6] = { /* 66 */ { 0, BX_IA_PMOVMSKB_GdUdq }, /* F3 */ { 0, BX_IA_ERROR }, /* F2 */ { 0, BX_IA_ERROR } diff --git a/bochs/cpu/fetchdecode_x87.h b/bochs/cpu/fetchdecode_x87.h index 22bf94046..d4618da51 100755 --- a/bochs/cpu/fetchdecode_x87.h +++ b/bochs/cpu/fetchdecode_x87.h @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////// -// $Id: fetchdecode_x87.h,v 1.3 2010-04-16 20:09:23 sshwarts Exp $ +// $Id: fetchdecode_x87.h,v 1.4 2011-01-21 16:07:51 sshwarts Exp $ ///////////////////////////////////////////////////////////////////////// // // Copyright (c) 2005-2010 Stanislav Shwartsman @@ -33,32 +33,32 @@ /* ************************************************************************ */ /* FPU Opcodes */ -// D8 (modrm is outside 00h - BFh) (mod != 11) -static const BxOpcodeInfo_t BxOpcodeInfo_FPGroupD8[8] = { - /* 0 */ { 0, BX_IA_FADD_SINGLE_REAL }, - /* 1 */ { 0, BX_IA_FMUL_SINGLE_REAL }, - /* 2 */ { 0, BX_IA_FCOM_SINGLE_REAL }, +// D8 (modrm is outside 00h - BFh) +static const BxOpcodeInfo_t BxOpcodeInfo_FPGroupD8[8*2] = { + /* /r form */ + /* 0 */ { 0, BX_IA_FADD_ST0_STj }, + /* 1 */ { 0, BX_IA_FMUL_ST0_STj }, + /* 2 */ { 0, BX_IA_FCOM_STi }, + /* 3 */ { 0, BX_IA_FCOMP_STi }, + /* 4 */ { 0, BX_IA_FSUB_ST0_STj }, + /* 5 */ { 0, BX_IA_FSUBR_ST0_STj }, + /* 6 */ { 0, BX_IA_FDIV_ST0_STj }, + /* 7 */ { 0, BX_IA_FDIVR_ST0_STj }, + + /* /m form */ + /* 0 */ { 0, BX_IA_FADD_SINGLE_REAL }, + /* 1 */ { 0, BX_IA_FMUL_SINGLE_REAL }, + /* 2 */ { 0, BX_IA_FCOM_SINGLE_REAL }, /* 3 */ { 0, BX_IA_FCOMP_SINGLE_REAL }, - /* 4 */ { 0, BX_IA_FSUB_SINGLE_REAL }, + /* 4 */ { 0, BX_IA_FSUB_SINGLE_REAL }, /* 5 */ { 0, BX_IA_FSUBR_SINGLE_REAL }, - /* 6 */ { 0, BX_IA_FDIV_SINGLE_REAL }, + /* 6 */ { 0, BX_IA_FDIV_SINGLE_REAL }, /* 7 */ { 0, BX_IA_FDIVR_SINGLE_REAL } }; -// D8 (modrm is outside 00h - BFh) (mod == 11) -static const BxOpcodeInfo_t BxOpcodeInfo_FloatingPointD8[8] = { - /* 0 */ { 0, BX_IA_FADD_ST0_STj }, - /* 1 */ { 0, BX_IA_FMUL_ST0_STj }, - /* 2 */ { 0, BX_IA_FCOM_STi }, - /* 3 */ { 0, BX_IA_FCOMP_STi }, - /* 4 */ { 0, BX_IA_FSUB_ST0_STj }, - /* 5 */ { 0, BX_IA_FSUBR_ST0_STj }, - /* 6 */ { 0, BX_IA_FDIV_ST0_STj }, - /* 7 */ { 0, BX_IA_FDIVR_ST0_STj } -}; - -// D9 (modrm is outside 00h - BFh) (mod != 11) -static const BxOpcodeInfo_t BxOpcodeInfo_FPGroupD9[8] = { +// D9 (modrm is outside 00h - BFh) +static const BxOpcodeInfo_t BxOpcodeInfo_FloatingPointD9[64+8] = { + /* /m form */ /* 0 */ { 0, BX_IA_FLD_SINGLE_REAL }, /* 1 */ { 0, BX_IA_ERROR }, /* 2 */ { 0, BX_IA_FST_SINGLE_REAL }, @@ -66,19 +66,17 @@ static const BxOpcodeInfo_t BxOpcodeInfo_FPGroupD9[8] = { /* 4 */ { 0, BX_IA_FLDENV }, /* 5 */ { 0, BX_IA_FLDCW }, /* 6 */ { 0, BX_IA_FNSTENV }, - /* 7 */ { 0, BX_IA_FNSTCW } -}; + /* 7 */ { 0, BX_IA_FNSTCW }, -// D9 (modrm is outside 00h - BFh) (mod == 11) -static const BxOpcodeInfo_t BxOpcodeInfo_FloatingPointD9[64] = { - /* D9 C0 */ { 0, BX_IA_FLD_STi }, - /* D9 C1 */ { 0, BX_IA_FLD_STi }, - /* D9 C2 */ { 0, BX_IA_FLD_STi }, - /* D9 C3 */ { 0, BX_IA_FLD_STi }, - /* D9 C4 */ { 0, BX_IA_FLD_STi }, - /* D9 C5 */ { 0, BX_IA_FLD_STi }, - /* D9 C6 */ { 0, BX_IA_FLD_STi }, - /* D9 C7 */ { 0, BX_IA_FLD_STi }, + /* /r form */ + /* D9 C0 */ { 0, BX_IA_FLD_STi }, + /* D9 C1 */ { 0, BX_IA_FLD_STi }, + /* D9 C2 */ { 0, BX_IA_FLD_STi }, + /* D9 C3 */ { 0, BX_IA_FLD_STi }, + /* D9 C4 */ { 0, BX_IA_FLD_STi }, + /* D9 C5 */ { 0, BX_IA_FLD_STi }, + /* D9 C6 */ { 0, BX_IA_FLD_STi }, + /* D9 C7 */ { 0, BX_IA_FLD_STi }, /* D9 C8 */ { 0, BX_IA_FXCH_STi }, /* D9 C9 */ { 0, BX_IA_FXCH_STi }, /* D9 CA */ { 0, BX_IA_FXCH_STi }, @@ -87,7 +85,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo_FloatingPointD9[64] = { /* D9 CD */ { 0, BX_IA_FXCH_STi }, /* D9 CE */ { 0, BX_IA_FXCH_STi }, /* D9 CF */ { 0, BX_IA_FXCH_STi }, - /* D9 D0 */ { 0, BX_IA_FNOP }, + /* D9 D0 */ { 0, BX_IA_FNOP }, /* D9 D1 */ { 0, BX_IA_ERROR }, /* D9 D2 */ { 0, BX_IA_ERROR }, /* D9 D3 */ { 0, BX_IA_ERROR }, @@ -103,54 +101,53 @@ static const BxOpcodeInfo_t BxOpcodeInfo_FloatingPointD9[64] = { /* D9 DD */ { 0, BX_IA_FSTP_STi }, // undocumented /* D9 DE */ { 0, BX_IA_FSTP_STi }, // undocumented /* D9 DF */ { 0, BX_IA_FSTP_STi }, // undocumented - /* D9 E0 */ { 0, BX_IA_FCHS }, - /* D9 E1 */ { 0, BX_IA_FABS }, + /* D9 E0 */ { 0, BX_IA_FCHS }, + /* D9 E1 */ { 0, BX_IA_FABS }, /* D9 E2 */ { 0, BX_IA_ERROR }, /* D9 E3 */ { 0, BX_IA_ERROR }, - /* D9 E4 */ { 0, BX_IA_FTST }, - /* D9 E5 */ { 0, BX_IA_FXAM }, - /* D9 E6 */ { 0, BX_IA_ERROR }, - /* D9 E7 */ { 0, BX_IA_ERROR }, - /* D9 E8 */ { 0, BX_IA_FLD1 }, - /* D9 E9 */ { 0, BX_IA_FLDL2T }, - /* D9 EA */ { 0, BX_IA_FLDL2E }, - /* D9 EB */ { 0, BX_IA_FLDPI }, - /* D9 EC */ { 0, BX_IA_FLDLG2 }, - /* D9 ED */ { 0, BX_IA_FLDLN2 }, - /* D9 EE */ { 0, BX_IA_FLDZ }, - /* D9 EF */ { 0, BX_IA_ERROR }, - /* D9 F0 */ { 0, BX_IA_F2XM1 }, - /* D9 F1 */ { 0, BX_IA_FYL2X }, - /* D9 F2 */ { 0, BX_IA_FPTAN }, - /* D9 F3 */ { 0, BX_IA_FPATAN }, + /* D9 E4 */ { 0, BX_IA_FTST }, + /* D9 E5 */ { 0, BX_IA_FXAM }, + /* D9 E6 */ { 0, BX_IA_ERROR }, + /* D9 E7 */ { 0, BX_IA_ERROR }, + /* D9 E8 */ { 0, BX_IA_FLD1 }, + /* D9 E9 */ { 0, BX_IA_FLDL2T }, + /* D9 EA */ { 0, BX_IA_FLDL2E }, + /* D9 EB */ { 0, BX_IA_FLDPI }, + /* D9 EC */ { 0, BX_IA_FLDLG2 }, + /* D9 ED */ { 0, BX_IA_FLDLN2 }, + /* D9 EE */ { 0, BX_IA_FLDZ }, + /* D9 EF */ { 0, BX_IA_ERROR }, + /* D9 F0 */ { 0, BX_IA_F2XM1 }, + /* D9 F1 */ { 0, BX_IA_FYL2X }, + /* D9 F2 */ { 0, BX_IA_FPTAN }, + /* D9 F3 */ { 0, BX_IA_FPATAN }, /* D9 F4 */ { 0, BX_IA_FXTRACT }, - /* D9 F5 */ { 0, BX_IA_FPREM1 }, + /* D9 F5 */ { 0, BX_IA_FPREM1 }, /* D9 F6 */ { 0, BX_IA_FDECSTP }, /* D9 F7 */ { 0, BX_IA_FINCSTP }, - /* D9 F8 */ { 0, BX_IA_FPREM }, + /* D9 F8 */ { 0, BX_IA_FPREM }, /* D9 F9 */ { 0, BX_IA_FYL2XP1 }, - /* D9 FA */ { 0, BX_IA_FSQRT }, + /* D9 FA */ { 0, BX_IA_FSQRT }, /* D9 FB */ { 0, BX_IA_FSINCOS }, /* D9 FC */ { 0, BX_IA_FRNDINT }, - /* D9 FD */ { 0, BX_IA_FSCALE }, - /* D9 FE */ { 0, BX_IA_FSIN }, - /* D9 FF */ { 0, BX_IA_FCOS } + /* D9 FD */ { 0, BX_IA_FSCALE }, + /* D9 FE */ { 0, BX_IA_FSIN }, + /* D9 FF */ { 0, BX_IA_FCOS } }; -// DA (modrm is outside 00h - BFh) (mod != 11) -static const BxOpcodeInfo_t BxOpcodeInfo_FPGroupDA[8] = { - /* 0 */ { 0, BX_IA_FIADD_DWORD_INTEGER }, - /* 1 */ { 0, BX_IA_FIMUL_DWORD_INTEGER }, - /* 2 */ { 0, BX_IA_FICOM_DWORD_INTEGER }, +// DA (modrm is outside 00h - BFh) +static const BxOpcodeInfo_t BxOpcodeInfo_FloatingPointDA[64+8] = { + /* /m form */ + /* 0 */ { 0, BX_IA_FIADD_DWORD_INTEGER }, + /* 1 */ { 0, BX_IA_FIMUL_DWORD_INTEGER }, + /* 2 */ { 0, BX_IA_FICOM_DWORD_INTEGER }, /* 3 */ { 0, BX_IA_FICOMP_DWORD_INTEGER }, - /* 4 */ { 0, BX_IA_FISUB_DWORD_INTEGER }, + /* 4 */ { 0, BX_IA_FISUB_DWORD_INTEGER }, /* 5 */ { 0, BX_IA_FISUBR_DWORD_INTEGER }, - /* 6 */ { 0, BX_IA_FIDIV_DWORD_INTEGER }, - /* 7 */ { 0, BX_IA_FIDIVR_DWORD_INTEGER } -}; + /* 6 */ { 0, BX_IA_FIDIV_DWORD_INTEGER }, + /* 7 */ { 0, BX_IA_FIDIVR_DWORD_INTEGER }, -// DA (modrm is outside 00h - BFh) (mod == 11) -static const BxOpcodeInfo_t BxOpcodeInfo_FloatingPointDA[64] = { + /* /r form */ /* DA C0 */ { 0, BX_IA_FCMOV_ST0_STj }, /* DA C1 */ { 0, BX_IA_FCMOV_ST0_STj }, /* DA C2 */ { 0, BX_IA_FCMOV_ST0_STj }, @@ -217,8 +214,9 @@ static const BxOpcodeInfo_t BxOpcodeInfo_FloatingPointDA[64] = { /* DA FF */ { 0, BX_IA_ERROR } }; -// DB (modrm is outside 00h - BFh) (mod != 11) -static const BxOpcodeInfo_t BxOpcodeInfo_FPGroupDB[8] = { +// DB (modrm is outside 00h - BFh) +static const BxOpcodeInfo_t BxOpcodeInfo_FloatingPointDB[64+8] = { + /* /m form */ /* 0 */ { 0, BX_IA_FILD_DWORD_INTEGER }, /* 1 */ { 0, BX_IA_FISTTP32 }, /* 2 */ { 0, BX_IA_FIST_DWORD_INTEGER }, @@ -226,11 +224,9 @@ static const BxOpcodeInfo_t BxOpcodeInfo_FPGroupDB[8] = { /* 4 */ { 0, BX_IA_ERROR }, /* 5 */ { 0, BX_IA_FLD_EXTENDED_REAL }, /* 6 */ { 0, BX_IA_ERROR }, - /* 7 */ { 0, BX_IA_FSTP_EXTENDED_REAL } -}; + /* 7 */ { 0, BX_IA_FSTP_EXTENDED_REAL }, -// DB (modrm is outside 00h - BFh) (mod == 11) -static const BxOpcodeInfo_t BxOpcodeInfo_FloatingPointDB[64] = { + /* /r form */ /* DB C0 */ { 0, BX_IA_FCMOV_ST0_STj }, /* DB C1 */ { 0, BX_IA_FCMOV_ST0_STj }, /* DB C2 */ { 0, BX_IA_FCMOV_ST0_STj }, @@ -265,12 +261,12 @@ static const BxOpcodeInfo_t BxOpcodeInfo_FloatingPointDB[64] = { /* DB DF */ { 0, BX_IA_FCMOV_ST0_STj }, /* DB E0 */ { 0, BX_IA_FPLEGACY }, // feni (287 only) /* DB E1 */ { 0, BX_IA_FPLEGACY }, // fdisi (287 only) - /* DB E2 */ { 0, BX_IA_FNCLEX }, - /* DB E3 */ { 0, BX_IA_FNINIT }, + /* DB E2 */ { 0, BX_IA_FNCLEX }, + /* DB E3 */ { 0, BX_IA_FNINIT }, /* DB E4 */ { 0, BX_IA_FPLEGACY }, // fsetpm (287 only) - /* DB E5 */ { 0, BX_IA_ERROR }, - /* DB E6 */ { 0, BX_IA_ERROR }, - /* DB E7 */ { 0, BX_IA_ERROR }, + /* DB E5 */ { 0, BX_IA_ERROR }, + /* DB E6 */ { 0, BX_IA_ERROR }, + /* DB E7 */ { 0, BX_IA_ERROR }, /* DB E8 */ { 0, BX_IA_FUCOMI_ST0_STj }, /* DB E9 */ { 0, BX_IA_FUCOMI_ST0_STj }, /* DB EA */ { 0, BX_IA_FUCOMI_ST0_STj }, @@ -279,14 +275,14 @@ static const BxOpcodeInfo_t BxOpcodeInfo_FloatingPointDB[64] = { /* DB ED */ { 0, BX_IA_FUCOMI_ST0_STj }, /* DB EE */ { 0, BX_IA_FUCOMI_ST0_STj }, /* DB EF */ { 0, BX_IA_FUCOMI_ST0_STj }, - /* DB F0 */ { 0, BX_IA_FCOMI_ST0_STj }, - /* DB F1 */ { 0, BX_IA_FCOMI_ST0_STj }, - /* DB F2 */ { 0, BX_IA_FCOMI_ST0_STj }, - /* DB F3 */ { 0, BX_IA_FCOMI_ST0_STj }, - /* DB F4 */ { 0, BX_IA_FCOMI_ST0_STj }, - /* DB F5 */ { 0, BX_IA_FCOMI_ST0_STj }, - /* DB F6 */ { 0, BX_IA_FCOMI_ST0_STj }, - /* DB F7 */ { 0, BX_IA_FCOMI_ST0_STj }, + /* DB F0 */ { 0, BX_IA_FCOMI_ST0_STj }, + /* DB F1 */ { 0, BX_IA_FCOMI_ST0_STj }, + /* DB F2 */ { 0, BX_IA_FCOMI_ST0_STj }, + /* DB F3 */ { 0, BX_IA_FCOMI_ST0_STj }, + /* DB F4 */ { 0, BX_IA_FCOMI_ST0_STj }, + /* DB F5 */ { 0, BX_IA_FCOMI_ST0_STj }, + /* DB F6 */ { 0, BX_IA_FCOMI_ST0_STj }, + /* DB F7 */ { 0, BX_IA_FCOMI_ST0_STj }, /* DB F8 */ { 0, BX_IA_ERROR }, /* DB F9 */ { 0, BX_IA_ERROR }, /* DB FA */ { 0, BX_IA_ERROR }, @@ -296,33 +292,42 @@ static const BxOpcodeInfo_t BxOpcodeInfo_FloatingPointDB[64] = { /* DB FE */ { 0, BX_IA_ERROR }, /* DB FF */ { 0, BX_IA_ERROR } }; - -// DC (modrm is outside 00h - BFh) (mod != 11) -static const BxOpcodeInfo_t BxOpcodeInfo_FPGroupDC[8] = { - /* 0 */ { 0, BX_IA_FADD_DOUBLE_REAL }, - /* 1 */ { 0, BX_IA_FMUL_DOUBLE_REAL }, - /* 2 */ { 0, BX_IA_FCOM_DOUBLE_REAL }, - /* 3 */ { 0, BX_IA_FCOMP_DOUBLE_REAL }, - /* 4 */ { 0, BX_IA_FSUB_DOUBLE_REAL }, - /* 5 */ { 0, BX_IA_FSUBR_DOUBLE_REAL }, - /* 6 */ { 0, BX_IA_FDIV_DOUBLE_REAL }, - /* 7 */ { 0, BX_IA_FDIVR_DOUBLE_REAL } -}; - -// DC (modrm is outside 00h - BFh) (mod == 11) -static const BxOpcodeInfo_t BxOpcodeInfo_FloatingPointDC[8] = { +// DC (modrm is outside 00h - BFh) +static const BxOpcodeInfo_t BxOpcodeInfo_FPGroupDC[8*2] = { + /* /r form */ /* 0 */ { 0, BX_IA_FADD_STi_ST0 }, /* 1 */ { 0, BX_IA_FMUL_STi_ST0 }, /* 2 */ { 0, BX_IA_FCOM_STi }, // undocumented /* 3 */ { 0, BX_IA_FCOMP_STi }, // undocumented /* 4 */ { 0, BX_IA_FSUBR_STi_ST0 }, - /* 5 */ { 0, BX_IA_FSUB_STi_ST0 }, + /* 5 */ { 0, BX_IA_FSUB_STi_ST0 }, /* 6 */ { 0, BX_IA_FDIVR_STi_ST0 }, - /* 7 */ { 0, BX_IA_FDIV_STi_ST0 } + /* 7 */ { 0, BX_IA_FDIV_STi_ST0 }, + + /* /m form */ + /* 0 */ { 0, BX_IA_FADD_DOUBLE_REAL }, + /* 1 */ { 0, BX_IA_FMUL_DOUBLE_REAL }, + /* 2 */ { 0, BX_IA_FCOM_DOUBLE_REAL }, + /* 3 */ { 0, BX_IA_FCOMP_DOUBLE_REAL }, + /* 4 */ { 0, BX_IA_FSUB_DOUBLE_REAL }, + /* 5 */ { 0, BX_IA_FSUBR_DOUBLE_REAL }, + /* 6 */ { 0, BX_IA_FDIV_DOUBLE_REAL }, + /* 7 */ { 0, BX_IA_FDIVR_DOUBLE_REAL } }; -// DD (modrm is outside 00h - BFh) (mod != 11) -static const BxOpcodeInfo_t BxOpcodeInfo_FPGroupDD[8] = { +// DD (modrm is outside 00h - BFh) +static const BxOpcodeInfo_t BxOpcodeInfo_FPGroupDD[8*2] = { + /* /r form */ + /* 0 */ { 0, BX_IA_FFREE_STi }, + /* 1 */ { 0, BX_IA_FXCH_STi }, // undocumented + /* 2 */ { 0, BX_IA_FST_STi }, + /* 3 */ { 0, BX_IA_FSTP_STi }, + /* 4 */ { 0, BX_IA_FUCOM_STi }, + /* 5 */ { 0, BX_IA_FUCOMP_STi }, + /* 6 */ { 0, BX_IA_ERROR }, + /* 7 */ { 0, BX_IA_ERROR }, + + /* /m form */ /* 0 */ { 0, BX_IA_FLD_DOUBLE_REAL }, /* 1 */ { 0, BX_IA_FISTTP64 }, /* 2 */ { 0, BX_IA_FST_DOUBLE_REAL }, @@ -333,33 +338,19 @@ static const BxOpcodeInfo_t BxOpcodeInfo_FPGroupDD[8] = { /* 7 */ { 0, BX_IA_FNSTSW } }; -// DD (modrm is outside 00h - BFh) (mod == 11) -static const BxOpcodeInfo_t BxOpcodeInfo_FloatingPointDD[8] = { - /* 0 */ { 0, BX_IA_FFREE_STi }, - /* 1 */ { 0, BX_IA_FXCH_STi }, // undocumented - /* 2 */ { 0, BX_IA_FST_STi }, - /* 3 */ { 0, BX_IA_FSTP_STi }, - /* 4 */ { 0, BX_IA_FUCOM_STi }, - /* 5 */ { 0, BX_IA_FUCOMP_STi }, - /* 6 */ { 0, BX_IA_ERROR }, - /* 7 */ { 0, BX_IA_ERROR } -}; - -// DE (modrm is outside 00h - BFh) (mod != 11) -static const BxOpcodeInfo_t BxOpcodeInfo_FPGroupDE[8] = { - /* 0 */ { 0, BX_IA_FIADD_WORD_INTEGER }, - /* 1 */ { 0, BX_IA_FIMUL_WORD_INTEGER }, - /* 2 */ { 0, BX_IA_FICOM_WORD_INTEGER }, +// DE (modrm is outside 00h - BFh) +static const BxOpcodeInfo_t BxOpcodeInfo_FloatingPointDE[64+8] = { + /* /m form */ + /* 0 */ { 0, BX_IA_FIADD_WORD_INTEGER }, + /* 1 */ { 0, BX_IA_FIMUL_WORD_INTEGER }, + /* 2 */ { 0, BX_IA_FICOM_WORD_INTEGER }, /* 3 */ { 0, BX_IA_FICOMP_WORD_INTEGER }, - /* 4 */ { 0, BX_IA_FISUB_WORD_INTEGER }, + /* 4 */ { 0, BX_IA_FISUB_WORD_INTEGER }, /* 5 */ { 0, BX_IA_FISUBR_WORD_INTEGER }, - /* 6 */ { 0, BX_IA_FIDIV_WORD_INTEGER }, - /* 7 */ { 0, BX_IA_FIDIVR_WORD_INTEGER } -}; + /* 6 */ { 0, BX_IA_FIDIV_WORD_INTEGER }, + /* 7 */ { 0, BX_IA_FIDIVR_WORD_INTEGER }, -// DE (modrm is outside 00h - BFh) (mod == 11) -static const BxOpcodeInfo_t BxOpcodeInfo_FloatingPointDE[64] = { - // all instructions pop FPU stack + /* /r form */ // all instructions pop FPU stack /* DE C0 */ { 0, BX_IA_FADD_STi_ST0 }, /* DE C1 */ { 0, BX_IA_FADD_STi_ST0 }, /* DE C2 */ { 0, BX_IA_FADD_STi_ST0 }, @@ -426,20 +417,19 @@ static const BxOpcodeInfo_t BxOpcodeInfo_FloatingPointDE[64] = { /* DE FF */ { 0, BX_IA_FDIV_STi_ST0 } }; -// DF (modrm is outside 00h - BFh) (mod != 11) -static const BxOpcodeInfo_t BxOpcodeInfo_FPGroupDF[8] = { - /* 0 */ { 0, BX_IA_FILD_WORD_INTEGER }, - /* 1 */ { 0, BX_IA_FISTTP16 }, - /* 2 */ { 0, BX_IA_FIST_WORD_INTEGER }, - /* 3 */ { 0, BX_IA_FISTP_WORD_INTEGER }, - /* 4 */ { 0, BX_IA_FBLD_PACKED_BCD }, - /* 5 */ { 0, BX_IA_FILD_QWORD_INTEGER }, - /* 6 */ { 0, BX_IA_FBSTP_PACKED_BCD }, - /* 7 */ { 0, BX_IA_FISTP_QWORD_INTEGER } -}; +// DF (modrm is outside 00h - BFh) +static const BxOpcodeInfo_t BxOpcodeInfo_FloatingPointDF[64+8] = { + /* /m form */ + /* 0 */ { 0, BX_IA_FILD_WORD_INTEGER }, + /* 1 */ { 0, BX_IA_FISTTP16 }, + /* 2 */ { 0, BX_IA_FIST_WORD_INTEGER }, + /* 3 */ { 0, BX_IA_FISTP_WORD_INTEGER }, + /* 4 */ { 0, BX_IA_FBLD_PACKED_BCD }, + /* 5 */ { 0, BX_IA_FILD_QWORD_INTEGER }, + /* 6 */ { 0, BX_IA_FBSTP_PACKED_BCD }, + /* 7 */ { 0, BX_IA_FISTP_QWORD_INTEGER }, -// DF (modrm is outside 00h - BFh) (mod == 11) -static const BxOpcodeInfo_t BxOpcodeInfo_FloatingPointDF[64] = { + /* /r form */ /* DF C0 */ { 0, BX_IA_FFREEP_STi }, // 287+ compatibility opcode /* DF C1 */ { 0, BX_IA_FFREEP_STi }, /* DF C2 */ { 0, BX_IA_FFREEP_STi }, diff --git a/bochs/cpu/ia_opcodes.h b/bochs/cpu/ia_opcodes.h index a5a690659..8bd7575c7 100644 --- a/bochs/cpu/ia_opcodes.h +++ b/bochs/cpu/ia_opcodes.h @@ -1,23 +1,23 @@ /////////////////////////////////////////////////////////////////////////,,,, -// $Id: ia_opcodes.h,v 1.69 2011-01-20 16:24:42 sshwarts Exp $,,, +// $Id: ia_opcodes.h,v 1.70 2011-01-21 16:07:51 sshwarts Exp $,,, ///////////////////////////////////////////////////////////////////////// // -// Copyright (c) 2008-2011 Stanislav Shwartsman +// Copyright (c) 2008-2010 Stanislav Shwartsman // Written by Stanislav Shwartsman [sshwarts at sourceforge net] // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either -// version 2 of the License, or (at your option) any later version.,,, +// version 2 of the License, or (at your option) any later version. // -// This library is distributed in the hope that it will be useful +// This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software,,, -// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA B 02110-1301 USA // ///////////////////////////////////////////////////////////////////////// @@ -120,22 +120,14 @@ bx_define_opcode(BX_IA_BT_EdIb, &BX_CPU_C::BT_EdIbM, &BX_CPU_C::BT_EdIbR, 0, 0) bx_define_opcode(BX_IA_BTS_EdIb, &BX_CPU_C::BTS_EdIbM, &BX_CPU_C::BTS_EdIbR, 0, 0) bx_define_opcode(BX_IA_BTR_EdIb, &BX_CPU_C::BTR_EdIbM, &BX_CPU_C::BTR_EdIbR, 0, 0) bx_define_opcode(BX_IA_BTC_EdIb, &BX_CPU_C::BTC_EdIbM, &BX_CPU_C::BTC_EdIbR, 0, 0) -bx_define_opcode(BX_IA_BT_EdGdM, &BX_CPU_C::BT_EdGdM, &BX_CPU_C::BT_EdGdM, 0, 0) -bx_define_opcode(BX_IA_BT_EdGdR, &BX_CPU_C::BT_EdGdR, &BX_CPU_C::BT_EdGdR, 0, 0) -bx_define_opcode(BX_IA_BT_EwGwM, &BX_CPU_C::BT_EwGwM, &BX_CPU_C::BT_EwGwM, 0, 0) -bx_define_opcode(BX_IA_BT_EwGwR, &BX_CPU_C::BT_EwGwR, &BX_CPU_C::BT_EwGwR, 0, 0) -bx_define_opcode(BX_IA_BTC_EdGdM, &BX_CPU_C::BTC_EdGdM, &BX_CPU_C::BTC_EdGdM, 0, 0) -bx_define_opcode(BX_IA_BTC_EdGdR, &BX_CPU_C::BTC_EdGdR, &BX_CPU_C::BTC_EdGdR, 0, 0) -bx_define_opcode(BX_IA_BTC_EwGwM, &BX_CPU_C::BTC_EwGwM, &BX_CPU_C::BTC_EwGwM, 0, 0) -bx_define_opcode(BX_IA_BTC_EwGwR, &BX_CPU_C::BTC_EwGwR, &BX_CPU_C::BTC_EwGwR, 0, 0) -bx_define_opcode(BX_IA_BTR_EdGdM, &BX_CPU_C::BTR_EdGdM, &BX_CPU_C::BTR_EdGdM, 0, 0) -bx_define_opcode(BX_IA_BTR_EdGdR, &BX_CPU_C::BTR_EdGdR, &BX_CPU_C::BTR_EdGdR, 0, 0) -bx_define_opcode(BX_IA_BTR_EwGwM, &BX_CPU_C::BTR_EwGwM, &BX_CPU_C::BTR_EwGwM, 0, 0) -bx_define_opcode(BX_IA_BTR_EwGwR, &BX_CPU_C::BTR_EwGwR, &BX_CPU_C::BTR_EwGwR, 0, 0) -bx_define_opcode(BX_IA_BTS_EdGdM, &BX_CPU_C::BTS_EdGdM, &BX_CPU_C::BTS_EdGdM, 0, 0) -bx_define_opcode(BX_IA_BTS_EdGdR, &BX_CPU_C::BTS_EdGdR, &BX_CPU_C::BTS_EdGdR, 0, 0) -bx_define_opcode(BX_IA_BTS_EwGwM, &BX_CPU_C::BTS_EwGwM, &BX_CPU_C::BTS_EwGwM, 0, 0) -bx_define_opcode(BX_IA_BTS_EwGwR, &BX_CPU_C::BTS_EwGwR, &BX_CPU_C::BTS_EwGwR, 0, 0) +bx_define_opcode(BX_IA_BT_EdGd, &BX_CPU_C::BT_EdGdM, &BX_CPU_C::BT_EdGdR, 0, 0) +bx_define_opcode(BX_IA_BT_EwGw, &BX_CPU_C::BT_EwGwM, &BX_CPU_C::BT_EwGwR, 0, 0) +bx_define_opcode(BX_IA_BTC_EdGd, &BX_CPU_C::BTC_EdGdM, &BX_CPU_C::BTC_EdGdR, 0, 0) +bx_define_opcode(BX_IA_BTC_EwGw, &BX_CPU_C::BTC_EwGwM, &BX_CPU_C::BTC_EwGwR, 0, 0) +bx_define_opcode(BX_IA_BTR_EdGd, &BX_CPU_C::BTR_EdGdM, &BX_CPU_C::BTR_EdGdR, 0, 0) +bx_define_opcode(BX_IA_BTR_EwGw, &BX_CPU_C::BTR_EwGwM, &BX_CPU_C::BTR_EwGwR, 0, 0) +bx_define_opcode(BX_IA_BTS_EdGd, &BX_CPU_C::BTS_EdGdM, &BX_CPU_C::BTS_EdGdR, 0, 0) +bx_define_opcode(BX_IA_BTS_EwGw, &BX_CPU_C::BTS_EwGwM, &BX_CPU_C::BTS_EwGwR, 0, 0) bx_define_opcode(BX_IA_CALL_Ed, &BX_CPU_C::LOAD_Ed, &BX_CPU_C::CALL_EdR, 0, 0) bx_define_opcode(BX_IA_CALL_Ew, &BX_CPU_C::LOAD_Ew, &BX_CPU_C::CALL_EwR, 0, 0) bx_define_opcode(BX_IA_CALL_Jd, NULL, &BX_CPU_C::CALL_Jd, 0, 0) @@ -273,21 +265,17 @@ bx_define_opcode(BX_IA_MOV_RdCR4, NULL, &BX_CPU_C::MOV_RdCR4, BX_CPU_486, 0) bx_define_opcode(BX_IA_MOV_RdDd, NULL, &BX_CPU_C::MOV_RdDd, 0, 0) bx_define_opcode(BX_IA_MOV_DdRd, NULL, &BX_CPU_C::MOV_DdRd, 0, 0) bx_define_opcode(BX_IA_MOV_EAXOd, NULL, &BX_CPU_C::MOV_EAXOd, 0, 0) -bx_define_opcode(BX_IA_MOV_EbGbM, &BX_CPU_C::MOV_EbGbM, &BX_CPU_C::MOV_EbGbM, 0, 0) bx_define_opcode(BX_IA_MOV_EbIb, &BX_CPU_C::MOV_EbIbM, &BX_CPU_C::MOV_RLIb, 0, 0) bx_define_opcode(BX_IA_MOV_EdId, &BX_CPU_C::MOV_EdIdM, &BX_CPU_C::MOV_ERXId, 0, 0) bx_define_opcode(BX_IA_MOV_EwIw, &BX_CPU_C::MOV_EwIwM, &BX_CPU_C::MOV_RXIw, 0, 0) bx_define_opcode(BX_IA_MOV_ERXId, NULL, &BX_CPU_C::MOV_ERXId, 0, 0) -bx_define_opcode(BX_IA_MOV_EwGwM, &BX_CPU_C::MOV_EwGwM, &BX_CPU_C::MOV_EwGwM, 0, 0) -bx_define_opcode(BX_IA_MOV_EwSwM, &BX_CPU_C::MOV_EwSwM, &BX_CPU_C::MOV_EwSwM, 0, 0) -bx_define_opcode(BX_IA_MOV_EwSwR, &BX_CPU_C::MOV_EwSwR, &BX_CPU_C::MOV_EwSwR, 0, 0) -bx_define_opcode(BX_IA_MOV_GbEbM, &BX_CPU_C::MOV_GbEbM, &BX_CPU_C::MOV_GbEbM, 0, 0) -bx_define_opcode(BX_IA_MOV_GbEbR, &BX_CPU_C::MOV_GbEbR, &BX_CPU_C::MOV_GbEbR, 0, 0) -bx_define_opcode(BX_IA_MOV32_EdGdM, &BX_CPU_C::MOV32_EdGdM, &BX_CPU_C::MOV32_EdGdM, 0, 0) -bx_define_opcode(BX_IA_MOV32_GdEdM, &BX_CPU_C::MOV32_GdEdM, &BX_CPU_C::MOV32_GdEdM, 0, 0) -bx_define_opcode(BX_IA_MOV_GdEdR, &BX_CPU_C::MOV_GdEdR, &BX_CPU_C::MOV_GdEdR, 0, 0) -bx_define_opcode(BX_IA_MOV_GwEwM, &BX_CPU_C::MOV_GwEwM, &BX_CPU_C::MOV_GwEwM, 0, 0) -bx_define_opcode(BX_IA_MOV_GwEwR, &BX_CPU_C::MOV_GwEwR, &BX_CPU_C::MOV_GwEwR, 0, 0) +bx_define_opcode(BX_IA_MOV_EwSw, &BX_CPU_C::MOV_EwSwM, &BX_CPU_C::MOV_EwSwR, 0, 0) +bx_define_opcode(BX_IA_MOV_GbEb, &BX_CPU_C::MOV_GbEbM, &BX_CPU_C::MOV_GbEbR, 0, 0) +bx_define_opcode(BX_IA_MOV_EbGb, &BX_CPU_C::MOV_EbGbM, &BX_CPU_C::MOV_GbEbR, 0, 0) /* dstRM */ +bx_define_opcode(BX_IA_MOV_GwEw, &BX_CPU_C::MOV_GwEwM, &BX_CPU_C::MOV_GwEwR, 0, 0) +bx_define_opcode(BX_IA_MOV_EwGw, &BX_CPU_C::MOV_EwGwM, &BX_CPU_C::MOV_GwEwR, 0, 0) /* dstRM */ +bx_define_opcode(BX_IA_MOV32_GdEd, &BX_CPU_C::MOV32_GdEdM, &BX_CPU_C::MOV_GdEdR, 0, 0) +bx_define_opcode(BX_IA_MOV32_EdGd, &BX_CPU_C::MOV32_EdGdM, &BX_CPU_C::MOV_GdEdR, 0, 0) /* dstRM */ bx_define_opcode(BX_IA_MOV_OdAL, NULL, &BX_CPU_C::MOV_OdAL, 0, 0) bx_define_opcode(BX_IA_MOV_OdAX, NULL, &BX_CPU_C::MOV_OdAX, 0, 0) bx_define_opcode(BX_IA_MOV_OdEAX, NULL, &BX_CPU_C::MOV_OdEAX, 0, 0) @@ -784,7 +772,7 @@ bx_define_opcode(BX_IA_FXRSTOR, &BX_CPU_C::FXRSTOR, &BX_CPU_C::BxError, BX_CPU_F // SSE bx_define_opcode(BX_IA_LDMXCSR, &BX_CPU_C::LDMXCSR, &BX_CPU_C::BxError, BX_CPU_SSE, BX_PREPARE_SSE) bx_define_opcode(BX_IA_STMXCSR, &BX_CPU_C::STMXCSR, &BX_CPU_C::BxError, BX_CPU_SSE, BX_PREPARE_SSE) -bx_define_opcode(BX_IA_PREFETCH, &BX_CPU_C::PREFETCH, &BX_CPU_C::PREFETCH, BX_CPU_SSE, 0) +bx_define_opcode(BX_IA_PREFETCH, &BX_CPU_C::PREFETCH, &BX_CPU_C::NOP, BX_CPU_SSE, 0) // SSE // SSE @@ -1185,8 +1173,8 @@ bx_define_opcode(BX_IA_TEST_EqGq, &BX_CPU_C::LOAD_Eq, &BX_CPU_C::TEST_EqGqR, BX_ bx_define_opcode(BX_IA_TEST_RAXId, NULL, &BX_CPU_C::TEST_RAXId, BX_CPU_X86_64, 0) bx_define_opcode(BX_IA_XCHG_EqGq, &BX_CPU_C::XCHG_EqGqM, &BX_CPU_C::XCHG_EqGqR, BX_CPU_X86_64, 0) bx_define_opcode(BX_IA_LEA_GqM, &BX_CPU_C::LEA_GqM, &BX_CPU_C::BxError, BX_CPU_X86_64, 0) -bx_define_opcode(BX_IA_MOV64_EdGdM, &BX_CPU_C::MOV64_EdGdM, &BX_CPU_C::MOV64_EdGdM, BX_CPU_X86_64, 0) -bx_define_opcode(BX_IA_MOV64_GdEdM, &BX_CPU_C::MOV64_GdEdM, &BX_CPU_C::MOV64_GdEdM, BX_CPU_X86_64, 0) +bx_define_opcode(BX_IA_MOV64_GdEd, &BX_CPU_C::MOV64_GdEdM, &BX_CPU_C::MOV_GdEdR, BX_CPU_X86_64, 0) +bx_define_opcode(BX_IA_MOV64_EdGd, &BX_CPU_C::MOV64_EdGdM, &BX_CPU_C::MOV_GdEdR, BX_CPU_X86_64, 0) /* dstRM */ bx_define_opcode(BX_IA_MOV_RAXOq, NULL, &BX_CPU_C::MOV_RAXOq, BX_CPU_X86_64, 0) bx_define_opcode(BX_IA_MOV_OqRAX, NULL, &BX_CPU_C::MOV_OqRAX, BX_CPU_X86_64, 0) bx_define_opcode(BX_IA_MOV_EAXOq, NULL, &BX_CPU_C::MOV_EAXOq, BX_CPU_X86_64, 0) @@ -1195,9 +1183,8 @@ bx_define_opcode(BX_IA_MOV_AXOq, NULL, &BX_CPU_C::MOV_AXOq, BX_CPU_X86_64, 0) bx_define_opcode(BX_IA_MOV_OqAX, NULL, &BX_CPU_C::MOV_OqAX, BX_CPU_X86_64, 0) bx_define_opcode(BX_IA_MOV_ALOq, NULL, &BX_CPU_C::MOV_ALOq, BX_CPU_X86_64, 0) bx_define_opcode(BX_IA_MOV_OqAL, NULL, &BX_CPU_C::MOV_OqAL, BX_CPU_X86_64, 0) -bx_define_opcode(BX_IA_MOV_EqGqM, &BX_CPU_C::MOV_EqGqM, &BX_CPU_C::MOV_EqGqM, BX_CPU_X86_64, 0) -bx_define_opcode(BX_IA_MOV_GqEqR, &BX_CPU_C::MOV_GqEqR, &BX_CPU_C::MOV_GqEqR, BX_CPU_X86_64, 0) -bx_define_opcode(BX_IA_MOV_GqEqM, &BX_CPU_C::MOV_GqEqM, &BX_CPU_C::MOV_GqEqM, BX_CPU_X86_64, 0) +bx_define_opcode(BX_IA_MOV_EqGq, &BX_CPU_C::MOV_EqGqM, &BX_CPU_C::MOV_GqEqR, BX_CPU_X86_64, 0) /* dstRM */ +bx_define_opcode(BX_IA_MOV_GqEq, &BX_CPU_C::MOV_GqEqM, &BX_CPU_C::MOV_GqEqR, BX_CPU_X86_64, 0) bx_define_opcode(BX_IA_MOV_EqId, &BX_CPU_C::MOV_EqIdM, &BX_CPU_C::MOV_EqIdR, BX_CPU_X86_64, 0) bx_define_opcode(BX_IA_REP_MOVSQ_XqYq, NULL, &BX_CPU_C::REP_MOVSQ_XqYq, BX_CPU_X86_64, 0) bx_define_opcode(BX_IA_REP_CMPSQ_XqYq, NULL, &BX_CPU_C::REP_CMPSQ_XqYq, BX_CPU_X86_64, 0) @@ -1237,14 +1224,10 @@ bx_define_opcode(BX_IA_MOVSX_GqEd, &BX_CPU_C::MOVSX_GqEdM, &BX_CPU_C::MOVSX_GqEd bx_define_opcode(BX_IA_BSWAP_RRX, NULL, &BX_CPU_C::BSWAP_RRX, BX_CPU_X86_64, 0) bx_define_opcode(BX_IA_BSF_GqEq, &BX_CPU_C::LOAD_Eq, &BX_CPU_C::BSF_GqEqR, BX_CPU_X86_64, 0) bx_define_opcode(BX_IA_BSR_GqEq, &BX_CPU_C::LOAD_Eq, &BX_CPU_C::BSR_GqEqR, BX_CPU_X86_64, 0) -bx_define_opcode(BX_IA_BT_EqGqM, &BX_CPU_C::BT_EqGqM, &BX_CPU_C::BT_EqGqM, BX_CPU_X86_64, 0) -bx_define_opcode(BX_IA_BTS_EqGqM, &BX_CPU_C::BTS_EqGqM, &BX_CPU_C::BTS_EqGqM, BX_CPU_X86_64, 0) -bx_define_opcode(BX_IA_BTR_EqGqM, &BX_CPU_C::BTR_EqGqM, &BX_CPU_C::BTR_EqGqM, BX_CPU_X86_64, 0) -bx_define_opcode(BX_IA_BTC_EqGqM, &BX_CPU_C::BTC_EqGqM, &BX_CPU_C::BTC_EqGqM, BX_CPU_X86_64, 0) -bx_define_opcode(BX_IA_BT_EqGqR, &BX_CPU_C::BT_EqGqR, &BX_CPU_C::BT_EqGqR, BX_CPU_X86_64, 0) -bx_define_opcode(BX_IA_BTS_EqGqR, &BX_CPU_C::BTS_EqGqR, &BX_CPU_C::BTS_EqGqR, BX_CPU_X86_64, 0) -bx_define_opcode(BX_IA_BTR_EqGqR, &BX_CPU_C::BTR_EqGqR, &BX_CPU_C::BTR_EqGqR, BX_CPU_X86_64, 0) -bx_define_opcode(BX_IA_BTC_EqGqR, &BX_CPU_C::BTC_EqGqR, &BX_CPU_C::BTC_EqGqR, BX_CPU_X86_64, 0) +bx_define_opcode(BX_IA_BT_EqGq, &BX_CPU_C::BT_EqGqM, &BX_CPU_C::BT_EqGqR, BX_CPU_X86_64, 0) +bx_define_opcode(BX_IA_BTS_EqGq, &BX_CPU_C::BTS_EqGqM, &BX_CPU_C::BTS_EqGqR, BX_CPU_X86_64, 0) +bx_define_opcode(BX_IA_BTR_EqGq, &BX_CPU_C::BTR_EqGqM, &BX_CPU_C::BTR_EqGqR, BX_CPU_X86_64, 0) +bx_define_opcode(BX_IA_BTC_EqGq, &BX_CPU_C::BTC_EqGqM, &BX_CPU_C::BTC_EqGqR, BX_CPU_X86_64, 0) bx_define_opcode(BX_IA_BT_EqIb, &BX_CPU_C::BT_EqIbM, &BX_CPU_C::BT_EqIbR, BX_CPU_X86_64, 0) bx_define_opcode(BX_IA_BTS_EqIb, &BX_CPU_C::BTS_EqIbM, &BX_CPU_C::BTS_EqIbR, BX_CPU_X86_64, 0) bx_define_opcode(BX_IA_BTR_EqIb, &BX_CPU_C::BTR_EqIbM, &BX_CPU_C::BTR_EqIbR, BX_CPU_X86_64, 0) @@ -1313,7 +1296,6 @@ bx_define_opcode(BX_IA_SGDT64_Ms, &BX_CPU_C::SGDT64_Ms, &BX_CPU_C::BxError, BX_C bx_define_opcode(BX_IA_SIDT64_Ms, &BX_CPU_C::SIDT64_Ms, &BX_CPU_C::BxError, BX_CPU_X86_64, 0) bx_define_opcode(BX_IA_LGDT64_Ms, &BX_CPU_C::LGDT64_Ms, &BX_CPU_C::BxError, BX_CPU_X86_64, 0) bx_define_opcode(BX_IA_LIDT64_Ms, &BX_CPU_C::LIDT64_Ms, &BX_CPU_C::BxError, BX_CPU_X86_64, 0) -bx_define_opcode(BX_IA_RDTSCP, &BX_CPU_C::BxError, &BX_CPU_C::RDTSCP, BX_CPU_X86_64, 0) bx_define_opcode(BX_IA_CMPXCHG16B, &BX_CPU_C::CMPXCHG16B, &BX_CPU_C::BxError, BX_CPU_X86_64, 0) bx_define_opcode(BX_IA_LOOPNE64_Jb, NULL, &BX_CPU_C::LOOPNE64_Jb, BX_CPU_X86_64, 0) bx_define_opcode(BX_IA_LOOPE64_Jb, NULL, &BX_CPU_C::LOOPE64_Jb, BX_CPU_X86_64, 0) @@ -1342,6 +1324,8 @@ bx_define_opcode(BX_IA_WRFSBASE, &BX_CPU_C::BxError, &BX_CPU_C::WRFSBASE, BX_CPU bx_define_opcode(BX_IA_WRGSBASE, &BX_CPU_C::BxError, &BX_CPU_C::WRGSBASE, BX_CPU_X86_64 | BX_CPU_FSGSBASE, 0) #endif +bx_define_opcode(BX_IA_RDTSCP, &BX_CPU_C::BxError, &BX_CPU_C::RDTSCP, BX_CPU_X86_64, 0) + // VMX bx_define_opcode(BX_IA_VMXON_Mq, &BX_CPU_C::VMXON, &BX_CPU_C::BxError, BX_CPU_VMX, 0) bx_define_opcode(BX_IA_VMXOFF, &BX_CPU_C::BxError, &BX_CPU_C::VMXOFF, BX_CPU_VMX, 0) diff --git a/bochs/cpu/proc_ctrl.cc b/bochs/cpu/proc_ctrl.cc index 1fc7e24ef..58595319f 100644 --- a/bochs/cpu/proc_ctrl.cc +++ b/bochs/cpu/proc_ctrl.cc @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////// -// $Id: proc_ctrl.cc,v 1.341 2010-12-25 17:04:36 sshwarts Exp $ +// $Id: proc_ctrl.cc,v 1.342 2011-01-21 16:07:51 sshwarts Exp $ ///////////////////////////////////////////////////////////////////////// // // Copyright (C) 2001-2010 The Bochs Project @@ -401,9 +401,10 @@ void BX_CPP_AttrRegparmN(1) BX_CPU_C::RDTSC(bxInstruction_c *i) #endif } -#if BX_SUPPORT_X86_64 void BX_CPP_AttrRegparmN(1) BX_CPU_C::RDTSCP(bxInstruction_c *i) { +#if BX_SUPPORT_X86_64 + #if BX_SUPPORT_VMX // RDTSCP will always #UD in legacy VMX mode if (BX_CPU_THIS_PTR in_vmx_guest) { @@ -416,8 +417,8 @@ void BX_CPP_AttrRegparmN(1) BX_CPU_C::RDTSCP(bxInstruction_c *i) RDTSC(i); RCX = MSR_TSC_AUX; -} #endif +} #if BX_SUPPORT_MONITOR_MWAIT bx_bool BX_CPU_C::is_monitor(bx_phy_address begin_addr, unsigned len) @@ -1023,9 +1024,6 @@ void BX_CPP_AttrRegparmN(1) BX_CPU_C::SYSRET(bxInstruction_c *i) void BX_CPP_AttrRegparmN(1) BX_CPU_C::SWAPGS(bxInstruction_c *i) { - if(! long64_mode()) - exception(BX_UD_EXCEPTION, 0); - if(CPL != 0) exception(BX_GP_EXCEPTION, 0);