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 | |
parent | 95b2e07fafddc57d818dd408e5ab1e0eb26cd9f1 (diff) | |
download | glibc-2b7dc4c868553db14f439ee4b49873f6ca3ef71f.tar.gz |
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')
-rwxr-xr-x | manual/libm-err-tab.pl | 38 | ||||
-rw-r--r-- | manual/math.texi | 4 |
2 files changed, 16 insertions, 26 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) { diff --git a/manual/math.texi b/manual/math.texi index 9b699f1def..69a0acec9b 100644 --- a/manual/math.texi +++ b/manual/math.texi @@ -1417,7 +1417,9 @@ figure) but this is often not achieved due to the large search space. The table lists the ULP values for different architectures. Different architectures have different results since their hardware support for floating-point operations varies and also the existing hardware support -is different. +is different. Only the round-to-nearest rounding mode is covered by +this table, and vector versions of functions are not covered. +Functions not listed do not have known errors. @page @c This multitable does not fit on a single page |