[pypy-commit] pypy ppc-jit-backend: Implemented passing of pointer values.

hager noreply at buildbot.pypy.org
Thu Oct 20 12:43:46 CEST 2011


Author: hager <sven.hager at uni-duesseldorf.de>
Branch: ppc-jit-backend
Changeset: r48261:c32669c9d45d
Date: 2011-10-20 12:43 +0200
http://bitbucket.org/pypy/pypy/changeset/c32669c9d45d/

Log:	Implemented passing of pointer values.

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
@@ -96,14 +96,6 @@
             self.mc.oris(rD, rD, high(word))
             self.mc.ori(rD, rD, lo(word))
 
-    def load_from_addr(self, rD, addr):
-        if IS_PPC_32:
-            self.mc.addis(rD, 0, ha(addr))
-            self.mc.lwz(rD, rD, la(addr))
-        else:
-            self.load_word(rD, addr)
-            self.mc.ld(rD, rD, 0)
-
     def store_reg(self, source_reg, addr):
         self.load_imm(r.r0.value, addr)
         if IS_PPC_32:
@@ -342,15 +334,17 @@
             assert arg.type != FLOAT
             if arg.type == INT:
                 addr = self.fail_boxes_int.get_addr_for_num(i)
-            elif args.type == REF:
+            elif arg.type == REF:
                 addr = self.fail_boxes_ptr.get_addr_for_num(i)
             else:
                 assert 0, "%s not supported" % arg.type
             if loc.is_reg():
                 reg = loc
             else:
-                assert 0, "FIX LATER"
-            self.load_from_addr(reg.value, addr)
+                reg = r.r0
+            self.mc.load_from_addr(reg, addr)
+            if loc.is_stack():
+                self.regalloc_mov(r.r0, loc)
 
     def setup(self, looptoken, operations):
         operations = self.cpu.gc_ll_descr.rewrite_assembler(self.cpu, 
diff --git a/pypy/jit/backend/ppc/runner.py b/pypy/jit/backend/ppc/runner.py
--- a/pypy/jit/backend/ppc/runner.py
+++ b/pypy/jit/backend/ppc/runner.py
@@ -90,8 +90,7 @@
         self.asm.fail_boxes_int.setitem(index, value_int)
 
     def set_future_value_ref(self, index, pointer):
-        sign_ptr = rffi.cast(lltype.Signed, pointer)
-        self.fail_boxes_int.setitem(index, sign_ptr)
+        self.asm.fail_boxes_ptr.setitem(index, pointer)
 
     def clear_latest_values(self, count):
         null = lltype.nullptr(llmemory.GCREF.TO)
@@ -133,8 +132,7 @@
         return value
 
     def get_latest_value_ref(self, index):
-        value = self.fail_boxes_int.getitem(index)
-        return rffi.cast(llmemory.GCREF, value)
+        return self.asm.fail_boxes_ptr.getitem(index)
     
     # walk through the given trace and generate machine code
     def _walk_trace_ops(self, codebuilder, operations):


More information about the pypy-commit mailing list