diff options
| author | Fabrice Desclaux <fabrice.desclaux@cea.fr> | 2018-10-09 18:40:07 +0200 |
|---|---|---|
| committer | Fabrice Desclaux <fabrice.desclaux@cea.fr> | 2018-10-09 18:41:12 +0200 |
| commit | 3877d4db136e124973c59d66b106ebe80ce4f732 (patch) | |
| tree | 2508ba1c10649dc70b947349b090a645327d5fac /miasm2/expression/simplifications_common.py | |
| parent | 47cfb74e8c9cddef389e461283ec22a856e02a8c (diff) | |
| download | miasm-3877d4db136e124973c59d66b106ebe80ce4f732.tar.gz miasm-3877d4db136e124973c59d66b106ebe80ce4f732.zip | |
Simplification: add high evel simp
Diffstat (limited to 'miasm2/expression/simplifications_common.py')
| -rw-r--r-- | miasm2/expression/simplifications_common.py | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/miasm2/expression/simplifications_common.py b/miasm2/expression/simplifications_common.py index 9c002fa5..1ebd4878 100644 --- a/miasm2/expression/simplifications_common.py +++ b/miasm2/expression/simplifications_common.py @@ -1043,6 +1043,20 @@ def simp_zeroext_eq_cst(expr_s, expr): return ExprInt(0, 1) return ExprOp(TOK_EQUAL, src, ExprInt(int(arg2), src.size)) +def simp_ext_eq_ext(expr_s, expr): + # A.zeroExt(X) == B.zeroExt(X) => A == B + # A.signExt(X) == B.signExt(X) => A == B + if not expr.is_op(TOK_EQUAL): + return expr + arg1, arg2 = expr.args + if (not ((arg1.is_op() and arg1.op.startswith("zeroExt") and + arg2.is_op() and arg2.op.startswith("zeroExt")) or + (arg1.is_op() and arg1.op.startswith("signExt") and + arg2.is_op() and arg2.op.startswith("signExt")))): + return expr + if arg1.args[0].size != arg2.args[0].size: + return expr + return ExprOp(TOK_EQUAL, arg1.args[0], arg2.args[0]) def simp_cond_eq_zero(expr_s, expr): # (X == 0)?(A:B) => X?(B:A) |