diff options
| author | Fabrice Desclaux <fabrice.desclaux@cea.fr> | 2019-01-27 00:13:25 +0100 |
|---|---|---|
| committer | Fabrice Desclaux <fabrice.desclaux@cea.fr> | 2019-01-27 17:09:58 +0100 |
| commit | 898e8c40a6b4584d55711e25479b3807dac3e573 (patch) | |
| tree | c485b2b14a85635bf3036ccfdaed6c90dc7fd4b7 | |
| parent | 045792970f462e4d408fd01b419ccd851a1301a2 (diff) | |
| download | miasm-898e8c40a6b4584d55711e25479b3807dac3e573.tar.gz miasm-898e8c40a6b4584d55711e25479b3807dac3e573.zip | |
PPC: Explicit flags
| -rw-r--r-- | miasm2/arch/ppc/sem.py | 25 |
1 files changed, 12 insertions, 13 deletions
diff --git a/miasm2/arch/ppc/sem.py b/miasm2/arch/ppc/sem.py index 44895624..558450b2 100644 --- a/miasm2/arch/ppc/sem.py +++ b/miasm2/arch/ppc/sem.py @@ -17,7 +17,12 @@ crf_dict = dict((ExprId("CR%d" % i, 4), for bit in ['LT', 'GT', 'EQ', 'SO' ] )) for i in xrange(8) ) -ctx = { 'crf_dict': crf_dict, 'spr_dict': spr_dict } +ctx = { + 'crf_dict': crf_dict, + 'spr_dict': spr_dict, + 'expr': expr, +} + ctx.update(all_regs_ids_byname) sbuild = SemBuilder(ctx) @@ -746,22 +751,16 @@ def mn_do_nop_warn(ir, instr, *args): @sbuild.parse def mn_cmp_signed(arg1, arg2, arg3): - crf_dict[arg1]['LT'] = ((arg2 - arg3) ^ - ((arg2 ^ arg3) & ((arg2 - arg3) ^ arg2))).msb() - crf_dict[arg1]['GT'] = ((arg3 - arg2) ^ - ((arg3 ^ arg2) & ((arg3 - arg2) ^ arg3))).msb() - crf_dict[arg1]['EQ'] = i1(0) if arg2 - arg3 else i1(1) + crf_dict[arg1]['LT'] = expr.ExprOp(expr.TOK_INF_SIGNED, arg2, arg3) + crf_dict[arg1]['GT'] = expr.ExprOp(expr.TOK_INF_SIGNED, arg3, arg2) + crf_dict[arg1]['EQ'] = expr.ExprOp(expr.TOK_EQUAL, arg2, arg3) crf_dict[arg1]['SO'] = XER_SO @sbuild.parse def mn_cmp_unsigned(arg1, arg2, arg3): - crf_dict[arg1]['LT'] = (((arg2 - arg3) ^ - ((arg2 ^ arg3) & ((arg2 - arg3) ^ arg2))) ^ - arg2 ^ arg3).msb() - crf_dict[arg1]['GT'] = (((arg3 - arg2) ^ - ((arg3 ^ arg2) & ((arg3 - arg2) ^ arg3))) ^ - arg2 ^ arg3).msb() - crf_dict[arg1]['EQ'] = i1(0) if arg2 - arg3 else i1(1) + crf_dict[arg1]['LT'] = expr.ExprOp(expr.TOK_INF_UNSIGNED, arg2, arg3) + crf_dict[arg1]['GT'] = expr.ExprOp(expr.TOK_INF_UNSIGNED, arg3, arg2) + crf_dict[arg1]['EQ'] = expr.ExprOp(expr.TOK_EQUAL, arg2, arg3) crf_dict[arg1]['SO'] = XER_SO def mn_nop(ir, instr, *args): |