diff options
| author | Fabrice Desclaux <fabrice.desclaux@cea.fr> | 2019-02-27 20:12:54 +0100 |
|---|---|---|
| committer | Fabrice Desclaux <fabrice.desclaux@cea.fr> | 2019-03-05 16:52:51 +0100 |
| commit | 944806c506446c918eb74c17a605f5f56d4b75e0 (patch) | |
| tree | ba1d989b03bf8b5544c362a9f61b4e8d3284650f /miasm2/expression/simplifications_explicit.py | |
| parent | 02bbb30efea4980c9d133947cbbf69fb599071ad (diff) | |
| download | miasm-944806c506446c918eb74c17a605f5f56d4b75e0.tar.gz miasm-944806c506446c918eb74c17a605f5f56d4b75e0.zip | |
Rename miasm2 to miasm
Diffstat (limited to 'miasm2/expression/simplifications_explicit.py')
| -rw-r--r-- | miasm2/expression/simplifications_explicit.py | 159 |
1 files changed, 0 insertions, 159 deletions
diff --git a/miasm2/expression/simplifications_explicit.py b/miasm2/expression/simplifications_explicit.py deleted file mode 100644 index 00892201..00000000 --- a/miasm2/expression/simplifications_explicit.py +++ /dev/null @@ -1,159 +0,0 @@ -from miasm2.expression.modint import size2mask -from miasm2.expression.expression import ExprInt, ExprCond, ExprCompose, \ - TOK_EQUAL - - -def simp_ext(_, expr): - if expr.op.startswith('zeroExt_'): - arg = expr.args[0] - if expr.size == arg.size: - return arg - return ExprCompose(arg, ExprInt(0, expr.size - arg.size)) - - if expr.op.startswith("signExt_"): - arg = expr.args[0] - add_size = expr.size - arg.size - new_expr = ExprCompose( - arg, - ExprCond( - arg.msb(), - ExprInt(size2mask(add_size), add_size), - ExprInt(0, add_size) - ) - ) - return new_expr - return expr - - -def simp_flags(_, expr): - args = expr.args - - if expr.is_op("FLAG_EQ"): - return ExprCond(args[0], ExprInt(0, 1), ExprInt(1, 1)) - - elif expr.is_op("FLAG_EQ_AND"): - op1, op2 = args - return ExprCond(op1 & op2, ExprInt(0, 1), ExprInt(1, 1)) - - elif expr.is_op("FLAG_SIGN_SUB"): - return (args[0] - args[1]).msb() - - elif expr.is_op("FLAG_EQ_CMP"): - return ExprCond( - args[0] - args[1], - ExprInt(0, 1), - ExprInt(1, 1), - ) - - elif expr.is_op("FLAG_ADD_CF"): - op1, op2 = args - res = op1 + op2 - return (((op1 ^ op2) ^ res) ^ ((op1 ^ res) & (~(op1 ^ op2)))).msb() - - elif expr.is_op("FLAG_SUB_CF"): - op1, op2 = args - res = op1 - op2 - return (((op1 ^ op2) ^ res) ^ ((op1 ^ res) & (op1 ^ op2))).msb() - - elif expr.is_op("FLAG_ADD_OF"): - op1, op2 = args - res = op1 + op2 - return (((op1 ^ res) & (~(op1 ^ op2)))).msb() - - elif expr.is_op("FLAG_SUB_OF"): - op1, op2 = args - res = op1 - op2 - return (((op1 ^ res) & (op1 ^ op2))).msb() - - elif expr.is_op("FLAG_EQ_ADDWC"): - op1, op2, op3 = args - return ExprCond( - op1 + op2 + op3.zeroExtend(op1.size), - ExprInt(0, 1), - ExprInt(1, 1), - ) - - elif expr.is_op("FLAG_ADDWC_OF"): - op1, op2, op3 = args - res = op1 + op2 + op3.zeroExtend(op1.size) - return (((op1 ^ res) & (~(op1 ^ op2)))).msb() - - elif expr.is_op("FLAG_SUBWC_OF"): - op1, op2, op3 = args - res = op1 - (op2 + op3.zeroExtend(op1.size)) - return (((op1 ^ res) & (op1 ^ op2))).msb() - - elif expr.is_op("FLAG_ADDWC_CF"): - op1, op2, op3 = args - res = op1 + op2 + op3.zeroExtend(op1.size) - return (((op1 ^ op2) ^ res) ^ ((op1 ^ res) & (~(op1 ^ op2)))).msb() - - elif expr.is_op("FLAG_SUBWC_CF"): - op1, op2, op3 = args - res = op1 - (op2 + op3.zeroExtend(op1.size)) - return (((op1 ^ op2) ^ res) ^ ((op1 ^ res) & (op1 ^ op2))).msb() - - elif expr.is_op("FLAG_SIGN_ADDWC"): - op1, op2, op3 = args - return (op1 + op2 + op3.zeroExtend(op1.size)).msb() - - elif expr.is_op("FLAG_SIGN_SUBWC"): - op1, op2, op3 = args - return (op1 - (op2 + op3.zeroExtend(op1.size))).msb() - - - elif expr.is_op("FLAG_EQ_SUBWC"): - op1, op2, op3 = args - res = op1 - (op2 + op3.zeroExtend(op1.size)) - return ExprCond(res, ExprInt(0, 1), ExprInt(1, 1)) - - elif expr.is_op("CC_U<="): - op_cf, op_zf = args - return op_cf | op_zf - - elif expr.is_op("CC_U>="): - op_cf, = args - return ~op_cf - - elif expr.is_op("CC_S<"): - op_nf, op_of = args - return op_nf ^ op_of - - elif expr.is_op("CC_S>"): - op_nf, op_of, op_zf = args - return ~(op_zf | (op_nf ^ op_of)) - - elif expr.is_op("CC_S<="): - op_nf, op_of, op_zf = args - return op_zf | (op_nf ^ op_of) - - elif expr.is_op("CC_S>="): - op_nf, op_of = args - return ~(op_nf ^ op_of) - - elif expr.is_op("CC_U>"): - op_cf, op_zf = args - return ~(op_cf | op_zf) - - elif expr.is_op("CC_U<"): - op_cf, = args - return op_cf - - elif expr.is_op("CC_NEG"): - op_nf, = args - return op_nf - - elif expr.is_op("CC_EQ"): - op_zf, = args - return op_zf - - elif expr.is_op("CC_NE"): - op_zf, = args - return ~op_zf - - elif expr.is_op("CC_POS"): - op_nf, = args - return ~op_nf - - return expr - |