Author: David Schneider <[email protected]>
Branch: 
Changeset: r62609:7fe3b006e52e
Date: 2013-03-21 15:32 +0200
http://bitbucket.org/pypy/pypy/changeset/7fe3b006e52e/

Log:    update, finish and enable some calling convetion tests on arm

diff --git a/rpython/jit/backend/arm/test/test_calling_convention.py 
b/rpython/jit/backend/arm/test/test_calling_convention.py
--- a/rpython/jit/backend/arm/test/test_calling_convention.py
+++ b/rpython/jit/backend/arm/test/test_calling_convention.py
@@ -4,12 +4,23 @@
 from rpython.rtyper.lltypesystem import lltype
 from rpython.jit.codewriter.effectinfo import EffectInfo
 
+from rpython.jit.backend.arm.codebuilder import ARMv7Builder
+from rpython.jit.backend.arm import registers as r
 from rpython.jit.backend.arm.test.support import skip_unless_run_slow_tests
 skip_unless_run_slow_tests()
 
 class TestARMCallingConvention(CallingConvTests):
     # ../../test/calling_convention_test.py
 
+    def make_function_returning_stack_pointer(self):
+        mc = ARMv7Builder()
+       mc.MOV_rr(r.r0.value, r.sp.value)
+       mc.MOV_rr(r.pc.value, r.lr.value)
+        return mc.materialize(self.cpu.asmmemmgr, [])
+
+    def get_alignment_requirements(self):
+        return 8
+
     def test_call_argument_spilling(self):
         # bug when we have a value in r0, that is overwritten by an argument
         # and needed after the call, so that the register gets spilled after it
@@ -28,12 +39,24 @@
         ops = """
         [%s]
         i99 = call(ConstClass(func_ptr), 22, descr=calldescr)
-        finish(%s, i99)""" % (args, args)
+        force_spill(i0)
+        force_spill(i1)
+        force_spill(i2)
+        force_spill(i3)
+        force_spill(i4)
+        force_spill(i5)
+        force_spill(i6)
+        force_spill(i7)
+        force_spill(i8)
+        force_spill(i9)
+        force_spill(i10)
+        guard_true(i0) [%s, i99]
+        finish()""" % (args, args)
         loop = parse(ops, namespace=locals())
         looptoken = JitCellToken()
         self.cpu.compile_loop(loop.inputargs, loop.operations, looptoken)
         args = [x for x in range(11)]
-        self.cpu.execute_token(looptoken, *args)
+        deadframe = self.cpu.execute_token(looptoken, *args)
         for x in range(11):
-            assert self.cpu.get_latest_value_int(x) == x
-        assert self.cpu.get_latest_value_int(11) == 38
+            assert self.cpu.get_int_value(deadframe, x) == x
+        assert self.cpu.get_int_value(deadframe, 11) == 38
diff --git a/rpython/jit/backend/test/calling_convention_test.py 
b/rpython/jit/backend/test/calling_convention_test.py
--- a/rpython/jit/backend/test/calling_convention_test.py
+++ b/rpython/jit/backend/test/calling_convention_test.py
@@ -11,6 +11,7 @@
 from rpython.jit.backend.test.runner_test import Runner
 import py
 import sys
+import platform
 
 def boxfloat(x):
     return BoxFloat(longlong.getfloatstorage(x))
@@ -382,7 +383,8 @@
         raise NotImplementedError
 
     def test_call_aligned_explicit_check(self):
-        if sys.maxint == 2 ** 31 - 1:
+        if (not platform.machine().startswith('arm') and
+               sys.maxint == 2 ** 31 - 1): # XXX is still necessary on x86?
             py.test.skip("libffi on 32bit is broken")
         cpu = self.cpu
         if not cpu.supports_floats:
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to