Created
January 6, 2013 10:52
-
-
Save syuu1228/4466539 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Index: usr.sbin/bhyve/Makefile | |
=================================================================== | |
--- usr.sbin/bhyve/Makefile (revision 245019) | |
+++ usr.sbin/bhyve/Makefile (working copy) | |
@@ -17,8 +17,8 @@ | |
NO_MAN= | |
-DPADD= ${LIBVMMAPI} ${LIBMD} ${LIBPTHREAD} | |
-LDADD= -lvmmapi -lmd -lpthread | |
+DPADD= ${LIBVMMAPI} ${LIBUDIS86} ${LIBMD} ${LIBPTHREAD} | |
+LDADD= -lvmmapi -ludis86 -lmd -lpthread | |
WARNS?= 2 | |
Index: usr.sbin/bhyve/bhyverun.c | |
=================================================================== | |
--- usr.sbin/bhyve/bhyverun.c (revision 245019) | |
+++ usr.sbin/bhyve/bhyverun.c (working copy) | |
@@ -47,6 +47,8 @@ | |
#include <machine/vmm.h> | |
#include <vmmapi.h> | |
+#include <machine/specialreg.h> | |
+#include <udis86/udis86.h> | |
#include "bhyverun.h" | |
#include "acpi.h" | |
@@ -102,6 +104,8 @@ | |
static const int BSP = 0; | |
static int cpumask; | |
+static int trace_on; | |
+static FILE *trace_log; | |
static void vm_loop(struct vmctx *ctx, int vcpu, uint64_t rip); | |
@@ -130,7 +134,7 @@ | |
{ | |
fprintf(stderr, | |
- "Usage: %s [-aehABHIP][-g <gdb port>][-z <hz>][-s <pci>]" | |
+ "Usage: %s [-aehABHIPT][-g <gdb port>][-z <hz>][-s <pci>]" | |
"[-S <pci>][-p pincpu][-n <pci>][-m lowmem][-M highmem] <vm>\n" | |
" -a: local apic is in XAPIC mode (default is X2APIC)\n" | |
" -A: create an ACPI table\n" | |
@@ -141,6 +145,7 @@ | |
" -H: vmexit from the guest on hlt\n" | |
" -I: present an ioapic to the guest\n" | |
" -P: vmexit from the guest on pause\n" | |
+ " -T: enable instruction level tracer\n" | |
" -e: exit on unhandled i/o access\n" | |
" -h: help\n" | |
" -z: guest hz (default is %d)\n" | |
@@ -375,6 +380,82 @@ | |
} | |
static int | |
+vmexit_exception(struct vmctx *ctx, struct vm_exit *vme, int *pvcpu) | |
+{ | |
+ int error, mode, skip_trace = 0; | |
+ ud_t ud_obj; | |
+ uint64_t rsp, cr0, rflags, rax, rbx, rcx, rdx, cs, ds, ss; | |
+ | |
+ if (!trace_on) | |
+ return (VMEXIT_ABORT); | |
+ | |
+ error = vm_get_register(ctx, *pvcpu, VM_REG_GUEST_RFLAGS, &rflags); | |
+ assert(error == 0); | |
+ rflags |= 0x100; /* Trap Flag */ | |
+ error = vm_set_register(ctx, *pvcpu, VM_REG_GUEST_RFLAGS, rflags); | |
+ assert(error == 0); | |
+ error = vm_get_register(ctx, *pvcpu, VM_REG_GUEST_CR0, &cr0); | |
+ assert(error == 0); | |
+ error = vm_get_register(ctx, *pvcpu, VM_REG_GUEST_RSP, &rsp); | |
+ assert(error == 0); | |
+ error = vm_get_register(ctx, *pvcpu, VM_REG_GUEST_RAX, &rax); | |
+ assert(error == 0); | |
+ error = vm_get_register(ctx, *pvcpu, VM_REG_GUEST_RBX, &rbx); | |
+ assert(error == 0); | |
+ error = vm_get_register(ctx, *pvcpu, VM_REG_GUEST_RCX, &rcx); | |
+ assert(error == 0); | |
+ error = vm_get_register(ctx, *pvcpu, VM_REG_GUEST_RDX, &rdx); | |
+ assert(error == 0); | |
+ error = vm_get_register(ctx, *pvcpu, VM_REG_GUEST_CS, &cs); | |
+ assert(error == 0); | |
+ error = vm_get_register(ctx, *pvcpu, VM_REG_GUEST_DS, &ds); | |
+ assert(error == 0); | |
+ error = vm_get_register(ctx, *pvcpu, VM_REG_GUEST_SS, &ss); | |
+ assert(error == 0); | |
+ | |
+ ud_init(&ud_obj); | |
+ ud_set_syntax(&ud_obj, UD_SYN_ATT); | |
+ ud_set_vendor(&ud_obj, UD_VENDOR_INTEL); | |
+ if (cr0 & CR0_PE) { | |
+ /* XXX: should check EFER.LME */ | |
+ if ((vme->rip >> 32) == 0xffffffff) { | |
+ /* XXX: need to implement guest vaddr to guest paddr | |
+ function which references guest page table */ | |
+ uint32_t eip = (uint32_t)vme->rip; | |
+ /* Because FreeBSD/amd64 kernel code area starts from | |
+ 0x80000000, and it translates to 0x00000000 */ | |
+ if (!(eip & 0x80000000)) | |
+ skip_trace = 1; | |
+ else | |
+ eip &= ~(0x80000000); | |
+ ud_set_pc(&ud_obj, eip); | |
+ ud_set_mode(&ud_obj, 32); | |
+ ud_set_input_buffer(&ud_obj, paddr_guest2host(eip), 16); | |
+ mode = 32; | |
+ }else{ | |
+ skip_trace = 1; | |
+ mode = 64; | |
+ } | |
+ } else { | |
+ uint16_t ip = (uint16_t)vme->rip; | |
+ ud_set_pc(&ud_obj, ip); | |
+ ud_set_mode(&ud_obj, 16); | |
+ ud_set_input_buffer(&ud_obj, paddr_guest2host(ip), 16); | |
+ mode = 16; | |
+ } | |
+ ud_disassemble(&ud_obj); | |
+ | |
+ fprintf(trace_log, "%dbit rip:%lx rflags:%lx rsp:%lx", | |
+ mode, vme->rip, rflags, rsp); | |
+ fprintf(trace_log, " rax:%lx rbx:%lx rcx:%lx rdx:%lx cs:%lx ds:%lx ss:%lx", | |
+ rax, rbx, rcx, rdx, cs, ds, ss); | |
+ fprintf(trace_log, " insn:%s\n", | |
+ skip_trace ? "skip" : ud_insn_asm(&ud_obj)); | |
+ | |
+ return (VMEXIT_CONTINUE); | |
+} | |
+ | |
+static int | |
vmexit_vmx(struct vmctx *ctx, struct vm_exit *vmexit, int *pvcpu) | |
{ | |
@@ -514,6 +595,7 @@ | |
[VM_EXITCODE_MTRAP] = vmexit_mtrap, | |
[VM_EXITCODE_PAGING] = vmexit_paging, | |
[VM_EXITCODE_SPINUP_AP] = vmexit_spinup_ap, | |
+ [VM_EXITCODE_EXCEPTION] = vmexit_exception, | |
}; | |
static void | |
@@ -588,7 +670,7 @@ | |
guest_ncpus = 1; | |
ioapic = 0; | |
- while ((c = getopt(argc, argv, "abehABHIPxp:g:c:z:s:S:n:m:M:")) != -1) { | |
+ while ((c = getopt(argc, argv, "abehABHIPxTp:g:c:z:s:S:n:m:M:")) != -1) { | |
switch (c) { | |
case 'a': | |
disable_x2apic = 1; | |
@@ -605,6 +687,9 @@ | |
case 'x': | |
guest_vcpu_mux = 1; | |
break; | |
+ case 'T': | |
+ trace_on = 1; | |
+ break; | |
case 'p': | |
pincpu = atoi(optarg); | |
break; | |
@@ -746,6 +831,19 @@ | |
assert(error == 0); | |
} | |
+ if (trace_on) { | |
+ uint64_t rflags; | |
+ error = vm_set_exception_bitmap(ctx, BSP, 1 << IDT_DB); | |
+ assert(error == 0); | |
+ error = vm_get_register(ctx, BSP, VM_REG_GUEST_RFLAGS, &rflags); | |
+ assert(error == 0); | |
+ rflags |= 0x100; /* Trap Flag */ | |
+ error = vm_set_register(ctx, BSP, VM_REG_GUEST_RFLAGS, rflags); | |
+ assert(error == 0); | |
+ trace_log = fopen("bhyvetrace.log", "w"); | |
+ assert(trace_log); | |
+ } | |
+ | |
/* | |
* build the guest tables, MP etc. | |
*/ | |
@@ -766,5 +864,8 @@ | |
*/ | |
mevent_dispatch(); | |
+ if (trace_on) | |
+ fclose(trace_log); | |
+ | |
exit(1); | |
} | |
Index: lib/libvmmapi/vmmapi.h | |
=================================================================== | |
--- lib/libvmmapi/vmmapi.h (revision 245019) | |
+++ lib/libvmmapi/vmmapi.h (working copy) | |
@@ -102,4 +102,7 @@ | |
uint64_t rip, uint64_t cr3, uint64_t gdtbase, | |
uint64_t rsp); | |
void vm_setup_freebsd_gdt(uint64_t *gdtr); | |
+ | |
+ | |
+int vm_set_exception_bitmap(struct vmctx *ctx, int vcpu, uint32_t bits); | |
#endif /* _VMMAPI_H_ */ | |
Index: lib/libvmmapi/vmmapi.c | |
=================================================================== | |
--- lib/libvmmapi/vmmapi.c (revision 245019) | |
+++ lib/libvmmapi/vmmapi.c (working copy) | |
@@ -721,3 +721,18 @@ | |
done: | |
return (error); | |
} | |
+ | |
+int | |
+vm_set_exception_bitmap(struct vmctx *ctx, int vcpu, uint32_t bits) | |
+{ | |
+ int error; | |
+ struct vm_exc_bitmap exc_bit; | |
+ | |
+ bzero(&exc_bit, sizeof(exc_bit)); | |
+ exc_bit.cpuid = vcpu; | |
+ exc_bit.bits = bits; | |
+ | |
+ error = ioctl(ctx->fd, VM_SET_EXCEPTION_BITMAP, &exc_bit); | |
+ return (error); | |
+} | |
+ | |
Index: lib/Makefile | |
=================================================================== | |
--- lib/Makefile (revision 245019) | |
+++ lib/Makefile (working copy) | |
@@ -116,6 +116,7 @@ | |
${_libusb} \ | |
${_libvgl} \ | |
${_libvmmapi} \ | |
+ ${_libudis86} \ | |
libwrap \ | |
liby \ | |
libz \ | |
@@ -201,6 +202,7 @@ | |
.if ${MACHINE_CPUARCH} == "amd64" | |
_libvmmapi= libvmmapi | |
+_libudis86= libudis86 | |
.endif | |
.if ${MACHINE_CPUARCH} == "ia64" | |
Index: lib/libudis86/syn.c | |
=================================================================== | |
--- lib/libudis86/syn.c (revision 0) | |
+++ lib/libudis86/syn.c (working copy) | |
@@ -0,0 +1,61 @@ | |
+/* ----------------------------------------------------------------------------- | |
+ * syn.c | |
+ * | |
+ * Copyright (c) 2002, 2003, 2004 Vivek Mohan <vivek@sig9.com> | |
+ * All rights reserved. See (LICENSE) | |
+ * ----------------------------------------------------------------------------- | |
+ */ | |
+ | |
+/* ----------------------------------------------------------------------------- | |
+ * Intel Register Table - Order Matters (types.h)! | |
+ * ----------------------------------------------------------------------------- | |
+ */ | |
+const char* ud_reg_tab[] = | |
+{ | |
+ "al", "cl", "dl", "bl", | |
+ "ah", "ch", "dh", "bh", | |
+ "spl", "bpl", "sil", "dil", | |
+ "r8b", "r9b", "r10b", "r11b", | |
+ "r12b", "r13b", "r14b", "r15b", | |
+ | |
+ "ax", "cx", "dx", "bx", | |
+ "sp", "bp", "si", "di", | |
+ "r8w", "r9w", "r10w", "r11w", | |
+ "r12w", "r13W" , "r14w", "r15w", | |
+ | |
+ "eax", "ecx", "edx", "ebx", | |
+ "esp", "ebp", "esi", "edi", | |
+ "r8d", "r9d", "r10d", "r11d", | |
+ "r12d", "r13d", "r14d", "r15d", | |
+ | |
+ "rax", "rcx", "rdx", "rbx", | |
+ "rsp", "rbp", "rsi", "rdi", | |
+ "r8", "r9", "r10", "r11", | |
+ "r12", "r13", "r14", "r15", | |
+ | |
+ "es", "cs", "ss", "ds", | |
+ "fs", "gs", | |
+ | |
+ "cr0", "cr1", "cr2", "cr3", | |
+ "cr4", "cr5", "cr6", "cr7", | |
+ "cr8", "cr9", "cr10", "cr11", | |
+ "cr12", "cr13", "cr14", "cr15", | |
+ | |
+ "dr0", "dr1", "dr2", "dr3", | |
+ "dr4", "dr5", "dr6", "dr7", | |
+ "dr8", "dr9", "dr10", "dr11", | |
+ "dr12", "dr13", "dr14", "dr15", | |
+ | |
+ "mm0", "mm1", "mm2", "mm3", | |
+ "mm4", "mm5", "mm6", "mm7", | |
+ | |
+ "st0", "st1", "st2", "st3", | |
+ "st4", "st5", "st6", "st7", | |
+ | |
+ "xmm0", "xmm1", "xmm2", "xmm3", | |
+ "xmm4", "xmm5", "xmm6", "xmm7", | |
+ "xmm8", "xmm9", "xmm10", "xmm11", | |
+ "xmm12", "xmm13", "xmm14", "xmm15", | |
+ | |
+ "rip" | |
+}; | |
Property changes on: lib/libudis86/syn.c | |
___________________________________________________________________ | |
Added: svn:executable | |
## -0,0 +1 ## | |
+* | |
\ No newline at end of property | |
Index: lib/libudis86/types.h | |
=================================================================== | |
--- lib/libudis86/types.h (revision 0) | |
+++ lib/libudis86/types.h (working copy) | |
@@ -0,0 +1,200 @@ | |
+/* ----------------------------------------------------------------------------- | |
+ * types.h | |
+ * | |
+ * Copyright (c) 2006, Vivek Mohan <vivek@sig9.com> | |
+ * All rights reserved. See LICENSE | |
+ * ----------------------------------------------------------------------------- | |
+ */ | |
+#ifndef UD_TYPES_H | |
+#define UD_TYPES_H | |
+ | |
+#include <stdio.h> | |
+ | |
+#ifdef _MSC_VER | |
+# define FMT64 "%I64" | |
+ typedef unsigned __int8 uint8_t; | |
+ typedef unsigned __int16 uint16_t; | |
+ typedef unsigned __int32 uint32_t; | |
+ typedef unsigned __int64 uint64_t; | |
+ typedef __int8 int8_t; | |
+ typedef __int16 int16_t; | |
+ typedef __int32 int32_t; | |
+ typedef __int64 int64_t; | |
+#else | |
+# define FMT64 "%ll" | |
+# include <inttypes.h> | |
+#endif | |
+ | |
+#include "itab.h" | |
+ | |
+/* ----------------------------------------------------------------------------- | |
+ * All possible "types" of objects in udis86. Order is Important! | |
+ * ----------------------------------------------------------------------------- | |
+ */ | |
+enum ud_type | |
+{ | |
+ UD_NONE, | |
+ | |
+ /* 8 bit GPRs */ | |
+ UD_R_AL, UD_R_CL, UD_R_DL, UD_R_BL, | |
+ UD_R_AH, UD_R_CH, UD_R_DH, UD_R_BH, | |
+ UD_R_SPL, UD_R_BPL, UD_R_SIL, UD_R_DIL, | |
+ UD_R_R8B, UD_R_R9B, UD_R_R10B, UD_R_R11B, | |
+ UD_R_R12B, UD_R_R13B, UD_R_R14B, UD_R_R15B, | |
+ | |
+ /* 16 bit GPRs */ | |
+ UD_R_AX, UD_R_CX, UD_R_DX, UD_R_BX, | |
+ UD_R_SP, UD_R_BP, UD_R_SI, UD_R_DI, | |
+ UD_R_R8W, UD_R_R9W, UD_R_R10W, UD_R_R11W, | |
+ UD_R_R12W, UD_R_R13W, UD_R_R14W, UD_R_R15W, | |
+ | |
+ /* 32 bit GPRs */ | |
+ UD_R_EAX, UD_R_ECX, UD_R_EDX, UD_R_EBX, | |
+ UD_R_ESP, UD_R_EBP, UD_R_ESI, UD_R_EDI, | |
+ UD_R_R8D, UD_R_R9D, UD_R_R10D, UD_R_R11D, | |
+ UD_R_R12D, UD_R_R13D, UD_R_R14D, UD_R_R15D, | |
+ | |
+ /* 64 bit GPRs */ | |
+ UD_R_RAX, UD_R_RCX, UD_R_RDX, UD_R_RBX, | |
+ UD_R_RSP, UD_R_RBP, UD_R_RSI, UD_R_RDI, | |
+ UD_R_R8, UD_R_R9, UD_R_R10, UD_R_R11, | |
+ UD_R_R12, UD_R_R13, UD_R_R14, UD_R_R15, | |
+ | |
+ /* segment registers */ | |
+ UD_R_ES, UD_R_CS, UD_R_SS, UD_R_DS, | |
+ UD_R_FS, UD_R_GS, | |
+ | |
+ /* control registers*/ | |
+ UD_R_CR0, UD_R_CR1, UD_R_CR2, UD_R_CR3, | |
+ UD_R_CR4, UD_R_CR5, UD_R_CR6, UD_R_CR7, | |
+ UD_R_CR8, UD_R_CR9, UD_R_CR10, UD_R_CR11, | |
+ UD_R_CR12, UD_R_CR13, UD_R_CR14, UD_R_CR15, | |
+ | |
+ /* debug registers */ | |
+ UD_R_DR0, UD_R_DR1, UD_R_DR2, UD_R_DR3, | |
+ UD_R_DR4, UD_R_DR5, UD_R_DR6, UD_R_DR7, | |
+ UD_R_DR8, UD_R_DR9, UD_R_DR10, UD_R_DR11, | |
+ UD_R_DR12, UD_R_DR13, UD_R_DR14, UD_R_DR15, | |
+ | |
+ /* mmx registers */ | |
+ UD_R_MM0, UD_R_MM1, UD_R_MM2, UD_R_MM3, | |
+ UD_R_MM4, UD_R_MM5, UD_R_MM6, UD_R_MM7, | |
+ | |
+ /* x87 registers */ | |
+ UD_R_ST0, UD_R_ST1, UD_R_ST2, UD_R_ST3, | |
+ UD_R_ST4, UD_R_ST5, UD_R_ST6, UD_R_ST7, | |
+ | |
+ /* extended multimedia registers */ | |
+ UD_R_XMM0, UD_R_XMM1, UD_R_XMM2, UD_R_XMM3, | |
+ UD_R_XMM4, UD_R_XMM5, UD_R_XMM6, UD_R_XMM7, | |
+ UD_R_XMM8, UD_R_XMM9, UD_R_XMM10, UD_R_XMM11, | |
+ UD_R_XMM12, UD_R_XMM13, UD_R_XMM14, UD_R_XMM15, | |
+ | |
+ UD_R_RIP, | |
+ | |
+ /* Operand Types */ | |
+ UD_OP_REG, UD_OP_MEM, UD_OP_PTR, UD_OP_IMM, | |
+ UD_OP_JIMM, UD_OP_CONST | |
+}; | |
+ | |
+/* ----------------------------------------------------------------------------- | |
+ * struct ud_operand - Disassembled instruction Operand. | |
+ * ----------------------------------------------------------------------------- | |
+ */ | |
+struct ud_operand | |
+{ | |
+ enum ud_type type; | |
+ uint8_t size; | |
+ union { | |
+ int8_t sbyte; | |
+ uint8_t ubyte; | |
+ int16_t sword; | |
+ uint16_t uword; | |
+ int32_t sdword; | |
+ uint32_t udword; | |
+ int64_t sqword; | |
+ uint64_t uqword; | |
+ | |
+ struct { | |
+ uint16_t seg; | |
+ uint32_t off; | |
+ } ptr; | |
+ } lval; | |
+ | |
+ enum ud_type base; | |
+ enum ud_type index; | |
+ uint8_t offset; | |
+ uint8_t scale; | |
+}; | |
+ | |
+/* ----------------------------------------------------------------------------- | |
+ * struct ud - The udis86 object. | |
+ * ----------------------------------------------------------------------------- | |
+ */ | |
+struct ud | |
+{ | |
+ int (*inp_hook) (struct ud*); | |
+ uint8_t inp_curr; | |
+ uint8_t inp_fill; | |
+ FILE* inp_file; | |
+ uint8_t inp_ctr; | |
+ uint8_t* inp_buff; | |
+ uint8_t* inp_buff_end; | |
+ uint8_t inp_end; | |
+ void (*translator)(struct ud*); | |
+ uint64_t insn_offset; | |
+ char insn_hexcode[32]; | |
+ char insn_buffer[64]; | |
+ unsigned int insn_fill; | |
+ uint8_t dis_mode; | |
+ uint64_t pc; | |
+ uint8_t vendor; | |
+ struct map_entry* mapen; | |
+ enum ud_mnemonic_code mnemonic; | |
+ struct ud_operand operand[3]; | |
+ uint8_t error; | |
+ uint8_t pfx_rex; | |
+ uint8_t pfx_seg; | |
+ uint8_t pfx_opr; | |
+ uint8_t pfx_adr; | |
+ uint8_t pfx_lock; | |
+ uint8_t pfx_rep; | |
+ uint8_t pfx_repe; | |
+ uint8_t pfx_repne; | |
+ uint8_t pfx_insn; | |
+ uint8_t default64; | |
+ uint8_t opr_mode; | |
+ uint8_t adr_mode; | |
+ uint8_t br_far; | |
+ uint8_t br_near; | |
+ uint8_t implicit_addr; | |
+ uint8_t c1; | |
+ uint8_t c2; | |
+ uint8_t c3; | |
+ uint8_t inp_cache[256]; | |
+ uint8_t inp_sess[64]; | |
+ struct ud_itab_entry * itab_entry; | |
+}; | |
+ | |
+/* ----------------------------------------------------------------------------- | |
+ * Type-definitions | |
+ * ----------------------------------------------------------------------------- | |
+ */ | |
+typedef enum ud_type ud_type_t; | |
+typedef enum ud_mnemonic_code ud_mnemonic_code_t; | |
+ | |
+typedef struct ud ud_t; | |
+typedef struct ud_operand ud_operand_t; | |
+ | |
+#define UD_SYN_INTEL ud_translate_intel | |
+#define UD_SYN_ATT ud_translate_att | |
+#define UD_EOI -1 | |
+#define UD_INP_CACHE_SZ 32 | |
+#define UD_VENDOR_AMD 0 | |
+#define UD_VENDOR_INTEL 1 | |
+ | |
+#define bail_out(ud,error_code) longjmp( (ud)->bailout, error_code ) | |
+#define try_decode(ud) if ( setjmp( (ud)->bailout ) == 0 ) | |
+#define catch_error() else | |
+ | |
+#endif | |
Property changes on: lib/libudis86/types.h | |
___________________________________________________________________ | |
Added: svn:executable | |
## -0,0 +1 ## | |
+* | |
\ No newline at end of property | |
Index: lib/libudis86/extern.h | |
=================================================================== | |
--- lib/libudis86/extern.h (revision 0) | |
+++ lib/libudis86/extern.h (working copy) | |
@@ -0,0 +1,67 @@ | |
+/* ----------------------------------------------------------------------------- | |
+ * extern.h | |
+ * | |
+ * Copyright (c) 2004, 2005, 2006, Vivek Mohan <vivek@sig9.com> | |
+ * All rights reserved. See LICENSE | |
+ * ----------------------------------------------------------------------------- | |
+ */ | |
+#ifndef UD_EXTERN_H | |
+#define UD_EXTERN_H | |
+ | |
+#ifdef __cplusplus | |
+extern "C" { | |
+#endif | |
+ | |
+#include <stdio.h> | |
+#include "types.h" | |
+ | |
+/* ============================= PUBLIC API ================================= */ | |
+ | |
+extern void ud_init(struct ud*); | |
+ | |
+extern void ud_set_mode(struct ud*, uint8_t); | |
+ | |
+extern void ud_set_pc(struct ud*, uint64_t); | |
+ | |
+extern void ud_set_input_hook(struct ud*, int (*)(struct ud*)); | |
+ | |
+extern void ud_set_input_buffer(struct ud*, uint8_t*, size_t); | |
+ | |
+#ifndef __UD_STANDALONE__ | |
+extern void ud_set_input_file(struct ud*, FILE*); | |
+#endif /* __UD_STANDALONE__ */ | |
+ | |
+extern void ud_set_vendor(struct ud*, unsigned); | |
+ | |
+extern void ud_set_syntax(struct ud*, void (*)(struct ud*)); | |
+ | |
+extern void ud_input_skip(struct ud*, size_t); | |
+ | |
+extern int ud_input_end(struct ud*); | |
+ | |
+extern unsigned int ud_decode(struct ud*); | |
+ | |
+extern unsigned int ud_disassemble(struct ud*); | |
+ | |
+extern void ud_translate_intel(struct ud*); | |
+ | |
+extern void ud_translate_att(struct ud*); | |
+ | |
+extern char* ud_insn_asm(struct ud* u); | |
+ | |
+extern uint8_t* ud_insn_ptr(struct ud* u); | |
+ | |
+extern uint64_t ud_insn_off(struct ud*); | |
+ | |
+extern char* ud_insn_hex(struct ud*); | |
+ | |
+extern unsigned int ud_insn_len(struct ud* u); | |
+ | |
+extern const char* ud_lookup_mnemonic(enum ud_mnemonic_code c); | |
+ | |
+/* ========================================================================== */ | |
+ | |
+#ifdef __cplusplus | |
+} | |
+#endif | |
+#endif | |
Property changes on: lib/libudis86/extern.h | |
___________________________________________________________________ | |
Added: svn:executable | |
## -0,0 +1 ## | |
+* | |
\ No newline at end of property | |
Index: lib/libudis86/syn.h | |
=================================================================== | |
--- lib/libudis86/syn.h (revision 0) | |
+++ lib/libudis86/syn.h (working copy) | |
@@ -0,0 +1,25 @@ | |
+/* ----------------------------------------------------------------------------- | |
+ * syn.h | |
+ * | |
+ * Copyright (c) 2006, Vivek Mohan <vivek@sig9.com> | |
+ * All rights reserved. See LICENSE | |
+ * ----------------------------------------------------------------------------- | |
+ */ | |
+#ifndef UD_SYN_H | |
+#define UD_SYN_H | |
+ | |
+#include <stdio.h> | |
+#include <stdarg.h> | |
+#include "types.h" | |
+ | |
+extern const char* ud_reg_tab[]; | |
+ | |
+static void mkasm(struct ud* u, const char* fmt, ...) | |
+{ | |
+ va_list ap; | |
+ va_start(ap, fmt); | |
+ u->insn_fill += vsprintf((char*) u->insn_buffer + u->insn_fill, fmt, ap); | |
+ va_end(ap); | |
+} | |
+ | |
+#endif | |
Property changes on: lib/libudis86/syn.h | |
___________________________________________________________________ | |
Added: svn:executable | |
## -0,0 +1 ## | |
+* | |
\ No newline at end of property | |
Index: lib/libudis86/syn-intel.c | |
=================================================================== | |
--- lib/libudis86/syn-intel.c (revision 0) | |
+++ lib/libudis86/syn-intel.c (working copy) | |
@@ -0,0 +1,208 @@ | |
+/* ----------------------------------------------------------------------------- | |
+ * syn-intel.c | |
+ * | |
+ * Copyright (c) 2002, 2003, 2004 Vivek Mohan <vivek@sig9.com> | |
+ * All rights reserved. See (LICENSE) | |
+ * ----------------------------------------------------------------------------- | |
+ */ | |
+ | |
+#include "types.h" | |
+#include "extern.h" | |
+#include "decode.h" | |
+#include "itab.h" | |
+#include "syn.h" | |
+ | |
+/* ----------------------------------------------------------------------------- | |
+ * opr_cast() - Prints an operand cast. | |
+ * ----------------------------------------------------------------------------- | |
+ */ | |
+static void | |
+opr_cast(struct ud* u, struct ud_operand* op) | |
+{ | |
+ switch(op->size) { | |
+ case 8: mkasm(u, "byte " ); break; | |
+ case 16: mkasm(u, "word " ); break; | |
+ case 32: mkasm(u, "dword "); break; | |
+ case 64: mkasm(u, "qword "); break; | |
+ case 80: mkasm(u, "tword "); break; | |
+ default: break; | |
+ } | |
+ if (u->br_far) | |
+ mkasm(u, "far "); | |
+ else if (u->br_near) | |
+ mkasm(u, "near "); | |
+} | |
+ | |
+/* ----------------------------------------------------------------------------- | |
+ * gen_operand() - Generates assembly output for each operand. | |
+ * ----------------------------------------------------------------------------- | |
+ */ | |
+static void gen_operand(struct ud* u, struct ud_operand* op, int syn_cast) | |
+{ | |
+ switch(op->type) { | |
+ case UD_OP_REG: | |
+ mkasm(u, ud_reg_tab[op->base - UD_R_AL]); | |
+ break; | |
+ | |
+ case UD_OP_MEM: { | |
+ | |
+ int op_f = 0; | |
+ | |
+ if (syn_cast) | |
+ opr_cast(u, op); | |
+ | |
+ mkasm(u, "["); | |
+ | |
+ if (u->pfx_seg) | |
+ mkasm(u, "%s:", ud_reg_tab[u->pfx_seg - UD_R_AL]); | |
+ | |
+ if (op->base) { | |
+ mkasm(u, "%s", ud_reg_tab[op->base - UD_R_AL]); | |
+ op_f = 1; | |
+ } | |
+ | |
+ if (op->index) { | |
+ if (op_f) | |
+ mkasm(u, "+"); | |
+ mkasm(u, "%s", ud_reg_tab[op->index - UD_R_AL]); | |
+ op_f = 1; | |
+ } | |
+ | |
+ if (op->scale) | |
+ mkasm(u, "*%d", op->scale); | |
+ | |
+ if (op->offset == 8) { | |
+ if (op->lval.sbyte < 0) | |
+ mkasm(u, "-0x%x", -op->lval.sbyte); | |
+ else mkasm(u, "%s0x%x", (op_f) ? "+" : "", op->lval.sbyte); | |
+ } | |
+ else if (op->offset == 16) | |
+ mkasm(u, "%s0x%x", (op_f) ? "+" : "", op->lval.uword); | |
+ else if (op->offset == 32) { | |
+ if (u->adr_mode == 64) { | |
+ if (op->lval.sdword < 0) | |
+ mkasm(u, "-0x%x", -op->lval.sdword); | |
+ else mkasm(u, "%s0x%x", (op_f) ? "+" : "", op->lval.sdword); | |
+ } | |
+ else mkasm(u, "%s0x%lx", (op_f) ? "+" : "", op->lval.udword); | |
+ } | |
+ else if (op->offset == 64) | |
+ mkasm(u, "%s0x" FMT64 "x", (op_f) ? "+" : "", op->lval.uqword); | |
+ | |
+ mkasm(u, "]"); | |
+ break; | |
+ } | |
+ | |
+ case UD_OP_IMM: | |
+ if (syn_cast) opr_cast(u, op); | |
+ switch (op->size) { | |
+ case 8: mkasm(u, "0x%x", op->lval.ubyte); break; | |
+ case 16: mkasm(u, "0x%x", op->lval.uword); break; | |
+ case 32: mkasm(u, "0x%lx", op->lval.udword); break; | |
+ case 64: mkasm(u, "0x" FMT64 "x", op->lval.uqword); break; | |
+ default: break; | |
+ } | |
+ break; | |
+ | |
+ case UD_OP_JIMM: | |
+ if (syn_cast) opr_cast(u, op); | |
+ switch (op->size) { | |
+ case 8: | |
+ mkasm(u, "0x" FMT64 "x", u->pc + op->lval.sbyte); | |
+ break; | |
+ case 16: | |
+ mkasm(u, "0x" FMT64 "x", u->pc + op->lval.sword); | |
+ break; | |
+ case 32: | |
+ mkasm(u, "0x" FMT64 "x", u->pc + op->lval.sdword); | |
+ break; | |
+ default:break; | |
+ } | |
+ break; | |
+ | |
+ case UD_OP_PTR: | |
+ switch (op->size) { | |
+ case 32: | |
+ mkasm(u, "word 0x%x:0x%x", op->lval.ptr.seg, | |
+ op->lval.ptr.off & 0xFFFF); | |
+ break; | |
+ case 48: | |
+ mkasm(u, "dword 0x%x:0x%lx", op->lval.ptr.seg, | |
+ op->lval.ptr.off); | |
+ break; | |
+ } | |
+ break; | |
+ | |
+ case UD_OP_CONST: | |
+ if (syn_cast) opr_cast(u, op); | |
+ mkasm(u, "%d", op->lval.udword); | |
+ break; | |
+ | |
+ default: return; | |
+ } | |
+} | |
+ | |
+/* ============================================================================= | |
+ * translates to intel syntax | |
+ * ============================================================================= | |
+ */ | |
+extern void ud_translate_intel(struct ud* u) | |
+{ | |
+ /* -- prefixes -- */ | |
+ | |
+ /* check if P_OSO prefix is used */ | |
+ if (! P_OSO(u->itab_entry->prefix) && u->pfx_opr) { | |
+ switch (u->dis_mode) { | |
+ case 16: | |
+ mkasm(u, "o32 "); | |
+ break; | |
+ case 32: | |
+ case 64: | |
+ mkasm(u, "o16 "); | |
+ break; | |
+ } | |
+ } | |
+ | |
+ /* check if P_ASO prefix was used */ | |
+ if (! P_ASO(u->itab_entry->prefix) && u->pfx_adr) { | |
+ switch (u->dis_mode) { | |
+ case 16: | |
+ mkasm(u, "a32 "); | |
+ break; | |
+ case 32: | |
+ mkasm(u, "a16 "); | |
+ break; | |
+ case 64: | |
+ mkasm(u, "a32 "); | |
+ break; | |
+ } | |
+ } | |
+ | |
+ if (u->pfx_lock) | |
+ mkasm(u, "lock "); | |
+ if (u->pfx_rep) | |
+ mkasm(u, "rep "); | |
+ if (u->pfx_repne) | |
+ mkasm(u, "repne "); | |
+ if (u->implicit_addr && u->pfx_seg) | |
+ mkasm(u, "%s ", ud_reg_tab[u->pfx_seg - UD_R_AL]); | |
+ | |
+ /* print the instruction mnemonic */ | |
+ mkasm(u, "%s ", ud_lookup_mnemonic(u->mnemonic)); | |
+ | |
+ /* operand 1 */ | |
+ if (u->operand[0].type != UD_NONE) { | |
+ gen_operand(u, &u->operand[0], u->c1); | |
+ } | |
+ /* operand 2 */ | |
+ if (u->operand[1].type != UD_NONE) { | |
+ mkasm(u, ", "); | |
+ gen_operand(u, &u->operand[1], u->c2); | |
+ } | |
+ | |
+ /* operand 3 */ | |
+ if (u->operand[2].type != UD_NONE) { | |
+ mkasm(u, ", "); | |
+ gen_operand(u, &u->operand[2], u->c3); | |
+ } | |
+} | |
Property changes on: lib/libudis86/syn-intel.c | |
___________________________________________________________________ | |
Added: svn:executable | |
## -0,0 +1 ## | |
+* | |
\ No newline at end of property | |
Index: lib/libudis86/decode.c | |
=================================================================== | |
--- lib/libudis86/decode.c (revision 0) | |
+++ lib/libudis86/decode.c (working copy) | |
@@ -0,0 +1,1193 @@ | |
+/* ----------------------------------------------------------------------------- | |
+ * decode.c | |
+ * | |
+ * Copyright (c) 2005, 2006, Vivek Mohan <vivek@sig9.com> | |
+ * All rights reserved. See LICENSE | |
+ * ----------------------------------------------------------------------------- | |
+ */ | |
+ | |
+#include <assert.h> | |
+#include <string.h> | |
+ | |
+#include "types.h" | |
+#include "itab.h" | |
+#include "input.h" | |
+#include "decode.h" | |
+ | |
+/* The max number of prefixes to an instruction */ | |
+#define MAX_PREFIXES 15 | |
+ | |
+static struct ud_itab_entry ie_invalid = { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }; | |
+static struct ud_itab_entry ie_pause = { UD_Ipause, O_NONE, O_NONE, O_NONE, P_none }; | |
+static struct ud_itab_entry ie_nop = { UD_Inop, O_NONE, O_NONE, O_NONE, P_none }; | |
+ | |
+ | |
+/* Looks up mnemonic code in the mnemonic string table | |
+ * Returns NULL if the mnemonic code is invalid | |
+ */ | |
+const char * ud_lookup_mnemonic( enum ud_mnemonic_code c ) | |
+{ | |
+ if ( c < UD_Id3vil ) | |
+ return ud_mnemonics_str[ c ]; | |
+ return NULL; | |
+} | |
+ | |
+ | |
+/* Extracts instruction prefixes. | |
+ */ | |
+static int get_prefixes( struct ud* u ) | |
+{ | |
+ unsigned int have_pfx = 1; | |
+ unsigned int i; | |
+ uint8_t curr; | |
+ | |
+ /* if in error state, bail out */ | |
+ if ( u->error ) | |
+ return -1; | |
+ | |
+ /* keep going as long as there are prefixes available */ | |
+ for ( i = 0; have_pfx ; ++i ) { | |
+ | |
+ /* Get next byte. */ | |
+ inp_next(u); | |
+ if ( u->error ) | |
+ return -1; | |
+ curr = inp_curr( u ); | |
+ | |
+ /* rex prefixes in 64bit mode */ | |
+ if ( u->dis_mode == 64 && ( curr & 0xF0 ) == 0x40 ) { | |
+ u->pfx_rex = curr; | |
+ } else { | |
+ switch ( curr ) | |
+ { | |
+ case 0x2E : | |
+ u->pfx_seg = UD_R_CS; | |
+ u->pfx_rex = 0; | |
+ break; | |
+ case 0x36 : | |
+ u->pfx_seg = UD_R_SS; | |
+ u->pfx_rex = 0; | |
+ break; | |
+ case 0x3E : | |
+ u->pfx_seg = UD_R_DS; | |
+ u->pfx_rex = 0; | |
+ break; | |
+ case 0x26 : | |
+ u->pfx_seg = UD_R_ES; | |
+ u->pfx_rex = 0; | |
+ break; | |
+ case 0x64 : | |
+ u->pfx_seg = UD_R_FS; | |
+ u->pfx_rex = 0; | |
+ break; | |
+ case 0x65 : | |
+ u->pfx_seg = UD_R_GS; | |
+ u->pfx_rex = 0; | |
+ break; | |
+ case 0x67 : /* adress-size override prefix */ | |
+ u->pfx_adr = 0x67; | |
+ u->pfx_rex = 0; | |
+ break; | |
+ case 0xF0 : | |
+ u->pfx_lock = 0xF0; | |
+ u->pfx_rex = 0; | |
+ break; | |
+ case 0x66: | |
+ /* the 0x66 sse prefix is only effective if no other sse prefix | |
+ * has already been specified. | |
+ */ | |
+ if ( !u->pfx_insn ) u->pfx_insn = 0x66; | |
+ u->pfx_opr = 0x66; | |
+ u->pfx_rex = 0; | |
+ break; | |
+ case 0xF2: | |
+ u->pfx_insn = 0xF2; | |
+ u->pfx_repne = 0xF2; | |
+ u->pfx_rex = 0; | |
+ break; | |
+ case 0xF3: | |
+ u->pfx_insn = 0xF3; | |
+ u->pfx_rep = 0xF3; | |
+ u->pfx_repe = 0xF3; | |
+ u->pfx_rex = 0; | |
+ break; | |
+ default : | |
+ /* No more prefixes */ | |
+ have_pfx = 0; | |
+ break; | |
+ } | |
+ } | |
+ | |
+ /* check if we reached max instruction length */ | |
+ if ( i + 1 == MAX_INSN_LENGTH ) { | |
+ u->error = 1; | |
+ break; | |
+ } | |
+ } | |
+ | |
+ /* return status */ | |
+ if ( u->error ) | |
+ return -1; | |
+ | |
+ /* rewind back one byte in stream, since the above loop | |
+ * stops with a non-prefix byte. | |
+ */ | |
+ inp_back(u); | |
+ | |
+ /* speculatively determine the effective operand mode, | |
+ * based on the prefixes and the current disassembly | |
+ * mode. This may be inaccurate, but useful for mode | |
+ * dependent decoding. | |
+ */ | |
+ if ( u->dis_mode == 64 ) { | |
+ u->opr_mode = REX_W( u->pfx_rex ) ? 64 : ( ( u->pfx_opr ) ? 16 : 32 ) ; | |
+ u->adr_mode = ( u->pfx_adr ) ? 32 : 64; | |
+ } else if ( u->dis_mode == 32 ) { | |
+ u->opr_mode = ( u->pfx_opr ) ? 16 : 32; | |
+ u->adr_mode = ( u->pfx_adr ) ? 16 : 32; | |
+ } else if ( u->dis_mode == 16 ) { | |
+ u->opr_mode = ( u->pfx_opr ) ? 32 : 16; | |
+ u->adr_mode = ( u->pfx_adr ) ? 32 : 16; | |
+ } | |
+ | |
+ return 0; | |
+} | |
+ | |
+ | |
+/* Searches the instruction tables for the right entry. | |
+ */ | |
+static int search_itab( struct ud * u ) | |
+{ | |
+ struct ud_itab_entry * e = NULL; | |
+ enum ud_itab_index table; | |
+ uint8_t peek; | |
+ uint8_t did_peek = 0; | |
+ uint8_t curr; | |
+ uint8_t index; | |
+ | |
+ /* if in state of error, return */ | |
+ if ( u->error ) | |
+ return -1; | |
+ | |
+ /* get first byte of opcode. */ | |
+ inp_next(u); | |
+ if ( u->error ) | |
+ return -1; | |
+ curr = inp_curr(u); | |
+ | |
+ /* resolve xchg, nop, pause crazyness */ | |
+ if ( 0x90 == curr ) { | |
+ if ( !( u->dis_mode == 64 && REX_B( u->pfx_rex ) ) ) { | |
+ if ( u->pfx_rep ) { | |
+ u->pfx_rep = 0; | |
+ e = & ie_pause; | |
+ } else { | |
+ e = & ie_nop; | |
+ } | |
+ goto found_entry; | |
+ } | |
+ } | |
+ | |
+ /* get top-level table */ | |
+ if ( 0x0F == curr ) { | |
+ table = ITAB__0F; | |
+ curr = inp_next(u); | |
+ if ( u->error ) | |
+ return -1; | |
+ | |
+ /* 2byte opcodes can be modified by 0x66, F3, and F2 prefixes */ | |
+ if ( 0x66 == u->pfx_insn ) { | |
+ if ( ud_itab_list[ ITAB__PFX_SSE66__0F ][ curr ].mnemonic != UD_Iinvalid ) { | |
+ table = ITAB__PFX_SSE66__0F; | |
+ u->pfx_opr = 0; | |
+ } | |
+ } else if ( 0xF2 == u->pfx_insn ) { | |
+ if ( ud_itab_list[ ITAB__PFX_SSEF2__0F ][ curr ].mnemonic != UD_Iinvalid ) { | |
+ table = ITAB__PFX_SSEF2__0F; | |
+ u->pfx_repne = 0; | |
+ } | |
+ } else if ( 0xF3 == u->pfx_insn ) { | |
+ if ( ud_itab_list[ ITAB__PFX_SSEF3__0F ][ curr ].mnemonic != UD_Iinvalid ) { | |
+ table = ITAB__PFX_SSEF3__0F; | |
+ u->pfx_repe = 0; | |
+ u->pfx_rep = 0; | |
+ } | |
+ } | |
+ /* pick an instruction from the 1byte table */ | |
+ } else { | |
+ table = ITAB__1BYTE; | |
+ } | |
+ | |
+ index = curr; | |
+ | |
+search: | |
+ | |
+ e = & ud_itab_list[ table ][ index ]; | |
+ | |
+ /* if mnemonic constant is a standard instruction constant | |
+ * our search is over. | |
+ */ | |
+ | |
+ if ( e->mnemonic < UD_Id3vil ) { | |
+ if ( e->mnemonic == UD_Iinvalid ) { | |
+ if ( did_peek ) { | |
+ inp_next( u ); if ( u->error ) return -1; | |
+ } | |
+ goto found_entry; | |
+ } | |
+ goto found_entry; | |
+ } | |
+ | |
+ table = e->prefix; | |
+ | |
+ switch ( e->mnemonic ) | |
+ { | |
+ case UD_Igrp_reg: | |
+ peek = inp_peek( u ); | |
+ did_peek = 1; | |
+ index = MODRM_REG( peek ); | |
+ break; | |
+ | |
+ case UD_Igrp_mod: | |
+ peek = inp_peek( u ); | |
+ did_peek = 1; | |
+ index = MODRM_MOD( peek ); | |
+ if ( index == 3 ) | |
+ index = ITAB__MOD_INDX__11; | |
+ else | |
+ index = ITAB__MOD_INDX__NOT_11; | |
+ break; | |
+ | |
+ case UD_Igrp_rm: | |
+ curr = inp_next( u ); | |
+ did_peek = 0; | |
+ if ( u->error ) | |
+ return -1; | |
+ index = MODRM_RM( curr ); | |
+ break; | |
+ | |
+ case UD_Igrp_x87: | |
+ curr = inp_next( u ); | |
+ did_peek = 0; | |
+ if ( u->error ) | |
+ return -1; | |
+ index = curr - 0xC0; | |
+ break; | |
+ | |
+ case UD_Igrp_osize: | |
+ if ( u->opr_mode == 64 ) | |
+ index = ITAB__MODE_INDX__64; | |
+ else if ( u->opr_mode == 32 ) | |
+ index = ITAB__MODE_INDX__32; | |
+ else | |
+ index = ITAB__MODE_INDX__16; | |
+ break; | |
+ | |
+ case UD_Igrp_asize: | |
+ if ( u->adr_mode == 64 ) | |
+ index = ITAB__MODE_INDX__64; | |
+ else if ( u->adr_mode == 32 ) | |
+ index = ITAB__MODE_INDX__32; | |
+ else | |
+ index = ITAB__MODE_INDX__16; | |
+ break; | |
+ | |
+ case UD_Igrp_mode: | |
+ if ( u->dis_mode == 64 ) | |
+ index = ITAB__MODE_INDX__64; | |
+ else if ( u->dis_mode == 32 ) | |
+ index = ITAB__MODE_INDX__32; | |
+ else | |
+ index = ITAB__MODE_INDX__16; | |
+ break; | |
+ | |
+ case UD_Igrp_vendor: | |
+ if ( u->vendor == UD_VENDOR_INTEL ) | |
+ index = ITAB__VENDOR_INDX__INTEL; | |
+ else if ( u->vendor == UD_VENDOR_AMD ) | |
+ index = ITAB__VENDOR_INDX__AMD; | |
+ else | |
+ assert( !"unrecognized vendor id" ); | |
+ break; | |
+ | |
+ case UD_Id3vil: | |
+ assert( !"invalid instruction mnemonic constant Id3vil" ); | |
+ break; | |
+ | |
+ default: | |
+ assert( !"invalid instruction mnemonic constant" ); | |
+ break; | |
+ } | |
+ | |
+ goto search; | |
+ | |
+found_entry: | |
+ | |
+ u->itab_entry = e; | |
+ u->mnemonic = u->itab_entry->mnemonic; | |
+ | |
+ return 0; | |
+} | |
+ | |
+ | |
+static unsigned int resolve_operand_size( const struct ud * u, unsigned int s ) | |
+{ | |
+ switch ( s ) | |
+ { | |
+ case SZ_V: | |
+ return ( u->opr_mode ); | |
+ case SZ_Z: | |
+ return ( u->opr_mode == 16 ) ? 16 : 32; | |
+ case SZ_P: | |
+ return ( u->opr_mode == 16 ) ? SZ_WP : SZ_DP; | |
+ case SZ_MDQ: | |
+ return ( u->opr_mode == 16 ) ? 32 : u->opr_mode; | |
+ case SZ_RDQ: | |
+ return ( u->dis_mode == 64 ) ? 64 : 32; | |
+ default: | |
+ return s; | |
+ } | |
+} | |
+ | |
+ | |
+static int resolve_mnemonic( struct ud* u ) | |
+{ | |
+ /* far/near flags */ | |
+ u->br_far = 0; | |
+ u->br_near = 0; | |
+ /* readjust operand sizes for call/jmp instrcutions */ | |
+ if ( u->mnemonic == UD_Icall || u->mnemonic == UD_Ijmp ) { | |
+ /* WP: 16bit pointer */ | |
+ if ( u->operand[ 0 ].size == SZ_WP ) { | |
+ u->operand[ 0 ].size = 16; | |
+ u->br_far = 1; | |
+ u->br_near= 0; | |
+ /* DP: 32bit pointer */ | |
+ } else if ( u->operand[ 0 ].size == SZ_DP ) { | |
+ u->operand[ 0 ].size = 32; | |
+ u->br_far = 1; | |
+ u->br_near= 0; | |
+ } else { | |
+ u->br_far = 0; | |
+ u->br_near= 1; | |
+ } | |
+ /* resolve 3dnow weirdness. */ | |
+ } else if ( u->mnemonic == UD_I3dnow ) { | |
+ u->mnemonic = ud_itab_list[ ITAB__3DNOW ][ inp_curr( u ) ].mnemonic; | |
+ } | |
+ /* SWAPGS is only valid in 64bits mode */ | |
+ if ( u->mnemonic == UD_Iswapgs && u->dis_mode != 64 ) { | |
+ u->error = 1; | |
+ return -1; | |
+ } | |
+ | |
+ return 0; | |
+} | |
+ | |
+ | |
+/* ----------------------------------------------------------------------------- | |
+ * decode_a()- Decodes operands of the type seg:offset | |
+ * ----------------------------------------------------------------------------- | |
+ */ | |
+static void | |
+decode_a(struct ud* u, struct ud_operand *op) | |
+{ | |
+ if (u->opr_mode == 16) { | |
+ /* seg16:off16 */ | |
+ op->type = UD_OP_PTR; | |
+ op->size = 32; | |
+ op->lval.ptr.off = inp_uint16(u); | |
+ op->lval.ptr.seg = inp_uint16(u); | |
+ } else { | |
+ /* seg16:off32 */ | |
+ op->type = UD_OP_PTR; | |
+ op->size = 48; | |
+ op->lval.ptr.off = inp_uint32(u); | |
+ op->lval.ptr.seg = inp_uint16(u); | |
+ } | |
+} | |
+ | |
+/* ----------------------------------------------------------------------------- | |
+ * decode_gpr() - Returns decoded General Purpose Register | |
+ * ----------------------------------------------------------------------------- | |
+ */ | |
+static enum ud_type | |
+decode_gpr(register struct ud* u, unsigned int s, unsigned char rm) | |
+{ | |
+ s = resolve_operand_size(u, s); | |
+ | |
+ switch (s) { | |
+ case 64: | |
+ return UD_R_RAX + rm; | |
+ case SZ_DP: | |
+ case 32: | |
+ return UD_R_EAX + rm; | |
+ case SZ_WP: | |
+ case 16: | |
+ return UD_R_AX + rm; | |
+ case 8: | |
+ if (u->dis_mode == 64 && u->pfx_rex) { | |
+ if (rm >= 4) | |
+ return UD_R_SPL + (rm-4); | |
+ return UD_R_AL + rm; | |
+ } else return UD_R_AL + rm; | |
+ default: | |
+ return 0; | |
+ } | |
+} | |
+ | |
+/* ----------------------------------------------------------------------------- | |
+ * resolve_gpr64() - 64bit General Purpose Register-Selection. | |
+ * ----------------------------------------------------------------------------- | |
+ */ | |
+static enum ud_type | |
+resolve_gpr64(struct ud* u, enum ud_operand_code gpr_op) | |
+{ | |
+ if (gpr_op >= OP_rAXr8 && gpr_op <= OP_rDIr15) | |
+ gpr_op = (gpr_op - OP_rAXr8) | (REX_B(u->pfx_rex) << 3); | |
+ else gpr_op = (gpr_op - OP_rAX); | |
+ | |
+ if (u->opr_mode == 16) | |
+ return gpr_op + UD_R_AX; | |
+ if (u->dis_mode == 32 || | |
+ (u->opr_mode == 32 && ! (REX_W(u->pfx_rex) || u->default64))) { | |
+ return gpr_op + UD_R_EAX; | |
+ } | |
+ | |
+ return gpr_op + UD_R_RAX; | |
+} | |
+ | |
+/* ----------------------------------------------------------------------------- | |
+ * resolve_gpr32 () - 32bit General Purpose Register-Selection. | |
+ * ----------------------------------------------------------------------------- | |
+ */ | |
+static enum ud_type | |
+resolve_gpr32(struct ud* u, enum ud_operand_code gpr_op) | |
+{ | |
+ gpr_op = gpr_op - OP_eAX; | |
+ | |
+ if (u->opr_mode == 16) | |
+ return gpr_op + UD_R_AX; | |
+ | |
+ return gpr_op + UD_R_EAX; | |
+} | |
+ | |
+/* ----------------------------------------------------------------------------- | |
+ * resolve_reg() - Resolves the register type | |
+ * ----------------------------------------------------------------------------- | |
+ */ | |
+static enum ud_type | |
+resolve_reg(struct ud* u, unsigned int type, unsigned char i) | |
+{ | |
+ switch (type) { | |
+ case T_MMX : return UD_R_MM0 + (i & 7); | |
+ case T_XMM : return UD_R_XMM0 + i; | |
+ case T_CRG : return UD_R_CR0 + i; | |
+ case T_DBG : return UD_R_DR0 + i; | |
+ case T_SEG : return UD_R_ES + (i & 7); | |
+ case T_NONE: | |
+ default: return UD_NONE; | |
+ } | |
+} | |
+ | |
+/* ----------------------------------------------------------------------------- | |
+ * decode_imm() - Decodes Immediate values. | |
+ * ----------------------------------------------------------------------------- | |
+ */ | |
+static void | |
+decode_imm(struct ud* u, unsigned int s, struct ud_operand *op) | |
+{ | |
+ op->size = resolve_operand_size(u, s); | |
+ op->type = UD_OP_IMM; | |
+ | |
+ switch (op->size) { | |
+ case 8: op->lval.sbyte = inp_uint8(u); break; | |
+ case 16: op->lval.uword = inp_uint16(u); break; | |
+ case 32: op->lval.udword = inp_uint32(u); break; | |
+ case 64: op->lval.uqword = inp_uint64(u); break; | |
+ default: return; | |
+ } | |
+} | |
+ | |
+/* ----------------------------------------------------------------------------- | |
+ * decode_modrm() - Decodes ModRM Byte | |
+ * ----------------------------------------------------------------------------- | |
+ */ | |
+static void | |
+decode_modrm(struct ud* u, struct ud_operand *op, unsigned int s, | |
+ unsigned char rm_type, struct ud_operand *opreg, | |
+ unsigned char reg_size, unsigned char reg_type) | |
+{ | |
+ unsigned char mod, rm, reg; | |
+ | |
+ inp_next(u); | |
+ | |
+ /* get mod, r/m and reg fields */ | |
+ mod = MODRM_MOD(inp_curr(u)); | |
+ rm = (REX_B(u->pfx_rex) << 3) | MODRM_RM(inp_curr(u)); | |
+ reg = (REX_R(u->pfx_rex) << 3) | MODRM_REG(inp_curr(u)); | |
+ | |
+ op->size = resolve_operand_size(u, s); | |
+ | |
+ /* if mod is 11b, then the UD_R_m specifies a gpr/mmx/sse/control/debug */ | |
+ if (mod == 3) { | |
+ op->type = UD_OP_REG; | |
+ if (rm_type == T_GPR) | |
+ op->base = decode_gpr(u, op->size, rm); | |
+ else op->base = resolve_reg(u, rm_type, (REX_B(u->pfx_rex) << 3) | (rm&7)); | |
+ } | |
+ /* else its memory addressing */ | |
+ else { | |
+ op->type = UD_OP_MEM; | |
+ | |
+ /* 64bit addressing */ | |
+ if (u->adr_mode == 64) { | |
+ | |
+ op->base = UD_R_RAX + rm; | |
+ | |
+ /* get offset type */ | |
+ if (mod == 1) | |
+ op->offset = 8; | |
+ else if (mod == 2) | |
+ op->offset = 32; | |
+ else if (mod == 0 && (rm & 7) == 5) { | |
+ op->base = UD_R_RIP; | |
+ op->offset = 32; | |
+ } else op->offset = 0; | |
+ | |
+ /* Scale-Index-Base (SIB) */ | |
+ if ((rm & 7) == 4) { | |
+ inp_next(u); | |
+ | |
+ op->scale = (1 << SIB_S(inp_curr(u))) & ~1; | |
+ op->index = UD_R_RAX + (SIB_I(inp_curr(u)) | (REX_X(u->pfx_rex) << 3)); | |
+ op->base = UD_R_RAX + (SIB_B(inp_curr(u)) | (REX_B(u->pfx_rex) << 3)); | |
+ | |
+ /* special conditions for base reference */ | |
+ if (op->index == UD_R_RSP) { | |
+ op->index = UD_NONE; | |
+ op->scale = UD_NONE; | |
+ } | |
+ | |
+ if (op->base == UD_R_RBP || op->base == UD_R_R13) { | |
+ if (mod == 0) | |
+ op->base = UD_NONE; | |
+ if (mod == 1) | |
+ op->offset = 8; | |
+ else op->offset = 32; | |
+ } | |
+ } | |
+ } | |
+ | |
+ /* 32-Bit addressing mode */ | |
+ else if (u->adr_mode == 32) { | |
+ | |
+ /* get base */ | |
+ op->base = UD_R_EAX + rm; | |
+ | |
+ /* get offset type */ | |
+ if (mod == 1) | |
+ op->offset = 8; | |
+ else if (mod == 2) | |
+ op->offset = 32; | |
+ else if (mod == 0 && rm == 5) { | |
+ op->base = UD_NONE; | |
+ op->offset = 32; | |
+ } else op->offset = 0; | |
+ | |
+ /* Scale-Index-Base (SIB) */ | |
+ if ((rm & 7) == 4) { | |
+ inp_next(u); | |
+ | |
+ op->scale = (1 << SIB_S(inp_curr(u))) & ~1; | |
+ op->index = UD_R_EAX + (SIB_I(inp_curr(u)) | (REX_X(u->pfx_rex) << 3)); | |
+ op->base = UD_R_EAX + (SIB_B(inp_curr(u)) | (REX_B(u->pfx_rex) << 3)); | |
+ | |
+ if (op->index == UD_R_ESP) { | |
+ op->index = UD_NONE; | |
+ op->scale = UD_NONE; | |
+ } | |
+ | |
+ /* special condition for base reference */ | |
+ if (op->base == UD_R_EBP) { | |
+ if (mod == 0) | |
+ op->base = UD_NONE; | |
+ if (mod == 1) | |
+ op->offset = 8; | |
+ else op->offset = 32; | |
+ } | |
+ } | |
+ } | |
+ | |
+ /* 16bit addressing mode */ | |
+ else { | |
+ switch (rm) { | |
+ case 0: op->base = UD_R_BX; op->index = UD_R_SI; break; | |
+ case 1: op->base = UD_R_BX; op->index = UD_R_DI; break; | |
+ case 2: op->base = UD_R_BP; op->index = UD_R_SI; break; | |
+ case 3: op->base = UD_R_BP; op->index = UD_R_DI; break; | |
+ case 4: op->base = UD_R_SI; break; | |
+ case 5: op->base = UD_R_DI; break; | |
+ case 6: op->base = UD_R_BP; break; | |
+ case 7: op->base = UD_R_BX; break; | |
+ } | |
+ | |
+ if (mod == 0 && rm == 6) { | |
+ op->offset= 16; | |
+ op->base = UD_NONE; | |
+ } | |
+ else if (mod == 1) | |
+ op->offset = 8; | |
+ else if (mod == 2) | |
+ op->offset = 16; | |
+ } | |
+ } | |
+ | |
+ /* extract offset, if any */ | |
+ switch(op->offset) { | |
+ case 8 : op->lval.ubyte = inp_uint8(u); break; | |
+ case 16: op->lval.uword = inp_uint16(u); break; | |
+ case 32: op->lval.udword = inp_uint32(u); break; | |
+ case 64: op->lval.uqword = inp_uint64(u); break; | |
+ default: break; | |
+ } | |
+ | |
+ /* resolve register encoded in reg field */ | |
+ if (opreg) { | |
+ opreg->type = UD_OP_REG; | |
+ opreg->size = resolve_operand_size(u, reg_size); | |
+ if (reg_type == T_GPR) | |
+ opreg->base = decode_gpr(u, opreg->size, reg); | |
+ else opreg->base = resolve_reg(u, reg_type, reg); | |
+ } | |
+} | |
+ | |
+/* ----------------------------------------------------------------------------- | |
+ * decode_o() - Decodes offset | |
+ * ----------------------------------------------------------------------------- | |
+ */ | |
+static void | |
+decode_o(struct ud* u, unsigned int s, struct ud_operand *op) | |
+{ | |
+ switch (u->adr_mode) { | |
+ case 64: | |
+ op->offset = 64; | |
+ op->lval.uqword = inp_uint64(u); | |
+ break; | |
+ case 32: | |
+ op->offset = 32; | |
+ op->lval.udword = inp_uint32(u); | |
+ break; | |
+ case 16: | |
+ op->offset = 16; | |
+ op->lval.uword = inp_uint16(u); | |
+ break; | |
+ default: | |
+ return; | |
+ } | |
+ op->type = UD_OP_MEM; | |
+ op->size = resolve_operand_size(u, s); | |
+} | |
+ | |
+/* ----------------------------------------------------------------------------- | |
+ * disasm_operands() - Disassembles Operands. | |
+ * ----------------------------------------------------------------------------- | |
+ */ | |
+static int disasm_operands(register struct ud* u) | |
+{ | |
+ | |
+ | |
+ /* mopXt = map entry, operand X, type; */ | |
+ enum ud_operand_code mop1t = u->itab_entry->operand1.type; | |
+ enum ud_operand_code mop2t = u->itab_entry->operand2.type; | |
+ enum ud_operand_code mop3t = u->itab_entry->operand3.type; | |
+ | |
+ /* mopXs = map entry, operand X, size */ | |
+ unsigned int mop1s = u->itab_entry->operand1.size; | |
+ unsigned int mop2s = u->itab_entry->operand2.size; | |
+ unsigned int mop3s = u->itab_entry->operand3.size; | |
+ | |
+ /* iop = instruction operand */ | |
+ register struct ud_operand* iop = u->operand; | |
+ | |
+ switch(mop1t) { | |
+ | |
+ case OP_A : | |
+ decode_a(u, &(iop[0])); | |
+ break; | |
+ | |
+ /* M[b] ... */ | |
+ case OP_M : | |
+ if (MODRM_MOD(inp_peek(u)) == 3) | |
+ u->error= 1; | |
+ /* E, G/P/V/I/CL/1/S */ | |
+ case OP_E : | |
+ if (mop2t == OP_G) { | |
+ decode_modrm(u, &(iop[0]), mop1s, T_GPR, &(iop[1]), mop2s, T_GPR); | |
+ if (mop3t == OP_I) | |
+ decode_imm(u, mop3s, &(iop[2])); | |
+ else if (mop3t == OP_CL) { | |
+ iop[2].type = UD_OP_REG; | |
+ iop[2].base = UD_R_CL; | |
+ iop[2].size = 8; | |
+ } | |
+ } | |
+ else if (mop2t == OP_P) | |
+ decode_modrm(u, &(iop[0]), mop1s, T_GPR, &(iop[1]), mop2s, T_MMX); | |
+ else if (mop2t == OP_V) | |
+ decode_modrm(u, &(iop[0]), mop1s, T_GPR, &(iop[1]), mop2s, T_XMM); | |
+ else if (mop2t == OP_S) | |
+ decode_modrm(u, &(iop[0]), mop1s, T_GPR, &(iop[1]), mop2s, T_SEG); | |
+ else { | |
+ decode_modrm(u, &(iop[0]), mop1s, T_GPR, NULL, 0, T_NONE); | |
+ if (mop2t == OP_CL) { | |
+ iop[1].type = UD_OP_REG; | |
+ iop[1].base = UD_R_CL; | |
+ iop[1].size = 8; | |
+ } else if (mop2t == OP_I1) { | |
+ iop[1].type = UD_OP_CONST; | |
+ u->operand[1].lval.udword = 1; | |
+ } else if (mop2t == OP_I) { | |
+ decode_imm(u, mop2s, &(iop[1])); | |
+ } | |
+ } | |
+ break; | |
+ | |
+ /* G, E/PR[,I]/VR */ | |
+ case OP_G : | |
+ if (mop2t == OP_M) { | |
+ if (MODRM_MOD(inp_peek(u)) == 3) | |
+ u->error= 1; | |
+ decode_modrm(u, &(iop[1]), mop2s, T_GPR, &(iop[0]), mop1s, T_GPR); | |
+ } else if (mop2t == OP_E) { | |
+ decode_modrm(u, &(iop[1]), mop2s, T_GPR, &(iop[0]), mop1s, T_GPR); | |
+ if (mop3t == OP_I) | |
+ decode_imm(u, mop3s, &(iop[2])); | |
+ } else if (mop2t == OP_PR) { | |
+ decode_modrm(u, &(iop[1]), mop2s, T_MMX, &(iop[0]), mop1s, T_GPR); | |
+ if (mop3t == OP_I) | |
+ decode_imm(u, mop3s, &(iop[2])); | |
+ } else if (mop2t == OP_VR) { | |
+ if (MODRM_MOD(inp_peek(u)) != 3) | |
+ u->error = 1; | |
+ decode_modrm(u, &(iop[1]), mop2s, T_XMM, &(iop[0]), mop1s, T_GPR); | |
+ } else if (mop2t == OP_W) | |
+ decode_modrm(u, &(iop[1]), mop2s, T_XMM, &(iop[0]), mop1s, T_GPR); | |
+ break; | |
+ | |
+ /* AL..BH, I/O/DX */ | |
+ case OP_AL : case OP_CL : case OP_DL : case OP_BL : | |
+ case OP_AH : case OP_CH : case OP_DH : case OP_BH : | |
+ | |
+ iop[0].type = UD_OP_REG; | |
+ iop[0].base = UD_R_AL + (mop1t - OP_AL); | |
+ iop[0].size = 8; | |
+ | |
+ if (mop2t == OP_I) | |
+ decode_imm(u, mop2s, &(iop[1])); | |
+ else if (mop2t == OP_DX) { | |
+ iop[1].type = UD_OP_REG; | |
+ iop[1].base = UD_R_DX; | |
+ iop[1].size = 16; | |
+ } | |
+ else if (mop2t == OP_O) | |
+ decode_o(u, mop2s, &(iop[1])); | |
+ break; | |
+ | |
+ /* rAX[r8]..rDI[r15], I/rAX..rDI/O */ | |
+ case OP_rAXr8 : case OP_rCXr9 : case OP_rDXr10 : case OP_rBXr11 : | |
+ case OP_rSPr12: case OP_rBPr13: case OP_rSIr14 : case OP_rDIr15 : | |
+ case OP_rAX : case OP_rCX : case OP_rDX : case OP_rBX : | |
+ case OP_rSP : case OP_rBP : case OP_rSI : case OP_rDI : | |
+ | |
+ iop[0].type = UD_OP_REG; | |
+ iop[0].base = resolve_gpr64(u, mop1t); | |
+ | |
+ if (mop2t == OP_I) | |
+ decode_imm(u, mop2s, &(iop[1])); | |
+ else if (mop2t >= OP_rAX && mop2t <= OP_rDI) { | |
+ iop[1].type = UD_OP_REG; | |
+ iop[1].base = resolve_gpr64(u, mop2t); | |
+ } | |
+ else if (mop2t == OP_O) { | |
+ decode_o(u, mop2s, &(iop[1])); | |
+ iop[0].size = resolve_operand_size(u, mop2s); | |
+ } | |
+ break; | |
+ | |
+ /* AL[r8b]..BH[r15b], I */ | |
+ case OP_ALr8b : case OP_CLr9b : case OP_DLr10b : case OP_BLr11b : | |
+ case OP_AHr12b: case OP_CHr13b: case OP_DHr14b : case OP_BHr15b : | |
+ { | |
+ ud_type_t gpr = (mop1t - OP_ALr8b) + UD_R_AL + | |
+ (REX_B(u->pfx_rex) << 3); | |
+ if (UD_R_AH <= gpr && u->pfx_rex) | |
+ gpr = gpr + 4; | |
+ iop[0].type = UD_OP_REG; | |
+ iop[0].base = gpr; | |
+ if (mop2t == OP_I) | |
+ decode_imm(u, mop2s, &(iop[1])); | |
+ break; | |
+ } | |
+ | |
+ /* eAX..eDX, DX/I */ | |
+ case OP_eAX : case OP_eCX : case OP_eDX : case OP_eBX : | |
+ case OP_eSP : case OP_eBP : case OP_eSI : case OP_eDI : | |
+ iop[0].type = UD_OP_REG; | |
+ iop[0].base = resolve_gpr32(u, mop1t); | |
+ if (mop2t == OP_DX) { | |
+ iop[1].type = UD_OP_REG; | |
+ iop[1].base = UD_R_DX; | |
+ iop[1].size = 16; | |
+ } else if (mop2t == OP_I) | |
+ decode_imm(u, mop2s, &(iop[1])); | |
+ break; | |
+ | |
+ /* ES..GS */ | |
+ case OP_ES : case OP_CS : case OP_DS : | |
+ case OP_SS : case OP_FS : case OP_GS : | |
+ | |
+ /* in 64bits mode, only fs and gs are allowed */ | |
+ if (u->dis_mode == 64) | |
+ if (mop1t != OP_FS && mop1t != OP_GS) | |
+ u->error= 1; | |
+ iop[0].type = UD_OP_REG; | |
+ iop[0].base = (mop1t - OP_ES) + UD_R_ES; | |
+ iop[0].size = 16; | |
+ | |
+ break; | |
+ | |
+ /* J */ | |
+ case OP_J : | |
+ decode_imm(u, mop1s, &(iop[0])); | |
+ iop[0].type = UD_OP_JIMM; | |
+ break ; | |
+ | |
+ /* PR, I */ | |
+ case OP_PR: | |
+ if (MODRM_MOD(inp_peek(u)) != 3) | |
+ u->error = 1; | |
+ decode_modrm(u, &(iop[0]), mop1s, T_MMX, NULL, 0, T_NONE); | |
+ if (mop2t == OP_I) | |
+ decode_imm(u, mop2s, &(iop[1])); | |
+ break; | |
+ | |
+ /* VR, I */ | |
+ case OP_VR: | |
+ if (MODRM_MOD(inp_peek(u)) != 3) | |
+ u->error = 1; | |
+ decode_modrm(u, &(iop[0]), mop1s, T_XMM, NULL, 0, T_NONE); | |
+ if (mop2t == OP_I) | |
+ decode_imm(u, mop2s, &(iop[1])); | |
+ break; | |
+ | |
+ /* P, Q[,I]/W/E[,I],VR */ | |
+ case OP_P : | |
+ if (mop2t == OP_Q) { | |
+ decode_modrm(u, &(iop[1]), mop2s, T_MMX, &(iop[0]), mop1s, T_MMX); | |
+ if (mop3t == OP_I) | |
+ decode_imm(u, mop3s, &(iop[2])); | |
+ } else if (mop2t == OP_W) { | |
+ decode_modrm(u, &(iop[1]), mop2s, T_XMM, &(iop[0]), mop1s, T_MMX); | |
+ } else if (mop2t == OP_VR) { | |
+ if (MODRM_MOD(inp_peek(u)) != 3) | |
+ u->error = 1; | |
+ decode_modrm(u, &(iop[1]), mop2s, T_XMM, &(iop[0]), mop1s, T_MMX); | |
+ } else if (mop2t == OP_E) { | |
+ decode_modrm(u, &(iop[1]), mop2s, T_GPR, &(iop[0]), mop1s, T_MMX); | |
+ if (mop3t == OP_I) | |
+ decode_imm(u, mop3s, &(iop[2])); | |
+ } | |
+ break; | |
+ | |
+ /* R, C/D */ | |
+ case OP_R : | |
+ if (mop2t == OP_C) | |
+ decode_modrm(u, &(iop[0]), mop1s, T_GPR, &(iop[1]), mop2s, T_CRG); | |
+ else if (mop2t == OP_D) | |
+ decode_modrm(u, &(iop[0]), mop1s, T_GPR, &(iop[1]), mop2s, T_DBG); | |
+ break; | |
+ | |
+ /* C, R */ | |
+ case OP_C : | |
+ decode_modrm(u, &(iop[1]), mop2s, T_GPR, &(iop[0]), mop1s, T_CRG); | |
+ break; | |
+ | |
+ /* D, R */ | |
+ case OP_D : | |
+ decode_modrm(u, &(iop[1]), mop2s, T_GPR, &(iop[0]), mop1s, T_DBG); | |
+ break; | |
+ | |
+ /* Q, P */ | |
+ case OP_Q : | |
+ decode_modrm(u, &(iop[0]), mop1s, T_MMX, &(iop[1]), mop2s, T_MMX); | |
+ break; | |
+ | |
+ /* S, E */ | |
+ case OP_S : | |
+ decode_modrm(u, &(iop[1]), mop2s, T_GPR, &(iop[0]), mop1s, T_SEG); | |
+ break; | |
+ | |
+ /* W, V */ | |
+ case OP_W : | |
+ decode_modrm(u, &(iop[0]), mop1s, T_XMM, &(iop[1]), mop2s, T_XMM); | |
+ break; | |
+ | |
+ /* V, W[,I]/Q/M/E */ | |
+ case OP_V : | |
+ if (mop2t == OP_W) { | |
+ /* special cases for movlps and movhps */ | |
+ if (MODRM_MOD(inp_peek(u)) == 3) { | |
+ if (u->mnemonic == UD_Imovlps) | |
+ u->mnemonic = UD_Imovhlps; | |
+ else | |
+ if (u->mnemonic == UD_Imovhps) | |
+ u->mnemonic = UD_Imovlhps; | |
+ } | |
+ decode_modrm(u, &(iop[1]), mop2s, T_XMM, &(iop[0]), mop1s, T_XMM); | |
+ if (mop3t == OP_I) | |
+ decode_imm(u, mop3s, &(iop[2])); | |
+ } else if (mop2t == OP_Q) | |
+ decode_modrm(u, &(iop[1]), mop2s, T_MMX, &(iop[0]), mop1s, T_XMM); | |
+ else if (mop2t == OP_M) { | |
+ if (MODRM_MOD(inp_peek(u)) == 3) | |
+ u->error= 1; | |
+ decode_modrm(u, &(iop[1]), mop2s, T_GPR, &(iop[0]), mop1s, T_XMM); | |
+ } else if (mop2t == OP_E) { | |
+ decode_modrm(u, &(iop[1]), mop2s, T_GPR, &(iop[0]), mop1s, T_XMM); | |
+ } else if (mop2t == OP_PR) { | |
+ decode_modrm(u, &(iop[1]), mop2s, T_MMX, &(iop[0]), mop1s, T_XMM); | |
+ } | |
+ break; | |
+ | |
+ /* DX, eAX/AL */ | |
+ case OP_DX : | |
+ iop[0].type = UD_OP_REG; | |
+ iop[0].base = UD_R_DX; | |
+ iop[0].size = 16; | |
+ | |
+ if (mop2t == OP_eAX) { | |
+ iop[1].type = UD_OP_REG; | |
+ iop[1].base = resolve_gpr32(u, mop2t); | |
+ } else if (mop2t == OP_AL) { | |
+ iop[1].type = UD_OP_REG; | |
+ iop[1].base = UD_R_AL; | |
+ iop[1].size = 8; | |
+ } | |
+ | |
+ break; | |
+ | |
+ /* I, I/AL/eAX */ | |
+ case OP_I : | |
+ decode_imm(u, mop1s, &(iop[0])); | |
+ if (mop2t == OP_I) | |
+ decode_imm(u, mop2s, &(iop[1])); | |
+ else if (mop2t == OP_AL) { | |
+ iop[1].type = UD_OP_REG; | |
+ iop[1].base = UD_R_AL; | |
+ iop[1].size = 16; | |
+ } else if (mop2t == OP_eAX) { | |
+ iop[1].type = UD_OP_REG; | |
+ iop[1].base = resolve_gpr32(u, mop2t); | |
+ } | |
+ break; | |
+ | |
+ /* O, AL/eAX */ | |
+ case OP_O : | |
+ decode_o(u, mop1s, &(iop[0])); | |
+ iop[1].type = UD_OP_REG; | |
+ iop[1].size = resolve_operand_size(u, mop1s); | |
+ if (mop2t == OP_AL) | |
+ iop[1].base = UD_R_AL; | |
+ else if (mop2t == OP_eAX) | |
+ iop[1].base = resolve_gpr32(u, mop2t); | |
+ else if (mop2t == OP_rAX) | |
+ iop[1].base = resolve_gpr64(u, mop2t); | |
+ break; | |
+ | |
+ /* 3 */ | |
+ case OP_I3 : | |
+ iop[0].type = UD_OP_CONST; | |
+ iop[0].lval.sbyte = 3; | |
+ break; | |
+ | |
+ /* ST(n), ST(n) */ | |
+ case OP_ST0 : case OP_ST1 : case OP_ST2 : case OP_ST3 : | |
+ case OP_ST4 : case OP_ST5 : case OP_ST6 : case OP_ST7 : | |
+ | |
+ iop[0].type = UD_OP_REG; | |
+ iop[0].base = (mop1t-OP_ST0) + UD_R_ST0; | |
+ iop[0].size = 0; | |
+ | |
+ if (mop2t >= OP_ST0 && mop2t <= OP_ST7) { | |
+ iop[1].type = UD_OP_REG; | |
+ iop[1].base = (mop2t-OP_ST0) + UD_R_ST0; | |
+ iop[1].size = 0; | |
+ } | |
+ break; | |
+ | |
+ /* AX */ | |
+ case OP_AX: | |
+ iop[0].type = UD_OP_REG; | |
+ iop[0].base = UD_R_AX; | |
+ iop[0].size = 16; | |
+ break; | |
+ | |
+ /* none */ | |
+ default : | |
+ iop[0].type = iop[1].type = iop[2].type = UD_NONE; | |
+ } | |
+ | |
+ return 0; | |
+} | |
+ | |
+/* ----------------------------------------------------------------------------- | |
+ * clear_insn() - clear instruction pointer | |
+ * ----------------------------------------------------------------------------- | |
+ */ | |
+static int clear_insn(register struct ud* u) | |
+{ | |
+ u->error = 0; | |
+ u->pfx_seg = 0; | |
+ u->pfx_opr = 0; | |
+ u->pfx_adr = 0; | |
+ u->pfx_lock = 0; | |
+ u->pfx_repne = 0; | |
+ u->pfx_rep = 0; | |
+ u->pfx_repe = 0; | |
+ u->pfx_seg = 0; | |
+ u->pfx_rex = 0; | |
+ u->pfx_insn = 0; | |
+ u->mnemonic = UD_Inone; | |
+ u->itab_entry = NULL; | |
+ | |
+ memset( &u->operand[ 0 ], 0, sizeof( struct ud_operand ) ); | |
+ memset( &u->operand[ 1 ], 0, sizeof( struct ud_operand ) ); | |
+ memset( &u->operand[ 2 ], 0, sizeof( struct ud_operand ) ); | |
+ | |
+ return 0; | |
+} | |
+ | |
+static int do_mode( struct ud* u ) | |
+{ | |
+ /* if in error state, bail out */ | |
+ if ( u->error ) return -1; | |
+ | |
+ /* propagate perfix effects */ | |
+ if ( u->dis_mode == 64 ) { /* set 64bit-mode flags */ | |
+ | |
+ /* Check validity of instruction m64 */ | |
+ if ( P_INV64( u->itab_entry->prefix ) ) { | |
+ u->error = 1; | |
+ return -1; | |
+ } | |
+ | |
+ /* effective rex prefix is the effective mask for the | |
+ * instruction hard-coded in the opcode map. | |
+ */ | |
+ u->pfx_rex = ( u->pfx_rex & 0x40 ) | | |
+ ( u->pfx_rex & REX_PFX_MASK( u->itab_entry->prefix ) ); | |
+ | |
+ /* whether this instruction has a default operand size of | |
+ * 64bit, also hardcoded into the opcode map. | |
+ */ | |
+ u->default64 = P_DEF64( u->itab_entry->prefix ); | |
+ /* calculate effective operand size */ | |
+ if ( REX_W( u->pfx_rex ) ) { | |
+ u->opr_mode = 64; | |
+ } else if ( u->pfx_opr ) { | |
+ u->opr_mode = 16; | |
+ } else { | |
+ /* unless the default opr size of instruction is 64, | |
+ * the effective operand size in the absence of rex.w | |
+ * prefix is 32. | |
+ */ | |
+ u->opr_mode = ( u->default64 ) ? 64 : 32; | |
+ } | |
+ | |
+ /* calculate effective address size */ | |
+ u->adr_mode = (u->pfx_adr) ? 32 : 64; | |
+ } else if ( u->dis_mode == 32 ) { /* set 32bit-mode flags */ | |
+ u->opr_mode = ( u->pfx_opr ) ? 16 : 32; | |
+ u->adr_mode = ( u->pfx_adr ) ? 16 : 32; | |
+ } else if ( u->dis_mode == 16 ) { /* set 16bit-mode flags */ | |
+ u->opr_mode = ( u->pfx_opr ) ? 32 : 16; | |
+ u->adr_mode = ( u->pfx_adr ) ? 32 : 16; | |
+ } | |
+ | |
+ /* These flags determine which operand to apply the operand size | |
+ * cast to. | |
+ */ | |
+ u->c1 = ( P_C1( u->itab_entry->prefix ) ) ? 1 : 0; | |
+ u->c2 = ( P_C2( u->itab_entry->prefix ) ) ? 1 : 0; | |
+ u->c3 = ( P_C3( u->itab_entry->prefix ) ) ? 1 : 0; | |
+ | |
+ /* set flags for implicit addressing */ | |
+ u->implicit_addr = P_IMPADDR( u->itab_entry->prefix ); | |
+ | |
+ return 0; | |
+} | |
+ | |
+static int gen_hex( struct ud *u ) | |
+{ | |
+ unsigned int i; | |
+ unsigned char *src_ptr = inp_sess( u ); | |
+ char* src_hex; | |
+ | |
+ /* bail out if in error stat. */ | |
+ if ( u->error ) return -1; | |
+ /* output buffer pointe */ | |
+ src_hex = ( char* ) u->insn_hexcode; | |
+ /* for each byte used to decode instruction */ | |
+ for ( i = 0; i < u->inp_ctr; ++i, ++src_ptr) { | |
+ sprintf( src_hex, "%02x", *src_ptr & 0xFF ); | |
+ src_hex += 2; | |
+ } | |
+ return 0; | |
+} | |
+ | |
+/* ============================================================================= | |
+ * ud_decode() - Instruction decoder. Returns the number of bytes decoded. | |
+ * ============================================================================= | |
+ */ | |
+unsigned int ud_decode( struct ud* u ) | |
+{ | |
+ inp_start(u); | |
+ | |
+ if ( clear_insn( u ) ) { | |
+ ; /* error */ | |
+ } else if ( get_prefixes( u ) != 0 ) { | |
+ ; /* error */ | |
+ } else if ( search_itab( u ) != 0 ) { | |
+ ; /* error */ | |
+ } else if ( do_mode( u ) != 0 ) { | |
+ ; /* error */ | |
+ } else if ( disasm_operands( u ) != 0 ) { | |
+ ; /* error */ | |
+ } else if ( resolve_mnemonic( u ) != 0 ) { | |
+ ; /* error */ | |
+ } | |
+ | |
+ /* Handle decode error. */ | |
+ if ( u->error ) { | |
+ /* clear out the decode data. */ | |
+ clear_insn( u ); | |
+ /* mark the sequence of bytes as invalid. */ | |
+ u->itab_entry = & ie_invalid; | |
+ u->mnemonic = u->itab_entry->mnemonic; | |
+ } | |
+ | |
+ u->insn_offset = u->pc; /* set offset of instruction */ | |
+ u->insn_fill = 0; /* set translation buffer index to 0 */ | |
+ u->pc += u->inp_ctr; /* move program counter by bytes decoded */ | |
+ gen_hex( u ); /* generate hex code */ | |
+ | |
+ /* return number of bytes disassembled. */ | |
+ return u->inp_ctr; | |
+} | |
+ | |
+/* vim:cindent | |
+ * vim:ts=4 | |
+ * vim:sw=4 | |
+ * vim:expandtab | |
+ */ | |
Property changes on: lib/libudis86/decode.c | |
___________________________________________________________________ | |
Added: svn:executable | |
## -0,0 +1 ## | |
+* | |
\ No newline at end of property | |
Index: lib/libudis86/decode.h | |
=================================================================== | |
--- lib/libudis86/decode.h (revision 0) | |
+++ lib/libudis86/decode.h (working copy) | |
@@ -0,0 +1,275 @@ | |
+#ifndef UD_DECODE_H | |
+#define UD_DECODE_H | |
+ | |
+#define MAX_INSN_LENGTH 15 | |
+ | |
+/* register classes */ | |
+#define T_NONE 0 | |
+#define T_GPR 1 | |
+#define T_MMX 2 | |
+#define T_CRG 3 | |
+#define T_DBG 4 | |
+#define T_SEG 5 | |
+#define T_XMM 6 | |
+ | |
+/* itab prefix bits */ | |
+#define P_none ( 0 ) | |
+#define P_c1 ( 1 << 0 ) | |
+#define P_C1(n) ( ( n >> 0 ) & 1 ) | |
+#define P_rexb ( 1 << 1 ) | |
+#define P_REXB(n) ( ( n >> 1 ) & 1 ) | |
+#define P_depM ( 1 << 2 ) | |
+#define P_DEPM(n) ( ( n >> 2 ) & 1 ) | |
+#define P_c3 ( 1 << 3 ) | |
+#define P_C3(n) ( ( n >> 3 ) & 1 ) | |
+#define P_inv64 ( 1 << 4 ) | |
+#define P_INV64(n) ( ( n >> 4 ) & 1 ) | |
+#define P_rexw ( 1 << 5 ) | |
+#define P_REXW(n) ( ( n >> 5 ) & 1 ) | |
+#define P_c2 ( 1 << 6 ) | |
+#define P_C2(n) ( ( n >> 6 ) & 1 ) | |
+#define P_def64 ( 1 << 7 ) | |
+#define P_DEF64(n) ( ( n >> 7 ) & 1 ) | |
+#define P_rexr ( 1 << 8 ) | |
+#define P_REXR(n) ( ( n >> 8 ) & 1 ) | |
+#define P_oso ( 1 << 9 ) | |
+#define P_OSO(n) ( ( n >> 9 ) & 1 ) | |
+#define P_aso ( 1 << 10 ) | |
+#define P_ASO(n) ( ( n >> 10 ) & 1 ) | |
+#define P_rexx ( 1 << 11 ) | |
+#define P_REXX(n) ( ( n >> 11 ) & 1 ) | |
+#define P_ImpAddr ( 1 << 12 ) | |
+#define P_IMPADDR(n) ( ( n >> 12 ) & 1 ) | |
+ | |
+/* rex prefix bits */ | |
+#define REX_W(r) ( ( 0xF & ( r ) ) >> 3 ) | |
+#define REX_R(r) ( ( 0x7 & ( r ) ) >> 2 ) | |
+#define REX_X(r) ( ( 0x3 & ( r ) ) >> 1 ) | |
+#define REX_B(r) ( ( 0x1 & ( r ) ) >> 0 ) | |
+#define REX_PFX_MASK(n) ( ( P_REXW(n) << 3 ) | \ | |
+ ( P_REXR(n) << 2 ) | \ | |
+ ( P_REXX(n) << 1 ) | \ | |
+ ( P_REXB(n) << 0 ) ) | |
+ | |
+/* scable-index-base bits */ | |
+#define SIB_S(b) ( ( b ) >> 6 ) | |
+#define SIB_I(b) ( ( ( b ) >> 3 ) & 7 ) | |
+#define SIB_B(b) ( ( b ) & 7 ) | |
+ | |
+/* modrm bits */ | |
+#define MODRM_REG(b) ( ( ( b ) >> 3 ) & 7 ) | |
+#define MODRM_NNN(b) ( ( ( b ) >> 3 ) & 7 ) | |
+#define MODRM_MOD(b) ( ( ( b ) >> 6 ) & 3 ) | |
+#define MODRM_RM(b) ( ( b ) & 7 ) | |
+ | |
+/* operand type constants -- order is important! */ | |
+ | |
+enum ud_operand_code { | |
+ OP_NONE, | |
+ | |
+ OP_A, OP_E, OP_M, OP_G, | |
+ OP_I, | |
+ | |
+ OP_AL, OP_CL, OP_DL, OP_BL, | |
+ OP_AH, OP_CH, OP_DH, OP_BH, | |
+ | |
+ OP_ALr8b, OP_CLr9b, OP_DLr10b, OP_BLr11b, | |
+ OP_AHr12b, OP_CHr13b, OP_DHr14b, OP_BHr15b, | |
+ | |
+ OP_AX, OP_CX, OP_DX, OP_BX, | |
+ OP_SI, OP_DI, OP_SP, OP_BP, | |
+ | |
+ OP_rAX, OP_rCX, OP_rDX, OP_rBX, | |
+ OP_rSP, OP_rBP, OP_rSI, OP_rDI, | |
+ | |
+ OP_rAXr8, OP_rCXr9, OP_rDXr10, OP_rBXr11, | |
+ OP_rSPr12, OP_rBPr13, OP_rSIr14, OP_rDIr15, | |
+ | |
+ OP_eAX, OP_eCX, OP_eDX, OP_eBX, | |
+ OP_eSP, OP_eBP, OP_eSI, OP_eDI, | |
+ | |
+ OP_ES, OP_CS, OP_SS, OP_DS, | |
+ OP_FS, OP_GS, | |
+ | |
+ OP_ST0, OP_ST1, OP_ST2, OP_ST3, | |
+ OP_ST4, OP_ST5, OP_ST6, OP_ST7, | |
+ | |
+ OP_J, OP_S, OP_O, | |
+ OP_I1, OP_I3, | |
+ | |
+ OP_V, OP_W, OP_Q, OP_P, | |
+ | |
+ OP_R, OP_C, OP_D, OP_VR, OP_PR | |
+}; | |
+ | |
+ | |
+/* operand size constants */ | |
+ | |
+enum ud_operand_size { | |
+ SZ_NA = 0, | |
+ SZ_Z = 1, | |
+ SZ_V = 2, | |
+ SZ_P = 3, | |
+ SZ_WP = 4, | |
+ SZ_DP = 5, | |
+ SZ_MDQ = 6, | |
+ SZ_RDQ = 7, | |
+ | |
+ /* the following values are used as is, | |
+ * and thus hard-coded. changing them | |
+ * will break internals | |
+ */ | |
+ SZ_B = 8, | |
+ SZ_W = 16, | |
+ SZ_D = 32, | |
+ SZ_Q = 64, | |
+ SZ_T = 80, | |
+}; | |
+ | |
+/* itab entry operand definitions */ | |
+ | |
+#define O_rSPr12 { OP_rSPr12, SZ_NA } | |
+#define O_BL { OP_BL, SZ_NA } | |
+#define O_BH { OP_BH, SZ_NA } | |
+#define O_BP { OP_BP, SZ_NA } | |
+#define O_AHr12b { OP_AHr12b, SZ_NA } | |
+#define O_BX { OP_BX, SZ_NA } | |
+#define O_Jz { OP_J, SZ_Z } | |
+#define O_Jv { OP_J, SZ_V } | |
+#define O_Jb { OP_J, SZ_B } | |
+#define O_rSIr14 { OP_rSIr14, SZ_NA } | |
+#define O_GS { OP_GS, SZ_NA } | |
+#define O_D { OP_D, SZ_NA } | |
+#define O_rBPr13 { OP_rBPr13, SZ_NA } | |
+#define O_Ob { OP_O, SZ_B } | |
+#define O_P { OP_P, SZ_NA } | |
+#define O_Ow { OP_O, SZ_W } | |
+#define O_Ov { OP_O, SZ_V } | |
+#define O_Gw { OP_G, SZ_W } | |
+#define O_Gv { OP_G, SZ_V } | |
+#define O_rDX { OP_rDX, SZ_NA } | |
+#define O_Gx { OP_G, SZ_MDQ } | |
+#define O_Gd { OP_G, SZ_D } | |
+#define O_Gb { OP_G, SZ_B } | |
+#define O_rBXr11 { OP_rBXr11, SZ_NA } | |
+#define O_rDI { OP_rDI, SZ_NA } | |
+#define O_rSI { OP_rSI, SZ_NA } | |
+#define O_ALr8b { OP_ALr8b, SZ_NA } | |
+#define O_eDI { OP_eDI, SZ_NA } | |
+#define O_Gz { OP_G, SZ_Z } | |
+#define O_eDX { OP_eDX, SZ_NA } | |
+#define O_DHr14b { OP_DHr14b, SZ_NA } | |
+#define O_rSP { OP_rSP, SZ_NA } | |
+#define O_PR { OP_PR, SZ_NA } | |
+#define O_NONE { OP_NONE, SZ_NA } | |
+#define O_rCX { OP_rCX, SZ_NA } | |
+#define O_jWP { OP_J, SZ_WP } | |
+#define O_rDXr10 { OP_rDXr10, SZ_NA } | |
+#define O_Md { OP_M, SZ_D } | |
+#define O_C { OP_C, SZ_NA } | |
+#define O_G { OP_G, SZ_NA } | |
+#define O_Mb { OP_M, SZ_B } | |
+#define O_Mt { OP_M, SZ_T } | |
+#define O_S { OP_S, SZ_NA } | |
+#define O_Mq { OP_M, SZ_Q } | |
+#define O_W { OP_W, SZ_NA } | |
+#define O_ES { OP_ES, SZ_NA } | |
+#define O_rBX { OP_rBX, SZ_NA } | |
+#define O_Ed { OP_E, SZ_D } | |
+#define O_DLr10b { OP_DLr10b, SZ_NA } | |
+#define O_Mw { OP_M, SZ_W } | |
+#define O_Eb { OP_E, SZ_B } | |
+#define O_Ex { OP_E, SZ_MDQ } | |
+#define O_Ez { OP_E, SZ_Z } | |
+#define O_Ew { OP_E, SZ_W } | |
+#define O_Ev { OP_E, SZ_V } | |
+#define O_Ep { OP_E, SZ_P } | |
+#define O_FS { OP_FS, SZ_NA } | |
+#define O_Ms { OP_M, SZ_W } | |
+#define O_rAXr8 { OP_rAXr8, SZ_NA } | |
+#define O_eBP { OP_eBP, SZ_NA } | |
+#define O_Isb { OP_I, SZ_SB } | |
+#define O_eBX { OP_eBX, SZ_NA } | |
+#define O_rCXr9 { OP_rCXr9, SZ_NA } | |
+#define O_jDP { OP_J, SZ_DP } | |
+#define O_CH { OP_CH, SZ_NA } | |
+#define O_CL { OP_CL, SZ_NA } | |
+#define O_R { OP_R, SZ_RDQ } | |
+#define O_V { OP_V, SZ_NA } | |
+#define O_CS { OP_CS, SZ_NA } | |
+#define O_CHr13b { OP_CHr13b, SZ_NA } | |
+#define O_eCX { OP_eCX, SZ_NA } | |
+#define O_eSP { OP_eSP, SZ_NA } | |
+#define O_SS { OP_SS, SZ_NA } | |
+#define O_SP { OP_SP, SZ_NA } | |
+#define O_BLr11b { OP_BLr11b, SZ_NA } | |
+#define O_SI { OP_SI, SZ_NA } | |
+#define O_eSI { OP_eSI, SZ_NA } | |
+#define O_DL { OP_DL, SZ_NA } | |
+#define O_DH { OP_DH, SZ_NA } | |
+#define O_DI { OP_DI, SZ_NA } | |
+#define O_DX { OP_DX, SZ_NA } | |
+#define O_rBP { OP_rBP, SZ_NA } | |
+#define O_Gvw { OP_G, SZ_MDQ } | |
+#define O_I1 { OP_I1, SZ_NA } | |
+#define O_I3 { OP_I3, SZ_NA } | |
+#define O_DS { OP_DS, SZ_NA } | |
+#define O_ST4 { OP_ST4, SZ_NA } | |
+#define O_ST5 { OP_ST5, SZ_NA } | |
+#define O_ST6 { OP_ST6, SZ_NA } | |
+#define O_ST7 { OP_ST7, SZ_NA } | |
+#define O_ST0 { OP_ST0, SZ_NA } | |
+#define O_ST1 { OP_ST1, SZ_NA } | |
+#define O_ST2 { OP_ST2, SZ_NA } | |
+#define O_ST3 { OP_ST3, SZ_NA } | |
+#define O_E { OP_E, SZ_NA } | |
+#define O_AH { OP_AH, SZ_NA } | |
+#define O_M { OP_M, SZ_NA } | |
+#define O_AL { OP_AL, SZ_NA } | |
+#define O_CLr9b { OP_CLr9b, SZ_NA } | |
+#define O_Q { OP_Q, SZ_NA } | |
+#define O_eAX { OP_eAX, SZ_NA } | |
+#define O_VR { OP_VR, SZ_NA } | |
+#define O_AX { OP_AX, SZ_NA } | |
+#define O_rAX { OP_rAX, SZ_NA } | |
+#define O_Iz { OP_I, SZ_Z } | |
+#define O_rDIr15 { OP_rDIr15, SZ_NA } | |
+#define O_Iw { OP_I, SZ_W } | |
+#define O_Iv { OP_I, SZ_V } | |
+#define O_Ap { OP_A, SZ_P } | |
+#define O_CX { OP_CX, SZ_NA } | |
+#define O_Ib { OP_I, SZ_B } | |
+#define O_BHr15b { OP_BHr15b, SZ_NA } | |
+ | |
+ | |
+/* A single operand of an entry in the instruction table. | |
+ * (internal use only) | |
+ */ | |
+struct ud_itab_entry_operand | |
+{ | |
+ enum ud_operand_code type; | |
+ enum ud_operand_size size; | |
+}; | |
+ | |
+ | |
+/* A single entry in an instruction table. | |
+ *(internal use only) | |
+ */ | |
+struct ud_itab_entry | |
+{ | |
+ enum ud_mnemonic_code mnemonic; | |
+ struct ud_itab_entry_operand operand1; | |
+ struct ud_itab_entry_operand operand2; | |
+ struct ud_itab_entry_operand operand3; | |
+ uint32_t prefix; | |
+}; | |
+ | |
+extern const char * ud_lookup_mnemonic( enum ud_mnemonic_code c ); | |
+ | |
+#endif /* UD_DECODE_H */ | |
+ | |
+/* vim:cindent | |
+ * vim:expandtab | |
+ * vim:ts=4 | |
+ * vim:sw=4 | |
+ */ | |
Index: lib/libudis86/Makefile | |
=================================================================== | |
--- lib/libudis86/Makefile (revision 0) | |
+++ lib/libudis86/Makefile (working copy) | |
@@ -0,0 +1,11 @@ | |
+# from BSDI Makefile,v 2.6 1996/04/08 20:06:40 bostic Exp | |
+# | |
+# $FreeBSD: projects/doscmd/Makefile,v 1.39 2004/03/30 17:10:01 des Exp $ | |
+ | |
+LIB= udis86 | |
+WARNS?= 2 | |
+SRCS= itab.c input.c decode.c syn.c syn-intel.c syn-att.c udis86.c | |
+INCS= udis86.h types.h extern.h itab.h | |
+INCSDIR= ${INCLUDEDIR}/udis86 | |
+ | |
+.include <bsd.lib.mk> | |
Index: lib/libudis86/input.c | |
=================================================================== | |
--- lib/libudis86/input.c (revision 0) | |
+++ lib/libudis86/input.c (working copy) | |
@@ -0,0 +1,226 @@ | |
+/* ----------------------------------------------------------------------------- | |
+ * input.c | |
+ * | |
+ * Copyright (c) 2004, 2005, 2006, Vivek Mohan <vivek@sig9.com> | |
+ * All rights reserved. See LICENSE | |
+ * ----------------------------------------------------------------------------- | |
+ */ | |
+#include "extern.h" | |
+#include "types.h" | |
+#include "input.h" | |
+ | |
+/* ----------------------------------------------------------------------------- | |
+ * inp_buff_hook() - Hook for buffered inputs. | |
+ * ----------------------------------------------------------------------------- | |
+ */ | |
+static int | |
+inp_buff_hook(struct ud* u) | |
+{ | |
+ if (u->inp_buff < u->inp_buff_end) | |
+ return *u->inp_buff++; | |
+ else return -1; | |
+} | |
+ | |
+#ifndef __UD_STANDALONE__ | |
+/* ----------------------------------------------------------------------------- | |
+ * inp_file_hook() - Hook for FILE inputs. | |
+ * ----------------------------------------------------------------------------- | |
+ */ | |
+static int | |
+inp_file_hook(struct ud* u) | |
+{ | |
+ return fgetc(u->inp_file); | |
+} | |
+#endif /* __UD_STANDALONE__*/ | |
+ | |
+/* ============================================================================= | |
+ * ud_inp_set_hook() - Sets input hook. | |
+ * ============================================================================= | |
+ */ | |
+extern void | |
+ud_set_input_hook(register struct ud* u, int (*hook)(struct ud*)) | |
+{ | |
+ u->inp_hook = hook; | |
+ inp_init(u); | |
+} | |
+ | |
+/* ============================================================================= | |
+ * ud_inp_set_buffer() - Set buffer as input. | |
+ * ============================================================================= | |
+ */ | |
+extern void | |
+ud_set_input_buffer(register struct ud* u, uint8_t* buf, size_t len) | |
+{ | |
+ u->inp_hook = inp_buff_hook; | |
+ u->inp_buff = buf; | |
+ u->inp_buff_end = buf + len; | |
+ inp_init(u); | |
+} | |
+ | |
+#ifndef __UD_STANDALONE__ | |
+/* ============================================================================= | |
+ * ud_input_set_file() - Set buffer as input. | |
+ * ============================================================================= | |
+ */ | |
+extern void | |
+ud_set_input_file(register struct ud* u, FILE* f) | |
+{ | |
+ u->inp_hook = inp_file_hook; | |
+ u->inp_file = f; | |
+ inp_init(u); | |
+} | |
+#endif /* __UD_STANDALONE__ */ | |
+ | |
+/* ============================================================================= | |
+ * ud_input_skip() - Skip n input bytes. | |
+ * ============================================================================= | |
+ */ | |
+extern void | |
+ud_input_skip(struct ud* u, size_t n) | |
+{ | |
+ while (n--) { | |
+ u->inp_hook(u); | |
+ } | |
+} | |
+ | |
+/* ============================================================================= | |
+ * ud_input_end() - Test for end of input. | |
+ * ============================================================================= | |
+ */ | |
+extern int | |
+ud_input_end(struct ud* u) | |
+{ | |
+ return (u->inp_curr == u->inp_fill) && u->inp_end; | |
+} | |
+ | |
+/* ----------------------------------------------------------------------------- | |
+ * inp_next() - Loads and returns the next byte from input. | |
+ * | |
+ * inp_curr and inp_fill are pointers to the cache. The program is written based | |
+ * on the property that they are 8-bits in size, and will eventually wrap around | |
+ * forming a circular buffer. So, the size of the cache is 256 in size, kind of | |
+ * unnecessary yet optimized. | |
+ * | |
+ * A buffer inp_sess stores the bytes disassembled for a single session. | |
+ * ----------------------------------------------------------------------------- | |
+ */ | |
+extern uint8_t inp_next(struct ud* u) | |
+{ | |
+ int c = -1; | |
+ /* if current pointer is not upto the fill point in the | |
+ * input cache. | |
+ */ | |
+ if ( u->inp_curr != u->inp_fill ) { | |
+ c = u->inp_cache[ ++u->inp_curr ]; | |
+ /* if !end-of-input, call the input hook and get a byte */ | |
+ } else if ( u->inp_end || ( c = u->inp_hook( u ) ) == -1 ) { | |
+ /* end-of-input, mark it as an error, since the decoder, | |
+ * expected a byte more. | |
+ */ | |
+ u->error = 1; | |
+ /* flag end of input */ | |
+ u->inp_end = 1; | |
+ return 0; | |
+ } else { | |
+ /* increment pointers, we have a new byte. */ | |
+ u->inp_curr = ++u->inp_fill; | |
+ /* add the byte to the cache */ | |
+ u->inp_cache[ u->inp_fill ] = c; | |
+ } | |
+ /* record bytes input per decode-session. */ | |
+ u->inp_sess[ u->inp_ctr++ ] = c; | |
+ /* return byte */ | |
+ return ( uint8_t ) c; | |
+} | |
+ | |
+/* ----------------------------------------------------------------------------- | |
+ * inp_back() - Move back a single byte in the stream. | |
+ * ----------------------------------------------------------------------------- | |
+ */ | |
+extern void | |
+inp_back(struct ud* u) | |
+{ | |
+ if ( u->inp_ctr > 0 ) { | |
+ --u->inp_curr; | |
+ --u->inp_ctr; | |
+ } | |
+} | |
+ | |
+/* ----------------------------------------------------------------------------- | |
+ * inp_peek() - Peek into the next byte in source. | |
+ * ----------------------------------------------------------------------------- | |
+ */ | |
+extern uint8_t | |
+inp_peek(struct ud* u) | |
+{ | |
+ uint8_t r = inp_next(u); | |
+ if ( !u->error ) inp_back(u); /* Don't backup if there was an error */ | |
+ return r; | |
+} | |
+ | |
+/* ----------------------------------------------------------------------------- | |
+ * inp_move() - Move ahead n input bytes. | |
+ * ----------------------------------------------------------------------------- | |
+ */ | |
+extern void | |
+inp_move(struct ud* u, size_t n) | |
+{ | |
+ while (n--) | |
+ inp_next(u); | |
+} | |
+ | |
+/*------------------------------------------------------------------------------ | |
+ * inp_uintN() - return uintN from source. | |
+ *------------------------------------------------------------------------------ | |
+ */ | |
+extern uint8_t | |
+inp_uint8(struct ud* u) | |
+{ | |
+ return inp_next(u); | |
+} | |
+ | |
+extern uint16_t | |
+inp_uint16(struct ud* u) | |
+{ | |
+ uint16_t r, ret; | |
+ | |
+ ret = inp_next(u); | |
+ r = inp_next(u); | |
+ return ret | (r << 8); | |
+} | |
+ | |
+extern uint32_t | |
+inp_uint32(struct ud* u) | |
+{ | |
+ uint32_t r, ret; | |
+ | |
+ ret = inp_next(u); | |
+ r = inp_next(u); | |
+ ret = ret | (r << 8); | |
+ r = inp_next(u); | |
+ ret = ret | (r << 16); | |
+ r = inp_next(u); | |
+ return ret | (r << 24); | |
+} | |
+ | |
+extern uint64_t | |
+inp_uint64(struct ud* u) | |
+{ | |
+ uint64_t r, ret; | |
+ | |
+ ret = inp_next(u); | |
+ r = inp_next(u); | |
+ ret = ret | (r << 8); | |
+ r = inp_next(u); | |
+ ret = ret | (r << 16); | |
+ r = inp_next(u); | |
+ ret = ret | (r << 24); | |
+ r = inp_next(u); | |
+ ret = ret | (r << 32); | |
+ r = inp_next(u); | |
+ ret = ret | (r << 40); | |
+ r = inp_next(u); | |
+ ret = ret | (r << 48); | |
+ r = inp_next(u); | |
+ return ret | (r << 56); | |
+} | |
Property changes on: lib/libudis86/input.c | |
___________________________________________________________________ | |
Added: svn:executable | |
## -0,0 +1 ## | |
+* | |
\ No newline at end of property | |
Index: lib/libudis86/syn-att.c | |
=================================================================== | |
--- lib/libudis86/syn-att.c (revision 0) | |
+++ lib/libudis86/syn-att.c (working copy) | |
@@ -0,0 +1,211 @@ | |
+/* ----------------------------------------------------------------------------- | |
+ * syn-att.c | |
+ * | |
+ * Copyright (c) 2004, 2005, 2006 Vivek Mohan <vivek@sig9.com> | |
+ * All rights reserved. See (LICENSE) | |
+ * ----------------------------------------------------------------------------- | |
+ */ | |
+ | |
+#include "types.h" | |
+#include "extern.h" | |
+#include "decode.h" | |
+#include "itab.h" | |
+#include "syn.h" | |
+ | |
+/* ----------------------------------------------------------------------------- | |
+ * opr_cast() - Prints an operand cast. | |
+ * ----------------------------------------------------------------------------- | |
+ */ | |
+static void | |
+opr_cast(struct ud* u, struct ud_operand* op) | |
+{ | |
+ switch(op->size) { | |
+ case 16 : case 32 : | |
+ mkasm(u, "*"); break; | |
+ default: break; | |
+ } | |
+} | |
+ | |
+/* ----------------------------------------------------------------------------- | |
+ * gen_operand() - Generates assembly output for each operand. | |
+ * ----------------------------------------------------------------------------- | |
+ */ | |
+static void | |
+gen_operand(struct ud* u, struct ud_operand* op) | |
+{ | |
+ switch(op->type) { | |
+ case UD_OP_REG: | |
+ mkasm(u, "%%%s", ud_reg_tab[op->base - UD_R_AL]); | |
+ break; | |
+ | |
+ case UD_OP_MEM: | |
+ if (u->br_far) opr_cast(u, op); | |
+ if (u->pfx_seg) | |
+ mkasm(u, "%%%s:", ud_reg_tab[u->pfx_seg - UD_R_AL]); | |
+ if (op->offset == 8) { | |
+ if (op->lval.sbyte < 0) | |
+ mkasm(u, "-0x%x", (-op->lval.sbyte) & 0xff); | |
+ else mkasm(u, "0x%x", op->lval.sbyte); | |
+ } | |
+ else if (op->offset == 16) | |
+ mkasm(u, "0x%x", op->lval.uword); | |
+ else if (op->offset == 32) | |
+ mkasm(u, "0x%lx", op->lval.udword); | |
+ else if (op->offset == 64) | |
+ mkasm(u, "0x" FMT64 "x", op->lval.uqword); | |
+ | |
+ if (op->base) | |
+ mkasm(u, "(%%%s", ud_reg_tab[op->base - UD_R_AL]); | |
+ if (op->index) { | |
+ if (op->base) | |
+ mkasm(u, ","); | |
+ else mkasm(u, "("); | |
+ mkasm(u, "%%%s", ud_reg_tab[op->index - UD_R_AL]); | |
+ } | |
+ if (op->scale) | |
+ mkasm(u, ",%d", op->scale); | |
+ if (op->base || op->index) | |
+ mkasm(u, ")"); | |
+ break; | |
+ | |
+ case UD_OP_IMM: | |
+ switch (op->size) { | |
+ case 8: mkasm(u, "$0x%x", op->lval.ubyte); break; | |
+ case 16: mkasm(u, "$0x%x", op->lval.uword); break; | |
+ case 32: mkasm(u, "$0x%lx", op->lval.udword); break; | |
+ case 64: mkasm(u, "$0x" FMT64 "x", op->lval.uqword); break; | |
+ default: break; | |
+ } | |
+ break; | |
+ | |
+ case UD_OP_JIMM: | |
+ switch (op->size) { | |
+ case 8: | |
+ mkasm(u, "0x" FMT64 "x", u->pc + op->lval.sbyte); | |
+ break; | |
+ case 16: | |
+ mkasm(u, "0x" FMT64 "x", u->pc + op->lval.sword); | |
+ break; | |
+ case 32: | |
+ mkasm(u, "0x" FMT64 "x", u->pc + op->lval.sdword); | |
+ break; | |
+ default:break; | |
+ } | |
+ break; | |
+ | |
+ case UD_OP_PTR: | |
+ switch (op->size) { | |
+ case 32: | |
+ mkasm(u, "$0x%x, $0x%x", op->lval.ptr.seg, | |
+ op->lval.ptr.off & 0xFFFF); | |
+ break; | |
+ case 48: | |
+ mkasm(u, "$0x%x, $0x%lx", op->lval.ptr.seg, | |
+ op->lval.ptr.off); | |
+ break; | |
+ } | |
+ break; | |
+ | |
+ default: return; | |
+ } | |
+} | |
+ | |
+/* ============================================================================= | |
+ * translates to AT&T syntax | |
+ * ============================================================================= | |
+ */ | |
+extern void | |
+ud_translate_att(struct ud *u) | |
+{ | |
+ int size = 0; | |
+ | |
+ /* check if P_OSO prefix is used */ | |
+ if (! P_OSO(u->itab_entry->prefix) && u->pfx_opr) { | |
+ switch (u->dis_mode) { | |
+ case 16: | |
+ mkasm(u, "o32 "); | |
+ break; | |
+ case 32: | |
+ case 64: | |
+ mkasm(u, "o16 "); | |
+ break; | |
+ } | |
+ } | |
+ | |
+ /* check if P_ASO prefix was used */ | |
+ if (! P_ASO(u->itab_entry->prefix) && u->pfx_adr) { | |
+ switch (u->dis_mode) { | |
+ case 16: | |
+ mkasm(u, "a32 "); | |
+ break; | |
+ case 32: | |
+ mkasm(u, "a16 "); | |
+ break; | |
+ case 64: | |
+ mkasm(u, "a32 "); | |
+ break; | |
+ } | |
+ } | |
+ | |
+ if (u->pfx_lock) | |
+ mkasm(u, "lock "); | |
+ if (u->pfx_rep) | |
+ mkasm(u, "rep "); | |
+ if (u->pfx_repne) | |
+ mkasm(u, "repne "); | |
+ | |
+ /* special instructions */ | |
+ switch (u->mnemonic) { | |
+ case UD_Iretf: | |
+ mkasm(u, "lret "); | |
+ break; | |
+ case UD_Idb: | |
+ mkasm(u, ".byte 0x%x", u->operand[0].lval.ubyte); | |
+ return; | |
+ case UD_Ijmp: | |
+ case UD_Icall: | |
+ if (u->br_far) mkasm(u, "l"); | |
+ mkasm(u, "%s", ud_lookup_mnemonic(u->mnemonic)); | |
+ break; | |
+ case UD_Ibound: | |
+ case UD_Ienter: | |
+ if (u->operand[0].type != UD_NONE) | |
+ gen_operand(u, &u->operand[0]); | |
+ if (u->operand[1].type != UD_NONE) { | |
+ mkasm(u, ","); | |
+ gen_operand(u, &u->operand[1]); | |
+ } | |
+ return; | |
+ default: | |
+ mkasm(u, "%s", ud_lookup_mnemonic(u->mnemonic)); | |
+ } | |
+ | |
+ if (u->c1) | |
+ size = u->operand[0].size; | |
+ else if (u->c2) | |
+ size = u->operand[1].size; | |
+ else if (u->c3) | |
+ size = u->operand[2].size; | |
+ | |
+ if (size == 8) | |
+ mkasm(u, "b"); | |
+ else if (size == 16) | |
+ mkasm(u, "w"); | |
+ else if (size == 64) | |
+ mkasm(u, "q"); | |
+ | |
+ mkasm(u, " "); | |
+ | |
+ if (u->operand[2].type != UD_NONE) { | |
+ gen_operand(u, &u->operand[2]); | |
+ mkasm(u, ", "); | |
+ } | |
+ | |
+ if (u->operand[1].type != UD_NONE) { | |
+ gen_operand(u, &u->operand[1]); | |
+ mkasm(u, ", "); | |
+ } | |
+ | |
+ if (u->operand[0].type != UD_NONE) | |
+ gen_operand(u, &u->operand[0]); | |
+} | |
Property changes on: lib/libudis86/syn-att.c | |
___________________________________________________________________ | |
Added: svn:executable | |
## -0,0 +1 ## | |
+* | |
\ No newline at end of property | |
Index: lib/libudis86/input.h | |
=================================================================== | |
--- lib/libudis86/input.h (revision 0) | |
+++ lib/libudis86/input.h (working copy) | |
@@ -0,0 +1,49 @@ | |
+/* ----------------------------------------------------------------------------- | |
+ * input.h | |
+ * | |
+ * Copyright (c) 2006, Vivek Mohan <vivek@sig9.com> | |
+ * All rights reserved. See LICENSE | |
+ * ----------------------------------------------------------------------------- | |
+ */ | |
+#ifndef UD_INPUT_H | |
+#define UD_INPUT_H | |
+ | |
+#include "types.h" | |
+ | |
+uint8_t inp_next(struct ud*); | |
+uint8_t inp_peek(struct ud*); | |
+uint8_t inp_uint8(struct ud*); | |
+uint16_t inp_uint16(struct ud*); | |
+uint32_t inp_uint32(struct ud*); | |
+uint64_t inp_uint64(struct ud*); | |
+void inp_move(struct ud*, size_t); | |
+void inp_back(struct ud*); | |
+ | |
+/* inp_init() - Initializes the input system. */ | |
+#define inp_init(u) \ | |
+do { \ | |
+ u->inp_curr = 0; \ | |
+ u->inp_fill = 0; \ | |
+ u->inp_ctr = 0; \ | |
+ u->inp_end = 0; \ | |
+} while (0) | |
+ | |
+/* inp_start() - Should be called before each de-code operation. */ | |
+#define inp_start(u) u->inp_ctr = 0 | |
+ | |
+/* inp_back() - Resets the current pointer to its position before the current | |
+ * instruction disassembly was started. | |
+ */ | |
+#define inp_reset(u) \ | |
+do { \ | |
+ u->inp_curr -= u->inp_ctr; \ | |
+ u->inp_ctr = 0; \ | |
+} while (0) | |
+ | |
+/* inp_sess() - Returns the pointer to current session. */ | |
+#define inp_sess(u) (u->inp_sess) | |
+ | |
+/* inp_cur() - Returns the current input byte. */ | |
+#define inp_curr(u) ((u)->inp_cache[(u)->inp_curr]) | |
+ | |
+#endif | |
Index: lib/libudis86/opgen.py | |
=================================================================== | |
--- lib/libudis86/opgen.py (revision 0) | |
+++ lib/libudis86/opgen.py (working copy) | |
@@ -0,0 +1,603 @@ | |
+#!/bin/env python | |
+ | |
+import os | |
+import sys | |
+import string | |
+from xml.dom import minidom | |
+ | |
+# | |
+# opgen.py -- generates tables and constants for decoding | |
+# | |
+# - itab.c | |
+# - itab.h | |
+# | |
+ | |
+# | |
+# special mnemonic types for internal purposes. | |
+# | |
+spl_mnm_types = [ 'd3vil', \ | |
+ 'na', \ | |
+ 'grp_reg', \ | |
+ 'grp_rm', \ | |
+ 'grp_vendor', \ | |
+ 'grp_x87', \ | |
+ 'grp_mode', \ | |
+ 'grp_osize', \ | |
+ 'grp_asize', \ | |
+ 'grp_mod', \ | |
+ 'none' \ | |
+ ] | |
+ | |
+# | |
+# opcode-vendor dictionary | |
+# | |
+vend_dict = { | |
+ 'AMD' : '00', | |
+ 'INTEL' : '01' | |
+} | |
+ | |
+ | |
+# | |
+# opcode-mode dictionary | |
+# | |
+ | |
+mode_dict = { | |
+ '16' : '00', | |
+ '32' : '01', | |
+ '64' : '02' | |
+} | |
+ | |
+# | |
+# opcode-operand dictionary | |
+# | |
+operand_dict = { | |
+ "Ap" : [ "OP_A" , "SZ_P" ], | |
+ "E" : [ "OP_E" , "SZ_NA" ], | |
+ "Eb" : [ "OP_E" , "SZ_B" ], | |
+ "Ew" : [ "OP_E" , "SZ_W" ], | |
+ "Ev" : [ "OP_E" , "SZ_V" ], | |
+ "Ed" : [ "OP_E" , "SZ_D" ], | |
+ "Ez" : [ "OP_E" , "SZ_Z" ], | |
+ "Ex" : [ "OP_E" , "SZ_MDQ" ], | |
+ "Ep" : [ "OP_E" , "SZ_P" ], | |
+ "G" : [ "OP_G" , "SZ_NA" ], | |
+ "Gb" : [ "OP_G" , "SZ_B" ], | |
+ "Gw" : [ "OP_G" , "SZ_W" ], | |
+ "Gv" : [ "OP_G" , "SZ_V" ], | |
+ "Gvw" : [ "OP_G" , "SZ_MDQ" ], | |
+ "Gd" : [ "OP_G" , "SZ_D" ], | |
+ "Gx" : [ "OP_G" , "SZ_MDQ" ], | |
+ "Gz" : [ "OP_G" , "SZ_Z" ], | |
+ "M" : [ "OP_M" , "SZ_NA" ], | |
+ "Mb" : [ "OP_M" , "SZ_B" ], | |
+ "Mw" : [ "OP_M" , "SZ_W" ], | |
+ "Ms" : [ "OP_M" , "SZ_W" ], | |
+ "Md" : [ "OP_M" , "SZ_D" ], | |
+ "Mq" : [ "OP_M" , "SZ_Q" ], | |
+ "Mt" : [ "OP_M" , "SZ_T" ], | |
+ "I1" : [ "OP_I1" , "SZ_NA" ], | |
+ "I3" : [ "OP_I3" , "SZ_NA" ], | |
+ "Ib" : [ "OP_I" , "SZ_B" ], | |
+ "Isb" : [ "OP_I" , "SZ_SB" ], | |
+ "Iw" : [ "OP_I" , "SZ_W" ], | |
+ "Iv" : [ "OP_I" , "SZ_V" ], | |
+ "Iz" : [ "OP_I" , "SZ_Z" ], | |
+ "Jv" : [ "OP_J" , "SZ_V" ], | |
+ "Jz" : [ "OP_J" , "SZ_Z" ], | |
+ "Jb" : [ "OP_J" , "SZ_B" ], | |
+ "R" : [ "OP_R" , "SZ_RDQ" ], | |
+ "C" : [ "OP_C" , "SZ_NA" ], | |
+ "D" : [ "OP_D" , "SZ_NA" ], | |
+ "S" : [ "OP_S" , "SZ_NA" ], | |
+ "Ob" : [ "OP_O" , "SZ_B" ], | |
+ "Ow" : [ "OP_O" , "SZ_W" ], | |
+ "Ov" : [ "OP_O" , "SZ_V" ], | |
+ "V" : [ "OP_V" , "SZ_NA" ], | |
+ "W" : [ "OP_W" , "SZ_NA" ], | |
+ "P" : [ "OP_P" , "SZ_NA" ], | |
+ "Q" : [ "OP_Q" , "SZ_NA" ], | |
+ "VR" : [ "OP_VR" , "SZ_NA" ], | |
+ "PR" : [ "OP_PR" , "SZ_NA" ], | |
+ "AL" : [ "OP_AL" , "SZ_NA" ], | |
+ "CL" : [ "OP_CL" , "SZ_NA" ], | |
+ "DL" : [ "OP_DL" , "SZ_NA" ], | |
+ "BL" : [ "OP_BL" , "SZ_NA" ], | |
+ "AH" : [ "OP_AH" , "SZ_NA" ], | |
+ "CH" : [ "OP_CH" , "SZ_NA" ], | |
+ "DH" : [ "OP_DH" , "SZ_NA" ], | |
+ "BH" : [ "OP_BH" , "SZ_NA" ], | |
+ "AX" : [ "OP_AX" , "SZ_NA" ], | |
+ "CX" : [ "OP_CX" , "SZ_NA" ], | |
+ "DX" : [ "OP_DX" , "SZ_NA" ], | |
+ "BX" : [ "OP_BX" , "SZ_NA" ], | |
+ "SI" : [ "OP_SI" , "SZ_NA" ], | |
+ "DI" : [ "OP_DI" , "SZ_NA" ], | |
+ "SP" : [ "OP_SP" , "SZ_NA" ], | |
+ "BP" : [ "OP_BP" , "SZ_NA" ], | |
+ "eAX" : [ "OP_eAX" , "SZ_NA" ], | |
+ "eCX" : [ "OP_eCX" , "SZ_NA" ], | |
+ "eDX" : [ "OP_eDX" , "SZ_NA" ], | |
+ "eBX" : [ "OP_eBX" , "SZ_NA" ], | |
+ "eSI" : [ "OP_eSI" , "SZ_NA" ], | |
+ "eDI" : [ "OP_eDI" , "SZ_NA" ], | |
+ "eSP" : [ "OP_eSP" , "SZ_NA" ], | |
+ "eBP" : [ "OP_eBP" , "SZ_NA" ], | |
+ "rAX" : [ "OP_rAX" , "SZ_NA" ], | |
+ "rCX" : [ "OP_rCX" , "SZ_NA" ], | |
+ "rBX" : [ "OP_rBX" , "SZ_NA" ], | |
+ "rDX" : [ "OP_rDX" , "SZ_NA" ], | |
+ "rSI" : [ "OP_rSI" , "SZ_NA" ], | |
+ "rDI" : [ "OP_rDI" , "SZ_NA" ], | |
+ "rSP" : [ "OP_rSP" , "SZ_NA" ], | |
+ "rBP" : [ "OP_rBP" , "SZ_NA" ], | |
+ "ES" : [ "OP_ES" , "SZ_NA" ], | |
+ "CS" : [ "OP_CS" , "SZ_NA" ], | |
+ "DS" : [ "OP_DS" , "SZ_NA" ], | |
+ "SS" : [ "OP_SS" , "SZ_NA" ], | |
+ "GS" : [ "OP_GS" , "SZ_NA" ], | |
+ "FS" : [ "OP_FS" , "SZ_NA" ], | |
+ "ST0" : [ "OP_ST0" , "SZ_NA" ], | |
+ "ST1" : [ "OP_ST1" , "SZ_NA" ], | |
+ "ST2" : [ "OP_ST2" , "SZ_NA" ], | |
+ "ST3" : [ "OP_ST3" , "SZ_NA" ], | |
+ "ST4" : [ "OP_ST4" , "SZ_NA" ], | |
+ "ST5" : [ "OP_ST5" , "SZ_NA" ], | |
+ "ST6" : [ "OP_ST6" , "SZ_NA" ], | |
+ "ST7" : [ "OP_ST7" , "SZ_NA" ], | |
+ "NONE" : [ "OP_NONE" , "SZ_NA" ], | |
+ "ALr8b" : [ "OP_ALr8b" , "SZ_NA" ], | |
+ "CLr9b" : [ "OP_CLr9b" , "SZ_NA" ], | |
+ "DLr10b" : [ "OP_DLr10b" , "SZ_NA" ], | |
+ "BLr11b" : [ "OP_BLr11b" , "SZ_NA" ], | |
+ "AHr12b" : [ "OP_AHr12b" , "SZ_NA" ], | |
+ "CHr13b" : [ "OP_CHr13b" , "SZ_NA" ], | |
+ "DHr14b" : [ "OP_DHr14b" , "SZ_NA" ], | |
+ "BHr15b" : [ "OP_BHr15b" , "SZ_NA" ], | |
+ "rAXr8" : [ "OP_rAXr8" , "SZ_NA" ], | |
+ "rCXr9" : [ "OP_rCXr9" , "SZ_NA" ], | |
+ "rDXr10" : [ "OP_rDXr10" , "SZ_NA" ], | |
+ "rBXr11" : [ "OP_rBXr11" , "SZ_NA" ], | |
+ "rSPr12" : [ "OP_rSPr12" , "SZ_NA" ], | |
+ "rBPr13" : [ "OP_rBPr13" , "SZ_NA" ], | |
+ "rSIr14" : [ "OP_rSIr14" , "SZ_NA" ], | |
+ "rDIr15" : [ "OP_rDIr15" , "SZ_NA" ], | |
+ "jWP" : [ "OP_J" , "SZ_WP" ], | |
+ "jDP" : [ "OP_J" , "SZ_DP" ], | |
+ | |
+} | |
+ | |
+# | |
+# opcode prefix dictionary | |
+# | |
+pfx_dict = { | |
+ "aso" : "P_aso", | |
+ "oso" : "P_oso", | |
+ "rexw" : "P_rexw", | |
+ "rexb" : "P_rexb", | |
+ "rexx" : "P_rexx", | |
+ "rexr" : "P_rexr", | |
+ "inv64" : "P_inv64", | |
+ "def64" : "P_def64", | |
+ "depM" : "P_depM", | |
+ "cast1" : "P_c1", | |
+ "cast2" : "P_c2", | |
+ "cast3" : "P_c3" | |
+} | |
+ | |
+ | |
+# | |
+# globals | |
+# | |
+opr_constants = [] | |
+siz_constants = [] | |
+tables = {} | |
+table_sizes = {} | |
+mnm_list = [] | |
+default_opr = 'O_NONE, O_NONE, O_NONE' | |
+ | |
+ | |
+# | |
+# collect the operand/size constants | |
+# | |
+for o in operand_dict.keys(): | |
+ if not (operand_dict[o][0] in opr_constants): | |
+ opr_constants.append(operand_dict[o][0]) | |
+ if not (operand_dict[o][1] in siz_constants): | |
+ siz_constants.append(operand_dict[o][1]) | |
+ | |
+xmlDoc = minidom.parse( "../docs/x86optable.xml" ) | |
+tlNode = xmlDoc.firstChild | |
+ | |
+# | |
+# look for top-level optable node | |
+# | |
+while tlNode and tlNode.localName != "x86optable": tlNode = tlNode.nextSibling | |
+ | |
+# | |
+# creates a table entry | |
+# | |
+def centry(i, defmap): | |
+ if defmap["type"][0:3] == "grp": | |
+ opr = default_opr | |
+ mnm = 'UD_I' + defmap["type"].lower() | |
+ pfx = defmap["name"].upper() | |
+ elif defmap["type"] == "leaf": | |
+ mnm = "UD_I" + defmap["name"] | |
+ opr = defmap["opr"] | |
+ pfx = defmap["pfx"] | |
+ if len(mnm) == 0: mnm = "UD_Ina" | |
+ if len(opr) == 0: opr = default_opr | |
+ if len(pfx) == 0: pfx = "P_none" | |
+ else: | |
+ opr = default_opr | |
+ pfx = "P_none" | |
+ mnm = "UD_Iinvalid" | |
+ | |
+ return " /* %s */ { %-16s %-26s %s },\n" % (i, mnm + ',', opr + ',', pfx) | |
+ | |
+# | |
+# makes a new table and adds it to the global | |
+# list of tables | |
+# | |
+def mktab(name, size): | |
+ if not (name in tables.keys()): | |
+ tables[name] = {} | |
+ table_sizes[name] = size | |
+ | |
+for node in tlNode.childNodes: | |
+ | |
+ opcodes = [] | |
+ iclass = '' | |
+ vendor = '' | |
+ | |
+ # we are only interested in <instruction> | |
+ if node.localName != 'instruction': | |
+ continue | |
+ | |
+ # we need the mnemonic attribute | |
+ if not ('mnemonic' in node.attributes.keys()): | |
+ print "error: no mnemonic given in <instruction>." | |
+ sys.exit(-1) | |
+ | |
+ # check if this instruction was already defined. | |
+ # else add it to the global list of mnemonics | |
+ mnemonic = node.attributes['mnemonic'].value | |
+ if mnemonic in mnm_list: | |
+ print "error: multiple declarations of mnemonic='%s'" % mnemonic; | |
+ sys.exit(-1) | |
+ else: | |
+ mnm_list.append(mnemonic) | |
+ | |
+ # | |
+ # collect instruction | |
+ # - vendor | |
+ # - class | |
+ # | |
+ for n in node.childNodes: | |
+ if n.localName == 'vendor': | |
+ vendor = (n.firstChild.data).strip(); | |
+ elif n.localName == 'class': | |
+ iclass = n.firstChild.data; | |
+ | |
+ # | |
+ # for each opcode definition | |
+ # | |
+ for n in node.childNodes: | |
+ if n.localName != 'opcode': | |
+ continue; | |
+ | |
+ opcode = n.firstChild.data.strip(); | |
+ parts = opcode.split(";"); | |
+ flags = [] | |
+ opr = [] | |
+ pfx = [] | |
+ opr = [] | |
+ pfx_c = [] | |
+ | |
+ # get cast attribute, if given | |
+ if 'cast' in n.attributes.keys(): | |
+ pfx_c.append( "P_c" + n.attributes['cast'].value ) | |
+ | |
+ # get implicit addressing attribute, if given | |
+ if 'imp_addr' in n.attributes.keys(): | |
+ if int( n.attributes['imp_addr'].value ): | |
+ pfx_c.append( "P_ImpAddr" ) | |
+ | |
+ # get mode attribute, if given | |
+ if 'mode' in n.attributes.keys(): | |
+ v = (n.attributes['mode'].value).strip() | |
+ modef = v.split(); | |
+ for m in modef: | |
+ if not (m in pfx_dict): | |
+ print "warning: unrecognized mode attribute '%s'" % m | |
+ else: | |
+ pfx_c.append(pfx_dict[m]) | |
+ | |
+ # | |
+ # split opcode definition into | |
+ # 1. prefixes (pfx) | |
+ # 2. opcode bytes (opc) | |
+ # 3. operands | |
+ # | |
+ if len(parts) == 1: | |
+ opc = parts[0].split() | |
+ elif len(parts) == 2: | |
+ opc = parts[0].split() | |
+ opr = parts[1].split() | |
+ for o in opc: | |
+ if o in pfx_dict: | |
+ pfx = parts[0].split() | |
+ opc = parts[1].split() | |
+ break | |
+ elif len(parts) == 3: | |
+ pfx = parts[0].split() | |
+ opc = parts[1].split() | |
+ opr = parts[2].split() | |
+ else: | |
+ print "error: invalid opcode definition of %s\n" % mnemonic | |
+ sys.exit(-1) | |
+ # Convert opcodes to upper case | |
+ for i in range(len(opc)): | |
+ opc[i] = opc[i].upper() | |
+ | |
+ # | |
+ # check for special cases of instruction translation | |
+ # and ignore them | |
+ # | |
+ if mnemonic == 'pause' or \ | |
+ ( mnemonic == 'nop' and opc[0] == '90' ) or \ | |
+ mnemonic == 'invalid' or \ | |
+ mnemonic == 'db' : | |
+ continue | |
+ | |
+ # | |
+ # Convert prefix | |
+ # | |
+ for p in pfx: | |
+ if not ( p in pfx_dict.keys() ): | |
+ print "error: invalid prefix specification: %s \n" % pfx | |
+ pfx_c.append( pfx_dict[p] ) | |
+ if len(pfx) == 0: | |
+ pfx_c.append( "P_none" ) | |
+ pfx = "|".join( pfx_c ) | |
+ | |
+ # | |
+ # Convert operands | |
+ # | |
+ opr_c = [ "O_NONE", "O_NONE", "O_NONE" ] | |
+ for i in range(len(opr)): | |
+ if not (opr[i] in operand_dict.keys()): | |
+ print "error: invalid operand declaration: %s\n" % opr[i] | |
+ opr_c[i] = "O_" + opr[i] | |
+ opr = "%-8s %-8s %s" % (opr_c[0] + ",", opr_c[1] + ",", opr_c[2]) | |
+ | |
+ table_sse = '' | |
+ table_name = 'itab__1byte' | |
+ table_size = 256 | |
+ table_index = '' | |
+ | |
+ for op in opc: | |
+ if op[0:3] == 'SSE': | |
+ table_sse = op | |
+ elif op == '0F' and len(table_sse): | |
+ table_name = "itab__pfx_%s__0f" % table_sse | |
+ table_size = 256 | |
+ table_sse = '' | |
+ elif op == '0F': | |
+ table_name = "itab__0f" | |
+ table_size = 256 | |
+ elif op[0:5] == '/X87=': | |
+ tables[table_name][table_index] = { \ | |
+ 'type' : 'grp_x87', \ | |
+ 'name' : "%s__op_%s__x87" % (table_name, table_index) \ | |
+ } | |
+ table_name = tables[table_name][table_index]['name'] | |
+ table_index = "%02X" % int(op[5:7], 16) | |
+ table_size = 64 | |
+ elif op[0:4] == '/RM=': | |
+ tables[table_name][table_index] = { \ | |
+ 'type' : 'grp_rm', \ | |
+ 'name' : "%s__op_%s__rm" % (table_name, table_index) \ | |
+ } | |
+ table_name = tables[table_name][table_index]['name'] | |
+ table_index = "%02X" % int(op[4:6]) | |
+ table_size = 8 | |
+ elif op[0:5] == '/MOD=': | |
+ tables[table_name][table_index] = { \ | |
+ 'type' : 'grp_mod', \ | |
+ 'name' : "%s__op_%s__mod" % (table_name, table_index) \ | |
+ } | |
+ table_name = tables[table_name][table_index]['name'] | |
+ if len(op) == 8: | |
+ v = op[5:8] | |
+ else: | |
+ v = op[5:7] | |
+ mod_dict = { '!11' : 0, '11' : 1 } | |
+ table_index = "%02X" % int(mod_dict[v]) | |
+ table_size = 2 | |
+ elif op[0:2] == '/O': | |
+ tables[table_name][table_index] = { \ | |
+ 'type' : 'grp_osize', \ | |
+ 'name' : "%s__op_%s__osize" % (table_name, table_index) \ | |
+ } | |
+ table_name = tables[table_name][table_index]['name'] | |
+ table_index = "%02X" % int(mode_dict[op[2:4]]) | |
+ table_size = 3 | |
+ elif op[0:2] == '/A': | |
+ tables[table_name][table_index] = { \ | |
+ 'type' : 'grp_asize', \ | |
+ 'name' : "%s__op_%s__asize" % (table_name, table_index) \ | |
+ } | |
+ table_name = tables[table_name][table_index]['name'] | |
+ table_index = "%02X" % int(mode_dict[op[2:4]]) | |
+ table_size = 3 | |
+ elif op[0:2] == '/M': | |
+ tables[table_name][table_index] = { \ | |
+ 'type' : 'grp_mode', \ | |
+ 'name' : "%s__op_%s__mode" % (table_name, table_index) \ | |
+ } | |
+ table_name = tables[table_name][table_index]['name'] | |
+ table_index = "%02X" % int(mode_dict[op[2:4]]) | |
+ table_size = 3 | |
+ elif op[0:6] == '/3DNOW': | |
+ table_name = "itab__3dnow" | |
+ table_size = 256 | |
+ elif op[0:1] == '/': | |
+ tables[table_name][table_index] = { \ | |
+ 'type' : 'grp_reg', \ | |
+ 'name' : "%s__op_%s__reg" % (table_name, table_index) \ | |
+ } | |
+ table_name = tables[table_name][table_index]['name'] | |
+ table_index = "%02X" % int(op[1:2]) | |
+ table_size = 8 | |
+ else: | |
+ table_index = op | |
+ | |
+ mktab(table_name, table_size) | |
+ | |
+ if len(vendor): | |
+ tables[table_name][table_index] = { \ | |
+ 'type' : 'grp_vendor', \ | |
+ 'name' : "%s__op_%s__vendor" % (table_name, table_index) \ | |
+ } | |
+ table_name = tables[table_name][table_index]['name'] | |
+ table_index = vend_dict[vendor] | |
+ table_size = 2 | |
+ mktab(table_name, table_size) | |
+ | |
+ tables[table_name][table_index] = { \ | |
+ 'type' : 'leaf', \ | |
+ 'name' : mnemonic, \ | |
+ 'pfx' : pfx, \ | |
+ 'opr' : opr, \ | |
+ 'flags' : flags \ | |
+ } | |
+ | |
+# --------------------------------------------------------------------- | |
+# Generate itab.h | |
+# --------------------------------------------------------------------- | |
+ | |
+f = open("itab.h", "w") | |
+ | |
+f.write(''' | |
+/* itab.h -- auto generated by opgen.py, do not edit. */ | |
+ | |
+#ifndef UD_ITAB_H | |
+#define UD_ITAB_H | |
+ | |
+''') | |
+ | |
+# | |
+# Generate enumeration of size constants | |
+# | |
+siz_constants.sort() | |
+f.write(''' | |
+''') | |
+ | |
+f.write("\nenum ud_itab_vendor_index {\n" ) | |
+f.write(" ITAB__VENDOR_INDX__AMD,\n" ) | |
+f.write(" ITAB__VENDOR_INDX__INTEL,\n" ) | |
+f.write("};\n\n") | |
+ | |
+ | |
+f.write("\nenum ud_itab_mode_index {\n" ) | |
+f.write(" ITAB__MODE_INDX__16,\n" ) | |
+f.write(" ITAB__MODE_INDX__32,\n" ) | |
+f.write(" ITAB__MODE_INDX__64\n" ) | |
+f.write("};\n\n") | |
+ | |
+ | |
+f.write("\nenum ud_itab_mod_index {\n" ) | |
+f.write(" ITAB__MOD_INDX__NOT_11,\n" ) | |
+f.write(" ITAB__MOD_INDX__11\n" ) | |
+f.write("};\n\n") | |
+ | |
+# | |
+# Generate enumeration of the tables | |
+# | |
+table_names = tables.keys() | |
+table_names.sort(); | |
+ | |
+f.write( "\nenum ud_itab_index {\n" ) | |
+for name in table_names: | |
+ f.write(" %s,\n" % name.upper() ); | |
+f.write( "};\n\n" ) | |
+ | |
+# | |
+# Generate mnemonics list | |
+# | |
+f.write("\nenum ud_mnemonic_code {\n") | |
+for m in mnm_list: | |
+ f.write(" UD_I%s,\n" % m) | |
+for m in spl_mnm_types: | |
+ f.write(" UD_I%s,\n" % m) | |
+f.write("};\n\n") | |
+ | |
+# | |
+# Generate struct defs | |
+# | |
+f.write( \ | |
+''' | |
+ | |
+extern const char* ud_mnemonics_str[];; | |
+extern struct ud_itab_entry* ud_itab_list[]; | |
+ | |
+''' ) | |
+ | |
+ | |
+f.write("#endif\n") | |
+ | |
+f.close() | |
+ | |
+# --------------------------------------------------------------------- | |
+# Generate itab.c | |
+# --------------------------------------------------------------------- | |
+ | |
+f = open("itab.c", "w") | |
+ | |
+f.write(''' | |
+/* itab.c -- auto generated by opgen.py, do not edit. */ | |
+ | |
+#include "types.h" | |
+#include "decode.h" | |
+#include "itab.h" | |
+ | |
+''') | |
+ | |
+# | |
+# generate mnemonic list | |
+# | |
+f.write("const char * ud_mnemonics_str[] = {\n") | |
+for m in mnm_list: | |
+ f.write(" \"%s\",\n" % m ) | |
+f.write("};\n\n") | |
+ | |
+# | |
+# generate instruction tables | |
+# | |
+ | |
+f.write("\n") | |
+for t in table_names: | |
+ f.write("\nstatic struct ud_itab_entry " + t.lower() + "[%d] = {\n" % table_sizes[t]); | |
+ for i in range(int(table_sizes[t])): | |
+ index = "%02X" % i | |
+ if index in tables[t]: | |
+ f.write(centry(index, tables[t][index])) | |
+ else: | |
+ f.write(centry(index,{"type":"invalid"})) | |
+ f.write("};\n"); | |
+ | |
+# | |
+# write the instruction table list | |
+# | |
+f.write( "\n/* the order of this table matches enum ud_itab_index */") | |
+f.write( "\nstruct ud_itab_entry * ud_itab_list[] = {\n" ) | |
+for name in table_names: | |
+ f.write( " %s,\n" % name.lower() ) | |
+f.write( "};\n" ); | |
+ | |
+f.close(); | |
+ | |
+# vim:expandtab | |
+# vim:sw=4 | |
+# vim:ts=4 | |
Property changes on: lib/libudis86/opgen.py | |
___________________________________________________________________ | |
Added: svn:executable | |
## -0,0 +1 ## | |
+* | |
\ No newline at end of property | |
Index: lib/libudis86/itab.c | |
=================================================================== | |
--- lib/libudis86/itab.c (revision 0) | |
+++ lib/libudis86/itab.c (working copy) | |
@@ -0,0 +1,3668 @@ | |
+ | |
+/* itab.c -- auto generated by opgen.py, do not edit. */ | |
+ | |
+#include "types.h" | |
+#include "decode.h" | |
+#include "itab.h" | |
+ | |
+const char * ud_mnemonics_str[] = { | |
+ "3dnow", | |
+ "aaa", | |
+ "aad", | |
+ "aam", | |
+ "aas", | |
+ "adc", | |
+ "add", | |
+ "addpd", | |
+ "addps", | |
+ "addsd", | |
+ "addss", | |
+ "addsubpd", | |
+ "addsubps", | |
+ "and", | |
+ "andpd", | |
+ "andps", | |
+ "andnpd", | |
+ "andnps", | |
+ "arpl", | |
+ "movsxd", | |
+ "bound", | |
+ "bsf", | |
+ "bsr", | |
+ "bswap", | |
+ "bt", | |
+ "btc", | |
+ "btr", | |
+ "bts", | |
+ "call", | |
+ "cbw", | |
+ "cwde", | |
+ "cdqe", | |
+ "clc", | |
+ "cld", | |
+ "clflush", | |
+ "clgi", | |
+ "cli", | |
+ "clts", | |
+ "cmc", | |
+ "cmovo", | |
+ "cmovno", | |
+ "cmovb", | |
+ "cmovae", | |
+ "cmovz", | |
+ "cmovnz", | |
+ "cmovbe", | |
+ "cmova", | |
+ "cmovs", | |
+ "cmovns", | |
+ "cmovp", | |
+ "cmovnp", | |
+ "cmovl", | |
+ "cmovge", | |
+ "cmovle", | |
+ "cmovg", | |
+ "cmp", | |
+ "cmppd", | |
+ "cmpps", | |
+ "cmpsb", | |
+ "cmpsw", | |
+ "cmpsd", | |
+ "cmpsq", | |
+ "cmpss", | |
+ "cmpxchg", | |
+ "cmpxchg8b", | |
+ "comisd", | |
+ "comiss", | |
+ "cpuid", | |
+ "cvtdq2pd", | |
+ "cvtdq2ps", | |
+ "cvtpd2dq", | |
+ "cvtpd2pi", | |
+ "cvtpd2ps", | |
+ "cvtpi2ps", | |
+ "cvtpi2pd", | |
+ "cvtps2dq", | |
+ "cvtps2pi", | |
+ "cvtps2pd", | |
+ "cvtsd2si", | |
+ "cvtsd2ss", | |
+ "cvtsi2ss", | |
+ "cvtss2si", | |
+ "cvtss2sd", | |
+ "cvttpd2pi", | |
+ "cvttpd2dq", | |
+ "cvttps2dq", | |
+ "cvttps2pi", | |
+ "cvttsd2si", | |
+ "cvtsi2sd", | |
+ "cvttss2si", | |
+ "cwd", | |
+ "cdq", | |
+ "cqo", | |
+ "daa", | |
+ "das", | |
+ "dec", | |
+ "div", | |
+ "divpd", | |
+ "divps", | |
+ "divsd", | |
+ "divss", | |
+ "emms", | |
+ "enter", | |
+ "f2xm1", | |
+ "fabs", | |
+ "fadd", | |
+ "faddp", | |
+ "fbld", | |
+ "fbstp", | |
+ "fchs", | |
+ "fclex", | |
+ "fcmovb", | |
+ "fcmove", | |
+ "fcmovbe", | |
+ "fcmovu", | |
+ "fcmovnb", | |
+ "fcmovne", | |
+ "fcmovnbe", | |
+ "fcmovnu", | |
+ "fucomi", | |
+ "fcom", | |
+ "fcom2", | |
+ "fcomp3", | |
+ "fcomi", | |
+ "fucomip", | |
+ "fcomip", | |
+ "fcomp", | |
+ "fcomp5", | |
+ "fcompp", | |
+ "fcos", | |
+ "fdecstp", | |
+ "fdiv", | |
+ "fdivp", | |
+ "fdivr", | |
+ "fdivrp", | |
+ "femms", | |
+ "ffree", | |
+ "ffreep", | |
+ "ficom", | |
+ "ficomp", | |
+ "fild", | |
+ "fncstp", | |
+ "fninit", | |
+ "fiadd", | |
+ "fidivr", | |
+ "fidiv", | |
+ "fisub", | |
+ "fisubr", | |
+ "fist", | |
+ "fistp", | |
+ "fisttp", | |
+ "fld", | |
+ "fld1", | |
+ "fldl2t", | |
+ "fldl2e", | |
+ "fldlpi", | |
+ "fldlg2", | |
+ "fldln2", | |
+ "fldz", | |
+ "fldcw", | |
+ "fldenv", | |
+ "fmul", | |
+ "fmulp", | |
+ "fimul", | |
+ "fnop", | |
+ "fpatan", | |
+ "fprem", | |
+ "fprem1", | |
+ "fptan", | |
+ "frndint", | |
+ "frstor", | |
+ "fnsave", | |
+ "fscale", | |
+ "fsin", | |
+ "fsincos", | |
+ "fsqrt", | |
+ "fstp", | |
+ "fstp1", | |
+ "fstp8", | |
+ "fstp9", | |
+ "fst", | |
+ "fnstcw", | |
+ "fnstenv", | |
+ "fnstsw", | |
+ "fsub", | |
+ "fsubp", | |
+ "fsubr", | |
+ "fsubrp", | |
+ "ftst", | |
+ "fucom", | |
+ "fucomp", | |
+ "fucompp", | |
+ "fxam", | |
+ "fxch", | |
+ "fxch4", | |
+ "fxch7", | |
+ "fxrstor", | |
+ "fxsave", | |
+ "fpxtract", | |
+ "fyl2x", | |
+ "fyl2xp1", | |
+ "haddpd", | |
+ "haddps", | |
+ "hlt", | |
+ "hsubpd", | |
+ "hsubps", | |
+ "idiv", | |
+ "in", | |
+ "imul", | |
+ "inc", | |
+ "insb", | |
+ "insw", | |
+ "insd", | |
+ "int1", | |
+ "int3", | |
+ "int", | |
+ "into", | |
+ "invd", | |
+ "invlpg", | |
+ "invlpga", | |
+ "iretw", | |
+ "iretd", | |
+ "iretq", | |
+ "jo", | |
+ "jno", | |
+ "jb", | |
+ "jae", | |
+ "jz", | |
+ "jnz", | |
+ "jbe", | |
+ "ja", | |
+ "js", | |
+ "jns", | |
+ "jp", | |
+ "jnp", | |
+ "jl", | |
+ "jge", | |
+ "jle", | |
+ "jg", | |
+ "jcxz", | |
+ "jecxz", | |
+ "jrcxz", | |
+ "jmp", | |
+ "lahf", | |
+ "lar", | |
+ "lddqu", | |
+ "ldmxcsr", | |
+ "lds", | |
+ "lea", | |
+ "les", | |
+ "lfs", | |
+ "lgs", | |
+ "lidt", | |
+ "lss", | |
+ "leave", | |
+ "lfence", | |
+ "lgdt", | |
+ "lldt", | |
+ "lmsw", | |
+ "lock", | |
+ "lodsb", | |
+ "lodsw", | |
+ "lodsd", | |
+ "lodsq", | |
+ "loopnz", | |
+ "loope", | |
+ "loop", | |
+ "lsl", | |
+ "ltr", | |
+ "maskmovq", | |
+ "maxpd", | |
+ "maxps", | |
+ "maxsd", | |
+ "maxss", | |
+ "mfence", | |
+ "minpd", | |
+ "minps", | |
+ "minsd", | |
+ "minss", | |
+ "monitor", | |
+ "mov", | |
+ "movapd", | |
+ "movaps", | |
+ "movd", | |
+ "movddup", | |
+ "movdqa", | |
+ "movdqu", | |
+ "movdq2q", | |
+ "movhpd", | |
+ "movhps", | |
+ "movlhps", | |
+ "movlpd", | |
+ "movlps", | |
+ "movhlps", | |
+ "movmskpd", | |
+ "movmskps", | |
+ "movntdq", | |
+ "movnti", | |
+ "movntpd", | |
+ "movntps", | |
+ "movntq", | |
+ "movq", | |
+ "movqa", | |
+ "movq2dq", | |
+ "movsb", | |
+ "movsw", | |
+ "movsd", | |
+ "movsq", | |
+ "movsldup", | |
+ "movshdup", | |
+ "movss", | |
+ "movsx", | |
+ "movupd", | |
+ "movups", | |
+ "movzx", | |
+ "mul", | |
+ "mulpd", | |
+ "mulps", | |
+ "mulsd", | |
+ "mulss", | |
+ "mwait", | |
+ "neg", | |
+ "nop", | |
+ "not", | |
+ "or", | |
+ "orpd", | |
+ "orps", | |
+ "out", | |
+ "outsb", | |
+ "outsw", | |
+ "outsd", | |
+ "outsq", | |
+ "packsswb", | |
+ "packssdw", | |
+ "packuswb", | |
+ "paddb", | |
+ "paddw", | |
+ "paddq", | |
+ "paddsb", | |
+ "paddsw", | |
+ "paddusb", | |
+ "paddusw", | |
+ "pand", | |
+ "pandn", | |
+ "pause", | |
+ "pavgb", | |
+ "pavgw", | |
+ "pcmpeqb", | |
+ "pcmpeqw", | |
+ "pcmpeqd", | |
+ "pcmpgtb", | |
+ "pcmpgtw", | |
+ "pcmpgtd", | |
+ "pextrw", | |
+ "pinsrw", | |
+ "pmaddwd", | |
+ "pmaxsw", | |
+ "pmaxub", | |
+ "pminsw", | |
+ "pminub", | |
+ "pmovmskb", | |
+ "pmulhuw", | |
+ "pmulhw", | |
+ "pmullw", | |
+ "pmuludq", | |
+ "pop", | |
+ "popa", | |
+ "popad", | |
+ "popfw", | |
+ "popfd", | |
+ "popfq", | |
+ "por", | |
+ "prefetch", | |
+ "prefetchnta", | |
+ "prefetcht0", | |
+ "prefetcht1", | |
+ "prefetcht2", | |
+ "psadbw", | |
+ "pshufd", | |
+ "pshufhw", | |
+ "pshuflw", | |
+ "pshufw", | |
+ "pslldq", | |
+ "psllw", | |
+ "pslld", | |
+ "psllq", | |
+ "psraw", | |
+ "psrad", | |
+ "psrlw", | |
+ "psrld", | |
+ "psrlq", | |
+ "psrldq", | |
+ "psubb", | |
+ "psubw", | |
+ "psubd", | |
+ "psubq", | |
+ "psubsb", | |
+ "psubsw", | |
+ "psubusb", | |
+ "psubusw", | |
+ "punpckhbw", | |
+ "punpckhwd", | |
+ "punpckhdq", | |
+ "punpckhqdq", | |
+ "punpcklbw", | |
+ "punpcklwd", | |
+ "punpckldq", | |
+ "punpcklqdq", | |
+ "pi2fw", | |
+ "pi2fd", | |
+ "pf2iw", | |
+ "pf2id", | |
+ "pfnacc", | |
+ "pfpnacc", | |
+ "pfcmpge", | |
+ "pfmin", | |
+ "pfrcp", | |
+ "pfrsqrt", | |
+ "pfsub", | |
+ "pfadd", | |
+ "pfcmpgt", | |
+ "pfmax", | |
+ "pfrcpit1", | |
+ "pfrspit1", | |
+ "pfsubr", | |
+ "pfacc", | |
+ "pfcmpeq", | |
+ "pfmul", | |
+ "pfrcpit2", | |
+ "pmulhrw", | |
+ "pswapd", | |
+ "pavgusb", | |
+ "push", | |
+ "pusha", | |
+ "pushad", | |
+ "pushfw", | |
+ "pushfd", | |
+ "pushfq", | |
+ "pxor", | |
+ "rcl", | |
+ "rcr", | |
+ "rol", | |
+ "ror", | |
+ "rcpps", | |
+ "rcpss", | |
+ "rdmsr", | |
+ "rdpmc", | |
+ "rdtsc", | |
+ "rdtscp", | |
+ "repne", | |
+ "rep", | |
+ "ret", | |
+ "retf", | |
+ "rsm", | |
+ "rsqrtps", | |
+ "rsqrtss", | |
+ "sahf", | |
+ "sal", | |
+ "salc", | |
+ "sar", | |
+ "shl", | |
+ "shr", | |
+ "sbb", | |
+ "scasb", | |
+ "scasw", | |
+ "scasd", | |
+ "scasq", | |
+ "seto", | |
+ "setno", | |
+ "setb", | |
+ "setnb", | |
+ "setz", | |
+ "setnz", | |
+ "setbe", | |
+ "seta", | |
+ "sets", | |
+ "setns", | |
+ "setp", | |
+ "setnp", | |
+ "setl", | |
+ "setge", | |
+ "setle", | |
+ "setg", | |
+ "sfence", | |
+ "sgdt", | |
+ "shld", | |
+ "shrd", | |
+ "shufpd", | |
+ "shufps", | |
+ "sidt", | |
+ "sldt", | |
+ "smsw", | |
+ "sqrtps", | |
+ "sqrtpd", | |
+ "sqrtsd", | |
+ "sqrtss", | |
+ "stc", | |
+ "std", | |
+ "stgi", | |
+ "sti", | |
+ "skinit", | |
+ "stmxcsr", | |
+ "stosb", | |
+ "stosw", | |
+ "stosd", | |
+ "stosq", | |
+ "str", | |
+ "sub", | |
+ "subpd", | |
+ "subps", | |
+ "subsd", | |
+ "subss", | |
+ "swapgs", | |
+ "syscall", | |
+ "sysenter", | |
+ "sysexit", | |
+ "sysret", | |
+ "test", | |
+ "ucomisd", | |
+ "ucomiss", | |
+ "ud2", | |
+ "unpckhpd", | |
+ "unpckhps", | |
+ "unpcklps", | |
+ "unpcklpd", | |
+ "verr", | |
+ "verw", | |
+ "vmcall", | |
+ "vmclear", | |
+ "vmxon", | |
+ "vmptrld", | |
+ "vmptrst", | |
+ "vmresume", | |
+ "vmxoff", | |
+ "vmrun", | |
+ "vmmcall", | |
+ "vmload", | |
+ "vmsave", | |
+ "wait", | |
+ "wbinvd", | |
+ "wrmsr", | |
+ "xadd", | |
+ "xchg", | |
+ "xlatb", | |
+ "xor", | |
+ "xorpd", | |
+ "xorps", | |
+ "db", | |
+ "invalid", | |
+}; | |
+ | |
+ | |
+ | |
+static struct ud_itab_entry itab__0f[256] = { | |
+ /* 00 */ { UD_Igrp_reg, O_NONE, O_NONE, O_NONE, ITAB__0F__OP_00__REG }, | |
+ /* 01 */ { UD_Igrp_reg, O_NONE, O_NONE, O_NONE, ITAB__0F__OP_01__REG }, | |
+ /* 02 */ { UD_Ilar, O_Gv, O_Ew, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 03 */ { UD_Ilsl, O_Gv, O_Ew, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 04 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 05 */ { UD_Isyscall, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 06 */ { UD_Iclts, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 07 */ { UD_Isysret, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 08 */ { UD_Iinvd, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 09 */ { UD_Iwbinvd, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 0A */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 0B */ { UD_Iud2, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 0C */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 0D */ { UD_Igrp_reg, O_NONE, O_NONE, O_NONE, ITAB__0F__OP_0D__REG }, | |
+ /* 0E */ { UD_Ifemms, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 0F */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 10 */ { UD_Imovups, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 11 */ { UD_Imovups, O_W, O_V, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 12 */ { UD_Imovlps, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 13 */ { UD_Imovlps, O_M, O_V, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 14 */ { UD_Iunpcklps, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 15 */ { UD_Iunpckhps, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 16 */ { UD_Imovhps, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 17 */ { UD_Imovhps, O_M, O_V, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 18 */ { UD_Igrp_reg, O_NONE, O_NONE, O_NONE, ITAB__0F__OP_18__REG }, | |
+ /* 19 */ { UD_Inop, O_M, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 1A */ { UD_Inop, O_M, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 1B */ { UD_Inop, O_M, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 1C */ { UD_Inop, O_M, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 1D */ { UD_Inop, O_M, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 1E */ { UD_Inop, O_M, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 1F */ { UD_Inop, O_M, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 20 */ { UD_Imov, O_R, O_C, O_NONE, P_rexr }, | |
+ /* 21 */ { UD_Imov, O_R, O_D, O_NONE, P_rexr }, | |
+ /* 22 */ { UD_Imov, O_C, O_R, O_NONE, P_rexr }, | |
+ /* 23 */ { UD_Imov, O_D, O_R, O_NONE, P_rexr }, | |
+ /* 24 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 25 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 26 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 27 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 28 */ { UD_Imovaps, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 29 */ { UD_Imovaps, O_W, O_V, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 2A */ { UD_Icvtpi2ps, O_V, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 2B */ { UD_Imovntps, O_M, O_V, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 2C */ { UD_Icvttps2pi, O_P, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 2D */ { UD_Icvtps2pi, O_P, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 2E */ { UD_Iucomiss, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 2F */ { UD_Icomiss, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 30 */ { UD_Iwrmsr, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 31 */ { UD_Irdtsc, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 32 */ { UD_Irdmsr, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 33 */ { UD_Irdpmc, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 34 */ { UD_Isysenter, O_NONE, O_NONE, O_NONE, P_inv64|P_none }, | |
+ /* 35 */ { UD_Isysexit, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 36 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 37 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 38 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 39 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 3A */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 3B */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 3C */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 3D */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 3E */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 3F */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 40 */ { UD_Icmovo, O_Gv, O_Ev, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 41 */ { UD_Icmovno, O_Gv, O_Ev, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 42 */ { UD_Icmovb, O_Gv, O_Ev, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 43 */ { UD_Icmovae, O_Gv, O_Ev, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 44 */ { UD_Icmovz, O_Gv, O_Ev, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 45 */ { UD_Icmovnz, O_Gv, O_Ev, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 46 */ { UD_Icmovbe, O_Gv, O_Ev, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 47 */ { UD_Icmova, O_Gv, O_Ev, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 48 */ { UD_Icmovs, O_Gv, O_Ev, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 49 */ { UD_Icmovns, O_Gv, O_Ev, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 4A */ { UD_Icmovp, O_Gv, O_Ev, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 4B */ { UD_Icmovnp, O_Gv, O_Ev, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 4C */ { UD_Icmovl, O_Gv, O_Ev, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 4D */ { UD_Icmovge, O_Gv, O_Ev, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 4E */ { UD_Icmovle, O_Gv, O_Ev, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 4F */ { UD_Icmovg, O_Gv, O_Ev, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 50 */ { UD_Imovmskps, O_Gd, O_VR, O_NONE, P_oso|P_rexr|P_rexb }, | |
+ /* 51 */ { UD_Isqrtps, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 52 */ { UD_Irsqrtps, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 53 */ { UD_Ircpps, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 54 */ { UD_Iandps, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 55 */ { UD_Iandnps, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 56 */ { UD_Iorps, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 57 */ { UD_Ixorps, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 58 */ { UD_Iaddps, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 59 */ { UD_Imulps, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 5A */ { UD_Icvtps2pd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 5B */ { UD_Icvtdq2ps, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 5C */ { UD_Isubps, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 5D */ { UD_Iminps, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 5E */ { UD_Idivps, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 5F */ { UD_Imaxps, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 60 */ { UD_Ipunpcklbw, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 61 */ { UD_Ipunpcklwd, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 62 */ { UD_Ipunpckldq, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 63 */ { UD_Ipacksswb, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 64 */ { UD_Ipcmpgtb, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 65 */ { UD_Ipcmpgtw, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 66 */ { UD_Ipcmpgtd, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 67 */ { UD_Ipackuswb, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 68 */ { UD_Ipunpckhbw, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 69 */ { UD_Ipunpckhwd, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 6A */ { UD_Ipunpckhdq, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 6B */ { UD_Ipackssdw, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 6C */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 6D */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 6E */ { UD_Imovd, O_P, O_Ex, O_NONE, P_c2|P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 6F */ { UD_Imovq, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 70 */ { UD_Ipshufw, O_P, O_Q, O_Ib, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 71 */ { UD_Igrp_reg, O_NONE, O_NONE, O_NONE, ITAB__0F__OP_71__REG }, | |
+ /* 72 */ { UD_Igrp_reg, O_NONE, O_NONE, O_NONE, ITAB__0F__OP_72__REG }, | |
+ /* 73 */ { UD_Igrp_reg, O_NONE, O_NONE, O_NONE, ITAB__0F__OP_73__REG }, | |
+ /* 74 */ { UD_Ipcmpeqb, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 75 */ { UD_Ipcmpeqw, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 76 */ { UD_Ipcmpeqd, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 77 */ { UD_Iemms, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 78 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 79 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 7A */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 7B */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 7C */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 7D */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 7E */ { UD_Imovd, O_Ex, O_P, O_NONE, P_c1|P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 7F */ { UD_Imovq, O_Q, O_P, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 80 */ { UD_Ijo, O_Jz, O_NONE, O_NONE, P_c1|P_def64|P_depM|P_oso }, | |
+ /* 81 */ { UD_Ijno, O_Jz, O_NONE, O_NONE, P_c1|P_def64|P_depM|P_oso }, | |
+ /* 82 */ { UD_Ijb, O_Jz, O_NONE, O_NONE, P_c1|P_def64|P_depM|P_oso }, | |
+ /* 83 */ { UD_Ijae, O_Jz, O_NONE, O_NONE, P_c1|P_def64|P_depM|P_oso }, | |
+ /* 84 */ { UD_Ijz, O_Jz, O_NONE, O_NONE, P_c1|P_def64|P_depM|P_oso }, | |
+ /* 85 */ { UD_Ijnz, O_Jz, O_NONE, O_NONE, P_c1|P_def64|P_depM|P_oso }, | |
+ /* 86 */ { UD_Ijbe, O_Jz, O_NONE, O_NONE, P_c1|P_def64|P_depM|P_oso }, | |
+ /* 87 */ { UD_Ija, O_Jz, O_NONE, O_NONE, P_c1|P_def64|P_depM|P_oso }, | |
+ /* 88 */ { UD_Ijs, O_Jz, O_NONE, O_NONE, P_c1|P_def64|P_depM|P_oso }, | |
+ /* 89 */ { UD_Ijns, O_Jz, O_NONE, O_NONE, P_c1|P_def64|P_depM|P_oso }, | |
+ /* 8A */ { UD_Ijp, O_Jz, O_NONE, O_NONE, P_c1|P_def64|P_depM|P_oso }, | |
+ /* 8B */ { UD_Ijnp, O_Jz, O_NONE, O_NONE, P_c1|P_def64|P_depM|P_oso }, | |
+ /* 8C */ { UD_Ijl, O_Jz, O_NONE, O_NONE, P_c1|P_def64|P_depM|P_oso }, | |
+ /* 8D */ { UD_Ijge, O_Jz, O_NONE, O_NONE, P_c1|P_def64|P_depM|P_oso }, | |
+ /* 8E */ { UD_Ijle, O_Jz, O_NONE, O_NONE, P_c1|P_def64|P_depM|P_oso }, | |
+ /* 8F */ { UD_Ijg, O_Jz, O_NONE, O_NONE, P_c1|P_def64|P_depM|P_oso }, | |
+ /* 90 */ { UD_Iseto, O_Eb, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 91 */ { UD_Isetno, O_Eb, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 92 */ { UD_Isetb, O_Eb, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 93 */ { UD_Isetnb, O_Eb, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 94 */ { UD_Isetz, O_Eb, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 95 */ { UD_Isetnz, O_Eb, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 96 */ { UD_Isetbe, O_Eb, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 97 */ { UD_Iseta, O_Eb, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 98 */ { UD_Isets, O_Eb, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 99 */ { UD_Isetns, O_Eb, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 9A */ { UD_Isetp, O_Eb, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 9B */ { UD_Isetnp, O_Eb, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 9C */ { UD_Isetl, O_Eb, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 9D */ { UD_Isetge, O_Eb, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 9E */ { UD_Isetle, O_Eb, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 9F */ { UD_Isetg, O_Eb, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* A0 */ { UD_Ipush, O_FS, O_NONE, O_NONE, P_none }, | |
+ /* A1 */ { UD_Ipop, O_FS, O_NONE, O_NONE, P_none }, | |
+ /* A2 */ { UD_Icpuid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* A3 */ { UD_Ibt, O_Ev, O_Gv, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* A4 */ { UD_Ishld, O_Ev, O_Gv, O_Ib, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* A5 */ { UD_Ishld, O_Ev, O_Gv, O_CL, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* A6 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* A7 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* A8 */ { UD_Ipush, O_GS, O_NONE, O_NONE, P_none }, | |
+ /* A9 */ { UD_Ipop, O_GS, O_NONE, O_NONE, P_none }, | |
+ /* AA */ { UD_Irsm, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* AB */ { UD_Ibts, O_Ev, O_Gv, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* AC */ { UD_Ishrd, O_Ev, O_Gv, O_Ib, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* AD */ { UD_Ishrd, O_Ev, O_Gv, O_CL, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* AE */ { UD_Igrp_reg, O_NONE, O_NONE, O_NONE, ITAB__0F__OP_AE__REG }, | |
+ /* AF */ { UD_Iimul, O_Gv, O_Ev, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* B0 */ { UD_Icmpxchg, O_Eb, O_Gb, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* B1 */ { UD_Icmpxchg, O_Ev, O_Gv, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* B2 */ { UD_Ilss, O_Gz, O_M, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* B3 */ { UD_Ibtr, O_Ev, O_Gv, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* B4 */ { UD_Ilfs, O_Gz, O_M, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* B5 */ { UD_Ilgs, O_Gz, O_M, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* B6 */ { UD_Imovzx, O_Gv, O_Eb, O_NONE, P_c2|P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* B7 */ { UD_Imovzx, O_Gv, O_Ew, O_NONE, P_c2|P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* B8 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* B9 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* BA */ { UD_Igrp_reg, O_NONE, O_NONE, O_NONE, ITAB__0F__OP_BA__REG }, | |
+ /* BB */ { UD_Ibtc, O_Ev, O_Gv, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* BC */ { UD_Ibsf, O_Gv, O_Ev, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* BD */ { UD_Ibsr, O_Gv, O_Ev, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* BE */ { UD_Imovsx, O_Gv, O_Eb, O_NONE, P_c2|P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* BF */ { UD_Imovsx, O_Gv, O_Ew, O_NONE, P_c2|P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* C0 */ { UD_Ixadd, O_Eb, O_Gb, O_NONE, P_aso|P_oso|P_rexr|P_rexx|P_rexb }, | |
+ /* C1 */ { UD_Ixadd, O_Ev, O_Gv, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* C2 */ { UD_Icmpps, O_V, O_W, O_Ib, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* C3 */ { UD_Imovnti, O_M, O_Gvw, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* C4 */ { UD_Ipinsrw, O_P, O_Ew, O_Ib, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* C5 */ { UD_Ipextrw, O_Gd, O_PR, O_Ib, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* C6 */ { UD_Ishufps, O_V, O_W, O_Ib, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* C7 */ { UD_Igrp_reg, O_NONE, O_NONE, O_NONE, ITAB__0F__OP_C7__REG }, | |
+ /* C8 */ { UD_Ibswap, O_rAXr8, O_NONE, O_NONE, P_oso|P_rexw|P_rexb }, | |
+ /* C9 */ { UD_Ibswap, O_rCXr9, O_NONE, O_NONE, P_oso|P_rexw|P_rexb }, | |
+ /* CA */ { UD_Ibswap, O_rDXr10, O_NONE, O_NONE, P_oso|P_rexw|P_rexb }, | |
+ /* CB */ { UD_Ibswap, O_rBXr11, O_NONE, O_NONE, P_oso|P_rexw|P_rexb }, | |
+ /* CC */ { UD_Ibswap, O_rSPr12, O_NONE, O_NONE, P_oso|P_rexw|P_rexb }, | |
+ /* CD */ { UD_Ibswap, O_rBPr13, O_NONE, O_NONE, P_oso|P_rexw|P_rexb }, | |
+ /* CE */ { UD_Ibswap, O_rSIr14, O_NONE, O_NONE, P_oso|P_rexw|P_rexb }, | |
+ /* CF */ { UD_Ibswap, O_rDIr15, O_NONE, O_NONE, P_oso|P_rexw|P_rexb }, | |
+ /* D0 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* D1 */ { UD_Ipsrlw, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* D2 */ { UD_Ipsrld, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* D3 */ { UD_Ipsrlq, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* D4 */ { UD_Ipaddq, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* D5 */ { UD_Ipmullw, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* D6 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* D7 */ { UD_Ipmovmskb, O_Gd, O_PR, O_NONE, P_oso|P_rexr|P_rexb }, | |
+ /* D8 */ { UD_Ipsubusb, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* D9 */ { UD_Ipsubusw, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* DA */ { UD_Ipminub, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* DB */ { UD_Ipand, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* DC */ { UD_Ipaddusb, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* DD */ { UD_Ipaddusw, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* DE */ { UD_Ipmaxub, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* DF */ { UD_Ipandn, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* E0 */ { UD_Ipavgb, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* E1 */ { UD_Ipsraw, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* E2 */ { UD_Ipsrad, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* E3 */ { UD_Ipavgw, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* E4 */ { UD_Ipmulhuw, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* E5 */ { UD_Ipmulhw, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* E6 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* E7 */ { UD_Imovntq, O_M, O_P, O_NONE, P_none }, | |
+ /* E8 */ { UD_Ipsubsb, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* E9 */ { UD_Ipsubsw, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* EA */ { UD_Ipminsw, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* EB */ { UD_Ipor, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* EC */ { UD_Ipaddsb, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* ED */ { UD_Ipaddsw, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* EE */ { UD_Ipmaxsw, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* EF */ { UD_Ipxor, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* F0 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* F1 */ { UD_Ipsllw, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* F2 */ { UD_Ipslld, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* F3 */ { UD_Ipsllq, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* F4 */ { UD_Ipmuludq, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* F5 */ { UD_Ipmaddwd, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* F6 */ { UD_Ipsadbw, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* F7 */ { UD_Imaskmovq, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* F8 */ { UD_Ipsubb, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* F9 */ { UD_Ipsubw, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* FA */ { UD_Ipsubd, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* FB */ { UD_Ipsubq, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* FC */ { UD_Ipaddb, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* FD */ { UD_Ipaddw, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* FE */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* FF */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__0f__op_00__reg[8] = { | |
+ /* 00 */ { UD_Isldt, O_Ev, O_NONE, O_NONE, P_aso|P_oso|P_rexr|P_rexx|P_rexb }, | |
+ /* 01 */ { UD_Istr, O_Ev, O_NONE, O_NONE, P_aso|P_oso|P_rexr|P_rexx|P_rexb }, | |
+ /* 02 */ { UD_Illdt, O_Ew, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 03 */ { UD_Iltr, O_Ew, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 04 */ { UD_Iverr, O_Ew, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 05 */ { UD_Iverw, O_Ew, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 06 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 07 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__0f__op_01__reg[8] = { | |
+ /* 00 */ { UD_Igrp_mod, O_NONE, O_NONE, O_NONE, ITAB__0F__OP_01__REG__OP_00__MOD }, | |
+ /* 01 */ { UD_Igrp_mod, O_NONE, O_NONE, O_NONE, ITAB__0F__OP_01__REG__OP_01__MOD }, | |
+ /* 02 */ { UD_Igrp_mod, O_NONE, O_NONE, O_NONE, ITAB__0F__OP_01__REG__OP_02__MOD }, | |
+ /* 03 */ { UD_Igrp_mod, O_NONE, O_NONE, O_NONE, ITAB__0F__OP_01__REG__OP_03__MOD }, | |
+ /* 04 */ { UD_Igrp_mod, O_NONE, O_NONE, O_NONE, ITAB__0F__OP_01__REG__OP_04__MOD }, | |
+ /* 05 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 06 */ { UD_Igrp_mod, O_NONE, O_NONE, O_NONE, ITAB__0F__OP_01__REG__OP_06__MOD }, | |
+ /* 07 */ { UD_Igrp_mod, O_NONE, O_NONE, O_NONE, ITAB__0F__OP_01__REG__OP_07__MOD }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__0f__op_01__reg__op_00__mod[2] = { | |
+ /* 00 */ { UD_Isgdt, O_M, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 01 */ { UD_Igrp_rm, O_NONE, O_NONE, O_NONE, ITAB__0F__OP_01__REG__OP_00__MOD__OP_01__RM }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__0f__op_01__reg__op_00__mod__op_01__rm[8] = { | |
+ /* 00 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 01 */ { UD_Igrp_vendor, O_NONE, O_NONE, O_NONE, ITAB__0F__OP_01__REG__OP_00__MOD__OP_01__RM__OP_01__VENDOR }, | |
+ /* 02 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 03 */ { UD_Igrp_vendor, O_NONE, O_NONE, O_NONE, ITAB__0F__OP_01__REG__OP_00__MOD__OP_01__RM__OP_03__VENDOR }, | |
+ /* 04 */ { UD_Igrp_vendor, O_NONE, O_NONE, O_NONE, ITAB__0F__OP_01__REG__OP_00__MOD__OP_01__RM__OP_04__VENDOR }, | |
+ /* 05 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 06 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 07 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__0f__op_01__reg__op_00__mod__op_01__rm__op_01__vendor[2] = { | |
+ /* 00 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 01 */ { UD_Ivmcall, O_NONE, O_NONE, O_NONE, P_none }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__0f__op_01__reg__op_00__mod__op_01__rm__op_03__vendor[2] = { | |
+ /* 00 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 01 */ { UD_Ivmresume, O_NONE, O_NONE, O_NONE, P_none }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__0f__op_01__reg__op_00__mod__op_01__rm__op_04__vendor[2] = { | |
+ /* 00 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 01 */ { UD_Ivmxoff, O_NONE, O_NONE, O_NONE, P_none }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__0f__op_01__reg__op_01__mod[2] = { | |
+ /* 00 */ { UD_Isidt, O_M, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 01 */ { UD_Igrp_rm, O_NONE, O_NONE, O_NONE, ITAB__0F__OP_01__REG__OP_01__MOD__OP_01__RM }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__0f__op_01__reg__op_01__mod__op_01__rm[8] = { | |
+ /* 00 */ { UD_Imonitor, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 01 */ { UD_Imwait, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 02 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 03 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 04 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 05 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 06 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 07 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__0f__op_01__reg__op_02__mod[2] = { | |
+ /* 00 */ { UD_Ilgdt, O_M, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 01 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__0f__op_01__reg__op_03__mod[2] = { | |
+ /* 00 */ { UD_Ilidt, O_M, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 01 */ { UD_Igrp_rm, O_NONE, O_NONE, O_NONE, ITAB__0F__OP_01__REG__OP_03__MOD__OP_01__RM }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__0f__op_01__reg__op_03__mod__op_01__rm[8] = { | |
+ /* 00 */ { UD_Igrp_vendor, O_NONE, O_NONE, O_NONE, ITAB__0F__OP_01__REG__OP_03__MOD__OP_01__RM__OP_00__VENDOR }, | |
+ /* 01 */ { UD_Igrp_vendor, O_NONE, O_NONE, O_NONE, ITAB__0F__OP_01__REG__OP_03__MOD__OP_01__RM__OP_01__VENDOR }, | |
+ /* 02 */ { UD_Igrp_vendor, O_NONE, O_NONE, O_NONE, ITAB__0F__OP_01__REG__OP_03__MOD__OP_01__RM__OP_02__VENDOR }, | |
+ /* 03 */ { UD_Igrp_vendor, O_NONE, O_NONE, O_NONE, ITAB__0F__OP_01__REG__OP_03__MOD__OP_01__RM__OP_03__VENDOR }, | |
+ /* 04 */ { UD_Igrp_vendor, O_NONE, O_NONE, O_NONE, ITAB__0F__OP_01__REG__OP_03__MOD__OP_01__RM__OP_04__VENDOR }, | |
+ /* 05 */ { UD_Igrp_vendor, O_NONE, O_NONE, O_NONE, ITAB__0F__OP_01__REG__OP_03__MOD__OP_01__RM__OP_05__VENDOR }, | |
+ /* 06 */ { UD_Igrp_vendor, O_NONE, O_NONE, O_NONE, ITAB__0F__OP_01__REG__OP_03__MOD__OP_01__RM__OP_06__VENDOR }, | |
+ /* 07 */ { UD_Igrp_vendor, O_NONE, O_NONE, O_NONE, ITAB__0F__OP_01__REG__OP_03__MOD__OP_01__RM__OP_07__VENDOR }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__0f__op_01__reg__op_03__mod__op_01__rm__op_00__vendor[2] = { | |
+ /* 00 */ { UD_Ivmrun, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 01 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__0f__op_01__reg__op_03__mod__op_01__rm__op_01__vendor[2] = { | |
+ /* 00 */ { UD_Ivmmcall, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 01 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__0f__op_01__reg__op_03__mod__op_01__rm__op_02__vendor[2] = { | |
+ /* 00 */ { UD_Ivmload, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 01 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__0f__op_01__reg__op_03__mod__op_01__rm__op_03__vendor[2] = { | |
+ /* 00 */ { UD_Ivmsave, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 01 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__0f__op_01__reg__op_03__mod__op_01__rm__op_04__vendor[2] = { | |
+ /* 00 */ { UD_Istgi, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 01 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__0f__op_01__reg__op_03__mod__op_01__rm__op_05__vendor[2] = { | |
+ /* 00 */ { UD_Iclgi, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 01 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__0f__op_01__reg__op_03__mod__op_01__rm__op_06__vendor[2] = { | |
+ /* 00 */ { UD_Iskinit, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 01 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__0f__op_01__reg__op_03__mod__op_01__rm__op_07__vendor[2] = { | |
+ /* 00 */ { UD_Iinvlpga, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 01 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__0f__op_01__reg__op_04__mod[2] = { | |
+ /* 00 */ { UD_Ismsw, O_M, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 01 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__0f__op_01__reg__op_06__mod[2] = { | |
+ /* 00 */ { UD_Ilmsw, O_Ew, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 01 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__0f__op_01__reg__op_07__mod[2] = { | |
+ /* 00 */ { UD_Iinvlpg, O_M, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 01 */ { UD_Igrp_rm, O_NONE, O_NONE, O_NONE, ITAB__0F__OP_01__REG__OP_07__MOD__OP_01__RM }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__0f__op_01__reg__op_07__mod__op_01__rm[8] = { | |
+ /* 00 */ { UD_Iswapgs, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 01 */ { UD_Igrp_vendor, O_NONE, O_NONE, O_NONE, ITAB__0F__OP_01__REG__OP_07__MOD__OP_01__RM__OP_01__VENDOR }, | |
+ /* 02 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 03 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 04 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 05 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 06 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 07 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__0f__op_01__reg__op_07__mod__op_01__rm__op_01__vendor[2] = { | |
+ /* 00 */ { UD_Irdtscp, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 01 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__0f__op_0d__reg[8] = { | |
+ /* 00 */ { UD_Iprefetch, O_M, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 01 */ { UD_Iprefetch, O_M, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 02 */ { UD_Iprefetch, O_M, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 03 */ { UD_Iprefetch, O_M, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 04 */ { UD_Iprefetch, O_M, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 05 */ { UD_Iprefetch, O_M, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 06 */ { UD_Iprefetch, O_M, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 07 */ { UD_Iprefetch, O_M, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__0f__op_18__reg[8] = { | |
+ /* 00 */ { UD_Iprefetchnta, O_M, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 01 */ { UD_Iprefetcht0, O_M, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 02 */ { UD_Iprefetcht1, O_M, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 03 */ { UD_Iprefetcht2, O_M, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 04 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 05 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 06 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 07 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__0f__op_71__reg[8] = { | |
+ /* 00 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 01 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 02 */ { UD_Ipsrlw, O_PR, O_Ib, O_NONE, P_none }, | |
+ /* 03 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 04 */ { UD_Ipsraw, O_PR, O_Ib, O_NONE, P_none }, | |
+ /* 05 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 06 */ { UD_Ipsllw, O_PR, O_Ib, O_NONE, P_none }, | |
+ /* 07 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__0f__op_72__reg[8] = { | |
+ /* 00 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 01 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 02 */ { UD_Ipsrld, O_PR, O_Ib, O_NONE, P_none }, | |
+ /* 03 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 04 */ { UD_Ipsrad, O_PR, O_Ib, O_NONE, P_none }, | |
+ /* 05 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 06 */ { UD_Ipslld, O_PR, O_Ib, O_NONE, P_none }, | |
+ /* 07 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__0f__op_73__reg[8] = { | |
+ /* 00 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 01 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 02 */ { UD_Ipsrlq, O_PR, O_Ib, O_NONE, P_none }, | |
+ /* 03 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 04 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 05 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 06 */ { UD_Ipsllq, O_PR, O_Ib, O_NONE, P_none }, | |
+ /* 07 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__0f__op_ae__reg[8] = { | |
+ /* 00 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 01 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 02 */ { UD_Ildmxcsr, O_Md, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 03 */ { UD_Istmxcsr, O_Md, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 04 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 05 */ { UD_Igrp_mod, O_NONE, O_NONE, O_NONE, ITAB__0F__OP_AE__REG__OP_05__MOD }, | |
+ /* 06 */ { UD_Igrp_mod, O_NONE, O_NONE, O_NONE, ITAB__0F__OP_AE__REG__OP_06__MOD }, | |
+ /* 07 */ { UD_Igrp_mod, O_NONE, O_NONE, O_NONE, ITAB__0F__OP_AE__REG__OP_07__MOD }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__0f__op_ae__reg__op_05__mod[2] = { | |
+ /* 00 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 01 */ { UD_Igrp_rm, O_NONE, O_NONE, O_NONE, ITAB__0F__OP_AE__REG__OP_05__MOD__OP_01__RM }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__0f__op_ae__reg__op_05__mod__op_01__rm[8] = { | |
+ /* 00 */ { UD_Ilfence, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 01 */ { UD_Ilfence, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 02 */ { UD_Ilfence, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 03 */ { UD_Ilfence, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 04 */ { UD_Ilfence, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 05 */ { UD_Ilfence, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 06 */ { UD_Ilfence, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 07 */ { UD_Ilfence, O_NONE, O_NONE, O_NONE, P_none }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__0f__op_ae__reg__op_06__mod[2] = { | |
+ /* 00 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 01 */ { UD_Igrp_rm, O_NONE, O_NONE, O_NONE, ITAB__0F__OP_AE__REG__OP_06__MOD__OP_01__RM }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__0f__op_ae__reg__op_06__mod__op_01__rm[8] = { | |
+ /* 00 */ { UD_Imfence, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 01 */ { UD_Imfence, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 02 */ { UD_Imfence, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 03 */ { UD_Imfence, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 04 */ { UD_Imfence, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 05 */ { UD_Imfence, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 06 */ { UD_Imfence, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 07 */ { UD_Imfence, O_NONE, O_NONE, O_NONE, P_none }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__0f__op_ae__reg__op_07__mod[2] = { | |
+ /* 00 */ { UD_Iclflush, O_M, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 01 */ { UD_Igrp_rm, O_NONE, O_NONE, O_NONE, ITAB__0F__OP_AE__REG__OP_07__MOD__OP_01__RM }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__0f__op_ae__reg__op_07__mod__op_01__rm[8] = { | |
+ /* 00 */ { UD_Isfence, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 01 */ { UD_Isfence, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 02 */ { UD_Isfence, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 03 */ { UD_Isfence, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 04 */ { UD_Isfence, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 05 */ { UD_Isfence, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 06 */ { UD_Isfence, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 07 */ { UD_Isfence, O_NONE, O_NONE, O_NONE, P_none }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__0f__op_ba__reg[8] = { | |
+ /* 00 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 01 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 02 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 03 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 04 */ { UD_Ibt, O_Ev, O_Ib, O_NONE, P_c1|P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 05 */ { UD_Ibts, O_Ev, O_Ib, O_NONE, P_c1|P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 06 */ { UD_Ibtr, O_Ev, O_Ib, O_NONE, P_c1|P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 07 */ { UD_Ibtc, O_Ev, O_Ib, O_NONE, P_c1|P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__0f__op_c7__reg[8] = { | |
+ /* 00 */ { UD_Igrp_vendor, O_NONE, O_NONE, O_NONE, ITAB__0F__OP_C7__REG__OP_00__VENDOR }, | |
+ /* 01 */ { UD_Icmpxchg8b, O_M, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 02 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 03 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 04 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 05 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 06 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 07 */ { UD_Igrp_vendor, O_NONE, O_NONE, O_NONE, ITAB__0F__OP_C7__REG__OP_07__VENDOR }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__0f__op_c7__reg__op_00__vendor[2] = { | |
+ /* 00 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 01 */ { UD_Ivmptrld, O_Mq, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__0f__op_c7__reg__op_07__vendor[2] = { | |
+ /* 00 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 01 */ { UD_Ivmptrst, O_Mq, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__0f__op_d9__mod[2] = { | |
+ /* 00 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 01 */ { UD_Igrp_x87, O_NONE, O_NONE, O_NONE, ITAB__0F__OP_D9__MOD__OP_01__X87 }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__0f__op_d9__mod__op_01__x87[64] = { | |
+ /* 00 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 01 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 02 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 03 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 04 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 05 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 06 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 07 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 08 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 09 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 0A */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 0B */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 0C */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 0D */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 0E */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 0F */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 10 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 11 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 12 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 13 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 14 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 15 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 16 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 17 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 18 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 19 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 1A */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 1B */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 1C */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 1D */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 1E */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 1F */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 20 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 21 */ { UD_Ifabs, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 22 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 23 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 24 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 25 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 26 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 27 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 28 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 29 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 2A */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 2B */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 2C */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 2D */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 2E */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 2F */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 30 */ { UD_If2xm1, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 31 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 32 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 33 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 34 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 35 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 36 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 37 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 38 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 39 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 3A */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 3B */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 3C */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 3D */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 3E */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 3F */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__1byte[256] = { | |
+ /* 00 */ { UD_Iadd, O_Eb, O_Gb, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 01 */ { UD_Iadd, O_Ev, O_Gv, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 02 */ { UD_Iadd, O_Gb, O_Eb, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 03 */ { UD_Iadd, O_Gv, O_Ev, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 04 */ { UD_Iadd, O_AL, O_Ib, O_NONE, P_none }, | |
+ /* 05 */ { UD_Iadd, O_rAX, O_Iz, O_NONE, P_oso|P_rexw }, | |
+ /* 06 */ { UD_Ipush, O_ES, O_NONE, O_NONE, P_inv64|P_none }, | |
+ /* 07 */ { UD_Ipop, O_ES, O_NONE, O_NONE, P_inv64|P_none }, | |
+ /* 08 */ { UD_Ior, O_Eb, O_Gb, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 09 */ { UD_Ior, O_Ev, O_Gv, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 0A */ { UD_Ior, O_Gb, O_Eb, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 0B */ { UD_Ior, O_Gv, O_Ev, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 0C */ { UD_Ior, O_AL, O_Ib, O_NONE, P_none }, | |
+ /* 0D */ { UD_Ior, O_rAX, O_Iz, O_NONE, P_oso|P_rexw }, | |
+ /* 0E */ { UD_Ipush, O_CS, O_NONE, O_NONE, P_inv64|P_none }, | |
+ /* 0F */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 10 */ { UD_Iadc, O_Eb, O_Gb, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 11 */ { UD_Iadc, O_Ev, O_Gv, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 12 */ { UD_Iadc, O_Gb, O_Eb, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 13 */ { UD_Iadc, O_Gv, O_Ev, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 14 */ { UD_Iadc, O_AL, O_Ib, O_NONE, P_none }, | |
+ /* 15 */ { UD_Iadc, O_rAX, O_Iz, O_NONE, P_oso|P_rexw }, | |
+ /* 16 */ { UD_Ipush, O_SS, O_NONE, O_NONE, P_inv64|P_none }, | |
+ /* 17 */ { UD_Ipop, O_SS, O_NONE, O_NONE, P_inv64|P_none }, | |
+ /* 18 */ { UD_Isbb, O_Eb, O_Gb, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 19 */ { UD_Isbb, O_Ev, O_Gv, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 1A */ { UD_Isbb, O_Gb, O_Eb, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 1B */ { UD_Isbb, O_Gv, O_Ev, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 1C */ { UD_Isbb, O_AL, O_Ib, O_NONE, P_none }, | |
+ /* 1D */ { UD_Isbb, O_rAX, O_Iz, O_NONE, P_oso|P_rexw }, | |
+ /* 1E */ { UD_Ipush, O_DS, O_NONE, O_NONE, P_inv64|P_none }, | |
+ /* 1F */ { UD_Ipop, O_DS, O_NONE, O_NONE, P_inv64|P_none }, | |
+ /* 20 */ { UD_Iand, O_Eb, O_Gb, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 21 */ { UD_Iand, O_Ev, O_Gv, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 22 */ { UD_Iand, O_Gb, O_Eb, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 23 */ { UD_Iand, O_Gv, O_Ev, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 24 */ { UD_Iand, O_AL, O_Ib, O_NONE, P_none }, | |
+ /* 25 */ { UD_Iand, O_rAX, O_Iz, O_NONE, P_oso|P_rexw }, | |
+ /* 26 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 27 */ { UD_Idaa, O_NONE, O_NONE, O_NONE, P_inv64|P_none }, | |
+ /* 28 */ { UD_Isub, O_Eb, O_Gb, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 29 */ { UD_Isub, O_Ev, O_Gv, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 2A */ { UD_Isub, O_Gb, O_Eb, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 2B */ { UD_Isub, O_Gv, O_Ev, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 2C */ { UD_Isub, O_AL, O_Ib, O_NONE, P_none }, | |
+ /* 2D */ { UD_Isub, O_rAX, O_Iz, O_NONE, P_oso|P_rexw }, | |
+ /* 2E */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 2F */ { UD_Idas, O_NONE, O_NONE, O_NONE, P_inv64|P_none }, | |
+ /* 30 */ { UD_Ixor, O_Eb, O_Gb, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 31 */ { UD_Ixor, O_Ev, O_Gv, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 32 */ { UD_Ixor, O_Gb, O_Eb, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 33 */ { UD_Ixor, O_Gv, O_Ev, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 34 */ { UD_Ixor, O_AL, O_Ib, O_NONE, P_none }, | |
+ /* 35 */ { UD_Ixor, O_rAX, O_Iz, O_NONE, P_oso|P_rexw }, | |
+ /* 36 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 37 */ { UD_Iaaa, O_NONE, O_NONE, O_NONE, P_inv64|P_none }, | |
+ /* 38 */ { UD_Icmp, O_Eb, O_Gb, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 39 */ { UD_Icmp, O_Ev, O_Gv, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 3A */ { UD_Icmp, O_Gb, O_Eb, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 3B */ { UD_Icmp, O_Gv, O_Ev, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 3C */ { UD_Icmp, O_AL, O_Ib, O_NONE, P_none }, | |
+ /* 3D */ { UD_Icmp, O_rAX, O_Iz, O_NONE, P_oso|P_rexw }, | |
+ /* 3E */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 3F */ { UD_Iaas, O_NONE, O_NONE, O_NONE, P_inv64|P_none }, | |
+ /* 40 */ { UD_Iinc, O_eAX, O_NONE, O_NONE, P_oso }, | |
+ /* 41 */ { UD_Iinc, O_eCX, O_NONE, O_NONE, P_oso }, | |
+ /* 42 */ { UD_Iinc, O_eDX, O_NONE, O_NONE, P_oso }, | |
+ /* 43 */ { UD_Iinc, O_eBX, O_NONE, O_NONE, P_oso }, | |
+ /* 44 */ { UD_Iinc, O_eSP, O_NONE, O_NONE, P_oso }, | |
+ /* 45 */ { UD_Iinc, O_eBP, O_NONE, O_NONE, P_oso }, | |
+ /* 46 */ { UD_Iinc, O_eSI, O_NONE, O_NONE, P_oso }, | |
+ /* 47 */ { UD_Iinc, O_eDI, O_NONE, O_NONE, P_oso }, | |
+ /* 48 */ { UD_Idec, O_eAX, O_NONE, O_NONE, P_oso }, | |
+ /* 49 */ { UD_Idec, O_eCX, O_NONE, O_NONE, P_oso }, | |
+ /* 4A */ { UD_Idec, O_eDX, O_NONE, O_NONE, P_oso }, | |
+ /* 4B */ { UD_Idec, O_eBX, O_NONE, O_NONE, P_oso }, | |
+ /* 4C */ { UD_Idec, O_eSP, O_NONE, O_NONE, P_oso }, | |
+ /* 4D */ { UD_Idec, O_eBP, O_NONE, O_NONE, P_oso }, | |
+ /* 4E */ { UD_Idec, O_eSI, O_NONE, O_NONE, P_oso }, | |
+ /* 4F */ { UD_Idec, O_eDI, O_NONE, O_NONE, P_oso }, | |
+ /* 50 */ { UD_Ipush, O_rAXr8, O_NONE, O_NONE, P_def64|P_depM|P_oso|P_rexb }, | |
+ /* 51 */ { UD_Ipush, O_rCXr9, O_NONE, O_NONE, P_def64|P_depM|P_oso|P_rexb }, | |
+ /* 52 */ { UD_Ipush, O_rDXr10, O_NONE, O_NONE, P_def64|P_depM|P_oso|P_rexb }, | |
+ /* 53 */ { UD_Ipush, O_rBXr11, O_NONE, O_NONE, P_def64|P_depM|P_oso|P_rexb }, | |
+ /* 54 */ { UD_Ipush, O_rSPr12, O_NONE, O_NONE, P_def64|P_depM|P_oso|P_rexb }, | |
+ /* 55 */ { UD_Ipush, O_rBPr13, O_NONE, O_NONE, P_def64|P_depM|P_oso|P_rexb }, | |
+ /* 56 */ { UD_Ipush, O_rSIr14, O_NONE, O_NONE, P_def64|P_depM|P_oso|P_rexb }, | |
+ /* 57 */ { UD_Ipush, O_rDIr15, O_NONE, O_NONE, P_def64|P_depM|P_oso|P_rexb }, | |
+ /* 58 */ { UD_Ipop, O_rAXr8, O_NONE, O_NONE, P_def64|P_depM|P_oso|P_rexb }, | |
+ /* 59 */ { UD_Ipop, O_rCXr9, O_NONE, O_NONE, P_def64|P_depM|P_oso|P_rexb }, | |
+ /* 5A */ { UD_Ipop, O_rDXr10, O_NONE, O_NONE, P_def64|P_depM|P_oso|P_rexb }, | |
+ /* 5B */ { UD_Ipop, O_rBXr11, O_NONE, O_NONE, P_def64|P_depM|P_oso|P_rexb }, | |
+ /* 5C */ { UD_Ipop, O_rSPr12, O_NONE, O_NONE, P_def64|P_depM|P_oso|P_rexb }, | |
+ /* 5D */ { UD_Ipop, O_rBPr13, O_NONE, O_NONE, P_def64|P_depM|P_oso|P_rexb }, | |
+ /* 5E */ { UD_Ipop, O_rSIr14, O_NONE, O_NONE, P_def64|P_depM|P_oso|P_rexb }, | |
+ /* 5F */ { UD_Ipop, O_rDIr15, O_NONE, O_NONE, P_def64|P_depM|P_oso|P_rexb }, | |
+ /* 60 */ { UD_Igrp_osize, O_NONE, O_NONE, O_NONE, ITAB__1BYTE__OP_60__OSIZE }, | |
+ /* 61 */ { UD_Igrp_osize, O_NONE, O_NONE, O_NONE, ITAB__1BYTE__OP_61__OSIZE }, | |
+ /* 62 */ { UD_Ibound, O_Gv, O_M, O_NONE, P_inv64|P_aso|P_oso }, | |
+ /* 63 */ { UD_Igrp_mode, O_NONE, O_NONE, O_NONE, ITAB__1BYTE__OP_63__MODE }, | |
+ /* 64 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 65 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 66 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 67 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 68 */ { UD_Ipush, O_Iz, O_NONE, O_NONE, P_c1|P_oso }, | |
+ /* 69 */ { UD_Iimul, O_Gv, O_Ev, O_Iz, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 6A */ { UD_Ipush, O_Ib, O_NONE, O_NONE, P_none }, | |
+ /* 6B */ { UD_Iimul, O_Gv, O_Ev, O_Ib, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 6C */ { UD_Iinsb, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 6D */ { UD_Igrp_osize, O_NONE, O_NONE, O_NONE, ITAB__1BYTE__OP_6D__OSIZE }, | |
+ /* 6E */ { UD_Ioutsb, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 6F */ { UD_Igrp_osize, O_NONE, O_NONE, O_NONE, ITAB__1BYTE__OP_6F__OSIZE }, | |
+ /* 70 */ { UD_Ijo, O_Jb, O_NONE, O_NONE, P_none }, | |
+ /* 71 */ { UD_Ijno, O_Jb, O_NONE, O_NONE, P_none }, | |
+ /* 72 */ { UD_Ijb, O_Jb, O_NONE, O_NONE, P_none }, | |
+ /* 73 */ { UD_Ijae, O_Jb, O_NONE, O_NONE, P_none }, | |
+ /* 74 */ { UD_Ijz, O_Jb, O_NONE, O_NONE, P_none }, | |
+ /* 75 */ { UD_Ijnz, O_Jb, O_NONE, O_NONE, P_none }, | |
+ /* 76 */ { UD_Ijbe, O_Jb, O_NONE, O_NONE, P_none }, | |
+ /* 77 */ { UD_Ija, O_Jb, O_NONE, O_NONE, P_none }, | |
+ /* 78 */ { UD_Ijs, O_Jb, O_NONE, O_NONE, P_none }, | |
+ /* 79 */ { UD_Ijns, O_Jb, O_NONE, O_NONE, P_none }, | |
+ /* 7A */ { UD_Ijp, O_Jb, O_NONE, O_NONE, P_none }, | |
+ /* 7B */ { UD_Ijnp, O_Jb, O_NONE, O_NONE, P_none }, | |
+ /* 7C */ { UD_Ijl, O_Jb, O_NONE, O_NONE, P_none }, | |
+ /* 7D */ { UD_Ijge, O_Jb, O_NONE, O_NONE, P_none }, | |
+ /* 7E */ { UD_Ijle, O_Jb, O_NONE, O_NONE, P_none }, | |
+ /* 7F */ { UD_Ijg, O_Jb, O_NONE, O_NONE, P_none }, | |
+ /* 80 */ { UD_Igrp_reg, O_NONE, O_NONE, O_NONE, ITAB__1BYTE__OP_80__REG }, | |
+ /* 81 */ { UD_Igrp_reg, O_NONE, O_NONE, O_NONE, ITAB__1BYTE__OP_81__REG }, | |
+ /* 82 */ { UD_Igrp_reg, O_NONE, O_NONE, O_NONE, ITAB__1BYTE__OP_82__REG }, | |
+ /* 83 */ { UD_Igrp_reg, O_NONE, O_NONE, O_NONE, ITAB__1BYTE__OP_83__REG }, | |
+ /* 84 */ { UD_Itest, O_Eb, O_Gb, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 85 */ { UD_Itest, O_Ev, O_Gv, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 86 */ { UD_Ixchg, O_Eb, O_Gb, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 87 */ { UD_Ixchg, O_Ev, O_Gv, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 88 */ { UD_Imov, O_Eb, O_Gb, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 89 */ { UD_Imov, O_Ev, O_Gv, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 8A */ { UD_Imov, O_Gb, O_Eb, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 8B */ { UD_Imov, O_Gv, O_Ev, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 8C */ { UD_Imov, O_Ev, O_S, O_NONE, P_aso|P_oso|P_rexr|P_rexx|P_rexb }, | |
+ /* 8D */ { UD_Ilea, O_Gv, O_M, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 8E */ { UD_Imov, O_S, O_Ev, O_NONE, P_aso|P_oso|P_rexr|P_rexx|P_rexb }, | |
+ /* 8F */ { UD_Igrp_reg, O_NONE, O_NONE, O_NONE, ITAB__1BYTE__OP_8F__REG }, | |
+ /* 90 */ { UD_Ixchg, O_rAXr8, O_rAX, O_NONE, P_oso|P_rexw|P_rexb }, | |
+ /* 91 */ { UD_Ixchg, O_rCXr9, O_rAX, O_NONE, P_oso|P_rexw|P_rexb }, | |
+ /* 92 */ { UD_Ixchg, O_rDXr10, O_rAX, O_NONE, P_oso|P_rexw|P_rexb }, | |
+ /* 93 */ { UD_Ixchg, O_rBXr11, O_rAX, O_NONE, P_oso|P_rexw|P_rexb }, | |
+ /* 94 */ { UD_Ixchg, O_rSPr12, O_rAX, O_NONE, P_oso|P_rexw|P_rexb }, | |
+ /* 95 */ { UD_Ixchg, O_rBPr13, O_rAX, O_NONE, P_oso|P_rexw|P_rexb }, | |
+ /* 96 */ { UD_Ixchg, O_rSIr14, O_rAX, O_NONE, P_oso|P_rexw|P_rexb }, | |
+ /* 97 */ { UD_Ixchg, O_rDIr15, O_rAX, O_NONE, P_oso|P_rexw|P_rexb }, | |
+ /* 98 */ { UD_Igrp_osize, O_NONE, O_NONE, O_NONE, ITAB__1BYTE__OP_98__OSIZE }, | |
+ /* 99 */ { UD_Igrp_osize, O_NONE, O_NONE, O_NONE, ITAB__1BYTE__OP_99__OSIZE }, | |
+ /* 9A */ { UD_Icall, O_Ap, O_NONE, O_NONE, P_inv64|P_oso }, | |
+ /* 9B */ { UD_Iwait, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 9C */ { UD_Igrp_mode, O_NONE, O_NONE, O_NONE, ITAB__1BYTE__OP_9C__MODE }, | |
+ /* 9D */ { UD_Igrp_mode, O_NONE, O_NONE, O_NONE, ITAB__1BYTE__OP_9D__MODE }, | |
+ /* 9E */ { UD_Isahf, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 9F */ { UD_Ilahf, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* A0 */ { UD_Imov, O_AL, O_Ob, O_NONE, P_none }, | |
+ /* A1 */ { UD_Imov, O_rAX, O_Ov, O_NONE, P_aso|P_oso|P_rexw }, | |
+ /* A2 */ { UD_Imov, O_Ob, O_AL, O_NONE, P_none }, | |
+ /* A3 */ { UD_Imov, O_Ov, O_rAX, O_NONE, P_aso|P_oso|P_rexw }, | |
+ /* A4 */ { UD_Imovsb, O_NONE, O_NONE, O_NONE, P_ImpAddr|P_none }, | |
+ /* A5 */ { UD_Igrp_osize, O_NONE, O_NONE, O_NONE, ITAB__1BYTE__OP_A5__OSIZE }, | |
+ /* A6 */ { UD_Icmpsb, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* A7 */ { UD_Igrp_osize, O_NONE, O_NONE, O_NONE, ITAB__1BYTE__OP_A7__OSIZE }, | |
+ /* A8 */ { UD_Itest, O_AL, O_Ib, O_NONE, P_none }, | |
+ /* A9 */ { UD_Itest, O_rAX, O_Iz, O_NONE, P_oso|P_rexw }, | |
+ /* AA */ { UD_Istosb, O_NONE, O_NONE, O_NONE, P_ImpAddr|P_none }, | |
+ /* AB */ { UD_Igrp_osize, O_NONE, O_NONE, O_NONE, ITAB__1BYTE__OP_AB__OSIZE }, | |
+ /* AC */ { UD_Ilodsb, O_NONE, O_NONE, O_NONE, P_ImpAddr|P_none }, | |
+ /* AD */ { UD_Igrp_osize, O_NONE, O_NONE, O_NONE, ITAB__1BYTE__OP_AD__OSIZE }, | |
+ /* AE */ { UD_Iscasb, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* AF */ { UD_Igrp_osize, O_NONE, O_NONE, O_NONE, ITAB__1BYTE__OP_AF__OSIZE }, | |
+ /* B0 */ { UD_Imov, O_ALr8b, O_Ib, O_NONE, P_rexb }, | |
+ /* B1 */ { UD_Imov, O_CLr9b, O_Ib, O_NONE, P_rexb }, | |
+ /* B2 */ { UD_Imov, O_DLr10b, O_Ib, O_NONE, P_rexb }, | |
+ /* B3 */ { UD_Imov, O_BLr11b, O_Ib, O_NONE, P_rexb }, | |
+ /* B4 */ { UD_Imov, O_AHr12b, O_Ib, O_NONE, P_rexb }, | |
+ /* B5 */ { UD_Imov, O_CHr13b, O_Ib, O_NONE, P_rexb }, | |
+ /* B6 */ { UD_Imov, O_DHr14b, O_Ib, O_NONE, P_rexb }, | |
+ /* B7 */ { UD_Imov, O_BHr15b, O_Ib, O_NONE, P_rexb }, | |
+ /* B8 */ { UD_Imov, O_rAXr8, O_Iv, O_NONE, P_oso|P_rexw|P_rexb }, | |
+ /* B9 */ { UD_Imov, O_rCXr9, O_Iv, O_NONE, P_oso|P_rexw|P_rexb }, | |
+ /* BA */ { UD_Imov, O_rDXr10, O_Iv, O_NONE, P_oso|P_rexw|P_rexb }, | |
+ /* BB */ { UD_Imov, O_rBXr11, O_Iv, O_NONE, P_oso|P_rexw|P_rexb }, | |
+ /* BC */ { UD_Imov, O_rSPr12, O_Iv, O_NONE, P_oso|P_rexw|P_rexb }, | |
+ /* BD */ { UD_Imov, O_rBPr13, O_Iv, O_NONE, P_oso|P_rexw|P_rexb }, | |
+ /* BE */ { UD_Imov, O_rSIr14, O_Iv, O_NONE, P_oso|P_rexw|P_rexb }, | |
+ /* BF */ { UD_Imov, O_rDIr15, O_Iv, O_NONE, P_oso|P_rexw|P_rexb }, | |
+ /* C0 */ { UD_Igrp_reg, O_NONE, O_NONE, O_NONE, ITAB__1BYTE__OP_C0__REG }, | |
+ /* C1 */ { UD_Igrp_reg, O_NONE, O_NONE, O_NONE, ITAB__1BYTE__OP_C1__REG }, | |
+ /* C2 */ { UD_Iret, O_Iw, O_NONE, O_NONE, P_none }, | |
+ /* C3 */ { UD_Iret, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* C4 */ { UD_Iles, O_Gv, O_M, O_NONE, P_inv64|P_aso|P_oso }, | |
+ /* C5 */ { UD_Ilds, O_Gv, O_M, O_NONE, P_inv64|P_aso|P_oso }, | |
+ /* C6 */ { UD_Igrp_reg, O_NONE, O_NONE, O_NONE, ITAB__1BYTE__OP_C6__REG }, | |
+ /* C7 */ { UD_Igrp_reg, O_NONE, O_NONE, O_NONE, ITAB__1BYTE__OP_C7__REG }, | |
+ /* C8 */ { UD_Ienter, O_Iw, O_Ib, O_NONE, P_def64|P_depM|P_none }, | |
+ /* C9 */ { UD_Ileave, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* CA */ { UD_Iretf, O_Iw, O_NONE, O_NONE, P_none }, | |
+ /* CB */ { UD_Iretf, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* CC */ { UD_Iint3, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* CD */ { UD_Iint, O_Ib, O_NONE, O_NONE, P_none }, | |
+ /* CE */ { UD_Iinto, O_NONE, O_NONE, O_NONE, P_inv64|P_none }, | |
+ /* CF */ { UD_Igrp_osize, O_NONE, O_NONE, O_NONE, ITAB__1BYTE__OP_CF__OSIZE }, | |
+ /* D0 */ { UD_Igrp_reg, O_NONE, O_NONE, O_NONE, ITAB__1BYTE__OP_D0__REG }, | |
+ /* D1 */ { UD_Igrp_reg, O_NONE, O_NONE, O_NONE, ITAB__1BYTE__OP_D1__REG }, | |
+ /* D2 */ { UD_Igrp_reg, O_NONE, O_NONE, O_NONE, ITAB__1BYTE__OP_D2__REG }, | |
+ /* D3 */ { UD_Igrp_reg, O_NONE, O_NONE, O_NONE, ITAB__1BYTE__OP_D3__REG }, | |
+ /* D4 */ { UD_Iaam, O_Ib, O_NONE, O_NONE, P_inv64|P_none }, | |
+ /* D5 */ { UD_Iaad, O_Ib, O_NONE, O_NONE, P_inv64|P_none }, | |
+ /* D6 */ { UD_Isalc, O_NONE, O_NONE, O_NONE, P_inv64|P_none }, | |
+ /* D7 */ { UD_Ixlatb, O_NONE, O_NONE, O_NONE, P_rexw }, | |
+ /* D8 */ { UD_Igrp_mod, O_NONE, O_NONE, O_NONE, ITAB__1BYTE__OP_D8__MOD }, | |
+ /* D9 */ { UD_Igrp_mod, O_NONE, O_NONE, O_NONE, ITAB__1BYTE__OP_D9__MOD }, | |
+ /* DA */ { UD_Igrp_mod, O_NONE, O_NONE, O_NONE, ITAB__1BYTE__OP_DA__MOD }, | |
+ /* DB */ { UD_Igrp_mod, O_NONE, O_NONE, O_NONE, ITAB__1BYTE__OP_DB__MOD }, | |
+ /* DC */ { UD_Igrp_mod, O_NONE, O_NONE, O_NONE, ITAB__1BYTE__OP_DC__MOD }, | |
+ /* DD */ { UD_Igrp_mod, O_NONE, O_NONE, O_NONE, ITAB__1BYTE__OP_DD__MOD }, | |
+ /* DE */ { UD_Igrp_mod, O_NONE, O_NONE, O_NONE, ITAB__1BYTE__OP_DE__MOD }, | |
+ /* DF */ { UD_Igrp_mod, O_NONE, O_NONE, O_NONE, ITAB__1BYTE__OP_DF__MOD }, | |
+ /* E0 */ { UD_Iloopnz, O_Jb, O_NONE, O_NONE, P_none }, | |
+ /* E1 */ { UD_Iloope, O_Jb, O_NONE, O_NONE, P_none }, | |
+ /* E2 */ { UD_Iloop, O_Jb, O_NONE, O_NONE, P_none }, | |
+ /* E3 */ { UD_Igrp_asize, O_NONE, O_NONE, O_NONE, ITAB__1BYTE__OP_E3__ASIZE }, | |
+ /* E4 */ { UD_Iin, O_AL, O_Ib, O_NONE, P_none }, | |
+ /* E5 */ { UD_Iin, O_eAX, O_Ib, O_NONE, P_oso }, | |
+ /* E6 */ { UD_Iout, O_Ib, O_AL, O_NONE, P_none }, | |
+ /* E7 */ { UD_Iout, O_Ib, O_eAX, O_NONE, P_oso }, | |
+ /* E8 */ { UD_Icall, O_Jz, O_NONE, O_NONE, P_def64|P_oso }, | |
+ /* E9 */ { UD_Ijmp, O_Jz, O_NONE, O_NONE, P_def64|P_depM|P_oso }, | |
+ /* EA */ { UD_Ijmp, O_Ap, O_NONE, O_NONE, P_inv64|P_none }, | |
+ /* EB */ { UD_Ijmp, O_Jb, O_NONE, O_NONE, P_none }, | |
+ /* EC */ { UD_Iin, O_AL, O_DX, O_NONE, P_none }, | |
+ /* ED */ { UD_Iin, O_eAX, O_DX, O_NONE, P_oso }, | |
+ /* EE */ { UD_Iout, O_DX, O_AL, O_NONE, P_none }, | |
+ /* EF */ { UD_Iout, O_DX, O_eAX, O_NONE, P_oso }, | |
+ /* F0 */ { UD_Ilock, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* F1 */ { UD_Iint1, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* F2 */ { UD_Irepne, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* F3 */ { UD_Irep, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* F4 */ { UD_Ihlt, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* F5 */ { UD_Icmc, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* F6 */ { UD_Igrp_reg, O_NONE, O_NONE, O_NONE, ITAB__1BYTE__OP_F6__REG }, | |
+ /* F7 */ { UD_Igrp_reg, O_NONE, O_NONE, O_NONE, ITAB__1BYTE__OP_F7__REG }, | |
+ /* F8 */ { UD_Iclc, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* F9 */ { UD_Istc, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* FA */ { UD_Icli, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* FB */ { UD_Isti, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* FC */ { UD_Icld, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* FD */ { UD_Istd, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* FE */ { UD_Igrp_reg, O_NONE, O_NONE, O_NONE, ITAB__1BYTE__OP_FE__REG }, | |
+ /* FF */ { UD_Igrp_reg, O_NONE, O_NONE, O_NONE, ITAB__1BYTE__OP_FF__REG }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__1byte__op_60__osize[3] = { | |
+ /* 00 */ { UD_Ipusha, O_NONE, O_NONE, O_NONE, P_inv64|P_oso }, | |
+ /* 01 */ { UD_Ipushad, O_NONE, O_NONE, O_NONE, P_inv64|P_oso }, | |
+ /* 02 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__1byte__op_61__osize[3] = { | |
+ /* 00 */ { UD_Ipopa, O_NONE, O_NONE, O_NONE, P_inv64|P_oso }, | |
+ /* 01 */ { UD_Ipopad, O_NONE, O_NONE, O_NONE, P_inv64|P_oso }, | |
+ /* 02 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__1byte__op_63__mode[3] = { | |
+ /* 00 */ { UD_Iarpl, O_Ew, O_Gw, O_NONE, P_inv64|P_aso }, | |
+ /* 01 */ { UD_Iarpl, O_Ew, O_Gw, O_NONE, P_inv64|P_aso }, | |
+ /* 02 */ { UD_Imovsxd, O_Gv, O_Ed, O_NONE, P_c2|P_aso|P_oso|P_rexw|P_rexx|P_rexr|P_rexb }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__1byte__op_6d__osize[3] = { | |
+ /* 00 */ { UD_Iinsw, O_NONE, O_NONE, O_NONE, P_oso }, | |
+ /* 01 */ { UD_Iinsd, O_NONE, O_NONE, O_NONE, P_oso }, | |
+ /* 02 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__1byte__op_6f__osize[3] = { | |
+ /* 00 */ { UD_Ioutsw, O_NONE, O_NONE, O_NONE, P_oso }, | |
+ /* 01 */ { UD_Ioutsd, O_NONE, O_NONE, O_NONE, P_oso }, | |
+ /* 02 */ { UD_Ioutsq, O_NONE, O_NONE, O_NONE, P_oso }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__1byte__op_80__reg[8] = { | |
+ /* 00 */ { UD_Iadd, O_Eb, O_Ib, O_NONE, P_c1|P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 01 */ { UD_Ior, O_Eb, O_Ib, O_NONE, P_c1|P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 02 */ { UD_Iadc, O_Eb, O_Ib, O_NONE, P_c1|P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 03 */ { UD_Isbb, O_Eb, O_Ib, O_NONE, P_c1|P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 04 */ { UD_Iand, O_Eb, O_Ib, O_NONE, P_c1|P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 05 */ { UD_Isub, O_Eb, O_Ib, O_NONE, P_c1|P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 06 */ { UD_Ixor, O_Eb, O_Ib, O_NONE, P_c1|P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 07 */ { UD_Icmp, O_Eb, O_Ib, O_NONE, P_c1|P_aso|P_rexr|P_rexx|P_rexb }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__1byte__op_81__reg[8] = { | |
+ /* 00 */ { UD_Iadd, O_Ev, O_Iz, O_NONE, P_c1|P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 01 */ { UD_Ior, O_Ev, O_Iz, O_NONE, P_c1|P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 02 */ { UD_Iadc, O_Ev, O_Iz, O_NONE, P_c1|P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 03 */ { UD_Isbb, O_Ev, O_Iz, O_NONE, P_c1|P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 04 */ { UD_Iand, O_Ev, O_Iz, O_NONE, P_c1|P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 05 */ { UD_Isub, O_Ev, O_Iz, O_NONE, P_c1|P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 06 */ { UD_Ixor, O_Ev, O_Iz, O_NONE, P_c1|P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 07 */ { UD_Icmp, O_Ev, O_Iz, O_NONE, P_c1|P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__1byte__op_82__reg[8] = { | |
+ /* 00 */ { UD_Iadd, O_Eb, O_Ib, O_NONE, P_c1|P_inv64|P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 01 */ { UD_Ior, O_Eb, O_Ib, O_NONE, P_c1|P_inv64|P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 02 */ { UD_Iadc, O_Eb, O_Ib, O_NONE, P_c1|P_inv64|P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 03 */ { UD_Isbb, O_Eb, O_Ib, O_NONE, P_c1|P_inv64|P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 04 */ { UD_Iand, O_Eb, O_Ib, O_NONE, P_c1|P_inv64|P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 05 */ { UD_Isub, O_Eb, O_Ib, O_NONE, P_c1|P_inv64|P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 06 */ { UD_Ixor, O_Eb, O_Ib, O_NONE, P_c1|P_inv64|P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 07 */ { UD_Icmp, O_Eb, O_Ib, O_NONE, P_c1|P_inv64|P_aso|P_rexr|P_rexx|P_rexb }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__1byte__op_83__reg[8] = { | |
+ /* 00 */ { UD_Iadd, O_Ev, O_Ib, O_NONE, P_c1|P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 01 */ { UD_Ior, O_Ev, O_Ib, O_NONE, P_c1|P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 02 */ { UD_Iadc, O_Ev, O_Ib, O_NONE, P_c1|P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 03 */ { UD_Isbb, O_Ev, O_Ib, O_NONE, P_c1|P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 04 */ { UD_Iand, O_Ev, O_Ib, O_NONE, P_c1|P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 05 */ { UD_Isub, O_Ev, O_Ib, O_NONE, P_c1|P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 06 */ { UD_Ixor, O_Ev, O_Ib, O_NONE, P_c1|P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 07 */ { UD_Icmp, O_Ev, O_Ib, O_NONE, P_c1|P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__1byte__op_8f__reg[8] = { | |
+ /* 00 */ { UD_Ipop, O_Ev, O_NONE, O_NONE, P_c1|P_def64|P_depM|P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 01 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 02 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 03 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 04 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 05 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 06 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 07 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__1byte__op_98__osize[3] = { | |
+ /* 00 */ { UD_Icbw, O_NONE, O_NONE, O_NONE, P_oso|P_rexw }, | |
+ /* 01 */ { UD_Icwde, O_NONE, O_NONE, O_NONE, P_oso|P_rexw }, | |
+ /* 02 */ { UD_Icdqe, O_NONE, O_NONE, O_NONE, P_oso|P_rexw }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__1byte__op_99__osize[3] = { | |
+ /* 00 */ { UD_Icwd, O_NONE, O_NONE, O_NONE, P_oso|P_rexw }, | |
+ /* 01 */ { UD_Icdq, O_NONE, O_NONE, O_NONE, P_oso|P_rexw }, | |
+ /* 02 */ { UD_Icqo, O_NONE, O_NONE, O_NONE, P_oso|P_rexw }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__1byte__op_9c__mode[3] = { | |
+ /* 00 */ { UD_Igrp_osize, O_NONE, O_NONE, O_NONE, ITAB__1BYTE__OP_9C__MODE__OP_00__OSIZE }, | |
+ /* 01 */ { UD_Igrp_osize, O_NONE, O_NONE, O_NONE, ITAB__1BYTE__OP_9C__MODE__OP_01__OSIZE }, | |
+ /* 02 */ { UD_Ipushfq, O_NONE, O_NONE, O_NONE, P_def64|P_oso|P_rexw }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__1byte__op_9c__mode__op_00__osize[3] = { | |
+ /* 00 */ { UD_Ipushfw, O_NONE, O_NONE, O_NONE, P_def64|P_oso }, | |
+ /* 01 */ { UD_Ipushfd, O_NONE, O_NONE, O_NONE, P_def64|P_oso }, | |
+ /* 02 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__1byte__op_9c__mode__op_01__osize[3] = { | |
+ /* 00 */ { UD_Ipushfw, O_NONE, O_NONE, O_NONE, P_def64|P_oso }, | |
+ /* 01 */ { UD_Ipushfd, O_NONE, O_NONE, O_NONE, P_def64|P_oso }, | |
+ /* 02 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__1byte__op_9d__mode[3] = { | |
+ /* 00 */ { UD_Igrp_osize, O_NONE, O_NONE, O_NONE, ITAB__1BYTE__OP_9D__MODE__OP_00__OSIZE }, | |
+ /* 01 */ { UD_Igrp_osize, O_NONE, O_NONE, O_NONE, ITAB__1BYTE__OP_9D__MODE__OP_01__OSIZE }, | |
+ /* 02 */ { UD_Ipopfq, O_NONE, O_NONE, O_NONE, P_def64|P_depM|P_oso }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__1byte__op_9d__mode__op_00__osize[3] = { | |
+ /* 00 */ { UD_Ipopfw, O_NONE, O_NONE, O_NONE, P_def64|P_depM|P_oso }, | |
+ /* 01 */ { UD_Ipopfd, O_NONE, O_NONE, O_NONE, P_def64|P_depM|P_oso }, | |
+ /* 02 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__1byte__op_9d__mode__op_01__osize[3] = { | |
+ /* 00 */ { UD_Ipopfw, O_NONE, O_NONE, O_NONE, P_def64|P_depM|P_oso }, | |
+ /* 01 */ { UD_Ipopfd, O_NONE, O_NONE, O_NONE, P_def64|P_depM|P_oso }, | |
+ /* 02 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__1byte__op_a5__osize[3] = { | |
+ /* 00 */ { UD_Imovsw, O_NONE, O_NONE, O_NONE, P_ImpAddr|P_oso|P_rexw }, | |
+ /* 01 */ { UD_Imovsd, O_NONE, O_NONE, O_NONE, P_ImpAddr|P_oso|P_rexw }, | |
+ /* 02 */ { UD_Imovsq, O_NONE, O_NONE, O_NONE, P_ImpAddr|P_oso|P_rexw }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__1byte__op_a7__osize[3] = { | |
+ /* 00 */ { UD_Icmpsw, O_NONE, O_NONE, O_NONE, P_oso|P_rexw }, | |
+ /* 01 */ { UD_Icmpsd, O_NONE, O_NONE, O_NONE, P_oso|P_rexw }, | |
+ /* 02 */ { UD_Icmpsq, O_NONE, O_NONE, O_NONE, P_oso|P_rexw }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__1byte__op_ab__osize[3] = { | |
+ /* 00 */ { UD_Istosw, O_NONE, O_NONE, O_NONE, P_ImpAddr|P_oso|P_rexw }, | |
+ /* 01 */ { UD_Istosd, O_NONE, O_NONE, O_NONE, P_ImpAddr|P_oso|P_rexw }, | |
+ /* 02 */ { UD_Istosq, O_NONE, O_NONE, O_NONE, P_ImpAddr|P_oso|P_rexw }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__1byte__op_ad__osize[3] = { | |
+ /* 00 */ { UD_Ilodsw, O_NONE, O_NONE, O_NONE, P_ImpAddr|P_oso|P_rexw }, | |
+ /* 01 */ { UD_Ilodsd, O_NONE, O_NONE, O_NONE, P_ImpAddr|P_oso|P_rexw }, | |
+ /* 02 */ { UD_Ilodsq, O_NONE, O_NONE, O_NONE, P_ImpAddr|P_oso|P_rexw }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__1byte__op_ae__mod[2] = { | |
+ /* 00 */ { UD_Igrp_reg, O_NONE, O_NONE, O_NONE, ITAB__1BYTE__OP_AE__MOD__OP_00__REG }, | |
+ /* 01 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__1byte__op_ae__mod__op_00__reg[8] = { | |
+ /* 00 */ { UD_Ifxsave, O_M, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 01 */ { UD_Ifxrstor, O_M, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 02 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 03 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 04 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 05 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 06 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 07 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__1byte__op_af__osize[3] = { | |
+ /* 00 */ { UD_Iscasw, O_NONE, O_NONE, O_NONE, P_oso|P_rexw }, | |
+ /* 01 */ { UD_Iscasd, O_NONE, O_NONE, O_NONE, P_oso|P_rexw }, | |
+ /* 02 */ { UD_Iscasq, O_NONE, O_NONE, O_NONE, P_oso|P_rexw }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__1byte__op_c0__reg[8] = { | |
+ /* 00 */ { UD_Irol, O_Eb, O_Ib, O_NONE, P_c1|P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 01 */ { UD_Iror, O_Eb, O_Ib, O_NONE, P_c1|P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 02 */ { UD_Ircl, O_Eb, O_Ib, O_NONE, P_c1|P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 03 */ { UD_Ircr, O_Eb, O_Ib, O_NONE, P_c1|P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 04 */ { UD_Ishl, O_Eb, O_Ib, O_NONE, P_c1|P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 05 */ { UD_Ishr, O_Eb, O_Ib, O_NONE, P_c1|P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 06 */ { UD_Ishl, O_Eb, O_Ib, O_NONE, P_c1|P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 07 */ { UD_Isar, O_Eb, O_Ib, O_NONE, P_c1|P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__1byte__op_c1__reg[8] = { | |
+ /* 00 */ { UD_Irol, O_Ev, O_Ib, O_NONE, P_c1|P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 01 */ { UD_Iror, O_Ev, O_Ib, O_NONE, P_c1|P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 02 */ { UD_Ircl, O_Ev, O_Ib, O_NONE, P_c1|P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 03 */ { UD_Ircr, O_Ev, O_Ib, O_NONE, P_c1|P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 04 */ { UD_Ishl, O_Ev, O_Ib, O_NONE, P_c1|P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 05 */ { UD_Ishr, O_Ev, O_Ib, O_NONE, P_c1|P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 06 */ { UD_Ishl, O_Ev, O_Ib, O_NONE, P_c1|P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 07 */ { UD_Isar, O_Ev, O_Ib, O_NONE, P_c1|P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__1byte__op_c6__reg[8] = { | |
+ /* 00 */ { UD_Imov, O_Eb, O_Ib, O_NONE, P_c1|P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 01 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 02 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 03 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 04 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 05 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 06 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 07 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__1byte__op_c7__reg[8] = { | |
+ /* 00 */ { UD_Imov, O_Ev, O_Iz, O_NONE, P_c1|P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 01 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 02 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 03 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 04 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 05 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 06 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 07 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__1byte__op_cf__osize[3] = { | |
+ /* 00 */ { UD_Iiretw, O_NONE, O_NONE, O_NONE, P_oso|P_rexw }, | |
+ /* 01 */ { UD_Iiretd, O_NONE, O_NONE, O_NONE, P_oso|P_rexw }, | |
+ /* 02 */ { UD_Iiretq, O_NONE, O_NONE, O_NONE, P_oso|P_rexw }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__1byte__op_d0__reg[8] = { | |
+ /* 00 */ { UD_Irol, O_Eb, O_I1, O_NONE, P_c1|P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 01 */ { UD_Iror, O_Eb, O_I1, O_NONE, P_c1|P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 02 */ { UD_Ircl, O_Eb, O_I1, O_NONE, P_c1|P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 03 */ { UD_Ircr, O_Eb, O_I1, O_NONE, P_c1|P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 04 */ { UD_Ishl, O_Eb, O_I1, O_NONE, P_c1|P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 05 */ { UD_Ishr, O_Eb, O_I1, O_NONE, P_c1|P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 06 */ { UD_Ishl, O_Eb, O_I1, O_NONE, P_c1|P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 07 */ { UD_Isar, O_Eb, O_I1, O_NONE, P_c1|P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__1byte__op_d1__reg[8] = { | |
+ /* 00 */ { UD_Irol, O_Ev, O_I1, O_NONE, P_c1|P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 01 */ { UD_Iror, O_Ev, O_I1, O_NONE, P_c1|P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 02 */ { UD_Ircl, O_Ev, O_I1, O_NONE, P_c1|P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 03 */ { UD_Ircr, O_Ev, O_I1, O_NONE, P_c1|P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 04 */ { UD_Ishl, O_Ev, O_I1, O_NONE, P_c1|P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 05 */ { UD_Ishr, O_Ev, O_I1, O_NONE, P_c1|P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 06 */ { UD_Ishl, O_Ev, O_I1, O_NONE, P_c1|P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 07 */ { UD_Isar, O_Ev, O_I1, O_NONE, P_c1|P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__1byte__op_d2__reg[8] = { | |
+ /* 00 */ { UD_Irol, O_Eb, O_CL, O_NONE, P_c1|P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 01 */ { UD_Iror, O_Eb, O_CL, O_NONE, P_c1|P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 02 */ { UD_Ircl, O_Eb, O_CL, O_NONE, P_c1|P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 03 */ { UD_Ircr, O_Eb, O_CL, O_NONE, P_c1|P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 04 */ { UD_Ishl, O_Eb, O_CL, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 05 */ { UD_Ishr, O_Eb, O_CL, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 06 */ { UD_Ishl, O_Eb, O_CL, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 07 */ { UD_Isar, O_Eb, O_CL, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__1byte__op_d3__reg[8] = { | |
+ /* 00 */ { UD_Irol, O_Ev, O_CL, O_NONE, P_c1|P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 01 */ { UD_Iror, O_Ev, O_CL, O_NONE, P_c1|P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 02 */ { UD_Ircl, O_Ev, O_CL, O_NONE, P_c1|P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 03 */ { UD_Ircr, O_Ev, O_CL, O_NONE, P_c1|P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 04 */ { UD_Ishl, O_Ev, O_CL, O_NONE, P_c1|P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 05 */ { UD_Ishr, O_Ev, O_CL, O_NONE, P_c1|P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 06 */ { UD_Ishl, O_Ev, O_CL, O_NONE, P_c1|P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 07 */ { UD_Isar, O_Ev, O_CL, O_NONE, P_c1|P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__1byte__op_d8__mod[2] = { | |
+ /* 00 */ { UD_Igrp_reg, O_NONE, O_NONE, O_NONE, ITAB__1BYTE__OP_D8__MOD__OP_00__REG }, | |
+ /* 01 */ { UD_Igrp_x87, O_NONE, O_NONE, O_NONE, ITAB__1BYTE__OP_D8__MOD__OP_01__X87 }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__1byte__op_d8__mod__op_00__reg[8] = { | |
+ /* 00 */ { UD_Ifadd, O_Md, O_NONE, O_NONE, P_c1|P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 01 */ { UD_Ifmul, O_Md, O_NONE, O_NONE, P_c1|P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 02 */ { UD_Ifcom, O_Md, O_NONE, O_NONE, P_c1|P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 03 */ { UD_Ifcomp, O_Md, O_NONE, O_NONE, P_c1|P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 04 */ { UD_Ifsub, O_Md, O_NONE, O_NONE, P_c1|P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 05 */ { UD_Ifsubr, O_Md, O_NONE, O_NONE, P_c1|P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 06 */ { UD_Ifdiv, O_Md, O_NONE, O_NONE, P_c1|P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 07 */ { UD_Ifdivr, O_Md, O_NONE, O_NONE, P_c1|P_aso|P_rexr|P_rexx|P_rexb }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__1byte__op_d8__mod__op_01__x87[64] = { | |
+ /* 00 */ { UD_Ifadd, O_ST0, O_ST0, O_NONE, P_none }, | |
+ /* 01 */ { UD_Ifadd, O_ST0, O_ST1, O_NONE, P_none }, | |
+ /* 02 */ { UD_Ifadd, O_ST0, O_ST2, O_NONE, P_none }, | |
+ /* 03 */ { UD_Ifadd, O_ST0, O_ST3, O_NONE, P_none }, | |
+ /* 04 */ { UD_Ifadd, O_ST0, O_ST4, O_NONE, P_none }, | |
+ /* 05 */ { UD_Ifadd, O_ST0, O_ST5, O_NONE, P_none }, | |
+ /* 06 */ { UD_Ifadd, O_ST0, O_ST6, O_NONE, P_none }, | |
+ /* 07 */ { UD_Ifadd, O_ST0, O_ST7, O_NONE, P_none }, | |
+ /* 08 */ { UD_Ifmul, O_ST0, O_ST0, O_NONE, P_none }, | |
+ /* 09 */ { UD_Ifmul, O_ST0, O_ST1, O_NONE, P_none }, | |
+ /* 0A */ { UD_Ifmul, O_ST0, O_ST2, O_NONE, P_none }, | |
+ /* 0B */ { UD_Ifmul, O_ST0, O_ST3, O_NONE, P_none }, | |
+ /* 0C */ { UD_Ifmul, O_ST0, O_ST4, O_NONE, P_none }, | |
+ /* 0D */ { UD_Ifmul, O_ST0, O_ST5, O_NONE, P_none }, | |
+ /* 0E */ { UD_Ifmul, O_ST0, O_ST6, O_NONE, P_none }, | |
+ /* 0F */ { UD_Ifmul, O_ST0, O_ST7, O_NONE, P_none }, | |
+ /* 10 */ { UD_Ifcom, O_ST0, O_ST0, O_NONE, P_none }, | |
+ /* 11 */ { UD_Ifcom, O_ST0, O_ST1, O_NONE, P_none }, | |
+ /* 12 */ { UD_Ifcom, O_ST0, O_ST2, O_NONE, P_none }, | |
+ /* 13 */ { UD_Ifcom, O_ST0, O_ST3, O_NONE, P_none }, | |
+ /* 14 */ { UD_Ifcom, O_ST0, O_ST4, O_NONE, P_none }, | |
+ /* 15 */ { UD_Ifcom, O_ST0, O_ST5, O_NONE, P_none }, | |
+ /* 16 */ { UD_Ifcom, O_ST0, O_ST6, O_NONE, P_none }, | |
+ /* 17 */ { UD_Ifcom, O_ST0, O_ST7, O_NONE, P_none }, | |
+ /* 18 */ { UD_Ifcomp, O_ST0, O_ST0, O_NONE, P_none }, | |
+ /* 19 */ { UD_Ifcomp, O_ST0, O_ST1, O_NONE, P_none }, | |
+ /* 1A */ { UD_Ifcomp, O_ST0, O_ST2, O_NONE, P_none }, | |
+ /* 1B */ { UD_Ifcomp, O_ST0, O_ST3, O_NONE, P_none }, | |
+ /* 1C */ { UD_Ifcomp, O_ST0, O_ST4, O_NONE, P_none }, | |
+ /* 1D */ { UD_Ifcomp, O_ST0, O_ST5, O_NONE, P_none }, | |
+ /* 1E */ { UD_Ifcomp, O_ST0, O_ST6, O_NONE, P_none }, | |
+ /* 1F */ { UD_Ifcomp, O_ST0, O_ST7, O_NONE, P_none }, | |
+ /* 20 */ { UD_Ifsub, O_ST0, O_ST0, O_NONE, P_none }, | |
+ /* 21 */ { UD_Ifsub, O_ST0, O_ST1, O_NONE, P_none }, | |
+ /* 22 */ { UD_Ifsub, O_ST0, O_ST2, O_NONE, P_none }, | |
+ /* 23 */ { UD_Ifsub, O_ST0, O_ST3, O_NONE, P_none }, | |
+ /* 24 */ { UD_Ifsub, O_ST0, O_ST4, O_NONE, P_none }, | |
+ /* 25 */ { UD_Ifsub, O_ST0, O_ST5, O_NONE, P_none }, | |
+ /* 26 */ { UD_Ifsub, O_ST0, O_ST6, O_NONE, P_none }, | |
+ /* 27 */ { UD_Ifsub, O_ST0, O_ST7, O_NONE, P_none }, | |
+ /* 28 */ { UD_Ifsubr, O_ST0, O_ST0, O_NONE, P_none }, | |
+ /* 29 */ { UD_Ifsubr, O_ST0, O_ST1, O_NONE, P_none }, | |
+ /* 2A */ { UD_Ifsubr, O_ST0, O_ST2, O_NONE, P_none }, | |
+ /* 2B */ { UD_Ifsubr, O_ST0, O_ST3, O_NONE, P_none }, | |
+ /* 2C */ { UD_Ifsubr, O_ST0, O_ST4, O_NONE, P_none }, | |
+ /* 2D */ { UD_Ifsubr, O_ST0, O_ST5, O_NONE, P_none }, | |
+ /* 2E */ { UD_Ifsubr, O_ST0, O_ST6, O_NONE, P_none }, | |
+ /* 2F */ { UD_Ifsubr, O_ST0, O_ST7, O_NONE, P_none }, | |
+ /* 30 */ { UD_Ifdiv, O_ST0, O_ST0, O_NONE, P_none }, | |
+ /* 31 */ { UD_Ifdiv, O_ST0, O_ST1, O_NONE, P_none }, | |
+ /* 32 */ { UD_Ifdiv, O_ST0, O_ST2, O_NONE, P_none }, | |
+ /* 33 */ { UD_Ifdiv, O_ST0, O_ST3, O_NONE, P_none }, | |
+ /* 34 */ { UD_Ifdiv, O_ST0, O_ST4, O_NONE, P_none }, | |
+ /* 35 */ { UD_Ifdiv, O_ST0, O_ST5, O_NONE, P_none }, | |
+ /* 36 */ { UD_Ifdiv, O_ST0, O_ST6, O_NONE, P_none }, | |
+ /* 37 */ { UD_Ifdiv, O_ST0, O_ST7, O_NONE, P_none }, | |
+ /* 38 */ { UD_Ifdivr, O_ST0, O_ST0, O_NONE, P_none }, | |
+ /* 39 */ { UD_Ifdivr, O_ST0, O_ST1, O_NONE, P_none }, | |
+ /* 3A */ { UD_Ifdivr, O_ST0, O_ST2, O_NONE, P_none }, | |
+ /* 3B */ { UD_Ifdivr, O_ST0, O_ST3, O_NONE, P_none }, | |
+ /* 3C */ { UD_Ifdivr, O_ST0, O_ST4, O_NONE, P_none }, | |
+ /* 3D */ { UD_Ifdivr, O_ST0, O_ST5, O_NONE, P_none }, | |
+ /* 3E */ { UD_Ifdivr, O_ST0, O_ST6, O_NONE, P_none }, | |
+ /* 3F */ { UD_Ifdivr, O_ST0, O_ST7, O_NONE, P_none }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__1byte__op_d9__mod[2] = { | |
+ /* 00 */ { UD_Igrp_reg, O_NONE, O_NONE, O_NONE, ITAB__1BYTE__OP_D9__MOD__OP_00__REG }, | |
+ /* 01 */ { UD_Igrp_x87, O_NONE, O_NONE, O_NONE, ITAB__1BYTE__OP_D9__MOD__OP_01__X87 }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__1byte__op_d9__mod__op_00__reg[8] = { | |
+ /* 00 */ { UD_Ifld, O_Md, O_NONE, O_NONE, P_c1|P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 01 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 02 */ { UD_Ifst, O_Md, O_NONE, O_NONE, P_c1|P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 03 */ { UD_Ifstp, O_Md, O_NONE, O_NONE, P_c1|P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 04 */ { UD_Ifldenv, O_M, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 05 */ { UD_Ifldcw, O_Mw, O_NONE, O_NONE, P_c1|P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 06 */ { UD_Ifnstenv, O_M, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 07 */ { UD_Ifnstcw, O_Mw, O_NONE, O_NONE, P_c1|P_aso|P_rexr|P_rexx|P_rexb }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__1byte__op_d9__mod__op_01__x87[64] = { | |
+ /* 00 */ { UD_Ifld, O_ST0, O_ST0, O_NONE, P_none }, | |
+ /* 01 */ { UD_Ifld, O_ST0, O_ST1, O_NONE, P_none }, | |
+ /* 02 */ { UD_Ifld, O_ST0, O_ST2, O_NONE, P_none }, | |
+ /* 03 */ { UD_Ifld, O_ST0, O_ST3, O_NONE, P_none }, | |
+ /* 04 */ { UD_Ifld, O_ST0, O_ST4, O_NONE, P_none }, | |
+ /* 05 */ { UD_Ifld, O_ST0, O_ST5, O_NONE, P_none }, | |
+ /* 06 */ { UD_Ifld, O_ST0, O_ST6, O_NONE, P_none }, | |
+ /* 07 */ { UD_Ifld, O_ST0, O_ST7, O_NONE, P_none }, | |
+ /* 08 */ { UD_Ifxch, O_ST0, O_ST0, O_NONE, P_none }, | |
+ /* 09 */ { UD_Ifxch, O_ST0, O_ST1, O_NONE, P_none }, | |
+ /* 0A */ { UD_Ifxch, O_ST0, O_ST2, O_NONE, P_none }, | |
+ /* 0B */ { UD_Ifxch, O_ST0, O_ST3, O_NONE, P_none }, | |
+ /* 0C */ { UD_Ifxch, O_ST0, O_ST4, O_NONE, P_none }, | |
+ /* 0D */ { UD_Ifxch, O_ST0, O_ST5, O_NONE, P_none }, | |
+ /* 0E */ { UD_Ifxch, O_ST0, O_ST6, O_NONE, P_none }, | |
+ /* 0F */ { UD_Ifxch, O_ST0, O_ST7, O_NONE, P_none }, | |
+ /* 10 */ { UD_Ifnop, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 11 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 12 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 13 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 14 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 15 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 16 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 17 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 18 */ { UD_Ifstp1, O_ST0, O_NONE, O_NONE, P_none }, | |
+ /* 19 */ { UD_Ifstp1, O_ST1, O_NONE, O_NONE, P_none }, | |
+ /* 1A */ { UD_Ifstp1, O_ST2, O_NONE, O_NONE, P_none }, | |
+ /* 1B */ { UD_Ifstp1, O_ST3, O_NONE, O_NONE, P_none }, | |
+ /* 1C */ { UD_Ifstp1, O_ST4, O_NONE, O_NONE, P_none }, | |
+ /* 1D */ { UD_Ifstp1, O_ST5, O_NONE, O_NONE, P_none }, | |
+ /* 1E */ { UD_Ifstp1, O_ST6, O_NONE, O_NONE, P_none }, | |
+ /* 1F */ { UD_Ifstp1, O_ST7, O_NONE, O_NONE, P_none }, | |
+ /* 20 */ { UD_Ifchs, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 21 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 22 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 23 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 24 */ { UD_Iftst, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 25 */ { UD_Ifxam, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 26 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 27 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 28 */ { UD_Ifld1, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 29 */ { UD_Ifldl2t, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 2A */ { UD_Ifldl2e, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 2B */ { UD_Ifldlpi, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 2C */ { UD_Ifldlg2, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 2D */ { UD_Ifldln2, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 2E */ { UD_Ifldz, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 2F */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 30 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 31 */ { UD_Ifyl2x, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 32 */ { UD_Ifptan, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 33 */ { UD_Ifpatan, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 34 */ { UD_Ifpxtract, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 35 */ { UD_Ifprem1, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 36 */ { UD_Ifdecstp, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 37 */ { UD_Ifncstp, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 38 */ { UD_Ifprem, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 39 */ { UD_Ifyl2xp1, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 3A */ { UD_Ifsqrt, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 3B */ { UD_Ifsincos, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 3C */ { UD_Ifrndint, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 3D */ { UD_Ifscale, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 3E */ { UD_Ifsin, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 3F */ { UD_Ifcos, O_NONE, O_NONE, O_NONE, P_none }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__1byte__op_da__mod[2] = { | |
+ /* 00 */ { UD_Igrp_reg, O_NONE, O_NONE, O_NONE, ITAB__1BYTE__OP_DA__MOD__OP_00__REG }, | |
+ /* 01 */ { UD_Igrp_x87, O_NONE, O_NONE, O_NONE, ITAB__1BYTE__OP_DA__MOD__OP_01__X87 }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__1byte__op_da__mod__op_00__reg[8] = { | |
+ /* 00 */ { UD_Ifiadd, O_Md, O_NONE, O_NONE, P_c1|P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 01 */ { UD_Ifimul, O_Md, O_NONE, O_NONE, P_c1|P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 02 */ { UD_Ificom, O_Md, O_NONE, O_NONE, P_c1|P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 03 */ { UD_Ificomp, O_Md, O_NONE, O_NONE, P_c1|P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 04 */ { UD_Ifisub, O_Md, O_NONE, O_NONE, P_c1|P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 05 */ { UD_Ifisubr, O_Md, O_NONE, O_NONE, P_c1|P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 06 */ { UD_Ifidiv, O_Md, O_NONE, O_NONE, P_c1|P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 07 */ { UD_Ifidivr, O_Md, O_NONE, O_NONE, P_c1|P_aso|P_rexr|P_rexx|P_rexb }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__1byte__op_da__mod__op_01__x87[64] = { | |
+ /* 00 */ { UD_Ifcmovb, O_ST0, O_ST0, O_NONE, P_none }, | |
+ /* 01 */ { UD_Ifcmovb, O_ST0, O_ST1, O_NONE, P_none }, | |
+ /* 02 */ { UD_Ifcmovb, O_ST0, O_ST2, O_NONE, P_none }, | |
+ /* 03 */ { UD_Ifcmovb, O_ST0, O_ST3, O_NONE, P_none }, | |
+ /* 04 */ { UD_Ifcmovb, O_ST0, O_ST4, O_NONE, P_none }, | |
+ /* 05 */ { UD_Ifcmovb, O_ST0, O_ST5, O_NONE, P_none }, | |
+ /* 06 */ { UD_Ifcmovb, O_ST0, O_ST6, O_NONE, P_none }, | |
+ /* 07 */ { UD_Ifcmovb, O_ST0, O_ST7, O_NONE, P_none }, | |
+ /* 08 */ { UD_Ifcmove, O_ST0, O_ST0, O_NONE, P_none }, | |
+ /* 09 */ { UD_Ifcmove, O_ST0, O_ST1, O_NONE, P_none }, | |
+ /* 0A */ { UD_Ifcmove, O_ST0, O_ST2, O_NONE, P_none }, | |
+ /* 0B */ { UD_Ifcmove, O_ST0, O_ST3, O_NONE, P_none }, | |
+ /* 0C */ { UD_Ifcmove, O_ST0, O_ST4, O_NONE, P_none }, | |
+ /* 0D */ { UD_Ifcmove, O_ST0, O_ST5, O_NONE, P_none }, | |
+ /* 0E */ { UD_Ifcmove, O_ST0, O_ST6, O_NONE, P_none }, | |
+ /* 0F */ { UD_Ifcmove, O_ST0, O_ST7, O_NONE, P_none }, | |
+ /* 10 */ { UD_Ifcmovbe, O_ST0, O_ST0, O_NONE, P_none }, | |
+ /* 11 */ { UD_Ifcmovbe, O_ST0, O_ST1, O_NONE, P_none }, | |
+ /* 12 */ { UD_Ifcmovbe, O_ST0, O_ST2, O_NONE, P_none }, | |
+ /* 13 */ { UD_Ifcmovbe, O_ST0, O_ST3, O_NONE, P_none }, | |
+ /* 14 */ { UD_Ifcmovbe, O_ST0, O_ST4, O_NONE, P_none }, | |
+ /* 15 */ { UD_Ifcmovbe, O_ST0, O_ST5, O_NONE, P_none }, | |
+ /* 16 */ { UD_Ifcmovbe, O_ST0, O_ST6, O_NONE, P_none }, | |
+ /* 17 */ { UD_Ifcmovbe, O_ST0, O_ST7, O_NONE, P_none }, | |
+ /* 18 */ { UD_Ifcmovu, O_ST0, O_ST0, O_NONE, P_none }, | |
+ /* 19 */ { UD_Ifcmovu, O_ST0, O_ST1, O_NONE, P_none }, | |
+ /* 1A */ { UD_Ifcmovu, O_ST0, O_ST2, O_NONE, P_none }, | |
+ /* 1B */ { UD_Ifcmovu, O_ST0, O_ST3, O_NONE, P_none }, | |
+ /* 1C */ { UD_Ifcmovu, O_ST0, O_ST4, O_NONE, P_none }, | |
+ /* 1D */ { UD_Ifcmovu, O_ST0, O_ST5, O_NONE, P_none }, | |
+ /* 1E */ { UD_Ifcmovu, O_ST0, O_ST6, O_NONE, P_none }, | |
+ /* 1F */ { UD_Ifcmovu, O_ST0, O_ST7, O_NONE, P_none }, | |
+ /* 20 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 21 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 22 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 23 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 24 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 25 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 26 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 27 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 28 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 29 */ { UD_Ifucompp, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 2A */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 2B */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 2C */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 2D */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 2E */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 2F */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 30 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 31 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 32 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 33 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 34 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 35 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 36 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 37 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 38 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 39 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 3A */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 3B */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 3C */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 3D */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 3E */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 3F */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__1byte__op_db__mod[2] = { | |
+ /* 00 */ { UD_Igrp_reg, O_NONE, O_NONE, O_NONE, ITAB__1BYTE__OP_DB__MOD__OP_00__REG }, | |
+ /* 01 */ { UD_Igrp_x87, O_NONE, O_NONE, O_NONE, ITAB__1BYTE__OP_DB__MOD__OP_01__X87 }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__1byte__op_db__mod__op_00__reg[8] = { | |
+ /* 00 */ { UD_Ifild, O_Md, O_NONE, O_NONE, P_c1|P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 01 */ { UD_Ifisttp, O_Md, O_NONE, O_NONE, P_c1|P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 02 */ { UD_Ifist, O_Md, O_NONE, O_NONE, P_c1|P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 03 */ { UD_Ifistp, O_Md, O_NONE, O_NONE, P_c1|P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 04 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 05 */ { UD_Ifld, O_Mt, O_NONE, O_NONE, P_c1|P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 06 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 07 */ { UD_Ifstp, O_Mt, O_NONE, O_NONE, P_c1|P_aso|P_rexr|P_rexx|P_rexb }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__1byte__op_db__mod__op_01__x87[64] = { | |
+ /* 00 */ { UD_Ifcmovnb, O_ST0, O_ST0, O_NONE, P_none }, | |
+ /* 01 */ { UD_Ifcmovnb, O_ST0, O_ST1, O_NONE, P_none }, | |
+ /* 02 */ { UD_Ifcmovnb, O_ST0, O_ST2, O_NONE, P_none }, | |
+ /* 03 */ { UD_Ifcmovnb, O_ST0, O_ST3, O_NONE, P_none }, | |
+ /* 04 */ { UD_Ifcmovnb, O_ST0, O_ST4, O_NONE, P_none }, | |
+ /* 05 */ { UD_Ifcmovnb, O_ST0, O_ST5, O_NONE, P_none }, | |
+ /* 06 */ { UD_Ifcmovnb, O_ST0, O_ST6, O_NONE, P_none }, | |
+ /* 07 */ { UD_Ifcmovnb, O_ST0, O_ST7, O_NONE, P_none }, | |
+ /* 08 */ { UD_Ifcmovne, O_ST0, O_ST0, O_NONE, P_none }, | |
+ /* 09 */ { UD_Ifcmovne, O_ST0, O_ST1, O_NONE, P_none }, | |
+ /* 0A */ { UD_Ifcmovne, O_ST0, O_ST2, O_NONE, P_none }, | |
+ /* 0B */ { UD_Ifcmovne, O_ST0, O_ST3, O_NONE, P_none }, | |
+ /* 0C */ { UD_Ifcmovne, O_ST0, O_ST4, O_NONE, P_none }, | |
+ /* 0D */ { UD_Ifcmovne, O_ST0, O_ST5, O_NONE, P_none }, | |
+ /* 0E */ { UD_Ifcmovne, O_ST0, O_ST6, O_NONE, P_none }, | |
+ /* 0F */ { UD_Ifcmovne, O_ST0, O_ST7, O_NONE, P_none }, | |
+ /* 10 */ { UD_Ifcmovnbe, O_ST0, O_ST0, O_NONE, P_none }, | |
+ /* 11 */ { UD_Ifcmovnbe, O_ST0, O_ST1, O_NONE, P_none }, | |
+ /* 12 */ { UD_Ifcmovnbe, O_ST0, O_ST2, O_NONE, P_none }, | |
+ /* 13 */ { UD_Ifcmovnbe, O_ST0, O_ST3, O_NONE, P_none }, | |
+ /* 14 */ { UD_Ifcmovnbe, O_ST0, O_ST4, O_NONE, P_none }, | |
+ /* 15 */ { UD_Ifcmovnbe, O_ST0, O_ST5, O_NONE, P_none }, | |
+ /* 16 */ { UD_Ifcmovnbe, O_ST0, O_ST6, O_NONE, P_none }, | |
+ /* 17 */ { UD_Ifcmovnbe, O_ST0, O_ST7, O_NONE, P_none }, | |
+ /* 18 */ { UD_Ifcmovnu, O_ST0, O_ST0, O_NONE, P_none }, | |
+ /* 19 */ { UD_Ifcmovnu, O_ST0, O_ST1, O_NONE, P_none }, | |
+ /* 1A */ { UD_Ifcmovnu, O_ST0, O_ST2, O_NONE, P_none }, | |
+ /* 1B */ { UD_Ifcmovnu, O_ST0, O_ST3, O_NONE, P_none }, | |
+ /* 1C */ { UD_Ifcmovnu, O_ST0, O_ST4, O_NONE, P_none }, | |
+ /* 1D */ { UD_Ifcmovnu, O_ST0, O_ST5, O_NONE, P_none }, | |
+ /* 1E */ { UD_Ifcmovnu, O_ST0, O_ST6, O_NONE, P_none }, | |
+ /* 1F */ { UD_Ifcmovnu, O_ST0, O_ST7, O_NONE, P_none }, | |
+ /* 20 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 21 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 22 */ { UD_Ifclex, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 23 */ { UD_Ifninit, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 24 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 25 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 26 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 27 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 28 */ { UD_Ifucomi, O_ST0, O_ST0, O_NONE, P_none }, | |
+ /* 29 */ { UD_Ifucomi, O_ST0, O_ST1, O_NONE, P_none }, | |
+ /* 2A */ { UD_Ifucomi, O_ST0, O_ST2, O_NONE, P_none }, | |
+ /* 2B */ { UD_Ifucomi, O_ST0, O_ST3, O_NONE, P_none }, | |
+ /* 2C */ { UD_Ifucomi, O_ST0, O_ST4, O_NONE, P_none }, | |
+ /* 2D */ { UD_Ifucomi, O_ST0, O_ST5, O_NONE, P_none }, | |
+ /* 2E */ { UD_Ifucomi, O_ST0, O_ST6, O_NONE, P_none }, | |
+ /* 2F */ { UD_Ifucomi, O_ST0, O_ST7, O_NONE, P_none }, | |
+ /* 30 */ { UD_Ifcomi, O_ST0, O_ST0, O_NONE, P_none }, | |
+ /* 31 */ { UD_Ifcomi, O_ST0, O_ST1, O_NONE, P_none }, | |
+ /* 32 */ { UD_Ifcomi, O_ST0, O_ST2, O_NONE, P_none }, | |
+ /* 33 */ { UD_Ifcomi, O_ST0, O_ST3, O_NONE, P_none }, | |
+ /* 34 */ { UD_Ifcomi, O_ST0, O_ST4, O_NONE, P_none }, | |
+ /* 35 */ { UD_Ifcomi, O_ST0, O_ST5, O_NONE, P_none }, | |
+ /* 36 */ { UD_Ifcomi, O_ST0, O_ST6, O_NONE, P_none }, | |
+ /* 37 */ { UD_Ifcomi, O_ST0, O_ST7, O_NONE, P_none }, | |
+ /* 38 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 39 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 3A */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 3B */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 3C */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 3D */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 3E */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 3F */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__1byte__op_dc__mod[2] = { | |
+ /* 00 */ { UD_Igrp_reg, O_NONE, O_NONE, O_NONE, ITAB__1BYTE__OP_DC__MOD__OP_00__REG }, | |
+ /* 01 */ { UD_Igrp_x87, O_NONE, O_NONE, O_NONE, ITAB__1BYTE__OP_DC__MOD__OP_01__X87 }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__1byte__op_dc__mod__op_00__reg[8] = { | |
+ /* 00 */ { UD_Ifadd, O_Mq, O_NONE, O_NONE, P_c1|P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 01 */ { UD_Ifmul, O_Mq, O_NONE, O_NONE, P_c1|P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 02 */ { UD_Ifcom, O_Mq, O_NONE, O_NONE, P_c1|P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 03 */ { UD_Ifcomp, O_Mq, O_NONE, O_NONE, P_c1|P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 04 */ { UD_Ifsub, O_Mq, O_NONE, O_NONE, P_c1|P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 05 */ { UD_Ifsubr, O_Mq, O_NONE, O_NONE, P_c1|P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 06 */ { UD_Ifdiv, O_Mq, O_NONE, O_NONE, P_c1|P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 07 */ { UD_Ifdivr, O_Mq, O_NONE, O_NONE, P_c1|P_aso|P_rexr|P_rexx|P_rexb }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__1byte__op_dc__mod__op_01__x87[64] = { | |
+ /* 00 */ { UD_Ifadd, O_ST0, O_ST0, O_NONE, P_none }, | |
+ /* 01 */ { UD_Ifadd, O_ST1, O_ST0, O_NONE, P_none }, | |
+ /* 02 */ { UD_Ifadd, O_ST2, O_ST0, O_NONE, P_none }, | |
+ /* 03 */ { UD_Ifadd, O_ST3, O_ST0, O_NONE, P_none }, | |
+ /* 04 */ { UD_Ifadd, O_ST4, O_ST0, O_NONE, P_none }, | |
+ /* 05 */ { UD_Ifadd, O_ST5, O_ST0, O_NONE, P_none }, | |
+ /* 06 */ { UD_Ifadd, O_ST6, O_ST0, O_NONE, P_none }, | |
+ /* 07 */ { UD_Ifadd, O_ST7, O_ST0, O_NONE, P_none }, | |
+ /* 08 */ { UD_Ifmul, O_ST0, O_ST0, O_NONE, P_none }, | |
+ /* 09 */ { UD_Ifmul, O_ST1, O_ST0, O_NONE, P_none }, | |
+ /* 0A */ { UD_Ifmul, O_ST2, O_ST0, O_NONE, P_none }, | |
+ /* 0B */ { UD_Ifmul, O_ST3, O_ST0, O_NONE, P_none }, | |
+ /* 0C */ { UD_Ifmul, O_ST4, O_ST0, O_NONE, P_none }, | |
+ /* 0D */ { UD_Ifmul, O_ST5, O_ST0, O_NONE, P_none }, | |
+ /* 0E */ { UD_Ifmul, O_ST6, O_ST0, O_NONE, P_none }, | |
+ /* 0F */ { UD_Ifmul, O_ST7, O_ST0, O_NONE, P_none }, | |
+ /* 10 */ { UD_Ifcom2, O_ST0, O_NONE, O_NONE, P_none }, | |
+ /* 11 */ { UD_Ifcom2, O_ST1, O_NONE, O_NONE, P_none }, | |
+ /* 12 */ { UD_Ifcom2, O_ST2, O_NONE, O_NONE, P_none }, | |
+ /* 13 */ { UD_Ifcom2, O_ST3, O_NONE, O_NONE, P_none }, | |
+ /* 14 */ { UD_Ifcom2, O_ST4, O_NONE, O_NONE, P_none }, | |
+ /* 15 */ { UD_Ifcom2, O_ST5, O_NONE, O_NONE, P_none }, | |
+ /* 16 */ { UD_Ifcom2, O_ST6, O_NONE, O_NONE, P_none }, | |
+ /* 17 */ { UD_Ifcom2, O_ST7, O_NONE, O_NONE, P_none }, | |
+ /* 18 */ { UD_Ifcomp3, O_ST0, O_NONE, O_NONE, P_none }, | |
+ /* 19 */ { UD_Ifcomp3, O_ST1, O_NONE, O_NONE, P_none }, | |
+ /* 1A */ { UD_Ifcomp3, O_ST2, O_NONE, O_NONE, P_none }, | |
+ /* 1B */ { UD_Ifcomp3, O_ST3, O_NONE, O_NONE, P_none }, | |
+ /* 1C */ { UD_Ifcomp3, O_ST4, O_NONE, O_NONE, P_none }, | |
+ /* 1D */ { UD_Ifcomp3, O_ST5, O_NONE, O_NONE, P_none }, | |
+ /* 1E */ { UD_Ifcomp3, O_ST6, O_NONE, O_NONE, P_none }, | |
+ /* 1F */ { UD_Ifcomp3, O_ST7, O_NONE, O_NONE, P_none }, | |
+ /* 20 */ { UD_Ifsubr, O_ST0, O_ST0, O_NONE, P_none }, | |
+ /* 21 */ { UD_Ifsubr, O_ST1, O_ST0, O_NONE, P_none }, | |
+ /* 22 */ { UD_Ifsubr, O_ST2, O_ST0, O_NONE, P_none }, | |
+ /* 23 */ { UD_Ifsubr, O_ST3, O_ST0, O_NONE, P_none }, | |
+ /* 24 */ { UD_Ifsubr, O_ST4, O_ST0, O_NONE, P_none }, | |
+ /* 25 */ { UD_Ifsubr, O_ST5, O_ST0, O_NONE, P_none }, | |
+ /* 26 */ { UD_Ifsubr, O_ST6, O_ST0, O_NONE, P_none }, | |
+ /* 27 */ { UD_Ifsubr, O_ST7, O_ST0, O_NONE, P_none }, | |
+ /* 28 */ { UD_Ifsub, O_ST0, O_ST0, O_NONE, P_none }, | |
+ /* 29 */ { UD_Ifsub, O_ST1, O_ST0, O_NONE, P_none }, | |
+ /* 2A */ { UD_Ifsub, O_ST2, O_ST0, O_NONE, P_none }, | |
+ /* 2B */ { UD_Ifsub, O_ST3, O_ST0, O_NONE, P_none }, | |
+ /* 2C */ { UD_Ifsub, O_ST4, O_ST0, O_NONE, P_none }, | |
+ /* 2D */ { UD_Ifsub, O_ST5, O_ST0, O_NONE, P_none }, | |
+ /* 2E */ { UD_Ifsub, O_ST6, O_ST0, O_NONE, P_none }, | |
+ /* 2F */ { UD_Ifsub, O_ST7, O_ST0, O_NONE, P_none }, | |
+ /* 30 */ { UD_Ifdivr, O_ST0, O_ST0, O_NONE, P_none }, | |
+ /* 31 */ { UD_Ifdivr, O_ST1, O_ST0, O_NONE, P_none }, | |
+ /* 32 */ { UD_Ifdivr, O_ST2, O_ST0, O_NONE, P_none }, | |
+ /* 33 */ { UD_Ifdivr, O_ST3, O_ST0, O_NONE, P_none }, | |
+ /* 34 */ { UD_Ifdivr, O_ST4, O_ST0, O_NONE, P_none }, | |
+ /* 35 */ { UD_Ifdivr, O_ST5, O_ST0, O_NONE, P_none }, | |
+ /* 36 */ { UD_Ifdivr, O_ST6, O_ST0, O_NONE, P_none }, | |
+ /* 37 */ { UD_Ifdivr, O_ST7, O_ST0, O_NONE, P_none }, | |
+ /* 38 */ { UD_Ifdiv, O_ST0, O_ST0, O_NONE, P_none }, | |
+ /* 39 */ { UD_Ifdiv, O_ST1, O_ST0, O_NONE, P_none }, | |
+ /* 3A */ { UD_Ifdiv, O_ST2, O_ST0, O_NONE, P_none }, | |
+ /* 3B */ { UD_Ifdiv, O_ST3, O_ST0, O_NONE, P_none }, | |
+ /* 3C */ { UD_Ifdiv, O_ST4, O_ST0, O_NONE, P_none }, | |
+ /* 3D */ { UD_Ifdiv, O_ST5, O_ST0, O_NONE, P_none }, | |
+ /* 3E */ { UD_Ifdiv, O_ST6, O_ST0, O_NONE, P_none }, | |
+ /* 3F */ { UD_Ifdiv, O_ST7, O_ST0, O_NONE, P_none }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__1byte__op_dd__mod[2] = { | |
+ /* 00 */ { UD_Igrp_reg, O_NONE, O_NONE, O_NONE, ITAB__1BYTE__OP_DD__MOD__OP_00__REG }, | |
+ /* 01 */ { UD_Igrp_x87, O_NONE, O_NONE, O_NONE, ITAB__1BYTE__OP_DD__MOD__OP_01__X87 }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__1byte__op_dd__mod__op_00__reg[8] = { | |
+ /* 00 */ { UD_Ifld, O_Mq, O_NONE, O_NONE, P_c1|P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 01 */ { UD_Ifisttp, O_Mq, O_NONE, O_NONE, P_c1|P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 02 */ { UD_Ifst, O_Mq, O_NONE, O_NONE, P_c1|P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 03 */ { UD_Ifstp, O_Mq, O_NONE, O_NONE, P_c1|P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 04 */ { UD_Ifrstor, O_M, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 05 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 06 */ { UD_Ifnsave, O_M, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 07 */ { UD_Ifnstsw, O_Mw, O_NONE, O_NONE, P_c1|P_aso|P_rexr|P_rexx|P_rexb }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__1byte__op_dd__mod__op_01__x87[64] = { | |
+ /* 00 */ { UD_Iffree, O_ST0, O_NONE, O_NONE, P_none }, | |
+ /* 01 */ { UD_Iffree, O_ST1, O_NONE, O_NONE, P_none }, | |
+ /* 02 */ { UD_Iffree, O_ST2, O_NONE, O_NONE, P_none }, | |
+ /* 03 */ { UD_Iffree, O_ST3, O_NONE, O_NONE, P_none }, | |
+ /* 04 */ { UD_Iffree, O_ST4, O_NONE, O_NONE, P_none }, | |
+ /* 05 */ { UD_Iffree, O_ST5, O_NONE, O_NONE, P_none }, | |
+ /* 06 */ { UD_Iffree, O_ST6, O_NONE, O_NONE, P_none }, | |
+ /* 07 */ { UD_Iffree, O_ST7, O_NONE, O_NONE, P_none }, | |
+ /* 08 */ { UD_Ifxch4, O_ST0, O_NONE, O_NONE, P_none }, | |
+ /* 09 */ { UD_Ifxch4, O_ST1, O_NONE, O_NONE, P_none }, | |
+ /* 0A */ { UD_Ifxch4, O_ST2, O_NONE, O_NONE, P_none }, | |
+ /* 0B */ { UD_Ifxch4, O_ST3, O_NONE, O_NONE, P_none }, | |
+ /* 0C */ { UD_Ifxch4, O_ST4, O_NONE, O_NONE, P_none }, | |
+ /* 0D */ { UD_Ifxch4, O_ST5, O_NONE, O_NONE, P_none }, | |
+ /* 0E */ { UD_Ifxch4, O_ST6, O_NONE, O_NONE, P_none }, | |
+ /* 0F */ { UD_Ifxch4, O_ST7, O_NONE, O_NONE, P_none }, | |
+ /* 10 */ { UD_Ifst, O_ST0, O_NONE, O_NONE, P_none }, | |
+ /* 11 */ { UD_Ifst, O_ST1, O_NONE, O_NONE, P_none }, | |
+ /* 12 */ { UD_Ifst, O_ST2, O_NONE, O_NONE, P_none }, | |
+ /* 13 */ { UD_Ifst, O_ST3, O_NONE, O_NONE, P_none }, | |
+ /* 14 */ { UD_Ifst, O_ST4, O_NONE, O_NONE, P_none }, | |
+ /* 15 */ { UD_Ifst, O_ST5, O_NONE, O_NONE, P_none }, | |
+ /* 16 */ { UD_Ifst, O_ST6, O_NONE, O_NONE, P_none }, | |
+ /* 17 */ { UD_Ifst, O_ST7, O_NONE, O_NONE, P_none }, | |
+ /* 18 */ { UD_Ifstp, O_ST0, O_NONE, O_NONE, P_none }, | |
+ /* 19 */ { UD_Ifstp, O_ST1, O_NONE, O_NONE, P_none }, | |
+ /* 1A */ { UD_Ifstp, O_ST2, O_NONE, O_NONE, P_none }, | |
+ /* 1B */ { UD_Ifstp, O_ST3, O_NONE, O_NONE, P_none }, | |
+ /* 1C */ { UD_Ifstp, O_ST4, O_NONE, O_NONE, P_none }, | |
+ /* 1D */ { UD_Ifstp, O_ST5, O_NONE, O_NONE, P_none }, | |
+ /* 1E */ { UD_Ifstp, O_ST6, O_NONE, O_NONE, P_none }, | |
+ /* 1F */ { UD_Ifstp, O_ST7, O_NONE, O_NONE, P_none }, | |
+ /* 20 */ { UD_Ifucom, O_ST0, O_NONE, O_NONE, P_none }, | |
+ /* 21 */ { UD_Ifucom, O_ST1, O_NONE, O_NONE, P_none }, | |
+ /* 22 */ { UD_Ifucom, O_ST2, O_NONE, O_NONE, P_none }, | |
+ /* 23 */ { UD_Ifucom, O_ST3, O_NONE, O_NONE, P_none }, | |
+ /* 24 */ { UD_Ifucom, O_ST4, O_NONE, O_NONE, P_none }, | |
+ /* 25 */ { UD_Ifucom, O_ST5, O_NONE, O_NONE, P_none }, | |
+ /* 26 */ { UD_Ifucom, O_ST6, O_NONE, O_NONE, P_none }, | |
+ /* 27 */ { UD_Ifucom, O_ST7, O_NONE, O_NONE, P_none }, | |
+ /* 28 */ { UD_Ifucomp, O_ST0, O_NONE, O_NONE, P_none }, | |
+ /* 29 */ { UD_Ifucomp, O_ST1, O_NONE, O_NONE, P_none }, | |
+ /* 2A */ { UD_Ifucomp, O_ST2, O_NONE, O_NONE, P_none }, | |
+ /* 2B */ { UD_Ifucomp, O_ST3, O_NONE, O_NONE, P_none }, | |
+ /* 2C */ { UD_Ifucomp, O_ST4, O_NONE, O_NONE, P_none }, | |
+ /* 2D */ { UD_Ifucomp, O_ST5, O_NONE, O_NONE, P_none }, | |
+ /* 2E */ { UD_Ifucomp, O_ST6, O_NONE, O_NONE, P_none }, | |
+ /* 2F */ { UD_Ifucomp, O_ST7, O_NONE, O_NONE, P_none }, | |
+ /* 30 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 31 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 32 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 33 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 34 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 35 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 36 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 37 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 38 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 39 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 3A */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 3B */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 3C */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 3D */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 3E */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 3F */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__1byte__op_de__mod[2] = { | |
+ /* 00 */ { UD_Igrp_reg, O_NONE, O_NONE, O_NONE, ITAB__1BYTE__OP_DE__MOD__OP_00__REG }, | |
+ /* 01 */ { UD_Igrp_x87, O_NONE, O_NONE, O_NONE, ITAB__1BYTE__OP_DE__MOD__OP_01__X87 }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__1byte__op_de__mod__op_00__reg[8] = { | |
+ /* 00 */ { UD_Ifiadd, O_Mw, O_NONE, O_NONE, P_c1|P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 01 */ { UD_Ifimul, O_Mw, O_NONE, O_NONE, P_c1|P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 02 */ { UD_Ificom, O_Mw, O_NONE, O_NONE, P_c1|P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 03 */ { UD_Ificomp, O_Mw, O_NONE, O_NONE, P_c1|P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 04 */ { UD_Ifisub, O_Mw, O_NONE, O_NONE, P_c1|P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 05 */ { UD_Ifisubr, O_Mw, O_NONE, O_NONE, P_c1|P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 06 */ { UD_Ifidiv, O_Mw, O_NONE, O_NONE, P_c1|P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 07 */ { UD_Ifidivr, O_Mw, O_NONE, O_NONE, P_c1|P_aso|P_rexr|P_rexx|P_rexb }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__1byte__op_de__mod__op_01__x87[64] = { | |
+ /* 00 */ { UD_Ifaddp, O_ST0, O_ST0, O_NONE, P_none }, | |
+ /* 01 */ { UD_Ifaddp, O_ST1, O_ST0, O_NONE, P_none }, | |
+ /* 02 */ { UD_Ifaddp, O_ST2, O_ST0, O_NONE, P_none }, | |
+ /* 03 */ { UD_Ifaddp, O_ST3, O_ST0, O_NONE, P_none }, | |
+ /* 04 */ { UD_Ifaddp, O_ST4, O_ST0, O_NONE, P_none }, | |
+ /* 05 */ { UD_Ifaddp, O_ST5, O_ST0, O_NONE, P_none }, | |
+ /* 06 */ { UD_Ifaddp, O_ST6, O_ST0, O_NONE, P_none }, | |
+ /* 07 */ { UD_Ifaddp, O_ST7, O_ST0, O_NONE, P_none }, | |
+ /* 08 */ { UD_Ifmulp, O_ST0, O_ST0, O_NONE, P_none }, | |
+ /* 09 */ { UD_Ifmulp, O_ST1, O_ST0, O_NONE, P_none }, | |
+ /* 0A */ { UD_Ifmulp, O_ST2, O_ST0, O_NONE, P_none }, | |
+ /* 0B */ { UD_Ifmulp, O_ST3, O_ST0, O_NONE, P_none }, | |
+ /* 0C */ { UD_Ifmulp, O_ST4, O_ST0, O_NONE, P_none }, | |
+ /* 0D */ { UD_Ifmulp, O_ST5, O_ST0, O_NONE, P_none }, | |
+ /* 0E */ { UD_Ifmulp, O_ST6, O_ST0, O_NONE, P_none }, | |
+ /* 0F */ { UD_Ifmulp, O_ST7, O_ST0, O_NONE, P_none }, | |
+ /* 10 */ { UD_Ifcomp5, O_ST0, O_NONE, O_NONE, P_none }, | |
+ /* 11 */ { UD_Ifcomp5, O_ST1, O_NONE, O_NONE, P_none }, | |
+ /* 12 */ { UD_Ifcomp5, O_ST2, O_NONE, O_NONE, P_none }, | |
+ /* 13 */ { UD_Ifcomp5, O_ST3, O_NONE, O_NONE, P_none }, | |
+ /* 14 */ { UD_Ifcomp5, O_ST4, O_NONE, O_NONE, P_none }, | |
+ /* 15 */ { UD_Ifcomp5, O_ST5, O_NONE, O_NONE, P_none }, | |
+ /* 16 */ { UD_Ifcomp5, O_ST6, O_NONE, O_NONE, P_none }, | |
+ /* 17 */ { UD_Ifcomp5, O_ST7, O_NONE, O_NONE, P_none }, | |
+ /* 18 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 19 */ { UD_Ifcompp, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 1A */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 1B */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 1C */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 1D */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 1E */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 1F */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 20 */ { UD_Ifsubrp, O_ST0, O_ST0, O_NONE, P_none }, | |
+ /* 21 */ { UD_Ifsubrp, O_ST1, O_ST0, O_NONE, P_none }, | |
+ /* 22 */ { UD_Ifsubrp, O_ST2, O_ST0, O_NONE, P_none }, | |
+ /* 23 */ { UD_Ifsubrp, O_ST3, O_ST0, O_NONE, P_none }, | |
+ /* 24 */ { UD_Ifsubrp, O_ST4, O_ST0, O_NONE, P_none }, | |
+ /* 25 */ { UD_Ifsubrp, O_ST5, O_ST0, O_NONE, P_none }, | |
+ /* 26 */ { UD_Ifsubrp, O_ST6, O_ST0, O_NONE, P_none }, | |
+ /* 27 */ { UD_Ifsubrp, O_ST7, O_ST0, O_NONE, P_none }, | |
+ /* 28 */ { UD_Ifsubp, O_ST0, O_ST0, O_NONE, P_none }, | |
+ /* 29 */ { UD_Ifsubp, O_ST1, O_ST0, O_NONE, P_none }, | |
+ /* 2A */ { UD_Ifsubp, O_ST2, O_ST0, O_NONE, P_none }, | |
+ /* 2B */ { UD_Ifsubp, O_ST3, O_ST0, O_NONE, P_none }, | |
+ /* 2C */ { UD_Ifsubp, O_ST4, O_ST0, O_NONE, P_none }, | |
+ /* 2D */ { UD_Ifsubp, O_ST5, O_ST0, O_NONE, P_none }, | |
+ /* 2E */ { UD_Ifsubp, O_ST6, O_ST0, O_NONE, P_none }, | |
+ /* 2F */ { UD_Ifsubp, O_ST7, O_ST0, O_NONE, P_none }, | |
+ /* 30 */ { UD_Ifdivrp, O_ST0, O_ST0, O_NONE, P_none }, | |
+ /* 31 */ { UD_Ifdivrp, O_ST1, O_ST0, O_NONE, P_none }, | |
+ /* 32 */ { UD_Ifdivrp, O_ST2, O_ST0, O_NONE, P_none }, | |
+ /* 33 */ { UD_Ifdivrp, O_ST3, O_ST0, O_NONE, P_none }, | |
+ /* 34 */ { UD_Ifdivrp, O_ST4, O_ST0, O_NONE, P_none }, | |
+ /* 35 */ { UD_Ifdivrp, O_ST5, O_ST0, O_NONE, P_none }, | |
+ /* 36 */ { UD_Ifdivrp, O_ST6, O_ST0, O_NONE, P_none }, | |
+ /* 37 */ { UD_Ifdivrp, O_ST7, O_ST0, O_NONE, P_none }, | |
+ /* 38 */ { UD_Ifdivp, O_ST0, O_ST0, O_NONE, P_none }, | |
+ /* 39 */ { UD_Ifdivp, O_ST1, O_ST0, O_NONE, P_none }, | |
+ /* 3A */ { UD_Ifdivp, O_ST2, O_ST0, O_NONE, P_none }, | |
+ /* 3B */ { UD_Ifdivp, O_ST3, O_ST0, O_NONE, P_none }, | |
+ /* 3C */ { UD_Ifdivp, O_ST4, O_ST0, O_NONE, P_none }, | |
+ /* 3D */ { UD_Ifdivp, O_ST5, O_ST0, O_NONE, P_none }, | |
+ /* 3E */ { UD_Ifdivp, O_ST6, O_ST0, O_NONE, P_none }, | |
+ /* 3F */ { UD_Ifdivp, O_ST7, O_ST0, O_NONE, P_none }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__1byte__op_df__mod[2] = { | |
+ /* 00 */ { UD_Igrp_reg, O_NONE, O_NONE, O_NONE, ITAB__1BYTE__OP_DF__MOD__OP_00__REG }, | |
+ /* 01 */ { UD_Igrp_x87, O_NONE, O_NONE, O_NONE, ITAB__1BYTE__OP_DF__MOD__OP_01__X87 }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__1byte__op_df__mod__op_00__reg[8] = { | |
+ /* 00 */ { UD_Ifild, O_Mw, O_NONE, O_NONE, P_c1|P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 01 */ { UD_Ifisttp, O_Mw, O_NONE, O_NONE, P_c1|P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 02 */ { UD_Ifist, O_Mw, O_NONE, O_NONE, P_c1|P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 03 */ { UD_Ifistp, O_Mw, O_NONE, O_NONE, P_c1|P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 04 */ { UD_Ifbld, O_Mt, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 05 */ { UD_Ifild, O_Mq, O_NONE, O_NONE, P_c1|P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 06 */ { UD_Ifbstp, O_Mt, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 07 */ { UD_Ifistp, O_Mq, O_NONE, O_NONE, P_c1|P_aso|P_rexr|P_rexx|P_rexb }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__1byte__op_df__mod__op_01__x87[64] = { | |
+ /* 00 */ { UD_Iffreep, O_ST0, O_NONE, O_NONE, P_none }, | |
+ /* 01 */ { UD_Iffreep, O_ST1, O_NONE, O_NONE, P_none }, | |
+ /* 02 */ { UD_Iffreep, O_ST2, O_NONE, O_NONE, P_none }, | |
+ /* 03 */ { UD_Iffreep, O_ST3, O_NONE, O_NONE, P_none }, | |
+ /* 04 */ { UD_Iffreep, O_ST4, O_NONE, O_NONE, P_none }, | |
+ /* 05 */ { UD_Iffreep, O_ST5, O_NONE, O_NONE, P_none }, | |
+ /* 06 */ { UD_Iffreep, O_ST6, O_NONE, O_NONE, P_none }, | |
+ /* 07 */ { UD_Iffreep, O_ST7, O_NONE, O_NONE, P_none }, | |
+ /* 08 */ { UD_Ifxch7, O_ST0, O_NONE, O_NONE, P_none }, | |
+ /* 09 */ { UD_Ifxch7, O_ST1, O_NONE, O_NONE, P_none }, | |
+ /* 0A */ { UD_Ifxch7, O_ST2, O_NONE, O_NONE, P_none }, | |
+ /* 0B */ { UD_Ifxch7, O_ST3, O_NONE, O_NONE, P_none }, | |
+ /* 0C */ { UD_Ifxch7, O_ST4, O_NONE, O_NONE, P_none }, | |
+ /* 0D */ { UD_Ifxch7, O_ST5, O_NONE, O_NONE, P_none }, | |
+ /* 0E */ { UD_Ifxch7, O_ST6, O_NONE, O_NONE, P_none }, | |
+ /* 0F */ { UD_Ifxch7, O_ST7, O_NONE, O_NONE, P_none }, | |
+ /* 10 */ { UD_Ifstp8, O_ST0, O_NONE, O_NONE, P_none }, | |
+ /* 11 */ { UD_Ifstp8, O_ST1, O_NONE, O_NONE, P_none }, | |
+ /* 12 */ { UD_Ifstp8, O_ST2, O_NONE, O_NONE, P_none }, | |
+ /* 13 */ { UD_Ifstp8, O_ST3, O_NONE, O_NONE, P_none }, | |
+ /* 14 */ { UD_Ifstp8, O_ST4, O_NONE, O_NONE, P_none }, | |
+ /* 15 */ { UD_Ifstp8, O_ST5, O_NONE, O_NONE, P_none }, | |
+ /* 16 */ { UD_Ifstp8, O_ST6, O_NONE, O_NONE, P_none }, | |
+ /* 17 */ { UD_Ifstp8, O_ST7, O_NONE, O_NONE, P_none }, | |
+ /* 18 */ { UD_Ifstp9, O_ST0, O_NONE, O_NONE, P_none }, | |
+ /* 19 */ { UD_Ifstp9, O_ST1, O_NONE, O_NONE, P_none }, | |
+ /* 1A */ { UD_Ifstp9, O_ST2, O_NONE, O_NONE, P_none }, | |
+ /* 1B */ { UD_Ifstp9, O_ST3, O_NONE, O_NONE, P_none }, | |
+ /* 1C */ { UD_Ifstp9, O_ST4, O_NONE, O_NONE, P_none }, | |
+ /* 1D */ { UD_Ifstp9, O_ST5, O_NONE, O_NONE, P_none }, | |
+ /* 1E */ { UD_Ifstp9, O_ST6, O_NONE, O_NONE, P_none }, | |
+ /* 1F */ { UD_Ifstp9, O_ST7, O_NONE, O_NONE, P_none }, | |
+ /* 20 */ { UD_Ifnstsw, O_AX, O_NONE, O_NONE, P_none }, | |
+ /* 21 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 22 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 23 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 24 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 25 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 26 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 27 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 28 */ { UD_Ifucomip, O_ST0, O_ST0, O_NONE, P_none }, | |
+ /* 29 */ { UD_Ifucomip, O_ST0, O_ST1, O_NONE, P_none }, | |
+ /* 2A */ { UD_Ifucomip, O_ST0, O_ST2, O_NONE, P_none }, | |
+ /* 2B */ { UD_Ifucomip, O_ST0, O_ST3, O_NONE, P_none }, | |
+ /* 2C */ { UD_Ifucomip, O_ST0, O_ST4, O_NONE, P_none }, | |
+ /* 2D */ { UD_Ifucomip, O_ST0, O_ST5, O_NONE, P_none }, | |
+ /* 2E */ { UD_Ifucomip, O_ST0, O_ST6, O_NONE, P_none }, | |
+ /* 2F */ { UD_Ifucomip, O_ST0, O_ST7, O_NONE, P_none }, | |
+ /* 30 */ { UD_Ifcomip, O_ST0, O_ST0, O_NONE, P_none }, | |
+ /* 31 */ { UD_Ifcomip, O_ST0, O_ST1, O_NONE, P_none }, | |
+ /* 32 */ { UD_Ifcomip, O_ST0, O_ST2, O_NONE, P_none }, | |
+ /* 33 */ { UD_Ifcomip, O_ST0, O_ST3, O_NONE, P_none }, | |
+ /* 34 */ { UD_Ifcomip, O_ST0, O_ST4, O_NONE, P_none }, | |
+ /* 35 */ { UD_Ifcomip, O_ST0, O_ST5, O_NONE, P_none }, | |
+ /* 36 */ { UD_Ifcomip, O_ST0, O_ST6, O_NONE, P_none }, | |
+ /* 37 */ { UD_Ifcomip, O_ST0, O_ST7, O_NONE, P_none }, | |
+ /* 38 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 39 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 3A */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 3B */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 3C */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 3D */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 3E */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 3F */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__1byte__op_e3__asize[3] = { | |
+ /* 00 */ { UD_Ijcxz, O_Jb, O_NONE, O_NONE, P_aso }, | |
+ /* 01 */ { UD_Ijecxz, O_Jb, O_NONE, O_NONE, P_aso }, | |
+ /* 02 */ { UD_Ijrcxz, O_Jb, O_NONE, O_NONE, P_aso }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__1byte__op_f6__reg[8] = { | |
+ /* 00 */ { UD_Itest, O_Eb, O_Ib, O_NONE, P_c1|P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 01 */ { UD_Itest, O_Eb, O_Ib, O_NONE, P_c1|P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 02 */ { UD_Inot, O_Eb, O_NONE, O_NONE, P_c1|P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 03 */ { UD_Ineg, O_Eb, O_NONE, O_NONE, P_c1|P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 04 */ { UD_Imul, O_Eb, O_NONE, O_NONE, P_c1|P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 05 */ { UD_Iimul, O_Eb, O_NONE, O_NONE, P_c1|P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 06 */ { UD_Idiv, O_Eb, O_NONE, O_NONE, P_c1|P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 07 */ { UD_Iidiv, O_Eb, O_NONE, O_NONE, P_c1|P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__1byte__op_f7__reg[8] = { | |
+ /* 00 */ { UD_Itest, O_Ev, O_Iz, O_NONE, P_c1|P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 01 */ { UD_Itest, O_Ev, O_Iz, O_NONE, P_c1|P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 02 */ { UD_Inot, O_Ev, O_NONE, O_NONE, P_c1|P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 03 */ { UD_Ineg, O_Ev, O_NONE, O_NONE, P_c1|P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 04 */ { UD_Imul, O_Ev, O_NONE, O_NONE, P_c1|P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 05 */ { UD_Iimul, O_Ev, O_NONE, O_NONE, P_c1|P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 06 */ { UD_Idiv, O_Ev, O_NONE, O_NONE, P_c1|P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 07 */ { UD_Iidiv, O_Ev, O_NONE, O_NONE, P_c1|P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__1byte__op_fe__reg[8] = { | |
+ /* 00 */ { UD_Iinc, O_Eb, O_NONE, O_NONE, P_c1|P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 01 */ { UD_Idec, O_Eb, O_NONE, O_NONE, P_c1|P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 02 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 03 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 04 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 05 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 06 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 07 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__1byte__op_ff__reg[8] = { | |
+ /* 00 */ { UD_Iinc, O_Ev, O_NONE, O_NONE, P_c1|P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 01 */ { UD_Idec, O_Ev, O_NONE, O_NONE, P_c1|P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 02 */ { UD_Icall, O_Ev, O_NONE, O_NONE, P_c1|P_def64|P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 03 */ { UD_Icall, O_Ep, O_NONE, O_NONE, P_c1|P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 04 */ { UD_Ijmp, O_Ev, O_NONE, O_NONE, P_c1|P_def64|P_depM|P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 05 */ { UD_Ijmp, O_Ep, O_NONE, O_NONE, P_c1|P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 06 */ { UD_Ipush, O_Ev, O_NONE, O_NONE, P_c1|P_def64|P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 07 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__3dnow[256] = { | |
+ /* 00 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 01 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 02 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 03 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 04 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 05 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 06 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 07 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 08 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 09 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 0A */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 0B */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 0C */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 0D */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 0E */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 0F */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 10 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 11 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 12 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 13 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 14 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 15 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 16 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 17 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 18 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 19 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 1A */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 1B */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 1C */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 1D */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 1E */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 1F */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 20 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 21 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 22 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 23 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 24 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 25 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 26 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 27 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 28 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 29 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 2A */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 2B */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 2C */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 2D */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 2E */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 2F */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 30 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 31 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 32 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 33 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 34 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 35 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 36 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 37 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 38 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 39 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 3A */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 3B */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 3C */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 3D */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 3E */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 3F */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 40 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 41 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 42 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 43 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 44 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 45 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 46 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 47 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 48 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 49 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 4A */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 4B */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 4C */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 4D */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 4E */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 4F */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 50 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 51 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 52 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 53 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 54 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 55 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 56 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 57 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 58 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 59 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 5A */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 5B */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 5C */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 5D */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 5E */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 5F */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 60 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 61 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 62 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 63 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 64 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 65 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 66 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 67 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 68 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 69 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 6A */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 6B */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 6C */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 6D */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 6E */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 6F */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 70 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 71 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 72 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 73 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 74 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 75 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 76 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 77 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 78 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 79 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 7A */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 7B */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 7C */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 7D */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 7E */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 7F */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 80 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 81 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 82 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 83 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 84 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 85 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 86 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 87 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 88 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 89 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 8A */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 8B */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 8C */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 8D */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 8E */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 8F */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 90 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 91 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 92 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 93 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 94 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 95 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 96 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 97 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 98 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 99 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 9A */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 9B */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 9C */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 9D */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 9E */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 9F */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* A0 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* A1 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* A2 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* A3 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* A4 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* A5 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* A6 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* A7 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* A8 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* A9 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* AA */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* AB */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* AC */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* AD */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* AE */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* AF */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* B0 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* B1 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* B2 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* B3 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* B4 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* B5 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* B6 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* B7 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* B8 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* B9 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* BA */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* BB */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* BC */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* BD */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* BE */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* BF */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* C0 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* C1 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* C2 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* C3 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* C4 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* C5 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* C6 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* C7 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* C8 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* C9 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* CA */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* CB */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* CC */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* CD */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* CE */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* CF */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* D0 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* D1 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* D2 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* D3 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* D4 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* D5 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* D6 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* D7 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* D8 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* D9 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* DA */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* DB */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* DC */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* DD */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* DE */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* DF */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* E0 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* E1 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* E2 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* E3 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* E4 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* E5 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* E6 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* E7 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* E8 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* E9 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* EA */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* EB */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* EC */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* ED */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* EE */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* EF */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* F0 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* F1 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* F2 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* F3 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* F4 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* F5 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* F6 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* F7 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* F8 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* F9 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* FA */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* FB */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* FC */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* FD */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* FE */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* FF */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__pfx_sse66__0f[256] = { | |
+ /* 00 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 01 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 02 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 03 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 04 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 05 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 06 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 07 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 08 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 09 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 0A */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 0B */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 0C */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 0D */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 0E */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 0F */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 10 */ { UD_Imovupd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 11 */ { UD_Imovupd, O_W, O_V, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 12 */ { UD_Imovlpd, O_V, O_M, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 13 */ { UD_Imovlpd, O_M, O_V, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 14 */ { UD_Iunpcklpd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 15 */ { UD_Iunpckhpd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 16 */ { UD_Imovhpd, O_V, O_M, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 17 */ { UD_Imovhpd, O_M, O_V, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 18 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 19 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 1A */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 1B */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 1C */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 1D */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 1E */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 1F */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 20 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 21 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 22 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 23 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 24 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 25 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 26 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 27 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 28 */ { UD_Imovapd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 29 */ { UD_Imovapd, O_W, O_V, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 2A */ { UD_Icvtpi2pd, O_V, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 2B */ { UD_Imovntpd, O_M, O_V, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 2C */ { UD_Icvttpd2pi, O_P, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 2D */ { UD_Icvtpd2pi, O_P, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 2E */ { UD_Iucomisd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 2F */ { UD_Icomisd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 30 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 31 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 32 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 33 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 34 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 35 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 36 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 37 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 38 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 39 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 3A */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 3B */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 3C */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 3D */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 3E */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 3F */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 40 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 41 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 42 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 43 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 44 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 45 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 46 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 47 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 48 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 49 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 4A */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 4B */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 4C */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 4D */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 4E */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 4F */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 50 */ { UD_Imovmskpd, O_Gd, O_VR, O_NONE, P_oso|P_rexr|P_rexb }, | |
+ /* 51 */ { UD_Isqrtpd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 52 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 53 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 54 */ { UD_Iandpd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 55 */ { UD_Iandnpd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 56 */ { UD_Iorpd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 57 */ { UD_Ixorpd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 58 */ { UD_Iaddpd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 59 */ { UD_Imulpd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 5A */ { UD_Icvtpd2ps, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 5B */ { UD_Icvtps2dq, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 5C */ { UD_Isubpd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 5D */ { UD_Iminpd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 5E */ { UD_Idivpd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 5F */ { UD_Imaxpd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 60 */ { UD_Ipunpcklbw, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 61 */ { UD_Ipunpcklwd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 62 */ { UD_Ipunpckldq, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 63 */ { UD_Ipacksswb, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 64 */ { UD_Ipcmpgtb, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 65 */ { UD_Ipcmpgtw, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 66 */ { UD_Ipcmpgtd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 67 */ { UD_Ipackuswb, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 68 */ { UD_Ipunpckhbw, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 69 */ { UD_Ipunpckhwd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 6A */ { UD_Ipunpckhdq, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 6B */ { UD_Ipackssdw, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 6C */ { UD_Ipunpcklqdq, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 6D */ { UD_Ipunpckhqdq, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 6E */ { UD_Imovd, O_V, O_Ex, O_NONE, P_c2|P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 6F */ { UD_Imovqa, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 70 */ { UD_Ipshufd, O_V, O_W, O_Ib, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 71 */ { UD_Igrp_reg, O_NONE, O_NONE, O_NONE, ITAB__PFX_SSE66__0F__OP_71__REG }, | |
+ /* 72 */ { UD_Igrp_reg, O_NONE, O_NONE, O_NONE, ITAB__PFX_SSE66__0F__OP_72__REG }, | |
+ /* 73 */ { UD_Igrp_reg, O_NONE, O_NONE, O_NONE, ITAB__PFX_SSE66__0F__OP_73__REG }, | |
+ /* 74 */ { UD_Ipcmpeqb, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 75 */ { UD_Ipcmpeqw, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 76 */ { UD_Ipcmpeqd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 77 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 78 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 79 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 7A */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 7B */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 7C */ { UD_Ihaddpd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 7D */ { UD_Ihsubpd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 7E */ { UD_Imovd, O_Ex, O_V, O_NONE, P_c1|P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 7F */ { UD_Imovdqa, O_W, O_V, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 80 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 81 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 82 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 83 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 84 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 85 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 86 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 87 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 88 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 89 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 8A */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 8B */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 8C */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 8D */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 8E */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 8F */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 90 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 91 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 92 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 93 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 94 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 95 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 96 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 97 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 98 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 99 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 9A */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 9B */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 9C */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 9D */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 9E */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 9F */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* A0 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* A1 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* A2 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* A3 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* A4 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* A5 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* A6 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* A7 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* A8 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* A9 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* AA */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* AB */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* AC */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* AD */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* AE */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* AF */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* B0 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* B1 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* B2 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* B3 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* B4 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* B5 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* B6 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* B7 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* B8 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* B9 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* BA */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* BB */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* BC */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* BD */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* BE */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* BF */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* C0 */ { UD_Ixadd, O_Eb, O_Gb, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* C1 */ { UD_Ixadd, O_Ev, O_Gv, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* C2 */ { UD_Icmppd, O_V, O_W, O_Ib, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* C3 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* C4 */ { UD_Ipinsrw, O_V, O_Ew, O_Ib, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* C5 */ { UD_Ipextrw, O_Gd, O_VR, O_Ib, P_aso|P_rexr|P_rexb }, | |
+ /* C6 */ { UD_Ishufpd, O_V, O_W, O_Ib, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* C7 */ { UD_Igrp_reg, O_NONE, O_NONE, O_NONE, ITAB__PFX_SSE66__0F__OP_C7__REG }, | |
+ /* C8 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* C9 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* CA */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* CB */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* CC */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* CD */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* CE */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* CF */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* D0 */ { UD_Iaddsubpd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* D1 */ { UD_Ipsrlw, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* D2 */ { UD_Ipsrld, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* D3 */ { UD_Ipsrlq, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* D4 */ { UD_Ipaddq, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* D5 */ { UD_Ipmullw, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* D6 */ { UD_Imovq, O_W, O_V, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* D7 */ { UD_Ipmovmskb, O_Gd, O_VR, O_NONE, P_rexr|P_rexb }, | |
+ /* D8 */ { UD_Ipsubusb, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* D9 */ { UD_Ipsubusw, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* DA */ { UD_Ipminub, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* DB */ { UD_Ipand, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* DC */ { UD_Ipsubusb, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* DD */ { UD_Ipunpckhbw, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* DE */ { UD_Ipmaxub, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* DF */ { UD_Ipandn, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* E0 */ { UD_Ipavgb, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* E1 */ { UD_Ipsraw, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* E2 */ { UD_Ipsrad, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* E3 */ { UD_Ipavgw, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* E4 */ { UD_Ipmulhuw, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* E5 */ { UD_Ipmulhw, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* E6 */ { UD_Icvttpd2dq, O_V, O_W, O_NONE, P_none }, | |
+ /* E7 */ { UD_Imovntdq, O_M, O_V, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* E8 */ { UD_Ipsubsb, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* E9 */ { UD_Ipsubsw, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* EA */ { UD_Ipminsw, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* EB */ { UD_Ipor, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* EC */ { UD_Ipaddsb, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* ED */ { UD_Ipaddsw, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* EE */ { UD_Ipmaxsw, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* EF */ { UD_Ipxor, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* F0 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* F1 */ { UD_Ipsllw, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* F2 */ { UD_Ipslld, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* F3 */ { UD_Ipsllq, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* F4 */ { UD_Ipmuludq, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* F5 */ { UD_Ipmaddwd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* F6 */ { UD_Ipsadbw, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* F7 */ { UD_Imaskmovq, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* F8 */ { UD_Ipsubb, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* F9 */ { UD_Ipsubw, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* FA */ { UD_Ipsubd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* FB */ { UD_Ipsubq, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* FC */ { UD_Ipaddb, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* FD */ { UD_Ipaddw, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* FE */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* FF */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__pfx_sse66__0f__op_71__reg[8] = { | |
+ /* 00 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 01 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 02 */ { UD_Ipsrlw, O_VR, O_Ib, O_NONE, P_rexb }, | |
+ /* 03 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 04 */ { UD_Ipsraw, O_VR, O_Ib, O_NONE, P_rexb }, | |
+ /* 05 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 06 */ { UD_Ipsllw, O_VR, O_Ib, O_NONE, P_rexb }, | |
+ /* 07 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__pfx_sse66__0f__op_72__reg[8] = { | |
+ /* 00 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 01 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 02 */ { UD_Ipsrld, O_VR, O_Ib, O_NONE, P_rexb }, | |
+ /* 03 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 04 */ { UD_Ipsrad, O_VR, O_Ib, O_NONE, P_rexb }, | |
+ /* 05 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 06 */ { UD_Ipslld, O_VR, O_Ib, O_NONE, P_rexb }, | |
+ /* 07 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__pfx_sse66__0f__op_73__reg[8] = { | |
+ /* 00 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 01 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 02 */ { UD_Ipsrlq, O_VR, O_Ib, O_NONE, P_rexb }, | |
+ /* 03 */ { UD_Ipsrldq, O_VR, O_Ib, O_NONE, P_rexb }, | |
+ /* 04 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 05 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 06 */ { UD_Ipsllq, O_VR, O_Ib, O_NONE, P_rexb }, | |
+ /* 07 */ { UD_Ipslldq, O_VR, O_Ib, O_NONE, P_rexb }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__pfx_sse66__0f__op_c7__reg[8] = { | |
+ /* 00 */ { UD_Igrp_vendor, O_NONE, O_NONE, O_NONE, ITAB__PFX_SSE66__0F__OP_C7__REG__OP_00__VENDOR }, | |
+ /* 01 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 02 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 03 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 04 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 05 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 06 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 07 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__pfx_sse66__0f__op_c7__reg__op_00__vendor[2] = { | |
+ /* 00 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 01 */ { UD_Ivmclear, O_Mq, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__pfx_ssef2__0f[256] = { | |
+ /* 00 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 01 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 02 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 03 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 04 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 05 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 06 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 07 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 08 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 09 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 0A */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 0B */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 0C */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 0D */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 0E */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 0F */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 10 */ { UD_Imovsd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 11 */ { UD_Imovsd, O_W, O_V, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 12 */ { UD_Imovddup, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 13 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 14 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 15 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 16 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 17 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 18 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 19 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 1A */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 1B */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 1C */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 1D */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 1E */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 1F */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 20 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 21 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 22 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 23 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 24 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 25 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 26 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 27 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 28 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 29 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 2A */ { UD_Icvtsi2sd, O_V, O_Ex, O_NONE, P_c2|P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* 2B */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 2C */ { UD_Icvttsd2si, O_Gvw, O_W, O_NONE, P_c1|P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 2D */ { UD_Icvtsd2si, O_Gvw, O_W, O_NONE, P_c1|P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 2E */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 2F */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 30 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 31 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 32 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 33 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 34 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 35 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 36 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 37 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 38 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 39 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 3A */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 3B */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 3C */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 3D */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 3E */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 3F */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 40 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 41 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 42 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 43 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 44 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 45 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 46 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 47 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 48 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 49 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 4A */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 4B */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 4C */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 4D */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 4E */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 4F */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 50 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 51 */ { UD_Isqrtsd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 52 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 53 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 54 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 55 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 56 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 57 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 58 */ { UD_Iaddsd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 59 */ { UD_Imulsd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 5A */ { UD_Icvtsd2ss, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 5B */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 5C */ { UD_Isubsd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 5D */ { UD_Iminsd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 5E */ { UD_Idivsd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 5F */ { UD_Imaxsd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 60 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 61 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 62 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 63 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 64 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 65 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 66 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 67 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 68 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 69 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 6A */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 6B */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 6C */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 6D */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 6E */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 6F */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 70 */ { UD_Ipshuflw, O_V, O_W, O_Ib, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 71 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 72 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 73 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 74 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 75 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 76 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 77 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 78 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 79 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 7A */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 7B */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 7C */ { UD_Ihaddps, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 7D */ { UD_Ihsubps, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 7E */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 7F */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 80 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 81 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 82 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 83 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 84 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 85 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 86 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 87 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 88 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 89 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 8A */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 8B */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 8C */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 8D */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 8E */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 8F */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 90 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 91 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 92 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 93 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 94 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 95 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 96 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 97 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 98 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 99 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 9A */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 9B */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 9C */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 9D */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 9E */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 9F */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* A0 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* A1 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* A2 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* A3 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* A4 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* A5 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* A6 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* A7 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* A8 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* A9 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* AA */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* AB */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* AC */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* AD */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* AE */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* AF */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* B0 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* B1 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* B2 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* B3 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* B4 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* B5 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* B6 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* B7 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* B8 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* B9 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* BA */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* BB */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* BC */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* BD */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* BE */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* BF */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* C0 */ { UD_Ixadd, O_Eb, O_Gb, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* C1 */ { UD_Ixadd, O_Ev, O_Gv, O_NONE, P_aso|P_oso|P_rexr|P_rexx|P_rexb }, | |
+ /* C2 */ { UD_Icmpsd, O_V, O_W, O_Ib, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* C3 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* C4 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* C5 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* C6 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* C7 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* C8 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* C9 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* CA */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* CB */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* CC */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* CD */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* CE */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* CF */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* D0 */ { UD_Iaddsubps, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* D1 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* D2 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* D3 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* D4 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* D5 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* D6 */ { UD_Imovdq2q, O_P, O_VR, O_NONE, P_aso|P_rexb }, | |
+ /* D7 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* D8 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* D9 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* DA */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* DB */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* DC */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* DD */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* DE */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* DF */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* E0 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* E1 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* E2 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* E3 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* E4 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* E5 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* E6 */ { UD_Icvtpd2dq, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* E7 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* E8 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* E9 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* EA */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* EB */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* EC */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* ED */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* EE */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* EF */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* F0 */ { UD_Ilddqu, O_V, O_M, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* F1 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* F2 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* F3 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* F4 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* F5 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* F6 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* F7 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* F8 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* F9 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* FA */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* FB */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* FC */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* FD */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* FE */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* FF */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__pfx_ssef3__0f[256] = { | |
+ /* 00 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 01 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 02 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 03 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 04 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 05 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 06 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 07 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 08 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 09 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 0A */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 0B */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 0C */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 0D */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 0E */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 0F */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 10 */ { UD_Imovss, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 11 */ { UD_Imovss, O_W, O_V, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 12 */ { UD_Imovsldup, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 13 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 14 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 15 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 16 */ { UD_Imovshdup, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 17 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 18 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 19 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 1A */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 1B */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 1C */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 1D */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 1E */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 1F */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 20 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 21 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 22 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 23 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 24 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 25 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 26 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 27 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 28 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 29 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 2A */ { UD_Icvtsi2ss, O_V, O_Ex, O_NONE, P_c2|P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 2B */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 2C */ { UD_Icvttss2si, O_Gvw, O_W, O_NONE, P_c1|P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 2D */ { UD_Icvtss2si, O_Gvw, O_W, O_NONE, P_c1|P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 2E */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 2F */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 30 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 31 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 32 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 33 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 34 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 35 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 36 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 37 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 38 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 39 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 3A */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 3B */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 3C */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 3D */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 3E */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 3F */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 40 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 41 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 42 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 43 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 44 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 45 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 46 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 47 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 48 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 49 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 4A */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 4B */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 4C */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 4D */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 4E */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 4F */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 50 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 51 */ { UD_Isqrtss, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 52 */ { UD_Irsqrtss, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 53 */ { UD_Ircpss, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 54 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 55 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 56 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 57 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 58 */ { UD_Iaddss, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 59 */ { UD_Imulss, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 5A */ { UD_Icvtss2sd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 5B */ { UD_Icvttps2dq, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 5C */ { UD_Isubss, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 5D */ { UD_Iminss, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 5E */ { UD_Idivss, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 5F */ { UD_Imaxss, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 60 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 61 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 62 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 63 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 64 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 65 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 66 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 67 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 68 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 69 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 6A */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 6B */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 6C */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 6D */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 6E */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 6F */ { UD_Imovdqu, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 70 */ { UD_Ipshufhw, O_V, O_W, O_Ib, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 71 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 72 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 73 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 74 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 75 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 76 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 77 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 78 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 79 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 7A */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 7B */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 7C */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 7D */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 7E */ { UD_Imovq, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 7F */ { UD_Imovdqu, O_W, O_V, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* 80 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 81 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 82 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 83 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 84 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 85 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 86 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 87 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 88 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 89 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 8A */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 8B */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 8C */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 8D */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 8E */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 8F */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 90 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 91 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 92 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 93 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 94 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 95 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 96 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 97 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 98 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 99 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 9A */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 9B */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 9C */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 9D */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 9E */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 9F */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* A0 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* A1 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* A2 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* A3 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* A4 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* A5 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* A6 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* A7 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* A8 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* A9 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* AA */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* AB */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* AC */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* AD */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* AE */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* AF */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* B0 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* B1 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* B2 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* B3 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* B4 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* B5 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* B6 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* B7 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* B8 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* B9 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* BA */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* BB */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* BC */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* BD */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* BE */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* BF */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* C0 */ { UD_Ixadd, O_Eb, O_Gb, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* C1 */ { UD_Ixadd, O_Ev, O_Gv, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, | |
+ /* C2 */ { UD_Icmpss, O_V, O_W, O_Ib, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* C3 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* C4 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* C5 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* C6 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* C7 */ { UD_Igrp_reg, O_NONE, O_NONE, O_NONE, ITAB__PFX_SSEF3__0F__OP_C7__REG }, | |
+ /* C8 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* C9 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* CA */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* CB */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* CC */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* CD */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* CE */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* CF */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* D0 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* D1 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* D2 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* D3 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* D4 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* D5 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* D6 */ { UD_Imovq2dq, O_V, O_PR, O_NONE, P_aso }, | |
+ /* D7 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* D8 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* D9 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* DA */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* DB */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* DC */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* DD */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* DE */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* DF */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* E0 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* E1 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* E2 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* E3 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* E4 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* E5 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* E6 */ { UD_Icvtdq2pd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+ /* E7 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* E8 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* E9 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* EA */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* EB */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* EC */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* ED */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* EE */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* EF */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* F0 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* F1 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* F2 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* F3 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* F4 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* F5 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* F6 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* F7 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* F8 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* F9 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* FA */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* FB */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* FC */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* FD */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* FE */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* FF */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__pfx_ssef3__0f__op_c7__reg[8] = { | |
+ /* 00 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 01 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 02 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 03 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 04 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 05 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 06 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 07 */ { UD_Igrp_vendor, O_NONE, O_NONE, O_NONE, ITAB__PFX_SSEF3__0F__OP_C7__REG__OP_07__VENDOR }, | |
+}; | |
+ | |
+static struct ud_itab_entry itab__pfx_ssef3__0f__op_c7__reg__op_07__vendor[2] = { | |
+ /* 00 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, | |
+ /* 01 */ { UD_Ivmxon, O_Mq, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, | |
+}; | |
+ | |
+/* the order of this table matches enum ud_itab_index */ | |
+struct ud_itab_entry * ud_itab_list[] = { | |
+ itab__0f, | |
+ itab__0f__op_00__reg, | |
+ itab__0f__op_01__reg, | |
+ itab__0f__op_01__reg__op_00__mod, | |
+ itab__0f__op_01__reg__op_00__mod__op_01__rm, | |
+ itab__0f__op_01__reg__op_00__mod__op_01__rm__op_01__vendor, | |
+ itab__0f__op_01__reg__op_00__mod__op_01__rm__op_03__vendor, | |
+ itab__0f__op_01__reg__op_00__mod__op_01__rm__op_04__vendor, | |
+ itab__0f__op_01__reg__op_01__mod, | |
+ itab__0f__op_01__reg__op_01__mod__op_01__rm, | |
+ itab__0f__op_01__reg__op_02__mod, | |
+ itab__0f__op_01__reg__op_03__mod, | |
+ itab__0f__op_01__reg__op_03__mod__op_01__rm, | |
+ itab__0f__op_01__reg__op_03__mod__op_01__rm__op_00__vendor, | |
+ itab__0f__op_01__reg__op_03__mod__op_01__rm__op_01__vendor, | |
+ itab__0f__op_01__reg__op_03__mod__op_01__rm__op_02__vendor, | |
+ itab__0f__op_01__reg__op_03__mod__op_01__rm__op_03__vendor, | |
+ itab__0f__op_01__reg__op_03__mod__op_01__rm__op_04__vendor, | |
+ itab__0f__op_01__reg__op_03__mod__op_01__rm__op_05__vendor, | |
+ itab__0f__op_01__reg__op_03__mod__op_01__rm__op_06__vendor, | |
+ itab__0f__op_01__reg__op_03__mod__op_01__rm__op_07__vendor, | |
+ itab__0f__op_01__reg__op_04__mod, | |
+ itab__0f__op_01__reg__op_06__mod, | |
+ itab__0f__op_01__reg__op_07__mod, | |
+ itab__0f__op_01__reg__op_07__mod__op_01__rm, | |
+ itab__0f__op_01__reg__op_07__mod__op_01__rm__op_01__vendor, | |
+ itab__0f__op_0d__reg, | |
+ itab__0f__op_18__reg, | |
+ itab__0f__op_71__reg, | |
+ itab__0f__op_72__reg, | |
+ itab__0f__op_73__reg, | |
+ itab__0f__op_ae__reg, | |
+ itab__0f__op_ae__reg__op_05__mod, | |
+ itab__0f__op_ae__reg__op_05__mod__op_01__rm, | |
+ itab__0f__op_ae__reg__op_06__mod, | |
+ itab__0f__op_ae__reg__op_06__mod__op_01__rm, | |
+ itab__0f__op_ae__reg__op_07__mod, | |
+ itab__0f__op_ae__reg__op_07__mod__op_01__rm, | |
+ itab__0f__op_ba__reg, | |
+ itab__0f__op_c7__reg, | |
+ itab__0f__op_c7__reg__op_00__vendor, | |
+ itab__0f__op_c7__reg__op_07__vendor, | |
+ itab__0f__op_d9__mod, | |
+ itab__0f__op_d9__mod__op_01__x87, | |
+ itab__1byte, | |
+ itab__1byte__op_60__osize, | |
+ itab__1byte__op_61__osize, | |
+ itab__1byte__op_63__mode, | |
+ itab__1byte__op_6d__osize, | |
+ itab__1byte__op_6f__osize, | |
+ itab__1byte__op_80__reg, | |
+ itab__1byte__op_81__reg, | |
+ itab__1byte__op_82__reg, | |
+ itab__1byte__op_83__reg, | |
+ itab__1byte__op_8f__reg, | |
+ itab__1byte__op_98__osize, | |
+ itab__1byte__op_99__osize, | |
+ itab__1byte__op_9c__mode, | |
+ itab__1byte__op_9c__mode__op_00__osize, | |
+ itab__1byte__op_9c__mode__op_01__osize, | |
+ itab__1byte__op_9d__mode, | |
+ itab__1byte__op_9d__mode__op_00__osize, | |
+ itab__1byte__op_9d__mode__op_01__osize, | |
+ itab__1byte__op_a5__osize, | |
+ itab__1byte__op_a7__osize, | |
+ itab__1byte__op_ab__osize, | |
+ itab__1byte__op_ad__osize, | |
+ itab__1byte__op_ae__mod, | |
+ itab__1byte__op_ae__mod__op_00__reg, | |
+ itab__1byte__op_af__osize, | |
+ itab__1byte__op_c0__reg, | |
+ itab__1byte__op_c1__reg, | |
+ itab__1byte__op_c6__reg, | |
+ itab__1byte__op_c7__reg, | |
+ itab__1byte__op_cf__osize, | |
+ itab__1byte__op_d0__reg, | |
+ itab__1byte__op_d1__reg, | |
+ itab__1byte__op_d2__reg, | |
+ itab__1byte__op_d3__reg, | |
+ itab__1byte__op_d8__mod, | |
+ itab__1byte__op_d8__mod__op_00__reg, | |
+ itab__1byte__op_d8__mod__op_01__x87, | |
+ itab__1byte__op_d9__mod, | |
+ itab__1byte__op_d9__mod__op_00__reg, | |
+ itab__1byte__op_d9__mod__op_01__x87, | |
+ itab__1byte__op_da__mod, | |
+ itab__1byte__op_da__mod__op_00__reg, | |
+ itab__1byte__op_da__mod__op_01__x87, | |
+ itab__1byte__op_db__mod, | |
+ itab__1byte__op_db__mod__op_00__reg, | |
+ itab__1byte__op_db__mod__op_01__x87, | |
+ itab__1byte__op_dc__mod, | |
+ itab__1byte__op_dc__mod__op_00__reg, | |
+ itab__1byte__op_dc__mod__op_01__x87, | |
+ itab__1byte__op_dd__mod, | |
+ itab__1byte__op_dd__mod__op_00__reg, | |
+ itab__1byte__op_dd__mod__op_01__x87, | |
+ itab__1byte__op_de__mod, | |
+ itab__1byte__op_de__mod__op_00__reg, | |
+ itab__1byte__op_de__mod__op_01__x87, | |
+ itab__1byte__op_df__mod, | |
+ itab__1byte__op_df__mod__op_00__reg, | |
+ itab__1byte__op_df__mod__op_01__x87, | |
+ itab__1byte__op_e3__asize, | |
+ itab__1byte__op_f6__reg, | |
+ itab__1byte__op_f7__reg, | |
+ itab__1byte__op_fe__reg, | |
+ itab__1byte__op_ff__reg, | |
+ itab__3dnow, | |
+ itab__pfx_sse66__0f, | |
+ itab__pfx_sse66__0f__op_71__reg, | |
+ itab__pfx_sse66__0f__op_72__reg, | |
+ itab__pfx_sse66__0f__op_73__reg, | |
+ itab__pfx_sse66__0f__op_c7__reg, | |
+ itab__pfx_sse66__0f__op_c7__reg__op_00__vendor, | |
+ itab__pfx_ssef2__0f, | |
+ itab__pfx_ssef3__0f, | |
+ itab__pfx_ssef3__0f__op_c7__reg, | |
+ itab__pfx_ssef3__0f__op_c7__reg__op_07__vendor, | |
+}; | |
Index: lib/libudis86/udis86.c | |
=================================================================== | |
--- lib/libudis86/udis86.c (revision 0) | |
+++ lib/libudis86/udis86.c (working copy) | |
@@ -0,0 +1,154 @@ | |
+/* ----------------------------------------------------------------------------- | |
+ * udis86.c | |
+ * | |
+ * Copyright (c) 2004, 2005, 2006, Vivek Mohan <vivek@sig9.com> | |
+ * All rights reserved. See LICENSE | |
+ * ----------------------------------------------------------------------------- | |
+ */ | |
+ | |
+#include <stdlib.h> | |
+#include <stdio.h> | |
+#include <string.h> | |
+ | |
+#include "input.h" | |
+#include "extern.h" | |
+ | |
+/* ============================================================================= | |
+ * ud_init() - Initializes ud_t object. | |
+ * ============================================================================= | |
+ */ | |
+extern void | |
+ud_init(struct ud* u) | |
+{ | |
+ memset((void*)u, 0, sizeof(struct ud)); | |
+ ud_set_mode(u, 16); | |
+ u->mnemonic = UD_Iinvalid; | |
+ ud_set_pc(u, 0); | |
+#ifndef __UD_STANDALONE__ | |
+ ud_set_input_file(u, stdin); | |
+#endif /* __UD_STANDALONE__ */ | |
+} | |
+ | |
+/* ============================================================================= | |
+ * ud_disassemble() - disassembles one instruction and returns the number of | |
+ * bytes disassembled. A zero means end of disassembly. | |
+ * ============================================================================= | |
+ */ | |
+extern unsigned int | |
+ud_disassemble(struct ud* u) | |
+{ | |
+ if (ud_input_end(u)) | |
+ return 0; | |
+ | |
+ | |
+ u->insn_buffer[0] = u->insn_hexcode[0] = 0; | |
+ | |
+ | |
+ if (ud_decode(u) == 0) | |
+ return 0; | |
+ if (u->translator) | |
+ u->translator(u); | |
+ return ud_insn_len(u); | |
+} | |
+ | |
+/* ============================================================================= | |
+ * ud_set_mode() - Set Disassemly Mode. | |
+ * ============================================================================= | |
+ */ | |
+extern void | |
+ud_set_mode(struct ud* u, uint8_t m) | |
+{ | |
+ switch(m) { | |
+ case 16: | |
+ case 32: | |
+ case 64: u->dis_mode = m ; return; | |
+ default: u->dis_mode = 16; return; | |
+ } | |
+} | |
+ | |
+/* ============================================================================= | |
+ * ud_set_vendor() - Set vendor. | |
+ * ============================================================================= | |
+ */ | |
+extern void | |
+ud_set_vendor(struct ud* u, unsigned v) | |
+{ | |
+ switch(v) { | |
+ case UD_VENDOR_INTEL: | |
+ u->vendor = v; | |
+ break; | |
+ default: | |
+ u->vendor = UD_VENDOR_AMD; | |
+ } | |
+} | |
+ | |
+/* ============================================================================= | |
+ * ud_set_pc() - Sets code origin. | |
+ * ============================================================================= | |
+ */ | |
+extern void | |
+ud_set_pc(struct ud* u, uint64_t o) | |
+{ | |
+ u->pc = o; | |
+} | |
+ | |
+/* ============================================================================= | |
+ * ud_set_syntax() - Sets the output syntax. | |
+ * ============================================================================= | |
+ */ | |
+extern void | |
+ud_set_syntax(struct ud* u, void (*t)(struct ud*)) | |
+{ | |
+ u->translator = t; | |
+} | |
+ | |
+/* ============================================================================= | |
+ * ud_insn() - returns the disassembled instruction | |
+ * ============================================================================= | |
+ */ | |
+extern char* | |
+ud_insn_asm(struct ud* u) | |
+{ | |
+ return u->insn_buffer; | |
+} | |
+ | |
+/* ============================================================================= | |
+ * ud_insn_offset() - Returns the offset. | |
+ * ============================================================================= | |
+ */ | |
+extern uint64_t | |
+ud_insn_off(struct ud* u) | |
+{ | |
+ return u->insn_offset; | |
+} | |
+ | |
+ | |
+/* ============================================================================= | |
+ * ud_insn_hex() - Returns hex form of disassembled instruction. | |
+ * ============================================================================= | |
+ */ | |
+extern char* | |
+ud_insn_hex(struct ud* u) | |
+{ | |
+ return u->insn_hexcode; | |
+} | |
+ | |
+/* ============================================================================= | |
+ * ud_insn_ptr() - Returns code disassembled. | |
+ * ============================================================================= | |
+ */ | |
+extern uint8_t* | |
+ud_insn_ptr(struct ud* u) | |
+{ | |
+ return u->inp_sess; | |
+} | |
+ | |
+/* ============================================================================= | |
+ * ud_insn_len() - Returns the count of bytes disassembled. | |
+ * ============================================================================= | |
+ */ | |
+extern unsigned int | |
+ud_insn_len(struct ud* u) | |
+{ | |
+ return u->inp_ctr; | |
+} | |
Property changes on: lib/libudis86/udis86.c | |
___________________________________________________________________ | |
Added: svn:executable | |
## -0,0 +1 ## | |
+* | |
\ No newline at end of property | |
Index: lib/libudis86/itab.h | |
=================================================================== | |
--- lib/libudis86/itab.h (revision 0) | |
+++ lib/libudis86/itab.h (working copy) | |
@@ -0,0 +1,719 @@ | |
+ | |
+/* itab.h -- auto generated by opgen.py, do not edit. */ | |
+ | |
+#ifndef UD_ITAB_H | |
+#define UD_ITAB_H | |
+ | |
+ | |
+ | |
+enum ud_itab_vendor_index { | |
+ ITAB__VENDOR_INDX__AMD, | |
+ ITAB__VENDOR_INDX__INTEL, | |
+}; | |
+ | |
+ | |
+enum ud_itab_mode_index { | |
+ ITAB__MODE_INDX__16, | |
+ ITAB__MODE_INDX__32, | |
+ ITAB__MODE_INDX__64 | |
+}; | |
+ | |
+ | |
+enum ud_itab_mod_index { | |
+ ITAB__MOD_INDX__NOT_11, | |
+ ITAB__MOD_INDX__11 | |
+}; | |
+ | |
+ | |
+enum ud_itab_index { | |
+ ITAB__0F, | |
+ ITAB__0F__OP_00__REG, | |
+ ITAB__0F__OP_01__REG, | |
+ ITAB__0F__OP_01__REG__OP_00__MOD, | |
+ ITAB__0F__OP_01__REG__OP_00__MOD__OP_01__RM, | |
+ ITAB__0F__OP_01__REG__OP_00__MOD__OP_01__RM__OP_01__VENDOR, | |
+ ITAB__0F__OP_01__REG__OP_00__MOD__OP_01__RM__OP_03__VENDOR, | |
+ ITAB__0F__OP_01__REG__OP_00__MOD__OP_01__RM__OP_04__VENDOR, | |
+ ITAB__0F__OP_01__REG__OP_01__MOD, | |
+ ITAB__0F__OP_01__REG__OP_01__MOD__OP_01__RM, | |
+ ITAB__0F__OP_01__REG__OP_02__MOD, | |
+ ITAB__0F__OP_01__REG__OP_03__MOD, | |
+ ITAB__0F__OP_01__REG__OP_03__MOD__OP_01__RM, | |
+ ITAB__0F__OP_01__REG__OP_03__MOD__OP_01__RM__OP_00__VENDOR, | |
+ ITAB__0F__OP_01__REG__OP_03__MOD__OP_01__RM__OP_01__VENDOR, | |
+ ITAB__0F__OP_01__REG__OP_03__MOD__OP_01__RM__OP_02__VENDOR, | |
+ ITAB__0F__OP_01__REG__OP_03__MOD__OP_01__RM__OP_03__VENDOR, | |
+ ITAB__0F__OP_01__REG__OP_03__MOD__OP_01__RM__OP_04__VENDOR, | |
+ ITAB__0F__OP_01__REG__OP_03__MOD__OP_01__RM__OP_05__VENDOR, | |
+ ITAB__0F__OP_01__REG__OP_03__MOD__OP_01__RM__OP_06__VENDOR, | |
+ ITAB__0F__OP_01__REG__OP_03__MOD__OP_01__RM__OP_07__VENDOR, | |
+ ITAB__0F__OP_01__REG__OP_04__MOD, | |
+ ITAB__0F__OP_01__REG__OP_06__MOD, | |
+ ITAB__0F__OP_01__REG__OP_07__MOD, | |
+ ITAB__0F__OP_01__REG__OP_07__MOD__OP_01__RM, | |
+ ITAB__0F__OP_01__REG__OP_07__MOD__OP_01__RM__OP_01__VENDOR, | |
+ ITAB__0F__OP_0D__REG, | |
+ ITAB__0F__OP_18__REG, | |
+ ITAB__0F__OP_71__REG, | |
+ ITAB__0F__OP_72__REG, | |
+ ITAB__0F__OP_73__REG, | |
+ ITAB__0F__OP_AE__REG, | |
+ ITAB__0F__OP_AE__REG__OP_05__MOD, | |
+ ITAB__0F__OP_AE__REG__OP_05__MOD__OP_01__RM, | |
+ ITAB__0F__OP_AE__REG__OP_06__MOD, | |
+ ITAB__0F__OP_AE__REG__OP_06__MOD__OP_01__RM, | |
+ ITAB__0F__OP_AE__REG__OP_07__MOD, | |
+ ITAB__0F__OP_AE__REG__OP_07__MOD__OP_01__RM, | |
+ ITAB__0F__OP_BA__REG, | |
+ ITAB__0F__OP_C7__REG, | |
+ ITAB__0F__OP_C7__REG__OP_00__VENDOR, | |
+ ITAB__0F__OP_C7__REG__OP_07__VENDOR, | |
+ ITAB__0F__OP_D9__MOD, | |
+ ITAB__0F__OP_D9__MOD__OP_01__X87, | |
+ ITAB__1BYTE, | |
+ ITAB__1BYTE__OP_60__OSIZE, | |
+ ITAB__1BYTE__OP_61__OSIZE, | |
+ ITAB__1BYTE__OP_63__MODE, | |
+ ITAB__1BYTE__OP_6D__OSIZE, | |
+ ITAB__1BYTE__OP_6F__OSIZE, | |
+ ITAB__1BYTE__OP_80__REG, | |
+ ITAB__1BYTE__OP_81__REG, | |
+ ITAB__1BYTE__OP_82__REG, | |
+ ITAB__1BYTE__OP_83__REG, | |
+ ITAB__1BYTE__OP_8F__REG, | |
+ ITAB__1BYTE__OP_98__OSIZE, | |
+ ITAB__1BYTE__OP_99__OSIZE, | |
+ ITAB__1BYTE__OP_9C__MODE, | |
+ ITAB__1BYTE__OP_9C__MODE__OP_00__OSIZE, | |
+ ITAB__1BYTE__OP_9C__MODE__OP_01__OSIZE, | |
+ ITAB__1BYTE__OP_9D__MODE, | |
+ ITAB__1BYTE__OP_9D__MODE__OP_00__OSIZE, | |
+ ITAB__1BYTE__OP_9D__MODE__OP_01__OSIZE, | |
+ ITAB__1BYTE__OP_A5__OSIZE, | |
+ ITAB__1BYTE__OP_A7__OSIZE, | |
+ ITAB__1BYTE__OP_AB__OSIZE, | |
+ ITAB__1BYTE__OP_AD__OSIZE, | |
+ ITAB__1BYTE__OP_AE__MOD, | |
+ ITAB__1BYTE__OP_AE__MOD__OP_00__REG, | |
+ ITAB__1BYTE__OP_AF__OSIZE, | |
+ ITAB__1BYTE__OP_C0__REG, | |
+ ITAB__1BYTE__OP_C1__REG, | |
+ ITAB__1BYTE__OP_C6__REG, | |
+ ITAB__1BYTE__OP_C7__REG, | |
+ ITAB__1BYTE__OP_CF__OSIZE, | |
+ ITAB__1BYTE__OP_D0__REG, | |
+ ITAB__1BYTE__OP_D1__REG, | |
+ ITAB__1BYTE__OP_D2__REG, | |
+ ITAB__1BYTE__OP_D3__REG, | |
+ ITAB__1BYTE__OP_D8__MOD, | |
+ ITAB__1BYTE__OP_D8__MOD__OP_00__REG, | |
+ ITAB__1BYTE__OP_D8__MOD__OP_01__X87, | |
+ ITAB__1BYTE__OP_D9__MOD, | |
+ ITAB__1BYTE__OP_D9__MOD__OP_00__REG, | |
+ ITAB__1BYTE__OP_D9__MOD__OP_01__X87, | |
+ ITAB__1BYTE__OP_DA__MOD, | |
+ ITAB__1BYTE__OP_DA__MOD__OP_00__REG, | |
+ ITAB__1BYTE__OP_DA__MOD__OP_01__X87, | |
+ ITAB__1BYTE__OP_DB__MOD, | |
+ ITAB__1BYTE__OP_DB__MOD__OP_00__REG, | |
+ ITAB__1BYTE__OP_DB__MOD__OP_01__X87, | |
+ ITAB__1BYTE__OP_DC__MOD, | |
+ ITAB__1BYTE__OP_DC__MOD__OP_00__REG, | |
+ ITAB__1BYTE__OP_DC__MOD__OP_01__X87, | |
+ ITAB__1BYTE__OP_DD__MOD, | |
+ ITAB__1BYTE__OP_DD__MOD__OP_00__REG, | |
+ ITAB__1BYTE__OP_DD__MOD__OP_01__X87, | |
+ ITAB__1BYTE__OP_DE__MOD, | |
+ ITAB__1BYTE__OP_DE__MOD__OP_00__REG, | |
+ ITAB__1BYTE__OP_DE__MOD__OP_01__X87, | |
+ ITAB__1BYTE__OP_DF__MOD, | |
+ ITAB__1BYTE__OP_DF__MOD__OP_00__REG, | |
+ ITAB__1BYTE__OP_DF__MOD__OP_01__X87, | |
+ ITAB__1BYTE__OP_E3__ASIZE, | |
+ ITAB__1BYTE__OP_F6__REG, | |
+ ITAB__1BYTE__OP_F7__REG, | |
+ ITAB__1BYTE__OP_FE__REG, | |
+ ITAB__1BYTE__OP_FF__REG, | |
+ ITAB__3DNOW, | |
+ ITAB__PFX_SSE66__0F, | |
+ ITAB__PFX_SSE66__0F__OP_71__REG, | |
+ ITAB__PFX_SSE66__0F__OP_72__REG, | |
+ ITAB__PFX_SSE66__0F__OP_73__REG, | |
+ ITAB__PFX_SSE66__0F__OP_C7__REG, | |
+ ITAB__PFX_SSE66__0F__OP_C7__REG__OP_00__VENDOR, | |
+ ITAB__PFX_SSEF2__0F, | |
+ ITAB__PFX_SSEF3__0F, | |
+ ITAB__PFX_SSEF3__0F__OP_C7__REG, | |
+ ITAB__PFX_SSEF3__0F__OP_C7__REG__OP_07__VENDOR, | |
+}; | |
+ | |
+ | |
+enum ud_mnemonic_code { | |
+ UD_I3dnow, | |
+ UD_Iaaa, | |
+ UD_Iaad, | |
+ UD_Iaam, | |
+ UD_Iaas, | |
+ UD_Iadc, | |
+ UD_Iadd, | |
+ UD_Iaddpd, | |
+ UD_Iaddps, | |
+ UD_Iaddsd, | |
+ UD_Iaddss, | |
+ UD_Iaddsubpd, | |
+ UD_Iaddsubps, | |
+ UD_Iand, | |
+ UD_Iandpd, | |
+ UD_Iandps, | |
+ UD_Iandnpd, | |
+ UD_Iandnps, | |
+ UD_Iarpl, | |
+ UD_Imovsxd, | |
+ UD_Ibound, | |
+ UD_Ibsf, | |
+ UD_Ibsr, | |
+ UD_Ibswap, | |
+ UD_Ibt, | |
+ UD_Ibtc, | |
+ UD_Ibtr, | |
+ UD_Ibts, | |
+ UD_Icall, | |
+ UD_Icbw, | |
+ UD_Icwde, | |
+ UD_Icdqe, | |
+ UD_Iclc, | |
+ UD_Icld, | |
+ UD_Iclflush, | |
+ UD_Iclgi, | |
+ UD_Icli, | |
+ UD_Iclts, | |
+ UD_Icmc, | |
+ UD_Icmovo, | |
+ UD_Icmovno, | |
+ UD_Icmovb, | |
+ UD_Icmovae, | |
+ UD_Icmovz, | |
+ UD_Icmovnz, | |
+ UD_Icmovbe, | |
+ UD_Icmova, | |
+ UD_Icmovs, | |
+ UD_Icmovns, | |
+ UD_Icmovp, | |
+ UD_Icmovnp, | |
+ UD_Icmovl, | |
+ UD_Icmovge, | |
+ UD_Icmovle, | |
+ UD_Icmovg, | |
+ UD_Icmp, | |
+ UD_Icmppd, | |
+ UD_Icmpps, | |
+ UD_Icmpsb, | |
+ UD_Icmpsw, | |
+ UD_Icmpsd, | |
+ UD_Icmpsq, | |
+ UD_Icmpss, | |
+ UD_Icmpxchg, | |
+ UD_Icmpxchg8b, | |
+ UD_Icomisd, | |
+ UD_Icomiss, | |
+ UD_Icpuid, | |
+ UD_Icvtdq2pd, | |
+ UD_Icvtdq2ps, | |
+ UD_Icvtpd2dq, | |
+ UD_Icvtpd2pi, | |
+ UD_Icvtpd2ps, | |
+ UD_Icvtpi2ps, | |
+ UD_Icvtpi2pd, | |
+ UD_Icvtps2dq, | |
+ UD_Icvtps2pi, | |
+ UD_Icvtps2pd, | |
+ UD_Icvtsd2si, | |
+ UD_Icvtsd2ss, | |
+ UD_Icvtsi2ss, | |
+ UD_Icvtss2si, | |
+ UD_Icvtss2sd, | |
+ UD_Icvttpd2pi, | |
+ UD_Icvttpd2dq, | |
+ UD_Icvttps2dq, | |
+ UD_Icvttps2pi, | |
+ UD_Icvttsd2si, | |
+ UD_Icvtsi2sd, | |
+ UD_Icvttss2si, | |
+ UD_Icwd, | |
+ UD_Icdq, | |
+ UD_Icqo, | |
+ UD_Idaa, | |
+ UD_Idas, | |
+ UD_Idec, | |
+ UD_Idiv, | |
+ UD_Idivpd, | |
+ UD_Idivps, | |
+ UD_Idivsd, | |
+ UD_Idivss, | |
+ UD_Iemms, | |
+ UD_Ienter, | |
+ UD_If2xm1, | |
+ UD_Ifabs, | |
+ UD_Ifadd, | |
+ UD_Ifaddp, | |
+ UD_Ifbld, | |
+ UD_Ifbstp, | |
+ UD_Ifchs, | |
+ UD_Ifclex, | |
+ UD_Ifcmovb, | |
+ UD_Ifcmove, | |
+ UD_Ifcmovbe, | |
+ UD_Ifcmovu, | |
+ UD_Ifcmovnb, | |
+ UD_Ifcmovne, | |
+ UD_Ifcmovnbe, | |
+ UD_Ifcmovnu, | |
+ UD_Ifucomi, | |
+ UD_Ifcom, | |
+ UD_Ifcom2, | |
+ UD_Ifcomp3, | |
+ UD_Ifcomi, | |
+ UD_Ifucomip, | |
+ UD_Ifcomip, | |
+ UD_Ifcomp, | |
+ UD_Ifcomp5, | |
+ UD_Ifcompp, | |
+ UD_Ifcos, | |
+ UD_Ifdecstp, | |
+ UD_Ifdiv, | |
+ UD_Ifdivp, | |
+ UD_Ifdivr, | |
+ UD_Ifdivrp, | |
+ UD_Ifemms, | |
+ UD_Iffree, | |
+ UD_Iffreep, | |
+ UD_Ificom, | |
+ UD_Ificomp, | |
+ UD_Ifild, | |
+ UD_Ifncstp, | |
+ UD_Ifninit, | |
+ UD_Ifiadd, | |
+ UD_Ifidivr, | |
+ UD_Ifidiv, | |
+ UD_Ifisub, | |
+ UD_Ifisubr, | |
+ UD_Ifist, | |
+ UD_Ifistp, | |
+ UD_Ifisttp, | |
+ UD_Ifld, | |
+ UD_Ifld1, | |
+ UD_Ifldl2t, | |
+ UD_Ifldl2e, | |
+ UD_Ifldlpi, | |
+ UD_Ifldlg2, | |
+ UD_Ifldln2, | |
+ UD_Ifldz, | |
+ UD_Ifldcw, | |
+ UD_Ifldenv, | |
+ UD_Ifmul, | |
+ UD_Ifmulp, | |
+ UD_Ifimul, | |
+ UD_Ifnop, | |
+ UD_Ifpatan, | |
+ UD_Ifprem, | |
+ UD_Ifprem1, | |
+ UD_Ifptan, | |
+ UD_Ifrndint, | |
+ UD_Ifrstor, | |
+ UD_Ifnsave, | |
+ UD_Ifscale, | |
+ UD_Ifsin, | |
+ UD_Ifsincos, | |
+ UD_Ifsqrt, | |
+ UD_Ifstp, | |
+ UD_Ifstp1, | |
+ UD_Ifstp8, | |
+ UD_Ifstp9, | |
+ UD_Ifst, | |
+ UD_Ifnstcw, | |
+ UD_Ifnstenv, | |
+ UD_Ifnstsw, | |
+ UD_Ifsub, | |
+ UD_Ifsubp, | |
+ UD_Ifsubr, | |
+ UD_Ifsubrp, | |
+ UD_Iftst, | |
+ UD_Ifucom, | |
+ UD_Ifucomp, | |
+ UD_Ifucompp, | |
+ UD_Ifxam, | |
+ UD_Ifxch, | |
+ UD_Ifxch4, | |
+ UD_Ifxch7, | |
+ UD_Ifxrstor, | |
+ UD_Ifxsave, | |
+ UD_Ifpxtract, | |
+ UD_Ifyl2x, | |
+ UD_Ifyl2xp1, | |
+ UD_Ihaddpd, | |
+ UD_Ihaddps, | |
+ UD_Ihlt, | |
+ UD_Ihsubpd, | |
+ UD_Ihsubps, | |
+ UD_Iidiv, | |
+ UD_Iin, | |
+ UD_Iimul, | |
+ UD_Iinc, | |
+ UD_Iinsb, | |
+ UD_Iinsw, | |
+ UD_Iinsd, | |
+ UD_Iint1, | |
+ UD_Iint3, | |
+ UD_Iint, | |
+ UD_Iinto, | |
+ UD_Iinvd, | |
+ UD_Iinvlpg, | |
+ UD_Iinvlpga, | |
+ UD_Iiretw, | |
+ UD_Iiretd, | |
+ UD_Iiretq, | |
+ UD_Ijo, | |
+ UD_Ijno, | |
+ UD_Ijb, | |
+ UD_Ijae, | |
+ UD_Ijz, | |
+ UD_Ijnz, | |
+ UD_Ijbe, | |
+ UD_Ija, | |
+ UD_Ijs, | |
+ UD_Ijns, | |
+ UD_Ijp, | |
+ UD_Ijnp, | |
+ UD_Ijl, | |
+ UD_Ijge, | |
+ UD_Ijle, | |
+ UD_Ijg, | |
+ UD_Ijcxz, | |
+ UD_Ijecxz, | |
+ UD_Ijrcxz, | |
+ UD_Ijmp, | |
+ UD_Ilahf, | |
+ UD_Ilar, | |
+ UD_Ilddqu, | |
+ UD_Ildmxcsr, | |
+ UD_Ilds, | |
+ UD_Ilea, | |
+ UD_Iles, | |
+ UD_Ilfs, | |
+ UD_Ilgs, | |
+ UD_Ilidt, | |
+ UD_Ilss, | |
+ UD_Ileave, | |
+ UD_Ilfence, | |
+ UD_Ilgdt, | |
+ UD_Illdt, | |
+ UD_Ilmsw, | |
+ UD_Ilock, | |
+ UD_Ilodsb, | |
+ UD_Ilodsw, | |
+ UD_Ilodsd, | |
+ UD_Ilodsq, | |
+ UD_Iloopnz, | |
+ UD_Iloope, | |
+ UD_Iloop, | |
+ UD_Ilsl, | |
+ UD_Iltr, | |
+ UD_Imaskmovq, | |
+ UD_Imaxpd, | |
+ UD_Imaxps, | |
+ UD_Imaxsd, | |
+ UD_Imaxss, | |
+ UD_Imfence, | |
+ UD_Iminpd, | |
+ UD_Iminps, | |
+ UD_Iminsd, | |
+ UD_Iminss, | |
+ UD_Imonitor, | |
+ UD_Imov, | |
+ UD_Imovapd, | |
+ UD_Imovaps, | |
+ UD_Imovd, | |
+ UD_Imovddup, | |
+ UD_Imovdqa, | |
+ UD_Imovdqu, | |
+ UD_Imovdq2q, | |
+ UD_Imovhpd, | |
+ UD_Imovhps, | |
+ UD_Imovlhps, | |
+ UD_Imovlpd, | |
+ UD_Imovlps, | |
+ UD_Imovhlps, | |
+ UD_Imovmskpd, | |
+ UD_Imovmskps, | |
+ UD_Imovntdq, | |
+ UD_Imovnti, | |
+ UD_Imovntpd, | |
+ UD_Imovntps, | |
+ UD_Imovntq, | |
+ UD_Imovq, | |
+ UD_Imovqa, | |
+ UD_Imovq2dq, | |
+ UD_Imovsb, | |
+ UD_Imovsw, | |
+ UD_Imovsd, | |
+ UD_Imovsq, | |
+ UD_Imovsldup, | |
+ UD_Imovshdup, | |
+ UD_Imovss, | |
+ UD_Imovsx, | |
+ UD_Imovupd, | |
+ UD_Imovups, | |
+ UD_Imovzx, | |
+ UD_Imul, | |
+ UD_Imulpd, | |
+ UD_Imulps, | |
+ UD_Imulsd, | |
+ UD_Imulss, | |
+ UD_Imwait, | |
+ UD_Ineg, | |
+ UD_Inop, | |
+ UD_Inot, | |
+ UD_Ior, | |
+ UD_Iorpd, | |
+ UD_Iorps, | |
+ UD_Iout, | |
+ UD_Ioutsb, | |
+ UD_Ioutsw, | |
+ UD_Ioutsd, | |
+ UD_Ioutsq, | |
+ UD_Ipacksswb, | |
+ UD_Ipackssdw, | |
+ UD_Ipackuswb, | |
+ UD_Ipaddb, | |
+ UD_Ipaddw, | |
+ UD_Ipaddq, | |
+ UD_Ipaddsb, | |
+ UD_Ipaddsw, | |
+ UD_Ipaddusb, | |
+ UD_Ipaddusw, | |
+ UD_Ipand, | |
+ UD_Ipandn, | |
+ UD_Ipause, | |
+ UD_Ipavgb, | |
+ UD_Ipavgw, | |
+ UD_Ipcmpeqb, | |
+ UD_Ipcmpeqw, | |
+ UD_Ipcmpeqd, | |
+ UD_Ipcmpgtb, | |
+ UD_Ipcmpgtw, | |
+ UD_Ipcmpgtd, | |
+ UD_Ipextrw, | |
+ UD_Ipinsrw, | |
+ UD_Ipmaddwd, | |
+ UD_Ipmaxsw, | |
+ UD_Ipmaxub, | |
+ UD_Ipminsw, | |
+ UD_Ipminub, | |
+ UD_Ipmovmskb, | |
+ UD_Ipmulhuw, | |
+ UD_Ipmulhw, | |
+ UD_Ipmullw, | |
+ UD_Ipmuludq, | |
+ UD_Ipop, | |
+ UD_Ipopa, | |
+ UD_Ipopad, | |
+ UD_Ipopfw, | |
+ UD_Ipopfd, | |
+ UD_Ipopfq, | |
+ UD_Ipor, | |
+ UD_Iprefetch, | |
+ UD_Iprefetchnta, | |
+ UD_Iprefetcht0, | |
+ UD_Iprefetcht1, | |
+ UD_Iprefetcht2, | |
+ UD_Ipsadbw, | |
+ UD_Ipshufd, | |
+ UD_Ipshufhw, | |
+ UD_Ipshuflw, | |
+ UD_Ipshufw, | |
+ UD_Ipslldq, | |
+ UD_Ipsllw, | |
+ UD_Ipslld, | |
+ UD_Ipsllq, | |
+ UD_Ipsraw, | |
+ UD_Ipsrad, | |
+ UD_Ipsrlw, | |
+ UD_Ipsrld, | |
+ UD_Ipsrlq, | |
+ UD_Ipsrldq, | |
+ UD_Ipsubb, | |
+ UD_Ipsubw, | |
+ UD_Ipsubd, | |
+ UD_Ipsubq, | |
+ UD_Ipsubsb, | |
+ UD_Ipsubsw, | |
+ UD_Ipsubusb, | |
+ UD_Ipsubusw, | |
+ UD_Ipunpckhbw, | |
+ UD_Ipunpckhwd, | |
+ UD_Ipunpckhdq, | |
+ UD_Ipunpckhqdq, | |
+ UD_Ipunpcklbw, | |
+ UD_Ipunpcklwd, | |
+ UD_Ipunpckldq, | |
+ UD_Ipunpcklqdq, | |
+ UD_Ipi2fw, | |
+ UD_Ipi2fd, | |
+ UD_Ipf2iw, | |
+ UD_Ipf2id, | |
+ UD_Ipfnacc, | |
+ UD_Ipfpnacc, | |
+ UD_Ipfcmpge, | |
+ UD_Ipfmin, | |
+ UD_Ipfrcp, | |
+ UD_Ipfrsqrt, | |
+ UD_Ipfsub, | |
+ UD_Ipfadd, | |
+ UD_Ipfcmpgt, | |
+ UD_Ipfmax, | |
+ UD_Ipfrcpit1, | |
+ UD_Ipfrspit1, | |
+ UD_Ipfsubr, | |
+ UD_Ipfacc, | |
+ UD_Ipfcmpeq, | |
+ UD_Ipfmul, | |
+ UD_Ipfrcpit2, | |
+ UD_Ipmulhrw, | |
+ UD_Ipswapd, | |
+ UD_Ipavgusb, | |
+ UD_Ipush, | |
+ UD_Ipusha, | |
+ UD_Ipushad, | |
+ UD_Ipushfw, | |
+ UD_Ipushfd, | |
+ UD_Ipushfq, | |
+ UD_Ipxor, | |
+ UD_Ircl, | |
+ UD_Ircr, | |
+ UD_Irol, | |
+ UD_Iror, | |
+ UD_Ircpps, | |
+ UD_Ircpss, | |
+ UD_Irdmsr, | |
+ UD_Irdpmc, | |
+ UD_Irdtsc, | |
+ UD_Irdtscp, | |
+ UD_Irepne, | |
+ UD_Irep, | |
+ UD_Iret, | |
+ UD_Iretf, | |
+ UD_Irsm, | |
+ UD_Irsqrtps, | |
+ UD_Irsqrtss, | |
+ UD_Isahf, | |
+ UD_Isal, | |
+ UD_Isalc, | |
+ UD_Isar, | |
+ UD_Ishl, | |
+ UD_Ishr, | |
+ UD_Isbb, | |
+ UD_Iscasb, | |
+ UD_Iscasw, | |
+ UD_Iscasd, | |
+ UD_Iscasq, | |
+ UD_Iseto, | |
+ UD_Isetno, | |
+ UD_Isetb, | |
+ UD_Isetnb, | |
+ UD_Isetz, | |
+ UD_Isetnz, | |
+ UD_Isetbe, | |
+ UD_Iseta, | |
+ UD_Isets, | |
+ UD_Isetns, | |
+ UD_Isetp, | |
+ UD_Isetnp, | |
+ UD_Isetl, | |
+ UD_Isetge, | |
+ UD_Isetle, | |
+ UD_Isetg, | |
+ UD_Isfence, | |
+ UD_Isgdt, | |
+ UD_Ishld, | |
+ UD_Ishrd, | |
+ UD_Ishufpd, | |
+ UD_Ishufps, | |
+ UD_Isidt, | |
+ UD_Isldt, | |
+ UD_Ismsw, | |
+ UD_Isqrtps, | |
+ UD_Isqrtpd, | |
+ UD_Isqrtsd, | |
+ UD_Isqrtss, | |
+ UD_Istc, | |
+ UD_Istd, | |
+ UD_Istgi, | |
+ UD_Isti, | |
+ UD_Iskinit, | |
+ UD_Istmxcsr, | |
+ UD_Istosb, | |
+ UD_Istosw, | |
+ UD_Istosd, | |
+ UD_Istosq, | |
+ UD_Istr, | |
+ UD_Isub, | |
+ UD_Isubpd, | |
+ UD_Isubps, | |
+ UD_Isubsd, | |
+ UD_Isubss, | |
+ UD_Iswapgs, | |
+ UD_Isyscall, | |
+ UD_Isysenter, | |
+ UD_Isysexit, | |
+ UD_Isysret, | |
+ UD_Itest, | |
+ UD_Iucomisd, | |
+ UD_Iucomiss, | |
+ UD_Iud2, | |
+ UD_Iunpckhpd, | |
+ UD_Iunpckhps, | |
+ UD_Iunpcklps, | |
+ UD_Iunpcklpd, | |
+ UD_Iverr, | |
+ UD_Iverw, | |
+ UD_Ivmcall, | |
+ UD_Ivmclear, | |
+ UD_Ivmxon, | |
+ UD_Ivmptrld, | |
+ UD_Ivmptrst, | |
+ UD_Ivmresume, | |
+ UD_Ivmxoff, | |
+ UD_Ivmrun, | |
+ UD_Ivmmcall, | |
+ UD_Ivmload, | |
+ UD_Ivmsave, | |
+ UD_Iwait, | |
+ UD_Iwbinvd, | |
+ UD_Iwrmsr, | |
+ UD_Ixadd, | |
+ UD_Ixchg, | |
+ UD_Ixlatb, | |
+ UD_Ixor, | |
+ UD_Ixorpd, | |
+ UD_Ixorps, | |
+ UD_Idb, | |
+ UD_Iinvalid, | |
+ UD_Id3vil, | |
+ UD_Ina, | |
+ UD_Igrp_reg, | |
+ UD_Igrp_rm, | |
+ UD_Igrp_vendor, | |
+ UD_Igrp_x87, | |
+ UD_Igrp_mode, | |
+ UD_Igrp_osize, | |
+ UD_Igrp_asize, | |
+ UD_Igrp_mod, | |
+ UD_Inone, | |
+}; | |
+ | |
+ | |
+ | |
+extern const char* ud_mnemonics_str[];; | |
+extern struct ud_itab_entry* ud_itab_list[]; | |
+ | |
+#endif | |
Index: lib/libudis86/udis86.h | |
=================================================================== | |
--- lib/libudis86/udis86.h (revision 0) | |
+++ lib/libudis86/udis86.h (working copy) | |
@@ -0,0 +1,16 @@ | |
+/* ----------------------------------------------------------------------------- | |
+ * udis86.h | |
+ * | |
+ * Copyright (c) 2002, 2003, 2004 Vivek Mohan <vivek@sig9.com> | |
+ * All rights reserved. See (LICENSE) | |
+ * ----------------------------------------------------------------------------- | |
+ */ | |
+ | |
+#ifndef UDIS86_H | |
+#define UDIS86_H | |
+ | |
+#include "./types.h" | |
+#include "./extern.h" | |
+#include "./itab.h" | |
+ | |
+#endif | |
Property changes on: lib/libudis86/udis86.h | |
___________________________________________________________________ | |
Added: svn:executable | |
## -0,0 +1 ## | |
+* | |
\ No newline at end of property | |
Index: etc/mtree/BSD.include.dist | |
=================================================================== | |
--- etc/mtree/BSD.include.dist (revision 245019) | |
+++ etc/mtree/BSD.include.dist (working copy) | |
@@ -325,6 +325,8 @@ | |
.. | |
sys | |
.. | |
+ udis86 | |
+ .. | |
ufs | |
ffs | |
.. | |
Index: sys/amd64/include/vmm_dev.h | |
=================================================================== | |
--- sys/amd64/include/vmm_dev.h (revision 245019) | |
+++ sys/amd64/include/vmm_dev.h (working copy) | |
@@ -140,6 +140,11 @@ | |
enum x2apic_state state; | |
}; | |
+struct vm_exc_bitmap { | |
+ int cpuid; | |
+ uint32_t bits; | |
+}; | |
+ | |
enum { | |
IOCNUM_RUN, | |
IOCNUM_SET_PINNING, | |
@@ -164,6 +169,7 @@ | |
IOCNUM_VM_STAT_DESC, | |
IOCNUM_SET_X2APIC_STATE, | |
IOCNUM_GET_X2APIC_STATE, | |
+ IOCNUM_SET_EXCEPTION_BITMAP, | |
}; | |
#define VM_RUN \ | |
@@ -212,4 +218,6 @@ | |
_IOW('v', IOCNUM_SET_X2APIC_STATE, struct vm_x2apic) | |
#define VM_GET_X2APIC_STATE \ | |
_IOWR('v', IOCNUM_GET_X2APIC_STATE, struct vm_x2apic) | |
+#define VM_SET_EXCEPTION_BITMAP \ | |
+ _IOW('v', IOCNUM_SET_EXCEPTION_BITMAP, struct vm_exc_bitmap) | |
#endif | |
Index: sys/amd64/include/vmm.h | |
=================================================================== | |
--- sys/amd64/include/vmm.h (revision 245019) | |
+++ sys/amd64/include/vmm.h (working copy) | |
@@ -65,6 +65,7 @@ | |
uint32_t code, int code_valid); | |
typedef int (*vmi_get_cap_t)(void *vmi, int vcpu, int num, int *retval); | |
typedef int (*vmi_set_cap_t)(void *vmi, int vcpu, int num, int val); | |
+typedef int (*vmi_set_exc_bitmap_t)(void *vmi, int vcpu, uint32_t bits); | |
struct vmm_ops { | |
vmm_init_func_t init; /* module wide initialization */ | |
@@ -82,6 +83,7 @@ | |
vmi_inject_event_t vminject; | |
vmi_get_cap_t vmgetcap; | |
vmi_set_cap_t vmsetcap; | |
+ vmi_set_exc_bitmap_t vmsetexcbitmap; | |
}; | |
extern struct vmm_ops vmm_ops_intel; | |
@@ -119,6 +121,7 @@ | |
void vm_activate_cpu(struct vm *vm, int vcpu); | |
cpuset_t vm_active_cpus(struct vm *vm); | |
struct vm_exit *vm_exitinfo(struct vm *vm, int vcpuid); | |
+int vm_set_exception_bitmap(struct vm *vm, int vcpu, uint32_t bits); | |
/* | |
* Return 1 if device indicated by bus/slot/func is supposed to be a | |
@@ -250,6 +253,7 @@ | |
VM_EXITCODE_PAUSE, | |
VM_EXITCODE_PAGING, | |
VM_EXITCODE_SPINUP_AP, | |
+ VM_EXITCODE_EXCEPTION, | |
VM_EXITCODE_MAX | |
}; | |
@@ -278,6 +282,8 @@ | |
int error; /* vmx inst error */ | |
uint32_t exit_reason; | |
uint64_t exit_qualification; | |
+ uint8_t exit_interruption_vector; | |
+ uint8_t exit_interruption_type; | |
} vmx; | |
struct { | |
uint32_t code; /* ecx value */ | |
Index: sys/amd64/vmm/vmm.c | |
=================================================================== | |
--- sys/amd64/vmm/vmm.c (revision 245019) | |
+++ sys/amd64/vmm/vmm.c (working copy) | |
@@ -144,6 +144,8 @@ | |
(ops != NULL ? (*ops->vmgetcap)(vmi, vcpu, num, retval) : ENXIO) | |
#define VMSETCAP(vmi, vcpu, num, val) \ | |
(ops != NULL ? (*ops->vmsetcap)(vmi, vcpu, num, val) : ENXIO) | |
+#define VMSETEXCBITMAP(vmi, vcpu, bits) \ | |
+ (ops != NULL ? (*ops->vmsetexcbitmap)(vmi, vcpu, bits) : ENXIO) | |
#define fpu_start_emulating() start_emulating() | |
#define fpu_stop_emulating() stop_emulating() | |
@@ -1020,3 +1022,14 @@ | |
} | |
vcpu_unlock(vcpu); | |
} | |
+ | |
+int | |
+vm_set_exception_bitmap(struct vm *vm, int vcpu, uint32_t bits) | |
+{ | |
+ | |
+ if (vcpu < 0 || vcpu >= VM_MAXCPU) | |
+ return (EINVAL); | |
+ | |
+ return (VMSETEXCBITMAP(vm->cookie, vcpu, bits)); | |
+} | |
+ | |
Index: sys/amd64/vmm/vmm_dev.c | |
=================================================================== | |
--- sys/amd64/vmm/vmm_dev.c (revision 245019) | |
+++ sys/amd64/vmm/vmm_dev.c (working copy) | |
@@ -157,6 +157,7 @@ | |
struct vm_stats *vmstats; | |
struct vm_stat_desc *statdesc; | |
struct vm_x2apic *x2apic; | |
+ struct vm_exc_bitmap *exc_bit; | |
sc = vmmdev_lookup2(cdev); | |
if (sc == NULL) | |
@@ -181,6 +182,7 @@ | |
case VM_PPTDEV_MSI: | |
case VM_PPTDEV_MSIX: | |
case VM_SET_X2APIC_STATE: | |
+ case VM_SET_EXCEPTION_BITMAP: | |
/* | |
* XXX fragile, handle with care | |
* Assumes that the first field of the ioctl data is the vcpu. | |
@@ -365,6 +367,11 @@ | |
error = vm_get_x2apic_state(sc->vm, | |
x2apic->cpuid, &x2apic->state); | |
break; | |
+ case VM_SET_EXCEPTION_BITMAP: | |
+ exc_bit = (struct vm_exc_bitmap *)data; | |
+ error = vm_set_exception_bitmap(sc->vm, | |
+ exc_bit->cpuid, exc_bit->bits); | |
+ break; | |
default: | |
error = ENOTTY; | |
break; | |
Index: sys/amd64/vmm/intel/vmcs.c | |
=================================================================== | |
--- sys/amd64/vmm/intel/vmcs.c (revision 245019) | |
+++ sys/amd64/vmm/intel/vmcs.c (working copy) | |
@@ -436,6 +436,10 @@ | |
/* exception bitmap */ | |
exc_bitmap = 1 << IDT_MC; | |
+#if 0 | |
+ /* XXX: enable debug */ | |
+ exc_bitmap |= 1 << IDT_DB; | |
+#endif | |
if ((error = vmwrite(VMCS_EXCEPTION_BITMAP, exc_bitmap)) != 0) | |
goto done; | |
@@ -549,3 +553,21 @@ | |
db_printf("VM-instruction error: %#lx\n", vmcs_instruction_error()); | |
} | |
#endif | |
+ | |
+int | |
+vmcs_setexcbitmap(struct vmcs *vmcs, uint32_t bits) | |
+{ | |
+ uint64_t exc_bitmap; | |
+ int error; | |
+ | |
+ VMPTRLD(vmcs); | |
+ if ((error = vmread(VMCS_EXCEPTION_BITMAP, &exc_bitmap)) != 0) | |
+ goto done; | |
+ exc_bitmap |= bits; | |
+ error = vmwrite(VMCS_EXCEPTION_BITMAP, exc_bitmap); | |
+done: | |
+ VMCLEAR(vmcs); | |
+ return (error); | |
+} | |
+ | |
+ | |
Index: sys/amd64/vmm/intel/vmx.c | |
=================================================================== | |
--- sys/amd64/vmm/intel/vmx.c (revision 245019) | |
+++ sys/amd64/vmm/intel/vmx.c (working copy) | |
@@ -1210,6 +1210,12 @@ | |
vmexit->exitcode = VM_EXITCODE_BOGUS; | |
switch (vmexit->u.vmx.exit_reason) { | |
+ case EXIT_REASON_EXCEPTION: | |
+ vmexit->exitcode = VM_EXITCODE_EXCEPTION; | |
+ intr_info = vmcs_exit_interruption_info(); | |
+ vmexit->u.vmx.exit_interruption_vector = intr_info & 0xf; | |
+ vmexit->u.vmx.exit_interruption_type = (intr_info >> 8) & 0x7; | |
+ break; | |
case EXIT_REASON_CR_ACCESS: | |
handled = vmx_emulate_cr_access(vmx, vcpu, qual); | |
break; | |
@@ -1827,6 +1833,26 @@ | |
return (retval); | |
} | |
+static int | |
+vmx_setexcbitmap(void *arg, int vcpu, uint32_t bits) | |
+{ | |
+ int error; | |
+ struct vmx *vmx = arg; | |
+ | |
+ /* | |
+ * If the vcpu is running then don't mess with the VMCS. | |
+ * | |
+ * vmcs_setexcbitmap will VMCLEAR the vmcs when it is done which will cause | |
+ * the subsequent vmlaunch/vmresume to fail. | |
+ */ | |
+ if (vcpu_is_running(vmx->vm, vcpu)) | |
+ panic("vmx_setexcbitmap: %s%d is running", vm_name(vmx->vm), vcpu); | |
+ | |
+ error = vmcs_setexcbitmap(&vmx->vmcs[vcpu], bits); | |
+ | |
+ return (error); | |
+} | |
+ | |
struct vmm_ops vmm_ops_intel = { | |
vmx_init, | |
vmx_cleanup, | |
@@ -1841,5 +1867,6 @@ | |
vmx_setdesc, | |
vmx_inject, | |
vmx_getcap, | |
- vmx_setcap | |
+ vmx_setcap, | |
+ vmx_setexcbitmap | |
}; | |
Index: sys/amd64/vmm/intel/vmcs.h | |
=================================================================== | |
--- sys/amd64/vmm/intel/vmcs.h (revision 245019) | |
+++ sys/amd64/vmm/intel/vmcs.h (working copy) | |
@@ -59,12 +59,14 @@ | |
int vmcs_setdesc(struct vmcs *vmcs, int ident, | |
struct seg_desc *desc); | |
uint64_t vmcs_read(uint32_t encoding); | |
+int vmcs_setexcbitmap(struct vmcs *vmcs, uint32_t bits); | |
#define vmexit_instruction_length() vmcs_read(VMCS_EXIT_INSTRUCTION_LENGTH) | |
#define vmcs_guest_rip() vmcs_read(VMCS_GUEST_RIP) | |
#define vmcs_instruction_error() vmcs_read(VMCS_INSTRUCTION_ERROR) | |
#define vmcs_exit_reason() (vmcs_read(VMCS_EXIT_REASON) & 0xffff) | |
#define vmcs_exit_qualification() vmcs_read(VMCS_EXIT_QUALIFICATION) | |
+#define vmcs_exit_interruption_info() vmcs_read(VMCS_EXIT_INTERRUPTION_INFO) | |
#define vmcs_guest_cr3() vmcs_read(VMCS_GUEST_CR3) | |
#define vmcs_gpa() vmcs_read(VMCS_GUEST_PHYSICAL_ADDRESS) | |
#define vmcs_gla() vmcs_read(VMCS_GUEST_LINEAR_ADDRESS) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment