Commit Graph

12 Commits

Author SHA1 Message Date
Wilco Dijkstra
220622dde5 Add libm_alias_finite for _finite symbols
This patch adds a new macro, libm_alias_finite, to define all _finite
symbol.  It sets all _finite symbol as compat symbol based on its first
version (obtained from the definition at built generated first-versions.h).

The <fn>f128_finite symbols were introduced in GLIBC 2.26 and so need
special treatment in code that is shared between long double and float128.
It is done by adding a list, similar to internal symbol redifinition,
on sysdeps/ieee754/float128/float128_private.h.

Alpha also needs some tricky changes to ensure we still emit 2 compat
symbols for sqrt(f).

Passes buildmanyglibc.

Co-authored-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Reviewed-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
2020-01-03 10:02:04 -03:00
Joseph Myers
8f5b00d375 Move math_check_force_underflow macros to separate math-underflow.h.
This patch continues cleaning up math_private.h by moving the
math_check_force_underflow set of macros to a separate header
math-underflow.h.

This header is included by the files that need it rather than from
math_private.h.  Moving these macros to a separate file removes the
math_private.h uses of macros from float.h, so the inclusion of
float.h in math_private.h is also removed; files that were depending
on that inclusion are fixed to include float.h directly.  The
inclusion of math-barriers.h from math_private.h will be removed in a
separate patch.

Tested for x86_64 and x86.  Also tested with build-many-glibcs.py that
installed stripped shared libraries are unchanged by this patch.

	* math/math-underflow.h: New file.
	* sysdeps/generic/math_private.h: Do not include <float.h>.
	(fabs_tg): Remove macro.  Moved to math-underflow.h.
	(min_of_type_f): Likewise.
	(min_of_type_): Likewise.
	(min_of_type_l): Likewise.
	(min_of_type_f128): Likewise.
	(min_of_type): Likewise.
	(math_check_force_underflow): Likewise.
	(math_check_force_underflow_nonneg): Likewise.
	(math_check_force_underflow_complex): Likewise.
	* math/e_exp2_template.c: Include <math-underflow.h>.
	* math/k_casinh_template.c: Likewise.
	* math/s_catan_template.c: Likewise.
	* math/s_catanh_template.c: Likewise.
	* math/s_ccosh_template.c: Likewise.
	* math/s_cexp_template.c: Likewise.
	* math/s_clog10_template.c: Likewise.
	* math/s_clog_template.c: Likewise.
	* math/s_csin_template.c: Likewise.
	* math/s_csinh_template.c: Likewise.
	* math/s_csqrt_template.c: Likewise.
	* math/s_ctan_template.c: Likewise.
	* math/s_ctanh_template.c: Likewise.
	* sysdeps/ieee754/dbl-64/e_asin.c: Likewise.
	* sysdeps/ieee754/dbl-64/e_atanh.c: Likewise.
	* sysdeps/ieee754/dbl-64/e_exp2.c: Likewise.
	* sysdeps/ieee754/dbl-64/e_gamma_r.c: Likewise.
	* sysdeps/ieee754/dbl-64/e_hypot.c: Likewise.
	* sysdeps/ieee754/dbl-64/e_j1.c: Likewise.
	* sysdeps/ieee754/dbl-64/e_jn.c: Likewise.
	* sysdeps/ieee754/dbl-64/e_pow.c: Likewise.
	* sysdeps/ieee754/dbl-64/e_sinh.c: Likewise.
	* sysdeps/ieee754/dbl-64/s_asinh.c: Likewise.
	* sysdeps/ieee754/dbl-64/s_atan.c: Likewise.
	* sysdeps/ieee754/dbl-64/s_erf.c: Likewise.
	* sysdeps/ieee754/dbl-64/s_expm1.c: Likewise.
	* sysdeps/ieee754/dbl-64/s_log1p.c: Likewise.
	* sysdeps/ieee754/dbl-64/s_sin.c: Likewise.
	* sysdeps/ieee754/dbl-64/s_sincos.c: Likewise.
	* sysdeps/ieee754/dbl-64/s_tan.c: Likewise.
	* sysdeps/ieee754/dbl-64/s_tanh.c: Likewise.
	* sysdeps/ieee754/flt-32/e_asinf.c: Likewise.
	* sysdeps/ieee754/flt-32/e_atanhf.c: Likewise.
	* sysdeps/ieee754/flt-32/e_gammaf_r.c: Likewise.
	* sysdeps/ieee754/flt-32/e_j1f.c: Likewise.
	* sysdeps/ieee754/flt-32/e_jnf.c: Likewise.
	* sysdeps/ieee754/flt-32/e_sinhf.c: Likewise.
	* sysdeps/ieee754/flt-32/k_sinf.c: Likewise.
	* sysdeps/ieee754/flt-32/k_tanf.c: Likewise.
	* sysdeps/ieee754/flt-32/s_asinhf.c: Likewise.
	* sysdeps/ieee754/flt-32/s_atanf.c: Likewise.
	* sysdeps/ieee754/flt-32/s_erff.c: Likewise.
	* sysdeps/ieee754/flt-32/s_expm1f.c: Likewise.
	* sysdeps/ieee754/flt-32/s_log1pf.c: Likewise.
	* sysdeps/ieee754/flt-32/s_tanhf.c: Likewise.
	* sysdeps/ieee754/ldbl-128/e_asinl.c: Likewise.
	* sysdeps/ieee754/ldbl-128/e_atanhl.c: Likewise.
	* sysdeps/ieee754/ldbl-128/e_expl.c: Likewise.
	* sysdeps/ieee754/ldbl-128/e_gammal_r.c: Likewise.
	* sysdeps/ieee754/ldbl-128/e_hypotl.c: Likewise.
	* sysdeps/ieee754/ldbl-128/e_j1l.c: Likewise.
	* sysdeps/ieee754/ldbl-128/e_jnl.c: Likewise.
	* sysdeps/ieee754/ldbl-128/e_sinhl.c: Likewise.
	* sysdeps/ieee754/ldbl-128/k_sincosl.c: Likewise.
	* sysdeps/ieee754/ldbl-128/k_sinl.c: Likewise.
	* sysdeps/ieee754/ldbl-128/k_tanl.c: Likewise.
	* sysdeps/ieee754/ldbl-128/s_asinhl.c: Likewise.
	* sysdeps/ieee754/ldbl-128/s_atanl.c: Likewise.
	* sysdeps/ieee754/ldbl-128/s_erfl.c: Likewise.
	* sysdeps/ieee754/ldbl-128/s_expm1l.c: Likewise.
	* sysdeps/ieee754/ldbl-128/s_log1pl.c: Likewise.
	* sysdeps/ieee754/ldbl-128/s_tanhl.c: Likewise.
	* sysdeps/ieee754/ldbl-128ibm/e_asinl.c: Likewise.
	* sysdeps/ieee754/ldbl-128ibm/e_atanhl.c: Likewise.
	* sysdeps/ieee754/ldbl-128ibm/e_gammal_r.c: Likewise.
	* sysdeps/ieee754/ldbl-128ibm/e_hypotl.c: Likewise.
	* sysdeps/ieee754/ldbl-128ibm/e_j1l.c: Likewise.
	* sysdeps/ieee754/ldbl-128ibm/e_jnl.c: Likewise.
	* sysdeps/ieee754/ldbl-128ibm/e_powl.c: Likewise.
	* sysdeps/ieee754/ldbl-128ibm/e_sinhl.c: Likewise.
	* sysdeps/ieee754/ldbl-128ibm/k_sincosl.c: Likewise.
	* sysdeps/ieee754/ldbl-128ibm/k_sinl.c: Likewise.
	* sysdeps/ieee754/ldbl-128ibm/k_tanl.c: Likewise.
	* sysdeps/ieee754/ldbl-128ibm/s_asinhl.c: Likewise.
	* sysdeps/ieee754/ldbl-128ibm/s_atanl.c: Likewise.
	* sysdeps/ieee754/ldbl-128ibm/s_erfl.c: Likewise.
	* sysdeps/ieee754/ldbl-128ibm/s_fmal.c: Likewise.
	* sysdeps/ieee754/ldbl-128ibm/s_tanhl.c: Likewise.
	* sysdeps/ieee754/ldbl-96/e_asinl.c: Likewise.
	* sysdeps/ieee754/ldbl-96/e_atanhl.c: Likewise.
	* sysdeps/ieee754/ldbl-96/e_gammal_r.c: Likewise.
	* sysdeps/ieee754/ldbl-96/e_hypotl.c: Likewise.
	* sysdeps/ieee754/ldbl-96/e_j1l.c: Likewise.
	* sysdeps/ieee754/ldbl-96/e_jnl.c: Likewise.
	* sysdeps/ieee754/ldbl-96/e_sinhl.c: Likewise.
	* sysdeps/ieee754/ldbl-96/k_sinl.c: Likewise.
	* sysdeps/ieee754/ldbl-96/k_tanl.c: Likewise.
	* sysdeps/ieee754/ldbl-96/s_asinhl.c: Likewise.
	* sysdeps/ieee754/ldbl-96/s_erfl.c: Likewise.
	* sysdeps/ieee754/ldbl-96/s_tanhl.c: Likewise.
	* sysdeps/powerpc/fpu/e_hypot.c: Likewise.
	* sysdeps/x86/fpu/powl_helper.c: Likewise.
	* sysdeps/ieee754/dbl-64/s_nextup.c: Include <float.h>.
	* sysdeps/ieee754/flt-32/s_nextupf.c: Likewise.
	* sysdeps/ieee754/ldbl-128/s_nextupl.c: Likewise.
	* sysdeps/ieee754/ldbl-128ibm/s_nextupl.c: Likewise.
	* sysdeps/ieee754/ldbl-96/s_nextupl.c: Likewise.
