Author: Maciej Fijalkowski <[email protected]>
Branch: continulet-jit-3
Changeset: r58245:6c873fb3754b
Date: 2012-10-19 17:03 +0200
http://bitbucket.org/pypy/pypy/changeset/6c873fb3754b/

Log:    (arigo, fijal) Fix. Armin says "the x86 backend will require hacks
        straight from the 80s"

diff --git a/pypy/jit/backend/llgraph/runner.py 
b/pypy/jit/backend/llgraph/runner.py
--- a/pypy/jit/backend/llgraph/runner.py
+++ b/pypy/jit/backend/llgraph/runner.py
@@ -217,7 +217,7 @@
             frame.finish_value = e.arg
             frame.latest_values = e.failargs
             frame.latest_descr = e.descr
-            frame._execution_finished = True
+            frame._execution_finished_normally = e.descr.fast_path_done
             return frame
         except GuardFailed, e:
             frame.latest_values = e.failargs
@@ -557,7 +557,7 @@
         return isinstance(other, LLFrame) and self is other
     
     _forced = False
-    _execution_finished = False
+    _execution_finished_normally = False
     finish_value = None
     
     def __init__(self, cpu, argboxes, args):
@@ -797,7 +797,7 @@
 
     def execute_call_assembler(self, descr, *args):
         frame = self.cpu._execute_token(descr, *args)
-        if frame._execution_finished:    # fast path
+        if frame._execution_finished_normally:    # fast path
             return frame.finish_value
         jd = descr.outermost_jitdriver_sd
         assembler_helper_ptr = jd.assembler_helper_adr.ptr  # fish
diff --git a/pypy/jit/metainterp/compile.py b/pypy/jit/metainterp/compile.py
--- a/pypy/jit/metainterp/compile.py
+++ b/pypy/jit/metainterp/compile.py
@@ -734,15 +734,19 @@
         metainterp_sd.stats.add_jitcell_token(jitcell_token)
 
 
-_DoneWithThisFrameDescr = ResumeGuardForcedDescr    # XXX replace me
+_DoneWithThisFrameDescr = ResumeGuardForcedDescr # XXX
 
 class DoneWithThisFrameDescrVoid(_DoneWithThisFrameDescr):
+    fast_path_done = True
+    
     def handle_fail(self, metainterp_sd, jitdriver_sd, jitframe):
         assert jitdriver_sd is self.jitdriver_sd
         assert jitdriver_sd.result_type == history.VOID
         raise metainterp_sd.DoneWithThisFrameVoid()
 
 class DoneWithThisFrameDescrInt(_DoneWithThisFrameDescr):
+    fast_path_done = True
+
     def handle_fail(self, metainterp_sd, jitdriver_sd, jitframe):
         assert jitdriver_sd is self.jitdriver_sd
         assert jitdriver_sd.result_type == history.INT
@@ -750,6 +754,8 @@
         raise metainterp_sd.DoneWithThisFrameInt(result)
 
 class DoneWithThisFrameDescrRef(_DoneWithThisFrameDescr):
+    fast_path_done = True
+
     def handle_fail(self, metainterp_sd, jitdriver_sd, jitframe):
         assert jitdriver_sd is self.jitdriver_sd
         assert jitdriver_sd.result_type == history.REF
@@ -758,6 +764,8 @@
         raise metainterp_sd.DoneWithThisFrameRef(cpu, result)
 
 class DoneWithThisFrameDescrFloat(_DoneWithThisFrameDescr):
+    fast_path_done = True
+
     def handle_fail(self, metainterp_sd, jitdriver_sd, jitframe):
         assert jitdriver_sd is self.jitdriver_sd
         assert jitdriver_sd.result_type == history.FLOAT
diff --git a/pypy/jit/metainterp/history.py b/pypy/jit/metainterp/history.py
--- a/pypy/jit/metainterp/history.py
+++ b/pypy/jit/metainterp/history.py
@@ -140,6 +140,8 @@
 class AbstractDescr(AbstractValue):
     __slots__ = ()
 
+    fast_path_done = False
+
     def repr_of_descr(self):
         return '%r' % (self,)
 
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to