Module: xenomai-2.6
Branch: master
Commit: e3ee144e2395ae0baad532be2aa4dead80e29e4f
URL:    
http://git.xenomai.org/?p=xenomai-2.6.git;a=commit;h=e3ee144e2395ae0baad532be2aa4dead80e29e4f

Author: Gilles Chanteperdrix <gilles.chanteperd...@xenomai.org>
Date:   Wed Jul  6 19:01:05 2016 +0200

x86/fptest: do not use the same value for all the registers

---

 include/asm-x86/fptest.h |   77 +++++++++++++++++++++++++++-------------------
 1 file changed, 46 insertions(+), 31 deletions(-)

diff --git a/include/asm-x86/fptest.h b/include/asm-x86/fptest.h
index 070a683..c3d620c 100644
--- a/include/asm-x86/fptest.h
+++ b/include/asm-x86/fptest.h
@@ -109,38 +109,51 @@ static void fp_features_init(void)
 
 static inline void fp_regs_set(unsigned val)
 {
-       uint64_t vec[4] = { val, 0, val, 0 };
+       uint64_t vec[8][4];
        unsigned i;
 
-       for (i = 0; i < 8; i++)
+       for (i = 0; i < 8; i++) {
                __asm__ __volatile__("fildl %0": /* no output */ :"m"(val));
+               val++;
+       }
+       for (i = 0; i < 8; i++) {
+               vec[i][0] = val++;
+               vec[i][2] = val++;
+       }
        if (cpu_has_avx)
                __asm__ __volatile__(
                        "vmovupd %0,%%ymm0;"
-                       "vmovupd %0,%%ymm1;"
-                       "vmovupd %0,%%ymm2;"
-                       "vmovupd %0,%%ymm3;"
-                       "vmovupd %0,%%ymm4;"
-                       "vmovupd %0,%%ymm5;"
-                       "vmovupd %0,%%ymm6;"
-                       "vmovupd %0,%%ymm7;"
-                       : : "m" (vec[0]));
+                       "vmovupd %1,%%ymm1;"
+                       "vmovupd %2,%%ymm2;"
+                       "vmovupd %3,%%ymm3;"
+                       "vmovupd %4,%%ymm4;"
+                       "vmovupd %5,%%ymm5;"
+                       "vmovupd %6,%%ymm6;"
+                       "vmovupd %7,%%ymm7;"
+                       : : "m" (vec[0][0]), "m" (vec[1][0]),
+                         "m" (vec[2][0]), "m" (vec[3][0]),
+                         "m" (vec[4][0]), "m" (vec[5][0]),
+                         "m" (vec[6][0]), "m" (vec[7][0]));
        else if (cpu_has_xmm2)
                __asm__ __volatile__(
                        "movupd %0,%%xmm0;"
-                       "movupd %0,%%xmm1;"
-                       "movupd %0,%%xmm2;"
-                       "movupd %0,%%xmm3;"
-                       "movupd %0,%%xmm4;"
-                       "movupd %0,%%xmm5;"
-                       "movupd %0,%%xmm6;"
-                       "movupd %0,%%xmm7;"
-                       : : "m" (vec[0]));
+                       "movupd %1,%%xmm1;"
+                       "movupd %2,%%xmm2;"
+                       "movupd %3,%%xmm3;"
+                       "movupd %4,%%xmm4;"
+                       "movupd %5,%%xmm5;"
+                       "movupd %6,%%xmm6;"
+                       "movupd %7,%%xmm7;"
+                       : : "m" (vec[0][0]), "m" (vec[1][0]),
+                         "m" (vec[2][0]), "m" (vec[3][0]),
+                         "m" (vec[4][0]), "m" (vec[5][0]),
+                         "m" (vec[6][0]), "m" (vec[7][0]));
 }
 
 static inline unsigned fp_regs_check(unsigned val)
 {
        unsigned i, result = val;
+       unsigned val_offset;
        uint64_t vec[8][4];
        unsigned e[8];
 
@@ -176,35 +189,37 @@ static inline unsigned fp_regs_check(unsigned val)
                          "=m" (vec[6][0]), "=m" (vec[7][0]));
        }
 
-       for (i = 0; i < 8; i++)
-               if (e[i] != val) {
-                       printk("r%d: %u != %u\n", i, e[i], val);
-                       result = e[i];
+       for (i = 0, val_offset = 0; i < 8; i++, val_offset++)
+               if (e[i] != val + val_offset) {
+                       printk("r%d: %u != %u\n", i, e[i], val + val_offset);
+                       result = e[i] - val_offset;
                }
 
        if (cpu_has_avx) {
                for (i = 0; i < 8; i++) {
                        int error = 0;
-                       if (vec[i][0] != val) {
-                               result = vec[i][0];
+                       if (vec[i][0] != val + val_offset) {
+                               result = vec[i][0] - val_offset;
                                error = 1;
                        }
-                       if (vec[i][2] != val) {
-                               result = vec[i][2];
+                       val_offset++;
+                       if (vec[i][2] != val + val_offset) {
+                               result = vec[i][2] - val_offset;
                                error = 1;
                        }
                        if (error)
                                printk("ymm%d: %llu/%llu != %u/%u\n",
                                       i, (unsigned long long)vec[i][0],
                                       (unsigned long long)vec[i][2],
-                                      val, val);
+                                      val + val_offset - 1, val + val_offset);
+                       val_offset++;
                }
        } else if (cpu_has_xmm2) {
-               for (i = 0; i < 8; i++)
-                       if (vec[i][0] != val) {
+               for (i = 0; i < 8; i++, val_offset += 2)
+                       if (vec[i][0] != val + val_offset) {
                                printk("xmm%d: %llu != %u\n",
-                                      i, (unsigned long long)vec[i][0], val);
-                               result = vec[i][0];
+                                      i, (unsigned long long)vec[i][0], val + 
val_offset);
+                               result = vec[i][0] - val_offset;
                        }
        }
 


_______________________________________________
Xenomai-git mailing list
Xenomai-git@xenomai.org
https://xenomai.org/mailman/listinfo/xenomai-git

Reply via email to