[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