Author: edelsohn
Branch: ppc-jit-backend
Changeset: r52410:268d435de9ca
Date: 2012-02-13 09:26 -0500
http://bitbucket.org/pypy/pypy/changeset/268d435de9ca/
Log: Add prepare_call_malloc_nursery, get_mark_gc_roots.
diff --git a/pypy/jit/backend/ppc/regalloc.py b/pypy/jit/backend/ppc/regalloc.py
--- a/pypy/jit/backend/ppc/regalloc.py
+++ b/pypy/jit/backend/ppc/regalloc.py
@@ -777,6 +777,43 @@
args = [imm(rffi.cast(lltype.Signed, op.getarg(0).getint()))]
return args
+ def prepare_call_malloc_nursery(self, op):
+ size_box = op.getarg(0)
+ assert isinstance(size_box, ConstInt)
+ size = size_box.getint()
+
+ self.rm.force_allocate_reg(op.result, selected_reg=r.r3)
+ t = TempInt()
+ self.rm.force_allocate_reg(t, selected_reg=r.r4)
+ self.possibly_free_var(op.result)
+ self.possibly_free_var(t)
+
+ gc_ll_descr = self.assembler.cpu.gc_ll_descr
+ self.assembler.malloc_cond(
+ gc_ll_descr.get_nursery_free_addr(),
+ gc_ll_descr.get_nursery_top_addr(),
+ size
+ )
+
+ def get_mark_gc_roots(self, gcrootmap, use_copy_area=False):
+ shape = gcrootmap.get_basic_shape(False)
+ for v, val in self.frame_manager.bindings.items():
+ if (isinstance(v, BoxPtr) and self.rm.stays_alive(v)):
+ assert val.is_stack()
+ gcrootmap.add_frame_offset(shape, val.position * -WORD)
+ for v, reg in self.rm.reg_bindings.items():
+ if reg is r.r3:
+ continue
+ if (isinstance(v, BoxPtr) and self.rm.stays_alive(v)):
+ if use_copy_area:
+ assert reg in self.rm.REGLOC_TO_COPY_AREA_OFS
+ area_offset = self.rm.REGLOC_TO_COPY_AREA_OFS[reg]
+ gcrootmap.add_frame_offset(shape, area_offset)
+ else:
+ assert 0, 'sure??'
+ return gcrootmap.compress_callshape(shape,
+ self.assembler.datablockwrapper)
+
prepare_debug_merge_point = void
prepare_jit_debug = void
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit