[pypy-commit] pypy s390x-backend: wow, how could frame regalloc even work? passing arguments in the right registers now

plan_rich pypy.commits at gmail.com
Tue Jan 5 02:59:56 EST 2016


Author: Richard Plangger <planrichi at gmail.com>
Branch: s390x-backend
Changeset: r81567:b5700c1e1b20
Date: 2016-01-05 08:59 +0100
http://bitbucket.org/pypy/pypy/changeset/b5700c1e1b20/

Log:	wow, how could frame regalloc even work? passing arguments in the
	right registers now

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
@@ -305,7 +305,7 @@
         #   * no managed register must be modified
 
         ofs2 = self.cpu.get_ofs_of_frame_field('jf_gcmap')
-        mc.STG(r.SCRATCH, l.addr(ofs2, r.SPP))
+        mc.STG(r.SCRATCH2, l.addr(ofs2, r.SPP))
 
         self._push_core_regs_to_jitframe(mc, r.MANAGED_REGS)
         self._push_fp_regs_to_jitframe(mc)
@@ -317,7 +317,7 @@
 
         # no need to move second argument (frame_depth),
         # it is already in register r3!
-        mc.LGR(r.r3, r.SCRATCH2)
+        mc.LGR(r.r3, r.SCRATCH)
 
         RCS2 = r.r10
         RCS3 = r.r12
@@ -508,6 +508,16 @@
 
         self.frame_depth_to_patch.append((patch_pos, mc.currpos()))
 
+    def patch_stack_checks(self, frame_depth):
+        if frame_depth > 0x7fff:
+            raise JitFrameTooDeep     # XXX
+        for traps_pos, jmp_target in self.frame_depth_to_patch:
+            pmc = OverwritingBuilder(self.mc, traps_pos, 3)
+            # three traps, so exactly three instructions to patch here
+            pmc.CGFI(r.SCRATCH2, l.imm(frame_depth))
+            pmc.BRC(c.EQ, l.imm(jmp_target - (traps_pos + 6)))
+            pmc.LGHI(r.SCRATCH, l.imm(frame_depth))
+            pmc.overwrite()
 
     @rgc.no_release_gil
     def assemble_loop(self, jd_id, unique_id, logger, loopname, inputargs,
@@ -842,17 +852,6 @@
             tok.pos_recovery_stub = self.generate_quick_failure(tok)
         self.pending_guard_tokens_recovered = len(self.pending_guard_tokens)
 
-    def patch_stack_checks(self, frame_depth):
-        if frame_depth > 0x7fff:
-            raise JitFrameTooDeep     # XXX
-        for traps_pos, jmp_target in self.frame_depth_to_patch:
-            pmc = OverwritingBuilder(self.mc, traps_pos, 3)
-            # three traps, so exactly three instructions to patch here
-            pmc.CGFI(r.r2, l.imm(frame_depth))
-            pmc.BRC(c.EQ, l.imm(jmp_target - (traps_pos + 6)))
-            pmc.LGHI(r.r3, l.imm(frame_depth))
-            pmc.overwrite()
-
     def materialize_loop(self, looptoken):
         self.datablockwrapper.done()
         self.datablockwrapper = None


More information about the pypy-commit mailing list