about summary refs log tree commit diff stats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--miasm2/ir/translators/C.py24
1 files changed, 23 insertions, 1 deletions
diff --git a/miasm2/ir/translators/C.py b/miasm2/ir/translators/C.py
index 11ccf137..33c21049 100644
--- a/miasm2/ir/translators/C.py
+++ b/miasm2/ir/translators/C.py
@@ -1,7 +1,7 @@
 from miasm2.ir.translators.translator import Translator
 from miasm2.core import asmblock
 from miasm2.expression.modint import size2mask
-
+from miasm2.expression.expression import ExprInt, ExprCond, ExprCompose
 
 def int_size_to_bn(value, size):
     if size < 32:
@@ -125,6 +125,28 @@ class TranslatorC(Translator):
                 out = 'parity(%s)' % out
                 return out
 
+            elif expr.op.startswith("zeroExt_"):
+                arg = expr.args[0]
+                if expr.size == arg.size:
+                    return arg
+                return self.from_expr(ExprCompose(arg, ExprInt(0, expr.size - arg.size)))
+
+            elif expr.op.startswith("signExt_"):
+                arg = expr.args[0]
+                if expr.size == arg.size:
+                    return arg
+                add_size = expr.size - arg.size
+                new_expr = ExprCompose(
+                    arg,
+                    ExprCond(
+                        arg.msb(),
+                        ExprInt(size2mask(add_size), add_size),
+                        ExprInt(0, add_size)
+                    )
+                )
+                return self.from_expr(new_expr)
+
+
             elif expr.op in ['cntleadzeros', 'cnttrailzeros']:
                 arg = expr.args[0]
                 out = self.from_expr(arg)