[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