[PATCH, testsuite]: Introduce check_avx_os_support_available
Uros Bizjak
ubizjak@gmail.com
Thu Jul 21 16:06:00 GMT 2011
Hello!
This is the same functionality as recently added to glibc [1].
2011-07-21 Uros Bizjak <ubizjak@gmail.com>
* lib/target-supports.exp (check_avx_os_support_available): New.
(check_effective_target_avx_runtime): Use it.
Tested on x86_64-pc-linux-gnu {,-m32} AVX and non-AVX targets,
ommitted to mainline SVN.
The patch will be backported to release branches.
[1] http://sourceware.org/git/?p=glibc.git;a=commitdiff;h=5644ef5461b5d3ff266206d8ee70d4b575ea6658
Uros.
-------------- next part --------------
Index: lib/target-supports.exp
===================================================================
--- lib/target-supports.exp (revision 176571)
+++ lib/target-supports.exp (working copy)
@@ -1070,8 +1070,8 @@
check_runtime_nocache sse_os_support_available {
int main ()
{
- __asm__ volatile ("movaps %xmm0,%xmm0");
- return 0;
+ asm volatile ("movaps %xmm0,%xmm0");
+ return 0;
}
} "-msse"
} else {
@@ -1080,6 +1080,29 @@
}]
}
+# 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.
@@ -1176,7 +1199,8 @@
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
More information about the Gcc-patches
mailing list