This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
PATCH: Check AVX runtime support
- From: "H.J. Lu" <hongjiu dot lu at intel dot com>
- To: gcc-patches at gcc dot gnu dot org
- Cc: Uros Bizjak <ubizjak at gmail dot com>
- Date: Thu, 22 Jul 2010 14:27:38 -0700
- Subject: PATCH: Check AVX runtime support
- Reply-to: "H.J. Lu" <hjl dot tools at gmail dot com>
AVX tests needs bit_OSXSAVE enabled. We can check it in each test or
we can put it in check_effective_target_avx. This patch adds bit_OSXSAVE
check to check_effective_target_avx.
H.J.
---
2010-07-22 H.J. Lu <hongjiu.lu@intel.com>
* lib/target-supports.exp (check_effective_target_avx): Check
AVX runtime support.
diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
index 9c1369a..b9a64ab 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -3323,15 +3323,28 @@ proc check_effective_target_automatic_stack_alignment { } {
}
}
-# Return 1 if avx instructions can be compiled.
+# Return 1 if avx instructions can be compiled and run.
proc check_effective_target_avx { } {
- return [check_no_compiler_messages avx object {
- void _mm256_zeroall (void)
+ return [check_runtime avx {
+ #include <cpuid.h>
+
+ /* Check if assembler accepts AVX instructons. */
+ void foo (void)
{
- __builtin_ia32_vzeroall ();
+ __asm__ volatile ("vzeroall");
+ }
+ int main ()
+ {
+ unsigned int eax, ebx, ecx, edx;
+ if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
+ return 1;
+
+ /* Run AVX test only if host has AVX runtime support. */
+ return ((ecx & (bit_AVX | bit_OSXSAVE))
+ == (bit_AVX | bit_OSXSAVE)) ? 0 : 1;
}
- } "-O2 -mavx" ]
+ } "-O2" ]
}
# Return 1 if sse instructions can be compiled.