diff options
| author | Camille Mougey <commial@gmail.com> | 2018-03-09 13:36:11 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-03-09 13:36:11 +0100 |
| commit | affee860ec9c16a1a7724f78021ea8015a1b6896 (patch) | |
| tree | fa77ad1e73c70733214da876fbbb24b5b2f8458b | |
| parent | 6fea9e7c789133f4ab8c454d59ad0663afbcc1a3 (diff) | |
| parent | 823abe3f3ff88b939ce0958ca188bc5aaeb977ea (diff) | |
| download | miasm-affee860ec9c16a1a7724f78021ea8015a1b6896.tar.gz miasm-affee860ec9c16a1a7724f78021ea8015a1b6896.zip | |
Merge pull request #694 from a-vincent/ppc-fix-semantics-b-bl
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 |