From patchwork Thu Jul 22 21:31:07 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: PATCH: Check AVX runtime support Date: Thu, 22 Jul 2010 11:31:07 -0000 From: "H.J. Lu" X-Patchwork-Id: 59647 Message-Id: To: gcc-patches@gcc.gnu.org Cc: Uros Bizjak On Thu, Jul 22, 2010 at 2:27 PM, H.J. Lu wrote: > 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   > >        * lib/target-supports.exp (check_effective_target_avx): Check >        AVX runtime support. > This patch uses -O0 for unused function foo. diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index 9c1369a..9bb0816 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 + + /* 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" ] + } "-O0" ] } # Return 1 if sse instructions can be compiled.