aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog9
-rw-r--r--conform/conformtest.pl56
-rw-r--r--conform/data/math.h-data198
-rw-r--r--math/math.h12
4 files changed, 267 insertions, 8 deletions
diff --git a/ChangeLog b/ChangeLog
index d033645ba0..b3c20b58fe 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,14 @@
2001-01-26 Ulrich Drepper <drepper@redhat.com>
+ * conform/conformtest.pl: Implement optional-macro.
+ * conform/data/math.h-data: Update for XPG6.
+
+ * math/math.h (HUGE): Define as FLT_MAX value but don't use
+ FLT_MAX. Don't include <float.h>.
+ (MAXFLOAT): Likewise.
+
+ * math/math.h: Define MATH_ERRNO and MATH_ERREXCEPT.
+
* include/bits/xopen_lim.h: Don't define FOPEN_MAX here.
* conform/data/limits.h-data: Mark constants as optional wherever
diff --git a/conform/conformtest.pl b/conform/conformtest.pl
index 6aade40c55..cfb23f2602 100644
--- a/conform/conformtest.pl
+++ b/conform/conformtest.pl
@@ -361,7 +361,7 @@ while ($#headers >= 0) {
$res = compiletest ($fnamebase, "Testing for constant $const",
"NOT PRESENT", $res, 1);
- if ($value ne "") {
+ if ($value ne "" && $res == 0) {
# Generate a program to test for the value of this constant.
open (TESTFILE, ">$fnamebase.c");
print TESTFILE "$prepend";
@@ -373,7 +373,7 @@ while ($#headers >= 0) {
$res = runtest ($fnamebase, "Testing for value of constant $const",
"Constant \"$const\" has not the right value.", $res);
}
- } elsif (/^constant *([a-zA-Z0-9_]*) ([>=<]+) ([A-Za-z0-9_]*)/) {
+ } elsif (/^constant *([a-zA-Z0-9_]*) *([>=<]+) ([A-Za-z0-9_]*)/) {
my($const) = $1;
my($op) = $2;
my($value) = $3;
@@ -464,7 +464,7 @@ while ($#headers >= 0) {
$res = compiletest ($fnamebase, "Testing for constant $const",
"NOT PRESENT", $res, 1);
- if ($value ne "") {
+ if ($value ne "" && $res == 0) {
# Generate a program to test for the value of this constant.
open (TESTFILE, ">$fnamebase.c");
print TESTFILE "$prepend";
@@ -726,6 +726,56 @@ while ($#headers >= 0) {
$res = runtest ($fnamebase, "Testing for value of macro $macro",
"Macro \"$macro\" has not the right value.", $res);
+ } elsif (/^optional-macro *([^ ]*)/) {
+ my($macro) = "$1";
+
+ # Remember that this name is allowed.
+ push @allow, $macro;
+
+ # Generate a program to test for availability of this macro.
+ open (TESTFILE, ">$fnamebase.c");
+ print TESTFILE "$prepend";
+ print TESTFILE "#include <$h>\n";
+ print TESTFILE "#ifndef $macro\n";
+ print TESTFILE "# error \"Macro $macro not defined\"\n";
+ print TESTFILE "#endif\n";
+ close (TESTFILE);
+
+ compiletest ($fnamebase, "Test availability of macro $macro",
+ "NOT PRESENT", $missing, 1);
+ } elsif (/^macro *([a-zA-Z0-9_]*) *([>=<]+) ([A-Za-z0-9_]*)/) {
+ my($macro) = "$1";
+ my($op) = $2;
+ my($value) = $3;
+ my($res) = $missing;
+
+ # Remember that this name is allowed.
+ push @allow, $macro;
+
+ # Generate a program to test for availability of this macro.
+ open (TESTFILE, ">$fnamebase.c");
+ print TESTFILE "$prepend";
+ print TESTFILE "#include <$h>\n";
+ print TESTFILE "#ifndef $macro\n";
+ print TESTFILE "# error \"Macro $macro not defined\"\n";
+ print TESTFILE "#endif\n";
+ close (TESTFILE);
+
+ $res = compiletest ($fnamebase, "Test availability of macro $macro",
+ "Macro \"$macro\" is not available.", $res, 0);
+
+ if ($value ne "") {
+ # Generate a program to test for the value of this constant.
+ open (TESTFILE, ">$fnamebase.c");
+ print TESTFILE "$prepend";
+ print TESTFILE "#include <$h>\n";
+ # Negate the value since 0 means ok
+ print TESTFILE "int main (void) { return !($macro $op $value); }\n";
+ close (TESTFILE);
+
+ $res = runtest ($fnamebase, "Testing for value of constant $macro",
+ "Macro \"$macro\" has not the right value.", $res);
+ }
} elsif (/^macro *([^ ]*)/) {
my($macro) = "$1";
diff --git a/conform/data/math.h-data b/conform/data/math.h-data
index c99d22d1a1..eb9a450880 100644
--- a/conform/data/math.h-data
+++ b/conform/data/math.h-data
@@ -1,4 +1,17 @@
#if !defined ISO && !defined POSIX
+macro fpclassify
+macro isfinite
+macro isinf
+macro isnan
+macro isnormal
+macro signbit
+macro isgreater
+macro isgreaterequal
+macro isless
+macro islessequal
+macro islessgreater
+macro isunordered
+
constant M_E
constant M_LOG2E
constant M_LOG10E
@@ -15,6 +28,26 @@ constant M_SQRT1_2
constant MAXFLOAT
constant HUGE_VAL
+constant HUGE_VALF
+constant HUGE_VALL
+constant INFINITY
+constant NAN
+
+macro FP_INFINITE
+macro FP_NAN
+macro FP_NORMAL
+macro FP_SUBNORMAL
+macro FP_ZERO
+
+optional-macro FP_FAST_FMA
+optional-macro FP_FAST_FMAF
+optional-macro FP_FAST_FMAL
+
+constant FP_ILOGB0
+constant FP_ILOGBNAN
+
+macro MATH_ERRNO == 1
+macro MATH_ERREXCEPT == 2
#endif
function double acos (double)
@@ -22,9 +55,11 @@ function double asin (double)
function double atan (double)
function double atan2 (double, double)
function double ceil (double)
+function double copysign (double, double)
function double cos (double)
function double cosh (double)
function double exp (double)
+function double exp2 (double)
function double fabs (double)
function double floor (double)
function double fmod (double, double)
@@ -32,6 +67,7 @@ function double frexp (double, int*)
function double ldexp (double, int)
function double log (double)
function double log10 (double)
+function double log2 (double)
function double modf (double, double*)
function double pow (double, double)
function double sin (double)
@@ -47,6 +83,7 @@ function double j0 (double)
function double j1 (double)
function double jn (int, double)
function double lgamma (double)
+function double tgamma (double)
function double y0 (double)
function double y1 (double)
function double yn (int, double)
@@ -60,21 +97,174 @@ function int ilogb (double)
function double log1p (double)
function double logb (double)
function double nextafter (double, double)
+function double nexttoward (double, long double)
+function double nearbyint (double)
function double remainder (double, double)
function double rint (double)
+function double round (double)
+function double trunc (double)
+function long lrint (double)
+function {long long} llrint (double)
+function long lround (double)
+function {long long} llround (double)
+function double remquo (double, double, int*)
function double scalb (double, double)
+function double scalbn (double, int)
+function double scalbln (double, long)
+function double fdim (double, double)
+function double fmax (double, double)
+function double fmin (double, double)
+function double fma (double, double, double)
+function double nan (const char*)
// variable signgam
allow signgam
+#if !defined ISO && !defined POSIX
+function float acosf (float)
+function float asinf (float)
+function float atanf (float)
+function float atan2f (float, float)
+function float ceilf (float)
+function float copysignf (float, float)
+function float cosf (float)
+function float coshf (float)
+function float expf (float)
+function float exp2f (float)
+function float fabsf (float)
+function float floorf (float)
+function float fmodf (float, float)
+function float frexpf (float, int*)
+function float ldexpf (float, int)
+function float logf (float)
+function float log10f (float)
+function float log2f (float)
+function float modff (float, float*)
+function float powf (float, float)
+function float sinf (float)
+function float sinhf (float)
+function float sqrtf (float)
+function float tanf (float)
+function float tanhf (float)
+function float erff (float)
+function float erfcf (float)
+function float gammaf (float)
+function float hypotf (float, float)
+function float j0f (float)
+function float j1f (float)
+function float jnf (int, float)
+function float lgammaf (float)
+function float tgammaf (float)
+function float y0f (float)
+function float y1f (float)
+function float ynf (int, float)
+function int isnanf (float)
+function float acoshf (float)
+function float asinhf (float)
+function float atanhf (float)
+function float cbrtf (float)
+function float expm1f (float)
+function int ilogbf (float)
+function float log1pf (float)
+function float logbf (float)
+function float nextafterf (float, float)
+function float nexttowardf (float, long double)
+function float nearbyintf (float)
+function float remainderf (float, float)
+function float rintf (float)
+function float roundf (float)
+function float truncf (float)
+function long lrintf (float)
+function {long long} llrintf (float)
+function long lroundf (float)
+function {long long} llroundf (float)
+function float remquof (float, float, int*)
+function float scalbf (float, float)
+function float scalbnf (float, int)
+function float scalblnf (float, long)
+function float fdimf (float, float)
+function float fmaxf (float, float)
+function float fminf (float, float)
+function float fmaf (float, float, float)
+function float nanf (const char*)
+
+function {long double} acosl (long double)
+function {long double} asinl (long double)
+function {long double} atanl (long double)
+function {long double} atan2l (long double, long double)
+function {long double} ceill (long double)
+function {long double} copysignl (long double, long double)
+function {long double} cosl (long double)
+function {long double} coshl (long double)
+function {long double} expl (long double)
+function {long double} exp2l (long double)
+function {long double} fabsl (long double)
+function {long double} floorl (long double)
+function {long double} fmodl (long double, long double)
+function {long double} frexpl (long double, int*)
+function {long double} ldexpl (long double, int)
+function {long double} logl (long double)
+function {long double} log10l (long double)
+function {long double} log2l (long double)
+function {long double} modfl (long double, long double*)
+function {long double} powl (long double, long double)
+function {long double} sinl (long double)
+function {long double} sinhl (long double)
+function {long double} sqrtl (long double)
+function {long double} tanl (long double)
+function {long double} tanhl (long double)
+function {long double} erfl (long double)
+function {long double} erfcl (long double)
+function {long double} gammal (long double)
+function {long double} hypotl (long double, long double)
+function {long double} j0l (long double)
+function {long double} j1l (long double)
+function {long double} jnl (int, long double)
+function {long double} lgammal (long double)
+function {long double} tgammal (long double)
+function {long double} y0l (long double)
+function {long double} y1l (long double)
+function {long double} ynl (int, long double)
+function int isnanl (long double)
+function {long double} acoshl (long double)
+function {long double} asinhl (long double)
+function {long double} atanhl (long double)
+function {long double} cbrtl (long double)
+function {long double} expm1l (long double)
+function int ilogbl (long double)
+function {long double} log1pl (long double)
+function {long double} logbl (long double)
+function {long double} nextafterl (long double, long double)
+function {long double} nexttowardl (long double, long double)
+function {long double} nearbyintl (long double)
+function {long double} remainderl (long double, long double)
+function {long double} rintl (long double)
+function {long double} roundl (long double)
+function {long double} truncl (long double)
+function long lrintl (long double)
+function {long long} llrintl (long double)
+function long lroundl (long double)
+function {long long} llroundl (long double)
+function {long double} remquol (long double, long double, int*)
+function {long double} scalbl (long double, long double)
+function {long double} scalbnl (long double, int)
+function {long double} scalblnl (long double, long)
+function {long double} fdiml (long double, long double)
+function {long double} fmaxl (long double, long double)
+function {long double} fminl (long double, long double)
+function {long double} fmal (long double, long double, long double)
+function {long double} nanl (const char*)
+#else
allow acosf
allow asinf
allow atanf
allow atan2f
allow ceilf
+allow copysignf
allow cosf
allow coshf
allow expf
+allow exp2f
allow fabsf
allow floorf
allow fmodf
@@ -82,6 +272,7 @@ allow frexpf
allow ldexpf
allow logf
allow log10f
+allow log2f
allow powf
allow sinf
allow sinhf
@@ -96,6 +287,7 @@ allow j0f
allow j1f
allow jnf
allow lgammaf
+allow tgammaf
allow y0f
allow y1f
allow ynf
@@ -118,9 +310,11 @@ allow asinl
allow atanl
allow atan2l
allow ceill
+allow copysignl
allow cosl
allow coshl
allow expl
+allow exp2l
allow fabsl
allow floorl
allow fmodl
@@ -128,6 +322,7 @@ allow frexpl
allow ldexpl
allow logl
allow log10l
+allow log2l
allow powl
allow sinl
allow sinhl
@@ -142,6 +337,7 @@ allow j0l
allow j1l
allow jnl
allow lgammal
+allow tgammal
allow y0l
allow y1l
allow ynl
@@ -158,5 +354,7 @@ allow nextafterl
allow remainderl
allow rintl
allow scalbl
+#endif
allow *_t
+allow FP_*
diff --git a/math/math.h b/math/math.h
index c601c432f0..ebd601a93b 100644
--- a/math/math.h
+++ b/math/math.h
@@ -1,5 +1,5 @@
/* Declarations for math functions.
- Copyright (C) 1991,92,93,95,96,97,98,99 Free Software Foundation, Inc.
+ Copyright (C) 1991,92,93,95,96,97,98,99,2001 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -229,6 +229,10 @@ enum
? __isinf (x) : __isinfl (x))
# endif
+/* Bitmasks for the math_errhandling macro. */
+# define MATH_ERRNO 1 /* errno set by math functions. */
+# define MATH_ERREXCEPT 2 /* Exceptions raised by math functions. */
+
#endif /* Use ISO C99. */
#ifdef __USE_MISC
@@ -285,15 +289,13 @@ extern int matherr (struct exception *__exc);
# define PLOSS 6
/* SVID mode specifies returning this large value instead of infinity. */
-# define HUGE FLT_MAX
-# include <float.h> /* Defines FLT_MAX. */
+# define HUGE 3.40282347e+38F
#else /* !SVID */
# ifdef __USE_XOPEN
/* X/Open wants another strange constant. */
-# define MAXFLOAT FLT_MAX
-# include <float.h>
+# define MAXFLOAT 3.40282347e+38F
# endif
#endif /* SVID */