static const OrcSysOpcode orc_x86_opcodes[] = {
- { "punpcklbw", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660f60 },
- { "punpcklwd", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660f61 },
- { "punpckldq", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660f62 },
- { "packsswb", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660f63 },
- { "pcmpgtb", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660f64 },
- { "pcmpgtw", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660f65 },
- { "pcmpgtd", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660f66 },
- { "packuswb", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660f67 },
- { "punpckhbw", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660f68 },
- { "punpckhwd", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660f69 },
- { "punpckhdq", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660f6a },
- { "packssdw", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660f6b },
- { "punpcklqdq", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660f6c },
- { "punpckhqdq", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660f6d },
- { "movdqa", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660f6f },
- { "psraw", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660fe1 },
- { "psrlw", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660fd1 },
- { "psllw", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660ff1 },
- { "psrad", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660fe2 },
- { "psrld", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660fd2 },
- { "pslld", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660ff2 },
- { "psrlq", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660fd3 },
- { "psllq", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660ff3 },
- { "psrldq", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660f73 },
- { "pslldq", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660f73 },
- { "psrlq", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660fd3 },
- { "pcmpeqb", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660f74 },
- { "pcmpeqw", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660f75 },
- { "pcmpeqd", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660f76 },
- { "paddq", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660fd4 },
- { "pmullw", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660fd5 },
- { "psubusb", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660fd8 },
- { "psubusw", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660fd9 },
- { "pminub", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660fda },
- { "pand", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660fdb },
- { "paddusb", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660fdc },
- { "paddusw", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660fdd },
- { "pmaxub", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660fde },
- { "pandn", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660fdf },
- { "pavgb", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660fe0 },
- { "pavgw", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660fe3 },
- { "pmulhuw", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660fe4 },
- { "pmulhw", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660fe5 },
- { "psubsb", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660fe8 },
- { "psubsw", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660fe9 },
- { "pminsw", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660fea },
- { "por", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660feb },
- { "paddsb", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660fec },
- { "paddsw", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660fed },
- { "pmaxsw", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660fee },
- { "pxor", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660fef },
- { "pmuludq", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660ff4 },
- { "pmaddwd", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660ff5 },
- { "psadbw", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660ff6 },
- { "psubb", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660ff8 },
- { "psubw", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660ff9 },
- { "psubd", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660ffa },
- { "psubq", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660ffb },
- { "paddb", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660ffc },
- { "paddw", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660ffd },
- { "paddd", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660ffe },
- { "pshufb", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660f3800 },
- { "phaddw", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660f3801 },
- { "phaddd", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660f3802 },
- { "phaddsw", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660f3803 },
- { "pmaddubsw", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660f3804 },
- { "phsubw", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660f3805 },
- { "phsubd", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660f3806 },
- { "phsubsw", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660f3807 },
- { "psignb", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660f3808 },
- { "psignw", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660f3809 },
- { "psignd", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660f380a },
- { "pmulhrsw", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660f380b },
- { "pabsb", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660f381c },
- { "pabsw", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660f381d },
- { "pabsd", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660f381e },
- { "pmovsxbw", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660f3820 },
- { "pmovsxbd", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660f3821 },
- { "pmovsxbq", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660f3822 },
- { "pmovsxwd", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660f3823 },
- { "pmovsxwq", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660f3824 },
- { "pmovsxdq", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660f3825 },
- { "pmuldq", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660f3828 },
- { "pcmpeqq", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660f3829 },
- { "packusdw", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660f382b },
- { "pmovzxbw", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660f3830 },
- { "pmovzxbd", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660f3831 },
- { "pmovzxbq", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660f3832 },
- { "pmovzxwd", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660f3833 },
- { "pmovzxwq", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660f3834 },
- { "pmovzxdq", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660f3835 },
- { "pmulld", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660f3840 },
- { "phminposuw", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660f3841 },
- { "pminsb", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660f3838 },
- { "pminsd", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660f3839 },
- { "pminuw", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660f383a },
- { "pminud", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660f383b },
- { "pmaxsb", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660f383c },
- { "pmaxsd", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660f383d },
- { "pmaxuw", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660f383e },
- { "pmaxud", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660f383f },
- { "pcmpgtq", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660f3837 },
- { "addps", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x0f58 },
- { "subps", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x0f5c },
- { "mulps", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x0f59 },
- { "divps", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x0f5e },
- { "sqrtps", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x0f51 },
- { "addpd", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660f58 },
- { "subpd", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660f5c },
- { "mulpd", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660f59 },
- { "divpd", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660f5e },
- { "sqrtpd", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660f51 },
- { "cmpeqps", ORC_X86_INSN_TYPE_SSEM_SSE, 0, 0x0fc2, 0 },
- { "cmpeqpd", ORC_X86_INSN_TYPE_SSEM_SSE, 0, 0x660fc2, 0 },
- { "cmpltps", ORC_X86_INSN_TYPE_SSEM_SSE, 0, 0x0fc2, 1 },
- { "cmpltpd", ORC_X86_INSN_TYPE_SSEM_SSE, 0, 0x660fc2, 1 },
- { "cmpleps", ORC_X86_INSN_TYPE_SSEM_SSE, 0, 0x0fc2, 2 },
- { "cmplepd", ORC_X86_INSN_TYPE_SSEM_SSE, 0, 0x660fc2, 2 },
- { "cvttps2dq", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0xf30f5b },
- { "cvttpd2dq", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660fe6 },
- { "cvtdq2ps", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x0f5b },
- { "cvtdq2pd", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0xf30fe6 },
- { "cvtps2pd", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x0f5a },
- { "cvtpd2ps", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660f5a },
- { "minps", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x0f5d },
- { "minpd", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660f5d },
- { "maxps", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x0f5f },
- { "maxpd", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660f5f },
- { "psraw", ORC_X86_INSN_TYPE_IMM8_MMX_SHIFT, 0, 0x660f71, 4 },
- { "psrlw", ORC_X86_INSN_TYPE_IMM8_MMX_SHIFT, 0, 0x660f71, 2 },
- { "psllw", ORC_X86_INSN_TYPE_IMM8_MMX_SHIFT, 0, 0x660f71, 6 },
- { "psrad", ORC_X86_INSN_TYPE_IMM8_MMX_SHIFT, 0, 0x660f72, 4 },
- { "psrld", ORC_X86_INSN_TYPE_IMM8_MMX_SHIFT, 0, 0x660f72, 2 },
- { "pslld", ORC_X86_INSN_TYPE_IMM8_MMX_SHIFT, 0, 0x660f72, 6 },
- { "psrlq", ORC_X86_INSN_TYPE_IMM8_MMX_SHIFT, 0, 0x660f73, 2 },
- { "psllq", ORC_X86_INSN_TYPE_IMM8_MMX_SHIFT, 0, 0x660f73, 6 },
- { "psrldq", ORC_X86_INSN_TYPE_IMM8_MMX_SHIFT, 0, 0x660f73, 3 },
- { "pslldq", ORC_X86_INSN_TYPE_IMM8_MMX_SHIFT, 0, 0x660f73, 7 },
- { "pshufd", ORC_X86_INSN_TYPE_IMM8_MMXM_MMX, 0, 0x660f70 },
- { "pshuflw", ORC_X86_INSN_TYPE_IMM8_MMXM_MMX, 0, 0xf20f70 },
- { "pshufhw", ORC_X86_INSN_TYPE_IMM8_MMXM_MMX, 0, 0xf30f70 },
- { "palignr", ORC_X86_INSN_TYPE_IMM8_MMXM_MMX, 0, 0x660f3a0f },
- { "pinsrw", ORC_X86_INSN_TYPE_IMM8_REGM_MMX, 0, 0x660fc4 },
- { "movd", ORC_X86_INSN_TYPE_REGM_MMX, 0, 0x660f6e },
- { "movq", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0xf30f7e },
- { "movdqa", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x660f6f },
- { "movdqu", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0xf30f6f },
- { "movhps", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x0f16 },
- { "pextrw", ORC_X86_INSN_TYPE_IMM8_MMX_REG_REV, 0, 0x660f3a15 },
- { "movd", ORC_X86_INSN_TYPE_MMX_REGM_REV, 0, 0x660f7e },
- { "movq", ORC_X86_INSN_TYPE_MMXM_MMX_REV, 0, 0x660fd6 },
- { "movdqa", ORC_X86_INSN_TYPE_MMXM_MMX_REV, 0, 0x660f7f },
- { "movdqu", ORC_X86_INSN_TYPE_MMXM_MMX_REV, 0, 0xf30f7f },
- { "movntdq", ORC_X86_INSN_TYPE_MMXM_MMX_REV, 0, 0x660fe7 },
- { "ldmxcsr", ORC_X86_INSN_TYPE_MEM, 0, 0x0fae, 2 },
- { "stmxcsr", ORC_X86_INSN_TYPE_MEM, 0, 0x0fae, 3 },
- { "add", ORC_X86_INSN_TYPE_IMM8_REGM, 0, 0x83, 0 },
- { "add", ORC_X86_INSN_TYPE_IMM32_REGM, 0, 0x81, 0 },
- { "add", ORC_X86_INSN_TYPE_REGM_REG, 0, 0x03 },
- { "add", ORC_X86_INSN_TYPE_REG_REGM, 0, 0x01 },
- { "or", ORC_X86_INSN_TYPE_IMM8_REGM, 0, 0x83, 1 },
- { "or", ORC_X86_INSN_TYPE_IMM32_REGM, 0, 0x81, 1 },
- { "or", ORC_X86_INSN_TYPE_REGM_REG, 0, 0x0b },
- { "or", ORC_X86_INSN_TYPE_REG_REGM, 0, 0x09 },
- { "adc", ORC_X86_INSN_TYPE_IMM8_REGM, 0, 0x83, 2 },
- { "adc", ORC_X86_INSN_TYPE_IMM32_REGM, 0, 0x81, 2 },
- { "adc", ORC_X86_INSN_TYPE_REGM_REG, 0, 0x13 },
- { "adc", ORC_X86_INSN_TYPE_REG_REGM, 0, 0x11 },
- { "sbb", ORC_X86_INSN_TYPE_IMM8_REGM, 0, 0x83, 3 },
- { "sbb", ORC_X86_INSN_TYPE_IMM32_REGM, 0, 0x81, 3 },
- { "sbb", ORC_X86_INSN_TYPE_REGM_REG, 0, 0x1b },
- { "sbb", ORC_X86_INSN_TYPE_REG_REGM, 0, 0x19 },
- { "and", ORC_X86_INSN_TYPE_IMM8_REGM, 0, 0x83, 4 },
- { "and", ORC_X86_INSN_TYPE_IMM32_REGM, 0, 0x81, 4 },
- { "and", ORC_X86_INSN_TYPE_REGM_REG, 0, 0x23 },
- { "and", ORC_X86_INSN_TYPE_REG_REGM, 0, 0x21 },
- { "sub", ORC_X86_INSN_TYPE_IMM8_REGM, 0, 0x83, 5 },
- { "sub", ORC_X86_INSN_TYPE_IMM32_REGM, 0, 0x81, 5 },
- { "sub", ORC_X86_INSN_TYPE_REGM_REG, 0, 0x2b },
- { "sub", ORC_X86_INSN_TYPE_REG_REGM, 0, 0x29 },
- { "xor", ORC_X86_INSN_TYPE_IMM8_REGM, 0, 0x83, 6 },
- { "xor", ORC_X86_INSN_TYPE_IMM32_REGM, 0, 0x81, 6 },
- { "xor", ORC_X86_INSN_TYPE_REGM_REG, 0, 0x33 },
- { "xor", ORC_X86_INSN_TYPE_REG_REGM, 0, 0x31 },
- { "cmp", ORC_X86_INSN_TYPE_IMM8_REGM, 0, 0x83, 7 },
- { "cmp", ORC_X86_INSN_TYPE_IMM32_REGM, 0, 0x81, 7 },
- { "cmp", ORC_X86_INSN_TYPE_REGM_REG, 0, 0x3b },
- { "cmp", ORC_X86_INSN_TYPE_REG_REGM, 0, 0x39 },
- { "jo", ORC_X86_INSN_TYPE_BRANCH, 0, 0x70 },
- { "jno", ORC_X86_INSN_TYPE_BRANCH, 0, 0x71 },
- { "jc", ORC_X86_INSN_TYPE_BRANCH, 0, 0x72 },
- { "jnc", ORC_X86_INSN_TYPE_BRANCH, 0, 0x73 },
- { "jz", ORC_X86_INSN_TYPE_BRANCH, 0, 0x74 },
- { "jnz", ORC_X86_INSN_TYPE_BRANCH, 0, 0x75 },
- { "jbe", ORC_X86_INSN_TYPE_BRANCH, 0, 0x76 },
- { "ja", ORC_X86_INSN_TYPE_BRANCH, 0, 0x77 },
- { "js", ORC_X86_INSN_TYPE_BRANCH, 0, 0x78 },
- { "jns", ORC_X86_INSN_TYPE_BRANCH, 0, 0x79 },
- { "jp", ORC_X86_INSN_TYPE_BRANCH, 0, 0x7a },
- { "jnp", ORC_X86_INSN_TYPE_BRANCH, 0, 0x7b },
- { "jl", ORC_X86_INSN_TYPE_BRANCH, 0, 0x7c },
- { "jge", ORC_X86_INSN_TYPE_BRANCH, 0, 0x7d },
- { "jle", ORC_X86_INSN_TYPE_BRANCH, 0, 0x7e },
- { "jg", ORC_X86_INSN_TYPE_BRANCH, 0, 0x7f },
- { "jmp", ORC_X86_INSN_TYPE_BRANCH, 0, 0xeb },
- { "", ORC_X86_INSN_TYPE_LABEL, 0, 0x00 },
- { "ret", ORC_X86_INSN_TYPE_NONE, 0, 0xc3 },
- { "retq", ORC_X86_INSN_TYPE_NONE, 0, 0xc3 },
- { "emms", ORC_X86_INSN_TYPE_NONE, 0, 0x0f77 },
- { "rdtsc", ORC_X86_INSN_TYPE_NONE, 0, 0x0f31 },
- { "nop", ORC_X86_INSN_TYPE_NONE, 0, 0x90 },
- { "rep movsb", ORC_X86_INSN_TYPE_NONE, 0, 0xf3a4 },
- { "rep movsw", ORC_X86_INSN_TYPE_NONE, 0, 0x66f3a5 },
- { "rep movsl", ORC_X86_INSN_TYPE_NONE, 0, 0xf3a5 },
- { "push", ORC_X86_INSN_TYPE_STACK, 0, 0x50 },
- { "pop", ORC_X86_INSN_TYPE_STACK, 0, 0x58 },
- { "movzx", ORC_X86_INSN_TYPE_REGM_REG, 0, 0x0fb6 },
- { "movw", ORC_X86_INSN_TYPE_REGM_REG, 0, 0x668b },
- { "movl", ORC_X86_INSN_TYPE_REGM_REG, 0, 0x8b },
- { "mov", ORC_X86_INSN_TYPE_REGM_REG, 0, 0x8b },
- { "mov", ORC_X86_INSN_TYPE_IMM32_REGM_MOV, 0, 0xb8 },
- { "movb", ORC_X86_INSN_TYPE_REG8_REGM, 0, 0x88 },
- { "movw", ORC_X86_INSN_TYPE_REG16_REGM, 0, 0x6689 },
- { "movl", ORC_X86_INSN_TYPE_REG_REGM, 0, 0x89 },
- { "mov", ORC_X86_INSN_TYPE_REG_REGM, 0, 0x89 },
- { "test", ORC_X86_INSN_TYPE_REGM_REG, 0, 0x85 },
- { "testl", ORC_X86_INSN_TYPE_IMM32_REGM, 0, 0xf7, 0 },
- { "leal", ORC_X86_INSN_TYPE_REGM_REG, 0, 0x8d },
- { "leaq", ORC_X86_INSN_TYPE_REGM_REG, 0, 0x8d },
- { "imul", ORC_X86_INSN_TYPE_REGM_REG, 0, 0x0faf },
- { "imul", ORC_X86_INSN_TYPE_REGM, 0, 0xf7, 5 },
- { "incl", ORC_X86_INSN_TYPE_REGM, 0, 0xff, 0 },
- { "decl", ORC_X86_INSN_TYPE_REGM, 0, 0xff, 1 },
- { "sar", ORC_X86_INSN_TYPE_IMM8_REGM, 0, 0xc1, 7 },
- { "sar", ORC_X86_INSN_TYPE_REGM, 0, 0xd1, 7 },
- { "and", ORC_X86_INSN_TYPE_IMM32_A, 0, 0x25, 4 },
+ { "punpcklbw", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0f60 },
+ { "punpcklwd", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0f61 },
+ { "punpckldq", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0f62 },
+ { "packsswb", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0f63 },
+ { "pcmpgtb", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0f64 },
+ { "pcmpgtw", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0f65 },
+ { "pcmpgtd", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0f66 },
+ { "packuswb", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0f67 },
+ { "punpckhbw", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0f68 },
+ { "punpckhwd", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0f69 },
+ { "punpckhdq", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0f6a },
+ { "packssdw", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0f6b },
+ { "punpcklqdq", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0f6c },
+ { "punpckhqdq", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0f6d },
+ { "movdqa", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0f6f },
+ { "psraw", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0fe1 },
+ { "psrlw", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0fd1 },
+ { "psllw", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0ff1 },
+ { "psrad", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0fe2 },
+ { "psrld", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0fd2 },
+ { "pslld", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0ff2 },
+ { "psrlq", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0fd3 },
+ { "psllq", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0ff3 },
+ { "psrldq", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0f73 },
+ { "pslldq", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0f73 },
+ { "psrlq", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0fd3 },
+ { "pcmpeqb", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0f74 },
+ { "pcmpeqw", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0f75 },
+ { "pcmpeqd", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0f76 },
+ { "paddq", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0fd4 },
+ { "pmullw", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0fd5 },
+ { "psubusb", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0fd8 },
+ { "psubusw", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0fd9 },
+ { "pminub", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0fda },
+ { "pand", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0fdb },
+ { "paddusb", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0fdc },
+ { "paddusw", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0fdd },
+ { "pmaxub", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0fde },
+ { "pandn", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0fdf },
+ { "pavgb", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0fe0 },
+ { "pavgw", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0fe3 },
+ { "pmulhuw", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0fe4 },
+ { "pmulhw", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0fe5 },
+ { "psubsb", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0fe8 },
+ { "psubsw", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0fe9 },
+ { "pminsw", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0fea },
+ { "por", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0feb },
+ { "paddsb", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0fec },
+ { "paddsw", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0fed },
+ { "pmaxsw", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0fee },
+ { "pxor", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0fef },
+ { "pmuludq", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0ff4 },
+ { "pmaddwd", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0ff5 },
+ { "psadbw", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0ff6 },
+ { "psubb", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0ff8 },
+ { "psubw", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0ff9 },
+ { "psubd", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0ffa },
+ { "psubq", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0ffb },
+ { "paddb", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0ffc },
+ { "paddw", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0ffd },
+ { "paddd", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0ffe },
+ { "pshufb", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0f3800 },
+ { "phaddw", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0f3801 },
+ { "phaddd", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0f3802 },
+ { "phaddsw", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0f3803 },
+ { "pmaddubsw", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0f3804 },
+ { "phsubw", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0f3805 },
+ { "phsubd", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0f3806 },
+ { "phsubsw", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0f3807 },
+ { "psignb", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0f3808 },
+ { "psignw", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0f3809 },
+ { "psignd", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0f380a },
+ { "pmulhrsw", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0f380b },
+ { "pabsb", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0f381c },
+ { "pabsw", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0f381d },
+ { "pabsd", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0f381e },
+ { "pmovsxbw", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0f3820 },
+ { "pmovsxbd", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0f3821 },
+ { "pmovsxbq", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0f3822 },
+ { "pmovsxwd", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0f3823 },
+ { "pmovsxwq", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0f3824 },
+ { "pmovsxdq", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0f3825 },
+ { "pmuldq", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0f3828 },
+ { "pcmpeqq", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0f3829 },
+ { "packusdw", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0f382b },
+ { "pmovzxbw", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0f3830 },
+ { "pmovzxbd", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0f3831 },
+ { "pmovzxbq", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0f3832 },
+ { "pmovzxwd", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0f3833 },
+ { "pmovzxwq", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0f3834 },
+ { "pmovzxdq", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0f3835 },
+ { "pmulld", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0f3840 },
+ { "phminposuw", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0f3841 },
+ { "pminsb", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0f3838 },
+ { "pminsd", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0f3839 },
+ { "pminuw", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0f383a },
+ { "pminud", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0f383b },
+ { "pmaxsb", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0f383c },
+ { "pmaxsd", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0f383d },
+ { "pmaxuw", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0f383e },
+ { "pmaxud", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0f383f },
+ { "pcmpgtq", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0f3837 },
+ { "addps", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x00, 0x0f58 },
+ { "subps", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x00, 0x0f5c },
+ { "mulps", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x00, 0x0f59 },
+ { "divps", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x00, 0x0f5e },
+ { "sqrtps", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x00, 0x0f51 },
+ { "addpd", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0f58 },
+ { "subpd", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0f5c },
+ { "mulpd", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0f59 },
+ { "divpd", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0f5e },
+ { "sqrtpd", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0f51 },
+ { "cmpeqps", ORC_X86_INSN_TYPE_SSEM_SSE, 0, 0x00, 0x0fc2, 0 },
+ { "cmpeqpd", ORC_X86_INSN_TYPE_SSEM_SSE, 0, 0x66, 0x0fc2, 0 },
+ { "cmpltps", ORC_X86_INSN_TYPE_SSEM_SSE, 0, 0x00, 0x0fc2, 1 },
+ { "cmpltpd", ORC_X86_INSN_TYPE_SSEM_SSE, 0, 0x66, 0x0fc2, 1 },
+ { "cmpleps", ORC_X86_INSN_TYPE_SSEM_SSE, 0, 0x00, 0x0fc2, 2 },
+ { "cmplepd", ORC_X86_INSN_TYPE_SSEM_SSE, 0, 0x66, 0x0fc2, 2 },
+ { "cvttps2dq", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0xf3, 0x0f5b },
+ { "cvttpd2dq", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0fe6 },
+ { "cvtdq2ps", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x00, 0x0f5b },
+ { "cvtdq2pd", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0xf3, 0x0fe6 },
+ { "cvtps2pd", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x00, 0x0f5a },
+ { "cvtpd2ps", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0f5a },
+ { "minps", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x00, 0x0f5d },
+ { "minpd", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0f5d },
+ { "maxps", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x00, 0x0f5f },
+ { "maxpd", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0f5f },
+ { "psraw", ORC_X86_INSN_TYPE_IMM8_MMX_SHIFT, 0, 0x66, 0x0f71, 4 },
+ { "psrlw", ORC_X86_INSN_TYPE_IMM8_MMX_SHIFT, 0, 0x66, 0x0f71, 2 },
+ { "psllw", ORC_X86_INSN_TYPE_IMM8_MMX_SHIFT, 0, 0x66, 0x0f71, 6 },
+ { "psrad", ORC_X86_INSN_TYPE_IMM8_MMX_SHIFT, 0, 0x66, 0x0f72, 4 },
+ { "psrld", ORC_X86_INSN_TYPE_IMM8_MMX_SHIFT, 0, 0x66, 0x0f72, 2 },
+ { "pslld", ORC_X86_INSN_TYPE_IMM8_MMX_SHIFT, 0, 0x66, 0x0f72, 6 },
+ { "psrlq", ORC_X86_INSN_TYPE_IMM8_MMX_SHIFT, 0, 0x66, 0x0f73, 2 },
+ { "psllq", ORC_X86_INSN_TYPE_IMM8_MMX_SHIFT, 0, 0x66, 0x0f73, 6 },
+ { "psrldq", ORC_X86_INSN_TYPE_IMM8_MMX_SHIFT, 0, 0x66, 0x0f73, 3 },
+ { "pslldq", ORC_X86_INSN_TYPE_IMM8_MMX_SHIFT, 0, 0x66, 0x0f73, 7 },
+ { "pshufd", ORC_X86_INSN_TYPE_IMM8_MMXM_MMX, 0, 0x66, 0x0f70 },
+ { "pshuflw", ORC_X86_INSN_TYPE_IMM8_MMXM_MMX, 0, 0xf2, 0x0f70 },
+ { "pshufhw", ORC_X86_INSN_TYPE_IMM8_MMXM_MMX, 0, 0xf3, 0x0f70 },
+ { "palignr", ORC_X86_INSN_TYPE_IMM8_MMXM_MMX, 0, 0x66, 0x0f3a0f },
+ { "pinsrw", ORC_X86_INSN_TYPE_IMM8_REGM_MMX, 0, 0x66, 0x0fc4 },
+ { "movd", ORC_X86_INSN_TYPE_REGM_MMX, 0, 0x66, 0x0f6e },
+ { "movq", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0xf3, 0x0f7e },
+ { "movdqa", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x66, 0x0f6f },
+ { "movdqu", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0xf3, 0x0f6f },
+ { "movhps", ORC_X86_INSN_TYPE_MMXM_MMX, 0, 0x00, 0x0f16 },
+ { "pextrw", ORC_X86_INSN_TYPE_IMM8_MMX_REG_REV, 0, 0x66, 0x0f3a15 },
+ { "movd", ORC_X86_INSN_TYPE_MMX_REGM_REV, 0, 0x66, 0x0f7e },
+ { "movq", ORC_X86_INSN_TYPE_MMXM_MMX_REV, 0, 0x66, 0x0fd6 },
+ { "movdqa", ORC_X86_INSN_TYPE_MMXM_MMX_REV, 0, 0x66, 0x0f7f },
+ { "movdqu", ORC_X86_INSN_TYPE_MMXM_MMX_REV, 0, 0xf3, 0x0f7f },
+ { "movntdq", ORC_X86_INSN_TYPE_MMXM_MMX_REV, 0, 0x66, 0x0fe7 },
+ { "ldmxcsr", ORC_X86_INSN_TYPE_MEM, 0, 0x00, 0x0fae, 2 },
+ { "stmxcsr", ORC_X86_INSN_TYPE_MEM, 0, 0x00, 0x0fae, 3 },
+ { "add", ORC_X86_INSN_TYPE_IMM8_REGM, 0, 0x00, 0x83, 0 },
+ { "add", ORC_X86_INSN_TYPE_IMM32_REGM, 0, 0x00, 0x81, 0 },
+ { "add", ORC_X86_INSN_TYPE_REGM_REG, 0, 0x00, 0x03 },
+ { "add", ORC_X86_INSN_TYPE_REG_REGM, 0, 0x00, 0x01 },
+ { "or", ORC_X86_INSN_TYPE_IMM8_REGM, 0, 0x00, 0x83, 1 },
+ { "or", ORC_X86_INSN_TYPE_IMM32_REGM, 0, 0x00, 0x81, 1 },
+ { "or", ORC_X86_INSN_TYPE_REGM_REG, 0, 0x00, 0x0b },
+ { "or", ORC_X86_INSN_TYPE_REG_REGM, 0, 0x00, 0x09 },
+ { "adc", ORC_X86_INSN_TYPE_IMM8_REGM, 0, 0x00, 0x83, 2 },
+ { "adc", ORC_X86_INSN_TYPE_IMM32_REGM, 0, 0x00, 0x81, 2 },
+ { "adc", ORC_X86_INSN_TYPE_REGM_REG, 0, 0x00, 0x13 },
+ { "adc", ORC_X86_INSN_TYPE_REG_REGM, 0, 0x00, 0x11 },
+ { "sbb", ORC_X86_INSN_TYPE_IMM8_REGM, 0, 0x00, 0x83, 3 },
+ { "sbb", ORC_X86_INSN_TYPE_IMM32_REGM, 0, 0x00, 0x81, 3 },
+ { "sbb", ORC_X86_INSN_TYPE_REGM_REG, 0, 0x00, 0x1b },
+ { "sbb", ORC_X86_INSN_TYPE_REG_REGM, 0, 0x00, 0x19 },
+ { "and", ORC_X86_INSN_TYPE_IMM8_REGM, 0, 0x00, 0x83, 4 },
+ { "and", ORC_X86_INSN_TYPE_IMM32_REGM, 0, 0x00, 0x81, 4 },
+ { "and", ORC_X86_INSN_TYPE_REGM_REG, 0, 0x00, 0x23 },
+ { "and", ORC_X86_INSN_TYPE_REG_REGM, 0, 0x00, 0x21 },
+ { "sub", ORC_X86_INSN_TYPE_IMM8_REGM, 0, 0x00, 0x83, 5 },
+ { "sub", ORC_X86_INSN_TYPE_IMM32_REGM, 0, 0x00, 0x81, 5 },
+ { "sub", ORC_X86_INSN_TYPE_REGM_REG, 0, 0x00, 0x2b },
+ { "sub", ORC_X86_INSN_TYPE_REG_REGM, 0, 0x00, 0x29 },
+ { "xor", ORC_X86_INSN_TYPE_IMM8_REGM, 0, 0x00, 0x83, 6 },
+ { "xor", ORC_X86_INSN_TYPE_IMM32_REGM, 0, 0x00, 0x81, 6 },
+ { "xor", ORC_X86_INSN_TYPE_REGM_REG, 0, 0x00, 0x33 },
+ { "xor", ORC_X86_INSN_TYPE_REG_REGM, 0, 0x00, 0x31 },
+ { "cmp", ORC_X86_INSN_TYPE_IMM8_REGM, 0, 0x00, 0x83, 7 },
+ { "cmp", ORC_X86_INSN_TYPE_IMM32_REGM, 0, 0x00, 0x81, 7 },
+ { "cmp", ORC_X86_INSN_TYPE_REGM_REG, 0, 0x00, 0x3b },
+ { "cmp", ORC_X86_INSN_TYPE_REG_REGM, 0, 0x00, 0x39 },
+ { "jo", ORC_X86_INSN_TYPE_BRANCH, 0, 0x00, 0x70 },
+ { "jno", ORC_X86_INSN_TYPE_BRANCH, 0, 0x00, 0x71 },
+ { "jc", ORC_X86_INSN_TYPE_BRANCH, 0, 0x00, 0x72 },
+ { "jnc", ORC_X86_INSN_TYPE_BRANCH, 0, 0x00, 0x73 },
+ { "jz", ORC_X86_INSN_TYPE_BRANCH, 0, 0x00, 0x74 },
+ { "jnz", ORC_X86_INSN_TYPE_BRANCH, 0, 0x00, 0x75 },
+ { "jbe", ORC_X86_INSN_TYPE_BRANCH, 0, 0x00, 0x76 },
+ { "ja", ORC_X86_INSN_TYPE_BRANCH, 0, 0x00, 0x77 },
+ { "js", ORC_X86_INSN_TYPE_BRANCH, 0, 0x00, 0x78 },
+ { "jns", ORC_X86_INSN_TYPE_BRANCH, 0, 0x00, 0x79 },
+ { "jp", ORC_X86_INSN_TYPE_BRANCH, 0, 0x00, 0x7a },
+ { "jnp", ORC_X86_INSN_TYPE_BRANCH, 0, 0x00, 0x7b },
+ { "jl", ORC_X86_INSN_TYPE_BRANCH, 0, 0x00, 0x7c },
+ { "jge", ORC_X86_INSN_TYPE_BRANCH, 0, 0x00, 0x7d },
+ { "jle", ORC_X86_INSN_TYPE_BRANCH, 0, 0x00, 0x7e },
+ { "jg", ORC_X86_INSN_TYPE_BRANCH, 0, 0x00, 0x7f },
+ { "jmp", ORC_X86_INSN_TYPE_BRANCH, 0, 0x00, 0xeb },
+ { "", ORC_X86_INSN_TYPE_LABEL, 0, 0x00, 0x00 },
+ { "ret", ORC_X86_INSN_TYPE_NONE, 0, 0x00, 0xc3 },
+ { "retq", ORC_X86_INSN_TYPE_NONE, 0, 0x00, 0xc3 },
+ { "emms", ORC_X86_INSN_TYPE_NONE, 0, 0x00, 0x0f77 },
+ { "rdtsc", ORC_X86_INSN_TYPE_NONE, 0, 0x00, 0x0f31 },
+ { "nop", ORC_X86_INSN_TYPE_NONE, 0, 0x00, 0x90 },
+ { "rep movsb", ORC_X86_INSN_TYPE_NONE, 0, 0xf3, 0xa4 },
+ { "rep movsw", ORC_X86_INSN_TYPE_NONE, 0, 0x66, 0xf3a5 },
+ { "rep movsl", ORC_X86_INSN_TYPE_NONE, 0, 0xf3, 0xa5 },
+ { "push", ORC_X86_INSN_TYPE_STACK, 0, 0x00, 0x50 },
+ { "pop", ORC_X86_INSN_TYPE_STACK, 0, 0x00, 0x58 },
+ { "movzx", ORC_X86_INSN_TYPE_REGM_REG, 0, 0x00, 0x0fb6 },
+ { "movw", ORC_X86_INSN_TYPE_REGM_REG, 0, 0x66, 0x8b },
+ { "movl", ORC_X86_INSN_TYPE_REGM_REG, 0, 0x00, 0x8b },
+ { "mov", ORC_X86_INSN_TYPE_REGM_REG, 0, 0x00, 0x8b },
+ { "mov", ORC_X86_INSN_TYPE_IMM32_REGM_MOV, 0, 0x00, 0xb8 },
+ { "movb", ORC_X86_INSN_TYPE_REG8_REGM, 0, 0x00, 0x88 },
+ { "movw", ORC_X86_INSN_TYPE_REG16_REGM, 0, 0x66, 0x89 },
+ { "movl", ORC_X86_INSN_TYPE_REG_REGM, 0, 0x00, 0x89 },
+ { "mov", ORC_X86_INSN_TYPE_REG_REGM, 0, 0x00, 0x89 },
+ { "test", ORC_X86_INSN_TYPE_REGM_REG, 0, 0x00, 0x85 },
+ { "testl", ORC_X86_INSN_TYPE_IMM32_REGM, 0, 0x00, 0xf7, 0 },
+ { "leal", ORC_X86_INSN_TYPE_REGM_REG, 0, 0x00, 0x8d },
+ { "leaq", ORC_X86_INSN_TYPE_REGM_REG, 0, 0x00, 0x8d },
+ { "imul", ORC_X86_INSN_TYPE_REGM_REG, 0, 0x00, 0x0faf },
+ { "imul", ORC_X86_INSN_TYPE_REGM, 0, 0x00, 0xf7, 5 },
+ { "incl", ORC_X86_INSN_TYPE_REGM, 0, 0x00, 0xff, 0 },
+ { "decl", ORC_X86_INSN_TYPE_REGM, 0, 0x00, 0xff, 1 },
+ { "sar", ORC_X86_INSN_TYPE_IMM8_REGM, 0, 0x00, 0xc1, 7 },
+ { "sar", ORC_X86_INSN_TYPE_REGM, 0, 0x00, 0xd1, 7 },
+ { "and", ORC_X86_INSN_TYPE_IMM32_A, 0, 0x00, 0x25, 4 },
};
static void
{
ORC_ASSERT(opcode->code != 0);
- if (opcode->code & 0xff000000) {
- if ((opcode->code & 0xff000000) == 0x66000000 ||
- (opcode->code & 0xff000000) == 0xf3000000 ||
- (opcode->code & 0xff000000) == 0xf2000000) {
- *p->codeptr++ = (opcode->code >> 24) & 0xff;
- orc_x86_emit_rex (p, size, dest, 0, src);
- } else {
- *p->codeptr++ = (opcode->code >> 24) & 0xff;
- orc_x86_emit_rex (p, size, dest, 0, src);
- }
+ if (opcode->prefix != 0) {
+ *p->codeptr++ = opcode->prefix;
+ }
+ orc_x86_emit_rex (p, size, dest, 0, src);
+ if (opcode->code & 0xff0000) {
*p->codeptr++ = (opcode->code >> 16) & 0xff;
+ }
+ if (opcode->code & 0xff00) {
*p->codeptr++ = (opcode->code >> 8) & 0xff;
- *p->codeptr++ = (opcode->code >> 0) & 0xff;
- } else if (opcode->code & 0xff0000) {
- if ((opcode->code & 0xff0000) == 0x660000 ||
- (opcode->code & 0xff0000) == 0xf30000 ||
- (opcode->code & 0xff0000) == 0xf20000) {
- *p->codeptr++ = (opcode->code >> 16) & 0xff;
- orc_x86_emit_rex (p, size, dest, 0, src);
- } else {
- orc_x86_emit_rex (p, size, dest, 0, src);
- *p->codeptr++ = (opcode->code >> 16) & 0xff;
- }
- *p->codeptr++ = (opcode->code >> 8) & 0xff;
- *p->codeptr++ = (opcode->code >> 0) & 0xff;
- } else if (opcode->code & 0xff00) {
- if ((opcode->code & 0xff00) == 0x6600 ||
- (opcode->code & 0xff00) == 0xf300 ||
- (opcode->code & 0xff00) == 0xf200) {
- *p->codeptr++ = (opcode->code >> 8) & 0xff;
- orc_x86_emit_rex (p, size, dest, 0, src);
- } else {
- orc_x86_emit_rex (p, size, dest, 0, src);
- *p->codeptr++ = (opcode->code >> 8) & 0xff;
- }
- *p->codeptr++ = (opcode->code >> 0) & 0xff;
- } else {
- orc_x86_emit_rex (p, size, dest, 0, src);
- *p->codeptr++ = (opcode->code >> 0) & 0xff;
}
+ *p->codeptr++ = (opcode->code >> 0) & 0xff;
}
void