diff options
author | Joseph Myers <joseph@codesourcery.com> | 2015-02-12 23:05:37 +0000 |
---|---|---|
committer | Joseph Myers <joseph@codesourcery.com> | 2015-02-12 23:05:37 +0000 |
commit | e8bd5286c68bc35be3b41e94c15c4387dcb3bec9 (patch) | |
tree | c62c20ff732d5a7955bf3eaeb73454c4a61bb92d /manual/time.texi | |
parent | 96a157490c8db4c3be4495c4f9c0ca9ecaf5ae7c (diff) | |
download | glibc-e8bd5286c68bc35be3b41e94c15c4387dcb3bec9.tar glibc-e8bd5286c68bc35be3b41e94c15c4387dcb3bec9.tar.gz glibc-e8bd5286c68bc35be3b41e94c15c4387dcb3bec9.tar.bz2 glibc-e8bd5286c68bc35be3b41e94c15c4387dcb3bec9.zip |
Fix powerpc software sqrt (bug 17964).
As Adhemerval noted in
<https://sourceware.org/ml/libc-alpha/2015-01/msg00451.html>, the
powerpc sqrt implementation for when _ARCH_PPCSQ is not defined is
inaccurate in some cases.
The problem is that this code relies on fused multiply-add, and relies
on the compiler contracting a * b + c to get a fused operation. But
sysdeps/ieee754/dbl-64/Makefile disables contraction for e_sqrt.c,
because the implementation in that directory relies on *not* having
contracted operations.
While it would be possible to arrange makefiles so that an earlier
sysdeps directory can disable the setting in
sysdeps/ieee754/dbl-64/Makefile, it seems a lot cleaner to make the
dependence on fused operations explicit in the .c file. GCC 4.6
introduced support for __builtin_fma on powerpc and other
architectures with such instructions, so we can rely on that; this
patch duly makes the code use __builtin_fma for all such fused
operations.
Tested for powerpc32 (hard float).
2015-02-12 Joseph Myers <joseph@codesourcery.com>
[BZ #17964]
* sysdeps/powerpc/fpu/e_sqrt.c (__slow_ieee754_sqrt): Use
__builtin_fma instead of relying on contraction of a * b + c.
Diffstat (limited to 'manual/time.texi')
0 files changed, 0 insertions, 0 deletions