From: Uros Bizjak Date: Thu, 21 Jul 2011 21:25:08 +0000 (+0200) Subject: target-supports.exp (check_avx_os_support_available): New. X-Git-Tag: releases/gcc-4.5.4~519 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=27a09d0323acfb2d9ab4eaf0a0d962b99da52d4c;p=thirdparty%2Fgcc.git target-supports.exp (check_avx_os_support_available): New. * lib/target-supports.exp (check_avx_os_support_available): New. (check_effective_target_avx_runtime): Use it. From-SVN: r176590 --- diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b22da57f4726..7ca92a4b14d8 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2011-07-21 Uros Bizjak + + * lib/target-supports.exp (check_avx_os_support_available): New. + (check_effective_target_avx_runtime): Use it. + 2011-07-19 Jakub Jelinek Backport from mainline diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index 013ba0bccc96..68c0236ad9de 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -960,8 +960,8 @@ proc check_sse_os_support_available { } { check_runtime_nocache sse_os_support_available { int main () { - __asm__ volatile ("movss %xmm2,%xmm1"); - return 0; + asm volatile ("movss %xmm2,%xmm1"); + return 0; } } "-msse" } else { @@ -970,6 +970,29 @@ proc check_sse_os_support_available { } { }] } +# Return 1 if the target OS supports running AVX executables, 0 +# otherwise. Cache the result. + +proc check_avx_os_support_available { } { + return [check_cached_effective_target avx_os_support_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 that OS has AVX and SSE saving enabled. + check_runtime_nocache avx_os_support_available { + int main () + { + unsigned int eax, edx; + + asm ("xgetbv" : "=a" (eax), "=d" (edx) : "c" (0)); + return (eax & 6) != 6; + } + } "" + } + }] +} + # Return 1 if the target supports executing SSE instructions, 0 # otherwise. Cache the result. @@ -1064,7 +1087,8 @@ proc check_effective_target_sse2_runtime { } { proc check_effective_target_avx_runtime { } { if { [check_effective_target_avx] - && [check_avx_hw_available] } { + && [check_avx_hw_available] + && [check_avx_os_support_available] } { return 1 } return 0