glibc/sysdeps/powerpc/powerpc32/fpu/configure
Joseph Myers e8dab9477f Fix powerpc32 llrint, llrintf bad exceptions (bug 16422).
The versions of llrint and llrintf for older powerpc32 processors
convert the results of __rint / __rintf to long long int, resulting in
spurious exceptions from such casts in certain cases.  This patch
makes glibc work around the problems with the libgcc conversions when
the compiler used to build glibc doesn't use the fctidz instruction
for them.

Tested for powerpc.

	[BZ #16422]
	* sysdeps/powerpc/powerpc32/fpu/configure.ac (libc_cv_ppc_fctidz):
	New configure test.
	* sysdeps/powerpc/powerpc32/fpu/configure: Regenerated.
	* config.h.in [_LIBC] (HAVE_PPC_FCTIDZ): New macro.
	* sysdeps/powerpc/powerpc32/fpu/s_llrint.c: Include <limits.h>,
	<math_private.h> and <stdint.h>.
	(__llrint): Avoid conversions to long long int where those might
	raise spurious exceptions.
	* sysdeps/powerpc/powerpc32/fpu/s_llrintf.c: Include
	<math_private.h> and <stdint.h>.
	(__llrintf): Avoid conversions to long long int where those might
	raise spurious exceptions.
2015-10-13 00:52:54 +00:00

57 lines
2.0 KiB
Plaintext

# This file is generated from configure.ac by Autoconf. DO NOT EDIT!
# Local configure fragment for sysdeps/powerpc/powerpc32/fpu.
# Test whether integer to floating point conversions use fcfid.
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fcfid use" >&5
$as_echo_n "checking for fcfid use... " >&6; }
if ${libc_cv_ppc_fcfid+:} false; then :
$as_echo_n "(cached) " >&6
else
echo 'double foo (int x) { return (double) x; }' > conftest.c
libc_cv_ppc_fcfid=no
if { ac_try='${CC-cc} -S $CFLAGS conftest.c -o 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
if grep '[ ]fcfid' conftest.s > /dev/null 2>&1; then
libc_cv_ppc_fcfid=yes
fi
fi
rm -rf conftest*
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_ppc_fcfid" >&5
$as_echo "$libc_cv_ppc_fcfid" >&6; }
if test $libc_cv_ppc_fcfid = yes; then
$as_echo "#define HAVE_PPC_FCFID 1" >>confdefs.h
fi
# Test whether floating point to long long conversions use fctidz.
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fctidz use" >&5
$as_echo_n "checking for fctidz use... " >&6; }
if ${libc_cv_ppc_fctidz+:} false; then :
$as_echo_n "(cached) " >&6
else
echo 'long long int foo (double x) { return (long long int) x; }' > conftest.c
libc_cv_ppc_fctidz=no
if { ac_try='${CC-cc} -S $CFLAGS conftest.c -o 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
if grep '[ ]fctidz' conftest.s > /dev/null 2>&1; then
libc_cv_ppc_fctidz=yes
fi
fi
rm -rf conftest*
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_ppc_fctidz" >&5
$as_echo "$libc_cv_ppc_fctidz" >&6; }
if test $libc_cv_ppc_fctidz = yes; then
$as_echo "#define HAVE_PPC_FCTIDZ 1" >>confdefs.h
fi