[pypy-commit] pypy default: (s390x) apply same changes as in 2269d1d, push/pop gcmap callsites/calls modified/added
plan_rich
pypy.commits at gmail.com
Tue Jul 5 05:57:10 EDT 2016
Author: Richard Plangger <planrichi at gmail.com>
Branch:
Changeset: r85553:316ea0980c19
Date: 2016-07-05 11:55 +0200
http://bitbucket.org/pypy/pypy/changeset/316ea0980c19/
Log: (s390x) apply same changes as in 2269d1d, push/pop gcmap
callsites/calls modified/added
diff --git a/rpython/jit/backend/zarch/arch.py b/rpython/jit/backend/zarch/arch.py
--- a/rpython/jit/backend/zarch/arch.py
+++ b/rpython/jit/backend/zarch/arch.py
@@ -45,10 +45,7 @@
# +------------------------------+ <- assembler begin
# | SAVE CONTEXT |
# +------------------------------+
-# +--+| BRANCH (saves addr of pool |
-# | | in r13) |
-# | +------------------------------+
-# | | ... |
+#start| ... |
# | | LITERAL POOL | <---+
# | | ... | <-+ |
# +-->+------------------------------+ | |
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
@@ -309,11 +309,9 @@
# signature of this _frame_realloc_slowpath function:
# * on entry, r0 is the new size
- # * on entry, r1 is the gcmap
# * 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))
+ # caller already did push_gcmap(store=True)
self._push_core_regs_to_jitframe(mc, r.MANAGED_REGS)
self._push_fp_regs_to_jitframe(mc)
@@ -347,6 +345,7 @@
mc.load(r.r5, r.r5, 0)
mc.store(r.r2, r.r5, -WORD)
+ self.pop_gcmap(mc) # cancel the push_gcmap(store=True) in the caller
self._pop_core_regs_from_jitframe(mc, r.MANAGED_REGS)
self._pop_fp_regs_from_jitframe(mc)
@@ -411,6 +410,7 @@
reg is not r.r4 and
reg is not r.r5 and
reg is not r.r11]
+ # the caller already did push_gcmap(store=True)
self._push_core_regs_to_jitframe(mc, regs)
if supports_floats:
self._push_fp_regs_to_jitframe(mc)
@@ -420,6 +420,7 @@
# Finish
self._reload_frame_if_necessary(mc)
+ 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:
self._pop_fp_regs_from_jitframe(mc)
@@ -449,12 +450,11 @@
mc.store_link()
mc.push_std_frame()
#
- ofs2 = self.cpu.get_ofs_of_frame_field('jf_gcmap')
- mc.STG(r.r1, l.addr(ofs2, r.SPP))
saved_regs = [reg for reg in r.MANAGED_REGS
if reg is not r.RES and reg is not r.RSZ]
self._push_core_regs_to_jitframe(mc, saved_regs)
self._push_fp_regs_to_jitframe(mc)
+ # the caller already did push_gcmap(store=True)
#
if kind == 'fixed':
addr = self.cpu.gc_ll_descr.get_malloc_slowpath_addr()
@@ -502,6 +502,7 @@
# r.RSZ is loaded from [r1], to make the caller's store a no-op here
mc.load(r.RSZ, r.r1, 0)
#
+ self.pop_gcmap(mc) # push_gcmap(store=True) done by the caller
mc.restore_link()
mc.BCR(c.ANY, r.r14)
self.mc = None
@@ -588,7 +589,7 @@
# sum -> (14 bytes)
mc.write('\x00'*14)
mc.load_imm(r.RETURN, self._frame_realloc_slowpath)
- self.load_gcmap(mc, r.r1, gcmap)
+ self.push_gcmap(mc, gcmap, store=True)
mc.raw_call()
self.frame_depth_to_patch.append((patch_pos, mc.currpos()))
@@ -685,6 +686,8 @@
# name = "Loop # %s: %s" % (looptoken.number, loopname)
# self.cpu.profile_agent.native_code_written(name,
# rawstart, full_size)
+ #print(hex(rawstart+looppos))
+ #import pdb; pdb.set_trace()
return AsmInfo(ops_offset, rawstart + looppos,
size_excluding_failure_stuff - looppos, rawstart)
@@ -867,6 +870,10 @@
ofs = self.cpu.get_ofs_of_frame_field('jf_gcmap')
mc.STG(r.SCRATCH, l.addr(ofs, r.SPP))
+ def pop_gcmap(self, mc):
+ ofs = self.cpu.get_ofs_of_frame_field('jf_gcmap')
+ mc.LG(r.SCRATCH, l.addr(ofs, r.SPP))
+
def break_long_loop(self):
# If the loop is too long, the guards in it will jump forward
# more than 32 KB. We use an approximate hack to know if we
@@ -1339,7 +1346,7 @@
# new value of nursery_free_adr in RSZ and the adr of the new object
# in RES.
- self.load_gcmap(mc, r.r1, gcmap)
+ self.push_gcmap(mc, gcmap, store=True)
mc.branch_absolute(self.malloc_slowpath)
# here r1 holds nursery_free_addr
@@ -1375,7 +1382,7 @@
# new value of nursery_free_adr in RSZ and the adr of the new object
# in RES.
- self.load_gcmap(mc, r.r1, gcmap)
+ self.push_gcmap(mc, gcmap, store=True)
mc.branch_absolute(self.malloc_slowpath)
offset = mc.currpos() - fast_jmp_pos
@@ -1468,7 +1475,7 @@
pmc.overwrite()
#
# save the gcmap
- self.load_gcmap(mc, r.r1, gcmap)
+ self.push_gcmap(mc, gcmap, store=True)
#
# load the function into r14 and jump
if kind == rewrite.FLAG_ARRAY:
More information about the pypy-commit
mailing list