# This file is generated from configure.ac by Autoconf.  DO NOT EDIT!

{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for assembler line separator" >&5
$as_echo_n "checking for assembler line separator... " >&6; }
if ${libc_cv_asm_line_sep+:} false; then :
  $as_echo_n "(cached) " >&6
else
  cat > conftest.s <<EOF
nop ; is_old_puffin
EOF
if { ac_try='${CC-cc} -c $ASFLAGS conftest.s 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
  libc_cv_asm_line_sep='!'
else
  if test -z "$enable_hacker_mode"; then
    echo "*** You need a newer assembler to compile glibc"
    rm -f conftest*
    exit 1
  fi
  libc_cv_asm_line_sep=';'
fi
rm -f conftest*
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_asm_line_sep" >&5
$as_echo "$libc_cv_asm_line_sep" >&6; }
cat >>confdefs.h <<_ACEOF
#define ASM_LINE_SEP $libc_cv_asm_line_sep
_ACEOF


# Check for support of thread-local storage handling in assembler and
# linker.
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for hppa TLS support" >&5
$as_echo_n "checking for hppa TLS support... " >&6; }
if ${libc_cv_hppa_tls+:} false; then :
  $as_echo_n "(cached) " >&6
else
  cat > conftest.s <<\EOF
; Setup tls data
.section ".tdata","awT",@progbits
foo:	.data	32
	.text
; Test general dyanmic relocations
test0:
	addil 	LT'foo-$tls_gdidx$, %r19
	ldo 	RT'foo-$tls_gdidx$(%r1), %r26
	b 	__tls_get_addr
	nop
; Test local dynamic relocations
test1:
	addil 	LT'foo-$tls_ldidx$, %r19
	b 	__tls_get_addr
	ldo 	RT'foo-$tls_ldidx$(%r1), %r26
	ldo 	RR'foo-$tls_dtpoff$(%r1), %r25
	; More variables can be loaded...
; Test initial exec reloctiosn
test2:
	mfctl 	%cr27, %r26
	addil 	LT'foo-$tls_ieoff$, %r19
	ldw 	RT'foo-$tls_ieoff$(%r1), %r25
	add 	%r26, %r25, %r24
; Test local exec relocations
test3:
	mfctl 	%cr27, %r26
	addil 	LR'foo-$tls_leoff$, %r26
	ldo 	RR'foo-$tls_leoff$(%r1), %r25
; Done all the TLS tests.
EOF
if { ac_try='${CC-cc} -c $CFLAGS conftest.s 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
  libc_cv_hppa_tls=yes
else
  libc_cv_hppa_tls=no
fi
rm -f conftest*
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_hppa_tls" >&5
$as_echo "$libc_cv_hppa_tls" >&6; }
if test $libc_cv_hppa_tls = no; then
  as_fn_error $? "the assembler must support TLS" "$LINENO" 5
fi
