about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorFabrice Desclaux <fabrice.desclaux@cea.fr>2018-08-19 14:43:14 +0200
committerFabrice Desclaux <fabrice.desclaux@cea.fr>2018-08-29 17:54:10 +0200
commitccee69ba3b27f298c6d2cd5daa4b8976a571582e (patch)
tree1b15cc027e93ccd5cfebaf0276af8bfa9ea5da99
parentc1f576e342b083caf6e3ca5a02143a402a49f6d4 (diff)
downloadmiasm-ccee69ba3b27f298c6d2cd5daa4b8976a571582e.tar.gz
miasm-ccee69ba3b27f298c6d2cd5daa4b8976a571582e.zip
Expression: add simp cond
-rw-r--r--miasm2/expression/simplifications.py3
-rw-r--r--miasm2/expression/simplifications_common.py12
2 files changed, 15 insertions, 0 deletions
diff --git a/miasm2/expression/simplifications.py b/miasm2/expression/simplifications.py
index d3628ae8..e090d806 100644
--- a/miasm2/expression/simplifications.py
+++ b/miasm2/expression/simplifications.py
@@ -56,6 +56,9 @@ class ExpressionSimplifier(object):
             simplifications_common.simp_cond_flag,
             simplifications_common.simp_cond_int,
             simplifications_common.simp_cmp_int_arg,
+
+            simplifications_common.simp_cond_eq_zero,
+
         ],
         m2_expr.ExprMem: [simplifications_common.simp_mem],
 
diff --git a/miasm2/expression/simplifications_common.py b/miasm2/expression/simplifications_common.py
index b01b1d1d..2bdccdbd 100644
--- a/miasm2/expression/simplifications_common.py
+++ b/miasm2/expression/simplifications_common.py
@@ -1021,3 +1021,15 @@ def simp_zeroext_eq_cst(expr_s, expr):
         # Always false
         return ExprInt(0, 1)
     return ExprOp("==", src, ExprInt(int(arg2), src.size))
+
+
+def simp_cond_eq_zero(expr_s, expr):
+    # (X == 0)?(A:B) => X?(B:A)
+    cond = expr.cond
+    if not cond.is_op('=='):
+        return expr
+    arg1, arg2 = cond.args
+    if not arg2.is_int(0):
+        return expr
+    new_expr = ExprCond(arg1, expr.src2, expr.src1)
+    return new_expr