[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