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

Reply via email to