[pypy-commit] pypy continulet-jit-3: Tweak the llgraph Frame class to pretend to be a JITFRAME.

arigo noreply at buildbot.pypy.org
Sat Sep 29 06:31:49 CEST 2012


Author: Armin Rigo <arigo at tunes.org>
Branch: continulet-jit-3
Changeset: r57652:f071c1066523
Date: 2012-09-29 06:15 +0200
http://bitbucket.org/pypy/pypy/changeset/f071c1066523/

Log:	Tweak the llgraph Frame class to pretend to be a JITFRAME.

diff --git a/pypy/jit/backend/llgraph/llimpl.py b/pypy/jit/backend/llgraph/llimpl.py
--- a/pypy/jit/backend/llgraph/llimpl.py
+++ b/pypy/jit/backend/llgraph/llimpl.py
@@ -16,7 +16,7 @@
 from pypy.rpython.llinterp import LLException
 from pypy.rpython.extregistry import ExtRegistryEntry
 
-from pypy.jit.metainterp import resoperation
+from pypy.jit.metainterp import resoperation, jitframe
 from pypy.jit.metainterp.resoperation import rop
 from pypy.jit.backend.llgraph import symbolic
 from pypy.jit.codewriter import longlong
@@ -36,7 +36,10 @@
 
 
 def _from_opaque(opq):
-    return opq._obj.externalobj
+    try:
+        return opq._obj.externalobj
+    except AttributeError:
+        return opq._obj.container
 
 _TO_OPAQUE = {}
 
@@ -44,8 +47,12 @@
     try:
         return value._the_opaque_pointer
     except AttributeError:
-        op = lltype.opaqueptr(_TO_OPAQUE[value.__class__], 'opaque',
-                              externalobj=value)
+        if isinstance(value, Frame):
+            op = lltype.opaqueptr(llmemory.GCREF.TO, 'frame',
+                                  container=value)
+        else:
+            op = lltype.opaqueptr(_TO_OPAQUE[value.__class__], 'opaque',
+                                  externalobj=value)
         value._the_opaque_pointer = op
         return op
 
@@ -473,6 +480,7 @@
 
 class Frame(object):
     OPHANDLERS = [None] * (rop._LAST+1)
+    _TYPE = jitframe.JITFRAMEPTR.TO
 
     def __init__(self, cpu):
         self.verbose = False
@@ -623,6 +631,9 @@
         count_jumps = _stats.exec_jumps
         log.trace('ran %d operations, %d jumps' % (count, count_jumps))
 
+    def _normalizedcontainer(self):
+        return self        # for lltype
+
     # ----------
 
     @classmethod
@@ -1849,11 +1860,11 @@
 
 
 COMPILEDLOOP = lltype.Ptr(lltype.OpaqueType("CompiledLoop"))
-FRAME = llmemory.GCREF
+FRAME = jitframe.JITFRAMEPTR
 #OOFRAME = lltype.Ptr(lltype.OpaqueType("OOFrame"))
 
 _TO_OPAQUE[CompiledLoop] = COMPILEDLOOP.TO
-_TO_OPAQUE[Frame] = FRAME.TO
+#_TO_OPAQUE[Frame] = FRAME.TO
 #_TO_OPAQUE[OOFrame] = OOFRAME.TO
 
 s_CompiledLoop = annmodel.SomePtr(COMPILEDLOOP)
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
@@ -587,7 +587,8 @@
         return lltype.malloc(LOOP_RUN_CONTAINER, 0)
 
     def force(self, frame):
-        fail_index = llimpl.force(frame)
+        opaqueframe = lltype.cast_opaque_ptr(llmemory.GCREF, frame)
+        fail_index = llimpl.force(opaqueframe)
         return self.get_fail_descr_from_number(fail_index)
 
 


More information about the pypy-commit mailing list