From: uros Date: Sun, 15 Dec 2013 18:40:50 +0000 (+0000) Subject: * gcc.dg/vect/vect-nop-move.c (foo32x2_be): Call X-Git-Tag: upstream/4.9.2~2249 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=bbc2e65d6c86e63b2029ae19aa80e2df7900ce5d;p=platform%2Fupstream%2Flinaro-gcc.git * gcc.dg/vect/vect-nop-move.c (foo32x2_be): Call __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 --- diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b196e80..a04e662 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,12 @@ 2013-12-15 Uros Bizjak + * 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 + * gcc.target/i386/pr57756.c (dg-options): Add -mno-sse3. 2013-12-15 Uros Bizjak diff --git a/gcc/testsuite/gcc.dg/vect/vect-nop-move.c b/gcc/testsuite/gcc.dg/vect/vect-nop-move.c index 92614c6..6e82c34 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;