summaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/testsuite/ChangeLog7
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-nop-move.c17
2 files changed, 20 insertions, 4 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index b196e8047a8..a04e6621e0c 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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>
diff --git a/gcc/testsuite/gcc.dg/vect/vect-nop-move.c b/gcc/testsuite/gcc.dg/vect/vect-nop-move.c
index 92614c6ad72..6e82c34fd52 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-nop-move.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-nop-move.c
@@ -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;