glibc/sysdeps/i386/fpu
Joseph Myers 5146356f5a Add fesetexcept.
TS 18661-1 defines an fesetexcept function for setting floating-point
exception flags without the side-effect of causing enabled traps to be
taken.

This patch series implements this function for glibc.  The present
patch adds the fallback stub implementation, x86 and x86_64
implementations, documentation, tests and ABI baseline updates.  The
remaining patches, some of them untested, add implementations for
other architectures.  The implementations generally follow those of
the fesetexceptflag function.

As for fesetexceptflag, the approach taken for architectures where
setting flags causes enabled traps to be taken is to set the flags
(and potentially cause traps) rather than refusing to set the flags
and returning an error.  Since ISO C and TS 18661 provide no way to
enable traps, this is formally in accordance with the standards.

The NEWS entry should be considered a placeholder, since this patch
series is intended to be followed by further such series adding other
TS 18661-1 features, so that the NEWS entry would end up looking more
like

* New <fenv.h> features from TS 18661-1:2014 are added to libm: the
  fesetexcept, fetestexceptflag, fegetmode and fesetmode functions,
  the femode_t type and the FE_DFL_MODE macro.

with hopefully more such entries for other features, rather than
having an entry for a single function in the end.

I believe we have consensus for adding TS 18661-1 interfaces as per
<https://sourceware.org/ml/libc-alpha/2016-06/msg00421.html>.

Tested for x86_64, x86, mips64 (hard float, and soft float to test the
fallback version), arm (hard float) and powerpc (hard float, soft
float and e500).

	* math/fesetexcept.c: New file.
	* sysdeps/i386/fpu/fesetexcept.c: Likewise.
	* sysdeps/x86_64/fpu/fesetexcept.c: Likewise.
	* math/fenv.h: Define
	__GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION and include
	<bits/libc-header-start.h> instead of including <features.h>.
	[__GLIBC_USE (IEC_60559_BFP_EXT)] (fesetexcept): New function
	declaration.
	* manual/arith.texi (fesetexcept): Document function.
	* math/Versions (fesetexcept): New libm symbol at version
	GLIBC_2.25.
	* math/Makefile (libm-support): Add fesetexcept.
	(tests): Add test-fesetexcept and test-fesetexcept-traps.
	* math/test-fesetexcept.c: New file.
	* math/test-fesetexcept-traps.c: Likewise.
	* sysdeps/nacl/libm.abilist: Update.
	* sysdeps/unix/sysv/linux/aarch64/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/alpha/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/arm/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/hppa/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/i386/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/ia64/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/microblaze/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips32/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips64/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/nios2/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sh/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libm.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libm.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/tile/tilepro/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/64/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist: Likewise.
