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

Reply via email to