mirror of
https://github.com/capstone-engine/capstone.git
synced 2024-11-23 13:39:46 +00:00
x86: properly handle SSE/AVX instructions
This commit is contained in:
parent
21b4a7362b
commit
dabc9f2990
2
.gitignore
vendored
2
.gitignore
vendored
@ -1,3 +1,5 @@
|
||||
.DS_Store
|
||||
|
||||
# Object files
|
||||
*.o
|
||||
*.ko
|
||||
|
1
MCInst.c
1
MCInst.c
@ -22,6 +22,7 @@ void MCInst_Init(MCInst *inst)
|
||||
inst->op1_size = 0;
|
||||
inst->writeback = false;
|
||||
inst->ac_idx = 0;
|
||||
inst->popcode_adjust = 0;
|
||||
}
|
||||
|
||||
void MCInst_clear(MCInst *inst)
|
||||
|
1
MCInst.h
1
MCInst.h
@ -107,6 +107,7 @@ struct MCInst {
|
||||
bool writeback; // writeback for ARM
|
||||
// operand access index for list of registers sharing the same access right (for ARM)
|
||||
uint8_t ac_idx;
|
||||
uint8_t popcode_adjust; // Pseudo X86 instruction adjust
|
||||
};
|
||||
|
||||
void MCInst_Init(MCInst *inst);
|
||||
|
@ -225,7 +225,7 @@ static void printf512mem(MCInst *MI, unsigned OpNo, SStream *O)
|
||||
|
||||
static void printSSECC(MCInst *MI, unsigned Op, SStream *OS)
|
||||
{
|
||||
int64_t Imm = MCOperand_getImm(MCInst_getOperand(MI, Op)) & 7;
|
||||
uint8_t Imm = (uint8_t)(MCOperand_getImm(MCInst_getOperand(MI, Op)) & 7);
|
||||
switch (Imm) {
|
||||
default: break; // never reach
|
||||
case 0: SStream_concat0(OS, "eq"); op_addSseCC(MI, X86_SSE_CC_EQ); break;
|
||||
@ -237,11 +237,13 @@ static void printSSECC(MCInst *MI, unsigned Op, SStream *OS)
|
||||
case 6: SStream_concat0(OS, "nle"); op_addSseCC(MI, X86_SSE_CC_NLE); break;
|
||||
case 7: SStream_concat0(OS, "ord"); op_addSseCC(MI, X86_SSE_CC_ORD); break;
|
||||
}
|
||||
|
||||
MI->popcode_adjust = Imm + 1;
|
||||
}
|
||||
|
||||
static void printAVXCC(MCInst *MI, unsigned Op, SStream *O)
|
||||
{
|
||||
int64_t Imm = MCOperand_getImm(MCInst_getOperand(MI, Op)) & 0x1f;
|
||||
uint8_t Imm = (uint8_t)(MCOperand_getImm(MCInst_getOperand(MI, Op)) & 0x1f);
|
||||
switch (Imm) {
|
||||
default: break;//printf("Invalid avxcc argument!\n"); break;
|
||||
case 0: SStream_concat0(O, "eq"); op_addAvxCC(MI, X86_AVX_CC_EQ); break;
|
||||
@ -277,6 +279,8 @@ static void printAVXCC(MCInst *MI, unsigned Op, SStream *O)
|
||||
case 0x1e: SStream_concat0(O, "gt_oq"); op_addAvxCC(MI, X86_AVX_CC_GT_OQ); break;
|
||||
case 0x1f: SStream_concat0(O, "true_us"); op_addAvxCC(MI, X86_AVX_CC_TRUE_US); break;
|
||||
}
|
||||
|
||||
MI->popcode_adjust = Imm + 1;
|
||||
}
|
||||
|
||||
static void printXOPCC(MCInst *MI, unsigned Op, SStream *O)
|
||||
|
@ -256,7 +256,7 @@ static void printf512mem(MCInst *MI, unsigned OpNo, SStream *O)
|
||||
|
||||
static void printSSECC(MCInst *MI, unsigned Op, SStream *OS)
|
||||
{
|
||||
int64_t Imm = MCOperand_getImm(MCInst_getOperand(MI, Op)) & 7;
|
||||
uint8_t Imm = (uint8_t)(MCOperand_getImm(MCInst_getOperand(MI, Op)) & 7);
|
||||
switch (Imm) {
|
||||
default: break; // never reach
|
||||
case 0: SStream_concat0(OS, "eq"); op_addSseCC(MI, X86_SSE_CC_EQ); break;
|
||||
@ -268,11 +268,13 @@ static void printSSECC(MCInst *MI, unsigned Op, SStream *OS)
|
||||
case 6: SStream_concat0(OS, "nle"); op_addSseCC(MI, X86_SSE_CC_NLE); break;
|
||||
case 7: SStream_concat0(OS, "ord"); op_addSseCC(MI, X86_SSE_CC_ORD); break;
|
||||
}
|
||||
|
||||
MI->popcode_adjust = Imm + 1;
|
||||
}
|
||||
|
||||
static void printAVXCC(MCInst *MI, unsigned Op, SStream *O)
|
||||
{
|
||||
int64_t Imm = MCOperand_getImm(MCInst_getOperand(MI, Op)) & 0x1f;
|
||||
uint8_t Imm = (uint8_t)(MCOperand_getImm(MCInst_getOperand(MI, Op)) & 0x1f);
|
||||
switch (Imm) {
|
||||
default: break;//printf("Invalid avxcc argument!\n"); break;
|
||||
case 0: SStream_concat0(O, "eq"); op_addAvxCC(MI, X86_AVX_CC_EQ); break;
|
||||
@ -308,6 +310,8 @@ static void printAVXCC(MCInst *MI, unsigned Op, SStream *O)
|
||||
case 0x1e: SStream_concat0(O, "gt_oq"); op_addAvxCC(MI, X86_AVX_CC_GT_OQ); break;
|
||||
case 0x1f: SStream_concat0(O, "true_us"); op_addAvxCC(MI, X86_AVX_CC_TRUE_US); break;
|
||||
}
|
||||
|
||||
MI->popcode_adjust = Imm + 1;
|
||||
}
|
||||
|
||||
static void printXOPCC(MCInst *MI, unsigned Op, SStream *O)
|
||||
|
@ -935,12 +935,8 @@ static name_map insn_name_maps[] = {
|
||||
{ X86_INS_FCMOVU, "fcmovu" },
|
||||
{ X86_INS_CMOVS, "cmovs" },
|
||||
{ X86_INS_CMP, "cmp" },
|
||||
{ X86_INS_CMPPD, "cmppd" },
|
||||
{ X86_INS_CMPPS, "cmpps" },
|
||||
{ X86_INS_CMPSB, "cmpsb" },
|
||||
{ X86_INS_CMPSD, "cmpsd" },
|
||||
{ X86_INS_CMPSQ, "cmpsq" },
|
||||
{ X86_INS_CMPSS, "cmpss" },
|
||||
{ X86_INS_CMPSW, "cmpsw" },
|
||||
{ X86_INS_CMPXCHG16B, "cmpxchg16b" },
|
||||
{ X86_INS_CMPXCHG, "cmpxchg" },
|
||||
@ -1587,10 +1583,6 @@ static name_map insn_name_maps[] = {
|
||||
{ X86_INS_VBROADCASTI64X4, "vbroadcasti64x4" },
|
||||
{ X86_INS_VBROADCASTSD, "vbroadcastsd" },
|
||||
{ X86_INS_VBROADCASTSS, "vbroadcastss" },
|
||||
{ X86_INS_VCMPPD, "vcmppd" },
|
||||
{ X86_INS_VCMPPS, "vcmpps" },
|
||||
{ X86_INS_VCMPSD, "vcmpsd" },
|
||||
{ X86_INS_VCMPSS, "vcmpss" },
|
||||
{ X86_INS_VCOMPRESSPD, "vcompresspd" },
|
||||
{ X86_INS_VCOMPRESSPS, "vcompressps" },
|
||||
{ X86_INS_VCVTDQ2PD, "vcvtdq2pd" },
|
||||
@ -2177,6 +2169,183 @@ static name_map insn_name_maps[] = {
|
||||
{ X86_INS_XTEST, "xtest" },
|
||||
{ X86_INS_FDISI8087_NOP, "fdisi8087_nop" },
|
||||
{ X86_INS_FENI8087_NOP, "feni8087_nop" },
|
||||
|
||||
// pseudo instructions
|
||||
{ X86_INS_CMPSS, "cmpss" },
|
||||
{ X86_INS_CMPEQSS, "cmpeqss" },
|
||||
{ X86_INS_CMPLTSS, "cmpltss" },
|
||||
{ X86_INS_CMPLESS, "cmpless" },
|
||||
{ X86_INS_CMPUNORDSS, "cmpunordss" },
|
||||
{ X86_INS_CMPNEQSS, "cmpneqss" },
|
||||
{ X86_INS_CMPNLTSS, "cmpnltss" },
|
||||
{ X86_INS_CMPNLESS, "cmpnless" },
|
||||
{ X86_INS_CMPORDSS, "cmpordss" },
|
||||
|
||||
{ X86_INS_CMPSD, "cmpsd" },
|
||||
{ X86_INS_CMPEQSD, "cmpeqsd" },
|
||||
{ X86_INS_CMPLTSD, "cmpltsd" },
|
||||
{ X86_INS_CMPLESD, "cmplesd" },
|
||||
{ X86_INS_CMPUNORDSD, "cmpunordsd" },
|
||||
{ X86_INS_CMPNEQSD, "cmpneqsd" },
|
||||
{ X86_INS_CMPNLTSD, "cmpnltsd" },
|
||||
{ X86_INS_CMPNLESD, "cmpnlesd" },
|
||||
{ X86_INS_CMPORDSD, "cmpordsd" },
|
||||
|
||||
{ X86_INS_CMPPS, "cmpps" },
|
||||
{ X86_INS_CMPEQPS, "cmpeqps" },
|
||||
{ X86_INS_CMPLTPS, "cmpltps" },
|
||||
{ X86_INS_CMPLEPS, "cmpleps" },
|
||||
{ X86_INS_CMPUNORDPS, "cmpunordps" },
|
||||
{ X86_INS_CMPNEQPS, "cmpneqps" },
|
||||
{ X86_INS_CMPNLTPS, "cmpnltps" },
|
||||
{ X86_INS_CMPNLEPS, "cmpnleps" },
|
||||
{ X86_INS_CMPORDPS, "cmpordps" },
|
||||
|
||||
{ X86_INS_CMPPD, "cmppd" },
|
||||
{ X86_INS_CMPEQPD, "cmpeqpd" },
|
||||
{ X86_INS_CMPLTPD, "cmpltpd" },
|
||||
{ X86_INS_CMPLEPD, "cmplepd" },
|
||||
{ X86_INS_CMPUNORDPD, "cmpunordpd" },
|
||||
{ X86_INS_CMPNEQPD, "cmpneqpd" },
|
||||
{ X86_INS_CMPNLTPD, "cmpnltpd" },
|
||||
{ X86_INS_CMPNLEPD, "cmpnlepd" },
|
||||
{ X86_INS_CMPORDPD, "cmpordpd" },
|
||||
|
||||
{ X86_INS_VCMPSS, "vcmpss" },
|
||||
{ X86_INS_VCMPEQSS, "vcmpeqss" },
|
||||
{ X86_INS_VCMPLTSS, "vcmpltss" },
|
||||
{ X86_INS_VCMPLESS, "vcmpless" },
|
||||
{ X86_INS_VCMPUNORDSS, "vcmpunordss" },
|
||||
{ X86_INS_VCMPNEQSS, "vcmpneqss" },
|
||||
{ X86_INS_VCMPNLTSS, "vcmpnltss" },
|
||||
{ X86_INS_VCMPNLESS, "vcmpnless" },
|
||||
{ X86_INS_VCMPORDSS, "vcmpordss" },
|
||||
{ X86_INS_VCMPEQ_UQSS, "vcmpeq_uqss" },
|
||||
{ X86_INS_VCMPNGESS, "vcmpngess" },
|
||||
{ X86_INS_VCMPNGTSS, "vcmpngtss" },
|
||||
{ X86_INS_VCMPFALSESS, "vcmpfalsess" },
|
||||
{ X86_INS_VCMPNEQ_OQSS, "vcmpneq_oqss" },
|
||||
{ X86_INS_VCMPGESS, "vcmpgess" },
|
||||
{ X86_INS_VCMPGTSS, "vcmpgtss" },
|
||||
{ X86_INS_VCMPTRUESS, "vcmptruess" },
|
||||
{ X86_INS_VCMPEQ_OSSS, "vcmpeq_osss" },
|
||||
{ X86_INS_VCMPLT_OQSS, "vcmplt_oqss" },
|
||||
{ X86_INS_VCMPLE_OQSS, "vcmple_oqss" },
|
||||
{ X86_INS_VCMPUNORD_SSS, "vcmpunord_sss" },
|
||||
{ X86_INS_VCMPNEQ_USSS, "vcmpneq_usss" },
|
||||
{ X86_INS_VCMPNLT_UQSS, "vcmpnlt_uqss" },
|
||||
{ X86_INS_VCMPNLE_UQSS, "vcmpnle_uqss" },
|
||||
{ X86_INS_VCMPORD_SSS, "vcmpord_sss" },
|
||||
{ X86_INS_VCMPEQ_USSS, "vcmpeq_usss" },
|
||||
{ X86_INS_VCMPNGE_UQSS, "vcmpnge_uqss" },
|
||||
{ X86_INS_VCMPNGT_UQSS, "vcmpngt_uqss" },
|
||||
{ X86_INS_VCMPFALSE_OSSS, "vcmpfalse_osss" },
|
||||
{ X86_INS_VCMPNEQ_OSSS, "vcmpneq_osss" },
|
||||
{ X86_INS_VCMPGE_OQSS, "vcmpge_oqss" },
|
||||
{ X86_INS_VCMPGT_OQSS, "vcmpgt_oqss" },
|
||||
{ X86_INS_VCMPTRUE_USSS, "vcmptrue_usss" },
|
||||
|
||||
{ X86_INS_VCMPSD, "vcmpsd" },
|
||||
{ X86_INS_VCMPEQSD, "vcmpeqsd" },
|
||||
{ X86_INS_VCMPLTSD, "vcmpltsd" },
|
||||
{ X86_INS_VCMPLESD, "vcmplesd" },
|
||||
{ X86_INS_VCMPUNORDSD, "vcmpunordsd" },
|
||||
{ X86_INS_VCMPNEQSD, "vcmpneqsd" },
|
||||
{ X86_INS_VCMPNLTSD, "vcmpnltsd" },
|
||||
{ X86_INS_VCMPNLESD, "vcmpnlesd" },
|
||||
{ X86_INS_VCMPORDSD, "vcmpordsd" },
|
||||
{ X86_INS_VCMPEQ_UQSD, "vcmpeq_uqsd" },
|
||||
{ X86_INS_VCMPNGESD, "vcmpngesd" },
|
||||
{ X86_INS_VCMPNGTSD, "vcmpngtsd" },
|
||||
{ X86_INS_VCMPFALSESD, "vcmpfalsesd" },
|
||||
{ X86_INS_VCMPNEQ_OQSD, "vcmpneq_oqsd" },
|
||||
{ X86_INS_VCMPGESD, "vcmpgesd" },
|
||||
{ X86_INS_VCMPGTSD, "vcmpgtsd" },
|
||||
{ X86_INS_VCMPTRUESD, "vcmptruesd" },
|
||||
{ X86_INS_VCMPEQ_OSSD, "vcmpeq_ossd" },
|
||||
{ X86_INS_VCMPLT_OQSD, "vcmplt_oqsd" },
|
||||
{ X86_INS_VCMPLE_OQSD, "vcmple_oqsd" },
|
||||
{ X86_INS_VCMPUNORD_SSD, "vcmpunord_ssd" },
|
||||
{ X86_INS_VCMPNEQ_USSD, "vcmpneq_ussd" },
|
||||
{ X86_INS_VCMPNLT_UQSD, "vcmpnlt_uqsd" },
|
||||
{ X86_INS_VCMPNLE_UQSD, "vcmpnle_uqsd" },
|
||||
{ X86_INS_VCMPORD_SSD, "vcmpord_ssd" },
|
||||
{ X86_INS_VCMPEQ_USSD, "vcmpeq_ussd" },
|
||||
{ X86_INS_VCMPNGE_UQSD, "vcmpnge_uqsd" },
|
||||
{ X86_INS_VCMPNGT_UQSD, "vcmpngt_uqsd" },
|
||||
{ X86_INS_VCMPFALSE_OSSD, "vcmpfalse_ossd" },
|
||||
{ X86_INS_VCMPNEQ_OSSD, "vcmpneq_ossd" },
|
||||
{ X86_INS_VCMPGE_OQSD, "vcmpge_oqsd" },
|
||||
{ X86_INS_VCMPGT_OQSD, "vcmpgt_oqsd" },
|
||||
{ X86_INS_VCMPTRUE_USSD, "vcmptrue_ussd" },
|
||||
|
||||
{ X86_INS_VCMPPS, "vcmpps" },
|
||||
{ X86_INS_VCMPEQPS, "vcmpeqps" },
|
||||
{ X86_INS_VCMPLTPS, "vcmpltps" },
|
||||
{ X86_INS_VCMPLEPS, "vcmpleps" },
|
||||
{ X86_INS_VCMPUNORDPS, "vcmpunordps" },
|
||||
{ X86_INS_VCMPNEQPS, "vcmpneqps" },
|
||||
{ X86_INS_VCMPNLTPS, "vcmpnltps" },
|
||||
{ X86_INS_VCMPNLEPS, "vcmpnleps" },
|
||||
{ X86_INS_VCMPORDPS, "vcmpordps" },
|
||||
{ X86_INS_VCMPEQ_UQPS, "vcmpeq_uqps" },
|
||||
{ X86_INS_VCMPNGEPS, "vcmpngeps" },
|
||||
{ X86_INS_VCMPNGTPS, "vcmpngtps" },
|
||||
{ X86_INS_VCMPFALSEPS, "vcmpfalseps" },
|
||||
{ X86_INS_VCMPNEQ_OQPS, "vcmpneq_oqps" },
|
||||
{ X86_INS_VCMPGEPS, "vcmpgeps" },
|
||||
{ X86_INS_VCMPGTPS, "vcmpgtps" },
|
||||
{ X86_INS_VCMPTRUEPS, "vcmptrueps" },
|
||||
{ X86_INS_VCMPEQ_OSPS, "vcmpeq_osps" },
|
||||
{ X86_INS_VCMPLT_OQPS, "vcmplt_oqps" },
|
||||
{ X86_INS_VCMPLE_OQPS, "vcmple_oqps" },
|
||||
{ X86_INS_VCMPUNORD_SPS, "vcmpunord_sps" },
|
||||
{ X86_INS_VCMPNEQ_USPS, "vcmpneq_usps" },
|
||||
{ X86_INS_VCMPNLT_UQPS, "vcmpnlt_uqps" },
|
||||
{ X86_INS_VCMPNLE_UQPS, "vcmpnle_uqps" },
|
||||
{ X86_INS_VCMPORD_SPS, "vcmpord_sps" },
|
||||
{ X86_INS_VCMPEQ_USPS, "vcmpeq_usps" },
|
||||
{ X86_INS_VCMPNGE_UQPS, "vcmpnge_uqps" },
|
||||
{ X86_INS_VCMPNGT_UQPS, "vcmpngt_uqps" },
|
||||
{ X86_INS_VCMPFALSE_OSPS, "vcmpfalse_osps" },
|
||||
{ X86_INS_VCMPNEQ_OSPS, "vcmpneq_osps" },
|
||||
{ X86_INS_VCMPGE_OQPS, "vcmpge_oqps" },
|
||||
{ X86_INS_VCMPGT_OQPS, "vcmpgt_oqps" },
|
||||
{ X86_INS_VCMPTRUE_USPS, "vcmptrue_usps" },
|
||||
|
||||
{ X86_INS_VCMPPD, "vcmppd" },
|
||||
{ X86_INS_VCMPEQPD, "vcmpeqpd" },
|
||||
{ X86_INS_VCMPLTPD, "vcmpltpd" },
|
||||
{ X86_INS_VCMPLEPD, "vcmplepd" },
|
||||
{ X86_INS_VCMPUNORDPD, "vcmpunordpd" },
|
||||
{ X86_INS_VCMPNEQPD, "vcmpneqpd" },
|
||||
{ X86_INS_VCMPNLTPD, "vcmpnltpd" },
|
||||
{ X86_INS_VCMPNLEPD, "vcmpnlepd" },
|
||||
{ X86_INS_VCMPORDPD, "vcmpordpd" },
|
||||
{ X86_INS_VCMPEQ_UQPD, "vcmpeq_uqpd" },
|
||||
{ X86_INS_VCMPNGEPD, "vcmpngepd" },
|
||||
{ X86_INS_VCMPNGTPD, "vcmpngtpd" },
|
||||
{ X86_INS_VCMPFALSEPD, "vcmpfalsepd" },
|
||||
{ X86_INS_VCMPNEQ_OQPD, "vcmpneq_oqpd" },
|
||||
{ X86_INS_VCMPGEPD, "vcmpgepd" },
|
||||
{ X86_INS_VCMPGTPD, "vcmpgtpd" },
|
||||
{ X86_INS_VCMPTRUEPD, "vcmptruepd" },
|
||||
{ X86_INS_VCMPEQ_OSPD, "vcmpeq_ospd" },
|
||||
{ X86_INS_VCMPLT_OQPD, "vcmplt_oqpd" },
|
||||
{ X86_INS_VCMPLE_OQPD, "vcmple_oqpd" },
|
||||
{ X86_INS_VCMPUNORD_SPD, "vcmpunord_spd" },
|
||||
{ X86_INS_VCMPNEQ_USPD, "vcmpneq_uspd" },
|
||||
{ X86_INS_VCMPNLT_UQPD, "vcmpnlt_uqpd" },
|
||||
{ X86_INS_VCMPNLE_UQPD, "vcmpnle_uqpd" },
|
||||
{ X86_INS_VCMPORD_SPD, "vcmpord_spd" },
|
||||
{ X86_INS_VCMPEQ_USPD, "vcmpeq_uspd" },
|
||||
{ X86_INS_VCMPNGE_UQPD, "vcmpnge_uqpd" },
|
||||
{ X86_INS_VCMPNGT_UQPD, "vcmpngt_uqpd" },
|
||||
{ X86_INS_VCMPFALSE_OSPD, "vcmpfalse_ospd" },
|
||||
{ X86_INS_VCMPNEQ_OSPD, "vcmpneq_ospd" },
|
||||
{ X86_INS_VCMPGE_OQPD, "vcmpge_oqpd" },
|
||||
{ X86_INS_VCMPGT_OQPD, "vcmpgt_oqpd" },
|
||||
{ X86_INS_VCMPTRUE_USPD, "vcmptrue_uspd" },
|
||||
};
|
||||
#endif
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
9
cs.c
9
cs.c
@ -662,9 +662,12 @@ size_t CAPSTONE_API cs_disasm(csh ud, const uint8_t *buffer, size_t size, uint64
|
||||
handle->insn_id(handle, insn_cache, mci.Opcode);
|
||||
|
||||
handle->printer(&mci, &ss, handle->printer_info);
|
||||
|
||||
fill_insn(handle, insn_cache, ss.buffer, &mci, handle->post_printer, buffer);
|
||||
|
||||
// adjust for pseudo opcode (X86)
|
||||
if (handle->arch == CS_ARCH_X86)
|
||||
insn_cache->id += mci.popcode_adjust;
|
||||
|
||||
next_offset = insn_size;
|
||||
} else {
|
||||
// encounter a broken instruction
|
||||
@ -869,6 +872,10 @@ bool CAPSTONE_API cs_disasm_iter(csh ud, const uint8_t **code, size_t *size,
|
||||
|
||||
fill_insn(handle, insn, ss.buffer, &mci, handle->post_printer, *code);
|
||||
|
||||
// adjust for pseudo opcode (X86)
|
||||
if (handle->arch == CS_ARCH_X86)
|
||||
insn->id += mci.popcode_adjust;
|
||||
|
||||
*code += insn_size;
|
||||
*size -= insn_size;
|
||||
*address += insn_size;
|
||||
|
@ -422,12 +422,8 @@ typedef enum x86_insn {
|
||||
X86_INS_FCMOVU,
|
||||
X86_INS_CMOVS,
|
||||
X86_INS_CMP,
|
||||
X86_INS_CMPPD,
|
||||
X86_INS_CMPPS,
|
||||
X86_INS_CMPSB,
|
||||
X86_INS_CMPSD,
|
||||
X86_INS_CMPSQ,
|
||||
X86_INS_CMPSS,
|
||||
X86_INS_CMPSW,
|
||||
X86_INS_CMPXCHG16B,
|
||||
X86_INS_CMPXCHG,
|
||||
@ -1074,10 +1070,6 @@ typedef enum x86_insn {
|
||||
X86_INS_VBROADCASTI64X4,
|
||||
X86_INS_VBROADCASTSD,
|
||||
X86_INS_VBROADCASTSS,
|
||||
X86_INS_VCMPPD,
|
||||
X86_INS_VCMPPS,
|
||||
X86_INS_VCMPSD,
|
||||
X86_INS_VCMPSS,
|
||||
X86_INS_VCOMPRESSPD,
|
||||
X86_INS_VCOMPRESSPS,
|
||||
X86_INS_VCVTDQ2PD,
|
||||
@ -1665,6 +1657,183 @@ typedef enum x86_insn {
|
||||
X86_INS_FDISI8087_NOP,
|
||||
X86_INS_FENI8087_NOP,
|
||||
|
||||
// pseudo instructions
|
||||
X86_INS_CMPSS,
|
||||
X86_INS_CMPEQSS,
|
||||
X86_INS_CMPLTSS,
|
||||
X86_INS_CMPLESS,
|
||||
X86_INS_CMPUNORDSS,
|
||||
X86_INS_CMPNEQSS,
|
||||
X86_INS_CMPNLTSS,
|
||||
X86_INS_CMPNLESS,
|
||||
X86_INS_CMPORDSS,
|
||||
|
||||
X86_INS_CMPSD,
|
||||
X86_INS_CMPEQSD,
|
||||
X86_INS_CMPLTSD,
|
||||
X86_INS_CMPLESD,
|
||||
X86_INS_CMPUNORDSD,
|
||||
X86_INS_CMPNEQSD,
|
||||
X86_INS_CMPNLTSD,
|
||||
X86_INS_CMPNLESD,
|
||||
X86_INS_CMPORDSD,
|
||||
|
||||
X86_INS_CMPPS,
|
||||
X86_INS_CMPEQPS,
|
||||
X86_INS_CMPLTPS,
|
||||
X86_INS_CMPLEPS,
|
||||
X86_INS_CMPUNORDPS,
|
||||
X86_INS_CMPNEQPS,
|
||||
X86_INS_CMPNLTPS,
|
||||
X86_INS_CMPNLEPS,
|
||||
X86_INS_CMPORDPS,
|
||||
|
||||
X86_INS_CMPPD,
|
||||
X86_INS_CMPEQPD,
|
||||
X86_INS_CMPLTPD,
|
||||
X86_INS_CMPLEPD,
|
||||
X86_INS_CMPUNORDPD,
|
||||
X86_INS_CMPNEQPD,
|
||||
X86_INS_CMPNLTPD,
|
||||
X86_INS_CMPNLEPD,
|
||||
X86_INS_CMPORDPD,
|
||||
|
||||
X86_INS_VCMPSS,
|
||||
X86_INS_VCMPEQSS,
|
||||
X86_INS_VCMPLTSS,
|
||||
X86_INS_VCMPLESS,
|
||||
X86_INS_VCMPUNORDSS,
|
||||
X86_INS_VCMPNEQSS,
|
||||
X86_INS_VCMPNLTSS,
|
||||
X86_INS_VCMPNLESS,
|
||||
X86_INS_VCMPORDSS,
|
||||
X86_INS_VCMPEQ_UQSS,
|
||||
X86_INS_VCMPNGESS,
|
||||
X86_INS_VCMPNGTSS,
|
||||
X86_INS_VCMPFALSESS,
|
||||
X86_INS_VCMPNEQ_OQSS,
|
||||
X86_INS_VCMPGESS,
|
||||
X86_INS_VCMPGTSS,
|
||||
X86_INS_VCMPTRUESS,
|
||||
X86_INS_VCMPEQ_OSSS,
|
||||
X86_INS_VCMPLT_OQSS,
|
||||
X86_INS_VCMPLE_OQSS,
|
||||
X86_INS_VCMPUNORD_SSS,
|
||||
X86_INS_VCMPNEQ_USSS,
|
||||
X86_INS_VCMPNLT_UQSS,
|
||||
X86_INS_VCMPNLE_UQSS,
|
||||
X86_INS_VCMPORD_SSS,
|
||||
X86_INS_VCMPEQ_USSS,
|
||||
X86_INS_VCMPNGE_UQSS,
|
||||
X86_INS_VCMPNGT_UQSS,
|
||||
X86_INS_VCMPFALSE_OSSS,
|
||||
X86_INS_VCMPNEQ_OSSS,
|
||||
X86_INS_VCMPGE_OQSS,
|
||||
X86_INS_VCMPGT_OQSS,
|
||||
X86_INS_VCMPTRUE_USSS,
|
||||
|
||||
X86_INS_VCMPSD,
|
||||
X86_INS_VCMPEQSD,
|
||||
X86_INS_VCMPLTSD,
|
||||
X86_INS_VCMPLESD,
|
||||
X86_INS_VCMPUNORDSD,
|
||||
X86_INS_VCMPNEQSD,
|
||||
X86_INS_VCMPNLTSD,
|
||||
X86_INS_VCMPNLESD,
|
||||
X86_INS_VCMPORDSD,
|
||||
X86_INS_VCMPEQ_UQSD,
|
||||
X86_INS_VCMPNGESD,
|
||||
X86_INS_VCMPNGTSD,
|
||||
X86_INS_VCMPFALSESD,
|
||||
X86_INS_VCMPNEQ_OQSD,
|
||||
X86_INS_VCMPGESD,
|
||||
X86_INS_VCMPGTSD,
|
||||
X86_INS_VCMPTRUESD,
|
||||
X86_INS_VCMPEQ_OSSD,
|
||||
X86_INS_VCMPLT_OQSD,
|
||||
X86_INS_VCMPLE_OQSD,
|
||||
X86_INS_VCMPUNORD_SSD,
|
||||
X86_INS_VCMPNEQ_USSD,
|
||||
X86_INS_VCMPNLT_UQSD,
|
||||
X86_INS_VCMPNLE_UQSD,
|
||||
X86_INS_VCMPORD_SSD,
|
||||
X86_INS_VCMPEQ_USSD,
|
||||
X86_INS_VCMPNGE_UQSD,
|
||||
X86_INS_VCMPNGT_UQSD,
|
||||
X86_INS_VCMPFALSE_OSSD,
|
||||
X86_INS_VCMPNEQ_OSSD,
|
||||
X86_INS_VCMPGE_OQSD,
|
||||
X86_INS_VCMPGT_OQSD,
|
||||
X86_INS_VCMPTRUE_USSD,
|
||||
|
||||
X86_INS_VCMPPS,
|
||||
X86_INS_VCMPEQPS,
|
||||
X86_INS_VCMPLTPS,
|
||||
X86_INS_VCMPLEPS,
|
||||
X86_INS_VCMPUNORDPS,
|
||||
X86_INS_VCMPNEQPS,
|
||||
X86_INS_VCMPNLTPS,
|
||||
X86_INS_VCMPNLEPS,
|
||||
X86_INS_VCMPORDPS,
|
||||
X86_INS_VCMPEQ_UQPS,
|
||||
X86_INS_VCMPNGEPS,
|
||||
X86_INS_VCMPNGTPS,
|
||||
X86_INS_VCMPFALSEPS,
|
||||
X86_INS_VCMPNEQ_OQPS,
|
||||
X86_INS_VCMPGEPS,
|
||||
X86_INS_VCMPGTPS,
|
||||
X86_INS_VCMPTRUEPS,
|
||||
X86_INS_VCMPEQ_OSPS,
|
||||
X86_INS_VCMPLT_OQPS,
|
||||
X86_INS_VCMPLE_OQPS,
|
||||
X86_INS_VCMPUNORD_SPS,
|
||||
X86_INS_VCMPNEQ_USPS,
|
||||
X86_INS_VCMPNLT_UQPS,
|
||||
X86_INS_VCMPNLE_UQPS,
|
||||
X86_INS_VCMPORD_SPS,
|
||||
X86_INS_VCMPEQ_USPS,
|
||||
X86_INS_VCMPNGE_UQPS,
|
||||
X86_INS_VCMPNGT_UQPS,
|
||||
X86_INS_VCMPFALSE_OSPS,
|
||||
X86_INS_VCMPNEQ_OSPS,
|
||||
X86_INS_VCMPGE_OQPS,
|
||||
X86_INS_VCMPGT_OQPS,
|
||||
X86_INS_VCMPTRUE_USPS,
|
||||
|
||||
X86_INS_VCMPPD,
|
||||
X86_INS_VCMPEQPD,
|
||||
X86_INS_VCMPLTPD,
|
||||
X86_INS_VCMPLEPD,
|
||||
X86_INS_VCMPUNORDPD,
|
||||
X86_INS_VCMPNEQPD,
|
||||
X86_INS_VCMPNLTPD,
|
||||
X86_INS_VCMPNLEPD,
|
||||
X86_INS_VCMPORDPD,
|
||||
X86_INS_VCMPEQ_UQPD,
|
||||
X86_INS_VCMPNGEPD,
|
||||
X86_INS_VCMPNGTPD,
|
||||
X86_INS_VCMPFALSEPD,
|
||||
X86_INS_VCMPNEQ_OQPD,
|
||||
X86_INS_VCMPGEPD,
|
||||
X86_INS_VCMPGTPD,
|
||||
X86_INS_VCMPTRUEPD,
|
||||
X86_INS_VCMPEQ_OSPD,
|
||||
X86_INS_VCMPLT_OQPD,
|
||||
X86_INS_VCMPLE_OQPD,
|
||||
X86_INS_VCMPUNORD_SPD,
|
||||
X86_INS_VCMPNEQ_USPD,
|
||||
X86_INS_VCMPNLT_UQPD,
|
||||
X86_INS_VCMPNLE_UQPD,
|
||||
X86_INS_VCMPORD_SPD,
|
||||
X86_INS_VCMPEQ_USPD,
|
||||
X86_INS_VCMPNGE_UQPD,
|
||||
X86_INS_VCMPNGT_UQPD,
|
||||
X86_INS_VCMPFALSE_OSPD,
|
||||
X86_INS_VCMPNEQ_OSPD,
|
||||
X86_INS_VCMPGE_OQPD,
|
||||
X86_INS_VCMPGT_OQPD,
|
||||
X86_INS_VCMPTRUE_USPD,
|
||||
|
||||
X86_INS_ENDING, // mark the end of the list of insn
|
||||
} x86_insn;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user