about summary refs log tree commit diff stats
path: root/miasm2/expression/simplifications_common.py
diff options
context:
space:
mode:
authorFabrice Desclaux <fabrice.desclaux@cea.fr>2014-10-31 10:41:18 +0100
committerFabrice Desclaux <fabrice.desclaux@cea.fr>2014-10-31 10:41:18 +0100
commit80cfb30b725cf4d53dea151755a3328f18db68c3 (patch)
tree37b6e8d0e6a39783a5e82e3e3e73894bae6ea86c /miasm2/expression/simplifications_common.py
parent37a2072c9efc9980638a58d4464c6e87e9863bbf (diff)
downloadmiasm-80cfb30b725cf4d53dea151755a3328f18db68c3.tar.gz
miasm-80cfb30b725cf4d53dea151755a3328f18db68c3.zip
Expression: fix umod/udiv in expression simplification
Diffstat (limited to 'miasm2/expression/simplifications_common.py')
-rw-r--r--miasm2/expression/simplifications_common.py14
1 files changed, 13 insertions, 1 deletions
diff --git a/miasm2/expression/simplifications_common.py b/miasm2/expression/simplifications_common.py
index 4f712bf0..489869f3 100644
--- a/miasm2/expression/simplifications_common.py
+++ b/miasm2/expression/simplifications_common.py
@@ -65,6 +65,18 @@ def simp_cst_propagation(e_s, e):
                 x1 = mod_size2int[i1.arg.size](i1.arg)
                 x2 = mod_size2int[i2.arg.size](i2.arg)
                 o = mod_size2uint[i1.arg.size](x1 % x2)
+            elif op == 'umod':
+                assert(i2.arg.arg)
+                x1 = mod_size2uint[i1.arg.size](i1.arg)
+                x2 = mod_size2uint[i2.arg.size](i2.arg)
+                o = mod_size2uint[i1.arg.size](x1 % x2)
+            elif op == 'udiv':
+                assert(i2.arg.arg)
+                x1 = mod_size2uint[i1.arg.size](i1.arg)
+                x2 = mod_size2uint[i2.arg.size](i2.arg)
+                o = mod_size2uint[i1.arg.size](x1 / x2)
+
+
 
             o = ExprInt_fromsize(i1.size, o)
             args.append(o)
@@ -115,7 +127,7 @@ def simp_cst_propagation(e_s, e):
 
     # op A => A
     if op in ['+', '*', '^', '&', '|', '>>', '<<',
-        'a>>', '<<<', '>>>', 'idiv', 'imod'] and len(args) == 1:
+              'a>>', '<<<', '>>>', 'idiv', 'imod', 'umod', 'udiv'] and len(args) == 1:
         return args[0]
 
     # A-B => A + (-B)