[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Commits] r24550 - in /fsf/trunk/libc: ./ math/ sysdeps/i386/fpu/ sysdeps/x86_64/fpu/



Author: eglibc
Date: Sun Nov 17 00:01:52 2013
New Revision: 24550

Log:
Import glibc-mainline for 2013-11-17

Modified:
    fsf/trunk/libc/ChangeLog
    fsf/trunk/libc/NEWS
    fsf/trunk/libc/math/gen-libm-test.pl
    fsf/trunk/libc/math/libm-test.inc
    fsf/trunk/libc/sysdeps/i386/fpu/e_pow.S
    fsf/trunk/libc/sysdeps/i386/fpu/e_powf.S
    fsf/trunk/libc/sysdeps/i386/fpu/e_powl.S
    fsf/trunk/libc/sysdeps/x86_64/fpu/e_powl.S

Modified: fsf/trunk/libc/ChangeLog
==============================================================================
--- fsf/trunk/libc/ChangeLog (original)
+++ fsf/trunk/libc/ChangeLog Sun Nov 17 00:01:52 2013
@@ -1,3 +1,131 @@
+2013-11-16  Joseph Myers  <joseph@xxxxxxxxxxxxxxxx>
+
+	* math/libm-test.inc (TEST_NAN_SIGN): New macro.
+	(NO_TEST_INLINE): Update value.
+	(ERRNO_UNCHANGED): Likewise.
+	(ERRNO_EDOM): Likewise.
+	(ERRNO_ERANGE): Likewise.
+	(IGNORE_RESULT): Likewise.
+	(check_float_internal): Check signs of NaN results if
+	TEST_NAN_SIGN used.
+	(check_complex): Pass TEST_NAN_SIGN flag through to second
+	check_float_internal call.
+	(copysign_test_data): Add tests with quiet NaNs as second
+	argument.  Use TEST_NAN_SIGN.
+	(fabs_test_data): Add test of negative quiet NaN argument.  Use
+	TEST_NAN_SIGN.
+	(signbit_test_data): Add tests of quiet NaN argument.
+	* math/gen-libm-test.pl (parse_args): Handle TEST_NAN_SIGN.
+
+	* math/gen-libm-test.pl (show_exceptions): Take extra argument
+	$ignore_result.
+	(parse_args): Handle function results specified as IGNORE.
+	* math/libm-test.inc (IGNORE_RESULT): New macro.
+	(check_float_internal): Do not check numerical result if flag
+	IGNORE_RESULT set.
+	(check_complex): Pass through IGNORE_RESULT to second
+	check_float_internal call.
+	(check_int): Do not check numerical result if flag IGNORE_RESULT
+	set.
+	(check_long): Likewise.
+	(check_bool): Likewise.
+	(check_longlong): Likewise.
+	(lrint_test_data): Add tests of infinite and NaN arguments.
+	(lrint_tonearest_test_data): Likewise.
+	(lrint_towardzero_test_data): Likewise.
+	(lrint_downward_test_data): Likewise.
+	(lrint_upward_test_data): Likewise.
+	(llrint_test_data): Likewise.
+	(llrint_tonearest_test_data): Likewise.
+	(llrint_towardzero_test_data): Likewise.
+	(llrint_downward_test_data): Likewise.
+	(llrint_upward_test_data): Likewise.
+	(lround_test_data): Likewise.
+	(llround_test_data): Likewise.
+
+	* math/libm-test.inc (NO_TEST_INLINE): New macro.
+	(ERRNO_UNCHANGED): Update value.
+	(ERRNO_EDOM): Likewise.
+	(ERRNO_ERANGE): Likewise.
+	(NO_TEST_INLINE_FLOAT): New macro.
+	(NO_TEST_INLINE_DOUBLE): Likewise.
+	(enable_test): New function.
+	(RUN_TEST_f_f): Check enable_test before running test.
+	(RUN_TEST_2_f): Likewise.
+	(RUN_TEST_fff_f): Likewise.
+	(RUN_TEST_c_f): Likewise.
+	(RUN_TEST_f_f1): Likewise.
+	(RUN_TEST_fF_f1): Likewise.
+	(RUN_TEST_fI_f1): Likewise.
+	(RUN_TEST_ffI_f1): Likewise.
+	(RUN_TEST_c_c): Likewise.
+	(RUN_TEST_cc_c): Likewise.
+	(RUN_TEST_f_i): Likewise.
+	(RUN_TEST_f_i_tg): Likewise.
+	(RUN_TEST_ff_i_tg): Likewise.
+	(RUN_TEST_f_b): Likewise.
+	(RUN_TEST_f_b_tg): Likewise.
+	(RUN_TEST_f_l): Likewise.
+	(RUN_TEST_f_L): Likewise.
+	(RUN_TEST_fFF_11): Likewise.
+	(asinh_test_data): Use NO_TEST_INLINE instead of [!TEST_INLINE]
+	conditionals.
+	(cosh_test_data): Likewise.
+	(exp_test_data): Likewise.
+	(expm1_test_data): Likewise.
+	(hypot_test_data): Likewise.
+	(pow_test_data): Likewise.
+	(sinh_test_data): Likewise.
+	(tanh_test_data): Likewise.
+	* math/gen-libm-test.pl (parse_args): Allow NO_TEST_INLINE as
+	flags argument.
+
+	* libm-test.inc (acos_test_data): Disallow inexact exceptions for
+	tests with quiet NaN input and output.
+	(acosh_test_data): Likewise.
+	(asin_test_data): Likewise.
+	(asinh_test_data): Likewise.
+	(atan_test_data): Likewise.
+	(atanh_test_data): Likewise.
+	(atan2_test_data): Likewise.
+	(cbrt_test_data): Likewise.
+	(cos_test_data): Likewise.
+	(cosh_test_data): Likewise.
+	(erf_test_data): Likewise.
+	(erfc_test_data): Likewise.
+	(exp_test_data): Likewise.
+	(exp10_test_data): Likewise.
+	(exp2_test_data): Likewise.
+	(expm1_test_data): Likewise.
+	(hypot_test_data): Likewise.
+	(j0_test_data): Likewise.
+	(j1_test_data): Likewise.
+	(jn_test_data): Likewise.
+	(lgamma_test_data): Likewise.
+	(log_test_data): Likewise.
+	(log10_test_data): Likewise.
+	(log1p_test_data): Likewise.
+	(log2_test_data): Likewise.
+	(pow_test_data): Likewise.
+	(scalb_test_data): Likewise.
+	(sin_test_data): Likewise.
+	(sincos_test_data): Likewise.
+	(sinh_test_data): Likewise.
+	(tan_test_data): Likewise.
+	(tanh_test_data): Likewise.
+	(tgamma_test_data): Likewise.
+	(y0_test_data): Likewise.
+	(y1_test_data): Likewise.
+	(yn_test_data): Likewise.
+
+	[BZ #16167]
+	* sysdeps/i386/fpu/e_pow.S (__ieee754_pow): Check for first
+	argument being NaN and avoid computations with second argument in
+	that case.
+	* sysdeps/i386/fpu/e_powf.S (__ieee754_powf): Likewise.
+	* sysdeps/i386/fpu/e_powl.S (__ieee754_powl): Likewise.
+	* sysdeps/x86_64/fpu/e_powl.S (__ieee754_powl): Likewise.
+
 2013-11-15  Arun Kumar Pyasi <arun@xxxxxxxxxxxxx>
 
 	* locale/iso-639.def: Add Chitwani Tharu (the).

Modified: fsf/trunk/libc/NEWS
==============================================================================
--- fsf/trunk/libc/NEWS (original)
+++ fsf/trunk/libc/NEWS Sun Nov 17 00:01:52 2013
@@ -18,7 +18,7 @@
   15887, 15890, 15892, 15893, 15895, 15897, 15905, 15909, 15917, 15919,
   15921, 15923, 15939, 15948, 15963, 15966, 15985, 15988, 15997, 16032,
   16034, 16036, 16037, 16041, 16071, 16072, 16074, 16078, 16103, 16112,
-  16143, 16150, 16151, 16153, 16172.
+  16143, 16150, 16151, 16153, 16167, 16172.
 
 * CVE-2012-4412 The strcoll implementation caches indices and rules for
   large collation sequences to optimize multiple passes.  This cache

Modified: fsf/trunk/libc/math/gen-libm-test.pl
==============================================================================
--- fsf/trunk/libc/math/gen-libm-test.pl (original)
+++ fsf/trunk/libc/math/gen-libm-test.pl Sun Nov 17 00:01:52 2013
@@ -147,11 +147,12 @@
 # Return the text to put in an initializer for a test's exception
 # information.
 sub show_exceptions {
-  my ($exception) = @_;
+  my ($ignore_result, $exception) = @_;
+  $ignore_result = ($ignore_result ? "IGNORE_RESULT|" : "");
   if (defined $exception) {
-    return ", $exception";
+    return ", ${ignore_result}$exception";
   } else {
-    return ', 0';
+    return ", ${ignore_result}0";
   }
 }
 
@@ -162,6 +163,7 @@
   my ($current_arg, $cline, $i);
   my (@special);
   my ($call_args);
+  my ($ignore_result_any, $ignore_result_all);
 
   ($descr_args, $descr_res) = split /_/,$descr, 2;
 
@@ -216,7 +218,7 @@
   # consistency check
   if ($current_arg == $#args) {
     die ("wrong number of arguments")
-      unless ($args[$current_arg] =~ /EXCEPTION|ERRNO|IGNORE_ZERO_INF_SIGN/);
+      unless ($args[$current_arg] =~ /EXCEPTION|ERRNO|IGNORE_ZERO_INF_SIGN|TEST_NAN_SIGN|NO_TEST_INLINE/);
   } elsif ($current_arg < $#args) {
     die ("wrong number of arguments");
   } elsif ($current_arg > ($#args+1)) {
@@ -249,20 +251,47 @@
   }
 
   @descr = split //,$descr_res;
+  $ignore_result_any = 0;
+  $ignore_result_all = 1;
   foreach (@descr) {
     if ($_ =~ /b|f|i|l|L/ ) {
-      $cline .= ", $args[$current_arg]";
+      my ($result) = $args[$current_arg];
+      if ($result eq "IGNORE") {
+	$ignore_result_any = 1;
+	$result = "0";
+      } else {
+	$ignore_result_all = 0;
+      }
+      $cline .= ", $result";
       $current_arg++;
     } elsif ($_ eq 'c') {
-      $cline .= ", $args[$current_arg], $args[$current_arg+1]";
+      my ($result1) = $args[$current_arg];
+      if ($result1 eq "IGNORE") {
+	$ignore_result_any = 1;
+	$result1 = "0";
+      } else {
+	$ignore_result_all = 0;
+      }
+      my ($result2) = $args[$current_arg + 1];
+      if ($result2 eq "IGNORE") {
+	$ignore_result_any = 1;
+	$result2 = "0";
+      } else {
+	$ignore_result_all = 0;
+      }
+      $cline .= ", $result1, $result2";
       $current_arg += 2;
     } elsif ($_ eq '1') {
       push @special, $args[$current_arg];
       ++$current_arg;
     }
   }
+  if ($ignore_result_any && !$ignore_result_all) {
+    die ("some but not all function results ignored\n");
+  }
   # Add exceptions.
-  $cline .= show_exceptions (($current_arg <= $#args)
+  $cline .= show_exceptions ($ignore_result_any,
+			     ($current_arg <= $#args)
 			     ? $args[$current_arg]
 			     : undef);
 

Modified: fsf/trunk/libc/math/libm-test.inc
==============================================================================
--- fsf/trunk/libc/math/libm-test.inc (original)
+++ fsf/trunk/libc/math/libm-test.inc Sun Nov 17 00:01:52 2013
@@ -173,10 +173,14 @@
 #define EXCEPTIONS_OK INVALID_EXCEPTION_OK+DIVIDE_BY_ZERO_EXCEPTION_OK
 /* Some special test flags, passed together with exceptions.  */
 #define IGNORE_ZERO_INF_SIGN		0x400
+#define TEST_NAN_SIGN			0x800
+#define NO_TEST_INLINE			0x1000
 /* Indicate errno settings required or disallowed.  */
-#define ERRNO_UNCHANGED			0x800
-#define ERRNO_EDOM			0x1000
-#define ERRNO_ERANGE			0x2000
+#define ERRNO_UNCHANGED			0x2000
+#define ERRNO_EDOM			0x4000
+#define ERRNO_ERANGE			0x8000
+/* Flags generated by gen-libm-test.pl, not entered here manually.  */
+#define IGNORE_RESULT			0x10000
 
 /* Values underflowing only for float.  */
 #ifdef TEST_FLOAT
@@ -208,6 +212,18 @@
 #define UNDERFLOW_EXCEPTION_BEFORE_ROUNDING	(TININESS_AFTER_ROUNDING \
 						 ? 0			\
 						 : UNDERFLOW_EXCEPTION)
+
+/* Inline tests disabled for particular types.  */
+#ifdef TEST_FLOAT
+# define NO_TEST_INLINE_FLOAT	NO_TEST_INLINE
+#else
+# define NO_TEST_INLINE_FLOAT	0
+#endif
+#ifdef TEST_DOUBLE
+# define NO_TEST_INLINE_DOUBLE	NO_TEST_INLINE
+#else
+# define NO_TEST_INLINE_DOUBLE	0
+#endif
 
 /* Various constants (we must supply them precalculated for accuracy).  */
 #define M_PI_6l			.52359877559829887307710723054658383L
@@ -713,13 +729,33 @@
 
   test_exceptions (test_name, exceptions);
   test_errno (test_name, errno_value, exceptions);
+  if (exceptions & IGNORE_RESULT)
+    goto out;
   FLOAT max_ulp = find_test_ulps (test_name);
   if (issignaling (computed) && issignaling (expected))
-    ok = 1;
+    {
+      if ((exceptions & TEST_NAN_SIGN) != 0
+	  && signbit (computed) != signbit (expected))
+	{
+	  ok = 0;
+	  printf ("signaling NaN has wrong sign.\n");
+	}
+      else
+	ok = 1;
+    }
   else if (issignaling (computed) || issignaling (expected))
     ok = 0;
   else if (isnan (computed) && isnan (expected))
-    ok = 1;
+    {
+      if ((exceptions & TEST_NAN_SIGN) != 0
+	  && signbit (computed) != signbit (expected))
+	{
+	  ok = 0;
+	  printf ("quiet NaN has wrong sign.\n");
+	}
+      else
+	ok = 1;
+    }
   else if (isinf (computed) && isinf (expected))
     {
       /* Test for sign of infinities.  */
@@ -775,6 +811,7 @@
     }
   update_stats (ok);
 
+ out:
   fpstack_test (test_name);
   errno = 0;
 }
@@ -814,9 +851,11 @@
   part_exp = __imag__ expected;
 
   /* Don't check again for exceptions or errno, just pass through the
-     zero/inf sign test.  */
+     other relevant flags.  */
   check_float_internal (str, part_comp, part_exp,
-			exception & IGNORE_ZERO_INF_SIGN,
+			exception & (IGNORE_ZERO_INF_SIGN
+				     | TEST_NAN_SIGN
+				     | IGNORE_RESULT),
 			&imag_max_error);
   free (str);
 }
@@ -832,6 +871,8 @@
 
   test_exceptions (test_name, exceptions);
   test_errno (test_name, errno_value, exceptions);
+  if (exceptions & IGNORE_RESULT)
+    goto out;
   noTests++;
   if (computed == expected)
     ok = 1;
@@ -847,6 +888,7 @@
     }
 
   update_stats (ok);
+ out:
   fpstack_test (test_name);
   errno = 0;
 }
@@ -862,6 +904,8 @@
 
   test_exceptions (test_name, exceptions);
   test_errno (test_name, errno_value, exceptions);
+  if (exceptions & IGNORE_RESULT)
+    goto out;
   noTests++;
   if (computed == expected)
     ok = 1;
@@ -877,6 +921,7 @@
     }
 
   update_stats (ok);
+ out:
   fpstack_test (test_name);
   errno = 0;
 }
@@ -892,6 +937,8 @@
 
   test_exceptions (test_name, exceptions);
   test_errno (test_name, errno_value, exceptions);
+  if (exceptions & IGNORE_RESULT)
+    goto out;
   noTests++;
   if ((computed == 0) == (expected == 0))
     ok = 1;
@@ -907,6 +954,7 @@
     }
 
   update_stats (ok);
+ out:
   fpstack_test (test_name);
   errno = 0;
 }
@@ -923,6 +971,8 @@
 
   test_exceptions (test_name, exceptions);
   test_errno (test_name, errno_value, exceptions);
+  if (exceptions & IGNORE_RESULT)
+    goto out;
   noTests++;
   if (computed == expected)
     ok = 1;
@@ -938,8 +988,20 @@
     }
 
   update_stats (ok);
+ out:
   fpstack_test (test_name);
   errno = 0;
+}
+
+/* Return whether a test with flags EXCEPTIONS should be run.  */
+static int
+enable_test (int exceptions)
+{
+#ifdef TEST_INLINE
+  if (exceptions & NO_TEST_INLINE)
+    return 0;
+#endif
+  return 1;
 }
 
 /* Structures for each kind of test.  */
@@ -1137,15 +1199,16 @@
 
 /* Run an individual test, including any required setup and checking
    of results, or loop over all tests in an array.  */
-#define RUN_TEST_f_f(ARG_STR, FUNC_NAME, ARG, EXPECTED,	\
-		     EXCEPTIONS)				\
-  do								\
-    {								\
-      COMMON_TEST_SETUP (ARG_STR);				\
-      check_float (test_name, FUNC (FUNC_NAME) (ARG), EXPECTED,	\
-		   EXCEPTIONS);					\
-      COMMON_TEST_CLEANUP;					\
-    }								\
+#define RUN_TEST_f_f(ARG_STR, FUNC_NAME, ARG, EXPECTED,			\
+		     EXCEPTIONS)					\
+  do									\
+    if (enable_test (EXCEPTIONS))					\
+      {									\
+	COMMON_TEST_SETUP (ARG_STR);					\
+	check_float (test_name, FUNC (FUNC_NAME) (ARG), EXPECTED,	\
+		     EXCEPTIONS);					\
+	COMMON_TEST_CLEANUP;						\
+      }									\
   while (0)
 #define RUN_TEST_LOOP_f_f(FUNC_NAME, ARRAY, ROUNDING_MODE)		\
   IF_ROUND_INIT_ ## ROUNDING_MODE					\
@@ -1153,15 +1216,16 @@
       RUN_TEST_f_f ((ARRAY)[i].arg_str, FUNC_NAME, (ARRAY)[i].arg,	\
 		    (ARRAY)[i].expected, (ARRAY)[i].exceptions);	\
   ROUND_RESTORE_ ## ROUNDING_MODE
-#define RUN_TEST_2_f(ARG_STR, FUNC_NAME, ARG1, ARG2, EXPECTED,		\
-		     EXCEPTIONS)					\
-  do									\
-    {									\
-      COMMON_TEST_SETUP (ARG_STR);					\
-      check_float (test_name, FUNC (FUNC_NAME) (ARG1, ARG2), EXPECTED,	\
-		   EXCEPTIONS);						\
-      COMMON_TEST_CLEANUP;						\
-    }									\
+#define RUN_TEST_2_f(ARG_STR, FUNC_NAME, ARG1, ARG2, EXPECTED,	\
+		     EXCEPTIONS)				\
+  do								\
+    if (enable_test (EXCEPTIONS))				\
+      {								\
+	COMMON_TEST_SETUP (ARG_STR);				\
+	check_float (test_name, FUNC (FUNC_NAME) (ARG1, ARG2),	\
+		     EXPECTED, EXCEPTIONS);			\
+	COMMON_TEST_CLEANUP;					\
+      }								\
   while (0)
 #define RUN_TEST_LOOP_2_f(FUNC_NAME, ARRAY, ROUNDING_MODE)		\
   IF_ROUND_INIT_ ## ROUNDING_MODE					\
@@ -1181,12 +1245,13 @@
 #define RUN_TEST_fff_f(ARG_STR, FUNC_NAME, ARG1, ARG2, ARG3,		\
 		       EXPECTED, EXCEPTIONS)				\
   do									\
-    {									\
-      COMMON_TEST_SETUP (ARG_STR);					\
-      check_float (test_name, FUNC (FUNC_NAME) (ARG1, ARG2, ARG3),	\
-		   EXPECTED, EXCEPTIONS);				\
-      COMMON_TEST_CLEANUP;						\
-    }									\
+    if (enable_test (EXCEPTIONS))					\
+      {									\
+	COMMON_TEST_SETUP (ARG_STR);					\
+	check_float (test_name, FUNC (FUNC_NAME) (ARG1, ARG2, ARG3),	\
+		     EXPECTED, EXCEPTIONS);				\
+	COMMON_TEST_CLEANUP;						\
+      }									\
   while (0)
 #define RUN_TEST_LOOP_fff_f(FUNC_NAME, ARRAY, ROUNDING_MODE)		\
   IF_ROUND_INIT_ ## ROUNDING_MODE					\
@@ -1198,13 +1263,14 @@
 #define RUN_TEST_c_f(ARG_STR, FUNC_NAME, ARG1, ARG2, EXPECTED,		\
 		     EXCEPTIONS)					\
   do									\
-    {									\
-      COMMON_TEST_SETUP (ARG_STR);					\
-      check_float (test_name,						\
-		   FUNC (FUNC_NAME) (BUILD_COMPLEX (ARG1, ARG2)),	\
-		   EXPECTED, EXCEPTIONS);				\
-      COMMON_TEST_CLEANUP;						\
-    }									\
+    if (enable_test (EXCEPTIONS))					\
+      {									\
+	COMMON_TEST_SETUP (ARG_STR);					\
+	check_float (test_name,						\
+		     FUNC (FUNC_NAME) (BUILD_COMPLEX (ARG1, ARG2)),	\
+		     EXPECTED, EXCEPTIONS);				\
+	COMMON_TEST_CLEANUP;						\
+      }									\
   while (0)
 #define RUN_TEST_LOOP_c_f(FUNC_NAME, ARRAY, ROUNDING_MODE)		\
   IF_ROUND_INIT_ ## ROUNDING_MODE					\
@@ -1213,21 +1279,22 @@
 		    (ARRAY)[i].argc, (ARRAY)[i].expected,		\
 		    (ARRAY)[i].exceptions);				\
   ROUND_RESTORE_ ## ROUNDING_MODE
-#define RUN_TEST_f_f1(ARG_STR, FUNC_NAME, ARG, EXPECTED,	\
-		      EXCEPTIONS, EXTRA_VAR, EXTRA_TEST,	\
-		      EXTRA_EXPECTED)				\
-  do								\
-    {								\
-      COMMON_TEST_SETUP (ARG_STR);				\
-      (EXTRA_VAR) = (EXTRA_EXPECTED) == 0 ? 1 : 0;		\
-      check_float (test_name, FUNC (FUNC_NAME) (ARG), EXPECTED,	\
-		   EXCEPTIONS);					\
-      EXTRA_OUTPUT_TEST_SETUP (ARG_STR, 1);			\
-      if (EXTRA_TEST)						\
-	check_int (extra1_name, EXTRA_VAR, EXTRA_EXPECTED, 0);	\
-      EXTRA_OUTPUT_TEST_CLEANUP (1);				\
-      COMMON_TEST_CLEANUP;					\
-    }								\
+#define RUN_TEST_f_f1(ARG_STR, FUNC_NAME, ARG, EXPECTED,		\
+		      EXCEPTIONS, EXTRA_VAR, EXTRA_TEST,		\
+		      EXTRA_EXPECTED)					\
+  do									\
+    if (enable_test (EXCEPTIONS))					\
+      {									\
+	COMMON_TEST_SETUP (ARG_STR);					\
+	(EXTRA_VAR) = (EXTRA_EXPECTED) == 0 ? 1 : 0;			\
+	check_float (test_name, FUNC (FUNC_NAME) (ARG), EXPECTED,	\
+		     EXCEPTIONS);					\
+	EXTRA_OUTPUT_TEST_SETUP (ARG_STR, 1);				\
+	if (EXTRA_TEST)							\
+	  check_int (extra1_name, EXTRA_VAR, EXTRA_EXPECTED, 0);	\
+	EXTRA_OUTPUT_TEST_CLEANUP (1);					\
+	COMMON_TEST_CLEANUP;						\
+      }									\
   while (0)
 #define RUN_TEST_LOOP_f_f1(FUNC_NAME, ARRAY, ROUNDING_MODE, EXTRA_VAR)	\
   IF_ROUND_INIT_ ## ROUNDING_MODE					\
@@ -1241,17 +1308,18 @@
 		       EXCEPTIONS, EXTRA_VAR, EXTRA_TEST,		\
 		       EXTRA_EXPECTED)					\
   do									\
-    {									\
-      COMMON_TEST_SETUP (ARG_STR);					\
-      (EXTRA_VAR) = (EXTRA_EXPECTED) == 0 ? 1 : 0;			\
-      check_float (test_name, FUNC (FUNC_NAME) (ARG, &(EXTRA_VAR)),	\
-		   EXPECTED, EXCEPTIONS);				\
-      EXTRA_OUTPUT_TEST_SETUP (ARG_STR, 1);				\
-      if (EXTRA_TEST)							\
-	check_float (extra1_name, EXTRA_VAR, EXTRA_EXPECTED, 0);	\
-      EXTRA_OUTPUT_TEST_CLEANUP (1);					\
-      COMMON_TEST_CLEANUP;						\
-    }									\
+    if (enable_test (EXCEPTIONS))					\
+      {									\
+	COMMON_TEST_SETUP (ARG_STR);					\
+	(EXTRA_VAR) = (EXTRA_EXPECTED) == 0 ? 1 : 0;			\
+	check_float (test_name, FUNC (FUNC_NAME) (ARG, &(EXTRA_VAR)),	\
+		     EXPECTED, EXCEPTIONS);				\
+	EXTRA_OUTPUT_TEST_SETUP (ARG_STR, 1);				\
+	if (EXTRA_TEST)							\
+	  check_float (extra1_name, EXTRA_VAR, EXTRA_EXPECTED, 0);	\
+	EXTRA_OUTPUT_TEST_CLEANUP (1);					\
+	COMMON_TEST_CLEANUP;						\
+      }									\
   while (0)
 #define RUN_TEST_LOOP_fF_f1(FUNC_NAME, ARRAY, ROUNDING_MODE, EXTRA_VAR)	\
   IF_ROUND_INIT_ ## ROUNDING_MODE					\
@@ -1265,17 +1333,18 @@
 		       EXCEPTIONS, EXTRA_VAR, EXTRA_TEST,		\
 		       EXTRA_EXPECTED)					\
   do									\
-    {									\
-      COMMON_TEST_SETUP (ARG_STR);					\
-      (EXTRA_VAR) = (EXTRA_EXPECTED) == 0 ? 1 : 0;			\
-      check_float (test_name, FUNC (FUNC_NAME) (ARG, &(EXTRA_VAR)),	\
-		   EXPECTED, EXCEPTIONS);				\
-      EXTRA_OUTPUT_TEST_SETUP (ARG_STR, 1);				\
-      if (EXTRA_TEST)							\
-	check_int (extra1_name, EXTRA_VAR, EXTRA_EXPECTED, 0);		\
-      EXTRA_OUTPUT_TEST_CLEANUP (1);					\
-      COMMON_TEST_CLEANUP;						\
-    }									\
+    if (enable_test (EXCEPTIONS))					\
+      {									\
+	COMMON_TEST_SETUP (ARG_STR);					\
+	(EXTRA_VAR) = (EXTRA_EXPECTED) == 0 ? 1 : 0;			\
+	check_float (test_name, FUNC (FUNC_NAME) (ARG, &(EXTRA_VAR)),	\
+		     EXPECTED, EXCEPTIONS);				\
+	EXTRA_OUTPUT_TEST_SETUP (ARG_STR, 1);				\
+	if (EXTRA_TEST)							\
+	  check_int (extra1_name, EXTRA_VAR, EXTRA_EXPECTED, 0);	\
+	EXTRA_OUTPUT_TEST_CLEANUP (1);					\
+	COMMON_TEST_CLEANUP;						\
+      }									\
   while (0)
 #define RUN_TEST_LOOP_fI_f1(FUNC_NAME, ARRAY, ROUNDING_MODE, EXTRA_VAR)	\
   IF_ROUND_INIT_ ## ROUNDING_MODE					\
@@ -1289,18 +1358,19 @@
 			EXCEPTIONS, EXTRA_VAR, EXTRA_TEST,		\
 			EXTRA_EXPECTED)					\
   do									\
-    {									\
-      COMMON_TEST_SETUP (ARG_STR);					\
-      (EXTRA_VAR) = (EXTRA_EXPECTED) == 0 ? 1 : 0;			\
-      check_float (test_name,						\
-		   FUNC (FUNC_NAME) (ARG1, ARG2, &(EXTRA_VAR)),		\
-		   EXPECTED, EXCEPTIONS);				\
-      EXTRA_OUTPUT_TEST_SETUP (ARG_STR, 1);				\
-      if (EXTRA_TEST)							\
-	check_int (extra1_name, EXTRA_VAR, EXTRA_EXPECTED, 0);		\
-      EXTRA_OUTPUT_TEST_CLEANUP (1);					\
-      COMMON_TEST_CLEANUP;						\
-    }									\
+    if (enable_test (EXCEPTIONS))					\
+      {									\
+	COMMON_TEST_SETUP (ARG_STR);					\
+	(EXTRA_VAR) = (EXTRA_EXPECTED) == 0 ? 1 : 0;			\
+	check_float (test_name,						\
+		     FUNC (FUNC_NAME) (ARG1, ARG2, &(EXTRA_VAR)),	\
+		     EXPECTED, EXCEPTIONS);				\
+	EXTRA_OUTPUT_TEST_SETUP (ARG_STR, 1);				\
+	if (EXTRA_TEST)							\
+	  check_int (extra1_name, EXTRA_VAR, EXTRA_EXPECTED, 0);	\
+	EXTRA_OUTPUT_TEST_CLEANUP (1);					\
+	COMMON_TEST_CLEANUP;						\
+      }									\
   while (0)
 #define RUN_TEST_LOOP_ffI_f1(FUNC_NAME, ARRAY, ROUNDING_MODE,		\
 			     EXTRA_VAR)					\
@@ -1315,13 +1385,14 @@
 #define RUN_TEST_c_c(ARG_STR, FUNC_NAME, ARGR, ARGC, EXPR, EXPC,	\
 		     EXCEPTIONS)					\
   do									\
-    {									\
-      COMMON_TEST_SETUP (ARG_STR);					\
-      check_complex (test_name,						\
-		     FUNC (FUNC_NAME) (BUILD_COMPLEX (ARGR, ARGC)),	\
-		     BUILD_COMPLEX (EXPR, EXPC), EXCEPTIONS);		\
-      COMMON_TEST_CLEANUP;						\
-    }									\
+    if (enable_test (EXCEPTIONS))					\
+      {									\
+	COMMON_TEST_SETUP (ARG_STR);					\
+	check_complex (test_name,					\
+		       FUNC (FUNC_NAME) (BUILD_COMPLEX (ARGR, ARGC)),	\
+		       BUILD_COMPLEX (EXPR, EXPC), EXCEPTIONS);		\
+	COMMON_TEST_CLEANUP;						\
+      }									\
   while (0)
 #define RUN_TEST_LOOP_c_c(FUNC_NAME, ARRAY, ROUNDING_MODE)		\
   IF_ROUND_INIT_ ## ROUNDING_MODE					\
@@ -1333,14 +1404,15 @@
 #define RUN_TEST_cc_c(ARG_STR, FUNC_NAME, ARG1R, ARG1C, ARG2R, ARG2C,	\
 		      EXPR, EXPC, EXCEPTIONS)				\
   do									\
-    {									\
-      COMMON_TEST_SETUP (ARG_STR);					\
-      check_complex (test_name,						\
-		     FUNC (FUNC_NAME) (BUILD_COMPLEX (ARG1R, ARG1C),	\
-				       BUILD_COMPLEX (ARG2R, ARG2C)),	\
-		     BUILD_COMPLEX (EXPR, EXPC), EXCEPTIONS);		\
-      COMMON_TEST_CLEANUP;						\
-    }									\
+    if (enable_test (EXCEPTIONS))					\
+      {									\
+	COMMON_TEST_SETUP (ARG_STR);					\
+	check_complex (test_name,					\
+		       FUNC (FUNC_NAME) (BUILD_COMPLEX (ARG1R, ARG1C),	\
+					 BUILD_COMPLEX (ARG2R, ARG2C)),	\
+		       BUILD_COMPLEX (EXPR, EXPC), EXCEPTIONS);		\
+	COMMON_TEST_CLEANUP;						\
+      }									\
   while (0)
 #define RUN_TEST_LOOP_cc_c(FUNC_NAME, ARRAY, ROUNDING_MODE)		\
   IF_ROUND_INIT_ ## ROUNDING_MODE					\
@@ -1352,12 +1424,13 @@
   ROUND_RESTORE_ ## ROUNDING_MODE
 #define RUN_TEST_f_i(ARG_STR, FUNC_NAME, ARG, EXPECTED, EXCEPTIONS)	\
   do									\
-    {									\
-      COMMON_TEST_SETUP (ARG_STR);					\
-      check_int (test_name, FUNC (FUNC_NAME) (ARG), EXPECTED,		\
-		 EXCEPTIONS);						\
-      COMMON_TEST_CLEANUP;						\
-    }									\
+    if (enable_test (EXCEPTIONS))					\
+      {									\
+	COMMON_TEST_SETUP (ARG_STR);					\
+	check_int (test_name, FUNC (FUNC_NAME) (ARG), EXPECTED,		\
+		   EXCEPTIONS);						\
+	COMMON_TEST_CLEANUP;						\
+      }									\
   while (0)
 #define RUN_TEST_LOOP_f_i(FUNC_NAME, ARRAY, ROUNDING_MODE)		\
   IF_ROUND_INIT_ ## ROUNDING_MODE					\
@@ -1368,11 +1441,12 @@
 #define RUN_TEST_f_i_tg(ARG_STR, FUNC_NAME, ARG, EXPECTED,		\
 			EXCEPTIONS)					\
   do									\
-    {									\
-      COMMON_TEST_SETUP (ARG_STR);					\
-      check_int (test_name, FUNC_NAME (ARG), EXPECTED, EXCEPTIONS);	\
-      COMMON_TEST_CLEANUP;						\
-    }									\
+    if (enable_test (EXCEPTIONS))					\
+      {									\
+	COMMON_TEST_SETUP (ARG_STR);					\
+	check_int (test_name, FUNC_NAME (ARG), EXPECTED, EXCEPTIONS);	\
+	COMMON_TEST_CLEANUP;						\
+      }									\
   while (0)
 #define RUN_TEST_LOOP_f_i_tg(FUNC_NAME, ARRAY, ROUNDING_MODE)		\
   IF_ROUND_INIT_ ## ROUNDING_MODE					\
@@ -1383,12 +1457,13 @@
 #define RUN_TEST_ff_i_tg(ARG_STR, FUNC_NAME, ARG1, ARG2, EXPECTED,	\
 			 EXCEPTIONS)					\
   do									\
-    {									\
-      COMMON_TEST_SETUP (ARG_STR);					\
-      check_int (test_name, FUNC_NAME (ARG1, ARG2), EXPECTED,		\
-		 EXCEPTIONS);						\
-      COMMON_TEST_CLEANUP;						\
-    }									\
+    if (enable_test (EXCEPTIONS))					\
+      {									\
+	COMMON_TEST_SETUP (ARG_STR);					\
+	check_int (test_name, FUNC_NAME (ARG1, ARG2), EXPECTED,		\
+		   EXCEPTIONS);						\
+	COMMON_TEST_CLEANUP;						\
+      }									\
   while (0)
 #define RUN_TEST_LOOP_ff_i_tg(FUNC_NAME, ARRAY, ROUNDING_MODE)		\
   IF_ROUND_INIT_ ## ROUNDING_MODE					\
@@ -1399,12 +1474,13 @@
   ROUND_RESTORE_ ## ROUNDING_MODE
 #define RUN_TEST_f_b(ARG_STR, FUNC_NAME, ARG, EXPECTED, EXCEPTIONS)	\
   do									\
-    {									\
-      COMMON_TEST_SETUP (ARG_STR);					\
-      check_bool (test_name, FUNC (FUNC_NAME) (ARG), EXPECTED,		\
-		  EXCEPTIONS);						\
-      COMMON_TEST_CLEANUP;						\
-    }									\
+    if (enable_test (EXCEPTIONS))					\
+      {									\
+	COMMON_TEST_SETUP (ARG_STR);					\
+	check_bool (test_name, FUNC (FUNC_NAME) (ARG), EXPECTED,	\
+		    EXCEPTIONS);					\
+	COMMON_TEST_CLEANUP;						\
+      }									\
   while (0)
 #define RUN_TEST_LOOP_f_b(FUNC_NAME, ARRAY, ROUNDING_MODE)		\
   IF_ROUND_INIT_ ## ROUNDING_MODE					\
@@ -1415,11 +1491,12 @@
 #define RUN_TEST_f_b_tg(ARG_STR, FUNC_NAME, ARG, EXPECTED,		\
 			EXCEPTIONS)					\
   do									\
-    {									\
-      COMMON_TEST_SETUP (ARG_STR);					\
-      check_bool (test_name, FUNC_NAME (ARG), EXPECTED, EXCEPTIONS);	\
-      COMMON_TEST_CLEANUP;						\
-    }									\
+    if (enable_test (EXCEPTIONS))					\
+      {									\
+	COMMON_TEST_SETUP (ARG_STR);					\
+	check_bool (test_name, FUNC_NAME (ARG), EXPECTED, EXCEPTIONS);	\
+	COMMON_TEST_CLEANUP;						\
+      }									\
   while (0)
 #define RUN_TEST_LOOP_f_b_tg(FUNC_NAME, ARRAY, ROUNDING_MODE)		\
   IF_ROUND_INIT_ ## ROUNDING_MODE					\
@@ -1429,12 +1506,13 @@
   ROUND_RESTORE_ ## ROUNDING_MODE
 #define RUN_TEST_f_l(ARG_STR, FUNC_NAME, ARG, EXPECTED, EXCEPTIONS)	\
   do									\
-    {									\
-      COMMON_TEST_SETUP (ARG_STR);					\
-      check_long (test_name, FUNC (FUNC_NAME) (ARG), EXPECTED,		\
-		  EXCEPTIONS);						\
-      COMMON_TEST_CLEANUP;						\
-    }									\
+    if (enable_test (EXCEPTIONS))					\
+      {									\
+	COMMON_TEST_SETUP (ARG_STR);					\
+	check_long (test_name, FUNC (FUNC_NAME) (ARG), EXPECTED,	\
+		    EXCEPTIONS);					\
+	COMMON_TEST_CLEANUP;						\
+      }									\
   while (0)
 #define RUN_TEST_LOOP_f_l(FUNC_NAME, ARRAY, ROUNDING_MODE)		\
   IF_ROUND_INIT_ ## ROUNDING_MODE					\
@@ -1444,12 +1522,13 @@
   ROUND_RESTORE_ ## ROUNDING_MODE
 #define RUN_TEST_f_L(ARG_STR, FUNC_NAME, ARG, EXPECTED, EXCEPTIONS)	\
   do									\
-    {									\
-      COMMON_TEST_SETUP (ARG_STR);					\
-      check_longlong (test_name, FUNC (FUNC_NAME) (ARG), EXPECTED,	\
-		      EXCEPTIONS);					\
-      COMMON_TEST_CLEANUP;						\
-    }									\
+    if (enable_test (EXCEPTIONS))					\
+      {									\
+	COMMON_TEST_SETUP (ARG_STR);					\
+	check_longlong (test_name, FUNC (FUNC_NAME) (ARG), EXPECTED,	\
+			EXCEPTIONS);					\
+	COMMON_TEST_CLEANUP;						\
+      }									\
   while (0)
 #define RUN_TEST_LOOP_f_L(FUNC_NAME, ARRAY, ROUNDING_MODE)		\
   IF_ROUND_INIT_ ## ROUNDING_MODE					\
@@ -1462,20 +1541,21 @@
 			EXTRA1_EXPECTED, EXTRA2_VAR,			\
 			EXTRA2_TEST, EXTRA2_EXPECTED)			\
   do									\
-    {									\
-      COMMON_TEST_SETUP (ARG_STR);					\
-      FUNC (FUNC_NAME) (ARG, &(EXTRA1_VAR), &(EXTRA2_VAR));		\
-      EXTRA_OUTPUT_TEST_SETUP (ARG_STR, 1);				\
-      if (EXTRA1_TEST)							\
-	check_float (extra1_name, EXTRA1_VAR, EXTRA1_EXPECTED,		\
-		     EXCEPTIONS);					\
-      EXTRA_OUTPUT_TEST_CLEANUP (1);					\
-      EXTRA_OUTPUT_TEST_SETUP (ARG_STR, 2);				\
-      if (EXTRA2_TEST)							\
-	check_float (extra2_name, EXTRA2_VAR, EXTRA2_EXPECTED, 0);	\
-      EXTRA_OUTPUT_TEST_CLEANUP (2);					\
-      COMMON_TEST_CLEANUP;						\
-    }									\
+    if (enable_test (EXCEPTIONS))					\
+      {									\
+	COMMON_TEST_SETUP (ARG_STR);					\
+	FUNC (FUNC_NAME) (ARG, &(EXTRA1_VAR), &(EXTRA2_VAR));		\
+	EXTRA_OUTPUT_TEST_SETUP (ARG_STR, 1);				\
+	if (EXTRA1_TEST)						\
+	  check_float (extra1_name, EXTRA1_VAR, EXTRA1_EXPECTED,	\
+		       EXCEPTIONS);					\
+	EXTRA_OUTPUT_TEST_CLEANUP (1);					\
+	EXTRA_OUTPUT_TEST_SETUP (ARG_STR, 2);				\
+	if (EXTRA2_TEST)						\
+	  check_float (extra2_name, EXTRA2_VAR, EXTRA2_EXPECTED, 0);	\
+	EXTRA_OUTPUT_TEST_CLEANUP (2);					\
+	COMMON_TEST_CLEANUP;						\
+      }									\
   while (0)
 #define RUN_TEST_LOOP_fFF_11(FUNC_NAME, ARRAY, ROUNDING_MODE,		\
 			     EXTRA1_VAR, EXTRA2_VAR)			\
@@ -1516,7 +1596,7 @@
   {
     TEST_f_f (acos, plus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
     TEST_f_f (acos, minus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
-    TEST_f_f (acos, qnan_value, qnan_value),
+    TEST_f_f (acos, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
 
     /* |x| > 1: */
     TEST_f_f (acos, 1.125L, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
@@ -1635,7 +1715,7 @@
   {
     TEST_f_f (acosh, plus_infty, plus_infty),
     TEST_f_f (acosh, minus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
-    TEST_f_f (acosh, qnan_value, qnan_value),
+    TEST_f_f (acosh, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
 
     /* x < 1:  */
     TEST_f_f (acosh, -1.125L, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
@@ -1657,7 +1737,7 @@
   {
     TEST_f_f (asin, plus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
     TEST_f_f (asin, minus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
-    TEST_f_f (asin, qnan_value, qnan_value),
+    TEST_f_f (asin, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
 
     /* asin x == qNaN plus invalid exception for |x| > 1.  */
     TEST_f_f (asin, 1.125L, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
@@ -1774,11 +1854,9 @@
   {
     TEST_f_f (asinh, 0, 0),
     TEST_f_f (asinh, minus_zero, minus_zero),
-#ifndef TEST_INLINE
-    TEST_f_f (asinh, plus_infty, plus_infty),
-    TEST_f_f (asinh, minus_infty, minus_infty),
-#endif
-    TEST_f_f (asinh, qnan_value, qnan_value),
+    TEST_f_f (asinh, plus_infty, plus_infty, NO_TEST_INLINE),
+    TEST_f_f (asinh, minus_infty, minus_infty, NO_TEST_INLINE),
+    TEST_f_f (asinh, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
     TEST_f_f (asinh, 0.75L, 0.693147180559945309417232121458176568L),
   };
 
@@ -1797,7 +1875,7 @@
 
     TEST_f_f (atan, plus_infty, M_PI_2l),
     TEST_f_f (atan, minus_infty, -M_PI_2l),
-    TEST_f_f (atan, qnan_value, qnan_value),
+    TEST_f_f (atan, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
     TEST_f_f (atan, max_value, M_PI_2l),
     TEST_f_f (atan, -max_value, -M_PI_2l),
 
@@ -1832,7 +1910,7 @@
 
     TEST_f_f (atanh, 1, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
     TEST_f_f (atanh, -1, minus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
-    TEST_f_f (atanh, qnan_value, qnan_value),
+    TEST_f_f (atanh, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
 
     /* atanh (x) == qNaN plus invalid exception if |x| > 1.  */
     TEST_f_f (atanh, 1.125L, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
@@ -1905,7 +1983,7 @@
     TEST_ff_f (atan2, minus_infty, plus_infty, -M_PI_4l),
     TEST_ff_f (atan2, plus_infty, minus_infty, M_PI_34l),
     TEST_ff_f (atan2, minus_infty, minus_infty, -M_PI_34l),
-    TEST_ff_f (atan2, qnan_value, qnan_value, qnan_value),
+    TEST_ff_f (atan2, qnan_value, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
 
     TEST_ff_f (atan2, max_value, max_value, M_PI_4l),
 
@@ -5838,7 +5916,7 @@
 
     TEST_f_f (cbrt, plus_infty, plus_infty),
     TEST_f_f (cbrt, minus_infty, minus_infty),
-    TEST_f_f (cbrt, qnan_value, qnan_value),
+    TEST_f_f (cbrt, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
 
     TEST_f_f (cbrt, -0.001L, -0.1L),
     TEST_f_f (cbrt, 8, 2),
@@ -6758,11 +6836,15 @@
     TEST_ff_f (copysign, minus_zero, plus_infty, 0, NO_INEXACT_EXCEPTION),
     TEST_ff_f (copysign, minus_zero, minus_zero, minus_zero, NO_INEXACT_EXCEPTION),
 
-    /* XXX More correctly we would have to check the sign of the NaN.  */
-    TEST_ff_f (copysign, qnan_value, 0, qnan_value, NO_INEXACT_EXCEPTION),
-    TEST_ff_f (copysign, qnan_value, minus_zero, qnan_value, NO_INEXACT_EXCEPTION),
-    TEST_ff_f (copysign, -qnan_value, 0, qnan_value, NO_INEXACT_EXCEPTION),
-    TEST_ff_f (copysign, -qnan_value, minus_zero, qnan_value, NO_INEXACT_EXCEPTION),
+    TEST_ff_f (copysign, 0, qnan_value, 0, NO_INEXACT_EXCEPTION),
+    TEST_ff_f (copysign, 0, -qnan_value, minus_zero, NO_INEXACT_EXCEPTION),
+    TEST_ff_f (copysign, minus_zero, qnan_value, 0, NO_INEXACT_EXCEPTION),
+    TEST_ff_f (copysign, minus_zero, -qnan_value, minus_zero, NO_INEXACT_EXCEPTION),
+
+    TEST_ff_f (copysign, qnan_value, 0, qnan_value, NO_INEXACT_EXCEPTION|TEST_NAN_SIGN),
+    TEST_ff_f (copysign, qnan_value, minus_zero, -qnan_value, NO_INEXACT_EXCEPTION|TEST_NAN_SIGN),
+    TEST_ff_f (copysign, -qnan_value, 0, qnan_value, NO_INEXACT_EXCEPTION|TEST_NAN_SIGN),
+    TEST_ff_f (copysign, -qnan_value, minus_zero, -qnan_value, NO_INEXACT_EXCEPTION|TEST_NAN_SIGN),
   };
 
 static void
@@ -6780,7 +6862,7 @@
     TEST_f_f (cos, minus_zero, 1),
     TEST_f_f (cos, plus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
     TEST_f_f (cos, minus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
-    TEST_f_f (cos, qnan_value, qnan_value, ERRNO_UNCHANGED),
+    TEST_f_f (cos, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
 
     TEST_f_f (cos, M_PI_6l * 2.0, 0.5),
     TEST_f_f (cos, M_PI_6l * 4.0, -0.5),
@@ -6952,11 +7034,9 @@
     TEST_f_f (cosh, 0, 1),
     TEST_f_f (cosh, minus_zero, 1),
 
-#ifndef TEST_INLINE
-    TEST_f_f (cosh, plus_infty, plus_infty),
-    TEST_f_f (cosh, minus_infty, plus_infty),
-#endif
-    TEST_f_f (cosh, qnan_value, qnan_value),
+    TEST_f_f (cosh, plus_infty, plus_infty, NO_TEST_INLINE),
+    TEST_f_f (cosh, minus_infty, plus_infty, NO_TEST_INLINE),
+    TEST_f_f (cosh, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
 
     TEST_f_f (cosh, 0.75L, 1.29468328467684468784170818539018176L),
 
@@ -7821,7 +7901,7 @@
     TEST_f_f (erf, minus_zero, minus_zero),
     TEST_f_f (erf, plus_infty, 1),
     TEST_f_f (erf, minus_infty, -1),
-    TEST_f_f (erf, qnan_value, qnan_value),
+    TEST_f_f (erf, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
 
     TEST_f_f (erf, 0.125L, 0.140316204801333817393029446521623398L),
     TEST_f_f (erf, 0.75L, 0.711155633653515131598937834591410777L),
@@ -7851,7 +7931,7 @@
     TEST_f_f (erfc, minus_infty, 2.0),
     TEST_f_f (erfc, 0.0, 1.0),
     TEST_f_f (erfc, minus_zero, 1.0),
-    TEST_f_f (erfc, qnan_value, qnan_value),
+    TEST_f_f (erfc, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
 
     TEST_f_f (erfc, 0.125L, 0.859683795198666182606970553478376602L),
     TEST_f_f (erfc, 0.75L, 0.288844366346484868401062165408589223L),
@@ -7890,11 +7970,9 @@
     TEST_f_f (exp, 0, 1),
     TEST_f_f (exp, minus_zero, 1),
 
-#ifndef TEST_INLINE
-    TEST_f_f (exp, plus_infty, plus_infty),
-    TEST_f_f (exp, minus_infty, 0),
-#endif
-    TEST_f_f (exp, qnan_value, qnan_value),
+    TEST_f_f (exp, plus_infty, plus_infty, NO_TEST_INLINE),
+    TEST_f_f (exp, minus_infty, 0, NO_TEST_INLINE),
+    TEST_f_f (exp, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
     TEST_f_f (exp, 1, M_El),
 
     TEST_f_f (exp, 2, M_E2l),
@@ -7999,7 +8077,7 @@
 
     TEST_f_f (exp10, plus_infty, plus_infty),
     TEST_f_f (exp10, minus_infty, 0),
-    TEST_f_f (exp10, qnan_value, qnan_value),
+    TEST_f_f (exp10, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
     TEST_f_f (exp10, 3, 1000),
     TEST_f_f (exp10, -1, 0.1L),
     TEST_f_f (exp10, 36, 1.0e36L),
@@ -8043,7 +8121,7 @@
     TEST_f_f (exp2, minus_zero, 1),
     TEST_f_f (exp2, plus_infty, plus_infty),
     TEST_f_f (exp2, minus_infty, 0),
-    TEST_f_f (exp2, qnan_value, qnan_value),
+    TEST_f_f (exp2, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
 
     TEST_f_f (exp2, 10, 1024),
     TEST_f_f (exp2, -1, 0.5),
@@ -8083,11 +8161,9 @@
     TEST_f_f (expm1, 0, 0),
     TEST_f_f (expm1, minus_zero, minus_zero),
 
-#ifndef TEST_INLINE
-    TEST_f_f (expm1, plus_infty, plus_infty),
-    TEST_f_f (expm1, minus_infty, -1),
-#endif
-    TEST_f_f (expm1, qnan_value, qnan_value),
+    TEST_f_f (expm1, plus_infty, plus_infty, NO_TEST_INLINE),
+    TEST_f_f (expm1, minus_infty, -1, NO_TEST_INLINE),
+    TEST_f_f (expm1, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
 
     TEST_f_f (expm1, 1, M_El - 1.0),
     TEST_f_f (expm1, 0.75L, 1.11700001661267466854536981983709561L),
@@ -8145,7 +8221,8 @@
 
     TEST_f_f (fabs, plus_infty, plus_infty, NO_INEXACT_EXCEPTION),
     TEST_f_f (fabs, minus_infty, plus_infty, NO_INEXACT_EXCEPTION),
-    TEST_f_f (fabs, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
+    TEST_f_f (fabs, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|TEST_NAN_SIGN),
+    TEST_f_f (fabs, -qnan_value, qnan_value, NO_INEXACT_EXCEPTION|TEST_NAN_SIGN),
 
     TEST_f_f (fabs, 38.0, 38.0, NO_INEXACT_EXCEPTION),
     TEST_f_f (fabs, -M_El, M_El, NO_INEXACT_EXCEPTION),
@@ -9430,14 +9507,12 @@
     TEST_ff_f (hypot, plus_infty, 1, plus_infty),
     TEST_ff_f (hypot, minus_infty, 1, plus_infty),
 
-#ifndef TEST_INLINE
-    TEST_ff_f (hypot, plus_infty, qnan_value, plus_infty),
-    TEST_ff_f (hypot, minus_infty, qnan_value, plus_infty),
-    TEST_ff_f (hypot, qnan_value, plus_infty, plus_infty),
-    TEST_ff_f (hypot, qnan_value, minus_infty, plus_infty),
-#endif
-
-    TEST_ff_f (hypot, qnan_value, qnan_value, qnan_value),
+    TEST_ff_f (hypot, plus_infty, qnan_value, plus_infty, NO_TEST_INLINE),
+    TEST_ff_f (hypot, minus_infty, qnan_value, plus_infty, NO_TEST_INLINE),
+    TEST_ff_f (hypot, qnan_value, plus_infty, plus_infty, NO_TEST_INLINE),
+    TEST_ff_f (hypot, qnan_value, minus_infty, plus_infty, NO_TEST_INLINE),
+
+    TEST_ff_f (hypot, qnan_value, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
 
     /* hypot (x,y) == hypot (+-x, +-y)  */
     TEST_ff_f (hypot, 0.7L, 12.4L, 12.419742348374220601176836866763271L),
@@ -9462,18 +9537,16 @@
     TEST_ff_f (hypot, 0x1.23456789abcdef0123456789ab8p-500L, 0x1.23456789abcdef0123456789ab8p-500L, 4.9155782399407039128612180934736799735113e-151L),
 #endif
 
-#if !(defined TEST_FLOAT && defined TEST_INLINE)
-    TEST_ff_f (hypot, 0x3p125L, 0x4p125L, 0x5p125L),
-    TEST_ff_f (hypot, 0x1.234566p-126L, 0x1.234566p-126L, 1.891441686191081936598531534017449451173e-38L),
-#endif
-
-#if !defined TEST_FLOAT && !(defined TEST_DOUBLE && defined TEST_INLINE)
-    TEST_ff_f (hypot, 0x3p1021L, 0x4p1021L, 0x5p1021L),
-    TEST_ff_f (hypot, 0x1p+0L, 0x0.3ep-1022L, 0x1p+0L),
-#endif
-
-#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384 && !defined TEST_INLINE
-    TEST_ff_f (hypot, 0x3p16381L, 0x4p16381L, 0x5p16381L),
+    TEST_ff_f (hypot, 0x3p125L, 0x4p125L, 0x5p125L, NO_TEST_INLINE_FLOAT),
+    TEST_ff_f (hypot, 0x1.234566p-126L, 0x1.234566p-126L, 1.891441686191081936598531534017449451173e-38L, NO_TEST_INLINE_FLOAT),
+
+#ifndef TEST_FLOAT
+    TEST_ff_f (hypot, 0x3p1021L, 0x4p1021L, 0x5p1021L, NO_TEST_INLINE_DOUBLE),
+    TEST_ff_f (hypot, 0x1p+0L, 0x0.3ep-1022L, 0x1p+0L, NO_TEST_INLINE_DOUBLE),
+#endif
+
+#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
+    TEST_ff_f (hypot, 0x3p16381L, 0x4p16381L, 0x5p16381L, NO_TEST_INLINE),
 #endif
 
     TEST_ff_f (hypot, 0x1p-149L, 0x1p-149L, 1.9817352931807469938024533350782879785095e-45L, UNDERFLOW_EXCEPTION_FLOAT),
@@ -9482,10 +9555,10 @@
     TEST_ff_f (hypot, 0x1p-1074L, 0x1p-1074L, 6.9871433705131320800651344656990806305791e-324L, UNDERFLOW_EXCEPTION_DOUBLE),
 #endif
 
-#if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381 && !defined TEST_INLINE
-    TEST_ff_f (hypot, 0x1p-16445L, 0x1p-16445L, 5.1550906155442528702558159159596215039925e-4951L, UNDERFLOW_EXCEPTION),
+#if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
+    TEST_ff_f (hypot, 0x1p-16445L, 0x1p-16445L, 5.1550906155442528702558159159596215039925e-4951L, UNDERFLOW_EXCEPTION|NO_TEST_INLINE),
 # if LDBL_MANT_DIG >= 113
-    TEST_ff_f (hypot, 0x1p-16494L, 0x1p-16494L, 9.1572804726500807075521065242888978445857e-4966L, UNDERFLOW_EXCEPTION),
+    TEST_ff_f (hypot, 0x1p-16494L, 0x1p-16494L, 9.1572804726500807075521065242888978445857e-4966L, UNDERFLOW_EXCEPTION|NO_TEST_INLINE),
 # endif
 #endif
   };
@@ -9799,7 +9872,7 @@
 static const struct test_f_f_data j0_test_data[] =
   {
     /* j0 is the Bessel function of the first kind of order 0 */
-    TEST_f_f (j0, qnan_value, qnan_value),
+    TEST_f_f (j0, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
     TEST_f_f (j0, plus_infty, 0),
     TEST_f_f (j0, -1.0, 0.765197686557966551449717526102663221L),
     TEST_f_f (j0, 0.0, 1.0),
@@ -9838,7 +9911,7 @@
 static const struct test_f_f_data j1_test_data[] =
   {
     /* j1 is the Bessel function of the first kind of order 1 */
-    TEST_f_f (j1, qnan_value, qnan_value),
+    TEST_f_f (j1, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
     TEST_f_f (j1, plus_infty, 0),
 
     TEST_f_f (j1, -1.0, -0.440050585744933515959682203718914913L),
@@ -9876,7 +9949,7 @@
   {
     /* jn is the Bessel function of the first kind of order n.  */
     /* jn (0, x) == j0 (x)  */
-    TEST_if_f (jn, 0, qnan_value, qnan_value),
+    TEST_if_f (jn, 0, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
     TEST_if_f (jn, 0, plus_infty, 0),
     TEST_if_f (jn, 0, -1.0, 0.765197686557966551449717526102663221L),
     TEST_if_f (jn, 0, 0.0, 1.0),
@@ -9891,7 +9964,7 @@
     TEST_if_f (jn, 0, -4.0, -3.9714980986384737228659076845169804197562E-1L),
 
     /* jn (1, x) == j1 (x)  */
-    TEST_if_f (jn, 1, qnan_value, qnan_value),
+    TEST_if_f (jn, 1, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
     TEST_if_f (jn, 1, plus_infty, 0),
     TEST_if_f (jn, 1, -1.0, -0.440050585744933515959682203718914913L),
     TEST_if_f (jn, 1, 0.0, 0.0),
@@ -9904,7 +9977,7 @@
     TEST_if_f (jn, 1, 10.0, 0.0434727461688614366697487680258592883L),
 
     /* jn (3, x)  */
-    TEST_if_f (jn, 3, qnan_value, qnan_value),
+    TEST_if_f (jn, 3, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
     TEST_if_f (jn, 3, plus_infty, 0),
 
     TEST_if_f (jn, 3, -1.0, -0.0195633539826684059189053216217515083L),
@@ -9916,7 +9989,7 @@
     TEST_if_f (jn, 3, 10.0, 0.0583793793051868123429354784103409563L),
 
     /*  jn (10, x)  */
-    TEST_if_f (jn, 10, qnan_value, qnan_value),
+    TEST_if_f (jn, 10, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
     TEST_if_f (jn, 10, plus_infty, 0),
 
     TEST_if_f (jn, 10, -1.0, 0.263061512368745320699785368779050294e-9L),
@@ -9986,7 +10059,7 @@
     TEST_f_f1 (lgamma, plus_infty, plus_infty, 1),
     TEST_f_f1 (lgamma, 0, plus_infty, 1, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
     TEST_f_f1 (lgamma, minus_zero, plus_infty, -1, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
-    TEST_f_f1 (lgamma, qnan_value, qnan_value, IGNORE),
+    TEST_f_f1 (lgamma, qnan_value, qnan_value, IGNORE, NO_INEXACT_EXCEPTION),
 
     /* lgamma (x) == +inf plus divide by zero exception for integer x <= 0.  */
     TEST_f_f1 (lgamma, -3, plus_infty, IGNORE, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
@@ -10082,7 +10155,9 @@
     /* XXX this test is incomplete.  We need to have a way to specifiy
        the rounding method and test the critical cases.  So far, only
        unproblematic numbers are tested.  */
-    /* TODO: missing +/-Inf as well as qNaN tests.  */
+    TEST_f_l (lrint, plus_infty, IGNORE, INVALID_EXCEPTION),
+    TEST_f_l (lrint, minus_infty, IGNORE, INVALID_EXCEPTION),
+    TEST_f_l (lrint, qnan_value, IGNORE, INVALID_EXCEPTION),
     TEST_f_l (lrint, 0.0, 0, NO_INEXACT_EXCEPTION),
     TEST_f_l (lrint, minus_zero, 0, NO_INEXACT_EXCEPTION),
     TEST_f_l (lrint, 0.2L, 0, INEXACT_EXCEPTION),
@@ -10114,6 +10189,9 @@
 
 static const struct test_f_l_data lrint_tonearest_test_data[] =
   {
+    TEST_f_l (lrint, plus_infty, IGNORE, INVALID_EXCEPTION),
+    TEST_f_l (lrint, minus_infty, IGNORE, INVALID_EXCEPTION),
+    TEST_f_l (lrint, qnan_value, IGNORE, INVALID_EXCEPTION),
     TEST_f_l (lrint, 0.0, 0, NO_INEXACT_EXCEPTION),
     TEST_f_l (lrint, minus_zero, 0, NO_INEXACT_EXCEPTION),
     TEST_f_l (lrint, 0.2L, 0, INEXACT_EXCEPTION),
@@ -10149,6 +10227,9 @@
 
 static const struct test_f_l_data lrint_towardzero_test_data[] =
   {
+    TEST_f_l (lrint, plus_infty, IGNORE, INVALID_EXCEPTION),
+    TEST_f_l (lrint, minus_infty, IGNORE, INVALID_EXCEPTION),
+    TEST_f_l (lrint, qnan_value, IGNORE, INVALID_EXCEPTION),
     TEST_f_l (lrint, 0.0, 0, NO_INEXACT_EXCEPTION),
     TEST_f_l (lrint, minus_zero, 0, NO_INEXACT_EXCEPTION),
     TEST_f_l (lrint, 0.2L, 0, INEXACT_EXCEPTION),
@@ -10184,6 +10265,9 @@
 
 static const struct test_f_l_data lrint_downward_test_data[] =
   {
+    TEST_f_l (lrint, plus_infty, IGNORE, INVALID_EXCEPTION),
+    TEST_f_l (lrint, minus_infty, IGNORE, INVALID_EXCEPTION),
+    TEST_f_l (lrint, qnan_value, IGNORE, INVALID_EXCEPTION),
     TEST_f_l (lrint, 0.0, 0, NO_INEXACT_EXCEPTION),
     TEST_f_l (lrint, minus_zero, 0, NO_INEXACT_EXCEPTION),
     TEST_f_l (lrint, 0.2L, 0, INEXACT_EXCEPTION),
@@ -10219,6 +10303,9 @@
 
 static const struct test_f_l_data lrint_upward_test_data[] =
   {
+    TEST_f_l (lrint, plus_infty, IGNORE, INVALID_EXCEPTION),
+    TEST_f_l (lrint, minus_infty, IGNORE, INVALID_EXCEPTION),
+    TEST_f_l (lrint, qnan_value, IGNORE, INVALID_EXCEPTION),
     TEST_f_l (lrint, 0.0, 0, NO_INEXACT_EXCEPTION),
     TEST_f_l (lrint, minus_zero, 0, NO_INEXACT_EXCEPTION),
     TEST_f_l (lrint, 0.2L, 1, INEXACT_EXCEPTION),
@@ -10257,7 +10344,9 @@
     /* XXX this test is incomplete.  We need to have a way to specifiy
        the rounding method and test the critical cases.  So far, only
        unproblematic numbers are tested.  */
-    /* TODO: missing +/-Inf as well as qNaN tests.  */
+    TEST_f_L (llrint, plus_infty, IGNORE, INVALID_EXCEPTION),
+    TEST_f_L (llrint, minus_infty, IGNORE, INVALID_EXCEPTION),
+    TEST_f_L (llrint, qnan_value, IGNORE, INVALID_EXCEPTION),
     TEST_f_L (llrint, 0.0, 0, NO_INEXACT_EXCEPTION),
     TEST_f_L (llrint, minus_zero, 0, NO_INEXACT_EXCEPTION),
     TEST_f_L (llrint, 0.2L, 0, INEXACT_EXCEPTION),
@@ -10393,6 +10482,9 @@
 
 static const struct test_f_L_data llrint_tonearest_test_data[] =
   {
+    TEST_f_L (llrint, plus_infty, IGNORE, INVALID_EXCEPTION),
+    TEST_f_L (llrint, minus_infty, IGNORE, INVALID_EXCEPTION),
+    TEST_f_L (llrint, qnan_value, IGNORE, INVALID_EXCEPTION),
     TEST_f_L (llrint, 0.0, 0, NO_INEXACT_EXCEPTION),
     TEST_f_L (llrint, minus_zero, 0, NO_INEXACT_EXCEPTION),
     TEST_f_L (llrint, 0.2L, 0, INEXACT_EXCEPTION),
@@ -10528,6 +10620,9 @@
 
 static const struct test_f_L_data llrint_towardzero_test_data[] =
   {
+    TEST_f_L (llrint, plus_infty, IGNORE, INVALID_EXCEPTION),
+    TEST_f_L (llrint, minus_infty, IGNORE, INVALID_EXCEPTION),
+    TEST_f_L (llrint, qnan_value, IGNORE, INVALID_EXCEPTION),
     TEST_f_L (llrint, 0.0, 0, NO_INEXACT_EXCEPTION),
     TEST_f_L (llrint, minus_zero, 0, NO_INEXACT_EXCEPTION),
     TEST_f_L (llrint, 0.2L, 0, INEXACT_EXCEPTION),
@@ -10663,6 +10758,9 @@
 
 static const struct test_f_L_data llrint_downward_test_data[] =
   {
+    TEST_f_L (llrint, plus_infty, IGNORE, INVALID_EXCEPTION),
+    TEST_f_L (llrint, minus_infty, IGNORE, INVALID_EXCEPTION),
+    TEST_f_L (llrint, qnan_value, IGNORE, INVALID_EXCEPTION),
     TEST_f_L (llrint, 0.0, 0, NO_INEXACT_EXCEPTION),
     TEST_f_L (llrint, minus_zero, 0, NO_INEXACT_EXCEPTION),
     TEST_f_L (llrint, 0.2L, 0, INEXACT_EXCEPTION),
@@ -10794,6 +10892,9 @@
 
 static const struct test_f_L_data llrint_upward_test_data[] =
   {
+    TEST_f_L (llrint, plus_infty, IGNORE, INVALID_EXCEPTION),
+    TEST_f_L (llrint, minus_infty, IGNORE, INVALID_EXCEPTION),
+    TEST_f_L (llrint, qnan_value, IGNORE, INVALID_EXCEPTION),
     TEST_f_L (llrint, 0.0, 0, NO_INEXACT_EXCEPTION),
     TEST_f_L (llrint, minus_zero, 0, NO_INEXACT_EXCEPTION),
     TEST_f_L (llrint, 0.2L, 1, INEXACT_EXCEPTION),
@@ -10933,7 +11034,7 @@
     TEST_f_f (log, -max_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
     TEST_f_f (log, minus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
     TEST_f_f (log, plus_infty, plus_infty),
-    TEST_f_f (log, qnan_value, qnan_value),
+    TEST_f_f (log, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
 
     TEST_f_f (log, M_El, 1),
     TEST_f_f (log, M_1_DIV_El, -1),
@@ -10964,7 +11065,7 @@
     TEST_f_f (log10, minus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
 
     TEST_f_f (log10, plus_infty, plus_infty),
-    TEST_f_f (log10, qnan_value, qnan_value),
+    TEST_f_f (log10, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
 
     TEST_f_f (log10, 0.1L, -1),
     TEST_f_f (log10, 10.0, 1),
@@ -10994,7 +11095,7 @@
     TEST_f_f (log1p, minus_infty, qnan_value, INVALID_EXCEPTION),
 
     TEST_f_f (log1p, plus_infty, plus_infty),
-    TEST_f_f (log1p, qnan_value, qnan_value),
+    TEST_f_f (log1p, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
 
     TEST_f_f (log1p, M_El - 1.0, 1),
 
@@ -11023,7 +11124,7 @@
     TEST_f_f (log2, minus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
 
     TEST_f_f (log2, plus_infty, plus_infty),
-    TEST_f_f (log2, qnan_value, qnan_value),
+    TEST_f_f (log2, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
 
     TEST_f_f (log2, M_El, M_LOG2El),
     TEST_f_f (log2, 2.0, 1),
@@ -11105,7 +11206,9 @@
 
 static const struct test_f_l_data lround_test_data[] =
   {
-    /* TODO: missing +/-Inf as well as qNaN tests.  */
+    TEST_f_l (lround, plus_infty, IGNORE, INVALID_EXCEPTION),
+    TEST_f_l (lround, minus_infty, IGNORE, INVALID_EXCEPTION),
+    TEST_f_l (lround, qnan_value, IGNORE, INVALID_EXCEPTION),
     TEST_f_l (lround, 0, 0),
     TEST_f_l (lround, minus_zero, 0),
     TEST_f_l (lround, 0.2L, 0.0),
@@ -11152,7 +11255,9 @@
 
 static const struct test_f_L_data llround_test_data[] =
   {
-    /* TODO: missing +/-Inf as well as qNaN tests.  */
+    TEST_f_L (llround, plus_infty, IGNORE, INVALID_EXCEPTION),
+    TEST_f_L (llround, minus_infty, IGNORE, INVALID_EXCEPTION),
+    TEST_f_L (llround, qnan_value, IGNORE, INVALID_EXCEPTION),
     TEST_f_L (llround, 0, 0),
     TEST_f_L (llround, minus_zero, 0),
     TEST_f_L (llround, 0.2L, 0.0),
@@ -11551,86 +11656,84 @@
     TEST_ff_f (pow, qnan_value, 0, 1),
     TEST_ff_f (pow, qnan_value, minus_zero, 1),
 
-#ifndef TEST_INLINE
-    TEST_ff_f (pow, 1.1L, plus_infty, plus_infty),
-    TEST_ff_f (pow, plus_infty, plus_infty, plus_infty),
-    TEST_ff_f (pow, -1.1L, plus_infty, plus_infty),
-    TEST_ff_f (pow, minus_infty, plus_infty, plus_infty),
-
-    TEST_ff_f (pow, 0.9L, plus_infty, 0),
-    TEST_ff_f (pow, 1e-7L, plus_infty, 0),
-    TEST_ff_f (pow, -0.9L, plus_infty, 0),
-    TEST_ff_f (pow, -1e-7L, plus_infty, 0),
-
-    TEST_ff_f (pow, 1.1L, minus_infty, 0),
-    TEST_ff_f (pow, plus_infty, minus_infty, 0),
-    TEST_ff_f (pow, -1.1L, minus_infty, 0),
-    TEST_ff_f (pow, minus_infty, minus_infty, 0),
-
-    TEST_ff_f (pow, 0.9L, minus_infty, plus_infty),
-    TEST_ff_f (pow, 1e-7L, minus_infty, plus_infty),
-    TEST_ff_f (pow, -0.9L, minus_infty, plus_infty),
-    TEST_ff_f (pow, -1e-7L, minus_infty, plus_infty),
-
-    TEST_ff_f (pow, plus_infty, 1e-7L, plus_infty),
-    TEST_ff_f (pow, plus_infty, 1, plus_infty),
-    TEST_ff_f (pow, plus_infty, 1e7L, plus_infty),
-    TEST_ff_f (pow, plus_infty, min_subnorm_value, plus_infty),
-
-    TEST_ff_f (pow, plus_infty, -1e-7L, 0),
-    TEST_ff_f (pow, plus_infty, -1, 0),
-    TEST_ff_f (pow, plus_infty, -1e7L, 0),
-    TEST_ff_f (pow, plus_infty, -min_subnorm_value, 0),
-
-    TEST_ff_f (pow, minus_infty, 1, minus_infty),
-    TEST_ff_f (pow, minus_infty, 11, minus_infty),
-    TEST_ff_f (pow, minus_infty, 1001, minus_infty),
-
-    TEST_ff_f (pow, minus_infty, 2, plus_infty),
-    TEST_ff_f (pow, minus_infty, 12, plus_infty),
-    TEST_ff_f (pow, minus_infty, 1002, plus_infty),
-    TEST_ff_f (pow, minus_infty, 0.1L, plus_infty),
-    TEST_ff_f (pow, minus_infty, 1.1L, plus_infty),
-    TEST_ff_f (pow, minus_infty, 11.1L, plus_infty),
-    TEST_ff_f (pow, minus_infty, 1001.1L, plus_infty),
-    TEST_ff_f (pow, minus_infty, min_subnorm_value, plus_infty),
-
-    TEST_ff_f (pow, minus_infty, -1, minus_zero),
-    TEST_ff_f (pow, minus_infty, -11, minus_zero),
-    TEST_ff_f (pow, minus_infty, -1001, minus_zero),
-
-    TEST_ff_f (pow, minus_infty, -2, 0),
-    TEST_ff_f (pow, minus_infty, -12, 0),
-    TEST_ff_f (pow, minus_infty, -1002, 0),
-    TEST_ff_f (pow, minus_infty, -0.1L, 0),
-    TEST_ff_f (pow, minus_infty, -1.1L, 0),
-    TEST_ff_f (pow, minus_infty, -11.1L, 0),
-    TEST_ff_f (pow, minus_infty, -1001.1L, 0),
-    TEST_ff_f (pow, minus_infty, -min_subnorm_value, 0),
-#endif
-
-    TEST_ff_f (pow, qnan_value, qnan_value, qnan_value),
-    TEST_ff_f (pow, 0, qnan_value, qnan_value),
-    TEST_ff_f (pow, 1, qnan_value, 1),
-    TEST_ff_f (pow, -1, qnan_value, qnan_value),
-    TEST_ff_f (pow, qnan_value, 1, qnan_value),
-    TEST_ff_f (pow, qnan_value, -1, qnan_value),
+    TEST_ff_f (pow, 1.1L, plus_infty, plus_infty, NO_TEST_INLINE),
+    TEST_ff_f (pow, plus_infty, plus_infty, plus_infty, NO_TEST_INLINE),
+    TEST_ff_f (pow, -1.1L, plus_infty, plus_infty, NO_TEST_INLINE),
+    TEST_ff_f (pow, minus_infty, plus_infty, plus_infty, NO_TEST_INLINE),
+
+    TEST_ff_f (pow, 0.9L, plus_infty, 0, NO_TEST_INLINE),
+    TEST_ff_f (pow, 1e-7L, plus_infty, 0, NO_TEST_INLINE),
+    TEST_ff_f (pow, -0.9L, plus_infty, 0, NO_TEST_INLINE),
+    TEST_ff_f (pow, -1e-7L, plus_infty, 0, NO_TEST_INLINE),
+
+    TEST_ff_f (pow, 1.1L, minus_infty, 0, NO_TEST_INLINE),
+    TEST_ff_f (pow, plus_infty, minus_infty, 0, NO_TEST_INLINE),
+    TEST_ff_f (pow, -1.1L, minus_infty, 0, NO_TEST_INLINE),
+    TEST_ff_f (pow, minus_infty, minus_infty, 0, NO_TEST_INLINE),
+
+    TEST_ff_f (pow, 0.9L, minus_infty, plus_infty, NO_TEST_INLINE),
+    TEST_ff_f (pow, 1e-7L, minus_infty, plus_infty, NO_TEST_INLINE),
+    TEST_ff_f (pow, -0.9L, minus_infty, plus_infty, NO_TEST_INLINE),
+    TEST_ff_f (pow, -1e-7L, minus_infty, plus_infty, NO_TEST_INLINE),
+
+    TEST_ff_f (pow, plus_infty, 1e-7L, plus_infty, NO_TEST_INLINE),
+    TEST_ff_f (pow, plus_infty, 1, plus_infty, NO_TEST_INLINE),
+    TEST_ff_f (pow, plus_infty, 1e7L, plus_infty, NO_TEST_INLINE),
+    TEST_ff_f (pow, plus_infty, min_subnorm_value, plus_infty, NO_TEST_INLINE),
+
+    TEST_ff_f (pow, plus_infty, -1e-7L, 0, NO_TEST_INLINE),
+    TEST_ff_f (pow, plus_infty, -1, 0, NO_TEST_INLINE),
+    TEST_ff_f (pow, plus_infty, -1e7L, 0, NO_TEST_INLINE),
+    TEST_ff_f (pow, plus_infty, -min_subnorm_value, 0, NO_TEST_INLINE),
+
+    TEST_ff_f (pow, minus_infty, 1, minus_infty, NO_TEST_INLINE),
+    TEST_ff_f (pow, minus_infty, 11, minus_infty, NO_TEST_INLINE),
+    TEST_ff_f (pow, minus_infty, 1001, minus_infty, NO_TEST_INLINE),
+
+    TEST_ff_f (pow, minus_infty, 2, plus_infty, NO_TEST_INLINE),
+    TEST_ff_f (pow, minus_infty, 12, plus_infty, NO_TEST_INLINE),
+    TEST_ff_f (pow, minus_infty, 1002, plus_infty, NO_TEST_INLINE),
+    TEST_ff_f (pow, minus_infty, 0.1L, plus_infty, NO_TEST_INLINE),
+    TEST_ff_f (pow, minus_infty, 1.1L, plus_infty, NO_TEST_INLINE),
+    TEST_ff_f (pow, minus_infty, 11.1L, plus_infty, NO_TEST_INLINE),
+    TEST_ff_f (pow, minus_infty, 1001.1L, plus_infty, NO_TEST_INLINE),
+    TEST_ff_f (pow, minus_infty, min_subnorm_value, plus_infty, NO_TEST_INLINE),
+
+    TEST_ff_f (pow, minus_infty, -1, minus_zero, NO_TEST_INLINE),
+    TEST_ff_f (pow, minus_infty, -11, minus_zero, NO_TEST_INLINE),
+    TEST_ff_f (pow, minus_infty, -1001, minus_zero, NO_TEST_INLINE),
+
+    TEST_ff_f (pow, minus_infty, -2, 0, NO_TEST_INLINE),
+    TEST_ff_f (pow, minus_infty, -12, 0, NO_TEST_INLINE),
+    TEST_ff_f (pow, minus_infty, -1002, 0, NO_TEST_INLINE),
+    TEST_ff_f (pow, minus_infty, -0.1L, 0, NO_TEST_INLINE),
+    TEST_ff_f (pow, minus_infty, -1.1L, 0, NO_TEST_INLINE),
+    TEST_ff_f (pow, minus_infty, -11.1L, 0, NO_TEST_INLINE),
+    TEST_ff_f (pow, minus_infty, -1001.1L, 0, NO_TEST_INLINE),
+    TEST_ff_f (pow, minus_infty, -min_subnorm_value, 0, NO_TEST_INLINE),
+
+    TEST_ff_f (pow, qnan_value, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
+    TEST_ff_f (pow, 0, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
+    TEST_ff_f (pow, 1, qnan_value, 1, NO_INEXACT_EXCEPTION),
+    TEST_ff_f (pow, -1, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
+    TEST_ff_f (pow, qnan_value, 1, qnan_value, NO_INEXACT_EXCEPTION),
+    TEST_ff_f (pow, qnan_value, -1, qnan_value, NO_INEXACT_EXCEPTION),
 
     /* pow (x, qNaN) == qNaN.  */
-    TEST_ff_f (pow, 3.0, qnan_value, qnan_value),
-    TEST_ff_f (pow, minus_zero, qnan_value, qnan_value),
-    TEST_ff_f (pow, plus_infty, qnan_value, qnan_value),
-    TEST_ff_f (pow, -3.0, qnan_value, qnan_value),
-    TEST_ff_f (pow, minus_infty, qnan_value, qnan_value),
-
-    TEST_ff_f (pow, qnan_value, 3.0, qnan_value),
-    TEST_ff_f (pow, qnan_value, -3.0, qnan_value),
-    TEST_ff_f (pow, qnan_value, plus_infty, qnan_value),
-    TEST_ff_f (pow, qnan_value, minus_infty, qnan_value),
-    TEST_ff_f (pow, qnan_value, 2.5, qnan_value),
-    TEST_ff_f (pow, qnan_value, -2.5, qnan_value),
-    TEST_ff_f (pow, qnan_value, min_subnorm_value, qnan_value),
-    TEST_ff_f (pow, qnan_value, -min_subnorm_value, qnan_value),
+    TEST_ff_f (pow, 3.0, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
+    TEST_ff_f (pow, minus_zero, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
+    TEST_ff_f (pow, plus_infty, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
+    TEST_ff_f (pow, -3.0, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
+    TEST_ff_f (pow, minus_infty, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
+
+    TEST_ff_f (pow, qnan_value, 3.0, qnan_value, NO_INEXACT_EXCEPTION),
+    TEST_ff_f (pow, qnan_value, -3.0, qnan_value, NO_INEXACT_EXCEPTION),
+    TEST_ff_f (pow, qnan_value, plus_infty, qnan_value, NO_INEXACT_EXCEPTION),
+    TEST_ff_f (pow, qnan_value, minus_infty, qnan_value, NO_INEXACT_EXCEPTION),
+    TEST_ff_f (pow, qnan_value, 2.5, qnan_value, NO_INEXACT_EXCEPTION),
+    TEST_ff_f (pow, qnan_value, -2.5, qnan_value, NO_INEXACT_EXCEPTION),
+    TEST_ff_f (pow, qnan_value, min_subnorm_value, qnan_value, NO_INEXACT_EXCEPTION),
+    TEST_ff_f (pow, qnan_value, -min_subnorm_value, qnan_value, NO_INEXACT_EXCEPTION),
 
     TEST_ff_f (pow, 1, plus_infty, 1),
     TEST_ff_f (pow, -1, plus_infty, 1),
@@ -11744,19 +11847,17 @@
     TEST_ff_f (pow, 0, minus_infty, plus_infty, DIVIDE_BY_ZERO_EXCEPTION_OK),
     TEST_ff_f (pow, minus_zero, minus_infty, plus_infty, DIVIDE_BY_ZERO_EXCEPTION_OK),
 
-#ifndef TEST_INLINE
     /* pow (x, +inf) == +inf for |x| > 1.  */
-    TEST_ff_f (pow, 1.5, plus_infty, plus_infty),
+    TEST_ff_f (pow, 1.5, plus_infty, plus_infty, NO_TEST_INLINE),
 
     /* pow (x, +inf) == +0 for |x| < 1.  */
-    TEST_ff_f (pow, 0.5, plus_infty, 0.0),
+    TEST_ff_f (pow, 0.5, plus_infty, 0.0, NO_TEST_INLINE),
 
     /* pow (x, -inf) == +0 for |x| > 1.  */
-    TEST_ff_f (pow, 1.5, minus_infty, 0.0),
+    TEST_ff_f (pow, 1.5, minus_infty, 0.0, NO_TEST_INLINE),
 
     /* pow (x, -inf) == +inf for |x| < 1.  */
-    TEST_ff_f (pow, 0.5, minus_infty, plus_infty),
-#endif
+    TEST_ff_f (pow, 0.5, minus_infty, plus_infty, NO_TEST_INLINE),
 
     /* pow (+inf, y) == +inf for y > 0.  */
     TEST_ff_f (pow, plus_infty, 2, plus_infty),
@@ -13124,8 +13225,8 @@
     TEST_ff_f (scalb, 2.0, 0.5, qnan_value, INVALID_EXCEPTION),
     TEST_ff_f (scalb, 3.0, -2.5, qnan_value, INVALID_EXCEPTION),
 
-    TEST_ff_f (scalb, 0, qnan_value, qnan_value),
-    TEST_ff_f (scalb, 1, qnan_value, qnan_value),
+    TEST_ff_f (scalb, 0, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
+    TEST_ff_f (scalb, 1, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
 
     TEST_ff_f (scalb, 1, 0, 1),
     TEST_ff_f (scalb, -1, 0, -1),
@@ -13160,13 +13261,13 @@
     TEST_ff_f (scalb, plus_infty, minus_infty, qnan_value, INVALID_EXCEPTION),
     TEST_ff_f (scalb, minus_infty, minus_infty, qnan_value, INVALID_EXCEPTION),
 
-    TEST_ff_f (scalb, qnan_value, 1, qnan_value),
-    TEST_ff_f (scalb, 1, qnan_value, qnan_value),
-    TEST_ff_f (scalb, qnan_value, 0, qnan_value),
-    TEST_ff_f (scalb, 0, qnan_value, qnan_value),
-    TEST_ff_f (scalb, qnan_value, plus_infty, qnan_value),
-    TEST_ff_f (scalb, plus_infty, qnan_value, qnan_value),
-    TEST_ff_f (scalb, qnan_value, qnan_value, qnan_value),
+    TEST_ff_f (scalb, qnan_value, 1, qnan_value, NO_INEXACT_EXCEPTION),
+    TEST_ff_f (scalb, 1, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
+    TEST_ff_f (scalb, qnan_value, 0, qnan_value, NO_INEXACT_EXCEPTION),
+    TEST_ff_f (scalb, 0, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
+    TEST_ff_f (scalb, qnan_value, plus_infty, qnan_value, NO_INEXACT_EXCEPTION),
+    TEST_ff_f (scalb, plus_infty, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
+    TEST_ff_f (scalb, qnan_value, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
 
     TEST_ff_f (scalb, 0.8L, 4, 12.8L),
     TEST_ff_f (scalb, -0.854375L, 5, -27.34L),
@@ -13272,11 +13373,12 @@
 
 static const struct test_f_i_data signbit_test_data[] =
   {
-    /* TODO: missing qNaN tests.  */
     TEST_f_b (signbit, 0, 0, NO_INEXACT_EXCEPTION),
     TEST_f_b (signbit, minus_zero, 1, NO_INEXACT_EXCEPTION),
     TEST_f_b (signbit, plus_infty, 0, NO_INEXACT_EXCEPTION),
     TEST_f_b (signbit, minus_infty, 1, NO_INEXACT_EXCEPTION),
+    TEST_f_b (signbit, qnan_value, 0, NO_INEXACT_EXCEPTION),
+    TEST_f_b (signbit, -qnan_value, 1, NO_INEXACT_EXCEPTION),
 
     /* signbit (x) != 0 for x < 0.  */
     TEST_f_b (signbit, -1, 1, NO_INEXACT_EXCEPTION),
@@ -13299,7 +13401,7 @@
     TEST_f_f (sin, minus_zero, minus_zero),
     TEST_f_f (sin, plus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
     TEST_f_f (sin, minus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
-    TEST_f_f (sin, qnan_value, qnan_value, ERRNO_UNCHANGED),
+    TEST_f_f (sin, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
 
     TEST_f_f (sin, M_PI_6l, 0.5),
     TEST_f_f (sin, -M_PI_6l, -0.5),
@@ -13452,7 +13554,7 @@
     TEST_fFF_11 (sincos, minus_zero, minus_zero, 1),
     TEST_fFF_11 (sincos, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION),
     TEST_fFF_11 (sincos, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION),
-    TEST_fFF_11 (sincos, qnan_value, qnan_value, qnan_value),
+    TEST_fFF_11 (sincos, qnan_value, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
 
     /* The value of M_PI_2l is never exactly PI/2, and therefore the
        answer is never exactly zero. The answer is equal to the error
@@ -13522,11 +13624,9 @@
     TEST_f_f (sinh, 0, 0),
     TEST_f_f (sinh, minus_zero, minus_zero),
 
-#ifndef TEST_INLINE
-    TEST_f_f (sinh, plus_infty, plus_infty),
-    TEST_f_f (sinh, minus_infty, minus_infty),
-#endif
-    TEST_f_f (sinh, qnan_value, qnan_value),
+    TEST_f_f (sinh, plus_infty, plus_infty, NO_TEST_INLINE),
+    TEST_f_f (sinh, minus_infty, minus_infty, NO_TEST_INLINE),
+    TEST_f_f (sinh, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
 
     TEST_f_f (sinh, 0.75L, 0.822316731935829980703661634446913849L),
     TEST_f_f (sinh, 0x8p-32L, 1.86264514923095703232705808926175479e-9L),
@@ -13642,7 +13742,7 @@
     TEST_f_f (tan, minus_zero, minus_zero),
     TEST_f_f (tan, plus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
     TEST_f_f (tan, minus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
-    TEST_f_f (tan, qnan_value, qnan_value, ERRNO_UNCHANGED),
+    TEST_f_f (tan, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
 
     TEST_f_f (tan, M_PI_4l, 1),
     TEST_f_f (tan, 0.75L, 0.931596459944072461165202756573936428L),
@@ -13804,11 +13904,9 @@
     TEST_f_f (tanh, 0, 0),
     TEST_f_f (tanh, minus_zero, minus_zero),
 
-#ifndef TEST_INLINE
-    TEST_f_f (tanh, plus_infty, 1),
-    TEST_f_f (tanh, minus_infty, -1),
-#endif
-    TEST_f_f (tanh, qnan_value, qnan_value),
+    TEST_f_f (tanh, plus_infty, 1, NO_TEST_INLINE),
+    TEST_f_f (tanh, minus_infty, -1, NO_TEST_INLINE),
+    TEST_f_f (tanh, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
 
     TEST_f_f (tanh, 0.75L, 0.635148952387287319214434357312496495L),
     TEST_f_f (tanh, -0.75L, -0.635148952387287319214434357312496495L),
@@ -13838,7 +13936,7 @@
     TEST_f_f (tgamma, -2, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
     TEST_f_f (tgamma, -max_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
     TEST_f_f (tgamma, minus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
-    TEST_f_f (tgamma, qnan_value, qnan_value),
+    TEST_f_f (tgamma, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
 
     TEST_f_f (tgamma, 0.5, M_SQRT_PIl),
     TEST_f_f (tgamma, -0.5, -M_2_SQRT_PIl),
@@ -14478,7 +14576,7 @@
     TEST_f_f (y0, -1.0, minus_infty, INVALID_EXCEPTION|ERRNO_EDOM),
     TEST_f_f (y0, -max_value, minus_infty, INVALID_EXCEPTION|ERRNO_EDOM),
     TEST_f_f (y0, 0.0, minus_infty),
-    TEST_f_f (y0, qnan_value, qnan_value),
+    TEST_f_f (y0, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
     TEST_f_f (y0, plus_infty, 0),
 
     TEST_f_f (y0, 0.125L, -1.38968062514384052915582277745018693L),
@@ -14530,7 +14628,7 @@
     TEST_f_f (y1, -max_value, minus_infty, INVALID_EXCEPTION|ERRNO_EDOM),
     TEST_f_f (y1, 0.0, minus_infty),
     TEST_f_f (y1, plus_infty, 0),
-    TEST_f_f (y1, qnan_value, qnan_value),
+    TEST_f_f (y1, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
 
     TEST_f_f (y1, 0.125L, -5.19993611253477499595928744876579921L),
     TEST_f_f (y1, 0.75L, -1.03759455076928541973767132140642198L),
@@ -14581,7 +14679,7 @@
     TEST_if_f (yn, 0, -1.0, minus_infty, INVALID_EXCEPTION|ERRNO_EDOM),
     TEST_if_f (yn, 0, -max_value, minus_infty, INVALID_EXCEPTION|ERRNO_EDOM),
     TEST_if_f (yn, 0, 0.0, minus_infty),
-    TEST_if_f (yn, 0, qnan_value, qnan_value),
+    TEST_if_f (yn, 0, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
     TEST_if_f (yn, 0, plus_infty, 0),
 
     TEST_if_f (yn, 0, 0.125L, -1.38968062514384052915582277745018693L),
@@ -14596,7 +14694,7 @@
     TEST_if_f (yn, 1, -1.0, minus_infty, INVALID_EXCEPTION|ERRNO_EDOM),
     TEST_if_f (yn, 1, 0.0, minus_infty),
     TEST_if_f (yn, 1, plus_infty, 0),
-    TEST_if_f (yn, 1, qnan_value, qnan_value),
+    TEST_if_f (yn, 1, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
 
     TEST_if_f (yn, 1, 0.125L, -5.19993611253477499595928744876579921L),
     TEST_if_f (yn, 1, 0.75L, -1.03759455076928541973767132140642198L),
@@ -14608,7 +14706,7 @@
 
     /* yn (3, x)  */
     TEST_if_f (yn, 3, plus_infty, 0),
-    TEST_if_f (yn, 3, qnan_value, qnan_value),
+    TEST_if_f (yn, 3, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
 
     TEST_if_f (yn, 3, 0.125L, -2612.69757350066712600220955744091741L),
     TEST_if_f (yn, 3, 0.75L, -12.9877176234475433186319774484809207L),
@@ -14618,7 +14716,7 @@
 
     /* yn (10, x)  */
     TEST_if_f (yn, 10, plus_infty, 0),
-    TEST_if_f (yn, 10, qnan_value, qnan_value),
+    TEST_if_f (yn, 10, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
 
     TEST_if_f (yn, 10, 0.125L, -127057845771019398.252538486899753195L),
     TEST_if_f (yn, 10, 0.75L, -2133501638.90573424452445412893839236L),

Modified: fsf/trunk/libc/sysdeps/i386/fpu/e_pow.S
==============================================================================
--- fsf/trunk/libc/sysdeps/i386/fpu/e_pow.S (original)
+++ fsf/trunk/libc/sysdeps/i386/fpu/e_pow.S Sun Nov 17 00:01:52 2013
@@ -98,6 +98,9 @@
 	cmpb	$0x05, %ah
 	je	15f		// x is Âinf
 
+	cmpb	$0x01, %ah
+	je	32f		// x is NaN
+
 	fxch			// y : x
 
 	/* fistpll raises invalid exception for |y| >= 1L<<63.  */
@@ -163,6 +166,12 @@
 	je	31f
 	fxch			// y : x
 31:	fstp	%st(1)
+	ret
+
+	cfi_adjust_cfa_offset (8)
+32:	addl	$8, %esp
+	cfi_adjust_cfa_offset (-8)
+	fstp	%st(1)
 	ret
 
 	cfi_adjust_cfa_offset (8)

Modified: fsf/trunk/libc/sysdeps/i386/fpu/e_powf.S
==============================================================================
--- fsf/trunk/libc/sysdeps/i386/fpu/e_powf.S (original)
+++ fsf/trunk/libc/sysdeps/i386/fpu/e_powf.S Sun Nov 17 00:01:52 2013
@@ -95,6 +95,9 @@
 	cmpb	$0x05, %ah
 	je	15f		// x is Âinf
 
+	cmpb	$0x01, %ah
+	je	32f		// x is NaN
+
 	fxch			// y : x
 
 	/* fistpl raises invalid exception for |y| >= 1L<<31.  */
@@ -180,7 +183,7 @@
 	f2xm1			// 2^fract(y*log2(x))-1 : int(y*log2(x))
 	faddl	MO(one)		// 2^fract(y*log2(x)) : int(y*log2(x))
 	fscale			// 2^fract(y*log2(x))*2^int(y*log2(x)) : int(y*log2(x))
-	addl	$4, %esp
+32:	addl	$4, %esp
 	cfi_adjust_cfa_offset (-4)
 	fstp	%st(1)		// 2^fract(y*log2(x))*2^int(y*log2(x))
 	ret

Modified: fsf/trunk/libc/sysdeps/i386/fpu/e_powl.S
==============================================================================
--- fsf/trunk/libc/sysdeps/i386/fpu/e_powl.S (original)
+++ fsf/trunk/libc/sysdeps/i386/fpu/e_powl.S Sun Nov 17 00:01:52 2013
@@ -104,6 +104,9 @@
 	cmpb	$0x05, %ah
 	je	15f		// x is Âinf
 
+	cmpb	$0x01, %ah
+	je	32f		// x is NaN
+
 	fxch			// y : x
 
 	/* fistpll raises invalid exception for |y| >= 1L<<63.  */
@@ -185,6 +188,12 @@
 	je	31f
 	fxch			// y : x
 31:	fstp	%st(1)
+	ret
+
+	cfi_adjust_cfa_offset (8)
+32:	addl	$8, %esp
+	cfi_adjust_cfa_offset (-8)
+	fstp	%st(1)
 	ret
 
 	cfi_adjust_cfa_offset (8)

Modified: fsf/trunk/libc/sysdeps/x86_64/fpu/e_powl.S
==============================================================================
--- fsf/trunk/libc/sysdeps/x86_64/fpu/e_powl.S (original)
+++ fsf/trunk/libc/sysdeps/x86_64/fpu/e_powl.S Sun Nov 17 00:01:52 2013
@@ -95,6 +95,9 @@
 
 	cmpb	$0x05, %ah
 	je	15f		// x is Âinf
+
+	cmpb	$0x01, %ah
+	je	31f		// x is NaN
 
 	fxch			// y : x
 

_______________________________________________
Commits mailing list
Commits@xxxxxxxxxx
http://eglibc.org/cgi-bin/mailman/listinfo/commits