glibc/sysdeps/ieee754/flt-32
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
..
e_acosf.c
e_acoshf.c
e_asinf.c Refactor code forcing underflow exceptions. 2015-09-23 22:42:30 +00:00
e_atan2f.c
e_atanhf.c Refactor code forcing underflow exceptions. 2015-09-23 22:42:30 +00:00
e_coshf.c Avoid excess range overflowing results from cosh, sinh, lgamma (bug 18980). 2015-09-18 20:00:48 +00:00
e_exp2f.c Don't use volatile in exp2f. 2015-09-23 22:52:13 +00:00
e_expf.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_fmodf.c
e_gammaf_r.c Refactor code forcing underflow exceptions. 2015-09-23 22:42:30 +00:00
e_hypotf.c Simplify hypotf infinity handling (bug 15918). 2015-09-15 17:24:23 +00:00
e_ilogbf.c
e_j0f.c Avoid uninitialized warnings in Bessel functions. 2015-02-26 21:49:19 +00:00
e_j1f.c Refactor code forcing underflow exceptions. 2015-09-23 22:42:30 +00:00
e_jnf.c Refactor code forcing underflow exceptions. 2015-09-23 22:42:30 +00:00
e_lgammaf_r.c Avoid excess range overflowing results from cosh, sinh, lgamma (bug 18980). 2015-09-18 20:00:48 +00:00
e_log2f.c Work around powerpc32 integer 0 converting to -0 (bug 887, bug 19049, bug 19050). 2015-10-05 17:46:50 +00:00
e_log10f.c Work around powerpc32 integer 0 converting to -0 (bug 887, bug 19049, bug 19050). 2015-10-05 17:46:50 +00:00
e_logf.c Fix catan, catanh, __ieee754_logf in round-downward mode (bug 16799, bug 16800). 2014-04-02 17:41:02 +00:00
e_powf.c Fix powf inaccuracy (bug 18956). 2015-09-26 00:27:06 +00:00
e_rem_pio2f.c Fix leading whitespaces. 2013-06-06 20:36:07 +02:00
e_remainderf.c
e_sinhf.c Refactor code forcing underflow exceptions. 2015-09-23 22:42:30 +00:00
e_sqrtf.c
k_cosf.c Remove trailing whitespace. 2013-06-05 20:44:03 +00:00
k_rem_pio2f.c Use math_narrow_eval more consistently. 2015-09-23 18:14:57 +00:00
k_sinf.c Refactor code forcing underflow exceptions. 2015-09-23 22:42:30 +00:00
k_tanf.c Refactor code forcing underflow exceptions. 2015-09-23 22:42:30 +00:00
lgamma_negf.c Use math_narrow_eval more consistently. 2015-09-23 18:14:57 +00:00
lgamma_productf.c Fix lgamma (negative) inaccuracy (bug 2542, bug 2543, bug 2558). 2015-09-10 22:27:58 +00:00
mpn2flt.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
s_asinhf.c Refactor code forcing underflow exceptions. 2015-09-23 22:42:30 +00:00
s_atanf.c Refactor code forcing underflow exceptions. 2015-09-23 22:42:30 +00:00
s_cbrtf.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
s_ceilf.c
s_copysignf.c Remove trailing whitespace. 2013-06-05 20:44:03 +00:00
s_cosf.c Fix several build failures with GCC6 due to unused static variables. 2015-09-18 20:42:54 +01:00
s_erff.c Work around powerpc32 integer 0 converting to -0 (bug 887, bug 19049, bug 19050). 2015-10-05 17:46:50 +00:00
s_expm1f.c Refactor code forcing underflow exceptions. 2015-09-23 22:42:30 +00:00
s_fabsf.c 2015-05-28 Wilco Dijkstra <wdijkstr@arm.com> 2015-05-28 11:42:55 +01:00
s_finitef.c Reduce number of constants in __finite* (bug 15384). 2015-09-17 16:47:14 +00:00
s_floorf.c
s_fpclassifyf.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
s_frexpf.c Remove trailing whitespace. 2013-06-05 20:44:03 +00:00
s_isinff.c
s_isnanf.c
s_issignalingf.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
s_llrintf.c Fix lrint, llrint, lround, llround missing exceptions for MIPS (bug 16399). 2015-10-09 21:02:19 +00:00
s_llroundf.c Fix lrint, llrint, lround, llround missing exceptions for MIPS (bug 16399). 2015-10-09 21:02:19 +00:00
s_log1pf.c Refactor code forcing underflow exceptions. 2015-09-23 22:42:30 +00:00
s_logbf.c Work around powerpc32 integer 0 converting to -0 (bug 887, bug 19049, bug 19050). 2015-10-05 17:46:50 +00:00
s_lrintf.c Fix lrint, llrint, lround, llround missing exceptions for MIPS (bug 16399). 2015-10-09 21:02:19 +00:00
s_lroundf.c Fix lrint, llrint, lround, llround missing exceptions for MIPS (bug 16399). 2015-10-09 21:02:19 +00:00
s_modff.c
s_nearbyintf.c Fix nearbyint scheduling of arithmetic past fesetenv (bug 15490). 2013-05-19 18:40:25 +00:00
s_nextafterf.c Fix nextafter overflow in non-default rounding modes (bug 16677). 2014-03-11 22:24:00 +00:00
s_remquof.c Fix sign of remquo zero remainder in round-downward mode (bug 17987). 2015-02-17 00:41:50 +00:00
s_rintf.c
s_roundf.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
s_scalblnf.c [BZ #6803] Set errno for scalbln, scalbn 2014-06-20 07:48:20 +05:30
s_scalbnf.c Make scalbn set errno (bug 6803). 2015-09-16 21:11:00 +00:00
s_signbitf.c Use the GCC builtin functions for the non-inlined signbit implementations. 2015-09-18 16:39:08 +01:00
s_sincosf.c Fix sincos errno setting (bug 15467). 2015-02-11 23:17:25 +00:00
s_sinf.c
s_tanf.c
s_tanhf.c Refactor code forcing underflow exceptions. 2015-09-23 22:42:30 +00:00
s_truncf.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
t_exp2f.h Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
w_expf.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