[pypy-svn] r70410 - in pypy/branch/jit-trace/pypy: jit/metainterp jit/metainterp/test module/pypyjit
arigo at codespeak.net
arigo at codespeak.net
Mon Jan 4 22:22:55 CET 2010
Author: arigo
Date: Mon Jan 4 22:22:55 2010
New Revision: 70410
Modified:
pypy/branch/jit-trace/pypy/jit/metainterp/test/test_basic.py
pypy/branch/jit-trace/pypy/jit/metainterp/warmspot.py
pypy/branch/jit-trace/pypy/jit/metainterp/warmstate.py
pypy/branch/jit-trace/pypy/module/pypyjit/interp_jit.py
Log:
Implement confirm_enter_jit() in interp_jit.py.
Modified: pypy/branch/jit-trace/pypy/jit/metainterp/test/test_basic.py
==============================================================================
--- pypy/branch/jit-trace/pypy/jit/metainterp/test/test_basic.py (original)
+++ pypy/branch/jit-trace/pypy/jit/metainterp/test/test_basic.py Mon Jan 4 22:22:55 2010
@@ -386,7 +386,7 @@
assert res == -1
def test_confirm_enter_jit(self):
- def confirm_enter_jit(x):
+ def confirm_enter_jit(x, y):
return x <= 5
myjitdriver = JitDriver(greens = ['x'], reds = ['y'],
confirm_enter_jit = confirm_enter_jit)
Modified: pypy/branch/jit-trace/pypy/jit/metainterp/warmspot.py
==============================================================================
--- pypy/branch/jit-trace/pypy/jit/metainterp/warmspot.py (original)
+++ pypy/branch/jit-trace/pypy/jit/metainterp/warmspot.py Mon Jan 4 22:22:55 2010
@@ -403,10 +403,12 @@
self.get_printable_location_ptr = self._make_hook_graph(
annhelper, self.jitdriver.get_printable_location, s_Str)
self.confirm_enter_jit_ptr = self._make_hook_graph(
- annhelper, self.jitdriver.confirm_enter_jit, annmodel.s_Bool)
+ annhelper, self.jitdriver.confirm_enter_jit, annmodel.s_Bool,
+ onlygreens=False)
annhelper.finish()
- def _make_hook_graph(self, annhelper, func, s_result, s_first_arg=None):
+ def _make_hook_graph(self, annhelper, func, s_result, s_first_arg=None,
+ onlygreens=True):
if func is None:
return None
#
@@ -414,7 +416,9 @@
if s_first_arg is not None:
extra_args_s.append(s_first_arg)
#
- args_s = self.portal_args_s[:len(self.green_args_spec)]
+ args_s = self.portal_args_s
+ if onlygreens:
+ args_s = args_s[:len(self.green_args_spec)]
graph = annhelper.getgraph(func, extra_args_s + args_s, s_result)
funcptr = annhelper.graph2delayed(graph)
return funcptr
Modified: pypy/branch/jit-trace/pypy/jit/metainterp/warmstate.py
==============================================================================
--- pypy/branch/jit-trace/pypy/jit/metainterp/warmstate.py (original)
+++ pypy/branch/jit-trace/pypy/jit/metainterp/warmstate.py Mon Jan 4 22:22:55 2010
@@ -228,7 +228,7 @@
cell.counter = n
return
# bound reached; start tracing
- if not confirm_enter_jit(*greenargs):
+ if not confirm_enter_jit(*args):
cell.counter = 0
return
from pypy.jit.metainterp.pyjitpl import MetaInterp
@@ -241,7 +241,7 @@
self.disable_noninlinable_function(metainterp)
raise
else:
- if not confirm_enter_jit(*greenargs):
+ if not confirm_enter_jit(*args):
return
# machine code was already compiled for these greenargs
# get the assembler and fill in the boxes
@@ -491,13 +491,13 @@
#
confirm_enter_jit_ptr = self.warmrunnerdesc.confirm_enter_jit_ptr
if confirm_enter_jit_ptr is None:
- def confirm_enter_jit(*greenargs):
+ def confirm_enter_jit(*args):
return True
else:
rtyper = self.warmrunnerdesc.rtyper
#
- def confirm_enter_jit(*greenargs):
+ def confirm_enter_jit(*args):
fn = support.maybe_on_top_of_llinterp(rtyper,
confirm_enter_jit_ptr)
- return fn(*greenargs)
+ return fn(*args)
self.confirm_enter_jit = confirm_enter_jit
Modified: pypy/branch/jit-trace/pypy/module/pypyjit/interp_jit.py
==============================================================================
--- pypy/branch/jit-trace/pypy/module/pypyjit/interp_jit.py (original)
+++ pypy/branch/jit-trace/pypy/module/pypyjit/interp_jit.py Mon Jan 4 22:22:55 2010
@@ -41,6 +41,11 @@
def set_jitcell_at(newcell, next_instr, bytecode):
bytecode.jit_cells[next_instr] = newcell
+def confirm_enter_jit(next_instr, bytecode, frame, ec):
+ return (frame.w_f_trace is None and
+ ec.profilefunc is None and
+ ec.w_tracefunc is None)
+
class PyPyJitDriver(JitDriver):
reds = ['frame', 'ec']
@@ -58,7 +63,8 @@
pypyjitdriver = PyPyJitDriver(can_inline = can_inline,
get_printable_location = get_printable_location,
get_jitcell_at = get_jitcell_at,
- set_jitcell_at = set_jitcell_at)
+ set_jitcell_at = set_jitcell_at,
+ confirm_enter_jit = confirm_enter_jit)
class __extend__(PyFrame):
More information about the Pypy-commit
mailing list