Decode SSE4A

Rework immediate bytes decoding to make it faster
This commit is contained in:
Stanislav Shwartsman 2007-12-15 17:42:24 +00:00
parent 76882295f7
commit 1e843cb462
7 changed files with 406 additions and 304 deletions

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////
// $Id: cpu.h,v 1.391 2007-12-14 23:15:52 sshwarts Exp $
// $Id: cpu.h,v 1.392 2007-12-15 17:42:20 sshwarts Exp $
/////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2001 MandrakeSoft S.A.
@ -2537,6 +2537,15 @@ public: // for now...
/* SSE4.2 */
#endif
/* SSE4A */
BX_SMF void MOVNTSS_MssVss(bxInstruction_c *);
BX_SMF void MOVNTSD_MsdVsd(bxInstruction_c *);
BX_SMF void EXTRQ_VdqUdq(bxInstruction_c *);
BX_SMF void EXTRQ_VdqIbIb(bxInstruction_c *);
BX_SMF void INSERTQ_VdqUdqIbIb(bxInstruction_c *);
BX_SMF void INSERTQ_VdqUdq(bxInstruction_c *);
/* SSE4A */
/*** Duplicate SSE instructions ***/
// Although in implementation, these instructions are aliased to the
// another function, it's nice to have them call a separate function when
@ -3769,12 +3778,12 @@ IMPLEMENT_EFLAG_ACCESSOR (TF, 8)
// specify which kinds of immediate data a required by instruction.
#define BxImmediate 0x000f // bits 3..0: any immediate
#define BxImmediate_Ib 0x0001 // 8 bits regardless
#define BxImmediate_Ib 0x0001 // 8 bit
#define BxImmediate_Ib_SE 0x0002 // sign extend to OS size
#define BxImmediate_Iv 0x0003 // 16 or 32 depending on OS size
#define BxImmediate_Iw 0x0004 // 16 bits regardless
#define BxImmediate_IvIw 0x0005 // call_Ap
#define BxImmediate_IwIb 0x0006 // enter_IwIb
#define BxImmediate_Iw 0x0003 // 16 bit or SSE4A IbIb immediate
#define BxImmediate_IvIw 0x0004 // call_Ap, not encodable in 64-bit mode
#define BxImmediate_IwIb 0x0005 // enter_IwIb
#define BxImmediate_Id 0x0006 // 32 bit
#define BxImmediate_O 0x0007 // MOV_ALOd, mov_OdAL, mov_eAXOv, mov_OveAX
#define BxImmediate_BrOff8 0x0008 // Relative branch offset byte
#define BxImmediate_BrOff16 0x0009 // Relative branch offset word, not encodable in 64-bit mode
@ -3783,6 +3792,8 @@ IMPLEMENT_EFLAG_ACCESSOR (TF, 8)
#define BxImmediate_Iq 0x000B // 64 bit override
#endif
#define BxImmediate_IbIb BxImmediate_Iw
// Lookup for opcode and attributes in another opcode tables
// Totally 7 opcode groups supported
#define BxGroupX 0x0070 // bits 6..4: opcode groups definition

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////
// $Id: cpuid.cc,v 1.58 2007-12-01 16:45:16 sshwarts Exp $
// $Id: cpuid.cc,v 1.59 2007-12-15 17:42:20 sshwarts Exp $
/////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2007 Stanislav Shwartsman
@ -415,7 +415,7 @@ void BX_CPU_C::set_cpuid_defaults(void)
// [14:14] MCA: Machine Check Architecture
// [15:15] CMOV: Cond Mov/Cmp Instructions
// [16:16] PAT: Page Attribute Table
// [17:17] PSE: Page-Size Extensions
// [17:17] PSE-36: Physical Address Extensions
// [18:18] Processor Serial Number
// [19:19] CLFLUSH: CLFLUSH Instruction support
// [20:20] Reserved
@ -527,7 +527,9 @@ void BX_CPU_C::set_cpuid_defaults(void)
// [7:7] Misaligned SSE support
// [8:8] 3DNow! prefetch support
// [9:9] OS visible workarounds
// [10:31] Reserved
// [10:10] Reserved
// [11:11] SSE5A
// [12:31] Reserved
#if BX_SUPPORT_X86_64
cpuid->ecx = 1 | (1<<8);
#endif
@ -554,7 +556,7 @@ void BX_CPU_C::set_cpuid_defaults(void)
// [*] [14:14] MCA: Machine Check Architecture
// [*] [15:15] CMOV: Cond Mov/Cmp Instructions
// [*] [16:16] PAT: Page Attribute Table
// [*] [17:17] PSE: Page-Size Extensions
// [*] [17:17] PSE-36: Physical Address Extensions
// [18:19] Reserved
// [20:20] No-Execute page protection
// [21:21] Reserved

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////
// $Id: fetchdecode.cc,v 1.149 2007-12-14 21:29:36 sshwarts Exp $
// $Id: fetchdecode.cc,v 1.150 2007-12-15 17:42:20 sshwarts Exp $
/////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2001 MandrakeSoft S.A.
@ -65,7 +65,7 @@ static const bx_bool BxOpcodeHasModrm32[512] = {
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 0F 40 */
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 0F 50 */
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 0F 60 */
1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1, /* 0F 70 */
1,1,1,1,1,1,1,0,1,1,0,0,1,1,1,1, /* 0F 70 */
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0F 80 */
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 0F 90 */
0,0,0,1,1,1,0,0,0,0,0,1,1,1,1,1, /* 0F A0 */
@ -189,7 +189,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo32R[512*2] = {
/* 02 /wr */ { 0, &BX_CPU_C::ADD_GbEbR },
/* 03 /wr */ { 0, &BX_CPU_C::ADD_GwEwR },
/* 04 /wr */ { BxImmediate_Ib, &BX_CPU_C::ADD_ALIb },
/* 05 /wr */ { BxImmediate_Iv, &BX_CPU_C::ADD_AXIw },
/* 05 /wr */ { BxImmediate_Iw, &BX_CPU_C::ADD_AXIw },
/* 06 /wr */ { 0, &BX_CPU_C::PUSH16_ES },
/* 07 /wr */ { 0, &BX_CPU_C::POP16_ES },
/* 08 /wr */ { 0, &BX_CPU_C::OR_EbGbR },
@ -197,7 +197,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo32R[512*2] = {
/* 0A /wr */ { 0, &BX_CPU_C::OR_GbEbR },
/* 0B /wr */ { 0, &BX_CPU_C::OR_GwEwR },
/* 0C /wr */ { BxImmediate_Ib, &BX_CPU_C::OR_ALIb },
/* 0D /wr */ { BxImmediate_Iv, &BX_CPU_C::OR_AXIw },
/* 0D /wr */ { BxImmediate_Iw, &BX_CPU_C::OR_AXIw },
/* 0E /wr */ { 0, &BX_CPU_C::PUSH16_CS },
/* 0F /wr */ { 0, &BX_CPU_C::BxError }, // 2-byte escape
/* 10 /wr */ { 0, &BX_CPU_C::ADC_EbGbR },
@ -205,7 +205,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo32R[512*2] = {
/* 12 /wr */ { 0, &BX_CPU_C::ADC_GbEbR },
/* 13 /wr */ { 0, &BX_CPU_C::ADC_GwEwR },
/* 14 /wr */ { BxImmediate_Ib, &BX_CPU_C::ADC_ALIb },
/* 15 /wr */ { BxImmediate_Iv, &BX_CPU_C::ADC_AXIw },
/* 15 /wr */ { BxImmediate_Iw, &BX_CPU_C::ADC_AXIw },
/* 16 /wr */ { 0, &BX_CPU_C::PUSH16_SS },
/* 17 /wr */ { BxTraceEnd, &BX_CPU_C::POP16_SS }, // async_event = 1
/* 18 /wr */ { 0, &BX_CPU_C::SBB_EbGbR },
@ -213,7 +213,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo32R[512*2] = {
/* 1A /wr */ { 0, &BX_CPU_C::SBB_GbEbR },
/* 1B /wr */ { 0, &BX_CPU_C::SBB_GwEwR },
/* 1C /wr */ { BxImmediate_Ib, &BX_CPU_C::SBB_ALIb },
/* 1D /wr */ { BxImmediate_Iv, &BX_CPU_C::SBB_AXIw },
/* 1D /wr */ { BxImmediate_Iw, &BX_CPU_C::SBB_AXIw },
/* 1E /wr */ { 0, &BX_CPU_C::PUSH16_DS },
/* 1F /wr */ { 0, &BX_CPU_C::POP16_DS },
/* 20 /wr */ { 0, &BX_CPU_C::AND_EbGbR },
@ -221,7 +221,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo32R[512*2] = {
/* 22 /wr */ { 0, &BX_CPU_C::AND_GbEbR },
/* 23 /wr */ { 0, &BX_CPU_C::AND_GwEwR },
/* 24 /wr */ { BxImmediate_Ib, &BX_CPU_C::AND_ALIb },
/* 25 /wr */ { BxImmediate_Iv, &BX_CPU_C::AND_AXIw },
/* 25 /wr */ { BxImmediate_Iw, &BX_CPU_C::AND_AXIw },
/* 26 /wr */ { BxPrefix, &BX_CPU_C::BxError }, // ES:
/* 27 /wr */ { 0, &BX_CPU_C::DAA },
/* 28 /wr */ { 0, &BX_CPU_C::SUB_EbGbR },
@ -229,7 +229,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo32R[512*2] = {
/* 2A /wr */ { 0, &BX_CPU_C::SUB_GbEbR },
/* 2B /wr */ { 0, &BX_CPU_C::SUB_GwEwR },
/* 2C /wr */ { BxImmediate_Ib, &BX_CPU_C::SUB_ALIb },
/* 2D /wr */ { BxImmediate_Iv, &BX_CPU_C::SUB_AXIw },
/* 2D /wr */ { BxImmediate_Iw, &BX_CPU_C::SUB_AXIw },
/* 2E /wr */ { BxPrefix, &BX_CPU_C::BxError }, // CS:
/* 2F /wr */ { 0, &BX_CPU_C::DAS },
/* 30 /wr */ { 0, &BX_CPU_C::XOR_EbGbR },
@ -237,7 +237,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo32R[512*2] = {
/* 32 /wr */ { 0, &BX_CPU_C::XOR_GbEbR },
/* 33 /wr */ { 0, &BX_CPU_C::XOR_GwEwR },
/* 34 /wr */ { BxImmediate_Ib, &BX_CPU_C::XOR_ALIb },
/* 35 /wr */ { BxImmediate_Iv, &BX_CPU_C::XOR_AXIw },
/* 35 /wr */ { BxImmediate_Iw, &BX_CPU_C::XOR_AXIw },
/* 36 /wr */ { BxPrefix, &BX_CPU_C::BxError }, // SS:
/* 37 /wr */ { 0, &BX_CPU_C::AAA },
/* 38 /wr */ { 0, &BX_CPU_C::CMP_EbGbR },
@ -245,7 +245,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo32R[512*2] = {
/* 3A /wr */ { 0, &BX_CPU_C::CMP_GbEbR },
/* 3B /wr */ { 0, &BX_CPU_C::CMP_GwEwR },
/* 3C /wr */ { BxImmediate_Ib, &BX_CPU_C::CMP_ALIb },
/* 3D /wr */ { BxImmediate_Iv, &BX_CPU_C::CMP_AXIw },
/* 3D /wr */ { BxImmediate_Iw, &BX_CPU_C::CMP_AXIw },
/* 3E /wr */ { BxPrefix, &BX_CPU_C::BxError }, // DS:
/* 3F /wr */ { 0, &BX_CPU_C::AAS },
/* 40 /wr */ { 0, &BX_CPU_C::INC_RX },
@ -288,8 +288,8 @@ static const BxOpcodeInfo_t BxOpcodeInfo32R[512*2] = {
/* 65 /wr */ { BxPrefix, &BX_CPU_C::BxError }, // GS:
/* 66 /wr */ { BxPrefix, &BX_CPU_C::BxError }, // OS:
/* 67 /wr */ { BxPrefix, &BX_CPU_C::BxError }, // AS:
/* 68 /wr */ { BxImmediate_Iv, &BX_CPU_C::PUSH_Iw },
/* 69 /wr */ { BxImmediate_Iv, &BX_CPU_C::IMUL_GwEwIw },
/* 68 /wr */ { BxImmediate_Iw, &BX_CPU_C::PUSH_Iw },
/* 69 /wr */ { BxImmediate_Iw, &BX_CPU_C::IMUL_GwEwIw },
/* 6A /wr */ { BxImmediate_Ib_SE, &BX_CPU_C::PUSH_Iw },
/* 6B /wr */ { BxImmediate_Ib_SE, &BX_CPU_C::IMUL_GwEwIw },
/* 6C /wr */ { 0, &BX_CPU_C::REP_INSB_YbDX },
@ -313,7 +313,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo32R[512*2] = {
/* 7E /wr */ { BxImmediate_BrOff8 | BxTraceEnd, &BX_CPU_C::JLE_Jw },
/* 7F /wr */ { BxImmediate_BrOff8 | BxTraceEnd, &BX_CPU_C::JNLE_Jw },
/* 80 /wr */ { BxGroup1 | BxImmediate_Ib, NULL, BxOpcodeInfoG1EbIbR },
/* 81 /wr */ { BxGroup1 | BxImmediate_Iv, NULL, BxOpcodeInfoG1EwR },
/* 81 /wr */ { BxGroup1 | BxImmediate_Iw, NULL, BxOpcodeInfoG1EwR },
/* 82 /wr */ { BxGroup1 | BxImmediate_Ib, NULL, BxOpcodeInfoG1EbIbR },
/* 83 /wr */ { BxGroup1 | BxImmediate_Ib_SE, NULL, BxOpcodeInfoG1EwR },
/* 84 /wr */ { 0, &BX_CPU_C::TEST_EbGbR },
@ -353,7 +353,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo32R[512*2] = {
/* A6 /wr */ { 0, &BX_CPU_C::REP_CMPSB_XbYb },
/* A7 /wr */ { 0, &BX_CPU_C::REP_CMPSW_XwYw },
/* A8 /wr */ { BxImmediate_Ib, &BX_CPU_C::TEST_ALIb },
/* A9 /wr */ { BxImmediate_Iv, &BX_CPU_C::TEST_AXIw },
/* A9 /wr */ { BxImmediate_Iw, &BX_CPU_C::TEST_AXIw },
/* AA /wr */ { 0, &BX_CPU_C::REP_STOSB_YbAL },
/* AB /wr */ { 0, &BX_CPU_C::REP_STOSW_YwAX },
/* AC /wr */ { 0, &BX_CPU_C::REP_LODSB_ALXb },
@ -368,14 +368,14 @@ static const BxOpcodeInfo_t BxOpcodeInfo32R[512*2] = {
/* B5 /wr */ { BxImmediate_Ib, &BX_CPU_C::MOV_RHIb },
/* B6 /wr */ { BxImmediate_Ib, &BX_CPU_C::MOV_RHIb },
/* B7 /wr */ { BxImmediate_Ib, &BX_CPU_C::MOV_RHIb },
/* B8 /wr */ { BxImmediate_Iv, &BX_CPU_C::MOV_RXIw },
/* B9 /wr */ { BxImmediate_Iv, &BX_CPU_C::MOV_RXIw },
/* BA /wr */ { BxImmediate_Iv, &BX_CPU_C::MOV_RXIw },
/* BB /wr */ { BxImmediate_Iv, &BX_CPU_C::MOV_RXIw },
/* BC /wr */ { BxImmediate_Iv, &BX_CPU_C::MOV_RXIw },
/* BD /wr */ { BxImmediate_Iv, &BX_CPU_C::MOV_RXIw },
/* BE /wr */ { BxImmediate_Iv, &BX_CPU_C::MOV_RXIw },
/* BF /wr */ { BxImmediate_Iv, &BX_CPU_C::MOV_RXIw },
/* B8 /wr */ { BxImmediate_Iw, &BX_CPU_C::MOV_RXIw },
/* B9 /wr */ { BxImmediate_Iw, &BX_CPU_C::MOV_RXIw },
/* BA /wr */ { BxImmediate_Iw, &BX_CPU_C::MOV_RXIw },
/* BB /wr */ { BxImmediate_Iw, &BX_CPU_C::MOV_RXIw },
/* BC /wr */ { BxImmediate_Iw, &BX_CPU_C::MOV_RXIw },
/* BD /wr */ { BxImmediate_Iw, &BX_CPU_C::MOV_RXIw },
/* BE /wr */ { BxImmediate_Iw, &BX_CPU_C::MOV_RXIw },
/* BF /wr */ { BxImmediate_Iw, &BX_CPU_C::MOV_RXIw },
/* C0 /wr */ { BxGroup2 | BxImmediate_Ib, NULL, BxOpcodeInfoG2Eb },
/* C1 /wr */ { BxGroup2 | BxImmediate_Ib, NULL, BxOpcodeInfoG2Ew },
/* C2 /wr */ { BxImmediate_Iw | BxTraceEnd, &BX_CPU_C::RETnear16_Iw },
@ -383,7 +383,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo32R[512*2] = {
/* C4 /wr */ { 0, &BX_CPU_C::BxError }, // LES
/* C5 /wr */ { 0, &BX_CPU_C::BxError }, // LDS
/* C6 /wr */ { BxImmediate_Ib, &BX_CPU_C::MOV_EbIbR },
/* C7 /wr */ { BxImmediate_Iv, &BX_CPU_C::MOV_EwIwR },
/* C7 /wr */ { BxImmediate_Iw, &BX_CPU_C::MOV_EwIwR },
/* C8 /wr */ { BxImmediate_IwIb, &BX_CPU_C::ENTER16_IwIb },
/* C9 /wr */ { 0, &BX_CPU_C::LEAVE },
/* CA /wr */ { BxImmediate_Iw | BxTraceEnd, &BX_CPU_C::RETfar16_Iw },
@ -610,8 +610,8 @@ static const BxOpcodeInfo_t BxOpcodeInfo32R[512*2] = {
/* 0F 75 /wr */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f75 },
/* 0F 76 /wr */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f76 },
/* 0F 77 /wr */ { 0, &BX_CPU_C::EMMS },
/* 0F 78 /wr */ { 0, &BX_CPU_C::BxError },
/* 0F 79 /wr */ { 0, &BX_CPU_C::BxError },
/* 0F 78 /wr */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f78 },
/* 0F 79 /wr */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f79 },
/* 0F 7A /wr */ { 0, &BX_CPU_C::BxError },
/* 0F 7B /wr */ { 0, &BX_CPU_C::BxError },
/* 0F 7C /wr */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f7c },
@ -753,7 +753,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo32R[512*2] = {
/* 02 /dr */ { 0, &BX_CPU_C::ADD_GbEbR },
/* 03 /dr */ { 0, &BX_CPU_C::ADD_GdEdR },
/* 04 /dr */ { BxImmediate_Ib, &BX_CPU_C::ADD_ALIb },
/* 05 /dr */ { BxImmediate_Iv, &BX_CPU_C::ADD_EAXId },
/* 05 /dr */ { BxImmediate_Id, &BX_CPU_C::ADD_EAXId },
/* 06 /dr */ { 0, &BX_CPU_C::PUSH32_ES },
/* 07 /dr */ { 0, &BX_CPU_C::POP32_ES },
/* 08 /dr */ { 0, &BX_CPU_C::OR_EbGbR },
@ -761,7 +761,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo32R[512*2] = {
/* 0A /dr */ { 0, &BX_CPU_C::OR_GbEbR },
/* 0B /dr */ { 0, &BX_CPU_C::OR_GdEdR },
/* 0C /dr */ { BxImmediate_Ib, &BX_CPU_C::OR_ALIb },
/* 0D /dr */ { BxImmediate_Iv, &BX_CPU_C::OR_EAXId },
/* 0D /dr */ { BxImmediate_Id, &BX_CPU_C::OR_EAXId },
/* 0E /dr */ { 0, &BX_CPU_C::PUSH32_CS },
/* 0F /dr */ { 0, &BX_CPU_C::BxError }, // 2-byte escape
/* 10 /dr */ { 0, &BX_CPU_C::ADC_EbGbR },
@ -769,7 +769,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo32R[512*2] = {
/* 12 /dr */ { 0, &BX_CPU_C::ADC_GbEbR },
/* 13 /dr */ { 0, &BX_CPU_C::ADC_GdEdR },
/* 14 /dr */ { BxImmediate_Ib, &BX_CPU_C::ADC_ALIb },
/* 15 /dr */ { BxImmediate_Iv, &BX_CPU_C::ADC_EAXId },
/* 15 /dr */ { BxImmediate_Id, &BX_CPU_C::ADC_EAXId },
/* 16 /dr */ { 0, &BX_CPU_C::PUSH32_SS },
/* 17 /dr */ { BxTraceEnd, &BX_CPU_C::POP32_SS }, // async_event = 1
/* 18 /dr */ { 0, &BX_CPU_C::SBB_EbGbR },
@ -777,7 +777,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo32R[512*2] = {
/* 1A /dr */ { 0, &BX_CPU_C::SBB_GbEbR },
/* 1B /dr */ { 0, &BX_CPU_C::SBB_GdEdR },
/* 1C /dr */ { BxImmediate_Ib, &BX_CPU_C::SBB_ALIb },
/* 1D /dr */ { BxImmediate_Iv, &BX_CPU_C::SBB_EAXId },
/* 1D /dr */ { BxImmediate_Id, &BX_CPU_C::SBB_EAXId },
/* 1E /dr */ { 0, &BX_CPU_C::PUSH32_DS },
/* 1F /dr */ { 0, &BX_CPU_C::POP32_DS },
/* 20 /dr */ { 0, &BX_CPU_C::AND_EbGbR },
@ -785,7 +785,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo32R[512*2] = {
/* 22 /dr */ { 0, &BX_CPU_C::AND_GbEbR },
/* 23 /dr */ { 0, &BX_CPU_C::AND_GdEdR },
/* 24 /dr */ { BxImmediate_Ib, &BX_CPU_C::AND_ALIb },
/* 25 /dr */ { BxImmediate_Iv, &BX_CPU_C::AND_EAXId },
/* 25 /dr */ { BxImmediate_Id, &BX_CPU_C::AND_EAXId },
/* 26 /dr */ { BxPrefix, &BX_CPU_C::BxError }, // ES:
/* 27 /dr */ { 0, &BX_CPU_C::DAA },
/* 28 /dr */ { 0, &BX_CPU_C::SUB_EbGbR },
@ -793,7 +793,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo32R[512*2] = {
/* 2A /dr */ { 0, &BX_CPU_C::SUB_GbEbR },
/* 2B /dr */ { 0, &BX_CPU_C::SUB_GdEdR },
/* 2C /dr */ { BxImmediate_Ib, &BX_CPU_C::SUB_ALIb },
/* 2D /dr */ { BxImmediate_Iv, &BX_CPU_C::SUB_EAXId },
/* 2D /dr */ { BxImmediate_Id, &BX_CPU_C::SUB_EAXId },
/* 2E /dr */ { BxPrefix, &BX_CPU_C::BxError }, // CS:
/* 2F /dr */ { 0, &BX_CPU_C::DAS },
/* 30 /dr */ { 0, &BX_CPU_C::XOR_EbGbR },
@ -801,7 +801,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo32R[512*2] = {
/* 32 /dr */ { 0, &BX_CPU_C::XOR_GbEbR },
/* 33 /dr */ { 0, &BX_CPU_C::XOR_GdEdR },
/* 34 /dr */ { BxImmediate_Ib, &BX_CPU_C::XOR_ALIb },
/* 35 /dr */ { BxImmediate_Iv, &BX_CPU_C::XOR_EAXId },
/* 35 /dr */ { BxImmediate_Id, &BX_CPU_C::XOR_EAXId },
/* 36 /dr */ { BxPrefix, &BX_CPU_C::BxError }, // SS:
/* 37 /dr */ { 0, &BX_CPU_C::AAA },
/* 38 /dr */ { 0, &BX_CPU_C::CMP_EbGbR },
@ -809,7 +809,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo32R[512*2] = {
/* 3A /dr */ { 0, &BX_CPU_C::CMP_GbEbR },
/* 3B /dr */ { 0, &BX_CPU_C::CMP_GdEdR },
/* 3C /dr */ { BxImmediate_Ib, &BX_CPU_C::CMP_ALIb },
/* 3D /dr */ { BxImmediate_Iv, &BX_CPU_C::CMP_EAXId },
/* 3D /dr */ { BxImmediate_Id, &BX_CPU_C::CMP_EAXId },
/* 3E /dr */ { BxPrefix, &BX_CPU_C::BxError }, // DS:
/* 3F /dr */ { 0, &BX_CPU_C::AAS },
/* 40 /dr */ { 0, &BX_CPU_C::INC_ERX },
@ -852,8 +852,8 @@ static const BxOpcodeInfo_t BxOpcodeInfo32R[512*2] = {
/* 65 /dr */ { BxPrefix, &BX_CPU_C::BxError }, // GS:
/* 66 /dr */ { BxPrefix, &BX_CPU_C::BxError }, // OS:
/* 67 /dr */ { BxPrefix, &BX_CPU_C::BxError }, // AS:
/* 68 /dr */ { BxImmediate_Iv, &BX_CPU_C::PUSH_Id },
/* 69 /dr */ { BxImmediate_Iv, &BX_CPU_C::IMUL_GdEdId },
/* 68 /dr */ { BxImmediate_Id, &BX_CPU_C::PUSH_Id },
/* 69 /dr */ { BxImmediate_Id, &BX_CPU_C::IMUL_GdEdId },
/* 6A /dr */ { BxImmediate_Ib_SE, &BX_CPU_C::PUSH_Id },
/* 6B /dr */ { BxImmediate_Ib_SE, &BX_CPU_C::IMUL_GdEdId },
/* 6C /dr */ { 0, &BX_CPU_C::REP_INSB_YbDX },
@ -877,7 +877,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo32R[512*2] = {
/* 7E /dr */ { BxImmediate_BrOff8 | BxTraceEnd, &BX_CPU_C::JLE_Jd },
/* 7F /dr */ { BxImmediate_BrOff8 | BxTraceEnd, &BX_CPU_C::JNLE_Jd },
/* 80 /dr */ { BxGroup1 | BxImmediate_Ib, NULL, BxOpcodeInfoG1EbIbR },
/* 81 /dr */ { BxGroup1 | BxImmediate_Iv, NULL, BxOpcodeInfoG1EdR },
/* 81 /dr */ { BxGroup1 | BxImmediate_Id, NULL, BxOpcodeInfoG1EdR },
/* 82 /dr */ { BxGroup1 | BxImmediate_Ib, NULL, BxOpcodeInfoG1EbIbR },
/* 83 /dr */ { BxGroup1 | BxImmediate_Ib_SE, NULL, BxOpcodeInfoG1EdR },
/* 84 /dr */ { 0, &BX_CPU_C::TEST_EbGbR },
@ -917,7 +917,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo32R[512*2] = {
/* A6 /dr */ { 0, &BX_CPU_C::REP_CMPSB_XbYb },
/* A7 /dr */ { 0, &BX_CPU_C::REP_CMPSD_XdYd },
/* A8 /dr */ { BxImmediate_Ib, &BX_CPU_C::TEST_ALIb },
/* A9 /dr */ { BxImmediate_Iv, &BX_CPU_C::TEST_EAXId },
/* A9 /dr */ { BxImmediate_Id, &BX_CPU_C::TEST_EAXId },
/* AA /dr */ { 0, &BX_CPU_C::REP_STOSB_YbAL },
/* AB /dr */ { 0, &BX_CPU_C::REP_STOSD_YdEAX },
/* AC /dr */ { 0, &BX_CPU_C::REP_LODSB_ALXb },
@ -932,14 +932,14 @@ static const BxOpcodeInfo_t BxOpcodeInfo32R[512*2] = {
/* B5 /dr */ { BxImmediate_Ib, &BX_CPU_C::MOV_RHIb },
/* B6 /dr */ { BxImmediate_Ib, &BX_CPU_C::MOV_RHIb },
/* B7 /dr */ { BxImmediate_Ib, &BX_CPU_C::MOV_RHIb },
/* B8 /dr */ { BxImmediate_Iv, &BX_CPU_C::MOV_ERXId },
/* B9 /dr */ { BxImmediate_Iv, &BX_CPU_C::MOV_ERXId },
/* BA /dr */ { BxImmediate_Iv, &BX_CPU_C::MOV_ERXId },
/* BB /dr */ { BxImmediate_Iv, &BX_CPU_C::MOV_ERXId },
/* BC /dr */ { BxImmediate_Iv, &BX_CPU_C::MOV_ERXId },
/* BD /dr */ { BxImmediate_Iv, &BX_CPU_C::MOV_ERXId },
/* BE /dr */ { BxImmediate_Iv, &BX_CPU_C::MOV_ERXId },
/* BF /dr */ { BxImmediate_Iv, &BX_CPU_C::MOV_ERXId },
/* B8 /dr */ { BxImmediate_Id, &BX_CPU_C::MOV_ERXId },
/* B9 /dr */ { BxImmediate_Id, &BX_CPU_C::MOV_ERXId },
/* BA /dr */ { BxImmediate_Id, &BX_CPU_C::MOV_ERXId },
/* BB /dr */ { BxImmediate_Id, &BX_CPU_C::MOV_ERXId },
/* BC /dr */ { BxImmediate_Id, &BX_CPU_C::MOV_ERXId },
/* BD /dr */ { BxImmediate_Id, &BX_CPU_C::MOV_ERXId },
/* BE /dr */ { BxImmediate_Id, &BX_CPU_C::MOV_ERXId },
/* BF /dr */ { BxImmediate_Id, &BX_CPU_C::MOV_ERXId },
/* C0 /dr */ { BxGroup2 | BxImmediate_Ib, NULL, BxOpcodeInfoG2Eb },
/* C1 /dr */ { BxGroup2 | BxImmediate_Ib, NULL, BxOpcodeInfoG2Ed },
/* C2 /dr */ { BxImmediate_Iw | BxTraceEnd, &BX_CPU_C::RETnear32_Iw },
@ -947,7 +947,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo32R[512*2] = {
/* C4 /dr */ { 0, &BX_CPU_C::BxError }, // LES
/* C5 /dr */ { 0, &BX_CPU_C::BxError }, // LDS
/* C6 /dr */ { BxImmediate_Ib, &BX_CPU_C::MOV_EbIbR },
/* C7 /dr */ { BxImmediate_Iv, &BX_CPU_C::MOV_EdIdR },
/* C7 /dr */ { BxImmediate_Id, &BX_CPU_C::MOV_EdIdR },
/* C8 /dr */ { BxImmediate_IwIb, &BX_CPU_C::ENTER32_IwIb },
/* C9 /dr */ { 0, &BX_CPU_C::LEAVE },
/* CA /dr */ { BxImmediate_Iw | BxTraceEnd, &BX_CPU_C::RETfar32_Iw },
@ -1174,8 +1174,8 @@ static const BxOpcodeInfo_t BxOpcodeInfo32R[512*2] = {
/* 0F 75 /dr */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f75 },
/* 0F 76 /dr */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f76 },
/* 0F 77 /dr */ { 0, &BX_CPU_C::EMMS },
/* 0F 78 /dr */ { 0, &BX_CPU_C::BxError },
/* 0F 79 /dr */ { 0, &BX_CPU_C::BxError },
/* 0F 78 /dr */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f78 },
/* 0F 79 /dr */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f79 },
/* 0F 7A /dr */ { 0, &BX_CPU_C::BxError },
/* 0F 7B /dr */ { 0, &BX_CPU_C::BxError },
/* 0F 7C /dr */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f7c },
@ -1324,7 +1324,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo32M[512*2] = {
/* 02 /wm */ { 0, &BX_CPU_C::ADD_GbEbM },
/* 03 /wm */ { 0, &BX_CPU_C::ADD_GwEwM },
/* 04 /wm */ { BxImmediate_Ib, &BX_CPU_C::ADD_ALIb },
/* 05 /wm */ { BxImmediate_Iv, &BX_CPU_C::ADD_AXIw },
/* 05 /wm */ { BxImmediate_Iw, &BX_CPU_C::ADD_AXIw },
/* 06 /wm */ { 0, &BX_CPU_C::PUSH16_ES },
/* 07 /wm */ { 0, &BX_CPU_C::POP16_ES },
/* 08 /wm */ { BxLockable, &BX_CPU_C::OR_EbGbM },
@ -1332,7 +1332,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo32M[512*2] = {
/* 0A /wm */ { 0, &BX_CPU_C::OR_GbEbM },
/* 0B /wm */ { 0, &BX_CPU_C::OR_GwEwM },
/* 0C /wm */ { BxImmediate_Ib, &BX_CPU_C::OR_ALIb },
/* 0D /wm */ { BxImmediate_Iv, &BX_CPU_C::OR_AXIw },
/* 0D /wm */ { BxImmediate_Iw, &BX_CPU_C::OR_AXIw },
/* 0E /wm */ { 0, &BX_CPU_C::PUSH16_CS },
/* 0F /wm */ { 0, &BX_CPU_C::BxError }, // 2-byte escape
/* 10 /wm */ { BxLockable, &BX_CPU_C::ADC_EbGbM },
@ -1340,7 +1340,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo32M[512*2] = {
/* 12 /wm */ { 0, &BX_CPU_C::ADC_GbEbM },
/* 13 /wm */ { 0, &BX_CPU_C::ADC_GwEwM },
/* 14 /wm */ { BxImmediate_Ib, &BX_CPU_C::ADC_ALIb },
/* 15 /wm */ { BxImmediate_Iv, &BX_CPU_C::ADC_AXIw },
/* 15 /wm */ { BxImmediate_Iw, &BX_CPU_C::ADC_AXIw },
/* 16 /wm */ { 0, &BX_CPU_C::PUSH16_SS },
/* 17 /wm */ { BxTraceEnd, &BX_CPU_C::POP16_SS }, // async_event = 1
/* 18 /wm */ { BxLockable, &BX_CPU_C::SBB_EbGbM },
@ -1348,7 +1348,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo32M[512*2] = {
/* 1A /wm */ { 0, &BX_CPU_C::SBB_GbEbM },
/* 1B /wm */ { 0, &BX_CPU_C::SBB_GwEwM },
/* 1C /wm */ { BxImmediate_Ib, &BX_CPU_C::SBB_ALIb },
/* 1D /wm */ { BxImmediate_Iv, &BX_CPU_C::SBB_AXIw },
/* 1D /wm */ { BxImmediate_Iw, &BX_CPU_C::SBB_AXIw },
/* 1E /wm */ { 0, &BX_CPU_C::PUSH16_DS },
/* 1F /wm */ { 0, &BX_CPU_C::POP16_DS },
/* 20 /wm */ { BxLockable, &BX_CPU_C::AND_EbGbM },
@ -1356,7 +1356,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo32M[512*2] = {
/* 22 /wm */ { 0, &BX_CPU_C::AND_GbEbM },
/* 23 /wm */ { 0, &BX_CPU_C::AND_GwEwM },
/* 24 /wm */ { BxImmediate_Ib, &BX_CPU_C::AND_ALIb },
/* 25 /wm */ { BxImmediate_Iv, &BX_CPU_C::AND_AXIw },
/* 25 /wm */ { BxImmediate_Iw, &BX_CPU_C::AND_AXIw },
/* 26 /wm */ { BxPrefix, &BX_CPU_C::BxError }, // ES:
/* 27 /wm */ { 0, &BX_CPU_C::DAA },
/* 28 /wm */ { BxLockable, &BX_CPU_C::SUB_EbGbM },
@ -1364,7 +1364,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo32M[512*2] = {
/* 2A /wm */ { 0, &BX_CPU_C::SUB_GbEbM },
/* 2B /wm */ { 0, &BX_CPU_C::SUB_GwEwM },
/* 2C /wm */ { BxImmediate_Ib, &BX_CPU_C::SUB_ALIb },
/* 2D /wm */ { BxImmediate_Iv, &BX_CPU_C::SUB_AXIw },
/* 2D /wm */ { BxImmediate_Iw, &BX_CPU_C::SUB_AXIw },
/* 2E /wm */ { BxPrefix, &BX_CPU_C::BxError }, // CS:
/* 2F /wm */ { 0, &BX_CPU_C::DAS },
/* 30 /wm */ { BxLockable, &BX_CPU_C::XOR_EbGbM },
@ -1372,7 +1372,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo32M[512*2] = {
/* 32 /wm */ { 0, &BX_CPU_C::XOR_GbEbM },
/* 33 /wm */ { 0, &BX_CPU_C::XOR_GwEwM },
/* 34 /wm */ { BxImmediate_Ib, &BX_CPU_C::XOR_ALIb },
/* 35 /wm */ { BxImmediate_Iv, &BX_CPU_C::XOR_AXIw },
/* 35 /wm */ { BxImmediate_Iw, &BX_CPU_C::XOR_AXIw },
/* 36 /wm */ { BxPrefix, &BX_CPU_C::BxError }, // SS:
/* 37 /wm */ { 0, &BX_CPU_C::AAA },
/* 38 /wm */ { 0, &BX_CPU_C::CMP_EbGbM },
@ -1380,7 +1380,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo32M[512*2] = {
/* 3A /wm */ { 0, &BX_CPU_C::CMP_GbEbM },
/* 3B /wm */ { 0, &BX_CPU_C::CMP_GwEwM },
/* 3C /wm */ { BxImmediate_Ib, &BX_CPU_C::CMP_ALIb },
/* 3D /wm */ { BxImmediate_Iv, &BX_CPU_C::CMP_AXIw },
/* 3D /wm */ { BxImmediate_Iw, &BX_CPU_C::CMP_AXIw },
/* 3E /wm */ { BxPrefix, &BX_CPU_C::BxError }, // DS:
/* 3F /wm */ { 0, &BX_CPU_C::AAS },
/* 40 /wm */ { 0, &BX_CPU_C::INC_RX },
@ -1423,8 +1423,8 @@ static const BxOpcodeInfo_t BxOpcodeInfo32M[512*2] = {
/* 65 /wm */ { BxPrefix, &BX_CPU_C::BxError }, // GS:
/* 66 /wm */ { BxPrefix, &BX_CPU_C::BxError }, // OS:
/* 67 /wm */ { BxPrefix, &BX_CPU_C::BxError }, // AS:
/* 68 /wm */ { BxImmediate_Iv, &BX_CPU_C::PUSH_Iw },
/* 69 /wm */ { BxImmediate_Iv, &BX_CPU_C::IMUL_GwEwIw },
/* 68 /wm */ { BxImmediate_Iw, &BX_CPU_C::PUSH_Iw },
/* 69 /wm */ { BxImmediate_Iw, &BX_CPU_C::IMUL_GwEwIw },
/* 6A /wm */ { BxImmediate_Ib_SE, &BX_CPU_C::PUSH_Iw },
/* 6B /wm */ { BxImmediate_Ib_SE, &BX_CPU_C::IMUL_GwEwIw },
/* 6C /wm */ { 0, &BX_CPU_C::REP_INSB_YbDX },
@ -1448,7 +1448,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo32M[512*2] = {
/* 7E /wm */ { BxImmediate_BrOff8 | BxTraceEnd, &BX_CPU_C::JLE_Jw },
/* 7F /wm */ { BxImmediate_BrOff8 | BxTraceEnd, &BX_CPU_C::JNLE_Jw },
/* 80 /wm */ { BxGroup1 | BxImmediate_Ib, NULL, BxOpcodeInfoG1EbIbM },
/* 81 /wm */ { BxGroup1 | BxImmediate_Iv, NULL, BxOpcodeInfoG1EwM },
/* 81 /wm */ { BxGroup1 | BxImmediate_Iw, NULL, BxOpcodeInfoG1EwM },
/* 82 /wm */ { BxGroup1 | BxImmediate_Ib, NULL, BxOpcodeInfoG1EbIbM },
/* 83 /wm */ { BxGroup1 | BxImmediate_Ib_SE, NULL, BxOpcodeInfoG1EwM },
/* 84 /wm */ { 0, &BX_CPU_C::TEST_EbGbM },
@ -1488,7 +1488,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo32M[512*2] = {
/* A6 /wm */ { 0, &BX_CPU_C::REP_CMPSB_XbYb },
/* A7 /wm */ { 0, &BX_CPU_C::REP_CMPSW_XwYw },
/* A8 /wm */ { BxImmediate_Ib, &BX_CPU_C::TEST_ALIb },
/* A9 /wm */ { BxImmediate_Iv, &BX_CPU_C::TEST_AXIw },
/* A9 /wm */ { BxImmediate_Iw, &BX_CPU_C::TEST_AXIw },
/* AA /wm */ { 0, &BX_CPU_C::REP_STOSB_YbAL },
/* AB /wm */ { 0, &BX_CPU_C::REP_STOSW_YwAX },
/* AC /wm */ { 0, &BX_CPU_C::REP_LODSB_ALXb },
@ -1503,14 +1503,14 @@ static const BxOpcodeInfo_t BxOpcodeInfo32M[512*2] = {
/* B5 /wm */ { BxImmediate_Ib, &BX_CPU_C::MOV_RHIb },
/* B6 /wm */ { BxImmediate_Ib, &BX_CPU_C::MOV_RHIb },
/* B7 /wm */ { BxImmediate_Ib, &BX_CPU_C::MOV_RHIb },
/* B8 /wm */ { BxImmediate_Iv, &BX_CPU_C::MOV_RXIw },
/* B9 /wm */ { BxImmediate_Iv, &BX_CPU_C::MOV_RXIw },
/* BA /wm */ { BxImmediate_Iv, &BX_CPU_C::MOV_RXIw },
/* BB /wm */ { BxImmediate_Iv, &BX_CPU_C::MOV_RXIw },
/* BC /wm */ { BxImmediate_Iv, &BX_CPU_C::MOV_RXIw },
/* BD /wm */ { BxImmediate_Iv, &BX_CPU_C::MOV_RXIw },
/* BE /wm */ { BxImmediate_Iv, &BX_CPU_C::MOV_RXIw },
/* BF /wm */ { BxImmediate_Iv, &BX_CPU_C::MOV_RXIw },
/* B8 /wm */ { BxImmediate_Iw, &BX_CPU_C::MOV_RXIw },
/* B9 /wm */ { BxImmediate_Iw, &BX_CPU_C::MOV_RXIw },
/* BA /wm */ { BxImmediate_Iw, &BX_CPU_C::MOV_RXIw },
/* BB /wm */ { BxImmediate_Iw, &BX_CPU_C::MOV_RXIw },
/* BC /wm */ { BxImmediate_Iw, &BX_CPU_C::MOV_RXIw },
/* BD /wm */ { BxImmediate_Iw, &BX_CPU_C::MOV_RXIw },
/* BE /wm */ { BxImmediate_Iw, &BX_CPU_C::MOV_RXIw },
/* BF /wm */ { BxImmediate_Iw, &BX_CPU_C::MOV_RXIw },
/* C0 /wm */ { BxGroup2 | BxImmediate_Ib, NULL, BxOpcodeInfoG2Eb },
/* C1 /wm */ { BxGroup2 | BxImmediate_Ib, NULL, BxOpcodeInfoG2Ew },
/* C2 /wm */ { BxImmediate_Iw | BxTraceEnd, &BX_CPU_C::RETnear16_Iw },
@ -1518,7 +1518,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo32M[512*2] = {
/* C4 /wm */ { 0, &BX_CPU_C::LES_GwMp },
/* C5 /wm */ { 0, &BX_CPU_C::LDS_GwMp },
/* C6 /wm */ { BxImmediate_Ib, &BX_CPU_C::MOV_EbIbM },
/* C7 /wm */ { BxImmediate_Iv, &BX_CPU_C::MOV_EwIwM },
/* C7 /wm */ { BxImmediate_Iw, &BX_CPU_C::MOV_EwIwM },
/* C8 /wm */ { BxImmediate_IwIb, &BX_CPU_C::ENTER16_IwIb },
/* C9 /wm */ { 0, &BX_CPU_C::LEAVE },
/* CA /wm */ { BxImmediate_Iw | BxTraceEnd, &BX_CPU_C::RETfar16_Iw },
@ -1745,8 +1745,8 @@ static const BxOpcodeInfo_t BxOpcodeInfo32M[512*2] = {
/* 0F 75 /wm */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f75 },
/* 0F 76 /wm */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f76 },
/* 0F 77 /wm */ { 0, &BX_CPU_C::EMMS },
/* 0F 78 /wm */ { 0, &BX_CPU_C::BxError },
/* 0F 79 /wm */ { 0, &BX_CPU_C::BxError },
/* 0F 78 /wm */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f78 },
/* 0F 79 /wm */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f79 },
/* 0F 7A /wm */ { 0, &BX_CPU_C::BxError },
/* 0F 7B /wm */ { 0, &BX_CPU_C::BxError },
/* 0F 7C /wm */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f7c },
@ -1888,7 +1888,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo32M[512*2] = {
/* 02 /dm */ { 0, &BX_CPU_C::ADD_GbEbM },
/* 03 /dm */ { 0, &BX_CPU_C::ADD_GdEdM },
/* 04 /dm */ { BxImmediate_Ib, &BX_CPU_C::ADD_ALIb },
/* 05 /dm */ { BxImmediate_Iv, &BX_CPU_C::ADD_EAXId },
/* 05 /dm */ { BxImmediate_Id, &BX_CPU_C::ADD_EAXId },
/* 06 /dm */ { 0, &BX_CPU_C::PUSH32_ES },
/* 07 /dm */ { 0, &BX_CPU_C::POP32_ES },
/* 08 /dm */ { BxLockable, &BX_CPU_C::OR_EbGbM },
@ -1896,7 +1896,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo32M[512*2] = {
/* 0A /dm */ { 0, &BX_CPU_C::OR_GbEbM },
/* 0B /dm */ { 0, &BX_CPU_C::OR_GdEdM },
/* 0C /dm */ { BxImmediate_Ib, &BX_CPU_C::OR_ALIb },
/* 0D /dm */ { BxImmediate_Iv, &BX_CPU_C::OR_EAXId },
/* 0D /dm */ { BxImmediate_Id, &BX_CPU_C::OR_EAXId },
/* 0E /dm */ { 0, &BX_CPU_C::PUSH32_CS },
/* 0F /dm */ { 0, &BX_CPU_C::BxError }, // 2-byte escape
/* 10 /dm */ { BxLockable, &BX_CPU_C::ADC_EbGbM },
@ -1904,7 +1904,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo32M[512*2] = {
/* 12 /dm */ { 0, &BX_CPU_C::ADC_GbEbM },
/* 13 /dm */ { 0, &BX_CPU_C::ADC_GdEdM },
/* 14 /dm */ { BxImmediate_Ib, &BX_CPU_C::ADC_ALIb },
/* 15 /dm */ { BxImmediate_Iv, &BX_CPU_C::ADC_EAXId },
/* 15 /dm */ { BxImmediate_Id, &BX_CPU_C::ADC_EAXId },
/* 16 /dm */ { 0, &BX_CPU_C::PUSH32_SS },
/* 17 /dm */ { BxTraceEnd, &BX_CPU_C::POP32_SS }, // async_event = 1
/* 18 /dm */ { BxLockable, &BX_CPU_C::SBB_EbGbM },
@ -1912,7 +1912,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo32M[512*2] = {
/* 1A /dm */ { 0, &BX_CPU_C::SBB_GbEbM },
/* 1B /dm */ { 0, &BX_CPU_C::SBB_GdEdM },
/* 1C /dm */ { BxImmediate_Ib, &BX_CPU_C::SBB_ALIb },
/* 1D /dm */ { BxImmediate_Iv, &BX_CPU_C::SBB_EAXId },
/* 1D /dm */ { BxImmediate_Id, &BX_CPU_C::SBB_EAXId },
/* 1E /dm */ { 0, &BX_CPU_C::PUSH32_DS },
/* 1F /dm */ { 0, &BX_CPU_C::POP32_DS },
/* 20 /dm */ { BxLockable, &BX_CPU_C::AND_EbGbM },
@ -1920,7 +1920,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo32M[512*2] = {
/* 22 /dm */ { 0, &BX_CPU_C::AND_GbEbM },
/* 23 /dm */ { 0, &BX_CPU_C::AND_GdEdM },
/* 24 /dm */ { BxImmediate_Ib, &BX_CPU_C::AND_ALIb },
/* 25 /dm */ { BxImmediate_Iv, &BX_CPU_C::AND_EAXId },
/* 25 /dm */ { BxImmediate_Id, &BX_CPU_C::AND_EAXId },
/* 26 /dm */ { BxPrefix, &BX_CPU_C::BxError }, // ES:
/* 27 /dm */ { 0, &BX_CPU_C::DAA },
/* 28 /dm */ { BxLockable, &BX_CPU_C::SUB_EbGbM },
@ -1928,7 +1928,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo32M[512*2] = {
/* 2A /dm */ { 0, &BX_CPU_C::SUB_GbEbM },
/* 2B /dm */ { 0, &BX_CPU_C::SUB_GdEdM },
/* 2C /dm */ { BxImmediate_Ib, &BX_CPU_C::SUB_ALIb },
/* 2D /dm */ { BxImmediate_Iv, &BX_CPU_C::SUB_EAXId },
/* 2D /dm */ { BxImmediate_Id, &BX_CPU_C::SUB_EAXId },
/* 2E /dm */ { BxPrefix, &BX_CPU_C::BxError }, // CS:
/* 2F /dm */ { 0, &BX_CPU_C::DAS },
/* 30 /dm */ { BxLockable, &BX_CPU_C::XOR_EbGbM },
@ -1936,7 +1936,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo32M[512*2] = {
/* 32 /dm */ { 0, &BX_CPU_C::XOR_GbEbM },
/* 33 /dm */ { 0, &BX_CPU_C::XOR_GdEdM },
/* 34 /dm */ { BxImmediate_Ib, &BX_CPU_C::XOR_ALIb },
/* 35 /dm */ { BxImmediate_Iv, &BX_CPU_C::XOR_EAXId },
/* 35 /dm */ { BxImmediate_Id, &BX_CPU_C::XOR_EAXId },
/* 36 /dm */ { BxPrefix, &BX_CPU_C::BxError }, // SS:
/* 37 /dm */ { 0, &BX_CPU_C::AAA },
/* 38 /dm */ { 0, &BX_CPU_C::CMP_EbGbM },
@ -1944,7 +1944,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo32M[512*2] = {
/* 3A /dm */ { 0, &BX_CPU_C::CMP_GbEbM },
/* 3B /dm */ { 0, &BX_CPU_C::CMP_GdEdM },
/* 3C /dm */ { BxImmediate_Ib, &BX_CPU_C::CMP_ALIb },
/* 3D /dm */ { BxImmediate_Iv, &BX_CPU_C::CMP_EAXId },
/* 3D /dm */ { BxImmediate_Id, &BX_CPU_C::CMP_EAXId },
/* 3E /dm */ { BxPrefix, &BX_CPU_C::BxError }, // DS:
/* 3F /dm */ { 0, &BX_CPU_C::AAS },
/* 40 /dm */ { 0, &BX_CPU_C::INC_ERX },
@ -1987,8 +1987,8 @@ static const BxOpcodeInfo_t BxOpcodeInfo32M[512*2] = {
/* 65 /dm */ { BxPrefix, &BX_CPU_C::BxError }, // GS:
/* 66 /dm */ { BxPrefix, &BX_CPU_C::BxError }, // OS:
/* 67 /dm */ { BxPrefix, &BX_CPU_C::BxError }, // AS:
/* 68 /dm */ { BxImmediate_Iv, &BX_CPU_C::PUSH_Id },
/* 69 /dm */ { BxImmediate_Iv, &BX_CPU_C::IMUL_GdEdId },
/* 68 /dm */ { BxImmediate_Id, &BX_CPU_C::PUSH_Id },
/* 69 /dm */ { BxImmediate_Id, &BX_CPU_C::IMUL_GdEdId },
/* 6A /dm */ { BxImmediate_Ib_SE, &BX_CPU_C::PUSH_Id },
/* 6B /dm */ { BxImmediate_Ib_SE, &BX_CPU_C::IMUL_GdEdId },
/* 6C /dm */ { 0, &BX_CPU_C::REP_INSB_YbDX },
@ -2012,7 +2012,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo32M[512*2] = {
/* 7E /dm */ { BxImmediate_BrOff8 | BxTraceEnd, &BX_CPU_C::JLE_Jd },
/* 7F /dm */ { BxImmediate_BrOff8 | BxTraceEnd, &BX_CPU_C::JNLE_Jd },
/* 80 /dm */ { BxGroup1 | BxImmediate_Ib, NULL, BxOpcodeInfoG1EbIbM },
/* 81 /dm */ { BxGroup1 | BxImmediate_Iv, NULL, BxOpcodeInfoG1EdM },
/* 81 /dm */ { BxGroup1 | BxImmediate_Id, NULL, BxOpcodeInfoG1EdM },
/* 82 /dm */ { BxGroup1 | BxImmediate_Ib, NULL, BxOpcodeInfoG1EbIbM },
/* 83 /dm */ { BxGroup1 | BxImmediate_Ib_SE, NULL, BxOpcodeInfoG1EdM },
/* 84 /dm */ { 0, &BX_CPU_C::TEST_EbGbM },
@ -2052,7 +2052,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo32M[512*2] = {
/* A6 /dm */ { 0, &BX_CPU_C::REP_CMPSB_XbYb },
/* A7 /dm */ { 0, &BX_CPU_C::REP_CMPSD_XdYd },
/* A8 /dm */ { BxImmediate_Ib, &BX_CPU_C::TEST_ALIb },
/* A9 /dm */ { BxImmediate_Iv, &BX_CPU_C::TEST_EAXId },
/* A9 /dm */ { BxImmediate_Id, &BX_CPU_C::TEST_EAXId },
/* AA /dm */ { 0, &BX_CPU_C::REP_STOSB_YbAL },
/* AB /dm */ { 0, &BX_CPU_C::REP_STOSD_YdEAX },
/* AC /dm */ { 0, &BX_CPU_C::REP_LODSB_ALXb },
@ -2067,14 +2067,14 @@ static const BxOpcodeInfo_t BxOpcodeInfo32M[512*2] = {
/* B5 /dm */ { BxImmediate_Ib, &BX_CPU_C::MOV_RHIb },
/* B6 /dm */ { BxImmediate_Ib, &BX_CPU_C::MOV_RHIb },
/* B7 /dm */ { BxImmediate_Ib, &BX_CPU_C::MOV_RHIb },
/* B8 /dm */ { BxImmediate_Iv, &BX_CPU_C::MOV_ERXId },
/* B9 /dm */ { BxImmediate_Iv, &BX_CPU_C::MOV_ERXId },
/* BA /dm */ { BxImmediate_Iv, &BX_CPU_C::MOV_ERXId },
/* BB /dm */ { BxImmediate_Iv, &BX_CPU_C::MOV_ERXId },
/* BC /dm */ { BxImmediate_Iv, &BX_CPU_C::MOV_ERXId },
/* BD /dm */ { BxImmediate_Iv, &BX_CPU_C::MOV_ERXId },
/* BE /dm */ { BxImmediate_Iv, &BX_CPU_C::MOV_ERXId },
/* BF /dm */ { BxImmediate_Iv, &BX_CPU_C::MOV_ERXId },
/* B8 /dm */ { BxImmediate_Id, &BX_CPU_C::MOV_ERXId },
/* B9 /dm */ { BxImmediate_Id, &BX_CPU_C::MOV_ERXId },
/* BA /dm */ { BxImmediate_Id, &BX_CPU_C::MOV_ERXId },
/* BB /dm */ { BxImmediate_Id, &BX_CPU_C::MOV_ERXId },
/* BC /dm */ { BxImmediate_Id, &BX_CPU_C::MOV_ERXId },
/* BD /dm */ { BxImmediate_Id, &BX_CPU_C::MOV_ERXId },
/* BE /dm */ { BxImmediate_Id, &BX_CPU_C::MOV_ERXId },
/* BF /dm */ { BxImmediate_Id, &BX_CPU_C::MOV_ERXId },
/* C0 /dm */ { BxGroup2 | BxImmediate_Ib, NULL, BxOpcodeInfoG2Eb },
/* C1 /dm */ { BxGroup2 | BxImmediate_Ib, NULL, BxOpcodeInfoG2Ed },
/* C2 /dm */ { BxImmediate_Iw | BxTraceEnd, &BX_CPU_C::RETnear32_Iw },
@ -2082,7 +2082,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo32M[512*2] = {
/* C4 /dm */ { 0, &BX_CPU_C::LES_GdMp },
/* C5 /dm */ { 0, &BX_CPU_C::LDS_GdMp },
/* C6 /dm */ { BxImmediate_Ib, &BX_CPU_C::MOV_EbIbM },
/* C7 /dm */ { BxImmediate_Iv, &BX_CPU_C::MOV_EdIdM },
/* C7 /dm */ { BxImmediate_Id, &BX_CPU_C::MOV_EdIdM },
/* C8 /dm */ { BxImmediate_IwIb, &BX_CPU_C::ENTER32_IwIb },
/* C9 /dm */ { 0, &BX_CPU_C::LEAVE },
/* CA /dm */ { BxImmediate_Iw | BxTraceEnd, &BX_CPU_C::RETfar32_Iw },
@ -2309,8 +2309,8 @@ static const BxOpcodeInfo_t BxOpcodeInfo32M[512*2] = {
/* 0F 75 /dm */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f75 },
/* 0F 76 /dm */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f76 },
/* 0F 77 /dm */ { 0, &BX_CPU_C::EMMS },
/* 0F 78 /dm */ { 0, &BX_CPU_C::BxError },
/* 0F 79 /dm */ { 0, &BX_CPU_C::BxError },
/* 0F 78 /dm */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f78 },
/* 0F 79 /dm */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f79 },
/* 0F 7A /dm */ { 0, &BX_CPU_C::BxError },
/* 0F 7B /dm */ { 0, &BX_CPU_C::BxError },
/* 0F 7C /dm */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f7c },
@ -2831,11 +2831,36 @@ modrm_done:
return(0);
}
break;
case BxImmediate_Iv: // same as BxImmediate_BrOff32
case BxImmediate_Iw:
if ((ilen+1) < remain) {
instruction->modRMForm.Iw = FetchWORD(iptr);
ilen += 2;
}
else {
return(0);
}
break;
case BxImmediate_IwIb:
if ((ilen+1) < remain) {
instruction->IxIxForm.Iw = FetchWORD(iptr);
iptr += 2;
ilen += 2;
}
else {
return(0);
}
if (ilen < remain) {
instruction->IxIxForm.Ib2 = *iptr;
ilen++;
}
else {
return(0);
}
break;
case BxImmediate_IvIw: // CALL_Ap
if (instruction->os32L()) {
if ((ilen+3) < remain) {
instruction->modRMForm.Id = FetchDWORD(iptr);
instruction->IxIxForm.Id = FetchDWORD(iptr);
iptr += 4;
ilen += 4;
}
@ -2843,14 +2868,12 @@ modrm_done:
}
else {
if ((ilen+1) < remain) {
instruction->modRMForm.Iw = FetchWORD(iptr);
instruction->IxIxForm.Iw = FetchWORD(iptr);
iptr += 2;
ilen += 2;
}
else return(0);
}
if (imm_mode != BxImmediate_IvIw)
break;
// Get Iw for BxImmediate_IvIw
if ((ilen+1) < remain) {
instruction->IxIxForm.Iw2 = FetchWORD(iptr);
@ -2879,29 +2902,9 @@ modrm_done:
else return(0);
}
break;
case BxImmediate_Iw:
case BxImmediate_IwIb:
if ((ilen+1) < remain) {
instruction->modRMForm.Iw = FetchWORD(iptr);
iptr += 2;
ilen += 2;
}
else {
return(0);
}
if (imm_mode == BxImmediate_Iw) break;
if (ilen < remain) {
instruction->IxIxForm.Ib2 = *iptr;
ilen++;
}
else {
return(0);
}
break;
case BxImmediate_BrOff8:
if (ilen < remain) {
Bit8s temp8s = *iptr;
instruction->modRMForm.Id = temp8s;
instruction->modRMForm.Id = (Bit8s) (*iptr);
ilen++;
}
else {
@ -2917,9 +2920,10 @@ modrm_done:
return(0);
}
break;
case BxImmediate_Id:
case BxImmediate_BrOff32:
if ((ilen+3) < remain) {
instruction->modRMForm.Id = (Bit32s) FetchDWORD(iptr);
instruction->modRMForm.Id = FetchDWORD(iptr);
ilen += 4;
}
else {

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////
// $Id: fetchdecode.h,v 1.46 2007-12-14 23:15:52 sshwarts Exp $
// $Id: fetchdecode.h,v 1.47 2007-12-15 17:42:20 sshwarts Exp $
/////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2005 Stanislav Shwartsman
@ -1056,9 +1056,9 @@ static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f2a[4] = {
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f2bM[4] = {
/* -- */ { 0, &BX_CPU_C::MOVNTPS_MpsVps },
/* 66 */ { 0, &BX_CPU_C::MOVNTPD_MpdVpd },
/* F2 */ { 0, &BX_CPU_C::BxError },
/* F3 */ { 0, &BX_CPU_C::BxError }
/* 66 */ { 0, &BX_CPU_C::MOVNTPD_MpdVpd },
/* F2 */ { 0, &BX_CPU_C::MOVNTSD_MsdVsd }, // SSE4A
/* F3 */ { 0, &BX_CPU_C::MOVNTSS_MssVss } // SSE4A
};
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f2c[4] = {
@ -1350,17 +1350,42 @@ static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f76[4] = {
/* F3 */ { 0, &BX_CPU_C::BxError }
};
static const BxOpcodeInfo_t opcodesGroupRmEXTRQ[8] = {
/* 0 */ { BxImmediate_IbIb, &BX_CPU_C::EXTRQ_VdqIbIb }, // SSE4A
/* 1 */ { 0, &BX_CPU_C::BxError },
/* 2 */ { 0, &BX_CPU_C::BxError },
/* 3 */ { 0, &BX_CPU_C::BxError },
/* 4 */ { 0, &BX_CPU_C::BxError },
/* 5 */ { 0, &BX_CPU_C::BxError },
/* 6 */ { 0, &BX_CPU_C::BxError },
/* 7 */ { 0, &BX_CPU_C::BxError }
};
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f78[4] = {
/* -- */ { 0, &BX_CPU_C::BxError },
/* 66 */ { BxRMGroup, NULL, opcodesGroupRmEXTRQ }, // SSE4A
/* F2 */ { BxImmediate_IbIb, &BX_CPU_C::INSERTQ_VdqUdqIbIb }, // SSE4A
/* F3 */ { 0, &BX_CPU_C::BxError }
};
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f79[4] = {
/* -- */ { 0, &BX_CPU_C::BxError },
/* 66 */ { 0, &BX_CPU_C::EXTRQ_VdqUdq }, // SSE4A
/* F2 */ { 0, &BX_CPU_C::INSERTQ_VdqUdq }, // SSE4A
/* F3 */ { 0, &BX_CPU_C::BxError }
};
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f7c[4] = {
/* -- */ { 0, &BX_CPU_C::BxError },
/* 66 */ { 0, &BX_CPU_C::HADDPD_VpdWpd }, // SSE3
/* F2 */ { 0, &BX_CPU_C::HADDPS_VpsWps }, // SSE3
/* 66 */ { 0, &BX_CPU_C::HADDPD_VpdWpd }, // SSE3
/* F2 */ { 0, &BX_CPU_C::HADDPS_VpsWps }, // SSE3
/* F3 */ { 0, &BX_CPU_C::BxError }
};
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f7d[4] = {
/* -- */ { 0, &BX_CPU_C::BxError },
/* 66 */ { 0, &BX_CPU_C::HSUBPD_VpdWpd }, // SSE3
/* F2 */ { 0, &BX_CPU_C::HSUBPS_VpsWps }, // SSE3
/* 66 */ { 0, &BX_CPU_C::HSUBPD_VpdWpd }, // SSE3
/* F2 */ { 0, &BX_CPU_C::HSUBPS_VpsWps }, // SSE3
/* F3 */ { 0, &BX_CPU_C::BxError }
};
@ -2808,8 +2833,8 @@ static const BxOpcodeInfo_t BxOpcodeInfoG3EwR[8] = {
};
static const BxOpcodeInfo_t BxOpcodeInfoG3EdM[8] = {
/* 0 */ { BxImmediate_Iv, &BX_CPU_C::TEST_EdIdM },
/* 1 */ { BxImmediate_Iv, &BX_CPU_C::TEST_EdIdM },
/* 0 */ { BxImmediate_Id, &BX_CPU_C::TEST_EdIdM },
/* 1 */ { BxImmediate_Id, &BX_CPU_C::TEST_EdIdM },
/* 2 */ { BxLockable, &BX_CPU_C::NOT_EdM },
/* 3 */ { BxLockable, &BX_CPU_C::NEG_EdM },
/* 4 */ { 0, &BX_CPU_C::MUL_EAXEd },
@ -2819,8 +2844,8 @@ static const BxOpcodeInfo_t BxOpcodeInfoG3EdM[8] = {
};
static const BxOpcodeInfo_t BxOpcodeInfoG3EdR[8] = {
/* 0 */ { BxImmediate_Iv, &BX_CPU_C::TEST_EdIdR },
/* 1 */ { BxImmediate_Iv, &BX_CPU_C::TEST_EdIdR },
/* 0 */ { BxImmediate_Id, &BX_CPU_C::TEST_EdIdR },
/* 1 */ { BxImmediate_Id, &BX_CPU_C::TEST_EdIdR },
/* 2 */ { 0, &BX_CPU_C::NOT_EdR },
/* 3 */ { 0, &BX_CPU_C::NEG_EdR },
/* 4 */ { 0, &BX_CPU_C::MUL_EAXEd },
@ -2831,8 +2856,8 @@ static const BxOpcodeInfo_t BxOpcodeInfoG3EdR[8] = {
#if BX_SUPPORT_X86_64
static const BxOpcodeInfo_t BxOpcodeInfo64G3EqM[8] = {
/* 0 */ { BxImmediate_Iv, &BX_CPU_C::TEST_EqIdM },
/* 1 */ { BxImmediate_Iv, &BX_CPU_C::TEST_EqIdM },
/* 0 */ { BxImmediate_Id, &BX_CPU_C::TEST_EqIdM },
/* 1 */ { BxImmediate_Id, &BX_CPU_C::TEST_EqIdM },
/* 2 */ { BxLockable, &BX_CPU_C::NOT_EqM },
/* 3 */ { BxLockable, &BX_CPU_C::NEG_EqM },
/* 4 */ { 0, &BX_CPU_C::MUL_RAXEq },
@ -2842,8 +2867,8 @@ static const BxOpcodeInfo_t BxOpcodeInfo64G3EqM[8] = {
};
static const BxOpcodeInfo_t BxOpcodeInfo64G3EqR[8] = {
/* 0 */ { BxImmediate_Iv, &BX_CPU_C::TEST_EqIdR },
/* 1 */ { BxImmediate_Iv, &BX_CPU_C::TEST_EqIdR },
/* 0 */ { BxImmediate_Id, &BX_CPU_C::TEST_EqIdR },
/* 1 */ { BxImmediate_Id, &BX_CPU_C::TEST_EqIdR },
/* 2 */ { 0, &BX_CPU_C::NOT_EqR },
/* 3 */ { 0, &BX_CPU_C::NEG_EqR },
/* 4 */ { 0, &BX_CPU_C::MUL_RAXEq },

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////
// $Id: fetchdecode64.cc,v 1.157 2007-12-14 22:41:43 sshwarts Exp $
// $Id: fetchdecode64.cc,v 1.158 2007-12-15 17:42:20 sshwarts Exp $
/////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2001 MandrakeSoft S.A.
@ -71,7 +71,7 @@ static const bx_bool BxOpcodeHasModrm64[512] = {
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 0F 40 */
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 0F 50 */
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 0F 60 */
1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1, /* 0F 70 */
1,1,1,1,1,1,1,0,1,1,0,0,1,1,1,1, /* 0F 70 */
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0F 80 */
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 0F 90 */
0,0,0,1,1,1,0,0,0,0,0,1,1,1,1,1, /* 0F A0 */
@ -178,7 +178,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64R[512*3] = {
/* 02 /wr */ { 0, &BX_CPU_C::ADD_GbEbR },
/* 03 /wr */ { 0, &BX_CPU_C::ADD_GwEwR },
/* 04 /wr */ { BxImmediate_Ib, &BX_CPU_C::ADD_ALIb },
/* 05 /wr */ { BxImmediate_Iv, &BX_CPU_C::ADD_AXIw },
/* 05 /wr */ { BxImmediate_Iw, &BX_CPU_C::ADD_AXIw },
/* 06 /wr */ { 0, &BX_CPU_C::BxError },
/* 07 /wr */ { 0, &BX_CPU_C::BxError },
/* 08 /wr */ { 0, &BX_CPU_C::OR_EbGbR },
@ -186,7 +186,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64R[512*3] = {
/* 0A /wr */ { 0, &BX_CPU_C::OR_GbEbR },
/* 0B /wr */ { 0, &BX_CPU_C::OR_GwEwR },
/* 0C /wr */ { BxImmediate_Ib, &BX_CPU_C::OR_ALIb },
/* 0D /wr */ { BxImmediate_Iv, &BX_CPU_C::OR_AXIw },
/* 0D /wr */ { BxImmediate_Iw, &BX_CPU_C::OR_AXIw },
/* 0E /wr */ { 0, &BX_CPU_C::BxError },
/* 0F /wr */ { 0, &BX_CPU_C::BxError }, // 2-byte escape
/* 10 /wr */ { 0, &BX_CPU_C::ADC_EbGbR },
@ -194,7 +194,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64R[512*3] = {
/* 12 /wr */ { 0, &BX_CPU_C::ADC_GbEbR },
/* 13 /wr */ { 0, &BX_CPU_C::ADC_GwEwR },
/* 14 /wr */ { BxImmediate_Ib, &BX_CPU_C::ADC_ALIb },
/* 15 /wr */ { BxImmediate_Iv, &BX_CPU_C::ADC_AXIw },
/* 15 /wr */ { BxImmediate_Iw, &BX_CPU_C::ADC_AXIw },
/* 16 /wr */ { 0, &BX_CPU_C::BxError },
/* 17 /wr */ { 0, &BX_CPU_C::BxError },
/* 18 /wr */ { 0, &BX_CPU_C::SBB_EbGbR },
@ -202,7 +202,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64R[512*3] = {
/* 1A /wr */ { 0, &BX_CPU_C::SBB_GbEbR },
/* 1B /wr */ { 0, &BX_CPU_C::SBB_GwEwR },
/* 1C /wr */ { BxImmediate_Ib, &BX_CPU_C::SBB_ALIb },
/* 1D /wr */ { BxImmediate_Iv, &BX_CPU_C::SBB_AXIw },
/* 1D /wr */ { BxImmediate_Iw, &BX_CPU_C::SBB_AXIw },
/* 1E /wr */ { 0, &BX_CPU_C::BxError },
/* 1F /wr */ { 0, &BX_CPU_C::BxError },
/* 20 /wr */ { 0, &BX_CPU_C::AND_EbGbR },
@ -210,7 +210,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64R[512*3] = {
/* 22 /wr */ { 0, &BX_CPU_C::AND_GbEbR },
/* 23 /wr */ { 0, &BX_CPU_C::AND_GwEwR },
/* 24 /wr */ { BxImmediate_Ib, &BX_CPU_C::AND_ALIb },
/* 25 /wr */ { BxImmediate_Iv, &BX_CPU_C::AND_AXIw },
/* 25 /wr */ { BxImmediate_Iw, &BX_CPU_C::AND_AXIw },
/* 26 /wr */ { BxPrefix, &BX_CPU_C::BxError }, // ES:
/* 27 /wr */ { 0, &BX_CPU_C::BxError },
/* 28 /wr */ { 0, &BX_CPU_C::SUB_EbGbR },
@ -218,7 +218,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64R[512*3] = {
/* 2A /wr */ { 0, &BX_CPU_C::SUB_GbEbR },
/* 2B /wr */ { 0, &BX_CPU_C::SUB_GwEwR },
/* 2C /wr */ { BxImmediate_Ib, &BX_CPU_C::SUB_ALIb },
/* 2D /wr */ { BxImmediate_Iv, &BX_CPU_C::SUB_AXIw },
/* 2D /wr */ { BxImmediate_Iw, &BX_CPU_C::SUB_AXIw },
/* 2E /wr */ { BxPrefix, &BX_CPU_C::BxError }, // CS:
/* 2F /wr */ { 0, &BX_CPU_C::BxError },
/* 30 /wr */ { 0, &BX_CPU_C::XOR_EbGbR },
@ -226,7 +226,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64R[512*3] = {
/* 32 /wr */ { 0, &BX_CPU_C::XOR_GbEbR },
/* 33 /wr */ { 0, &BX_CPU_C::XOR_GwEwR },
/* 34 /wr */ { BxImmediate_Ib, &BX_CPU_C::XOR_ALIb },
/* 35 /wr */ { BxImmediate_Iv, &BX_CPU_C::XOR_AXIw },
/* 35 /wr */ { BxImmediate_Iw, &BX_CPU_C::XOR_AXIw },
/* 36 /wr */ { BxPrefix, &BX_CPU_C::BxError }, // SS:
/* 37 /wr */ { 0, &BX_CPU_C::BxError },
/* 38 /wr */ { 0, &BX_CPU_C::CMP_EbGbR },
@ -234,7 +234,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64R[512*3] = {
/* 3A /wr */ { 0, &BX_CPU_C::CMP_GbEbR },
/* 3B /wr */ { 0, &BX_CPU_C::CMP_GwEwR },
/* 3C /wr */ { BxImmediate_Ib, &BX_CPU_C::CMP_ALIb },
/* 3D /wr */ { BxImmediate_Iv, &BX_CPU_C::CMP_AXIw },
/* 3D /wr */ { BxImmediate_Iw, &BX_CPU_C::CMP_AXIw },
/* 3E /wr */ { BxPrefix, &BX_CPU_C::BxError }, // DS:
/* 3F /wr */ { 0, &BX_CPU_C::BxError },
/* 40 /wr */ { BxPrefix, &BX_CPU_C::BxError }, // REX:
@ -277,8 +277,8 @@ static const BxOpcodeInfo_t BxOpcodeInfo64R[512*3] = {
/* 65 /wr */ { BxPrefix, &BX_CPU_C::BxError }, // GS:
/* 66 /wr */ { BxPrefix, &BX_CPU_C::BxError }, // OS:
/* 67 /wr */ { BxPrefix, &BX_CPU_C::BxError }, // AS:
/* 68 /wr */ { BxImmediate_Iv, &BX_CPU_C::PUSH_Iw },
/* 69 /wr */ { BxImmediate_Iv, &BX_CPU_C::IMUL_GwEwIw },
/* 68 /wr */ { BxImmediate_Iw, &BX_CPU_C::PUSH_Iw },
/* 69 /wr */ { BxImmediate_Iw, &BX_CPU_C::IMUL_GwEwIw },
/* 6A /wr */ { BxImmediate_Ib_SE, &BX_CPU_C::PUSH_Iw },
/* 6B /wr */ { BxImmediate_Ib_SE, &BX_CPU_C::IMUL_GwEwIw },
/* 6C /wr */ { 0, &BX_CPU_C::REP_INSB_YbDX },
@ -302,7 +302,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64R[512*3] = {
/* 7E /wr */ { BxImmediate_BrOff8 | BxTraceEnd, &BX_CPU_C::JLE_Jq },
/* 7F /wr */ { BxImmediate_BrOff8 | BxTraceEnd, &BX_CPU_C::JNLE_Jq },
/* 80 /wr */ { BxGroup1 | BxImmediate_Ib, NULL, BxOpcodeInfoG1EbIbR },
/* 81 /wr */ { BxGroup1 | BxImmediate_Iv, NULL, BxOpcodeInfoG1EwR },
/* 81 /wr */ { BxGroup1 | BxImmediate_Iw, NULL, BxOpcodeInfoG1EwR },
/* 82 /wr */ { 0, &BX_CPU_C::BxError },
/* 83 /wr */ { BxGroup1 | BxImmediate_Ib_SE, NULL, BxOpcodeInfoG1EwR },
/* 84 /wr */ { 0, &BX_CPU_C::TEST_EbGbR },
@ -342,7 +342,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64R[512*3] = {
/* A6 /wr */ { 0, &BX_CPU_C::REP_CMPSB_XbYb },
/* A7 /wr */ { 0, &BX_CPU_C::REP_CMPSW_XwYw },
/* A8 /wr */ { BxImmediate_Ib, &BX_CPU_C::TEST_ALIb },
/* A9 /wr */ { BxImmediate_Iv, &BX_CPU_C::TEST_AXIw },
/* A9 /wr */ { BxImmediate_Iw, &BX_CPU_C::TEST_AXIw },
/* AA /wr */ { 0, &BX_CPU_C::REP_STOSB_YbAL },
/* AB /wr */ { 0, &BX_CPU_C::REP_STOSW_YwAX },
/* AC /wr */ { 0, &BX_CPU_C::REP_LODSB_ALXb },
@ -357,14 +357,14 @@ static const BxOpcodeInfo_t BxOpcodeInfo64R[512*3] = {
/* B5 /wr */ { BxImmediate_Ib, &BX_CPU_C::MOV_RLIb },
/* B6 /wr */ { BxImmediate_Ib, &BX_CPU_C::MOV_RLIb },
/* B7 /wr */ { BxImmediate_Ib, &BX_CPU_C::MOV_RLIb },
/* B8 /wr */ { BxImmediate_Iv, &BX_CPU_C::MOV_RXIw },
/* B9 /wr */ { BxImmediate_Iv, &BX_CPU_C::MOV_RXIw },
/* BA /wr */ { BxImmediate_Iv, &BX_CPU_C::MOV_RXIw },
/* BB /wr */ { BxImmediate_Iv, &BX_CPU_C::MOV_RXIw },
/* BC /wr */ { BxImmediate_Iv, &BX_CPU_C::MOV_RXIw },
/* BD /wr */ { BxImmediate_Iv, &BX_CPU_C::MOV_RXIw },
/* BE /wr */ { BxImmediate_Iv, &BX_CPU_C::MOV_RXIw },
/* BF /wr */ { BxImmediate_Iv, &BX_CPU_C::MOV_RXIw },
/* B8 /wr */ { BxImmediate_Iw, &BX_CPU_C::MOV_RXIw },
/* B9 /wr */ { BxImmediate_Iw, &BX_CPU_C::MOV_RXIw },
/* BA /wr */ { BxImmediate_Iw, &BX_CPU_C::MOV_RXIw },
/* BB /wr */ { BxImmediate_Iw, &BX_CPU_C::MOV_RXIw },
/* BC /wr */ { BxImmediate_Iw, &BX_CPU_C::MOV_RXIw },
/* BD /wr */ { BxImmediate_Iw, &BX_CPU_C::MOV_RXIw },
/* BE /wr */ { BxImmediate_Iw, &BX_CPU_C::MOV_RXIw },
/* BF /wr */ { BxImmediate_Iw, &BX_CPU_C::MOV_RXIw },
/* C0 /wr */ { BxGroup2 | BxImmediate_Ib, NULL, BxOpcodeInfoG2Eb },
/* C1 /wr */ { BxGroup2 | BxImmediate_Ib, NULL, BxOpcodeInfoG2Ew },
/* C2 /wr */ { BxImmediate_Iw | BxTraceEnd, &BX_CPU_C::RETnear16_Iw },
@ -372,7 +372,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64R[512*3] = {
/* C4 /wr */ { 0, &BX_CPU_C::BxError },
/* C5 /wr */ { 0, &BX_CPU_C::BxError },
/* C6 /wr */ { BxImmediate_Ib, &BX_CPU_C::MOV_EbIbR },
/* C7 /wr */ { BxImmediate_Iv, &BX_CPU_C::MOV_EwIwR },
/* C7 /wr */ { BxImmediate_Iw, &BX_CPU_C::MOV_EwIwR },
/* C8 /wr */ { BxImmediate_IwIb, &BX_CPU_C::ENTER64_IwIb },
/* C9 /wr */ { 0, &BX_CPU_C::LEAVE64 },
/* CA /wr */ { BxImmediate_Iw | BxTraceEnd, &BX_CPU_C::RETfar16_Iw },
@ -564,8 +564,8 @@ static const BxOpcodeInfo_t BxOpcodeInfo64R[512*3] = {
/* 0F 75 /wr */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f75 },
/* 0F 76 /wr */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f76 },
/* 0F 77 /wr */ { 0, &BX_CPU_C::EMMS },
/* 0F 78 /wr */ { 0, &BX_CPU_C::BxError },
/* 0F 79 /wr */ { 0, &BX_CPU_C::BxError },
/* 0F 78 /wr */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f78 },
/* 0F 79 /wr */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f79 },
/* 0F 7A /wr */ { 0, &BX_CPU_C::BxError },
/* 0F 7B /wr */ { 0, &BX_CPU_C::BxError },
/* 0F 7C /wr */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f7c },
@ -707,7 +707,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64R[512*3] = {
/* 02 /dr */ { 0, &BX_CPU_C::ADD_GbEbR },
/* 03 /dr */ { 0, &BX_CPU_C::ADD_GdEdR },
/* 04 /dr */ { BxImmediate_Ib, &BX_CPU_C::ADD_ALIb },
/* 05 /dr */ { BxImmediate_Iv, &BX_CPU_C::ADD_EAXId },
/* 05 /dr */ { BxImmediate_Id, &BX_CPU_C::ADD_EAXId },
/* 06 /dr */ { 0, &BX_CPU_C::BxError },
/* 07 /dr */ { 0, &BX_CPU_C::BxError },
/* 08 /dr */ { 0, &BX_CPU_C::OR_EbGbR },
@ -715,7 +715,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64R[512*3] = {
/* 0A /dr */ { 0, &BX_CPU_C::OR_GbEbR },
/* 0B /dr */ { 0, &BX_CPU_C::OR_GdEdR },
/* 0C /dr */ { BxImmediate_Ib, &BX_CPU_C::OR_ALIb },
/* 0D /dr */ { BxImmediate_Iv, &BX_CPU_C::OR_EAXId },
/* 0D /dr */ { BxImmediate_Id, &BX_CPU_C::OR_EAXId },
/* 0E /dr */ { 0, &BX_CPU_C::BxError },
/* 0F /dr */ { 0, &BX_CPU_C::BxError }, // 2-byte escape
/* 10 /dr */ { 0, &BX_CPU_C::ADC_EbGbR },
@ -723,7 +723,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64R[512*3] = {
/* 12 /dr */ { 0, &BX_CPU_C::ADC_GbEbR },
/* 13 /dr */ { 0, &BX_CPU_C::ADC_GdEdR },
/* 14 /dr */ { BxImmediate_Ib, &BX_CPU_C::ADC_ALIb },
/* 15 /dr */ { BxImmediate_Iv, &BX_CPU_C::ADC_EAXId },
/* 15 /dr */ { BxImmediate_Id, &BX_CPU_C::ADC_EAXId },
/* 16 /dr */ { 0, &BX_CPU_C::BxError },
/* 17 /dr */ { 0, &BX_CPU_C::BxError },
/* 18 /dr */ { 0, &BX_CPU_C::SBB_EbGbR },
@ -731,7 +731,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64R[512*3] = {
/* 1A /dr */ { 0, &BX_CPU_C::SBB_GbEbR },
/* 1B /dr */ { 0, &BX_CPU_C::SBB_GdEdR },
/* 1C /dr */ { BxImmediate_Ib, &BX_CPU_C::SBB_ALIb },
/* 1D /dr */ { BxImmediate_Iv, &BX_CPU_C::SBB_EAXId },
/* 1D /dr */ { BxImmediate_Id, &BX_CPU_C::SBB_EAXId },
/* 1E /dr */ { 0, &BX_CPU_C::BxError },
/* 1F /dr */ { 0, &BX_CPU_C::BxError },
/* 20 /dr */ { 0, &BX_CPU_C::AND_EbGbR },
@ -739,7 +739,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64R[512*3] = {
/* 22 /dr */ { 0, &BX_CPU_C::AND_GbEbR },
/* 23 /dr */ { 0, &BX_CPU_C::AND_GdEdR },
/* 24 /dr */ { BxImmediate_Ib, &BX_CPU_C::AND_ALIb },
/* 25 /dr */ { BxImmediate_Iv, &BX_CPU_C::AND_EAXId },
/* 25 /dr */ { BxImmediate_Id, &BX_CPU_C::AND_EAXId },
/* 26 /dr */ { BxPrefix, &BX_CPU_C::BxError }, // ES:
/* 27 /dr */ { 0, &BX_CPU_C::BxError },
/* 28 /dr */ { 0, &BX_CPU_C::SUB_EbGbR },
@ -747,7 +747,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64R[512*3] = {
/* 2A /dr */ { 0, &BX_CPU_C::SUB_GbEbR },
/* 2B /dr */ { 0, &BX_CPU_C::SUB_GdEdR },
/* 2C /dr */ { BxImmediate_Ib, &BX_CPU_C::SUB_ALIb },
/* 2D /dr */ { BxImmediate_Iv, &BX_CPU_C::SUB_EAXId },
/* 2D /dr */ { BxImmediate_Id, &BX_CPU_C::SUB_EAXId },
/* 2E /dr */ { BxPrefix, &BX_CPU_C::BxError }, // CS:
/* 2F /dr */ { 0, &BX_CPU_C::BxError },
/* 30 /dr */ { 0, &BX_CPU_C::XOR_EbGbR },
@ -755,7 +755,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64R[512*3] = {
/* 32 /dr */ { 0, &BX_CPU_C::XOR_GbEbR },
/* 33 /dr */ { 0, &BX_CPU_C::XOR_GdEdR },
/* 34 /dr */ { BxImmediate_Ib, &BX_CPU_C::XOR_ALIb },
/* 35 /dr */ { BxImmediate_Iv, &BX_CPU_C::XOR_EAXId },
/* 35 /dr */ { BxImmediate_Id, &BX_CPU_C::XOR_EAXId },
/* 36 /dr */ { BxPrefix, &BX_CPU_C::BxError }, // SS:
/* 37 /dr */ { 0, &BX_CPU_C::BxError },
/* 38 /dr */ { 0, &BX_CPU_C::CMP_EbGbR },
@ -763,7 +763,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64R[512*3] = {
/* 3A /dr */ { 0, &BX_CPU_C::CMP_GbEbR },
/* 3B /dr */ { 0, &BX_CPU_C::CMP_GdEdR },
/* 3C /dr */ { BxImmediate_Ib, &BX_CPU_C::CMP_ALIb },
/* 3D /dr */ { BxImmediate_Iv, &BX_CPU_C::CMP_EAXId },
/* 3D /dr */ { BxImmediate_Id, &BX_CPU_C::CMP_EAXId },
/* 3E /dr */ { BxPrefix, &BX_CPU_C::BxError }, // DS:
/* 3F /dr */ { 0, &BX_CPU_C::BxError },
/* 40 /dr */ { BxPrefix, &BX_CPU_C::BxError }, // REX:
@ -806,8 +806,8 @@ static const BxOpcodeInfo_t BxOpcodeInfo64R[512*3] = {
/* 65 /dr */ { BxPrefix, &BX_CPU_C::BxError }, // GS:
/* 66 /dr */ { BxPrefix, &BX_CPU_C::BxError }, // OS:
/* 67 /dr */ { BxPrefix, &BX_CPU_C::BxError }, // AS:
/* 68 /dr */ { BxImmediate_Iv, &BX_CPU_C::PUSH64_Id },
/* 69 /dr */ { BxImmediate_Iv, &BX_CPU_C::IMUL_GdEdId },
/* 68 /dr */ { BxImmediate_Id, &BX_CPU_C::PUSH64_Id },
/* 69 /dr */ { BxImmediate_Id, &BX_CPU_C::IMUL_GdEdId },
/* 6A /dr */ { BxImmediate_Ib_SE, &BX_CPU_C::PUSH64_Id },
/* 6B /dr */ { BxImmediate_Ib_SE, &BX_CPU_C::IMUL_GdEdId },
/* 6C /dr */ { 0, &BX_CPU_C::REP_INSB_YbDX },
@ -831,7 +831,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64R[512*3] = {
/* 7E /dr */ { BxImmediate_BrOff8 | BxTraceEnd, &BX_CPU_C::JLE_Jq },
/* 7F /dr */ { BxImmediate_BrOff8 | BxTraceEnd, &BX_CPU_C::JNLE_Jq },
/* 80 /dr */ { BxGroup1 | BxImmediate_Ib, NULL, BxOpcodeInfoG1EbIbR },
/* 81 /dr */ { BxGroup5 | BxImmediate_Iv, NULL, BxOpcodeInfoG1EdR },
/* 81 /dr */ { BxGroup5 | BxImmediate_Id, NULL, BxOpcodeInfoG1EdR },
/* 82 /dr */ { 0, &BX_CPU_C::BxError },
/* 83 /dr */ { BxGroup5 | BxImmediate_Ib_SE, NULL, BxOpcodeInfoG1EdR },
/* 84 /dr */ { 0, &BX_CPU_C::TEST_EbGbR },
@ -871,7 +871,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64R[512*3] = {
/* A6 /dr */ { 0, &BX_CPU_C::REP_CMPSB_XbYb },
/* A7 /dr */ { 0, &BX_CPU_C::REP_CMPSD_XdYd },
/* A8 /dr */ { BxImmediate_Ib, &BX_CPU_C::TEST_ALIb },
/* A9 /dr */ { BxImmediate_Iv, &BX_CPU_C::TEST_EAXId },
/* A9 /dr */ { BxImmediate_Id, &BX_CPU_C::TEST_EAXId },
/* AA /dr */ { 0, &BX_CPU_C::REP_STOSB_YbAL },
/* AB /dr */ { 0, &BX_CPU_C::REP_STOSD_YdEAX },
/* AC /dr */ { 0, &BX_CPU_C::REP_LODSB_ALXb },
@ -886,14 +886,14 @@ static const BxOpcodeInfo_t BxOpcodeInfo64R[512*3] = {
/* B5 /dr */ { BxImmediate_Ib, &BX_CPU_C::MOV_RLIb },
/* B6 /dr */ { BxImmediate_Ib, &BX_CPU_C::MOV_RLIb },
/* B7 /dr */ { BxImmediate_Ib, &BX_CPU_C::MOV_RLIb },
/* B8 /dr */ { BxImmediate_Iv, &BX_CPU_C::MOV_ERXId },
/* B9 /dr */ { BxImmediate_Iv, &BX_CPU_C::MOV_ERXId },
/* BA /dr */ { BxImmediate_Iv, &BX_CPU_C::MOV_ERXId },
/* BB /dr */ { BxImmediate_Iv, &BX_CPU_C::MOV_ERXId },
/* BC /dr */ { BxImmediate_Iv, &BX_CPU_C::MOV_ERXId },
/* BD /dr */ { BxImmediate_Iv, &BX_CPU_C::MOV_ERXId },
/* BE /dr */ { BxImmediate_Iv, &BX_CPU_C::MOV_ERXId },
/* BF /dr */ { BxImmediate_Iv, &BX_CPU_C::MOV_ERXId },
/* B8 /dr */ { BxImmediate_Id, &BX_CPU_C::MOV_ERXId },
/* B9 /dr */ { BxImmediate_Id, &BX_CPU_C::MOV_ERXId },
/* BA /dr */ { BxImmediate_Id, &BX_CPU_C::MOV_ERXId },
/* BB /dr */ { BxImmediate_Id, &BX_CPU_C::MOV_ERXId },
/* BC /dr */ { BxImmediate_Id, &BX_CPU_C::MOV_ERXId },
/* BD /dr */ { BxImmediate_Id, &BX_CPU_C::MOV_ERXId },
/* BE /dr */ { BxImmediate_Id, &BX_CPU_C::MOV_ERXId },
/* BF /dr */ { BxImmediate_Id, &BX_CPU_C::MOV_ERXId },
/* C0 /dr */ { BxGroup2 | BxImmediate_Ib, NULL, BxOpcodeInfoG2Eb },
/* C1 /dr */ { BxGroup2 | BxImmediate_Ib, NULL, BxOpcodeInfoG2Ed },
/* C2 /dr */ { BxImmediate_Iw | BxTraceEnd, &BX_CPU_C::RETnear64_Iw },
@ -901,7 +901,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64R[512*3] = {
/* C4 /dr */ { 0, &BX_CPU_C::BxError },
/* C5 /dr */ { 0, &BX_CPU_C::BxError },
/* C6 /dr */ { BxImmediate_Ib, &BX_CPU_C::MOV_EbIbR },
/* C7 /dr */ { BxImmediate_Iv, &BX_CPU_C::MOV_EdIdR },
/* C7 /dr */ { BxImmediate_Id, &BX_CPU_C::MOV_EdIdR },
/* C8 /dr */ { BxImmediate_IwIb, &BX_CPU_C::ENTER64_IwIb },
/* C9 /dr */ { 0, &BX_CPU_C::LEAVE64 },
/* CA /dr */ { BxImmediate_Iw | BxTraceEnd, &BX_CPU_C::RETfar32_Iw },
@ -1093,8 +1093,8 @@ static const BxOpcodeInfo_t BxOpcodeInfo64R[512*3] = {
/* 0F 75 /dr */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f75 },
/* 0F 76 /dr */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f76 },
/* 0F 77 /dr */ { 0, &BX_CPU_C::EMMS },
/* 0F 78 /dr */ { 0, &BX_CPU_C::BxError },
/* 0F 79 /dr */ { 0, &BX_CPU_C::BxError },
/* 0F 78 /dr */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f78 },
/* 0F 79 /dr */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f79 },
/* 0F 7A /dr */ { 0, &BX_CPU_C::BxError },
/* 0F 7B /dr */ { 0, &BX_CPU_C::BxError },
/* 0F 7C /dr */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f7c },
@ -1236,7 +1236,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64R[512*3] = {
/* 02 /qr */ { 0, &BX_CPU_C::ADD_GbEbR },
/* 03 /qr */ { 0, &BX_CPU_C::ADD_GqEqR },
/* 04 /qr */ { BxImmediate_Ib, &BX_CPU_C::ADD_ALIb },
/* 05 /qr */ { BxImmediate_Iv, &BX_CPU_C::ADD_RAXId },
/* 05 /qr */ { BxImmediate_Id, &BX_CPU_C::ADD_RAXId },
/* 06 /qr */ { 0, &BX_CPU_C::BxError },
/* 07 /qr */ { 0, &BX_CPU_C::BxError },
/* 08 /qr */ { 0, &BX_CPU_C::OR_EbGbR },
@ -1244,7 +1244,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64R[512*3] = {
/* 0A /qr */ { 0, &BX_CPU_C::OR_GbEbR },
/* 0B /qr */ { 0, &BX_CPU_C::OR_GqEqR },
/* 0C /qr */ { BxImmediate_Ib, &BX_CPU_C::OR_ALIb },
/* 0D /qr */ { BxImmediate_Iv, &BX_CPU_C::OR_RAXId },
/* 0D /qr */ { BxImmediate_Id, &BX_CPU_C::OR_RAXId },
/* 0E /qr */ { 0, &BX_CPU_C::BxError },
/* 0F /qr */ { 0, &BX_CPU_C::BxError }, // 2-byte escape
/* 10 /qr */ { 0, &BX_CPU_C::ADC_EbGbR },
@ -1252,7 +1252,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64R[512*3] = {
/* 12 /qr */ { 0, &BX_CPU_C::ADC_GbEbR },
/* 13 /qr */ { 0, &BX_CPU_C::ADC_GqEqR },
/* 14 /qr */ { BxImmediate_Ib, &BX_CPU_C::ADC_ALIb },
/* 15 /qr */ { BxImmediate_Iv, &BX_CPU_C::ADC_RAXId },
/* 15 /qr */ { BxImmediate_Id, &BX_CPU_C::ADC_RAXId },
/* 16 /qr */ { 0, &BX_CPU_C::BxError },
/* 17 /qr */ { 0, &BX_CPU_C::BxError },
/* 18 /qr */ { 0, &BX_CPU_C::SBB_EbGbR },
@ -1260,7 +1260,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64R[512*3] = {
/* 1A /qr */ { 0, &BX_CPU_C::SBB_GbEbR },
/* 1B /qr */ { 0, &BX_CPU_C::SBB_GqEqR },
/* 1C /qr */ { BxImmediate_Ib, &BX_CPU_C::SBB_ALIb },
/* 1D /qr */ { BxImmediate_Iv, &BX_CPU_C::SBB_RAXId },
/* 1D /qr */ { BxImmediate_Id, &BX_CPU_C::SBB_RAXId },
/* 1E /qr */ { 0, &BX_CPU_C::BxError },
/* 1F /qr */ { 0, &BX_CPU_C::BxError },
/* 20 /qr */ { 0, &BX_CPU_C::AND_EbGbR },
@ -1268,7 +1268,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64R[512*3] = {
/* 22 /qr */ { 0, &BX_CPU_C::AND_GbEbR },
/* 23 /qr */ { 0, &BX_CPU_C::AND_GqEqR },
/* 24 /qr */ { BxImmediate_Ib, &BX_CPU_C::AND_ALIb },
/* 25 /qr */ { BxImmediate_Iv, &BX_CPU_C::AND_RAXId },
/* 25 /qr */ { BxImmediate_Id, &BX_CPU_C::AND_RAXId },
/* 26 /qr */ { BxPrefix, &BX_CPU_C::BxError }, // ES:
/* 27 /qr */ { 0, &BX_CPU_C::BxError },
/* 28 /qr */ { 0, &BX_CPU_C::SUB_EbGbR },
@ -1276,7 +1276,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64R[512*3] = {
/* 2A /qr */ { 0, &BX_CPU_C::SUB_GbEbR },
/* 2B /qr */ { 0, &BX_CPU_C::SUB_GqEqR },
/* 2C /qr */ { BxImmediate_Ib, &BX_CPU_C::SUB_ALIb },
/* 2D /qr */ { BxImmediate_Iv, &BX_CPU_C::SUB_RAXId },
/* 2D /qr */ { BxImmediate_Id, &BX_CPU_C::SUB_RAXId },
/* 2E /qr */ { BxPrefix, &BX_CPU_C::BxError }, // CS:
/* 2F /qr */ { 0, &BX_CPU_C::BxError },
/* 30 /qr */ { 0, &BX_CPU_C::XOR_EbGbR },
@ -1284,7 +1284,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64R[512*3] = {
/* 32 /qr */ { 0, &BX_CPU_C::XOR_GbEbR },
/* 33 /qr */ { 0, &BX_CPU_C::XOR_GqEqR },
/* 34 /qr */ { BxImmediate_Ib, &BX_CPU_C::XOR_ALIb },
/* 35 /qr */ { BxImmediate_Iv, &BX_CPU_C::XOR_RAXId },
/* 35 /qr */ { BxImmediate_Id, &BX_CPU_C::XOR_RAXId },
/* 36 /qr */ { BxPrefix, &BX_CPU_C::BxError }, // SS:
/* 37 /qr */ { 0, &BX_CPU_C::BxError },
/* 38 /qr */ { 0, &BX_CPU_C::CMP_EbGbR },
@ -1292,7 +1292,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64R[512*3] = {
/* 3A /qr */ { 0, &BX_CPU_C::CMP_GbEbR },
/* 3B /qr */ { 0, &BX_CPU_C::CMP_GqEqR },
/* 3C /qr */ { BxImmediate_Ib, &BX_CPU_C::CMP_ALIb },
/* 3D /qr */ { BxImmediate_Iv, &BX_CPU_C::CMP_RAXId },
/* 3D /qr */ { BxImmediate_Id, &BX_CPU_C::CMP_RAXId },
/* 3E /qr */ { BxPrefix, &BX_CPU_C::BxError }, // DS:
/* 3F /qr */ { 0, &BX_CPU_C::BxError },
/* 40 /qr */ { BxPrefix, &BX_CPU_C::BxError }, // REX:
@ -1335,8 +1335,8 @@ static const BxOpcodeInfo_t BxOpcodeInfo64R[512*3] = {
/* 65 /qr */ { BxPrefix, &BX_CPU_C::BxError }, // GS:
/* 66 /qr */ { BxPrefix, &BX_CPU_C::BxError }, // OS:
/* 67 /qr */ { BxPrefix, &BX_CPU_C::BxError }, // AS:
/* 68 /qr */ { BxImmediate_Iv, &BX_CPU_C::PUSH64_Id },
/* 69 /qr */ { BxImmediate_Iv, &BX_CPU_C::IMUL_GqEqId },
/* 68 /qr */ { BxImmediate_Id, &BX_CPU_C::PUSH64_Id },
/* 69 /qr */ { BxImmediate_Id, &BX_CPU_C::IMUL_GqEqId },
/* 6A /qr */ { BxImmediate_Ib_SE, &BX_CPU_C::PUSH64_Id },
/* 6B /qr */ { BxImmediate_Ib_SE, &BX_CPU_C::IMUL_GqEqId },
/* 6C /qr */ { 0, &BX_CPU_C::REP_INSB_YbDX },
@ -1360,7 +1360,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64R[512*3] = {
/* 7E /qr */ { BxImmediate_BrOff8 | BxTraceEnd, &BX_CPU_C::JLE_Jq },
/* 7F /qr */ { BxImmediate_BrOff8 | BxTraceEnd, &BX_CPU_C::JNLE_Jq },
/* 80 /qr */ { BxGroup1 | BxImmediate_Ib, NULL, BxOpcodeInfoG1EbIbR },
/* 81 /qr */ { BxGroup1 | BxImmediate_Iv, NULL, BxOpcodeInfo64G1EqR },
/* 81 /qr */ { BxGroup1 | BxImmediate_Id, NULL, BxOpcodeInfo64G1EqR },
/* 82 /qr */ { 0, &BX_CPU_C::BxError },
/* 83 /qr */ { BxGroup1 | BxImmediate_Ib_SE, NULL, BxOpcodeInfo64G1EqR },
/* 84 /qr */ { 0, &BX_CPU_C::TEST_EbGbR },
@ -1400,7 +1400,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64R[512*3] = {
/* A6 /qr */ { 0, &BX_CPU_C::REP_CMPSB_XbYb },
/* A7 /qr */ { 0, &BX_CPU_C::REP_CMPSQ_XqYq },
/* A8 /qr */ { BxImmediate_Ib, &BX_CPU_C::TEST_ALIb },
/* A9 /qr */ { BxImmediate_Iv, &BX_CPU_C::TEST_RAXId },
/* A9 /qr */ { BxImmediate_Id, &BX_CPU_C::TEST_RAXId },
/* AA /qr */ { 0, &BX_CPU_C::REP_STOSB_YbAL },
/* AB /qr */ { 0, &BX_CPU_C::REP_STOSQ_YqRAX },
/* AC /qr */ { 0, &BX_CPU_C::REP_LODSB_ALXb },
@ -1430,7 +1430,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64R[512*3] = {
/* C4 /qr */ { 0, &BX_CPU_C::BxError },
/* C5 /qr */ { 0, &BX_CPU_C::BxError },
/* C6 /qr */ { BxImmediate_Ib, &BX_CPU_C::MOV_EbIbR },
/* C7 /qr */ { BxImmediate_Iv, &BX_CPU_C::MOV_EqIdR },
/* C7 /qr */ { BxImmediate_Id, &BX_CPU_C::MOV_EqIdR },
/* C8 /qr */ { BxImmediate_IwIb, &BX_CPU_C::ENTER64_IwIb },
/* C9 /qr */ { 0, &BX_CPU_C::LEAVE64 },
/* CA /qr */ { BxImmediate_Iw | BxTraceEnd, &BX_CPU_C::RETfar64_Iw },
@ -1622,8 +1622,8 @@ static const BxOpcodeInfo_t BxOpcodeInfo64R[512*3] = {
/* 0F 75 /qr */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f75 },
/* 0F 76 /qr */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f76 },
/* 0F 77 /qr */ { 0, &BX_CPU_C::EMMS },
/* 0F 78 /qr */ { 0, &BX_CPU_C::BxError },
/* 0F 79 /qr */ { 0, &BX_CPU_C::BxError },
/* 0F 78 /qr */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f78 },
/* 0F 79 /qr */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f79 },
/* 0F 7A /qr */ { 0, &BX_CPU_C::BxError },
/* 0F 7B /qr */ { 0, &BX_CPU_C::BxError },
/* 0F 7C /qr */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f7c },
@ -1771,7 +1771,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64M[512*3] = {
/* 02 /wm */ { 0, &BX_CPU_C::ADD_GbEbM },
/* 03 /wm */ { 0, &BX_CPU_C::ADD_GwEwM },
/* 04 /wm */ { BxImmediate_Ib, &BX_CPU_C::ADD_ALIb },
/* 05 /wm */ { BxImmediate_Iv, &BX_CPU_C::ADD_AXIw },
/* 05 /wm */ { BxImmediate_Iw, &BX_CPU_C::ADD_AXIw },
/* 06 /wm */ { 0, &BX_CPU_C::BxError },
/* 07 /wm */ { 0, &BX_CPU_C::BxError },
/* 08 /wm */ { BxLockable, &BX_CPU_C::OR_EbGbM },
@ -1779,7 +1779,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64M[512*3] = {
/* 0A /wm */ { 0, &BX_CPU_C::OR_GbEbM },
/* 0B /wm */ { 0, &BX_CPU_C::OR_GwEwM },
/* 0C /wm */ { BxImmediate_Ib, &BX_CPU_C::OR_ALIb },
/* 0D /wm */ { BxImmediate_Iv, &BX_CPU_C::OR_AXIw },
/* 0D /wm */ { BxImmediate_Iw, &BX_CPU_C::OR_AXIw },
/* 0E /wm */ { 0, &BX_CPU_C::BxError },
/* 0F /wm */ { 0, &BX_CPU_C::BxError }, // 2-byte escape
/* 10 /wm */ { BxLockable, &BX_CPU_C::ADC_EbGbM },
@ -1787,7 +1787,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64M[512*3] = {
/* 12 /wm */ { 0, &BX_CPU_C::ADC_GbEbM },
/* 13 /wm */ { 0, &BX_CPU_C::ADC_GwEwM },
/* 14 /wm */ { BxImmediate_Ib, &BX_CPU_C::ADC_ALIb },
/* 15 /wm */ { BxImmediate_Iv, &BX_CPU_C::ADC_AXIw },
/* 15 /wm */ { BxImmediate_Iw, &BX_CPU_C::ADC_AXIw },
/* 16 /wm */ { 0, &BX_CPU_C::BxError },
/* 17 /wm */ { 0, &BX_CPU_C::BxError },
/* 18 /wm */ { BxLockable, &BX_CPU_C::SBB_EbGbM },
@ -1795,7 +1795,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64M[512*3] = {
/* 1A /wm */ { 0, &BX_CPU_C::SBB_GbEbM },
/* 1B /wm */ { 0, &BX_CPU_C::SBB_GwEwM },
/* 1C /wm */ { BxImmediate_Ib, &BX_CPU_C::SBB_ALIb },
/* 1D /wm */ { BxImmediate_Iv, &BX_CPU_C::SBB_AXIw },
/* 1D /wm */ { BxImmediate_Iw, &BX_CPU_C::SBB_AXIw },
/* 1E /wm */ { 0, &BX_CPU_C::BxError },
/* 1F /wm */ { 0, &BX_CPU_C::BxError },
/* 20 /wm */ { BxLockable, &BX_CPU_C::AND_EbGbM },
@ -1803,7 +1803,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64M[512*3] = {
/* 22 /wm */ { 0, &BX_CPU_C::AND_GbEbM },
/* 23 /wm */ { 0, &BX_CPU_C::AND_GwEwM },
/* 24 /wm */ { BxImmediate_Ib, &BX_CPU_C::AND_ALIb },
/* 25 /wm */ { BxImmediate_Iv, &BX_CPU_C::AND_AXIw },
/* 25 /wm */ { BxImmediate_Iw, &BX_CPU_C::AND_AXIw },
/* 26 /wm */ { BxPrefix, &BX_CPU_C::BxError }, // ES:
/* 27 /wm */ { 0, &BX_CPU_C::BxError },
/* 28 /wm */ { BxLockable, &BX_CPU_C::SUB_EbGbM },
@ -1811,7 +1811,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64M[512*3] = {
/* 2A /wm */ { 0, &BX_CPU_C::SUB_GbEbM },
/* 2B /wm */ { 0, &BX_CPU_C::SUB_GwEwM },
/* 2C /wm */ { BxImmediate_Ib, &BX_CPU_C::SUB_ALIb },
/* 2D /wm */ { BxImmediate_Iv, &BX_CPU_C::SUB_AXIw },
/* 2D /wm */ { BxImmediate_Iw, &BX_CPU_C::SUB_AXIw },
/* 2E /wm */ { BxPrefix, &BX_CPU_C::BxError }, // CS:
/* 2F /wm */ { 0, &BX_CPU_C::BxError },
/* 30 /wm */ { BxLockable, &BX_CPU_C::XOR_EbGbM },
@ -1819,7 +1819,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64M[512*3] = {
/* 32 /wm */ { 0, &BX_CPU_C::XOR_GbEbM },
/* 33 /wm */ { 0, &BX_CPU_C::XOR_GwEwM },
/* 34 /wm */ { BxImmediate_Ib, &BX_CPU_C::XOR_ALIb },
/* 35 /wm */ { BxImmediate_Iv, &BX_CPU_C::XOR_AXIw },
/* 35 /wm */ { BxImmediate_Iw, &BX_CPU_C::XOR_AXIw },
/* 36 /wm */ { BxPrefix, &BX_CPU_C::BxError }, // SS:
/* 37 /wm */ { 0, &BX_CPU_C::BxError },
/* 38 /wm */ { 0, &BX_CPU_C::CMP_EbGbM },
@ -1827,7 +1827,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64M[512*3] = {
/* 3A /wm */ { 0, &BX_CPU_C::CMP_GbEbM },
/* 3B /wm */ { 0, &BX_CPU_C::CMP_GwEwM },
/* 3C /wm */ { BxImmediate_Ib, &BX_CPU_C::CMP_ALIb },
/* 3D /wm */ { BxImmediate_Iv, &BX_CPU_C::CMP_AXIw },
/* 3D /wm */ { BxImmediate_Iw, &BX_CPU_C::CMP_AXIw },
/* 3E /wm */ { BxPrefix, &BX_CPU_C::BxError }, // DS:
/* 3F /wm */ { 0, &BX_CPU_C::BxError },
/* 40 /wm */ { BxPrefix, &BX_CPU_C::BxError }, // REX:
@ -1870,8 +1870,8 @@ static const BxOpcodeInfo_t BxOpcodeInfo64M[512*3] = {
/* 65 /wm */ { BxPrefix, &BX_CPU_C::BxError }, // GS:
/* 66 /wm */ { BxPrefix, &BX_CPU_C::BxError }, // OS:
/* 67 /wm */ { BxPrefix, &BX_CPU_C::BxError }, // AS:
/* 68 /wm */ { BxImmediate_Iv, &BX_CPU_C::PUSH_Iw },
/* 69 /wm */ { BxImmediate_Iv, &BX_CPU_C::IMUL_GwEwIw },
/* 68 /wm */ { BxImmediate_Iw, &BX_CPU_C::PUSH_Iw },
/* 69 /wm */ { BxImmediate_Iw, &BX_CPU_C::IMUL_GwEwIw },
/* 6A /wm */ { BxImmediate_Ib_SE, &BX_CPU_C::PUSH_Iw },
/* 6B /wm */ { BxImmediate_Ib_SE, &BX_CPU_C::IMUL_GwEwIw },
/* 6C /wm */ { 0, &BX_CPU_C::REP_INSB_YbDX },
@ -1895,7 +1895,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64M[512*3] = {
/* 7E /wm */ { BxImmediate_BrOff8 | BxTraceEnd, &BX_CPU_C::JLE_Jq },
/* 7F /wm */ { BxImmediate_BrOff8 | BxTraceEnd, &BX_CPU_C::JNLE_Jq },
/* 80 /wm */ { BxGroup1 | BxImmediate_Ib, NULL, BxOpcodeInfoG1EbIbM },
/* 81 /wm */ { BxGroup1 | BxImmediate_Iv, NULL, BxOpcodeInfoG1EwM },
/* 81 /wm */ { BxGroup1 | BxImmediate_Iw, NULL, BxOpcodeInfoG1EwM },
/* 82 /wm */ { 0, &BX_CPU_C::BxError },
/* 83 /wm */ { BxGroup1 | BxImmediate_Ib_SE, NULL, BxOpcodeInfoG1EwM },
/* 84 /wm */ { 0, &BX_CPU_C::TEST_EbGbM },
@ -1935,7 +1935,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64M[512*3] = {
/* A6 /wm */ { 0, &BX_CPU_C::REP_CMPSB_XbYb },
/* A7 /wm */ { 0, &BX_CPU_C::REP_CMPSW_XwYw },
/* A8 /wm */ { BxImmediate_Ib, &BX_CPU_C::TEST_ALIb },
/* A9 /wm */ { BxImmediate_Iv, &BX_CPU_C::TEST_AXIw },
/* A9 /wm */ { BxImmediate_Iw, &BX_CPU_C::TEST_AXIw },
/* AA /wm */ { 0, &BX_CPU_C::REP_STOSB_YbAL },
/* AB /wm */ { 0, &BX_CPU_C::REP_STOSW_YwAX },
/* AC /wm */ { 0, &BX_CPU_C::REP_LODSB_ALXb },
@ -1950,14 +1950,14 @@ static const BxOpcodeInfo_t BxOpcodeInfo64M[512*3] = {
/* B5 /wm */ { BxImmediate_Ib, &BX_CPU_C::MOV_RLIb },
/* B6 /wm */ { BxImmediate_Ib, &BX_CPU_C::MOV_RLIb },
/* B7 /wm */ { BxImmediate_Ib, &BX_CPU_C::MOV_RLIb },
/* B8 /wm */ { BxImmediate_Iv, &BX_CPU_C::MOV_RXIw },
/* B9 /wm */ { BxImmediate_Iv, &BX_CPU_C::MOV_RXIw },
/* BA /wm */ { BxImmediate_Iv, &BX_CPU_C::MOV_RXIw },
/* BB /wm */ { BxImmediate_Iv, &BX_CPU_C::MOV_RXIw },
/* BC /wm */ { BxImmediate_Iv, &BX_CPU_C::MOV_RXIw },
/* BD /wm */ { BxImmediate_Iv, &BX_CPU_C::MOV_RXIw },
/* BE /wm */ { BxImmediate_Iv, &BX_CPU_C::MOV_RXIw },
/* BF /wm */ { BxImmediate_Iv, &BX_CPU_C::MOV_RXIw },
/* B8 /wm */ { BxImmediate_Iw, &BX_CPU_C::MOV_RXIw },
/* B9 /wm */ { BxImmediate_Iw, &BX_CPU_C::MOV_RXIw },
/* BA /wm */ { BxImmediate_Iw, &BX_CPU_C::MOV_RXIw },
/* BB /wm */ { BxImmediate_Iw, &BX_CPU_C::MOV_RXIw },
/* BC /wm */ { BxImmediate_Iw, &BX_CPU_C::MOV_RXIw },
/* BD /wm */ { BxImmediate_Iw, &BX_CPU_C::MOV_RXIw },
/* BE /wm */ { BxImmediate_Iw, &BX_CPU_C::MOV_RXIw },
/* BF /wm */ { BxImmediate_Iw, &BX_CPU_C::MOV_RXIw },
/* C0 /wm */ { BxGroup2 | BxImmediate_Ib, NULL, BxOpcodeInfoG2Eb },
/* C1 /wm */ { BxGroup2 | BxImmediate_Ib, NULL, BxOpcodeInfoG2Ew },
/* C2 /wm */ { BxImmediate_Iw | BxTraceEnd, &BX_CPU_C::RETnear16_Iw },
@ -1965,7 +1965,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64M[512*3] = {
/* C4 /wm */ { 0, &BX_CPU_C::BxError },
/* C5 /wm */ { 0, &BX_CPU_C::BxError },
/* C6 /wm */ { BxImmediate_Ib, &BX_CPU_C::MOV_EbIbM },
/* C7 /wm */ { BxImmediate_Iv, &BX_CPU_C::MOV_EwIwM },
/* C7 /wm */ { BxImmediate_Iw, &BX_CPU_C::MOV_EwIwM },
/* C8 /wm */ { BxImmediate_IwIb, &BX_CPU_C::ENTER16_IwIb },
/* C9 /wm */ { 0, &BX_CPU_C::LEAVE },
/* CA /wm */ { BxImmediate_Iw | BxTraceEnd, &BX_CPU_C::RETfar16_Iw },
@ -2157,8 +2157,8 @@ static const BxOpcodeInfo_t BxOpcodeInfo64M[512*3] = {
/* 0F 75 /wm */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f75 },
/* 0F 76 /wm */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f76 },
/* 0F 77 /wm */ { 0, &BX_CPU_C::EMMS },
/* 0F 78 /wm */ { 0, &BX_CPU_C::BxError },
/* 0F 79 /wm */ { 0, &BX_CPU_C::BxError },
/* 0F 78 /wm */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f78 },
/* 0F 79 /wm */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f79 },
/* 0F 7A /wm */ { 0, &BX_CPU_C::BxError },
/* 0F 7B /wm */ { 0, &BX_CPU_C::BxError },
/* 0F 7C /wm */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f7c },
@ -2300,7 +2300,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64M[512*3] = {
/* 02 /dm */ { 0, &BX_CPU_C::ADD_GbEbM },
/* 03 /dm */ { 0, &BX_CPU_C::ADD_GdEdM },
/* 04 /dm */ { BxImmediate_Ib, &BX_CPU_C::ADD_ALIb },
/* 05 /dm */ { BxImmediate_Iv, &BX_CPU_C::ADD_EAXId },
/* 05 /dm */ { BxImmediate_Id, &BX_CPU_C::ADD_EAXId },
/* 06 /dm */ { 0, &BX_CPU_C::BxError },
/* 07 /dm */ { 0, &BX_CPU_C::BxError },
/* 08 /dm */ { BxLockable, &BX_CPU_C::OR_EbGbM },
@ -2308,7 +2308,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64M[512*3] = {
/* 0A /dm */ { 0, &BX_CPU_C::OR_GbEbM },
/* 0B /dm */ { 0, &BX_CPU_C::OR_GdEdM },
/* 0C /dm */ { BxImmediate_Ib, &BX_CPU_C::OR_ALIb },
/* 0D /dm */ { BxImmediate_Iv, &BX_CPU_C::OR_EAXId },
/* 0D /dm */ { BxImmediate_Id, &BX_CPU_C::OR_EAXId },
/* 0E /dm */ { 0, &BX_CPU_C::BxError },
/* 0F /dm */ { 0, &BX_CPU_C::BxError }, // 2-byte escape
/* 10 /dm */ { BxLockable, &BX_CPU_C::ADC_EbGbM },
@ -2316,7 +2316,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64M[512*3] = {
/* 12 /dm */ { 0, &BX_CPU_C::ADC_GbEbM },
/* 13 /dm */ { 0, &BX_CPU_C::ADC_GdEdM },
/* 14 /dm */ { BxImmediate_Ib, &BX_CPU_C::ADC_ALIb },
/* 15 /dm */ { BxImmediate_Iv, &BX_CPU_C::ADC_EAXId },
/* 15 /dm */ { BxImmediate_Id, &BX_CPU_C::ADC_EAXId },
/* 16 /dm */ { 0, &BX_CPU_C::BxError },
/* 17 /dm */ { 0, &BX_CPU_C::BxError },
/* 18 /dm */ { BxLockable, &BX_CPU_C::SBB_EbGbM },
@ -2324,7 +2324,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64M[512*3] = {
/* 1A /dm */ { 0, &BX_CPU_C::SBB_GbEbM },
/* 1B /dm */ { 0, &BX_CPU_C::SBB_GdEdM },
/* 1C /dm */ { BxImmediate_Ib, &BX_CPU_C::SBB_ALIb },
/* 1D /dm */ { BxImmediate_Iv, &BX_CPU_C::SBB_EAXId },
/* 1D /dm */ { BxImmediate_Id, &BX_CPU_C::SBB_EAXId },
/* 1E /dm */ { 0, &BX_CPU_C::BxError },
/* 1F /dm */ { 0, &BX_CPU_C::BxError },
/* 20 /dm */ { BxLockable, &BX_CPU_C::AND_EbGbM },
@ -2332,7 +2332,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64M[512*3] = {
/* 22 /dm */ { 0, &BX_CPU_C::AND_GbEbM },
/* 23 /dm */ { 0, &BX_CPU_C::AND_GdEdM },
/* 24 /dm */ { BxImmediate_Ib, &BX_CPU_C::AND_ALIb },
/* 25 /dm */ { BxImmediate_Iv, &BX_CPU_C::AND_EAXId },
/* 25 /dm */ { BxImmediate_Id, &BX_CPU_C::AND_EAXId },
/* 26 /dm */ { BxPrefix, &BX_CPU_C::BxError }, // ES:
/* 27 /dm */ { 0, &BX_CPU_C::BxError },
/* 28 /dm */ { BxLockable, &BX_CPU_C::SUB_EbGbM },
@ -2340,7 +2340,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64M[512*3] = {
/* 2A /dm */ { 0, &BX_CPU_C::SUB_GbEbM },
/* 2B /dm */ { 0, &BX_CPU_C::SUB_GdEdM },
/* 2C /dm */ { BxImmediate_Ib, &BX_CPU_C::SUB_ALIb },
/* 2D /dm */ { BxImmediate_Iv, &BX_CPU_C::SUB_EAXId },
/* 2D /dm */ { BxImmediate_Id, &BX_CPU_C::SUB_EAXId },
/* 2E /dm */ { BxPrefix, &BX_CPU_C::BxError }, // CS:
/* 2F /dm */ { 0, &BX_CPU_C::BxError },
/* 30 /dm */ { BxLockable, &BX_CPU_C::XOR_EbGbM },
@ -2348,7 +2348,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64M[512*3] = {
/* 32 /dm */ { 0, &BX_CPU_C::XOR_GbEbM },
/* 33 /dm */ { 0, &BX_CPU_C::XOR_GdEdM },
/* 34 /dm */ { BxImmediate_Ib, &BX_CPU_C::XOR_ALIb },
/* 35 /dm */ { BxImmediate_Iv, &BX_CPU_C::XOR_EAXId },
/* 35 /dm */ { BxImmediate_Id, &BX_CPU_C::XOR_EAXId },
/* 36 /dm */ { BxPrefix, &BX_CPU_C::BxError }, // SS:
/* 37 /dm */ { 0, &BX_CPU_C::BxError },
/* 38 /dm */ { 0, &BX_CPU_C::CMP_EbGbM },
@ -2356,7 +2356,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64M[512*3] = {
/* 3A /dm */ { 0, &BX_CPU_C::CMP_GbEbM },
/* 3B /dm */ { 0, &BX_CPU_C::CMP_GdEdM },
/* 3C /dm */ { BxImmediate_Ib, &BX_CPU_C::CMP_ALIb },
/* 3D /dm */ { BxImmediate_Iv, &BX_CPU_C::CMP_EAXId },
/* 3D /dm */ { BxImmediate_Id, &BX_CPU_C::CMP_EAXId },
/* 3E /dm */ { BxPrefix, &BX_CPU_C::BxError }, // DS:
/* 3F /dm */ { 0, &BX_CPU_C::BxError },
/* 40 /dm */ { BxPrefix, &BX_CPU_C::BxError }, // REX:
@ -2399,8 +2399,8 @@ static const BxOpcodeInfo_t BxOpcodeInfo64M[512*3] = {
/* 65 /dm */ { BxPrefix, &BX_CPU_C::BxError }, // GS:
/* 66 /dm */ { BxPrefix, &BX_CPU_C::BxError }, // OS:
/* 67 /dm */ { BxPrefix, &BX_CPU_C::BxError }, // AS:
/* 68 /dm */ { BxImmediate_Iv, &BX_CPU_C::PUSH64_Id },
/* 69 /dm */ { BxImmediate_Iv, &BX_CPU_C::IMUL_GdEdId },
/* 68 /dm */ { BxImmediate_Id, &BX_CPU_C::PUSH64_Id },
/* 69 /dm */ { BxImmediate_Id, &BX_CPU_C::IMUL_GdEdId },
/* 6A /dm */ { BxImmediate_Ib_SE, &BX_CPU_C::PUSH64_Id },
/* 6B /dm */ { BxImmediate_Ib_SE, &BX_CPU_C::IMUL_GdEdId },
/* 6C /dm */ { 0, &BX_CPU_C::REP_INSB_YbDX },
@ -2424,7 +2424,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64M[512*3] = {
/* 7E /dm */ { BxImmediate_BrOff8 | BxTraceEnd, &BX_CPU_C::JLE_Jq },
/* 7F /dm */ { BxImmediate_BrOff8 | BxTraceEnd, &BX_CPU_C::JNLE_Jq },
/* 80 /dm */ { BxGroup1 | BxImmediate_Ib, NULL, BxOpcodeInfoG1EbIbM },
/* 81 /dm */ { BxGroup1 | BxImmediate_Iv, NULL, BxOpcodeInfoG1EdM },
/* 81 /dm */ { BxGroup1 | BxImmediate_Id, NULL, BxOpcodeInfoG1EdM },
/* 82 /dm */ { 0, &BX_CPU_C::BxError },
/* 83 /dm */ { BxGroup1 | BxImmediate_Ib_SE, NULL, BxOpcodeInfoG1EdM },
/* 84 /dm */ { 0, &BX_CPU_C::TEST_EbGbM },
@ -2464,7 +2464,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64M[512*3] = {
/* A6 /dm */ { 0, &BX_CPU_C::REP_CMPSB_XbYb },
/* A7 /dm */ { 0, &BX_CPU_C::REP_CMPSD_XdYd },
/* A8 /dm */ { BxImmediate_Ib, &BX_CPU_C::TEST_ALIb },
/* A9 /dm */ { BxImmediate_Iv, &BX_CPU_C::TEST_EAXId },
/* A9 /dm */ { BxImmediate_Id, &BX_CPU_C::TEST_EAXId },
/* AA /dm */ { 0, &BX_CPU_C::REP_STOSB_YbAL },
/* AB /dm */ { 0, &BX_CPU_C::REP_STOSD_YdEAX },
/* AC /dm */ { 0, &BX_CPU_C::REP_LODSB_ALXb },
@ -2479,14 +2479,14 @@ static const BxOpcodeInfo_t BxOpcodeInfo64M[512*3] = {
/* B5 /dm */ { BxImmediate_Ib, &BX_CPU_C::MOV_RLIb },
/* B6 /dm */ { BxImmediate_Ib, &BX_CPU_C::MOV_RLIb },
/* B7 /dm */ { BxImmediate_Ib, &BX_CPU_C::MOV_RLIb },
/* B8 /dm */ { BxImmediate_Iv, &BX_CPU_C::MOV_ERXId },
/* B9 /dm */ { BxImmediate_Iv, &BX_CPU_C::MOV_ERXId },
/* BA /dm */ { BxImmediate_Iv, &BX_CPU_C::MOV_ERXId },
/* BB /dm */ { BxImmediate_Iv, &BX_CPU_C::MOV_ERXId },
/* BC /dm */ { BxImmediate_Iv, &BX_CPU_C::MOV_ERXId },
/* BD /dm */ { BxImmediate_Iv, &BX_CPU_C::MOV_ERXId },
/* BE /dm */ { BxImmediate_Iv, &BX_CPU_C::MOV_ERXId },
/* BF /dm */ { BxImmediate_Iv, &BX_CPU_C::MOV_ERXId },
/* B8 /dm */ { BxImmediate_Id, &BX_CPU_C::MOV_ERXId },
/* B9 /dm */ { BxImmediate_Id, &BX_CPU_C::MOV_ERXId },
/* BA /dm */ { BxImmediate_Id, &BX_CPU_C::MOV_ERXId },
/* BB /dm */ { BxImmediate_Id, &BX_CPU_C::MOV_ERXId },
/* BC /dm */ { BxImmediate_Id, &BX_CPU_C::MOV_ERXId },
/* BD /dm */ { BxImmediate_Id, &BX_CPU_C::MOV_ERXId },
/* BE /dm */ { BxImmediate_Id, &BX_CPU_C::MOV_ERXId },
/* BF /dm */ { BxImmediate_Id, &BX_CPU_C::MOV_ERXId },
/* C0 /dm */ { BxGroup2 | BxImmediate_Ib, NULL, BxOpcodeInfoG2Eb },
/* C1 /dm */ { BxGroup2 | BxImmediate_Ib, NULL, BxOpcodeInfoG2Ed },
/* C2 /dm */ { BxImmediate_Iw | BxTraceEnd, &BX_CPU_C::RETnear64_Iw },
@ -2494,7 +2494,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64M[512*3] = {
/* C4 /dm */ { 0, &BX_CPU_C::BxError },
/* C5 /dm */ { 0, &BX_CPU_C::BxError },
/* C6 /dm */ { BxImmediate_Ib, &BX_CPU_C::MOV_EbIbM },
/* C7 /dm */ { BxImmediate_Iv, &BX_CPU_C::MOV_EdIdM },
/* C7 /dm */ { BxImmediate_Id, &BX_CPU_C::MOV_EdIdM },
/* C8 /dm */ { BxImmediate_IwIb, &BX_CPU_C::ENTER64_IwIb },
/* C9 /dm */ { 0, &BX_CPU_C::LEAVE64 },
/* CA /dm */ { BxImmediate_Iw | BxTraceEnd, &BX_CPU_C::RETfar32_Iw },
@ -2686,8 +2686,8 @@ static const BxOpcodeInfo_t BxOpcodeInfo64M[512*3] = {
/* 0F 75 /dm */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f75 },
/* 0F 76 /dm */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f76 },
/* 0F 77 /dm */ { 0, &BX_CPU_C::EMMS },
/* 0F 78 /dm */ { 0, &BX_CPU_C::BxError },
/* 0F 79 /dm */ { 0, &BX_CPU_C::BxError },
/* 0F 78 /dm */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f78 },
/* 0F 79 /dm */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f79 },
/* 0F 7A /dm */ { 0, &BX_CPU_C::BxError },
/* 0F 7B /dm */ { 0, &BX_CPU_C::BxError },
/* 0F 7C /dm */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f7c },
@ -2829,7 +2829,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64M[512*3] = {
/* 02 /qm */ { 0, &BX_CPU_C::ADD_GbEbM },
/* 03 /qm */ { 0, &BX_CPU_C::ADD_GqEqM },
/* 04 /qm */ { BxImmediate_Ib, &BX_CPU_C::ADD_ALIb },
/* 05 /qm */ { BxImmediate_Iv, &BX_CPU_C::ADD_RAXId },
/* 05 /qm */ { BxImmediate_Id, &BX_CPU_C::ADD_RAXId },
/* 06 /qm */ { 0, &BX_CPU_C::BxError },
/* 07 /qm */ { 0, &BX_CPU_C::BxError },
/* 08 /qm */ { 0, &BX_CPU_C::OR_EbGbM },
@ -2837,7 +2837,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64M[512*3] = {
/* 0A /qm */ { 0, &BX_CPU_C::OR_GbEbM },
/* 0B /qm */ { 0, &BX_CPU_C::OR_GqEqM },
/* 0C /qm */ { BxImmediate_Ib, &BX_CPU_C::OR_ALIb },
/* 0D /qm */ { BxImmediate_Iv, &BX_CPU_C::OR_RAXId },
/* 0D /qm */ { BxImmediate_Id, &BX_CPU_C::OR_RAXId },
/* 0E /qm */ { 0, &BX_CPU_C::BxError },
/* 0F /qm */ { 0, &BX_CPU_C::BxError }, // 2-byte escape
/* 10 /qm */ { BxLockable, &BX_CPU_C::ADC_EbGbM },
@ -2845,7 +2845,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64M[512*3] = {
/* 12 /qm */ { 0, &BX_CPU_C::ADC_GbEbM },
/* 13 /qm */ { 0, &BX_CPU_C::ADC_GqEqM },
/* 14 /qm */ { BxImmediate_Ib, &BX_CPU_C::ADC_ALIb },
/* 15 /qm */ { BxImmediate_Iv, &BX_CPU_C::ADC_RAXId },
/* 15 /qm */ { BxImmediate_Id, &BX_CPU_C::ADC_RAXId },
/* 16 /qm */ { 0, &BX_CPU_C::BxError },
/* 17 /qm */ { 0, &BX_CPU_C::BxError },
/* 18 /qm */ { BxLockable, &BX_CPU_C::SBB_EbGbM },
@ -2853,7 +2853,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64M[512*3] = {
/* 1A /qm */ { 0, &BX_CPU_C::SBB_GbEbM },
/* 1B /qm */ { 0, &BX_CPU_C::SBB_GqEqM },
/* 1C /qm */ { BxImmediate_Ib, &BX_CPU_C::SBB_ALIb },
/* 1D /qm */ { BxImmediate_Iv, &BX_CPU_C::SBB_RAXId },
/* 1D /qm */ { BxImmediate_Id, &BX_CPU_C::SBB_RAXId },
/* 1E /qm */ { 0, &BX_CPU_C::BxError },
/* 1F /qm */ { 0, &BX_CPU_C::BxError },
/* 20 /qm */ { BxLockable, &BX_CPU_C::AND_EbGbM },
@ -2861,7 +2861,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64M[512*3] = {
/* 22 /qm */ { 0, &BX_CPU_C::AND_GbEbM },
/* 23 /qm */ { 0, &BX_CPU_C::AND_GqEqM },
/* 24 /qm */ { BxImmediate_Ib, &BX_CPU_C::AND_ALIb },
/* 25 /qm */ { BxImmediate_Iv, &BX_CPU_C::AND_RAXId },
/* 25 /qm */ { BxImmediate_Id, &BX_CPU_C::AND_RAXId },
/* 26 /qm */ { BxPrefix, &BX_CPU_C::BxError }, // ES:
/* 27 /qm */ { 0, &BX_CPU_C::BxError },
/* 28 /qm */ { BxLockable, &BX_CPU_C::SUB_EbGbM },
@ -2869,7 +2869,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64M[512*3] = {
/* 2A /qm */ { 0, &BX_CPU_C::SUB_GbEbM },
/* 2B /qm */ { 0, &BX_CPU_C::SUB_GqEqM },
/* 2C /qm */ { BxImmediate_Ib, &BX_CPU_C::SUB_ALIb },
/* 2D /qm */ { BxImmediate_Iv, &BX_CPU_C::SUB_RAXId },
/* 2D /qm */ { BxImmediate_Id, &BX_CPU_C::SUB_RAXId },
/* 2E /qm */ { BxPrefix, &BX_CPU_C::BxError }, // CS:
/* 2F /qm */ { 0, &BX_CPU_C::BxError },
/* 30 /qm */ { BxLockable, &BX_CPU_C::XOR_EbGbM },
@ -2877,7 +2877,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64M[512*3] = {
/* 32 /qm */ { 0, &BX_CPU_C::XOR_GbEbM },
/* 33 /qm */ { 0, &BX_CPU_C::XOR_GqEqM },
/* 34 /qm */ { BxImmediate_Ib, &BX_CPU_C::XOR_ALIb },
/* 35 /qm */ { BxImmediate_Iv, &BX_CPU_C::XOR_RAXId },
/* 35 /qm */ { BxImmediate_Id, &BX_CPU_C::XOR_RAXId },
/* 36 /qm */ { BxPrefix, &BX_CPU_C::BxError }, // SS:
/* 37 /qm */ { 0, &BX_CPU_C::BxError },
/* 38 /qm */ { 0, &BX_CPU_C::CMP_EbGbM },
@ -2885,7 +2885,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64M[512*3] = {
/* 3A /qm */ { 0, &BX_CPU_C::CMP_GbEbM },
/* 3B /qm */ { 0, &BX_CPU_C::CMP_GqEqM },
/* 3C /qm */ { BxImmediate_Ib, &BX_CPU_C::CMP_ALIb },
/* 3D /qm */ { BxImmediate_Iv, &BX_CPU_C::CMP_RAXId },
/* 3D /qm */ { BxImmediate_Id, &BX_CPU_C::CMP_RAXId },
/* 3E /qm */ { BxPrefix, &BX_CPU_C::BxError }, // DS:
/* 3F /qm */ { 0, &BX_CPU_C::BxError },
/* 40 /qm */ { BxPrefix, &BX_CPU_C::BxError }, // REX:
@ -2928,8 +2928,8 @@ static const BxOpcodeInfo_t BxOpcodeInfo64M[512*3] = {
/* 65 /qm */ { BxPrefix, &BX_CPU_C::BxError }, // GS:
/* 66 /qm */ { BxPrefix, &BX_CPU_C::BxError }, // OS:
/* 67 /qm */ { BxPrefix, &BX_CPU_C::BxError }, // AS:
/* 68 /qm */ { BxImmediate_Iv, &BX_CPU_C::PUSH64_Id },
/* 69 /qm */ { BxImmediate_Iv, &BX_CPU_C::IMUL_GqEqId },
/* 68 /qm */ { BxImmediate_Id, &BX_CPU_C::PUSH64_Id },
/* 69 /qm */ { BxImmediate_Id, &BX_CPU_C::IMUL_GqEqId },
/* 6A /qm */ { BxImmediate_Ib_SE, &BX_CPU_C::PUSH64_Id },
/* 6B /qm */ { BxImmediate_Ib_SE, &BX_CPU_C::IMUL_GqEqId },
/* 6C /qm */ { 0, &BX_CPU_C::REP_INSB_YbDX },
@ -2953,7 +2953,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64M[512*3] = {
/* 7E /qm */ { BxImmediate_BrOff8 | BxTraceEnd, &BX_CPU_C::JLE_Jq },
/* 7F /qm */ { BxImmediate_BrOff8 | BxTraceEnd, &BX_CPU_C::JNLE_Jq },
/* 80 /qm */ { BxGroup1 | BxImmediate_Ib, NULL, BxOpcodeInfoG1EbIbM },
/* 81 /qm */ { BxGroup1 | BxImmediate_Iv, NULL, BxOpcodeInfo64G1EqM },
/* 81 /qm */ { BxGroup1 | BxImmediate_Id, NULL, BxOpcodeInfo64G1EqM },
/* 82 /qm */ { 0, &BX_CPU_C::BxError },
/* 83 /qm */ { BxGroup1 | BxImmediate_Ib_SE, NULL, BxOpcodeInfo64G1EqM },
/* 84 /qm */ { 0, &BX_CPU_C::TEST_EbGbM },
@ -2993,7 +2993,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64M[512*3] = {
/* A6 /qm */ { 0, &BX_CPU_C::REP_CMPSB_XbYb },
/* A7 /qm */ { 0, &BX_CPU_C::REP_CMPSQ_XqYq },
/* A8 /qm */ { BxImmediate_Ib, &BX_CPU_C::TEST_ALIb },
/* A9 /qm */ { BxImmediate_Iv, &BX_CPU_C::TEST_RAXId },
/* A9 /qm */ { BxImmediate_Id, &BX_CPU_C::TEST_RAXId },
/* AA /qm */ { 0, &BX_CPU_C::REP_STOSB_YbAL },
/* AB /qm */ { 0, &BX_CPU_C::REP_STOSQ_YqRAX },
/* AC /qm */ { 0, &BX_CPU_C::REP_LODSB_ALXb },
@ -3023,7 +3023,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64M[512*3] = {
/* C4 /qm */ { 0, &BX_CPU_C::BxError },
/* C5 /qm */ { 0, &BX_CPU_C::BxError },
/* C6 /qm */ { BxImmediate_Ib, &BX_CPU_C::MOV_EbIbM },
/* C7 /qm */ { BxImmediate_Iv, &BX_CPU_C::MOV_EqIdM },
/* C7 /qm */ { BxImmediate_Id, &BX_CPU_C::MOV_EqIdM },
/* C8 /qm */ { BxImmediate_IwIb, &BX_CPU_C::ENTER64_IwIb },
/* C9 /qm */ { 0, &BX_CPU_C::LEAVE64 },
/* CA /qm */ { BxImmediate_Iw | BxTraceEnd, &BX_CPU_C::RETfar64_Iw },
@ -3215,8 +3215,8 @@ static const BxOpcodeInfo_t BxOpcodeInfo64M[512*3] = {
/* 0F 75 /qm */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f75 },
/* 0F 76 /qm */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f76 },
/* 0F 77 /qm */ { 0, &BX_CPU_C::EMMS },
/* 0F 78 /qm */ { 0, &BX_CPU_C::BxError },
/* 0F 79 /qm */ { 0, &BX_CPU_C::BxError },
/* 0F 78 /qm */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f78 },
/* 0F 79 /qm */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f79 },
/* 0F 7A /qm */ { 0, &BX_CPU_C::BxError },
/* 0F 7B /qm */ { 0, &BX_CPU_C::BxError },
/* 0F 7C /qm */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f7c },
@ -3799,20 +3799,13 @@ modrm_done:
return(0);
}
break;
case BxImmediate_Iv:
if (instruction->os32L()) {
if ((ilen+3) < remain) {
instruction->modRMForm.Id = FetchDWORD(iptr);
ilen += 4;
}
else return(0);
case BxImmediate_Iw:
if ((ilen+1) < remain) {
instruction->modRMForm.Iw = FetchWORD(iptr);
ilen += 2;
}
else {
if ((ilen+1) < remain) {
instruction->modRMForm.Iw = FetchWORD(iptr);
ilen += 2;
}
else return(0);
return(0);
}
break;
case BxImmediate_Iq: // MOV Rx,imm64
@ -3824,6 +3817,21 @@ modrm_done:
return(0);
}
break;
case BxImmediate_IwIb:
if ((ilen+1) < remain) {
instruction->IxIxForm.Iw = FetchWORD(iptr);
iptr += 2;
ilen += 2;
}
else return(0);
if (ilen < remain) {
instruction->IxIxForm.Ib2 = *iptr;
ilen++;
}
else {
return(0);
}
break;
case BxImmediate_O:
// For instructions which embed the address in the opcode. Note
// there is only 64/32-bit addressing available in long-mode.
@ -3834,7 +3842,7 @@ modrm_done:
}
else return(0);
}
else {
else { // as32
if ((ilen+3) < remain) {
instruction->IqForm.Iq = (Bit64u) FetchDWORD(iptr);
ilen += 4;
@ -3842,23 +3850,6 @@ modrm_done:
else return(0);
}
break;
case BxImmediate_Iw:
case BxImmediate_IwIb:
if ((ilen+1) < remain) {
instruction->modRMForm.Iw = FetchWORD(iptr);
iptr += 2;
ilen += 2;
}
else return(0);
if (imm_mode == BxImmediate_Iw) break;
if (ilen < remain) {
instruction->IxIxForm.Ib2 = *iptr;
ilen++;
}
else {
return(0);
}
break;
case BxImmediate_BrOff8:
if (ilen < remain) {
Bit8s temp8s = *iptr;
@ -3869,9 +3860,10 @@ modrm_done:
return(0);
}
break;
case BxImmediate_Id:
case BxImmediate_BrOff32:
if ((ilen+3) < remain) {
instruction->modRMForm.Id = (Bit32s) FetchDWORD(iptr);
instruction->modRMForm.Id = FetchDWORD(iptr);
ilen += 4;
}
else {

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////
// $Id: sse.cc,v 1.50 2007-11-17 23:28:32 sshwarts Exp $
// $Id: sse.cc,v 1.51 2007-12-15 17:42:21 sshwarts Exp $
/////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2003 Stanislav Shwartsman
@ -2109,6 +2109,50 @@ void BX_CPU_C::PCMPEQD_VdqWdq(bxInstruction_c *i)
#endif
}
/* 66 0F 78 */
void BX_CPU_C::EXTRQ_VdqIbIb(bxInstruction_c *i)
{
#if BX_SUPPORT_SSE4A
BX_PANIC(("EXTRQ_VdqIbIb: still not implemented"));
#else
BX_INFO(("EXTRQ_VdqIbIb: required SSE4A, use --enable-sse4a option"));
UndefinedOpcode(i);
#endif
}
/* 66 0F 79 */
void BX_CPU_C::EXTRQ_VdqUdq(bxInstruction_c *i)
{
#if BX_SUPPORT_SSE4A
BX_PANIC(("EXTRQ_VdqUdq: still not implemented"));
#else
BX_INFO(("EXTRQ_VdqUdq: required SSE4A, use --enable-sse4a option"));
UndefinedOpcode(i);
#endif
}
/* F2 0F 78 */
void BX_CPU_C::INSERTQ_VdqUdqIbIb(bxInstruction_c *i)
{
#if BX_SUPPORT_SSE4A
BX_PANIC(("INSERTQ_VdqUdqIbIb: still not implemented"));
#else
BX_INFO(("INSERTQ_VdqUdqIbIb: required SSE4A, use --enable-sse4a option"));
UndefinedOpcode(i);
#endif
}
/* F2 0F 79 */
void BX_CPU_C::INSERTQ_VdqUdq(bxInstruction_c *i)
{
#if BX_SUPPORT_SSE4A
BX_PANIC(("INSERTQ_VdqUdq: still not implemented"));
#else
BX_INFO(("INSERTQ_VdqUdq: required SSE4A, use --enable-sse4a option"));
UndefinedOpcode(i);
#endif
}
/* 66 0F C4 */
void BX_CPU_C::PINSRW_VdqEwIb(bxInstruction_c *i)
{

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////
// $Id: sse_move.cc,v 1.68 2007-12-01 16:45:17 sshwarts Exp $
// $Id: sse_move.cc,v 1.69 2007-12-15 17:42:24 sshwarts Exp $
/////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2003 Stanislav Shwartsman
@ -1144,6 +1144,30 @@ void BX_CPU_C::MOVNTPS_MpsVps(bxInstruction_c *i)
#endif
}
/* MOVNTSD: F2 0F 2B */
void BX_CPU_C::MOVNTSD_MsdVsd(bxInstruction_c *i)
{
#if BX_SUPPORT_SSE4A
BX_CPU_THIS_PTR prepareSSE();
write_virtual_dword(i->seg(), RMAddr(i), &BX_READ_XMM_REG_LO_QWORD(i->nnn()));
#else
BX_INFO(("MOVNTSD_MsdVsd: required SSE4A, use --enable-sse4a option"));
UndefinedOpcode(i);
#endif
}
/* MOVNTSS: F3 0F 2B */
void BX_CPU_C::MOVNTSS_MssVss(bxInstruction_c *i)
{
#if BX_SUPPORT_SSE4A
BX_CPU_THIS_PTR prepareSSE();
write_virtual_dword(i->seg(), RMAddr(i), &BX_READ_XMM_REG_LO_DWORD(i->nnn()));
#else
BX_INFO(("MOVNTSS_MssVss: required SSE4A, use --enable-sse4a option"));
UndefinedOpcode(i);
#endif
}
/* ************************** */
/* 3-BYTE-OPCODE INSTRUCTIONS */
/* ************************** */