aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog21
-rw-r--r--NEWS28
-rw-r--r--math/auto-libm-test-in11
-rw-r--r--math/auto-libm-test-out226
-rw-r--r--sysdeps/i386/fpu/s_expm1.S22
-rw-r--r--sysdeps/i386/fpu/s_expm1f.S22
-rw-r--r--sysdeps/ieee754/dbl-64/s_expm1.c6
-rw-r--r--sysdeps/ieee754/dbl-64/wordsize-64/e_cosh.c3
-rw-r--r--sysdeps/ieee754/flt-32/s_expm1f.c6
9 files changed, 211 insertions, 134 deletions
diff --git a/ChangeLog b/ChangeLog
index 6442ca66ef..2d6f383b90 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,24 @@
+2015-06-22 Joseph Myers <joseph@codesourcery.com>
+
+ [BZ #16353]
+ * sysdeps/i386/fpu/s_expm1.S (dbl_min): New object.
+ (__expm1): Force underflow exception for arguments with small
+ absolute value.
+ * sysdeps/i386/fpu/s_expm1f.S (flt_min): New object.
+ (__expm1f): Force underflow exception for arguments with small
+ absolute value.
+ * sysdeps/ieee754/dbl-64/s_expm1.c: Include <float.h>.
+ (__expm1): Force underflow exception for arguments with small
+ absolute value.
+ * sysdeps/ieee754/flt-32/s_expm1f.c: Include <float.h>.
+ (__expm1f): Force underflow exception for arguments with small
+ absolute value.
+ * sysdeps/ieee754/dbl-64/wordsize-64/e_cosh.c (__ieee754_cosh):
+ Check for small arguments before calling __expm1.
+ * math/auto-libm-test-in: Do not mark underflow exceptions as
+ possibly missing for bug 16353.
+ * math/auto-libm-test-out: Regenerated.
+
2015-06-22 Andreas Schwab <schwab@suse.de>
[BZ #18513]
diff --git a/NEWS b/NEWS
index 6f8cb0628d..4e21210575 100644
--- a/NEWS
+++ b/NEWS
@@ -10,20 +10,20 @@ Version 2.22
* The following bugs are resolved with this release:
438, 4719, 6792, 13028, 13064, 14094, 14841, 14906, 14958, 15319, 15467,
- 15790, 15969, 16159, 16339, 16350, 16351, 16352, 16361, 16512, 16560,
- 16704, 16783, 16850, 17053, 17090, 17195, 17269, 17293, 17322, 17523,
- 17542, 17569, 17581, 17588, 17596, 17620, 17621, 17628, 17631, 17692,
- 17711, 17715, 17776, 17779, 17792, 17836, 17912, 17916, 17930, 17932,
- 17944, 17949, 17964, 17965, 17967, 17969, 17978, 17987, 17991, 17996,
- 17998, 17999, 18007, 18019, 18020, 18029, 18030, 18032, 18034, 18036,
- 18038, 18039, 18042, 18043, 18046, 18047, 18049, 18068, 18080, 18093,
- 18100, 18104, 18110, 18111, 18116, 18125, 18128, 18138, 18185, 18196,
- 18197, 18206, 18210, 18211, 18217, 18220, 18221, 18234, 18244, 18247,
- 18287, 18319, 18324, 18333, 18346, 18397, 18409, 18410, 18412, 18418,
- 18422, 18434, 18444, 18468, 18469, 18470, 18479, 18483, 18495, 18496,
- 18497, 18498, 18507, 18512, 18513, 18519, 18520, 18522, 18527, 18528,
- 18529, 18530, 18532, 18533, 18534, 18536, 18539, 18540, 18542, 18544,
- 18545, 18546, 18547, 18553, 18558, 18569.
+ 15790, 15969, 16159, 16339, 16350, 16351, 16352, 16353, 16361, 16512,
+ 16560, 16704, 16783, 16850, 17053, 17090, 17195, 17269, 17293, 17322,
+ 17523, 17542, 17569, 17581, 17588, 17596, 17620, 17621, 17628, 17631,
+ 17692, 17711, 17715, 17776, 17779, 17792, 17836, 17912, 17916, 17930,
+ 17932, 17944, 17949, 17964, 17965, 17967, 17969, 17978, 17987, 17991,
+ 17996, 17998, 17999, 18007, 18019, 18020, 18029, 18030, 18032, 18034,
+ 18036, 18038, 18039, 18042, 18043, 18046, 18047, 18049, 18068, 18080,
+ 18093, 18100, 18104, 18110, 18111, 18116, 18125, 18128, 18138, 18185,
+ 18196, 18197, 18206, 18210, 18211, 18217, 18220, 18221, 18234, 18244,
+ 18247, 18287, 18319, 18324, 18333, 18346, 18397, 18409, 18410, 18412,
+ 18418, 18422, 18434, 18444, 18468, 18469, 18470, 18479, 18483, 18495,
+ 18496, 18497, 18498, 18507, 18512, 18513, 18519, 18520, 18522, 18527,
+ 18528, 18529, 18530, 18532, 18533, 18534, 18536, 18539, 18540, 18542,
+ 18544, 18545, 18546, 18547, 18553, 18558, 18569.
* Cache information can be queried via sysconf() function on s390 e.g. with
_SC_LEVEL1_ICACHE_SIZE as argument.
diff --git a/math/auto-libm-test-in b/math/auto-libm-test-in
index 6b054597f1..9bae9d5570 100644
--- a/math/auto-libm-test-in
+++ b/math/auto-libm-test-in
@@ -1362,12 +1362,11 @@ expm1 0x6.289a78p-4
expm1 0x6.1b4d318238d4a2a8p-4
expm1 0x5.fb8dc64e91a74p-4
expm1 0x3.735f497c4e67535cp-4
-# Bug 16353: underflow exception may be missing
-expm1 0x4.0000000000000028p-16384 missing-underflow
-expm1 min missing-underflow
-expm1 -min missing-underflow
-expm1 min_subnorm missing-underflow
-expm1 -min_subnorm missing-underflow
+expm1 0x4.0000000000000028p-16384
+expm1 min
+expm1 -min
+expm1 min_subnorm
+expm1 -min_subnorm
fma 1.0 2.0 3.0
fma 1.25 0.75 0.0625
diff --git a/math/auto-libm-test-out b/math/auto-libm-test-out
index 2aecda11f7..9f80736e86 100644
--- a/math/auto-libm-test-out
+++ b/math/auto-libm-test-out
@@ -109498,11 +109498,11 @@ expm1 0x3.735f497c4e67535cp-4
= expm1 tonearest ldbl-128ibm 0x3.735f497c4e67535cp-4L : 0x3.d9dcef7e7e397c649290c708e4p-4L : inexact-ok
= expm1 towardzero ldbl-128ibm 0x3.735f497c4e67535cp-4L : 0x3.d9dcef7e7e397c649290c708e3p-4L : inexact-ok
= expm1 upward ldbl-128ibm 0x3.735f497c4e67535cp-4L : 0x3.d9dcef7e7e397c649290c708e4p-4L : inexact-ok
-expm1 0x4.0000000000000028p-16384 missing-underflow
-= expm1 downward flt-32 0x8p-152f : 0x8p-152f : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 tonearest flt-32 0x8p-152f : 0x8p-152f : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 towardzero flt-32 0x8p-152f : 0x8p-152f : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 upward flt-32 0x8p-152f : 0x1p-148f : inexact-ok underflow underflow-ok errno-erange-ok
+expm1 0x4.0000000000000028p-16384
+= expm1 downward flt-32 0x8p-152f : 0x8p-152f : inexact-ok underflow errno-erange-ok
+= expm1 tonearest flt-32 0x8p-152f : 0x8p-152f : inexact-ok underflow errno-erange-ok
+= expm1 towardzero flt-32 0x8p-152f : 0x8p-152f : inexact-ok underflow errno-erange-ok
+= expm1 upward flt-32 0x8p-152f : 0x1p-148f : inexact-ok underflow errno-erange-ok
= expm1 downward dbl-64 0x8p-152 : 0x8p-152 : inexact-ok
= expm1 tonearest dbl-64 0x8p-152 : 0x8p-152 : inexact-ok
= expm1 towardzero dbl-64 0x8p-152 : 0x8p-152 : inexact-ok
@@ -109547,10 +109547,10 @@ expm1 0x4.0000000000000028p-16384 missing-underflow
= expm1 tonearest ldbl-128ibm 0x0p+0L : 0x0p+0L : inexact-ok
= expm1 towardzero ldbl-128ibm 0x0p+0L : 0x0p+0L : inexact-ok
= expm1 upward ldbl-128ibm 0x0p+0L : 0x0p+0L : inexact-ok
-= expm1 downward dbl-64 0x4p-1076 : 0x4p-1076 : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 tonearest dbl-64 0x4p-1076 : 0x4p-1076 : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 towardzero dbl-64 0x4p-1076 : 0x4p-1076 : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 upward dbl-64 0x4p-1076 : 0x8p-1076 : inexact-ok underflow underflow-ok errno-erange-ok
+= expm1 downward dbl-64 0x4p-1076 : 0x4p-1076 : inexact-ok underflow errno-erange-ok
+= expm1 tonearest dbl-64 0x4p-1076 : 0x4p-1076 : inexact-ok underflow errno-erange-ok
+= expm1 towardzero dbl-64 0x4p-1076 : 0x4p-1076 : inexact-ok underflow errno-erange-ok
+= expm1 upward dbl-64 0x4p-1076 : 0x8p-1076 : inexact-ok underflow errno-erange-ok
= expm1 downward ldbl-96-intel 0x4p-1076L : 0x4p-1076L : inexact-ok
= expm1 tonearest ldbl-96-intel 0x4p-1076L : 0x4p-1076L : inexact-ok
= expm1 towardzero ldbl-96-intel 0x4p-1076L : 0x4p-1076L : inexact-ok
@@ -109563,10 +109563,10 @@ expm1 0x4.0000000000000028p-16384 missing-underflow
= expm1 tonearest ldbl-128 0x4p-1076L : 0x4p-1076L : inexact-ok
= expm1 towardzero ldbl-128 0x4p-1076L : 0x4p-1076L : inexact-ok
= expm1 upward ldbl-128 0x4p-1076L : 0x4.0000000000000000000000000004p-1076L : inexact-ok
-= expm1 downward ldbl-128ibm 0x4p-1076L : 0x4p-1076L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 tonearest ldbl-128ibm 0x4p-1076L : 0x4p-1076L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 towardzero ldbl-128ibm 0x4p-1076L : 0x4p-1076L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 upward ldbl-128ibm 0x4p-1076L : 0x8p-1076L : inexact-ok underflow underflow-ok errno-erange-ok
+= expm1 downward ldbl-128ibm 0x4p-1076L : 0x4p-1076L : inexact-ok underflow errno-erange-ok
+= expm1 tonearest ldbl-128ibm 0x4p-1076L : 0x4p-1076L : inexact-ok underflow errno-erange-ok
+= expm1 towardzero ldbl-128ibm 0x4p-1076L : 0x4p-1076L : inexact-ok underflow errno-erange-ok
+= expm1 upward ldbl-128ibm 0x4p-1076L : 0x8p-1076L : inexact-ok underflow errno-erange-ok
= expm1 downward ldbl-96-intel 0x4.0000000000000028p-16384L : 0x4.0000000000000028p-16384L : inexact-ok
= expm1 tonearest ldbl-96-intel 0x4.0000000000000028p-16384L : 0x4.0000000000000028p-16384L : inexact-ok
= expm1 towardzero ldbl-96-intel 0x4.0000000000000028p-16384L : 0x4.0000000000000028p-16384L : inexact-ok
@@ -109579,7 +109579,7 @@ expm1 0x4.0000000000000028p-16384 missing-underflow
= expm1 tonearest ldbl-128 0x4.0000000000000028p-16384L : 0x4.0000000000000028p-16384L : inexact-ok
= expm1 towardzero ldbl-128 0x4.0000000000000028p-16384L : 0x4.0000000000000028p-16384L : inexact-ok
= expm1 upward ldbl-128 0x4.0000000000000028p-16384L : 0x4.0000000000000028000000000004p-16384L : inexact-ok
-expm1 min missing-underflow
+expm1 min
= expm1 downward flt-32 0x4p-128f : 0x4p-128f : inexact-ok underflow-ok errno-erange-ok
= expm1 tonearest flt-32 0x4p-128f : 0x4p-128f : inexact-ok underflow-ok errno-erange-ok
= expm1 towardzero flt-32 0x4p-128f : 0x4p-128f : inexact-ok underflow-ok errno-erange-ok
@@ -109620,10 +109620,10 @@ expm1 min missing-underflow
= expm1 tonearest ldbl-128 0x4p-1024L : 0x4p-1024L : inexact-ok
= expm1 towardzero ldbl-128 0x4p-1024L : 0x4p-1024L : inexact-ok
= expm1 upward ldbl-128 0x4p-1024L : 0x4.0000000000000000000000000004p-1024L : inexact-ok
-= expm1 downward ldbl-128ibm 0x4p-1024L : 0x4p-1024L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 tonearest ldbl-128ibm 0x4p-1024L : 0x4p-1024L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 towardzero ldbl-128ibm 0x4p-1024L : 0x4p-1024L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 upward ldbl-128ibm 0x4p-1024L : 0x4.0000000000004p-1024L : inexact-ok underflow underflow-ok errno-erange-ok
+= expm1 downward ldbl-128ibm 0x4p-1024L : 0x4p-1024L : inexact-ok underflow errno-erange-ok
+= expm1 tonearest ldbl-128ibm 0x4p-1024L : 0x4p-1024L : inexact-ok underflow errno-erange-ok
+= expm1 towardzero ldbl-128ibm 0x4p-1024L : 0x4p-1024L : inexact-ok underflow errno-erange-ok
+= expm1 upward ldbl-128ibm 0x4p-1024L : 0x4.0000000000004p-1024L : inexact-ok underflow errno-erange-ok
= expm1 downward ldbl-96-intel 0x4p-16384L : 0x4p-16384L : inexact-ok underflow-ok errno-erange-ok
= expm1 tonearest ldbl-96-intel 0x4p-16384L : 0x4p-16384L : inexact-ok underflow-ok errno-erange-ok
= expm1 towardzero ldbl-96-intel 0x4p-16384L : 0x4p-16384L : inexact-ok underflow-ok errno-erange-ok
@@ -109636,18 +109636,18 @@ expm1 min missing-underflow
= expm1 tonearest ldbl-128 0x4p-16384L : 0x4p-16384L : inexact-ok underflow-ok errno-erange-ok
= expm1 towardzero ldbl-128 0x4p-16384L : 0x4p-16384L : inexact-ok underflow-ok errno-erange-ok
= expm1 upward ldbl-128 0x4p-16384L : 0x4.0000000000000000000000000004p-16384L : inexact-ok underflow-ok errno-erange-ok
-= expm1 downward ldbl-96-intel 0x2p-16384L : 0x2p-16384L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 tonearest ldbl-96-intel 0x2p-16384L : 0x2p-16384L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 towardzero ldbl-96-intel 0x2p-16384L : 0x2p-16384L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 upward ldbl-96-intel 0x2p-16384L : 0x2.0000000000000008p-16384L : inexact-ok underflow underflow-ok errno-erange-ok
+= expm1 downward ldbl-96-intel 0x2p-16384L : 0x2p-16384L : inexact-ok underflow errno-erange-ok
+= expm1 tonearest ldbl-96-intel 0x2p-16384L : 0x2p-16384L : inexact-ok underflow errno-erange-ok
+= expm1 towardzero ldbl-96-intel 0x2p-16384L : 0x2p-16384L : inexact-ok underflow errno-erange-ok
+= expm1 upward ldbl-96-intel 0x2p-16384L : 0x2.0000000000000008p-16384L : inexact-ok underflow errno-erange-ok
= expm1 downward ldbl-96-m68k 0x2p-16384L : 0x2p-16384L : inexact-ok underflow-ok errno-erange-ok
= expm1 tonearest ldbl-96-m68k 0x2p-16384L : 0x2p-16384L : inexact-ok underflow-ok errno-erange-ok
= expm1 towardzero ldbl-96-m68k 0x2p-16384L : 0x2p-16384L : inexact-ok underflow-ok errno-erange-ok
= expm1 upward ldbl-96-m68k 0x2p-16384L : 0x2.0000000000000004p-16384L : inexact-ok underflow-ok errno-erange-ok
-= expm1 downward ldbl-128 0x2p-16384L : 0x2p-16384L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 tonearest ldbl-128 0x2p-16384L : 0x2p-16384L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 towardzero ldbl-128 0x2p-16384L : 0x2p-16384L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 upward ldbl-128 0x2p-16384L : 0x2.0000000000000000000000000004p-16384L : inexact-ok underflow underflow-ok errno-erange-ok
+= expm1 downward ldbl-128 0x2p-16384L : 0x2p-16384L : inexact-ok underflow errno-erange-ok
+= expm1 tonearest ldbl-128 0x2p-16384L : 0x2p-16384L : inexact-ok underflow errno-erange-ok
+= expm1 towardzero ldbl-128 0x2p-16384L : 0x2p-16384L : inexact-ok underflow errno-erange-ok
+= expm1 upward ldbl-128 0x2p-16384L : 0x2.0000000000000000000000000004p-16384L : inexact-ok underflow errno-erange-ok
= expm1 downward dbl-64 0x8p-972 : 0x8p-972 : inexact-ok
= expm1 tonearest dbl-64 0x8p-972 : 0x8p-972 : inexact-ok
= expm1 towardzero dbl-64 0x8p-972 : 0x8p-972 : inexact-ok
@@ -109668,7 +109668,7 @@ expm1 min missing-underflow
= expm1 tonearest ldbl-128ibm 0x8p-972L : 0x8p-972L : inexact-ok underflow-ok errno-erange-ok
= expm1 towardzero ldbl-128ibm 0x8p-972L : 0x8p-972L : inexact-ok underflow-ok errno-erange-ok
= expm1 upward ldbl-128ibm 0x8p-972L : 0x8.00000000000000000000000004p-972L : inexact-ok underflow-ok errno-erange-ok
-expm1 -min missing-underflow
+expm1 -min
= expm1 downward flt-32 -0x4p-128f : -0x4p-128f : inexact-ok underflow-ok errno-erange-ok
= expm1 tonearest flt-32 -0x4p-128f : -0x4p-128f : inexact-ok underflow-ok errno-erange-ok
= expm1 towardzero flt-32 -0x4p-128f : -0x3.fffff8p-128f : inexact-ok underflow-ok errno-erange-ok
@@ -109709,10 +109709,10 @@ expm1 -min missing-underflow
= expm1 tonearest ldbl-128 -0x4p-1024L : -0x4p-1024L : inexact-ok
= expm1 towardzero ldbl-128 -0x4p-1024L : -0x3.fffffffffffffffffffffffffffep-1024L : inexact-ok
= expm1 upward ldbl-128 -0x4p-1024L : -0x3.fffffffffffffffffffffffffffep-1024L : inexact-ok
-= expm1 downward ldbl-128ibm -0x4p-1024L : -0x4p-1024L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 tonearest ldbl-128ibm -0x4p-1024L : -0x4p-1024L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 towardzero ldbl-128ibm -0x4p-1024L : -0x3.ffffffffffffcp-1024L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 upward ldbl-128ibm -0x4p-1024L : -0x3.ffffffffffffcp-1024L : inexact-ok underflow underflow-ok errno-erange-ok
+= expm1 downward ldbl-128ibm -0x4p-1024L : -0x4p-1024L : inexact-ok underflow errno-erange-ok
+= expm1 tonearest ldbl-128ibm -0x4p-1024L : -0x4p-1024L : inexact-ok underflow errno-erange-ok
+= expm1 towardzero ldbl-128ibm -0x4p-1024L : -0x3.ffffffffffffcp-1024L : inexact-ok underflow errno-erange-ok
+= expm1 upward ldbl-128ibm -0x4p-1024L : -0x3.ffffffffffffcp-1024L : inexact-ok underflow errno-erange-ok
= expm1 downward ldbl-96-intel -0x4p-16384L : -0x4p-16384L : inexact-ok underflow-ok errno-erange-ok
= expm1 tonearest ldbl-96-intel -0x4p-16384L : -0x4p-16384L : inexact-ok underflow-ok errno-erange-ok
= expm1 towardzero ldbl-96-intel -0x4p-16384L : -0x3.fffffffffffffff8p-16384L : inexact-ok underflow-ok errno-erange-ok
@@ -109725,18 +109725,18 @@ expm1 -min missing-underflow
= expm1 tonearest ldbl-128 -0x4p-16384L : -0x4p-16384L : inexact-ok underflow-ok errno-erange-ok
= expm1 towardzero ldbl-128 -0x4p-16384L : -0x3.fffffffffffffffffffffffffffcp-16384L : inexact-ok underflow-ok errno-erange-ok
= expm1 upward ldbl-128 -0x4p-16384L : -0x3.fffffffffffffffffffffffffffcp-16384L : inexact-ok underflow-ok errno-erange-ok
-= expm1 downward ldbl-96-intel -0x2p-16384L : -0x2p-16384L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 tonearest ldbl-96-intel -0x2p-16384L : -0x2p-16384L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 towardzero ldbl-96-intel -0x2p-16384L : -0x1.fffffffffffffff8p-16384L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 upward ldbl-96-intel -0x2p-16384L : -0x1.fffffffffffffff8p-16384L : inexact-ok underflow underflow-ok errno-erange-ok
+= expm1 downward ldbl-96-intel -0x2p-16384L : -0x2p-16384L : inexact-ok underflow errno-erange-ok
+= expm1 tonearest ldbl-96-intel -0x2p-16384L : -0x2p-16384L : inexact-ok underflow errno-erange-ok
+= expm1 towardzero ldbl-96-intel -0x2p-16384L : -0x1.fffffffffffffff8p-16384L : inexact-ok underflow errno-erange-ok
+= expm1 upward ldbl-96-intel -0x2p-16384L : -0x1.fffffffffffffff8p-16384L : inexact-ok underflow errno-erange-ok
= expm1 downward ldbl-96-m68k -0x2p-16384L : -0x2p-16384L : inexact-ok underflow-ok errno-erange-ok
= expm1 tonearest ldbl-96-m68k -0x2p-16384L : -0x2p-16384L : inexact-ok underflow-ok errno-erange-ok
= expm1 towardzero ldbl-96-m68k -0x2p-16384L : -0x1.fffffffffffffffcp-16384L : inexact-ok underflow-ok errno-erange-ok
= expm1 upward ldbl-96-m68k -0x2p-16384L : -0x1.fffffffffffffffcp-16384L : inexact-ok underflow-ok errno-erange-ok
-= expm1 downward ldbl-128 -0x2p-16384L : -0x2p-16384L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 tonearest ldbl-128 -0x2p-16384L : -0x2p-16384L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 towardzero ldbl-128 -0x2p-16384L : -0x1.fffffffffffffffffffffffffffcp-16384L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 upward ldbl-128 -0x2p-16384L : -0x1.fffffffffffffffffffffffffffcp-16384L : inexact-ok underflow underflow-ok errno-erange-ok
+= expm1 downward ldbl-128 -0x2p-16384L : -0x2p-16384L : inexact-ok underflow errno-erange-ok
+= expm1 tonearest ldbl-128 -0x2p-16384L : -0x2p-16384L : inexact-ok underflow errno-erange-ok
+= expm1 towardzero ldbl-128 -0x2p-16384L : -0x1.fffffffffffffffffffffffffffcp-16384L : inexact-ok underflow errno-erange-ok
+= expm1 upward ldbl-128 -0x2p-16384L : -0x1.fffffffffffffffffffffffffffcp-16384L : inexact-ok underflow errno-erange-ok
= expm1 downward dbl-64 -0x8p-972 : -0x8p-972 : inexact-ok
= expm1 tonearest dbl-64 -0x8p-972 : -0x8p-972 : inexact-ok
= expm1 towardzero dbl-64 -0x8p-972 : -0x7.ffffffffffffcp-972 : inexact-ok
@@ -109757,11 +109757,11 @@ expm1 -min missing-underflow
= expm1 tonearest ldbl-128ibm -0x8p-972L : -0x8p-972L : inexact-ok underflow-ok errno-erange-ok
= expm1 towardzero ldbl-128ibm -0x8p-972L : -0x7.fffffffffffffffffffffffffcp-972L : inexact-ok underflow-ok errno-erange-ok
= expm1 upward ldbl-128ibm -0x8p-972L : -0x7.fffffffffffffffffffffffffcp-972L : inexact-ok underflow-ok errno-erange-ok
-expm1 min_subnorm missing-underflow
-= expm1 downward flt-32 0x8p-152f : 0x8p-152f : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 tonearest flt-32 0x8p-152f : 0x8p-152f : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 towardzero flt-32 0x8p-152f : 0x8p-152f : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 upward flt-32 0x8p-152f : 0x1p-148f : inexact-ok underflow underflow-ok errno-erange-ok
+expm1 min_subnorm
+= expm1 downward flt-32 0x8p-152f : 0x8p-152f : inexact-ok underflow errno-erange-ok
+= expm1 tonearest flt-32 0x8p-152f : 0x8p-152f : inexact-ok underflow errno-erange-ok
+= expm1 towardzero flt-32 0x8p-152f : 0x8p-152f : inexact-ok underflow errno-erange-ok
+= expm1 upward flt-32 0x8p-152f : 0x1p-148f : inexact-ok underflow errno-erange-ok
= expm1 downward dbl-64 0x8p-152 : 0x8p-152 : inexact-ok
= expm1 tonearest dbl-64 0x8p-152 : 0x8p-152 : inexact-ok
= expm1 towardzero dbl-64 0x8p-152 : 0x8p-152 : inexact-ok
@@ -109782,10 +109782,10 @@ expm1 min_subnorm missing-underflow
= expm1 tonearest ldbl-128ibm 0x8p-152L : 0x8p-152L : inexact-ok
= expm1 towardzero ldbl-128ibm 0x8p-152L : 0x8p-152L : inexact-ok
= expm1 upward ldbl-128ibm 0x8p-152L : 0x8.00000000000000000000000004p-152L : inexact-ok
-= expm1 downward dbl-64 0x4p-1076 : 0x4p-1076 : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 tonearest dbl-64 0x4p-1076 : 0x4p-1076 : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 towardzero dbl-64 0x4p-1076 : 0x4p-1076 : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 upward dbl-64 0x4p-1076 : 0x8p-1076 : inexact-ok underflow underflow-ok errno-erange-ok
+= expm1 downward dbl-64 0x4p-1076 : 0x4p-1076 : inexact-ok underflow errno-erange-ok
+= expm1 tonearest dbl-64 0x4p-1076 : 0x4p-1076 : inexact-ok underflow errno-erange-ok
+= expm1 towardzero dbl-64 0x4p-1076 : 0x4p-1076 : inexact-ok underflow errno-erange-ok
+= expm1 upward dbl-64 0x4p-1076 : 0x8p-1076 : inexact-ok underflow errno-erange-ok
= expm1 downward ldbl-96-intel 0x4p-1076L : 0x4p-1076L : inexact-ok
= expm1 tonearest ldbl-96-intel 0x4p-1076L : 0x4p-1076L : inexact-ok
= expm1 towardzero ldbl-96-intel 0x4p-1076L : 0x4p-1076L : inexact-ok
@@ -109798,39 +109798,39 @@ expm1 min_subnorm missing-underflow
= expm1 tonearest ldbl-128 0x4p-1076L : 0x4p-1076L : inexact-ok
= expm1 towardzero ldbl-128 0x4p-1076L : 0x4p-1076L : inexact-ok
= expm1 upward ldbl-128 0x4p-1076L : 0x4.0000000000000000000000000004p-1076L : inexact-ok
-= expm1 downward ldbl-128ibm 0x4p-1076L : 0x4p-1076L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 tonearest ldbl-128ibm 0x4p-1076L : 0x4p-1076L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 towardzero ldbl-128ibm 0x4p-1076L : 0x4p-1076L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 upward ldbl-128ibm 0x4p-1076L : 0x8p-1076L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 downward ldbl-96-intel 0x8p-16448L : 0x8p-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 tonearest ldbl-96-intel 0x8p-16448L : 0x8p-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 towardzero ldbl-96-intel 0x8p-16448L : 0x8p-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 upward ldbl-96-intel 0x8p-16448L : 0x1p-16444L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 downward ldbl-96-m68k 0x8p-16448L : 0x8p-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 tonearest ldbl-96-m68k 0x8p-16448L : 0x8p-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 towardzero ldbl-96-m68k 0x8p-16448L : 0x8p-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 upward ldbl-96-m68k 0x8p-16448L : 0xcp-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 downward ldbl-128 0x8p-16448L : 0x8p-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 tonearest ldbl-128 0x8p-16448L : 0x8p-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 towardzero ldbl-128 0x8p-16448L : 0x8p-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 upward ldbl-128 0x8p-16448L : 0x8.000000000004p-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 downward ldbl-96-m68k 0x4p-16448L : 0x4p-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 tonearest ldbl-96-m68k 0x4p-16448L : 0x4p-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 towardzero ldbl-96-m68k 0x4p-16448L : 0x4p-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 upward ldbl-96-m68k 0x4p-16448L : 0x8p-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 downward ldbl-128 0x4p-16448L : 0x4p-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 tonearest ldbl-128 0x4p-16448L : 0x4p-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 towardzero ldbl-128 0x4p-16448L : 0x4p-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 upward ldbl-128 0x4p-16448L : 0x4.000000000004p-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 downward ldbl-128 0x4p-16496L : 0x4p-16496L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 tonearest ldbl-128 0x4p-16496L : 0x4p-16496L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 towardzero ldbl-128 0x4p-16496L : 0x4p-16496L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 upward ldbl-128 0x4p-16496L : 0x8p-16496L : inexact-ok underflow underflow-ok errno-erange-ok
-expm1 -min_subnorm missing-underflow
-= expm1 downward flt-32 -0x8p-152f : -0x8p-152f : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 tonearest flt-32 -0x8p-152f : -0x8p-152f : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 towardzero flt-32 -0x8p-152f : -0x0p+0f : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 upward flt-32 -0x8p-152f : -0x0p+0f : inexact-ok underflow underflow-ok errno-erange-ok
+= expm1 downward ldbl-128ibm 0x4p-1076L : 0x4p-1076L : inexact-ok underflow errno-erange-ok
+= expm1 tonearest ldbl-128ibm 0x4p-1076L : 0x4p-1076L : inexact-ok underflow errno-erange-ok
+= expm1 towardzero ldbl-128ibm 0x4p-1076L : 0x4p-1076L : inexact-ok underflow errno-erange-ok
+= expm1 upward ldbl-128ibm 0x4p-1076L : 0x8p-1076L : inexact-ok underflow errno-erange-ok
+= expm1 downward ldbl-96-intel 0x8p-16448L : 0x8p-16448L : inexact-ok underflow errno-erange-ok
+= expm1 tonearest ldbl-96-intel 0x8p-16448L : 0x8p-16448L : inexact-ok underflow errno-erange-ok
+= expm1 towardzero ldbl-96-intel 0x8p-16448L : 0x8p-16448L : inexact-ok underflow errno-erange-ok
+= expm1 upward ldbl-96-intel 0x8p-16448L : 0x1p-16444L : inexact-ok underflow errno-erange-ok
+= expm1 downward ldbl-96-m68k 0x8p-16448L : 0x8p-16448L : inexact-ok underflow errno-erange-ok
+= expm1 tonearest ldbl-96-m68k 0x8p-16448L : 0x8p-16448L : inexact-ok underflow errno-erange-ok
+= expm1 towardzero ldbl-96-m68k 0x8p-16448L : 0x8p-16448L : inexact-ok underflow errno-erange-ok
+= expm1 upward ldbl-96-m68k 0x8p-16448L : 0xcp-16448L : inexact-ok underflow errno-erange-ok
+= expm1 downward ldbl-128 0x8p-16448L : 0x8p-16448L : inexact-ok underflow errno-erange-ok
+= expm1 tonearest ldbl-128 0x8p-16448L : 0x8p-16448L : inexact-ok underflow errno-erange-ok
+= expm1 towardzero ldbl-128 0x8p-16448L : 0x8p-16448L : inexact-ok underflow errno-erange-ok
+= expm1 upward ldbl-128 0x8p-16448L : 0x8.000000000004p-16448L : inexact-ok underflow errno-erange-ok
+= expm1 downward ldbl-96-m68k 0x4p-16448L : 0x4p-16448L : inexact-ok underflow errno-erange-ok
+= expm1 tonearest ldbl-96-m68k 0x4p-16448L : 0x4p-16448L : inexact-ok underflow errno-erange-ok
+= expm1 towardzero ldbl-96-m68k 0x4p-16448L : 0x4p-16448L : inexact-ok underflow errno-erange-ok
+= expm1 upward ldbl-96-m68k 0x4p-16448L : 0x8p-16448L : inexact-ok underflow errno-erange-ok
+= expm1 downward ldbl-128 0x4p-16448L : 0x4p-16448L : inexact-ok underflow errno-erange-ok
+= expm1 tonearest ldbl-128 0x4p-16448L : 0x4p-16448L : inexact-ok underflow errno-erange-ok
+= expm1 towardzero ldbl-128 0x4p-16448L : 0x4p-16448L : inexact-ok underflow errno-erange-ok
+= expm1 upward ldbl-128 0x4p-16448L : 0x4.000000000004p-16448L : inexact-ok underflow errno-erange-ok
+= expm1 downward ldbl-128 0x4p-16496L : 0x4p-16496L : inexact-ok underflow errno-erange-ok
+= expm1 tonearest ldbl-128 0x4p-16496L : 0x4p-16496L : inexact-ok underflow errno-erange-ok
+= expm1 towardzero ldbl-128 0x4p-16496L : 0x4p-16496L : inexact-ok underflow errno-erange-ok
+= expm1 upward ldbl-128 0x4p-16496L : 0x8p-16496L : inexact-ok underflow errno-erange-ok
+expm1 -min_subnorm
+= expm1 downward flt-32 -0x8p-152f : -0x8p-152f : inexact-ok underflow errno-erange-ok
+= expm1 tonearest flt-32 -0x8p-152f : -0x8p-152f : inexact-ok underflow errno-erange-ok
+= expm1 towardzero flt-32 -0x8p-152f : -0x0p+0f : inexact-ok underflow errno-erange-ok
+= expm1 upward flt-32 -0x8p-152f : -0x0p+0f : inexact-ok underflow errno-erange-ok
= expm1 downward dbl-64 -0x8p-152 : -0x8p-152 : inexact-ok
= expm1 tonearest dbl-64 -0x8p-152 : -0x8p-152 : inexact-ok
= expm1 towardzero dbl-64 -0x8p-152 : -0x7.ffffffffffffcp-152 : inexact-ok
@@ -109851,10 +109851,10 @@ expm1 -min_subnorm missing-underflow
= expm1 tonearest ldbl-128ibm -0x8p-152L : -0x8p-152L : inexact-ok
= expm1 towardzero ldbl-128ibm -0x8p-152L : -0x7.fffffffffffffffffffffffffep-152L : inexact-ok
= expm1 upward ldbl-128ibm -0x8p-152L : -0x7.fffffffffffffffffffffffffep-152L : inexact-ok
-= expm1 downward dbl-64 -0x4p-1076 : -0x4p-1076 : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 tonearest dbl-64 -0x4p-1076 : -0x4p-1076 : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 towardzero dbl-64 -0x4p-1076 : -0x0p+0 : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 upward dbl-64 -0x4p-1076 : -0x0p+0 : inexact-ok underflow underflow-ok errno-erange-ok
+= expm1 downward dbl-64 -0x4p-1076 : -0x4p-1076 : inexact-ok underflow errno-erange-ok
+= expm1 tonearest dbl-64 -0x4p-1076 : -0x4p-1076 : inexact-ok underflow errno-erange-ok
+= expm1 towardzero dbl-64 -0x4p-1076 : -0x0p+0 : inexact-ok underflow errno-erange-ok
+= expm1 upward dbl-64 -0x4p-1076 : -0x0p+0 : inexact-ok underflow errno-erange-ok
= expm1 downward ldbl-96-intel -0x4p-1076L : -0x4p-1076L : inexact-ok
= expm1 tonearest ldbl-96-intel -0x4p-1076L : -0x4p-1076L : inexact-ok
= expm1 towardzero ldbl-96-intel -0x4p-1076L : -0x3.fffffffffffffffcp-1076L : inexact-ok
@@ -109867,34 +109867,34 @@ expm1 -min_subnorm missing-underflow
= expm1 tonearest ldbl-128 -0x4p-1076L : -0x4p-1076L : inexact-ok
= expm1 towardzero ldbl-128 -0x4p-1076L : -0x3.fffffffffffffffffffffffffffep-1076L : inexact-ok
= expm1 upward ldbl-128 -0x4p-1076L : -0x3.fffffffffffffffffffffffffffep-1076L : inexact-ok
-= expm1 downward ldbl-128ibm -0x4p-1076L : -0x4p-1076L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 tonearest ldbl-128ibm -0x4p-1076L : -0x4p-1076L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 towardzero ldbl-128ibm -0x4p-1076L : -0x0p+0L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 upward ldbl-128ibm -0x4p-1076L : -0x0p+0L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 downward ldbl-96-intel -0x8p-16448L : -0x8p-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 tonearest ldbl-96-intel -0x8p-16448L : -0x8p-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 towardzero ldbl-96-intel -0x8p-16448L : -0x0p+0L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 upward ldbl-96-intel -0x8p-16448L : -0x0p+0L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 downward ldbl-96-m68k -0x8p-16448L : -0x8p-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 tonearest ldbl-96-m68k -0x8p-16448L : -0x8p-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 towardzero ldbl-96-m68k -0x8p-16448L : -0x4p-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 upward ldbl-96-m68k -0x8p-16448L : -0x4p-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 downward ldbl-128 -0x8p-16448L : -0x8p-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 tonearest ldbl-128 -0x8p-16448L : -0x8p-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 towardzero ldbl-128 -0x8p-16448L : -0x7.fffffffffffcp-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 upward ldbl-128 -0x8p-16448L : -0x7.fffffffffffcp-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 downward ldbl-96-m68k -0x4p-16448L : -0x4p-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 tonearest ldbl-96-m68k -0x4p-16448L : -0x4p-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 towardzero ldbl-96-m68k -0x4p-16448L : -0x0p+0L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 upward ldbl-96-m68k -0x4p-16448L : -0x0p+0L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 downward ldbl-128 -0x4p-16448L : -0x4p-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 tonearest ldbl-128 -0x4p-16448L : -0x4p-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 towardzero ldbl-128 -0x4p-16448L : -0x3.fffffffffffcp-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 upward ldbl-128 -0x4p-16448L : -0x3.fffffffffffcp-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 downward ldbl-128 -0x4p-16496L : -0x4p-16496L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 tonearest ldbl-128 -0x4p-16496L : -0x4p-16496L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 towardzero ldbl-128 -0x4p-16496L : -0x0p+0L : inexact-ok underflow underflow-ok errno-erange-ok
-= expm1 upward ldbl-128 -0x4p-16496L : -0x0p+0L : inexact-ok underflow underflow-ok errno-erange-ok
+= expm1 downward ldbl-128ibm -0x4p-1076L : -0x4p-1076L : inexact-ok underflow errno-erange-ok
+= expm1 tonearest ldbl-128ibm -0x4p-1076L : -0x4p-1076L : inexact-ok underflow errno-erange-ok
+= expm1 towardzero ldbl-128ibm -0x4p-1076L : -0x0p+0L : inexact-ok underflow errno-erange-ok
+= expm1 upward ldbl-128ibm -0x4p-1076L : -0x0p+0L : inexact-ok underflow errno-erange-ok
+= expm1 downward ldbl-96-intel -0x8p-16448L : -0x8p-16448L : inexact-ok underflow errno-erange-ok
+= expm1 tonearest ldbl-96-intel -0x8p-16448L : -0x8p-16448L : inexact-ok underflow errno-erange-ok
+= expm1 towardzero ldbl-96-intel -0x8p-16448L : -0x0p+0L : inexact-ok underflow errno-erange-ok
+= expm1 upward ldbl-96-intel -0x8p-16448L : -0x0p+0L : inexact-ok underflow errno-erange-ok
+= expm1 downward ldbl-96-m68k -0x8p-16448L : -0x8p-16448L : inexact-ok underflow errno-erange-ok
+= expm1 tonearest ldbl-96-m68k -0x8p-16448L : -0x8p-16448L : inexact-ok underflow errno-erange-ok
+= expm1 towardzero ldbl-96-m68k -0x8p-16448L : -0x4p-16448L : inexact-ok underflow errno-erange-ok
+= expm1 upward ldbl-96-m68k -0x8p-16448L : -0x4p-16448L : inexact-ok underflow errno-erange-ok
+= expm1 downward ldbl-128 -0x8p-16448L : -0x8p-16448L : inexact-ok underflow errno-erange-ok
+= expm1 tonearest ldbl-128 -0x8p-16448L : -0x8p-16448L : inexact-ok underflow errno-erange-ok
+= expm1 towardzero ldbl-128 -0x8p-16448L : -0x7.fffffffffffcp-16448L : inexact-ok underflow errno-erange-ok
+= expm1 upward ldbl-128 -0x8p-16448L : -0x7.fffffffffffcp-16448L : inexact-ok underflow errno-erange-ok
+= expm1 downward ldbl-96-m68k -0x4p-16448L : -0x4p-16448L : inexact-ok underflow errno-erange-ok
+= expm1 tonearest ldbl-96-m68k -0x4p-16448L : -0x4p-16448L : inexact-ok underflow errno-erange-ok
+= expm1 towardzero ldbl-96-m68k -0x4p-16448L : -0x0p+0L : inexact-ok underflow errno-erange-ok
+= expm1 upward ldbl-96-m68k -0x4p-16448L : -0x0p+0L : inexact-ok underflow errno-erange-ok
+= expm1 downward ldbl-128 -0x4p-16448L : -0x4p-16448L : inexact-ok underflow errno-erange-ok
+= expm1 tonearest ldbl-128 -0x4p-16448L : -0x4p-16448L : inexact-ok underflow errno-erange-ok
+= expm1 towardzero ldbl-128 -0x4p-16448L : -0x3.fffffffffffcp-16448L : inexact-ok underflow errno-erange-ok
+= expm1 upward ldbl-128 -0x4p-16448L : -0x3.fffffffffffcp-16448L : inexact-ok underflow errno-erange-ok
+= expm1 downward ldbl-128 -0x4p-16496L : -0x4p-16496L : inexact-ok underflow errno-erange-ok
+= expm1 tonearest ldbl-128 -0x4p-16496L : -0x4p-16496L : inexact-ok underflow errno-erange-ok
+= expm1 towardzero ldbl-128 -0x4p-16496L : -0x0p+0L : inexact-ok underflow errno-erange-ok
+= expm1 upward ldbl-128 -0x4p-16496L : -0x0p+0L : inexact-ok underflow errno-erange-ok
fma 1.0 2.0 3.0
= fma downward flt-32 0x1p+0f 0x2p+0f 0x3p+0f : 0x5p+0f :
= fma tonearest flt-32 0x1p+0f 0x2p+0f 0x3p+0f : 0x5p+0f :
diff --git a/sysdeps/i386/fpu/s_expm1.S b/sysdeps/i386/fpu/s_expm1.S
index 65426c5984..05e5285d7b 100644
--- a/sysdeps/i386/fpu/s_expm1.S
+++ b/sysdeps/i386/fpu/s_expm1.S
@@ -37,6 +37,13 @@ one: .double 1.0
l2e: .tfloat 1.442695040888963407359924681002
ASM_SIZE_DIRECTIVE(l2e)
+ .section .rodata.cst8,"aM",@progbits,8
+
+ .p2align 3
+ .type dbl_min,@object
+dbl_min: .byte 0, 0, 0, 0, 0, 0, 0x10, 0
+ ASM_SIZE_DIRECTIVE(dbl_min)
+
#ifdef PIC
#define MO(op) op##@GOTOFF(%edx)
#else
@@ -74,6 +81,21 @@ ENTRY(__expm1)
#ifdef PIC
LOAD_PIC_REG (dx)
#endif
+ fld %st
+ fabs
+ fcoml MO(dbl_min)
+ fstp %st
+ fnstsw
+ sahf
+ jae 5f
+ subl $8, %esp
+ cfi_adjust_cfa_offset (8)
+ fld %st(0)
+ fmul %st(0)
+ fstpl (%esp)
+ addl $8, %esp
+ cfi_adjust_cfa_offset (-8)
+ ret
5: fldt MO(l2e) // log2(e) : x
fmulp // log2(e)*x
diff --git a/sysdeps/i386/fpu/s_expm1f.S b/sysdeps/i386/fpu/s_expm1f.S
index 748b7b8791..a83e435e22 100644
--- a/sysdeps/i386/fpu/s_expm1f.S
+++ b/sysdeps/i386/fpu/s_expm1f.S
@@ -37,6 +37,13 @@ one: .double 1.0
l2e: .tfloat 1.442695040888963407359924681002
ASM_SIZE_DIRECTIVE(l2e)
+ .section .rodata.cst4,"aM",@progbits,4
+
+ .p2align 2
+ .type flt_min,@object
+flt_min: .byte 0, 0, 0x80, 0
+ ASM_SIZE_DIRECTIVE(flt_min)
+
#ifdef PIC
#define MO(op) op##@GOTOFF(%edx)
#else
@@ -74,6 +81,21 @@ ENTRY(__expm1f)
#ifdef PIC
LOAD_PIC_REG (dx)
#endif
+ fld %st
+ fabs
+ fcoms MO(flt_min)
+ fstp %st
+ fnstsw
+ sahf
+ jae 5f
+ subl $4, %esp
+ cfi_adjust_cfa_offset (4)
+ fld %st(0)
+ fmul %st(0)
+ fstps (%esp)
+ addl $4, %esp
+ cfi_adjust_cfa_offset (-4)
+ ret
5: fldt MO(l2e) // log2(e) : x
fmulp // log2(e)*x
diff --git a/sysdeps/ieee754/dbl-64/s_expm1.c b/sysdeps/ieee754/dbl-64/s_expm1.c
index 9c9bb34559..41ef63a786 100644
--- a/sysdeps/ieee754/dbl-64/s_expm1.c
+++ b/sysdeps/ieee754/dbl-64/s_expm1.c
@@ -109,6 +109,7 @@
*/
#include <errno.h>
+#include <float.h>
#include <math.h>
#include <math_private.h>
#define one Q[0]
@@ -194,6 +195,11 @@ __expm1 (double x)
}
else if (hx < 0x3c900000) /* when |x|<2**-54, return x */
{
+ if (fabs (x) < DBL_MIN)
+ {
+ double force_underflow = x * x;
+ math_force_eval (force_underflow);
+ }
t = huge + x; /* return x with inexact flags when x!=0 */
return x - (t - (huge + x));
}
diff --git a/sysdeps/ieee754/dbl-64/wordsize-64/e_cosh.c b/sysdeps/ieee754/dbl-64/wordsize-64/e_cosh.c
index 84593521cc..fca80b13f9 100644
--- a/sysdeps/ieee754/dbl-64/wordsize-64/e_cosh.c
+++ b/sysdeps/ieee754/dbl-64/wordsize-64/e_cosh.c
@@ -50,9 +50,10 @@ __ieee754_cosh (double x)
if (ix < 0x40360000) {
/* |x| in [0,0.5*ln2], return 1+expm1(|x|)^2/(2*exp(|x|)) */
if(ix<0x3fd62e43) {
+ if (ix<0x3c800000) /* cosh(tiny) = 1 */
+ return one;
t = __expm1(fabs(x));
w = one+t;
- if (ix<0x3c800000) return w; /* cosh(tiny) = 1 */
return one+(t*t)/(w+w);
}
diff --git a/sysdeps/ieee754/flt-32/s_expm1f.c b/sysdeps/ieee754/flt-32/s_expm1f.c
index ca8839fa22..c81b057f24 100644
--- a/sysdeps/ieee754/flt-32/s_expm1f.c
+++ b/sysdeps/ieee754/flt-32/s_expm1f.c
@@ -14,6 +14,7 @@
*/
#include <errno.h>
+#include <float.h>
#include <math.h>
#include <math_private.h>
@@ -80,6 +81,11 @@ __expm1f(float x)
c = (hi-x)-lo;
}
else if(hx < 0x33000000) { /* when |x|<2**-25, return x */
+ if (fabsf (x) < FLT_MIN)
+ {
+ float force_underflow = x * x;
+ math_force_eval (force_underflow);
+ }
t = huge+x; /* return x with inexact flags when x!=0 */
return x - (t-(huge+x));
}