[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