[pypy-commit] pypy default: add tests for vldm and vstm
bivab
noreply at buildbot.pypy.org
Thu May 2 14:23:44 CEST 2013
Author: David Schneider <david.schneider at picle.org>
Branch:
Changeset: r63799:8cc8ee5b0f01
Date: 2013-05-02 14:17 +0200
http://bitbucket.org/pypy/pypy/changeset/8cc8ee5b0f01/
Log: add tests for vldm and vstm
diff --git a/rpython/jit/backend/arm/test/test_assembler.py b/rpython/jit/backend/arm/test/test_assembler.py
--- a/rpython/jit/backend/arm/test/test_assembler.py
+++ b/rpython/jit/backend/arm/test/test_assembler.py
@@ -6,6 +6,7 @@
from rpython.jit.backend.arm.test.support import run_asm
from rpython.jit.backend.detect_cpu import getcpuclass
from rpython.jit.metainterp.resoperation import rop
+from rpython.jit.codewriter import longlong
from rpython.rtyper.annlowlevel import llhelper
from rpython.rtyper.lltypesystem import lltype, rffi
@@ -273,12 +274,50 @@
self.a.mc.gen_load_int(r.ip.value, rffi.cast(lltype.Signed, container))
self.a.mc.LDM(r.ip.value, [x for x in range(10)])
for x in range(1, 10):
- self.a.mc.ADD_ri(0, 0, x)
+ self.a.mc.ADD_rr(0, 0, x)
self.a.gen_func_epilog()
- res = run_asm(self.a)
+ res = run_asm(self.a)
assert res == sum(range(10))
lltype.free(container, flavor='raw')
+ def test_vstm(self):
+ n = 14
+ source_container = lltype.malloc(lltype.Array(longlong.FLOATSTORAGE,
+ hints={'nolength': True}), n, flavor='raw')
+ target_container = lltype.malloc(lltype.Array(longlong.FLOATSTORAGE,
+ hints={'nolength': True}), n, flavor='raw')
+ for x in range(n):
+ source_container[x] = longlong.getfloatstorage(float("%d.%d" % (x,x)))
+ self.a.gen_func_prolog()
+ for x in range(n):
+ self.a.mc.ADD_ri(r.ip.value, r.ip.value, 8)
+ self.a.mc.VLDR(n, r.ip.value)
+ self.a.mc.gen_load_int(r.ip.value, rffi.cast(lltype.Signed, target_container))
+ self.a.mc.VSTM(r.ip.value, [x for x in range(n)])
+ self.a.gen_func_epilog()
+ run_asm(self.a)
+ for d in range(n):
+ res = longlong.getrealfloat(target_container[0]) == float("%d.%d" % (d,d))
+ lltype.free(source_container, flavor='raw')
+ lltype.free(target_container, flavor='raw')
+
+ def test_vldm(self):
+ n = 14
+ container = lltype.malloc(lltype.Array(longlong.FLOATSTORAGE,
+ hints={'nolength': True}), n, flavor='raw')
+ for x in range(n):
+ container[x] = longlong.getfloatstorage(float("%d.%d" % (x,x)))
+ self.a.gen_func_prolog()
+ self.a.mc.gen_load_int(r.ip.value, rffi.cast(lltype.Signed, container))
+ self.a.mc.VLDM(r.ip.value, [x for x in range(n)])
+ for x in range(1, n):
+ self.a.mc.VADD(0, 0, x)
+ self.a.mc.VSTR(r.d0.value, r.ip.value)
+ self.a.gen_func_epilog()
+ res = run_asm(self.a)
+ assert longlong.getrealfloat(container[0]) == sum([float("%d.%d" % (d,d)) for d in range(n)])
+ lltype.free(container, flavor='raw')
+
def callme(inp):
i = inp + 10
return i
More information about the pypy-commit
mailing list