]> sourceware.org Git - glibc.git/commitdiff
Fix atanhl missing underflows (bug 16352).
authorJoseph Myers <joseph@codesourcery.com>
Fri, 15 May 2015 22:07:57 +0000 (22:07 +0000)
committerJoseph Myers <joseph@codesourcery.com>
Fri, 15 May 2015 22:07:57 +0000 (22:07 +0000)
Similar to various other bugs in this area, some atanh implementations
do not raise the underflow exception for subnormal arguments, when the
result is tiny and inexact.  This patch forces the exception in a
similar way to previous fixes.  (No change in this regard is needed
for the i386 implementation; special handling to force underflows in
these cases will only be needed there when the spurious underflows,
bug 18049, get fixed.)

Tested for x86_64, x86, powerpc and mips64.

[BZ #16352]
* sysdeps/i386/fpu/e_atanh.S (dbl_min): New object.
(__ieee754_atanh): Force underflow exception for results with
small absolute value.
* sysdeps/i386/fpu/e_atanhf.S (flt_min): New object.
(__ieee754_atanhf): Force underflow exception for results with
small absolute value.
* sysdeps/ieee754/dbl-64/e_atanh.c: Include <float.h>.
(__ieee754_atanh): Force underflow exception for results with
small absolute value.
* sysdeps/ieee754/flt-32/e_atanhf.c: Include <float.h>.
(__ieee754_atanhf): Force underflow exception for results with
small absolute value.
* sysdeps/ieee754/ldbl-128/e_atanhl.c: Include <float.h>.
(__ieee754_atanhl): Force underflow exception for results with
small absolute value.
* sysdeps/ieee754/ldbl-128ibm/e_atanhl.c: Include <float.h>.
(__ieee754_atanhl): Force underflow exception for results with
small absolute value.
* sysdeps/ieee754/ldbl-96/e_atanhl.c: Include <float.h>.
(__ieee754_atanhl): Force underflow exception for results with
small absolute value.
* math/auto-libm-test-in: Do not allow missing underflow
exceptions from atanh.
* math/auto-libm-test-out: Regenerated.

ChangeLog
NEWS
math/auto-libm-test-in
math/auto-libm-test-out
sysdeps/i386/fpu/e_atanh.S
sysdeps/i386/fpu/e_atanhf.S
sysdeps/ieee754/dbl-64/e_atanh.c
sysdeps/ieee754/flt-32/e_atanhf.c
sysdeps/ieee754/ldbl-128/e_atanhl.c
sysdeps/ieee754/ldbl-128ibm/e_atanhl.c
sysdeps/ieee754/ldbl-96/e_atanhl.c

index 92b4e2dac0cc7fbc40298cc0599551e21bf2fdb0..89a8df53ccbb811a2f945d8fc76651552d34095c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,31 @@
 2015-05-15  Joseph Myers  <joseph@codesourcery.com>
 
+       [BZ #16352]
+       * sysdeps/i386/fpu/e_atanh.S (dbl_min): New object.
+       (__ieee754_atanh): Force underflow exception for results with
+       small absolute value.
+       * sysdeps/i386/fpu/e_atanhf.S (flt_min): New object.
+       (__ieee754_atanhf): Force underflow exception for results with
+       small absolute value.
+       * sysdeps/ieee754/dbl-64/e_atanh.c: Include <float.h>.
+       (__ieee754_atanh): Force underflow exception for results with
+       small absolute value.
+       * sysdeps/ieee754/flt-32/e_atanhf.c: Include <float.h>.
+       (__ieee754_atanhf): Force underflow exception for results with
+       small absolute value.
+       * sysdeps/ieee754/ldbl-128/e_atanhl.c: Include <float.h>.
+       (__ieee754_atanhl): Force underflow exception for results with
+       small absolute value.
+       * sysdeps/ieee754/ldbl-128ibm/e_atanhl.c: Include <float.h>.
+       (__ieee754_atanhl): Force underflow exception for results with
+       small absolute value.
+       * sysdeps/ieee754/ldbl-96/e_atanhl.c: Include <float.h>.
+       (__ieee754_atanhl): Force underflow exception for results with
+       small absolute value.
+       * math/auto-libm-test-in: Do not allow missing underflow
+       exceptions from atanh.
+       * math/auto-libm-test-out: Regenerated.
+
        [BZ #18221]
        * sysdeps/ieee754/flt-32/k_tanf.c (__kernel_tanf): Use 2**-13 not
        2**-28 as threshold for returning x or +/- 1/x.
diff --git a/NEWS b/NEWS
index 44803fad662ee4505823b0f5eabcced858a58664..77f6f5a1fbca925a22ca3197af32fa000e97ddb3 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -10,14 +10,15 @@ Version 2.22
 * The following bugs are resolved with this release:
 
   4719, 6792, 13064, 14094, 14841, 14906, 15319, 15467, 15790, 15969, 16339,
-  16351, 16512, 16560, 16704, 16783, 16850, 17090, 17195, 17269, 17523,
-  17542, 17569, 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, 18036, 18038, 18039,
-  18042, 18043, 18046, 18047, 18068, 18080, 18093, 18100, 18104, 18110,
-  18111, 18125, 18128, 18138, 18185, 18196, 18197, 18206, 18210, 18211,
-  18217, 18220, 18221, 18247, 18287, 18319, 18333, 18346, 18397, 18409.
+  16351, 16352, 16512, 16560, 16704, 16783, 16850, 17090, 17195, 17269,
+  17523, 17542, 17569, 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, 18036, 18038,
+  18039, 18042, 18043, 18046, 18047, 18068, 18080, 18093, 18100, 18104,
+  18110, 18111, 18125, 18128, 18138, 18185, 18196, 18197, 18206, 18210,
+  18211, 18217, 18220, 18221, 18247, 18287, 18319, 18333, 18346, 18397,
+  18409.
 
 * Cache information can be queried via sysconf() function on s390 e.g. with
   _SC_LEVEL1_ICACHE_SIZE as argument.
index e483569dad7acfebfb894291f7f5c99dd30b587f..6fe0ed7d75763170bb3c990b2562c2ad73960306 100644 (file)
@@ -382,13 +382,12 @@ atanh 0x3.91d9f3c80c72d7acp-4
 atanh -0x2.6c52c26567198p-4
 atanh 0x3.a274ecp-4
 atanh -0x3.f0f519a687b64p-8
-# Bug 16352: underflow exception may be missing.
-atanh 0x1p-500 missing-underflow
-atanh 0x1p-5000 missing-underflow
-atanh min missing-underflow
-atanh -min missing-underflow
-atanh min_subnorm missing-underflow
-atanh -min_subnorm missing-underflow
+atanh 0x1p-500
+atanh 0x1p-5000
+atanh min
+atanh -min
+atanh min_subnorm
+atanh -min_subnorm
 
 # cabs (x,y) == cabs (y,x).
 cabs 0.75 12.390625
index d7bfbb3b7cbb830ffdf962d7e9f9ec0f4e2853db..8119f275d074ffb0c33af48a5b551e4e19db87c2 100644 (file)
@@ -20533,11 +20533,11 @@ atanh -0x3.f0f519a687b64p-8
 = atanh tonearest ldbl-128ibm -0x3.f0f519a687b64p-8L : -0x3.f109829060504072b047c21906p-8L : inexact-ok
 = atanh towardzero ldbl-128ibm -0x3.f0f519a687b64p-8L : -0x3.f109829060504072b047c21906p-8L : inexact-ok
 = atanh upward ldbl-128ibm -0x3.f0f519a687b64p-8L : -0x3.f109829060504072b047c21906p-8L : inexact-ok
-atanh 0x1p-500 missing-underflow
-= atanh downward flt-32 0x8p-152f : 0x8p-152f : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh tonearest flt-32 0x8p-152f : 0x8p-152f : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh towardzero flt-32 0x8p-152f : 0x8p-152f : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh upward flt-32 0x8p-152f : 0x1p-148f : inexact-ok underflow underflow-ok errno-erange-ok
+atanh 0x1p-500
+= atanh downward flt-32 0x8p-152f : 0x8p-152f : inexact-ok underflow errno-erange-ok
+= atanh tonearest flt-32 0x8p-152f : 0x8p-152f : inexact-ok underflow errno-erange-ok
+= atanh towardzero flt-32 0x8p-152f : 0x8p-152f : inexact-ok underflow errno-erange-ok
+= atanh upward flt-32 0x8p-152f : 0x1p-148f : inexact-ok underflow errno-erange-ok
 = atanh downward dbl-64 0x8p-152 : 0x8p-152 : inexact-ok
 = atanh tonearest dbl-64 0x8p-152 : 0x8p-152 : inexact-ok
 = atanh towardzero dbl-64 0x8p-152 : 0x8p-152 : inexact-ok
@@ -20602,11 +20602,11 @@ atanh 0x1p-500 missing-underflow
 = atanh tonearest ldbl-128ibm 0x1p-500L : 0x1p-500L : inexact-ok
 = atanh towardzero ldbl-128ibm 0x1p-500L : 0x1p-500L : inexact-ok
 = atanh upward ldbl-128ibm 0x1p-500L : 0x1.000000000000000000000000008p-500L : inexact-ok
-atanh 0x1p-5000 missing-underflow
-= atanh downward flt-32 0x8p-152f : 0x8p-152f : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh tonearest flt-32 0x8p-152f : 0x8p-152f : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh towardzero flt-32 0x8p-152f : 0x8p-152f : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh upward flt-32 0x8p-152f : 0x1p-148f : inexact-ok underflow underflow-ok errno-erange-ok
+atanh 0x1p-5000
+= atanh downward flt-32 0x8p-152f : 0x8p-152f : inexact-ok underflow errno-erange-ok
+= atanh tonearest flt-32 0x8p-152f : 0x8p-152f : inexact-ok underflow errno-erange-ok
+= atanh towardzero flt-32 0x8p-152f : 0x8p-152f : inexact-ok underflow errno-erange-ok
+= atanh upward flt-32 0x8p-152f : 0x1p-148f : inexact-ok underflow errno-erange-ok
 = atanh downward dbl-64 0x8p-152 : 0x8p-152 : inexact-ok
 = atanh tonearest dbl-64 0x8p-152 : 0x8p-152 : inexact-ok
 = atanh towardzero dbl-64 0x8p-152 : 0x8p-152 : inexact-ok
@@ -20651,10 +20651,10 @@ atanh 0x1p-5000 missing-underflow
 = atanh tonearest ldbl-128ibm 0x0p+0L : 0x0p+0L : inexact-ok
 = atanh towardzero ldbl-128ibm 0x0p+0L : 0x0p+0L : inexact-ok
 = atanh upward ldbl-128ibm 0x0p+0L : 0x0p+0L : inexact-ok
-= atanh downward dbl-64 0x4p-1076 : 0x4p-1076 : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh tonearest dbl-64 0x4p-1076 : 0x4p-1076 : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh towardzero dbl-64 0x4p-1076 : 0x4p-1076 : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh upward dbl-64 0x4p-1076 : 0x8p-1076 : inexact-ok underflow underflow-ok errno-erange-ok
+= atanh downward dbl-64 0x4p-1076 : 0x4p-1076 : inexact-ok underflow errno-erange-ok
+= atanh tonearest dbl-64 0x4p-1076 : 0x4p-1076 : inexact-ok underflow errno-erange-ok
+= atanh towardzero dbl-64 0x4p-1076 : 0x4p-1076 : inexact-ok underflow errno-erange-ok
+= atanh upward dbl-64 0x4p-1076 : 0x8p-1076 : inexact-ok underflow errno-erange-ok
 = atanh downward ldbl-96-intel 0x4p-1076L : 0x4p-1076L : inexact-ok
 = atanh tonearest ldbl-96-intel 0x4p-1076L : 0x4p-1076L : inexact-ok
 = atanh towardzero ldbl-96-intel 0x4p-1076L : 0x4p-1076L : inexact-ok
@@ -20667,10 +20667,10 @@ atanh 0x1p-5000 missing-underflow
 = atanh tonearest ldbl-128 0x4p-1076L : 0x4p-1076L : inexact-ok
 = atanh towardzero ldbl-128 0x4p-1076L : 0x4p-1076L : inexact-ok
 = atanh upward ldbl-128 0x4p-1076L : 0x4.0000000000000000000000000004p-1076L : inexact-ok
-= atanh downward ldbl-128ibm 0x4p-1076L : 0x4p-1076L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh tonearest ldbl-128ibm 0x4p-1076L : 0x4p-1076L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh towardzero ldbl-128ibm 0x4p-1076L : 0x4p-1076L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh upward ldbl-128ibm 0x4p-1076L : 0x8p-1076L : inexact-ok underflow underflow-ok errno-erange-ok
+= atanh downward ldbl-128ibm 0x4p-1076L : 0x4p-1076L : inexact-ok underflow errno-erange-ok
+= atanh tonearest ldbl-128ibm 0x4p-1076L : 0x4p-1076L : inexact-ok underflow errno-erange-ok
+= atanh towardzero ldbl-128ibm 0x4p-1076L : 0x4p-1076L : inexact-ok underflow errno-erange-ok
+= atanh upward ldbl-128ibm 0x4p-1076L : 0x8p-1076L : inexact-ok underflow errno-erange-ok
 = atanh downward ldbl-96-intel 0x1p-5000L : 0x1p-5000L : inexact-ok
 = atanh tonearest ldbl-96-intel 0x1p-5000L : 0x1p-5000L : inexact-ok
 = atanh towardzero ldbl-96-intel 0x1p-5000L : 0x1p-5000L : inexact-ok
@@ -20683,7 +20683,7 @@ atanh 0x1p-5000 missing-underflow
 = atanh tonearest ldbl-128 0x1p-5000L : 0x1p-5000L : inexact-ok
 = atanh towardzero ldbl-128 0x1p-5000L : 0x1p-5000L : inexact-ok
 = atanh upward ldbl-128 0x1p-5000L : 0x1.0000000000000000000000000001p-5000L : inexact-ok
-atanh min missing-underflow
+atanh min
 = atanh downward flt-32 0x4p-128f : 0x4p-128f : inexact-ok underflow-ok errno-erange-ok
 = atanh tonearest flt-32 0x4p-128f : 0x4p-128f : inexact-ok underflow-ok errno-erange-ok
 = atanh towardzero flt-32 0x4p-128f : 0x4p-128f : inexact-ok underflow-ok errno-erange-ok
@@ -20724,10 +20724,10 @@ atanh min missing-underflow
 = atanh tonearest ldbl-128 0x4p-1024L : 0x4p-1024L : inexact-ok
 = atanh towardzero ldbl-128 0x4p-1024L : 0x4p-1024L : inexact-ok
 = atanh upward ldbl-128 0x4p-1024L : 0x4.0000000000000000000000000004p-1024L : inexact-ok
-= atanh downward ldbl-128ibm 0x4p-1024L : 0x4p-1024L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh tonearest ldbl-128ibm 0x4p-1024L : 0x4p-1024L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh towardzero ldbl-128ibm 0x4p-1024L : 0x4p-1024L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh upward ldbl-128ibm 0x4p-1024L : 0x4.0000000000004p-1024L : inexact-ok underflow underflow-ok errno-erange-ok
+= atanh downward ldbl-128ibm 0x4p-1024L : 0x4p-1024L : inexact-ok underflow errno-erange-ok
+= atanh tonearest ldbl-128ibm 0x4p-1024L : 0x4p-1024L : inexact-ok underflow errno-erange-ok
+= atanh towardzero ldbl-128ibm 0x4p-1024L : 0x4p-1024L : inexact-ok underflow errno-erange-ok
+= atanh upward ldbl-128ibm 0x4p-1024L : 0x4.0000000000004p-1024L : inexact-ok underflow errno-erange-ok
 = atanh downward ldbl-96-intel 0x4p-16384L : 0x4p-16384L : inexact-ok underflow-ok errno-erange-ok
 = atanh tonearest ldbl-96-intel 0x4p-16384L : 0x4p-16384L : inexact-ok underflow-ok errno-erange-ok
 = atanh towardzero ldbl-96-intel 0x4p-16384L : 0x4p-16384L : inexact-ok underflow-ok errno-erange-ok
@@ -20740,18 +20740,18 @@ atanh min missing-underflow
 = atanh tonearest ldbl-128 0x4p-16384L : 0x4p-16384L : inexact-ok underflow-ok errno-erange-ok
 = atanh towardzero ldbl-128 0x4p-16384L : 0x4p-16384L : inexact-ok underflow-ok errno-erange-ok
 = atanh upward ldbl-128 0x4p-16384L : 0x4.0000000000000000000000000004p-16384L : inexact-ok underflow-ok errno-erange-ok
-= atanh downward ldbl-96-intel 0x2p-16384L : 0x2p-16384L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh tonearest ldbl-96-intel 0x2p-16384L : 0x2p-16384L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh towardzero ldbl-96-intel 0x2p-16384L : 0x2p-16384L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh upward ldbl-96-intel 0x2p-16384L : 0x2.0000000000000008p-16384L : inexact-ok underflow underflow-ok errno-erange-ok
+= atanh downward ldbl-96-intel 0x2p-16384L : 0x2p-16384L : inexact-ok underflow errno-erange-ok
+= atanh tonearest ldbl-96-intel 0x2p-16384L : 0x2p-16384L : inexact-ok underflow errno-erange-ok
+= atanh towardzero ldbl-96-intel 0x2p-16384L : 0x2p-16384L : inexact-ok underflow errno-erange-ok
+= atanh upward ldbl-96-intel 0x2p-16384L : 0x2.0000000000000008p-16384L : inexact-ok underflow errno-erange-ok
 = atanh downward ldbl-96-m68k 0x2p-16384L : 0x2p-16384L : inexact-ok underflow-ok errno-erange-ok
 = atanh tonearest ldbl-96-m68k 0x2p-16384L : 0x2p-16384L : inexact-ok underflow-ok errno-erange-ok
 = atanh towardzero ldbl-96-m68k 0x2p-16384L : 0x2p-16384L : inexact-ok underflow-ok errno-erange-ok
 = atanh upward ldbl-96-m68k 0x2p-16384L : 0x2.0000000000000004p-16384L : inexact-ok underflow-ok errno-erange-ok
-= atanh downward ldbl-128 0x2p-16384L : 0x2p-16384L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh tonearest ldbl-128 0x2p-16384L : 0x2p-16384L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh towardzero ldbl-128 0x2p-16384L : 0x2p-16384L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh upward ldbl-128 0x2p-16384L : 0x2.0000000000000000000000000004p-16384L : inexact-ok underflow underflow-ok errno-erange-ok
+= atanh downward ldbl-128 0x2p-16384L : 0x2p-16384L : inexact-ok underflow errno-erange-ok
+= atanh tonearest ldbl-128 0x2p-16384L : 0x2p-16384L : inexact-ok underflow errno-erange-ok
+= atanh towardzero ldbl-128 0x2p-16384L : 0x2p-16384L : inexact-ok underflow errno-erange-ok
+= atanh upward ldbl-128 0x2p-16384L : 0x2.0000000000000000000000000004p-16384L : inexact-ok underflow errno-erange-ok
 = atanh downward dbl-64 0x8p-972 : 0x8p-972 : inexact-ok
 = atanh tonearest dbl-64 0x8p-972 : 0x8p-972 : inexact-ok
 = atanh towardzero dbl-64 0x8p-972 : 0x8p-972 : inexact-ok
@@ -20772,7 +20772,7 @@ atanh min missing-underflow
 = atanh tonearest ldbl-128ibm 0x8p-972L : 0x8p-972L : inexact-ok underflow-ok errno-erange-ok
 = atanh towardzero ldbl-128ibm 0x8p-972L : 0x8p-972L : inexact-ok underflow-ok errno-erange-ok
 = atanh upward ldbl-128ibm 0x8p-972L : 0x8.00000000000000000000000004p-972L : inexact-ok underflow-ok errno-erange-ok
-atanh -min missing-underflow
+atanh -min
 = atanh downward flt-32 -0x4p-128f : -0x4.000008p-128f : inexact-ok underflow-ok errno-erange-ok
 = atanh tonearest flt-32 -0x4p-128f : -0x4p-128f : inexact-ok underflow-ok errno-erange-ok
 = atanh towardzero flt-32 -0x4p-128f : -0x4p-128f : inexact-ok underflow-ok errno-erange-ok
@@ -20813,10 +20813,10 @@ atanh -min missing-underflow
 = atanh tonearest ldbl-128 -0x4p-1024L : -0x4p-1024L : inexact-ok
 = atanh towardzero ldbl-128 -0x4p-1024L : -0x4p-1024L : inexact-ok
 = atanh upward ldbl-128 -0x4p-1024L : -0x4p-1024L : inexact-ok
-= atanh downward ldbl-128ibm -0x4p-1024L : -0x4.0000000000004p-1024L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh tonearest ldbl-128ibm -0x4p-1024L : -0x4p-1024L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh towardzero ldbl-128ibm -0x4p-1024L : -0x4p-1024L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh upward ldbl-128ibm -0x4p-1024L : -0x4p-1024L : inexact-ok underflow underflow-ok errno-erange-ok
+= atanh downward ldbl-128ibm -0x4p-1024L : -0x4.0000000000004p-1024L : inexact-ok underflow errno-erange-ok
+= atanh tonearest ldbl-128ibm -0x4p-1024L : -0x4p-1024L : inexact-ok underflow errno-erange-ok
+= atanh towardzero ldbl-128ibm -0x4p-1024L : -0x4p-1024L : inexact-ok underflow errno-erange-ok
+= atanh upward ldbl-128ibm -0x4p-1024L : -0x4p-1024L : inexact-ok underflow errno-erange-ok
 = atanh downward ldbl-96-intel -0x4p-16384L : -0x4.0000000000000008p-16384L : inexact-ok underflow-ok errno-erange-ok
 = atanh tonearest ldbl-96-intel -0x4p-16384L : -0x4p-16384L : inexact-ok underflow-ok errno-erange-ok
 = atanh towardzero ldbl-96-intel -0x4p-16384L : -0x4p-16384L : inexact-ok underflow-ok errno-erange-ok
@@ -20829,18 +20829,18 @@ atanh -min missing-underflow
 = atanh tonearest ldbl-128 -0x4p-16384L : -0x4p-16384L : inexact-ok underflow-ok errno-erange-ok
 = atanh towardzero ldbl-128 -0x4p-16384L : -0x4p-16384L : inexact-ok underflow-ok errno-erange-ok
 = atanh upward ldbl-128 -0x4p-16384L : -0x4p-16384L : inexact-ok underflow-ok errno-erange-ok
-= atanh downward ldbl-96-intel -0x2p-16384L : -0x2.0000000000000008p-16384L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh tonearest ldbl-96-intel -0x2p-16384L : -0x2p-16384L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh towardzero ldbl-96-intel -0x2p-16384L : -0x2p-16384L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh upward ldbl-96-intel -0x2p-16384L : -0x2p-16384L : inexact-ok underflow underflow-ok errno-erange-ok
+= atanh downward ldbl-96-intel -0x2p-16384L : -0x2.0000000000000008p-16384L : inexact-ok underflow errno-erange-ok
+= atanh tonearest ldbl-96-intel -0x2p-16384L : -0x2p-16384L : inexact-ok underflow errno-erange-ok
+= atanh towardzero ldbl-96-intel -0x2p-16384L : -0x2p-16384L : inexact-ok underflow errno-erange-ok
+= atanh upward ldbl-96-intel -0x2p-16384L : -0x2p-16384L : inexact-ok underflow errno-erange-ok
 = atanh downward ldbl-96-m68k -0x2p-16384L : -0x2.0000000000000004p-16384L : inexact-ok underflow-ok errno-erange-ok
 = atanh tonearest ldbl-96-m68k -0x2p-16384L : -0x2p-16384L : inexact-ok underflow-ok errno-erange-ok
 = atanh towardzero ldbl-96-m68k -0x2p-16384L : -0x2p-16384L : inexact-ok underflow-ok errno-erange-ok
 = atanh upward ldbl-96-m68k -0x2p-16384L : -0x2p-16384L : inexact-ok underflow-ok errno-erange-ok
-= atanh downward ldbl-128 -0x2p-16384L : -0x2.0000000000000000000000000004p-16384L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh tonearest ldbl-128 -0x2p-16384L : -0x2p-16384L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh towardzero ldbl-128 -0x2p-16384L : -0x2p-16384L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh upward ldbl-128 -0x2p-16384L : -0x2p-16384L : inexact-ok underflow underflow-ok errno-erange-ok
+= atanh downward ldbl-128 -0x2p-16384L : -0x2.0000000000000000000000000004p-16384L : inexact-ok underflow errno-erange-ok
+= atanh tonearest ldbl-128 -0x2p-16384L : -0x2p-16384L : inexact-ok underflow errno-erange-ok
+= atanh towardzero ldbl-128 -0x2p-16384L : -0x2p-16384L : inexact-ok underflow errno-erange-ok
+= atanh upward ldbl-128 -0x2p-16384L : -0x2p-16384L : inexact-ok underflow errno-erange-ok
 = atanh downward dbl-64 -0x8p-972 : -0x8.0000000000008p-972 : inexact-ok
 = atanh tonearest dbl-64 -0x8p-972 : -0x8p-972 : inexact-ok
 = atanh towardzero dbl-64 -0x8p-972 : -0x8p-972 : inexact-ok
@@ -20861,11 +20861,11 @@ atanh -min missing-underflow
 = atanh tonearest ldbl-128ibm -0x8p-972L : -0x8p-972L : inexact-ok underflow-ok errno-erange-ok
 = atanh towardzero ldbl-128ibm -0x8p-972L : -0x8p-972L : inexact-ok underflow-ok errno-erange-ok
 = atanh upward ldbl-128ibm -0x8p-972L : -0x8p-972L : inexact-ok underflow-ok errno-erange-ok
-atanh min_subnorm missing-underflow
-= atanh downward flt-32 0x8p-152f : 0x8p-152f : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh tonearest flt-32 0x8p-152f : 0x8p-152f : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh towardzero flt-32 0x8p-152f : 0x8p-152f : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh upward flt-32 0x8p-152f : 0x1p-148f : inexact-ok underflow underflow-ok errno-erange-ok
+atanh min_subnorm
+= atanh downward flt-32 0x8p-152f : 0x8p-152f : inexact-ok underflow errno-erange-ok
+= atanh tonearest flt-32 0x8p-152f : 0x8p-152f : inexact-ok underflow errno-erange-ok
+= atanh towardzero flt-32 0x8p-152f : 0x8p-152f : inexact-ok underflow errno-erange-ok
+= atanh upward flt-32 0x8p-152f : 0x1p-148f : inexact-ok underflow errno-erange-ok
 = atanh downward dbl-64 0x8p-152 : 0x8p-152 : inexact-ok
 = atanh tonearest dbl-64 0x8p-152 : 0x8p-152 : inexact-ok
 = atanh towardzero dbl-64 0x8p-152 : 0x8p-152 : inexact-ok
@@ -20886,10 +20886,10 @@ atanh min_subnorm missing-underflow
 = atanh tonearest ldbl-128ibm 0x8p-152L : 0x8p-152L : inexact-ok
 = atanh towardzero ldbl-128ibm 0x8p-152L : 0x8p-152L : inexact-ok
 = atanh upward ldbl-128ibm 0x8p-152L : 0x8.00000000000000000000000004p-152L : inexact-ok
-= atanh downward dbl-64 0x4p-1076 : 0x4p-1076 : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh tonearest dbl-64 0x4p-1076 : 0x4p-1076 : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh towardzero dbl-64 0x4p-1076 : 0x4p-1076 : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh upward dbl-64 0x4p-1076 : 0x8p-1076 : inexact-ok underflow underflow-ok errno-erange-ok
+= atanh downward dbl-64 0x4p-1076 : 0x4p-1076 : inexact-ok underflow errno-erange-ok
+= atanh tonearest dbl-64 0x4p-1076 : 0x4p-1076 : inexact-ok underflow errno-erange-ok
+= atanh towardzero dbl-64 0x4p-1076 : 0x4p-1076 : inexact-ok underflow errno-erange-ok
+= atanh upward dbl-64 0x4p-1076 : 0x8p-1076 : inexact-ok underflow errno-erange-ok
 = atanh downward ldbl-96-intel 0x4p-1076L : 0x4p-1076L : inexact-ok
 = atanh tonearest ldbl-96-intel 0x4p-1076L : 0x4p-1076L : inexact-ok
 = atanh towardzero ldbl-96-intel 0x4p-1076L : 0x4p-1076L : inexact-ok
@@ -20902,39 +20902,39 @@ atanh min_subnorm missing-underflow
 = atanh tonearest ldbl-128 0x4p-1076L : 0x4p-1076L : inexact-ok
 = atanh towardzero ldbl-128 0x4p-1076L : 0x4p-1076L : inexact-ok
 = atanh upward ldbl-128 0x4p-1076L : 0x4.0000000000000000000000000004p-1076L : inexact-ok
-= atanh downward ldbl-128ibm 0x4p-1076L : 0x4p-1076L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh tonearest ldbl-128ibm 0x4p-1076L : 0x4p-1076L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh towardzero ldbl-128ibm 0x4p-1076L : 0x4p-1076L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh upward ldbl-128ibm 0x4p-1076L : 0x8p-1076L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh downward ldbl-96-intel 0x8p-16448L : 0x8p-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh tonearest ldbl-96-intel 0x8p-16448L : 0x8p-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh towardzero ldbl-96-intel 0x8p-16448L : 0x8p-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh upward ldbl-96-intel 0x8p-16448L : 0x1p-16444L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh downward ldbl-96-m68k 0x8p-16448L : 0x8p-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh tonearest ldbl-96-m68k 0x8p-16448L : 0x8p-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh towardzero ldbl-96-m68k 0x8p-16448L : 0x8p-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh upward ldbl-96-m68k 0x8p-16448L : 0xcp-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh downward ldbl-128 0x8p-16448L : 0x8p-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh tonearest ldbl-128 0x8p-16448L : 0x8p-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh towardzero ldbl-128 0x8p-16448L : 0x8p-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh upward ldbl-128 0x8p-16448L : 0x8.000000000004p-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh downward ldbl-96-m68k 0x4p-16448L : 0x4p-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh tonearest ldbl-96-m68k 0x4p-16448L : 0x4p-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh towardzero ldbl-96-m68k 0x4p-16448L : 0x4p-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh upward ldbl-96-m68k 0x4p-16448L : 0x8p-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh downward ldbl-128 0x4p-16448L : 0x4p-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh tonearest ldbl-128 0x4p-16448L : 0x4p-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh towardzero ldbl-128 0x4p-16448L : 0x4p-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh upward ldbl-128 0x4p-16448L : 0x4.000000000004p-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh downward ldbl-128 0x4p-16496L : 0x4p-16496L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh tonearest ldbl-128 0x4p-16496L : 0x4p-16496L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh towardzero ldbl-128 0x4p-16496L : 0x4p-16496L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh upward ldbl-128 0x4p-16496L : 0x8p-16496L : inexact-ok underflow underflow-ok errno-erange-ok
-atanh -min_subnorm missing-underflow
-= atanh downward flt-32 -0x8p-152f : -0x1p-148f : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh tonearest flt-32 -0x8p-152f : -0x8p-152f : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh towardzero flt-32 -0x8p-152f : -0x8p-152f : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh upward flt-32 -0x8p-152f : -0x8p-152f : inexact-ok underflow underflow-ok errno-erange-ok
+= atanh downward ldbl-128ibm 0x4p-1076L : 0x4p-1076L : inexact-ok underflow errno-erange-ok
+= atanh tonearest ldbl-128ibm 0x4p-1076L : 0x4p-1076L : inexact-ok underflow errno-erange-ok
+= atanh towardzero ldbl-128ibm 0x4p-1076L : 0x4p-1076L : inexact-ok underflow errno-erange-ok
+= atanh upward ldbl-128ibm 0x4p-1076L : 0x8p-1076L : inexact-ok underflow errno-erange-ok
+= atanh downward ldbl-96-intel 0x8p-16448L : 0x8p-16448L : inexact-ok underflow errno-erange-ok
+= atanh tonearest ldbl-96-intel 0x8p-16448L : 0x8p-16448L : inexact-ok underflow errno-erange-ok
+= atanh towardzero ldbl-96-intel 0x8p-16448L : 0x8p-16448L : inexact-ok underflow errno-erange-ok
+= atanh upward ldbl-96-intel 0x8p-16448L : 0x1p-16444L : inexact-ok underflow errno-erange-ok
+= atanh downward ldbl-96-m68k 0x8p-16448L : 0x8p-16448L : inexact-ok underflow errno-erange-ok
+= atanh tonearest ldbl-96-m68k 0x8p-16448L : 0x8p-16448L : inexact-ok underflow errno-erange-ok
+= atanh towardzero ldbl-96-m68k 0x8p-16448L : 0x8p-16448L : inexact-ok underflow errno-erange-ok
+= atanh upward ldbl-96-m68k 0x8p-16448L : 0xcp-16448L : inexact-ok underflow errno-erange-ok
+= atanh downward ldbl-128 0x8p-16448L : 0x8p-16448L : inexact-ok underflow errno-erange-ok
+= atanh tonearest ldbl-128 0x8p-16448L : 0x8p-16448L : inexact-ok underflow errno-erange-ok
+= atanh towardzero ldbl-128 0x8p-16448L : 0x8p-16448L : inexact-ok underflow errno-erange-ok
+= atanh upward ldbl-128 0x8p-16448L : 0x8.000000000004p-16448L : inexact-ok underflow errno-erange-ok
+= atanh downward ldbl-96-m68k 0x4p-16448L : 0x4p-16448L : inexact-ok underflow errno-erange-ok
+= atanh tonearest ldbl-96-m68k 0x4p-16448L : 0x4p-16448L : inexact-ok underflow errno-erange-ok
+= atanh towardzero ldbl-96-m68k 0x4p-16448L : 0x4p-16448L : inexact-ok underflow errno-erange-ok
+= atanh upward ldbl-96-m68k 0x4p-16448L : 0x8p-16448L : inexact-ok underflow errno-erange-ok
+= atanh downward ldbl-128 0x4p-16448L : 0x4p-16448L : inexact-ok underflow errno-erange-ok
+= atanh tonearest ldbl-128 0x4p-16448L : 0x4p-16448L : inexact-ok underflow errno-erange-ok
+= atanh towardzero ldbl-128 0x4p-16448L : 0x4p-16448L : inexact-ok underflow errno-erange-ok
+= atanh upward ldbl-128 0x4p-16448L : 0x4.000000000004p-16448L : inexact-ok underflow errno-erange-ok
+= atanh downward ldbl-128 0x4p-16496L : 0x4p-16496L : inexact-ok underflow errno-erange-ok
+= atanh tonearest ldbl-128 0x4p-16496L : 0x4p-16496L : inexact-ok underflow errno-erange-ok
+= atanh towardzero ldbl-128 0x4p-16496L : 0x4p-16496L : inexact-ok underflow errno-erange-ok
+= atanh upward ldbl-128 0x4p-16496L : 0x8p-16496L : inexact-ok underflow errno-erange-ok
+atanh -min_subnorm
+= atanh downward flt-32 -0x8p-152f : -0x1p-148f : inexact-ok underflow errno-erange-ok
+= atanh tonearest flt-32 -0x8p-152f : -0x8p-152f : inexact-ok underflow errno-erange-ok
+= atanh towardzero flt-32 -0x8p-152f : -0x8p-152f : inexact-ok underflow errno-erange-ok
+= atanh upward flt-32 -0x8p-152f : -0x8p-152f : inexact-ok underflow errno-erange-ok
 = atanh downward dbl-64 -0x8p-152 : -0x8.0000000000008p-152 : inexact-ok
 = atanh tonearest dbl-64 -0x8p-152 : -0x8p-152 : inexact-ok
 = atanh towardzero dbl-64 -0x8p-152 : -0x8p-152 : inexact-ok
@@ -20955,10 +20955,10 @@ atanh -min_subnorm missing-underflow
 = atanh tonearest ldbl-128ibm -0x8p-152L : -0x8p-152L : inexact-ok
 = atanh towardzero ldbl-128ibm -0x8p-152L : -0x8p-152L : inexact-ok
 = atanh upward ldbl-128ibm -0x8p-152L : -0x8p-152L : inexact-ok
-= atanh downward dbl-64 -0x4p-1076 : -0x8p-1076 : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh tonearest dbl-64 -0x4p-1076 : -0x4p-1076 : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh towardzero dbl-64 -0x4p-1076 : -0x4p-1076 : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh upward dbl-64 -0x4p-1076 : -0x4p-1076 : inexact-ok underflow underflow-ok errno-erange-ok
+= atanh downward dbl-64 -0x4p-1076 : -0x8p-1076 : inexact-ok underflow errno-erange-ok
+= atanh tonearest dbl-64 -0x4p-1076 : -0x4p-1076 : inexact-ok underflow errno-erange-ok
+= atanh towardzero dbl-64 -0x4p-1076 : -0x4p-1076 : inexact-ok underflow errno-erange-ok
+= atanh upward dbl-64 -0x4p-1076 : -0x4p-1076 : inexact-ok underflow errno-erange-ok
 = atanh downward ldbl-96-intel -0x4p-1076L : -0x4.0000000000000008p-1076L : inexact-ok
 = atanh tonearest ldbl-96-intel -0x4p-1076L : -0x4p-1076L : inexact-ok
 = atanh towardzero ldbl-96-intel -0x4p-1076L : -0x4p-1076L : inexact-ok
@@ -20971,34 +20971,34 @@ atanh -min_subnorm missing-underflow
 = atanh tonearest ldbl-128 -0x4p-1076L : -0x4p-1076L : inexact-ok
 = atanh towardzero ldbl-128 -0x4p-1076L : -0x4p-1076L : inexact-ok
 = atanh upward ldbl-128 -0x4p-1076L : -0x4p-1076L : inexact-ok
-= atanh downward ldbl-128ibm -0x4p-1076L : -0x8p-1076L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh tonearest ldbl-128ibm -0x4p-1076L : -0x4p-1076L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh towardzero ldbl-128ibm -0x4p-1076L : -0x4p-1076L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh upward ldbl-128ibm -0x4p-1076L : -0x4p-1076L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh downward ldbl-96-intel -0x8p-16448L : -0x1p-16444L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh tonearest ldbl-96-intel -0x8p-16448L : -0x8p-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh towardzero ldbl-96-intel -0x8p-16448L : -0x8p-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh upward ldbl-96-intel -0x8p-16448L : -0x8p-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh downward ldbl-96-m68k -0x8p-16448L : -0xcp-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh tonearest ldbl-96-m68k -0x8p-16448L : -0x8p-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh towardzero ldbl-96-m68k -0x8p-16448L : -0x8p-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh upward ldbl-96-m68k -0x8p-16448L : -0x8p-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh downward ldbl-128 -0x8p-16448L : -0x8.000000000004p-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh tonearest ldbl-128 -0x8p-16448L : -0x8p-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh towardzero ldbl-128 -0x8p-16448L : -0x8p-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh upward ldbl-128 -0x8p-16448L : -0x8p-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh downward ldbl-96-m68k -0x4p-16448L : -0x8p-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh tonearest ldbl-96-m68k -0x4p-16448L : -0x4p-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh towardzero ldbl-96-m68k -0x4p-16448L : -0x4p-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh upward ldbl-96-m68k -0x4p-16448L : -0x4p-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh downward ldbl-128 -0x4p-16448L : -0x4.000000000004p-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh tonearest ldbl-128 -0x4p-16448L : -0x4p-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh towardzero ldbl-128 -0x4p-16448L : -0x4p-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh upward ldbl-128 -0x4p-16448L : -0x4p-16448L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh downward ldbl-128 -0x4p-16496L : -0x8p-16496L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh tonearest ldbl-128 -0x4p-16496L : -0x4p-16496L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh towardzero ldbl-128 -0x4p-16496L : -0x4p-16496L : inexact-ok underflow underflow-ok errno-erange-ok
-= atanh upward ldbl-128 -0x4p-16496L : -0x4p-16496L : inexact-ok underflow underflow-ok errno-erange-ok
+= atanh downward ldbl-128ibm -0x4p-1076L : -0x8p-1076L : inexact-ok underflow errno-erange-ok
+= atanh tonearest ldbl-128ibm -0x4p-1076L : -0x4p-1076L : inexact-ok underflow errno-erange-ok
+= atanh towardzero ldbl-128ibm -0x4p-1076L : -0x4p-1076L : inexact-ok underflow errno-erange-ok
+= atanh upward ldbl-128ibm -0x4p-1076L : -0x4p-1076L : inexact-ok underflow errno-erange-ok
+= atanh downward ldbl-96-intel -0x8p-16448L : -0x1p-16444L : inexact-ok underflow errno-erange-ok
+= atanh tonearest ldbl-96-intel -0x8p-16448L : -0x8p-16448L : inexact-ok underflow errno-erange-ok
+= atanh towardzero ldbl-96-intel -0x8p-16448L : -0x8p-16448L : inexact-ok underflow errno-erange-ok
+= atanh upward ldbl-96-intel -0x8p-16448L : -0x8p-16448L : inexact-ok underflow errno-erange-ok
+= atanh downward ldbl-96-m68k -0x8p-16448L : -0xcp-16448L : inexact-ok underflow errno-erange-ok
+= atanh tonearest ldbl-96-m68k -0x8p-16448L : -0x8p-16448L : inexact-ok underflow errno-erange-ok
+= atanh towardzero ldbl-96-m68k -0x8p-16448L : -0x8p-16448L : inexact-ok underflow errno-erange-ok
+= atanh upward ldbl-96-m68k -0x8p-16448L : -0x8p-16448L : inexact-ok underflow errno-erange-ok
+= atanh downward ldbl-128 -0x8p-16448L : -0x8.000000000004p-16448L : inexact-ok underflow errno-erange-ok
+= atanh tonearest ldbl-128 -0x8p-16448L : -0x8p-16448L : inexact-ok underflow errno-erange-ok
+= atanh towardzero ldbl-128 -0x8p-16448L : -0x8p-16448L : inexact-ok underflow errno-erange-ok
+= atanh upward ldbl-128 -0x8p-16448L : -0x8p-16448L : inexact-ok underflow errno-erange-ok
+= atanh downward ldbl-96-m68k -0x4p-16448L : -0x8p-16448L : inexact-ok underflow errno-erange-ok
+= atanh tonearest ldbl-96-m68k -0x4p-16448L : -0x4p-16448L : inexact-ok underflow errno-erange-ok
+= atanh towardzero ldbl-96-m68k -0x4p-16448L : -0x4p-16448L : inexact-ok underflow errno-erange-ok
+= atanh upward ldbl-96-m68k -0x4p-16448L : -0x4p-16448L : inexact-ok underflow errno-erange-ok
+= atanh downward ldbl-128 -0x4p-16448L : -0x4.000000000004p-16448L : inexact-ok underflow errno-erange-ok
+= atanh tonearest ldbl-128 -0x4p-16448L : -0x4p-16448L : inexact-ok underflow errno-erange-ok
+= atanh towardzero ldbl-128 -0x4p-16448L : -0x4p-16448L : inexact-ok underflow errno-erange-ok
+= atanh upward ldbl-128 -0x4p-16448L : -0x4p-16448L : inexact-ok underflow errno-erange-ok
+= atanh downward ldbl-128 -0x4p-16496L : -0x8p-16496L : inexact-ok underflow errno-erange-ok
+= atanh tonearest ldbl-128 -0x4p-16496L : -0x4p-16496L : inexact-ok underflow errno-erange-ok
+= atanh towardzero ldbl-128 -0x4p-16496L : -0x4p-16496L : inexact-ok underflow errno-erange-ok
+= atanh upward ldbl-128 -0x4p-16496L : -0x4p-16496L : inexact-ok underflow errno-erange-ok
 cabs 0.75 12.390625
 = cabs downward flt-32 0xcp-4f 0xc.64p+0f : 0xc.69ce3p+0f : inexact-ok
 = cabs tonearest flt-32 0xcp-4f 0xc.64p+0f : 0xc.69ce3p+0f : inexact-ok
index 16e149b905bd4d0910b3255c0e2f83b14c533d9d..90d19bc9d62d1cc63a8862b5748116e570365eb0 100644 (file)
@@ -35,6 +35,13 @@ limit:       .double 0.29
 ln2_2: .tfloat 0.3465735902799726547086160
        ASM_SIZE_DIRECTIVE(ln2_2)
 
+       .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
@@ -81,7 +88,18 @@ ENTRY(__ieee754_atanh)
        sahf
        jae     4f
        fyl2xp1                 // 0.5*ln2*ld(1+2*|x|+(2*|x|^2)/(1-|x|))
-       jecxz   3f
+       fcoml   MO(dbl_min)
+       fnstsw
+       sahf
+       jae     8f
+       subl    $8, %esp
+       cfi_adjust_cfa_offset (8)
+       fld     %st(0)
+       fmul    %st(0)
+       fstpl   (%esp)
+       addl    $8, %esp
+       cfi_adjust_cfa_offset (-8)
+8:     jecxz   3f
        fchs                    // 0.5*ln2*ld(1+2*x+(2*x^2)/(1-x))
 3:     ret
 
index 0021d9c47da3ecc0003f2cd298439d904feb5dc0..1c8969e5ec135b176af5e6396a20bb6e535f289f 100644 (file)
@@ -36,6 +36,13 @@ limit:       .double 0.29
 ln2_2: .tfloat 0.3465735902799726547086160
        ASM_SIZE_DIRECTIVE(ln2_2)
 
+       .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
@@ -77,7 +84,18 @@ ENTRY(__ieee754_atanhf)
        sahf
        jae     4f
        fyl2xp1                 // 0.5*ln2*ld(1+2*|x|+(2*|x|^2)/(1-|x|))
-       jecxz   3f
+       fcoms   MO(flt_min)
+       fnstsw
+       sahf
+       jae     6f
+       subl    $4, %esp
+       cfi_adjust_cfa_offset (4)
+       fld     %st(0)
+       fmul    %st(0)
+       fstps   (%esp)
+       addl    $4, %esp
+       cfi_adjust_cfa_offset (-4)
+6:     jecxz   3f
        fchs                    // 0.5*ln2*ld(1+2*x+(2*x^2)/(1-x))
 3:     ret
 
index b95399ddab5bf8a5212a3b8b05ee6211bb16f0d2..6b00b800f28af9c194c225489d892c4ea9ec137e 100644 (file)
@@ -35,6 +35,7 @@
 
  */
 
+#include <float.h>
 #include <inttypes.h>
 #include <math.h>
 #include <math_private.h>
@@ -51,6 +52,11 @@ __ieee754_atanh (double x)
       if (__glibc_unlikely (xa < 0x1.0p-28))
        {
          math_force_eval (huge + x);
+         if (fabs (x) < DBL_MIN)
+           {
+             double force_underflow = x * x;
+             math_force_eval (force_underflow);
+           }
          return x;
        }
 
index a6d8bd139f39dd984349fca8af02eb89b9586f6d..bc74960e165471f18c748c12f449ac7bfc5f34a0 100644 (file)
@@ -35,6 +35,7 @@
 
  */
 
+#include <float.h>
 #include <inttypes.h>
 #include <math.h>
 #include <math_private.h>
@@ -51,6 +52,11 @@ __ieee754_atanhf (float x)
       if (__glibc_unlikely (xa < 0x1.0p-28f))
        {
          math_force_eval (huge + x);
+         if (fabsf (x) < FLT_MIN)
+           {
+             float force_underflow = x * x;
+             math_force_eval (force_underflow);
+           }
          return x;
        }
 
index c5cceb522403c94922e87efd27d7b8963ec5848a..a5a7ee0712b13e76e51812566cb4e96fd24f8448 100644 (file)
@@ -32,6 +32,7 @@
  *
  */
 
+#include <float.h>
 #include <math.h>
 #include <math_private.h>
 
@@ -57,7 +58,15 @@ __ieee754_atanhl(long double x)
            else
              return (x-x)/(x-x);
          }
-       if(ix<0x3fc60000 && (huge+x)>zero) return x;    /* x < 2^-57 */
+       if(ix<0x3fc60000 && (huge+x)>zero)      /* x < 2^-57 */
+         {
+           if (fabsl (x) < LDBL_MIN)
+             {
+               long double force_underflow = x * x;
+               math_force_eval (force_underflow);
+             }
+           return x;
+         }
 
        if(ix<0x3ffe0000) {             /* x < 0.5 */
            t = u.value+u.value;
index 5a989992f5dfe628500d9afe8563b9073925d208..bcd1fce4ed30cda1b4431b7a2a4f4478429fccca 100644 (file)
@@ -28,6 +28,7 @@
  *
  */
 
+#include <float.h>
 #include <math.h>
 #include <math_private.h>
 
@@ -54,7 +55,15 @@ __ieee754_atanhl(long double x)
            if (t == one)
                return x/zero;
        }
-       if(ix<0x3c70000000000000LL&&(huge+x)>zero) return x;    /* x<2**-56 */
+       if(ix<0x3c70000000000000LL&&(huge+x)>zero)      /* x<2**-56 */
+         {
+           if (fabsl (x) < LDBL_MIN)
+             {
+               long double force_underflow = x * x;
+               math_force_eval (force_underflow);
+             }
+           return x;
+         }
        x = fabsl (x);
        if(ix<0x3fe0000000000000LL) {           /* x < 0.5 */
            t = x+x;
index 305d50e30939918b9b906b28be651a44deb3a890..9a957c906559968785c90228e5de081ccd7ef564 100644 (file)
@@ -32,6 +32,7 @@
  *
  */
 
+#include <float.h>
 #include <math.h>
 #include <math_private.h>
 
@@ -54,6 +55,11 @@ __ieee754_atanhl(long double x)
            return x/zero;
        if(ix<0x3fdf) {
            math_force_eval(huge+x);
+           if (fabsl (x) < LDBL_MIN)
+             {
+               long double force_underflow = x * x;
+               math_force_eval (force_underflow);
+             }
            return x;   /* x<2**-32 */
        }
        SET_LDOUBLE_EXP(x,ix);
This page took 0.554325 seconds and 5 git commands to generate.