diff options
| author | Aymeric Vincent <aymeric.vincent@cea.fr> | 2018-03-08 15:46:34 +0100 |
|---|---|---|
| committer | Aymeric Vincent <aymeric.vincent@cea.fr> | 2018-03-08 16:35:04 +0100 |
| commit | 823abe3f3ff88b939ce0958ca188bc5aaeb977ea (patch) | |
| tree | 8858724f29533bab1c380b068b599cd2185807f6 | |
| parent | 33b13d0b47f8304c9b45e9a1e337b360592a8a87 (diff) | |
| download | miasm-823abe3f3ff88b939ce0958ca188bc5aaeb977ea.tar.gz miasm-823abe3f3ff88b939ce0958ca188bc5aaeb977ea.zip | |
B and BL have variants with a useless CR field. Handle them.
| -rw-r--r-- | miasm2/arch/ppc/sem.py | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/miasm2/arch/ppc/sem.py b/miasm2/arch/ppc/sem.py index 4434efa7..69e315d4 100644 --- a/miasm2/arch/ppc/sem.py +++ b/miasm2/arch/ppc/sem.py @@ -684,16 +684,17 @@ def mn_do_xor(ir, instr, ra, rs, rb): return ret, [] -@sbuild.parse -def mn_b(arg1): - PC = arg1 - ir.IRDst = arg1 - -@sbuild.parse -def mn_bl(arg1): - LR = ExprId(ir.get_next_instr(instr), 32) - PC = arg1 - ir.IRDst = arg1 +def mn_b(ir, instr, arg1, arg2 = None): + if arg2 is not None: + arg1 = arg2 + return [ ExprAff(PC, arg1), ExprAff(ir.IRDst, arg1) ], [] + +def mn_bl(ir, instr, arg1, arg2 = None): + if arg2 is not None: + arg1 = arg2 + return [ ExprAff(LR, ExprId(ir.get_next_instr(instr), 32)), + ExprAff(PC, arg1), + ExprAff(ir.IRDst, arg1) ], [] def mn_get_condition(instr): bit = instr.additional_info.bi & 0b11 |