# This file is generated from configure.in by Autoconf.  DO NOT EDIT!
 # Local configure fragment for sysdeps/powerpc64/elf.

if test "$usetls" != no; then
# Check for support of thread-local storage handling in assembler and
# linker.
{ $as_echo "$as_me:$LINENO: checking for powerpc64 TLS support" >&5
$as_echo_n "checking for powerpc64 TLS support... " >&6; }
if test "${libc_cv_powerpc64_tls+set}" = set; then
  $as_echo_n "(cached) " >&6
else
  cat > conftest.s <<\EOF
        .section ".tdata","awT",@progbits
x:      .quad   1
x1:     .quad   1
x2:     .quad   1
x3:     .quad   1
x4:     .long   1
        .section ".toc","aw"
.LC0:
        .quad	x@dtpmod
        .quad	x@dtprel
.LC1:
        .quad	x1@dtpmod
        .quad	0
.LC2:
	.quad	x@tprel
        .text
        addi    3,2,x@got@tlsgd
        addi    3,2,.LC0@toc
        addi    3,2,x1@got@tlsld
        addi    9,3,x1@dtprel
        addis   9,3,x2@dtprel@ha
        addi    9,9,x2@dtprel@l
        ld      9,x3@got@dtprel(2)
        addi    3,2,.LC0@toc
        lwz     0,x1@dtprel(3)
        ld      0,x1@dtprel(3)
        addis   9,3,x2@dtprel@ha
        lwz     0,x2@dtprel@l(9)
        ld      0,x2@dtprel@l(9)
        ld      9,x3@got@dtprel(2)
        ld      9,x@got@tprel(2)
        add     9,9,x@tls
        ld      9,.LC2@toc(2)
        add     9,9,.LC2@tls
        addi    9,13,x1@tprel
        addis   9,13,x2@tprel@ha
        addi    9,9,x2@tprel@l
EOF
if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'
  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  (eval $ac_try) 2>&5
  ac_status=$?
  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
  (exit $ac_status); }; }; then
  libc_cv_powerpc64_tls=yes
else
  libc_cv_powerpc64_tls=no
fi
rm -f conftest*
fi
{ $as_echo "$as_me:$LINENO: result: $libc_cv_powerpc64_tls" >&5
$as_echo "$libc_cv_powerpc64_tls" >&6; }
if test $libc_cv_powerpc64_tls = yes; then
  cat >>confdefs.h <<\_ACEOF
#define HAVE_TLS_SUPPORT 1
_ACEOF

fi
fi

