[pypy-svn] pypy 32ptr-on-64bit: Start support on the JIT. Either I messed something up or
arigo
commits-noreply at bitbucket.org
Tue Apr 12 22:19:45 CEST 2011
Author: Armin Rigo <arigo at tunes.org>
Branch: 32ptr-on-64bit
Changeset: r43315:867c75fc3389
Date: 2011-04-12 12:50 -0700
http://bitbucket.org/pypy/pypy/changeset/867c75fc3389/
Log: Start support on the JIT. Either I messed something up or it works
so far out of the box with the untranslated llgraph backend.
diff --git a/pypy/jit/codewriter/jtransform.py b/pypy/jit/codewriter/jtransform.py
--- a/pypy/jit/codewriter/jtransform.py
+++ b/pypy/jit/codewriter/jtransform.py
@@ -208,6 +208,8 @@
def rewrite_op_cast_int_to_uint(self, op): pass
def rewrite_op_cast_uint_to_int(self, op): pass
def rewrite_op_resume_point(self, op): pass
+ def rewrite_op_show_from_ptr32(self, op): pass
+ def rewrite_op_hide_into_ptr32(self, op): pass
def _rewrite_symmetric(self, op):
"""Rewrite 'c1+v2' into 'v2+c1' in an attempt to avoid generating
diff --git a/pypy/jit/metainterp/test/test_rcompressed.py b/pypy/jit/metainterp/test/test_rcompressed.py
new file mode 100644
--- /dev/null
+++ b/pypy/jit/metainterp/test/test_rcompressed.py
@@ -0,0 +1,50 @@
+import py
+from pypy.config.translationoption import IS_64_BITS
+from pypy.jit.metainterp.test.support import LLJitMixin
+from pypy.rpython.lltypesystem import lltype, llmemory
+from pypy.rpython.lltypesystem.lloperation import llop
+from pypy.rlib import jit
+
+
+class TestRCompressed(LLJitMixin):
+
+ def setup_class(cls):
+ if not IS_64_BITS:
+ py.test.skip("only for 64-bits")
+
+ def test_simple(self):
+ S = lltype.GcStruct('S', ('n', lltype.Signed))
+ SPTR = lltype.Ptr(S)
+ @jit.dont_look_inside
+ def escape(p):
+ assert lltype.typeOf(p) == llmemory.HiddenGcRef32
+ return p
+ def f(n):
+ y = lltype.malloc(S)
+ y.n = n
+ p = llop.hide_into_ptr32(llmemory.HiddenGcRef32, y)
+ p = escape(p)
+ z = llop.show_from_ptr32(SPTR, p)
+ return z.n
+ res = self.interp_operations(f, [42])
+ assert res == 42
+
+ def test_store_load(self):
+ S = lltype.GcStruct('S', ('n', lltype.Signed))
+ T = lltype.GcStruct('T', ('p', llmemory.HiddenGcRef32),
+ ('c', lltype.Char))
+ SPTR = lltype.Ptr(S)
+ @jit.dont_look_inside
+ def escape(p):
+ return p
+ def f(n):
+ y = lltype.malloc(S)
+ y.n = n
+ t = lltype.malloc(T)
+ t.c = '?'
+ t.p = llop.hide_into_ptr32(llmemory.HiddenGcRef32, y)
+ t = escape(t)
+ z = llop.show_from_ptr32(SPTR, t.p)
+ return z.n * 1000 + ord(t.c)
+ res = self.interp_operations(f, [42])
+ assert res == 42063
diff --git a/pypy/jit/codewriter/test/test_jtransform.py b/pypy/jit/codewriter/test/test_jtransform.py
--- a/pypy/jit/codewriter/test/test_jtransform.py
+++ b/pypy/jit/codewriter/test/test_jtransform.py
@@ -779,6 +779,16 @@
assert op1.args == [v1, ('fielddescr', S, 'x')]
assert op1.result == v2
+def test_getfield_hiddengcref32_gives_r():
+ S = lltype.GcStruct('S', ('p', llmemory.HiddenGcRef32))
+ v1 = varoftype(lltype.Ptr(S))
+ v2 = varoftype(llmemory.HiddenGcRef32)
+ op = SpaceOperation('getfield', [v1, Constant('p', lltype.Void)], v2)
+ op1 = Transformer(FakeCPU()).rewrite_operation(op)
+ assert op1.opname == 'getfield_gc_r' # it gives directly an 'r'
+ assert op1.args == [v1, ('fielddescr', S, 'p')]
+ assert op1.result == v2
+
def test_int_abs():
v1 = varoftype(lltype.Signed)
v2 = varoftype(lltype.Signed)
More information about the Pypy-commit
mailing list