mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-23 17:53:37 +08:00
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.
This commit is contained in:
parent
95b2e07faf
commit
2b7dc4c868
@ -1,5 +1,14 @@
|
||||
2017-02-06 Joseph Myers <joseph@codesourcery.com>
|
||||
|
||||
* 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.
|
||||
|
||||
* math/Makefile (before-compile): Remove.
|
||||
|
||||
2017-02-06 Ivo Raisr <ivo.raisr@oracle.com>
|
||||
|
@ -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) {
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user