Author: hager <[email protected]>
Branch: ppc-jit-backend
Changeset: r49442:991e2aba52b0
Date: 2011-11-15 19:11 +0100
http://bitbucket.org/pypy/pypy/changeset/991e2aba52b0/
Log: Implemented NEWSTR and NEWUNICODE
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
@@ -619,6 +619,9 @@
else:
self.mc.std(value_loc.value, base_loc.value, ofs_length.value)
+ emit_newstr = emit_new_array
+ emit_newunicode = emit_new_array
+
def emit_same_as(self, op, arglocs, regalloc):
argloc, resloc = arglocs
self.regalloc_mov(argloc, resloc)
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
@@ -117,6 +117,8 @@
self.mc = None
self.malloc_func_addr = 0
self.malloc_array_func_addr = 0
+ self.malloc_str_func_addr = 0
+ self.malloc_unicode_func_addr = 0
self.datablockwrapper = None
self.memcpy_addr = 0
self.fail_boxes_count = 0
@@ -467,6 +469,14 @@
ll_new_array = gc_ll_descr.get_funcptr_for_newarray()
self.malloc_array_func_addr = rffi.cast(lltype.Signed,
ll_new_array)
+ if gc_ll_descr.get_funcptr_for_newstr is not None:
+ ll_new_str = gc_ll_descr.get_funcptr_for_newstr()
+ self.malloc_str_func_addr = rffi.cast(lltype.Signed,
+ ll_new_str)
+ if gc_ll_descr.get_funcptr_for_newunicode is not None:
+ ll_new_unicode = gc_ll_descr.get_funcptr_for_newunicode()
+ self.malloc_unicode_func_addr = rffi.cast(lltype.Signed,
+ ll_new_unicode)
self.memcpy_addr = self.cpu.cast_ptr_to_int(memcpy_fn)
self.setup_failure_recovery()
self.exit_code_adr = self._gen_exit_path()
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
@@ -660,6 +660,35 @@
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