[pypy-svn] pypy arm-backend-2: support refs as imm values in failargs

bivab commits-noreply at bitbucket.org
Wed Feb 2 13:50:29 CET 2011


Author: David Schneider <david.schneider at picle.org>
Branch: arm-backend-2
Changeset: r41554:2a82d42e0a77
Date: 2011-01-30 15:47 +0100
http://bitbucket.org/pypy/pypy/changeset/2a82d42e0a77/

Log:	support refs as imm values in failargs

diff --git a/pypy/jit/backend/arm/assembler.py b/pypy/jit/backend/arm/assembler.py
--- a/pypy/jit/backend/arm/assembler.py
+++ b/pypy/jit/backend/arm/assembler.py
@@ -128,7 +128,7 @@
             i += 1
             res = enc[i]
             if res == self.IMM_LOC:
-                assert group == self.INT_TYPE
+                assert group == self.INT_TYPE or group == self.REF_TYPE
                 # imm value
                 value = self.decode32(enc, i+1)
                 i += 4

diff --git a/pypy/jit/backend/arm/test/test_trace_operations.py b/pypy/jit/backend/arm/test/test_trace_operations.py
new file mode 100644
--- /dev/null
+++ b/pypy/jit/backend/arm/test/test_trace_operations.py
@@ -0,0 +1,39 @@
+from pypy.jit.backend.x86.test.test_regalloc import BaseTestRegalloc
+from pypy.jit.backend.detect_cpu import getcpuclass
+from pypy.rpython.lltypesystem import lltype, llmemory
+CPU = getcpuclass()
+
+class TestConstPtr(BaseTestRegalloc):
+
+    cpu = CPU(None, None)
+    #cpu.gc_ll_descr = MockGcDescr(False)
+    cpu.setup_once()
+
+    S = lltype.GcForwardReference()
+    S.become(lltype.GcStruct('S', ('field', lltype.Ptr(S)),
+                             ('int', lltype.Signed)))
+
+    fielddescr = cpu.fielddescrof(S, 'field')
+
+    struct_ptr = lltype.malloc(S)
+    struct_ref = lltype.cast_opaque_ptr(llmemory.GCREF, struct_ptr)
+    #child_ptr = lltype.nullptr(S)
+    #struct_ptr.field = child_ptr
+
+
+    #descr0 = cpu.fielddescrof(S, 'int')
+    ptr0 = struct_ref
+
+    namespace = locals().copy()
+
+    def test_finish_failargs_constptr(self):
+        ops = '''
+        [i0]
+        i1 = int_add(i0, 1)
+        finish(i1, ConstPtr(ptr0))
+        '''
+        self.interpret(ops, [99])
+        assert self.getint(0) == 100
+        ptr = self.cpu.get_latest_value_ref(1)
+        assert self.ptr0 == ptr
+


More information about the Pypy-commit mailing list