Author: hager <[email protected]>
Branch: ppc-jit-backend
Changeset: r51029:e6f908f85e4c
Date: 2012-01-05 02:50 -0800
http://bitbucket.org/pypy/pypy/changeset/e6f908f85e4c/
Log: implemented CALL_MALLOC_GC and removed old new_XXX ops
diff --git a/pypy/jit/backend/ppc/ppcgen/opassembler.py
b/pypy/jit/backend/ppc/ppcgen/opassembler.py
--- a/pypy/jit/backend/ppc/ppcgen/opassembler.py
+++ b/pypy/jit/backend/ppc/ppcgen/opassembler.py
@@ -799,6 +799,10 @@
_mixin_ = True
+ def emit_call_malloc_gc(self, op, arglocs, regalloc):
+ self.emit_call(op, arglocs, regalloc)
+ self.propagate_memoryerror_if_r3_is_null()
+
# from: ../x86/regalloc.py:750
# called from regalloc
# XXX kill this function at some point
@@ -817,14 +821,6 @@
self._emit_call(force_index, self.malloc_func_addr, [size_box],
regalloc,
result=result)
- def emit_new(self, op, arglocs, regalloc):
- # XXX do exception handling here!
- pass
-
- def emit_new_with_vtable(self, op, arglocs, regalloc):
- classint = arglocs[0].value
- self.set_vtable(op.result, classint)
-
def set_vtable(self, box, vtable):
if self.cpu.vtable_offset is not None:
adr = rffi.cast(lltype.Signed, vtable)
@@ -832,15 +828,6 @@
self.mc.store(r.SCRATCH.value, r.RES.value, self.cpu.vtable_offset)
self.mc.free_scratch_reg()
- def emit_new_array(self, op, arglocs, regalloc):
- self.propagate_memoryerror_if_r3_is_null()
- if len(arglocs) > 0:
- value_loc, base_loc, ofs_length = arglocs
- self.mc.store(value_loc.value, base_loc.value, ofs_length.value)
-
- emit_newstr = emit_new_array
- emit_newunicode = emit_new_array
-
def write_new_force_index(self):
# for shadowstack only: get a new, unused force_index number and
# write it to FORCE_INDEX_OFS. Used to record the call shape
diff --git a/pypy/jit/backend/ppc/ppcgen/regalloc.py
b/pypy/jit/backend/ppc/ppcgen/regalloc.py
--- a/pypy/jit/backend/ppc/ppcgen/regalloc.py
+++ b/pypy/jit/backend/ppc/ppcgen/regalloc.py
@@ -358,6 +358,10 @@
args[-1] = imm(n)
return args
+ def prepare_call_malloc_gc(self, op):
+ args = [imm(rffi.cast(lltype.Signed, op.getarg(0).getint()))]
+ return args
+
def _prepare_guard(self, op, args=None):
if args is None:
args = []
@@ -781,79 +785,6 @@
prepare_cast_ptr_to_int = prepare_same_as
prepare_cast_int_to_ptr = prepare_same_as
- def prepare_new(self, op):
- gc_ll_descr = self.assembler.cpu.gc_ll_descr
- # XXX introduce the fastpath for malloc
- arglocs = self._prepare_args_for_new_op(op.getdescr())
- force_index = self.assembler.write_new_force_index()
- self.assembler._emit_call(force_index, self.assembler.malloc_func_addr,
- arglocs, self, result=op.result)
- self.possibly_free_vars(arglocs)
- self.possibly_free_var(op.result)
- return []
-
- def prepare_new_with_vtable(self, op):
- classint = op.getarg(0).getint()
- descrsize = heaptracker.vtable2descr(self.cpu, classint)
- # XXX add fastpath for allocation
- callargs = self._prepare_args_for_new_op(descrsize)
- force_index = self.assembler.write_new_force_index()
- self.assembler._emit_call(force_index, self.assembler.malloc_func_addr,
- callargs, self, result=op.result)
- self.possibly_free_vars(callargs)
- self.possibly_free_var(op.result)
- return [imm(classint)]
-
- def prepare_new_array(self, op):
- gc_ll_descr = self.cpu.gc_ll_descr
- if gc_ll_descr.get_funcptr_for_newarray is not None:
- # framework GC
- box_num_elem = op.getarg(0)
- if isinstance(box_num_elem, ConstInt):
- num_elem = box_num_elem.value
- # XXX implement fastpath for malloc
- args = self.assembler.cpu.gc_ll_descr.args_for_new_array(
- op.getdescr())
- argboxes = [ConstInt(x) for x in args]
- argboxes.append(box_num_elem)
- force_index = self.assembler.write_new_force_index()
- self.assembler._emit_call(force_index,
self.assembler.malloc_array_func_addr,
- argboxes, self, result=op.result)
- return []
- # boehm GC
- itemsize, scale, basesize, ofs_length, _ = (
- self._unpack_arraydescr(op.getdescr()))
- return self._malloc_varsize(basesize, ofs_length, itemsize, op)
-
- def prepare_newstr(self, op):
- gc_ll_descr = self.cpu.gc_ll_descr
- if gc_ll_descr.get_funcptr_for_newstr is not None:
- force_index = self.assembler.write_new_force_index()
- self.assembler._emit_call(force_index,
- self.assembler.malloc_str_func_addr, [op.getarg(0)],
- self, op.result)
- return []
- # boehm GC
- ofs_items, itemsize, ofs = symbolic.get_array_token(rstr.STR,
- self.cpu.translate_support_code)
- assert itemsize == 1
- return self._malloc_varsize(ofs_items, ofs, itemsize, op)
-
- def prepare_newunicode(self, op):
- gc_ll_descr = self.cpu.gc_ll_descr
- if gc_ll_descr.get_funcptr_for_newunicode is not None:
- force_index = self.assembler.write_new_force_index()
- self.assembler._emit_call(force_index,
- self.assembler.malloc_unicode_func_addr,
- [op.getarg(0)], self, op.result)
- return []
- # boehm GC
- ofs_items, _, ofs = symbolic.get_array_token(rstr.UNICODE,
- self.cpu.translate_support_code)
- _, itemsize, _ = symbolic.get_array_token(rstr.UNICODE,
- self.cpu.translate_support_code)
- return self._malloc_varsize(ofs_items, ofs, itemsize, op)
-
def prepare_call(self, op):
effectinfo = op.getdescr().get_extra_info()
if effectinfo is not None:
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit