diff options
Diffstat (limited to 'miasm2/expression/simplifications.py')
| -rw-r--r-- | miasm2/expression/simplifications.py | 34 |
1 files changed, 24 insertions, 10 deletions
diff --git a/miasm2/expression/simplifications.py b/miasm2/expression/simplifications.py index e090d806..a237a57e 100644 --- a/miasm2/expression/simplifications.py +++ b/miasm2/expression/simplifications.py @@ -45,16 +45,23 @@ class ExpressionSimplifier(object): simplifications_common.simp_double_zeroext, simplifications_common.simp_double_signext, simplifications_common.simp_zeroext_eq_cst, + simplifications_common.simp_ext_eq_ext, + + simplifications_common.simp_cmp_int, + simplifications_common.simp_cmp_int_int, + simplifications_common.simp_ext_cst, ], - m2_expr.ExprSlice: [simplifications_common.simp_slice], + m2_expr.ExprSlice: [ + simplifications_common.simp_slice, + simplifications_common.simp_slice_of_ext, + ], m2_expr.ExprCompose: [simplifications_common.simp_compose], 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, simplifications_common.simp_cond_eq_zero, @@ -68,14 +75,18 @@ class ExpressionSimplifier(object): PASS_HEAVY = {} # Cond passes - PASS_COND = {m2_expr.ExprSlice: [simplifications_cond.expr_simp_inf_signed, - simplifications_cond.expr_simp_inf_unsigned_inversed], - m2_expr.ExprOp: [simplifications_cond.exec_inf_unsigned, - simplifications_cond.exec_inf_signed, - simplifications_cond.expr_simp_inverse, - simplifications_cond.exec_equal], - m2_expr.ExprCond: [simplifications_cond.expr_simp_equal] - } + PASS_COND = { + m2_expr.ExprSlice: [ + simplifications_cond.expr_simp_inf_signed, + simplifications_cond.expr_simp_inf_unsigned_inversed + ], + m2_expr.ExprOp: [ + simplifications_cond.expr_simp_inverse, + ], + m2_expr.ExprCond: [ + simplifications_cond.expr_simp_equal + ] + } # Available passes lists are: @@ -99,6 +110,9 @@ class ExpressionSimplifier(object): Callback signature: Expr callback(ExpressionSimplifier, Expr) """ + # Clear cache of simplifiied expressions when adding a new pass + self.simplified_exprs.clear() + for k, v in passes.items(): self.expr_simp_cb[k] = fast_unify(self.expr_simp_cb.get(k, []) + v) |