aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog25
-rw-r--r--NEWS8
-rw-r--r--math/auto-libm-test-in23
-rw-r--r--math/auto-libm-test-out575
-rw-r--r--math/e_exp2l.c12
-rw-r--r--sysdeps/i386/fpu/e_exp2.S34
-rw-r--r--sysdeps/i386/fpu/e_exp2f.S34
-rw-r--r--sysdeps/i386/fpu/e_exp2l.S29
-rw-r--r--sysdeps/ieee754/dbl-64/e_exp2.c10
-rw-r--r--sysdeps/ieee754/flt-32/e_exp2f.c10
-rw-r--r--sysdeps/x86_64/fpu/e_exp2l.S25
11 files changed, 773 insertions, 12 deletions
diff --git a/ChangeLog b/ChangeLog
index 261f9440a6..3b372ccd53 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,28 @@
+2015-09-14 Joseph Myers <joseph@codesourcery.com>
+
+ [BZ #16521]
+ [BZ #18875]
+ * math/e_exp2l.c (__ieee754_exp2l): Force underflow exception for
+ small results.
+ * sysdeps/i386/fpu/e_exp2.S (dbl_min): New object.
+ (MO): New macro.
+ (__ieee754_exp2): For small results, force underflow exception and
+ remove excess range and precision from return value.
+ * sysdeps/i386/fpu/e_exp2f.S (flt_min): New object.
+ (MO): New macro.
+ (__ieee754_exp2f): For small results, force underflow exception
+ and remove excess range and precision from return value.
+ * sysdeps/i386/fpu/e_exp2l.S (ldbl_min): New object.
+ (MO): New macro.
+ (__ieee754_exp2l): Force underflow exception for small results.
+ * sysdeps/ieee754/dbl-64/e_exp2.c (__ieee754_exp2): Likewise.
+ * sysdeps/ieee754/flt-32/e_exp2f.c (__ieee754_exp2f): Likewise.
+ * sysdeps/x86_64/fpu/e_exp2l.S (ldbl_min): New object.
+ (MO): New macro.
+ (__ieee754_exp2l): Force underflow exception for small results.
+ * math/auto-libm-test-in: Add more tests or exp2.
+ * math/auto-libm-test-out: Regenerated.
+
2015-09-14 Carlos O'Donell <carlos@redhat.com>
* malloc/malloc.c (systrim): Use ALIGN_DOWN.
diff --git a/NEWS b/NEWS
index cf7fd5f211..0a37eddac7 100644
--- a/NEWS
+++ b/NEWS
@@ -10,10 +10,10 @@ Version 2.23
* The following bugs are resolved with this release:
2542, 2543, 2558, 2898, 14341, 14912, 15786, 16141, 16517, 16519, 16520,
- 16734, 16973, 16985, 17787, 17905, 18084, 18086, 18240, 18265, 18370,
- 18421, 18480, 18525, 18610, 18618, 18647, 18661, 18674, 18675, 18681,
- 18757, 18778, 18781, 18787, 18789, 18790, 18795, 18796, 18820, 18823,
- 18824, 18863, 18870, 18873, 18887, 18921, 18952.
+ 16521, 16734, 16973, 16985, 17787, 17905, 18084, 18086, 18240, 18265,
+ 18370, 18421, 18480, 18525, 18610, 18618, 18647, 18661, 18674, 18675,
+ 18681, 18757, 18778, 18781, 18787, 18789, 18790, 18795, 18796, 18820,
+ 18823, 18824, 18863, 18870, 18873, 18887, 18921, 18952.
* The obsolete header <regexp.h> has been removed. Programs that require
this header must be updated to use <regex.h> instead.
diff --git a/math/auto-libm-test-in b/math/auto-libm-test-in
index 002a1fc852..15c91461e8 100644
--- a/math/auto-libm-test-in
+++ b/math/auto-libm-test-in
@@ -1497,6 +1497,29 @@ exp2 1023
exp2 -1074
exp2 16383
exp2 -16400
+exp2 -126.125
+exp2 -126.25
+exp2 -126.375
+exp2 -126.5
+exp2 -126.625
+exp2 -126.75
+exp2 -126.875
+exp2 -1022.125
+exp2 -1022.25
+exp2 -1022.375
+exp2 -1022.5
+exp2 -1022.625
+exp2 -1022.75
+exp2 -1022.875
+exp2 -0x3.fe4e8p+8
+exp2 -0x3.fe513p+8
+exp2 -16382.125
+exp2 -16382.25
+exp2 -16382.375
+exp2 -16382.5
+exp2 -16382.625
+exp2 -16382.75
+exp2 -16382.875
exp2 0x1p-10
exp2 -0x1p-10
exp2 0x1p-20
diff --git a/math/auto-libm-test-out b/math/auto-libm-test-out
index 42fa83eca3..c007f24247 100644
--- a/math/auto-libm-test-out
+++ b/math/auto-libm-test-out
@@ -117963,6 +117963,581 @@ exp2 -16400
= exp2 tonearest ldbl-128ibm -0x4.01p+12L : 0x0p+0L : inexact-ok underflow errno-erange
= exp2 towardzero ldbl-128ibm -0x4.01p+12L : 0x0p+0L : inexact-ok underflow errno-erange
= exp2 upward ldbl-128ibm -0x4.01p+12L : 0x4p-1076L : inexact-ok underflow errno-erange-ok
+exp2 -126.125
+= exp2 downward flt-32 -0x7.e2p+4f : 0x3.ab0318p-128f : inexact-ok underflow errno-erange-ok
+= exp2 tonearest flt-32 -0x7.e2p+4f : 0x3.ab0318p-128f : inexact-ok underflow errno-erange-ok
+= exp2 towardzero flt-32 -0x7.e2p+4f : 0x3.ab0318p-128f : inexact-ok underflow errno-erange-ok
+= exp2 upward flt-32 -0x7.e2p+4f : 0x3.ab032p-128f : inexact-ok underflow errno-erange-ok
+= exp2 downward dbl-64 -0x7.e2p+4 : 0x3.ab031b9f7490ep-128 : inexact-ok
+= exp2 tonearest dbl-64 -0x7.e2p+4 : 0x3.ab031b9f7490ep-128 : inexact-ok
+= exp2 towardzero dbl-64 -0x7.e2p+4 : 0x3.ab031b9f7490ep-128 : inexact-ok
+= exp2 upward dbl-64 -0x7.e2p+4 : 0x3.ab031b9f7491p-128 : inexact-ok
+= exp2 downward ldbl-96-intel -0x7.e2p+4L : 0x3.ab031b9f7490e4b8p-128L : inexact-ok
+= exp2 tonearest ldbl-96-intel -0x7.e2p+4L : 0x3.ab031b9f7490e4bcp-128L : inexact-ok
+= exp2 towardzero ldbl-96-intel -0x7.e2p+4L : 0x3.ab031b9f7490e4b8p-128L : inexact-ok
+= exp2 upward ldbl-96-intel -0x7.e2p+4L : 0x3.ab031b9f7490e4bcp-128L : inexact-ok
+= exp2 downward ldbl-96-m68k -0x7.e2p+4L : 0x3.ab031b9f7490e4b8p-128L : inexact-ok
+= exp2 tonearest ldbl-96-m68k -0x7.e2p+4L : 0x3.ab031b9f7490e4bcp-128L : inexact-ok
+= exp2 towardzero ldbl-96-m68k -0x7.e2p+4L : 0x3.ab031b9f7490e4b8p-128L : inexact-ok
+= exp2 upward ldbl-96-m68k -0x7.e2p+4L : 0x3.ab031b9f7490e4bcp-128L : inexact-ok
+= exp2 downward ldbl-128 -0x7.e2p+4L : 0x3.ab031b9f7490e4bb40b5d6cdc1b8p-128L : inexact-ok
+= exp2 tonearest ldbl-128 -0x7.e2p+4L : 0x3.ab031b9f7490e4bb40b5d6cdc1bap-128L : inexact-ok
+= exp2 towardzero ldbl-128 -0x7.e2p+4L : 0x3.ab031b9f7490e4bb40b5d6cdc1b8p-128L : inexact-ok
+= exp2 upward ldbl-128 -0x7.e2p+4L : 0x3.ab031b9f7490e4bb40b5d6cdc1bap-128L : inexact-ok
+= exp2 downward ldbl-128ibm -0x7.e2p+4L : 0x3.ab031b9f7490e4bb40b5d6cdc1p-128L : inexact-ok
+= exp2 tonearest ldbl-128ibm -0x7.e2p+4L : 0x3.ab031b9f7490e4bb40b5d6cdc2p-128L : inexact-ok
+= exp2 towardzero ldbl-128ibm -0x7.e2p+4L : 0x3.ab031b9f7490e4bb40b5d6cdc1p-128L : inexact-ok
+= exp2 upward ldbl-128ibm -0x7.e2p+4L : 0x3.ab031b9f7490e4bb40b5d6cdc2p-128L : inexact-ok
+exp2 -126.25
+= exp2 downward flt-32 -0x7.e4p+4f : 0x3.5d13fp-128f : inexact-ok underflow errno-erange-ok
+= exp2 tonearest flt-32 -0x7.e4p+4f : 0x3.5d13fp-128f : inexact-ok underflow errno-erange-ok
+= exp2 towardzero flt-32 -0x7.e4p+4f : 0x3.5d13fp-128f : inexact-ok underflow errno-erange-ok
+= exp2 upward flt-32 -0x7.e4p+4f : 0x3.5d13f8p-128f : inexact-ok underflow errno-erange-ok
+= exp2 downward dbl-64 -0x7.e4p+4 : 0x3.5d13f32b5a75ap-128 : inexact-ok
+= exp2 tonearest dbl-64 -0x7.e4p+4 : 0x3.5d13f32b5a75ap-128 : inexact-ok
+= exp2 towardzero dbl-64 -0x7.e4p+4 : 0x3.5d13f32b5a75ap-128 : inexact-ok
+= exp2 upward dbl-64 -0x7.e4p+4 : 0x3.5d13f32b5a75cp-128 : inexact-ok
+= exp2 downward ldbl-96-intel -0x7.e4p+4L : 0x3.5d13f32b5a75abdp-128L : inexact-ok
+= exp2 tonearest ldbl-96-intel -0x7.e4p+4L : 0x3.5d13f32b5a75abdp-128L : inexact-ok
+= exp2 towardzero ldbl-96-intel -0x7.e4p+4L : 0x3.5d13f32b5a75abdp-128L : inexact-ok
+= exp2 upward ldbl-96-intel -0x7.e4p+4L : 0x3.5d13f32b5a75abd4p-128L : inexact-ok
+= exp2 downward ldbl-96-m68k -0x7.e4p+4L : 0x3.5d13f32b5a75abdp-128L : inexact-ok
+= exp2 tonearest ldbl-96-m68k -0x7.e4p+4L : 0x3.5d13f32b5a75abdp-128L : inexact-ok
+= exp2 towardzero ldbl-96-m68k -0x7.e4p+4L : 0x3.5d13f32b5a75abdp-128L : inexact-ok
+= exp2 upward ldbl-96-m68k -0x7.e4p+4L : 0x3.5d13f32b5a75abd4p-128L : inexact-ok
+= exp2 downward ldbl-128 -0x7.e4p+4L : 0x3.5d13f32b5a75abd0e69a2ee640b4p-128L : inexact-ok
+= exp2 tonearest ldbl-128 -0x7.e4p+4L : 0x3.5d13f32b5a75abd0e69a2ee640b4p-128L : inexact-ok
+= exp2 towardzero ldbl-128 -0x7.e4p+4L : 0x3.5d13f32b5a75abd0e69a2ee640b4p-128L : inexact-ok
+= exp2 upward ldbl-128 -0x7.e4p+4L : 0x3.5d13f32b5a75abd0e69a2ee640b6p-128L : inexact-ok
+= exp2 downward ldbl-128ibm -0x7.e4p+4L : 0x3.5d13f32b5a75abd0e69a2ee64p-128L : inexact-ok
+= exp2 tonearest ldbl-128ibm -0x7.e4p+4L : 0x3.5d13f32b5a75abd0e69a2ee641p-128L : inexact-ok
+= exp2 towardzero ldbl-128ibm -0x7.e4p+4L : 0x3.5d13f32b5a75abd0e69a2ee64p-128L : inexact-ok
+= exp2 upward ldbl-128ibm -0x7.e4p+4L : 0x3.5d13f32b5a75abd0e69a2ee641p-128L : inexact-ok
+exp2 -126.375
+= exp2 downward flt-32 -0x7.e6p+4f : 0x3.159ca8p-128f : inexact-ok underflow errno-erange-ok
+= exp2 tonearest flt-32 -0x7.e6p+4f : 0x3.159ca8p-128f : inexact-ok underflow errno-erange-ok
+= exp2 towardzero flt-32 -0x7.e6p+4f : 0x3.159ca8p-128f : inexact-ok underflow errno-erange-ok
+= exp2 upward flt-32 -0x7.e6p+4f : 0x3.159cbp-128f : inexact-ok underflow errno-erange-ok
+= exp2 downward dbl-64 -0x7.e6p+4 : 0x3.159ca845541b6p-128 : inexact-ok
+= exp2 tonearest dbl-64 -0x7.e6p+4 : 0x3.159ca845541b6p-128 : inexact-ok
+= exp2 towardzero dbl-64 -0x7.e6p+4 : 0x3.159ca845541b6p-128 : inexact-ok
+= exp2 upward dbl-64 -0x7.e6p+4 : 0x3.159ca845541b8p-128 : inexact-ok
+= exp2 downward ldbl-96-intel -0x7.e6p+4L : 0x3.159ca845541b6b74p-128L : inexact-ok
+= exp2 tonearest ldbl-96-intel -0x7.e6p+4L : 0x3.159ca845541b6b74p-128L : inexact-ok
+= exp2 towardzero ldbl-96-intel -0x7.e6p+4L : 0x3.159ca845541b6b74p-128L : inexact-ok
+= exp2 upward ldbl-96-intel -0x7.e6p+4L : 0x3.159ca845541b6b78p-128L : inexact-ok
+= exp2 downward ldbl-96-m68k -0x7.e6p+4L : 0x3.159ca845541b6b74p-128L : inexact-ok
+= exp2 tonearest ldbl-96-m68k -0x7.e6p+4L : 0x3.159ca845541b6b74p-128L : inexact-ok
+= exp2 towardzero ldbl-96-m68k -0x7.e6p+4L : 0x3.159ca845541b6b74p-128L : inexact-ok
+= exp2 upward ldbl-96-m68k -0x7.e6p+4L : 0x3.159ca845541b6b78p-128L : inexact-ok
+= exp2 downward ldbl-128 -0x7.e6p+4L : 0x3.159ca845541b6b74f8ab43259376p-128L : inexact-ok
+= exp2 tonearest ldbl-128 -0x7.e6p+4L : 0x3.159ca845541b6b74f8ab43259376p-128L : inexact-ok
+= exp2 towardzero ldbl-128 -0x7.e6p+4L : 0x3.159ca845541b6b74f8ab43259376p-128L : inexact-ok
+= exp2 upward ldbl-128 -0x7.e6p+4L : 0x3.159ca845541b6b74f8ab43259378p-128L : inexact-ok
+= exp2 downward ldbl-128ibm -0x7.e6p+4L : 0x3.159ca845541b6b74f8ab432593p-128L : inexact-ok
+= exp2 tonearest ldbl-128ibm -0x7.e6p+4L : 0x3.159ca845541b6b74f8ab432593p-128L : inexact-ok
+= exp2 towardzero ldbl-128ibm -0x7.e6p+4L : 0x3.159ca845541b6b74f8ab432593p-128L : inexact-ok
+= exp2 upward ldbl-128ibm -0x7.e6p+4L : 0x3.159ca845541b6b74f8ab432594p-128L : inexact-ok
+exp2 -126.5
+= exp2 downward flt-32 -0x7.e8p+4f : 0x2.d413c8p-128f : inexact-ok underflow errno-erange-ok
+= exp2 tonearest flt-32 -0x7.e8p+4f : 0x2.d413dp-128f : inexact-ok underflow errno-erange-ok
+= exp2 towardzero flt-32 -0x7.e8p+4f : 0x2.d413c8p-128f : inexact-ok underflow errno-erange-ok
+= exp2 upward flt-32 -0x7.e8p+4f : 0x2.d413dp-128f : inexact-ok underflow errno-erange-ok
+= exp2 downward dbl-64 -0x7.e8p+4 : 0x2.d413cccfe7798p-128 : inexact-ok
+= exp2 tonearest dbl-64 -0x7.e8p+4 : 0x2.d413cccfe779ap-128 : inexact-ok
+= exp2 towardzero dbl-64 -0x7.e8p+4 : 0x2.d413cccfe7798p-128 : inexact-ok
+= exp2 upward dbl-64 -0x7.e8p+4 : 0x2.d413cccfe779ap-128 : inexact-ok
+= exp2 downward ldbl-96-intel -0x7.e8p+4L : 0x2.d413cccfe779921p-128L : inexact-ok
+= exp2 tonearest ldbl-96-intel -0x7.e8p+4L : 0x2.d413cccfe779921p-128L : inexact-ok
+= exp2 towardzero ldbl-96-intel -0x7.e8p+4L : 0x2.d413cccfe779921p-128L : inexact-ok
+= exp2 upward ldbl-96-intel -0x7.e8p+4L : 0x2.d413cccfe7799214p-128L : inexact-ok
+= exp2 downward ldbl-96-m68k -0x7.e8p+4L : 0x2.d413cccfe779921p-128L : inexact-ok
+= exp2 tonearest ldbl-96-m68k -0x7.e8p+4L : 0x2.d413cccfe779921p-128L : inexact-ok
+= exp2 towardzero ldbl-96-m68k -0x7.e8p+4L : 0x2.d413cccfe779921p-128L : inexact-ok
+= exp2 upward ldbl-96-m68k -0x7.e8p+4L : 0x2.d413cccfe7799214p-128L : inexact-ok
+= exp2 downward ldbl-128 -0x7.e8p+4L : 0x2.d413cccfe779921165f626cdd52ap-128L : inexact-ok
+= exp2 tonearest ldbl-128 -0x7.e8p+4L : 0x2.d413cccfe779921165f626cdd52ap-128L : inexact-ok
+= exp2 towardzero ldbl-128 -0x7.e8p+4L : 0x2.d413cccfe779921165f626cdd52ap-128L : inexact-ok
+= exp2 upward ldbl-128 -0x7.e8p+4L : 0x2.d413cccfe779921165f626cdd52cp-128L : inexact-ok
+= exp2 downward ldbl-128ibm -0x7.e8p+4L : 0x2.d413cccfe779921165f626cdd5p-128L : inexact-ok
+= exp2 tonearest ldbl-128ibm -0x7.e8p+4L : 0x2.d413cccfe779921165f626cdd5p-128L : inexact-ok
+= exp2 towardzero ldbl-128ibm -0x7.e8p+4L : 0x2.d413cccfe779921165f626cdd5p-128L : inexact-ok
+= exp2 upward ldbl-128ibm -0x7.e8p+4L : 0x2.d413cccfe779921165f626cdd6p-128L : inexact-ok
+exp2 -126.625
+= exp2 downward flt-32 -0x7.eap+4f : 0x2.97fb58p-128f : inexact-ok underflow errno-erange-ok
+= exp2 tonearest flt-32 -0x7.eap+4f : 0x2.97fb58p-128f : inexact-ok underflow errno-erange-ok
+= exp2 towardzero flt-32 -0x7.eap+4f : 0x2.97fb58p-128f : inexact-ok underflow errno-erange-ok
+= exp2 upward flt-32 -0x7.eap+4f : 0x2.97fb6p-128f : inexact-ok underflow errno-erange-ok
+= exp2 downward dbl-64 -0x7.eap+4 : 0x2.97fb5aa6c544ep-128 : inexact-ok
+= exp2 tonearest dbl-64 -0x7.eap+4 : 0x2.97fb5aa6c544ep-128 : inexact-ok
+= exp2 towardzero dbl-64 -0x7.eap+4 : 0x2.97fb5aa6c544ep-128 : inexact-ok
+= exp2 upward dbl-64 -0x7.eap+4 : 0x2.97fb5aa6c545p-128 : inexact-ok
+= exp2 downward ldbl-96-intel -0x7.eap+4L : 0x2.97fb5aa6c544e3a8p-128L : inexact-ok
+= exp2 tonearest ldbl-96-intel -0x7.eap+4L : 0x2.97fb5aa6c544e3a8p-128L : inexact-ok
+= exp2 towardzero ldbl-96-intel -0x7.eap+4L : 0x2.97fb5aa6c544e3a8p-128L : inexact-ok
+= exp2 upward ldbl-96-intel -0x7.eap+4L : 0x2.97fb5aa6c544e3acp-128L : inexact-ok
+= exp2 downward ldbl-96-m68k -0x7.eap+4L : 0x2.97fb5aa6c544e3a8p-128L : inexact-ok
+= exp2 tonearest ldbl-96-m68k -0x7.eap+4L : 0x2.97fb5aa6c544e3a8p-128L : inexact-ok
+= exp2 towardzero ldbl-96-m68k -0x7.eap+4L : 0x2.97fb5aa6c544e3a8p-128L : inexact-ok
+= exp2 upward ldbl-96-m68k -0x7.eap+4L : 0x2.97fb5aa6c544e3acp-128L : inexact-ok
+= exp2 downward ldbl-128 -0x7.eap+4L : 0x2.97fb5aa6c544e3a872f5fd885c4p-128L : inexact-ok
+= exp2 tonearest ldbl-128 -0x7.eap+4L : 0x2.97fb5aa6c544e3a872f5fd885c42p-128L : inexact-ok
+= exp2 towardzero ldbl-128 -0x7.eap+4L : 0x2.97fb5aa6c544e3a872f5fd885c4p-128L : inexact-ok
+= exp2 upward ldbl-128 -0x7.eap+4L : 0x2.97fb5aa6c544e3a872f5fd885c42p-128L : inexact-ok
+= exp2 downward ldbl-128ibm -0x7.eap+4L : 0x2.97fb5aa6c544e3a872f5fd885cp-128L : inexact-ok
+= exp2 tonearest ldbl-128ibm -0x7.eap+4L : 0x2.97fb5aa6c544e3a872f5fd885cp-128L : inexact-ok
+= exp2 towardzero ldbl-128ibm -0x7.eap+4L : 0x2.97fb5aa6c544e3a872f5fd885cp-128L : inexact-ok
+= exp2 upward ldbl-128ibm -0x7.eap+4L : 0x2.97fb5aa6c544e3a872f5fd885dp-128L : inexact-ok
+exp2 -126.75
+= exp2 downward flt-32 -0x7.ecp+4f : 0x2.60dfcp-128f : inexact-ok underflow errno-erange-ok
+= exp2 tonearest flt-32 -0x7.ecp+4f : 0x2.60dfcp-128f : inexact-ok underflow errno-erange-ok
+= exp2 towardzero flt-32 -0x7.ecp+4f : 0x2.60dfcp-128f : inexact-ok underflow errno-erange-ok
+= exp2 upward flt-32 -0x7.ecp+4f : 0x2.60dfc8p-128f : inexact-ok underflow errno-erange-ok
+= exp2 downward dbl-64 -0x7.ecp+4 : 0x2.60dfc14636e2ap-128 : inexact-ok
+= exp2 tonearest dbl-64 -0x7.ecp+4 : 0x2.60dfc14636e2ap-128 : inexact-ok
+= exp2 towardzero dbl-64 -0x7.ecp+4 : 0x2.60dfc14636e2ap-128 : inexact-ok
+= exp2 upward dbl-64 -0x7.ecp+4 : 0x2.60dfc14636e2cp-128 : inexact-ok
+= exp2 downward ldbl-96-intel -0x7.ecp+4L : 0x2.60dfc14636e2a5bcp-128L : inexact-ok
+= exp2 tonearest ldbl-96-intel -0x7.ecp+4L : 0x2.60dfc14636e2a5bcp-128L : inexact-ok
+= exp2 towardzero ldbl-96-intel -0x7.ecp+4L : 0x2.60dfc14636e2a5bcp-128L : inexact-ok
+= exp2 upward ldbl-96-intel -0x7.ecp+4L : 0x2.60dfc14636e2a5cp-128L : inexact-ok
+= exp2 downward ldbl-96-m68k -0x7.ecp+4L : 0x2.60dfc14636e2a5bcp-128L : inexact-ok
+= exp2 tonearest ldbl-96-m68k -0x7.ecp+4L : 0x2.60dfc14636e2a5bcp-128L : inexact-ok
+= exp2 towardzero ldbl-96-m68k -0x7.ecp+4L : 0x2.60dfc14636e2a5bcp-128L : inexact-ok
+= exp2 upward ldbl-96-m68k -0x7.ecp+4L : 0x2.60dfc14636e2a5cp-128L : inexact-ok
+= exp2 downward ldbl-128 -0x7.ecp+4L : 0x2.60dfc14636e2a5bd1ab48c60b90ap-128L : inexact-ok
+= exp2 tonearest ldbl-128 -0x7.ecp+4L : 0x2.60dfc14636e2a5bd1ab48c60b90cp-128L : inexact-ok
+= exp2 towardzero ldbl-128 -0x7.ecp+4L : 0x2.60dfc14636e2a5bd1ab48c60b90ap-128L : inexact-ok
+= exp2 upward ldbl-128 -0x7.ecp+4L : 0x2.60dfc14636e2a5bd1ab48c60b90cp-128L : inexact-ok
+= exp2 downward ldbl-128ibm -0x7.ecp+4L : 0x2.60dfc14636e2a5bd1ab48c60b9p-128L : inexact-ok
+= exp2 tonearest ldbl-128ibm -0x7.ecp+4L : 0x2.60dfc14636e2a5bd1ab48c60b9p-128L : inexact-ok
+= exp2 towardzero ldbl-128ibm -0x7.ecp+4L : 0x2.60dfc14636e2a5bd1ab48c60b9p-128L : inexact-ok
+= exp2 upward ldbl-128ibm -0x7.ecp+4L : 0x2.60dfc14636e2a5bd1ab48c60bap-128L : inexact-ok
+exp2 -126.875
+= exp2 downward flt-32 -0x7.eep+4f : 0x2.2e57p-128f : inexact-ok underflow errno-erange-ok
+= exp2 tonearest flt-32 -0x7.eep+4f : 0x2.2e5708p-128f : inexact-ok underflow errno-erange-ok
+= exp2 towardzero flt-32 -0x7.eep+4f : 0x2.2e57p-128f : inexact-ok underflow errno-erange-ok
+= exp2 upward flt-32 -0x7.eep+4f : 0x2.2e5708p-128f : inexact-ok underflow errno-erange-ok
+= exp2 downward dbl-64 -0x7.eep+4 : 0x2.2e57078faa2f4p-128 : inexact-ok
+= exp2 tonearest dbl-64 -0x7.eep+4 : 0x2.2e57078faa2f6p-128 : inexact-ok
+= exp2 towardzero dbl-64 -0x7.eep+4 : 0x2.2e57078faa2f4p-128 : inexact-ok
+= exp2 upward dbl-64 -0x7.eep+4 : 0x2.2e57078faa2f6p-128 : inexact-ok
+= exp2 downward ldbl-96-intel -0x7.eep+4L : 0x2.2e57078faa2f5b98p-128L : inexact-ok
+= exp2 tonearest ldbl-96-intel -0x7.eep+4L : 0x2.2e57078faa2f5b9cp-128L : inexact-ok
+= exp2 towardzero ldbl-96-intel -0x7.eep+4L : 0x2.2e57078faa2f5b98p-128L : inexact-ok
+= exp2 upward ldbl-96-intel -0x7.eep+4L : 0x2.2e57078faa2f5b9cp-128L : inexact-ok
+= exp2 downward ldbl-96-m68k -0x7.eep+4L : 0x2.2e57078faa2f5b98p-128L : inexact-ok
+= exp2 tonearest ldbl-96-m68k -0x7.eep+4L : 0x2.2e57078faa2f5b9cp-128L : inexact-ok
+= exp2 towardzero ldbl-96-m68k -0x7.eep+4L : 0x2.2e57078faa2f5b98p-128L : inexact-ok
+= exp2 upward ldbl-96-m68k -0x7.eep+4L : 0x2.2e57078faa2f5b9cp-128L : inexact-ok
+= exp2 downward ldbl-128 -0x7.eep+4L : 0x2.2e57078faa2f5b9bef918a1d6294p-128L : inexact-ok
+= exp2 tonearest ldbl-128 -0x7.eep+4L : 0x2.2e57078faa2f5b9bef918a1d6294p-128L : inexact-ok
+= exp2 towardzero ldbl-128 -0x7.eep+4L : 0x2.2e57078faa2f5b9bef918a1d6294p-128L : inexact-ok
+= exp2 upward ldbl-128 -0x7.eep+4L : 0x2.2e57078faa2f5b9bef918a1d6296p-128L : inexact-ok
+= exp2 downward ldbl-128ibm -0x7.eep+4L : 0x2.2e57078faa2f5b9bef918a1d62p-128L : inexact-ok
+= exp2 tonearest ldbl-128ibm -0x7.eep+4L : 0x2.2e57078faa2f5b9bef918a1d63p-128L : inexact-ok
+= exp2 towardzero ldbl-128ibm -0x7.eep+4L : 0x2.2e57078faa2f5b9bef918a1d62p-128L : inexact-ok
+= exp2 upward ldbl-128ibm -0x7.eep+4L : 0x2.2e57078faa2f5b9bef918a1d63p-128L : inexact-ok
+exp2 -1022.125
+= exp2 downward flt-32 -0x3.fe2p+8f : 0x0p+0f : inexact-ok underflow errno-erange
+= exp2 tonearest flt-32 -0x3.fe2p+8f : 0x0p+0f : inexact-ok underflow errno-erange
+= exp2 towardzero flt-32 -0x3.fe2p+8f : 0x0p+0f : inexact-ok underflow errno-erange
+= exp2 upward flt-32 -0x3.fe2p+8f : 0x8p-152f : inexact-ok underflow errno-erange-ok
+= exp2 downward dbl-64 -0x3.fe2p+8 : 0x3.ab031b9f7490cp-1024 : inexact-ok underflow errno-erange-ok
+= exp2 tonearest dbl-64 -0x3.fe2p+8 : 0x3.ab031b9f7491p-1024 : inexact-ok underflow errno-erange-ok
+= exp2 towardzero dbl-64 -0x3.fe2p+8 : 0x3.ab031b9f7490cp-1024 : inexact-ok underflow errno-erange-ok
+= exp2 upward dbl-64 -0x3.fe2p+8 : 0x3.ab031b9f7491p-1024 : inexact-ok underflow errno-erange-ok
+= exp2 downward ldbl-96-intel -0x3.fe2p+8L : 0x3.ab031b9f7490e4b8p-1024L : inexact-ok
+= exp2 tonearest ldbl-96-intel -0x3.fe2p+8L : 0x3.ab031b9f7490e4bcp-1024L : inexact-ok
+= exp2 towardzero ldbl-96-intel -0x3.fe2p+8L : 0x3.ab031b9f7490e4b8p-1024L : inexact-ok
+= exp2 upward ldbl-96-intel -0x3.fe2p+8L : 0x3.ab031b9f7490e4bcp-1024L : inexact-ok
+= exp2 downward ldbl-96-m68k -0x3.fe2p+8L : 0x3.ab031b9f7490e4b8p-1024L : inexact-ok
+= exp2 tonearest ldbl-96-m68k -0x3.fe2p+8L : 0x3.ab031b9f7490e4bcp-1024L : inexact-ok
+= exp2 towardzero ldbl-96-m68k -0x3.fe2p+8L : 0x3.ab031b9f7490e4b8p-1024L : inexact-ok
+= exp2 upward ldbl-96-m68k -0x3.fe2p+8L : 0x3.ab031b9f7490e4bcp-1024L : inexact-ok
+= exp2 downward ldbl-128 -0x3.fe2p+8L : 0x3.ab031b9f7490e4bb40b5d6cdc1b8p-1024L : inexact-ok
+= exp2 tonearest ldbl-128 -0x3.fe2p+8L : 0x3.ab031b9f7490e4bb40b5d6cdc1bap-1024L : inexact-ok
+= exp2 towardzero ldbl-128 -0x3.fe2p+8L : 0x3.ab031b9f7490e4bb40b5d6cdc1b8p-1024L : inexact-ok
+= exp2 upward ldbl-128 -0x3.fe2p+8L : 0x3.ab031b9f7490e4bb40b5d6cdc1bap-1024L : inexact-ok
+= exp2 downward ldbl-128ibm -0x3.fe2p+8L : 0x3.ab031b9f7490cp-1024L : inexact-ok underflow errno-erange-ok
+= exp2 tonearest ldbl-128ibm -0x3.fe2p+8L : 0x3.ab031b9f7491p-1024L : inexact-ok underflow errno-erange-ok
+= exp2 towardzero ldbl-128ibm -0x3.fe2p+8L : 0x3.ab031b9f7490cp-1024L : inexact-ok underflow errno-erange-ok
+= exp2 upward ldbl-128ibm -0x3.fe2p+8L : 0x3.ab031b9f7491p-1024L : inexact-ok underflow errno-erange-ok
+exp2 -1022.25
+= exp2 downward flt-32 -0x3.fe4p+8f : 0x0p+0f : inexact-ok underflow errno-erange
+= exp2 tonearest flt-32 -0x3.fe4p+8f : 0x0p+0f : inexact-ok underflow errno-erange
+= exp2 towardzero flt-32 -0x3.fe4p+8f : 0x0p+0f : inexact-ok underflow errno-erange
+= exp2 upward flt-32 -0x3.fe4p+8f : 0x8p-152f : inexact-ok underflow errno-erange-ok
+= exp2 downward dbl-64 -0x3.fe4p+8 : 0x3.5d13f32b5a758p-1024 : inexact-ok underflow errno-erange-ok
+= exp2 tonearest dbl-64 -0x3.fe4p+8 : 0x3.5d13f32b5a75cp-1024 : inexact-ok underflow errno-erange-ok
+= exp2 towardzero dbl-64 -0x3.fe4p+8 : 0x3.5d13f32b5a758p-1024 : inexact-ok underflow errno-erange-ok
+= exp2 upward dbl-64 -0x3.fe4p+8 : 0x3.5d13f32b5a75cp-1024 : inexact-ok underflow errno-erange-ok
+= exp2 downward ldbl-96-intel -0x3.fe4p+8L : 0x3.5d13f32b5a75abdp-1024L : inexact-ok
+= exp2 tonearest ldbl-96-intel -0x3.fe4p+8L : 0x3.5d13f32b5a75abdp-1024L : inexact-ok
+= exp2 towardzero ldbl-96-intel -0x3.fe4p+8L : 0x3.5d13f32b5a75abdp-1024L : inexact-ok
+= exp2 upward ldbl-96-intel -0x3.fe4p+8L : 0x3.5d13f32b5a75abd4p-1024L : inexact-ok
+= exp2 downward ldbl-96-m68k -0x3.fe4p+8L : 0x3.5d13f32b5a75abdp-1024L : inexact-ok
+= exp2 tonearest ldbl-96-m68k -0x3.fe4p+8L : 0x3.5d13f32b5a75abdp-1024L : inexact-ok
+= exp2 towardzero ldbl-96-m68k -0x3.fe4p+8L : 0x3.5d13f32b5a75abdp-1024L : inexact-ok
+= exp2 upward ldbl-96-m68k -0x3.fe4p+8L : 0x3.5d13f32b5a75abd4p-1024L : inexact-ok
+= exp2 downward ldbl-128 -0x3.fe4p+8L : 0x3.5d13f32b5a75abd0e69a2ee640b4p-1024L : inexact-ok
+= exp2 tonearest ldbl-128 -0x3.fe4p+8L : 0x3.5d13f32b5a75abd0e69a2ee640b4p-1024L : inexact-ok
+= exp2 towardzero ldbl-128 -0x3.fe4p+8L : 0x3.5d13f32b5a75abd0e69a2ee640b4p-1024L : inexact-ok
+= exp2 upward ldbl-128 -0x3.fe4p+8L : 0x3.5d13f32b5a75abd0e69a2ee640b6p-1024L : inexact-ok
+= exp2 downward ldbl-128ibm -0x3.fe4p+8L : 0x3.5d13f32b5a758p-1024L : inexact-ok underflow errno-erange-ok
+= exp2 tonearest ldbl-128ibm -0x3.fe4p+8L : 0x3.5d13f32b5a75cp-1024L : inexact-ok underflow errno-erange-ok
+= exp2 towardzero ldbl-128ibm -0x3.fe4p+8L : 0x3.5d13f32b5a758p-1024L : inexact-ok underflow errno-erange-ok
+= exp2 upward ldbl-128ibm -0x3.fe4p+8L : 0x3.5d13f32b5a75cp-1024L : inexact-ok underflow errno-erange-ok
+exp2 -1022.375
+= exp2 downward flt-32 -0x3.fe6p+8f : 0x0p+0f : inexact-ok underflow errno-erange
+= exp2 tonearest flt-32 -0x3.fe6p+8f : 0x0p+0f : inexact-ok underflow errno-erange
+= exp2 towardzero flt-32 -0x3.fe6p+8f : 0x0p+0f : inexact-ok underflow errno-erange
+= exp2 upward flt-32 -0x3.fe6p+8f : 0x8p-152f : inexact-ok underflow errno-erange-ok
+= exp2 downward dbl-64 -0x3.fe6p+8 : 0x3.159ca845541b4p-1024 : inexact-ok underflow errno-erange-ok
+= exp2 tonearest dbl-64 -0x3.fe6p+8 : 0x3.159ca845541b8p-1024 : inexact-ok underflow errno-erange-ok
+= exp2 towardzero dbl-64 -0x3.fe6p+8 : 0x3.159ca845541b4p-1024 : inexact-ok underflow errno-erange-ok
+= exp2 upward dbl-64 -0x3.fe6p+8 : 0x3.159ca845541b8p-1024 : inexact-ok underflow errno-erange-ok
+= exp2 downward ldbl-96-intel -0x3.fe6p+8L : 0x3.159ca845541b6b74p-1024L : inexact-ok
+= exp2 tonearest ldbl-96-intel -0x3.fe6p+8L : 0x3.159ca845541b6b74p-1024L : inexact-ok
+= exp2 towardzero ldbl-96-intel -0x3.fe6p+8L : 0x3.159ca845541b6b74p-1024L : inexact-ok
+= exp2 upward ldbl-96-intel -0x3.fe6p+8L : 0x3.159ca845541b6b78p-1024L : inexact-ok
+= exp2 downward ldbl-96-m68k -0x3.fe6p+8L : 0x3.159ca845541b6b74p-1024L : inexact-ok
+= exp2 tonearest ldbl-96-m68k -0x3.fe6p+8L : 0x3.159ca845541b6b74p-1024L : inexact-ok
+= exp2 towardzero ldbl-96-m68k -0x3.fe6p+8L : 0x3.159ca845541b6b74p-1024L : inexact-ok
+= exp2 upward ldbl-96-m68k -0x3.fe6p+8L : 0x3.159ca845541b6b78p-1024L : inexact-ok
+= exp2 downward ldbl-128 -0x3.fe6p+8L : 0x3.159ca845541b6b74f8ab43259376p-1024L : inexact-ok
+= exp2 tonearest ldbl-128 -0x3.fe6p+8L : 0x3.159ca845541b6b74f8ab43259376p-1024L : inexact-ok
+= exp2 towardzero ldbl-128 -0x3.fe6p+8L : 0x3.159ca845541b6b74f8ab43259376p-1024L : inexact-ok
+= exp2 upward ldbl-128 -0x3.fe6p+8L : 0x3.159ca845541b6b74f8ab43259378p-1024L : inexact-ok
+= exp2 downward ldbl-128ibm -0x3.fe6p+8L : 0x3.159ca845541b4p-1024L : inexact-ok underflow errno-erange-ok
+= exp2 tonearest ldbl-128ibm -0x3.fe6p+8L : 0x3.159ca845541b8p-1024L : inexact-ok underflow errno-erange-ok
+= exp2 towardzero ldbl-128ibm -0x3.fe6p+8L : 0x3.159ca845541b4p-1024L : inexact-ok underflow errno-erange-ok
+= exp2 upward ldbl-128ibm -0x3.fe6p+8L : 0x3.159ca845541b8p-1024L : inexact-ok underflow errno-erange-ok
+exp2 -1022.5
+= exp2 downward flt-32 -0x3.fe8p+8f : 0x0p+0f : inexact-ok underflow errno-erange
+= exp2 tonearest flt-32 -0x3.fe8p+8f : 0x0p+0f : inexact-ok underflow errno-erange
+= exp2 towardzero flt-32 -0x3.fe8p+8f : 0x0p+0f : inexact-ok underflow errno-erange
+= exp2 upward flt-32 -0x3.fe8p+8f : 0x8p-152f : inexact-ok underflow errno-erange-ok
+= exp2 downward dbl-64 -0x3.fe8p+8 : 0x2.d413cccfe7798p-1024 : inexact-ok underflow errno-erange-ok
+= exp2 tonearest dbl-64 -0x3.fe8p+8 : 0x2.d413cccfe7798p-1024 : inexact-ok underflow errno-erange-ok
+= exp2 towardzero dbl-64 -0x3.fe8p+8 : 0x2.d413cccfe7798p-1024 : inexact-ok underflow errno-erange-ok
+= exp2 upward dbl-64 -0x3.fe8p+8 : 0x2.d413cccfe779cp-1024 : inexact-ok underflow errno-erange-ok
+= exp2 downward ldbl-96-intel -0x3.fe8p+8L : 0x2.d413cccfe779921p-1024L : inexact-ok
+= exp2 tonearest ldbl-96-intel -0x3.fe8p+8L : 0x2.d413cccfe779921p-1024L : inexact-ok
+= exp2 towardzero ldbl-96-intel -0x3.fe8p+8L : 0x2.d413cccfe779921p-1024L : inexact-ok
+= exp2 upward ldbl-96-intel -0x3.fe8p+8L : 0x2.d413cccfe7799214p-1024L : inexact-ok
+= exp2 downward ldbl-96-m68k -0x3.fe8p+8L : 0x2.d413cccfe779921p-1024L : inexact-ok
+= exp2 tonearest ldbl-96-m68k -0x3.fe8p+8L : 0x2.d413cccfe779921p-1024L : inexact-ok
+= exp2 towardzero ldbl-96-m68k -0x3.fe8p+8L : 0x2.d413cccfe779921p-1024L : inexact-ok
+= exp2 upward ldbl-96-m68k -0x3.fe8p+8L : 0x2.d413cccfe7799214p-1024L : inexact-ok
+= exp2 downward ldbl-128 -0x3.fe8p+8L : 0x2.d413cccfe779921165f626cdd52ap-1024L : inexact-ok
+= exp2 tonearest ldbl-128 -0x3.fe8p+8L : 0x2.d413cccfe779921165f626cdd52ap-1024L : inexact-ok
+= exp2 towardzero ldbl-128 -0x3.fe8p+8L : 0x2.d413cccfe779921165f626cdd52ap-1024L : inexact-ok
+= exp2 upward ldbl-128 -0x3.fe8p+8L : 0x2.d413cccfe779921165f626cdd52cp-1024L : inexact-ok
+= exp2 downward ldbl-128ibm -0x3.fe8p+8L : 0x2.d413cccfe7798p-1024L : inexact-ok underflow errno-erange-ok
+= exp2 tonearest ldbl-128ibm -0x3.fe8p+8L : 0x2.d413cccfe7798p-1024L : inexact-ok underflow errno-erange-ok
+= exp2 towardzero ldbl-128ibm -0x3.fe8p+8L : 0x2.d413cccfe7798p-1024L : inexact-ok underflow errno-erange-ok
+= exp2 upward ldbl-128ibm -0x3.fe8p+8L : 0x2.d413cccfe779cp-1024L : inexact-ok underflow errno-erange-ok
+exp2 -1022.625
+= exp2 downward flt-32 -0x3.feap+8f : 0x0p+0f : inexact-ok underflow errno-erange
+= exp2 tonearest flt-32 -0x3.feap+8f : 0x0p+0f : inexact-ok underflow errno-erange
+= exp2 towardzero flt-32 -0x3.feap+8f : 0x0p+0f : inexact-ok underflow errno-erange
+= exp2 upward flt-32 -0x3.feap+8f : 0x8p-152f : inexact-ok underflow errno-erange-ok
+= exp2 downward dbl-64 -0x3.feap+8 : 0x2.97fb5aa6c544cp-1024 : inexact-ok underflow errno-erange-ok
+= exp2 tonearest dbl-64 -0x3.feap+8 : 0x2.97fb5aa6c545p-1024 : inexact-ok underflow errno-erange-ok
+= exp2 towardzero dbl-64 -0x3.feap+8 : 0x2.97fb5aa6c544cp-1024 : inexact-ok underflow errno-erange-ok
+= exp2 upward dbl-64 -0x3.feap+8 : 0x2.97fb5aa6c545p-1024 : inexact-ok underflow errno-erange-ok
+= exp2 downward ldbl-96-intel -0x3.feap+8L : 0x2.97fb5aa6c544e3a8p-1024L : inexact-ok
+= exp2 tonearest ldbl-96-intel -0x3.feap+8L : 0x2.97fb5aa6c544e3a8p-1024L : inexact-ok
+= exp2 towardzero ldbl-96-intel -0x3.feap+8L : 0x2.97fb5aa6c544e3a8p-1024L : inexact-ok
+= exp2 upward ldbl-96-intel -0x3.feap+8L : 0x2.97fb5aa6c544e3acp-1024L : inexact-ok
+= exp2 downward ldbl-96-m68k -0x3.feap+8L : 0x2.97fb5aa6c544e3a8p-1024L : inexact-ok
+= exp2 tonearest ldbl-96-m68k -0x3.feap+8L : 0x2.97fb5aa6c544e3a8p-1024L : inexact-ok
+= exp2 towardzero ldbl-96-m68k -0x3.feap+8L : 0x2.97fb5aa6c544e3a8p-1024L : inexact-ok
+= exp2 upward ldbl-96-m68k -0x3.feap+8L : 0x2.97fb5aa6c544e3acp-1024L : inexact-ok
+= exp2 downward ldbl-128 -0x3.feap+8L : 0x2.97fb5aa6c544e3a872f5fd885c4p-1024L : inexact-ok
+= exp2 tonearest ldbl-128 -0x3.feap+8L : 0x2.97fb5aa6c544e3a872f5fd885c42p-1024L : inexact-ok
+= exp2 towardzero ldbl-128 -0x3.feap+8L : 0x2.97fb5aa6c544e3a872f5fd885c4p-1024L : inexact-ok
+= exp2 upward ldbl-128 -0x3.feap+8L : 0x2.97fb5aa6c544e3a872f5fd885c42p-1024L : inexact-ok
+= exp2 downward ldbl-128ibm -0x3.feap+8L : 0x2.97fb5aa6c544cp-1024L : inexact-ok underflow errno-erange-ok
+= exp2 tonearest ldbl-128ibm -0x3.feap+8L : 0x2.97fb5aa6c545p-1024L : inexact-ok underflow errno-erange-ok
+= exp2 towardzero ldbl-128ibm -0x3.feap+8L : 0x2.97fb5aa6c544cp-1024L : inexact-ok underflow errno-erange-ok
+= exp2 upward ldbl-128ibm -0x3.feap+8L : 0x2.97fb5aa6c545p-1024L : inexact-ok underflow errno-erange-ok
+exp2 -1022.75
+= exp2 downward flt-32 -0x3.fecp+8f : 0x0p+0f : inexact-ok underflow errno-erange
+= exp2 tonearest flt-32 -0x3.fecp+8f : 0x0p+0f : inexact-ok underflow errno-erange
+= exp2 towardzero flt-32 -0x3.fecp+8f : 0x0p+0f : inexact-ok underflow errno-erange
+= exp2 upward flt-32 -0x3.fecp+8f : 0x8p-152f : inexact-ok underflow errno-erange-ok
+= exp2 downward dbl-64 -0x3.fecp+8 : 0x2.60dfc14636e28p-1024 : inexact-ok underflow errno-erange-ok
+= exp2 tonearest dbl-64 -0x3.fecp+8 : 0x2.60dfc14636e2cp-1024 : inexact-ok underflow errno-erange-ok
+= exp2 towardzero dbl-64 -0x3.fecp+8 : 0x2.60dfc14636e28p-1024 : inexact-ok underflow errno-erange-ok
+= exp2 upward dbl-64 -0x3.fecp+8 : 0x2.60dfc14636e2cp-1024 : inexact-ok underflow errno-erange-ok
+= exp2 downward ldbl-96-intel -0x3.fecp+8L : 0x2.60dfc14636e2a5bcp-1024L : inexact-ok
+= exp2 tonearest ldbl-96-intel -0x3.fecp+8L : 0x2.60dfc14636e2a5bcp-1024L : inexact-ok
+= exp2 towardzero ldbl-96-intel -0x3.fecp+8L : 0x2.60dfc14636e2a5bcp-1024L : inexact-ok
+= exp2 upward ldbl-96-intel -0x3.fecp+8L : 0x2.60dfc14636e2a5cp-1024L : inexact-ok
+= exp2 downward ldbl-96-m68k -0x3.fecp+8L : 0x2.60dfc14636e2a5bcp-1024L : inexact-ok
+= exp2 tonearest ldbl-96-m68k -0x3.fecp+8L : 0x2.60dfc14636e2a5bcp-1024L : inexact-ok
+= exp2 towardzero ldbl-96-m68k -0x3.fecp+8L : 0x2.60dfc14636e2a5bcp-1024L : inexact-ok
+= exp2 upward ldbl-96-m68k -0x3.fecp+8L : 0x2.60dfc14636e2a5cp-1024L : inexact-ok
+= exp2 downward ldbl-128 -0x3.fecp+8L : 0x2.60dfc14636e2a5bd1ab48c60b90ap-1024L : inexact-ok
+= exp2 tonearest ldbl-128 -0x3.fecp+8L : 0x2.60dfc14636e2a5bd1ab48c60b90cp-1024L : inexact-ok
+= exp2 towardzero ldbl-128 -0x3.fecp+8L : 0x2.60dfc14636e2a5bd1ab48c60b90ap-1024L : inexact-ok
+= exp2 upward ldbl-128 -0x3.fecp+8L : 0x2.60dfc14636e2a5bd1ab48c60b90cp-1024L : inexact-ok
+= exp2 downward ldbl-128ibm -0x3.fecp+8L : 0x2.60dfc14636e28p-1024L : inexact-ok underflow errno-erange-ok
+= exp2 tonearest ldbl-128ibm -0x3.fecp+8L : 0x2.60dfc14636e2cp-1024L : inexact-ok underflow errno-erange-ok
+= exp2 towardzero ldbl-128ibm -0x3.fecp+8L : 0x2.60dfc14636e28p-1024L : inexact-ok underflow errno-erange-ok
+= exp2 upward ldbl-128ibm -0x3.fecp+8L : 0x2.60dfc14636e2cp-1024L : inexact-ok underflow errno-erange-ok
+exp2 -1022.875
+= exp2 downward flt-32 -0x3.feep+8f : 0x0p+0f : inexact-ok underflow errno-erange
+= exp2 tonearest flt-32 -0x3.feep+8f : 0x0p+0f : inexact-ok underflow errno-erange
+= exp2 towardzero flt-32 -0x3.feep+8f : 0x0p+0f : inexact-ok underflow errno-erange
+= exp2 upward flt-32 -0x3.feep+8f : 0x8p-152f : inexact-ok underflow errno-erange-ok
+= exp2 downward dbl-64 -0x3.feep+8 : 0x2.2e57078faa2f4p-1024 : inexact-ok underflow errno-erange-ok
+= exp2 tonearest dbl-64 -0x3.feep+8 : 0x2.2e57078faa2f4p-1024 : inexact-ok underflow errno-erange-ok
+= exp2 towardzero dbl-64 -0x3.feep+8 : 0x2.2e57078faa2f4p-1024 : inexact-ok underflow errno-erange-ok
+= exp2 upward dbl-64 -0x3.feep+8 : 0x2.2e57078faa2f8p-1024 : inexact-ok underflow errno-erange-ok
+= exp2 downward ldbl-96-intel -0x3.feep+8L : 0x2.2e57078faa2f5b98p-1024L : inexact-ok
+= exp2 tonearest ldbl-96-intel -0x3.feep+8L : 0x2.2e57078faa2f5b9cp-1024L : inexact-ok
+= exp2 towardzero ldbl-96-intel -0x3.feep+8L : 0x2.2e57078faa2f5b98p-1024L : inexact-ok
+= exp2 upward ldbl-96-intel -0x3.feep+8L : 0x2.2e57078faa2f5b9cp-1024L : inexact-ok
+= exp2 downward ldbl-96-m68k -0x3.feep+8L : 0x2.2e57078faa2f5b98p-1024L : inexact-ok
+= exp2 tonearest ldbl-96-m68k -0x3.feep+8L : 0x2.2e57078faa2f5b9cp-1024L : inexact-ok
+= exp2 towardzero ldbl-96-m68k -0x3.feep+8L : 0x2.2e57078faa2f5b98p-1024L : inexact-ok
+= exp2 upward ldbl-96-m68k -0x3.feep+8L : 0x2.2e57078faa2f5b9cp-1024L : inexact-ok
+= exp2 downward ldbl-128 -0x3.feep+8L : 0x2.2e57078faa2f5b9bef918a1d6294p-1024L : inexact-ok
+= exp2 tonearest ldbl-128 -0x3.feep+8L : 0x2.2e57078faa2f5b9bef918a1d6294p-1024L : inexact-ok
+= exp2 towardzero ldbl-128 -0x3.feep+8L : 0x2.2e57078faa2f5b9bef918a1d6294p-1024L : inexact-ok
+= exp2 upward ldbl-128 -0x3.feep+8L : 0x2.2e57078faa2f5b9bef918a1d6296p-1024L : inexact-ok
+= exp2 downward ldbl-128ibm -0x3.feep+8L : 0x2.2e57078faa2f4p-1024L : inexact-ok underflow errno-erange-ok
+= exp2 tonearest ldbl-128ibm -0x3.feep+8L : 0x2.2e57078faa2f4p-1024L : inexact-ok underflow errno-erange-ok
+= exp2 towardzero ldbl-128ibm -0x3.feep+8L : 0x2.2e57078faa2f4p-1024L : inexact-ok underflow errno-erange-ok
+= exp2 upward ldbl-128ibm -0x3.feep+8L : 0x2.2e57078faa2f8p-1024L : inexact-ok underflow errno-erange-ok
+exp2 -0x3.fe4e8p+8
+= exp2 downward flt-32 -0x3.fe4e8p+8f : 0x0p+0f : inexact-ok underflow errno-erange
+= exp2 tonearest flt-32 -0x3.fe4e8p+8f : 0x0p+0f : inexact-ok underflow errno-erange
+= exp2 towardzero flt-32 -0x3.fe4e8p+8f : 0x0p+0f : inexact-ok underflow errno-erange
+= exp2 upward flt-32 -0x3.fe4e8p+8f : 0x8p-152f : inexact-ok underflow errno-erange-ok
+= exp2 downward dbl-64 -0x3.fe4e8p+8 : 0x3.3bed4179f82bcp-1024 : inexact-ok underflow errno-erange-ok
+= exp2 tonearest dbl-64 -0x3.fe4e8p+8 : 0x3.3bed4179f82bcp-1024 : inexact-ok underflow errno-erange-ok
+= exp2 towardzero dbl-64 -0x3.fe4e8p+8 : 0x3.3bed4179f82bcp-1024 : inexact-ok underflow errno-erange-ok
+= exp2 upward dbl-64 -0x3.fe4e8p+8 : 0x3.3bed4179f82cp-1024 : inexact-ok underflow errno-erange-ok
+= exp2 downward ldbl-96-intel -0x3.fe4e8p+8L : 0x3.3bed4179f82bcp-1024L : inexact-ok
+= exp2 tonearest ldbl-96-intel -0x3.fe4e8p+8L : 0x3.3bed4179f82bc004p-1024L : inexact-ok
+= exp2 towardzero ldbl-96-intel -0x3.fe4e8p+8L : 0x3.3bed4179f82bcp-1024L : inexact-ok
+= exp2 upward ldbl-96-intel -0x3.fe4e8p+8L : 0x3.3bed4179f82bc004p-1024L : inexact-ok
+= exp2 downward ldbl-96-m68k -0x3.fe4e8p+8L : 0x3.3bed4179f82bcp-1024L : inexact-ok
+= exp2 tonearest ldbl-96-m68k -0x3.fe4e8p+8L : 0x3.3bed4179f82bc004p-1024L : inexact-ok
+= exp2 towardzero ldbl-96-m68k -0x3.fe4e8p+8L : 0x3.3bed4179f82bcp-1024L : inexact-ok
+= exp2 upward ldbl-96-m68k -0x3.fe4e8p+8L : 0x3.3bed4179f82bc004p-1024L : inexact-ok
+= exp2 downward ldbl-128 -0x3.fe4e8p+8L : 0x3.3bed4179f82bc002979648b91cf8p-1024L : inexact-ok
+= exp2 tonearest ldbl-128 -0x3.fe4e8p+8L : 0x3.3bed4179f82bc002979648b91cfap-1024L : inexact-ok
+= exp2 towardzero ldbl-128 -0x3.fe4e8p+8L : 0x3.3bed4179f82bc002979648b91cf8p-1024L : inexact-ok
+= exp2 upward ldbl-128 -0x3.fe4e8p+8L : 0x3.3bed4179f82bc002979648b91cfap-1024L : inexact-ok
+= exp2 downward ldbl-128ibm -0x3.fe4e8p+8L : 0x3.3bed4179f82bcp-1024L : inexact-ok underflow errno-erange-ok
+= exp2 tonearest ldbl-128ibm -0x3.fe4e8p+8L : 0x3.3bed4179f82bcp-1024L : inexact-ok underflow errno-erange-ok
+= exp2 towardzero ldbl-128ibm -0x3.fe4e8p+8L : 0x3.3bed4179f82bcp-1024L : inexact-ok underflow errno-erange-ok
+= exp2 upward ldbl-128ibm -0x3.fe4e8p+8L : 0x3.3bed4179f82cp-1024L : inexact-ok underflow errno-erange-ok
+exp2 -0x3.fe513p+8
+= exp2 downward flt-32 -0x3.fe513p+8f : 0x0p+0f : inexact-ok underflow errno-erange
+= exp2 tonearest flt-32 -0x3.fe513p+8f : 0x0p+0f : inexact-ok underflow errno-erange
+= exp2 towardzero flt-32 -0x3.fe513p+8f : 0x0p+0f : inexact-ok underflow errno-erange
+= exp2 upward flt-32 -0x3.fe513p+8f : 0x8p-152f : inexact-ok underflow errno-erange-ok
+= exp2 downward dbl-64 -0x3.fe513p+8 : 0x3.35ec906f22fb8p-1024 : inexact-ok underflow errno-erange-ok
+= exp2 tonearest dbl-64 -0x3.fe513p+8 : 0x3.35ec906f22fbcp-1024 : inexact-ok underflow errno-erange-ok
+= exp2 towardzero dbl-64 -0x3.fe513p+8 : 0x3.35ec906f22fb8p-1024 : inexact-ok underflow errno-erange-ok
+= exp2 upward dbl-64 -0x3.fe513p+8 : 0x3.35ec906f22fbcp-1024 : inexact-ok underflow errno-erange-ok
+= exp2 downward ldbl-96-intel -0x3.fe513p+8L : 0x3.35ec906f22fbbffcp-1024L : inexact-ok
+= exp2 tonearest ldbl-96-intel -0x3.fe513p+8L : 0x3.35ec906f22fbcp-1024L : inexact-ok
+= exp2 towardzero ldbl-96-intel -0x3.fe513p+8L : 0x3.35ec906f22fbbffcp-1024L : inexact-ok
+= exp2 upward ldbl-96-intel -0x3.fe513p+8L : 0x3.35ec906f22fbcp-1024L : inexact-ok
+= exp2 downward ldbl-96-m68k -0x3.fe513p+8L : 0x3.35ec906f22fbbffcp-1024L : inexact-ok
+= exp2 tonearest ldbl-96-m68k -0x3.fe513p+8L : 0x3.35ec906f22fbcp-1024L : inexact-ok
+= exp2 towardzero ldbl-96-m68k -0x3.fe513p+8L : 0x3.35ec906f22fbbffcp-1024L : inexact-ok
+= exp2 upward ldbl-96-m68k -0x3.fe513p+8L : 0x3.35ec906f22fbcp-1024L : inexact-ok
+= exp2 downward ldbl-128 -0x3.fe513p+8L : 0x3.35ec906f22fbbffeffc0d272938p-1024L : inexact-ok
+= exp2 tonearest ldbl-128 -0x3.fe513p+8L : 0x3.35ec906f22fbbffeffc0d272938p-1024L : inexact-ok
+= exp2 towardzero ldbl-128 -0x3.fe513p+8L : 0x3.35ec906f22fbbffeffc0d272938p-1024L : inexact-ok
+= exp2 upward ldbl-128 -0x3.fe513p+8L : 0x3.35ec906f22fbbffeffc0d2729382p-1024L : inexact-ok
+= exp2 downward ldbl-128ibm -0x3.fe513p+8L : 0x3.35ec906f22fb8p-1024L : inexact-ok underflow errno-erange-ok
+= exp2 tonearest ldbl-128ibm -0x3.fe513p+8L : 0x3.35ec906f22fbcp-1024L : inexact-ok underflow errno-erange-ok
+= exp2 towardzero ldbl-128ibm -0x3.fe513p+8L : 0x3.35ec906f22fb8p-1024L : inexact-ok underflow errno-erange-ok
+= exp2 upward ldbl-128ibm -0x3.fe513p+8L : 0x3.35ec906f22fbcp-1024L : inexact-ok underflow errno-erange-ok
+exp2 -16382.125
+= exp2 downward flt-32 -0x3.ffe2p+12f : 0x0p+0f : inexact-ok underflow errno-erange
+= exp2 tonearest flt-32 -0x3.ffe2p+12f : 0x0p+0f : inexact-ok underflow errno-erange
+= exp2 towardzero flt-32 -0x3.ffe2p+12f : 0x0p+0f : inexact-ok underflow errno-erange
+= exp2 upward flt-32 -0x3.ffe2p+12f : 0x8p-152f : inexact-ok underflow errno-erange-ok
+= exp2 downward dbl-64 -0x3.ffe2p+12 : 0x0p+0 : inexact-ok underflow errno-erange
+= exp2 tonearest dbl-64 -0x3.ffe2p+12 : 0x0p+0 : inexact-ok underflow errno-erange
+= exp2 towardzero dbl-64 -0x3.ffe2p+12 : 0x0p+0 : inexact-ok underflow errno-erange
+= exp2 upward dbl-64 -0x3.ffe2p+12 : 0x4p-1076 : inexact-ok underflow errno-erange-ok
+= exp2 downward ldbl-96-intel -0x3.ffe2p+12L : 0x3.ab031b9f7490e4b8p-16384L : inexact-ok underflow errno-erange-ok
+= exp2 tonearest ldbl-96-intel -0x3.ffe2p+12L : 0x3.ab031b9f7490e4b8p-16384L : inexact-ok underflow errno-erange-ok
+= exp2 towardzero ldbl-96-intel -0x3.ffe2p+12L : 0x3.ab031b9f7490e4b8p-16384L : inexact-ok underflow errno-erange-ok
+= exp2 upward ldbl-96-intel -0x3.ffe2p+12L : 0x3.ab031b9f7490e4cp-16384L : inexact-ok underflow errno-erange-ok
+= exp2 downward ldbl-96-m68k -0x3.ffe2p+12L : 0x3.ab031b9f7490e4b8p-16384L : inexact-ok
+= exp2 tonearest ldbl-96-m68k -0x3.ffe2p+12L : 0x3.ab031b9f7490e4bcp-16384L : inexact-ok
+= exp2 towardzero ldbl-96-m68k -0x3.ffe2p+12L : 0x3.ab031b9f7490e4b8p-16384L : inexact-ok
+= exp2 upward ldbl-96-m68k -0x3.ffe2p+12L : 0x3.ab031b9f7490e4bcp-16384L : inexact-ok
+= exp2 downward ldbl-128 -0x3.ffe2p+12L : 0x3.ab031b9f7490e4bb40b5d6cdc1b8p-16384L : inexact-ok underflow errno-erange-ok
+= exp2 tonearest ldbl-128 -0x3.ffe2p+12L : 0x3.ab031b9f7490e4bb40b5d6cdc1b8p-16384L : inexact-ok underflow errno-erange-ok
+= exp2 towardzero ldbl-128 -0x3.ffe2p+12L : 0x3.ab031b9f7490e4bb40b5d6cdc1b8p-16384L : inexact-ok underflow errno-erange-ok
+= exp2 upward ldbl-128 -0x3.ffe2p+12L : 0x3.ab031b9f7490e4bb40b5d6cdc1bcp-16384L : inexact-ok underflow errno-erange-ok
+= exp2 downward ldbl-128ibm -0x3.ffe2p+12L : 0x0p+0L : inexact-ok underflow errno-erange
+= exp2 tonearest ldbl-128ibm -0x3.ffe2p+12L : 0x0p+0L : inexact-ok underflow errno-erange
+= exp2 towardzero ldbl-128ibm -0x3.ffe2p+12L : 0x0p+0L : inexact-ok underflow errno-erange
+= exp2 upward ldbl-128ibm -0x3.ffe2p+12L : 0x4p-1076L : inexact-ok underflow errno-erange-ok
+exp2 -16382.25
+= exp2 downward flt-32 -0x3.ffe4p+12f : 0x0p+0f : inexact-ok underflow errno-erange
+= exp2 tonearest flt-32 -0x3.ffe4p+12f : 0x0p+0f : inexact-ok underflow errno-erange
+= exp2 towardzero flt-32 -0x3.ffe4p+12f : 0x0p+0f : inexact-ok underflow errno-erange
+= exp2 upward flt-32 -0x3.ffe4p+12f : 0x8p-152f : inexact-ok underflow errno-erange-ok
+= exp2 downward dbl-64 -0x3.ffe4p+12 : 0x0p+0 : inexact-ok underflow errno-erange
+= exp2 tonearest dbl-64 -0x3.ffe4p+12 : 0x0p+0 : inexact-ok underflow errno-erange
+= exp2 towardzero dbl-64 -0x3.ffe4p+12 : 0x0p+0 : inexact-ok underflow errno-erange
+= exp2 upward dbl-64 -0x3.ffe4p+12 : 0x4p-1076 : inexact-ok underflow errno-erange-ok
+= exp2 downward ldbl-96-intel -0x3.ffe4p+12L : 0x3.5d13f32b5a75abdp-16384L : inexact-ok underflow errno-erange-ok
+= exp2 tonearest ldbl-96-intel -0x3.ffe4p+12L : 0x3.5d13f32b5a75abdp-16384L : inexact-ok underflow errno-erange-ok
+= exp2 towardzero ldbl-96-intel -0x3.ffe4p+12L : 0x3.5d13f32b5a75abdp-16384L : inexact-ok underflow errno-erange-ok
+= exp2 upward ldbl-96-intel -0x3.ffe4p+12L : 0x3.5d13f32b5a75abd8p-16384L : inexact-ok underflow errno-erange-ok
+= exp2 downward ldbl-96-m68k -0x3.ffe4p+12L : 0x3.5d13f32b5a75abdp-16384L : inexact-ok
+= exp2 tonearest ldbl-96-m68k -0x3.ffe4p+12L : 0x3.5d13f32b5a75abdp-16384L : inexact-ok
+= exp2 towardzero ldbl-96-m68k -0x3.ffe4p+12L : 0x3.5d13f32b5a75abdp-16384L : inexact-ok
+= exp2 upward ldbl-96-m68k -0x3.ffe4p+12L : 0x3.5d13f32b5a75abd4p-16384L : inexact-ok
+= exp2 downward ldbl-128 -0x3.ffe4p+12L : 0x3.5d13f32b5a75abd0e69a2ee640b4p-16384L : inexact-ok underflow errno-erange-ok
+= exp2 tonearest ldbl-128 -0x3.ffe4p+12L : 0x3.5d13f32b5a75abd0e69a2ee640b4p-16384L : inexact-ok underflow errno-erange-ok
+= exp2 towardzero ldbl-128 -0x3.ffe4p+12L : 0x3.5d13f32b5a75abd0e69a2ee640b4p-16384L : inexact-ok underflow errno-erange-ok
+= exp2 upward ldbl-128 -0x3.ffe4p+12L : 0x3.5d13f32b5a75abd0e69a2ee640b8p-16384L : inexact-ok underflow errno-erange-ok
+= exp2 downward ldbl-128ibm -0x3.ffe4p+12L : 0x0p+0L : inexact-ok underflow errno-erange
+= exp2 tonearest ldbl-128ibm -0x3.ffe4p+12L : 0x0p+0L : inexact-ok underflow errno-erange
+= exp2 towardzero ldbl-128ibm -0x3.ffe4p+12L : 0x0p+0L : inexact-ok underflow errno-erange
+= exp2 upward ldbl-128ibm -0x3.ffe4p+12L : 0x4p-1076L : inexact-ok underflow errno-erange-ok
+exp2 -16382.375
+= exp2 downward flt-32 -0x3.ffe6p+12f : 0x0p+0f : inexact-ok underflow errno-erange
+= exp2 tonearest flt-32 -0x3.ffe6p+12f : 0x0p+0f : inexact-ok underflow errno-erange
+= exp2 towardzero flt-32 -0x3.ffe6p+12f : 0x0p+0f : inexact-ok underflow errno-erange
+= exp2 upward flt-32 -0x3.ffe6p+12f : 0x8p-152f : inexact-ok underflow errno-erange-ok
+= exp2 downward dbl-64 -0x3.ffe6p+12 : 0x0p+0 : inexact-ok underflow errno-erange
+= exp2 tonearest dbl-64 -0x3.ffe6p+12 : 0x0p+0 : inexact-ok underflow errno-erange
+= exp2 towardzero dbl-64 -0x3.ffe6p+12 : 0x0p+0 : inexact-ok underflow errno-erange
+= exp2 upward dbl-64 -0x3.ffe6p+12 : 0x4p-1076 : inexact-ok underflow errno-erange-ok
+= exp2 downward ldbl-96-intel -0x3.ffe6p+12L : 0x3.159ca845541b6b7p-16384L : inexact-ok underflow errno-erange-ok
+= exp2 tonearest ldbl-96-intel -0x3.ffe6p+12L : 0x3.159ca845541b6b78p-16384L : inexact-ok underflow errno-erange-ok
+= exp2 towardzero ldbl-96-intel -0x3.ffe6p+12L : 0x3.159ca845541b6b7p-16384L : inexact-ok underflow errno-erange-ok
+= exp2 upward ldbl-96-intel -0x3.ffe6p+12L : 0x3.159ca845541b6b78p-16384L : inexact-ok underflow errno-erange-ok
+= exp2 downward ldbl-96-m68k -0x3.ffe6p+12L : 0x3.159ca845541b6b74p-16384L : inexact-ok
+= exp2 tonearest ldbl-96-m68k -0x3.ffe6p+12L : 0x3.159ca845541b6b74p-16384L : inexact-ok
+= exp2 towardzero ldbl-96-m68k -0x3.ffe6p+12L : 0x3.159ca845541b6b74p-16384L : inexact-ok
+= exp2 upward ldbl-96-m68k -0x3.ffe6p+12L : 0x3.159ca845541b6b78p-16384L : inexact-ok
+= exp2 downward ldbl-128 -0x3.ffe6p+12L : 0x3.159ca845541b6b74f8ab43259374p-16384L : inexact-ok underflow errno-erange-ok
+= exp2 tonearest ldbl-128 -0x3.ffe6p+12L : 0x3.159ca845541b6b74f8ab43259378p-16384L : inexact-ok underflow errno-erange-ok
+= exp2 towardzero ldbl-128 -0x3.ffe6p+12L : 0x3.159ca845541b6b74f8ab43259374p-16384L : inexact-ok underflow errno-erange-ok
+= exp2 upward ldbl-128 -0x3.ffe6p+12L : 0x3.159ca845541b6b74f8ab43259378p-16384L : inexact-ok underflow errno-erange-ok
+= exp2 downward ldbl-128ibm -0x3.ffe6p+12L : 0x0p+0L : inexact-ok underflow errno-erange
+= exp2 tonearest ldbl-128ibm -0x3.ffe6p+12L : 0x0p+0L : inexact-ok underflow errno-erange
+= exp2 towardzero ldbl-128ibm -0x3.ffe6p+12L : 0x0p+0L : inexact-ok underflow errno-erange
+= exp2 upward ldbl-128ibm -0x3.ffe6p+12L : 0x4p-1076L : inexact-ok underflow errno-erange-ok
+exp2 -16382.5
+= exp2 downward flt-32 -0x3.ffe8p+12f : 0x0p+0f : inexact-ok underflow errno-erange
+= exp2 tonearest flt-32 -0x3.ffe8p+12f : 0x0p+0f : inexact-ok underflow errno-erange
+= exp2 towardzero flt-32 -0x3.ffe8p+12f : 0x0p+0f : inexact-ok underflow errno-erange
+= exp2 upward flt-32 -0x3.ffe8p+12f : 0x8p-152f : inexact-ok underflow errno-erange-ok
+= exp2 downward dbl-64 -0x3.ffe8p+12 : 0x0p+0 : inexact-ok underflow errno-erange
+= exp2 tonearest dbl-64 -0x3.ffe8p+12 : 0x0p+0 : inexact-ok underflow errno-erange
+= exp2 towardzero dbl-64 -0x3.ffe8p+12 : 0x0p+0 : inexact-ok underflow errno-erange
+= exp2 upward dbl-64 -0x3.ffe8p+12 : 0x4p-1076 : inexact-ok underflow errno-erange-ok
+= exp2 downward ldbl-96-intel -0x3.ffe8p+12L : 0x2.d413cccfe779921p-16384L : inexact-ok underflow errno-erange-ok
+= exp2 tonearest ldbl-96-intel -0x3.ffe8p+12L : 0x2.d413cccfe779921p-16384L : inexact-ok underflow errno-erange-ok
+= exp2 towardzero ldbl-96-intel -0x3.ffe8p+12L : 0x2.d413cccfe779921p-16384L : inexact-ok underflow errno-erange-ok
+= exp2 upward ldbl-96-intel -0x3.ffe8p+12L : 0x2.d413cccfe7799218p-16384L : inexact-ok underflow errno-erange-ok
+= exp2 downward ldbl-96-m68k -0x3.ffe8p+12L : 0x2.d413cccfe779921p-16384L : inexact-ok
+= exp2 tonearest ldbl-96-m68k -0x3.ffe8p+12L : 0x2.d413cccfe779921p-16384L : inexact-ok
+= exp2 towardzero ldbl-96-m68k -0x3.ffe8p+12L : 0x2.d413cccfe779921p-16384L : inexact-ok
+= exp2 upward ldbl-96-m68k -0x3.ffe8p+12L : 0x2.d413cccfe7799214p-16384L : inexact-ok
+= exp2 downward ldbl-128 -0x3.ffe8p+12L : 0x2.d413cccfe779921165f626cdd528p-16384L : inexact-ok underflow errno-erange-ok
+= exp2 tonearest ldbl-128 -0x3.ffe8p+12L : 0x2.d413cccfe779921165f626cdd52cp-16384L : inexact-ok underflow errno-erange-ok
+= exp2 towardzero ldbl-128 -0x3.ffe8p+12L : 0x2.d413cccfe779921165f626cdd528p-16384L : inexact-ok underflow errno-erange-ok
+= exp2 upward ldbl-128 -0x3.ffe8p+12L : 0x2.d413cccfe779921165f626cdd52cp-16384L : inexact-ok underflow errno-erange-ok
+= exp2 downward ldbl-128ibm -0x3.ffe8p+12L : 0x0p+0L : inexact-ok underflow errno-erange
+= exp2 tonearest ldbl-128ibm -0x3.ffe8p+12L : 0x0p+0L : inexact-ok underflow errno-erange
+= exp2 towardzero ldbl-128ibm -0x3.ffe8p+12L : 0x0p+0L : inexact-ok underflow errno-erange
+= exp2 upward ldbl-128ibm -0x3.ffe8p+12L : 0x4p-1076L : inexact-ok underflow errno-erange-ok
+exp2 -16382.625
+= exp2 downward flt-32 -0x3.ffeap+12f : 0x0p+0f : inexact-ok underflow errno-erange
+= exp2 tonearest flt-32 -0x3.ffeap+12f : 0x0p+0f : inexact-ok underflow errno-erange
+= exp2 towardzero flt-32 -0x3.ffeap+12f : 0x0p+0f : inexact-ok underflow errno-erange
+= exp2 upward flt-32 -0x3.ffeap+12f : 0x8p-152f : inexact-ok underflow errno-erange-ok
+= exp2 downward dbl-64 -0x3.ffeap+12 : 0x0p+0 : inexact-ok underflow errno-erange
+= exp2 tonearest dbl-64 -0x3.ffeap+12 : 0x0p+0 : inexact-ok underflow errno-erange
+= exp2 towardzero dbl-64 -0x3.ffeap+12 : 0x0p+0 : inexact-ok underflow errno-erange
+= exp2 upward dbl-64 -0x3.ffeap+12 : 0x4p-1076 : inexact-ok underflow errno-erange-ok
+= exp2 downward ldbl-96-intel -0x3.ffeap+12L : 0x2.97fb5aa6c544e3a8p-16384L : inexact-ok underflow errno-erange-ok
+= exp2 tonearest ldbl-96-intel -0x3.ffeap+12L : 0x2.97fb5aa6c544e3a8p-16384L : inexact-ok underflow errno-erange-ok
+= exp2 towardzero ldbl-96-intel -0x3.ffeap+12L : 0x2.97fb5aa6c544e3a8p-16384L : inexact-ok underflow errno-erange-ok
+= exp2 upward ldbl-96-intel -0x3.ffeap+12L : 0x2.97fb5aa6c544e3bp-16384L : inexact-ok underflow errno-erange-ok
+= exp2 downward ldbl-96-m68k -0x3.ffeap+12L : 0x2.97fb5aa6c544e3a8p-16384L : inexact-ok
+= exp2 tonearest ldbl-96-m68k -0x3.ffeap+12L : 0x2.97fb5aa6c544e3a8p-16384L : inexact-ok
+= exp2 towardzero ldbl-96-m68k -0x3.ffeap+12L : 0x2.97fb5aa6c544e3a8p-16384L : inexact-ok
+= exp2 upward ldbl-96-m68k -0x3.ffeap+12L : 0x2.97fb5aa6c544e3acp-16384L : inexact-ok
+= exp2 downward ldbl-128 -0x3.ffeap+12L : 0x2.97fb5aa6c544e3a872f5fd885c4p-16384L : inexact-ok underflow errno-erange-ok
+= exp2 tonearest ldbl-128 -0x3.ffeap+12L : 0x2.97fb5aa6c544e3a872f5fd885c4p-16384L : inexact-ok underflow errno-erange-ok
+= exp2 towardzero ldbl-128 -0x3.ffeap+12L : 0x2.97fb5aa6c544e3a872f5fd885c4p-16384L : inexact-ok underflow errno-erange-ok
+= exp2 upward ldbl-128 -0x3.ffeap+12L : 0x2.97fb5aa6c544e3a872f5fd885c44p-16384L : inexact-ok underflow errno-erange-ok
+= exp2 downward ldbl-128ibm -0x3.ffeap+12L : 0x0p+0L : inexact-ok underflow errno-erange
+= exp2 tonearest ldbl-128ibm -0x3.ffeap+12L : 0x0p+0L : inexact-ok underflow errno-erange
+= exp2 towardzero ldbl-128ibm -0x3.ffeap+12L : 0x0p+0L : inexact-ok underflow errno-erange
+= exp2 upward ldbl-128ibm -0x3.ffeap+12L : 0x4p-1076L : inexact-ok underflow errno-erange-ok
+exp2 -16382.75
+= exp2 downward flt-32 -0x3.ffecp+12f : 0x0p+0f : inexact-ok underflow errno-erange
+= exp2 tonearest flt-32 -0x3.ffecp+12f : 0x0p+0f : inexact-ok underflow errno-erange
+= exp2 towardzero flt-32 -0x3.ffecp+12f : 0x0p+0f : inexact-ok underflow errno-erange
+= exp2 upward flt-32 -0x3.ffecp+12f : 0x8p-152f : inexact-ok underflow errno-erange-ok
+= exp2 downward dbl-64 -0x3.ffecp+12 : 0x0p+0 : inexact-ok underflow errno-erange
+= exp2 tonearest dbl-64 -0x3.ffecp+12 : 0x0p+0 : inexact-ok underflow errno-erange
+= exp2 towardzero dbl-64 -0x3.ffecp+12 : 0x0p+0 : inexact-ok underflow errno-erange
+= exp2 upward dbl-64 -0x3.ffecp+12 : 0x4p-1076 : inexact-ok underflow errno-erange-ok
+= exp2 downward ldbl-96-intel -0x3.ffecp+12L : 0x2.60dfc14636e2a5b8p-16384L : inexact-ok underflow errno-erange-ok
+= exp2 tonearest ldbl-96-intel -0x3.ffecp+12L : 0x2.60dfc14636e2a5cp-16384L : inexact-ok underflow errno-erange-ok
+= exp2 towardzero ldbl-96-intel -0x3.ffecp+12L : 0x2.60dfc14636e2a5b8p-16384L : inexact-ok underflow errno-erange-ok
+= exp2 upward ldbl-96-intel -0x3.ffecp+12L : 0x2.60dfc14636e2a5cp-16384L : inexact-ok underflow errno-erange-ok
+= exp2 downward ldbl-96-m68k -0x3.ffecp+12L : 0x2.60dfc14636e2a5bcp-16384L : inexact-ok
+= exp2 tonearest ldbl-96-m68k -0x3.ffecp+12L : 0x2.60dfc14636e2a5bcp-16384L : inexact-ok
+= exp2 towardzero ldbl-96-m68k -0x3.ffecp+12L : 0x2.60dfc14636e2a5bcp-16384L : inexact-ok
+= exp2 upward ldbl-96-m68k -0x3.ffecp+12L : 0x2.60dfc14636e2a5cp-16384L : inexact-ok
+= exp2 downward ldbl-128 -0x3.ffecp+12L : 0x2.60dfc14636e2a5bd1ab48c60b908p-16384L : inexact-ok underflow errno-erange-ok
+= exp2 tonearest ldbl-128 -0x3.ffecp+12L : 0x2.60dfc14636e2a5bd1ab48c60b90cp-16384L : inexact-ok underflow errno-erange-ok
+= exp2 towardzero ldbl-128 -0x3.ffecp+12L : 0x2.60dfc14636e2a5bd1ab48c60b908p-16384L : inexact-ok underflow errno-erange-ok
+= exp2 upward ldbl-128 -0x3.ffecp+12L : 0x2.60dfc14636e2a5bd1ab48c60b90cp-16384L : inexact-ok underflow errno-erange-ok
+= exp2 downward ldbl-128ibm -0x3.ffecp+12L : 0x0p+0L : inexact-ok underflow errno-erange
+= exp2 tonearest ldbl-128ibm -0x3.ffecp+12L : 0x0p+0L : inexact-ok underflow errno-erange
+= exp2 towardzero ldbl-128ibm -0x3.ffecp+12L : 0x0p+0L : inexact-ok underflow errno-erange
+= exp2 upward ldbl-128ibm -0x3.ffecp+12L : 0x4p-1076L : inexact-ok underflow errno-erange-ok
+exp2 -16382.875
+= exp2 downward flt-32 -0x3.ffeep+12f : 0x0p+0f : inexact-ok underflow errno-erange
+= exp2 tonearest flt-32 -0x3.ffeep+12f : 0x0p+0f : inexact-ok underflow errno-erange
+= exp2 towardzero flt-32 -0x3.ffeep+12f : 0x0p+0f : inexact-ok underflow errno-erange
+= exp2 upward flt-32 -0x3.ffeep+12f : 0x8p-152f : inexact-ok underflow errno-erange-ok
+= exp2 downward dbl-64 -0x3.ffeep+12 : 0x0p+0 : inexact-ok underflow errno-erange
+= exp2 tonearest dbl-64 -0x3.ffeep+12 : 0x0p+0 : inexact-ok underflow errno-erange
+= exp2 towardzero dbl-64 -0x3.ffeep+12 : 0x0p+0 : inexact-ok underflow errno-erange
+= exp2 upward dbl-64 -0x3.ffeep+12 : 0x4p-1076 : inexact-ok underflow errno-erange-ok
+= exp2 downward ldbl-96-intel -0x3.ffeep+12L : 0x2.2e57078faa2f5b98p-16384L : inexact-ok underflow errno-erange-ok
+= exp2 tonearest ldbl-96-intel -0x3.ffeep+12L : 0x2.2e57078faa2f5b98p-16384L : inexact-ok underflow errno-erange-ok
+= exp2 towardzero ldbl-96-intel -0x3.ffeep+12L : 0x2.2e57078faa2f5b98p-16384L : inexact-ok underflow errno-erange-ok
+= exp2 upward ldbl-96-intel -0x3.ffeep+12L : 0x2.2e57078faa2f5bap-16384L : inexact-ok underflow errno-erange-ok
+= exp2 downward ldbl-96-m68k -0x3.ffeep+12L : 0x2.2e57078faa2f5b98p-16384L : inexact-ok
+= exp2 tonearest ldbl-96-m68k -0x3.ffeep+12L : 0x2.2e57078faa2f5b9cp-16384L : inexact-ok
+= exp2 towardzero ldbl-96-m68k -0x3.ffeep+12L : 0x2.2e57078faa2f5b98p-16384L : inexact-ok
+= exp2 upward ldbl-96-m68k -0x3.ffeep+12L : 0x2.2e57078faa2f5b9cp-16384L : inexact-ok
+= exp2 downward ldbl-128 -0x3.ffeep+12L : 0x2.2e57078faa2f5b9bef918a1d6294p-16384L : inexact-ok underflow errno-erange-ok
+= exp2 tonearest ldbl-128 -0x3.ffeep+12L : 0x2.2e57078faa2f5b9bef918a1d6294p-16384L : inexact-ok underflow errno-erange-ok
+= exp2 towardzero ldbl-128 -0x3.ffeep+12L : 0x2.2e57078faa2f5b9bef918a1d6294p-16384L : inexact-ok underflow errno-erange-ok
+= exp2 upward ldbl-128 -0x3.ffeep+12L : 0x2.2e57078faa2f5b9bef918a1d6298p-16384L : inexact-ok underflow errno-erange-ok
+= exp2 downward ldbl-128ibm -0x3.ffeep+12L : 0x0p+0L : inexact-ok underflow errno-erange
+= exp2 tonearest ldbl-128ibm -0x3.ffeep+12L : 0x0p+0L : inexact-ok underflow errno-erange
+= exp2 towardzero ldbl-128ibm -0x3.ffeep+12L : 0x0p+0L : inexact-ok underflow errno-erange
+= exp2 upward ldbl-128ibm -0x3.ffeep+12L : 0x4p-1076L : inexact-ok underflow errno-erange-ok
exp2 0x1p-10
= exp2 downward flt-32 0x4p-12f : 0x1.002c6p+0f : inexact-ok
= exp2 tonearest flt-32 0x4p-12f : 0x1.002c6p+0f : inexact-ok
diff --git a/math/e_exp2l.c b/math/e_exp2l.c
index 8db34ada53..b8cd158b88 100644
--- a/math/e_exp2l.c
+++ b/math/e_exp2l.c
@@ -38,9 +38,17 @@ __ieee754_exp2l (long double x)
{
int intx = (int) x;
long double fractx = x - intx;
+ long double result;
if (fabsl (fractx) < LDBL_EPSILON / 4.0L)
- return __scalbnl (1.0L + fractx, intx);
- return __scalbnl (__ieee754_expl (M_LN2l * fractx), intx);
+ result = __scalbnl (1.0L + fractx, intx);
+ else
+ result = __scalbnl (__ieee754_expl (M_LN2l * fractx), intx);
+ if (result < LDBL_MIN)
+ {
+ long double force_underflow = result * result;
+ math_force_eval (force_underflow);
+ }
+ return result;
}
else
{
diff --git a/sysdeps/i386/fpu/e_exp2.S b/sysdeps/i386/fpu/e_exp2.S
index f802cf8b98..b75a63a0b3 100644
--- a/sysdeps/i386/fpu/e_exp2.S
+++ b/sysdeps/i386/fpu/e_exp2.S
@@ -6,7 +6,24 @@
#include <machine/asm.h>
+ .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(%ecx)
+#else
+# define MO(op) op
+#endif
+
+ .text
ENTRY(__ieee754_exp2)
+#ifdef PIC
+ LOAD_PIC_REG (cx)
+#endif
fldl 4(%esp)
/* I added the following ugly construct because exp(+-Inf) resulted
in NaN. The ugliness results from the bright minds at Intel.
@@ -27,7 +44,22 @@ ENTRY(__ieee754_exp2)
faddp /* 2^(fract(x)) */
fscale /* e^x */
fstp %st(1)
- ret
+ fldl MO(dbl_min)
+ fld %st(1)
+ fucompp
+ fnstsw
+ sahf
+ jnc 3f
+ subl $8, %esp
+ cfi_adjust_cfa_offset (8)
+ fld %st(0)
+ fmul %st(0)
+ fstpl (%esp)
+ fstpl (%esp)
+ fldl (%esp)
+ addl $8, %esp
+ cfi_adjust_cfa_offset (-8)
+3: ret
1: testl $0x200, %eax /* Test sign. */
jz 2f /* If positive, jump. */
diff --git a/sysdeps/i386/fpu/e_exp2f.S b/sysdeps/i386/fpu/e_exp2f.S
index f867d0d472..042c83b1ef 100644
--- a/sysdeps/i386/fpu/e_exp2f.S
+++ b/sysdeps/i386/fpu/e_exp2f.S
@@ -6,7 +6,24 @@
#include <machine/asm.h>
+ .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(%ecx)
+#else
+# define MO(op) op
+#endif
+
+ .text
ENTRY(__ieee754_exp2f)
+#ifdef PIC
+ LOAD_PIC_REG (cx)
+#endif
flds 4(%esp)
/* I added the following ugly construct because exp(+-Inf) resulted
in NaN. The ugliness results from the bright minds at Intel.
@@ -27,7 +44,22 @@ ENTRY(__ieee754_exp2f)
faddp /* 2^(fract(x)) */
fscale /* e^x */
fstp %st(1)
- ret
+ flds MO(flt_min)
+ fld %st(1)
+ fucompp
+ fnstsw
+ sahf
+ jnc 3f
+ subl $4, %esp
+ cfi_adjust_cfa_offset (4)
+ fld %st(0)
+ fmul %st(0)
+ fstps (%esp)
+ fstps (%esp)
+ flds (%esp)
+ addl $4, %esp
+ cfi_adjust_cfa_offset (-4)
+3: ret
1: testl $0x200, %eax /* Test sign. */
jz 2f /* If positive, jump. */
diff --git a/sysdeps/i386/fpu/e_exp2l.S b/sysdeps/i386/fpu/e_exp2l.S
index 2bf9a25727..9a5ff95a6c 100644
--- a/sysdeps/i386/fpu/e_exp2l.S
+++ b/sysdeps/i386/fpu/e_exp2l.S
@@ -6,7 +6,24 @@
#include <machine/asm.h>
+ .section .rodata.cst16,"aM",@progbits,16
+ .p2align 4
+ .type ldbl_min,@object
+ldbl_min: .byte 0, 0, 0, 0, 0, 0, 0, 0x80, 0x1, 0
+ .byte 0, 0, 0, 0, 0, 0
+ ASM_SIZE_DIRECTIVE(ldbl_min)
+
+#ifdef PIC
+# define MO(op) op##@GOTOFF(%ecx)
+#else
+# define MO(op) op
+#endif
+
+ .text
ENTRY(__ieee754_exp2l)
+#ifdef PIC
+ LOAD_PIC_REG (cx)
+#endif
fldt 4(%esp)
/* I added the following ugly construct because exp(+-Inf) resulted
in NaN. The ugliness results from the bright minds at Intel.
@@ -35,7 +52,17 @@ ENTRY(__ieee754_exp2l)
faddp /* 2^(fract(x)) */
fscale /* e^x */
fstp %st(1)
- ret
+ /* Ensure underflow for tiny result. */
+ fldt MO(ldbl_min)
+ fld %st(1)
+ fucompp
+ fnstsw
+ sahf
+ jnc 4f
+ fld %st
+ fmul %st
+ fstp %st
+4: ret
1: testl $0x200, %eax /* Test sign. */
jz 2f /* If positive, jump. */
diff --git a/sysdeps/ieee754/dbl-64/e_exp2.c b/sysdeps/ieee754/dbl-64/e_exp2.c
index 30f0a8f529..01df62150d 100644
--- a/sysdeps/ieee754/dbl-64/e_exp2.c
+++ b/sysdeps/ieee754/dbl-64/e_exp2.c
@@ -120,7 +120,15 @@ __ieee754_exp2 (double x)
if (!unsafe)
return result;
else
- return result * scale_u.d;
+ {
+ result *= scale_u.d;
+ if (result < DBL_MIN)
+ {
+ double force_underflow = result * result;
+ math_force_eval (force_underflow);
+ }
+ return result;
+ }
}
else
/* Return x, if x is a NaN or Inf; or overflow, otherwise. */
diff --git a/sysdeps/ieee754/flt-32/e_exp2f.c b/sysdeps/ieee754/flt-32/e_exp2f.c
index 0b75a7ea2a..bc62042966 100644
--- a/sysdeps/ieee754/flt-32/e_exp2f.c
+++ b/sysdeps/ieee754/flt-32/e_exp2f.c
@@ -109,7 +109,15 @@ __ieee754_exp2f (float x)
if (!unsafe)
return result;
else
- return result * scale_u.f;
+ {
+ result *= scale_u.f;
+ if (result < FLT_MIN)
+ {
+ float force_underflow = result * result;
+ math_force_eval (force_underflow);
+ }
+ return result;
+ }
}
/* Exceptional cases: */
else if (isless (x, himark))
diff --git a/sysdeps/x86_64/fpu/e_exp2l.S b/sysdeps/x86_64/fpu/e_exp2l.S
index 7d42a932db..d634ad38f8 100644
--- a/sysdeps/x86_64/fpu/e_exp2l.S
+++ b/sysdeps/x86_64/fpu/e_exp2l.S
@@ -7,6 +7,20 @@
#include <machine/asm.h>
+ .section .rodata.cst16,"aM",@progbits,16
+ .p2align 4
+ .type ldbl_min,@object
+ldbl_min: .byte 0, 0, 0, 0, 0, 0, 0, 0x80, 0x1, 0
+ .byte 0, 0, 0, 0, 0, 0
+ ASM_SIZE_DIRECTIVE(ldbl_min)
+
+#ifdef PIC
+# define MO(op) op##(%rip)
+#else
+# define MO(op) op
+#endif
+
+ .text
ENTRY(__ieee754_exp2l)
fldt 8(%rsp)
/* I added the following ugly construct because exp(+-Inf) resulted
@@ -36,7 +50,16 @@ ENTRY(__ieee754_exp2l)
faddp /* 2^(fract(x)) */
fscale /* e^x */
fstp %st(1)
- ret
+ /* Ensure underflow for tiny result. */
+ fldt MO(ldbl_min)
+ fld %st(1)
+ fucomip %st(1), %st
+ fstp %st
+ jnc 4f
+ fld %st
+ fmul %st
+ fstp %st
+4: ret
1: testl $0x200, %eax /* Test sign. */
jz 2f /* If positive, jump. */