minimize SSE tables, minor speedup in SSE code

This commit is contained in:
Stanislav Shwartsman 2009-02-26 21:57:01 +00:00
parent 15aec6efee
commit b9de22961c
6 changed files with 96 additions and 433 deletions

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////
// $Id: access32.cc,v 1.23 2009-02-17 19:20:46 sshwarts Exp $
// $Id: access32.cc,v 1.24 2009-02-26 21:56:53 sshwarts Exp $
/////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2008 Stanislav Shwartsman
@ -320,7 +320,7 @@ BX_CPU_C::write_virtual_dqword_aligned_32(unsigned s, Bit32u offset, const BxPac
if (offset <= (seg->cache.u.segment.limit_scaled-15)) {
accessOK:
laddr = BX_CPU_THIS_PTR get_laddr32(s, offset);
unsigned tlbIndex = BX_TLB_INDEX_OF(laddr, 15);
unsigned tlbIndex = BX_TLB_INDEX_OF(laddr, 0);
Bit32u lpf = AlignedAccessLPFOf(laddr, 15);
bx_TLB_entry *tlbEntry = &BX_CPU_THIS_PTR TLB.entry[tlbIndex];
if (tlbEntry->lpf == lpf) {
@ -643,7 +643,7 @@ BX_CPU_C::read_virtual_dqword_aligned_32(unsigned s, Bit32u offset, BxPackedXmmR
if (offset <= (seg->cache.u.segment.limit_scaled-15)) {
accessOK:
laddr = BX_CPU_THIS_PTR get_laddr32(s, offset);
unsigned tlbIndex = BX_TLB_INDEX_OF(laddr, 15);
unsigned tlbIndex = BX_TLB_INDEX_OF(laddr, 0);
Bit32u lpf = AlignedAccessLPFOf(laddr, 15);
bx_TLB_entry *tlbEntry = &BX_CPU_THIS_PTR TLB.entry[tlbIndex];
if (tlbEntry->lpf == lpf) {

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////
// $Id: access64.cc,v 1.22 2009-01-16 18:18:58 sshwarts Exp $
// $Id: access64.cc,v 1.23 2009-02-26 21:56:57 sshwarts Exp $
/////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2008 Stanislav Shwartsman
@ -261,7 +261,7 @@ BX_CPU_C::write_virtual_dqword_aligned_64(unsigned s, Bit64u offset, const BxPac
BX_INSTR_MEM_DATA_ACCESS(BX_CPU_ID, s, offset, 16, BX_WRITE);
Bit64u laddr = BX_CPU_THIS_PTR get_laddr64(s, offset);
unsigned tlbIndex = BX_TLB_INDEX_OF(laddr, 15);
unsigned tlbIndex = BX_TLB_INDEX_OF(laddr, 0);
Bit64u lpf = AlignedAccessLPFOf(laddr, 15);
bx_TLB_entry *tlbEntry = &BX_CPU_THIS_PTR TLB.entry[tlbIndex];
if (tlbEntry->lpf == lpf) {
@ -515,7 +515,7 @@ BX_CPU_C::read_virtual_dqword_aligned_64(unsigned s, Bit64u offset, BxPackedXmmR
BX_INSTR_MEM_DATA_ACCESS(BX_CPU_ID, s, offset, 16, BX_READ);
Bit64u laddr = BX_CPU_THIS_PTR get_laddr64(s, offset);
unsigned tlbIndex = BX_TLB_INDEX_OF(laddr, 15);
unsigned tlbIndex = BX_TLB_INDEX_OF(laddr, 0);
Bit64u lpf = AlignedAccessLPFOf(laddr, 15);
bx_TLB_entry *tlbEntry = &BX_CPU_THIS_PTR TLB.entry[tlbIndex];
if (tlbEntry->lpf == lpf) {

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////
// $Id: cpu.h,v 1.577 2009-02-20 22:00:42 sshwarts Exp $
// $Id: cpu.h,v 1.578 2009-02-26 21:56:58 sshwarts Exp $
/////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2001 MandrakeSoft S.A.
@ -3866,11 +3866,11 @@ enum {
#define BxGroupX 0x0070 // bits 6..4: opcode groups definition
#define BxGroupN 0x0010 // Group encoding: 001
#define BxPrefixSSE 0x0020 // Group encoding: 010
#define BxFPEscape 0x0030 // Group encoding: 011
#define BxRMGroup 0x0040 // Group encoding: 100
#define Bx3ByteOp 0x0050 // Group encoding: 101
#define BxOSizeGrp 0x0060 // Group encoding: 110
// Group encoding: 111
#define BxPrefixSSE66 0x0030 // Group encoding: 011
#define BxFPEscape 0x0040 // Group encoding: 100
#define BxRMGroup 0x0050 // Group encoding: 101
#define Bx3ByteOp 0x0060 // Group encoding: 110
#define BxOSizeGrp 0x0070 // Group encoding: 111
#define BxLockable 0x0080 // bit 7
#define BxArithDstRM 0x0100 // bit 8

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////
// $Id: fetchdecode.cc,v 1.222 2009-01-31 10:43:23 sshwarts Exp $
// $Id: fetchdecode.cc,v 1.223 2009-02-26 21:56:59 sshwarts Exp $
/////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2001 MandrakeSoft S.A.
@ -557,7 +557,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo32R[512*2] = {
#endif
/* 0F 39 /wr */ { 0, BX_IA_ERROR },
#if (BX_SUPPORT_SSE >= 4) || (BX_SUPPORT_SSE >= 3 && BX_SUPPORT_SSE_EXTENSION > 0)
/* 0F 3A /wr */ { Bx3ByteOp, BX_IA_ERROR, BxOpcode3ByteTable0f3a }, // 3-byte escape
/* 0F 3A /wr */ { Bx3ByteOp | BxImmediate_Ib, BX_IA_ERROR, BxOpcode3ByteTable0f3a }, // 3-byte escape
#else
/* 0F 3A /wr */ { 0, BX_IA_ERROR },
#endif
@ -1120,7 +1120,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo32R[512*2] = {
#endif
/* 0F 39 /dr */ { 0, BX_IA_ERROR },
#if (BX_SUPPORT_SSE >= 4) || (BX_SUPPORT_SSE >= 3 && BX_SUPPORT_SSE_EXTENSION > 0)
/* 0F 3A /dr */ { Bx3ByteOp, BX_IA_ERROR, BxOpcode3ByteTable0f3a }, // 3-byte escape
/* 0F 3A /dr */ { Bx3ByteOp | BxImmediate_Ib, BX_IA_ERROR, BxOpcode3ByteTable0f3a }, // 3-byte escape
#else
/* 0F 3A /dr */ { 0, BX_IA_ERROR },
#endif
@ -1690,7 +1690,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo32M[512*2] = {
#endif
/* 0F 39 /wm */ { 0, BX_IA_ERROR },
#if (BX_SUPPORT_SSE >= 4) || (BX_SUPPORT_SSE >= 3 && BX_SUPPORT_SSE_EXTENSION > 0)
/* 0F 3A /wm */ { Bx3ByteOp, BX_IA_ERROR, BxOpcode3ByteTable0f3a }, // 3-byte escape
/* 0F 3A /wm */ { Bx3ByteOp | BxImmediate_Ib, BX_IA_ERROR, BxOpcode3ByteTable0f3a }, // 3-byte escape
#else
/* 0F 3A /wm */ { 0, BX_IA_ERROR },
#endif
@ -2253,7 +2253,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo32M[512*2] = {
#endif
/* 0F 39 /dm */ { 0, BX_IA_ERROR },
#if (BX_SUPPORT_SSE >= 4) || (BX_SUPPORT_SSE >= 3 && BX_SUPPORT_SSE_EXTENSION > 0)
/* 0F 3A /dm */ { Bx3ByteOp, BX_IA_ERROR, BxOpcode3ByteTable0f3a }, // 3-byte escape
/* 0F 3A /dm */ { Bx3ByteOp | BxImmediate_Ib, BX_IA_ERROR, BxOpcode3ByteTable0f3a }, // 3-byte escape
#else
/* 0F 3A /dm */ { 0, BX_IA_ERROR },
#endif
@ -2778,6 +2778,12 @@ modrm_done:
break;
}
continue;
case BxPrefixSSE66:
/* For SSE opcodes with prefix 66 only */
if (sse_prefix != SSE_PREFIX_66) {
OpcodeInfoPtr = &(OpcodeInfoPtr->AnotherArray[0]); // BX_IA_ERROR
}
continue;
case BxFPEscape:
OpcodeInfoPtr = &(OpcodeInfoPtr->AnotherArray[b2 & 0x3f]);
break;

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////
// $Id: fetchdecode.h,v 1.82 2009-01-31 15:01:29 sshwarts Exp $
// $Id: fetchdecode.h,v 1.83 2009-02-26 21:57:00 sshwarts Exp $
/////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2005 Stanislav Shwartsman
@ -1848,30 +1848,6 @@ static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f380b[3] = {
/* F3 */ { 0, BX_IA_ERROR }
};
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3810[3] = {
/* 66 */ { 0, BX_IA_PBLENDVB_VdqWdq },
/* F2 */ { 0, BX_IA_ERROR },
/* F3 */ { 0, BX_IA_ERROR }
};
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3814[3] = {
/* 66 */ { 0, BX_IA_BLENDVPS_VpsWps },
/* F2 */ { 0, BX_IA_ERROR },
/* F3 */ { 0, BX_IA_ERROR }
};
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3815[3] = {
/* 66 */ { 0, BX_IA_BLENDVPD_VpdWpd },
/* F2 */ { 0, BX_IA_ERROR },
/* F3 */ { 0, BX_IA_ERROR }
};
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3817[3] = {
/* 66 */ { 0, BX_IA_PTEST_VdqWdq },
/* F2 */ { 0, BX_IA_ERROR },
/* F3 */ { 0, BX_IA_ERROR }
};
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f381c[3] = {
/* 66 */ { 0, BX_IA_PABSB_VdqWdq },
/* F2 */ { 0, BX_IA_ERROR },
@ -1890,198 +1866,6 @@ static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f381e[3] = {
/* F3 */ { 0, BX_IA_ERROR }
};
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3820[3] = {
/* 66 */ { 0, BX_IA_PMOVSXBW_VdqWq },
/* F2 */ { 0, BX_IA_ERROR },
/* F3 */ { 0, BX_IA_ERROR }
};
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3821[3] = {
/* 66 */ { 0, BX_IA_PMOVSXBD_VdqWd },
/* F2 */ { 0, BX_IA_ERROR },
/* F3 */ { 0, BX_IA_ERROR }
};
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3822[3] = {
/* 66 */ { 0, BX_IA_PMOVSXBQ_VdqWw },
/* F2 */ { 0, BX_IA_ERROR },
/* F3 */ { 0, BX_IA_ERROR }
};
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3823[3] = {
/* 66 */ { 0, BX_IA_PMOVSXWD_VdqWq },
/* F2 */ { 0, BX_IA_ERROR },
/* F3 */ { 0, BX_IA_ERROR }
};
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3824[3] = {
/* 66 */ { 0, BX_IA_PMOVSXWQ_VdqWd },
/* F2 */ { 0, BX_IA_ERROR },
/* F3 */ { 0, BX_IA_ERROR }
};
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3825[3] = {
/* 66 */ { 0, BX_IA_PMOVSXDQ_VdqWq },
/* F2 */ { 0, BX_IA_ERROR },
/* F3 */ { 0, BX_IA_ERROR }
};
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3828[3] = {
/* 66 */ { 0, BX_IA_PMULDQ_VdqWdq },
/* F2 */ { 0, BX_IA_ERROR },
/* F3 */ { 0, BX_IA_ERROR }
};
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3829[3] = {
/* 66 */ { 0, BX_IA_PCMPEQQ_VdqWdq },
/* F2 */ { 0, BX_IA_ERROR },
/* F3 */ { 0, BX_IA_ERROR }
};
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f382a[3] = {
/* 66 */ { 0, BX_IA_MOVNTDQA_VdqMdq },
/* F2 */ { 0, BX_IA_ERROR },
/* F3 */ { 0, BX_IA_ERROR }
};
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f382b[3] = {
/* 66 */ { 0, BX_IA_PACKUSDW_VdqWdq },
/* F2 */ { 0, BX_IA_ERROR },
/* F3 */ { 0, BX_IA_ERROR }
};
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3830[3] = {
/* 66 */ { 0, BX_IA_PMOVZXBW_VdqWq },
/* F2 */ { 0, BX_IA_ERROR },
/* F3 */ { 0, BX_IA_ERROR }
};
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3831[3] = {
/* 66 */ { 0, BX_IA_PMOVZXBD_VdqWd },
/* F2 */ { 0, BX_IA_ERROR },
/* F3 */ { 0, BX_IA_ERROR }
};
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3832[3] = {
/* 66 */ { 0, BX_IA_PMOVZXBQ_VdqWw },
/* F2 */ { 0, BX_IA_ERROR },
/* F3 */ { 0, BX_IA_ERROR }
};
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3833[3] = {
/* 66 */ { 0, BX_IA_PMOVZXWD_VdqWq },
/* F2 */ { 0, BX_IA_ERROR },
/* F3 */ { 0, BX_IA_ERROR }
};
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3834[3] = {
/* 66 */ { 0, BX_IA_PMOVZXWQ_VdqWd },
/* F2 */ { 0, BX_IA_ERROR },
/* F3 */ { 0, BX_IA_ERROR }
};
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3835[3] = {
/* 66 */ { 0, BX_IA_PMOVZXDQ_VdqWq },
/* F2 */ { 0, BX_IA_ERROR },
/* F3 */ { 0, BX_IA_ERROR }
};
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3837[3] = {
/* 66 */ { 0, BX_IA_PCMPGTQ_VdqWdq },
/* F2 */ { 0, BX_IA_ERROR },
/* F3 */ { 0, BX_IA_ERROR }
};
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3838[3] = {
/* 66 */ { 0, BX_IA_PMINSB_VdqWdq },
/* F2 */ { 0, BX_IA_ERROR },
/* F3 */ { 0, BX_IA_ERROR }
};
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3839[3] = {
/* 66 */ { 0, BX_IA_PMINSD_VdqWdq },
/* F2 */ { 0, BX_IA_ERROR },
/* F3 */ { 0, BX_IA_ERROR }
};
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f383a[3] = {
/* 66 */ { 0, BX_IA_PMINUW_VdqWdq },
/* F2 */ { 0, BX_IA_ERROR },
/* F3 */ { 0, BX_IA_ERROR }
};
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f383b[3] = {
/* 66 */ { 0, BX_IA_PMINUD_VdqWdq },
/* F2 */ { 0, BX_IA_ERROR },
/* F3 */ { 0, BX_IA_ERROR }
};
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f383c[3] = {
/* 66 */ { 0, BX_IA_PMAXSB_VdqWdq },
/* F2 */ { 0, BX_IA_ERROR },
/* F3 */ { 0, BX_IA_ERROR }
};
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f383d[3] = {
/* 66 */ { 0, BX_IA_PMAXSD_VdqWdq },
/* F2 */ { 0, BX_IA_ERROR },
/* F3 */ { 0, BX_IA_ERROR }
};
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f383e[3] = {
/* 66 */ { 0, BX_IA_PMAXUW_VdqWdq },
/* F2 */ { 0, BX_IA_ERROR },
/* F3 */ { 0, BX_IA_ERROR }
};
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f383f[3] = {
/* 66 */ { 0, BX_IA_PMAXUD_VdqWdq },
/* F2 */ { 0, BX_IA_ERROR },
/* F3 */ { 0, BX_IA_ERROR }
};
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3840[3] = {
/* 66 */ { 0, BX_IA_PMULLD_VdqWdq },
/* F2 */ { 0, BX_IA_ERROR },
/* F3 */ { 0, BX_IA_ERROR }
};
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3841[3] = {
/* 66 */ { 0, BX_IA_PHMINPOSUW_VdqWdq },
/* F2 */ { 0, BX_IA_ERROR },
/* F3 */ { 0, BX_IA_ERROR }
};
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f38db[3] = {
/* 66 */ { 0, BX_IA_AESIMC_VdqWdq }, // AES
/* F2 */ { 0, BX_IA_ERROR },
/* F3 */ { 0, BX_IA_ERROR }
};
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f38dc[3] = {
/* 66 */ { 0, BX_IA_AESENC_VdqWdq }, // AES
/* F2 */ { 0, BX_IA_ERROR },
/* F3 */ { 0, BX_IA_ERROR }
};
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f38dd[3] = {
/* 66 */ { 0, BX_IA_AESENCLAST_VdqWdq }, // AES
/* F2 */ { 0, BX_IA_ERROR },
/* F3 */ { 0, BX_IA_ERROR }
};
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f38de[3] = {
/* 66 */ { 0, BX_IA_AESDEC_VdqWdq }, // AES
/* F2 */ { 0, BX_IA_ERROR },
/* F3 */ { 0, BX_IA_ERROR }
};
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f38df[3] = {
/* 66 */ { 0, BX_IA_AESDECLAST_VdqWdq }, // AES
/* F2 */ { 0, BX_IA_ERROR },
/* F3 */ { 0, BX_IA_ERROR }
};
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f38f0[3] = {
/* 66 */ { 0, BX_IA_ERROR },
/* F2 */ { 0, BX_IA_CRC32_GdEb },
@ -2124,145 +1908,12 @@ static const BxOpcodeInfo_t BxOpcodeGroupOsize0f38f1[BX_SUPPORT_X86_64 + 2] = {
#endif
};
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3a08[3] = {
/* 66 */ { 0, BX_IA_ROUNDPS_VpsWpsIb },
/* F2 */ { 0, BX_IA_ERROR },
/* F3 */ { 0, BX_IA_ERROR }
};
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3a09[3] = {
/* 66 */ { 0, BX_IA_ROUNDPD_VpdWpdIb },
/* F2 */ { 0, BX_IA_ERROR },
/* F3 */ { 0, BX_IA_ERROR }
};
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3a0a[3] = {
/* 66 */ { 0, BX_IA_ROUNDSS_VssWssIb },
/* F2 */ { 0, BX_IA_ERROR },
/* F3 */ { 0, BX_IA_ERROR }
};
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3a0b[3] = {
/* 66 */ { 0, BX_IA_ROUNDSD_VsdWsdIb },
/* F2 */ { 0, BX_IA_ERROR },
/* F3 */ { 0, BX_IA_ERROR }
};
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3a0c[3] = {
/* 66 */ { 0, BX_IA_BLENDPS_VpsWpsIb },
/* F2 */ { 0, BX_IA_ERROR },
/* F3 */ { 0, BX_IA_ERROR }
};
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3a0d[3] = {
/* 66 */ { 0, BX_IA_BLENDPD_VpdWpdIb },
/* F2 */ { 0, BX_IA_ERROR },
/* F3 */ { 0, BX_IA_ERROR }
};
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3a0e[3] = {
/* 66 */ { 0, BX_IA_PBLENDW_VdqWdqIb },
/* F2 */ { 0, BX_IA_ERROR },
/* F3 */ { 0, BX_IA_ERROR }
};
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3a0f[3] = {
/* 66 */ { 0, BX_IA_PALIGNR_VdqWdqIb },
/* F2 */ { 0, BX_IA_ERROR },
/* F3 */ { 0, BX_IA_ERROR }
};
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3a14[3] = {
/* 66 */ { 0, BX_IA_PEXTRB_HbdUdqIb },
/* F2 */ { 0, BX_IA_ERROR },
/* F3 */ { 0, BX_IA_ERROR }
};
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3a15[3] = {
/* 66 */ { 0, BX_IA_PEXTRW_HwdUdqIb },
/* F2 */ { 0, BX_IA_ERROR },
/* F3 */ { 0, BX_IA_ERROR }
};
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3a16[3] = {
/* 66 */ { 0, BX_IA_PEXTRD_HdUdqIb },
/* F2 */ { 0, BX_IA_ERROR },
/* F3 */ { 0, BX_IA_ERROR }
};
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3a17[3] = {
/* 66 */ { 0, BX_IA_EXTRACTPS_HdUpsIb },
/* F2 */ { 0, BX_IA_ERROR },
/* F3 */ { 0, BX_IA_ERROR }
};
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3a20[3] = {
/* 66 */ { 0, BX_IA_PINSRB_VdqEbIb },
/* F2 */ { 0, BX_IA_ERROR },
/* F3 */ { 0, BX_IA_ERROR }
};
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3a21[3] = {
/* 66 */ { 0, BX_IA_INSERTPS_VpsWssIb },
/* F2 */ { 0, BX_IA_ERROR },
/* F3 */ { 0, BX_IA_ERROR }
};
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3a22[3] = {
/* 66 */ { 0, BX_IA_PINSRD_VdqEdIb },
/* F2 */ { 0, BX_IA_ERROR },
/* F3 */ { 0, BX_IA_ERROR }
};
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3a40[3] = {
/* 66 */ { 0, BX_IA_DPPS_VpsWpsIb },
/* F2 */ { 0, BX_IA_ERROR },
/* F3 */ { 0, BX_IA_ERROR }
};
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3a41[3] = {
/* 66 */ { 0, BX_IA_DPPD_VpdWpdIb },
/* F2 */ { 0, BX_IA_ERROR },
/* F3 */ { 0, BX_IA_ERROR }
};
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3a42[3] = {
/* 66 */ { 0, BX_IA_MPSADBW_VdqWdqIb },
/* F2 */ { 0, BX_IA_ERROR },
/* F3 */ { 0, BX_IA_ERROR }
};
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3a60[3] = {
/* 66 */ { 0, BX_IA_PCMPESTRM_VdqWdqIb },
/* F2 */ { 0, BX_IA_ERROR },
/* F3 */ { 0, BX_IA_ERROR }
};
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3a61[3] = {
/* 66 */ { 0, BX_IA_PCMPESTRI_VdqWdqIb },
/* F2 */ { 0, BX_IA_ERROR },
/* F3 */ { 0, BX_IA_ERROR }
};
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3a62[3] = {
/* 66 */ { 0, BX_IA_PCMPISTRM_VdqWdqIb },
/* F2 */ { 0, BX_IA_ERROR },
/* F3 */ { 0, BX_IA_ERROR }
};
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3a63[3] = {
/* 66 */ { 0, BX_IA_PCMPISTRI_VdqWdqIb },
/* F2 */ { 0, BX_IA_ERROR },
/* F3 */ { 0, BX_IA_ERROR }
};
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3adf[3] = {
/* 66 */ { 0, BX_IA_AESKEYGENASSIST_VdqWdqIb },
/* F2 */ { 0, BX_IA_ERROR },
/* F3 */ { 0, BX_IA_ERROR }
};
/* ************************************************************************ */
/* 3-byte opcode table (Table A-4, 0F 38) */
@ -2283,14 +1934,14 @@ static const BxOpcodeInfo_t BxOpcode3ByteTable0f38[256] = {
/* 0D */ { 0, BX_IA_ERROR },
/* 0E */ { 0, BX_IA_ERROR },
/* 0F */ { 0, BX_IA_ERROR },
/* 10 */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3810 },
/* 10 */ { BxPrefixSSE66, BX_IA_PBLENDVB_VdqWdq, BxOpcodeGroupSSE_ERR },
/* 11 */ { 0, BX_IA_ERROR },
/* 12 */ { 0, BX_IA_ERROR },
/* 13 */ { 0, BX_IA_ERROR },
/* 14 */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3814 },
/* 15 */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3815 },
/* 14 */ { BxPrefixSSE66, BX_IA_BLENDVPS_VpsWps, BxOpcodeGroupSSE_ERR },
/* 15 */ { BxPrefixSSE66, BX_IA_BLENDVPD_VpdWpd, BxOpcodeGroupSSE_ERR },
/* 16 */ { 0, BX_IA_ERROR },
/* 17 */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3817 },
/* 17 */ { BxPrefixSSE66, BX_IA_PTEST_VdqWdq, BxOpcodeGroupSSE_ERR },
/* 18 */ { 0, BX_IA_ERROR },
/* 19 */ { 0, BX_IA_ERROR },
/* 1A */ { 0, BX_IA_ERROR },
@ -2299,40 +1950,40 @@ static const BxOpcodeInfo_t BxOpcode3ByteTable0f38[256] = {
/* 1D */ { BxPrefixSSE, BX_IA_PABSW_PqQq, BxOpcodeGroupSSE_0f381d },
/* 1E */ { BxPrefixSSE, BX_IA_PABSD_PqQq, BxOpcodeGroupSSE_0f381e },
/* 1F */ { 0, BX_IA_ERROR },
/* 20 */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3820 },
/* 21 */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3821 },
/* 22 */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3822 },
/* 23 */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3823 },
/* 24 */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3824 },
/* 25 */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3825 },
/* 20 */ { BxPrefixSSE66, BX_IA_PMOVSXBW_VdqWq, BxOpcodeGroupSSE_ERR },
/* 21 */ { BxPrefixSSE66, BX_IA_PMOVSXBD_VdqWd, BxOpcodeGroupSSE_ERR },
/* 22 */ { BxPrefixSSE66, BX_IA_PMOVSXBQ_VdqWw, BxOpcodeGroupSSE_ERR },
/* 23 */ { BxPrefixSSE66, BX_IA_PMOVSXWD_VdqWq, BxOpcodeGroupSSE_ERR },
/* 24 */ { BxPrefixSSE66, BX_IA_PMOVSXWQ_VdqWd, BxOpcodeGroupSSE_ERR },
/* 25 */ { BxPrefixSSE66, BX_IA_PMOVSXDQ_VdqWq, BxOpcodeGroupSSE_ERR },
/* 26 */ { 0, BX_IA_ERROR },
/* 27 */ { 0, BX_IA_ERROR },
/* 28 */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3828 },
/* 29 */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3829 },
/* 2A */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f382a },
/* 2B */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f382b },
/* 28 */ { BxPrefixSSE66, BX_IA_PMULDQ_VdqWdq, BxOpcodeGroupSSE_ERR },
/* 29 */ { BxPrefixSSE66, BX_IA_PCMPEQQ_VdqWdq, BxOpcodeGroupSSE_ERR },
/* 2A */ { BxPrefixSSE66, BX_IA_MOVNTDQA_VdqMdq, BxOpcodeGroupSSE_ERR },
/* 2B */ { BxPrefixSSE66, BX_IA_PACKUSDW_VdqWdq, BxOpcodeGroupSSE_ERR },
/* 2C */ { 0, BX_IA_ERROR },
/* 2D */ { 0, BX_IA_ERROR },
/* 2E */ { 0, BX_IA_ERROR },
/* 2F */ { 0, BX_IA_ERROR },
/* 30 */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3830 },
/* 31 */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3831 },
/* 32 */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3832 },
/* 33 */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3833 },
/* 34 */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3834 },
/* 35 */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3835 },
/* 30 */ { BxPrefixSSE66, BX_IA_PMOVZXBW_VdqWq, BxOpcodeGroupSSE_ERR },
/* 31 */ { BxPrefixSSE66, BX_IA_PMOVZXBD_VdqWd, BxOpcodeGroupSSE_ERR },
/* 32 */ { BxPrefixSSE66, BX_IA_PMOVZXBQ_VdqWw, BxOpcodeGroupSSE_ERR },
/* 33 */ { BxPrefixSSE66, BX_IA_PMOVZXWD_VdqWq, BxOpcodeGroupSSE_ERR },
/* 34 */ { BxPrefixSSE66, BX_IA_PMOVZXWQ_VdqWd, BxOpcodeGroupSSE_ERR },
/* 35 */ { BxPrefixSSE66, BX_IA_PMOVZXDQ_VdqWq, BxOpcodeGroupSSE_ERR },
/* 36 */ { 0, BX_IA_ERROR },
/* 37 */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3837 },
/* 38 */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3838 },
/* 39 */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3839 },
/* 3A */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f383a },
/* 3B */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f383b },
/* 3C */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f383c },
/* 3D */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f383d },
/* 3E */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f383e },
/* 3F */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f383f },
/* 40 */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3840 },
/* 41 */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3841 },
/* 37 */ { BxPrefixSSE66, BX_IA_PCMPGTQ_VdqWdq, BxOpcodeGroupSSE_ERR },
/* 38 */ { BxPrefixSSE66, BX_IA_PMINSB_VdqWdq, BxOpcodeGroupSSE_ERR },
/* 39 */ { BxPrefixSSE66, BX_IA_PMINSD_VdqWdq, BxOpcodeGroupSSE_ERR },
/* 3A */ { BxPrefixSSE66, BX_IA_PMINUW_VdqWdq, BxOpcodeGroupSSE_ERR },
/* 3B */ { BxPrefixSSE66, BX_IA_PMINUD_VdqWdq, BxOpcodeGroupSSE_ERR },
/* 3C */ { BxPrefixSSE66, BX_IA_PMAXSB_VdqWdq, BxOpcodeGroupSSE_ERR },
/* 3D */ { BxPrefixSSE66, BX_IA_PMAXSD_VdqWdq, BxOpcodeGroupSSE_ERR },
/* 3E */ { BxPrefixSSE66, BX_IA_PMAXUW_VdqWdq, BxOpcodeGroupSSE_ERR },
/* 3F */ { BxPrefixSSE66, BX_IA_PMAXUD_VdqWdq, BxOpcodeGroupSSE_ERR },
/* 40 */ { BxPrefixSSE66, BX_IA_PMULLD_VdqWdq, BxOpcodeGroupSSE_ERR },
/* 41 */ { BxPrefixSSE66, BX_IA_PHMINPOSUW_VdqWdq, BxOpcodeGroupSSE_ERR },
/* 42 */ { 0, BX_IA_ERROR },
/* 43 */ { 0, BX_IA_ERROR },
/* 44 */ { 0, BX_IA_ERROR },
@ -2486,11 +2137,11 @@ static const BxOpcodeInfo_t BxOpcode3ByteTable0f38[256] = {
/* D8 */ { 0, BX_IA_ERROR },
/* D9 */ { 0, BX_IA_ERROR },
/* DA */ { 0, BX_IA_ERROR },
/* DB */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f38db },
/* DC */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f38dc },
/* DD */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f38dd },
/* DE */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f38de },
/* DF */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f38df },
/* DB */ { BxPrefixSSE66, BX_IA_AESIMC_VdqWdq, BxOpcodeGroupSSE_ERR }, // AES
/* DC */ { BxPrefixSSE66, BX_IA_AESENC_VdqWdq, BxOpcodeGroupSSE_ERR }, // AES
/* DD */ { BxPrefixSSE66, BX_IA_AESENCLAST_VdqWdq, BxOpcodeGroupSSE_ERR }, // AES
/* DE */ { BxPrefixSSE66, BX_IA_AESDEC_VdqWdq, BxOpcodeGroupSSE_ERR }, // AES
/* DF */ { BxPrefixSSE66, BX_IA_AESDECLAST_VdqWdq, BxOpcodeGroupSSE_ERR }, // AES
/* E0 */ { 0, BX_IA_ERROR },
/* E1 */ { 0, BX_IA_ERROR },
/* E2 */ { 0, BX_IA_ERROR },
@ -2537,22 +2188,22 @@ static const BxOpcodeInfo_t BxOpcode3ByteTable0f3a[256] = {
/* 05 */ { 0, BX_IA_ERROR },
/* 06 */ { 0, BX_IA_ERROR },
/* 07 */ { 0, BX_IA_ERROR },
/* 08 */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3a08 },
/* 09 */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3a09 },
/* 0A */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3a0a },
/* 0B */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3a0b },
/* 0C */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3a0c },
/* 0D */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3a0d },
/* 0E */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3a0e },
/* 0F */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_PALIGNR_PqQqIb, BxOpcodeGroupSSE_0f3a0f },
/* 08 */ { BxPrefixSSE66, BX_IA_ROUNDPS_VpsWpsIb, BxOpcodeGroupSSE_ERR },
/* 09 */ { BxPrefixSSE66, BX_IA_ROUNDPD_VpdWpdIb, BxOpcodeGroupSSE_ERR },
/* 0A */ { BxPrefixSSE66, BX_IA_ROUNDSS_VssWssIb, BxOpcodeGroupSSE_ERR },
/* 0B */ { BxPrefixSSE66, BX_IA_ROUNDSD_VsdWsdIb, BxOpcodeGroupSSE_ERR },
/* 0C */ { BxPrefixSSE66, BX_IA_BLENDPS_VpsWpsIb, BxOpcodeGroupSSE_ERR },
/* 0D */ { BxPrefixSSE66, BX_IA_BLENDPD_VpdWpdIb, BxOpcodeGroupSSE_ERR },
/* 0E */ { BxPrefixSSE66, BX_IA_PBLENDW_VdqWdqIb, BxOpcodeGroupSSE_ERR },
/* 0F */ { BxPrefixSSE, BX_IA_PALIGNR_PqQqIb, BxOpcodeGroupSSE_0f3a0f },
/* 10 */ { 0, BX_IA_ERROR },
/* 11 */ { 0, BX_IA_ERROR },
/* 12 */ { 0, BX_IA_ERROR },
/* 13 */ { 0, BX_IA_ERROR },
/* 14 */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3a14 },
/* 15 */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3a15 },
/* 16 */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3a16 },
/* 17 */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3a17 },
/* 14 */ { BxPrefixSSE66, BX_IA_PEXTRB_HbdUdqIb, BxOpcodeGroupSSE_ERR },
/* 15 */ { BxPrefixSSE66, BX_IA_PEXTRW_HwdUdqIb, BxOpcodeGroupSSE_ERR },
/* 16 */ { BxPrefixSSE66, BX_IA_PEXTRD_HdUdqIb, BxOpcodeGroupSSE_ERR },
/* 17 */ { BxPrefixSSE66, BX_IA_EXTRACTPS_HdUpsIb, BxOpcodeGroupSSE_ERR },
/* 18 */ { 0, BX_IA_ERROR },
/* 19 */ { 0, BX_IA_ERROR },
/* 1A */ { 0, BX_IA_ERROR },
@ -2561,9 +2212,9 @@ static const BxOpcodeInfo_t BxOpcode3ByteTable0f3a[256] = {
/* 1D */ { 0, BX_IA_ERROR },
/* 1E */ { 0, BX_IA_ERROR },
/* 1F */ { 0, BX_IA_ERROR },
/* 20 */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3a20 },
/* 21 */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3a21 },
/* 22 */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3a22 },
/* 20 */ { BxPrefixSSE66, BX_IA_PINSRB_VdqEbIb, BxOpcodeGroupSSE_ERR },
/* 21 */ { BxPrefixSSE66, BX_IA_INSERTPS_VpsWssIb, BxOpcodeGroupSSE_ERR },
/* 22 */ { BxPrefixSSE66, BX_IA_PINSRD_VdqEdIb, BxOpcodeGroupSSE_ERR },
/* 23 */ { 0, BX_IA_ERROR },
/* 24 */ { 0, BX_IA_ERROR },
/* 25 */ { 0, BX_IA_ERROR },
@ -2593,9 +2244,9 @@ static const BxOpcodeInfo_t BxOpcode3ByteTable0f3a[256] = {
/* 3D */ { 0, BX_IA_ERROR },
/* 3E */ { 0, BX_IA_ERROR },
/* 3F */ { 0, BX_IA_ERROR },
/* 40 */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3a40 },
/* 41 */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3a41 },
/* 42 */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3a42 },
/* 40 */ { BxPrefixSSE66, BX_IA_DPPS_VpsWpsIb, BxOpcodeGroupSSE_ERR },
/* 41 */ { BxPrefixSSE66, BX_IA_DPPD_VpdWpdIb, BxOpcodeGroupSSE_ERR },
/* 42 */ { BxPrefixSSE66, BX_IA_MPSADBW_VdqWdqIb, BxOpcodeGroupSSE_ERR },
/* 43 */ { 0, BX_IA_ERROR },
/* 44 */ { 0, BX_IA_ERROR },
/* 45 */ { 0, BX_IA_ERROR },
@ -2625,10 +2276,10 @@ static const BxOpcodeInfo_t BxOpcode3ByteTable0f3a[256] = {
/* 5D */ { 0, BX_IA_ERROR },
/* 5E */ { 0, BX_IA_ERROR },
/* 5F */ { 0, BX_IA_ERROR },
/* 60 */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3a60 },
/* 61 */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3a61 },
/* 62 */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3a62 },
/* 63 */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3a63 },
/* 60 */ { BxPrefixSSE66, BX_IA_PCMPESTRM_VdqWdqIb, BxOpcodeGroupSSE_ERR },
/* 61 */ { BxPrefixSSE66, BX_IA_PCMPESTRI_VdqWdqIb, BxOpcodeGroupSSE_ERR },
/* 62 */ { BxPrefixSSE66, BX_IA_PCMPISTRM_VdqWdqIb, BxOpcodeGroupSSE_ERR },
/* 63 */ { BxPrefixSSE66, BX_IA_PCMPISTRI_VdqWdqIb, BxOpcodeGroupSSE_ERR },
/* 64 */ { 0, BX_IA_ERROR },
/* 65 */ { 0, BX_IA_ERROR },
/* 66 */ { 0, BX_IA_ERROR },
@ -2752,7 +2403,7 @@ static const BxOpcodeInfo_t BxOpcode3ByteTable0f3a[256] = {
/* DC */ { 0, BX_IA_ERROR },
/* DD */ { 0, BX_IA_ERROR },
/* DE */ { 0, BX_IA_ERROR },
/* DF */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3adf },
/* DF */ { BxPrefixSSE66, BX_IA_AESKEYGENASSIST_VdqWdqIb, BxOpcodeGroupSSE_ERR }, // AES
/* E0 */ { 0, BX_IA_ERROR },
/* E1 */ { 0, BX_IA_ERROR },
/* E2 */ { 0, BX_IA_ERROR },

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////
// $Id: fetchdecode64.cc,v 1.225 2009-02-06 15:03:47 sshwarts Exp $
// $Id: fetchdecode64.cc,v 1.226 2009-02-26 21:57:01 sshwarts Exp $
/////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2001 MandrakeSoft S.A.
@ -505,7 +505,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64R[512*3] = {
#endif
/* 0F 39 /wr */ { 0, BX_IA_ERROR },
#if (BX_SUPPORT_SSE >= 4) || (BX_SUPPORT_SSE >= 3 && BX_SUPPORT_SSE_EXTENSION > 0)
/* 0F 3A /wr */ { Bx3ByteOp, BX_IA_ERROR, BxOpcode3ByteTable0f3a }, // 3-byte escape
/* 0F 3A /wr */ { Bx3ByteOp | BxImmediate_Ib, BX_IA_ERROR, BxOpcode3ByteTable0f3a }, // 3-byte escape
#else
/* 0F 3A /wr */ { 0, BX_IA_ERROR },
#endif
@ -1032,7 +1032,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64R[512*3] = {
#endif
/* 0F 39 /dr */ { 0, BX_IA_ERROR },
#if (BX_SUPPORT_SSE >= 4) || (BX_SUPPORT_SSE >= 3 && BX_SUPPORT_SSE_EXTENSION > 0)
/* 0F 3A /dr */ { Bx3ByteOp, BX_IA_ERROR, BxOpcode3ByteTable0f3a }, // 3-byte escape
/* 0F 3A /dr */ { Bx3ByteOp | BxImmediate_Ib, BX_IA_ERROR, BxOpcode3ByteTable0f3a }, // 3-byte escape
#else
/* 0F 3A /dr */ { 0, BX_IA_ERROR },
#endif
@ -1559,7 +1559,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64R[512*3] = {
#endif
/* 0F 39 /qr */ { 0, BX_IA_ERROR },
#if (BX_SUPPORT_SSE >= 4) || (BX_SUPPORT_SSE >= 3 && BX_SUPPORT_SSE_EXTENSION > 0)
/* 0F 3A /qr */ { Bx3ByteOp, BX_IA_ERROR, BxOpcode3ByteTable0f3a }, // 3-byte escape
/* 0F 3A /qr */ { Bx3ByteOp | BxImmediate_Ib, BX_IA_ERROR, BxOpcode3ByteTable0f3a }, // 3-byte escape
#else
/* 0F 3A /qr */ { 0, BX_IA_ERROR },
#endif
@ -2092,7 +2092,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64M[512*3] = {
#endif
/* 0F 39 /wm */ { 0, BX_IA_ERROR },
#if (BX_SUPPORT_SSE >= 4) || (BX_SUPPORT_SSE >= 3 && BX_SUPPORT_SSE_EXTENSION > 0)
/* 0F 3A /wm */ { Bx3ByteOp, BX_IA_ERROR, BxOpcode3ByteTable0f3a }, // 3-byte escape
/* 0F 3A /wm */ { Bx3ByteOp | BxImmediate_Ib, BX_IA_ERROR, BxOpcode3ByteTable0f3a }, // 3-byte escape
#else
/* 0F 3A /wm */ { 0, BX_IA_ERROR },
#endif
@ -2619,7 +2619,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64M[512*3] = {
#endif
/* 0F 39 /dm */ { 0, BX_IA_ERROR },
#if (BX_SUPPORT_SSE >= 4) || (BX_SUPPORT_SSE >= 3 && BX_SUPPORT_SSE_EXTENSION > 0)
/* 0F 3A /dm */ { Bx3ByteOp, BX_IA_ERROR, BxOpcode3ByteTable0f3a }, // 3-byte escape
/* 0F 3A /dm */ { Bx3ByteOp | BxImmediate_Ib, BX_IA_ERROR, BxOpcode3ByteTable0f3a }, // 3-byte escape
#else
/* 0F 3A /dm */ { 0, BX_IA_ERROR },
#endif
@ -3146,7 +3146,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64M[512*3] = {
#endif
/* 0F 39 /qm */ { 0, BX_IA_ERROR },
#if (BX_SUPPORT_SSE >= 4) || (BX_SUPPORT_SSE >= 3 && BX_SUPPORT_SSE_EXTENSION > 0)
/* 0F 3A /qm */ { Bx3ByteOp, BX_IA_ERROR, BxOpcode3ByteTable0f3a }, // 3-byte escape
/* 0F 3A /qm */ { Bx3ByteOp | BxImmediate_Ib, BX_IA_ERROR, BxOpcode3ByteTable0f3a }, // 3-byte escape
#else
/* 0F 3A /qm */ { 0, BX_IA_ERROR },
#endif
@ -3693,6 +3693,12 @@ modrm_done:
break;
}
continue;
case BxPrefixSSE66:
/* For SSE opcodes with prefix 66 only */
if (sse_prefix != SSE_PREFIX_66) {
OpcodeInfoPtr = &(OpcodeInfoPtr->AnotherArray[0]); // BX_IA_ERROR
}
continue;
case BxFPEscape:
OpcodeInfoPtr = &(OpcodeInfoPtr->AnotherArray[b2 & 0x3f]);
break;