diff options
| author | Fabrice Desclaux <fabrice.desclaux@cea.fr> | 2020-12-28 20:07:22 +0100 |
|---|---|---|
| committer | Fabrice Desclaux <fabrice.desclaux@cea.fr> | 2020-12-28 20:07:22 +0100 |
| commit | 6f3a19f40c9d941666cdba8742d4f431579d42c9 (patch) | |
| tree | 04c87810ee20653215d523468eafe818263e24c0 | |
| parent | de3d1ed055e39525803cba0c2ffdb3f65f11607e (diff) | |
| download | miasm-6f3a19f40c9d941666cdba8742d4f431579d42c9.tar.gz miasm-6f3a19f40c9d941666cdba8742d4f431579d42c9.zip | |
Add simplification
The simplification added in ce175bb51 may take reduction before simp_cc_conds. This add simplifications for remaining case.
| -rw-r--r-- | miasm/expression/simplifications.py | 1 | ||||
| -rw-r--r-- | miasm/expression/simplifications_common.py | 12 | ||||
| -rw-r--r-- | test/expression/simplifications.py | 11 |
3 files changed, 24 insertions, 0 deletions
diff --git a/miasm/expression/simplifications.py b/miasm/expression/simplifications.py index 38c4cbf4..f76de3f2 100644 --- a/miasm/expression/simplifications.py +++ b/miasm/expression/simplifications.py @@ -89,6 +89,7 @@ class ExpressionSimplifier(ExprVisitorCallbackBottomToTop): simplifications_common.simp_cond_sign_bit, simplifications_common.simp_cond_eq_1_0, simplifications_common.simp_cond_cc_flag, + simplifications_common.simp_cond_sub_cf, ], m2_expr.ExprMem: [simplifications_common.simp_mem], diff --git a/miasm/expression/simplifications_common.py b/miasm/expression/simplifications_common.py index af409286..2ceb507c 100644 --- a/miasm/expression/simplifications_common.py +++ b/miasm/expression/simplifications_common.py @@ -965,6 +965,18 @@ def simp_cond_cc_flag(expr_simp, expr): return ExprCond(arg, expr.src2, expr.src1) return expr +def simp_cond_sub_cf(expr_simp, expr): + """ + ExprCond(FLAG_SUB_CF(A, B), X, Y) => ExprCond(A <u B, X, Y) + """ + if not expr.is_cond(): + return expr + if not expr.cond.is_op("FLAG_SUB_CF"): + return expr + cond = ExprOp(TOK_INF_UNSIGNED, *expr.cond.args) + return ExprCond(cond, expr.src1, expr.src2) + + def simp_cmp_int(expr_simp, expr): """ ({X, 0} == int) => X == int[:] diff --git a/test/expression/simplifications.py b/test/expression/simplifications.py index c75dc0d3..96ab8a59 100644 --- a/test/expression/simplifications.py +++ b/test/expression/simplifications.py @@ -807,6 +807,17 @@ to_test = [ ), ), + ( + ExprCond( + ExprOp("FLAG_SUB_CF", a, b), + c, d + ), + ExprCond( + ExprOp("<u", a, b), + c, d + ), + ), + ] |