[pypy-svn] pypy numpy-exp: Add jit driver

fijal commits-noreply at bitbucket.org
Wed Feb 9 20:07:18 CET 2011


Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: numpy-exp
Changeset: r41762:0a7324b724b5
Date: 2011-02-09 21:06 +0200
http://bitbucket.org/pypy/pypy/changeset/0a7324b724b5/

Log:	Add jit driver

diff --git a/pypy/jit/tl/pypyjit.py b/pypy/jit/tl/pypyjit.py
--- a/pypy/jit/tl/pypyjit.py
+++ b/pypy/jit/tl/pypyjit.py
@@ -41,6 +41,7 @@
 config.objspace.usemodules._sre = False
 #
 config.objspace.usemodules._ffi = True
+config.objspace.usemodules.micronumpy = True
 #
 set_pypy_opt_level(config, level='jit')
 

diff --git a/pypy/module/micronumpy/numarray.py b/pypy/module/micronumpy/numarray.py
--- a/pypy/module/micronumpy/numarray.py
+++ b/pypy/module/micronumpy/numarray.py
@@ -4,9 +4,15 @@
 from pypy.interpreter.typedef import TypeDef
 from pypy.interpreter.gateway import interp2app, NoneNotWrapped
 from pypy.rpython.lltypesystem import lltype
+from pypy.rlib import jit
 
 TP = lltype.GcArray(lltype.Float)
 
+numpy_driver = jit.JitDriver(greens = ['bytecode'],
+                             reds = ['result', 'result_size', 'i',
+                                     'valuestack', 'valuestackdepth',
+                                     'input', 'input_pos'])
+
 def compute(bytecode, input):
     result_size = input[0].size
     result = SingleDimArray(result_size)
@@ -16,7 +22,11 @@
     valuestackdepth = 0
     i = 0
     while i < result_size:
-        # merge point
+        numpy_driver.jit_merge_point(bytecode=bytecode, result=result,
+                                     result_size=result_size,
+                                     valuestackdepth=valuestackdepth,
+                                     valuestack=valuestack,
+                                     input=input, input_pos=input_pos, i=i)
         if bytecode_pos == -1:
             bytecode_pos = len(bytecode) - 1
             input_pos = len(input) - 1
@@ -24,7 +34,11 @@
             valuestack = [0.0] * len(input)
             valuestackdepth = 0
             i += 1
-            # can_enter_jit
+            numpy_driver.can_enter_jit(bytecode=bytecode, result=result,
+                                       result_size=result_size,
+                                       valuestackdepth=valuestackdepth,
+                                       valuestack=valuestack,
+                                       input=input, input_pos=input_pos, i=i)
         else:
             opcode = bytecode[bytecode_pos]
             if opcode == 'l':

diff --git a/pypy/rlib/jit.py b/pypy/rlib/jit.py
--- a/pypy/rlib/jit.py
+++ b/pypy/rlib/jit.py
@@ -271,7 +271,7 @@
 
 # ____________________________________________________________
 
-class JitDriver:    
+class JitDriver:
     """Base class to declare fine-grained user control on the JIT.  So
     far, there must be a singleton instance of JitDriver.  This style
     will allow us (later) to support a single RPython program with


More information about the Pypy-commit mailing list