[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