diff --git a/Externals/Bochs_disasm/Bochs_disasm.vcxproj b/Externals/Bochs_disasm/Bochs_disasm.vcxproj index 917b83248d..a4479fe029 100644 --- a/Externals/Bochs_disasm/Bochs_disasm.vcxproj +++ b/Externals/Bochs_disasm/Bochs_disasm.vcxproj @@ -50,14 +50,18 @@ - - - - + + + + - - + + + + + + diff --git a/Externals/Bochs_disasm/CMakeLists.txt b/Externals/Bochs_disasm/CMakeLists.txt index a58e50e928..3d93e7e6e9 100644 --- a/Externals/Bochs_disasm/CMakeLists.txt +++ b/Externals/Bochs_disasm/CMakeLists.txt @@ -1,7 +1,7 @@ -set(SRCS dis_decode.cpp - dis_groups.cpp - resolve.cpp - syntax.cpp) +set(SRCS dis_decode.cc + dis_groups.cc + resolve.cc + syntax.cc) if(WIN32) set(SRCS ${SRCS} stdafx.cpp) diff --git a/Externals/Bochs_disasm/Makefile.in b/Externals/Bochs_disasm/Makefile.in new file mode 100644 index 0000000000..e7a5276624 --- /dev/null +++ b/Externals/Bochs_disasm/Makefile.in @@ -0,0 +1,82 @@ +# Copyright (C) 2001 The Bochs Project +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +@SUFFIX_LINE@ + +srcdir = @srcdir@ +VPATH = @srcdir@ +top_builddir = .. +top_srcdir = @top_srcdir@ + +SHELL = @SHELL@ + +@SET_MAKE@ + +CXX = @CXX@ +CXXFLAGS = @CXXFLAGS@ @GUI_CXXFLAGS@ + +LDFLAGS = @LDFLAGS@ +LIBS = @LIBS@ +RANLIB = @RANLIB@ + + +# =========================================================== +# end of configurable options +# =========================================================== + + +BX_OBJS = \ + dis_decode.o \ + dis_groups.o \ + resolve.o \ + syntax.o + +BX_INCLUDES = disasm.h + +BX_INCDIRS = -I.. -I$(srcdir)/.. -I../@INSTRUMENT_DIR@ -I$(srcdir)/../@INSTRUMENT_DIR@ + +all: libdisasm.a + +.@CPP_SUFFIX@.o: + $(CXX) @DASH@c $(BX_INCDIRS) $(CXXFLAGS) @CXXFP@$< @OFP@$@ + + + +libdisasm.a: $(BX_OBJS) + @RMCOMMAND@ libdisasm.a + @MAKELIB@ $(BX_OBJS) + $(RANLIB) libdisasm.a + +$(BX_OBJS): $(BX_INCLUDES) + + +clean: + @RMCOMMAND@ *.o + @RMCOMMAND@ *.a + +dist-clean: clean + @RMCOMMAND@ Makefile + +########################################### +# dependencies generated by +# gcc -MM -I.. -I../instrument/stubs *.cc | sed 's/\.cc/.@CPP_SUFFIX@/g' +########################################### +dis_decode.o: dis_decode.@CPP_SUFFIX@ disasm.h ../config.h dis_tables.h opcodes.inc \ + dis_tables.inc dis_tables_x87.inc dis_tables_sse.inc dis_tables_avx.inc dis_tables_xop.inc +dis_groups.o: dis_groups.@CPP_SUFFIX@ disasm.h ../config.h +resolve.o: resolve.@CPP_SUFFIX@ disasm.h ../config.h +syntax.o: syntax.@CPP_SUFFIX@ disasm.h ../config.h diff --git a/Externals/Bochs_disasm/config.h b/Externals/Bochs_disasm/config.h index abfc45cc6e..9329ac725b 100644 --- a/Externals/Bochs_disasm/config.h +++ b/Externals/Bochs_disasm/config.h @@ -38,4 +38,8 @@ typedef Bit64u bx_address; #endif +#define BX_CONST64(x) (x##LL) +#define GET32L(val64) ((Bit32u)(((Bit64u)(val64)) & 0xFFFFFFFF)) +#define GET32H(val64) ((Bit32u)(((Bit64u)(val64)) >> 32)) + #endif diff --git a/Externals/Bochs_disasm/dis_decode.cc b/Externals/Bochs_disasm/dis_decode.cc new file mode 100644 index 0000000000..77974af4a6 --- /dev/null +++ b/Externals/Bochs_disasm/dis_decode.cc @@ -0,0 +1,557 @@ +///////////////////////////////////////////////////////////////////////// +// $Id: dis_decode.cc 11873 2013-10-10 21:00:26Z sshwarts $ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (c) 2005-2012 Stanislav Shwartsman +// Written by Stanislav Shwartsman [sshwarts at sourceforge net] +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +#include +#include +#include + +#include "disasm.h" +#include "dis_tables.h" + +#define OPCODE(entry) ((BxDisasmOpcodeInfo_t*) entry->OpcodeInfo) +#define OPCODE_TABLE(entry) ((BxDisasmOpcodeTable_t*) entry->OpcodeInfo) + +static const unsigned char instruction_has_modrm[512] = { + /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */ + /* ------------------------------- */ + /* 00 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, + /* 10 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, + /* 20 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, + /* 30 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, + /* 40 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + /* 50 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + /* 60 */ 0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0, + /* 70 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + /* 80 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + /* 90 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + /* A0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + /* B0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + /* C0 */ 1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0, + /* D0 */ 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1, + /* E0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + /* F0 */ 0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1, + /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */ + /* ------------------------------- */ + 1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1, /* 0F 00 */ + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 0F 10 */ + 1,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1, /* 0F 20 */ + 0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0, /* 0F 30 */ + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 0F 40 */ + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 0F 50 */ + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 0F 60 */ + 1,1,1,1,1,1,1,0,1,1,0,0,1,1,1,1, /* 0F 70 */ + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0F 80 */ + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 0F 90 */ + 0,0,0,1,1,1,0,0,0,0,0,1,1,1,1,1, /* 0F A0 */ + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 0F B0 */ + 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, /* 0F C0 */ + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 0F D0 */ + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 0F E0 */ + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0 /* 0F F0 */ + /* ------------------------------- */ + /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */ +}; + +unsigned disassembler::disasm(bx_bool is_32, bx_bool is_64, bx_address cs_base, bx_address ip, const Bit8u *instr, char *disbuf) +{ + x86_insn insn = decode(is_32, is_64, cs_base, ip, instr, disbuf); + return insn.ilen; +} + +x86_insn disassembler::decode(bx_bool is_32, bx_bool is_64, bx_address cs_base, bx_address ip, const Bit8u *instr, char *disbuf) +{ + if (is_64) is_32 = 1; + x86_insn insn(is_32, is_64); + const Bit8u *instruction_begin = instruction = instr; + resolve_modrm = NULL; + + db_eip = ip; + db_cs_base = cs_base; // cs linear base (cs_base for PM & cs<<4 for RM & VM) + + disbufptr = disbuf; // start sprintf()'ing into beginning of buffer + +#define SSE_PREFIX_NONE 0 +#define SSE_PREFIX_66 1 +#define SSE_PREFIX_F3 2 +#define SSE_PREFIX_F2 3 /* only one SSE prefix could be used */ + unsigned sse_prefix = SSE_PREFIX_NONE, sse_opcode = 0; + unsigned rex_prefix = 0, prefixes = 0; + + for(;;) + { + insn.b1 = fetch_byte(); + prefixes++; + + switch(insn.b1) { + case 0x40: // rex + case 0x41: + case 0x42: + case 0x43: + case 0x44: + case 0x45: + case 0x46: + case 0x47: + case 0x48: + case 0x49: + case 0x4A: + case 0x4B: + case 0x4C: + case 0x4D: + case 0x4E: + case 0x4F: + if (! is_64) break; + rex_prefix = insn.b1; + continue; + + case 0x26: // ES: + case 0x2e: // CS: + case 0x36: // SS: + case 0x3e: // DS: + if (! is_64) insn.seg_override = (insn.b1 >> 3) & 3; + rex_prefix = 0; + continue; + + case 0x64: // FS: + case 0x65: // GS: + insn.seg_override = insn.b1 & 0xf; + rex_prefix = 0; + continue; + + case 0x66: // operand size override + if (!insn.os_64) insn.os_32 = !is_32; + if (!sse_prefix) sse_prefix = SSE_PREFIX_66; + rex_prefix = 0; + continue; + + case 0x67: // address size override + if (!is_64) insn.as_32 = !is_32; + insn.as_64 = 0; + rex_prefix = 0; + continue; + + case 0xf0: // lock + rex_prefix = 0; + continue; + + case 0xf2: // repne + case 0xf3: // rep + sse_prefix = (insn.b1 & 0xf) ^ 1; + rex_prefix = 0; + continue; + + // no more prefixes + default: + break; + } + + break; + } + + if (insn.b1 == 0x0f) + { + insn.b1 = 0x100 | fetch_byte(); + } + + if (rex_prefix) { + insn.extend8b = 1; + if (rex_prefix & 0x8) { + insn.os_64 = 1; + insn.os_32 = 1; + } + if (rex_prefix & 0x4) insn.rex_r = 8; + if (rex_prefix & 0x2) insn.rex_x = 8; + if (rex_prefix & 0x1) insn.rex_b = 8; + } + + const BxDisasmOpcodeTable_t *opcode_table, *entry; + + if (is_64) { + if (insn.os_64) + opcode_table = BxDisasmOpcodes64q; + else if (insn.os_32) + opcode_table = BxDisasmOpcodes64d; + else + opcode_table = BxDisasmOpcodes64w; + } else { + if (insn.os_32) + opcode_table = BxDisasmOpcodes32; + else + opcode_table = BxDisasmOpcodes16; + } + + entry = opcode_table + insn.b1; + + if ((insn.b1 & ~1) == 0xc4 && (is_64 || (peek_byte() & 0xc0) == 0xc0)) + { + if (sse_prefix) + dis_sprintf("(bad vex+rex prefix) "); + if (rex_prefix) + dis_sprintf("(bad vex+sse prefix) "); + + // decode 0xC4 or 0xC5 VEX prefix + sse_prefix = decode_vex(&insn); + if (insn.b1 < 256 || insn.b1 >= 1024) + entry = &BxDisasmGroupSSE_ERR[0]; + else + entry = BxDisasmOpcodesAVX + (insn.b1 - 256); + } +/* + if (insn.b1== 0x62 && (is_64 || (peek_byte() & 0xc0) == 0xc0)) + { + if (sse_prefix) + dis_sprintf("(bad evex+rex prefix) "); + if (rex_prefix) + dis_sprintf("(bad evex+sse prefix) "); + + // decode 0x62 EVEX prefix + sse_prefix = decode_evex(&insn); + if (insn.b1 < 256 || insn.b1 >= 1024) + entry = &BxDisasmGroupSSE_ERR[0]; +// else +// entry = BxDisasmOpcodesEVEX + (insn.b1 - 256); + } +*/ + else if (insn.b1 == 0x8f && (is_64 || (peek_byte() & 0xc0) == 0xc0) && (peek_byte() & 0x8) == 0x8) + { + if (sse_prefix) + dis_sprintf("(bad xop+rex prefix) "); + if (rex_prefix) + dis_sprintf("(bad xop+sse prefix) "); + + // decode 0x8F XOP prefix + sse_prefix = decode_xop(&insn); + if (insn.b1 >= 768 || sse_prefix != 0) + entry = &BxDisasmGroupSSE_ERR[0]; + else + entry = BxDisasmOpcodesXOP + insn.b1; + } + + if (insn.b1 >= 512 || instruction_has_modrm[insn.b1] || insn.is_xop > 0) + { + // take 3rd byte for 3-byte opcode + if (entry->Attr == _GRP3BOP) { + entry = &(OPCODE_TABLE(entry)[fetch_byte()]); + } + + decode_modrm(&insn); + } + + int attr = entry->Attr; + while(attr) + { + switch(attr) { + case _GROUPN: + entry = &(OPCODE_TABLE(entry)[insn.nnn & 7]); + break; + + case _GRPSSE66: + /* SSE opcode group with only prefix 0x66 allowed */ + sse_opcode = 1; + if (sse_prefix != SSE_PREFIX_66) + entry = &(BxDisasmGroupSSE_ERR[sse_prefix]); + attr = 0; + continue; + + case _GRPSSEF2: + /* SSE opcode group with only prefix 0xF2 allowed */ + sse_opcode = 1; + if (sse_prefix != SSE_PREFIX_F2) + entry = &(BxDisasmGroupSSE_ERR[sse_prefix]); + 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 _GRPSSENONE: + /* SSE opcode group with no prefix only allowed */ + sse_opcode = 1; + if (sse_prefix != SSE_PREFIX_NONE) + entry = &(BxDisasmGroupSSE_ERR[sse_prefix]); + attr = 0; + continue; + + case _GRPSSE: + sse_opcode = 1; + /* For SSE opcodes, look into another 4 entries table + with the opcode prefixes (NONE, 0x66, 0xF2, 0xF3) */ + entry = &(OPCODE_TABLE(entry)[sse_prefix]); + break; + + case _GRPSSE2: + sse_opcode = 1; + /* For SSE opcodes, look into another 2 entries table + with the opcode prefixes (NONE, 0x66) + SSE prefixes 0xF2 and 0xF3 are not allowed */ + if (sse_prefix > SSE_PREFIX_66) + entry = &(BxDisasmGroupSSE_ERR[sse_prefix]); + else + entry = &(OPCODE_TABLE(entry)[sse_prefix]); + break; + + case _SPLIT11B: + entry = &(OPCODE_TABLE(entry)[insn.mod != 3]); /* REG/MEM */ + break; + + case _GRPRM: + entry = &(OPCODE_TABLE(entry)[insn.rm & 7]); + break; + + case _GRPFP: + if(insn.mod != 3) + { + entry = &(OPCODE_TABLE(entry)[insn.nnn & 7]); + } else { + int index = (insn.b1-0xD8)*64 + (insn.modrm & 0x3f); + entry = &(BxDisasmOpcodeInfoFP[index]); + } + break; + + case _GRP3DNOW: + entry = &(BxDisasm3DNowGroup[fetch_byte()]); + break; + + case _GRP64B: + entry = &(OPCODE_TABLE(entry)[insn.os_64 ? 2 : insn.os_32]); + if (sse_prefix == SSE_PREFIX_66) + sse_prefix = 0; + break; + + case _GRPVEXW: + entry = &(OPCODE_TABLE(entry)[insn.vex_w]); + break; + + default: + printf("Internal disassembler error - unknown attribute !\n"); + return x86_insn(is_32, is_64); + } + + /* get additional attributes from group table */ + attr = entry->Attr; + } + +#define BRANCH_NOT_TAKEN 0x2E +#define BRANCH_TAKEN 0x3E + + unsigned branch_hint = 0; + + // print prefixes + for(unsigned i=0;iIntelOpcode); + } + } + + // branch hint for jcc instructions + if ((insn.b1 >= 0x070 && insn.b1 <= 0x07F) || + (insn.b1 >= 0x180 && insn.b1 <= 0x18F)) + { + if (prefix_byte == BRANCH_NOT_TAKEN || prefix_byte == BRANCH_TAKEN) + branch_hint = prefix_byte; + } + } + } + + const BxDisasmOpcodeInfo_t *opcode = OPCODE(entry); + + if (! insn.is_xop && ! insn.is_vex) { + // patch jecx opcode + if (insn.b1 == 0xE3 && insn.as_32 && !insn.as_64) + opcode = &Ia_jecxz_Jb; + + // fix nop opcode + if (insn.b1 == 0x90) { + if (sse_prefix == SSE_PREFIX_F3) + opcode = &Ia_pause; + else if (!insn.rex_b) + opcode = &Ia_nop; + } + } + + // print instruction disassembly + if (intel_mode) + print_disassembly_intel(&insn, opcode); + else + print_disassembly_att (&insn, opcode); + + if (branch_hint == BRANCH_NOT_TAKEN) + { + dis_sprintf(", not taken"); + } + else if (branch_hint == BRANCH_TAKEN) + { + dis_sprintf(", taken"); + } + + if (insn.is_vex < 0) + dis_sprintf(" (bad vex)"); + else if (insn.is_evex < 0) + dis_sprintf(" (bad evex)"); + else if (insn.is_xop < 0) + dis_sprintf(" (bad xop)"); + + insn.ilen = (unsigned)(instruction - instruction_begin); + + return insn; +} + +unsigned disassembler::decode_vex(x86_insn *insn) +{ + insn->is_vex = 1; + + unsigned b2 = fetch_byte(), vex_opcode_extension = 1; + + insn->rex_r = (b2 & 0x80) ? 0 : 0x8; + + if (insn->b1 == 0xc4) { + // decode 3-byte VEX prefix + insn->rex_x = (b2 & 0x40) ? 0 : 0x8; + if (insn->is_64) + insn->rex_b = (b2 & 0x20) ? 0 : 0x8; + + vex_opcode_extension = b2 & 0x1f; + if (! vex_opcode_extension || vex_opcode_extension > 3) + insn->is_vex = -1; + + b2 = fetch_byte(); // fetch VEX3 byte + if (b2 & 0x80) { + insn->os_64 = 1; + insn->os_32 = 1; + insn->vex_w = 1; + } + } + + insn->vex_vvv = 15 - ((b2 >> 3) & 0xf); + if (! insn->is_64) insn->vex_vvv &= 7; + insn->vex_l = (b2 >> 2) & 0x1; + insn->b1 = fetch_byte() + 256 * vex_opcode_extension; + return b2 & 0x3; +} + +unsigned disassembler::decode_evex(x86_insn *insn) +{ + insn->is_evex = 1; + + Bit32u evex = fetch_dword(); + + // check for reserved EVEX bits + if ((evex & 0x0c) != 0 || (evex & 0x400) == 0) { + insn->is_evex = -1; + } + + unsigned evex_opcext = evex & 0x3; + if (evex_opcext == 0) { + insn->is_evex = -1; + } + + if (insn->is_64) { + insn->rex_r = ((evex >> 4) & 0x8) ^ 0x8; + insn->rex_r |= (evex & 0x10) ^ 0x10; + insn->rex_x = ((evex >> 3) & 0x8) ^ 0x8; + insn->rex_b = ((evex >> 2) & 0x8) ^ 0x8; + insn->rex_b |= (insn->rex_x << 1); + } + + unsigned sse_prefix = (evex >> 8) & 0x3; + + insn->vex_vvv = 15 - ((evex >> 11) & 0xf); + unsigned evex_v = ((evex >> 15) & 0x10) ^ 0x10; + insn->vex_vvv |= evex_v; + if (! insn->is_64) insn->vex_vvv &= 7; + + insn->vex_w = (evex >> 15) & 0x1; + if (insn->vex_w) { + insn->os_64 = 1; + insn->os_32 = 1; + } + + insn->evex_b = (evex >> 20) & 0x1; + insn->evex_ll_rc = (evex >> 21) & 0x3; + insn->evex_z = (evex >> 23) & 0x1; + + insn->b1 = (evex >> 24); + insn->b1 += 256 * (evex_opcext-1); + + return sse_prefix; +} + +unsigned disassembler::decode_xop(x86_insn *insn) +{ + insn->is_xop = 1; + + unsigned b2 = fetch_byte(); + + insn->rex_r = (b2 & 0x80) ? 0 : 0x8; + insn->rex_x = (b2 & 0x40) ? 0 : 0x8; + if (insn->is_64) + insn->rex_b = (b2 & 0x20) ? 0 : 0x8; + + unsigned xop_opcode_extension = (b2 & 0x1f) - 8; + if (xop_opcode_extension >= 3) + insn->is_xop = -1; + + b2 = fetch_byte(); // fetch VEX3 byte + if (b2 & 0x80) { + insn->os_64 = 1; + insn->os_32 = 1; + insn->vex_w = 1; + } + + insn->vex_vvv = 15 - ((b2 >> 3) & 0xf); + if (! insn->is_64) insn->vex_vvv &= 7; + insn->vex_l = (b2 >> 2) & 0x1; + insn->b1 = fetch_byte() + 256 * xop_opcode_extension; + + return b2 & 0x3; +} + +void disassembler::dis_sprintf(const char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + vsprintf(disbufptr, fmt, ap); + va_end(ap); + + disbufptr += strlen(disbufptr); +} + +void disassembler::dis_putc(char symbol) +{ + *disbufptr++ = symbol; + *disbufptr = 0; +} diff --git a/Externals/Bochs_disasm/dis_decode.cpp b/Externals/Bochs_disasm/dis_decode.cpp deleted file mode 100644 index 3734578658..0000000000 --- a/Externals/Bochs_disasm/dis_decode.cpp +++ /dev/null @@ -1,328 +0,0 @@ -///////////////////////////////////////////////////////////////////////// -// $Id: dis_decode.cc,v 1.32 2006/05/12 17:04:19 sshwarts Exp $ -///////////////////////////////////////////////////////////////////////// - -#include -#include -#include - -#include "disasm.h" -#include "dis_tables.h" - -#define OPCODE(entry) ((BxDisasmOpcodeInfo_t*) entry->OpcodeInfo) -#define OPCODE_TABLE(entry) ((BxDisasmOpcodeTable_t*) entry->OpcodeInfo) - -#ifndef NULL -#define NULL 0 -#endif - - -static const unsigned char instruction_has_modrm[512] = { - /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */ - /* ------------------------------- */ - /* 00 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, - /* 10 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, - /* 20 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, - /* 30 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, - /* 40 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - /* 50 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - /* 60 */ 0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0, - /* 70 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - /* 80 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - /* 90 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - /* A0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - /* B0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - /* C0 */ 1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0, - /* D0 */ 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1, - /* E0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - /* F0 */ 0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1, - /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */ - /* ------------------------------- */ - 1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1, /* 0F 00 */ - 1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1, /* 0F 10 */ - 1,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1, /* 0F 20 */ - 0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0, /* 0F 30 */ - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 0F 40 */ - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 0F 50 */ - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 0F 60 */ - 1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1, /* 0F 70 */ - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0F 80 */ - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 0F 90 */ - 0,0,0,1,1,1,0,0,0,0,0,1,1,1,1,1, /* 0F A0 */ - 1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1, /* 0F B0 */ - 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, /* 0F C0 */ - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 0F D0 */ - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 0F E0 */ - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0 /* 0F F0 */ - /* ------------------------------- */ - /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */ -}; - -unsigned disassembler::disasm(bx_bool is_32, bx_bool is_64, bx_address base, bx_address ip, const Bit8u *instr, char *disbuf) -{ - x86_insn insn = decode(is_32, is_64, base, ip, instr, disbuf); - return insn.ilen; -} - -x86_insn disassembler::decode(bx_bool is_32, bx_bool is_64, bx_address base, bx_address ip, const Bit8u *instr, char *disbuf) -{ - 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) - - disbufptr = disbuf; // start sprintf()'ing into beginning of buffer - -#define SSE_PREFIX_NONE 0 -#define SSE_PREFIX_66 1 -#define SSE_PREFIX_F2 2 -#define SSE_PREFIX_F3 3 /* only one SSE prefix could be used */ - unsigned sse_prefix = SSE_PREFIX_NONE; - - for(;;) - { - insn.b1 = fetch_byte(); - insn.prefixes++; - - switch(insn.b1) { - case 0x40: // rex - case 0x41: - case 0x42: - case 0x43: - case 0x44: - case 0x45: - case 0x46: - case 0x47: - case 0x48: - case 0x49: - case 0x4A: - case 0x4B: - case 0x4C: - case 0x4D: - case 0x4E: - case 0x4F: - if (! is_64) break; - insn.extend8b = 1; - if (insn.b1 & 0x8) { - insn.os_64 = 1; - insn.os_32 = 1; - } - if (insn.b1 & 0x4) insn.rex_r = 8; - if (insn.b1 & 0x2) insn.rex_x = 8; - if (insn.b1 & 0x1) insn.rex_b = 8; - continue; - - case 0x26: // ES: - if (! is_64) insn.seg_override = ES_REG; - continue; - - case 0x2e: // CS: - if (! is_64) insn.seg_override = CS_REG; - continue; - - case 0x36: // SS: - if (! is_64) insn.seg_override = SS_REG; - continue; - - case 0x3e: // DS: - if (! is_64) insn.seg_override = DS_REG; - continue; - - case 0x64: // FS: - insn.seg_override = FS_REG; - continue; - - case 0x65: // GS: - insn.seg_override = GS_REG; - continue; - - case 0x66: // operand size override - if (!insn.os_64) insn.os_32 = !is_32; - if (!sse_prefix) sse_prefix = SSE_PREFIX_66; - continue; - - case 0x67: // address size override - if (!is_64) insn.as_32 = !is_32; - insn.as_64 = 0; - continue; - - case 0xf0: // lock - continue; - - case 0xf2: // repne - if (!sse_prefix) sse_prefix = SSE_PREFIX_F2; - continue; - - case 0xf3: // rep - if (!sse_prefix) sse_prefix = SSE_PREFIX_F3; - continue; - - // no more prefixes - default: - break; - } - - insn.prefixes--; - break; - } - - if (insn.b1 == 0x0f) - { - insn.b1 = 0x100 | fetch_byte(); - } - - const BxDisasmOpcodeTable_t *opcode_table, *entry; - - if (is_64) { - if (insn.os_64) - opcode_table = BxDisasmOpcodes64q; - else if (insn.os_32) - opcode_table = BxDisasmOpcodes64d; - else - opcode_table = BxDisasmOpcodes64w; - } else { - if (insn.os_32) - opcode_table = BxDisasmOpcodes32; - else - opcode_table = BxDisasmOpcodes16; - } - - entry = opcode_table + insn.b1; - - // will require 3rd byte for 3-byte opcode - if (entry->Attr & _GRP3BTAB) b3 = fetch_byte(); - - if (instruction_has_modrm[insn.b1]) - { - decode_modrm(&insn); - } - - int attr = entry->Attr; - while(attr) - { - switch(attr) { - case _GROUPN: - entry = &(OPCODE_TABLE(entry)[insn.nnn]); - break; - - case _GRPSSE: - if(sse_prefix) insn.prefixes--; - /* For SSE opcodes, look into another 4 entries table - with the opcode prefixes (NONE, 0x66, 0xF2, 0xF3) */ - entry = &(OPCODE_TABLE(entry)[sse_prefix]); - break; - - case _SPLIT11B: - entry = &(OPCODE_TABLE(entry)[insn.mod != 3]); /* REG/MEM */ - break; - - case _GRPRM: - entry = &(OPCODE_TABLE(entry)[insn.rm]); - break; - - case _GRPFP: - if(insn.mod != 3) - { - entry = &(OPCODE_TABLE(entry)[insn.nnn]); - } else { - int index = (insn.b1-0xD8)*64 + (insn.modrm & 0x3f); - entry = &(BxDisasmOpcodeInfoFP[index]); - } - break; - - case _GRP3DNOW: - entry = &(BxDisasm3DNowGroup[peek_byte()]); - break; - - case _GRP3BTAB: - entry = &(OPCODE_TABLE(entry)[b3 >> 4]); - break; - - case _GRP3BOP: - entry = &(OPCODE_TABLE(entry)[b3 & 15]); - break; - - default: - printf("Internal disassembler error - unknown attribute !\n"); - return x86_insn(is_32, is_64); - } - - /* get additional attributes from group table */ - attr = entry->Attr; - } - -#define BRANCH_NOT_TAKEN 0x2E -#define BRANCH_TAKEN 0x3E - - unsigned branch_hint = 0; - - // print prefixes - for(unsigned i=0;iIntelOpcode); - } - - // branch hint for jcc instructions - if ((insn.b1 >= 0x070 && insn.b1 <= 0x07F) || - (insn.b1 >= 0x180 && insn.b1 <= 0x18F)) - { - if (prefix_byte == BRANCH_NOT_TAKEN || prefix_byte == BRANCH_TAKEN) - branch_hint = prefix_byte; - } - } - - const BxDisasmOpcodeInfo_t *opcode = OPCODE(entry); - - // patch jecx opcode - if (insn.b1 == 0xE3 && insn.as_32 && !insn.as_64) - opcode = &Ia_jecxz_Jb; - - // fix nop opcode - if (insn.b1 == 0x90 && !insn.rex_b) { - opcode = &Ia_nop; - } - - // print instruction disassembly - if (intel_mode) - print_disassembly_intel(&insn, opcode); - else - print_disassembly_att (&insn, opcode); - - if (branch_hint == BRANCH_NOT_TAKEN) - { - dis_sprintf(", not taken"); - } - else if (branch_hint == BRANCH_TAKEN) - { - dis_sprintf(", taken"); - } - - insn.ilen = (unsigned)(instruction - instruction_begin); - - return insn; -} - -void disassembler::dis_sprintf(const char *fmt, ...) -{ - va_list ap; - - va_start(ap, fmt); - vsprintf(disbufptr, fmt, ap); - va_end(ap); - - disbufptr += strlen(disbufptr); -} - -void disassembler::dis_putc(char symbol) -{ - *disbufptr++ = symbol; - *disbufptr = 0; -} diff --git a/Externals/Bochs_disasm/dis_groups.cpp b/Externals/Bochs_disasm/dis_groups.cc similarity index 53% rename from Externals/Bochs_disasm/dis_groups.cpp rename to Externals/Bochs_disasm/dis_groups.cc index 9e55323523..0712fa344e 100644 --- a/Externals/Bochs_disasm/dis_groups.cpp +++ b/Externals/Bochs_disasm/dis_groups.cc @@ -1,6 +1,23 @@ ///////////////////////////////////////////////////////////////////////// -// $Id: dis_groups.cc,v 1.33 2006/08/13 09:40:07 sshwarts Exp $ +// $Id: dis_groups.cc 11885 2013-10-15 17:19:18Z sshwarts $ ///////////////////////////////////////////////////////////////////////// +// +// Copyright (c) 2005-2011 Stanislav Shwartsman +// Written by Stanislav Shwartsman [sshwarts at sourceforge net] +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #include #include @@ -16,41 +33,46 @@ void disassembler::Apw(const x86_insn *insn) { Bit16u imm16 = fetch_word(); Bit16u cs_selector = fetch_word(); - dis_sprintf("%04x:%04x", (unsigned) cs_selector, (unsigned) imm16); + dis_sprintf("0x%04x:%04x", (unsigned) cs_selector, (unsigned) imm16); } void disassembler::Apd(const x86_insn *insn) { Bit32u imm32 = fetch_dword(); Bit16u cs_selector = fetch_word(); - dis_sprintf("%04x:%08x", (unsigned) cs_selector, (unsigned) imm32); + dis_sprintf("0x%04x:%08x", (unsigned) cs_selector, (unsigned) imm32); } // 8-bit general purpose registers -void disassembler::AL(const x86_insn *insn) { dis_sprintf("%s", general_8bit_regname[rAX_REG]); } -void disassembler::CL(const x86_insn *insn) { dis_sprintf("%s", general_8bit_regname[rCX_REG]); } +void disassembler::AL_Reg(const x86_insn *insn) { dis_sprintf("%s", general_8bit_regname[rAX_REG]); } +void disassembler::CL_Reg(const x86_insn *insn) { dis_sprintf("%s", general_8bit_regname[rCX_REG]); } // 16-bit general purpose registers -void disassembler::AX(const x86_insn *insn) { +void disassembler::AX_Reg(const x86_insn *insn) { dis_sprintf("%s", general_16bit_regname[rAX_REG]); } -void disassembler::DX(const x86_insn *insn) { +void disassembler::DX_Reg(const x86_insn *insn) { dis_sprintf("%s", general_16bit_regname[rDX_REG]); } // 32-bit general purpose registers -void disassembler::EAX(const x86_insn *insn) +void disassembler::EAX_Reg(const x86_insn *insn) { dis_sprintf("%s", general_32bit_regname[rAX_REG]); } // 64-bit general purpose registers -void disassembler::RAX(const x86_insn *insn) +void disassembler::RAX_Reg(const x86_insn *insn) { dis_sprintf("%s", general_64bit_regname[rAX_REG]); } +void disassembler::RCX_Reg(const x86_insn *insn) +{ + dis_sprintf("%s", general_64bit_regname[rCX_REG]); +} + // segment registers void disassembler::CS(const x86_insn *insn) { dis_sprintf("%s", segment_name[CS_REG]); } void disassembler::DS(const x86_insn *insn) { dis_sprintf("%s", segment_name[DS_REG]); } @@ -61,18 +83,9 @@ void disassembler::GS(const x86_insn *insn) { dis_sprintf("%s", segment_name[GS_ void disassembler::Sw(const x86_insn *insn) { dis_sprintf("%s", segment_name[insn->nnn]); } -// test registers -void disassembler::Td(const x86_insn *insn) -{ - if (intel_mode) - dis_sprintf ("tr%d", insn->nnn); - else - dis_sprintf("%%tr%d", insn->nnn); -} - // control register -void disassembler::Cd(const x86_insn *insn) -{ +void disassembler::Cd(const x86_insn *insn) +{ if (intel_mode) dis_sprintf ("cr%d", insn->nnn); else @@ -82,21 +95,21 @@ void disassembler::Cd(const x86_insn *insn) void disassembler::Cq(const x86_insn *insn) { Cd(insn); } // debug register -void disassembler::Dd(const x86_insn *insn) +void disassembler::Dd(const x86_insn *insn) { if (intel_mode) - dis_sprintf ("db%d", insn->nnn); + dis_sprintf ("dr%d", insn->nnn); else - dis_sprintf("%%db%d", insn->nnn); + dis_sprintf("%%dr%d", insn->nnn); } void disassembler::Dq(const x86_insn *insn) { Dd(insn); } // 8-bit general purpose register -void disassembler::R8(const x86_insn *insn) -{ +void disassembler::Reg8(const x86_insn *insn) +{ unsigned reg = (insn->b1 & 7) | insn->rex_b; - + if (reg < 4 || insn->extend8b) dis_sprintf("%s", general_8bit_regname_rex[reg]); else @@ -105,24 +118,24 @@ void disassembler::R8(const x86_insn *insn) // 16-bit general purpose register void disassembler::RX(const x86_insn *insn) -{ +{ dis_sprintf("%s", general_16bit_regname[(insn->b1 & 7) | insn->rex_b]); } // 32-bit general purpose register void disassembler::ERX(const x86_insn *insn) -{ +{ dis_sprintf("%s", general_32bit_regname[(insn->b1 & 7) | insn->rex_b]); } // 64-bit general purpose register void disassembler::RRX(const x86_insn *insn) -{ +{ dis_sprintf("%s", general_64bit_regname[(insn->b1 & 7) | insn->rex_b]); } // general purpose register or memory operand -void disassembler::Eb(const x86_insn *insn) +void disassembler::Eb(const x86_insn *insn) { if (insn->mod == 3) { if (insn->rm < 4 || insn->extend8b) @@ -134,7 +147,7 @@ void disassembler::Eb(const x86_insn *insn) (this->*resolve_modrm)(insn, B_SIZE); } -void disassembler::Ew(const x86_insn *insn) +void disassembler::Ew(const x86_insn *insn) { if (insn->mod == 3) dis_sprintf("%s", general_16bit_regname[insn->rm]); @@ -142,7 +155,7 @@ void disassembler::Ew(const x86_insn *insn) (this->*resolve_modrm)(insn, W_SIZE); } -void disassembler::Ed(const x86_insn *insn) +void disassembler::Ed(const x86_insn *insn) { if (insn->mod == 3) dis_sprintf("%s", general_32bit_regname[insn->rm]); @@ -150,7 +163,7 @@ void disassembler::Ed(const x86_insn *insn) (this->*resolve_modrm)(insn, D_SIZE); } -void disassembler::Eq(const x86_insn *insn) +void disassembler::Eq(const x86_insn *insn) { if (insn->mod == 3) dis_sprintf("%s", general_64bit_regname[insn->rm]); @@ -158,8 +171,30 @@ void disassembler::Eq(const x86_insn *insn) (this->*resolve_modrm)(insn, Q_SIZE); } +void disassembler::Ey(const x86_insn *insn) +{ + if (insn->os_64) Eq(insn); + else Ed(insn); +} + +void disassembler::Ebd(const x86_insn *insn) +{ + if (insn->mod == 3) + dis_sprintf("%s", general_32bit_regname[insn->rm]); + else + (this->*resolve_modrm)(insn, B_SIZE); +} + +void disassembler::Ewd(const x86_insn *insn) +{ + if (insn->mod == 3) + dis_sprintf("%s", general_32bit_regname[insn->rm]); + else + (this->*resolve_modrm)(insn, W_SIZE); +} + // general purpose register -void disassembler::Gb(const x86_insn *insn) +void disassembler::Gb(const x86_insn *insn) { if (insn->nnn < 4 || insn->extend8b) dis_sprintf("%s", general_8bit_regname_rex[insn->nnn]); @@ -167,41 +202,69 @@ void disassembler::Gb(const x86_insn *insn) dis_sprintf("%s", general_8bit_regname[insn->nnn]); } -void disassembler::Gw(const x86_insn *insn) +void disassembler::Gw(const x86_insn *insn) { dis_sprintf("%s", general_16bit_regname[insn->nnn]); } -void disassembler::Gd(const x86_insn *insn) +void disassembler::Gd(const x86_insn *insn) { dis_sprintf("%s", general_32bit_regname[insn->nnn]); } -void disassembler::Gq(const x86_insn *insn) +void disassembler::Gq(const x86_insn *insn) { dis_sprintf("%s", general_64bit_regname[insn->nnn]); } +void disassembler::Gy(const x86_insn *insn) +{ + if (insn->os_64) Gq(insn); + else Gd(insn); +} + +// vex encoded general purpose register +void disassembler::By(const x86_insn *insn) +{ + if (insn->os_64) + dis_sprintf("%s", general_64bit_regname[insn->vex_vvv]); + else + dis_sprintf("%s", general_32bit_regname[insn->vex_vvv]); +} + // immediate -void disassembler::I1(const x86_insn *insn) -{ +void disassembler::I1(const x86_insn *insn) +{ if (! intel_mode) dis_putc('$'); dis_putc ('1'); } -void disassembler::Ib(const x86_insn *insn) +void disassembler::Ib(const x86_insn *insn) { if (! intel_mode) dis_putc('$'); dis_sprintf("0x%02x", (unsigned) fetch_byte()); } -void disassembler::Iw(const x86_insn *insn) +void disassembler::Iw(const x86_insn *insn) { if (! intel_mode) dis_putc('$'); dis_sprintf("0x%04x", (unsigned) fetch_word()); } -void disassembler::IwIb(const x86_insn *insn) +void disassembler::IbIb(const x86_insn *insn) +{ + Bit8u ib1 = fetch_byte(); + Bit8u ib2 = fetch_byte(); + + if (intel_mode) { + dis_sprintf("0x%02x, 0x%02x", ib1, ib2); + } + else { + dis_sprintf("$0x%02x, $0x%02x", ib2, ib1); + } +} + +void disassembler::IwIb(const x86_insn *insn) { Bit16u iw = fetch_word(); Bit8u ib = fetch_byte(); @@ -214,23 +277,22 @@ void disassembler::IwIb(const x86_insn *insn) } } -void disassembler::Id(const x86_insn *insn) +void disassembler::Id(const x86_insn *insn) { if (! intel_mode) dis_putc('$'); dis_sprintf("0x%08x", (unsigned) fetch_dword()); } -void disassembler::Iq(const x86_insn *insn) +void disassembler::Iq(const x86_insn *insn) { Bit64u value = fetch_qword(); if (! intel_mode) dis_putc('$'); - dis_sprintf("0x%08x%08x", - (unsigned)(value>>32), (unsigned)(value & 0xffffffff)); + dis_sprintf("0x%08x%08x", GET32H(value), GET32L(value)); } // sign extended immediate -void disassembler::sIbw(const x86_insn *insn) +void disassembler::sIbw(const x86_insn *insn) { if (! intel_mode) dis_putc('$'); Bit16u imm16 = (Bit8s) fetch_byte(); @@ -238,7 +300,7 @@ void disassembler::sIbw(const x86_insn *insn) } // sign extended immediate -void disassembler::sIbd(const x86_insn *insn) +void disassembler::sIbd(const x86_insn *insn) { if (! intel_mode) dis_putc('$'); Bit32u imm32 = (Bit8s) fetch_byte(); @@ -246,38 +308,36 @@ void disassembler::sIbd(const x86_insn *insn) } // sign extended immediate -void disassembler::sIbq(const x86_insn *insn) +void disassembler::sIbq(const x86_insn *insn) { if (! intel_mode) dis_putc('$'); Bit64u imm64 = (Bit8s) fetch_byte(); - dis_sprintf ("0x%08x%08x", - (unsigned)(imm64>>32), (unsigned)(imm64 & 0xffffffff)); + dis_sprintf ("0x%08x%08x", GET32H(imm64), GET32L(imm64)); } // sign extended immediate -void disassembler::sIdq(const x86_insn *insn) +void disassembler::sIdq(const x86_insn *insn) { if (! intel_mode) dis_putc('$'); Bit64u imm64 = (Bit32s) fetch_dword(); - dis_sprintf ("0x%08x%08x", - (unsigned)(imm64>>32), (unsigned)(imm64 & 0xffffffff)); + dis_sprintf ("0x%08x%08x", GET32H(imm64), GET32L(imm64)); } // floating point void disassembler::ST0(const x86_insn *insn) -{ +{ if (intel_mode) dis_sprintf ("st(0)"); else dis_sprintf("%%st(0)"); } -void disassembler::STi(const x86_insn *insn) -{ +void disassembler::STi(const x86_insn *insn) +{ if (intel_mode) - dis_sprintf ("st(%d)", insn->rm); + dis_sprintf ("st(%d)", insn->rm & 7); else - dis_sprintf("%%st(%d)", insn->rm); + dis_sprintf("%%st(%d)", insn->rm & 7); } // 16-bit general purpose register @@ -298,21 +358,27 @@ void disassembler::Rq(const x86_insn *insn) dis_sprintf("%s", general_64bit_regname[insn->rm]); } +void disassembler::Ry(const x86_insn *insn) +{ + if (insn->os_64) Rq(insn); + else Rd(insn); +} + // mmx register void disassembler::Pq(const x86_insn *insn) { if (intel_mode) - dis_sprintf ("mm%d", insn->nnn); + dis_sprintf ("mm%d", insn->nnn & 0x7); else - dis_sprintf("%%mm%d", insn->nnn); + dis_sprintf("%%mm%d", insn->nnn & 0x7); } void disassembler::Nq(const x86_insn *insn) { if (intel_mode) - dis_sprintf ("mm%d", insn->rm); + dis_sprintf ("mm%d", insn->rm & 0x7); else - dis_sprintf("%%mm%d", insn->rm); + dis_sprintf("%%mm%d", insn->rm & 0x7); } void disassembler::Qd(const x86_insn *insn) @@ -320,9 +386,9 @@ void disassembler::Qd(const x86_insn *insn) if (insn->mod == 3) { if (intel_mode) - dis_sprintf ("mm%d", insn->rm); + dis_sprintf ("mm%d", insn->rm & 0x7); else - dis_sprintf("%%mm%d", insn->rm); + dis_sprintf("%%mm%d", insn->rm & 0x7); } else (this->*resolve_modrm)(insn, D_SIZE); @@ -333,29 +399,27 @@ void disassembler::Qq(const x86_insn *insn) if (insn->mod == 3) { if (intel_mode) - dis_sprintf ("mm%d", insn->rm); + dis_sprintf ("mm%d", insn->rm & 0x7); else - dis_sprintf("%%mm%d", insn->rm); + dis_sprintf("%%mm%d", insn->rm & 0x7); } else (this->*resolve_modrm)(insn, Q_SIZE); } -// xmm register +// xmm/ymm register void disassembler::Udq(const x86_insn *insn) { - if (intel_mode) - dis_sprintf ("xmm%d", insn->rm); - else - dis_sprintf("%%xmm%d", insn->rm); + dis_sprintf("%s%d", vector_reg_name[insn->vex_l], insn->rm); } +void disassembler::Ups(const x86_insn *insn) { Udq(insn); } +void disassembler::Upd(const x86_insn *insn) { Udq(insn); } +void disassembler::Uq(const x86_insn *insn) { Udq(insn); } + void disassembler::Vq(const x86_insn *insn) { - if (intel_mode) - dis_sprintf ("xmm%d", insn->nnn); - else - dis_sprintf("%%xmm%d", insn->nnn); + dis_sprintf("%s%d", vector_reg_name[insn->vex_l], insn->nnn); } void disassembler::Vdq(const x86_insn *insn) { Vq(insn); } @@ -364,47 +428,60 @@ void disassembler::Vsd(const x86_insn *insn) { Vq(insn); } void disassembler::Vps(const x86_insn *insn) { Vq(insn); } void disassembler::Vpd(const x86_insn *insn) { Vq(insn); } +void disassembler::VIb(const x86_insn *insn) +{ + unsigned vreg = fetch_byte() >> 4; + if (! insn->is_64) vreg &= 7; + dis_sprintf("%s%d", vector_reg_name[insn->vex_l], vreg); +} + +void disassembler::Hdq(const x86_insn *insn) +{ + dis_sprintf("%s%d", vector_reg_name[insn->vex_l], insn->vex_vvv); +} + +void disassembler::Hps(const x86_insn *insn) { Hdq(insn); } +void disassembler::Hpd(const x86_insn *insn) { Hdq(insn); } +void disassembler::Hss(const x86_insn *insn) { Hdq(insn); } +void disassembler::Hsd(const x86_insn *insn) { Hdq(insn); } + +void disassembler::Wb(const x86_insn *insn) +{ + if (insn->mod == 3) Udq(insn); + else + (this->*resolve_modrm)(insn, B_SIZE); +} + +void disassembler::Ww(const x86_insn *insn) +{ + if (insn->mod == 3) Udq(insn); + else + (this->*resolve_modrm)(insn, W_SIZE); +} + +void disassembler::Wd(const x86_insn *insn) +{ + 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); + (this->*resolve_modrm)(insn, XMM_SIZE + insn->vex_l); } void disassembler::Wsd(const x86_insn *insn) { Wq(insn); } - -void disassembler::Wss(const x86_insn *insn) -{ - if (insn->mod == 3) - { - if (intel_mode) - dis_sprintf ("xmm%d", insn->rm); - else - dis_sprintf("%%xmm%d", insn->rm); - } - else - (this->*resolve_modrm)(insn, D_SIZE); -} - +void disassembler::Wss(const x86_insn *insn) { Wd(insn); } void disassembler::Wpd(const x86_insn *insn) { Wdq(insn); } void disassembler::Wps(const x86_insn *insn) { Wdq(insn); } @@ -422,16 +499,15 @@ void disassembler::OP_O(const x86_insn *insn, unsigned size) if (insn->as_64) { Bit64u imm64 = fetch_qword(); - dis_sprintf("%s:0x%08x%08x", seg, - (unsigned)(imm64>>32), (unsigned)(imm64 & 0xffffffff)); + dis_sprintf("%s:0x%08x%08x", seg, GET32H(imm64), GET32L(imm64)); } else if (insn->as_32) { Bit32u imm32 = fetch_dword(); - dis_sprintf("%s:0x%x", seg, (unsigned) imm32); + dis_sprintf("%s:0x%08x", seg, (unsigned) imm32); } else { Bit16u imm16 = fetch_word(); - dis_sprintf("%s:0x%x", seg, (unsigned) imm16); + dis_sprintf("%s:0x%04x", seg, (unsigned) imm16); } } @@ -460,9 +536,20 @@ void disassembler::Md(const x86_insn *insn) { OP_M(insn, D_SIZE); } void disassembler::Mq(const x86_insn *insn) { OP_M(insn, Q_SIZE); } void disassembler::Mt(const x86_insn *insn) { OP_M(insn, T_SIZE); } -void disassembler::Mdq(const x86_insn *insn) { OP_M(insn, O_SIZE); } -void disassembler::Mps(const x86_insn *insn) { OP_M(insn, O_SIZE); } -void disassembler::Mpd(const x86_insn *insn) { OP_M(insn, O_SIZE); } +void disassembler::Mdq(const x86_insn *insn) { OP_M(insn, XMM_SIZE + insn->vex_l); } +void disassembler::Mps(const x86_insn *insn) { OP_M(insn, XMM_SIZE + insn->vex_l); } +void disassembler::Mpd(const x86_insn *insn) { OP_M(insn, XMM_SIZE + insn->vex_l); } +void disassembler::Mss(const x86_insn *insn) { OP_M(insn, D_SIZE); } +void disassembler::Msd(const x86_insn *insn) { OP_M(insn, Q_SIZE); } + +// gather VSib +void disassembler::VSib(const x86_insn *insn) +{ + if(insn->mod == 3) + dis_sprintf("(bad)"); + else + (this->*resolve_modrm)(insn, (XMM_SIZE + insn->vex_l) | VSIB_Index); +} // string instructions void disassembler::OP_X(const x86_insn *insn, unsigned size) @@ -478,7 +565,7 @@ void disassembler::OP_X(const x86_insn *insn, unsigned size) else rsi = general_16bit_regname[rSI_REG]; } - + if (insn->is_seg_override()) seg = segment_name[insn->seg_override]; else @@ -510,7 +597,7 @@ void disassembler::OP_Y(const x86_insn *insn, unsigned size) else rdi = general_16bit_regname[rDI_REG]; } - + print_datasize(size); if (intel_mode) @@ -524,6 +611,36 @@ void disassembler::Yw(const x86_insn *insn) { OP_Y(insn, W_SIZE); } void disassembler::Yd(const x86_insn *insn) { OP_Y(insn, D_SIZE); } void disassembler::Yq(const x86_insn *insn) { OP_Y(insn, Q_SIZE); } +void disassembler::OP_sY(const x86_insn *insn, unsigned size) +{ + const char *rdi, *seg; + + if (insn->as_64) { + rdi = general_64bit_regname[rDI_REG]; + } + else { + if (insn->as_32) + rdi = general_32bit_regname[rDI_REG]; + else + rdi = general_16bit_regname[rDI_REG]; + } + + print_datasize(size); + + if (insn->is_seg_override()) + seg = segment_name[insn->seg_override]; + else + seg = segment_name[DS_REG]; + + if (intel_mode) + dis_sprintf("%s:[%s]", seg, rdi); + else + dis_sprintf("%s:(%s)", seg, rdi); +} + +void disassembler::sYq(const x86_insn *insn) { OP_sY(insn, Q_SIZE); } +void disassembler::sYdq(const x86_insn *insn) { OP_sY(insn, XMM_SIZE + insn->vex_l); } + #define BX_JUMP_TARGET_NOT_REQ ((bx_address)(-1)) // jump offset @@ -532,35 +649,52 @@ void disassembler::Jb(const x86_insn *insn) Bit8s imm8 = (Bit8s) fetch_byte(); if (insn->is_64) { - Bit64u imm64 = (Bit64s) imm8; - dis_sprintf(".+0x%08x%08x", - (unsigned)(imm64>>32), (unsigned)(imm64 & 0xffffffff)); + Bit64u imm64 = (Bit8s) imm8; - if (db_base != BX_JUMP_TARGET_NOT_REQ) { - Bit64u target = db_eip + (Bit64s) imm64; target += db_base; - dis_sprintf(" (0x%08x%08x)", - (unsigned)(target>>32), (unsigned)(target & 0xffffffff)); + if (offset_mode_hex) { + dis_sprintf(".+0x%08x%08x", GET32H(imm64), GET32L(imm64)); + } + else { + dis_sprintf(".%+d", (int) imm8); + } + + if (db_cs_base != BX_JUMP_TARGET_NOT_REQ) { + Bit64u target = db_eip + imm64; + target += db_cs_base; + dis_sprintf(" (0x%08x%08x)", GET32H(target), GET32L(target)); } return; } if (insn->os_32) { - Bit32u imm32 = (Bit32s) imm8; - dis_sprintf(".+0x%08x", (unsigned) imm32); + Bit32u imm32 = (Bit8s) imm8; - if (db_base != BX_JUMP_TARGET_NOT_REQ) { - Bit32u target = (Bit32u)(db_eip + (Bit32s) imm32); target += (Bit32u)db_base; + if (offset_mode_hex) { + dis_sprintf(".+0x%08x", (unsigned) imm32); + } + else { + dis_sprintf(".%+d", (int) imm8); + } + + if (db_cs_base != BX_JUMP_TARGET_NOT_REQ) { + Bit32u target = (Bit32u)(db_cs_base + db_eip + (Bit32s) imm32); dis_sprintf(" (0x%08x)", target); } } else { - Bit16u imm16 = (Bit16s) imm8; - dis_sprintf(".+0x%04x", (unsigned) imm16); + Bit16u imm16 = (Bit8s) imm8; - if (db_base != BX_JUMP_TARGET_NOT_REQ) { - Bit16u target = (Bit32u)(db_eip + (Bit16s) imm16) & 0xffff; - dis_sprintf(" (0x%08x)", target + db_base); + if (offset_mode_hex) { + dis_sprintf(".+0x%04x", (unsigned) imm16); + } + else { + dis_sprintf(".%+d", (int) imm8); + } + + if (db_cs_base != BX_JUMP_TARGET_NOT_REQ) { + Bit16u target = (Bit16u)((db_eip + (Bit16s) imm16) & 0xffff); + dis_sprintf(" (0x%08x)", target + db_cs_base); } } } @@ -569,14 +703,19 @@ void disassembler::Jw(const x86_insn *insn) { // Jw supported in 16-bit mode only assert(! insn->is_64); - assert(! insn->is_32); - Bit16u imm16 = (Bit16s) fetch_word(); - dis_sprintf(".+0x%04x", (unsigned) imm16); + Bit16s imm16 = (Bit16s) fetch_word(); - if (db_base != BX_JUMP_TARGET_NOT_REQ) { - Bit16u target = (Bit32u)(db_eip + (Bit16s) imm16) & 0xffff; - dis_sprintf(" (0x%08x)", target + db_base); + if (offset_mode_hex) { + dis_sprintf(".+0x%04x", (unsigned) (Bit16u) imm16); + } + else { + dis_sprintf(".%+d", (int) imm16); + } + + if (db_cs_base != BX_JUMP_TARGET_NOT_REQ) { + Bit16u target = (db_eip + imm16) & 0xffff; + dis_sprintf(" (0x%08x)", target + db_cs_base); } } @@ -585,23 +724,32 @@ void disassembler::Jd(const x86_insn *insn) Bit32s imm32 = (Bit32s) fetch_dword(); if (insn->is_64) { - Bit64u imm64 = (Bit64s) imm32; - dis_sprintf(".+0x%08x%08x", - (unsigned)(imm64>>32), (unsigned)(imm64 & 0xffffffff)); + Bit64u imm64 = (Bit32s) imm32; - if (db_base != BX_JUMP_TARGET_NOT_REQ) { - Bit64u target = db_eip + (Bit64s) imm64; target += db_base; - dis_sprintf(" (0x%08x%08x)", - (unsigned)(target>>32), (unsigned)(target & 0xffffffff)); + if (offset_mode_hex) { + dis_sprintf(".+0x%08x%08x", GET32H(imm64), GET32L(imm64)); + } + else { + dis_sprintf(".%+d", (int) imm32); + } + + if (db_cs_base != BX_JUMP_TARGET_NOT_REQ) { + Bit64u target = db_cs_base + db_eip + (Bit64s) imm64; + dis_sprintf(" (0x%08x%08x)", GET32H(target), GET32L(target)); } return; } - dis_sprintf(".+0x%08x", (unsigned) imm32); + if (offset_mode_hex) { + dis_sprintf(".+0x%08x", (unsigned) imm32); + } + else { + dis_sprintf(".%+d", (int) imm32); + } - if (db_base != BX_JUMP_TARGET_NOT_REQ) { - Bit32u target = (Bit32u)(db_eip + (Bit32s) imm32); target += (Bit32u)db_base; + if (db_cs_base != BX_JUMP_TARGET_NOT_REQ) { + Bit32u target = (Bit32u)(db_cs_base + db_eip + (Bit32s) imm32); dis_sprintf(" (0x%08x)", target); } } diff --git a/Externals/Bochs_disasm/dis_tables.h b/Externals/Bochs_disasm/dis_tables.h index f7291e0541..9fe9701c05 100644 --- a/Externals/Bochs_disasm/dis_tables.h +++ b/Externals/Bochs_disasm/dis_tables.h @@ -1,6 +1,23 @@ ///////////////////////////////////////////////////////////////////////// -// $Id: dis_tables.h,v 1.29 2006/04/27 15:11:45 sshwarts Exp $ +// $Id: dis_tables.h 11878 2013-10-11 20:09:51Z sshwarts $ ///////////////////////////////////////////////////////////////////////// +// +// Copyright (c) 2005-2012 Stanislav Shwartsman +// Written by Stanislav Shwartsman [sshwarts at sourceforge net] +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #ifndef _BX_DISASM_TABLES_ #define _BX_DISASM_TABLES_ @@ -11,70 +28,93 @@ #define _GRPFP 3 #define _GRP3DNOW 4 #define _GRPSSE 5 -#define _GRPRM 6 -#define _GRP3BOP 7 -#define _GRP3BTAB 8 +#define _GRPSSE66 6 +#define _GRPSSEF2 7 +#define _GRPSSEF3 8 +#define _GRPSSENONE 9 +#define _GRPSSE2 10 +#define _GRPRM 11 +#define _GRP3BOP 12 +#define _GRP64B 13 +#define _GRPVEXW 14 /* ************************************************************************ */ #define GRPSSE(n) _GRPSSE, BxDisasmGroupSSE_##n +#define GRPSSE2(n) _GRPSSE2, BxDisasmGroupSSE_##n +#define GRPAVX(n) _GRPSSE, BxDisasmGroupAVX_##n +#define GRPAVX2(n) _GRPSSE2, BxDisasmGroupAVX_##n #define GRPN(n) _GROUPN, BxDisasmGroup##n #define GRPRM(n) _GRPRM, BxDisasmGroupRm##n #define GRPMOD(n) _SPLIT11B, BxDisasmGroupMod##n #define GRPFP(n) _GRPFP, BxDisasmFPGroup##n #define GRP3DNOW _GRP3DNOW, BxDisasm3DNowGroup -#define GR3BOP(n) _GRP3BOP, BxDisasm3ByteOp##n -#define GR3BTAB(n) _GRP3BTAB, BxDisasm3ByteTable##n +#define GR3BTAB(n) _GRP3BOP, BxDisasm3ByteOpTable##n +#define GR64BIT(n) _GRP64B, BxDisasmGrpOs64B_##n +#define GRPVEXW(n) _GRPVEXW, BxDisasmGrpVexW_##n +/* ************************************************************************ */ + +/* ************************************************************************ */ +#define GRPSSE66(n) _GRPSSE66, &n +#define GRPSSEF2(n) _GRPSSEF2, &n +#define GRPSSEF3(n) _GRPSSEF3, &n +#define GRPSSENONE(n) _GRPSSENONE, &n /* ************************************************************************ */ #define Apw &disassembler::Apw #define Apd &disassembler::Apd -#define AL &disassembler::AL -#define CL &disassembler::CL -#define AX &disassembler::AX -#define DX &disassembler::DX +#define AL_Reg &disassembler::AL_Reg +#define CL_Reg &disassembler::CL_Reg +#define AX_Reg &disassembler::AX_Reg +#define DX_Reg &disassembler::DX_Reg -#define EAX &disassembler::EAX -#define RAX &disassembler::RAX +#define EAX_Reg &disassembler::EAX_Reg +#define RAX_Reg &disassembler::RAX_Reg +#define RCX_Reg &disassembler::RCX_Reg -#define CS &disassembler::CS -#define DS &disassembler::DS -#define ES &disassembler::ES -#define SS &disassembler::SS -#define FS &disassembler::FS -#define GS &disassembler::GS +#define CS &disassembler::CS +#define DS &disassembler::DS +#define ES &disassembler::ES +#define SS &disassembler::SS +#define FS &disassembler::FS +#define GS &disassembler::GS -#define Sw &disassembler::Sw +#define Sw &disassembler::Sw -#define Td &disassembler::Td +#define Cd &disassembler::Cd +#define Cq &disassembler::Cq -#define Cd &disassembler::Cd -#define Cq &disassembler::Cq +#define Dd &disassembler::Dd +#define Dq &disassembler::Dq -#define Dd &disassembler::Dd -#define Dq &disassembler::Dq +#define Reg8 &disassembler::Reg8 +#define RX &disassembler::RX +#define ERX &disassembler::ERX +#define RRX &disassembler::RRX -#define R8 &disassembler::R8 -#define RX &disassembler::RX -#define ERX &disassembler::ERX -#define RRX &disassembler::RRX +#define Eb &disassembler::Eb +#define Ew &disassembler::Ew +#define Ed &disassembler::Ed +#define Eq &disassembler::Eq +#define Ey &disassembler::Ey +#define Ebd &disassembler::Ebd +#define Ewd &disassembler::Ewd -#define Eb &disassembler::Eb -#define Ew &disassembler::Ew -#define Ed &disassembler::Ed -#define Eq &disassembler::Eq +#define Gb &disassembler::Gb +#define Gw &disassembler::Gw +#define Gd &disassembler::Gd +#define Gq &disassembler::Gq +#define Gy &disassembler::Gy -#define Gb &disassembler::Gb -#define Gw &disassembler::Gw -#define Gd &disassembler::Gd -#define Gq &disassembler::Gq +#define By &disassembler::By -#define I1 &disassembler::I1 -#define Ib &disassembler::Ib -#define Iw &disassembler::Iw -#define Id &disassembler::Id -#define Iq &disassembler::Iq +#define I1 &disassembler::I1 +#define Ib &disassembler::Ib +#define Iw &disassembler::Iw +#define Id &disassembler::Id +#define Iq &disassembler::Iq +#define IbIb &disassembler::IbIb #define IwIb &disassembler::IwIb #define sIbw &disassembler::sIbw @@ -85,14 +125,15 @@ #define ST0 &disassembler::ST0 #define STi &disassembler::STi -#define Rw &disassembler::Rw -#define Rd &disassembler::Rd -#define Rq &disassembler::Rq +#define Rw &disassembler::Rw +#define Rd &disassembler::Rd +#define Rq &disassembler::Rq +#define Ry &disassembler::Ry -#define Pq &disassembler::Pq -#define Qd &disassembler::Qd -#define Qq &disassembler::Qq -#define Nq &disassembler::Nq +#define Pq &disassembler::Pq +#define Qd &disassembler::Qd +#define Qq &disassembler::Qq +#define Nq &disassembler::Nq #define Vq &disassembler::Vq #define Vdq &disassembler::Vdq @@ -100,8 +141,16 @@ #define Vsd &disassembler::Vsd #define Vps &disassembler::Vps #define Vpd &disassembler::Vpd -#define Udq &disassembler::Udq +#define VIb &disassembler::VIb +#define Ups &disassembler::Ups +#define Upd &disassembler::Upd +#define Udq &disassembler::Udq +#define Uq &disassembler::Uq + +#define Wb &disassembler::Wb +#define Ww &disassembler::Ww +#define Wd &disassembler::Wd #define Wq &disassembler::Wq #define Wdq &disassembler::Wdq #define Wss &disassembler::Wss @@ -109,10 +158,16 @@ #define Wps &disassembler::Wps #define Wpd &disassembler::Wpd -#define Ob &disassembler::Ob -#define Ow &disassembler::Ow -#define Od &disassembler::Od -#define Oq &disassembler::Oq +#define Hdq &disassembler::Hdq +#define Hps &disassembler::Hps +#define Hpd &disassembler::Hpd +#define Hss &disassembler::Hss +#define Hsd &disassembler::Hsd + +#define Ob &disassembler::Ob +#define Ow &disassembler::Ow +#define Od &disassembler::Od +#define Oq &disassembler::Oq #define Ma &disassembler::Ma #define Mp &disassembler::Mp @@ -126,26 +181,37 @@ #define Mdq &disassembler::Mdq #define Mps &disassembler::Mps #define Mpd &disassembler::Mpd +#define Mss &disassembler::Mss +#define Msd &disassembler::Msd -#define Xb &disassembler::Xb -#define Xw &disassembler::Xw -#define Xd &disassembler::Xd -#define Xq &disassembler::Xq +#define VSib &disassembler::VSib -#define Yb &disassembler::Yb -#define Yw &disassembler::Yw -#define Yd &disassembler::Yd -#define Yq &disassembler::Yq +#define Xb &disassembler::Xb +#define Xw &disassembler::Xw +#define Xd &disassembler::Xd +#define Xq &disassembler::Xq -#define Jb &disassembler::Jb -#define Jw &disassembler::Jw -#define Jd &disassembler::Jd +#define Yb &disassembler::Yb +#define Yw &disassembler::Yw +#define Yd &disassembler::Yd +#define Yq &disassembler::Yq -#define XX 0 +#define sYq &disassembler::sYq +#define sYdq &disassembler::sYdq + +#define Jb &disassembler::Jb +#define Jw &disassembler::Jw +#define Jd &disassembler::Jd + +#define XX 0 const struct BxDisasmOpcodeInfo_t -#include "opcodes.inl" -#include "dis_tables.inl" +#include "opcodes.inc" +#include "dis_tables_x87.inc" +#include "dis_tables_sse.inc" +#include "dis_tables_avx.inc" +#include "dis_tables_xop.inc" +#include "dis_tables.inc" #undef XX diff --git a/Externals/Bochs_disasm/dis_tables.inc b/Externals/Bochs_disasm/dis_tables.inc new file mode 100644 index 0000000000..6a80fbfd70 --- /dev/null +++ b/Externals/Bochs_disasm/dis_tables.inc @@ -0,0 +1,3282 @@ +///////////////////////////////////////////////////////////////////////// +// $Id: dis_tables.inc 12247 2014-03-17 20:29:44Z sshwarts $ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (c) 2005-2013 Stanislav Shwartsman +// Written by Stanislav Shwartsman [sshwarts at sourceforge net] +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// +///////////////////////////////////////////////////////////////////////// + +/* ************************************************************************ */ +/* Opcode GroupN */ + +/* Group1 */ +static BxDisasmOpcodeTable_t BxDisasmGroupG1EbIb[8] = { + /* 0 */ { 0, &Ia_addb_Eb_Ib }, + /* 1 */ { 0, &Ia_orb_Eb_Ib }, + /* 2 */ { 0, &Ia_adcb_Eb_Ib }, + /* 3 */ { 0, &Ia_sbbb_Eb_Ib }, + /* 4 */ { 0, &Ia_andb_Eb_Ib }, + /* 5 */ { 0, &Ia_subb_Eb_Ib }, + /* 6 */ { 0, &Ia_xorb_Eb_Ib }, + /* 7 */ { 0, &Ia_cmpb_Eb_Ib } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupG1EwIw[8] = { + /* 0 */ { 0, &Ia_addw_Ew_Iw }, + /* 1 */ { 0, &Ia_orw_Ew_Iw }, + /* 2 */ { 0, &Ia_adcw_Ew_Iw }, + /* 3 */ { 0, &Ia_sbbw_Ew_Iw }, + /* 4 */ { 0, &Ia_andw_Ew_Iw }, + /* 5 */ { 0, &Ia_subw_Ew_Iw }, + /* 6 */ { 0, &Ia_xorw_Ew_Iw }, + /* 7 */ { 0, &Ia_cmpw_Ew_Iw } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupG1EdId[8] = { + /* 0 */ { 0, &Ia_addl_Ed_Id }, + /* 1 */ { 0, &Ia_orl_Ed_Id }, + /* 2 */ { 0, &Ia_adcl_Ed_Id }, + /* 3 */ { 0, &Ia_sbbl_Ed_Id }, + /* 4 */ { 0, &Ia_andl_Ed_Id }, + /* 5 */ { 0, &Ia_subl_Ed_Id }, + /* 6 */ { 0, &Ia_xorl_Ed_Id }, + /* 7 */ { 0, &Ia_cmpl_Ed_Id } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupG1EqId[8] = { + /* 0 */ { 0, &Ia_addq_Eq_sId }, + /* 1 */ { 0, &Ia_orq_Eq_sId }, + /* 2 */ { 0, &Ia_adcq_Eq_sId }, + /* 3 */ { 0, &Ia_sbbq_Eq_sId }, + /* 4 */ { 0, &Ia_andq_Eq_sId }, + /* 5 */ { 0, &Ia_subq_Eq_sId }, + /* 6 */ { 0, &Ia_xorq_Eq_sId }, + /* 7 */ { 0, &Ia_cmpq_Eq_sId } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupG1EwIb[8] = { + /* 0 */ { 0, &Ia_addw_Ew_sIb }, // sign-extend byte + /* 1 */ { 0, &Ia_orw_Ew_sIb }, + /* 2 */ { 0, &Ia_adcw_Ew_sIb }, + /* 3 */ { 0, &Ia_sbbw_Ew_sIb }, + /* 4 */ { 0, &Ia_andw_Ew_sIb }, + /* 5 */ { 0, &Ia_subw_Ew_sIb }, + /* 6 */ { 0, &Ia_xorw_Ew_sIb }, + /* 7 */ { 0, &Ia_cmpw_Ew_sIb } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupG1EdIb[8] = { + /* 0 */ { 0, &Ia_addl_Ed_sIb }, // sign-extend byte + /* 1 */ { 0, &Ia_orl_Ed_sIb }, + /* 2 */ { 0, &Ia_adcl_Ed_sIb }, + /* 3 */ { 0, &Ia_sbbl_Ed_sIb }, + /* 4 */ { 0, &Ia_andl_Ed_sIb }, + /* 5 */ { 0, &Ia_subl_Ed_sIb }, + /* 6 */ { 0, &Ia_xorl_Ed_sIb }, + /* 7 */ { 0, &Ia_cmpl_Ed_sIb } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupG1EqIb[8] = { + /* 0 */ { 0, &Ia_addq_Eq_sIb }, // sign-extend byte + /* 1 */ { 0, &Ia_orq_Eq_sIb }, + /* 2 */ { 0, &Ia_adcq_Eq_sIb }, + /* 3 */ { 0, &Ia_sbbq_Eq_sIb }, + /* 4 */ { 0, &Ia_andq_Eq_sIb }, + /* 5 */ { 0, &Ia_subq_Eq_sIb }, + /* 6 */ { 0, &Ia_xorq_Eq_sIb }, + /* 7 */ { 0, &Ia_cmpq_Eq_sIb } +}; + +/* Group2 */ +static BxDisasmOpcodeTable_t BxDisasmGroupG2Eb[8] = { + /* 0 */ { 0, &Ia_rolb_Eb_Ib }, + /* 1 */ { 0, &Ia_rorb_Eb_Ib }, + /* 2 */ { 0, &Ia_rclb_Eb_Ib }, + /* 3 */ { 0, &Ia_rcrb_Eb_Ib }, + /* 4 */ { 0, &Ia_shlb_Eb_Ib }, + /* 5 */ { 0, &Ia_shrb_Eb_Ib }, + /* 6 */ { 0, &Ia_shlb_Eb_Ib }, + /* 7 */ { 0, &Ia_sarb_Eb_Ib } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupG2EbI1[8] = { + /* 0 */ { 0, &Ia_rolb_Eb_I1 }, + /* 1 */ { 0, &Ia_rorb_Eb_I1 }, + /* 2 */ { 0, &Ia_rclb_Eb_I1 }, + /* 3 */ { 0, &Ia_rcrb_Eb_I1 }, + /* 4 */ { 0, &Ia_shlb_Eb_I1 }, + /* 5 */ { 0, &Ia_shrb_Eb_I1 }, + /* 6 */ { 0, &Ia_shlb_Eb_I1 }, + /* 7 */ { 0, &Ia_sarb_Eb_I1 } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupG2EbCL[8] = { + /* 0 */ { 0, &Ia_rolb_Eb_CL }, + /* 1 */ { 0, &Ia_rorb_Eb_CL }, + /* 2 */ { 0, &Ia_rclb_Eb_CL }, + /* 3 */ { 0, &Ia_rcrb_Eb_CL }, + /* 4 */ { 0, &Ia_shlb_Eb_CL }, + /* 5 */ { 0, &Ia_shrb_Eb_CL }, + /* 6 */ { 0, &Ia_shlb_Eb_CL }, + /* 7 */ { 0, &Ia_sarb_Eb_CL } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupG2Ew[8] = { + /* 0 */ { 0, &Ia_rolw_Ew_Ib }, + /* 1 */ { 0, &Ia_rorw_Ew_Ib }, + /* 2 */ { 0, &Ia_rclw_Ew_Ib }, + /* 3 */ { 0, &Ia_rcrw_Ew_Ib }, + /* 4 */ { 0, &Ia_shlw_Ew_Ib }, + /* 5 */ { 0, &Ia_shrw_Ew_Ib }, + /* 6 */ { 0, &Ia_shlw_Ew_Ib }, + /* 7 */ { 0, &Ia_sarw_Ew_Ib } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupG2Ed[8] = { + /* 0 */ { 0, &Ia_roll_Ed_Ib }, + /* 1 */ { 0, &Ia_rorl_Ed_Ib }, + /* 2 */ { 0, &Ia_rcll_Ed_Ib }, + /* 3 */ { 0, &Ia_rcrl_Ed_Ib }, + /* 4 */ { 0, &Ia_shll_Ed_Ib }, + /* 5 */ { 0, &Ia_shrl_Ed_Ib }, + /* 6 */ { 0, &Ia_shll_Ed_Ib }, + /* 7 */ { 0, &Ia_sarl_Ed_Ib } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupG2Eq[8] = { + /* 0 */ { 0, &Ia_rolq_Eq_Ib }, + /* 1 */ { 0, &Ia_rorq_Eq_Ib }, + /* 2 */ { 0, &Ia_rclq_Eq_Ib }, + /* 3 */ { 0, &Ia_rcrq_Eq_Ib }, + /* 4 */ { 0, &Ia_shlq_Eq_Ib }, + /* 5 */ { 0, &Ia_shrq_Eq_Ib }, + /* 6 */ { 0, &Ia_shlq_Eq_Ib }, + /* 7 */ { 0, &Ia_sarq_Eq_Ib } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupG2EwI1[8] = { + /* 0 */ { 0, &Ia_rolw_Ew_I1 }, + /* 1 */ { 0, &Ia_rorw_Ew_I1 }, + /* 2 */ { 0, &Ia_rclw_Ew_I1 }, + /* 3 */ { 0, &Ia_rcrw_Ew_I1 }, + /* 4 */ { 0, &Ia_shlw_Ew_I1 }, + /* 5 */ { 0, &Ia_shrw_Ew_I1 }, + /* 6 */ { 0, &Ia_shlw_Ew_I1 }, + /* 7 */ { 0, &Ia_sarw_Ew_I1 } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupG2EdI1[8] = { + /* 0 */ { 0, &Ia_roll_Ed_I1 }, + /* 1 */ { 0, &Ia_rorl_Ed_I1 }, + /* 2 */ { 0, &Ia_rcll_Ed_I1 }, + /* 3 */ { 0, &Ia_rcrl_Ed_I1 }, + /* 4 */ { 0, &Ia_shll_Ed_I1 }, + /* 5 */ { 0, &Ia_shrl_Ed_I1 }, + /* 6 */ { 0, &Ia_shll_Ed_I1 }, + /* 7 */ { 0, &Ia_sarl_Ed_I1 } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupG2EqI1[8] = { + /* 0 */ { 0, &Ia_rolq_Eq_I1 }, + /* 1 */ { 0, &Ia_rorq_Eq_I1 }, + /* 2 */ { 0, &Ia_rclq_Eq_I1 }, + /* 3 */ { 0, &Ia_rcrq_Eq_I1 }, + /* 4 */ { 0, &Ia_shlq_Eq_I1 }, + /* 5 */ { 0, &Ia_shrq_Eq_I1 }, + /* 6 */ { 0, &Ia_shlq_Eq_I1 }, + /* 7 */ { 0, &Ia_sarq_Eq_I1 } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupG2EwCL[8] = { + /* 0 */ { 0, &Ia_rolw_Ew_CL }, + /* 1 */ { 0, &Ia_rorw_Ew_CL }, + /* 2 */ { 0, &Ia_rclw_Ew_CL }, + /* 3 */ { 0, &Ia_rcrw_Ew_CL }, + /* 4 */ { 0, &Ia_shlw_Ew_CL }, + /* 5 */ { 0, &Ia_shrw_Ew_CL }, + /* 6 */ { 0, &Ia_shlw_Ew_CL }, + /* 7 */ { 0, &Ia_sarw_Ew_CL } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupG2EdCL[8] = { + /* 0 */ { 0, &Ia_roll_Ed_CL }, + /* 1 */ { 0, &Ia_rorl_Ed_CL }, + /* 2 */ { 0, &Ia_rcll_Ed_CL }, + /* 3 */ { 0, &Ia_rcrl_Ed_CL }, + /* 4 */ { 0, &Ia_shll_Ed_CL }, + /* 5 */ { 0, &Ia_shrl_Ed_CL }, + /* 6 */ { 0, &Ia_shll_Ed_CL }, + /* 7 */ { 0, &Ia_sarl_Ed_CL } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupG2EqCL[8] = { + /* 0 */ { 0, &Ia_rolq_Eq_CL }, + /* 1 */ { 0, &Ia_rorq_Eq_CL }, + /* 2 */ { 0, &Ia_rclq_Eq_CL }, + /* 3 */ { 0, &Ia_rcrq_Eq_CL }, + /* 4 */ { 0, &Ia_shlq_Eq_CL }, + /* 5 */ { 0, &Ia_shrq_Eq_CL }, + /* 6 */ { 0, &Ia_shlq_Eq_CL }, + /* 7 */ { 0, &Ia_sarq_Eq_CL } +}; + +/* Group3 */ +static BxDisasmOpcodeTable_t BxDisasmGroupG3Eb[8] = { + /* 0 */ { 0, &Ia_testb_Eb_Ib }, + /* 1 */ { 0, &Ia_testb_Eb_Ib }, + /* 2 */ { 0, &Ia_notb_Eb }, + /* 3 */ { 0, &Ia_negb_Eb }, + /* 4 */ { 0, &Ia_mulb_AL_Eb }, + /* 5 */ { 0, &Ia_imulb_AL_Eb }, + /* 6 */ { 0, &Ia_divb_AL_Eb }, + /* 7 */ { 0, &Ia_idivb_AL_Eb } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupG3Ew[8] = { + /* 0 */ { 0, &Ia_testw_Ew_Iw }, + /* 1 */ { 0, &Ia_testw_Ew_Iw }, + /* 2 */ { 0, &Ia_notw_Ew }, + /* 3 */ { 0, &Ia_negw_Ew }, + /* 4 */ { 0, &Ia_mulw_AX_Ew }, + /* 5 */ { 0, &Ia_imulw_AX_Ew }, + /* 6 */ { 0, &Ia_divw_AX_Ew }, + /* 7 */ { 0, &Ia_idivw_AX_Ew } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupG3Ed[8] = { + /* 0 */ { 0, &Ia_testl_Ed_Id }, + /* 1 */ { 0, &Ia_testl_Ed_Id }, + /* 2 */ { 0, &Ia_notl_Ed }, + /* 3 */ { 0, &Ia_negl_Ed }, + /* 4 */ { 0, &Ia_mull_EAX_Ed }, + /* 5 */ { 0, &Ia_imull_EAX_Ed }, + /* 6 */ { 0, &Ia_divl_EAX_Ed }, + /* 7 */ { 0, &Ia_idivl_EAX_Ed } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupG3Eq[8] = { + /* 0 */ { 0, &Ia_testq_Eq_sId }, + /* 1 */ { 0, &Ia_testq_Eq_sId }, + /* 2 */ { 0, &Ia_notq_Eq }, + /* 3 */ { 0, &Ia_negq_Eq }, + /* 4 */ { 0, &Ia_mulq_RAX_Eq }, + /* 5 */ { 0, &Ia_imulq_RAX_Eq }, + /* 6 */ { 0, &Ia_divq_RAX_Eq }, + /* 7 */ { 0, &Ia_idivq_RAX_Eq } +}; + +/* Group4 */ +static BxDisasmOpcodeTable_t BxDisasmGroupG4[8] = { + /* 0 */ { 0, &Ia_incb_Eb }, + /* 1 */ { 0, &Ia_decb_Eb }, + /* 2 */ { 0, &Ia_Invalid }, + /* 3 */ { 0, &Ia_Invalid }, + /* 4 */ { 0, &Ia_Invalid }, + /* 5 */ { 0, &Ia_Invalid }, + /* 6 */ { 0, &Ia_Invalid }, + /* 7 */ { 0, &Ia_Invalid } +}; + +/* Group5 */ +static BxDisasmOpcodeTable_t BxDisasmGroupG5w[8] = { + /* 0 */ { 0, &Ia_incw_Ew }, + /* 1 */ { 0, &Ia_decw_Ew }, + /* 2 */ { 0, &Ia_call_Ew }, + /* 3 */ { 0, &Ia_lcall_Mp }, + /* 4 */ { 0, &Ia_jmp_Ew }, + /* 5 */ { 0, &Ia_ljmp_Mp }, + /* 6 */ { 0, &Ia_pushw_Ew }, + /* 7 */ { 0, &Ia_Invalid } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupG5d[8] = { + /* 0 */ { 0, &Ia_incl_Ed }, + /* 1 */ { 0, &Ia_decl_Ed }, + /* 2 */ { 0, &Ia_call_Ed }, + /* 3 */ { 0, &Ia_lcall_Mp }, + /* 4 */ { 0, &Ia_jmp_Ed }, + /* 5 */ { 0, &Ia_ljmp_Mp }, + /* 6 */ { 0, &Ia_pushl_Ed }, + /* 7 */ { 0, &Ia_Invalid } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroup64G5w[8] = { + /* 0 */ { 0, &Ia_incw_Ew }, + /* 1 */ { 0, &Ia_decw_Ew }, + /* 2 */ { 0, &Ia_call_Eq }, + /* 3 */ { 0, &Ia_lcall_Mp }, + /* 4 */ { 0, &Ia_jmp_Eq }, + /* 5 */ { 0, &Ia_ljmp_Mp }, + /* 6 */ { 0, &Ia_pushw_Ew }, + /* 7 */ { 0, &Ia_Invalid } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroup64G5d[8] = { + /* 0 */ { 0, &Ia_incl_Ed }, + /* 1 */ { 0, &Ia_decl_Ed }, + /* 2 */ { 0, &Ia_call_Eq }, + /* 3 */ { 0, &Ia_lcall_Mp }, + /* 4 */ { 0, &Ia_jmp_Eq }, + /* 5 */ { 0, &Ia_ljmp_Mp }, + /* 6 */ { 0, &Ia_pushq_Eq }, + /* 7 */ { 0, &Ia_Invalid } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroup64G5q[8] = { + /* 0 */ { 0, &Ia_incq_Eq }, + /* 1 */ { 0, &Ia_decq_Eq }, + /* 2 */ { 0, &Ia_call_Eq }, + /* 3 */ { 0, &Ia_lcall_Mp }, + /* 4 */ { 0, &Ia_jmp_Eq }, + /* 5 */ { 0, &Ia_ljmp_Mp }, + /* 6 */ { 0, &Ia_pushq_Eq }, + /* 7 */ { 0, &Ia_Invalid } +}; + +/* Group6 */ +static BxDisasmOpcodeTable_t BxDisasmGroupG6[8] = { + /* 0 */ { 0, &Ia_sldt }, + /* 1 */ { 0, &Ia_str }, + /* 2 */ { 0, &Ia_lldt }, + /* 3 */ { 0, &Ia_ltr }, + /* 4 */ { 0, &Ia_verr }, + /* 5 */ { 0, &Ia_verw }, + /* 6 */ { 0, &Ia_Invalid }, + /* 7 */ { 0, &Ia_Invalid } +}; + +/* Group7 */ +static BxDisasmOpcodeTable_t BxDisasmGroupG7M[8] = { + /* 0 */ { 0, &Ia_sgdt }, + /* 2 */ { 0, &Ia_sidt }, + /* 2 */ { 0, &Ia_lgdt }, + /* 3 */ { 0, &Ia_lidt }, + /* 4 */ { 0, &Ia_smsw_Ew }, + /* 5 */ { 0, &Ia_Invalid }, + /* 6 */ { 0, &Ia_lmsw_Ew }, + /* 7 */ { 0, &Ia_invlpg } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupRmINVLPG[8] = { + /* 0 */ { 0, &Ia_swapgs }, + /* 1 */ { 0, &Ia_rdtscp }, + /* 2 */ { 0, &Ia_Invalid }, + /* 3 */ { 0, &Ia_Invalid }, + /* 4 */ { 0, &Ia_Invalid }, + /* 5 */ { 0, &Ia_Invalid }, + /* 6 */ { 0, &Ia_Invalid }, + /* 7 */ { 0, &Ia_Invalid } +}; + +/* VMX */ +static BxDisasmOpcodeTable_t BxDisasmGroupRmG7VMX[8] = { + /* 0 */ { 0, &Ia_Invalid }, + /* 1 */ { GRPSSENONE(Ia_vmcall) }, + /* 2 */ { GRPSSENONE(Ia_vmlaunch) }, + /* 3 */ { GRPSSENONE(Ia_vmresume) }, + /* 4 */ { GRPSSENONE(Ia_vmxoff) }, + /* 5 */ { 0, &Ia_Invalid }, + /* 6 */ { 0, &Ia_Invalid }, + /* 7 */ { 0, &Ia_Invalid } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupRmMONITOR[8] = { + /* 0 */ { GRPSSENONE(Ia_monitor) }, + /* 1 */ { GRPSSENONE(Ia_mwait) }, + /* 2 */ { 0, &Ia_clac }, + /* 3 */ { 0, &Ia_stac }, + /* 4 */ { 0, &Ia_Invalid }, + /* 5 */ { 0, &Ia_Invalid }, + /* 6 */ { 0, &Ia_Invalid }, + /* 7 */ { 0, &Ia_Invalid } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupRmXSETGET[8] = { + /* 0 */ { GRPSSENONE(Ia_xgetbv) }, + /* 1 */ { GRPSSENONE(Ia_xsetbv) }, + /* 2 */ { 0, &Ia_Invalid }, + /* 3 */ { 0, &Ia_Invalid }, + /* 4 */ { GRPSSENONE(Ia_vmfunc) }, + /* 5 */ { 0, &Ia_Invalid }, + /* 6 */ { 0, &Ia_Invalid }, + /* 7 */ { 0, &Ia_Invalid } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupRmG7SVM[8] = { + /* 0 */ { 0, &Ia_vmrun }, + /* 1 */ { 0, &Ia_vmmcall }, + /* 2 */ { 0, &Ia_vmload }, + /* 3 */ { 0, &Ia_vmsave }, + /* 4 */ { 0, &Ia_stgi }, + /* 5 */ { 0, &Ia_clgi }, + /* 6 */ { 0, &Ia_skinit }, + /* 7 */ { 0, &Ia_invlpga } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupG7R[8] = { + /* 0 */ { GRPRM(G7VMX) }, // VMX + /* 1 */ { GRPRM(MONITOR) }, + /* 2 */ { GRPRM(XSETGET) }, + /* 3 */ { GRPRM(G7SVM) }, // SVM + /* 4 */ { 0, &Ia_smsw_Ew }, + /* 5 */ { 0, &Ia_Invalid }, + /* 6 */ { 0, &Ia_lmsw_Ew }, + /* 7 */ { GRPRM(INVLPG) } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupModG7[2] = { + /* R */ { GRPN(G7R) }, + /* M */ { GRPN(G7M) } +}; + +/* Group8 */ +static BxDisasmOpcodeTable_t BxDisasmGroupG8EwIb[8] = { + /* 0 */ { 0, &Ia_Invalid }, + /* 1 */ { 0, &Ia_Invalid }, + /* 2 */ { 0, &Ia_Invalid }, + /* 3 */ { 0, &Ia_Invalid }, + /* 4 */ { 0, &Ia_btw_Ew_Ib }, + /* 5 */ { 0, &Ia_btsw_Ew_Ib }, + /* 6 */ { 0, &Ia_btrw_Ew_Ib }, + /* 7 */ { 0, &Ia_btcw_Ew_Ib } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupG8EdIb[8] = { + /* 0 */ { 0, &Ia_Invalid }, + /* 1 */ { 0, &Ia_Invalid }, + /* 2 */ { 0, &Ia_Invalid }, + /* 3 */ { 0, &Ia_Invalid }, + /* 4 */ { 0, &Ia_btl_Ed_Ib }, + /* 5 */ { 0, &Ia_btsl_Ed_Ib }, + /* 6 */ { 0, &Ia_btrl_Ed_Ib }, + /* 7 */ { 0, &Ia_btcl_Ed_Ib } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupG8EqIb[8] = { + /* 0 */ { 0, &Ia_Invalid }, + /* 1 */ { 0, &Ia_Invalid }, + /* 2 */ { 0, &Ia_Invalid }, + /* 3 */ { 0, &Ia_Invalid }, + /* 4 */ { 0, &Ia_btq_Eq_Ib }, + /* 5 */ { 0, &Ia_btsq_Eq_Ib }, + /* 6 */ { 0, &Ia_btrq_Eq_Ib }, + /* 7 */ { 0, &Ia_btcq_Eq_Ib } +}; + +/* ****** */ +/* Group9 */ +/* ****** */ + +/* VMX */ +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_G9VMX6[4] = { + /* -- */ { 0, &Ia_vmptrld_Mq }, + /* 66 */ { 0, &Ia_vmclear_Mq }, + /* F3 */ { 0, &Ia_vmxon_Mq }, + /* F2 */ { 0, &Ia_Invalid } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupG9M[8] = { + /* 0 */ { 0, &Ia_Invalid }, + /* 1 */ { 0, &Ia_cmpxchg8b_Mq }, + /* 2 */ { 0, &Ia_Invalid }, + /* 3 */ { 0, &Ia_Invalid }, + /* 4 */ { 0, &Ia_xsavec }, + /* 5 */ { 0, &Ia_Invalid }, + /* 6 */ { GRPSSE(G9VMX6) }, + /* 7 */ { GRPSSENONE(Ia_vmptrst_Mq) } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupG9Mq[8] = { + /* 0 */ { 0, &Ia_Invalid }, + /* 1 */ { 0, &Ia_cmpxchg16b_Mdq }, + /* 2 */ { 0, &Ia_Invalid }, + /* 3 */ { 0, &Ia_Invalid }, + /* 4 */ { 0, &Ia_xsavec }, + /* 5 */ { 0, &Ia_Invalid }, + /* 6 */ { GRPSSE(G9VMX6) }, + /* 7 */ { GRPSSENONE(Ia_vmptrst_Mq) } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupG9Rw[8] = { + /* 0 */ { 0, &Ia_Invalid }, + /* 1 */ { 0, &Ia_Invalid }, + /* 2 */ { 0, &Ia_Invalid }, + /* 3 */ { 0, &Ia_Invalid }, + /* 4 */ { 0, &Ia_Invalid }, + /* 5 */ { 0, &Ia_Invalid }, + /* 6 */ { GRPSSENONE(Ia_rdrand_Ew) }, + /* 7 */ { GRPSSENONE(Ia_rdseed_Ew) } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupG9Rd[8] = { + /* 0 */ { 0, &Ia_Invalid }, + /* 1 */ { 0, &Ia_Invalid }, + /* 2 */ { 0, &Ia_Invalid }, + /* 3 */ { 0, &Ia_Invalid }, + /* 4 */ { 0, &Ia_Invalid }, + /* 5 */ { 0, &Ia_Invalid }, + /* 6 */ { GRPSSENONE(Ia_rdrand_Ed) }, + /* 7 */ { GRPSSENONE(Ia_rdseed_Ed) } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupG9Rq[8] = { + /* 0 */ { 0, &Ia_Invalid }, + /* 1 */ { 0, &Ia_Invalid }, + /* 2 */ { 0, &Ia_Invalid }, + /* 3 */ { 0, &Ia_Invalid }, + /* 4 */ { 0, &Ia_Invalid }, + /* 5 */ { 0, &Ia_Invalid }, + /* 6 */ { GRPSSENONE(Ia_rdrand_Eq) }, + /* 7 */ { GRPSSENONE(Ia_rdseed_Eq) } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupModG9w[2] = { + /* R */ { GRPN(G9Rw) }, + /* M */ { GRPN(G9M) } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupModG9d[2] = { + /* R */ { GRPN(G9Rd) }, + /* M */ { GRPN(G9M) } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupModG9q[2] = { + /* R */ { GRPN(G9Rq) }, + /* M */ { GRPN(G9Mq) } +}; + +/* Group11 */ +static BxDisasmOpcodeTable_t BxDisasmGroupG11Eb[8] = { + /* 0 */ { 0, &Ia_movb_Eb_Ib }, + /* 1 */ { 0, &Ia_Invalid }, + /* 2 */ { 0, &Ia_Invalid }, + /* 3 */ { 0, &Ia_Invalid }, + /* 4 */ { 0, &Ia_Invalid }, + /* 5 */ { 0, &Ia_Invalid }, + /* 6 */ { 0, &Ia_Invalid }, + /* 7 */ { 0, &Ia_Invalid } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupG11Ew[8] = { + /* 0 */ { 0, &Ia_movw_Ew_Iw }, + /* 1 */ { 0, &Ia_Invalid }, + /* 2 */ { 0, &Ia_Invalid }, + /* 3 */ { 0, &Ia_Invalid }, + /* 4 */ { 0, &Ia_Invalid }, + /* 5 */ { 0, &Ia_Invalid }, + /* 6 */ { 0, &Ia_Invalid }, + /* 7 */ { 0, &Ia_Invalid } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupG11Ed[8] = { + /* 0 */ { 0, &Ia_movl_Ed_Id }, + /* 1 */ { 0, &Ia_Invalid }, + /* 2 */ { 0, &Ia_Invalid }, + /* 3 */ { 0, &Ia_Invalid }, + /* 4 */ { 0, &Ia_Invalid }, + /* 5 */ { 0, &Ia_Invalid }, + /* 6 */ { 0, &Ia_Invalid }, + /* 7 */ { 0, &Ia_Invalid } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupG11Eq[8] = { + /* 0 */ { 0, &Ia_movq_Eq_sId }, + /* 1 */ { 0, &Ia_Invalid }, + /* 2 */ { 0, &Ia_Invalid }, + /* 3 */ { 0, &Ia_Invalid }, + /* 4 */ { 0, &Ia_Invalid }, + /* 5 */ { 0, &Ia_Invalid }, + /* 6 */ { 0, &Ia_Invalid }, + /* 7 */ { 0, &Ia_Invalid } +}; + +/* Group12 */ +static BxDisasmOpcodeTable_t BxDisasmGroupG12[8] = { + /* 0 */ { 0, &Ia_Invalid }, + /* 1 */ { 0, &Ia_Invalid }, + /* 2 */ { GRPSSE2(G1202) }, + /* 3 */ { 0, &Ia_Invalid }, + /* 4 */ { GRPSSE2(G1204) }, + /* 5 */ { 0, &Ia_Invalid }, + /* 6 */ { GRPSSE2(G1206) }, + /* 7 */ { 0, &Ia_Invalid } +}; + +/* Group13 */ +static BxDisasmOpcodeTable_t BxDisasmGroupG13[8] = { + /* 0 */ { 0, &Ia_Invalid }, + /* 1 */ { 0, &Ia_Invalid }, + /* 2 */ { GRPSSE2(G1302) }, + /* 3 */ { 0, &Ia_Invalid }, + /* 4 */ { GRPSSE2(G1304) }, + /* 5 */ { 0, &Ia_Invalid }, + /* 6 */ { GRPSSE2(G1306) }, + /* 7 */ { 0, &Ia_Invalid } +}; + +/* Group14 */ +static BxDisasmOpcodeTable_t BxDisasmGroupG14[8] = { + /* 0 */ { 0, &Ia_Invalid }, + /* 1 */ { 0, &Ia_Invalid }, + /* 2 */ { GRPSSE2(G1402) }, + /* 3 */ { GRPSSE66(Ia_psrldq_Udq_Ib) }, + /* 4 */ { 0, &Ia_Invalid }, + /* 5 */ { 0, &Ia_Invalid }, + /* 6 */ { GRPSSE2(G1406) }, + /* 7 */ { GRPSSE66(Ia_pslldq_Udq_Ib) } +}; + +/* Group15 */ +static BxDisasmOpcodeTable_t BxDisasmGroupG15M[8] = { + /* 0 */ { 0, &Ia_fxsave }, + /* 1 */ { 0, &Ia_fxrstor }, + /* 2 */ { 0, &Ia_ldmxcsr }, + /* 3 */ { 0, &Ia_stmxcsr }, + /* 4 */ { 0, &Ia_xsave }, + /* 5 */ { 0, &Ia_xrstor }, + /* 6 */ { 0, &Ia_xsaveopt }, + /* 7 */ { 0, &Ia_clflush } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupG15R[8] = { + /* 0 */ { GRPSSEF3(Ia_rdfsbase_Ry) }, + /* 1 */ { GRPSSEF3(Ia_rdgsbase_Ry) }, + /* 2 */ { GRPSSEF3(Ia_wrfsbase_Ry) }, + /* 3 */ { GRPSSEF3(Ia_wrgsbase_Ry) }, + /* 4 */ { 0, &Ia_Invalid }, + /* 5 */ { 0, &Ia_lfence }, + /* 6 */ { 0, &Ia_mfence }, + /* 6 */ { 0, &Ia_sfence }, +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupModG15[2] = { + /* R */ { GRPN(G15R) }, + /* M */ { GRPN(G15M) } +}; + +/* Group16 */ +static BxDisasmOpcodeTable_t BxDisasmGroupG16[8] = +{ + /* 0 */ { 0, &Ia_prefetchnta }, + /* 1 */ { 0, &Ia_prefetcht0 }, + /* 2 */ { 0, &Ia_prefetcht1 }, + /* 3 */ { 0, &Ia_prefetcht2 }, + /* 4 */ { 0, &Ia_prefetch_hint }, + /* 5 */ { 0, &Ia_prefetch_hint }, + /* 6 */ { 0, &Ia_prefetch_hint }, + /* 7 */ { 0, &Ia_prefetch_hint } +}; + +/* ************************************************************************ */ +/* 16-bit operand size */ + +static BxDisasmOpcodeTable_t BxDisasmOpcodes16[256*2] = { + // 256 entries for single byte opcodes + /* 00 */ { 0, &Ia_addb_Eb_Gb }, + /* 01 */ { 0, &Ia_addw_Ew_Gw }, + /* 02 */ { 0, &Ia_addb_Gb_Eb }, + /* 03 */ { 0, &Ia_addw_Gw_Ew }, + /* 04 */ { 0, &Ia_addb_AL_Ib }, + /* 05 */ { 0, &Ia_addw_AX_Iw }, + /* 06 */ { 0, &Ia_pushw_ES }, + /* 07 */ { 0, &Ia_popw_ES }, + /* 08 */ { 0, &Ia_orb_Eb_Gb }, + /* 09 */ { 0, &Ia_orw_Ew_Gw }, + /* 0A */ { 0, &Ia_orb_Gb_Eb }, + /* 0B */ { 0, &Ia_orw_Gw_Ew }, + /* 0C */ { 0, &Ia_orb_AL_Ib }, + /* 0D */ { 0, &Ia_orw_AX_Iw }, + /* 0E */ { 0, &Ia_pushw_CS }, + /* 0F */ { 0, &Ia_error }, // 2 byte escape + /* 10 */ { 0, &Ia_adcb_Eb_Gb }, + /* 11 */ { 0, &Ia_adcw_Ew_Gw }, + /* 12 */ { 0, &Ia_adcb_Gb_Eb }, + /* 13 */ { 0, &Ia_adcw_Gw_Ew }, + /* 14 */ { 0, &Ia_adcb_AL_Ib }, + /* 15 */ { 0, &Ia_adcw_AX_Iw }, + /* 16 */ { 0, &Ia_pushw_SS }, + /* 17 */ { 0, &Ia_popw_SS }, + /* 18 */ { 0, &Ia_sbbb_Eb_Gb }, + /* 19 */ { 0, &Ia_sbbw_Ew_Gw }, + /* 1A */ { 0, &Ia_sbbb_Gb_Eb }, + /* 1B */ { 0, &Ia_sbbw_Gw_Ew }, + /* 1C */ { 0, &Ia_sbbb_AL_Ib }, + /* 1D */ { 0, &Ia_sbbw_AX_Iw }, + /* 1E */ { 0, &Ia_pushw_DS }, + /* 1F */ { 0, &Ia_popw_DS }, + /* 20 */ { 0, &Ia_andb_Eb_Gb }, + /* 21 */ { 0, &Ia_andw_Ew_Gw }, + /* 22 */ { 0, &Ia_andb_Gb_Eb }, + /* 23 */ { 0, &Ia_andw_Gw_Ew }, + /* 24 */ { 0, &Ia_andb_AL_Ib }, + /* 25 */ { 0, &Ia_andw_AX_Iw }, + /* 26 */ { 0, &Ia_prefix_es }, // ES: + /* 27 */ { 0, &Ia_daa }, + /* 28 */ { 0, &Ia_subb_Eb_Gb }, + /* 29 */ { 0, &Ia_subw_Ew_Gw }, + /* 2A */ { 0, &Ia_subb_Gb_Eb }, + /* 2B */ { 0, &Ia_subw_Gw_Ew }, + /* 2C */ { 0, &Ia_subb_AL_Ib }, + /* 2D */ { 0, &Ia_subw_AX_Iw }, + /* 2E */ { 0, &Ia_prefix_cs }, // CS: + /* 2F */ { 0, &Ia_das }, + /* 30 */ { 0, &Ia_xorb_Eb_Gb }, + /* 31 */ { 0, &Ia_xorw_Ew_Gw }, + /* 32 */ { 0, &Ia_xorb_Gb_Eb }, + /* 33 */ { 0, &Ia_xorw_Gw_Ew }, + /* 34 */ { 0, &Ia_xorb_AL_Ib }, + /* 35 */ { 0, &Ia_xorw_AX_Iw }, + /* 36 */ { 0, &Ia_prefix_ss }, // SS: + /* 37 */ { 0, &Ia_aaa }, + /* 38 */ { 0, &Ia_cmpb_Eb_Gb }, + /* 39 */ { 0, &Ia_cmpw_Ew_Gw }, + /* 3A */ { 0, &Ia_cmpb_Gb_Eb }, + /* 3B */ { 0, &Ia_cmpw_Gw_Ew }, + /* 3C */ { 0, &Ia_cmpb_AL_Ib }, + /* 3D */ { 0, &Ia_cmpw_AX_Iw }, + /* 3E */ { 0, &Ia_prefix_ds }, // DS: + /* 3F */ { 0, &Ia_aas }, + /* 40 */ { 0, &Ia_incw_RX }, + /* 41 */ { 0, &Ia_incw_RX }, + /* 42 */ { 0, &Ia_incw_RX }, + /* 43 */ { 0, &Ia_incw_RX }, + /* 44 */ { 0, &Ia_incw_RX }, + /* 45 */ { 0, &Ia_incw_RX }, + /* 46 */ { 0, &Ia_incw_RX }, + /* 47 */ { 0, &Ia_incw_RX }, + /* 48 */ { 0, &Ia_decw_RX }, + /* 49 */ { 0, &Ia_decw_RX }, + /* 4A */ { 0, &Ia_decw_RX }, + /* 4B */ { 0, &Ia_decw_RX }, + /* 4C */ { 0, &Ia_decw_RX }, + /* 4D */ { 0, &Ia_decw_RX }, + /* 4E */ { 0, &Ia_decw_RX }, + /* 4F */ { 0, &Ia_decw_RX }, + /* 50 */ { 0, &Ia_pushw_RX }, + /* 51 */ { 0, &Ia_pushw_RX }, + /* 52 */ { 0, &Ia_pushw_RX }, + /* 53 */ { 0, &Ia_pushw_RX }, + /* 54 */ { 0, &Ia_pushw_RX }, + /* 55 */ { 0, &Ia_pushw_RX }, + /* 56 */ { 0, &Ia_pushw_RX }, + /* 57 */ { 0, &Ia_pushw_RX }, + /* 58 */ { 0, &Ia_popw_RX }, + /* 59 */ { 0, &Ia_popw_RX }, + /* 5A */ { 0, &Ia_popw_RX }, + /* 5B */ { 0, &Ia_popw_RX }, + /* 5C */ { 0, &Ia_popw_RX }, + /* 5D */ { 0, &Ia_popw_RX }, + /* 5E */ { 0, &Ia_popw_RX }, + /* 5F */ { 0, &Ia_popw_RX }, + /* 60 */ { 0, &Ia_pushaw }, + /* 61 */ { 0, &Ia_popaw }, + /* 62 */ { 0, &Ia_boundw_Gw_Ma }, + /* 63 */ { 0, &Ia_arpl_Ew_Gw }, + /* 64 */ { 0, &Ia_prefix_fs }, // FS: + /* 65 */ { 0, &Ia_prefix_gs }, // GS: + /* 66 */ { 0, &Ia_prefix_osize }, // OSIZE: + /* 67 */ { 0, &Ia_prefix_asize }, // ASIZE: + /* 68 */ { 0, &Ia_pushw_Iw }, + /* 69 */ { 0, &Ia_imulw_Gw_Ew_Iw }, + /* 6A */ { 0, &Ia_pushw_sIb }, + /* 6B */ { 0, &Ia_imulw_Gw_Ew_sIb }, + /* 6C */ { 0, &Ia_insb_Yb_DX }, + /* 6D */ { 0, &Ia_insw_Yw_DX }, + /* 6E */ { 0, &Ia_outsb_DX_Xb }, + /* 6F */ { 0, &Ia_outsw_DX_Xw }, + /* 70 */ { 0, &Ia_jo_Jb }, + /* 71 */ { 0, &Ia_jno_Jb }, + /* 72 */ { 0, &Ia_jb_Jb }, + /* 73 */ { 0, &Ia_jnb_Jb }, + /* 74 */ { 0, &Ia_jz_Jb }, + /* 75 */ { 0, &Ia_jnz_Jb }, + /* 76 */ { 0, &Ia_jbe_Jb }, + /* 77 */ { 0, &Ia_jnbe_Jb }, + /* 78 */ { 0, &Ia_js_Jb }, + /* 79 */ { 0, &Ia_jns_Jb }, + /* 7A */ { 0, &Ia_jp_Jb }, + /* 7B */ { 0, &Ia_jnp_Jb }, + /* 7C */ { 0, &Ia_jl_Jb }, + /* 7D */ { 0, &Ia_jnl_Jb }, + /* 7E */ { 0, &Ia_jle_Jb }, + /* 7F */ { 0, &Ia_jnle_Jb }, + /* 80 */ { GRPN(G1EbIb) }, + /* 81 */ { GRPN(G1EwIw) }, + /* 82 */ { GRPN(G1EbIb) }, + /* 83 */ { GRPN(G1EwIb) }, + /* 84 */ { 0, &Ia_testb_Eb_Gb }, + /* 85 */ { 0, &Ia_testw_Ew_Gw }, + /* 86 */ { 0, &Ia_xchgb_Eb_Gb }, + /* 87 */ { 0, &Ia_xchgw_Ew_Gw }, + /* 88 */ { 0, &Ia_movb_Eb_Gb }, + /* 89 */ { 0, &Ia_movw_Ew_Gw }, + /* 8A */ { 0, &Ia_movb_Gb_Eb }, + /* 8B */ { 0, &Ia_movw_Gw_Ew }, + /* 8C */ { 0, &Ia_movw_Ew_Sw }, + /* 8D */ { 0, &Ia_leaw_Gw_Mw }, + /* 8E */ { 0, &Ia_movw_Sw_Ew }, + /* 8F */ { 0, &Ia_popw_Ew }, + /* 90 */ { 0, &Ia_nop }, + /* 91 */ { 0, &Ia_xchgw_RX_AX }, + /* 92 */ { 0, &Ia_xchgw_RX_AX }, + /* 93 */ { 0, &Ia_xchgw_RX_AX }, + /* 94 */ { 0, &Ia_xchgw_RX_AX }, + /* 95 */ { 0, &Ia_xchgw_RX_AX }, + /* 96 */ { 0, &Ia_xchgw_RX_AX }, + /* 97 */ { 0, &Ia_xchgw_RX_AX }, + /* 98 */ { 0, &Ia_cbw }, + /* 99 */ { 0, &Ia_cwd }, + /* 9A */ { 0, &Ia_lcall_Apw }, + /* 9B */ { 0, &Ia_fwait }, + /* 9C */ { 0, &Ia_pushfw }, + /* 9D */ { 0, &Ia_popfw }, + /* 9E */ { 0, &Ia_sahf }, + /* 9F */ { 0, &Ia_lahf }, + /* A0 */ { 0, &Ia_movb_AL_Ob }, + /* A1 */ { 0, &Ia_movw_AX_Ow }, + /* A0 */ { 0, &Ia_movb_Ob_AL }, + /* A1 */ { 0, &Ia_movw_Ow_AX }, + /* A4 */ { 0, &Ia_movsb_Yb_Xb }, + /* A5 */ { 0, &Ia_movsw_Yw_Xw }, + /* A6 */ { 0, &Ia_cmpsb_Xb_Yb }, + /* A7 */ { 0, &Ia_cmpsw_Xw_Yw }, + /* A8 */ { 0, &Ia_testb_AL_Ib }, + /* A9 */ { 0, &Ia_testw_AX_Iw }, + /* AA */ { 0, &Ia_stosb_Yb_AL }, + /* AB */ { 0, &Ia_stosw_Yw_AX }, + /* AC */ { 0, &Ia_lodsb_AL_Xb }, + /* AD */ { 0, &Ia_lodsw_AX_Xw }, + /* AE */ { 0, &Ia_scasb_AL_Yb }, + /* AF */ { 0, &Ia_scasw_AX_Yw }, + /* B0 */ { 0, &Ia_movb_R8_Ib }, + /* B1 */ { 0, &Ia_movb_R8_Ib }, + /* B2 */ { 0, &Ia_movb_R8_Ib }, + /* B3 */ { 0, &Ia_movb_R8_Ib }, + /* B4 */ { 0, &Ia_movb_R8_Ib }, + /* B5 */ { 0, &Ia_movb_R8_Ib }, + /* B6 */ { 0, &Ia_movb_R8_Ib }, + /* B7 */ { 0, &Ia_movb_R8_Ib }, + /* B8 */ { 0, &Ia_movw_RX_Iw }, + /* B9 */ { 0, &Ia_movw_RX_Iw }, + /* BA */ { 0, &Ia_movw_RX_Iw }, + /* BB */ { 0, &Ia_movw_RX_Iw }, + /* BC */ { 0, &Ia_movw_RX_Iw }, + /* BD */ { 0, &Ia_movw_RX_Iw }, + /* BE */ { 0, &Ia_movw_RX_Iw }, + /* BF */ { 0, &Ia_movw_RX_Iw }, + /* C0 */ { GRPN(G2Eb) }, + /* C1 */ { GRPN(G2Ew) }, + /* C2 */ { 0, &Ia_ret_Iw }, + /* C3 */ { 0, &Ia_ret }, + /* C4 */ { 0, &Ia_lesw_Gw_Mp }, + /* C5 */ { 0, &Ia_ldsw_Gw_Mp }, + /* C6 */ { GRPN(G11Eb) }, + /* C7 */ { GRPN(G11Ew) }, + /* C8 */ { 0, &Ia_enter }, + /* C9 */ { 0, &Ia_leave }, + /* CA */ { 0, &Ia_lret_Iw }, + /* CB */ { 0, &Ia_lret }, + /* CC */ { 0, &Ia_int3 }, + /* CD */ { 0, &Ia_int_Ib }, + /* CE */ { 0, &Ia_into }, + /* CF */ { 0, &Ia_iretw }, + /* D0 */ { GRPN(G2EbI1) }, + /* D1 */ { GRPN(G2EwI1) }, + /* D2 */ { GRPN(G2EbCL) }, + /* D3 */ { GRPN(G2EwCL) }, + /* D4 */ { 0, &Ia_aam }, + /* D5 */ { 0, &Ia_aad }, + /* D6 */ { 0, &Ia_salc }, + /* D7 */ { 0, &Ia_xlat }, + /* D8 */ { GRPFP(D8) }, + /* D9 */ { GRPFP(D9) }, + /* DA */ { GRPFP(DA) }, + /* DB */ { GRPFP(DB) }, + /* DC */ { GRPFP(DC) }, + /* DD */ { GRPFP(DD) }, + /* DE */ { GRPFP(DE) }, + /* DF */ { GRPFP(DF) }, + /* E0 */ { 0, &Ia_loopne_Jb }, + /* E1 */ { 0, &Ia_loope_Jb }, + /* E2 */ { 0, &Ia_loop_Jb }, + /* E3 */ { 0, &Ia_jcxz_Jb }, + /* E4 */ { 0, &Ia_inb_AL_Ib }, + /* E5 */ { 0, &Ia_inw_AX_Ib }, + /* E6 */ { 0, &Ia_outb_Ib_AL }, + /* E7 */ { 0, &Ia_outw_Ib_AX }, + /* E8 */ { 0, &Ia_call_Jw }, + /* E9 */ { 0, &Ia_jmp_Jw }, + /* EA */ { 0, &Ia_ljmp_Apw }, + /* EB */ { 0, &Ia_jmp_Jb }, + /* EC */ { 0, &Ia_inb_AL_DX }, + /* ED */ { 0, &Ia_inw_AX_DX }, + /* EE */ { 0, &Ia_outb_DX_AL }, + /* EF */ { 0, &Ia_outw_DX_AX }, + /* F0 */ { 0, &Ia_prefix_lock }, // LOCK: + /* F1 */ { 0, &Ia_int1 }, + /* F2 */ { 0, &Ia_prefix_repne }, // REPNE: + /* F3 */ { 0, &Ia_prefix_rep }, // REP: + /* F4 */ { 0, &Ia_hlt }, + /* F5 */ { 0, &Ia_cmc }, + /* F6 */ { GRPN(G3Eb) }, + /* F7 */ { GRPN(G3Ew) }, + /* F8 */ { 0, &Ia_clc }, + /* F9 */ { 0, &Ia_stc }, + /* FA */ { 0, &Ia_cli }, + /* FB */ { 0, &Ia_sti }, + /* FC */ { 0, &Ia_cld }, + /* FD */ { 0, &Ia_std }, + /* FE */ { GRPN(G4) }, + /* FF */ { GRPN(G5w) }, + + // 256 entries for two byte opcodes + /* 0F 00 */ { GRPN(G6) }, + /* 0F 01 */ { GRPMOD(G7) }, + /* 0F 02 */ { 0, &Ia_larw_Gw_Ew }, + /* 0F 03 */ { 0, &Ia_lslw_Gw_Ew }, + /* 0F 04 */ { 0, &Ia_Invalid }, + /* 0F 05 */ { 0, &Ia_syscall }, + /* 0F 06 */ { 0, &Ia_clts }, + /* 0F 07 */ { 0, &Ia_sysret }, + /* 0F 08 */ { 0, &Ia_invd }, + /* 0F 09 */ { 0, &Ia_wbinvd }, + /* 0F 0A */ { 0, &Ia_Invalid }, + /* 0F 0B */ { 0, &Ia_ud2a }, + /* 0F 0C */ { 0, &Ia_Invalid }, + /* 0F 0D */ { 0, &Ia_prefetchw }, // 3DNow! + /* 0F 0E */ { 0, &Ia_femms }, // 3DNow! + /* 0F 0F */ { GRP3DNOW }, + /* 0F 10 */ { GRPSSE(0f10) }, + /* 0F 11 */ { GRPSSE(0f11) }, + /* 0F 12 */ { GRPSSE(0f12) }, + /* 0F 13 */ { GRPSSE2(0f13) }, + /* 0F 14 */ { GRPSSE2(0f14) }, + /* 0F 15 */ { GRPSSE2(0f15) }, + /* 0F 16 */ { GRPSSE(0f16) }, + /* 0F 17 */ { GRPSSE2(0f17) }, + /* 0F 18 */ { GRPN(G16) }, + /* 0F 19 */ { 0, &Ia_multibyte_nop }, + /* 0F 1A */ { 0, &Ia_multibyte_nop }, + /* 0F 1B */ { 0, &Ia_multibyte_nop }, + /* 0F 1C */ { 0, &Ia_multibyte_nop }, + /* 0F 1D */ { 0, &Ia_multibyte_nop }, + /* 0F 1E */ { 0, &Ia_multibyte_nop }, + /* 0F 1F */ { 0, &Ia_multibyte_nop }, + /* 0F 20 */ { 0, &Ia_movl_Rd_Cd }, + /* 0F 21 */ { 0, &Ia_movl_Rd_Dd }, + /* 0F 22 */ { 0, &Ia_movl_Cd_Rd }, + /* 0F 23 */ { 0, &Ia_movl_Dd_Rd }, + /* 0F 24 */ { 0, &Ia_Invalid }, + /* 0F 25 */ { 0, &Ia_Invalid }, + /* 0F 26 */ { 0, &Ia_Invalid }, + /* 0F 27 */ { 0, &Ia_Invalid }, + /* 0F 28 */ { GRPSSE2(0f28) }, + /* 0F 29 */ { GRPSSE2(0f29) }, + /* 0F 2A */ { GRPSSE(0f2a) }, + /* 0F 2B */ { GRPSSE(0f2b) }, + /* 0F 2C */ { GRPSSE(0f2c) }, + /* 0F 2D */ { GRPSSE(0f2d) }, + /* 0F 2E */ { GRPSSE2(0f2e) }, + /* 0F 2F */ { GRPSSE2(0f2f) }, + /* 0F 30 */ { 0, &Ia_wrmsr }, + /* 0F 31 */ { 0, &Ia_rdtsc }, + /* 0F 32 */ { 0, &Ia_rdmsr }, + /* 0F 33 */ { 0, &Ia_rdpmc }, + /* 0F 34 */ { 0, &Ia_sysenter }, + /* 0F 35 */ { 0, &Ia_sysexit }, + /* 0F 36 */ { 0, &Ia_Invalid }, + /* 0F 37 */ { 0, &Ia_getsec }, + /* 0F 38 */ { GR3BTAB(0f38) }, + /* 0F 39 */ { 0, &Ia_Invalid }, + /* 0F 3A */ { GR3BTAB(0f3a) }, + /* 0F 3B */ { 0, &Ia_Invalid }, + /* 0F 3C */ { 0, &Ia_Invalid }, + /* 0F 3D */ { 0, &Ia_Invalid }, + /* 0F 3E */ { 0, &Ia_Invalid }, + /* 0F 3F */ { 0, &Ia_Invalid }, + /* 0F 40 */ { 0, &Ia_cmovow_Gw_Ew }, + /* 0F 41 */ { 0, &Ia_cmovnow_Gw_Ew }, + /* 0F 42 */ { 0, &Ia_cmovbw_Gw_Ew }, + /* 0F 43 */ { 0, &Ia_cmovnbw_Gw_Ew }, + /* 0F 44 */ { 0, &Ia_cmovzw_Gw_Ew }, + /* 0F 45 */ { 0, &Ia_cmovnzw_Gw_Ew }, + /* 0F 46 */ { 0, &Ia_cmovbew_Gw_Ew }, + /* 0F 47 */ { 0, &Ia_cmovnbew_Gw_Ew }, + /* 0F 48 */ { 0, &Ia_cmovsw_Gw_Ew }, + /* 0F 49 */ { 0, &Ia_cmovnsw_Gw_Ew }, + /* 0F 4A */ { 0, &Ia_cmovpw_Gw_Ew }, + /* 0F 4B */ { 0, &Ia_cmovnpw_Gw_Ew }, + /* 0F 4C */ { 0, &Ia_cmovlw_Gw_Ew }, + /* 0F 4D */ { 0, &Ia_cmovnlw_Gw_Ew }, + /* 0F 4E */ { 0, &Ia_cmovlew_Gw_Ew }, + /* 0F 4F */ { 0, &Ia_cmovnlew_Gw_Ew }, + /* 0F 50 */ { GRPSSE2(0f50) }, + /* 0F 51 */ { GRPSSE(0f51) }, + /* 0F 52 */ { GRPSSE(0f52) }, + /* 0F 53 */ { GRPSSE(0f53) }, + /* 0F 54 */ { GRPSSE2(0f54) }, + /* 0F 55 */ { GRPSSE2(0f55) }, + /* 0F 56 */ { GRPSSE2(0f56) }, + /* 0F 57 */ { GRPSSE2(0f57) }, + /* 0F 58 */ { GRPSSE(0f58) }, + /* 0F 59 */ { GRPSSE(0f59) }, + /* 0F 5A */ { GRPSSE(0f5a) }, + /* 0F 5B */ { GRPSSE(0f5b) }, + /* 0F 5C */ { GRPSSE(0f5c) }, + /* 0F 5D */ { GRPSSE(0f5d) }, + /* 0F 5E */ { GRPSSE(0f5e) }, + /* 0F 5F */ { GRPSSE(0f5f) }, + /* 0F 60 */ { GRPSSE2(0f60) }, + /* 0F 61 */ { GRPSSE2(0f61) }, + /* 0F 62 */ { GRPSSE2(0f62) }, + /* 0F 63 */ { GRPSSE2(0f63) }, + /* 0F 64 */ { GRPSSE2(0f64) }, + /* 0F 65 */ { GRPSSE2(0f65) }, + /* 0F 66 */ { GRPSSE2(0f66) }, + /* 0F 67 */ { GRPSSE2(0f67) }, + /* 0F 68 */ { GRPSSE2(0f68) }, + /* 0F 69 */ { GRPSSE2(0f69) }, + /* 0F 6A */ { GRPSSE2(0f6a) }, + /* 0F 6B */ { GRPSSE2(0f6b) }, + /* 0F 6C */ { GRPSSE66(Ia_punpcklqdq_Vdq_Wdq) }, + /* 0F 6D */ { GRPSSE66(Ia_punpckhqdq_Vdq_Wdq) }, + /* 0F 6E */ { GRPSSE2(0f6e) }, + /* 0F 6F */ { GRPSSE(0f6f) }, + /* 0F 70 */ { GRPSSE(0f70) }, + /* 0F 71 */ { GRPN(G12) }, + /* 0F 72 */ { GRPN(G13) }, + /* 0F 73 */ { GRPN(G14) }, + /* 0F 74 */ { GRPSSE2(0f74) }, + /* 0F 75 */ { GRPSSE2(0f75) }, + /* 0F 76 */ { GRPSSE2(0f76) }, + /* 0F 77 */ { 0, &Ia_emms }, + /* 0F 78 */ { GRPSSE(0f78) }, // VMX + /* 0F 79 */ { GRPSSE(0f79) }, // VMX + /* 0F 7A */ { 0, &Ia_Invalid }, + /* 0F 7B */ { 0, &Ia_Invalid }, + /* 0F 7C */ { GRPSSE(0f7c) }, + /* 0F 7D */ { GRPSSE(0f7d) }, + /* 0F 7E */ { GRPSSE(0f7e) }, + /* 0F 7F */ { GRPSSE(0f7f) }, + /* 0F 80 */ { 0, &Ia_jo_Jw }, + /* 0F 81 */ { 0, &Ia_jno_Jw }, + /* 0F 82 */ { 0, &Ia_jb_Jw }, + /* 0F 83 */ { 0, &Ia_jnb_Jw }, + /* 0F 84 */ { 0, &Ia_jz_Jw }, + /* 0F 85 */ { 0, &Ia_jnz_Jw }, + /* 0F 86 */ { 0, &Ia_jbe_Jw }, + /* 0F 87 */ { 0, &Ia_jnbe_Jw }, + /* 0F 88 */ { 0, &Ia_js_Jw }, + /* 0F 89 */ { 0, &Ia_jns_Jw }, + /* 0F 8A */ { 0, &Ia_jp_Jw }, + /* 0F 8B */ { 0, &Ia_jnp_Jw }, + /* 0F 8C */ { 0, &Ia_jl_Jw }, + /* 0F 8D */ { 0, &Ia_jnl_Jw }, + /* 0F 8E */ { 0, &Ia_jle_Jw }, + /* 0F 8F */ { 0, &Ia_jnle_Jw }, + /* 0F 90 */ { 0, &Ia_seto_Eb }, + /* 0F 91 */ { 0, &Ia_setno_Eb }, + /* 0F 92 */ { 0, &Ia_setb_Eb }, + /* 0F 93 */ { 0, &Ia_setnb_Eb }, + /* 0F 94 */ { 0, &Ia_setz_Eb }, + /* 0F 95 */ { 0, &Ia_setnz_Eb }, + /* 0F 96 */ { 0, &Ia_setbe_Eb }, + /* 0F 97 */ { 0, &Ia_setnbe_Eb }, + /* 0F 98 */ { 0, &Ia_sets_Eb }, + /* 0F 99 */ { 0, &Ia_setns_Eb }, + /* 0F 9A */ { 0, &Ia_setp_Eb }, + /* 0F 9B */ { 0, &Ia_setnp_Eb }, + /* 0F 9C */ { 0, &Ia_setl_Eb }, + /* 0F 9D */ { 0, &Ia_setnl_Eb }, + /* 0F 9E */ { 0, &Ia_setle_Eb }, + /* 0F 9F */ { 0, &Ia_setnle_Eb }, + /* 0F A0 */ { 0, &Ia_pushw_FS }, + /* 0F A1 */ { 0, &Ia_popw_FS }, + /* 0F A2 */ { 0, &Ia_cpuid }, + /* 0F A3 */ { 0, &Ia_btw_Ew_Gw }, + /* 0F A4 */ { 0, &Ia_shldw_Ew_Gw_Ib }, + /* 0F A5 */ { 0, &Ia_shldw_Ew_Gw_CL }, + /* 0F A6 */ { 0, &Ia_Invalid }, + /* 0F A7 */ { 0, &Ia_Invalid }, + /* 0F A8 */ { 0, &Ia_pushw_GS }, + /* 0F A9 */ { 0, &Ia_popw_GS }, + /* 0F AA */ { 0, &Ia_rsm }, + /* 0F AB */ { 0, &Ia_btsw_Ew_Gw }, + /* 0F AC */ { 0, &Ia_shrdw_Ew_Gw_Ib }, + /* 0F AD */ { 0, &Ia_shrdw_Ew_Gw_CL }, + /* 0F AE */ { GRPMOD(G15) }, + /* 0F AF */ { 0, &Ia_imulw_Gw_Ew }, + /* 0F B0 */ { 0, &Ia_cmpxchgb_Eb_Gb }, + /* 0F B1 */ { 0, &Ia_cmpxchgw_Ew_Gw }, + /* 0F B2 */ { 0, &Ia_lssw_Gw_Mp }, + /* 0F B3 */ { 0, &Ia_btrw_Ew_Gw }, + /* 0F B4 */ { 0, &Ia_lfsw_Gw_Mp }, + /* 0F B5 */ { 0, &Ia_lgsw_Gw_Mp }, + /* 0F B6 */ { 0, &Ia_movzbw_Gw_Eb }, + /* 0F B7 */ { 0, &Ia_movw_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 }, + /* 0F BC */ { GRPSSE(0fbcw) }, + /* 0F BD */ { GRPSSE(0fbdw) }, + /* 0F BE */ { 0, &Ia_movsbw_Gw_Eb }, + /* 0F BF */ { 0, &Ia_movw_Gw_Ew }, + /* 0F C0 */ { 0, &Ia_xaddb_Eb_Gb }, + /* 0F C0 */ { 0, &Ia_xaddw_Ew_Gw }, + /* 0F C2 */ { GRPSSE(0fc2) }, + /* 0F C3 */ { GRPSSENONE(Ia_movnti_Md_Gd) }, + /* 0F C4 */ { GRPSSE2(0fc4) }, + /* 0F C5 */ { GRPSSE2(0fc5) }, + /* 0F C6 */ { GRPSSE2(0fc6) }, + /* 0F C7 */ { GRPMOD(G9w) }, + /* 0F C8 */ { 0, &Ia_bswapw_RX }, + /* 0F C9 */ { 0, &Ia_bswapw_RX }, + /* 0F CA */ { 0, &Ia_bswapw_RX }, + /* 0F CB */ { 0, &Ia_bswapw_RX }, + /* 0F CC */ { 0, &Ia_bswapw_RX }, + /* 0F CD */ { 0, &Ia_bswapw_RX }, + /* 0F CE */ { 0, &Ia_bswapw_RX }, + /* 0F CF */ { 0, &Ia_bswapw_RX }, + /* 0F D0 */ { GRPSSE(0fd0) }, + /* 0F D1 */ { GRPSSE2(0fd1) }, + /* 0F D2 */ { GRPSSE2(0fd2) }, + /* 0F D3 */ { GRPSSE2(0fd3) }, + /* 0F D4 */ { GRPSSE2(0fd4) }, + /* 0F D5 */ { GRPSSE2(0fd5) }, + /* 0F D6 */ { GRPSSE(0fd6) }, + /* 0F D7 */ { GRPSSE2(0fd7) }, + /* 0F D8 */ { GRPSSE2(0fd8) }, + /* 0F D9 */ { GRPSSE2(0fd9) }, + /* 0F DA */ { GRPSSE2(0fda) }, + /* 0F DB */ { GRPSSE2(0fdb) }, + /* 0F DC */ { GRPSSE2(0fdc) }, + /* 0F DD */ { GRPSSE2(0fdd) }, + /* 0F DE */ { GRPSSE2(0fde) }, + /* 0F DF */ { GRPSSE2(0fdf) }, + /* 0F E0 */ { GRPSSE2(0fe0) }, + /* 0F E1 */ { GRPSSE2(0fe1) }, + /* 0F E2 */ { GRPSSE2(0fe2) }, + /* 0F E3 */ { GRPSSE2(0fe3) }, + /* 0F E4 */ { GRPSSE2(0fe4) }, + /* 0F E5 */ { GRPSSE2(0fe5) }, + /* 0F E6 */ { GRPSSE(0fe6) }, + /* 0F E7 */ { GRPSSE2(0fe7) }, + /* 0F E8 */ { GRPSSE2(0fe8) }, + /* 0F E9 */ { GRPSSE2(0fe9) }, + /* 0F EA */ { GRPSSE2(0fea) }, + /* 0F EB */ { GRPSSE2(0feb) }, + /* 0F EC */ { GRPSSE2(0fec) }, + /* 0F ED */ { GRPSSE2(0fed) }, + /* 0F EE */ { GRPSSE2(0fee) }, + /* 0F EF */ { GRPSSE2(0fef) }, + /* 0F F0 */ { GRPSSEF2(Ia_lddqu_Vdq_Mdq) }, + /* 0F F1 */ { GRPSSE2(0ff1) }, + /* 0F F2 */ { GRPSSE2(0ff2) }, + /* 0F F3 */ { GRPSSE2(0ff3) }, + /* 0F F4 */ { GRPSSE2(0ff4) }, + /* 0F F5 */ { GRPSSE2(0ff5) }, + /* 0F F6 */ { GRPSSE2(0ff6) }, + /* 0F F7 */ { GRPSSE2(0ff7) }, + /* 0F F8 */ { GRPSSE2(0ff8) }, + /* 0F F9 */ { GRPSSE2(0ff9) }, + /* 0F FA */ { GRPSSE2(0ffa) }, + /* 0F FB */ { GRPSSE2(0ffb) }, + /* 0F FC */ { GRPSSE2(0ffc) }, + /* 0F FD */ { GRPSSE2(0ffd) }, + /* 0F FE */ { GRPSSE2(0ffe) }, + /* 0F FF */ { 0, &Ia_Invalid } +}; + +/* ************************************************************************ */ +/* 32-bit operand size */ + +static BxDisasmOpcodeTable_t BxDisasmOpcodes32[256*2] = { + // 256 entries for single byte opcodes + /* 00 */ { 0, &Ia_addb_Eb_Gb }, + /* 01 */ { 0, &Ia_addl_Ed_Gd }, + /* 02 */ { 0, &Ia_addb_Gb_Eb }, + /* 03 */ { 0, &Ia_addl_Gd_Ed }, + /* 04 */ { 0, &Ia_addb_AL_Ib, }, + /* 05 */ { 0, &Ia_addl_EAX_Id, }, + /* 06 */ { 0, &Ia_pushl_ES }, + /* 07 */ { 0, &Ia_popl_ES }, + /* 08 */ { 0, &Ia_orb_Eb_Gb }, + /* 09 */ { 0, &Ia_orl_Ed_Gd }, + /* 0A */ { 0, &Ia_orb_Gb_Eb }, + /* 0B */ { 0, &Ia_orl_Gd_Ed }, + /* 0C */ { 0, &Ia_orb_AL_Ib }, + /* 0D */ { 0, &Ia_orl_EAX_Id }, + /* 0E */ { 0, &Ia_pushl_CS }, + /* 0F */ { 0, &Ia_error }, // 2 byte escape + /* 10 */ { 0, &Ia_adcb_Eb_Gb }, + /* 11 */ { 0, &Ia_adcl_Ed_Gd }, + /* 12 */ { 0, &Ia_adcb_Gb_Eb }, + /* 13 */ { 0, &Ia_adcl_Gd_Ed }, + /* 14 */ { 0, &Ia_adcb_AL_Ib }, + /* 15 */ { 0, &Ia_adcl_EAX_Id }, + /* 16 */ { 0, &Ia_pushl_SS }, + /* 17 */ { 0, &Ia_popl_SS }, + /* 18 */ { 0, &Ia_sbbb_Eb_Gb }, + /* 19 */ { 0, &Ia_sbbl_Ed_Gd }, + /* 1A */ { 0, &Ia_sbbb_Gb_Eb }, + /* 1B */ { 0, &Ia_sbbl_Gd_Ed }, + /* 1C */ { 0, &Ia_sbbb_AL_Ib }, + /* 1D */ { 0, &Ia_sbbl_EAX_Id }, + /* 1E */ { 0, &Ia_pushl_DS }, + /* 1F */ { 0, &Ia_popl_DS }, + /* 20 */ { 0, &Ia_andb_Eb_Gb }, + /* 21 */ { 0, &Ia_andl_Ed_Gd }, + /* 22 */ { 0, &Ia_andb_Gb_Eb }, + /* 23 */ { 0, &Ia_andl_Gd_Ed }, + /* 24 */ { 0, &Ia_andb_AL_Ib }, + /* 25 */ { 0, &Ia_andl_EAX_Id }, + /* 26 */ { 0, &Ia_prefix_es }, // ES: + /* 27 */ { 0, &Ia_daa }, + /* 28 */ { 0, &Ia_subb_Eb_Gb }, + /* 29 */ { 0, &Ia_subl_Ed_Gd }, + /* 2A */ { 0, &Ia_subb_Gb_Eb }, + /* 2B */ { 0, &Ia_subl_Gd_Ed }, + /* 2C */ { 0, &Ia_subb_AL_Ib }, + /* 2D */ { 0, &Ia_subl_EAX_Id }, + /* 2E */ { 0, &Ia_prefix_cs }, // CS: + /* 2F */ { 0, &Ia_das }, + /* 30 */ { 0, &Ia_xorb_Eb_Gb }, + /* 31 */ { 0, &Ia_xorl_Ed_Gd }, + /* 32 */ { 0, &Ia_xorb_Gb_Eb }, + /* 33 */ { 0, &Ia_xorl_Gd_Ed }, + /* 34 */ { 0, &Ia_xorb_AL_Ib }, + /* 35 */ { 0, &Ia_xorl_EAX_Id }, + /* 36 */ { 0, &Ia_prefix_ss }, // SS: + /* 37 */ { 0, &Ia_aaa }, + /* 38 */ { 0, &Ia_cmpb_Eb_Gb }, + /* 39 */ { 0, &Ia_cmpl_Ed_Gd }, + /* 3A */ { 0, &Ia_cmpb_Gb_Eb }, + /* 3B */ { 0, &Ia_cmpl_Gd_Ed }, + /* 3C */ { 0, &Ia_cmpb_AL_Ib }, + /* 3D */ { 0, &Ia_cmpl_EAX_Id }, + /* 3E */ { 0, &Ia_prefix_ds }, // DS: + /* 3F */ { 0, &Ia_aas }, + /* 40 */ { 0, &Ia_incl_ERX }, + /* 41 */ { 0, &Ia_incl_ERX }, + /* 42 */ { 0, &Ia_incl_ERX }, + /* 43 */ { 0, &Ia_incl_ERX }, + /* 44 */ { 0, &Ia_incl_ERX }, + /* 45 */ { 0, &Ia_incl_ERX }, + /* 46 */ { 0, &Ia_incl_ERX }, + /* 47 */ { 0, &Ia_incl_ERX }, + /* 48 */ { 0, &Ia_decl_ERX }, + /* 49 */ { 0, &Ia_decl_ERX }, + /* 4A */ { 0, &Ia_decl_ERX }, + /* 4B */ { 0, &Ia_decl_ERX }, + /* 4C */ { 0, &Ia_decl_ERX }, + /* 4D */ { 0, &Ia_decl_ERX }, + /* 4E */ { 0, &Ia_decl_ERX }, + /* 4F */ { 0, &Ia_decl_ERX }, + /* 50 */ { 0, &Ia_pushl_ERX }, + /* 51 */ { 0, &Ia_pushl_ERX }, + /* 52 */ { 0, &Ia_pushl_ERX }, + /* 53 */ { 0, &Ia_pushl_ERX }, + /* 54 */ { 0, &Ia_pushl_ERX }, + /* 55 */ { 0, &Ia_pushl_ERX }, + /* 56 */ { 0, &Ia_pushl_ERX }, + /* 57 */ { 0, &Ia_pushl_ERX }, + /* 58 */ { 0, &Ia_popl_ERX }, + /* 59 */ { 0, &Ia_popl_ERX }, + /* 5A */ { 0, &Ia_popl_ERX }, + /* 5B */ { 0, &Ia_popl_ERX }, + /* 5C */ { 0, &Ia_popl_ERX }, + /* 5D */ { 0, &Ia_popl_ERX }, + /* 5E */ { 0, &Ia_popl_ERX }, + /* 5F */ { 0, &Ia_popl_ERX }, + /* 60 */ { 0, &Ia_pushal }, + /* 61 */ { 0, &Ia_popal }, + /* 62 */ { 0, &Ia_boundl_Gd_Ma }, + /* 63 */ { 0, &Ia_arpl_Ew_Gw }, + /* 64 */ { 0, &Ia_prefix_fs }, // FS: + /* 65 */ { 0, &Ia_prefix_gs }, // GS: + /* 66 */ { 0, &Ia_prefix_osize }, // OSIZE: + /* 67 */ { 0, &Ia_prefix_asize }, // ASIZE: + /* 68 */ { 0, &Ia_pushl_Id }, + /* 69 */ { 0, &Ia_imull_Gd_Ed_Id }, + /* 6A */ { 0, &Ia_pushl_sIb }, + /* 6B */ { 0, &Ia_imull_Gd_Ed_sIb }, + /* 6C */ { 0, &Ia_insb_Yb_DX }, + /* 6D */ { 0, &Ia_insl_Yd_DX }, + /* 6E */ { 0, &Ia_outsb_DX_Xb }, + /* 6F */ { 0, &Ia_outsl_DX_Xd }, + /* 70 */ { 0, &Ia_jo_Jb }, + /* 71 */ { 0, &Ia_jno_Jb }, + /* 72 */ { 0, &Ia_jb_Jb }, + /* 73 */ { 0, &Ia_jnb_Jb }, + /* 74 */ { 0, &Ia_jz_Jb }, + /* 75 */ { 0, &Ia_jnz_Jb }, + /* 76 */ { 0, &Ia_jbe_Jb }, + /* 77 */ { 0, &Ia_jnbe_Jb }, + /* 78 */ { 0, &Ia_js_Jb }, + /* 79 */ { 0, &Ia_jns_Jb }, + /* 7A */ { 0, &Ia_jp_Jb }, + /* 7B */ { 0, &Ia_jnp_Jb }, + /* 7C */ { 0, &Ia_jl_Jb }, + /* 7D */ { 0, &Ia_jnl_Jb }, + /* 7E */ { 0, &Ia_jle_Jb }, + /* 7F */ { 0, &Ia_jnle_Jb }, + /* 80 */ { GRPN(G1EbIb) }, + /* 81 */ { GRPN(G1EdId) }, + /* 82 */ { GRPN(G1EbIb) }, + /* 83 */ { GRPN(G1EdIb) }, + /* 84 */ { 0, &Ia_testb_Eb_Gb }, + /* 85 */ { 0, &Ia_testl_Ed_Gd }, + /* 86 */ { 0, &Ia_xchgb_Eb_Gb }, + /* 87 */ { 0, &Ia_xchgl_Ed_Gd }, + /* 88 */ { 0, &Ia_movb_Eb_Gb }, + /* 89 */ { 0, &Ia_movl_Ed_Gd }, + /* 8A */ { 0, &Ia_movb_Gb_Eb }, + /* 8B */ { 0, &Ia_movl_Gd_Ed }, + /* 8C */ { 0, &Ia_movw_Ew_Sw }, + /* 8D */ { 0, &Ia_leal_Gd_Md }, + /* 8E */ { 0, &Ia_movw_Sw_Ew }, + /* 8F */ { 0, &Ia_popl_Ed }, + /* 90 */ { 0, &Ia_nop }, + /* 91 */ { 0, &Ia_xchgl_ERX_EAX }, + /* 92 */ { 0, &Ia_xchgl_ERX_EAX }, + /* 93 */ { 0, &Ia_xchgl_ERX_EAX }, + /* 94 */ { 0, &Ia_xchgl_ERX_EAX }, + /* 95 */ { 0, &Ia_xchgl_ERX_EAX }, + /* 96 */ { 0, &Ia_xchgl_ERX_EAX }, + /* 97 */ { 0, &Ia_xchgl_ERX_EAX }, + /* 98 */ { 0, &Ia_cwde }, + /* 99 */ { 0, &Ia_cdq }, + /* 9A */ { 0, &Ia_lcall_Apd }, + /* 9B */ { 0, &Ia_fwait }, + /* 9C */ { 0, &Ia_pushfl }, + /* 9D */ { 0, &Ia_popfl }, + /* 9E */ { 0, &Ia_sahf }, + /* 9F */ { 0, &Ia_lahf }, + /* A0 */ { 0, &Ia_movb_AL_Ob }, + /* A1 */ { 0, &Ia_movl_EAX_Od }, + /* A0 */ { 0, &Ia_movb_Ob_AL }, + /* A1 */ { 0, &Ia_movl_Od_EAX }, + /* A4 */ { 0, &Ia_movsb_Yb_Xb }, + /* A5 */ { 0, &Ia_movsl_Yd_Xd }, + /* A6 */ { 0, &Ia_cmpsb_Xb_Yb }, + /* A7 */ { 0, &Ia_cmpsl_Xd_Yd }, + /* A8 */ { 0, &Ia_testb_AL_Ib }, + /* A9 */ { 0, &Ia_testl_EAX_Id }, + /* AA */ { 0, &Ia_stosb_Yb_AL }, + /* AB */ { 0, &Ia_stosl_Yd_EAX }, + /* AC */ { 0, &Ia_lodsb_AL_Xb }, + /* AD */ { 0, &Ia_lodsl_EAX_Xd }, + /* AE */ { 0, &Ia_scasb_AL_Yb }, + /* AF */ { 0, &Ia_scasl_EAX_Yd }, + /* B0 */ { 0, &Ia_movb_R8_Ib }, + /* B1 */ { 0, &Ia_movb_R8_Ib }, + /* B2 */ { 0, &Ia_movb_R8_Ib }, + /* B3 */ { 0, &Ia_movb_R8_Ib }, + /* B4 */ { 0, &Ia_movb_R8_Ib }, + /* B5 */ { 0, &Ia_movb_R8_Ib }, + /* B6 */ { 0, &Ia_movb_R8_Ib }, + /* B7 */ { 0, &Ia_movb_R8_Ib }, + /* B8 */ { 0, &Ia_movl_ERX_Id }, + /* B9 */ { 0, &Ia_movl_ERX_Id }, + /* BA */ { 0, &Ia_movl_ERX_Id }, + /* BB */ { 0, &Ia_movl_ERX_Id }, + /* BC */ { 0, &Ia_movl_ERX_Id }, + /* BD */ { 0, &Ia_movl_ERX_Id }, + /* BE */ { 0, &Ia_movl_ERX_Id }, + /* BF */ { 0, &Ia_movl_ERX_Id }, + /* C0 */ { GRPN(G2Eb) }, + /* C1 */ { GRPN(G2Ed) }, + /* C2 */ { 0, &Ia_ret_Iw }, + /* C3 */ { 0, &Ia_ret }, + /* C4 */ { 0, &Ia_lesl_Gd_Mp }, + /* C5 */ { 0, &Ia_ldsl_Gd_Mp }, + /* C6 */ { GRPN(G11Eb) }, + /* C7 */ { GRPN(G11Ed) }, + /* C8 */ { 0, &Ia_enter }, + /* C9 */ { 0, &Ia_leave }, + /* CA */ { 0, &Ia_lret_Iw }, + /* CB */ { 0, &Ia_lret }, + /* CC */ { 0, &Ia_int3 }, + /* CD */ { 0, &Ia_int_Ib }, + /* CE */ { 0, &Ia_into }, + /* CF */ { 0, &Ia_iretl }, + /* D0 */ { GRPN(G2EbI1) }, + /* D1 */ { GRPN(G2EdI1) }, + /* D2 */ { GRPN(G2EbCL) }, + /* D3 */ { GRPN(G2EdCL) }, + /* D4 */ { 0, &Ia_aam }, + /* D5 */ { 0, &Ia_aad }, + /* D6 */ { 0, &Ia_salc }, + /* D7 */ { 0, &Ia_xlat }, + /* D8 */ { GRPFP(D8) }, + /* D9 */ { GRPFP(D9) }, + /* DA */ { GRPFP(DA) }, + /* DB */ { GRPFP(DB) }, + /* DC */ { GRPFP(DC) }, + /* DD */ { GRPFP(DD) }, + /* DE */ { GRPFP(DE) }, + /* DF */ { GRPFP(DF) }, + /* E0 */ { 0, &Ia_loopne_Jb }, + /* E1 */ { 0, &Ia_loope_Jb }, + /* E2 */ { 0, &Ia_loop_Jb }, + /* E3 */ { 0, &Ia_jcxz_Jb }, + /* E4 */ { 0, &Ia_inb_AL_Ib }, + /* E5 */ { 0, &Ia_inl_EAX_Ib }, + /* E6 */ { 0, &Ia_outb_Ib_AL }, + /* E7 */ { 0, &Ia_outl_Ib_EAX }, + /* E8 */ { 0, &Ia_call_Jd }, + /* E9 */ { 0, &Ia_jmp_Jd }, + /* EA */ { 0, &Ia_ljmp_Apd }, + /* EB */ { 0, &Ia_jmp_Jb }, + /* EC */ { 0, &Ia_inb_AL_DX }, + /* ED */ { 0, &Ia_inl_EAX_DX }, + /* EE */ { 0, &Ia_outb_DX_AL }, + /* EF */ { 0, &Ia_outl_DX_EAX }, + /* F0 */ { 0, &Ia_prefix_lock }, // LOCK: + /* F1 */ { 0, &Ia_int1 }, + /* F2 */ { 0, &Ia_prefix_repne }, // REPNE: + /* F3 */ { 0, &Ia_prefix_rep }, // REP: + /* F4 */ { 0, &Ia_hlt }, + /* F5 */ { 0, &Ia_cmc }, + /* F6 */ { GRPN(G3Eb) }, + /* F7 */ { GRPN(G3Ed) }, + /* F8 */ { 0, &Ia_clc }, + /* F9 */ { 0, &Ia_stc }, + /* FA */ { 0, &Ia_cli }, + /* FB */ { 0, &Ia_sti }, + /* FC */ { 0, &Ia_cld }, + /* FD */ { 0, &Ia_std }, + /* FE */ { GRPN(G4) }, + /* FF */ { GRPN(G5d) }, + + // 256 entries for two byte opcodes + /* 0F 00 */ { GRPN(G6) }, + /* 0F 01 */ { GRPMOD(G7) }, + /* 0F 02 */ { 0, &Ia_larl_Gd_Ew }, + /* 0F 03 */ { 0, &Ia_lsll_Gd_Ew }, + /* 0F 04 */ { 0, &Ia_Invalid }, + /* 0F 05 */ { 0, &Ia_syscall }, + /* 0F 06 */ { 0, &Ia_clts }, + /* 0F 07 */ { 0, &Ia_sysret }, + /* 0F 08 */ { 0, &Ia_invd }, + /* 0F 09 */ { 0, &Ia_wbinvd }, + /* 0F 0A */ { 0, &Ia_Invalid }, + /* 0F 0B */ { 0, &Ia_ud2a }, + /* 0F 0C */ { 0, &Ia_Invalid }, + /* 0F 0D */ { 0, &Ia_prefetchw }, // 3DNow! + /* 0F 0E */ { 0, &Ia_femms }, // 3DNow! + /* 0F 0F */ { GRP3DNOW }, + /* 0F 10 */ { GRPSSE(0f10) }, + /* 0F 11 */ { GRPSSE(0f11) }, + /* 0F 12 */ { GRPSSE(0f12) }, + /* 0F 13 */ { GRPSSE2(0f13) }, + /* 0F 14 */ { GRPSSE2(0f14) }, + /* 0F 15 */ { GRPSSE2(0f15) }, + /* 0F 16 */ { GRPSSE(0f16) }, + /* 0F 17 */ { GRPSSE2(0f17) }, + /* 0F 18 */ { GRPN(G16) }, + /* 0F 19 */ { 0, &Ia_multibyte_nop }, + /* 0F 1A */ { 0, &Ia_multibyte_nop }, + /* 0F 1B */ { 0, &Ia_multibyte_nop }, + /* 0F 1C */ { 0, &Ia_multibyte_nop }, + /* 0F 1D */ { 0, &Ia_multibyte_nop }, + /* 0F 1E */ { 0, &Ia_multibyte_nop }, + /* 0F 1F */ { 0, &Ia_multibyte_nop }, + /* 0F 20 */ { 0, &Ia_movl_Rd_Cd }, + /* 0F 21 */ { 0, &Ia_movl_Rd_Dd }, + /* 0F 22 */ { 0, &Ia_movl_Cd_Rd }, + /* 0F 23 */ { 0, &Ia_movl_Dd_Rd }, + /* 0F 24 */ { 0, &Ia_Invalid }, + /* 0F 25 */ { 0, &Ia_Invalid }, + /* 0F 26 */ { 0, &Ia_Invalid }, + /* 0F 27 */ { 0, &Ia_Invalid }, + /* 0F 28 */ { GRPSSE2(0f28) }, + /* 0F 29 */ { GRPSSE2(0f29) }, + /* 0F 2A */ { GRPSSE(0f2a) }, + /* 0F 2B */ { GRPSSE(0f2b) }, + /* 0F 2C */ { GRPSSE(0f2c) }, + /* 0F 2D */ { GRPSSE(0f2d) }, + /* 0F 2E */ { GRPSSE2(0f2e) }, + /* 0F 2F */ { GRPSSE2(0f2f) }, + /* 0F 30 */ { 0, &Ia_wrmsr }, + /* 0F 31 */ { 0, &Ia_rdtsc }, + /* 0F 32 */ { 0, &Ia_rdmsr }, + /* 0F 33 */ { 0, &Ia_rdpmc }, + /* 0F 34 */ { 0, &Ia_sysenter }, + /* 0F 35 */ { 0, &Ia_sysexit }, + /* 0F 36 */ { 0, &Ia_Invalid }, + /* 0F 37 */ { 0, &Ia_getsec }, + /* 0F 38 */ { GR3BTAB(0f38) }, + /* 0F 39 */ { 0, &Ia_Invalid }, + /* 0F 3A */ { GR3BTAB(0f3a) }, + /* 0F 3B */ { 0, &Ia_Invalid }, + /* 0F 3C */ { 0, &Ia_Invalid }, + /* 0F 3D */ { 0, &Ia_Invalid }, + /* 0F 3E */ { 0, &Ia_Invalid }, + /* 0F 3F */ { 0, &Ia_Invalid }, + /* 0F 40 */ { 0, &Ia_cmovol_Gd_Ed }, + /* 0F 41 */ { 0, &Ia_cmovnol_Gd_Ed }, + /* 0F 42 */ { 0, &Ia_cmovbl_Gd_Ed }, + /* 0F 43 */ { 0, &Ia_cmovnbl_Gd_Ed }, + /* 0F 44 */ { 0, &Ia_cmovzl_Gd_Ed }, + /* 0F 45 */ { 0, &Ia_cmovnzl_Gd_Ed }, + /* 0F 46 */ { 0, &Ia_cmovbel_Gd_Ed }, + /* 0F 47 */ { 0, &Ia_cmovnbel_Gd_Ed }, + /* 0F 48 */ { 0, &Ia_cmovsl_Gd_Ed }, + /* 0F 49 */ { 0, &Ia_cmovnsl_Gd_Ed }, + /* 0F 4A */ { 0, &Ia_cmovpl_Gd_Ed }, + /* 0F 4B */ { 0, &Ia_cmovnpl_Gd_Ed }, + /* 0F 4C */ { 0, &Ia_cmovll_Gd_Ed }, + /* 0F 4D */ { 0, &Ia_cmovnll_Gd_Ed }, + /* 0F 4E */ { 0, &Ia_cmovlel_Gd_Ed }, + /* 0F 4F */ { 0, &Ia_cmovnlel_Gd_Ed }, + /* 0F 50 */ { GRPSSE2(0f50) }, + /* 0F 51 */ { GRPSSE(0f51) }, + /* 0F 52 */ { GRPSSE(0f52) }, + /* 0F 53 */ { GRPSSE(0f53) }, + /* 0F 54 */ { GRPSSE2(0f54) }, + /* 0F 55 */ { GRPSSE2(0f55) }, + /* 0F 56 */ { GRPSSE2(0f56) }, + /* 0F 57 */ { GRPSSE2(0f57) }, + /* 0F 58 */ { GRPSSE(0f58) }, + /* 0F 59 */ { GRPSSE(0f59) }, + /* 0F 5A */ { GRPSSE(0f5a) }, + /* 0F 5B */ { GRPSSE(0f5b) }, + /* 0F 5C */ { GRPSSE(0f5c) }, + /* 0F 5D */ { GRPSSE(0f5d) }, + /* 0F 5E */ { GRPSSE(0f5e) }, + /* 0F 5F */ { GRPSSE(0f5f) }, + /* 0F 60 */ { GRPSSE2(0f60) }, + /* 0F 61 */ { GRPSSE2(0f61) }, + /* 0F 62 */ { GRPSSE2(0f62) }, + /* 0F 63 */ { GRPSSE2(0f63) }, + /* 0F 64 */ { GRPSSE2(0f64) }, + /* 0F 65 */ { GRPSSE2(0f65) }, + /* 0F 66 */ { GRPSSE2(0f66) }, + /* 0F 67 */ { GRPSSE2(0f67) }, + /* 0F 68 */ { GRPSSE2(0f68) }, + /* 0F 69 */ { GRPSSE2(0f69) }, + /* 0F 6A */ { GRPSSE2(0f6a) }, + /* 0F 6B */ { GRPSSE2(0f6b) }, + /* 0F 6C */ { GRPSSE66(Ia_punpcklqdq_Vdq_Wdq) }, + /* 0F 6D */ { GRPSSE66(Ia_punpckhqdq_Vdq_Wdq) }, + /* 0F 6E */ { GRPSSE2(0f6e) }, + /* 0F 6F */ { GRPSSE(0f6f) }, + /* 0F 70 */ { GRPSSE(0f70) }, + /* 0F 71 */ { GRPN(G12) }, + /* 0F 72 */ { GRPN(G13) }, + /* 0F 73 */ { GRPN(G14) }, + /* 0F 74 */ { GRPSSE2(0f74) }, + /* 0F 75 */ { GRPSSE2(0f75) }, + /* 0F 76 */ { GRPSSE2(0f76) }, + /* 0F 77 */ { 0, &Ia_emms }, + /* 0F 78 */ { GRPSSE(0f78) }, // VMX + /* 0F 79 */ { GRPSSE(0f79) }, // VMX + /* 0F 7A */ { 0, &Ia_Invalid }, + /* 0F 7B */ { 0, &Ia_Invalid }, + /* 0F 7C */ { GRPSSE(0f7c) }, + /* 0F 7D */ { GRPSSE(0f7d) }, + /* 0F 7E */ { GRPSSE(0f7e) }, + /* 0F 7F */ { GRPSSE(0f7f) }, + /* 0F 80 */ { 0, &Ia_jo_Jd }, + /* 0F 81 */ { 0, &Ia_jno_Jd }, + /* 0F 82 */ { 0, &Ia_jb_Jd }, + /* 0F 83 */ { 0, &Ia_jnb_Jd }, + /* 0F 84 */ { 0, &Ia_jz_Jd }, + /* 0F 85 */ { 0, &Ia_jnz_Jd }, + /* 0F 86 */ { 0, &Ia_jbe_Jd }, + /* 0F 87 */ { 0, &Ia_jnbe_Jd }, + /* 0F 88 */ { 0, &Ia_js_Jd }, + /* 0F 89 */ { 0, &Ia_jns_Jd }, + /* 0F 8A */ { 0, &Ia_jp_Jd }, + /* 0F 8B */ { 0, &Ia_jnp_Jd }, + /* 0F 8C */ { 0, &Ia_jl_Jd }, + /* 0F 8D */ { 0, &Ia_jnl_Jd }, + /* 0F 8E */ { 0, &Ia_jle_Jd }, + /* 0F 8F */ { 0, &Ia_jnle_Jd }, + /* 0F 90 */ { 0, &Ia_seto_Eb }, + /* 0F 91 */ { 0, &Ia_setno_Eb }, + /* 0F 92 */ { 0, &Ia_setb_Eb }, + /* 0F 93 */ { 0, &Ia_setnb_Eb }, + /* 0F 94 */ { 0, &Ia_setz_Eb }, + /* 0F 95 */ { 0, &Ia_setnz_Eb }, + /* 0F 96 */ { 0, &Ia_setbe_Eb }, + /* 0F 97 */ { 0, &Ia_setnbe_Eb }, + /* 0F 98 */ { 0, &Ia_sets_Eb }, + /* 0F 99 */ { 0, &Ia_setns_Eb }, + /* 0F 9A */ { 0, &Ia_setp_Eb }, + /* 0F 9B */ { 0, &Ia_setnp_Eb }, + /* 0F 9C */ { 0, &Ia_setl_Eb }, + /* 0F 9D */ { 0, &Ia_setnl_Eb }, + /* 0F 9E */ { 0, &Ia_setle_Eb }, + /* 0F 9F */ { 0, &Ia_setnle_Eb }, + /* 0F A0 */ { 0, &Ia_pushl_FS }, + /* 0F A1 */ { 0, &Ia_popl_FS }, + /* 0F A2 */ { 0, &Ia_cpuid }, + /* 0F A3 */ { 0, &Ia_btl_Ed_Gd }, + /* 0F A4 */ { 0, &Ia_shldl_Ed_Gd_Ib }, + /* 0F A5 */ { 0, &Ia_shldl_Ed_Gd_CL }, + /* 0F A6 */ { 0, &Ia_Invalid }, + /* 0F A7 */ { 0, &Ia_Invalid }, + /* 0F A8 */ { 0, &Ia_pushl_GS }, + /* 0F A9 */ { 0, &Ia_popl_GS }, + /* 0F AA */ { 0, &Ia_rsm }, + /* 0F AB */ { 0, &Ia_btsl_Ed_Gd }, + /* 0F AC */ { 0, &Ia_shrdl_Ed_Gd_Ib }, + /* 0F AD */ { 0, &Ia_shrdl_Ed_Gd_CL }, + /* 0F AE */ { GRPMOD(G15) }, + /* 0F AF */ { 0, &Ia_imull_Gd_Ed }, + /* 0F B0 */ { 0, &Ia_cmpxchgb_Eb_Gb }, + /* 0F B1 */ { 0, &Ia_cmpxchgl_Ed_Gd }, + /* 0F B2 */ { 0, &Ia_lssl_Gd_Mp }, + /* 0F B3 */ { 0, &Ia_btrl_Ed_Gd }, + /* 0F B4 */ { 0, &Ia_lfsl_Gd_Mp }, + /* 0F B5 */ { 0, &Ia_lgsl_Gd_Mp }, + /* 0F B6 */ { 0, &Ia_movzbl_Gd_Eb }, + /* 0F B7 */ { 0, &Ia_movzwl_Gd_Ew }, + /* 0F B8 */ { GRPSSEF3(Ia_popcnt_Gd_Ed) }, + /* 0F B9 */ { 0, &Ia_ud2b }, + /* 0F BA */ { GRPN(G8EdIb) }, + /* 0F BB */ { 0, &Ia_btcl_Ed_Gd }, + /* 0F BC */ { GRPSSE(0fbcd) }, + /* 0F BD */ { GRPSSE(0fbdd) }, + /* 0F BE */ { 0, &Ia_movsbl_Gd_Eb }, + /* 0F BF */ { 0, &Ia_movswl_Gd_Ew }, + /* 0F C0 */ { 0, &Ia_xaddb_Eb_Gb }, + /* 0F C0 */ { 0, &Ia_xaddl_Ed_Gd }, + /* 0F C2 */ { GRPSSE(0fc2) }, + /* 0F C3 */ { GRPSSENONE(Ia_movnti_Md_Gd) }, + /* 0F C4 */ { GRPSSE2(0fc4) }, + /* 0F C5 */ { GRPSSE2(0fc5) }, + /* 0F C6 */ { GRPSSE2(0fc6) }, + /* 0F C7 */ { GRPMOD(G9d) }, + /* 0F C8 */ { 0, &Ia_bswapl_ERX }, + /* 0F C9 */ { 0, &Ia_bswapl_ERX }, + /* 0F CA */ { 0, &Ia_bswapl_ERX }, + /* 0F CB */ { 0, &Ia_bswapl_ERX }, + /* 0F CC */ { 0, &Ia_bswapl_ERX }, + /* 0F CD */ { 0, &Ia_bswapl_ERX }, + /* 0F CE */ { 0, &Ia_bswapl_ERX }, + /* 0F CF */ { 0, &Ia_bswapl_ERX }, + /* 0F D0 */ { GRPSSE(0fd0) }, + /* 0F D1 */ { GRPSSE2(0fd1) }, + /* 0F D2 */ { GRPSSE2(0fd2) }, + /* 0F D3 */ { GRPSSE2(0fd3) }, + /* 0F D4 */ { GRPSSE2(0fd4) }, + /* 0F D5 */ { GRPSSE2(0fd5) }, + /* 0F D6 */ { GRPSSE(0fd6) }, + /* 0F D7 */ { GRPSSE2(0fd7) }, + /* 0F D8 */ { GRPSSE2(0fd8) }, + /* 0F D9 */ { GRPSSE2(0fd9) }, + /* 0F DA */ { GRPSSE2(0fda) }, + /* 0F DB */ { GRPSSE2(0fdb) }, + /* 0F DC */ { GRPSSE2(0fdc) }, + /* 0F DD */ { GRPSSE2(0fdd) }, + /* 0F DE */ { GRPSSE2(0fde) }, + /* 0F DF */ { GRPSSE2(0fdf) }, + /* 0F E0 */ { GRPSSE2(0fe0) }, + /* 0F E1 */ { GRPSSE2(0fe1) }, + /* 0F E2 */ { GRPSSE2(0fe2) }, + /* 0F E3 */ { GRPSSE2(0fe3) }, + /* 0F E4 */ { GRPSSE2(0fe4) }, + /* 0F E5 */ { GRPSSE2(0fe5) }, + /* 0F E6 */ { GRPSSE(0fe6) }, + /* 0F E7 */ { GRPSSE2(0fe7) }, + /* 0F E8 */ { GRPSSE2(0fe8) }, + /* 0F E9 */ { GRPSSE2(0fe9) }, + /* 0F EA */ { GRPSSE2(0fea) }, + /* 0F EB */ { GRPSSE2(0feb) }, + /* 0F EC */ { GRPSSE2(0fec) }, + /* 0F ED */ { GRPSSE2(0fed) }, + /* 0F EE */ { GRPSSE2(0fee) }, + /* 0F EF */ { GRPSSE2(0fef) }, + /* 0F F0 */ { GRPSSEF2(Ia_lddqu_Vdq_Mdq) }, + /* 0F F1 */ { GRPSSE2(0ff1) }, + /* 0F F2 */ { GRPSSE2(0ff2) }, + /* 0F F3 */ { GRPSSE2(0ff3) }, + /* 0F F4 */ { GRPSSE2(0ff4) }, + /* 0F F5 */ { GRPSSE2(0ff5) }, + /* 0F F6 */ { GRPSSE2(0ff6) }, + /* 0F F7 */ { GRPSSE2(0ff7) }, + /* 0F F8 */ { GRPSSE2(0ff8) }, + /* 0F F9 */ { GRPSSE2(0ff9) }, + /* 0F FA */ { GRPSSE2(0ffa) }, + /* 0F FB */ { GRPSSE2(0ffb) }, + /* 0F FC */ { GRPSSE2(0ffc) }, + /* 0F FD */ { GRPSSE2(0ffd) }, + /* 0F FE */ { GRPSSE2(0ffe) }, + /* 0F FF */ { 0, &Ia_Invalid } +}; + +/* ************************************************************************ */ +/* Long mode */ + +static BxDisasmOpcodeTable_t BxDisasmOpcodes64w[256*2] = { + // 256 entries for single byte opcodes + /* 00 */ { 0, &Ia_addb_Eb_Gb }, + /* 01 */ { 0, &Ia_addw_Ew_Gw }, + /* 02 */ { 0, &Ia_addb_Gb_Eb }, + /* 03 */ { 0, &Ia_addw_Gw_Ew }, + /* 04 */ { 0, &Ia_addb_AL_Ib }, + /* 05 */ { 0, &Ia_addw_AX_Iw }, + /* 06 */ { 0, &Ia_Invalid }, + /* 07 */ { 0, &Ia_Invalid }, + /* 08 */ { 0, &Ia_orb_Eb_Gb }, + /* 09 */ { 0, &Ia_orw_Ew_Gw }, + /* 0A */ { 0, &Ia_orb_Gb_Eb }, + /* 0B */ { 0, &Ia_orw_Gw_Ew }, + /* 0C */ { 0, &Ia_orb_AL_Ib }, + /* 0D */ { 0, &Ia_orw_AX_Iw }, + /* 0E */ { 0, &Ia_Invalid }, + /* 0F */ { 0, &Ia_error }, // 2 byte escape + /* 10 */ { 0, &Ia_adcb_Eb_Gb }, + /* 11 */ { 0, &Ia_adcw_Ew_Gw }, + /* 12 */ { 0, &Ia_adcb_Gb_Eb }, + /* 13 */ { 0, &Ia_adcw_Gw_Ew }, + /* 14 */ { 0, &Ia_adcb_AL_Ib }, + /* 15 */ { 0, &Ia_adcw_AX_Iw }, + /* 16 */ { 0, &Ia_Invalid }, + /* 17 */ { 0, &Ia_Invalid }, + /* 18 */ { 0, &Ia_sbbb_Eb_Gb }, + /* 19 */ { 0, &Ia_sbbw_Ew_Gw }, + /* 1A */ { 0, &Ia_sbbb_Gb_Eb }, + /* 1B */ { 0, &Ia_sbbw_Gw_Ew }, + /* 1C */ { 0, &Ia_sbbb_AL_Ib }, + /* 1D */ { 0, &Ia_sbbw_AX_Iw }, + /* 1E */ { 0, &Ia_Invalid }, + /* 1F */ { 0, &Ia_Invalid }, + /* 20 */ { 0, &Ia_andb_Eb_Gb }, + /* 21 */ { 0, &Ia_andw_Ew_Gw }, + /* 22 */ { 0, &Ia_andb_Gb_Eb }, + /* 23 */ { 0, &Ia_andw_Gw_Ew }, + /* 24 */ { 0, &Ia_andb_AL_Ib }, + /* 25 */ { 0, &Ia_andw_AX_Iw }, + /* 26 */ { 0, &Ia_prefix_es }, // ES: + /* 27 */ { 0, &Ia_Invalid }, + /* 28 */ { 0, &Ia_subb_Eb_Gb }, + /* 29 */ { 0, &Ia_subw_Ew_Gw }, + /* 2A */ { 0, &Ia_subb_Gb_Eb }, + /* 2B */ { 0, &Ia_subw_Gw_Ew }, + /* 2C */ { 0, &Ia_subb_AL_Ib }, + /* 2D */ { 0, &Ia_subw_AX_Iw }, + /* 2E */ { 0, &Ia_prefix_cs }, // CS: + /* 2F */ { 0, &Ia_Invalid }, + /* 30 */ { 0, &Ia_xorb_Eb_Gb }, + /* 31 */ { 0, &Ia_xorw_Ew_Gw }, + /* 32 */ { 0, &Ia_xorb_Gb_Eb }, + /* 33 */ { 0, &Ia_xorw_Gw_Ew }, + /* 34 */ { 0, &Ia_xorb_AL_Ib }, + /* 35 */ { 0, &Ia_xorw_AX_Iw }, + /* 36 */ { 0, &Ia_prefix_ss }, // SS: + /* 37 */ { 0, &Ia_Invalid }, + /* 38 */ { 0, &Ia_cmpb_Eb_Gb }, + /* 39 */ { 0, &Ia_cmpw_Ew_Gw }, + /* 3A */ { 0, &Ia_cmpb_Gb_Eb }, + /* 3B */ { 0, &Ia_cmpw_Gw_Ew }, + /* 3C */ { 0, &Ia_cmpb_AL_Ib }, + /* 3D */ { 0, &Ia_cmpw_AX_Iw }, + /* 3E */ { 0, &Ia_prefix_ds }, // DS: + /* 3F */ { 0, &Ia_Invalid }, + /* 40 */ { 0, &Ia_prefix_rex }, // REX: + /* 41 */ { 0, &Ia_prefix_rex }, // REX: + /* 42 */ { 0, &Ia_prefix_rex }, // REX: + /* 43 */ { 0, &Ia_prefix_rex }, // REX: + /* 44 */ { 0, &Ia_prefix_rex }, // REX: + /* 45 */ { 0, &Ia_prefix_rex }, // REX: + /* 46 */ { 0, &Ia_prefix_rex }, // REX: + /* 47 */ { 0, &Ia_prefix_rex }, // REX: + /* 48 */ { 0, &Ia_prefix_rex }, // REX: + /* 49 */ { 0, &Ia_prefix_rex }, // REX: + /* 4A */ { 0, &Ia_prefix_rex }, // REX: + /* 4B */ { 0, &Ia_prefix_rex }, // REX: + /* 4C */ { 0, &Ia_prefix_rex }, // REX: + /* 4D */ { 0, &Ia_prefix_rex }, // REX: + /* 4E */ { 0, &Ia_prefix_rex }, // REX: + /* 4F */ { 0, &Ia_prefix_rex }, // REX: + /* 50 */ { 0, &Ia_pushw_RX }, + /* 51 */ { 0, &Ia_pushw_RX }, + /* 52 */ { 0, &Ia_pushw_RX }, + /* 53 */ { 0, &Ia_pushw_RX }, + /* 54 */ { 0, &Ia_pushw_RX }, + /* 55 */ { 0, &Ia_pushw_RX }, + /* 56 */ { 0, &Ia_pushw_RX }, + /* 57 */ { 0, &Ia_pushw_RX }, + /* 58 */ { 0, &Ia_popw_RX }, + /* 59 */ { 0, &Ia_popw_RX }, + /* 5A */ { 0, &Ia_popw_RX }, + /* 5B */ { 0, &Ia_popw_RX }, + /* 5C */ { 0, &Ia_popw_RX }, + /* 5D */ { 0, &Ia_popw_RX }, + /* 5E */ { 0, &Ia_popw_RX }, + /* 5F */ { 0, &Ia_popw_RX }, + /* 60 */ { 0, &Ia_Invalid }, + /* 61 */ { 0, &Ia_Invalid }, + /* 62 */ { 0, &Ia_Invalid }, + /* 63 */ { 0, &Ia_movw_Gw_Ew }, + /* 64 */ { 0, &Ia_prefix_fs }, // FS: + /* 65 */ { 0, &Ia_prefix_gs }, // GS: + /* 66 */ { 0, &Ia_prefix_osize }, // OSIZE: + /* 67 */ { 0, &Ia_prefix_asize }, // ASIZE: + /* 68 */ { 0, &Ia_pushw_Iw }, + /* 69 */ { 0, &Ia_imulw_Gw_Ew_Iw }, + /* 6A */ { 0, &Ia_pushw_sIb }, + /* 6B */ { 0, &Ia_imulw_Gw_Ew_sIb }, + /* 6C */ { 0, &Ia_insb_Yb_DX }, + /* 6D */ { 0, &Ia_insw_Yw_DX }, + /* 6E */ { 0, &Ia_outsb_DX_Xb }, + /* 6F */ { 0, &Ia_outsw_DX_Xw }, + /* 70 */ { 0, &Ia_jo_Jb }, + /* 71 */ { 0, &Ia_jno_Jb }, + /* 72 */ { 0, &Ia_jb_Jb }, + /* 73 */ { 0, &Ia_jnb_Jb }, + /* 74 */ { 0, &Ia_jz_Jb }, + /* 75 */ { 0, &Ia_jnz_Jb }, + /* 76 */ { 0, &Ia_jbe_Jb }, + /* 77 */ { 0, &Ia_jnbe_Jb }, + /* 78 */ { 0, &Ia_js_Jb }, + /* 79 */ { 0, &Ia_jns_Jb }, + /* 7A */ { 0, &Ia_jp_Jb }, + /* 7B */ { 0, &Ia_jnp_Jb }, + /* 7C */ { 0, &Ia_jl_Jb }, + /* 7D */ { 0, &Ia_jnl_Jb }, + /* 7E */ { 0, &Ia_jle_Jb }, + /* 7F */ { 0, &Ia_jnle_Jb }, + /* 80 */ { GRPN(G1EbIb) }, + /* 81 */ { GRPN(G1EwIw) }, + /* 82 */ { 9, &Ia_Invalid }, + /* 83 */ { GRPN(G1EwIb) }, + /* 84 */ { 0, &Ia_testb_Eb_Gb }, + /* 85 */ { 0, &Ia_testw_Ew_Gw }, + /* 86 */ { 0, &Ia_xchgb_Eb_Gb }, + /* 87 */ { 0, &Ia_xchgw_Ew_Gw }, + /* 88 */ { 0, &Ia_movb_Eb_Gb }, + /* 89 */ { 0, &Ia_movw_Ew_Gw }, + /* 8A */ { 0, &Ia_movb_Gb_Eb }, + /* 8B */ { 0, &Ia_movw_Gw_Ew }, + /* 8C */ { 0, &Ia_movw_Ew_Sw }, + /* 8D */ { 0, &Ia_leaw_Gw_Mw }, + /* 8E */ { 0, &Ia_movw_Sw_Ew }, + /* 8F */ { 0, &Ia_popw_Ew }, + /* 90 */ { 0, &Ia_xchgw_RX_AX }, // handle XCHG R8w, AX + /* 91 */ { 0, &Ia_xchgw_RX_AX }, + /* 92 */ { 0, &Ia_xchgw_RX_AX }, + /* 93 */ { 0, &Ia_xchgw_RX_AX }, + /* 94 */ { 0, &Ia_xchgw_RX_AX }, + /* 95 */ { 0, &Ia_xchgw_RX_AX }, + /* 96 */ { 0, &Ia_xchgw_RX_AX }, + /* 97 */ { 0, &Ia_xchgw_RX_AX }, + /* 98 */ { 0, &Ia_cbw }, + /* 99 */ { 0, &Ia_cwd }, + /* 9A */ { 0, &Ia_Invalid }, + /* 9B */ { 0, &Ia_fwait }, + /* 9C */ { 0, &Ia_pushfw }, + /* 9D */ { 0, &Ia_popfw }, + /* 9E */ { 0, &Ia_sahf }, + /* 9F */ { 0, &Ia_lahf }, + /* A0 */ { 0, &Ia_movb_AL_Ob }, + /* A1 */ { 0, &Ia_movw_AX_Ow }, + /* A0 */ { 0, &Ia_movb_Ob_AL }, + /* A1 */ { 0, &Ia_movw_Ow_AX }, + /* A4 */ { 0, &Ia_movsb_Yb_Xb }, + /* A5 */ { 0, &Ia_movsw_Yw_Xw }, + /* A6 */ { 0, &Ia_cmpsb_Xb_Yb }, + /* A7 */ { 0, &Ia_cmpsw_Xw_Yw }, + /* A8 */ { 0, &Ia_testb_AL_Ib }, + /* A9 */ { 0, &Ia_testw_AX_Iw }, + /* AA */ { 0, &Ia_stosb_Yb_AL }, + /* AB */ { 0, &Ia_stosw_Yw_AX }, + /* AC */ { 0, &Ia_lodsb_AL_Xb }, + /* AD */ { 0, &Ia_lodsw_AX_Xw }, + /* AE */ { 0, &Ia_scasb_AL_Yb }, + /* AF */ { 0, &Ia_scasw_AX_Yw }, + /* B0 */ { 0, &Ia_movb_R8_Ib }, + /* B1 */ { 0, &Ia_movb_R8_Ib }, + /* B2 */ { 0, &Ia_movb_R8_Ib }, + /* B3 */ { 0, &Ia_movb_R8_Ib }, + /* B4 */ { 0, &Ia_movb_R8_Ib }, + /* B5 */ { 0, &Ia_movb_R8_Ib }, + /* B6 */ { 0, &Ia_movb_R8_Ib }, + /* B7 */ { 0, &Ia_movb_R8_Ib }, + /* B8 */ { 0, &Ia_movw_RX_Iw }, + /* B9 */ { 0, &Ia_movw_RX_Iw }, + /* BA */ { 0, &Ia_movw_RX_Iw }, + /* BB */ { 0, &Ia_movw_RX_Iw }, + /* BC */ { 0, &Ia_movw_RX_Iw }, + /* BD */ { 0, &Ia_movw_RX_Iw }, + /* BE */ { 0, &Ia_movw_RX_Iw }, + /* BF */ { 0, &Ia_movw_RX_Iw }, + /* C0 */ { GRPN(G2Eb) }, + /* C1 */ { GRPN(G2Ew) }, + /* C2 */ { 0, &Ia_ret_Iw }, + /* C3 */ { 0, &Ia_ret }, + /* C4 */ { 0, &Ia_Invalid }, + /* C5 */ { 0, &Ia_Invalid }, + /* C6 */ { GRPN(G11Eb) }, + /* C7 */ { GRPN(G11Ew) }, + /* C8 */ { 0, &Ia_enter }, + /* C9 */ { 0, &Ia_leave }, + /* CA */ { 0, &Ia_lret_Iw }, + /* CB */ { 0, &Ia_lret }, + /* CC */ { 0, &Ia_int3 }, + /* CD */ { 0, &Ia_int_Ib }, + /* CE */ { 0, &Ia_Invalid }, + /* CF */ { 0, &Ia_iretw }, + /* D0 */ { GRPN(G2EbI1) }, + /* D1 */ { GRPN(G2EwI1) }, + /* D2 */ { GRPN(G2EbCL) }, + /* D3 */ { GRPN(G2EwCL) }, + /* D4 */ { 0, &Ia_Invalid }, + /* D5 */ { 0, &Ia_Invalid }, + /* D6 */ { 0, &Ia_Invalid }, + /* D7 */ { 0, &Ia_xlat }, + /* D8 */ { GRPFP(D8) }, + /* D9 */ { GRPFP(D9) }, + /* DA */ { GRPFP(DA) }, + /* DB */ { GRPFP(DB) }, + /* DC */ { GRPFP(DC) }, + /* DD */ { GRPFP(DD) }, + /* DE */ { GRPFP(DE) }, + /* DF */ { GRPFP(DF) }, + /* E0 */ { 0, &Ia_loopne_Jb }, + /* E1 */ { 0, &Ia_loope_Jb }, + /* E2 */ { 0, &Ia_loop_Jb }, + /* E3 */ { 0, &Ia_jrcxz_Jb }, + /* E4 */ { 0, &Ia_inb_AL_Ib }, + /* E5 */ { 0, &Ia_inw_AX_Ib }, + /* E6 */ { 0, &Ia_outb_Ib_AL }, + /* E7 */ { 0, &Ia_outw_Ib_AX }, + /* E8 */ { 0, &Ia_call_Jd }, + /* E9 */ { 0, &Ia_jmp_Jd }, + /* EA */ { 0, &Ia_Invalid }, + /* EB */ { 0, &Ia_jmp_Jb }, + /* EC */ { 0, &Ia_inb_AL_DX }, + /* ED */ { 0, &Ia_inw_AX_DX }, + /* EE */ { 0, &Ia_outb_DX_AL }, + /* EF */ { 0, &Ia_outw_DX_AX }, + /* F0 */ { 0, &Ia_prefix_lock }, // LOCK: + /* F1 */ { 0, &Ia_int1 }, + /* F2 */ { 0, &Ia_prefix_repne }, // REPNE: + /* F3 */ { 0, &Ia_prefix_rep }, // REP: + /* F4 */ { 0, &Ia_hlt }, + /* F5 */ { 0, &Ia_cmc }, + /* F6 */ { GRPN(G3Eb) }, + /* F7 */ { GRPN(G3Ew) }, + /* F8 */ { 0, &Ia_clc }, + /* F9 */ { 0, &Ia_stc }, + /* FA */ { 0, &Ia_cli }, + /* FB */ { 0, &Ia_sti }, + /* FC */ { 0, &Ia_cld }, + /* FD */ { 0, &Ia_std }, + /* FE */ { GRPN(G4) }, + /* FF */ { GRPN(64G5w) }, + + // 256 entries for two byte opcodes + /* 0F 00 */ { GRPN(G6) }, + /* 0F 01 */ { GRPMOD(G7) }, + /* 0F 02 */ { 0, &Ia_larw_Gw_Ew }, + /* 0F 03 */ { 0, &Ia_lslw_Gw_Ew }, + /* 0F 04 */ { 0, &Ia_Invalid }, + /* 0F 05 */ { 0, &Ia_syscall }, + /* 0F 06 */ { 0, &Ia_clts }, + /* 0F 07 */ { 0, &Ia_sysret }, + /* 0F 08 */ { 0, &Ia_invd }, + /* 0F 09 */ { 0, &Ia_wbinvd }, + /* 0F 0A */ { 0, &Ia_Invalid }, + /* 0F 0B */ { 0, &Ia_ud2a }, + /* 0F 0C */ { 0, &Ia_Invalid }, + /* 0F 0D */ { 0, &Ia_prefetchw }, // 3DNow! + /* 0F 0E */ { 0, &Ia_femms }, // 3DNow! + /* 0F 0F */ { GRP3DNOW }, + /* 0F 10 */ { GRPSSE(0f10) }, + /* 0F 11 */ { GRPSSE(0f11) }, + /* 0F 12 */ { GRPSSE(0f12) }, + /* 0F 13 */ { GRPSSE2(0f13) }, + /* 0F 14 */ { GRPSSE2(0f14) }, + /* 0F 15 */ { GRPSSE2(0f15) }, + /* 0F 16 */ { GRPSSE(0f16) }, + /* 0F 17 */ { GRPSSE2(0f17) }, + /* 0F 18 */ { GRPN(G16) }, + /* 0F 19 */ { 0, &Ia_multibyte_nop }, + /* 0F 1A */ { 0, &Ia_multibyte_nop }, + /* 0F 1B */ { 0, &Ia_multibyte_nop }, + /* 0F 1C */ { 0, &Ia_multibyte_nop }, + /* 0F 1D */ { 0, &Ia_multibyte_nop }, + /* 0F 1E */ { 0, &Ia_multibyte_nop }, + /* 0F 1F */ { 0, &Ia_multibyte_nop }, + /* 0F 20 */ { 0, &Ia_movq_Rq_Cq }, + /* 0F 21 */ { 0, &Ia_movq_Rq_Dq }, + /* 0F 22 */ { 0, &Ia_movq_Cq_Rq }, + /* 0F 23 */ { 0, &Ia_movq_Dq_Rq }, + /* 0F 24 */ { 0, &Ia_Invalid }, + /* 0F 25 */ { 0, &Ia_Invalid }, + /* 0F 26 */ { 0, &Ia_Invalid }, + /* 0F 27 */ { 0, &Ia_Invalid }, + /* 0F 28 */ { GRPSSE2(0f28) }, + /* 0F 29 */ { GRPSSE2(0f29) }, + /* 0F 2A */ { GRPSSE(0f2a) }, + /* 0F 2B */ { GRPSSE(0f2b) }, + /* 0F 2C */ { GRPSSE(0f2c) }, + /* 0F 2D */ { GRPSSE(0f2d) }, + /* 0F 2E */ { GRPSSE2(0f2e) }, + /* 0F 2F */ { GRPSSE2(0f2f) }, + /* 0F 30 */ { 0, &Ia_wrmsr }, + /* 0F 31 */ { 0, &Ia_rdtsc }, + /* 0F 32 */ { 0, &Ia_rdmsr }, + /* 0F 33 */ { 0, &Ia_rdpmc }, + /* 0F 34 */ { 0, &Ia_sysenter }, + /* 0F 35 */ { 0, &Ia_sysexit }, + /* 0F 36 */ { 0, &Ia_Invalid }, + /* 0F 37 */ { 0, &Ia_getsec }, + /* 0F 38 */ { GR3BTAB(0f38) }, + /* 0F 39 */ { 0, &Ia_Invalid }, + /* 0F 3A */ { GR3BTAB(0f3a) }, + /* 0F 3B */ { 0, &Ia_Invalid }, + /* 0F 3C */ { 0, &Ia_Invalid }, + /* 0F 3D */ { 0, &Ia_Invalid }, + /* 0F 3E */ { 0, &Ia_Invalid }, + /* 0F 3F */ { 0, &Ia_Invalid }, + /* 0F 40 */ { 0, &Ia_cmovow_Gw_Ew }, + /* 0F 41 */ { 0, &Ia_cmovnow_Gw_Ew }, + /* 0F 42 */ { 0, &Ia_cmovbw_Gw_Ew }, + /* 0F 43 */ { 0, &Ia_cmovnbw_Gw_Ew }, + /* 0F 44 */ { 0, &Ia_cmovzw_Gw_Ew }, + /* 0F 45 */ { 0, &Ia_cmovnzw_Gw_Ew }, + /* 0F 46 */ { 0, &Ia_cmovbew_Gw_Ew }, + /* 0F 47 */ { 0, &Ia_cmovnbew_Gw_Ew }, + /* 0F 48 */ { 0, &Ia_cmovsw_Gw_Ew }, + /* 0F 49 */ { 0, &Ia_cmovnsw_Gw_Ew }, + /* 0F 4A */ { 0, &Ia_cmovpw_Gw_Ew }, + /* 0F 4B */ { 0, &Ia_cmovnpw_Gw_Ew }, + /* 0F 4C */ { 0, &Ia_cmovlw_Gw_Ew }, + /* 0F 4D */ { 0, &Ia_cmovnlw_Gw_Ew }, + /* 0F 4E */ { 0, &Ia_cmovlew_Gw_Ew }, + /* 0F 4F */ { 0, &Ia_cmovnlew_Gw_Ew }, + /* 0F 50 */ { GRPSSE2(0f50) }, + /* 0F 51 */ { GRPSSE(0f51) }, + /* 0F 52 */ { GRPSSE(0f52) }, + /* 0F 53 */ { GRPSSE(0f53) }, + /* 0F 54 */ { GRPSSE2(0f54) }, + /* 0F 55 */ { GRPSSE2(0f55) }, + /* 0F 56 */ { GRPSSE2(0f56) }, + /* 0F 57 */ { GRPSSE2(0f57) }, + /* 0F 58 */ { GRPSSE(0f58) }, + /* 0F 59 */ { GRPSSE(0f59) }, + /* 0F 5A */ { GRPSSE(0f5a) }, + /* 0F 5B */ { GRPSSE(0f5b) }, + /* 0F 5C */ { GRPSSE(0f5c) }, + /* 0F 5D */ { GRPSSE(0f5d) }, + /* 0F 5E */ { GRPSSE(0f5e) }, + /* 0F 5F */ { GRPSSE(0f5f) }, + /* 0F 60 */ { GRPSSE2(0f60) }, + /* 0F 61 */ { GRPSSE2(0f61) }, + /* 0F 62 */ { GRPSSE2(0f62) }, + /* 0F 63 */ { GRPSSE2(0f63) }, + /* 0F 64 */ { GRPSSE2(0f64) }, + /* 0F 65 */ { GRPSSE2(0f65) }, + /* 0F 66 */ { GRPSSE2(0f66) }, + /* 0F 67 */ { GRPSSE2(0f67) }, + /* 0F 68 */ { GRPSSE2(0f68) }, + /* 0F 69 */ { GRPSSE2(0f69) }, + /* 0F 6A */ { GRPSSE2(0f6a) }, + /* 0F 6B */ { GRPSSE2(0f6b) }, + /* 0F 6C */ { GRPSSE66(Ia_punpcklqdq_Vdq_Wdq) }, + /* 0F 6D */ { GRPSSE66(Ia_punpckhqdq_Vdq_Wdq) }, + /* 0F 6E */ { GRPSSE2(0f6e) }, + /* 0F 6F */ { GRPSSE(0f6f) }, + /* 0F 70 */ { GRPSSE(0f70) }, + /* 0F 71 */ { GRPN(G12) }, + /* 0F 72 */ { GRPN(G13) }, + /* 0F 73 */ { GRPN(G14) }, + /* 0F 74 */ { GRPSSE2(0f74) }, + /* 0F 75 */ { GRPSSE2(0f75) }, + /* 0F 76 */ { GRPSSE2(0f76) }, + /* 0F 77 */ { 0, &Ia_emms }, + /* 0F 78 */ { GRPSSE(0f78Q) }, // VMX + /* 0F 79 */ { GRPSSE(0f79Q) }, // VMX + /* 0F 7A */ { 0, &Ia_Invalid }, + /* 0F 7B */ { 0, &Ia_Invalid }, + /* 0F 7C */ { GRPSSE(0f7c) }, + /* 0F 7D */ { GRPSSE(0f7d) }, + /* 0F 7E */ { GRPSSE(0f7e) }, + /* 0F 7F */ { GRPSSE(0f7f) }, + /* 0F 80 */ { 0, &Ia_jo_Jd }, + /* 0F 81 */ { 0, &Ia_jno_Jd }, + /* 0F 82 */ { 0, &Ia_jb_Jd }, + /* 0F 83 */ { 0, &Ia_jnb_Jd }, + /* 0F 84 */ { 0, &Ia_jz_Jd }, + /* 0F 85 */ { 0, &Ia_jnz_Jd }, + /* 0F 86 */ { 0, &Ia_jbe_Jd }, + /* 0F 87 */ { 0, &Ia_jnbe_Jd }, + /* 0F 88 */ { 0, &Ia_js_Jd }, + /* 0F 89 */ { 0, &Ia_jns_Jd }, + /* 0F 8A */ { 0, &Ia_jp_Jd }, + /* 0F 8B */ { 0, &Ia_jnp_Jd }, + /* 0F 8C */ { 0, &Ia_jl_Jd }, + /* 0F 8D */ { 0, &Ia_jnl_Jd }, + /* 0F 8E */ { 0, &Ia_jle_Jd }, + /* 0F 8F */ { 0, &Ia_jnle_Jd }, + /* 0F 90 */ { 0, &Ia_seto_Eb }, + /* 0F 91 */ { 0, &Ia_setno_Eb }, + /* 0F 92 */ { 0, &Ia_setb_Eb }, + /* 0F 93 */ { 0, &Ia_setnb_Eb }, + /* 0F 94 */ { 0, &Ia_setz_Eb }, + /* 0F 95 */ { 0, &Ia_setnz_Eb }, + /* 0F 96 */ { 0, &Ia_setbe_Eb }, + /* 0F 97 */ { 0, &Ia_setnbe_Eb }, + /* 0F 98 */ { 0, &Ia_sets_Eb }, + /* 0F 99 */ { 0, &Ia_setns_Eb }, + /* 0F 9A */ { 0, &Ia_setp_Eb }, + /* 0F 9B */ { 0, &Ia_setnp_Eb }, + /* 0F 9C */ { 0, &Ia_setl_Eb }, + /* 0F 9D */ { 0, &Ia_setnl_Eb }, + /* 0F 9E */ { 0, &Ia_setle_Eb }, + /* 0F 9F */ { 0, &Ia_setnle_Eb }, + /* 0F A0 */ { 0, &Ia_pushw_FS }, + /* 0F A1 */ { 0, &Ia_popw_FS }, + /* 0F A2 */ { 0, &Ia_cpuid }, + /* 0F A3 */ { 0, &Ia_btw_Ew_Gw }, + /* 0F A4 */ { 0, &Ia_shldw_Ew_Gw_Ib }, + /* 0F A5 */ { 0, &Ia_shldw_Ew_Gw_CL }, + /* 0F A6 */ { 0, &Ia_Invalid }, + /* 0F A7 */ { 0, &Ia_Invalid }, + /* 0F A8 */ { 0, &Ia_pushw_GS }, + /* 0F A9 */ { 0, &Ia_popw_GS }, + /* 0F AA */ { 0, &Ia_rsm }, + /* 0F AB */ { 0, &Ia_btsw_Ew_Gw }, + /* 0F AC */ { 0, &Ia_shrdw_Ew_Gw_Ib }, + /* 0F AD */ { 0, &Ia_shrdw_Ew_Gw_CL }, + /* 0F AE */ { GRPMOD(G15) }, + /* 0F AF */ { 0, &Ia_imulw_Gw_Ew }, + /* 0F B0 */ { 0, &Ia_cmpxchgb_Eb_Gb }, + /* 0F B1 */ { 0, &Ia_cmpxchgw_Ew_Gw }, + /* 0F B2 */ { 0, &Ia_lssw_Gw_Mp }, + /* 0F B3 */ { 0, &Ia_btrw_Ew_Gw }, + /* 0F B4 */ { 0, &Ia_lfsw_Gw_Mp }, + /* 0F B5 */ { 0, &Ia_lgsw_Gw_Mp }, + /* 0F B6 */ { 0, &Ia_movzbw_Gw_Eb }, + /* 0F B7 */ { 0, &Ia_movw_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 }, + /* 0F BC */ { GRPSSE(0fbcw) }, + /* 0F BD */ { GRPSSE(0fbdw) }, + /* 0F BE */ { 0, &Ia_movsbw_Gw_Eb }, + /* 0F BF */ { 0, &Ia_movw_Gw_Ew }, + /* 0F C0 */ { 0, &Ia_xaddb_Eb_Gb }, + /* 0F C0 */ { 0, &Ia_xaddw_Ew_Gw }, + /* 0F C2 */ { GRPSSE(0fc2) }, + /* 0F C3 */ { GRPSSENONE(Ia_movnti_Md_Gd) }, + /* 0F C4 */ { GRPSSE2(0fc4) }, + /* 0F C5 */ { GRPSSE2(0fc5) }, + /* 0F C6 */ { GRPSSE2(0fc6) }, + /* 0F C7 */ { GRPMOD(G9w) }, + /* 0F C8 */ { 0, &Ia_bswapw_RX }, + /* 0F C9 */ { 0, &Ia_bswapw_RX }, + /* 0F CA */ { 0, &Ia_bswapw_RX }, + /* 0F CB */ { 0, &Ia_bswapw_RX }, + /* 0F CC */ { 0, &Ia_bswapw_RX }, + /* 0F CD */ { 0, &Ia_bswapw_RX }, + /* 0F CE */ { 0, &Ia_bswapw_RX }, + /* 0F CF */ { 0, &Ia_bswapw_RX }, + /* 0F D0 */ { GRPSSE(0fd0) }, + /* 0F D1 */ { GRPSSE2(0fd1) }, + /* 0F D2 */ { GRPSSE2(0fd2) }, + /* 0F D3 */ { GRPSSE2(0fd3) }, + /* 0F D4 */ { GRPSSE2(0fd4) }, + /* 0F D5 */ { GRPSSE2(0fd5) }, + /* 0F D6 */ { GRPSSE(0fd6) }, + /* 0F D7 */ { GRPSSE2(0fd7) }, + /* 0F D8 */ { GRPSSE2(0fd8) }, + /* 0F D9 */ { GRPSSE2(0fd9) }, + /* 0F DA */ { GRPSSE2(0fda) }, + /* 0F DB */ { GRPSSE2(0fdb) }, + /* 0F DC */ { GRPSSE2(0fdc) }, + /* 0F DD */ { GRPSSE2(0fdd) }, + /* 0F DE */ { GRPSSE2(0fde) }, + /* 0F DF */ { GRPSSE2(0fdf) }, + /* 0F E0 */ { GRPSSE2(0fe0) }, + /* 0F E1 */ { GRPSSE2(0fe1) }, + /* 0F E2 */ { GRPSSE2(0fe2) }, + /* 0F E3 */ { GRPSSE2(0fe3) }, + /* 0F E4 */ { GRPSSE2(0fe4) }, + /* 0F E5 */ { GRPSSE2(0fe5) }, + /* 0F E6 */ { GRPSSE(0fe6) }, + /* 0F E7 */ { GRPSSE2(0fe7) }, + /* 0F E8 */ { GRPSSE2(0fe8) }, + /* 0F E9 */ { GRPSSE2(0fe9) }, + /* 0F EA */ { GRPSSE2(0fea) }, + /* 0F EB */ { GRPSSE2(0feb) }, + /* 0F EC */ { GRPSSE2(0fec) }, + /* 0F ED */ { GRPSSE2(0fed) }, + /* 0F EE */ { GRPSSE2(0fee) }, + /* 0F EF */ { GRPSSE2(0fef) }, + /* 0F F0 */ { GRPSSEF2(Ia_lddqu_Vdq_Mdq) }, + /* 0F F1 */ { GRPSSE2(0ff1) }, + /* 0F F2 */ { GRPSSE2(0ff2) }, + /* 0F F3 */ { GRPSSE2(0ff3) }, + /* 0F F4 */ { GRPSSE2(0ff4) }, + /* 0F F5 */ { GRPSSE2(0ff5) }, + /* 0F F6 */ { GRPSSE2(0ff6) }, + /* 0F F7 */ { GRPSSE2(0ff7) }, + /* 0F F8 */ { GRPSSE2(0ff8) }, + /* 0F F9 */ { GRPSSE2(0ff9) }, + /* 0F FA */ { GRPSSE2(0ffa) }, + /* 0F FB */ { GRPSSE2(0ffb) }, + /* 0F FC */ { GRPSSE2(0ffc) }, + /* 0F FD */ { GRPSSE2(0ffd) }, + /* 0F FE */ { GRPSSE2(0ffe) }, + /* 0F FF */ { 0, &Ia_Invalid } +}; + +static BxDisasmOpcodeTable_t BxDisasmOpcodes64d[256*2] = { + // 256 entries for single byte opcodes + /* 00 */ { 0, &Ia_addb_Eb_Gb }, + /* 01 */ { 0, &Ia_addl_Ed_Gd }, + /* 02 */ { 0, &Ia_addb_Gb_Eb }, + /* 03 */ { 0, &Ia_addl_Gd_Ed }, + /* 04 */ { 0, &Ia_addb_AL_Ib, }, + /* 05 */ { 0, &Ia_addl_EAX_Id, }, + /* 06 */ { 0, &Ia_Invalid }, + /* 07 */ { 0, &Ia_Invalid }, + /* 08 */ { 0, &Ia_orb_Eb_Gb }, + /* 09 */ { 0, &Ia_orl_Ed_Gd }, + /* 0A */ { 0, &Ia_orb_Gb_Eb }, + /* 0B */ { 0, &Ia_orl_Gd_Ed }, + /* 0C */ { 0, &Ia_orb_AL_Ib }, + /* 0D */ { 0, &Ia_orl_EAX_Id }, + /* 0E */ { 0, &Ia_Invalid }, + /* 0F */ { 0, &Ia_error }, // 2 byte escape + /* 10 */ { 0, &Ia_adcb_Eb_Gb }, + /* 11 */ { 0, &Ia_adcl_Ed_Gd }, + /* 12 */ { 0, &Ia_adcb_Gb_Eb }, + /* 13 */ { 0, &Ia_adcl_Gd_Ed }, + /* 14 */ { 0, &Ia_adcb_AL_Ib }, + /* 15 */ { 0, &Ia_adcl_EAX_Id }, + /* 16 */ { 0, &Ia_Invalid }, + /* 17 */ { 0, &Ia_Invalid }, + /* 18 */ { 0, &Ia_sbbb_Eb_Gb }, + /* 19 */ { 0, &Ia_sbbl_Ed_Gd }, + /* 1A */ { 0, &Ia_sbbb_Gb_Eb }, + /* 1B */ { 0, &Ia_sbbl_Gd_Ed }, + /* 1C */ { 0, &Ia_sbbb_AL_Ib }, + /* 1D */ { 0, &Ia_sbbl_EAX_Id }, + /* 1E */ { 0, &Ia_Invalid }, + /* 1F */ { 0, &Ia_Invalid }, + /* 20 */ { 0, &Ia_andb_Eb_Gb }, + /* 21 */ { 0, &Ia_andl_Ed_Gd }, + /* 22 */ { 0, &Ia_andb_Gb_Eb }, + /* 23 */ { 0, &Ia_andl_Gd_Ed }, + /* 24 */ { 0, &Ia_andb_AL_Ib }, + /* 25 */ { 0, &Ia_andl_EAX_Id }, + /* 26 */ { 0, &Ia_prefix_es }, // ES: + /* 27 */ { 0, &Ia_Invalid }, + /* 28 */ { 0, &Ia_subb_Eb_Gb }, + /* 29 */ { 0, &Ia_subl_Ed_Gd }, + /* 2A */ { 0, &Ia_subb_Gb_Eb }, + /* 2B */ { 0, &Ia_subl_Gd_Ed }, + /* 2C */ { 0, &Ia_subb_AL_Ib }, + /* 2D */ { 0, &Ia_subl_EAX_Id }, + /* 2E */ { 0, &Ia_prefix_cs }, // CS: + /* 2F */ { 0, &Ia_Invalid }, + /* 30 */ { 0, &Ia_xorb_Eb_Gb }, + /* 31 */ { 0, &Ia_xorl_Ed_Gd }, + /* 32 */ { 0, &Ia_xorb_Gb_Eb }, + /* 33 */ { 0, &Ia_xorl_Gd_Ed }, + /* 34 */ { 0, &Ia_xorb_AL_Ib }, + /* 35 */ { 0, &Ia_xorl_EAX_Id }, + /* 36 */ { 0, &Ia_prefix_ss }, // SS: + /* 37 */ { 0, &Ia_Invalid }, + /* 38 */ { 0, &Ia_cmpb_Eb_Gb }, + /* 39 */ { 0, &Ia_cmpl_Ed_Gd }, + /* 3A */ { 0, &Ia_cmpb_Gb_Eb }, + /* 3B */ { 0, &Ia_cmpl_Gd_Ed }, + /* 3C */ { 0, &Ia_cmpb_AL_Ib }, + /* 3D */ { 0, &Ia_cmpl_EAX_Id }, + /* 3E */ { 0, &Ia_prefix_ds }, // DS: + /* 3F */ { 0, &Ia_Invalid }, + /* 40 */ { 0, &Ia_prefix_rex }, // REX: + /* 41 */ { 0, &Ia_prefix_rex }, // REX: + /* 42 */ { 0, &Ia_prefix_rex }, // REX: + /* 43 */ { 0, &Ia_prefix_rex }, // REX: + /* 44 */ { 0, &Ia_prefix_rex }, // REX: + /* 45 */ { 0, &Ia_prefix_rex }, // REX: + /* 46 */ { 0, &Ia_prefix_rex }, // REX: + /* 47 */ { 0, &Ia_prefix_rex }, // REX: + /* 48 */ { 0, &Ia_prefix_rex }, // REX: + /* 49 */ { 0, &Ia_prefix_rex }, // REX: + /* 4A */ { 0, &Ia_prefix_rex }, // REX: + /* 4B */ { 0, &Ia_prefix_rex }, // REX: + /* 4C */ { 0, &Ia_prefix_rex }, // REX: + /* 4D */ { 0, &Ia_prefix_rex }, // REX: + /* 4E */ { 0, &Ia_prefix_rex }, // REX: + /* 4F */ { 0, &Ia_prefix_rex }, // REX: + /* 50 */ { 0, &Ia_pushq_RRX }, + /* 51 */ { 0, &Ia_pushq_RRX }, + /* 52 */ { 0, &Ia_pushq_RRX }, + /* 53 */ { 0, &Ia_pushq_RRX }, + /* 54 */ { 0, &Ia_pushq_RRX }, + /* 55 */ { 0, &Ia_pushq_RRX }, + /* 56 */ { 0, &Ia_pushq_RRX }, + /* 57 */ { 0, &Ia_pushq_RRX }, + /* 58 */ { 0, &Ia_popq_RRX }, + /* 59 */ { 0, &Ia_popq_RRX }, + /* 5A */ { 0, &Ia_popq_RRX }, + /* 5B */ { 0, &Ia_popq_RRX }, + /* 5C */ { 0, &Ia_popq_RRX }, + /* 5D */ { 0, &Ia_popq_RRX }, + /* 5E */ { 0, &Ia_popq_RRX }, + /* 5F */ { 0, &Ia_popq_RRX }, + /* 60 */ { 0, &Ia_Invalid }, + /* 61 */ { 0, &Ia_Invalid }, + /* 62 */ { 0, &Ia_Invalid }, + /* 63 */ { 0, &Ia_movl_Gd_Ed }, + /* 64 */ { 0, &Ia_prefix_fs }, // FS: + /* 65 */ { 0, &Ia_prefix_gs }, // GS: + /* 66 */ { 0, &Ia_prefix_osize }, // OSIZE: + /* 67 */ { 0, &Ia_prefix_asize }, // ASIZE: + /* 68 */ { 0, &Ia_pushq_sId }, + /* 69 */ { 0, &Ia_imull_Gd_Ed_Id }, + /* 6A */ { 0, &Ia_pushq_sIb }, + /* 6B */ { 0, &Ia_imull_Gd_Ed_sIb }, + /* 6C */ { 0, &Ia_insb_Yb_DX }, + /* 6D */ { 0, &Ia_insl_Yd_DX }, + /* 6E */ { 0, &Ia_outsb_DX_Xb }, + /* 6F */ { 0, &Ia_outsl_DX_Xd }, + /* 70 */ { 0, &Ia_jo_Jb }, + /* 71 */ { 0, &Ia_jno_Jb }, + /* 72 */ { 0, &Ia_jb_Jb }, + /* 73 */ { 0, &Ia_jnb_Jb }, + /* 74 */ { 0, &Ia_jz_Jb }, + /* 75 */ { 0, &Ia_jnz_Jb }, + /* 76 */ { 0, &Ia_jbe_Jb }, + /* 77 */ { 0, &Ia_jnbe_Jb }, + /* 78 */ { 0, &Ia_js_Jb }, + /* 79 */ { 0, &Ia_jns_Jb }, + /* 7A */ { 0, &Ia_jp_Jb }, + /* 7B */ { 0, &Ia_jnp_Jb }, + /* 7C */ { 0, &Ia_jl_Jb }, + /* 7D */ { 0, &Ia_jnl_Jb }, + /* 7E */ { 0, &Ia_jle_Jb }, + /* 7F */ { 0, &Ia_jnle_Jb }, + /* 80 */ { GRPN(G1EbIb) }, + /* 81 */ { GRPN(G1EdId) }, + /* 82 */ { 0, &Ia_Invalid }, + /* 83 */ { GRPN(G1EdIb) }, + /* 84 */ { 0, &Ia_testb_Eb_Gb }, + /* 85 */ { 0, &Ia_testl_Ed_Gd }, + /* 86 */ { 0, &Ia_xchgb_Eb_Gb }, + /* 87 */ { 0, &Ia_xchgl_Ed_Gd }, + /* 88 */ { 0, &Ia_movb_Eb_Gb }, + /* 89 */ { 0, &Ia_movl_Ed_Gd }, + /* 8A */ { 0, &Ia_movb_Gb_Eb }, + /* 8B */ { 0, &Ia_movl_Gd_Ed }, + /* 8C */ { 0, &Ia_movw_Ew_Sw }, + /* 8D */ { 0, &Ia_leal_Gd_Md }, + /* 8E */ { 0, &Ia_movw_Sw_Ew }, + /* 8F */ { 0, &Ia_popq_Eq }, + /* 90 */ { 0, &Ia_xchgl_ERX_EAX }, // handle XCHG R8d, EAX + /* 91 */ { 0, &Ia_xchgl_ERX_EAX }, + /* 92 */ { 0, &Ia_xchgl_ERX_EAX }, + /* 93 */ { 0, &Ia_xchgl_ERX_EAX }, + /* 94 */ { 0, &Ia_xchgl_ERX_EAX }, + /* 95 */ { 0, &Ia_xchgl_ERX_EAX }, + /* 96 */ { 0, &Ia_xchgl_ERX_EAX }, + /* 97 */ { 0, &Ia_xchgl_ERX_EAX }, + /* 98 */ { 0, &Ia_cwde }, + /* 99 */ { 0, &Ia_cdq }, + /* 9A */ { 0, &Ia_Invalid }, + /* 9B */ { 0, &Ia_fwait }, + /* 9C */ { 0, &Ia_pushfq }, + /* 9D */ { 0, &Ia_popfq }, + /* 9E */ { 0, &Ia_sahf }, + /* 9F */ { 0, &Ia_lahf }, + /* A0 */ { 0, &Ia_movb_AL_Ob }, + /* A1 */ { 0, &Ia_movl_EAX_Od }, + /* A0 */ { 0, &Ia_movb_Ob_AL }, + /* A1 */ { 0, &Ia_movl_Od_EAX }, + /* A4 */ { 0, &Ia_movsb_Yb_Xb }, + /* A5 */ { 0, &Ia_movsl_Yd_Xd }, + /* A6 */ { 0, &Ia_cmpsb_Xb_Yb }, + /* A7 */ { 0, &Ia_cmpsl_Xd_Yd }, + /* A8 */ { 0, &Ia_testb_AL_Ib }, + /* A9 */ { 0, &Ia_testl_EAX_Id }, + /* AA */ { 0, &Ia_stosb_Yb_AL }, + /* AB */ { 0, &Ia_stosl_Yd_EAX }, + /* AC */ { 0, &Ia_lodsb_AL_Xb }, + /* AD */ { 0, &Ia_lodsl_EAX_Xd }, + /* AE */ { 0, &Ia_scasb_AL_Yb }, + /* AF */ { 0, &Ia_scasl_EAX_Yd }, + /* B0 */ { 0, &Ia_movb_R8_Ib }, + /* B1 */ { 0, &Ia_movb_R8_Ib }, + /* B2 */ { 0, &Ia_movb_R8_Ib }, + /* B3 */ { 0, &Ia_movb_R8_Ib }, + /* B4 */ { 0, &Ia_movb_R8_Ib }, + /* B5 */ { 0, &Ia_movb_R8_Ib }, + /* B6 */ { 0, &Ia_movb_R8_Ib }, + /* B7 */ { 0, &Ia_movb_R8_Ib }, + /* B8 */ { 0, &Ia_movl_ERX_Id }, + /* B9 */ { 0, &Ia_movl_ERX_Id }, + /* BA */ { 0, &Ia_movl_ERX_Id }, + /* BB */ { 0, &Ia_movl_ERX_Id }, + /* BC */ { 0, &Ia_movl_ERX_Id }, + /* BD */ { 0, &Ia_movl_ERX_Id }, + /* BE */ { 0, &Ia_movl_ERX_Id }, + /* BF */ { 0, &Ia_movl_ERX_Id }, + /* C0 */ { GRPN(G2Eb) }, + /* C1 */ { GRPN(G2Ed) }, + /* C2 */ { 0, &Ia_ret_Iw }, + /* C3 */ { 0, &Ia_ret }, + /* C4 */ { 0, &Ia_Invalid }, + /* C5 */ { 0, &Ia_Invalid }, + /* C6 */ { GRPN(G11Eb) }, + /* C7 */ { GRPN(G11Ed) }, + /* C8 */ { 0, &Ia_enter }, + /* C9 */ { 0, &Ia_leave }, + /* CA */ { 0, &Ia_lret_Iw }, + /* CB */ { 0, &Ia_lret }, + /* CC */ { 0, &Ia_int3 }, + /* CD */ { 0, &Ia_int_Ib }, + /* CE */ { 0, &Ia_Invalid }, + /* CF */ { 0, &Ia_iretl }, + /* D0 */ { GRPN(G2EbI1) }, + /* D1 */ { GRPN(G2EdI1) }, + /* D2 */ { GRPN(G2EbCL) }, + /* D3 */ { GRPN(G2EdCL) }, + /* D4 */ { 0, &Ia_Invalid }, + /* D5 */ { 0, &Ia_Invalid }, + /* D6 */ { 0, &Ia_Invalid }, + /* D7 */ { 0, &Ia_xlat }, + /* D8 */ { GRPFP(D8) }, + /* D9 */ { GRPFP(D9) }, + /* DA */ { GRPFP(DA) }, + /* DB */ { GRPFP(DB) }, + /* DC */ { GRPFP(DC) }, + /* DD */ { GRPFP(DD) }, + /* DE */ { GRPFP(DE) }, + /* DF */ { GRPFP(DF) }, + /* E0 */ { 0, &Ia_loopne_Jb }, + /* E1 */ { 0, &Ia_loope_Jb }, + /* E2 */ { 0, &Ia_loop_Jb }, + /* E3 */ { 0, &Ia_jrcxz_Jb }, + /* E4 */ { 0, &Ia_inb_AL_Ib }, + /* E5 */ { 0, &Ia_inl_EAX_Ib }, + /* E6 */ { 0, &Ia_outb_Ib_AL }, + /* E7 */ { 0, &Ia_outl_Ib_EAX }, + /* E8 */ { 0, &Ia_call_Jd }, + /* E9 */ { 0, &Ia_jmp_Jd }, + /* EA */ { 0, &Ia_Invalid }, + /* EB */ { 0, &Ia_jmp_Jb }, + /* EC */ { 0, &Ia_inb_AL_DX }, + /* ED */ { 0, &Ia_inl_EAX_DX }, + /* EE */ { 0, &Ia_outb_DX_AL }, + /* EF */ { 0, &Ia_outl_DX_EAX }, + /* F0 */ { 0, &Ia_prefix_lock }, // LOCK: + /* F1 */ { 0, &Ia_int1 }, + /* F2 */ { 0, &Ia_prefix_repne }, // REPNE: + /* F3 */ { 0, &Ia_prefix_rep }, // REP: + /* F4 */ { 0, &Ia_hlt }, + /* F5 */ { 0, &Ia_cmc }, + /* F6 */ { GRPN(G3Eb) }, + /* F7 */ { GRPN(G3Ed) }, + /* F8 */ { 0, &Ia_clc }, + /* F9 */ { 0, &Ia_stc }, + /* FA */ { 0, &Ia_cli }, + /* FB */ { 0, &Ia_sti }, + /* FC */ { 0, &Ia_cld }, + /* FD */ { 0, &Ia_std }, + /* FE */ { GRPN(G4) }, + /* FF */ { GRPN(64G5d) }, + + // 256 entries for two byte opcodes + /* 0F 00 */ { GRPN(G6) }, + /* 0F 01 */ { GRPMOD(G7) }, + /* 0F 02 */ { 0, &Ia_larl_Gd_Ew }, + /* 0F 03 */ { 0, &Ia_lsll_Gd_Ew }, + /* 0F 04 */ { 0, &Ia_Invalid }, + /* 0F 05 */ { 0, &Ia_syscall }, + /* 0F 06 */ { 0, &Ia_clts }, + /* 0F 07 */ { 0, &Ia_sysret }, + /* 0F 08 */ { 0, &Ia_invd }, + /* 0F 09 */ { 0, &Ia_wbinvd }, + /* 0F 0A */ { 0, &Ia_Invalid }, + /* 0F 0B */ { 0, &Ia_ud2a }, + /* 0F 0C */ { 0, &Ia_Invalid }, + /* 0F 0D */ { 0, &Ia_prefetchw }, // 3DNow! + /* 0F 0E */ { 0, &Ia_femms }, // 3DNow! + /* 0F 0F */ { GRP3DNOW }, + /* 0F 10 */ { GRPSSE(0f10) }, + /* 0F 11 */ { GRPSSE(0f11) }, + /* 0F 12 */ { GRPSSE(0f12) }, + /* 0F 13 */ { GRPSSE2(0f13) }, + /* 0F 14 */ { GRPSSE2(0f14) }, + /* 0F 15 */ { GRPSSE2(0f15) }, + /* 0F 16 */ { GRPSSE(0f16) }, + /* 0F 17 */ { GRPSSE2(0f17) }, + /* 0F 18 */ { GRPN(G16) }, + /* 0F 19 */ { 0, &Ia_multibyte_nop }, + /* 0F 1A */ { 0, &Ia_multibyte_nop }, + /* 0F 1B */ { 0, &Ia_multibyte_nop }, + /* 0F 1C */ { 0, &Ia_multibyte_nop }, + /* 0F 1D */ { 0, &Ia_multibyte_nop }, + /* 0F 1E */ { 0, &Ia_multibyte_nop }, + /* 0F 1F */ { 0, &Ia_multibyte_nop }, + /* 0F 20 */ { 0, &Ia_movq_Rq_Cq }, + /* 0F 21 */ { 0, &Ia_movq_Rq_Dq }, + /* 0F 22 */ { 0, &Ia_movq_Cq_Rq }, + /* 0F 23 */ { 0, &Ia_movq_Dq_Rq }, + /* 0F 24 */ { 0, &Ia_Invalid }, + /* 0F 25 */ { 0, &Ia_Invalid }, + /* 0F 26 */ { 0, &Ia_Invalid }, + /* 0F 27 */ { 0, &Ia_Invalid }, + /* 0F 28 */ { GRPSSE2(0f28) }, + /* 0F 29 */ { GRPSSE2(0f29) }, + /* 0F 2A */ { GRPSSE(0f2a) }, + /* 0F 2B */ { GRPSSE(0f2b) }, + /* 0F 2C */ { GRPSSE(0f2c) }, + /* 0F 2D */ { GRPSSE(0f2d) }, + /* 0F 2E */ { GRPSSE2(0f2e) }, + /* 0F 2F */ { GRPSSE2(0f2f) }, + /* 0F 30 */ { 0, &Ia_wrmsr }, + /* 0F 31 */ { 0, &Ia_rdtsc }, + /* 0F 32 */ { 0, &Ia_rdmsr }, + /* 0F 33 */ { 0, &Ia_rdpmc }, + /* 0F 34 */ { 0, &Ia_sysenter }, + /* 0F 35 */ { 0, &Ia_sysexit }, + /* 0F 36 */ { 0, &Ia_Invalid }, + /* 0F 37 */ { 0, &Ia_getsec }, + /* 0F 38 */ { GR3BTAB(0f38) }, + /* 0F 39 */ { 0, &Ia_Invalid }, + /* 0F 3A */ { GR3BTAB(0f3a) }, + /* 0F 3B */ { 0, &Ia_Invalid }, + /* 0F 3C */ { 0, &Ia_Invalid }, + /* 0F 3D */ { 0, &Ia_Invalid }, + /* 0F 3E */ { 0, &Ia_Invalid }, + /* 0F 3F */ { 0, &Ia_Invalid }, + /* 0F 40 */ { 0, &Ia_cmovol_Gd_Ed }, + /* 0F 41 */ { 0, &Ia_cmovnol_Gd_Ed }, + /* 0F 42 */ { 0, &Ia_cmovbl_Gd_Ed }, + /* 0F 43 */ { 0, &Ia_cmovnbl_Gd_Ed }, + /* 0F 44 */ { 0, &Ia_cmovzl_Gd_Ed }, + /* 0F 45 */ { 0, &Ia_cmovnzl_Gd_Ed }, + /* 0F 46 */ { 0, &Ia_cmovbel_Gd_Ed }, + /* 0F 47 */ { 0, &Ia_cmovnbel_Gd_Ed }, + /* 0F 48 */ { 0, &Ia_cmovsl_Gd_Ed }, + /* 0F 49 */ { 0, &Ia_cmovnsl_Gd_Ed }, + /* 0F 4A */ { 0, &Ia_cmovpl_Gd_Ed }, + /* 0F 4B */ { 0, &Ia_cmovnpl_Gd_Ed }, + /* 0F 4C */ { 0, &Ia_cmovll_Gd_Ed }, + /* 0F 4D */ { 0, &Ia_cmovnll_Gd_Ed }, + /* 0F 4E */ { 0, &Ia_cmovlel_Gd_Ed }, + /* 0F 4F */ { 0, &Ia_cmovnlel_Gd_Ed }, + /* 0F 50 */ { GRPSSE2(0f50) }, + /* 0F 51 */ { GRPSSE(0f51) }, + /* 0F 52 */ { GRPSSE(0f52) }, + /* 0F 53 */ { GRPSSE(0f53) }, + /* 0F 54 */ { GRPSSE2(0f54) }, + /* 0F 55 */ { GRPSSE2(0f55) }, + /* 0F 56 */ { GRPSSE2(0f56) }, + /* 0F 57 */ { GRPSSE2(0f57) }, + /* 0F 58 */ { GRPSSE(0f58) }, + /* 0F 59 */ { GRPSSE(0f59) }, + /* 0F 5A */ { GRPSSE(0f5a) }, + /* 0F 5B */ { GRPSSE(0f5b) }, + /* 0F 5C */ { GRPSSE(0f5c) }, + /* 0F 5D */ { GRPSSE(0f5d) }, + /* 0F 5E */ { GRPSSE(0f5e) }, + /* 0F 5F */ { GRPSSE(0f5f) }, + /* 0F 60 */ { GRPSSE2(0f60) }, + /* 0F 61 */ { GRPSSE2(0f61) }, + /* 0F 62 */ { GRPSSE2(0f62) }, + /* 0F 63 */ { GRPSSE2(0f63) }, + /* 0F 64 */ { GRPSSE2(0f64) }, + /* 0F 65 */ { GRPSSE2(0f65) }, + /* 0F 66 */ { GRPSSE2(0f66) }, + /* 0F 67 */ { GRPSSE2(0f67) }, + /* 0F 68 */ { GRPSSE2(0f68) }, + /* 0F 69 */ { GRPSSE2(0f69) }, + /* 0F 6A */ { GRPSSE2(0f6a) }, + /* 0F 6B */ { GRPSSE2(0f6b) }, + /* 0F 6C */ { GRPSSE66(Ia_punpcklqdq_Vdq_Wdq) }, + /* 0F 6D */ { GRPSSE66(Ia_punpckhqdq_Vdq_Wdq) }, + /* 0F 6E */ { GRPSSE2(0f6e) }, + /* 0F 6F */ { GRPSSE(0f6f) }, + /* 0F 70 */ { GRPSSE(0f70) }, + /* 0F 71 */ { GRPN(G12) }, + /* 0F 72 */ { GRPN(G13) }, + /* 0F 73 */ { GRPN(G14) }, + /* 0F 74 */ { GRPSSE2(0f74) }, + /* 0F 75 */ { GRPSSE2(0f75) }, + /* 0F 76 */ { GRPSSE2(0f76) }, + /* 0F 77 */ { 0, &Ia_emms }, + /* 0F 78 */ { GRPSSE(0f78Q) }, // VMX + /* 0F 79 */ { GRPSSE(0f79Q) }, // VMX + /* 0F 7A */ { 0, &Ia_Invalid }, + /* 0F 7B */ { 0, &Ia_Invalid }, + /* 0F 7C */ { GRPSSE(0f7c) }, + /* 0F 7D */ { GRPSSE(0f7d) }, + /* 0F 7E */ { GRPSSE(0f7e) }, + /* 0F 7F */ { GRPSSE(0f7f) }, + /* 0F 80 */ { 0, &Ia_jo_Jd }, + /* 0F 81 */ { 0, &Ia_jno_Jd }, + /* 0F 82 */ { 0, &Ia_jb_Jd }, + /* 0F 83 */ { 0, &Ia_jnb_Jd }, + /* 0F 84 */ { 0, &Ia_jz_Jd }, + /* 0F 85 */ { 0, &Ia_jnz_Jd }, + /* 0F 86 */ { 0, &Ia_jbe_Jd }, + /* 0F 87 */ { 0, &Ia_jnbe_Jd }, + /* 0F 88 */ { 0, &Ia_js_Jd }, + /* 0F 89 */ { 0, &Ia_jns_Jd }, + /* 0F 8A */ { 0, &Ia_jp_Jd }, + /* 0F 8B */ { 0, &Ia_jnp_Jd }, + /* 0F 8C */ { 0, &Ia_jl_Jd }, + /* 0F 8D */ { 0, &Ia_jnl_Jd }, + /* 0F 8E */ { 0, &Ia_jle_Jd }, + /* 0F 8F */ { 0, &Ia_jnle_Jd }, + /* 0F 90 */ { 0, &Ia_seto_Eb }, + /* 0F 91 */ { 0, &Ia_setno_Eb }, + /* 0F 92 */ { 0, &Ia_setb_Eb }, + /* 0F 93 */ { 0, &Ia_setnb_Eb }, + /* 0F 94 */ { 0, &Ia_setz_Eb }, + /* 0F 95 */ { 0, &Ia_setnz_Eb }, + /* 0F 96 */ { 0, &Ia_setbe_Eb }, + /* 0F 97 */ { 0, &Ia_setnbe_Eb }, + /* 0F 98 */ { 0, &Ia_sets_Eb }, + /* 0F 99 */ { 0, &Ia_setns_Eb }, + /* 0F 9A */ { 0, &Ia_setp_Eb }, + /* 0F 9B */ { 0, &Ia_setnp_Eb }, + /* 0F 9C */ { 0, &Ia_setl_Eb }, + /* 0F 9D */ { 0, &Ia_setnl_Eb }, + /* 0F 9E */ { 0, &Ia_setle_Eb }, + /* 0F 9F */ { 0, &Ia_setnle_Eb }, + /* 0F A0 */ { 0, &Ia_pushq_FS }, + /* 0F A1 */ { 0, &Ia_popq_FS }, + /* 0F A2 */ { 0, &Ia_cpuid }, + /* 0F A3 */ { 0, &Ia_btl_Ed_Gd }, + /* 0F A4 */ { 0, &Ia_shldl_Ed_Gd_Ib }, + /* 0F A5 */ { 0, &Ia_shldl_Ed_Gd_CL }, + /* 0F A6 */ { 0, &Ia_Invalid }, + /* 0F A7 */ { 0, &Ia_Invalid }, + /* 0F A8 */ { 0, &Ia_pushq_GS }, + /* 0F A9 */ { 0, &Ia_popq_GS }, + /* 0F AA */ { 0, &Ia_rsm }, + /* 0F AB */ { 0, &Ia_btsl_Ed_Gd }, + /* 0F AC */ { 0, &Ia_shrdl_Ed_Gd_Ib }, + /* 0F AD */ { 0, &Ia_shrdl_Ed_Gd_CL }, + /* 0F AE */ { GRPMOD(G15) }, + /* 0F AF */ { 0, &Ia_imull_Gd_Ed }, + /* 0F B0 */ { 0, &Ia_cmpxchgb_Eb_Gb }, + /* 0F B1 */ { 0, &Ia_cmpxchgl_Ed_Gd }, + /* 0F B2 */ { 0, &Ia_lssl_Gd_Mp }, + /* 0F B3 */ { 0, &Ia_btrl_Ed_Gd }, + /* 0F B4 */ { 0, &Ia_lfsl_Gd_Mp }, + /* 0F B5 */ { 0, &Ia_lgsl_Gd_Mp }, + /* 0F B6 */ { 0, &Ia_movzbl_Gd_Eb }, + /* 0F B7 */ { 0, &Ia_movzwl_Gd_Ew }, + /* 0F B8 */ { GRPSSEF3(Ia_popcnt_Gd_Ed) }, + /* 0F B9 */ { 0, &Ia_ud2b }, + /* 0F BA */ { GRPN(G8EdIb) }, + /* 0F BB */ { 0, &Ia_btcl_Ed_Gd }, + /* 0F BC */ { GRPSSE(0fbcd) }, + /* 0F BD */ { GRPSSE(0fbdd) }, + /* 0F BE */ { 0, &Ia_movsbl_Gd_Eb }, + /* 0F BF */ { 0, &Ia_movswl_Gd_Ew }, + /* 0F C0 */ { 0, &Ia_xaddb_Eb_Gb }, + /* 0F C0 */ { 0, &Ia_xaddl_Ed_Gd }, + /* 0F C2 */ { GRPSSE(0fc2) }, + /* 0F C3 */ { GRPSSENONE(Ia_movnti_Md_Gd) }, + /* 0F C4 */ { GRPSSE2(0fc4) }, + /* 0F C5 */ { GRPSSE2(0fc5) }, + /* 0F C6 */ { GRPSSE2(0fc6) }, + /* 0F C7 */ { GRPMOD(G9d) }, + /* 0F C8 */ { 0, &Ia_bswapl_ERX }, + /* 0F C9 */ { 0, &Ia_bswapl_ERX }, + /* 0F CA */ { 0, &Ia_bswapl_ERX }, + /* 0F CB */ { 0, &Ia_bswapl_ERX }, + /* 0F CC */ { 0, &Ia_bswapl_ERX }, + /* 0F CD */ { 0, &Ia_bswapl_ERX }, + /* 0F CE */ { 0, &Ia_bswapl_ERX }, + /* 0F CF */ { 0, &Ia_bswapl_ERX }, + /* 0F D0 */ { GRPSSE(0fd0) }, + /* 0F D1 */ { GRPSSE2(0fd1) }, + /* 0F D2 */ { GRPSSE2(0fd2) }, + /* 0F D3 */ { GRPSSE2(0fd3) }, + /* 0F D4 */ { GRPSSE2(0fd4) }, + /* 0F D5 */ { GRPSSE2(0fd5) }, + /* 0F D6 */ { GRPSSE(0fd6) }, + /* 0F D7 */ { GRPSSE2(0fd7) }, + /* 0F D8 */ { GRPSSE2(0fd8) }, + /* 0F D9 */ { GRPSSE2(0fd9) }, + /* 0F DA */ { GRPSSE2(0fda) }, + /* 0F DB */ { GRPSSE2(0fdb) }, + /* 0F DC */ { GRPSSE2(0fdc) }, + /* 0F DD */ { GRPSSE2(0fdd) }, + /* 0F DE */ { GRPSSE2(0fde) }, + /* 0F DF */ { GRPSSE2(0fdf) }, + /* 0F E0 */ { GRPSSE2(0fe0) }, + /* 0F E1 */ { GRPSSE2(0fe1) }, + /* 0F E2 */ { GRPSSE2(0fe2) }, + /* 0F E3 */ { GRPSSE2(0fe3) }, + /* 0F E4 */ { GRPSSE2(0fe4) }, + /* 0F E5 */ { GRPSSE2(0fe5) }, + /* 0F E6 */ { GRPSSE(0fe6) }, + /* 0F E7 */ { GRPSSE2(0fe7) }, + /* 0F E8 */ { GRPSSE2(0fe8) }, + /* 0F E9 */ { GRPSSE2(0fe9) }, + /* 0F EA */ { GRPSSE2(0fea) }, + /* 0F EB */ { GRPSSE2(0feb) }, + /* 0F EC */ { GRPSSE2(0fec) }, + /* 0F ED */ { GRPSSE2(0fed) }, + /* 0F EE */ { GRPSSE2(0fee) }, + /* 0F EF */ { GRPSSE2(0fef) }, + /* 0F F0 */ { GRPSSEF2(Ia_lddqu_Vdq_Mdq) }, + /* 0F F1 */ { GRPSSE2(0ff1) }, + /* 0F F2 */ { GRPSSE2(0ff2) }, + /* 0F F3 */ { GRPSSE2(0ff3) }, + /* 0F F4 */ { GRPSSE2(0ff4) }, + /* 0F F5 */ { GRPSSE2(0ff5) }, + /* 0F F6 */ { GRPSSE2(0ff6) }, + /* 0F F7 */ { GRPSSE2(0ff7) }, + /* 0F F8 */ { GRPSSE2(0ff8) }, + /* 0F F9 */ { GRPSSE2(0ff9) }, + /* 0F FA */ { GRPSSE2(0ffa) }, + /* 0F FB */ { GRPSSE2(0ffb) }, + /* 0F FC */ { GRPSSE2(0ffc) }, + /* 0F FD */ { GRPSSE2(0ffd) }, + /* 0F FE */ { GRPSSE2(0ffe) }, + /* 0F FF */ { 0, &Ia_Invalid } +}; + +static BxDisasmOpcodeTable_t BxDisasmOpcodes64q[256*2] = { + // 256 entries for single byte opcodes + /* 00 */ { 0, &Ia_addb_Eb_Gb }, + /* 01 */ { 0, &Ia_addq_Eq_Gq }, + /* 02 */ { 0, &Ia_addb_Gb_Eb }, + /* 03 */ { 0, &Ia_addq_Gq_Eq }, + /* 04 */ { 0, &Ia_addb_AL_Ib, }, + /* 05 */ { 0, &Ia_addq_RAX_sId }, + /* 06 */ { 0, &Ia_Invalid }, + /* 07 */ { 0, &Ia_Invalid }, + /* 08 */ { 0, &Ia_orb_Eb_Gb }, + /* 09 */ { 0, &Ia_orq_Eq_Gq }, + /* 0A */ { 0, &Ia_orb_Gb_Eb }, + /* 0B */ { 0, &Ia_orq_Gq_Eq }, + /* 0C */ { 0, &Ia_orb_AL_Ib }, + /* 0D */ { 0, &Ia_orq_RAX_sId }, + /* 0E */ { 0, &Ia_Invalid }, + /* 0F */ { 0, &Ia_error }, // 2 byte escape + /* 10 */ { 0, &Ia_adcb_Eb_Gb }, + /* 11 */ { 0, &Ia_adcq_Eq_Gq }, + /* 12 */ { 0, &Ia_adcb_Gb_Eb }, + /* 13 */ { 0, &Ia_adcq_Gq_Eq }, + /* 14 */ { 0, &Ia_adcb_AL_Ib }, + /* 15 */ { 0, &Ia_adcq_RAX_sId }, + /* 16 */ { 0, &Ia_Invalid }, + /* 17 */ { 0, &Ia_Invalid }, + /* 18 */ { 0, &Ia_sbbb_Eb_Gb }, + /* 19 */ { 0, &Ia_sbbq_Eq_Gq }, + /* 1A */ { 0, &Ia_sbbb_Gb_Eb }, + /* 1B */ { 0, &Ia_sbbq_Gq_Eq }, + /* 1C */ { 0, &Ia_sbbb_AL_Ib }, + /* 1D */ { 0, &Ia_sbbq_RAX_sId }, + /* 1E */ { 0, &Ia_Invalid }, + /* 1F */ { 0, &Ia_Invalid }, + /* 20 */ { 0, &Ia_andb_Eb_Gb }, + /* 21 */ { 0, &Ia_andq_Eq_Gq }, + /* 22 */ { 0, &Ia_andb_Gb_Eb }, + /* 23 */ { 0, &Ia_andq_Gq_Eq }, + /* 24 */ { 0, &Ia_andb_AL_Ib }, + /* 25 */ { 0, &Ia_andq_RAX_sId }, + /* 26 */ { 0, &Ia_prefix_es }, // ES: + /* 27 */ { 0, &Ia_Invalid }, + /* 28 */ { 0, &Ia_subb_Eb_Gb }, + /* 29 */ { 0, &Ia_subq_Eq_Gq }, + /* 2A */ { 0, &Ia_subb_Gb_Eb }, + /* 2B */ { 0, &Ia_subq_Gq_Eq }, + /* 2C */ { 0, &Ia_subb_AL_Ib }, + /* 2D */ { 0, &Ia_subq_RAX_sId }, + /* 2E */ { 0, &Ia_prefix_cs }, // CS: + /* 2F */ { 0, &Ia_Invalid }, + /* 30 */ { 0, &Ia_xorb_Eb_Gb }, + /* 31 */ { 0, &Ia_xorq_Eq_Gq }, + /* 32 */ { 0, &Ia_xorb_Gb_Eb }, + /* 33 */ { 0, &Ia_xorq_Gq_Eq }, + /* 34 */ { 0, &Ia_xorb_AL_Ib }, + /* 35 */ { 0, &Ia_xorq_RAX_sId }, + /* 36 */ { 0, &Ia_prefix_ss }, // SS: + /* 37 */ { 0, &Ia_Invalid }, + /* 38 */ { 0, &Ia_cmpb_Eb_Gb }, + /* 39 */ { 0, &Ia_cmpq_Eq_Gq }, + /* 3A */ { 0, &Ia_cmpb_Gb_Eb }, + /* 3B */ { 0, &Ia_cmpq_Gq_Eq }, + /* 3C */ { 0, &Ia_cmpb_AL_Ib }, + /* 3D */ { 0, &Ia_cmpq_RAX_sId }, + /* 3E */ { 0, &Ia_prefix_ds }, // DS: + /* 3F */ { 0, &Ia_Invalid }, + /* 40 */ { 0, &Ia_prefix_rex }, // REX: + /* 41 */ { 0, &Ia_prefix_rex }, // REX: + /* 42 */ { 0, &Ia_prefix_rex }, // REX: + /* 43 */ { 0, &Ia_prefix_rex }, // REX: + /* 44 */ { 0, &Ia_prefix_rex }, // REX: + /* 45 */ { 0, &Ia_prefix_rex }, // REX: + /* 46 */ { 0, &Ia_prefix_rex }, // REX: + /* 47 */ { 0, &Ia_prefix_rex }, // REX: + /* 48 */ { 0, &Ia_prefix_rex }, // REX: + /* 49 */ { 0, &Ia_prefix_rex }, // REX: + /* 4A */ { 0, &Ia_prefix_rex }, // REX: + /* 4B */ { 0, &Ia_prefix_rex }, // REX: + /* 4C */ { 0, &Ia_prefix_rex }, // REX: + /* 4D */ { 0, &Ia_prefix_rex }, // REX: + /* 4E */ { 0, &Ia_prefix_rex }, // REX: + /* 4F */ { 0, &Ia_prefix_rex }, // REX: + /* 50 */ { 0, &Ia_pushq_RRX }, + /* 51 */ { 0, &Ia_pushq_RRX }, + /* 52 */ { 0, &Ia_pushq_RRX }, + /* 53 */ { 0, &Ia_pushq_RRX }, + /* 54 */ { 0, &Ia_pushq_RRX }, + /* 55 */ { 0, &Ia_pushq_RRX }, + /* 56 */ { 0, &Ia_pushq_RRX }, + /* 57 */ { 0, &Ia_pushq_RRX }, + /* 58 */ { 0, &Ia_popq_RRX }, + /* 59 */ { 0, &Ia_popq_RRX }, + /* 5A */ { 0, &Ia_popq_RRX }, + /* 5B */ { 0, &Ia_popq_RRX }, + /* 5C */ { 0, &Ia_popq_RRX }, + /* 5D */ { 0, &Ia_popq_RRX }, + /* 5E */ { 0, &Ia_popq_RRX }, + /* 5F */ { 0, &Ia_popq_RRX }, + /* 60 */ { 0, &Ia_Invalid }, + /* 61 */ { 0, &Ia_Invalid }, + /* 62 */ { 0, &Ia_Invalid }, + /* 63 */ { 0, &Ia_movslq_Gq_Ed }, + /* 64 */ { 0, &Ia_prefix_fs }, // FS: + /* 65 */ { 0, &Ia_prefix_gs }, // GS: + /* 66 */ { 0, &Ia_prefix_osize }, // OSIZE: + /* 67 */ { 0, &Ia_prefix_asize }, // ASIZE: + /* 68 */ { 0, &Ia_pushq_sId }, + /* 69 */ { 0, &Ia_imulq_Gq_Eq_sId }, + /* 6A */ { 0, &Ia_pushq_sIb }, + /* 6B */ { 0, &Ia_imulq_Gq_Eq_sIb }, + /* 6C */ { 0, &Ia_insb_Yb_DX }, + /* 6D */ { 0, &Ia_insl_Yd_DX }, + /* 6E */ { 0, &Ia_outsb_DX_Xb }, + /* 6F */ { 0, &Ia_outsl_DX_Xd }, + /* 70 */ { 0, &Ia_jo_Jb }, + /* 71 */ { 0, &Ia_jno_Jb }, + /* 72 */ { 0, &Ia_jb_Jb }, + /* 73 */ { 0, &Ia_jnb_Jb }, + /* 74 */ { 0, &Ia_jz_Jb }, + /* 75 */ { 0, &Ia_jnz_Jb }, + /* 76 */ { 0, &Ia_jbe_Jb }, + /* 77 */ { 0, &Ia_jnbe_Jb }, + /* 78 */ { 0, &Ia_js_Jb }, + /* 79 */ { 0, &Ia_jns_Jb }, + /* 7A */ { 0, &Ia_jp_Jb }, + /* 7B */ { 0, &Ia_jnp_Jb }, + /* 7C */ { 0, &Ia_jl_Jb }, + /* 7D */ { 0, &Ia_jnl_Jb }, + /* 7E */ { 0, &Ia_jle_Jb }, + /* 7F */ { 0, &Ia_jnle_Jb }, + /* 80 */ { GRPN(G1EbIb) }, + /* 81 */ { GRPN(G1EqId) }, + /* 82 */ { 0, &Ia_Invalid }, + /* 83 */ { GRPN(G1EqIb) }, + /* 84 */ { 0, &Ia_testb_Eb_Gb }, + /* 85 */ { 0, &Ia_testq_Eq_Gq }, + /* 86 */ { 0, &Ia_xchgb_Eb_Gb }, + /* 87 */ { 0, &Ia_xchgq_Eq_Gq }, + /* 88 */ { 0, &Ia_movb_Eb_Gb }, + /* 89 */ { 0, &Ia_movq_Eq_Gq }, + /* 8A */ { 0, &Ia_movb_Gb_Eb }, + /* 8B */ { 0, &Ia_movq_Gq_Eq }, + /* 8C */ { 0, &Ia_movw_Ew_Sw }, + /* 8D */ { 0, &Ia_leaq_Gq_Mq }, + /* 8E */ { 0, &Ia_movw_Sw_Ew }, + /* 8F */ { 0, &Ia_popq_Eq }, + /* 90 */ { 0, &Ia_xchgq_RRX_RAX }, // handle XCHG R8, RAX + /* 91 */ { 0, &Ia_xchgq_RRX_RAX }, + /* 92 */ { 0, &Ia_xchgq_RRX_RAX }, + /* 93 */ { 0, &Ia_xchgq_RRX_RAX }, + /* 94 */ { 0, &Ia_xchgq_RRX_RAX }, + /* 95 */ { 0, &Ia_xchgq_RRX_RAX }, + /* 96 */ { 0, &Ia_xchgq_RRX_RAX }, + /* 97 */ { 0, &Ia_xchgq_RRX_RAX }, + /* 98 */ { 0, &Ia_cdqe }, + /* 99 */ { 0, &Ia_cqo }, + /* 9A */ { 0, &Ia_Invalid }, + /* 9B */ { 0, &Ia_fwait }, + /* 9C */ { 0, &Ia_pushfq }, + /* 9D */ { 0, &Ia_popfq }, + /* 9E */ { 0, &Ia_sahf }, + /* 9F */ { 0, &Ia_lahf }, + /* A0 */ { 0, &Ia_movb_AL_Ob }, + /* A1 */ { 0, &Ia_movq_RAX_Oq }, + /* A0 */ { 0, &Ia_movb_Ob_AL }, + /* A1 */ { 0, &Ia_movq_Oq_RAX }, + /* A4 */ { 0, &Ia_movsb_Yb_Xb }, + /* A5 */ { 0, &Ia_movsq_Yq_Xq }, + /* A6 */ { 0, &Ia_cmpsb_Xb_Yb }, + /* A7 */ { 0, &Ia_cmpsq_Xq_Yq }, + /* A8 */ { 0, &Ia_testb_AL_Ib }, + /* A9 */ { 0, &Ia_testq_RAX_sId }, + /* AA */ { 0, &Ia_stosb_Yb_AL }, + /* AB */ { 0, &Ia_stosq_Yq_RAX }, + /* AC */ { 0, &Ia_lodsb_AL_Xb }, + /* AD */ { 0, &Ia_lodsq_RAX_Xq }, + /* AE */ { 0, &Ia_scasb_AL_Yb }, + /* AF */ { 0, &Ia_scasq_RAX_Yq }, + /* B0 */ { 0, &Ia_movb_R8_Ib }, + /* B1 */ { 0, &Ia_movb_R8_Ib }, + /* B2 */ { 0, &Ia_movb_R8_Ib }, + /* B3 */ { 0, &Ia_movb_R8_Ib }, + /* B4 */ { 0, &Ia_movb_R8_Ib }, + /* B5 */ { 0, &Ia_movb_R8_Ib }, + /* B6 */ { 0, &Ia_movb_R8_Ib }, + /* B7 */ { 0, &Ia_movb_R8_Ib }, + /* B8 */ { 0, &Ia_movq_RRX_Iq }, + /* B9 */ { 0, &Ia_movq_RRX_Iq }, + /* BA */ { 0, &Ia_movq_RRX_Iq }, + /* BB */ { 0, &Ia_movq_RRX_Iq }, + /* BC */ { 0, &Ia_movq_RRX_Iq }, + /* BD */ { 0, &Ia_movq_RRX_Iq }, + /* BE */ { 0, &Ia_movq_RRX_Iq }, + /* BF */ { 0, &Ia_movq_RRX_Iq }, + /* C0 */ { GRPN(G2Eb) }, + /* C1 */ { GRPN(G2Eq) }, + /* C2 */ { 0, &Ia_ret_Iw }, + /* C3 */ { 0, &Ia_ret }, + /* C4 */ { 0, &Ia_Invalid }, + /* C5 */ { 0, &Ia_Invalid }, + /* C6 */ { GRPN(G11Eb) }, + /* C7 */ { GRPN(G11Eq) }, + /* C8 */ { 0, &Ia_enter }, + /* C9 */ { 0, &Ia_leave }, + /* CA */ { 0, &Ia_lret_Iw }, + /* CB */ { 0, &Ia_lret }, + /* CC */ { 0, &Ia_int3 }, + /* CD */ { 0, &Ia_int_Ib }, + /* CE */ { 0, &Ia_Invalid }, + /* CF */ { 0, &Ia_iretq }, + /* D0 */ { GRPN(G2EbI1) }, + /* D1 */ { GRPN(G2EqI1) }, + /* D2 */ { GRPN(G2EbCL) }, + /* D3 */ { GRPN(G2EqCL) }, + /* D4 */ { 0, &Ia_Invalid }, + /* D5 */ { 0, &Ia_Invalid }, + /* D6 */ { 0, &Ia_Invalid }, + /* D7 */ { 0, &Ia_xlat }, + /* D8 */ { GRPFP(D8) }, + /* D9 */ { GRPFP(D9) }, + /* DA */ { GRPFP(DA) }, + /* DB */ { GRPFP(DB) }, + /* DC */ { GRPFP(DC) }, + /* DD */ { GRPFP(DD) }, + /* DE */ { GRPFP(DE) }, + /* DF */ { GRPFP(DF) }, + /* E0 */ { 0, &Ia_loopne_Jb }, + /* E1 */ { 0, &Ia_loope_Jb }, + /* E2 */ { 0, &Ia_loop_Jb }, + /* E3 */ { 0, &Ia_jrcxz_Jb }, + /* E4 */ { 0, &Ia_inb_AL_Ib }, + /* E5 */ { 0, &Ia_inl_EAX_Ib }, + /* E6 */ { 0, &Ia_outb_Ib_AL }, + /* E7 */ { 0, &Ia_outl_Ib_EAX }, + /* E8 */ { 0, &Ia_call_Jd }, + /* E9 */ { 0, &Ia_jmp_Jd }, + /* EA */ { 0, &Ia_Invalid }, + /* EB */ { 0, &Ia_jmp_Jb }, + /* EC */ { 0, &Ia_inb_AL_DX }, + /* ED */ { 0, &Ia_inl_EAX_DX }, + /* EE */ { 0, &Ia_outb_DX_AL }, + /* EF */ { 0, &Ia_outl_DX_EAX }, + /* F0 */ { 0, &Ia_prefix_lock }, // LOCK: + /* F1 */ { 0, &Ia_int1 }, + /* F2 */ { 0, &Ia_prefix_repne }, // REPNE: + /* F3 */ { 0, &Ia_prefix_rep }, // REP: + /* F4 */ { 0, &Ia_hlt }, + /* F5 */ { 0, &Ia_cmc }, + /* F6 */ { GRPN(G3Eb) }, + /* F7 */ { GRPN(G3Eq) }, + /* F8 */ { 0, &Ia_clc }, + /* F9 */ { 0, &Ia_stc }, + /* FA */ { 0, &Ia_cli }, + /* FB */ { 0, &Ia_sti }, + /* FC */ { 0, &Ia_cld }, + /* FD */ { 0, &Ia_std }, + /* FE */ { GRPN(G4) }, + /* FF */ { GRPN(64G5q) }, + + // 256 entries for two byte opcodes + /* 0F 00 */ { GRPN(G6) }, + /* 0F 01 */ { GRPMOD(G7) }, + /* 0F 02 */ { 0, &Ia_larq_Gq_Ew }, + /* 0F 03 */ { 0, &Ia_lslq_Gq_Ew }, + /* 0F 04 */ { 0, &Ia_Invalid }, + /* 0F 05 */ { 0, &Ia_syscall }, + /* 0F 06 */ { 0, &Ia_clts }, + /* 0F 07 */ { 0, &Ia_sysret }, + /* 0F 08 */ { 0, &Ia_invd }, + /* 0F 09 */ { 0, &Ia_wbinvd }, + /* 0F 0A */ { 0, &Ia_Invalid }, + /* 0F 0B */ { 0, &Ia_ud2a }, + /* 0F 0C */ { 0, &Ia_Invalid }, + /* 0F 0D */ { 0, &Ia_prefetchw }, // 3DNow! + /* 0F 0E */ { 0, &Ia_femms }, // 3DNow! + /* 0F 0F */ { GRP3DNOW }, + /* 0F 10 */ { GRPSSE(0f10) }, + /* 0F 11 */ { GRPSSE(0f11) }, + /* 0F 12 */ { GRPSSE(0f12) }, + /* 0F 13 */ { GRPSSE2(0f13) }, + /* 0F 14 */ { GRPSSE2(0f14) }, + /* 0F 15 */ { GRPSSE2(0f15) }, + /* 0F 16 */ { GRPSSE(0f16) }, + /* 0F 17 */ { GRPSSE2(0f17) }, + /* 0F 18 */ { GRPN(G16) }, + /* 0F 19 */ { 0, &Ia_multibyte_nop }, + /* 0F 1A */ { 0, &Ia_multibyte_nop }, + /* 0F 1B */ { 0, &Ia_multibyte_nop }, + /* 0F 1C */ { 0, &Ia_multibyte_nop }, + /* 0F 1D */ { 0, &Ia_multibyte_nop }, + /* 0F 1E */ { 0, &Ia_multibyte_nop }, + /* 0F 1F */ { 0, &Ia_multibyte_nop }, + /* 0F 20 */ { 0, &Ia_movq_Rq_Cq }, + /* 0F 21 */ { 0, &Ia_movq_Rq_Dq }, + /* 0F 22 */ { 0, &Ia_movq_Cq_Rq }, + /* 0F 23 */ { 0, &Ia_movq_Dq_Rq }, + /* 0F 24 */ { 0, &Ia_Invalid }, + /* 0F 25 */ { 0, &Ia_Invalid }, + /* 0F 26 */ { 0, &Ia_Invalid }, + /* 0F 27 */ { 0, &Ia_Invalid }, + /* 0F 28 */ { GRPSSE2(0f28) }, + /* 0F 29 */ { GRPSSE2(0f29) }, + /* 0F 2A */ { GRPSSE(0f2a) }, + /* 0F 2B */ { GRPSSE(0f2b) }, + /* 0F 2C */ { GRPSSE(0f2c) }, + /* 0F 2D */ { GRPSSE(0f2d) }, + /* 0F 2E */ { GRPSSE2(0f2e) }, + /* 0F 2F */ { GRPSSE2(0f2f) }, + /* 0F 30 */ { 0, &Ia_wrmsr }, + /* 0F 31 */ { 0, &Ia_rdtsc }, + /* 0F 32 */ { 0, &Ia_rdmsr }, + /* 0F 33 */ { 0, &Ia_rdpmc }, + /* 0F 34 */ { 0, &Ia_sysenter }, + /* 0F 35 */ { 0, &Ia_sysexit }, + /* 0F 36 */ { 0, &Ia_Invalid }, + /* 0F 37 */ { 0, &Ia_getsec }, + /* 0F 38 */ { GR3BTAB(0f38) }, + /* 0F 39 */ { 0, &Ia_Invalid }, + /* 0F 3A */ { GR3BTAB(0f3a) }, + /* 0F 3B */ { 0, &Ia_Invalid }, + /* 0F 3C */ { 0, &Ia_Invalid }, + /* 0F 3D */ { 0, &Ia_Invalid }, + /* 0F 3E */ { 0, &Ia_Invalid }, + /* 0F 3F */ { 0, &Ia_Invalid }, + /* 0F 40 */ { 0, &Ia_cmovoq_Gq_Eq }, + /* 0F 41 */ { 0, &Ia_cmovnoq_Gq_Eq }, + /* 0F 42 */ { 0, &Ia_cmovbq_Gq_Eq }, + /* 0F 43 */ { 0, &Ia_cmovnbq_Gq_Eq }, + /* 0F 44 */ { 0, &Ia_cmovzq_Gq_Eq }, + /* 0F 45 */ { 0, &Ia_cmovnzq_Gq_Eq }, + /* 0F 46 */ { 0, &Ia_cmovbeq_Gq_Eq }, + /* 0F 47 */ { 0, &Ia_cmovnbeq_Gq_Eq }, + /* 0F 48 */ { 0, &Ia_cmovsq_Gq_Eq }, + /* 0F 49 */ { 0, &Ia_cmovnsq_Gq_Eq }, + /* 0F 4A */ { 0, &Ia_cmovpq_Gq_Eq }, + /* 0F 4B */ { 0, &Ia_cmovnpq_Gq_Eq }, + /* 0F 4C */ { 0, &Ia_cmovlq_Gq_Eq }, + /* 0F 4D */ { 0, &Ia_cmovnlq_Gq_Eq }, + /* 0F 4E */ { 0, &Ia_cmovleq_Gq_Eq }, + /* 0F 4F */ { 0, &Ia_cmovnleq_Gq_Eq }, + /* 0F 50 */ { GRPSSE2(0f50) }, + /* 0F 51 */ { GRPSSE(0f51) }, + /* 0F 52 */ { GRPSSE(0f52) }, + /* 0F 53 */ { GRPSSE(0f53) }, + /* 0F 54 */ { GRPSSE2(0f54) }, + /* 0F 55 */ { GRPSSE2(0f55) }, + /* 0F 56 */ { GRPSSE2(0f56) }, + /* 0F 57 */ { GRPSSE2(0f57) }, + /* 0F 58 */ { GRPSSE(0f58) }, + /* 0F 59 */ { GRPSSE(0f59) }, + /* 0F 5A */ { GRPSSE(0f5a) }, + /* 0F 5B */ { GRPSSE(0f5b) }, + /* 0F 5C */ { GRPSSE(0f5c) }, + /* 0F 5D */ { GRPSSE(0f5d) }, + /* 0F 5E */ { GRPSSE(0f5e) }, + /* 0F 5F */ { GRPSSE(0f5f) }, + /* 0F 60 */ { GRPSSE2(0f60) }, + /* 0F 61 */ { GRPSSE2(0f61) }, + /* 0F 62 */ { GRPSSE2(0f62) }, + /* 0F 63 */ { GRPSSE2(0f63) }, + /* 0F 64 */ { GRPSSE2(0f64) }, + /* 0F 65 */ { GRPSSE2(0f65) }, + /* 0F 66 */ { GRPSSE2(0f66) }, + /* 0F 67 */ { GRPSSE2(0f67) }, + /* 0F 68 */ { GRPSSE2(0f68) }, + /* 0F 69 */ { GRPSSE2(0f69) }, + /* 0F 6A */ { GRPSSE2(0f6a) }, + /* 0F 6B */ { GRPSSE2(0f6b) }, + /* 0F 6C */ { GRPSSE66(Ia_punpcklqdq_Vdq_Wdq) }, + /* 0F 6D */ { GRPSSE66(Ia_punpckhqdq_Vdq_Wdq) }, + /* 0F 6E */ { GRPSSE2(0f6eQ) }, + /* 0F 6F */ { GRPSSE(0f6f) }, + /* 0F 70 */ { GRPSSE(0f70) }, + /* 0F 71 */ { GRPN(G12) }, + /* 0F 72 */ { GRPN(G13) }, + /* 0F 73 */ { GRPN(G14) }, + /* 0F 74 */ { GRPSSE2(0f74) }, + /* 0F 75 */ { GRPSSE2(0f75) }, + /* 0F 76 */ { GRPSSE2(0f76) }, + /* 0F 77 */ { 0, &Ia_emms }, + /* 0F 78 */ { GRPSSE(0f78Q) }, // VMX + /* 0F 79 */ { GRPSSE(0f79Q) }, // VMX + /* 0F 7A */ { 0, &Ia_Invalid }, + /* 0F 7B */ { 0, &Ia_Invalid }, + /* 0F 7C */ { GRPSSE(0f7c) }, + /* 0F 7D */ { GRPSSE(0f7d) }, + /* 0F 7E */ { GRPSSE(0f7eQ) }, + /* 0F 7F */ { GRPSSE(0f7f) }, + /* 0F 80 */ { 0, &Ia_jo_Jd }, + /* 0F 81 */ { 0, &Ia_jno_Jd }, + /* 0F 82 */ { 0, &Ia_jb_Jd }, + /* 0F 83 */ { 0, &Ia_jnb_Jd }, + /* 0F 84 */ { 0, &Ia_jz_Jd }, + /* 0F 85 */ { 0, &Ia_jnz_Jd }, + /* 0F 86 */ { 0, &Ia_jbe_Jd }, + /* 0F 87 */ { 0, &Ia_jnbe_Jd }, + /* 0F 88 */ { 0, &Ia_js_Jd }, + /* 0F 89 */ { 0, &Ia_jns_Jd }, + /* 0F 8A */ { 0, &Ia_jp_Jd }, + /* 0F 8B */ { 0, &Ia_jnp_Jd }, + /* 0F 8C */ { 0, &Ia_jl_Jd }, + /* 0F 8D */ { 0, &Ia_jnl_Jd }, + /* 0F 8E */ { 0, &Ia_jle_Jd }, + /* 0F 8F */ { 0, &Ia_jnle_Jd }, + /* 0F 90 */ { 0, &Ia_seto_Eb }, + /* 0F 91 */ { 0, &Ia_setno_Eb }, + /* 0F 92 */ { 0, &Ia_setb_Eb }, + /* 0F 93 */ { 0, &Ia_setnb_Eb }, + /* 0F 94 */ { 0, &Ia_setz_Eb }, + /* 0F 95 */ { 0, &Ia_setnz_Eb }, + /* 0F 96 */ { 0, &Ia_setbe_Eb }, + /* 0F 97 */ { 0, &Ia_setnbe_Eb }, + /* 0F 98 */ { 0, &Ia_sets_Eb }, + /* 0F 99 */ { 0, &Ia_setns_Eb }, + /* 0F 9A */ { 0, &Ia_setp_Eb }, + /* 0F 9B */ { 0, &Ia_setnp_Eb }, + /* 0F 9C */ { 0, &Ia_setl_Eb }, + /* 0F 9D */ { 0, &Ia_setnl_Eb }, + /* 0F 9E */ { 0, &Ia_setle_Eb }, + /* 0F 9F */ { 0, &Ia_setnle_Eb }, + /* 0F A0 */ { 0, &Ia_pushq_FS }, + /* 0F A1 */ { 0, &Ia_popq_FS }, + /* 0F A2 */ { 0, &Ia_cpuid }, + /* 0F A3 */ { 0, &Ia_btq_Eq_Gq }, + /* 0F A4 */ { 0, &Ia_shldq_Eq_Gq_Ib }, + /* 0F A5 */ { 0, &Ia_shldq_Eq_Gq_CL }, + /* 0F A6 */ { 0, &Ia_Invalid }, + /* 0F A7 */ { 0, &Ia_Invalid }, + /* 0F A8 */ { 0, &Ia_pushq_GS }, + /* 0F A9 */ { 0, &Ia_popq_GS }, + /* 0F AA */ { 0, &Ia_rsm }, + /* 0F AB */ { 0, &Ia_btsq_Eq_Gq }, + /* 0F AC */ { 0, &Ia_shrdq_Eq_Gq_Ib }, + /* 0F AD */ { 0, &Ia_shrdq_Eq_Gq_CL }, + /* 0F AE */ { GRPMOD(G15) }, + /* 0F AF */ { 0, &Ia_imulq_Gq_Eq }, + /* 0F B0 */ { 0, &Ia_cmpxchgb_Eb_Gb }, + /* 0F B1 */ { 0, &Ia_cmpxchgq_Eq_Gq }, + /* 0F B2 */ { 0, &Ia_lssq_Gq_Mp }, + /* 0F B3 */ { 0, &Ia_btrq_Eq_Gq }, + /* 0F B4 */ { 0, &Ia_lfsq_Gq_Mp }, + /* 0F B5 */ { 0, &Ia_lgsq_Gq_Mp }, + /* 0F B6 */ { 0, &Ia_movzbq_Gq_Eb }, + /* 0F B7 */ { 0, &Ia_movzwq_Gq_Ew }, + /* 0F B8 */ { GRPSSEF3(Ia_popcnt_Gq_Eq) }, + /* 0F B9 */ { 0, &Ia_ud2b }, + /* 0F BA */ { GRPN(G8EqIb) }, + /* 0F BB */ { 0, &Ia_btcq_Eq_Gq }, + /* 0F BC */ { GRPSSE(0fbcq) }, + /* 0F BD */ { GRPSSE(0fbdq) }, + /* 0F BE */ { 0, &Ia_movsbq_Gq_Eb }, + /* 0F BF */ { 0, &Ia_movswq_Gq_Ew }, + /* 0F C0 */ { 0, &Ia_xaddb_Eb_Gb }, + /* 0F C0 */ { 0, &Ia_xaddq_Eq_Gq }, + /* 0F C2 */ { GRPSSE(0fc2) }, + /* 0F C3 */ { GRPSSENONE(Ia_movntiq_Mq_Gq) }, + /* 0F C4 */ { GRPSSE2(0fc4) }, + /* 0F C5 */ { GRPSSE2(0fc5) }, + /* 0F C6 */ { GRPSSE2(0fc6) }, + /* 0F C7 */ { GRPMOD(G9q) }, + /* 0F C8 */ { 0, &Ia_bswapq_RRX }, + /* 0F C9 */ { 0, &Ia_bswapq_RRX }, + /* 0F CA */ { 0, &Ia_bswapq_RRX }, + /* 0F CB */ { 0, &Ia_bswapq_RRX }, + /* 0F CC */ { 0, &Ia_bswapq_RRX }, + /* 0F CD */ { 0, &Ia_bswapq_RRX }, + /* 0F CE */ { 0, &Ia_bswapq_RRX }, + /* 0F CF */ { 0, &Ia_bswapq_RRX }, + /* 0F D0 */ { GRPSSE(0fd0) }, + /* 0F D1 */ { GRPSSE2(0fd1) }, + /* 0F D2 */ { GRPSSE2(0fd2) }, + /* 0F D3 */ { GRPSSE2(0fd3) }, + /* 0F D4 */ { GRPSSE2(0fd4) }, + /* 0F D5 */ { GRPSSE2(0fd5) }, + /* 0F D6 */ { GRPSSE(0fd6) }, + /* 0F D7 */ { GRPSSE2(0fd7) }, + /* 0F D8 */ { GRPSSE2(0fd8) }, + /* 0F D9 */ { GRPSSE2(0fd9) }, + /* 0F DA */ { GRPSSE2(0fda) }, + /* 0F DB */ { GRPSSE2(0fdb) }, + /* 0F DC */ { GRPSSE2(0fdc) }, + /* 0F DD */ { GRPSSE2(0fdd) }, + /* 0F DE */ { GRPSSE2(0fde) }, + /* 0F DF */ { GRPSSE2(0fdf) }, + /* 0F E0 */ { GRPSSE2(0fe0) }, + /* 0F E1 */ { GRPSSE2(0fe1) }, + /* 0F E2 */ { GRPSSE2(0fe2) }, + /* 0F E3 */ { GRPSSE2(0fe3) }, + /* 0F E4 */ { GRPSSE2(0fe4) }, + /* 0F E5 */ { GRPSSE2(0fe5) }, + /* 0F E6 */ { GRPSSE(0fe6) }, + /* 0F E7 */ { GRPSSE2(0fe7) }, + /* 0F E8 */ { GRPSSE2(0fe8) }, + /* 0F E9 */ { GRPSSE2(0fe9) }, + /* 0F EA */ { GRPSSE2(0fea) }, + /* 0F EB */ { GRPSSE2(0feb) }, + /* 0F EC */ { GRPSSE2(0fec) }, + /* 0F ED */ { GRPSSE2(0fed) }, + /* 0F EE */ { GRPSSE2(0fee) }, + /* 0F EF */ { GRPSSE2(0fef) }, + /* 0F F0 */ { GRPSSEF2(Ia_lddqu_Vdq_Mdq) }, + /* 0F F1 */ { GRPSSE2(0ff1) }, + /* 0F F2 */ { GRPSSE2(0ff2) }, + /* 0F F3 */ { GRPSSE2(0ff3) }, + /* 0F F4 */ { GRPSSE2(0ff4) }, + /* 0F F5 */ { GRPSSE2(0ff5) }, + /* 0F F6 */ { GRPSSE2(0ff6) }, + /* 0F F7 */ { GRPSSE2(0ff7) }, + /* 0F F8 */ { GRPSSE2(0ff8) }, + /* 0F F9 */ { GRPSSE2(0ff9) }, + /* 0F FA */ { GRPSSE2(0ffa) }, + /* 0F FB */ { GRPSSE2(0ffb) }, + /* 0F FC */ { GRPSSE2(0ffc) }, + /* 0F FD */ { GRPSSE2(0ffd) }, + /* 0F FE */ { GRPSSE2(0ffe) }, + /* 0F FF */ { 0, &Ia_Invalid } +}; diff --git a/Externals/Bochs_disasm/dis_tables.inl b/Externals/Bochs_disasm/dis_tables.inl deleted file mode 100644 index 26e9fefe6a..0000000000 --- a/Externals/Bochs_disasm/dis_tables.inl +++ /dev/null @@ -1,5081 +0,0 @@ -/* ************************************************************************ */ -/* SSE opcodes */ - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f10[4] = { - /* -- */ { 0, &Ia_movups_Vps_Wps }, - /* 66 */ { 0, &Ia_movupd_Vpd_Wpd }, - /* F2 */ { 0, &Ia_movsd_Vsd_Wsd }, - /* F3 */ { 0, &Ia_movss_Vss_Wss } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f11[4] = { - /* -- */ { 0, &Ia_movups_Wps_Vps }, - /* 66 */ { 0, &Ia_movupd_Wpd_Vpd }, - /* F2 */ { 0, &Ia_movsd_Wsd_Vsd }, - /* F3 */ { 0, &Ia_movss_Wss_Vss } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupModMOVHLPS[2] = { - /* R */ { 0, &Ia_movhlps_Vps_Uq }, - /* M */ { 0, &Ia_movlps_Vps_Mq } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupModMOVHLPD[2] = { - /* R */ { 0, &Ia_movhlpd_Vpd_Uq }, - /* M */ { 0, &Ia_movlpd_Vpd_Mq } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f12[4] = { - /* -- */ { GRPMOD(MOVHLPS) }, - /* 66 */ { GRPMOD(MOVHLPD) }, - /* F2 */ { 0, &Ia_movddup_Vdq_Wq }, - /* F3 */ { 0, &Ia_movsldup_Vdq_Wdq } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f13[4] = { - /* -- */ { 0, &Ia_movlps_Mq_Vps }, - /* 66 */ { 0, &Ia_movlpd_Mq_Vpd }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f14[4] = { - /* -- */ { 0, &Ia_unpcklps_Vps_Wq }, - /* 66 */ { 0, &Ia_unpcklpd_Vpd_Wq }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f15[4] = { - /* -- */ { 0, &Ia_unpckhps_Vps_Wdq }, - /* 66 */ { 0, &Ia_unpckhpd_Vpd_Wdq }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupModMOVLHPS[2] = { - /* R */ { 0, &Ia_movlhps_Vps_Uq }, - /* M */ { 0, &Ia_movhps_Vps_Mq } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupModMOVLHPD[2] = { - /* R */ { 0, &Ia_movlhpd_Vpd_Uq }, - /* M */ { 0, &Ia_movhpd_Vpd_Mq } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f16[4] = { - /* -- */ { GRPMOD(MOVLHPS) }, - /* 66 */ { GRPMOD(MOVLHPD) }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_movshdup_Vdq_Wdq }, -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f17[4] = { - /* -- */ { 0, &Ia_movhps_Mq_Vps }, - /* 66 */ { 0, &Ia_movhpd_Mq_Vpd }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f28[4] = { - /* -- */ { 0, &Ia_movaps_Vps_Wps }, - /* 66 */ { 0, &Ia_movapd_Vpd_Wpd }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f29[4] = { - /* -- */ { 0, &Ia_movaps_Wps_Vps }, - /* 66 */ { 0, &Ia_movapd_Wpd_Vpd }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f2a[4] = { - /* -- */ { 0, &Ia_cvtpi2ps_Vps_Qq }, - /* 66 */ { 0, &Ia_cvtpi2pd_Vpd_Qq }, - /* F2 */ { 0, &Ia_cvtsi2sd_Vsd_Ed }, - /* F3 */ { 0, &Ia_cvtsi2ss_Vss_Ed } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_640f2a[4] = { - /* -- */ { 0, &Ia_cvtpi2ps_Vps_Qq }, - /* 66 */ { 0, &Ia_cvtpi2pd_Vpd_Qq }, - /* F2 */ { 0, &Ia_cvtsi2sd_Vsd_Eq }, - /* F3 */ { 0, &Ia_cvtsi2ss_Vss_Eq } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f2b[4] = { - /* -- */ { 0, &Ia_movntps_Mps_Vps }, - /* 66 */ { 0, &Ia_movntpd_Mpd_Vpd }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f2c[4] = { - /* -- */ { 0, &Ia_cvttps2pi_Pq_Wps }, - /* 66 */ { 0, &Ia_cvttpd2pi_Pq_Wpd }, - /* F2 */ { 0, &Ia_cvttsd2si_Gd_Wsd }, - /* F3 */ { 0, &Ia_cvttss2si_Gd_Wss } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f2cQ[4] = { - /* -- */ { 0, &Ia_cvttps2pi_Pq_Wps }, - /* 66 */ { 0, &Ia_cvttpd2pi_Pq_Wpd }, - /* F2 */ { 0, &Ia_cvttsd2si_Gq_Wsd }, - /* F3 */ { 0, &Ia_cvttss2si_Gq_Wss } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f2d[4] = { - /* -- */ { 0, &Ia_cvtps2pi_Pq_Wps }, - /* 66 */ { 0, &Ia_cvtpd2pi_Pq_Wpd }, - /* F2 */ { 0, &Ia_cvtsd2si_Gd_Wsd }, - /* F3 */ { 0, &Ia_cvtss2si_Gd_Wss } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f2dQ[4] = { - /* -- */ { 0, &Ia_cvtps2pi_Pq_Wps }, - /* 66 */ { 0, &Ia_cvtpd2pi_Pq_Wpd }, - /* F2 */ { 0, &Ia_cvtsd2si_Gq_Wsd }, - /* F3 */ { 0, &Ia_cvtss2si_Gq_Wss } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f2e[4] = { - /* -- */ { 0, &Ia_ucomiss_Vss_Wss }, - /* 66 */ { 0, &Ia_ucomisd_Vsd_Wss }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f2f[4] = { - /* -- */ { 0, &Ia_comiss_Vss_Wss }, - /* 66 */ { 0, &Ia_comisd_Vsd_Wsd }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f3800[4] = { - /* -- */ { 0, &Ia_pshufb_Pq_Qq }, // SSE4 - /* 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 }, // SSE4 - /* 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 }, // SSE4 - /* 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 }, // SSE4 - /* 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 }, // SSE4 - /* 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 }, // SSE4 - /* 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 }, // SSE4 - /* 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 }, // SSE4 - /* 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 }, // SSE4 - /* 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 }, // SSE4 - /* 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 }, // SSE4 - /* 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 }, // SSE4 - /* 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 }, // SSE4 - /* 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 }, // SSE4 - /* 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 }, // SSE4 - /* 66 */ { 0, &Ia_pabsd_Vdq_Wdq }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f3a0f[4] = { - /* -- */ { 0, &Ia_palignr_Pq_Qq_Ib }, // SSE4 - /* 66 */ { 0, &Ia_palignr_Vdq_Wdq_Ib }, - /* 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 }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f51[4] = { - /* -- */ { 0, &Ia_sqrtps_Vps_Wps }, - /* 66 */ { 0, &Ia_sqrtpd_Vpd_Wpd }, - /* F2 */ { 0, &Ia_sqrtsd_Vsd_Wsd }, - /* F3 */ { 0, &Ia_sqrtss_Vss_Wss } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f52[4] = { - /* -- */ { 0, &Ia_rsqrtps_Vps_Wps }, - /* 66 */ { 0, &Ia_Invalid }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_rsqrtss_Vss_Wss } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f53[4] = { - /* -- */ { 0, &Ia_rcpps_Vps_Wps }, - /* 66 */ { 0, &Ia_Invalid }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_rcpss_Vss_Wss } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f54[4] = { - /* -- */ { 0, &Ia_andps_Vps_Wps }, - /* 66 */ { 0, &Ia_andpd_Vpd_Wpd }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f55[4] = { - /* -- */ { 0, &Ia_andnps_Vps_Wps }, - /* 66 */ { 0, &Ia_andnpd_Vpd_Wpd }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f56[4] = { - /* -- */ { 0, &Ia_orps_Vps_Wps }, - /* 66 */ { 0, &Ia_orpd_Vpd_Wpd }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f57[4] = { - /* -- */ { 0, &Ia_xorps_Vps_Wps }, - /* 66 */ { 0, &Ia_xorpd_Vpd_Wpd }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f58[4] = { - /* -- */ { 0, &Ia_addps_Vps_Wps }, - /* 66 */ { 0, &Ia_addpd_Vpd_Wpd }, - /* F2 */ { 0, &Ia_addsd_Vsd_Wsd }, - /* F3 */ { 0, &Ia_addss_Vss_Wss } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f59[4] = { - /* -- */ { 0, &Ia_mulps_Vps_Wps }, - /* 66 */ { 0, &Ia_mulpd_Vpd_Wpd }, - /* F2 */ { 0, &Ia_mulsd_Vsd_Wsd }, - /* F3 */ { 0, &Ia_mulss_Vss_Wss } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f5a[4] = { - /* -- */ { 0, &Ia_cvtps2pd_Vpd_Wps }, - /* 66 */ { 0, &Ia_cvtpd2ps_Vps_Wpd }, - /* F2 */ { 0, &Ia_cvtsd2ss_Vss_Wsd }, - /* F3 */ { 0, &Ia_cvtss2sd_Vsd_Wss } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f5b[4] = { - /* -- */ { 0, &Ia_cvtdq2ps_Vps_Wdq }, - /* 66 */ { 0, &Ia_cvtps2dq_Vdq_Wps }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_cvttps2dq_Vdq_Wps } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f5c[4] = { - /* -- */ { 0, &Ia_subps_Vps_Wps }, - /* 66 */ { 0, &Ia_subpd_Vpd_Wpd }, - /* F2 */ { 0, &Ia_subsd_Vsd_Wsd }, - /* F3 */ { 0, &Ia_subss_Vss_Wss } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f5d[4] = { - /* -- */ { 0, &Ia_minps_Vps_Wps }, - /* 66 */ { 0, &Ia_minpd_Vpd_Wpd }, - /* F2 */ { 0, &Ia_minsd_Vsd_Wsd }, - /* F3 */ { 0, &Ia_minss_Vss_Wss } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f5e[4] = { - /* -- */ { 0, &Ia_divps_Vps_Wps }, - /* 66 */ { 0, &Ia_divpd_Vpd_Wpd }, - /* F2 */ { 0, &Ia_divsd_Vsd_Wsd }, - /* F3 */ { 0, &Ia_divss_Vss_Wss } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f5f[4] = { - /* -- */ { 0, &Ia_maxps_Vps_Wps }, - /* 66 */ { 0, &Ia_maxpd_Vpd_Wpd }, - /* F2 */ { 0, &Ia_maxsd_Vsd_Wsd }, - /* F3 */ { 0, &Ia_maxss_Vss_Wss } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f60[4] = { - /* -- */ { 0, &Ia_punpcklbw_Pq_Qd }, - /* 66 */ { 0, &Ia_punpcklbw_Vdq_Wq }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f61[4] = { - /* -- */ { 0, &Ia_punpcklwd_Pq_Qd }, - /* 66 */ { 0, &Ia_punpcklwd_Vdq_Wq }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f62[4] = { - /* -- */ { 0, &Ia_punpckldq_Pq_Qd }, - /* 66 */ { 0, &Ia_punpckldq_Vdq_Wq }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f63[4] = { - /* -- */ { 0, &Ia_packsswb_Pq_Qq }, - /* 66 */ { 0, &Ia_packsswb_Vdq_Wq }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f64[4] = { - /* -- */ { 0, &Ia_pcmpgtb_Pq_Qq }, - /* 66 */ { 0, &Ia_pcmpgtb_Vdq_Wq }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f65[4] = { - /* -- */ { 0, &Ia_pcmpgtw_Pq_Qq }, - /* 66 */ { 0, &Ia_pcmpgtw_Vdq_Wq }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f66[4] = { - /* -- */ { 0, &Ia_pcmpgtd_Pq_Qq }, - /* 66 */ { 0, &Ia_pcmpgtd_Vdq_Wdq }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f67[4] = { - /* -- */ { 0, &Ia_packuswb_Pq_Qq }, - /* 66 */ { 0, &Ia_packuswb_Vdq_Wdq }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f68[4] = { - /* -- */ { 0, &Ia_punpckhbw_Pq_Qq }, - /* 66 */ { 0, &Ia_punpckhbw_Vdq_Wq }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f69[4] = { - /* -- */ { 0, &Ia_punpckhwd_Pq_Qq }, - /* 66 */ { 0, &Ia_punpckhwd_Vdq_Wq }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f6a[4] = { - /* -- */ { 0, &Ia_punpckhdq_Pq_Qq }, - /* 66 */ { 0, &Ia_punpckhdq_Vdq_Wq }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f6b[4] = { - /* -- */ { 0, &Ia_packssdw_Pq_Qq }, - /* 66 */ { 0, &Ia_packssdw_Vdq_Wdq }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f6c[4] = { - /* -- */ { 0, &Ia_Invalid }, - /* 66 */ { 0, &Ia_punpcklqdq_Vdq_Wq }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f6d[4] = { - /* -- */ { 0, &Ia_Invalid }, - /* 66 */ { 0, &Ia_punpckhqdq_Vdq_Wq }, - /* 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 }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f6eQ[4] = { - /* -- */ { 0, &Ia_movq_Pq_Eq }, - /* 66 */ { 0, &Ia_movq_Vdq_Eq }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f6f[4] = { - /* -- */ { 0, &Ia_movq_Pq_Qq }, - /* 66 */ { 0, &Ia_movdqa_Vdq_Wdq }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_movdqu_Vdq_Wdq }, -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f70[4] = { - /* -- */ { 0, &Ia_pshufw_Pq_Qq_Ib }, - /* 66 */ { 0, &Ia_pshufd_Vdq_Wdq_Ib }, - /* F2 */ { 0, &Ia_pshufhw_Vq_Wq_Ib }, - /* F3 */ { 0, &Ia_pshuflw_Vq_Wq_Ib } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f74[4] = { - /* -- */ { 0, &Ia_pcmpeqb_Pq_Qq }, - /* 66 */ { 0, &Ia_pcmpeqb_Vdq_Wdq }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f75[4] = { - /* -- */ { 0, &Ia_pcmpeqw_Pq_Qq }, - /* 66 */ { 0, &Ia_pcmpeqw_Vdq_Wdq }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f76[4] = { - /* -- */ { 0, &Ia_pcmpeqd_Pq_Qq }, - /* 66 */ { 0, &Ia_pcmpeqd_Vdq_Wdq }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f7c[4] = { - /* -- */ { 0, &Ia_Invalid }, - /* 66 */ { 0, &Ia_haddpd_Vpd_Wpd }, - /* F2 */ { 0, &Ia_haddps_Vps_Wps }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f7d[4] = { - /* -- */ { 0, &Ia_Invalid }, - /* 66 */ { 0, &Ia_hsubpd_Vpd_Wpd }, - /* F2 */ { 0, &Ia_hsubps_Vps_Wps }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f7e[4] = { - /* -- */ { 0, &Ia_movd_Ed_Pq }, - /* 66 */ { 0, &Ia_movd_Ed_Vd }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_movq_Vq_Wq }, -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f7eQ[4] = { - /* -- */ { 0, &Ia_movq_Eq_Pq }, - /* 66 */ { 0, &Ia_movq_Eq_Vq }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_movq_Vq_Wq }, -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f7f[4] = { - /* -- */ { 0, &Ia_movq_Qq_Pq }, - /* 66 */ { 0, &Ia_movdqa_Wdq_Vdq }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_movdqu_Wdq_Vdq }, -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fc2[4] = { - /* -- */ { 0, &Ia_cmpps_Vps_Wps_Ib }, - /* 66 */ { 0, &Ia_cmppd_Vpd_Wpd_Ib }, - /* F2 */ { 0, &Ia_cmpsd_Vsd_Wsd_Ib }, - /* F3 */ { 0, &Ia_cmpss_Vss_Wss_Ib } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fc3[4] = { - /* -- */ { 0, &Ia_movnti_Md_Gd }, - /* 66 */ { 0, &Ia_Invalid }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_640fc3[4] = { - /* -- */ { 0, &Ia_movntiq_Mq_Gq }, - /* 66 */ { 0, &Ia_Invalid }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fc4[4] = { - /* -- */ { 0, &Ia_pinsrw_Pq_Ed_Ib }, - /* 66 */ { 0, &Ia_pinsrw_Vdq_Ed_Ib }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fc5[4] = { - /* -- */ { 0, &Ia_pextrw_Gd_Nq_Ib }, - /* 66 */ { 0, &Ia_pextrw_Gd_Udq_Ib }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fc6[4] = { - /* -- */ { 0, &Ia_shufps_Vps_Wps_Ib }, - /* 66 */ { 0, &Ia_shufpd_Vpd_Wpd_Ib }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fd0[4] = { - /* -- */ { 0, &Ia_Invalid }, - /* 66 */ { 0, &Ia_addsubpd_Vpd_Wpd }, - /* F2 */ { 0, &Ia_addsubps_Vps_Wps }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fd1[4] = { - /* -- */ { 0, &Ia_psrlw_Pq_Qq }, - /* 66 */ { 0, &Ia_psrlw_Vdq_Wdq }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fd2[4] = { - /* -- */ { 0, &Ia_psrld_Pq_Qq }, - /* 66 */ { 0, &Ia_psrld_Vdq_Wdq }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fd3[4] = { - /* -- */ { 0, &Ia_psrlq_Pq_Qq }, - /* 66 */ { 0, &Ia_psrlq_Vdq_Wdq }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fd4[4] = { - /* -- */ { 0, &Ia_paddq_Pq_Qq }, - /* 66 */ { 0, &Ia_paddq_Vdq_Wdq }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fd5[4] = { - /* -- */ { 0, &Ia_pmullw_Pq_Qq }, - /* 66 */ { 0, &Ia_pmullw_Vdq_Wdq }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fd6[4] = { - /* -- */ { 0, &Ia_Invalid }, - /* 66 */ { 0, &Ia_movq_Wq_Vq }, - /* F2 */ { 0, &Ia_movdq2q_Pq_Vq }, - /* F3 */ { 0, &Ia_movq2dq_Vdq_Qq }, -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fd7[4] = { - /* -- */ { 0, &Ia_pmovmskb_Gd_Nq }, - /* 66 */ { 0, &Ia_pmovmskb_Gd_Udq }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fd8[4] = { - /* -- */ { 0, &Ia_psubusb_Pq_Qq }, - /* 66 */ { 0, &Ia_psubusb_Vdq_Wdq }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fd9[4] = { - /* -- */ { 0, &Ia_psubusw_Pq_Qq }, - /* 66 */ { 0, &Ia_psubusw_Vdq_Wdq }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fda[4] = { - /* -- */ { 0, &Ia_pminub_Pq_Qq }, - /* 66 */ { 0, &Ia_pminub_Vdq_Wdq }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fdb[4] = { - /* -- */ { 0, &Ia_pand_Pq_Qq }, - /* 66 */ { 0, &Ia_pand_Vdq_Wdq }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fdc[4] = { - /* -- */ { 0, &Ia_paddusb_Pq_Qq }, - /* 66 */ { 0, &Ia_paddusb_Vdq_Wdq }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fdd[4] = { - /* -- */ { 0, &Ia_paddusw_Pq_Qq }, - /* 66 */ { 0, &Ia_paddusw_Vdq_Wdq }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fde[4] = { - /* -- */ { 0, &Ia_pmaxub_Pq_Qq }, - /* 66 */ { 0, &Ia_pmaxub_Vdq_Wdq }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fdf[4] = { - /* -- */ { 0, &Ia_pandn_Pq_Qq }, - /* 66 */ { 0, &Ia_pandn_Vdq_Wdq }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fe0[4] = { - /* -- */ { 0, &Ia_pavgb_Pq_Qq }, - /* 66 */ { 0, &Ia_pavgb_Vdq_Wdq }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fe1[4] = { - /* -- */ { 0, &Ia_psraw_Pq_Qq }, - /* 66 */ { 0, &Ia_psraw_Vdq_Wdq }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fe2[4] = { - /* -- */ { 0, &Ia_psrad_Pq_Qq }, - /* 66 */ { 0, &Ia_psrad_Vdq_Wdq }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fe3[4] = { - /* -- */ { 0, &Ia_pavgw_Pq_Qq }, - /* 66 */ { 0, &Ia_pavgw_Vdq_Wdq }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fe4[4] = { - /* -- */ { 0, &Ia_pmulhuw_Pq_Qq }, - /* 66 */ { 0, &Ia_pmulhuw_Vdq_Wdq }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fe5[4] = { - /* -- */ { 0, &Ia_pmulhw_Pq_Qq }, - /* 66 */ { 0, &Ia_pmulhw_Vdq_Wdq }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fe6[4] = { - /* -- */ { 0, &Ia_Invalid }, - /* 66 */ { 0, &Ia_cvttpd2dq_Vq_Wpd }, - /* F2 */ { 0, &Ia_cvtpd2dq_Vq_Wpd }, - /* F3 */ { 0, &Ia_cvtdq2pd_Vpd_Wq } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fe7[4] = { - /* -- */ { 0, &Ia_movntq_Mq_Pq }, - /* 66 */ { 0, &Ia_movntdq_Mdq_Vdq }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fe8[4] = { - /* -- */ { 0, &Ia_psubsb_Pq_Qq }, - /* 66 */ { 0, &Ia_psubsb_Vdq_Wdq }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fe9[4] = { - /* -- */ { 0, &Ia_psubsw_Pq_Qq }, - /* 66 */ { 0, &Ia_psubsw_Vdq_Wdq }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fea[4] = { - /* -- */ { 0, &Ia_pminsw_Pq_Qq }, - /* 66 */ { 0, &Ia_pminsw_Vdq_Wdq }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0feb[4] = { - /* -- */ { 0, &Ia_por_Pq_Qq }, - /* 66 */ { 0, &Ia_por_Vdq_Wdq }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fec[4] = { - /* -- */ { 0, &Ia_paddsb_Pq_Qq }, - /* 66 */ { 0, &Ia_paddsb_Vdq_Wdq }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fed[4] = { - /* -- */ { 0, &Ia_paddsw_Pq_Qq }, - /* 66 */ { 0, &Ia_paddsw_Vdq_Wdq }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fee[4] = { - /* -- */ { 0, &Ia_pmaxuw_Pq_Qq }, - /* 66 */ { 0, &Ia_pmaxuw_Vdq_Wdq }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fef[4] = { - /* -- */ { 0, &Ia_pxor_Pq_Qq }, - /* 66 */ { 0, &Ia_pxor_Vdq_Wdq }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0ff0[4] = { - /* -- */ { 0, &Ia_Invalid }, - /* 66 */ { 0, &Ia_Invalid }, - /* F3 */ { 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 }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0ff2[4] = { - /* -- */ { 0, &Ia_pslld_Pq_Qq }, - /* 66 */ { 0, &Ia_pslld_Vdq_Wdq }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0ff3[4] = { - /* -- */ { 0, &Ia_psllq_Pq_Qq }, - /* 66 */ { 0, &Ia_psllq_Vdq_Wdq }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0ff4[4] = { - /* -- */ { 0, &Ia_pmuludq_Pq_Qq }, - /* 66 */ { 0, &Ia_pmuludq_Vdq_Wdq }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0ff5[4] = { - /* -- */ { 0, &Ia_pmaddwd_Pq_Qq }, - /* 66 */ { 0, &Ia_pmaddwd_Vdq_Wdq }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0ff6[4] = { - /* -- */ { 0, &Ia_psadbw_Pq_Qq }, - /* 66 */ { 0, &Ia_psadbw_Vdq_Wdq }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0ff7[4] = { - /* -- */ { 0, &Ia_maskmovq_Pq_Nq }, - /* 66 */ { 0, &Ia_maskmovdqu_Vdq_Udq }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0ff8[4] = { - /* -- */ { 0, &Ia_psubb_Pq_Qq }, - /* 66 */ { 0, &Ia_psubb_Vdq_Wdq }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0ff9[4] = { - /* -- */ { 0, &Ia_psubw_Pq_Qq }, - /* 66 */ { 0, &Ia_psubw_Vdq_Wdq }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0ffa[4] = { - /* -- */ { 0, &Ia_psubd_Pq_Qq }, - /* 66 */ { 0, &Ia_psubd_Vdq_Wdq }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0ffb[4] = { - /* -- */ { 0, &Ia_psubq_Pq_Qq }, - /* 66 */ { 0, &Ia_psubq_Vdq_Wdq }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0ffc[4] = { - /* -- */ { 0, &Ia_paddb_Pq_Qq }, - /* 66 */ { 0, &Ia_paddb_Vdq_Wdq }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0ffd[4] = { - /* -- */ { 0, &Ia_paddw_Pq_Qq }, - /* 66 */ { 0, &Ia_paddw_Vdq_Wdq }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0ffe[4] = { - /* -- */ { 0, &Ia_paddd_Pq_Qq }, - /* 66 */ { 0, &Ia_paddd_Vdq_Wdq }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_G1202[4] = { - /* -- */ { 0, &Ia_psrlw_Nq_Ib }, - /* 66 */ { 0, &Ia_psrlw_Udq_Ib }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_G1204[4] = { - /* -- */ { 0, &Ia_psraw_Nq_Ib }, - /* 66 */ { 0, &Ia_psraw_Udq_Ib }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_G1206[4] = { - /* -- */ { 0, &Ia_psllw_Nq_Ib }, - /* 66 */ { 0, &Ia_psllw_Udq_Ib }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_G1302[4] = { - /* -- */ { 0, &Ia_psrld_Nq_Ib }, - /* 66 */ { 0, &Ia_psrld_Udq_Ib }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_G1304[4] = { - /* -- */ { 0, &Ia_psrad_Nq_Ib }, - /* 66 */ { 0, &Ia_psrad_Udq_Ib }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_G1306[4] = { - /* -- */ { 0, &Ia_pslld_Nq_Ib }, - /* 66 */ { 0, &Ia_pslld_Udq_Ib }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_G1402[4] = { - /* -- */ { 0, &Ia_psrlq_Nq_Ib }, - /* 66 */ { 0, &Ia_psrlq_Udq_Ib }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_G1403[4] = { - /* -- */ { 0, &Ia_Invalid }, - /* 66 */ { 0, &Ia_psrldq_Udq_Ib }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_G1406[4] = { - /* -- */ { 0, &Ia_psllq_Nq_Ib }, - /* 66 */ { 0, &Ia_psllq_Udq_Ib }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupSSE_G1407[4] = { - /* -- */ { 0, &Ia_Invalid }, - /* 66 */ { 0, &Ia_pslldq_Udq_Ib }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid } -}; - - -/* ************************************************************************ */ -/* Opcode GroupN */ - -static BxDisasmOpcodeTable_t BxDisasmGroupG1EbIb[8] = { - /* 0 */ { 0, &Ia_addb_Eb_Ib }, - /* 1 */ { 0, &Ia_orb_Eb_Ib }, - /* 2 */ { 0, &Ia_adcb_Eb_Ib }, - /* 3 */ { 0, &Ia_sbbb_Eb_Ib }, - /* 4 */ { 0, &Ia_andb_Eb_Ib }, - /* 5 */ { 0, &Ia_subb_Eb_Ib }, - /* 6 */ { 0, &Ia_xorb_Eb_Ib }, - /* 7 */ { 0, &Ia_cmpb_Eb_Ib } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupG1EwIw[8] = { - /* 0 */ { 0, &Ia_addw_Ew_Iw }, - /* 1 */ { 0, &Ia_orw_Ew_Iw }, - /* 2 */ { 0, &Ia_adcw_Ew_Iw }, - /* 3 */ { 0, &Ia_sbbw_Ew_Iw }, - /* 4 */ { 0, &Ia_andw_Ew_Iw }, - /* 5 */ { 0, &Ia_subw_Ew_Iw }, - /* 6 */ { 0, &Ia_xorw_Ew_Iw }, - /* 7 */ { 0, &Ia_cmpw_Ew_Iw } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupG1EdId[8] = { - /* 0 */ { 0, &Ia_addl_Ed_Id }, - /* 1 */ { 0, &Ia_orl_Ed_Id }, - /* 2 */ { 0, &Ia_adcl_Ed_Id }, - /* 3 */ { 0, &Ia_sbbl_Ed_Id }, - /* 4 */ { 0, &Ia_andl_Ed_Id }, - /* 5 */ { 0, &Ia_subl_Ed_Id }, - /* 6 */ { 0, &Ia_xorl_Ed_Id }, - /* 7 */ { 0, &Ia_cmpl_Ed_Id } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupG1EqId[8] = { - /* 0 */ { 0, &Ia_addq_Eq_sId }, - /* 1 */ { 0, &Ia_orq_Eq_sId }, - /* 2 */ { 0, &Ia_adcq_Eq_sId }, - /* 3 */ { 0, &Ia_sbbq_Eq_sId }, - /* 4 */ { 0, &Ia_andq_Eq_sId }, - /* 5 */ { 0, &Ia_subq_Eq_sId }, - /* 6 */ { 0, &Ia_xorq_Eq_sId }, - /* 7 */ { 0, &Ia_cmpq_Eq_sId } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupG1EwIb[8] = { - /* 0 */ { 0, &Ia_addw_Ew_sIb }, // sign-extend byte - /* 1 */ { 0, &Ia_orw_Ew_sIb }, - /* 2 */ { 0, &Ia_adcw_Ew_sIb }, - /* 3 */ { 0, &Ia_sbbw_Ew_sIb }, - /* 4 */ { 0, &Ia_andw_Ew_sIb }, - /* 5 */ { 0, &Ia_subw_Ew_sIb }, - /* 6 */ { 0, &Ia_xorw_Ew_sIb }, - /* 7 */ { 0, &Ia_cmpw_Ew_sIb } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupG1EdIb[8] = { - /* 0 */ { 0, &Ia_addl_Ed_sIb }, // sign-extend byte - /* 1 */ { 0, &Ia_orl_Ed_sIb }, - /* 2 */ { 0, &Ia_adcl_Ed_sIb }, - /* 3 */ { 0, &Ia_sbbl_Ed_sIb }, - /* 4 */ { 0, &Ia_andl_Ed_sIb }, - /* 5 */ { 0, &Ia_subl_Ed_sIb }, - /* 6 */ { 0, &Ia_xorl_Ed_sIb }, - /* 7 */ { 0, &Ia_cmpl_Ed_sIb } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupG1EqIb[8] = { - /* 0 */ { 0, &Ia_addq_Eq_sIb }, // sign-extend byte - /* 1 */ { 0, &Ia_orq_Eq_sIb }, - /* 2 */ { 0, &Ia_adcq_Eq_sIb }, - /* 3 */ { 0, &Ia_sbbq_Eq_sIb }, - /* 4 */ { 0, &Ia_andq_Eq_sIb }, - /* 5 */ { 0, &Ia_subq_Eq_sIb }, - /* 6 */ { 0, &Ia_xorq_Eq_sIb }, - /* 7 */ { 0, &Ia_cmpq_Eq_sIb } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupG2Eb[8] = { - /* 0 */ { 0, &Ia_rolb_Eb_Ib }, - /* 1 */ { 0, &Ia_rorb_Eb_Ib }, - /* 2 */ { 0, &Ia_rclb_Eb_Ib }, - /* 3 */ { 0, &Ia_rcrb_Eb_Ib }, - /* 4 */ { 0, &Ia_shlb_Eb_Ib }, - /* 5 */ { 0, &Ia_shrb_Eb_Ib }, - /* 6 */ { 0, &Ia_shlb_Eb_Ib }, - /* 7 */ { 0, &Ia_sarb_Eb_Ib } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupG2EbI1[8] = { - /* 0 */ { 0, &Ia_rolb_Eb_I1 }, - /* 1 */ { 0, &Ia_rorb_Eb_I1 }, - /* 2 */ { 0, &Ia_rclb_Eb_I1 }, - /* 3 */ { 0, &Ia_rcrb_Eb_I1 }, - /* 4 */ { 0, &Ia_shlb_Eb_I1 }, - /* 5 */ { 0, &Ia_shrb_Eb_I1 }, - /* 6 */ { 0, &Ia_shlb_Eb_I1 }, - /* 7 */ { 0, &Ia_sarb_Eb_I1 } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupG2EbCL[8] = { - /* 0 */ { 0, &Ia_rolb_Eb_CL }, - /* 1 */ { 0, &Ia_rorb_Eb_CL }, - /* 2 */ { 0, &Ia_rclb_Eb_CL }, - /* 3 */ { 0, &Ia_rcrb_Eb_CL }, - /* 4 */ { 0, &Ia_shlb_Eb_CL }, - /* 5 */ { 0, &Ia_shrb_Eb_CL }, - /* 6 */ { 0, &Ia_shlb_Eb_CL }, - /* 7 */ { 0, &Ia_sarb_Eb_CL } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupG2Ew[8] = { - /* 0 */ { 0, &Ia_rolw_Ew_Ib }, - /* 1 */ { 0, &Ia_rorw_Ew_Ib }, - /* 2 */ { 0, &Ia_rclw_Ew_Ib }, - /* 3 */ { 0, &Ia_rcrw_Ew_Ib }, - /* 4 */ { 0, &Ia_shlw_Ew_Ib }, - /* 5 */ { 0, &Ia_shrw_Ew_Ib }, - /* 6 */ { 0, &Ia_shlw_Ew_Ib }, - /* 7 */ { 0, &Ia_sarw_Ew_Ib } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupG2Ed[8] = { - /* 0 */ { 0, &Ia_roll_Ed_Ib }, - /* 1 */ { 0, &Ia_rorl_Ed_Ib }, - /* 2 */ { 0, &Ia_rcll_Ed_Ib }, - /* 3 */ { 0, &Ia_rcrl_Ed_Ib }, - /* 4 */ { 0, &Ia_shll_Ed_Ib }, - /* 5 */ { 0, &Ia_shrl_Ed_Ib }, - /* 6 */ { 0, &Ia_shll_Ed_Ib }, - /* 7 */ { 0, &Ia_sarl_Ed_Ib } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupG2Eq[8] = { - /* 0 */ { 0, &Ia_rolq_Eq_Ib }, - /* 1 */ { 0, &Ia_rorq_Eq_Ib }, - /* 2 */ { 0, &Ia_rclq_Eq_Ib }, - /* 3 */ { 0, &Ia_rcrq_Eq_Ib }, - /* 4 */ { 0, &Ia_shlq_Eq_Ib }, - /* 5 */ { 0, &Ia_shrq_Eq_Ib }, - /* 6 */ { 0, &Ia_shlq_Eq_Ib }, - /* 7 */ { 0, &Ia_sarq_Eq_Ib } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupG2EwI1[8] = { - /* 0 */ { 0, &Ia_rolw_Ew_I1 }, - /* 1 */ { 0, &Ia_rorw_Ew_I1 }, - /* 2 */ { 0, &Ia_rclw_Ew_I1 }, - /* 3 */ { 0, &Ia_rcrw_Ew_I1 }, - /* 4 */ { 0, &Ia_shlw_Ew_I1 }, - /* 5 */ { 0, &Ia_shrw_Ew_I1 }, - /* 6 */ { 0, &Ia_shlw_Ew_I1 }, - /* 7 */ { 0, &Ia_sarw_Ew_I1 } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupG2EdI1[8] = { - /* 0 */ { 0, &Ia_roll_Ed_I1 }, - /* 1 */ { 0, &Ia_rorl_Ed_I1 }, - /* 2 */ { 0, &Ia_rcll_Ed_I1 }, - /* 3 */ { 0, &Ia_rcrl_Ed_I1 }, - /* 4 */ { 0, &Ia_shll_Ed_I1 }, - /* 5 */ { 0, &Ia_shrl_Ed_I1 }, - /* 6 */ { 0, &Ia_shll_Ed_I1 }, - /* 7 */ { 0, &Ia_sarl_Ed_I1 } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupG2EqI1[8] = { - /* 0 */ { 0, &Ia_rolq_Eq_I1 }, - /* 1 */ { 0, &Ia_rorq_Eq_I1 }, - /* 2 */ { 0, &Ia_rclq_Eq_I1 }, - /* 3 */ { 0, &Ia_rcrq_Eq_I1 }, - /* 4 */ { 0, &Ia_shlq_Eq_I1 }, - /* 5 */ { 0, &Ia_shrq_Eq_I1 }, - /* 6 */ { 0, &Ia_shlq_Eq_I1 }, - /* 7 */ { 0, &Ia_sarq_Eq_I1 } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupG2EwCL[8] = { - /* 0 */ { 0, &Ia_rolw_Ew_CL }, - /* 1 */ { 0, &Ia_rorw_Ew_CL }, - /* 2 */ { 0, &Ia_rclw_Ew_CL }, - /* 3 */ { 0, &Ia_rcrw_Ew_CL }, - /* 4 */ { 0, &Ia_shlw_Ew_CL }, - /* 5 */ { 0, &Ia_shrw_Ew_CL }, - /* 6 */ { 0, &Ia_shlw_Ew_CL }, - /* 7 */ { 0, &Ia_sarw_Ew_CL } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupG2EdCL[8] = { - /* 0 */ { 0, &Ia_roll_Ed_CL }, - /* 1 */ { 0, &Ia_rorl_Ed_CL }, - /* 2 */ { 0, &Ia_rcll_Ed_CL }, - /* 3 */ { 0, &Ia_rcrl_Ed_CL }, - /* 4 */ { 0, &Ia_shll_Ed_CL }, - /* 5 */ { 0, &Ia_shrl_Ed_CL }, - /* 6 */ { 0, &Ia_shll_Ed_CL }, - /* 7 */ { 0, &Ia_sarl_Ed_CL } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupG2EqCL[8] = { - /* 0 */ { 0, &Ia_rolq_Eq_CL }, - /* 1 */ { 0, &Ia_rorq_Eq_CL }, - /* 2 */ { 0, &Ia_rclq_Eq_CL }, - /* 3 */ { 0, &Ia_rcrq_Eq_CL }, - /* 4 */ { 0, &Ia_shlq_Eq_CL }, - /* 5 */ { 0, &Ia_shrq_Eq_CL }, - /* 6 */ { 0, &Ia_shlq_Eq_CL }, - /* 7 */ { 0, &Ia_sarq_Eq_CL } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupG3Eb[8] = { - /* 0 */ { 0, &Ia_testb_Eb_Ib }, - /* 1 */ { 0, &Ia_testb_Eb_Ib }, - /* 2 */ { 0, &Ia_notb_Eb }, - /* 3 */ { 0, &Ia_negb_Eb }, - /* 4 */ { 0, &Ia_mulb_AL_Eb }, - /* 5 */ { 0, &Ia_imulb_AL_Eb }, - /* 6 */ { 0, &Ia_divb_AL_Eb }, - /* 7 */ { 0, &Ia_idivb_AL_Eb } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupG3Ew[8] = { - /* 0 */ { 0, &Ia_testw_Ew_Iw }, - /* 1 */ { 0, &Ia_testw_Ew_Iw }, - /* 2 */ { 0, &Ia_notw_Ew }, - /* 3 */ { 0, &Ia_negw_Ew }, - /* 4 */ { 0, &Ia_mulw_AX_Ew }, - /* 5 */ { 0, &Ia_imulw_AX_Ew }, - /* 6 */ { 0, &Ia_divw_AX_Ew }, - /* 7 */ { 0, &Ia_idivw_AX_Ew } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupG3Ed[8] = { - /* 0 */ { 0, &Ia_testl_Ed_Id }, - /* 1 */ { 0, &Ia_testl_Ed_Id }, - /* 2 */ { 0, &Ia_notl_Ed }, - /* 3 */ { 0, &Ia_negl_Ed }, - /* 4 */ { 0, &Ia_mull_EAX_Ed }, - /* 5 */ { 0, &Ia_imull_EAX_Ed }, - /* 6 */ { 0, &Ia_divl_EAX_Ed }, - /* 7 */ { 0, &Ia_idivl_EAX_Ed } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupG3Eq[8] = { - /* 0 */ { 0, &Ia_testq_Eq_sId }, - /* 1 */ { 0, &Ia_testq_Eq_sId }, - /* 2 */ { 0, &Ia_notq_Eq }, - /* 3 */ { 0, &Ia_negq_Eq }, - /* 4 */ { 0, &Ia_mulq_RAX_Eq }, - /* 5 */ { 0, &Ia_imulq_RAX_Eq }, - /* 6 */ { 0, &Ia_divq_RAX_Eq }, - /* 7 */ { 0, &Ia_idivq_RAX_Eq } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupG4[8] = { - /* 0 */ { 0, &Ia_incb_Eb }, - /* 1 */ { 0, &Ia_decb_Eb }, - /* 2 */ { 0, &Ia_Invalid }, - /* 3 */ { 0, &Ia_Invalid }, - /* 4 */ { 0, &Ia_Invalid }, - /* 5 */ { 0, &Ia_Invalid }, - /* 6 */ { 0, &Ia_Invalid }, - /* 7 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupG5w[8] = { - /* 0 */ { 0, &Ia_incw_Ew }, - /* 1 */ { 0, &Ia_decw_Ew }, - /* 2 */ { 0, &Ia_call_Ew }, - /* 3 */ { 0, &Ia_lcall_Mp }, - /* 4 */ { 0, &Ia_jmp_Ew }, - /* 5 */ { 0, &Ia_ljmp_Mp }, - /* 6 */ { 0, &Ia_pushw_Ew }, - /* 7 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupG5d[8] = { - /* 0 */ { 0, &Ia_incl_Ed }, - /* 1 */ { 0, &Ia_decl_Ed }, - /* 2 */ { 0, &Ia_call_Ed }, - /* 3 */ { 0, &Ia_lcall_Mp }, - /* 4 */ { 0, &Ia_jmp_Ed }, - /* 5 */ { 0, &Ia_ljmp_Mp }, - /* 6 */ { 0, &Ia_pushl_Ed }, - /* 7 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroup64G5d[8] = { - /* 0 */ { 0, &Ia_incl_Ed }, - /* 1 */ { 0, &Ia_decl_Ed }, - /* 2 */ { 0, &Ia_call_Eq }, - /* 3 */ { 0, &Ia_lcall_Mp }, - /* 4 */ { 0, &Ia_jmp_Eq }, - /* 5 */ { 0, &Ia_ljmp_Mp }, - /* 6 */ { 0, &Ia_pushq_Eq }, - /* 7 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroup64G5q[8] = { - /* 0 */ { 0, &Ia_incq_Eq }, - /* 1 */ { 0, &Ia_decq_Eq }, - /* 2 */ { 0, &Ia_call_Eq }, - /* 3 */ { 0, &Ia_lcall_Mp }, - /* 4 */ { 0, &Ia_jmp_Eq }, - /* 5 */ { 0, &Ia_ljmp_Mp }, - /* 6 */ { 0, &Ia_pushq_Eq }, - /* 7 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupG6[8] = { - /* 0 */ { 0, &Ia_sldt }, - /* 1 */ { 0, &Ia_str }, - /* 2 */ { 0, &Ia_lldt }, - /* 3 */ { 0, &Ia_ltr }, - /* 4 */ { 0, &Ia_verr }, - /* 5 */ { 0, &Ia_verw }, - /* 6 */ { 0, &Ia_Invalid }, - /* 7 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupRmINVLPG[8] = { - /* 0 */ { 0, &Ia_swapgs }, - /* 1 */ { 0, &Ia_rdtscp }, - /* 2 */ { 0, &Ia_Invalid }, - /* 3 */ { 0, &Ia_Invalid }, - /* 4 */ { 0, &Ia_Invalid }, - /* 5 */ { 0, &Ia_Invalid }, - /* 6 */ { 0, &Ia_Invalid }, - /* 7 */ { 0, &Ia_Invalid }, -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupModINVLPG[2] = { - /* R */ { GRPRM(INVLPG) }, - /* M */ { 0, &Ia_invlpg } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupRmSIDT[8] = { - /* 0 */ { 0, &Ia_monitor }, - /* 1 */ { 0, &Ia_mwait }, - /* 2 */ { 0, &Ia_Invalid }, - /* 3 */ { 0, &Ia_Invalid }, - /* 4 */ { 0, &Ia_Invalid }, - /* 5 */ { 0, &Ia_Invalid }, - /* 6 */ { 0, &Ia_Invalid }, - /* 7 */ { 0, &Ia_Invalid }, -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupModSIDT[2] = { - /* R */ { GRPRM(SIDT) }, - /* M */ { 0, &Ia_sidt } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupG7[8] = { - /* 0 */ { 0, &Ia_sgdt }, - /* 1 */ { GRPMOD(SIDT) }, - /* 2 */ { 0, &Ia_lgdt }, - /* 3 */ { 0, &Ia_lidt }, - /* 4 */ { 0, &Ia_smsw_Ew }, - /* 5 */ { 0, &Ia_Invalid }, - /* 6 */ { 0, &Ia_lmsw_Ew }, - /* 7 */ { GRPMOD(INVLPG) }, -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupG8EwIb[8] = { - /* 0 */ { 0, &Ia_Invalid }, - /* 1 */ { 0, &Ia_Invalid }, - /* 2 */ { 0, &Ia_Invalid }, - /* 3 */ { 0, &Ia_Invalid }, - /* 4 */ { 0, &Ia_btw_Ew_Ib }, - /* 5 */ { 0, &Ia_btsw_Ew_Ib }, - /* 6 */ { 0, &Ia_btrw_Ew_Ib }, - /* 7 */ { 0, &Ia_btcw_Ew_Ib } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupG8EdIb[8] = { - /* 0 */ { 0, &Ia_Invalid }, - /* 1 */ { 0, &Ia_Invalid }, - /* 2 */ { 0, &Ia_Invalid }, - /* 3 */ { 0, &Ia_Invalid }, - /* 4 */ { 0, &Ia_btl_Ed_Ib }, - /* 5 */ { 0, &Ia_btsl_Ed_Ib }, - /* 6 */ { 0, &Ia_btrl_Ed_Ib }, - /* 7 */ { 0, &Ia_btcl_Ed_Ib } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupG8EqIb[8] = { - /* 0 */ { 0, &Ia_Invalid }, - /* 1 */ { 0, &Ia_Invalid }, - /* 2 */ { 0, &Ia_Invalid }, - /* 3 */ { 0, &Ia_Invalid }, - /* 4 */ { 0, &Ia_btq_Eq_Ib }, - /* 5 */ { 0, &Ia_btsq_Eq_Ib }, - /* 6 */ { 0, &Ia_btrq_Eq_Ib }, - /* 7 */ { 0, &Ia_btcq_Eq_Ib } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupG9[8] = { - /* 0 */ { 0, &Ia_Invalid }, - /* 1 */ { 0, &Ia_cmpxchg8b }, - /* 2 */ { 0, &Ia_Invalid }, - /* 3 */ { 0, &Ia_Invalid }, - /* 4 */ { 0, &Ia_Invalid }, - /* 5 */ { 0, &Ia_Invalid }, - /* 6 */ { 0, &Ia_Invalid }, - /* 7 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupG9q[8] = { - /* 0 */ { 0, &Ia_Invalid }, - /* 1 */ { 0, &Ia_cmpxchg16b }, - /* 2 */ { 0, &Ia_Invalid }, - /* 3 */ { 0, &Ia_Invalid }, - /* 4 */ { 0, &Ia_Invalid }, - /* 5 */ { 0, &Ia_Invalid }, - /* 6 */ { 0, &Ia_Invalid }, - /* 7 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupG12[8] = { - /* 0 */ { 0, &Ia_Invalid }, - /* 1 */ { 0, &Ia_Invalid }, - /* 2 */ { GRPSSE(G1202) }, - /* 3 */ { 0, &Ia_Invalid }, - /* 4 */ { GRPSSE(G1204) }, - /* 5 */ { 0, &Ia_Invalid }, - /* 6 */ { GRPSSE(G1206) }, - /* 7 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupG13[8] = { - /* 0 */ { 0, &Ia_Invalid }, - /* 1 */ { 0, &Ia_Invalid }, - /* 2 */ { GRPSSE(G1302) }, - /* 3 */ { 0, &Ia_Invalid }, - /* 4 */ { GRPSSE(G1304) }, - /* 5 */ { 0, &Ia_Invalid }, - /* 6 */ { GRPSSE(G1306) }, - /* 7 */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupG14[8] = { - /* 0 */ { 0, &Ia_Invalid }, - /* 1 */ { 0, &Ia_Invalid }, - /* 2 */ { GRPSSE(G1402) }, - /* 3 */ { GRPSSE(G1403) }, - /* 4 */ { 0, &Ia_Invalid }, - /* 5 */ { 0, &Ia_Invalid }, - /* 6 */ { GRPSSE(G1406) }, - /* 7 */ { GRPSSE(G1407) } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupModCFLUSH[2] = { - /* R */ { 0, &Ia_sfence }, - /* M */ { 0, &Ia_cflush } -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupG15[8] = { - /* 0 */ { 0, &Ia_fxsave }, - /* 1 */ { 0, &Ia_fxrstor }, - /* 2 */ { 0, &Ia_ldmxcsr }, - /* 3 */ { 0, &Ia_stmxcsr }, - /* 4 */ { 0, &Ia_Invalid }, - /* 5 */ { 0, &Ia_lfence }, - /* 6 */ { 0, &Ia_mfence }, - /* 7 */ { GRPMOD(CFLUSH) } /* SFENCE/CFLUSH */ -}; - -static BxDisasmOpcodeTable_t BxDisasmGroupG16[8] = -{ - /* 0 */ { 0, &Ia_prefetchnta }, - /* 1 */ { 0, &Ia_prefetcht0 }, - /* 2 */ { 0, &Ia_prefetcht1 }, - /* 3 */ { 0, &Ia_prefetcht2 }, - /* 4 */ { 0, &Ia_Invalid }, - /* 5 */ { 0, &Ia_Invalid }, - /* 6 */ { 0, &Ia_Invalid }, - /* 7 */ { 0, &Ia_Invalid } -}; - -/* ************************************************************************ */ -/* 3DNow! opcodes */ - -static BxDisasmOpcodeTable_t BxDisasm3DNowGroup[256] = { - // 256 entries for 3DNow opcodes_by suffix - /* 00 */ { 0, &Ia_Invalid }, - /* 01 */ { 0, &Ia_Invalid }, - /* 02 */ { 0, &Ia_Invalid }, - /* 03 */ { 0, &Ia_Invalid }, - /* 04 */ { 0, &Ia_Invalid }, - /* 05 */ { 0, &Ia_Invalid }, - /* 06 */ { 0, &Ia_Invalid }, - /* 07 */ { 0, &Ia_Invalid }, - /* 08 */ { 0, &Ia_Invalid }, - /* 09 */ { 0, &Ia_Invalid }, - /* 0A */ { 0, &Ia_Invalid }, - /* 0B */ { 0, &Ia_Invalid }, - /* 0C */ { 0, &Ia_pi2fw_Pq_Qq }, - /* 0D */ { 0, &Ia_pi2fd_Pq_Qq }, - /* 0E */ { 0, &Ia_Invalid }, - /* 0F */ { 0, &Ia_Invalid }, - /* 10 */ { 0, &Ia_Invalid }, - /* 11 */ { 0, &Ia_Invalid }, - /* 12 */ { 0, &Ia_Invalid }, - /* 13 */ { 0, &Ia_Invalid }, - /* 14 */ { 0, &Ia_Invalid }, - /* 15 */ { 0, &Ia_Invalid }, - /* 16 */ { 0, &Ia_Invalid }, - /* 17 */ { 0, &Ia_Invalid }, - /* 18 */ { 0, &Ia_Invalid }, - /* 19 */ { 0, &Ia_Invalid }, - /* 1A */ { 0, &Ia_Invalid }, - /* 1B */ { 0, &Ia_Invalid }, - /* 1C */ { 0, &Ia_pf2iw_Pq_Qq }, - /* 1D */ { 0, &Ia_pf2id_Pq_Qq }, - /* 1E */ { 0, &Ia_Invalid }, - /* 1F */ { 0, &Ia_Invalid }, - /* 20 */ { 0, &Ia_Invalid }, - /* 21 */ { 0, &Ia_Invalid }, - /* 22 */ { 0, &Ia_Invalid }, - /* 23 */ { 0, &Ia_Invalid }, - /* 24 */ { 0, &Ia_Invalid }, - /* 25 */ { 0, &Ia_Invalid }, - /* 26 */ { 0, &Ia_Invalid }, - /* 27 */ { 0, &Ia_Invalid }, - /* 28 */ { 0, &Ia_Invalid }, - /* 29 */ { 0, &Ia_Invalid }, - /* 2A */ { 0, &Ia_Invalid }, - /* 2B */ { 0, &Ia_Invalid }, - /* 2C */ { 0, &Ia_Invalid }, - /* 2D */ { 0, &Ia_Invalid }, - /* 2E */ { 0, &Ia_Invalid }, - /* 2F */ { 0, &Ia_Invalid }, - /* 30 */ { 0, &Ia_Invalid }, - /* 31 */ { 0, &Ia_Invalid }, - /* 32 */ { 0, &Ia_Invalid }, - /* 33 */ { 0, &Ia_Invalid }, - /* 34 */ { 0, &Ia_Invalid }, - /* 35 */ { 0, &Ia_Invalid }, - /* 36 */ { 0, &Ia_Invalid }, - /* 37 */ { 0, &Ia_Invalid }, - /* 38 */ { 0, &Ia_Invalid }, - /* 39 */ { 0, &Ia_Invalid }, - /* 3A */ { 0, &Ia_Invalid }, - /* 3B */ { 0, &Ia_Invalid }, - /* 3C */ { 0, &Ia_Invalid }, - /* 3D */ { 0, &Ia_Invalid }, - /* 3E */ { 0, &Ia_Invalid }, - /* 3F */ { 0, &Ia_Invalid }, - /* 40 */ { 0, &Ia_Invalid }, - /* 41 */ { 0, &Ia_Invalid }, - /* 42 */ { 0, &Ia_Invalid }, - /* 43 */ { 0, &Ia_Invalid }, - /* 44 */ { 0, &Ia_Invalid }, - /* 45 */ { 0, &Ia_Invalid }, - /* 46 */ { 0, &Ia_Invalid }, - /* 47 */ { 0, &Ia_Invalid }, - /* 48 */ { 0, &Ia_Invalid }, - /* 49 */ { 0, &Ia_Invalid }, - /* 4A */ { 0, &Ia_Invalid }, - /* 4B */ { 0, &Ia_Invalid }, - /* 4C */ { 0, &Ia_Invalid }, - /* 4D */ { 0, &Ia_Invalid }, - /* 4E */ { 0, &Ia_Invalid }, - /* 4F */ { 0, &Ia_Invalid }, - /* 50 */ { 0, &Ia_Invalid }, - /* 51 */ { 0, &Ia_Invalid }, - /* 52 */ { 0, &Ia_Invalid }, - /* 53 */ { 0, &Ia_Invalid }, - /* 54 */ { 0, &Ia_Invalid }, - /* 55 */ { 0, &Ia_Invalid }, - /* 56 */ { 0, &Ia_Invalid }, - /* 57 */ { 0, &Ia_Invalid }, - /* 58 */ { 0, &Ia_Invalid }, - /* 59 */ { 0, &Ia_Invalid }, - /* 5A */ { 0, &Ia_Invalid }, - /* 5B */ { 0, &Ia_Invalid }, - /* 5C */ { 0, &Ia_Invalid }, - /* 5D */ { 0, &Ia_Invalid }, - /* 5E */ { 0, &Ia_Invalid }, - /* 5F */ { 0, &Ia_Invalid }, - /* 60 */ { 0, &Ia_Invalid }, - /* 61 */ { 0, &Ia_Invalid }, - /* 62 */ { 0, &Ia_Invalid }, - /* 63 */ { 0, &Ia_Invalid }, - /* 64 */ { 0, &Ia_Invalid }, - /* 65 */ { 0, &Ia_Invalid }, - /* 66 */ { 0, &Ia_Invalid }, - /* 67 */ { 0, &Ia_Invalid }, - /* 68 */ { 0, &Ia_Invalid }, - /* 69 */ { 0, &Ia_Invalid }, - /* 6A */ { 0, &Ia_Invalid }, - /* 6B */ { 0, &Ia_Invalid }, - /* 6C */ { 0, &Ia_Invalid }, - /* 6D */ { 0, &Ia_Invalid }, - /* 6E */ { 0, &Ia_Invalid }, - /* 6F */ { 0, &Ia_Invalid }, - /* 70 */ { 0, &Ia_Invalid }, - /* 71 */ { 0, &Ia_Invalid }, - /* 72 */ { 0, &Ia_Invalid }, - /* 73 */ { 0, &Ia_Invalid }, - /* 74 */ { 0, &Ia_Invalid }, - /* 75 */ { 0, &Ia_Invalid }, - /* 76 */ { 0, &Ia_Invalid }, - /* 77 */ { 0, &Ia_Invalid }, - /* 78 */ { 0, &Ia_Invalid }, - /* 79 */ { 0, &Ia_Invalid }, - /* 7A */ { 0, &Ia_Invalid }, - /* 7B */ { 0, &Ia_Invalid }, - /* 7C */ { 0, &Ia_Invalid }, - /* 7D */ { 0, &Ia_Invalid }, - /* 7E */ { 0, &Ia_Invalid }, - /* 7F */ { 0, &Ia_Invalid }, - /* 80 */ { 0, &Ia_Invalid }, - /* 81 */ { 0, &Ia_Invalid }, - /* 82 */ { 0, &Ia_Invalid }, - /* 83 */ { 0, &Ia_Invalid }, - /* 84 */ { 0, &Ia_Invalid }, - /* 85 */ { 0, &Ia_Invalid }, - /* 86 */ { 0, &Ia_Invalid }, - /* 87 */ { 0, &Ia_Invalid }, - /* 88 */ { 0, &Ia_Invalid }, - /* 89 */ { 0, &Ia_Invalid }, - /* 8A */ { 0, &Ia_pfnacc_Pq_Qq }, - /* 8B */ { 0, &Ia_Invalid }, - /* 8C */ { 0, &Ia_Invalid }, - /* 8D */ { 0, &Ia_Invalid }, - /* 8E */ { 0, &Ia_pfpnacc_Pq_Qq }, - /* 8F */ { 0, &Ia_Invalid }, - /* 90 */ { 0, &Ia_pfcmpge_Pq_Qq }, - /* 91 */ { 0, &Ia_Invalid }, - /* 92 */ { 0, &Ia_Invalid }, - /* 93 */ { 0, &Ia_Invalid }, - /* 94 */ { 0, &Ia_pfmin_Pq_Qq }, - /* 95 */ { 0, &Ia_Invalid }, - /* 96 */ { 0, &Ia_pfrcp_Pq_Qq }, - /* 97 */ { 0, &Ia_pfrsqrt_Pq_Qq }, - /* 98 */ { 0, &Ia_Invalid }, - /* 99 */ { 0, &Ia_Invalid }, - /* 9A */ { 0, &Ia_pfsub_Pq_Qq }, - /* 9B */ { 0, &Ia_Invalid }, - /* 9C */ { 0, &Ia_Invalid }, - /* 9D */ { 0, &Ia_Invalid }, - /* 9E */ { 0, &Ia_pfadd_Pq_Qq }, - /* 9F */ { 0, &Ia_Invalid }, - /* A0 */ { 0, &Ia_pfcmpgt_Pq_Qq }, - /* A1 */ { 0, &Ia_Invalid }, - /* A2 */ { 0, &Ia_Invalid }, - /* A3 */ { 0, &Ia_Invalid }, - /* A4 */ { 0, &Ia_pfmax_Pq_Qq }, - /* A5 */ { 0, &Ia_Invalid }, - /* A6 */ { 0, &Ia_pfrcpit1_Pq_Qq }, - /* A7 */ { 0, &Ia_pfrsqit1_Pq_Qq }, - /* A8 */ { 0, &Ia_Invalid }, - /* A9 */ { 0, &Ia_Invalid }, - /* AA */ { 0, &Ia_pfsubr_Pq_Qq }, - /* AB */ { 0, &Ia_Invalid }, - /* AC */ { 0, &Ia_Invalid }, - /* AD */ { 0, &Ia_Invalid }, - /* AE */ { 0, &Ia_pfacc_Pq_Qq }, - /* AF */ { 0, &Ia_Invalid }, - /* B0 */ { 0, &Ia_pfcmpeq_Pq_Qq }, - /* B1 */ { 0, &Ia_Invalid }, - /* B2 */ { 0, &Ia_Invalid }, - /* B3 */ { 0, &Ia_Invalid }, - /* B4 */ { 0, &Ia_pfmul_Pq_Qq }, - /* B5 */ { 0, &Ia_Invalid }, - /* B6 */ { 0, &Ia_pfrcpit2_Pq_Qq }, - /* B7 */ { 0, &Ia_pmulhrw_Pq_Qq }, - /* B8 */ { 0, &Ia_Invalid }, - /* B9 */ { 0, &Ia_Invalid }, - /* BA */ { 0, &Ia_Invalid }, - /* BB */ { 0, &Ia_pswapd_Pq_Qq }, - /* BC */ { 0, &Ia_Invalid }, - /* BD */ { 0, &Ia_Invalid }, - /* BE */ { 0, &Ia_Invalid }, - /* BF */ { 0, &Ia_pavgb_Pq_Qq }, - /* C0 */ { 0, &Ia_Invalid }, - /* C1 */ { 0, &Ia_Invalid }, - /* C2 */ { 0, &Ia_Invalid }, - /* C3 */ { 0, &Ia_Invalid }, - /* C4 */ { 0, &Ia_Invalid }, - /* C5 */ { 0, &Ia_Invalid }, - /* C6 */ { 0, &Ia_Invalid }, - /* C7 */ { 0, &Ia_Invalid }, - /* C8 */ { 0, &Ia_Invalid }, - /* C9 */ { 0, &Ia_Invalid }, - /* CA */ { 0, &Ia_Invalid }, - /* CB */ { 0, &Ia_Invalid }, - /* CC */ { 0, &Ia_Invalid }, - /* CD */ { 0, &Ia_Invalid }, - /* CE */ { 0, &Ia_Invalid }, - /* CF */ { 0, &Ia_Invalid }, - /* D0 */ { 0, &Ia_Invalid }, - /* D1 */ { 0, &Ia_Invalid }, - /* D2 */ { 0, &Ia_Invalid }, - /* D3 */ { 0, &Ia_Invalid }, - /* D4 */ { 0, &Ia_Invalid }, - /* D5 */ { 0, &Ia_Invalid }, - /* D6 */ { 0, &Ia_Invalid }, - /* D7 */ { 0, &Ia_Invalid }, - /* D8 */ { 0, &Ia_Invalid }, - /* D9 */ { 0, &Ia_Invalid }, - /* DA */ { 0, &Ia_Invalid }, - /* DB */ { 0, &Ia_Invalid }, - /* DC */ { 0, &Ia_Invalid }, - /* DD */ { 0, &Ia_Invalid }, - /* DE */ { 0, &Ia_Invalid }, - /* DF */ { 0, &Ia_Invalid }, - /* E0 */ { 0, &Ia_Invalid }, - /* E1 */ { 0, &Ia_Invalid }, - /* E2 */ { 0, &Ia_Invalid }, - /* E3 */ { 0, &Ia_Invalid }, - /* E4 */ { 0, &Ia_Invalid }, - /* E5 */ { 0, &Ia_Invalid }, - /* E6 */ { 0, &Ia_Invalid }, - /* E7 */ { 0, &Ia_Invalid }, - /* E8 */ { 0, &Ia_Invalid }, - /* E9 */ { 0, &Ia_Invalid }, - /* EA */ { 0, &Ia_Invalid }, - /* EB */ { 0, &Ia_Invalid }, - /* EC */ { 0, &Ia_Invalid }, - /* ED */ { 0, &Ia_Invalid }, - /* EE */ { 0, &Ia_Invalid }, - /* EF */ { 0, &Ia_Invalid }, - /* F0 */ { 0, &Ia_Invalid }, - /* F1 */ { 0, &Ia_Invalid }, - /* F2 */ { 0, &Ia_Invalid }, - /* F3 */ { 0, &Ia_Invalid }, - /* F4 */ { 0, &Ia_Invalid }, - /* F5 */ { 0, &Ia_Invalid }, - /* F6 */ { 0, &Ia_Invalid }, - /* F7 */ { 0, &Ia_Invalid }, - /* F8 */ { 0, &Ia_Invalid }, - /* F9 */ { 0, &Ia_Invalid }, - /* FA */ { 0, &Ia_Invalid }, - /* FB */ { 0, &Ia_Invalid }, - /* FC */ { 0, &Ia_Invalid }, - /* FD */ { 0, &Ia_Invalid }, - /* FE */ { 0, &Ia_Invalid }, - /* FF */ { 0, &Ia_Invalid } -}; - -/* ************************************************************************ */ -/* FPU Opcodes */ - -// floating point instructions when mod!=11b. -// the following tables will be accessed like groups using the nnn (reg) field of -// the modrm byte. (the first byte is D8-DF) - - // D8 (modrm is outside 00h - BFh) (mod != 11) -static BxDisasmOpcodeTable_t BxDisasmFPGroupD8[8] = { - /* 0 */ { 0, &Ia_fadds_Md }, - /* 1 */ { 0, &Ia_fmuls_Md }, - /* 2 */ { 0, &Ia_fcoms_Md }, - /* 3 */ { 0, &Ia_fcomps_Md }, - /* 4 */ { 0, &Ia_fsubs_Md }, - /* 5 */ { 0, &Ia_fsubrs_Md }, - /* 6 */ { 0, &Ia_fdivs_Md }, - /* 7 */ { 0, &Ia_fdivrs_Md } -}; - - // D9 (modrm is outside 00h - BFh) (mod != 11) -static BxDisasmOpcodeTable_t BxDisasmFPGroupD9[8] = { - /* 0 */ { 0, &Ia_flds_Md }, - /* 1 */ { 0, &Ia_Invalid }, - /* 2 */ { 0, &Ia_fsts_Md }, - /* 3 */ { 0, &Ia_fstps_Md }, - /* 4 */ { 0, &Ia_fldenv }, - /* 5 */ { 0, &Ia_fldcw }, - /* 6 */ { 0, &Ia_fnstenv }, - /* 7 */ { 0, &Ia_fnstcw } -}; - - // DA (modrm is outside 00h - BFh) (mod != 11) -static BxDisasmOpcodeTable_t BxDisasmFPGroupDA[8] = { - /* 0 */ { 0, &Ia_fiaddl_Md }, - /* 1 */ { 0, &Ia_fimull_Md }, - /* 2 */ { 0, &Ia_ficoml_Md }, - /* 3 */ { 0, &Ia_ficompl_Md }, - /* 4 */ { 0, &Ia_fisubl_Md }, - /* 5 */ { 0, &Ia_fisubrl_Md }, - /* 6 */ { 0, &Ia_fidivl_Md }, - /* 7 */ { 0, &Ia_fidivrl_Md } -}; - - // DB (modrm is outside 00h - BFh) (mod != 11) -static BxDisasmOpcodeTable_t BxDisasmFPGroupDB[8] = { - /* 0 */ { 0, &Ia_fildl_Md }, - /* 1 */ { 0, &Ia_fisttpl_Md }, - /* 2 */ { 0, &Ia_fistl_Md }, - /* 3 */ { 0, &Ia_fistpl_Md }, - /* 4 */ { 0, &Ia_Invalid }, - /* 5 */ { 0, &Ia_fldt_Mt }, - /* 6 */ { 0, &Ia_Invalid }, - /* 7 */ { 0, &Ia_fstpt_Mt } -}; - - // DC (modrm is outside 00h - BFh) (mod != 11) -static BxDisasmOpcodeTable_t BxDisasmFPGroupDC[8] = { - /* 0 */ { 0, &Ia_faddl_Mq }, - /* 1 */ { 0, &Ia_fmull_Mq }, - /* 2 */ { 0, &Ia_fcoml_Mq }, - /* 3 */ { 0, &Ia_fcompl_Mq }, - /* 4 */ { 0, &Ia_fsubl_Mq }, - /* 5 */ { 0, &Ia_fsubrl_Mq }, - /* 6 */ { 0, &Ia_fdivl_Mq }, - /* 7 */ { 0, &Ia_fdivrl_Mq } -}; - - // DD (modrm is outside 00h - BFh) (mod != 11) -static BxDisasmOpcodeTable_t BxDisasmFPGroupDD[8] = { - /* 0 */ { 0, &Ia_fldl_Mq }, - /* 1 */ { 0, &Ia_fisttpq_Mq }, - /* 2 */ { 0, &Ia_fstl_Mq }, - /* 3 */ { 0, &Ia_fstpl_Mq }, - /* 4 */ { 0, &Ia_frstor }, - /* 5 */ { 0, &Ia_Invalid }, - /* 6 */ { 0, &Ia_fnsave }, - /* 7 */ { 0, &Ia_fnstsw } -}; - - // DE (modrm is outside 00h - BFh) (mod != 11) -static BxDisasmOpcodeTable_t BxDisasmFPGroupDE[8] = { - /* 0 */ { 0, &Ia_fiadds_Mw }, - /* 1 */ { 0, &Ia_fimuls_Mw }, - /* 2 */ { 0, &Ia_ficoms_Mw }, - /* 3 */ { 0, &Ia_ficomps_Mw }, - /* 4 */ { 0, &Ia_fisubs_Mw }, - /* 5 */ { 0, &Ia_fisubrs_Mw }, - /* 6 */ { 0, &Ia_fidivs_Mw }, - /* 7 */ { 0, &Ia_fidivrs_Mw } -}; - - // DF (modrm is outside 00h - BFh) (mod != 11) -static BxDisasmOpcodeTable_t BxDisasmFPGroupDF[8] = { - /* 0 */ { 0, &Ia_filds_Mw }, - /* 1 */ { 0, &Ia_fisttps_Mw }, - /* 2 */ { 0, &Ia_fists_Mw }, - /* 3 */ { 0, &Ia_fistps_Mw }, - /* 4 */ { 0, &Ia_fbldt_Mt }, - /* 5 */ { 0, &Ia_fildq_Mq }, - /* 6 */ { 0, &Ia_fbstpt_Mt }, - /* 7 */ { 0, &Ia_fistpq_Mq } -}; - -// 512 entries for second byte of floating point instructions. (when mod==11b) -static BxDisasmOpcodeTable_t BxDisasmOpcodeInfoFP[512] = { - // D8 (modrm is outside 00h - BFh) (mod == 11) - /* D8 C0 */ { 0, &Ia_fadd_ST0_STi }, - /* D8 C1 */ { 0, &Ia_fadd_ST0_STi }, - /* D8 C2 */ { 0, &Ia_fadd_ST0_STi }, - /* D8 C3 */ { 0, &Ia_fadd_ST0_STi }, - /* D8 C4 */ { 0, &Ia_fadd_ST0_STi }, - /* D8 C5 */ { 0, &Ia_fadd_ST0_STi }, - /* D8 C6 */ { 0, &Ia_fadd_ST0_STi }, - /* D8 C7 */ { 0, &Ia_fadd_ST0_STi }, - /* D8 C8 */ { 0, &Ia_fmul_ST0_STi }, - /* D8 C9 */ { 0, &Ia_fmul_ST0_STi }, - /* D8 CA */ { 0, &Ia_fmul_ST0_STi }, - /* D8 CB */ { 0, &Ia_fmul_ST0_STi }, - /* D8 CC */ { 0, &Ia_fmul_ST0_STi }, - /* D8 CD */ { 0, &Ia_fmul_ST0_STi }, - /* D8 CE */ { 0, &Ia_fmul_ST0_STi }, - /* D8 CF */ { 0, &Ia_fmul_ST0_STi }, - /* D8 D0 */ { 0, &Ia_fcom_STi }, - /* D8 D1 */ { 0, &Ia_fcom_STi }, - /* D8 D2 */ { 0, &Ia_fcom_STi }, - /* D8 D3 */ { 0, &Ia_fcom_STi }, - /* D8 D4 */ { 0, &Ia_fcom_STi }, - /* D8 D5 */ { 0, &Ia_fcom_STi }, - /* D8 D6 */ { 0, &Ia_fcom_STi }, - /* D8 D7 */ { 0, &Ia_fcom_STi }, - /* D8 D8 */ { 0, &Ia_fcomp_STi }, - /* D8 D9 */ { 0, &Ia_fcomp_STi }, - /* D8 DA */ { 0, &Ia_fcomp_STi }, - /* D8 DB */ { 0, &Ia_fcomp_STi }, - /* D8 DC */ { 0, &Ia_fcomp_STi }, - /* D8 DD */ { 0, &Ia_fcomp_STi }, - /* D8 DE */ { 0, &Ia_fcomp_STi }, - /* D8 DF */ { 0, &Ia_fcomp_STi }, - /* D8 E0 */ { 0, &Ia_fsub_ST0_STi }, - /* D8 E1 */ { 0, &Ia_fsub_ST0_STi }, - /* D8 E2 */ { 0, &Ia_fsub_ST0_STi }, - /* D8 E3 */ { 0, &Ia_fsub_ST0_STi }, - /* D8 E4 */ { 0, &Ia_fsub_ST0_STi }, - /* D8 E5 */ { 0, &Ia_fsub_ST0_STi }, - /* D8 E6 */ { 0, &Ia_fsub_ST0_STi }, - /* D8 E7 */ { 0, &Ia_fsub_ST0_STi }, - /* D8 E8 */ { 0, &Ia_fsubr_ST0_STi }, - /* D8 E9 */ { 0, &Ia_fsubr_ST0_STi }, - /* D8 EA */ { 0, &Ia_fsubr_ST0_STi }, - /* D8 EB */ { 0, &Ia_fsubr_ST0_STi }, - /* D8 EC */ { 0, &Ia_fsubr_ST0_STi }, - /* D8 ED */ { 0, &Ia_fsubr_ST0_STi }, - /* D8 EE */ { 0, &Ia_fsubr_ST0_STi }, - /* D8 EF */ { 0, &Ia_fsubr_ST0_STi }, - /* D8 F0 */ { 0, &Ia_fdiv_ST0_STi }, - /* D8 F1 */ { 0, &Ia_fdiv_ST0_STi }, - /* D8 F2 */ { 0, &Ia_fdiv_ST0_STi }, - /* D8 F3 */ { 0, &Ia_fdiv_ST0_STi }, - /* D8 F4 */ { 0, &Ia_fdiv_ST0_STi }, - /* D8 F5 */ { 0, &Ia_fdiv_ST0_STi }, - /* D8 F6 */ { 0, &Ia_fdiv_ST0_STi }, - /* D8 F7 */ { 0, &Ia_fdiv_ST0_STi }, - /* D8 F8 */ { 0, &Ia_fdivr_ST0_STi }, - /* D8 F9 */ { 0, &Ia_fdivr_ST0_STi }, - /* D8 FA */ { 0, &Ia_fdivr_ST0_STi }, - /* D8 FB */ { 0, &Ia_fdivr_ST0_STi }, - /* D8 FC */ { 0, &Ia_fdivr_ST0_STi }, - /* D8 FD */ { 0, &Ia_fdivr_ST0_STi }, - /* D8 FE */ { 0, &Ia_fdivr_ST0_STi }, - /* D8 FF */ { 0, &Ia_fdivr_ST0_STi }, - - // D9 (modrm is outside 00h - BFh) (mod == 11) - /* D9 C0 */ { 0, &Ia_fld_STi }, - /* D9 C1 */ { 0, &Ia_fld_STi }, - /* D9 C2 */ { 0, &Ia_fld_STi }, - /* D9 C3 */ { 0, &Ia_fld_STi }, - /* D9 C4 */ { 0, &Ia_fld_STi }, - /* D9 C5 */ { 0, &Ia_fld_STi }, - /* D9 C6 */ { 0, &Ia_fld_STi }, - /* D9 C7 */ { 0, &Ia_fld_STi }, - /* D9 C8 */ { 0, &Ia_fxch }, - /* D9 C9 */ { 0, &Ia_fxch }, - /* D9 CA */ { 0, &Ia_fxch }, - /* D9 CB */ { 0, &Ia_fxch }, - /* D9 CC */ { 0, &Ia_fxch }, - /* D9 CD */ { 0, &Ia_fxch }, - /* D9 CE */ { 0, &Ia_fxch }, - /* D9 CF */ { 0, &Ia_fxch }, - /* D9 D0 */ { 0, &Ia_fnop }, - /* D9 D1 */ { 0, &Ia_Invalid }, - /* D9 D2 */ { 0, &Ia_Invalid }, - /* D9 D3 */ { 0, &Ia_Invalid }, - /* D9 D4 */ { 0, &Ia_Invalid }, - /* D9 D5 */ { 0, &Ia_Invalid }, - /* D9 D6 */ { 0, &Ia_Invalid }, - /* D9 D7 */ { 0, &Ia_Invalid }, - /* D9 D8 */ { 0, &Ia_Invalid }, - /* D9 D9 */ { 0, &Ia_Invalid }, - /* D9 DA */ { 0, &Ia_Invalid }, - /* D9 DB */ { 0, &Ia_Invalid }, - /* D9 DC */ { 0, &Ia_Invalid }, - /* D9 DD */ { 0, &Ia_Invalid }, - /* D9 DE */ { 0, &Ia_Invalid }, - /* D9 DF */ { 0, &Ia_Invalid }, - /* D9 E0 */ { 0, &Ia_fchs }, - /* D9 E1 */ { 0, &Ia_fabs }, - /* D9 E2 */ { 0, &Ia_Invalid }, - /* D9 E3 */ { 0, &Ia_Invalid }, - /* D9 E4 */ { 0, &Ia_ftst }, - /* D9 E5 */ { 0, &Ia_fxam }, - /* D9 E6 */ { 0, &Ia_Invalid }, - /* D9 E7 */ { 0, &Ia_Invalid }, - /* D9 E8 */ { 0, &Ia_fld1 }, - /* D9 E9 */ { 0, &Ia_fldl2t }, - /* D9 EA */ { 0, &Ia_fldl2e }, - /* D9 EB */ { 0, &Ia_fldpi }, - /* D9 EC */ { 0, &Ia_fldlg2 }, - /* D9 ED */ { 0, &Ia_fldln2 }, - /* D9 EE */ { 0, &Ia_fldz }, - /* D9 EF */ { 0, &Ia_Invalid }, - /* D9 F0 */ { 0, &Ia_f2xm1 }, - /* D9 F1 */ { 0, &Ia_fyl2x }, - /* D9 F2 */ { 0, &Ia_fptan }, - /* D9 F3 */ { 0, &Ia_fpatan }, - /* D9 F4 */ { 0, &Ia_fxtract }, - /* D9 F5 */ { 0, &Ia_fprem1 }, - /* D9 F6 */ { 0, &Ia_fdecstp }, - /* D9 F7 */ { 0, &Ia_fincstp }, - /* D9 F8 */ { 0, &Ia_fprem }, - /* D9 F9 */ { 0, &Ia_fyl2xp1 }, - /* D9 FA */ { 0, &Ia_fsqrt }, - /* D9 FB */ { 0, &Ia_fsincos }, - /* D9 FC */ { 0, &Ia_frndint }, - /* D9 FD */ { 0, &Ia_fscale }, - /* D9 FE */ { 0, &Ia_fsin }, - /* D9 FF */ { 0, &Ia_fcos }, - - // DA (modrm is outside 00h - BFh) (mod == 11) - /* DA C0 */ { 0, &Ia_fcmovb_ST0_STi }, - /* DA C1 */ { 0, &Ia_fcmovb_ST0_STi }, - /* DA C2 */ { 0, &Ia_fcmovb_ST0_STi }, - /* DA C3 */ { 0, &Ia_fcmovb_ST0_STi }, - /* DA C4 */ { 0, &Ia_fcmovb_ST0_STi }, - /* DA C5 */ { 0, &Ia_fcmovb_ST0_STi }, - /* DA C6 */ { 0, &Ia_fcmovb_ST0_STi }, - /* DA C7 */ { 0, &Ia_fcmovb_ST0_STi }, - /* DA C8 */ { 0, &Ia_fcmove_ST0_STi }, - /* DA C9 */ { 0, &Ia_fcmove_ST0_STi }, - /* DA CA */ { 0, &Ia_fcmove_ST0_STi }, - /* DA CB */ { 0, &Ia_fcmove_ST0_STi }, - /* DA CC */ { 0, &Ia_fcmove_ST0_STi }, - /* DA CD */ { 0, &Ia_fcmove_ST0_STi }, - /* DA CE */ { 0, &Ia_fcmove_ST0_STi }, - /* DA CF */ { 0, &Ia_fcmove_ST0_STi }, - /* DA D0 */ { 0, &Ia_fcmovbe_ST0_STi }, - /* DA D1 */ { 0, &Ia_fcmovbe_ST0_STi }, - /* DA D2 */ { 0, &Ia_fcmovbe_ST0_STi }, - /* DA D3 */ { 0, &Ia_fcmovbe_ST0_STi }, - /* DA D4 */ { 0, &Ia_fcmovbe_ST0_STi }, - /* DA D5 */ { 0, &Ia_fcmovbe_ST0_STi }, - /* DA D6 */ { 0, &Ia_fcmovbe_ST0_STi }, - /* DA D7 */ { 0, &Ia_fcmovbe_ST0_STi }, - /* DA D8 */ { 0, &Ia_fcmovu_ST0_STi }, - /* DA D9 */ { 0, &Ia_fcmovu_ST0_STi }, - /* DA DA */ { 0, &Ia_fcmovu_ST0_STi }, - /* DA DB */ { 0, &Ia_fcmovu_ST0_STi }, - /* DA DC */ { 0, &Ia_fcmovu_ST0_STi }, - /* DA DD */ { 0, &Ia_fcmovu_ST0_STi }, - /* DA DE */ { 0, &Ia_fcmovu_ST0_STi }, - /* DA DF */ { 0, &Ia_fcmovu_ST0_STi }, - /* DA E0 */ { 0, &Ia_Invalid }, - /* DA E1 */ { 0, &Ia_Invalid }, - /* DA E2 */ { 0, &Ia_Invalid }, - /* DA E3 */ { 0, &Ia_Invalid }, - /* DA E4 */ { 0, &Ia_Invalid }, - /* DA E5 */ { 0, &Ia_Invalid }, - /* DA E6 */ { 0, &Ia_Invalid }, - /* DA E7 */ { 0, &Ia_Invalid }, - /* DA E8 */ { 0, &Ia_Invalid }, - /* DA E9 */ { 0, &Ia_fucompp }, - /* DA EA */ { 0, &Ia_Invalid }, - /* DA EB */ { 0, &Ia_Invalid }, - /* DA EC */ { 0, &Ia_Invalid }, - /* DA ED */ { 0, &Ia_Invalid }, - /* DA EE */ { 0, &Ia_Invalid }, - /* DA EF */ { 0, &Ia_Invalid }, - /* DA F0 */ { 0, &Ia_Invalid }, - /* DA F1 */ { 0, &Ia_Invalid }, - /* DA F2 */ { 0, &Ia_Invalid }, - /* DA F3 */ { 0, &Ia_Invalid }, - /* DA F4 */ { 0, &Ia_Invalid }, - /* DA F5 */ { 0, &Ia_Invalid }, - /* DA F6 */ { 0, &Ia_Invalid }, - /* DA F7 */ { 0, &Ia_Invalid }, - /* DA F8 */ { 0, &Ia_Invalid }, - /* DA F9 */ { 0, &Ia_Invalid }, - /* DA FA */ { 0, &Ia_Invalid }, - /* DA FB */ { 0, &Ia_Invalid }, - /* DA FC */ { 0, &Ia_Invalid }, - /* DA FD */ { 0, &Ia_Invalid }, - /* DA FE */ { 0, &Ia_Invalid }, - /* DA FF */ { 0, &Ia_Invalid }, - - // DB (modrm is outside 00h - BFh) (mod == 11) - /* DB C0 */ { 0, &Ia_fcmovnb_ST0_STi }, - /* DB C1 */ { 0, &Ia_fcmovnb_ST0_STi }, - /* DB C2 */ { 0, &Ia_fcmovnb_ST0_STi }, - /* DB C3 */ { 0, &Ia_fcmovnb_ST0_STi }, - /* DB C4 */ { 0, &Ia_fcmovnb_ST0_STi }, - /* DB C5 */ { 0, &Ia_fcmovnb_ST0_STi }, - /* DB C6 */ { 0, &Ia_fcmovnb_ST0_STi }, - /* DB C7 */ { 0, &Ia_fcmovnb_ST0_STi }, - /* DB C8 */ { 0, &Ia_fcmovne_ST0_STi }, - /* DB C9 */ { 0, &Ia_fcmovne_ST0_STi }, - /* DB CA */ { 0, &Ia_fcmovne_ST0_STi }, - /* DB CB */ { 0, &Ia_fcmovne_ST0_STi }, - /* DB CC */ { 0, &Ia_fcmovne_ST0_STi }, - /* DB CD */ { 0, &Ia_fcmovne_ST0_STi }, - /* DB CE */ { 0, &Ia_fcmovne_ST0_STi }, - /* DB CF */ { 0, &Ia_fcmovne_ST0_STi }, - /* DB D0 */ { 0, &Ia_fcmovnbe_ST0_STi }, - /* DB D1 */ { 0, &Ia_fcmovnbe_ST0_STi }, - /* DB D2 */ { 0, &Ia_fcmovnbe_ST0_STi }, - /* DB D3 */ { 0, &Ia_fcmovnbe_ST0_STi }, - /* DB D4 */ { 0, &Ia_fcmovnbe_ST0_STi }, - /* DB D5 */ { 0, &Ia_fcmovnbe_ST0_STi }, - /* DB D6 */ { 0, &Ia_fcmovnbe_ST0_STi }, - /* DB D7 */ { 0, &Ia_fcmovnbe_ST0_STi }, - /* DB D8 */ { 0, &Ia_fcmovnu_ST0_STi }, - /* DB D9 */ { 0, &Ia_fcmovnu_ST0_STi }, - /* DB DA */ { 0, &Ia_fcmovnu_ST0_STi }, - /* DB DB */ { 0, &Ia_fcmovnu_ST0_STi }, - /* DB DC */ { 0, &Ia_fcmovnu_ST0_STi }, - /* DB DD */ { 0, &Ia_fcmovnu_ST0_STi }, - /* DB DE */ { 0, &Ia_fcmovnu_ST0_STi }, - /* DB DF */ { 0, &Ia_fcmovnu_ST0_STi }, - /* DB E0 */ { 0, &Ia_feni }, - /* DB E1 */ { 0, &Ia_fdisi }, - /* DB E2 */ { 0, &Ia_fnclex }, - /* DB E3 */ { 0, &Ia_fninit }, - /* DB E4 */ { 0, &Ia_fsetpm }, - /* DB E5 */ { 0, &Ia_Invalid }, - /* DB E6 */ { 0, &Ia_Invalid }, - /* DB E7 */ { 0, &Ia_Invalid }, - /* DB E8 */ { 0, &Ia_fucomi_ST0_STi }, - /* DB E9 */ { 0, &Ia_fucomi_ST0_STi }, - /* DB EA */ { 0, &Ia_fucomi_ST0_STi }, - /* DB EB */ { 0, &Ia_fucomi_ST0_STi }, - /* DB EC */ { 0, &Ia_fucomi_ST0_STi }, - /* DB ED */ { 0, &Ia_fucomi_ST0_STi }, - /* DB EE */ { 0, &Ia_fucomi_ST0_STi }, - /* DB EF */ { 0, &Ia_fucomi_ST0_STi }, - /* DB F0 */ { 0, &Ia_fcomi_ST0_STi }, - /* DB F1 */ { 0, &Ia_fcomi_ST0_STi }, - /* DB F2 */ { 0, &Ia_fcomi_ST0_STi }, - /* DB F3 */ { 0, &Ia_fcomi_ST0_STi }, - /* DB F4 */ { 0, &Ia_fcomi_ST0_STi }, - /* DB F5 */ { 0, &Ia_fcomi_ST0_STi }, - /* DB F6 */ { 0, &Ia_fcomi_ST0_STi }, - /* DB F7 */ { 0, &Ia_fcomi_ST0_STi }, - /* DB F8 */ { 0, &Ia_Invalid }, - /* DB F9 */ { 0, &Ia_Invalid }, - /* DB FA */ { 0, &Ia_Invalid }, - /* DB FB */ { 0, &Ia_Invalid }, - /* DB FC */ { 0, &Ia_Invalid }, - /* DB FD */ { 0, &Ia_Invalid }, - /* DB FE */ { 0, &Ia_Invalid }, - /* DB FF */ { 0, &Ia_Invalid }, - - // DC (modrm is outside 00h - BFh) (mod == 11) - /* DC C0 */ { 0, &Ia_fadd_STi_ST0 }, - /* DC C1 */ { 0, &Ia_fadd_STi_ST0 }, - /* DC C2 */ { 0, &Ia_fadd_STi_ST0 }, - /* DC C3 */ { 0, &Ia_fadd_STi_ST0 }, - /* DC C4 */ { 0, &Ia_fadd_STi_ST0 }, - /* DC C5 */ { 0, &Ia_fadd_STi_ST0 }, - /* DC C6 */ { 0, &Ia_fadd_STi_ST0 }, - /* DC C7 */ { 0, &Ia_fadd_STi_ST0 }, - /* DC C8 */ { 0, &Ia_fmul_STi_ST0 }, - /* DC C9 */ { 0, &Ia_fmul_STi_ST0 }, - /* DC CA */ { 0, &Ia_fmul_STi_ST0 }, - /* DC CB */ { 0, &Ia_fmul_STi_ST0 }, - /* DC CC */ { 0, &Ia_fmul_STi_ST0 }, - /* DC CD */ { 0, &Ia_fmul_STi_ST0 }, - /* DC CE */ { 0, &Ia_fmul_STi_ST0 }, - /* DC CF */ { 0, &Ia_fmul_STi_ST0 }, - /* DC D0 */ { 0, &Ia_Invalid }, - /* DC D1 */ { 0, &Ia_Invalid }, - /* DC D2 */ { 0, &Ia_Invalid }, - /* DC D3 */ { 0, &Ia_Invalid }, - /* DC D4 */ { 0, &Ia_Invalid }, - /* DC D5 */ { 0, &Ia_Invalid }, - /* DC D6 */ { 0, &Ia_Invalid }, - /* DC D7 */ { 0, &Ia_Invalid }, - /* DC D8 */ { 0, &Ia_Invalid }, - /* DC D9 */ { 0, &Ia_Invalid }, - /* DC DA */ { 0, &Ia_Invalid }, - /* DC DB */ { 0, &Ia_Invalid }, - /* DC DC */ { 0, &Ia_Invalid }, - /* DC DD */ { 0, &Ia_Invalid }, - /* DC DE */ { 0, &Ia_Invalid }, - /* DC DF */ { 0, &Ia_Invalid }, - /* DC E0 */ { 0, &Ia_fsubr_STi_ST0 }, - /* DC E1 */ { 0, &Ia_fsubr_STi_ST0 }, - /* DC E2 */ { 0, &Ia_fsubr_STi_ST0 }, - /* DC E3 */ { 0, &Ia_fsubr_STi_ST0 }, - /* DC E4 */ { 0, &Ia_fsubr_STi_ST0 }, - /* DC E5 */ { 0, &Ia_fsubr_STi_ST0 }, - /* DC E6 */ { 0, &Ia_fsubr_STi_ST0 }, - /* DC E7 */ { 0, &Ia_fsubr_STi_ST0 }, - /* DC E8 */ { 0, &Ia_fsub_STi_ST0 }, - /* DC E9 */ { 0, &Ia_fsub_STi_ST0 }, - /* DC EA */ { 0, &Ia_fsub_STi_ST0 }, - /* DC EB */ { 0, &Ia_fsub_STi_ST0 }, - /* DC EC */ { 0, &Ia_fsub_STi_ST0 }, - /* DC ED */ { 0, &Ia_fsub_STi_ST0 }, - /* DC EE */ { 0, &Ia_fsub_STi_ST0 }, - /* DC EF */ { 0, &Ia_fsub_STi_ST0 }, - /* DC F0 */ { 0, &Ia_fdivr_STi_ST0 }, - /* DC F1 */ { 0, &Ia_fdivr_STi_ST0 }, - /* DC F2 */ { 0, &Ia_fdivr_STi_ST0 }, - /* DC F3 */ { 0, &Ia_fdivr_STi_ST0 }, - /* DC F4 */ { 0, &Ia_fdivr_STi_ST0 }, - /* DC F5 */ { 0, &Ia_fdivr_STi_ST0 }, - /* DC F6 */ { 0, &Ia_fdivr_STi_ST0 }, - /* DC F7 */ { 0, &Ia_fdivr_STi_ST0 }, - /* DC F8 */ { 0, &Ia_fdiv_STi_ST0 }, - /* DC F9 */ { 0, &Ia_fdiv_STi_ST0 }, - /* DC FA */ { 0, &Ia_fdiv_STi_ST0 }, - /* DC FB */ { 0, &Ia_fdiv_STi_ST0 }, - /* DC FC */ { 0, &Ia_fdiv_STi_ST0 }, - /* DC FD */ { 0, &Ia_fdiv_STi_ST0 }, - /* DC FE */ { 0, &Ia_fdiv_STi_ST0 }, - /* DC FF */ { 0, &Ia_fdiv_STi_ST0 }, - - // DD (modrm is outside 00h - BFh) (mod == 11) - /* DD C0 */ { 0, &Ia_ffree_STi }, - /* DD C1 */ { 0, &Ia_ffree_STi }, - /* DD C2 */ { 0, &Ia_ffree_STi }, - /* DD C3 */ { 0, &Ia_ffree_STi }, - /* DD C4 */ { 0, &Ia_ffree_STi }, - /* DD C5 */ { 0, &Ia_ffree_STi }, - /* DD C6 */ { 0, &Ia_ffree_STi }, - /* DD C7 */ { 0, &Ia_ffree_STi }, - /* DD C8 */ { 0, &Ia_Invalid }, - /* DD C9 */ { 0, &Ia_Invalid }, - /* DD CA */ { 0, &Ia_Invalid }, - /* DD CB */ { 0, &Ia_Invalid }, - /* DD CC */ { 0, &Ia_Invalid }, - /* DD CD */ { 0, &Ia_Invalid }, - /* DD CE */ { 0, &Ia_Invalid }, - /* DD CF */ { 0, &Ia_Invalid }, - /* DD D0 */ { 0, &Ia_fst_STi }, - /* DD D1 */ { 0, &Ia_fst_STi }, - /* DD D2 */ { 0, &Ia_fst_STi }, - /* DD D3 */ { 0, &Ia_fst_STi }, - /* DD D4 */ { 0, &Ia_fst_STi }, - /* DD D5 */ { 0, &Ia_fst_STi }, - /* DD D6 */ { 0, &Ia_fst_STi }, - /* DD D7 */ { 0, &Ia_fst_STi }, - /* DD D8 */ { 0, &Ia_fstp_STi }, - /* DD D9 */ { 0, &Ia_fstp_STi }, - /* DD DA */ { 0, &Ia_fstp_STi }, - /* DD DB */ { 0, &Ia_fstp_STi }, - /* DD DC */ { 0, &Ia_fstp_STi }, - /* DD DD */ { 0, &Ia_fstp_STi }, - /* DD DE */ { 0, &Ia_fstp_STi }, - /* DD DF */ { 0, &Ia_fstp_STi }, - /* DD E0 */ { 0, &Ia_fucom_STi }, - /* DD E1 */ { 0, &Ia_fucom_STi }, - /* DD E2 */ { 0, &Ia_fucom_STi }, - /* DD E3 */ { 0, &Ia_fucom_STi }, - /* DD E4 */ { 0, &Ia_fucom_STi }, - /* DD E5 */ { 0, &Ia_fucom_STi }, - /* DD E6 */ { 0, &Ia_fucom_STi }, - /* DD E7 */ { 0, &Ia_fucom_STi }, - /* DD E8 */ { 0, &Ia_fucomp_STi }, - /* DD E9 */ { 0, &Ia_fucomp_STi }, - /* DD EA */ { 0, &Ia_fucomp_STi }, - /* DD EB */ { 0, &Ia_fucomp_STi }, - /* DD EC */ { 0, &Ia_fucomp_STi }, - /* DD ED */ { 0, &Ia_fucomp_STi }, - /* DD EE */ { 0, &Ia_fucomp_STi }, - /* DD EF */ { 0, &Ia_fucomp_STi }, - /* DD F0 */ { 0, &Ia_Invalid }, - /* DD F1 */ { 0, &Ia_Invalid }, - /* DD F2 */ { 0, &Ia_Invalid }, - /* DD F3 */ { 0, &Ia_Invalid }, - /* DD F4 */ { 0, &Ia_Invalid }, - /* DD F5 */ { 0, &Ia_Invalid }, - /* DD F6 */ { 0, &Ia_Invalid }, - /* DD F7 */ { 0, &Ia_Invalid }, - /* DD F8 */ { 0, &Ia_Invalid }, - /* DD F9 */ { 0, &Ia_Invalid }, - /* DD FA */ { 0, &Ia_Invalid }, - /* DD FB */ { 0, &Ia_Invalid }, - /* DD FC */ { 0, &Ia_Invalid }, - /* DD FD */ { 0, &Ia_Invalid }, - /* DD FE */ { 0, &Ia_Invalid }, - /* DD FF */ { 0, &Ia_Invalid }, - - // DE (modrm is outside 00h - BFh) (mod == 11) - /* DE C0 */ { 0, &Ia_faddp_STi_ST0 }, - /* DE C1 */ { 0, &Ia_faddp_STi_ST0 }, - /* DE C2 */ { 0, &Ia_faddp_STi_ST0 }, - /* DE C3 */ { 0, &Ia_faddp_STi_ST0 }, - /* DE C4 */ { 0, &Ia_faddp_STi_ST0 }, - /* DE C5 */ { 0, &Ia_faddp_STi_ST0 }, - /* DE C6 */ { 0, &Ia_faddp_STi_ST0 }, - /* DE C7 */ { 0, &Ia_faddp_STi_ST0 }, - /* DE C8 */ { 0, &Ia_fmulp_STi_ST0 }, - /* DE C9 */ { 0, &Ia_fmulp_STi_ST0 }, - /* DE CA */ { 0, &Ia_fmulp_STi_ST0 }, - /* DE CB */ { 0, &Ia_fmulp_STi_ST0 }, - /* DE CC */ { 0, &Ia_fmulp_STi_ST0 }, - /* DE CD */ { 0, &Ia_fmulp_STi_ST0 }, - /* DE CE */ { 0, &Ia_fmulp_STi_ST0 }, - /* DE CF */ { 0, &Ia_fmulp_STi_ST0 }, - /* DE D0 */ { 0, &Ia_Invalid }, - /* DE D1 */ { 0, &Ia_Invalid }, - /* DE D2 */ { 0, &Ia_Invalid }, - /* DE D3 */ { 0, &Ia_Invalid }, - /* DE D4 */ { 0, &Ia_Invalid }, - /* DE D5 */ { 0, &Ia_Invalid }, - /* DE D6 */ { 0, &Ia_Invalid }, - /* DE D7 */ { 0, &Ia_Invalid }, - /* DE D8 */ { 0, &Ia_Invalid }, - /* DE D9 */ { 0, &Ia_fcompp }, - /* DE DA */ { 0, &Ia_Invalid }, - /* DE DB */ { 0, &Ia_Invalid }, - /* DE DC */ { 0, &Ia_Invalid }, - /* DE DD */ { 0, &Ia_Invalid }, - /* DE DE */ { 0, &Ia_Invalid }, - /* DE DF */ { 0, &Ia_Invalid }, - /* DE E0 */ { 0, &Ia_fsubrp_STi_ST0 }, - /* DE E1 */ { 0, &Ia_fsubrp_STi_ST0 }, - /* DE E2 */ { 0, &Ia_fsubrp_STi_ST0 }, - /* DE E3 */ { 0, &Ia_fsubrp_STi_ST0 }, - /* DE E4 */ { 0, &Ia_fsubrp_STi_ST0 }, - /* DE E5 */ { 0, &Ia_fsubrp_STi_ST0 }, - /* DE E6 */ { 0, &Ia_fsubrp_STi_ST0 }, - /* DE E7 */ { 0, &Ia_fsubrp_STi_ST0 }, - /* DE E8 */ { 0, &Ia_fsubp_STi_ST0 }, - /* DE E9 */ { 0, &Ia_fsubp_STi_ST0 }, - /* DE EA */ { 0, &Ia_fsubp_STi_ST0 }, - /* DE EB */ { 0, &Ia_fsubp_STi_ST0 }, - /* DE EC */ { 0, &Ia_fsubp_STi_ST0 }, - /* DE ED */ { 0, &Ia_fsubp_STi_ST0 }, - /* DE EE */ { 0, &Ia_fsubp_STi_ST0 }, - /* DE EF */ { 0, &Ia_fsubp_STi_ST0 }, - /* DE F0 */ { 0, &Ia_fdivrp_STi_ST0 }, - /* DE F1 */ { 0, &Ia_fdivrp_STi_ST0 }, - /* DE F2 */ { 0, &Ia_fdivrp_STi_ST0 }, - /* DE F3 */ { 0, &Ia_fdivrp_STi_ST0 }, - /* DE F4 */ { 0, &Ia_fdivrp_STi_ST0 }, - /* DE F5 */ { 0, &Ia_fdivrp_STi_ST0 }, - /* DE F6 */ { 0, &Ia_fdivrp_STi_ST0 }, - /* DE F7 */ { 0, &Ia_fdivrp_STi_ST0 }, - /* DE F8 */ { 0, &Ia_fdivp_STi_ST0 }, - /* DE F9 */ { 0, &Ia_fdivp_STi_ST0 }, - /* DE FA */ { 0, &Ia_fdivp_STi_ST0 }, - /* DE FB */ { 0, &Ia_fdivp_STi_ST0 }, - /* DE FC */ { 0, &Ia_fdivp_STi_ST0 }, - /* DE FD */ { 0, &Ia_fdivp_STi_ST0 }, - /* DE FE */ { 0, &Ia_fdivp_STi_ST0 }, - /* DE FF */ { 0, &Ia_fdivp_STi_ST0 }, - - // DF (modrm is outside 00h - BFh) (mod == 11) - /* DF C0 */ { 0, &Ia_ffreep_STi }, // 287 compatibility opcode - /* DF C1 */ { 0, &Ia_ffreep_STi }, - /* DF C2 */ { 0, &Ia_ffreep_STi }, - /* DF C3 */ { 0, &Ia_ffreep_STi }, - /* DF C4 */ { 0, &Ia_ffreep_STi }, - /* DF C5 */ { 0, &Ia_ffreep_STi }, - /* DF C6 */ { 0, &Ia_ffreep_STi }, - /* DF C7 */ { 0, &Ia_ffreep_STi }, - /* DF C8 */ { 0, &Ia_Invalid }, - /* DF C9 */ { 0, &Ia_Invalid }, - /* DF CA */ { 0, &Ia_Invalid }, - /* DF CB */ { 0, &Ia_Invalid }, - /* DF CC */ { 0, &Ia_Invalid }, - /* DF CD */ { 0, &Ia_Invalid }, - /* DF CE */ { 0, &Ia_Invalid }, - /* DF CF */ { 0, &Ia_Invalid }, - /* DF D0 */ { 0, &Ia_Invalid }, - /* DF D1 */ { 0, &Ia_Invalid }, - /* DF D2 */ { 0, &Ia_Invalid }, - /* DF D3 */ { 0, &Ia_Invalid }, - /* DF D4 */ { 0, &Ia_Invalid }, - /* DF D5 */ { 0, &Ia_Invalid }, - /* DF D6 */ { 0, &Ia_Invalid }, - /* DF D7 */ { 0, &Ia_Invalid }, - /* DF D8 */ { 0, &Ia_Invalid }, - /* DF D9 */ { 0, &Ia_Invalid }, - /* DF DA */ { 0, &Ia_Invalid }, - /* DF DB */ { 0, &Ia_Invalid }, - /* DF DC */ { 0, &Ia_Invalid }, - /* DF DD */ { 0, &Ia_Invalid }, - /* DF DE */ { 0, &Ia_Invalid }, - /* DF DF */ { 0, &Ia_Invalid }, - /* DF E0 */ { 0, &Ia_fnstsw_AX }, - /* DF E1 */ { 0, &Ia_Invalid }, - /* DF E2 */ { 0, &Ia_Invalid }, - /* DF E3 */ { 0, &Ia_Invalid }, - /* DF E4 */ { 0, &Ia_Invalid }, - /* DF E5 */ { 0, &Ia_Invalid }, - /* DF E6 */ { 0, &Ia_Invalid }, - /* DF E7 */ { 0, &Ia_Invalid }, - /* DF E8 */ { 0, &Ia_fucomip_ST0_STi }, - /* DF E9 */ { 0, &Ia_fucomip_ST0_STi }, - /* DF EA */ { 0, &Ia_fucomip_ST0_STi }, - /* DF EB */ { 0, &Ia_fucomip_ST0_STi }, - /* DF EC */ { 0, &Ia_fucomip_ST0_STi }, - /* DF ED */ { 0, &Ia_fucomip_ST0_STi }, - /* DF EE */ { 0, &Ia_fucomip_ST0_STi }, - /* DF EF */ { 0, &Ia_fucomip_ST0_STi }, - /* DF F0 */ { 0, &Ia_fcomip_ST0_STi }, - /* DF F1 */ { 0, &Ia_fcomip_ST0_STi }, - /* DF F2 */ { 0, &Ia_fcomip_ST0_STi }, - /* DF F3 */ { 0, &Ia_fcomip_ST0_STi }, - /* DF F4 */ { 0, &Ia_fcomip_ST0_STi }, - /* DF F5 */ { 0, &Ia_fcomip_ST0_STi }, - /* DF F6 */ { 0, &Ia_fcomip_ST0_STi }, - /* DF F7 */ { 0, &Ia_fcomip_ST0_STi }, - /* DF F8 */ { 0, &Ia_Invalid }, - /* DF F9 */ { 0, &Ia_Invalid }, - /* DF FA */ { 0, &Ia_Invalid }, - /* DF FB */ { 0, &Ia_Invalid }, - /* DF FC */ { 0, &Ia_Invalid }, - /* DF FD */ { 0, &Ia_Invalid }, - /* DF FE */ { 0, &Ia_Invalid }, - /* DF FF */ { 0, &Ia_Invalid }, -}; - -/* ************************************************************************ */ -/* 3-byte opcode table (Table A-4, 0F 38) */ - -static BxDisasmOpcodeTable_t BxDisasm3ByteOp0f380x[16] = { - /* 00 */ { GRPSSE(0f3800) }, - /* 01 */ { GRPSSE(0f3801) }, - /* 02 */ { GRPSSE(0f3802) }, - /* 03 */ { GRPSSE(0f3803) }, - /* 04 */ { GRPSSE(0f3804) }, - /* 05 */ { GRPSSE(0f3805) }, - /* 06 */ { GRPSSE(0f3806) }, - /* 07 */ { GRPSSE(0f3807) }, - /* 08 */ { GRPSSE(0f3808) }, - /* 09 */ { GRPSSE(0f3809) }, - /* 0A */ { GRPSSE(0f380a) }, - /* 0B */ { GRPSSE(0f380b) }, - /* 0C */ { 0, &Ia_Invalid }, - /* 0D */ { 0, &Ia_Invalid }, - /* 0E */ { 0, &Ia_Invalid }, - /* 0F */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasm3ByteOp0f381x[16] = { - /* 00 */ { 0, &Ia_Invalid }, - /* 01 */ { 0, &Ia_Invalid }, - /* 02 */ { 0, &Ia_Invalid }, - /* 03 */ { 0, &Ia_Invalid }, - /* 04 */ { 0, &Ia_Invalid }, - /* 05 */ { 0, &Ia_Invalid }, - /* 06 */ { 0, &Ia_Invalid }, - /* 07 */ { 0, &Ia_Invalid }, - /* 08 */ { 0, &Ia_Invalid }, - /* 09 */ { 0, &Ia_Invalid }, - /* 0A */ { 0, &Ia_Invalid }, - /* 0B */ { 0, &Ia_Invalid }, - /* 0C */ { GRPSSE(0f381c) }, - /* 0D */ { GRPSSE(0f381d) }, - /* 0E */ { GRPSSE(0f381e) }, - /* 0F */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasm3ByteTableA4[16] = { - /* 00 */ { GR3BOP(0f380x) }, - /* 01 */ { GR3BOP(0f381x) }, - /* 02 */ { 0, &Ia_Invalid }, - /* 03 */ { 0, &Ia_Invalid }, - /* 04 */ { 0, &Ia_Invalid }, - /* 05 */ { 0, &Ia_Invalid }, - /* 06 */ { 0, &Ia_Invalid }, - /* 07 */ { 0, &Ia_Invalid }, - /* 08 */ { 0, &Ia_Invalid }, - /* 09 */ { 0, &Ia_Invalid }, - /* 0A */ { 0, &Ia_Invalid }, - /* 0B */ { 0, &Ia_Invalid }, - /* 0C */ { 0, &Ia_Invalid }, - /* 0D */ { 0, &Ia_Invalid }, - /* 0E */ { 0, &Ia_Invalid }, - /* 0F */ { 0, &Ia_Invalid } -}; - -/* ************************************************************************ */ -/* 3-byte opcode table (Table A-5, 0F 3A) */ - -static BxDisasmOpcodeTable_t BxDisasm3ByteOp0f3a0x[16] = { - /* 00 */ { 0, &Ia_Invalid }, - /* 01 */ { 0, &Ia_Invalid }, - /* 02 */ { 0, &Ia_Invalid }, - /* 03 */ { 0, &Ia_Invalid }, - /* 04 */ { 0, &Ia_Invalid }, - /* 05 */ { 0, &Ia_Invalid }, - /* 06 */ { 0, &Ia_Invalid }, - /* 07 */ { 0, &Ia_Invalid }, - /* 08 */ { 0, &Ia_Invalid }, - /* 09 */ { 0, &Ia_Invalid }, - /* 0A */ { 0, &Ia_Invalid }, - /* 0B */ { 0, &Ia_Invalid }, - /* 0C */ { 0, &Ia_Invalid }, - /* 0D */ { 0, &Ia_Invalid }, - /* 0E */ { 0, &Ia_Invalid }, - /* 0F */ { GRPSSE(0f3a0f) } -}; - -static BxDisasmOpcodeTable_t BxDisasm3ByteTableA5[16] = { - /* 00 */ { GR3BOP(0f3a0x) }, - /* 01 */ { 0, &Ia_Invalid }, - /* 02 */ { 0, &Ia_Invalid }, - /* 03 */ { 0, &Ia_Invalid }, - /* 04 */ { 0, &Ia_Invalid }, - /* 05 */ { 0, &Ia_Invalid }, - /* 06 */ { 0, &Ia_Invalid }, - /* 07 */ { 0, &Ia_Invalid }, - /* 08 */ { 0, &Ia_Invalid }, - /* 09 */ { 0, &Ia_Invalid }, - /* 0A */ { 0, &Ia_Invalid }, - /* 0B */ { 0, &Ia_Invalid }, - /* 0C */ { 0, &Ia_Invalid }, - /* 0D */ { 0, &Ia_Invalid }, - /* 0E */ { 0, &Ia_Invalid }, - /* 0F */ { 0, &Ia_Invalid } -}; - -/* ************************************************************************ */ -/* 16-bit operand size */ - -static BxDisasmOpcodeTable_t BxDisasmOpcodes16[256*2] = { - // 256 entries for single byte opcodes - /* 00 */ { 0, &Ia_addb_Eb_Gb }, - /* 01 */ { 0, &Ia_addw_Ew_Gw }, - /* 02 */ { 0, &Ia_addb_Gb_Eb }, - /* 03 */ { 0, &Ia_addw_Gw_Ew }, - /* 04 */ { 0, &Ia_addb_AL_Ib }, - /* 05 */ { 0, &Ia_addw_AX_Iw }, - /* 06 */ { 0, &Ia_pushw_ES }, - /* 07 */ { 0, &Ia_popw_ES }, - /* 08 */ { 0, &Ia_orb_Eb_Gb }, - /* 09 */ { 0, &Ia_orw_Ew_Gw }, - /* 0A */ { 0, &Ia_orb_Gb_Eb }, - /* 0B */ { 0, &Ia_orw_Gw_Ew }, - /* 0C */ { 0, &Ia_orb_AL_Ib }, - /* 0D */ { 0, &Ia_orw_AX_Iw }, - /* 0E */ { 0, &Ia_pushw_CS }, - /* 0F */ { 0, &Ia_error }, // 2 byte escape - /* 10 */ { 0, &Ia_adcb_Eb_Gb }, - /* 11 */ { 0, &Ia_adcw_Ew_Gw }, - /* 12 */ { 0, &Ia_adcb_Gb_Eb }, - /* 13 */ { 0, &Ia_adcw_Gw_Ew }, - /* 14 */ { 0, &Ia_adcb_AL_Ib }, - /* 15 */ { 0, &Ia_adcw_AX_Iw }, - /* 16 */ { 0, &Ia_pushw_SS }, - /* 17 */ { 0, &Ia_popw_SS }, - /* 18 */ { 0, &Ia_sbbb_Eb_Gb }, - /* 19 */ { 0, &Ia_sbbw_Ew_Gw }, - /* 1A */ { 0, &Ia_sbbb_Gb_Eb }, - /* 1B */ { 0, &Ia_sbbw_Gw_Ew }, - /* 1C */ { 0, &Ia_sbbb_AL_Ib }, - /* 1D */ { 0, &Ia_sbbw_AX_Iw }, - /* 1E */ { 0, &Ia_pushw_DS }, - /* 1F */ { 0, &Ia_popw_DS }, - /* 20 */ { 0, &Ia_andb_Eb_Gb }, - /* 21 */ { 0, &Ia_andw_Ew_Gw }, - /* 22 */ { 0, &Ia_andb_Gb_Eb }, - /* 23 */ { 0, &Ia_andw_Gw_Ew }, - /* 24 */ { 0, &Ia_andb_AL_Ib }, - /* 25 */ { 0, &Ia_andw_AX_Iw }, - /* 26 */ { 0, &Ia_prefix_es }, // ES: - /* 27 */ { 0, &Ia_daa }, - /* 28 */ { 0, &Ia_subb_Eb_Gb }, - /* 29 */ { 0, &Ia_subw_Ew_Gw }, - /* 2A */ { 0, &Ia_subb_Gb_Eb }, - /* 2B */ { 0, &Ia_subw_Gw_Ew }, - /* 2C */ { 0, &Ia_subb_AL_Ib }, - /* 2D */ { 0, &Ia_subw_AX_Iw }, - /* 2E */ { 0, &Ia_prefix_cs }, // CS: - /* 2F */ { 0, &Ia_das }, - /* 30 */ { 0, &Ia_xorb_Eb_Gb }, - /* 31 */ { 0, &Ia_xorw_Ew_Gw }, - /* 32 */ { 0, &Ia_xorb_Gb_Eb }, - /* 33 */ { 0, &Ia_xorw_Gw_Ew }, - /* 34 */ { 0, &Ia_xorb_AL_Ib }, - /* 35 */ { 0, &Ia_xorw_AX_Iw }, - /* 36 */ { 0, &Ia_prefix_ss }, // SS: - /* 37 */ { 0, &Ia_aaa }, - /* 38 */ { 0, &Ia_cmpb_Eb_Gb }, - /* 39 */ { 0, &Ia_cmpw_Ew_Gw }, - /* 3A */ { 0, &Ia_cmpb_Gb_Eb }, - /* 3B */ { 0, &Ia_cmpw_Gw_Ew }, - /* 3C */ { 0, &Ia_cmpb_AL_Ib }, - /* 3D */ { 0, &Ia_cmpw_AX_Iw }, - /* 3E */ { 0, &Ia_prefix_ds }, // DS: - /* 3F */ { 0, &Ia_aas }, - /* 40 */ { 0, &Ia_incw_RX }, - /* 41 */ { 0, &Ia_incw_RX }, - /* 42 */ { 0, &Ia_incw_RX }, - /* 43 */ { 0, &Ia_incw_RX }, - /* 44 */ { 0, &Ia_incw_RX }, - /* 45 */ { 0, &Ia_incw_RX }, - /* 46 */ { 0, &Ia_incw_RX }, - /* 47 */ { 0, &Ia_incw_RX }, - /* 48 */ { 0, &Ia_decw_RX }, - /* 49 */ { 0, &Ia_decw_RX }, - /* 4A */ { 0, &Ia_decw_RX }, - /* 4B */ { 0, &Ia_decw_RX }, - /* 4C */ { 0, &Ia_decw_RX }, - /* 4D */ { 0, &Ia_decw_RX }, - /* 4E */ { 0, &Ia_decw_RX }, - /* 4F */ { 0, &Ia_decw_RX }, - /* 50 */ { 0, &Ia_pushw_RX }, - /* 51 */ { 0, &Ia_pushw_RX }, - /* 52 */ { 0, &Ia_pushw_RX }, - /* 53 */ { 0, &Ia_pushw_RX }, - /* 54 */ { 0, &Ia_pushw_RX }, - /* 55 */ { 0, &Ia_pushw_RX }, - /* 56 */ { 0, &Ia_pushw_RX }, - /* 57 */ { 0, &Ia_pushw_RX }, - /* 58 */ { 0, &Ia_popw_RX }, - /* 59 */ { 0, &Ia_popw_RX }, - /* 5A */ { 0, &Ia_popw_RX }, - /* 5B */ { 0, &Ia_popw_RX }, - /* 5C */ { 0, &Ia_popw_RX }, - /* 5D */ { 0, &Ia_popw_RX }, - /* 5E */ { 0, &Ia_popw_RX }, - /* 5F */ { 0, &Ia_popw_RX }, - /* 60 */ { 0, &Ia_pushaw }, - /* 61 */ { 0, &Ia_popaw }, - /* 62 */ { 0, &Ia_boundw_Gw_Ma }, - /* 63 */ { 0, &Ia_arpl_Ew_Rw }, - /* 64 */ { 0, &Ia_prefix_fs }, // FS: - /* 65 */ { 0, &Ia_prefix_gs }, // GS: - /* 66 */ { 0, &Ia_prefix_osize }, // OSIZE: - /* 67 */ { 0, &Ia_prefix_asize }, // ASIZE: - /* 68 */ { 0, &Ia_pushw_Iw }, - /* 69 */ { 0, &Ia_imulw_Gw_Ew_Iw }, - /* 6A */ { 0, &Ia_pushw_sIb }, - /* 6B */ { 0, &Ia_imulw_Gw_Ew_sIb }, - /* 6C */ { 0, &Ia_insb_Yb_DX }, - /* 6D */ { 0, &Ia_insw_Yw_DX }, - /* 6E */ { 0, &Ia_outsb_DX_Xb }, - /* 6F */ { 0, &Ia_outsw_DX_Xw }, - /* 70 */ { 0, &Ia_jo_Jb }, - /* 71 */ { 0, &Ia_jno_Jb }, - /* 72 */ { 0, &Ia_jb_Jb }, - /* 73 */ { 0, &Ia_jnb_Jb }, - /* 74 */ { 0, &Ia_jz_Jb }, - /* 75 */ { 0, &Ia_jnz_Jb }, - /* 76 */ { 0, &Ia_jbe_Jb }, - /* 77 */ { 0, &Ia_jnbe_Jb }, - /* 78 */ { 0, &Ia_js_Jb }, - /* 79 */ { 0, &Ia_jns_Jb }, - /* 7A */ { 0, &Ia_jp_Jb }, - /* 7B */ { 0, &Ia_jnp_Jb }, - /* 7C */ { 0, &Ia_jl_Jb }, - /* 7D */ { 0, &Ia_jnl_Jb }, - /* 7E */ { 0, &Ia_jle_Jb }, - /* 7F */ { 0, &Ia_jnle_Jb }, - /* 80 */ { GRPN(G1EbIb) }, - /* 81 */ { GRPN(G1EwIw) }, - /* 82 */ { GRPN(G1EbIb) }, - /* 83 */ { GRPN(G1EwIb) }, - /* 84 */ { 0, &Ia_testb_Eb_Gb }, - /* 85 */ { 0, &Ia_testw_Ew_Gw }, - /* 86 */ { 0, &Ia_xchgb_Eb_Gb }, - /* 87 */ { 0, &Ia_xchgw_Ew_Gw }, - /* 88 */ { 0, &Ia_movb_Eb_Gb }, - /* 89 */ { 0, &Ia_movw_Ew_Gw }, - /* 8A */ { 0, &Ia_movb_Gb_Eb }, - /* 8B */ { 0, &Ia_movw_Gw_Ew }, - /* 8C */ { 0, &Ia_movw_Ew_Sw }, - /* 8D */ { 0, &Ia_leaw_Gw_Mw }, - /* 8E */ { 0, &Ia_movw_Sw_Ew }, - /* 8F */ { 0, &Ia_popw_Ew }, - /* 90 */ { 0, &Ia_nop }, - /* 91 */ { 0, &Ia_xchgw_RX_AX }, - /* 92 */ { 0, &Ia_xchgw_RX_AX }, - /* 93 */ { 0, &Ia_xchgw_RX_AX }, - /* 94 */ { 0, &Ia_xchgw_RX_AX }, - /* 95 */ { 0, &Ia_xchgw_RX_AX }, - /* 96 */ { 0, &Ia_xchgw_RX_AX }, - /* 97 */ { 0, &Ia_xchgw_RX_AX }, - /* 98 */ { 0, &Ia_cbw }, - /* 99 */ { 0, &Ia_cwd }, - /* 9A */ { 0, &Ia_lcall_Apw }, - /* 9B */ { 0, &Ia_fwait }, - /* 9C */ { 0, &Ia_pushfw }, - /* 9D */ { 0, &Ia_popfw }, - /* 9E */ { 0, &Ia_sahf }, - /* 9F */ { 0, &Ia_lahf }, - /* A0 */ { 0, &Ia_movb_AL_Ob }, - /* A1 */ { 0, &Ia_movw_AX_Ow }, - /* A0 */ { 0, &Ia_movb_Ob_AL }, - /* A1 */ { 0, &Ia_movw_Ow_AX }, - /* A4 */ { 0, &Ia_movsb_Yb_Xb }, - /* A5 */ { 0, &Ia_movsw_Yw_Xw }, - /* A6 */ { 0, &Ia_cmpsb_Yb_Xb }, - /* A7 */ { 0, &Ia_cmpsw_Yw_Xw }, - /* A8 */ { 0, &Ia_testb_AL_Ib }, - /* A9 */ { 0, &Ia_testw_AX_Iw }, - /* AA */ { 0, &Ia_stosb_Yb_AL }, - /* AB */ { 0, &Ia_stosw_Yw_AX }, - /* AC */ { 0, &Ia_lodsb_AL_Xb }, - /* AD */ { 0, &Ia_lodsw_AX_Xw }, - /* AE */ { 0, &Ia_scasb_Yb_AL }, - /* AF */ { 0, &Ia_scasw_Yw_AX }, - /* B0 */ { 0, &Ia_movb_R8_Ib }, - /* B1 */ { 0, &Ia_movb_R8_Ib }, - /* B2 */ { 0, &Ia_movb_R8_Ib }, - /* B3 */ { 0, &Ia_movb_R8_Ib }, - /* B4 */ { 0, &Ia_movb_R8_Ib }, - /* B5 */ { 0, &Ia_movb_R8_Ib }, - /* B6 */ { 0, &Ia_movb_R8_Ib }, - /* B7 */ { 0, &Ia_movb_R8_Ib }, - /* B8 */ { 0, &Ia_movw_RX_Iw }, - /* B9 */ { 0, &Ia_movw_RX_Iw }, - /* BA */ { 0, &Ia_movw_RX_Iw }, - /* BB */ { 0, &Ia_movw_RX_Iw }, - /* BC */ { 0, &Ia_movw_RX_Iw }, - /* BD */ { 0, &Ia_movw_RX_Iw }, - /* BE */ { 0, &Ia_movw_RX_Iw }, - /* BF */ { 0, &Ia_movw_RX_Iw }, - /* C0 */ { GRPN(G2Eb) }, - /* C1 */ { GRPN(G2Ew) }, - /* C2 */ { 0, &Ia_ret_Iw }, - /* C3 */ { 0, &Ia_ret }, - /* C4 */ { 0, &Ia_lesw_Gw_Mp }, - /* C5 */ { 0, &Ia_ldsw_Gw_Mp }, - /* C6 */ { 0, &Ia_movb_Eb_Ib }, - /* C7 */ { 0, &Ia_movw_Ew_Iw }, - /* C8 */ { 0, &Ia_enter }, - /* C9 */ { 0, &Ia_leave }, - /* CA */ { 0, &Ia_lret_Iw }, - /* CB */ { 0, &Ia_lret }, - /* CC */ { 0, &Ia_int3 }, - /* CD */ { 0, &Ia_int_Ib }, - /* CE */ { 0, &Ia_into }, - /* CF */ { 0, &Ia_iretw }, - /* D0 */ { GRPN(G2EbI1) }, - /* D1 */ { GRPN(G2EwI1) }, - /* D2 */ { GRPN(G2EbCL) }, - /* D3 */ { GRPN(G2EwCL) }, - /* D4 */ { 0, &Ia_aam }, - /* D5 */ { 0, &Ia_aad }, - /* D6 */ { 0, &Ia_salc }, - /* D7 */ { 0, &Ia_xlat }, - /* D8 */ { GRPFP(D8) }, - /* D9 */ { GRPFP(D9) }, - /* DA */ { GRPFP(DA) }, - /* DB */ { GRPFP(DB) }, - /* DC */ { GRPFP(DC) }, - /* DD */ { GRPFP(DD) }, - /* DE */ { GRPFP(DE) }, - /* DF */ { GRPFP(DF) }, - /* E0 */ { 0, &Ia_loopne_Jb }, - /* E1 */ { 0, &Ia_loope_Jb }, - /* E2 */ { 0, &Ia_loop_Jb }, - /* E3 */ { 0, &Ia_jcxz_Jb }, - /* E4 */ { 0, &Ia_inb_AL_Ib }, - /* E5 */ { 0, &Ia_inw_AX_Ib }, - /* E6 */ { 0, &Ia_outb_Ib_AL }, - /* E7 */ { 0, &Ia_outw_Ib_AX }, - /* E8 */ { 0, &Ia_call_Jw }, - /* E9 */ { 0, &Ia_jmp_Jw }, - /* EA */ { 0, &Ia_ljmp_Apw }, - /* EB */ { 0, &Ia_jmp_Jb }, - /* EC */ { 0, &Ia_inb_AL_DX }, - /* ED */ { 0, &Ia_inw_AX_DX }, - /* EE */ { 0, &Ia_outb_DX_AL }, - /* EF */ { 0, &Ia_outw_DX_AX }, - /* F0 */ { 0, &Ia_prefix_lock }, // LOCK: - /* F1 */ { 0, &Ia_int1 }, - /* F2 */ { 0, &Ia_prefix_repne }, // REPNE: - /* F3 */ { 0, &Ia_prefix_rep }, // REP: - /* F4 */ { 0, &Ia_hlt }, - /* F5 */ { 0, &Ia_cmc }, - /* F6 */ { GRPN(G3Eb) }, - /* F7 */ { GRPN(G3Ew) }, - /* F8 */ { 0, &Ia_clc }, - /* F9 */ { 0, &Ia_stc }, - /* FA */ { 0, &Ia_cli }, - /* FB */ { 0, &Ia_sti }, - /* FC */ { 0, &Ia_cld }, - /* FD */ { 0, &Ia_std }, - /* FE */ { GRPN(G4) }, - /* FF */ { GRPN(G5w) }, - - // 256 entries for two byte opcodes - /* 0F 00 */ { GRPN(G6) }, - /* 0F 01 */ { GRPN(G7) }, - /* 0F 02 */ { 0, &Ia_larw_Gw_Ew }, - /* 0F 03 */ { 0, &Ia_lslw_Gw_Ew }, - /* 0F 04 */ { 0, &Ia_Invalid }, - /* 0F 05 */ { 0, &Ia_syscall }, - /* 0F 06 */ { 0, &Ia_clts }, - /* 0F 07 */ { 0, &Ia_sysret }, - /* 0F 08 */ { 0, &Ia_invd }, - /* 0F 09 */ { 0, &Ia_wbinvd }, - /* 0F 0A */ { 0, &Ia_Invalid }, - /* 0F 0B */ { 0, &Ia_ud2a }, - /* 0F 0C */ { 0, &Ia_Invalid }, - /* 0F 0D */ { 0, &Ia_prefetch }, // 3DNow! - /* 0F 0E */ { 0, &Ia_femms }, // 3DNow! - /* 0F 0F */ { GRP3DNOW }, - /* 0F 10 */ { GRPSSE(0f10) }, - /* 0F 11 */ { GRPSSE(0f11) }, - /* 0F 12 */ { GRPSSE(0f12) }, - /* 0F 13 */ { GRPSSE(0f13) }, - /* 0F 14 */ { GRPSSE(0f14) }, - /* 0F 15 */ { GRPSSE(0f15) }, - /* 0F 16 */ { GRPSSE(0f16) }, - /* 0F 17 */ { GRPSSE(0f17) }, - /* 0F 18 */ { GRPN(G16) }, - /* 0F 19 */ { 0, &Ia_Invalid }, - /* 0F 1A */ { 0, &Ia_Invalid }, - /* 0F 1B */ { 0, &Ia_Invalid }, - /* 0F 1C */ { 0, &Ia_Invalid }, - /* 0F 1D */ { 0, &Ia_Invalid }, - /* 0F 1E */ { 0, &Ia_Invalid }, - /* 0F 1F */ { 0, &Ia_multibyte_nop }, - /* 0F 20 */ { 0, &Ia_movl_Rd_Cd }, - /* 0F 21 */ { 0, &Ia_movl_Rd_Dd }, - /* 0F 22 */ { 0, &Ia_movl_Cd_Rd }, - /* 0F 23 */ { 0, &Ia_movl_Dd_Rd }, - /* 0F 24 */ { 0, &Ia_movl_Rd_Td }, - /* 0F 25 */ { 0, &Ia_Invalid }, - /* 0F 26 */ { 0, &Ia_movl_Td_Rd }, - /* 0F 27 */ { 0, &Ia_Invalid }, - /* 0F 28 */ { GRPSSE(0f28) }, - /* 0F 29 */ { GRPSSE(0f29) }, - /* 0F 2A */ { GRPSSE(0f2a) }, - /* 0F 2B */ { GRPSSE(0f2b) }, - /* 0F 2C */ { GRPSSE(0f2c) }, - /* 0F 2D */ { GRPSSE(0f2d) }, - /* 0F 2E */ { GRPSSE(0f2e) }, - /* 0F 2F */ { GRPSSE(0f2f) }, - /* 0F 30 */ { 0, &Ia_wrmsr }, - /* 0F 31 */ { 0, &Ia_rdtsc }, - /* 0F 32 */ { 0, &Ia_rdmsr }, - /* 0F 33 */ { 0, &Ia_rdpmc }, - /* 0F 34 */ { 0, &Ia_sysenter }, - /* 0F 35 */ { 0, &Ia_sysexit }, - /* 0F 36 */ { 0, &Ia_Invalid }, - /* 0F 37 */ { 0, &Ia_Invalid }, - /* 0F 38 */ { GR3BTAB(A4) }, - /* 0F 39 */ { 0, &Ia_Invalid }, - /* 0F 3A */ { GR3BTAB(A5) }, - /* 0F 3B */ { 0, &Ia_Invalid }, - /* 0F 3C */ { 0, &Ia_Invalid }, - /* 0F 3D */ { 0, &Ia_Invalid }, - /* 0F 3E */ { 0, &Ia_Invalid }, - /* 0F 3F */ { 0, &Ia_Invalid }, - /* 0F 40 */ { 0, &Ia_cmovow_Gw_Ew }, - /* 0F 41 */ { 0, &Ia_cmovnow_Gw_Ew }, - /* 0F 42 */ { 0, &Ia_cmovcw_Gw_Ew }, - /* 0F 43 */ { 0, &Ia_cmovncw_Gw_Ew }, - /* 0F 44 */ { 0, &Ia_cmovzw_Gw_Ew }, - /* 0F 45 */ { 0, &Ia_cmovnzw_Gw_Ew }, - /* 0F 46 */ { 0, &Ia_cmovnaw_Gw_Ew }, - /* 0F 47 */ { 0, &Ia_cmovaw_Gw_Ew }, - /* 0F 48 */ { 0, &Ia_cmovsw_Gw_Ew }, - /* 0F 49 */ { 0, &Ia_cmovnsw_Gw_Ew }, - /* 0F 4A */ { 0, &Ia_cmovpw_Gw_Ew }, - /* 0F 4B */ { 0, &Ia_cmovnpw_Gw_Ew }, - /* 0F 4C */ { 0, &Ia_cmovlw_Gw_Ew }, - /* 0F 4D */ { 0, &Ia_cmovnlw_Gw_Ew }, - /* 0F 4E */ { 0, &Ia_cmovngw_Gw_Ew }, - /* 0F 4F */ { 0, &Ia_cmovgw_Gw_Ew }, - /* 0F 50 */ { GRPSSE(0f50) }, - /* 0F 51 */ { GRPSSE(0f51) }, - /* 0F 52 */ { GRPSSE(0f52) }, - /* 0F 53 */ { GRPSSE(0f53) }, - /* 0F 54 */ { GRPSSE(0f54) }, - /* 0F 55 */ { GRPSSE(0f55) }, - /* 0F 56 */ { GRPSSE(0f56) }, - /* 0F 57 */ { GRPSSE(0f57) }, - /* 0F 58 */ { GRPSSE(0f58) }, - /* 0F 59 */ { GRPSSE(0f59) }, - /* 0F 5A */ { GRPSSE(0f5a) }, - /* 0F 5B */ { GRPSSE(0f5b) }, - /* 0F 5C */ { GRPSSE(0f5c) }, - /* 0F 5D */ { GRPSSE(0f5d) }, - /* 0F 5E */ { GRPSSE(0f5e) }, - /* 0F 5F */ { GRPSSE(0f5f) }, - /* 0F 60 */ { GRPSSE(0f60) }, - /* 0F 61 */ { GRPSSE(0f61) }, - /* 0F 62 */ { GRPSSE(0f62) }, - /* 0F 63 */ { GRPSSE(0f63) }, - /* 0F 64 */ { GRPSSE(0f64) }, - /* 0F 65 */ { GRPSSE(0f65) }, - /* 0F 66 */ { GRPSSE(0f66) }, - /* 0F 67 */ { GRPSSE(0f67) }, - /* 0F 68 */ { GRPSSE(0f68) }, - /* 0F 69 */ { GRPSSE(0f69) }, - /* 0F 6A */ { GRPSSE(0f6a) }, - /* 0F 6B */ { GRPSSE(0f6b) }, - /* 0F 6C */ { GRPSSE(0f6c) }, - /* 0F 6D */ { GRPSSE(0f6d) }, - /* 0F 6E */ { GRPSSE(0f6e) }, - /* 0F 6F */ { GRPSSE(0f6f) }, - /* 0F 70 */ { GRPSSE(0f70) }, - /* 0F 71 */ { GRPN(G12) }, - /* 0F 72 */ { GRPN(G13) }, - /* 0F 73 */ { GRPN(G14) }, - /* 0F 74 */ { GRPSSE(0f74) }, - /* 0F 75 */ { GRPSSE(0f75) }, - /* 0F 76 */ { GRPSSE(0f76) }, - /* 0F 77 */ { 0, &Ia_emms }, - /* 0F 78 */ { 0, &Ia_Invalid }, - /* 0F 79 */ { 0, &Ia_Invalid }, - /* 0F 7A */ { 0, &Ia_Invalid }, - /* 0F 7B */ { 0, &Ia_Invalid }, - /* 0F 7C */ { GRPSSE(0f7c) }, - /* 0F 7D */ { GRPSSE(0f7d) }, - /* 0F 7E */ { GRPSSE(0f7e) }, - /* 0F 7F */ { GRPSSE(0f7f) }, - /* 0F 80 */ { 0, &Ia_jo_Jw }, - /* 0F 81 */ { 0, &Ia_jno_Jw }, - /* 0F 82 */ { 0, &Ia_jb_Jw }, - /* 0F 83 */ { 0, &Ia_jnb_Jw }, - /* 0F 84 */ { 0, &Ia_jz_Jw }, - /* 0F 85 */ { 0, &Ia_jnz_Jw }, - /* 0F 86 */ { 0, &Ia_jbe_Jw }, - /* 0F 87 */ { 0, &Ia_jnbe_Jw }, - /* 0F 88 */ { 0, &Ia_js_Jw }, - /* 0F 89 */ { 0, &Ia_jns_Jw }, - /* 0F 8A */ { 0, &Ia_jp_Jw }, - /* 0F 8B */ { 0, &Ia_jnp_Jw }, - /* 0F 8C */ { 0, &Ia_jl_Jw }, - /* 0F 8D */ { 0, &Ia_jnl_Jw }, - /* 0F 8E */ { 0, &Ia_jle_Jw }, - /* 0F 8F */ { 0, &Ia_jnle_Jw }, - /* 0F 90 */ { 0, &Ia_seto_Eb }, - /* 0F 91 */ { 0, &Ia_setno_Eb }, - /* 0F 92 */ { 0, &Ia_setb_Eb }, - /* 0F 93 */ { 0, &Ia_setnb_Eb }, - /* 0F 94 */ { 0, &Ia_setz_Eb }, - /* 0F 95 */ { 0, &Ia_setnz_Eb }, - /* 0F 96 */ { 0, &Ia_setbe_Eb }, - /* 0F 97 */ { 0, &Ia_setnbe_Eb }, - /* 0F 98 */ { 0, &Ia_sets_Eb }, - /* 0F 99 */ { 0, &Ia_setns_Eb }, - /* 0F 9A */ { 0, &Ia_setp_Eb }, - /* 0F 9B */ { 0, &Ia_setnp_Eb }, - /* 0F 9C */ { 0, &Ia_setl_Eb }, - /* 0F 9D */ { 0, &Ia_setnl_Eb }, - /* 0F 9E */ { 0, &Ia_setle_Eb }, - /* 0F 9F */ { 0, &Ia_setnle_Eb }, - /* 0F A0 */ { 0, &Ia_pushw_FS }, - /* 0F A1 */ { 0, &Ia_popw_FS }, - /* 0F A2 */ { 0, &Ia_cpuid }, - /* 0F A3 */ { 0, &Ia_btw_Ew_Gw }, - /* 0F A4 */ { 0, &Ia_shldw_Ew_Gw_Ib }, - /* 0F A5 */ { 0, &Ia_shldw_Ew_Gw_CL }, - /* 0F A6 */ { 0, &Ia_Invalid }, - /* 0F A7 */ { 0, &Ia_Invalid }, - /* 0F A8 */ { 0, &Ia_pushw_GS }, - /* 0F A9 */ { 0, &Ia_popw_GS }, - /* 0F AA */ { 0, &Ia_rsm }, - /* 0F AB */ { 0, &Ia_btsw_Ew_Gw }, - /* 0F AC */ { 0, &Ia_shrdw_Ew_Gw_Ib }, - /* 0F AD */ { 0, &Ia_shrdw_Ew_Gw_CL }, - /* 0F AE */ { GRPN(G15) }, - /* 0F AF */ { 0, &Ia_imulw_Gw_Ew }, - /* 0F B0 */ { 0, &Ia_cmpxchgb_Eb_Gb }, - /* 0F B1 */ { 0, &Ia_cmpxchgw_Ew_Gw }, - /* 0F B2 */ { 0, &Ia_lssw_Gw_Mp }, - /* 0F B3 */ { 0, &Ia_btrw_Ew_Gw }, - /* 0F B4 */ { 0, &Ia_lfsw_Gw_Mp }, - /* 0F B5 */ { 0, &Ia_lgsw_Gw_Mp }, - /* 0F B6 */ { 0, &Ia_movzbw_Gw_Eb }, - /* 0F B7 */ { 0, &Ia_movw_Gw_Ew }, - /* 0F B8 */ { 0, &Ia_Invalid }, - /* 0F B9 */ { 0, &Ia_ud2b }, - /* 0F BA */ { GRPN(G8EwIb) }, - /* 0F BB */ { 0, &Ia_btcw_Ew_Gw }, - /* 0F BC */ { 0, &Ia_bsfw_Gw_Ew }, - /* 0F BD */ { 0, &Ia_bsrw_Gw_Ew }, - /* 0F BE */ { 0, &Ia_movsbw_Gw_Eb }, - /* 0F BF */ { 0, &Ia_movw_Gw_Ew }, - /* 0F C0 */ { 0, &Ia_xaddb_Eb_Gb }, - /* 0F C0 */ { 0, &Ia_xaddw_Ew_Gw }, - /* 0F C2 */ { GRPSSE(0fc2) }, - /* 0F C3 */ { GRPSSE(0fc3) }, - /* 0F C4 */ { GRPSSE(0fc4) }, - /* 0F C5 */ { GRPSSE(0fc5) }, - /* 0F C6 */ { GRPSSE(0fc6) }, - /* 0F C7 */ { GRPN(G9) }, - /* 0F C8 */ { 0, &Ia_bswapl_ERX }, - /* 0F C9 */ { 0, &Ia_bswapl_ERX }, - /* 0F CA */ { 0, &Ia_bswapl_ERX }, - /* 0F CB */ { 0, &Ia_bswapl_ERX }, - /* 0F CC */ { 0, &Ia_bswapl_ERX }, - /* 0F CD */ { 0, &Ia_bswapl_ERX }, - /* 0F CE */ { 0, &Ia_bswapl_ERX }, - /* 0F CF */ { 0, &Ia_bswapl_ERX }, - /* 0F D0 */ { GRPSSE(0fd0) }, - /* 0F D1 */ { GRPSSE(0fd1) }, - /* 0F D2 */ { GRPSSE(0fd2) }, - /* 0F D3 */ { GRPSSE(0fd3) }, - /* 0F D4 */ { GRPSSE(0fd4) }, - /* 0F D5 */ { GRPSSE(0fd5) }, - /* 0F D6 */ { GRPSSE(0fd6) }, - /* 0F D7 */ { GRPSSE(0fd7) }, - /* 0F D8 */ { GRPSSE(0fd8) }, - /* 0F D9 */ { GRPSSE(0fd9) }, - /* 0F DA */ { GRPSSE(0fda) }, - /* 0F DB */ { GRPSSE(0fdb) }, - /* 0F DC */ { GRPSSE(0fdc) }, - /* 0F DD */ { GRPSSE(0fdd) }, - /* 0F DE */ { GRPSSE(0fde) }, - /* 0F DF */ { GRPSSE(0fdf) }, - /* 0F E0 */ { GRPSSE(0fe0) }, - /* 0F E1 */ { GRPSSE(0fe1) }, - /* 0F E2 */ { GRPSSE(0fe2) }, - /* 0F E3 */ { GRPSSE(0fe3) }, - /* 0F E4 */ { GRPSSE(0fe4) }, - /* 0F E5 */ { GRPSSE(0fe5) }, - /* 0F E6 */ { GRPSSE(0fe6) }, - /* 0F E7 */ { GRPSSE(0fe7) }, - /* 0F E8 */ { GRPSSE(0fe8) }, - /* 0F E9 */ { GRPSSE(0fe9) }, - /* 0F EA */ { GRPSSE(0fea) }, - /* 0F EB */ { GRPSSE(0feb) }, - /* 0F EC */ { GRPSSE(0fec) }, - /* 0F ED */ { GRPSSE(0fed) }, - /* 0F EE */ { GRPSSE(0fee) }, - /* 0F EF */ { GRPSSE(0fef) }, - /* 0F F0 */ { GRPSSE(0ff0) }, - /* 0F F1 */ { GRPSSE(0ff1) }, - /* 0F F2 */ { GRPSSE(0ff2) }, - /* 0F F3 */ { GRPSSE(0ff3) }, - /* 0F F4 */ { GRPSSE(0ff4) }, - /* 0F F5 */ { GRPSSE(0ff5) }, - /* 0F F6 */ { GRPSSE(0ff6) }, - /* 0F F7 */ { GRPSSE(0ff7) }, - /* 0F F8 */ { GRPSSE(0ff8) }, - /* 0F F9 */ { GRPSSE(0ff9) }, - /* 0F FA */ { GRPSSE(0ffa) }, - /* 0F FB */ { GRPSSE(0ffb) }, - /* 0F FC */ { GRPSSE(0ffc) }, - /* 0F FD */ { GRPSSE(0ffd) }, - /* 0F FE */ { GRPSSE(0ffe) }, - /* 0F FF */ { 0, &Ia_Invalid } -}; - -/* ************************************************************************ */ -/* 32-bit operand size */ - -static BxDisasmOpcodeTable_t BxDisasmOpcodes32[256*2] = { - // 256 entries for single byte opcodes - /* 00 */ { 0, &Ia_addb_Eb_Gb }, - /* 01 */ { 0, &Ia_addl_Ed_Gd }, - /* 02 */ { 0, &Ia_addb_Gb_Eb }, - /* 03 */ { 0, &Ia_addl_Gd_Ed }, - /* 04 */ { 0, &Ia_addb_AL_Ib, }, - /* 05 */ { 0, &Ia_addl_EAX_Id, }, - /* 06 */ { 0, &Ia_pushl_ES }, - /* 07 */ { 0, &Ia_popl_ES }, - /* 08 */ { 0, &Ia_orb_Eb_Gb }, - /* 09 */ { 0, &Ia_orl_Ed_Gd }, - /* 0A */ { 0, &Ia_orb_Gb_Eb }, - /* 0B */ { 0, &Ia_orl_Gd_Ed }, - /* 0C */ { 0, &Ia_orb_AL_Ib }, - /* 0D */ { 0, &Ia_orl_EAX_Id }, - /* 0E */ { 0, &Ia_pushl_CS }, - /* 0F */ { 0, &Ia_error }, // 2 byte escape - /* 10 */ { 0, &Ia_adcb_Eb_Gb }, - /* 11 */ { 0, &Ia_adcl_Ed_Gd }, - /* 12 */ { 0, &Ia_adcb_Gb_Eb }, - /* 13 */ { 0, &Ia_adcl_Gd_Ed }, - /* 14 */ { 0, &Ia_adcb_AL_Ib }, - /* 15 */ { 0, &Ia_adcl_EAX_Id }, - /* 16 */ { 0, &Ia_pushl_SS }, - /* 17 */ { 0, &Ia_popl_SS }, - /* 18 */ { 0, &Ia_sbbb_Eb_Gb }, - /* 19 */ { 0, &Ia_sbbl_Ed_Gd }, - /* 1A */ { 0, &Ia_sbbb_Gb_Eb }, - /* 1B */ { 0, &Ia_sbbl_Gd_Ed }, - /* 1C */ { 0, &Ia_sbbb_AL_Ib }, - /* 1D */ { 0, &Ia_sbbl_EAX_Id }, - /* 1E */ { 0, &Ia_pushl_DS }, - /* 1F */ { 0, &Ia_popl_DS }, - /* 20 */ { 0, &Ia_andb_Eb_Gb }, - /* 21 */ { 0, &Ia_andl_Ed_Gd }, - /* 22 */ { 0, &Ia_andb_Gb_Eb }, - /* 23 */ { 0, &Ia_andl_Gd_Ed }, - /* 24 */ { 0, &Ia_andb_AL_Ib }, - /* 25 */ { 0, &Ia_andl_EAX_Id }, - /* 26 */ { 0, &Ia_prefix_es }, // ES: - /* 27 */ { 0, &Ia_daa }, - /* 28 */ { 0, &Ia_subb_Eb_Gb }, - /* 29 */ { 0, &Ia_subl_Ed_Gd }, - /* 2A */ { 0, &Ia_subb_Gb_Eb }, - /* 2B */ { 0, &Ia_subl_Gd_Ed }, - /* 2C */ { 0, &Ia_subb_AL_Ib }, - /* 2D */ { 0, &Ia_subl_EAX_Id }, - /* 2E */ { 0, &Ia_prefix_cs }, // CS: - /* 2F */ { 0, &Ia_das }, - /* 30 */ { 0, &Ia_xorb_Eb_Gb }, - /* 31 */ { 0, &Ia_xorl_Ed_Gd }, - /* 32 */ { 0, &Ia_xorb_Gb_Eb }, - /* 33 */ { 0, &Ia_xorl_Gd_Ed }, - /* 34 */ { 0, &Ia_xorb_AL_Ib }, - /* 35 */ { 0, &Ia_xorl_EAX_Id }, - /* 36 */ { 0, &Ia_prefix_ss }, // SS: - /* 37 */ { 0, &Ia_aaa }, - /* 38 */ { 0, &Ia_cmpb_Eb_Gb }, - /* 39 */ { 0, &Ia_cmpl_Ed_Gd }, - /* 3A */ { 0, &Ia_cmpb_Gb_Eb }, - /* 3B */ { 0, &Ia_cmpl_Gd_Ed }, - /* 3C */ { 0, &Ia_cmpb_AL_Ib }, - /* 3D */ { 0, &Ia_cmpl_EAX_Id }, - /* 3E */ { 0, &Ia_prefix_ds }, // DS: - /* 3F */ { 0, &Ia_aas }, - /* 40 */ { 0, &Ia_incl_ERX }, - /* 41 */ { 0, &Ia_incl_ERX }, - /* 42 */ { 0, &Ia_incl_ERX }, - /* 43 */ { 0, &Ia_incl_ERX }, - /* 44 */ { 0, &Ia_incl_ERX }, - /* 45 */ { 0, &Ia_incl_ERX }, - /* 46 */ { 0, &Ia_incl_ERX }, - /* 47 */ { 0, &Ia_incl_ERX }, - /* 48 */ { 0, &Ia_decl_ERX }, - /* 49 */ { 0, &Ia_decl_ERX }, - /* 4A */ { 0, &Ia_decl_ERX }, - /* 4B */ { 0, &Ia_decl_ERX }, - /* 4C */ { 0, &Ia_decl_ERX }, - /* 4D */ { 0, &Ia_decl_ERX }, - /* 4E */ { 0, &Ia_decl_ERX }, - /* 4F */ { 0, &Ia_decl_ERX }, - /* 50 */ { 0, &Ia_pushl_ERX }, - /* 51 */ { 0, &Ia_pushl_ERX }, - /* 52 */ { 0, &Ia_pushl_ERX }, - /* 53 */ { 0, &Ia_pushl_ERX }, - /* 54 */ { 0, &Ia_pushl_ERX }, - /* 55 */ { 0, &Ia_pushl_ERX }, - /* 56 */ { 0, &Ia_pushl_ERX }, - /* 57 */ { 0, &Ia_pushl_ERX }, - /* 58 */ { 0, &Ia_popl_ERX }, - /* 59 */ { 0, &Ia_popl_ERX }, - /* 5A */ { 0, &Ia_popl_ERX }, - /* 5B */ { 0, &Ia_popl_ERX }, - /* 5C */ { 0, &Ia_popl_ERX }, - /* 5D */ { 0, &Ia_popl_ERX }, - /* 5E */ { 0, &Ia_popl_ERX }, - /* 5F */ { 0, &Ia_popl_ERX }, - /* 60 */ { 0, &Ia_pushal }, - /* 61 */ { 0, &Ia_popal }, - /* 62 */ { 0, &Ia_boundl_Gd_Ma }, - /* 63 */ { 0, &Ia_arpl_Ew_Rw }, - /* 64 */ { 0, &Ia_prefix_fs }, // FS: - /* 65 */ { 0, &Ia_prefix_gs }, // GS: - /* 66 */ { 0, &Ia_prefix_osize }, // OSIZE: - /* 67 */ { 0, &Ia_prefix_asize }, // ASIZE: - /* 68 */ { 0, &Ia_pushl_Id }, - /* 69 */ { 0, &Ia_imull_Gd_Ed_Id }, - /* 6A */ { 0, &Ia_pushl_sIb }, - /* 6B */ { 0, &Ia_imull_Gd_Ed_sIb }, - /* 6C */ { 0, &Ia_insb_Yb_DX }, - /* 6D */ { 0, &Ia_insl_Yd_DX }, - /* 6E */ { 0, &Ia_outsb_DX_Xb }, - /* 6F */ { 0, &Ia_outsl_DX_Xd }, - /* 70 */ { 0, &Ia_jo_Jb }, - /* 71 */ { 0, &Ia_jno_Jb }, - /* 72 */ { 0, &Ia_jb_Jb }, - /* 73 */ { 0, &Ia_jnb_Jb }, - /* 74 */ { 0, &Ia_jz_Jb }, - /* 75 */ { 0, &Ia_jnz_Jb }, - /* 76 */ { 0, &Ia_jbe_Jb }, - /* 77 */ { 0, &Ia_jnbe_Jb }, - /* 78 */ { 0, &Ia_js_Jb }, - /* 79 */ { 0, &Ia_jns_Jb }, - /* 7A */ { 0, &Ia_jp_Jb }, - /* 7B */ { 0, &Ia_jnp_Jb }, - /* 7C */ { 0, &Ia_jl_Jb }, - /* 7D */ { 0, &Ia_jnl_Jb }, - /* 7E */ { 0, &Ia_jle_Jb }, - /* 7F */ { 0, &Ia_jnle_Jb }, - /* 80 */ { GRPN(G1EbIb) }, - /* 81 */ { GRPN(G1EdId) }, - /* 82 */ { GRPN(G1EbIb) }, - /* 83 */ { GRPN(G1EdIb) }, - /* 84 */ { 0, &Ia_testb_Eb_Gb }, - /* 85 */ { 0, &Ia_testl_Ed_Gd }, - /* 86 */ { 0, &Ia_xchgb_Eb_Gb }, - /* 87 */ { 0, &Ia_xchgl_Ed_Gd }, - /* 88 */ { 0, &Ia_movb_Eb_Gb }, - /* 89 */ { 0, &Ia_movl_Ed_Gd }, - /* 8A */ { 0, &Ia_movb_Gb_Eb }, - /* 8B */ { 0, &Ia_movl_Gd_Ed }, - /* 8C */ { 0, &Ia_movw_Ew_Sw }, - /* 8D */ { 0, &Ia_leal_Gd_Md }, - /* 8E */ { 0, &Ia_movw_Sw_Ew }, - /* 8F */ { 0, &Ia_popl_Ed }, - /* 90 */ { 0, &Ia_nop }, - /* 91 */ { 0, &Ia_xchgl_ERX_EAX }, - /* 92 */ { 0, &Ia_xchgl_ERX_EAX }, - /* 93 */ { 0, &Ia_xchgl_ERX_EAX }, - /* 94 */ { 0, &Ia_xchgl_ERX_EAX }, - /* 95 */ { 0, &Ia_xchgl_ERX_EAX }, - /* 96 */ { 0, &Ia_xchgl_ERX_EAX }, - /* 97 */ { 0, &Ia_xchgl_ERX_EAX }, - /* 98 */ { 0, &Ia_cwde }, - /* 99 */ { 0, &Ia_cdq }, - /* 9A */ { 0, &Ia_lcall_Apd }, - /* 9B */ { 0, &Ia_fwait }, - /* 9C */ { 0, &Ia_pushfl }, - /* 9D */ { 0, &Ia_popfl }, - /* 9E */ { 0, &Ia_sahf }, - /* 9F */ { 0, &Ia_lahf }, - /* A0 */ { 0, &Ia_movb_AL_Ob }, - /* A1 */ { 0, &Ia_movl_EAX_Od }, - /* A0 */ { 0, &Ia_movb_Ob_AL }, - /* A1 */ { 0, &Ia_movl_Od_EAX }, - /* A4 */ { 0, &Ia_movsb_Yb_Xb }, - /* A5 */ { 0, &Ia_movsl_Yd_Xd }, - /* A6 */ { 0, &Ia_cmpsb_Yb_Xb }, - /* A7 */ { 0, &Ia_cmpsl_Yd_Xd }, - /* A8 */ { 0, &Ia_testb_AL_Ib }, - /* A9 */ { 0, &Ia_testl_EAX_Id }, - /* AA */ { 0, &Ia_stosb_Yb_AL }, - /* AB */ { 0, &Ia_stosl_Yd_EAX }, - /* AC */ { 0, &Ia_lodsb_AL_Xb }, - /* AD */ { 0, &Ia_lodsl_EAX_Xd }, - /* AE */ { 0, &Ia_scasb_Yb_AL }, - /* AF */ { 0, &Ia_scasl_Yd_EAX }, - /* B0 */ { 0, &Ia_movb_R8_Ib }, - /* B1 */ { 0, &Ia_movb_R8_Ib }, - /* B2 */ { 0, &Ia_movb_R8_Ib }, - /* B3 */ { 0, &Ia_movb_R8_Ib }, - /* B4 */ { 0, &Ia_movb_R8_Ib }, - /* B5 */ { 0, &Ia_movb_R8_Ib }, - /* B6 */ { 0, &Ia_movb_R8_Ib }, - /* B7 */ { 0, &Ia_movb_R8_Ib }, - /* B8 */ { 0, &Ia_movl_ERX_Id }, - /* B9 */ { 0, &Ia_movl_ERX_Id }, - /* BA */ { 0, &Ia_movl_ERX_Id }, - /* BB */ { 0, &Ia_movl_ERX_Id }, - /* BC */ { 0, &Ia_movl_ERX_Id }, - /* BD */ { 0, &Ia_movl_ERX_Id }, - /* BE */ { 0, &Ia_movl_ERX_Id }, - /* BF */ { 0, &Ia_movl_ERX_Id }, - /* C0 */ { GRPN(G2Eb) }, - /* C1 */ { GRPN(G2Ed) }, - /* C2 */ { 0, &Ia_ret_Iw }, - /* C3 */ { 0, &Ia_ret }, - /* C4 */ { 0, &Ia_lesl_Gd_Mp }, - /* C5 */ { 0, &Ia_ldsl_Gd_Mp }, - /* C6 */ { 0, &Ia_movb_Eb_Ib }, - /* C7 */ { 0, &Ia_movl_Ed_Id }, - /* C8 */ { 0, &Ia_enter }, - /* C9 */ { 0, &Ia_leave }, - /* CA */ { 0, &Ia_lret_Iw }, - /* CB */ { 0, &Ia_lret }, - /* CC */ { 0, &Ia_int3 }, - /* CD */ { 0, &Ia_int_Ib }, - /* CE */ { 0, &Ia_into }, - /* CF */ { 0, &Ia_iretl }, - /* D0 */ { GRPN(G2EbI1) }, - /* D1 */ { GRPN(G2EdI1) }, - /* D2 */ { GRPN(G2EbCL) }, - /* D3 */ { GRPN(G2EdCL) }, - /* D4 */ { 0, &Ia_aam }, - /* D5 */ { 0, &Ia_aad }, - /* D6 */ { 0, &Ia_salc }, - /* D7 */ { 0, &Ia_xlat }, - /* D8 */ { GRPFP(D8) }, - /* D9 */ { GRPFP(D9) }, - /* DA */ { GRPFP(DA) }, - /* DB */ { GRPFP(DB) }, - /* DC */ { GRPFP(DC) }, - /* DD */ { GRPFP(DD) }, - /* DE */ { GRPFP(DE) }, - /* DF */ { GRPFP(DF) }, - /* E0 */ { 0, &Ia_loopne_Jb }, - /* E1 */ { 0, &Ia_loope_Jb }, - /* E2 */ { 0, &Ia_loop_Jb }, - /* E3 */ { 0, &Ia_jcxz_Jb }, - /* E4 */ { 0, &Ia_inb_AL_Ib }, - /* E5 */ { 0, &Ia_inl_EAX_Ib }, - /* E6 */ { 0, &Ia_outb_Ib_AL }, - /* E7 */ { 0, &Ia_outl_Ib_EAX }, - /* E8 */ { 0, &Ia_call_Jd }, - /* E9 */ { 0, &Ia_jmp_Jd }, - /* EA */ { 0, &Ia_ljmp_Apd }, - /* EB */ { 0, &Ia_jmp_Jb }, - /* EC */ { 0, &Ia_inb_AL_DX }, - /* ED */ { 0, &Ia_inl_EAX_DX }, - /* EE */ { 0, &Ia_outb_DX_AL }, - /* EF */ { 0, &Ia_outl_DX_EAX }, - /* F0 */ { 0, &Ia_prefix_lock }, // LOCK: - /* F1 */ { 0, &Ia_int1 }, - /* F2 */ { 0, &Ia_prefix_repne }, // REPNE: - /* F3 */ { 0, &Ia_prefix_rep }, // REP: - /* F4 */ { 0, &Ia_hlt }, - /* F5 */ { 0, &Ia_cmc }, - /* F6 */ { GRPN(G3Eb) }, - /* F7 */ { GRPN(G3Ed) }, - /* F8 */ { 0, &Ia_clc }, - /* F9 */ { 0, &Ia_stc }, - /* FA */ { 0, &Ia_cli }, - /* FB */ { 0, &Ia_sti }, - /* FC */ { 0, &Ia_cld }, - /* FD */ { 0, &Ia_std }, - /* FE */ { GRPN(G4) }, - /* FF */ { GRPN(G5d) }, - - // 256 entries for two byte opcodes - /* 0F 00 */ { GRPN(G6) }, - /* 0F 01 */ { GRPN(G7) }, - /* 0F 02 */ { 0, &Ia_larl_Gd_Ew }, - /* 0F 03 */ { 0, &Ia_lsll_Gd_Ew }, - /* 0F 04 */ { 0, &Ia_Invalid }, - /* 0F 05 */ { 0, &Ia_syscall }, - /* 0F 06 */ { 0, &Ia_clts }, - /* 0F 07 */ { 0, &Ia_sysret }, - /* 0F 08 */ { 0, &Ia_invd }, - /* 0F 09 */ { 0, &Ia_wbinvd }, - /* 0F 0A */ { 0, &Ia_Invalid }, - /* 0F 0B */ { 0, &Ia_ud2a }, - /* 0F 0C */ { 0, &Ia_Invalid }, - /* 0F 0D */ { 0, &Ia_prefetch }, // 3DNow! - /* 0F 0E */ { 0, &Ia_femms }, // 3DNow! - /* 0F 0F */ { GRP3DNOW }, - /* 0F 10 */ { GRPSSE(0f10) }, - /* 0F 11 */ { GRPSSE(0f11) }, - /* 0F 12 */ { GRPSSE(0f12) }, - /* 0F 13 */ { GRPSSE(0f13) }, - /* 0F 14 */ { GRPSSE(0f14) }, - /* 0F 15 */ { GRPSSE(0f15) }, - /* 0F 16 */ { GRPSSE(0f16) }, - /* 0F 17 */ { GRPSSE(0f17) }, - /* 0F 18 */ { GRPN(G16) }, - /* 0F 19 */ { 0, &Ia_Invalid }, - /* 0F 1A */ { 0, &Ia_Invalid }, - /* 0F 1B */ { 0, &Ia_Invalid }, - /* 0F 1C */ { 0, &Ia_Invalid }, - /* 0F 1D */ { 0, &Ia_Invalid }, - /* 0F 1E */ { 0, &Ia_Invalid }, - /* 0F 1F */ { 0, &Ia_multibyte_nop }, - /* 0F 20 */ { 0, &Ia_movl_Rd_Cd }, - /* 0F 21 */ { 0, &Ia_movl_Rd_Dd }, - /* 0F 22 */ { 0, &Ia_movl_Cd_Rd }, - /* 0F 23 */ { 0, &Ia_movl_Dd_Rd }, - /* 0F 24 */ { 0, &Ia_movl_Rd_Td }, - /* 0F 25 */ { 0, &Ia_Invalid }, - /* 0F 26 */ { 0, &Ia_movl_Td_Rd }, - /* 0F 27 */ { 0, &Ia_Invalid }, - /* 0F 28 */ { GRPSSE(0f28) }, - /* 0F 29 */ { GRPSSE(0f29) }, - /* 0F 2A */ { GRPSSE(0f2a) }, - /* 0F 2B */ { GRPSSE(0f2b) }, - /* 0F 2C */ { GRPSSE(0f2c) }, - /* 0F 2D */ { GRPSSE(0f2d) }, - /* 0F 2E */ { GRPSSE(0f2e) }, - /* 0F 2F */ { GRPSSE(0f2f) }, - /* 0F 30 */ { 0, &Ia_wrmsr }, - /* 0F 31 */ { 0, &Ia_rdtsc }, - /* 0F 32 */ { 0, &Ia_rdmsr }, - /* 0F 33 */ { 0, &Ia_rdpmc }, - /* 0F 34 */ { 0, &Ia_sysenter }, - /* 0F 35 */ { 0, &Ia_sysexit }, - /* 0F 36 */ { 0, &Ia_Invalid }, - /* 0F 37 */ { 0, &Ia_Invalid }, - /* 0F 38 */ { GR3BTAB(A4) }, - /* 0F 39 */ { 0, &Ia_Invalid }, - /* 0F 3A */ { GR3BTAB(A5) }, - /* 0F 3B */ { 0, &Ia_Invalid }, - /* 0F 3C */ { 0, &Ia_Invalid }, - /* 0F 3D */ { 0, &Ia_Invalid }, - /* 0F 3E */ { 0, &Ia_Invalid }, - /* 0F 3F */ { 0, &Ia_Invalid }, - /* 0F 40 */ { 0, &Ia_cmovol_Gd_Ed }, - /* 0F 41 */ { 0, &Ia_cmovnol_Gd_Ed }, - /* 0F 42 */ { 0, &Ia_cmovcl_Gd_Ed }, - /* 0F 43 */ { 0, &Ia_cmovncl_Gd_Ed }, - /* 0F 44 */ { 0, &Ia_cmovzl_Gd_Ed }, - /* 0F 45 */ { 0, &Ia_cmovnzl_Gd_Ed }, - /* 0F 46 */ { 0, &Ia_cmovnal_Gd_Ed }, - /* 0F 47 */ { 0, &Ia_cmoval_Gd_Ed }, - /* 0F 48 */ { 0, &Ia_cmovsl_Gd_Ed }, - /* 0F 49 */ { 0, &Ia_cmovnsl_Gd_Ed }, - /* 0F 4A */ { 0, &Ia_cmovpl_Gd_Ed }, - /* 0F 4B */ { 0, &Ia_cmovnpl_Gd_Ed }, - /* 0F 4C */ { 0, &Ia_cmovll_Gd_Ed }, - /* 0F 4D */ { 0, &Ia_cmovnll_Gd_Ed }, - /* 0F 4E */ { 0, &Ia_cmovngl_Gd_Ed }, - /* 0F 4F */ { 0, &Ia_cmovgl_Gd_Ed }, - /* 0F 50 */ { GRPSSE(0f50) }, - /* 0F 51 */ { GRPSSE(0f51) }, - /* 0F 52 */ { GRPSSE(0f52) }, - /* 0F 53 */ { GRPSSE(0f53) }, - /* 0F 54 */ { GRPSSE(0f54) }, - /* 0F 55 */ { GRPSSE(0f55) }, - /* 0F 56 */ { GRPSSE(0f56) }, - /* 0F 57 */ { GRPSSE(0f57) }, - /* 0F 58 */ { GRPSSE(0f58) }, - /* 0F 59 */ { GRPSSE(0f59) }, - /* 0F 5A */ { GRPSSE(0f5a) }, - /* 0F 5B */ { GRPSSE(0f5b) }, - /* 0F 5C */ { GRPSSE(0f5c) }, - /* 0F 5D */ { GRPSSE(0f5d) }, - /* 0F 5E */ { GRPSSE(0f5e) }, - /* 0F 5F */ { GRPSSE(0f5f) }, - /* 0F 60 */ { GRPSSE(0f60) }, - /* 0F 61 */ { GRPSSE(0f61) }, - /* 0F 62 */ { GRPSSE(0f62) }, - /* 0F 63 */ { GRPSSE(0f63) }, - /* 0F 64 */ { GRPSSE(0f64) }, - /* 0F 65 */ { GRPSSE(0f65) }, - /* 0F 66 */ { GRPSSE(0f66) }, - /* 0F 67 */ { GRPSSE(0f67) }, - /* 0F 68 */ { GRPSSE(0f68) }, - /* 0F 69 */ { GRPSSE(0f69) }, - /* 0F 6A */ { GRPSSE(0f6a) }, - /* 0F 6B */ { GRPSSE(0f6b) }, - /* 0F 6C */ { GRPSSE(0f6c) }, - /* 0F 6D */ { GRPSSE(0f6d) }, - /* 0F 6E */ { GRPSSE(0f6e) }, - /* 0F 6F */ { GRPSSE(0f6f) }, - /* 0F 70 */ { GRPSSE(0f70) }, - /* 0F 71 */ { GRPN(G12) }, - /* 0F 72 */ { GRPN(G13) }, - /* 0F 73 */ { GRPN(G14) }, - /* 0F 74 */ { GRPSSE(0f74) }, - /* 0F 75 */ { GRPSSE(0f75) }, - /* 0F 76 */ { GRPSSE(0f76) }, - /* 0F 77 */ { 0, &Ia_emms }, - /* 0F 78 */ { 0, &Ia_Invalid }, - /* 0F 79 */ { 0, &Ia_Invalid }, - /* 0F 7A */ { 0, &Ia_Invalid }, - /* 0F 7B */ { 0, &Ia_Invalid }, - /* 0F 7C */ { GRPSSE(0f7c) }, - /* 0F 7D */ { GRPSSE(0f7d) }, - /* 0F 7E */ { GRPSSE(0f7e) }, - /* 0F 7F */ { GRPSSE(0f7f) }, - /* 0F 80 */ { 0, &Ia_jo_Jd }, - /* 0F 81 */ { 0, &Ia_jno_Jd }, - /* 0F 82 */ { 0, &Ia_jb_Jd }, - /* 0F 83 */ { 0, &Ia_jnb_Jd }, - /* 0F 84 */ { 0, &Ia_jz_Jd }, - /* 0F 85 */ { 0, &Ia_jnz_Jd }, - /* 0F 86 */ { 0, &Ia_jbe_Jd }, - /* 0F 87 */ { 0, &Ia_jnbe_Jd }, - /* 0F 88 */ { 0, &Ia_js_Jd }, - /* 0F 89 */ { 0, &Ia_jns_Jd }, - /* 0F 8A */ { 0, &Ia_jp_Jd }, - /* 0F 8B */ { 0, &Ia_jnp_Jd }, - /* 0F 8C */ { 0, &Ia_jl_Jd }, - /* 0F 8D */ { 0, &Ia_jnl_Jd }, - /* 0F 8E */ { 0, &Ia_jle_Jd }, - /* 0F 8F */ { 0, &Ia_jnle_Jd }, - /* 0F 90 */ { 0, &Ia_seto_Eb }, - /* 0F 91 */ { 0, &Ia_setno_Eb }, - /* 0F 92 */ { 0, &Ia_setb_Eb }, - /* 0F 93 */ { 0, &Ia_setnb_Eb }, - /* 0F 94 */ { 0, &Ia_setz_Eb }, - /* 0F 95 */ { 0, &Ia_setnz_Eb }, - /* 0F 96 */ { 0, &Ia_setbe_Eb }, - /* 0F 97 */ { 0, &Ia_setnbe_Eb }, - /* 0F 98 */ { 0, &Ia_sets_Eb }, - /* 0F 99 */ { 0, &Ia_setns_Eb }, - /* 0F 9A */ { 0, &Ia_setp_Eb }, - /* 0F 9B */ { 0, &Ia_setnp_Eb }, - /* 0F 9C */ { 0, &Ia_setl_Eb }, - /* 0F 9D */ { 0, &Ia_setnl_Eb }, - /* 0F 9E */ { 0, &Ia_setle_Eb }, - /* 0F 9F */ { 0, &Ia_setnle_Eb }, - /* 0F A0 */ { 0, &Ia_pushl_FS }, - /* 0F A1 */ { 0, &Ia_popl_FS }, - /* 0F A2 */ { 0, &Ia_cpuid }, - /* 0F A3 */ { 0, &Ia_btl_Ed_Gd }, - /* 0F A4 */ { 0, &Ia_shldl_Ed_Gd_Ib }, - /* 0F A5 */ { 0, &Ia_shldl_Ed_Gd_CL }, - /* 0F A6 */ { 0, &Ia_Invalid }, - /* 0F A7 */ { 0, &Ia_Invalid }, - /* 0F A8 */ { 0, &Ia_pushl_GS }, - /* 0F A9 */ { 0, &Ia_popl_GS }, - /* 0F AA */ { 0, &Ia_rsm }, - /* 0F AB */ { 0, &Ia_btsl_Ed_Gd }, - /* 0F AC */ { 0, &Ia_shrdl_Ed_Gd_Ib }, - /* 0F AD */ { 0, &Ia_shrdl_Ed_Gd_CL }, - /* 0F AE */ { GRPN(G15) }, - /* 0F AF */ { 0, &Ia_imull_Gd_Ed }, - /* 0F B0 */ { 0, &Ia_cmpxchgb_Eb_Gb }, - /* 0F B1 */ { 0, &Ia_cmpxchgl_Ed_Gd }, - /* 0F B2 */ { 0, &Ia_lssl_Gd_Mp }, - /* 0F B3 */ { 0, &Ia_btrl_Ed_Gd }, - /* 0F B4 */ { 0, &Ia_lfsl_Gd_Mp }, - /* 0F B5 */ { 0, &Ia_lgsl_Gd_Mp }, - /* 0F B6 */ { 0, &Ia_movzbl_Gd_Eb }, - /* 0F B7 */ { 0, &Ia_movzwl_Gd_Ew }, - /* 0F B8 */ { 0, &Ia_Invalid }, - /* 0F B9 */ { 0, &Ia_ud2b }, - /* 0F BA */ { GRPN(G8EdIb) }, - /* 0F BB */ { 0, &Ia_btcl_Ed_Gd }, - /* 0F BC */ { 0, &Ia_bsfl_Gd_Ed }, - /* 0F BD */ { 0, &Ia_bsrl_Gd_Ed }, - /* 0F BE */ { 0, &Ia_movsbl_Gd_Eb }, - /* 0F BF */ { 0, &Ia_movswl_Gd_Ew }, - /* 0F C0 */ { 0, &Ia_xaddb_Eb_Gb }, - /* 0F C0 */ { 0, &Ia_xaddl_Ed_Gd }, - /* 0F C2 */ { GRPSSE(0fc2) }, - /* 0F C3 */ { GRPSSE(0fc3) }, - /* 0F C4 */ { GRPSSE(0fc4) }, - /* 0F C5 */ { GRPSSE(0fc5) }, - /* 0F C6 */ { GRPSSE(0fc6) }, - /* 0F C7 */ { GRPN(G9) }, - /* 0F C8 */ { 0, &Ia_bswapl_ERX }, - /* 0F C9 */ { 0, &Ia_bswapl_ERX }, - /* 0F CA */ { 0, &Ia_bswapl_ERX }, - /* 0F CB */ { 0, &Ia_bswapl_ERX }, - /* 0F CC */ { 0, &Ia_bswapl_ERX }, - /* 0F CD */ { 0, &Ia_bswapl_ERX }, - /* 0F CE */ { 0, &Ia_bswapl_ERX }, - /* 0F CF */ { 0, &Ia_bswapl_ERX }, - /* 0F D0 */ { GRPSSE(0fd0) }, - /* 0F D1 */ { GRPSSE(0fd1) }, - /* 0F D2 */ { GRPSSE(0fd2) }, - /* 0F D3 */ { GRPSSE(0fd3) }, - /* 0F D4 */ { GRPSSE(0fd4) }, - /* 0F D5 */ { GRPSSE(0fd5) }, - /* 0F D6 */ { GRPSSE(0fd6) }, - /* 0F D7 */ { GRPSSE(0fd7) }, - /* 0F D8 */ { GRPSSE(0fd8) }, - /* 0F D9 */ { GRPSSE(0fd9) }, - /* 0F DA */ { GRPSSE(0fda) }, - /* 0F DB */ { GRPSSE(0fdb) }, - /* 0F DC */ { GRPSSE(0fdc) }, - /* 0F DD */ { GRPSSE(0fdd) }, - /* 0F DE */ { GRPSSE(0fde) }, - /* 0F DF */ { GRPSSE(0fdf) }, - /* 0F E0 */ { GRPSSE(0fe0) }, - /* 0F E1 */ { GRPSSE(0fe1) }, - /* 0F E2 */ { GRPSSE(0fe2) }, - /* 0F E3 */ { GRPSSE(0fe3) }, - /* 0F E4 */ { GRPSSE(0fe4) }, - /* 0F E5 */ { GRPSSE(0fe5) }, - /* 0F E6 */ { GRPSSE(0fe6) }, - /* 0F E7 */ { GRPSSE(0fe7) }, - /* 0F E8 */ { GRPSSE(0fe8) }, - /* 0F E9 */ { GRPSSE(0fe9) }, - /* 0F EA */ { GRPSSE(0fea) }, - /* 0F EB */ { GRPSSE(0feb) }, - /* 0F EC */ { GRPSSE(0fec) }, - /* 0F ED */ { GRPSSE(0fed) }, - /* 0F EE */ { GRPSSE(0fee) }, - /* 0F EF */ { GRPSSE(0fef) }, - /* 0F F0 */ { GRPSSE(0ff0) }, - /* 0F F1 */ { GRPSSE(0ff1) }, - /* 0F F2 */ { GRPSSE(0ff2) }, - /* 0F F3 */ { GRPSSE(0ff3) }, - /* 0F F4 */ { GRPSSE(0ff4) }, - /* 0F F5 */ { GRPSSE(0ff5) }, - /* 0F F6 */ { GRPSSE(0ff6) }, - /* 0F F7 */ { GRPSSE(0ff7) }, - /* 0F F8 */ { GRPSSE(0ff8) }, - /* 0F F9 */ { GRPSSE(0ff9) }, - /* 0F FA */ { GRPSSE(0ffa) }, - /* 0F FB */ { GRPSSE(0ffb) }, - /* 0F FC */ { GRPSSE(0ffc) }, - /* 0F FD */ { GRPSSE(0ffd) }, - /* 0F FE */ { GRPSSE(0ffe) }, - /* 0F FF */ { 0, &Ia_Invalid } -}; - -/* ************************************************************************ */ -/* Long mode */ - -static BxDisasmOpcodeTable_t BxDisasmOpcodes64w[256*2] = { - // 256 entries for single byte opcodes - /* 00 */ { 0, &Ia_addb_Eb_Gb }, - /* 01 */ { 0, &Ia_addw_Ew_Gw }, - /* 02 */ { 0, &Ia_addb_Gb_Eb }, - /* 03 */ { 0, &Ia_addw_Gw_Ew }, - /* 04 */ { 0, &Ia_addb_AL_Ib }, - /* 05 */ { 0, &Ia_addw_AX_Iw }, - /* 06 */ { 0, &Ia_Invalid }, - /* 07 */ { 0, &Ia_Invalid }, - /* 08 */ { 0, &Ia_orb_Eb_Gb }, - /* 09 */ { 0, &Ia_orw_Ew_Gw }, - /* 0A */ { 0, &Ia_orb_Gb_Eb }, - /* 0B */ { 0, &Ia_orw_Gw_Ew }, - /* 0C */ { 0, &Ia_orb_AL_Ib }, - /* 0D */ { 0, &Ia_orw_AX_Iw }, - /* 0E */ { 0, &Ia_Invalid }, - /* 0F */ { 0, &Ia_error }, // 2 byte escape - /* 10 */ { 0, &Ia_adcb_Eb_Gb }, - /* 11 */ { 0, &Ia_adcw_Ew_Gw }, - /* 12 */ { 0, &Ia_adcb_Gb_Eb }, - /* 13 */ { 0, &Ia_adcw_Gw_Ew }, - /* 14 */ { 0, &Ia_adcb_AL_Ib }, - /* 15 */ { 0, &Ia_adcw_AX_Iw }, - /* 16 */ { 0, &Ia_Invalid }, - /* 17 */ { 0, &Ia_Invalid }, - /* 18 */ { 0, &Ia_sbbb_Eb_Gb }, - /* 19 */ { 0, &Ia_sbbw_Ew_Gw }, - /* 1A */ { 0, &Ia_sbbb_Gb_Eb }, - /* 1B */ { 0, &Ia_sbbw_Gw_Ew }, - /* 1C */ { 0, &Ia_sbbb_AL_Ib }, - /* 1D */ { 0, &Ia_sbbw_AX_Iw }, - /* 1E */ { 0, &Ia_Invalid }, - /* 1F */ { 0, &Ia_Invalid }, - /* 20 */ { 0, &Ia_andb_Eb_Gb }, - /* 21 */ { 0, &Ia_andw_Ew_Gw }, - /* 22 */ { 0, &Ia_andb_Gb_Eb }, - /* 23 */ { 0, &Ia_andw_Gw_Ew }, - /* 24 */ { 0, &Ia_andb_AL_Ib }, - /* 25 */ { 0, &Ia_andw_AX_Iw }, - /* 26 */ { 0, &Ia_prefix_es }, // ES: - /* 27 */ { 0, &Ia_Invalid }, - /* 28 */ { 0, &Ia_subb_Eb_Gb }, - /* 29 */ { 0, &Ia_subw_Ew_Gw }, - /* 2A */ { 0, &Ia_subb_Gb_Eb }, - /* 2B */ { 0, &Ia_subw_Gw_Ew }, - /* 2C */ { 0, &Ia_subb_AL_Ib }, - /* 2D */ { 0, &Ia_subw_AX_Iw }, - /* 2E */ { 0, &Ia_prefix_cs }, // CS: - /* 2F */ { 0, &Ia_Invalid }, - /* 30 */ { 0, &Ia_xorb_Eb_Gb }, - /* 31 */ { 0, &Ia_xorw_Ew_Gw }, - /* 32 */ { 0, &Ia_xorb_Gb_Eb }, - /* 33 */ { 0, &Ia_xorw_Gw_Ew }, - /* 34 */ { 0, &Ia_xorb_AL_Ib }, - /* 35 */ { 0, &Ia_xorw_AX_Iw }, - /* 36 */ { 0, &Ia_prefix_ss }, // SS: - /* 37 */ { 0, &Ia_Invalid }, - /* 38 */ { 0, &Ia_cmpb_Eb_Gb }, - /* 39 */ { 0, &Ia_cmpw_Ew_Gw }, - /* 3A */ { 0, &Ia_cmpb_Gb_Eb }, - /* 3B */ { 0, &Ia_cmpw_Gw_Ew }, - /* 3C */ { 0, &Ia_cmpb_AL_Ib }, - /* 3D */ { 0, &Ia_cmpw_AX_Iw }, - /* 3E */ { 0, &Ia_prefix_ds }, // DS: - /* 3F */ { 0, &Ia_Invalid }, - /* 40 */ { 0, &Ia_prefix_rex }, // REX: - /* 41 */ { 0, &Ia_prefix_rex }, // REX: - /* 42 */ { 0, &Ia_prefix_rex }, // REX: - /* 43 */ { 0, &Ia_prefix_rex }, // REX: - /* 44 */ { 0, &Ia_prefix_rex }, // REX: - /* 45 */ { 0, &Ia_prefix_rex }, // REX: - /* 46 */ { 0, &Ia_prefix_rex }, // REX: - /* 47 */ { 0, &Ia_prefix_rex }, // REX: - /* 48 */ { 0, &Ia_prefix_rex }, // REX: - /* 49 */ { 0, &Ia_prefix_rex }, // REX: - /* 4A */ { 0, &Ia_prefix_rex }, // REX: - /* 4B */ { 0, &Ia_prefix_rex }, // REX: - /* 4C */ { 0, &Ia_prefix_rex }, // REX: - /* 4D */ { 0, &Ia_prefix_rex }, // REX: - /* 4E */ { 0, &Ia_prefix_rex }, // REX: - /* 4F */ { 0, &Ia_prefix_rex }, // REX: - /* 50 */ { 0, &Ia_pushw_RX }, - /* 51 */ { 0, &Ia_pushw_RX }, - /* 52 */ { 0, &Ia_pushw_RX }, - /* 53 */ { 0, &Ia_pushw_RX }, - /* 54 */ { 0, &Ia_pushw_RX }, - /* 55 */ { 0, &Ia_pushw_RX }, - /* 56 */ { 0, &Ia_pushw_RX }, - /* 57 */ { 0, &Ia_pushw_RX }, - /* 58 */ { 0, &Ia_popw_RX }, - /* 59 */ { 0, &Ia_popw_RX }, - /* 5A */ { 0, &Ia_popw_RX }, - /* 5B */ { 0, &Ia_popw_RX }, - /* 5C */ { 0, &Ia_popw_RX }, - /* 5D */ { 0, &Ia_popw_RX }, - /* 5E */ { 0, &Ia_popw_RX }, - /* 5F */ { 0, &Ia_popw_RX }, - /* 60 */ { 0, &Ia_Invalid }, - /* 61 */ { 0, &Ia_Invalid }, - /* 62 */ { 0, &Ia_Invalid }, - /* 63 */ { 0, &Ia_movw_Gw_Ew }, - /* 64 */ { 0, &Ia_prefix_fs }, // FS: - /* 65 */ { 0, &Ia_prefix_gs }, // GS: - /* 66 */ { 0, &Ia_prefix_osize }, // OSIZE: - /* 67 */ { 0, &Ia_prefix_asize }, // ASIZE: - /* 68 */ { 0, &Ia_pushw_Iw }, - /* 69 */ { 0, &Ia_imulw_Gw_Ew_Iw }, - /* 6A */ { 0, &Ia_pushw_sIb }, - /* 6B */ { 0, &Ia_imulw_Gw_Ew_sIb }, - /* 6C */ { 0, &Ia_insb_Yb_DX }, - /* 6D */ { 0, &Ia_insw_Yw_DX }, - /* 6E */ { 0, &Ia_outsb_DX_Xb }, - /* 6F */ { 0, &Ia_outsw_DX_Xw }, - /* 70 */ { 0, &Ia_jo_Jb }, - /* 71 */ { 0, &Ia_jno_Jb }, - /* 72 */ { 0, &Ia_jb_Jb }, - /* 73 */ { 0, &Ia_jnb_Jb }, - /* 74 */ { 0, &Ia_jz_Jb }, - /* 75 */ { 0, &Ia_jnz_Jb }, - /* 76 */ { 0, &Ia_jbe_Jb }, - /* 77 */ { 0, &Ia_jnbe_Jb }, - /* 78 */ { 0, &Ia_js_Jb }, - /* 79 */ { 0, &Ia_jns_Jb }, - /* 7A */ { 0, &Ia_jp_Jb }, - /* 7B */ { 0, &Ia_jnp_Jb }, - /* 7C */ { 0, &Ia_jl_Jb }, - /* 7D */ { 0, &Ia_jnl_Jb }, - /* 7E */ { 0, &Ia_jle_Jb }, - /* 7F */ { 0, &Ia_jnle_Jb }, - /* 80 */ { GRPN(G1EbIb) }, - /* 81 */ { GRPN(G1EwIw) }, - /* 82 */ { 9, &Ia_Invalid }, - /* 83 */ { GRPN(G1EwIb) }, - /* 84 */ { 0, &Ia_testb_Eb_Gb }, - /* 85 */ { 0, &Ia_testw_Ew_Gw }, - /* 86 */ { 0, &Ia_xchgb_Eb_Gb }, - /* 87 */ { 0, &Ia_xchgw_Ew_Gw }, - /* 88 */ { 0, &Ia_movb_Eb_Gb }, - /* 89 */ { 0, &Ia_movw_Ew_Gw }, - /* 8A */ { 0, &Ia_movb_Gb_Eb }, - /* 8B */ { 0, &Ia_movw_Gw_Ew }, - /* 8C */ { 0, &Ia_movw_Ew_Sw }, - /* 8D */ { 0, &Ia_leaw_Gw_Mw }, - /* 8E */ { 0, &Ia_movw_Sw_Ew }, - /* 8F */ { 0, &Ia_popw_Ew }, - /* 90 */ { 0, &Ia_xchgw_RX_AX }, // handle XCHG R8w, AX - /* 91 */ { 0, &Ia_xchgw_RX_AX }, - /* 92 */ { 0, &Ia_xchgw_RX_AX }, - /* 93 */ { 0, &Ia_xchgw_RX_AX }, - /* 94 */ { 0, &Ia_xchgw_RX_AX }, - /* 95 */ { 0, &Ia_xchgw_RX_AX }, - /* 96 */ { 0, &Ia_xchgw_RX_AX }, - /* 97 */ { 0, &Ia_xchgw_RX_AX }, - /* 98 */ { 0, &Ia_cbw }, - /* 99 */ { 0, &Ia_cwd }, - /* 9A */ { 0, &Ia_Invalid }, - /* 9B */ { 0, &Ia_fwait }, - /* 9C */ { 0, &Ia_pushfw }, - /* 9D */ { 0, &Ia_popfw }, - /* 9E */ { 0, &Ia_sahf }, - /* 9F */ { 0, &Ia_lahf }, - /* A0 */ { 0, &Ia_movb_AL_Ob }, - /* A1 */ { 0, &Ia_movw_AX_Ow }, - /* A0 */ { 0, &Ia_movb_Ob_AL }, - /* A1 */ { 0, &Ia_movw_Ow_AX }, - /* A4 */ { 0, &Ia_movsb_Yb_Xb }, - /* A5 */ { 0, &Ia_movsw_Yw_Xw }, - /* A6 */ { 0, &Ia_cmpsb_Yb_Xb }, - /* A7 */ { 0, &Ia_cmpsw_Yw_Xw }, - /* A8 */ { 0, &Ia_testb_AL_Ib }, - /* A9 */ { 0, &Ia_testw_AX_Iw }, - /* AA */ { 0, &Ia_stosb_Yb_AL }, - /* AB */ { 0, &Ia_stosw_Yw_AX }, - /* AC */ { 0, &Ia_lodsb_AL_Xb }, - /* AD */ { 0, &Ia_lodsw_AX_Xw }, - /* AE */ { 0, &Ia_scasb_Yb_AL }, - /* AF */ { 0, &Ia_scasw_Yw_AX }, - /* B0 */ { 0, &Ia_movb_R8_Ib }, - /* B1 */ { 0, &Ia_movb_R8_Ib }, - /* B2 */ { 0, &Ia_movb_R8_Ib }, - /* B3 */ { 0, &Ia_movb_R8_Ib }, - /* B4 */ { 0, &Ia_movb_R8_Ib }, - /* B5 */ { 0, &Ia_movb_R8_Ib }, - /* B6 */ { 0, &Ia_movb_R8_Ib }, - /* B7 */ { 0, &Ia_movb_R8_Ib }, - /* B8 */ { 0, &Ia_movw_RX_Iw }, - /* B9 */ { 0, &Ia_movw_RX_Iw }, - /* BA */ { 0, &Ia_movw_RX_Iw }, - /* BB */ { 0, &Ia_movw_RX_Iw }, - /* BC */ { 0, &Ia_movw_RX_Iw }, - /* BD */ { 0, &Ia_movw_RX_Iw }, - /* BE */ { 0, &Ia_movw_RX_Iw }, - /* BF */ { 0, &Ia_movw_RX_Iw }, - /* C0 */ { GRPN(G2Eb) }, - /* C1 */ { GRPN(G2Ew) }, - /* C2 */ { 0, &Ia_ret_Iw }, - /* C3 */ { 0, &Ia_ret }, - /* C4 */ { 0, &Ia_Invalid }, - /* C5 */ { 0, &Ia_Invalid }, - /* C6 */ { 0, &Ia_movb_Eb_Ib }, - /* C7 */ { 0, &Ia_movw_Ew_Iw }, - /* C8 */ { 0, &Ia_enter }, - /* C9 */ { 0, &Ia_leave }, - /* CA */ { 0, &Ia_lret_Iw }, - /* CB */ { 0, &Ia_lret }, - /* CC */ { 0, &Ia_int3 }, - /* CD */ { 0, &Ia_int_Ib }, - /* CE */ { 0, &Ia_Invalid }, - /* CF */ { 0, &Ia_iretw }, - /* D0 */ { GRPN(G2EbI1) }, - /* D1 */ { GRPN(G2EwI1) }, - /* D2 */ { GRPN(G2EbCL) }, - /* D3 */ { GRPN(G2EwCL) }, - /* D4 */ { 0, &Ia_Invalid }, - /* D5 */ { 0, &Ia_Invalid }, - /* D6 */ { 0, &Ia_Invalid }, - /* D7 */ { 0, &Ia_xlat }, - /* D8 */ { GRPFP(D8) }, - /* D9 */ { GRPFP(D9) }, - /* DA */ { GRPFP(DA) }, - /* DB */ { GRPFP(DB) }, - /* DC */ { GRPFP(DC) }, - /* DD */ { GRPFP(DD) }, - /* DE */ { GRPFP(DE) }, - /* DF */ { GRPFP(DF) }, - /* E0 */ { 0, &Ia_loopne_Jb }, - /* E1 */ { 0, &Ia_loope_Jb }, - /* E2 */ { 0, &Ia_loop_Jb }, - /* E3 */ { 0, &Ia_jrcxz_Jb }, - /* E4 */ { 0, &Ia_inb_AL_Ib }, - /* E5 */ { 0, &Ia_inw_AX_Ib }, - /* E6 */ { 0, &Ia_outb_Ib_AL }, - /* E7 */ { 0, &Ia_outw_Ib_AX }, - /* E8 */ { 0, &Ia_call_Jd }, - /* E9 */ { 0, &Ia_jmp_Jd }, - /* EA */ { 0, &Ia_Invalid }, - /* EB */ { 0, &Ia_jmp_Jb }, - /* EC */ { 0, &Ia_inb_AL_DX }, - /* ED */ { 0, &Ia_inw_AX_DX }, - /* EE */ { 0, &Ia_outb_DX_AL }, - /* EF */ { 0, &Ia_outw_DX_AX }, - /* F0 */ { 0, &Ia_prefix_lock }, // LOCK: - /* F1 */ { 0, &Ia_int1 }, - /* F2 */ { 0, &Ia_prefix_repne }, // REPNE: - /* F3 */ { 0, &Ia_prefix_rep }, // REP: - /* F4 */ { 0, &Ia_hlt }, - /* F5 */ { 0, &Ia_cmc }, - /* F6 */ { GRPN(G3Eb) }, - /* F7 */ { GRPN(G3Ew) }, - /* F8 */ { 0, &Ia_clc }, - /* F9 */ { 0, &Ia_stc }, - /* FA */ { 0, &Ia_cli }, - /* FB */ { 0, &Ia_sti }, - /* FC */ { 0, &Ia_cld }, - /* FD */ { 0, &Ia_std }, - /* FE */ { GRPN(G4) }, - /* FF */ { GRPN(G5w) }, - - // 256 entries for two byte opcodes - /* 0F 00 */ { GRPN(G6) }, - /* 0F 01 */ { GRPN(G7) }, - /* 0F 02 */ { 0, &Ia_larw_Gw_Ew }, - /* 0F 03 */ { 0, &Ia_lslw_Gw_Ew }, - /* 0F 04 */ { 0, &Ia_Invalid }, - /* 0F 05 */ { 0, &Ia_syscall }, - /* 0F 06 */ { 0, &Ia_clts }, - /* 0F 07 */ { 0, &Ia_sysret }, - /* 0F 08 */ { 0, &Ia_invd }, - /* 0F 09 */ { 0, &Ia_wbinvd }, - /* 0F 0A */ { 0, &Ia_Invalid }, - /* 0F 0B */ { 0, &Ia_ud2a }, - /* 0F 0C */ { 0, &Ia_Invalid }, - /* 0F 0D */ { 0, &Ia_prefetch }, // 3DNow! - /* 0F 0E */ { 0, &Ia_femms }, // 3DNow! - /* 0F 0F */ { GRP3DNOW }, - /* 0F 10 */ { GRPSSE(0f10) }, - /* 0F 11 */ { GRPSSE(0f11) }, - /* 0F 12 */ { GRPSSE(0f12) }, - /* 0F 13 */ { GRPSSE(0f13) }, - /* 0F 14 */ { GRPSSE(0f14) }, - /* 0F 15 */ { GRPSSE(0f15) }, - /* 0F 16 */ { GRPSSE(0f16) }, - /* 0F 17 */ { GRPSSE(0f17) }, - /* 0F 18 */ { GRPN(G16) }, - /* 0F 19 */ { 0, &Ia_Invalid }, - /* 0F 1A */ { 0, &Ia_Invalid }, - /* 0F 1B */ { 0, &Ia_Invalid }, - /* 0F 1C */ { 0, &Ia_Invalid }, - /* 0F 1D */ { 0, &Ia_Invalid }, - /* 0F 1E */ { 0, &Ia_Invalid }, - /* 0F 1F */ { 0, &Ia_multibyte_nop }, - /* 0F 20 */ { 0, &Ia_movq_Rq_Cq }, - /* 0F 21 */ { 0, &Ia_movq_Rq_Dq }, - /* 0F 22 */ { 0, &Ia_movq_Cq_Rq }, - /* 0F 23 */ { 0, &Ia_movq_Dq_Rq }, - /* 0F 24 */ { 0, &Ia_Invalid }, - /* 0F 25 */ { 0, &Ia_Invalid }, - /* 0F 26 */ { 0, &Ia_Invalid }, - /* 0F 27 */ { 0, &Ia_Invalid }, - /* 0F 28 */ { GRPSSE(0f28) }, - /* 0F 29 */ { GRPSSE(0f29) }, - /* 0F 2A */ { GRPSSE(0f2a) }, - /* 0F 2B */ { GRPSSE(0f2b) }, - /* 0F 2C */ { GRPSSE(0f2c) }, - /* 0F 2D */ { GRPSSE(0f2d) }, - /* 0F 2E */ { GRPSSE(0f2e) }, - /* 0F 2F */ { GRPSSE(0f2f) }, - /* 0F 30 */ { 0, &Ia_wrmsr }, - /* 0F 31 */ { 0, &Ia_rdtsc }, - /* 0F 32 */ { 0, &Ia_rdmsr }, - /* 0F 33 */ { 0, &Ia_rdpmc }, - /* 0F 34 */ { 0, &Ia_sysenter }, - /* 0F 35 */ { 0, &Ia_sysexit }, - /* 0F 36 */ { 0, &Ia_Invalid }, - /* 0F 37 */ { 0, &Ia_Invalid }, - /* 0F 38 */ { GR3BTAB(A4) }, - /* 0F 39 */ { 0, &Ia_Invalid }, - /* 0F 3A */ { GR3BTAB(A5) }, - /* 0F 3B */ { 0, &Ia_Invalid }, - /* 0F 3C */ { 0, &Ia_Invalid }, - /* 0F 3D */ { 0, &Ia_Invalid }, - /* 0F 3E */ { 0, &Ia_Invalid }, - /* 0F 3F */ { 0, &Ia_Invalid }, - /* 0F 40 */ { 0, &Ia_cmovow_Gw_Ew }, - /* 0F 41 */ { 0, &Ia_cmovnow_Gw_Ew }, - /* 0F 42 */ { 0, &Ia_cmovcw_Gw_Ew }, - /* 0F 43 */ { 0, &Ia_cmovncw_Gw_Ew }, - /* 0F 44 */ { 0, &Ia_cmovzw_Gw_Ew }, - /* 0F 45 */ { 0, &Ia_cmovnzw_Gw_Ew }, - /* 0F 46 */ { 0, &Ia_cmovnaw_Gw_Ew }, - /* 0F 47 */ { 0, &Ia_cmovaw_Gw_Ew }, - /* 0F 48 */ { 0, &Ia_cmovsw_Gw_Ew }, - /* 0F 49 */ { 0, &Ia_cmovnsw_Gw_Ew }, - /* 0F 4A */ { 0, &Ia_cmovpw_Gw_Ew }, - /* 0F 4B */ { 0, &Ia_cmovnpw_Gw_Ew }, - /* 0F 4C */ { 0, &Ia_cmovlw_Gw_Ew }, - /* 0F 4D */ { 0, &Ia_cmovnlw_Gw_Ew }, - /* 0F 4E */ { 0, &Ia_cmovngw_Gw_Ew }, - /* 0F 4F */ { 0, &Ia_cmovgw_Gw_Ew }, - /* 0F 50 */ { GRPSSE(0f50) }, - /* 0F 51 */ { GRPSSE(0f51) }, - /* 0F 52 */ { GRPSSE(0f52) }, - /* 0F 53 */ { GRPSSE(0f53) }, - /* 0F 54 */ { GRPSSE(0f54) }, - /* 0F 55 */ { GRPSSE(0f55) }, - /* 0F 56 */ { GRPSSE(0f56) }, - /* 0F 57 */ { GRPSSE(0f57) }, - /* 0F 58 */ { GRPSSE(0f58) }, - /* 0F 59 */ { GRPSSE(0f59) }, - /* 0F 5A */ { GRPSSE(0f5a) }, - /* 0F 5B */ { GRPSSE(0f5b) }, - /* 0F 5C */ { GRPSSE(0f5c) }, - /* 0F 5D */ { GRPSSE(0f5d) }, - /* 0F 5E */ { GRPSSE(0f5e) }, - /* 0F 5F */ { GRPSSE(0f5f) }, - /* 0F 60 */ { GRPSSE(0f60) }, - /* 0F 61 */ { GRPSSE(0f61) }, - /* 0F 62 */ { GRPSSE(0f62) }, - /* 0F 63 */ { GRPSSE(0f63) }, - /* 0F 64 */ { GRPSSE(0f64) }, - /* 0F 65 */ { GRPSSE(0f65) }, - /* 0F 66 */ { GRPSSE(0f66) }, - /* 0F 67 */ { GRPSSE(0f67) }, - /* 0F 68 */ { GRPSSE(0f68) }, - /* 0F 69 */ { GRPSSE(0f69) }, - /* 0F 6A */ { GRPSSE(0f6a) }, - /* 0F 6B */ { GRPSSE(0f6b) }, - /* 0F 6C */ { GRPSSE(0f6c) }, - /* 0F 6D */ { GRPSSE(0f6d) }, - /* 0F 6E */ { GRPSSE(0f6e) }, - /* 0F 6F */ { GRPSSE(0f6f) }, - /* 0F 70 */ { GRPSSE(0f70) }, - /* 0F 71 */ { GRPN(G12) }, - /* 0F 72 */ { GRPN(G13) }, - /* 0F 73 */ { GRPN(G14) }, - /* 0F 74 */ { GRPSSE(0f74) }, - /* 0F 75 */ { GRPSSE(0f75) }, - /* 0F 76 */ { GRPSSE(0f76) }, - /* 0F 77 */ { 0, &Ia_emms }, - /* 0F 78 */ { 0, &Ia_Invalid }, - /* 0F 79 */ { 0, &Ia_Invalid }, - /* 0F 7A */ { 0, &Ia_Invalid }, - /* 0F 7B */ { 0, &Ia_Invalid }, - /* 0F 7C */ { GRPSSE(0f7c) }, - /* 0F 7D */ { GRPSSE(0f7d) }, - /* 0F 7E */ { GRPSSE(0f7e) }, - /* 0F 7F */ { GRPSSE(0f7f) }, - /* 0F 80 */ { 0, &Ia_jo_Jd }, - /* 0F 81 */ { 0, &Ia_jno_Jd }, - /* 0F 82 */ { 0, &Ia_jb_Jd }, - /* 0F 83 */ { 0, &Ia_jnb_Jd }, - /* 0F 84 */ { 0, &Ia_jz_Jd }, - /* 0F 85 */ { 0, &Ia_jnz_Jd }, - /* 0F 86 */ { 0, &Ia_jbe_Jd }, - /* 0F 87 */ { 0, &Ia_jnbe_Jd }, - /* 0F 88 */ { 0, &Ia_js_Jd }, - /* 0F 89 */ { 0, &Ia_jns_Jd }, - /* 0F 8A */ { 0, &Ia_jp_Jd }, - /* 0F 8B */ { 0, &Ia_jnp_Jd }, - /* 0F 8C */ { 0, &Ia_jl_Jd }, - /* 0F 8D */ { 0, &Ia_jnl_Jd }, - /* 0F 8E */ { 0, &Ia_jle_Jd }, - /* 0F 8F */ { 0, &Ia_jnle_Jd }, - /* 0F 90 */ { 0, &Ia_seto_Eb }, - /* 0F 91 */ { 0, &Ia_setno_Eb }, - /* 0F 92 */ { 0, &Ia_setb_Eb }, - /* 0F 93 */ { 0, &Ia_setnb_Eb }, - /* 0F 94 */ { 0, &Ia_setz_Eb }, - /* 0F 95 */ { 0, &Ia_setnz_Eb }, - /* 0F 96 */ { 0, &Ia_setbe_Eb }, - /* 0F 97 */ { 0, &Ia_setnbe_Eb }, - /* 0F 98 */ { 0, &Ia_sets_Eb }, - /* 0F 99 */ { 0, &Ia_setns_Eb }, - /* 0F 9A */ { 0, &Ia_setp_Eb }, - /* 0F 9B */ { 0, &Ia_setnp_Eb }, - /* 0F 9C */ { 0, &Ia_setl_Eb }, - /* 0F 9D */ { 0, &Ia_setnl_Eb }, - /* 0F 9E */ { 0, &Ia_setle_Eb }, - /* 0F 9F */ { 0, &Ia_setnle_Eb }, - /* 0F A0 */ { 0, &Ia_pushw_FS }, - /* 0F A1 */ { 0, &Ia_popw_FS }, - /* 0F A2 */ { 0, &Ia_cpuid }, - /* 0F A3 */ { 0, &Ia_btw_Ew_Gw }, - /* 0F A4 */ { 0, &Ia_shldw_Ew_Gw_Ib }, - /* 0F A5 */ { 0, &Ia_shldw_Ew_Gw_CL }, - /* 0F A6 */ { 0, &Ia_Invalid }, - /* 0F A7 */ { 0, &Ia_Invalid }, - /* 0F A8 */ { 0, &Ia_pushw_GS }, - /* 0F A9 */ { 0, &Ia_popw_GS }, - /* 0F AA */ { 0, &Ia_rsm }, - /* 0F AB */ { 0, &Ia_btsw_Ew_Gw }, - /* 0F AC */ { 0, &Ia_shrdw_Ew_Gw_Ib }, - /* 0F AD */ { 0, &Ia_shrdw_Ew_Gw_CL }, - /* 0F AE */ { GRPN(G15) }, - /* 0F AF */ { 0, &Ia_imulw_Gw_Ew }, - /* 0F B0 */ { 0, &Ia_cmpxchgb_Eb_Gb }, - /* 0F B1 */ { 0, &Ia_cmpxchgw_Ew_Gw }, - /* 0F B2 */ { 0, &Ia_lssw_Gw_Mp }, - /* 0F B3 */ { 0, &Ia_btrw_Ew_Gw }, - /* 0F B4 */ { 0, &Ia_lfsw_Gw_Mp }, - /* 0F B5 */ { 0, &Ia_lgsw_Gw_Mp }, - /* 0F B6 */ { 0, &Ia_movzbw_Gw_Eb }, - /* 0F B7 */ { 0, &Ia_movw_Gw_Ew }, - /* 0F B8 */ { 0, &Ia_Invalid }, - /* 0F B9 */ { 0, &Ia_ud2b }, - /* 0F BA */ { GRPN(G8EwIb) }, - /* 0F BB */ { 0, &Ia_btcw_Ew_Gw }, - /* 0F BC */ { 0, &Ia_bsfw_Gw_Ew }, - /* 0F BD */ { 0, &Ia_bsrw_Gw_Ew }, - /* 0F BE */ { 0, &Ia_movsbw_Gw_Eb }, - /* 0F BF */ { 0, &Ia_movw_Gw_Ew }, - /* 0F C0 */ { 0, &Ia_xaddb_Eb_Gb }, - /* 0F C0 */ { 0, &Ia_xaddw_Ew_Gw }, - /* 0F C2 */ { GRPSSE(0fc2) }, - /* 0F C3 */ { GRPSSE(0fc3) }, - /* 0F C4 */ { GRPSSE(0fc4) }, - /* 0F C5 */ { GRPSSE(0fc5) }, - /* 0F C6 */ { GRPSSE(0fc6) }, - /* 0F C7 */ { GRPN(G9) }, - /* 0F C8 */ { 0, &Ia_bswapl_ERX }, - /* 0F C9 */ { 0, &Ia_bswapl_ERX }, - /* 0F CA */ { 0, &Ia_bswapl_ERX }, - /* 0F CB */ { 0, &Ia_bswapl_ERX }, - /* 0F CC */ { 0, &Ia_bswapl_ERX }, - /* 0F CD */ { 0, &Ia_bswapl_ERX }, - /* 0F CE */ { 0, &Ia_bswapl_ERX }, - /* 0F CF */ { 0, &Ia_bswapl_ERX }, - /* 0F D0 */ { GRPSSE(0fd0) }, - /* 0F D1 */ { GRPSSE(0fd1) }, - /* 0F D2 */ { GRPSSE(0fd2) }, - /* 0F D3 */ { GRPSSE(0fd3) }, - /* 0F D4 */ { GRPSSE(0fd4) }, - /* 0F D5 */ { GRPSSE(0fd5) }, - /* 0F D6 */ { GRPSSE(0fd6) }, - /* 0F D7 */ { GRPSSE(0fd7) }, - /* 0F D8 */ { GRPSSE(0fd8) }, - /* 0F D9 */ { GRPSSE(0fd9) }, - /* 0F DA */ { GRPSSE(0fda) }, - /* 0F DB */ { GRPSSE(0fdb) }, - /* 0F DC */ { GRPSSE(0fdc) }, - /* 0F DD */ { GRPSSE(0fdd) }, - /* 0F DE */ { GRPSSE(0fde) }, - /* 0F DF */ { GRPSSE(0fdf) }, - /* 0F E0 */ { GRPSSE(0fe0) }, - /* 0F E1 */ { GRPSSE(0fe1) }, - /* 0F E2 */ { GRPSSE(0fe2) }, - /* 0F E3 */ { GRPSSE(0fe3) }, - /* 0F E4 */ { GRPSSE(0fe4) }, - /* 0F E5 */ { GRPSSE(0fe5) }, - /* 0F E6 */ { GRPSSE(0fe6) }, - /* 0F E7 */ { GRPSSE(0fe7) }, - /* 0F E8 */ { GRPSSE(0fe8) }, - /* 0F E9 */ { GRPSSE(0fe9) }, - /* 0F EA */ { GRPSSE(0fea) }, - /* 0F EB */ { GRPSSE(0feb) }, - /* 0F EC */ { GRPSSE(0fec) }, - /* 0F ED */ { GRPSSE(0fed) }, - /* 0F EE */ { GRPSSE(0fee) }, - /* 0F EF */ { GRPSSE(0fef) }, - /* 0F F0 */ { GRPSSE(0ff0) }, - /* 0F F1 */ { GRPSSE(0ff1) }, - /* 0F F2 */ { GRPSSE(0ff2) }, - /* 0F F3 */ { GRPSSE(0ff3) }, - /* 0F F4 */ { GRPSSE(0ff4) }, - /* 0F F5 */ { GRPSSE(0ff5) }, - /* 0F F6 */ { GRPSSE(0ff6) }, - /* 0F F7 */ { GRPSSE(0ff7) }, - /* 0F F8 */ { GRPSSE(0ff8) }, - /* 0F F9 */ { GRPSSE(0ff9) }, - /* 0F FA */ { GRPSSE(0ffa) }, - /* 0F FB */ { GRPSSE(0ffb) }, - /* 0F FC */ { GRPSSE(0ffc) }, - /* 0F FD */ { GRPSSE(0ffd) }, - /* 0F FE */ { GRPSSE(0ffe) }, - /* 0F FF */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmOpcodes64d[256*2] = { - // 256 entries for single byte opcodes - /* 00 */ { 0, &Ia_addb_Eb_Gb }, - /* 01 */ { 0, &Ia_addl_Ed_Gd }, - /* 02 */ { 0, &Ia_addb_Gb_Eb }, - /* 03 */ { 0, &Ia_addl_Gd_Ed }, - /* 04 */ { 0, &Ia_addb_AL_Ib, }, - /* 05 */ { 0, &Ia_addl_EAX_Id, }, - /* 06 */ { 0, &Ia_Invalid }, - /* 07 */ { 0, &Ia_Invalid }, - /* 08 */ { 0, &Ia_orb_Eb_Gb }, - /* 09 */ { 0, &Ia_orl_Ed_Gd }, - /* 0A */ { 0, &Ia_orb_Gb_Eb }, - /* 0B */ { 0, &Ia_orl_Gd_Ed }, - /* 0C */ { 0, &Ia_orb_AL_Ib }, - /* 0D */ { 0, &Ia_orl_EAX_Id }, - /* 0E */ { 0, &Ia_Invalid }, - /* 0F */ { 0, &Ia_error }, // 2 byte escape - /* 10 */ { 0, &Ia_adcb_Eb_Gb }, - /* 11 */ { 0, &Ia_adcl_Ed_Gd }, - /* 12 */ { 0, &Ia_adcb_Gb_Eb }, - /* 13 */ { 0, &Ia_adcl_Gd_Ed }, - /* 14 */ { 0, &Ia_adcb_AL_Ib }, - /* 15 */ { 0, &Ia_adcl_EAX_Id }, - /* 16 */ { 0, &Ia_Invalid }, - /* 17 */ { 0, &Ia_Invalid }, - /* 18 */ { 0, &Ia_sbbb_Eb_Gb }, - /* 19 */ { 0, &Ia_sbbl_Ed_Gd }, - /* 1A */ { 0, &Ia_sbbb_Gb_Eb }, - /* 1B */ { 0, &Ia_sbbl_Gd_Ed }, - /* 1C */ { 0, &Ia_sbbb_AL_Ib }, - /* 1D */ { 0, &Ia_sbbl_EAX_Id }, - /* 1E */ { 0, &Ia_Invalid }, - /* 1F */ { 0, &Ia_Invalid }, - /* 20 */ { 0, &Ia_andb_Eb_Gb }, - /* 21 */ { 0, &Ia_andl_Ed_Gd }, - /* 22 */ { 0, &Ia_andb_Gb_Eb }, - /* 23 */ { 0, &Ia_andl_Gd_Ed }, - /* 24 */ { 0, &Ia_andb_AL_Ib }, - /* 25 */ { 0, &Ia_andl_EAX_Id }, - /* 26 */ { 0, &Ia_prefix_es }, // ES: - /* 27 */ { 0, &Ia_Invalid }, - /* 28 */ { 0, &Ia_subb_Eb_Gb }, - /* 29 */ { 0, &Ia_subl_Ed_Gd }, - /* 2A */ { 0, &Ia_subb_Gb_Eb }, - /* 2B */ { 0, &Ia_subl_Gd_Ed }, - /* 2C */ { 0, &Ia_subb_AL_Ib }, - /* 2D */ { 0, &Ia_subl_EAX_Id }, - /* 2E */ { 0, &Ia_prefix_cs }, // CS: - /* 2F */ { 0, &Ia_Invalid }, - /* 30 */ { 0, &Ia_xorb_Eb_Gb }, - /* 31 */ { 0, &Ia_xorl_Ed_Gd }, - /* 32 */ { 0, &Ia_xorb_Gb_Eb }, - /* 33 */ { 0, &Ia_xorl_Gd_Ed }, - /* 34 */ { 0, &Ia_xorb_AL_Ib }, - /* 35 */ { 0, &Ia_xorl_EAX_Id }, - /* 36 */ { 0, &Ia_prefix_ss }, // SS: - /* 37 */ { 0, &Ia_Invalid }, - /* 38 */ { 0, &Ia_cmpb_Eb_Gb }, - /* 39 */ { 0, &Ia_cmpl_Ed_Gd }, - /* 3A */ { 0, &Ia_cmpb_Gb_Eb }, - /* 3B */ { 0, &Ia_cmpl_Gd_Ed }, - /* 3C */ { 0, &Ia_cmpb_AL_Ib }, - /* 3D */ { 0, &Ia_cmpl_EAX_Id }, - /* 3E */ { 0, &Ia_prefix_ds }, // DS: - /* 3F */ { 0, &Ia_Invalid }, - /* 40 */ { 0, &Ia_prefix_rex }, // REX: - /* 41 */ { 0, &Ia_prefix_rex }, // REX: - /* 42 */ { 0, &Ia_prefix_rex }, // REX: - /* 43 */ { 0, &Ia_prefix_rex }, // REX: - /* 44 */ { 0, &Ia_prefix_rex }, // REX: - /* 45 */ { 0, &Ia_prefix_rex }, // REX: - /* 46 */ { 0, &Ia_prefix_rex }, // REX: - /* 47 */ { 0, &Ia_prefix_rex }, // REX: - /* 48 */ { 0, &Ia_prefix_rex }, // REX: - /* 49 */ { 0, &Ia_prefix_rex }, // REX: - /* 4A */ { 0, &Ia_prefix_rex }, // REX: - /* 4B */ { 0, &Ia_prefix_rex }, // REX: - /* 4C */ { 0, &Ia_prefix_rex }, // REX: - /* 4D */ { 0, &Ia_prefix_rex }, // REX: - /* 4E */ { 0, &Ia_prefix_rex }, // REX: - /* 4F */ { 0, &Ia_prefix_rex }, // REX: - /* 50 */ { 0, &Ia_pushq_RRX }, - /* 51 */ { 0, &Ia_pushq_RRX }, - /* 52 */ { 0, &Ia_pushq_RRX }, - /* 53 */ { 0, &Ia_pushq_RRX }, - /* 54 */ { 0, &Ia_pushq_RRX }, - /* 55 */ { 0, &Ia_pushq_RRX }, - /* 56 */ { 0, &Ia_pushq_RRX }, - /* 57 */ { 0, &Ia_pushq_RRX }, - /* 58 */ { 0, &Ia_popq_RRX }, - /* 59 */ { 0, &Ia_popq_RRX }, - /* 5A */ { 0, &Ia_popq_RRX }, - /* 5B */ { 0, &Ia_popq_RRX }, - /* 5C */ { 0, &Ia_popq_RRX }, - /* 5D */ { 0, &Ia_popq_RRX }, - /* 5E */ { 0, &Ia_popq_RRX }, - /* 5F */ { 0, &Ia_popq_RRX }, - /* 60 */ { 0, &Ia_Invalid }, - /* 61 */ { 0, &Ia_Invalid }, - /* 62 */ { 0, &Ia_Invalid }, - /* 63 */ { 0, &Ia_movl_Gd_Ed }, - /* 64 */ { 0, &Ia_prefix_fs }, // FS: - /* 65 */ { 0, &Ia_prefix_gs }, // GS: - /* 66 */ { 0, &Ia_prefix_osize }, // OSIZE: - /* 67 */ { 0, &Ia_prefix_asize }, // ASIZE: - /* 68 */ { 0, &Ia_pushq_sId }, - /* 69 */ { 0, &Ia_imull_Gd_Ed_Id }, - /* 6A */ { 0, &Ia_pushq_sIb }, - /* 6B */ { 0, &Ia_imull_Gd_Ed_sIb }, - /* 6C */ { 0, &Ia_insb_Yb_DX }, - /* 6D */ { 0, &Ia_insl_Yd_DX }, - /* 6E */ { 0, &Ia_outsb_DX_Xb }, - /* 6F */ { 0, &Ia_outsl_DX_Xd }, - /* 70 */ { 0, &Ia_jo_Jb }, - /* 71 */ { 0, &Ia_jno_Jb }, - /* 72 */ { 0, &Ia_jb_Jb }, - /* 73 */ { 0, &Ia_jnb_Jb }, - /* 74 */ { 0, &Ia_jz_Jb }, - /* 75 */ { 0, &Ia_jnz_Jb }, - /* 76 */ { 0, &Ia_jbe_Jb }, - /* 77 */ { 0, &Ia_jnbe_Jb }, - /* 78 */ { 0, &Ia_js_Jb }, - /* 79 */ { 0, &Ia_jns_Jb }, - /* 7A */ { 0, &Ia_jp_Jb }, - /* 7B */ { 0, &Ia_jnp_Jb }, - /* 7C */ { 0, &Ia_jl_Jb }, - /* 7D */ { 0, &Ia_jnl_Jb }, - /* 7E */ { 0, &Ia_jle_Jb }, - /* 7F */ { 0, &Ia_jnle_Jb }, - /* 80 */ { GRPN(G1EbIb) }, - /* 81 */ { GRPN(G1EdId) }, - /* 82 */ { 0, &Ia_Invalid }, - /* 83 */ { GRPN(G1EdIb) }, - /* 84 */ { 0, &Ia_testb_Eb_Gb }, - /* 85 */ { 0, &Ia_testl_Ed_Gd }, - /* 86 */ { 0, &Ia_xchgb_Eb_Gb }, - /* 87 */ { 0, &Ia_xchgl_Ed_Gd }, - /* 88 */ { 0, &Ia_movb_Eb_Gb }, - /* 89 */ { 0, &Ia_movl_Ed_Gd }, - /* 8A */ { 0, &Ia_movb_Gb_Eb }, - /* 8B */ { 0, &Ia_movl_Gd_Ed }, - /* 8C */ { 0, &Ia_movw_Ew_Sw }, - /* 8D */ { 0, &Ia_leal_Gd_Md }, - /* 8E */ { 0, &Ia_movw_Sw_Ew }, - /* 8F */ { 0, &Ia_popq_Eq }, - /* 90 */ { 0, &Ia_xchgl_ERX_EAX }, // handle XCHG R8d, EAX - /* 91 */ { 0, &Ia_xchgl_ERX_EAX }, - /* 92 */ { 0, &Ia_xchgl_ERX_EAX }, - /* 93 */ { 0, &Ia_xchgl_ERX_EAX }, - /* 94 */ { 0, &Ia_xchgl_ERX_EAX }, - /* 95 */ { 0, &Ia_xchgl_ERX_EAX }, - /* 96 */ { 0, &Ia_xchgl_ERX_EAX }, - /* 97 */ { 0, &Ia_xchgl_ERX_EAX }, - /* 98 */ { 0, &Ia_cwde }, - /* 99 */ { 0, &Ia_cdq }, - /* 9A */ { 0, &Ia_Invalid }, - /* 9B */ { 0, &Ia_fwait }, - /* 9C */ { 0, &Ia_pushfq }, - /* 9D */ { 0, &Ia_popfq }, - /* 9E */ { 0, &Ia_sahf }, - /* 9F */ { 0, &Ia_lahf }, - /* A0 */ { 0, &Ia_movb_AL_Ob }, - /* A1 */ { 0, &Ia_movl_EAX_Od }, - /* A0 */ { 0, &Ia_movb_Ob_AL }, - /* A1 */ { 0, &Ia_movl_Od_EAX }, - /* A4 */ { 0, &Ia_movsb_Yb_Xb }, - /* A5 */ { 0, &Ia_movsl_Yd_Xd }, - /* A6 */ { 0, &Ia_cmpsb_Yb_Xb }, - /* A7 */ { 0, &Ia_cmpsl_Yd_Xd }, - /* A8 */ { 0, &Ia_testb_AL_Ib }, - /* A9 */ { 0, &Ia_testl_EAX_Id }, - /* AA */ { 0, &Ia_stosb_Yb_AL }, - /* AB */ { 0, &Ia_stosl_Yd_EAX }, - /* AC */ { 0, &Ia_lodsb_AL_Xb }, - /* AD */ { 0, &Ia_lodsl_EAX_Xd }, - /* AE */ { 0, &Ia_scasb_Yb_AL }, - /* AF */ { 0, &Ia_scasl_Yd_EAX }, - /* B0 */ { 0, &Ia_movb_R8_Ib }, - /* B1 */ { 0, &Ia_movb_R8_Ib }, - /* B2 */ { 0, &Ia_movb_R8_Ib }, - /* B3 */ { 0, &Ia_movb_R8_Ib }, - /* B4 */ { 0, &Ia_movb_R8_Ib }, - /* B5 */ { 0, &Ia_movb_R8_Ib }, - /* B6 */ { 0, &Ia_movb_R8_Ib }, - /* B7 */ { 0, &Ia_movb_R8_Ib }, - /* B8 */ { 0, &Ia_movl_ERX_Id }, - /* B9 */ { 0, &Ia_movl_ERX_Id }, - /* BA */ { 0, &Ia_movl_ERX_Id }, - /* BB */ { 0, &Ia_movl_ERX_Id }, - /* BC */ { 0, &Ia_movl_ERX_Id }, - /* BD */ { 0, &Ia_movl_ERX_Id }, - /* BE */ { 0, &Ia_movl_ERX_Id }, - /* BF */ { 0, &Ia_movl_ERX_Id }, - /* C0 */ { GRPN(G2Eb) }, - /* C1 */ { GRPN(G2Ed) }, - /* C2 */ { 0, &Ia_ret_Iw }, - /* C3 */ { 0, &Ia_ret }, - /* C4 */ { 0, &Ia_Invalid }, - /* C5 */ { 0, &Ia_Invalid }, - /* C6 */ { 0, &Ia_movb_Eb_Ib }, - /* C7 */ { 0, &Ia_movl_Ed_Id }, - /* C8 */ { 0, &Ia_enter }, - /* C9 */ { 0, &Ia_leave }, - /* CA */ { 0, &Ia_lret_Iw }, - /* CB */ { 0, &Ia_lret }, - /* CC */ { 0, &Ia_int3 }, - /* CD */ { 0, &Ia_int_Ib }, - /* CE */ { 0, &Ia_Invalid }, - /* CF */ { 0, &Ia_iretl }, - /* D0 */ { GRPN(G2EbI1) }, - /* D1 */ { GRPN(G2EdI1) }, - /* D2 */ { GRPN(G2EbCL) }, - /* D3 */ { GRPN(G2EdCL) }, - /* D4 */ { 0, &Ia_Invalid }, - /* D5 */ { 0, &Ia_Invalid }, - /* D6 */ { 0, &Ia_Invalid }, - /* D7 */ { 0, &Ia_xlat }, - /* D8 */ { GRPFP(D8) }, - /* D9 */ { GRPFP(D9) }, - /* DA */ { GRPFP(DA) }, - /* DB */ { GRPFP(DB) }, - /* DC */ { GRPFP(DC) }, - /* DD */ { GRPFP(DD) }, - /* DE */ { GRPFP(DE) }, - /* DF */ { GRPFP(DF) }, - /* E0 */ { 0, &Ia_loopne_Jb }, - /* E1 */ { 0, &Ia_loope_Jb }, - /* E2 */ { 0, &Ia_loop_Jb }, - /* E3 */ { 0, &Ia_jrcxz_Jb }, - /* E4 */ { 0, &Ia_inb_AL_Ib }, - /* E5 */ { 0, &Ia_inl_EAX_Ib }, - /* E6 */ { 0, &Ia_outb_Ib_AL }, - /* E7 */ { 0, &Ia_outl_Ib_EAX }, - /* E8 */ { 0, &Ia_call_Jd }, - /* E9 */ { 0, &Ia_jmp_Jd }, - /* EA */ { 0, &Ia_Invalid }, - /* EB */ { 0, &Ia_jmp_Jb }, - /* EC */ { 0, &Ia_inb_AL_DX }, - /* ED */ { 0, &Ia_inl_EAX_DX }, - /* EE */ { 0, &Ia_outb_DX_AL }, - /* EF */ { 0, &Ia_outl_DX_EAX }, - /* F0 */ { 0, &Ia_prefix_lock }, // LOCK: - /* F1 */ { 0, &Ia_int1 }, - /* F2 */ { 0, &Ia_prefix_repne }, // REPNE: - /* F3 */ { 0, &Ia_prefix_rep }, // REP: - /* F4 */ { 0, &Ia_hlt }, - /* F5 */ { 0, &Ia_cmc }, - /* F6 */ { GRPN(G3Eb) }, - /* F7 */ { GRPN(G3Ed) }, - /* F8 */ { 0, &Ia_clc }, - /* F9 */ { 0, &Ia_stc }, - /* FA */ { 0, &Ia_cli }, - /* FB */ { 0, &Ia_sti }, - /* FC */ { 0, &Ia_cld }, - /* FD */ { 0, &Ia_std }, - /* FE */ { GRPN(G4) }, - /* FF */ { GRPN(64G5d) }, - - // 256 entries for two byte opcodes - /* 0F 00 */ { GRPN(G6) }, - /* 0F 01 */ { GRPN(G7) }, - /* 0F 02 */ { 0, &Ia_larl_Gd_Ew }, - /* 0F 03 */ { 0, &Ia_lsll_Gd_Ew }, - /* 0F 04 */ { 0, &Ia_Invalid }, - /* 0F 05 */ { 0, &Ia_syscall }, - /* 0F 06 */ { 0, &Ia_clts }, - /* 0F 07 */ { 0, &Ia_sysret }, - /* 0F 08 */ { 0, &Ia_invd }, - /* 0F 09 */ { 0, &Ia_wbinvd }, - /* 0F 0A */ { 0, &Ia_Invalid }, - /* 0F 0B */ { 0, &Ia_ud2a }, - /* 0F 0C */ { 0, &Ia_Invalid }, - /* 0F 0D */ { 0, &Ia_prefetch }, // 3DNow! - /* 0F 0E */ { 0, &Ia_femms }, // 3DNow! - /* 0F 0F */ { GRP3DNOW }, - /* 0F 10 */ { GRPSSE(0f10) }, - /* 0F 11 */ { GRPSSE(0f11) }, - /* 0F 12 */ { GRPSSE(0f12) }, - /* 0F 13 */ { GRPSSE(0f13) }, - /* 0F 14 */ { GRPSSE(0f14) }, - /* 0F 15 */ { GRPSSE(0f15) }, - /* 0F 16 */ { GRPSSE(0f16) }, - /* 0F 17 */ { GRPSSE(0f17) }, - /* 0F 18 */ { GRPN(G16) }, - /* 0F 19 */ { 0, &Ia_Invalid }, - /* 0F 1A */ { 0, &Ia_Invalid }, - /* 0F 1B */ { 0, &Ia_Invalid }, - /* 0F 1C */ { 0, &Ia_Invalid }, - /* 0F 1D */ { 0, &Ia_Invalid }, - /* 0F 1E */ { 0, &Ia_Invalid }, - /* 0F 1F */ { 0, &Ia_multibyte_nop }, - /* 0F 20 */ { 0, &Ia_movq_Rq_Cq }, - /* 0F 21 */ { 0, &Ia_movq_Rq_Dq }, - /* 0F 22 */ { 0, &Ia_movq_Cq_Rq }, - /* 0F 23 */ { 0, &Ia_movq_Dq_Rq }, - /* 0F 24 */ { 0, &Ia_Invalid }, - /* 0F 25 */ { 0, &Ia_Invalid }, - /* 0F 26 */ { 0, &Ia_Invalid }, - /* 0F 27 */ { 0, &Ia_Invalid }, - /* 0F 28 */ { GRPSSE(0f28) }, - /* 0F 29 */ { GRPSSE(0f29) }, - /* 0F 2A */ { GRPSSE(0f2a) }, - /* 0F 2B */ { GRPSSE(0f2b) }, - /* 0F 2C */ { GRPSSE(0f2c) }, - /* 0F 2D */ { GRPSSE(0f2d) }, - /* 0F 2E */ { GRPSSE(0f2e) }, - /* 0F 2F */ { GRPSSE(0f2f) }, - /* 0F 30 */ { 0, &Ia_wrmsr }, - /* 0F 31 */ { 0, &Ia_rdtsc }, - /* 0F 32 */ { 0, &Ia_rdmsr }, - /* 0F 33 */ { 0, &Ia_rdpmc }, - /* 0F 34 */ { 0, &Ia_sysenter }, - /* 0F 35 */ { 0, &Ia_sysexit }, - /* 0F 36 */ { 0, &Ia_Invalid }, - /* 0F 37 */ { 0, &Ia_Invalid }, - /* 0F 38 */ { GR3BTAB(A4) }, - /* 0F 39 */ { 0, &Ia_Invalid }, - /* 0F 3A */ { GR3BTAB(A5) }, - /* 0F 3B */ { 0, &Ia_Invalid }, - /* 0F 3C */ { 0, &Ia_Invalid }, - /* 0F 3D */ { 0, &Ia_Invalid }, - /* 0F 3E */ { 0, &Ia_Invalid }, - /* 0F 3F */ { 0, &Ia_Invalid }, - /* 0F 40 */ { 0, &Ia_cmovol_Gd_Ed }, - /* 0F 41 */ { 0, &Ia_cmovnol_Gd_Ed }, - /* 0F 42 */ { 0, &Ia_cmovcl_Gd_Ed }, - /* 0F 43 */ { 0, &Ia_cmovncl_Gd_Ed }, - /* 0F 44 */ { 0, &Ia_cmovzl_Gd_Ed }, - /* 0F 45 */ { 0, &Ia_cmovnzl_Gd_Ed }, - /* 0F 46 */ { 0, &Ia_cmovnal_Gd_Ed }, - /* 0F 47 */ { 0, &Ia_cmoval_Gd_Ed }, - /* 0F 48 */ { 0, &Ia_cmovsl_Gd_Ed }, - /* 0F 49 */ { 0, &Ia_cmovnsl_Gd_Ed }, - /* 0F 4A */ { 0, &Ia_cmovpl_Gd_Ed }, - /* 0F 4B */ { 0, &Ia_cmovnpl_Gd_Ed }, - /* 0F 4C */ { 0, &Ia_cmovll_Gd_Ed }, - /* 0F 4D */ { 0, &Ia_cmovnll_Gd_Ed }, - /* 0F 4E */ { 0, &Ia_cmovngl_Gd_Ed }, - /* 0F 4F */ { 0, &Ia_cmovgl_Gd_Ed }, - /* 0F 50 */ { GRPSSE(0f50) }, - /* 0F 51 */ { GRPSSE(0f51) }, - /* 0F 52 */ { GRPSSE(0f52) }, - /* 0F 53 */ { GRPSSE(0f53) }, - /* 0F 54 */ { GRPSSE(0f54) }, - /* 0F 55 */ { GRPSSE(0f55) }, - /* 0F 56 */ { GRPSSE(0f56) }, - /* 0F 57 */ { GRPSSE(0f57) }, - /* 0F 58 */ { GRPSSE(0f58) }, - /* 0F 59 */ { GRPSSE(0f59) }, - /* 0F 5A */ { GRPSSE(0f5a) }, - /* 0F 5B */ { GRPSSE(0f5b) }, - /* 0F 5C */ { GRPSSE(0f5c) }, - /* 0F 5D */ { GRPSSE(0f5d) }, - /* 0F 5E */ { GRPSSE(0f5e) }, - /* 0F 5F */ { GRPSSE(0f5f) }, - /* 0F 60 */ { GRPSSE(0f60) }, - /* 0F 61 */ { GRPSSE(0f61) }, - /* 0F 62 */ { GRPSSE(0f62) }, - /* 0F 63 */ { GRPSSE(0f63) }, - /* 0F 64 */ { GRPSSE(0f64) }, - /* 0F 65 */ { GRPSSE(0f65) }, - /* 0F 66 */ { GRPSSE(0f66) }, - /* 0F 67 */ { GRPSSE(0f67) }, - /* 0F 68 */ { GRPSSE(0f68) }, - /* 0F 69 */ { GRPSSE(0f69) }, - /* 0F 6A */ { GRPSSE(0f6a) }, - /* 0F 6B */ { GRPSSE(0f6b) }, - /* 0F 6C */ { GRPSSE(0f6c) }, - /* 0F 6D */ { GRPSSE(0f6d) }, - /* 0F 6E */ { GRPSSE(0f6e) }, - /* 0F 6F */ { GRPSSE(0f6f) }, - /* 0F 70 */ { GRPSSE(0f70) }, - /* 0F 71 */ { GRPN(G12) }, - /* 0F 72 */ { GRPN(G13) }, - /* 0F 73 */ { GRPN(G14) }, - /* 0F 74 */ { GRPSSE(0f74) }, - /* 0F 75 */ { GRPSSE(0f75) }, - /* 0F 76 */ { GRPSSE(0f76) }, - /* 0F 77 */ { 0, &Ia_emms }, - /* 0F 78 */ { 0, &Ia_Invalid }, - /* 0F 79 */ { 0, &Ia_Invalid }, - /* 0F 7A */ { 0, &Ia_Invalid }, - /* 0F 7B */ { 0, &Ia_Invalid }, - /* 0F 7C */ { GRPSSE(0f7c) }, - /* 0F 7D */ { GRPSSE(0f7d) }, - /* 0F 7E */ { GRPSSE(0f7e) }, - /* 0F 7F */ { GRPSSE(0f7f) }, - /* 0F 80 */ { 0, &Ia_jo_Jd }, - /* 0F 81 */ { 0, &Ia_jno_Jd }, - /* 0F 82 */ { 0, &Ia_jb_Jd }, - /* 0F 83 */ { 0, &Ia_jnb_Jd }, - /* 0F 84 */ { 0, &Ia_jz_Jd }, - /* 0F 85 */ { 0, &Ia_jnz_Jd }, - /* 0F 86 */ { 0, &Ia_jbe_Jd }, - /* 0F 87 */ { 0, &Ia_jnbe_Jd }, - /* 0F 88 */ { 0, &Ia_js_Jd }, - /* 0F 89 */ { 0, &Ia_jns_Jd }, - /* 0F 8A */ { 0, &Ia_jp_Jd }, - /* 0F 8B */ { 0, &Ia_jnp_Jd }, - /* 0F 8C */ { 0, &Ia_jl_Jd }, - /* 0F 8D */ { 0, &Ia_jnl_Jd }, - /* 0F 8E */ { 0, &Ia_jle_Jd }, - /* 0F 8F */ { 0, &Ia_jnle_Jd }, - /* 0F 90 */ { 0, &Ia_seto_Eb }, - /* 0F 91 */ { 0, &Ia_setno_Eb }, - /* 0F 92 */ { 0, &Ia_setb_Eb }, - /* 0F 93 */ { 0, &Ia_setnb_Eb }, - /* 0F 94 */ { 0, &Ia_setz_Eb }, - /* 0F 95 */ { 0, &Ia_setnz_Eb }, - /* 0F 96 */ { 0, &Ia_setbe_Eb }, - /* 0F 97 */ { 0, &Ia_setnbe_Eb }, - /* 0F 98 */ { 0, &Ia_sets_Eb }, - /* 0F 99 */ { 0, &Ia_setns_Eb }, - /* 0F 9A */ { 0, &Ia_setp_Eb }, - /* 0F 9B */ { 0, &Ia_setnp_Eb }, - /* 0F 9C */ { 0, &Ia_setl_Eb }, - /* 0F 9D */ { 0, &Ia_setnl_Eb }, - /* 0F 9E */ { 0, &Ia_setle_Eb }, - /* 0F 9F */ { 0, &Ia_setnle_Eb }, - /* 0F A0 */ { 0, &Ia_pushq_FS }, - /* 0F A1 */ { 0, &Ia_popq_FS }, - /* 0F A2 */ { 0, &Ia_cpuid }, - /* 0F A3 */ { 0, &Ia_btl_Ed_Gd }, - /* 0F A4 */ { 0, &Ia_shldl_Ed_Gd_Ib }, - /* 0F A5 */ { 0, &Ia_shldl_Ed_Gd_CL }, - /* 0F A6 */ { 0, &Ia_Invalid }, - /* 0F A7 */ { 0, &Ia_Invalid }, - /* 0F A8 */ { 0, &Ia_pushq_GS }, - /* 0F A9 */ { 0, &Ia_popq_GS }, - /* 0F AA */ { 0, &Ia_rsm }, - /* 0F AB */ { 0, &Ia_btsl_Ed_Gd }, - /* 0F AC */ { 0, &Ia_shrdl_Ed_Gd_Ib }, - /* 0F AD */ { 0, &Ia_shrdl_Ed_Gd_CL }, - /* 0F AE */ { GRPN(G15) }, - /* 0F AF */ { 0, &Ia_imull_Gd_Ed }, - /* 0F B0 */ { 0, &Ia_cmpxchgb_Eb_Gb }, - /* 0F B1 */ { 0, &Ia_cmpxchgl_Ed_Gd }, - /* 0F B2 */ { 0, &Ia_lssl_Gd_Mp }, - /* 0F B3 */ { 0, &Ia_btrl_Ed_Gd }, - /* 0F B4 */ { 0, &Ia_lfsl_Gd_Mp }, - /* 0F B5 */ { 0, &Ia_lgsl_Gd_Mp }, - /* 0F B6 */ { 0, &Ia_movzbl_Gd_Eb }, - /* 0F B7 */ { 0, &Ia_movzwl_Gd_Ew }, - /* 0F B8 */ { 0, &Ia_Invalid }, - /* 0F B9 */ { 0, &Ia_ud2b }, - /* 0F BA */ { GRPN(G8EdIb) }, - /* 0F BB */ { 0, &Ia_btcl_Ed_Gd }, - /* 0F BC */ { 0, &Ia_bsfl_Gd_Ed }, - /* 0F BD */ { 0, &Ia_bsrl_Gd_Ed }, - /* 0F BE */ { 0, &Ia_movsbl_Gd_Eb }, - /* 0F BF */ { 0, &Ia_movswl_Gd_Ew }, - /* 0F C0 */ { 0, &Ia_xaddb_Eb_Gb }, - /* 0F C0 */ { 0, &Ia_xaddl_Ed_Gd }, - /* 0F C2 */ { GRPSSE(0fc2) }, - /* 0F C3 */ { GRPSSE(0fc3) }, - /* 0F C4 */ { GRPSSE(0fc4) }, - /* 0F C5 */ { GRPSSE(0fc5) }, - /* 0F C6 */ { GRPSSE(0fc6) }, - /* 0F C7 */ { GRPN(G9) }, - /* 0F C8 */ { 0, &Ia_bswapl_ERX }, - /* 0F C9 */ { 0, &Ia_bswapl_ERX }, - /* 0F CA */ { 0, &Ia_bswapl_ERX }, - /* 0F CB */ { 0, &Ia_bswapl_ERX }, - /* 0F CC */ { 0, &Ia_bswapl_ERX }, - /* 0F CD */ { 0, &Ia_bswapl_ERX }, - /* 0F CE */ { 0, &Ia_bswapl_ERX }, - /* 0F CF */ { 0, &Ia_bswapl_ERX }, - /* 0F D0 */ { GRPSSE(0fd0) }, - /* 0F D1 */ { GRPSSE(0fd1) }, - /* 0F D2 */ { GRPSSE(0fd2) }, - /* 0F D3 */ { GRPSSE(0fd3) }, - /* 0F D4 */ { GRPSSE(0fd4) }, - /* 0F D5 */ { GRPSSE(0fd5) }, - /* 0F D6 */ { GRPSSE(0fd6) }, - /* 0F D7 */ { GRPSSE(0fd7) }, - /* 0F D8 */ { GRPSSE(0fd8) }, - /* 0F D9 */ { GRPSSE(0fd9) }, - /* 0F DA */ { GRPSSE(0fda) }, - /* 0F DB */ { GRPSSE(0fdb) }, - /* 0F DC */ { GRPSSE(0fdc) }, - /* 0F DD */ { GRPSSE(0fdd) }, - /* 0F DE */ { GRPSSE(0fde) }, - /* 0F DF */ { GRPSSE(0fdf) }, - /* 0F E0 */ { GRPSSE(0fe0) }, - /* 0F E1 */ { GRPSSE(0fe1) }, - /* 0F E2 */ { GRPSSE(0fe2) }, - /* 0F E3 */ { GRPSSE(0fe3) }, - /* 0F E4 */ { GRPSSE(0fe4) }, - /* 0F E5 */ { GRPSSE(0fe5) }, - /* 0F E6 */ { GRPSSE(0fe6) }, - /* 0F E7 */ { GRPSSE(0fe7) }, - /* 0F E8 */ { GRPSSE(0fe8) }, - /* 0F E9 */ { GRPSSE(0fe9) }, - /* 0F EA */ { GRPSSE(0fea) }, - /* 0F EB */ { GRPSSE(0feb) }, - /* 0F EC */ { GRPSSE(0fec) }, - /* 0F ED */ { GRPSSE(0fed) }, - /* 0F EE */ { GRPSSE(0fee) }, - /* 0F EF */ { GRPSSE(0fef) }, - /* 0F F0 */ { GRPSSE(0ff0) }, - /* 0F F1 */ { GRPSSE(0ff1) }, - /* 0F F2 */ { GRPSSE(0ff2) }, - /* 0F F3 */ { GRPSSE(0ff3) }, - /* 0F F4 */ { GRPSSE(0ff4) }, - /* 0F F5 */ { GRPSSE(0ff5) }, - /* 0F F6 */ { GRPSSE(0ff6) }, - /* 0F F7 */ { GRPSSE(0ff7) }, - /* 0F F8 */ { GRPSSE(0ff8) }, - /* 0F F9 */ { GRPSSE(0ff9) }, - /* 0F FA */ { GRPSSE(0ffa) }, - /* 0F FB */ { GRPSSE(0ffb) }, - /* 0F FC */ { GRPSSE(0ffc) }, - /* 0F FD */ { GRPSSE(0ffd) }, - /* 0F FE */ { GRPSSE(0ffe) }, - /* 0F FF */ { 0, &Ia_Invalid } -}; - -static BxDisasmOpcodeTable_t BxDisasmOpcodes64q[256*2] = { - // 256 entries for single byte opcodes - /* 00 */ { 0, &Ia_addb_Eb_Gb }, - /* 01 */ { 0, &Ia_addq_Eq_Gq }, - /* 02 */ { 0, &Ia_addb_Gb_Eb }, - /* 03 */ { 0, &Ia_addq_Gq_Eq }, - /* 04 */ { 0, &Ia_addb_AL_Ib, }, - /* 05 */ { 0, &Ia_addq_RAX_sId }, - /* 06 */ { 0, &Ia_Invalid }, - /* 07 */ { 0, &Ia_Invalid }, - /* 08 */ { 0, &Ia_orb_Eb_Gb }, - /* 09 */ { 0, &Ia_orq_Eq_Gq }, - /* 0A */ { 0, &Ia_orb_Gb_Eb }, - /* 0B */ { 0, &Ia_orq_Gq_Eq }, - /* 0C */ { 0, &Ia_orb_AL_Ib }, - /* 0D */ { 0, &Ia_orq_RAX_sId }, - /* 0E */ { 0, &Ia_Invalid }, - /* 0F */ { 0, &Ia_error }, // 2 byte escape - /* 10 */ { 0, &Ia_adcb_Eb_Gb }, - /* 11 */ { 0, &Ia_adcq_Eq_Gq }, - /* 12 */ { 0, &Ia_adcb_Gb_Eb }, - /* 13 */ { 0, &Ia_adcq_Gq_Eq }, - /* 14 */ { 0, &Ia_adcb_AL_Ib }, - /* 15 */ { 0, &Ia_adcq_RAX_sId }, - /* 16 */ { 0, &Ia_Invalid }, - /* 17 */ { 0, &Ia_Invalid }, - /* 18 */ { 0, &Ia_sbbb_Eb_Gb }, - /* 19 */ { 0, &Ia_sbbq_Eq_Gq }, - /* 1A */ { 0, &Ia_sbbb_Gb_Eb }, - /* 1B */ { 0, &Ia_sbbq_Gq_Eq }, - /* 1C */ { 0, &Ia_sbbb_AL_Ib }, - /* 1D */ { 0, &Ia_sbbq_RAX_sId }, - /* 1E */ { 0, &Ia_Invalid }, - /* 1F */ { 0, &Ia_Invalid }, - /* 20 */ { 0, &Ia_andb_Eb_Gb }, - /* 21 */ { 0, &Ia_andq_Eq_Gq }, - /* 22 */ { 0, &Ia_andb_Gb_Eb }, - /* 23 */ { 0, &Ia_andq_Gq_Eq }, - /* 24 */ { 0, &Ia_andb_AL_Ib }, - /* 25 */ { 0, &Ia_andq_RAX_sId }, - /* 26 */ { 0, &Ia_prefix_es }, // ES: - /* 27 */ { 0, &Ia_Invalid }, - /* 28 */ { 0, &Ia_subb_Eb_Gb }, - /* 29 */ { 0, &Ia_subq_Eq_Gq }, - /* 2A */ { 0, &Ia_subb_Gb_Eb }, - /* 2B */ { 0, &Ia_subq_Gq_Eq }, - /* 2C */ { 0, &Ia_subb_AL_Ib }, - /* 2D */ { 0, &Ia_subq_RAX_sId }, - /* 2E */ { 0, &Ia_prefix_cs }, // CS: - /* 2F */ { 0, &Ia_Invalid }, - /* 30 */ { 0, &Ia_xorb_Eb_Gb }, - /* 31 */ { 0, &Ia_xorq_Eq_Gq }, - /* 32 */ { 0, &Ia_xorb_Gb_Eb }, - /* 33 */ { 0, &Ia_xorq_Gq_Eq }, - /* 34 */ { 0, &Ia_xorb_AL_Ib }, - /* 35 */ { 0, &Ia_xorq_RAX_sId }, - /* 36 */ { 0, &Ia_prefix_ss }, // SS: - /* 37 */ { 0, &Ia_Invalid }, - /* 38 */ { 0, &Ia_cmpb_Eb_Gb }, - /* 39 */ { 0, &Ia_cmpq_Eq_Gq }, - /* 3A */ { 0, &Ia_cmpb_Gb_Eb }, - /* 3B */ { 0, &Ia_cmpq_Gq_Eq }, - /* 3C */ { 0, &Ia_cmpb_AL_Ib }, - /* 3D */ { 0, &Ia_cmpq_RAX_sId }, - /* 3E */ { 0, &Ia_prefix_ds }, // DS: - /* 3F */ { 0, &Ia_Invalid }, - /* 40 */ { 0, &Ia_prefix_rex }, // REX: - /* 41 */ { 0, &Ia_prefix_rex }, // REX: - /* 42 */ { 0, &Ia_prefix_rex }, // REX: - /* 43 */ { 0, &Ia_prefix_rex }, // REX: - /* 44 */ { 0, &Ia_prefix_rex }, // REX: - /* 45 */ { 0, &Ia_prefix_rex }, // REX: - /* 46 */ { 0, &Ia_prefix_rex }, // REX: - /* 47 */ { 0, &Ia_prefix_rex }, // REX: - /* 48 */ { 0, &Ia_prefix_rex }, // REX: - /* 49 */ { 0, &Ia_prefix_rex }, // REX: - /* 4A */ { 0, &Ia_prefix_rex }, // REX: - /* 4B */ { 0, &Ia_prefix_rex }, // REX: - /* 4C */ { 0, &Ia_prefix_rex }, // REX: - /* 4D */ { 0, &Ia_prefix_rex }, // REX: - /* 4E */ { 0, &Ia_prefix_rex }, // REX: - /* 4F */ { 0, &Ia_prefix_rex }, // REX: - /* 50 */ { 0, &Ia_pushq_RRX }, - /* 51 */ { 0, &Ia_pushq_RRX }, - /* 52 */ { 0, &Ia_pushq_RRX }, - /* 53 */ { 0, &Ia_pushq_RRX }, - /* 54 */ { 0, &Ia_pushq_RRX }, - /* 55 */ { 0, &Ia_pushq_RRX }, - /* 56 */ { 0, &Ia_pushq_RRX }, - /* 57 */ { 0, &Ia_pushq_RRX }, - /* 58 */ { 0, &Ia_popq_RRX }, - /* 59 */ { 0, &Ia_popq_RRX }, - /* 5A */ { 0, &Ia_popq_RRX }, - /* 5B */ { 0, &Ia_popq_RRX }, - /* 5C */ { 0, &Ia_popq_RRX }, - /* 5D */ { 0, &Ia_popq_RRX }, - /* 5E */ { 0, &Ia_popq_RRX }, - /* 5F */ { 0, &Ia_popq_RRX }, - /* 60 */ { 0, &Ia_Invalid }, - /* 61 */ { 0, &Ia_Invalid }, - /* 62 */ { 0, &Ia_Invalid }, - /* 63 */ { 0, &Ia_movslq_Gq_Ed }, - /* 64 */ { 0, &Ia_prefix_fs }, // FS: - /* 65 */ { 0, &Ia_prefix_gs }, // GS: - /* 66 */ { 0, &Ia_prefix_osize }, // OSIZE: - /* 67 */ { 0, &Ia_prefix_asize }, // ASIZE: - /* 68 */ { 0, &Ia_pushq_sId }, - /* 69 */ { 0, &Ia_imulq_Gq_Eq_sId }, - /* 6A */ { 0, &Ia_pushq_sIb }, - /* 6B */ { 0, &Ia_imulq_Gq_Eq_sIb }, - /* 6C */ { 0, &Ia_insb_Yb_DX }, - /* 6D */ { 0, &Ia_insl_Yd_DX }, - /* 6E */ { 0, &Ia_outsb_DX_Xb }, - /* 6F */ { 0, &Ia_outsl_DX_Xd }, - /* 70 */ { 0, &Ia_jo_Jb }, - /* 71 */ { 0, &Ia_jno_Jb }, - /* 72 */ { 0, &Ia_jb_Jb }, - /* 73 */ { 0, &Ia_jnb_Jb }, - /* 74 */ { 0, &Ia_jz_Jb }, - /* 75 */ { 0, &Ia_jnz_Jb }, - /* 76 */ { 0, &Ia_jbe_Jb }, - /* 77 */ { 0, &Ia_jnbe_Jb }, - /* 78 */ { 0, &Ia_js_Jb }, - /* 79 */ { 0, &Ia_jns_Jb }, - /* 7A */ { 0, &Ia_jp_Jb }, - /* 7B */ { 0, &Ia_jnp_Jb }, - /* 7C */ { 0, &Ia_jl_Jb }, - /* 7D */ { 0, &Ia_jnl_Jb }, - /* 7E */ { 0, &Ia_jle_Jb }, - /* 7F */ { 0, &Ia_jnle_Jb }, - /* 80 */ { GRPN(G1EbIb) }, - /* 81 */ { GRPN(G1EqId) }, - /* 82 */ { 0, &Ia_Invalid }, - /* 83 */ { GRPN(G1EqIb) }, - /* 84 */ { 0, &Ia_testb_Eb_Gb }, - /* 85 */ { 0, &Ia_testq_Eq_Gq }, - /* 86 */ { 0, &Ia_xchgb_Eb_Gb }, - /* 87 */ { 0, &Ia_xchgq_Eq_Gq }, - /* 88 */ { 0, &Ia_movb_Eb_Gb }, - /* 89 */ { 0, &Ia_movq_Eq_Gq }, - /* 8A */ { 0, &Ia_movb_Gb_Eb }, - /* 8B */ { 0, &Ia_movq_Gq_Eq }, - /* 8C */ { 0, &Ia_movw_Ew_Sw }, - /* 8D */ { 0, &Ia_leaq_Gq_Mq }, - /* 8E */ { 0, &Ia_movw_Sw_Ew }, - /* 8F */ { 0, &Ia_popq_Eq }, - /* 90 */ { 0, &Ia_xchgq_RRX_RAX }, // handle XCHG R8, RAX - /* 91 */ { 0, &Ia_xchgq_RRX_RAX }, - /* 92 */ { 0, &Ia_xchgq_RRX_RAX }, - /* 93 */ { 0, &Ia_xchgq_RRX_RAX }, - /* 94 */ { 0, &Ia_xchgq_RRX_RAX }, - /* 95 */ { 0, &Ia_xchgq_RRX_RAX }, - /* 96 */ { 0, &Ia_xchgq_RRX_RAX }, - /* 97 */ { 0, &Ia_xchgq_RRX_RAX }, - /* 98 */ { 0, &Ia_cdqe }, - /* 99 */ { 0, &Ia_cqo }, - /* 9A */ { 0, &Ia_Invalid }, - /* 9B */ { 0, &Ia_fwait }, - /* 9C */ { 0, &Ia_pushfq }, - /* 9D */ { 0, &Ia_popfq }, - /* 9E */ { 0, &Ia_sahf }, - /* 9F */ { 0, &Ia_lahf }, - /* A0 */ { 0, &Ia_movb_AL_Ob }, - /* A1 */ { 0, &Ia_movq_RAX_Oq }, - /* A0 */ { 0, &Ia_movb_Ob_AL }, - /* A1 */ { 0, &Ia_movq_Oq_RAX }, - /* A4 */ { 0, &Ia_movsb_Yb_Xb }, - /* A5 */ { 0, &Ia_movsq_Yq_Xq }, - /* A6 */ { 0, &Ia_cmpsb_Yb_Xb }, - /* A7 */ { 0, &Ia_cmpsq_Yq_Xq }, - /* A8 */ { 0, &Ia_testb_AL_Ib }, - /* A9 */ { 0, &Ia_testq_RAX_sId }, - /* AA */ { 0, &Ia_stosb_Yb_AL }, - /* AB */ { 0, &Ia_stosq_Yq_RAX }, - /* AC */ { 0, &Ia_lodsb_AL_Xb }, - /* AD */ { 0, &Ia_lodsq_RAX_Xq }, - /* AE */ { 0, &Ia_scasb_Yb_AL }, - /* AF */ { 0, &Ia_scasq_Yq_RAX }, - /* B0 */ { 0, &Ia_movb_R8_Ib }, - /* B1 */ { 0, &Ia_movb_R8_Ib }, - /* B2 */ { 0, &Ia_movb_R8_Ib }, - /* B3 */ { 0, &Ia_movb_R8_Ib }, - /* B4 */ { 0, &Ia_movb_R8_Ib }, - /* B5 */ { 0, &Ia_movb_R8_Ib }, - /* B6 */ { 0, &Ia_movb_R8_Ib }, - /* B7 */ { 0, &Ia_movb_R8_Ib }, - /* B8 */ { 0, &Ia_movq_RRX_Iq }, - /* B9 */ { 0, &Ia_movq_RRX_Iq }, - /* BA */ { 0, &Ia_movq_RRX_Iq }, - /* BB */ { 0, &Ia_movq_RRX_Iq }, - /* BC */ { 0, &Ia_movq_RRX_Iq }, - /* BD */ { 0, &Ia_movq_RRX_Iq }, - /* BE */ { 0, &Ia_movq_RRX_Iq }, - /* BF */ { 0, &Ia_movq_RRX_Iq }, - /* C0 */ { GRPN(G2Eb) }, - /* C1 */ { GRPN(G2Eq) }, - /* C2 */ { 0, &Ia_ret_Iw }, - /* C3 */ { 0, &Ia_ret }, - /* C4 */ { 0, &Ia_Invalid }, - /* C5 */ { 0, &Ia_Invalid }, - /* C6 */ { 0, &Ia_movb_Eb_Ib }, - /* C7 */ { 0, &Ia_movq_Eq_sId }, - /* C8 */ { 0, &Ia_enter }, - /* C9 */ { 0, &Ia_leave }, - /* CA */ { 0, &Ia_lret_Iw }, - /* CB */ { 0, &Ia_lret }, - /* CC */ { 0, &Ia_int3 }, - /* CD */ { 0, &Ia_int_Ib }, - /* CE */ { 0, &Ia_Invalid }, - /* CF */ { 0, &Ia_iretq }, - /* D0 */ { GRPN(G2EbI1) }, - /* D1 */ { GRPN(G2EqI1) }, - /* D2 */ { GRPN(G2EbCL) }, - /* D3 */ { GRPN(G2EqCL) }, - /* D4 */ { 0, &Ia_Invalid }, - /* D5 */ { 0, &Ia_Invalid }, - /* D6 */ { 0, &Ia_Invalid }, - /* D7 */ { 0, &Ia_xlat }, - /* D8 */ { GRPFP(D8) }, - /* D9 */ { GRPFP(D9) }, - /* DA */ { GRPFP(DA) }, - /* DB */ { GRPFP(DB) }, - /* DC */ { GRPFP(DC) }, - /* DD */ { GRPFP(DD) }, - /* DE */ { GRPFP(DE) }, - /* DF */ { GRPFP(DF) }, - /* E0 */ { 0, &Ia_loopne_Jb }, - /* E1 */ { 0, &Ia_loope_Jb }, - /* E2 */ { 0, &Ia_loop_Jb }, - /* E3 */ { 0, &Ia_jrcxz_Jb }, - /* E4 */ { 0, &Ia_inb_AL_Ib }, - /* E5 */ { 0, &Ia_inl_EAX_Ib }, - /* E6 */ { 0, &Ia_outb_Ib_AL }, - /* E7 */ { 0, &Ia_outl_Ib_EAX }, - /* E8 */ { 0, &Ia_call_Jd }, - /* E9 */ { 0, &Ia_jmp_Jd }, - /* EA */ { 0, &Ia_Invalid }, - /* EB */ { 0, &Ia_jmp_Jb }, - /* EC */ { 0, &Ia_inb_AL_DX }, - /* ED */ { 0, &Ia_inl_EAX_DX }, - /* EE */ { 0, &Ia_outb_DX_AL }, - /* EF */ { 0, &Ia_outl_DX_EAX }, - /* F0 */ { 0, &Ia_prefix_lock }, // LOCK: - /* F1 */ { 0, &Ia_int1 }, - /* F2 */ { 0, &Ia_prefix_repne }, // REPNE: - /* F3 */ { 0, &Ia_prefix_rep }, // REP: - /* F4 */ { 0, &Ia_hlt }, - /* F5 */ { 0, &Ia_cmc }, - /* F6 */ { GRPN(G3Eb) }, - /* F7 */ { GRPN(G3Eq) }, - /* F8 */ { 0, &Ia_clc }, - /* F9 */ { 0, &Ia_stc }, - /* FA */ { 0, &Ia_cli }, - /* FB */ { 0, &Ia_sti }, - /* FC */ { 0, &Ia_cld }, - /* FD */ { 0, &Ia_std }, - /* FE */ { GRPN(G4) }, - /* FF */ { GRPN(64G5q) }, - - // 256 entries for two byte opcodes - /* 0F 00 */ { GRPN(G6) }, - /* 0F 01 */ { GRPN(G7) }, - /* 0F 02 */ { 0, &Ia_larq_Gq_Ew }, - /* 0F 03 */ { 0, &Ia_lslq_Gq_Ew }, - /* 0F 04 */ { 0, &Ia_Invalid }, - /* 0F 05 */ { 0, &Ia_syscall }, - /* 0F 06 */ { 0, &Ia_clts }, - /* 0F 07 */ { 0, &Ia_sysret }, - /* 0F 08 */ { 0, &Ia_invd }, - /* 0F 09 */ { 0, &Ia_wbinvd }, - /* 0F 0A */ { 0, &Ia_Invalid }, - /* 0F 0B */ { 0, &Ia_ud2a }, - /* 0F 0C */ { 0, &Ia_Invalid }, - /* 0F 0D */ { 0, &Ia_prefetch }, // 3DNow! - /* 0F 0E */ { 0, &Ia_femms }, // 3DNow! - /* 0F 0F */ { GRP3DNOW }, - /* 0F 10 */ { GRPSSE(0f10) }, - /* 0F 11 */ { GRPSSE(0f11) }, - /* 0F 12 */ { GRPSSE(0f12) }, - /* 0F 13 */ { GRPSSE(0f13) }, - /* 0F 14 */ { GRPSSE(0f14) }, - /* 0F 15 */ { GRPSSE(0f15) }, - /* 0F 16 */ { GRPSSE(0f16) }, - /* 0F 17 */ { GRPSSE(0f17) }, - /* 0F 18 */ { GRPN(G16) }, - /* 0F 19 */ { 0, &Ia_Invalid }, - /* 0F 1A */ { 0, &Ia_Invalid }, - /* 0F 1B */ { 0, &Ia_Invalid }, - /* 0F 1C */ { 0, &Ia_Invalid }, - /* 0F 1D */ { 0, &Ia_Invalid }, - /* 0F 1E */ { 0, &Ia_Invalid }, - /* 0F 1F */ { 0, &Ia_multibyte_nop }, - /* 0F 20 */ { 0, &Ia_movq_Rq_Cq }, - /* 0F 21 */ { 0, &Ia_movq_Rq_Dq }, - /* 0F 22 */ { 0, &Ia_movq_Cq_Rq }, - /* 0F 23 */ { 0, &Ia_movq_Dq_Rq }, - /* 0F 24 */ { 0, &Ia_Invalid }, - /* 0F 25 */ { 0, &Ia_Invalid }, - /* 0F 26 */ { 0, &Ia_Invalid }, - /* 0F 27 */ { 0, &Ia_Invalid }, - /* 0F 28 */ { GRPSSE(0f28) }, - /* 0F 29 */ { GRPSSE(0f29) }, - /* 0F 2A */ { GRPSSE(640f2a) }, - /* 0F 2B */ { GRPSSE(0f2b) }, - /* 0F 2C */ { GRPSSE(0f2cQ) }, - /* 0F 2D */ { GRPSSE(0f2dQ) }, - /* 0F 2E */ { GRPSSE(0f2e) }, - /* 0F 2F */ { GRPSSE(0f2f) }, - /* 0F 30 */ { 0, &Ia_wrmsr }, - /* 0F 31 */ { 0, &Ia_rdtsc }, - /* 0F 32 */ { 0, &Ia_rdmsr }, - /* 0F 33 */ { 0, &Ia_rdpmc }, - /* 0F 34 */ { 0, &Ia_sysenter }, - /* 0F 35 */ { 0, &Ia_sysexit }, - /* 0F 36 */ { 0, &Ia_Invalid }, - /* 0F 37 */ { 0, &Ia_Invalid }, - /* 0F 38 */ { GR3BTAB(A4) }, - /* 0F 39 */ { 0, &Ia_Invalid }, - /* 0F 3A */ { GR3BTAB(A5) }, - /* 0F 3B */ { 0, &Ia_Invalid }, - /* 0F 3C */ { 0, &Ia_Invalid }, - /* 0F 3D */ { 0, &Ia_Invalid }, - /* 0F 3E */ { 0, &Ia_Invalid }, - /* 0F 3F */ { 0, &Ia_Invalid }, - /* 0F 40 */ { 0, &Ia_cmovoq_Gq_Eq }, - /* 0F 41 */ { 0, &Ia_cmovnoq_Gq_Eq }, - /* 0F 42 */ { 0, &Ia_cmovcq_Gq_Eq }, - /* 0F 43 */ { 0, &Ia_cmovncq_Gq_Eq }, - /* 0F 44 */ { 0, &Ia_cmovzq_Gq_Eq }, - /* 0F 45 */ { 0, &Ia_cmovnzq_Gq_Eq }, - /* 0F 46 */ { 0, &Ia_cmovnaq_Gq_Eq }, - /* 0F 47 */ { 0, &Ia_cmovaq_Gq_Eq }, - /* 0F 48 */ { 0, &Ia_cmovsq_Gq_Eq }, - /* 0F 49 */ { 0, &Ia_cmovnsq_Gq_Eq }, - /* 0F 4A */ { 0, &Ia_cmovpq_Gq_Eq }, - /* 0F 4B */ { 0, &Ia_cmovnpq_Gq_Eq }, - /* 0F 4C */ { 0, &Ia_cmovlq_Gq_Eq }, - /* 0F 4D */ { 0, &Ia_cmovnlq_Gq_Eq }, - /* 0F 4E */ { 0, &Ia_cmovngq_Gq_Eq }, - /* 0F 4F */ { 0, &Ia_cmovgq_Gq_Eq }, - /* 0F 50 */ { GRPSSE(0f50) }, - /* 0F 51 */ { GRPSSE(0f51) }, - /* 0F 52 */ { GRPSSE(0f52) }, - /* 0F 53 */ { GRPSSE(0f53) }, - /* 0F 54 */ { GRPSSE(0f54) }, - /* 0F 55 */ { GRPSSE(0f55) }, - /* 0F 56 */ { GRPSSE(0f56) }, - /* 0F 57 */ { GRPSSE(0f57) }, - /* 0F 58 */ { GRPSSE(0f58) }, - /* 0F 59 */ { GRPSSE(0f59) }, - /* 0F 5A */ { GRPSSE(0f5a) }, - /* 0F 5B */ { GRPSSE(0f5b) }, - /* 0F 5C */ { GRPSSE(0f5c) }, - /* 0F 5D */ { GRPSSE(0f5d) }, - /* 0F 5E */ { GRPSSE(0f5e) }, - /* 0F 5F */ { GRPSSE(0f5f) }, - /* 0F 60 */ { GRPSSE(0f60) }, - /* 0F 61 */ { GRPSSE(0f61) }, - /* 0F 62 */ { GRPSSE(0f62) }, - /* 0F 63 */ { GRPSSE(0f63) }, - /* 0F 64 */ { GRPSSE(0f64) }, - /* 0F 65 */ { GRPSSE(0f65) }, - /* 0F 66 */ { GRPSSE(0f66) }, - /* 0F 67 */ { GRPSSE(0f67) }, - /* 0F 68 */ { GRPSSE(0f68) }, - /* 0F 69 */ { GRPSSE(0f69) }, - /* 0F 6A */ { GRPSSE(0f6a) }, - /* 0F 6B */ { GRPSSE(0f6b) }, - /* 0F 6C */ { GRPSSE(0f6c) }, - /* 0F 6D */ { GRPSSE(0f6d) }, - /* 0F 6E */ { GRPSSE(0f6eQ) }, - /* 0F 6F */ { GRPSSE(0f6f) }, - /* 0F 70 */ { GRPSSE(0f70) }, - /* 0F 71 */ { GRPN(G12) }, - /* 0F 72 */ { GRPN(G13) }, - /* 0F 73 */ { GRPN(G14) }, - /* 0F 74 */ { GRPSSE(0f74) }, - /* 0F 75 */ { GRPSSE(0f75) }, - /* 0F 76 */ { GRPSSE(0f76) }, - /* 0F 77 */ { 0, &Ia_emms }, - /* 0F 78 */ { 0, &Ia_Invalid }, - /* 0F 79 */ { 0, &Ia_Invalid }, - /* 0F 7A */ { 0, &Ia_Invalid }, - /* 0F 7B */ { 0, &Ia_Invalid }, - /* 0F 7C */ { GRPSSE(0f7c) }, - /* 0F 7D */ { GRPSSE(0f7d) }, - /* 0F 7E */ { GRPSSE(0f7eQ) }, - /* 0F 7F */ { GRPSSE(0f7f) }, - /* 0F 80 */ { 0, &Ia_jo_Jd }, - /* 0F 81 */ { 0, &Ia_jno_Jd }, - /* 0F 82 */ { 0, &Ia_jb_Jd }, - /* 0F 83 */ { 0, &Ia_jnb_Jd }, - /* 0F 84 */ { 0, &Ia_jz_Jd }, - /* 0F 85 */ { 0, &Ia_jnz_Jd }, - /* 0F 86 */ { 0, &Ia_jbe_Jd }, - /* 0F 87 */ { 0, &Ia_jnbe_Jd }, - /* 0F 88 */ { 0, &Ia_js_Jd }, - /* 0F 89 */ { 0, &Ia_jns_Jd }, - /* 0F 8A */ { 0, &Ia_jp_Jd }, - /* 0F 8B */ { 0, &Ia_jnp_Jd }, - /* 0F 8C */ { 0, &Ia_jl_Jd }, - /* 0F 8D */ { 0, &Ia_jnl_Jd }, - /* 0F 8E */ { 0, &Ia_jle_Jd }, - /* 0F 8F */ { 0, &Ia_jnle_Jd }, - /* 0F 90 */ { 0, &Ia_seto_Eb }, - /* 0F 91 */ { 0, &Ia_setno_Eb }, - /* 0F 92 */ { 0, &Ia_setb_Eb }, - /* 0F 93 */ { 0, &Ia_setnb_Eb }, - /* 0F 94 */ { 0, &Ia_setz_Eb }, - /* 0F 95 */ { 0, &Ia_setnz_Eb }, - /* 0F 96 */ { 0, &Ia_setbe_Eb }, - /* 0F 97 */ { 0, &Ia_setnbe_Eb }, - /* 0F 98 */ { 0, &Ia_sets_Eb }, - /* 0F 99 */ { 0, &Ia_setns_Eb }, - /* 0F 9A */ { 0, &Ia_setp_Eb }, - /* 0F 9B */ { 0, &Ia_setnp_Eb }, - /* 0F 9C */ { 0, &Ia_setl_Eb }, - /* 0F 9D */ { 0, &Ia_setnl_Eb }, - /* 0F 9E */ { 0, &Ia_setle_Eb }, - /* 0F 9F */ { 0, &Ia_setnle_Eb }, - /* 0F A0 */ { 0, &Ia_pushq_FS }, - /* 0F A1 */ { 0, &Ia_popq_FS }, - /* 0F A2 */ { 0, &Ia_cpuid }, - /* 0F A3 */ { 0, &Ia_btq_Eq_Gq }, - /* 0F A4 */ { 0, &Ia_shldq_Eq_Gq_Ib }, - /* 0F A5 */ { 0, &Ia_shldq_Eq_Gq_CL }, - /* 0F A6 */ { 0, &Ia_Invalid }, - /* 0F A7 */ { 0, &Ia_Invalid }, - /* 0F A8 */ { 0, &Ia_pushq_GS }, - /* 0F A9 */ { 0, &Ia_popq_GS }, - /* 0F AA */ { 0, &Ia_rsm }, - /* 0F AB */ { 0, &Ia_btsq_Eq_Gq }, - /* 0F AC */ { 0, &Ia_shrdq_Eq_Gq_Ib }, - /* 0F AD */ { 0, &Ia_shrdq_Eq_Gq_CL }, - /* 0F AE */ { GRPN(G15) }, - /* 0F AF */ { 0, &Ia_imulq_Gq_Eq }, - /* 0F B0 */ { 0, &Ia_cmpxchgb_Eb_Gb }, - /* 0F B1 */ { 0, &Ia_cmpxchgq_Eq_Gq }, - /* 0F B2 */ { 0, &Ia_lssq_Gq_Mp }, - /* 0F B3 */ { 0, &Ia_btrq_Eq_Gq }, - /* 0F B4 */ { 0, &Ia_lfsq_Gq_Mp }, - /* 0F B5 */ { 0, &Ia_lgsq_Gq_Mp }, - /* 0F B6 */ { 0, &Ia_movzbq_Gq_Eb }, - /* 0F B7 */ { 0, &Ia_movzwq_Gq_Ew }, - /* 0F B8 */ { 0, &Ia_Invalid }, - /* 0F B9 */ { 0, &Ia_ud2b }, - /* 0F BA */ { GRPN(G8EqIb) }, - /* 0F BB */ { 0, &Ia_btcq_Eq_Gq }, - /* 0F BC */ { 0, &Ia_bsfq_Gq_Eq }, - /* 0F BD */ { 0, &Ia_bsrq_Gq_Eq }, - /* 0F BE */ { 0, &Ia_movsbq_Gq_Eb }, - /* 0F BF */ { 0, &Ia_movswq_Gq_Ew }, - /* 0F C0 */ { 0, &Ia_xaddb_Eb_Gb }, - /* 0F C0 */ { 0, &Ia_xaddq_Eq_Gq }, - /* 0F C2 */ { GRPSSE(0fc2) }, - /* 0F C3 */ { GRPSSE(640fc3) }, - /* 0F C4 */ { GRPSSE(0fc4) }, - /* 0F C5 */ { GRPSSE(0fc5) }, - /* 0F C6 */ { GRPSSE(0fc6) }, - /* 0F C7 */ { GRPN(G9q) }, - /* 0F C8 */ { 0, &Ia_bswapq_RRX }, - /* 0F C9 */ { 0, &Ia_bswapq_RRX }, - /* 0F CA */ { 0, &Ia_bswapq_RRX }, - /* 0F CB */ { 0, &Ia_bswapq_RRX }, - /* 0F CC */ { 0, &Ia_bswapq_RRX }, - /* 0F CD */ { 0, &Ia_bswapq_RRX }, - /* 0F CE */ { 0, &Ia_bswapq_RRX }, - /* 0F CF */ { 0, &Ia_bswapq_RRX }, - /* 0F D0 */ { GRPSSE(0fd0) }, - /* 0F D1 */ { GRPSSE(0fd1) }, - /* 0F D2 */ { GRPSSE(0fd2) }, - /* 0F D3 */ { GRPSSE(0fd3) }, - /* 0F D4 */ { GRPSSE(0fd4) }, - /* 0F D5 */ { GRPSSE(0fd5) }, - /* 0F D6 */ { GRPSSE(0fd6) }, - /* 0F D7 */ { GRPSSE(0fd7) }, - /* 0F D8 */ { GRPSSE(0fd8) }, - /* 0F D9 */ { GRPSSE(0fd9) }, - /* 0F DA */ { GRPSSE(0fda) }, - /* 0F DB */ { GRPSSE(0fdb) }, - /* 0F DC */ { GRPSSE(0fdc) }, - /* 0F DD */ { GRPSSE(0fdd) }, - /* 0F DE */ { GRPSSE(0fde) }, - /* 0F DF */ { GRPSSE(0fdf) }, - /* 0F E0 */ { GRPSSE(0fe0) }, - /* 0F E1 */ { GRPSSE(0fe1) }, - /* 0F E2 */ { GRPSSE(0fe2) }, - /* 0F E3 */ { GRPSSE(0fe3) }, - /* 0F E4 */ { GRPSSE(0fe4) }, - /* 0F E5 */ { GRPSSE(0fe5) }, - /* 0F E6 */ { GRPSSE(0fe6) }, - /* 0F E7 */ { GRPSSE(0fe7) }, - /* 0F E8 */ { GRPSSE(0fe8) }, - /* 0F E9 */ { GRPSSE(0fe9) }, - /* 0F EA */ { GRPSSE(0fea) }, - /* 0F EB */ { GRPSSE(0feb) }, - /* 0F EC */ { GRPSSE(0fec) }, - /* 0F ED */ { GRPSSE(0fed) }, - /* 0F EE */ { GRPSSE(0fee) }, - /* 0F EF */ { GRPSSE(0fef) }, - /* 0F F0 */ { GRPSSE(0ff0) }, - /* 0F F1 */ { GRPSSE(0ff1) }, - /* 0F F2 */ { GRPSSE(0ff2) }, - /* 0F F3 */ { GRPSSE(0ff3) }, - /* 0F F4 */ { GRPSSE(0ff4) }, - /* 0F F5 */ { GRPSSE(0ff5) }, - /* 0F F6 */ { GRPSSE(0ff6) }, - /* 0F F7 */ { GRPSSE(0ff7) }, - /* 0F F8 */ { GRPSSE(0ff8) }, - /* 0F F9 */ { GRPSSE(0ff9) }, - /* 0F FA */ { GRPSSE(0ffa) }, - /* 0F FB */ { GRPSSE(0ffb) }, - /* 0F FC */ { GRPSSE(0ffc) }, - /* 0F FD */ { GRPSSE(0ffd) }, - /* 0F FE */ { GRPSSE(0ffe) }, - /* 0F FF */ { 0, &Ia_Invalid } -}; diff --git a/Externals/Bochs_disasm/dis_tables_avx.inc b/Externals/Bochs_disasm/dis_tables_avx.inc new file mode 100644 index 0000000000..86bb55d14c --- /dev/null +++ b/Externals/Bochs_disasm/dis_tables_avx.inc @@ -0,0 +1,1478 @@ +///////////////////////////////////////////////////////////////////////// +// $Id: dis_tables_avx.inc 11878 2013-10-11 20:09:51Z sshwarts $ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (c) 2011 Stanislav Shwartsman +// Written by Stanislav Shwartsman [sshwarts at sourceforge net] +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// +///////////////////////////////////////////////////////////////////////// + +/* ************************************************************************ */ +/* AVX VEX-encoded 0x0F, 0x0F 0x38 and 0x0F 0x3A opcodes */ + +static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f10[4] = { + /* -- */ { 0, &Ia_vmovups_Vps_Wps }, + /* 66 */ { 0, &Ia_vmovupd_Vpd_Wpd }, + /* F3 */ { 0, &Ia_vmovss_Vss_Wss }, + /* F2 */ { 0, &Ia_vmovsd_Vsd_Wsd } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f11[4] = { + /* -- */ { 0, &Ia_vmovups_Wps_Vps }, + /* 66 */ { 0, &Ia_vmovupd_Wpd_Vpd }, + /* F3 */ { 0, &Ia_vmovss_Wss_Vss }, + /* F2 */ { 0, &Ia_vmovsd_Wsd_Vsd } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupModVMOVHLPS[2] = { + /* R */ { 0, &Ia_vmovhlps_Vps_Hdq_Udq }, + /* M */ { 0, &Ia_vmovlps_Vps_Hdq_Mq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f12[4] = { + /* -- */ { GRPMOD(VMOVHLPS) }, + /* 66 */ { 0, &Ia_vmovlpd_Vpd_Hdq_Mq }, + /* F3 */ { 0, &Ia_vmovsldup_Vdq_Wdq }, + /* F2 */ { 0, &Ia_vmovddup_Vdq_Wq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f13[2] = { + /* -- */ { 0, &Ia_vmovlps_Mq_Vps }, + /* 66 */ { 0, &Ia_vmovlpd_Mq_Vpd } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f14[2] = { + /* -- */ { 0, &Ia_vunpcklps_Vps_Hps_Wps }, + /* 66 */ { 0, &Ia_vunpcklpd_Vpd_Hpd_Wpd } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f15[2] = { + /* -- */ { 0, &Ia_vunpckhps_Vps_Hps_Wps }, + /* 66 */ { 0, &Ia_vunpckhpd_Vpd_Hpd_Wpd } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupModVMOVLHPS[2] = { + /* R */ { 0, &Ia_vmovlhps_Vps_Hdq_Udq }, + /* M */ { 0, &Ia_vmovhps_Vps_Hdq_Mq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f16[4] = { + /* -- */ { GRPMOD(VMOVLHPS) }, + /* 66 */ { 0, &Ia_vmovhpd_Vpd_Hdq_Mq }, + /* F3 */ { 0, &Ia_vmovshdup_Vdq_Wdq }, + /* F2 */ { 0, &Ia_Invalid } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f17[2] = { + /* -- */ { 0, &Ia_vmovhps_Mq_Vps }, + /* 66 */ { 0, &Ia_vmovhpd_Mq_Vpd } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f28[2] = { + /* -- */ { 0, &Ia_vmovaps_Vps_Wps }, + /* 66 */ { 0, &Ia_vmovapd_Vpd_Wpd } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f29[2] = { + /* -- */ { 0, &Ia_vmovaps_Wps_Vps }, + /* 66 */ { 0, &Ia_vmovapd_Wpd_Vpd } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f2a[4] = { + /* -- */ { 0, &Ia_Invalid }, + /* 66 */ { 0, &Ia_Invalid }, + /* F3 */ { 0, &Ia_vcvtsi2ss_Vss_Hps_Ey }, + /* F2 */ { 0, &Ia_vcvtsi2sd_Vsd_Hpd_Ey } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f2b[2] = { + /* -- */ { 0, &Ia_vmovntps_Mps_Vps }, + /* 66 */ { 0, &Ia_vmovntpd_Mpd_Vpd } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f2c[4] = { + /* -- */ { 0, &Ia_Invalid }, + /* 66 */ { 0, &Ia_Invalid }, + /* F3 */ { 0, &Ia_vcvttss2si_Gy_Wss }, + /* F2 */ { 0, &Ia_vcvttsd2si_Gy_Wsd } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f2d[4] = { + /* -- */ { 0, &Ia_Invalid }, + /* 66 */ { 0, &Ia_Invalid }, + /* F3 */ { 0, &Ia_vcvtss2si_Gy_Wss }, + /* F2 */ { 0, &Ia_vcvtsd2si_Gy_Wsd } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f2e[2] = { + /* -- */ { 0, &Ia_vucomiss_Vss_Wss }, + /* 66 */ { 0, &Ia_vucomisd_Vsd_Wsd } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f2f[2] = { + /* -- */ { 0, &Ia_vcomiss_Vss_Wss }, + /* 66 */ { 0, &Ia_vcomisd_Vsd_Wsd } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f50[2] = { + /* -- */ { 0, &Ia_vmovmskps_Gd_Ups }, + /* 66 */ { 0, &Ia_vmovmskpd_Gd_Upd } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f51[4] = { + /* -- */ { 0, &Ia_vsqrtps_Vps_Wps }, + /* 66 */ { 0, &Ia_vsqrtpd_Vpd_Wpd }, + /* F3 */ { 0, &Ia_vsqrtss_Vss_Hps_Wss }, + /* F2 */ { 0, &Ia_vsqrtsd_Vsd_Hpd_Wsd } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f52[4] = { + /* -- */ { 0, &Ia_vrsqrtps_Vps_Wps }, + /* 66 */ { 0, &Ia_Invalid }, + /* F3 */ { 0, &Ia_vrsqrtss_Vss_Hps_Wss }, + /* F2 */ { 0, &Ia_Invalid } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f53[4] = { + /* -- */ { 0, &Ia_vrcpps_Vps_Wps }, + /* 66 */ { 0, &Ia_Invalid }, + /* F3 */ { 0, &Ia_vrcpss_Vss_Hps_Wss }, + /* F2 */ { 0, &Ia_Invalid } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f54[2] = { + /* -- */ { 0, &Ia_vandps_Vps_Hps_Wps }, + /* 66 */ { 0, &Ia_vandpd_Vpd_Hpd_Wpd } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f55[2] = { + /* -- */ { 0, &Ia_vandnps_Vps_Hps_Wps }, + /* 66 */ { 0, &Ia_vandnpd_Vpd_Hpd_Wpd } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f56[2] = { + /* -- */ { 0, &Ia_vorps_Vps_Hps_Wps }, + /* 66 */ { 0, &Ia_vorpd_Vpd_Hpd_Wpd } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f57[2] = { + /* -- */ { 0, &Ia_vxorps_Vps_Hps_Wps }, + /* 66 */ { 0, &Ia_vxorpd_Vpd_Hpd_Wpd } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f58[4] = { + /* -- */ { 0, &Ia_vaddps_Vps_Hps_Wps }, + /* 66 */ { 0, &Ia_vaddpd_Vpd_Hpd_Wpd }, + /* F3 */ { 0, &Ia_vaddss_Vss_Hps_Wss }, + /* F2 */ { 0, &Ia_vaddsd_Vsd_Hpd_Wsd } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f59[4] = { + /* -- */ { 0, &Ia_vmulps_Vps_Hps_Wps }, + /* 66 */ { 0, &Ia_vmulpd_Vpd_Hpd_Wpd }, + /* F3 */ { 0, &Ia_vmulss_Vss_Hps_Wss }, + /* F2 */ { 0, &Ia_vmulsd_Vsd_Hpd_Wsd } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f5a[4] = { + /* -- */ { 0, &Ia_vcvtps2pd_Vpd_Wps }, + /* 66 */ { 0, &Ia_vcvtpd2ps_Vps_Wpd }, + /* F3 */ { 0, &Ia_vcvtss2sd_Vsd_Hpd_Wss }, + /* F2 */ { 0, &Ia_vcvtsd2ss_Vss_Hps_Wsd } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f5b[4] = { + /* -- */ { 0, &Ia_vcvtdq2ps_Vps_Wdq }, + /* 66 */ { 0, &Ia_vcvtps2dq_Vdq_Wps }, + /* F3 */ { 0, &Ia_vcvttps2dq_Vdq_Wps }, + /* F2 */ { 0, &Ia_Invalid } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f5c[4] = { + /* -- */ { 0, &Ia_vsubps_Vps_Hps_Wps }, + /* 66 */ { 0, &Ia_vsubpd_Vpd_Hpd_Wpd }, + /* F3 */ { 0, &Ia_vsubss_Vss_Hps_Wss }, + /* F2 */ { 0, &Ia_vsubsd_Vsd_Hpd_Wsd } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f5d[4] = { + /* -- */ { 0, &Ia_vminps_Vps_Hps_Wps }, + /* 66 */ { 0, &Ia_vminpd_Vpd_Hpd_Wpd }, + /* F3 */ { 0, &Ia_vminss_Vss_Hps_Wss }, + /* F2 */ { 0, &Ia_vminsd_Vsd_Hpd_Wsd } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f5e[4] = { + /* -- */ { 0, &Ia_vdivps_Vps_Hps_Wps }, + /* 66 */ { 0, &Ia_vdivpd_Vpd_Hpd_Wpd }, + /* F3 */ { 0, &Ia_vdivss_Vss_Hps_Wss }, + /* F2 */ { 0, &Ia_vdivsd_Vsd_Hpd_Wsd } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f5f[4] = { + /* -- */ { 0, &Ia_vmaxps_Vps_Hps_Wps }, + /* 66 */ { 0, &Ia_vmaxpd_Vpd_Hpd_Wpd }, + /* F3 */ { 0, &Ia_vmaxss_Vss_Hps_Wss }, + /* F2 */ { 0, &Ia_vmaxsd_Vsd_Hpd_Wsd } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_AVX0f6e[3] = { + /* 0 */ { GRPSSE66(Ia_vmovd_Vdq_Ed) }, + /* 1 */ { GRPSSE66(Ia_vmovq_Vdq_Eq) } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f6f[4] = { + /* -- */ { 0, &Ia_Invalid }, + /* 66 */ { 0, &Ia_vmovdqa_Vdq_Wdq }, + /* F3 */ { 0, &Ia_vmovdqu_Vdq_Wdq }, + /* F2 */ { 0, &Ia_Invalid } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f70[4] = { + /* -- */ { 0, &Ia_Invalid }, + /* 66 */ { 0, &Ia_vpshufd_Vdq_Hdq_Wdq_Ib }, + /* F3 */ { 0, &Ia_vpshufhw_Vdq_Hdq_Wdq_Ib }, + /* F2 */ { 0, &Ia_vpshuflw_Vdq_Hdq_Wdq_Ib } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f7c[4] = { + /* -- */ { 0, &Ia_Invalid }, + /* 66 */ { 0, &Ia_vhaddpd_Vpd_Hpd_Wpd }, + /* F3 */ { 0, &Ia_Invalid }, + /* F2 */ { 0, &Ia_vhaddps_Vps_Hps_Wps } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f7d[4] = { + /* -- */ { 0, &Ia_Invalid }, + /* 66 */ { 0, &Ia_vhsubpd_Vpd_Hpd_Wpd }, + /* F3 */ { 0, &Ia_Invalid }, + /* F2 */ { 0, &Ia_vhsubps_Vps_Hps_Wps } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_AVX660f7e[3] = { + /* 0 */ { 0, &Ia_vmovd_Ed_Vd }, + /* 1 */ { 0, &Ia_vmovq_Eq_Vq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f7e[4] = { + /* -- */ { 0, &Ia_Invalid }, + /* 66 */ { GRPVEXW(AVX660f7e) }, + /* F3 */ { 0, &Ia_vmovq_Vq_Wq }, + /* F2 */ { 0, &Ia_Invalid } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f7f[4] = { + /* -- */ { 0, &Ia_Invalid }, + /* 66 */ { 0, &Ia_vmovdqa_Wdq_Vdq }, + /* F3 */ { 0, &Ia_vmovdqu_Wdq_Vdq }, + /* F2 */ { 0, &Ia_Invalid } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0fc2[4] = { + /* -- */ { 0, &Ia_vcmpps_Vps_Hps_Wps_Ib }, + /* 66 */ { 0, &Ia_vcmppd_Vpd_Hpd_Wpd_Ib }, + /* F3 */ { 0, &Ia_vcmpss_Vss_Hps_Wss_Ib }, + /* F2 */ { 0, &Ia_vcmpsd_Vsd_Hpd_Wsd_Ib } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0fc6[2] = { + /* -- */ { 0, &Ia_vshufps_Vps_Hps_Wps_Ib }, + /* 66 */ { 0, &Ia_vshufpd_Vpd_Hpd_Wpd_Ib } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0fd0[4] = { + /* -- */ { 0, &Ia_Invalid }, + /* 66 */ { 0, &Ia_vaddsubpd_Vpd_Hpd_Wpd }, + /* F3 */ { 0, &Ia_Invalid }, + /* F2 */ { 0, &Ia_vaddsubps_Vps_Hps_Wps } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0fe6[4] = { + /* -- */ { 0, &Ia_Invalid }, + /* 66 */ { 0, &Ia_vcvttpd2dq_Vq_Wpd }, + /* F3 */ { 0, &Ia_vcvtdq2pd_Vpd_Wq }, + /* F2 */ { 0, &Ia_vcvtpd2dq_Vq_Wpd } +}; + +/* Group12 */ +static BxDisasmOpcodeTable_t BxDisasmGroupAVXG12[8] = { + /* 0 */ { 0, &Ia_Invalid }, + /* 1 */ { 0, &Ia_Invalid }, + /* 2 */ { GRPSSE66(Ia_vpsrlw_Hdq_Udq_Ib) }, + /* 3 */ { 0, &Ia_Invalid }, + /* 4 */ { GRPSSE66(Ia_vpsraw_Hdq_Udq_Ib) }, + /* 5 */ { 0, &Ia_Invalid }, + /* 6 */ { GRPSSE66(Ia_vpsllw_Hdq_Udq_Ib) }, + /* 7 */ { 0, &Ia_Invalid } +}; + +/* Group13 */ +static BxDisasmOpcodeTable_t BxDisasmGroupAVXG13[8] = { + /* 0 */ { 0, &Ia_Invalid }, + /* 1 */ { 0, &Ia_Invalid }, + /* 2 */ { GRPSSE66(Ia_vpsrld_Hdq_Udq_Ib) }, + /* 3 */ { 0, &Ia_Invalid }, + /* 4 */ { GRPSSE66(Ia_vpsrad_Hdq_Udq_Ib) }, + /* 5 */ { 0, &Ia_Invalid }, + /* 6 */ { GRPSSE66(Ia_vpslld_Hdq_Udq_Ib) }, + /* 7 */ { 0, &Ia_Invalid } +}; + +/* Group14 */ +static BxDisasmOpcodeTable_t BxDisasmGroupAVXG14[8] = { + /* 0 */ { 0, &Ia_Invalid }, + /* 1 */ { 0, &Ia_Invalid }, + /* 2 */ { GRPSSE66(Ia_vpsrlq_Hdq_Udq_Ib) }, + /* 3 */ { GRPSSE66(Ia_vpsrldq_Hdq_Udq_Ib) }, + /* 4 */ { 0, &Ia_Invalid }, + /* 5 */ { 0, &Ia_Invalid }, + /* 6 */ { GRPSSE66(Ia_vpsllq_Hdq_Udq_Ib) }, + /* 7 */ { GRPSSE66(Ia_vpslldq_Hdq_Udq_Ib) } +}; + +/* Group15 */ +static BxDisasmOpcodeTable_t BxDisasmGroupAVXG15M[8] = { + /* 0 */ { 0, &Ia_Invalid }, + /* 1 */ { 0, &Ia_Invalid }, + /* 2 */ { 0, &Ia_vldmxcsr }, + /* 3 */ { 0, &Ia_vstmxcsr }, + /* 4 */ { 0, &Ia_Invalid }, + /* 5 */ { 0, &Ia_Invalid }, + /* 6 */ { 0, &Ia_Invalid }, + /* 7 */ { 0, &Ia_Invalid } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupModAVXG15[2] = { + /* R */ { 0, &Ia_Invalid }, + /* M */ { GRPN(AVXG15M) } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3a16[2] = { + /* 0 */ { GRPSSE66(Ia_vpextrd_Ed_Vdq_Ib) }, + /* 1 */ { GRPSSE66(Ia_vpextrq_Eq_Vdq_Ib) } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3a22[2] = { + /* 0 */ { GRPSSE66(Ia_vpinsrd_Vdq_Hdq_Ed_Ib) }, + /* 1 */ { GRPSSE66(Ia_vpinsrq_Vdq_Hdq_Eq_Ib) } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3a00[2] = { + /* 0 */ { 0, &Ia_Invalid }, + /* 1 */ { GRPSSE66(Ia_vpermq_Vdq_Wdq_Ib) } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3a01[2] = { + /* 0 */ { 0, &Ia_Invalid }, + /* 1 */ { GRPSSE66(Ia_vpermpd_Vpd_Wpd_Ib) } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3845[2] = { + /* 0 */ { GRPSSE66(Ia_vpsrlvd_Vdq_Hdq_Wdq) }, + /* 1 */ { GRPSSE66(Ia_vpsrlvq_Vdq_Hdq_Wdq) } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3847[2] = { + /* 0 */ { GRPSSE66(Ia_vpsllvd_Vdq_Hdq_Wdq) }, + /* 1 */ { GRPSSE66(Ia_vpsllvq_Vdq_Hdq_Wdq) } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f388c[2] = { + /* 0 */ { GRPSSE66(Ia_vmaskmovd_Vdq_Hdq_Mdq) }, + /* 1 */ { GRPSSE66(Ia_vmaskmovq_Vdq_Hdq_Mdq) } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f388e[2] = { + /* 0 */ { GRPSSE66(Ia_vmaskmovd_Mdq_Hdq_Vdq) }, + /* 1 */ { GRPSSE66(Ia_vmaskmovq_Mdq_Hdq_Vdq) } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3890[2] = { + /* 0 */ { GRPSSE66(Ia_vgatherdd_Vdq_VSib_Hdq) }, + /* 1 */ { GRPSSE66(Ia_vgatherdq_Vdq_VSib_Hdq) } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3891[2] = { + /* 0 */ { GRPSSE66(Ia_vgatherqd_Vdq_VSib_Hdq) }, + /* 1 */ { GRPSSE66(Ia_vgatherqq_Vdq_VSib_Hdq) } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3892[2] = { + /* 0 */ { GRPSSE66(Ia_vgatherdps_Vps_VSib_Hps) }, + /* 1 */ { GRPSSE66(Ia_vgatherdpd_Vpd_VSib_Hpd) } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3893[2] = { + /* 0 */ { GRPSSE66(Ia_vgatherqps_Vps_VSib_Hps) }, + /* 1 */ { GRPSSE66(Ia_vgatherqpd_Vpd_VSib_Hpd) } +}; + +// FMA +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3896[2] = { + /* 0 */ { GRPSSE66(Ia_vfmaddsub132ps_Vps_Hps_Wps) }, + /* 1 */ { GRPSSE66(Ia_vfmaddsub132pd_Vpd_Hpd_Wpd) } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3897[2] = { + /* 0 */ { GRPSSE66(Ia_vfmsubadd132ps_Vps_Hps_Wps) }, + /* 1 */ { GRPSSE66(Ia_vfmsubadd132pd_Vpd_Hpd_Wpd) } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3898[2] = { + /* 0 */ { GRPSSE66(Ia_vfmadd132ps_Vps_Hps_Wps) }, + /* 1 */ { GRPSSE66(Ia_vfmadd132pd_Vpd_Hpd_Wpd) } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3899[2] = { + /* 0 */ { GRPSSE66(Ia_vfmadd132ss_Vps_Hss_Wss) }, + /* 1 */ { GRPSSE66(Ia_vfmadd132sd_Vpd_Hsd_Wsd) } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f389a[2] = { + /* 0 */ { GRPSSE66(Ia_vfmsub132ps_Vps_Hps_Wps) }, + /* 1 */ { GRPSSE66(Ia_vfmsub132pd_Vpd_Hpd_Wpd) } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f389b[2] = { + /* 0 */ { GRPSSE66(Ia_vfmsub132ss_Vps_Hss_Wss) }, + /* 1 */ { GRPSSE66(Ia_vfmsub132sd_Vpd_Hsd_Wsd) } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f389c[2] = { + /* 0 */ { GRPSSE66(Ia_vfnmadd132ps_Vps_Hps_Wps) }, + /* 1 */ { GRPSSE66(Ia_vfnmadd132pd_Vpd_Hpd_Wpd) } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f389d[2] = { + /* 0 */ { GRPSSE66(Ia_vfnmadd132ss_Vps_Hss_Wss) }, + /* 1 */ { GRPSSE66(Ia_vfnmadd132sd_Vpd_Hsd_Wsd) } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f389e[2] = { + /* 0 */ { GRPSSE66(Ia_vfnmsub132ps_Vps_Hps_Wps) }, + /* 1 */ { GRPSSE66(Ia_vfnmsub132pd_Vpd_Hpd_Wpd) } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f389f[2] = { + /* 0 */ { GRPSSE66(Ia_vfnmsub132ss_Vps_Hss_Wss) }, + /* 1 */ { GRPSSE66(Ia_vfnmsub132sd_Vpd_Hsd_Wsd) } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f38a6[2] = { + /* 0 */ { GRPSSE66(Ia_vfmaddsub213ps_Vps_Hps_Wps) }, + /* 1 */ { GRPSSE66(Ia_vfmaddsub213pd_Vpd_Hpd_Wpd) } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f38a7[2] = { + /* 0 */ { GRPSSE66(Ia_vfmsubadd213ps_Vps_Hps_Wps) }, + /* 1 */ { GRPSSE66(Ia_vfmsubadd213pd_Vpd_Hpd_Wpd) } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f38a8[2] = { + /* 0 */ { GRPSSE66(Ia_vfmadd213ps_Vps_Hps_Wps) }, + /* 1 */ { GRPSSE66(Ia_vfmadd213pd_Vpd_Hpd_Wpd) } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f38a9[2] = { + /* 0 */ { GRPSSE66(Ia_vfmadd213ss_Vps_Hss_Wss) }, + /* 1 */ { GRPSSE66(Ia_vfmadd213sd_Vpd_Hsd_Wsd) } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f38aa[2] = { + /* 0 */ { GRPSSE66(Ia_vfmsub213ps_Vps_Hps_Wps) }, + /* 1 */ { GRPSSE66(Ia_vfmsub213pd_Vpd_Hpd_Wpd) } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f38ab[2] = { + /* 0 */ { GRPSSE66(Ia_vfmsub213ss_Vps_Hss_Wss) }, + /* 1 */ { GRPSSE66(Ia_vfmsub213sd_Vpd_Hsd_Wsd) } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f38ac[2] = { + /* 0 */ { GRPSSE66(Ia_vfnmadd213ps_Vps_Hps_Wps) }, + /* 1 */ { GRPSSE66(Ia_vfnmadd213pd_Vpd_Hpd_Wpd) } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f38ad[2] = { + /* 0 */ { GRPSSE66(Ia_vfnmadd213ss_Vps_Hss_Wss) }, + /* 1 */ { GRPSSE66(Ia_vfnmadd213sd_Vpd_Hsd_Wsd) } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f38ae[2] = { + /* 0 */ { GRPSSE66(Ia_vfnmsub213ps_Vps_Hps_Wps) }, + /* 1 */ { GRPSSE66(Ia_vfnmsub213pd_Vpd_Hpd_Wpd) } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f38af[2] = { + /* 0 */ { GRPSSE66(Ia_vfnmsub213ss_Vps_Hss_Wss) }, + /* 1 */ { GRPSSE66(Ia_vfnmsub213sd_Vpd_Hsd_Wsd) } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f38b6[2] = { + /* 0 */ { GRPSSE66(Ia_vfmaddsub231ps_Vps_Hps_Wps) }, + /* 1 */ { GRPSSE66(Ia_vfmaddsub231pd_Vpd_Hpd_Wpd) } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f38b7[2] = { + /* 0 */ { GRPSSE66(Ia_vfmsubadd231ps_Vps_Hps_Wps) }, + /* 1 */ { GRPSSE66(Ia_vfmsubadd231pd_Vpd_Hpd_Wpd) } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f38b8[2] = { + /* 0 */ { GRPSSE66(Ia_vfmadd231ps_Vps_Hps_Wps) }, + /* 1 */ { GRPSSE66(Ia_vfmadd231pd_Vpd_Hpd_Wpd) } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f38b9[2] = { + /* 0 */ { GRPSSE66(Ia_vfmadd231ss_Vps_Hss_Wss) }, + /* 1 */ { GRPSSE66(Ia_vfmadd231sd_Vpd_Hsd_Wsd) } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f38ba[2] = { + /* 0 */ { GRPSSE66(Ia_vfmsub231ps_Vps_Hps_Wps) }, + /* 1 */ { GRPSSE66(Ia_vfmsub231pd_Vpd_Hpd_Wpd) } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f38bb[2] = { + /* 0 */ { GRPSSE66(Ia_vfmsub231ss_Vps_Hss_Wss) }, + /* 1 */ { GRPSSE66(Ia_vfmsub231sd_Vpd_Hsd_Wsd) } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f38bc[2] = { + /* 0 */ { GRPSSE66(Ia_vfnmadd231ps_Vps_Hps_Wps) }, + /* 1 */ { GRPSSE66(Ia_vfnmadd231pd_Vpd_Hpd_Wpd) } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f38bd[2] = { + /* 0 */ { GRPSSE66(Ia_vfnmadd231ss_Vps_Hss_Wss) }, + /* 1 */ { GRPSSE66(Ia_vfnmadd231sd_Vpd_Hsd_Wsd) } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f38be[2] = { + /* 0 */ { GRPSSE66(Ia_vfnmsub231ps_Vps_Hps_Wps) }, + /* 1 */ { GRPSSE66(Ia_vfnmsub231pd_Vpd_Hpd_Wpd) } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f38bf[2] = { + /* 0 */ { GRPSSE66(Ia_vfnmsub231ss_Vps_Hss_Wss) }, + /* 1 */ { GRPSSE66(Ia_vfnmsub231sd_Vpd_Hsd_Wsd) } +}; +// FMA + +static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f38f5[4] = { + /* -- */ { 0, &Ia_bzhi_Gy_Ey_By }, + /* 66 */ { 0, &Ia_Invalid }, + /* F3 */ { 0, &Ia_pext_Gy_By_Ey }, + /* F2 */ { 0, &Ia_pdep_Gy_By_Ey } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f38f7[4] = { + /* -- */ { 0, &Ia_bextr_Gy_Ey_By }, + /* 66 */ { 0, &Ia_shlx_Gy_Ey_By }, + /* F3 */ { 0, &Ia_sarx_Gy_Ey_By }, + /* F2 */ { 0, &Ia_shrx_Gy_Ey_By } +}; + +/* Group17 */ +static BxDisasmOpcodeTable_t BxDisasmGroupAVXG17[8] = { + /* 0 */ { 0, &Ia_Invalid }, + /* 1 */ { 0, &Ia_blsr_By_Ey }, + /* 2 */ { 0, &Ia_blsmsk_By_Ey }, + /* 3 */ { 0, &Ia_blsi_By_Ey }, + /* 4 */ { 0, &Ia_Invalid }, + /* 5 */ { 0, &Ia_Invalid }, + /* 6 */ { 0, &Ia_Invalid }, + /* 7 */ { 0, &Ia_Invalid } +}; + +// FMA4 (AMD) +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3a5c[2] = { + /* 0 */ { GRPSSE66(Ia_vfmaddsubps_Vps_Hps_Wps_VIb) }, + /* 1 */ { GRPSSE66(Ia_vfmaddsubps_Vps_Hps_VIb_Wps) } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3a5d[2] = { + /* 0 */ { GRPSSE66(Ia_vfmaddsubpd_Vpd_Hpd_Wpd_VIb) }, + /* 1 */ { GRPSSE66(Ia_vfmaddsubpd_Vpd_Hpd_VIb_Wpd) } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3a5e[2] = { + /* 0 */ { GRPSSE66(Ia_vfmsubaddps_Vps_Hps_Wps_VIb) }, + /* 1 */ { GRPSSE66(Ia_vfmsubaddps_Vps_Hps_VIb_Wps) } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3a5f[2] = { + /* 0 */ { GRPSSE66(Ia_vfmsubaddpd_Vpd_Hpd_Wpd_VIb) }, + /* 1 */ { GRPSSE66(Ia_vfmsubaddpd_Vpd_Hpd_VIb_Wpd) } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3a68[2] = { + /* 0 */ { GRPSSE66(Ia_vfmaddps_Vps_Hps_Wps_VIb) }, + /* 1 */ { GRPSSE66(Ia_vfmaddps_Vps_Hps_VIb_Wps) } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3a69[2] = { + /* 0 */ { GRPSSE66(Ia_vfmaddpd_Vpd_Hpd_Wpd_VIb) }, + /* 1 */ { GRPSSE66(Ia_vfmaddpd_Vpd_Hpd_VIb_Wpd) } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3a6a[2] = { + /* 0 */ { GRPSSE66(Ia_vfmaddss_Vss_Hss_Wss_VIb) }, + /* 1 */ { GRPSSE66(Ia_vfmaddss_Vss_Hss_VIb_Wss) } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3a6b[2] = { + /* 0 */ { GRPSSE66(Ia_vfmaddsd_Vsd_Hsd_Wsd_VIb) }, + /* 1 */ { GRPSSE66(Ia_vfmaddsd_Vsd_Hsd_VIb_Wsd) } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3a6c[2] = { + /* 0 */ { GRPSSE66(Ia_vfmsubps_Vps_Hps_Wps_VIb) }, + /* 1 */ { GRPSSE66(Ia_vfmsubps_Vps_Hps_VIb_Wps) } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3a6d[2] = { + /* 0 */ { GRPSSE66(Ia_vfmsubpd_Vpd_Hpd_Wpd_VIb) }, + /* 1 */ { GRPSSE66(Ia_vfmsubpd_Vpd_Hpd_VIb_Wpd) } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3a6e[2] = { + /* 0 */ { GRPSSE66(Ia_vfmsubss_Vss_Hss_Wss_VIb) }, + /* 1 */ { GRPSSE66(Ia_vfmsubss_Vss_Hss_VIb_Wss) } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3a6f[2] = { + /* 0 */ { GRPSSE66(Ia_vfmsubsd_Vsd_Hsd_Wsd_VIb) }, + /* 1 */ { GRPSSE66(Ia_vfmsubsd_Vsd_Hsd_VIb_Wsd) } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3a78[2] = { + /* 0 */ { GRPSSE66(Ia_vfnmaddps_Vps_Hps_Wps_VIb) }, + /* 1 */ { GRPSSE66(Ia_vfnmaddps_Vps_Hps_VIb_Wps) } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3a79[2] = { + /* 0 */ { GRPSSE66(Ia_vfnmaddpd_Vpd_Hpd_Wpd_VIb) }, + /* 1 */ { GRPSSE66(Ia_vfnmaddpd_Vpd_Hpd_VIb_Wpd) } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3a7a[2] = { + /* 0 */ { GRPSSE66(Ia_vfnmaddss_Vss_Hss_Wss_VIb) }, + /* 1 */ { GRPSSE66(Ia_vfnmaddss_Vss_Hss_VIb_Wss) } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3a7b[2] = { + /* 0 */ { GRPSSE66(Ia_vfnmaddsd_Vsd_Hsd_Wsd_VIb) }, + /* 1 */ { GRPSSE66(Ia_vfnmaddsd_Vsd_Hsd_VIb_Wsd) } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3a7c[2] = { + /* 0 */ { GRPSSE66(Ia_vfnmsubps_Vps_Hps_Wps_VIb) }, + /* 1 */ { GRPSSE66(Ia_vfnmsubps_Vps_Hps_VIb_Wps) } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3a7d[2] = { + /* 0 */ { GRPSSE66(Ia_vfnmsubpd_Vpd_Hpd_Wpd_VIb) }, + /* 1 */ { GRPSSE66(Ia_vfnmsubpd_Vpd_Hpd_VIb_Wpd) } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3a7e[2] = { + /* 0 */ { GRPSSE66(Ia_vfnmsubss_Vss_Hss_Wss_VIb) }, + /* 1 */ { GRPSSE66(Ia_vfnmsubss_Vss_Hss_VIb_Wss) } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3a7f[2] = { + /* 0 */ { GRPSSE66(Ia_vfnmsubsd_Vsd_Hsd_Wsd_VIb) }, + /* 1 */ { GRPSSE66(Ia_vfnmsubsd_Vsd_Hsd_VIb_Wsd) } +}; +// FMA4 (AMD) + +static BxDisasmOpcodeTable_t BxDisasmOpcodesAVX[256*3] = { + // 256 entries for VEX-encoded 0x0F opcodes + /* 00 */ { 0, &Ia_Invalid }, + /* 01 */ { 0, &Ia_Invalid }, + /* 02 */ { 0, &Ia_Invalid }, + /* 03 */ { 0, &Ia_Invalid }, + /* 04 */ { 0, &Ia_Invalid }, + /* 05 */ { 0, &Ia_Invalid }, + /* 06 */ { 0, &Ia_Invalid }, + /* 07 */ { 0, &Ia_Invalid }, + /* 08 */ { 0, &Ia_Invalid }, + /* 09 */ { 0, &Ia_Invalid }, + /* 0A */ { 0, &Ia_Invalid }, + /* 0B */ { 0, &Ia_Invalid }, + /* 0C */ { 0, &Ia_Invalid }, + /* 0D */ { 0, &Ia_Invalid }, + /* 0E */ { 0, &Ia_Invalid }, + /* 0F */ { 0, &Ia_Invalid }, + /* 10 */ { GRPAVX(0f10) }, + /* 11 */ { GRPAVX(0f11) }, + /* 12 */ { GRPAVX(0f12) }, + /* 13 */ { GRPAVX2(0f13) }, + /* 14 */ { GRPAVX2(0f14) }, + /* 15 */ { GRPAVX2(0f15) }, + /* 16 */ { GRPAVX(0f16) }, + /* 17 */ { GRPAVX2(0f17) }, + /* 18 */ { 0, &Ia_Invalid }, + /* 19 */ { 0, &Ia_Invalid }, + /* 1A */ { 0, &Ia_Invalid }, + /* 1B */ { 0, &Ia_Invalid }, + /* 1C */ { 0, &Ia_Invalid }, + /* 1D */ { 0, &Ia_Invalid }, + /* 1E */ { 0, &Ia_Invalid }, + /* 1F */ { 0, &Ia_Invalid }, + /* 20 */ { 0, &Ia_Invalid }, + /* 21 */ { 0, &Ia_Invalid }, + /* 22 */ { 0, &Ia_Invalid }, + /* 23 */ { 0, &Ia_Invalid }, + /* 24 */ { 0, &Ia_Invalid }, + /* 25 */ { 0, &Ia_Invalid }, + /* 26 */ { 0, &Ia_Invalid }, + /* 27 */ { 0, &Ia_Invalid }, + /* 28 */ { GRPAVX2(0f28) }, + /* 29 */ { GRPAVX2(0f29) }, + /* 2A */ { GRPAVX(0f2a) }, + /* 2B */ { GRPAVX2(0f2b) }, + /* 2C */ { GRPAVX(0f2c) }, + /* 2C */ { GRPAVX(0f2d) }, + /* 2E */ { GRPAVX2(0f2e) }, + /* 2F */ { GRPAVX2(0f2f) }, + /* 30 */ { 0, &Ia_Invalid }, + /* 31 */ { 0, &Ia_Invalid }, + /* 32 */ { 0, &Ia_Invalid }, + /* 33 */ { 0, &Ia_Invalid }, + /* 34 */ { 0, &Ia_Invalid }, + /* 35 */ { 0, &Ia_Invalid }, + /* 36 */ { 0, &Ia_Invalid }, + /* 37 */ { 0, &Ia_Invalid }, + /* 38 */ { 0, &Ia_Invalid }, + /* 39 */ { 0, &Ia_Invalid }, + /* 3A */ { 0, &Ia_Invalid }, + /* 3B */ { 0, &Ia_Invalid }, + /* 3C */ { 0, &Ia_Invalid }, + /* 3D */ { 0, &Ia_Invalid }, + /* 3E */ { 0, &Ia_Invalid }, + /* 3F */ { 0, &Ia_Invalid }, + /* 40 */ { 0, &Ia_Invalid }, + /* 41 */ { 0, &Ia_Invalid }, + /* 42 */ { 0, &Ia_Invalid }, + /* 43 */ { 0, &Ia_Invalid }, + /* 44 */ { 0, &Ia_Invalid }, + /* 45 */ { 0, &Ia_Invalid }, + /* 46 */ { 0, &Ia_Invalid }, + /* 47 */ { 0, &Ia_Invalid }, + /* 48 */ { 0, &Ia_Invalid }, + /* 49 */ { 0, &Ia_Invalid }, + /* 4A */ { 0, &Ia_Invalid }, + /* 4B */ { 0, &Ia_Invalid }, + /* 4C */ { 0, &Ia_Invalid }, + /* 4D */ { 0, &Ia_Invalid }, + /* 4E */ { 0, &Ia_Invalid }, + /* 4F */ { 0, &Ia_Invalid }, + /* 50 */ { GRPAVX2(0f50) }, + /* 51 */ { GRPAVX(0f51) }, + /* 52 */ { GRPAVX(0f52) }, + /* 53 */ { GRPAVX(0f53) }, + /* 54 */ { GRPAVX2(0f54) }, + /* 55 */ { GRPAVX2(0f55) }, + /* 56 */ { GRPAVX2(0f56) }, + /* 57 */ { GRPAVX2(0f57) }, + /* 58 */ { GRPAVX(0f58) }, + /* 59 */ { GRPAVX(0f59) }, + /* 5A */ { GRPAVX(0f5a) }, + /* 5B */ { GRPAVX(0f5b) }, + /* 5C */ { GRPAVX(0f5c) }, + /* 5D */ { GRPAVX(0f5d) }, + /* 5E */ { GRPAVX(0f5e) }, + /* 5F */ { GRPAVX(0f5f) }, + /* 60 */ { GRPSSE66(Ia_vpunpcklbw_Vdq_Hdq_Wdq) }, + /* 61 */ { GRPSSE66(Ia_vpunpcklwd_Vdq_Hdq_Wdq) }, + /* 62 */ { GRPSSE66(Ia_vpunpckldq_Vdq_Hdq_Wdq) }, + /* 63 */ { GRPSSE66(Ia_vpacksswb_Vdq_Hdq_Wdq) }, + /* 64 */ { GRPSSE66(Ia_vpcmpgtb_Vdq_Hdq_Wdq) }, + /* 65 */ { GRPSSE66(Ia_vpcmpgtw_Vdq_Hdq_Wdq) }, + /* 66 */ { GRPSSE66(Ia_vpcmpgtd_Vdq_Hdq_Wdq) }, + /* 67 */ { GRPSSE66(Ia_vpackuswb_Vdq_Hdq_Wdq) }, + /* 68 */ { GRPSSE66(Ia_vpunpckhbw_Vdq_Hdq_Wdq) }, + /* 69 */ { GRPSSE66(Ia_vpunpckhwd_Vdq_Hdq_Wdq) }, + /* 6A */ { GRPSSE66(Ia_vpunpckhdq_Vdq_Hdq_Wdq) }, + /* 6B */ { GRPSSE66(Ia_vpackssdw_Vdq_Hdq_Wdq) }, + /* 6C */ { GRPSSE66(Ia_vpunpcklqdq_Vdq_Hdq_Wdq) }, + /* 6D */ { GRPSSE66(Ia_vpunpckhqdq_Vdq_Hdq_Wdq) }, + /* 6E */ { GRPVEXW(AVX0f6e) }, + /* 6F */ { GRPAVX(0f6f) }, + /* 70 */ { GRPAVX(0f70) }, + /* 71 */ { GRPN(AVXG12) }, + /* 72 */ { GRPN(AVXG13) }, + /* 73 */ { GRPN(AVXG14) }, + /* 74 */ { GRPSSE66(Ia_vpcmpeqb_Vdq_Hdq_Wdq) }, + /* 75 */ { GRPSSE66(Ia_vpcmpeqw_Vdq_Hdq_Wdq) }, + /* 76 */ { GRPSSE66(Ia_vpcmpeqd_Vdq_Hdq_Wdq) }, + /* 77 */ { GRPSSENONE(Ia_vzeroupper) }, + /* 78 */ { 0, &Ia_Invalid }, + /* 79 */ { 0, &Ia_Invalid }, + /* 7A */ { 0, &Ia_Invalid }, + /* 7B */ { 0, &Ia_Invalid }, + /* 7C */ { GRPAVX(0f7c) }, + /* 7D */ { GRPAVX(0f7d) }, + /* 7E */ { GRPAVX(0f7e) }, + /* 7F */ { GRPAVX(0f7f) }, + /* 80 */ { 0, &Ia_Invalid }, + /* 81 */ { 0, &Ia_Invalid }, + /* 82 */ { 0, &Ia_Invalid }, + /* 83 */ { 0, &Ia_Invalid }, + /* 84 */ { 0, &Ia_Invalid }, + /* 85 */ { 0, &Ia_Invalid }, + /* 86 */ { 0, &Ia_Invalid }, + /* 87 */ { 0, &Ia_Invalid }, + /* 88 */ { 0, &Ia_Invalid }, + /* 89 */ { 0, &Ia_Invalid }, + /* 8A */ { 0, &Ia_Invalid }, + /* 8B */ { 0, &Ia_Invalid }, + /* 8C */ { 0, &Ia_Invalid }, + /* 8D */ { 0, &Ia_Invalid }, + /* 8E */ { 0, &Ia_Invalid }, + /* 8F */ { 0, &Ia_Invalid }, + /* 90 */ { 0, &Ia_Invalid }, + /* 91 */ { 0, &Ia_Invalid }, + /* 92 */ { 0, &Ia_Invalid }, + /* 93 */ { 0, &Ia_Invalid }, + /* 94 */ { 0, &Ia_Invalid }, + /* 95 */ { 0, &Ia_Invalid }, + /* 96 */ { 0, &Ia_Invalid }, + /* 97 */ { 0, &Ia_Invalid }, + /* 98 */ { 0, &Ia_Invalid }, + /* 99 */ { 0, &Ia_Invalid }, + /* 9A */ { 0, &Ia_Invalid }, + /* 9B */ { 0, &Ia_Invalid }, + /* 9C */ { 0, &Ia_Invalid }, + /* 9D */ { 0, &Ia_Invalid }, + /* 9E */ { 0, &Ia_Invalid }, + /* 9F */ { 0, &Ia_Invalid }, + /* A0 */ { 0, &Ia_Invalid }, + /* A1 */ { 0, &Ia_Invalid }, + /* A2 */ { 0, &Ia_Invalid }, + /* A3 */ { 0, &Ia_Invalid }, + /* A4 */ { 0, &Ia_Invalid }, + /* A5 */ { 0, &Ia_Invalid }, + /* A6 */ { 0, &Ia_Invalid }, + /* A7 */ { 0, &Ia_Invalid }, + /* A8 */ { 0, &Ia_Invalid }, + /* A9 */ { 0, &Ia_Invalid }, + /* AA */ { 0, &Ia_Invalid }, + /* AB */ { 0, &Ia_Invalid }, + /* AC */ { 0, &Ia_Invalid }, + /* AD */ { 0, &Ia_Invalid }, + /* AE */ { GRPMOD(AVXG15) }, + /* AF */ { 0, &Ia_Invalid }, + /* B0 */ { 0, &Ia_Invalid }, + /* B1 */ { 0, &Ia_Invalid }, + /* B2 */ { 0, &Ia_Invalid }, + /* B3 */ { 0, &Ia_Invalid }, + /* B4 */ { 0, &Ia_Invalid }, + /* B5 */ { 0, &Ia_Invalid }, + /* B6 */ { 0, &Ia_Invalid }, + /* B7 */ { 0, &Ia_Invalid }, + /* B8 */ { 0, &Ia_Invalid }, + /* B9 */ { 0, &Ia_Invalid }, + /* BA */ { 0, &Ia_Invalid }, + /* BB */ { 0, &Ia_Invalid }, + /* BC */ { 0, &Ia_Invalid }, + /* BD */ { 0, &Ia_Invalid }, + /* BE */ { 0, &Ia_Invalid }, + /* BF */ { 0, &Ia_Invalid }, + /* C0 */ { 0, &Ia_Invalid }, + /* C1 */ { 0, &Ia_Invalid }, + /* C2 */ { GRPAVX(0fc2) }, + /* C3 */ { 0, &Ia_Invalid }, + /* C4 */ { GRPSSE66(Ia_vpinsrw_Vdq_Hdq_Ew_Ib) }, + /* C5 */ { GRPSSE66(Ia_vpextrw_Gd_Udq_Ib) }, + /* C6 */ { GRPAVX2(0fc6) }, + /* C7 */ { 0, &Ia_Invalid }, + /* C8 */ { 0, &Ia_Invalid }, + /* C9 */ { 0, &Ia_Invalid }, + /* CA */ { 0, &Ia_Invalid }, + /* CB */ { 0, &Ia_Invalid }, + /* CC */ { 0, &Ia_Invalid }, + /* CD */ { 0, &Ia_Invalid }, + /* CE */ { 0, &Ia_Invalid }, + /* CF */ { 0, &Ia_Invalid }, + /* D0 */ { GRPAVX(0fd0) }, + /* D1 */ { GRPSSE66(Ia_vpsrlw_Vdq_Hdq_Wdq) }, + /* D2 */ { GRPSSE66(Ia_vpsrld_Vdq_Hdq_Wdq) }, + /* D3 */ { GRPSSE66(Ia_vpsrlq_Vdq_Hdq_Wdq) }, + /* D4 */ { GRPSSE66(Ia_vpaddq_Vdq_Hdq_Wdq) }, + /* D5 */ { GRPSSE66(Ia_vpmullw_Vdq_Hdq_Wdq) }, + /* D6 */ { GRPSSE66(Ia_vmovq_Wq_Vq) }, + /* D7 */ { GRPSSE66(Ia_vpmovmskb_Gd_Udq) }, + /* D8 */ { GRPSSE66(Ia_vpsubusb_Vdq_Hdq_Wdq) }, + /* D9 */ { GRPSSE66(Ia_vpsubusw_Vdq_Hdq_Wdq) }, + /* DA */ { GRPSSE66(Ia_vpminub_Vdq_Hdq_Wdq) }, + /* DB */ { GRPSSE66(Ia_vpand_Vdq_Hdq_Wdq) }, + /* DC */ { GRPSSE66(Ia_vpaddusb_Vdq_Hdq_Wdq) }, + /* DD */ { GRPSSE66(Ia_vpaddusw_Vdq_Hdq_Wdq) }, + /* DE */ { GRPSSE66(Ia_vpmaxub_Vdq_Hdq_Wdq) }, + /* DF */ { GRPSSE66(Ia_vpandn_Vdq_Hdq_Wdq) }, + /* E0 */ { GRPSSE66(Ia_vpavgb_Vdq_Hdq_Wdq) }, + /* E1 */ { GRPSSE66(Ia_vpsraw_Vdq_Hdq_Wdq) }, + /* E2 */ { GRPSSE66(Ia_vpsrad_Vdq_Hdq_Wdq) }, + /* E3 */ { GRPSSE66(Ia_vpavgw_Vdq_Hdq_Wdq) }, + /* E4 */ { GRPSSE66(Ia_vpmulhuw_Vdq_Hdq_Wdq) }, + /* E5 */ { GRPSSE66(Ia_vpmulhw_Vdq_Hdq_Wdq) }, + /* E6 */ { GRPAVX(0fe6) }, + /* E7 */ { GRPSSE66(Ia_vmovntdq_Mdq_Vdq) }, + /* E8 */ { GRPSSE66(Ia_vpsubsb_Vdq_Hdq_Wdq) }, + /* E9 */ { GRPSSE66(Ia_vpsubsw_Vdq_Hdq_Wdq) }, + /* EA */ { GRPSSE66(Ia_vpminsw_Vdq_Hdq_Wdq) }, + /* EB */ { GRPSSE66(Ia_vpor_Vdq_Hdq_Wdq) }, + /* EC */ { GRPSSE66(Ia_vpaddsb_Vdq_Hdq_Wdq) }, + /* ED */ { GRPSSE66(Ia_vpaddsw_Vdq_Hdq_Wdq) }, + /* EE */ { GRPSSE66(Ia_vpmaxsw_Vdq_Hdq_Wdq) }, + /* EF */ { GRPSSE66(Ia_vpxor_Vdq_Hdq_Wdq) }, + /* F0 */ { GRPSSEF2(Ia_vlddqu_Vdq_Mdq) }, + /* F1 */ { GRPSSE66(Ia_vpsllw_Vdq_Hdq_Wdq) }, + /* F2 */ { GRPSSE66(Ia_vpslld_Vdq_Hdq_Wdq) }, + /* F3 */ { GRPSSE66(Ia_vpsllq_Vdq_Hdq_Wdq) }, + /* F4 */ { GRPSSE66(Ia_vpmuludq_Vdq_Hdq_Wdq) }, + /* F5 */ { GRPSSE66(Ia_vpmaddwd_Vdq_Hdq_Wdq) }, + /* F6 */ { GRPSSE66(Ia_vpsadbw_Vdq_Hdq_Wdq) }, + /* F7 */ { GRPSSE66(Ia_vmaskmovdqu_Vdq_Udq) }, + /* F8 */ { GRPSSE66(Ia_vpsubb_Vdq_Hdq_Wdq) }, + /* F9 */ { GRPSSE66(Ia_vpsubw_Vdq_Hdq_Wdq) }, + /* FA */ { GRPSSE66(Ia_vpsubd_Vdq_Hdq_Wdq) }, + /* FB */ { GRPSSE66(Ia_vpsubq_Vdq_Hdq_Wdq) }, + /* FC */ { GRPSSE66(Ia_vpaddb_Vdq_Hdq_Wdq) }, + /* FD */ { GRPSSE66(Ia_vpaddw_Vdq_Hdq_Wdq) }, + /* FE */ { GRPSSE66(Ia_vpaddd_Vdq_Hdq_Wdq) }, + /* FF */ { 0, &Ia_Invalid }, + + // 256 entries for VEX-encoded 0x0F 0x38 opcodes + /* 00 */ { GRPSSE66(Ia_vpshufb_Vdq_Hdq_Wdq) }, + /* 01 */ { GRPSSE66(Ia_vphaddw_Vdq_Hdq_Wdq) }, + /* 02 */ { GRPSSE66(Ia_vphaddd_Vdq_Hdq_Wdq) }, + /* 03 */ { GRPSSE66(Ia_vphaddsw_Vdq_Hdq_Wdq) }, + /* 04 */ { GRPSSE66(Ia_vpmaddubsw_Vdq_Hdq_Wdq) }, + /* 05 */ { GRPSSE66(Ia_vphsubw_Vdq_Hdq_Wdq) }, + /* 06 */ { GRPSSE66(Ia_vphsubd_Vdq_Hdq_Wdq) }, + /* 07 */ { GRPSSE66(Ia_vphsubsw_Vdq_Hdq_Wdq) }, + /* 08 */ { GRPSSE66(Ia_vpsignb_Vdq_Hdq_Wdq) }, + /* 09 */ { GRPSSE66(Ia_vpsignw_Vdq_Hdq_Wdq) }, + /* 0A */ { GRPSSE66(Ia_vpsignd_Vdq_Hdq_Wdq) }, + /* 0B */ { GRPSSE66(Ia_vpmulhrsw_Vdq_Hdq_Wdq) }, + /* 0C */ { GRPSSE66(Ia_vpermilps_Vps_Hps_Wps) }, + /* 0D */ { GRPSSE66(Ia_vpermilpd_Vpd_Hpd_Wpd) }, + /* 0E */ { GRPSSE66(Ia_vtestps_Vps_Wps) }, + /* 0F */ { GRPSSE66(Ia_vtestpd_Vpd_Wpd) }, + /* 10 */ { 0, &Ia_Invalid }, + /* 11 */ { 0, &Ia_Invalid }, + /* 12 */ { 0, &Ia_Invalid }, + /* 13 */ { GRPSSE66(Ia_vcvtph2ps_Vps_Wq) }, + /* 14 */ { 0, &Ia_Invalid }, + /* 15 */ { 0, &Ia_Invalid }, + /* 16 */ { GRPSSE66(Ia_vpermps_Vps_Hps_Wps) }, + /* 17 */ { GRPSSE66(Ia_vptest_Vdq_Wdq) }, + /* 18 */ { GRPSSE66(Ia_vbroadcastss_Vps_Wss) }, + /* 19 */ { GRPSSE66(Ia_vbroadcastsd_Vpd_Wsd) }, + /* 1A */ { GRPSSE66(Ia_vbroadcastf128_Vdq_Mdq) }, + /* 1B */ { 0, &Ia_Invalid }, + /* 1C */ { GRPSSE66(Ia_vpabsb_Vdq_Hdq_Wdq) }, + /* 1D */ { GRPSSE66(Ia_vpabsw_Vdq_Hdq_Wdq) }, + /* 1E */ { GRPSSE66(Ia_vpabsd_Vdq_Hdq_Wdq) }, + /* 1F */ { 0, &Ia_Invalid }, + /* 20 */ { GRPSSE66(Ia_vpmovsxbw_Vdq_Wq) }, + /* 21 */ { GRPSSE66(Ia_vpmovsxbd_Vdq_Wd) }, + /* 22 */ { GRPSSE66(Ia_vpmovsxbq_Vdq_Ww) }, + /* 23 */ { GRPSSE66(Ia_vpmovsxwd_Vdq_Wq) }, + /* 24 */ { GRPSSE66(Ia_vpmovsxwq_Vdq_Wd) }, + /* 25 */ { GRPSSE66(Ia_vpmovsxdq_Vdq_Wq) }, + /* 26 */ { 0, &Ia_Invalid }, + /* 27 */ { 0, &Ia_Invalid }, + /* 28 */ { GRPSSE66(Ia_vpmuldq_Vdq_Hdq_Wdq) }, + /* 29 */ { GRPSSE66(Ia_vpcmpeqq_Vdq_Hdq_Wdq) }, + /* 2A */ { GRPSSE66(Ia_vmovntdqa_Vdq_Mdq) }, + /* 2B */ { GRPSSE66(Ia_vpackusdw_Vdq_Hdq_Wdq) }, + /* 2C */ { GRPSSE66(Ia_vmaskmovps_Vps_Hps_Mps) }, + /* 2D */ { GRPSSE66(Ia_vmaskmovpd_Vpd_Hpd_Mpd) }, + /* 2E */ { GRPSSE66(Ia_vmaskmovps_Mps_Hps_Vps) }, + /* 2F */ { GRPSSE66(Ia_vmaskmovpd_Mpd_Hpd_Vpd) }, + /* 30 */ { GRPSSE66(Ia_vpmovzxbw_Vdq_Wq) }, + /* 31 */ { GRPSSE66(Ia_vpmovzxbd_Vdq_Wd) }, + /* 32 */ { GRPSSE66(Ia_vpmovzxbq_Vdq_Ww) }, + /* 33 */ { GRPSSE66(Ia_vpmovzxwd_Vdq_Wq) }, + /* 34 */ { GRPSSE66(Ia_vpmovzxwq_Vdq_Wd) }, + /* 35 */ { GRPSSE66(Ia_vpmovzxdq_Vdq_Wq) }, + /* 36 */ { GRPSSE66(Ia_vpermd_Vdq_Hdq_Wdq) }, + /* 37 */ { GRPSSE66(Ia_vpcmpgtq_Vdq_Hdq_Wdq) }, + /* 38 */ { GRPSSE66(Ia_vpminsb_Vdq_Hdq_Wdq) }, + /* 39 */ { GRPSSE66(Ia_vpminsd_Vdq_Hdq_Wdq) }, + /* 3A */ { GRPSSE66(Ia_vpminuw_Vdq_Hdq_Wdq) }, + /* 3B */ { GRPSSE66(Ia_vpminud_Vdq_Hdq_Wdq) }, + /* 3C */ { GRPSSE66(Ia_vpmaxsb_Vdq_Hdq_Wdq) }, + /* 3D */ { GRPSSE66(Ia_vpmaxsd_Vdq_Hdq_Wdq) }, + /* 3E */ { GRPSSE66(Ia_vpmaxuw_Vdq_Hdq_Wdq) }, + /* 3F */ { GRPSSE66(Ia_vpmaxud_Vdq_Hdq_Wdq) }, + /* 40 */ { GRPSSE66(Ia_vpmulld_Vdq_Hdq_Wdq) }, + /* 41 */ { GRPSSE66(Ia_vphminposuw_Vdq_Wdq) }, + /* 42 */ { 0, &Ia_Invalid }, + /* 43 */ { 0, &Ia_Invalid }, + /* 44 */ { 0, &Ia_Invalid }, + /* 45 */ { GRPVEXW(0f3845) }, + /* 46 */ { GRPSSE66(Ia_vpsravd_Vdq_Hdq_Wdq) }, + /* 47 */ { GRPVEXW(0f3847) }, + /* 48 */ { 0, &Ia_Invalid }, + /* 49 */ { 0, &Ia_Invalid }, + /* 4A */ { 0, &Ia_Invalid }, + /* 4B */ { 0, &Ia_Invalid }, + /* 4C */ { 0, &Ia_Invalid }, + /* 4D */ { 0, &Ia_Invalid }, + /* 4E */ { 0, &Ia_Invalid }, + /* 4F */ { 0, &Ia_Invalid }, + /* 50 */ { 0, &Ia_Invalid }, + /* 51 */ { 0, &Ia_Invalid }, + /* 52 */ { 0, &Ia_Invalid }, + /* 53 */ { 0, &Ia_Invalid }, + /* 54 */ { 0, &Ia_Invalid }, + /* 55 */ { 0, &Ia_Invalid }, + /* 56 */ { 0, &Ia_Invalid }, + /* 57 */ { 0, &Ia_Invalid }, + /* 58 */ { GRPSSE66(Ia_vpbroadcastd_Vdq_Wd) }, + /* 59 */ { GRPSSE66(Ia_vpbroadcastq_Vdq_Wq) }, + /* 5A */ { GRPSSE66(Ia_vbroadcasti128_Vdq_Mdq) }, + /* 5B */ { 0, &Ia_Invalid }, + /* 5C */ { 0, &Ia_Invalid }, + /* 5D */ { 0, &Ia_Invalid }, + /* 5E */ { 0, &Ia_Invalid }, + /* 5F */ { 0, &Ia_Invalid }, + /* 60 */ { 0, &Ia_Invalid }, + /* 61 */ { 0, &Ia_Invalid }, + /* 62 */ { 0, &Ia_Invalid }, + /* 63 */ { 0, &Ia_Invalid }, + /* 64 */ { 0, &Ia_Invalid }, + /* 65 */ { 0, &Ia_Invalid }, + /* 66 */ { 0, &Ia_Invalid }, + /* 67 */ { 0, &Ia_Invalid }, + /* 68 */ { 0, &Ia_Invalid }, + /* 69 */ { 0, &Ia_Invalid }, + /* 6A */ { 0, &Ia_Invalid }, + /* 6B */ { 0, &Ia_Invalid }, + /* 6C */ { 0, &Ia_Invalid }, + /* 6D */ { 0, &Ia_Invalid }, + /* 6E */ { 0, &Ia_Invalid }, + /* 6F */ { 0, &Ia_Invalid }, + /* 70 */ { 0, &Ia_Invalid }, + /* 71 */ { 0, &Ia_Invalid }, + /* 72 */ { 0, &Ia_Invalid }, + /* 73 */ { 0, &Ia_Invalid }, + /* 74 */ { 0, &Ia_Invalid }, + /* 75 */ { 0, &Ia_Invalid }, + /* 76 */ { 0, &Ia_Invalid }, + /* 77 */ { 0, &Ia_Invalid }, + /* 78 */ { GRPSSE66(Ia_vpbroadcastb_Vdq_Wb) }, + /* 79 */ { GRPSSE66(Ia_vpbroadcastw_Vdq_Ww) }, + /* 7A */ { 0, &Ia_Invalid }, + /* 7B */ { 0, &Ia_Invalid }, + /* 7C */ { 0, &Ia_Invalid }, + /* 7D */ { 0, &Ia_Invalid }, + /* 7E */ { 0, &Ia_Invalid }, + /* 7F */ { 0, &Ia_Invalid }, + /* 80 */ { 0, &Ia_Invalid }, + /* 81 */ { 0, &Ia_Invalid }, + /* 82 */ { 0, &Ia_Invalid }, + /* 83 */ { 0, &Ia_Invalid }, + /* 84 */ { 0, &Ia_Invalid }, + /* 85 */ { 0, &Ia_Invalid }, + /* 86 */ { 0, &Ia_Invalid }, + /* 87 */ { 0, &Ia_Invalid }, + /* 88 */ { 0, &Ia_Invalid }, + /* 89 */ { 0, &Ia_Invalid }, + /* 8A */ { 0, &Ia_Invalid }, + /* 8B */ { 0, &Ia_Invalid }, + /* 8C */ { GRPVEXW(0f388c) }, + /* 8D */ { 0, &Ia_Invalid }, + /* 8E */ { GRPVEXW(0f388e) }, + /* 8F */ { 0, &Ia_Invalid }, + /* 90 */ { GRPVEXW(0f3890) }, + /* 91 */ { GRPVEXW(0f3891) }, + /* 92 */ { GRPVEXW(0f3892) }, + /* 93 */ { GRPVEXW(0f3893) }, + /* 94 */ { 0, &Ia_Invalid }, + /* 95 */ { 0, &Ia_Invalid }, + /* 96 */ { GRPVEXW(0f3896) }, + /* 97 */ { GRPVEXW(0f3897) }, + /* 98 */ { GRPVEXW(0f3898) }, + /* 99 */ { GRPVEXW(0f3899) }, + /* 9A */ { GRPVEXW(0f389a) }, + /* 9B */ { GRPVEXW(0f389b) }, + /* 9C */ { GRPVEXW(0f389c) }, + /* 9D */ { GRPVEXW(0f389d) }, + /* 9E */ { GRPVEXW(0f389e) }, + /* 9F */ { GRPVEXW(0f389f) }, + /* A0 */ { 0, &Ia_Invalid }, + /* A1 */ { 0, &Ia_Invalid }, + /* A2 */ { 0, &Ia_Invalid }, + /* A3 */ { 0, &Ia_Invalid }, + /* A4 */ { 0, &Ia_Invalid }, + /* A5 */ { 0, &Ia_Invalid }, + /* A6 */ { GRPVEXW(0f38a6) }, + /* A7 */ { GRPVEXW(0f38a7) }, + /* A8 */ { GRPVEXW(0f38a8) }, + /* A9 */ { GRPVEXW(0f38a9) }, + /* AA */ { GRPVEXW(0f38aa) }, + /* AB */ { GRPVEXW(0f38ab) }, + /* AC */ { GRPVEXW(0f38ac) }, + /* AD */ { GRPVEXW(0f38ad) }, + /* AE */ { GRPVEXW(0f38ae) }, + /* AF */ { GRPVEXW(0f38af) }, + /* B0 */ { 0, &Ia_Invalid }, + /* B1 */ { 0, &Ia_Invalid }, + /* B2 */ { 0, &Ia_Invalid }, + /* B3 */ { 0, &Ia_Invalid }, + /* B4 */ { 0, &Ia_Invalid }, + /* B5 */ { 0, &Ia_Invalid }, + /* B6 */ { GRPVEXW(0f38b6) }, + /* B7 */ { GRPVEXW(0f38b7) }, + /* B8 */ { GRPVEXW(0f38b8) }, + /* B9 */ { GRPVEXW(0f38b9) }, + /* BA */ { GRPVEXW(0f38ba) }, + /* BB */ { GRPVEXW(0f38bb) }, + /* BC */ { GRPVEXW(0f38bc) }, + /* BD */ { GRPVEXW(0f38bd) }, + /* BE */ { GRPVEXW(0f38be) }, + /* BF */ { GRPVEXW(0f38bf) }, + /* C0 */ { 0, &Ia_Invalid }, + /* C1 */ { 0, &Ia_Invalid }, + /* C2 */ { 0, &Ia_Invalid }, + /* C3 */ { 0, &Ia_Invalid }, + /* C4 */ { 0, &Ia_Invalid }, + /* C5 */ { 0, &Ia_Invalid }, + /* C6 */ { 0, &Ia_Invalid }, + /* C7 */ { 0, &Ia_Invalid }, + /* C8 */ { 0, &Ia_Invalid }, + /* C9 */ { 0, &Ia_Invalid }, + /* CA */ { 0, &Ia_Invalid }, + /* CB */ { 0, &Ia_Invalid }, + /* CC */ { 0, &Ia_Invalid }, + /* CD */ { 0, &Ia_Invalid }, + /* CE */ { 0, &Ia_Invalid }, + /* CF */ { 0, &Ia_Invalid }, + /* D0 */ { 0, &Ia_Invalid }, + /* D1 */ { 0, &Ia_Invalid }, + /* D2 */ { 0, &Ia_Invalid }, + /* D3 */ { 0, &Ia_Invalid }, + /* D4 */ { 0, &Ia_Invalid }, + /* D5 */ { 0, &Ia_Invalid }, + /* D6 */ { 0, &Ia_Invalid }, + /* D7 */ { 0, &Ia_Invalid }, + /* D8 */ { 0, &Ia_Invalid }, + /* D9 */ { 0, &Ia_Invalid }, + /* DA */ { 0, &Ia_Invalid }, + /* DB */ { GRPSSE66(Ia_vaesimc_Vdq_Wdq) }, + /* DC */ { GRPSSE66(Ia_vaesenc_Vdq_Hdq_Wdq) }, + /* DD */ { GRPSSE66(Ia_vaesenclast_Vdq_Hdq_Wdq) }, + /* DE */ { GRPSSE66(Ia_vaesdec_Vdq_Hdq_Wdq) }, + /* DF */ { GRPSSE66(Ia_vaesdeclast_Vdq_Hdq_Wdq) }, + /* E0 */ { 0, &Ia_Invalid }, + /* E1 */ { 0, &Ia_Invalid }, + /* E2 */ { 0, &Ia_Invalid }, + /* E3 */ { 0, &Ia_Invalid }, + /* E4 */ { 0, &Ia_Invalid }, + /* E5 */ { 0, &Ia_Invalid }, + /* E6 */ { 0, &Ia_Invalid }, + /* E7 */ { 0, &Ia_Invalid }, + /* E8 */ { 0, &Ia_Invalid }, + /* E9 */ { 0, &Ia_Invalid }, + /* EA */ { 0, &Ia_Invalid }, + /* EB */ { 0, &Ia_Invalid }, + /* EC */ { 0, &Ia_Invalid }, + /* ED */ { 0, &Ia_Invalid }, + /* EE */ { 0, &Ia_Invalid }, + /* EF */ { 0, &Ia_Invalid }, + /* F0 */ { 0, &Ia_Invalid }, + /* F1 */ { 0, &Ia_Invalid }, + /* F2 */ { 0, &Ia_andn_Gy_By_Ey }, + /* F3 */ { GRPN(AVXG17) }, + /* F4 */ { 0, &Ia_Invalid }, + /* F5 */ { GRPAVX(0f38f5) }, + /* F6 */ { GRPSSEF2(Ia_mulx_By_Gy_Ey) }, + /* F7 */ { GRPAVX(0f38f7) }, + /* F8 */ { 0, &Ia_Invalid }, + /* F9 */ { 0, &Ia_Invalid }, + /* FA */ { 0, &Ia_Invalid }, + /* FB */ { 0, &Ia_Invalid }, + /* FC */ { 0, &Ia_Invalid }, + /* FD */ { 0, &Ia_Invalid }, + /* FE */ { 0, &Ia_Invalid }, + /* FF */ { 0, &Ia_Invalid }, + + // 256 entries for VEX-encoded 0x0F 0x3A opcodes + /* 00 */ { GRPVEXW(0f3a00) }, + /* 01 */ { GRPVEXW(0f3a01) }, + /* 02 */ { GRPSSE66(Ia_vpblendd_Vdq_Hdq_Wdq_Ib) }, + /* 03 */ { 0, &Ia_Invalid }, + /* 04 */ { GRPSSE66(Ia_vpermilps_Vps_Wps_Ib) }, + /* 05 */ { GRPSSE66(Ia_vpermilpd_Vpd_Wpd_Ib) }, + /* 06 */ { GRPSSE66(Ia_vperm2f128_Vdq_Hdq_Wdq_Ib) }, + /* 07 */ { 0, &Ia_Invalid }, + /* 08 */ { GRPSSE66(Ia_vroundps_Vps_Wps_Ib) }, + /* 09 */ { GRPSSE66(Ia_vroundpd_Vpd_Wpd_Ib) }, + /* 0A */ { GRPSSE66(Ia_vroundss_Vss_Hps_Wss_Ib) }, + /* 0B */ { GRPSSE66(Ia_vroundsd_Vsd_Hpd_Wsd_Ib) }, + /* 0C */ { GRPSSE66(Ia_vblendps_Vps_Hps_Wps_Ib) }, + /* 0D */ { GRPSSE66(Ia_vblendpd_Vpd_Hpd_Wpd_Ib) }, + /* 0E */ { GRPSSE66(Ia_vpblendw_Vdq_Hdq_Wdq_Ib) }, + /* 0F */ { GRPSSE66(Ia_vpalignr_Vdq_Hdq_Wdq_Ib) }, + /* 10 */ { 0, &Ia_Invalid }, + /* 11 */ { 0, &Ia_Invalid }, + /* 12 */ { 0, &Ia_Invalid }, + /* 13 */ { 0, &Ia_Invalid }, + /* 14 */ { GRPSSE66(Ia_vpextrb_Ebd_Vdq_Ib) }, + /* 15 */ { GRPSSE66(Ia_vpextrw_Ewd_Vdq_Ib) }, + /* 16 */ { GRPVEXW(0f3a16) }, + /* 17 */ { GRPSSE66(Ia_vextractps_Ed_Vdq_Ib) }, + /* 18 */ { GRPSSE66(Ia_vinsertf128_Vdq_Hdq_Wdq_Ib) }, + /* 19 */ { GRPSSE66(Ia_vextractf128_Wdq_Vdq_Ib) }, + /* 1A */ { 0, &Ia_Invalid }, + /* 1B */ { 0, &Ia_Invalid }, + /* 1C */ { 0, &Ia_Invalid }, + /* 1D */ { GRPSSE66(Ia_vcvtps2ph_Wq_Vps_Ib) }, + /* 1E */ { 0, &Ia_Invalid }, + /* 1F */ { 0, &Ia_Invalid }, + /* 20 */ { GRPSSE66(Ia_vpinsrb_Vdq_Hdq_Ew_Ib) }, + /* 21 */ { GRPSSE66(Ia_vinsertps_Vps_Hps_Wss_Ib) }, + /* 22 */ { GRPVEXW(0f3a22) }, + /* 23 */ { 0, &Ia_Invalid }, + /* 24 */ { 0, &Ia_Invalid }, + /* 25 */ { 0, &Ia_Invalid }, + /* 26 */ { 0, &Ia_Invalid }, + /* 27 */ { 0, &Ia_Invalid }, + /* 28 */ { 0, &Ia_Invalid }, + /* 29 */ { 0, &Ia_Invalid }, + /* 2A */ { 0, &Ia_Invalid }, + /* 2B */ { 0, &Ia_Invalid }, + /* 2C */ { 0, &Ia_Invalid }, + /* 2D */ { 0, &Ia_Invalid }, + /* 2E */ { 0, &Ia_Invalid }, + /* 2F */ { 0, &Ia_Invalid }, + /* 30 */ { 0, &Ia_Invalid }, + /* 31 */ { 0, &Ia_Invalid }, + /* 32 */ { 0, &Ia_Invalid }, + /* 33 */ { 0, &Ia_Invalid }, + /* 34 */ { 0, &Ia_Invalid }, + /* 35 */ { 0, &Ia_Invalid }, + /* 36 */ { 0, &Ia_Invalid }, + /* 37 */ { 0, &Ia_Invalid }, + /* 38 */ { GRPSSE66(Ia_vinserti128_Vdq_Hdq_Wdq_Ib) }, + /* 39 */ { GRPSSE66(Ia_vextracti128_Wdq_Vdq_Ib) }, + /* 3A */ { 0, &Ia_Invalid }, + /* 3B */ { 0, &Ia_Invalid }, + /* 3C */ { 0, &Ia_Invalid }, + /* 3D */ { 0, &Ia_Invalid }, + /* 3E */ { 0, &Ia_Invalid }, + /* 3F */ { 0, &Ia_Invalid }, + /* 40 */ { GRPSSE66(Ia_vdpps_Vps_Hps_Wps_Ib) }, + /* 41 */ { GRPSSE66(Ia_vdppd_Vpd_Hpd_Wpd_Ib) }, + /* 42 */ { GRPSSE66(Ia_vmpsadbw_Vdq_Hdq_Wdq_Ib) }, + /* 43 */ { 0, &Ia_Invalid }, + /* 44 */ { GRPSSE66(Ia_vpclmulqdq_Vdq_Hdq_Wdq_Ib) }, + /* 45 */ { 0, &Ia_Invalid }, + /* 46 */ { GRPSSE66(Ia_vperm2i128_Vdq_Hdq_Wdq_Ib) }, + /* 47 */ { 0, &Ia_Invalid }, + /* 48 */ { 0, &Ia_Invalid }, + /* 49 */ { 0, &Ia_Invalid }, + /* 4A */ { GRPSSE66(Ia_vblendvps_Vps_Hps_Wps_Ib) }, + /* 4B */ { GRPSSE66(Ia_vblendvpd_Vpd_Hpd_Wpd_Ib) }, + /* 4C */ { GRPSSE66(Ia_vpblendvb_Vdq_Hdq_Wdq_Ib) }, + /* 4D */ { 0, &Ia_Invalid }, + /* 4E */ { 0, &Ia_Invalid }, + /* 4F */ { 0, &Ia_Invalid }, + /* 50 */ { 0, &Ia_Invalid }, + /* 51 */ { 0, &Ia_Invalid }, + /* 52 */ { 0, &Ia_Invalid }, + /* 53 */ { 0, &Ia_Invalid }, + /* 54 */ { 0, &Ia_Invalid }, + /* 55 */ { 0, &Ia_Invalid }, + /* 56 */ { 0, &Ia_Invalid }, + /* 57 */ { 0, &Ia_Invalid }, + /* 58 */ { 0, &Ia_Invalid }, + /* 59 */ { 0, &Ia_Invalid }, + /* 5A */ { 0, &Ia_Invalid }, + /* 5B */ { 0, &Ia_Invalid }, + /* 5C */ { GRPVEXW(0f3a5c) }, + /* 5D */ { GRPVEXW(0f3a5d) }, + /* 5E */ { GRPVEXW(0f3a5e) }, + /* 5F */ { GRPVEXW(0f3a5f) }, + /* 60 */ { GRPSSE66(Ia_vpcmpestrm_Vdq_Wdq_Ib) }, + /* 61 */ { GRPSSE66(Ia_vpcmpestri_Vdq_Wdq_Ib) }, + /* 62 */ { GRPSSE66(Ia_vpcmpistrm_Vdq_Wdq_Ib) }, + /* 63 */ { GRPSSE66(Ia_vpcmpistri_Vdq_Wdq_Ib) }, + /* 64 */ { 0, &Ia_Invalid }, + /* 65 */ { 0, &Ia_Invalid }, + /* 66 */ { 0, &Ia_Invalid }, + /* 67 */ { 0, &Ia_Invalid }, + /* 68 */ { GRPVEXW(0f3a68) }, + /* 69 */ { GRPVEXW(0f3a69) }, + /* 6A */ { GRPVEXW(0f3a6a) }, + /* 6B */ { GRPVEXW(0f3a6b) }, + /* 6C */ { GRPVEXW(0f3a6c) }, + /* 6D */ { GRPVEXW(0f3a6d) }, + /* 6E */ { GRPVEXW(0f3a6e) }, + /* 6F */ { GRPVEXW(0f3a6f) }, + /* 70 */ { 0, &Ia_Invalid }, + /* 71 */ { 0, &Ia_Invalid }, + /* 72 */ { 0, &Ia_Invalid }, + /* 73 */ { 0, &Ia_Invalid }, + /* 74 */ { 0, &Ia_Invalid }, + /* 75 */ { 0, &Ia_Invalid }, + /* 76 */ { 0, &Ia_Invalid }, + /* 77 */ { 0, &Ia_Invalid }, + /* 78 */ { GRPVEXW(0f3a78) }, + /* 79 */ { GRPVEXW(0f3a79) }, + /* 7A */ { GRPVEXW(0f3a7a) }, + /* 7B */ { GRPVEXW(0f3a7b) }, + /* 7C */ { GRPVEXW(0f3a7c) }, + /* 7D */ { GRPVEXW(0f3a7d) }, + /* 7E */ { GRPVEXW(0f3a7e) }, + /* 7F */ { GRPVEXW(0f3a7f) }, + /* 80 */ { 0, &Ia_Invalid }, + /* 81 */ { 0, &Ia_Invalid }, + /* 82 */ { 0, &Ia_Invalid }, + /* 83 */ { 0, &Ia_Invalid }, + /* 84 */ { 0, &Ia_Invalid }, + /* 85 */ { 0, &Ia_Invalid }, + /* 86 */ { 0, &Ia_Invalid }, + /* 87 */ { 0, &Ia_Invalid }, + /* 88 */ { 0, &Ia_Invalid }, + /* 89 */ { 0, &Ia_Invalid }, + /* 8A */ { 0, &Ia_Invalid }, + /* 8B */ { 0, &Ia_Invalid }, + /* 8C */ { 0, &Ia_Invalid }, + /* 8D */ { 0, &Ia_Invalid }, + /* 8E */ { 0, &Ia_Invalid }, + /* 8F */ { 0, &Ia_Invalid }, + /* 90 */ { 0, &Ia_Invalid }, + /* 91 */ { 0, &Ia_Invalid }, + /* 92 */ { 0, &Ia_Invalid }, + /* 93 */ { 0, &Ia_Invalid }, + /* 94 */ { 0, &Ia_Invalid }, + /* 95 */ { 0, &Ia_Invalid }, + /* 96 */ { 0, &Ia_Invalid }, + /* 97 */ { 0, &Ia_Invalid }, + /* 98 */ { 0, &Ia_Invalid }, + /* 99 */ { 0, &Ia_Invalid }, + /* 9A */ { 0, &Ia_Invalid }, + /* 9B */ { 0, &Ia_Invalid }, + /* 9C */ { 0, &Ia_Invalid }, + /* 9D */ { 0, &Ia_Invalid }, + /* 9E */ { 0, &Ia_Invalid }, + /* 9F */ { 0, &Ia_Invalid }, + /* A0 */ { 0, &Ia_Invalid }, + /* A1 */ { 0, &Ia_Invalid }, + /* A2 */ { 0, &Ia_Invalid }, + /* A3 */ { 0, &Ia_Invalid }, + /* A4 */ { 0, &Ia_Invalid }, + /* A5 */ { 0, &Ia_Invalid }, + /* A6 */ { 0, &Ia_Invalid }, + /* A7 */ { 0, &Ia_Invalid }, + /* A8 */ { 0, &Ia_Invalid }, + /* A9 */ { 0, &Ia_Invalid }, + /* AA */ { 0, &Ia_Invalid }, + /* AB */ { 0, &Ia_Invalid }, + /* AC */ { 0, &Ia_Invalid }, + /* AD */ { 0, &Ia_Invalid }, + /* AE */ { 0, &Ia_Invalid }, + /* AF */ { 0, &Ia_Invalid }, + /* B0 */ { 0, &Ia_Invalid }, + /* B1 */ { 0, &Ia_Invalid }, + /* B2 */ { 0, &Ia_Invalid }, + /* B3 */ { 0, &Ia_Invalid }, + /* B4 */ { 0, &Ia_Invalid }, + /* B5 */ { 0, &Ia_Invalid }, + /* B6 */ { 0, &Ia_Invalid }, + /* B7 */ { 0, &Ia_Invalid }, + /* B8 */ { 0, &Ia_Invalid }, + /* B9 */ { 0, &Ia_Invalid }, + /* BA */ { 0, &Ia_Invalid }, + /* BB */ { 0, &Ia_Invalid }, + /* BC */ { 0, &Ia_Invalid }, + /* BD */ { 0, &Ia_Invalid }, + /* BE */ { 0, &Ia_Invalid }, + /* BF */ { 0, &Ia_Invalid }, + /* C0 */ { 0, &Ia_Invalid }, + /* C1 */ { 0, &Ia_Invalid }, + /* C2 */ { 0, &Ia_Invalid }, + /* C3 */ { 0, &Ia_Invalid }, + /* C4 */ { 0, &Ia_Invalid }, + /* C5 */ { 0, &Ia_Invalid }, + /* C6 */ { 0, &Ia_Invalid }, + /* C7 */ { 0, &Ia_Invalid }, + /* C8 */ { 0, &Ia_Invalid }, + /* C9 */ { 0, &Ia_Invalid }, + /* CA */ { 0, &Ia_Invalid }, + /* CB */ { 0, &Ia_Invalid }, + /* CC */ { 0, &Ia_Invalid }, + /* CD */ { 0, &Ia_Invalid }, + /* CE */ { 0, &Ia_Invalid }, + /* CF */ { 0, &Ia_Invalid }, + /* D0 */ { 0, &Ia_Invalid }, + /* D1 */ { 0, &Ia_Invalid }, + /* D2 */ { 0, &Ia_Invalid }, + /* D3 */ { 0, &Ia_Invalid }, + /* D4 */ { 0, &Ia_Invalid }, + /* D5 */ { 0, &Ia_Invalid }, + /* D6 */ { 0, &Ia_Invalid }, + /* D7 */ { 0, &Ia_Invalid }, + /* D8 */ { 0, &Ia_Invalid }, + /* D9 */ { 0, &Ia_Invalid }, + /* DA */ { 0, &Ia_Invalid }, + /* DB */ { 0, &Ia_Invalid }, + /* DC */ { 0, &Ia_Invalid }, + /* DD */ { 0, &Ia_Invalid }, + /* DE */ { 0, &Ia_Invalid }, + /* DF */ { GRPSSE66(Ia_vaeskeygenassist_Vdq_Wdq_Ib) }, + /* E0 */ { 0, &Ia_Invalid }, + /* E1 */ { 0, &Ia_Invalid }, + /* E2 */ { 0, &Ia_Invalid }, + /* E3 */ { 0, &Ia_Invalid }, + /* E4 */ { 0, &Ia_Invalid }, + /* E5 */ { 0, &Ia_Invalid }, + /* E6 */ { 0, &Ia_Invalid }, + /* E7 */ { 0, &Ia_Invalid }, + /* E8 */ { 0, &Ia_Invalid }, + /* E9 */ { 0, &Ia_Invalid }, + /* EA */ { 0, &Ia_Invalid }, + /* EB */ { 0, &Ia_Invalid }, + /* EC */ { 0, &Ia_Invalid }, + /* ED */ { 0, &Ia_Invalid }, + /* EE */ { 0, &Ia_Invalid }, + /* EF */ { 0, &Ia_Invalid }, + /* F0 */ { 0, &Ia_rorx_Gy_Ey_Ib }, + /* F1 */ { 0, &Ia_Invalid }, + /* F2 */ { 0, &Ia_Invalid }, + /* F3 */ { 0, &Ia_Invalid }, + /* F4 */ { 0, &Ia_Invalid }, + /* F5 */ { 0, &Ia_Invalid }, + /* F6 */ { 0, &Ia_Invalid }, + /* F7 */ { 0, &Ia_Invalid }, + /* F8 */ { 0, &Ia_Invalid }, + /* F9 */ { 0, &Ia_Invalid }, + /* FA */ { 0, &Ia_Invalid }, + /* FB */ { 0, &Ia_Invalid }, + /* FC */ { 0, &Ia_Invalid }, + /* FD */ { 0, &Ia_Invalid }, + /* FE */ { 0, &Ia_Invalid }, + /* FF */ { 0, &Ia_Invalid } +}; diff --git a/Externals/Bochs_disasm/dis_tables_sse.inc b/Externals/Bochs_disasm/dis_tables_sse.inc new file mode 100644 index 0000000000..e31fdec200 --- /dev/null +++ b/Externals/Bochs_disasm/dis_tables_sse.inc @@ -0,0 +1,1452 @@ +///////////////////////////////////////////////////////////////////////// +// $Id: dis_tables_sse.inc 11878 2013-10-11 20:09:51Z sshwarts $ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (c) 2005-2013 Stanislav Shwartsman +// Written by Stanislav Shwartsman [sshwarts at sourceforge net] +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// +///////////////////////////////////////////////////////////////////////// + +/* ************************************************************************ */ +/* SSE opcodes */ + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_ERR[4] = { + /* -- */ { 0, &Ia_Invalid }, + /* 66 */ { 0, &Ia_Invalid }, + /* F3 */ { 0, &Ia_Invalid }, + /* F2 */ { 0, &Ia_Invalid } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f10[4] = { + /* -- */ { 0, &Ia_movups_Vps_Wps }, + /* 66 */ { 0, &Ia_movupd_Vpd_Wpd }, + /* F3 */ { 0, &Ia_movss_Vss_Wss }, + /* F2 */ { 0, &Ia_movsd_Vsd_Wsd } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f11[4] = { + /* -- */ { 0, &Ia_movups_Wps_Vps }, + /* 66 */ { 0, &Ia_movupd_Wpd_Vpd }, + /* F3 */ { 0, &Ia_movss_Wss_Vss }, + /* F2 */ { 0, &Ia_movsd_Wsd_Vsd } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupModMOVHLPS[2] = { + /* R */ { 0, &Ia_movhlps_Vps_Udq }, + /* M */ { 0, &Ia_movlps_Vps_Mq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f12[4] = { + /* -- */ { GRPMOD(MOVHLPS) }, + /* 66 */ { 0, &Ia_movlpd_Vpd_Mq }, + /* F3 */ { 0, &Ia_movsldup_Vdq_Wdq }, + /* F2 */ { 0, &Ia_movddup_Vdq_Wq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f13[2] = { + /* -- */ { 0, &Ia_movlps_Mq_Vps }, + /* 66 */ { 0, &Ia_movlpd_Mq_Vpd } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f14[2] = { + /* -- */ { 0, &Ia_unpcklps_Vps_Wps }, + /* 66 */ { 0, &Ia_unpcklpd_Vpd_Wpd } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f15[2] = { + /* -- */ { 0, &Ia_unpckhps_Vps_Wps }, + /* 66 */ { 0, &Ia_unpckhpd_Vpd_Wpd } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupModMOVLHPS[2] = { + /* R */ { 0, &Ia_movlhps_Vps_Udq }, + /* M */ { 0, &Ia_movhps_Vps_Mq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f16[4] = { + /* -- */ { GRPMOD(MOVLHPS) }, + /* 66 */ { 0, &Ia_movhpd_Vpd_Mq }, + /* F3 */ { 0, &Ia_movshdup_Vdq_Wdq }, + /* F2 */ { 0, &Ia_Invalid } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f17[2] = { + /* -- */ { 0, &Ia_movhps_Mq_Vps }, + /* 66 */ { 0, &Ia_movhpd_Mq_Vpd }, +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f28[2] = { + /* -- */ { 0, &Ia_movaps_Vps_Wps }, + /* 66 */ { 0, &Ia_movapd_Vpd_Wpd } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f29[2] = { + /* -- */ { 0, &Ia_movaps_Wps_Vps }, + /* 66 */ { 0, &Ia_movapd_Wpd_Vpd } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f2a[4] = { + /* -- */ { 0, &Ia_cvtpi2ps_Vps_Qq }, + /* 66 */ { 0, &Ia_cvtpi2pd_Vpd_Qq }, + /* F3 */ { 0, &Ia_cvtsi2ss_Vss_Ey }, + /* F2 */ { 0, &Ia_cvtsi2sd_Vsd_Ey } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f2b[4] = { + /* -- */ { 0, &Ia_movntps_Mps_Vps }, + /* 66 */ { 0, &Ia_movntpd_Mpd_Vpd }, + /* F3 */ { 0, &Ia_movntss_Mss_Vss }, // SSE4A + /* F2 */ { 0, &Ia_movntsd_Msd_Vsd } // SSE4A +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f2c[4] = { + /* -- */ { 0, &Ia_cvttps2pi_Pq_Wps }, + /* 66 */ { 0, &Ia_cvttpd2pi_Pq_Wpd }, + /* F3 */ { 0, &Ia_cvttss2si_Gy_Wss }, + /* F2 */ { 0, &Ia_cvttsd2si_Gy_Wsd } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f2d[4] = { + /* -- */ { 0, &Ia_cvtps2pi_Pq_Wps }, + /* 66 */ { 0, &Ia_cvtpd2pi_Pq_Wpd }, + /* F3 */ { 0, &Ia_cvtss2si_Gy_Wss }, + /* F2 */ { 0, &Ia_cvtsd2si_Gy_Wsd } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f2e[2] = { + /* -- */ { 0, &Ia_ucomiss_Vss_Wss }, + /* 66 */ { 0, &Ia_ucomisd_Vsd_Wsd } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f2f[2] = { + /* -- */ { 0, &Ia_comiss_Vss_Wss }, + /* 66 */ { 0, &Ia_comisd_Vsd_Wsd } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f50[2] = { + /* -- */ { 0, &Ia_movmskps_Gd_Ups }, + /* 66 */ { 0, &Ia_movmskpd_Gd_Upd } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f51[4] = { + /* -- */ { 0, &Ia_sqrtps_Vps_Wps }, + /* 66 */ { 0, &Ia_sqrtpd_Vpd_Wpd }, + /* F3 */ { 0, &Ia_sqrtss_Vss_Wss }, + /* F2 */ { 0, &Ia_sqrtsd_Vsd_Wsd } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f52[4] = { + /* -- */ { 0, &Ia_rsqrtps_Vps_Wps }, + /* 66 */ { 0, &Ia_Invalid }, + /* F3 */ { 0, &Ia_rsqrtss_Vss_Wss }, + /* F2 */ { 0, &Ia_Invalid } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f53[4] = { + /* -- */ { 0, &Ia_rcpps_Vps_Wps }, + /* 66 */ { 0, &Ia_Invalid }, + /* F3 */ { 0, &Ia_rcpss_Vss_Wss }, + /* F2 */ { 0, &Ia_Invalid } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f54[2] = { + /* -- */ { 0, &Ia_andps_Vps_Wps }, + /* 66 */ { 0, &Ia_andpd_Vpd_Wpd } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f55[2] = { + /* -- */ { 0, &Ia_andnps_Vps_Wps }, + /* 66 */ { 0, &Ia_andnpd_Vpd_Wpd } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f56[2] = { + /* -- */ { 0, &Ia_orps_Vps_Wps }, + /* 66 */ { 0, &Ia_orpd_Vpd_Wpd } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f57[2] = { + /* -- */ { 0, &Ia_xorps_Vps_Wps }, + /* 66 */ { 0, &Ia_xorpd_Vpd_Wpd }, +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f58[4] = { + /* -- */ { 0, &Ia_addps_Vps_Wps }, + /* 66 */ { 0, &Ia_addpd_Vpd_Wpd }, + /* F3 */ { 0, &Ia_addss_Vss_Wss }, + /* F2 */ { 0, &Ia_addsd_Vsd_Wsd } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f59[4] = { + /* -- */ { 0, &Ia_mulps_Vps_Wps }, + /* 66 */ { 0, &Ia_mulpd_Vpd_Wpd }, + /* F3 */ { 0, &Ia_mulss_Vss_Wss }, + /* F2 */ { 0, &Ia_mulsd_Vsd_Wsd } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f5a[4] = { + /* -- */ { 0, &Ia_cvtps2pd_Vpd_Wps }, + /* 66 */ { 0, &Ia_cvtpd2ps_Vps_Wpd }, + /* F3 */ { 0, &Ia_cvtss2sd_Vsd_Wss }, + /* F2 */ { 0, &Ia_cvtsd2ss_Vss_Wsd } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f5b[4] = { + /* -- */ { 0, &Ia_cvtdq2ps_Vps_Wdq }, + /* 66 */ { 0, &Ia_cvtps2dq_Vdq_Wps }, + /* F3 */ { 0, &Ia_cvttps2dq_Vdq_Wps }, + /* F2 */ { 0, &Ia_Invalid } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f5c[4] = { + /* -- */ { 0, &Ia_subps_Vps_Wps }, + /* 66 */ { 0, &Ia_subpd_Vpd_Wpd }, + /* F3 */ { 0, &Ia_subss_Vss_Wss }, + /* F2 */ { 0, &Ia_subsd_Vsd_Wsd } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f5d[4] = { + /* -- */ { 0, &Ia_minps_Vps_Wps }, + /* 66 */ { 0, &Ia_minpd_Vpd_Wpd }, + /* F3 */ { 0, &Ia_minss_Vss_Wss }, + /* F2 */ { 0, &Ia_minsd_Vsd_Wsd } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f5e[4] = { + /* -- */ { 0, &Ia_divps_Vps_Wps }, + /* 66 */ { 0, &Ia_divpd_Vpd_Wpd }, + /* F3 */ { 0, &Ia_divss_Vss_Wss }, + /* F2 */ { 0, &Ia_divsd_Vsd_Wsd } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f5f[4] = { + /* -- */ { 0, &Ia_maxps_Vps_Wps }, + /* 66 */ { 0, &Ia_maxpd_Vpd_Wpd }, + /* F3 */ { 0, &Ia_maxss_Vss_Wss }, + /* F2 */ { 0, &Ia_maxsd_Vsd_Wsd } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f60[2] = { + /* -- */ { 0, &Ia_punpcklbw_Pq_Qd }, + /* 66 */ { 0, &Ia_punpcklbw_Vdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f61[2] = { + /* -- */ { 0, &Ia_punpcklwd_Pq_Qd }, + /* 66 */ { 0, &Ia_punpcklwd_Vdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f62[2] = { + /* -- */ { 0, &Ia_punpckldq_Pq_Qd }, + /* 66 */ { 0, &Ia_punpckldq_Vdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f63[2] = { + /* -- */ { 0, &Ia_packsswb_Pq_Qq }, + /* 66 */ { 0, &Ia_packsswb_Vdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f64[2] = { + /* -- */ { 0, &Ia_pcmpgtb_Pq_Qq }, + /* 66 */ { 0, &Ia_pcmpgtb_Vdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f65[2] = { + /* -- */ { 0, &Ia_pcmpgtw_Pq_Qq }, + /* 66 */ { 0, &Ia_pcmpgtw_Vdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f66[2] = { + /* -- */ { 0, &Ia_pcmpgtd_Pq_Qq }, + /* 66 */ { 0, &Ia_pcmpgtd_Vdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f67[2] = { + /* -- */ { 0, &Ia_packuswb_Pq_Qq }, + /* 66 */ { 0, &Ia_packuswb_Vdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f68[2] = { + /* -- */ { 0, &Ia_punpckhbw_Pq_Qq }, + /* 66 */ { 0, &Ia_punpckhbw_Vdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f69[2] = { + /* -- */ { 0, &Ia_punpckhwd_Pq_Qq }, + /* 66 */ { 0, &Ia_punpckhwd_Vdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f6a[2] = { + /* -- */ { 0, &Ia_punpckhdq_Pq_Qq }, + /* 66 */ { 0, &Ia_punpckhdq_Vdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f6b[2] = { + /* -- */ { 0, &Ia_packssdw_Pq_Qq }, + /* 66 */ { 0, &Ia_packssdw_Vdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f6e[2] = { + /* -- */ { 0, &Ia_movd_Pq_Ed }, + /* 66 */ { 0, &Ia_movd_Vdq_Ed } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f6eQ[2] = { + /* -- */ { 0, &Ia_movq_Pq_Eq }, + /* 66 */ { 0, &Ia_movq_Vdq_Eq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f6f[4] = { + /* -- */ { 0, &Ia_movq_Pq_Qq }, + /* 66 */ { 0, &Ia_movdqa_Vdq_Wdq }, + /* F3 */ { 0, &Ia_movdqu_Vdq_Wdq }, + /* F2 */ { 0, &Ia_Invalid } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f70[4] = { + /* -- */ { 0, &Ia_pshufw_Pq_Qq_Ib }, + /* 66 */ { 0, &Ia_pshufd_Vdq_Wdq_Ib }, + /* F3 */ { 0, &Ia_pshufhw_Vdq_Wdq_Ib }, + /* F2 */ { 0, &Ia_pshuflw_Vdq_Wdq_Ib } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f74[2] = { + /* -- */ { 0, &Ia_pcmpeqb_Pq_Qq }, + /* 66 */ { 0, &Ia_pcmpeqb_Vdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f75[2] = { + /* -- */ { 0, &Ia_pcmpeqw_Pq_Qq }, + /* 66 */ { 0, &Ia_pcmpeqw_Vdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f76[2] = { + /* -- */ { 0, &Ia_pcmpeqd_Pq_Qq }, + /* 66 */ { 0, &Ia_pcmpeqd_Vdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE4A_G17[8] = { + /* 0 */ { 0, &Ia_extrq_Udq_Ib_Ib }, // SSE4A + /* 1 */ { 0, &Ia_Invalid }, + /* 2 */ { 0, &Ia_Invalid }, + /* 3 */ { 0, &Ia_Invalid }, + /* 4 */ { 0, &Ia_Invalid }, + /* 5 */ { 0, &Ia_Invalid }, + /* 6 */ { 0, &Ia_Invalid }, + /* 7 */ { 0, &Ia_Invalid } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f78[4] = { + /* -- */ { 0, &Ia_vmread_Ed_Gd }, // VMX + /* 66 */ { GRPN(SSE4A_G17) }, // SSE4A + /* F3 */ { 0, &Ia_Invalid }, + /* F2 */ { 0, &Ia_insertq_Vdq_Uq_Ib_Ib } // SSE4A +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f78Q[4] = { + /* -- */ { 0, &Ia_vmread_Eq_Gq }, // VMX + /* 66 */ { GRPN(SSE4A_G17) }, // SSE4A + /* F3 */ { 0, &Ia_Invalid }, + /* F2 */ { 0, &Ia_insertq_Vdq_Uq_Ib_Ib } // SSE4A +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f79[4] = { + /* -- */ { 0, &Ia_vmwrite_Gd_Ed }, // VMX + /* 66 */ { 0, &Ia_extrq_Vdq_Uq }, // SSE4A + /* F3 */ { 0, &Ia_Invalid }, + /* F2 */ { 0, &Ia_insertq_Vdq_Udq } // SSE4A +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f79Q[4] = { + /* -- */ { 0, &Ia_vmwrite_Gq_Eq }, // VMX + /* 66 */ { 0, &Ia_extrq_Vdq_Uq }, // SSE4A + /* F3 */ { 0, &Ia_Invalid }, + /* F2 */ { 0, &Ia_insertq_Vdq_Udq } // SSE4A +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f7c[4] = { + /* -- */ { 0, &Ia_Invalid }, + /* 66 */ { 0, &Ia_haddpd_Vpd_Wpd }, + /* F3 */ { 0, &Ia_Invalid }, + /* F2 */ { 0, &Ia_haddps_Vps_Wps } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f7d[4] = { + /* -- */ { 0, &Ia_Invalid }, + /* 66 */ { 0, &Ia_hsubpd_Vpd_Wpd }, + /* F3 */ { 0, &Ia_Invalid }, + /* F2 */ { 0, &Ia_hsubps_Vps_Wps } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f7e[4] = { + /* -- */ { 0, &Ia_movd_Ed_Pq }, + /* 66 */ { 0, &Ia_movd_Ed_Vd }, + /* F3 */ { 0, &Ia_movq_Vq_Wq }, + /* F2 */ { 0, &Ia_Invalid } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f7eQ[4] = { + /* -- */ { 0, &Ia_movq_Eq_Pq }, + /* 66 */ { 0, &Ia_movq_Eq_Vq }, + /* F2 */ { 0, &Ia_movq_Vq_Wq }, + /* F3 */ { 0, &Ia_Invalid } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f7f[4] = { + /* -- */ { 0, &Ia_movq_Qq_Pq }, + /* 66 */ { 0, &Ia_movdqa_Wdq_Vdq }, + /* F2 */ { 0, &Ia_movdqu_Wdq_Vdq }, + /* F3 */ { 0, &Ia_Invalid } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fc2[4] = { + /* -- */ { 0, &Ia_cmpps_Vps_Wps_Ib }, + /* 66 */ { 0, &Ia_cmppd_Vpd_Wpd_Ib }, + /* F3 */ { 0, &Ia_cmpss_Vss_Wss_Ib }, + /* F2 */ { 0, &Ia_cmpsd_Vsd_Wsd_Ib } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fc4[2] = { + /* -- */ { 0, &Ia_pinsrw_Pq_Ew_Ib }, + /* 66 */ { 0, &Ia_pinsrw_Vdq_Ew_Ib } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fc5[2] = { + /* -- */ { 0, &Ia_pextrw_Gd_Nq_Ib }, + /* 66 */ { 0, &Ia_pextrw_Gd_Udq_Ib } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fc6[2] = { + /* -- */ { 0, &Ia_shufps_Vps_Wps_Ib }, + /* 66 */ { 0, &Ia_shufpd_Vpd_Wpd_Ib } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fd0[4] = { + /* -- */ { 0, &Ia_Invalid }, + /* 66 */ { 0, &Ia_addsubpd_Vpd_Wpd }, + /* F2 */ { 0, &Ia_Invalid }, + /* F3 */ { 0, &Ia_addsubps_Vps_Wps }, +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fd1[2] = { + /* -- */ { 0, &Ia_psrlw_Pq_Qq }, + /* 66 */ { 0, &Ia_psrlw_Vdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fd2[2] = { + /* -- */ { 0, &Ia_psrld_Pq_Qq }, + /* 66 */ { 0, &Ia_psrld_Vdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fd3[2] = { + /* -- */ { 0, &Ia_psrlq_Pq_Qq }, + /* 66 */ { 0, &Ia_psrlq_Vdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fd4[2] = { + /* -- */ { 0, &Ia_paddq_Pq_Qq }, + /* 66 */ { 0, &Ia_paddq_Vdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fd5[2] = { + /* -- */ { 0, &Ia_pmullw_Pq_Qq }, + /* 66 */ { 0, &Ia_pmullw_Vdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fd6[4] = { + /* -- */ { 0, &Ia_Invalid }, + /* 66 */ { 0, &Ia_movq_Wq_Vq }, + /* F3 */ { 0, &Ia_movq2dq_Vdq_Qq }, + /* F2 */ { 0, &Ia_movdq2q_Pq_Udq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fd7[2] = { + /* -- */ { 0, &Ia_pmovmskb_Gd_Nq }, + /* 66 */ { 0, &Ia_pmovmskb_Gd_Udq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fd8[2] = { + /* -- */ { 0, &Ia_psubusb_Pq_Qq }, + /* 66 */ { 0, &Ia_psubusb_Vdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fd9[2] = { + /* -- */ { 0, &Ia_psubusw_Pq_Qq }, + /* 66 */ { 0, &Ia_psubusw_Vdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fda[2] = { + /* -- */ { 0, &Ia_pminub_Pq_Qq }, + /* 66 */ { 0, &Ia_pminub_Vdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fdb[2] = { + /* -- */ { 0, &Ia_pand_Pq_Qq }, + /* 66 */ { 0, &Ia_pand_Vdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fdc[2] = { + /* -- */ { 0, &Ia_paddusb_Pq_Qq }, + /* 66 */ { 0, &Ia_paddusb_Vdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fdd[2] = { + /* -- */ { 0, &Ia_paddusw_Pq_Qq }, + /* 66 */ { 0, &Ia_paddusw_Vdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fde[2] = { + /* -- */ { 0, &Ia_pmaxub_Pq_Qq }, + /* 66 */ { 0, &Ia_pmaxub_Vdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fdf[2] = { + /* -- */ { 0, &Ia_pandn_Pq_Qq }, + /* 66 */ { 0, &Ia_pandn_Vdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fe0[2] = { + /* -- */ { 0, &Ia_pavgb_Pq_Qq }, + /* 66 */ { 0, &Ia_pavgb_Vdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fe1[2] = { + /* -- */ { 0, &Ia_psraw_Pq_Qq }, + /* 66 */ { 0, &Ia_psraw_Vdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fe2[2] = { + /* -- */ { 0, &Ia_psrad_Pq_Qq }, + /* 66 */ { 0, &Ia_psrad_Vdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fe3[2] = { + /* -- */ { 0, &Ia_pavgw_Pq_Qq }, + /* 66 */ { 0, &Ia_pavgw_Vdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fe4[2] = { + /* -- */ { 0, &Ia_pmulhuw_Pq_Qq }, + /* 66 */ { 0, &Ia_pmulhuw_Vdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fe5[2] = { + /* -- */ { 0, &Ia_pmulhw_Pq_Qq }, + /* 66 */ { 0, &Ia_pmulhw_Vdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fe6[4] = { + /* -- */ { 0, &Ia_Invalid }, + /* 66 */ { 0, &Ia_cvttpd2dq_Vq_Wpd }, + /* F3 */ { 0, &Ia_cvtdq2pd_Vpd_Wq }, + /* F2 */ { 0, &Ia_cvtpd2dq_Vq_Wpd } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fe7[2] = { + /* -- */ { 0, &Ia_movntq_Mq_Pq }, + /* 66 */ { 0, &Ia_movntdq_Mdq_Vdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fe8[2] = { + /* -- */ { 0, &Ia_psubsb_Pq_Qq }, + /* 66 */ { 0, &Ia_psubsb_Vdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fe9[2] = { + /* -- */ { 0, &Ia_psubsw_Pq_Qq }, + /* 66 */ { 0, &Ia_psubsw_Vdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fea[2] = { + /* -- */ { 0, &Ia_pminsw_Pq_Qq }, + /* 66 */ { 0, &Ia_pminsw_Vdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0feb[2] = { + /* -- */ { 0, &Ia_por_Pq_Qq }, + /* 66 */ { 0, &Ia_por_Vdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fec[2] = { + /* -- */ { 0, &Ia_paddsb_Pq_Qq }, + /* 66 */ { 0, &Ia_paddsb_Vdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fed[2] = { + /* -- */ { 0, &Ia_paddsw_Pq_Qq }, + /* 66 */ { 0, &Ia_paddsw_Vdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fee[2] = { + /* -- */ { 0, &Ia_pmaxsw_Pq_Qq }, + /* 66 */ { 0, &Ia_pmaxsw_Vdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fef[2] = { + /* -- */ { 0, &Ia_pxor_Pq_Qq }, + /* 66 */ { 0, &Ia_pxor_Vdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0ff1[2] = { + /* -- */ { 0, &Ia_psllw_Pq_Qq }, + /* 66 */ { 0, &Ia_psllw_Vdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0ff2[2] = { + /* -- */ { 0, &Ia_pslld_Pq_Qq }, + /* 66 */ { 0, &Ia_pslld_Vdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0ff3[2] = { + /* -- */ { 0, &Ia_psllq_Pq_Qq }, + /* 66 */ { 0, &Ia_psllq_Vdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0ff4[2] = { + /* -- */ { 0, &Ia_pmuludq_Pq_Qq }, + /* 66 */ { 0, &Ia_pmuludq_Vdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0ff5[2] = { + /* -- */ { 0, &Ia_pmaddwd_Pq_Qq }, + /* 66 */ { 0, &Ia_pmaddwd_Vdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0ff6[2] = { + /* -- */ { 0, &Ia_psadbw_Pq_Qq }, + /* 66 */ { 0, &Ia_psadbw_Vdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0ff7[2] = { + /* -- */ { 0, &Ia_maskmovq_Pq_Nq }, + /* 66 */ { 0, &Ia_maskmovdqu_Vdq_Udq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0ff8[2] = { + /* -- */ { 0, &Ia_psubb_Pq_Qq }, + /* 66 */ { 0, &Ia_psubb_Vdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0ff9[2] = { + /* -- */ { 0, &Ia_psubw_Pq_Qq }, + /* 66 */ { 0, &Ia_psubw_Vdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0ffa[2] = { + /* -- */ { 0, &Ia_psubd_Pq_Qq }, + /* 66 */ { 0, &Ia_psubd_Vdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0ffb[2] = { + /* -- */ { 0, &Ia_psubq_Pq_Qq }, + /* 66 */ { 0, &Ia_psubq_Vdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0ffc[2] = { + /* -- */ { 0, &Ia_paddb_Pq_Qq }, + /* 66 */ { 0, &Ia_paddb_Vdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0ffd[2] = { + /* -- */ { 0, &Ia_paddw_Pq_Qq }, + /* 66 */ { 0, &Ia_paddw_Vdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0ffe[2] = { + /* -- */ { 0, &Ia_paddd_Pq_Qq }, + /* 66 */ { 0, &Ia_paddd_Vdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_G1202[2] = { + /* -- */ { 0, &Ia_psrlw_Nq_Ib }, + /* 66 */ { 0, &Ia_psrlw_Udq_Ib } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_G1204[2] = { + /* -- */ { 0, &Ia_psraw_Nq_Ib }, + /* 66 */ { 0, &Ia_psraw_Udq_Ib } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_G1206[2] = { + /* -- */ { 0, &Ia_psllw_Nq_Ib }, + /* 66 */ { 0, &Ia_psllw_Udq_Ib } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_G1302[2] = { + /* -- */ { 0, &Ia_psrld_Nq_Ib }, + /* 66 */ { 0, &Ia_psrld_Udq_Ib } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_G1304[2] = { + /* -- */ { 0, &Ia_psrad_Nq_Ib }, + /* 66 */ { 0, &Ia_psrad_Udq_Ib } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_G1306[2] = { + /* -- */ { 0, &Ia_pslld_Nq_Ib }, + /* 66 */ { 0, &Ia_pslld_Udq_Ib } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_G1402[2] = { + /* -- */ { 0, &Ia_psrlq_Nq_Ib }, + /* 66 */ { 0, &Ia_psrlq_Udq_Ib } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_G1406[2] = { + /* -- */ { 0, &Ia_psllq_Nq_Ib }, + /* 66 */ { 0, &Ia_psllq_Udq_Ib } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f3800[2] = { + /* -- */ { 0, &Ia_pshufb_Pq_Qq }, // SSSE3 + /* 66 */ { 0, &Ia_pshufb_Vdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f3801[2] = { + /* -- */ { 0, &Ia_phaddw_Pq_Qq }, // SSSE3 + /* 66 */ { 0, &Ia_phaddw_Vdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f3802[2] = { + /* -- */ { 0, &Ia_phaddd_Pq_Qq }, // SSSE3 + /* 66 */ { 0, &Ia_phaddd_Vdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f3803[2] = { + /* -- */ { 0, &Ia_phaddsw_Pq_Qq }, // SSSE3 + /* 66 */ { 0, &Ia_phaddsw_Vdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f3804[2] = { + /* -- */ { 0, &Ia_pmaddubsw_Pq_Qq }, // SSSE3 + /* 66 */ { 0, &Ia_pmaddubsw_Vdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f3805[2] = { + /* -- */ { 0, &Ia_phsubw_Pq_Qq }, // SSSE3 + /* 66 */ { 0, &Ia_phsubw_Vdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f3806[2] = { + /* -- */ { 0, &Ia_phsubd_Pq_Qq }, // SSSE3 + /* 66 */ { 0, &Ia_phsubd_Vdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f3807[2] = { + /* -- */ { 0, &Ia_phsubsw_Pq_Qq }, // SSSE3 + /* 66 */ { 0, &Ia_phsubsw_Vdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f3808[2] = { + /* -- */ { 0, &Ia_psignb_Pq_Qq }, // SSSE3 + /* 66 */ { 0, &Ia_psignb_Vdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f3809[2] = { + /* -- */ { 0, &Ia_psignw_Pq_Qq }, // SSSE3 + /* 66 */ { 0, &Ia_psignw_Vdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f380a[2] = { + /* -- */ { 0, &Ia_psignd_Pq_Qq }, // SSSE3 + /* 66 */ { 0, &Ia_psignd_Vdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f380b[2] = { + /* -- */ { 0, &Ia_pmulhrsw_Pq_Qq }, // SSSE3 + /* 66 */ { 0, &Ia_pmulhrsw_Vdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f381c[2] = { + /* -- */ { 0, &Ia_pabsb_Pq_Qq }, // SSSE3 + /* 66 */ { 0, &Ia_pabsb_Vdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f381d[2] = { + /* -- */ { 0, &Ia_pabsw_Pq_Qq }, // SSSE3 + /* 66 */ { 0, &Ia_pabsw_Vdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f381e[2] = { + /* -- */ { 0, &Ia_pabsd_Pq_Qq }, // SSSE3 + /* 66 */ { 0, &Ia_pabsd_Vdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f38f0w[4] = { + /* -- */ { 0, &Ia_movbe_Gw_Mw }, + /* 66 */ { 0, &Ia_Invalid }, + /* F3 */ { 0, &Ia_Invalid }, + /* F2 */ { 0, &Ia_crc32_Gd_Eb } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f38f0d[4] = { + /* -- */ { 0, &Ia_movbe_Gd_Md }, + /* 66 */ { 0, &Ia_Invalid }, + /* F3 */ { 0, &Ia_Invalid }, + /* F2 */ { 0, &Ia_crc32_Gd_Eb } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f38f0q[4] = { + /* -- */ { 0, &Ia_movbe_Gq_Mq }, + /* 66 */ { 0, &Ia_Invalid }, + /* F3 */ { 0, &Ia_Invalid }, + /* F2 */ { 0, &Ia_crc32_Gd_Eb } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpOs64B_0f38f0[3] = { + /* 16 */ { GRPSSE(0f38f0w) }, + /* 32 */ { GRPSSE(0f38f0d) }, + /* 64 */ { GRPSSE(0f38f0q) }, +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f38f1w[4] = { + /* -- */ { 0, &Ia_movbe_Mw_Gw }, + /* 66 */ { 0, &Ia_Invalid }, + /* F3 */ { 0, &Ia_Invalid }, + /* F2 */ { 0, &Ia_crc32_Gd_Ew } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f38f1d[4] = { + /* -- */ { 0, &Ia_movbe_Md_Gd }, + /* 66 */ { 0, &Ia_Invalid }, + /* F3 */ { 0, &Ia_Invalid }, + /* F2 */ { 0, &Ia_crc32_Gd_Ed } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f38f1q[4] = { + /* -- */ { 0, &Ia_movbe_Mq_Gq }, + /* 66 */ { 0, &Ia_Invalid }, + /* F3 */ { 0, &Ia_Invalid }, + /* F2 */ { 0, &Ia_crc32_Gd_Eq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpOs64B_0f38f1[3] = { + /* 16 */ { GRPSSE(0f38f1w) }, + /* 32 */ { GRPSSE(0f38f1d) }, + /* 64 */ { GRPSSE(0f38f1q) }, +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpOs64B_adcx[3] = { + /* 16 */ { 0, &Ia_adcx_Gd_Ed }, + /* 32 */ { 0, &Ia_adcx_Gd_Ed }, + /* 64 */ { 0, &Ia_adcx_Gq_Eq }, +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpOs64B_adox[3] = { + /* 16 */ { 0, &Ia_adox_Gd_Ed }, + /* 32 */ { 0, &Ia_adox_Gd_Ed }, + /* 64 */ { 0, &Ia_adox_Gq_Eq }, +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f38f6[4] = { + /* -- */ { 0, &Ia_Invalid }, + /* 66 */ { GR64BIT(adcx) }, + /* F3 */ { GR64BIT(adox) }, + /* F2 */ { 0, &Ia_Invalid } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f3a0f[2] = { + /* -- */ { 0, &Ia_palignr_Pq_Qq_Ib }, // SSSE3 + /* 66 */ { 0, &Ia_palignr_Vdq_Wdq_Ib } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpOs64B_pextr[3] = { + /* 16 */ { 0, &Ia_pextrd_Ed_Vdq_Ib }, + /* 32 */ { 0, &Ia_pextrd_Ed_Vdq_Ib }, + /* 64 */ { 0, &Ia_pextrq_Eq_Vdq_Ib }, +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0f3a16[2] = { + /* -- */ { 0, &Ia_Invalid }, + /* 66 */ { GR64BIT(pextr) } // SSE4 +}; + +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[2] = { + /* -- */ { 0, &Ia_Invalid }, + /* 66 */ { GR64BIT(pinsr) } // SSE4 +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fbcw[4] = { + /* -- */ { 0, &Ia_bsfw_Gw_Ew }, + /* 66 */ { 0, &Ia_bsfw_Gw_Ew }, + /* F3 */ { 0, &Ia_tzcntw_Gw_Ew }, + /* F2 */ { 0, &Ia_bsfw_Gw_Ew } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fbcd[4] = { + /* -- */ { 0, &Ia_bsfl_Gd_Ed }, + /* 66 */ { 0, &Ia_bsfl_Gd_Ed }, + /* F3 */ { 0, &Ia_tzcntl_Gd_Ed }, + /* F2 */ { 0, &Ia_bsfl_Gd_Ed } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fbcq[4] = { + /* -- */ { 0, &Ia_bsfq_Gq_Eq }, + /* 66 */ { 0, &Ia_bsfq_Gq_Eq }, + /* F3 */ { 0, &Ia_tzcntq_Gq_Eq }, + /* F2 */ { 0, &Ia_bsfq_Gq_Eq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fbdw[4] = { + /* -- */ { 0, &Ia_bsrw_Gw_Ew }, + /* 66 */ { 0, &Ia_bsrw_Gw_Ew }, + /* F3 */ { 0, &Ia_lzcntw_Gw_Ew }, + /* F2 */ { 0, &Ia_bsrw_Gw_Ew } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fbdd[4] = { + /* -- */ { 0, &Ia_bsrl_Gd_Ed }, + /* 66 */ { 0, &Ia_bsrl_Gd_Ed }, + /* F3 */ { 0, &Ia_lzcntl_Gd_Ed }, + /* F2 */ { 0, &Ia_bsrl_Gd_Ed } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupSSE_0fbdq[4] = { + /* -- */ { 0, &Ia_bsrq_Gq_Eq }, + /* 66 */ { 0, &Ia_bsrq_Gq_Eq }, + /* F3 */ { 0, &Ia_lzcntq_Gq_Eq }, + /* F2 */ { 0, &Ia_bsrq_Gq_Eq } +}; + +/* ************************************************************************ */ +/* 3-byte opcode table (Table A-4, 0F 38) */ + +static BxDisasmOpcodeTable_t BxDisasm3ByteOpTable0f38[256] = { + /* 00 */ { GRPSSE2(0f3800) }, + /* 01 */ { GRPSSE2(0f3801) }, + /* 02 */ { GRPSSE2(0f3802) }, + /* 03 */ { GRPSSE2(0f3803) }, + /* 04 */ { GRPSSE2(0f3804) }, + /* 05 */ { GRPSSE2(0f3805) }, + /* 06 */ { GRPSSE2(0f3806) }, + /* 07 */ { GRPSSE2(0f3807) }, + /* 08 */ { GRPSSE2(0f3808) }, + /* 09 */ { GRPSSE2(0f3809) }, + /* 0A */ { GRPSSE2(0f380a) }, + /* 0B */ { GRPSSE2(0f380b) }, + /* 0C */ { 0, &Ia_Invalid }, + /* 0D */ { 0, &Ia_Invalid }, + /* 0E */ { 0, &Ia_Invalid }, + /* 0F */ { 0, &Ia_Invalid }, + /* 10 */ { GRPSSE66(Ia_pblendvb_Vdq_Wdq) }, + /* 11 */ { 0, &Ia_Invalid }, + /* 12 */ { 0, &Ia_Invalid }, + /* 13 */ { 0, &Ia_Invalid }, + /* 14 */ { GRPSSE66(Ia_blendvps_Vps_Wps) }, + /* 15 */ { GRPSSE66(Ia_blendvpd_Vpd_Wpd) }, + /* 16 */ { 0, &Ia_Invalid }, + /* 17 */ { GRPSSE66(Ia_ptest_Vdq_Wdq) }, + /* 18 */ { 0, &Ia_Invalid }, + /* 19 */ { 0, &Ia_Invalid }, + /* 1A */ { 0, &Ia_Invalid }, + /* 1B */ { 0, &Ia_Invalid }, + /* 1C */ { GRPSSE2(0f381c) }, + /* 1D */ { GRPSSE2(0f381d) }, + /* 1E */ { GRPSSE2(0f381e) }, + /* 1F */ { 0, &Ia_Invalid }, + /* 20 */ { GRPSSE66(Ia_pmovsxbw_Vdq_Wq) }, + /* 21 */ { GRPSSE66(Ia_pmovsxbd_Vdq_Wd) }, + /* 22 */ { GRPSSE66(Ia_pmovsxbq_Vdq_Ww) }, + /* 23 */ { GRPSSE66(Ia_pmovsxwd_Vdq_Wq) }, + /* 24 */ { GRPSSE66(Ia_pmovsxwq_Vdq_Wd) }, + /* 25 */ { GRPSSE66(Ia_pmovsxdq_Vdq_Wq) }, + /* 26 */ { 0, &Ia_Invalid }, + /* 27 */ { 0, &Ia_Invalid }, + /* 28 */ { GRPSSE66(Ia_pmuldq_Vdq_Wdq) }, + /* 29 */ { GRPSSE66(Ia_pcmpeqq_Vdq_Wdq) }, + /* 2A */ { GRPSSE66(Ia_movntdqa_Vdq_Mdq) }, + /* 2B */ { GRPSSE66(Ia_packusdw_Vdq_Wdq) }, + /* 2C */ { 0, &Ia_Invalid }, + /* 2D */ { 0, &Ia_Invalid }, + /* 2E */ { 0, &Ia_Invalid }, + /* 2F */ { 0, &Ia_Invalid }, + /* 30 */ { GRPSSE66(Ia_pmovzxbw_Vdq_Wq) }, + /* 31 */ { GRPSSE66(Ia_pmovzxbd_Vdq_Wd) }, + /* 32 */ { GRPSSE66(Ia_pmovzxbq_Vdq_Ww) }, + /* 33 */ { GRPSSE66(Ia_pmovzxwd_Vdq_Wq) }, + /* 34 */ { GRPSSE66(Ia_pmovzxwq_Vdq_Wd) }, + /* 35 */ { GRPSSE66(Ia_pmovzxdq_Vdq_Wq) }, + /* 36 */ { 0, &Ia_Invalid }, + /* 37 */ { GRPSSE66(Ia_pcmpgtq_Vdq_Wdq) }, + /* 38 */ { GRPSSE66(Ia_pminsb_Vdq_Wdq) }, + /* 39 */ { GRPSSE66(Ia_pminsd_Vdq_Wdq) }, + /* 3A */ { GRPSSE66(Ia_pminuw_Vdq_Wdq) }, + /* 3B */ { GRPSSE66(Ia_pminud_Vdq_Wdq) }, + /* 3C */ { GRPSSE66(Ia_pmaxsb_Vdq_Wdq) }, + /* 3D */ { GRPSSE66(Ia_pmaxsd_Vdq_Wdq) }, + /* 3E */ { GRPSSE66(Ia_pmaxuw_Vdq_Wdq) }, + /* 3F */ { GRPSSE66(Ia_pmaxud_Vdq_Wdq) }, + /* 40 */ { GRPSSE66(Ia_pmulld_Vdq_Wdq) }, + /* 41 */ { GRPSSE66(Ia_phminposuw_Vdq_Wdq) }, + /* 42 */ { 0, &Ia_Invalid }, + /* 43 */ { 0, &Ia_Invalid }, + /* 44 */ { 0, &Ia_Invalid }, + /* 45 */ { 0, &Ia_Invalid }, + /* 46 */ { 0, &Ia_Invalid }, + /* 47 */ { 0, &Ia_Invalid }, + /* 48 */ { 0, &Ia_Invalid }, + /* 49 */ { 0, &Ia_Invalid }, + /* 4A */ { 0, &Ia_Invalid }, + /* 4B */ { 0, &Ia_Invalid }, + /* 4C */ { 0, &Ia_Invalid }, + /* 4D */ { 0, &Ia_Invalid }, + /* 4E */ { 0, &Ia_Invalid }, + /* 4F */ { 0, &Ia_Invalid }, + /* 50 */ { 0, &Ia_Invalid }, + /* 51 */ { 0, &Ia_Invalid }, + /* 52 */ { 0, &Ia_Invalid }, + /* 53 */ { 0, &Ia_Invalid }, + /* 54 */ { 0, &Ia_Invalid }, + /* 55 */ { 0, &Ia_Invalid }, + /* 56 */ { 0, &Ia_Invalid }, + /* 57 */ { 0, &Ia_Invalid }, + /* 58 */ { 0, &Ia_Invalid }, + /* 59 */ { 0, &Ia_Invalid }, + /* 5A */ { 0, &Ia_Invalid }, + /* 5B */ { 0, &Ia_Invalid }, + /* 5C */ { 0, &Ia_Invalid }, + /* 5D */ { 0, &Ia_Invalid }, + /* 5E */ { 0, &Ia_Invalid }, + /* 5F */ { 0, &Ia_Invalid }, + /* 60 */ { 0, &Ia_Invalid }, + /* 61 */ { 0, &Ia_Invalid }, + /* 62 */ { 0, &Ia_Invalid }, + /* 63 */ { 0, &Ia_Invalid }, + /* 64 */ { 0, &Ia_Invalid }, + /* 65 */ { 0, &Ia_Invalid }, + /* 66 */ { 0, &Ia_Invalid }, + /* 67 */ { 0, &Ia_Invalid }, + /* 68 */ { 0, &Ia_Invalid }, + /* 69 */ { 0, &Ia_Invalid }, + /* 6A */ { 0, &Ia_Invalid }, + /* 6B */ { 0, &Ia_Invalid }, + /* 6C */ { 0, &Ia_Invalid }, + /* 6D */ { 0, &Ia_Invalid }, + /* 6E */ { 0, &Ia_Invalid }, + /* 6F */ { 0, &Ia_Invalid }, + /* 70 */ { 0, &Ia_Invalid }, + /* 71 */ { 0, &Ia_Invalid }, + /* 72 */ { 0, &Ia_Invalid }, + /* 73 */ { 0, &Ia_Invalid }, + /* 74 */ { 0, &Ia_Invalid }, + /* 75 */ { 0, &Ia_Invalid }, + /* 76 */ { 0, &Ia_Invalid }, + /* 77 */ { 0, &Ia_Invalid }, + /* 78 */ { 0, &Ia_Invalid }, + /* 79 */ { 0, &Ia_Invalid }, + /* 7A */ { 0, &Ia_Invalid }, + /* 7B */ { 0, &Ia_Invalid }, + /* 7C */ { 0, &Ia_Invalid }, + /* 7D */ { 0, &Ia_Invalid }, + /* 7E */ { 0, &Ia_Invalid }, + /* 7F */ { 0, &Ia_Invalid }, + /* 80 */ { GRPSSE66(Ia_invept_Gy_Mdq) }, + /* 81 */ { GRPSSE66(Ia_invvpid_Gy_Mdq) }, + /* 82 */ { GRPSSE66(Ia_invpcid_Gy_Mdq) }, + /* 83 */ { 0, &Ia_Invalid }, + /* 84 */ { 0, &Ia_Invalid }, + /* 85 */ { 0, &Ia_Invalid }, + /* 86 */ { 0, &Ia_Invalid }, + /* 87 */ { 0, &Ia_Invalid }, + /* 88 */ { 0, &Ia_Invalid }, + /* 89 */ { 0, &Ia_Invalid }, + /* 8A */ { 0, &Ia_Invalid }, + /* 8B */ { 0, &Ia_Invalid }, + /* 8C */ { 0, &Ia_Invalid }, + /* 8D */ { 0, &Ia_Invalid }, + /* 8E */ { 0, &Ia_Invalid }, + /* 8F */ { 0, &Ia_Invalid }, + /* 90 */ { 0, &Ia_Invalid }, + /* 91 */ { 0, &Ia_Invalid }, + /* 92 */ { 0, &Ia_Invalid }, + /* 93 */ { 0, &Ia_Invalid }, + /* 94 */ { 0, &Ia_Invalid }, + /* 95 */ { 0, &Ia_Invalid }, + /* 96 */ { 0, &Ia_Invalid }, + /* 97 */ { 0, &Ia_Invalid }, + /* 98 */ { 0, &Ia_Invalid }, + /* 99 */ { 0, &Ia_Invalid }, + /* 9A */ { 0, &Ia_Invalid }, + /* 9B */ { 0, &Ia_Invalid }, + /* 9C */ { 0, &Ia_Invalid }, + /* 9D */ { 0, &Ia_Invalid }, + /* 9E */ { 0, &Ia_Invalid }, + /* 9F */ { 0, &Ia_Invalid }, + /* A0 */ { 0, &Ia_Invalid }, + /* A1 */ { 0, &Ia_Invalid }, + /* A2 */ { 0, &Ia_Invalid }, + /* A3 */ { 0, &Ia_Invalid }, + /* A4 */ { 0, &Ia_Invalid }, + /* A5 */ { 0, &Ia_Invalid }, + /* A6 */ { 0, &Ia_Invalid }, + /* A7 */ { 0, &Ia_Invalid }, + /* A8 */ { 0, &Ia_Invalid }, + /* A9 */ { 0, &Ia_Invalid }, + /* AA */ { 0, &Ia_Invalid }, + /* AB */ { 0, &Ia_Invalid }, + /* AC */ { 0, &Ia_Invalid }, + /* AD */ { 0, &Ia_Invalid }, + /* AE */ { 0, &Ia_Invalid }, + /* AF */ { 0, &Ia_Invalid }, + /* B0 */ { 0, &Ia_Invalid }, + /* B1 */ { 0, &Ia_Invalid }, + /* B2 */ { 0, &Ia_Invalid }, + /* B3 */ { 0, &Ia_Invalid }, + /* B4 */ { 0, &Ia_Invalid }, + /* B5 */ { 0, &Ia_Invalid }, + /* B6 */ { 0, &Ia_Invalid }, + /* B7 */ { 0, &Ia_Invalid }, + /* B8 */ { 0, &Ia_Invalid }, + /* B9 */ { 0, &Ia_Invalid }, + /* BA */ { 0, &Ia_Invalid }, + /* BB */ { 0, &Ia_Invalid }, + /* BC */ { 0, &Ia_Invalid }, + /* BD */ { 0, &Ia_Invalid }, + /* BE */ { 0, &Ia_Invalid }, + /* BF */ { 0, &Ia_Invalid }, + /* C0 */ { 0, &Ia_Invalid }, + /* C1 */ { 0, &Ia_Invalid }, + /* C2 */ { 0, &Ia_Invalid }, + /* C3 */ { 0, &Ia_Invalid }, + /* C4 */ { 0, &Ia_Invalid }, + /* C5 */ { 0, &Ia_Invalid }, + /* C6 */ { 0, &Ia_Invalid }, + /* C7 */ { 0, &Ia_Invalid }, + /* C8 */ { GRPSSENONE(Ia_sha1nexte_Vdq_Wdq) }, + /* C9 */ { GRPSSENONE(Ia_sha1msg1_Vdq_Wdq) }, + /* CA */ { GRPSSENONE(Ia_sha1msg2_Vdq_Wdq) }, + /* CB */ { GRPSSENONE(Ia_sha256rnds2_Vdq_Wdq) }, + /* CC */ { GRPSSENONE(Ia_sha256msg1_Vdq_Wdq) }, + /* CD */ { GRPSSENONE(Ia_sha256msg2_Vdq_Wdq) }, + /* CE */ { 0, &Ia_Invalid }, + /* CF */ { 0, &Ia_Invalid }, + /* D0 */ { 0, &Ia_Invalid }, + /* D1 */ { 0, &Ia_Invalid }, + /* D2 */ { 0, &Ia_Invalid }, + /* D3 */ { 0, &Ia_Invalid }, + /* D4 */ { 0, &Ia_Invalid }, + /* D5 */ { 0, &Ia_Invalid }, + /* D6 */ { 0, &Ia_Invalid }, + /* D7 */ { 0, &Ia_Invalid }, + /* D8 */ { 0, &Ia_Invalid }, + /* D9 */ { 0, &Ia_Invalid }, + /* DA */ { 0, &Ia_Invalid }, + /* DB */ { GRPSSE66(Ia_aesimc_Vdq_Wdq) }, + /* DC */ { GRPSSE66(Ia_aesenc_Vdq_Wdq) }, + /* DD */ { GRPSSE66(Ia_aesenclast_Vdq_Wdq) }, + /* DE */ { GRPSSE66(Ia_aesdec_Vdq_Wdq) }, + /* DF */ { GRPSSE66(Ia_aesdeclast_Vdq_Wdq) }, + /* E0 */ { 0, &Ia_Invalid }, + /* E1 */ { 0, &Ia_Invalid }, + /* E2 */ { 0, &Ia_Invalid }, + /* E3 */ { 0, &Ia_Invalid }, + /* E4 */ { 0, &Ia_Invalid }, + /* E5 */ { 0, &Ia_Invalid }, + /* E6 */ { 0, &Ia_Invalid }, + /* E7 */ { 0, &Ia_Invalid }, + /* E8 */ { 0, &Ia_Invalid }, + /* E9 */ { 0, &Ia_Invalid }, + /* EA */ { 0, &Ia_Invalid }, + /* EB */ { 0, &Ia_Invalid }, + /* EC */ { 0, &Ia_Invalid }, + /* ED */ { 0, &Ia_Invalid }, + /* EE */ { 0, &Ia_Invalid }, + /* EF */ { 0, &Ia_Invalid }, + /* F0 */ { GR64BIT(0f38f0) }, + /* F1 */ { GR64BIT(0f38f1) }, + /* F2 */ { 0, &Ia_Invalid }, + /* F3 */ { 0, &Ia_Invalid }, + /* F4 */ { 0, &Ia_Invalid }, + /* F5 */ { 0, &Ia_Invalid }, + /* F6 */ { GRPSSE(0f38f6) }, + /* F7 */ { 0, &Ia_Invalid }, + /* F8 */ { 0, &Ia_Invalid }, + /* F9 */ { 0, &Ia_Invalid }, + /* FA */ { 0, &Ia_Invalid }, + /* FB */ { 0, &Ia_Invalid }, + /* FC */ { 0, &Ia_Invalid }, + /* FD */ { 0, &Ia_Invalid }, + /* FE */ { 0, &Ia_Invalid }, + /* FF */ { 0, &Ia_Invalid } +}; + +/* ************************************************************************ */ +/* 3-byte opcode table (Table A-5, 0F 3A) */ + +static BxDisasmOpcodeTable_t BxDisasm3ByteOpTable0f3a[256] = { + /* 00 */ { 0, &Ia_Invalid }, + /* 01 */ { 0, &Ia_Invalid }, + /* 02 */ { 0, &Ia_Invalid }, + /* 03 */ { 0, &Ia_Invalid }, + /* 04 */ { 0, &Ia_Invalid }, + /* 05 */ { 0, &Ia_Invalid }, + /* 06 */ { 0, &Ia_Invalid }, + /* 07 */ { 0, &Ia_Invalid }, + /* 08 */ { GRPSSE66(Ia_roundps_Vps_Wps_Ib) }, + /* 09 */ { GRPSSE66(Ia_roundpd_Vpd_Wpd_Ib) }, + /* 0A */ { GRPSSE66(Ia_roundss_Vss_Wss_Ib) }, + /* 0B */ { GRPSSE66(Ia_roundsd_Vsd_Wsd_Ib) }, + /* 0C */ { GRPSSE66(Ia_blendps_Vps_Wps_Ib) }, + /* 0D */ { GRPSSE66(Ia_blendpd_Vpd_Wpd_Ib) }, + /* 0E */ { GRPSSE66(Ia_pblendw_Vdq_Wdq_Ib) }, + /* 0F */ { GRPSSE2(0f3a0f) }, + /* 10 */ { 0, &Ia_Invalid }, + /* 11 */ { 0, &Ia_Invalid }, + /* 12 */ { 0, &Ia_Invalid }, + /* 13 */ { 0, &Ia_Invalid }, + /* 14 */ { GRPSSE66(Ia_pextrb_Ebd_Vdq_Ib) }, + /* 15 */ { GRPSSE66(Ia_pextrw_Ewd_Vdq_Ib) }, + /* 16 */ { GRPSSE2(0f3a16) }, + /* 17 */ { GRPSSE66(Ia_extractps_Ed_Vdq_Ib) }, + /* 18 */ { 0, &Ia_Invalid }, + /* 19 */ { 0, &Ia_Invalid }, + /* 1A */ { 0, &Ia_Invalid }, + /* 1B */ { 0, &Ia_Invalid }, + /* 1C */ { 0, &Ia_Invalid }, + /* 1D */ { 0, &Ia_Invalid }, + /* 1E */ { 0, &Ia_Invalid }, + /* 1F */ { 0, &Ia_Invalid }, + /* 20 */ { GRPSSE66(Ia_pinsrb_Vdq_Ew_Ib) }, + /* 21 */ { GRPSSE66(Ia_insertps_Vps_Wss_Ib) }, + /* 22 */ { GRPSSE2(0f3a22) }, + /* 23 */ { 0, &Ia_Invalid }, + /* 24 */ { 0, &Ia_Invalid }, + /* 25 */ { 0, &Ia_Invalid }, + /* 26 */ { 0, &Ia_Invalid }, + /* 27 */ { 0, &Ia_Invalid }, + /* 28 */ { 0, &Ia_Invalid }, + /* 29 */ { 0, &Ia_Invalid }, + /* 2A */ { 0, &Ia_Invalid }, + /* 2B */ { 0, &Ia_Invalid }, + /* 2C */ { 0, &Ia_Invalid }, + /* 2D */ { 0, &Ia_Invalid }, + /* 2E */ { 0, &Ia_Invalid }, + /* 2F */ { 0, &Ia_Invalid }, + /* 30 */ { 0, &Ia_Invalid }, + /* 31 */ { 0, &Ia_Invalid }, + /* 32 */ { 0, &Ia_Invalid }, + /* 33 */ { 0, &Ia_Invalid }, + /* 34 */ { 0, &Ia_Invalid }, + /* 35 */ { 0, &Ia_Invalid }, + /* 36 */ { 0, &Ia_Invalid }, + /* 37 */ { 0, &Ia_Invalid }, + /* 38 */ { 0, &Ia_Invalid }, + /* 39 */ { 0, &Ia_Invalid }, + /* 3A */ { 0, &Ia_Invalid }, + /* 3B */ { 0, &Ia_Invalid }, + /* 3C */ { 0, &Ia_Invalid }, + /* 3D */ { 0, &Ia_Invalid }, + /* 3E */ { 0, &Ia_Invalid }, + /* 3F */ { 0, &Ia_Invalid }, + /* 40 */ { GRPSSE66(Ia_dpps_Vps_Wps_Ib) }, + /* 41 */ { GRPSSE66(Ia_dppd_Vpd_Wpd_Ib) }, + /* 42 */ { GRPSSE66(Ia_mpsadbw_Vdq_Wdq_Ib) }, + /* 43 */ { 0, &Ia_Invalid }, + /* 44 */ { GRPSSE66(Ia_pclmulqdq_Vdq_Wdq_Ib) }, + /* 45 */ { 0, &Ia_Invalid }, + /* 46 */ { 0, &Ia_Invalid }, + /* 47 */ { 0, &Ia_Invalid }, + /* 48 */ { 0, &Ia_Invalid }, + /* 49 */ { 0, &Ia_Invalid }, + /* 4A */ { 0, &Ia_Invalid }, + /* 4B */ { 0, &Ia_Invalid }, + /* 4C */ { 0, &Ia_Invalid }, + /* 4D */ { 0, &Ia_Invalid }, + /* 4E */ { 0, &Ia_Invalid }, + /* 4F */ { 0, &Ia_Invalid }, + /* 50 */ { 0, &Ia_Invalid }, + /* 51 */ { 0, &Ia_Invalid }, + /* 52 */ { 0, &Ia_Invalid }, + /* 53 */ { 0, &Ia_Invalid }, + /* 54 */ { 0, &Ia_Invalid }, + /* 55 */ { 0, &Ia_Invalid }, + /* 56 */ { 0, &Ia_Invalid }, + /* 57 */ { 0, &Ia_Invalid }, + /* 58 */ { 0, &Ia_Invalid }, + /* 59 */ { 0, &Ia_Invalid }, + /* 5A */ { 0, &Ia_Invalid }, + /* 5B */ { 0, &Ia_Invalid }, + /* 5C */ { 0, &Ia_Invalid }, + /* 5D */ { 0, &Ia_Invalid }, + /* 5E */ { 0, &Ia_Invalid }, + /* 5F */ { 0, &Ia_Invalid }, + /* 60 */ { GRPSSE66(Ia_pcmpestrm_Vdq_Wdq_Ib) }, + /* 61 */ { GRPSSE66(Ia_pcmpestri_Vdq_Wdq_Ib) }, + /* 62 */ { GRPSSE66(Ia_pcmpistrm_Vdq_Wdq_Ib) }, + /* 63 */ { GRPSSE66(Ia_pcmpistri_Vdq_Wdq_Ib) }, + /* 64 */ { 0, &Ia_Invalid }, + /* 65 */ { 0, &Ia_Invalid }, + /* 66 */ { 0, &Ia_Invalid }, + /* 67 */ { 0, &Ia_Invalid }, + /* 68 */ { 0, &Ia_Invalid }, + /* 69 */ { 0, &Ia_Invalid }, + /* 6A */ { 0, &Ia_Invalid }, + /* 6B */ { 0, &Ia_Invalid }, + /* 6C */ { 0, &Ia_Invalid }, + /* 6D */ { 0, &Ia_Invalid }, + /* 6E */ { 0, &Ia_Invalid }, + /* 6F */ { 0, &Ia_Invalid }, + /* 70 */ { 0, &Ia_Invalid }, + /* 71 */ { 0, &Ia_Invalid }, + /* 72 */ { 0, &Ia_Invalid }, + /* 73 */ { 0, &Ia_Invalid }, + /* 74 */ { 0, &Ia_Invalid }, + /* 75 */ { 0, &Ia_Invalid }, + /* 76 */ { 0, &Ia_Invalid }, + /* 77 */ { 0, &Ia_Invalid }, + /* 78 */ { 0, &Ia_Invalid }, + /* 79 */ { 0, &Ia_Invalid }, + /* 7A */ { 0, &Ia_Invalid }, + /* 7B */ { 0, &Ia_Invalid }, + /* 7C */ { 0, &Ia_Invalid }, + /* 7D */ { 0, &Ia_Invalid }, + /* 7E */ { 0, &Ia_Invalid }, + /* 7F */ { 0, &Ia_Invalid }, + /* 80 */ { 0, &Ia_Invalid }, + /* 81 */ { 0, &Ia_Invalid }, + /* 82 */ { 0, &Ia_Invalid }, + /* 83 */ { 0, &Ia_Invalid }, + /* 84 */ { 0, &Ia_Invalid }, + /* 85 */ { 0, &Ia_Invalid }, + /* 86 */ { 0, &Ia_Invalid }, + /* 87 */ { 0, &Ia_Invalid }, + /* 88 */ { 0, &Ia_Invalid }, + /* 89 */ { 0, &Ia_Invalid }, + /* 8A */ { 0, &Ia_Invalid }, + /* 8B */ { 0, &Ia_Invalid }, + /* 8C */ { 0, &Ia_Invalid }, + /* 8D */ { 0, &Ia_Invalid }, + /* 8E */ { 0, &Ia_Invalid }, + /* 8F */ { 0, &Ia_Invalid }, + /* 90 */ { 0, &Ia_Invalid }, + /* 91 */ { 0, &Ia_Invalid }, + /* 92 */ { 0, &Ia_Invalid }, + /* 93 */ { 0, &Ia_Invalid }, + /* 94 */ { 0, &Ia_Invalid }, + /* 95 */ { 0, &Ia_Invalid }, + /* 96 */ { 0, &Ia_Invalid }, + /* 97 */ { 0, &Ia_Invalid }, + /* 98 */ { 0, &Ia_Invalid }, + /* 99 */ { 0, &Ia_Invalid }, + /* 9A */ { 0, &Ia_Invalid }, + /* 9B */ { 0, &Ia_Invalid }, + /* 9C */ { 0, &Ia_Invalid }, + /* 9D */ { 0, &Ia_Invalid }, + /* 9E */ { 0, &Ia_Invalid }, + /* 9F */ { 0, &Ia_Invalid }, + /* A0 */ { 0, &Ia_Invalid }, + /* A1 */ { 0, &Ia_Invalid }, + /* A2 */ { 0, &Ia_Invalid }, + /* A3 */ { 0, &Ia_Invalid }, + /* A4 */ { 0, &Ia_Invalid }, + /* A5 */ { 0, &Ia_Invalid }, + /* A6 */ { 0, &Ia_Invalid }, + /* A7 */ { 0, &Ia_Invalid }, + /* A8 */ { 0, &Ia_Invalid }, + /* A9 */ { 0, &Ia_Invalid }, + /* AA */ { 0, &Ia_Invalid }, + /* AB */ { 0, &Ia_Invalid }, + /* AC */ { 0, &Ia_Invalid }, + /* AD */ { 0, &Ia_Invalid }, + /* AE */ { 0, &Ia_Invalid }, + /* AF */ { 0, &Ia_Invalid }, + /* B0 */ { 0, &Ia_Invalid }, + /* B1 */ { 0, &Ia_Invalid }, + /* B2 */ { 0, &Ia_Invalid }, + /* B3 */ { 0, &Ia_Invalid }, + /* B4 */ { 0, &Ia_Invalid }, + /* B5 */ { 0, &Ia_Invalid }, + /* B6 */ { 0, &Ia_Invalid }, + /* B7 */ { 0, &Ia_Invalid }, + /* B8 */ { 0, &Ia_Invalid }, + /* B9 */ { 0, &Ia_Invalid }, + /* BA */ { 0, &Ia_Invalid }, + /* BB */ { 0, &Ia_Invalid }, + /* BC */ { 0, &Ia_Invalid }, + /* BD */ { 0, &Ia_Invalid }, + /* BE */ { 0, &Ia_Invalid }, + /* BF */ { 0, &Ia_Invalid }, + /* C0 */ { 0, &Ia_Invalid }, + /* C1 */ { 0, &Ia_Invalid }, + /* C2 */ { 0, &Ia_Invalid }, + /* C3 */ { 0, &Ia_Invalid }, + /* C4 */ { 0, &Ia_Invalid }, + /* C5 */ { 0, &Ia_Invalid }, + /* C6 */ { 0, &Ia_Invalid }, + /* C7 */ { 0, &Ia_Invalid }, + /* C8 */ { 0, &Ia_Invalid }, + /* C9 */ { 0, &Ia_Invalid }, + /* CA */ { 0, &Ia_Invalid }, + /* CB */ { 0, &Ia_Invalid }, + /* CC */ { GRPSSENONE(Ia_sha1rnds4_Vdq_Wdq_Ib) }, + /* CD */ { 0, &Ia_Invalid }, + /* CE */ { 0, &Ia_Invalid }, + /* CF */ { 0, &Ia_Invalid }, + /* D0 */ { 0, &Ia_Invalid }, + /* D1 */ { 0, &Ia_Invalid }, + /* D2 */ { 0, &Ia_Invalid }, + /* D3 */ { 0, &Ia_Invalid }, + /* D4 */ { 0, &Ia_Invalid }, + /* D5 */ { 0, &Ia_Invalid }, + /* D6 */ { 0, &Ia_Invalid }, + /* D7 */ { 0, &Ia_Invalid }, + /* D8 */ { 0, &Ia_Invalid }, + /* D9 */ { 0, &Ia_Invalid }, + /* DA */ { 0, &Ia_Invalid }, + /* DB */ { 0, &Ia_Invalid }, + /* DC */ { 0, &Ia_Invalid }, + /* DD */ { 0, &Ia_Invalid }, + /* DE */ { 0, &Ia_Invalid }, + /* DF */ { GRPSSE66(Ia_aeskeygenassist_Vdq_Wdq_Ib) }, + /* E0 */ { 0, &Ia_Invalid }, + /* E1 */ { 0, &Ia_Invalid }, + /* E2 */ { 0, &Ia_Invalid }, + /* E3 */ { 0, &Ia_Invalid }, + /* E4 */ { 0, &Ia_Invalid }, + /* E5 */ { 0, &Ia_Invalid }, + /* E6 */ { 0, &Ia_Invalid }, + /* E7 */ { 0, &Ia_Invalid }, + /* E8 */ { 0, &Ia_Invalid }, + /* E9 */ { 0, &Ia_Invalid }, + /* EA */ { 0, &Ia_Invalid }, + /* EB */ { 0, &Ia_Invalid }, + /* EC */ { 0, &Ia_Invalid }, + /* ED */ { 0, &Ia_Invalid }, + /* EE */ { 0, &Ia_Invalid }, + /* EF */ { 0, &Ia_Invalid }, + /* F0 */ { 0, &Ia_Invalid }, + /* F1 */ { 0, &Ia_Invalid }, + /* F2 */ { 0, &Ia_Invalid }, + /* F3 */ { 0, &Ia_Invalid }, + /* F4 */ { 0, &Ia_Invalid }, + /* F5 */ { 0, &Ia_Invalid }, + /* F6 */ { 0, &Ia_Invalid }, + /* F7 */ { 0, &Ia_Invalid }, + /* F8 */ { 0, &Ia_Invalid }, + /* F9 */ { 0, &Ia_Invalid }, + /* FA */ { 0, &Ia_Invalid }, + /* FB */ { 0, &Ia_Invalid }, + /* FC */ { 0, &Ia_Invalid }, + /* FD */ { 0, &Ia_Invalid }, + /* FE */ { 0, &Ia_Invalid }, + /* FF */ { 0, &Ia_Invalid } +}; diff --git a/Externals/Bochs_disasm/dis_tables_x87.inc b/Externals/Bochs_disasm/dis_tables_x87.inc new file mode 100644 index 0000000000..230110e6bd --- /dev/null +++ b/Externals/Bochs_disasm/dis_tables_x87.inc @@ -0,0 +1,919 @@ +///////////////////////////////////////////////////////////////////////// +// $Id: dis_tables_x87.inc 10298 2011-04-03 10:29:19Z vruppert $ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (c) 2005-2010 Stanislav Shwartsman +// Written by Stanislav Shwartsman [sshwarts at sourceforge net] +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// +///////////////////////////////////////////////////////////////////////// + +/* ************************************************************************ */ +/* 3DNow! opcodes */ + +static BxDisasmOpcodeTable_t BxDisasm3DNowGroup[256] = { + // 256 entries for 3DNow opcodes_by suffix + /* 00 */ { 0, &Ia_Invalid }, + /* 01 */ { 0, &Ia_Invalid }, + /* 02 */ { 0, &Ia_Invalid }, + /* 03 */ { 0, &Ia_Invalid }, + /* 04 */ { 0, &Ia_Invalid }, + /* 05 */ { 0, &Ia_Invalid }, + /* 06 */ { 0, &Ia_Invalid }, + /* 07 */ { 0, &Ia_Invalid }, + /* 08 */ { 0, &Ia_Invalid }, + /* 09 */ { 0, &Ia_Invalid }, + /* 0A */ { 0, &Ia_Invalid }, + /* 0B */ { 0, &Ia_Invalid }, + /* 0C */ { 0, &Ia_pi2fw_Pq_Qq }, + /* 0D */ { 0, &Ia_pi2fd_Pq_Qq }, + /* 0E */ { 0, &Ia_Invalid }, + /* 0F */ { 0, &Ia_Invalid }, + /* 10 */ { 0, &Ia_Invalid }, + /* 11 */ { 0, &Ia_Invalid }, + /* 12 */ { 0, &Ia_Invalid }, + /* 13 */ { 0, &Ia_Invalid }, + /* 14 */ { 0, &Ia_Invalid }, + /* 15 */ { 0, &Ia_Invalid }, + /* 16 */ { 0, &Ia_Invalid }, + /* 17 */ { 0, &Ia_Invalid }, + /* 18 */ { 0, &Ia_Invalid }, + /* 19 */ { 0, &Ia_Invalid }, + /* 1A */ { 0, &Ia_Invalid }, + /* 1B */ { 0, &Ia_Invalid }, + /* 1C */ { 0, &Ia_pf2iw_Pq_Qq }, + /* 1D */ { 0, &Ia_pf2id_Pq_Qq }, + /* 1E */ { 0, &Ia_Invalid }, + /* 1F */ { 0, &Ia_Invalid }, + /* 20 */ { 0, &Ia_Invalid }, + /* 21 */ { 0, &Ia_Invalid }, + /* 22 */ { 0, &Ia_Invalid }, + /* 23 */ { 0, &Ia_Invalid }, + /* 24 */ { 0, &Ia_Invalid }, + /* 25 */ { 0, &Ia_Invalid }, + /* 26 */ { 0, &Ia_Invalid }, + /* 27 */ { 0, &Ia_Invalid }, + /* 28 */ { 0, &Ia_Invalid }, + /* 29 */ { 0, &Ia_Invalid }, + /* 2A */ { 0, &Ia_Invalid }, + /* 2B */ { 0, &Ia_Invalid }, + /* 2C */ { 0, &Ia_Invalid }, + /* 2D */ { 0, &Ia_Invalid }, + /* 2E */ { 0, &Ia_Invalid }, + /* 2F */ { 0, &Ia_Invalid }, + /* 30 */ { 0, &Ia_Invalid }, + /* 31 */ { 0, &Ia_Invalid }, + /* 32 */ { 0, &Ia_Invalid }, + /* 33 */ { 0, &Ia_Invalid }, + /* 34 */ { 0, &Ia_Invalid }, + /* 35 */ { 0, &Ia_Invalid }, + /* 36 */ { 0, &Ia_Invalid }, + /* 37 */ { 0, &Ia_Invalid }, + /* 38 */ { 0, &Ia_Invalid }, + /* 39 */ { 0, &Ia_Invalid }, + /* 3A */ { 0, &Ia_Invalid }, + /* 3B */ { 0, &Ia_Invalid }, + /* 3C */ { 0, &Ia_Invalid }, + /* 3D */ { 0, &Ia_Invalid }, + /* 3E */ { 0, &Ia_Invalid }, + /* 3F */ { 0, &Ia_Invalid }, + /* 40 */ { 0, &Ia_Invalid }, + /* 41 */ { 0, &Ia_Invalid }, + /* 42 */ { 0, &Ia_Invalid }, + /* 43 */ { 0, &Ia_Invalid }, + /* 44 */ { 0, &Ia_Invalid }, + /* 45 */ { 0, &Ia_Invalid }, + /* 46 */ { 0, &Ia_Invalid }, + /* 47 */ { 0, &Ia_Invalid }, + /* 48 */ { 0, &Ia_Invalid }, + /* 49 */ { 0, &Ia_Invalid }, + /* 4A */ { 0, &Ia_Invalid }, + /* 4B */ { 0, &Ia_Invalid }, + /* 4C */ { 0, &Ia_Invalid }, + /* 4D */ { 0, &Ia_Invalid }, + /* 4E */ { 0, &Ia_Invalid }, + /* 4F */ { 0, &Ia_Invalid }, + /* 50 */ { 0, &Ia_Invalid }, + /* 51 */ { 0, &Ia_Invalid }, + /* 52 */ { 0, &Ia_Invalid }, + /* 53 */ { 0, &Ia_Invalid }, + /* 54 */ { 0, &Ia_Invalid }, + /* 55 */ { 0, &Ia_Invalid }, + /* 56 */ { 0, &Ia_Invalid }, + /* 57 */ { 0, &Ia_Invalid }, + /* 58 */ { 0, &Ia_Invalid }, + /* 59 */ { 0, &Ia_Invalid }, + /* 5A */ { 0, &Ia_Invalid }, + /* 5B */ { 0, &Ia_Invalid }, + /* 5C */ { 0, &Ia_Invalid }, + /* 5D */ { 0, &Ia_Invalid }, + /* 5E */ { 0, &Ia_Invalid }, + /* 5F */ { 0, &Ia_Invalid }, + /* 60 */ { 0, &Ia_Invalid }, + /* 61 */ { 0, &Ia_Invalid }, + /* 62 */ { 0, &Ia_Invalid }, + /* 63 */ { 0, &Ia_Invalid }, + /* 64 */ { 0, &Ia_Invalid }, + /* 65 */ { 0, &Ia_Invalid }, + /* 66 */ { 0, &Ia_Invalid }, + /* 67 */ { 0, &Ia_Invalid }, + /* 68 */ { 0, &Ia_Invalid }, + /* 69 */ { 0, &Ia_Invalid }, + /* 6A */ { 0, &Ia_Invalid }, + /* 6B */ { 0, &Ia_Invalid }, + /* 6C */ { 0, &Ia_Invalid }, + /* 6D */ { 0, &Ia_Invalid }, + /* 6E */ { 0, &Ia_Invalid }, + /* 6F */ { 0, &Ia_Invalid }, + /* 70 */ { 0, &Ia_Invalid }, + /* 71 */ { 0, &Ia_Invalid }, + /* 72 */ { 0, &Ia_Invalid }, + /* 73 */ { 0, &Ia_Invalid }, + /* 74 */ { 0, &Ia_Invalid }, + /* 75 */ { 0, &Ia_Invalid }, + /* 76 */ { 0, &Ia_Invalid }, + /* 77 */ { 0, &Ia_Invalid }, + /* 78 */ { 0, &Ia_Invalid }, + /* 79 */ { 0, &Ia_Invalid }, + /* 7A */ { 0, &Ia_Invalid }, + /* 7B */ { 0, &Ia_Invalid }, + /* 7C */ { 0, &Ia_Invalid }, + /* 7D */ { 0, &Ia_Invalid }, + /* 7E */ { 0, &Ia_Invalid }, + /* 7F */ { 0, &Ia_Invalid }, + /* 80 */ { 0, &Ia_Invalid }, + /* 81 */ { 0, &Ia_Invalid }, + /* 82 */ { 0, &Ia_Invalid }, + /* 83 */ { 0, &Ia_Invalid }, + /* 84 */ { 0, &Ia_Invalid }, + /* 85 */ { 0, &Ia_Invalid }, + /* 86 */ { 0, &Ia_Invalid }, + /* 87 */ { 0, &Ia_Invalid }, + /* 88 */ { 0, &Ia_Invalid }, + /* 89 */ { 0, &Ia_Invalid }, + /* 8A */ { 0, &Ia_pfnacc_Pq_Qq }, + /* 8B */ { 0, &Ia_Invalid }, + /* 8C */ { 0, &Ia_Invalid }, + /* 8D */ { 0, &Ia_Invalid }, + /* 8E */ { 0, &Ia_pfpnacc_Pq_Qq }, + /* 8F */ { 0, &Ia_Invalid }, + /* 90 */ { 0, &Ia_pfcmpge_Pq_Qq }, + /* 91 */ { 0, &Ia_Invalid }, + /* 92 */ { 0, &Ia_Invalid }, + /* 93 */ { 0, &Ia_Invalid }, + /* 94 */ { 0, &Ia_pfmin_Pq_Qq }, + /* 95 */ { 0, &Ia_Invalid }, + /* 96 */ { 0, &Ia_pfrcp_Pq_Qq }, + /* 97 */ { 0, &Ia_pfrsqrt_Pq_Qq }, + /* 98 */ { 0, &Ia_Invalid }, + /* 99 */ { 0, &Ia_Invalid }, + /* 9A */ { 0, &Ia_pfsub_Pq_Qq }, + /* 9B */ { 0, &Ia_Invalid }, + /* 9C */ { 0, &Ia_Invalid }, + /* 9D */ { 0, &Ia_Invalid }, + /* 9E */ { 0, &Ia_pfadd_Pq_Qq }, + /* 9F */ { 0, &Ia_Invalid }, + /* A0 */ { 0, &Ia_pfcmpgt_Pq_Qq }, + /* A1 */ { 0, &Ia_Invalid }, + /* A2 */ { 0, &Ia_Invalid }, + /* A3 */ { 0, &Ia_Invalid }, + /* A4 */ { 0, &Ia_pfmax_Pq_Qq }, + /* A5 */ { 0, &Ia_Invalid }, + /* A6 */ { 0, &Ia_pfrcpit1_Pq_Qq }, + /* A7 */ { 0, &Ia_pfrsqit1_Pq_Qq }, + /* A8 */ { 0, &Ia_Invalid }, + /* A9 */ { 0, &Ia_Invalid }, + /* AA */ { 0, &Ia_pfsubr_Pq_Qq }, + /* AB */ { 0, &Ia_Invalid }, + /* AC */ { 0, &Ia_Invalid }, + /* AD */ { 0, &Ia_Invalid }, + /* AE */ { 0, &Ia_pfacc_Pq_Qq }, + /* AF */ { 0, &Ia_Invalid }, + /* B0 */ { 0, &Ia_pfcmpeq_Pq_Qq }, + /* B1 */ { 0, &Ia_Invalid }, + /* B2 */ { 0, &Ia_Invalid }, + /* B3 */ { 0, &Ia_Invalid }, + /* B4 */ { 0, &Ia_pfmul_Pq_Qq }, + /* B5 */ { 0, &Ia_Invalid }, + /* B6 */ { 0, &Ia_pfrcpit2_Pq_Qq }, + /* B7 */ { 0, &Ia_pmulhrw_Pq_Qq }, + /* B8 */ { 0, &Ia_Invalid }, + /* B9 */ { 0, &Ia_Invalid }, + /* BA */ { 0, &Ia_Invalid }, + /* BB */ { 0, &Ia_pswapd_Pq_Qq }, + /* BC */ { 0, &Ia_Invalid }, + /* BD */ { 0, &Ia_Invalid }, + /* BE */ { 0, &Ia_Invalid }, + /* BF */ { 0, &Ia_pavgb_Pq_Qq }, + /* C0 */ { 0, &Ia_Invalid }, + /* C1 */ { 0, &Ia_Invalid }, + /* C2 */ { 0, &Ia_Invalid }, + /* C3 */ { 0, &Ia_Invalid }, + /* C4 */ { 0, &Ia_Invalid }, + /* C5 */ { 0, &Ia_Invalid }, + /* C6 */ { 0, &Ia_Invalid }, + /* C7 */ { 0, &Ia_Invalid }, + /* C8 */ { 0, &Ia_Invalid }, + /* C9 */ { 0, &Ia_Invalid }, + /* CA */ { 0, &Ia_Invalid }, + /* CB */ { 0, &Ia_Invalid }, + /* CC */ { 0, &Ia_Invalid }, + /* CD */ { 0, &Ia_Invalid }, + /* CE */ { 0, &Ia_Invalid }, + /* CF */ { 0, &Ia_Invalid }, + /* D0 */ { 0, &Ia_Invalid }, + /* D1 */ { 0, &Ia_Invalid }, + /* D2 */ { 0, &Ia_Invalid }, + /* D3 */ { 0, &Ia_Invalid }, + /* D4 */ { 0, &Ia_Invalid }, + /* D5 */ { 0, &Ia_Invalid }, + /* D6 */ { 0, &Ia_Invalid }, + /* D7 */ { 0, &Ia_Invalid }, + /* D8 */ { 0, &Ia_Invalid }, + /* D9 */ { 0, &Ia_Invalid }, + /* DA */ { 0, &Ia_Invalid }, + /* DB */ { 0, &Ia_Invalid }, + /* DC */ { 0, &Ia_Invalid }, + /* DD */ { 0, &Ia_Invalid }, + /* DE */ { 0, &Ia_Invalid }, + /* DF */ { 0, &Ia_Invalid }, + /* E0 */ { 0, &Ia_Invalid }, + /* E1 */ { 0, &Ia_Invalid }, + /* E2 */ { 0, &Ia_Invalid }, + /* E3 */ { 0, &Ia_Invalid }, + /* E4 */ { 0, &Ia_Invalid }, + /* E5 */ { 0, &Ia_Invalid }, + /* E6 */ { 0, &Ia_Invalid }, + /* E7 */ { 0, &Ia_Invalid }, + /* E8 */ { 0, &Ia_Invalid }, + /* E9 */ { 0, &Ia_Invalid }, + /* EA */ { 0, &Ia_Invalid }, + /* EB */ { 0, &Ia_Invalid }, + /* EC */ { 0, &Ia_Invalid }, + /* ED */ { 0, &Ia_Invalid }, + /* EE */ { 0, &Ia_Invalid }, + /* EF */ { 0, &Ia_Invalid }, + /* F0 */ { 0, &Ia_Invalid }, + /* F1 */ { 0, &Ia_Invalid }, + /* F2 */ { 0, &Ia_Invalid }, + /* F3 */ { 0, &Ia_Invalid }, + /* F4 */ { 0, &Ia_Invalid }, + /* F5 */ { 0, &Ia_Invalid }, + /* F6 */ { 0, &Ia_Invalid }, + /* F7 */ { 0, &Ia_Invalid }, + /* F8 */ { 0, &Ia_Invalid }, + /* F9 */ { 0, &Ia_Invalid }, + /* FA */ { 0, &Ia_Invalid }, + /* FB */ { 0, &Ia_Invalid }, + /* FC */ { 0, &Ia_Invalid }, + /* FD */ { 0, &Ia_Invalid }, + /* FE */ { 0, &Ia_Invalid }, + /* FF */ { 0, &Ia_Invalid } +}; + +/* ************************************************************************ */ +/* FPU Opcodes */ + +// floating point instructions when mod!=11b. +// the following tables will be accessed like groups using the nnn (reg) field of +// the modrm byte. (the first byte is D8-DF) + + // D8 (modrm is outside 00h - BFh) (mod != 11) +static BxDisasmOpcodeTable_t BxDisasmFPGroupD8[8] = { + /* 0 */ { 0, &Ia_fadds_Md }, + /* 1 */ { 0, &Ia_fmuls_Md }, + /* 2 */ { 0, &Ia_fcoms_Md }, + /* 3 */ { 0, &Ia_fcomps_Md }, + /* 4 */ { 0, &Ia_fsubs_Md }, + /* 5 */ { 0, &Ia_fsubrs_Md }, + /* 6 */ { 0, &Ia_fdivs_Md }, + /* 7 */ { 0, &Ia_fdivrs_Md } +}; + + // D9 (modrm is outside 00h - BFh) (mod != 11) +static BxDisasmOpcodeTable_t BxDisasmFPGroupD9[8] = { + /* 0 */ { 0, &Ia_flds_Md }, + /* 1 */ { 0, &Ia_Invalid }, + /* 2 */ { 0, &Ia_fsts_Md }, + /* 3 */ { 0, &Ia_fstps_Md }, + /* 4 */ { 0, &Ia_fldenv }, + /* 5 */ { 0, &Ia_fldcw }, + /* 6 */ { 0, &Ia_fnstenv }, + /* 7 */ { 0, &Ia_fnstcw } +}; + + // DA (modrm is outside 00h - BFh) (mod != 11) +static BxDisasmOpcodeTable_t BxDisasmFPGroupDA[8] = { + /* 0 */ { 0, &Ia_fiaddl_Md }, + /* 1 */ { 0, &Ia_fimull_Md }, + /* 2 */ { 0, &Ia_ficoml_Md }, + /* 3 */ { 0, &Ia_ficompl_Md }, + /* 4 */ { 0, &Ia_fisubl_Md }, + /* 5 */ { 0, &Ia_fisubrl_Md }, + /* 6 */ { 0, &Ia_fidivl_Md }, + /* 7 */ { 0, &Ia_fidivrl_Md } +}; + + // DB (modrm is outside 00h - BFh) (mod != 11) +static BxDisasmOpcodeTable_t BxDisasmFPGroupDB[8] = { + /* 0 */ { 0, &Ia_fildl_Md }, + /* 1 */ { 0, &Ia_fisttpl_Md }, + /* 2 */ { 0, &Ia_fistl_Md }, + /* 3 */ { 0, &Ia_fistpl_Md }, + /* 4 */ { 0, &Ia_Invalid }, + /* 5 */ { 0, &Ia_fldt_Mt }, + /* 6 */ { 0, &Ia_Invalid }, + /* 7 */ { 0, &Ia_fstpt_Mt } +}; + + // DC (modrm is outside 00h - BFh) (mod != 11) +static BxDisasmOpcodeTable_t BxDisasmFPGroupDC[8] = { + /* 0 */ { 0, &Ia_faddl_Mq }, + /* 1 */ { 0, &Ia_fmull_Mq }, + /* 2 */ { 0, &Ia_fcoml_Mq }, + /* 3 */ { 0, &Ia_fcompl_Mq }, + /* 4 */ { 0, &Ia_fsubl_Mq }, + /* 5 */ { 0, &Ia_fsubrl_Mq }, + /* 6 */ { 0, &Ia_fdivl_Mq }, + /* 7 */ { 0, &Ia_fdivrl_Mq } +}; + + // DD (modrm is outside 00h - BFh) (mod != 11) +static BxDisasmOpcodeTable_t BxDisasmFPGroupDD[8] = { + /* 0 */ { 0, &Ia_fldl_Mq }, + /* 1 */ { 0, &Ia_fisttpq_Mq }, + /* 2 */ { 0, &Ia_fstl_Mq }, + /* 3 */ { 0, &Ia_fstpl_Mq }, + /* 4 */ { 0, &Ia_frstor }, + /* 5 */ { 0, &Ia_Invalid }, + /* 6 */ { 0, &Ia_fnsave }, + /* 7 */ { 0, &Ia_fnstsw } +}; + + // DE (modrm is outside 00h - BFh) (mod != 11) +static BxDisasmOpcodeTable_t BxDisasmFPGroupDE[8] = { + /* 0 */ { 0, &Ia_fiadds_Mw }, + /* 1 */ { 0, &Ia_fimuls_Mw }, + /* 2 */ { 0, &Ia_ficoms_Mw }, + /* 3 */ { 0, &Ia_ficomps_Mw }, + /* 4 */ { 0, &Ia_fisubs_Mw }, + /* 5 */ { 0, &Ia_fisubrs_Mw }, + /* 6 */ { 0, &Ia_fidivs_Mw }, + /* 7 */ { 0, &Ia_fidivrs_Mw } +}; + + // DF (modrm is outside 00h - BFh) (mod != 11) +static BxDisasmOpcodeTable_t BxDisasmFPGroupDF[8] = { + /* 0 */ { 0, &Ia_filds_Mw }, + /* 1 */ { 0, &Ia_fisttps_Mw }, + /* 2 */ { 0, &Ia_fists_Mw }, + /* 3 */ { 0, &Ia_fistps_Mw }, + /* 4 */ { 0, &Ia_fbldt_Mt }, + /* 5 */ { 0, &Ia_fildq_Mq }, + /* 6 */ { 0, &Ia_fbstpt_Mt }, + /* 7 */ { 0, &Ia_fistpq_Mq } +}; + +// 512 entries for second byte of floating point instructions. (when mod==11b) +static BxDisasmOpcodeTable_t BxDisasmOpcodeInfoFP[512] = { + // D8 (modrm is outside 00h - BFh) (mod == 11) + /* D8 C0 */ { 0, &Ia_fadd_ST0_STi }, + /* D8 C1 */ { 0, &Ia_fadd_ST0_STi }, + /* D8 C2 */ { 0, &Ia_fadd_ST0_STi }, + /* D8 C3 */ { 0, &Ia_fadd_ST0_STi }, + /* D8 C4 */ { 0, &Ia_fadd_ST0_STi }, + /* D8 C5 */ { 0, &Ia_fadd_ST0_STi }, + /* D8 C6 */ { 0, &Ia_fadd_ST0_STi }, + /* D8 C7 */ { 0, &Ia_fadd_ST0_STi }, + /* D8 C8 */ { 0, &Ia_fmul_ST0_STi }, + /* D8 C9 */ { 0, &Ia_fmul_ST0_STi }, + /* D8 CA */ { 0, &Ia_fmul_ST0_STi }, + /* D8 CB */ { 0, &Ia_fmul_ST0_STi }, + /* D8 CC */ { 0, &Ia_fmul_ST0_STi }, + /* D8 CD */ { 0, &Ia_fmul_ST0_STi }, + /* D8 CE */ { 0, &Ia_fmul_ST0_STi }, + /* D8 CF */ { 0, &Ia_fmul_ST0_STi }, + /* D8 D0 */ { 0, &Ia_fcom_STi }, + /* D8 D1 */ { 0, &Ia_fcom_STi }, + /* D8 D2 */ { 0, &Ia_fcom_STi }, + /* D8 D3 */ { 0, &Ia_fcom_STi }, + /* D8 D4 */ { 0, &Ia_fcom_STi }, + /* D8 D5 */ { 0, &Ia_fcom_STi }, + /* D8 D6 */ { 0, &Ia_fcom_STi }, + /* D8 D7 */ { 0, &Ia_fcom_STi }, + /* D8 D8 */ { 0, &Ia_fcomp_STi }, + /* D8 D9 */ { 0, &Ia_fcomp_STi }, + /* D8 DA */ { 0, &Ia_fcomp_STi }, + /* D8 DB */ { 0, &Ia_fcomp_STi }, + /* D8 DC */ { 0, &Ia_fcomp_STi }, + /* D8 DD */ { 0, &Ia_fcomp_STi }, + /* D8 DE */ { 0, &Ia_fcomp_STi }, + /* D8 DF */ { 0, &Ia_fcomp_STi }, + /* D8 E0 */ { 0, &Ia_fsub_ST0_STi }, + /* D8 E1 */ { 0, &Ia_fsub_ST0_STi }, + /* D8 E2 */ { 0, &Ia_fsub_ST0_STi }, + /* D8 E3 */ { 0, &Ia_fsub_ST0_STi }, + /* D8 E4 */ { 0, &Ia_fsub_ST0_STi }, + /* D8 E5 */ { 0, &Ia_fsub_ST0_STi }, + /* D8 E6 */ { 0, &Ia_fsub_ST0_STi }, + /* D8 E7 */ { 0, &Ia_fsub_ST0_STi }, + /* D8 E8 */ { 0, &Ia_fsubr_ST0_STi }, + /* D8 E9 */ { 0, &Ia_fsubr_ST0_STi }, + /* D8 EA */ { 0, &Ia_fsubr_ST0_STi }, + /* D8 EB */ { 0, &Ia_fsubr_ST0_STi }, + /* D8 EC */ { 0, &Ia_fsubr_ST0_STi }, + /* D8 ED */ { 0, &Ia_fsubr_ST0_STi }, + /* D8 EE */ { 0, &Ia_fsubr_ST0_STi }, + /* D8 EF */ { 0, &Ia_fsubr_ST0_STi }, + /* D8 F0 */ { 0, &Ia_fdiv_ST0_STi }, + /* D8 F1 */ { 0, &Ia_fdiv_ST0_STi }, + /* D8 F2 */ { 0, &Ia_fdiv_ST0_STi }, + /* D8 F3 */ { 0, &Ia_fdiv_ST0_STi }, + /* D8 F4 */ { 0, &Ia_fdiv_ST0_STi }, + /* D8 F5 */ { 0, &Ia_fdiv_ST0_STi }, + /* D8 F6 */ { 0, &Ia_fdiv_ST0_STi }, + /* D8 F7 */ { 0, &Ia_fdiv_ST0_STi }, + /* D8 F8 */ { 0, &Ia_fdivr_ST0_STi }, + /* D8 F9 */ { 0, &Ia_fdivr_ST0_STi }, + /* D8 FA */ { 0, &Ia_fdivr_ST0_STi }, + /* D8 FB */ { 0, &Ia_fdivr_ST0_STi }, + /* D8 FC */ { 0, &Ia_fdivr_ST0_STi }, + /* D8 FD */ { 0, &Ia_fdivr_ST0_STi }, + /* D8 FE */ { 0, &Ia_fdivr_ST0_STi }, + /* D8 FF */ { 0, &Ia_fdivr_ST0_STi }, + + // D9 (modrm is outside 00h - BFh) (mod == 11) + /* D9 C0 */ { 0, &Ia_fld_STi }, + /* D9 C1 */ { 0, &Ia_fld_STi }, + /* D9 C2 */ { 0, &Ia_fld_STi }, + /* D9 C3 */ { 0, &Ia_fld_STi }, + /* D9 C4 */ { 0, &Ia_fld_STi }, + /* D9 C5 */ { 0, &Ia_fld_STi }, + /* D9 C6 */ { 0, &Ia_fld_STi }, + /* D9 C7 */ { 0, &Ia_fld_STi }, + /* D9 C8 */ { 0, &Ia_fxch }, + /* D9 C9 */ { 0, &Ia_fxch }, + /* D9 CA */ { 0, &Ia_fxch }, + /* D9 CB */ { 0, &Ia_fxch }, + /* D9 CC */ { 0, &Ia_fxch }, + /* D9 CD */ { 0, &Ia_fxch }, + /* D9 CE */ { 0, &Ia_fxch }, + /* D9 CF */ { 0, &Ia_fxch }, + /* D9 D0 */ { 0, &Ia_fnop }, + /* D9 D1 */ { 0, &Ia_Invalid }, + /* D9 D2 */ { 0, &Ia_Invalid }, + /* D9 D3 */ { 0, &Ia_Invalid }, + /* D9 D4 */ { 0, &Ia_Invalid }, + /* D9 D5 */ { 0, &Ia_Invalid }, + /* D9 D6 */ { 0, &Ia_Invalid }, + /* D9 D7 */ { 0, &Ia_Invalid }, + /* D9 D8 */ { 0, &Ia_fstp_STi }, // undocumented + /* D9 D9 */ { 0, &Ia_fstp_STi }, // undocumented + /* D9 DA */ { 0, &Ia_fstp_STi }, // undocumented + /* D9 DB */ { 0, &Ia_fstp_STi }, // undocumented + /* D9 DC */ { 0, &Ia_fstp_STi }, // undocumented + /* D9 DD */ { 0, &Ia_fstp_STi }, // undocumented + /* D9 DE */ { 0, &Ia_fstp_STi }, // undocumented + /* D9 DF */ { 0, &Ia_fstp_STi }, // undocumented + /* D9 E0 */ { 0, &Ia_fchs }, + /* D9 E1 */ { 0, &Ia_fabs }, + /* D9 E2 */ { 0, &Ia_Invalid }, + /* D9 E3 */ { 0, &Ia_Invalid }, + /* D9 E4 */ { 0, &Ia_ftst }, + /* D9 E5 */ { 0, &Ia_fxam }, + /* D9 E6 */ { 0, &Ia_Invalid }, + /* D9 E7 */ { 0, &Ia_Invalid }, + /* D9 E8 */ { 0, &Ia_fld1 }, + /* D9 E9 */ { 0, &Ia_fldl2t }, + /* D9 EA */ { 0, &Ia_fldl2e }, + /* D9 EB */ { 0, &Ia_fldpi }, + /* D9 EC */ { 0, &Ia_fldlg2 }, + /* D9 ED */ { 0, &Ia_fldln2 }, + /* D9 EE */ { 0, &Ia_fldz }, + /* D9 EF */ { 0, &Ia_Invalid }, + /* D9 F0 */ { 0, &Ia_f2xm1 }, + /* D9 F1 */ { 0, &Ia_fyl2x }, + /* D9 F2 */ { 0, &Ia_fptan }, + /* D9 F3 */ { 0, &Ia_fpatan }, + /* D9 F4 */ { 0, &Ia_fxtract }, + /* D9 F5 */ { 0, &Ia_fprem1 }, + /* D9 F6 */ { 0, &Ia_fdecstp }, + /* D9 F7 */ { 0, &Ia_fincstp }, + /* D9 F8 */ { 0, &Ia_fprem }, + /* D9 F9 */ { 0, &Ia_fyl2xp1 }, + /* D9 FA */ { 0, &Ia_fsqrt }, + /* D9 FB */ { 0, &Ia_fsincos }, + /* D9 FC */ { 0, &Ia_frndint }, + /* D9 FD */ { 0, &Ia_fscale }, + /* D9 FE */ { 0, &Ia_fsin }, + /* D9 FF */ { 0, &Ia_fcos }, + + // DA (modrm is outside 00h - BFh) (mod == 11) + /* DA C0 */ { 0, &Ia_fcmovb_ST0_STi }, + /* DA C1 */ { 0, &Ia_fcmovb_ST0_STi }, + /* DA C2 */ { 0, &Ia_fcmovb_ST0_STi }, + /* DA C3 */ { 0, &Ia_fcmovb_ST0_STi }, + /* DA C4 */ { 0, &Ia_fcmovb_ST0_STi }, + /* DA C5 */ { 0, &Ia_fcmovb_ST0_STi }, + /* DA C6 */ { 0, &Ia_fcmovb_ST0_STi }, + /* DA C7 */ { 0, &Ia_fcmovb_ST0_STi }, + /* DA C8 */ { 0, &Ia_fcmove_ST0_STi }, + /* DA C9 */ { 0, &Ia_fcmove_ST0_STi }, + /* DA CA */ { 0, &Ia_fcmove_ST0_STi }, + /* DA CB */ { 0, &Ia_fcmove_ST0_STi }, + /* DA CC */ { 0, &Ia_fcmove_ST0_STi }, + /* DA CD */ { 0, &Ia_fcmove_ST0_STi }, + /* DA CE */ { 0, &Ia_fcmove_ST0_STi }, + /* DA CF */ { 0, &Ia_fcmove_ST0_STi }, + /* DA D0 */ { 0, &Ia_fcmovbe_ST0_STi }, + /* DA D1 */ { 0, &Ia_fcmovbe_ST0_STi }, + /* DA D2 */ { 0, &Ia_fcmovbe_ST0_STi }, + /* DA D3 */ { 0, &Ia_fcmovbe_ST0_STi }, + /* DA D4 */ { 0, &Ia_fcmovbe_ST0_STi }, + /* DA D5 */ { 0, &Ia_fcmovbe_ST0_STi }, + /* DA D6 */ { 0, &Ia_fcmovbe_ST0_STi }, + /* DA D7 */ { 0, &Ia_fcmovbe_ST0_STi }, + /* DA D8 */ { 0, &Ia_fcmovu_ST0_STi }, + /* DA D9 */ { 0, &Ia_fcmovu_ST0_STi }, + /* DA DA */ { 0, &Ia_fcmovu_ST0_STi }, + /* DA DB */ { 0, &Ia_fcmovu_ST0_STi }, + /* DA DC */ { 0, &Ia_fcmovu_ST0_STi }, + /* DA DD */ { 0, &Ia_fcmovu_ST0_STi }, + /* DA DE */ { 0, &Ia_fcmovu_ST0_STi }, + /* DA DF */ { 0, &Ia_fcmovu_ST0_STi }, + /* DA E0 */ { 0, &Ia_Invalid }, + /* DA E1 */ { 0, &Ia_Invalid }, + /* DA E2 */ { 0, &Ia_Invalid }, + /* DA E3 */ { 0, &Ia_Invalid }, + /* DA E4 */ { 0, &Ia_Invalid }, + /* DA E5 */ { 0, &Ia_Invalid }, + /* DA E6 */ { 0, &Ia_Invalid }, + /* DA E7 */ { 0, &Ia_Invalid }, + /* DA E8 */ { 0, &Ia_Invalid }, + /* DA E9 */ { 0, &Ia_fucompp }, + /* DA EA */ { 0, &Ia_Invalid }, + /* DA EB */ { 0, &Ia_Invalid }, + /* DA EC */ { 0, &Ia_Invalid }, + /* DA ED */ { 0, &Ia_Invalid }, + /* DA EE */ { 0, &Ia_Invalid }, + /* DA EF */ { 0, &Ia_Invalid }, + /* DA F0 */ { 0, &Ia_Invalid }, + /* DA F1 */ { 0, &Ia_Invalid }, + /* DA F2 */ { 0, &Ia_Invalid }, + /* DA F3 */ { 0, &Ia_Invalid }, + /* DA F4 */ { 0, &Ia_Invalid }, + /* DA F5 */ { 0, &Ia_Invalid }, + /* DA F6 */ { 0, &Ia_Invalid }, + /* DA F7 */ { 0, &Ia_Invalid }, + /* DA F8 */ { 0, &Ia_Invalid }, + /* DA F9 */ { 0, &Ia_Invalid }, + /* DA FA */ { 0, &Ia_Invalid }, + /* DA FB */ { 0, &Ia_Invalid }, + /* DA FC */ { 0, &Ia_Invalid }, + /* DA FD */ { 0, &Ia_Invalid }, + /* DA FE */ { 0, &Ia_Invalid }, + /* DA FF */ { 0, &Ia_Invalid }, + + // DB (modrm is outside 00h - BFh) (mod == 11) + /* DB C0 */ { 0, &Ia_fcmovnb_ST0_STi }, + /* DB C1 */ { 0, &Ia_fcmovnb_ST0_STi }, + /* DB C2 */ { 0, &Ia_fcmovnb_ST0_STi }, + /* DB C3 */ { 0, &Ia_fcmovnb_ST0_STi }, + /* DB C4 */ { 0, &Ia_fcmovnb_ST0_STi }, + /* DB C5 */ { 0, &Ia_fcmovnb_ST0_STi }, + /* DB C6 */ { 0, &Ia_fcmovnb_ST0_STi }, + /* DB C7 */ { 0, &Ia_fcmovnb_ST0_STi }, + /* DB C8 */ { 0, &Ia_fcmovne_ST0_STi }, + /* DB C9 */ { 0, &Ia_fcmovne_ST0_STi }, + /* DB CA */ { 0, &Ia_fcmovne_ST0_STi }, + /* DB CB */ { 0, &Ia_fcmovne_ST0_STi }, + /* DB CC */ { 0, &Ia_fcmovne_ST0_STi }, + /* DB CD */ { 0, &Ia_fcmovne_ST0_STi }, + /* DB CE */ { 0, &Ia_fcmovne_ST0_STi }, + /* DB CF */ { 0, &Ia_fcmovne_ST0_STi }, + /* DB D0 */ { 0, &Ia_fcmovnbe_ST0_STi }, + /* DB D1 */ { 0, &Ia_fcmovnbe_ST0_STi }, + /* DB D2 */ { 0, &Ia_fcmovnbe_ST0_STi }, + /* DB D3 */ { 0, &Ia_fcmovnbe_ST0_STi }, + /* DB D4 */ { 0, &Ia_fcmovnbe_ST0_STi }, + /* DB D5 */ { 0, &Ia_fcmovnbe_ST0_STi }, + /* DB D6 */ { 0, &Ia_fcmovnbe_ST0_STi }, + /* DB D7 */ { 0, &Ia_fcmovnbe_ST0_STi }, + /* DB D8 */ { 0, &Ia_fcmovnu_ST0_STi }, + /* DB D9 */ { 0, &Ia_fcmovnu_ST0_STi }, + /* DB DA */ { 0, &Ia_fcmovnu_ST0_STi }, + /* DB DB */ { 0, &Ia_fcmovnu_ST0_STi }, + /* DB DC */ { 0, &Ia_fcmovnu_ST0_STi }, + /* DB DD */ { 0, &Ia_fcmovnu_ST0_STi }, + /* DB DE */ { 0, &Ia_fcmovnu_ST0_STi }, + /* DB DF */ { 0, &Ia_fcmovnu_ST0_STi }, + /* DB E0 */ { 0, &Ia_feni }, + /* DB E1 */ { 0, &Ia_fdisi }, + /* DB E2 */ { 0, &Ia_fnclex }, + /* DB E3 */ { 0, &Ia_fninit }, + /* DB E4 */ { 0, &Ia_fsetpm }, + /* DB E5 */ { 0, &Ia_Invalid }, + /* DB E6 */ { 0, &Ia_Invalid }, + /* DB E7 */ { 0, &Ia_Invalid }, + /* DB E8 */ { 0, &Ia_fucomi_ST0_STi }, + /* DB E9 */ { 0, &Ia_fucomi_ST0_STi }, + /* DB EA */ { 0, &Ia_fucomi_ST0_STi }, + /* DB EB */ { 0, &Ia_fucomi_ST0_STi }, + /* DB EC */ { 0, &Ia_fucomi_ST0_STi }, + /* DB ED */ { 0, &Ia_fucomi_ST0_STi }, + /* DB EE */ { 0, &Ia_fucomi_ST0_STi }, + /* DB EF */ { 0, &Ia_fucomi_ST0_STi }, + /* DB F0 */ { 0, &Ia_fcomi_ST0_STi }, + /* DB F1 */ { 0, &Ia_fcomi_ST0_STi }, + /* DB F2 */ { 0, &Ia_fcomi_ST0_STi }, + /* DB F3 */ { 0, &Ia_fcomi_ST0_STi }, + /* DB F4 */ { 0, &Ia_fcomi_ST0_STi }, + /* DB F5 */ { 0, &Ia_fcomi_ST0_STi }, + /* DB F6 */ { 0, &Ia_fcomi_ST0_STi }, + /* DB F7 */ { 0, &Ia_fcomi_ST0_STi }, + /* DB F8 */ { 0, &Ia_Invalid }, + /* DB F9 */ { 0, &Ia_Invalid }, + /* DB FA */ { 0, &Ia_Invalid }, + /* DB FB */ { 0, &Ia_Invalid }, + /* DB FC */ { 0, &Ia_Invalid }, + /* DB FD */ { 0, &Ia_Invalid }, + /* DB FE */ { 0, &Ia_Invalid }, + /* DB FF */ { 0, &Ia_Invalid }, + + // DC (modrm is outside 00h - BFh) (mod == 11) + /* DC C0 */ { 0, &Ia_fadd_STi_ST0 }, + /* DC C1 */ { 0, &Ia_fadd_STi_ST0 }, + /* DC C2 */ { 0, &Ia_fadd_STi_ST0 }, + /* DC C3 */ { 0, &Ia_fadd_STi_ST0 }, + /* DC C4 */ { 0, &Ia_fadd_STi_ST0 }, + /* DC C5 */ { 0, &Ia_fadd_STi_ST0 }, + /* DC C6 */ { 0, &Ia_fadd_STi_ST0 }, + /* DC C7 */ { 0, &Ia_fadd_STi_ST0 }, + /* DC C8 */ { 0, &Ia_fmul_STi_ST0 }, + /* DC C9 */ { 0, &Ia_fmul_STi_ST0 }, + /* DC CA */ { 0, &Ia_fmul_STi_ST0 }, + /* DC CB */ { 0, &Ia_fmul_STi_ST0 }, + /* DC CC */ { 0, &Ia_fmul_STi_ST0 }, + /* DC CD */ { 0, &Ia_fmul_STi_ST0 }, + /* DC CE */ { 0, &Ia_fmul_STi_ST0 }, + /* DC CF */ { 0, &Ia_fmul_STi_ST0 }, + /* DC D0 */ { 0, &Ia_fcom_STi }, // undocumented + /* DC D1 */ { 0, &Ia_fcom_STi }, // undocumented + /* DC D2 */ { 0, &Ia_fcom_STi }, // undocumented + /* DC D3 */ { 0, &Ia_fcom_STi }, // undocumented + /* DC D4 */ { 0, &Ia_fcom_STi }, // undocumented + /* DC D5 */ { 0, &Ia_fcom_STi }, // undocumented + /* DC D6 */ { 0, &Ia_fcom_STi }, // undocumented + /* DC D7 */ { 0, &Ia_fcom_STi }, // undocumented + /* DC D8 */ { 0, &Ia_fcomp_STi }, // undocumented + /* DC D9 */ { 0, &Ia_fcomp_STi }, // undocumented + /* DC DA */ { 0, &Ia_fcomp_STi }, // undocumented + /* DC DB */ { 0, &Ia_fcomp_STi }, // undocumented + /* DC DC */ { 0, &Ia_fcomp_STi }, // undocumented + /* DC DD */ { 0, &Ia_fcomp_STi }, // undocumented + /* DC DE */ { 0, &Ia_fcomp_STi }, // undocumented + /* DC DF */ { 0, &Ia_fcomp_STi }, // undocumented + /* DC E0 */ { 0, &Ia_fsubr_STi_ST0 }, + /* DC E1 */ { 0, &Ia_fsubr_STi_ST0 }, + /* DC E2 */ { 0, &Ia_fsubr_STi_ST0 }, + /* DC E3 */ { 0, &Ia_fsubr_STi_ST0 }, + /* DC E4 */ { 0, &Ia_fsubr_STi_ST0 }, + /* DC E5 */ { 0, &Ia_fsubr_STi_ST0 }, + /* DC E6 */ { 0, &Ia_fsubr_STi_ST0 }, + /* DC E7 */ { 0, &Ia_fsubr_STi_ST0 }, + /* DC E8 */ { 0, &Ia_fsub_STi_ST0 }, + /* DC E9 */ { 0, &Ia_fsub_STi_ST0 }, + /* DC EA */ { 0, &Ia_fsub_STi_ST0 }, + /* DC EB */ { 0, &Ia_fsub_STi_ST0 }, + /* DC EC */ { 0, &Ia_fsub_STi_ST0 }, + /* DC ED */ { 0, &Ia_fsub_STi_ST0 }, + /* DC EE */ { 0, &Ia_fsub_STi_ST0 }, + /* DC EF */ { 0, &Ia_fsub_STi_ST0 }, + /* DC F0 */ { 0, &Ia_fdivr_STi_ST0 }, + /* DC F1 */ { 0, &Ia_fdivr_STi_ST0 }, + /* DC F2 */ { 0, &Ia_fdivr_STi_ST0 }, + /* DC F3 */ { 0, &Ia_fdivr_STi_ST0 }, + /* DC F4 */ { 0, &Ia_fdivr_STi_ST0 }, + /* DC F5 */ { 0, &Ia_fdivr_STi_ST0 }, + /* DC F6 */ { 0, &Ia_fdivr_STi_ST0 }, + /* DC F7 */ { 0, &Ia_fdivr_STi_ST0 }, + /* DC F8 */ { 0, &Ia_fdiv_STi_ST0 }, + /* DC F9 */ { 0, &Ia_fdiv_STi_ST0 }, + /* DC FA */ { 0, &Ia_fdiv_STi_ST0 }, + /* DC FB */ { 0, &Ia_fdiv_STi_ST0 }, + /* DC FC */ { 0, &Ia_fdiv_STi_ST0 }, + /* DC FD */ { 0, &Ia_fdiv_STi_ST0 }, + /* DC FE */ { 0, &Ia_fdiv_STi_ST0 }, + /* DC FF */ { 0, &Ia_fdiv_STi_ST0 }, + + // DD (modrm is outside 00h - BFh) (mod == 11) + /* DD C0 */ { 0, &Ia_ffree_STi }, + /* DD C1 */ { 0, &Ia_ffree_STi }, + /* DD C2 */ { 0, &Ia_ffree_STi }, + /* DD C3 */ { 0, &Ia_ffree_STi }, + /* DD C4 */ { 0, &Ia_ffree_STi }, + /* DD C5 */ { 0, &Ia_ffree_STi }, + /* DD C6 */ { 0, &Ia_ffree_STi }, + /* DD C7 */ { 0, &Ia_ffree_STi }, + /* DD C8 */ { 0, &Ia_fxch }, // undocumented + /* DD C9 */ { 0, &Ia_fxch }, // undocumented + /* DD CA */ { 0, &Ia_fxch }, // undocumented + /* DD CB */ { 0, &Ia_fxch }, // undocumented + /* DD CC */ { 0, &Ia_fxch }, // undocumented + /* DD CD */ { 0, &Ia_fxch }, // undocumented + /* DD CE */ { 0, &Ia_fxch }, // undocumented + /* DD CF */ { 0, &Ia_fxch }, // undocumented + /* DD D0 */ { 0, &Ia_fst_STi }, + /* DD D1 */ { 0, &Ia_fst_STi }, + /* DD D2 */ { 0, &Ia_fst_STi }, + /* DD D3 */ { 0, &Ia_fst_STi }, + /* DD D4 */ { 0, &Ia_fst_STi }, + /* DD D5 */ { 0, &Ia_fst_STi }, + /* DD D6 */ { 0, &Ia_fst_STi }, + /* DD D7 */ { 0, &Ia_fst_STi }, + /* DD D8 */ { 0, &Ia_fstp_STi }, + /* DD D9 */ { 0, &Ia_fstp_STi }, + /* DD DA */ { 0, &Ia_fstp_STi }, + /* DD DB */ { 0, &Ia_fstp_STi }, + /* DD DC */ { 0, &Ia_fstp_STi }, + /* DD DD */ { 0, &Ia_fstp_STi }, + /* DD DE */ { 0, &Ia_fstp_STi }, + /* DD DF */ { 0, &Ia_fstp_STi }, + /* DD E0 */ { 0, &Ia_fucom_STi }, + /* DD E1 */ { 0, &Ia_fucom_STi }, + /* DD E2 */ { 0, &Ia_fucom_STi }, + /* DD E3 */ { 0, &Ia_fucom_STi }, + /* DD E4 */ { 0, &Ia_fucom_STi }, + /* DD E5 */ { 0, &Ia_fucom_STi }, + /* DD E6 */ { 0, &Ia_fucom_STi }, + /* DD E7 */ { 0, &Ia_fucom_STi }, + /* DD E8 */ { 0, &Ia_fucomp_STi }, + /* DD E9 */ { 0, &Ia_fucomp_STi }, + /* DD EA */ { 0, &Ia_fucomp_STi }, + /* DD EB */ { 0, &Ia_fucomp_STi }, + /* DD EC */ { 0, &Ia_fucomp_STi }, + /* DD ED */ { 0, &Ia_fucomp_STi }, + /* DD EE */ { 0, &Ia_fucomp_STi }, + /* DD EF */ { 0, &Ia_fucomp_STi }, + /* DD F0 */ { 0, &Ia_Invalid }, + /* DD F1 */ { 0, &Ia_Invalid }, + /* DD F2 */ { 0, &Ia_Invalid }, + /* DD F3 */ { 0, &Ia_Invalid }, + /* DD F4 */ { 0, &Ia_Invalid }, + /* DD F5 */ { 0, &Ia_Invalid }, + /* DD F6 */ { 0, &Ia_Invalid }, + /* DD F7 */ { 0, &Ia_Invalid }, + /* DD F8 */ { 0, &Ia_Invalid }, + /* DD F9 */ { 0, &Ia_Invalid }, + /* DD FA */ { 0, &Ia_Invalid }, + /* DD FB */ { 0, &Ia_Invalid }, + /* DD FC */ { 0, &Ia_Invalid }, + /* DD FD */ { 0, &Ia_Invalid }, + /* DD FE */ { 0, &Ia_Invalid }, + /* DD FF */ { 0, &Ia_Invalid }, + + // DE (modrm is outside 00h - BFh) (mod == 11) + /* DE C0 */ { 0, &Ia_faddp_STi_ST0 }, + /* DE C1 */ { 0, &Ia_faddp_STi_ST0 }, + /* DE C2 */ { 0, &Ia_faddp_STi_ST0 }, + /* DE C3 */ { 0, &Ia_faddp_STi_ST0 }, + /* DE C4 */ { 0, &Ia_faddp_STi_ST0 }, + /* DE C5 */ { 0, &Ia_faddp_STi_ST0 }, + /* DE C6 */ { 0, &Ia_faddp_STi_ST0 }, + /* DE C7 */ { 0, &Ia_faddp_STi_ST0 }, + /* DE C8 */ { 0, &Ia_fmulp_STi_ST0 }, + /* DE C9 */ { 0, &Ia_fmulp_STi_ST0 }, + /* DE CA */ { 0, &Ia_fmulp_STi_ST0 }, + /* DE CB */ { 0, &Ia_fmulp_STi_ST0 }, + /* DE CC */ { 0, &Ia_fmulp_STi_ST0 }, + /* DE CD */ { 0, &Ia_fmulp_STi_ST0 }, + /* DE CE */ { 0, &Ia_fmulp_STi_ST0 }, + /* DE CF */ { 0, &Ia_fmulp_STi_ST0 }, + /* DE D0 */ { 0, &Ia_fcomp_STi }, // undocumented + /* DE D1 */ { 0, &Ia_fcomp_STi }, // undocumented + /* DE D2 */ { 0, &Ia_fcomp_STi }, // undocumented + /* DE D3 */ { 0, &Ia_fcomp_STi }, // undocumented + /* DE D4 */ { 0, &Ia_fcomp_STi }, // undocumented + /* DE D5 */ { 0, &Ia_fcomp_STi }, // undocumented + /* DE D6 */ { 0, &Ia_fcomp_STi }, // undocumented + /* DE D7 */ { 0, &Ia_fcomp_STi }, // undocumented + /* DE D8 */ { 0, &Ia_Invalid }, + /* DE D9 */ { 0, &Ia_fcompp }, + /* DE DA */ { 0, &Ia_Invalid }, + /* DE DB */ { 0, &Ia_Invalid }, + /* DE DC */ { 0, &Ia_Invalid }, + /* DE DD */ { 0, &Ia_Invalid }, + /* DE DE */ { 0, &Ia_Invalid }, + /* DE DF */ { 0, &Ia_Invalid }, + /* DE E0 */ { 0, &Ia_fsubrp_STi_ST0 }, + /* DE E1 */ { 0, &Ia_fsubrp_STi_ST0 }, + /* DE E2 */ { 0, &Ia_fsubrp_STi_ST0 }, + /* DE E3 */ { 0, &Ia_fsubrp_STi_ST0 }, + /* DE E4 */ { 0, &Ia_fsubrp_STi_ST0 }, + /* DE E5 */ { 0, &Ia_fsubrp_STi_ST0 }, + /* DE E6 */ { 0, &Ia_fsubrp_STi_ST0 }, + /* DE E7 */ { 0, &Ia_fsubrp_STi_ST0 }, + /* DE E8 */ { 0, &Ia_fsubp_STi_ST0 }, + /* DE E9 */ { 0, &Ia_fsubp_STi_ST0 }, + /* DE EA */ { 0, &Ia_fsubp_STi_ST0 }, + /* DE EB */ { 0, &Ia_fsubp_STi_ST0 }, + /* DE EC */ { 0, &Ia_fsubp_STi_ST0 }, + /* DE ED */ { 0, &Ia_fsubp_STi_ST0 }, + /* DE EE */ { 0, &Ia_fsubp_STi_ST0 }, + /* DE EF */ { 0, &Ia_fsubp_STi_ST0 }, + /* DE F0 */ { 0, &Ia_fdivrp_STi_ST0 }, + /* DE F1 */ { 0, &Ia_fdivrp_STi_ST0 }, + /* DE F2 */ { 0, &Ia_fdivrp_STi_ST0 }, + /* DE F3 */ { 0, &Ia_fdivrp_STi_ST0 }, + /* DE F4 */ { 0, &Ia_fdivrp_STi_ST0 }, + /* DE F5 */ { 0, &Ia_fdivrp_STi_ST0 }, + /* DE F6 */ { 0, &Ia_fdivrp_STi_ST0 }, + /* DE F7 */ { 0, &Ia_fdivrp_STi_ST0 }, + /* DE F8 */ { 0, &Ia_fdivp_STi_ST0 }, + /* DE F9 */ { 0, &Ia_fdivp_STi_ST0 }, + /* DE FA */ { 0, &Ia_fdivp_STi_ST0 }, + /* DE FB */ { 0, &Ia_fdivp_STi_ST0 }, + /* DE FC */ { 0, &Ia_fdivp_STi_ST0 }, + /* DE FD */ { 0, &Ia_fdivp_STi_ST0 }, + /* DE FE */ { 0, &Ia_fdivp_STi_ST0 }, + /* DE FF */ { 0, &Ia_fdivp_STi_ST0 }, + + // DF (modrm is outside 00h - BFh) (mod == 11) + /* DF C0 */ { 0, &Ia_ffreep_STi }, // 287 compatibility opcode + /* DF C1 */ { 0, &Ia_ffreep_STi }, + /* DF C2 */ { 0, &Ia_ffreep_STi }, + /* DF C3 */ { 0, &Ia_ffreep_STi }, + /* DF C4 */ { 0, &Ia_ffreep_STi }, + /* DF C5 */ { 0, &Ia_ffreep_STi }, + /* DF C6 */ { 0, &Ia_ffreep_STi }, + /* DF C7 */ { 0, &Ia_ffreep_STi }, + /* DF C8 */ { 0, &Ia_fxch }, // undocumented + /* DF C9 */ { 0, &Ia_fxch }, // undocumented + /* DF CA */ { 0, &Ia_fxch }, // undocumented + /* DF CB */ { 0, &Ia_fxch }, // undocumented + /* DF CC */ { 0, &Ia_fxch }, // undocumented + /* DF CD */ { 0, &Ia_fxch }, // undocumented + /* DF CE */ { 0, &Ia_fxch }, // undocumented + /* DF CF */ { 0, &Ia_fxch }, // undocumented + /* DF D0 */ { 0, &Ia_fstp_STi }, // undocumented + /* DF D1 */ { 0, &Ia_fstp_STi }, // undocumented + /* DF D2 */ { 0, &Ia_fstp_STi }, // undocumented + /* DF D3 */ { 0, &Ia_fstp_STi }, // undocumented + /* DF D4 */ { 0, &Ia_fstp_STi }, // undocumented + /* DF D5 */ { 0, &Ia_fstp_STi }, // undocumented + /* DF D6 */ { 0, &Ia_fstp_STi }, // undocumented + /* DF D7 */ { 0, &Ia_fstp_STi }, // undocumented + /* DF D8 */ { 0, &Ia_fstp_STi }, // undocumented + /* DF D9 */ { 0, &Ia_fstp_STi }, // undocumented + /* DF DA */ { 0, &Ia_fstp_STi }, // undocumented + /* DF DB */ { 0, &Ia_fstp_STi }, // undocumented + /* DF DC */ { 0, &Ia_fstp_STi }, // undocumented + /* DF DD */ { 0, &Ia_fstp_STi }, // undocumented + /* DF DE */ { 0, &Ia_fstp_STi }, // undocumented + /* DF DF */ { 0, &Ia_fstp_STi }, // undocumented + /* DF E0 */ { 0, &Ia_fnstsw_AX }, + /* DF E1 */ { 0, &Ia_Invalid }, + /* DF E2 */ { 0, &Ia_Invalid }, + /* DF E3 */ { 0, &Ia_Invalid }, + /* DF E4 */ { 0, &Ia_Invalid }, + /* DF E5 */ { 0, &Ia_Invalid }, + /* DF E6 */ { 0, &Ia_Invalid }, + /* DF E7 */ { 0, &Ia_Invalid }, + /* DF E8 */ { 0, &Ia_fucomip_ST0_STi }, + /* DF E9 */ { 0, &Ia_fucomip_ST0_STi }, + /* DF EA */ { 0, &Ia_fucomip_ST0_STi }, + /* DF EB */ { 0, &Ia_fucomip_ST0_STi }, + /* DF EC */ { 0, &Ia_fucomip_ST0_STi }, + /* DF ED */ { 0, &Ia_fucomip_ST0_STi }, + /* DF EE */ { 0, &Ia_fucomip_ST0_STi }, + /* DF EF */ { 0, &Ia_fucomip_ST0_STi }, + /* DF F0 */ { 0, &Ia_fcomip_ST0_STi }, + /* DF F1 */ { 0, &Ia_fcomip_ST0_STi }, + /* DF F2 */ { 0, &Ia_fcomip_ST0_STi }, + /* DF F3 */ { 0, &Ia_fcomip_ST0_STi }, + /* DF F4 */ { 0, &Ia_fcomip_ST0_STi }, + /* DF F5 */ { 0, &Ia_fcomip_ST0_STi }, + /* DF F6 */ { 0, &Ia_fcomip_ST0_STi }, + /* DF F7 */ { 0, &Ia_fcomip_ST0_STi }, + /* DF F8 */ { 0, &Ia_Invalid }, + /* DF F9 */ { 0, &Ia_Invalid }, + /* DF FA */ { 0, &Ia_Invalid }, + /* DF FB */ { 0, &Ia_Invalid }, + /* DF FC */ { 0, &Ia_Invalid }, + /* DF FD */ { 0, &Ia_Invalid }, + /* DF FE */ { 0, &Ia_Invalid }, + /* DF FF */ { 0, &Ia_Invalid }, +}; diff --git a/Externals/Bochs_disasm/dis_tables_xop.inc b/Externals/Bochs_disasm/dis_tables_xop.inc new file mode 100644 index 0000000000..82ce2bca8c --- /dev/null +++ b/Externals/Bochs_disasm/dis_tables_xop.inc @@ -0,0 +1,890 @@ +///////////////////////////////////////////////////////////////////////// +// $Id: dis_tables_xop.inc 11863 2013-10-07 19:23:19Z sshwarts $ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (c) 2011-2013 Stanislav Shwartsman +// Written by Stanislav Shwartsman [sshwarts at sourceforge net] +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// +///////////////////////////////////////////////////////////////////////// + +static BxDisasmOpcodeTable_t BxDisasmGroupXOP_G1[8] = { + /* 0 */ { 0, &Ia_Invalid }, + /* 1 */ { 0, &Ia_blcfill_By_Ey }, + /* 2 */ { 0, &Ia_blsfill_By_Ey }, + /* 3 */ { 0, &Ia_blcs_By_Ey }, + /* 4 */ { 0, &Ia_tzmsk_By_Ey }, + /* 5 */ { 0, &Ia_blcic_By_Ey }, + /* 6 */ { 0, &Ia_blsic_By_Ey }, + /* 7 */ { 0, &Ia_t1mskc_By_Ey } +}; + +static BxDisasmOpcodeTable_t BxDisasmGroupXOP_G2[8] = { + /* 0 */ { 0, &Ia_Invalid }, + /* 1 */ { 0, &Ia_blcmsk_By_Ey }, + /* 2 */ { 0, &Ia_Invalid }, + /* 3 */ { 0, &Ia_Invalid }, + /* 4 */ { 0, &Ia_Invalid }, + /* 5 */ { 0, &Ia_Invalid }, + /* 6 */ { 0, &Ia_blci_By_Ey }, + /* 7 */ { 0, &Ia_Invalid } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_xop8_a2[2] = { + /* 0 */ { 0, &Ia_vpcmov_Vdq_Hdq_Wdq_VIb }, + /* 1 */ { 0, &Ia_vpcmov_Vdq_Hdq_VIb_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_xop8_a3[2] = { + /* 0 */ { 0, &Ia_vpperm_Vdq_Hdq_Wdq_VIb }, + /* 1 */ { 0, &Ia_vpperm_Vdq_Hdq_VIb_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_xop9_88[2] = { + /* 0 */ { 0, &Ia_vpshab_Vdq_Wdq_Hdq }, + /* 1 */ { 0, &Ia_vpshab_Vdq_Hdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_xop9_89[2] = { + /* 0 */ { 0, &Ia_vpshaw_Vdq_Wdq_Hdq }, + /* 1 */ { 0, &Ia_vpshaw_Vdq_Hdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_xop9_8a[2] = { + /* 0 */ { 0, &Ia_vpshad_Vdq_Wdq_Hdq }, + /* 1 */ { 0, &Ia_vpshad_Vdq_Hdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_xop9_8b[2] = { + /* 0 */ { 0, &Ia_vpshaq_Vdq_Wdq_Hdq }, + /* 1 */ { 0, &Ia_vpshaq_Vdq_Hdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_xop9_90[2] = { + /* 0 */ { 0, &Ia_vprotb_Vdq_Wdq_Hdq }, + /* 1 */ { 0, &Ia_vprotb_Vdq_Hdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_xop9_91[2] = { + /* 0 */ { 0, &Ia_vprotw_Vdq_Wdq_Hdq }, + /* 1 */ { 0, &Ia_vprotw_Vdq_Hdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_xop9_92[2] = { + /* 0 */ { 0, &Ia_vprotd_Vdq_Wdq_Hdq }, + /* 1 */ { 0, &Ia_vprotd_Vdq_Hdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_xop9_93[2] = { + /* 0 */ { 0, &Ia_vprotq_Vdq_Wdq_Hdq }, + /* 1 */ { 0, &Ia_vprotq_Vdq_Hdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_xop9_94[2] = { + /* 0 */ { 0, &Ia_vpshlb_Vdq_Wdq_Hdq }, + /* 1 */ { 0, &Ia_vpshlb_Vdq_Hdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_xop9_95[2] = { + /* 0 */ { 0, &Ia_vpshlw_Vdq_Wdq_Hdq }, + /* 1 */ { 0, &Ia_vpshlw_Vdq_Hdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_xop9_96[2] = { + /* 0 */ { 0, &Ia_vpshld_Vdq_Wdq_Hdq }, + /* 1 */ { 0, &Ia_vpshld_Vdq_Hdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmGrpVexW_xop9_97[2] = { + /* 0 */ { 0, &Ia_vpshlq_Vdq_Wdq_Hdq }, + /* 1 */ { 0, &Ia_vpshlq_Vdq_Hdq_Wdq } +}; + +static BxDisasmOpcodeTable_t BxDisasmOpcodesXOP[256*3] = { + // 256 entries for XOP map 0x8 opcodes + /* 00 */ { 0, &Ia_Invalid }, + /* 01 */ { GRPN(XOP_G1) }, + /* 02 */ { GRPN(XOP_G2) }, + /* 03 */ { 0, &Ia_Invalid }, + /* 04 */ { 0, &Ia_Invalid }, + /* 05 */ { 0, &Ia_Invalid }, + /* 06 */ { 0, &Ia_Invalid }, + /* 07 */ { 0, &Ia_Invalid }, + /* 08 */ { 0, &Ia_Invalid }, + /* 09 */ { 0, &Ia_Invalid }, + /* 0A */ { 0, &Ia_Invalid }, + /* 0B */ { 0, &Ia_Invalid }, + /* 0C */ { 0, &Ia_Invalid }, + /* 0D */ { 0, &Ia_Invalid }, + /* 0E */ { 0, &Ia_Invalid }, + /* 0F */ { 0, &Ia_Invalid }, + /* 10 */ { 0, &Ia_Invalid }, + /* 11 */ { 0, &Ia_Invalid }, + /* 12 */ { 0, &Ia_Invalid }, + /* 13 */ { 0, &Ia_Invalid }, + /* 14 */ { 0, &Ia_Invalid }, + /* 15 */ { 0, &Ia_Invalid }, + /* 16 */ { 0, &Ia_Invalid }, + /* 17 */ { 0, &Ia_Invalid }, + /* 18 */ { 0, &Ia_Invalid }, + /* 19 */ { 0, &Ia_Invalid }, + /* 1A */ { 0, &Ia_Invalid }, + /* 1B */ { 0, &Ia_Invalid }, + /* 1C */ { 0, &Ia_Invalid }, + /* 1D */ { 0, &Ia_Invalid }, + /* 1E */ { 0, &Ia_Invalid }, + /* 1F */ { 0, &Ia_Invalid }, + /* 20 */ { 0, &Ia_Invalid }, + /* 21 */ { 0, &Ia_Invalid }, + /* 22 */ { 0, &Ia_Invalid }, + /* 23 */ { 0, &Ia_Invalid }, + /* 24 */ { 0, &Ia_Invalid }, + /* 25 */ { 0, &Ia_Invalid }, + /* 26 */ { 0, &Ia_Invalid }, + /* 27 */ { 0, &Ia_Invalid }, + /* 28 */ { 0, &Ia_Invalid }, + /* 29 */ { 0, &Ia_Invalid }, + /* 2A */ { 0, &Ia_Invalid }, + /* 2B */ { 0, &Ia_Invalid }, + /* 2C */ { 0, &Ia_Invalid }, + /* 2D */ { 0, &Ia_Invalid }, + /* 2E */ { 0, &Ia_Invalid }, + /* 2F */ { 0, &Ia_Invalid }, + /* 30 */ { 0, &Ia_Invalid }, + /* 31 */ { 0, &Ia_Invalid }, + /* 32 */ { 0, &Ia_Invalid }, + /* 33 */ { 0, &Ia_Invalid }, + /* 34 */ { 0, &Ia_Invalid }, + /* 35 */ { 0, &Ia_Invalid }, + /* 36 */ { 0, &Ia_Invalid }, + /* 37 */ { 0, &Ia_Invalid }, + /* 38 */ { 0, &Ia_Invalid }, + /* 39 */ { 0, &Ia_Invalid }, + /* 3A */ { 0, &Ia_Invalid }, + /* 3B */ { 0, &Ia_Invalid }, + /* 3C */ { 0, &Ia_Invalid }, + /* 3D */ { 0, &Ia_Invalid }, + /* 3E */ { 0, &Ia_Invalid }, + /* 3F */ { 0, &Ia_Invalid }, + /* 40 */ { 0, &Ia_Invalid }, + /* 41 */ { 0, &Ia_Invalid }, + /* 42 */ { 0, &Ia_Invalid }, + /* 43 */ { 0, &Ia_Invalid }, + /* 44 */ { 0, &Ia_Invalid }, + /* 45 */ { 0, &Ia_Invalid }, + /* 46 */ { 0, &Ia_Invalid }, + /* 47 */ { 0, &Ia_Invalid }, + /* 48 */ { 0, &Ia_Invalid }, + /* 49 */ { 0, &Ia_Invalid }, + /* 4A */ { 0, &Ia_Invalid }, + /* 4B */ { 0, &Ia_Invalid }, + /* 4C */ { 0, &Ia_Invalid }, + /* 4D */ { 0, &Ia_Invalid }, + /* 4E */ { 0, &Ia_Invalid }, + /* 4F */ { 0, &Ia_Invalid }, + /* 50 */ { 0, &Ia_Invalid }, + /* 51 */ { 0, &Ia_Invalid }, + /* 52 */ { 0, &Ia_Invalid }, + /* 53 */ { 0, &Ia_Invalid }, + /* 54 */ { 0, &Ia_Invalid }, + /* 55 */ { 0, &Ia_Invalid }, + /* 56 */ { 0, &Ia_Invalid }, + /* 57 */ { 0, &Ia_Invalid }, + /* 58 */ { 0, &Ia_Invalid }, + /* 59 */ { 0, &Ia_Invalid }, + /* 5A */ { 0, &Ia_Invalid }, + /* 5B */ { 0, &Ia_Invalid }, + /* 5C */ { 0, &Ia_Invalid }, + /* 5D */ { 0, &Ia_Invalid }, + /* 5E */ { 0, &Ia_Invalid }, + /* 5F */ { 0, &Ia_Invalid }, + /* 60 */ { 0, &Ia_Invalid }, + /* 61 */ { 0, &Ia_Invalid }, + /* 62 */ { 0, &Ia_Invalid }, + /* 63 */ { 0, &Ia_Invalid }, + /* 64 */ { 0, &Ia_Invalid }, + /* 65 */ { 0, &Ia_Invalid }, + /* 66 */ { 0, &Ia_Invalid }, + /* 67 */ { 0, &Ia_Invalid }, + /* 68 */ { 0, &Ia_Invalid }, + /* 69 */ { 0, &Ia_Invalid }, + /* 6A */ { 0, &Ia_Invalid }, + /* 6B */ { 0, &Ia_Invalid }, + /* 6C */ { 0, &Ia_Invalid }, + /* 6D */ { 0, &Ia_Invalid }, + /* 6E */ { 0, &Ia_Invalid }, + /* 6F */ { 0, &Ia_Invalid }, + /* 70 */ { 0, &Ia_Invalid }, + /* 71 */ { 0, &Ia_Invalid }, + /* 72 */ { 0, &Ia_Invalid }, + /* 73 */ { 0, &Ia_Invalid }, + /* 74 */ { 0, &Ia_Invalid }, + /* 75 */ { 0, &Ia_Invalid }, + /* 76 */ { 0, &Ia_Invalid }, + /* 77 */ { 0, &Ia_Invalid }, + /* 78 */ { 0, &Ia_Invalid }, + /* 79 */ { 0, &Ia_Invalid }, + /* 7A */ { 0, &Ia_Invalid }, + /* 7B */ { 0, &Ia_Invalid }, + /* 7C */ { 0, &Ia_Invalid }, + /* 7D */ { 0, &Ia_Invalid }, + /* 7E */ { 0, &Ia_Invalid }, + /* 7F */ { 0, &Ia_Invalid }, + /* 80 */ { 0, &Ia_Invalid }, + /* 81 */ { 0, &Ia_Invalid }, + /* 82 */ { 0, &Ia_Invalid }, + /* 83 */ { 0, &Ia_Invalid }, + /* 84 */ { 0, &Ia_Invalid }, + /* 85 */ { 0, &Ia_vpmacssww_Vdq_Hdq_Wdq_VIb }, + /* 86 */ { 0, &Ia_vpmacsswd_Vdq_Hdq_Wdq_VIb }, + /* 87 */ { 0, &Ia_vpmacssdql_Vdq_Hdq_Wdq_VIb }, + /* 88 */ { 0, &Ia_Invalid }, + /* 89 */ { 0, &Ia_Invalid }, + /* 8A */ { 0, &Ia_Invalid }, + /* 8B */ { 0, &Ia_Invalid }, + /* 8C */ { 0, &Ia_Invalid }, + /* 8D */ { 0, &Ia_Invalid }, + /* 8E */ { 0, &Ia_vpmacssdd_Vdq_Hdq_Wdq_VIb }, + /* 8F */ { 0, &Ia_vpmacssdqh_Vdq_Hdq_Wdq_VIb }, + /* 90 */ { 0, &Ia_Invalid }, + /* 91 */ { 0, &Ia_Invalid }, + /* 92 */ { 0, &Ia_Invalid }, + /* 93 */ { 0, &Ia_Invalid }, + /* 94 */ { 0, &Ia_Invalid }, + /* 95 */ { 0, &Ia_vpmacsww_Vdq_Hdq_Wdq_VIb }, + /* 96 */ { 0, &Ia_vpmacswd_Vdq_Hdq_Wdq_VIb }, + /* 97 */ { 0, &Ia_vpmacsdql_Vdq_Hdq_Wdq_VIb }, + /* 98 */ { 0, &Ia_Invalid }, + /* 99 */ { 0, &Ia_Invalid }, + /* 9A */ { 0, &Ia_Invalid }, + /* 9B */ { 0, &Ia_Invalid }, + /* 9C */ { 0, &Ia_Invalid }, + /* 9D */ { 0, &Ia_Invalid }, + /* 9E */ { 0, &Ia_vpmacsdd_Vdq_Hdq_Wdq_VIb }, + /* 9F */ { 0, &Ia_vpmacsdqh_Vdq_Hdq_Wdq_VIb }, + /* A0 */ { 0, &Ia_Invalid }, + /* A1 */ { 0, &Ia_Invalid }, + /* A2 */ { GRPVEXW(xop8_a2) }, + /* A3 */ { GRPVEXW(xop8_a3) }, + /* A4 */ { 0, &Ia_Invalid }, + /* A5 */ { 0, &Ia_Invalid }, + /* A6 */ { 0, &Ia_vpmadcsswd_Vdq_Hdq_Wdq_VIb }, + /* A7 */ { 0, &Ia_Invalid }, + /* A8 */ { 0, &Ia_Invalid }, + /* A9 */ { 0, &Ia_Invalid }, + /* AA */ { 0, &Ia_Invalid }, + /* AB */ { 0, &Ia_Invalid }, + /* AC */ { 0, &Ia_Invalid }, + /* AD */ { 0, &Ia_Invalid }, + /* AE */ { 0, &Ia_Invalid }, + /* AF */ { 0, &Ia_Invalid }, + /* B0 */ { 0, &Ia_Invalid }, + /* B1 */ { 0, &Ia_Invalid }, + /* B2 */ { 0, &Ia_Invalid }, + /* B3 */ { 0, &Ia_Invalid }, + /* B4 */ { 0, &Ia_Invalid }, + /* B5 */ { 0, &Ia_Invalid }, + /* B6 */ { 0, &Ia_vpmadcswd_Vdq_Hdq_Wdq_VIb }, + /* B7 */ { 0, &Ia_Invalid }, + /* B8 */ { 0, &Ia_Invalid }, + /* B9 */ { 0, &Ia_Invalid }, + /* BA */ { 0, &Ia_Invalid }, + /* BB */ { 0, &Ia_Invalid }, + /* BC */ { 0, &Ia_Invalid }, + /* BD */ { 0, &Ia_Invalid }, + /* BE */ { 0, &Ia_Invalid }, + /* BF */ { 0, &Ia_Invalid }, + /* C0 */ { 0, &Ia_vprotb_Vdq_Wdq_Ib }, + /* C1 */ { 0, &Ia_vprotw_Vdq_Wdq_Ib }, + /* C2 */ { 0, &Ia_vprotd_Vdq_Wdq_Ib }, + /* C3 */ { 0, &Ia_vprotq_Vdq_Wdq_Ib }, + /* C4 */ { 0, &Ia_Invalid }, + /* C5 */ { 0, &Ia_Invalid }, + /* C6 */ { 0, &Ia_Invalid }, + /* C7 */ { 0, &Ia_Invalid }, + /* C8 */ { 0, &Ia_Invalid }, + /* C9 */ { 0, &Ia_Invalid }, + /* CA */ { 0, &Ia_Invalid }, + /* CB */ { 0, &Ia_Invalid }, + /* CC */ { 0, &Ia_vpcomb_Vdq_Hdq_Wdq_Ib }, + /* CD */ { 0, &Ia_vpcomw_Vdq_Hdq_Wdq_Ib }, + /* CE */ { 0, &Ia_vpcomd_Vdq_Hdq_Wdq_Ib }, + /* CF */ { 0, &Ia_vpcomq_Vdq_Hdq_Wdq_Ib }, + /* D0 */ { 0, &Ia_Invalid }, + /* D1 */ { 0, &Ia_Invalid }, + /* D2 */ { 0, &Ia_Invalid }, + /* D3 */ { 0, &Ia_Invalid }, + /* D4 */ { 0, &Ia_Invalid }, + /* D5 */ { 0, &Ia_Invalid }, + /* D6 */ { 0, &Ia_Invalid }, + /* D7 */ { 0, &Ia_Invalid }, + /* D8 */ { 0, &Ia_Invalid }, + /* D9 */ { 0, &Ia_Invalid }, + /* DA */ { 0, &Ia_Invalid }, + /* DB */ { 0, &Ia_Invalid }, + /* DC */ { 0, &Ia_Invalid }, + /* DD */ { 0, &Ia_Invalid }, + /* DE */ { 0, &Ia_Invalid }, + /* DF */ { 0, &Ia_Invalid }, + /* E0 */ { 0, &Ia_Invalid }, + /* E1 */ { 0, &Ia_Invalid }, + /* E2 */ { 0, &Ia_Invalid }, + /* E3 */ { 0, &Ia_Invalid }, + /* E4 */ { 0, &Ia_Invalid }, + /* E5 */ { 0, &Ia_Invalid }, + /* E6 */ { 0, &Ia_Invalid }, + /* E7 */ { 0, &Ia_Invalid }, + /* E8 */ { 0, &Ia_Invalid }, + /* E9 */ { 0, &Ia_Invalid }, + /* EA */ { 0, &Ia_Invalid }, + /* EB */ { 0, &Ia_Invalid }, + /* EC */ { 0, &Ia_vpcomub_Vdq_Hdq_Wdq_Ib }, + /* ED */ { 0, &Ia_vpcomuw_Vdq_Hdq_Wdq_Ib }, + /* EE */ { 0, &Ia_vpcomud_Vdq_Hdq_Wdq_Ib }, + /* EF */ { 0, &Ia_vpcomuq_Vdq_Hdq_Wdq_Ib }, + /* F0 */ { 0, &Ia_Invalid }, + /* F1 */ { 0, &Ia_Invalid }, + /* F2 */ { 0, &Ia_Invalid }, + /* F3 */ { 0, &Ia_Invalid }, + /* F4 */ { 0, &Ia_Invalid }, + /* F5 */ { 0, &Ia_Invalid }, + /* F6 */ { 0, &Ia_Invalid }, + /* F7 */ { 0, &Ia_Invalid }, + /* F8 */ { 0, &Ia_Invalid }, + /* F9 */ { 0, &Ia_Invalid }, + /* FA */ { 0, &Ia_Invalid }, + /* FB */ { 0, &Ia_Invalid }, + /* FC */ { 0, &Ia_Invalid }, + /* FD */ { 0, &Ia_Invalid }, + /* FE */ { 0, &Ia_Invalid }, + /* FF */ { 0, &Ia_Invalid }, + + // 256 entries for XOP map 0x9 opcodes + /* 00 */ { 0, &Ia_Invalid }, + /* 01 */ { 0, &Ia_Invalid }, + /* 02 */ { 0, &Ia_Invalid }, + /* 03 */ { 0, &Ia_Invalid }, + /* 04 */ { 0, &Ia_Invalid }, + /* 05 */ { 0, &Ia_Invalid }, + /* 06 */ { 0, &Ia_Invalid }, + /* 07 */ { 0, &Ia_Invalid }, + /* 08 */ { 0, &Ia_Invalid }, + /* 09 */ { 0, &Ia_Invalid }, + /* 0A */ { 0, &Ia_Invalid }, + /* 0B */ { 0, &Ia_Invalid }, + /* 0C */ { 0, &Ia_Invalid }, + /* 0D */ { 0, &Ia_Invalid }, + /* 0E */ { 0, &Ia_Invalid }, + /* 0F */ { 0, &Ia_Invalid }, + /* 10 */ { 0, &Ia_Invalid }, + /* 11 */ { 0, &Ia_Invalid }, + /* 12 */ { 0, &Ia_Invalid }, + /* 13 */ { 0, &Ia_Invalid }, + /* 14 */ { 0, &Ia_Invalid }, + /* 15 */ { 0, &Ia_Invalid }, + /* 16 */ { 0, &Ia_Invalid }, + /* 17 */ { 0, &Ia_Invalid }, + /* 18 */ { 0, &Ia_Invalid }, + /* 19 */ { 0, &Ia_Invalid }, + /* 1A */ { 0, &Ia_Invalid }, + /* 1B */ { 0, &Ia_Invalid }, + /* 1C */ { 0, &Ia_Invalid }, + /* 1D */ { 0, &Ia_Invalid }, + /* 1E */ { 0, &Ia_Invalid }, + /* 1F */ { 0, &Ia_Invalid }, + /* 20 */ { 0, &Ia_Invalid }, + /* 21 */ { 0, &Ia_Invalid }, + /* 22 */ { 0, &Ia_Invalid }, + /* 23 */ { 0, &Ia_Invalid }, + /* 24 */ { 0, &Ia_Invalid }, + /* 25 */ { 0, &Ia_Invalid }, + /* 26 */ { 0, &Ia_Invalid }, + /* 27 */ { 0, &Ia_Invalid }, + /* 28 */ { 0, &Ia_Invalid }, + /* 29 */ { 0, &Ia_Invalid }, + /* 2A */ { 0, &Ia_Invalid }, + /* 2B */ { 0, &Ia_Invalid }, + /* 2C */ { 0, &Ia_Invalid }, + /* 2D */ { 0, &Ia_Invalid }, + /* 2E */ { 0, &Ia_Invalid }, + /* 2F */ { 0, &Ia_Invalid }, + /* 30 */ { 0, &Ia_Invalid }, + /* 31 */ { 0, &Ia_Invalid }, + /* 32 */ { 0, &Ia_Invalid }, + /* 33 */ { 0, &Ia_Invalid }, + /* 34 */ { 0, &Ia_Invalid }, + /* 35 */ { 0, &Ia_Invalid }, + /* 36 */ { 0, &Ia_Invalid }, + /* 37 */ { 0, &Ia_Invalid }, + /* 38 */ { 0, &Ia_Invalid }, + /* 39 */ { 0, &Ia_Invalid }, + /* 3A */ { 0, &Ia_Invalid }, + /* 3B */ { 0, &Ia_Invalid }, + /* 3C */ { 0, &Ia_Invalid }, + /* 3D */ { 0, &Ia_Invalid }, + /* 3E */ { 0, &Ia_Invalid }, + /* 3F */ { 0, &Ia_Invalid }, + /* 40 */ { 0, &Ia_Invalid }, + /* 41 */ { 0, &Ia_Invalid }, + /* 42 */ { 0, &Ia_Invalid }, + /* 43 */ { 0, &Ia_Invalid }, + /* 44 */ { 0, &Ia_Invalid }, + /* 45 */ { 0, &Ia_Invalid }, + /* 46 */ { 0, &Ia_Invalid }, + /* 47 */ { 0, &Ia_Invalid }, + /* 48 */ { 0, &Ia_Invalid }, + /* 49 */ { 0, &Ia_Invalid }, + /* 4A */ { 0, &Ia_Invalid }, + /* 4B */ { 0, &Ia_Invalid }, + /* 4C */ { 0, &Ia_Invalid }, + /* 4D */ { 0, &Ia_Invalid }, + /* 4E */ { 0, &Ia_Invalid }, + /* 4F */ { 0, &Ia_Invalid }, + /* 50 */ { 0, &Ia_Invalid }, + /* 51 */ { 0, &Ia_Invalid }, + /* 52 */ { 0, &Ia_Invalid }, + /* 53 */ { 0, &Ia_Invalid }, + /* 54 */ { 0, &Ia_Invalid }, + /* 55 */ { 0, &Ia_Invalid }, + /* 56 */ { 0, &Ia_Invalid }, + /* 57 */ { 0, &Ia_Invalid }, + /* 58 */ { 0, &Ia_Invalid }, + /* 59 */ { 0, &Ia_Invalid }, + /* 5A */ { 0, &Ia_Invalid }, + /* 5B */ { 0, &Ia_Invalid }, + /* 5C */ { 0, &Ia_Invalid }, + /* 5D */ { 0, &Ia_Invalid }, + /* 5E */ { 0, &Ia_Invalid }, + /* 5F */ { 0, &Ia_Invalid }, + /* 60 */ { 0, &Ia_Invalid }, + /* 61 */ { 0, &Ia_Invalid }, + /* 62 */ { 0, &Ia_Invalid }, + /* 63 */ { 0, &Ia_Invalid }, + /* 64 */ { 0, &Ia_Invalid }, + /* 65 */ { 0, &Ia_Invalid }, + /* 66 */ { 0, &Ia_Invalid }, + /* 67 */ { 0, &Ia_Invalid }, + /* 68 */ { 0, &Ia_Invalid }, + /* 69 */ { 0, &Ia_Invalid }, + /* 6A */ { 0, &Ia_Invalid }, + /* 6B */ { 0, &Ia_Invalid }, + /* 6C */ { 0, &Ia_Invalid }, + /* 6D */ { 0, &Ia_Invalid }, + /* 6E */ { 0, &Ia_Invalid }, + /* 6F */ { 0, &Ia_Invalid }, + /* 70 */ { 0, &Ia_Invalid }, + /* 71 */ { 0, &Ia_Invalid }, + /* 72 */ { 0, &Ia_Invalid }, + /* 73 */ { 0, &Ia_Invalid }, + /* 74 */ { 0, &Ia_Invalid }, + /* 75 */ { 0, &Ia_Invalid }, + /* 76 */ { 0, &Ia_Invalid }, + /* 77 */ { 0, &Ia_Invalid }, + /* 78 */ { 0, &Ia_Invalid }, + /* 79 */ { 0, &Ia_Invalid }, + /* 7A */ { 0, &Ia_Invalid }, + /* 7B */ { 0, &Ia_Invalid }, + /* 7C */ { 0, &Ia_Invalid }, + /* 7D */ { 0, &Ia_Invalid }, + /* 7E */ { 0, &Ia_Invalid }, + /* 7F */ { 0, &Ia_Invalid }, + /* 80 */ { 0, &Ia_frczps_Vps_Wps }, + /* 81 */ { 0, &Ia_frczpd_Vpd_Wpd }, + /* 82 */ { 0, &Ia_frczss_Vss_Wss }, + /* 83 */ { 0, &Ia_frczsd_Vsd_Wsd }, + /* 84 */ { 0, &Ia_Invalid }, + /* 85 */ { 0, &Ia_Invalid }, + /* 86 */ { 0, &Ia_Invalid }, + /* 87 */ { 0, &Ia_Invalid }, + /* 88 */ { GRPVEXW(xop9_88) }, + /* 89 */ { GRPVEXW(xop9_89) }, + /* 8A */ { GRPVEXW(xop9_8a) }, + /* 8B */ { GRPVEXW(xop9_8b) }, + /* 8C */ { 0, &Ia_Invalid }, + /* 8D */ { 0, &Ia_Invalid }, + /* 8E */ { 0, &Ia_Invalid }, + /* 8F */ { 0, &Ia_Invalid }, + /* 90 */ { GRPVEXW(xop9_90) }, + /* 91 */ { GRPVEXW(xop9_91) }, + /* 92 */ { GRPVEXW(xop9_92) }, + /* 93 */ { GRPVEXW(xop9_93) }, + /* 94 */ { GRPVEXW(xop9_94) }, + /* 95 */ { GRPVEXW(xop9_95) }, + /* 96 */ { GRPVEXW(xop9_96) }, + /* 97 */ { GRPVEXW(xop9_97) }, + /* 98 */ { 0, &Ia_Invalid }, + /* 99 */ { 0, &Ia_Invalid }, + /* 9A */ { 0, &Ia_Invalid }, + /* 9B */ { 0, &Ia_Invalid }, + /* 9C */ { 0, &Ia_Invalid }, + /* 9D */ { 0, &Ia_Invalid }, + /* 9E */ { 0, &Ia_Invalid }, + /* 9F */ { 0, &Ia_Invalid }, + /* A0 */ { 0, &Ia_Invalid }, + /* A1 */ { 0, &Ia_Invalid }, + /* A2 */ { 0, &Ia_Invalid }, + /* A3 */ { 0, &Ia_Invalid }, + /* A4 */ { 0, &Ia_Invalid }, + /* A5 */ { 0, &Ia_Invalid }, + /* A6 */ { 0, &Ia_Invalid }, + /* A7 */ { 0, &Ia_Invalid }, + /* A8 */ { 0, &Ia_Invalid }, + /* A9 */ { 0, &Ia_Invalid }, + /* AA */ { 0, &Ia_Invalid }, + /* AB */ { 0, &Ia_Invalid }, + /* AC */ { 0, &Ia_Invalid }, + /* AD */ { 0, &Ia_Invalid }, + /* AE */ { 0, &Ia_Invalid }, + /* AF */ { 0, &Ia_Invalid }, + /* B0 */ { 0, &Ia_Invalid }, + /* B1 */ { 0, &Ia_Invalid }, + /* B2 */ { 0, &Ia_Invalid }, + /* B3 */ { 0, &Ia_Invalid }, + /* B4 */ { 0, &Ia_Invalid }, + /* B5 */ { 0, &Ia_Invalid }, + /* B6 */ { 0, &Ia_Invalid }, + /* B7 */ { 0, &Ia_Invalid }, + /* B8 */ { 0, &Ia_Invalid }, + /* B9 */ { 0, &Ia_Invalid }, + /* BA */ { 0, &Ia_Invalid }, + /* BB */ { 0, &Ia_Invalid }, + /* BC */ { 0, &Ia_Invalid }, + /* BD */ { 0, &Ia_Invalid }, + /* BE */ { 0, &Ia_Invalid }, + /* BF */ { 0, &Ia_Invalid }, + /* C0 */ { 0, &Ia_Invalid }, + /* C1 */ { 0, &Ia_vphaddbw_Vdq_Wdq }, + /* C2 */ { 0, &Ia_vphaddbd_Vdq_Wdq }, + /* C3 */ { 0, &Ia_vphaddbq_Vdq_Wdq }, + /* C4 */ { 0, &Ia_Invalid }, + /* C5 */ { 0, &Ia_Invalid }, + /* C6 */ { 0, &Ia_vphaddwd_Vdq_Wdq }, + /* C7 */ { 0, &Ia_vphaddwq_Vdq_Wdq }, + /* C8 */ { 0, &Ia_Invalid }, + /* C9 */ { 0, &Ia_Invalid }, + /* CA */ { 0, &Ia_Invalid }, + /* CB */ { 0, &Ia_vphadddq_Vdq_Wdq }, + /* CC */ { 0, &Ia_Invalid }, + /* CD */ { 0, &Ia_Invalid }, + /* CE */ { 0, &Ia_Invalid }, + /* CF */ { 0, &Ia_Invalid }, + /* D0 */ { 0, &Ia_Invalid }, + /* D1 */ { 0, &Ia_vphaddubw_Vdq_Wdq }, + /* D2 */ { 0, &Ia_vphaddubd_Vdq_Wdq }, + /* D3 */ { 0, &Ia_vphaddubq_Vdq_Wdq }, + /* D4 */ { 0, &Ia_Invalid }, + /* D5 */ { 0, &Ia_Invalid }, + /* D6 */ { 0, &Ia_vphadduwd_Vdq_Wdq }, + /* D7 */ { 0, &Ia_vphadduwq_Vdq_Wdq }, + /* D8 */ { 0, &Ia_Invalid }, + /* D9 */ { 0, &Ia_Invalid }, + /* DA */ { 0, &Ia_Invalid }, + /* DB */ { 0, &Ia_vphaddudq_Vdq_Wdq }, + /* DC */ { 0, &Ia_Invalid }, + /* DD */ { 0, &Ia_Invalid }, + /* DE */ { 0, &Ia_Invalid }, + /* DF */ { 0, &Ia_Invalid }, + /* E0 */ { 0, &Ia_Invalid }, + /* E1 */ { 0, &Ia_vphsubbw_Vdq_Wdq }, + /* E2 */ { 0, &Ia_vphsubwd_Vdq_Wdq }, + /* E3 */ { 0, &Ia_vphsubdq_Vdq_Wdq }, + /* E4 */ { 0, &Ia_Invalid }, + /* E5 */ { 0, &Ia_Invalid }, + /* E6 */ { 0, &Ia_Invalid }, + /* E7 */ { 0, &Ia_Invalid }, + /* E8 */ { 0, &Ia_Invalid }, + /* E9 */ { 0, &Ia_Invalid }, + /* EA */ { 0, &Ia_Invalid }, + /* EB */ { 0, &Ia_Invalid }, + /* EC */ { 0, &Ia_Invalid }, + /* ED */ { 0, &Ia_Invalid }, + /* EE */ { 0, &Ia_Invalid }, + /* EF */ { 0, &Ia_Invalid }, + /* F0 */ { 0, &Ia_Invalid }, + /* F1 */ { 0, &Ia_Invalid }, + /* F2 */ { 0, &Ia_Invalid }, + /* F3 */ { 0, &Ia_Invalid }, + /* F4 */ { 0, &Ia_Invalid }, + /* F5 */ { 0, &Ia_Invalid }, + /* F6 */ { 0, &Ia_Invalid }, + /* F7 */ { 0, &Ia_Invalid }, + /* F8 */ { 0, &Ia_Invalid }, + /* F9 */ { 0, &Ia_Invalid }, + /* FA */ { 0, &Ia_Invalid }, + /* FB */ { 0, &Ia_Invalid }, + /* FC */ { 0, &Ia_Invalid }, + /* FD */ { 0, &Ia_Invalid }, + /* FE */ { 0, &Ia_Invalid }, + /* FF */ { 0, &Ia_Invalid }, + + // 256 entries for XOP map 0xA opcodes + /* 00 */ { 0, &Ia_Invalid }, + /* 01 */ { 0, &Ia_Invalid }, + /* 02 */ { 0, &Ia_Invalid }, + /* 03 */ { 0, &Ia_Invalid }, + /* 04 */ { 0, &Ia_Invalid }, + /* 05 */ { 0, &Ia_Invalid }, + /* 06 */ { 0, &Ia_Invalid }, + /* 07 */ { 0, &Ia_Invalid }, + /* 08 */ { 0, &Ia_Invalid }, + /* 09 */ { 0, &Ia_Invalid }, + /* 0A */ { 0, &Ia_Invalid }, + /* 0B */ { 0, &Ia_Invalid }, + /* 0C */ { 0, &Ia_Invalid }, + /* 0D */ { 0, &Ia_Invalid }, + /* 0E */ { 0, &Ia_Invalid }, + /* 0F */ { 0, &Ia_Invalid }, + /* 10 */ { 0, &Ia_bextr_Gy_Ey_Id }, + /* 11 */ { 0, &Ia_Invalid }, + /* 12 */ { 0, &Ia_Invalid }, + /* 13 */ { 0, &Ia_Invalid }, + /* 14 */ { 0, &Ia_Invalid }, + /* 15 */ { 0, &Ia_Invalid }, + /* 16 */ { 0, &Ia_Invalid }, + /* 17 */ { 0, &Ia_Invalid }, + /* 18 */ { 0, &Ia_Invalid }, + /* 19 */ { 0, &Ia_Invalid }, + /* 1A */ { 0, &Ia_Invalid }, + /* 1B */ { 0, &Ia_Invalid }, + /* 1C */ { 0, &Ia_Invalid }, + /* 1D */ { 0, &Ia_Invalid }, + /* 1E */ { 0, &Ia_Invalid }, + /* 1F */ { 0, &Ia_Invalid }, + /* 20 */ { 0, &Ia_Invalid }, + /* 21 */ { 0, &Ia_Invalid }, + /* 22 */ { 0, &Ia_Invalid }, + /* 23 */ { 0, &Ia_Invalid }, + /* 24 */ { 0, &Ia_Invalid }, + /* 25 */ { 0, &Ia_Invalid }, + /* 26 */ { 0, &Ia_Invalid }, + /* 27 */ { 0, &Ia_Invalid }, + /* 28 */ { 0, &Ia_Invalid }, + /* 29 */ { 0, &Ia_Invalid }, + /* 2A */ { 0, &Ia_Invalid }, + /* 2B */ { 0, &Ia_Invalid }, + /* 2C */ { 0, &Ia_Invalid }, + /* 2D */ { 0, &Ia_Invalid }, + /* 2E */ { 0, &Ia_Invalid }, + /* 2F */ { 0, &Ia_Invalid }, + /* 30 */ { 0, &Ia_Invalid }, + /* 31 */ { 0, &Ia_Invalid }, + /* 32 */ { 0, &Ia_Invalid }, + /* 33 */ { 0, &Ia_Invalid }, + /* 34 */ { 0, &Ia_Invalid }, + /* 35 */ { 0, &Ia_Invalid }, + /* 36 */ { 0, &Ia_Invalid }, + /* 37 */ { 0, &Ia_Invalid }, + /* 38 */ { 0, &Ia_Invalid }, + /* 39 */ { 0, &Ia_Invalid }, + /* 3A */ { 0, &Ia_Invalid }, + /* 3B */ { 0, &Ia_Invalid }, + /* 3C */ { 0, &Ia_Invalid }, + /* 3D */ { 0, &Ia_Invalid }, + /* 3E */ { 0, &Ia_Invalid }, + /* 3F */ { 0, &Ia_Invalid }, + /* 40 */ { 0, &Ia_Invalid }, + /* 41 */ { 0, &Ia_Invalid }, + /* 42 */ { 0, &Ia_Invalid }, + /* 43 */ { 0, &Ia_Invalid }, + /* 44 */ { 0, &Ia_Invalid }, + /* 45 */ { 0, &Ia_Invalid }, + /* 46 */ { 0, &Ia_Invalid }, + /* 47 */ { 0, &Ia_Invalid }, + /* 48 */ { 0, &Ia_Invalid }, + /* 49 */ { 0, &Ia_Invalid }, + /* 4A */ { 0, &Ia_Invalid }, + /* 4B */ { 0, &Ia_Invalid }, + /* 4C */ { 0, &Ia_Invalid }, + /* 4D */ { 0, &Ia_Invalid }, + /* 4E */ { 0, &Ia_Invalid }, + /* 4F */ { 0, &Ia_Invalid }, + /* 50 */ { 0, &Ia_Invalid }, + /* 51 */ { 0, &Ia_Invalid }, + /* 52 */ { 0, &Ia_Invalid }, + /* 53 */ { 0, &Ia_Invalid }, + /* 54 */ { 0, &Ia_Invalid }, + /* 55 */ { 0, &Ia_Invalid }, + /* 56 */ { 0, &Ia_Invalid }, + /* 57 */ { 0, &Ia_Invalid }, + /* 58 */ { 0, &Ia_Invalid }, + /* 59 */ { 0, &Ia_Invalid }, + /* 5A */ { 0, &Ia_Invalid }, + /* 5B */ { 0, &Ia_Invalid }, + /* 5C */ { 0, &Ia_Invalid }, + /* 5D */ { 0, &Ia_Invalid }, + /* 5E */ { 0, &Ia_Invalid }, + /* 5F */ { 0, &Ia_Invalid }, + /* 60 */ { 0, &Ia_Invalid }, + /* 61 */ { 0, &Ia_Invalid }, + /* 62 */ { 0, &Ia_Invalid }, + /* 63 */ { 0, &Ia_Invalid }, + /* 64 */ { 0, &Ia_Invalid }, + /* 65 */ { 0, &Ia_Invalid }, + /* 66 */ { 0, &Ia_Invalid }, + /* 67 */ { 0, &Ia_Invalid }, + /* 68 */ { 0, &Ia_Invalid }, + /* 69 */ { 0, &Ia_Invalid }, + /* 6A */ { 0, &Ia_Invalid }, + /* 6B */ { 0, &Ia_Invalid }, + /* 6C */ { 0, &Ia_Invalid }, + /* 6D */ { 0, &Ia_Invalid }, + /* 6E */ { 0, &Ia_Invalid }, + /* 6F */ { 0, &Ia_Invalid }, + /* 70 */ { 0, &Ia_Invalid }, + /* 71 */ { 0, &Ia_Invalid }, + /* 72 */ { 0, &Ia_Invalid }, + /* 73 */ { 0, &Ia_Invalid }, + /* 74 */ { 0, &Ia_Invalid }, + /* 75 */ { 0, &Ia_Invalid }, + /* 76 */ { 0, &Ia_Invalid }, + /* 77 */ { 0, &Ia_Invalid }, + /* 78 */ { 0, &Ia_Invalid }, + /* 79 */ { 0, &Ia_Invalid }, + /* 7A */ { 0, &Ia_Invalid }, + /* 7B */ { 0, &Ia_Invalid }, + /* 7C */ { 0, &Ia_Invalid }, + /* 7D */ { 0, &Ia_Invalid }, + /* 7E */ { 0, &Ia_Invalid }, + /* 7F */ { 0, &Ia_Invalid }, + /* 80 */ { 0, &Ia_Invalid }, + /* 81 */ { 0, &Ia_Invalid }, + /* 82 */ { 0, &Ia_Invalid }, + /* 83 */ { 0, &Ia_Invalid }, + /* 84 */ { 0, &Ia_Invalid }, + /* 85 */ { 0, &Ia_Invalid }, + /* 86 */ { 0, &Ia_Invalid }, + /* 87 */ { 0, &Ia_Invalid }, + /* 88 */ { 0, &Ia_Invalid }, + /* 89 */ { 0, &Ia_Invalid }, + /* 8A */ { 0, &Ia_Invalid }, + /* 8B */ { 0, &Ia_Invalid }, + /* 8C */ { 0, &Ia_Invalid }, + /* 8D */ { 0, &Ia_Invalid }, + /* 8E */ { 0, &Ia_Invalid }, + /* 8F */ { 0, &Ia_Invalid }, + /* 90 */ { 0, &Ia_Invalid }, + /* 91 */ { 0, &Ia_Invalid }, + /* 92 */ { 0, &Ia_Invalid }, + /* 93 */ { 0, &Ia_Invalid }, + /* 94 */ { 0, &Ia_Invalid }, + /* 95 */ { 0, &Ia_Invalid }, + /* 96 */ { 0, &Ia_Invalid }, + /* 97 */ { 0, &Ia_Invalid }, + /* 98 */ { 0, &Ia_Invalid }, + /* 99 */ { 0, &Ia_Invalid }, + /* 9A */ { 0, &Ia_Invalid }, + /* 9B */ { 0, &Ia_Invalid }, + /* 9C */ { 0, &Ia_Invalid }, + /* 9D */ { 0, &Ia_Invalid }, + /* 9E */ { 0, &Ia_Invalid }, + /* 9F */ { 0, &Ia_Invalid }, + /* A0 */ { 0, &Ia_Invalid }, + /* A1 */ { 0, &Ia_Invalid }, + /* A2 */ { 0, &Ia_Invalid }, + /* A3 */ { 0, &Ia_Invalid }, + /* A4 */ { 0, &Ia_Invalid }, + /* A5 */ { 0, &Ia_Invalid }, + /* A6 */ { 0, &Ia_Invalid }, + /* A7 */ { 0, &Ia_Invalid }, + /* A8 */ { 0, &Ia_Invalid }, + /* A9 */ { 0, &Ia_Invalid }, + /* AA */ { 0, &Ia_Invalid }, + /* AB */ { 0, &Ia_Invalid }, + /* AC */ { 0, &Ia_Invalid }, + /* AD */ { 0, &Ia_Invalid }, + /* AE */ { 0, &Ia_Invalid }, + /* AF */ { 0, &Ia_Invalid }, + /* B0 */ { 0, &Ia_Invalid }, + /* B1 */ { 0, &Ia_Invalid }, + /* B2 */ { 0, &Ia_Invalid }, + /* B3 */ { 0, &Ia_Invalid }, + /* B4 */ { 0, &Ia_Invalid }, + /* B5 */ { 0, &Ia_Invalid }, + /* B6 */ { 0, &Ia_Invalid }, + /* B7 */ { 0, &Ia_Invalid }, + /* B8 */ { 0, &Ia_Invalid }, + /* B9 */ { 0, &Ia_Invalid }, + /* BA */ { 0, &Ia_Invalid }, + /* BB */ { 0, &Ia_Invalid }, + /* BC */ { 0, &Ia_Invalid }, + /* BD */ { 0, &Ia_Invalid }, + /* BE */ { 0, &Ia_Invalid }, + /* BF */ { 0, &Ia_Invalid }, + /* C0 */ { 0, &Ia_Invalid }, + /* C1 */ { 0, &Ia_Invalid }, + /* C2 */ { 0, &Ia_Invalid }, + /* C3 */ { 0, &Ia_Invalid }, + /* C4 */ { 0, &Ia_Invalid }, + /* C5 */ { 0, &Ia_Invalid }, + /* C6 */ { 0, &Ia_Invalid }, + /* C7 */ { 0, &Ia_Invalid }, + /* C8 */ { 0, &Ia_Invalid }, + /* C9 */ { 0, &Ia_Invalid }, + /* CA */ { 0, &Ia_Invalid }, + /* CB */ { 0, &Ia_Invalid }, + /* CC */ { 0, &Ia_Invalid }, + /* CD */ { 0, &Ia_Invalid }, + /* CE */ { 0, &Ia_Invalid }, + /* CF */ { 0, &Ia_Invalid }, + /* D0 */ { 0, &Ia_Invalid }, + /* D1 */ { 0, &Ia_Invalid }, + /* D2 */ { 0, &Ia_Invalid }, + /* D3 */ { 0, &Ia_Invalid }, + /* D4 */ { 0, &Ia_Invalid }, + /* D5 */ { 0, &Ia_Invalid }, + /* D6 */ { 0, &Ia_Invalid }, + /* D7 */ { 0, &Ia_Invalid }, + /* D8 */ { 0, &Ia_Invalid }, + /* D9 */ { 0, &Ia_Invalid }, + /* DA */ { 0, &Ia_Invalid }, + /* DB */ { 0, &Ia_Invalid }, + /* DC */ { 0, &Ia_Invalid }, + /* DD */ { 0, &Ia_Invalid }, + /* DE */ { 0, &Ia_Invalid }, + /* DF */ { 0, &Ia_Invalid }, + /* E0 */ { 0, &Ia_Invalid }, + /* E1 */ { 0, &Ia_Invalid }, + /* E2 */ { 0, &Ia_Invalid }, + /* E3 */ { 0, &Ia_Invalid }, + /* E4 */ { 0, &Ia_Invalid }, + /* E5 */ { 0, &Ia_Invalid }, + /* E6 */ { 0, &Ia_Invalid }, + /* E7 */ { 0, &Ia_Invalid }, + /* E8 */ { 0, &Ia_Invalid }, + /* E9 */ { 0, &Ia_Invalid }, + /* EA */ { 0, &Ia_Invalid }, + /* EB */ { 0, &Ia_Invalid }, + /* EC */ { 0, &Ia_Invalid }, + /* ED */ { 0, &Ia_Invalid }, + /* EE */ { 0, &Ia_Invalid }, + /* EF */ { 0, &Ia_Invalid }, + /* F0 */ { 0, &Ia_Invalid }, + /* F1 */ { 0, &Ia_Invalid }, + /* F2 */ { 0, &Ia_Invalid }, + /* F3 */ { 0, &Ia_Invalid }, + /* F4 */ { 0, &Ia_Invalid }, + /* F5 */ { 0, &Ia_Invalid }, + /* F6 */ { 0, &Ia_Invalid }, + /* F7 */ { 0, &Ia_Invalid }, + /* F8 */ { 0, &Ia_Invalid }, + /* F9 */ { 0, &Ia_Invalid }, + /* FA */ { 0, &Ia_Invalid }, + /* FB */ { 0, &Ia_Invalid }, + /* FC */ { 0, &Ia_Invalid }, + /* FD */ { 0, &Ia_Invalid }, + /* FE */ { 0, &Ia_Invalid }, + /* FF */ { 0, &Ia_Invalid } +}; diff --git a/Externals/Bochs_disasm/disasm.h b/Externals/Bochs_disasm/disasm.h index 0bf21e8cfb..8b15003880 100644 --- a/Externals/Bochs_disasm/disasm.h +++ b/Externals/Bochs_disasm/disasm.h @@ -1,3 +1,26 @@ +///////////////////////////////////////////////////////////////////////// +// $Id: disasm.h 12420 2014-07-18 11:14:25Z sshwarts $ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (c) 2005-2014 Stanislav Shwartsman +// Written by Stanislav Shwartsman [sshwarts at sourceforge net] +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// +///////////////////////////////////////////////////////////////////////// + #ifndef _BX_DISASM_H_ #define _BX_DISASM_H_ @@ -15,23 +38,61 @@ base = sib_byte & 0x07; \ } -// will be used in future -#define IA_286 0x00000001 /* 286+ instruction */ -#define IA_386 0x00000002 /* 386+ instruction */ -#define IA_486 0x00000004 /* 486+ instruction */ -#define IA_PENTIUM 0x00000008 /* Pentium+ instruction */ -#define IA_P6 0x00000010 /* P6 new instruction */ -#define IA_SYSTEM 0x00000020 /* system instruction (require CPL=0) */ -#define IA_LEGACY 0x00000040 /* legacy instruction */ -#define IA_X87 0x00000080 /* FPU (X87) instruction */ -#define IA_MMX 0x00000100 /* MMX instruction */ -#define IA_3DNOW 0x00000200 /* 3DNow! instruction */ -#define IA_PREFETCH 0x00000400 /* Prefetch instruction */ -#define IA_SSE 0x00000800 /* SSE instruction */ -#define IA_SSE2 0x00001000 /* SSE2 instruction */ -#define IA_SSE3 0x00002000 /* SSE3 instruction */ -#define IA_SSE4 0x00004000 /* SSE4 instruction */ -#define IA_X86_64 0x00008000 /* x86-64 instruction */ +/* Instruction set attributes (duplicated in cpu.h) */ +#define IA_X87 (BX_CONST64(1) << 0) /* FPU (X87) instruction */ +#define IA_486 (BX_CONST64(1) << 1) /* 486 new instruction */ +#define IA_PENTIUM (BX_CONST64(1) << 2) /* Pentium new instruction */ +#define IA_P6 (BX_CONST64(1) << 3) /* P6 new instruction */ +#define IA_MMX (BX_CONST64(1) << 4) /* MMX instruction */ +#define IA_3DNOW (BX_CONST64(1) << 5) /* 3DNow! instruction (AMD) */ +#define IA_SYSCALL_SYSRET (BX_CONST64(1) << 6) /* SYSCALL/SYSRET in legacy mode (AMD) */ +#define IA_SYSENTER_SYSEXIT (BX_CONST64(1) << 7) /* SYSENTER/SYSEXIT instruction */ +#define IA_CLFLUSH (BX_CONST64(1) << 8) /* CLFLUSH instruction */ +#define IA_SSE (BX_CONST64(1) << 9) /* SSE instruction */ +#define IA_SSE2 (BX_CONST64(1) << 10) /* SSE2 instruction */ +#define IA_SSE3 (BX_CONST64(1) << 11) /* SSE3 instruction */ +#define IA_SSSE3 (BX_CONST64(1) << 12) /* SSSE3 instruction */ +#define IA_SSE4_1 (BX_CONST64(1) << 13) /* SSE4_1 instruction */ +#define IA_SSE4_2 (BX_CONST64(1) << 14) /* SSE4_2 instruction */ +#define IA_POPCNT (BX_CONST64(1) << 15) /* POPCNT instruction */ +#define IA_MONITOR_MWAIT (BX_CONST64(1) << 16) /* MONITOR/MWAIT instruction */ +#define IA_VMX (BX_CONST64(1) << 17) /* VMX instruction */ +#define IA_SMX (BX_CONST64(1) << 18) /* SMX instruction */ +#define IA_LM_LAHF_SAHF (BX_CONST64(1) << 19) /* Long Mode LAHF/SAHF instruction */ +#define IA_CMPXCHG16B (BX_CONST64(1) << 20) /* CMPXCHG16B instruction */ +#define IA_RDTSCP (BX_CONST64(1) << 21) /* RDTSCP instruction */ +#define IA_XSAVE (BX_CONST64(1) << 22) /* XSAVE/XRSTOR extensions instruction */ +#define IA_XSAVEOPT (BX_CONST64(1) << 23) /* XSAVEOPT instruction */ +#define IA_AES_PCLMULQDQ (BX_CONST64(1) << 24) /* AES+PCLMULQDQ instruction */ +#define IA_MOVBE (BX_CONST64(1) << 25) /* MOVBE Intel Atom(R) instruction */ +#define IA_FSGSBASE (BX_CONST64(1) << 26) /* FS/GS BASE access instruction */ +#define IA_INVPCID (BX_CONST64(1) << 27) /* INVPCID instruction */ +#define IA_AVX (BX_CONST64(1) << 28) /* AVX instruction */ +#define IA_AVX2 (BX_CONST64(1) << 29) /* AVX2 instruction */ +#define IA_AVX_F16C (BX_CONST64(1) << 30) /* AVX F16 convert instruction */ +#define IA_AVX_FMA (BX_CONST64(1) << 31) /* AVX FMA instruction */ +#define IA_SSE4A (BX_CONST64(1) << 32) /* SSE4A instruction (AMD) */ +#define IA_LZCNT (BX_CONST64(1) << 33) /* LZCNT instruction */ +#define IA_BMI1 (BX_CONST64(1) << 34) /* BMI1 instruction */ +#define IA_BMI2 (BX_CONST64(1) << 35) /* BMI2 instruction */ +#define IA_FMA4 (BX_CONST64(1) << 36) /* FMA4 instruction (AMD) */ +#define IA_XOP (BX_CONST64(1) << 37) /* XOP instruction (AMD) */ +#define IA_TBM (BX_CONST64(1) << 38) /* TBM instruction (AMD) */ +#define IA_SVM (BX_CONST64(1) << 39) /* SVM instruction (AMD) */ +#define IA_RDRAND (BX_CONST64(1) << 40) /* RDRAND instruction */ +#define IA_ADX (BX_CONST64(1) << 41) /* ADCX/ADOX instruction */ +#define IA_SMAP (BX_CONST64(1) << 42) /* SMAP support */ +#define IA_RDSEED (BX_CONST64(1) << 43) /* RDSEED instruction */ +#define IA_SHA (BX_CONST64(1) << 44) /* SHA instruction */ +#define IA_AVX512 (BX_CONST64(1) << 45) /* AVX-512 instruction */ +#define IA_AVX512_CD (BX_CONST64(1) << 46) /* AVX-512 Conflict Detection instruction */ +#define IA_AVX512_PF (BX_CONST64(1) << 47) /* AVX-512 Sparse Prefetch instruction */ +#define IA_AVX512_ER (BX_CONST64(1) << 48) /* AVX-512 Exponential/Reciprocal instruction */ +#define IA_AVX512_DQ (BX_CONST64(1) << 49) /* AVX-512DQ instruction */ +#define IA_AVX512_BW (BX_CONST64(1) << 50) /* AVX-512 Byte/Word instruction */ +#define IA_CLFLUSHOPT (BX_CONST64(1) << 51) /* CLFLUSHOPT instruction */ +#define IA_XSAVEC (BX_CONST64(1) << 52) /* XSAVEC instruction */ +#define IA_XSAVES (BX_CONST64(1) << 53) /* XSAVES instruction */ /* general purpose bit register */ enum { @@ -70,6 +131,8 @@ struct BxDisasmOpcodeInfo_t BxDisasmPtr_t Operand1; BxDisasmPtr_t Operand2; BxDisasmPtr_t Operand3; + BxDisasmPtr_t Operand4; + Bit64u Feature; }; struct BxDisasmOpcodeTable_t @@ -82,26 +145,27 @@ struct BxDisasmOpcodeTable_t #define NO_SEG_OVERRIDE 0xFF // datasize attributes -#define X_SIZE 0x0000 -#define B_SIZE 0x0100 -#define W_SIZE 0x0200 -#define D_SIZE 0x0300 -#define Q_SIZE 0x0400 -#define Z_SIZE 0x0500 -#define V_SIZE 0x0600 -#define O_SIZE 0x0700 -#define T_SIZE 0x0800 -#define P_SIZE 0x0900 +#define X_SIZE 0x00 /* no size */ +#define B_SIZE 0x01 /* byte */ +#define W_SIZE 0x02 /* word */ +#define D_SIZE 0x03 /* double word */ +#define Q_SIZE 0x04 /* quad word */ +#define Z_SIZE 0x05 /* double word in 32-bit mode, quad word in 64-bit mode */ +#define T_SIZE 0x06 /* 10-byte x87 floating point */ +#define XMM_SIZE 0x07 /* double quad word (XMM) */ +#define YMM_SIZE 0x08 /* quadruple quad word (YMM) */ + +#define VSIB_Index 0x80 // branch hint attribute #define BRANCH_HINT 0x1000 -struct x86_insn +struct x86_insn { public: x86_insn(bx_bool is32, bx_bool is64); - bx_bool is_seg_override() const { + bx_bool is_seg_override() const { return (seg_override != NO_SEG_OVERRIDE); } @@ -113,15 +177,25 @@ public: Bit8u extend8b; Bit8u rex_r, rex_x, rex_b; Bit8u seg_override; - unsigned b1, prefixes; + unsigned b1; unsigned ilen; +#define BX_AVX_VL128 0 +#define BX_AVX_VL256 1 + Bit8u vex_vvv, vex_l, vex_w; + int is_vex; // 0 - no VEX used, 1 - VEX is used, -1 - invalid VEX + int is_evex; // 0 - no EVEX used, 1 - EVEX is used, -1 - invalid EVEX + int is_xop; // 0 - no XOP used, 1 - XOP is used, -1 - invalid XOP Bit8u modrm, mod, nnn, rm; Bit8u sib, scale, index, base; union { Bit16u displ16; Bit32u displ32; } displacement; + + bx_bool evex_b; + bx_bool evex_z; + unsigned evex_ll_rc; }; BX_CPP_INLINE x86_insn::x86_insn(bx_bool is32, bx_bool is64) @@ -145,48 +219,60 @@ BX_CPP_INLINE x86_insn::x86_insn(bx_bool is32, bx_bool is64) extend8b = 0; rex_r = rex_b = rex_x = 0; seg_override = NO_SEG_OVERRIDE; - prefixes = 0; ilen = 0; b1 = 0; + is_vex = 0; + is_evex = 0; + is_xop = 0; + vex_vvv = 0; + vex_l = BX_AVX_VL128; + vex_w = 0; modrm = mod = nnn = rm = 0; sib = scale = index = base = 0; displacement.displ32 = 0; + + evex_b = 0; + evex_ll_rc = 0; + evex_z = 0; } class disassembler { public: - disassembler() { set_syntax_intel(); } + disassembler(): offset_mode_hex(0), print_mem_datasize(1) { set_syntax_intel(); } - unsigned disasm(bx_bool is_32, bx_bool is_64, bx_address base, bx_address ip, const Bit8u *instr, char *disbuf); + unsigned disasm(bx_bool is_32, bx_bool is_64, bx_address cs_base, bx_address ip, const Bit8u *instr, char *disbuf); - unsigned disasm16(bx_address base, bx_address ip, const Bit8u *instr, char *disbuf) - { return disasm(0, 0, base, ip, instr, disbuf); } + unsigned disasm16(bx_address cs_base, bx_address ip, const Bit8u *instr, char *disbuf) + { return disasm(0, 0, cs_base, ip, instr, disbuf); } - unsigned disasm32(bx_address base, bx_address ip, const Bit8u *instr, char *disbuf) - { return disasm(1, 0, base, ip, instr, disbuf); } + unsigned disasm32(bx_address cs_base, bx_address ip, const Bit8u *instr, char *disbuf) + { return disasm(1, 0, cs_base, ip, instr, disbuf); } - unsigned disasm64(bx_address base, bx_address ip, const Bit8u *instr, char *disbuf) - { return disasm(1, 1, base, ip, instr, disbuf); } + unsigned disasm64(bx_address cs_base, bx_address ip, const Bit8u *instr, char *disbuf) + { return disasm(1, 1, cs_base, ip, instr, disbuf); } - x86_insn decode(bx_bool is_32, bx_bool is_64, bx_address base, bx_address ip, const Bit8u *instr, char *disbuf); + x86_insn decode(bx_bool is_32, bx_bool is_64, bx_address cs_base, bx_address ip, const Bit8u *instr, char *disbuf); - x86_insn decode16(bx_address base, bx_address ip, const Bit8u *instr, char *disbuf) - { return decode(0, 0, base, ip, instr, disbuf); } + x86_insn decode16(bx_address cs_base, bx_address ip, const Bit8u *instr, char *disbuf) + { return decode(0, 0, cs_base, ip, instr, disbuf); } - x86_insn decode32(bx_address base, bx_address ip, const Bit8u *instr, char *disbuf) - { return decode(1, 0, base, ip, instr, disbuf); } + x86_insn decode32(bx_address cs_base, bx_address ip, const Bit8u *instr, char *disbuf) + { return decode(1, 0, cs_base, ip, instr, disbuf); } - x86_insn decode64(bx_address base, bx_address ip, const Bit8u *instr, char *disbuf) - { return decode(1, 1, base, ip, instr, disbuf); } + x86_insn decode64(bx_address cs_base, bx_address ip, const Bit8u *instr, char *disbuf) + { return decode(1, 1, cs_base, ip, instr, disbuf); } void set_syntax_intel(); - void set_syntax_att (); + void set_syntax_att(); + + void set_offset_mode_hex(bx_bool mode) { offset_mode_hex = mode; } + void set_mem_datasize_print(bx_bool mode) { print_mem_datasize = mode; } void toggle_syntax_mode(); private: - bx_bool intel_mode; + bx_bool intel_mode, offset_mode_hex, print_mem_datasize; const char **general_16bit_regname; const char **general_8bit_regname; @@ -196,16 +282,16 @@ private: const char **segment_name; const char **index16; + const char **vector_reg_name; - const char *sreg_mod01or10_rm32[8]; - const char *sreg_mod00_base32[8]; - const char *sreg_mod01or10_base32[8]; + const char *sreg_mod00_base32[16]; + const char *sreg_mod01or10_base32[16]; const char *sreg_mod00_rm16[8]; const char *sreg_mod01or10_rm16[8]; private: - bx_address db_eip, db_base; + bx_address db_eip, db_cs_base; const Bit8u *instruction; // for fetching of next byte of instruction @@ -250,6 +336,9 @@ private: void dis_putc(char symbol); void dis_sprintf(const char *fmt, ...); void decode_modrm(x86_insn *insn); + unsigned decode_vex(x86_insn *insn); + unsigned decode_evex(x86_insn *insn); + unsigned decode_xop(x86_insn *insn); void resolve16_mod0 (const x86_insn *insn, unsigned mode); void resolve16_mod1or2(const x86_insn *insn, unsigned mode); @@ -268,85 +357,88 @@ private: void initialize_modrm_segregs(); - void print_datasize (unsigned mode); + void print_datasize(unsigned mode); void print_memory_access16(int datasize, const char *seg, const char *index, Bit16u disp); - void print_memory_access (int datasize, - const char *seg, const char *base, const char *index, int scale, Bit32u disp); + void print_memory_access32(int datasize, + const char *seg, const char *base, const char *index, int scale, Bit32s disp); + void print_memory_access64(int datasize, + const char *seg, const char *base, const char *index, int scale, Bit32s disp); void print_disassembly_intel(const x86_insn *insn, const BxDisasmOpcodeInfo_t *entry); void print_disassembly_att (const x86_insn *insn, const BxDisasmOpcodeInfo_t *entry); public: -/* +/* * Codes for Addressing Method: * --------------------------- - * A - Direct address. The instruction has no ModR/M byte; the address - * of the operand is encoded in the instruction; and no base register, + * A - Direct address. The instruction has no ModR/M byte; the address + * of the operand is encoded in the instruction; and no base register, * index register, or scaling factor can be applied. * C - The reg field of the ModR/M byte selects a control register. * D - The reg field of the ModR/M byte selects a debug register. - * E - A ModR/M byte follows the opcode and specifies the operand. The - * operand is either a general-purpose register or a memory address. - * If it is a memory address, the address is computed from a segment - * register and any of the following values: a base register, an - * index register, a scaling factor, a displacement. + * E - A ModR/M byte follows the opcode and specifies the operand. The + * operand is either a general-purpose register or a memory address. + * In case of the register operand, the R/M field of the ModR/M byte + * selects a general register. * F - Flags Register. * G - The reg field of the ModR/M byte selects a general register. - * I - Immediate data. The operand value is encoded in subsequent bytes of + * I - Immediate data. The operand value is encoded in subsequent bytes of * the instruction. - * J - The instruction contains a relative offset to be added to the + * J - The instruction contains a relative offset to be added to the * instruction pointer register. * M - The ModR/M byte may refer only to memory. - * N - The R/M field of the ModR/M byte selects a packed-quadword MMX + * N - The R/M field of the ModR/M byte selects a packed-quadword MMX technology register. - * O - The instruction has no ModR/M byte; the offset of the operand is - * coded as a word or double word (depending on address size attribute) - * in the instruction. No base register, index register, or scaling + * O - The instruction has no ModR/M byte; the offset of the operand is + * coded as a word or double word (depending on address size attribute) + * in the instruction. No base register, index register, or scaling * factor can be applied. - * P - The reg field of the ModR/M byte selects a packed quadword MMX + * P - The reg field of the ModR/M byte selects a packed quadword MMX * technology register. - * Q - A ModR/M byte follows the opcode and specifies the operand. The - * operand is either an MMX technology register or a memory address. - * If it is a memory address, the address is computed from a segment - * register and any of the following values: a base register, an + * Q - A ModR/M byte follows the opcode and specifies the operand. The + * operand is either an MMX technology register or a memory address. + * If it is a memory address, the address is computed from a segment + * register and any of the following values: a base register, an * index register, a scaling factor, and a displacement. * R - The mod field of the ModR/M byte may refer only to a general register. * S - The reg field of the ModR/M byte selects a segment register. - * U - The R/M field of the ModR/M byte selects a 128-bit XMM register. * T - The reg field of the ModR/M byte selects a test register. - * V - The reg field of the ModR/M byte selects a 128-bit XMM register. - * W - A ModR/M byte follows the opcode and specifies the operand. The - * operand is either a 128-bit XMM register or a memory address. If - * it is a memory address, the address is computed from a segment + * U - The R/M field of the ModR/M byte selects a 128-bit XMM/256-bit YMM register. + * V - The reg field of the ModR/M byte selects a 128-bit XMM/256-bit YMM register. + * W - A ModR/M byte follows the opcode and specifies the operand. The + * operand is either a 128-bit XMM/256-bit YMM register or a memory address. + * If it is a memory address, the address is computed from a segment * register and any of the following values: a base register, an * index register, a scaling factor, and a displacement. * X - Memory addressed by the DS:rSI register pair. * Y - Memory addressed by the ES:rDI register pair. - */ + */ -/* +/* * Codes for Operand Type: * ---------------------- - * a - Two one-word operands in memory or two double-word operands in + * a - Two one-word operands in memory or two double-word operands in * memory, depending on operand-size attribute (used only by the BOUND * instruction). * b - Byte, regardless of operand-size attribute. * d - Doubleword, regardless of operand-size attribute. * dq - Double-quadword, regardless of operand-size attribute. * p - 32-bit or 48-bit pointer, depending on operand-size attribute. - * pd - 128-bit packed double-precision floating-point data. + * pd - 128-bit/256-bit packed double-precision floating-point data. * pi - Quadword MMX technology register (packed integer) - * ps - 128-bit packed single-precision floating-point data. + * ps - 128-bit/256-bit packed single-precision floating-point data. * q - Quadword, regardless of operand-size attribute. * s - 6-byte or 10-byte pseudo-descriptor. * si - Doubleword integer register (scalar integer) - * ss - Scalar element of a 128-bit packed single-precision floating data. - * sd - Scalar element of a 128-bit packed double-precision floating data. + * ss - Scalar element of a packed single-precision floating data. + * sd - Scalar element of a packed double-precision floating data. * v - Word, doubleword or quadword, depending on operand-size attribute. * w - Word, regardless of operand-size attr. + * y - Doubleword or quadword (in 64-bit mode) depending on 32/64 bit + * operand size. */ // far call/jmp @@ -354,18 +446,19 @@ public: void Apd(const x86_insn *insn); // 8-bit general purpose registers - void AL(const x86_insn *insn); - void CL(const x86_insn *insn); + void AL_Reg(const x86_insn *insn); + void CL_Reg(const x86_insn *insn); // 16-bit general purpose registers - void AX(const x86_insn *insn); - void DX(const x86_insn *insn); + void AX_Reg(const x86_insn *insn); + void DX_Reg(const x86_insn *insn); // 32-bit general purpose registers - void EAX(const x86_insn *insn); + void EAX_Reg(const x86_insn *insn); // 64-bit general purpose registers - void RAX(const x86_insn *insn); + void RAX_Reg(const x86_insn *insn); + void RCX_Reg(const x86_insn *insn); // segment registers void CS(const x86_insn *insn); @@ -378,9 +471,6 @@ public: // segment registers void Sw(const x86_insn *insn); - // test registers - void Td(const x86_insn *insn); - // control register void Cd(const x86_insn *insn); void Cq(const x86_insn *insn); @@ -390,7 +480,7 @@ public: void Dq(const x86_insn *insn); // 8-bit general purpose register - void R8(const x86_insn *insn); + void Reg8(const x86_insn *insn); // 16-bit general purpose register void RX(const x86_insn *insn); @@ -406,12 +496,20 @@ public: void Ew(const x86_insn *insn); void Ed(const x86_insn *insn); void Eq(const x86_insn *insn); + void Ey(const x86_insn *insn); + void Ebd(const x86_insn *insn); + void Ewd(const x86_insn *insn); + void Edq(const x86_insn *insn); // general purpose register void Gb(const x86_insn *insn); void Gw(const x86_insn *insn); void Gd(const x86_insn *insn); void Gq(const x86_insn *insn); + void Gy(const x86_insn *insn); + + // vex encoded general purpose register + void By(const x86_insn *insn); // immediate void I1(const x86_insn *insn); @@ -420,7 +518,8 @@ public: void Id(const x86_insn *insn); void Iq(const x86_insn *insn); - // two immediates Iw/Ib + // double immediate + void IbIb(const x86_insn *insn); void IwIb(const x86_insn *insn); // sign extended immediate @@ -437,6 +536,7 @@ public: void Rw(const x86_insn *insn); void Rd(const x86_insn *insn); void Rq(const x86_insn *insn); + void Ry(const x86_insn *insn); // mmx register void Pq(const x86_insn *insn); @@ -447,22 +547,39 @@ public: void Vq(const x86_insn *insn); void Nq(const x86_insn *insn); - // xmm register + // xmm/ymm register + void Ups(const x86_insn *insn); + void Upd(const x86_insn *insn); void Udq(const x86_insn *insn); + void Uq(const x86_insn *insn); + void Vdq(const x86_insn *insn); void Vss(const x86_insn *insn); void Vsd(const x86_insn *insn); void Vps(const x86_insn *insn); void Vpd(const x86_insn *insn); + // xmm/ymm register through imm byte + void VIb(const x86_insn *insn); - // xmm register or memory operand + // xmm/ymm register or memory operand + void Wb(const x86_insn *insn); + void Ww(const x86_insn *insn); + void Wd(const x86_insn *insn); void Wq(const x86_insn *insn); + void Wdq(const x86_insn *insn); void Wss(const x86_insn *insn); void Wsd(const x86_insn *insn); void Wps(const x86_insn *insn); void Wpd(const x86_insn *insn); + // vex encoded xmm/ymm register + void Hdq(const x86_insn *insn); + void Hps(const x86_insn *insn); + void Hpd(const x86_insn *insn); + void Hss(const x86_insn *insn); + void Hsd(const x86_insn *insn); + // direct memory access void OP_O(const x86_insn *insn, unsigned size); void Ob(const x86_insn *insn); @@ -484,6 +601,11 @@ public: void Mdq(const x86_insn *insn); void Mps(const x86_insn *insn); void Mpd(const x86_insn *insn); + void Mss(const x86_insn *insn); + void Msd(const x86_insn *insn); + + // gather VSib + void VSib(const x86_insn *insn); // string instructions void OP_X(const x86_insn *insn, unsigned size); @@ -499,6 +621,11 @@ public: void Yd(const x86_insn *insn); void Yq(const x86_insn *insn); + // maskmovdq/maskmovdqu + void OP_sY(const x86_insn *insn, unsigned size); + void sYq(const x86_insn *insn); + void sYdq(const x86_insn *insn); + // jump offset void Jb(const x86_insn *insn); void Jw(const x86_insn *insn); diff --git a/Externals/Bochs_disasm/opcodes.inc b/Externals/Bochs_disasm/opcodes.inc new file mode 100644 index 0000000000..d58bf6e11a --- /dev/null +++ b/Externals/Bochs_disasm/opcodes.inc @@ -0,0 +1,1903 @@ +///////////////////////////////////////////////////////////////////////// +// $Id: opcodes.inc 12247 2014-03-17 20:29:44Z sshwarts $ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (c) 2005-2013 Stanislav Shwartsman +// Written by Stanislav Shwartsman [sshwarts at sourceforge net] +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// +///////////////////////////////////////////////////////////////////////// + +Ia_aaa = { "aaa", "aaa", XX, XX, XX, XX, 0 }, +Ia_aad = { "aad", "aad", Ib, XX, XX, XX, 0 }, +Ia_aam = { "aam", "aam", Ib, XX, XX, XX, 0 }, +Ia_aas = { "aas", "aas", XX, XX, XX, XX, 0 }, +Ia_adcb_AL_Ib = { "adc", "adcb", AL_Reg, Ib, XX, XX, 0 }, +Ia_adcb_Eb_Gb = { "adc", "adcb", Eb, Gb, XX, XX, 0 }, +Ia_adcb_Eb_Ib = { "adc", "adcb", Eb, Ib, XX, XX, 0 }, +Ia_adcb_Gb_Eb = { "adc", "adcb", Gb, Eb, XX, XX, 0 }, +Ia_adcl_EAX_Id = { "adc", "adcl", EAX_Reg, Id, XX, XX, 0 }, +Ia_adcl_Ed_Gd = { "adc", "adcl", Ed, Gd, XX, XX, 0 }, +Ia_adcl_Ed_Id = { "adc", "adcl", Ed, Id, XX, XX, 0 }, +Ia_adcl_Ed_sIb = { "adc", "adcl", Ed, sIbd, XX, XX, 0 }, +Ia_adcl_Gd_Ed = { "adc", "adcl", Gd, Ed, XX, XX, 0 }, +Ia_adcq_Eq_Gq = { "adc", "adcq", Eq, Gq, XX, XX, 0 }, +Ia_adcq_Eq_sIb = { "adc", "adcq", Eq, sIbq, XX, XX, 0 }, +Ia_adcq_Eq_sId = { "adc", "adcq", Eq, Iq, XX, XX, 0 }, +Ia_adcq_Gq_Eq = { "adc", "adcq", Gq, Eq, XX, XX, 0 }, +Ia_adcq_RAX_sId = { "adc", "adcq", RAX_Reg, sIdq, XX, XX, 0 }, +Ia_adcw_AX_Iw = { "adc", "adcw", AX_Reg, Iw, XX, XX, 0 }, +Ia_adcw_Ew_Gw = { "adc", "adcw", Ew, Gw, XX, XX, 0 }, +Ia_adcw_Ew_Iw = { "adc", "adcw", Ew, Iw, XX, XX, 0 }, +Ia_adcw_Ew_sIb = { "adc", "adcw", Ew, sIbw, XX, XX, 0 }, +Ia_adcw_Gw_Ew = { "adc", "adcw", Gw, Ew, XX, XX, 0 }, +Ia_adcx_Gd_Ed = { "adcx", "adcxd", Gd, Ed, XX, XX, IA_ADX }, +Ia_adcx_Gq_Eq = { "adcx", "adcxq", Gq, Eq, XX, XX, IA_ADX }, +Ia_addb_AL_Ib = { "add", "addb", AL_Reg, Ib, XX, XX, 0 }, +Ia_addb_Eb_Gb = { "add", "addb", Eb, Gb, XX, XX, 0 }, +Ia_addb_Eb_Ib = { "add", "addb", Eb, Ib, XX, XX, 0 }, +Ia_addb_Gb_Eb = { "add", "addb", Gb, Eb, XX, XX, 0 }, +Ia_addl_EAX_Id = { "add", "addl", EAX_Reg, Id, XX, XX, 0 }, +Ia_addl_Ed_Gd = { "add", "addl", Ed, Gd, XX, XX, 0 }, +Ia_addl_Ed_Id = { "add", "addl", Ed, Id, XX, XX, 0 }, +Ia_addl_Ed_sIb = { "add", "addl", Ed, sIbd, XX, XX, 0 }, +Ia_addl_Gd_Ed = { "add", "addl", Gd, Ed, XX, XX, 0 }, +Ia_addpd_Vpd_Wpd = { "addpd", "addpd", Vpd, Wpd, XX, XX, IA_SSE2 }, +Ia_addps_Vps_Wps = { "addps", "addps", Vps, Wps, XX, XX, IA_SSE }, +Ia_addq_Eq_Gq = { "add", "addq", Eq, Gq, XX, XX, 0 }, +Ia_addq_Eq_sIb = { "add", "addq", Eq, sIbq, XX, XX, 0 }, +Ia_addq_Eq_sId = { "add", "addq", Eq, sIdq, XX, XX, 0 }, +Ia_addq_Gq_Eq = { "add", "addq", Gq, Eq, XX, XX, 0 }, +Ia_addq_RAX_sId = { "add", "addq", RAX_Reg, sIdq, XX, XX, 0 }, +Ia_addsd_Vsd_Wsd = { "addsd", "addsd", Vsd, Wsd, XX, XX, IA_SSE2 }, +Ia_addss_Vss_Wss = { "addss", "addss", Vss, Wss, XX, XX, IA_SSE }, +Ia_addsubpd_Vpd_Wpd = { "addsubpd", "addsubpd", Vpd, Wpd, XX, XX, IA_SSE3 }, +Ia_addsubps_Vps_Wps = { "addsubps", "addsubps", Vps, Wps, XX, XX, IA_SSE3 }, +Ia_addw_AX_Iw = { "add", "addw", AX_Reg, Iw, XX, XX, 0 }, +Ia_addw_Ew_Gw = { "add", "addw", Ew, Gw, XX, XX, 0 }, +Ia_addw_Ew_Iw = { "add", "addw", Ew, Iw, XX, XX, 0 }, +Ia_addw_Ew_sIb = { "add", "addw", Ew, sIbw, XX, XX, 0 }, +Ia_addw_Gw_Ew = { "add", "addw", Gw, Ew, XX, XX, 0 }, +Ia_adox_Gd_Ed = { "adox", "adoxd", Gd, Ed, XX, XX, IA_ADX }, +Ia_adox_Gq_Eq = { "adox", "adoxq", Gq, Eq, XX, XX, IA_ADX }, +Ia_aesdec_Vdq_Wdq = { "aesdec", "aesdec", Vdq, Wdq, XX, XX, IA_AES_PCLMULQDQ }, +Ia_aesdeclast_Vdq_Wdq = { "aesdeclast", "aesdeclast", Vdq, Wdq, XX, XX, IA_AES_PCLMULQDQ }, +Ia_aesenc_Vdq_Wdq = { "aesenc", "aesenc", Vdq, Wdq, XX, XX, IA_AES_PCLMULQDQ }, +Ia_aesenclast_Vdq_Wdq = { "aesenclast", "aesenclast", Vdq, Wdq, XX, XX, IA_AES_PCLMULQDQ }, +Ia_aesimc_Vdq_Wdq = { "aesimc", "aesimc", Vdq, Wdq, XX, XX, IA_AES_PCLMULQDQ }, +Ia_aeskeygenassist_Vdq_Wdq_Ib = { "aeskeygenassist", "aeskeygenassist", Vdq, Wdq, Ib, XX, IA_AES_PCLMULQDQ }, +Ia_andb_AL_Ib = { "and", "andb", AL_Reg, Ib, XX, XX, 0 }, +Ia_andb_Eb_Gb = { "and", "andb", Eb, Gb, XX, XX, 0 }, +Ia_andb_Eb_Ib = { "and", "andb", Eb, Ib, XX, XX, 0 }, +Ia_andb_Gb_Eb = { "and", "andb", Gb, Eb, XX, XX, 0 }, +Ia_andl_EAX_Id = { "and", "andl", EAX_Reg, Id, XX, XX, 0 }, +Ia_andl_Ed_Gd = { "and", "andl", Ed, Gd, XX, XX, 0 }, +Ia_andl_Ed_Id = { "and", "andl", Ed, Id, XX, XX, 0 }, +Ia_andl_Ed_sIb = { "and", "andl", Ed, sIbd, XX, XX, 0 }, +Ia_andl_Gd_Ed = { "and", "andl", Gd, Ed, XX, XX, 0 }, +Ia_andn_Gy_By_Ey = { "andn", "andn", Gy, By, Ey, XX, IA_BMI1 }, +Ia_andnpd_Vpd_Wpd = { "andnpd", "andnpd", Vpd, Wpd, XX, XX, IA_SSE2 }, +Ia_andnps_Vps_Wps = { "andnps", "andnps", Vps, Wps, XX, XX, IA_SSE }, +Ia_andpd_Vpd_Wpd = { "andpd", "andpd", Vpd, Wpd, XX, XX, IA_SSE2 }, +Ia_andps_Vps_Wps = { "andps", "andps", Vps, Wps, XX, XX, IA_SSE }, +Ia_andq_Eq_Gq = { "and", "andq", Eq, Gq, XX, XX, 0 }, +Ia_andq_Eq_sIb = { "and", "andq", Eq, sIbq, XX, XX, 0 }, +Ia_andq_Eq_sId = { "and", "andq", Eq, sIdq, XX, XX, 0 }, +Ia_andq_Gq_Eq = { "and", "andq", Gq, Eq, XX, XX, 0 }, +Ia_andq_RAX_sId = { "and", "andq", RAX_Reg, sIdq, XX, XX, 0 }, +Ia_andw_AX_Iw = { "and", "andw", AX_Reg, Iw, XX, XX, 0 }, +Ia_andw_Ew_Gw = { "and", "andw", Ew, Gw, XX, XX, 0 }, +Ia_andw_Ew_Iw = { "and", "andw", Ew, Iw, XX, XX, 0 }, +Ia_andw_Ew_sIb = { "and", "andw", Ew, sIbw, XX, XX, 0 }, +Ia_andw_Gw_Ew = { "and", "andw", Gw, Ew, XX, XX, 0 }, +Ia_arpl_Ew_Gw = { "arpl", "arpl", Ew, Gw, XX, XX, 0 }, +Ia_bextr_Gy_Ey_By = { "bextr", "bextr", Gy, Ey, By, XX, IA_BMI1 }, +Ia_bextr_Gy_Ey_Id = { "bextr", "bextr", Gy, Ey, Id, XX, IA_TBM }, +Ia_blcfill_By_Ey = { "blcfill", "blcfill", Gy, By, Ey, XX, IA_TBM }, +Ia_blci_By_Ey = { "blci", "blci", Gy, By, Ey, XX, IA_TBM }, +Ia_blcic_By_Ey = { "blcic", "blcic", Gy, By, Ey, XX, IA_TBM }, +Ia_blcmsk_By_Ey = { "blcmsk", "blcmsk", Gy, By, Ey, XX, IA_TBM }, +Ia_blcs_By_Ey = { "blcs", "blcs", Gy, By, Ey, XX, IA_TBM }, +Ia_blendpd_Vpd_Wpd_Ib = { "blendpd", "blendpd", Vpd, Wpd, Ib, XX, IA_SSE4_1 }, +Ia_blendps_Vps_Wps_Ib = { "blendps", "blendps", Vps, Wps, Ib, XX, IA_SSE4_1 }, +Ia_blendvpd_Vpd_Wpd = { "blendvpd", "blendvpd", Vpd, Wpd, XX, XX, IA_SSE4_1 }, +Ia_blendvps_Vps_Wps = { "blendvps", "blendvps", Vps, Wps, XX, XX, IA_SSE4_1 }, +Ia_blsfill_By_Ey = { "blsfill", "blsfill", Gy, By, Ey, XX, IA_TBM }, +Ia_blsi_By_Ey = { "blsi", "blsi", By, Ey, XX, XX, IA_BMI1 }, +Ia_blsic_By_Ey = { "blsic", "blsic", Gy, By, Ey, XX, IA_TBM }, +Ia_blsmsk_By_Ey = { "blsmsk", "blsmsk", By, Ey, XX, XX, IA_BMI1 }, +Ia_blsr_By_Ey = { "blsr", "blsr", By, Ey, XX, XX, IA_BMI1 }, +Ia_boundl_Gd_Ma = { "bound", "boundl", Gd, Ma, XX, XX, 0 }, +Ia_boundw_Gw_Ma = { "bound", "boundw", Gw, Ma, XX, XX, 0 }, +Ia_bsfl_Gd_Ed = { "bsf", "bsfl", Gd, Ed, XX, XX, 0 }, +Ia_bsfq_Gq_Eq = { "bsf", "bsfq", Gq, Eq, XX, XX, 0 }, +Ia_bsfw_Gw_Ew = { "bsf", "bsfw", Gw, Ew, XX, XX, 0 }, +Ia_bsrl_Gd_Ed = { "bsr", "bsrl", Gd, Ed, XX, XX, 0 }, +Ia_bsrq_Gq_Eq = { "bsr", "bsrq", Gq, Eq, XX, XX, 0 }, +Ia_bsrw_Gw_Ew = { "bsr", "bsrw", Gw, Ew, XX, XX, 0 }, +Ia_bswapw_RX = { "bswap", "bswapw", RX, XX, XX, XX, IA_486 }, +Ia_bswapl_ERX = { "bswap", "bswapl", ERX, XX, XX, XX, IA_486 }, +Ia_bswapq_RRX = { "bswap", "bswapq", RRX, XX, XX, XX, 0 }, +Ia_btcl_Ed_Gd = { "btc", "btcl", Ed, Gd, XX, XX, 0 }, +Ia_btcl_Ed_Ib = { "btc", "btcl", Ed, Ib, XX, XX, 0 }, +Ia_btcq_Eq_Gq = { "btc", "btcq", Eq, Gq, XX, XX, 0 }, +Ia_btcq_Eq_Ib = { "btc", "btcq", Eq, Ib, XX, XX, 0 }, +Ia_btcw_Ew_Gw = { "btc", "btcw", Ew, Gw, XX, XX, 0 }, +Ia_btcw_Ew_Ib = { "btc", "btcw", Ew, Ib, XX, XX, 0 }, +Ia_btl_Ed_Gd = { "bt", "btl", Ed, Gd, XX, XX, 0 }, +Ia_btl_Ed_Ib = { "bt", "btl", Ed, Ib, XX, XX, 0 }, +Ia_btq_Eq_Gq = { "bt", "btq", Eq, Gq, XX, XX, 0 }, +Ia_btq_Eq_Ib = { "bt", "btq", Eq, Ib, XX, XX, 0 }, +Ia_btrl_Ed_Gd = { "btr", "btrl", Ed, Gd, XX, XX, 0 }, +Ia_btrl_Ed_Ib = { "btr", "btrl", Ed, Ib, XX, XX, 0 }, +Ia_btrq_Eq_Gq = { "btr", "btrq", Eq, Gq, XX, XX, 0 }, +Ia_btrq_Eq_Ib = { "btr", "btrq", Eq, Ib, XX, XX, 0 }, +Ia_btrw_Ew_Gw = { "btr", "btrw", Ew, Gw, XX, XX, 0 }, +Ia_btrw_Ew_Ib = { "btr", "btrw", Ew, Ib, XX, XX, 0 }, +Ia_btsl_Ed_Gd = { "bts", "btsl", Ed, Gd, XX, XX, 0 }, +Ia_btsl_Ed_Ib = { "bts", "btsl", Ed, Ib, XX, XX, 0 }, +Ia_btsq_Eq_Gq = { "bts", "btsq", Eq, Gq, XX, XX, 0 }, +Ia_btsq_Eq_Ib = { "bts", "btsq", Eq, Ib, XX, XX, 0 }, +Ia_btsw_Ew_Gw = { "bts", "btsw", Ew, Gw, XX, XX, 0 }, +Ia_btsw_Ew_Ib = { "bts", "btsw", Ew, Ib, XX, XX, 0 }, +Ia_btw_Ew_Gw = { "bt", "btw", Ew, Gw, XX, XX, 0 }, +Ia_btw_Ew_Ib = { "bt", "btw", Ew, Ib, XX, XX, 0 }, +Ia_bzhi_Gy_Ey_By = { "bzhi", "bzhi", Gy, Ey, By, XX, IA_BMI2 }, +Ia_call_Ed = { "call", "call", Ed, XX, XX, XX, 0 }, +Ia_call_Eq = { "call", "call", Eq, XX, XX, XX, 0 }, +Ia_call_Ew = { "call", "call", Ew, XX, XX, XX, 0 }, +Ia_call_Jd = { "call", "call", Jd, XX, XX, XX, 0 }, +Ia_call_Jw = { "call", "call", Jw, XX, XX, XX, 0 }, +Ia_cbw = { "cbw", "cbtw", XX, XX, XX, XX, 0 }, +Ia_cdq = { "cdq", "cltd", XX, XX, XX, XX, 0 }, +Ia_cdqe = { "cdqe", "cltq", XX, XX, XX, XX, 0 }, +Ia_clflush = { "clflush", "clflush", Mb, XX, XX, XX, IA_CLFLUSH }, +Ia_clac = { "clac", "clac", XX, XX, XX, XX, IA_SMAP }, +Ia_clc = { "clc", "clc", XX, XX, XX, XX, 0 }, +Ia_cld = { "cld", "cld", XX, XX, XX, XX, 0 }, +Ia_clgi = { "clgi", "clgi", XX, XX, XX, XX, IA_SVM }, +Ia_cli = { "cli", "cli", XX, XX, XX, XX, 0 }, +Ia_clts = { "clts", "clts", XX, XX, XX, XX, 0 }, +Ia_cmc = { "cmc", "cmc", XX, XX, XX, XX, 0 }, +Ia_cmovnbel_Gd_Ed = { "cmovnbe", "cmovnbel", Gd, Ed, XX, XX, IA_P6 }, +Ia_cmovnbeq_Gq_Eq = { "cmovnbe", "cmovnbeq", Gq, Eq, XX, XX, 0 }, +Ia_cmovnbew_Gw_Ew = { "cmovnbe", "cmovnbew", Gw, Ew, XX, XX, IA_P6 }, +Ia_cmovbl_Gd_Ed = { "cmovb", "cmovbl", Gd, Ed, XX, XX, IA_P6 }, +Ia_cmovbq_Gq_Eq = { "cmovb", "cmovbq", Gq, Eq, XX, XX, 0 }, +Ia_cmovbw_Gw_Ew = { "cmovb", "cmovbw", Gw, Ew, XX, XX, IA_P6 }, +Ia_cmovnlel_Gd_Ed = { "cmovnle", "cmovnlel", Gd, Ed, XX, XX, IA_P6 }, +Ia_cmovnleq_Gq_Eq = { "cmovnle", "cmovnleq", Gq, Eq, XX, XX, 0 }, +Ia_cmovnlew_Gw_Ew = { "cmovnle", "cmovnlew", Gw, Ew, XX, XX, IA_P6 }, +Ia_cmovll_Gd_Ed = { "cmovl", "cmovll", Gd, Ed, XX, XX, IA_P6 }, +Ia_cmovlq_Gq_Eq = { "cmovl", "cmovlq", Gq, Eq, XX, XX, 0 }, +Ia_cmovlw_Gw_Ew = { "cmovl", "cmovlw", Gw, Ew, XX, XX, IA_P6 }, +Ia_cmovbel_Gd_Ed = { "cmovbe", "cmovbel", Gd, Ed, XX, XX, IA_P6 }, +Ia_cmovbeq_Gq_Eq = { "cmovbe", "cmovbeq", Gq, Eq, XX, XX, 0 }, +Ia_cmovbew_Gw_Ew = { "cmovbe", "cmovbew", Gw, Ew, XX, XX, IA_P6 }, +Ia_cmovnbl_Gd_Ed = { "cmovnb", "cmovnbl", Gd, Ed, XX, XX, IA_P6 }, +Ia_cmovnbq_Gq_Eq = { "cmovnb", "cmovnbq", Gq, Eq, XX, XX, 0 }, +Ia_cmovnbw_Gw_Ew = { "cmovnb", "cmovnbw", Gw, Ew, XX, XX, IA_P6 }, +Ia_cmovlel_Gd_Ed = { "cmovle", "cmovlel", Gd, Ed, XX, XX, IA_P6 }, +Ia_cmovleq_Gq_Eq = { "cmovle", "cmovleq", Gq, Eq, XX, XX, 0 }, +Ia_cmovlew_Gw_Ew = { "cmovle", "cmovlew", Gw, Ew, XX, XX, IA_P6 }, +Ia_cmovnll_Gd_Ed = { "cmovnl", "cmovnll", Gd, Ed, XX, XX, IA_P6 }, +Ia_cmovnlq_Gq_Eq = { "cmovnl", "cmovnlq", Gq, Eq, XX, XX, 0 }, +Ia_cmovnlw_Gw_Ew = { "cmovnl", "cmovnlw", Gw, Ew, XX, XX, IA_P6 }, +Ia_cmovnol_Gd_Ed = { "cmovno", "cmovnol", Gd, Ed, XX, XX, IA_P6 }, +Ia_cmovnoq_Gq_Eq = { "cmovno", "cmovnoq", Gq, Eq, XX, XX, 0 }, +Ia_cmovnow_Gw_Ew = { "cmovno", "cmovnow", Gw, Ew, XX, XX, IA_P6 }, +Ia_cmovnpl_Gd_Ed = { "cmovnp", "cmovnpl", Gd, Ed, XX, XX, IA_P6 }, +Ia_cmovnpq_Gq_Eq = { "cmovnp", "cmovnpq", Gq, Eq, XX, XX, 0 }, +Ia_cmovnpw_Gw_Ew = { "cmovnp", "cmovnpw", Gw, Ew, XX, XX, IA_P6 }, +Ia_cmovnsl_Gd_Ed = { "cmovns", "cmovnsl", Gd, Ed, XX, XX, IA_P6 }, +Ia_cmovnsq_Gq_Eq = { "cmovns", "cmovnsq", Gq, Eq, XX, XX, 0 }, +Ia_cmovnsw_Gw_Ew = { "cmovns", "cmovnsw", Gw, Ew, XX, XX, IA_P6 }, +Ia_cmovnzl_Gd_Ed = { "cmovnz", "cmovnzl", Gd, Ed, XX, XX, IA_P6 }, +Ia_cmovnzq_Gq_Eq = { "cmovnz", "cmovnzq", Gq, Eq, XX, XX, 0 }, +Ia_cmovnzw_Gw_Ew = { "cmovnz", "cmovnzw", Gw, Ew, XX, XX, IA_P6 }, +Ia_cmovol_Gd_Ed = { "cmovo", "cmovol", Gd, Ed, XX, XX, IA_P6 }, +Ia_cmovoq_Gq_Eq = { "cmovo", "cmovoq", Gq, Eq, XX, XX, 0 }, +Ia_cmovow_Gw_Ew = { "cmovo", "cmovow", Gw, Ew, XX, XX, IA_P6 }, +Ia_cmovpl_Gd_Ed = { "cmovp", "cmovpl", Gd, Ed, XX, XX, IA_P6 }, +Ia_cmovpq_Gq_Eq = { "cmovp", "cmovpq", Gq, Eq, XX, XX, 0 }, +Ia_cmovpw_Gw_Ew = { "cmovp", "cmovpw", Gw, Ew, XX, XX, IA_P6 }, +Ia_cmovsl_Gd_Ed = { "cmovs", "cmovsl", Gd, Ed, XX, XX, IA_P6 }, +Ia_cmovsq_Gq_Eq = { "cmovs", "cmovsq", Gq, Eq, XX, XX, 0 }, +Ia_cmovsw_Gw_Ew = { "cmovs", "cmovsw", Gw, Ew, XX, XX, IA_P6 }, +Ia_cmovzl_Gd_Ed = { "cmovz", "cmovzl", Gd, Ed, XX, XX, IA_P6 }, +Ia_cmovzq_Gq_Eq = { "cmovz", "cmovzq", Gq, Eq, XX, XX, 0 }, +Ia_cmovzw_Gw_Ew = { "cmovz", "cmovzw", Gw, Ew, XX, XX, IA_P6 }, +Ia_cmpb_AL_Ib = { "cmp", "cmpb", AL_Reg, Ib, XX, XX, 0 }, +Ia_cmpb_Eb_Gb = { "cmp", "cmpb", Eb, Gb, XX, XX, 0 }, +Ia_cmpb_Eb_Ib = { "cmp", "cmpb", Eb, Ib, XX, XX, 0 }, +Ia_cmpb_Gb_Eb = { "cmp", "cmpb", Gb, Eb, XX, XX, 0 }, +Ia_cmpl_EAX_Id = { "cmp", "cmpl", EAX_Reg, Id, XX, XX, 0 }, +Ia_cmpl_Ed_Gd = { "cmp", "cmpl", Ed, Gd, XX, XX, 0 }, +Ia_cmpl_Ed_Id = { "cmp", "cmpl", Ed, Id, XX, XX, 0 }, +Ia_cmpl_Ed_sIb = { "cmp", "cmpl", Ed, sIbd, XX, XX, 0 }, +Ia_cmpl_Gd_Ed = { "cmp", "cmpl", Gd, Ed, XX, XX, 0 }, +Ia_cmppd_Vpd_Wpd_Ib = { "cmppd", "cmppd", Vpd, Wpd, Ib, XX, IA_SSE2 }, +Ia_cmpps_Vps_Wps_Ib = { "cmpps", "cmpps", Vps, Wps, Ib, XX, IA_SSE }, +Ia_cmpq_Eq_Gq = { "cmp", "cmpq", Eq, Gq, XX, XX, 0 }, +Ia_cmpq_Eq_sIb = { "cmp", "cmpq", Eq, sIbq, XX, XX, 0 }, +Ia_cmpq_Eq_sId = { "cmp", "cmpq", Eq, sIdq, XX, XX, 0 }, +Ia_cmpq_Gq_Eq = { "cmp", "cmpq", Gq, Eq, XX, XX, 0 }, +Ia_cmpq_RAX_sId = { "cmp", "cmpq", RAX_Reg, sIdq, XX, XX, 0 }, +Ia_cmpsb_Xb_Yb = { "cmpsb", "cmpsb", Xb, Yb, XX, XX, 0 }, +Ia_cmpsd_Vsd_Wsd_Ib = { "cmpsd", "cmpsd", Vsd, Wsd, Ib, XX, IA_SSE2 }, +Ia_cmpsl_Xd_Yd = { "cmpsd", "cmpsl", Xd, Yd, XX, XX, 0 }, +Ia_cmpsq_Xq_Yq = { "cmpsq", "cmpsq", Xq, Yq, XX, XX, 0 }, +Ia_cmpss_Vss_Wss_Ib = { "cmpss", "cmpss", Vss, Wss, Ib, XX, IA_SSE }, +Ia_cmpsw_Xw_Yw = { "cmpsw", "cmpsw", Xw, Yw, XX, XX, 0 }, +Ia_cmpw_AX_Iw = { "cmp", "cmpw", AX_Reg, Iw, XX, XX, 0 }, +Ia_cmpw_Ew_Gw = { "cmp", "cmpw", Ew, Gw, XX, XX, 0 }, +Ia_cmpw_Ew_Iw = { "cmp", "cmpw", Ew, Iw, XX, XX, 0 }, +Ia_cmpw_Ew_sIb = { "cmp", "cmpw", Ew, sIbw, XX, XX, 0 }, +Ia_cmpw_Gw_Ew = { "cmp", "cmpw", Gw, Ew, XX, XX, 0 }, +Ia_cmpxchg16b_Mdq = { "cmpxchg16b", "cmpxchg16b", Mdq, XX, XX, XX, IA_CMPXCHG16B }, +Ia_cmpxchg8b_Mq = { "cmpxchg8b", "cmpxchg8b", Mq, XX, XX, XX, IA_PENTIUM }, +Ia_cmpxchgb_Eb_Gb = { "cmpxchg", "cmpxchgb", Eb, Gb, XX, XX, IA_486 }, +Ia_cmpxchgl_Ed_Gd = { "cmpxchg", "cmpxchgl", Ed, Gd, XX, XX, IA_486 }, +Ia_cmpxchgq_Eq_Gq = { "cmpxchg", "cmpxchgq", Eq, Gq, XX, XX, 0 }, +Ia_cmpxchgw_Ew_Gw = { "cmpxchg", "cmpxchgw", Ew, Gw, XX, XX, IA_486 }, +Ia_comisd_Vsd_Wsd = { "comisd", "comisd", Vsd, Wsd, XX, XX, 0 }, +Ia_comiss_Vss_Wss = { "comiss", "comiss", Vss, Wss, XX, XX, 0 }, +Ia_cpuid = { "cpuid", "cpuid", XX, XX, XX, XX, IA_486 }, +Ia_cqo = { "cqo", "cqto", XX, XX, XX, XX, 0 }, +Ia_crc32_Gd_Eb = { "crc32", "crc32", Gd, Eb, XX, XX, IA_SSE4_2 }, +Ia_crc32_Gd_Ed = { "crc32", "crc32", Gd, Ed, XX, XX, IA_SSE4_2 }, +Ia_crc32_Gd_Eq = { "crc32", "crc32", Gd, Eq, XX, XX, IA_SSE4_2 }, +Ia_crc32_Gd_Ew = { "crc32", "crc32", Gd, Ew, XX, XX, IA_SSE4_2 }, +Ia_cvtdq2pd_Vpd_Wq = { "cvtdq2pd", "cvtdq2pd", Vpd, Wq, XX, XX, IA_SSE2 }, +Ia_cvtdq2ps_Vps_Wdq = { "cvtdq2ps", "cvtdq2ps", Vps, Wdq, XX, XX, IA_SSE2 }, +Ia_cvtpd2dq_Vq_Wpd = { "cvtpd2dq", "cvtpd2dq", Vq, Wpd, XX, XX, IA_SSE2 }, +Ia_cvtpd2pi_Pq_Wpd = { "cvtpd2pi", "cvtpd2pi", Pq, Wpd, XX, XX, IA_SSE2 }, +Ia_cvtpd2ps_Vps_Wpd = { "cvtpd2ps", "cvtpd2ps", Vps, Wpd, XX, XX, IA_SSE2 }, +Ia_cvtpi2pd_Vpd_Qq = { "cvtpi2pd", "cvtpi2pd", Vpd, Qq, XX, XX, IA_SSE2 }, +Ia_cvtpi2ps_Vps_Qq = { "cvtpi2ps", "cvtpi2ps", Vps, Qq, XX, XX, IA_SSE }, +Ia_cvtps2dq_Vdq_Wps = { "cvtps2dq", "cvtps2dq", Vdq, Wps, XX, XX, IA_SSE2 }, +Ia_cvtps2pd_Vpd_Wps = { "cvtps2pd", "cvtps2pd", Vpd, Wps, XX, XX, IA_SSE2 }, +Ia_cvtps2pi_Pq_Wps = { "cvtps2pi", "cvtps2pi", Pq, Wps, XX, XX, IA_SSE }, +Ia_cvtsd2si_Gy_Wsd = { "cvtsd2si", "cvtsd2si", Gy, Wsd, XX, XX, IA_SSE2 }, +Ia_cvtsd2ss_Vss_Wsd = { "cvtsd2ss", "cvtsd2ss", Vss, Wsd, XX, XX, IA_SSE2 }, +Ia_cvtsi2sd_Vsd_Ey = { "cvtsi2sd", "cvtsi2sd", Vsd, Ey, XX, XX, IA_SSE2 }, +Ia_cvtsi2ss_Vss_Ey = { "cvtsi2ss", "cvtsi2ss", Vss, Ey, XX, XX, IA_SSE }, +Ia_cvtss2sd_Vsd_Wss = { "cvtss2sd", "cvtss2sd", Vsd, Wss, XX, XX, IA_SSE2 }, +Ia_cvtss2si_Gy_Wss = { "cvtss2si", "cvtss2si", Gy, Wss, XX, XX, IA_SSE }, +Ia_cvttpd2dq_Vq_Wpd = { "cvttpd2dq", "cvttpd2dq", Vq, Wpd, XX, XX, IA_SSE2 }, +Ia_cvttpd2pi_Pq_Wpd = { "cvttpd2pi", "cvttpd2pi", Pq, Wpd, XX, XX, IA_SSE2 }, +Ia_cvttps2dq_Vdq_Wps = { "cvttps2dq", "cvttps2dq", Vdq, Wps, XX, XX, IA_SSE2 }, +Ia_cvttps2pi_Pq_Wps = { "cvttps2pi", "cvttps2pi", Pq, Wps, XX, XX, IA_SSE }, +Ia_cvttsd2si_Gy_Wsd = { "cvttsd2si", "cvttsd2si", Gy, Wsd, XX, XX, IA_SSE2 }, +Ia_cvttss2si_Gy_Wss = { "cvttss2si", "cvttss2si", Gy, Wss, XX, XX, IA_SSE }, +Ia_cwd = { "cwd", "cwtd", XX, XX, XX, XX, 0 }, +Ia_cwde = { "cwde", "cwtl", XX, XX, XX, XX, 0 }, +Ia_daa = { "daa", "daa", XX, XX, XX, XX, 0 }, +Ia_das = { "das", "das", XX, XX, XX, XX, 0 }, +Ia_decb_Eb = { "dec", "decb", Eb, XX, XX, XX, 0 }, +Ia_decl_Ed = { "dec", "decl", Ed, XX, XX, XX, 0 }, +Ia_decl_ERX = { "dec", "decl", ERX, XX, XX, XX, 0 }, +Ia_decq_Eq = { "dec", "decq", Eq, XX, XX, XX, 0 }, +Ia_decw_Ew = { "dec", "decw", Ew, XX, XX, XX, 0 }, +Ia_decw_RX = { "dec", "decw", RX, XX, XX, XX, 0 }, +Ia_divb_AL_Eb = { "div", "divb", AL_Reg, Eb, XX, XX, 0 }, +Ia_divl_EAX_Ed = { "div", "divl", EAX_Reg, Ed, XX, XX, 0 }, +Ia_divpd_Vpd_Wpd = { "divpd", "divpd", Vpd, Wpd, XX, XX, IA_SSE2 }, +Ia_divps_Vps_Wps = { "divps", "divps", Vps, Wps, XX, XX, IA_SSE }, +Ia_divq_RAX_Eq = { "div", "divq", RAX_Reg, Eq, XX, XX, 0 }, +Ia_divsd_Vsd_Wsd = { "divsd", "divsd", Vsd, Wsd, XX, XX, IA_SSE2 }, +Ia_divss_Vss_Wss = { "divss", "divss", Vss, Wss, XX, XX, IA_SSE }, +Ia_divw_AX_Ew = { "div", "divw", AX_Reg, Ew, XX, XX, 0 }, +Ia_dppd_Vpd_Wpd_Ib = { "dppd", "dppd", Vpd, Wpd, Ib, XX, IA_SSE4_1 }, +Ia_dpps_Vps_Wps_Ib = { "dpps", "dpps", Vps, Wps, Ib, XX, IA_SSE4_1 }, +Ia_emms = { "emms", "emms", XX, XX, XX, XX, IA_MMX }, +Ia_enter = { "enter", "enter", IwIb, XX, XX, XX, 0 }, +Ia_error = { "(error)", "(error)", XX, XX, XX, XX, 0 }, +Ia_extractps_Ed_Vdq_Ib = { "extractps", "extractps", Ed, Vdq, Ib, XX, IA_SSE4_1 }, +Ia_extrq_Udq_Ib_Ib = { "extrq", "extrq", Udq, Ib, Ib, XX, IA_SSE4A }, +Ia_extrq_Vdq_Uq = { "extrq", "extrq", Vdq, Uq, XX, XX, IA_SSE4A }, +Ia_f2xm1 = { "f2xm1", "f2xm1", XX, XX, XX, XX, IA_X87 }, +Ia_fabs = { "fabs", "fabs", XX, XX, XX, XX, IA_X87 }, +Ia_fadd_ST0_STi = { "fadd", "fadd", ST0, STi, XX, XX, IA_X87 }, +Ia_fadd_STi_ST0 = { "fadd", "fadd", STi, ST0, XX, XX, IA_X87 }, +Ia_faddl_Mq = { "fadd", "faddl", Mq, XX, XX, XX, IA_X87 }, +Ia_faddp_STi_ST0 = { "faddp", "faddp", STi, ST0, XX, XX, IA_X87 }, +Ia_fadds_Md = { "fadd", "fadds", Md, XX, XX, XX, IA_X87 }, +Ia_fbldt_Mt = { "fbld", "fbldt", Mt, XX, XX, XX, IA_X87 }, +Ia_fbstpt_Mt = { "fbstp", "fbstpt", Mt, XX, XX, XX, IA_X87 }, +Ia_fchs = { "fchs", "fchs", XX, XX, XX, XX, IA_X87 }, +Ia_fcmovb_ST0_STi = { "fcmovb", "fcmovb", ST0, STi, XX, XX, IA_P6 }, +Ia_fcmovbe_ST0_STi = { "fcmovbe", "fcmovbe", ST0, STi, XX, XX, IA_P6 }, +Ia_fcmove_ST0_STi = { "fcmove", "fcmove", ST0, STi, XX, XX, IA_P6 }, +Ia_fcmovnb_ST0_STi = { "fcmovnb", "fcmovnb", ST0, STi, XX, XX, IA_P6 }, +Ia_fcmovnbe_ST0_STi = { "fcmovnbe", "fcmovnbe", ST0, STi, XX, XX, IA_P6 }, +Ia_fcmovne_ST0_STi = { "fcmovne", "fcmovne", ST0, STi, XX, XX, IA_P6 }, +Ia_fcmovnu_ST0_STi = { "fcmovnu", "fcmovnu", ST0, STi, XX, XX, IA_P6 }, +Ia_fcmovu_ST0_STi = { "fcmovu", "fcmovu", ST0, STi, XX, XX, IA_P6 }, +Ia_fcom_STi = { "fcom", "fcom", STi, XX, XX, XX, IA_X87 }, +Ia_fcomi_ST0_STi = { "fcomi", "fcomi", ST0, STi, XX, XX, IA_P6 }, +Ia_fcomip_ST0_STi = { "fcomip", "fcomip", ST0, STi, XX, XX, IA_X87 }, +Ia_fcoml_Mq = { "fcom", "fcoml", Mq, XX, XX, XX, IA_X87 }, +Ia_fcomp_STi = { "fcomp", "fcomp", STi, XX, XX, XX, IA_X87 }, +Ia_fcompl_Mq = { "fcomp", "fcompl", Mq, XX, XX, XX, IA_X87 }, +Ia_fcompp = { "fcompp", "fcompp", XX, XX, XX, XX, IA_X87 }, +Ia_fcomps_Md = { "fcomp", "fcomps", Md, XX, XX, XX, IA_X87 }, +Ia_fcoms_Md = { "fcom", "fcoms", Md, XX, XX, XX, IA_X87 }, +Ia_fcos = { "fcos", "fcos", XX, XX, XX, XX, IA_X87 }, +Ia_fdecstp = { "fdecstp", "fdecstp", XX, XX, XX, XX, IA_X87 }, +Ia_fdisi = { "fdisi (287 legacy)", "fdisi (287 legacy)", XX, XX, XX, XX, IA_X87 }, +Ia_fdiv_ST0_STi = { "fdiv", "fdiv", ST0, STi, XX, XX, IA_X87 }, +Ia_fdiv_STi_ST0 = { "fdiv", "fdiv", STi, ST0, XX, XX, IA_X87 }, +Ia_fdivl_Mq = { "fdiv", "fdivl", Mq, XX, XX, XX, IA_X87 }, +Ia_fdivp_STi_ST0 = { "fdivp", "fdivp", STi, ST0, XX, XX, IA_X87 }, +Ia_fdivr_ST0_STi = { "fdivr", "fdivr", ST0, STi, XX, XX, IA_X87 }, +Ia_fdivr_STi_ST0 = { "fdivr", "fdivr", STi, ST0, XX, XX, IA_X87 }, +Ia_fdivrl_Mq = { "fdivr", "fdivrl", Mq, XX, XX, XX, IA_X87 }, +Ia_fdivrp_STi_ST0 = { "fdivrp", "fdivrp", STi, ST0, XX, XX, IA_X87 }, +Ia_fdivrs_Md = { "fdivr", "fdivrs", Md, XX, XX, XX, IA_X87 }, +Ia_fdivs_Md = { "fdiv", "fdivs", Md, XX, XX, XX, IA_X87 }, +Ia_femms = { "femms", "femms", XX, XX, XX, XX, IA_3DNOW }, +Ia_feni = { "feni (287 legacy)", "feni(287 legacy)", XX, XX, XX, XX, IA_X87 }, +Ia_ffree_STi = { "ffree", "ffree", STi, XX, XX, XX, IA_X87 }, +Ia_ffreep_STi = { "ffreep", "ffreep", STi, XX, XX, XX, IA_X87 }, +Ia_fiaddl_Md = { "fiadd", "fiaddl", Md, XX, XX, XX, IA_X87 }, +Ia_fiadds_Mw = { "fiadd", "fiadds", Mw, XX, XX, XX, IA_X87 }, +Ia_ficoml_Md = { "ficom", "ficoml", Md, XX, XX, XX, IA_X87 }, +Ia_ficompl_Md = { "ficomp", "ficompl", Md, XX, XX, XX, IA_X87 }, +Ia_ficomps_Mw = { "ficomp", "ficomps", Mw, XX, XX, XX, IA_X87 }, +Ia_ficoms_Mw = { "ficom", "ficoms", Mw, XX, XX, XX, IA_X87 }, +Ia_fidivl_Md = { "fidiv", "fidivl", Md, XX, XX, XX, IA_X87 }, +Ia_fidivrl_Md = { "fidivr", "fidivrl", Md, XX, XX, XX, IA_X87 }, +Ia_fidivrs_Mw = { "fidivr", "fidivrs", Mw, XX, XX, XX, IA_X87 }, +Ia_fidivs_Mw = { "fidiv", "fidivs", Mw, XX, XX, XX, IA_X87 }, +Ia_fildl_Md = { "fild", "fildl", Md, XX, XX, XX, IA_X87 }, +Ia_fildq_Mq = { "fild", "fildq", Mq, XX, XX, XX, IA_X87 }, +Ia_filds_Mw = { "fild", "filds", Mw, XX, XX, XX, IA_X87 }, +Ia_fimull_Md = { "fimul", "fimull", Md, XX, XX, XX, IA_X87 }, +Ia_fimuls_Mw = { "fimul", "fimuls", Mw, XX, XX, XX, IA_X87 }, +Ia_fincstp = { "fincstp", "fincstp", XX, XX, XX, XX, IA_X87 }, +Ia_fistl_Md = { "fist", "fistl", Md, XX, XX, XX, IA_X87 }, +Ia_fistpl_Md = { "fistp", "fistpl", Md, XX, XX, XX, IA_X87 }, +Ia_fistpq_Mq = { "fistp", "fistpq", Mq, XX, XX, XX, IA_X87 }, +Ia_fistps_Mw = { "fistp", "fistps", Mw, XX, XX, XX, IA_X87 }, +Ia_fists_Mw = { "fist", "fists", Mw, XX, XX, XX, IA_X87 }, +Ia_fisttpl_Md = { "fisttp", "fisttpl", Md, XX, XX, XX, IA_SSE3 }, +Ia_fisttpq_Mq = { "fisttp", "fisttpq", Mq, XX, XX, XX, IA_SSE3 }, +Ia_fisttps_Mw = { "fisttp", "fisttps", Mw, XX, XX, XX, IA_SSE3 }, +Ia_fisubl_Md = { "fisub", "fisubl", Md, XX, XX, XX, IA_X87 }, +Ia_fisubrl_Md = { "fisubr", "fisubrl", Md, XX, XX, XX, IA_X87 }, +Ia_fisubrs_Mw = { "fisubr", "fisubrs", Mw, XX, XX, XX, IA_X87 }, +Ia_fisubs_Mw = { "fisub", "fisubs", Mw, XX, XX, XX, IA_X87 }, +Ia_fld_STi = { "fld", "fld", STi, XX, XX, XX, IA_X87 }, +Ia_fld1 = { "fld1", "fld1", XX, XX, XX, XX, IA_X87 }, +Ia_fldcw = { "fldcw", "fldcw", Ew, XX, XX, XX, IA_X87 }, +Ia_fldenv = { "fldenv", "fldenv", Mx, XX, XX, XX, IA_X87 }, +Ia_fldl_Mq = { "fld", "fldl", Mq, XX, XX, XX, IA_X87 }, +Ia_fldl2e = { "fldl2e", "fldl2e", XX, XX, XX, XX, IA_X87 }, +Ia_fldl2t = { "fldl2t", "fldl2t", XX, XX, XX, XX, IA_X87 }, +Ia_fldlg2 = { "fldlg2", "fldlg2", XX, XX, XX, XX, IA_X87 }, +Ia_fldln2 = { "fldln2", "fldln2", XX, XX, XX, XX, IA_X87 }, +Ia_fldpi = { "fldpi", "fldpi", XX, XX, XX, XX, IA_X87 }, +Ia_flds_Md = { "fld", "flds", Md, XX, XX, XX, IA_X87 }, +Ia_fldt_Mt = { "fld", "fldt", Mt, XX, XX, XX, IA_X87 }, +Ia_fldz = { "fldz", "fldz", XX, XX, XX, XX, IA_X87 }, +Ia_fmul_ST0_STi = { "fmul", "fmul", ST0, STi, XX, XX, IA_X87 }, +Ia_fmul_STi_ST0 = { "fmul", "fmul", STi, ST0, XX, XX, IA_X87 }, +Ia_fmull_Mq = { "fmul", "fmull", Mq, XX, XX, XX, IA_X87 }, +Ia_fmulp_STi_ST0 = { "fmulp", "fmulp", STi, ST0, XX, XX, IA_X87 }, +Ia_fmuls_Md = { "fmul", "fmuls", Md, XX, XX, XX, IA_X87 }, +Ia_fnclex = { "fnclex", "fnclex", XX, XX, XX, XX, IA_X87 }, +Ia_fninit = { "fninit", "fninit", XX, XX, XX, XX, IA_X87 }, +Ia_fnop = { "fnop", "fnop", XX, XX, XX, XX, IA_X87 }, +Ia_fnsave = { "fnsave", "fnsave", Mx, XX, XX, XX, IA_X87 }, +Ia_fnstcw = { "fnstcw", "fnstcw", Mw, XX, XX, XX, IA_X87 }, +Ia_fnstenv = { "fnstenv", "fnstenv", Mx, XX, XX, XX, IA_X87 }, +Ia_fnstsw = { "fnstsw", "fnstsw", Mw, XX, XX, XX, IA_X87 }, +Ia_fnstsw_AX = { "fnstsw", "fnstsw", AX_Reg, XX, XX, XX, IA_X87 }, +Ia_fpatan = { "fpatan", "fpatan", XX, XX, XX, XX, IA_X87 }, +Ia_fprem = { "fprem", "fprem", XX, XX, XX, XX, IA_X87 }, +Ia_fprem1 = { "fprem1", "fprem1", XX, XX, XX, XX, IA_X87 }, +Ia_fptan = { "fptan", "fptan", XX, XX, XX, XX, IA_X87 }, +Ia_frczpd_Vpd_Wpd = { "frczpd", "frczpd", Vpd, Wpd, XX, XX, IA_XOP }, +Ia_frczps_Vps_Wps = { "frczps", "frczps", Vps, Wps, XX, XX, IA_XOP }, +Ia_frczsd_Vsd_Wsd = { "frczsd", "frczsd", Vsd, Wsd, XX, XX, IA_XOP }, +Ia_frczss_Vss_Wss = { "frczss", "frczss", Vss, Wss, XX, XX, IA_XOP }, +Ia_frndint = { "frndint", "frndint", XX, XX, XX, XX, IA_X87 }, +Ia_frstor = { "frstor", "frstor", Mx, XX, XX, XX, IA_X87 }, +Ia_fscale = { "fscale", "fscale", XX, XX, XX, XX, IA_X87 }, +Ia_fsetpm = { "fsetpm (287 legacy)", "fsetpm (287 legacy)", XX, XX, XX, XX, IA_X87 }, +Ia_fsin = { "fsin", "fsin", XX, XX, XX, XX, IA_X87 }, +Ia_fsincos = { "fsincos", "fsincos", XX, XX, XX, XX, IA_X87 }, +Ia_fsqrt = { "fsqrt", "fsqrt", XX, XX, XX, XX, IA_X87 }, +Ia_fst_STi = { "fst", "fst", STi, XX, XX, XX, IA_X87 }, +Ia_fstl_Mq = { "fst", "fstl", Mq, XX, XX, XX, IA_X87 }, +Ia_fstp_STi = { "fstp", "fstp", STi, XX, XX, XX, IA_X87 }, +Ia_fstpl_Mq = { "fstp", "fstpl", Mq, XX, XX, XX, IA_X87 }, +Ia_fstps_Md = { "fstp", "fstps", Md, XX, XX, XX, IA_X87 }, +Ia_fstpt_Mt = { "fstp", "fstpt", Mt, XX, XX, XX, IA_X87 }, +Ia_fsts_Md = { "fst", "fsts", Md, XX, XX, XX, IA_X87 }, +Ia_fsub_ST0_STi = { "fsub", "fsub", ST0, STi, XX, XX, IA_X87 }, +Ia_fsub_STi_ST0 = { "fsub", "fsub", STi, ST0, XX, XX, IA_X87 }, +Ia_fsubl_Mq = { "fsub", "fsubl", Mq, XX, XX, XX, IA_X87 }, +Ia_fsubp_STi_ST0 = { "fsubp", "fsubp", STi, ST0, XX, XX, IA_X87 }, +Ia_fsubr_ST0_STi = { "fsubr", "fsubr", ST0, STi, XX, XX, IA_X87 }, +Ia_fsubr_STi_ST0 = { "fsubr", "fsubr", STi, ST0, XX, XX, IA_X87 }, +Ia_fsubrl_Mq = { "fsubr", "fsubrl", Mq, XX, XX, XX, IA_X87 }, +Ia_fsubrp_STi_ST0 = { "fsubrp", "fsubrp", STi, ST0, XX, XX, IA_X87 }, +Ia_fsubrs_Md = { "fsubr", "fsubrs", Md, XX, XX, XX, IA_X87 }, +Ia_fsubs_Md = { "fsub", "fsubs", Md, XX, XX, XX, IA_X87 }, +Ia_ftst = { "ftst", "ftst", XX, XX, XX, XX, IA_X87 }, +Ia_fucom_STi = { "fucom", "fucom", STi, XX, XX, XX, IA_X87 }, +Ia_fucomi_ST0_STi = { "fucomi", "fucomi", ST0, STi, XX, XX, IA_P6 }, +Ia_fucomip_ST0_STi = { "fucomip", "fucomip", ST0, STi, XX, XX, IA_P6 }, +Ia_fucomp_STi = { "fucomp", "fucomp", STi, XX, XX, XX, IA_X87 }, +Ia_fucompp = { "fucompp", "fucompp", XX, XX, XX, XX, IA_X87 }, +Ia_fwait = { "fwait", "fwait", XX, XX, XX, XX, IA_X87 }, +Ia_fxam = { "fxam", "fxam", XX, XX, XX, XX, IA_X87 }, +Ia_fxch = { "fxch", "fxch", STi, XX, XX, XX, IA_X87 }, +Ia_fxrstor = { "fxrstor", "fxrstor", Mx, XX, XX, XX, IA_SSE }, +Ia_fxsave = { "fxsave", "fxsave", Mx, XX, XX, XX, IA_SSE }, +Ia_fxtract = { "fxtract", "fxtract", XX, XX, XX, XX, IA_X87 }, +Ia_fyl2x = { "fyl2x", "fyl2x", XX, XX, XX, XX, IA_X87 }, +Ia_fyl2xp1 = { "fyl2xp1", "fyl2xp1", XX, XX, XX, XX, IA_X87 }, +Ia_getsec = { "getsec", "getsec", XX, XX, XX, XX, IA_SMX }, +Ia_haddpd_Vpd_Wpd = { "haddpd", "haddpd", Vpd, Wpd, XX, XX, IA_SSE3 }, +Ia_haddps_Vps_Wps = { "haddps", "haddps", Vps, Wps, XX, XX, IA_SSE3 }, +Ia_hlt = { "hlt", "hlt", XX, XX, XX, XX, 0 }, +Ia_hsubpd_Vpd_Wpd = { "hsubpd", "hsubpd", Vpd, Wpd, XX, XX, IA_SSE3 }, +Ia_hsubps_Vps_Wps = { "hsubps", "hsubps", Vps, Wps, XX, XX, IA_SSE3 }, +Ia_idivb_AL_Eb = { "idiv", "idivb", AL_Reg, Eb, XX, XX, 0 }, +Ia_idivl_EAX_Ed = { "idiv", "idivl", EAX_Reg, Ed, XX, XX, 0 }, +Ia_idivq_RAX_Eq = { "idiv", "idivq", RAX_Reg, Eq, XX, XX, 0 }, +Ia_idivw_AX_Ew = { "idiv", "idivw", AX_Reg, Ew, XX, XX, 0 }, +Ia_imulb_AL_Eb = { "imul", "imulb", AL_Reg, Eb, XX, XX, 0 }, +Ia_imull_EAX_Ed = { "imul", "imull", EAX_Reg, Ed, XX, XX, 0 }, +Ia_imull_Gd_Ed = { "imul", "imull", Gd, Ed, XX, XX, 0 }, +Ia_imull_Gd_Ed_Id = { "imul", "imull", Gd, Ed, Id, XX, 0 }, +Ia_imull_Gd_Ed_sIb = { "imul", "imull", Gd, Ed, sIbd, XX, 0 }, +Ia_imulq_Gq_Eq = { "imul", "imulq", Gq, Eq, XX, XX, 0 }, +Ia_imulq_Gq_Eq_sIb = { "imul", "imulq", Gq, Eq, sIbq, XX, 0 }, +Ia_imulq_Gq_Eq_sId = { "imul", "imulq", Gq, Eq, sIdq, XX, 0 }, +Ia_imulq_RAX_Eq = { "imul", "imulq", RAX_Reg, Eq, XX, XX, 0 }, +Ia_imulw_AX_Ew = { "imul", "imulw", AX_Reg, Ew, XX, XX, 0 }, +Ia_imulw_Gw_Ew = { "imul", "imulw", Gw, Ew, XX, XX, 0 }, +Ia_imulw_Gw_Ew_Iw = { "imul", "imulw", Gw, Ew, Iw, XX, 0 }, +Ia_imulw_Gw_Ew_sIb = { "imul", "imulw", Gw, Ew, sIbw, XX, 0 }, +Ia_inb_AL_DX = { "in", "inb", AL_Reg, DX_Reg, XX, XX, 0 }, +Ia_inb_AL_Ib = { "in", "inb", AL_Reg, Ib, XX, XX, 0 }, +Ia_incb_Eb = { "inc", "incb", Eb, XX, XX, XX, 0 }, +Ia_incl_Ed = { "inc", "incl", Ed, XX, XX, XX, 0 }, +Ia_incl_ERX = { "inc", "incl", ERX, XX, XX, XX, 0 }, +Ia_incq_Eq = { "inc", "incq", Eq, XX, XX, XX, 0 }, +Ia_incw_Ew = { "inc", "incw", Ew, XX, XX, XX, 0 }, +Ia_incw_RX = { "inc", "incw", RX, XX, XX, XX, 0 }, +Ia_inl_EAX_DX = { "in", "inl", EAX_Reg, DX_Reg, XX, XX, 0 }, +Ia_inl_EAX_Ib = { "in", "inl", EAX_Reg, Ib, XX, XX, 0 }, +Ia_insb_Yb_DX = { "insb", "insb", Yb, DX_Reg, XX, XX, 0 }, +Ia_insertps_Vps_Wss_Ib = { "insertps", "insertps", Vps, Wss, Ib, XX, IA_SSE4_1 }, +Ia_insertq_Vdq_Udq = { "insertq", "insertq", Vdq, Udq, XX, XX, IA_SSE4A }, +Ia_insertq_Vdq_Uq_Ib_Ib = { "insertq", "insertq", Vdq, Uq, Ib, Ib, IA_SSE4A }, +Ia_insl_Yd_DX = { "insd", "insl", Yd, DX_Reg, XX, XX, 0 }, +Ia_insw_Yw_DX = { "insw", "insw", Yw, DX_Reg, XX, XX, 0 }, +Ia_int_Ib = { "int", "int", Ib, XX, XX, XX, 0 }, +Ia_int1 = { "int1", "int1", XX, XX, XX, XX, 0 }, +Ia_int3 = { "int3", "int3", XX, XX, XX, XX, 0 }, +Ia_into = { "into", "into", XX, XX, XX, XX, 0 }, +Ia_Invalid = { "(invalid)", "(invalid)", XX, XX, XX, XX, 0 }, +Ia_invd = { "invd", "invd", XX, XX, XX, XX, IA_486 }, +Ia_invept_Gy_Mdq = { "invept", "invept", Gy, Mdq, XX, XX, IA_VMX }, +Ia_invlpg = { "invlpg", "invlpg", Mx, XX, XX, XX, IA_486 }, +Ia_invlpga = { "invlpga", "invlpga", RAX_Reg, RCX_Reg, XX, XX, IA_SVM }, +Ia_invpcid_Gy_Mdq = { "invpcid", "invpcid", Gy, Mdq, XX, XX, IA_INVPCID }, +Ia_invvpid_Gy_Mdq = { "invvpid", "invvpid", Gy, Mdq, XX, XX, IA_VMX }, +Ia_inw_AX_DX = { "in", "inw", AX_Reg, DX_Reg, XX, XX, 0 }, +Ia_inw_AX_Ib = { "in", "inw", AX_Reg, Ib, XX, XX, 0 }, +Ia_iretl = { "iret", "iretd", XX, XX, XX, XX, 0 }, +Ia_iretq = { "iret", "iretq", XX, XX, XX, XX, 0 }, +Ia_iretw = { "iret", "iretw", XX, XX, XX, XX, 0 }, +Ia_jb_Jb = { "jb", "jb", Jb, XX, XX, XX, 0 }, +Ia_jb_Jd = { "jb", "jb", Jd, XX, XX, XX, 0 }, +Ia_jb_Jw = { "jb", "jb", Jw, XX, XX, XX, 0 }, +Ia_jbe_Jb = { "jbe", "jbe", Jb, XX, XX, XX, 0 }, +Ia_jbe_Jd = { "jbe", "jbe", Jd, XX, XX, XX, 0 }, +Ia_jbe_Jw = { "jbe", "jbe", Jw, XX, XX, XX, 0 }, +Ia_jcxz_Jb = { "jcxz", "jcxz", Jb, XX, XX, XX, 0 }, +Ia_jecxz_Jb = { "jecxz", "jecxz", Jb, XX, XX, XX, 0 }, +Ia_jl_Jb = { "jl", "jl", Jb, XX, XX, XX, 0 }, +Ia_jl_Jd = { "jl", "jl", Jd, XX, XX, XX, 0 }, +Ia_jl_Jw = { "jl", "jl", Jw, XX, XX, XX, 0 }, +Ia_jle_Jb = { "jle", "jle", Jb, XX, XX, XX, 0 }, +Ia_jle_Jd = { "jle", "jle", Jd, XX, XX, XX, 0 }, +Ia_jle_Jw = { "jle", "jle", Jw, XX, XX, XX, 0 }, +Ia_jmp_Ed = { "jmp", "jmp", Ed, XX, XX, XX, 0 }, +Ia_jmp_Eq = { "jmp", "jmp", Eq, XX, XX, XX, 0 }, +Ia_jmp_Ew = { "jmp", "jmp", Ew, XX, XX, XX, 0 }, +Ia_jmp_Jb = { "jmp", "jmp", Jb, XX, XX, XX, 0 }, +Ia_jmp_Jd = { "jmp", "jmp", Jd, XX, XX, XX, 0 }, +Ia_jmp_Jw = { "jmp", "jmp", Jw, XX, XX, XX, 0 }, +Ia_jnb_Jb = { "jnb", "jnb", Jb, XX, XX, XX, 0 }, +Ia_jnb_Jd = { "jnb", "jnb", Jd, XX, XX, XX, 0 }, +Ia_jnb_Jw = { "jnb", "jnb", Jw, XX, XX, XX, 0 }, +Ia_jnbe_Jb = { "jnbe", "jnbe", Jb, XX, XX, XX, 0 }, +Ia_jnbe_Jd = { "jnbe", "jnbe", Jd, XX, XX, XX, 0 }, +Ia_jnbe_Jw = { "jnbe", "jnbe", Jw, XX, XX, XX, 0 }, +Ia_jnl_Jb = { "jnl", "jnl", Jb, XX, XX, XX, 0 }, +Ia_jnl_Jd = { "jnl", "jnl", Jd, XX, XX, XX, 0 }, +Ia_jnl_Jw = { "jnl", "jnl", Jw, XX, XX, XX, 0 }, +Ia_jnle_Jb = { "jnle", "jnle", Jb, XX, XX, XX, 0 }, +Ia_jnle_Jd = { "jnle", "jnle", Jd, XX, XX, XX, 0 }, +Ia_jnle_Jw = { "jnle", "jnle", Jw, XX, XX, XX, 0 }, +Ia_jno_Jb = { "jno", "jno", Jb, XX, XX, XX, 0 }, +Ia_jno_Jd = { "jno", "jno", Jd, XX, XX, XX, 0 }, +Ia_jno_Jw = { "jno", "jno", Jw, XX, XX, XX, 0 }, +Ia_jnp_Jb = { "jnp", "jnp", Jb, XX, XX, XX, 0 }, +Ia_jnp_Jd = { "jnp", "jnp", Jd, XX, XX, XX, 0 }, +Ia_jnp_Jw = { "jnp", "jnp", Jw, XX, XX, XX, 0 }, +Ia_jns_Jb = { "jns", "jns", Jb, XX, XX, XX, 0 }, +Ia_jns_Jd = { "jns", "jns", Jd, XX, XX, XX, 0 }, +Ia_jns_Jw = { "jns", "jns", Jw, XX, XX, XX, 0 }, +Ia_jnz_Jb = { "jnz", "jnz", Jb, XX, XX, XX, 0 }, +Ia_jnz_Jd = { "jnz", "jnz", Jd, XX, XX, XX, 0 }, +Ia_jnz_Jw = { "jnz", "jnz", Jw, XX, XX, XX, 0 }, +Ia_jo_Jb = { "jo", "jo", Jb, XX, XX, XX, 0 }, +Ia_jo_Jd = { "jo", "jo", Jd, XX, XX, XX, 0 }, +Ia_jo_Jw = { "jo", "jo", Jw, XX, XX, XX, 0 }, +Ia_jp_Jb = { "jp", "jp", Jb, XX, XX, XX, 0 }, +Ia_jp_Jd = { "jp", "jp", Jd, XX, XX, XX, 0 }, +Ia_jp_Jw = { "jp", "jp", Jw, XX, XX, XX, 0 }, +Ia_jrcxz_Jb = { "jrcxz", "jrcxz", Jb, XX, XX, XX, 0 }, +Ia_js_Jb = { "js", "js", Jb, XX, XX, XX, 0 }, +Ia_js_Jd = { "js", "js", Jd, XX, XX, XX, 0 }, +Ia_js_Jw = { "js", "js", Jw, XX, XX, XX, 0 }, +Ia_jz_Jb = { "jz", "jz", Jb, XX, XX, XX, 0 }, +Ia_jz_Jd = { "jz", "jz", Jd, XX, XX, XX, 0 }, +Ia_jz_Jw = { "jz", "jz", Jw, XX, XX, XX, 0 }, +Ia_lahf = { "lahf", "lahf", XX, XX, XX, XX, 0 }, +Ia_larl_Gd_Ew = { "lar", "larl", Gd, Ew, XX, XX, 0 }, +Ia_larq_Gq_Ew = { "lar", "larq", Gq, Ew, XX, XX, 0 }, +Ia_larw_Gw_Ew = { "lar", "larw", Gw, Ew, XX, XX, 0 }, +Ia_lcall_Apd = { "callf", "lcall", Apd, XX, XX, XX, 0 }, +Ia_lcall_Apw = { "callf", "lcall", Apw, XX, XX, XX, 0 }, +Ia_lcall_Mp = { "callf", "lcall", Mp, XX, XX, XX, 0 }, +Ia_lddqu_Vdq_Mdq = { "lddqu", "lddqu", Vdq, Mdq, XX, XX, IA_SSE3 }, +Ia_ldmxcsr = { "ldmxcsr", "ldmxcsr", Md, XX, XX, XX, IA_SSE }, +Ia_ldsl_Gd_Mp = { "lds", "ldsl", Gd, Mp, XX, XX, 0 }, +Ia_ldsw_Gw_Mp = { "lds", "ldsw", Gw, Mp, XX, XX, 0 }, +Ia_leal_Gd_Md = { "lea", "leal", Gd, Md, XX, XX, 0 }, +Ia_leaq_Gq_Mq = { "lea", "leaq", Gq, Mq, XX, XX, 0 }, +Ia_leave = { "leave", "leave", XX, XX, XX, XX, 0 }, +Ia_leaw_Gw_Mw = { "lea", "leaw", Gw, Mw, XX, XX, 0 }, +Ia_lesl_Gd_Mp = { "les", "lesl", Gd, Mp, XX, XX, 0 }, +Ia_lesw_Gw_Mp = { "les", "lesw", Gw, Mp, XX, XX, 0 }, +Ia_lfence = { "lfence", "lfence", XX, XX, XX, XX, IA_SSE2 }, +Ia_lfsl_Gd_Mp = { "lfs", "lfsl", Gd, Mp, XX, XX, 0 }, +Ia_lfsq_Gq_Mp = { "lfs", "lfsq", Gq, Mp, XX, XX, 0 }, +Ia_lfsw_Gw_Mp = { "lfs", "lfsw", Gw, Mp, XX, XX, 0 }, +Ia_lgdt = { "lgdt", "lgdt", Ms, XX, XX, XX, 0 }, +Ia_lgsl_Gd_Mp = { "lgs", "lgsl", Gd, Mp, XX, XX, 0 }, +Ia_lgsq_Gq_Mp = { "lgs", "lgsq", Gq, Mp, XX, XX, 0 }, +Ia_lgsw_Gw_Mp = { "lgs", "lgsw", Gw, Mp, XX, XX, 0 }, +Ia_lidt = { "lidt", "lidt", Ms, XX, XX, XX, 0 }, +Ia_ljmp_Apd = { "jmpf", "ljmp", Apd, XX, XX, XX, 0 }, +Ia_ljmp_Apw = { "jmpf", "ljmp", Apw, XX, XX, XX, 0 }, +Ia_ljmp_Mp = { "jmpf", "ljmp", Mp, XX, XX, XX, 0 }, +Ia_lldt = { "lldt", "lldt", Ew, XX, XX, XX, 0 }, +Ia_lmsw_Ew = { "lmsw", "lmsw", Ew, XX, XX, XX, 0 }, +Ia_lodsb_AL_Xb = { "lodsb", "lodsb", AL_Reg, Xb, XX, XX, 0 }, +Ia_lodsl_EAX_Xd = { "lodsd", "lodsl", EAX_Reg, Xd, XX, XX, 0 }, +Ia_lodsq_RAX_Xq = { "lodsq", "lodsq", RAX_Reg, Xq, XX, XX, 0 }, +Ia_lodsw_AX_Xw = { "lodsw", "lodsw", AX_Reg, Xw, XX, XX, 0 }, +Ia_loop_Jb = { "loop", "loop", Jb, XX, XX, XX, 0 }, +Ia_loope_Jb = { "loope", "loope", Jb, XX, XX, XX, 0 }, +Ia_loopne_Jb = { "loopne", "loopne", Jb, XX, XX, XX, 0 }, +Ia_lret = { "retf", "lret", XX, XX, XX, XX, 0 }, +Ia_lret_Iw = { "retf", "lret", Iw, XX, XX, XX, 0 }, +Ia_lsll_Gd_Ew = { "lsl", "lsll", Gd, Ew, XX, XX, 0 }, +Ia_lslq_Gq_Ew = { "lsl", "lslq", Gq, Ew, XX, XX, 0 }, +Ia_lslw_Gw_Ew = { "lsl", "lslw", Gw, Ew, XX, XX, 0 }, +Ia_lssl_Gd_Mp = { "lss", "lssl", Gd, Mp, XX, XX, 0 }, +Ia_lssq_Gq_Mp = { "lss", "lssq", Gq, Mp, XX, XX, 0 }, +Ia_lssw_Gw_Mp = { "lss", "lssw", Gw, Mp, XX, XX, 0 }, +Ia_ltr = { "ltr", "ltr", Ew, XX, XX, XX, 0 }, +Ia_lzcntl_Gd_Ed = { "lzcnt", "lzcntl", Gd, Ed, XX, XX, IA_LZCNT }, +Ia_lzcntq_Gq_Eq = { "lzcnt", "lzcntq", Gq, Eq, XX, XX, IA_LZCNT }, +Ia_lzcntw_Gw_Ew = { "lzcnt", "lzcntw", Gw, Ew, XX, XX, IA_LZCNT }, +Ia_maskmovdqu_Vdq_Udq = { "maskmovdqu", "maskmovdqu", Vdq, Udq, sYdq, XX, IA_SSE2 }, +Ia_maskmovq_Pq_Nq = { "maskmovq", "maskmovq", Pq, Nq, sYq, XX, IA_3DNOW | IA_SSE }, +Ia_maxpd_Vpd_Wpd = { "maxpd", "maxpd", Vpd, Wpd, XX, XX, IA_SSE2 }, +Ia_maxps_Vps_Wps = { "maxps", "maxps", Vps, Wps, XX, XX, IA_SSE }, +Ia_maxsd_Vsd_Wsd = { "maxsd", "maxsd", Vsd, Wsd, XX, XX, IA_SSE2 }, +Ia_maxss_Vss_Wss = { "maxss", "maxss", Vss, Wss, XX, XX, IA_SSE }, +Ia_mfence = { "mfence", "mfence", XX, XX, XX, XX, IA_SSE2 }, +Ia_minpd_Vpd_Wpd = { "minpd", "minpd", Vpd, Wpd, XX, XX, IA_SSE2 }, +Ia_minps_Vps_Wps = { "minps", "minps", Vps, Wps, XX, XX, IA_SSE }, +Ia_minsd_Vsd_Wsd = { "minsd", "minsd", Vsd, Wsd, XX, XX, IA_SSE2 }, +Ia_minss_Vss_Wss = { "minss", "minss", Vss, Wss, XX, XX, IA_SSE }, +Ia_monitor = { "monitor", "monitor", XX, XX, XX, XX, IA_MONITOR_MWAIT }, +Ia_movapd_Vpd_Wpd = { "movapd", "movapd", Vpd, Wpd, XX, XX, IA_SSE2 }, +Ia_movapd_Wpd_Vpd = { "movapd", "movapd", Wpd, Vpd, XX, XX, IA_SSE2 }, +Ia_movaps_Vps_Wps = { "movaps", "movaps", Vps, Wps, XX, XX, IA_SSE }, +Ia_movaps_Wps_Vps = { "movaps", "movaps", Wps, Vps, XX, XX, IA_SSE }, +Ia_movb_AL_Ob = { "mov", "movb", AL_Reg, Ob, XX, XX, 0 }, +Ia_movb_Eb_Gb = { "mov", "movb", Eb, Gb, XX, XX, 0 }, +Ia_movb_Eb_Ib = { "mov", "movb", Eb, Ib, XX, XX, 0 }, +Ia_movb_Gb_Eb = { "mov", "movb", Gb, Eb, XX, XX, 0 }, +Ia_movb_Ob_AL = { "mov", "movb", Ob, AL_Reg, XX, XX, 0 }, +Ia_movb_R8_Ib = { "mov", "movb", Reg8, Ib, XX, XX, 0 }, +Ia_movbe_Gd_Md = { "movbe", "movbel", Gd, Md, XX, XX, IA_MOVBE }, +Ia_movbe_Gq_Mq = { "movbe", "movbeq", Gq, Mq, XX, XX, IA_MOVBE }, +Ia_movbe_Gw_Mw = { "movbe", "movbew", Gw, Mw, XX, XX, IA_MOVBE }, +Ia_movbe_Md_Gd = { "movbe", "movbel", Md, Gd, XX, XX, IA_MOVBE }, +Ia_movbe_Mq_Gq = { "movbe", "movbeq", Mq, Gq, XX, XX, IA_MOVBE }, +Ia_movbe_Mw_Gw = { "movbe", "movbew", Mw, Gw, XX, XX, IA_MOVBE }, +Ia_movd_Ed_Pq = { "movd", "movd", Ed, Pq, XX, XX, IA_MMX }, +Ia_movd_Ed_Vd = { "movd", "movd", Ed, Vdq, XX, XX, IA_SSE2 }, +Ia_movd_Pq_Ed = { "movd", "movd", Pq, Ed, XX, XX, IA_MMX }, +Ia_movd_Vdq_Ed = { "movd", "movd", Vdq, Ed, XX, XX, IA_SSE2 }, +Ia_movddup_Vdq_Wq = { "movddup", "movddup", Vdq, Wq, XX, XX, IA_SSE3 }, +Ia_movdq2q_Pq_Udq = { "movdq2q", "movdq2q", Pq, Udq, XX, XX, IA_SSE2 }, +Ia_movdqa_Vdq_Wdq = { "movdqa", "movdqa", Vdq, Wdq, XX, XX, IA_SSE2 }, +Ia_movdqa_Wdq_Vdq = { "movdqa", "movdqa", Wdq, Vdq, XX, XX, IA_SSE2 }, +Ia_movdqu_Vdq_Wdq = { "movdqu", "movdqu", Vdq, Wdq, XX, XX, IA_SSE2 }, +Ia_movdqu_Wdq_Vdq = { "movdqu", "movdqu", Wdq, Vdq, XX, XX, IA_SSE2 }, +Ia_movhlpd_Vpd_Udq = { "movhlpd", "movhlpd", Vpd, Udq, XX, XX, IA_SSE2 }, +Ia_movhlps_Vps_Udq = { "movhlps", "movhlps", Vps, Udq, XX, XX, IA_SSE }, +Ia_movhpd_Mq_Vpd = { "movhpd", "movhpd", Mq, Vpd, XX, XX, IA_SSE2 }, +Ia_movhpd_Vpd_Mq = { "movhpd", "movhpd", Vpd, Mq, XX, XX, IA_SSE2 }, +Ia_movhps_Mq_Vps = { "movhps", "movhps", Mq, Vps, XX, XX, IA_SSE }, +Ia_movhps_Vps_Mq = { "movhps", "movhps", Vps, Mq, XX, XX, IA_SSE }, +Ia_movl_Cd_Rd = { "mov", "movl", Cd, Rd, XX, XX, 0 }, +Ia_movl_Dd_Rd = { "mov", "movl", Dd, Rd, XX, XX, 0 }, +Ia_movl_EAX_Od = { "mov", "movl", EAX_Reg, Od, XX, XX, 0 }, +Ia_movl_Ed_Gd = { "mov", "movl", Ed, Gd, XX, XX, 0 }, +Ia_movl_Ed_Id = { "mov", "movl", Ed, Id, XX, XX, 0 }, +Ia_movl_ERX_Id = { "mov", "movl", ERX, Id, XX, XX, 0 }, +Ia_movl_Gd_Ed = { "mov", "movl", Gd, Ed, XX, XX, 0 }, +Ia_movl_Od_EAX = { "mov", "movl", Od, EAX_Reg, XX, XX, 0 }, +Ia_movl_Rd_Cd = { "mov", "movl", Rd, Cd, XX, XX, 0 }, +Ia_movl_Rd_Dd = { "mov", "movl", Rd, Dd, XX, XX, 0 }, +Ia_movlhpd_Vpd_Udq = { "movlhpd", "movlhpd", Vpd, Udq, XX, XX, IA_SSE2 }, +Ia_movlhps_Vps_Udq = { "movlhps", "movlhps", Vps, Udq, XX, XX, IA_SSE }, +Ia_movlpd_Mq_Vpd = { "movlpd", "movlpd", Mq, Vpd, XX, XX, IA_SSE2 }, +Ia_movlpd_Vpd_Mq = { "movlpd", "movlpd", Vpd, Mq, XX, XX, IA_SSE2 }, +Ia_movlps_Mq_Vps = { "movlps", "movlps", Mq, Vps, XX, XX, IA_SSE }, +Ia_movlps_Vps_Mq = { "movlps", "movlps", Vps, Mq, XX, XX, IA_SSE }, +Ia_movmskpd_Gd_Upd = { "movmskpd", "movmskpd", Gd, Upd, XX, XX, IA_SSE2 }, +Ia_movmskps_Gd_Ups = { "movmskps", "movmskps", Gd, Ups, XX, XX, IA_SSE }, +Ia_movntdq_Mdq_Vdq = { "movntdq", "movntdq", Mdq, Vdq, XX, XX, IA_SSE2 }, +Ia_movntdqa_Vdq_Mdq = { "movntdqa", "movntdqa", Vdq, Mdq, XX, XX, IA_SSE4_1 }, +Ia_movnti_Md_Gd = { "movnti", "movnti", Md, Gd, XX, XX, IA_SSE2 }, +Ia_movntiq_Mq_Gq = { "movnti", "movntiq", Mq, Gq, XX, XX, 0 }, +Ia_movntpd_Mpd_Vpd = { "movntpd", "movntpd", Mpd, Vpd, XX, XX, IA_SSE2 }, +Ia_movntps_Mps_Vps = { "movntps", "movntps", Mps, Vps, XX, XX, IA_SSE }, +Ia_movntq_Mq_Pq = { "movntq", "movntq", Mq, Pq, XX, XX, IA_3DNOW | IA_SSE }, +Ia_movntsd_Msd_Vsd = { "movntsd", "movntsd", Msd, Vsd, XX, XX, IA_SSE4A }, +Ia_movntss_Mss_Vss = { "movntss", "movntss", Mss, Vss, XX, XX, IA_SSE4A }, +Ia_movq_Cq_Rq = { "mov", "movq", Cq, Rq, XX, XX, 0 }, +Ia_movq_Dq_Rq = { "mov", "movq", Dq, Rq, XX, XX, 0 }, +Ia_movq_Eq_Gq = { "mov", "movq", Eq, Gq, XX, XX, 0 }, +Ia_movq_Eq_Pq = { "movq", "movq", Eq, Pq, XX, XX, 0 }, +Ia_movq_Eq_sId = { "mov", "movq", Eq, sIdq, XX, XX, 0 }, +Ia_movq_Eq_Vq = { "movq", "movq", Eq, Vq, XX, XX, 0 }, +Ia_movq_Gq_Eq = { "mov", "movq", Gq, Eq, XX, XX, 0 }, +Ia_movq_Oq_RAX = { "mov", "movq", Oq, RAX_Reg, XX, XX, 0 }, +Ia_movq_Pq_Eq = { "movq", "movq", Pq, Eq, XX, XX, 0 }, +Ia_movq_Pq_Qq = { "movq", "movq", Pq, Qq, XX, XX, IA_MMX }, +Ia_movq_Qq_Pq = { "movq", "movq", Qq, Pq, XX, XX, IA_MMX }, +Ia_movq_RAX_Oq = { "mov", "movq", RAX_Reg, Oq, XX, XX, 0 }, +Ia_movq_Rq_Cq = { "mov", "movq", Rq, Cq, XX, XX, 0 }, +Ia_movq_Rq_Dq = { "mov", "movq", Rq, Dq, XX, XX, 0 }, +Ia_movq_RRX_Iq = { "mov", "movq", RRX, Iq, XX, XX, 0 }, +Ia_movq_Vdq_Eq = { "movq", "movq", Vdq, Eq, XX, XX, 0 }, +Ia_movq_Vq_Wq = { "movq", "movq", Vq, Wq, XX, XX, IA_SSE2 }, +Ia_movq_Wq_Vq = { "movq", "movq", Wq, Vq, XX, XX, IA_SSE2 }, +Ia_movq2dq_Vdq_Qq = { "movq2dq", "movq2dq", Vdq, Qq, XX, XX, IA_SSE2 }, +Ia_movsb_Yb_Xb = { "movsb", "movsb", Yb, Xb, XX, XX, 0 }, +Ia_movsbl_Gd_Eb = { "movsx", "movsbl", Gd, Eb, XX, XX, 0 }, +Ia_movsbq_Gq_Eb = { "movsx", "movsbq", Gq, Eb, XX, XX, 0 }, +Ia_movsbw_Gw_Eb = { "movsx", "movsbw", Gw, Eb, XX, XX, 0 }, +Ia_movsd_Vsd_Wsd = { "movsd", "movsd", Vsd, Wsd, XX, XX, IA_SSE2 }, +Ia_movsd_Wsd_Vsd = { "movsd", "movsd", Wsd, Vsd, XX, XX, IA_SSE2 }, +Ia_movshdup_Vdq_Wdq = { "movshdup", "movshdup", Vdq, Wdq, XX, XX, IA_SSE3 }, +Ia_movsl_Yd_Xd = { "movsd", "movsl", Yd, Xd, XX, XX, 0 }, +Ia_movsldup_Vdq_Wdq = { "movsldup", "movsldup", Vdq, Wdq, XX, XX, IA_SSE3 }, +Ia_movslq_Gq_Ed = { "movsxd", "movslq", Gq, Ed, XX, XX, 0 }, +Ia_movsq_Yq_Xq = { "movsq", "movsq", Yq, Xq, XX, XX, 0 }, +Ia_movss_Vss_Wss = { "movss", "movss", Vss, Wss, XX, XX, IA_SSE }, +Ia_movss_Wss_Vss = { "movss", "movss", Wss, Vss, XX, XX, IA_SSE }, +Ia_movsw_Yw_Xw = { "movsw", "movsw", Yw, Xw, XX, XX, 0 }, +Ia_movswl_Gd_Ew = { "movsx", "movswl", Gd, Ew, XX, XX, 0 }, +Ia_movswq_Gq_Ew = { "movsx", "movswq", Gq, Ew, XX, XX, 0 }, +Ia_movupd_Vpd_Wpd = { "movupd", "movupd", Vpd, Wpd, XX, XX, IA_SSE2 }, +Ia_movupd_Wpd_Vpd = { "movupd", "movupd", Wpd, Vpd, XX, XX, IA_SSE2 }, +Ia_movups_Vps_Wps = { "movups", "movups", Vps, Wps, XX, XX, IA_SSE }, +Ia_movups_Wps_Vps = { "movups", "movups", Wps, Vps, XX, XX, IA_SSE }, +Ia_movw_AX_Ow = { "mov", "movw", AX_Reg, Ow, XX, XX, 0 }, +Ia_movw_Ew_Gw = { "mov", "movw", Ew, Gw, XX, XX, 0 }, +Ia_movw_Ew_Iw = { "mov", "movw", Ew, Iw, XX, XX, 0 }, +Ia_movw_Ew_Sw = { "mov", "movw", Ew, Sw, XX, XX, 0 }, +Ia_movw_Gw_Ew = { "mov", "movw", Gw, Ew, XX, XX, 0 }, +Ia_movw_Ow_AX = { "mov", "movw", Ow, AX_Reg, XX, XX, 0 }, +Ia_movw_RX_Iw = { "mov", "movw", RX, Iw, XX, XX, 0 }, +Ia_movw_Sw_Ew = { "mov", "movw", Sw, Ew, XX, XX, 0 }, +Ia_movzbl_Gd_Eb = { "movzx", "movzbl", Gd, Eb, XX, XX, 0 }, +Ia_movzbq_Gq_Eb = { "movzx", "movzbq", Gq, Eb, XX, XX, 0 }, +Ia_movzbw_Gw_Eb = { "movzx", "movzbw", Gw, Eb, XX, XX, 0 }, +Ia_movzwl_Gd_Ew = { "movzx", "movzwl", Gd, Ew, XX, XX, 0 }, +Ia_movzwq_Gq_Ew = { "movzx", "movzwq", Gq, Ew, XX, XX, 0 }, +Ia_mpsadbw_Vdq_Wdq_Ib = { "mpsadbw", "mpsadbw", Vdq, Wdq, Ib, XX, IA_SSE4_1 }, +Ia_mulb_AL_Eb = { "mul", "mulb", AL_Reg, Eb, XX, XX, 0 }, +Ia_mull_EAX_Ed = { "mul", "mull", EAX_Reg, Ed, XX, XX, 0 }, +Ia_mulpd_Vpd_Wpd = { "mulpd", "mulpd", Vpd, Wpd, XX, XX, IA_SSE2 }, +Ia_mulps_Vps_Wps = { "mulps", "mulps", Vps, Wps, XX, XX, IA_SSE }, +Ia_mulq_RAX_Eq = { "mul", "mulq", RAX_Reg, Eq, XX, XX, 0 }, +Ia_mulsd_Vsd_Wsd = { "mulsd", "mulsd", Vsd, Wsd, XX, XX, IA_SSE2 }, +Ia_mulss_Vss_Wss = { "mulss", "mulss", Vss, Wss, XX, XX, IA_SSE }, +Ia_multibyte_nop = { "multibyte nop", "multibyte nop", XX, XX, XX, XX, 0 }, +Ia_mulw_AX_Ew = { "mul", "mulw", AX_Reg, Ew, XX, XX, 0 }, +Ia_mulx_By_Gy_Ey = { "mulx", "mulx", By, Gy, Ey, XX, IA_BMI2 }, +Ia_mwait = { "mwait", "mwait", XX, XX, XX, XX, IA_MONITOR_MWAIT }, +Ia_negb_Eb = { "neg", "negb", Eb, XX, XX, XX, 0 }, +Ia_negl_Ed = { "neg", "negl", Ed, XX, XX, XX, 0 }, +Ia_negq_Eq = { "neg", "negq", Eq, XX, XX, XX, 0 }, +Ia_negw_Ew = { "neg", "negw", Ew, XX, XX, XX, 0 }, +Ia_nop = { "nop", "nop", XX, XX, XX, XX, 0 }, +Ia_notb_Eb = { "not", "notb", Eb, XX, XX, XX, 0 }, +Ia_notl_Ed = { "not", "notl", Ed, XX, XX, XX, 0 }, +Ia_notq_Eq = { "not", "notq", Eq, XX, XX, XX, 0 }, +Ia_notw_Ew = { "not", "notw", Ew, XX, XX, XX, 0 }, +Ia_orb_AL_Ib = { "or", "orb", AL_Reg, Ib, XX, XX, 0 }, +Ia_orb_Eb_Gb = { "or", "orb", Eb, Gb, XX, XX, 0 }, +Ia_orb_Eb_Ib = { "or", "orb", Eb, Ib, XX, XX, 0 }, +Ia_orb_Gb_Eb = { "or", "orb", Gb, Eb, XX, XX, 0 }, +Ia_orl_EAX_Id = { "or", "orl", EAX_Reg, Id, XX, XX, 0 }, +Ia_orl_Ed_Gd = { "or", "orl", Ed, Gd, XX, XX, 0 }, +Ia_orl_Ed_Id = { "or", "orl", Ed, Id, XX, XX, 0 }, +Ia_orl_Ed_sIb = { "or", "orl", Ed, sIbd, XX, XX, 0 }, +Ia_orl_Gd_Ed = { "or", "orl", Gd, Ed, XX, XX, 0 }, +Ia_orpd_Vpd_Wpd = { "orpd", "orpd", Vpd, Wpd, XX, XX, IA_SSE2 }, +Ia_orps_Vps_Wps = { "orps", "orps", Vps, Wps, XX, XX, IA_SSE }, +Ia_orq_Eq_Gq = { "or", "orq", Eq, Gq, XX, XX, 0 }, +Ia_orq_Eq_sIb = { "or", "orq", Eq, sIbq, XX, XX, 0 }, +Ia_orq_Eq_sId = { "or", "orq", Eq, sIdq, XX, XX, 0 }, +Ia_orq_Gq_Eq = { "or", "orq", Gq, Eq, XX, XX, 0 }, +Ia_orq_RAX_sId = { "or", "orq", RAX_Reg, sIdq, XX, XX, 0 }, +Ia_orw_AX_Iw = { "or", "orw", AX_Reg, Iw, XX, XX, 0 }, +Ia_orw_Ew_Gw = { "or", "orw", Ew, Gw, XX, XX, 0 }, +Ia_orw_Ew_Iw = { "or", "orw", Ew, Iw, XX, XX, 0 }, +Ia_orw_Ew_sIb = { "or", "orw", Ew, sIbw, XX, XX, 0 }, +Ia_orw_Gw_Ew = { "or", "orw", Gw, Ew, XX, XX, 0 }, +Ia_outb_DX_AL = { "out", "outb", DX_Reg, AL_Reg, XX, XX, 0 }, +Ia_outb_Ib_AL = { "out", "outb", Ib, AL_Reg, XX, XX, 0 }, +Ia_outl_DX_EAX = { "out", "outl", DX_Reg, EAX_Reg, XX, XX, 0 }, +Ia_outl_Ib_EAX = { "out", "outl", Ib, EAX_Reg, XX, XX, 0 }, +Ia_outsb_DX_Xb = { "outsb", "outsb", DX_Reg, Xb, XX, XX, 0 }, +Ia_outsl_DX_Xd = { "outsd", "outsl", DX_Reg, Xd, XX, XX, 0 }, +Ia_outsw_DX_Xw = { "outsw", "outsw", DX_Reg, Xw, XX, XX, 0 }, +Ia_outw_DX_AX = { "out", "outw", DX_Reg, AX_Reg, XX, XX, 0 }, +Ia_outw_Ib_AX = { "out", "outw", Ib, AX_Reg, XX, XX, 0 }, +Ia_pabsb_Pq_Qq = { "pabsb", "pabsb", Pq, Qq, XX, XX, IA_SSSE3 }, +Ia_pabsb_Vdq_Wdq = { "pabsb", "pabsb", Vdq, Wdq, XX, XX, IA_SSSE3 }, +Ia_pabsd_Pq_Qq = { "pabsd", "pabsd", Pq, Qq, XX, XX, IA_SSSE3 }, +Ia_pabsd_Vdq_Wdq = { "pabsd", "pabsd", Vdq, Wdq, XX, XX, IA_SSSE3 }, +Ia_pabsw_Pq_Qq = { "pabsw", "pabsw", Pq, Qq, XX, XX, IA_SSSE3 }, +Ia_pabsw_Vdq_Wdq = { "pabsw", "pabsw", Vdq, Wdq, XX, XX, IA_SSSE3 }, +Ia_packssdw_Pq_Qq = { "packssdw", "packssdw", Pq, Qq, XX, XX, IA_MMX }, +Ia_packssdw_Vdq_Wdq = { "packssdw", "packssdw", Vdq, Wdq, XX, XX, IA_SSE2 }, +Ia_packsswb_Pq_Qq = { "packsswb", "packsswb", Pq, Qq, XX, XX, IA_MMX }, +Ia_packsswb_Vdq_Wdq = { "packsswb", "packsswb", Vdq, Wdq, XX, XX, IA_SSE2 }, +Ia_packusdw_Vdq_Wdq = { "packusdw", "packusdw", Vdq, Wdq, XX, XX, IA_SSE4_1 }, +Ia_packuswb_Pq_Qq = { "packuswb", "packuswb", Pq, Qq, XX, XX, IA_MMX }, +Ia_packuswb_Vdq_Wdq = { "packuswb", "packuswb", Vdq, Wdq, XX, XX, IA_SSE2 }, +Ia_paddb_Pq_Qq = { "paddb", "paddb", Pq, Qq, XX, XX, IA_MMX }, +Ia_paddb_Vdq_Wdq = { "paddb", "paddb", Vdq, Wdq, XX, XX, IA_SSE2 }, +Ia_paddd_Pq_Qq = { "paddd", "paddd", Pq, Qq, XX, XX, IA_MMX }, +Ia_paddd_Vdq_Wdq = { "paddd", "paddd", Vdq, Wdq, XX, XX, IA_SSE2 }, +Ia_paddq_Pq_Qq = { "paddq", "paddq", Pq, Qq, XX, XX, IA_SSE2 }, +Ia_paddq_Vdq_Wdq = { "paddq", "paddq", Vdq, Wdq, XX, XX, IA_SSE2 }, +Ia_paddsb_Pq_Qq = { "paddsb", "paddsb", Pq, Qq, XX, XX, IA_MMX }, +Ia_paddsb_Vdq_Wdq = { "paddsb", "paddsb", Vdq, Wdq, XX, XX, IA_SSE2 }, +Ia_paddsw_Pq_Qq = { "paddsw", "paddsw", Pq, Qq, XX, XX, IA_MMX }, +Ia_paddsw_Vdq_Wdq = { "paddsw", "paddsw", Vdq, Wdq, XX, XX, IA_SSE2 }, +Ia_paddusb_Pq_Qq = { "paddusb", "paddusb", Pq, Qq, XX, XX, IA_MMX }, +Ia_paddusb_Vdq_Wdq = { "paddusb", "paddusb", Vdq, Wdq, XX, XX, IA_SSE2 }, +Ia_paddusw_Pq_Qq = { "paddusw", "paddusw", Pq, Qq, XX, XX, IA_MMX }, +Ia_paddusw_Vdq_Wdq = { "paddusw", "paddusw", Vdq, Wdq, XX, XX, IA_SSE2 }, +Ia_paddw_Pq_Qq = { "paddw", "paddw", Pq, Qq, XX, XX, IA_MMX }, +Ia_paddw_Vdq_Wdq = { "paddw", "paddw", Vdq, Wdq, XX, XX, IA_SSE2 }, +Ia_palignr_Pq_Qq_Ib = { "palignr", "palignr", Pq, Qq, Ib, XX, IA_SSSE3 }, +Ia_palignr_Vdq_Wdq_Ib = { "palignr", "palignr", Vdq, Wdq, Ib, XX, IA_SSSE3 }, +Ia_pand_Pq_Qq = { "pand", "pand", Pq, Qq, XX, XX, IA_MMX }, +Ia_pand_Vdq_Wdq = { "pand", "pand", Vdq, Wdq, XX, XX, IA_SSE2 }, +Ia_pandn_Pq_Qq = { "pandn", "pandn", Pq, Qq, XX, XX, IA_MMX }, +Ia_pandn_Vdq_Wdq = { "pandn", "pandn", Vdq, Wdq, XX, XX, IA_SSE2 }, +Ia_pause = { "pause", "pause", XX, XX, XX, XX, 0 }, +Ia_pavgb_Pq_Qq = { "pavgb", "pavgb", Pq, Qq, XX, XX, IA_MMX }, +Ia_pavgb_Vdq_Wdq = { "pavgb", "pavgb", Vdq, Wdq, XX, XX, IA_SSE }, +Ia_pavgw_Pq_Qq = { "pavgw", "pavgw", Pq, Qq, XX, XX, IA_MMX }, +Ia_pavgw_Vdq_Wdq = { "pavgw", "pavgw", Vdq, Wdq, XX, XX, IA_SSE }, +Ia_pblendvb_Vdq_Wdq = { "pblendvb", "pblendvb", Vdq, Wdq, XX, XX, IA_SSE4_1 }, +Ia_pblendw_Vdq_Wdq_Ib = { "pblendw", "pblendw", Vdq, Wdq, Ib, XX, IA_SSE4_1 }, +Ia_pclmulqdq_Vdq_Wdq_Ib = { "pclmulqdq", "pclmulqdq", Vdq, Wdq, Ib, XX, IA_AES_PCLMULQDQ }, +Ia_pcmpeqb_Pq_Qq = { "pcmpeqb", "pcmpeqb", Pq, Qq, XX, XX, IA_MMX }, +Ia_pcmpeqb_Vdq_Wdq = { "pcmpeqb", "pcmpeqb", Vdq, Wdq, XX, XX, IA_SSE2 }, +Ia_pcmpeqd_Pq_Qq = { "pcmpeqd", "pcmpeqd", Pq, Qq, XX, XX, IA_MMX }, +Ia_pcmpeqd_Vdq_Wdq = { "pcmpeqd", "pcmpeqd", Vdq, Wdq, XX, XX, IA_SSE2 }, +Ia_pcmpeqq_Vdq_Wdq = { "pcmpeqq", "pcmpeqq", Vdq, Wdq, XX, XX, IA_SSE4_1 }, +Ia_pcmpeqw_Pq_Qq = { "pcmpeqw", "pcmpeqw", Pq, Qq, XX, XX, IA_MMX }, +Ia_pcmpeqw_Vdq_Wdq = { "pcmpeqw", "pcmpeqw", Vdq, Wdq, XX, XX, IA_SSE2 }, +Ia_pcmpestri_Vdq_Wdq_Ib = { "pcmpestri", "pcmpestri", Vdq, Wdq, Ib, XX, IA_SSE4_2 }, +Ia_pcmpestrm_Vdq_Wdq_Ib = { "pcmpestrm", "pcmpestrm", Vdq, Wdq, Ib, XX, IA_SSE4_2 }, +Ia_pcmpgtb_Pq_Qq = { "pcmpgtb", "pcmpgtb", Pq, Qq, XX, XX, IA_MMX }, +Ia_pcmpgtb_Vdq_Wdq = { "pcmpgtb", "pcmpgtb", Vdq, Wdq, XX, XX, IA_SSE2 }, +Ia_pcmpgtd_Pq_Qq = { "pcmpgtd", "pcmpgtd", Pq, Qq, XX, XX, IA_MMX }, +Ia_pcmpgtd_Vdq_Wdq = { "pcmpgtd", "pcmpgtd", Vdq, Wdq, XX, XX, IA_SSE2 }, +Ia_pcmpgtq_Vdq_Wdq = { "pcmpgtq", "pcmpgtq", Vdq, Wdq, XX, XX, IA_SSE4_2 }, +Ia_pcmpgtw_Pq_Qq = { "pcmpgtw", "pcmpgtw", Pq, Qq, XX, XX, IA_MMX }, +Ia_pcmpgtw_Vdq_Wdq = { "pcmpgtw", "pcmpgtw", Vdq, Wdq, XX, XX, IA_SSE2 }, +Ia_pcmpistri_Vdq_Wdq_Ib = { "pcmpistri", "pcmpistri", Vdq, Wdq, Ib, XX, IA_SSE4_2 }, +Ia_pcmpistrm_Vdq_Wdq_Ib = { "pcmpistrm", "pcmpistrm", Vdq, Wdq, Ib, XX, IA_SSE4_2 }, +Ia_pdep_Gy_By_Ey = { "pdep", "pdep", Gy, By, Ey, XX, IA_BMI2 }, +Ia_pext_Gy_By_Ey = { "pext", "pext", Gy, By, Ey, XX, IA_BMI2 }, +Ia_pextrb_Ebd_Vdq_Ib = { "pextrb", "pextrb", Ebd, Vdq, Ib, XX, IA_SSE4_1 }, +Ia_pextrd_Ed_Vdq_Ib = { "pextrd", "pextrd", Ed, Vdq, Ib, XX, IA_SSE4_1 }, +Ia_pextrq_Eq_Vdq_Ib = { "pextrq", "pextrq", Eq, Vdq, Ib, XX, IA_SSE4_1 }, +Ia_pextrw_Ewd_Vdq_Ib = { "pextrw", "pextrw", Ewd, Vdq, Ib, XX, IA_SSE4_1 }, +Ia_pextrw_Gd_Nq_Ib = { "pextrw", "pextrw", Gd, Nq, Ib, XX, IA_3DNOW | IA_SSE }, +Ia_pextrw_Gd_Udq_Ib = { "pextrw", "pextrw", Gd, Udq, Ib, XX, IA_SSE2 }, +Ia_pf2id_Pq_Qq = { "pf2id", "pf2id", Pq, Qq, XX, XX, IA_3DNOW }, +Ia_pf2iw_Pq_Qq = { "pf2iw", "pf2iw", Pq, Qq, XX, XX, IA_3DNOW }, +Ia_pfacc_Pq_Qq = { "pfacc", "pfacc", Pq, Qq, XX, XX, IA_3DNOW }, +Ia_pfadd_Pq_Qq = { "pfadd", "pfadd", Pq, Qq, XX, XX, IA_3DNOW }, +Ia_pfcmpeq_Pq_Qq = { "pfcmpeq", "pfcmpeq", Pq, Qq, XX, XX, IA_3DNOW }, +Ia_pfcmpge_Pq_Qq = { "pfcmpge", "pfcmpge", Pq, Qq, XX, XX, IA_3DNOW }, +Ia_pfcmpgt_Pq_Qq = { "pfcmpgt", "pfcmpgt", Pq, Qq, XX, XX, IA_3DNOW }, +Ia_pfmax_Pq_Qq = { "pfmax", "pfmax", Pq, Qq, XX, XX, IA_3DNOW }, +Ia_pfmin_Pq_Qq = { "pfmin", "pfmin", Pq, Qq, XX, XX, IA_3DNOW }, +Ia_pfmul_Pq_Qq = { "pfmul", "pfmul", Pq, Qq, XX, XX, IA_3DNOW }, +Ia_pfnacc_Pq_Qq = { "pfnacc", "pfnacc", Pq, Qq, XX, XX, IA_3DNOW }, +Ia_pfpnacc_Pq_Qq = { "pfpnacc", "pfpnacc", Pq, Qq, XX, XX, IA_3DNOW }, +Ia_pfrcp_Pq_Qq = { "pfrcp", "pfrcp", Pq, Qq, XX, XX, IA_3DNOW }, +Ia_pfrcpit1_Pq_Qq = { "pfrcpit1", "pfrcpit1", Pq, Qq, XX, XX, IA_3DNOW }, +Ia_pfrcpit2_Pq_Qq = { "pfrcpit2", "pfrcpit2", Pq, Qq, XX, XX, IA_3DNOW }, +Ia_pfrsqit1_Pq_Qq = { "pfrsqit1", "pfrsqit1", Pq, Qq, XX, XX, IA_3DNOW }, +Ia_pfrsqrt_Pq_Qq = { "pfrsqrt", "pfrsqrt", Pq, Qq, XX, XX, IA_3DNOW }, +Ia_pfsub_Pq_Qq = { "pfsub", "pfsub", Pq, Qq, XX, XX, IA_3DNOW }, +Ia_pfsubr_Pq_Qq = { "pfsubr", "pfsubr", Pq, Qq, XX, XX, IA_3DNOW }, +Ia_phaddd_Pq_Qq = { "phaddd", "phaddd", Pq, Qq, XX, XX, IA_SSSE3 }, +Ia_phaddd_Vdq_Wdq = { "phaddd", "phaddd", Vdq, Wdq, XX, XX, IA_SSSE3 }, +Ia_phaddsw_Pq_Qq = { "phaddsw", "phaddsw", Pq, Qq, XX, XX, IA_SSSE3 }, +Ia_phaddsw_Vdq_Wdq = { "phaddsw", "phaddsw", Vdq, Wdq, XX, XX, IA_SSSE3 }, +Ia_phaddw_Pq_Qq = { "phaddw", "phaddw", Pq, Qq, XX, XX, IA_SSSE3 }, +Ia_phaddw_Vdq_Wdq = { "phaddw", "phaddw", Vdq, Wdq, XX, XX, IA_SSSE3 }, +Ia_phminposuw_Vdq_Wdq = { "phminposuw", "phminposuw", Vdq, Wdq, XX, XX, IA_SSE4_1 }, +Ia_phsubd_Pq_Qq = { "phsubd", "phsubd", Pq, Qq, XX, XX, IA_SSSE3 }, +Ia_phsubd_Vdq_Wdq = { "phsubd", "phsubd", Vdq, Wdq, XX, XX, IA_SSSE3 }, +Ia_phsubsw_Pq_Qq = { "phsubsw", "phsubsw", Pq, Qq, XX, XX, IA_SSSE3 }, +Ia_phsubsw_Vdq_Wdq = { "phsubsw", "phsubsw", Vdq, Wdq, XX, XX, IA_SSSE3 }, +Ia_phsubw_Pq_Qq = { "phsubw", "phsubw", Pq, Qq, XX, XX, IA_SSSE3 }, +Ia_phsubw_Vdq_Wdq = { "phsubw", "phsubw", Vdq, Wdq, XX, XX, IA_SSSE3 }, +Ia_pi2fd_Pq_Qq = { "pi2fd", "pi2fd", Pq, Qq, XX, XX, IA_3DNOW }, +Ia_pi2fw_Pq_Qq = { "pi2fw", "pi2fw", Pq, Qq, XX, XX, IA_3DNOW }, +Ia_pinsrb_Vdq_Ew_Ib = { "pinsrb", "pinsrb", Vdq, Ew, Ib, XX, IA_SSE4_1 }, +Ia_pinsrd_Vdq_Ed_Ib = { "pinsrd", "pinsrd", Vdq, Ed, Ib, XX, IA_SSE4_1 }, +Ia_pinsrq_Vdq_Eq_Ib = { "pinsrq", "pinsrq", Vdq, Eq, Ib, XX, IA_SSE4_1 }, +Ia_pinsrw_Pq_Ew_Ib = { "pinsrw", "pinsrw", Pq, Ew, Ib, XX, IA_3DNOW | IA_SSE }, +Ia_pinsrw_Vdq_Ew_Ib = { "pinsrw", "pinsrw", Vdq, Ew, Ib, XX, IA_SSE2 }, +Ia_pmaddubsw_Pq_Qq = { "pmaddubsw", "pmaddubsw", Pq, Qq, XX, XX, IA_SSSE3 }, +Ia_pmaddubsw_Vdq_Wdq = { "pmaddubsw", "pmaddubsw", Vdq, Wdq, XX, XX, IA_SSSE3 }, +Ia_pmaddwd_Pq_Qq = { "pmaddwd", "pmaddwd", Pq, Qq, XX, XX, IA_MMX }, +Ia_pmaddwd_Vdq_Wdq = { "pmaddwd", "pmaddwd", Vdq, Wdq, XX, XX, IA_SSE2 }, +Ia_pmaxsb_Vdq_Wdq = { "pmaxsb", "pmaxsb", Vdq, Wdq, XX, XX, IA_SSE4_1 }, +Ia_pmaxsd_Vdq_Wdq = { "pmaxsd", "pmaxsd", Vdq, Wdq, XX, XX, IA_SSE4_1 }, +Ia_pmaxsw_Pq_Qq = { "pmaxsw", "pmaxsw", Pq, Qq, XX, XX, 0 }, +Ia_pmaxsw_Vdq_Wdq = { "pmaxsw", "pmaxsw", Vdq, Wdq, XX, XX, 0 }, +Ia_pmaxub_Pq_Qq = { "pmaxub", "pmaxub", Pq, Qq, XX, XX, IA_3DNOW | IA_SSE }, +Ia_pmaxub_Vdq_Wdq = { "pmaxub", "pmaxub", Vdq, Wdq, XX, XX, IA_SSE2 }, +Ia_pmaxud_Vdq_Wdq = { "pmaxud", "pmaxud", Vdq, Wdq, XX, XX, IA_SSE4_1 }, +Ia_pmaxuw_Vdq_Wdq = { "pmaxuw", "pmaxuw", Vdq, Wdq, XX, XX, IA_SSE4_1 }, +Ia_pminsb_Vdq_Wdq = { "pminsb", "pminsb", Vdq, Wdq, XX, XX, IA_SSE4_1 }, +Ia_pminsd_Vdq_Wdq = { "pminsd", "pminsd", Vdq, Wdq, XX, XX, IA_SSE4_1 }, +Ia_pminsw_Pq_Qq = { "pminsw", "pminsw", Pq, Qq, XX, XX, IA_3DNOW | IA_SSE }, +Ia_pminsw_Vdq_Wdq = { "pminsw", "pminsw", Vdq, Wdq, XX, XX, IA_SSE2 }, +Ia_pminub_Pq_Qq = { "pminub", "pminub", Pq, Qq, XX, XX, IA_3DNOW | IA_SSE }, +Ia_pminub_Vdq_Wdq = { "pminub", "pminub", Vdq, Wdq, XX, XX, IA_SSE2 }, +Ia_pminud_Vdq_Wdq = { "pminud", "pminud", Vdq, Wdq, XX, XX, IA_SSE4_1 }, +Ia_pminuw_Vdq_Wdq = { "pminuw", "pminuw", Vdq, Wdq, XX, XX, IA_SSE4_1 }, +Ia_pmovmskb_Gd_Nq = { "pmovmskb", "pmovmskb", Gd, Nq, XX, XX, IA_3DNOW | IA_SSE }, +Ia_pmovmskb_Gd_Udq = { "pmovmskb", "pmovmskb", Gd, Udq, XX, XX, IA_SSE2 }, +Ia_pmovsxbd_Vdq_Wd = { "pmovsxbd", "pmovsxbd", Vdq, Wd, XX, XX, IA_SSE4_1 }, +Ia_pmovsxbq_Vdq_Ww = { "pmovsxbq", "pmovsxbq", Vdq, Ww, XX, XX, IA_SSE4_1 }, +Ia_pmovsxbw_Vdq_Wq = { "pmovsxbw", "pmovsxbw", Vdq, Wq, XX, XX, IA_SSE4_1 }, +Ia_pmovsxdq_Vdq_Wq = { "pmovsxdq", "pmovsxdq", Vdq, Wq, XX, XX, IA_SSE4_1 }, +Ia_pmovsxwd_Vdq_Wq = { "pmovsxwd", "pmovsxwd", Vdq, Wq, XX, XX, IA_SSE4_1 }, +Ia_pmovsxwq_Vdq_Wd = { "pmovsxwq", "pmovsxwq", Vdq, Wd, XX, XX, IA_SSE4_1 }, +Ia_pmovzxbd_Vdq_Wd = { "pmovzxbd", "pmovzxbd", Vdq, Wd, XX, XX, IA_SSE4_1 }, +Ia_pmovzxbq_Vdq_Ww = { "pmovzxbq", "pmovzxbq", Vdq, Ww, XX, XX, IA_SSE4_1 }, +Ia_pmovzxbw_Vdq_Wq = { "pmovzxbw", "pmovzxbw", Vdq, Wq, XX, XX, IA_SSE4_1 }, +Ia_pmovzxdq_Vdq_Wq = { "pmovzxdq", "pmovzxdq", Vdq, Wq, XX, XX, IA_SSE4_1 }, +Ia_pmovzxwd_Vdq_Wq = { "pmovzxwd", "pmovzxwd", Vdq, Wq, XX, XX, IA_SSE4_1 }, +Ia_pmovzxwq_Vdq_Wd = { "pmovzxwq", "pmovzxwq", Vdq, Wd, XX, XX, IA_SSE4_1 }, +Ia_pmuldq_Vdq_Wdq = { "pmuldq", "pmuldq", Vdq, Wdq, XX, XX, IA_SSE4_1 }, +Ia_pmulhrsw_Pq_Qq = { "pmulhrsw", "pmulhrsw", Pq, Qq, XX, XX, IA_SSSE3 }, +Ia_pmulhrsw_Vdq_Wdq = { "pmulhrsw", "pmulhrsw", Vdq, Wdq, XX, XX, IA_SSSE3 }, +Ia_pmulhrw_Pq_Qq = { "pmulhrw", "pmulhrw", Pq, Qq, XX, XX, IA_3DNOW }, +Ia_pmulhuw_Pq_Qq = { "pmulhuw", "pmulhuw", Pq, Qq, XX, XX, IA_3DNOW | IA_SSE }, +Ia_pmulhuw_Vdq_Wdq = { "pmulhuw", "pmulhuw", Vdq, Wdq, XX, XX, IA_SSE }, +Ia_pmulhw_Pq_Qq = { "pmulhw", "pmulhw", Pq, Qq, XX, XX, IA_MMX }, +Ia_pmulhw_Vdq_Wdq = { "pmulhw", "pmulhw", Vdq, Wdq, XX, XX, IA_SSE2 }, +Ia_pmulld_Vdq_Wdq = { "pmulld", "pmulld", Vdq, Wdq, XX, XX, IA_SSE4_1 }, +Ia_pmullw_Pq_Qq = { "pmullw", "pmullw", Pq, Qq, XX, XX, IA_MMX }, +Ia_pmullw_Vdq_Wdq = { "pmullw", "pmullw", Vdq, Wdq, XX, XX, IA_SSE2 }, +Ia_pmuludq_Pq_Qq = { "pmuludq", "pmuludq", Pq, Qq, XX, XX, IA_SSE2 }, +Ia_pmuludq_Vdq_Wdq = { "pmuludq", "pmuludq", Vdq, Wdq, XX, XX, IA_SSE2 }, +Ia_popal = { "popa", "popal", XX, XX, XX, XX, 0 }, +Ia_popaw = { "popa", "popa", XX, XX, XX, XX, 0 }, +Ia_popcnt_Gd_Ed = { "popcnt", "popcnt", Gd, Ed, XX, XX, IA_POPCNT }, +Ia_popcnt_Gq_Eq = { "popcnt", "popcnt", Gq, Eq, XX, XX, IA_POPCNT }, +Ia_popcnt_Gw_Ew = { "popcnt", "popcnt", Gw, Ew, XX, XX, IA_POPCNT }, +Ia_popfl = { "popf", "popfl", XX, XX, XX, XX, 0 }, +Ia_popfq = { "popf", "popfq", XX, XX, XX, XX, 0 }, +Ia_popfw = { "popf", "popf", XX, XX, XX, XX, 0 }, +Ia_popl_DS = { "pop", "popl", DS, XX, XX, XX, 0 }, +Ia_popl_Ed = { "pop", "popl", Ed, XX, XX, XX, 0 }, +Ia_popl_ERX = { "pop", "popl", ERX, XX, XX, XX, 0 }, +Ia_popl_ES = { "pop", "popl", ES, XX, XX, XX, 0 }, +Ia_popl_FS = { "pop", "popl", FS, XX, XX, XX, 0 }, +Ia_popl_GS = { "pop", "popl", GS, XX, XX, XX, 0 }, +Ia_popl_SS = { "pop", "popl", SS, XX, XX, XX, 0 }, +Ia_popq_Eq = { "pop", "popq", Eq, XX, XX, XX, 0 }, +Ia_popq_FS = { "pop", "popq", FS, XX, XX, XX, 0 }, +Ia_popq_GS = { "pop", "popq", GS, XX, XX, XX, 0 }, +Ia_popq_RRX = { "pop", "popq", RRX, XX, XX, XX, 0 }, +Ia_popw_DS = { "pop", "popw", DS, XX, XX, XX, 0 }, +Ia_popw_ES = { "pop", "popw", ES, XX, XX, XX, 0 }, +Ia_popw_Ew = { "pop", "popw", Ew, XX, XX, XX, 0 }, +Ia_popw_FS = { "pop", "popw", FS, XX, XX, XX, 0 }, +Ia_popw_GS = { "pop", "popw", GS, XX, XX, XX, 0 }, +Ia_popw_RX = { "pop", "popw", RX, XX, XX, XX, 0 }, +Ia_popw_SS = { "pop", "popw", SS, XX, XX, XX, 0 }, +Ia_por_Pq_Qq = { "por", "por", Pq, Qq, XX, XX, IA_MMX }, +Ia_por_Vdq_Wdq = { "por", "por", Vdq, Wdq, XX, XX, IA_SSE2 }, +Ia_prefetch_hint = { "prefetch_hint", "prefetch_hint", Mb, XX, XX, XX, IA_SSE }, +Ia_prefetchnta = { "prefetchnta", "prefetchnta", Mb, XX, XX, XX, IA_SSE }, +Ia_prefetcht0 = { "prefetcht0", "prefetcht0", Mb, XX, XX, XX, IA_SSE }, +Ia_prefetcht1 = { "prefetcht1", "prefetcht1", Mb, XX, XX, XX, IA_SSE }, +Ia_prefetcht2 = { "prefetcht2", "prefetcht2", Mb, XX, XX, XX, IA_SSE }, +Ia_prefetchw = { "prefetchw", "prefetchw", Mb, XX, XX, XX, 0 }, +Ia_prefix_asize = { "asize", "asize", XX, XX, XX, XX, 0 }, +Ia_prefix_cs = { "cs", "cs", XX, XX, XX, XX, 0 }, +Ia_prefix_ds = { "ds", "ds", XX, XX, XX, XX, 0 }, +Ia_prefix_es = { "es", "es", XX, XX, XX, XX, 0 }, +Ia_prefix_fs = { "fs", "fs", XX, XX, XX, XX, 0 }, +Ia_prefix_gs = { "gs", "gs", XX, XX, XX, XX, 0 }, +Ia_prefix_lock = { "lock", "lock", XX, XX, XX, XX, 0 }, +Ia_prefix_osize = { "osize", "osize", XX, XX, XX, XX, 0 }, +Ia_prefix_rep = { "rep", "rep", XX, XX, XX, XX, 0 }, +Ia_prefix_repne = { "repne", "repne", XX, XX, XX, XX, 0 }, +Ia_prefix_rex = { "rex", "rex", XX, XX, XX, XX, 0 }, +Ia_prefix_ss = { "ss", "ss", XX, XX, XX, XX, 0 }, +Ia_psadbw_Pq_Qq = { "psadbw", "psadbw", Pq, Qq, XX, XX, IA_3DNOW | IA_SSE }, +Ia_psadbw_Vdq_Wdq = { "psadbw", "psadbw", Vdq, Wdq, XX, XX, IA_SSE2 }, +Ia_pshufb_Pq_Qq = { "pshufb", "pshufb", Pq, Qq, XX, XX, IA_SSSE3 }, +Ia_pshufb_Vdq_Wdq = { "pshufb", "pshufb", Vdq, Wdq, XX, XX, IA_SSSE3 }, +Ia_pshufd_Vdq_Wdq_Ib = { "pshufd", "pshufd", Vdq, Wdq, Ib, XX, IA_SSE2 }, +Ia_pshufhw_Vdq_Wdq_Ib = { "pshufhw", "pshufhw", Vdq, Wdq, Ib, XX, IA_SSE2 }, +Ia_pshuflw_Vdq_Wdq_Ib = { "pshuflw", "pshuflw", Vdq, Wdq, Ib, XX, IA_SSE2 }, +Ia_pshufw_Pq_Qq_Ib = { "pshufw", "pshufw", Pq, Qq, Ib, XX, IA_3DNOW | IA_SSE }, +Ia_psignb_Pq_Qq = { "psignb", "psignb", Pq, Qq, XX, XX, IA_SSSE3 }, +Ia_psignb_Vdq_Wdq = { "psignb", "psignb", Vdq, Wdq, XX, XX, IA_SSSE3 }, +Ia_psignd_Pq_Qq = { "psignd", "psignd", Pq, Qq, XX, XX, IA_SSSE3 }, +Ia_psignd_Vdq_Wdq = { "psignd", "psignd", Vdq, Wdq, XX, XX, IA_SSSE3 }, +Ia_psignw_Pq_Qq = { "psignw", "psignw", Pq, Qq, XX, XX, IA_SSSE3 }, +Ia_psignw_Vdq_Wdq = { "psignw", "psignw", Vdq, Wdq, XX, XX, IA_SSSE3 }, +Ia_pslld_Nq_Ib = { "pslld", "pslld", Nq, Ib, XX, XX, IA_MMX }, +Ia_pslld_Pq_Qq = { "pslld", "pslld", Pq, Qq, XX, XX, IA_MMX }, +Ia_pslld_Udq_Ib = { "pslld", "pslld", Udq, Ib, XX, XX, IA_SSE2 }, +Ia_pslld_Vdq_Wdq = { "pslld", "pslld", Vdq, Wdq, XX, XX, IA_SSE2 }, +Ia_pslldq_Udq_Ib = { "pslldq", "pslldq", Udq, Ib, XX, XX, IA_SSE2 }, +Ia_psllq_Nq_Ib = { "psllq", "psllq", Nq, Ib, XX, XX, IA_MMX }, +Ia_psllq_Pq_Qq = { "psllq", "psllq", Pq, Qq, XX, XX, IA_MMX }, +Ia_psllq_Udq_Ib = { "psllq", "psllq", Udq, Ib, XX, XX, IA_SSE2 }, +Ia_psllq_Vdq_Wdq = { "psllq", "psllq", Vdq, Wdq, XX, XX, IA_SSE2 }, +Ia_psllw_Nq_Ib = { "psllw", "psllw", Nq, Ib, XX, XX, IA_MMX }, +Ia_psllw_Pq_Qq = { "psllw", "psllw", Pq, Qq, XX, XX, IA_MMX }, +Ia_psllw_Udq_Ib = { "psllw", "psllw", Udq, Ib, XX, XX, IA_SSE2 }, +Ia_psllw_Vdq_Wdq = { "psllw", "psllw", Vdq, Wdq, XX, XX, IA_SSE2 }, +Ia_psrad_Nq_Ib = { "psrad", "psrad", Nq, Ib, XX, XX, IA_MMX }, +Ia_psrad_Pq_Qq = { "psrad", "psrad", Pq, Qq, XX, XX, IA_MMX }, +Ia_psrad_Udq_Ib = { "psrad", "psrad", Udq, Ib, XX, XX, IA_SSE2 }, +Ia_psrad_Vdq_Wdq = { "psrad", "psrad", Vdq, Wdq, XX, XX, IA_SSE2 }, +Ia_psraw_Nq_Ib = { "psraw", "psraw", Nq, Ib, XX, XX, IA_MMX }, +Ia_psraw_Pq_Qq = { "psraw", "psraw", Pq, Qq, XX, XX, IA_MMX }, +Ia_psraw_Udq_Ib = { "psraw", "psraw", Udq, Ib, XX, XX, IA_SSE2 }, +Ia_psraw_Vdq_Wdq = { "psraw", "psraw", Vdq, Wdq, XX, XX, IA_SSE2 }, +Ia_psrld_Nq_Ib = { "psrld", "psrld", Nq, Ib, XX, XX, IA_MMX }, +Ia_psrld_Pq_Qq = { "psrld", "psrld", Pq, Qq, XX, XX, IA_MMX }, +Ia_psrld_Udq_Ib = { "psrld", "psrld", Udq, Ib, XX, XX, IA_SSE2 }, +Ia_psrld_Vdq_Wdq = { "psrld", "psrld", Vdq, Wdq, XX, XX, IA_SSE2 }, +Ia_psrldq_Udq_Ib = { "psrldq", "psrldq", Udq, Ib, XX, XX, IA_SSE2 }, +Ia_psrlq_Nq_Ib = { "psrlq", "psrlq", Nq, Ib, XX, XX, IA_MMX }, +Ia_psrlq_Pq_Qq = { "psrlq", "psrlq", Pq, Qq, XX, XX, IA_MMX }, +Ia_psrlq_Udq_Ib = { "psrlq", "psrlq", Udq, Ib, XX, XX, IA_SSE2 }, +Ia_psrlq_Vdq_Wdq = { "psrlq", "psrlq", Vdq, Wdq, XX, XX, IA_SSE2 }, +Ia_psrlw_Nq_Ib = { "psrlw", "psrlw", Nq, Ib, XX, XX, IA_MMX }, +Ia_psrlw_Pq_Qq = { "psrlw", "psrlw", Pq, Qq, XX, XX, IA_MMX }, +Ia_psrlw_Udq_Ib = { "psrlw", "psrlw", Udq, Ib, XX, XX, IA_SSE2 }, +Ia_psrlw_Vdq_Wdq = { "psrlw", "psrlw", Vdq, Wdq, XX, XX, IA_SSE2 }, +Ia_psubb_Pq_Qq = { "psubb", "psubb", Pq, Qq, XX, XX, IA_MMX }, +Ia_psubb_Vdq_Wdq = { "psubb", "psubb", Vdq, Wdq, XX, XX, IA_SSE2 }, +Ia_psubd_Pq_Qq = { "psubd", "psubd", Pq, Qq, XX, XX, IA_MMX }, +Ia_psubd_Vdq_Wdq = { "psubd", "psubd", Vdq, Wdq, XX, XX, IA_SSE2 }, +Ia_psubq_Pq_Qq = { "psubq", "psubq", Pq, Qq, XX, XX, IA_SSE2 }, +Ia_psubq_Vdq_Wdq = { "psubq", "psubq", Vdq, Wdq, XX, XX, IA_SSE2 }, +Ia_psubsb_Pq_Qq = { "psubsb", "psubsb", Pq, Qq, XX, XX, IA_MMX }, +Ia_psubsb_Vdq_Wdq = { "psubsb", "psubsb", Vdq, Wdq, XX, XX, IA_SSE2 }, +Ia_psubsw_Pq_Qq = { "psubsw", "psubsw", Pq, Qq, XX, XX, IA_MMX }, +Ia_psubsw_Vdq_Wdq = { "psubsw", "psubsw", Vdq, Wdq, XX, XX, IA_SSE2 }, +Ia_psubusb_Pq_Qq = { "psubusb", "psubusb", Pq, Qq, XX, XX, IA_MMX }, +Ia_psubusb_Vdq_Wdq = { "psubusb", "psubusb", Vdq, Wdq, XX, XX, IA_SSE2 }, +Ia_psubusw_Pq_Qq = { "psubusw", "psubusw", Pq, Qq, XX, XX, IA_MMX }, +Ia_psubusw_Vdq_Wdq = { "psubusw", "psubusw", Vdq, Wdq, XX, XX, IA_SSE2 }, +Ia_psubw_Pq_Qq = { "psubw", "psubw", Pq, Qq, XX, XX, IA_MMX }, +Ia_psubw_Vdq_Wdq = { "psubw", "psubw", Vdq, Wdq, XX, XX, IA_SSE2 }, +Ia_pswapd_Pq_Qq = { "pswapd", "pswapd", Pq, Qq, XX, XX, IA_3DNOW }, +Ia_ptest_Vdq_Wdq = { "ptest", "ptest", Vdq, Wdq, XX, XX, IA_SSE4_1 }, +Ia_punpckhbw_Pq_Qq = { "punpckhbw", "punpckhbw", Pq, Qq, XX, XX, IA_MMX }, +Ia_punpckhbw_Vdq_Wdq = { "punpckhbw", "punpckhbw", Vdq, Wdq, XX, XX, IA_SSE2 }, +Ia_punpckhdq_Pq_Qq = { "punpckhdq", "punpckhdq", Pq, Qq, XX, XX, IA_MMX }, +Ia_punpckhdq_Vdq_Wdq = { "punpckhdq", "punpckhdq", Vdq, Wdq, XX, XX, IA_SSE2 }, +Ia_punpckhqdq_Vdq_Wdq = { "punpckhqdq", "punpckhqdq", Vdq, Wdq, XX, XX, IA_SSE2 }, +Ia_punpckhwd_Pq_Qq = { "punpckhwd", "punpckhwd", Pq, Qq, XX, XX, IA_MMX }, +Ia_punpckhwd_Vdq_Wdq = { "punpckhwd", "punpckhwd", Vdq, Wdq, XX, XX, IA_SSE2 }, +Ia_punpcklbw_Pq_Qd = { "punpcklbw", "punpcklbw", Pq, Qd, XX, XX, IA_MMX }, +Ia_punpcklbw_Vdq_Wdq = { "punpcklbw", "punpcklbw", Vdq, Wdq, XX, XX, IA_SSE2 }, +Ia_punpckldq_Pq_Qd = { "punpckldq", "punpckldq", Pq, Qd, XX, XX, IA_MMX }, +Ia_punpckldq_Vdq_Wdq = { "punpckldq", "punpckldq", Vdq, Wdq, XX, XX, IA_SSE2 }, +Ia_punpcklqdq_Vdq_Wdq = { "punpcklqdq", "punpcklqdq", Vdq, Wdq, XX, XX, IA_SSE2 }, +Ia_punpcklwd_Pq_Qd = { "punpcklwd", "punpcklwd", Pq, Qd, XX, XX, IA_MMX }, +Ia_punpcklwd_Vdq_Wdq = { "punpcklwd", "punpcklwd", Vdq, Wdq, XX, XX, IA_SSE2 }, +Ia_pushal = { "pusha", "pushal", XX, XX, XX, XX, 0 }, +Ia_pushaw = { "pusha", "pusha", XX, XX, XX, XX, 0 }, +Ia_pushfl = { "pushf", "pushfl", XX, XX, XX, XX, 0 }, +Ia_pushfq = { "pushf", "pushfq", XX, XX, XX, XX, 0 }, +Ia_pushfw = { "pushf", "pushf", XX, XX, XX, XX, 0 }, +Ia_pushl_CS = { "push", "pushl", CS, XX, XX, XX, 0 }, +Ia_pushl_DS = { "push", "pushl", DS, XX, XX, XX, 0 }, +Ia_pushl_Ed = { "push", "pushl", Ed, XX, XX, XX, 0 }, +Ia_pushl_ERX = { "push", "pushl", ERX, XX, XX, XX, 0 }, +Ia_pushl_ES = { "push", "pushl", ES, XX, XX, XX, 0 }, +Ia_pushl_FS = { "push", "pushl", FS, XX, XX, XX, 0 }, +Ia_pushl_GS = { "push", "pushl", GS, XX, XX, XX, 0 }, +Ia_pushl_Id = { "push", "pushl", Id, XX, XX, XX, 0 }, +Ia_pushl_sIb = { "push", "pushl", sIbd, XX, XX, XX, 0 }, +Ia_pushl_SS = { "push", "pushl", SS, XX, XX, XX, 0 }, +Ia_pushq_Eq = { "push", "pushq", Eq, XX, XX, XX, 0 }, +Ia_pushq_FS = { "push", "pushq", FS, XX, XX, XX, 0 }, +Ia_pushq_GS = { "push", "pushq", GS, XX, XX, XX, 0 }, +Ia_pushq_RRX = { "push", "pushq", RRX, XX, XX, XX, 0 }, +Ia_pushq_sIb = { "push", "pushq", sIbq, XX, XX, XX, 0 }, +Ia_pushq_sId = { "push", "pushq", sIdq, XX, XX, XX, 0 }, +Ia_pushw_CS = { "push", "pushw", CS, XX, XX, XX, 0 }, +Ia_pushw_DS = { "push", "pushw", DS, XX, XX, XX, 0 }, +Ia_pushw_ES = { "push", "pushw", ES, XX, XX, XX, 0 }, +Ia_pushw_Ew = { "push", "pushw", Ew, XX, XX, XX, 0 }, +Ia_pushw_FS = { "push", "pushw", FS, XX, XX, XX, 0 }, +Ia_pushw_GS = { "push", "pushw", GS, XX, XX, XX, 0 }, +Ia_pushw_Iw = { "push", "pushw", Iw, XX, XX, XX, 0 }, +Ia_pushw_RX = { "push", "pushw", RX, XX, XX, XX, 0 }, +Ia_pushw_sIb = { "push", "pushw", sIbw, XX, XX, XX, 0 }, +Ia_pushw_SS = { "push", "pushw", SS, XX, XX, XX, 0 }, +Ia_pxor_Pq_Qq = { "pxor", "pxor", Pq, Qq, XX, XX, IA_MMX }, +Ia_pxor_Vdq_Wdq = { "pxor", "pxor", Vdq, Wdq, XX, XX, IA_SSE2 }, +Ia_rclb_Eb_CL = { "rcl", "rclb", Eb, CL_Reg, XX, XX, 0 }, +Ia_rclb_Eb_I1 = { "rcl", "rclb", Eb, I1, XX, XX, 0 }, +Ia_rclb_Eb_Ib = { "rcl", "rclb", Eb, Ib, XX, XX, 0 }, +Ia_rcll_Ed_CL = { "rcl", "rcll", Ed, CL_Reg, XX, XX, 0 }, +Ia_rcll_Ed_I1 = { "rcl", "rcll", Ed, I1, XX, XX, 0 }, +Ia_rcll_Ed_Ib = { "rcl", "rcll", Ed, Ib, XX, XX, 0 }, +Ia_rclq_Eq_CL = { "rcl", "rclq", Eq, CL_Reg, XX, XX, 0 }, +Ia_rclq_Eq_I1 = { "rcl", "rclq", Eq, I1, XX, XX, 0 }, +Ia_rclq_Eq_Ib = { "rcl", "rclq", Eq, Ib, XX, XX, 0 }, +Ia_rclw_Ew_CL = { "rcl", "rclw", Ew, CL_Reg, XX, XX, 0 }, +Ia_rclw_Ew_I1 = { "rcl", "rclw", Ew, I1, XX, XX, 0 }, +Ia_rclw_Ew_Ib = { "rcl", "rclw", Ew, Ib, XX, XX, 0 }, +Ia_rcpps_Vps_Wps = { "rcpps", "rcpps", Vps, Wps, XX, XX, IA_SSE }, +Ia_rcpss_Vss_Wss = { "rcpss", "rcpss", Vss, Wss, XX, XX, IA_SSE }, +Ia_rcrb_Eb_CL = { "rcr", "rcrb", Eb, CL_Reg, XX, XX, 0 }, +Ia_rcrb_Eb_I1 = { "rcr", "rcrb", Eb, I1, XX, XX, 0 }, +Ia_rcrb_Eb_Ib = { "rcr", "rcrb", Eb, Ib, XX, XX, 0 }, +Ia_rcrl_Ed_CL = { "rcr", "rcrl", Ed, CL_Reg, XX, XX, 0 }, +Ia_rcrl_Ed_I1 = { "rcr", "rcrl", Ed, I1, XX, XX, 0 }, +Ia_rcrl_Ed_Ib = { "rcr", "rcrl", Ed, Ib, XX, XX, 0 }, +Ia_rcrq_Eq_CL = { "rcr", "rcrq", Eq, CL_Reg, XX, XX, 0 }, +Ia_rcrq_Eq_I1 = { "rcr", "rcrq", Eq, I1, XX, XX, 0 }, +Ia_rcrq_Eq_Ib = { "rcr", "rcrq", Eq, Ib, XX, XX, 0 }, +Ia_rcrw_Ew_CL = { "rcr", "rcrw", Ew, CL_Reg, XX, XX, 0 }, +Ia_rcrw_Ew_I1 = { "rcr", "rcrw", Ew, I1, XX, XX, 0 }, +Ia_rcrw_Ew_Ib = { "rcr", "rcrw", Ew, Ib, XX, XX, 0 }, +Ia_rdfsbase_Ry = { "rdfsbase", "rdfsbase", Ry, XX, XX, XX, IA_FSGSBASE }, +Ia_rdgsbase_Ry = { "rdgsbase", "rdgsbase", Ry, XX, XX, XX, IA_FSGSBASE }, +Ia_rdmsr = { "rdmsr", "rdmsr", XX, XX, XX, XX, IA_PENTIUM }, +Ia_rdpmc = { "rdpmc", "rdpmc", XX, XX, XX, XX, IA_P6 }, +Ia_rdrand_Ed = { "rdrand", "rdrandd", Ed, XX, XX, XX, IA_RDRAND }, +Ia_rdrand_Eq = { "rdrand", "rdrandq", Eq, XX, XX, XX, IA_RDRAND }, +Ia_rdrand_Ew = { "rdrand", "rdrandw", Ew, XX, XX, XX, IA_RDRAND }, +Ia_rdseed_Ed = { "rdseed", "rdseedd", Ed, XX, XX, XX, IA_RDSEED }, +Ia_rdseed_Eq = { "rdseed", "rdseedq", Eq, XX, XX, XX, IA_RDSEED }, +Ia_rdseed_Ew = { "rdseed", "rdseedw", Ew, XX, XX, XX, IA_RDSEED }, +Ia_rdtsc = { "rdtsc", "rdtsc", XX, XX, XX, XX, IA_PENTIUM }, +Ia_rdtscp = { "rdtscp", "rdtscp", XX, XX, XX, XX, IA_RDTSCP }, +Ia_ret = { "ret", "ret", XX, XX, XX, XX, 0 }, +Ia_ret_Iw = { "ret", "ret", Iw, XX, XX, XX, 0 }, +Ia_rolb_Eb_CL = { "rol", "rolb", Eb, CL_Reg, XX, XX, 0 }, +Ia_rolb_Eb_I1 = { "rol", "rolb", Eb, I1, XX, XX, 0 }, +Ia_rolb_Eb_Ib = { "rol", "rolb", Eb, Ib, XX, XX, 0 }, +Ia_roll_Ed_CL = { "rol", "roll", Ed, CL_Reg, XX, XX, 0 }, +Ia_roll_Ed_I1 = { "rol", "roll", Ed, I1, XX, XX, 0 }, +Ia_roll_Ed_Ib = { "rol", "roll", Ed, Ib, XX, XX, 0 }, +Ia_rolq_Eq_CL = { "rol", "rolq", Eq, CL_Reg, XX, XX, 0 }, +Ia_rolq_Eq_I1 = { "rol", "rolq", Eq, I1, XX, XX, 0 }, +Ia_rolq_Eq_Ib = { "rol", "rolq", Eq, Ib, XX, XX, 0 }, +Ia_rolw_Ew_CL = { "rol", "rolw", Ew, CL_Reg, XX, XX, 0 }, +Ia_rolw_Ew_I1 = { "rol", "rolw", Ew, I1, XX, XX, 0 }, +Ia_rolw_Ew_Ib = { "rol", "rolw", Ew, Ib, XX, XX, 0 }, +Ia_rorb_Eb_CL = { "ror", "rorb", Eb, CL_Reg, XX, XX, 0 }, +Ia_rorb_Eb_I1 = { "ror", "rorb", Eb, I1, XX, XX, 0 }, +Ia_rorb_Eb_Ib = { "ror", "rorb", Eb, Ib, XX, XX, 0 }, +Ia_rorl_Ed_CL = { "ror", "rorl", Ed, CL_Reg, XX, XX, 0 }, +Ia_rorl_Ed_I1 = { "ror", "rorl", Ed, I1, XX, XX, 0 }, +Ia_rorl_Ed_Ib = { "ror", "rorl", Ed, Ib, XX, XX, 0 }, +Ia_rorq_Eq_CL = { "ror", "rorq", Eq, CL_Reg, XX, XX, 0 }, +Ia_rorq_Eq_I1 = { "ror", "rorq", Eq, I1, XX, XX, 0 }, +Ia_rorq_Eq_Ib = { "ror", "rorq", Eq, Ib, XX, XX, 0 }, +Ia_rorw_Ew_CL = { "ror", "rorw", Ew, CL_Reg, XX, XX, 0 }, +Ia_rorw_Ew_I1 = { "ror", "rorw", Ew, I1, XX, XX, 0 }, +Ia_rorw_Ew_Ib = { "ror", "rorw", Ew, Ib, XX, XX, 0 }, +Ia_rorx_Gy_Ey_Ib = { "rorx", "rorx", Gy, Ey, Ib, XX, IA_BMI2 }, +Ia_roundpd_Vpd_Wpd_Ib = { "roundpd", "roundpd", Vpd, Wpd, Ib, XX, IA_SSE4_1 }, +Ia_roundps_Vps_Wps_Ib = { "roundps", "roundps", Vps, Wps, Ib, XX, IA_SSE4_1 }, +Ia_roundsd_Vsd_Wsd_Ib = { "roundsd", "roundsd", Vsd, Wsd, Ib, XX, IA_SSE4_1 }, +Ia_roundss_Vss_Wss_Ib = { "roundss", "roundss", Vss, Wss, Ib, XX, IA_SSE4_1 }, +Ia_rsm = { "rsm", "rsm", XX, XX, XX, XX, 0 }, +Ia_rsqrtps_Vps_Wps = { "rsqrtps", "rsqrtps", Vps, Wps, XX, XX, IA_SSE }, +Ia_rsqrtss_Vss_Wss = { "rsqrtss", "rsqrtss", Vss, Wss, XX, XX, IA_SSE }, +Ia_sahf = { "sahf", "sahf", XX, XX, XX, XX, 0 }, +Ia_salc = { "salc", "salc", XX, XX, XX, XX, 0 }, +Ia_sarb_Eb_CL = { "sar", "sarb", Eb, CL_Reg, XX, XX, 0 }, +Ia_sarb_Eb_I1 = { "sar", "sarb", Eb, I1, XX, XX, 0 }, +Ia_sarb_Eb_Ib = { "sar", "sarb", Eb, Ib, XX, XX, 0 }, +Ia_sarl_Ed_CL = { "sar", "sarl", Ed, CL_Reg, XX, XX, 0 }, +Ia_sarl_Ed_I1 = { "sar", "sarl", Ed, I1, XX, XX, 0 }, +Ia_sarl_Ed_Ib = { "sar", "sarl", Ed, Ib, XX, XX, 0 }, +Ia_sarq_Eq_CL = { "sar", "sarq", Eq, CL_Reg, XX, XX, 0 }, +Ia_sarq_Eq_I1 = { "sar", "sarq", Eq, I1, XX, XX, 0 }, +Ia_sarq_Eq_Ib = { "sar", "sarq", Eq, Ib, XX, XX, 0 }, +Ia_sarw_Ew_CL = { "sar", "sarw", Ew, CL_Reg, XX, XX, 0 }, +Ia_sarw_Ew_I1 = { "sar", "sarw", Ew, I1, XX, XX, 0 }, +Ia_sarw_Ew_Ib = { "sar", "sarw", Ew, Ib, XX, XX, 0 }, +Ia_sarx_Gy_Ey_By = { "sarx", "sarx", Gy, Ey, By, XX, IA_BMI2 }, +Ia_sbbb_AL_Ib = { "sbb", "sbbb", AL_Reg, Ib, XX, XX, 0 }, +Ia_sbbb_Eb_Gb = { "sbb", "sbbb", Eb, Gb, XX, XX, 0 }, +Ia_sbbb_Eb_Ib = { "sbb", "sbbb", Eb, Ib, XX, XX, 0 }, +Ia_sbbb_Gb_Eb = { "sbb", "sbbb", Gb, Eb, XX, XX, 0 }, +Ia_sbbl_EAX_Id = { "sbb", "sbbl", EAX_Reg, Id, XX, XX, 0 }, +Ia_sbbl_Ed_Gd = { "sbb", "sbbl", Ed, Gd, XX, XX, 0 }, +Ia_sbbl_Ed_Id = { "sbb", "sbbl", Ed, Id, XX, XX, 0 }, +Ia_sbbl_Ed_sIb = { "sbb", "sbbl", Ed, sIbd, XX, XX, 0 }, +Ia_sbbl_Gd_Ed = { "sbb", "sbbl", Gd, Ed, XX, XX, 0 }, +Ia_sbbq_Eq_Gq = { "sbb", "sbbq", Eq, Gq, XX, XX, 0 }, +Ia_sbbq_Eq_sIb = { "sbb", "sbbq", Eq, sIbq, XX, XX, 0 }, +Ia_sbbq_Eq_sId = { "sbb", "sbbq", Eq, sIdq, XX, XX, 0 }, +Ia_sbbq_Gq_Eq = { "sbb", "sbbq", Gq, Eq, XX, XX, 0 }, +Ia_sbbq_RAX_sId = { "sbb", "sbbq", RAX_Reg, sIdq, XX, XX, 0 }, +Ia_sbbw_AX_Iw = { "sbb", "sbbw", AX_Reg, Iw, XX, XX, 0 }, +Ia_sbbw_Ew_Gw = { "sbb", "sbbw", Ew, Gw, XX, XX, 0 }, +Ia_sbbw_Ew_Iw = { "sbb", "sbbw", Ew, Iw, XX, XX, 0 }, +Ia_sbbw_Ew_sIb = { "sbb", "sbbw", Ew, sIbw, XX, XX, 0 }, +Ia_sbbw_Gw_Ew = { "sbb", "sbbw", Gw, Ew, XX, XX, 0 }, +Ia_scasb_AL_Yb = { "scasb", "scasb", AL_Reg, Yb, XX, XX, 0 }, +Ia_scasl_EAX_Yd = { "scasd", "scasl", EAX_Reg, Yd, XX, XX, 0 }, +Ia_scasq_RAX_Yq = { "scasq", "scasq", RAX_Reg, Yq, XX, XX, 0 }, +Ia_scasw_AX_Yw = { "scasw", "scasw", AX_Reg, Yw, XX, XX, 0 }, +Ia_setb_Eb = { "setb", "setb", Eb, XX, XX, XX, 0 }, +Ia_setbe_Eb = { "setbe", "setbe", Eb, XX, XX, XX, 0 }, +Ia_setl_Eb = { "setl", "setl", Eb, XX, XX, XX, 0 }, +Ia_setle_Eb = { "setle", "setle", Eb, XX, XX, XX, 0 }, +Ia_setnb_Eb = { "setnb", "setnb", Eb, XX, XX, XX, 0 }, +Ia_setnbe_Eb = { "setnbe", "setnbe", Eb, XX, XX, XX, 0 }, +Ia_setnl_Eb = { "setnl", "setnl", Eb, XX, XX, XX, 0 }, +Ia_setnle_Eb = { "setnle", "setnle", Eb, XX, XX, XX, 0 }, +Ia_setno_Eb = { "setno", "setno", Eb, XX, XX, XX, 0 }, +Ia_setnp_Eb = { "setnp", "setnp", Eb, XX, XX, XX, 0 }, +Ia_setns_Eb = { "setns", "setns", Eb, XX, XX, XX, 0 }, +Ia_setnz_Eb = { "setnz", "setnz", Eb, XX, XX, XX, 0 }, +Ia_seto_Eb = { "seto", "seto", Eb, XX, XX, XX, 0 }, +Ia_setp_Eb = { "setp", "setp", Eb, XX, XX, XX, 0 }, +Ia_sets_Eb = { "sets", "sets", Eb, XX, XX, XX, 0 }, +Ia_setz_Eb = { "setz", "setz", Eb, XX, XX, XX, 0 }, +Ia_sfence = { "sfence", "sfence", XX, XX, XX, XX, IA_SSE }, +Ia_sgdt = { "sgdt", "sgdt", Ms, XX, XX, XX, 0 }, +Ia_sha1msg1_Vdq_Wdq = { "sha1msg1", "sha1msg1", Vdq, Wdq, XX, XX, IA_SHA }, +Ia_sha1msg2_Vdq_Wdq = { "sha1msg2", "sha1msg2", Vdq, Wdq, XX, XX, IA_SHA }, +Ia_sha1nexte_Vdq_Wdq = { "sha1nexte", "sha1nexte", Vdq, Wdq, XX, XX, IA_SHA }, +Ia_sha1rnds4_Vdq_Wdq_Ib = { "sha1rnds4", "sha1rnds4", Vdq, Wdq, Ib, XX, IA_SHA }, +Ia_sha256msg1_Vdq_Wdq = { "sha256msg1", "sha256msg1", Vdq, Wdq, XX, XX, IA_SHA }, +Ia_sha256msg2_Vdq_Wdq = { "sha256msg2", "sha256msg2", Vdq, Wdq, XX, XX, IA_SHA }, +Ia_sha256rnds2_Vdq_Wdq = { "sha256rnds2", "sha256rnds2", Vdq, Wdq, XX, XX, IA_SHA }, +Ia_shlb_Eb_CL = { "shl", "shlb", Eb, CL_Reg, XX, XX, 0 }, +Ia_shlb_Eb_I1 = { "shl", "shlb", Eb, I1, XX, XX, 0 }, +Ia_shlb_Eb_Ib = { "shl", "shlb", Eb, Ib, XX, XX, 0 }, +Ia_shldl_Ed_Gd_CL = { "shld", "shldl", Ed, Gd, CL_Reg, XX, 0 }, +Ia_shldl_Ed_Gd_Ib = { "shld", "shldl", Ed, Gd, Ib, XX, 0 }, +Ia_shldq_Eq_Gq_CL = { "shld", "shldq", Eq, Gq, CL_Reg, XX, 0 }, +Ia_shldq_Eq_Gq_Ib = { "shld", "shldq", Eq, Gq, Ib, XX, 0 }, +Ia_shldw_Ew_Gw_CL = { "shld", "shldw", Ew, Gw, CL_Reg, XX, 0 }, +Ia_shldw_Ew_Gw_Ib = { "shld", "shldw", Ew, Gw, Ib, XX, 0 }, +Ia_shll_Ed_CL = { "shl", "shll", Ed, CL_Reg, XX, XX, 0 }, +Ia_shll_Ed_I1 = { "shl", "shll", Ed, I1, XX, XX, 0 }, +Ia_shll_Ed_Ib = { "shl", "shll", Ed, Ib, XX, XX, 0 }, +Ia_shlq_Eq_CL = { "shl", "shlq", Eq, CL_Reg, XX, XX, 0 }, +Ia_shlq_Eq_I1 = { "shl", "shlq", Eq, I1, XX, XX, 0 }, +Ia_shlq_Eq_Ib = { "shl", "shlq", Eq, Ib, XX, XX, 0 }, +Ia_shlw_Ew_CL = { "shl", "shlw", Ew, CL_Reg, XX, XX, 0 }, +Ia_shlw_Ew_I1 = { "shl", "shlw", Ew, I1, XX, XX, 0 }, +Ia_shlw_Ew_Ib = { "shl", "shlw", Ew, Ib, XX, XX, 0 }, +Ia_shlx_Gy_Ey_By = { "shlx", "shlx", Gy, Ey, By, XX, IA_BMI2 }, +Ia_shrb_Eb_CL = { "shr", "shrb", Eb, CL_Reg, XX, XX, 0 }, +Ia_shrb_Eb_I1 = { "shr", "shrb", Eb, I1, XX, XX, 0 }, +Ia_shrb_Eb_Ib = { "shr", "shrb", Eb, Ib, XX, XX, 0 }, +Ia_shrdl_Ed_Gd_CL = { "shrd", "shrdl", Ed, Gd, CL_Reg, XX, 0 }, +Ia_shrdl_Ed_Gd_Ib = { "shrd", "shrdl", Ed, Gd, Ib, XX, 0 }, +Ia_shrdq_Eq_Gq_CL = { "shrd", "shrdq", Eq, Gq, CL_Reg, XX, 0 }, +Ia_shrdq_Eq_Gq_Ib = { "shrd", "shrdq", Eq, Gq, Ib, XX, 0 }, +Ia_shrdw_Ew_Gw_CL = { "shrd", "shrdw", Ew, Gw, CL_Reg, XX, 0 }, +Ia_shrdw_Ew_Gw_Ib = { "shrd", "shrdw", Ew, Gw, Ib, XX, 0 }, +Ia_shrl_Ed_CL = { "shr", "shrl", Ed, CL_Reg, XX, XX, 0 }, +Ia_shrl_Ed_I1 = { "shr", "shrl", Ed, I1, XX, XX, 0 }, +Ia_shrl_Ed_Ib = { "shr", "shrl", Ed, Ib, XX, XX, 0 }, +Ia_shrq_Eq_CL = { "shr", "shrq", Eq, CL_Reg, XX, XX, 0 }, +Ia_shrq_Eq_I1 = { "shr", "shrq", Eq, I1, XX, XX, 0 }, +Ia_shrq_Eq_Ib = { "shr", "shrq", Eq, Ib, XX, XX, 0 }, +Ia_shrw_Ew_CL = { "shr", "shrw", Ew, CL_Reg, XX, XX, 0 }, +Ia_shrw_Ew_I1 = { "shr", "shrw", Ew, I1, XX, XX, 0 }, +Ia_shrw_Ew_Ib = { "shr", "shrw", Ew, Ib, XX, XX, 0 }, +Ia_shrx_Gy_Ey_By = { "shrx", "shrx", Gy, Ey, By, XX, IA_BMI2 }, +Ia_shufpd_Vpd_Wpd_Ib = { "shufpd", "shufpd", Vpd, Wpd, Ib, XX, IA_SSE2 }, +Ia_shufps_Vps_Wps_Ib = { "shufps", "shufps", Vps, Wps, Ib, XX, IA_SSE }, +Ia_sidt = { "sidt", "sidt", Ms, XX, XX, XX, 0 }, +Ia_skinit = { "skinit", "skinit", RAX_Reg, XX, XX, XX, IA_SVM }, +Ia_sldt = { "sldt", "sldt", Ew, XX, XX, XX, 0 }, +Ia_smsw_Ew = { "smsw", "smsw", Ew, XX, XX, XX, 0 }, +Ia_sqrtpd_Vpd_Wpd = { "sqrtpd", "sqrtpd", Vpd, Wpd, XX, XX, IA_SSE2 }, +Ia_sqrtps_Vps_Wps = { "sqrtps", "sqrtps", Vps, Wps, XX, XX, IA_SSE }, +Ia_sqrtsd_Vsd_Wsd = { "sqrtsd", "sqrtsd", Vsd, Wsd, XX, XX, IA_SSE2 }, +Ia_sqrtss_Vss_Wss = { "sqrtss", "sqrtss", Vss, Wss, XX, XX, IA_SSE }, +Ia_stac = { "stac", "stac", XX, XX, XX, XX, IA_SMAP }, +Ia_stc = { "stc", "stc", XX, XX, XX, XX, 0 }, +Ia_std = { "std", "std", XX, XX, XX, XX, 0 }, +Ia_stgi = { "stgi", "stgi", XX, XX, XX, XX, IA_SVM }, +Ia_sti = { "sti", "sti", XX, XX, XX, XX, 0 }, +Ia_stmxcsr = { "stmxcsr", "stmxcsr", Md, XX, XX, XX, IA_SSE }, +Ia_stosb_Yb_AL = { "stosb", "stosb", Yb, AL_Reg, XX, XX, 0 }, +Ia_stosl_Yd_EAX = { "stosd", "stosl", Yd, EAX_Reg, XX, XX, 0 }, +Ia_stosq_Yq_RAX = { "stosq", "stosq", Yq, RAX_Reg, XX, XX, 0 }, +Ia_stosw_Yw_AX = { "stosw", "stosw", Yw, AX_Reg, XX, XX, 0 }, +Ia_str = { "str", "str", Ew, XX, XX, XX, 0 }, +Ia_subb_AL_Ib = { "sub", "subb", AL_Reg, Ib, XX, XX, 0 }, +Ia_subb_Eb_Gb = { "sub", "subb", Eb, Gb, XX, XX, 0 }, +Ia_subb_Eb_Ib = { "sub", "subb", Eb, Ib, XX, XX, 0 }, +Ia_subb_Gb_Eb = { "sub", "subb", Gb, Eb, XX, XX, 0 }, +Ia_subl_EAX_Id = { "sub", "subl", EAX_Reg, Id, XX, XX, 0 }, +Ia_subl_Ed_Gd = { "sub", "subl", Ed, Gd, XX, XX, 0 }, +Ia_subl_Ed_Id = { "sub", "subl", Ed, Id, XX, XX, 0 }, +Ia_subl_Ed_sIb = { "sub", "subl", Ed, sIbd, XX, XX, 0 }, +Ia_subl_Gd_Ed = { "sub", "subl", Gd, Ed, XX, XX, 0 }, +Ia_subpd_Vpd_Wpd = { "subpd", "subpd", Vpd, Wpd, XX, XX, IA_SSE2 }, +Ia_subps_Vps_Wps = { "subps", "subps", Vps, Wps, XX, XX, IA_SSE }, +Ia_subq_Eq_Gq = { "sub", "subq", Eq, Gq, XX, XX, 0 }, +Ia_subq_Eq_sIb = { "sub", "subq", Eq, sIbq, XX, XX, 0 }, +Ia_subq_Eq_sId = { "sub", "subq", Eq, sIdq, XX, XX, 0 }, +Ia_subq_Gq_Eq = { "sub", "subq", Gq, Eq, XX, XX, 0 }, +Ia_subq_RAX_sId = { "sub", "subq", RAX_Reg, sIdq, XX, XX, 0 }, +Ia_subsd_Vsd_Wsd = { "subsd", "subsd", Vsd, Wsd, XX, XX, IA_SSE2 }, +Ia_subss_Vss_Wss = { "subss", "subss", Vss, Wss, XX, XX, IA_SSE }, +Ia_subw_AX_Iw = { "sub", "subw", AX_Reg, Iw, XX, XX, 0 }, +Ia_subw_Ew_Gw = { "sub", "subw", Ew, Gw, XX, XX, 0 }, +Ia_subw_Ew_Iw = { "sub", "subw", Ew, Iw, XX, XX, 0 }, +Ia_subw_Ew_sIb = { "sub", "subw", Ew, sIbw, XX, XX, 0 }, +Ia_subw_Gw_Ew = { "sub", "subw", Gw, Ew, XX, XX, 0 }, +Ia_swapgs = { "swapgs", "swapgs", XX, XX, XX, XX, 0 }, +Ia_syscall = { "syscall", "syscall", XX, XX, XX, XX, 0 }, +Ia_sysenter = { "sysenter", "sysenter", XX, XX, XX, XX, IA_SYSENTER_SYSEXIT }, +Ia_sysexit = { "sysexit", "sysexit", XX, XX, XX, XX, IA_SYSENTER_SYSEXIT }, +Ia_sysret = { "sysret", "sysret", XX, XX, XX, XX, 0 }, +Ia_t1mskc_By_Ey = { "t1mskc", "t1mskc", Gy, By, Ey, XX, IA_TBM }, +Ia_testb_AL_Ib = { "test", "testb", AL_Reg, Ib, XX, XX, 0 }, +Ia_testb_Eb_Gb = { "test", "testb", Eb, Gb, XX, XX, 0 }, +Ia_testb_Eb_Ib = { "test", "testb", Eb, Ib, XX, XX, 0 }, +Ia_testl_EAX_Id = { "test", "testl", EAX_Reg, Id, XX, XX, 0 }, +Ia_testl_Ed_Gd = { "test", "testl", Ed, Gd, XX, XX, 0 }, +Ia_testl_Ed_Id = { "test", "testl", Ed, Id, XX, XX, 0 }, +Ia_testq_Eq_Gq = { "test", "testq", Eq, Gq, XX, XX, 0 }, +Ia_testq_Eq_sId = { "test", "testq", Eq, sIdq, XX, XX, 0 }, +Ia_testq_RAX_sId = { "test", "testq", RAX_Reg, sIdq, XX, XX, 0 }, +Ia_testw_AX_Iw = { "test", "testw", AX_Reg, Iw, XX, XX, 0 }, +Ia_testw_Ew_Gw = { "test", "testw", Ew, Gw, XX, XX, 0 }, +Ia_testw_Ew_Iw = { "test", "testw", Ew, Iw, XX, XX, 0 }, +Ia_tzcntl_Gd_Ed = { "tzcnt", "tzcntl", Gd, Ed, XX, XX, IA_BMI1 }, +Ia_tzcntq_Gq_Eq = { "tzcnt", "tzcntq", Gq, Eq, XX, XX, IA_BMI1 }, +Ia_tzcntw_Gw_Ew = { "tzcnt", "tzcntw", Gw, Ew, XX, XX, IA_BMI1 }, +Ia_tzmsk_By_Ey = { "tzmsk", "tzmsk", Gy, By, Ey, XX, IA_TBM }, +Ia_ucomisd_Vsd_Wsd = { "ucomisd", "ucomisd", Vsd, Wsd, XX, XX, IA_SSE2 }, +Ia_ucomiss_Vss_Wss = { "ucomiss", "ucomiss", Vss, Wss, XX, XX, IA_SSE }, +Ia_ud2a = { "ud2a", "ud2a", XX, XX, XX, XX, 0 }, +Ia_ud2b = { "ud2b", "ud2b", XX, XX, XX, XX, 0 }, +Ia_unpckhpd_Vpd_Wpd = { "unpckhpd", "unpckhpd", Vpd, Wpd, XX, XX, IA_SSE2 }, +Ia_unpckhps_Vps_Wps = { "unpckhps", "unpckhps", Vps, Wps, XX, XX, IA_SSE }, +Ia_unpcklpd_Vpd_Wpd = { "unpcklpd", "unpcklpd", Vpd, Wpd, XX, XX, IA_SSE2 }, +Ia_unpcklps_Vps_Wps = { "unpcklps", "unpcklps", Vps, Wps, XX, XX, IA_SSE }, +Ia_vaddpd_Vpd_Hpd_Wpd = { "vaddpd", "vaddpd", Vpd, Hpd, Wpd, XX, IA_AVX }, +Ia_vaddps_Vps_Hps_Wps = { "vaddps", "vaddps", Vps, Hps, Wps, XX, IA_AVX }, +Ia_vaddsd_Vsd_Hpd_Wsd = { "vaddsd", "vaddsd", Vsd, Hpd, Wsd, XX, IA_AVX }, +Ia_vaddss_Vss_Hps_Wss = { "vaddss", "vaddss", Vss, Hps, Wss, XX, IA_AVX }, +Ia_vaddsubpd_Vpd_Hpd_Wpd = { "vaddsubpd", "vaddsubpd", Vpd, Hpd, Wpd, XX, IA_AVX }, +Ia_vaddsubps_Vps_Hps_Wps = { "vaddsubps", "vaddsubps", Vps, Hps, Wps, XX, IA_AVX }, +Ia_vaesdec_Vdq_Hdq_Wdq = { "vaesdec", "vaesdec", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vaesdeclast_Vdq_Hdq_Wdq = { "vaesdeclast", "vaesdeclast", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vaesenc_Vdq_Hdq_Wdq = { "vaesenc", "vaesenc", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vaesenclast_Vdq_Hdq_Wdq = { "vaesenclast", "vaesenclast", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vaesimc_Vdq_Wdq = { "vaesimc", "vaesimc", Vdq, Wdq, XX, XX, IA_AVX }, +Ia_vaeskeygenassist_Vdq_Wdq_Ib = { "vaeskeygenassist", "vaeskeygenassist", Vdq, Wdq, Ib, XX, IA_AVX }, +Ia_vandnpd_Vpd_Hpd_Wpd = { "vandnpd", "vandnpd", Vpd, Hpd, Wpd, XX, IA_AVX }, +Ia_vandnps_Vps_Hps_Wps = { "vandnps", "vandnps", Vps, Hps, Wps, XX, IA_AVX }, +Ia_vandpd_Vpd_Hpd_Wpd = { "vandpd", "vandpd", Vpd, Hpd, Wpd, XX, IA_AVX }, +Ia_vandps_Vps_Hps_Wps = { "vandps", "vandps", Vps, Hps, Wps, XX, IA_AVX }, +Ia_vblendpd_Vpd_Hpd_Wpd_Ib = { "vblendpd", "vblendpd", Vpd, Hpd, Wpd, Ib, IA_AVX }, +Ia_vblendps_Vps_Hps_Wps_Ib = { "vblendps", "vblendps", Vps, Hps, Wps, Ib, IA_AVX }, +Ia_vblendvpd_Vpd_Hpd_Wpd_Ib = { "vblendvpd", "vblendvpd", Vpd, Hpd, Wpd, VIb, IA_AVX }, +Ia_vblendvps_Vps_Hps_Wps_Ib = { "vblendvps", "vblendvps", Vps, Hps, Wps, VIb, IA_AVX }, +Ia_vbroadcastf128_Vdq_Mdq = { "vbroadcastf128", "vbroadcastf128", Vdq, Mdq, XX, XX, IA_AVX }, +Ia_vbroadcasti128_Vdq_Mdq = { "vbroadcasti128", "vbroadcasti128", Vdq, Mdq, XX, XX, IA_AVX2 }, +Ia_vbroadcastsd_Vpd_Wsd = { "vbroadcastsd", "vbroadcastsd", Vpd, Wsd, XX, XX, IA_AVX }, +Ia_vbroadcastss_Vps_Wss = { "vbroadcastss", "vbroadcastss", Vps, Wss, XX, XX, IA_AVX }, +Ia_vcmppd_Vpd_Hpd_Wpd_Ib = { "vcmppd", "vcmppd", Vpd, Hpd, Wpd, Ib, IA_AVX }, +Ia_vcmpps_Vps_Hps_Wps_Ib = { "vcmpps", "vcmpps", Vps, Hps, Wps, Ib, IA_AVX }, +Ia_vcmpsd_Vsd_Hpd_Wsd_Ib = { "vcmpsd", "vcmpsd", Vsd, Hpd, Wsd, Ib, IA_AVX }, +Ia_vcmpss_Vss_Hps_Wss_Ib = { "vcmpss", "vcmpss", Vss, Hps, Wss, Ib, IA_AVX }, +Ia_vcomisd_Vsd_Wsd = { "vcomisd", "vcomisd", Vsd, Wsd, XX, XX, IA_AVX }, +Ia_vcomiss_Vss_Wss = { "vcomiss", "vcomiss", Vss, Wss, XX, XX, IA_AVX }, +Ia_vcvtdq2pd_Vpd_Wq = { "vcvtdq2pd", "vcvtdq2pd", Vpd, Wq, XX, XX, IA_AVX }, +Ia_vcvtdq2ps_Vps_Wdq = { "vcvtdq2ps", "vcvtdq2ps", Vps, Wdq, XX, XX, IA_AVX }, +Ia_vcvtpd2dq_Vq_Wpd = { "vcvtpd2dq", "vcvtpd2dq", Vq, Wpd, XX, XX, IA_AVX }, +Ia_vcvtpd2ps_Vps_Wpd = { "vcvtpd2ps", "vcvtpd2ps", Vps, Wpd, XX, XX, IA_AVX }, +Ia_vcvtph2ps_Vps_Wq = { "vcvtph2ps", "vcvtph2ps", Vps, Wq, XX, XX, IA_AVX_F16C }, +Ia_vcvtps2dq_Vdq_Wps = { "vcvtps2dq", "vcvtps2dq", Vdq, Wps, XX, XX, IA_AVX }, +Ia_vcvtps2pd_Vpd_Wps = { "vcvtps2pd", "vcvtps2pd", Vpd, Wps, XX, XX, IA_AVX }, +Ia_vcvtps2ph_Wq_Vps_Ib = { "vcvtps2ph", "vcvtps2ph", Wq, Vps, Ib, XX, IA_AVX_F16C }, +Ia_vcvtsd2si_Gy_Wsd = { "vcvtsd2si", "vcvtsd2si", Gy, Wsd, XX, XX, IA_AVX }, +Ia_vcvtsd2ss_Vss_Hps_Wsd = { "vcvtsd2ss", "vcvtsd2ss", Vss, Hps, Wsd, XX, IA_AVX }, +Ia_vcvtsi2sd_Vsd_Hpd_Ey = { "vcvtsi2sd", "vcvtsi2sd", Vsd, Hpd, Ey, XX, IA_AVX }, +Ia_vcvtsi2ss_Vss_Hps_Ey = { "vcvtsi2ss", "vcvtsi2ss", Vss, Hps, Ey, XX, IA_AVX }, +Ia_vcvtss2sd_Vsd_Hpd_Wss = { "vcvtss2sd", "vcvtss2sd", Vsd, Hpd, Wss, XX, IA_AVX }, +Ia_vcvtss2si_Gy_Wss = { "vcvtss2si", "vcvtss2si", Gy, Wss, XX, XX, IA_AVX }, +Ia_vcvttpd2dq_Vq_Wpd = { "vcvttpd2dq", "vcvttpd2dq", Vq, Wpd, XX, XX, IA_AVX }, +Ia_vcvttps2dq_Vdq_Wps = { "vcvttps2dq", "vcvttps2dq", Vdq, Wps, XX, XX, IA_AVX }, +Ia_vcvttsd2si_Gy_Wsd = { "vcvttsd2si", "vcvttsd2si", Gy, Wsd, XX, XX, IA_AVX }, +Ia_vcvttss2si_Gy_Wss = { "vcvttss2si", "vcvttss2si", Gy, Wss, XX, XX, IA_AVX }, +Ia_vdivpd_Vpd_Hpd_Wpd = { "vdivpd", "vdivpd", Vpd, Hpd, Wpd, XX, IA_AVX }, +Ia_vdivps_Vps_Hps_Wps = { "vdivps", "vdivps", Vps, Hps, Wps, XX, IA_AVX }, +Ia_vdivsd_Vsd_Hpd_Wsd = { "vdivsd", "vdivsd", Vsd, Hpd, Wsd, XX, IA_AVX }, +Ia_vdivss_Vss_Hps_Wss = { "vdivss", "vdivss", Vss, Hps, Wss, XX, IA_AVX }, +Ia_vdppd_Vpd_Hpd_Wpd_Ib = { "vdppd", "vdppd", Vpd, Hpd, Wpd, Ib, IA_AVX }, +Ia_vdpps_Vps_Hps_Wps_Ib = { "vdpps", "vdpps", Vps, Hps, Wps, Ib, IA_AVX }, +Ia_verr = { "verr", "verr", Ew, XX, XX, XX, 0 }, +Ia_verw = { "verw", "verw", Ew, XX, XX, XX, 0 }, +Ia_vextractf128_Wdq_Vdq_Ib = { "vextractf128", "vextractf128", Wdq, Vdq, Ib, XX, IA_AVX }, +Ia_vextracti128_Wdq_Vdq_Ib = { "vextracti128", "vextracti128", Wdq, Vdq, Ib, XX, IA_AVX2 }, +Ia_vextractps_Ed_Vdq_Ib = { "vextractps", "vextractps", Ed, Vdq, Ib, XX, IA_AVX }, +Ia_vfmadd132pd_Vpd_Hpd_Wpd = { "vfmadd132pd", "vfmadd132pd", Vpd, Hpd, Wpd, XX, IA_AVX_FMA }, +Ia_vfmadd132ps_Vps_Hps_Wps = { "vfmadd132ps", "vfmadd132ps", Vps, Hps, Wps, XX, IA_AVX_FMA }, +Ia_vfmadd132sd_Vpd_Hsd_Wsd = { "vfmadd132sd", "vfmadd132sd", Vpd, Hsd, Wsd, XX, IA_AVX_FMA }, +Ia_vfmadd132ss_Vps_Hss_Wss = { "vfmadd132ss", "vfmadd132ss", Vps, Hss, Wss, XX, IA_AVX_FMA }, +Ia_vfmadd213pd_Vpd_Hpd_Wpd = { "vfmadd213pd", "vfmadd213pd", Vpd, Hpd, Wpd, XX, IA_AVX_FMA }, +Ia_vfmadd213ps_Vps_Hps_Wps = { "vfmadd213ps", "vfmadd213ps", Vps, Hps, Wps, XX, IA_AVX_FMA }, +Ia_vfmadd213sd_Vpd_Hsd_Wsd = { "vfmadd213sd", "vfmadd213sd", Vpd, Hsd, Wsd, XX, IA_AVX_FMA }, +Ia_vfmadd213ss_Vps_Hss_Wss = { "vfmadd213ss", "vfmadd213ss", Vps, Hss, Wss, XX, IA_AVX_FMA }, +Ia_vfmadd231pd_Vpd_Hpd_Wpd = { "vfmadd231pd", "vfmadd231pd", Vpd, Hpd, Wpd, XX, IA_AVX_FMA }, +Ia_vfmadd231ps_Vps_Hps_Wps = { "vfmadd231ps", "vfmadd231ps", Vps, Hps, Wps, XX, IA_AVX_FMA }, +Ia_vfmadd231sd_Vpd_Hsd_Wsd = { "vfmadd231sd", "vfmadd231sd", Vpd, Hsd, Wsd, XX, IA_AVX_FMA }, +Ia_vfmadd231ss_Vps_Hss_Wss = { "vfmadd231ss", "vfmadd231ss", Vps, Hss, Wss, XX, IA_AVX_FMA }, +Ia_vfmaddpd_Vpd_Hpd_VIb_Wpd = { "vfmaddpd", "vfmaddpd", Vpd, Hpd, VIb, Wpd, IA_FMA4 }, +Ia_vfmaddpd_Vpd_Hpd_Wpd_VIb = { "vfmaddpd", "vfmaddpd", Vpd, Hpd, Wpd, VIb, IA_FMA4 }, +Ia_vfmaddps_Vps_Hps_VIb_Wps = { "vfmaddps", "vfmaddps", Vps, Hps, VIb, Wps, IA_FMA4 }, +Ia_vfmaddps_Vps_Hps_Wps_VIb = { "vfmaddps", "vfmaddps", Vps, Hps, Wps, VIb, IA_FMA4 }, +Ia_vfmaddsd_Vsd_Hsd_VIb_Wsd = { "vfmaddsd", "vfmaddsd", Vsd, Hsd, VIb, Wsd, IA_FMA4 }, +Ia_vfmaddsd_Vsd_Hsd_Wsd_VIb = { "vfmaddsd", "vfmaddsd", Vsd, Hsd, Wsd, VIb, IA_FMA4 }, +Ia_vfmaddss_Vss_Hss_VIb_Wss = { "vfmaddss", "vfmaddss", Vss, Hss, VIb, Wss, IA_FMA4 }, +Ia_vfmaddss_Vss_Hss_Wss_VIb = { "vfmaddss", "vfmaddss", Vss, Hss, Wss, VIb, IA_FMA4 }, +Ia_vfmaddsub132pd_Vpd_Hpd_Wpd = { "vfmaddsub132pd", "vfmaddsub132pd", Vpd, Hpd, Wpd, XX, IA_AVX_FMA }, +Ia_vfmaddsub132ps_Vps_Hps_Wps = { "vfmaddsub132ps", "vfmaddsub132ps", Vps, Hps, Wps, XX, IA_AVX_FMA }, +Ia_vfmaddsub213pd_Vpd_Hpd_Wpd = { "vfmaddsub213pd", "vfmaddsub213pd", Vpd, Hpd, Wpd, XX, IA_AVX_FMA }, +Ia_vfmaddsub213ps_Vps_Hps_Wps = { "vfmaddsub213ps", "vfmaddsub213ps", Vps, Hps, Wps, XX, IA_AVX_FMA }, +Ia_vfmaddsub231pd_Vpd_Hpd_Wpd = { "vfmaddsub231pd", "vfmaddsub231pd", Vpd, Hpd, Wpd, XX, IA_AVX_FMA }, +Ia_vfmaddsub231ps_Vps_Hps_Wps = { "vfmaddsub231ps", "vfmaddsub231ps", Vps, Hps, Wps, XX, IA_AVX_FMA }, +Ia_vfmaddsubpd_Vpd_Hpd_VIb_Wpd = { "vfmaddsubpd", "vfmaddsubpd", Vpd, Hpd, VIb, Wpd, IA_FMA4 }, +Ia_vfmaddsubpd_Vpd_Hpd_Wpd_VIb = { "vfmaddsubpd", "vfmaddsubpd", Vpd, Hpd, Wpd, VIb, IA_FMA4 }, +Ia_vfmaddsubps_Vps_Hps_VIb_Wps = { "vfmaddsubps", "vfmaddsubps", Vps, Hps, VIb, Wps, IA_FMA4 }, +Ia_vfmaddsubps_Vps_Hps_Wps_VIb = { "vfmaddsubps", "vfmaddsubps", Vps, Hps, Wps, VIb, IA_FMA4 }, +Ia_vfmsub132pd_Vpd_Hpd_Wpd = { "vfmsub132pd", "vfmsub132pd", Vpd, Hpd, Wpd, XX, IA_AVX_FMA }, +Ia_vfmsub132ps_Vps_Hps_Wps = { "vfmsub132ps", "vfmsub132ps", Vps, Hps, Wps, XX, IA_AVX_FMA }, +Ia_vfmsub132sd_Vpd_Hsd_Wsd = { "vfmsub132sd", "vfmsub132sd", Vpd, Hsd, Wsd, XX, IA_AVX_FMA }, +Ia_vfmsub132ss_Vps_Hss_Wss = { "vfmsub132ss", "vfmsub132ss", Vps, Hss, Wss, XX, IA_AVX_FMA }, +Ia_vfmsub213pd_Vpd_Hpd_Wpd = { "vfmsub213pd", "vfmsub213pd", Vpd, Hpd, Wpd, XX, IA_AVX_FMA }, +Ia_vfmsub213ps_Vps_Hps_Wps = { "vfmsub213ps", "vfmsub213ps", Vps, Hps, Wps, XX, IA_AVX_FMA }, +Ia_vfmsub213sd_Vpd_Hsd_Wsd = { "vfmsub213sd", "vfmsub213sd", Vpd, Hsd, Wsd, XX, IA_AVX_FMA }, +Ia_vfmsub213ss_Vps_Hss_Wss = { "vfmsub213ss", "vfmsub213ss", Vps, Hss, Wss, XX, IA_AVX_FMA }, +Ia_vfmsub231pd_Vpd_Hpd_Wpd = { "vfmsub231pd", "vfmsub231pd", Vpd, Hpd, Wpd, XX, IA_AVX_FMA }, +Ia_vfmsub231ps_Vps_Hps_Wps = { "vfmsub231ps", "vfmsub231ps", Vps, Hps, Wps, XX, IA_AVX_FMA }, +Ia_vfmsub231sd_Vpd_Hsd_Wsd = { "vfmsub231sd", "vfmsub231sd", Vpd, Hsd, Wsd, XX, IA_AVX_FMA }, +Ia_vfmsub231ss_Vps_Hss_Wss = { "vfmsub231ss", "vfmsub231ss", Vps, Hss, Wss, XX, IA_AVX_FMA }, +Ia_vfmsubadd132pd_Vpd_Hpd_Wpd = { "vfmsubadd132pd", "vfmsubadd132pd", Vpd, Hpd, Wpd, XX, IA_AVX_FMA }, +Ia_vfmsubadd132ps_Vps_Hps_Wps = { "vfmsubadd132ps", "vfmsubadd132ps", Vps, Hps, Wps, XX, IA_AVX_FMA }, +Ia_vfmsubadd213pd_Vpd_Hpd_Wpd = { "vfmsubadd213pd", "vfmsubadd213pd", Vpd, Hpd, Wpd, XX, IA_AVX_FMA }, +Ia_vfmsubadd213ps_Vps_Hps_Wps = { "vfmsubadd213ps", "vfmsubadd213ps", Vps, Hps, Wps, XX, IA_AVX_FMA }, +Ia_vfmsubadd231pd_Vpd_Hpd_Wpd = { "vfmsubadd231pd", "vfmsubadd231pd", Vpd, Hpd, Wpd, XX, IA_AVX_FMA }, +Ia_vfmsubadd231ps_Vps_Hps_Wps = { "vfmsubadd231ps", "vfmsubadd231ps", Vps, Hps, Wps, XX, IA_AVX_FMA }, +Ia_vfmsubaddpd_Vpd_Hpd_VIb_Wpd = { "vfmsubaddpd", "vfmsubaddpd", Vpd, Hpd, VIb, Wpd, IA_FMA4 }, +Ia_vfmsubaddpd_Vpd_Hpd_Wpd_VIb = { "vfmsubaddpd", "vfmsubaddpd", Vpd, Hpd, Wpd, VIb, IA_FMA4 }, +Ia_vfmsubaddps_Vps_Hps_VIb_Wps = { "vfmsubaddps", "vfmsubaddps", Vps, Hps, VIb, Wps, IA_FMA4 }, +Ia_vfmsubaddps_Vps_Hps_Wps_VIb = { "vfmsubaddps", "vfmsubaddps", Vps, Hps, Wps, VIb, IA_FMA4 }, +Ia_vfmsubpd_Vpd_Hpd_VIb_Wpd = { "vfmsubpd", "vfmsubpd", Vpd, Hpd, VIb, Wpd, IA_FMA4 }, +Ia_vfmsubpd_Vpd_Hpd_Wpd_VIb = { "vfmsubpd", "vfmsubpd", Vpd, Hpd, Wpd, VIb, IA_FMA4 }, +Ia_vfmsubps_Vps_Hps_VIb_Wps = { "vfmsubps", "vfmsubps", Vps, Hps, VIb, Wps, IA_FMA4 }, +Ia_vfmsubps_Vps_Hps_Wps_VIb = { "vfmsubps", "vfmsubps", Vps, Hps, Wps, VIb, IA_FMA4 }, +Ia_vfmsubsd_Vsd_Hsd_VIb_Wsd = { "vfmsubsd", "vfmsubsd", Vsd, Hsd, VIb, Wsd, IA_FMA4 }, +Ia_vfmsubsd_Vsd_Hsd_Wsd_VIb = { "vfmsubsd", "vfmsubsd", Vsd, Hsd, Wsd, VIb, IA_FMA4 }, +Ia_vfmsubss_Vss_Hss_VIb_Wss = { "vfmsubss", "vfmsubss", Vss, Hss, VIb, Wss, IA_FMA4 }, +Ia_vfmsubss_Vss_Hss_Wss_VIb = { "vfmsubss", "vfmsubss", Vss, Hss, Wss, VIb, IA_FMA4 }, +Ia_vfnmadd132pd_Vpd_Hpd_Wpd = { "vfnmadd132pd", "vfnmadd132pd", Vpd, Hpd, Wpd, XX, IA_AVX_FMA }, +Ia_vfnmadd132ps_Vps_Hps_Wps = { "vfnmadd132ps", "vfnmadd132ps", Vps, Hps, Wps, XX, IA_AVX_FMA }, +Ia_vfnmadd132sd_Vpd_Hsd_Wsd = { "vfnmadd132sd", "vfnmadd132sd", Vpd, Hsd, Wsd, XX, IA_AVX_FMA }, +Ia_vfnmadd132ss_Vps_Hss_Wss = { "vfnmadd132ss", "vfnmadd132ss", Vps, Hss, Wss, XX, IA_AVX_FMA }, +Ia_vfnmadd213pd_Vpd_Hpd_Wpd = { "vfnmadd213pd", "vfnmadd213pd", Vpd, Hpd, Wpd, XX, IA_AVX_FMA }, +Ia_vfnmadd213ps_Vps_Hps_Wps = { "vfnmadd213ps", "vfnmadd213ps", Vps, Hps, Wps, XX, IA_AVX_FMA }, +Ia_vfnmadd213sd_Vpd_Hsd_Wsd = { "vfnmadd213sd", "vfnmadd213sd", Vpd, Hsd, Wsd, XX, IA_AVX_FMA }, +Ia_vfnmadd213ss_Vps_Hss_Wss = { "vfnmadd213ss", "vfnmadd213ss", Vps, Hss, Wss, XX, IA_AVX_FMA }, +Ia_vfnmadd231pd_Vpd_Hpd_Wpd = { "vfnmadd231pd", "vfnmadd231pd", Vpd, Hpd, Wpd, XX, IA_AVX_FMA }, +Ia_vfnmadd231ps_Vps_Hps_Wps = { "vfnmadd231ps", "vfnmadd231ps", Vps, Hps, Wps, XX, IA_AVX_FMA }, +Ia_vfnmadd231sd_Vpd_Hsd_Wsd = { "vfnmadd231sd", "vfnmadd231sd", Vpd, Hsd, Wsd, XX, IA_AVX_FMA }, +Ia_vfnmadd231ss_Vps_Hss_Wss = { "vfnmadd231ss", "vfnmadd231ss", Vps, Hss, Wss, XX, IA_AVX_FMA }, +Ia_vfnmaddpd_Vpd_Hpd_VIb_Wpd = { "vfnmaddpd", "vfnmaddpd", Vpd, Hpd, VIb, Wpd, IA_FMA4 }, +Ia_vfnmaddpd_Vpd_Hpd_Wpd_VIb = { "vfnmaddpd", "vfnmaddpd", Vpd, Hpd, Wpd, VIb, IA_FMA4 }, +Ia_vfnmaddps_Vps_Hps_VIb_Wps = { "vfnmaddps", "vfnmaddps", Vps, Hps, VIb, Wps, IA_FMA4 }, +Ia_vfnmaddps_Vps_Hps_Wps_VIb = { "vfnmaddps", "vfnmaddps", Vps, Hps, Wps, VIb, IA_FMA4 }, +Ia_vfnmaddsd_Vsd_Hsd_VIb_Wsd = { "vfnmaddsd", "vfnmaddsd", Vsd, Hsd, VIb, Wsd, IA_FMA4 }, +Ia_vfnmaddsd_Vsd_Hsd_Wsd_VIb = { "vfnmaddsd", "vfnmaddsd", Vsd, Hsd, Wsd, VIb, IA_FMA4 }, +Ia_vfnmaddss_Vss_Hss_VIb_Wss = { "vfnmaddss", "vfnmaddss", Vss, Hss, VIb, Wss, IA_FMA4 }, +Ia_vfnmaddss_Vss_Hss_Wss_VIb = { "vfnmaddss", "vfnmaddss", Vss, Hss, Wss, VIb, IA_FMA4 }, +Ia_vfnmsub132pd_Vpd_Hpd_Wpd = { "vfnmsub132pd", "vfnmsub132pd", Vpd, Hpd, Wpd, XX, IA_AVX_FMA }, +Ia_vfnmsub132ps_Vps_Hps_Wps = { "vfnmsub132ps", "vfnmsub132ps", Vps, Hps, Wps, XX, IA_AVX_FMA }, +Ia_vfnmsub132sd_Vpd_Hsd_Wsd = { "vfnmsub132sd", "vfnmsub132sd", Vpd, Hsd, Wsd, XX, IA_AVX_FMA }, +Ia_vfnmsub132ss_Vps_Hss_Wss = { "vfnmsub132ss", "vfnmsub132ss", Vps, Hss, Wss, XX, IA_AVX_FMA }, +Ia_vfnmsub213pd_Vpd_Hpd_Wpd = { "vfnmsub213pd", "vfnmsub213pd", Vpd, Hpd, Wpd, XX, IA_AVX_FMA }, +Ia_vfnmsub213ps_Vps_Hps_Wps = { "vfnmsub213ps", "vfnmsub213ps", Vps, Hps, Wps, XX, IA_AVX_FMA }, +Ia_vfnmsub213sd_Vpd_Hsd_Wsd = { "vfnmsub213sd", "vfnmsub213sd", Vpd, Hsd, Wsd, XX, IA_AVX_FMA }, +Ia_vfnmsub213ss_Vps_Hss_Wss = { "vfnmsub213ss", "vfnmsub213ss", Vps, Hss, Wss, XX, IA_AVX_FMA }, +Ia_vfnmsub231pd_Vpd_Hpd_Wpd = { "vfnmsub231pd", "vfnmsub231pd", Vpd, Hpd, Wpd, XX, IA_AVX_FMA }, +Ia_vfnmsub231ps_Vps_Hps_Wps = { "vfnmsub231ps", "vfnmsub231ps", Vps, Hps, Wps, XX, IA_AVX_FMA }, +Ia_vfnmsub231sd_Vpd_Hsd_Wsd = { "vfnmsub231sd", "vfnmsub231sd", Vpd, Hsd, Wsd, XX, IA_AVX_FMA }, +Ia_vfnmsub231ss_Vps_Hss_Wss = { "vfnmsub231ss", "vfnmsub231ss", Vps, Hss, Wss, XX, IA_AVX_FMA }, +Ia_vfnmsubpd_Vpd_Hpd_VIb_Wpd = { "vfnmsubpd", "vfnmsubpd", Vpd, Hpd, VIb, Wpd, IA_FMA4 }, +Ia_vfnmsubpd_Vpd_Hpd_Wpd_VIb = { "vfnmsubpd", "vfnmsubpd", Vpd, Hpd, Wpd, VIb, IA_FMA4 }, +Ia_vfnmsubps_Vps_Hps_VIb_Wps = { "vfnmsubps", "vfnmsubps", Vps, Hps, VIb, Wps, IA_FMA4 }, +Ia_vfnmsubps_Vps_Hps_Wps_VIb = { "vfnmsubps", "vfnmsubps", Vps, Hps, Wps, VIb, IA_FMA4 }, +Ia_vfnmsubsd_Vsd_Hsd_VIb_Wsd = { "vfnmsubsd", "vfnmsubsd", Vsd, Hsd, VIb, Wsd, IA_FMA4 }, +Ia_vfnmsubsd_Vsd_Hsd_Wsd_VIb = { "vfnmsubsd", "vfnmsubsd", Vsd, Hsd, Wsd, VIb, IA_FMA4 }, +Ia_vfnmsubss_Vss_Hss_VIb_Wss = { "vfnmsubss", "vfnmsubss", Vss, Hss, VIb, Wss, IA_FMA4 }, +Ia_vfnmsubss_Vss_Hss_Wss_VIb = { "vfnmsubss", "vfnmsubss", Vss, Hss, Wss, VIb, IA_FMA4 }, +Ia_vgatherdd_Vdq_VSib_Hdq = { "vgatherdd", "vgatherdd", Vdq, VSib, Hdq, XX, IA_AVX2 }, +Ia_vgatherdpd_Vpd_VSib_Hpd = { "vgatherdpd", "vgatherdpd", Vpd, VSib, Hpd, XX, IA_AVX2 }, +Ia_vgatherdps_Vps_VSib_Hps = { "vgatherdps", "vgatherdps", Vps, VSib, Hps, XX, IA_AVX2 }, +Ia_vgatherdq_Vdq_VSib_Hdq = { "vgatherdq", "vgatherdq", Vdq, VSib, Hdq, XX, IA_AVX2 }, +Ia_vgatherqd_Vdq_VSib_Hdq = { "vgatherqd", "vgatherqd", Vdq, VSib, Hdq, XX, IA_AVX2 }, +Ia_vgatherqpd_Vpd_VSib_Hpd = { "vgatherqpd", "vgatherqpd", Vpd, VSib, Hpd, XX, IA_AVX2 }, +Ia_vgatherqps_Vps_VSib_Hps = { "vgatherqps", "vgatherqps", Vps, VSib, Hps, XX, IA_AVX2 }, +Ia_vgatherqq_Vdq_VSib_Hdq = { "vgatherqq", "vgatherqq", Vdq, VSib, Hdq, XX, IA_AVX2 }, +Ia_vhaddpd_Vpd_Hpd_Wpd = { "vhaddpd", "vhaddpd", Vpd, Hpd, Wpd, XX, IA_AVX }, +Ia_vhaddps_Vps_Hps_Wps = { "vhaddps", "vhaddps", Vps, Hps, Wps, XX, IA_AVX }, +Ia_vhsubpd_Vpd_Hpd_Wpd = { "vhsubpd", "vhsubpd", Vpd, Hpd, Wpd, XX, IA_AVX }, +Ia_vhsubps_Vps_Hps_Wps = { "vhsubps", "vhsubps", Vps, Hps, Wps, XX, IA_AVX }, +Ia_vinsertf128_Vdq_Hdq_Wdq_Ib = { "vinsertf128", "vinsertf128", Vdq, Hdq, Wdq, Ib, IA_AVX }, +Ia_vinserti128_Vdq_Hdq_Wdq_Ib = { "vinserti128", "vinserti128", Vdq, Hdq, Wdq, Ib, IA_AVX2 }, +Ia_vinsertps_Vps_Hps_Wss_Ib = { "vinsertps", "vinsertps", Vps, Hps, Wss, Ib, IA_AVX }, +Ia_vlddqu_Vdq_Mdq = { "vlddqu", "vlddqu", Vdq, Mdq, XX, XX, IA_AVX }, +Ia_vldmxcsr = { "vldmxcsr", "vldmxcsr", Md, XX, XX, XX, IA_AVX }, +Ia_vmaskmovd_Mdq_Hdq_Vdq = { "vmaskmovd", "vmaskmovd", Mdq, Hdq, Vdq, XX, IA_AVX2 }, +Ia_vmaskmovd_Vdq_Hdq_Mdq = { "vmaskmovd", "vmaskmovd", Vdq, Hdq, Mdq, XX, IA_AVX2 }, +Ia_vmaskmovdqu_Vdq_Udq = { "vmaskmovdqu", "vmaskmovdqu", Vdq, Udq, XX, XX, IA_AVX }, +Ia_vmaskmovpd_Mpd_Hpd_Vpd = { "vmaskmovpd", "vmaskmovpd", Mpd, Hpd, Vpd, XX, IA_AVX }, +Ia_vmaskmovpd_Vpd_Hpd_Mpd = { "vmaskmovpd", "vmaskmovpd", Vpd, Hpd, Mpd, XX, IA_AVX }, +Ia_vmaskmovps_Mps_Hps_Vps = { "vmaskmovps", "vmaskmovps", Mps, Hps, Vps, XX, IA_AVX }, +Ia_vmaskmovps_Vps_Hps_Mps = { "vmaskmovps", "vmaskmovps", Vps, Hps, Mps, XX, IA_AVX }, +Ia_vmaskmovq_Mdq_Hdq_Vdq = { "vmaskmovq", "vmaskmovq", Mdq, Hdq, Vdq, XX, IA_AVX2 }, +Ia_vmaskmovq_Vdq_Hdq_Mdq = { "vmaskmovq", "vmaskmovq", Vdq, Hdq, Mdq, XX, IA_AVX2 }, +Ia_vmaxpd_Vpd_Hpd_Wpd = { "vmaxpd", "vmaxpd", Vpd, Hpd, Wpd, XX, IA_AVX }, +Ia_vmaxps_Vps_Hps_Wps = { "vmaxps", "vmaxps", Vps, Hps, Wps, XX, IA_AVX }, +Ia_vmaxsd_Vsd_Hpd_Wsd = { "vmaxsd", "vmaxsd", Vsd, Hpd, Wsd, XX, IA_AVX }, +Ia_vmaxss_Vss_Hps_Wss = { "vmaxss", "vmaxss", Vss, Hps, Wss, XX, IA_AVX }, +Ia_vmcall = { "vmcall", "vmcall", XX, XX, XX, XX, IA_VMX }, +Ia_vmclear_Mq = { "vmclear", "vmclear", Mq, XX, XX, XX, IA_VMX }, +Ia_vmfunc = { "vmfunc", "vmfunc", EAX_Reg, XX, XX, XX, IA_VMX }, +Ia_vminpd_Vpd_Hpd_Wpd = { "vminpd", "vminpd", Vpd, Hpd, Wpd, XX, IA_AVX }, +Ia_vminps_Vps_Hps_Wps = { "vminps", "vminps", Vps, Hps, Wps, XX, IA_AVX }, +Ia_vminsd_Vsd_Hpd_Wsd = { "vminsd", "vminsd", Vsd, Hpd, Wsd, XX, IA_AVX }, +Ia_vminss_Vss_Hps_Wss = { "vminss", "vminss", Vss, Hps, Wss, XX, IA_AVX }, +Ia_vmlaunch = { "vmlaunch", "vmlaunch", XX, XX, XX, XX, IA_VMX }, +Ia_vmload = { "vmload", "vmload", RAX_Reg, XX, XX, XX, IA_SVM }, +Ia_vmmcall = { "vmmcall", "vmmcall", XX, XX, XX, XX, IA_SVM }, +Ia_vmovapd_Vpd_Wpd = { "vmovapd", "vmovapd", Vpd, Wpd, XX, XX, IA_AVX }, +Ia_vmovapd_Wpd_Vpd = { "vmovapd", "vmovapd", Wpd, Vpd, XX, XX, IA_AVX }, +Ia_vmovaps_Vps_Wps = { "vmovaps", "vmovaps", Vps, Wps, XX, XX, IA_AVX }, +Ia_vmovaps_Wps_Vps = { "vmovaps", "vmovaps", Wps, Vps, XX, XX, IA_AVX }, +Ia_vmovd_Ed_Vd = { "vmovd", "vmovd", Ed, Vdq, XX, XX, IA_AVX }, +Ia_vmovd_Vdq_Ed = { "vmovd", "vmovd", Vdq, Ed, XX, XX, IA_AVX }, +Ia_vmovddup_Vdq_Wq = { "vmovddup", "vmovddup", Vdq, Wq, XX, XX, IA_AVX }, +Ia_vmovdqa_Vdq_Wdq = { "vmovdqa", "vmovdqa", Vdq, Wdq, XX, XX, IA_AVX }, +Ia_vmovdqa_Wdq_Vdq = { "vmovdqa", "vmovdqa", Wdq, Vdq, XX, XX, IA_AVX }, +Ia_vmovdqu_Vdq_Wdq = { "vmovdqu", "vmovdqu", Vdq, Wdq, XX, XX, IA_AVX }, +Ia_vmovdqu_Wdq_Vdq = { "vmovdqu", "vmovdqu", Wdq, Vdq, XX, XX, IA_AVX }, +Ia_vmovhlpd_Vpd_Hdq_Udq = { "vmovhlpd", "vmovhlpd", Vpd, Hdq, Udq, XX, IA_AVX }, +Ia_vmovhlps_Vps_Hdq_Udq = { "vmovhlps", "vmovhlps", Vps, Hdq, Udq, XX, IA_AVX }, +Ia_vmovhpd_Mq_Vpd = { "vmovhpd", "vmovhpd", Mq, Vpd, XX, XX, IA_AVX }, +Ia_vmovhpd_Vpd_Hdq_Mq = { "vmovhpd", "vmovhpd", Vpd, Hdq, Mq, XX, IA_AVX }, +Ia_vmovhps_Mq_Vps = { "vmovhps", "vmovhps", Mq, Vps, XX, XX, IA_AVX }, +Ia_vmovhps_Vps_Hdq_Mq = { "vmovhps", "vmovhps", Vps, Hdq, Mq, XX, IA_AVX }, +Ia_vmovlhpd_Vpd_Hdq_Udq = { "vmovlhpd", "vmovlhpd", Vpd, Hdq, Udq, XX, IA_AVX }, +Ia_vmovlhps_Vps_Hdq_Udq = { "vmovlhps", "vmovlhps", Vps, Hdq, Udq, XX, IA_AVX }, +Ia_vmovlpd_Mq_Vpd = { "vmovlpd", "vmovlpd", Mq, Vpd, XX, XX, IA_AVX }, +Ia_vmovlpd_Vpd_Hdq_Mq = { "vmovlpd", "vmovlpd", Vpd, Hdq, Mq, XX, IA_AVX }, +Ia_vmovlps_Mq_Vps = { "vmovlps", "vmovlps", Mq, Vps, XX, XX, IA_AVX }, +Ia_vmovlps_Vps_Hdq_Mq = { "vmovlps", "vmovlps", Vps, Hdq, Mq, XX, IA_AVX }, +Ia_vmovmskpd_Gd_Upd = { "vmovmskpd", "vmovmskpd", Gd, Upd, XX, XX, IA_AVX }, +Ia_vmovmskps_Gd_Ups = { "vmovmskps", "vmovmskps", Gd, Ups, XX, XX, IA_AVX }, +Ia_vmovntdq_Mdq_Vdq = { "vmovntdq", "vmovntdq", Mdq, Vdq, XX, XX, IA_AVX }, +Ia_vmovntdqa_Vdq_Mdq = { "vmovntdqa", "vmovntdqa", Vdq, Mdq, XX, XX, IA_AVX }, +Ia_vmovntpd_Mpd_Vpd = { "vmovntpd", "vmovntpd", Mpd, Vpd, XX, XX, IA_AVX }, +Ia_vmovntps_Mps_Vps = { "vmovntps", "vmovntps", Mps, Vps, XX, XX, IA_AVX }, +Ia_vmovq_Eq_Vq = { "vmovq", "vmovq", Eq, Vq, XX, XX, IA_AVX }, +Ia_vmovq_Vdq_Eq = { "vmovq", "vmovq", Vdq, Eq, XX, XX, IA_AVX }, +Ia_vmovq_Vq_Wq = { "vmovq", "vmovq", Vq, Wq, XX, XX, IA_AVX }, +Ia_vmovq_Wq_Vq = { "vmovq", "vmovq", Wq, Vq, XX, XX, IA_AVX }, +Ia_vmovsd_Vsd_Wsd = { "vmovsd", "vmovsd", Vsd, Hpd, Wsd, XX, IA_AVX }, +Ia_vmovsd_Wsd_Vsd = { "vmovsd", "vmovsd", Wsd, Vsd, XX, XX, IA_AVX }, +Ia_vmovshdup_Vdq_Wdq = { "vmovshdup", "vmovshdup", Vdq, Wdq, XX, XX, IA_AVX }, +Ia_vmovsldup_Vdq_Wdq = { "vmovsldup", "vmovsldup", Vdq, Wdq, XX, XX, IA_AVX }, +Ia_vmovss_Vss_Wss = { "vmovss", "vmovss", Vss, Hps, Wss, XX, IA_AVX }, +Ia_vmovss_Wss_Vss = { "vmovss", "vmovss", Wss, Vss, XX, XX, IA_AVX }, +Ia_vmovupd_Vpd_Wpd = { "vmovupd", "vmovupd", Vpd, Wpd, XX, XX, IA_AVX }, +Ia_vmovupd_Wpd_Vpd = { "vmovupd", "vmovupd", Wpd, Vpd, XX, XX, IA_AVX }, +Ia_vmovups_Vps_Wps = { "vmovups", "vmovups", Vps, Wps, XX, XX, IA_AVX }, +Ia_vmovups_Wps_Vps = { "vmovups", "vmovups", Wps, Vps, XX, XX, IA_AVX }, +Ia_vmpsadbw_Vdq_Hdq_Wdq_Ib = { "vmpsadbw", "vmpsadbw", Vdq, Hdq, Wdq, Ib, IA_AVX }, +Ia_vmptrld_Mq = { "vmptrld", "vmptrld", Mq, XX, XX, XX, IA_VMX }, +Ia_vmptrst_Mq = { "vmptrst", "vmptrst", Mq, XX, XX, XX, IA_VMX }, +Ia_vmread_Ed_Gd = { "vmread", "vmread", Ed, Gd, XX, XX, IA_VMX }, +Ia_vmread_Eq_Gq = { "vmread", "vmread", Eq, Gq, XX, XX, IA_VMX }, +Ia_vmresume = { "vmresume", "vmresume", XX, XX, XX, XX, IA_VMX }, +Ia_vmrun = { "vmrun", "vmrun", RAX_Reg, XX, XX, XX, IA_SVM }, +Ia_vmsave = { "vmsave", "vmsave", RAX_Reg, XX, XX, XX, IA_SVM }, +Ia_vmulpd_Vpd_Hpd_Wpd = { "vmulpd", "vmulpd", Vpd, Hpd, Wpd, XX, IA_AVX }, +Ia_vmulps_Vps_Hps_Wps = { "vmulps", "vmulps", Vps, Hps, Wps, XX, IA_AVX }, +Ia_vmulsd_Vsd_Hpd_Wsd = { "vmulsd", "vmulsd", Vsd, Hpd, Wsd, XX, IA_AVX }, +Ia_vmulss_Vss_Hps_Wss = { "vmulss", "vmulss", Vss, Hps, Wss, XX, IA_AVX }, +Ia_vmwrite_Gd_Ed = { "vmwrite", "vmwrite", Gd, Ed, XX, XX, IA_VMX }, +Ia_vmwrite_Gq_Eq = { "vmwrite", "vmwrite", Gq, Eq, XX, XX, IA_VMX }, +Ia_vmxoff = { "vmxoff", "vmxoff", XX, XX, XX, XX, IA_VMX }, +Ia_vmxon_Mq = { "vmxon", "vmxon", Mq, XX, XX, XX, IA_VMX }, +Ia_vorpd_Vpd_Hpd_Wpd = { "vorpd", "vorpd", Vpd, Hpd, Wpd, XX, IA_AVX }, +Ia_vorps_Vps_Hps_Wps = { "vorps", "vorps", Vps, Hps, Wps, XX, IA_AVX }, +Ia_vpabsb_Vdq_Hdq_Wdq = { "vpabsb", "vpabsb", Vdq, Wdq, XX, XX, IA_AVX }, +Ia_vpabsd_Vdq_Hdq_Wdq = { "vpabsd", "vpabsd", Vdq, Wdq, XX, XX, IA_AVX }, +Ia_vpabsw_Vdq_Hdq_Wdq = { "vpabsw", "vpabsw", Vdq, Wdq, XX, XX, IA_AVX }, +Ia_vpackssdw_Vdq_Hdq_Wdq = { "vpackssdw", "vpackssdw", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpacksswb_Vdq_Hdq_Wdq = { "vpacksswb", "vpacksswb", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpackusdw_Vdq_Hdq_Wdq = { "vpackusdw", "vpackusdw", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpackuswb_Vdq_Hdq_Wdq = { "vpackuswb", "vpackuswb", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpaddb_Vdq_Hdq_Wdq = { "vpaddb", "vpaddb", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpaddd_Vdq_Hdq_Wdq = { "vpaddd", "vpaddd", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpaddq_Vdq_Hdq_Wdq = { "vpaddq", "vpaddq", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpaddsb_Vdq_Hdq_Wdq = { "vpaddsb", "vpaddsb", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpaddsw_Vdq_Hdq_Wdq = { "vpaddsw", "vpaddsw", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpaddusb_Vdq_Hdq_Wdq = { "vpaddusb", "vpaddusb", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpaddusw_Vdq_Hdq_Wdq = { "vpaddusw", "vpaddusw", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpaddw_Vdq_Hdq_Wdq = { "vpaddw", "vpaddw", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpalignr_Vdq_Hdq_Wdq_Ib = { "vpalignr", "vpalignr", Vdq, Hdq, Wdq, Ib, IA_AVX }, +Ia_vpand_Vdq_Hdq_Wdq = { "vpand", "vpand", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpandn_Vdq_Hdq_Wdq = { "vpandn", "vpandn", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpavgb_Vdq_Hdq_Wdq = { "vpavgb", "vpavgb", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpavgw_Vdq_Hdq_Wdq = { "vpavgw", "vpavgw", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpblendd_Vdq_Hdq_Wdq_Ib = { "vpblendd", "vpblendd", Vdq, Hdq, Wdq, Ib, IA_AVX2 }, +Ia_vpblendvb_Vdq_Hdq_Wdq_Ib = { "vpblendvb", "vpblendvb", Vdq, Hdq, Wdq, VIb, IA_AVX }, +Ia_vpblendw_Vdq_Hdq_Wdq_Ib = { "vpblendw", "vpblendw", Vdq, Hdq, Wdq, Ib, IA_AVX }, +Ia_vpbroadcastb_Vdq_Wb = { "vpbroadcastb", "vpbroadcastb", Vdq, Wb, XX, XX, IA_AVX2 }, +Ia_vpbroadcastd_Vdq_Wd = { "vpbroadcastd", "vpbroadcastd", Vdq, Wd, XX, XX, IA_AVX2 }, +Ia_vpbroadcastq_Vdq_Wq = { "vpbroadcastq", "vpbroadcastq", Vdq, Wq, XX, XX, IA_AVX2 }, +Ia_vpbroadcastw_Vdq_Ww = { "vpbroadcastw", "vpbroadcastw", Vdq, Ww, XX, XX, IA_AVX2 }, +Ia_vpclmulqdq_Vdq_Hdq_Wdq_Ib = { "vpclmulqdq", "vpclmulqdq", Vdq, Hdq, Wdq, Ib, IA_AVX }, +Ia_vpcmov_Vdq_Hdq_VIb_Wdq = { "vpcmov", "vpcmov", Vdq, Hdq, VIb, Wdq, IA_XOP }, +Ia_vpcmov_Vdq_Hdq_Wdq_VIb = { "vpcmov", "vpcmov", Vdq, Hdq, Wdq, VIb, IA_XOP }, +Ia_vpcmpeqb_Vdq_Hdq_Wdq = { "vpcmpeqb", "vpcmpeqb", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpcmpeqd_Vdq_Hdq_Wdq = { "vpcmpeqd", "vpcmpeqd", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpcmpeqq_Vdq_Hdq_Wdq = { "vpcmpeqq", "vpcmpeqq", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpcmpeqw_Vdq_Hdq_Wdq = { "vpcmpeqw", "vpcmpeqw", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpcmpestri_Vdq_Wdq_Ib = { "vpcmpestri", "vpcmpestri", Vdq, Wdq, Ib, XX, IA_AVX }, +Ia_vpcmpestrm_Vdq_Wdq_Ib = { "vpcmpestrm", "vpcmpestrm", Vdq, Wdq, Ib, XX, IA_AVX }, +Ia_vpcmpgtb_Vdq_Hdq_Wdq = { "vpcmpgtb", "vpcmpgtb", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpcmpgtd_Vdq_Hdq_Wdq = { "vpcmpgtd", "vpcmpgtd", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpcmpgtq_Vdq_Hdq_Wdq = { "vpcmpgtq", "vpcmpgtq", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpcmpgtw_Vdq_Hdq_Wdq = { "vpcmpgtw", "vpcmpgtw", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpcmpistri_Vdq_Wdq_Ib = { "vpcmpistri", "vpcmpistri", Vdq, Wdq, Ib, XX, IA_AVX }, +Ia_vpcmpistrm_Vdq_Wdq_Ib = { "vpcmpistrm", "vpcmpistrm", Vdq, Wdq, Ib, XX, IA_AVX }, +Ia_vpcomb_Vdq_Hdq_Wdq_Ib = { "vpcomb", "vpcomb", Vdq, Hdq, Wdq, Ib, IA_XOP }, +Ia_vpcomd_Vdq_Hdq_Wdq_Ib = { "vpcomd", "vpcomd", Vdq, Hdq, Wdq, Ib, IA_XOP }, +Ia_vpcomq_Vdq_Hdq_Wdq_Ib = { "vpcomq", "vpcomq", Vdq, Hdq, Wdq, Ib, IA_XOP }, +Ia_vpcomub_Vdq_Hdq_Wdq_Ib = { "vpcomub", "vpcomub", Vdq, Hdq, Wdq, Ib, IA_XOP }, +Ia_vpcomud_Vdq_Hdq_Wdq_Ib = { "vpcomud", "vpcomud", Vdq, Hdq, Wdq, Ib, IA_XOP }, +Ia_vpcomuq_Vdq_Hdq_Wdq_Ib = { "vpcomuq", "vpcomuq", Vdq, Hdq, Wdq, Ib, IA_XOP }, +Ia_vpcomuw_Vdq_Hdq_Wdq_Ib = { "vpcomuw", "vpcomuw", Vdq, Hdq, Wdq, Ib, IA_XOP }, +Ia_vpcomw_Vdq_Hdq_Wdq_Ib = { "vpcomw", "vpcomw", Vdq, Hdq, Wdq, Ib, IA_XOP }, +Ia_vperm2f128_Vdq_Hdq_Wdq_Ib = { "vperm2f128", "vperm2f128", Vdq, Hdq, Wdq, Ib, IA_AVX }, +Ia_vperm2i128_Vdq_Hdq_Wdq_Ib = { "vperm2i128", "vperm2i128", Vdq, Hdq, Wdq, Ib, IA_AVX2 }, +Ia_vpermd_Vdq_Hdq_Wdq = { "vpermd", "vpermd", Vdq, Hdq, Wdq, XX, IA_AVX2 }, +Ia_vpermilpd_Vpd_Hpd_Wpd = { "vpermilpd", "vpermilpd", Vpd, Hpd, Wpd, XX, IA_AVX }, +Ia_vpermilpd_Vpd_Wpd_Ib = { "vpermilpd", "vpermilpd", Vpd, Wpd, Ib, XX, IA_AVX }, +Ia_vpermilps_Vps_Hps_Wps = { "vpermilps", "vpermilps", Vps, Hps, Wps, XX, IA_AVX }, +Ia_vpermilps_Vps_Wps_Ib = { "vpermilps", "vpermilps", Vps, Wps, Ib, XX, IA_AVX }, +Ia_vpermpd_Vpd_Wpd_Ib = { "vpermpd", "vpermpd", Vpd, Wpd, Ib, XX, IA_AVX2 }, +Ia_vpermps_Vps_Hps_Wps = { "vpermps", "vpermps", Vps, Hps, Wps, XX, IA_AVX2 }, +Ia_vpermq_Vdq_Wdq_Ib = { "vpermq", "vpermq", Vdq, Wdq, Ib, XX, IA_AVX2 }, +Ia_vpextrb_Ebd_Vdq_Ib = { "vpextrb", "vpextrb", Ebd, Vdq, Ib, XX, IA_AVX }, +Ia_vpextrd_Ed_Vdq_Ib = { "vpextrd", "vpextrd", Ed, Vdq, Ib, XX, IA_AVX }, +Ia_vpextrq_Eq_Vdq_Ib = { "vpextrq", "vpextrq", Eq, Vdq, Ib, XX, IA_AVX }, +Ia_vpextrw_Ewd_Vdq_Ib = { "vpextrw", "vpextrw", Ewd, Vdq, Ib, XX, IA_AVX }, +Ia_vpextrw_Gd_Udq_Ib = { "vpextrw", "vpextrw", Gd, Udq, Ib, XX, IA_AVX }, +Ia_vphaddbd_Vdq_Wdq = { "vphaddbd", "vphaddbd", Vdq, Wdq, XX, XX, IA_XOP }, +Ia_vphaddbq_Vdq_Wdq = { "vphaddbq", "vphaddbq", Vdq, Wdq, XX, XX, IA_XOP }, +Ia_vphaddbw_Vdq_Wdq = { "vphaddbw", "vphaddbw", Vdq, Wdq, XX, XX, IA_XOP }, +Ia_vphaddd_Vdq_Hdq_Wdq = { "vphaddd", "vphaddd", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vphadddq_Vdq_Wdq = { "vphadddq", "vphadddq", Vdq, Wdq, XX, XX, IA_XOP }, +Ia_vphaddsw_Vdq_Hdq_Wdq = { "vphaddsw", "vphaddsw", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vphaddubd_Vdq_Wdq = { "vphaddubd", "vphaddubd", Vdq, Wdq, XX, XX, IA_XOP }, +Ia_vphaddubq_Vdq_Wdq = { "vphaddubq", "vphaddubq", Vdq, Wdq, XX, XX, IA_XOP }, +Ia_vphaddubw_Vdq_Wdq = { "vphaddubw", "vphaddubw", Vdq, Wdq, XX, XX, IA_XOP }, +Ia_vphaddudq_Vdq_Wdq = { "vphaddudq", "vphaddudq", Vdq, Wdq, XX, XX, IA_XOP }, +Ia_vphadduwd_Vdq_Wdq = { "vphadduwd", "vphadduwd", Vdq, Wdq, XX, XX, IA_XOP }, +Ia_vphadduwq_Vdq_Wdq = { "vphadduwq", "vphadduwq", Vdq, Wdq, XX, XX, IA_XOP }, +Ia_vphaddw_Vdq_Hdq_Wdq = { "vphaddw", "vphaddw", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vphaddwd_Vdq_Wdq = { "vphaddwd", "vphaddwd", Vdq, Wdq, XX, XX, IA_XOP }, +Ia_vphaddwq_Vdq_Wdq = { "vphaddwq", "vphaddwq", Vdq, Wdq, XX, XX, IA_XOP }, +Ia_vphminposuw_Vdq_Wdq = { "vphminposuw", "vphminposuw", Vdq, Wdq, XX, XX, IA_AVX }, +Ia_vphsubbw_Vdq_Wdq = { "vphsubbw", "vphsubbw", Vdq, Wdq, XX, XX, IA_XOP }, +Ia_vphsubd_Vdq_Hdq_Wdq = { "vphsubd", "vphsubd", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vphsubdq_Vdq_Wdq = { "vphsubdq", "vphsubdq", Vdq, Wdq, XX, XX, IA_XOP }, +Ia_vphsubsw_Vdq_Hdq_Wdq = { "vphsubsw", "vphsubsw", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vphsubw_Vdq_Hdq_Wdq = { "vphsubw", "vphsubw", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vphsubwd_Vdq_Wdq = { "vphsubwd", "vphsubwd", Vdq, Wdq, XX, XX, IA_XOP }, +Ia_vpinsrb_Vdq_Hdq_Ew_Ib = { "vpinsrb", "vpinsrb", Vdq, Hdq, Ew, Ib, IA_AVX }, +Ia_vpinsrd_Vdq_Hdq_Ed_Ib = { "vpinsrd", "vpinsrd", Vdq, Hdq, Ed, Ib, IA_AVX }, +Ia_vpinsrq_Vdq_Hdq_Eq_Ib = { "vpinsrq", "vpinsrq", Vdq, Hdq, Eq, Ib, IA_AVX }, +Ia_vpinsrw_Vdq_Hdq_Ew_Ib = { "vpinsrw", "vpinsrw", Vdq, Hdq, Ew, Ib, IA_AVX }, +Ia_vpmacsdd_Vdq_Hdq_Wdq_VIb = { "vpmacsdd", "vpmacsdd", Vdq, Hdq, Wdq, VIb, IA_XOP }, +Ia_vpmacsdqh_Vdq_Hdq_Wdq_VIb = { "vpmacsdqh", "vpmacsdqh", Vdq, Hdq, Wdq, VIb, IA_XOP }, +Ia_vpmacsdql_Vdq_Hdq_Wdq_VIb = { "vpmacsdql", "vpmacsdql", Vdq, Hdq, Wdq, VIb, IA_XOP }, +Ia_vpmacssdd_Vdq_Hdq_Wdq_VIb = { "vpmacssdd", "vpmacssdd", Vdq, Hdq, Wdq, VIb, IA_XOP }, +Ia_vpmacssdqh_Vdq_Hdq_Wdq_VIb = { "vpmacssdqh", "vpmacssdqh", Vdq, Hdq, Wdq, VIb, IA_XOP }, +Ia_vpmacssdql_Vdq_Hdq_Wdq_VIb = { "vpmacssdql", "vpmacssdql", Vdq, Hdq, Wdq, VIb, IA_XOP }, +Ia_vpmacsswd_Vdq_Hdq_Wdq_VIb = { "vpmacsswd", "vpmacsswd", Vdq, Hdq, Wdq, VIb, IA_XOP }, +Ia_vpmacssww_Vdq_Hdq_Wdq_VIb = { "vpmacssww", "vpmacssww", Vdq, Hdq, Wdq, VIb, IA_XOP }, +Ia_vpmacswd_Vdq_Hdq_Wdq_VIb = { "vpmacswd", "vpmacswd", Vdq, Hdq, Wdq, VIb, IA_XOP }, +Ia_vpmacsww_Vdq_Hdq_Wdq_VIb = { "vpmacsww", "vpmacsww", Vdq, Hdq, Wdq, VIb, IA_XOP }, +Ia_vpmadcsswd_Vdq_Hdq_Wdq_VIb = { "vpmadcsswd", "vpmadcsswd", Vdq, Hdq, Wdq, VIb, IA_XOP }, +Ia_vpmadcswd_Vdq_Hdq_Wdq_VIb = { "vpmadcswd", "vpmadcswd", Vdq, Hdq, Wdq, VIb, IA_XOP }, +Ia_vpmaddubsw_Vdq_Hdq_Wdq = { "vpmaddubsw", "vpmaddubsw", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpmaddwd_Vdq_Hdq_Wdq = { "vpmaddwd", "vpmaddwd", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpmaxsb_Vdq_Hdq_Wdq = { "vpmaxsb", "vpmaxsb", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpmaxsd_Vdq_Hdq_Wdq = { "vpmaxsd", "vpmaxsd", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpmaxsw_Vdq_Hdq_Wdq = { "vpmaxsw", "vpmaxsw", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpmaxub_Vdq_Hdq_Wdq = { "vpmaxub", "vpmaxub", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpmaxud_Vdq_Hdq_Wdq = { "vpmaxud", "vpmaxud", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpmaxuw_Vdq_Hdq_Wdq = { "vpmaxuw", "vpmaxuw", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpminsb_Vdq_Hdq_Wdq = { "vpminsb", "vpminsb", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpminsd_Vdq_Hdq_Wdq = { "vpminsd", "vpminsd", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpminsw_Vdq_Hdq_Wdq = { "vpminsw", "vpminsw", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpminub_Vdq_Hdq_Wdq = { "vpminub", "vpminub", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpminud_Vdq_Hdq_Wdq = { "vpminud", "vpminud", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpminuw_Vdq_Hdq_Wdq = { "vpminuw", "vpminuw", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpmovmskb_Gd_Udq = { "vpmovmskb", "vpmovmskb", Gd, Udq, XX, XX, IA_AVX }, +Ia_vpmovsxbd_Vdq_Wd = { "vpmovsxbd", "vpmovsxbd", Vdq, Wd, XX, XX, IA_AVX }, +Ia_vpmovsxbq_Vdq_Ww = { "vpmovsxbq", "vpmovsxbq", Vdq, Ww, XX, XX, IA_AVX }, +Ia_vpmovsxbw_Vdq_Wq = { "vpmovsxbw", "vpmovsxbw", Vdq, Wq, XX, XX, IA_AVX }, +Ia_vpmovsxdq_Vdq_Wq = { "vpmovsxdq", "vpmovsxdq", Vdq, Wq, XX, XX, IA_AVX }, +Ia_vpmovsxwd_Vdq_Wq = { "vpmovsxwd", "vpmovsxwd", Vdq, Wq, XX, XX, IA_AVX }, +Ia_vpmovsxwq_Vdq_Wd = { "vpmovsxwq", "vpmovsxwq", Vdq, Wd, XX, XX, IA_AVX }, +Ia_vpmovzxbd_Vdq_Wd = { "vpmovzxbd", "vpmovzxbd", Vdq, Wd, XX, XX, IA_AVX }, +Ia_vpmovzxbq_Vdq_Ww = { "vpmovzxbq", "vpmovzxbq", Vdq, Ww, XX, XX, IA_AVX }, +Ia_vpmovzxbw_Vdq_Wq = { "vpmovzxbw", "vpmovzxbw", Vdq, Wq, XX, XX, IA_AVX }, +Ia_vpmovzxdq_Vdq_Wq = { "vpmovzxdq", "vpmovzxdq", Vdq, Wq, XX, XX, IA_AVX }, +Ia_vpmovzxwd_Vdq_Wq = { "vpmovzxwd", "vpmovzxwd", Vdq, Wq, XX, XX, IA_AVX }, +Ia_vpmovzxwq_Vdq_Wd = { "vpmovzxwq", "vpmovzxwq", Vdq, Wd, XX, XX, IA_AVX }, +Ia_vpmuldq_Vdq_Hdq_Wdq = { "vpmuldq", "vpmuldq", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpmulhrsw_Vdq_Hdq_Wdq = { "vpmulhrsw", "vpmulhrsw", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpmulhuw_Vdq_Hdq_Wdq = { "vpmulhuw", "vpmulhuw", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpmulhw_Vdq_Hdq_Wdq = { "vpmulhw", "vpmulhw", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpmulld_Vdq_Hdq_Wdq = { "vpmulld", "vpmulld", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpmullw_Vdq_Hdq_Wdq = { "vpmullw", "vpmullw", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpmuludq_Vdq_Hdq_Wdq = { "vpmuludq", "vpmuludq", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpor_Vdq_Hdq_Wdq = { "vpor", "vpor", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpperm_Vdq_Hdq_VIb_Wdq = { "vpperm", "vpperm", Vdq, Hdq, VIb, Wdq, IA_XOP }, +Ia_vpperm_Vdq_Hdq_Wdq_VIb = { "vpperm", "vpperm", Vdq, Hdq, Wdq, VIb, IA_XOP }, +Ia_vprotb_Vdq_Hdq_Wdq = { "vprotb", "vprotb", Vdq, Hdq, Wdq, XX, IA_XOP }, +Ia_vprotb_Vdq_Wdq_Hdq = { "vprotb", "vprotb", Vdq, Wdq, Hdq, XX, IA_XOP }, +Ia_vprotb_Vdq_Wdq_Ib = { "vprotb", "vprotb", Vdq, Wdq, Ib, XX, IA_XOP }, +Ia_vprotd_Vdq_Hdq_Wdq = { "vprotd", "vprotd", Vdq, Hdq, Wdq, XX, IA_XOP }, +Ia_vprotd_Vdq_Wdq_Hdq = { "vprotd", "vprotd", Vdq, Wdq, Hdq, XX, IA_XOP }, +Ia_vprotd_Vdq_Wdq_Ib = { "vprotd", "vprotd", Vdq, Wdq, Ib, XX, IA_XOP }, +Ia_vprotq_Vdq_Hdq_Wdq = { "vprotq", "vprotq", Vdq, Hdq, Wdq, XX, IA_XOP }, +Ia_vprotq_Vdq_Wdq_Hdq = { "vprotq", "vprotq", Vdq, Wdq, Hdq, XX, IA_XOP }, +Ia_vprotq_Vdq_Wdq_Ib = { "vprotq", "vprotq", Vdq, Wdq, Ib, XX, IA_XOP }, +Ia_vprotw_Vdq_Hdq_Wdq = { "vprotw", "vprotw", Vdq, Hdq, Wdq, XX, IA_XOP }, +Ia_vprotw_Vdq_Wdq_Hdq = { "vprotw", "vprotw", Vdq, Wdq, Hdq, XX, IA_XOP }, +Ia_vprotw_Vdq_Wdq_Ib = { "vprotw", "vprotw", Vdq, Wdq, Ib, XX, IA_XOP }, +Ia_vpsadbw_Vdq_Hdq_Wdq = { "vpsadbw", "vpsadbw", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpshab_Vdq_Hdq_Wdq = { "vpshab", "vpshab", Vdq, Hdq, Wdq, XX, IA_XOP }, +Ia_vpshab_Vdq_Wdq_Hdq = { "vpshab", "vpshab", Vdq, Wdq, Hdq, XX, IA_XOP }, +Ia_vpshad_Vdq_Hdq_Wdq = { "vpshad", "vpshad", Vdq, Hdq, Wdq, XX, IA_XOP }, +Ia_vpshad_Vdq_Wdq_Hdq = { "vpshad", "vpshad", Vdq, Wdq, Hdq, XX, IA_XOP }, +Ia_vpshaq_Vdq_Hdq_Wdq = { "vpshaq", "vpshaq", Vdq, Hdq, Wdq, XX, IA_XOP }, +Ia_vpshaq_Vdq_Wdq_Hdq = { "vpshaq", "vpshaq", Vdq, Wdq, Hdq, XX, IA_XOP }, +Ia_vpshaw_Vdq_Hdq_Wdq = { "vpshaw", "vpshaw", Vdq, Hdq, Wdq, XX, IA_XOP }, +Ia_vpshaw_Vdq_Wdq_Hdq = { "vpshaw", "vpshaw", Vdq, Wdq, Hdq, XX, IA_XOP }, +Ia_vpshlb_Vdq_Hdq_Wdq = { "vpshlb", "vpshlb", Vdq, Hdq, Wdq, XX, IA_XOP }, +Ia_vpshlb_Vdq_Wdq_Hdq = { "vpshlb", "vpshlb", Vdq, Wdq, Hdq, XX, IA_XOP }, +Ia_vpshld_Vdq_Hdq_Wdq = { "vpshld", "vpshld", Vdq, Hdq, Wdq, XX, IA_XOP }, +Ia_vpshld_Vdq_Wdq_Hdq = { "vpshld", "vpshld", Vdq, Wdq, Hdq, XX, IA_XOP }, +Ia_vpshlq_Vdq_Hdq_Wdq = { "vpshlq", "vpshlq", Vdq, Hdq, Wdq, XX, IA_XOP }, +Ia_vpshlq_Vdq_Wdq_Hdq = { "vpshlq", "vpshlq", Vdq, Wdq, Hdq, XX, IA_XOP }, +Ia_vpshlw_Vdq_Hdq_Wdq = { "vpshlw", "vpshlw", Vdq, Hdq, Wdq, XX, IA_XOP }, +Ia_vpshlw_Vdq_Wdq_Hdq = { "vpshlw", "vpshlw", Vdq, Wdq, Hdq, XX, IA_XOP }, +Ia_vpshufb_Vdq_Hdq_Wdq = { "vpshufb", "vpshufb", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpshufd_Vdq_Hdq_Wdq_Ib = { "vpshufd", "vpshufd", Vdq, Wdq, Ib, XX, IA_AVX }, +Ia_vpshufhw_Vdq_Hdq_Wdq_Ib = { "vpshufhw", "vpshufhw", Vdq, Wdq, Ib, XX, IA_AVX }, +Ia_vpshuflw_Vdq_Hdq_Wdq_Ib = { "vpshuflw", "vpshuflw", Vdq, Wdq, Ib, XX, IA_AVX }, +Ia_vpsignb_Vdq_Hdq_Wdq = { "vpsignb", "vpsignb", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpsignd_Vdq_Hdq_Wdq = { "vpsignd", "vpsignd", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpsignw_Vdq_Hdq_Wdq = { "vpsignw", "vpsignw", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpslld_Hdq_Udq_Ib = { "vpslld", "vpslld", Hdq, Udq, Ib, XX, IA_AVX }, +Ia_vpslld_Vdq_Hdq_Wdq = { "vpslld", "vpslld", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpslldq_Hdq_Udq_Ib = { "vpslldq", "vpslldq", Hdq, Udq, Ib, XX, IA_AVX }, +Ia_vpsllq_Hdq_Udq_Ib = { "vpsllq", "vpsllq", Hdq, Udq, Ib, XX, IA_AVX }, +Ia_vpsllq_Vdq_Hdq_Wdq = { "vpsllq", "vpsllq", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpsllvd_Vdq_Hdq_Wdq = { "vpsllvd", "vpsllvd", Vdq, Hdq, Wdq, XX, IA_AVX2 }, +Ia_vpsllvq_Vdq_Hdq_Wdq = { "vpsllvq", "vpsllvq", Vdq, Hdq, Wdq, XX, IA_AVX2 }, +Ia_vpsllw_Hdq_Udq_Ib = { "vpsllw", "vpsllw", Hdq, Udq, Ib, XX, IA_AVX }, +Ia_vpsllw_Vdq_Hdq_Wdq = { "vpsllw", "vpsllw", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpsrad_Hdq_Udq_Ib = { "vpsrad", "vpsrad", Hdq, Udq, Ib, XX, IA_AVX }, +Ia_vpsrad_Vdq_Hdq_Wdq = { "vpsrad", "vpsrad", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpsravd_Vdq_Hdq_Wdq = { "vpsravd", "vpsravd", Vdq, Hdq, Wdq, XX, IA_AVX2 }, +Ia_vpsraw_Hdq_Udq_Ib = { "vpsraw", "vpsraw", Hdq, Udq, Ib, XX, IA_AVX }, +Ia_vpsraw_Vdq_Hdq_Wdq = { "vpsraw", "vpsraw", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpsrld_Hdq_Udq_Ib = { "vpsrld", "vpsrld", Hdq, Udq, Ib, XX, IA_AVX }, +Ia_vpsrld_Vdq_Hdq_Wdq = { "vpsrld", "vpsrld", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpsrldq_Hdq_Udq_Ib = { "vpsrldq", "vpsrldq", Hdq, Udq, Ib, XX, IA_AVX }, +Ia_vpsrlq_Hdq_Udq_Ib = { "vpsrlq", "vpsrlq", Hdq, Udq, Ib, XX, IA_AVX }, +Ia_vpsrlq_Vdq_Hdq_Wdq = { "vpsrlq", "vpsrlq", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpsrlvd_Vdq_Hdq_Wdq = { "vpsrlvd", "vpsrlvd", Vdq, Hdq, Wdq, XX, IA_AVX2 }, +Ia_vpsrlvq_Vdq_Hdq_Wdq = { "vpsrlvq", "vpsrlvq", Vdq, Hdq, Wdq, XX, IA_AVX2 }, +Ia_vpsrlw_Hdq_Udq_Ib = { "vpsrlw", "vpsrlw", Hdq, Udq, Ib, XX, IA_AVX }, +Ia_vpsrlw_Vdq_Hdq_Wdq = { "vpsrlw", "vpsrlw", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpsubb_Vdq_Hdq_Wdq = { "vpsubb", "vpsubb", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpsubd_Vdq_Hdq_Wdq = { "vpsubd", "vpsubd", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpsubq_Vdq_Hdq_Wdq = { "vpsubq", "vpsubq", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpsubsb_Vdq_Hdq_Wdq = { "vpsubsb", "vpsubsb", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpsubsw_Vdq_Hdq_Wdq = { "vpsubsw", "vpsubsw", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpsubusb_Vdq_Hdq_Wdq = { "vpsubusb", "vpsubusb", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpsubusw_Vdq_Hdq_Wdq = { "vpsubusw", "vpsubusw", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpsubw_Vdq_Hdq_Wdq = { "vpsubw", "vpsubw", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vptest_Vdq_Wdq = { "vptest", "vptest", Vdq, Wdq, XX, XX, IA_AVX }, +Ia_vpunpckhbw_Vdq_Hdq_Wdq = { "vpunpckhbw", "vpunpckhbw", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpunpckhdq_Vdq_Hdq_Wdq = { "vpunpckhdq", "vpunpckhdq", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpunpckhqdq_Vdq_Hdq_Wdq = { "vpunpckhqdq", "vpunpckhqdq", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpunpckhwd_Vdq_Hdq_Wdq = { "vpunpckhwd", "vpunpckhwd", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpunpcklbw_Vdq_Hdq_Wdq = { "vpunpcklbw", "vpunpcklbw", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpunpckldq_Vdq_Hdq_Wdq = { "vpunpckldq", "vpunpckldq", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpunpcklqdq_Vdq_Hdq_Wdq = { "vpunpcklqdq", "vpunpcklqdq", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpunpcklwd_Vdq_Hdq_Wdq = { "vpunpcklwd", "vpunpcklwd", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vpxor_Vdq_Hdq_Wdq = { "vpxor", "vpxor", Vdq, Hdq, Wdq, XX, IA_AVX }, +Ia_vrcpps_Vps_Wps = { "vrcpps", "vrcpps", Vps, Wps, XX, XX, IA_AVX }, +Ia_vrcpss_Vss_Hps_Wss = { "vrcpss", "vrcpss", Vss, Hps, Wss, XX, IA_AVX }, +Ia_vroundpd_Vpd_Wpd_Ib = { "vroundpd", "vroundpd", Vpd, Wpd, Ib, XX, IA_AVX }, +Ia_vroundps_Vps_Wps_Ib = { "vroundps", "vroundps", Vps, Wps, Ib, XX, IA_AVX }, +Ia_vroundsd_Vsd_Hpd_Wsd_Ib = { "vroundsd", "vroundsd", Vsd, Hpd, Wsd, Ib, IA_AVX }, +Ia_vroundss_Vss_Hps_Wss_Ib = { "vroundss", "vroundss", Vss, Hps, Wss, Ib, IA_AVX }, +Ia_vrsqrtps_Vps_Wps = { "vrsqrtps", "vrsqrtps", Vps, Wps, XX, XX, IA_AVX }, +Ia_vrsqrtss_Vss_Hps_Wss = { "vrsqrtss", "vrsqrtss", Vss, Hps, Wss, XX, IA_AVX }, +Ia_vshufpd_Vpd_Hpd_Wpd_Ib = { "vshufpd", "vshufpd", Vpd, Hpd, Wpd, Ib, IA_AVX }, +Ia_vshufps_Vps_Hps_Wps_Ib = { "vshufps", "vshufps", Vps, Hps, Wps, Ib, IA_AVX }, +Ia_vsqrtpd_Vpd_Wpd = { "vsqrtpd", "vsqrtpd", Vpd, Wpd, XX, XX, IA_AVX }, +Ia_vsqrtps_Vps_Wps = { "vsqrtps", "vsqrtps", Vps, Wps, XX, XX, IA_AVX }, +Ia_vsqrtsd_Vsd_Hpd_Wsd = { "vsqrtsd", "vsqrtsd", Vsd, Hpd, Wsd, XX, IA_AVX }, +Ia_vsqrtss_Vss_Hps_Wss = { "vsqrtss", "vsqrtss", Vss, Hps, Wss, XX, IA_AVX }, +Ia_vstmxcsr = { "vstmxcsr", "vstmxcsr", Md, XX, XX, XX, IA_AVX }, +Ia_vsubpd_Vpd_Hpd_Wpd = { "vsubpd", "vsubpd", Vpd, Hpd, Wpd, XX, IA_AVX }, +Ia_vsubps_Vps_Hps_Wps = { "vsubps", "vsubps", Vps, Hps, Wps, XX, IA_AVX }, +Ia_vsubsd_Vsd_Hpd_Wsd = { "vsubsd", "vsubsd", Vsd, Hpd, Wsd, XX, IA_AVX }, +Ia_vsubss_Vss_Hps_Wss = { "vsubss", "vsubss", Vss, Hps, Wss, XX, IA_AVX }, +Ia_vtestpd_Vpd_Wpd = { "vtestpd", "vtestpd", Vpd, Wpd, XX, XX, IA_AVX }, +Ia_vtestps_Vps_Wps = { "vtestps", "vtestps", Vps, Wps, XX, XX, IA_AVX }, +Ia_vucomisd_Vsd_Wsd = { "vucomisd", "vucomisd", Vsd, Wsd, XX, XX, IA_AVX }, +Ia_vucomiss_Vss_Wss = { "vucomiss", "vucomiss", Vss, Wss, XX, XX, IA_AVX }, +Ia_vunpckhpd_Vpd_Hpd_Wpd = { "vunpckhpd", "vunpckhpd", Vpd, Hpd, Wpd, XX, IA_AVX }, +Ia_vunpckhps_Vps_Hps_Wps = { "vunpckhps", "vunpckhps", Vps, Hps, Wps, XX, IA_AVX }, +Ia_vunpcklpd_Vpd_Hpd_Wpd = { "vunpcklpd", "vunpcklpd", Vpd, Hpd, Wpd, XX, IA_AVX }, +Ia_vunpcklps_Vps_Hps_Wps = { "vunpcklps", "vunpcklps", Vps, Hps, Wps, XX, IA_AVX }, +Ia_vxorpd_Vpd_Hpd_Wpd = { "vxorpd", "vxorpd", Vpd, Hpd, Wpd, XX, IA_AVX }, +Ia_vxorps_Vps_Hps_Wps = { "vxorps", "vxorps", Vps, Hps, Wps, XX, IA_AVX }, +Ia_vzeroall = { "vzeroall", "vzeroall", XX, XX, XX, XX, IA_AVX }, +Ia_vzeroupper = { "vzeroupper", "vzeroupper", XX, XX, XX, XX, IA_AVX }, +Ia_wbinvd = { "wbinvd", "wbinvd", XX, XX, XX, XX, IA_486 }, +Ia_wrfsbase_Ry = { "wrfsbase", "wrfsbase", Ry, XX, XX, XX, IA_FSGSBASE }, +Ia_wrgsbase_Ry = { "wrgsbase", "wrgsbase", Ry, XX, XX, XX, IA_FSGSBASE }, +Ia_wrmsr = { "wrmsr", "wrmsr", XX, XX, XX, XX, IA_PENTIUM }, +Ia_xaddb_Eb_Gb = { "xadd", "xaddb", Eb, Gb, XX, XX, IA_486 }, +Ia_xaddl_Ed_Gd = { "xadd", "xaddl", Ed, Gd, XX, XX, IA_486 }, +Ia_xaddq_Eq_Gq = { "xadd", "xaddq", Eq, Gq, XX, XX, 0 }, +Ia_xaddw_Ew_Gw = { "xadd", "xaddw", Ew, Gw, XX, XX, IA_486 }, +Ia_xchgb_Eb_Gb = { "xchg", "xchgb", Eb, Gb, XX, XX, 0 }, +Ia_xchgl_Ed_Gd = { "xchg", "xchgl", Ed, Gd, XX, XX, 0 }, +Ia_xchgl_ERX_EAX = { "xchg", "xchgl", ERX, EAX_Reg, XX, XX, 0 }, +Ia_xchgq_Eq_Gq = { "xchg", "xchgq", Eq, Gq, XX, XX, 0 }, +Ia_xchgq_RRX_RAX = { "xchg", "xchgq", RRX, RAX_Reg, XX, XX, 0 }, +Ia_xchgw_Ew_Gw = { "xchg", "xchgw", Ew, Gw, XX, XX, 0 }, +Ia_xchgw_RX_AX = { "xchg", "xchgw", RX, AX_Reg, XX, XX, 0 }, +Ia_xgetbv = { "xgetbv", "xgetbv", XX, XX, XX, XX, IA_XSAVE }, +Ia_xlat = { "xlat", "xlat", XX, XX, XX, XX, 0 }, +Ia_xorb_AL_Ib = { "xor", "xorb", AL_Reg, Ib, XX, XX, 0 }, +Ia_xorb_Eb_Gb = { "xor", "xorb", Eb, Gb, XX, XX, 0 }, +Ia_xorb_Eb_Ib = { "xor", "xorb", Eb, Ib, XX, XX, 0 }, +Ia_xorb_Gb_Eb = { "xor", "xorb", Gb, Eb, XX, XX, 0 }, +Ia_xorl_EAX_Id = { "xor", "xorl", EAX_Reg, Id, XX, XX, 0 }, +Ia_xorl_Ed_Gd = { "xor", "xorl", Ed, Gd, XX, XX, 0 }, +Ia_xorl_Ed_Id = { "xor", "xorl", Ed, Id, XX, XX, 0 }, +Ia_xorl_Ed_sIb = { "xor", "xorl", Ed, sIbd, XX, XX, 0 }, +Ia_xorl_Gd_Ed = { "xor", "xorl", Gd, Ed, XX, XX, 0 }, +Ia_xorpd_Vpd_Wpd = { "xorpd", "xorpd", Vpd, Wpd, XX, XX, IA_SSE2 }, +Ia_xorps_Vps_Wps = { "xorps", "xorps", Vps, Wps, XX, XX, IA_SSE }, +Ia_xorq_Eq_Gq = { "xor", "xorq", Eq, Gq, XX, XX, 0 }, +Ia_xorq_Eq_sIb = { "xor", "xorq", Eq, sIbq, XX, XX, 0 }, +Ia_xorq_Eq_sId = { "xor", "xorq", Eq, sIdq, XX, XX, 0 }, +Ia_xorq_Gq_Eq = { "xor", "xorq", Gq, Eq, XX, XX, 0 }, +Ia_xorq_RAX_sId = { "xor", "xorq", RAX_Reg, sIdq, XX, XX, 0 }, +Ia_xorw_AX_Iw = { "xor", "xorw", AX_Reg, Iw, XX, XX, 0 }, +Ia_xorw_Ew_Gw = { "xor", "xorw", Ew, Gw, XX, XX, 0 }, +Ia_xorw_Ew_Iw = { "xor", "xorw", Ew, Iw, XX, XX, 0 }, +Ia_xorw_Ew_sIb = { "xor", "xorw", Ew, sIbw, XX, XX, 0 }, +Ia_xorw_Gw_Ew = { "xor", "xorw", Gw, Ew, XX, XX, 0 }, +Ia_xrstor = { "xrstor", "xrstor", Mx, XX, XX, XX, IA_XSAVE }, +Ia_xsave = { "xsave", "xsave", Mx, XX, XX, XX, IA_XSAVE }, +Ia_xsavec = { "xsavec", "xsavec", Mx, XX, XX, XX, IA_XSAVEC }, +Ia_xsaveopt = { "xsaveopt", "xsaveopt", Mx, XX, XX, XX, IA_XSAVEOPT }, +Ia_xsetbv = { "xsetbv", "xsetbv", XX, XX, XX, XX, IA_XSAVE }; diff --git a/Externals/Bochs_disasm/opcodes.inl b/Externals/Bochs_disasm/opcodes.inl deleted file mode 100644 index fbb1b7be54..0000000000 --- a/Externals/Bochs_disasm/opcodes.inl +++ /dev/null @@ -1,1230 +0,0 @@ -Ia_aaa = { "aaa", "aaa", XX, XX, XX }, -Ia_aad = { "aad", "aad", Ib, XX, XX }, -Ia_aam = { "aam", "aam", Ib, XX, XX }, -Ia_aas = { "aas", "aas", XX, XX, XX }, -Ia_adcb_AL_Ib = { "adc", "adcb", AL, Ib, XX }, -Ia_adcb_Eb_Gb = { "adc", "adcb", Eb, Gb, XX }, -Ia_adcb_Eb_Ib = { "adc", "adcb", Eb, Ib, XX }, -Ia_adcb_Gb_Eb = { "adc", "adcb", Gb, Eb, XX }, -Ia_adcl_EAX_Id = { "adc", "adcl", EAX, Id, XX }, -Ia_adcl_Ed_Gd = { "adc", "adcl", Ed, Gd, XX }, -Ia_adcl_Ed_Id = { "adc", "adcl", Ed, Id, XX }, -Ia_adcl_Ed_sIb = { "adc", "adcl", Ed, sIbd, XX }, -Ia_adcl_Gd_Ed = { "adc", "adcl", Gd, Ed, XX }, -Ia_adcq_Eq_Gq = { "adc", "adcq", Eq, Gq, XX }, -Ia_adcq_Eq_sIb = { "adc", "adcq", Eq, sIbq, XX }, -Ia_adcq_Eq_sId = { "adc", "adcq", Eq, Iq, XX }, -Ia_adcq_Gq_Eq = { "adc", "adcq", Gq, Eq, XX }, -Ia_adcq_RAX_sId = { "adc", "adcq", RAX, sIdq, XX }, -Ia_adcw_AX_Iw = { "adc", "adcw", AX, Iw, XX }, -Ia_adcw_Ew_Gw = { "adc", "adcw", Ew, Gw, XX }, -Ia_adcw_Ew_Iw = { "adc", "adcw", Ew, Iw, XX }, -Ia_adcw_Ew_sIb = { "adc", "adcw", Ew, sIbw, XX }, -Ia_adcw_Gw_Ew = { "adc", "adcw", Gw, Ew, XX }, -Ia_addb_AL_Ib = { "add", "addb", AL, Ib, XX }, -Ia_addb_Eb_Gb = { "add", "addb", Eb, Gb, XX }, -Ia_addb_Eb_Ib = { "add", "addb", Eb, Ib, XX }, -Ia_addb_Gb_Eb = { "add", "addb", Gb, Eb, XX }, -Ia_addl_EAX_Id = { "add", "addl", EAX, Id, XX }, -Ia_addl_Ed_Gd = { "add", "addl", Ed, Gd, XX }, -Ia_addl_Ed_Id = { "add", "addl", Ed, Id, XX }, -Ia_addl_Ed_sIb = { "add", "addl", Ed, sIbd, XX }, -Ia_addl_Gd_Ed = { "add", "addl", Gd, Ed, XX }, -Ia_addpd_Vpd_Wpd = { "addpd", "addpd", Vpd, Wpd, XX }, -Ia_addps_Vps_Wps = { "addps", "addps", Vps, Wps, XX }, -Ia_addq_Eq_Gq = { "add", "addq", Eq, Gq, XX }, -Ia_addq_Eq_sIb = { "add", "addq", Eq, sIbq, XX }, -Ia_addq_Eq_sId = { "add", "addq", Eq, sIdq, XX }, -Ia_addq_Gq_Eq = { "add", "addq", Gq, Eq, XX }, -Ia_addq_RAX_sId = { "add", "addq", RAX, sIdq, XX }, -Ia_addsd_Vsd_Wsd = { "addsd", "addsd", Vsd, Wsd, XX }, -Ia_addss_Vss_Wss = { "addss", "addss", Vss, Wss, XX }, -Ia_addsubpd_Vpd_Wpd = { "addsubpd", "addsubpd", Vpd, Wpd, XX }, -Ia_addsubps_Vps_Wps = { "addsubps", "addsubps", Vps, Wps, XX }, -Ia_addw_AX_Iw = { "add", "addw", AX, Iw, XX }, -Ia_addw_Ew_Gw = { "add", "addw", Ew, Gw, XX }, -Ia_addw_Ew_Iw = { "add", "addw", Ew, Iw, XX }, -Ia_addw_Ew_sIb = { "add", "addw", Ew, sIbw, XX }, -Ia_addw_Gw_Ew = { "add", "addw", Gw, Ew, XX }, -Ia_andb_AL_Ib = { "and", "andb", AL, Ib, XX }, -Ia_andb_Eb_Gb = { "and", "andb", Eb, Gb, XX }, -Ia_andb_Eb_Ib = { "and", "andb", Eb, Ib, XX }, -Ia_andb_Gb_Eb = { "and", "andb", Gb, Eb, XX }, -Ia_andl_EAX_Id = { "and", "andl", EAX, Id, XX }, -Ia_andl_Ed_Gd = { "and", "andl", Ed, Gd, XX }, -Ia_andl_Ed_Id = { "and", "andl", Ed, Id, XX }, -Ia_andl_Ed_sIb = { "and", "andl", Ed, sIbd, XX }, -Ia_andl_Gd_Ed = { "and", "andl", Gd, Ed, XX }, -Ia_andnpd_Vpd_Wpd = { "andnpd", "andnpd", Vpd, Wpd, XX }, -Ia_andnps_Vps_Wps = { "andnps", "andnps", Vps, Wps, XX }, -Ia_andpd_Vpd_Wpd = { "andpd", "andpd", Vpd, Wpd, XX }, -Ia_andps_Vps_Wps = { "andps", "andps", Vps, Wps, XX }, -Ia_andq_Eq_Gq = { "and", "andq", Eq, Gq, XX }, -Ia_andq_Eq_sIb = { "and", "andq", Eq, sIbq, XX }, -Ia_andq_Eq_sId = { "and", "andq", Eq, sIdq, XX }, -Ia_andq_Gq_Eq = { "and", "andq", Gq, Eq, XX }, -Ia_andq_RAX_sId = { "and", "andq", RAX, sIdq, XX }, -Ia_andw_AX_Iw = { "and", "andw", AX, Iw, XX }, -Ia_andw_Ew_Gw = { "and", "andw", Ew, Gw, XX }, -Ia_andw_Ew_Iw = { "and", "andw", Ew, Iw, XX }, -Ia_andw_Ew_sIb = { "and", "andw", Ew, sIbw, XX }, -Ia_andw_Gw_Ew = { "and", "andw", Gw, Ew, XX }, -Ia_arpl_Ew_Rw = { "arpl", "arpl", Ew, Rw, XX }, -Ia_boundl_Gd_Ma = { "bound", "boundl", Gd, Ma, XX }, -Ia_boundw_Gw_Ma = { "bound", "boundw", Gw, Ma, XX }, -Ia_bsfl_Gd_Ed = { "bsf", "bsfl", Gd, Ed, XX }, -Ia_bsfq_Gq_Eq = { "bsf", "bsfq", Gq, Eq, XX }, -Ia_bsfw_Gw_Ew = { "bsf", "bsfw", Gw, Ew, XX }, -Ia_bsrl_Gd_Ed = { "bsr", "bsrl", Gd, Ed, XX }, -Ia_bsrq_Gq_Eq = { "bsr", "bsrq", Gq, Eq, XX }, -Ia_bsrw_Gw_Ew = { "bsr", "bsrw", Gw, Ew, XX }, -Ia_bswapl_ERX = { "bswap", "bswapl", ERX, XX, XX }, -Ia_bswapq_RRX = { "bswap", "bswapq", RRX, XX, XX }, -Ia_btcl_Ed_Gd = { "btc", "btcl", Ed, Gd, XX }, -Ia_btcl_Ed_Ib = { "btc", "btcl", Ed, Ib, XX }, -Ia_btcq_Eq_Gq = { "btc", "btcq", Eq, Gq, XX }, -Ia_btcq_Eq_Ib = { "btc", "btcq", Eq, Ib, XX }, -Ia_btcw_Ew_Gw = { "btc", "btcw", Ew, Gw, XX }, -Ia_btcw_Ew_Ib = { "btc", "btcw", Ew, Ib, XX }, -Ia_btl_Ed_Gd = { "bt", "btl", Ed, Gd, XX }, -Ia_btl_Ed_Ib = { "bt", "btl", Ed, Ib, XX }, -Ia_btq_Eq_Gq = { "bt", "btq", Eq, Gq, XX }, -Ia_btq_Eq_Ib = { "bt", "btq", Eq, Ib, XX }, -Ia_btrl_Ed_Gd = { "btr", "btrl", Ed, Gd, XX }, -Ia_btrl_Ed_Ib = { "btr", "btrl", Ed, Ib, XX }, -Ia_btrq_Eq_Gq = { "btr", "btrq", Eq, Gq, XX }, -Ia_btrq_Eq_Ib = { "btr", "btrq", Eq, Ib, XX }, -Ia_btrw_Ew_Gw = { "btr", "btrw", Ew, Gw, XX }, -Ia_btrw_Ew_Ib = { "btr", "btrw", Ew, Ib, XX }, -Ia_btsl_Ed_Gd = { "bts", "btsl", Ed, Gd, XX }, -Ia_btsl_Ed_Ib = { "bts", "btsl", Ed, Ib, XX }, -Ia_btsq_Eq_Gq = { "bts", "btsq", Eq, Gq, XX }, -Ia_btsq_Eq_Ib = { "bts", "btsq", Eq, Ib, XX }, -Ia_btsw_Ew_Gw = { "bts", "btsw", Ew, Gw, XX }, -Ia_btsw_Ew_Ib = { "bts", "btsw", Ew, Ib, XX }, -Ia_btw_Ew_Gw = { "bt", "btw", Ew, Gw, XX }, -Ia_btw_Ew_Ib = { "bt", "btw", Ew, Ib, XX }, -Ia_call_Ed = { "call", "call", Ed, XX, XX }, -Ia_call_Eq = { "call", "call", Eq, XX, XX }, -Ia_call_Ew = { "call", "call", Ew, XX, XX }, -Ia_call_Jd = { "call", "call", Jd, XX, XX }, -Ia_call_Jw = { "call", "call", Jw, XX, XX }, -Ia_cbw = { "cbw", "cbtw", XX, XX, XX }, -Ia_cdq = { "cdq", "cltd", XX, XX, XX }, -Ia_cdqe = { "cdqe", "cltq", XX, XX, XX }, -Ia_cflush = { "cflush", "cflush", Mb, XX, XX }, -Ia_clc = { "clc", "clc", XX, XX, XX }, -Ia_cld = { "cld", "cld", XX, XX, XX }, -Ia_cli = { "cli", "cli", XX, XX, XX }, -Ia_clts = { "clts", "clts", XX, XX, XX }, -Ia_cmc = { "cmc", "cmc", XX, XX, XX }, -Ia_cmoval_Gd_Ed = { "cmova", "cmoval", Gd, Ed, XX }, -Ia_cmovaq_Gq_Eq = { "cmova", "cmovaq", Gq, Eq, XX }, -Ia_cmovaw_Gw_Ew = { "cmova", "cmovaw", Gw, Ew, XX }, -Ia_cmovcl_Gd_Ed = { "cmovc", "cmovcl", Gd, Ed, XX }, -Ia_cmovcq_Gq_Eq = { "cmovc", "cmovcq", Gq, Eq, XX }, -Ia_cmovcw_Gw_Ew = { "cmovc", "cmovcw", Gw, Ew, XX }, -Ia_cmovgl_Gd_Ed = { "cmovg", "cmovgl", Gd, Ed, XX }, -Ia_cmovgq_Gq_Eq = { "cmovg", "cmovgq", Gq, Eq, XX }, -Ia_cmovgw_Gw_Ew = { "cmovg", "cmovgw", Gw, Ew, XX }, -Ia_cmovll_Gd_Ed = { "cmovl", "cmovll", Gd, Ed, XX }, -Ia_cmovlq_Gq_Eq = { "cmovl", "cmovlq", Gq, Eq, XX }, -Ia_cmovlw_Gw_Ew = { "cmovl", "cmovlw", Gw, Ew, XX }, -Ia_cmovnal_Gd_Ed = { "cmovna", "cmovnal", Gd, Ed, XX }, -Ia_cmovnaq_Gq_Eq = { "cmovna", "cmovnaq", Gq, Eq, XX }, -Ia_cmovnaw_Gw_Ew = { "cmovna", "cmovnaw", Gw, Ew, XX }, -Ia_cmovncl_Gd_Ed = { "cmovnc", "cmovncl", Gd, Ed, XX }, -Ia_cmovncq_Gq_Eq = { "cmovnc", "cmovncq", Gq, Eq, XX }, -Ia_cmovncw_Gw_Ew = { "cmovnc", "cmovncw", Gw, Ew, XX }, -Ia_cmovngl_Gd_Ed = { "cmovng", "cmovngl", Gd, Ed, XX }, -Ia_cmovngq_Gq_Eq = { "cmovng", "cmovngq", Gq, Eq, XX }, -Ia_cmovngw_Gw_Ew = { "cmovng", "cmovngw", Gw, Ew, XX }, -Ia_cmovnll_Gd_Ed = { "cmovnl", "cmovnll", Gd, Ed, XX }, -Ia_cmovnlq_Gq_Eq = { "cmovnl", "cmovnlq", Gq, Eq, XX }, -Ia_cmovnlw_Gw_Ew = { "cmovnl", "cmovnlw", Gw, Ew, XX }, -Ia_cmovnol_Gd_Ed = { "cmovno", "cmovnol", Gd, Ed, XX }, -Ia_cmovnoq_Gq_Eq = { "cmovno", "cmovnoq", Gq, Eq, XX }, -Ia_cmovnow_Gw_Ew = { "cmovno", "cmovnow", Gw, Ew, XX }, -Ia_cmovnpl_Gd_Ed = { "cmovnp", "cmovnpl", Gd, Ed, XX }, -Ia_cmovnpq_Gq_Eq = { "cmovnp", "cmovnpq", Gq, Eq, XX }, -Ia_cmovnpw_Gw_Ew = { "cmovnp", "cmovnpw", Gw, Ew, XX }, -Ia_cmovnsl_Gd_Ed = { "cmovns", "cmovnsl", Gd, Ed, XX }, -Ia_cmovnsq_Gq_Eq = { "cmovns", "cmovnsq", Gq, Eq, XX }, -Ia_cmovnsw_Gw_Ew = { "cmovns", "cmovnsw", Gw, Ew, XX }, -Ia_cmovnzl_Gd_Ed = { "cmovnz", "cmovnzl", Gd, Ed, XX }, -Ia_cmovnzq_Gq_Eq = { "cmovnz", "cmovnzq", Gq, Eq, XX }, -Ia_cmovnzw_Gw_Ew = { "cmovnz", "cmovnzw", Gw, Ew, XX }, -Ia_cmovol_Gd_Ed = { "cmovo", "cmovol", Gd, Ed, XX }, -Ia_cmovoq_Gq_Eq = { "cmovo", "cmovoq", Gq, Eq, XX }, -Ia_cmovow_Gw_Ew = { "cmovo", "cmovow", Gw, Ew, XX }, -Ia_cmovpl_Gd_Ed = { "cmovp", "cmovpl", Gd, Ed, XX }, -Ia_cmovpq_Gq_Eq = { "cmovp", "cmovpq", Gq, Eq, XX }, -Ia_cmovpw_Gw_Ew = { "cmovp", "cmovpw", Gw, Ew, XX }, -Ia_cmovsl_Gd_Ed = { "cmovs", "cmovsl", Gd, Ed, XX }, -Ia_cmovsq_Gq_Eq = { "cmovs", "cmovsq", Gq, Eq, XX }, -Ia_cmovsw_Gw_Ew = { "cmovs", "cmovsw", Gw, Ew, XX }, -Ia_cmovzl_Gd_Ed = { "cmovz", "cmovzl", Gd, Ed, XX }, -Ia_cmovzq_Gq_Eq = { "cmovz", "cmovzq", Gq, Eq, XX }, -Ia_cmovzw_Gw_Ew = { "cmovz", "cmovzw", Gw, Ew, XX }, -Ia_cmpb_AL_Ib = { "cmp", "cmpb", AL, Ib, XX }, -Ia_cmpb_Eb_Gb = { "cmp", "cmpb", Eb, Gb, XX }, -Ia_cmpb_Eb_Ib = { "cmp", "cmpb", Eb, Ib, XX }, -Ia_cmpb_Gb_Eb = { "cmp", "cmpb", Gb, Eb, XX }, -Ia_cmpl_EAX_Id = { "cmp", "cmpl", EAX, Id, XX }, -Ia_cmpl_Ed_Gd = { "cmp", "cmpl", Ed, Gd, XX }, -Ia_cmpl_Ed_Id = { "cmp", "cmpl", Ed, Id, XX }, -Ia_cmpl_Ed_sIb = { "cmp", "cmpl", Ed, sIbd, XX }, -Ia_cmpl_Gd_Ed = { "cmp", "cmpl", Gd, Ed, XX }, -Ia_cmppd_Vpd_Wpd_Ib = { "cmppd", "cmppd", Vpd, Wpd, Ib }, -Ia_cmpps_Vps_Wps_Ib = { "cmpps", "cmpps", Vps, Wps, Ib }, -Ia_cmpq_Eq_Gq = { "cmp", "cmpq", Eq, Gq, XX }, -Ia_cmpq_Eq_sIb = { "cmp", "cmpq", Eq, sIbq, XX }, -Ia_cmpq_Eq_sId = { "cmp", "cmpq", Eq, sIdq, XX }, -Ia_cmpq_Gq_Eq = { "cmp", "cmpq", Gq, Eq, XX }, -Ia_cmpq_RAX_sId = { "cmp", "cmpq", RAX, sIdq, XX }, -Ia_cmpsb_Yb_Xb = { "cmpsb", "cmpsb", Yb, Xb, XX }, -Ia_cmpsd_Vsd_Wsd_Ib = { "cmpsd", "cmpsd", Vsd, Wsd, Ib }, -Ia_cmpsl_Yd_Xd = { "cmpsd", "cmpsl", Yd, Xd, XX }, -Ia_cmpsq_Yq_Xq = { "cmpsq", "cmpsq", Yq, Xq, XX }, -Ia_cmpss_Vss_Wss_Ib = { "cmpss", "cmpss", Vss, Wss, Ib }, -Ia_cmpsw_Yw_Xw = { "cmpsw", "cmpsw", Yw, Xw, XX }, -Ia_cmpw_AX_Iw = { "cmp", "cmpw", AX, Iw, XX }, -Ia_cmpw_Ew_Gw = { "cmp", "cmpw", Ew, Gw, XX }, -Ia_cmpw_Ew_Iw = { "cmp", "cmpw", Ew, Iw, XX }, -Ia_cmpw_Ew_sIb = { "cmp", "cmpw", Ew, sIbw, XX }, -Ia_cmpw_Gw_Ew = { "cmp", "cmpw", Gw, Ew, XX }, -Ia_cmpxchg16b = { "cmpxchg16b", "cmpxchg16b", Mdq, XX, XX }, -Ia_cmpxchg8b = { "cmpxchg8b", "cmpxchg8b", Mq, XX, XX }, -Ia_cmpxchgb_Eb_Gb = { "cmpxchg", "cmpxchgb", Eb, Gb, XX }, -Ia_cmpxchgl_Ed_Gd = { "cmpxchg", "cmpxchgl", Ed, Gd, XX }, -Ia_cmpxchgq_Eq_Gq = { "cmpxchg", "cmpxchgq", Eq, Gq, XX }, -Ia_cmpxchgw_Ew_Gw = { "cmpxchg", "cmpxchgw", Ew, Gw, XX }, -Ia_comisd_Vsd_Wsd = { "comisd", "comisd", Vsd, Wsd, XX }, -Ia_comiss_Vss_Wss = { "comiss", "comiss", Vss, Wss, XX }, -Ia_cpuid = { "cpuid", "cpuid", XX, XX, XX }, -Ia_cqo = { "cqo", "cqto", XX, XX, XX }, -Ia_cvtdq2pd_Vpd_Wq = { "cvtdq2pd", "cvtdq2pd", Vpd, Wq, XX }, -Ia_cvtdq2ps_Vps_Wdq = { "cvtdq2ps", "cvtdq2ps", Vps, Wdq, XX }, -Ia_cvtpd2dq_Vq_Wpd = { "cvtpd2dq", "cvtpd2dq", Vq, Wpd, XX }, -Ia_cvtpd2pi_Pq_Wpd = { "cvtpd2pi", "cvtpd2pi", Pq, Wpd, XX }, -Ia_cvtpd2ps_Vps_Wpd = { "cvtpd2ps", "cvtpd2ps", Vps, Wpd, XX }, -Ia_cvtpi2pd_Vpd_Qq = { "cvtpi2pd", "cvtpi2pd", Vpd, Qq, XX }, -Ia_cvtpi2ps_Vps_Qq = { "cvtpi2ps", "cvtpi2ps", Vps, Qq, XX }, -Ia_cvtps2dq_Vdq_Wps = { "cvtps2dq", "cvtps2dq", Vdq, Wps, XX }, -Ia_cvtps2pd_Vpd_Wps = { "cvtps2pd", "cvtps2pd", Vpd, Wps, XX }, -Ia_cvtps2pi_Pq_Wps = { "cvtps2pi", "cvtps2pi", Pq, Wps, XX }, -Ia_cvtsd2si_Gd_Wsd = { "cvtsd2si", "cvtsd2si", Gd, Wsd, XX }, -Ia_cvtsd2si_Gq_Wsd = { "cvtsd2si", "cvtsd2si", Gq, Wsd, XX }, -Ia_cvtsd2ss_Vss_Wsd = { "cvtsd2ss", "cvtsd2ss", Vss, Wsd, XX }, -Ia_cvtsi2sd_Vsd_Ed = { "cvtsi2sd", "cvtsi2sd", Vsd, Ed, XX }, -Ia_cvtsi2sd_Vsd_Eq = { "cvtsi2sd", "cvtsi2sd", Vsd, Eq, XX }, -Ia_cvtsi2ss_Vss_Ed = { "cvtsi2ss", "cvtsi2ss", Vss, Ed, XX }, -Ia_cvtsi2ss_Vss_Eq = { "cvtsi2ss", "cvtsi2ss", Vss, Eq, XX }, -Ia_cvtss2sd_Vsd_Wss = { "cvtss2sd", "cvtss2sd", Vsd, Wss, XX }, -Ia_cvtss2si_Gd_Wss = { "cvtss2si", "cvtss2si", Gd, Wss, XX }, -Ia_cvtss2si_Gq_Wss = { "cvtss2si", "cvtss2si", Gq, Wss, XX }, -Ia_cvttpd2dq_Vq_Wpd = { "cvttpd2dq", "cvttpd2dq", Vq, Wpd, XX }, -Ia_cvttpd2pi_Pq_Wpd = { "cvttpd2pi", "cvttpd2pi", Pq, Wpd, XX }, -Ia_cvttps2dq_Vdq_Wps = { "cvttps2dq", "cvttps2dq", Vdq, Wps, XX }, -Ia_cvttps2pi_Pq_Wps = { "cvttps2pi", "cvttps2pi", Pq, Wps, XX }, -Ia_cvttsd2si_Gd_Wsd = { "cvttsd2si", "cvttsd2si", Gd, Wsd, XX }, -Ia_cvttsd2si_Gq_Wsd = { "cvttsd2si", "cvttsd2si", Gq, Wsd, XX }, -Ia_cvttss2si_Gd_Wss = { "cvttss2si", "cvttss2si", Gd, Wss, XX }, -Ia_cvttss2si_Gq_Wss = { "cvttss2si", "cvttss2si", Gq, Wss, XX }, -Ia_cwd = { "cwd", "cwtd", XX, XX, XX }, -Ia_cwde = { "cwde", "cwtl", XX, XX, XX }, -Ia_daa = { "daa", "daa", XX, XX, XX }, -Ia_das = { "das", "das", XX, XX, XX }, -Ia_decb_Eb = { "dec", "decb", Eb, XX, XX }, -Ia_decl_Ed = { "dec", "decl", Ed, XX, XX }, -Ia_decl_ERX = { "dec", "decl", ERX, XX, XX }, -Ia_decq_Eq = { "dec", "decq", Eq, XX, XX }, -Ia_decw_Ew = { "dec", "decw", Ew, XX, XX }, -Ia_decw_RX = { "dec", "decw", RX, XX, XX }, -Ia_divb_AL_Eb = { "div", "divb", AL, Eb, XX }, -Ia_divl_EAX_Ed = { "div", "divl", EAX, Ed, XX }, -Ia_divpd_Vpd_Wpd = { "divpd", "divpd", Vpd, Wpd, XX }, -Ia_divps_Vps_Wps = { "divps", "divps", Vps, Wps, XX }, -Ia_divq_RAX_Eq = { "div", "divq", RAX, Eq, XX }, -Ia_divsd_Vsd_Wsd = { "divsd", "divsd", Vsd, Wsd, XX }, -Ia_divss_Vss_Wss = { "divss", "divss", Vss, Wss, XX }, -Ia_divw_AX_Ew = { "div", "divw", AX, Ew, XX }, -Ia_emms = { "emms", "emms", XX, XX, XX }, -Ia_enter = { "enter", "enter", IwIb, XX, XX }, -Ia_error = { "(error)", "(error)", XX, XX, XX }, -Ia_f2xm1 = { "f2xm1", "f2xm1", XX, XX, XX }, -Ia_fabs = { "fabs", "fabs", XX, XX, XX }, -Ia_fadd_ST0_STi = { "fadd", "fadd", ST0, STi, XX }, -Ia_fadd_STi_ST0 = { "fadd", "fadd", STi, ST0, XX }, -Ia_faddl_Mq = { "fadd", "faddl", Mq, XX, XX }, -Ia_faddp_STi_ST0 = { "faddp", "faddp", STi, ST0, XX }, -Ia_fadds_Md = { "fadd", "fadds", Md, XX, XX }, -Ia_fbldt_Mt = { "fbld", "fbldt", Mt, XX, XX }, -Ia_fbstpt_Mt = { "fbstp", "fbstpt", Mt, XX, XX }, -Ia_fchs = { "fchs", "fchs", XX, XX, XX }, -Ia_fcmovb_ST0_STi = { "fcmovb", "fcmovb", ST0, STi, XX }, -Ia_fcmovbe_ST0_STi = { "fcmovbe", "fcmovbe", ST0, STi, XX }, -Ia_fcmove_ST0_STi = { "fcmove", "fcmove", ST0, STi, XX }, -Ia_fcmovnb_ST0_STi = { "fcmovnb", "fcmovnb", ST0, STi, XX }, -Ia_fcmovnbe_ST0_STi = { "fcmovnbe", "fcmovnbe", ST0, STi, XX }, -Ia_fcmovne_ST0_STi = { "fcmovne", "fcmovne", ST0, STi, XX }, -Ia_fcmovnu_ST0_STi = { "fcmovnu", "fcmovnu", ST0, STi, XX }, -Ia_fcmovu_ST0_STi = { "fcmovu", "fcmovu", ST0, STi, XX }, -Ia_fcom_STi = { "fcom", "fcom", STi, XX, XX }, -Ia_fcomi_ST0_STi = { "fcomi", "fcomi", ST0, STi, XX }, -Ia_fcomip_ST0_STi = { "fcomip", "fcomip", ST0, STi, XX }, -Ia_fcoml_Mq = { "fcom", "fcoml", Mq, XX, XX }, -Ia_fcomp_STi = { "fcomp", "fcomp", STi, XX, XX }, -Ia_fcompl_Mq = { "fcomp", "fcompl", Mq, XX, XX }, -Ia_fcompp = { "fcompp", "fcompp", XX, XX, XX }, -Ia_fcomps_Md = { "fcomp", "fcomps", Md, XX, XX }, -Ia_fcoms_Md = { "fcom", "fcoms", Md, XX, XX }, -Ia_fcos = { "fcos", "fcos", XX, XX, XX }, -Ia_fdecstp = { "fdecstp", "fdecstp", XX, XX, XX }, -Ia_fdisi = { "fdisi (287 legacy)", "fdisi (287 legacy)", XX, XX, XX }, -Ia_fdiv_ST0_STi = { "fdiv", "fdiv", ST0, STi, XX }, -Ia_fdiv_STi_ST0 = { "fdiv", "fdiv", STi, ST0, XX }, -Ia_fdivl_Mq = { "fdiv", "fdivl", Mq, XX, XX }, -Ia_fdivp_STi_ST0 = { "fdivp", "fdivp", STi, ST0, XX }, -Ia_fdivr_ST0_STi = { "fdivr", "fdivr", ST0, STi, XX }, -Ia_fdivr_STi_ST0 = { "fdivr", "fdivr", STi, ST0, XX }, -Ia_fdivrl_Mq = { "fdivr", "fdivrl", Mq, XX, XX }, -Ia_fdivrp_STi_ST0 = { "fdivrp", "fdivrp", STi, ST0, XX }, -Ia_fdivrs_Md = { "fdivr", "fdivrs", Md, XX, XX }, -Ia_fdivs_Md = { "fdiv", "fdivs", Md, XX, XX }, -Ia_femms = { "femms", "femms", XX, XX, XX }, -Ia_feni = { "feni (287 legacy)", "feni(287 legacy)", XX, XX, XX }, -Ia_ffree_STi = { "ffree", "ffree", STi, XX, XX }, -Ia_ffreep_STi = { "ffreep", "ffreep", STi, XX, XX }, -Ia_fiaddl_Md = { "fiadd", "fiaddl", Md, XX, XX }, -Ia_fiadds_Mw = { "fiadd", "fiadds", Mw, XX, XX }, -Ia_ficoml_Md = { "ficom", "ficoml", Md, XX, XX }, -Ia_ficompl_Md = { "ficomp", "ficompl", Md, XX, XX }, -Ia_ficomps_Mw = { "ficomp", "ficomps", Mw, XX, XX }, -Ia_ficoms_Mw = { "ficom", "ficoms", Mw, XX, XX }, -Ia_fidivl_Md = { "fidiv", "fidivl", Md, XX, XX }, -Ia_fidivrl_Md = { "fidivr", "fidivrl", Md, XX, XX }, -Ia_fidivrs_Mw = { "fidivr", "fidivrs", Mw, XX, XX }, -Ia_fidivs_Mw = { "fidiv", "fidivs", Mw, XX, XX }, -Ia_fildl_Md = { "fild", "fildl", Md, XX, XX }, -Ia_fildq_Mq = { "fild", "fildq", Mq, XX, XX }, -Ia_filds_Mw = { "fild", "filds", Mw, XX, XX }, -Ia_fimull_Md = { "fimul", "fimull", Md, XX, XX }, -Ia_fimuls_Mw = { "fimul", "fimuls", Mw, XX, XX }, -Ia_fincstp = { "fincstp", "fincstp", XX, XX, XX }, -Ia_fistl_Md = { "fist", "fistl", Md, XX, XX }, -Ia_fistpl_Md = { "fistp", "fistpl", Md, XX, XX }, -Ia_fistpq_Mq = { "fistp", "fistpq", Mq, XX, XX }, -Ia_fistps_Mw = { "fistp", "fistps", Mw, XX, XX }, -Ia_fists_Mw = { "fist", "fists", Mw, XX, XX }, -Ia_fisttpl_Md = { "fisttp", "fisttpl", Md, XX, XX }, -Ia_fisttpq_Mq = { "fisttp", "fisttpq", Mq, XX, XX }, -Ia_fisttps_Mw = { "fisttp", "fisttps", Mw, XX, XX }, -Ia_fisubl_Md = { "fisub", "fisubl", Md, XX, XX }, -Ia_fisubrl_Md = { "fisubr", "fisubrl", Md, XX, XX }, -Ia_fisubrs_Mw = { "fisubr", "fisubrs", Mw, XX, XX }, -Ia_fisubs_Mw = { "fisub", "fisubs", Mw, XX, XX }, -Ia_fld_STi = { "fld", "fld", STi, XX, XX }, -Ia_fld1 = { "fld1", "fld1", XX, XX, XX }, -Ia_fldcw = { "fldcw", "fldcw", Ew, XX, XX }, -Ia_fldenv = { "fldenv", "fldenv", Mx, XX, XX }, -Ia_fldl_Mq = { "fld", "fldl", Mq, XX, XX }, -Ia_fldl2e = { "fldl2e", "fldl2e", XX, XX, XX }, -Ia_fldl2t = { "fldl2t", "fldl2t", XX, XX, XX }, -Ia_fldlg2 = { "fldlg2", "fldlg2", XX, XX, XX }, -Ia_fldln2 = { "fldln2", "fldln2", XX, XX, XX }, -Ia_fldpi = { "fldpi", "fldpi", XX, XX, XX }, -Ia_flds_Md = { "fld", "flds", Md, XX, XX }, -Ia_fldt_Mt = { "fld", "fldt", Mt, XX, XX }, -Ia_fldz = { "fldz", "fldz", XX, XX, XX }, -Ia_fmul_ST0_STi = { "fmul", "fmul", ST0, STi, XX }, -Ia_fmul_STi_ST0 = { "fmul", "fmul", STi, ST0, XX }, -Ia_fmull_Mq = { "fmul", "fmull", Mq, XX, XX }, -Ia_fmulp_STi_ST0 = { "fmulp", "fmulp", STi, ST0, XX }, -Ia_fmuls_Md = { "fmul", "fmuls", Md, XX, XX }, -Ia_fnclex = { "fnclex", "fnclex", XX, XX, XX }, -Ia_fninit = { "fninit", "fninit", XX, XX, XX }, -Ia_fnop = { "fnop", "fnop", XX, XX, XX }, -Ia_fnsave = { "fnsave", "fnsave", Mx, XX, XX }, -Ia_fnstcw = { "fnstcw", "fnstcw", Mw, XX, XX }, -Ia_fnstenv = { "fnstenv", "fnstenv", Mx, XX, XX }, -Ia_fnstsw = { "fnstsw", "fnstsw", Mw, XX, XX }, -Ia_fnstsw_AX = { "fnstsw", "fnstsw", AX, XX, XX }, -Ia_fpatan = { "fpatan", "fpatan", XX, XX, XX }, -Ia_fprem = { "fprem", "fprem", XX, XX, XX }, -Ia_fprem1 = { "fprem1", "fprem1", XX, XX, XX }, -Ia_fptan = { "fptan", "fptan", XX, XX, XX }, -Ia_frndint = { "frndint", "frndint", XX, XX, XX }, -Ia_frstor = { "frstor", "frstor", Mx, XX, XX }, -Ia_fscale = { "fscale", "fscale", XX, XX, XX }, -Ia_fsetpm = { "fsetpm (287 legacy)", "fsetpm (287 legacy)", XX, XX, XX }, -Ia_fsin = { "fsin", "fsin", XX, XX, XX }, -Ia_fsincos = { "fsincos", "fsincos", XX, XX, XX }, -Ia_fsqrt = { "fsqrt", "fsqrt", XX, XX, XX }, -Ia_fst_STi = { "fst", "fst", STi, XX, XX }, -Ia_fstl_Mq = { "fst", "fstl", Mq, XX, XX }, -Ia_fstp_STi = { "fstp", "fstp", STi, XX, XX }, -Ia_fstpl_Mq = { "fstp", "fstpl", Mq, XX, XX }, -Ia_fstps_Md = { "fstp", "fstps", Md, XX, XX }, -Ia_fstpt_Mt = { "fstp", "fstpt", Mt, XX, XX }, -Ia_fsts_Md = { "fst", "fsts", Md, XX, XX }, -Ia_fsub_ST0_STi = { "fsub", "fsub", ST0, STi, XX }, -Ia_fsub_STi_ST0 = { "fsub", "fsub", STi, ST0, XX }, -Ia_fsubl_Mq = { "fsub", "fsubl", Mq, XX, XX }, -Ia_fsubp_STi_ST0 = { "fsubp", "fsubp", STi, ST0, XX }, -Ia_fsubr_ST0_STi = { "fsubr", "fsubr", ST0, STi, XX }, -Ia_fsubr_STi_ST0 = { "fsubr", "fsubr", STi, ST0, XX }, -Ia_fsubrl_Mq = { "fsubr", "fsubrl", Mq, XX, XX }, -Ia_fsubrp_STi_ST0 = { "fsubrp", "fsubrp", STi, ST0, XX }, -Ia_fsubrs_Md = { "fsubr", "fsubrs", Md, XX, XX }, -Ia_fsubs_Md = { "fsub", "fsubs", Md, XX, XX }, -Ia_ftst = { "ftst", "ftst", XX, XX, XX }, -Ia_fucom_STi = { "fucom", "fucom", STi, XX, XX }, -Ia_fucomi_ST0_STi = { "fucomi", "fucomi", ST0, STi, XX }, -Ia_fucomip_ST0_STi = { "fucomip", "fucomip", ST0, STi, XX }, -Ia_fucomp_STi = { "fucomp", "fucomp", STi, XX, XX }, -Ia_fucompp = { "fucompp", "fucompp", XX, XX, XX }, -Ia_fwait = { "fwait", "fwait", XX, XX, XX }, -Ia_fxam = { "fxam", "fxam", XX, XX, XX }, -Ia_fxch = { "fxch", "fxch", STi, XX, XX }, -Ia_fxrstor = { "fxrstor", "fxrstor", Mx, XX, XX }, -Ia_fxsave = { "fxsave", "fxsave", Mx, XX, XX }, -Ia_fxtract = { "fxtract", "fxtract", XX, XX, XX }, -Ia_fyl2x = { "fyl2x", "fyl2x", XX, XX, XX }, -Ia_fyl2xp1 = { "fyl2xp1", "fyl2xp1", XX, XX, XX }, -Ia_haddpd_Vpd_Wpd = { "haddpd", "haddpd", Vpd, Wpd, XX }, -Ia_haddps_Vps_Wps = { "haddps", "haddps", Vps, Wps, XX }, -Ia_hlt = { "hlt", "hlt", XX, XX, XX }, -Ia_hsubpd_Vpd_Wpd = { "hsubpd", "hsubpd", Vpd, Wpd, XX }, -Ia_hsubps_Vps_Wps = { "hsubps", "hsubps", Vps, Wps, XX }, -Ia_idivb_AL_Eb = { "idiv", "idivb", AL, Eb, XX }, -Ia_idivl_EAX_Ed = { "idiv", "idivl", EAX, Ed, XX }, -Ia_idivq_RAX_Eq = { "idiv", "idivq", RAX, Eq, XX }, -Ia_idivw_AX_Ew = { "idiv", "idivw", AX, Ew, XX }, -Ia_imulb_AL_Eb = { "imul", "imulb", AL, Eb, XX }, -Ia_imull_EAX_Ed = { "imul", "imull", EAX, Ed, XX }, -Ia_imull_Gd_Ed = { "imul", "imull", Gd, Ed, XX }, -Ia_imull_Gd_Ed_Id = { "imul", "imull", Gd, Ed, Id }, -Ia_imull_Gd_Ed_sIb = { "imul", "imull", Gd, Ed, sIbd }, -Ia_imulq_Gq_Eq = { "imul", "imulq", Gq, Eq, XX }, -Ia_imulq_Gq_Eq_sIb = { "imul", "imulq", Gq, Eq, sIbq }, -Ia_imulq_Gq_Eq_sId = { "imul", "imulq", Gq, Eq, sIdq }, -Ia_imulq_RAX_Eq = { "imul", "imulq", RAX, Eq, XX }, -Ia_imulw_AX_Ew = { "imul", "imulw", AX, Ew, XX }, -Ia_imulw_Gw_Ew = { "imul", "imulw", Gw, Ew, XX }, -Ia_imulw_Gw_Ew_Iw = { "imul", "imulw", Gw, Ew, Iw }, -Ia_imulw_Gw_Ew_sIb = { "imul", "imulw", Gw, Ew, sIbw }, -Ia_inb_AL_DX = { "in", "inb", AL, DX, XX }, -Ia_inb_AL_Ib = { "in", "inb", AL, Ib, XX }, -Ia_incb_Eb = { "inc", "incb", Eb, XX, XX }, -Ia_incl_Ed = { "inc", "incl", Ed, XX, XX }, -Ia_incl_ERX = { "inc", "incl", ERX, XX, XX }, -Ia_incq_Eq = { "inc", "incq", Eq, XX, XX }, -Ia_incw_Ew = { "inc", "incw", Ew, XX, XX }, -Ia_incw_RX = { "inc", "incw", RX, XX, XX }, -Ia_inl_EAX_DX = { "in", "inl", EAX, DX, XX }, -Ia_inl_EAX_Ib = { "in", "inl", EAX, Ib, XX }, -Ia_insb_Yb_DX = { "insb", "insb", Yb, DX, XX }, -Ia_insl_Yd_DX = { "insd", "insl", Yd, DX, XX }, -Ia_insw_Yw_DX = { "insw", "insw", Yw, DX, XX }, -Ia_int_Ib = { "int", "int", Ib, XX, XX }, -Ia_int1 = { "int1", "int1", XX, XX, XX }, -Ia_int3 = { "int3", "int3", XX, XX, XX }, -Ia_into = { "into", "into", XX, XX, XX }, -Ia_Invalid = { "(invalid)", "(invalid)", XX, XX, XX }, -Ia_invd = { "invd", "invd", XX, XX, XX }, -Ia_invlpg = { "invlpg", "invlpg", Mx, XX, XX }, -Ia_inw_AX_DX = { "in", "inw", AX, DX, XX }, -Ia_inw_AX_Ib = { "in", "inw", AX, Ib, XX }, -Ia_iretl = { "iretd", "iretd", XX, XX, XX }, -Ia_iretq = { "iretq", "iretq", XX, XX, XX }, -Ia_iretw = { "iret", "iretw", XX, XX, XX }, -Ia_jb_Jb = { "jb", "jb", Jb, XX, XX }, -Ia_jb_Jd = { "jb", "jb", Jd, XX, XX }, -Ia_jb_Jw = { "jb", "jb", Jw, XX, XX }, -Ia_jbe_Jb = { "jbe", "jbe", Jb, XX, XX }, -Ia_jbe_Jd = { "jbe", "jbe", Jd, XX, XX }, -Ia_jbe_Jw = { "jbe", "jbe", Jw, XX, XX }, -Ia_jcxz_Jb = { "jcxz", "jcxz", Jb, XX, XX }, -Ia_jecxz_Jb = { "jecxz", "jecxz", Jb, XX, XX }, -Ia_jl_Jb = { "jl", "jl", Jb, XX, XX }, -Ia_jl_Jd = { "jl", "jl", Jd, XX, XX }, -Ia_jl_Jw = { "jl", "jl", Jw, XX, XX }, -Ia_jle_Jb = { "jle", "jle", Jb, XX, XX }, -Ia_jle_Jd = { "jle", "jle", Jd, XX, XX }, -Ia_jle_Jw = { "jle", "jle", Jw, XX, XX }, -Ia_jmp_Ed = { "jmp", "jmp", Ed, XX, XX }, -Ia_jmp_Eq = { "jmp", "jmp", Eq, XX, XX }, -Ia_jmp_Ew = { "jmp", "jmp", Ew, XX, XX }, -Ia_jmp_Jb = { "jmp", "jmp", Jb, XX, XX }, -Ia_jmp_Jd = { "jmp", "jmp", Jd, XX, XX }, -Ia_jmp_Jw = { "jmp", "jmp", Jw, XX, XX }, -Ia_jnb_Jb = { "jnb", "jnb", Jb, XX, XX }, -Ia_jnb_Jd = { "jnb", "jnb", Jd, XX, XX }, -Ia_jnb_Jw = { "jnb", "jnb", Jw, XX, XX }, -Ia_jnbe_Jb = { "jnbe", "jnbe", Jb, XX, XX }, -Ia_jnbe_Jd = { "jnbe", "jnbe", Jd, XX, XX }, -Ia_jnbe_Jw = { "jnbe", "jnbe", Jw, XX, XX }, -Ia_jnl_Jb = { "jnl", "jnl", Jb, XX, XX }, -Ia_jnl_Jd = { "jnl", "jnl", Jd, XX, XX }, -Ia_jnl_Jw = { "jnl", "jnl", Jw, XX, XX }, -Ia_jnle_Jb = { "jnle", "jnle", Jb, XX, XX }, -Ia_jnle_Jd = { "jnle", "jnle", Jd, XX, XX }, -Ia_jnle_Jw = { "jnle", "jnle", Jw, XX, XX }, -Ia_jno_Jb = { "jno", "jno", Jb, XX, XX }, -Ia_jno_Jd = { "jno", "jno", Jd, XX, XX }, -Ia_jno_Jw = { "jno", "jno", Jw, XX, XX }, -Ia_jnp_Jb = { "jnp", "jnp", Jb, XX, XX }, -Ia_jnp_Jd = { "jnp", "jnp", Jd, XX, XX }, -Ia_jnp_Jw = { "jnp", "jnp", Jw, XX, XX }, -Ia_jns_Jb = { "jns", "jns", Jb, XX, XX }, -Ia_jns_Jd = { "jns", "jns", Jd, XX, XX }, -Ia_jns_Jw = { "jns", "jns", Jw, XX, XX }, -Ia_jnz_Jb = { "jnz", "jnz", Jb, XX, XX }, -Ia_jnz_Jd = { "jnz", "jnz", Jd, XX, XX }, -Ia_jnz_Jw = { "jnz", "jnz", Jw, XX, XX }, -Ia_jo_Jb = { "jo", "jo", Jb, XX, XX }, -Ia_jo_Jd = { "jo", "jo", Jd, XX, XX }, -Ia_jo_Jw = { "jo", "jo", Jw, XX, XX }, -Ia_jp_Jb = { "jp", "jp", Jb, XX, XX }, -Ia_jp_Jd = { "jp", "jp", Jd, XX, XX }, -Ia_jp_Jw = { "jp", "jp", Jw, XX, XX }, -Ia_jrcxz_Jb = { "jrcxz", "jrcxz", Jb, XX, XX }, -Ia_js_Jb = { "js", "js", Jb, XX, XX }, -Ia_js_Jd = { "js", "js", Jd, XX, XX }, -Ia_js_Jw = { "js", "js", Jw, XX, XX }, -Ia_jz_Jb = { "jz", "jz", Jb, XX, XX }, -Ia_jz_Jd = { "jz", "jz", Jd, XX, XX }, -Ia_jz_Jw = { "jz", "jz", Jw, XX, XX }, -Ia_lahf = { "lahf", "lahf", XX, XX, XX }, -Ia_larl_Gd_Ew = { "lar", "larl", Gd, Ew, XX }, -Ia_larq_Gq_Ew = { "lar", "larq", Gq, Ew, XX }, -Ia_larw_Gw_Ew = { "lar", "larw", Gw, Ew, XX }, -Ia_lcall_Apd = { "call far", "lcall", Apd, XX, XX }, -Ia_lcall_Apw = { "call far", "lcall", Apw, XX, XX }, -Ia_lcall_Mp = { "call far", "lcall", Mp, XX, XX }, -Ia_lddqu_Vdq_Mdq = { "lddqu", "lddqu", Vdq, Mdq, XX }, -Ia_ldmxcsr = { "ldmxcsr", "ldmxcsr", Md, XX, XX }, -Ia_ldsl_Gd_Mp = { "lds", "ldsl", Gd, Mp, XX }, -Ia_ldsw_Gw_Mp = { "lds", "ldsw", Gw, Mp, XX }, -Ia_leal_Gd_Md = { "lea", "leal", Gd, Md, XX }, -Ia_leaq_Gq_Mq = { "lea", "leaq", Gq, Mq, XX }, -Ia_leave = { "leave", "leave", XX, XX, XX }, -Ia_leaw_Gw_Mw = { "lea", "leaw", Gw, Mw, XX }, -Ia_lesl_Gd_Mp = { "les", "lesl", Gd, Mp, XX }, -Ia_lesw_Gw_Mp = { "les", "lesw", Gw, Mp, XX }, -Ia_lfence = { "lfence", "lfence", XX, XX, XX }, -Ia_lfsl_Gd_Mp = { "lfs", "lfsl", Gd, Mp, XX }, -Ia_lfsq_Gq_Mp = { "lfs", "lfsq", Gq, Mp, XX }, -Ia_lfsw_Gw_Mp = { "lfs", "lfsw", Gw, Mp, XX }, -Ia_lgdt = { "lgdt", "lgdt", Ms, XX, XX }, -Ia_lgsl_Gd_Mp = { "lgs", "lgsl", Gd, Mp, XX }, -Ia_lgsq_Gq_Mp = { "lgs", "lgsq", Gq, Mp, XX }, -Ia_lgsw_Gw_Mp = { "lgs", "lgsw", Gw, Mp, XX }, -Ia_lidt = { "lidt", "lidt", Ms, XX, XX }, -Ia_ljmp_Apd = { "jmp far", "ljmp", Apd, XX, XX }, -Ia_ljmp_Apw = { "jmp far", "ljmp", Apw, XX, XX }, -Ia_ljmp_Mp = { "jmp far", "ljmp", Mp, XX, XX }, -Ia_lldt = { "lldt", "lldt", Ew, XX, XX }, -Ia_lmsw_Ew = { "lmsw", "lmsw", Ew, XX, XX }, -Ia_lodsb_AL_Xb = { "lodsb", "lodsb", AL, Xb, XX }, -Ia_lodsl_EAX_Xd = { "lodsd", "lodsl", EAX, Xd, XX }, -Ia_lodsq_RAX_Xq = { "lodsq", "lodsq", RAX, Xq, XX }, -Ia_lodsw_AX_Xw = { "lodsw", "lodsw", AX, Xw, XX }, -Ia_loop_Jb = { "loop", "loop", Jb, XX, XX }, -Ia_loope_Jb = { "loope", "loope", Jb, XX, XX }, -Ia_loopne_Jb = { "loopne", "loopne", Jb, XX, XX }, -Ia_lret = { "retf", "lret", XX, XX, XX }, -Ia_lret_Iw = { "retf", "lret", Iw, XX, XX }, -Ia_lsll_Gd_Ew = { "lsl", "lsll", Gd, Ew, XX }, -Ia_lslq_Gq_Ew = { "lsl", "lslq", Gq, Ew, XX }, -Ia_lslw_Gw_Ew = { "lsl", "lslw", Gw, Ew, XX }, -Ia_lssl_Gd_Mp = { "lss", "lssl", Gd, Mp, XX }, -Ia_lssq_Gq_Mp = { "lss", "lssq", Gq, Mp, XX }, -Ia_lssw_Gw_Mp = { "lss", "lssw", Gw, Mp, XX }, -Ia_ltr = { "ltr", "ltr", Ew, XX, XX }, -Ia_maskmovdqu_Vdq_Udq = { "maskmovdqu", "maskmovdqu", Vdq, Udq, XX }, -Ia_maskmovq_Pq_Nq = { "maskmovq", "maskmovq", Pq, Nq, XX }, -Ia_maxpd_Vpd_Wpd = { "maxpd", "maxpd", Vpd, Wpd, XX }, -Ia_maxps_Vps_Wps = { "maxps", "maxps", Vps, Wps, XX }, -Ia_maxsd_Vsd_Wsd = { "maxsd", "maxsd", Vsd, Wsd, XX }, -Ia_maxss_Vss_Wss = { "maxss", "maxss", Vss, Wss, XX }, -Ia_mfence = { "mfence", "mfence", XX, XX, XX }, -Ia_minpd_Vpd_Wpd = { "minpd", "minpd", Vpd, Wpd, XX }, -Ia_minps_Vps_Wps = { "minps", "minps", Vps, Wps, XX }, -Ia_minsd_Vsd_Wsd = { "minsd", "minsd", Vsd, Wsd, XX }, -Ia_minss_Vss_Wss = { "minss", "minss", Vss, Wss, XX }, -Ia_monitor = { "monitor", "monitor", XX, XX, XX }, -Ia_movapd_Vpd_Wpd = { "movapd", "movapd", Vpd, Wpd, XX }, -Ia_movapd_Wpd_Vpd = { "movapd", "movapd", Wpd, Vpd, XX }, -Ia_movaps_Vps_Wps = { "movaps", "movaps", Vps, Wps, XX }, -Ia_movaps_Wps_Vps = { "movaps", "movaps", Wps, Vps, XX }, -Ia_movb_AL_Ob = { "mov", "movb", AL, Ob, XX }, -Ia_movb_Eb_Gb = { "mov", "movb", Eb, Gb, XX }, -Ia_movb_Eb_Ib = { "mov", "movb", Eb, Ib, XX }, -Ia_movb_Gb_Eb = { "mov", "movb", Gb, Eb, XX }, -Ia_movb_Ob_AL = { "mov", "movb", Ob, AL, XX }, -Ia_movb_R8_Ib = { "mov", "movb", R8, Ib, XX }, -Ia_movd_Ed_Pq = { "movd", "movd", Ed, Pq, XX }, -Ia_movd_Ed_Vd = { "movd", "movd", Ed, Vdq, XX }, -Ia_movd_Pq_Ed = { "movd", "movd", Pq, Ed, XX }, -Ia_movd_Vdq_Ed = { "movd", "movd", Vdq, Ed, XX }, -Ia_movddup_Vdq_Wq = { "movddup", "movddup", Vdq, Wq, XX }, -Ia_movdq2q_Pq_Vq = { "movdq2q", "movdq2q", Pq, Vq, XX }, -Ia_movdqa_Vdq_Wdq = { "movdqa", "movdqa", Vdq, Wdq, XX }, -Ia_movdqa_Wdq_Vdq = { "movdqa", "movdqa", Wdq, Vdq, XX }, -Ia_movdqu_Vdq_Wdq = { "movdqu", "movdqu", Vdq, Wdq, XX }, -Ia_movdqu_Wdq_Vdq = { "movdqu", "movdqu", Wdq, Vdq, XX }, -Ia_movhlpd_Vpd_Uq = { "movhlpd", "movhlpd", Vpd, Udq, XX }, -Ia_movhlps_Vps_Uq = { "movhlps", "movhlps", Vps, Udq, XX }, -Ia_movhpd_Mq_Vpd = { "movhpd", "movhpd", Mq, Vpd, XX }, -Ia_movhpd_Vpd_Mq = { "movhpd", "movhpd", Vpd, Mq, XX }, -Ia_movhps_Mq_Vps = { "movhps", "movhps", Mq, Vps, XX }, -Ia_movhps_Vps_Mq = { "movhps", "movhps", Vps, Mq, XX }, -Ia_movl_Cd_Rd = { "mov", "movl", Cd, Rd, XX }, -Ia_movl_Dd_Rd = { "mov", "movl", Dd, Rd, XX }, -Ia_movl_EAX_Od = { "mov", "movl", EAX, Od, XX }, -Ia_movl_Ed_Gd = { "mov", "movl", Ed, Gd, XX }, -Ia_movl_Ed_Id = { "mov", "movl", Ed, Id, XX }, -Ia_movl_ERX_Id = { "mov", "movl", ERX, Id, XX }, -Ia_movl_Gd_Ed = { "mov", "movl", Gd, Ed, XX }, -Ia_movl_Od_EAX = { "mov", "movl", Od, EAX, XX }, -Ia_movl_Rd_Cd = { "mov", "movl", Rd, Cd, XX }, -Ia_movl_Rd_Dd = { "mov", "movl", Rd, Dd, XX }, -Ia_movl_Rd_Td = { "mov", "movl", Rd, Td, XX }, -Ia_movl_Td_Rd = { "mov", "movl", Td, Rd, XX }, -Ia_movlhpd_Vpd_Uq = { "movlhpd", "movlhpd", Vpd, Udq, XX }, -Ia_movlhps_Vps_Uq = { "movlhps", "movlhps", Vps, Udq, XX }, -Ia_movlpd_Mq_Vpd = { "movlpd", "movlpd", Mq, Vpd, XX }, -Ia_movlpd_Vpd_Mq = { "movlpd", "movlpd", Vpd, Mq, XX }, -Ia_movlps_Mq_Vps = { "movlps", "movlps", Mq, Vps, XX }, -Ia_movlps_Vps_Mq = { "movlps", "movlps", Vps, Mq, XX }, -Ia_movmskpd_Gd_Vpd = { "movmskpd", "movmskpd", Gd, Vpd, XX }, -Ia_movmskps_Gd_Vps = { "movmskps", "movmskps", Gd, Vps, XX }, -Ia_movntdq_Mdq_Vdq = { "movntdq", "movntdq", Mdq, Vdq, XX }, -Ia_movnti_Md_Gd = { "movnti", "movnti", Md, Gd, XX }, -Ia_movntiq_Mq_Gq = { "movntiq", "movntiq", Mq, Gq, XX }, -Ia_movntpd_Mpd_Vpd = { "movntpd", "movntpd", Mpd, Vpd, XX }, -Ia_movntps_Mps_Vps = { "movntps", "movntps", Mps, Vps, XX }, -Ia_movntq_Mq_Pq = { "movntq", "movntq", Mq, Pq, XX }, -Ia_movq_Cq_Rq = { "mov", "movq", Cq, Rq, XX }, -Ia_movq_Dq_Rq = { "mov", "movq", Dq, Rq, XX }, -Ia_movq_Eq_Gq = { "mov", "movq", Eq, Gq, XX }, -Ia_movq_Eq_Pq = { "movq", "movq", Eq, Pq, XX }, -Ia_movq_Eq_sId = { "mov", "movq", Eq, sIdq, XX }, -Ia_movq_Eq_Vq = { "movq", "movq", Eq, Vq, XX }, -Ia_movq_Gq_Eq = { "mov", "movq", Gq, Eq, XX }, -Ia_movq_Oq_RAX = { "mov", "movq", Oq, RAX, XX }, -Ia_movq_Pq_Eq = { "movq", "movq", Pq, Eq, XX }, -Ia_movq_Pq_Qq = { "movq", "movq", Pq, Qq, XX }, -Ia_movq_Qq_Pq = { "movq", "movq", Qq, Pq, XX }, -Ia_movq_RAX_Oq = { "mov", "movq", RAX, Oq, XX }, -Ia_movq_Rq_Cq = { "mov", "movq", Rq, Cq, XX }, -Ia_movq_Rq_Dq = { "mov", "movq", Rq, Dq, XX }, -Ia_movq_RRX_Iq = { "mov", "movq", RRX, Iq, XX }, -Ia_movq_Vdq_Eq = { "movq", "movq", Vdq, Eq, XX }, -Ia_movq_Vq_Wq = { "movq", "movq", Vq, Wq, XX }, -Ia_movq_Wq_Vq = { "movq", "movq", Wq, Vq, XX }, -Ia_movq2dq_Vdq_Qq = { "movq2dq", "movq2dq", Vdq, Qq, XX }, -Ia_movsb_Yb_Xb = { "movsb", "movsb", Yb, Xb, XX }, -Ia_movsbl_Gd_Eb = { "movsx", "movsbl", Gd, Eb, XX }, -Ia_movsbq_Gq_Eb = { "movsx", "movsbq", Gq, Eb, XX }, -Ia_movsbw_Gw_Eb = { "movsx", "movsbw", Gw, Eb, XX }, -Ia_movsd_Vsd_Wsd = { "movsd", "movsd", Vsd, Wsd, XX }, -Ia_movsd_Wsd_Vsd = { "movsd", "movsd", Wsd, Vsd, XX }, -Ia_movshdup_Vdq_Wdq = { "movshdup", "movshdup", Vdq, Wdq, XX }, -Ia_movsl_Yd_Xd = { "movsd", "movsl", Yd, Xd, XX }, -Ia_movsldup_Vdq_Wdq = { "movsldup", "movsldup", Vdq, Wdq, XX }, -Ia_movslq_Gq_Ed = { "movsxd", "movslq", Gq, Ed, XX }, -Ia_movsq_Yq_Xq = { "movsq", "movsq", Yq, Xq, XX }, -Ia_movss_Vss_Wss = { "movss", "movss", Vss, Wss, XX }, -Ia_movss_Wss_Vss = { "movss", "movss", Wss, Vss, XX }, -Ia_movsw_Yw_Xw = { "movsw", "movsw", Yw, Xw, XX }, -Ia_movswl_Gd_Ew = { "movsx", "movswl", Gd, Ew, XX }, -Ia_movswq_Gq_Ew = { "movsx", "movswq", Gq, Ew, XX }, -Ia_movupd_Vpd_Wpd = { "movupd", "movupd", Vpd, Wpd, XX }, -Ia_movupd_Wpd_Vpd = { "movupd", "movupd", Wpd, Vpd, XX }, -Ia_movups_Vps_Wps = { "movups", "movups", Vps, Wps, XX }, -Ia_movups_Wps_Vps = { "movups", "movups", Wps, Vps, XX }, -Ia_movw_AX_Ow = { "mov", "movw", AX, Ow, XX }, -Ia_movw_Ew_Gw = { "mov", "movw", Ew, Gw, XX }, -Ia_movw_Ew_Iw = { "mov", "movw", Ew, Iw, XX }, -Ia_movw_Ew_Sw = { "mov", "movw", Ew, Sw, XX }, -Ia_movw_Gw_Ew = { "mov", "movw", Gw, Ew, XX }, -Ia_movw_Ow_AX = { "mov", "movw", Ow, AX, XX }, -Ia_movw_RX_Iw = { "mov", "movw", RX, Iw, XX }, -Ia_movw_Sw_Ew = { "mov", "movw", Sw, Ew, XX }, -Ia_movzbl_Gd_Eb = { "movzx", "movzbl", Gd, Eb, XX }, -Ia_movzbq_Gq_Eb = { "movzx", "movzbq", Gq, Eb, XX }, -Ia_movzbw_Gw_Eb = { "movzx", "movzbw", Gw, Eb, XX }, -Ia_movzwl_Gd_Ew = { "movzx", "movzwl", Gd, Ew, XX }, -Ia_movzwq_Gq_Ew = { "movzx", "movzwq", Gq, Ew, XX }, -Ia_mulb_AL_Eb = { "mul", "mulb", AL, Eb, XX }, -Ia_mull_EAX_Ed = { "mul", "mull", EAX, Ed, XX }, -Ia_mulpd_Vpd_Wpd = { "mulpd", "mulpd", Vpd, Wpd, XX }, -Ia_mulps_Vps_Wps = { "mulps", "mulps", Vps, Wps, XX }, -Ia_mulq_RAX_Eq = { "mul", "mulq", RAX, Eq, XX }, -Ia_mulsd_Vsd_Wsd = { "mulsd", "mulsd", Vsd, Wsd, XX }, -Ia_mulss_Vss_Wss = { "mulss", "mulss", Vss, Wss, XX }, -Ia_multibyte_nop = { "multibyte nop", "multibyte nop", XX, XX, XX }, -Ia_mulw_AX_Ew = { "mul", "mulw", AX, Ew, XX }, -Ia_mwait = { "mwait", "mwait", XX, XX, XX }, -Ia_negb_Eb = { "neg", "negb", Eb, XX, XX }, -Ia_negl_Ed = { "neg", "negl", Ed, XX, XX }, -Ia_negq_Eq = { "neg", "negq", Eq, XX, XX }, -Ia_negw_Ew = { "neg", "negw", Ew, XX, XX }, -Ia_nop = { "nop", "nop", XX, XX, XX }, -Ia_notb_Eb = { "not", "notb", Eb, XX, XX }, -Ia_notl_Ed = { "not", "notl", Ed, XX, XX }, -Ia_notq_Eq = { "not", "notq", Eq, XX, XX }, -Ia_notw_Ew = { "not", "notw", Ew, XX, XX }, -Ia_orb_AL_Ib = { "or", "orb", AL, Ib, XX }, -Ia_orb_Eb_Gb = { "or", "orb", Eb, Gb, XX }, -Ia_orb_Eb_Ib = { "or", "orb", Eb, Ib, XX }, -Ia_orb_Gb_Eb = { "or", "orb", Gb, Eb, XX }, -Ia_orl_EAX_Id = { "or", "orl", EAX, Id, XX }, -Ia_orl_Ed_Gd = { "or", "orl", Ed, Gd, XX }, -Ia_orl_Ed_Id = { "or", "orl", Ed, Id, XX }, -Ia_orl_Ed_sIb = { "or", "orl", Ed, sIbd, XX }, -Ia_orl_Gd_Ed = { "or", "orl", Gd, Ed, XX }, -Ia_orpd_Vpd_Wpd = { "orpd", "orpd", Vpd, Wpd, XX }, -Ia_orps_Vps_Wps = { "orps", "orps", Vps, Wps, XX }, -Ia_orq_Eq_Gq = { "or", "orq", Eq, Gq, XX }, -Ia_orq_Eq_sIb = { "or", "orq", Eq, sIbq, XX }, -Ia_orq_Eq_sId = { "or", "orq", Eq, sIdq, XX }, -Ia_orq_Gq_Eq = { "or", "orq", Gq, Eq, XX }, -Ia_orq_RAX_sId = { "or", "orq", RAX, sIdq, XX }, -Ia_orw_AX_Iw = { "or", "orw", AX, Iw, XX }, -Ia_orw_Ew_Gw = { "or", "orw", Ew, Gw, XX }, -Ia_orw_Ew_Iw = { "or", "orw", Ew, Iw, XX }, -Ia_orw_Ew_sIb = { "or", "orw", Ew, sIbw, XX }, -Ia_orw_Gw_Ew = { "or", "orw", Gw, Ew, XX }, -Ia_outb_DX_AL = { "out", "outb", DX, AL, XX }, -Ia_outb_Ib_AL = { "out", "outb", Ib, AL, XX }, -Ia_outl_DX_EAX = { "out", "outl", DX, EAX, XX }, -Ia_outl_Ib_EAX = { "out", "outl", Ib, EAX, XX }, -Ia_outsb_DX_Xb = { "outsb", "outsb", DX, Xb, XX }, -Ia_outsl_DX_Xd = { "outsd", "outsl", DX, Xd, XX }, -Ia_outsw_DX_Xw = { "outsw", "outsw", DX, Xw, XX }, -Ia_outw_DX_AX = { "out", "outw", DX, AX, XX }, -Ia_outw_Ib_AX = { "out", "outw", Ib, AX, XX }, -Ia_pabsb_Pq_Qq = { "pabsb", "pabsb", Pq, Qq, XX }, -Ia_pabsb_Vdq_Wdq = { "pabsb", "pabsb", Vdq, Wdq, XX }, -Ia_pabsd_Pq_Qq = { "pabsd", "pabsd", Pq, Qq, XX }, -Ia_pabsd_Vdq_Wdq = { "pabsd", "pabsd", Vdq, Wdq, XX }, -Ia_pabsw_Pq_Qq = { "pabsw", "pabsw", Pq, Qq, XX }, -Ia_pabsw_Vdq_Wdq = { "pabsw", "pabsw", Vdq, Wdq, XX }, -Ia_packssdw_Pq_Qq = { "packssdw", "packssdw", Pq, Qq, XX }, -Ia_packssdw_Vdq_Wdq = { "packssdw", "packssdw", Vdq, Wdq, XX }, -Ia_packsswb_Pq_Qq = { "packsswb", "packsswb", Pq, Qq, XX }, -Ia_packsswb_Vdq_Wq = { "packsswb", "packsswb", Vdq, Wq, XX }, -Ia_packuswb_Pq_Qq = { "packuswb", "packuswb", Pq, Qq, XX }, -Ia_packuswb_Vdq_Wdq = { "packuswb", "packuswb", Vdq, Wdq, XX }, -Ia_paddb_Pq_Qq = { "paddb", "paddb", Pq, Qq, XX }, -Ia_paddb_Vdq_Wdq = { "paddb", "paddb", Vdq, Wdq, XX }, -Ia_paddd_Pq_Qq = { "paddd", "paddd", Pq, Qq, XX }, -Ia_paddd_Vdq_Wdq = { "paddd", "paddd", Vdq, Wdq, XX }, -Ia_paddq_Pq_Qq = { "paddq", "paddq", Pq, Qq, XX }, -Ia_paddq_Vdq_Wdq = { "paddq", "paddq", Vdq, Wdq, XX }, -Ia_paddsb_Pq_Qq = { "paddsb", "paddsb", Pq, Qq, XX }, -Ia_paddsb_Vdq_Wdq = { "paddsb", "paddsb", Vdq, Wdq, XX }, -Ia_paddsw_Pq_Qq = { "paddsw", "paddsw", Pq, Qq, XX }, -Ia_paddsw_Vdq_Wdq = { "paddsw", "paddsw", Vdq, Wdq, XX }, -Ia_paddusb_Pq_Qq = { "paddusb", "paddusb", Pq, Qq, XX }, -Ia_paddusb_Vdq_Wdq = { "paddusb", "paddusb", Vdq, Wdq, XX }, -Ia_paddusw_Pq_Qq = { "paddusw", "paddusw", Pq, Qq, XX }, -Ia_paddusw_Vdq_Wdq = { "paddusw", "paddusw", Vdq, Wdq, XX }, -Ia_paddw_Pq_Qq = { "paddw", "paddw", Pq, Qq, XX }, -Ia_paddw_Vdq_Wdq = { "paddw", "paddw", Vdq, Wdq, XX }, -Ia_palignr_Pq_Qq_Ib = { "palignr", "palignr", Pq, Qq, Ib }, -Ia_palignr_Vdq_Wdq_Ib = { "palignr", "palignr", Vdq, Wdq, Ib }, -Ia_pand_Pq_Qq = { "pand", "pand", Pq, Qq, XX }, -Ia_pand_Vdq_Wdq = { "pand", "pand", Vdq, Wdq, XX }, -Ia_pandn_Pq_Qq = { "pandn", "pandn", Pq, Qq, XX }, -Ia_pandn_Vdq_Wdq = { "pandn", "pandn", Vdq, Wdq, XX }, -Ia_pause = { "pause", "pause", XX, XX, XX }, -Ia_pavgb_Pq_Qq = { "pavgb", "pavgb", Pq, Qq, XX }, -Ia_pavgb_Vdq_Wdq = { "pavgb", "pavgb", Vdq, Wdq, XX }, -Ia_pavgw_Pq_Qq = { "pavgw", "pavgw", Pq, Qq, XX }, -Ia_pavgw_Vdq_Wdq = { "pavgw", "pavgw", Vdq, Wdq, XX }, -Ia_pcmpeqb_Pq_Qq = { "pcmpeqb", "pcmpeqb", Pq, Qq, XX }, -Ia_pcmpeqb_Vdq_Wdq = { "pcmpeqb", "pcmpeqb", Vdq, Wdq, XX }, -Ia_pcmpeqd_Pq_Qq = { "pcmpeqd", "pcmpeqd", Pq, Qq, XX }, -Ia_pcmpeqd_Vdq_Wdq = { "pcmpeqd", "pcmpeqd", Vdq, Wdq, XX }, -Ia_pcmpeqw_Pq_Qq = { "pcmpeqw", "pcmpeqw", Pq, Qq, XX }, -Ia_pcmpeqw_Vdq_Wdq = { "pcmpeqw", "pcmpeqw", Vdq, Wdq, XX }, -Ia_pcmpgtb_Pq_Qq = { "pcmpgtb", "pcmpgtb", Pq, Qq, XX }, -Ia_pcmpgtb_Vdq_Wq = { "pcmpgtb", "pcmpgtb", Vdq, Wq, XX }, -Ia_pcmpgtd_Pq_Qq = { "pcmpgtd", "pcmpgtd", Pq, Qq, XX }, -Ia_pcmpgtd_Vdq_Wdq = { "pcmpgtd", "pcmpgtd", Vdq, Wdq, XX }, -Ia_pcmpgtw_Pq_Qq = { "pcmpgtw", "pcmpgtw", Pq, Qq, XX }, -Ia_pcmpgtw_Vdq_Wq = { "pcmpgtw", "pcmpgtw", Vdq, Wq, XX }, -Ia_pextrw_Gd_Nq_Ib = { "pextrw", "pextrw", Gd, Nq, Ib }, -Ia_pextrw_Gd_Udq_Ib = { "pextrw", "pextrw", Gd, Udq, Ib }, -Ia_pf2id_Pq_Qq = { "pf2id", "pf2id", Pq, Qq, XX }, -Ia_pf2iw_Pq_Qq = { "pf2iw", "pf2iw", Pq, Qq, XX }, -Ia_pfacc_Pq_Qq = { "pfacc", "pfacc", Pq, Qq, XX }, -Ia_pfadd_Pq_Qq = { "pfadd", "pfadd", Pq, Qq, XX }, -Ia_pfcmpeq_Pq_Qq = { "pfcmpeq", "pfcmpeq", Pq, Qq, XX }, -Ia_pfcmpge_Pq_Qq = { "pfcmpge", "pfcmpge", Pq, Qq, XX }, -Ia_pfcmpgt_Pq_Qq = { "pfcmpgt", "pfcmpgt", Pq, Qq, XX }, -Ia_pfmax_Pq_Qq = { "pfmax", "pfmax", Pq, Qq, XX }, -Ia_pfmin_Pq_Qq = { "pfmin", "pfmin", Pq, Qq, XX }, -Ia_pfmul_Pq_Qq = { "pfmul", "pfmul", Pq, Qq, XX }, -Ia_pfnacc_Pq_Qq = { "pfnacc", "pfnacc", Pq, Qq, XX }, -Ia_pfpnacc_Pq_Qq = { "pfpnacc", "pfpnacc", Pq, Qq, XX }, -Ia_pfrcp_Pq_Qq = { "pfrcp", "pfrcp", Pq, Qq, XX }, -Ia_pfrcpit1_Pq_Qq = { "pfrcpit1", "pfrcpit1", Pq, Qq, XX }, -Ia_pfrcpit2_Pq_Qq = { "pfrcpit2", "pfrcpit2", Pq, Qq, XX }, -Ia_pfrsqit1_Pq_Qq = { "pfrsqit1", "pfrsqit1", Pq, Qq, XX }, -Ia_pfrsqrt_Pq_Qq = { "pfrsqrt", "pfrsqrt", Pq, Qq, XX }, -Ia_pfsub_Pq_Qq = { "pfsub", "pfsub", Pq, Qq, XX }, -Ia_pfsubr_Pq_Qq = { "pfsubr", "pfsubr", Pq, Qq, XX }, -Ia_phaddd_Pq_Qq = { "phaddd", "phaddd", Pq, Qq, XX }, -Ia_phaddd_Vdq_Wdq = { "phaddd", "phaddd", Vdq, Wdq, XX }, -Ia_phaddsw_Pq_Qq = { "phaddsw", "phaddsw", Pq, Qq, XX }, -Ia_phaddsw_Vdq_Wdq = { "phaddsw", "phaddsw", Vdq, Wdq, XX }, -Ia_phaddw_Pq_Qq = { "phaddw", "phaddw", Pq, Qq, XX }, -Ia_phaddw_Vdq_Wdq = { "phaddw", "phaddw", Vdq, Wdq, XX }, -Ia_phsubd_Pq_Qq = { "phsubd", "phsubd", Pq, Qq, XX }, -Ia_phsubd_Vdq_Wdq = { "phsubd", "phsubd", Vdq, Wdq, XX }, -Ia_phsubsw_Pq_Qq = { "phsubsw", "phsubsw", Pq, Qq, XX }, -Ia_phsubsw_Vdq_Wdq = { "phsubsw", "phsubsw", Vdq, Wdq, XX }, -Ia_phsubw_Pq_Qq = { "phsubw", "phsubw", Pq, Qq, XX }, -Ia_phsubw_Vdq_Wdq = { "phsubw", "phsubw", Vdq, Wdq, XX }, -Ia_pi2fd_Pq_Qq = { "pi2fd", "pi2fd", Pq, Qq, XX }, -Ia_pi2fw_Pq_Qq = { "pi2fw", "pi2fw", Pq, Qq, XX }, -Ia_pinsrw_Pq_Ed_Ib = { "pinsrw", "pinsrw", Pq, Ed, Ib }, -Ia_pinsrw_Vdq_Ed_Ib = { "pinsrw", "pinsrw", Vdq, Ed, Ib }, -Ia_pmaddubsw_Pq_Qq = { "pmaddubsw", "pmaddubsw", Pq, Qq, XX }, -Ia_pmaddubsw_Vdq_Wdq = { "pmaddubsw", "pmaddubsw", Vdq, Wdq, XX }, -Ia_pmaddwd_Pq_Qq = { "pmaddwd", "pmaddwd", Pq, Qq, XX }, -Ia_pmaddwd_Vdq_Wdq = { "pmaddwd", "pmaddwd", Vdq, Wdq, XX }, -Ia_pmaxub_Pq_Qq = { "pmaxub", "pmaxub", Pq, Qq, XX }, -Ia_pmaxub_Vdq_Wdq = { "pmaxub", "pmaxub", Vdq, Wdq, XX }, -Ia_pmaxuw_Pq_Qq = { "pmaxuw", "pmaxuw", Pq, Qq, XX }, -Ia_pmaxuw_Vdq_Wdq = { "pmaxuw", "pmaxuw", Vdq, Wdq, XX }, -Ia_pminsw_Pq_Qq = { "pminsw", "pminsw", Pq, Qq, XX }, -Ia_pminsw_Vdq_Wdq = { "pminsw", "pminsw", Vdq, Wdq, XX }, -Ia_pminub_Pq_Qq = { "pminub", "pminub", Pq, Qq, XX }, -Ia_pminub_Vdq_Wdq = { "pminub", "pminub", Vdq, Wdq, XX }, -Ia_pmovmskb_Gd_Nq = { "pmovmskb", "pmovmskb", Gd, Nq, XX }, -Ia_pmovmskb_Gd_Udq = { "pmovmskb", "pmovmskb", Gd, Udq, XX }, -Ia_pmulhrsw_Pq_Qq = { "pmulhrsw", "pmulhrsw", Pq, Qq, XX }, -Ia_pmulhrsw_Vdq_Wdq = { "pmulhrsw", "pmulhrsw", Vdq, Wdq, XX }, -Ia_pmulhrw_Pq_Qq = { "pmulhrw", "pmulhrw", Pq, Qq, XX }, -Ia_pmulhuw_Pq_Qq = { "pmulhuw", "pmulhuw", Pq, Qq, XX }, -Ia_pmulhuw_Vdq_Wdq = { "pmulhuw", "pmulhuw", Vdq, Wdq, XX }, -Ia_pmulhw_Pq_Qq = { "pmulhw", "pmulhw", Pq, Qq, XX }, -Ia_pmulhw_Vdq_Wdq = { "pmulhw", "pmulhw", Vdq, Wdq, XX }, -Ia_pmullw_Pq_Qq = { "pmullw", "pmullw", Pq, Qq, XX }, -Ia_pmullw_Vdq_Wdq = { "pmullw", "pmullw", Vdq, Wdq, XX }, -Ia_pmuludq_Pq_Qq = { "pmuludq", "pmuludq", Pq, Qq, XX }, -Ia_pmuludq_Vdq_Wdq = { "pmuludq", "pmuludq", Vdq, Wdq, XX }, -Ia_popal = { "popad", "popal", XX, XX, XX }, -Ia_popaw = { "popa", "popa", XX, XX, XX }, -Ia_popfl = { "popfd", "popfl", XX, XX, XX }, -Ia_popfq = { "popfq", "popfq", XX, XX, XX }, -Ia_popfw = { "popf", "popf", XX, XX, XX }, -Ia_popl_DS = { "pop", "popl", DS, XX, XX }, -Ia_popl_Ed = { "pop", "popl", Ed, XX, XX }, -Ia_popl_ERX = { "pop", "popl", ERX, XX, XX }, -Ia_popl_ES = { "pop", "popl", ES, XX, XX }, -Ia_popl_FS = { "pop", "popl", FS, XX, XX }, -Ia_popl_GS = { "pop", "popl", GS, XX, XX }, -Ia_popl_SS = { "pop", "popl", SS, XX, XX }, -Ia_popq_Eq = { "pop", "popq", Eq, XX, XX }, -Ia_popq_FS = { "pop", "popq", FS, XX, XX }, -Ia_popq_GS = { "pop", "popq", GS, XX, XX }, -Ia_popq_RRX = { "pop", "popq", RRX, XX, XX }, -Ia_popw_DS = { "pop", "popw", DS, XX, XX }, -Ia_popw_ES = { "pop", "popw", ES, XX, XX }, -Ia_popw_Ew = { "pop", "popw", Ew, XX, XX }, -Ia_popw_FS = { "pop", "popw", FS, XX, XX }, -Ia_popw_GS = { "pop", "popw", GS, XX, XX }, -Ia_popw_RX = { "pop", "popw", RX, XX, XX }, -Ia_popw_SS = { "pop", "popw", SS, XX, XX }, -Ia_por_Pq_Qq = { "por", "por", Pq, Qq, XX }, -Ia_por_Vdq_Wdq = { "por", "por", Vdq, Wdq, XX }, -Ia_prefetch = { "prefetch (3dnow!)", "prefetch (3dnow!)", Mb, XX, XX }, -Ia_prefetchnta = { "prefetchnta", "prefetchnta", Mb, XX, XX }, -Ia_prefetcht0 = { "prefetcht0", "prefetcht0", Mb, XX, XX }, -Ia_prefetcht1 = { "prefetcht1", "prefetcht1", Mb, XX, XX }, -Ia_prefetcht2 = { "prefetcht2", "prefetcht2", Mb, XX, XX }, -Ia_prefix_asize = { "asize", "asize", XX, XX, XX }, -Ia_prefix_cs = { "cs", "cs", XX, XX, XX }, -Ia_prefix_ds = { "ds", "ds", XX, XX, XX }, -Ia_prefix_es = { "es", "es", XX, XX, XX }, -Ia_prefix_fs = { "fs", "fs", XX, XX, XX }, -Ia_prefix_gs = { "gs", "gs", XX, XX, XX }, -Ia_prefix_lock = { "lock", "lock", XX, XX, XX }, -Ia_prefix_osize = { "osize", "osize", XX, XX, XX }, -Ia_prefix_rep = { "rep", "rep", XX, XX, XX }, -Ia_prefix_repne = { "repne", "repne", XX, XX, XX }, -Ia_prefix_rex = { "rex", "rex", XX, XX, XX }, -Ia_prefix_ss = { "ss", "ss", XX, XX, XX }, -Ia_psadbw_Pq_Qq = { "psadbw", "psadbw", Pq, Qq, XX }, -Ia_psadbw_Vdq_Wdq = { "psadbw", "psadbw", Vdq, Wdq, XX }, -Ia_pshufb_Pq_Qq = { "pshufb", "pshufb", Pq, Qq, XX }, -Ia_pshufb_Vdq_Wdq = { "pshufb", "pshufb", Vdq, Wdq, XX }, -Ia_pshufd_Vdq_Wdq_Ib = { "pshufd", "pshufd", Vdq, Wdq, Ib }, -Ia_pshufhw_Vq_Wq_Ib = { "pshufhw", "pshufhw", Vq, Wq, Ib }, -Ia_pshuflw_Vq_Wq_Ib = { "pshuflw", "pshuflw", Vq, Wq, Ib }, -Ia_pshufw_Pq_Qq_Ib = { "pshufw", "pshufw", Pq, Qq, Ib }, -Ia_psignb_Pq_Qq = { "psignb", "psignb", Pq, Qq, XX }, -Ia_psignb_Vdq_Wdq = { "psignb", "psignb", Vdq, Wdq, XX }, -Ia_psignd_Pq_Qq = { "psignd", "psignd", Pq, Qq, XX }, -Ia_psignd_Vdq_Wdq = { "psignd", "psignd", Vdq, Wdq, XX }, -Ia_psignw_Pq_Qq = { "psignw", "psignw", Pq, Qq, XX }, -Ia_psignw_Vdq_Wdq = { "psignw", "psignw", Vdq, Wdq, XX }, -Ia_pslld_Nq_Ib = { "pslld", "pslld", Nq, Ib, XX }, -Ia_pslld_Pq_Qq = { "pslld", "pslld", Pq, Qq, XX }, -Ia_pslld_Udq_Ib = { "pslld", "pslld", Udq, Ib, XX }, -Ia_pslld_Vdq_Wdq = { "pslld", "pslld", Vdq, Wdq, XX }, -Ia_pslldq_Udq_Ib = { "pslldq", "pslldq", Udq, Ib, XX }, -Ia_psllq_Nq_Ib = { "psllq", "psllq", Nq, Ib, XX }, -Ia_psllq_Pq_Qq = { "psllq", "psllq", Pq, Qq, XX }, -Ia_psllq_Udq_Ib = { "psllq", "psllq", Udq, Ib, XX }, -Ia_psllq_Vdq_Wdq = { "psllq", "psllq", Vdq, Wdq, XX }, -Ia_psllw_Nq_Ib = { "psllw", "psllw", Nq, Ib, XX }, -Ia_psllw_Pq_Qq = { "psllw", "psllw", Pq, Qq, XX }, -Ia_psllw_Udq_Ib = { "psllw", "psllw", Udq, Ib, XX }, -Ia_psllw_Vdq_Wdq = { "psllw", "psllw", Vdq, Wdq, XX }, -Ia_psrad_Nq_Ib = { "psrad", "psrad", Nq, Ib, XX }, -Ia_psrad_Pq_Qq = { "psrad", "psrad", Pq, Qq, XX }, -Ia_psrad_Udq_Ib = { "psrad", "psrad", Udq, Ib, XX }, -Ia_psrad_Vdq_Wdq = { "psrad", "psrad", Vdq, Wdq, XX }, -Ia_psraw_Nq_Ib = { "psraw", "psraw", Nq, Ib, XX }, -Ia_psraw_Pq_Qq = { "psraw", "psraw", Pq, Qq, XX }, -Ia_psraw_Udq_Ib = { "psraw", "psraw", Udq, Ib, XX }, -Ia_psraw_Vdq_Wdq = { "psraw", "psraw", Vdq, Wdq, XX }, -Ia_psrld_Nq_Ib = { "psrld", "psrld", Nq, Ib, XX }, -Ia_psrld_Pq_Qq = { "psrld", "psrld", Pq, Qq, XX }, -Ia_psrld_Udq_Ib = { "psrld", "psrld", Udq, Ib, XX }, -Ia_psrld_Vdq_Wdq = { "psrld", "psrld", Vdq, Wdq, XX }, -Ia_psrldq_Udq_Ib = { "psrldq", "psrldq", Udq, Ib, XX }, -Ia_psrlq_Nq_Ib = { "psrlq", "psrlq", Nq, Ib, XX }, -Ia_psrlq_Pq_Qq = { "psrlq", "psrlq", Pq, Qq, XX }, -Ia_psrlq_Udq_Ib = { "psrlq", "psrlq", Udq, Ib, XX }, -Ia_psrlq_Vdq_Wdq = { "psrlq", "psrlq", Vdq, Wdq, XX }, -Ia_psrlw_Nq_Ib = { "psrlw", "psrlw", Nq, Ib, XX }, -Ia_psrlw_Pq_Qq = { "psrlw", "psrlw", Pq, Qq, XX }, -Ia_psrlw_Udq_Ib = { "psrlw", "psrlw", Udq, Ib, XX }, -Ia_psrlw_Vdq_Wdq = { "psrlw", "psrlw", Vdq, Wdq, XX }, -Ia_psubb_Pq_Qq = { "psubb", "psubb", Pq, Qq, XX }, -Ia_psubb_Vdq_Wdq = { "psubb", "psubb", Vdq, Wdq, XX }, -Ia_psubd_Pq_Qq = { "psubd", "psubd", Pq, Qq, XX }, -Ia_psubd_Vdq_Wdq = { "psubd", "psubd", Vdq, Wdq, XX }, -Ia_psubq_Pq_Qq = { "psubq", "psubq", Pq, Qq, XX }, -Ia_psubq_Vdq_Wdq = { "psubq", "psubq", Vdq, Wdq, XX }, -Ia_psubsb_Pq_Qq = { "psubsb", "psubsb", Pq, Qq, XX }, -Ia_psubsb_Vdq_Wdq = { "psubsb", "psubsb", Vdq, Wdq, XX }, -Ia_psubsw_Pq_Qq = { "psubsw", "psubsw", Pq, Qq, XX }, -Ia_psubsw_Vdq_Wdq = { "psubsw", "psubsw", Vdq, Wdq, XX }, -Ia_psubusb_Pq_Qq = { "psubusb", "psubusb", Pq, Qq, XX }, -Ia_psubusb_Vdq_Wdq = { "psubusb", "psubusb", Vdq, Wdq, XX }, -Ia_psubusw_Pq_Qq = { "psubusw", "psubusw", Pq, Qq, XX }, -Ia_psubusw_Vdq_Wdq = { "psubusw", "psubusw", Vdq, Wdq, XX }, -Ia_psubw_Pq_Qq = { "psubw", "psubw", Pq, Qq, XX }, -Ia_psubw_Vdq_Wdq = { "psubw", "psubw", Vdq, Wdq, XX }, -Ia_pswapd_Pq_Qq = { "pswapd", "pswapd", Pq, Qq, XX }, -Ia_punpckhbw_Pq_Qq = { "punpckhbw", "punpckhbw", Pq, Qq, XX }, -Ia_punpckhbw_Vdq_Wq = { "punpckhbw", "punpckhbw", Vdq, Wq, XX }, -Ia_punpckhdq_Pq_Qq = { "punpckhdq", "punpckhdq", Pq, Qq, XX }, -Ia_punpckhdq_Vdq_Wq = { "punpckhdq", "punpckhdq", Vdq, Wq, XX }, -Ia_punpckhqdq_Vdq_Wq = { "punpckhqdq", "punpckhqdq", Vdq, Wq, XX }, -Ia_punpckhwd_Pq_Qq = { "punpckhwd", "punpckhwd", Pq, Qq, XX }, -Ia_punpckhwd_Vdq_Wq = { "punpckhwd", "punpckhwd", Vdq, Wq, XX }, -Ia_punpcklbw_Pq_Qd = { "punpcklbw", "punpcklbw", Pq, Qd, XX }, -Ia_punpcklbw_Vdq_Wq = { "punpcklbw", "punpcklbw", Vdq, Wq, XX }, -Ia_punpckldq_Pq_Qd = { "punpckldq", "punpckldq", Pq, Qd, XX }, -Ia_punpckldq_Vdq_Wq = { "punpckldq", "punpckldq", Vdq, Wq, XX }, -Ia_punpcklqdq_Vdq_Wq = { "punpcklqdq", "punpcklqdq", Vdq, Wq, XX }, -Ia_punpcklwd_Pq_Qd = { "punpcklwd", "punpcklwd", Pq, Qd, XX }, -Ia_punpcklwd_Vdq_Wq = { "punpcklwd", "punpcklwd", Vdq, Wq, XX }, -Ia_pushal = { "pushad", "pushal", XX, XX, XX }, -Ia_pushaw = { "pusha", "pusha", XX, XX, XX }, -Ia_pushfl = { "pushfd", "pushfl", XX, XX, XX }, -Ia_pushfq = { "pushfq", "pushfq", XX, XX, XX }, -Ia_pushfw = { "pushf", "pushf", XX, XX, XX }, -Ia_pushl_CS = { "push", "pushl", CS, XX, XX }, -Ia_pushl_DS = { "push", "pushl", DS, XX, XX }, -Ia_pushl_Ed = { "push", "pushl", Ed, XX, XX }, -Ia_pushl_ERX = { "push", "pushl", ERX, XX, XX }, -Ia_pushl_ES = { "push", "pushl", ES, XX, XX }, -Ia_pushl_FS = { "push", "pushl", FS, XX, XX }, -Ia_pushl_GS = { "push", "pushl", GS, XX, XX }, -Ia_pushl_Id = { "push", "pushl", Id, XX, XX }, -Ia_pushl_sIb = { "push", "pushl", sIbd, XX, XX }, -Ia_pushl_SS = { "push", "pushl", SS, XX, XX }, -Ia_pushq_Eq = { "push", "pushq", Eq, XX, XX }, -Ia_pushq_FS = { "push", "pushq", FS, XX, XX }, -Ia_pushq_GS = { "push", "pushq", GS, XX, XX }, -Ia_pushq_RRX = { "push", "pushq", RRX, XX, XX }, -Ia_pushq_sIb = { "push", "pushq", sIbq, XX, XX }, -Ia_pushq_sId = { "push", "pushq", sIdq, XX, XX }, -Ia_pushw_CS = { "push", "pushw", CS, XX, XX }, -Ia_pushw_DS = { "push", "pushw", DS, XX, XX }, -Ia_pushw_ES = { "push", "pushw", ES, XX, XX }, -Ia_pushw_Ew = { "push", "pushw", Ew, XX, XX }, -Ia_pushw_FS = { "push", "pushw", FS, XX, XX }, -Ia_pushw_GS = { "push", "pushw", GS, XX, XX }, -Ia_pushw_Iw = { "push", "pushw", Iw, XX, XX }, -Ia_pushw_RX = { "push", "pushw", RX, XX, XX }, -Ia_pushw_sIb = { "push", "pushw", sIbw, XX, XX }, -Ia_pushw_SS = { "push", "pushw", SS, XX, XX }, -Ia_pxor_Pq_Qq = { "pxor", "pxor", Pq, Qq, XX }, -Ia_pxor_Vdq_Wdq = { "pxor", "pxor", Vdq, Wdq, XX }, -Ia_rclb_Eb_CL = { "rcl", "rclb", Eb, CL, XX }, -Ia_rclb_Eb_I1 = { "rcl", "rclb", Eb, I1, XX }, -Ia_rclb_Eb_Ib = { "rcl", "rclb", Eb, Ib, XX }, -Ia_rcll_Ed_CL = { "rcl", "rcll", Ed, CL, XX }, -Ia_rcll_Ed_I1 = { "rcl", "rcll", Ed, I1, XX }, -Ia_rcll_Ed_Ib = { "rcl", "rcll", Ed, Ib, XX }, -Ia_rclq_Eq_CL = { "rcl", "rclq", Eq, CL, XX }, -Ia_rclq_Eq_I1 = { "rcl", "rclq", Eq, I1, XX }, -Ia_rclq_Eq_Ib = { "rcl", "rclq", Eq, Ib, XX }, -Ia_rclw_Ew_CL = { "rcl", "rclw", Ew, CL, XX }, -Ia_rclw_Ew_I1 = { "rcl", "rclw", Ew, I1, XX }, -Ia_rclw_Ew_Ib = { "rcl", "rclw", Ew, Ib, XX }, -Ia_rcpps_Vps_Wps = { "rcpps", "rcpps", Vps, Wps, XX }, -Ia_rcpss_Vss_Wss = { "rcpss", "rcpss", Vss, Wss, XX }, -Ia_rcrb_Eb_CL = { "rcr", "rcrb", Eb, CL, XX }, -Ia_rcrb_Eb_I1 = { "rcr", "rcrb", Eb, I1, XX }, -Ia_rcrb_Eb_Ib = { "rcr", "rcrb", Eb, Ib, XX }, -Ia_rcrl_Ed_CL = { "rcr", "rcrl", Ed, CL, XX }, -Ia_rcrl_Ed_I1 = { "rcr", "rcrl", Ed, I1, XX }, -Ia_rcrl_Ed_Ib = { "rcr", "rcrl", Ed, Ib, XX }, -Ia_rcrq_Eq_CL = { "rcr", "rcrq", Eq, CL, XX }, -Ia_rcrq_Eq_I1 = { "rcr", "rcrq", Eq, I1, XX }, -Ia_rcrq_Eq_Ib = { "rcr", "rcrq", Eq, Ib, XX }, -Ia_rcrw_Ew_CL = { "rcr", "rcrw", Ew, CL, XX }, -Ia_rcrw_Ew_I1 = { "rcr", "rcrw", Ew, I1, XX }, -Ia_rcrw_Ew_Ib = { "rcr", "rcrw", Ew, Ib, XX }, -Ia_rdmsr = { "rdmsr", "rdmsr", XX, XX, XX }, -Ia_rdpmc = { "rdpmc", "rdpmc", XX, XX, XX }, -Ia_rdtsc = { "rdtsc", "rdtsc", XX, XX, XX }, -Ia_rdtscp = { "rdtscp", "rdtscp", XX, XX, XX }, -Ia_ret = { "ret", "ret", XX, XX, XX }, -Ia_ret_Iw = { "ret", "ret", Iw, XX, XX }, -Ia_rolb_Eb_CL = { "rol", "rolb", Eb, CL, XX }, -Ia_rolb_Eb_I1 = { "rol", "rolb", Eb, I1, XX }, -Ia_rolb_Eb_Ib = { "rol", "rolb", Eb, Ib, XX }, -Ia_roll_Ed_CL = { "rol", "roll", Ed, CL, XX }, -Ia_roll_Ed_I1 = { "rol", "roll", Ed, I1, XX }, -Ia_roll_Ed_Ib = { "rol", "roll", Ed, Ib, XX }, -Ia_rolq_Eq_CL = { "rol", "rolq", Eq, CL, XX }, -Ia_rolq_Eq_I1 = { "rol", "rolq", Eq, I1, XX }, -Ia_rolq_Eq_Ib = { "rol", "rolq", Eq, Ib, XX }, -Ia_rolw_Ew_CL = { "rol", "rolw", Ew, CL, XX }, -Ia_rolw_Ew_I1 = { "rol", "rolw", Ew, I1, XX }, -Ia_rolw_Ew_Ib = { "rol", "rolw", Ew, Ib, XX }, -Ia_rorb_Eb_CL = { "ror", "rorb", Eb, CL, XX }, -Ia_rorb_Eb_I1 = { "ror", "rorb", Eb, I1, XX }, -Ia_rorb_Eb_Ib = { "ror", "rorb", Eb, Ib, XX }, -Ia_rorl_Ed_CL = { "ror", "rorl", Ed, CL, XX }, -Ia_rorl_Ed_I1 = { "ror", "rorl", Ed, I1, XX }, -Ia_rorl_Ed_Ib = { "ror", "rorl", Ed, Ib, XX }, -Ia_rorq_Eq_CL = { "ror", "rorq", Eq, CL, XX }, -Ia_rorq_Eq_I1 = { "ror", "rorq", Eq, I1, XX }, -Ia_rorq_Eq_Ib = { "ror", "rorq", Eq, Ib, XX }, -Ia_rorw_Ew_CL = { "ror", "rorw", Ew, CL, XX }, -Ia_rorw_Ew_I1 = { "ror", "rorw", Ew, I1, XX }, -Ia_rorw_Ew_Ib = { "ror", "rorw", Ew, Ib, XX }, -Ia_rsm = { "rsm", "rsm", XX, XX, XX }, -Ia_rsqrtps_Vps_Wps = { "rsqrtps", "rsqrtps", Vps, Wps, XX }, -Ia_rsqrtss_Vss_Wss = { "rsqrtss", "rsqrtss", Vss, Wss, XX }, -Ia_sahf = { "sahf", "sahf", XX, XX, XX }, -Ia_salc = { "salc", "salc", XX, XX, XX }, -Ia_sarb_Eb_CL = { "sar", "sarb", Eb, CL, XX }, -Ia_sarb_Eb_I1 = { "sar", "sarb", Eb, I1, XX }, -Ia_sarb_Eb_Ib = { "sar", "sarb", Eb, Ib, XX }, -Ia_sarl_Ed_CL = { "sar", "sarl", Ed, CL, XX }, -Ia_sarl_Ed_I1 = { "sar", "sarl", Ed, I1, XX }, -Ia_sarl_Ed_Ib = { "sar", "sarl", Ed, Ib, XX }, -Ia_sarq_Eq_CL = { "sar", "sarq", Eq, CL, XX }, -Ia_sarq_Eq_I1 = { "sar", "sarq", Eq, I1, XX }, -Ia_sarq_Eq_Ib = { "sar", "sarq", Eq, Ib, XX }, -Ia_sarw_Ew_CL = { "sar", "sarw", Ew, CL, XX }, -Ia_sarw_Ew_I1 = { "sar", "sarw", Ew, I1, XX }, -Ia_sarw_Ew_Ib = { "sar", "sarw", Ew, Ib, XX }, -Ia_sbbb_AL_Ib = { "sbb", "sbbb", AL, Ib, XX }, -Ia_sbbb_Eb_Gb = { "sbb", "sbbb", Eb, Gb, XX }, -Ia_sbbb_Eb_Ib = { "sbb", "sbbb", Eb, Ib, XX }, -Ia_sbbb_Gb_Eb = { "sbb", "sbbb", Gb, Eb, XX }, -Ia_sbbl_EAX_Id = { "sbb", "sbbl", EAX, Id, XX }, -Ia_sbbl_Ed_Gd = { "sbb", "sbbl", Ed, Gd, XX }, -Ia_sbbl_Ed_Id = { "sbb", "sbbl", Ed, Id, XX }, -Ia_sbbl_Ed_sIb = { "sbb", "sbbl", Ed, sIbd, XX }, -Ia_sbbl_Gd_Ed = { "sbb", "sbbl", Gd, Ed, XX }, -Ia_sbbq_Eq_Gq = { "sbb", "sbbq", Eq, Gq, XX }, -Ia_sbbq_Eq_sIb = { "sbb", "sbbq", Eq, sIbq, XX }, -Ia_sbbq_Eq_sId = { "sbb", "sbbq", Eq, sIdq, XX }, -Ia_sbbq_Gq_Eq = { "sbb", "sbbq", Gq, Eq, XX }, -Ia_sbbq_RAX_sId = { "sbb", "sbbq", RAX, sIdq, XX }, -Ia_sbbw_AX_Iw = { "sbb", "sbbw", AX, Iw, XX }, -Ia_sbbw_Ew_Gw = { "sbb", "sbbw", Ew, Gw, XX }, -Ia_sbbw_Ew_Iw = { "sbb", "sbbw", Ew, Iw, XX }, -Ia_sbbw_Ew_sIb = { "sbb", "sbbw", Ew, sIbw, XX }, -Ia_sbbw_Gw_Ew = { "sbb", "sbbw", Gw, Ew, XX }, -Ia_scasb_Yb_AL = { "scasb", "scasb", Yb, AL, XX }, -Ia_scasl_Yd_EAX = { "scasd", "scasl", Yd, EAX, XX }, -Ia_scasq_Yq_RAX = { "scasq", "scasq", Yq, RAX, XX }, -Ia_scasw_Yw_AX = { "scasw", "scasw", Yw, AX, XX }, -Ia_setb_Eb = { "setb", "setb", Eb, XX, XX }, -Ia_setbe_Eb = { "setbe", "setbe", Eb, XX, XX }, -Ia_setl_Eb = { "setl", "setl", Eb, XX, XX }, -Ia_setle_Eb = { "setle", "setle", Eb, XX, XX }, -Ia_setnb_Eb = { "setnb", "setnb", Eb, XX, XX }, -Ia_setnbe_Eb = { "setnbe", "setnbe", Eb, XX, XX }, -Ia_setnl_Eb = { "setnl", "setnl", Eb, XX, XX }, -Ia_setnle_Eb = { "setnle", "setnle", Eb, XX, XX }, -Ia_setno_Eb = { "setno", "setno", Eb, XX, XX }, -Ia_setnp_Eb = { "setnp", "setnp", Eb, XX, XX }, -Ia_setns_Eb = { "setns", "setns", Eb, XX, XX }, -Ia_setnz_Eb = { "setnz", "setnz", Eb, XX, XX }, -Ia_seto_Eb = { "seto", "seto", Eb, XX, XX }, -Ia_setp_Eb = { "setp", "setp", Eb, XX, XX }, -Ia_sets_Eb = { "sets", "sets", Eb, XX, XX }, -Ia_setz_Eb = { "setz", "setz", Eb, XX, XX }, -Ia_sfence = { "sfence", "sfence", XX, XX, XX }, -Ia_sgdt = { "sgdt", "sgdt", Ms, XX, XX }, -Ia_shlb_Eb_CL = { "shl", "shlb", Eb, CL, XX }, -Ia_shlb_Eb_I1 = { "shl", "shlb", Eb, I1, XX }, -Ia_shlb_Eb_Ib = { "shl", "shlb", Eb, Ib, XX }, -Ia_shldl_Ed_Gd_CL = { "shld", "shldl", Ed, Gd, CL }, -Ia_shldl_Ed_Gd_Ib = { "shld", "shldl", Ed, Gd, Ib }, -Ia_shldq_Eq_Gq_CL = { "shld", "shldq", Eq, Gq, CL }, -Ia_shldq_Eq_Gq_Ib = { "shld", "shldq", Eq, Gq, Ib }, -Ia_shldw_Ew_Gw_CL = { "shld", "shldw", Ew, Gw, CL }, -Ia_shldw_Ew_Gw_Ib = { "shld", "shldw", Ew, Gw, Ib }, -Ia_shll_Ed_CL = { "shl", "shll", Ed, CL, XX }, -Ia_shll_Ed_I1 = { "shl", "shll", Ed, I1, XX }, -Ia_shll_Ed_Ib = { "shl", "shll", Ed, Ib, XX }, -Ia_shlq_Eq_CL = { "shl", "shlq", Eq, CL, XX }, -Ia_shlq_Eq_I1 = { "shl", "shlq", Eq, I1, XX }, -Ia_shlq_Eq_Ib = { "shl", "shlq", Eq, Ib, XX }, -Ia_shlw_Ew_CL = { "shl", "shlw", Ew, CL, XX }, -Ia_shlw_Ew_I1 = { "shl", "shlw", Ew, I1, XX }, -Ia_shlw_Ew_Ib = { "shl", "shlw", Ew, Ib, XX }, -Ia_shrb_Eb_CL = { "shr", "shrb", Eb, CL, XX }, -Ia_shrb_Eb_I1 = { "shr", "shrb", Eb, I1, XX }, -Ia_shrb_Eb_Ib = { "shr", "shrb", Eb, Ib, XX }, -Ia_shrdl_Ed_Gd_CL = { "shrd", "shrdl", Ed, Gd, CL }, -Ia_shrdl_Ed_Gd_Ib = { "shrd", "shrdl", Ed, Gd, Ib }, -Ia_shrdq_Eq_Gq_CL = { "shrd", "shrdq", Eq, Gq, CL }, -Ia_shrdq_Eq_Gq_Ib = { "shrd", "shrdq", Eq, Gq, Ib }, -Ia_shrdw_Ew_Gw_CL = { "shrd", "shrdw", Ew, Gw, CL }, -Ia_shrdw_Ew_Gw_Ib = { "shrd", "shrdw", Ew, Gw, Ib }, -Ia_shrl_Ed_CL = { "shr", "shrl", Ed, CL, XX }, -Ia_shrl_Ed_I1 = { "shr", "shrl", Ed, I1, XX }, -Ia_shrl_Ed_Ib = { "shr", "shrl", Ed, Ib, XX }, -Ia_shrq_Eq_CL = { "shr", "shrq", Eq, CL, XX }, -Ia_shrq_Eq_I1 = { "shr", "shrq", Eq, I1, XX }, -Ia_shrq_Eq_Ib = { "shr", "shrq", Eq, Ib, XX }, -Ia_shrw_Ew_CL = { "shr", "shrw", Ew, CL, XX }, -Ia_shrw_Ew_I1 = { "shr", "shrw", Ew, I1, XX }, -Ia_shrw_Ew_Ib = { "shr", "shrw", Ew, Ib, XX }, -Ia_shufpd_Vpd_Wpd_Ib = { "shufpd", "shufpd", Vpd, Wpd, Ib }, -Ia_shufps_Vps_Wps_Ib = { "shufps", "shufps", Vps, Wps, Ib }, -Ia_sidt = { "sidt", "sidt", Ms, XX, XX }, -Ia_sldt = { "sldt", "sldt", Ew, XX, XX }, -Ia_smsw_Ew = { "smsw", "smsw", Ew, XX, XX }, -Ia_sqrtpd_Vpd_Wpd = { "sqrtpd", "sqrtpd", Vpd, Wpd, XX }, -Ia_sqrtps_Vps_Wps = { "sqrtps", "sqrtps", Vps, Wps, XX }, -Ia_sqrtsd_Vsd_Wsd = { "sqrtsd", "sqrtsd", Vsd, Wsd, XX }, -Ia_sqrtss_Vss_Wss = { "sqrtss", "sqrtss", Vss, Wss, XX }, -Ia_stc = { "stc", "stc", XX, XX, XX }, -Ia_std = { "std", "std", XX, XX, XX }, -Ia_sti = { "sti", "sti", XX, XX, XX }, -Ia_stmxcsr = { "stmxcsr", "stmxcsr", Md, XX, XX }, -Ia_stosb_Yb_AL = { "stosb", "stosb", Yb, AL, XX }, -Ia_stosl_Yd_EAX = { "stosd", "stosl", Yd, EAX, XX }, -Ia_stosq_Yq_RAX = { "stosq", "stosq", Yq, RAX, XX }, -Ia_stosw_Yw_AX = { "stosw", "stosw", Yw, AX, XX }, -Ia_str = { "str", "str", Ew, XX, XX }, -Ia_subb_AL_Ib = { "sub", "subb", AL, Ib, XX }, -Ia_subb_Eb_Gb = { "sub", "subb", Eb, Gb, XX }, -Ia_subb_Eb_Ib = { "sub", "subb", Eb, Ib, XX }, -Ia_subb_Gb_Eb = { "sub", "subb", Gb, Eb, XX }, -Ia_subl_EAX_Id = { "sub", "subl", EAX, Id, XX }, -Ia_subl_Ed_Gd = { "sub", "subl", Ed, Gd, XX }, -Ia_subl_Ed_Id = { "sub", "subl", Ed, Id, XX }, -Ia_subl_Ed_sIb = { "sub", "subl", Ed, sIbd, XX }, -Ia_subl_Gd_Ed = { "sub", "subl", Gd, Ed, XX }, -Ia_subpd_Vpd_Wpd = { "subpd", "subpd", Vpd, Wpd, XX }, -Ia_subps_Vps_Wps = { "subps", "subps", Vps, Wps, XX }, -Ia_subq_Eq_Gq = { "sub", "subq", Eq, Gq, XX }, -Ia_subq_Eq_sIb = { "sub", "subq", Eq, sIbq, XX }, -Ia_subq_Eq_sId = { "sub", "subq", Eq, sIdq, XX }, -Ia_subq_Gq_Eq = { "sub", "subq", Gq, Eq, XX }, -Ia_subq_RAX_sId = { "sub", "subq", RAX, sIdq, XX }, -Ia_subsd_Vsd_Wsd = { "subsd", "subsd", Vsd, Wsd, XX }, -Ia_subss_Vss_Wss = { "subss", "subss", Vss, Wss, XX }, -Ia_subw_AX_Iw = { "sub", "subw", AX, Iw, XX }, -Ia_subw_Ew_Gw = { "sub", "subw", Ew, Gw, XX }, -Ia_subw_Ew_Iw = { "sub", "subw", Ew, Iw, XX }, -Ia_subw_Ew_sIb = { "sub", "subw", Ew, sIbw, XX }, -Ia_subw_Gw_Ew = { "sub", "subw", Gw, Ew, XX }, -Ia_swapgs = { "swapgs", "swapgs", XX, XX, XX }, -Ia_syscall = { "syscall", "syscall", XX, XX, XX }, -Ia_sysenter = { "sysenter", "sysenter", XX, XX, XX }, -Ia_sysexit = { "sysexit", "sysexit", XX, XX, XX }, -Ia_sysret = { "sysret", "sysret", XX, XX, XX }, -Ia_testb_AL_Ib = { "test", "testb", AL, Ib, XX }, -Ia_testb_Eb_Gb = { "test", "testb", Eb, Gb, XX }, -Ia_testb_Eb_Ib = { "test", "testb", Eb, Ib, XX }, -Ia_testl_EAX_Id = { "test", "testl", EAX, Id, XX }, -Ia_testl_Ed_Gd = { "test", "testl", Ed, Gd, XX }, -Ia_testl_Ed_Id = { "test", "testl", Ed, Id, XX }, -Ia_testq_Eq_Gq = { "test", "testq", Eq, Gq, XX }, -Ia_testq_Eq_sId = { "test", "testq", Eq, sIdq, XX }, -Ia_testq_RAX_sId = { "test", "testq", RAX, sIdq, XX }, -Ia_testw_AX_Iw = { "test", "testw", AX, Iw, XX }, -Ia_testw_Ew_Gw = { "test", "testw", Ew, Gw, XX }, -Ia_testw_Ew_Iw = { "test", "testw", Ew, Iw, XX }, -Ia_ucomisd_Vsd_Wss = { "ucomisd", "ucomisd", Vsd, Wsd, XX }, -Ia_ucomiss_Vss_Wss = { "ucomiss", "ucomiss", Vss, Wss, XX }, -Ia_ud2a = { "ud2a", "ud2a", XX, XX, XX }, -Ia_ud2b = { "ud2b", "ud2b", XX, XX, XX }, -Ia_unpckhpd_Vpd_Wdq = { "unpckhpd", "unpckhpd", Vpd, Wdq, XX }, -Ia_unpckhps_Vps_Wdq = { "unpckhps", "unpckhps", Vps, Wdq, XX }, -Ia_unpcklpd_Vpd_Wq = { "unpcklpd", "unpcklpd", Vpd, Wq, XX }, -Ia_unpcklps_Vps_Wq = { "unpcklps", "unpcklps", Vps, Wq, XX }, -Ia_verr = { "verr", "verr", Ew, XX, XX }, -Ia_verw = { "verw", "verw", Ew, XX, XX }, -Ia_wbinvd = { "wbinvd", "wbinvd", XX, XX, XX }, -Ia_wrmsr = { "wrmsr", "wrmsr", XX, XX, XX }, -Ia_xaddb_Eb_Gb = { "xadd", "xaddb", Eb, Gb, XX }, -Ia_xaddl_Ed_Gd = { "xadd", "xaddl", Ed, Gd, XX }, -Ia_xaddq_Eq_Gq = { "xadd", "xaddq", Eq, Gq, XX }, -Ia_xaddw_Ew_Gw = { "xadd", "xaddw", Ew, Gw, XX }, -Ia_xchgb_Eb_Gb = { "xchg", "xchgb", Eb, Gb, XX }, -Ia_xchgl_Ed_Gd = { "xchg", "xchgl", Ed, Gd, XX }, -Ia_xchgl_ERX_EAX = { "xchg", "xchgl", ERX, EAX, XX }, -Ia_xchgq_Eq_Gq = { "xchg", "xchgq", Eq, Gq, XX }, -Ia_xchgq_RRX_RAX = { "xchg", "xchgq", RRX, RAX, XX }, -Ia_xchgw_Ew_Gw = { "xchg", "xchgw", Ew, Gw, XX }, -Ia_xchgw_RX_AX = { "xchg", "xchgw", RX, AX, XX }, -Ia_xlat = { "xlat", "xlat", XX, XX, XX }, -Ia_xorb_AL_Ib = { "xor", "xorb", AL, Ib, XX }, -Ia_xorb_Eb_Gb = { "xor", "xorb", Eb, Gb, XX }, -Ia_xorb_Eb_Ib = { "xor", "xorb", Eb, Ib, XX }, -Ia_xorb_Gb_Eb = { "xor", "xorb", Gb, Eb, XX }, -Ia_xorl_EAX_Id = { "xor", "xorl", EAX, Id, XX }, -Ia_xorl_Ed_Gd = { "xor", "xorl", Ed, Gd, XX }, -Ia_xorl_Ed_Id = { "xor", "xorl", Ed, Id, XX }, -Ia_xorl_Ed_sIb = { "xor", "xorl", Ed, sIbd, XX }, -Ia_xorl_Gd_Ed = { "xor", "xorl", Gd, Ed, XX }, -Ia_xorpd_Vpd_Wpd = { "xorpd", "xorpd", Vpd, Wpd, XX }, -Ia_xorps_Vps_Wps = { "xorps", "xorps", Vps, Wps, XX }, -Ia_xorq_Eq_Gq = { "xor", "xorq", Eq, Gq, XX }, -Ia_xorq_Eq_sIb = { "xor", "xorq", Eq, sIbq, XX }, -Ia_xorq_Eq_sId = { "xor", "xorq", Eq, sIdq, XX }, -Ia_xorq_Gq_Eq = { "xor", "xorq", Gq, Eq, XX }, -Ia_xorq_RAX_sId = { "xor", "xorq", RAX, sIdq, XX }, -Ia_xorw_AX_Iw = { "xor", "xorw", AX, Iw, XX }, -Ia_xorw_Ew_Gw = { "xor", "xorw", Ew, Gw, XX }, -Ia_xorw_Ew_Iw = { "xor", "xorw", Ew, Iw, XX }, -Ia_xorw_Ew_sIb = { "xor", "xorw", Ew, sIbw, XX }, -Ia_xorw_Gw_Ew = { "xor", "xorw", Gw, Ew, XX }; diff --git a/Externals/Bochs_disasm/resolve.cc b/Externals/Bochs_disasm/resolve.cc new file mode 100644 index 0000000000..e72f8d11b5 --- /dev/null +++ b/Externals/Bochs_disasm/resolve.cc @@ -0,0 +1,696 @@ +///////////////////////////////////////////////////////////////////////// +// $Id: resolve.cc 11863 2013-10-07 19:23:19Z sshwarts $ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (c) 2005-2013 Stanislav Shwartsman +// Written by Stanislav Shwartsman [sshwarts at sourceforge net] +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// +///////////////////////////////////////////////////////////////////////// + +#include +#include +#include "disasm.h" + +void disassembler::decode_modrm(x86_insn *insn) +{ + insn->modrm = fetch_byte(); + BX_DECODE_MODRM(insn->modrm, insn->mod, insn->nnn, insn->rm); + // MOVs with CRx and DRx always use register ops and ignore the mod field. + if ((insn->b1 & ~3) == 0x120) insn->mod = 3; + insn->nnn |= insn->rex_r; + insn->rm |= insn->rex_b; + + if (insn->mod == 3) { + return; /* mod, reg, reg */ + } + + if (insn->as_64) + { + if ((insn->rm & 7) != 4) { /* rm != 100b, no s-i-b byte */ + // one byte modrm + switch (insn->mod) { + case 0: + resolve_modrm = &disassembler::resolve64_mod0; + if ((insn->rm & 7) == 5) /* no reg, 32-bit displacement */ + insn->displacement.displ32 = fetch_dword(); + break; + case 1: + /* reg, 8-bit displacement, sign extend */ + resolve_modrm = &disassembler::resolve64_mod1or2; + insn->displacement.displ32 = (Bit8s) fetch_byte(); + break; + case 2: + /* reg, 32-bit displacement */ + resolve_modrm = &disassembler::resolve64_mod1or2; + insn->displacement.displ32 = fetch_dword(); + break; + } /* switch (mod) */ + } /* if (rm != 4) */ + else { /* rm == 4, s-i-b byte follows */ + insn->sib = fetch_byte(); + BX_DECODE_SIB(insn->sib, insn->scale, insn->index, insn->base); + insn->base |= insn->rex_b; + insn->index |= insn->rex_x; + + switch (insn->mod) { + case 0: + resolve_modrm = &disassembler::resolve64_mod0_rm4; + if ((insn->base & 7) == 5) + insn->displacement.displ32 = fetch_dword(); + break; + case 1: + resolve_modrm = &disassembler::resolve64_mod1or2_rm4; + insn->displacement.displ32 = (Bit8s) fetch_byte(); + break; + case 2: + resolve_modrm = &disassembler::resolve64_mod1or2_rm4; + insn->displacement.displ32 = fetch_dword(); + break; + } + } /* s-i-b byte follows */ + } + else + { + if (insn->as_32) + { + if ((insn->rm & 7) != 4) { /* rm != 100b, no s-i-b byte */ + // one byte modrm + switch (insn->mod) { + case 0: + resolve_modrm = &disassembler::resolve32_mod0; + if ((insn->rm & 7) == 5) /* no reg, 32-bit displacement */ + insn->displacement.displ32 = fetch_dword(); + break; + case 1: + /* reg, 8-bit displacement, sign extend */ + resolve_modrm = &disassembler::resolve32_mod1or2; + insn->displacement.displ32 = (Bit8s) fetch_byte(); + break; + case 2: + /* reg, 32-bit displacement */ + resolve_modrm = &disassembler::resolve32_mod1or2; + insn->displacement.displ32 = fetch_dword(); + break; + } /* switch (mod) */ + } /* if (rm != 4) */ + else { /* rm == 4, s-i-b byte follows */ + insn->sib = fetch_byte(); + BX_DECODE_SIB(insn->sib, insn->scale, insn->index, insn->base); + insn->base |= insn->rex_b; + insn->index |= insn->rex_x; + + switch (insn->mod) { + case 0: + resolve_modrm = &disassembler::resolve32_mod0_rm4; + if ((insn->base & 7) == 5) + insn->displacement.displ32 = fetch_dword(); + break; + case 1: + resolve_modrm = &disassembler::resolve32_mod1or2_rm4; + insn->displacement.displ32 = (Bit8s) fetch_byte(); + break; + case 2: + resolve_modrm = &disassembler::resolve32_mod1or2_rm4; + insn->displacement.displ32 = fetch_dword(); + break; + } + } /* s-i-b byte follows */ + } + else { + assert(insn->rex_b == 0); + assert(insn->rex_x == 0); + assert(insn->rex_r == 0); + /* 16 bit addressing modes. */ + switch (insn->mod) { + case 0: + resolve_modrm = &disassembler::resolve16_mod0; + if(insn->rm == 6) + insn->displacement.displ16 = fetch_word(); + break; + case 1: + /* reg, 8-bit displacement, sign extend */ + resolve_modrm = &disassembler::resolve16_mod1or2; + insn->displacement.displ16 = (Bit8s) fetch_byte(); + break; + case 2: + resolve_modrm = &disassembler::resolve16_mod1or2; + insn->displacement.displ16 = fetch_word(); + break; + } /* switch (mod) ... */ + } + } +} + +void disassembler::resolve16_mod0(const x86_insn *insn, unsigned datasize) +{ + const char *seg; + + if (insn->is_seg_override()) + seg = segment_name[insn->seg_override]; + else + seg = sreg_mod00_rm16[insn->rm]; + + if(insn->rm == 6) + print_memory_access16(datasize, seg, NULL, insn->displacement.displ16); + else + print_memory_access16(datasize, seg, index16[insn->rm], 0); +} + +void disassembler::resolve16_mod1or2(const x86_insn *insn, unsigned datasize) +{ + const char *seg; + + if (insn->is_seg_override()) + seg = segment_name[insn->seg_override]; + else + seg = sreg_mod01or10_rm16[insn->rm]; + + print_memory_access16(datasize, seg, index16[insn->rm], insn->displacement.displ16); +} + +void disassembler::resolve32_mod0(const x86_insn *insn, unsigned datasize) +{ + const char *seg, *eip_regname = NULL; + + if (insn->is_seg_override()) + seg = segment_name[insn->seg_override]; + else + seg = segment_name[DS_REG]; + + if (insn->is_64) { + if (intel_mode) eip_regname = "eip"; + else eip_regname = "%eip"; + } + + if ((insn->rm & 7) == 5) /* no reg, 32-bit displacement */ + print_memory_access32(datasize, seg, eip_regname, NULL, 0, insn->displacement.displ32); + else + print_memory_access32(datasize, seg, general_32bit_regname[insn->rm], NULL, 0, 0); +} + +void disassembler::resolve32_mod1or2(const x86_insn *insn, unsigned datasize) +{ + const char *seg; + + if (insn->is_seg_override()) + seg = segment_name[insn->seg_override]; + else + seg = sreg_mod01or10_base32[insn->rm]; + + print_memory_access32(datasize, seg, + general_32bit_regname[insn->rm], NULL, 0, insn->displacement.displ32); +} + +void disassembler::resolve32_mod0_rm4(const x86_insn *insn, unsigned datasize) +{ + char vsib_index[8]; + const char *seg, *base = NULL, *index = NULL; + Bit32u disp32 = 0; + + if (insn->is_seg_override()) + seg = segment_name[insn->seg_override]; + else + seg = sreg_mod00_base32[insn->base]; + + if ((insn->base & 7) != 5) + base = general_32bit_regname[insn->base]; + else + disp32 = insn->displacement.displ32; + + if (datasize & VSIB_Index) { + sprintf(vsib_index, "%s%d", vector_reg_name[insn->vex_l], insn->index); + index = vsib_index; + } + else { + if (insn->index != 4) + index = general_32bit_regname[insn->index]; + } + + print_memory_access32(datasize, seg, base, index, insn->scale, disp32); +} + +void disassembler::resolve32_mod1or2_rm4(const x86_insn *insn, unsigned datasize) +{ + char vsib_index[8]; + const char *seg, *index = NULL; + + if (insn->is_seg_override()) + seg = segment_name[insn->seg_override]; + else + seg = sreg_mod01or10_base32[insn->base]; + + if (datasize & VSIB_Index) { + sprintf(vsib_index, "%s%d", vector_reg_name[insn->vex_l], insn->index); + index = vsib_index; + } + else { + if (insn->index != 4) + index = general_32bit_regname[insn->index]; + } + + print_memory_access32(datasize, seg, + general_32bit_regname[insn->base], index, insn->scale, insn->displacement.displ32); +} + +void disassembler::resolve64_mod0(const x86_insn *insn, unsigned datasize) +{ + const char *seg, *rip_regname; + + if (insn->is_seg_override()) + seg = segment_name[insn->seg_override]; + else + seg = segment_name[DS_REG]; + + if (intel_mode) rip_regname = "rip"; + else rip_regname = "%rip"; + + if ((insn->rm & 7) == 5) /* no reg, 32-bit displacement */ + print_memory_access64(datasize, seg, rip_regname, NULL, 0, (Bit32s) insn->displacement.displ32); + else + print_memory_access64(datasize, seg, general_64bit_regname[insn->rm], NULL, 0, 0); +} + +void disassembler::resolve64_mod1or2(const x86_insn *insn, unsigned datasize) +{ + const char *seg; + + if (insn->is_seg_override()) + seg = segment_name[insn->seg_override]; + else + seg = sreg_mod01or10_base32[insn->rm]; + + print_memory_access64(datasize, seg, + general_64bit_regname[insn->rm], NULL, 0, (Bit32s) insn->displacement.displ32); +} + +void disassembler::resolve64_mod0_rm4(const x86_insn *insn, unsigned datasize) +{ + char vsib_index[8]; + const char *seg, *base = NULL, *index = NULL; + Bit32s disp32 = 0; + + if (insn->is_seg_override()) + seg = segment_name[insn->seg_override]; + else + seg = sreg_mod00_base32[insn->base]; + + if ((insn->base & 7) != 5) + base = general_64bit_regname[insn->base]; + else + disp32 = (Bit32s) insn->displacement.displ32; + + if (datasize & VSIB_Index) { + sprintf(vsib_index, "%s%d", vector_reg_name[insn->vex_l], insn->index); + index = vsib_index; + } + else { + if (insn->index != 4) + index = general_64bit_regname[insn->index]; + } + + print_memory_access64(datasize, seg, base, index, insn->scale, disp32); +} + +void disassembler::resolve64_mod1or2_rm4(const x86_insn *insn, unsigned datasize) +{ + char vsib_index[8]; + const char *seg, *index = NULL; + + if (insn->is_seg_override()) + seg = segment_name[insn->seg_override]; + else + seg = sreg_mod01or10_base32[insn->base]; + + if (datasize & VSIB_Index) { + sprintf(vsib_index, "%s%d", vector_reg_name[insn->vex_l], insn->index); + index = vsib_index; + } + else { + if (insn->index != 4) + index = general_64bit_regname[insn->index]; + } + + print_memory_access64(datasize, seg, + general_64bit_regname[insn->base], index, insn->scale, (Bit32s) insn->displacement.displ32); +} + +void disassembler::print_datasize(unsigned size) +{ + if (!intel_mode || !print_mem_datasize) return; + + switch(size & 0xf) + { + case B_SIZE: + dis_sprintf("byte ptr "); + break; + case W_SIZE: + dis_sprintf("word ptr "); + break; + case D_SIZE: + dis_sprintf("dword ptr "); + break; + case Q_SIZE: + dis_sprintf("qword ptr "); + break; + case T_SIZE: + dis_sprintf("tbyte ptr "); + break; + case XMM_SIZE: + dis_sprintf("dqword ptr "); + break; + case YMM_SIZE: + dis_sprintf("qqword ptr "); + break; + case X_SIZE: + break; + }; +} + +void disassembler::print_memory_access16(int datasize, + const char *seg, const char *index, Bit16u disp) +{ + print_datasize(datasize); + + dis_sprintf("%s:", seg); + + if (intel_mode) + { + if (index == NULL) + { + dis_sprintf("0x%04x", (unsigned) disp); + } + else + { + if (disp != 0) { + if (offset_mode_hex) + dis_sprintf("[%s+0x%04x]", index, (unsigned) disp); + else + dis_sprintf("[%s%+d]", index, (int) (Bit16s) disp); + } + else + dis_sprintf("[%s]", index); + } + } + else + { + if (index == NULL) + { + dis_sprintf("0x%04x", (unsigned) disp); + } + else + { + if (disp != 0) { + if (offset_mode_hex) + dis_sprintf("0x%04x(%s,1)", (unsigned) disp, index); + else + dis_sprintf("%d(%s,1)", (int) (Bit16s) disp, index); + } + else + dis_sprintf("(%s,1)", index); + } + } +} + +void disassembler::print_memory_access32(int datasize, + const char *seg, const char *base, const char *index, int scale, Bit32s disp) +{ + print_datasize(datasize); + + dis_sprintf("%s:", seg); + + scale = 1 << scale; + + if (intel_mode) + { + if (base == NULL) + { + if (index == NULL) + { + dis_sprintf("0x%08x", (unsigned) disp); + } + else + { + if (scale != 1) + { + if (disp != 0) { + if (offset_mode_hex) + dis_sprintf("[%s*%d+0x%08x]", index, scale, (unsigned) disp); + else + dis_sprintf("[%s*%d%+d]", index, scale, (int) disp); + } + else + dis_sprintf("[%s*%d]", index, scale); + } + else + { + if (disp != 0) { + if (offset_mode_hex) + dis_sprintf("[%s+0x%08x]", index, (unsigned) disp); + else + dis_sprintf("[%s%+d]", index, (int) disp); + } + else { + dis_sprintf("[%s]", index); + } + } + } + } + else + { + if (index == NULL) + { + if (disp != 0) { + if (offset_mode_hex) + dis_sprintf("[%s+0x%08x]", base, (unsigned) disp); + else + dis_sprintf("[%s%+d]", base, (int) disp); + } + else { + dis_sprintf("[%s]", base); + } + } + else + { + if (scale != 1) + { + if (disp != 0) { + if (offset_mode_hex) + dis_sprintf("[%s+%s*%d+0x%08x]", base, index, scale, (unsigned) disp); + else + dis_sprintf("[%s+%s*%d%+d]", base, index, scale, (int) disp); + } + else { + dis_sprintf("[%s+%s*%d]", base, index, scale); + } + } + else + { + if (disp != 0) { + if (offset_mode_hex) + dis_sprintf("[%s+%s+0x%08x]", base, index, (unsigned) disp); + else + dis_sprintf("[%s+%s%+d]", base, index, (int) disp); + } + else + dis_sprintf("[%s+%s]", base, index); + } + } + } + } + else + { + if (base == NULL) + { + if (index == NULL) + { + dis_sprintf("0x%08x", (unsigned) disp); + } + else + { + if (disp != 0) { + if (offset_mode_hex) + dis_sprintf("0x%08x(,%s,%d)", (unsigned) disp, index, scale); + else + dis_sprintf("%d(,%s,%d)", (int) disp, index, scale); + } + else + dis_sprintf("(,%s,%d)", index, scale); + } + } + else + { + if (index == NULL) + { + if (disp != 0) { + if (offset_mode_hex) + dis_sprintf("0x%08x(%s)", (unsigned) disp, base); + else + dis_sprintf("%d(%s)", (int) disp, base); + } + else + dis_sprintf("(%s)", base); + } + else + { + if (disp != 0) { + if (offset_mode_hex) + dis_sprintf("0x%08x(%s,%s,%d)", (unsigned) disp, base, index, scale); + else + dis_sprintf("%d(%s,%s,%d)", (int) disp, base, index, scale); + } + else + dis_sprintf("(%s,%s,%d)", base, index, scale); + } + } + } +} + +void disassembler::print_memory_access64(int datasize, + const char *seg, const char *base, const char *index, int scale, Bit32s disp) +{ + Bit64u disp64 = (Bit64s) disp; + + print_datasize(datasize); + + dis_sprintf("%s:", seg); + + scale = 1 << scale; + + if (intel_mode) + { + if (base == NULL) + { + if (index == NULL) + { + dis_sprintf("0x%08x%08x", GET32H(disp64), GET32L(disp64)); + } + else + { + if (scale != 1) + { + if (disp != 0) { + if (offset_mode_hex) + dis_sprintf("[%s*%d+0x%08x%08x]", index, scale, GET32H(disp64), GET32L(disp64)); + else + dis_sprintf("[%s*%d%+d]", index, scale, (int) disp); + } + else + dis_sprintf("[%s*%d]", index, scale); + } + else + { + if (disp != 0) { + if (offset_mode_hex) + dis_sprintf("[%s+0x%08x%08x]", index, GET32H(disp64), GET32L(disp64)); + else + dis_sprintf("[%s%+d]", index, (int) disp); + } + else { + dis_sprintf("[%s]", index); + } + } + } + } + else + { + if (index == NULL) + { + if (disp != 0) { + if (offset_mode_hex) + dis_sprintf("[%s+0x%08x%08x]", base, GET32H(disp64), GET32L(disp64)); + else + dis_sprintf("[%s%+d]", base, (int) disp); + } + else { + dis_sprintf("[%s]", base); + } + } + else + { + if (scale != 1) + { + if (disp != 0) { + if (offset_mode_hex) + dis_sprintf("[%s+%s*%d+0x%08x%08x]", base, index, scale, GET32H(disp64), GET32L(disp64)); + else + dis_sprintf("[%s+%s*%d%+d]", base, index, scale, (int) disp); + } + else { + dis_sprintf("[%s+%s*%d]", base, index, scale); + } + } + else + { + if (disp != 0) { + if (offset_mode_hex) + dis_sprintf("[%s+%s+0x%08x%08x]", base, index, GET32H(disp64), GET32L(disp64)); + else + dis_sprintf("[%s+%s%+d]", base, index, (int) disp); + } + else + dis_sprintf("[%s+%s]", base, index); + } + } + } + } + else + { + if (base == NULL) + { + if (index == NULL) + { + dis_sprintf("0x%08x%08x", GET32H(disp64), GET32L(disp64)); + } + else + { + if (disp != 0) { + if (offset_mode_hex) + dis_sprintf("0x%08x%08x(,%s,%d)", GET32H(disp64), GET32L(disp64), index, scale); + else + dis_sprintf("%d(,%s,%d)", (int) disp, index, scale); + } + else + dis_sprintf("(,%s,%d)", index, scale); + } + } + else + { + if (index == NULL) + { + if (disp != 0) { + if (offset_mode_hex) + dis_sprintf("0x%08x%08x(%s)", GET32H(disp64), GET32L(disp64), base); + else + dis_sprintf("%d(%s)", (int) disp, base); + } + else + dis_sprintf("(%s)", base); + } + else + { + if (disp != 0) { + if (offset_mode_hex) + dis_sprintf("0x%08x%08x(%s,%s,%d)", GET32H(disp64), GET32L(disp64), base, index, scale); + else + dis_sprintf("%d(%s,%s,%d)", (int) disp, base, index, scale); + } + else + dis_sprintf("(%s,%s,%d)", base, index, scale); + } + } + } +} diff --git a/Externals/Bochs_disasm/resolve.cpp b/Externals/Bochs_disasm/resolve.cpp deleted file mode 100644 index 3bf2d344dc..0000000000 --- a/Externals/Bochs_disasm/resolve.cpp +++ /dev/null @@ -1,460 +0,0 @@ -///////////////////////////////////////////////////////////////////////// -// $Id: resolve.cc,v 1.13 2006/08/11 17:22:43 sshwarts Exp $ -///////////////////////////////////////////////////////////////////////// -#include -#include -#include "disasm.h" - -void disassembler::decode_modrm(x86_insn *insn) -{ - insn->modrm = fetch_byte(); - BX_DECODE_MODRM(insn->modrm, insn->mod, insn->nnn, insn->rm); - // MOVs with CRx and DRx always use register ops and ignore the mod field. - if ((insn->b1 & ~3) == 0x120) insn->mod = 3; - insn->nnn |= insn->rex_r; - - if (insn->mod == 3) { - /* mod, reg, reg */ - insn->rm |= insn->rex_b; - return; - } - - if (insn->as_64) - { - if (insn->rm != 4) { /* rm != 100b, no s-i-b byte */ - insn->rm |= insn->rex_b; - // one byte modrm - switch (insn->mod) { - case 0: - resolve_modrm = &disassembler::resolve64_mod0; - if ((insn->rm & 7) == 5) /* no reg, 32-bit displacement */ - insn->displacement.displ32 = fetch_dword(); - break; - case 1: - /* reg, 8-bit displacement, sign extend */ - resolve_modrm = &disassembler::resolve64_mod1or2; - insn->displacement.displ32 = (Bit8s) fetch_byte(); - break; - case 2: - /* reg, 32-bit displacement */ - resolve_modrm = &disassembler::resolve64_mod1or2; - insn->displacement.displ32 = fetch_dword(); - break; - } /* switch (mod) */ - } /* if (rm != 4) */ - else { /* rm == 4, s-i-b byte follows */ - insn->sib = fetch_byte(); - BX_DECODE_SIB(insn->sib, insn->scale, insn->index, insn->base); - insn->base |= insn->rex_b; - insn->index |= insn->rex_x; - - switch (insn->mod) { - case 0: - resolve_modrm = &disassembler::resolve64_mod0_rm4; - if ((insn->base & 7) == 5) - insn->displacement.displ32 = fetch_dword(); - break; - case 1: - resolve_modrm = &disassembler::resolve64_mod1or2_rm4; - insn->displacement.displ32 = (Bit8s) fetch_byte(); - break; - case 2: - resolve_modrm = &disassembler::resolve64_mod1or2_rm4; - insn->displacement.displ32 = fetch_dword(); - break; - } - } /* s-i-b byte follows */ - } - else - { - if (insn->as_32) - { - if (insn->rm != 4) { /* rm != 100b, no s-i-b byte */ - insn->rm |= insn->rex_b; - // one byte modrm - switch (insn->mod) { - case 0: - resolve_modrm = &disassembler::resolve32_mod0; - if ((insn->rm & 7) == 5) /* no reg, 32-bit displacement */ - insn->displacement.displ32 = fetch_dword(); - break; - case 1: - /* reg, 8-bit displacement, sign extend */ - resolve_modrm = &disassembler::resolve32_mod1or2; - insn->displacement.displ32 = (Bit8s) fetch_byte(); - break; - case 2: - /* reg, 32-bit displacement */ - resolve_modrm = &disassembler::resolve32_mod1or2; - insn->displacement.displ32 = fetch_dword(); - break; - } /* switch (mod) */ - } /* if (rm != 4) */ - else { /* rm == 4, s-i-b byte follows */ - insn->sib = fetch_byte(); - BX_DECODE_SIB(insn->sib, insn->scale, insn->index, insn->base); - insn->base |= insn->rex_b; - insn->index |= insn->rex_x; - - switch (insn->mod) { - case 0: - resolve_modrm = &disassembler::resolve32_mod0_rm4; - if ((insn->base & 7) == 5) - insn->displacement.displ32 = fetch_dword(); - break; - case 1: - resolve_modrm = &disassembler::resolve32_mod1or2_rm4; - insn->displacement.displ32 = (Bit8s) fetch_byte(); - break; - case 2: - resolve_modrm = &disassembler::resolve32_mod1or2_rm4; - insn->displacement.displ32 = fetch_dword(); - break; - } - } /* s-i-b byte follows */ - } - else { - assert(insn->rex_b == 0); - assert(insn->rex_x == 0); - assert(insn->rex_r == 0); - /* 16 bit addressing modes. */ - switch (insn->mod) { - case 0: - resolve_modrm = &disassembler::resolve16_mod0; - if(insn->rm == 6) - insn->displacement.displ16 = fetch_word(); - break; - case 1: - /* reg, 8-bit displacement, sign extend */ - resolve_modrm = &disassembler::resolve16_mod1or2; - insn->displacement.displ16 = (Bit8s) fetch_byte(); - break; - case 2: - resolve_modrm = &disassembler::resolve16_mod1or2; - insn->displacement.displ16 = fetch_word(); - break; - } /* switch (mod) ... */ - } - } -} - -void disassembler::resolve16_mod0(const x86_insn *insn, unsigned mode) -{ - const char *seg; - - if (insn->is_seg_override()) - seg = segment_name[insn->seg_override]; - else - seg = sreg_mod00_rm16[insn->rm]; - - if(insn->rm == 6) - print_memory_access16(mode, seg, NULL, insn->displacement.displ16); - else - print_memory_access16(mode, seg, index16[insn->rm], 0); -} - -void disassembler::resolve16_mod1or2(const x86_insn *insn, unsigned mode) -{ - const char *seg; - - if (insn->is_seg_override()) - seg = segment_name[insn->seg_override]; - else - seg = sreg_mod01or10_rm16[insn->rm]; - - print_memory_access16(mode, seg, index16[insn->rm], insn->displacement.displ16); -} - -void disassembler::resolve32_mod0(const x86_insn *insn, unsigned mode) -{ - const char *seg; - - if (insn->is_seg_override()) - seg = segment_name[insn->seg_override]; - else - seg = segment_name[DS_REG]; - - if ((insn->rm & 7) == 5) /* no reg, 32-bit displacement */ - print_memory_access(mode, seg, NULL, NULL, 0, insn->displacement.displ32); - else - print_memory_access(mode, seg, general_32bit_regname[insn->rm], NULL, 0, 0); -} - -void disassembler::resolve32_mod1or2(const x86_insn *insn, unsigned mode) -{ - const char *seg; - - if (insn->is_seg_override()) - seg = segment_name[insn->seg_override]; - else - seg = sreg_mod01or10_rm32[insn->rm]; - - print_memory_access(mode, seg, - general_32bit_regname[insn->rm], NULL, 0, insn->displacement.displ32); -} - -void disassembler::resolve32_mod0_rm4(const x86_insn *insn, unsigned mode) -{ - const char *seg, *base = NULL, *index = NULL; - Bit32u disp32 = 0; - - if (insn->is_seg_override()) - seg = segment_name[insn->seg_override]; - else - seg = sreg_mod00_base32[insn->base]; - - if ((insn->base & 7) != 5) - base = general_32bit_regname[insn->base]; - else - disp32 = insn->displacement.displ32; - - if (insn->index != 4) - index = general_32bit_regname[insn->index]; - - print_memory_access(mode, seg, base, index, insn->scale, disp32); -} - -void disassembler::resolve32_mod1or2_rm4(const x86_insn *insn, unsigned mode) -{ - const char *seg, *index = NULL; - - if (insn->is_seg_override()) - seg = segment_name[insn->seg_override]; - else - seg = sreg_mod01or10_base32[insn->base]; - - if (insn->index != 4) - index = general_32bit_regname[insn->index]; - - print_memory_access(mode, seg, - general_32bit_regname[insn->base], index, insn->scale, insn->displacement.displ32); -} - -void disassembler::resolve64_mod0(const x86_insn *insn, unsigned mode) -{ - const char *seg, *rip_regname; - - if (insn->is_seg_override()) - seg = segment_name[insn->seg_override]; - else - seg = segment_name[DS_REG]; - - if (intel_mode) rip_regname = "rip"; - else rip_regname = "%rip"; - - if ((insn->rm & 7) == 5) /* no reg, 32-bit displacement */ - print_memory_access(mode, seg, rip_regname, NULL, 0, insn->displacement.displ32); - else - print_memory_access(mode, seg, general_64bit_regname[insn->rm], NULL, 0, 0); -} - -void disassembler::resolve64_mod1or2(const x86_insn *insn, unsigned mode) -{ - const char *seg; - - if (insn->is_seg_override()) - seg = segment_name[insn->seg_override]; - else - seg = sreg_mod01or10_rm32[insn->rm]; - - print_memory_access(mode, seg, - general_64bit_regname[insn->rm], NULL, 0, insn->displacement.displ32); -} - -void disassembler::resolve64_mod0_rm4(const x86_insn *insn, unsigned mode) -{ - const char *seg, *base = NULL, *index = NULL; - Bit32u disp32 = 0; - - if (insn->is_seg_override()) - seg = segment_name[insn->seg_override]; - else - seg = sreg_mod00_base32[insn->base]; - - if ((insn->base & 7) != 5) - base = general_64bit_regname[insn->base]; - else - disp32 = insn->displacement.displ32; - - if (insn->index != 4) - index = general_64bit_regname[insn->index]; - - print_memory_access(mode, seg, base, index, insn->scale, disp32); -} - -void disassembler::resolve64_mod1or2_rm4(const x86_insn *insn, unsigned mode) -{ - const char *seg, *index = NULL; - - if (insn->is_seg_override()) - seg = segment_name[insn->seg_override]; - else - seg = sreg_mod01or10_base32[insn->base]; - - if (insn->index != 4) - index = general_64bit_regname[insn->index]; - - print_memory_access(mode, seg, - general_64bit_regname[insn->base], index, insn->scale, insn->displacement.displ32); -} - -void disassembler::print_datasize(unsigned size) -{ - if (!intel_mode) return; - - switch(size) - { - case B_SIZE: - dis_sprintf("byte ptr "); - break; - case W_SIZE: - dis_sprintf("word ptr "); - break; - case D_SIZE: - dis_sprintf("dword ptr "); - break; - case Q_SIZE: - dis_sprintf("qword ptr "); - break; - case O_SIZE: - dis_sprintf("dqword ptr "); - break; - case T_SIZE: - dis_sprintf("tbyte ptr "); - break; - case P_SIZE: - break; - case X_SIZE: - break; - }; -} - -void disassembler::print_memory_access16(int datasize, - const char *seg, const char *index, Bit16u disp) -{ - print_datasize(datasize); - - if (intel_mode) - { - if (index == NULL) - { - dis_sprintf("%s:0x%x", seg, (unsigned) disp); - } - else - { - if (disp != 0) - dis_sprintf("%s:[%s+0x%x]", seg, index, (unsigned) disp); - else - dis_sprintf("%s:[%s]", seg, index); - } - } - else - { - if (index == NULL) - { - dis_sprintf("%s:0x%x", seg, (unsigned) disp); - } - else - { - if (disp != 0) - dis_sprintf("%s:0x%x(%s,1)", seg, (unsigned) disp, index); - else - dis_sprintf("%s:(%s,1)", seg, index); - } - } -} - -void disassembler::print_memory_access(int datasize, - const char *seg, const char *base, const char *index, int scale, Bit32u disp) -{ - print_datasize(datasize); - - if (intel_mode) - { - if (base == NULL) - { - if (index == NULL) - { - dis_sprintf("%s:0x%x", seg, (unsigned) disp); - } - else - { - if (scale != 0) - { - if (disp != 0) - dis_sprintf("%s:[%s*%d+0x%x]", seg, index, 1< #include "disasm.h" @@ -8,10 +28,6 @@ // Intel STYLE ////////////////// -#define BX_DISASM_SUPPORT_X86_64 - -#ifdef BX_DISASM_SUPPORT_X86_64 - static const char *intel_general_16bit_regname[16] = { "ax", "cx", "dx", "bx", "sp", "bp", "si", "di", "r8w", "r9w", "r10w", "r11w", "r12w", "r13w", "r14w", "r15w" @@ -32,18 +48,6 @@ static const char *intel_general_8bit_regname_rex[16] = { "r8b", "r9b", "r10b", "r11b", "r12b", "r13b", "r14b", "r15b" }; -#else - -static const char *intel_general_16bit_regname[8] = { - "ax", "cx", "dx", "bx", "sp", "bp", "si", "di" -}; - -static const char *intel_general_32bit_regname[8] = { - "eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi" -}; - -#endif - static const char *intel_general_8bit_regname[8] = { "al", "cl", "dl", "bl", "ah", "ch", "dh", "bh" }; @@ -53,23 +57,24 @@ static const char *intel_segment_name[8] = { }; static const char *intel_index16[8] = { - "bx+si", - "bx+di", - "bp+si", - "bp+di", - "si", - "di", - "bp", + "bx+si", + "bx+di", + "bp+si", + "bp+di", + "si", + "di", + "bp", "bx" }; +static const char *intel_vector_reg_name[4] = { + "xmm", "ymm", "???", "zmm" +}; ////////////////// // AT&T STYLE ////////////////// -#ifdef BX_DISASM_SUPPORT_X86_64 - static const char *att_general_16bit_regname[16] = { "%ax", "%cx", "%dx", "%bx", "%sp", "%bp", "%si", "%di", "%r8w", "%r9w", "%r10w", "%r11w", "%r12w", "%r13w", "%r14w", "%r15w" @@ -90,18 +95,6 @@ static const char *att_general_8bit_regname_rex[16] = { "%r8b", "%r9b", "%r10b", "%r11b", "%r12b", "%r13b", "%r14b", "%r15b" }; -#else - -static const char *att_general_16bit_regname[8] = { - "%ax", "%cx", "%dx", "%bx", "%sp", "%bp", "%si", "%di" -}; - -static const char *att_general_32bit_regname[8] = { - "%eax", "%ecx", "%edx", "%ebx", "%esp", "%ebp", "%esi", "%edi" -}; - -#endif - static const char *att_general_8bit_regname[8] = { "%al", "%cl", "%dl", "%bl", "%ah", "%ch", "%dh", "%bh" }; @@ -111,16 +104,20 @@ static const char *att_segment_name[8] = { }; static const char *att_index16[8] = { - "%bx, %si", - "%bx, %di", - "%bp, %si", - "%bp, %di", - "%si", - "%di", - "%bp", + "%bx,%si", + "%bx,%di", + "%bp,%si", + "%bp,%di", + "%si", + "%di", + "%bp", "%bx" }; +static const char *att_vector_reg_name[4] = { + "%xmm", "%ymm", "%???", "%zmm" +}; + #define NULL_SEGMENT_REGISTER 7 void disassembler::initialize_modrm_segregs() @@ -143,32 +140,39 @@ void disassembler::initialize_modrm_segregs() sreg_mod01or10_rm16[6] = segment_name[SS_REG]; sreg_mod01or10_rm16[7] = segment_name[DS_REG]; - sreg_mod01or10_rm32[0] = segment_name[DS_REG]; - sreg_mod01or10_rm32[1] = segment_name[DS_REG]; - sreg_mod01or10_rm32[2] = segment_name[DS_REG]; - sreg_mod01or10_rm32[3] = segment_name[DS_REG]; - sreg_mod01or10_rm32[4] = segment_name[NULL_SEGMENT_REGISTER]; - sreg_mod01or10_rm32[5] = segment_name[SS_REG]; - sreg_mod01or10_rm32[6] = segment_name[DS_REG]; - sreg_mod01or10_rm32[7] = segment_name[DS_REG]; + sreg_mod00_base32[0] = segment_name[DS_REG]; + sreg_mod00_base32[1] = segment_name[DS_REG]; + sreg_mod00_base32[2] = segment_name[DS_REG]; + sreg_mod00_base32[3] = segment_name[DS_REG]; + sreg_mod00_base32[4] = segment_name[SS_REG]; + sreg_mod00_base32[5] = segment_name[DS_REG]; + sreg_mod00_base32[6] = segment_name[DS_REG]; + sreg_mod00_base32[7] = segment_name[DS_REG]; + sreg_mod00_base32[8] = segment_name[DS_REG]; + sreg_mod00_base32[9] = segment_name[DS_REG]; + sreg_mod00_base32[10] = segment_name[DS_REG]; + sreg_mod00_base32[11] = segment_name[DS_REG]; + sreg_mod00_base32[12] = segment_name[DS_REG]; + sreg_mod00_base32[13] = segment_name[DS_REG]; + sreg_mod00_base32[14] = segment_name[DS_REG]; + sreg_mod00_base32[15] = segment_name[DS_REG]; - sreg_mod00_base32[0] = segment_name[DS_REG]; - sreg_mod00_base32[1] = segment_name[DS_REG]; - sreg_mod00_base32[2] = segment_name[DS_REG]; - sreg_mod00_base32[3] = segment_name[DS_REG]; - sreg_mod00_base32[4] = segment_name[SS_REG]; - sreg_mod00_base32[5] = segment_name[DS_REG]; - sreg_mod00_base32[6] = segment_name[DS_REG]; - sreg_mod00_base32[7] = segment_name[DS_REG]; - - sreg_mod01or10_base32[0] = segment_name[DS_REG]; - sreg_mod01or10_base32[1] = segment_name[DS_REG]; - sreg_mod01or10_base32[2] = segment_name[DS_REG]; - sreg_mod01or10_base32[3] = segment_name[DS_REG]; - sreg_mod01or10_base32[4] = segment_name[SS_REG]; - sreg_mod01or10_base32[5] = segment_name[SS_REG]; - sreg_mod01or10_base32[6] = segment_name[DS_REG]; - sreg_mod01or10_base32[7] = segment_name[DS_REG]; + sreg_mod01or10_base32[0] = segment_name[DS_REG]; + sreg_mod01or10_base32[1] = segment_name[DS_REG]; + sreg_mod01or10_base32[2] = segment_name[DS_REG]; + sreg_mod01or10_base32[3] = segment_name[DS_REG]; + sreg_mod01or10_base32[4] = segment_name[SS_REG]; + sreg_mod01or10_base32[5] = segment_name[SS_REG]; + sreg_mod01or10_base32[6] = segment_name[DS_REG]; + sreg_mod01or10_base32[7] = segment_name[DS_REG]; + sreg_mod01or10_base32[8] = segment_name[DS_REG]; + sreg_mod01or10_base32[9] = segment_name[DS_REG]; + sreg_mod01or10_base32[10] = segment_name[DS_REG]; + sreg_mod01or10_base32[11] = segment_name[DS_REG]; + sreg_mod01or10_base32[12] = segment_name[DS_REG]; + sreg_mod01or10_base32[13] = segment_name[DS_REG]; + sreg_mod01or10_base32[14] = segment_name[DS_REG]; + sreg_mod01or10_base32[15] = segment_name[DS_REG]; } ////////////////// @@ -187,6 +191,7 @@ void disassembler::set_syntax_intel() segment_name = intel_segment_name; index16 = intel_index16; + vector_reg_name = intel_vector_reg_name; initialize_modrm_segregs(); } @@ -207,12 +212,16 @@ void disassembler::print_disassembly_intel(const x86_insn *insn, const BxDisasmO dis_sprintf(", "); (this->*entry->Operand3)(insn); } + if (entry->Operand4) { + dis_sprintf(", "); + (this->*entry->Operand4)(insn); + } } ////////////////// // AT&T STYLE ////////////////// - + void disassembler::set_syntax_att() { intel_mode = 0; @@ -225,6 +234,7 @@ void disassembler::set_syntax_att() segment_name = att_segment_name; index16 = att_index16; + vector_reg_name = att_vector_reg_name; initialize_modrm_segregs(); } @@ -240,7 +250,11 @@ void disassembler::print_disassembly_att(const x86_insn *insn, const BxDisasmOpc // print opcode dis_sprintf("%s ", entry->AttOpcode); - if (entry->Operand3) { + if (entry->Operand4) { + (this->*entry->Operand4)(insn); + dis_sprintf(", "); + } + if (entry->Operand3) { (this->*entry->Operand3)(insn); dis_sprintf(", "); }