mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-10 07:10:06 +00:00
Remove libm-test support for TEST_* inside functions.
This commit is contained in:
parent
e054f49430
commit
323e5cb792
25
ChangeLog
25
ChangeLog
@ -1,3 +1,28 @@
|
|||||||
|
2013-05-16 Joseph Myers <joseph@codesourcery.com>
|
||||||
|
|
||||||
|
* math/gen-libm-test.pl (adjust_arg): Remove function.
|
||||||
|
(special_function): Remove argument $in_func. Only handle
|
||||||
|
generating output for tables of tests, not inside functions.
|
||||||
|
(parse_args): Likewise.
|
||||||
|
(generate_testfile): Remove variable $in_func. Update call to
|
||||||
|
parse_args.
|
||||||
|
* math/libm-test.inc (PLUS_ZERO_INIT): Rename macro to plus_zero.
|
||||||
|
(MINUS_ZERO_INIT): Rename macro to minus_zero.
|
||||||
|
(PLUS_INFTY_INIT): Rename macro to plus_infty.
|
||||||
|
(MINUS_INFTY_INIT): Rename macro to minus_infty.
|
||||||
|
(QNAN_VALUE_INIT): Rename macro to qnan_value.
|
||||||
|
(MAX_VALUE_INIT): Rename macro to max_value.
|
||||||
|
(MIN_VALUE_INIT): Rename macro to min_value.
|
||||||
|
(MIN_SUBNORM_VALUE_INIT): Rename macro to min_subnorm_value.
|
||||||
|
(plus_zero): Remove variable.
|
||||||
|
(minus_zero): Likewise.
|
||||||
|
(plus_infty): Likewise.
|
||||||
|
(minus_infty): Likewise.
|
||||||
|
(qnan_value): Likewise.
|
||||||
|
(max_value): Likewise.
|
||||||
|
(min_value): Likewise.
|
||||||
|
(min_subnorm_value): Likewise.
|
||||||
|
|
||||||
2013-05-16 Ryan S. Arnold <rsa@linux.vnet.ibm.com>
|
2013-05-16 Ryan S. Arnold <rsa@linux.vnet.ibm.com>
|
||||||
|
|
||||||
* crypt/sha512-block.c: Add missing #include <stdint.h> due to
|
* crypt/sha512-block.c: Add missing #include <stdint.h> due to
|
||||||
|
@ -185,21 +185,10 @@ sub new_test {
|
|||||||
return $rest;
|
return $rest;
|
||||||
}
|
}
|
||||||
|
|
||||||
# Adjust an argument or expected value for use in a constant
|
|
||||||
# initializer.
|
|
||||||
sub adjust_arg {
|
|
||||||
my ($arg, $in_func) = @_;
|
|
||||||
if (!$in_func) {
|
|
||||||
$arg =~ s/(plus_zero|minus_zero|plus_infty|minus_infty|qnan_value
|
|
||||||
|max_value|min_value|min_subnorm_value)/\U$1\E_INIT/xg;
|
|
||||||
}
|
|
||||||
return $arg;
|
|
||||||
}
|
|
||||||
|
|
||||||
# Treat some functions especially.
|
# Treat some functions especially.
|
||||||
# Currently only sincos needs extra treatment.
|
# Currently only sincos needs extra treatment.
|
||||||
sub special_functions {
|
sub special_functions {
|
||||||
my ($file, $in_func, $args) = @_;
|
my ($file, $args) = @_;
|
||||||
my (@args, $str, $test, $cline);
|
my (@args, $str, $test, $cline);
|
||||||
|
|
||||||
@args = split /,\s*/, $args;
|
@args = split /,\s*/, $args;
|
||||||
@ -207,43 +196,33 @@ sub special_functions {
|
|||||||
unless ($args[0] =~ /sincos/) {
|
unless ($args[0] =~ /sincos/) {
|
||||||
die ("Don't know how to handle $args[0] extra.");
|
die ("Don't know how to handle $args[0] extra.");
|
||||||
}
|
}
|
||||||
if ($in_func) {
|
$cline = " { $args[1]";
|
||||||
$cline = " RUN_TEST_sincos (" . adjust_arg ($args[1], $in_func);
|
|
||||||
} else {
|
|
||||||
$cline = " { " . adjust_arg ($args[1], $in_func);
|
|
||||||
}
|
|
||||||
|
|
||||||
$str = 'sincos (' . &beautify ($args[1]) . ', &sin_res, &cos_res)';
|
$str = 'sincos (' . &beautify ($args[1]) . ', &sin_res, &cos_res)';
|
||||||
# handle sin
|
# handle sin
|
||||||
$test = $str . ' puts ' . &beautify ($args[2]) . ' in sin_res';
|
$test = $str . ' puts ' . &beautify ($args[2]) . ' in sin_res';
|
||||||
|
|
||||||
my ($sin_res_var) = ($in_func ? ", sin_res" : "");
|
$cline .= ", \"$test\", $args[2]";
|
||||||
$cline .= ", \"$test\"$sin_res_var, " . adjust_arg ($args[2], $in_func);
|
|
||||||
$cline .= &new_test ($test, $args[4], 0);
|
$cline .= &new_test ($test, $args[4], 0);
|
||||||
|
|
||||||
# handle cos
|
# handle cos
|
||||||
$test = $str . ' puts ' . &beautify ($args[3]) . ' in cos_res';
|
$test = $str . ' puts ' . &beautify ($args[3]) . ' in cos_res';
|
||||||
my ($cos_res_var) = ($in_func ? ", cos_res" : "");
|
$cline .= ", \"$test\", $args[3]";
|
||||||
$cline .= ", \"$test\"$cos_res_var, " . adjust_arg ($args[3], $in_func);
|
|
||||||
$cline .= &new_test ($test, $args[4], 1);
|
$cline .= &new_test ($test, $args[4], 1);
|
||||||
if ($in_func) {
|
$cline .= " },\n";
|
||||||
$cline .= ");\n";
|
|
||||||
} else {
|
|
||||||
$cline .= " },\n";
|
|
||||||
}
|
|
||||||
print $file $cline;
|
print $file $cline;
|
||||||
}
|
}
|
||||||
|
|
||||||
# Parse the arguments to TEST_x_y
|
# Parse the arguments to TEST_x_y
|
||||||
sub parse_args {
|
sub parse_args {
|
||||||
my ($file, $descr, $fct, $in_func, $args) = @_;
|
my ($file, $descr, $fct, $args) = @_;
|
||||||
my (@args, $str, $descr_args, $descr_res, @descr);
|
my (@args, $str, $descr_args, $descr_res, @descr);
|
||||||
my ($current_arg, $cline, $i);
|
my ($current_arg, $cline, $i);
|
||||||
my (@special);
|
my (@special);
|
||||||
my ($extra_var, $call);
|
my ($extra_var, $call);
|
||||||
|
|
||||||
if ($descr eq 'extra') {
|
if ($descr eq 'extra') {
|
||||||
&special_functions ($file, $in_func, $args);
|
&special_functions ($file, $args);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
($descr_args, $descr_res) = split /_/,$descr, 2;
|
($descr_args, $descr_res) = split /_/,$descr, 2;
|
||||||
@ -318,29 +297,12 @@ sub parse_args {
|
|||||||
# Reset some variables to start again
|
# Reset some variables to start again
|
||||||
$current_arg = 1;
|
$current_arg = 1;
|
||||||
$extra_var = 0;
|
$extra_var = 0;
|
||||||
if ($in_func) {
|
$cline = "{ \"$str\"";
|
||||||
$cline = "RUN_TEST_$descr";
|
|
||||||
} else {
|
|
||||||
$cline = "{ ";
|
|
||||||
}
|
|
||||||
# Special handling for some macros:
|
|
||||||
if ($in_func && $args[0] =~ /fpclassify|isnormal|isfinite|isinf|isnan
|
|
||||||
|issignaling|signbit|isgreater|isgreaterequal|isless|islessequal
|
|
||||||
|islessgreater|isunordered/x) {
|
|
||||||
$cline = "${cline}_tg";
|
|
||||||
}
|
|
||||||
if ($in_func) {
|
|
||||||
$cline .= " (";
|
|
||||||
}
|
|
||||||
$cline .= "\"$str\"";
|
|
||||||
if ($in_func) {
|
|
||||||
$cline .= ", $args[0]";
|
|
||||||
}
|
|
||||||
@descr = split //,$descr_args;
|
@descr = split //,$descr_args;
|
||||||
for ($i=0; $i <= $#descr; $i++) {
|
for ($i=0; $i <= $#descr; $i++) {
|
||||||
# FLOAT, int, long int, long long int
|
# FLOAT, int, long int, long long int
|
||||||
if ($descr[$i] =~ /f|i|l|L/) {
|
if ($descr[$i] =~ /f|i|l|L/) {
|
||||||
$cline .= ", " . adjust_arg ($args[$current_arg], $in_func);
|
$cline .= ", $args[$current_arg]";
|
||||||
$current_arg++;
|
$current_arg++;
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
@ -350,8 +312,7 @@ sub parse_args {
|
|||||||
}
|
}
|
||||||
# complex
|
# complex
|
||||||
if ($descr[$i] eq 'c') {
|
if ($descr[$i] eq 'c') {
|
||||||
$cline .= ", " . adjust_arg ($args[$current_arg], $in_func);
|
$cline .= ", $args[$current_arg], $args[$current_arg+1]";
|
||||||
$cline .= ", " . adjust_arg ($args[$current_arg+1], $in_func);
|
|
||||||
$current_arg += 2;
|
$current_arg += 2;
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
@ -361,11 +322,10 @@ sub parse_args {
|
|||||||
@descr = split //,$descr_res;
|
@descr = split //,$descr_res;
|
||||||
foreach (@descr) {
|
foreach (@descr) {
|
||||||
if ($_ =~ /b|f|i|l|L/ ) {
|
if ($_ =~ /b|f|i|l|L/ ) {
|
||||||
$cline .= adjust_arg ($args[$current_arg], $in_func);
|
$cline .= $args[$current_arg];
|
||||||
$current_arg++;
|
$current_arg++;
|
||||||
} elsif ($_ eq 'c') {
|
} elsif ($_ eq 'c') {
|
||||||
$cline .= adjust_arg ($args[$current_arg], $in_func);
|
$cline .= "$args[$current_arg], $args[$current_arg+1]";
|
||||||
$cline .= ", " . adjust_arg ($args[$current_arg+1], $in_func);
|
|
||||||
$current_arg += 2;
|
$current_arg += 2;
|
||||||
} elsif ($_ eq '1') {
|
} elsif ($_ eq '1') {
|
||||||
push @special, $args[$current_arg];
|
push @special, $args[$current_arg];
|
||||||
@ -381,12 +341,11 @@ sub parse_args {
|
|||||||
my ($extra_expected) = $special[0];
|
my ($extra_expected) = $special[0];
|
||||||
my ($run_extra) = ($extra_expected ne "IGNORE" ? 1 : 0);
|
my ($run_extra) = ($extra_expected ne "IGNORE" ? 1 : 0);
|
||||||
my ($str) = "$call sets x to $extra_expected";
|
my ($str) = "$call sets x to $extra_expected";
|
||||||
my ($out_var) = ($in_func ? ", x" : "");
|
|
||||||
if (!$run_extra) {
|
if (!$run_extra) {
|
||||||
$str = "";
|
$str = "";
|
||||||
$extra_expected = "0";
|
$extra_expected = "0";
|
||||||
}
|
}
|
||||||
$cline .= ", \"$str\"$out_var, 123456789, $run_extra, $extra_expected";
|
$cline .= ", \"$str\", 123456789, $run_extra, $extra_expected";
|
||||||
if ($run_extra) {
|
if ($run_extra) {
|
||||||
$cline .= &new_test ($str, undef, 0);
|
$cline .= &new_test ($str, undef, 0);
|
||||||
} else {
|
} else {
|
||||||
@ -398,12 +357,11 @@ sub parse_args {
|
|||||||
my ($extra_expected) = $special[0];
|
my ($extra_expected) = $special[0];
|
||||||
my ($run_extra) = ($extra_expected ne "IGNORE" ? 1 : 0);
|
my ($run_extra) = ($extra_expected ne "IGNORE" ? 1 : 0);
|
||||||
my ($str) = "$call sets signgam to $extra_expected";
|
my ($str) = "$call sets signgam to $extra_expected";
|
||||||
my ($out_var) = ($in_func ? ", signgam" : "");
|
|
||||||
if (!$run_extra) {
|
if (!$run_extra) {
|
||||||
$str = "";
|
$str = "";
|
||||||
$extra_expected = "0";
|
$extra_expected = "0";
|
||||||
}
|
}
|
||||||
$cline .= ", \"$str\"$out_var, 0, $run_extra, $extra_expected";
|
$cline .= ", \"$str\", 0, $run_extra, $extra_expected";
|
||||||
if ($run_extra) {
|
if ($run_extra) {
|
||||||
$cline .= &new_test ($str, undef, 0);
|
$cline .= &new_test ($str, undef, 0);
|
||||||
} else {
|
} else {
|
||||||
@ -415,13 +373,11 @@ sub parse_args {
|
|||||||
my ($extra_expected) = $special[0];
|
my ($extra_expected) = $special[0];
|
||||||
my ($run_extra) = ($extra_expected ne "IGNORE" ? 1 : 0);
|
my ($run_extra) = ($extra_expected ne "IGNORE" ? 1 : 0);
|
||||||
my ($str) = "$call sets x to $extra_expected";
|
my ($str) = "$call sets x to $extra_expected";
|
||||||
my ($out_var) = ($in_func ? ", x" : "");
|
|
||||||
if (!$run_extra) {
|
if (!$run_extra) {
|
||||||
$str = "";
|
$str = "";
|
||||||
$extra_expected = "0";
|
$extra_expected = "0";
|
||||||
}
|
}
|
||||||
$extra_expected = adjust_arg ($extra_expected, $in_func);
|
$cline .= ", \"$str\", 123.456789, $run_extra, $extra_expected";
|
||||||
$cline .= ", \"$str\"$out_var, 123.456789, $run_extra, $extra_expected";
|
|
||||||
if ($run_extra) {
|
if ($run_extra) {
|
||||||
$cline .= &new_test ($str, undef, 0);
|
$cline .= &new_test ($str, undef, 0);
|
||||||
} else {
|
} else {
|
||||||
@ -433,12 +389,11 @@ sub parse_args {
|
|||||||
my ($extra_expected) = $special[0];
|
my ($extra_expected) = $special[0];
|
||||||
my ($run_extra) = ($extra_expected ne "IGNORE" ? 1 : 0);
|
my ($run_extra) = ($extra_expected ne "IGNORE" ? 1 : 0);
|
||||||
my ($str) = "$call sets x to $extra_expected";
|
my ($str) = "$call sets x to $extra_expected";
|
||||||
my ($out_var) = ($in_func ? ", x" : "");
|
|
||||||
if (!$run_extra) {
|
if (!$run_extra) {
|
||||||
$str = "";
|
$str = "";
|
||||||
$extra_expected = "0";
|
$extra_expected = "0";
|
||||||
}
|
}
|
||||||
$cline .= ", \"$str\"$out_var, 123456789, $run_extra, $extra_expected";
|
$cline .= ", \"$str\", 123456789, $run_extra, $extra_expected";
|
||||||
if ($run_extra) {
|
if ($run_extra) {
|
||||||
$cline .= &new_test ($str, undef, 0);
|
$cline .= &new_test ($str, undef, 0);
|
||||||
} else {
|
} else {
|
||||||
@ -446,24 +401,19 @@ sub parse_args {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ($in_func) {
|
print $file " $cline },\n";
|
||||||
print $file " $cline);\n";
|
|
||||||
} else {
|
|
||||||
print $file " $cline },\n";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Generate libm-test.c
|
# Generate libm-test.c
|
||||||
sub generate_testfile {
|
sub generate_testfile {
|
||||||
my ($input, $output) = @_;
|
my ($input, $output) = @_;
|
||||||
my ($lasttext);
|
my ($lasttext);
|
||||||
my (@args, $i, $str, $thisfct, $in_func);
|
my (@args, $i, $str, $thisfct);
|
||||||
|
|
||||||
open INPUT, $input or die ("Can't open $input: $!");
|
open INPUT, $input or die ("Can't open $input: $!");
|
||||||
open OUTPUT, ">$output" or die ("Can't open $output: $!");
|
open OUTPUT, ">$output" or die ("Can't open $output: $!");
|
||||||
|
|
||||||
# Replace the special macros
|
# Replace the special macros
|
||||||
$in_func = 0;
|
|
||||||
while (<INPUT>) {
|
while (<INPUT>) {
|
||||||
|
|
||||||
# TEST_...
|
# TEST_...
|
||||||
@ -471,19 +421,17 @@ sub generate_testfile {
|
|||||||
my ($descr, $args);
|
my ($descr, $args);
|
||||||
chop;
|
chop;
|
||||||
($descr, $args) = ($_ =~ /TEST_(\w+)\s*\((.*)\)/);
|
($descr, $args) = ($_ =~ /TEST_(\w+)\s*\((.*)\)/);
|
||||||
&parse_args (\*OUTPUT, $descr, $thisfct, $in_func, $args);
|
&parse_args (\*OUTPUT, $descr, $thisfct, $args);
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
# START_DATA (function)
|
# START_DATA (function)
|
||||||
if (/START_DATA/) {
|
if (/START_DATA/) {
|
||||||
($thisfct) = ($_ =~ /START_DATA\s*\((.*)\)/);
|
($thisfct) = ($_ =~ /START_DATA\s*\((.*)\)/);
|
||||||
$in_func = 0;
|
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
# START (function)
|
# START (function)
|
||||||
if (/START/) {
|
if (/START/) {
|
||||||
($thisfct) = ($_ =~ /START\s*\((.*)\)/);
|
($thisfct) = ($_ =~ /START\s*\((.*)\)/);
|
||||||
$in_func = 1;
|
|
||||||
print OUTPUT " init_max_error ();\n";
|
print OUTPUT " init_max_error ();\n";
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
@ -494,7 +442,6 @@ sub generate_testfile {
|
|||||||
# END (function)
|
# END (function)
|
||||||
if (/END/) {
|
if (/END/) {
|
||||||
my ($fct, $line, $type);
|
my ($fct, $line, $type);
|
||||||
$in_func = 0;
|
|
||||||
if (/complex/) {
|
if (/complex/) {
|
||||||
s/,\s*complex\s*//;
|
s/,\s*complex\s*//;
|
||||||
$type = 'complex';
|
$type = 'complex';
|
||||||
|
@ -229,35 +229,26 @@ static int output_max_error; /* Should the maximal errors printed? */
|
|||||||
static int output_points; /* Should the single function results printed? */
|
static int output_points; /* Should the single function results printed? */
|
||||||
static int ignore_max_ulp; /* Should we ignore max_ulp? */
|
static int ignore_max_ulp; /* Should we ignore max_ulp? */
|
||||||
|
|
||||||
#define PLUS_ZERO_INIT CHOOSE (0.0L, 0.0, 0.0f, \
|
#define plus_zero CHOOSE (0.0L, 0.0, 0.0f, \
|
||||||
0.0L, 0.0, 0.0f)
|
0.0L, 0.0, 0.0f)
|
||||||
#define MINUS_ZERO_INIT CHOOSE (-0.0L, -0.0, -0.0f, \
|
#define minus_zero CHOOSE (-0.0L, -0.0, -0.0f, \
|
||||||
-0.0L, -0.0, -0.0f)
|
-0.0L, -0.0, -0.0f)
|
||||||
#define PLUS_INFTY_INIT CHOOSE (HUGE_VALL, HUGE_VAL, HUGE_VALF, \
|
#define plus_infty CHOOSE (HUGE_VALL, HUGE_VAL, HUGE_VALF, \
|
||||||
HUGE_VALL, HUGE_VAL, HUGE_VALF)
|
HUGE_VALL, HUGE_VAL, HUGE_VALF)
|
||||||
#define MINUS_INFTY_INIT CHOOSE (-HUGE_VALL, -HUGE_VAL, -HUGE_VALF, \
|
#define minus_infty CHOOSE (-HUGE_VALL, -HUGE_VAL, -HUGE_VALF, \
|
||||||
-HUGE_VALL, -HUGE_VAL, -HUGE_VALF)
|
-HUGE_VALL, -HUGE_VAL, -HUGE_VALF)
|
||||||
#define QNAN_VALUE_INIT FUNC (__builtin_nan) ("")
|
#define qnan_value FUNC (__builtin_nan) ("")
|
||||||
#define MAX_VALUE_INIT CHOOSE (LDBL_MAX, DBL_MAX, FLT_MAX, \
|
#define max_value CHOOSE (LDBL_MAX, DBL_MAX, FLT_MAX, \
|
||||||
LDBL_MAX, DBL_MAX, FLT_MAX)
|
LDBL_MAX, DBL_MAX, FLT_MAX)
|
||||||
#define MIN_VALUE_INIT CHOOSE (LDBL_MIN, DBL_MIN, FLT_MIN, \
|
#define min_value CHOOSE (LDBL_MIN, DBL_MIN, FLT_MIN, \
|
||||||
LDBL_MIN, DBL_MIN, FLT_MIN)
|
LDBL_MIN, DBL_MIN, FLT_MIN)
|
||||||
#define MIN_SUBNORM_VALUE_INIT CHOOSE (__LDBL_DENORM_MIN__, \
|
#define min_subnorm_value CHOOSE (__LDBL_DENORM_MIN__, \
|
||||||
__DBL_DENORM_MIN__, \
|
__DBL_DENORM_MIN__, \
|
||||||
__FLT_DENORM_MIN__, \
|
__FLT_DENORM_MIN__, \
|
||||||
__LDBL_DENORM_MIN__, \
|
__LDBL_DENORM_MIN__, \
|
||||||
__DBL_DENORM_MIN__, \
|
__DBL_DENORM_MIN__, \
|
||||||
__FLT_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;
|
static FLOAT max_error, real_max_error, imag_max_error;
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user