From c488c7780ada00daa5b1ca8a27a585abfacd2905 Mon Sep 17 00:00:00 2001 From: Ajax Date: Fri, 13 Nov 2015 17:25:37 +0100 Subject: Simplifications: add cst_propagation for >>>/<<< c_rez --- miasm2/expression/simplifications_common.py | 33 +++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) (limited to 'miasm2/expression') diff --git a/miasm2/expression/simplifications_common.py b/miasm2/expression/simplifications_common.py index fe69d0b9..a52debe6 100644 --- a/miasm2/expression/simplifications_common.py +++ b/miasm2/expression/simplifications_common.py @@ -327,6 +327,39 @@ def simp_cst_propagation(e_s, e): new_args[i] = ExprOp(op, *arg), bound[i][0], bound[i][1] return ExprCompose(new_args) + # <<>>c_rez + if op in [">>>c_rez", "<<>>c_rez": + while (tmp_count != 0): + tmp_cf = tmp & 1; + tmp = (tmp >> 1) + (cf << (size - 1)) + cf = tmp_cf + tmp_count -= 1 + tmp &= int(dest.mask.arg) + elif op == "<<> (size - 1)) & 1 + tmp = (tmp << 1) + cf + cf = tmp_cf + tmp_count -= 1 + tmp &= int(dest.mask.arg) + else: + raise RuntimeError("Unknown operation: %s" % op) + return ExprInt(tmp, size=dest.size) + return ExprOp(op, *args) -- cgit 1.4.1