Reorganize 3-byte opcode tables - bigger tables but easier to maintain them

This commit is contained in:
Stanislav Shwartsman 2008-02-29 03:02:03 +00:00
parent 5813db0bad
commit 405fcfd75d
8 changed files with 1062 additions and 530 deletions

View File

@ -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

View File

@ -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)

View File

@ -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:

View File

@ -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)

View File

@ -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:

View File

@ -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 <stdio.h>
@ -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:

View File

@ -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
/* ************************************************************************ */

View File

@ -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 },