[pypy-commit] pypy ppc-jit-backend: (bivab, hager): make test_memoryerror pass, factor out return code

hager noreply at buildbot.pypy.org
Tue Jan 3 14:29:33 CET 2012


Author: hager <sven.hager at uni-duesseldorf.de>
Branch: ppc-jit-backend
Changeset: r50996:be5c3642001f
Date: 2012-01-03 14:29 +0100
http://bitbucket.org/pypy/pypy/changeset/be5c3642001f/

Log:	(bivab, hager): make test_memoryerror pass, factor out return code

diff --git a/pypy/jit/backend/ppc/ppcgen/ppc_assembler.py b/pypy/jit/backend/ppc/ppcgen/ppc_assembler.py
--- a/pypy/jit/backend/ppc/ppcgen/ppc_assembler.py
+++ b/pypy/jit/backend/ppc/ppcgen/ppc_assembler.py
@@ -278,10 +278,9 @@
         with Saved_Volatiles(mc):
             addr = self.cpu.get_on_leave_jitted_int(save_exception=True)
             mc.call(addr)
-        #mc.alloc_scratch_reg(self.cpu.propagate_exception_v)
-        #mc.mr(r.RES.value, r.SCRATCH.value)
-        #mc.free_scratch_reg()
+
         mc.load_imm(r.RES, self.cpu.propagate_exception_v)
+        self._gen_epilogue(mc)
         mc.prepare_insts_blocks()
         self.propagate_exception_path = mc.materialize(self.cpu.asmmemmgr, [])
 
@@ -320,6 +319,14 @@
         # call decoding function
         mc.call(addr)
 
+        # generate return and restore registers
+        self._gen_epilogue(mc)
+
+        mc.prepare_insts_blocks()
+        return mc.materialize(self.cpu.asmmemmgr, [],
+                                   self.cpu.gc_ll_descr.gcrootmap)
+
+    def _gen_epilogue(self, mc):
         # save SPP in r5
         # (assume that r5 has been written to failboxes)
         mc.mr(r.r5.value, r.SPP.value)
@@ -336,9 +343,6 @@
         # generated before we know how much space the entire frame will need.
         mc.addi(r.SP.value, r.r5.value, self.OFFSET_SPP_TO_OLD_BACKCHAIN) # restore old SP
         mc.blr()
-        mc.prepare_insts_blocks()
-        return mc.materialize(self.cpu.asmmemmgr, [],
-                                   self.cpu.gc_ll_descr.gcrootmap)
 
     def _save_managed_regs(self, mc):
         """ store managed registers in ENCODING AREA


More information about the pypy-commit mailing list