* gcc.dg/vect/vect-nop-move.c (foo32x2_be): Call
authoruros <uros@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 15 Dec 2013 18:40:50 +0000 (18:40 +0000)
committeruros <uros@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 15 Dec 2013 18:40:50 +0000 (18:40 +0000)
__builtin_ia32_emms for 32bit x86 targets.
(foo32x2_le): Ditto.
(main): Reorder function calls.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@206002 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/vect/vect-nop-move.c

index b196e80..a04e662 100644 (file)
@@ -1,5 +1,12 @@
 2013-12-15  Uros Bizjak  <ubizjak@gmail.com>
 
+       * gcc.dg/vect/vect-nop-move.c (foo32x2_be): Call
+       __builtin_ia32_emms for 32bit x86 targets.
+       (foo32x2_le): Ditto.
+       (main): Reorder function calls.
+
+2013-12-15  Uros Bizjak  <ubizjak@gmail.com>
+
        * gcc.target/i386/pr57756.c (dg-options): Add -mno-sse3.
 
 2013-12-15  Uros Bizjak  <ubizjak@gmail.com>
index 92614c6..6e82c34 100644 (file)
@@ -30,12 +30,21 @@ bar (float a)
 NOINLINE float
 foo32x2_be (float32x2_t x)
 {
+#ifdef __i386__
+  /* ix86 passes float32x2 vector arguments in mmx registers.  We need to
+     emit emms to empty MMS state and reenable x87 stack before float value
+     can be loaded to and passed in x87 floating-point return register.  */
+  __builtin_ia32_emms ();
+#endif
   return bar (x[1]);
 }
 
 NOINLINE float
 foo32x2_le (float32x2_t x)
 {
+#ifdef __i386__
+  __builtin_ia32_emms ();
+#endif
   return bar (x[0]);
 }
 
@@ -45,16 +54,16 @@ main()
   float32x4_t a = { 0.0f, 1.0f, 2.0f, 3.0f };
   float32x2_t b = { 0.0f, 1.0f };
 
-  if (foo32x4_be (a) != 3.0f)
+  if (foo32x2_be (b) != 1.0f)
     abort ();
 
-  if (foo32x4_le (a) != 0.0f)
+  if (foo32x2_le (b) != 0.0f)
     abort ();
 
-  if (foo32x2_be (b) != 1.0f)
+  if (foo32x4_be (a) != 3.0f)
     abort ();
 
-  if (foo32x2_le (b) != 0.0f)
+  if (foo32x4_le (a) != 0.0f)
     abort ();
 
   return 0;