| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This patch changes the logf, log2f and powf error handling semantics
to only set errno accoring to POSIX rules. New symbol version is
introduced at GLIBC_2.27.
The old wrappers are kept for compat symbols.
ia64 needed assembly change to have the new and compat versioned
symbol map to the same function.
All linux libm abilists are updated.
* math/Versions (logf): New libm symbol at GLIBC_2.27.
(log2f): Likewise.
(powf): Likewise.
* math/w_log2f.c: New file.
* math/w_logf.c: New file.
* math/w_powf.c: New file.
* math/w_log2f_compat.c (__log2f_compat): For compat symbol only.
* math/w_logf_compat.c (__logf_compat): Likewise.
* math/w_powf_compat.c (__powf_compat): Likewise.
* sysdeps/ia64/fpu/e_log2f.S: Add versioned symbols.
* sysdeps/ia64/fpu/e_logf.S: Likewise.
* sysdeps/ia64/fpu/e_powf.S: Likewise.
* sysdeps/unix/sysv/linux/aarch64/libm.abilist: Update.
* 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.
|
|
|
|
|
|
|
|
|
|
| |
This commit moves one step towards the deprecation of wrappers that
use _LIB_VERSION / matherr / __kernel_standard functionality, by
adding the suffix '_compat' to their filenames and adjusting Makefiles
and #includes accordingly.
New template wrappers that do not use such functionality will be added
by future patches and will be first used by the float128 wrappers.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The dbl-64 implementation of __ieee754_pow returns a NaN for pow
(qNaN, 0) when it should return 1. Normally this is covered up by the
wrappers ending up calling __kernel_standard which fixes up the result
for this case, but for -lieee the wrappers are bypassed and the bad
result gets through as a return value.
Now, the wrappers fixing this are dealing with variant error handling
that wants a result of NaN for pow (qNaN, 0), and only ever call
__kernel_standard for this case if NaN resulted from __ieee754_pow.
This leads to a question of whether the dbl-64 code might be
deliberately returning NaN in order to use those code paths. However,
I can find no sign that this is deliberate. If it were deliberate one
would expect other implementations to do the same, and would expect
the return of NaN to be very old, but it appears it came in by
accident when the present e_pow.c implementation replaced an fdlibm
implementation in 2001. So it appears to be unintended that this path
through the pow wrapper could be used at all.
So this patch fixes the implementation to return 1 in this case as
expected. This is consistent with all the other implementations. The
relevant path through the wrappers is now unreachable, so is removed
(which is the main motivation of this patch: to avoid that path
becoming accidentally reachable when implementing TS 18661-1 semantics
that pow (sNaN, 0) should return qNaN with "invalid" raised). Another
path that would require __ieee754_pow (0, 0) to return 0 is also
unreachable (as all implementations return 1, in accordance with C99
semantics), so is removed as well.
Note: we don't have anything set up to test -lieee, which in any case
is obsolescent (at some point we should remove the ability for new
programs to access _LIB_VERSION or define matherr and have it called
by glibc). So testing will be implicit through sNaN tests added when
making sNaN inputs work correctly for pow functions.
Tested for x86_64 and x86.
[BZ #20919]
* sysdeps/ieee754/dbl-64/e_pow.c (__ieee754_pow): Do not return
NaN first argument when raised to power 0.
* math/w_pow.c (__pow): Do not check for NaN or zero results from
raising to power zero.
* math/w_powf.c (__powf): Likewise.
* math/w_powl.c (__powl): Likewise.
* sysdeps/ieee754/k_standard.c (__kernel_standard): Do not handle
pow (0, 0) or pow (NaN, 0).
|
| |
|
|
|
|
| |
to use standard C99 macros. This has no effect on generated code.
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
| |
libm is now somewhat integrated with gcc's -ffinite-math-only option
and lots of the wrapper functions have been optimized.
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* math/w_acos.c: Move to ...
* sysdeps/generic/w_acos.c: ...here. New file.
* math/w_acosf.c: Move to ...
* sysdeps/generic/w_acosf.c: ...here. New file.
* math/w_acosh.c: Move to ...
* sysdeps/generic/w_acosh.c: ...here. New file.
* math/w_acoshf.c: Move to ...
* sysdeps/generic/w_acoshf.c: ...here. New file.
* math/w_acoshl.c: Move to ...
* sysdeps/generic/w_acoshl.c: ...here. New file.
* math/w_acosl.c: Move to ...
* sysdeps/generic/w_acosl.c: ...here. New file.
* math/w_asin.c: Move to ...
* sysdeps/generic/w_asin.c: ...here. New file.
* math/w_asinf.c: Move to ...
* sysdeps/generic/w_asinf.c: ...here. New file.
* math/w_asinl.c: Move to ...
* sysdeps/generic/w_asinl.c: ...here. New file.
* math/w_atan2.c: Move to ...
* sysdeps/generic/w_atan2.c: ...here. New file.
* math/w_atan2f.c: Move to ...
* sysdeps/generic/w_atan2f.c: ...here. New file.
* math/w_atan2l.c: Move to ...
* sysdeps/generic/w_atan2l.c: ...here. New file.
* math/w_atanh.c: Move to ...
* sysdeps/generic/w_atanh.c: ...here. New file.
* math/w_atanhf.c: Move to ...
* sysdeps/generic/w_atanhf.c: ...here. New file.
* math/w_atanhl.c: Move to ...
* sysdeps/generic/w_atanhl.c: ...here. New file.
* math/w_cosh.c: Move to ...
* sysdeps/generic/w_cosh.c: ...here. New file.
* math/w_coshf.c: Move to ...
* sysdeps/generic/w_coshf.c: ...here. New file.
* math/w_coshl.c: Move to ...
* sysdeps/generic/w_coshl.c: ...here. New file.
* math/w_drem.c: Move to ...
* sysdeps/generic/w_drem.c: ...here. New file.
* math/w_dremf.c: Move to ...
* sysdeps/generic/w_dremf.c: ...here. New file.
* math/w_dreml.c: Move to ...
* sysdeps/generic/w_dreml.c: ...here. New file.
* math/w_exp10.c: Move to ...
* sysdeps/generic/w_exp10.c: ...here. New file.
* math/w_exp10f.c: Move to ...
* sysdeps/generic/w_exp10f.c: ...here. New file.
* math/w_exp10l.c: Move to ...
* sysdeps/generic/w_exp10l.c: ...here. New file.
* math/w_exp2.c: Move to ...
* sysdeps/generic/w_exp2.c: ...here. New file.
* math/w_exp2f.c: Move to ...
* sysdeps/generic/w_exp2f.c: ...here. New file.
* math/w_exp2l.c: Move to ...
* sysdeps/generic/w_exp2l.c: ...here. New file.
* math/w_fmod.c: Move to ...
* sysdeps/generic/w_fmod.c: ...here. New file.
* math/w_fmodf.c: Move to ...
* sysdeps/generic/w_fmodf.c: ...here. New file.
* math/w_fmodl.c: Move to ...
* sysdeps/generic/w_fmodl.c: ...here. New file.
* math/w_hypot.c: Move to ...
* sysdeps/generic/w_hypot.c: ...here. New file.
* math/w_hypotf.c: Move to ...
* sysdeps/generic/w_hypotf.c: ...here. New file.
* math/w_hypotl.c: Move to ...
* sysdeps/generic/w_hypotl.c: ...here. New file.
* math/w_j0.c: Move to ...
* sysdeps/generic/w_j0.c: ...here. New file.
* math/w_j0f.c: Move to ...
* sysdeps/generic/w_j0f.c: ...here. New file.
* math/w_j0l.c: Move to ...
* sysdeps/generic/w_j0l.c: ...here. New file.
* math/w_j1.c: Move to ...
* sysdeps/generic/w_j1.c: ...here. New file.
* math/w_j1f.c: Move to ...
* sysdeps/generic/w_j1f.c: ...here. New file.
* math/w_j1l.c: Move to ...
* sysdeps/generic/w_j1l.c: ...here. New file.
* math/w_jn.c: Move to ...
* sysdeps/generic/w_jn.c: ...here. New file.
* math/w_jnf.c: Move to ...
* sysdeps/generic/w_jnf.c: ...here. New file.
* math/w_jnl.c: Move to ...
* sysdeps/generic/w_jnl.c: ...here. New file.
* math/w_lgamma.c: Move to ...
* sysdeps/generic/w_lgamma.c: ...here. New file.
* math/w_lgammaf.c: Move to ...
* sysdeps/generic/w_lgammaf.c: ...here. New file.
* math/w_lgammaf_r.c: Move to ...
* sysdeps/generic/w_lgammaf_r.c: ...here. New file.
* math/w_lgammal.c: Move to ...
* sysdeps/generic/w_lgammal.c: ...here. New file.
* math/w_lgammal_r.c: Move to ...
* sysdeps/generic/w_lgammal_r.c: ...here. New file.
* math/w_lgamma_r.c: Move to ...
* sysdeps/generic/w_lgamma_r.c: ...here. New file.
* math/w_log10.c: Move to ...
* sysdeps/generic/w_log10.c: ...here. New file.
* math/w_log10f.c: Move to ...
* sysdeps/generic/w_log10f.c: ...here. New file.
* math/w_log10l.c: Move to ...
* sysdeps/generic/w_log10l.c: ...here. New file.
* math/w_log.c: Move to ...
* sysdeps/generic/w_log.c: ...here. New file.
* math/w_logf.c: Move to ...
* sysdeps/generic/w_logf.c: ...here. New file.
* math/w_logl.c: Move to ...
* sysdeps/generic/w_logl.c: ...here. New file.
* math/w_pow.c: Move to ...
* sysdeps/generic/w_pow.c: ...here. New file.
* math/w_powf.c: Move to ...
* sysdeps/generic/w_powf.c: ...here. New file.
* math/w_powl.c: Move to ...
* sysdeps/generic/w_powl.c: ...here. New file.
* math/w_remainder.c: Move to ...
* sysdeps/generic/w_remainder.c: ...here. New file.
* math/w_remainderf.c: Move to ...
* sysdeps/generic/w_remainderf.c: ...here. New file.
* math/w_remainderl.c: Move to ...
* sysdeps/generic/w_remainderl.c: ...here. New file.
* math/w_scalb.c: Move to ...
* sysdeps/generic/w_scalb.c: ...here. New file.
* math/w_scalbf.c: Move to ...
* sysdeps/generic/w_scalbf.c: ...here. New file.
* math/w_scalbl.c: Move to ...
* sysdeps/generic/w_scalbl.c: ...here. New file.
* math/w_sinh.c: Move to ...
* sysdeps/generic/w_sinh.c: ...here. New file.
* math/w_sinhf.c: Move to ...
* sysdeps/generic/w_sinhf.c: ...here. New file.
* math/w_sinhl.c: Move to ...
* sysdeps/generic/w_sinhl.c: ...here. New file.
* math/w_sqrtl.c: Move to ...
* sysdeps/generic/w_sqrtl.c: ...here. New file.
* math/w_tgamma.c: Move to ...
* sysdeps/generic/w_tgamma.c: ...here. New file.
* math/w_tgammaf.c: Move to ...
* sysdeps/generic/w_tgammaf.c: ...here. New file.
* math/w_tgammal.c: Move to ...
* sysdeps/generic/w_tgammal.c: ...here. New file.
|
|
|