aboutsummaryrefslogtreecommitdiff
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
parentde71e0421b4e267f9b6cf5a827ee5bab70226cd9 (diff)
downloadglibc-ffe9aaf2b9b7e297924b9fcf76ad854e6b97869b.tar.xz
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.
-rw-r--r--ChangeLog19
-rw-r--r--math/auto-libm-test-in17
-rw-r--r--math/auto-libm-test-out12256
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/s_fmal.c260
4 files changed, 6404 insertions, 6148 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]
diff --git a/math/auto-libm-test-in b/math/auto-libm-test-in
index 34a63233d3..72a1f3c4c2 100644
--- a/math/auto-libm-test-in
+++ b/math/auto-libm-test-in
@@ -2069,15 +2069,14 @@ fma -min -min 0 missing-errno
fma -min -min -0 missing-errno
# Bug 6801: errno setting may be missing.
-# Bug 13304: results on directed rounding may be incorrect.
-fma max max min missing-errno xfail-rounding:ldbl-128ibm
-fma max max -min missing-errno xfail-rounding:ldbl-128ibm
-fma max -max min missing-errno xfail-rounding:ldbl-128ibm
-fma max -max -min missing-errno xfail-rounding:ldbl-128ibm
-fma -max max min missing-errno xfail-rounding:ldbl-128ibm
-fma -max max -min missing-errno xfail-rounding:ldbl-128ibm
-fma -max -max min missing-errno xfail-rounding:ldbl-128ibm
-fma -max -max -min missing-errno xfail-rounding:ldbl-128ibm
+fma max max min missing-errno
+fma max max -min missing-errno
+fma max -max min missing-errno
+fma max -max -min missing-errno
+fma -max max min missing-errno
+fma -max max -min missing-errno
+fma -max -max min missing-errno
+fma -max -max -min missing-errno
fma 0x1.7ff8p+13 0x1.000002p+0 0x1.ffffp-24
fma 0x1.fffp+0 0x1.00001p+0 -0x1.fffp+0
diff --git a/math/auto-libm-test-out b/math/auto-libm-test-out
index 86b08c64c6..92df72ffe6 100644
--- a/math/auto-libm-test-out
+++ b/math/auto-libm-test-out
@@ -152259,8174 +152259,8174 @@ fma -min -min -0 missing-errno
= fma tonearest ldbl-128ibm -0x8p-972L -0x8p-972L -0x0p+0L : 0x0p+0L : inexact underflow errno-erange errno-erange-ok
= fma towardzero ldbl-128ibm -0x8p-972L -0x8p-972L -0x0p+0L : 0x0p+0L : inexact underflow errno-erange errno-erange-ok
= fma upward ldbl-128ibm -0x8p-972L -0x8p-972L -0x0p+0L : 0x4p-1076L : inexact underflow errno-erange-ok
-fma max max min missing-errno xfail-rounding:ldbl-128ibm
-= fma downward flt-32 0xf.fffffp+124f 0xf.fffffp+124f 0x4p-128f : 0xf.fffffp+124f : xfail:ldbl-128ibm inexact overflow errno-erange-ok
+fma max max min missing-errno
+= fma downward flt-32 0xf.fffffp+124f 0xf.fffffp+124f 0x4p-128f : 0xf.fffffp+124f : inexact overflow errno-erange-ok
= fma tonearest flt-32 0xf.fffffp+124f 0xf.fffffp+124f 0x4p-128f : plus_infty : inexact overflow errno-erange errno-erange-ok
-= fma towardzero flt-32 0xf.fffffp+124f 0xf.fffffp+124f 0x4p-128f : 0xf.fffffp+124f : xfail:ldbl-128ibm inexact overflow errno-erange-ok
-= fma upward flt-32 0xf.fffffp+124f 0xf.fffffp+124f 0x4p-128f : plus_infty : xfail:ldbl-128ibm inexact overflow errno-erange errno-erange-ok
-= fma downward dbl-64 0xf.fffffp+124 0xf.fffffp+124 0x4p-128 : 0xf.ffffe000001p+252 : xfail:ldbl-128ibm inexact
+= fma towardzero flt-32 0xf.fffffp+124f 0xf.fffffp+124f 0x4p-128f : 0xf.fffffp+124f : inexact overflow errno-erange-ok
+= fma upward flt-32 0xf.fffffp+124f 0xf.fffffp+124f 0x4p-128f : plus_infty : inexact overflow errno-erange errno-erange-ok
+= fma downward dbl-64 0xf.fffffp+124 0xf.fffffp+124 0x4p-128 : 0xf.ffffe000001p+252 : inexact
= fma tonearest dbl-64 0xf.fffffp+124 0xf.fffffp+124 0x4p-128 : 0xf.ffffe000001p+252 : inexact
-= fma towardzero dbl-64 0xf.fffffp+124 0xf.fffffp+124 0x4p-128 : 0xf.ffffe000001p+252 : xfail:ldbl-128ibm inexact
-= fma upward dbl-64 0xf.fffffp+124 0xf.fffffp+124 0x4p-128 : 0xf.ffffe00000108p+252 : xfail:ldbl-128ibm inexact
-= fma downward ldbl-96-intel 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-128L : 0xf.ffffe000001p+252L : xfail:ldbl-128ibm inexact
+= fma towardzero dbl-64 0xf.fffffp+124 0xf.fffffp+124 0x4p-128 : 0xf.ffffe000001p+252 : inexact
+= fma upward dbl-64 0xf.fffffp+124 0xf.fffffp+124 0x4p-128 : 0xf.ffffe00000108p+252 : inexact
+= fma downward ldbl-96-intel 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-128L : 0xf.ffffe000001p+252L : inexact
= fma tonearest ldbl-96-intel 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-128L : 0xf.ffffe000001p+252L : inexact
-= fma towardzero ldbl-96-intel 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-128L : 0xf.ffffe000001p+252L : xfail:ldbl-128ibm inexact
-= fma upward ldbl-96-intel 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-128L : 0xf.ffffe0000010001p+252L : xfail:ldbl-128ibm inexact
-= fma downward ldbl-96-m68k 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-128L : 0xf.ffffe000001p+252L : xfail:ldbl-128ibm inexact
+= fma towardzero ldbl-96-intel 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-128L : 0xf.ffffe000001p+252L : inexact
+= fma upward ldbl-96-intel 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-128L : 0xf.ffffe0000010001p+252L : inexact
+= fma downward ldbl-96-m68k 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-128L : 0xf.ffffe000001p+252L : inexact
= fma tonearest ldbl-96-m68k 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-128L : 0xf.ffffe000001p+252L : inexact
-= fma towardzero ldbl-96-m68k 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-128L : 0xf.ffffe000001p+252L : xfail:ldbl-128ibm inexact
-= fma upward ldbl-96-m68k 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-128L : 0xf.ffffe0000010001p+252L : xfail:ldbl-128ibm inexact
-= fma downward ldbl-128 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-128L : 0xf.ffffe000001p+252L : xfail:ldbl-128ibm inexact
+= fma towardzero ldbl-96-m68k 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-128L : 0xf.ffffe000001p+252L : inexact
+= fma upward ldbl-96-m68k 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-128L : 0xf.ffffe0000010001p+252L : inexact
+= fma downward ldbl-128 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-128L : 0xf.ffffe000001p+252L : inexact
= fma tonearest ldbl-128 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-128L : 0xf.ffffe000001p+252L : inexact
-= fma towardzero ldbl-128 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-128L : 0xf.ffffe000001p+252L : xfail:ldbl-128ibm inexact
-= fma upward ldbl-128 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-128L : 0xf.ffffe00000100000000000000008p+252L : xfail:ldbl-128ibm inexact
-= fma downward ldbl-128ibm 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-128L : 0xf.ffffe000001p+252L : xfail:ldbl-128ibm inexact
+= fma towardzero ldbl-128 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-128L : 0xf.ffffe000001p+252L : inexact
+= fma upward ldbl-128 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-128L : 0xf.ffffe00000100000000000000008p+252L : inexact
+= fma downward ldbl-128ibm 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-128L : 0xf.ffffe000001p+252L : inexact
= fma tonearest ldbl-128ibm 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-128L : 0xf.ffffe000001p+252L : inexact
-= fma towardzero ldbl-128ibm 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-128L : 0xf.ffffe000001p+252L : xfail:ldbl-128ibm inexact
-= fma upward ldbl-128ibm 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-128L : 0xf.ffffe000001000000000000004p+252L : xfail:ldbl-128ibm inexact
-= fma downward dbl-64 0xf.fffffp+124 0xf.fffffp+124 0x4p-1024 : 0xf.ffffe000001p+252 : xfail:ldbl-128ibm inexact
+= fma towardzero ldbl-128ibm 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-128L : 0xf.ffffe000001p+252L : inexact
+= fma upward ldbl-128ibm 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-128L : 0xf.ffffe000001000000000000004p+252L : inexact
+= fma downward dbl-64 0xf.fffffp+124 0xf.fffffp+124 0x4p-1024 : 0xf.ffffe000001p+252 : inexact
= fma tonearest dbl-64 0xf.fffffp+124 0xf.fffffp+124 0x4p-1024 : 0xf.ffffe000001p+252 : inexact
-= fma towardzero dbl-64 0xf.fffffp+124 0xf.fffffp+124 0x4p-1024 : 0xf.ffffe000001p+252 : xfail:ldbl-128ibm inexact
-= fma upward dbl-64 0xf.fffffp+124 0xf.fffffp+124 0x4p-1024 : 0xf.ffffe00000108p+252 : xfail:ldbl-128ibm inexact
-= fma downward ldbl-96-intel 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-1024L : 0xf.ffffe000001p+252L : xfail:ldbl-128ibm inexact
+= fma towardzero dbl-64 0xf.fffffp+124 0xf.fffffp+124 0x4p-1024 : 0xf.ffffe000001p+252 : inexact
+= fma upward dbl-64 0xf.fffffp+124 0xf.fffffp+124 0x4p-1024 : 0xf.ffffe00000108p+252 : inexact
+= fma downward ldbl-96-intel 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-1024L : 0xf.ffffe000001p+252L : inexact
= fma tonearest ldbl-96-intel 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-1024L : 0xf.ffffe000001p+252L : inexact
-= fma towardzero ldbl-96-intel 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-1024L : 0xf.ffffe000001p+252L : xfail:ldbl-128ibm inexact
-= fma upward ldbl-96-intel 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-1024L : 0xf.ffffe0000010001p+252L : xfail:ldbl-128ibm inexact
-= fma downward ldbl-96-m68k 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-1024L : 0xf.ffffe000001p+252L : xfail:ldbl-128ibm inexact
+= fma towardzero ldbl-96-intel 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-1024L : 0xf.ffffe000001p+252L : inexact
+= fma upward ldbl-96-intel 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-1024L : 0xf.ffffe0000010001p+252L : inexact
+= fma downward ldbl-96-m68k 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-1024L : 0xf.ffffe000001p+252L : inexact
= fma tonearest ldbl-96-m68k 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-1024L : 0xf.ffffe000001p+252L : inexact
-= fma towardzero ldbl-96-m68k 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-1024L : 0xf.ffffe000001p+252L : xfail:ldbl-128ibm inexact
-= fma upward ldbl-96-m68k 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-1024L : 0xf.ffffe0000010001p+252L : xfail:ldbl-128ibm inexact
-= fma downward ldbl-128 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-1024L : 0xf.ffffe000001p+252L : xfail:ldbl-128ibm inexact
+= fma towardzero ldbl-96-m68k 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-1024L : 0xf.ffffe000001p+252L : inexact
+= fma upward ldbl-96-m68k 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-1024L : 0xf.ffffe0000010001p+252L : inexact
+= fma downward ldbl-128 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-1024L : 0xf.ffffe000001p+252L : inexact
= fma tonearest ldbl-128 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-1024L : 0xf.ffffe000001p+252L : inexact
-= fma towardzero ldbl-128 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-1024L : 0xf.ffffe000001p+252L : xfail:ldbl-128ibm inexact
-= fma upward ldbl-128 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-1024L : 0xf.ffffe00000100000000000000008p+252L : xfail:ldbl-128ibm inexact
-= fma downward ldbl-128ibm 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-1024L : 0xf.ffffe000001p+252L : xfail:ldbl-128ibm inexact
+= fma towardzero ldbl-128 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-1024L : 0xf.ffffe000001p+252L : inexact
+= fma upward ldbl-128 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-1024L : 0xf.ffffe00000100000000000000008p+252L : inexact
+= fma downward ldbl-128ibm 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-1024L : 0xf.ffffe000001p+252L : inexact
= fma tonearest ldbl-128ibm 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-1024L : 0xf.ffffe000001p+252L : inexact
-= fma towardzero ldbl-128ibm 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-1024L : 0xf.ffffe000001p+252L : xfail:ldbl-128ibm inexact
-= fma upward ldbl-128ibm 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-1024L : 0xf.ffffe000001000000000000004p+252L : xfail:ldbl-128ibm inexact
-= fma downward ldbl-96-intel 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-16384L : 0xf.ffffe000001p+252L : xfail:ldbl-128ibm inexact
+= fma towardzero ldbl-128ibm 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-1024L : 0xf.ffffe000001p+252L : inexact
+= fma upward ldbl-128ibm 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-1024L : 0xf.ffffe000001000000000000004p+252L : inexact
+= fma downward ldbl-96-intel 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-16384L : 0xf.ffffe000001p+252L : inexact
= fma tonearest ldbl-96-intel 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-16384L : 0xf.ffffe000001p+252L : inexact
-= fma towardzero ldbl-96-intel 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-16384L : 0xf.ffffe000001p+252L : xfail:ldbl-128ibm inexact
-= fma upward ldbl-96-intel 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-16384L : 0xf.ffffe0000010001p+252L : xfail:ldbl-128ibm inexact
-= fma downward ldbl-96-m68k 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-16384L : 0xf.ffffe000001p+252L : xfail:ldbl-128ibm inexact
+= fma towardzero ldbl-96-intel 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-16384L : 0xf.ffffe000001p+252L : inexact
+= fma upward ldbl-96-intel 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-16384L : 0xf.ffffe0000010001p+252L : inexact
+= fma downward ldbl-96-m68k 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-16384L : 0xf.ffffe000001p+252L : inexact
= fma tonearest ldbl-96-m68k 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-16384L : 0xf.ffffe000001p+252L : inexact
-= fma towardzero ldbl-96-m68k 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-16384L : 0xf.ffffe000001p+252L : xfail:ldbl-128ibm inexact
-= fma upward ldbl-96-m68k 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-16384L : 0xf.ffffe0000010001p+252L : xfail:ldbl-128ibm inexact
-= fma downward ldbl-128 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-16384L : 0xf.ffffe000001p+252L : xfail:ldbl-128ibm inexact
+= fma towardzero ldbl-96-m68k 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-16384L : 0xf.ffffe000001p+252L : inexact
+= fma upward ldbl-96-m68k 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-16384L : 0xf.ffffe0000010001p+252L : inexact
+= fma downward ldbl-128 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-16384L : 0xf.ffffe000001p+252L : inexact
= fma tonearest ldbl-128 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-16384L : 0xf.ffffe000001p+252L : inexact
-= fma towardzero ldbl-128 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-16384L : 0xf.ffffe000001p+252L : xfail:ldbl-128ibm inexact
-= fma upward ldbl-128 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-16384L : 0xf.ffffe00000100000000000000008p+252L : xfail:ldbl-128ibm inexact
-= fma downward ldbl-96-intel 0xf.fffffp+124L 0xf.fffffp+124L 0x2p-16384L : 0xf.ffffe000001p+252L : xfail:ldbl-128ibm inexact
+= fma towardzero ldbl-128 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-16384L : 0xf.ffffe000001p+252L : inexact
+= fma upward ldbl-128 0xf.fffffp+124L 0xf.fffffp+124L 0x4p-16384L : 0xf.ffffe00000100000000000000008p+252L : inexact
+= fma downward ldbl-96-intel 0xf.fffffp+124L 0xf.fffffp+124L 0x2p-16384L : 0xf.ffffe000001p+252L : inexact
= fma tonearest ldbl-96-intel 0xf.fffffp+124L 0xf.fffffp+124L 0x2p-16384L : 0xf.ffffe000001p+252L : inexact
-= fma towardzero ldbl-96-intel 0xf.fffffp+124L 0xf.fffffp+124L 0x2p-16384L : 0xf.ffffe000001p+252L : xfail:ldbl-128ibm inexact
-= fma upward ldbl-96-intel 0xf.fffffp+124L 0xf.fffffp+124L 0x2p-16384L : 0xf.ffffe0000010001p+252L : xfail:ldbl-128ibm inexact
-= fma downward ldbl-96-m68k 0xf.fffffp+124L 0xf.fffffp+124L 0x2p-16384L : 0xf.ffffe000001p+252L : xfail:ldbl-128ibm inexact
+= fma towardzero ldbl-96-intel 0xf.fffffp+124L 0xf.fffffp+124L 0x2p-16384L : 0xf.ffffe000001p+252L : inexact
+= fma upward ldbl-96-intel 0xf.fffffp+124L 0xf.fffffp+124L 0x2p-16384L : 0xf.ffffe0000010001p+252L : inexact
+= fma downward ldbl-96-m68k 0xf.fffffp+124L 0xf.fffffp+124L 0x2p-16384L : 0xf.ffffe000001p+252L : inexact
= fma tonearest ldbl-96-m68k 0xf.fffffp+124L 0xf.fffffp+124L 0x2p-16384L : 0xf.ffffe000001p+252L : inexact
-= fma towardzero ldbl-96-m68k 0xf.fffffp+124L 0xf.fffffp+124L 0x2p-16384L : 0xf.ffffe000001p+252L : xfail:ldbl-128ibm inexact
-= fma upward ldbl-96-m68k 0xf.fffffp+124L 0xf.fffffp+124L 0x2p-16384L : 0xf.ffffe0000010001p+252L : xfail:ldbl-128ibm inexact
-= fma downward ldbl-128 0xf.fffffp+124L 0xf.fffffp+124L 0x2p-16384L : 0xf.ffffe000001p+252L : xfail:ldbl-128ibm inexact
+= fma towardzero ldbl-96-m68k 0xf.fffffp+124L 0xf.fffffp+124L 0x2p-16384L : 0xf.ffffe000001p+252L : inexact
+= fma upward ldbl-96-m68k 0xf.fffffp+124L 0xf.fffffp+124L 0x2p-16384L : 0xf.ffffe0000010001p+252L : inexact
+= fma downward ldbl-128 0xf.fffffp+124L 0xf.fffffp+124L 0x2p-16384L : 0xf.ffffe000001p+252L : inexact
= fma tonearest ldbl-128 0xf.fffffp+124L 0xf.fffffp+124L 0x2p-16384L : 0xf.ffffe000001p+252L : inexact
-= fma towardzero ldbl-128 0xf.fffffp+124L 0xf.fffffp+124L 0x2p-16384L : 0xf.ffffe000001p+252L : xfail:ldbl-128ibm inexact
-= fma upward ldbl-128 0xf.fffffp+124L 0xf.fffffp+124L 0x2p-16384L : 0xf.ffffe00000100000000000000008p+252L : xfail:ldbl-128ibm inexact
-= fma downward dbl-64 0xf.fffffp+124 0xf.fffffp+124 0x8p-972 : 0xf.ffffe000001p+252 : xfail:ldbl-128ibm inexact
+= fma towardzero ldbl-128 0xf.fffffp+124L 0xf.fffffp+124L 0x2p-16384L : 0xf.ffffe000001p+252L : inexact
+= fma upward ldbl-128 0xf.fffffp+124L 0xf.fffffp+124L 0x2p-16384L : 0xf.ffffe00000100000000000000008p+252L : inexact
+= fma downward dbl-64 0xf.fffffp+124 0xf.fffffp+124 0x8p-972 : 0xf.ffffe000001p+252 : inexact
= fma tonearest dbl-64 0xf.fffffp+124 0xf.fffffp+124 0x8p-972 : 0xf.ffffe000001p+252 : inexact
-= fma towardzero dbl-64 0xf.fffffp+124 0xf.fffffp+124 0x8p-972 : 0xf.ffffe000001p+252 : xfail:ldbl-128ibm inexact
-= fma upward dbl-64 0xf.fffffp+124 0xf.fffffp+124 0x8p-972 : 0xf.ffffe00000108p+252 : xfail:ldbl-128ibm inexact
-= fma downward ldbl-96-intel 0xf.fffffp+124L 0xf.fffffp+124L 0x8p-972L : 0xf.ffffe000001p+252L : xfail:ldbl-128ibm inexact
+= fma towardzero dbl-64 0xf.fffffp+124 0xf.fffffp+124 0x8p-972 : 0xf.ffffe000001p+252 : inexact
+= fma upward dbl-64 0xf.fffffp+124 0xf.fffffp+124 0x8p-972 : 0xf.ffffe00000108p+252 : inexact
+= fma downward ldbl-96-intel 0xf.fffffp+124L 0xf.fffffp+124L 0x8p-972L : 0xf.ffffe000001p+252L : inexact
= fma tonearest ldbl-96-intel 0xf.fffffp+124L 0xf.fffffp+124L 0x8p-972L : 0xf.ffffe000001p+252L : inexact
-= fma towardzero ldbl-96-intel 0xf.fffffp+124L 0xf.fffffp+124L 0x8p-972L : 0xf.ffffe000001p+252L : xfail:ldbl-128ibm inexact
-= fma upward ldbl-96-intel 0xf.fffffp+124L 0xf.fffffp+124L 0x8p-972L : 0xf.ffffe0000010001p+252L : xfail:ldbl-128ibm inexact
-= fma downward ldbl-96-m68k 0xf.fffffp+124L 0xf.fffffp+124L 0x8p-972L : 0xf.ffffe000001p+252L : xfail:ldbl-128ibm inexact
+= fma towardzero ldbl-96-intel 0xf.fffffp+124L 0xf.fffffp+124L 0x8p-972L : 0xf.ffffe000001p+252L : inexact
+= fma upward ldbl-96-intel 0xf.fffffp+124L 0xf.fffffp+124L 0x8p-972L : 0xf.ffffe0000010001p+252L : inexact
+= fma downward ldbl-96-m68k 0xf.fffffp+124L 0xf.fffffp+124L 0x8p-972L : 0xf.ffffe000001p+252L : inexact
= fma tonearest ldbl-96-m68k 0xf.fffffp+124L 0xf.fffffp+124L 0x8p-972L : 0xf.ffffe000001p+252L : inexact
-= fma towardzero ldbl-96-m68k 0xf.fffffp+124L 0xf.fffffp+124L 0x8p-972L : 0xf.ffffe000001p+252L : xfail:ldbl-128ibm inexact
-= fma upward ldbl-96-m68k 0xf.fffffp+124L 0xf.fffffp+124L 0x8p-972L : 0xf.ffffe0000010001p+252L : xfail:ldbl-128ibm inexact
-= fma downward ldbl-128 0xf.fffffp+124L 0xf.fffffp+124L 0x8p-972L : 0xf.ffffe000001p+252L : xfail:ldbl-128ibm inexact
+= fma towardzero ldbl-96-m68k 0xf.fffffp+124L 0xf.fffffp+124L 0x8p-972L : 0xf.ffffe000001p+252L : inexact
+= fma upward ldbl-96-m68k 0xf.fffffp+124L 0xf.fffffp+124L 0x8p-972L : 0xf.ffffe0000010001p+252L : inexact
+= fma downward ldbl-128 0xf.fffffp+124L 0xf.fffffp+124L 0x8p-972L : 0xf.ffffe000001p+252L : inexact
= fma tonearest ldbl-128 0xf.fffffp+124L 0xf.fffffp+124L 0x8p-972L : 0xf.ffffe000001p+252L : inexact
-= fma towardzero ldbl-128 0xf.fffffp+124L 0xf.fffffp+124L 0x8p-972L : 0xf.ffffe000001p+252L : xfail:ldbl-128ibm inexact
-= fma upward ldbl-128 0xf.fffffp+124L 0xf.fffffp+124L 0x8p-972L : 0xf.ffffe00000100000000000000008p+252L : xfail:ldbl-128ibm inexact
-= fma downward ldbl-128ibm 0xf.fffffp+124L 0xf.fffffp+124L 0x8p-972L : 0xf.ffffe000001p+252L : xfail:ldbl-128ibm inexact
+= fma towardzero ldbl-128 0xf.fffffp+124L 0xf.fffffp+124L 0x8p-972L : 0xf.ffffe000001p+252L : inexact
+= fma upward ldbl-128 0xf.fffffp+124L 0xf.fffffp+124L 0x8p-972L : 0xf.ffffe00000100000000000000008p+252L : inexact
+= fma downward ldbl-128ibm 0xf.fffffp+124L 0xf.fffffp+124L 0x8p-972L : 0xf.ffffe000001p+252L : inexact
= fma tonearest ldbl-128ibm 0xf.fffffp+124L 0xf.fffffp+124L 0x8p-972L : 0xf.ffffe000001p+252L : inexact
-= fma towardzero ldbl-128ibm 0xf.fffffp+124L 0xf.fffffp+124L 0x8p-972L : 0xf.ffffe000001p+252L : xfail:ldbl-128ibm inexact
-= fma upward ldbl-128ibm 0xf.fffffp+124L 0xf.fffffp+124L 0x8p-972L : 0xf.ffffe000001000000000000004p+252L : xfail:ldbl-128ibm inexact
-= fma downward dbl-64 0xf.fffffp+124 0xf.ffffffffffff8p+1020 0x4p-128 : 0xf.ffffffffffff8p+1020 : xfail:ldbl-128ibm inexact overflow errno-erange-ok
+= fma towardzero ldbl-128ibm 0xf.fffffp+124L 0xf.fffffp+124L 0x8p-972L : 0xf.ffffe000001p+252L : inexact
+= fma upward ldbl-128ibm 0xf.fffffp+124L 0xf.fffffp+124L 0x8p-972L : 0xf.ffffe000001000000000000004p+252L : inexact
+= fma downward dbl-64 0xf.fffffp+124 0xf.ffffffffffff8p+1020 0x4p-128 : 0xf.ffffffffffff8p+1020 : inexact overflow errno-erange-ok
= fma tonearest dbl-64 0xf.fffffp+124 0xf.ffffffffffff8p+1020 0x4p-128 : plus_infty : inexact overflow errno-erange errno-erange-ok
-= fma towardzero dbl-64 0xf.fffffp+124 0xf.ffffffffffff8p+1020 0x4p-128 : 0xf.ffffffffffff8p+1020 : xfail:ldbl-128ibm inexact overflow errno-erange-ok
-= fma upward dbl-64 0xf.fffffp+124 0xf.ffffffffffff8p+1020 0x4p-128 : plus_infty : xfail:ldbl-128ibm inexact overflow errno-erange errno-erange-ok
-= fma downward ldbl-96-intel 0xf.fffffp+124L 0xf.ffffffffffff8p+1020L 0x4p-128L : 0xf.ffffefffffff8p+1148L : xfail:ldbl-128ibm inexact
+= fma towardzero dbl-64 0xf.fffffp+124 0xf.ffffffffffff8p+1020 0x4p-128 : 0xf.ffffffffffff8p+1020 : inexact overflow errno-erange-ok
+= fma upward dbl-64 0xf.fffffp+124 0xf.ffffffffffff8p+1020 0x4p-128 : plus_infty : inexact overflow errno-erange errno-erange-ok
+= fma downward ldbl-96-intel 0xf.fffffp+124L 0xf.ffffffffffff8p+1020L 0x4p-128L : 0xf.ffffefffffff8p+1148L : inexact
= fma tonearest ldbl-96-intel 0xf.fffffp+124L 0xf.ffffffffffff8p+1020L 0x4p-128L : 0xf.ffffefffffff8p+1148L : inexact
-= fma towardzero ldbl-96-intel 0xf.fffffp+124L 0xf.ffffffffffff8p+1020L 0x4p-128L : 0xf.ffffefffffff8p+1148L : xfail:ldbl-128ibm inexact
-= fma upward ldbl-96-intel 0xf.fffffp+124L 0xf.ffffffffffff8p+1020L 0x4p-128L : 0xf.ffffefffffff801p+1148L : xfail:ldbl-128ibm inexact
-= fma downward ldbl-96-m68k 0xf.fffffp+124L 0xf.ffffffffffff8p+1020L 0x4p-128L : 0xf.ffffefffffff8p+1148L : xfail:ldbl-128ibm inexact
+= fma towardzero ldbl-96-intel 0xf.fffffp+124L 0xf.ffffffffffff8p+1020L 0x4p-128L : 0xf.ffffefffffff8p+1148L : inexact
+= fma upward ldbl-96-intel 0xf.fffffp+124L 0xf.ffffffffffff8p+1020L 0x4p-128L : 0xf.ffffefffffff801p+1148L : inexact
+= fma downward ldbl-96-m68k 0xf.fffffp+124L 0xf.ffffffffffff8p+1020L 0x4p-128L : 0xf.ffffefffffff8p+1148L : inexact
= fma tonearest ldbl-96-m68k 0xf.fffffp+124L 0xf.ffffffffffff8p+1020L 0x4p-128L : 0xf.ffffefffffff8p+1148L : inexact
-= fma towardzero ldbl-96-m68k 0xf.fffffp+124L 0xf.ffffffffffff8p+1020L 0x4p-128L : 0xf.ffffefffffff8p+1148L : xfail:ldbl-128ibm inexact
-= fma upward ldbl-96-m68k 0xf.fffffp+124L 0xf.ffffffffffff8p+1020L 0x4p-128L : 0xf.ffffefffffff801p+1148L : xfail:ldbl-128ibm inexact
-= fma downward ldbl-128 0xf.fffffp+124L 0xf.ffffffffffff8p+1020L 0x4p-128L : 0xf.ffffefffffff8000008p+1148L : xfail:ldbl-128ibm inexact
+= fma towardzero ldbl-96-m68k 0xf.fffffp+124L 0xf.ffffffffffff8p+1020L 0x4p-128L : 0xf.ffffefffffff8p+1148L : inexact
+= fma upward ldbl-96-m68k 0xf.fffffp+124L 0xf.ffffffffffff8p+1020L 0x4p-128L : 0xf.ffffefffffff801p+1148L : inexact
+= fma downward ldbl-128 0xf.fffffp+124L 0xf.ffffffffffff8p+1020L 0x4p-128L : 0xf.ffffefffffff8000008p+1148L : inexact
= fma tonearest ldbl-128 0xf.fffffp+124L 0xf.ffffffffffff8p+1020L 0x4p-128L : 0xf.ffffefffffff8000008p+1148L : inexact
-= fma towardzero ldbl-128 0xf.fffffp+124L 0xf.ffffffffffff8p+1020L 0x4p-128L : 0xf.ffffefffffff8000008p+1148L : xfail:ldbl-128ibm inexact
-= fma upward ldbl-128 0xf.fffffp+124L 0xf.ffffffffffff8p+1020L 0x4p-128L : 0xf.ffffefffffff8000008000000008p+1148L : xfail:ldbl-128ibm inexact
-= fma downward ldbl-128ibm 0xf.fffffp+124L 0xf.ffffffffffff8p+1020L 0x4p-128L : 0xf.ffffffffffffbffffffffffffcp+1020L : xfail:ldbl-128ibm inexact overflow errno-erange-ok
+= fma towardzero ldbl-128 0xf.fffffp+124L 0xf.ffffffffffff8p+1020L 0x4p-128L : 0xf.ffffefffffff8000008p+1148L : inexact
+= fma upward ldbl-128 0xf.fffffp+124L 0xf.ffffffffffff8p+1020L 0x4p-128L : 0xf.ffffefffffff8000008000000008p+1148L : inexact
+= fma downward ldbl-128ibm 0xf.fffffp+124L 0xf.ffffffffffff8p+1020L 0x4p-128L : 0xf.ffffffffffffbffffffffffffcp+1020L : inexact overflow errno-erange-ok
= fma tonearest ldbl-128ibm 0xf.fffffp+124L 0xf.ffffffffffff8p+1020L 0x4p-128L : plus_infty : inexact overflow errno-erange errno-erange-ok
-= fma towardzero ldbl-128ibm 0xf.fffffp+124L 0xf.ffffffffffff8p+1020L 0x4p-128L : 0xf.ffffffffffffbffffffffffffcp+1020L : xfail:ldbl-128ibm inexact overflow errno-erange-ok
-= fma upward ldbl-128ibm 0xf.fffffp+124L 0xf.ffffffffffff8p+1020L 0x4p-128L : plus_infty : xfail:ldbl-128ibm inexact overflow errno-erange errno-erange-ok
-= fma downward dbl-64 0xf.fffffp+124 0xf.ffffffffffff8p+1020 0x4p-1024 : 0xf.ffffffffffff8p+1020 : xfail:ldbl-128ibm inexact overflow errno-erange-ok
+= fma towardzero ldbl-128ibm 0xf.fffffp+124L 0xf.ffffffffffff8p+1020L 0x4p-128L : 0xf.ffffffffffffbffffffffffffcp+1020L : inexact overflow errno-erange-ok
+= fma upward ldbl-128ibm 0xf.fffffp+124L 0xf.ffffffffffff8p+1020L 0x4p-128L : plus_infty : inexact overflow errno-erange errno-erange-ok
+= fma downward dbl-64 0xf.fffffp+124 0xf.ffffffffffff8p+1020 0x4p-1024 : 0xf.ffffffffffff8p+1020 : inexact overflow errno-erange-ok
= fma tonearest dbl-64 0xf.fffffp+124 0xf.ffffffffffff8p+1020 0x4p-1024 : plus_infty : inexact overflow errno-erange errno-erange-ok
-= fma towardzero dbl-64 0xf.fffffp+124 0xf.ffffffffffff8p+1020 0x4p-1024 : 0xf.ffffffffffff8p+1020 : xfail:ldbl-128ibm inexact overflow errno-erange-ok
-= fma upward dbl-64 0xf.fffffp+124 0xf.ffffffffffff8p+1020 0x4p-1024 : plus_infty : xfail:ldbl-128ibm inexact overflow errno-erange errno-erange-ok
-= fma downward ldbl-96-intel 0xf.fffffp+124L 0xf.ffffffffffff8p+1020L 0x4p-1024L : 0xf.ffffefffffff8p+1148L : xfail:ldbl-128ibm inexact
+= fma towardzero dbl-64 0xf.fffffp+124 0xf.ffffffffffff8p+1020 0x4p-1024 : 0xf.ffffffffffff8p+1020 : inexact overflow errno-erange-ok
+= fma upward dbl-64 0xf.fffffp+124 0xf.ffffffffffff8p+1020 0x4p-1024 : plus_infty : inexact overflow errno-erange errno-erange-ok
+= fma downward ldbl-96-intel 0xf.fffffp+124L 0xf.ffffffffffff8p+1020L 0x4p-1024L : 0xf.ffffefffffff8p+1148L : inexact
= fma tonearest ldbl-96-intel 0xf.fffffp+124L 0xf.ffffffffffff8p+1020L 0x4p-1024L : 0xf.ffffefffffff8p+1148L : inexact
-= fma towardzero ldbl-96-intel 0xf.fffffp+124L 0xf.ffffffffffff8p+1020L 0x4p-1024L : 0xf.ffffefffffff8p+1148L : xfail:ldbl-128ibm inexact
-= fma upward ldbl-96-intel 0xf.fffffp+124L 0xf.ffffffffffff8p+1020L 0x4p-1024L : 0xf.ffffefffffff801p+1148L : xfail:ldbl-128ibm inexact
-= fma downward ldbl-96-m68k 0xf.fffffp+124L 0xf.ffffffffffff8p+1020L 0x4p-1024L : 0xf.ffffefffffff8p+1148L : xfail:ldbl-128ibm inexact
+= fma towardzero ldbl-96-intel 0xf.fffffp+124L 0xf.ffffffffffff8p+1020L 0x4p-1024L : 0xf.ffffefffffff8p+1148L : inexact
+= fma upward ldbl-96-intel 0xf.fffffp+124L 0xf.ffffffffffff8p+1020L 0x4p-1024L : 0xf.ffffefffffff801p+1148L : inexact
+= fma downward ldbl-96-m68k 0xf.fffffp+124L 0xf.ffffffffffff8p+1020L 0x4p-1024L : 0xf.ffffefffffff8p+1148L : inexact
= fma tonearest ldbl-96-m68k 0xf.fffffp+124L 0xf.ffffffffffff8p+1020L 0x4p-1024L : 0xf.ffffefffffff8p+1148L : inexact
-= fma towardzero ldbl-96-m68k 0xf.fffffp+124L 0xf.ffffffffffff8p+1020L 0x4p-1024L : 0xf.ffffefffffff8p+1148L : xfail:ldbl-128ibm inexact
-= fma upward ldbl-96-m68k 0xf.fffffp+124L 0xf.ffffffffffff8p+1020L 0x4p-1024L : 0xf.ffffefffffff801p+1148L : xfail:ldbl-128ibm inexact
-= fma downward ldbl-128 0xf.fffffp+124L 0xf.ffffffffffff8p+1020L 0x4p-1024L : 0xf.ffffefffffff8000008p+1148L : xfail:ldbl-128ibm inexact
+= fma towardzero ldbl-96-m68k 0xf.fffffp+124L 0xf.ffffffffffff8p+1020L 0x4p-1024L : 0xf.ffffefffffff8p+1148L : inexact
+= fma upward ldbl-96-m68k 0xf.fffffp+124L 0xf.ffffffffffff8p+1020L 0x4p-1024L : 0xf.ffffefffffff801p+1148L : inexact
+= fma downward ldbl-128 0xf.fffffp+124L 0xf.ffffffffffff8p+1020L 0x4p-1024L : 0xf.ffffefffffff8000008p+1148L : inexact
= fma tonearest ldbl-128 0xf.fffffp+124L 0xf.ffffffffffff8p+1020L 0x4p-1024L : 0xf.ffffefffffff8000008p+1148L : inexact
-= fma towardzero ldbl-128 0xf.fffffp+124L 0xf.ffffffffffff8p+1020L 0x4p-1024L : 0xf.ffffefffffff8000008p+1148L : xfail:ldbl-128ibm inexact
-= fma upward ldbl-128 0xf.fffffp+124L 0xf.ffffffffffff8p+1020L 0x4p-1024L : 0xf.ffffefffffff8000008000000008p+1148L : xfail:ldbl-128ibm inexact
-= fma downward ldbl-128ibm 0xf.fffffp+124L 0xf.ffffffffffff8p+1020L 0x4p-1024L : 0xf.ffffffffffffbffffffffffffcp+1020L : xfail:ldbl-128ibm inexact overflow errno-erange-ok
+= fma towardzero ldbl-128 0xf.fffffp+124L 0xf.ffffffffffff8p+1020L 0x4p-1024L : 0xf.ffffefffffff8000008p+1148L : inexact
+= fma upward ldbl-128 0xf.fffffp+124L 0xf.ffffffffffff8p+1020L 0x4p-1024L : 0xf.ffffefffffff8000008000000008p+1148L : inexact
+= fma downward ldbl-128ibm 0xf.fffffp+124L 0xf.ffffffffffff8p+1020L 0x4p-1024L : 0xf.ffffffffffffbffffffffffffcp+1020L : inexact overflow errno-erange-ok
= fma tonearest ldbl-128ibm 0xf.fffffp+124L 0xf.ffffffffffff8p+1020L 0x4p-1024L : plus_infty : inexact overflow errno-erange errno-erange-ok
-= fma towardzero ldbl-128ibm 0xf.fffffp+124L 0xf.ffffffffffff8p+1020L 0x4p-1024L : 0xf.ffffffffffffbffffffffffffcp+1020L : xfail:ldbl-128ibm inexact overflow errno-erange-ok
-= fma upward ldbl-128ibm 0xf.fffffp+124L 0xf.ffffffffffff8p+1020L 0x4p-1024L : plus_infty : xfail:ldbl-128ibm inexact overflow errno-erange errno-erange-ok
-= fma downward ldbl-96-intel 0xf.fffffp+124L 0xf.ffffffffffff8p+1020L 0x4p-16384L : 0xf.ffffefffffff8p+1148L : xfail:ldbl-128ibm inexact
+= fma towardzero ldbl-128ibm 0xf.fffffp+124L 0xf.ffffffffffff8p+1020L 0x4p-1024L : 0xf.ffffffffffffbffffffffffffcp+1020L : inexact overflow errno-erange-ok
+= fma upward ldbl-128ibm 0xf.fffffp+124L 0xf.ffffffffffff8p+1020L 0x4p-1024L : plus_infty : inexact overflo