[pypy-commit] pypy even-more-jit-hooks: progress

fijal noreply at buildbot.pypy.org
Tue Jun 26 22:16:55 CEST 2012


Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: even-more-jit-hooks
Changeset: r55852:06d6e8c909b5
Date: 2012-06-26 22:13 +0200
http://bitbucket.org/pypy/pypy/changeset/06d6e8c909b5/

Log:	progress

diff --git a/pypy/module/pypyjit/interp_resop.py b/pypy/module/pypyjit/interp_resop.py
--- a/pypy/module/pypyjit/interp_resop.py
+++ b/pypy/module/pypyjit/interp_resop.py
@@ -15,12 +15,17 @@
 
 class Cache(object):
     in_recursion = False
+    no = 0
 
     def __init__(self, space):
         self.w_compile_hook = space.w_None
         self.w_abort_hook = space.w_None
         self.w_optimize_hook = space.w_None
 
+    def getno(self):
+        self.no += 1
+        return self.no - 1
+
 def wrap_greenkey(space, jitdriver, greenkey, greenkey_repr):
     if greenkey is None:
         return space.w_None
@@ -42,7 +47,8 @@
     Set a compiling hook that will be called each time a loop is compiled.
     The hook will be called with the following signature:
     hook(jitdriver_name, loop_type, greenkey or guard_number, operations,
-         assembler_addr, assembler_length, loopno)
+         loopno, assembler_addr, assembler_length)
+         assembler_addr, assembler_length)
 
     jitdriver_name is the name of this particular jitdriver, 'pypyjit' is
     the main interpreter loop
diff --git a/pypy/module/pypyjit/policy.py b/pypy/module/pypyjit/policy.py
--- a/pypy/module/pypyjit/policy.py
+++ b/pypy/module/pypyjit/policy.py
@@ -49,6 +49,9 @@
     def _compile_hook(self, debug_info, w_arg):
         space = self.space
         cache = space.fromcache(Cache)
+        # note that we *have to* get a number here always, even if we're in
+        # recursion
+        no = cache.getno()
         if cache.in_recursion:
             return
         if space.is_true(cache.w_compile_hook):
@@ -65,6 +68,7 @@
                                         space.wrap(debug_info.type),
                                         w_arg,
                                         space.newlist(list_w),
+                                        space.wrap(no),
                                         space.wrap(asminfo.asmaddr),
                                         space.wrap(asminfo.asmlen))
                 except OperationError, e:
@@ -75,6 +79,9 @@
     def _optimize_hook(self, debug_info, w_arg):
         space = self.space
         cache = space.fromcache(Cache)
+        # note that we *have to* get a number here always, even if we're in
+        # recursion
+        no = cache.getno()
         if cache.in_recursion:
             return
         if space.is_true(cache.w_optimize_hook):
@@ -88,7 +95,8 @@
                                                 space.wrap(jd_name),
                                                 space.wrap(debug_info.type),
                                                 w_arg,
-                                                space.newlist(list_w))
+                                                space.newlist(list_w),
+                                                space.wrap(no))
                     if space.is_w(w_res, space.w_None):
                         return
                     l = []


More information about the pypy-commit mailing list