diff options
-rw-r--r-- | ChangeLog | 11 | ||||
-rw-r--r-- | math/auto-libm-test-out | 144 | ||||
-rw-r--r-- | math/gen-auto-libm-tests.c | 440 | ||||
-rwxr-xr-x | math/gen-libm-test.pl | 47 |
4 files changed, 315 insertions, 327 deletions
diff --git a/ChangeLog b/ChangeLog index b595d64220..f08052ad9c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2014-03-06 Joseph Myers <joseph@codesourcery.com> + + * math/gen-auto-libm-tests.c: Update comment on output format. + (output_for_one_input_case): Generate before-rounding and + after-rounding information as conditions on output flags not + floating-point format. + * math/auto-libm-test-out: Regenerated. + * math/gen-libm-test.pl (cond_value): New function. + (or_cond_value): Use cond_value. + (generate_testfile): Handle conditional exceptions. + 2014-03-05 Joseph Myers <joseph@codesourcery.com> * math/libm-test.inc (max_valid_error): New variable. diff --git a/math/auto-libm-test-out b/math/auto-libm-test-out index 59c08a74b8..8046cc65d4 100644 --- a/math/auto-libm-test-out +++ b/math/auto-libm-test-out @@ -103946,11 +103946,9 @@ fma -0x1.4p-126 0x1.000004p-1 -0x1p-128 = fma upward ldbl-128ibm -0x5p-128L 0x8.00002p-4L -0x1p-128L : -0x3.80000ap-128L : fma 0x1.fffff8p-126 0x1.000002p-1 0x1p-149 = fma downward flt-32 0x7.ffffep-128f 0x8.00001p-4f 0x8p-152f : 0x3.fffff8p-128f : inexact underflow errno-erange-ok -= fma tonearest flt-32:before-rounding 0x7.ffffep-128f 0x8.00001p-4f 0x8p-152f : 0x4p-128f : inexact underflow errno-erange-ok -= fma tonearest flt-32:after-rounding 0x7.ffffep-128f 0x8.00001p-4f 0x8p-152f : 0x4p-128f : inexact += fma tonearest flt-32 0x7.ffffep-128f 0x8.00001p-4f 0x8p-152f : 0x4p-128f : inexact underflow:before-rounding errno-erange-ok:before-rounding = fma towardzero flt-32 0x7.ffffep-128f 0x8.00001p-4f 0x8p-152f : 0x3.fffff8p-128f : inexact underflow errno-erange-ok -= fma upward flt-32:before-rounding 0x7.ffffep-128f 0x8.00001p-4f 0x8p-152f : 0x4p-128f : inexact underflow errno-erange-ok -= fma upward flt-32:after-rounding 0x7.ffffep-128f 0x8.00001p-4f 0x8p-152f : 0x4p-128f : inexact += fma upward flt-32 0x7.ffffep-128f 0x8.00001p-4f 0x8p-152f : 0x4p-128f : inexact underflow:before-rounding errno-erange-ok:before-rounding = fma downward dbl-64 0x7.ffffep-128 0x8.00001p-4 0x8p-152 : 0x3.ffffffffffep-128 : = fma tonearest dbl-64 0x7.ffffep-128 0x8.00001p-4 0x8p-152 : 0x3.ffffffffffep-128 : = fma towardzero dbl-64 0x7.ffffep-128 0x8.00001p-4 0x8p-152 : 0x3.ffffffffffep-128 : @@ -103972,10 +103970,8 @@ fma 0x1.fffff8p-126 0x1.000002p-1 0x1p-149 = fma towardzero ldbl-128ibm 0x7.ffffep-128L 0x8.00001p-4L 0x8p-152L : 0x3.ffffffffffep-128L : = fma upward ldbl-128ibm 0x7.ffffep-128L 0x8.00001p-4L 0x8p-152L : 0x3.ffffffffffep-128L : fma -0x1.fffff8p-126 0x1.000002p-1 -0x1p-149 -= fma downward flt-32:before-rounding -0x7.ffffep-128f 0x8.00001p-4f -0x8p-152f : -0x4p-128f : inexact underflow errno-erange-ok -= fma downward flt-32:after-rounding -0x7.ffffep-128f 0x8.00001p-4f -0x8p-152f : -0x4p-128f : inexact -= fma tonearest flt-32:before-rounding -0x7.ffffep-128f 0x8.00001p-4f -0x8p-152f : -0x4p-128f : inexact underflow errno-erange-ok -= fma tonearest flt-32:after-rounding -0x7.ffffep-128f 0x8.00001p-4f -0x8p-152f : -0x4p-128f : inexact += fma downward flt-32 -0x7.ffffep-128f 0x8.00001p-4f -0x8p-152f : -0x4p-128f : inexact underflow:before-rounding errno-erange-ok:before-rounding += fma tonearest flt-32 -0x7.ffffep-128f 0x8.00001p-4f -0x8p-152f : -0x4p-128f : inexact underflow:before-rounding errno-erange-ok:before-rounding = fma towardzero flt-32 -0x7.ffffep-128f 0x8.00001p-4f -0x8p-152f : -0x3.fffff8p-128f : inexact underflow errno-erange-ok = fma upward flt-32 -0x7.ffffep-128f 0x8.00001p-4f -0x8p-152f : -0x3.fffff8p-128f : inexact underflow errno-erange-ok = fma downward dbl-64 -0x7.ffffep-128 0x8.00001p-4 -0x8p-152 : -0x3.ffffffffffep-128 : @@ -104052,8 +104048,7 @@ fma 0x1p-149 0x1.1p-1 0x0.fffffep-126 = fma downward flt-32 0x8p-152f 0x8.8p-4f 0x3.fffff8p-128f : 0x3.fffff8p-128f : inexact underflow errno-erange-ok = fma tonearest flt-32 0x8p-152f 0x8.8p-4f 0x3.fffff8p-128f : 0x4p-128f : inexact underflow errno-erange-ok = fma towardzero flt-32 0x8p-152f 0x8.8p-4f 0x3.fffff8p-128f : 0x3.fffff8p-128f : inexact underflow errno-erange-ok -= fma upward flt-32:before-rounding 0x8p-152f 0x8.8p-4f 0x3.fffff8p-128f : 0x4p-128f : inexact underflow errno-erange-ok -= fma upward flt-32:after-rounding 0x8p-152f 0x8.8p-4f 0x3.fffff8p-128f : 0x4p-128f : inexact += fma upward flt-32 0x8p-152f 0x8.8p-4f 0x3.fffff8p-128f : 0x4p-128f : inexact underflow:before-rounding errno-erange-ok:before-rounding = fma downward dbl-64 0x8p-152 0x8.8p-4 0x3.fffff8p-128 : 0x3.fffffc4p-128 : = fma tonearest dbl-64 0x8p-152 0x8.8p-4 0x3.fffff8p-128 : 0x3.fffffc4p-128 : = fma towardzero dbl-64 0x8p-152 0x8.8p-4 0x3.fffff8p-128 : 0x3.fffffc4p-128 : @@ -104075,8 +104070,7 @@ fma 0x1p-149 0x1.1p-1 0x0.fffffep-126 = fma towardzero ldbl-128ibm 0x8p-152L 0x8.8p-4L 0x3.fffff8p-128L : 0x3.fffffc4p-128L : = fma upward ldbl-128ibm 0x8p-152L 0x8.8p-4L 0x3.fffff8p-128L : 0x3.fffffc4p-128L : fma -0x1p-149 0x1.1p-1 -0x0.fffffep-126 -= fma downward flt-32:before-rounding -0x8p-152f 0x8.8p-4f -0x3.fffff8p-128f : -0x4p-128f : inexact underflow errno-erange-ok -= fma downward flt-32:after-rounding -0x8p-152f 0x8.8p-4f -0x3.fffff8p-128f : -0x4p-128f : inexact += fma downward flt-32 -0x8p-152f 0x8.8p-4f -0x3.fffff8p-128f : -0x4p-128f : inexact underflow:before-rounding errno-erange-ok:before-rounding = fma tonearest flt-32 -0x8p-152f 0x8.8p-4f -0x3.fffff8p-128f : -0x4p-128f : inexact underflow errno-erange-ok = fma towardzero flt-32 -0x8p-152f 0x8.8p-4f -0x3.fffff8p-128f : -0x3.fffff8p-128f : inexact underflow errno-erange-ok = fma upward flt-32 -0x8p-152f 0x8.8p-4f -0x3.fffff8p-128f : -0x3.fffff8p-128f : inexact underflow errno-erange-ok @@ -104227,11 +104221,9 @@ fma 0x1p-149 0x1p-149 0x1p-126 = fma upward ldbl-128ibm 0x8p-152L 0x8p-152L 0x4p-128L : 0x4.00000000000000000000000002p-128L : inexact fma 0x1p-149 -0x1p-149 0x1p-126 = fma downward flt-32 0x8p-152f -0x8p-152f 0x4p-128f : 0x3.fffff8p-128f : inexact underflow errno-erange-ok -= fma tonearest flt-32:before-rounding 0x8p-152f -0x8p-152f 0x4p-128f : 0x4p-128f : inexact underflow errno-erange-ok -= fma tonearest flt-32:after-rounding 0x8p-152f -0x8p-152f 0x4p-128f : 0x4p-128f : inexact += fma tonearest flt-32 0x8p-152f -0x8p-152f 0x4p-128f : 0x4p-128f : inexact underflow:before-rounding errno-erange-ok:before-rounding = fma towardzero flt-32 0x8p-152f -0x8p-152f 0x4p-128f : 0x3.fffff8p-128f : inexact underflow errno-erange-ok -= fma upward flt-32:before-rounding 0x8p-152f -0x8p-152f 0x4p-128f : 0x4p-128f : inexact underflow errno-erange-ok -= fma upward flt-32:after-rounding 0x8p-152f -0x8p-152f 0x4p-128f : 0x4p-128f : inexact += fma upward flt-32 0x8p-152f -0x8p-152f 0x4p-128f : 0x4p-128f : inexact underflow:before-rounding errno-erange-ok:before-rounding = fma downward dbl-64 0x8p-152 -0x8p-152 0x4p-128 : 0x3.ffffffffffffep-128 : inexact = fma tonearest dbl-64 0x8p-152 -0x8p-152 0x4p-128 : 0x4p-128 : inexact = fma towardzero dbl-64 0x8p-152 -0x8p-152 0x4p-128 : 0x3.ffffffffffffep-128 : inexact @@ -104253,10 +104245,8 @@ fma 0x1p-149 -0x1p-149 0x1p-126 = fma towardzero ldbl-128ibm 0x8p-152L -0x8p-152L 0x4p-128L : 0x3.ffffffffffffffffffffffffffp-128L : inexact = fma upward ldbl-128ibm 0x8p-152L -0x8p-152L 0x4p-128L : 0x4p-128L : inexact fma 0x1p-149 0x1p-149 -0x1p-126 -= fma downward flt-32:before-rounding 0x8p-152f 0x8p-152f -0x4p-128f : -0x4p-128f : inexact underflow errno-erange-ok -= fma downward flt-32:after-rounding 0x8p-152f 0x8p-152f -0x4p-128f : -0x4p-128f : inexact -= fma tonearest flt-32:before-rounding 0x8p-152f 0x8p-152f -0x4p-128f : -0x4p-128f : inexact underflow errno-erange-ok -= fma tonearest flt-32:after-rounding 0x8p-152f 0x8p-152f -0x4p-128f : -0x4p-128f : inexact += fma downward flt-32 0x8p-152f 0x8p-152f -0x4p-128f : -0x4p-128f : inexact underflow:before-rounding errno-erange-ok:before-rounding += fma tonearest flt-32 0x8p-152f 0x8p-152f -0x4p-128f : -0x4p-128f : inexact underflow:before-rounding errno-erange-ok:before-rounding = fma towardzero flt-32 0x8p-152f 0x8p-152f -0x4p-128f : -0x3.fffff8p-128f : inexact underflow errno-erange-ok = fma upward flt-32 0x8p-152f 0x8p-152f -0x4p-128f : -0x3.fffff8p-128f : inexact underflow errno-erange-ok = fma downward dbl-64 0x8p-152 0x8p-152 -0x4p-128 : -0x4p-128 : inexact @@ -105268,11 +105258,9 @@ fma -0x1.4p-1022 0x1.0000000000002p-1 -0x1p-1024 = fma upward ldbl-128ibm -0x5p-1024L 0x8.000000000001p-4L -0x1p-1024L : -0x3.8000000000004p-1024L : inexact underflow errno-erange-ok fma 0x1.ffffffffffffcp-1022 0x1.0000000000001p-1 0x1p-1074 = fma downward dbl-64 0x7.ffffffffffffp-1024 0x8.0000000000008p-4 0x4p-1076 : 0x3.ffffffffffffcp-1024 : inexact underflow errno-erange-ok -= fma tonearest dbl-64:before-rounding 0x7.ffffffffffffp-1024 0x8.0000000000008p-4 0x4p-1076 : 0x4p-1024 : inexact underflow errno-erange-ok -= fma tonearest dbl-64:after-rounding 0x7.ffffffffffffp-1024 0x8.0000000000008p-4 0x4p-1076 : 0x4p-1024 : inexact += fma tonearest dbl-64 0x7.ffffffffffffp-1024 0x8.0000000000008p-4 0x4p-1076 : 0x4p-1024 : inexact underflow:before-rounding errno-erange-ok:before-rounding = fma towardzero dbl-64 0x7.ffffffffffffp-1024 0x8.0000000000008p-4 0x4p-1076 : 0x3.ffffffffffffcp-1024 : inexact underflow errno-erange-ok -= fma upward dbl-64:before-rounding 0x7.ffffffffffffp-1024 0x8.0000000000008p-4 0x4p-1076 : 0x4p-1024 : inexact underflow errno-erange-ok -= fma upward dbl-64:after-rounding 0x7.ffffffffffffp-1024 0x8.0000000000008p-4 0x4p-1076 : 0x4p-1024 : inexact += fma upward dbl-64 0x7.ffffffffffffp-1024 0x8.0000000000008p-4 0x4p-1076 : 0x4p-1024 : inexact underflow:before-rounding errno-erange-ok:before-rounding = fma downward ldbl-96-intel 0x7.ffffffffffffp-1024L 0x8.0000000000008p-4L 0x4p-1076L : 0x3.fffffffffffffffcp-1024L : inexact = fma tonearest ldbl-96-intel 0x7.ffffffffffffp-1024L 0x8.0000000000008p-4L 0x4p-1076L : 0x4p-1024L : inexact = fma towardzero ldbl-96-intel 0x7.ffffffffffffp-1024L 0x8.0000000000008p-4L 0x4p-1076L : 0x3.fffffffffffffffcp-1024L : inexact @@ -105290,10 +105278,8 @@ fma 0x1.ffffffffffffcp-1022 0x1.0000000000001p-1 0x1p-1074 = fma towardzero ldbl-128ibm 0x7.ffffffffffffp-1024L 0x8.0000000000008p-4L 0x4p-1076L : 0x3.ffffffffffffcp-1024L : inexact underflow errno-erange-ok = fma upward ldbl-128ibm 0x7.ffffffffffffp-1024L 0x8.0000000000008p-4L 0x4p-1076L : 0x4p-1024L : inexact underflow errno-erange-ok fma -0x1.ffffffffffffcp-1022 0x1.0000000000001p-1 -0x1p-1074 -= fma downward dbl-64:before-rounding -0x7.ffffffffffffp-1024 0x8.0000000000008p-4 -0x4p-1076 : -0x4p-1024 : inexact underflow errno-erange-ok -= fma downward dbl-64:after-rounding -0x7.ffffffffffffp-1024 0x8.0000000000008p-4 -0x4p-1076 : -0x4p-1024 : inexact -= fma tonearest dbl-64:before-rounding -0x7.ffffffffffffp-1024 0x8.0000000000008p-4 -0x4p-1076 : -0x4p-1024 : inexact underflow errno-erange-ok -= fma tonearest dbl-64:after-rounding -0x7.ffffffffffffp-1024 0x8.0000000000008p-4 -0x4p-1076 : -0x4p-1024 : inexact += fma downward dbl-64 -0x7.ffffffffffffp-1024 0x8.0000000000008p-4 -0x4p-1076 : -0x4p-1024 : inexact underflow:before-rounding errno-erange-ok:before-rounding += fma tonearest dbl-64 -0x7.ffffffffffffp-1024 0x8.0000000000008p-4 -0x4p-1076 : -0x4p-1024 : inexact underflow:before-rounding errno-erange-ok:before-rounding = fma towardzero dbl-64 -0x7.ffffffffffffp-1024 0x8.0000000000008p-4 -0x4p-1076 : -0x3.ffffffffffffcp-1024 : inexact underflow errno-erange-ok = fma upward dbl-64 -0x7.ffffffffffffp-1024 0x8.0000000000008p-4 -0x4p-1076 : -0x3.ffffffffffffcp-1024 : inexact underflow errno-erange-ok = fma downward ldbl-96-intel -0x7.ffffffffffffp-1024L 0x8.0000000000008p-4L -0x4p-1076L : -0x4p-1024L : inexact @@ -105358,8 +105344,7 @@ fma 0x1p-1074 0x1.1p-1 0x0.fffffffffffffp-1022 = fma downward dbl-64 0x4p-1076 0x8.8p-4 0x3.ffffffffffffcp-1024 : 0x3.ffffffffffffcp-1024 : inexact underflow errno-erange-ok = fma tonearest dbl-64 0x4p-1076 0x8.8p-4 0x3.ffffffffffffcp-1024 : 0x4p-1024 : inexact underflow errno-erange-ok = fma towardzero dbl-64 0x4p-1076 0x8.8p-4 0x3.ffffffffffffcp-1024 : 0x3.ffffffffffffcp-1024 : inexact underflow errno-erange-ok -= fma upward dbl-64:before-rounding 0x4p-1076 0x8.8p-4 0x3.ffffffffffffcp-1024 : 0x4p-1024 : inexact underflow errno-erange-ok -= fma upward dbl-64:after-rounding 0x4p-1076 0x8.8p-4 0x3.ffffffffffffcp-1024 : 0x4p-1024 : inexact += fma upward dbl-64 0x4p-1076 0x8.8p-4 0x3.ffffffffffffcp-1024 : 0x4p-1024 : inexact underflow:before-rounding errno-erange-ok:before-rounding = fma downward ldbl-96-intel 0x4p-1076L 0x8.8p-4L 0x3.ffffffffffffcp-1024L : 0x3.ffffffffffffe2p-1024L : = fma tonearest ldbl-96-intel 0x4p-1076L 0x8.8p-4L 0x3.ffffffffffffcp-1024L : 0x3.ffffffffffffe2p-1024L : = fma towardzero ldbl-96-intel 0x4p-1076L 0x8.8p-4L 0x3.ffffffffffffcp-1024L : 0x3.ffffffffffffe2p-1024L : @@ -105377,8 +105362,7 @@ fma 0x1p-1074 0x1.1p-1 0x0.fffffffffffffp-1022 = fma towardzero ldbl-128ibm 0x4p-1076L 0x8.8p-4L 0x3.ffffffffffffcp-1024L : 0x3.ffffffffffffcp-1024L : inexact underflow errno-erange-ok = fma upward ldbl-128ibm 0x4p-1076L 0x8.8p-4L 0x3.ffffffffffffcp-1024L : 0x4p-1024L : inexact underflow errno-erange-ok fma -0x1p-1074 0x1.1p-1 -0x0.fffffffffffffp-1022 -= fma downward dbl-64:before-rounding -0x4p-1076 0x8.8p-4 -0x3.ffffffffffffcp-1024 : -0x4p-1024 : inexact underflow errno-erange-ok -= fma downward dbl-64:after-rounding -0x4p-1076 0x8.8p-4 -0x3.ffffffffffffcp-1024 : -0x4p-1024 : inexact += fma downward dbl-64 -0x4p-1076 0x8.8p-4 -0x3.ffffffffffffcp-1024 : -0x4p-1024 : inexact underflow:before-rounding errno-erange-ok:before-rounding = fma tonearest dbl-64 -0x4p-1076 0x8.8p-4 -0x3.ffffffffffffcp-1024 : -0x4p-1024 : inexact underflow errno-erange-ok = fma towardzero dbl-64 -0x4p-1076 0x8.8p-4 -0x3.ffffffffffffcp-1024 : -0x3.ffffffffffffcp-1024 : inexact underflow errno-erange-ok = fma upward dbl-64 -0x4p-1076 0x8.8p-4 -0x3.ffffffffffffcp-1024 : -0x3.ffffffffffffcp-1024 : inexact underflow errno-erange-ok @@ -105505,11 +105489,9 @@ fma 0x1p-1074 0x1p-1074 0x1p-1022 = fma upward ldbl-128ibm 0x4p-1076L 0x4p-1076L 0x4p-1024L : 0x4.0000000000004p-1024L : inexact underflow errno-erange-ok fma 0x1p-1074 -0x1p-1074 0x1p-1022 = fma downward dbl-64 0x4p-1076 -0x4p-1076 0x4p-1024 : 0x3.ffffffffffffcp-1024 : inexact underflow errno-erange-ok -= fma tonearest dbl-64:before-rounding 0x4p-1076 -0x4p-1076 0x4p-1024 : 0x4p-1024 : inexact underflow errno-erange-ok -= fma tonearest dbl-64:after-rounding 0x4p-1076 -0x4p-1076 0x4p-1024 : 0x4p-1024 : inexact += fma tonearest dbl-64 0x4p-1076 -0x4p-1076 0x4p-1024 : 0x4p-1024 : inexact underflow:before-rounding errno-erange-ok:before-rounding = fma towardzero dbl-64 0x4p-1076 -0x4p-1076 0x4p-1024 : 0x3.ffffffffffffcp-1024 : inexact underflow errno-erange-ok -= fma upward dbl-64:before-rounding 0x4p-1076 -0x4p-1076 0x4p-1024 : 0x4p-1024 : inexact underflow errno-erange-ok -= fma upward dbl-64:after-rounding 0x4p-1076 -0x4p-1076 0x4p-1024 : 0x4p-1024 : inexact += fma upward dbl-64 0x4p-1076 -0x4p-1076 0x4p-1024 : 0x4p-1024 : inexact underflow:before-rounding errno-erange-ok:before-rounding = fma downward ldbl-96-intel 0x4p-1076L -0x4p-1076L 0x4p-1024L : 0x3.fffffffffffffffcp-1024L : inexact = fma tonearest ldbl-96-intel 0x4p-1076L -0x4p-1076L 0x4p-1024L : 0x4p-1024L : inexact = fma towardzero ldbl-96-intel 0x4p-1076L -0x4p-1076L 0x4p-1024L : 0x3.fffffffffffffffcp-1024L : inexact @@ -105527,10 +105509,8 @@ fma 0x1p-1074 -0x1p-1074 0x1p-1022 = fma towardzero ldbl-128ibm 0x4p-1076L -0x4p-1076L 0x4p-1024L : 0x3.ffffffffffffcp-1024L : inexact underflow errno-erange-ok = fma upward ldbl-128ibm 0x4p-1076L -0x4p-1076L 0x4p-1024L : 0x4p-1024L : inexact underflow errno-erange-ok fma 0x1p-1074 0x1p-1074 -0x1p-1022 -= fma downward dbl-64:before-rounding 0x4p-1076 0x4p-1076 -0x4p-1024 : -0x4p-1024 : inexact underflow errno-erange-ok -= fma downward dbl-64:after-rounding 0x4p-1076 0x4p-1076 -0x4p-1024 : -0x4p-1024 : inexact -= fma tonearest dbl-64:before-rounding 0x4p-1076 0x4p-1076 -0x4p-1024 : -0x4p-1024 : inexact underflow errno-erange-ok -= fma tonearest dbl-64:after-rounding 0x4p-1076 0x4p-1076 -0x4p-1024 : -0x4p-1024 : inexact += fma downward dbl-64 0x4p-1076 0x4p-1076 -0x4p-1024 : -0x4p-1024 : inexact underflow:before-rounding errno-erange-ok:before-rounding += fma tonearest dbl-64 0x4p-1076 0x4p-1076 -0x4p-1024 : -0x4p-1024 : inexact underflow:before-rounding errno-erange-ok:before-rounding = fma towardzero dbl-64 0x4p-1076 0x4p-1076 -0x4p-1024 : -0x3.ffffffffffffcp-1024 : inexact underflow errno-erange-ok = fma upward dbl-64 0x4p-1076 0x4p-1076 -0x4p-1024 : -0x3.ffffffffffffcp-1024 : inexact underflow errno-erange-ok = fma downward ldbl-96-intel 0x4p-1076L 0x4p-1076L -0x4p-1024L : -0x4p-1024L : inexact @@ -106096,36 +106076,28 @@ fma -0x1.4p-16382 0x1.0000000000000004p-1 -0x1p-16384 = fma upward ldbl-128 -0x5p-16384L 0x8.000000000000002p-4L -0x1p-16384L : -0x3.800000000000000ap-16384L : fma 0x1.fffffffffffffff8p-16382 0x1.0000000000000002p-1 0x1p-16445 = fma downward ldbl-96-intel 0x7.ffffffffffffffep-16384L 0x8.000000000000001p-4L 0x8p-16448L : 0x3.fffffffffffffff8p-16384L : inexact underflow errno-erange-ok -= fma tonearest ldbl-96-intel:before-rounding 0x7.ffffffffffffffep-16384L 0x8.000000000000001p-4L 0x8p-16448L : 0x4p-16384L : inexact underflow errno-erange-ok -= fma tonearest ldbl-96-intel:after-rounding 0x7.ffffffffffffffep-16384L 0x8.000000000000001p-4L 0x8p-16448L : 0x4p-16384L : inexact += fma tonearest ldbl-96-intel 0x7.ffffffffffffffep-16384L 0x8.000000000000001p-4L 0x8p-16448L : 0x4p-16384L : inexact underflow:before-rounding errno-erange-ok:before-rounding = fma towardzero ldbl-96-intel 0x7.ffffffffffffffep-16384L 0x8.000000000000001p-4L 0x8p-16448L : 0x3.fffffffffffffff8p-16384L : inexact underflow errno-erange-ok -= fma upward ldbl-96-intel:before-rounding 0x7.ffffffffffffffep-16384L 0x8.000000000000001p-4L 0x8p-16448L : 0x4p-16384L : inexact underflow errno-erange-ok -= fma upward ldbl-96-intel:after-rounding 0x7.ffffffffffffffep-16384L 0x8.000000000000001p-4L 0x8p-16448L : 0x4p-16384L : inexact += fma upward ldbl-96-intel 0x7.ffffffffffffffep-16384L 0x8.000000000000001p-4L 0x8p-16448L : 0x4p-16384L : inexact underflow:before-rounding errno-erange-ok:before-rounding = fma downward ldbl-96-m68k 0x7.ffffffffffffffep-16384L 0x8.000000000000001p-4L 0x8p-16448L : 0x3.fffffffffffffffcp-16384L : inexact = fma tonearest ldbl-96-m68k 0x7.ffffffffffffffep-16384L 0x8.000000000000001p-4L 0x8p-16448L : 0x4p-16384L : inexact = fma towardzero ldbl-96-m68k 0x7.ffffffffffffffep-16384L 0x8.000000000000001p-4L 0x8p-16448L : 0x3.fffffffffffffffcp-16384L : inexact = fma upward ldbl-96-m68k 0x7.ffffffffffffffep-16384L 0x8.000000000000001p-4L 0x8p-16448L : 0x4p-16384L : inexact = fma downward ldbl-128 0x7.ffffffffffffffep-16384L 0x8.000000000000001p-4L 0x8p-16448L : 0x3.fffffffffffffffffffffffffffcp-16384L : inexact underflow errno-erange-ok -= fma tonearest ldbl-128:before-rounding 0x7.ffffffffffffffep-16384L 0x8.000000000000001p-4L 0x8p-16448L : 0x4p-16384L : inexact underflow errno-erange-ok -= fma tonearest ldbl-128:after-rounding 0x7.ffffffffffffffep-16384L 0x8.000000000000001p-4L 0x8p-16448L : 0x4p-16384L : inexact += fma tonearest ldbl-128 0x7.ffffffffffffffep-16384L 0x8.000000000000001p-4L 0x8p-16448L : 0x4p-16384L : inexact underflow:before-rounding errno-erange-ok:before-rounding = fma towardzero ldbl-128 0x7.ffffffffffffffep-16384L 0x8.000000000000001p-4L 0x8p-16448L : 0x3.fffffffffffffffffffffffffffcp-16384L : inexact underflow errno-erange-ok -= fma upward ldbl-128:before-rounding 0x7.ffffffffffffffep-16384L 0x8.000000000000001p-4L 0x8p-16448L : 0x4p-16384L : inexact underflow errno-erange-ok -= fma upward ldbl-128:after-rounding 0x7.ffffffffffffffep-16384L 0x8.000000000000001p-4L 0x8p-16448L : 0x4p-16384L : inexact += fma upward ldbl-128 0x7.ffffffffffffffep-16384L 0x8.000000000000001p-4L 0x8p-16448L : 0x4p-16384L : inexact underflow:before-rounding errno-erange-ok:before-rounding fma -0x1.fffffffffffffff8p-16382 0x1.0000000000000002p-1 -0x1p-16445 -= fma downward ldbl-96-intel:before-rounding -0x7.ffffffffffffffep-16384L 0x8.000000000000001p-4L -0x8p-16448L : -0x4p-16384L : inexact underflow errno-erange-ok -= fma downward ldbl-96-intel:after-rounding -0x7.ffffffffffffffep-16384L 0x8.000000000000001p-4L -0x8p-16448L : -0x4p-16384L : inexact -= fma tonearest ldbl-96-intel:before-rounding -0x7.ffffffffffffffep-16384L 0x8.000000000000001p-4L -0x8p-16448L : -0x4p-16384L : inexact underflow errno-erange-ok -= fma tonearest ldbl-96-intel:after-rounding -0x7.ffffffffffffffep-16384L 0x8.000000000000001p-4L -0x8p-16448L : -0x4p-16384L : inexact += fma downward ldbl-96-intel -0x7.ffffffffffffffep-16384L 0x8.000000000000001p-4L -0x8p-16448L : -0x4p-16384L : inexact underflow:before-rounding errno-erange-ok:before-rounding += fma tonearest ldbl-96-intel -0x7.ffffffffffffffep-16384L 0x8.000000000000001p-4L -0x8p-16448L : -0x4p-16384L : inexact underflow:before-rounding errno-erange-ok:before-rounding = fma towardzero ldbl-96-intel -0x7.ffffffffffffffep-16384L 0x8.000000000000001p-4L -0x8p-16448L : -0x3.fffffffffffffff8p-16384L : inexact underflow errno-erange-ok = fma upward ldbl-96-intel -0x7.ffffffffffffffep-16384L 0x8.000000000000001p-4L -0x8p-16448L : -0x3.fffffffffffffff8p-16384L : inexact underflow errno-erange-ok = fma downward ldbl-96-m68k -0x7.ffffffffffffffep-16384L 0x8.000000000000001p-4L -0x8p-16448L : -0x4p-16384L : inexact = fma tonearest ldbl-96-m68k -0x7.ffffffffffffffep-16384L 0x8.000000000000001p-4L -0x8p-16448L : -0x4p-16384L : inexact = fma towardzero ldbl-96-m68k -0x7.ffffffffffffffep-16384L 0x8.000000000000001p-4L -0x8p-16448L : -0x3.fffffffffffffffcp-16384L : inexact = fma upward ldbl-96-m68k -0x7.ffffffffffffffep-16384L 0x8.000000000000001p-4L -0x8p-16448L : -0x3.fffffffffffffffcp-16384L : inexact -= fma downward ldbl-128:before-rounding -0x7.ffffffffffffffep-16384L 0x8.000000000000001p-4L -0x8p-16448L : -0x4p-16384L : inexact underflow errno-erange-ok -= fma downward ldbl-128:after-rounding -0x7.ffffffffffffffep-16384L 0x8.000000000000001p-4L -0x8p-16448L : -0x4p-16384L : inexact -= fma tonearest ldbl-128:before-rounding -0x7.ffffffffffffffep-16384L 0x8.000000000000001p-4L -0x8p-16448L : -0x4p-16384L : inexact underflow errno-erange-ok -= fma tonearest ldbl-128:after-rounding -0x7.ffffffffffffffep-16384L 0x8.000000000000001p-4L -0x8p-16448L : -0x4p-16384L : inexact += fma downward ldbl-128 -0x7.ffffffffffffffep-16384L 0x8.000000000000001p-4L -0x8p-16448L : -0x4p-16384L : inexact underflow:before-rounding errno-erange-ok:before-rounding += fma tonearest ldbl-128 -0x7.ffffffffffffffep-16384L 0x8.000000000000001p-4L -0x8p-16448L : -0x4p-16384L : inexact underflow:before-rounding errno-erange-ok:before-rounding = fma towardzero ldbl-128 -0x7.ffffffffffffffep-16384L 0x8.000000000000001p-4L -0x8p-16448L : -0x3.fffffffffffffffffffffffffffcp-16384L : inexact underflow errno-erange-ok = fma upward ldbl-128 -0x7.ffffffffffffffep-16384L 0x8.000000000000001p-4L -0x8p-16448L : -0x3.fffffffffffffffffffffffffffcp-16384L : inexact underflow errno-erange-ok fma 0x1p-16445 0x1p-1 0x0.fffffffffffffffep-16382 @@ -106158,8 +106130,7 @@ fma 0x1p-16445 0x1.1p-1 0x0.fffffffffffffffep-16382 = fma downward ldbl-96-intel 0x8p-16448L 0x8.8p-4L 0x3.fffffffffffffff8p-16384L : 0x3.fffffffffffffff8p-16384L : inexact underflow errno-erange-ok = fma tonearest ldbl-96-intel 0x8p-16448L 0x8.8p-4L 0x3.fffffffffffffff8p-16384L : 0x4p-16384L : inexact underflow errno-erange-ok = fma towardzero ldbl-96-intel 0x8p-16448L 0x8.8p-4L 0x3.fffffffffffffff8p-16384L : 0x3.fffffffffffffff8p-16384L : inexact underflow errno-erange-ok -= fma upward ldbl-96-intel:before-rounding 0x8p-16448L 0x8.8p-4L 0x3.fffffffffffffff8p-16384L : 0x4p-16384L : inexact underflow errno-erange-ok -= fma upward ldbl-96-intel:after-rounding 0x8p-16448L 0x8.8p-4L 0x3.fffffffffffffff8p-16384L : 0x4p-16384L : inexact += fma upward ldbl-96-intel 0x8p-16448L 0x8.8p-4L 0x3.fffffffffffffff8p-16384L : 0x4p-16384L : inexact underflow:before-rounding errno-erange-ok:before-rounding = fma downward ldbl-96-m68k 0x8p-16448L 0x8.8p-4L 0x3.fffffffffffffff8p-16384L : 0x3.fffffffffffffffcp-16384L : inexact = fma tonearest ldbl-96-m68k 0x8p-16448L 0x8.8p-4L 0x3.fffffffffffffff8p-16384L : 0x3.fffffffffffffffcp-16384L : inexact = fma towardzero ldbl-96-m68k 0x8p-16448L 0x8.8p-4L 0x3.fffffffffffffff8p-16384L : 0x3.fffffffffffffffcp-16384L : inexact @@ -106169,8 +106140,7 @@ fma 0x1p-16445 0x1.1p-1 0x0.fffffffffffffffep-16382 = fma towardzero ldbl-128 0x8p-16448L 0x8.8p-4L 0x3.fffffffffffffff8p-16384L : 0x3.fffffffffffffffc4p-16384L : = fma upward ldbl-128 0x8p-16448L 0x8.8p-4L 0x3.fffffffffffffff8p-16384L : 0x3.fffffffffffffffc4p-16384L : fma -0x1p-16445 0x1.1p-1 -0x0.fffffffffffffffep-16382 -= fma downward ldbl-96-intel:before-rounding -0x8p-16448L 0x8.8p-4L -0x3.fffffffffffffff8p-16384L : -0x4p-16384L : inexact underflow errno-erange-ok -= fma downward ldbl-96-intel:after-rounding -0x8p-16448L 0x8.8p-4L -0x3.fffffffffffffff8p-16384L : -0x4p-16384L : inexact += fma downward ldbl-96-intel -0x8p-16448L 0x8.8p-4L -0x3.fffffffffffffff8p-16384L : -0x4p-16384L : inexact underflow:before-rounding errno-erange-ok:before-rounding = fma tonearest ldbl-96-intel -0x8p-16448L 0x8.8p-4L -0x3.fffffffffffffff8p-16384L : -0x4p-16384L : inexact underflow errno-erange-ok = fma towardzero ldbl-96-intel -0x8p-16448L 0x8.8p-4L -0x3.fffffffffffffff8p-16384L : -0x3.fffffffffffffff8p-16384L : inexact underflow errno-erange-ok = fma upward ldbl-96-intel -0x8p-16448L 0x8.8p-4L -0x3.fffffffffffffff8p-16384L : -0x3.fffffffffffffff8p-16384L : inexact underflow errno-erange-ok @@ -106249,36 +106219,28 @@ fma 0x1p-16445 0x1p-16445 0x1p-16382 = fma upward ldbl-128 0x8p-16448L 0x8p-16448L 0x4p-16384L : 0x4.0000000000000000000000000004p-16384L : inexact fma 0x1p-16445 -0x1p-16445 0x1p-16382 = fma downward ldbl-96-intel 0x8p-16448L -0x8p-16448L 0x4p-16384L : 0x3.fffffffffffffff8p-16384L : inexact underflow errno-erange-ok -= fma tonearest ldbl-96-intel:before-rounding 0x8p-16448L -0x8p-16448L 0x4p-16384L : 0x4p-16384L : inexact underflow errno-erange-ok -= fma tonearest ldbl-96-intel:after-rounding 0x8p-16448L -0x8p-16448L 0x4p-16384L : 0x4p-16384L : inexact += fma tonearest ldbl-96-intel 0x8p-16448L -0x8p-16448L 0x4p-16384L : 0x4p-16384L : inexact underflow:before-rounding errno-erange-ok:before-rounding = fma towardzero ldbl-96-intel 0x8p-16448L -0x8p-16448L 0x4p-16384L : 0x3.fffffffffffffff8p-16384L : inexact underflow errno-erange-ok -= fma upward ldbl-96-intel:before-rounding 0x8p-16448L -0x8p-16448L 0x4p-16384L : 0x4p-16384L : inexact underflow errno-erange-ok -= fma upward ldbl-96-intel:after-rounding 0x8p-16448L -0x8p-16448L 0x4p-16384L : 0x4p-16384L : inexact += fma upward ldbl-96-intel 0x8p-16448L -0x8p-16448L 0x4p-16384L : 0x4p-16384L : inexact underflow:before-rounding errno-erange-ok:before-rounding = fma downward ldbl-96-m68k 0x8p-16448L -0x8p-16448L 0x4p-16384L : 0x3.fffffffffffffffcp-16384L : inexact = fma tonearest ldbl-96-m68k 0x8p-16448L -0x8p-16448L 0x4p-16384L : 0x4p-16384L : inexact = fma towardzero ldbl-96-m68k 0x8p-16448L -0x8p-16448L 0x4p-16384L : 0x3.fffffffffffffffcp-16384L : inexact = fma upward ldbl-96-m68k 0x8p-16448L -0x8p-16448L 0x4p-16384L : 0x4p-16384L : inexact = fma downward ldbl-128 0x8p-16448L -0x8p-16448L 0x4p-16384L : 0x3.fffffffffffffffffffffffffffcp-16384L : inexact underflow errno-erange-ok -= fma tonearest ldbl-128:before-rounding 0x8p-16448L -0x8p-16448L 0x4p-16384L : 0x4p-16384L : inexact underflow errno-erange-ok -= fma tonearest ldbl-128:after-rounding 0x8p-16448L -0x8p-16448L 0x4p-16384L : 0x4p-16384L : inexact += fma tonearest ldbl-128 0x8p-16448L -0x8p-16448L 0x4p-16384L : 0x4p-16384L : inexact underflow:before-rounding errno-erange-ok:before-rounding = fma towardzero ldbl-128 0x8p-16448L -0x8p-16448L 0x4p-16384L : 0x3.fffffffffffffffffffffffffffcp-16384L : inexact underflow errno-erange-ok -= fma upward ldbl-128:before-rounding 0x8p-16448L -0x8p-16448L 0x4p-16384L : 0x4p-16384L : inexact underflow errno-erange-ok -= fma upward ldbl-128:after-rounding 0x8p-16448L -0x8p-16448L 0x4p-16384L : 0x4p-16384L : inexact += fma upward ldbl-128 0x8p-16448L -0x8p-16448L 0x4p-16384L : 0x4p-16384L : inexact underflow:before-rounding errno-erange-ok:before-rounding fma 0x1p-16445 0x1p-16445 -0x1p-16382 -= fma downward ldbl-96-intel:before-rounding 0x8p-16448L 0x8p-16448L -0x4p-16384L : -0x4p-16384L : inexact underflow errno-erange-ok -= fma downward ldbl-96-intel:after-rounding 0x8p-16448L 0x8p-16448L -0x4p-16384L : -0x4p-16384L : inexact -= fma tonearest ldbl-96-intel:before-rounding 0x8p-16448L 0x8p-16448L -0x4p-16384L : -0x4p-16384L : inexact underflow errno-erange-ok -= fma tonearest ldbl-96-intel:after-rounding 0x8p-16448L 0x8p-16448L -0x4p-16384L : -0x4p-16384L : inexact += fma downward ldbl-96-intel 0x8p-16448L 0x8p-16448L -0x4p-16384L : -0x4p-16384L : inexact underflow:before-rounding errno-erange-ok:before-rounding += fma tonearest ldbl-96-intel 0x8p-16448L 0x8p-16448L -0x4p-16384L : -0x4p-16384L : inexact underflow:before-rounding errno-erange-ok:before-rounding = fma towardzero ldbl-96-intel 0x8p-16448L 0x8p-16448L -0x4p-16384L : -0x3.fffffffffffffff8p-16384L : inexact underflow errno-erange-ok = fma upward ldbl-96-intel 0x8p-16448L 0x8p-16448L -0x4p-16384L : -0x3.fffffffffffffff8p-16384L : inexact underflow errno-erange-ok = fma downward ldbl-96-m68k 0x8p-16448L 0x8p-16448L -0x4p-16384L : -0x4p-16384L : inexact = fma tonearest ldbl-96-m68k 0x8p-16448L 0x8p-16448L -0x4p-16384L : -0x4p-16384L : inexact = fma towardzero ldbl-96-m68k 0x8p-16448L 0x8p-16448L -0x4p-16384L : -0x3.fffffffffffffffcp-16384L : inexact = fma upward ldbl-96-m68k 0x8p-16448L 0x8p-16448L -0x4p-16384L : -0x3.fffffffffffffffcp-16384L : inexact -= fma downward ldbl-128:before-rounding 0x8p-16448L 0x8p-16448L -0x4p-16384L : -0x4p-16384L : inexact underflow errno-erange-ok -= fma downward ldbl-128:after-rounding 0x8p-16448L 0x8p-16448L -0x4p-16384L : -0x4p-16384L : inexact -= fma tonearest ldbl-128:before-rounding 0x8p-16448L 0x8p-16448L -0x4p-16384L : -0x4p-16384L : inexact underflow errno-erange-ok -= fma tonearest ldbl-128:after-rounding 0x8p-16448L 0x8p-16448L -0x4p-16384L : -0x4p-16384L : inexact += fma downward ldbl-128 0x8p-16448L 0x8p-16448L -0x4p-16384L : -0x4p-16384L : inexact underflow:before-rounding errno-erange-ok:before-rounding += fma tonearest ldbl-128 0x8p-16448L 0x8p-16448L -0x4p-16384L : -0x4p-16384L : inexact underflow:before-rounding errno-erange-ok:before-rounding = fma towardzero ldbl-128 0x8p-16448L 0x8p-16448L -0x4p-16384L : -0x3.fffffffffffffffffffffffffffcp-16384L : inexact underflow errno-erange-ok = fma upward ldbl-128 0x8p-16448L 0x8p-16448L -0x4p-16384L : -0x3.fffffffffffffffffffffffffffcp-16384L : inexact underflow errno-erange-ok fma 0x1p-16445 -0x1p-16445 -0x1p-16382 @@ -106664,16 +106626,12 @@ fma -0x1.4p-16382 0x1.0000000000000000000000000002p-1 -0x1p-16384 = fma upward ldbl-128 -0x5p-16384L 0x8.000000000000000000000000001p-4L -0x1p-16384L : -0x3.8000000000000000000000000004p-16384L : inexact underflow errno-erange-ok fma 0x1.fffffffffffffffffffffffffffcp-16382 0x1.0000000000000000000000000001p-1 0x1p-16494 = fma downward ldbl-128 0x7.fffffffffffffffffffffffffffp-16384L 0x8.0000000000000000000000000008p-4L 0x4p-16496L : 0x3.fffffffffffffffffffffffffffcp-16384L : inexact underflow errno-erange-ok -= fma tonearest ldbl-128:before-rounding 0x7.fffffffffffffffffffffffffffp-16384L 0x8.0000000000000000000000000008p-4L 0x4p-16496L : 0x4p-16384L : inexact underflow errno-erange-ok -= fma tonearest ldbl-128:after-rounding 0x7.fffffffffffffffffffffffffffp-16384L 0x8.0000000000000000000000000008p-4L 0x4p-16496L : 0x4p-16384L : inexact += fma tonearest ldbl-128 0x7.fffffffffffffffffffffffffffp-16384L 0x8.0000000000000000000000000008p-4L 0x4p-16496L : 0x4p-16384L : inexact underflow:before-rounding errno-erange-ok:before-rounding = fma towardzero ldbl-128 0x7.fffffffffffffffffffffffffffp-16384L 0x8.0000000000000000000000000008p-4L 0x4p-16496L : 0x3.fffffffffffffffffffffffffffcp-16384L : inexact underflow errno-erange-ok -= fma upward ldbl-128:before-rounding 0x7.fffffffffffffffffffffffffffp-16384L 0x8.0000000000000000000000000008p-4L 0x4p-16496L : 0x4p-16384L : inexact underflow errno-erange-ok -= fma upward ldbl-128:after-rounding 0x7.fffffffffffffffffffffffffffp-16384L 0x8.0000000000000000000000000008p-4L 0x4p-16496L : 0x4p-16384L : inexact += fma upward ldbl-128 0x7.fffffffffffffffffffffffffffp-16384L 0x8.0000000000000000000000000008p-4L 0x4p-16496L : 0x4p-16384L : inexact underflow:before-rounding errno-erange-ok:before-rounding fma -0x1.fffffffffffffffffffffffffffcp-16382 0x1.0000000000000000000000000001p-1 -0x1p-16494 -= fma downward ldbl-128:before-rounding -0x7.fffffffffffffffffffffffffffp-16384L 0x8.0000000000000000000000000008p-4L -0x4p-16496L : -0x4p-16384L : inexact underflow errno-erange-ok -= fma downward ldbl-128:after-rounding -0x7.fffffffffffffffffffffffffffp-16384L 0x8.0000000000000000000000000008p-4L -0x4p-16496L : -0x4p-16384L : inexact -= fma tonearest ldbl-128:before-rounding -0x7.fffffffffffffffffffffffffffp-16384L 0x8.0000000000000000000000000008p-4L -0x4p-16496L : -0x4p-16384L : inexact underflow errno-erange-ok -= fma tonearest ldbl-128:after-rounding -0x7.fffffffffffffffffffffffffffp-16384L 0x8.0000000000000000000000000008p-4L -0x4p-16496L : -0x4p-16384L : inexact += fma downward ldbl-128 -0x7.fffffffffffffffffffffffffffp-16384L 0x8.0000000000000000000000000008p-4L -0x4p-16496L : -0x4p-16384L : inexact underflow:before-rounding errno-erange-ok:before-rounding += fma tonearest ldbl-128 -0x7.fffffffffffffffffffffffffffp-16384L 0x8.0000000000000000000000000008p-4L -0x4p-16496L : -0x4p-16384L : inexact underflow:before-rounding errno-erange-ok:before-rounding = fma towardzero ldbl-128 -0x7.fffffffffffffffffffffffffffp-16384L 0x8.0000000000000000000000000008p-4L -0x4p-16496L : -0x3.fffffffffffffffffffffffffffcp-16384L : inexact underflow errno-erange-ok = fma upward ldbl-128 -0x7.fffffffffffffffffffffffffffp-16384L 0x8.0000000000000000000000000008p-4L -0x4p-16496L : -0x3.fffffffffffffffffffffffffffcp-16384L : inexact underflow errno-erange-ok fma 0x1p-16494 0x1p-1 0x0.ffffffffffffffffffffffffffffp-16382 @@ -106690,11 +106648,9 @@ fma 0x1p-16494 0x1.1p-1 0x0.ffffffffffffffffffffffffffffp-16382 = fma downward ldbl-128 0x4p-16496L 0x8.8p-4L 0x3.fffffffffffffffffffffffffffcp-16384L : 0x3.fffffffffffffffffffffffffffcp-16384L : inexact underflow errno-erange-ok = fma tonearest ldbl-128 0x4p-16496L 0x8.8p-4L 0x3.fffffffffffffffffffffffffffcp-16384L : 0x4p-16384L : inexact underflow errno-erange-ok = fma towardzero ldbl-128 0x4p-16496L 0x8.8p-4L 0x3.fffffffffffffffffffffffffffcp-16384L : 0x3.fffffffffffffffffffffffffffcp-16384L : inexact underflow errno-erange-ok -= fma upward ldbl-128:before-rounding 0x4p-16496L 0x8.8p-4L 0x3.fffffffffffffffffffffffffffcp-16384L : 0x4p-16384L : inexact underflow errno-erange-ok -= fma upward ldbl-128:after-rounding 0x4p-16496L 0x8.8p-4L 0x3.fffffffffffffffffffffffffffcp-16384L : 0x4p-16384L : inexact += fma upward ldbl-128 0x4p-16496L 0x8.8p-4L 0x3.fffffffffffffffffffffffffffcp-16384L : 0x4p-16384L : inexact underflow:before-rounding errno-erange-ok:before-rounding fma -0x1p-16494 0x1.1p-1 -0x0.ffffffffffffffffffffffffffffp-16382 -= fma downward ldbl-128:before-rounding -0x4p-16496L 0x8.8p-4L -0x3.fffffffffffffffffffffffffffcp-16384L : -0x4p-16384L : inexact underflow errno-erange-ok -= fma downward ldbl-128:after-rounding -0x4p-16496L 0x8.8p-4L -0x3.fffffffffffffffffffffffffffcp-16384L : -0x4p-16384L : inexact += fma downward ldbl-128 -0x4p-16496L 0x8.8p-4L -0x3.fffffffffffffffffffffffffffcp-16384L : -0x4p-16384L : inexact underflow:before-rounding errno-erange-ok:before-rounding = fma tonearest ldbl-128 -0x4p-16496L 0x8.8p-4L -0x3.fffffffffffffffffffffffffffcp-16384L : -0x4p-16384L : inexact underflow errno-erange-ok = fma towardzero ldbl-128 -0x4p-16496L 0x8.8p-4L -0x3.fffffffffffffffffffffffffffcp-16384L : -0x3.fffffffffffffffffffffffffffcp-16384L : inexact underflow errno-erange-ok = fma upward ldbl-128 -0x4p-16496L 0x8.8p-4L -0x3.fffffffffffffffffffffffffffcp-16384L : -0x3.fffffffffffffffffffffffffffcp-16384L : inexact underflow errno-erange-ok @@ -106725,16 +106681,12 @@ fma 0x1p-16494 0x1p-16494 0x1p-16382 = fma upward ldbl-128 0x4p-16496L 0x4p-16496L 0x4p-16384L : 0x4.0000000000000000000000000004p-16384L : inexact fma 0x1p-16494 -0x1p-16494 0x1p-16382 = fma downward ldbl-128 0x4p-16496L -0x4p-16496L 0x4p-16384L : 0x3.fffffffffffffffffffffffffffcp-16384L : inexact underflow errno-erange-ok -= fma tonearest ldbl-128:before-rounding 0x4p-16496L -0x4p-16496L 0x4p-16384L : 0x4p-16384L : inexact underflow errno-erange-ok -= fma tonearest ldbl-128:after-rounding 0x4p-16496L -0x4p-16496L 0x4p-16384L : 0x4p-16384L : inexact += fma tonearest ldbl-128 0x4p-16496L -0x4p-16496L 0x4p-16384L : 0x4p-16384L : inexact underflow:before-rounding errno-erange-ok:before-rounding = fma towardzero ldbl-128 0x4p-16496L -0x4p-16496L 0x4p-16384L : 0x3.fffffffffffffffffffffffffffcp-16384L : inexact underflow errno-erange-ok -= fma upward ldbl-128:before-rounding 0x4p-16496L -0x4p-16496L 0x4p-16384L : 0x4p-16384L : inexact underflow errno-erange-ok -= fma upward ldbl-128:after-rounding 0x4p-16496L -0x4p-16496L 0x4p-16384L : 0x4p-16384L : inexact += fma upward ldbl-128 0x4p-16496L -0x4p-16496L 0x4p-16384L : 0x4p-16384L : inexact underflow:before-rounding errno-erange-ok:before-rounding fma 0x1p-16494 0x1p-16494 -0x1p-16382 -= fma downward ldbl-128:before-rounding 0x4p-16496L 0x4p-16496L -0x4p-16384L : -0x4p-16384L : inexact underflow errno-erange-ok -= fma downward ldbl-128:after-rounding 0x4p-16496L 0x4p-16496L -0x4p-16384L : -0x4p-16384L : inexact -= fma tonearest ldbl-128:before-rounding 0x4p-16496L 0x4p-16496L -0x4p-16384L : -0x4p-16384L : inexact underflow errno-erange-ok -= fma tonearest ldbl-128:after-rounding 0x4p-16496L 0x4p-16496L -0x4p-16384L : -0x4p-16384L : inexact += fma downward ldbl-128 0x4p-16496L 0x4p-16496L -0x4p-16384L : -0x4p-16384L : inexact underflow:before-rounding errno-erange-ok:before-rounding += fma tonearest ldbl-128 0x4p-16496L 0x4p-16496L -0x4p-16384L : -0x4p-16384L : inexact underflow:before-rounding errno-erange-ok:before-rounding = fma towardzero ldbl-128 0x4p-16496L 0x4p-16496L -0x4p-16384L : -0x3.fffffffffffffffffffffffffffcp-16384L : inexact underflow errno-erange-ok = fma upward ldbl-128 0x4p-16496L 0x4p-16496L -0x4p-16384L : -0x3.fffffffffffffffffffffffffffcp-16384L : inexact underflow errno-erange-ok fma 0x1p-16494 -0x1p-16494 -0x1p-16382 diff --git a/math/gen-auto-libm-tests.c b/math/gen-auto-libm-tests.c index eeec2ab6f0..61097e480c 100644 --- a/math/gen-auto-libm-tests.c +++ b/math/gen-auto-libm-tests.c @@ -104,22 +104,22 @@ ... : flags". rounding-mode is "tonearest", "towardzero", "upward" or "downward". format is a name from the floating_point_formats array, possibly followed by a sequence of ":flag" for flags from - "long32", "long64", "before-rounding" and "after-rounding" (the - last two indicating tests where expectations for underflow - exceptions depend on how the architecture detects tininess). - Inputs and outputs are specified as hex floats with the required - suffix for the floating-point type, or plus_infty or minus_infty - for infinite expected results, or as integer constant expressions - (not necessarily with the right type) or IGNORE for integer inputs - and outputs. Flags are "no-test-inline", "xfail", "<exception>", - "<exception>-ok", "errno-<value>", "errno-<value>-ok", where - "<exception>" and "errno-<value>" are unconditional, indicating - that a correct result means the given exception should be raised or - errno should be set to the given value, and other settings may be - conditional or unconditional; "-ok" means not to test for the given - exception or errno value (whether because it was marked as possibly - missing or spurious, or because the calculation of correct results - indicated it was optional). */ + "long32" and "long64". Inputs and outputs are specified as hex + floats with the required suffix for the floating-point type, or + plus_infty or minus_infty for infinite expected results, or as + integer constant expressions (not necessarily with the right type) + or IGNORE for integer inputs and outputs. Flags are + "no-test-inline", "xfail", "<exception>", "<exception>-ok", + "errno-<value>", "errno-<value>-ok", which may be unconditional or + conditional. "<exception>" indicates that a correct result means + the given exception should be raised. "errno-<value>" indicates + that a correct result means errno should be set to the given value. + "-ok" means not to test for the given exception or errno value + (whether because it was marked as possibly missing or spurious, or + because the calculation of correct results indicated it was + optional). Conditions "before-rounding" and "after-rounding" + indicate tests where expectations for underflow exceptions depend + on how the architecture detects tininess. */ #define _GNU_SOURCE @@ -1882,224 +1882,246 @@ output_for_one_input_case (FILE *fp, const char *filename, test_function *tf, { bool before_after_matters = tf->exact && merged_exc_before[m] != merged_exc_after[m]; - for (int after = 0; after <= 1; after++) + if (before_after_matters) { - if (after == 1 && !before_after_matters) - continue; - const char *after_cond; - if (before_after_matters) - after_cond = (after - ? ":after-rounding" - : ":before-rounding"); - else - after_cond = ""; - unsigned int merged_exc = (after - ? merged_exc_after[m] - : merged_exc_before[m]); - if (fprintf (fp, "= %s %s %s%s%s", tf->name, - rounding_modes[m].name, fp_formats[f].name, - long_cond, after_cond) < 0) - error (EXIT_FAILURE, errno, "write to '%s'", filename); - /* Print inputs. */ - for (size_t i = 0; i < tf->num_args; i++) - output_generic_value (fp, filename, &inputs[i], false, - tf->arg_types[i], f, long_bits); - if (fputs (" :", fp) < 0) - error (EXIT_FAILURE, errno, "write to '%s'", filename); - /* Print outputs. */ - bool must_erange = false; - for (size_t i = 0; i < tf->num_ret; i++) + assert ((merged_exc_before[m] ^ merged_exc_after[m]) + == (1U << exc_underflow)); + assert ((merged_exc_before[m] & (1U << exc_underflow)) != 0); + } + unsigned int merged_exc = merged_exc_before[m]; + if (fprintf (fp, "= %s %s %s%s", tf->name, + rounding_modes[m].name, fp_formats[f].name, + long_cond) < 0) + error (EXIT_FAILURE, errno, "write to '%s'", filename); + /* Print inputs. */ + for (size_t i = 0; i < tf->num_args; i++) + output_generic_value (fp, filename, &inputs[i], false, + tf->arg_types[i], f, long_bits); + if (fputs (" :", fp) < 0) + error (EXIT_FAILURE, errno, "write to '%s'", filename); + /* Print outputs. */ + bool must_erange = false; + for (size_t i = 0; i < tf->num_ret; i++) + { + generic_value g; + g.type = generic_outputs[i].type; + switch (g.type) { - generic_value g; - g.type = generic_outputs[i].type; - switch (g.type) - { - case gtype_fp: - if (mpfr_inf_p (all_res[i][m]) - && (all_exc_before[i][m] - & (1U << exc_overflow)) != 0) - must_erange = true; - if (mpfr_zero_p (all_res[i][m]) - && (tf->exact - || mpfr_zero_p (all_res[i][rm_tonearest])) - && (all_exc_before[i][m] - & (1U << exc_underflow)) != 0) - must_erange = true; - mpfr_init2 (g.value.f, fp_formats[f].mant_dig); - assert_exact (mpfr_set (g.value.f, all_res[i][m], - MPFR_RNDN)); - break; + case gtype_fp: + if (mpfr_inf_p (all_res[i][m]) + && (all_exc_before[i][m] + & (1U << exc_overflow)) != 0) + must_erange = true; + if (mpfr_zero_p (all_res[i][m]) + && (tf->exact + || mpfr_zero_p (all_res[i][rm_tonearest])) + && (all_exc_before[i][m] + & (1U << exc_underflow)) != 0) + must_erange = true; + mpfr_init2 (g.value.f, fp_formats[f].mant_dig); + assert_exact (mpfr_set (g.value.f, all_res[i][m], + MPFR_RNDN)); + break; - case gtype_int: - mpz_init (g.value.i); - mpz_set (g.value.i, generic_outputs[i].value.i); - break; + case gtype_int: + mpz_init (g.value.i); + mpz_set (g.value.i, generic_outputs[i].value.i); + break; - default: - abort (); - } - output_generic_value (fp, filename, &g, ignore_output[i], - tf->ret_types[i], f, long_bits); - generic_value_free (&g); + default: + abort (); } - if (fputs (" :", fp) < 0) - error (EXIT_FAILURE, errno, "write to '%s'", filename); - /* Print miscellaneous flags (passed through from - input). */ - for (size_t i = 0; i < it->num_flags; i++) - switch (it->flags[i].type) - { - case flag_no_test_inline: - case flag_xfail: - if (fprintf (fp, " %s%s", - input_flags[it->flags[i].type], - (it->flags[i].cond - ? it->flags[i].cond - : "")) < 0) + output_generic_value (fp, filename, &g, ignore_output[i], + tf->ret_types[i], f, long_bits); + generic_value_free (&g); + } + if (fputs (" :", fp) < 0) + error (EXIT_FAILURE, errno, "write to '%s'", filename); + /* Print miscellaneous flags (passed through from + input). */ + for (size_t i = 0; i < it->num_flags; i++) + switch (it->flags[i].type) + { + case flag_no_test_inline: + case flag_xfail: + if (fprintf (fp, " %s%s", + input_flags[it->flags[i].type], + (it->flags[i].cond + ? it->flags[i].cond + : "")) < 0) + error (EXIT_FAILURE, errno, "write to '%s'", + filename); + break; + case flag_xfail_rounding: + if (m != rm_tonearest) + if (fprintf (fp, " xfail%s", + (it->flags[i].cond + ? it->flags[i].cond + : "")) < 0) + error (EXIT_FAILURE, errno, "write to '%s'", + filename); + break; + default: + break; + } + /* Print exception flags and compute errno + expectations where not already computed. */ + bool may_edom = false; + bool must_edom = false; + bool may_erange = must_erange || may_underflow; + for (fp_exception e = exc_first_exception; + e < exc_num_exceptions; + e++) + { + bool expect_e = (merged_exc & (1U << e)) != 0; + bool e_optional = false; + switch (e) + { + case exc_divbyzero: + if (expect_e) + may_erange = must_erange = true; + break; + + case exc_inexact: + if (!tf->exact) + e_optional = true; + break; + + case exc_invalid: + if (expect_e) + may_edom = must_edom = true; + break; + + case exc_overflow: + if (expect_e) + may_erange = true; + break; + + case exc_underflow: + if (expect_e) + may_erange = true; + if (must_underflow) + assert (expect_e); + if (may_underflow && !must_underflow) + e_optional = true; + break; + + default: + abort (); + } + if (e_optional) + { + assert (!before_after_matters); + if (fprintf (fp, " %s-ok", exceptions[e]) < 0) + error (EXIT_FAILURE, errno, "write to '%s'", + filename); + } + else + { + if (expect_e) + if (fprintf (fp, " %s", exceptions[e]) < 0) error (EXIT_FAILURE, errno, "write to '%s'", filename); - break; - case flag_xfail_rounding: - if (m != rm_tonearest) - if (fprintf (fp, " xfail%s", - (it->flags[i].cond - ? it->flags[i].cond - : "")) < 0) - error (EXIT_FAILURE, errno, "write to '%s'", - filename); - break; - default: - break; - } - /* Print exception flags and compute errno - expectations where not already computed. */ - bool may_edom = false; - bool must_edom = false; - bool may_erange = must_erange || may_underflow; - for (fp_exception e = exc_first_exception; - e < exc_num_exceptions; - e++) - { - bool expect_e = (merged_exc & (1U << e)) != 0; - bool e_optional = false; - switch (e) - { - case exc_divbyzero: - if (expect_e) - may_erange = must_erange = true; - break; - - case exc_inexact: - if (!tf->exact) - e_optional = true; - break; - - case exc_invalid: - if (expect_e) - may_edom = must_edom = true; - break; - - case exc_overflow: - if (expect_e) - may_erange = true; - break; - - case exc_underflow: - if (expect_e) - may_erange = true; - if (must_underflow) - assert (expect_e); - if (may_underflow && !must_underflow) - e_optional = true; - break; - - default: - abort (); - } - if (e_optional) - { - if (fprintf (fp, " %s-ok", exceptions[e]) < 0) - error (EXIT_FAILURE, errno, "write to '%s'", - filename); - } - else + if (before_after_matters && e == exc_underflow) + if (fputs (":before-rounding", fp) < 0) + error (EXIT_FAILURE, errno, "write to '%s'", + filename); + for (int after = 0; after <= 1; after++) { - if (expect_e) - if (fprintf (fp, " %s", exceptions[e]) < 0) - error (EXIT_FAILURE, errno, "write to '%s'", - filename); + bool expect_e_here = expect_e; + if (after == 1 && (!before_after_matters + || e != exc_underflow)) + continue; + const char *after_cond; + if (before_after_matters && e == exc_underflow) + { + after_cond = (after + ? ":after-rounding" + : ":before-rounding"); + expect_e_here = !after; + } + else + after_cond = ""; input_flag_type okflag; - okflag = (expect_e + okflag = (expect_e_here ? flag_missing_first : flag_spurious_first) + e; for (size_t i = 0; i < it->num_flags; i++) if (it->flags[i].type == okflag) - if (fprintf (fp, " %s-ok%s", + if (fprintf (fp, " %s-ok%s%s", exceptions[e], (it->flags[i].cond ? it->flags[i].cond - : "")) < 0) + : ""), after_cond) < 0) error (EXIT_FAILURE, errno, "write to '%s'", filename); } } - /* Print errno expectations. */ - if (tf->complex_fn) - { - must_edom = false; - must_erange = false; - } - if (may_edom && !must_edom) - { - if (fputs (" errno-edom-ok", fp) < 0) + } + /* Print errno expectations. */ + if (tf->complex_fn) + { + must_edom = false; + must_erange = false; + } + if (may_edom && !must_edom) + { + if (fputs (" errno-edom-ok", fp) < 0) + error (EXIT_FAILURE, errno, "write to '%s'", + filename); + } + else + { + if (must_edom) + if (fputs (" errno-edom", fp) < 0) + error (EXIT_FAILURE, errno, "write to '%s'", + filename); + input_flag_type okflag = (must_edom + ? flag_missing_errno + : flag_spurious_errno); + for (size_t i = 0; i < it->num_flags; i++) + if (it->flags[i].type == okflag) + if (fprintf (fp, " errno-edom-ok%s", + (it->flags[i].cond + ? it->flags[i].cond + : "")) < 0) error (EXIT_FAILURE, errno, "write to '%s'", filename); - } - else - { - if (must_edom) - if (fputs (" errno-edom", fp) < 0) - error (EXIT_FAILURE, errno, "write to '%s'", - filename); - input_flag_type okflag = (must_edom - ? flag_missing_errno - : flag_spurious_errno); - for (size_t i = 0; i < it->num_flags; i++) - if (it->flags[i].type == okflag) - if (fprintf (fp, " errno-edom-ok%s", - (it->flags[i].cond - ? it->flags[i].cond - : "")) < 0) - error (EXIT_FAILURE, errno, "write to '%s'", - filename); - } - if (may_erange && !must_erange) - { - if (fputs (" errno-erange-ok", fp) < 0) + } + if (before_after_matters) + assert (may_erange && !must_erange); + if (may_erange && !must_erange) + { + if (fprintf (fp, " errno-erange-ok%s", + (before_after_matters + ? ":before-rounding" + : "")) < 0) + error (EXIT_FAILURE, errno, "write to '%s'", + filename); + } + if (before_after_matters || !(may_erange && !must_erange)) + { + if (must_erange) + if (fputs (" errno-erange", fp) < 0) + error (EXIT_FAILURE, errno, "write to '%s'", + filename); + input_flag_type okflag = (must_erange + ? flag_missing_errno + : flag_spurious_errno); + for (size_t i = 0; i < it->num_flags; i++) + if (it->flags[i].type == okflag) + if (fprintf (fp, " errno-erange-ok%s%s", + (it->flags[i].cond + ? it->flags[i].cond + : ""), + (before_after_matters + ? ":after-rounding" + : "")) < 0) error (EXIT_FAILURE, errno, "write to '%s'", filename); - } - else - { - if (must_erange) - if (fputs (" errno-erange", fp) < 0) - error (EXIT_FAILURE, errno, "write to '%s'", - filename); - input_flag_type okflag = (must_erange - ? flag_missing_errno - : flag_spurious_errno); - for (size_t i = 0; i < it->num_flags; i++) - if (it->flags[i].type == okflag) - if (fprintf (fp, " errno-erange-ok%s", - (it->flags[i].cond - ? it->flags[i].cond - : "")) < 0) - error (EXIT_FAILURE, errno, "write to '%s'", - filename); - } - if (putc ('\n', fp) < 0) - error (EXIT_FAILURE, errno, "write to '%s'", filename); } + if (putc ('\n', fp) < 0) + error (EXIT_FAILURE, errno, "write to '%s'", filename); } for (size_t i = 0; i < tf->num_ret; i++) { diff --git a/math/gen-libm-test.pl b/math/gen-libm-test.pl index 919f0f2306..a5abda2fb0 100755 --- a/math/gen-libm-test.pl +++ b/math/gen-libm-test.pl @@ -326,19 +326,25 @@ sub or_value { } } -# Return text to OR a conditional expression between two values into -# an accumulated flags string. -sub or_cond_value { +# Return a conditional expression between two values. +sub cond_value { my ($cond, $if, $else) = @_; if ($cond eq "1") { - return or_value ($if); + return $if; } elsif ($cond eq "0") { - return or_value ($else); + return $else; } else { - return or_value ("($cond ? $if : $else)"); + return "($cond ? $if : $else)"; } } +# Return text to OR a conditional expression between two values into +# an accumulated flags string. +sub or_cond_value { + my ($cond, $if, $else) = @_; + return or_value (cond_value ($cond, $if, $else)); +} + # Generate libm-test.c sub generate_testfile { my ($input, $output) = @_; @@ -392,7 +398,7 @@ sub generate_testfile { my (@exc_list) = qw(divbyzero inexact invalid overflow underflow); my ($exc); foreach $exc (@exc_list) { - my ($exc_expected, $exc_ok, $no_exc); + my ($exc_expected, $exc_ok, $no_exc, $exc_cond, $exc_ok_cond); $exc_expected = "\U$exc\E_EXCEPTION"; $exc_ok = "\U$exc\E_EXCEPTION_OK"; $no_exc = "0"; @@ -401,23 +407,20 @@ sub generate_testfile { $no_exc = "NO_INEXACT_EXCEPTION"; } if (defined ($flag_cond{$exc})) { - if ($flag_cond{$exc} ne "1") { - die ("unexpected condition for $exc\n"); - } - if (defined ($flag_cond{"$exc-ok"})) { - $flags_conv .= or_cond_value ($flag_cond{"$exc-ok"}, - $exc_ok, $exc_expected); - } else { - $flags_conv .= or_value ($exc_expected); - } + $exc_cond = $flag_cond{$exc}; } else { - if (defined ($flag_cond{"$exc-ok"})) { - $flags_conv .= or_cond_value ($flag_cond{"$exc-ok"}, - $exc_ok, $no_exc); - } else { - $flags_conv .= or_value ($no_exc); - } + $exc_cond = "0"; + } + if (defined ($flag_cond{"$exc-ok"})) { + $exc_ok_cond = $flag_cond{"$exc-ok"}; + } else { + $exc_ok_cond = "0"; } + $flags_conv .= or_cond_value ($exc_cond, + cond_value ($exc_ok_cond, + $exc_ok, $exc_expected), + cond_value ($exc_ok_cond, + $exc_ok, $no_exc)); } my ($errno_expected, $errno_unknown_cond); if (defined ($flag_cond{"errno-edom"})) { |