Adjust how gen-auto-libm-tests handles before-rounding/after-rounding cases.

This patch changes gen-auto-libm-tests so that, when generating test
results that depend on whether the architecture has before-rounding or
after-rounding tininess detection, the :before-rounding or
:after-rounding conditions go on the exception / errno flags
generated, rather than generating two separate lines in
auto-libm-test-out for e.g. flt-32:before-rounding and
flt-32:after-rounding.

The rationale for this is as follows.  It would be desirable for
testing a libm function in all rounding modes to require just one
function and array in libm-test.inc, not four (or five), with the
array of test data including expected results for all rounding modes
rather than separate arrays for each rounding mode that also need to
repeat all the test inputs.  For gen-libm-test.pl to generate data for
such an array from auto-libm-test-out, it would be helpful if each
(format, test input) pair has exactly four lines in
auto-libm-test-out, one for each rounding mode, rather than some
rounding modes having just one line and some having two because the
exceptions depend on tininess detection.

Tested x86_64 and x86.

	* 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.
This commit is contained in:
Joseph Myers 2014-03-06 14:11:19 +00:00
parent 2f0a0f4427
commit aa97dee16e
4 changed files with 320 additions and 332 deletions

View File

@ -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.

View File

@ -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

View File

@ -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,23 +1882,16 @@ 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 (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,
{
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, after_cond) < 0)
long_cond) < 0)
error (EXIT_FAILURE, errno, "write to '%s'", filename);
/* Print inputs. */
for (size_t i = 0; i < tf->num_args; i++)
@ -2018,6 +2011,7 @@ output_for_one_input_case (FILE *fp, const char *filename, test_function *tf,
}
if (e_optional)
{
assert (!before_after_matters);
if (fprintf (fp, " %s-ok", exceptions[e]) < 0)
error (EXIT_FAILURE, errno, "write to '%s'",
filename);
@ -2028,21 +2022,42 @@ output_for_one_input_case (FILE *fp, const char *filename, test_function *tf,
if (fprintf (fp, " %s", exceptions[e]) < 0)
error (EXIT_FAILURE, errno, "write to '%s'",
filename);
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++)
{
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)
{
@ -2073,13 +2088,18 @@ output_for_one_input_case (FILE *fp, const char *filename, test_function *tf,
error (EXIT_FAILURE, errno, "write to '%s'",
filename);
}
if (before_after_matters)
assert (may_erange && !must_erange);
if (may_erange && !must_erange)
{
if (fputs (" errno-erange-ok", fp) < 0)
if (fprintf (fp, " errno-erange-ok%s",
(before_after_matters
? ":before-rounding"
: "")) < 0)
error (EXIT_FAILURE, errno, "write to '%s'",
filename);
}
else
if (before_after_matters || !(may_erange && !must_erange))
{
if (must_erange)
if (fputs (" errno-erange", fp) < 0)
@ -2090,9 +2110,12 @@ output_for_one_input_case (FILE *fp, const char *filename, test_function *tf,
: 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",
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);
@ -2100,7 +2123,6 @@ output_for_one_input_case (FILE *fp, const char *filename, test_function *tf,
if (putc ('\n', fp) < 0)
error (EXIT_FAILURE, errno, "write to '%s'", filename);
}
}
for (size_t i = 0; i < tf->num_ret; i++)
{
if (generic_outputs[i].type == gtype_fp)

View File

@ -326,17 +326,23 @@ sub or_value {
}
}
# Return a conditional expression between two values.
sub cond_value {
my ($cond, $if, $else) = @_;
if ($cond eq "1") {
return $if;
} elsif ($cond eq "0") {
return $else;
} 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) = @_;
if ($cond eq "1") {
return or_value ($if);
} elsif ($cond eq "0") {
return or_value ($else);
} else {
return or_value ("($cond ? $if : $else)");
}
return or_value (cond_value ($cond, $if, $else));
}
# Generate libm-test.c
@ -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");
$exc_cond = $flag_cond{$exc};
} else {
$exc_cond = "0";
}
if (defined ($flag_cond{"$exc-ok"})) {
$flags_conv .= or_cond_value ($flag_cond{"$exc-ok"},
$exc_ok, $exc_expected);
$exc_ok_cond = $flag_cond{"$exc-ok"};
} else {
$flags_conv .= or_value ($exc_expected);
}
} 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_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"})) {