Author: Richard Plangger <planri...@gmail.com>
Branch: s390x-enhance-speed
Changeset: r82847:cc0fd9f1b25f
Date: 2016-03-07 15:38 +0100
http://bitbucket.org/pypy/pypy/changeset/cc0fd9f1b25f/

Log:    added two more pointer to the literal pool, exchanged some registers
        for better pipeline flow

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
@@ -1063,8 +1063,8 @@
     def _call_footer_shadowstack(self, gcrootmap):
         # r6 -> r15 can be used freely, they will be restored by 
         # _call_footer after this call
-        RCS1 = r.r9
-        RCS2 = r.r10
+        RCS1 = r.r8
+        RCS2 = r.r7
         mc = self.mc
         mc.load_imm(RCS1, gcrootmap.get_root_stack_top_addr())
         mc.load(RCS2, RCS1, 0)    # ld RCS2, [rootstacktop]
@@ -1072,13 +1072,14 @@
         mc.store(RCS2, RCS1, 0)   # std RCS2, [rootstacktop]
 
     def _call_footer(self):
-        # the return value is the jitframe
-        self.mc.LGR(r.r2, r.SPP)
 
         gcrootmap = self.cpu.gc_ll_descr.gcrootmap
         if gcrootmap and gcrootmap.is_shadow_stack:
             self._call_footer_shadowstack(gcrootmap)
 
+        # the return value is the jitframe
+        self.mc.LGR(r.r2, r.SPP)
+
         size = STD_FRAME_SIZE_IN_BYTES
         # f8 through f15 are saved registers (= non volatile)
         # TODO it would be good to detect if any float is used in the loop
@@ -1248,11 +1249,11 @@
             gcmap = self._finish_gcmap
         else:
             gcmap = lltype.nullptr(jitframe.GCMAP)
-        self.load_gcmap(self.mc, r.r2, gcmap)
+        self.load_gcmap(self.mc, r.r9, gcmap)
 
-        self.mc.load_imm(r.r3, fail_descr_loc.getint())
-        self.mc.STG(r.r3, l.addr(ofs, r.SPP))
-        self.mc.STG(r.r2, l.addr(ofs2, r.SPP))
+        self.mc.load_imm(r.r10, fail_descr_loc.getint())
+        self.mc.STG(r.r9, l.addr(ofs2, r.SPP))
+        self.mc.STG(r.r10, l.addr(ofs, r.SPP))
 
         # exit function
         self._call_footer()
diff --git a/rpython/jit/backend/zarch/pool.py 
b/rpython/jit/backend/zarch/pool.py
--- a/rpython/jit/backend/zarch/pool.py
+++ b/rpython/jit/backend/zarch/pool.py
@@ -117,9 +117,16 @@
         for op in operations:
             self.ensure_can_hold_constants(asm, op)
         self._ensure_value(asm.cpu.pos_exc_value(), asm)
+        # the top of shadow stack
         gcrootmap = asm.cpu.gc_ll_descr.gcrootmap
         if gcrootmap and gcrootmap.is_shadow_stack:
-            self._ensure_value(gcrootmap.get_root_stack_top_addr())
+            self._ensure_value(gcrootmap.get_root_stack_top_addr(), asm)
+        # endaddr of insert stack check
+        endaddr, lengthaddr, _ = self.cpu.insert_stack_check()
+        self._ensure_value(endaddr, asm)
+        # fast gil
+        fastgil = rgil.gil_fetch_fastgil()
+        self._ensure_value(fastgil, asm)
         # TODO add more values that are loaded with load_imm
 
     # XXX def post_assemble(self, asm):
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to