Author: hager <sven.ha...@uni-duesseldorf.de>
Branch: ppc-jit-backend
Changeset: r45886:e24c11f9222b
Date: 2011-07-22 16:57 +0200
http://bitbucket.org/pypy/pypy/changeset/e24c11f9222b/

Log:    Started implementing the PPC_64_CPU class.

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
@@ -9,6 +9,8 @@
 from pypy.jit.backend.x86.profagent import ProfileAgent
 from pypy.jit.backend.llsupport.llmodel import AbstractLLCPU
 from pypy.jit.backend.x86 import regloc
+from pypy.jit.backend.x86.support import values_array
+from pypy.jit.backend.ppc.ppcgen.ppc_assembler import PPCBuilder
 import sys
 
 from pypy.tool.ansi_print import ansi_log
@@ -25,5 +27,45 @@
         AbstractLLCPU.__init__(self, rtyper, stats, opts,
                                translate_support_code, gcdescr)
 
+        # pointer to an array of ints
+        # XXX length of the integer array is 1000 for now
+        self.arg_to_box = {}
+        self.fail_boxes_int = values_array(lltype.Signed, 1000)
+        self.saved_descr = {}
+
+        # floats are not supported yet
+        self.supports_floats = False
+
+    # compile a given trace
     def compile_loop(self, inputargs, operations, looptoken, log=True):
-        pass
+        codebuilder = PPCBuilder()
+        self.saved_descr[len(self.saved_descr)] = operations[-1].getdescr()
+
+        for index, arg in enumerate(inputargs):
+            self.arg_to_box[arg] = index
+            
+        self._walk_trace_ops(codebuilder, operations)
+
+        f = codebuilder.assemble()
+        looptoken.ppc_code = f
+
+    def set_future_value_int(self, index, value_int):
+        self.fail_boxes_int.setitem(index, value_int)
+
+    # executes the stored machine code in the token
+    def execute_token(self, looptoken):   
+        descr_index = looptoken.ppc_code()
+        return self.saved_descr[descr_index]
+
+    # fetch the result of the computation and return it
+    def get_latest_value_int(self, index):
+        value = self.fail_boxes_int.getitem(index)
+        return value
+
+    # walk through the given trace and generate machine code
+    def _walk_trace_ops(self, codebuilder, operations):
+        for op in operations:
+            codebuilder.build_op(op, self)
+                
+    def get_box_index(self, box):
+        return self.arg_to_box[box]
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to