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

# Check for support of VIS3 et al. instructions in the assembler.
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sparc assembler VIS3 support" >&5
$as_echo_n "checking for sparc assembler VIS3 support... " >&6; }
if ${libc_cv_sparc_as_vis3+:} false; then :
  $as_echo_n "(cached) " >&6
else
  cat > conftest.S <<\EOF
	.text
foo:	fmadds		%f1, %f2, %f3, %f5
	fmaddd		%f2, %f4, %f8, %f10
	fhadds		%f2, %f3, %f5
	fhaddd		%f4, %f8, %f10
	pdistn		%f2, %f4, %g1
	movdtox		%f10, %o0
	movstouw	%f9, %o1
	movstosw	%f7, %o2
	movxtod		%o3, %f18
	movwtos		%o4, %f15
	flcmps		%fcc0, %f3, %f5
	flcmpd		%fcc1, %f4, %f6
EOF
if { ac_try='${CC-cc} -c $CFLAGS -Wa,-Av9d conftest.S'
  { { 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_sparc_as_vis3=yes
else
  libc_cv_sparc_as_vis3=no
fi
rm -f conftest*
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_sparc_as_vis3" >&5
$as_echo "$libc_cv_sparc_as_vis3" >&6; }
if test $libc_cv_sparc_as_vis3 = yes; then
  $as_echo "#define HAVE_AS_VIS3_SUPPORT 1" >>confdefs.h

fi
config_vars="$config_vars
have-as-vis3 = $libc_cv_sparc_as_vis3"

# Check for a GCC emitting GOTDATA relocations.
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sparc gcc GOTDATA reloc support" >&5
$as_echo_n "checking for sparc gcc GOTDATA reloc support... " >&6; }
if ${libc_cv_sparc_gcc_gotdata+:} false; then :
  $as_echo_n "(cached) " >&6
else
  cat > conftest.c <<\EOF
int data;
int foo(void)
{
	return data;
}
EOF
libc_cv_sparc_gcc_gotdata=no
if { ac_try='${CC-cc} -S $CFLAGS -O2 -fPIC conftest.c 1>&5'
  { { 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
  if grep -q 'gdop_hix22' conftest.s \
     && grep -q 'gdop_lox10' conftest.s; then
    libc_cv_sparc_gcc_gotdata=yes
  fi
fi
rm -f conftest*
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_sparc_gcc_gotdata" >&5
$as_echo "$libc_cv_sparc_gcc_gotdata" >&6; }
if test $libc_cv_sparc_gcc_gotdata = yes; then
  $as_echo "#define HAVE_GCC_GOTDATA 1" >>confdefs.h

fi

if test $libc_cv_sparc_gcc_gotdata = yes; then
  $as_echo "#define PI_STATIC_AND_HIDDEN 1" >>confdefs.h

fi
