about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorCamille Mougey <commial@gmail.com>2018-03-09 13:36:11 +0100
committerGitHub <noreply@github.com>2018-03-09 13:36:11 +0100
commitaffee860ec9c16a1a7724f78021ea8015a1b6896 (patch)
treefa77ad1e73c70733214da876fbbb24b5b2f8458b
parent6fea9e7c789133f4ab8c454d59ad0663afbcc1a3 (diff)
parent823abe3f3ff88b939ce0958ca188bc5aaeb977ea (diff)
downloadmiasm-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.py21
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