2018-05-10 00:53:04 +00:00
Joseph Myers
d96164c330 Refactor code forcing underflow exceptions.
Various floating-point functions have code to force underflow
exceptions if a tiny result was computed in a way that might not have
resulted in such exceptions even though the result is inexact.  This
typically uses math_force_eval to ensure that the underflowing
expression is evaluated, but sometimes uses volatile.

This patch refactors such code to use three new macros
math_check_force_underflow, math_check_force_underflow_nonneg and
math_check_force_underflow_complex (which in turn use
math_force_eval).  In the limited number of cases not suited to a
simple conversion to these macros, existing uses of volatile are
changed to use math_force_eval instead.  The converted code does not
always execute exactly the same sequence of operations as the original
code, but the overall effects should be the same.

Tested for x86_64, x86, mips64 and powerpc.

	* sysdeps/generic/math_private.h (fabs_tg): New macro.
	(min_of_type): Likewise.
	(math_check_force_underflow): Likewise.
	(math_check_force_underflow_nonneg): Likewise.
	(math_check_force_underflow_complex): Likewise.
	* math/e_exp2l.c (__ieee754_exp2l): Use
	math_check_force_underflow_nonneg.
	* math/k_casinh.c (__kernel_casinh): Likewise.
	* math/k_casinhf.c (__kernel_casinhf): Likewise.
	* math/k_casinhl.c (__kernel_casinhl): Likewise.
	* math/s_catan.c (__catan): Use
	math_check_force_underflow_complex.
	* math/s_catanf.c (__catanf): Likewise.
	* math/s_catanh.c (__catanh): Likewise.
	* math/s_catanhf.c (__catanhf): Likewise.
	* math/s_catanhl.c (__catanhl): Likewise.
	* math/s_catanl.c (__catanl): Likewise.
	* math/s_ccosh.c (__ccosh): Likewise.
	* math/s_ccoshf.c (__ccoshf): Likewise.
	* math/s_ccoshl.c (__ccoshl): Likewise.
	* math/s_cexp.c (__cexp): Likewise.
	* math/s_cexpf.c (__cexpf): Likewise.
	* math/s_cexpl.c (__cexpl): Likewise.
	* math/s_clog.c (__clog): Use math_check_force_underflow_nonneg.
	* math/s_clog10.c (__clog10): Likewise.
	* math/s_clog10f.c (__clog10f): Likewise.
	* math/s_clog10l.c (__clog10l): Likewise.
	* math/s_clogf.c (__clogf): Likewise.
	* math/s_clogl.c (__clogl): Likewise.
	* math/s_csin.c (__csin): Use math_check_force_underflow_complex.
	* math/s_csinf.c (__csinf): Likewise.
	* math/s_csinh.c (__csinh): Likewise.
	* math/s_csinhf.c (__csinhf): Likewise.
	* math/s_csinhl.c (__csinhl): Likewise.
	* math/s_csinl.c (__csinl): Likewise.
	* math/s_csqrt.c (__csqrt): Use math_check_force_underflow.
	* math/s_csqrtf.c (__csqrtf): Likewise.
	* math/s_csqrtl.c (__csqrtl): Likewise.
	* math/s_ctan.c (__ctan): Use math_check_force_underflow_complex.
	* math/s_ctanf.c (__ctanf): Likewise.
	* math/s_ctanh.c (__ctanh): Likewise.
	* math/s_ctanhf.c (__ctanhf): Likewise.
	* math/s_ctanhl.c (__ctanhl): Likewise.
	* math/s_ctanl.c (__ctanl): Likewise.
	* stdlib/strtod_l.c (round_and_return): Use math_force_eval
	instead of volatile.
	* sysdeps/ieee754/dbl-64/e_asin.c (__ieee754_asin): Use
	math_check_force_underflow.
	* sysdeps/ieee754/dbl-64/e_atanh.c (__ieee754_atanh): Likewise.
	* sysdeps/ieee754/dbl-64/e_exp.c (__ieee754_exp): Do not use
	volatile when forcing underflow.
	* sysdeps/ieee754/dbl-64/e_exp2.c (__ieee754_exp2): Use
	math_check_force_underflow_nonneg.
	* sysdeps/ieee754/dbl-64/e_gamma_r.c (__ieee754_gamma_r):
	Likewise.
	* sysdeps/ieee754/dbl-64/e_j1.c (__ieee754_j1): Use
	math_check_force_underflow.
	* sysdeps/ieee754/dbl-64/e_jn.c (__ieee754_jn): Likewise.
	* sysdeps/ieee754/dbl-64/e_sinh.c (__ieee754_sinh): Likewise.
	* sysdeps/ieee754/dbl-64/s_asinh.c (__asinh): Likewise.
	* sysdeps/ieee754/dbl-64/s_atan.c (atan): Use
	math_check_force_underflow_nonneg.
	* sysdeps/ieee754/dbl-64/s_erf.c (__erf): Use
	math_check_force_underflow.
	* sysdeps/ieee754/dbl-64/s_expm1.c (__expm1): Likewise.
	* sysdeps/ieee754/dbl-64/s_fma.c (__fma): Use math_force_eval
	instead of volatile.
	* sysdeps/ieee754/dbl-64/s_log1p.c (__log1p): Use
	math_check_force_underflow.
	* sysdeps/ieee754/dbl-64/s_sin.c (__sin): Likewise.
	* sysdeps/ieee754/dbl-64/s_tan.c (tan): Use
	math_check_force_underflow_nonneg.
	* sysdeps/ieee754/dbl-64/s_tanh.c (__tanh): Use
	math_check_force_underflow.
	* sysdeps/ieee754/flt-32/e_asinf.c (__ieee754_asinf): Likewise.
	* sysdeps/ieee754/flt-32/e_atanhf.c (__ieee754_atanhf): Likewise.
	* sysdeps/ieee754/flt-32/e_exp2f.c (__ieee754_exp2f): Use
	math_check_force_underflow_nonneg.
	* sysdeps/ieee754/flt-32/e_gammaf_r.c (__ieee754_gammaf_r):
	Likewise.
	* sysdeps/ieee754/flt-32/e_j1f.c (__ieee754_j1f): Use
	math_check_force_underflow.
	* sysdeps/ieee754/flt-32/e_jnf.c (__ieee754_jnf): Likewise.
	* sysdeps/ieee754/flt-32/e_sinhf.c (__ieee754_sinhf): Likewise.
	* sysdeps/ieee754/flt-32/k_sinf.c (__kernel_sinf): Likewise.
	* sysdeps/ieee754/flt-32/k_tanf.c (__kernel_tanf): Likewise.
	* sysdeps/ieee754/flt-32/s_asinhf.c (__asinhf): Likewise.
	* sysdeps/ieee754/flt-32/s_atanf.c (__atanf): Likewise.
	* sysdeps/ieee754/flt-32/s_erff.c (__erff): Likewise.
	* sysdeps/ieee754/flt-32/s_expm1f.c (__expm1f): Likewise.
	* sysdeps/ieee754/flt-32/s_log1pf.c (__log1pf): Likewise.
	* sysdeps/ieee754/flt-32/s_tanhf.c (__tanhf): Likewise.
	* sysdeps/ieee754/ldbl-128/e_asinl.c (__ieee754_asinl): Likewise.
	* sysdeps/ieee754/ldbl-128/e_atanhl.c (__ieee754_atanhl):
	Likewise.
	* sysdeps/ieee754/ldbl-128/e_expl.c (__ieee754_expl): Use
	math_check_force_underflow_nonneg.
	* sysdeps/ieee754/ldbl-128/e_gammal_r.c (__ieee754_gammal_r):
	Likewise.
	* sysdeps/ieee754/ldbl-128/e_j1l.c (__ieee754_j1l): Use
	math_check_force_underflow.
	* sysdeps/ieee754/ldbl-128/e_jnl.c (__ieee754_jnl): Likewise.
	* sysdeps/ieee754/ldbl-128/e_sinhl.c (__ieee754_sinhl): Likewise.
	* sysdeps/ieee754/ldbl-128/k_sincosl.c (__kernel_sincosl):
	Likewise.
	* sysdeps/ieee754/ldbl-128/k_sinl.c (__kernel_sinl): Likewise.
	* sysdeps/ieee754/ldbl-128/k_tanl.c (__kernel_tanl): Likewise.
	* sysdeps/ieee754/ldbl-128/s_asinhl.c (__asinhl): Likewise.
	* sysdeps/ieee754/ldbl-128/s_atanl.c (__atanl): Likewise.
	* sysdeps/ieee754/ldbl-128/s_erfl.c (__erfl): Likewise.
	* sysdeps/ieee754/ldbl-128/s_expm1l.c (__expm1l): Likewise.
	* sysdeps/ieee754/ldbl-128/s_fmal.c (__fmal): Use math_force_eval
	instead of volatile.
	* sysdeps/ieee754/ldbl-128/s_log1pl.c (__log1pl): Use
	math_check_force_underflow.
	* sysdeps/ieee754/ldbl-128/s_tanhl.c (__tanhl): Likewise.
	* sysdeps/ieee754/ldbl-128ibm/e_asinl.c (__ieee754_asinl): Use
	math_check_force_underflow.
	* sysdeps/ieee754/ldbl-128ibm/e_atanhl.c (__ieee754_atanhl):
	Likewise.
	* sysdeps/ieee754/ldbl-128ibm/e_gammal_r.c (__ieee754_gammal_r):
	Use math_check_force_underflow_nonneg.
	* sysdeps/ieee754/ldbl-128ibm/e_jnl.c (__ieee754_jnl): Use
	math_check_force_underflow.
	* sysdeps/ieee754/ldbl-128ibm/e_sinhl.c (__ieee754_sinhl):
	Likewise.
	* sysdeps/ieee754/ldbl-128ibm/k_sincosl.c (__kernel_sincosl):
	Likewise.
	* sysdeps/ieee754/ldbl-128ibm/k_sinl.c (__kernel_sinl): Likewise.
	* sysdeps/ieee754/ldbl-128ibm/k_tanl.c (__kernel_tanl): Likewise.
	* sysdeps/ieee754/ldbl-128ibm/s_asinhl.c (__asinhl): Likewise.
	* sysdeps/ieee754/ldbl-128ibm/s_atanl.c (__atanl): Likewise.
	* sysdeps/ieee754/ldbl-128ibm/s_erfl.c (__erfl): Likewise.
	* sysdeps/ieee754/ldbl-128ibm/s_tanhl.c (__tanhl): Likewise.
	* sysdeps/ieee754/ldbl-96/e_asinl.c (__ieee754_asinl): Likewise.
	* sysdeps/ieee754/ldbl-96/e_atanhl.c (__ieee754_atanhl): Likewise.
	* sysdeps/ieee754/ldbl-96/e_gammal_r.c (__ieee754_gammal_r): Use
	math_check_force_underflow_nonneg.
	* sysdeps/ieee754/ldbl-96/e_j1l.c (__ieee754_j1l): Use
	math_check_force_underflow.
	* sysdeps/ieee754/ldbl-96/e_jnl.c (__ieee754_jnl): Likewise.
	* sysdeps/ieee754/ldbl-96/e_sinhl.c (__ieee754_sinhl): Likewise.
	* sysdeps/ieee754/ldbl-96/k_sinl.c (__kernel_sinl): Likewise.
	* sysdeps/ieee754/ldbl-96/k_tanl.c (__kernel_tanl): Use
	math_check_force_underflow_nonneg.
	* sysdeps/ieee754/ldbl-96/s_asinhl.c (__asinhl): Use
	math_check_force_underflow.
	* sysdeps/ieee754/ldbl-96/s_erfl.c (__erfl): Likewise.
	* sysdeps/ieee754/ldbl-96/s_fmal.c (__fmal): Use math_force_eval
	instead of volatile.
	* sysdeps/ieee754/ldbl-96/s_tanhl.c (__tanhl): Use
	math_check_force_underflow.
