/*
* libdasm -- simple x86 disassembly library
* (c) 2004 - 2006 jt / nologin.org
*
* opcode_tables.h:
* Opcode tables for FPU, 1, 2 and 3-byte opcodes and
* extensions.
*
*/
#include "libdasm.h"
// lock/rep prefix name table
const char *rep_table[] = {
"lock ", "repne ", "rep "
};
// Register name table (also includes Jcc branch hint prefixes)
const char *reg_table[11][8] = {
{ "eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi" },
{ "ax", "cx", "dx", "bx", "sp", "bp", "si", "di" },
{ "al", "cl", "dl", "bl", "ah", "ch", "dh", "bh" },
{ "es", "cs", "ss", "ds", "fs", "gs", "??", "??" },
{ "dr0", "dr1", "dr2", "dr3", "dr4", "dr5", "dr6", "dr7" },
{ "cr0", "cr1", "cr2", "cr3", "cr4", "cr5", "cr6", "cr7" },
{ "tr0", "tr1", "tr2", "tr3", "tr4", "tr5", "tr6", "tr7" },
{ "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6", "xmm7" },
{ "mm0", "mm1", "mm2", "mm3", "mm4", "mm5", "mm6", "mm7" },
{ "st(0)","st(1)","st(2)","st(3)","st(4)","st(5)","st(6)","st(7)"},
{ "??", "(bnt)","??", "(bt)", "??", "??", "??", "??" },
};
// Name table index
#define REG_GEN_DWORD 0
#define REG_GEN_WORD 1
#define REG_GEN_BYTE 2
#define REG_SEGMENT 3
#define REG_DEBUG 4
#define REG_CONTROL 5
#define REG_TEST 6
#define REG_XMM 7
#define REG_MMX 8
#define REG_FPU 9
#define REG_BRANCH 10 // Not registers strictly speaking..
// 1-byte opcodes
INST inst_table1[256] = {
{ INSTRUCTION_TYPE_ADD, "add", AM_E|OT_b|P_w, AM_G|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_ADD, "add", AM_E|OT_v|P_w, AM_G|OT_v|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_ADD, "add", AM_G|OT_b|P_w, AM_E|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_ADD, "add", AM_G|OT_v|P_w, AM_E|OT_v|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_ADD, "add", AM_REG|REG_EAX|OT_b|P_w, AM_I|OT_b|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_ADD, "add", AM_REG|REG_EAX|OT_v|P_w, AM_I|OT_v|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_PUSH, "push", AM_REG|REG_ES|F_r|P_r, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_POP, "pop", AM_REG|REG_ES|F_r|P_w, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OR, "or", AM_E|OT_b|P_w, AM_G|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OR, "or", AM_E|OT_v|P_w, AM_G|OT_v|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OR, "or", AM_G|OT_b|P_w, AM_E|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OR, "or", AM_G|OT_v|P_w, AM_E|OT_v|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OR, "or", AM_REG|REG_EAX|OT_b|P_w, AM_I|OT_b|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OR, "or", AM_REG|REG_EAX|OT_v|P_w, AM_I|OT_v|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_PUSH, "push", AM_REG|REG_CS|F_r|P_r, FLAGS_NONE, FLAGS_NONE, 0 },
// Escape to 2-byte opcode table
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_ADC, "adc", AM_E|OT_b|P_w, AM_G|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_ADC, "adc", AM_E|OT_v|P_w, AM_G|OT_v|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_ADC, "adc", AM_G|OT_b|P_w, AM_E|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_ADC, "adc", AM_G|OT_v|P_w, AM_E|OT_v|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_ADC, "adc", AM_REG|REG_EAX|OT_b|P_w, AM_I|OT_b|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_ADC, "adc", AM_REG|REG_EAX|OT_v|P_w, AM_I|OT_v|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_PUSH, "push", AM_REG|REG_SS|F_r|P_r, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_POP, "pop", AM_REG|REG_SS|F_r|P_w, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_SBB, "sbb", AM_E|OT_b|P_w, AM_G|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SBB, "sbb", AM_E|OT_v|P_w, AM_G|OT_v|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SBB, "sbb", AM_G|OT_b|P_w, AM_E|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SBB, "sbb", AM_G|OT_v|P_w, AM_E|OT_v|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SBB, "sbb", AM_REG|REG_EAX|OT_b|P_w, AM_I|OT_b|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_SBB, "sbb", AM_REG|REG_EAX|OT_v|P_w, AM_I|OT_v|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_PUSH, "push", AM_REG|REG_DS|F_r|P_r, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_POP, "pop", AM_REG|REG_DS|F_r|P_w, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_AND, "and", AM_E|OT_b|P_w, AM_G|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_AND, "and", AM_E|OT_v|P_w, AM_G|OT_v|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_AND, "and", AM_G|OT_b|P_w, AM_E|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_AND, "and", AM_G|OT_v|P_w, AM_E|OT_v|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_AND, "and", AM_REG|REG_EAX|OT_b|P_w, AM_I|OT_b|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_AND, "and", AM_REG|REG_EAX|OT_v|P_w, AM_I|OT_v|P_r, FLAGS_NONE, 0 },
// seg ES override
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_DCL, "daa", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_SUB, "sub", AM_E|OT_b|P_w, AM_G|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SUB, "sub", AM_E|OT_v|P_w, AM_G|OT_v|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SUB, "sub", AM_G|OT_b|P_w, AM_E|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SUB, "sub", AM_G|OT_v|P_w, AM_E|OT_v|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SUB, "sub", AM_REG|REG_EAX|OT_b|P_w, AM_I|OT_b|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_SUB, "sub", AM_REG|REG_EAX|OT_v|P_w, AM_I|OT_v|P_r, FLAGS_NONE, 0 },
// seg CS override
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_DCL, "das", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_XOR, "xor", AM_E|OT_b|P_w, AM_G|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_XOR, "xor", AM_E|OT_v|P_w, AM_G|OT_v|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_XOR, "xor", AM_G|OT_b|P_w, AM_E|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_XOR, "xor", AM_G|OT_v|P_w, AM_E|OT_v|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_XOR, "xor", AM_REG|REG_EAX|OT_b|P_w, AM_I|OT_b|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_XOR, "xor", AM_REG|REG_EAX|OT_v|P_w, AM_I|OT_v|P_r, FLAGS_NONE, 0 },
// seg SS override
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_ASC, "aaa", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_CMP, "cmp", AM_E|OT_b|P_r, AM_G|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_CMP, "cmp", AM_E|OT_v|P_r, AM_G|OT_v|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_CMP, "cmp", AM_G|OT_b|P_r, AM_E|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_CMP, "cmp", AM_G|OT_v|P_r, AM_E|OT_v|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_CMP, "cmp", AM_REG|REG_EAX|OT_b|P_r, AM_I|OT_b|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_CMP, "cmp", AM_REG|REG_EAX|OT_v|P_r, AM_I|OT_v|P_r, FLAGS_NONE, 0 },
// seg DS override
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_ASC, "aas", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_INC, "inc", AM_REG|REG_EAX|OT_v|P_r, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_INC, "inc", AM_REG|REG_ECX|OT_v|P_r, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_INC, "inc", AM_REG|REG_EDX|OT_v|P_r, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_INC, "inc", AM_REG|REG_EBX|OT_v|P_r, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_INC, "inc", AM_REG|REG_ESP|OT_v|P_r, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_INC, "inc", AM_REG|REG_EBP|OT_v|P_r, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_INC, "inc", AM_REG|REG_ESI|OT_v|P_r, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_INC, "inc", AM_REG|REG_EDI|OT_v|P_r, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_DEC, "dec", AM_REG|REG_EAX|OT_v, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_DEC, "dec", AM_REG|REG_ECX|OT_v, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_DEC, "dec", AM_REG|REG_EDX|OT_v, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_DEC, "dec", AM_REG|REG_EBX|OT_v, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_DEC, "dec", AM_REG|REG_ESP|OT_v, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_DEC, "dec", AM_REG|REG_EBP|OT_v, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_DEC, "dec", AM_REG|REG_ESI|OT_v, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_DEC, "dec", AM_REG|REG_EDI|OT_v, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_PUSH, "push", AM_REG|REG_EAX|OT_v|P_r, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_PUSH, "push", AM_REG|REG_ECX|OT_v|P_r, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_PUSH, "push", AM_REG|REG_EDX|OT_v|P_r, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_PUSH, "push", AM_REG|REG_EBX|OT_v|P_r, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_PUSH, "push", AM_REG|REG_ESP|OT_v|P_r, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_PUSH, "push", AM_REG|REG_EBP|OT_v|P_r, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_PUSH, "push", AM_REG|REG_ESI|OT_v|P_r, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_PUSH, "push", AM_REG|REG_EDI|OT_v|P_r, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_POP, "pop", AM_REG|REG_EAX|OT_v|P_w, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_POP, "pop", AM_REG|REG_ECX|OT_v|P_w, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_POP, "pop", AM_REG|REG_EDX|OT_v|P_w, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_POP, "pop", AM_REG|REG_EBX|OT_v|P_w, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_POP, "pop", AM_REG|REG_ESP|OT_v|P_w, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_POP, "pop", AM_REG|REG_EBP|OT_v|P_w, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_POP, "pop", AM_REG|REG_ESI|OT_v|P_w, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_POP, "pop", AM_REG|REG_EDI|OT_v|P_w, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_PUSH , "pusha", FLAGS_NONE|P_r, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_POP, "popa", FLAGS_NONE|P_w, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, "bound", AM_G|OT_v|P_r, AM_M|OT_v|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_PRIV, "arpl", AM_E|OT_w|P_r, AM_G|OT_w|P_r, FLAGS_NONE, 1 },
// seg FS override
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
// seg GS override
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
// operand size override
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
// address size override
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_PUSH, "push", AM_I|OT_v|P_r, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_EIMUL, "imul", AM_G|OT_v|P_r, AM_E|OT_v|P_r, AM_I|OT_v|P_r,1 },
{ INSTRUCTION_TYPE_PUSH, "push", AM_I|OT_b|F_s|P_r, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_EIMUL, "imul", AM_G|OT_v|P_r, AM_E|OT_v|P_r, AM_I|OT_b|F_s|P_r,1 },
{ INSTRUCTION_TYPE_PRIV, "insb", FLAGS_NONE|P_w, FLAGS_NONE|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_PRIV, "insv", FLAGS_NONE|P_w, FLAGS_NONE|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_PRIV, "outsb", FLAGS_NONE|P_w, FLAGS_NONE|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_PRIV, "outsv", FLAGS_NONE|P_w, FLAGS_NONE|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_JMPC, "jo", AM_J|OT_b|P_x, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_JMPC, "jno", AM_J|OT_b|P_x, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_JMPC, "jc", AM_J|OT_b|P_x, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_JMPC, "jnc", AM_J|OT_b|P_x, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_JMPC, "jz", AM_J|OT_b|P_x, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_JMPC, "jnz", AM_J|OT_b|P_x, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_JMPC, "jna", AM_J|OT_b|P_x, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_JMPC, "ja", AM_J|OT_b|P_x, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_JMPC, "js", AM_J|OT_b|P_x, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_JMPC, "jns", AM_J|OT_b|P_x, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_JMPC, "jp", AM_J|OT_b|P_x, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_JMPC, "jpo", AM_J|OT_b|P_x, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_JMPC, "jl", AM_J|OT_b|P_x, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_JMPC, "jnl", AM_J|OT_b|P_x, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_JMPC, "jng", AM_J|OT_b|P_x, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_JMPC, "jg", AM_J|OT_b|P_x, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, "g1", AM_E|OT_b, AM_I|OT_b, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "g1", AM_E|OT_v, AM_I|OT_v, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "g1", AM_E|OT_b, AM_I|OT_b, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "g1", AM_E|OT_v, AM_I|OT_b|F_s, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_TEST, "test", AM_E|OT_b|P_r, AM_G|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_TEST, "test", AM_E|OT_v|P_r, AM_G|OT_v|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_XCHG, "xchg", AM_E|OT_b|P_w, AM_G|OT_b|P_w, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_XCHG, "xchg", AM_E|OT_v|P_w, AM_G|OT_v|P_w, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MOV, "mov", AM_E|OT_b|P_w, AM_G|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MOV, "mov", AM_E|OT_v|P_w, AM_G|OT_v|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MOV, "mov", AM_G|OT_b|P_w, AM_E|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MOV, "mov", AM_G|OT_v|P_w, AM_E|OT_v|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MOVSR, "mov", AM_E|OT_w|P_w, AM_S|OT_w|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_LEA, "lea", AM_G|OT_v|P_w, AM_M|OT_v|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MOVSR, "mov", AM_S|OT_w|P_w, AM_E|OT_w|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_POP, "pop", AM_E|OT_v|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "nop", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_XCHG, "xchg", AM_REG|REG_EAX|OT_v|P_w, AM_REG|REG_ECX|OT_v|P_w, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_XCHG, "xchg", AM_REG|REG_EAX|OT_v|P_w, AM_REG|REG_EDX|OT_v|P_w, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_XCHG, "xchg", AM_REG|REG_EAX|OT_v|P_w, AM_REG|REG_EBX|OT_v|P_w, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_XCHG, "xchg", AM_REG|REG_EAX|OT_v|P_w, AM_REG|REG_ESP|OT_v|P_w, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_XCHG, "xchg", AM_REG|REG_EAX|OT_v|P_w, AM_REG|REG_EBP|OT_v|P_w, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_XCHG, "xchg", AM_REG|REG_EAX|OT_v|P_w, AM_REG|REG_ESI|OT_v|P_w, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_XCHG, "xchg", AM_REG|REG_EAX|OT_v|P_w, AM_REG|REG_EDI|OT_v|P_w, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, "cbw", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, "cwd", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_CALL, "callf", AM_A|OT_v|P_x, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, "wait", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_PUSH, "pushf", FLAGS_NONE|P_r, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_POP, "popf", FLAGS_NONE|P_w, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, "sahf", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, "lahf", FLAGS_NONE|P_w, FLAGS_NONE|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_MOV, "mov", AM_REG|REG_EAX|OT_b|P_w, AM_O|OT_v|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_MOV, "mov", AM_REG|REG_EAX|OT_v|P_w, AM_O|OT_v|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_MOV, "mov", AM_O|OT_v|P_w, AM_REG|REG_EAX|OT_b|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_MOV, "mov", AM_O|OT_v|P_w, AM_REG|REG_EAX|OT_v|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_MOVS, "movsb", FLAGS_NONE|P_w, FLAGS_NONE|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_MOVS, "movsd", FLAGS_NONE|P_w, FLAGS_NONE|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_CMPS, "cmpsb", FLAGS_NONE|P_r, FLAGS_NONE|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_CMPS, "cmpsd", FLAGS_NONE|P_r, FLAGS_NONE|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_TEST, "test", AM_REG|REG_EAX|OT_b|P_r, AM_I|OT_b|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_TEST, "test", AM_REG|REG_EAX|OT_v|P_r, AM_I|OT_v|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_STOS, "stosb", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_STOS, "stosd", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_LODS, "lodsb", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_LODS, "lodsd", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_SCAS, "scasb", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_SCAS, "scasd", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_MOV, "mov", AM_REG|REG_AL|OT_b|P_w, AM_I|OT_b|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_MOV, "mov", AM_REG|REG_CL|OT_b|P_w, AM_I|OT_b|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_MOV, "mov", AM_REG|REG_DL|OT_b|P_w, AM_I|OT_b|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_MOV, "mov", AM_REG|REG_BL|OT_b|P_w, AM_I|OT_b|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_MOV, "mov", AM_REG|REG_AH|OT_b|P_w, AM_I|OT_b|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_MOV, "mov", AM_REG|REG_CH|OT_b|P_w, AM_I|OT_b|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_MOV, "mov", AM_REG|REG_DH|OT_b|P_w, AM_I|OT_b|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_MOV, "mov", AM_REG|REG_BH|OT_b|P_w, AM_I|OT_b|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_MOV, "mov", AM_REG|REG_EAX|OT_v|P_w, AM_I|OT_v|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_MOV, "mov", AM_REG|REG_ECX|OT_v|P_w, AM_I|OT_v|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_MOV, "mov", AM_REG|REG_EDX|OT_v|P_w, AM_I|OT_v|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_MOV, "mov", AM_REG|REG_EBX|OT_v|P_w, AM_I|OT_v|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_MOV, "mov", AM_REG|REG_ESP|OT_v|P_w, AM_I|OT_v|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_MOV, "mov", AM_REG|REG_EBP|OT_v|P_w, AM_I|OT_v|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_MOV, "mov", AM_REG|REG_ESI|OT_v|P_w, AM_I|OT_v|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_MOV, "mov", AM_REG|REG_EDI|OT_v|P_w, AM_I|OT_v|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, "g2", AM_E|OT_b, AM_I|OT_b, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "g2", AM_E|OT_v, AM_I|OT_b, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_RET, "retn", AM_I|OT_w|P_r, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_RET, "ret", FLAGS_NONE|P_r, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_LFP, "les", AM_G|OT_v|P_w, AM_M|OT_v|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_LFP, "lds", AM_G|OT_v|P_w, AM_M|OT_v|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MOV, "mov", AM_E|OT_b|P_w, AM_I|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MOV, "mov", AM_E|OT_v|P_w, AM_I|OT_v|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "enter", AM_I|OT_w|P_w, AM_I|OT_b|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_POP, "leave", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_RET, "retf", AM_I|OT_w|P_r, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, "retf", FLAGS_NONE|P_r, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_INT, "int3", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_INT, "int", AM_I|OT_b|P_r, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, "into", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, "iret", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, "g2", AM_E|OT_b, AM_I1|OT_b, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "g2", AM_E|OT_v, AM_I1|OT_b, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "g2", AM_E|OT_b, AM_REG|REG_CL|OT_b, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "g2", AM_E|OT_v, AM_REG|REG_CL|OT_b, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_ASC, "aam", AM_I|OT_b|P_w, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_ASC, "aad", AM_I|OT_b|P_w, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, "salc", FLAGS_NONE|P_w, FLAGS_NONE|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, "xlat", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, "esc", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, "esc", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, "esc", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, "esc", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, "esc", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, "esc", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, "esc", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, "esc", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_LOOP, "loopn", AM_J|OT_b|P_x, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_LOOP, "loope", AM_J|OT_b|P_x, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_LOOP, "loop", AM_J|OT_b|P_x, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_JMPC, "jecxz", AM_J|OT_b|P_x, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_PRIV, "in", AM_REG|REG_AL|OT_b|P_w, AM_I|OT_b|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_PRIV, "in", AM_REG|REG_EAX|OT_v|P_w, AM_I|OT_b|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_PRIV, "out", AM_I|OT_b|P_w, AM_REG|REG_AL|OT_b|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_PRIV, "out", AM_I|OT_b|P_w, AM_REG|REG_EAX|OT_v|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_CALL, "call", AM_J|OT_v|P_x, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_JMP, "jmp", AM_J|OT_v|P_x, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_JMP, "jmpf", AM_A|OT_v|P_x, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_JMP, "jmp", AM_J|OT_b|P_x, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_PRIV, "in", AM_REG|REG_EAX|OT_b|P_w, AM_REG|REG_EDX|OT_w|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_PRIV, "in", AM_REG|REG_EAX|OT_v|P_w, AM_REG|REG_EDX|OT_w|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_PRIV, "out", AM_REG|REG_EDX|OT_w|P_w, AM_REG|REG_EAX|OT_b|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_PRIV, "out", AM_REG|REG_EDX|OT_w|P_w, AM_REG|REG_EAX|OT_v|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, "ext", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, "int1", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, "ext", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, "ext", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_PRIV, "hlt", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, "cmc", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, "g3", AM_E|OT_b, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "g3", AM_E|OT_v, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "clc", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, "stc", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, "cli", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, "sti", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, "cld", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, "std", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, "g4", AM_E|OT_b, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "g5", AM_E|OT_v, FLAGS_NONE, FLAGS_NONE, 1 },
};
// 2-byte instructions
INST inst_table2[256] = {
{ INSTRUCTION_TYPE_OTHER, "g6", AM_E|OT_w, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "g7", AM_M|OT_w, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_PRIV, "lar", AM_G|OT_v|P_w, AM_E|OT_w|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_PRIV, "lsl", AM_G|OT_v|P_w, AM_E|OT_w|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, "loadall286",FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, "clts", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, "loadall", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_PRIV, "invd", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, "wbinvd", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, "ud2", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_SSE|TYPE_3,"movups", AM_V|OT_ps|P_w, AM_W|OT_ps|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE|TYPE_3,"movups", AM_W|OT_ps|P_w, AM_V|OT_ps|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE|TYPE_3,"movlps", AM_V|OT_q|P_w, AM_M|OT_q|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE|TYPE_3,"movlps", AM_M|OT_q|P_w, AM_V|OT_q|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE|TYPE_3,"unpcklps",AM_V|OT_ps|P_w, AM_W|OT_ps|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE|TYPE_3,"unpcklps",AM_V|OT_ps|P_w, AM_W|OT_ps|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE|TYPE_3,"movhps", AM_V|OT_q|P_w, AM_M|OT_q|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE|TYPE_3,"movhps", AM_M|OT_q|P_w, AM_V|OT_ps|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_PRIV, "mov", AM_R|OT_d|P_w, AM_C|OT_d|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_PRIV, "mov", AM_R|OT_d|P_w, AM_D|OT_d|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_PRIV, "mov", AM_C|OT_d|P_w, AM_R|OT_d|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_PRIV, "mov", AM_D|OT_d|P_w, AM_R|OT_d|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_PRIV, "mov", AM_R|OT_d|P_w, AM_T|OT_d|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_PRIV, "mov", AM_T|OT_d|P_w, AM_R|OT_d|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_SSE|TYPE_3,"movaps", AM_V|OT_ps|P_w, AM_W|OT_ps|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE|TYPE_3,"movaps", AM_W|OT_ps|P_w, AM_V|OT_ps|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE|TYPE_3,"cvtpi2ps",AM_V|OT_ps|P_r, AM_Q|OT_q|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE|TYPE_3,"movntps",AM_M|OT_ps|P_w, AM_V|OT_ps|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE|TYPE_3,"cvttps2pi",AM_P|OT_q|P_r, AM_W|OT_q|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE|TYPE_3,"cvtps2pi",AM_P|OT_q|P_r, AM_W|OT_q|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE|TYPE_3,"ucomiss",AM_V|OT_ss|P_w, AM_W|OT_ss|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE|TYPE_3,"comiss", AM_V|OT_ss|P_w, AM_W|OT_ss|P_w, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "wrmsr", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, "rdtsc", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_PRIV, "rdmsr", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, "rdpmc", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, "sysenter", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_PRIV, "sysexit", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_MOVC, "cmovo", AM_G|OT_v|P_w, AM_E|OT_v|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MOVC, "cmovno", AM_G|OT_v|P_w, AM_E|OT_v|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MOVC, "cmovb", AM_G|OT_v|P_w, AM_E|OT_v|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MOVC, "cmovae", AM_G|OT_v|P_w, AM_E|OT_v|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MOVC, "cmove", AM_G|OT_v|P_w, AM_E|OT_v|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MOVC, "cmovne", AM_G|OT_v|P_w, AM_E|OT_v|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MOVC, "cmovbe", AM_G|OT_v|P_w, AM_E|OT_v|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MOVC, "cmova", AM_G|OT_v|P_w, AM_E|OT_v|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MOVC, "cmovs", AM_G|OT_v|P_w, AM_E|OT_v|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MOVC, "cmovns", AM_G|OT_v|P_w, AM_E|OT_v|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MOVC, "cmovp", AM_G|OT_v|P_w, AM_E|OT_v|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MOVC, "cmovnp", AM_G|OT_v|P_w, AM_E|OT_v|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MOVC, "cmovl", AM_G|OT_v|P_w, AM_E|OT_v|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MOVC, "cmovge", AM_G|OT_v|P_w, AM_E|OT_v|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MOVC, "cmovle", AM_G|OT_v|P_w, AM_E|OT_v|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MOVC, "cmovg", AM_G|OT_v|P_w, AM_E|OT_v|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE|TYPE_3,"movmskps",AM_G|OT_d|P_w, AM_V|OT_ps|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE|TYPE_3,"sqrtps", AM_V|OT_ps|P_w, AM_W|OT_ps|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE|TYPE_3,"rsqrtps",AM_V|OT_ps|P_w, AM_W|OT_ps|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE|TYPE_3,"rcpps", AM_V|OT_ps|P_w, AM_W|OT_ps|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE|TYPE_3,"andps", AM_V|OT_ps|P_w, AM_W|OT_ps|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE|TYPE_3,"andnps", AM_V|OT_ps|P_w, AM_W|OT_ps|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE|TYPE_3,"orps", AM_V|OT_ps|P_w, AM_W|OT_ps|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE|TYPE_3,"xorps", AM_V|OT_ps|P_w, AM_W|OT_ps|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE|TYPE_3,"addps", AM_V|OT_ps|P_w, AM_W|OT_ps|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE|TYPE_3,"mulps", AM_V|OT_ps|P_w, AM_W|OT_ps|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE|TYPE_3,"cvtps2pd",AM_V|OT_pd|P_r, AM_W|OT_q|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE|TYPE_3,"cvtdq2ps",AM_V|OT_ps|P_r, AM_W|OT_dq|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE|TYPE_3,"subps", AM_V|OT_ps|P_w, AM_W|OT_ps|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE|TYPE_3,"minps", AM_V|OT_ps|P_w, AM_W|OT_ps|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE|TYPE_3,"divps", AM_V|OT_ps|P_w, AM_W|OT_ps|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE|TYPE_3,"maxps", AM_V|OT_ps|P_w, AM_W|OT_ps|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MMX|TYPE_3,"punpcklbw",AM_P|OT_q|P_w, AM_Q|OT_d|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MMX|TYPE_3,"punpcklwd",AM_P|OT_q|P_w, AM_Q|OT_d|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MMX|TYPE_3,"punpckldq",AM_P|OT_q|P_w, AM_Q|OT_d|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MMX|TYPE_3,"packusdw",AM_P|OT_q|P_w, AM_Q|OT_d|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MMX|TYPE_3,"pcmpgtb",AM_P|OT_q|P_w, AM_Q|OT_d|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MMX|TYPE_3,"pcmpgtw",AM_P|OT_q|P_w, AM_Q|OT_d|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MMX|TYPE_3,"pcmpgtd",AM_P|OT_q|P_w, AM_Q|OT_d|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MMX|TYPE_3,"packsswb",AM_P|OT_q|P_w, AM_Q|OT_d|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MMX|TYPE_3,"punpckhbw",AM_P|OT_q|P_w, AM_Q|OT_d|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MMX|TYPE_3,"punpckhbd",AM_P|OT_q|P_w, AM_Q|OT_d|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MMX|TYPE_3,"punpckhdq",AM_P|OT_q|P_w, AM_Q|OT_d|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MMX|TYPE_3,"packssdw",AM_P|OT_q|P_w, AM_Q|OT_d|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER|TYPE_3,NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER|TYPE_3,NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_MMX|TYPE_3, "movd", AM_P|OT_d|P_w, AM_E|OT_d|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MMX|TYPE_3,"movq", AM_P|OT_q|P_w, AM_Q|OT_q|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MMX|TYPE_3,"pshufw", AM_P|OT_q|P_w, AM_Q|OT_q|P_r, AM_I|OT_b, 1 },
// groups 12-14
{ INSTRUCTION_TYPE_MMX, "g12", AM_P|OT_q, AM_I|OT_b, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MMX, "g13", AM_P|OT_q, AM_I|OT_b, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MMX, "g14", AM_P|OT_q, AM_I|OT_b, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MMX|TYPE_3,"pcmpeqb",AM_P|OT_q|P_w, AM_Q|OT_q|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MMX|TYPE_3,"pcmpeqw",AM_P|OT_q|P_w, AM_Q|OT_q|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MMX|TYPE_3,"pcmpeqd",AM_P|OT_q|P_w, AM_Q|OT_q|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MMX, "emms", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER||TYPE_3,NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER||TYPE_3,NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_MMX|TYPE_3,"movd", AM_E|OT_d|P_w, AM_P|OT_d|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MMX|TYPE_3,"movq", AM_Q|OT_q|P_w, AM_P|OT_q|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_JMPC, "jo", AM_J|OT_v|P_x, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_JMPC, "jno", AM_J|OT_v|P_x, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_JMPC, "jc", AM_J|OT_v|P_x, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_JMPC, "jnc", AM_J|OT_v|P_x, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_JMPC, "jz", AM_J|OT_v|P_x, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_JMPC, "jnz", AM_J|OT_v|P_x, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_JMPC, "jna", AM_J|OT_v|P_x, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_JMPC, "ja", AM_J|OT_v|P_x, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_JMPC, "js", AM_J|OT_v|P_x, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_JMPC, "jns", AM_J|OT_v|P_x, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_JMPC, "jp", AM_J|OT_v|P_x, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_JMPC, "jpo", AM_J|OT_v|P_x, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_JMPC, "jl", AM_J|OT_v|P_x, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_JMPC, "jnl", AM_J|OT_v|P_x, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_JMPC, "jng", AM_J|OT_v|P_x, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_JMPC, "jg", AM_J|OT_v|P_x, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_SETC, "seto", AM_E|OT_b|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SETC, "setno", AM_E|OT_b|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SETC, "setb", AM_E|OT_b|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SETC, "setnb", AM_E|OT_b|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SETC, "setz", AM_E|OT_b|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SETC, "setnz", AM_E|OT_b|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SETC, "setbe", AM_E|OT_b|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SETC, "setnbe", AM_E|OT_b|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SETC, "sets", AM_E|OT_b|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SETC, "setns", AM_E|OT_b|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SETC, "setp", AM_E|OT_b|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SETC, "setnp", AM_E|OT_b|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SETC, "setl", AM_E|OT_b|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SETC, "setnl", AM_E|OT_b|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SETC, "setle", AM_E|OT_b|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SETC, "setnle", AM_E|OT_b|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_PUSH, "push", AM_REG|REG_FS|F_r|P_r, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_POP, "pop", AM_REG|REG_FS|F_r|P_w, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, "cpuid", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_BT, "bt", AM_E|OT_v|P_r, AM_G|OT_v|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "shld", AM_E|OT_v|P_w, AM_G|OT_v|P_r, AM_I|OT_b|P_r,1 },
{ INSTRUCTION_TYPE_OTHER, "shld", AM_E|OT_v|P_w, AM_G|OT_v|P_r, AM_REG|REG_ECX|OT_b|P_r,1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_PUSH, "push", AM_REG|REG_GS|F_r|P_r, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_POP, "pop", AM_REG|REG_GS|F_r|P_w, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, "rsm", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_BTS, "bts", AM_E|OT_v|P_r, AM_G|OT_v|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "shrd", AM_E|OT_v|P_w, AM_G|OT_v|P_r, AM_I|OT_b|P_r,1 },
{ INSTRUCTION_TYPE_OTHER, "shrd", AM_E|OT_v|P_w, AM_G|OT_v|P_r, AM_REG|REG_ECX|OT_b|P_r,1 },
// XXX: check addressing mode, Intel manual is a little bit confusing...
{ INSTRUCTION_TYPE_OTHER, "grp15", AM_E|OT_v, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_EIMUL, "imul", AM_G|OT_v|P_r, AM_E|OT_v|P_r, FLAGS_NONE|P_r,1 },
{ INSTRUCTION_TYPE_OTHER, "cmpxchg", AM_E|OT_b|P_w, AM_G|OT_b|P_w, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "cmpxchg", AM_E|OT_v|P_w, AM_G|OT_v|P_w, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_LFP, "lss", AM_G|OT_v|P_w, AM_M|OT_v|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_BTR, "btr", AM_E|OT_v|P_r, AM_G|OT_v|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_LFP, "lfs", AM_G|OT_v|P_w, AM_M|OT_v|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_LFP, "lgs", AM_G|OT_v|P_w, AM_M|OT_v|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MOVZX, "movzx", AM_G|OT_v|P_w, AM_E|OT_v|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MOVZX, "movzx", AM_G|OT_d|P_w, AM_E|OT_v|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
// XXX: group 10 / invalid opcode?
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, "g8", AM_E|OT_v, AM_I|OT_b, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_BTC, "btc", AM_E|OT_v|P_r, AM_G|OT_v|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_BSF, "bsf", AM_G|OT_v|P_r, AM_E|OT_v|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_BSR, "bsr", AM_G|OT_v|P_r, AM_E|OT_v|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MOVSX, "movsx", AM_G|OT_v|P_w, AM_E|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MOVSX, "movsx", AM_G|OT_v|P_w, AM_E|OT_w|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_XADD, "xadd", AM_E|OT_b|P_w, AM_G|OT_b|P_w, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_XADD, "xadd", AM_E|OT_v|P_w, AM_G|OT_v|P_w, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE|TYPE_3,"cmpps", AM_V|OT_ps|P_r, AM_W|OT_ps|P_r, AM_I|OT_b, 1 },
{ INSTRUCTION_TYPE_OTHER, "movnti", AM_M|OT_d|P_w, AM_G|OT_d|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE|TYPE_3,"pinsrw", AM_P|OT_w|P_w, AM_E|OT_w|P_r, AM_I|OT_b, 1 },
{ INSTRUCTION_TYPE_SSE|TYPE_3,"pextrv", AM_G|OT_w|P_w, AM_P|OT_w|P_r, AM_I|OT_b|P_r,1 },
{ INSTRUCTION_TYPE_SSE|TYPE_3,"shufps", AM_V|OT_ps|P_w, AM_W|OT_ps|P_r, AM_I|OT_b|P_r,1 },
{ INSTRUCTION_TYPE_OTHER, "g9", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_BSWAP, "bswap", AM_REG|REG_EAX|OT_v|P_w, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_BSWAP, "bswap", AM_REG|REG_ECX|OT_v|P_w, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_BSWAP, "bswap", AM_REG|REG_EDX|OT_v|P_w, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_BSWAP, "bswap", AM_REG|REG_EBX|OT_v|P_w, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_BSWAP, "bswap", AM_REG|REG_ESP|OT_v|P_w, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_BSWAP, "bswap", AM_REG|REG_EBP|OT_v|P_w, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_BSWAP, "bswap", AM_REG|REG_ESI|OT_v|P_w, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_BSWAP, "bswap", AM_REG|REG_EDI|OT_v|P_w, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER|TYPE_3,NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_MMX|TYPE_3,"psrlw", AM_P|OT_q|P_w, AM_Q|OT_q|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MMX|TYPE_3,"psrld", AM_P|OT_q|P_w, AM_Q|OT_q|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MMX|TYPE_3,"psrlq", AM_P|OT_q|P_w, AM_Q|OT_q|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MMX|TYPE_3,"paddq", AM_P|OT_q|P_w, AM_Q|OT_q|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MMX|TYPE_3,"pmullw", AM_P|OT_q|P_w, AM_Q|OT_q|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER|TYPE_3,NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_MMX|TYPE_3,"pmovmskb",AM_G|OT_q|P_w, AM_P|OT_q|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MMX|TYPE_3,"psubusb",AM_P|OT_q|P_w, AM_Q|OT_q|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MMX|TYPE_3,"psubusw",AM_P|OT_q|P_w, AM_Q|OT_q|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MMX|TYPE_3,"pminub", AM_P|OT_q|P_w, AM_Q|OT_q|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MMX|TYPE_3,"pand", AM_P|OT_q|P_w, AM_Q|OT_q|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MMX|TYPE_3,"paddusb",AM_P|OT_q|P_w, AM_Q|OT_q|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MMX|TYPE_3,"paddusw",AM_P|OT_q|P_w, AM_Q|OT_q|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MMX|TYPE_3,"pmaxsw", AM_P|OT_q|P_w, AM_Q|OT_q|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MMX|TYPE_3,"pandn", AM_P|OT_q|P_w, AM_Q|OT_q|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MMX|TYPE_3,"pavgb", AM_P|OT_q|P_w, AM_Q|OT_q|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MMX|TYPE_3,"psraw", AM_P|OT_q|P_w, AM_Q|OT_q|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MMX|TYPE_3,"psrad", AM_P|OT_q|P_w, AM_Q|OT_q|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MMX|TYPE_3,"pavgw", AM_P|OT_q|P_w, AM_Q|OT_q|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MMX|TYPE_3,"pmulhuw",AM_P|OT_q|P_w, AM_Q|OT_q|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MMX|TYPE_3,"pmulhw", AM_P|OT_q|P_w, AM_Q|OT_q|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER|TYPE_3,NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_MMX|TYPE_3,"movntq", AM_M|OT_q|P_w, AM_V|OT_q|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MMX|TYPE_3,"psubsb", AM_P|OT_q|P_w, AM_Q|OT_q|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MMX|TYPE_3,"psubsw", AM_P|OT_q|P_w, AM_Q|OT_q|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MMX|TYPE_3,"pminsw", AM_P|OT_q|P_w, AM_Q|OT_q|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MMX|TYPE_3,"por", AM_P|OT_q|P_w, AM_Q|OT_q|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MMX|TYPE_3,"paddsb", AM_P|OT_q|P_w, AM_Q|OT_q|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MMX|TYPE_3,"paddsw", AM_P|OT_q|P_w, AM_Q|OT_q|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MMX|TYPE_3,"pmaxsw", AM_P|OT_q|P_w, AM_Q|OT_q|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MMX|TYPE_3,"pxor", AM_P|OT_q, AM_Q|OT_q, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER|TYPE_3,NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_MMX|TYPE_3,"psllw", AM_P|OT_q|P_w, AM_Q|OT_q|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MMX|TYPE_3,"pslld", AM_P|OT_q|P_w, AM_Q|OT_q|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MMX|TYPE_3,"psllq", AM_P|OT_q|P_w, AM_Q|OT_q|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MMX|TYPE_3,"pmuludq",AM_P|OT_q|P_w, AM_Q|OT_q|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MMX|TYPE_3,"pmaddwd",AM_P|OT_q|P_w, AM_Q|OT_q|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MMX|TYPE_3,"psadbw", AM_P|OT_q|P_w, AM_Q|OT_q|P_r, FLAGS_NONE, 1 },
// XXX: check operand types
{ INSTRUCTION_TYPE_MMX|TYPE_3,"maskmovq",AM_P|OT_q|P_w, AM_Q|OT_q|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MMX|TYPE_3,"psubb", AM_P|OT_q|P_w, AM_Q|OT_q|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MMX|TYPE_3,"psubw", AM_P|OT_q|P_w, AM_Q|OT_q|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MMX|TYPE_3,"psubd", AM_P|OT_q|P_w, AM_Q|OT_q|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MMX|TYPE_3,"psubq", AM_P|OT_q|P_w, AM_Q|OT_q|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MMX|TYPE_3,"paddb", AM_P|OT_q|P_w, AM_Q|OT_q|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MMX|TYPE_3,"paddw", AM_P|OT_q|P_w, AM_Q|OT_q|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MMX|TYPE_3,"paddd", AM_P|OT_q|P_w, AM_Q|OT_q|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
};
// 3-byte instructions, prefix 0x66
// Yeah, I know, it's waste to use a full 256-instruction table but now
// I'm prepared for future Intel extensions ;-)
INST inst_table3_66[256] = {
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_SSE, "movupd", AM_V|OT_pd|P_w, AM_W|OT_pd|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "movupd", AM_W|OT_pd|P_w, AM_V|OT_pd|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "movlpd", AM_V|OT_q|P_w, AM_M|OT_q|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "movlpd", AM_M|OT_q|P_w, AM_V|OT_q|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "unpcklpd", AM_V|OT_pd|P_w, AM_W|OT_pd|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "unpcklpd", AM_V|OT_pd|P_w, AM_W|OT_pd|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "movhpd", AM_V|OT_q|P_w, AM_M|OT_q|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "movhpd", AM_M|OT_q|P_w, AM_V|OT_pd|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_SSE, "movapd", AM_V|OT_pd|P_w, AM_W|OT_pd|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "movapd", AM_W|OT_pd|P_w, AM_V|OT_pd|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "cvtpi2pd", AM_V|OT_pd|P_r, AM_Q|OT_q|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "movntpd", AM_M|OT_pd|P_w, AM_V|OT_pd|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "cvttpd2pi", AM_P|OT_q|P_r, AM_W|OT_pd|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "cvtpd2pi", AM_P|OT_q|P_r, AM_W|OT_pd|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "ucomisd", AM_V|OT_sd|P_w, AM_W|OT_sd|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "comisd", AM_V|OT_sd|P_w, AM_W|OT_sd|P_w, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_SSE, "movmskpd", AM_G|OT_d|P_w, AM_V|OT_pd|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "sqrtpd", AM_V|OT_pd|P_w, AM_W|OT_pd|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_SSE, "andpd", AM_V|OT_pd|P_w, AM_W|OT_pd|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "andnpd", AM_V|OT_pd|P_w, AM_W|OT_pd|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "orpd", AM_V|OT_pd|P_w, AM_W|OT_pd|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "xorpd", AM_V|OT_pd|P_w, AM_W|OT_pd|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "addpd", AM_V|OT_pd|P_w, AM_W|OT_ps|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "mulpd", AM_V|OT_pd|P_w, AM_W|OT_ps|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "cvtpd2ps", AM_V|OT_pd|P_r, AM_W|OT_pd|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "cvtps2dq", AM_V|OT_pd|P_r, AM_W|OT_ps|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "subpd", AM_V|OT_pd|P_w, AM_W|OT_ps|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "minpd", AM_V|OT_pd|P_w, AM_W|OT_pd|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "divpd", AM_V|OT_pd|P_w, AM_W|OT_pd|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "maxpd", AM_V|OT_pd|P_w, AM_W|OT_pd|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "punpcklbw", AM_V|OT_dq|P_w, AM_W|OT_dq|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "punpcklwd", AM_V|OT_dq|P_w, AM_W|OT_dq|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "punockldq", AM_V|OT_dq|P_w, AM_W|OT_dq|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "packusdw", AM_V|OT_dq|P_w, AM_W|OT_dq|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "pcmpgtb", AM_V|OT_dq|P_w, AM_W|OT_dq|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "pcmpgtw", AM_V|OT_dq|P_w, AM_W|OT_dq|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "pcmpgtd", AM_V|OT_dq|P_w, AM_W|OT_dq|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "packsswb", AM_V|OT_dq|P_w, AM_W|OT_dq|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "punpckhbw", AM_V|OT_dq|P_w, AM_Q|OT_dq|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "punpckhbd", AM_V|OT_dq|P_w, AM_Q|OT_dq|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "punpckhdq", AM_V|OT_dq|P_w, AM_Q|OT_dq|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "packssdw", AM_V|OT_dq|P_w, AM_Q|OT_dq|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "punpcklqdq", AM_V|OT_dq|P_w, AM_W|OT_dq|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "punpckhqd", AM_V|OT_dq|P_w, AM_W|OT_dq|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "movd", AM_V|OT_d|P_w, AM_E|OT_dq|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "movdqa", AM_V|OT_dq|P_w, AM_W|OT_dq|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "pshufd", AM_V|OT_dq|P_w, AM_W|OT_dq|P_r, AM_I|OT_b, 1 },
// groups 12-14
{ INSTRUCTION_TYPE_SSE, "g12", AM_P|OT_dq, AM_I|OT_b, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "g13", AM_W|OT_dq, AM_I|OT_b, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "g14", AM_W|OT_dq, AM_I|OT_b, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "pcmpeqb", AM_V|OT_dq|P_w, AM_W|OT_dq|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "pcmpeqw", AM_V|OT_dq|P_w, AM_W|OT_dq|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "pcmpeqd", AM_V|OT_dq|P_w, AM_W|OT_dq|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_SSE, "haddpd", AM_V|OT_pd, AM_W|OT_pd, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "hsubpd", AM_V|OT_pd, AM_W|OT_pd, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "movd", AM_E|OT_d|P_w, AM_V|OT_d|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "movdqa", AM_W|OT_dq|P_w, AM_V|OT_dq|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_SSE, "cmppd", AM_V|OT_pd|P_r, AM_W|OT_pd|P_r, AM_I|OT_b, 1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_SSE, "pinsrw", AM_V|OT_w|P_w, AM_E|OT_w|P_r, AM_I|OT_b, 1 },
{ INSTRUCTION_TYPE_SSE, "pextrv", AM_G|OT_w|P_w, AM_V|OT_w|P_r, AM_I|OT_b|P_r,1 },
{ INSTRUCTION_TYPE_SSE, "shufpd", AM_V|OT_pd|P_w, AM_W|OT_pd|P_r, AM_I|OT_b|P_r,1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_SSE, "addsubpd", AM_V|OT_pd|P_w, AM_W|OT_pd|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "psrlw", AM_V|OT_dq|P_w, AM_Q|OT_dq|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "psrld", AM_V|OT_dq|P_w, AM_W|OT_dq|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "psrlq", AM_V|OT_dq|P_w, AM_W|OT_dq|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "paddq", AM_V|OT_dq|P_w, AM_W|OT_dq|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "pmullw", AM_V|OT_dq|P_w, AM_W|OT_dq|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "movq", AM_W|OT_q|P_w, AM_V|OT_q|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "pmovmskb", AM_G|OT_d|P_w, AM_V|OT_dq|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "psubusb", AM_V|OT_dq|P_w, AM_W|OT_dq|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "psubusw", AM_V|OT_dq|P_w, AM_W|OT_dq|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "pminub", AM_V|OT_dq|P_w, AM_W|OT_dq|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "pand", AM_V|OT_dq|P_w, AM_W|OT_dq|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "paddusb", AM_V|OT_dq|P_w, AM_W|OT_dq|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "paddusw", AM_V|OT_dq|P_w, AM_W|OT_dq|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "pmaxsw", AM_V|OT_dq|P_w, AM_W|OT_dq|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "pandn", AM_V|OT_dq|P_w, AM_W|OT_dq|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "pavgb", AM_V|OT_dq|P_w, AM_W|OT_dq|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "psraw", AM_V|OT_dq|P_w, AM_W|OT_dq|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "psrad", AM_V|OT_dq|P_w, AM_W|OT_dq|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "pavgw", AM_V|OT_dq|P_w, AM_W|OT_dq|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "pmulhuw", AM_V|OT_dq|P_w, AM_W|OT_dq|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "pmulhw", AM_V|OT_dq|P_w, AM_W|OT_dq|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "cvttpd2dq", AM_V|OT_dq|P_r, AM_W|OT_pd|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "movntq", AM_M|OT_dq|P_w, AM_V|OT_dq|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "psubsb", AM_V|OT_dq|P_w, AM_W|OT_dq|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "psubsw", AM_V|OT_dq|P_w, AM_W|OT_dq|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "pminsw", AM_V|OT_dq|P_w, AM_W|OT_dq|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "por", AM_V|OT_dq|P_w, AM_W|OT_dq|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "paddsb", AM_V|OT_dq|P_w, AM_W|OT_dq|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "paddsw", AM_V|OT_dq|P_w, AM_W|OT_dq|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "pmaxsw", AM_V|OT_dq|P_w, AM_W|OT_dq|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "pxor", AM_V|OT_dq, AM_W|OT_dq, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_SSE, "psllw", AM_V|OT_dq|P_w, AM_W|OT_dq|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "pslld", AM_V|OT_dq|P_w, AM_W|OT_dq|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "psllq", AM_V|OT_dq|P_w, AM_W|OT_dq|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "pmuludq", AM_V|OT_dq|P_w, AM_W|OT_dq|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "pmaddwd", AM_V|OT_dq|P_w, AM_W|OT_dq|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "psadbw", AM_V|OT_dq|P_w, AM_W|OT_dq|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "maskmovdqu", AM_V|OT_dq|P_w, AM_W|OT_dq|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "psubb", AM_V|OT_dq|P_w, AM_W|OT_dq|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "psubw", AM_V|OT_dq|P_w, AM_W|OT_dq|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "psubd", AM_V|OT_dq|P_w, AM_W|OT_dq|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "psubq", AM_V|OT_dq|P_w, AM_W|OT_dq|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "paddb", AM_V|OT_dq|P_w, AM_W|OT_dq|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "paddw", AM_V|OT_dq|P_w, AM_W|OT_dq|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "paddd", AM_V|OT_dq|P_w, AM_W|OT_dq|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
};
// 3-byte instructions, prefix 0xf2
INST inst_table3_f2[256] = {
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_SSE, "movsd", AM_V|OT_sd|P_w, AM_W|OT_sd|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "movsd", AM_W|OT_sd|P_w, AM_V|OT_sd|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "movddup", AM_V|OT_q|P_w, AM_W|OT_q|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_SSE, "cvtsi2sd", AM_V|OT_sd|P_r, AM_E|OT_d|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_SSE, "cvttsd2si", AM_G|OT_d|P_r, AM_W|OT_sd|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "cvtsd2si", AM_G|OT_d|P_r, AM_W|OT_sd|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_SSE, "sqrtsd", AM_V|OT_sd|P_w, AM_W|OT_sd|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_SSE, "addsd", AM_V|OT_sd|P_w, AM_W|OT_sd|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "mulsd", AM_V|OT_sd|P_w, AM_W|OT_sd|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "cvtsd2ss", AM_V|OT_ss|P_r, AM_W|OT_sd|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_SSE, "subsd", AM_V|OT_sd|P_w, AM_W|OT_sd|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "minsd", AM_V|OT_sd|P_w, AM_W|OT_sd|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "divsd", AM_V|OT_sd|P_w, AM_W|OT_sd|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "maxsd", AM_V|OT_sd|P_w, AM_W|OT_sd|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_SSE, "pshuflw", AM_V|OT_dq|P_w, AM_W|OT_dq|P_r, AM_I|OT_b, 1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_SSE, "haddps", AM_V|OT_ps, AM_W|OT_ps, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "hsubps", AM_V|OT_ps, AM_W|OT_ps, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_SSE, "cmpsd", AM_V|OT_sd|P_r, AM_W|OT_sd|P_r, AM_I|OT_b, 1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_SSE, "addsubpd", AM_V|OT_ps|P_w, AM_W|OT_ps|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_SSE, "movdq2q", AM_P|OT_q|P_w, AM_V|OT_q|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_SSE, "cvtpd2dq", AM_V|OT_dq|P_r, AM_W|OT_pd|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_SSE, "lddqu", AM_V|OT_dq, AM_M|OT_dq, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
};
// 3-byte instructions, prefix 0xf3
INST inst_table3_f3[256] = {
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_SSE, "movss", AM_V|OT_ss|P_w, AM_W|OT_ss|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "movss", AM_W|OT_ss|P_w, AM_V|OT_ss|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "movsldup", AM_V|OT_ps|P_w, AM_W|OT_ps|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_SSE, "movshdup", AM_V|OT_ps|P_w, AM_W|OT_ps|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_SSE, "cvtsi2ss", AM_V|OT_ss|P_r, AM_E|OT_d|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_SSE, "cvttss2si", AM_G|OT_d|P_r, AM_W|OT_ss|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "cvtss2si", AM_G|OT_d|P_r, AM_W|OT_ss|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_SSE, "sqrtss", AM_V|OT_ss|P_w, AM_W|OT_ss|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "rsqrtss", AM_V|OT_ss|P_w, AM_W|OT_ss|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "rcpss", AM_V|OT_ss|P_w, AM_W|OT_ss|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_SSE, "addss", AM_V|OT_ss|P_w, AM_W|OT_ss|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "mulss", AM_V|OT_ss|P_w, AM_W|OT_ss|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "cvtsd2sd", AM_V|OT_sd|P_r, AM_W|OT_ss|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "cvttps2dq", AM_V|OT_dq|P_r, AM_W|OT_ps|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "subss", AM_V|OT_ss|P_w, AM_W|OT_ss|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "minss", AM_V|OT_ss|P_w, AM_W|OT_ss|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "divss", AM_V|OT_ss|P_w, AM_W|OT_ss|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "maxss", AM_V|OT_ss|P_w, AM_W|OT_ss|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_SSE, "movdqu", AM_V|OT_dq|P_w, AM_W|OT_dq|P_r, AM_I|OT_b, 1 },
{ INSTRUCTION_TYPE_SSE, "pshufhw", AM_V|OT_dq|P_w, AM_W|OT_dq|P_r, AM_I|OT_b, 1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_SSE, "movq", AM_V|OT_q|P_w, AM_W|OT_q|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "movdqu", AM_V|OT_dq|P_w, AM_W|OT_dq|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_SSE, "cmpss", AM_V|OT_ss|P_r, AM_W|OT_ss|P_r, AM_I|OT_b, 1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_SSE, "movq2dq", AM_V|OT_dq|P_w, AM_Q|OT_q|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_SSE, "cvtdq2pd", AM_V|OT_pd|P_r, AM_W|OT_q|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
};
// Extension tables
INST inst_table_ext1_1[8] = {
{ INSTRUCTION_TYPE_ADD, "add", AM_E|OT_b|P_w, AM_I|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OR, "or", AM_E|OT_b|P_w, AM_I|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_ADC, "adc", AM_E|OT_b|P_w, AM_I|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SBB, "sbb", AM_E|OT_b|P_w, AM_I|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_AND, "and", AM_E|OT_b|P_w, AM_I|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SUB, "sub", AM_E|OT_b|P_w, AM_I|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_XOR, "xor", AM_E|OT_b|P_w, AM_I|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_CMP, "cmp", AM_E|OT_b|P_r, AM_I|OT_b|P_r, FLAGS_NONE, 1 },
};
INST inst_table_ext1_2[8] = {
{ INSTRUCTION_TYPE_ADD, "add", AM_E|OT_v|P_w, AM_I|OT_v|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OR, "or", AM_E|OT_v|P_w, AM_I|OT_v|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_ADC, "adc", AM_E|OT_v|P_w, AM_I|OT_v|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SBB, "sbb", AM_E|OT_v|P_w, AM_I|OT_v|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_AND, "and", AM_E|OT_v|P_w, AM_I|OT_v|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SUB, "sub", AM_E|OT_v|P_w, AM_I|OT_v|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_XOR, "xor", AM_E|OT_v|P_w, AM_I|OT_v|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_CMP, "cmp", AM_E|OT_v|P_r, AM_I|OT_v|P_r, FLAGS_NONE, 1 },
};
INST inst_table_ext1_3[8] = {
{ INSTRUCTION_TYPE_ADD, "add", AM_E|OT_v|P_w, AM_I|OT_b|F_s|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OR, "or", AM_E|OT_v|P_w, AM_I|OT_b|F_s|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_ADC, "adc", AM_E|OT_v|P_w, AM_I|OT_b|F_s|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SBB, "sbb", AM_E|OT_v|P_w, AM_I|OT_b|F_s|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_AND, "and", AM_E|OT_v|P_w, AM_I|OT_b|F_s|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SUB, "sub", AM_E|OT_v|P_w, AM_I|OT_b|F_s|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_XOR, "xor", AM_E|OT_v|P_w, AM_I|OT_b|F_s|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_CMP, "cmp", AM_E|OT_v|P_r, AM_I|OT_b|F_s|P_r, FLAGS_NONE, 1 },
};
INST inst_table_ext2_1[8] = {
{ INSTRUCTION_TYPE_ROX, "rol", AM_E|OT_b|P_w, AM_I|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_ROX, "ror", AM_E|OT_b|P_w, AM_I|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_ROX, "rcl", AM_E|OT_b|P_w, AM_I|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_ROX, "rcr", AM_E|OT_b|P_w, AM_I|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SHX, "shl", AM_E|OT_b|P_w, AM_I|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SHX, "shr", AM_E|OT_b|P_w, AM_I|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_SHX, "sar", AM_E|OT_b|P_w, AM_I|OT_b|P_r, FLAGS_NONE, 1 },
};
INST inst_table_ext2_2[8] = {
{ INSTRUCTION_TYPE_ROX, "rol", AM_E|OT_v|P_w, AM_I|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_ROX, "ror", AM_E|OT_v|P_w, AM_I|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_ROX, "rcl", AM_E|OT_v|P_w, AM_I|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_ROX, "rcr", AM_E|OT_v|P_w, AM_I|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SHX, "shl", AM_E|OT_v|P_w, AM_I|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SHX, "shr", AM_E|OT_v|P_w, AM_I|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_SHX, "sar", AM_E|OT_v|P_w, AM_I|OT_b|P_r, FLAGS_NONE, 1 },
};
INST inst_table_ext2_3[8] = {
{ INSTRUCTION_TYPE_ROX, "rol", AM_E|OT_b|P_w, AM_I1|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_ROX, "ror", AM_E|OT_b|P_w, AM_I1|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_ROX, "rcl", AM_E|OT_b|P_w, AM_I1|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_ROX, "rcr", AM_E|OT_b|P_w, AM_I1|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SHX, "shl", AM_E|OT_b|P_w, AM_I1|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SHX, "shr", AM_E|OT_b|P_w, AM_I1|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_SHX, "sar", AM_E|OT_b|P_w, AM_I1|OT_b|P_r, FLAGS_NONE, 1 },
};
INST inst_table_ext2_4[8] = {
{ INSTRUCTION_TYPE_ROX, "rol", AM_E|OT_v|P_w, AM_I1|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_ROX, "ror", AM_E|OT_v|P_w, AM_I1|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_ROX, "rcl", AM_E|OT_v|P_w, AM_I1|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_ROX, "rcr", AM_E|OT_v|P_w, AM_I1|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SHX, "shl", AM_E|OT_v|P_w, AM_I1|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SHX, "shr", AM_E|OT_v|P_w, AM_I1|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_SHX, "sar", AM_E|OT_v|P_w, AM_I1|OT_b|P_r, FLAGS_NONE, 1 },
};
INST inst_table_ext2_5[8] = {
{ INSTRUCTION_TYPE_ROX, "rol", AM_E|OT_b|P_w, AM_REG|REG_CL|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_ROX, "ror", AM_E|OT_b|P_w, AM_REG|REG_CL|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_ROX, "rcl", AM_E|OT_b|P_w, AM_REG|REG_CL|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_ROX, "rcr", AM_E|OT_b|P_w, AM_REG|REG_CL|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SHX, "shl", AM_E|OT_b|P_w, AM_REG|REG_CL|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SHX, "shr", AM_E|OT_b|P_w, AM_REG|REG_CL|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_SHX, "sar", AM_E|OT_b|P_w, AM_REG|REG_CL|OT_b|P_r, FLAGS_NONE, 1 },
};
INST inst_table_ext2_6[8] = {
{ INSTRUCTION_TYPE_ROX, "rol", AM_E|OT_v|P_w, AM_REG|REG_CL|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_ROX, "ror", AM_E|OT_v|P_w, AM_REG|REG_CL|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_ROX, "rcl", AM_E|OT_v|P_w, AM_REG|REG_CL|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_ROX, "rcr", AM_E|OT_v|P_w, AM_REG|REG_CL|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SHX, "shl", AM_E|OT_v|P_w, AM_REG|REG_CL|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SHX, "shr", AM_E|OT_v|P_w, AM_REG|REG_CL|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_SHX, "sar", AM_E|OT_v|P_w, AM_REG|REG_CL|OT_b|P_r, FLAGS_NONE, 1 },
};
INST inst_table_ext3_1[8] = {
{ INSTRUCTION_TYPE_TEST, "test", AM_E|OT_b|P_r, AM_I|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_NOT, "not", AM_E|OT_b|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_NEG, "neg", AM_E|OT_b|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MUL, "mul", AM_E|OT_b|P_w, FLAGS_NONE|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_IMUL, "imul", AM_E|OT_b|P_r, FLAGS_NONE|P_r, FLAGS_NONE|P_r,1 },
{ INSTRUCTION_TYPE_DIV, "div", AM_E|OT_b|P_w, FLAGS_NONE|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_IDIV, "idiv", AM_E|OT_b|P_w, FLAGS_NONE|P_r, FLAGS_NONE, 1 },
};
INST inst_table_ext3_2[8] = {
{ INSTRUCTION_TYPE_TEST, "test", AM_E|OT_v|P_r, AM_I|OT_v|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_NOT, "not", AM_E|OT_v|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_NEG, "neg", AM_E|OT_v|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_MUL, "mul", AM_E|OT_v|P_w, FLAGS_NONE|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_IMUL, "imul", AM_E|OT_v|P_r, FLAGS_NONE|P_r, FLAGS_NONE|P_r,1 },
{ INSTRUCTION_TYPE_DIV, "div", AM_E|OT_v|P_w, FLAGS_NONE|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_IDIV, "idiv", AM_E|OT_v|P_w, FLAGS_NONE|P_r, FLAGS_NONE, 1 },
};
INST inst_table_ext4[8] = {
{ INSTRUCTION_TYPE_INC, "inc", AM_E|OT_b|P_r, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_DEC, "dec", AM_E|OT_b, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
};
INST inst_table_ext5[8] = {
{ INSTRUCTION_TYPE_INC, "inc", AM_E|OT_v|P_r, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_DEC, "dec", AM_E|OT_v, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_CALL, "call", AM_E|OT_v|P_x, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_CALL, "callf", AM_E|OT_v|P_x, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_JMP, "jmp", AM_E|OT_v|P_x, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_JMP, "jmpf", AM_E|OT_v|P_x, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_PUSH, "push", AM_E|OT_v|P_r, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
};
INST inst_table_ext6[8] = {
{ INSTRUCTION_TYPE_SLDT, "sldt", AM_E|OT_w|P_r, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_PRIV, "str", AM_E|OT_w|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_PRIV, "lldt", AM_E|OT_w|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_PRIV, "ltr", AM_E|OT_w|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_PRIV, "verr", AM_E|OT_w|P_r, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_PRIV, "verw", AM_E|OT_w|P_r, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
};
INST inst_table_ext7[8] = {
{ INSTRUCTION_TYPE_SGDT, "sgdt", AM_M|OT_d|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SIDT, "sidt", AM_M|OT_d|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_PRIV, "lgdt", AM_M|OT_d|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_PRIV, "lidt", AM_M|OT_d|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_PRIV, "smsw", AM_E|OT_w|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_PRIV, "lmsw", AM_E|OT_w|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_PRIV, "invlpg", AM_M|OT_b|P_r, FLAGS_NONE, FLAGS_NONE, 1 },
};
INST inst_monitor =
{ INSTRUCTION_TYPE_OTHER, "monitor", FLAGS_NONE|P_w, FLAGS_NONE|P_r, FLAGS_NONE, 0 };
INST inst_mwait =
{ INSTRUCTION_TYPE_OTHER, "mwait", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 };
INST inst_table_ext8[8] = {
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_BT, "bt", AM_E|OT_v|P_r, AM_I|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_BTS, "bts", AM_E|OT_v|P_r, AM_I|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_BTR, "btr", AM_E|OT_v|P_r, AM_I|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_BTC, "btc", AM_E|OT_v|P_r, AM_I|OT_b|P_r, FLAGS_NONE, 1 },
};
INST inst_table_ext9[8] = {
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_SSE, "cmpxch8b", AM_M|OT_q, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
};
INST inst_table_ext10[8] = {
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
};
// XXX: not used yet
INST inst_table_ext11[8] = {
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
};
// XXX: intel manual says AM_P.. but that seems to produce wrong disasm
INST inst_table_ext12[8] = {
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_MMX, "psrlw", AM_Q|OT_q|P_w, AM_I|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_MMX, "psraw", AM_Q|OT_q|P_w, AM_I|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_MMX, "psllw", AM_Q|OT_q|P_w, AM_I|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
};
// XXX: intel manual says AM_P.. but that seems to produce wrong disasm
INST inst_table_ext12_66[8] = {
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_SSE, "psrlw", AM_W|OT_dq|P_w, AM_I|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_SSE, "psraw", AM_W|OT_dq|P_w, AM_I|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_SSE, "psllw", AM_W|OT_dq|P_w, AM_I|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
};
// XXX: intel manual says AM_P.. but that seems to produce wrong disasm
INST inst_table_ext13[8] = {
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_MMX, "psrld", AM_Q|OT_q|P_w, AM_I|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_MMX, "psrad", AM_Q|OT_q|P_w, AM_I|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_MMX, "pslld", AM_Q|OT_q|P_w, AM_I|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
};
// XXX: intel manual says AM_P.. but that seems to produce wrong disasm
INST inst_table_ext13_66[8] = {
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_SSE, "psrld", AM_W|OT_dq|P_w, AM_I|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_SSE, "psrad", AM_W|OT_dq|P_w, AM_I|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_SSE, "pslld", AM_W|OT_dq|P_w, AM_I|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
};
// XXX: intel manual says AM_P.. but that seems to produce wrong disasm
INST inst_table_ext14[8] = {
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_MMX, "psrlq", AM_Q|OT_q|P_w, AM_I|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_MMX, "psllq", AM_Q|OT_q|P_w, AM_I|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
};
// XXX: intel manual says AM_P.. but that seems to produce wrong disasm
INST inst_table_ext14_66[8] = {
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_SSE, "psrlq", AM_W|OT_dq|P_w, AM_I|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "psrldq", AM_W|OT_dq|P_w, AM_I|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_SSE, "psllq", AM_W|OT_dq|P_w, AM_I|OT_b|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_SSE, "pslldq", AM_W|OT_dq|P_w, AM_I|OT_b|P_r, FLAGS_NONE, 1 },
};
INST inst_table_ext15[8] = {
{ INSTRUCTION_TYPE_OTHER, "fxsave", AM_E|OT_v, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "fxrstor", AM_E|OT_v, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "ldmxcsr", AM_E|OT_v, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, "stmxcsr", AM_E|OT_v, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, "sfence", AM_E|OT_v, FLAGS_NONE, FLAGS_NONE, 1 },
};
INST inst_table_ext16[8] = {
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_OTHER, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
};
// Table of extension tables
INST * inst_table_ext[25] = {
inst_table_ext1_1,
inst_table_ext1_2,
inst_table_ext1_3,
inst_table_ext2_1,
inst_table_ext2_2,
inst_table_ext2_3,
inst_table_ext2_4,
inst_table_ext2_5,
inst_table_ext2_6,
inst_table_ext3_1,
inst_table_ext3_2,
inst_table_ext4,
inst_table_ext5,
inst_table_ext6,
inst_table_ext7,
inst_table_ext8,
inst_table_ext9,
inst_table_ext10,
inst_table_ext11,
inst_table_ext12,
inst_table_ext13,
inst_table_ext14,
inst_table_ext15,
inst_table_ext16,
};
// FPU instruction tables
/*
* Tables are composed in two parts:
*
* - 1st part (index 0-7) are identified by the reg field of MODRM byte
* if the MODRM is < 0xc0. reg field can be used directly as an index to table.
*
* - 2nd part (8 - 0x47) are identified by the MODRM byte itself. In that case,
* the index can be calculated by "index = MODRM - 0xb8"
*
*/
INST inst_table_fpu_d8[72] = {
{ INSTRUCTION_TYPE_FADD, "fadds", AM_E|OT_d|P_w, FLAGS_NONE|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_FMUL, "fmuls", AM_E|OT_d|P_w, FLAGS_NONE|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_FCOM, "fcoms", AM_E|OT_d|P_w, FLAGS_NONE|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_FCOMP, "fcomps", AM_E|OT_d|P_w, FLAGS_NONE|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_FSUB, "fsubs", AM_E|OT_d|P_w, FLAGS_NONE|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_FSUBR, "fsubrs", AM_E|OT_d|P_w, FLAGS_NONE|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_FDIV, "fdivs", AM_E|OT_d|P_w, FLAGS_NONE|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_FDIVR, "fdivrs", AM_E|OT_d|P_w, FLAGS_NONE|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_FADD, "fadd", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FADD, "fadd", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST1|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FADD, "fadd", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST2|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FADD, "fadd", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST3|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FADD, "fadd", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST4|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FADD, "fadd", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST5|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FADD, "fadd", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST6|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FADD, "fadd", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST7|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FMUL, "fmul", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FMUL, "fmul", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST1|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FMUL, "fmul", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST2|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FMUL, "fmul", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST3|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FMUL, "fmul", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST4|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FMUL, "fmul", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST5|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FMUL, "fmul", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST6|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FMUL, "fmul", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST7|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCOM, "fcom", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCOM, "fcom", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST1|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCOM, "fcom", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST2|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCOM, "fcom", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST3|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCOM, "fcom", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST4|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCOM, "fcom", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST5|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCOM, "fcom", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST6|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCOM, "fcom", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST7|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCOMP, "fcomp", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCOMP, "fcomp", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST1|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCOMP, "fcomp", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST2|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCOMP, "fcomp", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST3|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCOMP, "fcomp", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST4|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCOMP, "fcomp", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST5|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCOMP, "fcomp", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST6|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCOMP, "fcomp", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST7|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FSUB, "fsub", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FSUB, "fsub", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST1|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FSUB, "fsub", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST2|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FSUB, "fsub", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST3|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FSUB, "fsub", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST4|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FSUB, "fsub", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST5|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FSUB, "fsub", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST6|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FSUB, "fsub", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST7|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FSUBR, "fsubr", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FSUBR, "fsubr", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST1|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FSUBR, "fsubr", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST2|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FSUBR, "fsubr", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST3|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FSUBR, "fsubr", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST4|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FSUBR, "fsubr", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST5|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FSUBR, "fsubr", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST6|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FSUBR, "fsubr", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST7|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FDIV, "fdiv", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FDIV, "fdiv", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST1|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FDIV, "fdiv", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST2|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FDIV, "fdiv", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST3|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FDIV, "fdiv", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST4|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FDIV, "fdiv", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST5|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FDIV, "fdiv", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST6|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FDIV, "fdiv", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST7|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FDIVR, "fdivr", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FDIVR, "fdivr", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST1|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FDIVR, "fdivr", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST2|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FDIVR, "fdivr", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST3|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FDIVR, "fdivr", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST4|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FDIVR, "fdivr", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST5|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FDIVR, "fdivr", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST6|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FDIVR, "fdivr", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST7|F_f|P_r, FLAGS_NONE, 0 },
};
INST inst_table_fpu_d9[72] = {
{ INSTRUCTION_TYPE_FLD, "flds", AM_E|OT_d, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FST, "fst", AM_E|OT_d|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_FSTP, "fstp", AM_E|OT_d|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
// XXX: operand type is not correct
{ INSTRUCTION_TYPE_FPU, "fldenv", AM_E|OT_v|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_FPU, "fldcw", AM_E|OT_v|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_FPU, "fstenv", AM_E|OT_v|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_FPU, "fstcw", AM_E|OT_v|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_FLD, "fld", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FLD, "fld", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST1|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FLD, "fld", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST2|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FLD, "fld", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST3|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FLD, "fld", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST4|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FLD, "fld", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST5|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FLD, "fld", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST6|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FLD, "fld", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST7|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FXCH, "fxch", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FXCH, "fxch", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST1|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FXCH, "fxch", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST2|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FXCH, "fxch", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST3|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FXCH, "fxch", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST4|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FXCH, "fxch", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST5|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FXCH, "fxch", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST6|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FXCH, "fxch", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST7|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, "fnop", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, "fchs", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, "fabs", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, "ftst", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, "fxam", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, "fld1", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, "fldl2t", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, "fldl2e", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, "fldpi", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, "fldlg2", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, "fldln2", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, "fldz", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, "f2xm1", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, "fyl2x", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, "fptan", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, "fpatan", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, "fxtract", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, "fprem1", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, "fdecstp", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, "fincstp", FLAGS_NONE|P_w, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, "fprem", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, "fyl2xp1", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, "fsqrt", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, "fsincos", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, "frndint", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, "fscale", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, "fsin", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, "fcos", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
};
INST inst_table_fpu_da[72] = {
{ INSTRUCTION_TYPE_FIADD, "fiaddl", AM_E|OT_d|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_FIMUL, "fimull", AM_E|OT_d|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_FICOM, "ficoml", AM_E|OT_d|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_FICOMP, "ficompl", AM_E|OT_d|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_FISUB, "fisubl", AM_E|OT_d|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_FISUBR, "fisubrl", AM_E|OT_d|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_FIDIV, "fidivl", AM_E|OT_d|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_FIDIVR, "fidivrl", AM_E|OT_d|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_FCMOVC, "fcmovb", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCMOVC, "fcmovb", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST1|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCMOVC, "fcmovb", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST2|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCMOVC, "fcmovb", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST3|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCMOVC, "fcmovb", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST4|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCMOVC, "fcmovb", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST5|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCMOVC, "fcmovb", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST6|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCMOVC, "fcmovb", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST7|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCMOVC, "fcmove", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCMOVC, "fcmove", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST1|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCMOVC, "fcmove", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST2|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCMOVC, "fcmove", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST3|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCMOVC, "fcmove", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST4|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCMOVC, "fcmove", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST5|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCMOVC, "fcmove", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST6|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCMOVC, "fcmove", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST7|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCMOVC, "fcmovbe", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCMOVC, "fcmovbe", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST1|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCMOVC, "fcmovbe", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST2|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCMOVC, "fcmovbe", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST3|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCMOVC, "fcmovbe", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST4|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCMOVC, "fcmovbe", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST5|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCMOVC, "fcmovbe", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST6|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCMOVC, "fcmovbe", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST7|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCMOVC, "fcmovu", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCMOVC, "fcmovu", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST1|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCMOVC, "fcmovu", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST2|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCMOVC, "fcmovu", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST3|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCMOVC, "fcmovu", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST4|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCMOVC, "fcmovu", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST5|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCMOVC, "fcmovu", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST6|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCMOVC, "fcmovu", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST7|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FUCOMP, "fucompp", FLAGS_NONE|P_w, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
};
// XXX: fsetpm??
INST inst_table_fpu_db[72] = {
{ INSTRUCTION_TYPE_FILD, "fildl", AM_E|OT_d|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_FISTTP, "fisttp", AM_E|OT_d|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_FIST, "fistl", AM_E|OT_d|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_FISTP, "fistp", AM_E|OT_d|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FLD, "fldt", AM_E|OT_t, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FSTP, "fstpl", AM_E|OT_t|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_FCMOVC, "fcmovnb", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCMOVC, "fcmovnb", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST1|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCMOVC, "fcmovnb", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST2|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCMOVC, "fcmovnb", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST3|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCMOVC, "fcmovnb", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST4|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCMOVC, "fcmovnb", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST5|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCMOVC, "fcmovnb", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST6|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCMOVC, "fcmovnb", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST7|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCMOVC, "fcmovne", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCMOVC, "fcmovne", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST1|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCMOVC, "fcmovne", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST2|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCMOVC, "fcmovne", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST3|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCMOVC, "fcmovne", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST4|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCMOVC, "fcmovne", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST5|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCMOVC, "fcmovne", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST6|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCMOVC, "fcmovne", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST7|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCMOVC, "fcmovnbe", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCMOVC, "fcmovnbe", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST1|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCMOVC, "fcmovnbe", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST2|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCMOVC, "fcmovnbe", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST3|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCMOVC, "fcmovnbe", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST4|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCMOVC, "fcmovnbe", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST5|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCMOVC, "fcmovnbe", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST6|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCMOVC, "fcmovnbe", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST7|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCMOVC, "fcmovnu", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCMOVC, "fcmovnu", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST1|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCMOVC, "fcmovnu", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST2|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCMOVC, "fcmovnu", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST3|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCMOVC, "fcmovnu", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST4|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCMOVC, "fcmovnu", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST5|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCMOVC, "fcmovnu", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST6|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCMOVC, "fcmovnu", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST7|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, "fclex", FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, "finit", FLAGS_NONE|P_w, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FUCOMI, "fucomi", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FUCOMI, "fucomi", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST1|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FUCOMI, "fucomi", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST2|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FUCOMI, "fucomi", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST3|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FUCOMI, "fucomi", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST4|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FUCOMI, "fucomi", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST5|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FUCOMI, "fucomi", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST6|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FUCOMI, "fucomi", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST7|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCOMI, "fcomi", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCOMI, "fcomi", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST1|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCOMI, "fcomi", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST2|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCOMI, "fcomi", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST3|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCOMI, "fcomi", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST4|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCOMI, "fcomi", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST5|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCOMI, "fcomi", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST6|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCOMI, "fcomi", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST7|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
};
INST inst_table_fpu_dc[72] = {
{ INSTRUCTION_TYPE_FADD, "faddl", AM_E|OT_q|P_w, FLAGS_NONE|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_FMUL, "fmull", AM_E|OT_q|P_w, FLAGS_NONE|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_FCOM, "fcoml", AM_E|OT_q|P_w, FLAGS_NONE|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_FCOMP, "fcompl", AM_E|OT_q|P_w, FLAGS_NONE|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_FSUB, "fsubl", AM_E|OT_q|P_w, FLAGS_NONE|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_FSUBR, "fsubrl", AM_E|OT_q|P_w, FLAGS_NONE|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_FDIV, "fdivl", AM_E|OT_q|P_w, FLAGS_NONE|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_FDIVR, "fdivrl", AM_E|OT_q|P_w, FLAGS_NONE|P_r, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_FADD, "fadd", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FADD, "fadd", AM_REG|REG_ST1|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FADD, "fadd", AM_REG|REG_ST2|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FADD, "fadd", AM_REG|REG_ST3|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FADD, "fadd", AM_REG|REG_ST4|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FADD, "fadd", AM_REG|REG_ST5|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FADD, "fadd", AM_REG|REG_ST6|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FADD, "fadd", AM_REG|REG_ST7|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FMUL, "fmul", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FMUL, "fmul", AM_REG|REG_ST1|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FMUL, "fmul", AM_REG|REG_ST2|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FMUL, "fmul", AM_REG|REG_ST3|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FMUL, "fmul", AM_REG|REG_ST4|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FMUL, "fmul", AM_REG|REG_ST5|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FMUL, "fmul", AM_REG|REG_ST6|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FMUL, "fmul", AM_REG|REG_ST7|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FSUBR, "fsubr", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FSUBR, "fsubr", AM_REG|REG_ST1|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FSUBR, "fsubr", AM_REG|REG_ST2|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FSUBR, "fsubr", AM_REG|REG_ST3|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FSUBR, "fsubr", AM_REG|REG_ST4|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FSUBR, "fsubr", AM_REG|REG_ST5|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FSUBR, "fsubr", AM_REG|REG_ST6|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FSUBR, "fsubr", AM_REG|REG_ST7|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FSUB, "fsub", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FSUB, "fsub", AM_REG|REG_ST1|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FSUB, "fsub", AM_REG|REG_ST2|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FSUB, "fsub", AM_REG|REG_ST3|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FSUB, "fsub", AM_REG|REG_ST4|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FSUB, "fsub", AM_REG|REG_ST5|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FSUB, "fsub", AM_REG|REG_ST6|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FSUB, "fsub", AM_REG|REG_ST7|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FDIVR, "fdivr", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FDIVR, "fdivr", AM_REG|REG_ST1|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FDIVR, "fdivr", AM_REG|REG_ST2|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FDIVR, "fdivr", AM_REG|REG_ST3|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FDIVR, "fdivr", AM_REG|REG_ST4|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FDIVR, "fdivr", AM_REG|REG_ST5|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FDIVR, "fdivr", AM_REG|REG_ST6|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FDIVR, "fdivr", AM_REG|REG_ST7|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FDIV, "fdiv", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FDIV, "fdiv", AM_REG|REG_ST1|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FDIV, "fdiv", AM_REG|REG_ST2|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FDIV, "fdiv", AM_REG|REG_ST3|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FDIV, "fdiv", AM_REG|REG_ST4|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FDIV, "fdiv", AM_REG|REG_ST5|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FDIV, "fdiv", AM_REG|REG_ST6|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FDIV, "fdiv", AM_REG|REG_ST7|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
};
INST inst_table_fpu_dd[72] = {
{ INSTRUCTION_TYPE_FLD, "fldl", AM_E|OT_q, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_FISTTP, "fisttp", AM_E|OT_q|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_FST, "fstl", AM_E|OT_q|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_FSTP, "fstpl", AM_E|OT_q|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
// XXX: operand type is not exactly right..
{ INSTRUCTION_TYPE_FPU, "frstor", AM_E|OT_d|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
// XXX: operand type is not exactly right..
{ INSTRUCTION_TYPE_FPU, "fsave", AM_E|OT_d|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
// XXX: operand type is not exactly right..
{ INSTRUCTION_TYPE_FPU, "fstsw", AM_E|OT_d|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_FFREE, "ffree", AM_REG|REG_ST0|F_f|P_w, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FFREE, "ffree", AM_REG|REG_ST1|F_f|P_w, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FFREE, "ffree", AM_REG|REG_ST2|F_f|P_w, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FFREE, "ffree", AM_REG|REG_ST3|F_f|P_w, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FFREE, "ffree", AM_REG|REG_ST4|F_f|P_w, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FFREE, "ffree", AM_REG|REG_ST5|F_f|P_w, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FFREE, "ffree", AM_REG|REG_ST6|F_f|P_w, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FFREE, "ffree", AM_REG|REG_ST7|F_f|P_w, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FST, "fst", AM_REG|REG_ST0|F_f|P_w, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FST, "fst", AM_REG|REG_ST1|F_f|P_w, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FST, "fst", AM_REG|REG_ST2|F_f|P_w, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FST, "fst", AM_REG|REG_ST3|F_f|P_w, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FST, "fst", AM_REG|REG_ST4|F_f|P_w, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FST, "fst", AM_REG|REG_ST5|F_f|P_w, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FST, "fst", AM_REG|REG_ST6|F_f|P_w, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FST, "fst", AM_REG|REG_ST7|F_f|P_w, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FSTP, "fstp", AM_REG|REG_ST0|F_f|P_w, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FSTP, "fstp", AM_REG|REG_ST1|F_f|P_w, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FSTP, "fstp", AM_REG|REG_ST2|F_f|P_w, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FSTP, "fstp", AM_REG|REG_ST3|F_f|P_w, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FSTP, "fstp", AM_REG|REG_ST4|F_f|P_w, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FSTP, "fstp", AM_REG|REG_ST5|F_f|P_w, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FSTP, "fstp", AM_REG|REG_ST6|F_f|P_w, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FSTP, "fstp", AM_REG|REG_ST7|F_f|P_w, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FUCOM, "fucom", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FUCOM, "fucom", AM_REG|REG_ST1|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FUCOM, "fucom", AM_REG|REG_ST2|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FUCOM, "fucom", AM_REG|REG_ST3|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FUCOM, "fucom", AM_REG|REG_ST4|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FUCOM, "fucom", AM_REG|REG_ST5|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FUCOM, "fucom", AM_REG|REG_ST6|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FUCOM, "fucom", AM_REG|REG_ST7|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FUCOMP, "fucomp", AM_REG|REG_ST0|F_f|P_w, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FUCOMP, "fucomp", AM_REG|REG_ST1|F_f|P_w, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FUCOMP, "fucomp", AM_REG|REG_ST2|F_f|P_w, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FUCOMP, "fucomp", AM_REG|REG_ST3|F_f|P_w, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FUCOMP, "fucomp", AM_REG|REG_ST4|F_f|P_w, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FUCOMP, "fucomp", AM_REG|REG_ST5|F_f|P_w, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FUCOMP, "fucomp", AM_REG|REG_ST6|F_f|P_w, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FUCOMP, "fucomp", AM_REG|REG_ST7|F_f|P_w, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
};
INST inst_table_fpu_de[72] = {
{ INSTRUCTION_TYPE_FIADD, "fiadd", AM_E|OT_w|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_FIMUL, "fimul", AM_E|OT_w|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_FICOM, "ficom", AM_E|OT_w|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_FICOMP, "ficomp", AM_E|OT_w|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_FISUB, "fisub", AM_E|OT_w|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_FISUBR, "fisubr", AM_E|OT_w|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_FIDIV, "fidiv", AM_E|OT_w|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_FIDIVR, "fidivr", AM_E|OT_w|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_FADDP, "faddp", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FADDP, "faddp", AM_REG|REG_ST1|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FADDP, "faddp", AM_REG|REG_ST2|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FADDP, "faddp", AM_REG|REG_ST3|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FADDP, "faddp", AM_REG|REG_ST4|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FADDP, "faddp", AM_REG|REG_ST5|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FADDP, "faddp", AM_REG|REG_ST6|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FADDP, "faddp", AM_REG|REG_ST7|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FMULP, "fmulp", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FMULP, "fmulp", AM_REG|REG_ST1|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FMULP, "fmulp", AM_REG|REG_ST2|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FMULP, "fmulp", AM_REG|REG_ST3|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FMULP, "fmulp", AM_REG|REG_ST4|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FMULP, "fmulp", AM_REG|REG_ST5|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FMULP, "fmulp", AM_REG|REG_ST6|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FMULP, "fmulp", AM_REG|REG_ST7|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCOMPP, "fcompp", FLAGS_NONE|P_w, FLAGS_NONE|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FSUBRP, "fsubrp", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FSUBRP, "fsubrp", AM_REG|REG_ST1|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FSUBRP, "fsubrp", AM_REG|REG_ST2|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FSUBRP, "fsubrp", AM_REG|REG_ST3|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FSUBRP, "fsubrp", AM_REG|REG_ST4|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FSUBRP, "fsubrp", AM_REG|REG_ST5|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FSUBRP, "fsubrp", AM_REG|REG_ST6|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FSUBRP, "fsubrp", AM_REG|REG_ST7|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FSUBP, "fsubp", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FSUBP, "fsubp", AM_REG|REG_ST1|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FSUBP, "fsubp", AM_REG|REG_ST2|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FSUBP, "fsubp", AM_REG|REG_ST3|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FSUBP, "fsubp", AM_REG|REG_ST4|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FSUBP, "fsubp", AM_REG|REG_ST5|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FSUBP, "fsubp", AM_REG|REG_ST6|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FSUBP, "fsubp", AM_REG|REG_ST7|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FDIVRP, "fdivrp", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FDIVRP, "fdivrp", AM_REG|REG_ST1|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FDIVRP, "fdivrp", AM_REG|REG_ST2|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FDIVRP, "fdivrp", AM_REG|REG_ST3|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FDIVRP, "fdivrp", AM_REG|REG_ST4|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FDIVRP, "fdivrp", AM_REG|REG_ST5|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FDIVRP, "fdivrp", AM_REG|REG_ST6|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FDIVRP, "fdivrp", AM_REG|REG_ST7|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FDIVP, "fdivp", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FDIVP, "fdivp", AM_REG|REG_ST1|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FDIVP, "fdivp", AM_REG|REG_ST2|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FDIVP, "fdivp", AM_REG|REG_ST3|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FDIVP, "fdivp", AM_REG|REG_ST4|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FDIVP, "fdivp", AM_REG|REG_ST5|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FDIVP, "fdivp", AM_REG|REG_ST6|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FDIVP, "fdivp", AM_REG|REG_ST7|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
};
INST inst_table_fpu_df[72] = {
{ INSTRUCTION_TYPE_FILD, "fild", AM_E|OT_w|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
// fisttp: IA-32 2004
{ INSTRUCTION_TYPE_FISTTP, "fisttp", AM_E|OT_w|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_FIST, "fist", AM_E|OT_w|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_FISTP, "fistp", AM_E|OT_w|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_FPU, "fbld", AM_E|OT_t|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_FILD, "fild", AM_E|OT_t|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_FPU, "fbstp", AM_E|OT_t|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
{ INSTRUCTION_TYPE_FISTP, "fistp", AM_E|OT_t|P_w, FLAGS_NONE, FLAGS_NONE, 1 },
// ffreep undocumented!!
{ INSTRUCTION_TYPE_FFREEP, "ffreep", AM_REG|REG_ST0|F_f|P_w, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FFREEP, "ffreep", AM_REG|REG_ST1|F_f|P_w, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FFREEP, "ffreep", AM_REG|REG_ST2|F_f|P_w, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FFREEP, "ffreep", AM_REG|REG_ST3|F_f|P_w, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FFREEP, "ffreep", AM_REG|REG_ST4|F_f|P_w, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FFREEP, "ffreep", AM_REG|REG_ST5|F_f|P_w, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FFREEP, "ffreep", AM_REG|REG_ST6|F_f|P_w, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FFREEP, "ffreep", AM_REG|REG_ST7|F_f|P_w, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, "fstsw", FLAGS_NONE|P_w, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FUCOMIP,"fucomip", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FUCOMIP,"fucomip", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST1|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FUCOMIP,"fucomip", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST2|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FUCOMIP,"fucomip", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST3|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FUCOMIP,"fucomip", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST4|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FUCOMIP,"fucomip", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST5|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FUCOMIP,"fucomip", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST6|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FUCOMIP,"fucomip", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST7|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCOMIP, "fcomip", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST0|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCOMIP, "fcomip", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST1|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCOMIP, "fcomip", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST2|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCOMIP, "fcomip", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST3|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCOMIP, "fcomip", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST4|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCOMIP, "fcomip", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST5|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCOMIP, "fcomip", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST6|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FCOMIP, "fcomip", AM_REG|REG_ST0|F_f|P_w, AM_REG|REG_ST7|F_f|P_r, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
{ INSTRUCTION_TYPE_FPU, NULL, FLAGS_NONE, FLAGS_NONE, FLAGS_NONE, 0 },
};
// Table of FPU instruction tables
/*
* These tables are accessed by the following way:
*
* INST *fpuinst = inst_table4[opcode - 0xd8][index];
* where index is determined by the MODRM byte.
*
*/
INST * inst_table4[8] = {
inst_table_fpu_d8,
inst_table_fpu_d9,
inst_table_fpu_da,
inst_table_fpu_db,
inst_table_fpu_dc,
inst_table_fpu_dd,
inst_table_fpu_de,
inst_table_fpu_df,
};
syntax highlighted by Code2HTML, v. 0.9.1