about summary refs log tree commit diff stats
path: root/miasm2/ir/translators/C.py
diff options
context:
space:
mode:
authorCamille Mougey <commial@gmail.com>2018-02-14 12:13:24 +0100
committerGitHub <noreply@github.com>2018-02-14 12:13:24 +0100
commitdcfadb31685d428618b88f19fcc96dd70cecfc8f (patch)
tree038c6c2f545d5a77ecb6c68f030107f09d32450f /miasm2/ir/translators/C.py
parentb0e9f5da9b4546a22169882e656bf2776eab9754 (diff)
parent6702a6149c57c54bcece3fb1cd00b8c09af6e74a (diff)
downloadmiasm-dcfadb31685d428618b88f19fcc96dd70cecfc8f.tar.gz
miasm-dcfadb31685d428618b88f19fcc96dd70cecfc8f.zip
Merge pull request #678 from serpilliere/x86_fix_rcl
X86 fix rcl
Diffstat (limited to 'miasm2/ir/translators/C.py')
-rw-r--r--miasm2/ir/translators/C.py23
1 files changed, 11 insertions, 12 deletions
diff --git a/miasm2/ir/translators/C.py b/miasm2/ir/translators/C.py
index 7a3080ca..95502a15 100644
--- a/miasm2/ir/translators/C.py
+++ b/miasm2/ir/translators/C.py
@@ -17,9 +17,6 @@ class TranslatorC(Translator):
     dct_rot = {'<<<': 'rot_left',
                '>>>': 'rot_right',
                }
-    dct_rotc = {'<<<c_rez': 'rcl_rez_op',
-                '>>>c_rez': 'rcr_rez_op',
-                }
 
 
     def from_ExprId(self, expr):
@@ -118,14 +115,6 @@ class TranslatorC(Translator):
             else:
                 raise NotImplementedError('Unknown op: %r' % expr.op)
 
-        elif len(expr.args) == 3 and expr.op in self.dct_rotc:
-            return '(%s(%s, %s, %s, %s) &0x%x)' % (self.dct_rotc[expr.op],
-                                                   expr.args[0].size,
-                                                   self.from_expr(expr.args[0]),
-                                                   self.from_expr(expr.args[1]),
-                                                   self.from_expr(expr.args[2]),
-                                                   size2mask(expr.args[0].size))
-
         elif len(expr.args) >= 3 and expr.is_associative():  # ?????
             oper = ['(%s&0x%x)' % (self.from_expr(arg), size2mask(arg.size))
                     for arg in expr.args]
@@ -144,7 +133,17 @@ class TranslatorC(Translator):
     def from_ExprCompose(self, expr):
         out = []
         # XXX check mask for 64 bit & 32 bit compat
-        dst_cast = "uint%d_t" % expr.size
+        if expr.size in [8, 16, 32, 64, 128]:
+            size = expr.size
+        else:
+            # Uncommon expression size
+            size = expr.size
+            next_power = 1
+            while next_power <= size:
+                next_power <<= 1
+            size = next_power
+
+        dst_cast = "uint%d_t" % size
         for index, arg in expr.iter_args():
             out.append("(((%s)(%s & 0x%X)) << %d)" % (dst_cast,
                                                       self.from_expr(arg),