summaryrefslogtreecommitdiff
path: root/lowlevelilinstruction.h
diff options
context:
space:
mode:
authorBrian Potchik <brian@vector35.com>2024-03-02 14:38:47 -0500
committerBrian Potchik <brian@vector35.com>2024-03-02 14:38:47 -0500
commit2e3b9c925390cc8b1d72a41d0564bb2862d3dba2 (patch)
treef40495cd494b8c157a0298259019873a624dc7e2 /lowlevelilinstruction.h
parentff2aa7435c3847f6969364f5d04d0943918429be (diff)
Add support for memory intrinsics.
Diffstat (limited to 'lowlevelilinstruction.h')
-rw-r--r--lowlevelilinstruction.h22
1 files changed, 22 insertions, 0 deletions
diff --git a/lowlevelilinstruction.h b/lowlevelilinstruction.h
index e51a11cf..898e72b8 100644
--- a/lowlevelilinstruction.h
+++ b/lowlevelilinstruction.h
@@ -240,6 +240,7 @@ namespace BinaryNinja
SourceSSAFlagsLowLevelOperandUsage,
OutputRegisterOrFlagListLowLevelOperandUsage,
OutputSSARegisterOrFlagListLowLevelOperandUsage,
+ OutputMemoryIntrinsicLowLevelOperandUsage,
SourceMemoryVersionsLowLevelOperandUsage,
TargetsLowLevelOperandUsage,
RegisterStackAdjustmentsLowLevelOperandUsage,
@@ -1701,6 +1702,27 @@ namespace BinaryNinja
UpdateRawOperandAsSSARegisterOrFlagList(0, outputs);
}
};
+ template <>
+ struct LowLevelILInstructionAccessor<LLIL_MEMORY_INTRINSIC_SSA> : public LowLevelILInstructionBase
+ {
+ LowLevelILSSARegisterOrFlagList GetOutputSSARegisterOrFlagList() const
+ {
+ return GetRawOperandAsExpr(0).GetRawOperandAsSSARegisterOrFlagList(1);
+ }
+ size_t GetDestMemoryVersion() const { return GetRawOperandAsExpr(0).GetRawOperandAsIndex(0); }
+ size_t GetSourceMemoryVersion() const { return GetRawOperandAsIndex(3); }
+ uint32_t GetIntrinsic() const { return GetRawOperandAsRegister(1); }
+ LowLevelILInstructionList GetParameterExprs() const
+ {
+ return GetRawOperandAsExpr(2).GetRawOperandAsExprList(0);
+ }
+ void SetDestMemoryVersion(size_t version) { GetRawOperandAsExpr(0).UpdateRawOperand(0, version); }
+ void SetSourceMemoryVersion(size_t version) { UpdateRawOperand(3, version); }
+ void SetOutputSSARegisterOrFlagList(const _STD_VECTOR<SSARegisterOrFlag>& outputs)
+ {
+ GetRawOperandAsExpr(0).UpdateRawOperandAsSSARegisterOrFlagList(1, outputs);
+ }
+ };
template <>
struct LowLevelILInstructionAccessor<LLIL_SEPARATE_PARAM_LIST_SSA> : public LowLevelILInstructionBase