[pypy-commit] pypy ppc-jit-backend: Implemented NEW_WITH_VTABLE
hager
noreply at buildbot.pypy.org
Wed Nov 16 17:55:09 CET 2011
Author: hager <sven.hager at uni-duesseldorf.de>
Branch: ppc-jit-backend
Changeset: r49476:7ad615ae7faf
Date: 2011-11-16 17:54 +0100
http://bitbucket.org/pypy/pypy/changeset/7ad615ae7faf/
Log: Implemented NEW_WITH_VTABLE
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
@@ -610,6 +610,19 @@
# 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)
+ self.mc.load_imm(r.r0, adr)
+ if IS_PPC_32:
+ self.mc.stw(r.r0.value, r.r3.value, self.cpu.vtable_offset)
+ else:
+ self.mc.std(r.r0.value, r.r3.value, self.cpu.vtable_offset)
+
def emit_new_array(self, op, arglocs, regalloc):
# XXX handle memory errors
if len(arglocs) > 0:
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
@@ -639,6 +639,18 @@
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:
More information about the pypy-commit
mailing list