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 // 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)) { if (offset <= (seg->cache.u.segment.limit_scaled-15)) {
accessOK: accessOK:
laddr = BX_CPU_THIS_PTR get_laddr32(s, offset); 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); Bit32u lpf = AlignedAccessLPFOf(laddr, 15);
bx_TLB_entry *tlbEntry = &BX_CPU_THIS_PTR TLB.entry[tlbIndex]; bx_TLB_entry *tlbEntry = &BX_CPU_THIS_PTR TLB.entry[tlbIndex];
if (tlbEntry->lpf == lpf) { 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)) { if (offset <= (seg->cache.u.segment.limit_scaled-15)) {
accessOK: accessOK:
laddr = BX_CPU_THIS_PTR get_laddr32(s, offset); 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); Bit32u lpf = AlignedAccessLPFOf(laddr, 15);
bx_TLB_entry *tlbEntry = &BX_CPU_THIS_PTR TLB.entry[tlbIndex]; bx_TLB_entry *tlbEntry = &BX_CPU_THIS_PTR TLB.entry[tlbIndex];
if (tlbEntry->lpf == lpf) { 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 // 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); BX_INSTR_MEM_DATA_ACCESS(BX_CPU_ID, s, offset, 16, BX_WRITE);
Bit64u laddr = BX_CPU_THIS_PTR get_laddr64(s, offset); 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); Bit64u lpf = AlignedAccessLPFOf(laddr, 15);
bx_TLB_entry *tlbEntry = &BX_CPU_THIS_PTR TLB.entry[tlbIndex]; bx_TLB_entry *tlbEntry = &BX_CPU_THIS_PTR TLB.entry[tlbIndex];
if (tlbEntry->lpf == lpf) { 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); BX_INSTR_MEM_DATA_ACCESS(BX_CPU_ID, s, offset, 16, BX_READ);
Bit64u laddr = BX_CPU_THIS_PTR get_laddr64(s, offset); 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); Bit64u lpf = AlignedAccessLPFOf(laddr, 15);
bx_TLB_entry *tlbEntry = &BX_CPU_THIS_PTR TLB.entry[tlbIndex]; bx_TLB_entry *tlbEntry = &BX_CPU_THIS_PTR TLB.entry[tlbIndex];
if (tlbEntry->lpf == lpf) { 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. // Copyright (C) 2001 MandrakeSoft S.A.
@ -3866,11 +3866,11 @@ enum {
#define BxGroupX 0x0070 // bits 6..4: opcode groups definition #define BxGroupX 0x0070 // bits 6..4: opcode groups definition
#define BxGroupN 0x0010 // Group encoding: 001 #define BxGroupN 0x0010 // Group encoding: 001
#define BxPrefixSSE 0x0020 // Group encoding: 010 #define BxPrefixSSE 0x0020 // Group encoding: 010
#define BxFPEscape 0x0030 // Group encoding: 011 #define BxPrefixSSE66 0x0030 // Group encoding: 011
#define BxRMGroup 0x0040 // Group encoding: 100 #define BxFPEscape 0x0040 // Group encoding: 100
#define Bx3ByteOp 0x0050 // Group encoding: 101 #define BxRMGroup 0x0050 // Group encoding: 101
#define BxOSizeGrp 0x0060 // Group encoding: 110 #define Bx3ByteOp 0x0060 // Group encoding: 110
// Group encoding: 111 #define BxOSizeGrp 0x0070 // Group encoding: 111
#define BxLockable 0x0080 // bit 7 #define BxLockable 0x0080 // bit 7
#define BxArithDstRM 0x0100 // bit 8 #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. // Copyright (C) 2001 MandrakeSoft S.A.
@ -557,7 +557,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo32R[512*2] = {
#endif #endif
/* 0F 39 /wr */ { 0, BX_IA_ERROR }, /* 0F 39 /wr */ { 0, BX_IA_ERROR },
#if (BX_SUPPORT_SSE >= 4) || (BX_SUPPORT_SSE >= 3 && BX_SUPPORT_SSE_EXTENSION > 0) #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 #else
/* 0F 3A /wr */ { 0, BX_IA_ERROR }, /* 0F 3A /wr */ { 0, BX_IA_ERROR },
#endif #endif
@ -1120,7 +1120,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo32R[512*2] = {
#endif #endif
/* 0F 39 /dr */ { 0, BX_IA_ERROR }, /* 0F 39 /dr */ { 0, BX_IA_ERROR },
#if (BX_SUPPORT_SSE >= 4) || (BX_SUPPORT_SSE >= 3 && BX_SUPPORT_SSE_EXTENSION > 0) #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 #else
/* 0F 3A /dr */ { 0, BX_IA_ERROR }, /* 0F 3A /dr */ { 0, BX_IA_ERROR },
#endif #endif
@ -1690,7 +1690,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo32M[512*2] = {
#endif #endif
/* 0F 39 /wm */ { 0, BX_IA_ERROR }, /* 0F 39 /wm */ { 0, BX_IA_ERROR },
#if (BX_SUPPORT_SSE >= 4) || (BX_SUPPORT_SSE >= 3 && BX_SUPPORT_SSE_EXTENSION > 0) #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 #else
/* 0F 3A /wm */ { 0, BX_IA_ERROR }, /* 0F 3A /wm */ { 0, BX_IA_ERROR },
#endif #endif
@ -2253,7 +2253,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo32M[512*2] = {
#endif #endif
/* 0F 39 /dm */ { 0, BX_IA_ERROR }, /* 0F 39 /dm */ { 0, BX_IA_ERROR },
#if (BX_SUPPORT_SSE >= 4) || (BX_SUPPORT_SSE >= 3 && BX_SUPPORT_SSE_EXTENSION > 0) #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 #else
/* 0F 3A /dm */ { 0, BX_IA_ERROR }, /* 0F 3A /dm */ { 0, BX_IA_ERROR },
#endif #endif
@ -2778,6 +2778,12 @@ modrm_done:
break; break;
} }
continue; 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: case BxFPEscape:
OpcodeInfoPtr = &(OpcodeInfoPtr->AnotherArray[b2 & 0x3f]); OpcodeInfoPtr = &(OpcodeInfoPtr->AnotherArray[b2 & 0x3f]);
break; 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 // Copyright (c) 2005 Stanislav Shwartsman
@ -1848,30 +1848,6 @@ static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f380b[3] = {
/* F3 */ { 0, BX_IA_ERROR } /* 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] = { static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f381c[3] = {
/* 66 */ { 0, BX_IA_PABSB_VdqWdq }, /* 66 */ { 0, BX_IA_PABSB_VdqWdq },
/* F2 */ { 0, BX_IA_ERROR }, /* F2 */ { 0, BX_IA_ERROR },
@ -1890,198 +1866,6 @@ static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f381e[3] = {
/* F3 */ { 0, BX_IA_ERROR } /* 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] = { static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f38f0[3] = {
/* 66 */ { 0, BX_IA_ERROR }, /* 66 */ { 0, BX_IA_ERROR },
/* F2 */ { 0, BX_IA_CRC32_GdEb }, /* F2 */ { 0, BX_IA_CRC32_GdEb },
@ -2124,145 +1908,12 @@ static const BxOpcodeInfo_t BxOpcodeGroupOsize0f38f1[BX_SUPPORT_X86_64 + 2] = {
#endif #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] = { static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3a0f[3] = {
/* 66 */ { 0, BX_IA_PALIGNR_VdqWdqIb }, /* 66 */ { 0, BX_IA_PALIGNR_VdqWdqIb },
/* F2 */ { 0, BX_IA_ERROR }, /* F2 */ { 0, BX_IA_ERROR },
/* F3 */ { 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) */ /* 3-byte opcode table (Table A-4, 0F 38) */
@ -2283,14 +1934,14 @@ static const BxOpcodeInfo_t BxOpcode3ByteTable0f38[256] = {
/* 0D */ { 0, BX_IA_ERROR }, /* 0D */ { 0, BX_IA_ERROR },
/* 0E */ { 0, BX_IA_ERROR }, /* 0E */ { 0, BX_IA_ERROR },
/* 0F */ { 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 }, /* 11 */ { 0, BX_IA_ERROR },
/* 12 */ { 0, BX_IA_ERROR }, /* 12 */ { 0, BX_IA_ERROR },
/* 13 */ { 0, BX_IA_ERROR }, /* 13 */ { 0, BX_IA_ERROR },
/* 14 */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3814 }, /* 14 */ { BxPrefixSSE66, BX_IA_BLENDVPS_VpsWps, BxOpcodeGroupSSE_ERR },
/* 15 */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3815 }, /* 15 */ { BxPrefixSSE66, BX_IA_BLENDVPD_VpdWpd, BxOpcodeGroupSSE_ERR },
/* 16 */ { 0, BX_IA_ERROR }, /* 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 }, /* 18 */ { 0, BX_IA_ERROR },
/* 19 */ { 0, BX_IA_ERROR }, /* 19 */ { 0, BX_IA_ERROR },
/* 1A */ { 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 }, /* 1D */ { BxPrefixSSE, BX_IA_PABSW_PqQq, BxOpcodeGroupSSE_0f381d },
/* 1E */ { BxPrefixSSE, BX_IA_PABSD_PqQq, BxOpcodeGroupSSE_0f381e }, /* 1E */ { BxPrefixSSE, BX_IA_PABSD_PqQq, BxOpcodeGroupSSE_0f381e },
/* 1F */ { 0, BX_IA_ERROR }, /* 1F */ { 0, BX_IA_ERROR },
/* 20 */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3820 }, /* 20 */ { BxPrefixSSE66, BX_IA_PMOVSXBW_VdqWq, BxOpcodeGroupSSE_ERR },
/* 21 */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3821 }, /* 21 */ { BxPrefixSSE66, BX_IA_PMOVSXBD_VdqWd, BxOpcodeGroupSSE_ERR },
/* 22 */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3822 }, /* 22 */ { BxPrefixSSE66, BX_IA_PMOVSXBQ_VdqWw, BxOpcodeGroupSSE_ERR },
/* 23 */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3823 }, /* 23 */ { BxPrefixSSE66, BX_IA_PMOVSXWD_VdqWq, BxOpcodeGroupSSE_ERR },
/* 24 */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3824 }, /* 24 */ { BxPrefixSSE66, BX_IA_PMOVSXWQ_VdqWd, BxOpcodeGroupSSE_ERR },
/* 25 */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3825 }, /* 25 */ { BxPrefixSSE66, BX_IA_PMOVSXDQ_VdqWq, BxOpcodeGroupSSE_ERR },
/* 26 */ { 0, BX_IA_ERROR }, /* 26 */ { 0, BX_IA_ERROR },
/* 27 */ { 0, BX_IA_ERROR }, /* 27 */ { 0, BX_IA_ERROR },
/* 28 */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3828 }, /* 28 */ { BxPrefixSSE66, BX_IA_PMULDQ_VdqWdq, BxOpcodeGroupSSE_ERR },
/* 29 */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3829 }, /* 29 */ { BxPrefixSSE66, BX_IA_PCMPEQQ_VdqWdq, BxOpcodeGroupSSE_ERR },
/* 2A */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f382a }, /* 2A */ { BxPrefixSSE66, BX_IA_MOVNTDQA_VdqMdq, BxOpcodeGroupSSE_ERR },
/* 2B */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f382b }, /* 2B */ { BxPrefixSSE66, BX_IA_PACKUSDW_VdqWdq, BxOpcodeGroupSSE_ERR },
/* 2C */ { 0, BX_IA_ERROR }, /* 2C */ { 0, BX_IA_ERROR },
/* 2D */ { 0, BX_IA_ERROR }, /* 2D */ { 0, BX_IA_ERROR },
/* 2E */ { 0, BX_IA_ERROR }, /* 2E */ { 0, BX_IA_ERROR },
/* 2F */ { 0, BX_IA_ERROR }, /* 2F */ { 0, BX_IA_ERROR },
/* 30 */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3830 }, /* 30 */ { BxPrefixSSE66, BX_IA_PMOVZXBW_VdqWq, BxOpcodeGroupSSE_ERR },
/* 31 */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3831 }, /* 31 */ { BxPrefixSSE66, BX_IA_PMOVZXBD_VdqWd, BxOpcodeGroupSSE_ERR },
/* 32 */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3832 }, /* 32 */ { BxPrefixSSE66, BX_IA_PMOVZXBQ_VdqWw, BxOpcodeGroupSSE_ERR },
/* 33 */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3833 }, /* 33 */ { BxPrefixSSE66, BX_IA_PMOVZXWD_VdqWq, BxOpcodeGroupSSE_ERR },
/* 34 */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3834 }, /* 34 */ { BxPrefixSSE66, BX_IA_PMOVZXWQ_VdqWd, BxOpcodeGroupSSE_ERR },
/* 35 */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3835 }, /* 35 */ { BxPrefixSSE66, BX_IA_PMOVZXDQ_VdqWq, BxOpcodeGroupSSE_ERR },
/* 36 */ { 0, BX_IA_ERROR }, /* 36 */ { 0, BX_IA_ERROR },
/* 37 */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3837 }, /* 37 */ { BxPrefixSSE66, BX_IA_PCMPGTQ_VdqWdq, BxOpcodeGroupSSE_ERR },
/* 38 */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3838 }, /* 38 */ { BxPrefixSSE66, BX_IA_PMINSB_VdqWdq, BxOpcodeGroupSSE_ERR },
/* 39 */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3839 }, /* 39 */ { BxPrefixSSE66, BX_IA_PMINSD_VdqWdq, BxOpcodeGroupSSE_ERR },
/* 3A */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f383a }, /* 3A */ { BxPrefixSSE66, BX_IA_PMINUW_VdqWdq, BxOpcodeGroupSSE_ERR },
/* 3B */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f383b }, /* 3B */ { BxPrefixSSE66, BX_IA_PMINUD_VdqWdq, BxOpcodeGroupSSE_ERR },
/* 3C */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f383c }, /* 3C */ { BxPrefixSSE66, BX_IA_PMAXSB_VdqWdq, BxOpcodeGroupSSE_ERR },
/* 3D */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f383d }, /* 3D */ { BxPrefixSSE66, BX_IA_PMAXSD_VdqWdq, BxOpcodeGroupSSE_ERR },
/* 3E */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f383e }, /* 3E */ { BxPrefixSSE66, BX_IA_PMAXUW_VdqWdq, BxOpcodeGroupSSE_ERR },
/* 3F */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f383f }, /* 3F */ { BxPrefixSSE66, BX_IA_PMAXUD_VdqWdq, BxOpcodeGroupSSE_ERR },
/* 40 */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3840 }, /* 40 */ { BxPrefixSSE66, BX_IA_PMULLD_VdqWdq, BxOpcodeGroupSSE_ERR },
/* 41 */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3841 }, /* 41 */ { BxPrefixSSE66, BX_IA_PHMINPOSUW_VdqWdq, BxOpcodeGroupSSE_ERR },
/* 42 */ { 0, BX_IA_ERROR }, /* 42 */ { 0, BX_IA_ERROR },
/* 43 */ { 0, BX_IA_ERROR }, /* 43 */ { 0, BX_IA_ERROR },
/* 44 */ { 0, BX_IA_ERROR }, /* 44 */ { 0, BX_IA_ERROR },
@ -2486,11 +2137,11 @@ static const BxOpcodeInfo_t BxOpcode3ByteTable0f38[256] = {
/* D8 */ { 0, BX_IA_ERROR }, /* D8 */ { 0, BX_IA_ERROR },
/* D9 */ { 0, BX_IA_ERROR }, /* D9 */ { 0, BX_IA_ERROR },
/* DA */ { 0, BX_IA_ERROR }, /* DA */ { 0, BX_IA_ERROR },
/* DB */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f38db }, /* DB */ { BxPrefixSSE66, BX_IA_AESIMC_VdqWdq, BxOpcodeGroupSSE_ERR }, // AES
/* DC */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f38dc }, /* DC */ { BxPrefixSSE66, BX_IA_AESENC_VdqWdq, BxOpcodeGroupSSE_ERR }, // AES
/* DD */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f38dd }, /* DD */ { BxPrefixSSE66, BX_IA_AESENCLAST_VdqWdq, BxOpcodeGroupSSE_ERR }, // AES
/* DE */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f38de }, /* DE */ { BxPrefixSSE66, BX_IA_AESDEC_VdqWdq, BxOpcodeGroupSSE_ERR }, // AES
/* DF */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f38df }, /* DF */ { BxPrefixSSE66, BX_IA_AESDECLAST_VdqWdq, BxOpcodeGroupSSE_ERR }, // AES
/* E0 */ { 0, BX_IA_ERROR }, /* E0 */ { 0, BX_IA_ERROR },
/* E1 */ { 0, BX_IA_ERROR }, /* E1 */ { 0, BX_IA_ERROR },
/* E2 */ { 0, BX_IA_ERROR }, /* E2 */ { 0, BX_IA_ERROR },
@ -2537,22 +2188,22 @@ static const BxOpcodeInfo_t BxOpcode3ByteTable0f3a[256] = {
/* 05 */ { 0, BX_IA_ERROR }, /* 05 */ { 0, BX_IA_ERROR },
/* 06 */ { 0, BX_IA_ERROR }, /* 06 */ { 0, BX_IA_ERROR },
/* 07 */ { 0, BX_IA_ERROR }, /* 07 */ { 0, BX_IA_ERROR },
/* 08 */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3a08 }, /* 08 */ { BxPrefixSSE66, BX_IA_ROUNDPS_VpsWpsIb, BxOpcodeGroupSSE_ERR },
/* 09 */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3a09 }, /* 09 */ { BxPrefixSSE66, BX_IA_ROUNDPD_VpdWpdIb, BxOpcodeGroupSSE_ERR },
/* 0A */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3a0a }, /* 0A */ { BxPrefixSSE66, BX_IA_ROUNDSS_VssWssIb, BxOpcodeGroupSSE_ERR },
/* 0B */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3a0b }, /* 0B */ { BxPrefixSSE66, BX_IA_ROUNDSD_VsdWsdIb, BxOpcodeGroupSSE_ERR },
/* 0C */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3a0c }, /* 0C */ { BxPrefixSSE66, BX_IA_BLENDPS_VpsWpsIb, BxOpcodeGroupSSE_ERR },
/* 0D */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3a0d }, /* 0D */ { BxPrefixSSE66, BX_IA_BLENDPD_VpdWpdIb, BxOpcodeGroupSSE_ERR },
/* 0E */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3a0e }, /* 0E */ { BxPrefixSSE66, BX_IA_PBLENDW_VdqWdqIb, BxOpcodeGroupSSE_ERR },
/* 0F */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_PALIGNR_PqQqIb, BxOpcodeGroupSSE_0f3a0f }, /* 0F */ { BxPrefixSSE, BX_IA_PALIGNR_PqQqIb, BxOpcodeGroupSSE_0f3a0f },
/* 10 */ { 0, BX_IA_ERROR }, /* 10 */ { 0, BX_IA_ERROR },
/* 11 */ { 0, BX_IA_ERROR }, /* 11 */ { 0, BX_IA_ERROR },
/* 12 */ { 0, BX_IA_ERROR }, /* 12 */ { 0, BX_IA_ERROR },
/* 13 */ { 0, BX_IA_ERROR }, /* 13 */ { 0, BX_IA_ERROR },
/* 14 */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3a14 }, /* 14 */ { BxPrefixSSE66, BX_IA_PEXTRB_HbdUdqIb, BxOpcodeGroupSSE_ERR },
/* 15 */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3a15 }, /* 15 */ { BxPrefixSSE66, BX_IA_PEXTRW_HwdUdqIb, BxOpcodeGroupSSE_ERR },
/* 16 */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3a16 }, /* 16 */ { BxPrefixSSE66, BX_IA_PEXTRD_HdUdqIb, BxOpcodeGroupSSE_ERR },
/* 17 */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3a17 }, /* 17 */ { BxPrefixSSE66, BX_IA_EXTRACTPS_HdUpsIb, BxOpcodeGroupSSE_ERR },
/* 18 */ { 0, BX_IA_ERROR }, /* 18 */ { 0, BX_IA_ERROR },
/* 19 */ { 0, BX_IA_ERROR }, /* 19 */ { 0, BX_IA_ERROR },
/* 1A */ { 0, BX_IA_ERROR }, /* 1A */ { 0, BX_IA_ERROR },
@ -2561,9 +2212,9 @@ static const BxOpcodeInfo_t BxOpcode3ByteTable0f3a[256] = {
/* 1D */ { 0, BX_IA_ERROR }, /* 1D */ { 0, BX_IA_ERROR },
/* 1E */ { 0, BX_IA_ERROR }, /* 1E */ { 0, BX_IA_ERROR },
/* 1F */ { 0, BX_IA_ERROR }, /* 1F */ { 0, BX_IA_ERROR },
/* 20 */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3a20 }, /* 20 */ { BxPrefixSSE66, BX_IA_PINSRB_VdqEbIb, BxOpcodeGroupSSE_ERR },
/* 21 */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3a21 }, /* 21 */ { BxPrefixSSE66, BX_IA_INSERTPS_VpsWssIb, BxOpcodeGroupSSE_ERR },
/* 22 */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3a22 }, /* 22 */ { BxPrefixSSE66, BX_IA_PINSRD_VdqEdIb, BxOpcodeGroupSSE_ERR },
/* 23 */ { 0, BX_IA_ERROR }, /* 23 */ { 0, BX_IA_ERROR },
/* 24 */ { 0, BX_IA_ERROR }, /* 24 */ { 0, BX_IA_ERROR },
/* 25 */ { 0, BX_IA_ERROR }, /* 25 */ { 0, BX_IA_ERROR },
@ -2593,9 +2244,9 @@ static const BxOpcodeInfo_t BxOpcode3ByteTable0f3a[256] = {
/* 3D */ { 0, BX_IA_ERROR }, /* 3D */ { 0, BX_IA_ERROR },
/* 3E */ { 0, BX_IA_ERROR }, /* 3E */ { 0, BX_IA_ERROR },
/* 3F */ { 0, BX_IA_ERROR }, /* 3F */ { 0, BX_IA_ERROR },
/* 40 */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3a40 }, /* 40 */ { BxPrefixSSE66, BX_IA_DPPS_VpsWpsIb, BxOpcodeGroupSSE_ERR },
/* 41 */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3a41 }, /* 41 */ { BxPrefixSSE66, BX_IA_DPPD_VpdWpdIb, BxOpcodeGroupSSE_ERR },
/* 42 */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3a42 }, /* 42 */ { BxPrefixSSE66, BX_IA_MPSADBW_VdqWdqIb, BxOpcodeGroupSSE_ERR },
/* 43 */ { 0, BX_IA_ERROR }, /* 43 */ { 0, BX_IA_ERROR },
/* 44 */ { 0, BX_IA_ERROR }, /* 44 */ { 0, BX_IA_ERROR },
/* 45 */ { 0, BX_IA_ERROR }, /* 45 */ { 0, BX_IA_ERROR },
@ -2625,10 +2276,10 @@ static const BxOpcodeInfo_t BxOpcode3ByteTable0f3a[256] = {
/* 5D */ { 0, BX_IA_ERROR }, /* 5D */ { 0, BX_IA_ERROR },
/* 5E */ { 0, BX_IA_ERROR }, /* 5E */ { 0, BX_IA_ERROR },
/* 5F */ { 0, BX_IA_ERROR }, /* 5F */ { 0, BX_IA_ERROR },
/* 60 */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3a60 }, /* 60 */ { BxPrefixSSE66, BX_IA_PCMPESTRM_VdqWdqIb, BxOpcodeGroupSSE_ERR },
/* 61 */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3a61 }, /* 61 */ { BxPrefixSSE66, BX_IA_PCMPESTRI_VdqWdqIb, BxOpcodeGroupSSE_ERR },
/* 62 */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3a62 }, /* 62 */ { BxPrefixSSE66, BX_IA_PCMPISTRM_VdqWdqIb, BxOpcodeGroupSSE_ERR },
/* 63 */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3a63 }, /* 63 */ { BxPrefixSSE66, BX_IA_PCMPISTRI_VdqWdqIb, BxOpcodeGroupSSE_ERR },
/* 64 */ { 0, BX_IA_ERROR }, /* 64 */ { 0, BX_IA_ERROR },
/* 65 */ { 0, BX_IA_ERROR }, /* 65 */ { 0, BX_IA_ERROR },
/* 66 */ { 0, BX_IA_ERROR }, /* 66 */ { 0, BX_IA_ERROR },
@ -2752,7 +2403,7 @@ static const BxOpcodeInfo_t BxOpcode3ByteTable0f3a[256] = {
/* DC */ { 0, BX_IA_ERROR }, /* DC */ { 0, BX_IA_ERROR },
/* DD */ { 0, BX_IA_ERROR }, /* DD */ { 0, BX_IA_ERROR },
/* DE */ { 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 }, /* E0 */ { 0, BX_IA_ERROR },
/* E1 */ { 0, BX_IA_ERROR }, /* E1 */ { 0, BX_IA_ERROR },
/* E2 */ { 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. // Copyright (C) 2001 MandrakeSoft S.A.
@ -505,7 +505,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64R[512*3] = {
#endif #endif
/* 0F 39 /wr */ { 0, BX_IA_ERROR }, /* 0F 39 /wr */ { 0, BX_IA_ERROR },
#if (BX_SUPPORT_SSE >= 4) || (BX_SUPPORT_SSE >= 3 && BX_SUPPORT_SSE_EXTENSION > 0) #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 #else
/* 0F 3A /wr */ { 0, BX_IA_ERROR }, /* 0F 3A /wr */ { 0, BX_IA_ERROR },
#endif #endif
@ -1032,7 +1032,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64R[512*3] = {
#endif #endif
/* 0F 39 /dr */ { 0, BX_IA_ERROR }, /* 0F 39 /dr */ { 0, BX_IA_ERROR },
#if (BX_SUPPORT_SSE >= 4) || (BX_SUPPORT_SSE >= 3 && BX_SUPPORT_SSE_EXTENSION > 0) #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 #else
/* 0F 3A /dr */ { 0, BX_IA_ERROR }, /* 0F 3A /dr */ { 0, BX_IA_ERROR },
#endif #endif
@ -1559,7 +1559,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64R[512*3] = {
#endif #endif
/* 0F 39 /qr */ { 0, BX_IA_ERROR }, /* 0F 39 /qr */ { 0, BX_IA_ERROR },
#if (BX_SUPPORT_SSE >= 4) || (BX_SUPPORT_SSE >= 3 && BX_SUPPORT_SSE_EXTENSION > 0) #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 #else
/* 0F 3A /qr */ { 0, BX_IA_ERROR }, /* 0F 3A /qr */ { 0, BX_IA_ERROR },
#endif #endif
@ -2092,7 +2092,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64M[512*3] = {
#endif #endif
/* 0F 39 /wm */ { 0, BX_IA_ERROR }, /* 0F 39 /wm */ { 0, BX_IA_ERROR },
#if (BX_SUPPORT_SSE >= 4) || (BX_SUPPORT_SSE >= 3 && BX_SUPPORT_SSE_EXTENSION > 0) #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 #else
/* 0F 3A /wm */ { 0, BX_IA_ERROR }, /* 0F 3A /wm */ { 0, BX_IA_ERROR },
#endif #endif
@ -2619,7 +2619,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64M[512*3] = {
#endif #endif
/* 0F 39 /dm */ { 0, BX_IA_ERROR }, /* 0F 39 /dm */ { 0, BX_IA_ERROR },
#if (BX_SUPPORT_SSE >= 4) || (BX_SUPPORT_SSE >= 3 && BX_SUPPORT_SSE_EXTENSION > 0) #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 #else
/* 0F 3A /dm */ { 0, BX_IA_ERROR }, /* 0F 3A /dm */ { 0, BX_IA_ERROR },
#endif #endif
@ -3146,7 +3146,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64M[512*3] = {
#endif #endif
/* 0F 39 /qm */ { 0, BX_IA_ERROR }, /* 0F 39 /qm */ { 0, BX_IA_ERROR },
#if (BX_SUPPORT_SSE >= 4) || (BX_SUPPORT_SSE >= 3 && BX_SUPPORT_SSE_EXTENSION > 0) #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 #else
/* 0F 3A /qm */ { 0, BX_IA_ERROR }, /* 0F 3A /qm */ { 0, BX_IA_ERROR },
#endif #endif
@ -3693,6 +3693,12 @@ modrm_done:
break; break;
} }
continue; 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: case BxFPEscape:
OpcodeInfoPtr = &(OpcodeInfoPtr->AnotherArray[b2 & 0x3f]); OpcodeInfoPtr = &(OpcodeInfoPtr->AnotherArray[b2 & 0x3f]);
break; break;