[pypy-svn] pypy 32ptr-on-64bit: merge heads
arigo
commits-noreply at bitbucket.org
Sun Apr 17 11:49:58 CEST 2011
Author: Armin Rigo <arigo at tunes.org>
Branch: 32ptr-on-64bit
Changeset: r43425:023210fffbc7
Date: 2011-04-17 11:32 +0200
http://bitbucket.org/pypy/pypy/changeset/023210fffbc7/
Log: merge heads
diff --git a/pypy/jit/metainterp/test/test_rcompressed.py b/pypy/jit/metainterp/test/test_rcompressed.py
--- a/pypy/jit/metainterp/test/test_rcompressed.py
+++ b/pypy/jit/metainterp/test/test_rcompressed.py
@@ -4,6 +4,7 @@
from pypy.rpython.lltypesystem import lltype, llmemory
from pypy.rpython.lltypesystem.lloperation import llop
from pypy.rlib import jit
+from pypy.rlib.jit import JitDriver
class TestRCompressed(LLJitMixin):
@@ -45,6 +46,9 @@
res = self.interp_operations(f, [42])
assert res == 42063
+ def test_store_load_array(self):
+ py.test.skip("write me")
+
def test_call_argument(self):
# the issue here is that even if we wrote this test, for now, it's
# not going to really test the interesting parts, which are in
@@ -53,3 +57,28 @@
def test_call_result(self):
py.test.skip("write me")
+
+ def test_jit_merge_point(self):
+ jitdriver = JitDriver(greens=[], reds=['total', 'a'])
+ S = lltype.GcStruct('S', ('n', lltype.Signed))
+ def main(n):
+ a = f(n)
+ s = llop.show_from_ptr32(lltype.Ptr(S), a)
+ return s.n
+ def f(n):
+ s = lltype.malloc(S)
+ s.n = n
+ total = 0
+ while s.n > 0:
+ a = llop.hide_into_ptr32(llmemory.HiddenGcRef32, s)
+ jitdriver.jit_merge_point(a=a, total=total)
+ s = llop.show_from_ptr32(lltype.Ptr(S), a)
+ n = s.n
+ total += n
+ s = lltype.malloc(S)
+ s.n = n - 1
+ s = lltype.malloc(S)
+ s.n = total
+ return llop.hide_into_ptr32(llmemory.HiddenGcRef32, s)
+ res = self.meta_interp(main, [8])
+ assert res == 36
diff --git a/pypy/jit/metainterp/warmstate.py b/pypy/jit/metainterp/warmstate.py
--- a/pypy/jit/metainterp/warmstate.py
+++ b/pypy/jit/metainterp/warmstate.py
@@ -1,5 +1,6 @@
import sys, weakref
from pypy.rpython.lltypesystem import lltype, llmemory, rstr, rffi
+from pypy.rpython.lltypesystem.lloperation import llop
from pypy.rpython.ootypesystem import ootype
from pypy.rpython.annlowlevel import hlstr, llstr, cast_base_ptr_to_instance
from pypy.rpython.annlowlevel import cast_object_to_ptr
@@ -30,21 +31,26 @@
elif INPUT is longlong.FLOATSTORAGE:
assert TYPE is lltype.Float
return longlong.getrealfloat(x)
+ elif TYPE == llmemory.HiddenGcRef32:
+ return llop.hide_into_ptr32(llmemory.HiddenGcRef32, x)
else:
return lltype.cast_opaque_ptr(TYPE, x)
@specialize.ll()
def unspecialize_value(value):
"""Casts 'value' to a Signed, a GCREF or a FLOATSTORAGE."""
- if isinstance(lltype.typeOf(value), lltype.Ptr):
- if lltype.typeOf(value).TO._gckind == 'gc':
+ TYPE = lltype.typeOf(value)
+ if isinstance(TYPE, lltype.Ptr):
+ if TYPE.TO._gckind == 'gc':
+ if TYPE == llmemory.HiddenGcRef32:
+ return llop.show_from_ptr32(llmemory.GCREF, value)
return lltype.cast_opaque_ptr(llmemory.GCREF, value)
else:
adr = llmemory.cast_ptr_to_adr(value)
return heaptracker.adr2int(adr)
- elif isinstance(lltype.typeOf(value), ootype.OOType):
+ elif isinstance(TYPE, ootype.OOType):
return ootype.cast_to_object(value)
- elif isinstance(value, float):
+ elif TYPE == lltype.Float:
return longlong.getfloatstorage(value)
else:
return lltype.cast_primitive(lltype.Signed, value)
More information about the Pypy-commit
mailing list