Author: Richard Plangger <planri...@gmail.com>
Branch: 
Changeset: r89039:1656fa7e6390
Date: 2016-12-13 12:25 +0100
http://bitbucket.org/pypy/pypy/changeset/1656fa7e6390/

Log:    slow path overwrites r2 (return register), save it in r1 before
        returning and restore it later

diff --git a/rpython/jit/backend/zarch/assembler.py 
b/rpython/jit/backend/zarch/assembler.py
--- a/rpython/jit/backend/zarch/assembler.py
+++ b/rpython/jit/backend/zarch/assembler.py
@@ -426,6 +426,8 @@
         # Finish
         self._reload_frame_if_necessary(mc)
 
+        mc.LGR(r.SCRATCH2, r.r2)
+
         self.pop_gcmap(mc) # cancel the push_gcmap(store=True) in the caller
         self._pop_core_regs_from_jitframe(mc, saved_regs)
         if supports_floats:
diff --git a/rpython/jit/backend/zarch/opassembler.py 
b/rpython/jit/backend/zarch/opassembler.py
--- a/rpython/jit/backend/zarch/opassembler.py
+++ b/rpython/jit/backend/zarch/opassembler.py
@@ -376,6 +376,7 @@
     def emit_cond_call(self, op, arglocs, regalloc):
         resloc = arglocs[0]
         arglocs = arglocs[1:]
+
         fcond = self.guard_success_cc
         self.guard_success_cc = c.cond_none
         assert fcond.value != c.cond_none.value
@@ -413,7 +414,7 @@
         # restoring the registers saved above, and doing pop_gcmap(), is left
         # to the cond_call_slowpath helper.  We never have any result value.
         if resloc is not None:
-            self.mc.LGR(resloc, r.RES)
+            self.mc.LGR(resloc, r.SCRATCH2)
         relative_target = self.mc.currpos() - jmp_adr
         pmc = OverwritingBuilder(self.mc, jmp_adr, 1)
         pmc.BRCL(fcond, l.imm(relative_target))
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to