- from Peter Tattam: fixed invalid instructions for 64 bit mode

This commit is contained in:
Bryce Denney 2002-09-22 15:29:51 +00:00
parent 17f873abc3
commit 6b5192d98a

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////
// $Id: fetchdecode64.cc,v 1.8 2002-09-20 23:17:51 kevinlawton Exp $
// $Id: fetchdecode64.cc,v 1.9 2002-09-22 15:29:51 bdenney Exp $
/////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2001 MandrakeSoft S.A.
@ -469,15 +469,15 @@ static BxOpcodeInfo_t BxOpcodeInfo64[512*3] = {
/* 03 */ { BxAnother, &BX_CPU_C::ADD_GwEw },
/* 04 */ { BxImmediate_Ib, &BX_CPU_C::ADD_ALIb },
/* 05 */ { BxImmediate_Iv, &BX_CPU_C::ADD_AXIw },
/* 06 */ { 0, &BX_CPU_C::PUSH_ES },
/* 07 */ { 0, &BX_CPU_C::POP_ES },
/* 06 */ { 0, &BX_CPU_C::BxError },
/* 07 */ { 0, &BX_CPU_C::BxError },
/* 08 */ { BxAnother, &BX_CPU_C::OR_EbGb },
/* 09 */ { BxAnother, &BX_CPU_C::OR_EwGw },
/* 0A */ { BxAnother, &BX_CPU_C::OR_GbEb },
/* 0B */ { BxAnother, &BX_CPU_C::OR_GwEw },
/* 0C */ { BxImmediate_Ib, &BX_CPU_C::OR_ALIb },
/* 0D */ { BxImmediate_Iv, &BX_CPU_C::OR_AXIw },
/* 0E */ { 0, &BX_CPU_C::PUSH_CS },
/* 0E */ { 0, &BX_CPU_C::BxError },
/* 0F */ { BxAnother, &BX_CPU_C::BxError }, // 2-byte escape
/* 10 */ { BxAnother, &BX_CPU_C::ADC_EbGb },
/* 11 */ { BxAnother, &BX_CPU_C::ADC_EwGw },
@ -485,16 +485,16 @@ static BxOpcodeInfo_t BxOpcodeInfo64[512*3] = {
/* 13 */ { BxAnother, &BX_CPU_C::ADC_GwEw },
/* 14 */ { BxImmediate_Ib, &BX_CPU_C::ADC_ALIb },
/* 15 */ { BxImmediate_Iv, &BX_CPU_C::ADC_AXIw },
/* 16 */ { 0, &BX_CPU_C::PUSH_SS },
/* 17 */ { 0, &BX_CPU_C::POP_SS },
/* 16 */ { 0, &BX_CPU_C::BxError },
/* 17 */ { 0, &BX_CPU_C::BxError },
/* 18 */ { BxAnother, &BX_CPU_C::SBB_EbGb },
/* 19 */ { BxAnother, &BX_CPU_C::SBB_EwGw },
/* 1A */ { BxAnother, &BX_CPU_C::SBB_GbEb },
/* 1B */ { BxAnother, &BX_CPU_C::SBB_GwEw },
/* 1C */ { BxImmediate_Ib, &BX_CPU_C::SBB_ALIb },
/* 1D */ { BxImmediate_Iv, &BX_CPU_C::SBB_AXIw },
/* 1E */ { 0, &BX_CPU_C::PUSH_DS },
/* 1F */ { 0, &BX_CPU_C::POP_DS },
/* 1E */ { 0, &BX_CPU_C::BxError },
/* 1F */ { 0, &BX_CPU_C::BxError },
/* 20 */ { BxAnother, &BX_CPU_C::AND_EbGb },
/* 21 */ { BxAnother, &BX_CPU_C::AND_EwGw },
/* 22 */ { BxAnother, &BX_CPU_C::AND_GbEb },
@ -502,7 +502,7 @@ static BxOpcodeInfo_t BxOpcodeInfo64[512*3] = {
/* 24 */ { BxImmediate_Ib, &BX_CPU_C::AND_ALIb },
/* 25 */ { BxImmediate_Iv, &BX_CPU_C::AND_AXIw },
/* 26 */ { BxPrefix | BxAnother, &BX_CPU_C::BxError }, // ES:
/* 27 */ { 0, &BX_CPU_C::DAA },
/* 27 */ { 0, &BX_CPU_C::BxError },
/* 28 */ { BxAnother, &BX_CPU_C::SUB_EbGb },
/* 29 */ { BxAnother, &BX_CPU_C::SUB_EwGw },
/* 2A */ { BxAnother, &BX_CPU_C::SUB_GbEb },
@ -510,7 +510,7 @@ static BxOpcodeInfo_t BxOpcodeInfo64[512*3] = {
/* 2C */ { BxImmediate_Ib, &BX_CPU_C::SUB_ALIb },
/* 2D */ { BxImmediate_Iv, &BX_CPU_C::SUB_AXIw },
/* 2E */ { BxPrefix | BxAnother, &BX_CPU_C::BxError }, // CS:
/* 2F */ { 0, &BX_CPU_C::DAS },
/* 2F */ { 0, &BX_CPU_C::BxError },
/* 30 */ { BxAnother, &BX_CPU_C::XOR_EbGb },
/* 31 */ { BxAnother, &BX_CPU_C::XOR_EwGw },
/* 32 */ { BxAnother, &BX_CPU_C::XOR_GbEb },
@ -518,7 +518,7 @@ static BxOpcodeInfo_t BxOpcodeInfo64[512*3] = {
/* 34 */ { BxImmediate_Ib, &BX_CPU_C::XOR_ALIb },
/* 35 */ { BxImmediate_Iv, &BX_CPU_C::XOR_AXIw },
/* 36 */ { BxPrefix | BxAnother, &BX_CPU_C::BxError }, // SS:
/* 37 */ { 0, &BX_CPU_C::AAA },
/* 37 */ { 0, &BX_CPU_C::BxError },
/* 38 */ { BxAnother, &BX_CPU_C::CMP_EbGb },
/* 39 */ { BxAnother, &BX_CPU_C::CMP_EwGw },
/* 3A */ { BxAnother, &BX_CPU_C::CMP_GbEb },
@ -526,7 +526,7 @@ static BxOpcodeInfo_t BxOpcodeInfo64[512*3] = {
/* 3C */ { BxImmediate_Ib, &BX_CPU_C::CMP_ALIb },
/* 3D */ { BxImmediate_Iv, &BX_CPU_C::CMP_AXIw },
/* 3E */ { BxPrefix | BxAnother, &BX_CPU_C::BxError }, // DS:
/* 3F */ { 0, &BX_CPU_C::AAS },
/* 3F */ { 0, &BX_CPU_C::BxError },
/* 40 */ { BxPrefix | BxAnother, &BX_CPU_C::BxError }, // REX:
/* 41 */ { BxPrefix | BxAnother, &BX_CPU_C::BxError }, // REX:
/* 42 */ { BxPrefix | BxAnother, &BX_CPU_C::BxError }, // REX:
@ -559,10 +559,11 @@ static BxOpcodeInfo_t BxOpcodeInfo64[512*3] = {
/* 5D */ { 0, &BX_CPU_C::POP_RX },
/* 5E */ { 0, &BX_CPU_C::POP_RX },
/* 5F */ { 0, &BX_CPU_C::POP_RX },
/* 60 */ { 0, &BX_CPU_C::PUSHAD16 },
/* 61 */ { 0, &BX_CPU_C::POPAD16 },
/* 62 */ { BxAnother, &BX_CPU_C::BOUND_GvMa },
/* 63 */ { BxAnother, &BX_CPU_C::BxError },
/* 60 */ { 0, &BX_CPU_C::BxError },
/* 61 */ { 0, &BX_CPU_C::BxError },
/* 62 */ { 0, &BX_CPU_C::BxError },
#warning PRT: op=63 This needs checking on real hardware. Manual says 16 bit version leaves upper 48 bits unchanged
/* 63 */ { BxAnother, &BX_CPU_C::MOVSX_GwEw }, //
/* 64 */ { BxPrefix | BxAnother, &BX_CPU_C::BxError }, // FS:
/* 65 */ { BxPrefix | BxAnother, &BX_CPU_C::BxError }, // GS:
/* 66 */ { BxPrefix | BxAnother, &BX_CPU_C::BxError }, // OS:
@ -593,7 +594,7 @@ static BxOpcodeInfo_t BxOpcodeInfo64[512*3] = {
/* 7F */ { BxImmediate_BrOff8, &BX_CPU_C::JCC_Jw },
/* 80 */ { BxAnother | BxGroup1, NULL, BxOpcodeInfo64G1EbIb },
/* 81 */ { BxAnother | BxGroup1 | BxImmediate_Iv, NULL, BxOpcodeInfo64G1Ew },
/* 82 */ { BxAnother | BxGroup1, NULL, BxOpcodeInfo64G1EbIb },
/* 82 */ { 0, &BX_CPU_C::BxError },
/* 83 */ { BxAnother | BxGroup1 | BxImmediate_Ib_SE, NULL, BxOpcodeInfo64G1Ew },
/* 84 */ { BxAnother, &BX_CPU_C::TEST_EbGb },
/* 85 */ { BxAnother, &BX_CPU_C::TEST_EwGw },
@ -617,12 +618,12 @@ static BxOpcodeInfo_t BxOpcodeInfo64[512*3] = {
/* 97 */ { 0, &BX_CPU_C::XCHG_RXAX },
/* 98 */ { 0, &BX_CPU_C::CBW },
/* 99 */ { 0, &BX_CPU_C::CWD },
/* 9A */ { BxImmediate_IvIw, &BX_CPU_C::CALL16_Ap }, // invalid??
/* 9A */ { 0, &BX_CPU_C::BxError },
/* 9B */ { 0, &BX_CPU_C::FWAIT },
/* 9C */ { 0, &BX_CPU_C::PUSHF_Fv },
/* 9D */ { 0, &BX_CPU_C::POPF_Fv },
/* 9E */ { 0, &BX_CPU_C::SAHF },
/* 9F */ { 0, &BX_CPU_C::LAHF },
/* 9E */ { 0, &BX_CPU_C::BxError },
/* 9F */ { 0, &BX_CPU_C::BxError },
/* A0 */ { BxImmediate_Oq, &BX_CPU_C::MOV_ALOq },
/* A1 */ { BxImmediate_Oq, &BX_CPU_C::MOV_AXOq },
/* A2 */ { BxImmediate_Oq, &BX_CPU_C::MOV_OqAL },
@ -659,8 +660,8 @@ static BxOpcodeInfo_t BxOpcodeInfo64[512*3] = {
/* C1 */ { BxAnother | BxGroup2 | BxImmediate_Ib, NULL, BxOpcodeInfo64G2Ew },
/* C2 */ { BxImmediate_Iw, &BX_CPU_C::RETnear16_Iw },
/* C3 */ { 0, &BX_CPU_C::RETnear16 },
/* C4 */ { BxAnother, &BX_CPU_C::LES_GvMp },
/* C5 */ { BxAnother, &BX_CPU_C::LDS_GvMp },
/* C4 */ { 0, &BX_CPU_C::BxError },
/* C5 */ { 0, &BX_CPU_C::BxError },
/* C6 */ { BxAnother | BxImmediate_Ib, &BX_CPU_C::MOV_EbIb },
/* C7 */ { BxAnother | BxImmediate_Iv, &BX_CPU_C::MOV_EwIw },
/* C8 */ { BxImmediate_IwIb, &BX_CPU_C::ENTER64_IwIb },
@ -669,15 +670,15 @@ static BxOpcodeInfo_t BxOpcodeInfo64[512*3] = {
/* CB */ { 0, &BX_CPU_C::RETfar16 },
/* CC */ { 0, &BX_CPU_C::INT3 },
/* CD */ { BxImmediate_Ib, &BX_CPU_C::INT_Ib },
/* CE */ { 0, &BX_CPU_C::INTO },
/* CE */ { 0, &BX_CPU_C::BxError },
/* CF */ { 0, &BX_CPU_C::IRET16 },
/* D0 */ { BxAnother | BxGroup2, NULL, BxOpcodeInfo64G2Eb },
/* D1 */ { BxAnother | BxGroup2, NULL, BxOpcodeInfo64G2Ew },
/* D2 */ { BxAnother | BxGroup2, NULL, BxOpcodeInfo64G2Eb },
/* D3 */ { BxAnother | BxGroup2, NULL, BxOpcodeInfo64G2Ew },
/* D4 */ { BxImmediate_Ib, &BX_CPU_C::AAM },
/* D5 */ { BxImmediate_Ib, &BX_CPU_C::AAD },
/* D6 */ { 0, &BX_CPU_C::SALC },
/* D4 */ { 0, &BX_CPU_C::BxError },
/* D5 */ { 0, &BX_CPU_C::BxError },
/* D6 */ { 0, &BX_CPU_C::BxError },
/* D7 */ { 0, &BX_CPU_C::XLAT },
/* D8 */ { BxAnother, &BX_CPU_C::ESC0 },
/* D9 */ { BxAnother, &BX_CPU_C::ESC1 },
@ -697,7 +698,7 @@ static BxOpcodeInfo_t BxOpcodeInfo64[512*3] = {
/* E7 */ { BxImmediate_Ib, &BX_CPU_C::OUT_IbeAX },
/* E8 */ { BxImmediate_BrOff16, &BX_CPU_C::CALL_Aw },
/* E9 */ { BxImmediate_BrOff16, &BX_CPU_C::JMP_Jq },
/* EA */ { BxImmediate_IvIw, &BX_CPU_C::JMP_Ap },
/* EA */ { 0, &BX_CPU_C::BxError },
/* EB */ { BxImmediate_BrOff8, &BX_CPU_C::JMP_Jq },
/* EC */ { 0, &BX_CPU_C::IN_ALDX },
/* ED */ { 0, &BX_CPU_C::IN_eAXDX },
@ -984,15 +985,15 @@ static BxOpcodeInfo_t BxOpcodeInfo64[512*3] = {
/* 03 */ { BxAnother, &BX_CPU_C::ADD_GdEd },
/* 04 */ { BxImmediate_Ib, &BX_CPU_C::ADD_ALIb },
/* 05 */ { BxImmediate_Iv, &BX_CPU_C::ADD_EAXId },
/* 06 */ { 0, &BX_CPU_C::PUSH64_ES },
/* 07 */ { 0, &BX_CPU_C::POP64_ES },
/* 06 */ { 0, &BX_CPU_C::BxError },
/* 07 */ { 0, &BX_CPU_C::BxError },
/* 08 */ { BxAnother, &BX_CPU_C::OR_EbGb },
/* 09 */ { BxAnother, &BX_CPU_C::OR_EdGd },
/* 0A */ { BxAnother, &BX_CPU_C::OR_GbEb },
/* 0B */ { BxAnother, &BX_CPU_C::OR_GdEd },
/* 0C */ { BxImmediate_Ib, &BX_CPU_C::OR_ALIb },
/* 0D */ { BxImmediate_Iv, &BX_CPU_C::OR_EAXId },
/* 0E */ { 0, &BX_CPU_C::PUSH64_CS },
/* 0E */ { 0, &BX_CPU_C::BxError },
/* 0F */ { BxAnother, &BX_CPU_C::BxError }, // 2-byte escape
/* 10 */ { BxAnother, &BX_CPU_C::ADC_EbGb },
/* 11 */ { BxAnother, &BX_CPU_C::ADC_EdGd },
@ -1000,16 +1001,16 @@ static BxOpcodeInfo_t BxOpcodeInfo64[512*3] = {
/* 13 */ { BxAnother, &BX_CPU_C::ADC_GdEd },
/* 14 */ { BxImmediate_Ib, &BX_CPU_C::ADC_ALIb },
/* 15 */ { BxImmediate_Iv, &BX_CPU_C::ADC_EAXId },
/* 16 */ { 0, &BX_CPU_C::PUSH64_SS },
/* 17 */ { 0, &BX_CPU_C::POP64_SS },
/* 16 */ { 0, &BX_CPU_C::BxError },
/* 17 */ { 0, &BX_CPU_C::BxError },
/* 18 */ { BxAnother, &BX_CPU_C::SBB_EbGb },
/* 19 */ { BxAnother, &BX_CPU_C::SBB_EdGd },
/* 1A */ { BxAnother, &BX_CPU_C::SBB_GbEb },
/* 1B */ { BxAnother, &BX_CPU_C::SBB_GdEd },
/* 1C */ { BxImmediate_Ib, &BX_CPU_C::SBB_ALIb },
/* 1D */ { BxImmediate_Iv, &BX_CPU_C::SBB_EAXId },
/* 1E */ { 0, &BX_CPU_C::PUSH64_DS },
/* 1F */ { 0, &BX_CPU_C::POP64_DS },
/* 1E */ { 0, &BX_CPU_C::BxError },
/* 1F */ { 0, &BX_CPU_C::BxError },
/* 20 */ { BxAnother, &BX_CPU_C::AND_EbGb },
/* 21 */ { BxAnother, &BX_CPU_C::AND_EdGd },
/* 22 */ { BxAnother, &BX_CPU_C::AND_GbEb },
@ -1017,7 +1018,7 @@ static BxOpcodeInfo_t BxOpcodeInfo64[512*3] = {
/* 24 */ { BxImmediate_Ib, &BX_CPU_C::AND_ALIb },
/* 25 */ { BxImmediate_Iv, &BX_CPU_C::AND_EAXId },
/* 26 */ { BxPrefix | BxAnother, &BX_CPU_C::BxError }, // ES:
/* 27 */ { 0, &BX_CPU_C::DAA },
/* 27 */ { 0, &BX_CPU_C::BxError },
/* 28 */ { BxAnother, &BX_CPU_C::SUB_EbGb },
/* 29 */ { BxAnother, &BX_CPU_C::SUB_EdGd },
/* 2A */ { BxAnother, &BX_CPU_C::SUB_GbEb },
@ -1025,7 +1026,7 @@ static BxOpcodeInfo_t BxOpcodeInfo64[512*3] = {
/* 2C */ { BxImmediate_Ib, &BX_CPU_C::SUB_ALIb },
/* 2D */ { BxImmediate_Iv, &BX_CPU_C::SUB_EAXId },
/* 2E */ { BxPrefix | BxAnother, &BX_CPU_C::BxError }, // CS:
/* 2F */ { 0, &BX_CPU_C::DAS },
/* 2F */ { 0, &BX_CPU_C::BxError },
/* 30 */ { BxAnother, &BX_CPU_C::XOR_EbGb },
/* 31 */ { BxAnother, &BX_CPU_C::XOR_EdGd },
/* 32 */ { BxAnother, &BX_CPU_C::XOR_GbEb },
@ -1033,7 +1034,7 @@ static BxOpcodeInfo_t BxOpcodeInfo64[512*3] = {
/* 34 */ { BxImmediate_Ib, &BX_CPU_C::XOR_ALIb },
/* 35 */ { BxImmediate_Iv, &BX_CPU_C::XOR_EAXId },
/* 36 */ { BxPrefix | BxAnother, &BX_CPU_C::BxError }, // SS:
/* 37 */ { 0, &BX_CPU_C::AAA },
/* 37 */ { 0, &BX_CPU_C::BxError },
/* 38 */ { BxAnother, &BX_CPU_C::CMP_EbGb },
/* 39 */ { BxAnother, &BX_CPU_C::CMP_EdGd },
/* 3A */ { BxAnother, &BX_CPU_C::CMP_GbEb },
@ -1041,7 +1042,7 @@ static BxOpcodeInfo_t BxOpcodeInfo64[512*3] = {
/* 3C */ { BxImmediate_Ib, &BX_CPU_C::CMP_ALIb },
/* 3D */ { BxImmediate_Iv, &BX_CPU_C::CMP_EAXId },
/* 3E */ { BxPrefix | BxAnother, &BX_CPU_C::BxError }, // DS:
/* 3F */ { 0, &BX_CPU_C::AAS },
/* 3F */ { 0, &BX_CPU_C::BxError },
/* 40 */ { BxPrefix | BxAnother, &BX_CPU_C::BxError }, // REX:
/* 41 */ { BxPrefix | BxAnother, &BX_CPU_C::BxError }, // REX:
/* 42 */ { BxPrefix | BxAnother, &BX_CPU_C::BxError }, // REX:
@ -1074,10 +1075,11 @@ static BxOpcodeInfo_t BxOpcodeInfo64[512*3] = {
/* 5D */ { 0, &BX_CPU_C::POP_RRX },
/* 5E */ { 0, &BX_CPU_C::POP_RRX },
/* 5F */ { 0, &BX_CPU_C::POP_RRX },
/* 60 */ { 0, &BX_CPU_C::PUSHAD32 },
/* 61 */ { 0, &BX_CPU_C::POPAD32 },
/* 62 */ { BxAnother, &BX_CPU_C::BOUND_GvMa },
/* 63 */ { 0, &BX_CPU_C::BxError },
/* 60 */ { 0, &BX_CPU_C::BxError },
/* 61 */ { 0, &BX_CPU_C::BxError },
/* 62 */ { 0, &BX_CPU_C::BxError },
#warning PRT: This needs checking on real hardware. Manual says 32 bit version zero extends result
/* 63 */ { BxAnother, &BX_CPU_C::MOV_GdEd },
/* 64 */ { BxPrefix | BxAnother, &BX_CPU_C::BxError }, // FS:
/* 65 */ { BxPrefix | BxAnother, &BX_CPU_C::BxError }, // GS:
/* 66 */ { BxPrefix | BxAnother, &BX_CPU_C::BxError }, // OS:
@ -1108,7 +1110,7 @@ static BxOpcodeInfo_t BxOpcodeInfo64[512*3] = {
/* 7F */ { BxImmediate_BrOff8, &BX_CPU_C::JCC_Jd },
/* 80 */ { BxAnother | BxGroup1, NULL, BxOpcodeInfo64G1EbIb },
/* 81 */ { BxAnother | BxGroup1 | BxImmediate_Iv, NULL, BxOpcodeInfo64G1Ed },
/* 82 */ { BxAnother | BxGroup1, NULL, BxOpcodeInfo64G1EbIb },
/* 82 */ { 0, &BX_CPU_C::BxError },
/* 83 */ { BxAnother | BxGroup1 | BxImmediate_Ib_SE, NULL, BxOpcodeInfo64G1Ed },
/* 84 */ { BxAnother, &BX_CPU_C::TEST_EbGb },
/* 85 */ { BxAnother, &BX_CPU_C::TEST_EdGd },
@ -1132,12 +1134,12 @@ static BxOpcodeInfo_t BxOpcodeInfo64[512*3] = {
/* 97 */ { 0, &BX_CPU_C::XCHG_ERXEAX },
/* 98 */ { 0, &BX_CPU_C::CWDE },
/* 99 */ { 0, &BX_CPU_C::CDQ },
/* 9A */ { BxImmediate_IvIw, &BX_CPU_C::CALL32_Ap },
/* 9A */ { 0, &BX_CPU_C::BxError },
/* 9B */ { 0, &BX_CPU_C::FWAIT },
/* 9C */ { 0, &BX_CPU_C::PUSHF_Fv },
/* 9D */ { 0, &BX_CPU_C::POPF_Fv },
/* 9E */ { 0, &BX_CPU_C::SAHF },
/* 9F */ { 0, &BX_CPU_C::LAHF },
/* 9E */ { 0, &BX_CPU_C::BxError },
/* 9F */ { 0, &BX_CPU_C::BxError },
/* A0 */ { BxImmediate_Oq, &BX_CPU_C::MOV_ALOq },
/* A1 */ { BxImmediate_Oq, &BX_CPU_C::MOV_EAXOq },
/* A2 */ { BxImmediate_Oq, &BX_CPU_C::MOV_OqAL },
@ -1174,8 +1176,8 @@ static BxOpcodeInfo_t BxOpcodeInfo64[512*3] = {
/* C1 */ { BxAnother | BxGroup2 | BxImmediate_Ib, NULL, BxOpcodeInfo64G2Ed },
/* C2 */ { BxImmediate_Iw, &BX_CPU_C::RETnear64_Iw },
/* C3 */ { 0, &BX_CPU_C::RETnear64 },
/* C4 */ { BxAnother, &BX_CPU_C::LES_GvMp },
/* C5 */ { BxAnother, &BX_CPU_C::LDS_GvMp },
/* C4 */ { 0, &BX_CPU_C::BxError },
/* C5 */ { 0, &BX_CPU_C::BxError },
/* C6 */ { BxAnother | BxImmediate_Ib, &BX_CPU_C::MOV_EbIb },
/* C7 */ { BxAnother | BxImmediate_Iv, &BX_CPU_C::MOV_EdId },
/* C8 */ { BxImmediate_IwIb, &BX_CPU_C::ENTER64_IwIb },
@ -1184,15 +1186,15 @@ static BxOpcodeInfo_t BxOpcodeInfo64[512*3] = {
/* CB */ { 0, &BX_CPU_C::RETfar64 },
/* CC */ { 0, &BX_CPU_C::INT3 },
/* CD */ { BxImmediate_Ib, &BX_CPU_C::INT_Ib },
/* CE */ { 0, &BX_CPU_C::INTO },
/* CE */ { 0, &BX_CPU_C::BxError },
/* CF */ { 0, &BX_CPU_C::IRET64 },
/* D0 */ { BxAnother | BxGroup2, NULL, BxOpcodeInfo64G2Eb },
/* D1 */ { BxAnother | BxGroup2, NULL, BxOpcodeInfo64G2Ed },
/* D2 */ { BxAnother | BxGroup2, NULL, BxOpcodeInfo64G2Eb },
/* D3 */ { BxAnother | BxGroup2, NULL, BxOpcodeInfo64G2Ed },
/* D4 */ { BxImmediate_Ib, &BX_CPU_C::AAM },
/* D5 */ { BxImmediate_Ib, &BX_CPU_C::AAD },
/* D6 */ { 0, &BX_CPU_C::SALC },
/* D4 */ { 0, &BX_CPU_C::BxError },
/* D5 */ { 0, &BX_CPU_C::BxError },
/* D6 */ { 0, &BX_CPU_C::BxError },
/* D7 */ { 0, &BX_CPU_C::XLAT },
/* D8 */ { BxAnother, &BX_CPU_C::ESC0 },
/* D9 */ { BxAnother, &BX_CPU_C::ESC1 },
@ -1212,7 +1214,7 @@ static BxOpcodeInfo_t BxOpcodeInfo64[512*3] = {
/* E7 */ { BxImmediate_Ib, &BX_CPU_C::OUT_IbeAX },
/* E8 */ { BxImmediate_BrOff32, &BX_CPU_C::CALL_Aq },
/* E9 */ { BxImmediate_BrOff32, &BX_CPU_C::JMP_Jq },
/* EA */ { BxImmediate_IvIw, &BX_CPU_C::JMP_Ap },
/* EA */ { 0, &BX_CPU_C::BxError },
/* EB */ { BxImmediate_BrOff8, &BX_CPU_C::JMP_Jq },
/* EC */ { 0, &BX_CPU_C::IN_ALDX },
/* ED */ { 0, &BX_CPU_C::IN_eAXDX },
@ -1499,15 +1501,15 @@ static BxOpcodeInfo_t BxOpcodeInfo64[512*3] = {
/* 03 */ { BxAnother, &BX_CPU_C::ADD_GqEq },
/* 04 */ { BxImmediate_Ib, &BX_CPU_C::ADD_ALIb },
/* 05 */ { BxImmediate_Iv, &BX_CPU_C::ADD_RAXId },
/* 06 */ { 0, &BX_CPU_C::PUSH64_ES },
/* 07 */ { 0, &BX_CPU_C::POP64_ES },
/* 06 */ { 0, &BX_CPU_C::BxError },
/* 07 */ { 0, &BX_CPU_C::BxError },
/* 08 */ { BxAnother, &BX_CPU_C::OR_EbGb },
/* 09 */ { BxAnother, &BX_CPU_C::OR_EqGq },
/* 0A */ { BxAnother, &BX_CPU_C::OR_GbEb },
/* 0B */ { BxAnother, &BX_CPU_C::OR_GqEq },
/* 0C */ { BxImmediate_Ib, &BX_CPU_C::OR_ALIb },
/* 0D */ { BxImmediate_Iv, &BX_CPU_C::OR_RAXId },
/* 0E */ { 0, &BX_CPU_C::PUSH64_CS },
/* 0E */ { 0, &BX_CPU_C::BxError },
/* 0F */ { BxAnother, &BX_CPU_C::BxError }, // 2-byte escape
/* 10 */ { BxAnother, &BX_CPU_C::ADC_EbGb },
/* 11 */ { BxAnother, &BX_CPU_C::ADC_EqGq },
@ -1515,16 +1517,16 @@ static BxOpcodeInfo_t BxOpcodeInfo64[512*3] = {
/* 13 */ { BxAnother, &BX_CPU_C::ADC_GqEq },
/* 14 */ { BxImmediate_Ib, &BX_CPU_C::ADC_ALIb },
/* 15 */ { BxImmediate_Iv, &BX_CPU_C::ADC_RAXId },
/* 16 */ { 0, &BX_CPU_C::PUSH64_SS },
/* 17 */ { 0, &BX_CPU_C::POP64_SS },
/* 16 */ { 0, &BX_CPU_C::BxError },
/* 17 */ { 0, &BX_CPU_C::BxError },
/* 18 */ { BxAnother, &BX_CPU_C::SBB_EbGb },
/* 19 */ { BxAnother, &BX_CPU_C::SBB_EqGq },
/* 1A */ { BxAnother, &BX_CPU_C::SBB_GbEb },
/* 1B */ { BxAnother, &BX_CPU_C::SBB_GqEq },
/* 1C */ { BxImmediate_Ib, &BX_CPU_C::SBB_ALIb },
/* 1D */ { BxImmediate_Iv, &BX_CPU_C::SBB_RAXId },
/* 1E */ { 0, &BX_CPU_C::PUSH64_DS },
/* 1F */ { 0, &BX_CPU_C::POP64_DS },
/* 1E */ { 0, &BX_CPU_C::BxError },
/* 1F */ { 0, &BX_CPU_C::BxError },
/* 20 */ { BxAnother, &BX_CPU_C::AND_EbGb },
/* 21 */ { BxAnother, &BX_CPU_C::AND_EqGq },
/* 22 */ { BxAnother, &BX_CPU_C::AND_GbEb },
@ -1532,7 +1534,7 @@ static BxOpcodeInfo_t BxOpcodeInfo64[512*3] = {
/* 24 */ { BxImmediate_Ib, &BX_CPU_C::AND_ALIb },
/* 25 */ { BxImmediate_Iv, &BX_CPU_C::AND_RAXId },
/* 26 */ { BxPrefix | BxAnother, &BX_CPU_C::BxError }, // ES:
/* 27 */ { 0, &BX_CPU_C::DAA },
/* 27 */ { 0, &BX_CPU_C::BxError },
/* 28 */ { BxAnother, &BX_CPU_C::SUB_EbGb },
/* 29 */ { BxAnother, &BX_CPU_C::SUB_EqGq },
/* 2A */ { BxAnother, &BX_CPU_C::SUB_GbEb },
@ -1540,7 +1542,7 @@ static BxOpcodeInfo_t BxOpcodeInfo64[512*3] = {
/* 2C */ { BxImmediate_Ib, &BX_CPU_C::SUB_ALIb },
/* 2D */ { BxImmediate_Iv, &BX_CPU_C::SUB_RAXId },
/* 2E */ { BxPrefix | BxAnother, &BX_CPU_C::BxError }, // CS:
/* 2F */ { 0, &BX_CPU_C::DAS },
/* 2F */ { 0, &BX_CPU_C::BxError },
/* 30 */ { BxAnother, &BX_CPU_C::XOR_EbGb },
/* 31 */ { BxAnother, &BX_CPU_C::XOR_EqGq },
/* 32 */ { BxAnother, &BX_CPU_C::XOR_GbEb },
@ -1548,7 +1550,7 @@ static BxOpcodeInfo_t BxOpcodeInfo64[512*3] = {
/* 34 */ { BxImmediate_Ib, &BX_CPU_C::XOR_ALIb },
/* 35 */ { BxImmediate_Iv, &BX_CPU_C::XOR_RAXId },
/* 36 */ { BxPrefix | BxAnother, &BX_CPU_C::BxError }, // SS:
/* 37 */ { 0, &BX_CPU_C::AAA },
/* 37 */ { 0, &BX_CPU_C::BxError },
/* 38 */ { BxAnother, &BX_CPU_C::CMP_EbGb },
/* 39 */ { BxAnother, &BX_CPU_C::CMP_EqGq },
/* 3A */ { BxAnother, &BX_CPU_C::CMP_GbEb },
@ -1556,7 +1558,7 @@ static BxOpcodeInfo_t BxOpcodeInfo64[512*3] = {
/* 3C */ { BxImmediate_Ib, &BX_CPU_C::CMP_ALIb },
/* 3D */ { BxImmediate_Iv, &BX_CPU_C::CMP_RAXId },
/* 3E */ { BxPrefix | BxAnother, &BX_CPU_C::BxError }, // DS:
/* 3F */ { 0, &BX_CPU_C::AAS },
/* 3F */ { 0, &BX_CPU_C::BxError },
/* 40 */ { BxPrefix | BxAnother, &BX_CPU_C::BxError }, // REX:
/* 41 */ { BxPrefix | BxAnother, &BX_CPU_C::BxError }, // REX:
/* 42 */ { BxPrefix | BxAnother, &BX_CPU_C::BxError }, // REX:
@ -1589,9 +1591,9 @@ static BxOpcodeInfo_t BxOpcodeInfo64[512*3] = {
/* 5D */ { 0, &BX_CPU_C::POP_RRX },
/* 5E */ { 0, &BX_CPU_C::POP_RRX },
/* 5F */ { 0, &BX_CPU_C::POP_RRX },
/* 60 */ { 0, &BX_CPU_C::PUSHAD64 },
/* 61 */ { 0, &BX_CPU_C::POPAD64 },
/* 62 */ { BxAnother, &BX_CPU_C::BOUND_GvMa },
/* 60 */ { 0, &BX_CPU_C::BxError },
/* 61 */ { 0, &BX_CPU_C::BxError },
/* 62 */ { 0, &BX_CPU_C::BxError },
/* 63 */ { BxAnother, &BX_CPU_C::MOVSX_GqEd },
/* 64 */ { BxPrefix | BxAnother, &BX_CPU_C::BxError }, // FS:
/* 65 */ { BxPrefix | BxAnother, &BX_CPU_C::BxError }, // GS:
@ -1623,7 +1625,7 @@ static BxOpcodeInfo_t BxOpcodeInfo64[512*3] = {
/* 7F */ { BxImmediate_BrOff8, &BX_CPU_C::JCC_Jq },
/* 80 */ { BxAnother | BxGroup1, NULL, BxOpcodeInfo64G1EbIb },
/* 81 */ { BxAnother | BxGroup1 | BxImmediate_Iv, NULL, BxOpcodeInfo64G1Eq },
/* 82 */ { BxAnother | BxGroup1, NULL, BxOpcodeInfo64G1EbIb },
/* 82 */ { 0, &BX_CPU_C::BxError },
/* 83 */ { BxAnother | BxGroup1 | BxImmediate_Ib_SE, NULL, BxOpcodeInfo64G1Eq },
/* 84 */ { BxAnother, &BX_CPU_C::TEST_EbGb },
/* 85 */ { BxAnother, &BX_CPU_C::TEST_EqGq },
@ -1647,12 +1649,12 @@ static BxOpcodeInfo_t BxOpcodeInfo64[512*3] = {
/* 97 */ { 0, &BX_CPU_C::XCHG_RRXRAX },
/* 98 */ { 0, &BX_CPU_C::CDQE },
/* 99 */ { 0, &BX_CPU_C::CQO },
/* 9A */ { BxImmediate_IvIw, &BX_CPU_C::CALL64_Ap },
/* 9A */ { 0, &BX_CPU_C::BxError },
/* 9B */ { 0, &BX_CPU_C::FWAIT },
/* 9C */ { 0, &BX_CPU_C::PUSHF_Fv },
/* 9D */ { 0, &BX_CPU_C::POPF_Fv },
/* 9E */ { 0, &BX_CPU_C::SAHF },
/* 9F */ { 0, &BX_CPU_C::LAHF },
/* 9E */ { 0, &BX_CPU_C::BxError },
/* 9F */ { 0, &BX_CPU_C::BxError },
/* A0 */ { BxImmediate_Oq, &BX_CPU_C::MOV_ALOq },
/* A1 */ { BxImmediate_Oq, &BX_CPU_C::MOV_RAXOq },
/* A2 */ { BxImmediate_Oq, &BX_CPU_C::MOV_OqAL },
@ -1689,8 +1691,8 @@ static BxOpcodeInfo_t BxOpcodeInfo64[512*3] = {
/* C1 */ { BxAnother | BxGroup2 | BxImmediate_Ib, NULL, BxOpcodeInfo64G2Eq },
/* C2 */ { BxImmediate_Iw, &BX_CPU_C::RETnear64_Iw },
/* C3 */ { 0, &BX_CPU_C::RETnear64 },
/* C4 */ { BxAnother, &BX_CPU_C::LES_GvMp },
/* C5 */ { BxAnother, &BX_CPU_C::LDS_GvMp },
/* C4 */ { 0, &BX_CPU_C::BxError },
/* C5 */ { 0, &BX_CPU_C::BxError },
/* C6 */ { BxAnother | BxImmediate_Ib, &BX_CPU_C::MOV_EbIb },
/* C7 */ { BxAnother | BxImmediate_Iv, &BX_CPU_C::MOV_EqId },
/* C8 */ { BxImmediate_IwIb, &BX_CPU_C::ENTER64_IwIb },
@ -1699,15 +1701,15 @@ static BxOpcodeInfo_t BxOpcodeInfo64[512*3] = {
/* CB */ { 0, &BX_CPU_C::RETfar64 },
/* CC */ { 0, &BX_CPU_C::INT3 },
/* CD */ { BxImmediate_Ib, &BX_CPU_C::INT_Ib },
/* CE */ { 0, &BX_CPU_C::INTO },
/* CE */ { 0, &BX_CPU_C::BxError },
/* CF */ { 0, &BX_CPU_C::IRET64 },
/* D0 */ { BxAnother | BxGroup2, NULL, BxOpcodeInfo64G2Eb },
/* D1 */ { BxAnother | BxGroup2, NULL, BxOpcodeInfo64G2Eq },
/* D2 */ { BxAnother | BxGroup2, NULL, BxOpcodeInfo64G2Eb },
/* D3 */ { BxAnother | BxGroup2, NULL, BxOpcodeInfo64G2Eq },
/* D4 */ { BxImmediate_Ib, &BX_CPU_C::AAM },
/* D5 */ { BxImmediate_Ib, &BX_CPU_C::AAD },
/* D6 */ { 0, &BX_CPU_C::SALC },
/* D4 */ { 0, &BX_CPU_C::BxError },
/* D5 */ { 0, &BX_CPU_C::BxError },
/* D6 */ { 0, &BX_CPU_C::BxError },
/* D7 */ { 0, &BX_CPU_C::XLAT },
/* D8 */ { BxAnother, &BX_CPU_C::ESC0 },
/* D9 */ { BxAnother, &BX_CPU_C::ESC1 },
@ -1727,7 +1729,7 @@ static BxOpcodeInfo_t BxOpcodeInfo64[512*3] = {
/* E7 */ { BxImmediate_Ib, &BX_CPU_C::OUT_IbeAX },
/* E8 */ { BxImmediate_BrOff32, &BX_CPU_C::CALL_Aq },
/* E9 */ { BxImmediate_BrOff32, &BX_CPU_C::JMP_Jq },
/* EA */ { BxImmediate_IvIw, &BX_CPU_C::JMP_Ap },
/* EA */ { 0, &BX_CPU_C::BxError },
/* EB */ { BxImmediate_BrOff8, &BX_CPU_C::JMP_Jq },
/* EC */ { 0, &BX_CPU_C::IN_ALDX },
/* ED */ { 0, &BX_CPU_C::IN_eAXDX },