[pypy-svn] r73797 - pypy/trunk/pypy/jit/tl/tinyframe

fijal at codespeak.net fijal at codespeak.net
Thu Apr 15 22:53:45 CEST 2010


Author: fijal
Date: Thu Apr 15 22:53:44 2010
New Revision: 73797

Modified:
   pypy/trunk/pypy/jit/tl/tinyframe/targettinyframe.py
   pypy/trunk/pypy/jit/tl/tinyframe/tinyframe.py
Log:
jit work


Modified: pypy/trunk/pypy/jit/tl/tinyframe/targettinyframe.py
==============================================================================
--- pypy/trunk/pypy/jit/tl/tinyframe/targettinyframe.py	(original)
+++ pypy/trunk/pypy/jit/tl/tinyframe/targettinyframe.py	Thu Apr 15 22:53:44 2010
@@ -1,5 +1,9 @@
 
 from pypy.jit.tl.tinyframe.tinyframe import main
+from pypy.jit.metainterp.policy import JitPolicy
+
+def jitpolicy(driver):
+    return JitPolicy()
 
 def entry_point(argv):
     main(argv[1], argv[2:])

Modified: pypy/trunk/pypy/jit/tl/tinyframe/tinyframe.py
==============================================================================
--- pypy/trunk/pypy/jit/tl/tinyframe/tinyframe.py	(original)
+++ pypy/trunk/pypy/jit/tl/tinyframe/tinyframe.py	Thu Apr 15 22:53:44 2010
@@ -30,6 +30,7 @@
 from pypy.rlib.streamio import open_file_as_stream
 from pypy.jit.tl.tinyframe.support import sort
 from pypy.rlib.unroll import unrolling_iterable
+from pypy.rlib.jit import JitDriver, hint
 
 opcodes = ['ADD', 'INTROSPECT', 'PRINT', 'CALL', 'LOAD', 'LOAD_FUNCTION',
            'RETURN', 'JUMP', 'JUMP_IF_ABOVE']
@@ -186,8 +187,7 @@
         self.code = code
 
     def call(self, arg):
-        f = Frame(self.code)
-        f.registers[0] = arg
+        f = Frame(self.code, arg)
         return f.interpret()
 
     def add(self, other):
@@ -207,15 +207,23 @@
     def repr(self):
         return "<function %s(%s)>" % (self.outer.repr(), self.inner.repr())
 
+driver = JitDriver(greens = ['code', 'i'], reds = ['self'],
+                   virtualizables = ['self'])
+
 class Frame(object):
-    def __init__(self, code):
+    _virtualizable2_ = ['registers[*]', 'code']
+    
+    def __init__(self, code, arg=None):
+        self = hint(self, access_directly=True, fresh_virtualizable=True)
         self.code = code
-        self.registers = [None] * code.regno 
+        self.registers = [None] * code.regno
+        self.registers[0] = arg
 
     def interpret(self):
         i = 0
         code = self.code.code
         while True:
+            driver.jit_merge_point(self=self, code=code, i=i)
             opcode = ord(code[i])
             if opcode == LOAD:
                 self.registers[ord(code[i + 2])] = Int(ord(code[i + 1]))
@@ -233,6 +241,7 @@
                 tgt = ord(code[i + 3])
                 if arg0.gt(arg1):
                     i = tgt
+                    driver.can_enter_jit(code=code, i=tgt, self=self)
                 else:
                     i += 4
             elif opcode == LOAD_FUNCTION:



More information about the Pypy-commit mailing list