target-supports.exp (check_avx_hw_available): New procedure.
authorUros Bizjak <ubizjak@gmail.com>
Fri, 23 Jul 2010 11:33:19 +0000 (13:33 +0200)
committerUros Bizjak <uros@gcc.gnu.org>
Fri, 23 Jul 2010 11:33:19 +0000 (13:33 +0200)
* lib/target-supports.exp (check_avx_hw_available): New procedure.
(check_effective_target_avx_runtime): New procedure.
(check_effective_target_sse2_runtime): Add check_effective_target_sse2.
(check_effective_target_sse_runtime): Add check_effective_target_sse.

* gcc.dg/compat/pr38736_main.c: Use avx_runtime effective target.
* gcc.dg/compat/vector-1b_main.c: Ditto.  Remove cpuid.h include
and __get_cpuid test.
* gcc.dg/compat/vector-2b_main.c: Ditto.

* gcc.target/i386/avx-check.h (main): Also check bit_OSXSAVE.

* gcc.dg/20020418-1.c: Do not require sse2 effective target
for compile-time only test.
* gcc.dg/pr32716.c: Ditto.
* gcc.dg/pr34856.c: Ditto.
* gcc.dg/pr36997.c: Ditto.
* gcc.dg/prefetch-loop-arrays-1.c: Ditto.
* gfortran.dg/pr28158.f90: Ditto.
* gfortran.dg/pr30667.f: Ditto.

* gcc.dg/vect/vect.exp: Use check_effective_target_sse2_runtime for
i?86-*-* and x86_64-*-* targets to disable execution on targets
without sse2 runtime support.
* g++.dg/vect/vect.exp: Ditto.
* gfortran.dg/vect/vect.exp: Ditto.

* gcc.dg/pr36584.c: Remove now redundant sse2 effective target check.
* gcc.dg/pr37544.c: Ditto.
* gcc.dg/pr40550.c: Ditto.
* gcc.dg/compat/union-m128-1_main.c: Ditto.
* gcc.dg/compat/vector-1a_main.c: Ditto.
* gcc.dg/compat/vector-2a_main.c: Ditto.
* gcc.dg/torture/pr16104-1.c: Ditto.
* gcc.dg/torture/pr35771-1.c: Ditto.
* gcc.dg/torture/pr35771-2.c: Ditto.
* gcc.dg/torture/pr35771-3.c: Ditto.
* gcc.dg/torture/stackalign/alloca-2.c: Ditto.
* gcc.dg/torture/stackalign/alloca-3.c: Ditto.
* gcc.dg/torture/stackalign/push-1.c: Ditto.
* gcc.dg/torture/stackalign/vararg-3.c: Ditto.
* g++.dg/other/i386-1.C: Ditto.
* g++.dg/other/pr40446.C: Ditto.

From-SVN: r162456

32 files changed:
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/other/i386-1.C
gcc/testsuite/g++.dg/other/pr40446.C
gcc/testsuite/g++.dg/vect/vect.exp
gcc/testsuite/gcc.dg/20020418-1.c
gcc/testsuite/gcc.dg/compat/pr38736_main.c
gcc/testsuite/gcc.dg/compat/union-m128-1_main.c
gcc/testsuite/gcc.dg/compat/vector-1a_main.c
gcc/testsuite/gcc.dg/compat/vector-1b_main.c
gcc/testsuite/gcc.dg/compat/vector-2a_main.c
gcc/testsuite/gcc.dg/compat/vector-2b_main.c
gcc/testsuite/gcc.dg/pr32176.c
gcc/testsuite/gcc.dg/pr34856.c
gcc/testsuite/gcc.dg/pr36584.c
gcc/testsuite/gcc.dg/pr36997.c
gcc/testsuite/gcc.dg/pr37544.c
gcc/testsuite/gcc.dg/pr40550.c
gcc/testsuite/gcc.dg/prefetch-loop-arrays-1.c
gcc/testsuite/gcc.dg/torture/pr16104-1.c
gcc/testsuite/gcc.dg/torture/pr35771-1.c
gcc/testsuite/gcc.dg/torture/pr35771-2.c
gcc/testsuite/gcc.dg/torture/pr35771-3.c
gcc/testsuite/gcc.dg/torture/stackalign/alloca-2.c
gcc/testsuite/gcc.dg/torture/stackalign/alloca-3.c
gcc/testsuite/gcc.dg/torture/stackalign/push-1.c
gcc/testsuite/gcc.dg/torture/stackalign/vararg-3.c
gcc/testsuite/gcc.dg/vect/vect.exp
gcc/testsuite/gcc.target/i386/avx-check.h
gcc/testsuite/gfortran.dg/pr28158.f90
gcc/testsuite/gfortran.dg/pr30667.f
gcc/testsuite/gfortran.dg/vect/vect.exp
gcc/testsuite/lib/target-supports.exp

