about summary refs log tree commit diff
path: root/math
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2014-03-05 15:05:20 +0000
committerJoseph Myers <joseph@codesourcery.com>2014-03-05 15:05:20 +0000
commit2f0a0f44274808faa6bb55dd28b9ddbda6380f2a (patch)
tree3cf87b28e0ed5a85214db8ef6a9ed08e21f2e5e1 /math
parente6b6a85705be16373fb3f78ef998edc62150499c (diff)
downloadglibc-2f0a0f44274808faa6bb55dd28b9ddbda6380f2a.tar.gz
glibc-2f0a0f44274808faa6bb55dd28b9ddbda6380f2a.tar.xz
glibc-2f0a0f44274808faa6bb55dd28b9ddbda6380f2a.zip
Automatically check sanity of ulps from libm tests.
This patch makes libm-test.inc apply sanity checks to ulps values
resulting from tests, or found in libm-test-ulps files, to avoid the
need for manual checking/editing of new ulps for cases that are
excessively large or involve functions that should not have any ulps.
For IBM long double, errors must be at most 14ulp (the largest
currently checked-in value), or at most 3ulp (the documented error
bound for division) in the case of exactly-determined functions; for
other formats, the limits are 9ulp (also the largest currently
checked-in value) and 0ulp.  Limits from ulps files are saturated to
those bounds, and regen-ulps will ignore any errors outside those
bounds.  (Thus if, say, you have an architecture-specific problem with
fma, the tests can still be XFAILed in auto-libm-test-in, but errors
outside the permitted range can no longer be listed in
libm-test-ulps.)

Tested x86_64.

	* math/libm-test.inc (max_valid_error): New variable.
	(init_max_error): Take new argument specifying whether function
	results are exactly determined.  Set max_valid_error and bound
	other variables for errors based on this argument.
	(set_max_error): Do not record results above max_valid_error.
	(check_float_internal): Only accept errors of up to 0.5ulps if
	also at most max_valid_error.
	(START): Take new argument EXACT and pass it to init_max_error.
	(acos_test): Update call to START.
	(acos_test_tonearest): Likewise.
	(acos_test_towardzero): Likewise.
	(acos_test_downward): Likewise.
	(acos_test_upward): Likewise.
	(acosh_test): Likewise.
	(asin_test): Likewise.
	(asin_test_tonearest): Likewise.
	(asin_test_towardzero): Likewise.
	(asin_test_downward): Likewise.
	(asin_test_upward): Likewise.
	(asinh_test): Likewise.
	(atan_test): Likewise.
	(atanh_test): Likewise.
	(atan2_test): Likewise.
	(cabs_test): Likewise.
	(cacos_test): Likewise.
	(cacosh_test): Likewise.
	(carg_test): Likewise.
	(casin_test): Likewise.
	(casinh_test): Likewise.
	(catan_test): Likewise.
	(catanh_test): Likewise.
	(cbrt_test): Likewise.
	(ccos_test): Likewise.
	(ccosh_test): Likewise.
	(ceil_test): Likewise.
	(cexp_test): Likewise.
	(cimag_test): Likewise.
	(clog_test): Likewise.
	(clog10_test): Likewise.
	(conj_test): Likewise.
	(copysign_test): Likewise.
	(cos_test): Likewise.
	(cos_test_tonearest): Likewise.
	(cos_test_towardzero): Likewise.
	(cos_test_downward): Likewise.
	(cos_test_upward): Likewise.
	(cosh_test): Likewise.
	(cosh_test_tonearest): Likewise.
	(cosh_test_towardzero): Likewise.
	(cosh_test_downward): Likewise.
	(cosh_test_upward): Likewise.
	(cpow_test): Likewise.
	(cproj_test): Likewise.
	(creal_test): Likewise.
	(csin_test): Likewise.
	(csinh_test): Likewise.
	(csqrt_test): Likewise.
	(ctan_test): Likewise.
	(ctan_test_tonearest): Likewise.
	(ctan_test_towardzero): Likewise.
	(ctan_test_downward): Likewise.
	(ctan_test_upward): Likewise.
	(ctanh_test): Likewise.
	(ctanh_test_tonearest): Likewise.
	(ctanh_test_towardzero): Likewise.
	(ctanh_test_downward): Likewise.
	(ctanh_test_upward): Likewise.
	(erf_test): Likewise.
	(erfc_test): Likewise.
	(exp_test): Likewise.
	(exp_test_tonearest): Likewise.
	(exp_test_towardzero): Likewise.
	(exp_test_downward): Likewise.
	(exp_test_upward): Likewise.
	(exp10_test): Likewise.
	(exp10_test_tonearest): Likewise.
	(exp10_test_towardzero): Likewise.
	(exp10_test_downward): Likewise.
	(exp10_test_upward): Likewise.
	(pow10_test): Likewise.
	(exp2_test): Likewise.
	(expm1_test): Likewise.
	(expm1_test_tonearest): Likewise.
	(expm1_test_towardzero): Likewise.
	(expm1_test_downward): Likewise.
	(expm1_test_upward): Likewise.
	(fabs_test): Likewise.
	(fdim_test): Likewise.
	(floor_test): Likewise.
	(fma_test): Likewise.
	(fma_test_towardzero): Likewise.
	(fma_test_downward): Likewise.
	(fma_test_upward): Likewise.
	(fmax_test): Likewise.
	(fmin_test): Likewise.
	(fmod_test): Likewise.
	(fpclassify_test): Likewise.
	(frexp_test): Likewise.
	(hypot_test): Likewise.
	(ilogb_test): Likewise.
	(isfinite_test): Likewise.
	(finite_test): Likewise.
	(isgreater_test): Likewise.
	(isgreaterequal_test): Likewise.
	(isinf_test): Likewise.
	(isless_test): Likewise.
	(islessequal_test): Likewise.
	(islessgreater_test): Likewise.
	(isnan_test): Likewise.
	(isnormal_test): Likewise.
	(issignaling_test): Likewise.
	(isunordered_test): Likewise.
	(j0_test): Likewise.
	(j1_test): Likewise.
	(jn_test): Likewise.
	(ldexp_test): Likewise.
	(lgamma_test): Likewise.
	(gamma_test): Likewise.
	(lrint_test): Likewise.
	(lrint_test_tonearest): Likewise.
	(lrint_test_towardzero): Likewise.
	(lrint_test_downward): Likewise.
	(lrint_test_upward): Likewise.
	(llrint_test): Likewise.
	(llrint_test_tonearest): Likewise.
	(llrint_test_towardzero): Likewise.
	(llrint_test_downward): Likewise.
	(llrint_test_upward): Likewise.
	(log_test): Likewise.
	(log10_test): Likewise.
	(log1p_test): Likewise.
	(log2_test): Likewise.
	(logb_test): Likewise.
	(logb_test_downward): Likewise.
	(lround_test): Likewise.
	(llround_test): Likewise.
	(modf_test): Likewise.
	(nearbyint_test): Likewise.
	(nextafter_test): Likewise.
	(nexttoward_test): Likewise.
	(pow_test): Likewise.
	(pow_test_tonearest): Likewise.
	(pow_test_towardzero): Likewise.
	(pow_test_downward): Likewise.
	(pow_test_upward): Likewise.
	(remainder_test): Likewise.
	(drem_test): Likewise.
	(remainder_test_tonearest): Likewise.
	(drem_test_tonearest): Likewise.
	(remainder_test_towardzero): Likewise.
	(drem_test_towardzero): Likewise.
	(remainder_test_downward): Likewise.
	(drem_test_downward): Likewise.
	(remainder_test_upward): Likewise.
	(drem_test_upward): Likewise.
	(remquo_test): Likewise.
	(rint_test): Likewise.
	(rint_test_tonearest): Likewise.
	(rint_test_towardzero): Likewise.
	(rint_test_downward): Likewise.
	(rint_test_upward): Likewise.
	(round_test): Likewise.
	(scalb_test): Likewise.
	(scalbn_test): Likewise.
	(scalbln_test): Likewise.
	(signbit_test): Likewise.
	(sin_test): Likewise.
	(sin_test_tonearest): Likewise.
	(sin_test_towardzero): Likewise.
	(sin_test_downward): Likewise.
	(sin_test_upward): Likewise.
	(sincos_test): Likewise.
	(sinh_test): Likewise.
	(sinh_test_tonearest): Likewise.
	(sinh_test_towardzero): Likewise.
	(sinh_test_downward): Likewise.
	(sinh_test_upward): Likewise.
	(sqrt_test): Likewise.
	(sqrt_test_tonearest): Likewise.
	(sqrt_test_towardzero): Likewise.
	(sqrt_test_downward): Likewise.
	(sqrt_test_upward): Likewise.
	(tan_test): Likewise.
	(tan_test_tonearest): Likewise.
	(tan_test_towardzero): Likewise.
	(tan_test_downward): Likewise.
	(tan_test_upward): Likewise.
	(tanh_test): Likewise.
	(tgamma_test): Likewise.
	(trunc_test): Likewise.
	(y0_test): Likewise.
	(y1_test): Likewise.
	(yn_test): Likewise.
	(significand_test): Likewise.
Diffstat (limited to 'math')
-rw-r--r--math/libm-test.inc403
1 files changed, 212 insertions, 191 deletions
diff --git a/math/libm-test.inc b/math/libm-test.inc
index f8cd94781e..b1074328f0 100644
--- a/math/libm-test.inc
+++ b/math/libm-test.inc
@@ -326,6 +326,8 @@ static FLOAT max_error, real_max_error, imag_max_error;
 
 static FLOAT prev_max_error, prev_real_max_error, prev_imag_max_error;
 
+static FLOAT max_valid_error;
+
 #define BUILD_COMPLEX(real, imag) \
   ({ __complex__ FLOAT __retval;					      \
      __real__ __retval = (real);					      \
@@ -364,7 +366,7 @@ find_ulps (const char *name, const struct ulp_data *data, size_t nmemb)
 }
 
 static void
-init_max_error (const char *name)
+init_max_error (const char *name, int exact)
 {
   max_error = 0;
   real_max_error = 0;
@@ -377,6 +379,24 @@ init_max_error (const char *name)
   prev_imag_max_error = find_ulps (name, func_imag_ulps,
 				   (sizeof (func_imag_ulps)
 				    / sizeof (func_imag_ulps[0])));
+#if TEST_COND_ldbl_128ibm
+  /* The documented accuracy of IBM long double division is 3ulp (see
+     libgcc/config/rs6000/ibm-ldouble-format), so do not require
+     better accuracy for libm functions that are exactly defined for
+     other formats.  */
+  max_valid_error = exact ? 3 : 14;
+#else
+  max_valid_error = exact ? 0 : 9;
+#endif
+  prev_max_error = (prev_max_error <= max_valid_error
+		    ? prev_max_error
+		    : max_valid_error);
+  prev_real_max_error = (prev_real_max_error <= max_valid_error
+			 ? prev_real_max_error
+			 : max_valid_error);
+  prev_imag_max_error = (prev_imag_max_error <= max_valid_error
+			 ? prev_imag_max_error
+			 : max_valid_error);
   feclearexcept (FE_ALL_EXCEPT);
   errno = 0;
 }
@@ -384,7 +404,7 @@ init_max_error (const char *name)
 static void
 set_max_error (FLOAT current, FLOAT *curr_max_error)
 {
-  if (current > *curr_max_error)
+  if (current > *curr_max_error && current <= max_valid_error)
     *curr_max_error = current;
 }
 
@@ -798,7 +818,8 @@ check_float_internal (const char *test_name, FLOAT computed, FLOAT expected,
 	  && computed == 0.0 && expected == 0.0
 	  && signbit(computed) != signbit (expected))
 	ok = 0;
-      else if (ulps <= 0.5 || (ulps <= max_ulp && !ignore_max_ulp))
+      else if ((ulps <= 0.5 && ulps <= max_valid_error)
+	       || (ulps <= max_ulp && !ignore_max_ulp))
 	ok = 1;
       else
 	ok = 0;
@@ -1585,9 +1606,9 @@ struct test_fFF_11_data
   ROUND_RESTORE_ ## ROUNDING_MODE
 
 /* Start and end the tests for a given function.  */
-#define START(FUNC)				\
+#define START(FUNC, EXACT)			\
   const char *this_func = #FUNC;		\
-  init_max_error (this_func)
+  init_max_error (this_func, EXACT)
 #define END					\
   print_max_error (this_func)
 #define END_COMPLEX				\
@@ -1624,7 +1645,7 @@ static const struct test_f_f_data acos_test_data[] =
 static void
 acos_test (void)
 {
-  START (acos);
+  START (acos, 0);
   RUN_TEST_LOOP_f_f (acos, acos_test_data, );
   END;
 }
@@ -1638,7 +1659,7 @@ static const struct test_f_f_data acos_tonearest_test_data[] =
 static void
 acos_test_tonearest (void)
 {
-  START (acos_tonearest);
+  START (acos_tonearest, 0);
   RUN_TEST_LOOP_f_f (acos, acos_tonearest_test_data, FE_TONEAREST);
   END;
 }
@@ -1652,7 +1673,7 @@ static const struct test_f_f_data acos_towardzero_test_data[] =
 static void
 acos_test_towardzero (void)
 {
-  START (acos_towardzero);
+  START (acos_towardzero, 0);
   RUN_TEST_LOOP_f_f (acos, acos_towardzero_test_data, FE_TOWARDZERO);
   END;
 }
@@ -1666,7 +1687,7 @@ static const struct test_f_f_data acos_downward_test_data[] =
 static void
 acos_test_downward (void)
 {
-  START (acos_downward);
+  START (acos_downward, 0);
   RUN_TEST_LOOP_f_f (acos, acos_downward_test_data, FE_DOWNWARD);
   END;
 }
@@ -1680,7 +1701,7 @@ static const struct test_f_f_data acos_upward_test_data[] =
 static void
 acos_test_upward (void)
 {
-  START (acos_upward);
+  START (acos_upward, 0);
   RUN_TEST_LOOP_f_f (acos, acos_upward_test_data, FE_UPWARD);
   END;
 }
@@ -1708,7 +1729,7 @@ static const struct test_f_f_data acosh_test_data[] =
 static void
 acosh_test (void)
 {
-  START (acosh);
+  START (acosh, 0);
   RUN_TEST_LOOP_f_f (acosh, acosh_test_data, );
   END;
 }
@@ -1731,7 +1752,7 @@ static const struct test_f_f_data asin_test_data[] =
 static void
 asin_test (void)
 {
-  START (asin);
+  START (asin, 0);
   RUN_TEST_LOOP_f_f (asin, asin_test_data, );
   END;
 }
@@ -1745,7 +1766,7 @@ static const struct test_f_f_data asin_tonearest_test_data[] =
 static void
 asin_test_tonearest (void)
 {
-  START (asin_tonearest);
+  START (asin_tonearest, 0);
   RUN_TEST_LOOP_f_f (asin, asin_tonearest_test_data, FE_TONEAREST);
   END;
 }
@@ -1759,7 +1780,7 @@ static const struct test_f_f_data asin_towardzero_test_data[] =
 static void
 asin_test_towardzero (void)
 {
-  START (asin_towardzero);
+  START (asin_towardzero, 0);
   RUN_TEST_LOOP_f_f (asin, asin_towardzero_test_data, FE_TOWARDZERO);
   END;
 }
@@ -1773,7 +1794,7 @@ static const struct test_f_f_data asin_downward_test_data[] =
 static void
 asin_test_downward (void)
 {
-  START (asin_downward);
+  START (asin_downward, 0);
   RUN_TEST_LOOP_f_f (asin, asin_downward_test_data, FE_DOWNWARD);
   END;
 }
@@ -1787,7 +1808,7 @@ static const struct test_f_f_data asin_upward_test_data[] =
 static void
 asin_test_upward (void)
 {
-  START (asin_upward);
+  START (asin_upward, 0);
   RUN_TEST_LOOP_f_f (asin, asin_upward_test_data, FE_UPWARD);
   END;
 }
@@ -1803,7 +1824,7 @@ static const struct test_f_f_data asinh_test_data[] =
 static void
 asinh_test (void)
 {
-  START (asinh);
+  START (asinh, 0);
   RUN_TEST_LOOP_f_f (asinh, asinh_test_data, );
   END;
 }
@@ -1820,7 +1841,7 @@ static const struct test_f_f_data atan_test_data[] =
 static void
 atan_test (void)
 {
-  START (atan);
+  START (atan, 0);
   RUN_TEST_LOOP_f_f (atan, atan_test_data, );
   END;
 }
@@ -1847,7 +1868,7 @@ static const struct test_f_f_data atanh_test_data[] =
 static void
 atanh_test (void)
 {
-  START (atanh);
+  START (atanh, 0);
   RUN_TEST_LOOP_f_f (atanh, atanh_test_data, );
   END;
 }
@@ -1884,7 +1905,7 @@ static const struct test_ff_f_data atan2_test_data[] =
 static void
 atan2_test (void)
 {
-  START (atan2);
+  START (atan2, 0);
   RUN_TEST_LOOP_ff_f (atan2, atan2_test_data, );
   END;
 }
@@ -1909,7 +1930,7 @@ static const struct test_c_f_data cabs_test_data[] =
 static void
 cabs_test (void)
 {
-  START (cabs);
+  START (cabs, 0);
   RUN_TEST_LOOP_c_f (cabs, cabs_test_data, );
   END;
 }
@@ -2600,7 +2621,7 @@ static const struct test_c_c_data cacos_test_data[] =
 static void
 cacos_test (void)
 {
-  START (cacos);
+  START (cacos, 0);
   RUN_TEST_LOOP_c_c (cacos, cacos_test_data, );
   END_COMPLEX;
 }
@@ -3284,7 +3305,7 @@ static const struct test_c_c_data cacosh_test_data[] =
 static void
 cacosh_test (void)
 {
-  START (cacosh);
+  START (cacosh, 0);
   RUN_TEST_LOOP_c_c (cacosh, cacosh_test_data, );
   END_COMPLEX;
 }
@@ -3328,7 +3349,7 @@ static const struct test_c_f_data carg_test_data[] =
 static void
 carg_test (void)
 {
-  START (carg);
+  START (carg, 0);
   RUN_TEST_LOOP_c_f (carg, carg_test_data, );
   END;
 }
@@ -4024,7 +4045,7 @@ static const struct test_c_c_data casin_test_data[] =
 static void
 casin_test (void)
 {
-  START (casin);
+  START (casin, 0);
   RUN_TEST_LOOP_c_c (casin, casin_test_data, );
   END_COMPLEX;
 }
@@ -4721,7 +4742,7 @@ static const struct test_c_c_data casinh_test_data[] =
 static void
 casinh_test (void)
 {
-  START (casinh);
+  START (casinh, 0);
   RUN_TEST_LOOP_c_c (casinh, casinh_test_data, );
   END_COMPLEX;
 }
@@ -5230,7 +5251,7 @@ static const struct test_c_c_data catan_test_data[] =
 static void
 catan_test (void)
 {
-  START (catan);
+  START (catan, 0);
   RUN_TEST_LOOP_c_c (catan, catan_test_data, );
   END_COMPLEX;
 }
@@ -5737,7 +5758,7 @@ static const struct test_c_c_data catanh_test_data[] =
 static void
 catanh_test (void)
 {
-  START (catanh);
+  START (catanh, 0);
   RUN_TEST_LOOP_c_c (catanh, catanh_test_data, );
   END_COMPLEX;
 }
@@ -5754,7 +5775,7 @@ static const struct test_f_f_data cbrt_test_data[] =
 static void
 cbrt_test (void)
 {
-  START (cbrt);
+  START (cbrt, 0);
   RUN_TEST_LOOP_f_f (cbrt, cbrt_test_data, );
   END;
 }
@@ -5813,7 +5834,7 @@ static const struct test_c_c_data ccos_test_data[] =
 static void
 ccos_test (void)
 {
-  START (ccos);
+  START (ccos, 0);
   RUN_TEST_LOOP_c_c (ccos, ccos_test_data, );
   END_COMPLEX;
 }
@@ -5872,7 +5893,7 @@ static const struct test_c_c_data ccosh_test_data[] =
 static void
 ccosh_test (void)
 {
-  START (ccosh);
+  START (ccosh, 0);
   RUN_TEST_LOOP_c_c (ccosh, ccosh_test_data, );
   END_COMPLEX;
 }
@@ -5976,7 +5997,7 @@ static const struct test_f_f_data ceil_test_data[] =
 static void
 ceil_test (void)
 {
-  START (ceil);
+  START (ceil, 1);
   RUN_TEST_LOOP_f_f (ceil, ceil_test_data, );
   END;
 }
@@ -6032,7 +6053,7 @@ static const struct test_c_c_data cexp_test_data[] =
 static void
 cexp_test (void)
 {
-  START (cexp);
+  START (cexp, 0);
   RUN_TEST_LOOP_c_c (cexp, cexp_test_data, );
   END_COMPLEX;
 }
@@ -6052,7 +6073,7 @@ static const struct test_c_f_data cimag_test_data[] =
 static void
 cimag_test (void)
 {
-  START (cimag);
+  START (cimag, 1);
   RUN_TEST_LOOP_c_f (cimag, cimag_test_data, );
   END;
 }
@@ -6114,7 +6135,7 @@ static const struct test_c_c_data clog_test_data[] =
 static void
 clog_test (void)
 {
-  START (clog);
+  START (clog, 0);
   RUN_TEST_LOOP_c_c (clog, clog_test_data, );
   END_COMPLEX;
 }
@@ -6176,7 +6197,7 @@ static const struct test_c_c_data clog10_test_data[] =
 static void
 clog10_test (void)
 {
-  START (clog10);
+  START (clog10, 0);
   RUN_TEST_LOOP_c_c (clog10, clog10_test_data, );
   END_COMPLEX;
 }
@@ -6196,7 +6217,7 @@ static const struct test_c_c_data conj_test_data[] =
 static void
 conj_test (void)
 {
-  START (conj);
+  START (conj, 1);
   RUN_TEST_LOOP_c_c (conj, conj_test_data, );
   END_COMPLEX;
 }
@@ -6248,7 +6269,7 @@ static const struct test_ff_f_data copysign_test_data[] =
 static void
 copysign_test (void)
 {
-  START (copysign);
+  START (copysign, 1);
   RUN_TEST_LOOP_ff_f (copysign, copysign_test_data, );
   END;
 }
@@ -6266,7 +6287,7 @@ static const struct test_f_f_data cos_test_data[] =
 static void
 cos_test (void)
 {
-  START (cos);
+  START (cos, 0);
   RUN_TEST_LOOP_f_f (cos, cos_test_data, );
   END;
 }
@@ -6280,7 +6301,7 @@ static const struct test_f_f_data cos_tonearest_test_data[] =
 static void
 cos_test_tonearest (void)
 {
-  START (cos_tonearest);
+  START (cos_tonearest, 0);
   RUN_TEST_LOOP_f_f (cos, cos_tonearest_test_data, FE_TONEAREST);
   END;
 }
@@ -6294,7 +6315,7 @@ static const struct test_f_f_data cos_towardzero_test_data[] =
 static void
 cos_test_towardzero (void)
 {
-  START (cos_towardzero);
+  START (cos_towardzero, 0);
   RUN_TEST_LOOP_f_f (cos, cos_towardzero_test_data, FE_TOWARDZERO);
   END;
 }
@@ -6308,7 +6329,7 @@ static const struct test_f_f_data cos_downward_test_data[] =
 static void
 cos_test_downward (void)
 {
-  START (cos_downward);
+  START (cos_downward, 0);
   RUN_TEST_LOOP_f_f (cos, cos_downward_test_data, FE_DOWNWARD);
   END;
 }
@@ -6322,7 +6343,7 @@ static const struct test_f_f_data cos_upward_test_data[] =
 static void
 cos_test_upward (void)
 {
-  START (cos_upward);
+  START (cos_upward, 0);
   RUN_TEST_LOOP_f_f (cos, cos_upward_test_data, FE_UPWARD);
   END;
 }
@@ -6340,7 +6361,7 @@ static const struct test_f_f_data cosh_test_data[] =
 static void
 cosh_test (void)
 {
-  START (cosh);
+  START (cosh, 0);
   RUN_TEST_LOOP_f_f (cosh, cosh_test_data, );
   END;
 }
@@ -6354,7 +6375,7 @@ static const struct test_f_f_data cosh_tonearest_test_data[] =
 static void
 cosh_test_tonearest (void)
 {
-  START (cosh_tonearest);
+  START (cosh_tonearest, 0);
   RUN_TEST_LOOP_f_f (cosh, cosh_tonearest_test_data, FE_TONEAREST);
   END;
 }
@@ -6368,7 +6389,7 @@ static const struct test_f_f_data cosh_towardzero_test_data[] =
 static void
 cosh_test_towardzero (void)
 {
-  START (cosh_towardzero);
+  START (cosh_towardzero, 0);
   RUN_TEST_LOOP_f_f (cosh, cosh_towardzero_test_data, FE_TOWARDZERO);
   END;
 }
@@ -6382,7 +6403,7 @@ static const struct test_f_f_data cosh_downward_test_data[] =
 static void
 cosh_test_downward (void)
 {
-  START (cosh_downward);
+  START (cosh_downward, 0);
   RUN_TEST_LOOP_f_f (cosh, cosh_downward_test_data, FE_DOWNWARD);
   END;
 }
@@ -6396,7 +6417,7 @@ static const struct test_f_f_data cosh_upward_test_data[] =
 static void
 cosh_test_upward (void)
 {
-  START (cosh_upward);
+  START (cosh_upward, 0);
   RUN_TEST_LOOP_f_f (cosh, cosh_upward_test_data, FE_UPWARD);
   END;
 }
@@ -6412,7 +6433,7 @@ static const struct test_cc_c_data cpow_test_data[] =
 static void
 cpow_test (void)
 {
-  START (cpow);
+  START (cpow, 0);
   RUN_TEST_LOOP_cc_c (cpow, cpow_test_data, );
   END_COMPLEX;
 }
@@ -6479,7 +6500,7 @@ static const struct test_c_c_data cproj_test_data[] =
 static void
 cproj_test (void)
 {
-  START (cproj);
+  START (cproj, 1);
   RUN_TEST_LOOP_c_c (cproj, cproj_test_data, );
   END_COMPLEX;
 }
@@ -6499,7 +6520,7 @@ static const struct test_c_f_data creal_test_data[] =
 static void
 creal_test (void)
 {
-  START (creal);
+  START (creal, 1);
   RUN_TEST_LOOP_c_f (creal, creal_test_data, );
   END;
 }
@@ -6597,7 +6618,7 @@ static const struct test_c_c_data csin_test_data[] =
 static void
 csin_test (void)
 {
-  START (csin);
+  START (csin, 0);
   RUN_TEST_LOOP_c_c (csin, csin_test_data, );
   END_COMPLEX;
 }
@@ -6696,7 +6717,7 @@ static const struct test_c_c_data csinh_test_data[] =
 static void
 csinh_test (void)
 {
-  START (csinh);
+  START (csinh, 0);
   RUN_TEST_LOOP_c_c (csinh, csinh_test_data, );
   END_COMPLEX;
 }
@@ -6749,7 +6770,7 @@ static const struct test_c_c_data csqrt_test_data[] =
 static void
 csqrt_test (void)
 {
-  START (csqrt);
+  START (csqrt, 0);
   RUN_TEST_LOOP_c_c (csqrt, csqrt_test_data, );
   END_COMPLEX;
 }
@@ -6797,7 +6818,7 @@ static const struct test_c_c_data ctan_test_data[] =
 static void
 ctan_test (void)
 {
-  START (ctan);
+  START (ctan, 0);
   RUN_TEST_LOOP_c_c (ctan, ctan_test_data, );
   END_COMPLEX;
 }
@@ -6811,7 +6832,7 @@ static const struct test_c_c_data ctan_tonearest_test_data[] =
 static void
 ctan_test_tonearest (void)
 {
-  START (ctan_tonearest);
+  START (ctan_tonearest, 0);
   RUN_TEST_LOOP_c_c (ctan, ctan_tonearest_test_data, FE_TONEAREST);
   END_COMPLEX;
 }
@@ -6825,7 +6846,7 @@ static const struct test_c_c_data ctan_towardzero_test_data[] =
 static void
 ctan_test_towardzero (void)
 {
-  START (ctan_towardzero);
+  START (ctan_towardzero, 0);
   RUN_TEST_LOOP_c_c (ctan, ctan_towardzero_test_data, FE_TOWARDZERO);
   END_COMPLEX;
 }
@@ -6839,7 +6860,7 @@ static const struct test_c_c_data ctan_downward_test_data[] =
 static void
 ctan_test_downward (void)
 {
-  START (ctan_downward);
+  START (ctan_downward, 0);
   RUN_TEST_LOOP_c_c (ctan, ctan_downward_test_data, FE_DOWNWARD);
   END_COMPLEX;
 }
@@ -6853,7 +6874,7 @@ static const struct test_c_c_data ctan_upward_test_data[] =
 static void
 ctan_test_upward (void)
 {
-  START (ctan_upward);
+  START (ctan_upward, 0);
   RUN_TEST_LOOP_c_c (ctan, ctan_upward_test_data, FE_UPWARD);
   END_COMPLEX;
 }
@@ -6901,7 +6922,7 @@ static const struct test_c_c_data ctanh_test_data[] =
 static void
 ctanh_test (void)
 {
-  START (ctanh);
+  START (ctanh, 0);
   RUN_TEST_LOOP_c_c (ctanh, ctanh_test_data, );
   END_COMPLEX;
 }
@@ -6915,7 +6936,7 @@ static const struct test_c_c_data ctanh_tonearest_test_data[] =
 static void
 ctanh_test_tonearest (void)
 {
-  START (ctanh_tonearest);
+  START (ctanh_tonearest, 0);
   RUN_TEST_LOOP_c_c (ctanh, ctanh_tonearest_test_data, FE_TONEAREST);
   END_COMPLEX;
 }
@@ -6929,7 +6950,7 @@ static const struct test_c_c_data ctanh_towardzero_test_data[] =
 static void
 ctanh_test_towardzero (void)
 {
-  START (ctanh_towardzero);
+  START (ctanh_towardzero, 0);
   RUN_TEST_LOOP_c_c (ctanh, ctanh_towardzero_test_data, FE_TOWARDZERO);
   END_COMPLEX;
 }
@@ -6943,7 +6964,7 @@ static const struct test_c_c_data ctanh_downward_test_data[] =
 static void
 ctanh_test_downward (void)
 {
-  START (ctanh_downward);
+  START (ctanh_downward, 0);
   RUN_TEST_LOOP_c_c (ctanh, ctanh_downward_test_data, FE_DOWNWARD);
   END_COMPLEX;
 }
@@ -6957,7 +6978,7 @@ static const struct test_c_c_data ctanh_upward_test_data[] =
 static void
 ctanh_test_upward (void)
 {
-  START (ctanh_upward);
+  START (ctanh_upward, 0);
   RUN_TEST_LOOP_c_c (ctanh, ctanh_upward_test_data, FE_UPWARD);
   END_COMPLEX;
 }
@@ -6975,7 +6996,7 @@ static const struct test_f_f_data erf_test_data[] =
 static void
 erf_test (void)
 {
-  START (erf);
+  START (erf, 0);
   RUN_TEST_LOOP_f_f (erf, erf_test_data, );
   END;
 }
@@ -6993,7 +7014,7 @@ static const struct test_f_f_data erfc_test_data[] =
 static void
 erfc_test (void)
 {
-  START (erfc);
+  START (erfc, 0);
   RUN_TEST_LOOP_f_f (erfc, erfc_test_data, );
   END;
 }
@@ -7011,7 +7032,7 @@ static const struct test_f_f_data exp_test_data[] =
 static void
 exp_test (void)
 {
-  START (exp);
+  START (exp, 0);
   RUN_TEST_LOOP_f_f (exp, exp_test_data, );
   END;
 }
@@ -7025,7 +7046,7 @@ static const struct test_f_f_data exp_tonearest_test_data[] =
 static void
 exp_test_tonearest (void)
 {
-  START (exp_tonearest);
+  START (exp_tonearest, 0);
   RUN_TEST_LOOP_f_f (exp, exp_tonearest_test_data, FE_TONEAREST);
   END;
 }
@@ -7039,7 +7060,7 @@ static const struct test_f_f_data exp_towardzero_test_data[] =
 static void
 exp_test_towardzero (void)
 {
-  START (exp_towardzero);
+  START (exp_towardzero, 0);
   RUN_TEST_LOOP_f_f (exp, exp_towardzero_test_data, FE_TOWARDZERO);
   END;
 }
@@ -7053,7 +7074,7 @@ static const struct test_f_f_data exp_downward_test_data[] =
 static void
 exp_test_downward (void)
 {
-  START (exp_downward);
+  START (exp_downward, 0);
   RUN_TEST_LOOP_f_f (exp, exp_downward_test_data, FE_DOWNWARD);
   END;
 }
@@ -7067,7 +7088,7 @@ static const struct test_f_f_data exp_upward_test_data[] =
 static void
 exp_test_upward (void)
 {
-  START (exp_upward);
+  START (exp_upward, 0);
   RUN_TEST_LOOP_f_f (exp, exp_upward_test_data, FE_UPWARD);
   END;
 }
@@ -7085,7 +7106,7 @@ static const struct test_f_f_data exp10_test_data[] =
 static void
 exp10_test (void)
 {
-  START (exp10);
+  START (exp10, 0);
   RUN_TEST_LOOP_f_f (exp10, exp10_test_data, );
   END;
 }
@@ -7099,7 +7120,7 @@ static const struct test_f_f_data exp10_tonearest_test_data[] =
 static void
 exp10_test_tonearest (void)
 {
-  START (exp10_tonearest);
+  START (exp10_tonearest, 0);
   RUN_TEST_LOOP_f_f (exp10, exp10_tonearest_test_data, FE_TONEAREST);
   END;
 }
@@ -7113,7 +7134,7 @@ static const struct test_f_f_data exp10_towardzero_test_data[] =
 static void
 exp10_test_towardzero (void)
 {
-  START (exp10_towardzero);
+  START (exp10_towardzero, 0);
   RUN_TEST_LOOP_f_f (exp10, exp10_towardzero_test_data, FE_TOWARDZERO);
   END;
 }
@@ -7127,7 +7148,7 @@ static const struct test_f_f_data exp10_downward_test_data[] =
 static void
 exp10_test_downward (void)
 {
-  START (exp10_downward);
+  START (exp10_downward, 0);
   RUN_TEST_LOOP_f_f (exp10, exp10_downward_test_data, FE_DOWNWARD);
   END;
 }
@@ -7141,7 +7162,7 @@ static const struct test_f_f_data exp10_upward_test_data[] =
 static void
 exp10_test_upward (void)
 {
-  START (exp10_upward);
+  START (exp10_upward, 0);
   RUN_TEST_LOOP_f_f (exp10, exp10_upward_test_data, FE_UPWARD);
   END;
 }
@@ -7149,7 +7170,7 @@ exp10_test_upward (void)
 static void
 pow10_test (void)
 {
-  START (pow10);
+  START (pow10, 0);
   /* pow10 uses the same test data as exp10.  */
   RUN_TEST_LOOP_f_f (pow10, exp10_test_data, );
   END;
@@ -7168,7 +7189,7 @@ static const struct test_f_f_data exp2_test_data[] =
 static void
 exp2_test (void)
 {
-  START (exp2);
+  START (exp2, 0);
   RUN_TEST_LOOP_f_f (exp2, exp2_test_data, );
   END;
 }
@@ -7186,7 +7207,7 @@ static const struct test_f_f_data expm1_test_data[] =
 static void
 expm1_test (void)
 {
-  START (expm1);
+  START (expm1, 0);
   RUN_TEST_LOOP_f_f (expm1, expm1_test_data, );
   END;
 }
@@ -7200,7 +7221,7 @@ static const struct test_f_f_data expm1_tonearest_test_data[] =
 static void
 expm1_test_tonearest (void)
 {
-  START (expm1_tonearest);
+  START (expm1_tonearest, 0);
   RUN_TEST_LOOP_f_f (expm1, expm1_tonearest_test_data, FE_TONEAREST);
   END;
 }
@@ -7214,7 +7235,7 @@ static const struct test_f_f_data expm1_towardzero_test_data[] =
 static void
 expm1_test_towardzero (void)
 {
-  START (expm1_towardzero);
+  START (expm1_towardzero, 0);
   RUN_TEST_LOOP_f_f (expm1, expm1_towardzero_test_data, FE_TOWARDZERO);
   END;
 }
@@ -7228,7 +7249,7 @@ static const struct test_f_f_data expm1_downward_test_data[] =
 static void
 expm1_test_downward (void)
 {
-  START (expm1_downward);
+  START (expm1_downward, 0);
   RUN_TEST_LOOP_f_f (expm1, expm1_downward_test_data, FE_DOWNWARD);
   END;
 }
@@ -7242,7 +7263,7 @@ static const struct test_f_f_data expm1_upward_test_data[] =
 static void
 expm1_test_upward (void)
 {
-  START (expm1_upward);
+  START (expm1_upward, 0);
   RUN_TEST_LOOP_f_f (expm1, expm1_upward_test_data, FE_UPWARD);
   END;
 }
@@ -7265,7 +7286,7 @@ static const struct test_f_f_data fabs_test_data[] =
 static void
 fabs_test (void)
 {
-  START (fabs);
+  START (fabs, 1);
   RUN_TEST_LOOP_f_f (fabs, fabs_test_data, );
   END;
 }
@@ -7309,7 +7330,7 @@ static const struct test_ff_f_data fdim_test_data[] =
 static void
 fdim_test (void)
 {
-  START (fdim);
+  START (fdim, 1);
   RUN_TEST_LOOP_ff_f (fdim, fdim_test_data, );
   END;
 }
@@ -7414,7 +7435,7 @@ static const struct test_f_f_data floor_test_data[] =
 static void
 floor_test (void)
 {
-  START (floor);
+  START (floor, 1);
   RUN_TEST_LOOP_f_f (floor, floor_test_data, );
   END;
 }
@@ -7458,7 +7479,7 @@ static const struct test_fff_f_data fma_test_data[] =
 static void
 fma_test (void)
 {
-  START (fma);
+  START (fma, 1);
   RUN_TEST_LOOP_fff_f (fma, fma_test_data, );
   END;
 }
@@ -7472,7 +7493,7 @@ static const struct test_fff_f_data fma_towardzero_test_data[] =
 static void
 fma_test_towardzero (void)
 {
-  START (fma_towardzero);
+  START (fma_towardzero, 1);
   RUN_TEST_LOOP_fff_f (fma, fma_towardzero_test_data, FE_TOWARDZERO);
   END;
 }
@@ -7486,7 +7507,7 @@ static const struct test_fff_f_data fma_downward_test_data[] =
 static void
 fma_test_downward (void)
 {
-  START (fma_downward);
+  START (fma_downward, 1);
   RUN_TEST_LOOP_fff_f (fma, fma_downward_test_data, FE_DOWNWARD);
   END;
 }
@@ -7500,7 +7521,7 @@ static const struct test_fff_f_data fma_upward_test_data[] =
 static void
 fma_test_upward (void)
 {
-  START (fma_upward);
+  START (fma_upward, 1);
   RUN_TEST_LOOP_fff_f (fma, fma_upward_test_data, FE_UPWARD);
   END;
 }
@@ -7541,7 +7562,7 @@ static const struct test_ff_f_data fmax_test_data[] =
 static void
 fmax_test (void)
 {
-  START (fmax);
+  START (fmax, 1);
   RUN_TEST_LOOP_ff_f (fmax, fmax_test_data, );
   END;
 }
@@ -7581,7 +7602,7 @@ static const struct test_ff_f_data fmin_test_data[] =
 static void
 fmin_test (void)
 {
-  START (fmin);
+  START (fmin, 1);
   RUN_TEST_LOOP_ff_f (fmin, fmin_test_data, );
   END;
 }
@@ -7635,7 +7656,7 @@ static const struct test_ff_f_data fmod_test_data[] =
 static void
 fmod_test (void)
 {
-  START (fmod);
+  START (fmod, 1);
   RUN_TEST_LOOP_ff_f (fmod, fmod_test_data, );
   END;
 }
@@ -7655,7 +7676,7 @@ static const struct test_f_i_data fpclassify_test_data[] =
 static void
 fpclassify_test (void)
 {
-  START (fpclassify);
+  START (fpclassify, 1);
   RUN_TEST_LOOP_f_i_tg (fpclassify, fpclassify_test_data, );
   END;
 }
@@ -7679,7 +7700,7 @@ frexp_test (void)
 {
   int x;
 
-  START (frexp);
+  START (frexp, 1);
   RUN_TEST_LOOP_fI_f1 (frexp, frexp_test_data, , x);
   END;
 }
@@ -7702,7 +7723,7 @@ static const struct test_ff_f_data hypot_test_data[] =
 static void
 hypot_test (void)
 {
-  START (hypot);
+  START (hypot, 0);
   RUN_TEST_LOOP_ff_f (hypot, hypot_test_data, );
   END;
 }
@@ -7728,7 +7749,7 @@ static const struct test_f_i_data ilogb_test_data[] =
 static void
 ilogb_test (void)
 {
-  START (ilogb);
+  START (ilogb, 1);
   RUN_TEST_LOOP_f_i (ilogb, ilogb_test_data, );
   END;
 }
@@ -7747,7 +7768,7 @@ static const struct test_f_i_data isfinite_test_data[] =
 static void
 isfinite_test (void)
 {
-  START (isfinite);
+  START (isfinite, 1);
   RUN_TEST_LOOP_f_b_tg (isfinite, isfinite_test_data, );
   END;
 }
@@ -7755,7 +7776,7 @@ isfinite_test (void)
 static void
 finite_test (void)
 {
-  START (finite);
+  START (finite, 1);
   /* finite uses the same test data as isfinite.  */
   RUN_TEST_LOOP_f_b (finite, isfinite_test_data, );
   END;
@@ -7784,7 +7805,7 @@ static const struct test_ff_i_data isgreater_test_data[] =
 static void
 isgreater_test (void)
 {
-  START (isgreater);
+  START (isgreater, 1);
   RUN_TEST_LOOP_ff_i_tg (isgreater, isgreater_test_data, );
   END;
 }
@@ -7812,7 +7833,7 @@ static const struct test_ff_i_data isgreaterequal_test_data[] =
 static void
 isgreaterequal_test (void)
 {
-  START (isgreaterequal);
+  START (isgreaterequal, 1);
   RUN_TEST_LOOP_ff_i_tg (isgreaterequal, isgreaterequal_test_data, );
   END;
 }
@@ -7831,7 +7852,7 @@ static const struct test_f_i_data isinf_test_data[] =
 static void
 isinf_test (void)
 {
-  START (isinf);
+  START (isinf, 1);
   RUN_TEST_LOOP_f_b_tg (isinf, isinf_test_data, );
   END;
 }
@@ -7859,7 +7880,7 @@ static const struct test_ff_i_data isless_test_data[] =
 static void
 isless_test (void)
 {
-  START (isless);
+  START (isless, 1);
   RUN_TEST_LOOP_ff_i_tg (isless, isless_test_data, );
   END;
 }
@@ -7887,7 +7908,7 @@ static const struct test_ff_i_data islessequal_test_data[] =
 static void
 islessequal_test (void)
 {
-  START (islessequal);
+  START (islessequal, 1);
   RUN_TEST_LOOP_ff_i_tg (islessequal, islessequal_test_data, );
   END;
 }
@@ -7915,7 +7936,7 @@ static const struct test_ff_i_data islessgreater_test_data[] =
 static void
 islessgreater_test (void)
 {
-  START (islessgreater);
+  START (islessgreater, 1);
   RUN_TEST_LOOP_ff_i_tg (islessgreater, islessgreater_test_data, );
   END;
 }
@@ -7934,7 +7955,7 @@ static const struct test_f_i_data isnan_test_data[] =
 static void
 isnan_test (void)
 {
-  START (isnan);
+  START (isnan, 1);
   RUN_TEST_LOOP_f_b_tg (isnan, isnan_test_data, );
   END;
 }
@@ -7953,7 +7974,7 @@ static const struct test_f_i_data isnormal_test_data[] =
 static void
 isnormal_test (void)
 {
-  START (isnormal);
+  START (isnormal, 1);
   RUN_TEST_LOOP_f_b_tg (isnormal, isnormal_test_data, );
   END;
 }
@@ -7972,7 +7993,7 @@ static const struct test_f_i_data issignaling_test_data[] =
 static void
 issignaling_test (void)
 {
-  START (issignaling);
+  START (issignaling, 1);
   RUN_TEST_LOOP_f_b_tg (issignaling, issignaling_test_data, );
   END;
 }
@@ -8000,7 +8021,7 @@ static const struct test_ff_i_data isunordered_test_data[] =
 static void
 isunordered_test (void)
 {
-  START (isunordered);
+  START (isunordered, 1);
   RUN_TEST_LOOP_ff_i_tg (isunordered, isunordered_test_data, );
   END;
 }
@@ -8017,7 +8038,7 @@ static const struct test_f_f_data j0_test_data[] =
 static void
 j0_test (void)
 {
-  START (j0);
+  START (j0, 0);
   RUN_TEST_LOOP_f_f (j0, j0_test_data, );
   END;
 }
@@ -8035,7 +8056,7 @@ static const struct test_f_f_data j1_test_data[] =
 static void
 j1_test (void)
 {
-  START (j1);
+  START (j1, 0);
   RUN_TEST_LOOP_f_f (j1, j1_test_data, );
   END;
 }
@@ -8065,7 +8086,7 @@ static const struct test_if_f_data jn_test_data[] =
 static void
 jn_test (void)
 {
-  START (jn);
+  START (jn, 0);
   RUN_TEST_LOOP_if_f (jn, jn_test_data, );
   END;
 }
@@ -8090,7 +8111,7 @@ static const struct test_fi_f_data ldexp_test_data[] =
 static void
 ldexp_test (void)
 {
-  START (ldexp);
+  START (ldexp, 1);
   RUN_TEST_LOOP_fi_f (ldexp, ldexp_test_data, );
   END;
 }
@@ -8114,7 +8135,7 @@ static const struct test_f_f1_data lgamma_test_data[] =
 static void
 lgamma_test (void)
 {
-  START (lgamma);
+  START (lgamma, 0);
   RUN_TEST_LOOP_f_f1 (lgamma, lgamma_test_data, , signgam);
   END;
 }
@@ -8122,7 +8143,7 @@ lgamma_test (void)
 static void
 gamma_test (void)
 {
-  START (gamma);
+  START (gamma, 0);
   /* gamma uses the same test data as lgamma.  */
   RUN_TEST_LOOP_f_f1 (gamma, lgamma_test_data, , signgam);
   END;
@@ -8160,7 +8181,7 @@ static const struct test_f_l_data lrint_test_data[] =
 static void
 lrint_test (void)
 {
-  START (lrint);
+  START (lrint, 1);
   RUN_TEST_LOOP_f_l (lrint, lrint_test_data, );
   END;
 }
@@ -8198,7 +8219,7 @@ static const struct test_f_l_data lrint_tonearest_test_data[] =
 static void
 lrint_test_tonearest (void)
 {
-  START (lrint_tonearest);
+  START (lrint_tonearest, 1);
   RUN_TEST_LOOP_f_l (lrint, lrint_tonearest_test_data, FE_TONEAREST);
   END;
 }
@@ -8236,7 +8257,7 @@ static const struct test_f_l_data lrint_towardzero_test_data[] =
 static void
 lrint_test_towardzero (void)
 {
-  START (lrint_towardzero);
+  START (lrint_towardzero, 1);
   RUN_TEST_LOOP_f_l (lrint, lrint_towardzero_test_data, FE_TOWARDZERO);
   END;
 }
@@ -8274,7 +8295,7 @@ static const struct test_f_l_data lrint_downward_test_data[] =
 static void
 lrint_test_downward (void)
 {
-  START (lrint_downward);
+  START (lrint_downward, 1);
   RUN_TEST_LOOP_f_l (lrint, lrint_downward_test_data, FE_DOWNWARD);
   END;
 }
@@ -8312,7 +8333,7 @@ static const struct test_f_l_data lrint_upward_test_data[] =
 static void
 lrint_test_upward (void)
 {
-  START (lrint_upward);
+  START (lrint_upward, 1);
   RUN_TEST_LOOP_f_l (lrint, lrint_upward_test_data, FE_UPWARD);
   END;
 }
@@ -8454,7 +8475,7 @@ static const struct test_f_L_data llrint_test_data[] =
 static void
 llrint_test (void)
 {
-  START (llrint);
+  START (llrint, 1);
   RUN_TEST_LOOP_f_L (llrint, llrint_test_data, );
   END;
 }
@@ -8592,7 +8613,7 @@ static const struct test_f_L_data llrint_tonearest_test_data[] =
 static void
 llrint_test_tonearest (void)
 {
-  START (llrint_tonearest);
+  START (llrint_tonearest, 1);
   RUN_TEST_LOOP_f_L (llrint, llrint_tonearest_test_data, FE_TONEAREST);
   END;
 }
@@ -8730,7 +8751,7 @@ static const struct test_f_L_data llrint_towardzero_test_data[] =
 static void
 llrint_test_towardzero (void)
 {
-  START (llrint_towardzero);
+  START (llrint_towardzero, 1);
   RUN_TEST_LOOP_f_L (llrint, llrint_towardzero_test_data, FE_TOWARDZERO);
   END;
 }
@@ -8864,7 +8885,7 @@ static const struct test_f_L_data llrint_downward_test_data[] =
 static void
 llrint_test_downward (void)
 {
-  START (llrint_downward);
+  START (llrint_downward, 1);
   RUN_TEST_LOOP_f_L (llrint, llrint_downward_test_data, FE_DOWNWARD);
   END;
 }
@@ -8996,7 +9017,7 @@ static const struct test_f_L_data llrint_upward_test_data[] =
 static void
 llrint_test_upward (void)
 {
-  START (llrint_upward);
+  START (llrint_upward, 1);
   RUN_TEST_LOOP_f_L (llrint, llrint_upward_test_data, FE_UPWARD);
   END;
 }
@@ -9019,7 +9040,7 @@ static const struct test_f_f_data log_test_data[] =
 static void
 log_test (void)
 {
-  START (log);
+  START (log, 0);
   RUN_TEST_LOOP_f_f (log, log_test_data, );
   END;
 }
@@ -9044,7 +9065,7 @@ static const struct test_f_f_data log10_test_data[] =
 static void
 log10_test (void)
 {
-  START (log10);
+  START (log10, 0);
   RUN_TEST_LOOP_f_f (log10, log10_test_data, );
   END;
 }
@@ -9066,7 +9087,7 @@ static const struct test_f_f_data log1p_test_data[] =
 static void
 log1p_test (void)
 {
-  START (log1p);
+  START (log1p, 0);
   RUN_TEST_LOOP_f_f (log1p, log1p_test_data, );
   END;
 }
@@ -9090,7 +9111,7 @@ static const struct test_f_f_data log2_test_data[] =
 static void
 log2_test (void)
 {
-  START (log2);
+  START (log2, 0);
   RUN_TEST_LOOP_f_f (log2, log2_test_data, );
   END;
 }
@@ -9131,7 +9152,7 @@ static const struct test_f_f_data logb_test_data[] =
 static void
 logb_test (void)
 {
-  START (logb);
+  START (logb, 1);
   RUN_TEST_LOOP_f_f (logb, logb_test_data, );
   END;
 }
@@ -9153,7 +9174,7 @@ static const struct test_f_f_data logb_downward_test_data[] =
 static void
 logb_test_downward (void)
 {
-  START (logb_downward);
+  START (logb_downward, 1);
   RUN_TEST_LOOP_f_f (logb, logb_downward_test_data, FE_DOWNWARD);
   END;
 }
@@ -9201,7 +9222,7 @@ static const struct test_f_l_data lround_test_data[] =
 static void
 lround_test (void)
 {
-  START (lround);
+  START (lround, 1);
   RUN_TEST_LOOP_f_l (lround, lround_test_data, );
   END;
 }
@@ -9378,7 +9399,7 @@ static const struct test_f_L_data llround_test_data[] =
 static void
 llround_test (void)
 {
-  START (llround);
+  START (llround, 1);
   RUN_TEST_LOOP_f_L (llround, llround_test_data, );
   END;
 }
@@ -9402,7 +9423,7 @@ modf_test (void)
 {
   FLOAT x;
 
-  START (modf);
+  START (modf, 1);
   RUN_TEST_LOOP_fF_f1 (modf, modf_test_data, , x);
   END;
 }
@@ -9458,7 +9479,7 @@ static const struct test_f_f_data nearbyint_test_data[] =
 static void
 nearbyint_test (void)
 {
-  START (nearbyint);
+  START (nearbyint, 1);
   RUN_TEST_LOOP_f_f (nearbyint, nearbyint_test_data, );
   END;
 }
@@ -9495,7 +9516,7 @@ static void
 nextafter_test (void)
 {
 
-  START (nextafter);
+  START (nextafter, 1);
   RUN_TEST_LOOP_ff_f (nextafter, nextafter_test_data, );
   END;
 }
@@ -9589,7 +9610,7 @@ static const struct test_ff_f_data_nexttoward nexttoward_test_data[] =
 static void
 nexttoward_test (void)
 {
-  START (nexttoward);
+  START (nexttoward, 1);
   RUN_TEST_LOOP_ff_f (nexttoward, nexttoward_test_data, );
   END;
 }
@@ -9882,7 +9903,7 @@ static void
 pow_test (void)
 {
 
-  START (pow);
+  START (pow, 0);
   RUN_TEST_LOOP_ff_f (pow, pow_test_data, );
   END;
 }
@@ -9896,7 +9917,7 @@ static const struct test_ff_f_data pow_tonearest_test_data[] =
 static void
 pow_test_tonearest (void)
 {
-  START (pow_tonearest);
+  START (pow_tonearest, 0);
   RUN_TEST_LOOP_ff_f (pow, pow_tonearest_test_data, FE_TONEAREST);
   END;
 }
@@ -9911,7 +9932,7 @@ static const struct test_ff_f_data pow_towardzero_test_data[] =
 static void
 pow_test_towardzero (void)
 {
-  START (pow_towardzero);
+  START (pow_towardzero, 0);
   RUN_TEST_LOOP_ff_f (pow, pow_towardzero_test_data, FE_TOWARDZERO);
   END;
 }
@@ -9926,7 +9947,7 @@ static const struct test_ff_f_data pow_downward_test_data[] =
 static void
 pow_test_downward (void)
 {
-  START (pow_downward);
+  START (pow_downward, 0);
   RUN_TEST_LOOP_ff_f (pow, pow_downward_test_data, FE_DOWNWARD);
   END;
 }
@@ -9941,7 +9962,7 @@ static const struct test_ff_f_data pow_upward_test_data[] =
 static void
 pow_test_upward (void)
 {
-  START (pow_upward);
+  START (pow_upward, 0);
   RUN_TEST_LOOP_ff_f (pow, pow_upward_test_data, FE_UPWARD);
   END;
 }
@@ -9980,7 +10001,7 @@ static const struct test_ff_f_data remainder_test_data[] =
 static void
 remainder_test (void)
 {
-  START (remainder);
+  START (remainder, 1);
   RUN_TEST_LOOP_ff_f (remainder, remainder_test_data, );
   END;
 }
@@ -9988,7 +10009,7 @@ remainder_test (void)
 static void
 drem_test (void)
 {
-  START (drem);
+  START (drem, 1);
   /* drem uses the same test data as remainder.  */
   RUN_TEST_LOOP_ff_f (drem, remainder_test_data, );
   END;
@@ -10025,7 +10046,7 @@ static const struct test_ff_f_data remainder_tonearest_test_data[] =
 static void
 remainder_test_tonearest (void)
 {
-  START (remainder_tonearest);
+  START (remainder_tonearest, 1);
   RUN_TEST_LOOP_ff_f (remainder, remainder_tonearest_test_data, FE_TONEAREST);
   END;
 }
@@ -10033,7 +10054,7 @@ remainder_test_tonearest (void)
 static void
 drem_test_tonearest (void)
 {
-  START (drem_tonearest);
+  START (drem_tonearest, 1);
   /* drem uses the same test data as remainder.  */
   RUN_TEST_LOOP_ff_f (drem, remainder_tonearest_test_data, FE_TONEAREST);
   END;
@@ -10070,7 +10091,7 @@ static const struct test_ff_f_data remainder_towardzero_test_data[] =
 static void
 remainder_test_towardzero (void)
 {
-  START (remainder_towardzero);
+  START (remainder_towardzero, 1);
   RUN_TEST_LOOP_ff_f (remainder, remainder_towardzero_test_data, FE_TOWARDZERO);
   END;
 }
@@ -10078,7 +10099,7 @@ remainder_test_towardzero (void)
 static void
 drem_test_towardzero (void)
 {
-  START (drem_towardzero);
+  START (drem_towardzero, 1);
   /* drem uses the same test data as remainder.  */
   RUN_TEST_LOOP_ff_f (drem, remainder_towardzero_test_data, FE_TOWARDZERO);
   END;
@@ -10115,7 +10136,7 @@ static const struct test_ff_f_data remainder_downward_test_data[] =
 static void
 remainder_test_downward (void)
 {
-  START (remainder_downward);
+  START (remainder_downward, 1);
   RUN_TEST_LOOP_ff_f (remainder, remainder_downward_test_data, FE_DOWNWARD);
   END;
 }
@@ -10123,7 +10144,7 @@ remainder_test_downward (void)
 static void
 drem_test_downward (void)
 {
-  START (drem_downward);
+  START (drem_downward, 1);
   /* drem uses the same test data as remainder.  */
   RUN_TEST_LOOP_ff_f (drem, remainder_downward_test_data, FE_DOWNWARD);
   END;
@@ -10160,7 +10181,7 @@ static const struct test_ff_f_data remainder_upward_test_data[] =
 static void
 remainder_test_upward (void)
 {
-  START (remainder_upward);
+  START (remainder_upward, 1);
   RUN_TEST_LOOP_ff_f (remainder, remainder_upward_test_data, FE_UPWARD);
   END;
 }
@@ -10168,7 +10189,7 @@ remainder_test_upward (void)
 static void
 drem_test_upward (void)
 {
-  START (drem_upward);
+  START (drem_upward, 1);
   /* drem uses the same test data as remainder.  */
   RUN_TEST_LOOP_ff_f (drem, remainder_upward_test_data, FE_UPWARD);
   END;
@@ -10197,7 +10218,7 @@ remquo_test (void)
   /* x is needed.  */
   int x;
 
-  START (remquo);
+  START (remquo, 1);
   RUN_TEST_LOOP_ffI_f1 (remquo, remquo_test_data, , x);
   END;
 }
@@ -10325,7 +10346,7 @@ static const struct test_f_f_data rint_test_data[] =
 static void
 rint_test (void)
 {
-  START (rint);
+  START (rint, 1);
   RUN_TEST_LOOP_f_f (rint, rint_test_data, );
   END;
 }
@@ -10406,7 +10427,7 @@ static const struct test_f_f_data rint_tonearest_test_data[] =
 static void
 rint_test_tonearest (void)
 {
-  START (rint_tonearest);
+  START (rint_tonearest, 1);
   RUN_TEST_LOOP_f_f (rint, rint_tonearest_test_data, FE_TONEAREST);
   END;
 }
@@ -10487,7 +10508,7 @@ static const struct test_f_f_data rint_towardzero_test_data[] =
 static void
 rint_test_towardzero (void)
 {
-  START (rint_towardzero);
+  START (rint_towardzero, 1);
   RUN_TEST_LOOP_f_f (rint, rint_towardzero_test_data, FE_TOWARDZERO);
   END;
 }
@@ -10568,7 +10589,7 @@ static const struct test_f_f_data rint_downward_test_data[] =
 static void
 rint_test_downward (void)
 {
-  START (rint_downward);
+  START (rint_downward, 1);
   RUN_TEST_LOOP_f_f (rint, rint_downward_test_data, FE_DOWNWARD);
   END;
 }
@@ -10649,7 +10670,7 @@ static const struct test_f_f_data rint_upward_test_data[] =
 static void
 rint_test_upward (void)
 {
-  START (rint_upward);
+  START (rint_upward, 1);
   RUN_TEST_LOOP_f_f (rint, rint_upward_test_data, FE_UPWARD);
   END;
 }
@@ -10753,7 +10774,7 @@ static const struct test_f_f_data round_test_data[] =
 static void
 round_test (void)
 {
-  START (round);
+  START (round, 1);
   RUN_TEST_LOOP_f_f (round, round_test_data, );
   END;
 }
@@ -10816,7 +10837,7 @@ static void
 scalb_test (void)
 {
 
-  START (scalb);
+  START (scalb, 1);
   RUN_TEST_LOOP_ff_f (scalb, scalb_test_data, );
   END;
 }
@@ -10850,7 +10871,7 @@ static void
 scalbn_test (void)
 {
 
-  START (scalbn);
+  START (scalbn, 1);
   RUN_TEST_LOOP_fi_f (scalbn, scalbn_test_data, );
   END;
 }
@@ -10904,7 +10925,7 @@ static void
 scalbln_test (void)
 {
 
-  START (scalbln);
+  START (scalbln, 1);
   RUN_TEST_LOOP_fl_f (scalbln, scalbln_test_data, );
   END;
 }
@@ -10928,7 +10949,7 @@ static const struct test_f_i_data signbit_test_data[] =
 static void
 signbit_test (void)
 {
-  START (signbit);
+  START (signbit, 1);
   RUN_TEST_LOOP_f_b_tg (signbit, signbit_test_data, );
   END;
 }
@@ -10946,7 +10967,7 @@ static const struct test_f_f_data sin_test_data[] =
 static void
 sin_test (void)
 {
-  START (sin);
+  START (sin, 0);
   RUN_TEST_LOOP_f_f (sin, sin_test_data, );
   END;
 }
@@ -10960,7 +10981,7 @@ static const struct test_f_f_data sin_tonearest_test_data[] =
 static void
 sin_test_tonearest (void)
 {
-  START (sin_tonearest);
+  START (sin_tonearest, 0);
   RUN_TEST_LOOP_f_f (sin, sin_tonearest_test_data, FE_TONEAREST);
   END;
 }
@@ -10974,7 +10995,7 @@ static const struct test_f_f_data sin_towardzero_test_data[] =
 static void
 sin_test_towardzero (void)
 {
-  START (sin_towardzero);
+  START (sin_towardzero, 0);
   RUN_TEST_LOOP_f_f (sin, sin_towardzero_test_data, FE_TOWARDZERO);
   END;
 }
@@ -10988,7 +11009,7 @@ static const struct test_f_f_data sin_downward_test_data[] =
 static void
 sin_test_downward (void)
 {
-  START (sin_downward);
+  START (sin_downward, 0);
   RUN_TEST_LOOP_f_f (sin, sin_downward_test_data, FE_DOWNWARD);
   END;
 }
@@ -11002,7 +11023,7 @@ static const struct test_f_f_data sin_upward_test_data[] =
 static void
 sin_test_upward (void)
 {
-  START (sin_upward);
+  START (sin_upward, 0);
   RUN_TEST_LOOP_f_f (sin, sin_upward_test_data, FE_UPWARD);
   END;
 }
@@ -11022,7 +11043,7 @@ sincos_test (void)
 {
   FLOAT sin_res, cos_res;
 
-  START (sincos);
+  START (sincos, 0);
   RUN_TEST_LOOP_fFF_11 (sincos, sincos_test_data, , sin_res, cos_res);
   END;
 }
@@ -11039,7 +11060,7 @@ static const struct test_f_f_data sinh_test_data[] =
 static void
 sinh_test (void)
 {
-  START (sinh);
+  START (sinh, 0);
   RUN_TEST_LOOP_f_f (sinh, sinh_test_data, );
   END;
 }
@@ -11053,7 +11074,7 @@ static const struct test_f_f_data sinh_tonearest_test_data[] =
 static void
 sinh_test_tonearest (void)
 {
-  START (sinh_tonearest);
+  START (sinh_tonearest, 0);
   RUN_TEST_LOOP_f_f (sinh, sinh_tonearest_test_data, FE_TONEAREST);
   END;
 }
@@ -11067,7 +11088,7 @@ static const struct test_f_f_data sinh_towardzero_test_data[] =
 static void
 sinh_test_towardzero (void)
 {
-  START (sinh_towardzero);
+  START (sinh_towardzero, 0);
   RUN_TEST_LOOP_f_f (sinh, sinh_towardzero_test_data, FE_TOWARDZERO);
   END;
 }
@@ -11081,7 +11102,7 @@ static const struct test_f_f_data sinh_downward_test_data[] =
 static void
 sinh_test_downward (void)
 {
-  START (sinh_downward);
+  START (sinh_downward, 0);
   RUN_TEST_LOOP_f_f (sinh, sinh_downward_test_data, FE_DOWNWARD);
   END;
 }
@@ -11095,7 +11116,7 @@ static const struct test_f_f_data sinh_upward_test_data[] =
 static void
 sinh_test_upward (void)
 {
-  START (sinh_upward);
+  START (sinh_upward, 0);
   RUN_TEST_LOOP_f_f (sinh, sinh_upward_test_data, FE_UPWARD);
   END;
 }
@@ -11117,7 +11138,7 @@ static const struct test_f_f_data sqrt_test_data[] =
 static void
 sqrt_test (void)
 {
-  START (sqrt);
+  START (sqrt, 1);
   RUN_TEST_LOOP_f_f (sqrt, sqrt_test_data, );
   END;
 }
@@ -11138,7 +11159,7 @@ static const struct test_f_f_data sqrt_tonearest_test_data[] =
 static void
 sqrt_test_tonearest (void)
 {
-  START (sqrt_tonearest);
+  START (sqrt_tonearest, 1);
   RUN_TEST_LOOP_f_f (sqrt, sqrt_tonearest_test_data, FE_TONEAREST);
   END;
 }
@@ -11159,7 +11180,7 @@ static const struct test_f_f_data sqrt_towardzero_test_data[] =
 static void
 sqrt_test_towardzero (void)
 {
-  START (sqrt_towardzero);
+  START (sqrt_towardzero, 1);
   RUN_TEST_LOOP_f_f (sqrt, sqrt_towardzero_test_data, FE_TOWARDZERO);
   END;
 }
@@ -11180,7 +11201,7 @@ static const struct test_f_f_data sqrt_downward_test_data[] =
 static void
 sqrt_test_downward (void)
 {
-  START (sqrt_downward);
+  START (sqrt_downward, 1);
   RUN_TEST_LOOP_f_f (sqrt, sqrt_downward_test_data, FE_DOWNWARD);
   END;
 }
@@ -11201,7 +11222,7 @@ static const struct test_f_f_data sqrt_upward_test_data[] =
 static void
 sqrt_test_upward (void)
 {
-  START (sqrt_upward);
+  START (sqrt_upward, 1);
   RUN_TEST_LOOP_f_f (sqrt, sqrt_upward_test_data, FE_UPWARD);
   END;
 }
@@ -11219,7 +11240,7 @@ static const struct test_f_f_data tan_test_data[] =
 static void
 tan_test (void)
 {
-  START (tan);
+  START (tan, 0);
   RUN_TEST_LOOP_f_f (tan, tan_test_data, );
   END;
 }
@@ -11233,7 +11254,7 @@ static const struct test_f_f_data tan_tonearest_test_data[] =
 static void
 tan_test_tonearest (void)
 {
-  START (tan_tonearest);
+  START (tan_tonearest, 0);
   RUN_TEST_LOOP_f_f (tan, tan_tonearest_test_data, FE_TONEAREST);
   END;
 }
@@ -11247,7 +11268,7 @@ static const struct test_f_f_data tan_towardzero_test_data[] =
 static void
 tan_test_towardzero (void)
 {
-  START (tan_towardzero);
+  START (tan_towardzero, 0);
   RUN_TEST_LOOP_f_f (tan, tan_towardzero_test_data, FE_TOWARDZERO);
   END;
 }
@@ -11261,7 +11282,7 @@ static const struct test_f_f_data tan_downward_test_data[] =
 static void
 tan_test_downward (void)
 {
-  START (tan_downward);
+  START (tan_downward, 0);
   RUN_TEST_LOOP_f_f (tan, tan_downward_test_data, FE_DOWNWARD);
   END;
 }
@@ -11275,7 +11296,7 @@ static const struct test_f_f_data tan_upward_test_data[] =
 static void
 tan_test_upward (void)
 {
-  START (tan_upward);
+  START (tan_upward, 0);
   RUN_TEST_LOOP_f_f (tan, tan_upward_test_data, FE_UPWARD);
   END;
 }
@@ -11293,7 +11314,7 @@ static const struct test_f_f_data tanh_test_data[] =
 static void
 tanh_test (void)
 {
-  START (tanh);
+  START (tanh, 0);
   RUN_TEST_LOOP_f_f (tanh, tanh_test_data, );
   END;
 }
@@ -11316,7 +11337,7 @@ static const struct test_f_f_data tgamma_test_data[] =
 static void
 tgamma_test (void)
 {
-  START (tgamma);
+  START (tgamma, 0);
   RUN_TEST_LOOP_f_f (tgamma, tgamma_test_data, );
   END;
 }
@@ -11430,7 +11451,7 @@ static const struct test_f_f_data trunc_test_data[] =
 static void
 trunc_test (void)
 {
-  START (trunc);
+  START (trunc, 1);
   RUN_TEST_LOOP_f_f (trunc, trunc_test_data, );
   END;
 }
@@ -11452,7 +11473,7 @@ static const struct test_f_f_data y0_test_data[] =
 static void
 y0_test (void)
 {
-  START (y0);
+  START (y0, 0);
   RUN_TEST_LOOP_f_f (y0, y0_test_data, );
   END;
 }
@@ -11475,7 +11496,7 @@ static const struct test_f_f_data y1_test_data[] =
 static void
 y1_test (void)
 {
-  START (y1);
+  START (y1, 0);
   RUN_TEST_LOOP_f_f (y1, y1_test_data, );
   END;
 }
@@ -11548,7 +11569,7 @@ static const struct test_if_f_data yn_test_data[] =
 static void
 yn_test (void)
 {
-  START (yn);
+  START (yn, 0);
   RUN_TEST_LOOP_if_f (yn, yn_test_data, );
   END;
 }
@@ -11566,7 +11587,7 @@ static const struct test_f_f_data significand_test_data[] =
 static void
 significand_test (void)
 {
-  START (significand);
+  START (significand, 1);
   RUN_TEST_LOOP_f_f (significand, significand_test_data, );
   END;
 }