From patchwork Fri May 20 21:37:21 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Paul E. Murphy" X-Patchwork-Id: 12434 Received: (qmail 117108 invoked by alias); 20 May 2016 21:38:00 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 116993 invoked by uid 89); 20 May 2016 21:38:00 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-2.1 required=5.0 tests=AWL, BAYES_00, KAM_LAZY_DOMAIN_SECURITY, RP_MATCHES_RCVD autolearn=ham version=3.3.2 spammy=keys, order!, _2, 69716 X-HELO: e36.co.us.ibm.com X-IBM-Helo: d03dlp03.boulder.ibm.com X-IBM-MailFrom: murphyp@linux.vnet.ibm.com X-IBM-RcptTo: libc-alpha@sourceware.org From: "Paul E. Murphy" To: libc-alpha@sourceware.org Subject: [PATCHv2 12/14] Remove CHOOSE() macro from libm-tests.inc Date: Fri, 20 May 2016 16:37:21 -0500 Message-Id: <08d32f9a596cbb9eefdc733776b39db418e2920f.1463779745.git.murphyp@linux.vnet.ibm.com> In-Reply-To: References: In-Reply-To: References: X-TM-AS-GCONF: 00 X-Content-Scanned: Fidelis XPS MAILER x-cbid: 16052021-0021-0000-0000-000051FDFBAB X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused Use gen-libm-test.pl to generate a list of macros mapping to libm-test-ulps.h as this simplifies adding new types without having to modify a growing number of static headers each time a type is added. This also removes the final usage of the TEST_[DOUBLE|FLOAT|LDOUBLE] macros. Thus, they too are removed. * math/gen-libm-test.pl (all_floats_pfx): New lookup table. (parse_ulps): Dynamically generate type name matching string from all_floats. (get_ulps): Generate the ulps as an array instead. (output_ulps): Dynamically compose the type based on the number of supported formats, and print the indices as type specific helper macros. * math/libm-test.inc: Remove comment about CHOOSE. (ulp_data): Generate the type in libm-test-ulps.h. [ULP_IDX]: New macro. [_ULP_IDX]: Likewise. [__ULP_IDX]: Likewise. (find_ulps): Update usage of max_ulp. * math/test-double-vlen2.h [CHOOSE]: Remove. * math/test-double-vlen4.h [CHOOSE]: Likewise. * math/test-double-vlen8.h [CHOOSE]: Likewise. * math/test-float.c [CHOOSE]: Likewise. * math/test-float-finite.c [CHOOSE]: Likewise. * math/test-double.c [CHOOSE]: Likewise. * math/test-double-finite.c [CHOOSE]: Likewise. * math/test-idouble.c [CHOOSE]: Likewise. * math/test-ifloat.c [CHOOSE]: Likewise. * math/test-ildoubl.c [CHOOSE]: Likewise. * math/test-ldouble-finite.c [CHOOSE]: Likewise. * math/test-ldouble.c [CHOOSE]: Likewise. * math/test-float.h [TEST_FLOAT]: Remove. * math/test-double.h [TEST_DOUBLE]: Remove. * math/test-ldouble.h [TEST_LDOUBLE]: Remove. --- math/gen-libm-test.pl | 49 +++++++++++++++++++++++++++++++++++----------- math/libm-test.inc | 13 +++--------- math/test-double-finite.c | 1 - math/test-double-vlen2.h | 1 - math/test-double-vlen4.h | 1 - math/test-double-vlen8.h | 1 - math/test-double.c | 1 - math/test-double.h | 1 - math/test-float-finite.c | 1 - math/test-float-vlen16.h | 1 - math/test-float-vlen4.h | 1 - math/test-float-vlen8.h | 1 - math/test-float.c | 1 - math/test-float.h | 1 - math/test-idouble.c | 1 - math/test-ifloat.c | 1 - math/test-ildoubl.c | 1 - math/test-ldouble-finite.c | 1 - math/test-ldouble.c | 1 - math/test-ldouble.h | 1 - 20 files changed, 41 insertions(+), 39 deletions(-) diff --git a/math/gen-libm-test.pl b/math/gen-libm-test.pl index 40839e0..fa48f5e 100755 --- a/math/gen-libm-test.pl +++ b/math/gen-libm-test.pl @@ -39,7 +39,7 @@ use strict; use vars qw ($input $output $auto_input); use vars qw (%results); -use vars qw (%beautify @all_floats); +use vars qw (%beautify @all_floats %all_floats_pfx); use vars qw ($output_dir $ulps_file $srcdir); use vars qw (%auto_tests); @@ -47,6 +47,13 @@ use vars qw (%auto_tests); @all_floats = ('double', 'float', 'idouble', 'ifloat', 'ildouble', 'ldouble'); +# all_floats_pfx maps C types to their C like prefix for macros. +%all_floats_pfx = + ( "double" => "DBL", + "ldouble" => "LDBL", + "float" => "FLT", + ); + %beautify = ( "minus_zero" => "-0", "plus_zero" => "+0", @@ -588,7 +595,14 @@ sub generate_testfile { # Parse ulps file sub parse_ulps { my ($file) = @_; - my ($test, $type, $float, $eps); + my ($test, $type, $float, $eps, $float_regex); + + # Build a basic regex to match type entries in the + # generated ULPS file. + foreach my $ftype (@all_floats) { + $float_regex .= "|" . $ftype; + } + $float_regex = "^" . substr ($float_regex, 1) . ":"; # $type has the following values: # "normal": No complex variable @@ -613,7 +627,7 @@ sub parse_ulps { ($test) = ($_ =~ /^Function:\s*\"([a-zA-Z0-9_]+)\"/); next; } - if (/^i?(float|double|ldouble):/) { + if (/$float_regex/) { ($float, $eps) = split /\s*:\s*/,$_,2; if ($eps eq "0") { @@ -697,16 +711,13 @@ sub get_ulps { sub get_all_ulps_for_test { my ($test, $type) = @_; my ($ldouble, $double, $float, $ildouble, $idouble, $ifloat); + my ($ulps_str); if (exists $results{$test}{'has_ulps'}) { - # XXX use all_floats (change order!) - $ldouble = &get_ulps ($test, $type, "ldouble"); - $double = &get_ulps ($test, $type, "double"); - $float = &get_ulps ($test, $type, "float"); - $ildouble = &get_ulps ($test, $type, "ildouble"); - $idouble = &get_ulps ($test, $type, "idouble"); - $ifloat = &get_ulps ($test, $type, "ifloat"); - return "CHOOSE ($ldouble, $double, $float, $ildouble, $idouble, $ifloat)"; + foreach $float (@all_floats) { + $ulps_str .= &get_ulps ($test, $type, $float) . ", "; + } + return "{" . substr ($ulps_str, 0, -2) . "}"; } else { die "get_all_ulps_for_test called for \"$test\" with no ulps\n"; } @@ -724,6 +735,22 @@ sub output_ulps { print ULP " from $ulps_filename with gen-libm-test.pl.\n"; print ULP " Don't change it - change instead the master files. */\n\n"; + print ULP "struct ulp_data\n"; + print ULP "{\n"; + print ULP " const char *name;\n"; + print ULP " FLOAT max_ulp[" . @all_floats . "];\n"; + print ULP "};\n\n"; + + for ($i = 0; $i <= $#all_floats; $i++) { + $type = $all_floats[$i]; + print ULP "#define ULP_"; + if ($type =~ /^i/) { + print ULP "I_"; + $type = substr $type, 1; + } + print ULP "$all_floats_pfx{$type} $i\n"; + } + foreach $fct (keys %results) { $type = $results{$fct}{'type'}; if ($type eq 'normal') { diff --git a/math/libm-test.inc b/math/libm-test.inc index 3ba0b2d..adc1d69 100644 --- a/math/libm-test.inc +++ b/math/libm-test.inc @@ -26,7 +26,6 @@ name with correct suffix (e.g. cosl or cosf) FLOAT: floating point type to test - TEST_MSG: informal message to be displayed - CHOOSE(Clongdouble,Cdouble,Cfloat,Cinlinelongdouble,Cinlinedouble,Cinlinefloat): chooses one of the parameters as delta for testing equality PRINTF_EXPR Floating point conversion specification to print a variable @@ -133,14 +132,6 @@ #include #include -/* Structure for ulp data for a function, or the real or imaginary - part of a function. */ -struct ulp_data -{ - const char *name; - FLOAT max_ulp; -}; - /* This header defines func_ulps, func_real_ulps and func_imag_ulps arrays. */ #include "libm-test-ulps.h" @@ -205,8 +196,10 @@ struct ulp_data # define FSTR_MAX (128) #if TEST_INLINE +# define ULP_IDX _EXPAND (ULP_I_, PREFIX) # define TYPESTR "i" TSTR #else +# define ULP_IDX _EXPAND (ULP_, PREFIX) # define TYPESTR TSTR #endif @@ -396,7 +389,7 @@ find_ulps (const char *name, const struct ulp_data *data, size_t nmemb) if (entry == NULL) return 0; else - return entry->max_ulp; + return entry->max_ulp[ULP_IDX]; } static void diff --git a/math/test-double-finite.c b/math/test-double-finite.c index e7fa2a9..7f107aa 100644 --- a/math/test-double-finite.c +++ b/math/test-double-finite.c @@ -21,6 +21,5 @@ #include "test-math-scalar.h" #define TEST_MSG "testing double (finite-math-only)\n" -#define CHOOSE(Clongdouble,Cdouble,Cfloat,Cinlinelongdouble,Cinlinedouble,Cinlinefloat) Cdouble #include "libm-test.c" diff --git a/math/test-double-vlen2.h b/math/test-double-vlen2.h index 8a1d068..45351cb 100644 --- a/math/test-double-vlen2.h +++ b/math/test-double-vlen2.h @@ -21,7 +21,6 @@ #include "test-math-vector.h" #define TEST_MSG "testing double vector math (without inline functions)\n" -#define CHOOSE(Clongdouble,Cdouble,Cfloat,Cinlinelongdouble,Cinlinedouble,Cinlinefloat) Cdouble #define EXCEPTION_TESTS_double 0 #define ROUNDING_TESTS_double(MODE) ((MODE) == FE_TONEAREST) diff --git a/math/test-double-vlen4.h b/math/test-double-vlen4.h index 40ab58c..7078893 100644 --- a/math/test-double-vlen4.h +++ b/math/test-double-vlen4.h @@ -21,7 +21,6 @@ #include "test-math-vector.h" #define TEST_MSG "testing double vector math (without inline functions)\n" -#define CHOOSE(Clongdouble,Cdouble,Cfloat,Cinlinelongdouble,Cinlinedouble,Cinlinefloat) Cdouble #define EXCEPTION_TESTS_double 0 #define ROUNDING_TESTS_double(MODE) ((MODE) == FE_TONEAREST) diff --git a/math/test-double-vlen8.h b/math/test-double-vlen8.h index dddb52c..57168c5 100644 --- a/math/test-double-vlen8.h +++ b/math/test-double-vlen8.h @@ -21,7 +21,6 @@ #include "test-math-vector.h" #define TEST_MSG "testing double vector math (without inline functions)\n" -#define CHOOSE(Clongdouble,Cdouble,Cfloat,Cinlinelongdouble,Cinlinedouble,Cinlinefloat) Cdouble #define EXCEPTION_TESTS_double 0 #define ROUNDING_TESTS_double(MODE) ((MODE) == FE_TONEAREST) diff --git a/math/test-double.c b/math/test-double.c index 2647f66..3f84f40 100644 --- a/math/test-double.c +++ b/math/test-double.c @@ -23,6 +23,5 @@ #include "test-math-scalar.h" #define TEST_MSG "testing double (without inline functions)\n" -#define CHOOSE(Clongdouble,Cdouble,Cfloat,Cinlinelongdouble,Cinlinedouble,Cinlinefloat) Cdouble #include "libm-test.c" diff --git a/math/test-double.h b/math/test-double.h index 0ece942..06d9c7c 100644 --- a/math/test-double.h +++ b/math/test-double.h @@ -21,7 +21,6 @@ #define PRINTF_EXPR "e" #define PRINTF_XEXPR "a" #define PRINTF_NEXPR "f" -#define TEST_DOUBLE 1 #define BUILD_COMPLEX(real, imag) (CMPLX ((real), (imag))) #define PREFIX DBL #define LIT(x) (x) diff --git a/math/test-float-finite.c b/math/test-float-finite.c index bd25a7b..3f5fe19 100644 --- a/math/test-float-finite.c +++ b/math/test-float-finite.c @@ -21,6 +21,5 @@ #include "test-math-scalar.h" #define TEST_MSG "testing float (finite-math-only)\n" -#define CHOOSE(Clongdouble,Cdouble,Cfloat,Cinlinelongdouble,Cinlinedouble,Cinlinefloat) Cfloat #include "libm-test.c" diff --git a/math/test-float-vlen16.h b/math/test-float-vlen16.h index a2db3a5..d31336a 100644 --- a/math/test-float-vlen16.h +++ b/math/test-float-vlen16.h @@ -21,7 +21,6 @@ #include "test-math-vector.h" #define TEST_MSG "testing float vector math (without inline functions)\n" -#define CHOOSE(Clongdouble,Cdouble,Cfloat,Cinlinelongdouble,Cinlinedouble,Cinlinefloat) Cfloat #define EXCEPTION_TESTS_float 0 #define ROUNDING_TESTS_float(MODE) ((MODE) == FE_TONEAREST) diff --git a/math/test-float-vlen4.h b/math/test-float-vlen4.h index 164749d..5a88fb8 100644 --- a/math/test-float-vlen4.h +++ b/math/test-float-vlen4.h @@ -21,7 +21,6 @@ #include "test-math-vector.h" #define TEST_MSG "testing float vector math (without inline functions)\n" -#define CHOOSE(Clongdouble,Cdouble,Cfloat,Cinlinelongdouble,Cinlinedouble,Cinlinefloat) Cfloat #define EXCEPTION_TESTS_float 0 #define ROUNDING_TESTS_float(MODE) ((MODE) == FE_TONEAREST) diff --git a/math/test-float-vlen8.h b/math/test-float-vlen8.h index ce32df2..d1e5e6e 100644 --- a/math/test-float-vlen8.h +++ b/math/test-float-vlen8.h @@ -21,7 +21,6 @@ #include "test-math-vector.h" #define TEST_MSG "testing float vector math (without inline functions)\n" -#define CHOOSE(Clongdouble,Cdouble,Cfloat,Cinlinelongdouble,Cinlinedouble,Cinlinefloat) Cfloat #define EXCEPTION_TESTS_float 0 #define ROUNDING_TESTS_float(MODE) ((MODE) == FE_TONEAREST) diff --git a/math/test-float.c b/math/test-float.c index 153b9ad..6be57bb 100644 --- a/math/test-float.c +++ b/math/test-float.c @@ -23,6 +23,5 @@ #include "test-math-scalar.h" #define TEST_MSG "testing float (without inline functions)\n" -#define CHOOSE(Clongdouble,Cdouble,Cfloat,Cinlinelongdouble,Cinlinedouble,Cinlinefloat) Cfloat #include "libm-test.c" diff --git a/math/test-float.h b/math/test-float.h index d92612b..c576953 100644 --- a/math/test-float.h +++ b/math/test-float.h @@ -21,7 +21,6 @@ #define PRINTF_EXPR "e" #define PRINTF_XEXPR "a" #define PRINTF_NEXPR "f" -#define TEST_FLOAT 1 #define BUILD_COMPLEX(real, imag) (CMPLXF ((real), (imag))) #define PREFIX FLT #define TSTR "float" diff --git a/math/test-idouble.c b/math/test-idouble.c index fc1e8f8..10a3685 100644 --- a/math/test-idouble.c +++ b/math/test-idouble.c @@ -21,6 +21,5 @@ #include "test-math-scalar.h" #define TEST_MSG "testing double (inline functions)\n" -#define CHOOSE(Clongdouble,Cdouble,Cfloat,Cinlinelongdouble,Cinlinedouble,Cinlinefloat) Cinlinedouble #include "libm-test.c" diff --git a/math/test-ifloat.c b/math/test-ifloat.c index 72c53ad..88bb5b8 100644 --- a/math/test-ifloat.c +++ b/math/test-ifloat.c @@ -21,6 +21,5 @@ #include "test-math-scalar.h" #define TEST_MSG "testing float (inline functions)\n" -#define CHOOSE(Clongdouble,Cdouble,Cfloat,Cinlinelongdouble,Cinlinedouble,Cinlinefloat) Cinlinefloat #include "libm-test.c" diff --git a/math/test-ildoubl.c b/math/test-ildoubl.c index 08317ed..dc0efaa 100644 --- a/math/test-ildoubl.c +++ b/math/test-ildoubl.c @@ -21,6 +21,5 @@ #include "test-math-scalar.h" #define TEST_MSG "testing long double (inline functions)\n" -#define CHOOSE(Clongdouble,Cdouble,Cfloat,Cinlinelongdouble,Cinlinedouble,Cinlinefloat) Cinlinelongdouble #include "libm-test.c" diff --git a/math/test-ldouble-finite.c b/math/test-ldouble-finite.c index 4c09778..8ac2d33 100644 --- a/math/test-ldouble-finite.c +++ b/math/test-ldouble-finite.c @@ -21,6 +21,5 @@ #include "test-math-scalar.h" #define TEST_MSG "testing long double (finite-math-only)\n" -#define CHOOSE(Clongdouble,Cdouble,Cfloat,Cinlinelongdouble,Cinlinedouble,Cinlinefloat) Clongdouble #include "libm-test.c" diff --git a/math/test-ldouble.c b/math/test-ldouble.c index 944f6dd..a705fa4 100644 --- a/math/test-ldouble.c +++ b/math/test-ldouble.c @@ -23,6 +23,5 @@ #include "test-math-scalar.h" #define TEST_MSG "testing long double (without inline functions)\n" -#define CHOOSE(Clongdouble,Cdouble,Cfloat,Cinlinelongdouble,Cinlinedouble,Cinlinefloat) Clongdouble #include "libm-test.c" diff --git a/math/test-ldouble.h b/math/test-ldouble.h index 96a3dac..897f83f 100644 --- a/math/test-ldouble.h +++ b/math/test-ldouble.h @@ -21,7 +21,6 @@ #define PRINTF_EXPR "Le" #define PRINTF_XEXPR "La" #define PRINTF_NEXPR "Lf" -#define TEST_LDOUBLE 1 #define BUILD_COMPLEX(real, imag) (CMPLXL ((real), (imag))) #define PREFIX LDBL #define TSTR "ldouble"