index 571426b5812a97e2608f281a5a029b970d73be01..6bc8dd20c38f8304d46ad26c915cbf75b5ea8fa4 100644 (file)
@@ -1,3 +1,49 @@
+2010-06-23  Uros Bizjak  <ubizjak@gmail.com>
+
+       * lib/target-supports.exp (check_avx_hw_available): New procedure.
+       (check_effective_target_avx_runtime): New procedure.
+       (check_effective_target_sse2_runtime): Add check_effective_target_sse2.
+       (check_effective_target_sse_runtime): Add check_effective_target_sse.
+
+       * gcc.dg/compat/pr38736_main.c: Use avx_runtime effective target.
+       * gcc.dg/compat/vector-1b_main.c: Ditto.  Remove cpuid.h include
+       and __get_cpuid test.
+       * gcc.dg/compat/vector-2b_main.c: Ditto.
+
+       * gcc.target/i386/avx-check.h (main): Also check bit_OSXSAVE.
+
+       * gcc.dg/20020418-1.c: Do not require sse2 effective target
+       for compile-time only test.
+       * gcc.dg/pr32716.c: Ditto.
+       * gcc.dg/pr34856.c: Ditto.
+       * gcc.dg/pr36997.c: Ditto.
+       * gcc.dg/prefetch-loop-arrays-1.c: Ditto.
+       * gfortran.dg/pr28158.f90: Ditto.
+       * gfortran.dg/pr30667.f: Ditto.
+
+       * gcc.dg/vect/vect.exp: Use check_effective_target_sse2_runtime for
+       i?86-*-* and x86_64-*-* targets to disable execution on targets
+       without sse2 runtime support.
+       * g++.dg/vect/vect.exp: Ditto.
+       * gfortran.dg/vect/vect.exp: Ditto.
+
+       * gcc.dg/pr36584.c: Remove now redundant sse2 effective target check.
+       * gcc.dg/pr37544.c: Ditto.
+       * gcc.dg/pr40550.c: Ditto.
+       * gcc.dg/compat/union-m128-1_main.c: Ditto.
+       * gcc.dg/compat/vector-1a_main.c: Ditto.
+       * gcc.dg/compat/vector-2a_main.c: Ditto.
+       * gcc.dg/torture/pr16104-1.c: Ditto.
+       * gcc.dg/torture/pr35771-1.c: Ditto.
+       * gcc.dg/torture/pr35771-2.c: Ditto.
+       * gcc.dg/torture/pr35771-3.c: Ditto.
+       * gcc.dg/torture/stackalign/alloca-2.c: Ditto.
+       * gcc.dg/torture/stackalign/alloca-3.c: Ditto.
+       * gcc.dg/torture/stackalign/push-1.c: Ditto.
+       * gcc.dg/torture/stackalign/vararg-3.c: Ditto.
+       * g++.dg/other/i386-1.C: Ditto.
+       * g++.dg/other/pr40446.C: Ditto.
+
 2010-07-23  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
 
        * gcc.dg/pr43058.c: Use dg-timeout-factor 4.
index 51048686f7f9749c395908454556b3e3716afe84..ec572ec948d69d8f66edeee22fb2820696900ea5 100644 (file)
@@ -1,6 +1,5 @@
 /* { dg-do run { target i?86-*-* x86_64-*-* } } */
 /* { dg-options "-msse2" } */
