Author: hager <sven.ha...@uni-duesseldorf.de> Branch: ppc-jit-backend Changeset: r46941:f5ffdcff7e59 Date: 2011-08-31 12:05 +0200 http://bitbucket.org/pypy/pypy/changeset/f5ffdcff7e59/
Log: (arigo, hager): Started to build proper stack frames, also amde first calls work. 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 @@ -1395,6 +1395,23 @@ self.addi(ptr_reg, ptr_reg, basesize) self.stbx(value_reg, ptr_reg, offset_reg) + def emit_call(self, op, cpu): + call_addr = rffi.cast(lltype.Signed, op.getarg(0).value) + args = op.getarglist()[1:] + descr = op.getdescr() + + arg_reg = 3 + for arg in args: + self.mr(arg_reg, cpu.reg_map[arg]) + arg_reg += 1 + + self.load_word(0, call_addr) + self.mtctr(0) + self.bctrl() + + result = op.result + cpu.reg_map[result] = 3 + ############################ # unary integer operations # ############################ @@ -1540,6 +1557,9 @@ self.store_reg(cpu.next_free_register, addr) else: assert 0, "arg type not suported" + self.lwz(0, 1, 36) + self.mtlr(0) + self.addi(1, 1, 32) self.load_word(3, identifier) self.blr() 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 @@ -56,10 +56,11 @@ self.startpos = codebuilder.get_relative_pos() + self._make_prologue(codebuilder) self._walk_trace_ops(codebuilder, operations) self._make_epilogue(codebuilder) - f = codebuilder.assemble() + f = codebuilder.assemble(True) looptoken.ppc_code = f looptoken.codebuilder = codebuilder self.total_compiled_loops += 1 @@ -104,6 +105,11 @@ self.next_free_register += 1 return reg + def _make_prologue(self, codebuilder): + codebuilder.stwu(1, 1, -32) + codebuilder.mflr(0) + codebuilder.stw(0, 1, 36) + def _make_epilogue(self, codebuilder): for op_index, fail_index, guard, reglist in self.patch_list: curpos = codebuilder.get_relative_pos() @@ -129,6 +135,10 @@ descr.patch_pos = patch_pos descr.used_mem_indices = used_mem_indices + codebuilder.lwz(0, 1, 36) + codebuilder.mtlr(0) + codebuilder.addi(1, 1, 32) + codebuilder.li(3, fail_index) codebuilder.blr() _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit