Fix powerpc32 llrint, llrintf bad exceptions (bug 16422).
authorJoseph Myers <joseph@codesourcery.com>
Tue, 13 Oct 2015 00:52:54 +0000 (00:52 +0000)
committerJoseph Myers <joseph@codesourcery.com>
Tue, 13 Oct 2015 00:52:54 +0000 (00:52 +0000)
commite8dab9477f33ab7a67405f4e147cbaa1a4bb443b
treef9a6edfe0acaaa15b4c8a42daad0ef31510e5994
parent5b1766a0cde255eff9868a9eeb49f66a89842cb8
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.
ChangeLog
NEWS
config.h.in
sysdeps/powerpc/powerpc32/fpu/configure
sysdeps/powerpc/powerpc32/fpu/configure.ac
sysdeps/powerpc/powerpc32/fpu/s_llrint.c
sysdeps/powerpc/powerpc32/fpu/s_llrintf.c