-/* { dg-require-effective-target sse2 } */
 /* { dg-require-effective-target sse2_runtime } */
 
 #include <xmmintrin.h>
index b4be0d05617145a93f442700a1d0a47b3fc19604..72cd1960649e16289808601c4faab2df9687856e 100644 (file)
@@ -1,7 +1,6 @@
 // PR middle-end/40446
 // { dg-do run { target i?86-*-* x86_64-*-* } }
 // { dg-options "-O1 -msse2" }
-// { dg-require-effective-target sse2 }
 // { dg-require-effective-target sse2_runtime }
 
 #include <emmintrin.h>
index 18e8355cd7a14c3559df84fde7d776bf002a56b2..fe173429a76089be06985210503ad8a5d38aa21e 100644 (file)
@@ -75,11 +75,8 @@ if  [istarget "powerpc-*paired*"]  {
 } elseif { [istarget  "spu-*-*"] } {
    set dg-do-what-default run
 } elseif { [istarget "i?86-*-*"] || [istarget "x86_64-*-*"] } {
-    if { ![check_effective_target_sse2] } then {
-       return
-    }
     lappend DEFAULT_VECTCFLAGS "-msse2"
-    if { [check_sse2_hw_available] && [check_sse_os_support_available] } {
+    if { [check_effective_target_sse2_runtime] } {
        set dg-do-what-default run
     } else {
        set dg-do-what-default compile
index 285af2bc4859fb0d8566d1c5d7dbcef42e552502..7314ec000ef2aedf85c33a6d12a343cbd501590c 100644 (file)
@@ -2,7 +2,6 @@
 /* { dg-do compile } */
 /* { dg-options "-O2" } */
 /* { dg-options "-O2 -msse -ffast-math" { target i?86-*-* x86_64-*-* } } */
-/* { dg-require-effective-target sse { target i?86-*-* x86_64-*-* } } */
 
 void bar (float *a, float *b);
 
index 88c3586db4b8b1125321a9876c7aacf82a42a65f..8f221083c903603a5f7e126bb692b46245f4fc96 100644 (file)
@@ -1,6 +1,6 @@
 /* PR target/38736 */
 /* { dg-skip-if "attribute ((aligned))" { ! { i?86-*-* x86_64-*-* } } } */
-/* { dg-require-effective-target avx } */
+/* { dg-require-effective-target avx_runtime } */
 
 /* Test compatibility of attribute ((aligned)) with and without -mavx.  */
 
index 602acf8c112ef6e2927d6227fc4aadc32aa8c01c..59e68d96c7a58493f8d99c1f9e8be27b6b2b1836 100644 (file)
@@ -1,6 +1,5 @@
 /* { dg-skip-if "test SSE2 support" { ! { i?86-*-* x86_64-*-* } } } */
 /* { dg-options "-O" } */
-/* { dg-require-effective-target sse2 } */
 /* { dg-require-effective-target sse2_runtime } */
 
 /* Test function argument passing.  PR target/15301.  */
index 11b4511749ee7e102651938dc5bacf5d84a7c13a..608f5dd9b8528acc3b782b412ec9fbf62367641c 100644 (file)
@@ -1,5 +1,4 @@
 /* { dg-skip-if "test SSE2 vector" { ! { i?86-*-* x86_64-*-* } } } */
-/* { dg-require-effective-target sse2 } */
 /* { dg-require-effective-target sse2_runtime } */
 
 /* Test compatibility of vector types: layout between separately-compiled
index fb5a5a93d792f9a1dd114e82aab67aa51f520933..427e8caf38b11fc200f63eb51a1c774da55236e6 100644 (file)
@@ -1,12 +1,10 @@
 /* { dg-skip-if "test AVX vector" { ! { i?86-*-* x86_64-*-* } } } */
-/* { dg-require-effective-target avx } */
+/* { dg-require-effective-target avx_runtime } */
 
 /* Test compatibility of vector types: layout between separately-compiled
    modules, parameter passing, and function return.  This test uses
    vectors of integer values.  */
 
-#include "cpuid.h"
-
 extern void vector_1_x (void);
 extern void exit (int);
 int fails;
@@ -14,14 +12,6 @@ int fails;
 int
 main ()
 {
-  unsigned int eax, ebx, ecx, edx;
-
-  if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
-    return 0;
-
-  /* Run AVX vector test only if host has AVX support.  */
-  if (ecx & bit_AVX)
-    vector_1_x ();
-
+  vector_1_x ();
   exit (0);
 }
index 8457e5aedc35a755626f5a3503b70df0f6710386..e957faf90d25568951df84fd736845ba15cc5f26 100644 (file)
@@ -1,5 +1,4 @@
 /* { dg-skip-if "test SSE2 support" { ! { i?86-*-* x86_64-*-* } } } */
-/* { dg-require-effective-target sse2 } */
 /* { dg-require-effective-target sse2_runtime } */
 
 /* Test compatibility of vector types: layout between separately-compiled
index c5a9300c8ac502fc94635af53c24f5a73dfffb51..2c195764249a6c6765bca645aef072bd145cd0d9 100644 (file)
@@ -1,12 +1,10 @@
 /* { dg-skip-if "test AVX support" { ! { i?86-*-* x86_64-*-* } } } */
-/* { dg-require-effective-target avx } */
+/* { dg-require-effective-target avx_runtime } */
 
 /* Test compatibility of vector types: layout between separately-compiled
    modules, parameter passing, and function return.  This test uses
    vectors of floating points values.  */
 
-#include "cpuid.h"
-
 extern void vector_2_x (void);
 extern void exit (int);
 int fails;
@@ -14,14 +12,6 @@ int fails;
 int
 main ()
 {
-  unsigned int eax, ebx, ecx, edx;
-
-  if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
-    return 0;
-
-  /* Run AVX vector test only if host has AVX support.  */
-  if (ecx & bit_AVX)
-    vector_2_x ();
-
+  vector_2_x ();
   exit (0);
 }
index e0e63a3f9622bc3167d3840ca0b9d350e04e49ab..6646db04f4f512031d95cd73a2b36a5ffa4d73cc 100644 (file)
@@ -3,7 +3,6 @@
 /* { dg-do compile } */
 /* { dg-options "-O2 -fprefetch-loop-arrays -w" } */
 /* { dg-options "-O2 -fprefetch-loop-arrays -march=i686 -msse" { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
-/* { dg-require-effective-target sse { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
 
 void foo (void)
 {
index 76499f7b8f5d0810750758a458a812ca470616e1..6bfc704774f0b3982179cc1a6b275243c6a3c316 100644 (file)
@@ -1,7 +1,6 @@
 /* { dg-do compile } */
 /* { dg-options "-O2" } */
 /* { dg-options "-O2 -msse2" { target { i?86-*-* x86_64-*-* } } } */
-/* { dg-require-effective-target sse2 { target { i?86-*-* x86_64-*-* } } } */
 /* { dg-options "-O2 -maltivec" { target { powerpc*-*-linux* && powerpc_altivec_ok } } } */
 
 typedef unsigned __attribute__ ((__mode__ (__pointer__))) uintptr_t;
index 2af71aea1221dc93abcfc6c2f010a4fb86d01ae8..c0b005db7d7064d1939d161405ddec9744254dfd 100644 (file)
@@ -1,7 +1,6 @@
 /* { dg-do run } */
 /* { dg-options "-O2 -lm" } */
 /* { dg-options "-O2 -msse2 -mfpmath=sse" { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
-/* { dg-require-effective-target sse2 { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
 /* { dg-require-effective-target sse2_runtime { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
 
 extern double fabs (double);
index 51b06a7791ca392e8b9bc713400d88e9128a9034..f87962e6f8a94258caa479ff0a26d84f7079b5db 100644 (file)
@@ -1,6 +1,5 @@
 /* { dg-do compile { target x86_64-*-* i?86-*-* } } */
 /* { dg-options "-std=c99 -msse2" } */
-/* { dg-require-effective-target sse2 } */
 
 typedef int __m64 __attribute__ ((__vector_size__ (8), __may_alias__));
 __m64 _mm_add_si64 (__m64 __m1, __m64 __m2)
index dec321bf7217cf8e5fa94d4726b33d94abe7607e..99979cef7adcbdf88c09fd7dec203d5a7832f142 100644 (file)
@@ -1,7 +1,6 @@
 /* { dg-do run } */
 /* { dg-options "-O2" } */
 /* { dg-options "-O2 -msse2 -mtune=core2 -mfpmath=387" { target { i?86-*-* x86_64-*-* } } } */
-/* { dg-require-effective-target sse2 { target { i?86-*-* x86_64-*-* } } } */
 /* { dg-require-effective-target sse2_runtime { target { i?86-*-* x86_64-*-* } } } */
 
 extern void abort (void);
index 2e477293ed17d3e6223a73ce143e54e9e1341a23..08951137dd3d4181df071ce5488c9fd65b8666ca 100644 (file)
@@ -1,6 +1,5 @@
 /* { dg-do run } */
 /* { dg-options "-msse" { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
-/* { dg-require-effective-target sse { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
 /* { dg-require-effective-target sse_runtime { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
 
 typedef float v2sf __attribute__ ((vector_size (2 * sizeof(float))));
index 6c6f0b367422ea7644fd4a29c7a44f18c14217b7..59cebc52e96769da786638b3725f7aa27ddacce6 100644 (file)
@@ -2,7 +2,6 @@
 /* { dg-do compile } */
 /* { dg-options "-O2 -fprefetch-loop-arrays -w" } */
 /* { dg-options "-O2 -fprefetch-loop-arrays -march=i686 -msse -w" { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
-/* { dg-require-effective-target sse { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
 
 __extension__ typedef __SIZE_TYPE__ size_t;
 
index d4aed810a3bcbb39b06ae574da411e1f0f102550..ad5eda65fca96490f938f45f2e8ba843c7e7b620 100644 (file)
@@ -1,7 +1,6 @@
 /* PR rtl-optimization/16104 */
 /* { dg-do run { target i?86-*-* x86_64-*-* } } */
 /* { dg-options "-msse2" } */
-/* { dg-require-effective-target sse2 } */
 /* { dg-require-effective-target sse2_runtime } */
 
 extern void abort (void);
index 4e95700c72ba1a9eac8f59ce1ca2d2bf6816e84e..b3fd554da22d2af2037a171c4cd04456e564a35e 100644 (file)
@@ -1,6 +1,5 @@
 /* { dg-do run { target i?86-*-* x86_64-*-* } } */
 /* { dg-options "-msse2" } */
-/* { dg-require-effective-target sse2 } */
 /* { dg-require-effective-target sse2_runtime } */
 
 typedef float __m128 __attribute__ ((__vector_size__ (16), __may_alias__));
index ae5bb00d91f237d7706288eb8d0e5169aa51eb77..a033caefd5cd54006dc4cbf07831e56c96376fcd 100644 (file)
@@ -1,6 +1,5 @@
 /* { dg-do run { target i?86-*-* x86_64-*-* } } */
 /* { dg-options "-msse2" } */
-/* { dg-require-effective-target sse2 } */
 /* { dg-require-effective-target sse2_runtime } */
 
 typedef double __m128d __attribute__ ((__vector_size__ (16), __may_alias__));
index 556f786dfaab2dbd2f5c7e79a8428eee6f1356c3..fcbe86cb1ba0b60d0b3855ea83167760b2570292 100644 (file)
@@ -1,6 +1,5 @@
 /* { dg-do run { target i?86-*-* x86_64-*-* } } */
 /* { dg-options "-msse2" } */
-/* { dg-require-effective-target sse2 } */
 /* { dg-require-effective-target sse2_runtime } */
 
 typedef long long __m128i __attribute__ ((__vector_size__ (16), __may_alias__));
index 54232bfae694f8a9f6297a5c391b9eb237c73928..139b74ed9c63aecd7067283780f1a69bd0930341 100644 (file)
@@ -1,7 +1,6 @@
 /* PR middle-end/37009 */
 /* { dg-do run { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
 /* { dg-options "-msse2" } */
-/* { dg-require-effective-target sse2 } */
 /* { dg-require-effective-target sse2_runtime } */
 
 #include <emmintrin.h>
index 8a91121febe5264a3e17ce00c3ccf68475726c33..31cb0c472b548765081116b88fb9f9596e913953 100644 (file)
@@ -1,7 +1,6 @@
 /* PR middle-end/37009 */
 /* { dg-do run { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
 /* { dg-options "-msse2" } */
-/* { dg-require-effective-target sse2 } */
 /* { dg-require-effective-target sse2_runtime } */
 
 #include <emmintrin.h>
index c58d1ec61aa8a98410453c3f3a83f9c9f17d3695..dd5dffc1581cc686945547a227c052dadb6afd7c 100644 (file)
@@ -1,7 +1,6 @@
 /* PR middle-end/37010 */
 /* { dg-do run { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
 /* { dg-options "-msse2 -mpreferred-stack-boundary=2" } */
-/* { dg-require-effective-target sse2 } */
 /* { dg-require-effective-target sse2_runtime } */
 
 #include <emmintrin.h>
index 734cf71bcae99ab875b5121341120f8d554d648a..5b49685fa82c2d9dcdb44897be6be30de988d229 100644 (file)
@@ -1,7 +1,6 @@
 /* PR middle-end/37009 */
 /* { dg-do run { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
 /* { dg-options "-msse2" } */
-/* { dg-require-effective-target sse2 } */
 /* { dg-require-effective-target sse2_runtime } */
 
 #include <stdarg.h>
index eecb13a7823f0ae6fe5ad14e95f08ed16b37439f..a68d8c65f6e140ba6f1704aa989f7977c3c2cf40 100644 (file)
@@ -67,11 +67,8 @@ if  [istarget "powerpc-*paired*"]  {
 } elseif { [istarget  "spu-*-*"] } {
    set dg-do-what-default run
 } elseif { [istarget "i?86-*-*"] || [istarget "x86_64-*-*"] } {
-    if { ![check_effective_target_sse2] } then {
-       return
-    }
     lappend DEFAULT_VECTCFLAGS "-msse2"
-    if { [check_sse2_hw_available] && [check_sse_os_support_available] } {
+    if { [check_effective_target_sse2_runtime] } {
        set dg-do-what-default run
     } else {
        set dg-do-what-default compile
index 7736fc9f40ba40fb3718d161c41ca6a6cde10fac..b15584ad274e875a7d1976e0c4dc84f8cb83e594 100644 (file)
@@ -20,7 +20,7 @@ main ()
     return 0;
 
   /* Run AVX test only if host has AVX support.  */
-  if (ecx & bit_AVX)
+  if ((ecx & (bit_AVX | bit_OSXSAVE)) == (bit_AVX | bit_OSXSAVE))
     {
       do_test ();
 #ifdef DEBUG
index d1cb9a43546be0fca3c3480bab3cc36185a776f4..4556ecd76edd9887a9468e20dded947bf4f61b12 100644 (file)
@@ -1,7 +1,6 @@
 ! { dg-do compile { target i?86-*-* x86_64-*-* } }
 ! { dg-require-effective-target ilp32 }
 ! { dg-options "-O -msse -mfpmath=sse" }
-! { dg-require-effective-target sse }
     subroutine yhalf(z)
     complex cdexpj,z
     z=cdexpj((0.d0,1.d0)*z)
index 99e536b42b5b59bef9ae8ebcdaa5dc67ea21717a..0f1af29d1f953415d38ca2d9bb71e87169591135 100644 (file)
@@ -1,7 +1,6 @@
 ! { dg-do compile { target i?86-*-* x86_64-*-* } }
 ! { dg-require-effective-target ilp32 }
 ! { dg-options "-O2 -msse -ftree-vectorize" }
-! { dg-require-effective-target sse } 
       subroutine cblank_cvb(a,ndim)
       character*(*) a
       character*1 blank
index 2a09df5a92ef0750269115b06d4b8eaaac0a7fef..5783e929496e3eddcd282195cc5a40c2510ddece 100644 (file)
@@ -68,11 +68,8 @@ if  [istarget "powerpc-*paired*"]  {
 } elseif { [istarget  "spu-*-*"] } {
    set dg-do-what-default run
 } elseif { [istarget "i?86-*-*"] || [istarget "x86_64-*-*"] } {
-    if { ![check_effective_target_sse2] } then {
-       return
-    }
     lappend DEFAULT_VECTCFLAGS "-msse2"
-    if { [check_sse2_hw_available] && [check_sse_os_support_available] } {
+    if { [check_effective_target_sse2_runtime] } {
        set dg-do-what-default run
     } else {
        set dg-do-what-default compile
index 9c1369a35931d1aba3c809330f5c6f11a7528bc3..9fb18d16715a65e38920310d84e86822279f70d4 100644 (file)
@@ -953,7 +953,7 @@ proc check_sse_hw_available { } {
                #include "cpuid.h"
                int main ()
                {
-                 unsigned int eax, ebx, ecx, edx = 0;
+                 unsigned int eax, ebx, ecx, edx;
                  if (__get_cpuid (1, &eax, &ebx, &ecx, &edx))
                    return !(edx & bit_SSE);
                  return 1;
@@ -976,7 +976,7 @@ proc check_sse2_hw_available { } {
                #include "cpuid.h"
                int main ()
                {
-                 unsigned int eax, ebx, ecx, edx = 0;
+                 unsigned int eax, ebx, ecx, edx;
                  if (__get_cpuid (1, &eax, &ebx, &ecx, &edx))
                    return !(edx & bit_SSE2);
                  return 1;
@@ -986,24 +986,60 @@ proc check_sse2_hw_available { } {
     }]
 }
 
+# Return 1 if the target supports executing AVX instructions, 0
+# otherwise.  Cache the result.
+
+proc check_avx_hw_available { } {
+    return [check_cached_effective_target avx_hw_available {
+       # If this is not the right target then we can skip the test.
+       if { !([istarget x86_64-*-*] || [istarget i?86-*-*]) } {
+           expr 0
+       } else {
+           check_runtime_nocache avx_hw_available {
+               #include "cpuid.h"
+               int main ()
+               {
+                 unsigned int eax, ebx, ecx, edx;
+                 if (__get_cpuid (1, &eax, &ebx, &ecx, &edx))
+                   return ((ecx & (bit_AVX | bit_OSXSAVE))
+                           != (bit_AVX | bit_OSXSAVE));
+                 return 1;
+               }
+           } ""
+       }
+    }]
+}
+
 # Return 1 if the target supports running SSE executables, 0 otherwise.
 
 proc check_effective_target_sse_runtime { } {
-    if { [check_sse_hw_available] && [check_sse_os_support_available] } {
+    if { [check_effective_target_sse]
+        && [check_sse_hw_available]
+        && [check_sse_os_support_available] } {
        return 1
-    } else {
-       return 0
     }
+    return 0
 }
 
 # Return 1 if the target supports running SSE2 executables, 0 otherwise.
 
 proc check_effective_target_sse2_runtime { } {
-    if { [check_sse2_hw_available] && [check_sse_os_support_available] } {
+    if { [check_effective_target_sse2]
+        && [check_sse2_hw_available]
+        && [check_sse_os_support_available] } {
        return 1
-    } else {
-       return 0
     }
+    return 0
+}
+
+# Return 1 if the target supports running AVX executables, 0 otherwise.
+
+proc check_effective_target_avx_runtime { } {
+    if { [check_effective_target_avx]
+        && [check_avx_hw_available] } {
+       return 1
+    }
+    return 0
 }
 
 # Return 1 if the target supports executing VSX instructions, 0