diff options
author | Joseph Myers <joseph@codesourcery.com> | 2015-02-12 23:05:37 +0000 |
---|---|---|
committer | Aurelien Jarno <aurelien@aurel32.net> | 2017-02-20 22:04:52 +0100 |
commit | 0a62a5c401cf5b4e79e8290e46ce36f4c6dd08da (patch) | |
tree | d0a47ee621f3d5c49e13137cf23ca670b1786ca9 /NEWS | |
parent | a0b2d5b252477b6bc374390c14c3c8ed6aae420c (diff) | |
download | glibc-0a62a5c401cf5b4e79e8290e46ce36f4c6dd08da.tar.gz |
Fix powerpc software sqrt (bug 17964).release/2.19/master
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.
(cherry picked from commit e8bd5286c68bc35be3b41e94c15c4387dcb3bec9)
Diffstat (limited to 'NEWS')
-rw-r--r-- | NEWS | 4 |
1 files changed, 2 insertions, 2 deletions
@@ -12,8 +12,8 @@ Version 2.19.1 15946, 16009, 16545, 16574, 16576, 16623, 16657, 16695, 16743, 16758, 16759, 16760, 16878, 16882, 16885, 16916, 16932, 16943, 16958, 17048, 17062, 17069, 17079, 17137, 17153, 17213, 17263, 17269, 17325, 17523, - 17555, 17905, 18007, 18032, 18080, 18240, 18287, 18508, 18665, 18905, - 18928, 19018, 19779, 19791, 19879, 20010, 20112. + 17555, 17905, 17964, 18007, 18032, 18080, 18240, 18287, 18508, 18665, + 18905, 18928, 19018, 19779, 19791, 19879, 20010, 20112. * A buffer overflow in gethostbyname_r and related functions performing DNS requests has been fixed. If the NSS functions were called with a |