glibc/sysdeps/ieee754/dbl-64
Joseph Myers 06d97e5e61 Fix lrint, llrint, lround, llround missing exceptions for MIPS (bug 16399).
For 32-bit MIPS and some other systems, various of the lrint, llrint,
lround, llround functions can be missing exceptions on overflow
because casts do not (in current GCC) result in the proper
exceptions.  In the MIPS case there are two problems here: MIPS I code
generation uses an assembler macro that doesn't raise exceptions,
while the libgcc conversions of floating-point values to long long
also do not raise "invalid" on all overflow cases (and can raise
spurious "inexact").

This patch adds support in the generic code (only the functions for
which this problem has actually been seen) for forcing the "invalid"
exception in the problem cases, and enables that support for the
affected MIPS cases.

Tested for MIPS; also tested for x86_64 and x86 that installed
stripped shared libraries are unchanged by this patch.

	[BZ #16399]
	* sysdeps/generic/fix-fp-int-convert-overflow.h: New file.
	* sysdeps/ieee754/dbl-64/s_llrint.c: Include <fenv.h>, <limits.h>
	and <fix-fp-int-convert-overflow.h>.
	(__llrint) [FE_INVALID]: Force FE_INVALID exception as needed if
	FIX_DBL_LLONG_CONVERT_OVERFLOW.
	* sysdeps/ieee754/dbl-64/s_llround.c: Include <fenv.h>, <limits.h>
	and <fix-fp-int-convert-overflow.h>.
	(__llround) [FE_INVALID]: Force FE_INVALID exception as needed if
	FIX_DBL_LLONG_CONVERT_OVERFLOW.
	* sysdeps/ieee754/dbl-64/s_lrint.c: Include
	<fix-fp-int-convert-overflow.h>.
	(__lrint) [FE_INVALID]: Force FE_INVALID exception as needed if
	FIX_DBL_LLONG_CONVERT_OVERFLOW.
	* sysdeps/ieee754/dbl-64/s_lround.c: Include
	<fix-fp-int-convert-overflow.h>.
	(__lround) [FE_INVALID]: Force FE_INVALID exception as needed if
	FIX_DBL_LLONG_CONVERT_OVERFLOW.
	* sysdeps/ieee754/flt-32/s_llrintf.c: Include <fenv.h>, <limits.h>
	and <fix-fp-int-convert-overflow.h>.
	(__llrintf) [FE_INVALID]: Force FE_INVALID exception as needed if
	FIX_DBL_LLONG_CONVERT_OVERFLOW.
	* sysdeps/ieee754/flt-32/s_llroundf.c: Include <fenv.h>,
	<limits.h> and <fix-fp-int-convert-overflow.h>.
	(__llroundf) [FE_INVALID]: Force FE_INVALID exception as needed if
	FIX_DBL_LLONG_CONVERT_OVERFLOW.
	* sysdeps/ieee754/flt-32/s_lrintf.c: Include <fenv.h>, <limits.h>
	and <fix-fp-int-convert-overflow.h>.
	(__lrintf) [FE_INVALID]: Force FE_INVALID exception as needed if
	FIX_DBL_LLONG_CONVERT_OVERFLOW.
	* sysdeps/ieee754/flt-32/s_lroundf.c: Include <fenv.h>, <limits.h>
	and <fix-fp-int-convert-overflow.h>.
	(__lroundf) [FE_INVALID]: Force FE_INVALID exception as needed if
	FIX_DBL_LLONG_CONVERT_OVERFLOW.
	* sysdeps/mips/mips32/fpu/fix-fp-int-convert-overflow.h: New file.
2015-10-09 21:02:19 +00:00
..
wordsize-64 Fix lround, llround missing exceptions close to overflow threshold (bug 19088). 2015-10-07 23:45:29 +00:00
asincos.tbl Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
atnat2.h Fix several build failures with GCC6 due to unused static variables. 2015-09-18 20:42:54 +01:00
atnat.h Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
branred.c Remove various ABS macros and replace uses with fabs (or in one case abs) 2015-05-15 11:04:40 +00:00
branred.h Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
dbl2mpn.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
dla.h Remove various ABS macros and replace uses with fabs (or in one case abs) 2015-05-15 11:04:40 +00:00
doasin.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
doasin.h Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
dosincos.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
dosincos.h Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
e_acos.c Update. 2001-03-12 00:04:52 +00:00
e_acosh.c Format floating routines. 2013-10-17 16:03:24 +02:00
e_asin.c Refactor code forcing underflow exceptions. 2015-09-23 22:42:30 +00:00
e_atan2.c Fix dbl-64 atan2 in non-default rounding modes (bug 18210, bug 18211). 2015-04-08 17:32:17 +00:00
e_atanh.c Refactor code forcing underflow exceptions. 2015-09-23 22:42:30 +00:00
e_cosh.c Avoid excess range overflowing results from cosh, sinh, lgamma (bug 18980). 2015-09-18 20:00:48 +00:00
e_exp2.c Refactor code forcing underflow exceptions. 2015-09-23 22:42:30 +00:00
e_exp10.c This patch renames all uses of __isinf*, __isnan*, __finite* and __signbit* to use standard C99 macros. This has no effect on generated code. 2015-06-03 15:41:36 +01:00
e_exp.c Refactor code forcing underflow exceptions. 2015-09-23 22:42:30 +00:00
e_fmod.c Use glibc_likely instead __builtin_expect. 2014-02-10 15:07:12 +01:00
e_gamma_r.c Refactor code forcing underflow exceptions. 2015-09-23 22:42:30 +00:00
e_hypot.c Fix hypot missing underflows (bug 18803). 2015-09-24 23:43:57 +00:00
e_ilogb.c Format floating routines. 2013-10-17 16:03:24 +02:00
e_j0.c Avoid uninitialized warnings in Bessel functions. 2015-02-26 21:49:19 +00:00
e_j1.c Refactor code forcing underflow exceptions. 2015-09-23 22:42:30 +00:00
e_jn.c Refactor code forcing underflow exceptions. 2015-09-23 22:42:30 +00:00
e_lgamma_r.c Avoid excess range overflowing results from cosh, sinh, lgamma (bug 18980). 2015-09-18 20:00:48 +00:00
e_log2.c Work around powerpc32 integer 0 converting to -0 (bug 887, bug 19049, bug 19050). 2015-10-05 17:46:50 +00:00
e_log10.c Work around powerpc32 integer 0 converting to -0 (bug 887, bug 19049, bug 19050). 2015-10-05 17:46:50 +00:00
e_log.c Remove various ABS macros and replace uses with fabs (or in one case abs) 2015-05-15 11:04:40 +00:00
e_pow.c Fix pow missing underflows (bug 18825). 2015-09-25 22:29:10 +00:00
e_rem_pio2.c Format floating routines. 2013-10-17 16:03:24 +02:00
e_remainder.c Remove various ABS macros and replace uses with fabs (or in one case abs) 2015-05-15 11:04:40 +00:00
e_sinh.c Refactor code forcing underflow exceptions. 2015-09-23 22:42:30 +00:00
e_sqrt.c Fix libm fegetround namespace (bug 17748). 2015-01-02 20:44:42 +00:00
gamma_product.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
gamma_productf.c Use math_narrow_eval more consistently. 2015-09-23 18:14:57 +00:00
halfulp.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
k_cos.c Update. 2001-03-12 00:04:52 +00:00
k_rem_pio2.c Use math_narrow_eval more consistently. 2015-09-23 18:14:57 +00:00
k_sin.c Update. 2001-03-12 00:04:52 +00:00
k_tan.c Replace sysdeps/ieee754/dbl-64/k_tan.c with empty file 2012-02-26 16:10:46 +01:00
lgamma_neg.c Use math_narrow_eval more consistently. 2015-09-23 18:14:57 +00:00
lgamma_product.c Fix lgamma (negative) inaccuracy (bug 2542, bug 2543, bug 2558). 2015-09-10 22:27:58 +00:00
Makefile powerpc: Fix incorrect results for pow when using FMA 2015-03-10 09:38:54 -04:00
MathLib.h Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
mpa-arch.h Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
mpa.c Fix sysdeps/ieee754/dbl-64/mpa.c for -Wuninitialized. 2015-05-21 23:05:45 +00:00
mpa.h Remove various ABS macros and replace uses with fabs (or in one case abs) 2015-05-15 11:04:40 +00:00
mpatan2.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
mpatan.c Remove various ABS macros and replace uses with fabs (or in one case abs) 2015-05-15 11:04:40 +00:00
mpatan.h Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
mpexp.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
mplog.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
mpn2dbl.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
mpsqrt.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
mpsqrt.h Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
mptan.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
mydefs.h Remove various ABS macros and replace uses with fabs (or in one case abs) 2015-05-15 11:04:40 +00:00
powtwo.tbl Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
root.tbl Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
s_asinh.c Refactor code forcing underflow exceptions. 2015-09-23 22:42:30 +00:00
s_atan.c Refactor code forcing underflow exceptions. 2015-09-23 22:42:30 +00:00
s_cbrt.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
s_ceil.c Format floating routines. 2013-10-17 16:03:24 +02:00
s_copysign.c Format floating routines. 2013-10-17 16:03:24 +02:00
s_cos.c Update. 2001-03-12 00:04:52 +00:00
s_erf.c Work around powerpc32 integer 0 converting to -0 (bug 887, bug 19049, bug 19050). 2015-10-05 17:46:50 +00:00
s_expm1.c Refactor code forcing underflow exceptions. 2015-09-23 22:42:30 +00:00
s_fabs.c 2015-05-28 Wilco Dijkstra <wdijkstr@arm.com> 2015-05-28 11:42:55 +01:00
s_finite.c Reduce number of constants in __finite* (bug 15384). 2015-09-17 16:47:14 +00:00
s_floor.c Format floating routines. 2013-10-17 16:03:24 +02:00
s_fma.c Refactor code forcing underflow exceptions. 2015-09-23 22:42:30 +00:00
s_fmaf.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
s_fpclassify.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
s_frexp.c Format floating routines. 2013-10-17 16:03:24 +02:00
s_isinf.c Format floating routines. 2013-10-17 16:03:24 +02:00
s_isnan.c Format floating routines. 2013-10-17 16:03:24 +02:00
s_issignaling.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
s_llrint.c Fix lrint, llrint, lround, llround missing exceptions for MIPS (bug 16399). 2015-10-09 21:02:19 +00:00
s_llround.c Fix lrint, llrint, lround, llround missing exceptions for MIPS (bug 16399). 2015-10-09 21:02:19 +00:00
s_log1p.c Refactor code forcing underflow exceptions. 2015-09-23 22:42:30 +00:00
s_logb.c Work around powerpc32 integer 0 converting to -0 (bug 887, bug 19049, bug 19050). 2015-10-05 17:46:50 +00:00
s_lrint.c Fix lrint, llrint, lround, llround missing exceptions for MIPS (bug 16399). 2015-10-09 21:02:19 +00:00
s_lround.c Fix lrint, llrint, lround, llround missing exceptions for MIPS (bug 16399). 2015-10-09 21:02:19 +00:00
s_modf.c Use glibc_likely instead __builtin_expect. 2014-02-10 15:07:12 +01:00
s_nearbyint.c Format floating routines. 2013-10-17 16:03:24 +02:00
s_nexttoward.c
s_remquo.c Fix sign of remquo zero remainder in round-downward mode (bug 17987). 2015-02-17 00:41:50 +00:00
s_rint.c Format floating routines. 2013-10-17 16:03:24 +02:00
s_round.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
s_scalbln.c [BZ #6803] Set errno for scalbln, scalbn 2014-06-20 07:48:20 +05:30
s_scalbn.c Make scalbn set errno (bug 6803). 2015-09-16 21:11:00 +00:00
s_signbit.c Use the GCC builtin functions for the non-inlined signbit implementations. 2015-09-18 16:39:08 +01:00
s_sin.c Refactor code forcing underflow exceptions. 2015-09-23 22:42:30 +00:00
s_sincos.c Since we now inline isinf, isnan and isfinite in math.h, replace uses of __isinf_ns(l/f) 2015-09-18 20:51:52 +01:00
s_tan.c Refactor code forcing underflow exceptions. 2015-09-23 22:42:30 +00:00
s_tanh.c Refactor code forcing underflow exceptions. 2015-09-23 22:42:30 +00:00
s_trunc.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
sincos32.c Remove various ABS macros and replace uses with fabs (or in one case abs) 2015-05-15 11:04:40 +00:00
sincos32.h Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
sincostab.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
slowexp.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
slowpow.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
t_exp2.h
t_exp.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
uasncs.h Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
uatan.tbl Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
uexp.h Fix several build failures with GCC6 due to unused static variables. 2015-09-18 20:42:54 +01:00
uexp.tbl Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
ulog.h Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
ulog.tbl Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
upow.h Fix several build failures with GCC6 due to unused static variables. 2015-09-18 20:42:54 +01:00
upow.tbl Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
urem.h Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
uroot.h Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
usncs.h Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
utan.h Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
utan.tbl Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
w_exp.c This patch renames all uses of __isinf*, __isnan*, __finite* and __signbit* to use standard C99 macros. This has no effect on generated code. 2015-06-03 15:41:36 +01:00
x2y2m1.c Fix clog, clog10 inaccuracy (bug 19016). 2015-09-28 22:11:22 +00:00
x2y2m1f.c Fix clog, clog10 inaccuracy (bug 19016). 2015-09-28 22:11:22 +00:00