aboutsummaryrefslogtreecommitdiff
path: root/ChangeLog
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2016-05-19 20:10:56 +0000
committerJoseph Myers <joseph@codesourcery.com>2016-05-19 20:10:56 +0000
commitffe9aaf2b9b7e297924b9fcf76ad854e6b97869b (patch)
tree9371c19beacb5dcc4ec49f9ec3fd65e7e3703b77 /ChangeLog
parentde71e0421b4e267f9b6cf5a827ee5bab70226cd9 (diff)
downloadglibc-ffe9aaf2b9b7e297924b9fcf76ad854e6b97869b.tar
glibc-ffe9aaf2b9b7e297924b9fcf76ad854e6b97869b.tar.gz
glibc-ffe9aaf2b9b7e297924b9fcf76ad854e6b97869b.tar.bz2
glibc-ffe9aaf2b9b7e297924b9fcf76ad854e6b97869b.zip
Implement proper fmal for ldbl-128ibm (bug 13304).
ldbl-128ibm had an implementation of fmal that just did (x * y) + z in most cases, with no attempt at actually being a fused operation. This patch replaces it with a genuine fused operation. It is not necessarily correctly rounding, but should produce a result at least as accurate as the long double arithmetic operations in libgcc, which I think is all that can reasonably be expected for such a non-IEEE format where arithmetic is approximate rather than rounded according to any particular rule for determining the exact result. Like the libgcc arithmetic, it may produce spurious overflow and underflow results, and it falls back to the libgcc multiplication in the case of (finite, finite, zero). This concludes the fixes for bug 13304; any subsequently found fma issues should go in separate Bugzilla bugs. Various other pieces of bug 13304 were fixed in past releases over the past several years. Tested for powerpc. [BZ #13304] * sysdeps/ieee754/ldbl-128ibm/s_fmal.c: Include <fenv.h>, <float.h>, <math_private.h> and <stdlib.h>. (add_split): New function. (mul_split): Likewise. (ext_val): New typedef. (store_ext_val): New function. (mul_ext_val): New function. (compare): New function. (add_split_ext): New function. (__fmal): After checking for Inf, NaN and zero, compute result as an exact sum of scaled double values in round-to-nearest before adding those up and adjusting for other rounding modes. * math/auto-libm-test-in: Remove xfail-rounding:ldbl-128ibm from tests of fma. * math/auto-libm-test-out: Regenerated.
Diffstat (limited to 'ChangeLog')
-rw-r--r--ChangeLog19
1 files changed, 19 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 7ba904d0be..e1f0b5f8f1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,22 @@
+2016-05-19 Joseph Myers <joseph@codesourcery.com>
+
+ [BZ #13304]
+ * sysdeps/ieee754/ldbl-128ibm/s_fmal.c: Include <fenv.h>,
+ <float.h>, <math_private.h> and <stdlib.h>.
+ (add_split): New function.
+ (mul_split): Likewise.
+ (ext_val): New typedef.
+ (store_ext_val): New function.
+ (mul_ext_val): New function.
+ (compare): New function.
+ (add_split_ext): New function.
+ (__fmal): After checking for Inf, NaN and zero, compute result as
+ an exact sum of scaled double values in round-to-nearest before
+ adding those up and adjusting for other rounding modes.
+ * math/auto-libm-test-in: Remove xfail-rounding:ldbl-128ibm from
+ tests of fma.
+ * math/auto-libm-test-out: Regenerated.
+
2016-05-19 H.J. Lu <hongjiu.lu@intel.com>
[BZ #20119]