[pypy-commit] pypy ppc-jit-backend: (bivab) Fix allocation of function descriptors for PPC64

hager noreply at buildbot.pypy.org
Thu Dec 29 17:26:27 CET 2011


Author: hager <sven.hager at uni-duesseldorf.de>
Branch: ppc-jit-backend
Changeset: r50950:0c305ddabb69
Date: 2011-12-29 08:25 -0800
http://bitbucket.org/pypy/pypy/changeset/0c305ddabb69/

Log:	(bivab) Fix allocation of function descriptors for PPC64

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
@@ -515,7 +515,6 @@
 
         self.setup(looptoken, operations)
         self.startpos = self.mc.currpos()
-
         longevity = compute_vars_longevity(inputargs, operations)
         regalloc = Regalloc(longevity, assembler=self,
                             frame_manager=PPCFrameManager())
@@ -540,6 +539,8 @@
         self.gen_direct_bootstrap_code(loophead, looptoken, inputargs, frame_depth)
 
         self.write_pending_failure_recoveries()
+	if IS_PPC_64:
+		fdescrs = self.gen_64_bit_func_descrs()
         loop_start = self.materialize_loop(looptoken, False)
         looptoken._ppc_bootstrap_code = loop_start
 
@@ -547,13 +548,15 @@
         if IS_PPC_32:
             looptoken._ppc_direct_bootstrap_code = real_start
         else:
-            looptoken._ppc_direct_bootstrap_code = self.gen_64_bit_func_descr(real_start)
+            self.write_64_bit_func_descr(fdescrs[0], real_start)
+            looptoken._ppc_direct_bootstrap_code = fdescrs[0]
 
         real_start = loop_start + start_pos
         if IS_PPC_32:
             looptoken.ppc_code = real_start
         else:
-            looptoken.ppc_code = self.gen_64_bit_func_descr(real_start)
+            self.write_64_bit_func_descr(fdescrs[1], real_start)
+            looptoken.ppc_code = fdescrs[1]
         self.process_pending_guards(loop_start)
         if not we_are_translated():
             print 'Loop', inputargs, operations
@@ -701,13 +704,16 @@
             return False
         return True
 
-    def gen_64_bit_func_descr(self, start_addr):
-        mc = PPCBuilder()
-        mc.write64(start_addr)
-        mc.write64(0)
-        mc.write64(0)
-        return mc.materialize(self.cpu.asmmemmgr, [], 
-                              self.cpu.gc_ll_descr.gcrootmap)
+    def gen_64_bit_func_descrs(self):
+        d0 = self.datablockwrapper.malloc_aligned(3*WORD, alignment=1)
+        d1 = self.datablockwrapper.malloc_aligned(3*WORD, alignment=1)
+	return [d0, d1]
+
+    def write_64_bit_func_descr(self, descr, start_addr):
+        data = rffi.cast(rffi.CArrayPtr(lltype.Signed), descr)
+	data[0] = start_addr
+	data[1] = 0
+	data[2] = 0
 
     def compute_frame_depth(self, regalloc):
         PARAMETER_AREA = self.max_stack_params * WORD


More information about the pypy-commit mailing list