summaryrefslogtreecommitdiff
path: root/highlevelilinstruction.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'highlevelilinstruction.cpp')
-rw-r--r--highlevelilinstruction.cpp50
1 files changed, 50 insertions, 0 deletions
diff --git a/highlevelilinstruction.cpp b/highlevelilinstruction.cpp
index 92312549..00f0e67a 100644
--- a/highlevelilinstruction.cpp
+++ b/highlevelilinstruction.cpp
@@ -266,6 +266,11 @@ static constexpr std::array s_instructionOperandUsage = {
OperandUsage{HLIL_CTZ, {SourceExprHighLevelOperandUsage}},
OperandUsage{HLIL_RBIT, {SourceExprHighLevelOperandUsage}},
OperandUsage{HLIL_CLS, {SourceExprHighLevelOperandUsage}},
+ OperandUsage{HLIL_MINS, {LeftExprHighLevelOperandUsage, RightExprHighLevelOperandUsage}},
+ OperandUsage{HLIL_MAXS, {LeftExprHighLevelOperandUsage, RightExprHighLevelOperandUsage}},
+ OperandUsage{HLIL_MINU, {LeftExprHighLevelOperandUsage, RightExprHighLevelOperandUsage}},
+ OperandUsage{HLIL_MAXU, {LeftExprHighLevelOperandUsage, RightExprHighLevelOperandUsage}},
+ OperandUsage{HLIL_ABS, {SourceExprHighLevelOperandUsage}},
};
@@ -1273,6 +1278,7 @@ void HighLevelILInstruction::CollectSubExprs(stack<size_t>& toProcess) const
case HLIL_CTZ:
case HLIL_RBIT:
case HLIL_CLS:
+ case HLIL_ABS:
case HLIL_SX:
case HLIL_ZX:
case HLIL_LOW_PART:
@@ -1298,6 +1304,10 @@ void HighLevelILInstruction::CollectSubExprs(stack<size_t>& toProcess) const
case HLIL_AND:
case HLIL_OR:
case HLIL_XOR:
+ case HLIL_MINS:
+ case HLIL_MAXS:
+ case HLIL_MINU:
+ case HLIL_MAXU:
case HLIL_LSL:
case HLIL_LSR:
case HLIL_ASR:
@@ -1587,6 +1597,7 @@ ExprId HighLevelILInstruction::CopyTo(
case HLIL_CTZ:
case HLIL_RBIT:
case HLIL_CLS:
+ case HLIL_ABS:
case HLIL_SX:
case HLIL_ZX:
case HLIL_LOW_PART:
@@ -1611,6 +1622,10 @@ ExprId HighLevelILInstruction::CopyTo(
case HLIL_AND:
case HLIL_OR:
case HLIL_XOR:
+ case HLIL_MINS:
+ case HLIL_MAXS:
+ case HLIL_MINU:
+ case HLIL_MAXU:
case HLIL_LSL:
case HLIL_LSR:
case HLIL_ASR:
@@ -2073,6 +2088,10 @@ bool HighLevelILInstruction::operator<(const HighLevelILInstruction& other) cons
case HLIL_AND:
case HLIL_OR:
case HLIL_XOR:
+ case HLIL_MINS:
+ case HLIL_MAXS:
+ case HLIL_MINU:
+ case HLIL_MAXU:
case HLIL_LSL:
case HLIL_LSR:
case HLIL_ASR:
@@ -2154,6 +2173,7 @@ bool HighLevelILInstruction::operator<(const HighLevelILInstruction& other) cons
case HLIL_CTZ:
case HLIL_RBIT:
case HLIL_CLS:
+ case HLIL_ABS:
case HLIL_SX:
case HLIL_ZX:
case HLIL_LOW_PART:
@@ -3157,6 +3177,36 @@ ExprId HighLevelILFunction::CountLeadingSigns(size_t size, ExprId src, const ILS
}
+ExprId HighLevelILFunction::MinSigned(size_t size, ExprId left, ExprId right, const ILSourceLocation& loc)
+{
+ return AddExprWithLocation(HLIL_MINS, loc, size, left, right);
+}
+
+
+ExprId HighLevelILFunction::MaxSigned(size_t size, ExprId left, ExprId right, const ILSourceLocation& loc)
+{
+ return AddExprWithLocation(HLIL_MAXS, loc, size, left, right);
+}
+
+
+ExprId HighLevelILFunction::MinUnsigned(size_t size, ExprId left, ExprId right, const ILSourceLocation& loc)
+{
+ return AddExprWithLocation(HLIL_MINU, loc, size, left, right);
+}
+
+
+ExprId HighLevelILFunction::MaxUnsigned(size_t size, ExprId left, ExprId right, const ILSourceLocation& loc)
+{
+ return AddExprWithLocation(HLIL_MAXU, loc, size, left, right);
+}
+
+
+ExprId HighLevelILFunction::AbsoluteValue(size_t size, ExprId src, const ILSourceLocation& loc)
+{
+ return AddExprWithLocation(HLIL_ABS, loc, size, src);
+}
+
+
ExprId HighLevelILFunction::SignExtend(size_t size, ExprId src, const ILSourceLocation& loc)
{
return AddExprWithLocation(HLIL_SX, loc, size, src);