about summary refs log tree commit diff
path: root/manual/libm-err-tab.pl
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2017-02-06 17:55:59 +0000
committerJoseph Myers <joseph@codesourcery.com>2017-02-06 17:55:59 +0000
commit2b7dc4c868553db14f439ee4b49873f6ca3ef71f (patch)
tree60fe632bd22b5b5927421c6dea2a08ed6659cce0 /manual/libm-err-tab.pl
parent95b2e07fafddc57d818dd408e5ab1e0eb26cd9f1 (diff)
downloadglibc-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-xmanual/libm-err-tab.pl38
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) {