diff options
author | Joseph Myers <joseph@codesourcery.com> | 2017-02-06 17:55:59 +0000 |
---|---|---|
committer | Joseph Myers <joseph@codesourcery.com> | 2017-02-06 17:55:59 +0000 |
commit | 2b7dc4c868553db14f439ee4b49873f6ca3ef71f (patch) | |
tree | 60fe632bd22b5b5927421c6dea2a08ed6659cce0 /manual/libm-err-tab.pl | |
parent | 95b2e07fafddc57d818dd408e5ab1e0eb26cd9f1 (diff) | |
download | glibc-2b7dc4c868553db14f439ee4b49873f6ca3ef71f.tar.gz glibc-2b7dc4c868553db14f439ee4b49873f6ca3ef71f.tar.xz glibc-2b7dc4c868553db14f439ee4b49873f6ca3ef71f.zip |
Do not hardcode list of libm functions in libm-err-tab.pl.
manual/libm-err-tab.pl contains a hardcoded list of libm functions for which ulps are listed in the manual, and another hardcoded list in a comment of functions deliberately excluded because of an expected lack of ulps (and the two together are not in fact an exhaustive list of libm functions tested through the libm-test machinery). This patch removes these hardcoded lists, so eliminating this from the places needing updating when a new libm function is added. Instead, ulps are tabulated for functions for which they are seen in libm-test-ulps files, in alphabetical order. The pseudo-function names such as *_downward and *_vlen* are excluded since they are excluded from the existing lists, and the description in the manual is updated to explain how those entries are excluded and if a function is not listed at all it does not have known errors. Tested for x86_64. * manual/libm-err-tab.pl (@all_functions): Change to %all_functions. Initialize as empty. (parse_ulps): Add to %all_functions based on functions found in ulps files. Ignore results for non-default rounding modes and vector functions. (print_platforms): Use %all_platforms. * manual/math.texi (Errors in Math Functions): Document omissions from the table.
Diffstat (limited to 'manual/libm-err-tab.pl')
-rwxr-xr-x | manual/libm-err-tab.pl | 38 |
1 files changed, 13 insertions, 25 deletions
diff --git a/manual/libm-err-tab.pl b/manual/libm-err-tab.pl index d902830ff1..75f5e5b7b7 100755 --- a/manual/libm-err-tab.pl +++ b/manual/libm-err-tab.pl @@ -35,7 +35,7 @@ use File::Find; use strict; use vars qw ($sources @platforms %pplatforms); -use vars qw (%results @all_floats %suffices @all_functions); +use vars qw (%results @all_floats %suffices %all_functions); # all_floats is in output order and contains all recognised float types that @@ -50,27 +50,7 @@ use vars qw (%results @all_floats %suffices @all_functions); # Pretty description of platform %pplatforms = (); -@all_functions = - ( "acos", "acosh", "asin", "asinh", "atan", "atanh", - "atan2", "cabs", "cacos", "cacosh", "carg", "casin", "casinh", - "catan", "catanh", "cbrt", "ccos", "ccosh", "ceil", "cexp", "cimag", - "clog", "clog10", "conj", "copysign", "cos", "cosh", "cpow", "cproj", - "creal", "csin", "csinh", "csqrt", "ctan", "ctanh", "erf", "erfc", - "exp", "exp10", "exp2", "expm1", "fabs", "fdim", "floor", "fma", - "fmax", "fmaxmag", "fmin", "fminmag", "fmod", "frexp", "fromfp", "fromfpx", - "gamma", "hypot", - "ilogb", "j0", "j1", "jn", "lgamma", "llogb", "lrint", - "llrint", "log", "log10", "log1p", "log2", "logb", "lround", - "llround", "modf", "nearbyint", "nextafter", "nextdown", "nexttoward", - "nextup", "pow", "remainder", "remquo", "rint", "round", "roundeven", - "scalb", "scalbn", "sin", "sincos", "sinh", "sqrt", "tan", "tanh", - "tgamma", "trunc", "ufromfp", "ufromfpx", "y0", "y1", "yn" ); -# canonicalize, fpclassify, getpayload, iscanonical, isnormal, -# isfinite, isinf, isnan, issignaling, issubnormal, iszero, signbit, -# iseqsig, isgreater, isgreaterequal, isless, islessequal, -# islessgreater, isunordered, setpayload, setpayloadsig, -# totalorder, totalordermag -# are not tabulated. +%all_functions = (); if ($#ARGV == 0) { $sources = $ARGV[0]; @@ -102,7 +82,7 @@ sub find_files { # Parse ulps file sub parse_ulps { my ($file, $platform) = @_; - my ($test, $type, $float, $eps); + my ($test, $type, $float, $eps, $ignore_fn); # $type has the following values: # "normal": No complex variable @@ -127,9 +107,17 @@ sub parse_ulps { ($test) = ($_ =~ /^Function:\s*\"([a-zA-Z0-9_]+)\"/); next; } + if ($test =~ /_(downward|towardzero|upward|vlen)/) { + $ignore_fn = 1; + } else { + $ignore_fn = 0; + $all_functions{$test} = 1; + } if (/^i?(float|double|ldouble):/) { ($float, $eps) = split /\s*:\s*/,$_,2; - if ($eps eq 'fail') { + if ($ignore_fn) { + next; + } elsif ($eps eq 'fail') { $results{$test}{$platform}{$type}{$float} = 'fail'; } elsif ($eps eq "0") { # ignore @@ -175,7 +163,7 @@ sub print_platforms { print "\n"; - foreach $fct (@all_functions) { + foreach $fct (sort keys %all_functions) { foreach $float (@all_floats) { print "\@item $fct$suffices{$float} "; foreach $platform (@p) { |