about summary refs log tree commit diff stats
path: root/miasm2/expression/simplifications.py
diff options
context:
space:
mode:
Diffstat (limited to 'miasm2/expression/simplifications.py')
-rw-r--r--miasm2/expression/simplifications.py45
1 files changed, 41 insertions, 4 deletions
diff --git a/miasm2/expression/simplifications.py b/miasm2/expression/simplifications.py
index e6c5dc54..712488e3 100644
--- a/miasm2/expression/simplifications.py
+++ b/miasm2/expression/simplifications.py
@@ -6,6 +6,7 @@ import logging
 
 from miasm2.expression import simplifications_common
 from miasm2.expression import simplifications_cond
+from miasm2.expression import simplifications_explicit
 from miasm2.expression.expression_helper import fast_unify
 import miasm2.expression.expression as m2_expr
 
@@ -32,13 +33,30 @@ class ExpressionSimplifier(object):
 
     # Common passes
     PASS_COMMONS = {
-        m2_expr.ExprOp: [simplifications_common.simp_cst_propagation,
-                         simplifications_common.simp_cond_op_int,
-                         simplifications_common.simp_cond_factor],
+        m2_expr.ExprOp: [
+            simplifications_common.simp_cst_propagation,
+            simplifications_common.simp_cond_op_int,
+            simplifications_common.simp_cond_factor,
+            # CC op
+            simplifications_common.simp_cc_conds,
+            simplifications_common.simp_subwc_cf,
+            simplifications_common.simp_subwc_of,
+            simplifications_common.simp_sign_subwc_cf,
+            simplifications_common.simp_zeroext_eq_cst,
+
+        ],
+
         m2_expr.ExprSlice: [simplifications_common.simp_slice],
         m2_expr.ExprCompose: [simplifications_common.simp_compose],
-        m2_expr.ExprCond: [simplifications_common.simp_cond],
+        m2_expr.ExprCond: [
+            simplifications_common.simp_cond,
+            # CC op
+            simplifications_common.simp_cond_flag,
+            simplifications_common.simp_cond_int,
+            simplifications_common.simp_cmp_int_arg,
+        ],
         m2_expr.ExprMem: [simplifications_common.simp_mem],
+
     }
 
     # Heavy passes
@@ -55,6 +73,16 @@ class ExpressionSimplifier(object):
                  }
 
 
+    # Available passes lists are:
+    #  - highlevel: transform high level operators to explicit computations
+    PASS_HIGH_TO_EXPLICIT = {
+        m2_expr.ExprOp: [
+            simplifications_explicit.simp_flags,
+            simplifications_explicit.simp_ext,
+        ],
+    }
+
+
     def __init__(self):
         self.expr_simp_cb = {}
         self.simplified_exprs = set()
@@ -136,3 +164,12 @@ class ExpressionSimplifier(object):
 # Public ExprSimplificationPass instance with commons passes
 expr_simp = ExpressionSimplifier()
 expr_simp.enable_passes(ExpressionSimplifier.PASS_COMMONS)
+
+
+
+expr_simp_high_to_explicit = ExpressionSimplifier()
+expr_simp_high_to_explicit.enable_passes(ExpressionSimplifier.PASS_HIGH_TO_EXPLICIT)
+
+expr_simp_explicit = ExpressionSimplifier()
+expr_simp_explicit.enable_passes(ExpressionSimplifier.PASS_COMMONS)
+expr_simp_explicit.enable_passes(ExpressionSimplifier.PASS_HIGH_TO_EXPLICIT)