Author: hager <sven.ha...@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 _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit