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-09-11 13:01:36 +0200
committerFabrice Desclaux <fabrice.desclaux@cea.fr>2014-09-11 13:01:36 +0200
commit79f4d605ed663a95298f107ab03e7b3d56c0604e (patch)
tree59ad4a36c1faba7fc6e0d957f4b3453f87bfd4f1 /miasm2/expression/simplifications_common.py
parentf2058cdc7aa6bdb4667805f9a83e9a38ee6a6ab5 (diff)
downloadmiasm-79f4d605ed663a95298f107ab03e7b3d56c0604e.tar.gz
miasm-79f4d605ed663a95298f107ab03e7b3d56c0604e.zip
expr_simpl: add shift simplification
Diffstat (limited to 'miasm2/expression/simplifications_common.py')
-rw-r--r--miasm2/expression/simplifications_common.py6
1 files changed, 6 insertions, 0 deletions
diff --git a/miasm2/expression/simplifications_common.py b/miasm2/expression/simplifications_common.py
index d662cf3d..4f712bf0 100644
--- a/miasm2/expression/simplifications_common.py
+++ b/miasm2/expression/simplifications_common.py
@@ -208,6 +208,12 @@ def simp_cst_propagation(e_s, e):
         args0 = args[0].args[0]
         args = [args0, args1]
 
+    # A >> X >> Y  =>  A >> (X+Y)
+    if (op in ['<<', '>>'] and
+        isinstance(args[0], ExprOp) and
+        args[0].op == op):
+        args = [args[0].args[0], args[0].args[1] + args[1]]
+
     # ((A & A.mask)
     if op == "&" and args[-1] == e.mask:
         return ExprOp('&', *args[:-1])