[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