This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Factor out initializers for libm-test.inc constants
- From: "Joseph S. Myers" <joseph at codesourcery dot com>
- To: <libc-alpha at sourceware dot org>
- Date: Wed, 8 May 2013 15:45:33 +0000
- Subject: 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