PATCH: PR libc/12460: AVX audit test failures with gcc 4.6
H.J. Lu
hongjiu.lu@intel.com
Wed Feb 2 21:54:00 GMT 2011
The vzeroupper optimization in gcc 4.6 will add vzeroupper before function
return even if AVX isn't supported. Due to nature of special codes in AVX
audit tests, we can't use __builtin_ia32_vzeroupper in AVX audit tests.
This patch adds -mno-vzeroupper for those tests if needed.
H.J.
---
2011-02-02 H.J. Lu <hongjiu.lu@intel.com>
PR libc/12460
* config.make.in (config-cflags-novzeroupper): New.
* configure.in: Substitute libc_cv_cc_novzeroupper.
* configure: Regenerated.
* elf/Makefile (AVX-CFLAGS): New.
(CFLAGS-tst-audit4.c): Replace -mavx with $(AVX-CFLAGS).
(CFLAGS-tst-auditmod4a.c): Likewise.
(CFLAGS-tst-auditmod4b.c): Likewise.
(CFLAGS-tst-auditmod6b.c): Likewise.
(CFLAGS-tst-auditmod6c.c): Likewise.
(CFLAGS-tst-auditmod7b.c): Likewise.
* sysdeps/i386/configure.in: Check -mno-vzeroupper.
* sysdeps/i386/configure: Regenerated.
diff --git a/config.make.in b/config.make.in
index efffee4..3f6a698 100644
--- a/config.make.in
+++ b/config.make.in
@@ -36,6 +36,7 @@ asflags-cpu = @libc_cv_cc_submachine@
config-cflags-sse4 = @libc_cv_cc_sse4@
config-cflags-avx = @libc_cv_cc_avx@
+config-cflags-novzeroupper = @libc_cv_cc_novzeroupper@
config-asflags-i686 = @libc_cv_as_i686@
defines = @DEFINES@
diff --git a/elf/Makefile b/elf/Makefile
index 0f37804..36ea9b8 100644
--- a/elf/Makefile
+++ b/elf/Makefile
@@ -1181,10 +1181,14 @@ $(objpfx)tst-initorder.out: $(objpfx)tst-initorder
cmp $@ tst-initorder.exp > /dev/null
ifeq (yes,$(config-cflags-avx))
-CFLAGS-tst-audit4.c += -mavx
-CFLAGS-tst-auditmod4a.c += -mavx
-CFLAGS-tst-auditmod4b.c += -mavx
-CFLAGS-tst-auditmod6b.c += -mavx
-CFLAGS-tst-auditmod6c.c += -mavx
-CFLAGS-tst-auditmod7b.c += -mavx
+AVX-CFLAGS=-mavx
+ifeq (yes,$(config-cflags-novzeroupper))
+AVX-CFLAGS+=-mno-vzeroupper
+endif
+CFLAGS-tst-audit4.c += $(AVX-CFLAGS)
+CFLAGS-tst-auditmod4a.c += $(AVX-CFLAGS)
+CFLAGS-tst-auditmod4b.c += $(AVX-CFLAGS)
+CFLAGS-tst-auditmod6b.c += $(AVX-CFLAGS)
+CFLAGS-tst-auditmod6c.c += $(AVX-CFLAGS)
+CFLAGS-tst-auditmod7b.c += $(AVX-CFLAGS)
endif
diff --git a/sysdeps/i386/configure.in b/sysdeps/i386/configure.in
index d8dd648..67fd1d7 100644
--- a/sysdeps/i386/configure.in
+++ b/sysdeps/i386/configure.in
@@ -66,3 +66,11 @@ fi])
if test $libc_cv_cc_avx = yes; then
AC_DEFINE(HAVE_AVX_SUPPORT)
fi
+
+dnl Check if -mno-vzeroupper works.
+AC_CACHE_CHECK(for -mno-vzeroupper support, libc_cv_cc_novzeroupper, [dnl
+if AC_TRY_COMMAND([${CC-cc} -mno-vzeroupper -xc /dev/null -S -o /dev/null]); then
+ libc_cv_cc_novzeroupper=yes
+else
+ libc_cv_cc_novzeroupper=no
+fi])
More information about the Libc-alpha
mailing list