[pypy-svn] r75319 - pypy/branch/multijit-4/pypy/jit/metainterp
arigo at codespeak.net
arigo at codespeak.net
Sat Jun 12 12:02:55 CEST 2010
Author: arigo
Date: Sat Jun 12 12:02:54 2010
New Revision: 75319
Modified:
pypy/branch/multijit-4/pypy/jit/metainterp/compile.py
pypy/branch/multijit-4/pypy/jit/metainterp/history.py
pypy/branch/multijit-4/pypy/jit/metainterp/jitdriver.py
pypy/branch/multijit-4/pypy/jit/metainterp/warmspot.py
Log:
Fix the front-end.
Modified: pypy/branch/multijit-4/pypy/jit/metainterp/compile.py
==============================================================================
--- pypy/branch/multijit-4/pypy/jit/metainterp/compile.py (original)
+++ pypy/branch/multijit-4/pypy/jit/metainterp/compile.py Sat Jun 12 12:02:54 2010
@@ -39,9 +39,10 @@
name = metainterp.staticdata.stats.name_for_new_loop()
return TreeLoop(name)
-def make_loop_token(nb_args):
+def make_loop_token(nb_args, jitdriver_sd):
loop_token = LoopToken()
loop_token.specnodes = [prebuiltNotSpecNode] * nb_args
+ loop_token.outermost_jitdriver_sd = jitdriver_sd
return loop_token
# ____________________________________________________________
@@ -64,7 +65,7 @@
loop.operations = [op.clone() for op in ops]
metainterp_sd = metainterp.staticdata
jitdriver_sd = metainterp.jitdriver_sd
- loop_token = make_loop_token(len(loop.inputargs))
+ loop_token = make_loop_token(len(loop.inputargs), jitdriver_sd)
loop.token = loop_token
loop.operations[-1].descr = loop_token # patch the target of the JUMP
try:
@@ -472,7 +473,7 @@
metainterp_sd = metainterp.staticdata
jitdriver_sd = metainterp.jitdriver_sd
metainterp.history.inputargs = self.redkey
- new_loop_token = make_loop_token(len(self.redkey))
+ new_loop_token = make_loop_token(len(self.redkey), jitdriver_sd)
new_loop.greenkey = self.original_greenkey
new_loop.inputargs = self.redkey
new_loop.token = new_loop_token
Modified: pypy/branch/multijit-4/pypy/jit/metainterp/history.py
==============================================================================
--- pypy/branch/multijit-4/pypy/jit/metainterp/history.py (original)
+++ pypy/branch/multijit-4/pypy/jit/metainterp/history.py Sat Jun 12 12:02:54 2010
@@ -694,6 +694,7 @@
generated assembler.
"""
terminating = False # see TerminatingLoopToken in compile.py
+ outermost_jitdriver_sd = None
# specnodes = ...
# and more data specified by the backend when the loop is compiled
number = 0
Modified: pypy/branch/multijit-4/pypy/jit/metainterp/jitdriver.py
==============================================================================
--- pypy/branch/multijit-4/pypy/jit/metainterp/jitdriver.py (original)
+++ pypy/branch/multijit-4/pypy/jit/metainterp/jitdriver.py Sat Jun 12 12:02:54 2010
@@ -14,6 +14,11 @@
# self.index ... pypy.jit.codewriter.call
# self.mainjitcode ... pypy.jit.codewriter.call
+ # These attributes are read by the backend in CALL_ASSEMBLER:
+ # self.assembler_helper_adr
+ # self.index_of_virtualizable
+ # self.vable_token_descr
+
# warmspot sets extra attributes starting with '_' for its own use.
def _freeze_(self):
Modified: pypy/branch/multijit-4/pypy/jit/metainterp/warmspot.py
==============================================================================
--- pypy/branch/multijit-4/pypy/jit/metainterp/warmspot.py (original)
+++ pypy/branch/multijit-4/pypy/jit/metainterp/warmspot.py Sat Jun 12 12:02:54 2010
@@ -613,14 +613,12 @@
def assembler_call_helper(failindex, virtualizableref):
fail_descr = self.cpu.get_fail_descr_from_number(failindex)
while True:
+ if vinfo is not None:
+ virtualizable = lltype.cast_opaque_ptr(
+ vinfo.VTYPEPTR, virtualizableref)
+ vinfo.reset_vable_token(virtualizable)
try:
- if vinfo is not None:
- virtualizable = lltype.cast_opaque_ptr(
- vinfo.VTYPEPTR, virtualizableref)
- vinfo.reset_vable_token(virtualizable)
- XXX # careful here, we must pass the correct jitdriver_sd
- loop_token = fail_descr.handle_fail(self.metainterp_sd)
- fail_descr = self.cpu.execute_token(loop_token)
+ loop_token = fail_descr.handle_fail(self.metainterp_sd, jd)
except self.ContinueRunningNormally, e:
args = ()
for ARGTYPE, attrname, count in portalfunc_ARGS:
@@ -647,21 +645,21 @@
else:
value = cast_base_ptr_to_instance(Exception, value)
raise Exception, value
+ fail_descr = self.cpu.execute_token(loop_token)
jd._assembler_call_helper = assembler_call_helper # for debugging
- # XXX rewrite me, ugly sticking does not work any more
- self.cpu.assembler_helper_ptr = self.helper_func(
+ jd._assembler_helper_ptr = self.helper_func(
jd._PTR_ASSEMBLER_HELPER_FUNCTYPE,
assembler_call_helper)
- # XXX a bit ugly sticking
+ jd.assembler_helper_adr = llmemory.cast_ptr_to_adr(
+ jd._assembler_helper_ptr)
if vinfo is not None:
- XXX # rewrite me, ugly sticking does not work any more
- self.cpu.index_of_virtualizable = (vinfo.index_of_virtualizable -
- self.num_green_args)
- self.cpu.vable_token_descr = vinfo.vable_token_descr
+ jd.index_of_virtualizable = (vinfo.index_of_virtualizable -
+ self.num_green_args)
+ jd.vable_token_descr = vinfo.vable_token_descr
else:
- self.cpu.index_of_virtualizable = -1
- self.cpu.vable_token_descr = None
+ jd.index_of_virtualizable = -1
+ jd.vable_token_descr = None
# ____________________________________________________________
# Now mutate origportalgraph to end with a call to portal_runner_ptr
More information about the Pypy-commit
mailing list