[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