diff options
| author | serpilliere <serpilliere@users.noreply.github.com> | 2018-08-23 12:20:21 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-08-23 12:20:21 +0200 |
| commit | 256783dc0292e443a7de496784a0f7a039770ce4 (patch) | |
| tree | 6b45ca90778eaf1f42f6c6185059c8980013bff3 | |
| parent | 46bb6b39453ea8b5abb04dfd62492e429376a8ea (diff) | |
| parent | dc7b532f0f50694e924e80618ef26333c7dda6c7 (diff) | |
| download | miasm-256783dc0292e443a7de496784a0f7a039770ce4.tar.gz miasm-256783dc0292e443a7de496784a0f7a039770ce4.zip | |
Merge pull request #817 from GAJaloyan/master
adding a new simplification for double zeroExtends.
| -rw-r--r-- | miasm2/expression/simplifications.py | 2 | ||||
| -rw-r--r-- | miasm2/expression/simplifications_common.py | 19 |
2 files changed, 21 insertions, 0 deletions
diff --git a/miasm2/expression/simplifications.py b/miasm2/expression/simplifications.py index 712488e3..d3628ae8 100644 --- a/miasm2/expression/simplifications.py +++ b/miasm2/expression/simplifications.py @@ -42,6 +42,8 @@ class ExpressionSimplifier(object): simplifications_common.simp_subwc_cf, simplifications_common.simp_subwc_of, simplifications_common.simp_sign_subwc_cf, + simplifications_common.simp_double_zeroext, + simplifications_common.simp_double_signext, simplifications_common.simp_zeroext_eq_cst, ], diff --git a/miasm2/expression/simplifications_common.py b/miasm2/expression/simplifications_common.py index fa2370bd..c786a6a5 100644 --- a/miasm2/expression/simplifications_common.py +++ b/miasm2/expression/simplifications_common.py @@ -990,6 +990,25 @@ def simp_sign_subwc_cf(expr_s, expr): return ExprOp("FLAG_SIGN_SUB", op1, op2) +def simp_double_zeroext(expr_s, expr): + # A.zeroExt(X).zeroExt(Y) => A.zeroExt(Y) + if not (expr.is_op() and expr.op.startswith("zeroExt")): + return expr + arg1 = expr.args[0] + if not (arg1.is_op() and arg1.op.startswith("zeroExt")): + return expr + arg2 = arg1.args[0] + return ExprOp(expr.op, arg2) + +def simp_double_signext(expr_s, expr): + # A.signExt(X).signExt(Y) => A.signExt(Y) + if not (expr.is_op() and expr.op.startswith("signExt")): + return expr + arg1 = expr.args[0] + if not (arg1.is_op() and arg1.op.startswith("signExt")): + return expr + arg2 = arg1.args[0] + return ExprOp(expr.op, arg2) def simp_zeroext_eq_cst(expr_s, expr): # A.zeroExt(X) == int => A == int[:A.size] |