2015-09-23 22:42:30 +00:00
Joseph Myers
8020a80887 Fix atanhl missing underflows (bug 16352).
Similar to various other bugs in this area, some atanh 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.  (No change in this regard is needed
for the i386 implementation; special handling to force underflows in
these cases will only be needed there when the spurious underflows,
bug 18049, get fixed.)

Tested for x86_64, x86, powerpc and mips64.

	[BZ #16352]
	* sysdeps/i386/fpu/e_atanh.S (dbl_min): New object.
	(__ieee754_atanh): Force underflow exception for results with
	small absolute value.
	* sysdeps/i386/fpu/e_atanhf.S (flt_min): New object.
	(__ieee754_atanhf): Force underflow exception for results with
	small absolute value.
	* sysdeps/ieee754/dbl-64/e_atanh.c: Include <float.h>.
	(__ieee754_atanh): Force underflow exception for results with
	small absolute value.
	* sysdeps/ieee754/flt-32/e_atanhf.c: Include <float.h>.
	(__ieee754_atanhf): Force underflow exception for results with
	small absolute value.
	* sysdeps/ieee754/ldbl-128/e_atanhl.c: Include <float.h>.
	(__ieee754_atanhl): Force underflow exception for results with
	small absolute value.
	* sysdeps/ieee754/ldbl-128ibm/e_atanhl.c: Include <float.h>.
	(__ieee754_atanhl): Force underflow exception for results with
	small absolute value.
	* sysdeps/ieee754/ldbl-96/e_atanhl.c: Include <float.h>.
	(__ieee754_atanhl): Force underflow exception for results with
	small absolute value.
	* math/auto-libm-test-in: Do not allow missing underflow
	exceptions from atanh.
	* math/auto-libm-test-out: Regenerated.
2015-05-15 22:07:57 +00:00
Joseph Myers
2ca725c594 Fix ldbl-96, ldbl-128ibm atanhl inaccuracy (bug 18046, bug 18047).
The threshold in ldbl-96 atanhl for when to return the argument,
0x1p-28, is a bit too big, and that in ldbl-128ibm atanhl is much too
big (the relevant condition being x^3/3 being < 0.5ulp of x),
resulting in errors a bit above the limits of those considered
acceptable in glibc in the ldbl-96 case, and in large errors in the
ldbl-128ibm case.  This patch changes those implementations to use
more appropriate thresholds and adds tests around the thresholds for
various formats.

Tested for x86_64, x86 and powerpc.  x86_64 and x86 ulps updated
accordingly.

	[BZ #18046]
	[BZ #18047]
	* sysdeps/ieee754/ldbl-128ibm/e_atanhl.c (__ieee754_atanhl): Use
	0x1p-56L as threshold for just returning the argument.
	* sysdeps/ieee754/ldbl-96/e_atanhl.c (__ieee754_atanhl): Use
	0x1p-32L as threshold for just returning the argument.
	* math/auto-libm-test-in: Add more tests of atanh.
	* math/auto-libm-test-out: Regenerated.
	* sysdeps/i386/fpu/libm-test-ulps: Update.
	* sysdeps/x86_64/fpu/libm-test-ulp: Likewise.
2015-02-27 17:48:37 +00:00
Alan Modra
4ebd120cd9 PowerPC floating point little-endian [2 of 15]
http://sourceware.org/ml/libc-alpha/2013-08/msg00082.html

This patch replaces occurrences of GET_LDOUBLE_* and SET_LDOUBLE_*
macros, and union ieee854_long_double_shape_type in ldbl-128ibm/,
and a stray one in the 32-bit fpu support.  These files have no
significant changes apart from rewriting the long double bit access.

	* sysdeps/ieee754/ldbl-128ibm/math_ldbl.h (ldbl_high): Define.
	* sysdeps/ieee754/ldbl-128ibm/e_acoshl.c (__ieee754_acoshl): Rewrite
	all uses of ieee854 long double macros and unions.
	* sysdeps/ieee754/ldbl-128ibm/e_acosl.c (__ieee754_acosl): Likewise.
	* sysdeps/ieee754/ldbl-128ibm/e_asinl.c (__ieee754_asinl): Likewise.
	* sysdeps/ieee754/ldbl-128ibm/e_atanhl.c (__ieee754_atanhl): Likewise.
	* sysdeps/ieee754/ldbl-128ibm/e_coshl.c (__ieee754_coshl): Likewise.
	* sysdeps/ieee754/ldbl-128ibm/e_log2l.c (__ieee754_log2l): Likewise.
	* sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c (__ieee754_rem_pio2l):
	Likewise.
	* sysdeps/ieee754/ldbl-128ibm/e_sinhl.c (__ieee754_sinhl): Likewise.
	* sysdeps/ieee754/ldbl-128ibm/k_cosl.c (__kernel_cosl): Likewise.
	* sysdeps/ieee754/ldbl-128ibm/k_sincosl.c (__kernel_sincosl): Likewise.
	* sysdeps/ieee754/ldbl-128ibm/k_sinl.c (__kernel_sinl): Likewise.
	* sysdeps/ieee754/ldbl-128ibm/s_asinhl.c (__asinhl): Likewise.
	* sysdeps/ieee754/ldbl-128ibm/s_atanl.c (__atanl): Likewise.
	Simplify sign and nan test too.
	* sysdeps/ieee754/ldbl-128ibm/s_cosl.c (__cosl): Likewise.
	* sysdeps/ieee754/ldbl-128ibm/s_fabsl.c (__fabsl): Likewise.
	* sysdeps/ieee754/ldbl-128ibm/s_finitel.c (___finitel): Likewise.
	* sysdeps/ieee754/ldbl-128ibm/s_fpclassifyl.c (___fpclassifyl):
	Likewise.
	* sysdeps/ieee754/ldbl-128ibm/s_isnanl.c (___isnanl): Likewise.
	* sysdeps/ieee754/ldbl-128ibm/s_issignalingl.c (__issignalingl):
	Likewise.
	* sysdeps/ieee754/ldbl-128ibm/s_logbl.c (__logbl): Likewise.
	* sysdeps/ieee754/ldbl-128ibm/s_signbitl.c (___signbitl): Likewise.
	* sysdeps/ieee754/ldbl-128ibm/s_sincosl.c (__sincosl): Likewise.
	* sysdeps/ieee754/ldbl-128ibm/s_sinl.c (__sinl): Likewise.
	* sysdeps/ieee754/ldbl-128ibm/s_tanl.c (__tanl): Likewise.
	* sysdeps/powerpc/powerpc32/power7/fpu/s_logbl.c (__logbl): Likewise.
2013-10-04 10:32:19 +09:30
Joseph Myers
b37984ad36 Fix ldbl-128ibm "set but not used" warnings. 2012-12-04 21:19:17 +00:00
Richard Henderson
1ed0291c31 Use <> for math.h and math_private.h everywhere.
Entire tree edited via find | grep | sed.
2012-03-09 16:09:10 -08:00
Ulrich Drepper
0ac5ae2335 Optimize libm
libm is now somewhat integrated with gcc's -ffinite-math-only option
and lots of the wrapper functions have been optimized.
2011-10-12 11:27:51 -04:00
Roland McGrath
f964490f3c 2006-01-27 Dwayne Grant McConnell <decimal@us.ibm.com>
Jakub Jelinek  <jakub@redhat.com>
	    Roland McGrath  <roland@redhat.com>
	    Steven Munroe  <sjmunroe@us.ibm.com>
	    Alan Modra  <amodra@bigpond.net.au>

	* sysdeps/powerpc/powerpc64/fpu/s_truncf.S: Comment fix.
	* sysdeps/powerpc/powerpc32/fpu/s_truncf.S: Likewise.
	* sysdeps/powerpc/powerpc64/fpu/s_llroundf.S: Likewise.

	* sysdeps/powerpc/fpu/libm-test-ulps: Update.

	* math/libm-test.inc (check_float_internal): Allow ulp <= 0.5.
	(erfc_test): Don't run erfcl (27.0L) test if erfcl (27.0L) is
	denormal.
	[TEST_LDOUBLE] (ceil_test, floor_test, llrint_test, llround_test,
	rint_test, round_test, trunc_test): Add new tests.

	* sysdeps/powerpc/powerpc32/fpu/s_copysignl.S: New file.
	* sysdeps/powerpc/powerpc32/fpu/s_fabs.S: New file.
	* sysdeps/powerpc/powerpc32/fpu/s_fabsl.S: New file.
	* sysdeps/powerpc/powerpc32/fpu/s_fdim.c: New file.
	* sysdeps/powerpc/powerpc32/fpu/s_fmax.S: New file.
	* sysdeps/powerpc/powerpc32/fpu/s_fmin.S: New file.
	* sysdeps/powerpc/powerpc32/fpu/s_isnan.c: New file.

	* sysdeps/powerpc/powerpc64/fpu/s_ceill.S: New file.
	* sysdeps/powerpc/powerpc64/fpu/s_copysignl.S: New file.
	* sysdeps/powerpc/powerpc64/fpu/s_fabs.S: New file.
	* sysdeps/powerpc/powerpc64/fpu/s_fabsl.S: New file.
	* sysdeps/powerpc/powerpc64/fpu/s_fdim.c: New file.
	* sysdeps/powerpc/powerpc64/fpu/s_floorl.S: New file.
	* sysdeps/powerpc/powerpc64/fpu/s_fmax.S: New file.
	* sysdeps/powerpc/powerpc64/fpu/s_fmin.S: New file.
	* sysdeps/powerpc/powerpc64/fpu/s_isnan.c: New file.
	* sysdeps/powerpc/powerpc64/fpu/s_llrintl.S: New file.
	* sysdeps/powerpc/powerpc64/fpu/s_llroundl.S: New file.
	* sysdeps/powerpc/powerpc64/fpu/s_lrintl.S: New file.
	* sysdeps/powerpc/powerpc64/fpu/s_lroundl.S: New file.
	* sysdeps/powerpc/powerpc64/fpu/s_nearbyintl.S: New file.
	* sysdeps/powerpc/powerpc64/fpu/s_rintl.S: New file.
	* sysdeps/powerpc/powerpc64/fpu/s_roundl.S: New file.
	* sysdeps/powerpc/powerpc64/fpu/s_truncl.S: New file.

	* sysdeps/unix/sysv/linux/powerpc/Implies: New file.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/fpu/Implies: New file.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/Implies: New file.
	* sysdeps/unix/sysv/linux/powerpc/configure.in: New file.
	* sysdeps/unix/sysv/linux/powerpc/configure: New file.
	* sysdeps/unix/sysv/linux/powerpc/bits/wordsize.h
	(__LONG_DOUBLE_MATH_OPTIONAL): Define.
	(__NO_LONG_DOUBLE_MATH): Define.
	* sysdeps/unix/sysv/linux/powerpc/nldbl-abi.h: New file.
	* sysdeps/powerpc/fpu/s_isnan.c: Include math_ldbl_opt.h.
	* sysdeps/powerpc/powerpc64/fpu/s_ceil.S: Include math_ldbl_opt.h.
	[LONG_DOUBLE_COMPAT] (ceill): Add compatibility symbols.
	* sysdeps/powerpc/powerpc64/fpu/s_copysign.S: Include math_ldbl_opt.h.
	[LONG_DOUBLE_COMPAT] (copysignl): Add compatibility symbols.
	* sysdeps/powerpc/powerpc64/fpu/s_floor.S: Include math_ldbl_opt.h.
	[LONG_DOUBLE_COMPAT] (floorl): Add compatibility symbols.
	* sysdeps/powerpc/powerpc64/fpu/s_llrint.S: Include math_ldbl_opt.h.
	[LONG_DOUBLE_COMPAT] (llrintl, lrintl): Add compatibility symbols.
	* sysdeps/powerpc/powerpc64/fpu/s_llround.S: Include math_ldbl_opt.h.
	[LONG_DOUBLE_COMPAT] (llroundl, lroundl): Add compatibility symbols.
	* sysdeps/powerpc/powerpc64/fpu/s_rint.S: Include math_ldbl_opt.h.
	[LONG_DOUBLE_COMPAT] (rintl): Add compatibility symbols.
	* sysdeps/powerpc/powerpc64/fpu/s_round.S: Include math_ldbl_opt.h.
	[LONG_DOUBLE_COMPAT] (roundl): Add compatibility symbols.
	* sysdeps/powerpc/powerpc64/fpu/s_trunc.S: Include math_ldbl_opt.h.
	[LONG_DOUBLE_COMPAT] (truncl): Add compatibility symbols.
	* sysdeps/powerpc/powerpc32/fpu/s_ceil.S: Include math_ldbl_opt.h.
	[LONG_DOUBLE_COMPAT] (ceill): Add compatibility symbols.
	* sysdeps/powerpc/powerpc32/fpu/s_copysign.S: Include math_ldbl_opt.h.
	[LONG_DOUBLE_COMPAT] (copysignl): Add compatibility symbols.
	* sysdeps/powerpc/powerpc32/fpu/s_floor.S: Include math_ldbl_opt.h.
	[LONG_DOUBLE_COMPAT] (floorl): Add compatibility symbols.
	* sysdeps/powerpc/powerpc32/fpu/s_lrint.S: Include math_ldbl_opt.h.
	[LONG_DOUBLE_COMPAT] (lrintl): Add compatibility symbols.
	* sysdeps/powerpc/powerpc32/fpu/s_llrint.c: Include math_ldbl_opt.h.
	[LONG_DOUBLE_COMPAT] (llrintl): Add compatibility symbols.
	* sysdeps/powerpc/powerpc32/fpu/s_lround.S: Include math_ldbl_opt.h.
	[LONG_DOUBLE_COMPAT] (lroundl): Add compatibility symbols.
	* sysdeps/powerpc/powerpc32/fpu/s_rint.S: Include math_ldbl_opt.h.
	[LONG_DOUBLE_COMPAT] (rintl): Add compatibility symbols.
	* sysdeps/powerpc/powerpc32/fpu/s_round.S: Include math_ldbl_opt.h.
	[LONG_DOUBLE_COMPAT] (roundl): Add compatibility symbols.
	* sysdeps/powerpc/powerpc32/fpu/s_trunc.S: Include math_ldbl_opt.h.
	[LONG_DOUBLE_COMPAT] (truncl): Add compatibility symbols.

	* misc/qefgcvt_r.c [LDBL_MIN_10_EXP == -291] (FLOAT_MIN_10_NORM): New.

	* sysdeps/powerpc/fpu/bits/mathdef.h (__NO_LONG_DOUBLE_MATH): Remove.
	* sysdeps/powerpc/Implies: Add ieee754/ldbl-128ibm.
	* sysdeps/powerpc/powerpc32/Implies: Remove powerpc/soft-fp.
	* sysdeps/ieee754/ldbl-128ibm/Makefile: New file.
	* sysdeps/ieee754/ldbl-128ibm/e_acoshl.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/e_acosl.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/e_asinl.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/e_atan2l.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/e_atanhl.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/e_coshl.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/e_expl.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/e_fmodl.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/e_gammal_r.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/e_hypotl.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/e_j0l.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/e_j1l.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/e_jnl.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/e_lgammal_r.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/e_log10l.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/e_log2l.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/e_logl.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/e_powl.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/e_remainderl.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/e_sinhl.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/e_sqrtl.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/ieee754.h: New file.
	* sysdeps/ieee754/ldbl-128ibm/k_cosl.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/k_sincosl.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/k_sinl.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/k_tanl.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/ldbl2mpn.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/math_ldbl.h: New file.
	* sysdeps/ieee754/ldbl-128ibm/mpn2ldbl.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/printf_fphex.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/s_asinhl.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/s_atanl.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/s_cbrtl.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/s_cosl.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/s_erfl.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/s_expm1l.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/s_fabsl.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/s_finitel.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/s_fpclassifyl.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/s_frexpl.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/s_ilogbl.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/s_isinfl.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/s_isnanl.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/s_log1pl.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/s_logbl.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/s_modfl.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/s_nexttowardf.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/s_remquol.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/s_rintl.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/s_scalblnl.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/s_scalbnl.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/s_signbitl.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/s_sincosl.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/s_sinl.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/s_tanhl.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/s_tanl.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/s_truncl.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/strtold_l.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/t_sincosl.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/w_expl.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/s_copysignl.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/s_floorl.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/s_llrintl.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/s_llroundl.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/s_roundl.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/s_ceill.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/s_nearbyintl.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/s_lrintl.c: New file.
	* sysdeps/ieee754/ldbl-128ibm/s_lroundl.c: New file.

	* sysdeps/ieee754/ldbl-128/e_powl.c: Fix old comment.
2006-01-28 00:15:15 +00:00
Ulrich Drepper
a334319f65 (CFLAGS-tst-align.c): Add -mpreferred-stack-boundary=4. 2004-12-22 20:10:10 +00:00
Jakub Jelinek
0ecb606cb6 2.5-18.1 2007-07-12 18:26:36 +00:00