summaryrefslogtreecommitdiff
path: root/python
diff options
context:
space:
mode:
authorRusty Wagner <rusty@vector35.com>2018-02-02 18:02:57 -0500
committerRusty Wagner <rusty@vector35.com>2018-02-02 18:02:57 -0500
commit331bfd4e4a648de8aba4fefd8301703a6a3440c9 (patch)
tree6a2287c7d4731c787918e47161eb944fc225051c /python
parentfd51307c7fa5baff29860b1e3be09aafca13c2f0 (diff)
Add rounding instructions
Diffstat (limited to 'python')
-rw-r--r--python/lowlevelil.py52
-rw-r--r--python/mediumlevelil.py4
2 files changed, 56 insertions, 0 deletions
diff --git a/python/lowlevelil.py b/python/lowlevelil.py
index 273d3aeb..8a132478 100644
--- a/python/lowlevelil.py
+++ b/python/lowlevelil.py
@@ -295,6 +295,10 @@ class LowLevelILInstruction(object):
LowLevelILOperation.LLIL_FLOAT_TO_INT: [("src", "expr")],
LowLevelILOperation.LLIL_INT_TO_FLOAT: [("src", "expr")],
LowLevelILOperation.LLIL_FLOAT_CONV: [("src", "expr")],
+ LowLevelILOperation.LLIL_ROUND_TO_INT: [("src", "expr")],
+ LowLevelILOperation.LLIL_FLOOR: [("src", "expr")],
+ LowLevelILOperation.LLIL_CEIL: [("src", "expr")],
+ LowLevelILOperation.LLIL_FTRUNC: [("src", "expr")],
LowLevelILOperation.LLIL_FCMP_E: [("left", "expr"), ("right", "expr")],
LowLevelILOperation.LLIL_FCMP_NE: [("left", "expr"), ("right", "expr")],
LowLevelILOperation.LLIL_FCMP_LT: [("left", "expr"), ("right", "expr")],
@@ -1967,6 +1971,54 @@ class LowLevelILFunction(object):
"""
return self.expr(LowLevelILOperation.LLIL_FLOAT_CONV, value.index, size=size, flags=flags)
+ def round_to_int(self, size, value, flags=None):
+ """
+ ``round_to_int`` rounds a floating point value to the nearest integer
+
+ :param int size: the size of the result in bytes
+ :param LowLevelILExpr value: the expression to negate
+ :param str flags: optional, flags to set
+ :return: The expression ``roundint.<size>{<flags>}(value)``
+ :rtype: LowLevelILExpr
+ """
+ return self.expr(LowLevelILOperation.LLIL_ROUND_TO_INT, value.index, size=size, flags=flags)
+
+ def floor(self, size, value, flags=None):
+ """
+ ``floor`` rounds a floating point value to an integer towards negative infinity
+
+ :param int size: the size of the result in bytes
+ :param LowLevelILExpr value: the expression to negate
+ :param str flags: optional, flags to set
+ :return: The expression ``roundint.<size>{<flags>}(value)``
+ :rtype: LowLevelILExpr
+ """
+ return self.expr(LowLevelILOperation.LLIL_FLOOR, value.index, size=size, flags=flags)
+
+ def ceil(self, size, value, flags=None):
+ """
+ ``ceil`` rounds a floating point value to an integer towards positive infinity
+
+ :param int size: the size of the result in bytes
+ :param LowLevelILExpr value: the expression to negate
+ :param str flags: optional, flags to set
+ :return: The expression ``roundint.<size>{<flags>}(value)``
+ :rtype: LowLevelILExpr
+ """
+ return self.expr(LowLevelILOperation.LLIL_CEIL, value.index, size=size, flags=flags)
+
+ def float_trunc(self, size, value, flags=None):
+ """
+ ``float_trunc`` rounds a floating point value to an integer towards zero
+
+ :param int size: the size of the result in bytes
+ :param LowLevelILExpr value: the expression to negate
+ :param str flags: optional, flags to set
+ :return: The expression ``roundint.<size>{<flags>}(value)``
+ :rtype: LowLevelILExpr
+ """
+ return self.expr(LowLevelILOperation.LLIL_FTRUNC, value.index, size=size, flags=flags)
+
def float_compare_equal(self, size, a, b):
"""
``float_compare_equal`` returns floating point comparison expression of size ``size`` checking if
diff --git a/python/mediumlevelil.py b/python/mediumlevelil.py
index 3c4ba3fd..a842c3c4 100644
--- a/python/mediumlevelil.py
+++ b/python/mediumlevelil.py
@@ -165,6 +165,10 @@ class MediumLevelILInstruction(object):
MediumLevelILOperation.MLIL_FLOAT_TO_INT: [("src", "expr")],
MediumLevelILOperation.MLIL_INT_TO_FLOAT: [("src", "expr")],
MediumLevelILOperation.MLIL_FLOAT_CONV: [("src", "expr")],
+ MediumLevelILOperation.MLIL_ROUND_TO_INT: [("src", "expr")],
+ MediumLevelILOperation.MLIL_FLOOR: [("src", "expr")],
+ MediumLevelILOperation.MLIL_CEIL: [("src", "expr")],
+ MediumLevelILOperation.MLIL_FTRUNC: [("src", "expr")],
MediumLevelILOperation.MLIL_FCMP_E: [("left", "expr"), ("right", "expr")],
MediumLevelILOperation.MLIL_FCMP_NE: [("left", "expr"), ("right", "expr")],
MediumLevelILOperation.MLIL_FCMP_LT: [("left", "expr"), ("right", "expr")],