Fix asin missing underflows (bug 16351).
commitec0ce0d3be4ae21add09139c705852ed8bb114c7
authorJoseph Myers <joseph@codesourcery.com>
Thu, 26 Feb 2015 17:18:54 +0000 (26 17:18 +0000)
committerJoseph Myers <joseph@codesourcery.com>
Thu, 26 Feb 2015 17:18:54 +0000 (26 17:18 +0000)
tree5f1fdab17731cca01fd46bcb264a6805a0e9d3fc
parent380bd0fd2418f8988217de950f8b8ff18af0cb2b
Fix asin missing underflows (bug 16351).

Similar to various other bugs in this area, some asin implementations
do not raise the underflow exception for subnormal arguments, when the
result is tiny and inexact.  This patch forces the exception in a
similar way to previous fixes.

Tested for x86_64, x86, powerpc and mips64.

[BZ #16351]
* sysdeps/i386/fpu/e_asin.S (dbl_min): New object.
(MO): New macro.
(__ieee754_asin): Force underflow exception for results with small
absolute value.
* sysdeps/i386/fpu/e_asinf.S (flt_min): New object.
(MO): New macro.
(__ieee754_asinf): Force underflow exception for results with
small absolute value.
* sysdeps/ieee754/dbl-64/e_asin.c: Include <float.h> and <math.h>.
(__ieee754_asin): Force underflow exception for results with small
absolute value.
* sysdeps/ieee754/flt-32/e_asinf.c: Include <float.h>.
(__ieee754_asinf): Force underflow exception for results with
small absolute value.
* sysdeps/ieee754/ldbl-128/e_asinl.c: Include <float.h>.
(__ieee754_asinl): Force underflow exception for results with
small absolute value.
* sysdeps/ieee754/ldbl-128ibm/e_asinl.c: Include <float.h>.
(__ieee754_asinl): Force underflow exception for results with
small absolute value.
* sysdeps/ieee754/ldbl-96/e_asinl.c: Include <float.h>.
(__ieee754_asinl): Force underflow exception for results with
small absolute value.
* sysdeps/x86_64/fpu/multiarch/e_asin.c [HAVE_FMA4_SUPPORT]:
Include <math.h>.
* math/auto-libm-test-in: Do not mark underflow exceptions as
possibly missing for bug 16351.
* math/auto-libm-test-out: Regenerated.
12 files changed:
ChangeLog
NEWS
math/auto-libm-test-in
math/auto-libm-test-out
sysdeps/i386/fpu/e_asin.S
sysdeps/i386/fpu/e_asinf.S
sysdeps/ieee754/dbl-64/e_asin.c
sysdeps/ieee754/flt-32/e_asinf.c
sysdeps/ieee754/ldbl-128/e_asinl.c
sysdeps/ieee754/ldbl-128ibm/e_asinl.c
sysdeps/ieee754/ldbl-96/e_asinl.c
sysdeps/x86_64/fpu/multiarch/e_asin.c