diff --git a/bochs/cpu/cpu.h b/bochs/cpu/cpu.h index ab4c120db..db91b8975 100644 --- a/bochs/cpu/cpu.h +++ b/bochs/cpu/cpu.h @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////// -// $Id: cpu.h,v 1.428 2008-02-15 22:05:40 sshwarts Exp $ +// $Id: cpu.h,v 1.429 2008-02-29 03:02:02 sshwarts Exp $ ///////////////////////////////////////////////////////////////////////// // // Copyright (C) 2001 MandrakeSoft S.A. @@ -183,9 +183,14 @@ #define BX_READ_8BIT_REGx(index,ext) BX_READ_8BIT_REG(index) #endif +#define BX_READ_8BIT_REGH(index) (BX_CPU_THIS_PTR gen_reg[index].word.byte.rh) #define BX_READ_16BIT_REG(index) (BX_CPU_THIS_PTR gen_reg[index].word.rx) #define BX_READ_32BIT_REG(index) (BX_CPU_THIS_PTR gen_reg[index].dword.erx) +#define BX_WRITE_8BIT_REGH(index, val) {\ + BX_CPU_THIS_PTR gen_reg[index].word.byte.rh = val; \ +} + #define BX_WRITE_16BIT_REG(index, val) {\ BX_CPU_THIS_PTR gen_reg[index].word.rx = val; \ } @@ -3575,13 +3580,12 @@ IMPLEMENT_EFLAG_ACCESSOR (TF, 8) #define BxPrefixSSE 0x0020 // Group encoding: 010 #define BxFPEscape 0x0030 // Group encoding: 011 #define BxRMGroup 0x0040 // Group encoding: 100 -#define Bx3ByteOpIndex 0x0050 // Group encoding: 101 -#define Bx3ByteOpTable 0x0060 // Group encoding: 110 +#define Bx3ByteOp 0x0050 // Group encoding: 101 + // Group encoding: 110 // Group encoding: 111 #define BxLockable 0x0080 // bit 7 -#define Bx3ByteOpcode 0x0100 // bit 8 -#define BxRepeatable 0x0200 // bit 9 +#define BxRepeatable 0x0100 // bit 8 #if BX_SUPPORT_TRACE_CACHE #define BxTraceEnd 0x1000 // bit 12 diff --git a/bochs/cpu/data_xfer8.cc b/bochs/cpu/data_xfer8.cc index 7a660dd45..e8098b0a6 100644 --- a/bochs/cpu/data_xfer8.cc +++ b/bochs/cpu/data_xfer8.cc @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////// -// $Id: data_xfer8.cc,v 1.37 2008-01-29 17:13:06 sshwarts Exp $ +// $Id: data_xfer8.cc,v 1.38 2008-02-29 03:02:03 sshwarts Exp $ ///////////////////////////////////////////////////////////////////////// // // Copyright (C) 2001 MandrakeSoft S.A. @@ -37,7 +37,7 @@ void BX_CPU_C::MOV_RLIb(bxInstruction_c *i) void BX_CPU_C::MOV_RHIb(bxInstruction_c *i) { - BX_CPU_THIS_PTR gen_reg[i->b1() & 0x03].word.byte.rh = i->Ib(); + BX_WRITE_8BIT_REGH(i->b1() & 0x03, i->Ib()); } void BX_CPU_C::MOV_EbGbM(bxInstruction_c *i) diff --git a/bochs/cpu/fetchdecode.cc b/bochs/cpu/fetchdecode.cc index 3a630a7e9..3f69b90b9 100644 --- a/bochs/cpu/fetchdecode.cc +++ b/bochs/cpu/fetchdecode.cc @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////// -// $Id: fetchdecode.cc,v 1.167 2008-02-15 12:23:47 sshwarts Exp $ +// $Id: fetchdecode.cc,v 1.168 2008-02-29 03:02:03 sshwarts Exp $ ///////////////////////////////////////////////////////////////////////// // // Copyright (C) 2001 MandrakeSoft S.A. @@ -533,13 +533,13 @@ static const BxOpcodeInfo_t BxOpcodeInfo32R[512*2] = { /* 0F 36 /wr */ { 0, &BX_CPU_C::BxError }, /* 0F 37 /wr */ { 0, &BX_CPU_C::BxError }, #if (BX_SUPPORT_SSE >= 4) || (BX_SUPPORT_SSE >= 3 && BX_SUPPORT_SSE_EXTENSION > 0) - /* 0F 38 /wr */ { Bx3ByteOpcode | Bx3ByteOpTable, NULL, BxOpcode3ByteTableA4 }, // 3-byte escape + /* 0F 38 /wr */ { Bx3ByteOp, NULL, BxOpcode3ByteTable0f38 }, // 3-byte escape #else /* 0F 38 /wr */ { 0, &BX_CPU_C::BxError }, #endif /* 0F 39 /wr */ { 0, &BX_CPU_C::BxError }, #if (BX_SUPPORT_SSE >= 4) || (BX_SUPPORT_SSE >= 3 && BX_SUPPORT_SSE_EXTENSION > 0) - /* 0F 3A /wr */ { Bx3ByteOpcode | Bx3ByteOpTable, NULL, BxOpcode3ByteTableA5 }, // 3-byte escape + /* 0F 3A /wr */ { Bx3ByteOp, NULL, BxOpcode3ByteTable0f3a }, // 3-byte escape #else /* 0F 3A /wr */ { 0, &BX_CPU_C::BxError }, #endif @@ -1096,13 +1096,13 @@ static const BxOpcodeInfo_t BxOpcodeInfo32R[512*2] = { /* 0F 36 /dr */ { 0, &BX_CPU_C::BxError }, /* 0F 37 /dr */ { 0, &BX_CPU_C::BxError }, #if (BX_SUPPORT_SSE >= 4) || (BX_SUPPORT_SSE >= 3 && BX_SUPPORT_SSE_EXTENSION > 0) - /* 0F 38 /dr */ { Bx3ByteOpcode | Bx3ByteOpTable, NULL, BxOpcode3ByteTableA4 }, // 3-byte escape + /* 0F 38 /dr */ { Bx3ByteOp, NULL, BxOpcode3ByteTable0f38 }, // 3-byte escape #else /* 0F 38 /dr */ { 0, &BX_CPU_C::BxError }, #endif /* 0F 39 /dr */ { 0, &BX_CPU_C::BxError }, #if (BX_SUPPORT_SSE >= 4) || (BX_SUPPORT_SSE >= 3 && BX_SUPPORT_SSE_EXTENSION > 0) - /* 0F 3A /dr */ { Bx3ByteOpcode | Bx3ByteOpTable, NULL, BxOpcode3ByteTableA5 }, // 3-byte escape + /* 0F 3A /dr */ { Bx3ByteOp, NULL, BxOpcode3ByteTable0f3a }, // 3-byte escape #else /* 0F 3A /dr */ { 0, &BX_CPU_C::BxError }, #endif @@ -1666,13 +1666,13 @@ static const BxOpcodeInfo_t BxOpcodeInfo32M[512*2] = { /* 0F 36 /wm */ { 0, &BX_CPU_C::BxError }, /* 0F 37 /wm */ { 0, &BX_CPU_C::BxError }, #if (BX_SUPPORT_SSE >= 4) || (BX_SUPPORT_SSE >= 3 && BX_SUPPORT_SSE_EXTENSION > 0) - /* 0F 38 /wm */ { Bx3ByteOpcode | Bx3ByteOpTable, NULL, BxOpcode3ByteTableA4 }, // 3-byte escape + /* 0F 38 /wm */ { Bx3ByteOp, NULL, BxOpcode3ByteTable0f38 }, // 3-byte escape #else /* 0F 38 /wm */ { 0, &BX_CPU_C::BxError }, #endif /* 0F 39 /wm */ { 0, &BX_CPU_C::BxError }, #if (BX_SUPPORT_SSE >= 4) || (BX_SUPPORT_SSE >= 3 && BX_SUPPORT_SSE_EXTENSION > 0) - /* 0F 3A /wm */ { Bx3ByteOpcode | Bx3ByteOpTable, NULL, BxOpcode3ByteTableA5 }, // 3-byte escape + /* 0F 3A /wm */ { Bx3ByteOp, NULL, BxOpcode3ByteTable0f3a }, // 3-byte escape #else /* 0F 3A /wm */ { 0, &BX_CPU_C::BxError }, #endif @@ -2229,13 +2229,13 @@ static const BxOpcodeInfo_t BxOpcodeInfo32M[512*2] = { /* 0F 36 /dm */ { 0, &BX_CPU_C::BxError }, /* 0F 37 /dm */ { 0, &BX_CPU_C::BxError }, #if (BX_SUPPORT_SSE >= 4) || (BX_SUPPORT_SSE >= 3 && BX_SUPPORT_SSE_EXTENSION > 0) - /* 0F 38 /dm */ { Bx3ByteOpcode | Bx3ByteOpTable, NULL, BxOpcode3ByteTableA4 }, // 3-byte escape + /* 0F 38 /dm */ { Bx3ByteOp, NULL, BxOpcode3ByteTable0f38 }, // 3-byte escape #else /* 0F 38 /dm */ { 0, &BX_CPU_C::BxError }, #endif /* 0F 39 /dm */ { 0, &BX_CPU_C::BxError }, #if (BX_SUPPORT_SSE >= 4) || (BX_SUPPORT_SSE >= 3 && BX_SUPPORT_SSE_EXTENSION > 0) - /* 0F 3A /dm */ { Bx3ByteOpcode | Bx3ByteOpTable, NULL, BxOpcode3ByteTableA5 }, // 3-byte escape + /* 0F 3A /dm */ { Bx3ByteOp, NULL, BxOpcode3ByteTable0f3a }, // 3-byte escape #else /* 0F 3A /dm */ { 0, &BX_CPU_C::BxError }, #endif @@ -2569,7 +2569,7 @@ fetch_b1: #if (BX_SUPPORT_SSE >= 4) || (BX_SUPPORT_SSE >= 3 && BX_SUPPORT_SSE_EXTENSION > 0) unsigned b3 = 0; // handle 3-byte escape - if (attr & Bx3ByteOpcode) { + if (attr & Bx3ByteOp) { if (ilen < remain) { ilen++; b3 = *iptr++; @@ -2746,11 +2746,8 @@ modrm_done: OpcodeInfoPtr = &(OpcodeInfoPtr->AnotherArray[rm]); break; #if (BX_SUPPORT_SSE >= 4) || (BX_SUPPORT_SSE >= 3 && BX_SUPPORT_SSE_EXTENSION > 0) - case Bx3ByteOpTable: - OpcodeInfoPtr = &(OpcodeInfoPtr->AnotherArray[b3 >> 4]); - break; - case Bx3ByteOpIndex: - OpcodeInfoPtr = &(OpcodeInfoPtr->AnotherArray[b3 & 15]); + case Bx3ByteOp: + OpcodeInfoPtr = &(OpcodeInfoPtr->AnotherArray[b3]); break; #endif case BxPrefixSSE: diff --git a/bochs/cpu/fetchdecode.h b/bochs/cpu/fetchdecode.h index 2e49c91ab..16256670e 100755 --- a/bochs/cpu/fetchdecode.h +++ b/bochs/cpu/fetchdecode.h @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////// -// $Id: fetchdecode.h,v 1.53 2008-02-12 22:41:39 sshwarts Exp $ +// $Id: fetchdecode.h,v 1.54 2008-02-29 03:02:03 sshwarts Exp $ ///////////////////////////////////////////////////////////////////////// // // Copyright (c) 2005 Stanislav Shwartsman @@ -2370,7 +2370,7 @@ static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3a63[4] = { /* ************************************************************************ */ /* 3-byte opcode table (Table A-4, 0F 38) */ -static const BxOpcodeInfo_t BxOpcode3ByteOp0f380x[16] = { +static const BxOpcodeInfo_t BxOpcode3ByteTable0f38[256] = { /* 00 */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3800 }, /* 01 */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3801 }, /* 02 */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3802 }, @@ -2386,127 +2386,253 @@ static const BxOpcodeInfo_t BxOpcode3ByteOp0f380x[16] = { /* 0C */ { 0, &BX_CPU_C::BxError }, /* 0D */ { 0, &BX_CPU_C::BxError }, /* 0E */ { 0, &BX_CPU_C::BxError }, - /* 0F */ { 0, &BX_CPU_C::BxError } -}; - -static const BxOpcodeInfo_t BxOpcode3ByteOp0f381x[16] = { - /* 00 */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3810 }, - /* 01 */ { 0, &BX_CPU_C::BxError }, - /* 02 */ { 0, &BX_CPU_C::BxError }, - /* 03 */ { 0, &BX_CPU_C::BxError }, - /* 04 */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3814 }, - /* 05 */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3815 }, - /* 06 */ { 0, &BX_CPU_C::BxError }, - /* 07 */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3817 }, - /* 08 */ { 0, &BX_CPU_C::BxError }, - /* 09 */ { 0, &BX_CPU_C::BxError }, - /* 0A */ { 0, &BX_CPU_C::BxError }, - /* 0B */ { 0, &BX_CPU_C::BxError }, - /* 0C */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f381c }, - /* 0D */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f381d }, - /* 0E */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f381e }, - /* 0F */ { 0, &BX_CPU_C::BxError } -}; - -static const BxOpcodeInfo_t BxOpcode3ByteOp0f382x[16] = { - /* 00 */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3820 }, - /* 01 */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3821 }, - /* 02 */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3822 }, - /* 03 */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3823 }, - /* 04 */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3824 }, - /* 05 */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3825 }, - /* 06 */ { 0, &BX_CPU_C::BxError }, - /* 07 */ { 0, &BX_CPU_C::BxError }, - /* 08 */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3828 }, - /* 09 */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3829 }, - /* 0A */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f382a }, - /* 0B */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f382b }, - /* 0C */ { 0, &BX_CPU_C::BxError }, - /* 0D */ { 0, &BX_CPU_C::BxError }, - /* 0E */ { 0, &BX_CPU_C::BxError }, - /* 0F */ { 0, &BX_CPU_C::BxError } -}; - -static const BxOpcodeInfo_t BxOpcode3ByteOp0f383x[16] = { - /* 00 */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3830 }, - /* 01 */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3831 }, - /* 02 */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3832 }, - /* 03 */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3833 }, - /* 04 */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3834 }, - /* 05 */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3835 }, - /* 06 */ { 0, &BX_CPU_C::BxError }, - /* 07 */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3837 }, - /* 08 */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3838 }, - /* 09 */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3839 }, - /* 0A */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f383a }, - /* 0B */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f383b }, - /* 0C */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f383c }, - /* 0D */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f383d }, - /* 0E */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f383e }, - /* 0F */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f383f } -}; - -static const BxOpcodeInfo_t BxOpcode3ByteOp0f384x[16] = { - /* 00 */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3840 }, - /* 01 */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3841 }, - /* 02 */ { 0, &BX_CPU_C::BxError }, - /* 03 */ { 0, &BX_CPU_C::BxError }, - /* 04 */ { 0, &BX_CPU_C::BxError }, - /* 05 */ { 0, &BX_CPU_C::BxError }, - /* 06 */ { 0, &BX_CPU_C::BxError }, - /* 07 */ { 0, &BX_CPU_C::BxError }, - /* 08 */ { 0, &BX_CPU_C::BxError }, - /* 09 */ { 0, &BX_CPU_C::BxError }, - /* 0A */ { 0, &BX_CPU_C::BxError }, - /* 0B */ { 0, &BX_CPU_C::BxError }, - /* 0C */ { 0, &BX_CPU_C::BxError }, - /* 0D */ { 0, &BX_CPU_C::BxError }, - /* 0E */ { 0, &BX_CPU_C::BxError }, - /* 0F */ { 0, &BX_CPU_C::BxError } -}; - -static const BxOpcodeInfo_t BxOpcode3ByteOp0f38fx[16] = { - /* 00 */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f38f0 }, - /* 01 */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f38f1 }, - /* 02 */ { 0, &BX_CPU_C::BxError }, - /* 03 */ { 0, &BX_CPU_C::BxError }, - /* 04 */ { 0, &BX_CPU_C::BxError }, - /* 05 */ { 0, &BX_CPU_C::BxError }, - /* 06 */ { 0, &BX_CPU_C::BxError }, - /* 07 */ { 0, &BX_CPU_C::BxError }, - /* 08 */ { 0, &BX_CPU_C::BxError }, - /* 09 */ { 0, &BX_CPU_C::BxError }, - /* 0A */ { 0, &BX_CPU_C::BxError }, - /* 0B */ { 0, &BX_CPU_C::BxError }, - /* 0C */ { 0, &BX_CPU_C::BxError }, - /* 0D */ { 0, &BX_CPU_C::BxError }, - /* 0E */ { 0, &BX_CPU_C::BxError }, - /* 0F */ { 0, &BX_CPU_C::BxError } -}; - -static const BxOpcodeInfo_t BxOpcode3ByteTableA4[16] = { - /* 00 */ { Bx3ByteOpIndex, NULL, BxOpcode3ByteOp0f380x }, - /* 01 */ { Bx3ByteOpIndex, NULL, BxOpcode3ByteOp0f381x }, - /* 02 */ { Bx3ByteOpIndex, NULL, BxOpcode3ByteOp0f382x }, - /* 03 */ { Bx3ByteOpIndex, NULL, BxOpcode3ByteOp0f383x }, - /* 04 */ { Bx3ByteOpIndex, NULL, BxOpcode3ByteOp0f384x }, - /* 05 */ { 0, &BX_CPU_C::BxError }, - /* 06 */ { 0, &BX_CPU_C::BxError }, - /* 07 */ { 0, &BX_CPU_C::BxError }, - /* 08 */ { 0, &BX_CPU_C::BxError }, - /* 09 */ { 0, &BX_CPU_C::BxError }, - /* 0A */ { 0, &BX_CPU_C::BxError }, - /* 0B */ { 0, &BX_CPU_C::BxError }, - /* 0C */ { 0, &BX_CPU_C::BxError }, - /* 0D */ { 0, &BX_CPU_C::BxError }, - /* 0E */ { 0, &BX_CPU_C::BxError }, - /* 0F */ { Bx3ByteOpIndex, NULL, BxOpcode3ByteOp0f38fx } + /* 0F */ { 0, &BX_CPU_C::BxError }, + /* 10 */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3810 }, + /* 11 */ { 0, &BX_CPU_C::BxError }, + /* 12 */ { 0, &BX_CPU_C::BxError }, + /* 13 */ { 0, &BX_CPU_C::BxError }, + /* 14 */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3814 }, + /* 15 */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3815 }, + /* 16 */ { 0, &BX_CPU_C::BxError }, + /* 17 */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3817 }, + /* 18 */ { 0, &BX_CPU_C::BxError }, + /* 19 */ { 0, &BX_CPU_C::BxError }, + /* 1A */ { 0, &BX_CPU_C::BxError }, + /* 1B */ { 0, &BX_CPU_C::BxError }, + /* 1C */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f381c }, + /* 1D */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f381d }, + /* 1E */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f381e }, + /* 1F */ { 0, &BX_CPU_C::BxError }, + /* 20 */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3820 }, + /* 21 */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3821 }, + /* 22 */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3822 }, + /* 23 */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3823 }, + /* 24 */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3824 }, + /* 25 */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3825 }, + /* 26 */ { 0, &BX_CPU_C::BxError }, + /* 27 */ { 0, &BX_CPU_C::BxError }, + /* 28 */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3828 }, + /* 29 */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3829 }, + /* 2A */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f382a }, + /* 2B */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f382b }, + /* 2C */ { 0, &BX_CPU_C::BxError }, + /* 2D */ { 0, &BX_CPU_C::BxError }, + /* 2E */ { 0, &BX_CPU_C::BxError }, + /* 2F */ { 0, &BX_CPU_C::BxError }, + /* 30 */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3830 }, + /* 31 */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3831 }, + /* 32 */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3832 }, + /* 33 */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3833 }, + /* 34 */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3834 }, + /* 35 */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3835 }, + /* 36 */ { 0, &BX_CPU_C::BxError }, + /* 37 */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3837 }, + /* 38 */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3838 }, + /* 39 */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3839 }, + /* 3A */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f383a }, + /* 3B */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f383b }, + /* 3C */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f383c }, + /* 3D */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f383d }, + /* 3E */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f383e }, + /* 3F */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f383f }, + /* 40 */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3840 }, + /* 41 */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3841 }, + /* 42 */ { 0, &BX_CPU_C::BxError }, + /* 43 */ { 0, &BX_CPU_C::BxError }, + /* 44 */ { 0, &BX_CPU_C::BxError }, + /* 45 */ { 0, &BX_CPU_C::BxError }, + /* 46 */ { 0, &BX_CPU_C::BxError }, + /* 47 */ { 0, &BX_CPU_C::BxError }, + /* 48 */ { 0, &BX_CPU_C::BxError }, + /* 49 */ { 0, &BX_CPU_C::BxError }, + /* 4A */ { 0, &BX_CPU_C::BxError }, + /* 4B */ { 0, &BX_CPU_C::BxError }, + /* 4C */ { 0, &BX_CPU_C::BxError }, + /* 4D */ { 0, &BX_CPU_C::BxError }, + /* 4E */ { 0, &BX_CPU_C::BxError }, + /* 4F */ { 0, &BX_CPU_C::BxError }, + /* 50 */ { 0, &BX_CPU_C::BxError }, + /* 51 */ { 0, &BX_CPU_C::BxError }, + /* 52 */ { 0, &BX_CPU_C::BxError }, + /* 53 */ { 0, &BX_CPU_C::BxError }, + /* 54 */ { 0, &BX_CPU_C::BxError }, + /* 55 */ { 0, &BX_CPU_C::BxError }, + /* 56 */ { 0, &BX_CPU_C::BxError }, + /* 57 */ { 0, &BX_CPU_C::BxError }, + /* 58 */ { 0, &BX_CPU_C::BxError }, + /* 59 */ { 0, &BX_CPU_C::BxError }, + /* 5A */ { 0, &BX_CPU_C::BxError }, + /* 5B */ { 0, &BX_CPU_C::BxError }, + /* 5C */ { 0, &BX_CPU_C::BxError }, + /* 5D */ { 0, &BX_CPU_C::BxError }, + /* 5E */ { 0, &BX_CPU_C::BxError }, + /* 5F */ { 0, &BX_CPU_C::BxError }, + /* 60 */ { 0, &BX_CPU_C::BxError }, + /* 61 */ { 0, &BX_CPU_C::BxError }, + /* 62 */ { 0, &BX_CPU_C::BxError }, + /* 63 */ { 0, &BX_CPU_C::BxError }, + /* 64 */ { 0, &BX_CPU_C::BxError }, + /* 65 */ { 0, &BX_CPU_C::BxError }, + /* 66 */ { 0, &BX_CPU_C::BxError }, + /* 67 */ { 0, &BX_CPU_C::BxError }, + /* 68 */ { 0, &BX_CPU_C::BxError }, + /* 69 */ { 0, &BX_CPU_C::BxError }, + /* 6A */ { 0, &BX_CPU_C::BxError }, + /* 6B */ { 0, &BX_CPU_C::BxError }, + /* 6C */ { 0, &BX_CPU_C::BxError }, + /* 6D */ { 0, &BX_CPU_C::BxError }, + /* 6E */ { 0, &BX_CPU_C::BxError }, + /* 6F */ { 0, &BX_CPU_C::BxError }, + /* 70 */ { 0, &BX_CPU_C::BxError }, + /* 71 */ { 0, &BX_CPU_C::BxError }, + /* 72 */ { 0, &BX_CPU_C::BxError }, + /* 73 */ { 0, &BX_CPU_C::BxError }, + /* 74 */ { 0, &BX_CPU_C::BxError }, + /* 75 */ { 0, &BX_CPU_C::BxError }, + /* 76 */ { 0, &BX_CPU_C::BxError }, + /* 77 */ { 0, &BX_CPU_C::BxError }, + /* 78 */ { 0, &BX_CPU_C::BxError }, + /* 79 */ { 0, &BX_CPU_C::BxError }, + /* 7A */ { 0, &BX_CPU_C::BxError }, + /* 7B */ { 0, &BX_CPU_C::BxError }, + /* 7C */ { 0, &BX_CPU_C::BxError }, + /* 7D */ { 0, &BX_CPU_C::BxError }, + /* 7E */ { 0, &BX_CPU_C::BxError }, + /* 7F */ { 0, &BX_CPU_C::BxError }, + /* 80 */ { 0, &BX_CPU_C::BxError }, + /* 81 */ { 0, &BX_CPU_C::BxError }, + /* 82 */ { 0, &BX_CPU_C::BxError }, + /* 83 */ { 0, &BX_CPU_C::BxError }, + /* 84 */ { 0, &BX_CPU_C::BxError }, + /* 85 */ { 0, &BX_CPU_C::BxError }, + /* 86 */ { 0, &BX_CPU_C::BxError }, + /* 87 */ { 0, &BX_CPU_C::BxError }, + /* 88 */ { 0, &BX_CPU_C::BxError }, + /* 89 */ { 0, &BX_CPU_C::BxError }, + /* 8A */ { 0, &BX_CPU_C::BxError }, + /* 8B */ { 0, &BX_CPU_C::BxError }, + /* 8C */ { 0, &BX_CPU_C::BxError }, + /* 8D */ { 0, &BX_CPU_C::BxError }, + /* 8E */ { 0, &BX_CPU_C::BxError }, + /* 8F */ { 0, &BX_CPU_C::BxError }, + /* 90 */ { 0, &BX_CPU_C::BxError }, + /* 91 */ { 0, &BX_CPU_C::BxError }, + /* 92 */ { 0, &BX_CPU_C::BxError }, + /* 93 */ { 0, &BX_CPU_C::BxError }, + /* 94 */ { 0, &BX_CPU_C::BxError }, + /* 95 */ { 0, &BX_CPU_C::BxError }, + /* 96 */ { 0, &BX_CPU_C::BxError }, + /* 97 */ { 0, &BX_CPU_C::BxError }, + /* 98 */ { 0, &BX_CPU_C::BxError }, + /* 99 */ { 0, &BX_CPU_C::BxError }, + /* 9A */ { 0, &BX_CPU_C::BxError }, + /* 9B */ { 0, &BX_CPU_C::BxError }, + /* 9C */ { 0, &BX_CPU_C::BxError }, + /* 9D */ { 0, &BX_CPU_C::BxError }, + /* 9E */ { 0, &BX_CPU_C::BxError }, + /* 9F */ { 0, &BX_CPU_C::BxError }, + /* A0 */ { 0, &BX_CPU_C::BxError }, + /* A1 */ { 0, &BX_CPU_C::BxError }, + /* A2 */ { 0, &BX_CPU_C::BxError }, + /* A3 */ { 0, &BX_CPU_C::BxError }, + /* A4 */ { 0, &BX_CPU_C::BxError }, + /* A5 */ { 0, &BX_CPU_C::BxError }, + /* A6 */ { 0, &BX_CPU_C::BxError }, + /* A7 */ { 0, &BX_CPU_C::BxError }, + /* A8 */ { 0, &BX_CPU_C::BxError }, + /* A9 */ { 0, &BX_CPU_C::BxError }, + /* AA */ { 0, &BX_CPU_C::BxError }, + /* AB */ { 0, &BX_CPU_C::BxError }, + /* AC */ { 0, &BX_CPU_C::BxError }, + /* AD */ { 0, &BX_CPU_C::BxError }, + /* AE */ { 0, &BX_CPU_C::BxError }, + /* AF */ { 0, &BX_CPU_C::BxError }, + /* B0 */ { 0, &BX_CPU_C::BxError }, + /* B1 */ { 0, &BX_CPU_C::BxError }, + /* B2 */ { 0, &BX_CPU_C::BxError }, + /* B3 */ { 0, &BX_CPU_C::BxError }, + /* B4 */ { 0, &BX_CPU_C::BxError }, + /* B5 */ { 0, &BX_CPU_C::BxError }, + /* B6 */ { 0, &BX_CPU_C::BxError }, + /* B7 */ { 0, &BX_CPU_C::BxError }, + /* B8 */ { 0, &BX_CPU_C::BxError }, + /* B9 */ { 0, &BX_CPU_C::BxError }, + /* BA */ { 0, &BX_CPU_C::BxError }, + /* BB */ { 0, &BX_CPU_C::BxError }, + /* BC */ { 0, &BX_CPU_C::BxError }, + /* BD */ { 0, &BX_CPU_C::BxError }, + /* BE */ { 0, &BX_CPU_C::BxError }, + /* BF */ { 0, &BX_CPU_C::BxError }, + /* C0 */ { 0, &BX_CPU_C::BxError }, + /* C1 */ { 0, &BX_CPU_C::BxError }, + /* C2 */ { 0, &BX_CPU_C::BxError }, + /* C3 */ { 0, &BX_CPU_C::BxError }, + /* C4 */ { 0, &BX_CPU_C::BxError }, + /* C5 */ { 0, &BX_CPU_C::BxError }, + /* C6 */ { 0, &BX_CPU_C::BxError }, + /* C7 */ { 0, &BX_CPU_C::BxError }, + /* C8 */ { 0, &BX_CPU_C::BxError }, + /* C9 */ { 0, &BX_CPU_C::BxError }, + /* CA */ { 0, &BX_CPU_C::BxError }, + /* CB */ { 0, &BX_CPU_C::BxError }, + /* CC */ { 0, &BX_CPU_C::BxError }, + /* CD */ { 0, &BX_CPU_C::BxError }, + /* CE */ { 0, &BX_CPU_C::BxError }, + /* CF */ { 0, &BX_CPU_C::BxError }, + /* D0 */ { 0, &BX_CPU_C::BxError }, + /* D1 */ { 0, &BX_CPU_C::BxError }, + /* D2 */ { 0, &BX_CPU_C::BxError }, + /* D3 */ { 0, &BX_CPU_C::BxError }, + /* D4 */ { 0, &BX_CPU_C::BxError }, + /* D5 */ { 0, &BX_CPU_C::BxError }, + /* D6 */ { 0, &BX_CPU_C::BxError }, + /* D7 */ { 0, &BX_CPU_C::BxError }, + /* D8 */ { 0, &BX_CPU_C::BxError }, + /* D9 */ { 0, &BX_CPU_C::BxError }, + /* DA */ { 0, &BX_CPU_C::BxError }, + /* DB */ { 0, &BX_CPU_C::BxError }, + /* DC */ { 0, &BX_CPU_C::BxError }, + /* DD */ { 0, &BX_CPU_C::BxError }, + /* DE */ { 0, &BX_CPU_C::BxError }, + /* DF */ { 0, &BX_CPU_C::BxError }, + /* E0 */ { 0, &BX_CPU_C::BxError }, + /* E1 */ { 0, &BX_CPU_C::BxError }, + /* E2 */ { 0, &BX_CPU_C::BxError }, + /* E3 */ { 0, &BX_CPU_C::BxError }, + /* E4 */ { 0, &BX_CPU_C::BxError }, + /* E5 */ { 0, &BX_CPU_C::BxError }, + /* E6 */ { 0, &BX_CPU_C::BxError }, + /* E7 */ { 0, &BX_CPU_C::BxError }, + /* E8 */ { 0, &BX_CPU_C::BxError }, + /* E9 */ { 0, &BX_CPU_C::BxError }, + /* EA */ { 0, &BX_CPU_C::BxError }, + /* EB */ { 0, &BX_CPU_C::BxError }, + /* EC */ { 0, &BX_CPU_C::BxError }, + /* ED */ { 0, &BX_CPU_C::BxError }, + /* EE */ { 0, &BX_CPU_C::BxError }, + /* EF */ { 0, &BX_CPU_C::BxError }, + /* F0 */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f38f0 }, + /* F1 */ { BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f38f1 }, + /* F2 */ { 0, &BX_CPU_C::BxError }, + /* F3 */ { 0, &BX_CPU_C::BxError }, + /* F4 */ { 0, &BX_CPU_C::BxError }, + /* F5 */ { 0, &BX_CPU_C::BxError }, + /* F6 */ { 0, &BX_CPU_C::BxError }, + /* F7 */ { 0, &BX_CPU_C::BxError }, + /* F8 */ { 0, &BX_CPU_C::BxError }, + /* F9 */ { 0, &BX_CPU_C::BxError }, + /* FA */ { 0, &BX_CPU_C::BxError }, + /* FB */ { 0, &BX_CPU_C::BxError }, + /* FC */ { 0, &BX_CPU_C::BxError }, + /* FD */ { 0, &BX_CPU_C::BxError }, + /* FE */ { 0, &BX_CPU_C::BxError }, + /* FF */ { 0, &BX_CPU_C::BxError } }; /* ************************************************************************ */ /* 3-byte opcode table (Table A-5, 0F 3A) */ -static const BxOpcodeInfo_t BxOpcode3ByteOp0f3a0x[16] = { +static const BxOpcodeInfo_t BxOpcode3ByteTable0f3a[256] = { /* 00 */ { 0, &BX_CPU_C::BxError }, /* 01 */ { 0, &BX_CPU_C::BxError }, /* 02 */ { 0, &BX_CPU_C::BxError }, @@ -2522,102 +2648,247 @@ static const BxOpcodeInfo_t BxOpcode3ByteOp0f3a0x[16] = { /* 0C */ { BxImmediate_Ib | BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3a0c }, /* 0D */ { BxImmediate_Ib | BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3a0d }, /* 0E */ { BxImmediate_Ib | BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3a0e }, - /* 0F */ { BxImmediate_Ib | BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3a0f } -}; - -static const BxOpcodeInfo_t BxOpcode3ByteOp0f3a1x[16] = { - /* 00 */ { 0, &BX_CPU_C::BxError }, - /* 01 */ { 0, &BX_CPU_C::BxError }, - /* 02 */ { 0, &BX_CPU_C::BxError }, - /* 03 */ { 0, &BX_CPU_C::BxError }, - /* 04 */ { BxImmediate_Ib | BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3a14 }, - /* 05 */ { BxImmediate_Ib | BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3a15 }, - /* 06 */ { BxImmediate_Ib | BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3a16 }, - /* 07 */ { BxImmediate_Ib | BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3a17 }, - /* 08 */ { 0, &BX_CPU_C::BxError }, - /* 09 */ { 0, &BX_CPU_C::BxError }, - /* 0A */ { 0, &BX_CPU_C::BxError }, - /* 0B */ { 0, &BX_CPU_C::BxError }, - /* 0C */ { 0, &BX_CPU_C::BxError }, - /* 0D */ { 0, &BX_CPU_C::BxError }, - /* 0E */ { 0, &BX_CPU_C::BxError }, - /* 0F */ { 0, &BX_CPU_C::BxError } -}; - -static const BxOpcodeInfo_t BxOpcode3ByteOp0f3a2x[16] = { - /* 00 */ { BxImmediate_Ib | BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3a20 }, - /* 01 */ { BxImmediate_Ib | BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3a21 }, - /* 02 */ { BxImmediate_Ib | BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3a22 }, - /* 03 */ { 0, &BX_CPU_C::BxError }, - /* 04 */ { 0, &BX_CPU_C::BxError }, - /* 05 */ { 0, &BX_CPU_C::BxError }, - /* 06 */ { 0, &BX_CPU_C::BxError }, - /* 07 */ { 0, &BX_CPU_C::BxError }, - /* 08 */ { 0, &BX_CPU_C::BxError }, - /* 09 */ { 0, &BX_CPU_C::BxError }, - /* 0A */ { 0, &BX_CPU_C::BxError }, - /* 0B */ { 0, &BX_CPU_C::BxError }, - /* 0C */ { 0, &BX_CPU_C::BxError }, - /* 0D */ { 0, &BX_CPU_C::BxError }, - /* 0E */ { 0, &BX_CPU_C::BxError }, - /* 0F */ { 0, &BX_CPU_C::BxError } -}; - -static const BxOpcodeInfo_t BxOpcode3ByteOp0f3a4x[16] = { - /* 00 */ { BxImmediate_Ib | BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3a40 }, - /* 01 */ { BxImmediate_Ib | BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3a41 }, - /* 02 */ { BxImmediate_Ib | BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3a42 }, - /* 03 */ { 0, &BX_CPU_C::BxError }, - /* 04 */ { 0, &BX_CPU_C::BxError }, - /* 05 */ { 0, &BX_CPU_C::BxError }, - /* 06 */ { 0, &BX_CPU_C::BxError }, - /* 07 */ { 0, &BX_CPU_C::BxError }, - /* 08 */ { 0, &BX_CPU_C::BxError }, - /* 09 */ { 0, &BX_CPU_C::BxError }, - /* 0A */ { 0, &BX_CPU_C::BxError }, - /* 0B */ { 0, &BX_CPU_C::BxError }, - /* 0C */ { 0, &BX_CPU_C::BxError }, - /* 0D */ { 0, &BX_CPU_C::BxError }, - /* 0E */ { 0, &BX_CPU_C::BxError }, - /* 0F */ { 0, &BX_CPU_C::BxError } -}; - -static const BxOpcodeInfo_t BxOpcode3ByteOp0f3a6x[16] = { - /* 00 */ { BxImmediate_Ib | BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3a60 }, - /* 01 */ { BxImmediate_Ib | BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3a61 }, - /* 02 */ { BxImmediate_Ib | BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3a62 }, - /* 03 */ { BxImmediate_Ib | BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3a63 }, - /* 04 */ { 0, &BX_CPU_C::BxError }, - /* 05 */ { 0, &BX_CPU_C::BxError }, - /* 06 */ { 0, &BX_CPU_C::BxError }, - /* 07 */ { 0, &BX_CPU_C::BxError }, - /* 08 */ { 0, &BX_CPU_C::BxError }, - /* 09 */ { 0, &BX_CPU_C::BxError }, - /* 0A */ { 0, &BX_CPU_C::BxError }, - /* 0B */ { 0, &BX_CPU_C::BxError }, - /* 0C */ { 0, &BX_CPU_C::BxError }, - /* 0D */ { 0, &BX_CPU_C::BxError }, - /* 0E */ { 0, &BX_CPU_C::BxError }, - /* 0F */ { 0, &BX_CPU_C::BxError } -}; - -static const BxOpcodeInfo_t BxOpcode3ByteTableA5[16] = { - /* 00 */ { Bx3ByteOpIndex, NULL, BxOpcode3ByteOp0f3a0x }, - /* 01 */ { Bx3ByteOpIndex, NULL, BxOpcode3ByteOp0f3a1x }, - /* 02 */ { Bx3ByteOpIndex, NULL, BxOpcode3ByteOp0f3a2x }, - /* 03 */ { 0, &BX_CPU_C::BxError }, - /* 04 */ { Bx3ByteOpIndex, NULL, BxOpcode3ByteOp0f3a4x }, - /* 05 */ { 0, &BX_CPU_C::BxError }, - /* 06 */ { Bx3ByteOpIndex, NULL, BxOpcode3ByteOp0f3a6x }, - /* 07 */ { 0, &BX_CPU_C::BxError }, - /* 08 */ { 0, &BX_CPU_C::BxError }, - /* 09 */ { 0, &BX_CPU_C::BxError }, - /* 0A */ { 0, &BX_CPU_C::BxError }, - /* 0B */ { 0, &BX_CPU_C::BxError }, - /* 0C */ { 0, &BX_CPU_C::BxError }, - /* 0D */ { 0, &BX_CPU_C::BxError }, - /* 0E */ { 0, &BX_CPU_C::BxError }, - /* 0F */ { 0, &BX_CPU_C::BxError } + /* 0F */ { BxImmediate_Ib | BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3a0f }, + /* 10 */ { 0, &BX_CPU_C::BxError }, + /* 11 */ { 0, &BX_CPU_C::BxError }, + /* 12 */ { 0, &BX_CPU_C::BxError }, + /* 13 */ { 0, &BX_CPU_C::BxError }, + /* 14 */ { BxImmediate_Ib | BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3a14 }, + /* 15 */ { BxImmediate_Ib | BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3a15 }, + /* 16 */ { BxImmediate_Ib | BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3a16 }, + /* 17 */ { BxImmediate_Ib | BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3a17 }, + /* 18 */ { 0, &BX_CPU_C::BxError }, + /* 19 */ { 0, &BX_CPU_C::BxError }, + /* 1A */ { 0, &BX_CPU_C::BxError }, + /* 1B */ { 0, &BX_CPU_C::BxError }, + /* 1C */ { 0, &BX_CPU_C::BxError }, + /* 1D */ { 0, &BX_CPU_C::BxError }, + /* 1E */ { 0, &BX_CPU_C::BxError }, + /* 1F */ { 0, &BX_CPU_C::BxError }, + /* 20 */ { BxImmediate_Ib | BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3a20 }, + /* 21 */ { BxImmediate_Ib | BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3a21 }, + /* 22 */ { BxImmediate_Ib | BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3a22 }, + /* 23 */ { 0, &BX_CPU_C::BxError }, + /* 24 */ { 0, &BX_CPU_C::BxError }, + /* 25 */ { 0, &BX_CPU_C::BxError }, + /* 26 */ { 0, &BX_CPU_C::BxError }, + /* 27 */ { 0, &BX_CPU_C::BxError }, + /* 28 */ { 0, &BX_CPU_C::BxError }, + /* 29 */ { 0, &BX_CPU_C::BxError }, + /* 2A */ { 0, &BX_CPU_C::BxError }, + /* 2B */ { 0, &BX_CPU_C::BxError }, + /* 2C */ { 0, &BX_CPU_C::BxError }, + /* 2D */ { 0, &BX_CPU_C::BxError }, + /* 2E */ { 0, &BX_CPU_C::BxError }, + /* 2F */ { 0, &BX_CPU_C::BxError }, + /* 30 */ { 0, &BX_CPU_C::BxError }, + /* 31 */ { 0, &BX_CPU_C::BxError }, + /* 32 */ { 0, &BX_CPU_C::BxError }, + /* 33 */ { 0, &BX_CPU_C::BxError }, + /* 34 */ { 0, &BX_CPU_C::BxError }, + /* 35 */ { 0, &BX_CPU_C::BxError }, + /* 36 */ { 0, &BX_CPU_C::BxError }, + /* 37 */ { 0, &BX_CPU_C::BxError }, + /* 38 */ { 0, &BX_CPU_C::BxError }, + /* 39 */ { 0, &BX_CPU_C::BxError }, + /* 3A */ { 0, &BX_CPU_C::BxError }, + /* 3B */ { 0, &BX_CPU_C::BxError }, + /* 3C */ { 0, &BX_CPU_C::BxError }, + /* 3D */ { 0, &BX_CPU_C::BxError }, + /* 3E */ { 0, &BX_CPU_C::BxError }, + /* 3F */ { 0, &BX_CPU_C::BxError }, + /* 40 */ { BxImmediate_Ib | BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3a40 }, + /* 41 */ { BxImmediate_Ib | BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3a41 }, + /* 42 */ { BxImmediate_Ib | BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3a42 }, + /* 43 */ { 0, &BX_CPU_C::BxError }, + /* 44 */ { 0, &BX_CPU_C::BxError }, + /* 45 */ { 0, &BX_CPU_C::BxError }, + /* 46 */ { 0, &BX_CPU_C::BxError }, + /* 47 */ { 0, &BX_CPU_C::BxError }, + /* 48 */ { 0, &BX_CPU_C::BxError }, + /* 49 */ { 0, &BX_CPU_C::BxError }, + /* 4A */ { 0, &BX_CPU_C::BxError }, + /* 4B */ { 0, &BX_CPU_C::BxError }, + /* 4C */ { 0, &BX_CPU_C::BxError }, + /* 4D */ { 0, &BX_CPU_C::BxError }, + /* 4E */ { 0, &BX_CPU_C::BxError }, + /* 4F */ { 0, &BX_CPU_C::BxError }, + /* 50 */ { 0, &BX_CPU_C::BxError }, + /* 51 */ { 0, &BX_CPU_C::BxError }, + /* 52 */ { 0, &BX_CPU_C::BxError }, + /* 53 */ { 0, &BX_CPU_C::BxError }, + /* 54 */ { 0, &BX_CPU_C::BxError }, + /* 55 */ { 0, &BX_CPU_C::BxError }, + /* 56 */ { 0, &BX_CPU_C::BxError }, + /* 57 */ { 0, &BX_CPU_C::BxError }, + /* 58 */ { 0, &BX_CPU_C::BxError }, + /* 59 */ { 0, &BX_CPU_C::BxError }, + /* 5A */ { 0, &BX_CPU_C::BxError }, + /* 5B */ { 0, &BX_CPU_C::BxError }, + /* 5C */ { 0, &BX_CPU_C::BxError }, + /* 5D */ { 0, &BX_CPU_C::BxError }, + /* 5E */ { 0, &BX_CPU_C::BxError }, + /* 5F */ { 0, &BX_CPU_C::BxError }, + /* 60 */ { BxImmediate_Ib | BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3a60 }, + /* 61 */ { BxImmediate_Ib | BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3a61 }, + /* 62 */ { BxImmediate_Ib | BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3a62 }, + /* 63 */ { BxImmediate_Ib | BxPrefixSSE, NULL, BxOpcodeGroupSSE_0f3a63 }, + /* 64 */ { 0, &BX_CPU_C::BxError }, + /* 65 */ { 0, &BX_CPU_C::BxError }, + /* 66 */ { 0, &BX_CPU_C::BxError }, + /* 67 */ { 0, &BX_CPU_C::BxError }, + /* 68 */ { 0, &BX_CPU_C::BxError }, + /* 69 */ { 0, &BX_CPU_C::BxError }, + /* 6A */ { 0, &BX_CPU_C::BxError }, + /* 6B */ { 0, &BX_CPU_C::BxError }, + /* 6C */ { 0, &BX_CPU_C::BxError }, + /* 6D */ { 0, &BX_CPU_C::BxError }, + /* 6E */ { 0, &BX_CPU_C::BxError }, + /* 6F */ { 0, &BX_CPU_C::BxError }, + /* 70 */ { 0, &BX_CPU_C::BxError }, + /* 71 */ { 0, &BX_CPU_C::BxError }, + /* 72 */ { 0, &BX_CPU_C::BxError }, + /* 73 */ { 0, &BX_CPU_C::BxError }, + /* 74 */ { 0, &BX_CPU_C::BxError }, + /* 75 */ { 0, &BX_CPU_C::BxError }, + /* 76 */ { 0, &BX_CPU_C::BxError }, + /* 77 */ { 0, &BX_CPU_C::BxError }, + /* 78 */ { 0, &BX_CPU_C::BxError }, + /* 79 */ { 0, &BX_CPU_C::BxError }, + /* 7A */ { 0, &BX_CPU_C::BxError }, + /* 7B */ { 0, &BX_CPU_C::BxError }, + /* 7C */ { 0, &BX_CPU_C::BxError }, + /* 7D */ { 0, &BX_CPU_C::BxError }, + /* 7E */ { 0, &BX_CPU_C::BxError }, + /* 7F */ { 0, &BX_CPU_C::BxError }, + /* 80 */ { 0, &BX_CPU_C::BxError }, + /* 81 */ { 0, &BX_CPU_C::BxError }, + /* 82 */ { 0, &BX_CPU_C::BxError }, + /* 83 */ { 0, &BX_CPU_C::BxError }, + /* 84 */ { 0, &BX_CPU_C::BxError }, + /* 85 */ { 0, &BX_CPU_C::BxError }, + /* 86 */ { 0, &BX_CPU_C::BxError }, + /* 87 */ { 0, &BX_CPU_C::BxError }, + /* 88 */ { 0, &BX_CPU_C::BxError }, + /* 89 */ { 0, &BX_CPU_C::BxError }, + /* 8A */ { 0, &BX_CPU_C::BxError }, + /* 8B */ { 0, &BX_CPU_C::BxError }, + /* 8C */ { 0, &BX_CPU_C::BxError }, + /* 8D */ { 0, &BX_CPU_C::BxError }, + /* 8E */ { 0, &BX_CPU_C::BxError }, + /* 8F */ { 0, &BX_CPU_C::BxError }, + /* 90 */ { 0, &BX_CPU_C::BxError }, + /* 91 */ { 0, &BX_CPU_C::BxError }, + /* 92 */ { 0, &BX_CPU_C::BxError }, + /* 93 */ { 0, &BX_CPU_C::BxError }, + /* 94 */ { 0, &BX_CPU_C::BxError }, + /* 95 */ { 0, &BX_CPU_C::BxError }, + /* 96 */ { 0, &BX_CPU_C::BxError }, + /* 97 */ { 0, &BX_CPU_C::BxError }, + /* 98 */ { 0, &BX_CPU_C::BxError }, + /* 99 */ { 0, &BX_CPU_C::BxError }, + /* 9A */ { 0, &BX_CPU_C::BxError }, + /* 9B */ { 0, &BX_CPU_C::BxError }, + /* 9C */ { 0, &BX_CPU_C::BxError }, + /* 9D */ { 0, &BX_CPU_C::BxError }, + /* 9E */ { 0, &BX_CPU_C::BxError }, + /* 9F */ { 0, &BX_CPU_C::BxError }, + /* A0 */ { 0, &BX_CPU_C::BxError }, + /* A1 */ { 0, &BX_CPU_C::BxError }, + /* A2 */ { 0, &BX_CPU_C::BxError }, + /* A3 */ { 0, &BX_CPU_C::BxError }, + /* A4 */ { 0, &BX_CPU_C::BxError }, + /* A5 */ { 0, &BX_CPU_C::BxError }, + /* A6 */ { 0, &BX_CPU_C::BxError }, + /* A7 */ { 0, &BX_CPU_C::BxError }, + /* A8 */ { 0, &BX_CPU_C::BxError }, + /* A9 */ { 0, &BX_CPU_C::BxError }, + /* AA */ { 0, &BX_CPU_C::BxError }, + /* AB */ { 0, &BX_CPU_C::BxError }, + /* AC */ { 0, &BX_CPU_C::BxError }, + /* AD */ { 0, &BX_CPU_C::BxError }, + /* AE */ { 0, &BX_CPU_C::BxError }, + /* AF */ { 0, &BX_CPU_C::BxError }, + /* B0 */ { 0, &BX_CPU_C::BxError }, + /* B1 */ { 0, &BX_CPU_C::BxError }, + /* B2 */ { 0, &BX_CPU_C::BxError }, + /* B3 */ { 0, &BX_CPU_C::BxError }, + /* B4 */ { 0, &BX_CPU_C::BxError }, + /* B5 */ { 0, &BX_CPU_C::BxError }, + /* B6 */ { 0, &BX_CPU_C::BxError }, + /* B7 */ { 0, &BX_CPU_C::BxError }, + /* B8 */ { 0, &BX_CPU_C::BxError }, + /* B9 */ { 0, &BX_CPU_C::BxError }, + /* BA */ { 0, &BX_CPU_C::BxError }, + /* BB */ { 0, &BX_CPU_C::BxError }, + /* BC */ { 0, &BX_CPU_C::BxError }, + /* BD */ { 0, &BX_CPU_C::BxError }, + /* BE */ { 0, &BX_CPU_C::BxError }, + /* BF */ { 0, &BX_CPU_C::BxError }, + /* C0 */ { 0, &BX_CPU_C::BxError }, + /* C1 */ { 0, &BX_CPU_C::BxError }, + /* C2 */ { 0, &BX_CPU_C::BxError }, + /* C3 */ { 0, &BX_CPU_C::BxError }, + /* C4 */ { 0, &BX_CPU_C::BxError }, + /* C5 */ { 0, &BX_CPU_C::BxError }, + /* C6 */ { 0, &BX_CPU_C::BxError }, + /* C7 */ { 0, &BX_CPU_C::BxError }, + /* C8 */ { 0, &BX_CPU_C::BxError }, + /* C9 */ { 0, &BX_CPU_C::BxError }, + /* CA */ { 0, &BX_CPU_C::BxError }, + /* CB */ { 0, &BX_CPU_C::BxError }, + /* CC */ { 0, &BX_CPU_C::BxError }, + /* CD */ { 0, &BX_CPU_C::BxError }, + /* CE */ { 0, &BX_CPU_C::BxError }, + /* CF */ { 0, &BX_CPU_C::BxError }, + /* D0 */ { 0, &BX_CPU_C::BxError }, + /* D1 */ { 0, &BX_CPU_C::BxError }, + /* D2 */ { 0, &BX_CPU_C::BxError }, + /* D3 */ { 0, &BX_CPU_C::BxError }, + /* D4 */ { 0, &BX_CPU_C::BxError }, + /* D5 */ { 0, &BX_CPU_C::BxError }, + /* D6 */ { 0, &BX_CPU_C::BxError }, + /* D7 */ { 0, &BX_CPU_C::BxError }, + /* D8 */ { 0, &BX_CPU_C::BxError }, + /* D9 */ { 0, &BX_CPU_C::BxError }, + /* DA */ { 0, &BX_CPU_C::BxError }, + /* DB */ { 0, &BX_CPU_C::BxError }, + /* DC */ { 0, &BX_CPU_C::BxError }, + /* DD */ { 0, &BX_CPU_C::BxError }, + /* DE */ { 0, &BX_CPU_C::BxError }, + /* DF */ { 0, &BX_CPU_C::BxError }, + /* E0 */ { 0, &BX_CPU_C::BxError }, + /* E1 */ { 0, &BX_CPU_C::BxError }, + /* E2 */ { 0, &BX_CPU_C::BxError }, + /* E3 */ { 0, &BX_CPU_C::BxError }, + /* E4 */ { 0, &BX_CPU_C::BxError }, + /* E5 */ { 0, &BX_CPU_C::BxError }, + /* E6 */ { 0, &BX_CPU_C::BxError }, + /* E7 */ { 0, &BX_CPU_C::BxError }, + /* E8 */ { 0, &BX_CPU_C::BxError }, + /* E9 */ { 0, &BX_CPU_C::BxError }, + /* EA */ { 0, &BX_CPU_C::BxError }, + /* EB */ { 0, &BX_CPU_C::BxError }, + /* EC */ { 0, &BX_CPU_C::BxError }, + /* ED */ { 0, &BX_CPU_C::BxError }, + /* EE */ { 0, &BX_CPU_C::BxError }, + /* EF */ { 0, &BX_CPU_C::BxError }, + /* F0 */ { 0, &BX_CPU_C::BxError }, + /* F1 */ { 0, &BX_CPU_C::BxError }, + /* F2 */ { 0, &BX_CPU_C::BxError }, + /* F3 */ { 0, &BX_CPU_C::BxError }, + /* F4 */ { 0, &BX_CPU_C::BxError }, + /* F5 */ { 0, &BX_CPU_C::BxError }, + /* F6 */ { 0, &BX_CPU_C::BxError }, + /* F7 */ { 0, &BX_CPU_C::BxError }, + /* F8 */ { 0, &BX_CPU_C::BxError }, + /* F9 */ { 0, &BX_CPU_C::BxError }, + /* FA */ { 0, &BX_CPU_C::BxError }, + /* FB */ { 0, &BX_CPU_C::BxError }, + /* FC */ { 0, &BX_CPU_C::BxError }, + /* FD */ { 0, &BX_CPU_C::BxError }, + /* FE */ { 0, &BX_CPU_C::BxError }, + /* FF */ { 0, &BX_CPU_C::BxError } }; #endif // BX_SUPPORT_SSE >= 4 || (BX_SUPPORT_SSE >= 3 && BX_SUPPORT_SSE_EXTENSION > 0) diff --git a/bochs/cpu/fetchdecode64.cc b/bochs/cpu/fetchdecode64.cc index 0e02ad2ed..e0b804e68 100644 --- a/bochs/cpu/fetchdecode64.cc +++ b/bochs/cpu/fetchdecode64.cc @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////// -// $Id: fetchdecode64.cc,v 1.174 2008-02-15 19:03:53 sshwarts Exp $ +// $Id: fetchdecode64.cc,v 1.175 2008-02-29 03:02:03 sshwarts Exp $ ///////////////////////////////////////////////////////////////////////// // // Copyright (C) 2001 MandrakeSoft S.A. @@ -498,13 +498,13 @@ static const BxOpcodeInfo_t BxOpcodeInfo64R[512*3] = { /* 0F 36 /wr */ { 0, &BX_CPU_C::BxError }, /* 0F 37 /wr */ { 0, &BX_CPU_C::BxError }, #if (BX_SUPPORT_SSE >= 4) || (BX_SUPPORT_SSE >= 3 && BX_SUPPORT_SSE_EXTENSION > 0) - /* 0F 38 /wr */ { Bx3ByteOpcode | Bx3ByteOpTable, NULL, BxOpcode3ByteTableA4 }, // 3-byte escape + /* 0F 38 /wr */ { Bx3ByteOp, NULL, BxOpcode3ByteTable0f38 }, // 3-byte escape #else /* 0F 38 /wr */ { 0, &BX_CPU_C::BxError }, #endif /* 0F 39 /wr */ { 0, &BX_CPU_C::BxError }, #if (BX_SUPPORT_SSE >= 4) || (BX_SUPPORT_SSE >= 3 && BX_SUPPORT_SSE_EXTENSION > 0) - /* 0F 3A /wr */ { Bx3ByteOpcode | Bx3ByteOpTable, NULL, BxOpcode3ByteTableA5 }, // 3-byte escape + /* 0F 3A /wr */ { Bx3ByteOp, NULL, BxOpcode3ByteTable0f3a }, // 3-byte escape #else /* 0F 3A /wr */ { 0, &BX_CPU_C::BxError }, #endif @@ -1026,13 +1026,13 @@ static const BxOpcodeInfo_t BxOpcodeInfo64R[512*3] = { /* 0F 36 /dr */ { 0, &BX_CPU_C::BxError }, /* 0F 37 /dr */ { 0, &BX_CPU_C::BxError }, #if (BX_SUPPORT_SSE >= 4) || (BX_SUPPORT_SSE >= 3 && BX_SUPPORT_SSE_EXTENSION > 0) - /* 0F 38 /dr */ { Bx3ByteOpcode | Bx3ByteOpTable, NULL, BxOpcode3ByteTableA4 }, // 3-byte escape + /* 0F 38 /dr */ { Bx3ByteOp, NULL, BxOpcode3ByteTable0f38 }, // 3-byte escape #else /* 0F 38 /dr */ { 0, &BX_CPU_C::BxError }, #endif /* 0F 39 /dr */ { 0, &BX_CPU_C::BxError }, #if (BX_SUPPORT_SSE >= 4) || (BX_SUPPORT_SSE >= 3 && BX_SUPPORT_SSE_EXTENSION > 0) - /* 0F 3A /dr */ { Bx3ByteOpcode | Bx3ByteOpTable, NULL, BxOpcode3ByteTableA5 }, // 3-byte escape + /* 0F 3A /dr */ { Bx3ByteOp, NULL, BxOpcode3ByteTable0f3a }, // 3-byte escape #else /* 0F 3A /dr */ { 0, &BX_CPU_C::BxError }, #endif @@ -1554,13 +1554,13 @@ static const BxOpcodeInfo_t BxOpcodeInfo64R[512*3] = { /* 0F 36 /qr */ { 0, &BX_CPU_C::BxError }, /* 0F 37 /qr */ { 0, &BX_CPU_C::BxError }, #if (BX_SUPPORT_SSE >= 4) || (BX_SUPPORT_SSE >= 3 && BX_SUPPORT_SSE_EXTENSION > 0) - /* 0F 38 /qr */ { Bx3ByteOpcode | Bx3ByteOpTable, NULL, BxOpcode3ByteTableA4 }, // 3-byte escape + /* 0F 38 /qr */ { Bx3ByteOp, NULL, BxOpcode3ByteTable0f38 }, // 3-byte escape #else /* 0F 38 /qr */ { 0, &BX_CPU_C::BxError }, #endif /* 0F 39 /qr */ { 0, &BX_CPU_C::BxError }, #if (BX_SUPPORT_SSE >= 4) || (BX_SUPPORT_SSE >= 3 && BX_SUPPORT_SSE_EXTENSION > 0) - /* 0F 3A /qr */ { Bx3ByteOpcode | Bx3ByteOpTable, NULL, BxOpcode3ByteTableA5 }, // 3-byte escape + /* 0F 3A /qr */ { Bx3ByteOp, NULL, BxOpcode3ByteTable0f3a }, // 3-byte escape #else /* 0F 3A /qr */ { 0, &BX_CPU_C::BxError }, #endif @@ -2088,13 +2088,13 @@ static const BxOpcodeInfo_t BxOpcodeInfo64M[512*3] = { /* 0F 36 /wm */ { 0, &BX_CPU_C::BxError }, /* 0F 37 /wm */ { 0, &BX_CPU_C::BxError }, #if (BX_SUPPORT_SSE >= 4) || (BX_SUPPORT_SSE >= 3 && BX_SUPPORT_SSE_EXTENSION > 0) - /* 0F 38 /wm */ { Bx3ByteOpcode | Bx3ByteOpTable, NULL, BxOpcode3ByteTableA4 }, // 3-byte escape + /* 0F 38 /wm */ { Bx3ByteOp, NULL, BxOpcode3ByteTable0f38 }, // 3-byte escape #else /* 0F 38 /wm */ { 0, &BX_CPU_C::BxError }, #endif /* 0F 39 /wm */ { 0, &BX_CPU_C::BxError }, #if (BX_SUPPORT_SSE >= 4) || (BX_SUPPORT_SSE >= 3 && BX_SUPPORT_SSE_EXTENSION > 0) - /* 0F 3A /wm */ { Bx3ByteOpcode | Bx3ByteOpTable, NULL, BxOpcode3ByteTableA5 }, // 3-byte escape + /* 0F 3A /wm */ { Bx3ByteOp, NULL, BxOpcode3ByteTable0f3a }, // 3-byte escape #else /* 0F 3A /wm */ { 0, &BX_CPU_C::BxError }, #endif @@ -2616,13 +2616,13 @@ static const BxOpcodeInfo_t BxOpcodeInfo64M[512*3] = { /* 0F 36 /dm */ { 0, &BX_CPU_C::BxError }, /* 0F 37 /dm */ { 0, &BX_CPU_C::BxError }, #if (BX_SUPPORT_SSE >= 4) || (BX_SUPPORT_SSE >= 3 && BX_SUPPORT_SSE_EXTENSION > 0) - /* 0F 38 /dm */ { Bx3ByteOpcode | Bx3ByteOpTable, NULL, BxOpcode3ByteTableA4 }, // 3-byte escape + /* 0F 38 /dm */ { Bx3ByteOp, NULL, BxOpcode3ByteTable0f38 }, // 3-byte escape #else /* 0F 38 /dm */ { 0, &BX_CPU_C::BxError }, #endif /* 0F 39 /dm */ { 0, &BX_CPU_C::BxError }, #if (BX_SUPPORT_SSE >= 4) || (BX_SUPPORT_SSE >= 3 && BX_SUPPORT_SSE_EXTENSION > 0) - /* 0F 3A /dm */ { Bx3ByteOpcode | Bx3ByteOpTable, NULL, BxOpcode3ByteTableA5 }, // 3-byte escape + /* 0F 3A /dm */ { Bx3ByteOp, NULL, BxOpcode3ByteTable0f3a }, // 3-byte escape #else /* 0F 3A /dm */ { 0, &BX_CPU_C::BxError }, #endif @@ -3144,13 +3144,13 @@ static const BxOpcodeInfo_t BxOpcodeInfo64M[512*3] = { /* 0F 36 /qm */ { 0, &BX_CPU_C::BxError }, /* 0F 37 /qm */ { 0, &BX_CPU_C::BxError }, #if (BX_SUPPORT_SSE >= 4) || (BX_SUPPORT_SSE >= 3 && BX_SUPPORT_SSE_EXTENSION > 0) - /* 0F 38 /qm */ { Bx3ByteOpcode | Bx3ByteOpTable, NULL, BxOpcode3ByteTableA4 }, // 3-byte escape + /* 0F 38 /qm */ { Bx3ByteOp, NULL, BxOpcode3ByteTable0f38 }, // 3-byte escape #else /* 0F 38 /qm */ { 0, &BX_CPU_C::BxError }, #endif /* 0F 39 /qm */ { 0, &BX_CPU_C::BxError }, #if (BX_SUPPORT_SSE >= 4) || (BX_SUPPORT_SSE >= 3 && BX_SUPPORT_SSE_EXTENSION > 0) - /* 0F 3A /qm */ { Bx3ByteOpcode | Bx3ByteOpTable, NULL, BxOpcode3ByteTableA5 }, // 3-byte escape + /* 0F 3A /qm */ { Bx3ByteOp, NULL, BxOpcode3ByteTable0f3a }, // 3-byte escape #else /* 0F 3A /qm */ { 0, &BX_CPU_C::BxError }, #endif @@ -3505,7 +3505,7 @@ fetch_b1: #if (BX_SUPPORT_SSE >= 4) || (BX_SUPPORT_SSE >= 3 && BX_SUPPORT_SSE_EXTENSION > 0) unsigned b3 = 0; // handle 3-byte escape - if (attr & Bx3ByteOpcode) { + if (attr & Bx3ByteOp) { if (ilen < remain) { ilen++; b3 = *iptr++; @@ -3709,11 +3709,8 @@ modrm_done: OpcodeInfoPtr = &(OpcodeInfoPtr->AnotherArray[rm & 0x7]); break; #if (BX_SUPPORT_SSE >= 4) || (BX_SUPPORT_SSE >= 3 && BX_SUPPORT_SSE_EXTENSION > 0) - case Bx3ByteOpTable: - OpcodeInfoPtr = &(OpcodeInfoPtr->AnotherArray[b3 >> 4]); - break; - case Bx3ByteOpIndex: - OpcodeInfoPtr = &(OpcodeInfoPtr->AnotherArray[b3 & 15]); + case Bx3ByteOp: + OpcodeInfoPtr = &(OpcodeInfoPtr->AnotherArray[b3]); break; #endif case BxPrefixSSE: diff --git a/bochs/disasm/dis_decode.cc b/bochs/disasm/dis_decode.cc index cf7124738..0e4c1160a 100644 --- a/bochs/disasm/dis_decode.cc +++ b/bochs/disasm/dis_decode.cc @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////// -// $Id: dis_decode.cc,v 1.43 2008-02-05 22:33:33 sshwarts Exp $ +// $Id: dis_decode.cc,v 1.44 2008-02-29 03:02:03 sshwarts Exp $ ///////////////////////////////////////////////////////////////////////// #include @@ -205,7 +205,7 @@ x86_insn disassembler::decode(bx_bool is_32, bx_bool is_64, bx_address base, bx_ entry = opcode_table + insn.b1; // will require 3rd byte for 3-byte opcode - if (entry->Attr & _GRP3BTAB) b3 = fetch_byte(); + if (entry->Attr & _GRP3BOP) b3 = fetch_byte(); if (instruction_has_modrm[insn.b1]) { @@ -249,12 +249,8 @@ x86_insn disassembler::decode(bx_bool is_32, bx_bool is_64, bx_address base, bx_ entry = &(BxDisasm3DNowGroup[peek_byte()]); break; - case _GRP3BTAB: - entry = &(OPCODE_TABLE(entry)[b3 >> 4]); - break; - case _GRP3BOP: - entry = &(OPCODE_TABLE(entry)[b3 & 15]); + entry = &(OPCODE_TABLE(entry)[b3]); break; case _GRP64B: diff --git a/bochs/disasm/dis_tables.h b/bochs/disasm/dis_tables.h index dc6273aa6..908e42cba 100755 --- a/bochs/disasm/dis_tables.h +++ b/bochs/disasm/dis_tables.h @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////// -// $Id: dis_tables.h,v 1.33 2008-02-12 22:41:39 sshwarts Exp $ +// $Id: dis_tables.h,v 1.34 2008-02-29 03:02:03 sshwarts Exp $ ///////////////////////////////////////////////////////////////////////// #ifndef _BX_DISASM_TABLES_ @@ -13,8 +13,7 @@ #define _GRPSSE 5 #define _GRPRM 6 #define _GRP3BOP 7 -#define _GRP3BTAB 8 -#define _GRP64B 9 +#define _GRP64B 8 /* ************************************************************************ */ #define GRPSSE(n) _GRPSSE, BxDisasmGroupSSE_##n @@ -23,8 +22,7 @@ #define GRPMOD(n) _SPLIT11B, BxDisasmGroupMod##n #define GRPFP(n) _GRPFP, BxDisasmFPGroup##n #define GRP3DNOW _GRP3DNOW, BxDisasm3DNowGroup -#define GR3BOP(n) _GRP3BOP, BxDisasm3ByteOp##n -#define GR3BTAB(n) _GRP3BTAB, BxDisasm3ByteTable##n +#define GR3BTAB(n) _GRP3BOP, BxDisasm3ByteOpTable##n #define GR64BIT(n) _GRP64B, BxDisasmGrpOs64B_##n /* ************************************************************************ */ diff --git a/bochs/disasm/dis_tables.inc b/bochs/disasm/dis_tables.inc index d17fda278..9e43f41a6 100755 --- a/bochs/disasm/dis_tables.inc +++ b/bochs/disasm/dis_tables.inc @@ -2914,7 +2914,7 @@ static BxDisasmOpcodeTable_t BxDisasmOpcodeInfoFP[512] = { /* ************************************************************************ */ /* 3-byte opcode table (Table A-4, 0F 38) */ -static BxDisasmOpcodeTable_t BxDisasm3ByteOp0f380x[16] = { +static BxDisasmOpcodeTable_t BxDisasm3ByteOpTable0f38[256] = { /* 00 */ { GRPSSE(0f3800) }, /* 01 */ { GRPSSE(0f3801) }, /* 02 */ { GRPSSE(0f3802) }, @@ -2930,127 +2930,252 @@ static BxDisasmOpcodeTable_t BxDisasm3ByteOp0f380x[16] = { /* 0C */ { 0, &Ia_Invalid }, /* 0D */ { 0, &Ia_Invalid }, /* 0E */ { 0, &Ia_Invalid }, - /* 0F */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasm3ByteOp0f381x[16] = { - /* 00 */ { GRPSSE(0f3810) }, - /* 01 */ { 0, &Ia_Invalid }, - /* 02 */ { 0, &Ia_Invalid }, - /* 03 */ { 0, &Ia_Invalid }, - /* 04 */ { GRPSSE(0f3814) }, - /* 05 */ { GRPSSE(0f3815) }, - /* 06 */ { 0, &Ia_Invalid }, - /* 07 */ { GRPSSE(0f3817) }, - /* 08 */ { 0, &Ia_Invalid }, - /* 09 */ { 0, &Ia_Invalid }, - /* 0A */ { 0, &Ia_Invalid }, - /* 0B */ { 0, &Ia_Invalid }, - /* 0C */ { GRPSSE(0f381c) }, - /* 0D */ { GRPSSE(0f381d) }, - /* 0E */ { GRPSSE(0f381e) }, - /* 0F */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasm3ByteOp0f382x[16] = { - /* 00 */ { GRPSSE(0f3820) }, - /* 01 */ { GRPSSE(0f3821) }, - /* 02 */ { GRPSSE(0f3822) }, - /* 03 */ { GRPSSE(0f3823) }, - /* 04 */ { GRPSSE(0f3824) }, - /* 05 */ { GRPSSE(0f3825) }, - /* 06 */ { 0, &Ia_Invalid }, - /* 07 */ { 0, &Ia_Invalid }, - /* 08 */ { GRPSSE(0f3828) }, - /* 09 */ { GRPSSE(0f3829) }, - /* 0A */ { GRPSSE(0f382a) }, - /* 0B */ { GRPSSE(0f382b) }, - /* 0C */ { 0, &Ia_Invalid }, - /* 0D */ { 0, &Ia_Invalid }, - /* 0E */ { 0, &Ia_Invalid }, - /* 0F */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasm3ByteOp0f383x[16] = { - /* 00 */ { GRPSSE(0f3830) }, - /* 01 */ { GRPSSE(0f3831) }, - /* 02 */ { GRPSSE(0f3832) }, - /* 03 */ { GRPSSE(0f3833) }, - /* 04 */ { GRPSSE(0f3834) }, - /* 05 */ { GRPSSE(0f3835) }, - /* 06 */ { 0, &Ia_Invalid }, - /* 07 */ { GRPSSE(0f3837) }, - /* 08 */ { GRPSSE(0f3838) }, - /* 09 */ { GRPSSE(0f3839) }, - /* 0A */ { GRPSSE(0f383a) }, - /* 0B */ { GRPSSE(0f383b) }, - /* 0C */ { GRPSSE(0f383c) }, - /* 0D */ { GRPSSE(0f383d) }, - /* 0E */ { GRPSSE(0f383e) }, - /* 0F */ { GRPSSE(0f383f) } -}; - -static BxDisasmOpcodeTable_t BxDisasm3ByteOp0f384x[16] = { - /* 00 */ { GRPSSE(0f3840) }, - /* 01 */ { GRPSSE(0f3841) }, - /* 02 */ { 0, &Ia_Invalid }, - /* 03 */ { 0, &Ia_Invalid }, - /* 04 */ { 0, &Ia_Invalid }, - /* 05 */ { 0, &Ia_Invalid }, - /* 06 */ { 0, &Ia_Invalid }, - /* 07 */ { 0, &Ia_Invalid }, - /* 08 */ { 0, &Ia_Invalid }, - /* 09 */ { 0, &Ia_Invalid }, - /* 0A */ { 0, &Ia_Invalid }, - /* 0B */ { 0, &Ia_Invalid }, - /* 0C */ { 0, &Ia_Invalid }, - /* 0D */ { 0, &Ia_Invalid }, - /* 0E */ { 0, &Ia_Invalid }, - /* 0F */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasm3ByteOp0f38fx[16] = { - /* 00 */ { GRPSSE(0f38f0) }, - /* 01 */ { GRPSSE(0f38f1) }, - /* 02 */ { 0, &Ia_Invalid }, - /* 03 */ { 0, &Ia_Invalid }, - /* 04 */ { 0, &Ia_Invalid }, - /* 05 */ { 0, &Ia_Invalid }, - /* 06 */ { 0, &Ia_Invalid }, - /* 07 */ { 0, &Ia_Invalid }, - /* 08 */ { 0, &Ia_Invalid }, - /* 09 */ { 0, &Ia_Invalid }, - /* 0A */ { 0, &Ia_Invalid }, - /* 0B */ { 0, &Ia_Invalid }, - /* 0C */ { 0, &Ia_Invalid }, - /* 0D */ { 0, &Ia_Invalid }, - /* 0E */ { 0, &Ia_Invalid }, - /* 0F */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasm3ByteTableA4[16] = { - /* 00 */ { GR3BOP(0f380x) }, - /* 01 */ { GR3BOP(0f381x) }, - /* 02 */ { GR3BOP(0f382x) }, - /* 03 */ { GR3BOP(0f383x) }, - /* 04 */ { GR3BOP(0f384x) }, - /* 05 */ { 0, &Ia_Invalid }, - /* 06 */ { 0, &Ia_Invalid }, - /* 07 */ { 0, &Ia_Invalid }, - /* 08 */ { 0, &Ia_Invalid }, - /* 09 */ { 0, &Ia_Invalid }, - /* 0A */ { 0, &Ia_Invalid }, - /* 0B */ { 0, &Ia_Invalid }, - /* 0C */ { 0, &Ia_Invalid }, - /* 0D */ { 0, &Ia_Invalid }, - /* 0E */ { 0, &Ia_Invalid }, - /* 0F */ { GR3BOP(0f38fx) } + /* 0F */ { 0, &Ia_Invalid }, + /* 10 */ { GRPSSE(0f3810) }, + /* 11 */ { 0, &Ia_Invalid }, + /* 12 */ { 0, &Ia_Invalid }, + /* 13 */ { 0, &Ia_Invalid }, + /* 14 */ { GRPSSE(0f3814) }, + /* 15 */ { GRPSSE(0f3815) }, + /* 16 */ { 0, &Ia_Invalid }, + /* 17 */ { GRPSSE(0f3817) }, + /* 18 */ { 0, &Ia_Invalid }, + /* 19 */ { 0, &Ia_Invalid }, + /* 1A */ { 0, &Ia_Invalid }, + /* 1B */ { 0, &Ia_Invalid }, + /* 1C */ { GRPSSE(0f381c) }, + /* 1D */ { GRPSSE(0f381d) }, + /* 1E */ { GRPSSE(0f381e) }, + /* 1F */ { 0, &Ia_Invalid }, + /* 20 */ { GRPSSE(0f3820) }, + /* 21 */ { GRPSSE(0f3821) }, + /* 22 */ { GRPSSE(0f3822) }, + /* 23 */ { GRPSSE(0f3823) }, + /* 24 */ { GRPSSE(0f3824) }, + /* 25 */ { GRPSSE(0f3825) }, + /* 26 */ { 0, &Ia_Invalid }, + /* 27 */ { 0, &Ia_Invalid }, + /* 28 */ { GRPSSE(0f3828) }, + /* 29 */ { GRPSSE(0f3829) }, + /* 2A */ { GRPSSE(0f382a) }, + /* 2B */ { GRPSSE(0f382b) }, + /* 2C */ { 0, &Ia_Invalid }, + /* 2D */ { 0, &Ia_Invalid }, + /* 2E */ { 0, &Ia_Invalid }, + /* 2F */ { 0, &Ia_Invalid }, + /* 30 */ { GRPSSE(0f3830) }, + /* 31 */ { GRPSSE(0f3831) }, + /* 32 */ { GRPSSE(0f3832) }, + /* 33 */ { GRPSSE(0f3833) }, + /* 34 */ { GRPSSE(0f3834) }, + /* 35 */ { GRPSSE(0f3835) }, + /* 36 */ { 0, &Ia_Invalid }, + /* 37 */ { GRPSSE(0f3837) }, + /* 38 */ { GRPSSE(0f3838) }, + /* 39 */ { GRPSSE(0f3839) }, + /* 3A */ { GRPSSE(0f383a) }, + /* 3B */ { GRPSSE(0f383b) }, + /* 3C */ { GRPSSE(0f383c) }, + /* 3D */ { GRPSSE(0f383d) }, + /* 3E */ { GRPSSE(0f383e) }, + /* 3F */ { GRPSSE(0f383f) }, + /* 40 */ { GRPSSE(0f3840) }, + /* 41 */ { GRPSSE(0f3841) }, + /* 42 */ { 0, &Ia_Invalid }, + /* 43 */ { 0, &Ia_Invalid }, + /* 44 */ { 0, &Ia_Invalid }, + /* 45 */ { 0, &Ia_Invalid }, + /* 46 */ { 0, &Ia_Invalid }, + /* 47 */ { 0, &Ia_Invalid }, + /* 48 */ { 0, &Ia_Invalid }, + /* 49 */ { 0, &Ia_Invalid }, + /* 4A */ { 0, &Ia_Invalid }, + /* 4B */ { 0, &Ia_Invalid }, + /* 4C */ { 0, &Ia_Invalid }, + /* 4D */ { 0, &Ia_Invalid }, + /* 4E */ { 0, &Ia_Invalid }, + /* 4F */ { 0, &Ia_Invalid }, + /* 50 */ { 0, &Ia_Invalid }, + /* 51 */ { 0, &Ia_Invalid }, + /* 52 */ { 0, &Ia_Invalid }, + /* 53 */ { 0, &Ia_Invalid }, + /* 54 */ { 0, &Ia_Invalid }, + /* 55 */ { 0, &Ia_Invalid }, + /* 56 */ { 0, &Ia_Invalid }, + /* 57 */ { 0, &Ia_Invalid }, + /* 58 */ { 0, &Ia_Invalid }, + /* 59 */ { 0, &Ia_Invalid }, + /* 5A */ { 0, &Ia_Invalid }, + /* 5B */ { 0, &Ia_Invalid }, + /* 5C */ { 0, &Ia_Invalid }, + /* 5D */ { 0, &Ia_Invalid }, + /* 5E */ { 0, &Ia_Invalid }, + /* 5F */ { 0, &Ia_Invalid }, + /* 60 */ { 0, &Ia_Invalid }, + /* 61 */ { 0, &Ia_Invalid }, + /* 62 */ { 0, &Ia_Invalid }, + /* 63 */ { 0, &Ia_Invalid }, + /* 64 */ { 0, &Ia_Invalid }, + /* 65 */ { 0, &Ia_Invalid }, + /* 66 */ { 0, &Ia_Invalid }, + /* 67 */ { 0, &Ia_Invalid }, + /* 68 */ { 0, &Ia_Invalid }, + /* 69 */ { 0, &Ia_Invalid }, + /* 6A */ { 0, &Ia_Invalid }, + /* 6B */ { 0, &Ia_Invalid }, + /* 6C */ { 0, &Ia_Invalid }, + /* 6D */ { 0, &Ia_Invalid }, + /* 6E */ { 0, &Ia_Invalid }, + /* 6F */ { 0, &Ia_Invalid }, + /* 70 */ { 0, &Ia_Invalid }, + /* 71 */ { 0, &Ia_Invalid }, + /* 72 */ { 0, &Ia_Invalid }, + /* 73 */ { 0, &Ia_Invalid }, + /* 74 */ { 0, &Ia_Invalid }, + /* 75 */ { 0, &Ia_Invalid }, + /* 76 */ { 0, &Ia_Invalid }, + /* 77 */ { 0, &Ia_Invalid }, + /* 78 */ { 0, &Ia_Invalid }, + /* 79 */ { 0, &Ia_Invalid }, + /* 7A */ { 0, &Ia_Invalid }, + /* 7B */ { 0, &Ia_Invalid }, + /* 7C */ { 0, &Ia_Invalid }, + /* 7D */ { 0, &Ia_Invalid }, + /* 7E */ { 0, &Ia_Invalid }, + /* 7F */ { 0, &Ia_Invalid }, + /* 80 */ { 0, &Ia_Invalid }, + /* 81 */ { 0, &Ia_Invalid }, + /* 82 */ { 0, &Ia_Invalid }, + /* 83 */ { 0, &Ia_Invalid }, + /* 84 */ { 0, &Ia_Invalid }, + /* 85 */ { 0, &Ia_Invalid }, + /* 86 */ { 0, &Ia_Invalid }, + /* 87 */ { 0, &Ia_Invalid }, + /* 88 */ { 0, &Ia_Invalid }, + /* 89 */ { 0, &Ia_Invalid }, + /* 8A */ { 0, &Ia_Invalid }, + /* 8B */ { 0, &Ia_Invalid }, + /* 8C */ { 0, &Ia_Invalid }, + /* 8D */ { 0, &Ia_Invalid }, + /* 8E */ { 0, &Ia_Invalid }, + /* 8F */ { 0, &Ia_Invalid }, + /* 90 */ { 0, &Ia_Invalid }, + /* 91 */ { 0, &Ia_Invalid }, + /* 92 */ { 0, &Ia_Invalid }, + /* 93 */ { 0, &Ia_Invalid }, + /* 94 */ { 0, &Ia_Invalid }, + /* 95 */ { 0, &Ia_Invalid }, + /* 96 */ { 0, &Ia_Invalid }, + /* 97 */ { 0, &Ia_Invalid }, + /* 98 */ { 0, &Ia_Invalid }, + /* 99 */ { 0, &Ia_Invalid }, + /* 9A */ { 0, &Ia_Invalid }, + /* 9B */ { 0, &Ia_Invalid }, + /* 9C */ { 0, &Ia_Invalid }, + /* 9D */ { 0, &Ia_Invalid }, + /* 9E */ { 0, &Ia_Invalid }, + /* 9F */ { 0, &Ia_Invalid }, + /* A0 */ { 0, &Ia_Invalid }, + /* A1 */ { 0, &Ia_Invalid }, + /* A2 */ { 0, &Ia_Invalid }, + /* A3 */ { 0, &Ia_Invalid }, + /* A4 */ { 0, &Ia_Invalid }, + /* A5 */ { 0, &Ia_Invalid }, + /* A6 */ { 0, &Ia_Invalid }, + /* A7 */ { 0, &Ia_Invalid }, + /* A8 */ { 0, &Ia_Invalid }, + /* A9 */ { 0, &Ia_Invalid }, + /* AA */ { 0, &Ia_Invalid }, + /* AB */ { 0, &Ia_Invalid }, + /* AC */ { 0, &Ia_Invalid }, + /* AD */ { 0, &Ia_Invalid }, + /* AE */ { 0, &Ia_Invalid }, + /* AF */ { 0, &Ia_Invalid }, + /* B0 */ { 0, &Ia_Invalid }, + /* B1 */ { 0, &Ia_Invalid }, + /* B2 */ { 0, &Ia_Invalid }, + /* B3 */ { 0, &Ia_Invalid }, + /* B4 */ { 0, &Ia_Invalid }, + /* B5 */ { 0, &Ia_Invalid }, + /* B6 */ { 0, &Ia_Invalid }, + /* B7 */ { 0, &Ia_Invalid }, + /* B8 */ { 0, &Ia_Invalid }, + /* B9 */ { 0, &Ia_Invalid }, + /* BA */ { 0, &Ia_Invalid }, + /* BB */ { 0, &Ia_Invalid }, + /* BC */ { 0, &Ia_Invalid }, + /* BD */ { 0, &Ia_Invalid }, + /* BE */ { 0, &Ia_Invalid }, + /* BF */ { 0, &Ia_Invalid }, + /* C0 */ { 0, &Ia_Invalid }, + /* C1 */ { 0, &Ia_Invalid }, + /* C2 */ { 0, &Ia_Invalid }, + /* C3 */ { 0, &Ia_Invalid }, + /* C4 */ { 0, &Ia_Invalid }, + /* C5 */ { 0, &Ia_Invalid }, + /* C6 */ { 0, &Ia_Invalid }, + /* C7 */ { 0, &Ia_Invalid }, + /* C8 */ { 0, &Ia_Invalid }, + /* C9 */ { 0, &Ia_Invalid }, + /* CA */ { 0, &Ia_Invalid }, + /* CB */ { 0, &Ia_Invalid }, + /* CC */ { 0, &Ia_Invalid }, + /* CD */ { 0, &Ia_Invalid }, + /* CE */ { 0, &Ia_Invalid }, + /* CF */ { 0, &Ia_Invalid }, + /* D0 */ { 0, &Ia_Invalid }, + /* D1 */ { 0, &Ia_Invalid }, + /* D2 */ { 0, &Ia_Invalid }, + /* D3 */ { 0, &Ia_Invalid }, + /* D4 */ { 0, &Ia_Invalid }, + /* D5 */ { 0, &Ia_Invalid }, + /* D6 */ { 0, &Ia_Invalid }, + /* D7 */ { 0, &Ia_Invalid }, + /* D8 */ { 0, &Ia_Invalid }, + /* D9 */ { 0, &Ia_Invalid }, + /* DA */ { 0, &Ia_Invalid }, + /* DB */ { 0, &Ia_Invalid }, + /* DC */ { 0, &Ia_Invalid }, + /* DD */ { 0, &Ia_Invalid }, + /* DE */ { 0, &Ia_Invalid }, + /* DF */ { 0, &Ia_Invalid }, + /* E0 */ { 0, &Ia_Invalid }, + /* E1 */ { 0, &Ia_Invalid }, + /* E2 */ { 0, &Ia_Invalid }, + /* E3 */ { 0, &Ia_Invalid }, + /* E4 */ { 0, &Ia_Invalid }, + /* E5 */ { 0, &Ia_Invalid }, + /* E6 */ { 0, &Ia_Invalid }, + /* E7 */ { 0, &Ia_Invalid }, + /* E8 */ { 0, &Ia_Invalid }, + /* E9 */ { 0, &Ia_Invalid }, + /* EA */ { 0, &Ia_Invalid }, + /* EB */ { 0, &Ia_Invalid }, + /* EC */ { 0, &Ia_Invalid }, + /* ED */ { 0, &Ia_Invalid }, + /* EE */ { 0, &Ia_Invalid }, + /* F0 */ { GRPSSE(0f38f0) }, + /* F1 */ { GRPSSE(0f38f1) }, + /* F2 */ { 0, &Ia_Invalid }, + /* F3 */ { 0, &Ia_Invalid }, + /* F4 */ { 0, &Ia_Invalid }, + /* F5 */ { 0, &Ia_Invalid }, + /* F6 */ { 0, &Ia_Invalid }, + /* F7 */ { 0, &Ia_Invalid }, + /* F8 */ { 0, &Ia_Invalid }, + /* F9 */ { 0, &Ia_Invalid }, + /* FA */ { 0, &Ia_Invalid }, + /* FB */ { 0, &Ia_Invalid }, + /* FC */ { 0, &Ia_Invalid }, + /* FD */ { 0, &Ia_Invalid }, + /* FE */ { 0, &Ia_Invalid }, + /* FF */ { 0, &Ia_Invalid } }; /* ************************************************************************ */ /* 3-byte opcode table (Table A-5, 0F 3A) */ -static BxDisasmOpcodeTable_t BxDisasm3ByteOp0f3a0x[16] = { +static BxDisasmOpcodeTable_t BxDisasm3ByteOpTable0f3a[256] = { /* 00 */ { 0, &Ia_Invalid }, /* 01 */ { 0, &Ia_Invalid }, /* 02 */ { 0, &Ia_Invalid }, @@ -3066,102 +3191,246 @@ static BxDisasmOpcodeTable_t BxDisasm3ByteOp0f3a0x[16] = { /* 0C */ { GRPSSE(0f3a0c) }, /* 0D */ { GRPSSE(0f3a0d) }, /* 0E */ { GRPSSE(0f3a0e) }, - /* 0F */ { GRPSSE(0f3a0f) } -}; - -static BxDisasmOpcodeTable_t BxDisasm3ByteOp0f3a1x[16] = { - /* 00 */ { 0, &Ia_Invalid }, - /* 01 */ { 0, &Ia_Invalid }, - /* 02 */ { 0, &Ia_Invalid }, - /* 03 */ { 0, &Ia_Invalid }, - /* 04 */ { GRPSSE(0f3a14) }, - /* 05 */ { GRPSSE(0f3a15) }, - /* 06 */ { GRPSSE(0f3a16) }, - /* 07 */ { GRPSSE(0f3a17) }, - /* 08 */ { 0, &Ia_Invalid }, - /* 09 */ { 0, &Ia_Invalid }, - /* 0A */ { 0, &Ia_Invalid }, - /* 0B */ { 0, &Ia_Invalid }, - /* 0C */ { 0, &Ia_Invalid }, - /* 0D */ { 0, &Ia_Invalid }, - /* 0E */ { 0, &Ia_Invalid }, - /* 0F */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasm3ByteOp0f3a2x[16] = { - /* 00 */ { GRPSSE(0f3a20) }, - /* 01 */ { GRPSSE(0f3a21) }, - /* 02 */ { GRPSSE(0f3a22) }, - /* 03 */ { 0, &Ia_Invalid }, - /* 04 */ { 0, &Ia_Invalid }, - /* 05 */ { 0, &Ia_Invalid }, - /* 06 */ { 0, &Ia_Invalid }, - /* 07 */ { 0, &Ia_Invalid }, - /* 08 */ { 0, &Ia_Invalid }, - /* 09 */ { 0, &Ia_Invalid }, - /* 0A */ { 0, &Ia_Invalid }, - /* 0B */ { 0, &Ia_Invalid }, - /* 0C */ { 0, &Ia_Invalid }, - /* 0D */ { 0, &Ia_Invalid }, - /* 0E */ { 0, &Ia_Invalid }, - /* 0F */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasm3ByteOp0f3a4x[16] = { - /* 00 */ { GRPSSE(0f3a40) }, - /* 01 */ { GRPSSE(0f3a41) }, - /* 02 */ { GRPSSE(0f3a42) }, - /* 03 */ { 0, &Ia_Invalid }, - /* 04 */ { 0, &Ia_Invalid }, - /* 05 */ { 0, &Ia_Invalid }, - /* 06 */ { 0, &Ia_Invalid }, - /* 07 */ { 0, &Ia_Invalid }, - /* 08 */ { 0, &Ia_Invalid }, - /* 09 */ { 0, &Ia_Invalid }, - /* 0A */ { 0, &Ia_Invalid }, - /* 0B */ { 0, &Ia_Invalid }, - /* 0C */ { 0, &Ia_Invalid }, - /* 0D */ { 0, &Ia_Invalid }, - /* 0E */ { 0, &Ia_Invalid }, - /* 0F */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasm3ByteOp0f3a6x[16] = { - /* 00 */ { GRPSSE(0f3a60) }, - /* 01 */ { GRPSSE(0f3a61) }, - /* 02 */ { GRPSSE(0f3a62) }, - /* 03 */ { GRPSSE(0f3a63) }, - /* 04 */ { 0, &Ia_Invalid }, - /* 05 */ { 0, &Ia_Invalid }, - /* 06 */ { 0, &Ia_Invalid }, - /* 07 */ { 0, &Ia_Invalid }, - /* 08 */ { 0, &Ia_Invalid }, - /* 09 */ { 0, &Ia_Invalid }, - /* 0A */ { 0, &Ia_Invalid }, - /* 0B */ { 0, &Ia_Invalid }, - /* 0C */ { 0, &Ia_Invalid }, - /* 0D */ { 0, &Ia_Invalid }, - /* 0E */ { 0, &Ia_Invalid }, - /* 0F */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasm3ByteTableA5[16] = { - /* 00 */ { GR3BOP(0f3a0x) }, - /* 01 */ { GR3BOP(0f3a1x) }, - /* 01 */ { GR3BOP(0f3a2x) }, - /* 03 */ { 0, &Ia_Invalid }, - /* 04 */ { GR3BOP(0f3a4x) }, - /* 05 */ { 0, &Ia_Invalid }, - /* 06 */ { GR3BOP(0f3a6x) }, - /* 07 */ { 0, &Ia_Invalid }, - /* 08 */ { 0, &Ia_Invalid }, - /* 09 */ { 0, &Ia_Invalid }, - /* 0A */ { 0, &Ia_Invalid }, - /* 0B */ { 0, &Ia_Invalid }, - /* 0C */ { 0, &Ia_Invalid }, - /* 0D */ { 0, &Ia_Invalid }, - /* 0E */ { 0, &Ia_Invalid }, - /* 0F */ { 0, &Ia_Invalid } + /* 0F */ { GRPSSE(0f3a0f) }, + /* 10 */ { 0, &Ia_Invalid }, + /* 11 */ { 0, &Ia_Invalid }, + /* 12 */ { 0, &Ia_Invalid }, + /* 13 */ { 0, &Ia_Invalid }, + /* 14 */ { GRPSSE(0f3a14) }, + /* 15 */ { GRPSSE(0f3a15) }, + /* 16 */ { GRPSSE(0f3a16) }, + /* 17 */ { GRPSSE(0f3a17) }, + /* 18 */ { 0, &Ia_Invalid }, + /* 19 */ { 0, &Ia_Invalid }, + /* 1A */ { 0, &Ia_Invalid }, + /* 1B */ { 0, &Ia_Invalid }, + /* 1C */ { 0, &Ia_Invalid }, + /* 1D */ { 0, &Ia_Invalid }, + /* 1E */ { 0, &Ia_Invalid }, + /* 1F */ { 0, &Ia_Invalid }, + /* 20 */ { GRPSSE(0f3a20) }, + /* 21 */ { GRPSSE(0f3a21) }, + /* 22 */ { GRPSSE(0f3a22) }, + /* 23 */ { 0, &Ia_Invalid }, + /* 24 */ { 0, &Ia_Invalid }, + /* 25 */ { 0, &Ia_Invalid }, + /* 26 */ { 0, &Ia_Invalid }, + /* 27 */ { 0, &Ia_Invalid }, + /* 28 */ { 0, &Ia_Invalid }, + /* 29 */ { 0, &Ia_Invalid }, + /* 2A */ { 0, &Ia_Invalid }, + /* 2B */ { 0, &Ia_Invalid }, + /* 2C */ { 0, &Ia_Invalid }, + /* 2D */ { 0, &Ia_Invalid }, + /* 2E */ { 0, &Ia_Invalid }, + /* 2F */ { 0, &Ia_Invalid }, + /* 30 */ { 0, &Ia_Invalid }, + /* 31 */ { 0, &Ia_Invalid }, + /* 32 */ { 0, &Ia_Invalid }, + /* 33 */ { 0, &Ia_Invalid }, + /* 34 */ { 0, &Ia_Invalid }, + /* 35 */ { 0, &Ia_Invalid }, + /* 36 */ { 0, &Ia_Invalid }, + /* 37 */ { 0, &Ia_Invalid }, + /* 38 */ { 0, &Ia_Invalid }, + /* 39 */ { 0, &Ia_Invalid }, + /* 3A */ { 0, &Ia_Invalid }, + /* 3B */ { 0, &Ia_Invalid }, + /* 3C */ { 0, &Ia_Invalid }, + /* 3D */ { 0, &Ia_Invalid }, + /* 3E */ { 0, &Ia_Invalid }, + /* 3F */ { 0, &Ia_Invalid }, + /* 40 */ { GRPSSE(0f3a40) }, + /* 41 */ { GRPSSE(0f3a41) }, + /* 42 */ { GRPSSE(0f3a42) }, + /* 43 */ { 0, &Ia_Invalid }, + /* 44 */ { 0, &Ia_Invalid }, + /* 45 */ { 0, &Ia_Invalid }, + /* 46 */ { 0, &Ia_Invalid }, + /* 47 */ { 0, &Ia_Invalid }, + /* 48 */ { 0, &Ia_Invalid }, + /* 49 */ { 0, &Ia_Invalid }, + /* 4A */ { 0, &Ia_Invalid }, + /* 4B */ { 0, &Ia_Invalid }, + /* 4C */ { 0, &Ia_Invalid }, + /* 4D */ { 0, &Ia_Invalid }, + /* 4E */ { 0, &Ia_Invalid }, + /* 4F */ { 0, &Ia_Invalid }, + /* 50 */ { 0, &Ia_Invalid }, + /* 51 */ { 0, &Ia_Invalid }, + /* 52 */ { 0, &Ia_Invalid }, + /* 53 */ { 0, &Ia_Invalid }, + /* 54 */ { 0, &Ia_Invalid }, + /* 55 */ { 0, &Ia_Invalid }, + /* 56 */ { 0, &Ia_Invalid }, + /* 57 */ { 0, &Ia_Invalid }, + /* 58 */ { 0, &Ia_Invalid }, + /* 59 */ { 0, &Ia_Invalid }, + /* 5A */ { 0, &Ia_Invalid }, + /* 5B */ { 0, &Ia_Invalid }, + /* 5C */ { 0, &Ia_Invalid }, + /* 5D */ { 0, &Ia_Invalid }, + /* 5E */ { 0, &Ia_Invalid }, + /* 5F */ { 0, &Ia_Invalid }, + /* 60 */ { GRPSSE(0f3a60) }, + /* 61 */ { GRPSSE(0f3a61) }, + /* 62 */ { GRPSSE(0f3a62) }, + /* 63 */ { GRPSSE(0f3a63) }, + /* 64 */ { 0, &Ia_Invalid }, + /* 65 */ { 0, &Ia_Invalid }, + /* 66 */ { 0, &Ia_Invalid }, + /* 67 */ { 0, &Ia_Invalid }, + /* 68 */ { 0, &Ia_Invalid }, + /* 69 */ { 0, &Ia_Invalid }, + /* 6A */ { 0, &Ia_Invalid }, + /* 6B */ { 0, &Ia_Invalid }, + /* 6C */ { 0, &Ia_Invalid }, + /* 6D */ { 0, &Ia_Invalid }, + /* 6E */ { 0, &Ia_Invalid }, + /* 6F */ { 0, &Ia_Invalid }, + /* 70 */ { 0, &Ia_Invalid }, + /* 71 */ { 0, &Ia_Invalid }, + /* 72 */ { 0, &Ia_Invalid }, + /* 73 */ { 0, &Ia_Invalid }, + /* 74 */ { 0, &Ia_Invalid }, + /* 75 */ { 0, &Ia_Invalid }, + /* 76 */ { 0, &Ia_Invalid }, + /* 77 */ { 0, &Ia_Invalid }, + /* 78 */ { 0, &Ia_Invalid }, + /* 79 */ { 0, &Ia_Invalid }, + /* 7A */ { 0, &Ia_Invalid }, + /* 7B */ { 0, &Ia_Invalid }, + /* 7C */ { 0, &Ia_Invalid }, + /* 7D */ { 0, &Ia_Invalid }, + /* 7E */ { 0, &Ia_Invalid }, + /* 7F */ { 0, &Ia_Invalid }, + /* 80 */ { 0, &Ia_Invalid }, + /* 81 */ { 0, &Ia_Invalid }, + /* 82 */ { 0, &Ia_Invalid }, + /* 83 */ { 0, &Ia_Invalid }, + /* 84 */ { 0, &Ia_Invalid }, + /* 85 */ { 0, &Ia_Invalid }, + /* 86 */ { 0, &Ia_Invalid }, + /* 87 */ { 0, &Ia_Invalid }, + /* 88 */ { 0, &Ia_Invalid }, + /* 89 */ { 0, &Ia_Invalid }, + /* 8A */ { 0, &Ia_Invalid }, + /* 8B */ { 0, &Ia_Invalid }, + /* 8C */ { 0, &Ia_Invalid }, + /* 8D */ { 0, &Ia_Invalid }, + /* 8E */ { 0, &Ia_Invalid }, + /* 8F */ { 0, &Ia_Invalid }, + /* 90 */ { 0, &Ia_Invalid }, + /* 91 */ { 0, &Ia_Invalid }, + /* 92 */ { 0, &Ia_Invalid }, + /* 93 */ { 0, &Ia_Invalid }, + /* 94 */ { 0, &Ia_Invalid }, + /* 95 */ { 0, &Ia_Invalid }, + /* 96 */ { 0, &Ia_Invalid }, + /* 97 */ { 0, &Ia_Invalid }, + /* 98 */ { 0, &Ia_Invalid }, + /* 99 */ { 0, &Ia_Invalid }, + /* 9A */ { 0, &Ia_Invalid }, + /* 9B */ { 0, &Ia_Invalid }, + /* 9C */ { 0, &Ia_Invalid }, + /* 9D */ { 0, &Ia_Invalid }, + /* 9E */ { 0, &Ia_Invalid }, + /* 9F */ { 0, &Ia_Invalid }, + /* A0 */ { 0, &Ia_Invalid }, + /* A1 */ { 0, &Ia_Invalid }, + /* A2 */ { 0, &Ia_Invalid }, + /* A3 */ { 0, &Ia_Invalid }, + /* A4 */ { 0, &Ia_Invalid }, + /* A5 */ { 0, &Ia_Invalid }, + /* A6 */ { 0, &Ia_Invalid }, + /* A7 */ { 0, &Ia_Invalid }, + /* A8 */ { 0, &Ia_Invalid }, + /* A9 */ { 0, &Ia_Invalid }, + /* AA */ { 0, &Ia_Invalid }, + /* AB */ { 0, &Ia_Invalid }, + /* AC */ { 0, &Ia_Invalid }, + /* AD */ { 0, &Ia_Invalid }, + /* AE */ { 0, &Ia_Invalid }, + /* AF */ { 0, &Ia_Invalid }, + /* B0 */ { 0, &Ia_Invalid }, + /* B1 */ { 0, &Ia_Invalid }, + /* B2 */ { 0, &Ia_Invalid }, + /* B3 */ { 0, &Ia_Invalid }, + /* B4 */ { 0, &Ia_Invalid }, + /* B5 */ { 0, &Ia_Invalid }, + /* B6 */ { 0, &Ia_Invalid }, + /* B7 */ { 0, &Ia_Invalid }, + /* B8 */ { 0, &Ia_Invalid }, + /* B9 */ { 0, &Ia_Invalid }, + /* BA */ { 0, &Ia_Invalid }, + /* BB */ { 0, &Ia_Invalid }, + /* BC */ { 0, &Ia_Invalid }, + /* BD */ { 0, &Ia_Invalid }, + /* BE */ { 0, &Ia_Invalid }, + /* BF */ { 0, &Ia_Invalid }, + /* C0 */ { 0, &Ia_Invalid }, + /* C1 */ { 0, &Ia_Invalid }, + /* C2 */ { 0, &Ia_Invalid }, + /* C3 */ { 0, &Ia_Invalid }, + /* C4 */ { 0, &Ia_Invalid }, + /* C5 */ { 0, &Ia_Invalid }, + /* C6 */ { 0, &Ia_Invalid }, + /* C7 */ { 0, &Ia_Invalid }, + /* C8 */ { 0, &Ia_Invalid }, + /* C9 */ { 0, &Ia_Invalid }, + /* CA */ { 0, &Ia_Invalid }, + /* CB */ { 0, &Ia_Invalid }, + /* CC */ { 0, &Ia_Invalid }, + /* CD */ { 0, &Ia_Invalid }, + /* CE */ { 0, &Ia_Invalid }, + /* CF */ { 0, &Ia_Invalid }, + /* D0 */ { 0, &Ia_Invalid }, + /* D1 */ { 0, &Ia_Invalid }, + /* D2 */ { 0, &Ia_Invalid }, + /* D3 */ { 0, &Ia_Invalid }, + /* D4 */ { 0, &Ia_Invalid }, + /* D5 */ { 0, &Ia_Invalid }, + /* D6 */ { 0, &Ia_Invalid }, + /* D7 */ { 0, &Ia_Invalid }, + /* D8 */ { 0, &Ia_Invalid }, + /* D9 */ { 0, &Ia_Invalid }, + /* DA */ { 0, &Ia_Invalid }, + /* DB */ { 0, &Ia_Invalid }, + /* DC */ { 0, &Ia_Invalid }, + /* DD */ { 0, &Ia_Invalid }, + /* DE */ { 0, &Ia_Invalid }, + /* DF */ { 0, &Ia_Invalid }, + /* E0 */ { 0, &Ia_Invalid }, + /* E1 */ { 0, &Ia_Invalid }, + /* E2 */ { 0, &Ia_Invalid }, + /* E3 */ { 0, &Ia_Invalid }, + /* E4 */ { 0, &Ia_Invalid }, + /* E5 */ { 0, &Ia_Invalid }, + /* E6 */ { 0, &Ia_Invalid }, + /* E7 */ { 0, &Ia_Invalid }, + /* E8 */ { 0, &Ia_Invalid }, + /* E9 */ { 0, &Ia_Invalid }, + /* EA */ { 0, &Ia_Invalid }, + /* EB */ { 0, &Ia_Invalid }, + /* EC */ { 0, &Ia_Invalid }, + /* ED */ { 0, &Ia_Invalid }, + /* EE */ { 0, &Ia_Invalid }, + /* F0 */ { 0, &Ia_Invalid }, + /* F1 */ { 0, &Ia_Invalid }, + /* F2 */ { 0, &Ia_Invalid }, + /* F3 */ { 0, &Ia_Invalid }, + /* F4 */ { 0, &Ia_Invalid }, + /* F5 */ { 0, &Ia_Invalid }, + /* F6 */ { 0, &Ia_Invalid }, + /* F7 */ { 0, &Ia_Invalid }, + /* F8 */ { 0, &Ia_Invalid }, + /* F9 */ { 0, &Ia_Invalid }, + /* FA */ { 0, &Ia_Invalid }, + /* FB */ { 0, &Ia_Invalid }, + /* FC */ { 0, &Ia_Invalid }, + /* FD */ { 0, &Ia_Invalid }, + /* FE */ { 0, &Ia_Invalid }, + /* FF */ { 0, &Ia_Invalid } }; /* ************************************************************************ */ @@ -3480,17 +3749,17 @@ static BxDisasmOpcodeTable_t BxDisasmOpcodes16[256*2] = { /* 0F 32 */ { 0, &Ia_rdmsr }, /* 0F 33 */ { 0, &Ia_rdpmc }, /* 0F 34 */ { 0, &Ia_sysenter }, - /* 0F 35 */ { 0, &Ia_sysexit }, - /* 0F 36 */ { 0, &Ia_Invalid }, - /* 0F 37 */ { 0, &Ia_Invalid }, - /* 0F 38 */ { GR3BTAB(A4) }, + /* 0F 35 */ { 0, &Ia_sysexit }, + /* 0F 36 */ { 0, &Ia_Invalid }, + /* 0F 37 */ { 0, &Ia_Invalid }, + /* 0F 38 */ { GR3BTAB(0f38) }, /* 0F 39 */ { 0, &Ia_Invalid }, - /* 0F 3A */ { GR3BTAB(A5) }, - /* 0F 3B */ { 0, &Ia_Invalid }, - /* 0F 3C */ { 0, &Ia_Invalid }, - /* 0F 3D */ { 0, &Ia_Invalid }, - /* 0F 3E */ { 0, &Ia_Invalid }, - /* 0F 3F */ { 0, &Ia_Invalid }, + /* 0F 3A */ { GR3BTAB(0f3a) }, + /* 0F 3B */ { 0, &Ia_Invalid }, + /* 0F 3C */ { 0, &Ia_Invalid }, + /* 0F 3D */ { 0, &Ia_Invalid }, + /* 0F 3E */ { 0, &Ia_Invalid }, + /* 0F 3F */ { 0, &Ia_Invalid }, /* 0F 40 */ { 0, &Ia_cmovow_Gw_Ew }, /* 0F 41 */ { 0, &Ia_cmovnow_Gw_Ew }, /* 0F 42 */ { 0, &Ia_cmovcw_Gw_Ew }, @@ -4001,17 +4270,17 @@ static BxDisasmOpcodeTable_t BxDisasmOpcodes32[256*2] = { /* 0F 32 */ { 0, &Ia_rdmsr }, /* 0F 33 */ { 0, &Ia_rdpmc }, /* 0F 34 */ { 0, &Ia_sysenter }, - /* 0F 35 */ { 0, &Ia_sysexit }, - /* 0F 36 */ { 0, &Ia_Invalid }, - /* 0F 37 */ { 0, &Ia_Invalid }, - /* 0F 38 */ { GR3BTAB(A4) }, + /* 0F 35 */ { 0, &Ia_sysexit }, + /* 0F 36 */ { 0, &Ia_Invalid }, + /* 0F 37 */ { 0, &Ia_Invalid }, + /* 0F 38 */ { GR3BTAB(0f38) }, /* 0F 39 */ { 0, &Ia_Invalid }, - /* 0F 3A */ { GR3BTAB(A5) }, - /* 0F 3B */ { 0, &Ia_Invalid }, - /* 0F 3C */ { 0, &Ia_Invalid }, - /* 0F 3D */ { 0, &Ia_Invalid }, - /* 0F 3E */ { 0, &Ia_Invalid }, - /* 0F 3F */ { 0, &Ia_Invalid }, + /* 0F 3A */ { GR3BTAB(0f3a) }, + /* 0F 3B */ { 0, &Ia_Invalid }, + /* 0F 3C */ { 0, &Ia_Invalid }, + /* 0F 3D */ { 0, &Ia_Invalid }, + /* 0F 3E */ { 0, &Ia_Invalid }, + /* 0F 3F */ { 0, &Ia_Invalid }, /* 0F 40 */ { 0, &Ia_cmovol_Gd_Ed }, /* 0F 41 */ { 0, &Ia_cmovnol_Gd_Ed }, /* 0F 42 */ { 0, &Ia_cmovcl_Gd_Ed }, @@ -4522,17 +4791,17 @@ static BxDisasmOpcodeTable_t BxDisasmOpcodes64w[256*2] = { /* 0F 32 */ { 0, &Ia_rdmsr }, /* 0F 33 */ { 0, &Ia_rdpmc }, /* 0F 34 */ { 0, &Ia_sysenter }, - /* 0F 35 */ { 0, &Ia_sysexit }, - /* 0F 36 */ { 0, &Ia_Invalid }, - /* 0F 37 */ { 0, &Ia_Invalid }, - /* 0F 38 */ { GR3BTAB(A4) }, + /* 0F 35 */ { 0, &Ia_sysexit }, + /* 0F 36 */ { 0, &Ia_Invalid }, + /* 0F 37 */ { 0, &Ia_Invalid }, + /* 0F 38 */ { GR3BTAB(0f38) }, /* 0F 39 */ { 0, &Ia_Invalid }, - /* 0F 3A */ { GR3BTAB(A5) }, - /* 0F 3B */ { 0, &Ia_Invalid }, - /* 0F 3C */ { 0, &Ia_Invalid }, - /* 0F 3D */ { 0, &Ia_Invalid }, - /* 0F 3E */ { 0, &Ia_Invalid }, - /* 0F 3F */ { 0, &Ia_Invalid }, + /* 0F 3A */ { GR3BTAB(0f3a) }, + /* 0F 3B */ { 0, &Ia_Invalid }, + /* 0F 3C */ { 0, &Ia_Invalid }, + /* 0F 3D */ { 0, &Ia_Invalid }, + /* 0F 3E */ { 0, &Ia_Invalid }, + /* 0F 3F */ { 0, &Ia_Invalid }, /* 0F 40 */ { 0, &Ia_cmovow_Gw_Ew }, /* 0F 41 */ { 0, &Ia_cmovnow_Gw_Ew }, /* 0F 42 */ { 0, &Ia_cmovcw_Gw_Ew }, @@ -5040,17 +5309,17 @@ static BxDisasmOpcodeTable_t BxDisasmOpcodes64d[256*2] = { /* 0F 32 */ { 0, &Ia_rdmsr }, /* 0F 33 */ { 0, &Ia_rdpmc }, /* 0F 34 */ { 0, &Ia_sysenter }, - /* 0F 35 */ { 0, &Ia_sysexit }, - /* 0F 36 */ { 0, &Ia_Invalid }, - /* 0F 37 */ { 0, &Ia_Invalid }, - /* 0F 38 */ { GR3BTAB(A4) }, + /* 0F 35 */ { 0, &Ia_sysexit }, + /* 0F 36 */ { 0, &Ia_Invalid }, + /* 0F 37 */ { 0, &Ia_Invalid }, + /* 0F 38 */ { GR3BTAB(0f38) }, /* 0F 39 */ { 0, &Ia_Invalid }, - /* 0F 3A */ { GR3BTAB(A5) }, - /* 0F 3B */ { 0, &Ia_Invalid }, - /* 0F 3C */ { 0, &Ia_Invalid }, - /* 0F 3D */ { 0, &Ia_Invalid }, - /* 0F 3E */ { 0, &Ia_Invalid }, - /* 0F 3F */ { 0, &Ia_Invalid }, + /* 0F 3A */ { GR3BTAB(0f3a) }, + /* 0F 3B */ { 0, &Ia_Invalid }, + /* 0F 3C */ { 0, &Ia_Invalid }, + /* 0F 3D */ { 0, &Ia_Invalid }, + /* 0F 3E */ { 0, &Ia_Invalid }, + /* 0F 3F */ { 0, &Ia_Invalid }, /* 0F 40 */ { 0, &Ia_cmovol_Gd_Ed }, /* 0F 41 */ { 0, &Ia_cmovnol_Gd_Ed }, /* 0F 42 */ { 0, &Ia_cmovcl_Gd_Ed }, @@ -5558,17 +5827,17 @@ static BxDisasmOpcodeTable_t BxDisasmOpcodes64q[256*2] = { /* 0F 32 */ { 0, &Ia_rdmsr }, /* 0F 33 */ { 0, &Ia_rdpmc }, /* 0F 34 */ { 0, &Ia_sysenter }, - /* 0F 35 */ { 0, &Ia_sysexit }, - /* 0F 36 */ { 0, &Ia_Invalid }, - /* 0F 37 */ { 0, &Ia_Invalid }, - /* 0F 38 */ { GR3BTAB(A4) }, + /* 0F 35 */ { 0, &Ia_sysexit }, + /* 0F 36 */ { 0, &Ia_Invalid }, + /* 0F 37 */ { 0, &Ia_Invalid }, + /* 0F 38 */ { GR3BTAB(0f38) }, /* 0F 39 */ { 0, &Ia_Invalid }, - /* 0F 3A */ { GR3BTAB(A5) }, - /* 0F 3B */ { 0, &Ia_Invalid }, - /* 0F 3C */ { 0, &Ia_Invalid }, - /* 0F 3D */ { 0, &Ia_Invalid }, - /* 0F 3E */ { 0, &Ia_Invalid }, - /* 0F 3F */ { 0, &Ia_Invalid }, + /* 0F 3A */ { GR3BTAB(0f3a) }, + /* 0F 3B */ { 0, &Ia_Invalid }, + /* 0F 3C */ { 0, &Ia_Invalid }, + /* 0F 3D */ { 0, &Ia_Invalid }, + /* 0F 3E */ { 0, &Ia_Invalid }, + /* 0F 3F */ { 0, &Ia_Invalid }, /* 0F 40 */ { 0, &Ia_cmovoq_Gq_Eq }, /* 0F 41 */ { 0, &Ia_cmovnoq_Gq_Eq }, /* 0F 42 */ { 0, &Ia_cmovcq_Gq_Eq },