[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