aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2015-09-25 22:29:10 +0000
committerJoseph Myers <joseph@codesourcery.com>2015-09-25 22:29:10 +0000
commit6ace39382120dd0668b2168591611f71b04ac8f3 (patch)
tree2cee18351450bd4f9586f033cae63aa4d1ec8d4d
parent5a9af6376d43b58c6545feb86002812a57956654 (diff)
downloadglibc-6ace39382120dd0668b2168591611f71b04ac8f3.tar.xz
glibc-6ace39382120dd0668b2168591611f71b04ac8f3.zip
Fix pow missing underflows (bug 18825).
Similar to various other bugs in this area, pow functions can fail to raise the underflow exception when the result is tiny and inexact but one or more low bits of the intermediate result that is scaled down (or, in the i386 case, converted from a wider evaluation format) are zero. This patch forces the exception in a similar way to previous fixes, thereby concluding the fixes for known bugs with missing underflow exceptions currently filed in Bugzilla. Tested for x86_64, x86, mips64 and powerpc. [BZ #18825] * sysdeps/i386/fpu/i386-math-asm.h (FLT_NARROW_EVAL_UFLOW_NONNAN): New macro. (DBL_NARROW_EVAL_UFLOW_NONNAN): Likewise. (LDBL_CHECK_FORCE_UFLOW_NONNAN): Likewise. * sysdeps/i386/fpu/e_pow.S: Use DEFINE_DBL_MIN. (__ieee754_pow): Use DBL_NARROW_EVAL_UFLOW_NONNAN instead of DBL_NARROW_EVAL, reloading the PIC register as needed. * sysdeps/i386/fpu/e_powf.S: Use DEFINE_FLT_MIN. (__ieee754_powf): Use FLT_NARROW_EVAL_UFLOW_NONNAN instead of FLT_NARROW_EVAL. Use separate return path for case when first argument is NaN. * sysdeps/i386/fpu/e_powl.S: Include <i386-math-asm.h>. Use DEFINE_LDBL_MIN. (__ieee754_powl): Use LDBL_CHECK_FORCE_UFLOW_NONNAN, reloading the PIC register. * sysdeps/ieee754/dbl-64/e_pow.c (__ieee754_pow): Use math_check_force_underflow_nonneg. * sysdeps/ieee754/flt-32/e_powf.c (__ieee754_powf): Force underflow for subnormal result. * sysdeps/ieee754/ldbl-128/e_powl.c (__ieee754_powl): Likewise. * sysdeps/ieee754/ldbl-128ibm/e_powl.c (__ieee754_powl): Use math_check_force_underflow_nonneg. * sysdeps/x86/fpu/powl_helper.c (__powl_helper): Use math_check_force_underflow. * sysdeps/x86_64/fpu/x86_64-math-asm.h (LDBL_CHECK_FORCE_UFLOW_NONNAN): New macro. * sysdeps/x86_64/fpu/e_powl.S: Include <x86_64-math-asm.h>. Use DEFINE_LDBL_MIN. (__ieee754_powl): Use LDBL_CHECK_FORCE_UFLOW_NONNAN. * math/auto-libm-test-in: Add more tests of pow. * math/auto-libm-test-out: Regenerated.
-rw-r--r--ChangeLog35
-rw-r--r--NEWS6
-rw-r--r--math/auto-libm-test-in145
-rw-r--r--math/auto-libm-test-out3644
-rw-r--r--sysdeps/i386/fpu/e_pow.S8
-rw-r--r--sysdeps/i386/fpu/e_powf.S13
-rw-r--r--sysdeps/i386/fpu/e_powl.S6
-rw-r--r--sysdeps/i386/fpu/i386-math-asm.h46
-rw-r--r--sysdeps/ieee754/dbl-64/e_pow.c2
-rw-r--r--sysdeps/ieee754/flt-32/e_powf.c7
-rw-r--r--sysdeps/ieee754/ldbl-128/e_powl.c6
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/e_powl.c1
-rw-r--r--sysdeps/x86/fpu/powl_helper.c1
-rw-r--r--sysdeps/x86_64/fpu/e_powl.S3
-rw-r--r--sysdeps/x86_64/fpu/x86_64-math-asm.h13
15 files changed, 3926 insertions, 10 deletions
diff --git a/ChangeLog b/ChangeLog
index 7e8156e023..951b3f5a4f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,38 @@
+2015-09-25 Joseph Myers <joseph@codesourcery.com>
+
+ [BZ #18825]
+ * sysdeps/i386/fpu/i386-math-asm.h (FLT_NARROW_EVAL_UFLOW_NONNAN):
+ New macro.
+ (DBL_NARROW_EVAL_UFLOW_NONNAN): Likewise.
+ (LDBL_CHECK_FORCE_UFLOW_NONNAN): Likewise.
+ * sysdeps/i386/fpu/e_pow.S: Use DEFINE_DBL_MIN.
+ (__ieee754_pow): Use DBL_NARROW_EVAL_UFLOW_NONNAN instead of
+ DBL_NARROW_EVAL, reloading the PIC register as needed.
+ * sysdeps/i386/fpu/e_powf.S: Use DEFINE_FLT_MIN.
+ (__ieee754_powf): Use FLT_NARROW_EVAL_UFLOW_NONNAN instead of
+ FLT_NARROW_EVAL. Use separate return path for case when first
+ argument is NaN.
+ * sysdeps/i386/fpu/e_powl.S: Include <i386-math-asm.h>. Use
+ DEFINE_LDBL_MIN.
+ (__ieee754_powl): Use LDBL_CHECK_FORCE_UFLOW_NONNAN, reloading the
+ PIC register.
+ * sysdeps/ieee754/dbl-64/e_pow.c (__ieee754_pow): Use
+ math_check_force_underflow_nonneg.
+ * sysdeps/ieee754/flt-32/e_powf.c (__ieee754_powf): Force
+ underflow for subnormal result.
+ * sysdeps/ieee754/ldbl-128/e_powl.c (__ieee754_powl): Likewise.
+ * sysdeps/ieee754/ldbl-128ibm/e_powl.c (__ieee754_powl): Use
+ math_check_force_underflow_nonneg.
+ * sysdeps/x86/fpu/powl_helper.c (__powl_helper): Use
+ math_check_force_underflow.
+ * sysdeps/x86_64/fpu/x86_64-math-asm.h
+ (LDBL_CHECK_FORCE_UFLOW_NONNAN): New macro.
+ * sysdeps/x86_64/fpu/e_powl.S: Include <x86_64-math-asm.h>. Use
+ DEFINE_LDBL_MIN.
+ (__ieee754_powl): Use LDBL_CHECK_FORCE_UFLOW_NONNAN.
+ * math/auto-libm-test-in: Add more tests of pow.
+ * math/auto-libm-test-out: Regenerated.
+
2015-09-25 Florian Weimer <fweimer@redhat.com>
* nss/bug17079.c (init_test_items): Add diagnostic for
diff --git a/NEWS b/NEWS
index 6f544095a4..168e641120 100644
--- a/NEWS
+++ b/NEWS
@@ -14,9 +14,9 @@ Version 2.23
16985, 17118, 17243, 17244, 17250, 17441, 17787, 17886, 17887, 17905,
18084, 18086, 18240, 18265, 18370, 18421, 18480, 18525, 18595, 18610,
18618, 18647, 18661, 18674, 18675, 18681, 18757, 18778, 18781, 18787,
- 18789, 18790, 18795, 18796, 18803, 18820, 18823, 18824, 18857, 18863,
- 18870, 18872, 18873, 18875, 18887, 18921, 18951, 18952, 18961, 18966,
- 18967, 18970, 18977, 18980, 18981, 19003.
+ 18789, 18790, 18795, 18796, 18803, 18820, 18823, 18824, 18825, 18857,
+ 18863, 18870, 18872, 18873, 18875, 18887, 18921, 18951, 18952, 18961,
+ 18966, 18967, 18970, 18977, 18980, 18981, 19003.
* 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 2403216b6b..4b93857efb 100644
--- a/math/auto-libm-test-in
+++ b/math/auto-libm-test-in
@@ -3067,6 +3067,151 @@ pow 1.01 -min_subnorm
pow 2.0 -100000.0
+pow 2 -126.125
+pow 2 -126.25
+pow 2 -126.375
+pow 2 -126.5
+pow 2 -126.625
+pow 2 -126.75
+pow 2 -126.875
+pow 2 -969.125
+pow 2 -969.25
+pow 2 -969.375
+pow 2 -969.5
+pow 2 -969.625
+pow 2 -969.75
+pow 2 -969.875
+pow 2 -1022.125
+pow 2 -1022.25
+pow 2 -1022.375
+pow 2 -1022.5
+pow 2 -1022.625
+pow 2 -1022.75
+pow 2 -1022.875
+pow 2 -16382.125
+pow 2 -16382.25
+pow 2 -16382.375
+pow 2 -16382.5
+pow 2 -16382.625
+pow 2 -16382.75
+pow 2 -16382.875
+pow 2 -16383.125
+pow 2 -16383.25
+pow 2 -16383.375
+pow 2 -16383.5
+pow 2 -16383.625
+pow 2 -16383.75
+pow 2 -16383.875
+pow 0.5 126.125
+pow 0.5 126.25
+pow 0.5 126.375
+pow 0.5 126.5
+pow 0.5 126.625
+pow 0.5 126.75
+pow 0.5 126.875
+pow 0.5 969.125
+pow 0.5 969.25
+pow 0.5 969.375
+pow 0.5 969.5
+pow 0.5 969.625
+pow 0.5 969.75
+pow 0.5 969.875
+pow 0.5 1022.125
+pow 0.5 1022.25
+pow 0.5 1022.375
+pow 0.5 1022.5
+pow 0.5 1022.625
+pow 0.5 1022.75
+pow 0.5 1022.875
+pow 0.5 16382.125
+pow 0.5 16382.25
+pow 0.5 16382.375
+pow 0.5 16382.5
+pow 0.5 16382.625
+pow 0.5 16382.75
+pow 0.5 16382.875
+pow 0.5 16383.125
+pow 0.5 16383.25
+pow 0.5 16383.375
+pow 0.5 16383.5
+pow 0.5 16383.625
+pow 0.5 16383.75
+pow 0.5 16383.875
+pow 0x1.00001p1 -126
+pow -0x1.00002p1 -126
+pow 0x1.00003p1 -126
+pow -0x1.00004p1 -126
+pow 0x1.00005p1 -126
+pow -0x1.00006p1 -126
+pow 0x1.00007p1 -126
+pow 0x1.00001p1 -969
+pow -0x1.00002p1 -969
+pow 0x1.00003p1 -969
+pow -0x1.00004p1 -969
+pow 0x1.00005p1 -969
+pow -0x1.00006p1 -969
+pow 0x1.00007p1 -969
+pow 0x1.00001p1 -1022
+pow -0x1.00002p1 -1022
+pow 0x1.00003p1 -1022
+pow -0x1.00004p1 -1022
+pow 0x1.00005p1 -1022
+pow -0x1.00006p1 -1022
+pow 0x1.00007p1 -1022
+pow 0x1.00001p1 -16382
+pow -0x1.00002p1 -16382
+pow 0x1.00003p1 -16382
+pow -0x1.00004p1 -16382
+pow 0x1.00005p1 -16382
+pow -0x1.00006p1 -16382
+pow 0x1.00007p1 -16382
+pow 0x1.00001p1 -16383
+pow -0x1.00002p1 -16383
+pow 0x1.00003p1 -16383
+pow -0x1.00004p1 -16383
+pow 0x1.00005p1 -16383
+pow -0x1.00006p1 -16383
+pow 0x1.00007p1 -16383
+pow 0x0.ffff1p-1 126
+pow -0x0.ffff2p-1 126
+pow 0x0.ffff3p-1 126
+pow -0x0.ffff4p-1 126
+pow 0x0.ffff5p-1 126
+pow -0x0.ffff6p-1 126
+pow 0x0.ffff7p-1 126
+pow 0x0.ffff1p-1 969
+pow -0x0.ffff2p-1 969
+pow 0x0.ffff3p-1 969
+pow -0x0.ffff4p-1 969
+pow 0x0.ffff5p-1 969
+pow -0x0.ffff6p-1 969
+pow 0x0.ffff7p-1 969
+pow 0x0.ffff1p-1 1022
+pow -0x0.ffff2p-1 1022
+pow 0x0.ffff3p-1 1022
+pow -0x0.ffff4p-1 1022
+pow 0x0.ffff5p-1 1022
+pow -0x0.ffff6p-1 1022
+pow 0x0.ffff7p-1 1022
+pow 0x0.ffff1p-1 16382
+pow -0x0.ffff2p-1 16382
+pow 0x0.ffff3p-1 16382
+pow -0x0.ffff4p-1 16382
+pow 0x0.ffff5p-1 16382
+pow -0x0.ffff6p-1 16382
+pow 0x0.ffff7p-1 16382
+pow 0x0.ffff1p-1 16383
+pow -0x0.ffff2p-1 16383
+pow 0x0.ffff3p-1 16383
+pow -0x0.ffff4p-1 16383
+pow 0x0.ffff5p-1 16383
+pow -0x0.ffff6p-1 16383
+pow 0x0.ffff7p-1 16383
+pow 0x2.000b3p0 -1022
+pow 0x2.000582p0 -1022
+pow 2 -0x3.fe513p+8
+pow 2 -0x3.fe4e8p+8
+
pow 1.0625 1.125
pow 1.5 1.03125
pow 0x1.7d1a0a6f2p+681 1.5
diff --git a/math/auto-libm-test-out b/math/auto-libm-test-out
index ac392cb9f9..4126a7cd07 100644
--- a/math/auto-libm-test-out
+++ b/math/auto-libm-test-out
@@ -222650,6 +222650,3650 @@ pow 2.0 -100000.0
= pow tonearest ldbl-128ibm 0x2p+0L -0x1.86ap+16L : 0x0p+0L : inexact-ok underflow errno-erange
= pow towardzero ldbl-128ibm 0x2p+0L -0x1.86ap+16L : 0x0p+0L : inexact-ok underflow errno-erange
= pow upward ldbl-128ibm 0x2p+0L -0x1.86ap+16L : 0x4p-1076L : inexact-ok underflow errno-erange-ok
+pow 2 -126.125
+= pow downward flt-32 0x2p+0f -0x7.e2p+4f : 0x3.ab0318p-128f : inexact-ok underflow errno-erange-ok
+= pow tonearest flt-32 0x2p+0f -0x7.e2p+4f : 0x3.ab0318p-128f : inexact-ok underflow errno-erange-ok
+= pow towardzero flt-32 0x2p+0f -0x7.e2p+4f : 0x3.ab0318p-128f : inexact-ok underflow errno-erange-ok
+= pow upward flt-32 0x2p+0f -0x7.e2p+4f : 0x3.ab032p-128f : inexact-ok underflow errno-erange-ok
+= pow downward dbl-64 0x2p+0 -0x7.e2p+4 : 0x3.ab031b9f7490ep-128 : inexact-ok
+= pow tonearest dbl-64 0x2p+0 -0x7.e2p+4 : 0x3.ab031b9f7490ep-128 : inexact-ok
+= pow towardzero dbl-64 0x2p+0 -0x7.e2p+4 : 0x3.ab031b9f7490ep-128 : inexact-ok
+= pow upward dbl-64 0x2p+0 -0x7.e2p+4 : 0x3.ab031b9f7491p-128 : inexact-ok
+= pow downward ldbl-96-intel 0x2p+0L -0x7.e2p+4L : 0x3.ab031b9f7490e4b8p-128L : inexact-ok
+= pow tonearest ldbl-96-intel 0x2p+0L -0x7.e2p+4L : 0x3.ab031b9f7490e4bcp-128L : inexact-ok
+= pow towardzero ldbl-96-intel 0x2p+0L -0x7.e2p+4L : 0x3.ab031b9f7490e4b8p-128L : inexact-ok
+= pow upward ldbl-96-intel 0x2p+0L -0x7.e2p+4L : 0x3.ab031b9f7490e4bcp-128L : inexact-ok
+= pow downward ldbl-96-m68k 0x2p+0L -0x7.e2p+4L : 0x3.ab031b9f7490e4b8p-128L : inexact-ok
+= pow tonearest ldbl-96-m68k 0x2p+0L -0x7.e2p+4L : 0x3.ab031b9f7490e4bcp-128L : inexact-ok
+= pow towardzero ldbl-96-m68k 0x2p+0L -0x7.e2p+4L : 0x3.ab031b9f7490e4b8p-128L : inexact-ok
+= pow upward ldbl-96-m68k 0x2p+0L -0x7.e2p+4L : 0x3.ab031b9f7490e4bcp-128L : inexact-ok
+= pow downward ldbl-128 0x2p+0L -0x7.e2p+4L : 0x3.ab031b9f7490e4bb40b5d6cdc1b8p-128L : inexact-ok
+= pow tonearest ldbl-128 0x2p+0L -0x7.e2p+4L : 0x3.ab031b9f7490e4bb40b5d6cdc1bap-128L : inexact-ok
+= pow towardzero ldbl-128 0x2p+0L -0x7.e2p+4L : 0x3.ab031b9f7490e4bb40b5d6cdc1b8p-128L : inexact-ok
+= pow upward ldbl-128 0x2p+0L -0x7.e2p+4L : 0x3.ab031b9f7490e4bb40b5d6cdc1bap-128L : inexact-ok
+= pow downward ldbl-128ibm 0x2p+0L -0x7.e2p+4L : 0x3.ab031b9f7490e4bb40b5d6cdc1p-128L : inexact-ok
+= pow tonearest ldbl-128ibm 0x2p+0L -0x7.e2p+4L : 0x3.ab031b9f7490e4bb40b5d6cdc2p-128L : inexact-ok
+= pow towardzero ldbl-128ibm 0x2p+0L -0x7.e2p+4L : 0x3.ab031b9f7490e4bb40b5d6cdc1p-128L : inexact-ok
+= pow upward ldbl-128ibm 0x2p+0L -0x7.e2p+4L : 0x3.ab031b9f7490e4bb40b5d6cdc2p-128L : inexact-ok
+pow 2 -126.25
+= pow downward flt-32 0x2p+0f -0x7.e4p+4f : 0x3.5d13fp-128f : inexact-ok underflow errno-erange-ok
+= pow tonearest flt-32 0x2p+0f -0x7.e4p+4f : 0x3.5d13fp-128f : inexact-ok underflow errno-erange-ok
+= pow towardzero flt-32 0x2p+0f -0x7.e4p+4f : 0x3.5d13fp-128f : inexact-ok underflow errno-erange-ok
+= pow upward flt-32 0x2p+0f -0x7.e4p+4f : 0x3.5d13f8p-128f : inexact-ok underflow errno-erange-ok
+= pow downward dbl-64 0x2p+0 -0x7.e4p+4 : 0x3.5d13f32b5a75ap-128 : inexact-ok
+= pow tonearest dbl-64 0x2p+0 -0x7.e4p+4 : 0x3.5d13f32b5a75ap-128 : inexact-ok
+= pow towardzero dbl-64 0x2p+0 -0x7.e4p+4 : 0x3.5d13f32b5a75ap-128 : inexact-ok
+= pow upward dbl-64 0x2p+0 -0x7.e4p+4 : 0x3.5d13f32b5a75cp-128 : inexact-ok
+= pow downward ldbl-96-intel 0x2p+0L -0x7.e4p+4L : 0x3.5d13f32b5a75abdp-128L : inexact-ok
+= pow tonearest ldbl-96-intel 0x2p+0L -0x7.e4p+4L : 0x3.5d13f32b5a75abdp-128L : inexact-ok
+= pow towardzero ldbl-96-intel 0x2p+0L -0x7.e4p+4L : 0x3.5d13f32b5a75abdp-128L : inexact-ok
+= pow upward ldbl-96-intel 0x2p+0L -0x7.e4p+4L : 0x3.5d13f32b5a75abd4p-128L : inexact-ok
+= pow downward ldbl-96-m68k 0x2p+0L -0x7.e4p+4L : 0x3.5d13f32b5a75abdp-128L : inexact-ok
+= pow tonearest ldbl-96-m68k 0x2p+0L -0x7.e4p+4L : 0x3.5d13f32b5a75abdp-128L : inexact-ok
+= pow towardzero ldbl-96-m68k 0x2p+0L -0x7.e4p+4L : 0x3.5d13f32b5a75abdp-128L : inexact-ok
+= pow upward ldbl-96-m68k 0x2p+0L -0x7.e4p+4L : 0x3.5d13f32b5a75abd4p-128L : inexact-ok
+= pow downward ldbl-128 0x2p+0L -0x7.e4p+4L : 0x3.5d13f32b5a75abd0e69a2ee640b4p-128L : inexact-ok
+= pow tonearest ldbl-128 0x2p+0L -0x7.e4p+4L : 0x3.5d13f32b5a75abd0e69a2ee640b4p-128L : inexact-ok
+= pow towardzero ldbl-128 0x2p+0L -0x7.e4p+4L : 0x3.5d13f32b5a75abd0e69a2ee640b4p-128L : inexact-ok
+= pow upward ldbl-128 0x2p+0L -0x7.e4p+4L : 0x3.5d13f32b5a75abd0e69a2ee640b6p-128L : inexact-ok
+= pow downward ldbl-128ibm 0x2p+0L -0x7.e4p+4L : 0x3.5d13f32b5a75abd0e69a2ee64p-128L : inexact-ok
+= pow tonearest ldbl-128ibm 0x2p+0L -0x7.e4p+4L : 0x3.5d13f32b5a75abd0e69a2ee641p-128L : inexact-ok
+= pow towardzero ldbl-128ibm 0x2p+0L -0x7.e4p+4L : 0x3.5d13f32b5a75abd0e69a2ee64p-128L : inexact-ok
+= pow upward ldbl-128ibm 0x2p+0L -0x7.e4p+4L : 0x3.5d13f32b5a75abd0e69a2ee641p-128L : inexact-ok
+pow 2 -126.375
+= pow downward flt-32 0x2p+0f -0x7.e6p+4f : 0x3.159ca8p-128f : inexact-ok underflow errno-erange-ok
+= pow tonearest flt-32 0x2p+0f -0x7.e6p+4f : 0x3.159ca8p-128f : inexact-ok underflow errno-erange-ok
+= pow towardzero flt-32 0x2p+0f -0x7.e6p+4f : 0x3.159ca8p-128f : inexact-ok underflow errno-erange-ok
+= pow upward flt-32 0x2p+0f -0x7.e6p+4f : 0x3.159cbp-128f : inexact-ok underflow errno-erange-ok
+= pow downward dbl-64 0x2p+0 -0x7.e6p+4 : 0x3.159ca845541b6p-128 : inexact-ok
+= pow tonearest dbl-64 0x2p+0 -0x7.e6p+4 : 0x3.159ca845541b6p-128 : inexact-ok
+= pow towardzero dbl-64 0x2p+0 -0x7.e6p+4 : 0x3.159ca845541b6p-128 : inexact-ok
+= pow upward dbl-64 0x2p+0 -0x7.e6p+4 : 0x3.159ca845541b8p-128 : inexact-ok
+= pow downward ldbl-96-intel 0x2p+0L -0x7.e6p+4L : 0x3.159ca845541b6b74p-128L : inexact-ok
+= pow tonearest ldbl-96-intel 0x2p+0L -0x7.e6p+4L : 0x3.159ca845541b6b74p-128L : inexact-ok
+= pow towardzero ldbl-96-intel 0x2p+0L -0x7.e6p+4L : 0x3.159ca845541b6b74p-128L : inexact-ok
+= pow upward ldbl-96-intel 0x2p+0L -0x7.e6p+4L : 0x3.159ca845541b6b78p-128L : inexact-ok
+= pow downward ldbl-96-m68k 0x2p+0L -0x7.e6p+4L : 0x3.159ca845541b6b74p-128L : inexact-ok
+= pow tonearest ldbl-96-m68k 0x2p+0L -0x7.e6p+4L : 0x3.159ca845541b6b74p-128L : inexact-ok
+= pow towardzero ldbl-96-m68k 0x2p+0L -0x7.e6p+4L : 0x3.159ca845541b6b74p-128L : inexact-ok
+= pow upward ldbl-96-m68k 0x2p+0L -0x7.e6p+4L : 0x3.159ca845541b6b78p-128L : inexact-ok
+= pow downward ldbl-128 0x2p+0L -0x7.e6p+4L : 0x3.159ca845541b6b74f8ab43259376p-128L : inexact-ok
+= pow tonearest ldbl-128 0x2p+0L -0x7.e6p+4L : 0x3.159ca845541b6b74f8ab43259376p-128L : inexact-ok
+= pow towardzero ldbl-128 0x2p+0L -0x7.e6p+4L : 0x3.159ca845541b6b74f8ab43259376p-128L : inexact-ok
+= pow upward ldbl-128 0x2p+0L -0x7.e6p+4L : 0x3.159ca845541b6b74f8ab43259378p-128L : inexact-ok
+= pow downward ldbl-128ibm 0x2p+0L -0x7.e6p+4L : 0x3.159ca845541b6b74f8ab432593p-128L : inexact-ok
+= pow tonearest ldbl-128ibm 0x2p+0L -0x7.e6p+4L : 0x3.159ca845541b6b74f8ab432593p-128L : inexact-ok
+= pow towardzero ldbl-128ibm 0x2p+0L -0x7.e6p+4L : 0x3.159ca845541b6b74f8ab432593p-128L : inexact-ok
+= pow upward ldbl-128ibm 0x2p+0L -0x7.e6p+4L : 0x3.159ca845541b6b74f8ab432594p-128L : inexact-ok
+pow 2 -126.5
+= pow downward flt-32 0x2p+0f -0x7.e8p+4f : 0x2.d413c8p-128f : inexact-ok underflow errno-erange-ok
+= pow tonearest flt-32 0x2p+0f -0x7.e8p+4f : 0x2.d413dp-128f : inexact-ok underflow errno-erange-ok
+= pow towardzero flt-32 0x2p+0f -0x7.e8p+4f : 0x2.d413c8p-128f : inexact-ok underflow errno-erange-ok
+= pow upward flt-32 0x2p+0f -0x7.e8p+4f : 0x2.d413dp-128f : inexact-ok underflow errno-erange-ok
+= pow downward dbl-64 0x2p+0 -0x7.e8p+4 : 0x2.d413cccfe7798p-128 : inexact-ok
+= pow tonearest dbl-64 0x2p+0 -0x7.e8p+4 : 0x2.d413cccfe779ap-128 : inexact-ok
+= pow towardzero dbl-64 0x2p+0 -0x7.e8p+4 : 0x2.d413cccfe7798p-128 : inexact-ok
+= pow upward dbl-64 0x2p+0 -0x7.e8p+4 : 0x2.d413cccfe779ap-128 : inexact-ok
+= pow downward ldbl-96-intel 0x2p+0L -0x7.e8p+4L : 0x2.d413cccfe779921p-128L : inexact-ok
+= pow tonearest ldbl-96-intel 0x2p+0L -0x7.e8p+4L : 0x2.d413cccfe779921p-128L : inexact-ok
+= pow towardzero ldbl-96-intel 0x2p+0L -0x7.e8p+4L : 0x2.d413cccfe779921p-128L : inexact-ok
+= pow upward ldbl-96-intel 0x2p+0L -0x7.e8p+4L : 0x2.d413cccfe7799214p-128L : inexact-ok
+= pow downward ldbl-96-m68k 0x2p+0L -0x7.e8p+4L : 0x2.d413cccfe779921p-128L : inexact-ok
+= pow tonearest ldbl-96-m68k 0x2p+0L -0x7.e8p+4L : 0x2.d413cccfe779921p-128L : inexact-ok
+= pow towardzero ldbl-96-m68k 0x2p+0L -0x7.e8p+4L : 0x2.d413cccfe779921p-128L : inexact-ok
+= pow upward ldbl-96-m68k 0x2p+0L -0x7.e8p+4L : 0x2.d413cccfe7799214p-128L : inexact-ok
+= pow downward ldbl-128 0x2p+0L -0x7.e8p+4L : 0x2.d413cccfe779921165f626cdd52ap-128L : inexact-ok
+= pow tonearest ldbl-128 0x2p+0L -0x7.e8p+4L : 0x2.d413cccfe779921165f626cdd52ap-128L : inexact-ok
+= pow towardzero ldbl-128 0x2p+0L -0x7.e8p+4L : 0x2.d413cccfe779921165f626cdd52ap-128L : inexact-ok
+= pow upward ldbl-128 0x2p+0L -0x7.e8p+4L : 0x2.d413cccfe779921165f626cdd52cp-128L : inexact-ok
+= pow downward ldbl-128ibm 0x2p+0L -0x7.e8p+4L : 0x2.d413cccfe779921165f626cdd5p-128L : inexact-ok
+= pow tonearest ldbl-128ibm 0x2p+0L -0x7.e8p+4L : 0x2.d413cccfe779921165f626cdd5p-128L : inexact-ok
+= pow towardzero ldbl-128ibm 0x2p+0L -0x7.e8p+4L : 0x2.d413cccfe779921165f626cdd5p-128L : inexact-ok
+= pow upward ldbl-128ibm 0x2p+0L -0x7.e8p+4L : 0x2.d413cccfe779921165f626cdd6p-128L : inexact-ok
+pow 2 -126.625
+= pow downward flt-32 0x2p+0f -0x7.eap+4f : 0x2.97fb58p-128f : inexact-ok underflow errno-erange-ok
+= pow tonearest flt-32 0x2p+0f -0x7.eap+4f : 0x2.97fb58p-128f : inexact-ok underflow errno-erange-ok
+= pow towardzero flt-32 0x2p+0f -0x7.eap+4f : 0x2.97fb58p-128f : inexact-ok underflow errno-erange-ok
+= pow upward flt-32 0x2p+0f -0x7.eap+4f : 0x2.97fb6p-128f : inexact-ok underflow errno-erange-ok
+= pow downward dbl-64 0x2p+0 -0x7.eap+4 : 0x2.97fb5aa6c544ep-128 : inexact-ok
+= pow tonearest dbl-64 0x2p+0 -0x7.eap+4 : 0x2.97fb5aa6c544ep-128 : inexact-ok
+= pow towardzero dbl-64 0x2p+0 -0x7.eap+4 : 0x2.97fb5aa6c544ep-128 : inexact-ok
+= pow upward dbl-64 0x2p+0 -0x7.eap+4 : 0x2.97fb5aa6c545p-128 : inexact-ok
+= pow downward ldbl-96-intel 0x2p+0L -0x7.eap+4L : 0x2.97fb5aa6c544e3a8p-128L : inexact-ok
+= pow tonearest ldbl-96-intel 0x2p+0L -0x7.eap+4L : 0x2.97fb5aa6c544e3a8p-128L : inexact-ok
+= pow towardzero ldbl-96-intel 0x2p+0L -0x7.eap+4L : 0x2.97fb5aa6c544e3a8p-128L : inexact-ok
+= pow upward ldbl-96-intel 0x2p+0L -0x7.eap+4L : 0x2.97fb5aa6c544e3acp-128L : inexact-ok
+= pow downward ldbl-96-m68k 0x2p+0L -0x7.eap+4L : 0x2.97fb5aa6c544e3a8p-128L : inexact-ok
+= pow tonearest ldbl-96-m68k 0x2p+0L -0x7.eap+4L : 0x2.97fb5aa6c544e3a8p-128L : inexact-ok
+= pow towardzero ldbl-96-m68k 0x2p+0L -0x7.eap+4L : 0x2.97fb5aa6c544e3a8p-128L : inexact-ok
+= pow upward ldbl-96-m68k 0x2p+0L -0x7.eap+4L : 0x2.97fb5aa6c544e3acp-128L : inexact-ok
+= pow downward ldbl-128 0x2p+0L -0x7.eap+4L : 0x2.97fb5aa6c544e3a872f5fd885c4p-128L : inexact-ok
+= pow tonearest ldbl-128 0x2p+0L -0x7.eap+4L : 0x2.97fb5aa6c544e3a872f5fd885c42p-128L : inexact-ok
+= pow towardzero ldbl-128 0x2p+0L -0x7.eap+4L : 0x2.97fb5aa6c544e3a872f5fd885c4p-128L : inexact-ok
+= pow upward ldbl-128 0x2p+0L -0x7.eap+4L : 0x2.97fb5aa6c544e3a872f5fd885c42p-128L : inexact-ok
+= pow downward ldbl-128ibm 0x2p+0L -0x7.eap+4L : 0x2.97fb5aa6c544e3a872f5fd885cp-128L : inexact-ok
+= pow tonearest ldbl-128ibm 0x2p+0L -0x7.eap+4L : 0x2.97fb5aa6c544e3a872f5fd885cp-128L : inexact-ok
+= pow towardzero ldbl-128ibm 0x2p+0L -0x7.eap+4L : 0x2.97fb5aa6c544e3a872f5fd885cp-128L : inexact-ok
+= pow upward ldbl-128ibm 0x2p+0L -0x7.eap+4L : 0x2.97fb5aa6c544e3a872f5fd885dp-128L : inexact-ok
+pow 2 -126.75
+= pow downward flt-32 0x2p+0f -0x7.ecp+4f : 0x2.60dfcp-128f : inexact-ok underflow errno-erange-ok
+= pow tonearest flt-32 0x2p+0f -0x7.ecp+4f : 0x2.60dfcp-128f : inexact-ok underflow errno-erange-ok
+= pow towardzero flt-32 0x2p+0f -0x7.ecp+4f : 0x2.60dfcp-128f : inexact-ok underflow errno-erange-ok
+= pow upward flt-32 0x2p+0f -0x7.ecp+4f : 0x2.60dfc8p-128f : inexact-ok underflow errno-erange-ok
+= pow downward dbl-64 0x2p+0 -0x7.ecp+4 : 0x2.60dfc14636e2ap-128 : inexact-ok
+= pow tonearest dbl-64 0x2p+0 -0x7.ecp+4 : 0x2.60dfc14636e2ap-128 : inexact-ok
+= pow towardzero dbl-64 0x2p+0 -0x7.ecp+4 : 0x2.60dfc14636e2ap-128 : inexact-ok
+= pow upward dbl-64 0x2p+0 -0x7.ecp+4 : 0x2.60dfc14636e2cp-128 : inexact-ok
+= pow downward ldbl-96-intel 0x2p+0L -0x7.ecp+4L : 0x2.60dfc14636e2a5bcp-128L : inexact-ok
+= pow tonearest ldbl-96-intel 0x2p+0L -0x7.ecp+4L : 0x2.60dfc14636e2a5bcp-128L : inexact-ok
+= pow towardzero ldbl-96-intel 0x2p+0L -0x7.ecp+4L : 0x2.60dfc14636e2a5bcp-128L : inexact-ok
+= pow upward ldbl-96-intel 0x2p+0L -0x7.ecp+4L : 0x2.60dfc14636e2a5cp-128L : inexact-ok
+= pow downward ldbl-96-m68k 0x2p+0L -0x7.ecp+4L : 0x2.60dfc14636e2a5bcp-128L : inexact-ok
+= pow tonearest ldbl-96-m68k 0x2p+0L -0x7.ecp+4L : 0x2.60dfc14636e2a5bcp-128L : inexact-ok
+= pow towardzero ldbl-96-m68k 0x2p+0L -0x7.ecp+4L : 0x2.60dfc14636e2a5bcp-128L : inexact-ok
+= pow upward ldbl-96-m68k 0x2p+0L -0x7.ecp+4L : 0x2.60dfc14636e2a5cp-128L : inexact-ok
+= pow downward ldbl-128 0x2p+0L -0x7.ecp+4L : 0x2.60dfc14636e2a5bd1ab48c60b90ap-128L : inexact-ok
+= pow tonearest ldbl-128 0x2p+0L -0x7.ecp+4L : 0x2.60dfc14636e2a5bd1ab48c60b90cp-128L : inexact-ok
+= pow towardzero ldbl-128 0x2p+0L -0x7.ecp+4L : 0x2.60dfc14636e2a5bd1ab48c60b90ap-128L : inexact-ok
+= pow upward ldbl-128 0x2p+0L -0x7.ecp+4L : 0x2.60dfc14636e2a5bd1ab48c60b90cp-128L : inexact-ok
+= pow downward ldbl-128ibm 0x2p+0L -0x7.ecp+4L : 0x2.60dfc14636e2a5bd1ab48c60b9p-128L : inexact-ok
+= pow tonearest ldbl-128ibm 0x2p+0L -0x7.ecp+4L : 0x2.60dfc14636e2a5bd1ab48c60b9p-128L : inexact-ok
+= pow towardzero ldbl-128ibm 0x2p+0L -0x7.ecp+4L : 0x2.60dfc14636e2a5bd1ab48c60b9p-128L : inexact-ok
+= pow upward ldbl-128ibm 0x2p+0L -0x7.ecp+4L : 0x2.60dfc14636e2a5bd1ab48c60bap-128L : inexact-ok
+pow 2 -126.875
+= pow downward flt-32 0x2p+0f -0x7.eep+4f : 0x2.2e57p-128f : inexact-ok underflow errno-erange-ok
+= pow tonearest flt-32 0x2p+0f -0x7.eep+4f : 0x2.2e5708p-128f : inexact-ok underflow errno-erange-ok
+= pow towardzero flt-32 0x2p+0f -0x7.eep+4f : 0x2.2e57p-128f : inexact-ok underflow errno-erange-ok
+= pow upward flt-32 0x2p+0f -0x7.eep+4f : 0x2.2e5708p-128f : inexact-ok underflow errno-erange-ok
+= pow downward dbl-64 0x2p+0 -0x7.eep+4 : 0x2.2e57078faa2f4p-128 : inexact-ok
+= pow tonearest dbl-64 0x2p+0 -0x7.eep+4 : 0x2.2e57078faa2f6p-128 : inexact-ok
+= pow towardzero dbl-64 0x2p+0 -0x7.eep+4 : 0x2.2e57078faa2f4p-128 : inexact-ok
+= pow upward dbl-64 0x2p+0 -0x7.eep+4 : 0x2.2e57078faa2f6p-128 : inexact-ok
+= pow downward ldbl-96-intel 0x2p+0L -0x7.eep+4L : 0x2.2e57078faa2f5b98p-128L : inexact-ok
+= pow tonearest ldbl-96-intel 0x2p+0L -0x7.eep+4L : 0x2.2e57078faa2f5b9cp-128L : inexact-ok
+= pow towardzero ldbl-96-intel 0x2p+0L -0x7.eep+4L : 0x2.2e57078faa2f5b98p-128L : inexact-ok
+= pow upward ldbl-96-intel 0x2p+0L -0x7.eep+4L : 0x2.2e57078faa2f5b9cp-128L : inexact-ok
+= pow downward ldbl-96-m68k 0x2p+0L -0x7.eep+4L : 0x2.2e57078faa2f5b98p-128L : inexact-ok
+= pow tonearest ldbl-96-m68k 0x2p+0L -0x7.eep+4L : 0x2.2e57078faa2f5b9cp-128L : inexact-ok
+= pow towardzero ldbl-96-m68k 0x2p+0L -0x7.eep+4L : 0x2.2e57078faa2f5b98p-128L : inexact-ok
+= pow upward ldbl-96-m68k 0x2p+0L -0x7.eep+4L : 0x2.2e57078faa2f5b9cp-128L : inexact-ok
+= pow downward ldbl-128 0x2p+0L -0x7.eep+4L : 0x2.2e57078faa2f5b9bef918a1d6294p-128L : inexact-ok
+= pow tonearest ldbl-128 0x2p+0L -0x7.eep+4L : 0x2.2e57078faa2f5b9bef918a1d6294p-128L : inexact-ok
+= pow towardzero ldbl-128 0x2p+0L -0x7.eep+4L : 0x2.2e57078faa2f5b9bef918a1d6294p-128L : inexact-ok
+= pow upward ldbl-128 0x2p+0L -0x7.eep+4L : 0x2.2e57078faa2f5b9bef918a1d6296p-128L : inexact-ok
+= pow downward ldbl-128ibm 0x2p+0L -0x7.eep+4L : 0x2.2e57078faa2f5b9bef918a1d62p-128L : inexact-ok
+= pow tonearest ldbl-128ibm 0x2p+0L -0x7.eep+4L : 0x2.2e57078faa2f5b9bef918a1d63p-128L : inexact-ok
+= pow towardzero ldbl-128ibm 0x2p+0L -0x7.eep+4L : 0x2.2e57078faa2f5b9bef918a1d62p-128L : inexact-ok
+= pow upward ldbl-128ibm 0x2p+0L -0x7.eep+4L : 0x2.2e57078faa2f5b9bef918a1d63p-128L : inexact-ok
+pow 2 -969.125
+= pow downward flt-32 0x2p+0f -0x3.c92p+8f : 0x0p+0f : inexact-ok underflow errno-erange
+= pow tonearest flt-32 0x2p+0f -0x3.c92p+8f : 0x0p+0f : inexact-ok underflow errno-erange
+= pow towardzero flt-32 0x2p+0f -0x3.c92