diff --git a/librz/analysis/op.c b/librz/analysis/op.c index 868ee5bbd9..ce73ece991 100644 --- a/librz/analysis/op.c +++ b/librz/analysis/op.c @@ -283,7 +283,8 @@ static struct optype { { RZ_ANALYSIS_OP_TYPE_XOR, "xor" }, { RZ_ANALYSIS_OP_TYPE_CASE, "case" }, { RZ_ANALYSIS_OP_TYPE_CPL, "cpl" }, - { RZ_ANALYSIS_OP_TYPE_CRYPTO, "crypto" } + { RZ_ANALYSIS_OP_TYPE_CRYPTO, "crypto" }, + { RZ_ANALYSIS_OP_TYPE_SIMD, "simd" } }; /** diff --git a/librz/analysis/p/analysis_x86_cs.c b/librz/analysis/p/analysis_x86_cs.c index 48830ea379..f6bf336e58 100644 --- a/librz/analysis/p/analysis_x86_cs.c +++ b/librz/analysis/p/analysis_x86_cs.c @@ -742,6 +742,13 @@ static void anop_esil(RzAnalysis *a, RzAnalysisOp *op, ut64 addr, const ut8 *buf dst, width, src, width, dst); } break; + // comiss + case X86_INS_COMISS: + case X86_INS_UCOMISS: + case X86_INS_VCOMISS: + case X86_INS_VUCOMISS: + op->type = RZ_ANALYSIS_OP_TYPE_SIMD | RZ_ANALYSIS_OP_TYPE_CMP; + break; // mov case X86_INS_MOVSS: case X86_INS_MOV: diff --git a/librz/include/rz_analysis.h b/librz/include/rz_analysis.h index 5e14aff4e8..0f6a793ea2 100644 --- a/librz/include/rz_analysis.h +++ b/librz/include/rz_analysis.h @@ -271,6 +271,7 @@ typedef enum { RZ_ANALYSIS_OP_TYPE_MEM = 0x20000000, // TODO must be moved to prefix? RZ_ANALYSIS_OP_TYPE_REG = 0x10000000, // operand is a register RZ_ANALYSIS_OP_TYPE_IND = 0x08000000, // operand is indirect + RZ_ANALYSIS_OP_TYPE_SIMD = 0x04000000, // SIMD RZ_ANALYSIS_OP_TYPE_NULL = 0, RZ_ANALYSIS_OP_TYPE_JMP = 1, /* mandatory jump */ RZ_ANALYSIS_OP_TYPE_UJMP = 2, /* unknown jump (register or so) */