GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
# Local configure fragment for sysdeps/i386.

#AC_HEADER_CHECK([cpuid.h], ,
#  [AC_MSG_ERROR([gcc must provide the <cpuid.h> header])])

AC_CACHE_CHECK(if -g produces usable source locations for assembler-with-cpp,
	       libc_cv_cpp_asm_debuginfo, [dnl
cat > conftest.S <<EOF
#include "confdefs.h"

/* comment on
   two lines */
	${libc_cv_dot_text}
	${libc_cv_asm_global_directive} foo
foo:
	/* Unfortunately this test only works for a real instruction,
	   not for any of the machine-independent pseudo-ops.
	   So we just have to assume everybody has a "nop".  */
	nop
	/* comment */
	nop
	/* comment */
	nop
EOF
if AC_TRY_COMMAND([${CC-cc} $CPPFLAGS $ASFLAGS -g -c conftest.S 1>&AS_MESSAGE_LOG_FD]) && {
   ac_pattern='conftest\.S'
   AC_TRY_COMMAND([readelf --debug-dump=line conftest.o |
		   grep $ac_pattern 1>&AS_MESSAGE_LOG_FD])
  }; then
  libc_cv_cpp_asm_debuginfo=yes
else
  libc_cv_cpp_asm_debuginfo=no
fi
rm -f conftest*])AC_SUBST(libc_cv_cpp_asm_debuginfo)
if test $libc_cv_cpp_asm_debuginfo = yes; then
  AC_DEFINE(HAVE_CPP_ASM_DEBUGINFO)
fi

dnl Check if -msse4 works.
AC_CACHE_CHECK(for SSE4 support, libc_cv_cc_sse4, [dnl
if AC_TRY_COMMAND([${CC-cc} -msse4 -xc /dev/null -S -o /dev/null]); then
  libc_cv_cc_sse4=yes
else
  libc_cv_cc_sse4=no
fi])
if test $libc_cv_cc_sse4 = yes; then
  AC_DEFINE(HAVE_SSE4_SUPPORT)
fi

dnl Check if -Wa,-mtune=i686 works.
AC_CACHE_CHECK(for assembler -mtune=i686 support, libc_cv_as_i686, [dnl
if AC_TRY_COMMAND([${CC-cc} -Wa,-mtune=i686 -xc /dev/null -S -o /dev/null]); then
  libc_cv_as_i686=yes
else
  libc_cv_as_i686=no
fi])

dnl Check if -mavx works.
AC_CACHE_CHECK(for AVX support, libc_cv_cc_avx, [dnl
if AC_TRY_COMMAND([${CC-cc} -mavx -xc /dev/null -S -o /dev/null]); then
  libc_cv_cc_avx=yes
else
  libc_cv_cc_avx=no
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])
