diff options
| author | gajaloyan <none@none> | 2018-06-20 15:50:41 +0200 |
|---|---|---|
| committer | gajaloyan <none@none> | 2018-06-21 09:38:17 +0200 |
| commit | 03fe2f9dffe93b927b6561fd76b3a7e23abc6eb9 (patch) | |
| tree | 7b7bab2b6bba91e9fcce5fa74823ddfd7e5f5f65 | |
| parent | 0adddb12a7410c4bbdd6ee79252e9bf05ca22818 (diff) | |
| download | miasm-03fe2f9dffe93b927b6561fd76b3a7e23abc6eb9.tar.gz miasm-03fe2f9dffe93b927b6561fd76b3a7e23abc6eb9.zip | |
Adding ccmp aarch64 instruction.
| -rw-r--r-- | miasm2/arch/aarch64/sem.py | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/miasm2/arch/aarch64/sem.py b/miasm2/arch/aarch64/sem.py index ad582878..c232e8dc 100644 --- a/miasm2/arch/aarch64/sem.py +++ b/miasm2/arch/aarch64/sem.py @@ -350,7 +350,36 @@ def csel(arg1, arg2, arg3, arg4): cond_expr = cond2expr[arg4.name] arg1 = arg2 if cond_expr else arg3 +def ccmp(ir, instr, arg1, arg2, arg3, arg4): + e = [] + if(arg2.is_int): + arg2=m2_expr.ExprInt(arg2.arg.arg,arg1.size) + default_nf = arg3[0:1] + default_zf = arg3[1:2] + default_cf = arg3[2:3] + default_of = arg3[3:4] + cond_expr = cond2expr[arg4.name] + res = arg1 - arg2 + new_nf = nf + new_zf = update_flag_zf(res)[0].src + new_cf = update_flag_sub_cf(arg1, arg2, res).src + new_of = update_flag_sub_of(arg1, arg2, res).src + + e.append(m2_expr.ExprAff(nf, m2_expr.ExprCond(cond_expr, + new_nf, + default_nf))) + e.append(m2_expr.ExprAff(zf, m2_expr.ExprCond(cond_expr, + new_zf, + default_zf))) + e.append(m2_expr.ExprAff(cf, m2_expr.ExprCond(cond_expr, + new_cf, + default_cf))) + e.append(m2_expr.ExprAff(of, m2_expr.ExprCond(cond_expr, + new_of, + default_of))) + return e, [] + def csinc(ir, instr, arg1, arg2, arg3, arg4): e = [] cond_expr = cond2expr[arg4.name] @@ -761,6 +790,7 @@ mnemo_func.update({ 'cmp': cmp, 'cmn': cmn, 'movk': movk, + 'ccmp': ccmp, 'csinc': csinc, 'csinv': csinv, 'csneg': csneg, |