Author: hager <sven.ha...@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): _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit