This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Factor out initializers for libm-test.inc constants


As described in
<http://sourceware.org/ml/libc-alpha/2013-05/msg00119.html>, moving
libm tests into data will require that references to variables such as
qnan_value, in tests inside functions, are replaced by direct use of
associated initializers, in tests in static arrays.

This patch implements the change proposed there, of moving each of the
initializers into a macro. That way, gen-libm-test.pl will be able to
make the substitutions automatically for tests inside arrays.  Once
the conversion is complete, the static variables for each value can
then be eliminated along with the substitutions in gen-libm-test.pl,
with the macros being renamed to match the old variables.

Tested x86_64.

2013-05-08  Joseph Myers  <joseph@codesourcery.com>

	* math/libm-test.inc (PLUS_ZERO_INIT): New macro.
	(MINUS_ZERO_INIT): Likewise.
	(PLUS_INFTY_INIT): Likewise.
	(MINUS_INFTY_INIT): Likewise.
	(QNAN_VALUE_INIT): Likewise.
	(MAX_VALUE_INIT): Likewise.
	(MIN_VALUE_INIT): Likewise.
	(MIN_SUBNORM_VALUE_INIT): Likewise.
	(plus_zero): Initialize with PLUS_ZERO_INIT.
	(minus_zero): Initialize with MINUS_ZERO_INIT.
	(plus_infty): Initialize with PLUS_INFTY_INIT.
	(minus_infty): Initialize with MINUS_INFTY_INIT.
	(qnan_value): Initialize with QNAN_VALUE_INIT.
	(max_value): Initialize with MAX_VALUE_INIT.
	(min_value): Initialize with MIN_VALUE_INIT.
	(min_subnorm_value): Initialize with MIN_SUBNORM_VALUE_INIT.

diff --git a/math/libm-test.inc b/math/libm-test.inc
index 19bbc3f..721ad82 100644
--- a/math/libm-test.inc
+++ b/math/libm-test.inc
@@ -229,25 +229,34 @@ static int output_max_error;	/* Should the maximal errors printed?  */
 static int output_points;	/* Should the single function results printed?  */
 static int ignore_max_ulp;	/* Should we ignore max_ulp?  */
 
-static const FLOAT plus_zero = CHOOSE (0.0L, 0.0, 0.0f,
-				       0.0L, 0.0, 0.0f);
-static const FLOAT minus_zero = CHOOSE (-0.0L, -0.0, -0.0f,
-					-0.0L, -0.0, -0.0f);
-static const FLOAT plus_infty = CHOOSE (HUGE_VALL, HUGE_VAL, HUGE_VALF,
-					HUGE_VALL, HUGE_VAL, HUGE_VALF);
-static const FLOAT minus_infty = CHOOSE (-HUGE_VALL, -HUGE_VAL, -HUGE_VALF,
-					 -HUGE_VALL, -HUGE_VAL, -HUGE_VALF);
-static const FLOAT qnan_value = FUNC (__builtin_nan) ("");
-static const FLOAT max_value = CHOOSE (LDBL_MAX, DBL_MAX, FLT_MAX,
-				       LDBL_MAX, DBL_MAX, FLT_MAX);
-static const FLOAT min_value = CHOOSE (LDBL_MIN, DBL_MIN, FLT_MIN,
-				       LDBL_MIN, DBL_MIN, FLT_MIN);
-static const FLOAT min_subnorm_value = CHOOSE (__LDBL_DENORM_MIN__,
-					       __DBL_DENORM_MIN__,
-					       __FLT_DENORM_MIN__,
-					       __LDBL_DENORM_MIN__,
-					       __DBL_DENORM_MIN__,
-					       __FLT_DENORM_MIN__);
+#define PLUS_ZERO_INIT	CHOOSE (0.0L, 0.0, 0.0f,	\
+				0.0L, 0.0, 0.0f)
+#define MINUS_ZERO_INIT	CHOOSE (-0.0L, -0.0, -0.0f,	\
+				-0.0L, -0.0, -0.0f)
+#define PLUS_INFTY_INIT	CHOOSE (HUGE_VALL, HUGE_VAL, HUGE_VALF, \
+				HUGE_VALL, HUGE_VAL, HUGE_VALF)
+#define MINUS_INFTY_INIT	CHOOSE (-HUGE_VALL, -HUGE_VAL, -HUGE_VALF, \
+					-HUGE_VALL, -HUGE_VAL, -HUGE_VALF)
+#define QNAN_VALUE_INIT	FUNC (__builtin_nan) ("")
+#define MAX_VALUE_INIT	CHOOSE (LDBL_MAX, DBL_MAX, FLT_MAX,	\
+				LDBL_MAX, DBL_MAX, FLT_MAX)
+#define MIN_VALUE_INIT	CHOOSE (LDBL_MIN, DBL_MIN, FLT_MIN,	\
+				LDBL_MIN, DBL_MIN, FLT_MIN)
+#define MIN_SUBNORM_VALUE_INIT	CHOOSE (__LDBL_DENORM_MIN__,	\
+					__DBL_DENORM_MIN__,	\
+					__FLT_DENORM_MIN__,	\
+					__LDBL_DENORM_MIN__,	\
+					__DBL_DENORM_MIN__,	\
+					__FLT_DENORM_MIN__)
+
+static const FLOAT plus_zero = PLUS_ZERO_INIT;
+static const FLOAT minus_zero = MINUS_ZERO_INIT;
+static const FLOAT plus_infty = PLUS_INFTY_INIT;
+static const FLOAT minus_infty = MINUS_INFTY_INIT;
+static const FLOAT qnan_value = QNAN_VALUE_INIT;
+static const FLOAT max_value = MAX_VALUE_INIT;
+static const FLOAT min_value = MIN_VALUE_INIT;
+static const FLOAT min_subnorm_value = MIN_SUBNORM_VALUE_INIT;
 
 static FLOAT max_error, real_max_error, imag_max_error;
 

-- 
Joseph S. Myers
joseph@codesourcery.com


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]