diff options
| author | serpilliere <serpilliere@users.noreply.github.com> | 2018-05-15 11:19:41 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-05-15 11:19:41 +0200 |
| commit | 4dae0d5df51165d2c535f0812761dc6bdadfe88e (patch) | |
| tree | 392c861b580d89bb8be80856fd8403d1d7c0e2bf /miasm2/arch/x86/sem.py | |
| parent | 833524bb7291e82613afba2184b3c0c9801445f5 (diff) | |
| parent | de4295331794e81937a5c4073c37808ec63beaa4 (diff) | |
| download | miasm-4dae0d5df51165d2c535f0812761dc6bdadfe88e.tar.gz miasm-4dae0d5df51165d2c535f0812761dc6bdadfe88e.zip | |
Merge pull request #740 from commial/refactor/bsr-bsf
Refactor/bsr bsf
Diffstat (limited to 'miasm2/arch/x86/sem.py')
| -rw-r--r-- | miasm2/arch/x86/sem.py | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/miasm2/arch/x86/sem.py b/miasm2/arch/x86/sem.py index 7682192f..5de58c15 100644 --- a/miasm2/arch/x86/sem.py +++ b/miasm2/arch/x86/sem.py @@ -2867,14 +2867,14 @@ def aas(ir, instr): return _tpl_aaa(ir, instr, "-") -def bsr_bsf(ir, instr, dst, src, op_name): +def bsr_bsf(ir, instr, dst, src, op_func): """ IF SRC == 0 ZF = 1 DEST is left unchanged ELSE ZF = 0 - DEST = @op_name(SRC) + DEST = @op_func(SRC) """ lbl_src_null = m2_expr.ExprId(ir.gen_label(), ir.IRDst.size) lbl_src_not_null = m2_expr.ExprId(ir.gen_label(), ir.IRDst.size) @@ -2891,7 +2891,7 @@ def bsr_bsf(ir, instr, dst, src, op_name): e_src_not_null = [] e_src_not_null.append(m2_expr.ExprAff(zf, m2_expr.ExprInt(0, zf.size))) - e_src_not_null.append(m2_expr.ExprAff(dst, m2_expr.ExprOp(op_name, src))) + e_src_not_null.append(m2_expr.ExprAff(dst, op_func(src))) e_src_not_null.append(aff_dst) return e, [IRBlock(lbl_src_null.name, [AssignBlock(e_src_null, instr)]), @@ -2899,11 +2899,15 @@ def bsr_bsf(ir, instr, dst, src, op_name): def bsf(ir, instr, dst, src): - return bsr_bsf(ir, instr, dst, src, "bsf") + return bsr_bsf(ir, instr, dst, src, + lambda src: m2_expr.ExprOp("cnttrailzeros", src)) def bsr(ir, instr, dst, src): - return bsr_bsf(ir, instr, dst, src, "bsr") + return bsr_bsf( + ir, instr, dst, src, + lambda src: m2_expr.ExprInt(src.size - 1, src.size) - m2_expr.ExprOp("cntleadzeros", src) + ) def arpl(_, instr, dst, src): |