fixes and cleanups in disasm and decoder

This commit is contained in:
Stanislav Shwartsman 2010-02-09 19:44:25 +00:00
parent 63140a9c57
commit c841eaa953
12 changed files with 247 additions and 273 deletions

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////
// $Id: bit16.cc,v 1.17 2009-12-04 16:53:12 sshwarts Exp $
// $Id: bit16.cc,v 1.18 2010-02-09 19:44:25 sshwarts Exp $
/////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2001-2009 The Bochs Project
@ -330,7 +330,7 @@ void BX_CPP_AttrRegparmN(1) BX_CPU_C::BTR_EwIbR(bxInstruction_c *i)
set_CF(temp_CF);
}
/* 0F B8 */
/* F3 0F B8 */
void BX_CPP_AttrRegparmN(1) BX_CPU_C::POPCNT_GwEwR(bxInstruction_c *i)
{
#if BX_SUPPORT_POPCNT || (BX_SUPPORT_SSE > 4) || (BX_SUPPORT_SSE >= 4 && BX_SUPPORT_SSE_EXTENSION > 0)

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////
// $Id: bit32.cc,v 1.16 2009-12-04 16:53:12 sshwarts Exp $
// $Id: bit32.cc,v 1.17 2010-02-09 19:44:25 sshwarts Exp $
/////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2001-2009 The Bochs Project
@ -335,7 +335,7 @@ void BX_CPP_AttrRegparmN(1) BX_CPU_C::BTR_EdIbR(bxInstruction_c *i)
set_CF(temp_CF);
}
/* 0F B8 */
/* F3 0F B8 */
void BX_CPP_AttrRegparmN(1) BX_CPU_C::POPCNT_GdEdR(bxInstruction_c *i)
{
#if BX_SUPPORT_POPCNT || (BX_SUPPORT_SSE > 4) || (BX_SUPPORT_SSE >= 4 && BX_SUPPORT_SSE_EXTENSION > 0)

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////
// $Id: bit64.cc,v 1.21 2009-12-04 16:53:12 sshwarts Exp $
// $Id: bit64.cc,v 1.22 2010-02-09 19:44:25 sshwarts Exp $
/////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2001-2009 The Bochs Project
@ -315,7 +315,7 @@ void BX_CPP_AttrRegparmN(1) BX_CPU_C::BTR_EqIbR(bxInstruction_c *i)
set_CF(temp_CF);
}
/* 0F B8 */
/* F3 0F B8 */
void BX_CPP_AttrRegparmN(1) BX_CPU_C::POPCNT_GqEqR(bxInstruction_c *i)
{
#if BX_SUPPORT_POPCNT || (BX_SUPPORT_SSE > 4) || (BX_SUPPORT_SSE >= 4 && BX_SUPPORT_SSE_EXTENSION > 0)

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////
// $Id: cpu.h,v 1.636 2010-01-29 10:16:28 sshwarts Exp $
// $Id: cpu.h,v 1.637 2010-02-09 19:44:25 sshwarts Exp $
/////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2001-2009 The Bochs Project
@ -3888,10 +3888,11 @@ enum {
#define BxGroupN 0x0010 // Group encoding: 0001
#define BxPrefixSSE 0x0020 // Group encoding: 0010
#define BxPrefixSSE66 0x0030 // Group encoding: 0011
#define BxPrefixSSEF3 0x0040 // Group encoding: 0100
#define BxFPEscape 0x0050 // Group encoding: 0101
#define Bx3ByteOp 0x0060 // Group encoding: 0110
#define BxOSizeGrp 0x0070 // Group encoding: 0111
#define BxPrefixSSEF2 0x0040 // Group encoding: 0100
#define BxPrefixSSEF3 0x0050 // Group encoding: 0101
#define BxFPEscape 0x0060 // Group encoding: 0110
#define Bx3ByteOp 0x0070 // Group encoding: 0111
#define BxOSizeGrp 0x0080 // Group encoding: 1000
#define BxLockable 0x0100 // bit 8
#define BxArithDstRM 0x0200 // bit 9

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////
// $Id: fetchdecode.cc,v 1.249 2010-02-08 14:54:26 sshwarts Exp $
// $Id: fetchdecode.cc,v 1.250 2010-02-09 19:44:25 sshwarts Exp $
/////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2001-2009 The Bochs Project
@ -1858,7 +1858,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo32M[512*2] = {
/* 0F ED /wm */ { BxPrefixSSE, BX_IA_PADDSW_PqQq, BxOpcodeGroupSSE_0fed },
/* 0F EE /wm */ { BxPrefixSSE, BX_IA_PMAXSW_PqQq, BxOpcodeGroupSSE_0fee },
/* 0F EF /wm */ { BxPrefixSSE, BX_IA_PXOR_PqQq, BxOpcodeGroupSSE_0fef },
/* 0F F0 /wm */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0ff0M },
/* 0F F0 /wm */ { BxPrefixSSEF2, BX_IA_LDDQU_VdqMdq },
/* 0F F1 /wm */ { BxPrefixSSE, BX_IA_PSLLW_PqQq, BxOpcodeGroupSSE_0ff1 },
/* 0F F2 /wm */ { BxPrefixSSE, BX_IA_PSLLD_PqQq, BxOpcodeGroupSSE_0ff2 },
/* 0F F3 /wm */ { BxPrefixSSE, BX_IA_PSLLQ_PqQq, BxOpcodeGroupSSE_0ff3 },
@ -2421,7 +2421,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo32M[512*2] = {
/* 0F ED /dm */ { BxPrefixSSE, BX_IA_PADDSW_PqQq, BxOpcodeGroupSSE_0fed },
/* 0F EE /dm */ { BxPrefixSSE, BX_IA_PMAXSW_PqQq, BxOpcodeGroupSSE_0fee },
/* 0F EF /dm */ { BxPrefixSSE, BX_IA_PXOR_PqQq, BxOpcodeGroupSSE_0fef },
/* 0F F0 /dm */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0ff0M },
/* 0F F0 /wm */ { BxPrefixSSEF2, BX_IA_LDDQU_VdqMdq },
/* 0F F1 /dm */ { BxPrefixSSE, BX_IA_PSLLW_PqQq, BxOpcodeGroupSSE_0ff1 },
/* 0F F2 /dm */ { BxPrefixSSE, BX_IA_PSLLD_PqQq, BxOpcodeGroupSSE_0ff2 },
/* 0F F3 /dm */ { BxPrefixSSE, BX_IA_PSLLQ_PqQq, BxOpcodeGroupSSE_0ff3 },
@ -2749,6 +2749,12 @@ modrm_done:
OpcodeInfoPtr = &BxOpcodeGroupSSE_ERR[0]; // BX_IA_ERROR
}
continue;
case BxPrefixSSEF2:
/* For SSE opcodes with prefix F2 only */
if (sse_prefix != SSE_PREFIX_F2) {
OpcodeInfoPtr = &BxOpcodeGroupSSE_ERR[0]; // BX_IA_ERROR
}
continue;
case BxPrefixSSEF3:
/* For SSE opcodes with prefix F3 only */
if (sse_prefix != SSE_PREFIX_F3) {

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////
// $Id: fetchdecode64.cc,v 1.251 2010-02-08 14:54:26 sshwarts Exp $
// $Id: fetchdecode64.cc,v 1.252 2010-02-09 19:44:25 sshwarts Exp $
/////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2001-2009 The Bochs Project
@ -2252,7 +2252,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64M[512*3] = {
/* 0F ED /wm */ { BxPrefixSSE, BX_IA_PADDSW_PqQq, BxOpcodeGroupSSE_0fed },
/* 0F EE /wm */ { BxPrefixSSE, BX_IA_PMAXSW_PqQq, BxOpcodeGroupSSE_0fee },
/* 0F EF /wm */ { BxPrefixSSE, BX_IA_PXOR_PqQq, BxOpcodeGroupSSE_0fef },
/* 0F F0 /wm */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0ff0M },
/* 0F F0 /wm */ { BxPrefixSSEF2, BX_IA_LDDQU_VdqMdq },
/* 0F F1 /wm */ { BxPrefixSSE, BX_IA_PSLLW_PqQq, BxOpcodeGroupSSE_0ff1 },
/* 0F F2 /wm */ { BxPrefixSSE, BX_IA_PSLLD_PqQq, BxOpcodeGroupSSE_0ff2 },
/* 0F F3 /wm */ { BxPrefixSSE, BX_IA_PSLLQ_PqQq, BxOpcodeGroupSSE_0ff3 },
@ -2779,7 +2779,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64M[512*3] = {
/* 0F ED /dm */ { BxPrefixSSE, BX_IA_PADDSW_PqQq, BxOpcodeGroupSSE_0fed },
/* 0F EE /dm */ { BxPrefixSSE, BX_IA_PMAXSW_PqQq, BxOpcodeGroupSSE_0fee },
/* 0F EF /dm */ { BxPrefixSSE, BX_IA_PXOR_PqQq, BxOpcodeGroupSSE_0fef },
/* 0F F0 /dm */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0ff0M },
/* 0F F0 /wm */ { BxPrefixSSEF2, BX_IA_LDDQU_VdqMdq },
/* 0F F1 /dm */ { BxPrefixSSE, BX_IA_PSLLW_PqQq, BxOpcodeGroupSSE_0ff1 },
/* 0F F2 /dm */ { BxPrefixSSE, BX_IA_PSLLD_PqQq, BxOpcodeGroupSSE_0ff2 },
/* 0F F3 /dm */ { BxPrefixSSE, BX_IA_PSLLQ_PqQq, BxOpcodeGroupSSE_0ff3 },
@ -3306,7 +3306,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64M[512*3] = {
/* 0F ED /qm */ { BxPrefixSSE, BX_IA_PADDSW_PqQq, BxOpcodeGroupSSE_0fed },
/* 0F EE /qm */ { BxPrefixSSE, BX_IA_PMAXSW_PqQq, BxOpcodeGroupSSE_0fee },
/* 0F EF /qm */ { BxPrefixSSE, BX_IA_PXOR_PqQq, BxOpcodeGroupSSE_0fef },
/* 0F F0 /qm */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0ff0M },
/* 0F F0 /wm */ { BxPrefixSSEF2, BX_IA_LDDQU_VdqMdq },
/* 0F F1 /qm */ { BxPrefixSSE, BX_IA_PSLLW_PqQq, BxOpcodeGroupSSE_0ff1 },
/* 0F F2 /qm */ { BxPrefixSSE, BX_IA_PSLLD_PqQq, BxOpcodeGroupSSE_0ff2 },
/* 0F F3 /qm */ { BxPrefixSSE, BX_IA_PSLLQ_PqQq, BxOpcodeGroupSSE_0ff3 },
@ -3670,6 +3670,12 @@ modrm_done:
OpcodeInfoPtr = &BxOpcodeGroupSSE_ERR[0]; // BX_IA_ERROR
}
continue;
case BxPrefixSSEF2:
/* For SSE opcodes with prefix F2 only */
if (sse_prefix != SSE_PREFIX_F2) {
OpcodeInfoPtr = &BxOpcodeGroupSSE_ERR[0]; // BX_IA_ERROR
}
continue;
case BxPrefixSSEF3:
/* For SSE opcodes with prefix F3 only */
if (sse_prefix != SSE_PREFIX_F3) {

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////
// $Id: fetchdecode_sse.h,v 1.3 2010-02-08 15:22:53 sshwarts Exp $
// $Id: fetchdecode_sse.h,v 1.4 2010-02-09 19:44:25 sshwarts Exp $
/////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2005-2010 Stanislav Shwartsman
@ -668,12 +668,6 @@ static const BxOpcodeInfo_t BxOpcodeGroupSSE_0fef[3] = {
/* F3 */ { 0, BX_IA_ERROR }
};
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0ff0M[3] = {
/* 66 */ { 0, BX_IA_ERROR },
/* F2 */ { 0, BX_IA_LDDQU_VdqMdq }, // SSE3
/* F3 */ { 0, BX_IA_ERROR }
};
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0ff1[3] = {
/* 66 */ { 0, BX_IA_PSLLW_VdqWdq },
/* F2 */ { 0, BX_IA_ERROR },

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////
// $Id: dis_decode.cc,v 1.54 2010-01-31 10:17:42 sshwarts Exp $
// $Id: dis_decode.cc,v 1.55 2010-02-09 19:44:25 sshwarts Exp $
/////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2005-2009 Stanislav Shwartsman
@ -82,7 +82,6 @@ x86_insn disassembler::decode(bx_bool is_32, bx_bool is_64, bx_address base, bx_
x86_insn insn(is_32, is_64);
const Bit8u *instruction_begin = instruction = instr;
resolve_modrm = NULL;
unsigned b3 = 0;
db_eip = ip;
db_base = base; // cs linear base (base for PM & cs<<4 for RM & VM)
@ -206,9 +205,10 @@ x86_insn disassembler::decode(bx_bool is_32, bx_bool is_64, bx_address base, bx_
if (instruction_has_modrm[insn.b1])
{
// will require 3rd byte for 3-byte opcode
if (entry->Attr == _GRP3BOP)
b3 = fetch_byte();
// take 3rd byte for 3-byte opcode
if (entry->Attr == _GRP3BOP) {
entry = &(OPCODE_TABLE(entry)[fetch_byte()]);
}
decode_modrm(&insn);
}
@ -237,6 +237,14 @@ x86_insn disassembler::decode(bx_bool is_32, bx_bool is_64, bx_address base, bx_
attr = 0;
continue;
case _GRPSSEF3:
/* SSE opcode group with only prefix 0xF3 allowed */
sse_opcode = 1;
if (sse_prefix != SSE_PREFIX_F3)
entry = &(BxDisasmGroupSSE_ERR[sse_prefix]);
attr = 0;
continue;
case _GRPSSE:
sse_opcode = 1;
/* For SSE opcodes, look into another 4 entries table
@ -266,10 +274,6 @@ x86_insn disassembler::decode(bx_bool is_32, bx_bool is_64, bx_address base, bx_
entry = &(BxDisasm3DNowGroup[fetch_byte()]);
break;
case _GRP3BOP:
entry = &(OPCODE_TABLE(entry)[b3]);
break;
case _GRP64B:
entry = &(OPCODE_TABLE(entry)[insn.os_64 ? 2 : insn.os_32]);
break;

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////
// $Id: dis_groups.cc,v 1.46 2009-12-28 13:52:40 sshwarts Exp $
// $Id: dis_groups.cc,v 1.47 2010-02-09 19:44:25 sshwarts Exp $
/////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2005-2009 Stanislav Shwartsman
@ -438,39 +438,21 @@ void disassembler::Ww(const x86_insn *insn)
void disassembler::Wd(const x86_insn *insn)
{
if (insn->mod == 3)
{
if (intel_mode)
dis_sprintf ("xmm%d", insn->rm);
else
dis_sprintf("%%xmm%d", insn->rm);
}
if (insn->mod == 3) Udq(insn);
else
(this->*resolve_modrm)(insn, D_SIZE);
}
void disassembler::Wq(const x86_insn *insn)
{
if (insn->mod == 3)
{
if (intel_mode)
dis_sprintf ("xmm%d", insn->rm);
else
dis_sprintf("%%xmm%d", insn->rm);
}
if (insn->mod == 3) Udq(insn);
else
(this->*resolve_modrm)(insn, Q_SIZE);
}
void disassembler::Wdq(const x86_insn *insn)
{
if (insn->mod == 3)
{
if (intel_mode)
dis_sprintf ("xmm%d", insn->rm);
else
dis_sprintf("%%xmm%d", insn->rm);
}
if (insn->mod == 3) Udq(insn);
else
(this->*resolve_modrm)(insn, O_SIZE);
}

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////
// $Id: dis_tables.h,v 1.40 2010-02-08 15:11:58 sshwarts Exp $
// $Id: dis_tables.h,v 1.41 2010-02-09 19:44:25 sshwarts Exp $
/////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2005-2010 Stanislav Shwartsman
@ -30,9 +30,10 @@
#define _GRPSSE 5
#define _GRPSSE66 6
#define _GRPSSEF2 7
#define _GRPRM 8
#define _GRP3BOP 9
#define _GRP64B 10
#define _GRPSSEF3 8
#define _GRPRM 9
#define _GRP3BOP 10
#define _GRP64B 11
/* ************************************************************************ */
#define GRPSSE(n) _GRPSSE, BxDisasmGroupSSE_##n
@ -48,6 +49,7 @@
/* ************************************************************************ */
#define GRPSSE66(n) _GRPSSE66, &n
#define GRPSSEF2(n) _GRPSSEF2, &n
#define GRPSSEF3(n) _GRPSSEF3, &n
/* ************************************************************************ */
#define Apw &disassembler::Apw

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////
// $Id: dis_tables.inc,v 1.32 2010-02-08 15:11:58 sshwarts Exp $
// $Id: dis_tables.inc,v 1.33 2010-02-09 19:44:25 sshwarts Exp $
/////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2005-2010 Stanislav Shwartsman
@ -1008,8 +1008,8 @@ static BxDisasmOpcodeTable_t BxDisasmOpcodes16[256*2] = {
/* 0F 69 */ { GRPSSE(0f69) },
/* 0F 6A */ { GRPSSE(0f6a) },
/* 0F 6B */ { GRPSSE(0f6b) },
/* 0F 6C */ { GRPSSE(0f6c) },
/* 0F 6D */ { GRPSSE(0f6d) },
/* 0F 6C */ { GRPSSE66(Ia_punpcklqdq_Vdq_Wdq) },
/* 0F 6D */ { GRPSSE66(Ia_punpckhqdq_Vdq_Wdq) },
/* 0F 6E */ { GRPSSE(0f6e) },
/* 0F 6F */ { GRPSSE(0f6f) },
/* 0F 70 */ { GRPSSE(0f70) },
@ -1084,7 +1084,7 @@ static BxDisasmOpcodeTable_t BxDisasmOpcodes16[256*2] = {
/* 0F B5 */ { 0, &Ia_lgsw_Gw_Mp },
/* 0F B6 */ { 0, &Ia_movzbw_Gw_Eb },
/* 0F B7 */ { 0, &Ia_movw_Gw_Ew },
/* 0F B8 */ { GRPSSEF2(Ia_popcnt_Gw_Ew) },
/* 0F B8 */ { GRPSSEF3(Ia_popcnt_Gw_Ew) },
/* 0F B9 */ { 0, &Ia_ud2b },
/* 0F BA */ { GRPN(G8EwIb) },
/* 0F BB */ { 0, &Ia_btcw_Ew_Gw },
@ -1140,7 +1140,7 @@ static BxDisasmOpcodeTable_t BxDisasmOpcodes16[256*2] = {
/* 0F ED */ { GRPSSE(0fed) },
/* 0F EE */ { GRPSSE(0fee) },
/* 0F EF */ { GRPSSE(0fef) },
/* 0F F0 */ { GRPSSE(0ff0) },
/* 0F F0 */ { GRPSSEF2(Ia_lddqu_Vdq_Mdq) },
/* 0F F1 */ { GRPSSE(0ff1) },
/* 0F F2 */ { GRPSSE(0ff2) },
/* 0F F3 */ { GRPSSE(0ff3) },
@ -1529,8 +1529,8 @@ static BxDisasmOpcodeTable_t BxDisasmOpcodes32[256*2] = {
/* 0F 69 */ { GRPSSE(0f69) },
/* 0F 6A */ { GRPSSE(0f6a) },
/* 0F 6B */ { GRPSSE(0f6b) },
/* 0F 6C */ { GRPSSE(0f6c) },
/* 0F 6D */ { GRPSSE(0f6d) },
/* 0F 6C */ { GRPSSE66(Ia_punpcklqdq_Vdq_Wdq) },
/* 0F 6D */ { GRPSSE66(Ia_punpckhqdq_Vdq_Wdq) },
/* 0F 6E */ { GRPSSE(0f6e) },
/* 0F 6F */ { GRPSSE(0f6f) },
/* 0F 70 */ { GRPSSE(0f70) },
@ -1605,7 +1605,7 @@ static BxDisasmOpcodeTable_t BxDisasmOpcodes32[256*2] = {
/* 0F B5 */ { 0, &Ia_lgsl_Gd_Mp },
/* 0F B6 */ { 0, &Ia_movzbl_Gd_Eb },
/* 0F B7 */ { 0, &Ia_movzwl_Gd_Ew },
/* 0F B8 */ { GRPSSEF2(Ia_popcnt_Gd_Ed) },
/* 0F B8 */ { GRPSSEF3(Ia_popcnt_Gd_Ed) },
/* 0F B9 */ { 0, &Ia_ud2b },
/* 0F BA */ { GRPN(G8EdIb) },
/* 0F BB */ { 0, &Ia_btcl_Ed_Gd },
@ -1661,7 +1661,7 @@ static BxDisasmOpcodeTable_t BxDisasmOpcodes32[256*2] = {
/* 0F ED */ { GRPSSE(0fed) },
/* 0F EE */ { GRPSSE(0fee) },
/* 0F EF */ { GRPSSE(0fef) },
/* 0F F0 */ { GRPSSE(0ff0) },
/* 0F F0 */ { GRPSSEF2(Ia_lddqu_Vdq_Mdq) },
/* 0F F1 */ { GRPSSE(0ff1) },
/* 0F F2 */ { GRPSSE(0ff2) },
/* 0F F3 */ { GRPSSE(0ff3) },
@ -2050,8 +2050,8 @@ static BxDisasmOpcodeTable_t BxDisasmOpcodes64w[256*2] = {
/* 0F 69 */ { GRPSSE(0f69) },
/* 0F 6A */ { GRPSSE(0f6a) },
/* 0F 6B */ { GRPSSE(0f6b) },
/* 0F 6C */ { GRPSSE(0f6c) },
/* 0F 6D */ { GRPSSE(0f6d) },
/* 0F 6C */ { GRPSSE66(Ia_punpcklqdq_Vdq_Wdq) },
/* 0F 6D */ { GRPSSE66(Ia_punpckhqdq_Vdq_Wdq) },
/* 0F 6E */ { GRPSSE(0f6e) },
/* 0F 6F */ { GRPSSE(0f6f) },
/* 0F 70 */ { GRPSSE(0f70) },
@ -2126,7 +2126,7 @@ static BxDisasmOpcodeTable_t BxDisasmOpcodes64w[256*2] = {
/* 0F B5 */ { 0, &Ia_lgsw_Gw_Mp },
/* 0F B6 */ { 0, &Ia_movzbw_Gw_Eb },
/* 0F B7 */ { 0, &Ia_movw_Gw_Ew },
/* 0F B8 */ { GRPSSEF2(Ia_popcnt_Gw_Ew) },
/* 0F B8 */ { GRPSSEF3(Ia_popcnt_Gw_Ew) },
/* 0F B9 */ { 0, &Ia_ud2b },
/* 0F BA */ { GRPN(G8EwIb) },
/* 0F BB */ { 0, &Ia_btcw_Ew_Gw },
@ -2182,7 +2182,7 @@ static BxDisasmOpcodeTable_t BxDisasmOpcodes64w[256*2] = {
/* 0F ED */ { GRPSSE(0fed) },
/* 0F EE */ { GRPSSE(0fee) },
/* 0F EF */ { GRPSSE(0fef) },
/* 0F F0 */ { GRPSSE(0ff0) },
/* 0F F0 */ { GRPSSEF2(Ia_lddqu_Vdq_Mdq) },
/* 0F F1 */ { GRPSSE(0ff1) },
/* 0F F2 */ { GRPSSE(0ff2) },
/* 0F F3 */ { GRPSSE(0ff3) },
@ -2568,8 +2568,8 @@ static BxDisasmOpcodeTable_t BxDisasmOpcodes64d[256*2] = {
/* 0F 69 */ { GRPSSE(0f69) },
/* 0F 6A */ { GRPSSE(0f6a) },
/* 0F 6B */ { GRPSSE(0f6b) },
/* 0F 6C */ { GRPSSE(0f6c) },
/* 0F 6D */ { GRPSSE(0f6d) },
/* 0F 6C */ { GRPSSE66(Ia_punpcklqdq_Vdq_Wdq) },
/* 0F 6D */ { GRPSSE66(Ia_punpckhqdq_Vdq_Wdq) },
/* 0F 6E */ { GRPSSE(0f6e) },
/* 0F 6F */ { GRPSSE(0f6f) },
/* 0F 70 */ { GRPSSE(0f70) },
@ -2644,7 +2644,7 @@ static BxDisasmOpcodeTable_t BxDisasmOpcodes64d[256*2] = {
/* 0F B5 */ { 0, &Ia_lgsl_Gd_Mp },
/* 0F B6 */ { 0, &Ia_movzbl_Gd_Eb },
/* 0F B7 */ { 0, &Ia_movzwl_Gd_Ew },
/* 0F B8 */ { GRPSSEF2(Ia_popcnt_Gd_Ed) },
/* 0F B8 */ { GRPSSEF3(Ia_popcnt_Gd_Ed) },
/* 0F B9 */ { 0, &Ia_ud2b },
/* 0F BA */ { GRPN(G8EdIb) },
/* 0F BB */ { 0, &Ia_btcl_Ed_Gd },
@ -2700,7 +2700,7 @@ static BxDisasmOpcodeTable_t BxDisasmOpcodes64d[256*2] = {
/* 0F ED */ { GRPSSE(0fed) },
/* 0F EE */ { GRPSSE(0fee) },
/* 0F EF */ { GRPSSE(0fef) },
/* 0F F0 */ { GRPSSE(0ff0) },
/* 0F F0 */ { GRPSSEF2(Ia_lddqu_Vdq_Mdq) },
/* 0F F1 */ { GRPSSE(0ff1) },
/* 0F F2 */ { GRPSSE(0ff2) },
/* 0F F3 */ { GRPSSE(0ff3) },
@ -3086,8 +3086,8 @@ static BxDisasmOpcodeTable_t BxDisasmOpcodes64q[256*2] = {
/* 0F 69 */ { GRPSSE(0f69) },
/* 0F 6A */ { GRPSSE(0f6a) },
/* 0F 6B */ { GRPSSE(0f6b) },
/* 0F 6C */ { GRPSSE(0f6c) },
/* 0F 6D */ { GRPSSE(0f6d) },
/* 0F 6C */ { GRPSSE66(Ia_punpcklqdq_Vdq_Wdq) },
/* 0F 6D */ { GRPSSE66(Ia_punpckhqdq_Vdq_Wdq) },
/* 0F 6E */ { GRPSSE(0f6eQ) },
/* 0F 6F */ { GRPSSE(0f6f) },
/* 0F 70 */ { GRPSSE(0f70) },
@ -3162,7 +3162,7 @@ static BxDisasmOpcodeTable_t BxDisasmOpcodes64q[256*2] = {
/* 0F B5 */ { 0, &Ia_lgsq_Gq_Mp },
/* 0F B6 */ { 0, &Ia_movzbq_Gq_Eb },
/* 0F B7 */ { 0, &Ia_movzwq_Gq_Ew },
/* 0F B8 */ { GRPSSEF2(Ia_popcnt_Gq_Eq) },
/* 0F B8 */ { GRPSSEF3(Ia_popcnt_Gq_Eq) },
/* 0F B9 */ { 0, &Ia_ud2b },
/* 0F BA */ { GRPN(G8EqIb) },
/* 0F BB */ { 0, &Ia_btcq_Eq_Gq },
@ -3218,7 +3218,7 @@ static BxDisasmOpcodeTable_t BxDisasmOpcodes64q[256*2] = {
/* 0F ED */ { GRPSSE(0fed) },
/* 0F EE */ { GRPSSE(0fee) },
/* 0F EF */ { GRPSSE(0fef) },
/* 0F F0 */ { GRPSSE(0ff0) },
/* 0F F0 */ { GRPSSEF2(Ia_lddqu_Vdq_Mdq) },
/* 0F F1 */ { GRPSSE(0ff1) },
/* 0F F2 */ { GRPSSE(0ff2) },
/* 0F F3 */ { GRPSSE(0ff3) },

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////
// $Id: dis_tables_sse.inc,v 1.1 2010-02-08 15:13:39 sshwarts Exp $
// $Id: dis_tables_sse.inc,v 1.2 2010-02-09 19:44:25 sshwarts Exp $
/////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2005-2010 Stanislav Shwartsman
@ -184,176 +184,6 @@ static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f2f[4] = {
/* F3 */ { 0, &Ia_Invalid }
};
static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f3800[4] = {
/* -- */ { 0, &Ia_pshufb_Pq_Qq }, // SSE3E
/* 66 */ { 0, &Ia_pshufb_Vdq_Wdq },
/* F2 */ { 0, &Ia_Invalid },
/* F3 */ { 0, &Ia_Invalid }
};
static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f3801[4] = {
/* -- */ { 0, &Ia_phaddw_Pq_Qq }, // SSE3E
/* 66 */ { 0, &Ia_phaddw_Vdq_Wdq },
/* F2 */ { 0, &Ia_Invalid },
/* F3 */ { 0, &Ia_Invalid }
};
static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f3802[4] = {
/* -- */ { 0, &Ia_phaddd_Pq_Qq }, // SSE3E
/* 66 */ { 0, &Ia_phaddd_Vdq_Wdq },
/* F2 */ { 0, &Ia_Invalid },
/* F3 */ { 0, &Ia_Invalid }
};
static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f3803[4] = {
/* -- */ { 0, &Ia_phaddsw_Pq_Qq }, // SSE3E
/* 66 */ { 0, &Ia_phaddsw_Vdq_Wdq },
/* F2 */ { 0, &Ia_Invalid },
/* F3 */ { 0, &Ia_Invalid }
};
static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f3804[4] = {
/* -- */ { 0, &Ia_pmaddubsw_Pq_Qq }, // SSE3E
/* 66 */ { 0, &Ia_pmaddubsw_Vdq_Wdq },
/* F2 */ { 0, &Ia_Invalid },
/* F3 */ { 0, &Ia_Invalid }
};
static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f3805[4] = {
/* -- */ { 0, &Ia_phsubw_Pq_Qq }, // SSE3E
/* 66 */ { 0, &Ia_phsubw_Vdq_Wdq },
/* F2 */ { 0, &Ia_Invalid },
/* F3 */ { 0, &Ia_Invalid }
};
static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f3806[4] = {
/* -- */ { 0, &Ia_phsubd_Pq_Qq }, // SSE3E
/* 66 */ { 0, &Ia_phsubd_Vdq_Wdq },
/* F2 */ { 0, &Ia_Invalid },
/* F3 */ { 0, &Ia_Invalid }
};
static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f3807[4] = {
/* -- */ { 0, &Ia_phsubsw_Pq_Qq }, // SSE3E
/* 66 */ { 0, &Ia_phsubsw_Vdq_Wdq },
/* F2 */ { 0, &Ia_Invalid },
/* F3 */ { 0, &Ia_Invalid }
};
static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f3808[4] = {
/* -- */ { 0, &Ia_psignb_Pq_Qq }, // SSE3E
/* 66 */ { 0, &Ia_psignb_Vdq_Wdq },
/* F2 */ { 0, &Ia_Invalid },
/* F3 */ { 0, &Ia_Invalid }
};
static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f3809[4] = {
/* -- */ { 0, &Ia_psignw_Pq_Qq }, // SSE3E
/* 66 */ { 0, &Ia_psignw_Vdq_Wdq },
/* F2 */ { 0, &Ia_Invalid },
/* F3 */ { 0, &Ia_Invalid }
};
static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f380a[4] = {
/* -- */ { 0, &Ia_psignd_Pq_Qq }, // SSE3E
/* 66 */ { 0, &Ia_psignd_Vdq_Wdq },
/* F2 */ { 0, &Ia_Invalid },
/* F3 */ { 0, &Ia_Invalid }
};
static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f380b[4] = {
/* -- */ { 0, &Ia_pmulhrsw_Pq_Qq }, // SSE3E
/* 66 */ { 0, &Ia_pmulhrsw_Vdq_Wdq },
/* F2 */ { 0, &Ia_Invalid },
/* F3 */ { 0, &Ia_Invalid }
};
static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f381c[4] = {
/* -- */ { 0, &Ia_pabsb_Pq_Qq }, // SSE3E
/* 66 */ { 0, &Ia_pabsb_Vdq_Wdq },
/* F2 */ { 0, &Ia_Invalid },
/* F3 */ { 0, &Ia_Invalid }
};
static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f381d[4] = {
/* -- */ { 0, &Ia_pabsw_Pq_Qq }, // SSE3E
/* 66 */ { 0, &Ia_pabsw_Vdq_Wdq },
/* F2 */ { 0, &Ia_Invalid },
/* F3 */ { 0, &Ia_Invalid }
};
static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f381e[4] = {
/* -- */ { 0, &Ia_pabsd_Pq_Qq }, // SSE3E
/* 66 */ { 0, &Ia_pabsd_Vdq_Wdq },
/* F2 */ { 0, &Ia_Invalid },
/* F3 */ { 0, &Ia_Invalid }
};
static BxDisasmOpcodeTable_t BxDisasmGrpOs64B_movbe_GvEv[3] = {
/* 16 */ { 0, &Ia_movbe_Gw_Ew },
/* 32 */ { 0, &Ia_movbe_Gd_Ed },
/* 64 */ { 0, &Ia_movbe_Gq_Eq }
};
static BxDisasmOpcodeTable_t BxDisasmGrpOs64B_movbe_EvGv[3] = {
/* 16 */ { 0, &Ia_movbe_Ew_Gw },
/* 32 */ { 0, &Ia_movbe_Ed_Gd },
/* 64 */ { 0, &Ia_movbe_Eq_Gq }
};
static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f38f0[4] = {
/* -- */ { GR64BIT(movbe_GvEv) },
/* 66 */ { 0, &Ia_Invalid },
/* F2 */ { 0, &Ia_crc32_Gd_Eb }, // SSE4.2
/* F3 */ { 0, &Ia_Invalid }
};
static BxDisasmOpcodeTable_t BxDisasmGrpOs64B_crc32[3] = {
/* 16 */ { 0, &Ia_crc32_Gd_Ew },
/* 32 */ { 0, &Ia_crc32_Gd_Ed },
/* 64 */ { 0, &Ia_crc32_Gd_Eq },
};
static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f38f1[4] = {
/* -- */ { GR64BIT(movbe_EvGv) },
/* 66 */ { 0, &Ia_Invalid },
/* F2 */ { GR64BIT(crc32) }, // SSE4.2
/* F3 */ { 0, &Ia_Invalid }
};
static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f3a0f[4] = {
/* -- */ { 0, &Ia_palignr_Pq_Qq_Ib }, // SSE3E
/* 66 */ { 0, &Ia_palignr_Vdq_Wdq_Ib },
/* F2 */ { 0, &Ia_Invalid },
/* F3 */ { 0, &Ia_Invalid }
};
static BxDisasmOpcodeTable_t BxDisasmGrpOs64B_pextr[3] = {
/* 16 */ { 0, &Ia_pextrd_Hd_Udq_Ib },
/* 32 */ { 0, &Ia_pextrd_Hd_Udq_Ib },
/* 64 */ { 0, &Ia_pextrq_Hq_Udq_Ib },
};
static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f3a16[4] = {
/* -- */ { 0, &Ia_Invalid },
/* 66 */ { GR64BIT(pextr) }, // SSE4
/* F2 */ { 0, &Ia_Invalid },
/* F3 */ { 0, &Ia_Invalid }
};
static BxDisasmOpcodeTable_t BxDisasmGrpOs64B_pinsr[3] = {
/* 16 */ { 0, &Ia_pinsrd_Vdq_Ed_Ib },
/* 32 */ { 0, &Ia_pinsrd_Vdq_Ed_Ib },
/* 64 */ { 0, &Ia_pinsrq_Vdq_Eq_Ib },
};
static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f3a22[4] = {
/* -- */ { 0, &Ia_Invalid },
/* 66 */ { GR64BIT(pinsr) }, // SSE4
/* F2 */ { 0, &Ia_Invalid },
/* F3 */ { 0, &Ia_Invalid }
};
static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f50[4] = {
/* -- */ { 0, &Ia_movmskps_Gd_Vps },
/* 66 */ { 0, &Ia_movmskpd_Gd_Vpd },
@ -550,20 +380,6 @@ static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f6b[4] = {
/* F3 */ { 0, &Ia_Invalid }
};
static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f6c[4] = {
/* -- */ { 0, &Ia_Invalid },
/* 66 */ { 0, &Ia_punpcklqdq_Vdq_Wdq },
/* F2 */ { 0, &Ia_Invalid },
/* F3 */ { 0, &Ia_Invalid }
};
static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f6d[4] = {
/* -- */ { 0, &Ia_Invalid },
/* 66 */ { 0, &Ia_punpckhqdq_Vdq_Wdq },
/* F2 */ { 0, &Ia_Invalid },
/* F3 */ { 0, &Ia_Invalid }
};
static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f6e[4] = {
/* -- */ { 0, &Ia_movd_Pq_Ed },
/* 66 */ { 0, &Ia_movd_Vdq_Ed },
@ -953,13 +769,6 @@ static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fef[4] = {
/* F3 */ { 0, &Ia_Invalid }
};
static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0ff0[4] = {
/* -- */ { 0, &Ia_Invalid },
/* 66 */ { 0, &Ia_Invalid },
/* F2 */ { 0, &Ia_lddqu_Vdq_Mdq },
/* F3 */ { 0, &Ia_Invalid }
};
static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0ff1[4] = {
/* -- */ { 0, &Ia_psllw_Pq_Qq },
/* 66 */ { 0, &Ia_psllw_Vdq_Wdq },
@ -1114,6 +923,176 @@ static BxDisasmOpcodeTable_t BxDisasmGroupSSE_G1406[4] = {
/* F3 */ { 0, &Ia_Invalid }
};
static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f3800[4] = {
/* -- */ { 0, &Ia_pshufb_Pq_Qq }, // SSE3E
/* 66 */ { 0, &Ia_pshufb_Vdq_Wdq },
/* F2 */ { 0, &Ia_Invalid },
/* F3 */ { 0, &Ia_Invalid }
};
static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f3801[4] = {
/* -- */ { 0, &Ia_phaddw_Pq_Qq }, // SSE3E
/* 66 */ { 0, &Ia_phaddw_Vdq_Wdq },
/* F2 */ { 0, &Ia_Invalid },
/* F3 */ { 0, &Ia_Invalid }
};
static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f3802[4] = {
/* -- */ { 0, &Ia_phaddd_Pq_Qq }, // SSE3E
/* 66 */ { 0, &Ia_phaddd_Vdq_Wdq },
/* F2 */ { 0, &Ia_Invalid },
/* F3 */ { 0, &Ia_Invalid }
};
static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f3803[4] = {
/* -- */ { 0, &Ia_phaddsw_Pq_Qq }, // SSE3E
/* 66 */ { 0, &Ia_phaddsw_Vdq_Wdq },
/* F2 */ { 0, &Ia_Invalid },
/* F3 */ { 0, &Ia_Invalid }
};
static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f3804[4] = {
/* -- */ { 0, &Ia_pmaddubsw_Pq_Qq }, // SSE3E
/* 66 */ { 0, &Ia_pmaddubsw_Vdq_Wdq },
/* F2 */ { 0, &Ia_Invalid },
/* F3 */ { 0, &Ia_Invalid }
};
static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f3805[4] = {
/* -- */ { 0, &Ia_phsubw_Pq_Qq }, // SSE3E
/* 66 */ { 0, &Ia_phsubw_Vdq_Wdq },
/* F2 */ { 0, &Ia_Invalid },
/* F3 */ { 0, &Ia_Invalid }
};
static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f3806[4] = {
/* -- */ { 0, &Ia_phsubd_Pq_Qq }, // SSE3E
/* 66 */ { 0, &Ia_phsubd_Vdq_Wdq },
/* F2 */ { 0, &Ia_Invalid },
/* F3 */ { 0, &Ia_Invalid }
};
static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f3807[4] = {
/* -- */ { 0, &Ia_phsubsw_Pq_Qq }, // SSE3E
/* 66 */ { 0, &Ia_phsubsw_Vdq_Wdq },
/* F2 */ { 0, &Ia_Invalid },
/* F3 */ { 0, &Ia_Invalid }
};
static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f3808[4] = {
/* -- */ { 0, &Ia_psignb_Pq_Qq }, // SSE3E
/* 66 */ { 0, &Ia_psignb_Vdq_Wdq },
/* F2 */ { 0, &Ia_Invalid },
/* F3 */ { 0, &Ia_Invalid }
};
static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f3809[4] = {
/* -- */ { 0, &Ia_psignw_Pq_Qq }, // SSE3E
/* 66 */ { 0, &Ia_psignw_Vdq_Wdq },
/* F2 */ { 0, &Ia_Invalid },
/* F3 */ { 0, &Ia_Invalid }
};
static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f380a[4] = {
/* -- */ { 0, &Ia_psignd_Pq_Qq }, // SSE3E
/* 66 */ { 0, &Ia_psignd_Vdq_Wdq },
/* F2 */ { 0, &Ia_Invalid },
/* F3 */ { 0, &Ia_Invalid }
};
static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f380b[4] = {
/* -- */ { 0, &Ia_pmulhrsw_Pq_Qq }, // SSE3E
/* 66 */ { 0, &Ia_pmulhrsw_Vdq_Wdq },
/* F2 */ { 0, &Ia_Invalid },
/* F3 */ { 0, &Ia_Invalid }
};
static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f381c[4] = {
/* -- */ { 0, &Ia_pabsb_Pq_Qq }, // SSE3E
/* 66 */ { 0, &Ia_pabsb_Vdq_Wdq },
/* F2 */ { 0, &Ia_Invalid },
/* F3 */ { 0, &Ia_Invalid }
};
static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f381d[4] = {
/* -- */ { 0, &Ia_pabsw_Pq_Qq }, // SSE3E
/* 66 */ { 0, &Ia_pabsw_Vdq_Wdq },
/* F2 */ { 0, &Ia_Invalid },
/* F3 */ { 0, &Ia_Invalid }
};
static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f381e[4] = {
/* -- */ { 0, &Ia_pabsd_Pq_Qq }, // SSE3E
/* 66 */ { 0, &Ia_pabsd_Vdq_Wdq },
/* F2 */ { 0, &Ia_Invalid },
/* F3 */ { 0, &Ia_Invalid }
};
static BxDisasmOpcodeTable_t BxDisasmGrpOs64B_movbe_GvEv[3] = {
/* 16 */ { 0, &Ia_movbe_Gw_Ew },
/* 32 */ { 0, &Ia_movbe_Gd_Ed },
/* 64 */ { 0, &Ia_movbe_Gq_Eq }
};
static BxDisasmOpcodeTable_t BxDisasmGrpOs64B_movbe_EvGv[3] = {
/* 16 */ { 0, &Ia_movbe_Ew_Gw },
/* 32 */ { 0, &Ia_movbe_Ed_Gd },
/* 64 */ { 0, &Ia_movbe_Eq_Gq }
};
static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f38f0[4] = {
/* -- */ { GR64BIT(movbe_GvEv) },
/* 66 */ { 0, &Ia_Invalid },
/* F2 */ { 0, &Ia_crc32_Gd_Eb }, // SSE4.2
/* F3 */ { 0, &Ia_Invalid }
};
static BxDisasmOpcodeTable_t BxDisasmGrpOs64B_crc32[3] = {
/* 16 */ { 0, &Ia_crc32_Gd_Ew },
/* 32 */ { 0, &Ia_crc32_Gd_Ed },
/* 64 */ { 0, &Ia_crc32_Gd_Eq },
};
static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f38f1[4] = {
/* -- */ { GR64BIT(movbe_EvGv) },
/* 66 */ { 0, &Ia_Invalid },
/* F2 */ { GR64BIT(crc32) }, // SSE4.2
/* F3 */ { 0, &Ia_Invalid }
};
static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f3a0f[4] = {
/* -- */ { 0, &Ia_palignr_Pq_Qq_Ib }, // SSE3E
/* 66 */ { 0, &Ia_palignr_Vdq_Wdq_Ib },
/* F2 */ { 0, &Ia_Invalid },
/* F3 */ { 0, &Ia_Invalid }
};
static BxDisasmOpcodeTable_t BxDisasmGrpOs64B_pextr[3] = {
/* 16 */ { 0, &Ia_pextrd_Hd_Udq_Ib },
/* 32 */ { 0, &Ia_pextrd_Hd_Udq_Ib },
/* 64 */ { 0, &Ia_pextrq_Hq_Udq_Ib },
};
static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f3a16[4] = {
/* -- */ { 0, &Ia_Invalid },
/* 66 */ { GR64BIT(pextr) }, // SSE4
/* F2 */ { 0, &Ia_Invalid },
/* F3 */ { 0, &Ia_Invalid }
};
static BxDisasmOpcodeTable_t BxDisasmGrpOs64B_pinsr[3] = {
/* 16 */ { 0, &Ia_pinsrd_Vdq_Ed_Ib },
/* 32 */ { 0, &Ia_pinsrd_Vdq_Ed_Ib },
/* 64 */ { 0, &Ia_pinsrq_Vdq_Eq_Ib },
};
static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f3a22[4] = {
/* -- */ { 0, &Ia_Invalid },
/* 66 */ { GR64BIT(pinsr) }, // SSE4
/* F2 */ { 0, &Ia_Invalid },
/* F3 */ { 0, &Ia_Invalid }
};
/* ************************************************************************ */
/* 3-byte opcode table (Table A-4, 0F 38) */