2016-08-16 16:16:10 +00:00
..
doasin.c Update. 2001-03-12 00:04:52 +00:00
e_acos.S Fix x86 acos near 1 (bug 13942). 2012-04-30 18:56:39 +00:00
e_acosf.S Fix acos (-1) in round-downwards mode on x86 (bug 14034). 2012-04-30 09:38:06 +00:00
e_acosh.S Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
e_acoshf.S Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
e_acoshl.S Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
e_acosl.c Fix x86 acos near 1 (bug 13942). 2012-04-30 18:56:39 +00:00
e_asin.S Refactor i386 libm code forcing underflow exceptions. 2015-09-24 21:41:00 +00:00
e_asinf.S Refactor i386 libm code forcing underflow exceptions. 2015-09-24 21:41:00 +00:00
e_atan2.S Refactor i386 libm code forcing underflow exceptions. 2015-09-24 21:41:00 +00:00
e_atan2f.S Refactor i386 libm code forcing underflow exceptions. 2015-09-24 21:41:00 +00:00
e_atan2l.c Optimize libm 2011-10-12 11:27:51 -04:00
e_atanh.S Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
e_atanhf.S Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
e_atanhl.S Fix i386 atanhl (sNaN) (bug 20219). 2016-06-07 23:08:32 +00:00
e_exp2.S Avoid excess range in results from i386 exp, hypot, pow functions (bug 18980). 2015-09-18 21:53:22 +00:00
e_exp2f.S Avoid excess range in results from i386 exp, hypot, pow functions (bug 18980). 2015-09-18 21:53:22 +00:00
e_exp2l.S Refactor i386 libm code forcing underflow exceptions. 2015-09-24 21:41:00 +00:00
e_exp10.S Avoid excess range in results from i386 exp, hypot, pow functions (bug 18980). 2015-09-18 21:53:22 +00:00
e_exp10f.S Avoid excess range in results from i386 exp, hypot, pow functions (bug 18980). 2015-09-18 21:53:22 +00:00
e_exp10l.S Fix exp10 inaccuracy and exceptions (bugs 13884, 13914). 2012-05-06 18:23:44 +00:00
e_exp.S Avoid excess range in results from i386 exp, hypot, pow functions (bug 18980). 2015-09-18 21:53:22 +00:00
e_expf.S Avoid excess range in results from i386 exp, hypot, pow functions (bug 18980). 2015-09-18 21:53:22 +00:00
e_expl.S Fix i386/x86_64 expl, exp10l, expm1l for sNaN input (bug 20226). 2016-06-08 21:55:06 +00:00
e_fmod.S Optimize libm 2011-10-12 11:27:51 -04:00
e_fmodf.S Optimize libm 2011-10-12 11:27:51 -04:00
e_fmodl.c Optimize libm 2011-10-12 11:27:51 -04:00
e_hypot.S Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
e_hypotf.S Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
e_ilogb.S Remove useless __ilogb*_finite aliases 2012-04-18 00:40:13 +02:00
e_ilogbf.S Remove useless __ilogb*_finite aliases 2012-04-18 00:40:13 +02:00
e_ilogbl.S Remove useless __ilogb*_finite aliases 2012-04-18 00:40:13 +02:00
e_log2.S Fix log2 (1) in round-downward mode (bug 17042). 2014-06-10 12:07:15 +00:00
e_log2f.S Fix log2 (1) in round-downward mode (bug 17042). 2014-06-10 12:07:15 +00:00
e_log2l.S Fix i386/x86_64 log2l (sNaN) (bug 20235). 2016-06-09 18:04:30 +00:00
e_log10.S Fix log10 (1) in round-downward mode (bug 16977). 2014-05-23 12:07:50 +00:00
e_log10f.S Fix log10 (1) in round-downward mode (bug 16977). 2014-05-23 12:07:50 +00:00
e_log10l.S Fix i386/x86_64 log10l (sNaN) (bug 20228). 2016-06-08 22:59:18 +00:00
e_log.S Fix i386/x86_64 log* (1) zero sign for -ffinite-math-only (bug 19213). 2015-11-05 21:56:31 +00:00
e_logf.S Fix i386/x86_64 log* (1) zero sign for -ffinite-math-only (bug 19213). 2015-11-05 21:56:31 +00:00
e_logl.S Fix i386/x86_64 logl (sNaN) (bug 20227). 2016-06-08 22:24:06 +00:00
e_pow.S Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
e_powf.S Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
e_powl.S Fix x86_64 / x86 powl inaccuracy for integer exponents (bug 19848). 2016-03-24 01:32:52 +00:00
e_rem_pio2.c Update. 1999-07-14 00:54:57 +00:00
e_remainder.S Optimize libm 2011-10-12 11:27:51 -04:00
e_remainderf.S Optimize libm 2011-10-12 11:27:51 -04:00
e_remainderl.S Optimize libm 2011-10-12 11:27:51 -04:00
e_scalb.S Avoid excess range in results from i386 scalb functions (bug 18981). 2015-09-18 20:34:59 +00:00
e_scalbf.S Avoid excess range in results from i386 scalb functions (bug 18981). 2015-09-18 20:34:59 +00:00
e_scalbl.S Fix i386/x86_64 scalbl with sNaN input (bug 20296). 2016-06-23 22:17:41 +00:00
e_sqrt.S Fix x86 sqrt rounding (bug 14032). 2013-11-29 16:31:16 +00:00
e_sqrtf.S Optimize libm 2011-10-12 11:27:51 -04:00
e_sqrtl.c Optimize libm 2011-10-12 11:27:51 -04:00
fclrexcpt.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
fedisblxcpt.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
feenablxcpt.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
fegetenv.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
fegetexcept.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
fegetround.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
feholdexcpt.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
fenv_private.h Fix yn overflow handling in non-default rounding modes (bug 16561, bug 16562). 2014-06-27 14:52:13 +00:00
fesetenv.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
fesetexcept.c Add fesetexcept. 2016-08-16 16:16:10 +00:00
fesetround.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
feupdateenv.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
fgetexcptflg.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
fraiseexcpt.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
fsetexcptflg.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
ftestexcept.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
halfulp.c Update. 2001-03-12 00:04:52 +00:00
i386-math-asm.h Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
Implies Use x86_64 fpu/bits/fenv.h for i386 and x86_64 2012-06-06 10:13:19 -07:00
k_rem_pio2l.c Update. 1999-07-14 00:54:57 +00:00
libm-test-ulps i386: move ULPs to i686/multiarch and regenerate new ones for i386 2015-12-20 16:36:45 +01:00
math_private.h Fix math_private.h multiple include guards. 2015-11-20 23:46:23 +00:00
math-tests.h Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
mpatan2.c Update. 2001-03-12 00:04:52 +00:00
mpatan.c Update. 2001-03-12 00:04:52 +00:00
mpexp.c Update. 2001-03-12 00:04:52 +00:00
mplog.c Update. 2001-03-12 00:04:52 +00:00
mpsqrt.c Update. 2001-03-12 00:04:52 +00:00
s_asinh.S Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
s_asinhf.S Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
s_asinhl.S Fix i386 asinhl (sNaN) (bug 20218). 2016-06-07 22:54:58 +00:00
s_atan.S Refactor i386 libm code forcing underflow exceptions. 2015-09-24 21:41:00 +00:00
s_atanf.S Refactor i386 libm code forcing underflow exceptions. 2015-09-24 21:41:00 +00:00
s_atanl.c Update. 2001-05-06 17:03:45 +00:00
s_cbrt.S Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
s_cbrtf.S Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
s_cbrtl.S Fix i386 cbrtl (sNaN) (bug 20224). 2016-06-08 21:02:40 +00:00
s_ceil.S Avoid "inexact" exceptions in i386/x86_64 ceil functions (bug 15479). 2016-06-27 17:24:30 +00:00
s_ceilf.S Avoid "inexact" exceptions in i386/x86_64 ceil functions (bug 15479). 2016-06-27 17:24:30 +00:00
s_ceill.S Avoid "inexact" exceptions in i386/x86_64 ceil functions (bug 15479). 2016-06-27 17:24:30 +00:00
s_copysign.S Update. 1999-07-14 00:54:57 +00:00
s_copysignf.S Update. 1999-07-14 00:54:57 +00:00
s_copysignl.S Update. 1999-07-14 00:54:57 +00:00
s_expm1.S Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
s_expm1f.S Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
s_expm1l.S Fix x86/x86_64 expm1l inaccuracy and exceptions (bugs 13885, 13923). 2012-05-07 19:13:08 +00:00
s_fabs.S Update. 2002-04-03 00:36:12 +00:00
s_fabsf.S Update. 2002-04-03 00:36:12 +00:00
s_fabsl.S Update. 2002-04-03 00:36:12 +00:00
s_fdim.c Fix i386 fdim double rounding (bug 20255). 2016-06-14 16:41:50 +00:00
s_finite.S Update. 2002-09-10 01:40:26 +00:00
s_finitef.S Update. 2002-09-10 01:40:26 +00:00
s_finitel.S Update. 2002-09-10 01:40:26 +00:00
s_floor.S Avoid "inexact" exceptions in i386/x86_64 floor functions (bug 15479). 2016-06-27 17:25:47 +00:00
s_floorf.S Avoid "inexact" exceptions in i386/x86_64 floor functions (bug 15479). 2016-06-27 17:25:47 +00:00
s_floorl.S Avoid "inexact" exceptions in i386/x86_64 floor functions (bug 15479). 2016-06-27 17:25:47 +00:00
s_fmax.S Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
s_fmaxf.S Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
s_fmaxl.S Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
s_fmin.S Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
s_fminf.S Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
s_fminl.S Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
s_fpclassifyl.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
s_frexp.S Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
s_frexpf.S Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
s_frexpl.S Fix frexp (NaN) (bug 20250). 2016-06-13 17:27:19 +00:00
s_isinfl.c Use <> for math.h and math_private.h everywhere. 2012-03-09 16:09:10 -08:00
s_isnanl.c Use <> for math.h and math_private.h everywhere. 2012-03-09 16:09:10 -08:00
s_llrint.S Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
s_llrintf.S Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
s_llrintl.S Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
s_log1p.S Refactor i386 libm code forcing underflow exceptions. 2015-09-24 21:41:00 +00:00
s_log1pf.S Refactor i386 libm code forcing underflow exceptions. 2015-09-24 21:41:00 +00:00
s_log1pl.S Fix i386/x86_64 log1pl (sNaN) (bug 20229). 2016-06-08 23:11:42 +00:00
s_logb.S Update. 1999-07-14 00:54:57 +00:00
s_logbf.S Update. 1999-07-14 00:54:57 +00:00
s_logbl.c Update. 2001-09-18 14:13:20 +00:00
s_lrint.S Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
s_lrintf.S Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
s_lrintl.S Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
s_nearbyint.S Simplify x86 nearbyint functions. 2016-06-22 15:40:30 +00:00
s_nearbyintf.S Simplify x86 nearbyint functions. 2016-06-22 15:40:30 +00:00
s_nearbyintl.S Simplify x86 nearbyint functions. 2016-06-22 15:40:30 +00:00
s_nextafterl.c Fix x86/x86_64 nextafterl incrementing negative subnormals (bug 20205). 2016-06-03 21:30:12 +00:00
s_nexttoward.c Make nextafter, nexttoward set errno (bug 6799). 2015-11-02 18:54:19 +00:00
s_nexttowardf.c Make nextafter, nexttoward set errno (bug 6799). 2015-11-02 18:54:19 +00:00
s_remquo.S Remove remaining bounded-pointers support from i386 .S files. 2013-02-21 22:21:52 +00:00
s_remquof.S Remove remaining bounded-pointers support from i386 .S files. 2013-02-21 22:21:52 +00:00
s_remquol.S Remove remaining bounded-pointers support from i386 .S files. 2013-02-21 22:21:52 +00:00
s_rint.S Update. 1999-07-14 00:54:57 +00:00
s_rintf.S Update. 1999-07-14 00:54:57 +00:00
s_rintl.c Update. 2001-09-18 14:13:20 +00:00
s_scalbln.c Update. 1999-07-14 00:54:57 +00:00
s_scalblnf.c Update. 1999-07-14 00:54:57 +00:00
s_scalblnl.c Update. 1999-07-14 00:54:57 +00:00
s_scalbn.S Avoid excess range in results from i386 scalb functions (bug 18981). 2015-09-18 20:34:59 +00:00
s_scalbnf.S Avoid excess range in results from i386 scalb functions (bug 18981). 2015-09-18 20:34:59 +00:00
s_scalbnl.S Make scalbn set errno (bug 6803). 2015-09-16 21:11:00 +00:00
s_significand.S Update. 1999-07-14 00:54:57 +00:00
s_significandf.S Update. 1999-07-14 00:54:57 +00:00
s_significandl.c (__significandl): Really return significand and not the exponent. 2003-01-07 07:42:11 +00:00
s_trunc.S Avoid "inexact" exceptions in i386/x86_64 trunc functions (bug 15479). 2016-06-27 17:26:52 +00:00
s_truncf.S Avoid "inexact" exceptions in i386/x86_64 trunc functions (bug 15479). 2016-06-27 17:26:52 +00:00
s_truncl.S Avoid "inexact" exceptions in i386/x86_64 trunc functions (bug 15479). 2016-06-27 17:26:52 +00:00
slowexp.c Update. 2001-03-12 00:04:52 +00:00
slowpow.c Update. 2001-03-12 00:04:52 +00:00
t_exp.c Update. 1999-07-14 00:54:57 +00:00
Versions Update. 2000-06-14 00:55:24 +00:00
w_sqrt.c Fix x86 sqrt rounding (bug 14032). 2013-11-29 16:31:16 +00:00