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