
# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
# -------------------------------------------------------
# Tests whether HEADER exists and can be compiled using the include files in
# INCLUDES, setting the cache variable VAR accordingly.
ac_fn_c_check_header_compile ()
{
  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
$as_echo_n "checking for $2... " >&6; }
if eval \${$3+:} false; then :
  $as_echo_n "(cached) " >&6
else
  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h.  */
$4
#include <$2>
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
  eval "$3=yes"
else
  eval "$3=no"
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
eval ac_res=\$$3
	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
$as_echo "$ac_res" >&6; }
  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno

} # ac_fn_c_check_header_compile
# This file is generated from configure.ac by Autoconf.  DO NOT EDIT!
 # Local configure fragment for sysdeps/x86_64.


ac_fn_c_check_header_compile "$LINENO" "cpuid.h" "ac_cv_header_cpuid_h" "/* No default includes.  */
"
if test "x$ac_cv_header_cpuid_h" = xyes; then :

else
  as_fn_error $? "gcc must provide the <cpuid.h> header" "$LINENO" 5
fi



{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for SSE4 support" >&5
$as_echo_n "checking for SSE4 support... " >&6; }
if ${libc_cv_cc_sse4+:} false; then :
  $as_echo_n "(cached) " >&6
else
  if { ac_try='${CC-cc} -msse4 -xc /dev/null -S -o /dev/null'
  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
  (eval $ac_try) 2>&5
  ac_status=$?
  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
  test $ac_status = 0; }; }; then :
  libc_cv_cc_sse4=yes
else
  libc_cv_cc_sse4=no
fi

fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_cc_sse4" >&5
$as_echo "$libc_cv_cc_sse4" >&6; }
if test $libc_cv_cc_sse4 = yes; then
  $as_echo "#define HAVE_SSE4_SUPPORT 1" >>confdefs.h

fi
config_vars="$config_vars
config-cflags-sse4 = $libc_cv_cc_sse4"

{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for AVX support" >&5
$as_echo_n "checking for AVX support... " >&6; }
if ${libc_cv_cc_avx+:} false; then :
  $as_echo_n "(cached) " >&6
else
  if { ac_try='${CC-cc} -mavx -xc /dev/null -S -o /dev/null'
  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
  (eval $ac_try) 2>&5
  ac_status=$?
  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
  test $ac_status = 0; }; }; then :
  libc_cv_cc_avx=yes
else
  libc_cv_cc_avx=no
fi

fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_cc_avx" >&5
$as_echo "$libc_cv_cc_avx" >&6; }
if test $libc_cv_cc_avx = yes; then
  $as_echo "#define HAVE_AVX_SUPPORT 1" >>confdefs.h

fi
config_vars="$config_vars
config-cflags-avx = $libc_cv_cc_avx"

{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for AVX encoding of SSE instructions" >&5
$as_echo_n "checking for AVX encoding of SSE instructions... " >&6; }
if ${libc_cv_cc_sse2avx+:} false; then :
  $as_echo_n "(cached) " >&6
else
  if { ac_try='${CC-cc} -msse2avx -xc /dev/null -S -o /dev/null'
  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
  (eval $ac_try) 2>&5
  ac_status=$?
  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
  test $ac_status = 0; }; }; then :
  libc_cv_cc_sse2avx=yes
else
  libc_cv_cc_sse2avx=no
fi

fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_cc_sse2avx" >&5
$as_echo "$libc_cv_cc_sse2avx" >&6; }
if test $libc_cv_cc_sse2avx = yes; then
  $as_echo "#define HAVE_SSE2AVX_SUPPORT 1" >>confdefs.h

fi
config_vars="$config_vars
config-cflags-sse2avx = $libc_cv_cc_sse2avx"

{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for FMA4 support" >&5
$as_echo_n "checking for FMA4 support... " >&6; }
if ${libc_cv_cc_fma4+:} false; then :
  $as_echo_n "(cached) " >&6
else
  if { ac_try='${CC-cc} -mfma4 -xc /dev/null -S -o /dev/null'
  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
  (eval $ac_try) 2>&5
  ac_status=$?
  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
  test $ac_status = 0; }; }; then :
  libc_cv_cc_fma4=yes
else
  libc_cv_cc_fma4=no
fi

fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_cc_fma4" >&5
$as_echo "$libc_cv_cc_fma4" >&6; }
if test $libc_cv_cc_fma4 = yes; then
  $as_echo "#define HAVE_FMA4_SUPPORT 1" >>confdefs.h

fi
config_vars="$config_vars
have-mfma4 = $libc_cv_cc_fma4"

{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for -mno-vzeroupper support" >&5
$as_echo_n "checking for -mno-vzeroupper support... " >&6; }
if ${libc_cv_cc_novzeroupper+:} false; then :
  $as_echo_n "(cached) " >&6
else
  if { ac_try='${CC-cc} -mno-vzeroupper -xc /dev/null -S -o /dev/null'
  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
  (eval $ac_try) 2>&5
  ac_status=$?
  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
  test $ac_status = 0; }; }; then :
  libc_cv_cc_novzeroupper=yes
else
  libc_cv_cc_novzeroupper=no
fi

fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_cc_novzeroupper" >&5
$as_echo "$libc_cv_cc_novzeroupper" >&6; }
config_vars="$config_vars
config-cflags-novzeroupper = $libc_cv_cc_novzeroupper"

$as_echo "#define PI_STATIC_AND_HIDDEN 1" >>confdefs.h

# work around problem with autoconf and empty lines at the end of files
