[pypy-commit] pypy ppc-jit-backend: (arigo, hager): Started to build proper stack frames, also amde first calls work.
hager
noreply at buildbot.pypy.org
Wed Aug 31 12:05:37 CEST 2011
Author: hager <sven.hager at 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()
More information about the pypy-commit
mailing list