[pypy-svn] pypy 32ptr-on-64bit: Passing tests for rewrite_assembler.

arigo commits-noreply at bitbucket.org
Sun Apr 17 11:50:40 CEST 2011


Author: Armin Rigo <arigo at tunes.org>
Branch: 32ptr-on-64bit
Changeset: r43426:6dde296107bb
Date: 2011-04-17 02:44 -0700
http://bitbucket.org/pypy/pypy/changeset/6dde296107bb/

Log:	Passing tests for rewrite_assembler.

diff --git a/pypy/jit/backend/llsupport/test/test_gc.py b/pypy/jit/backend/llsupport/test/test_gc.py
--- a/pypy/jit/backend/llsupport/test/test_gc.py
+++ b/pypy/jit/backend/llsupport/test/test_gc.py
@@ -298,6 +298,7 @@
                 gcrootfinder = 'asmgcc'
                 gctransformer = 'framework'
                 gcremovetypeptr = False
+                compressptr = True
         class FakeTranslator(object):
             config = config_
         class FakeCPU(object):
@@ -305,6 +306,9 @@
                 ptr = llmemory.cast_adr_to_ptr(adr, gc_ll_descr.WB_FUNCPTR)
                 assert ptr._obj._callable == llop1._write_barrier_failing_case
                 return 42
+        class FakeWriteBarrierDescr(AbstractDescr):
+            def __eq__(self, other):
+                return 'WriteBarrierDescr' in repr(other)
         gcdescr = get_description(config_)
         translator = FakeTranslator()
         llop1 = FakeLLOp()
@@ -314,6 +318,7 @@
         self.llop1 = llop1
         self.gc_ll_descr = gc_ll_descr
         self.fake_cpu = FakeCPU()
+        self.writebarrierdescr = FakeWriteBarrierDescr()
 
     def test_args_for_new(self):
         S = lltype.GcStruct('S', ('x', lltype.Signed))
@@ -597,5 +602,111 @@
         self.gc_ll_descr.rewrite_assembler(self.fake_cpu, ops.operations)
         equaloplists(ops.operations, expected.operations)
 
+    def test_rewrite_assembler_hidden_getfield_gc(self):
+        S = lltype.GcStruct('S', ('x', llmemory.HiddenGcRef32))
+        xdescr = get_field_descr(self.gc_ll_descr, S, 'x')
+        ops = parse("""
+        [p0]
+        p1 = getfield_gc(p0, descr=xdescr)
+        jump()
+        """, namespace=locals())
+        expected = parse("""
+        [p0]
+        i1 = getfield_gc(p0, descr=xdescr)
+        p1 = show_from_ptr32(i1)
+        jump()
+        """, namespace=locals())
+        self.gc_ll_descr.rewrite_assembler(self.fake_cpu, ops.operations)
+        equaloplists(ops.operations, expected.operations)
+
+    def test_rewrite_assembler_hidden_getfield_gc_pure(self):
+        S = lltype.GcStruct('S', ('x', llmemory.HiddenGcRef32))
+        xdescr = get_field_descr(self.gc_ll_descr, S, 'x')
+        ops = parse("""
+        [p0]
+        p1 = getfield_gc_pure(p0, descr=xdescr)
+        jump()
+        """, namespace=locals())
+        expected = parse("""
+        [p0]
+        i1 = getfield_gc_pure(p0, descr=xdescr)
+        p1 = show_from_ptr32(i1)
+        jump()
+        """, namespace=locals())
+        self.gc_ll_descr.rewrite_assembler(self.fake_cpu, ops.operations)
+        equaloplists(ops.operations, expected.operations)
+
+    def test_rewrite_assembler_hidden_setfield_gc(self):
+        S = lltype.GcStruct('S', ('x', llmemory.HiddenGcRef32))
+        xdescr = get_field_descr(self.gc_ll_descr, S, 'x')
+        writebarrierdescr = self.writebarrierdescr
+        ops = parse("""
+        [p0, p1]
+        setfield_gc(p0, p1, descr=xdescr)
+        jump()
+        """, namespace=locals())
+        expected = parse("""
+        [p0, p1]
+        cond_call_gc_wb(p0, p1, descr=writebarrierdescr)
+        i1 = hide_into_ptr32(p1)
+        setfield_raw(p0, i1, descr=xdescr)
+        jump()
+        """, namespace=locals())
+        self.gc_ll_descr.rewrite_assembler(self.fake_cpu, ops.operations)
+        equaloplists(ops.operations, expected.operations)
+
+    def test_rewrite_assembler_hidden_getarrayitem_gc(self):
+        A = lltype.GcArray(llmemory.HiddenGcRef32)
+        xdescr = get_array_descr(self.gc_ll_descr, A)
+        ops = parse("""
+        [p0, i2]
+        p1 = getarrayitem_gc(p0, i2, descr=xdescr)
+        jump()
+        """, namespace=locals())
+        expected = parse("""
+        [p0, i2]
+        i1 = getarrayitem_gc(p0, i2, descr=xdescr)
+        p1 = show_from_ptr32(i1)
+        jump()
+        """, namespace=locals())
+        self.gc_ll_descr.rewrite_assembler(self.fake_cpu, ops.operations)
+        equaloplists(ops.operations, expected.operations)
+
+    def test_rewrite_assembler_hidden_getarrayitem_gc_pure(self):
+        A = lltype.GcArray(llmemory.HiddenGcRef32)
+        xdescr = get_array_descr(self.gc_ll_descr, A)
+        ops = parse("""
+        [p0, i2]
+        p1 = getarrayitem_gc_pure(p0, i2, descr=xdescr)
+        jump()
+        """, namespace=locals())
+        expected = parse("""
+        [p0, i2]
+        i1 = getarrayitem_gc_pure(p0, i2, descr=xdescr)
+        p1 = show_from_ptr32(i1)
+        jump()
+        """, namespace=locals())
+        self.gc_ll_descr.rewrite_assembler(self.fake_cpu, ops.operations)
+        equaloplists(ops.operations, expected.operations)
+
+    def test_rewrite_assembler_hidden_setarrayitem_gc(self):
+        A = lltype.GcArray(llmemory.HiddenGcRef32)
+        xdescr = get_array_descr(self.gc_ll_descr, A)
+        writebarrierdescr = self.writebarrierdescr
+        ops = parse("""
+        [p0, p1, i2]
+        setarrayitem_gc(p0, i2, p1, descr=xdescr)
+        jump()
+        """, namespace=locals())
+        expected = parse("""
+        [p0, p1, i2]
+        cond_call_gc_wb(p0, p1, descr=writebarrierdescr)
+        i1 = hide_into_ptr32(p1)
+        setarrayitem_raw(p0, i2, i1, descr=xdescr)
+        jump()
+        """, namespace=locals())
+        self.gc_ll_descr.rewrite_assembler(self.fake_cpu, ops.operations)
+        equaloplists(ops.operations, expected.operations)
+
 class TestFrameworkMiniMark(TestFramework):
     gc = 'minimark'


More information about the Pypy-commit mailing list