Browse Source

- fix fpclassify, signbit, isfinite, isnan, isinf macros for long double math support
- add rule to create preprocessor output for float- and long double math wrapper

Bernhard Reutner-Fischer 15 years ago
parent
commit
a0ebeb988d

+ 6 - 0
Makerules

@@ -80,6 +80,7 @@ pur_disp_compile.s = echo "  "CC-S $(show_objs)
 pur_disp_compile.u = echo "  "CC $(show_objs)
 pur_disp_compile.u = echo "  "CC $(show_objs)
 pur_disp_compile.S = echo "  "AS $(show_objs)
 pur_disp_compile.S = echo "  "AS $(show_objs)
 pur_disp_compile.m = $(pur_disp_compile.c)
 pur_disp_compile.m = $(pur_disp_compile.c)
+pur_disp_compile.mi= echo "  "CPP-m $(show_objs)
 pur_disp_compile-m = echo "  "CC-m $(show_objs)
 pur_disp_compile-m = echo "  "CC-m $(show_objs)
 pur_disp_hcompile.u= echo "  "HOSTCC $(show_objs)
 pur_disp_hcompile.u= echo "  "HOSTCC $(show_objs)
 pur_disp_hcompile.o= echo "  "HOSTCC-o $(show_objs)
 pur_disp_hcompile.o= echo "  "HOSTCC-o $(show_objs)
@@ -99,6 +100,7 @@ sil_disp_compile.s = true
 sil_disp_compile.u = true
 sil_disp_compile.u = true
 sil_disp_compile.S = true
 sil_disp_compile.S = true
 sil_disp_compile.m = true
 sil_disp_compile.m = true
+sil_disp_compile.mi= true
 sil_disp_compile-m = true
 sil_disp_compile-m = true
 sil_disp_hcompile.u= true
 sil_disp_hcompile.u= true
 sil_disp_hcompile.o= true
 sil_disp_hcompile.o= true
@@ -118,6 +120,7 @@ ver_disp_compile.s = echo $(cmd_compile.s)
 ver_disp_compile.u = echo $(cmd_compile.u)
 ver_disp_compile.u = echo $(cmd_compile.u)
 ver_disp_compile.S = echo $(cmd_compile.S)
 ver_disp_compile.S = echo $(cmd_compile.S)
 ver_disp_compile.m = echo $(cmd_compile.m)
 ver_disp_compile.m = echo $(cmd_compile.m)
+ver_disp_compile.mi= echo $(cmd_compile.mi)
 ver_disp_compile-m = echo $(cmd_compile-m)
 ver_disp_compile-m = echo $(cmd_compile-m)
 ver_disp_hcompile.u= echo $(cmd_hcompile.u)
 ver_disp_hcompile.u= echo $(cmd_hcompile.u)
 ver_disp_hcompile.o= echo $(cmd_hcompile.o)
 ver_disp_hcompile.o= echo $(cmd_hcompile.o)
@@ -137,6 +140,7 @@ disp_compile.s = $($(DISP)_disp_compile.s)
 disp_compile.u = $($(DISP)_disp_compile.u)
 disp_compile.u = $($(DISP)_disp_compile.u)
 disp_compile.S = $($(DISP)_disp_compile.S)
 disp_compile.S = $($(DISP)_disp_compile.S)
 disp_compile.m = $($(DISP)_disp_compile.m)
 disp_compile.m = $($(DISP)_disp_compile.m)
+disp_compile.mi= $($(DISP)_disp_compile.mi)
 disp_compile-m = $($(DISP)_disp_compile-m)
 disp_compile-m = $($(DISP)_disp_compile-m)
 disp_hcompile.u= $($(DISP)_disp_hcompile.u)
 disp_hcompile.u= $($(DISP)_disp_hcompile.u)
 disp_hcompile.o= $($(DISP)_disp_hcompile.o)
 disp_hcompile.o= $($(DISP)_disp_hcompile.o)
@@ -189,6 +193,7 @@ cmd_compile.s = $(cmd_compile.c:-c=-S)
 cmd_compile.u = $(CC) $^ $(DEPS-$(notdir $@)) -o $@ $(CFLAGS) $(CFLAGS-$(notdir $(^D))) $(CFLAGS-$(notdir $@)) $(CFLAGS_gen.dep)
 cmd_compile.u = $(CC) $^ $(DEPS-$(notdir $@)) -o $@ $(CFLAGS) $(CFLAGS-$(notdir $(^D))) $(CFLAGS-$(notdir $@)) $(CFLAGS_gen.dep)
 cmd_compile.S = $(filter-out -std=gnu99, $(cmd_compile.c)) -D__ASSEMBLER__ $(ASFLAGS) $(ARCH_ASFLAGS) $(ASFLAGS-$(suffix $@)) $(ASFLAGS-$(notdir $<)) $(ASFLAGS-$(notdir $@))
 cmd_compile.S = $(filter-out -std=gnu99, $(cmd_compile.c)) -D__ASSEMBLER__ $(ASFLAGS) $(ARCH_ASFLAGS) $(ASFLAGS-$(suffix $@)) $(ASFLAGS-$(notdir $<)) $(ASFLAGS-$(notdir $@))
 cmd_compile.m = $(cmd_compile.c) -DL_$(patsubst %$(suffix $(notdir $@)),%,$(notdir $@))
 cmd_compile.m = $(cmd_compile.c) -DL_$(patsubst %$(suffix $(notdir $@)),%,$(notdir $@))
+cmd_compile.mi= $(cmd_compile.m:-c=-E -dD $(EXTRA_CPPFLAGS))
 
 
 cmd_compile-m = $(CC) $^ -c -o $@ $(CFLAGS) $(ARCH_CFLAGS) $(CFLAGS-$(suffix $@)) $(CFLAGS-$(notdir $(@D))) $(CFLAGS-$(notdir $@))
 cmd_compile-m = $(CC) $^ -c -o $@ $(CFLAGS) $(ARCH_CFLAGS) $(CFLAGS-$(suffix $@)) $(CFLAGS-$(notdir $(@D))) $(CFLAGS-$(notdir $@))
 cmd_strip     = $(STRIPTOOL) $(STRIP_FLAGS) $^
 cmd_strip     = $(STRIPTOOL) $(STRIP_FLAGS) $^
@@ -216,6 +221,7 @@ compile.i =  $(call maybe_exec,compile.i)
 compile.s =  $(call maybe_exec,compile.s)
 compile.s =  $(call maybe_exec,compile.s)
 compile.S = @$(call maybe_exec,compile.S)
 compile.S = @$(call maybe_exec,compile.S)
 compile.m = @$(call maybe_exec,compile.m)
 compile.m = @$(call maybe_exec,compile.m)
+compile.mi=  $(call maybe_exec,compile.mi)
 compile-m = @$(disp_compile-m) ; $(cmd_compile-m) && $(cmd_t_strip)
 compile-m = @$(disp_compile-m) ; $(cmd_compile-m) && $(cmd_t_strip)
 do_strip  = @$(disp_strip)     ; $(cmd_strip)
 do_strip  = @$(disp_strip)     ; $(cmd_strip)
 do_t_strip= @$(disp_t_strip)   ; $(cmd_t_strip)
 do_t_strip= @$(disp_t_strip)   ; $(cmd_t_strip)

+ 27 - 4
include/math.h

@@ -46,6 +46,10 @@ __BEGIN_DECLS
 /* Get general and ISO C99 specific information.  */
 /* Get general and ISO C99 specific information.  */
 #include <bits/mathdef.h>
 #include <bits/mathdef.h>
 
 
+#if !(defined _LIBC && (defined NOT_IN_libc && defined IS_IN_libm))
+# define libm_hidden_proto(name, attrs...)
+#endif
+
 /* The file <bits/mathcalls.h> contains the prototypes for all the
 /* The file <bits/mathcalls.h> contains the prototypes for all the
    actual math functions.  These macros are used for those prototypes,
    actual math functions.  These macros are used for those prototypes,
    so we can easily declare each function as both `name' and `__name',
    so we can easily declare each function as both `name' and `__name',
@@ -55,15 +59,32 @@ __BEGIN_DECLS
   __MATHDECL (_Mdouble_,function,suffix, args)
   __MATHDECL (_Mdouble_,function,suffix, args)
 #define __MATHDECL(type, function,suffix, args) \
 #define __MATHDECL(type, function,suffix, args) \
   __MATHDECL_1(type, function,suffix, args); \
   __MATHDECL_1(type, function,suffix, args); \
-  __MATHDECL_1(type, __CONCAT(__,function),suffix, args)
+
 #define __MATHCALLX(function,suffix, args, attrib)	\
 #define __MATHCALLX(function,suffix, args, attrib)	\
   __MATHDECLX (_Mdouble_,function,suffix, args, attrib)
   __MATHDECLX (_Mdouble_,function,suffix, args, attrib)
 #define __MATHDECLX(type, function,suffix, args, attrib) \
 #define __MATHDECLX(type, function,suffix, args, attrib) \
   __MATHDECL_1(type, function,suffix, args) __attribute__ (attrib); \
   __MATHDECL_1(type, function,suffix, args) __attribute__ (attrib); \
-  __MATHDECL_1(type, __CONCAT(__,function),suffix, args) __attribute__ (attrib)
+  __MATHDECLI_MAINVARIANT(function)
+
+
 #define __MATHDECL_1(type, function,suffix, args) \
 #define __MATHDECL_1(type, function,suffix, args) \
   extern type __MATH_PRECNAME(function,suffix) args __THROW
   extern type __MATH_PRECNAME(function,suffix) args __THROW
-
+/* Decls which are also used internally in libm.
+   Only the main variant is used internally, no need to try to avoid relocs
+   for the {l,f} variants.  */
+#define __MATHCALLI(function,suffix, args)	\
+  __MATHDECLI (_Mdouble_,function,suffix, args)
+#define __MATHDECLI(type, function,suffix, args) \
+  __MATHDECL_1(type, function,suffix, args); \
+  __MATHDECLI_MAINVARIANT(function)
+/* Private helpers for purely macro impls below.
+   Only make __foo{,f,l} visible but not (the macro-only) foo.  */
+#define __MATHDECL_PRIV(type, function,suffix, args, attrib) \
+  __MATHDECL_1(type, __CONCAT(__,function),suffix, args) \
+						__attribute__ (attrib); \
+  libm_hidden_proto(__MATH_PRECNAME(__##function,suffix))
+
+#define __MATHDECLI_MAINVARIANT libm_hidden_proto
 #define _Mdouble_		double
 #define _Mdouble_		double
 #define __MATH_PRECNAME(name,r)	__CONCAT(name,r)
 #define __MATH_PRECNAME(name,r)	__CONCAT(name,r)
 # define _Mdouble_BEGIN_NAMESPACE __BEGIN_NAMESPACE_STD
 # define _Mdouble_BEGIN_NAMESPACE __BEGIN_NAMESPACE_STD
@@ -72,7 +93,9 @@ __BEGIN_DECLS
 #undef	_Mdouble_
 #undef	_Mdouble_
 #undef _Mdouble_BEGIN_NAMESPACE
 #undef _Mdouble_BEGIN_NAMESPACE
 #undef _Mdouble_END_NAMESPACE
 #undef _Mdouble_END_NAMESPACE
-#undef	__MATH_PRECNAME
+#undef __MATH_PRECNAME
+#undef __MATHDECLI_MAINVARIANT
+#define __MATHDECLI_MAINVARIANT(x)
 
 
 #if defined __USE_MISC || defined __USE_ISOC99
 #if defined __USE_MISC || defined __USE_ISOC99
 
 

+ 57 - 137
libc/sysdeps/linux/common/bits/mathcalls.h

@@ -52,59 +52,45 @@
 
 
 _Mdouble_BEGIN_NAMESPACE
 _Mdouble_BEGIN_NAMESPACE
 /* Arc cosine of X.  */
 /* Arc cosine of X.  */
-__MATHCALL (acos,, (_Mdouble_ __x));
-libm_hidden_proto(acos)
+__MATHCALLI (acos,, (_Mdouble_ __x));
 /* Arc sine of X.  */
 /* Arc sine of X.  */
-__MATHCALL (asin,, (_Mdouble_ __x));
-libm_hidden_proto(asin)
+__MATHCALLI (asin,, (_Mdouble_ __x));
 /* Arc tangent of X.  */
 /* Arc tangent of X.  */
-__MATHCALL (atan,, (_Mdouble_ __x));
-libm_hidden_proto(atan)
+__MATHCALLI (atan,, (_Mdouble_ __x));
 /* Arc tangent of Y/X.  */
 /* Arc tangent of Y/X.  */
-__MATHCALL (atan2,, (_Mdouble_ __y, _Mdouble_ __x));
-libm_hidden_proto(atan2)
+__MATHCALLI (atan2,, (_Mdouble_ __y, _Mdouble_ __x));
 
 
 /* Cosine of X.  */
 /* Cosine of X.  */
-__MATHCALL (cos,, (_Mdouble_ __x));
-libm_hidden_proto(cos)
+__MATHCALLI (cos,, (_Mdouble_ __x));
 /* Sine of X.  */
 /* Sine of X.  */
-__MATHCALL (sin,, (_Mdouble_ __x));
-libm_hidden_proto(sin)
+__MATHCALLI (sin,, (_Mdouble_ __x));
 /* Tangent of X.  */
 /* Tangent of X.  */
-__MATHCALL (tan,, (_Mdouble_ __x));
-libm_hidden_proto(tan)
+__MATHCALLI (tan,, (_Mdouble_ __x));
 
 
 /* Hyperbolic functions.  */
 /* Hyperbolic functions.  */
 
 
 /* Hyperbolic cosine of X.  */
 /* Hyperbolic cosine of X.  */
-__MATHCALL (cosh,, (_Mdouble_ __x));
-libm_hidden_proto(cosh)
+__MATHCALLI (cosh,, (_Mdouble_ __x));
 /* Hyperbolic sine of X.  */
 /* Hyperbolic sine of X.  */
-__MATHCALL (sinh,, (_Mdouble_ __x));
-libm_hidden_proto(sinh)
+__MATHCALLI (sinh,, (_Mdouble_ __x));
 /* Hyperbolic tangent of X.  */
 /* Hyperbolic tangent of X.  */
-__MATHCALL (tanh,, (_Mdouble_ __x));
-libm_hidden_proto(tanh)
+__MATHCALLI (tanh,, (_Mdouble_ __x));
 _Mdouble_END_NAMESPACE
 _Mdouble_END_NAMESPACE
 
 
 #if 0 /*def __USE_GNU*/
 #if 0 /*def __USE_GNU*/
 /* Cosine and sine of X.  */
 /* Cosine and sine of X.  */
 __MATHDECL (void,sincos,,
 __MATHDECL (void,sincos,,
 	    (_Mdouble_ __x, _Mdouble_ *__sinx, _Mdouble_ *__cosx));
 	    (_Mdouble_ __x, _Mdouble_ *__sinx, _Mdouble_ *__cosx));
-libm_hidden_proto(sincos)
 #endif
 #endif
 
 
 #if defined __USE_MISC || defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99
 #if defined __USE_MISC || defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99
 __BEGIN_NAMESPACE_C99
 __BEGIN_NAMESPACE_C99
 /* Hyperbolic arc cosine of X.  */
 /* Hyperbolic arc cosine of X.  */
-__MATHCALL (acosh,, (_Mdouble_ __x));
-libm_hidden_proto(acosh)
+__MATHCALLI (acosh,, (_Mdouble_ __x));
 /* Hyperbolic arc sine of X.  */
 /* Hyperbolic arc sine of X.  */
-__MATHCALL (asinh,, (_Mdouble_ __x));
-libm_hidden_proto(asinh)
+__MATHCALLI (asinh,, (_Mdouble_ __x));
 /* Hyperbolic arc tangent of X.  */
 /* Hyperbolic arc tangent of X.  */
-__MATHCALL (atanh,, (_Mdouble_ __x));
-libm_hidden_proto(atanh)
+__MATHCALLI (atanh,, (_Mdouble_ __x));
 __END_NAMESPACE_C99
 __END_NAMESPACE_C99
 #endif
 #endif
 
 
@@ -112,64 +98,51 @@ __END_NAMESPACE_C99
 
 
 _Mdouble_BEGIN_NAMESPACE
 _Mdouble_BEGIN_NAMESPACE
 /* Exponential function of X.  */
 /* Exponential function of X.  */
-__MATHCALL (exp,, (_Mdouble_ __x));
-libm_hidden_proto(exp)
+__MATHCALLI (exp,, (_Mdouble_ __x));
 
 
 /* Break VALUE into a normalized fraction and an integral power of 2.  */
 /* Break VALUE into a normalized fraction and an integral power of 2.  */
-__MATHCALL (frexp,, (_Mdouble_ __x, int *__exponent));
-libm_hidden_proto(frexp)
+__MATHCALLI (frexp,, (_Mdouble_ __x, int *__exponent));
 
 
 /* X times (two to the EXP power).  */
 /* X times (two to the EXP power).  */
-__MATHCALL (ldexp,, (_Mdouble_ __x, int __exponent));
-libm_hidden_proto(ldexp)
+__MATHCALLI (ldexp,, (_Mdouble_ __x, int __exponent));
 
 
 /* Natural logarithm of X.  */
 /* Natural logarithm of X.  */
-__MATHCALL (log,, (_Mdouble_ __x));
-libm_hidden_proto(log)
+__MATHCALLI (log,, (_Mdouble_ __x));
 
 
 /* Base-ten logarithm of X.  */
 /* Base-ten logarithm of X.  */
-__MATHCALL (log10,, (_Mdouble_ __x));
-libm_hidden_proto(log10)
+__MATHCALLI (log10,, (_Mdouble_ __x));
 
 
 /* Break VALUE into integral and fractional parts.  */
 /* Break VALUE into integral and fractional parts.  */
-__MATHCALL (modf,, (_Mdouble_ __x, _Mdouble_ *__iptr));
-libm_hidden_proto(modf)
+__MATHCALLI (modf,, (_Mdouble_ __x, _Mdouble_ *__iptr));
 _Mdouble_END_NAMESPACE
 _Mdouble_END_NAMESPACE
 
 
 #if 0 /*def __USE_GNU*/
 #if 0 /*def __USE_GNU*/
 /* A function missing in all standards: compute exponent to base ten.  */
 /* A function missing in all standards: compute exponent to base ten.  */
 __MATHCALL (exp10,, (_Mdouble_ __x));
 __MATHCALL (exp10,, (_Mdouble_ __x));
-libm_hidden_proto(exp10)
 /* Another name occasionally used.  */
 /* Another name occasionally used.  */
 __MATHCALL (pow10,, (_Mdouble_ __x));
 __MATHCALL (pow10,, (_Mdouble_ __x));
-libm_hidden_proto(pow10)
 #endif
 #endif
 
 
 #if defined __USE_MISC || defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99
 #if defined __USE_MISC || defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99
 __BEGIN_NAMESPACE_C99
 __BEGIN_NAMESPACE_C99
 /* Return exp(X) - 1.  */
 /* Return exp(X) - 1.  */
-__MATHCALL (expm1,, (_Mdouble_ __x));
-libm_hidden_proto(expm1)
+__MATHCALLI (expm1,, (_Mdouble_ __x));
 
 
 /* Return log(1 + X).  */
 /* Return log(1 + X).  */
-__MATHCALL (log1p,, (_Mdouble_ __x));
-libm_hidden_proto(log1p)
+__MATHCALLI (log1p,, (_Mdouble_ __x));
 
 
 /* Return the base 2 signed integral exponent of X.  */
 /* Return the base 2 signed integral exponent of X.  */
-__MATHCALL (logb,, (_Mdouble_ __x));
-libm_hidden_proto(logb)
+__MATHCALLI (logb,, (_Mdouble_ __x));
 __END_NAMESPACE_C99
 __END_NAMESPACE_C99
 #endif
 #endif
 
 
 #ifdef __USE_ISOC99
 #ifdef __USE_ISOC99
 __BEGIN_NAMESPACE_C99
 __BEGIN_NAMESPACE_C99
 /* Compute base-2 exponential of X.  */
 /* Compute base-2 exponential of X.  */
-__MATHCALL (exp2,, (_Mdouble_ __x));
-libm_hidden_proto(exp2)
+__MATHCALLI (exp2,, (_Mdouble_ __x));
 
 
 /* Compute base-2 logarithm of X.  */
 /* Compute base-2 logarithm of X.  */
 __MATHCALL (log2,, (_Mdouble_ __x));
 __MATHCALL (log2,, (_Mdouble_ __x));
-libm_hidden_proto(log2)
 __END_NAMESPACE_C99
 __END_NAMESPACE_C99
 #endif
 #endif
 
 
@@ -178,27 +151,23 @@ __END_NAMESPACE_C99
 
 
 _Mdouble_BEGIN_NAMESPACE
 _Mdouble_BEGIN_NAMESPACE
 /* Return X to the Y power.  */
 /* Return X to the Y power.  */
-__MATHCALL (pow,, (_Mdouble_ __x, _Mdouble_ __y));
-libm_hidden_proto(pow)
+__MATHCALLI (pow,, (_Mdouble_ __x, _Mdouble_ __y));
 
 
 /* Return the square root of X.  */
 /* Return the square root of X.  */
-__MATHCALL (sqrt,, (_Mdouble_ __x));
-libm_hidden_proto(sqrt)
+__MATHCALLI (sqrt,, (_Mdouble_ __x));
 _Mdouble_END_NAMESPACE
 _Mdouble_END_NAMESPACE
 
 
 #if defined __USE_MISC || defined __USE_XOPEN || defined __USE_ISOC99
 #if defined __USE_MISC || defined __USE_XOPEN || defined __USE_ISOC99
 __BEGIN_NAMESPACE_C99
 __BEGIN_NAMESPACE_C99
 /* Return `sqrt(X*X + Y*Y)'.  */
 /* Return `sqrt(X*X + Y*Y)'.  */
-__MATHCALL (hypot,, (_Mdouble_ __x, _Mdouble_ __y));
-libm_hidden_proto(hypot)
+__MATHCALLI (hypot,, (_Mdouble_ __x, _Mdouble_ __y));
 __END_NAMESPACE_C99
 __END_NAMESPACE_C99
 #endif
 #endif
 
 
 #if defined __USE_MISC || defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99
 #if defined __USE_MISC || defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99
 __BEGIN_NAMESPACE_C99
 __BEGIN_NAMESPACE_C99
 /* Return the cube root of X.  */
 /* Return the cube root of X.  */
-__MATHCALL (cbrt,, (_Mdouble_ __x));
-libm_hidden_proto(cbrt)
+__MATHCALLI (cbrt,, (_Mdouble_ __x));
 __END_NAMESPACE_C99
 __END_NAMESPACE_C99
 #endif
 #endif
 
 
@@ -208,56 +177,46 @@ __END_NAMESPACE_C99
 _Mdouble_BEGIN_NAMESPACE
 _Mdouble_BEGIN_NAMESPACE
 /* Smallest integral value not less than X.  */
 /* Smallest integral value not less than X.  */
 __MATHCALLX (ceil,, (_Mdouble_ __x), (__const__));
 __MATHCALLX (ceil,, (_Mdouble_ __x), (__const__));
-libm_hidden_proto(ceil)
 
 
 /* Absolute value of X.  */
 /* Absolute value of X.  */
 __MATHCALLX (fabs,, (_Mdouble_ __x), (__const__));
 __MATHCALLX (fabs,, (_Mdouble_ __x), (__const__));
-libm_hidden_proto(fabs)
 
 
 /* Largest integer not greater than X.  */
 /* Largest integer not greater than X.  */
 __MATHCALLX (floor,, (_Mdouble_ __x), (__const__));
 __MATHCALLX (floor,, (_Mdouble_ __x), (__const__));
-libm_hidden_proto(floor)
 
 
 /* Floating-point modulo remainder of X/Y.  */
 /* Floating-point modulo remainder of X/Y.  */
-__MATHCALL (fmod,, (_Mdouble_ __x, _Mdouble_ __y));
-libm_hidden_proto(fmod)
+__MATHCALLI (fmod,, (_Mdouble_ __x, _Mdouble_ __y));
 
 
 
 
 /* Return 0 if VALUE is finite or NaN, +1 if it
 /* Return 0 if VALUE is finite or NaN, +1 if it
    is +Infinity, -1 if it is -Infinity.  */
    is +Infinity, -1 if it is -Infinity.  */
-__MATHDECL_1 (int,__isinf,, (_Mdouble_ __value)) __attribute__ ((__const__));
-libm_hidden_proto(__isinf)
+__MATHDECL_PRIV (int,isinf,, (_Mdouble_ __value), (__const__));
 
 
 /* Return nonzero if VALUE is finite and not NaN.  */
 /* Return nonzero if VALUE is finite and not NaN.  */
-__MATHDECL_1 (int,__finite,, (_Mdouble_ __value)) __attribute__ ((__const__));
-libm_hidden_proto(__finite)
+__MATHDECL_PRIV (int,finite,, (_Mdouble_ __value), (__const__));
 _Mdouble_END_NAMESPACE
 _Mdouble_END_NAMESPACE
 
 
 #ifdef __USE_MISC
 #ifdef __USE_MISC
+#if 0
 /* Return 0 if VALUE is finite or NaN, +1 if it
 /* Return 0 if VALUE is finite or NaN, +1 if it
    is +Infinity, -1 if it is -Infinity.  */
    is +Infinity, -1 if it is -Infinity.  */
-__MATHDECL_1 (int,isinf,, (_Mdouble_ __value)) __attribute__ ((__const__));
-libm_hidden_proto(isinf)
+__MATHDECL_PRIV (int,isinf,, (_Mdouble_ __value), (__const__));
 
 
 /* Return nonzero if VALUE is finite and not NaN.  */
 /* Return nonzero if VALUE is finite and not NaN.  */
-__MATHDECL_1 (int,finite,, (_Mdouble_ __value)) __attribute__ ((__const__));
-libm_hidden_proto(finite)
-
+__MATHDECL_PRIV (int,finite,, (_Mdouble_ __value), (__const__));
+#endif
 /* Return the remainder of X/Y.  */
 /* Return the remainder of X/Y.  */
 __MATHCALL (drem,, (_Mdouble_ __x, _Mdouble_ __y));
 __MATHCALL (drem,, (_Mdouble_ __x, _Mdouble_ __y));
-libm_hidden_proto(drem)
 
 
 
 
 /* Return the fractional part of X after dividing out `ilogb (X)'.  */
 /* Return the fractional part of X after dividing out `ilogb (X)'.  */
 __MATHCALL (significand,, (_Mdouble_ __x));
 __MATHCALL (significand,, (_Mdouble_ __x));
-libm_hidden_proto(significand)
 #endif /* Use misc.  */
 #endif /* Use misc.  */
 
 
 #if defined __USE_MISC || defined __USE_ISOC99
 #if defined __USE_MISC || defined __USE_ISOC99
 __BEGIN_NAMESPACE_C99
 __BEGIN_NAMESPACE_C99
 /* Return X with its signed changed to Y's.  */
 /* Return X with its signed changed to Y's.  */
 __MATHCALLX (copysign,, (_Mdouble_ __x, _Mdouble_ __y), (__const__));
 __MATHCALLX (copysign,, (_Mdouble_ __x, _Mdouble_ __y), (__const__));
-libm_hidden_proto(copysign)
 __END_NAMESPACE_C99
 __END_NAMESPACE_C99
 #endif
 #endif
 
 
@@ -265,60 +224,46 @@ __END_NAMESPACE_C99
 __BEGIN_NAMESPACE_C99
 __BEGIN_NAMESPACE_C99
 /* Return representation of NaN for double type.  */
 /* Return representation of NaN for double type.  */
 __MATHCALLX (nan,, (__const char *__tagb), (__const__));
 __MATHCALLX (nan,, (__const char *__tagb), (__const__));
-libm_hidden_proto(nan)
 __END_NAMESPACE_C99
 __END_NAMESPACE_C99
 #endif
 #endif
 
 
 
 
 /* Return nonzero if VALUE is not a number.  */
 /* Return nonzero if VALUE is not a number.  */
-__MATHDECL_1 (int,__isnan,, (_Mdouble_ __value)) __attribute__ ((__const__));
-libm_hidden_proto(__isnan)
+__MATHDECL_PRIV (int,__isnan,, (_Mdouble_ __value), (__const__));
 
 
 #if defined __USE_MISC || defined __USE_XOPEN
 #if defined __USE_MISC || defined __USE_XOPEN
 /* Return nonzero if VALUE is not a number.  */
 /* Return nonzero if VALUE is not a number.  */
-__MATHDECL_1 (int,isnan,, (_Mdouble_ __value)) __attribute__ ((__const__));
-libm_hidden_proto(isnan)
+__MATHDECL_PRIV (int,isnan,, (_Mdouble_ __value), (__const__));
 
 
 /* Bessel functions.  */
 /* Bessel functions.  */
 __MATHCALL (j0,, (_Mdouble_));
 __MATHCALL (j0,, (_Mdouble_));
-libm_hidden_proto(j0)
 __MATHCALL (j1,, (_Mdouble_));
 __MATHCALL (j1,, (_Mdouble_));
-libm_hidden_proto(j1)
 __MATHCALL (jn,, (int, _Mdouble_));
 __MATHCALL (jn,, (int, _Mdouble_));
-libm_hidden_proto(jn)
 __MATHCALL (y0,, (_Mdouble_));
 __MATHCALL (y0,, (_Mdouble_));
-libm_hidden_proto(y0)
 __MATHCALL (y1,, (_Mdouble_));
 __MATHCALL (y1,, (_Mdouble_));
-libm_hidden_proto(y1)
 __MATHCALL (yn,, (int, _Mdouble_));
 __MATHCALL (yn,, (int, _Mdouble_));
-libm_hidden_proto(yn)
 #endif
 #endif
 
 
 
 
 #if defined __USE_MISC || defined __USE_XOPEN || defined __USE_ISOC99
 #if defined __USE_MISC || defined __USE_XOPEN || defined __USE_ISOC99
 __BEGIN_NAMESPACE_C99
 __BEGIN_NAMESPACE_C99
 /* Error and gamma functions.  */
 /* Error and gamma functions.  */
-__MATHCALL (erf,, (_Mdouble_));
-libm_hidden_proto(erf)
-__MATHCALL (erfc,, (_Mdouble_));
-libm_hidden_proto(erfc)
-__MATHCALL (lgamma,, (_Mdouble_));
-libm_hidden_proto(lgamma)
+__MATHCALLI (erf,, (_Mdouble_));
+__MATHCALLI (erfc,, (_Mdouble_));
+__MATHCALLI (lgamma,, (_Mdouble_));
 __END_NAMESPACE_C99
 __END_NAMESPACE_C99
 #endif
 #endif
 
 
 #ifdef __USE_ISOC99
 #ifdef __USE_ISOC99
 __BEGIN_NAMESPACE_C99
 __BEGIN_NAMESPACE_C99
 /* True gamma function.  */
 /* True gamma function.  */
-__MATHCALL (tgamma,, (_Mdouble_));
-libm_hidden_proto(tgamma)
+__MATHCALLI (tgamma,, (_Mdouble_));
 __END_NAMESPACE_C99
 __END_NAMESPACE_C99
 #endif
 #endif
 
 
 #if defined __USE_MISC || defined __USE_XOPEN
 #if defined __USE_MISC || defined __USE_XOPEN
 /* Obsolete alias for `lgamma'.  */
 /* Obsolete alias for `lgamma'.  */
 __MATHCALL (gamma,, (_Mdouble_));
 __MATHCALL (gamma,, (_Mdouble_));
-libm_hidden_proto(gamma)
 #endif
 #endif
 
 
 #ifdef __USE_MISC
 #ifdef __USE_MISC
@@ -326,7 +271,6 @@ libm_hidden_proto(gamma)
    `signgam'.  The reentrant version instead takes a pointer and stores
    `signgam'.  The reentrant version instead takes a pointer and stores
    the value through it.  */
    the value through it.  */
 __MATHCALL (lgamma,_r, (_Mdouble_, int *__signgamp));
 __MATHCALL (lgamma,_r, (_Mdouble_, int *__signgamp));
-libm_hidden_proto(lgamma_r)
 #endif
 #endif
 
 
 
 
@@ -334,103 +278,80 @@ libm_hidden_proto(lgamma_r)
 __BEGIN_NAMESPACE_C99
 __BEGIN_NAMESPACE_C99
 /* Return the integer nearest X in the direction of the
 /* Return the integer nearest X in the direction of the
    prevailing rounding mode.  */
    prevailing rounding mode.  */
-__MATHCALL (rint,, (_Mdouble_ __x));
-libm_hidden_proto(rint)
+__MATHCALLI (rint,, (_Mdouble_ __x));
 
 
 /* Return X + epsilon if X < Y, X - epsilon if X > Y.  */
 /* Return X + epsilon if X < Y, X - epsilon if X > Y.  */
 __MATHCALLX (nextafter,, (_Mdouble_ __x, _Mdouble_ __y), (__const__));
 __MATHCALLX (nextafter,, (_Mdouble_ __x, _Mdouble_ __y), (__const__));
-libm_hidden_proto(nextafter)
 # if defined __USE_ISOC99 && !defined __LDBL_COMPAT
 # if defined __USE_ISOC99 && !defined __LDBL_COMPAT
 __MATHCALLX (nexttoward,, (_Mdouble_ __x, long double __y), (__const__));
 __MATHCALLX (nexttoward,, (_Mdouble_ __x, long double __y), (__const__));
-libm_hidden_proto(nexttoward)
 # endif
 # endif
 
 
 /* Return the remainder of integer divison X / Y with infinite precision.  */
 /* Return the remainder of integer divison X / Y with infinite precision.  */
-__MATHCALL (remainder,, (_Mdouble_ __x, _Mdouble_ __y));
-libm_hidden_proto(remainder)
+__MATHCALLI (remainder,, (_Mdouble_ __x, _Mdouble_ __y));
 
 
 # if defined __USE_MISC || defined __USE_ISOC99
 # if defined __USE_MISC || defined __USE_ISOC99
 /* Return X times (2 to the Nth power).  */
 /* Return X times (2 to the Nth power).  */
-__MATHCALL (scalbn,, (_Mdouble_ __x, int __n));
-libm_hidden_proto(scalbn)
+__MATHCALLI (scalbn,, (_Mdouble_ __x, int __n));
 # endif
 # endif
 
 
 /* Return the binary exponent of X, which must be nonzero.  */
 /* Return the binary exponent of X, which must be nonzero.  */
-__MATHDECL (int,ilogb,, (_Mdouble_ __x));
-libm_hidden_proto(ilogb)
+__MATHDECLI (int,ilogb,, (_Mdouble_ __x));
 #endif
 #endif
 
 
 #ifdef __USE_ISOC99
 #ifdef __USE_ISOC99
 /* Return X times (2 to the Nth power).  */
 /* Return X times (2 to the Nth power).  */
-__MATHCALL (scalbln,, (_Mdouble_ __x, long int __n));
-libm_hidden_proto(scalbln)
+__MATHCALLI (scalbln,, (_Mdouble_ __x, long int __n));
 
 
 /* Round X to integral value in floating-point format using current
 /* Round X to integral value in floating-point format using current
    rounding direction, but do not raise inexact exception.  */
    rounding direction, but do not raise inexact exception.  */
-__MATHCALL (nearbyint,, (_Mdouble_ __x));
-libm_hidden_proto(nearbyint)
+__MATHCALLI (nearbyint,, (_Mdouble_ __x));
 
 
 /* Round X to nearest integral value, rounding halfway cases away from
 /* Round X to nearest integral value, rounding halfway cases away from
    zero.  */
    zero.  */
 __MATHCALLX (round,, (_Mdouble_ __x), (__const__));
 __MATHCALLX (round,, (_Mdouble_ __x), (__const__));
-libm_hidden_proto(round)
 
 
 /* Round X to the integral value in floating-point format nearest but
 /* Round X to the integral value in floating-point format nearest but
    not larger in magnitude.  */
    not larger in magnitude.  */
 __MATHCALLX (trunc,, (_Mdouble_ __x), (__const__));
 __MATHCALLX (trunc,, (_Mdouble_ __x), (__const__));
-libm_hidden_proto(trunc)
 
 
 /* Compute remainder of X and Y and put in *QUO a value with sign of x/y
 /* Compute remainder of X and Y and put in *QUO a value with sign of x/y
    and magnitude congruent `mod 2^n' to the magnitude of the integral
    and magnitude congruent `mod 2^n' to the magnitude of the integral
    quotient x/y, with n >= 3.  */
    quotient x/y, with n >= 3.  */
-__MATHCALL (remquo,, (_Mdouble_ __x, _Mdouble_ __y, int *__quo));
-libm_hidden_proto(remquo)
+__MATHCALLI (remquo,, (_Mdouble_ __x, _Mdouble_ __y, int *__quo));
 
 
 
 
 /* Conversion functions.  */
 /* Conversion functions.  */
 
 
 /* Round X to nearest integral value according to current rounding
 /* Round X to nearest integral value according to current rounding
    direction.  */
    direction.  */
-__MATHDECL (long int,lrint,, (_Mdouble_ __x));
-libm_hidden_proto(lrint)
-__MATHDECL (long long int,llrint,, (_Mdouble_ __x));
-libm_hidden_proto(llrint)
+__MATHDECLI (long int,lrint,, (_Mdouble_ __x));
+__MATHDECLI (long long int,llrint,, (_Mdouble_ __x));
 
 
 /* Round X to nearest integral value, rounding halfway cases away from
 /* Round X to nearest integral value, rounding halfway cases away from
    zero.  */
    zero.  */
-__MATHDECL (long int,lround,, (_Mdouble_ __x));
-libm_hidden_proto(lround)
-__MATHDECL (long long int,llround,, (_Mdouble_ __x));
-libm_hidden_proto(llround)
+__MATHDECLI (long int,lround,, (_Mdouble_ __x));
+__MATHDECLI (long long int,llround,, (_Mdouble_ __x));
 
 
 
 
 /* Return positive difference between X and Y.  */
 /* Return positive difference between X and Y.  */
-__MATHCALL (fdim,, (_Mdouble_ __x, _Mdouble_ __y));
-libm_hidden_proto(fdim)
+__MATHCALLI (fdim,, (_Mdouble_ __x, _Mdouble_ __y));
 
 
 /* Return maximum numeric value from X and Y.  */
 /* Return maximum numeric value from X and Y.  */
-__MATHCALL (fmax,, (_Mdouble_ __x, _Mdouble_ __y));
-libm_hidden_proto(fmax)
+__MATHCALLI (fmax,, (_Mdouble_ __x, _Mdouble_ __y));
 
 
 /* Return minimum numeric value from X and Y.  */
 /* Return minimum numeric value from X and Y.  */
-__MATHCALL (fmin,, (_Mdouble_ __x, _Mdouble_ __y));
-libm_hidden_proto(fmin)
+__MATHCALLI (fmin,, (_Mdouble_ __x, _Mdouble_ __y));
 
 
 
 
 /* Classify given number.  */
 /* Classify given number.  */
-__MATHDECL_1 (int, __fpclassify,, (_Mdouble_ __value))
-     __attribute__ ((__const__));
-libm_hidden_proto(__fpclassify)
+__MATHDECL_PRIV (int, fpclassify,, (_Mdouble_ __value), (__const__));
 
 
 /* Test for negative number.  */
 /* Test for negative number.  */
-__MATHDECL_1 (int, __signbit,, (_Mdouble_ __value))
-     __attribute__ ((__const__));
-libm_hidden_proto(__signbit)
+__MATHDECL_PRIV (int, signbit,, (_Mdouble_ __value), (__const__));
 
 
 
 
 /* Multiply-add function computed as a ternary operation.  */
 /* Multiply-add function computed as a ternary operation.  */
-__MATHCALL (fma,, (_Mdouble_ __x, _Mdouble_ __y, _Mdouble_ __z));
-libm_hidden_proto(fma)
+__MATHCALLI (fma,, (_Mdouble_ __x, _Mdouble_ __y, _Mdouble_ __z));
 #endif /* Use ISO C99.  */
 #endif /* Use ISO C99.  */
 
 
 #if defined __USE_MISC || defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99
 #if defined __USE_MISC || defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99
@@ -440,5 +361,4 @@ __END_NAMESPACE_C99
 #if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
 #if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
 /* Return X times (2 to the Nth power).  */
 /* Return X times (2 to the Nth power).  */
 __MATHCALL (scalb,, (_Mdouble_ __x, _Mdouble_ __n));
 __MATHCALL (scalb,, (_Mdouble_ __x, _Mdouble_ __n));
-libm_hidden_proto(scalb)
 #endif
 #endif

+ 23 - 16
libm/Makefile.in

@@ -86,13 +86,13 @@ FL_MOBJ := \
 	scalblnf.o scalbnf.o sinf.o sinhf.o sqrtf.o tanf.o tanhf.o \
 	scalblnf.o scalbnf.o sinf.o sinhf.o sqrtf.o tanf.o tanhf.o \
 	tgammaf.o truncf.o cargf.o llrintf.o
 	tgammaf.o truncf.o cargf.o llrintf.o
 
 
-LD_MOBJ := acoshl.o acosl.o asinhl.o asinl.o atan2l.o atanhl.o atanl.o cbrtl.o \
+LD_MOBJ := acoshl.o acosl.o asinhl.o asinl.o atan2l.o atanhl.o atanl.o cargl.o cbrtl.o \
 	ceill.o copysignl.o coshl.o cosl.o erfcl.o erfl.o exp2l.o expl.o \
 	ceill.o copysignl.o coshl.o cosl.o erfcl.o erfl.o exp2l.o expl.o \
-	expm1l.o fabsl.o fdiml.o floorl.o fmal.o fmaxl.o fminl.o fmodl.o \
-	frexpl.o gammal.o hypotl.o ilogbl.o ldexpl.o lgammal.o llrintl.o \
+	expm1l.o fabsl.o finitel.o fdiml.o floorl.o fmal.o fmaxl.o fminl.o fmodl.o fpclassifyl.o \
+	frexpl.o gammal.o hypotl.o ilogbl.o isinfl.o isnanl.o ldexpl.o lgammal.o llrintl.o \
 	llroundl.o log10l.o log1pl.o XXXlog2l.o logbl.o logl.o lrintl.o lroundl.o \
 	llroundl.o log10l.o log1pl.o XXXlog2l.o logbl.o logl.o lrintl.o lroundl.o \
 	modfl.o nearbyintl.o nextafterl.o XXXnexttowardl.o powl.o remainderl.o \
 	modfl.o nearbyintl.o nextafterl.o XXXnexttowardl.o powl.o remainderl.o \
-	remquol.o rintl.o roundl.o scalblnl.o scalbnl.o sinhl.o sinl.o sqrtl.o \
+	remquol.o rintl.o roundl.o scalblnl.o scalbnl.o signbitl.o sinhl.o sinl.o sqrtl.o \
 	tanhl.o tanl.o tgammal.o truncl.o
 	tanhl.o tanl.o tgammal.o truncl.o
 else
 else
 # This list of math functions was taken from POSIX/IEEE 1003.1b-1993
 # This list of math functions was taken from POSIX/IEEE 1003.1b-1993
@@ -139,21 +139,21 @@ libm_SRC := $(patsubst %.c,$(libm_DIR)/%.c,$(libm_CSRC))
 libm_OBJ := $(patsubst $(libm_DIR)/%.c,$(libm_OUT)/%.o,$(libm_SRC))
 libm_OBJ := $(patsubst $(libm_DIR)/%.c,$(libm_OUT)/%.o,$(libm_SRC))
 
 
 ifeq ($(strip $(UCLIBC_HAS_LONG_DOUBLE_MATH)),y)
 ifeq ($(strip $(UCLIBC_HAS_LONG_DOUBLE_MATH)),y)
-libm_MSRC2 := $(libm_DIR)/$(LD_MSRC)
-libm_MOBJ2 := $(patsubst %.o,$(libm_OUT)/%.o,$(LD_MOBJ))
+libm_MSRC_LD := $(libm_DIR)/$(LD_MSRC)
+libm_MOBJ_LD := $(patsubst %.o,$(libm_OUT)/%.o,$(LD_MOBJ))
 endif
 endif
-libm_MSRC := $(libm_DIR)/$(FL_MSRC)
-libm_MOBJ := $(patsubst %.o,$(libm_OUT)/%.o,$(FL_MOBJ))
+libm_MSRC_FL := $(libm_DIR)/$(FL_MSRC)
+libm_MOBJ_FL := $(patsubst %.o,$(libm_OUT)/%.o,$(FL_MOBJ))
 
 
 
 
 ifneq ($(DOMULTI),n)
 ifneq ($(DOMULTI),n)
-CFLAGS-libm += $(patsubst %,-DL_%,$(subst .o,,$(notdir $(libm_MOBJ))))
+CFLAGS-libm += $(patsubst %,-DL_%,$(subst .o,,$(notdir $(libm_MOBJ_FL))))
 ifeq ($(strip $(UCLIBC_HAS_LONG_DOUBLE_MATH)),y)
 ifeq ($(strip $(UCLIBC_HAS_LONG_DOUBLE_MATH)),y)
-CFLAGS-libm += $(patsubst %,-DL_%,$(subst .o,,$(notdir $(libm_MOBJ2))))
+CFLAGS-libm += $(patsubst %,-DL_%,$(subst .o,,$(notdir $(libm_MOBJ_LD))))
 endif
 endif
 endif
 endif
 
 
-libm_OBJS := $(libm_OBJ) $(libm_MOBJ) $(libm_MOBJ2)
+libm_OBJS := $(libm_OBJ) $(libm_MOBJ_FL) $(libm_MOBJ_LD)
 
 
 ifeq ($(DOPIC),y)
 ifeq ($(DOPIC),y)
 libm-a-y += $(libm_OBJS:.o=.os)
 libm-a-y += $(libm_OBJS:.o=.os)
@@ -182,7 +182,7 @@ $(libm_OUT)/libm_so.a: $(libm-so-y)
 	$(Q)$(RM) $@
 	$(Q)$(RM) $@
 	$(do_ar)
 	$(do_ar)
 
 
-$(libm_OUT)/libm.oS: $(libm_SRC) $(libm_MSRC) $(libm_MSRC2) $(libm_ARCH_SRC)
+$(libm_OUT)/libm.oS: $(libm_SRC) $(libm_MSRC_FL) $(libm_MSRC_LD) $(libm_ARCH_SRC)
 	$(Q)$(RM) $@
 	$(Q)$(RM) $@
 	$(compile-m)
 	$(compile-m)
 
 
@@ -191,17 +191,24 @@ $(top_builddir)lib/libm.a: $(libm-a-y)
 	$(Q)$(RM) $@
 	$(Q)$(RM) $@
 	$(do_ar)
 	$(do_ar)
 
 
-$(libm_MOBJ): $(libm_MSRC)
+$(libm_MOBJ_FL): $(libm_MSRC_FL)
 	$(compile.m)
 	$(compile.m)
 
 
-$(libm_MOBJ2): $(libm_MSRC2)
+$(libm_MOBJ_LD): $(libm_MSRC_LD)
 	$(compile.m)
 	$(compile.m)
 
 
-$(libm_MOBJ:.o=.os): $(libm_MSRC)
+$(libm_MOBJ_FL:.o=.os): $(libm_MSRC_FL)
 	$(compile.m)
 	$(compile.m)
 
 
-$(libm_MOBJ2:.o=.os): $(libm_MSRC2)
+$(libm_MOBJ_LD:.o=.os): $(libm_MSRC_LD)
 	$(compile.m)
 	$(compile.m)
 
 
+# spare us from adding a gazillion dummy two-liner files
+$(libm_MOBJ_FL:.o=.i): $(libm_MSRC_FL)
+	$(compile.mi)
+
+$(libm_MOBJ_LD:.o=.i): $(libm_MSRC_LD)
+	$(compile.mi)
+
 libm_clean:
 libm_clean:
 	$(do_rm) $(addprefix $(libm_OUT)/,$(foreach e, o os oS a,$(foreach d, *. */*. */*/*.,$(d)$(e))))
 	$(do_rm) $(addprefix $(libm_OUT)/,$(foreach e, o os oS a,$(foreach d, *. */*. */*/*.,$(d)$(e))))

+ 1 - 1
libm/e_scalb.c

@@ -44,7 +44,7 @@ static char rcsid[] = "$NetBSD: e_scalb.c,v 1.6 1995/05/10 20:46:09 jtc Exp $";
 	return scalbn(x,fn);
 	return scalbn(x,fn);
 #else
 #else
 	if (isnan(x)||isnan(fn)) return x*fn;
 	if (isnan(x)||isnan(fn)) return x*fn;
-	if (!finite(fn)) {
+	if (!isfinite(fn)) {
 	    if(fn>0.0) return x*fn;
 	    if(fn>0.0) return x*fn;
 	    else       return x/(-fn);
 	    else       return x/(-fn);
 	}
 	}

+ 9 - 1
libm/float_wrappers.c

@@ -39,6 +39,7 @@ float       asinhf(float);
 float       atan2f(float, float);
 float       atan2f(float, float);
 float       atanf(float);
 float       atanf(float);
 float       atanhf(float);
 float       atanhf(float);
+float       cargf(float complex);
 float       cbrtf(float);
 float       cbrtf(float);
 float       ceilf(float);
 float       ceilf(float);
 float       copysignf(float, float);
 float       copysignf(float, float);
@@ -136,7 +137,7 @@ float atanhf (float x)
 #ifdef L_cargf
 #ifdef L_cargf
 float cargf (float complex x)
 float cargf (float complex x)
 {
 {
-	return (float) carg( (double)x );
+	return (float) carg( (double complex)x );
 }
 }
 #endif
 #endif
 
 
@@ -535,3 +536,10 @@ float truncf (float x)
 	return (float) trunc( (double)x );
 	return (float) trunc( (double)x );
 }
 }
 #endif
 #endif
+
+#ifdef L_fmaf
+float fmaf (float x, float y, float z)
+{
+	return (float) fma( (double)x, (double)y, (double)z );
+}
+#endif

+ 56 - 0
libm/ldouble_wrappers.c

@@ -14,6 +14,8 @@
 /* Prevent math.h from defining colliding inlines */
 /* Prevent math.h from defining colliding inlines */
 #undef __USE_EXTERN_INLINES
 #undef __USE_EXTERN_INLINES
 #include "math.h"
 #include "math.h"
+#include <complex.h>
+
 
 
 /* Implement the following, as defined by SuSv3 */
 /* Implement the following, as defined by SuSv3 */
 #if 0
 #if 0
@@ -24,6 +26,7 @@ long double asinl(long double);
 long double atan2l(long double, long double);
 long double atan2l(long double, long double);
 long double atanhl(long double);
 long double atanhl(long double);
 long double atanl(long double);
 long double atanl(long double);
+long double cargl(long double complex);
 long double cbrtl(long double);
 long double cbrtl(long double);
 long double ceill(long double);
 long double ceill(long double);
 long double copysignl(long double, long double);
 long double copysignl(long double, long double);
@@ -131,6 +134,14 @@ long double atanl (long double x)
 #endif
 #endif
 
 
 
 
+#ifdef L_cargl
+long double cargl (long double complex x)
+{
+	return (long double) carg( (double complex)x );
+}
+#endif
+
+
 #ifdef L_cbrtl
 #ifdef L_cbrtl
 long double cbrtl (long double x)
 long double cbrtl (long double x)
 {
 {
@@ -524,3 +535,48 @@ long double truncl (long double x)
 	return (long double) trunc( (double)x );
 	return (long double) trunc( (double)x );
 }
 }
 #endif
 #endif
+
+
+#ifdef __DO_C99_MATH__
+
+#ifdef L_fpclassifyl
+int __fpclassifyl (long double x)
+{
+	return __fpclassify ( (double) x );
+}
+libm_hidden_def(__fpclassifyl)
+#endif
+
+#ifdef L_finitel
+int __finitel (long double x)
+{
+	return __finite ( (double)x );
+}
+libm_hidden_def(__finitel)
+#endif
+
+#ifdef L_signbitl
+int __signbitl (long double x)
+{
+	return __signbitl ( (double)x );
+}
+libm_hidden_def(__signbitl)
+#endif
+
+#ifdef L_isnanl
+int __isnanl (long double x)
+{
+	return __isnan ( (double)x );
+}
+libm_hidden_def(__isnanl)
+#endif
+
+#ifdef L_isinfl
+int __isinfl (long double x)
+{
+	return __isinf ( (double)x );
+}
+libm_hidden_def(__isinfl)
+#endif
+
+#endif

+ 0 - 2
libm/s_finite.c

@@ -28,5 +28,3 @@ int __finite(double x)
 	return (int)((u_int32_t)((hx&0x7fffffff)-0x7ff00000)>>31);
 	return (int)((u_int32_t)((hx&0x7fffffff)-0x7ff00000)>>31);
 }
 }
 libm_hidden_def(__finite)
 libm_hidden_def(__finite)
-weak_alias(__finite,finite)
-libm_hidden_weak(finite)

+ 0 - 2
libm/s_finitef.c

@@ -21,7 +21,6 @@
 #include "math.h"
 #include "math.h"
 #include "math_private.h"
 #include "math_private.h"
 
 
-libm_hidden_proto(__finitef)
 int __finitef(float x)
 int __finitef(float x)
 {
 {
 	int32_t ix;
 	int32_t ix;
@@ -29,4 +28,3 @@ int __finitef(float x)
 	return (int)((u_int32_t)((ix&0x7fffffff)-0x7f800000)>>31);
 	return (int)((u_int32_t)((ix&0x7fffffff)-0x7f800000)>>31);
 }
 }
 libm_hidden_def(__finitef)
 libm_hidden_def(__finitef)
-strong_alias(__finitef,finitef)

+ 2 - 4
libm/s_fma.c

@@ -20,11 +20,9 @@
 
 
 #include <math.h>
 #include <math.h>
 
 
-libm_hidden_proto(__fma)
 double
 double
-__fma (double x, double y, double z)
+fma (double x, double y, double z)
 {
 {
   return (x * y) + z;
   return (x * y) + z;
 }
 }
-libm_hidden_def(__fma)
-strong_alias (__fma, fma)
+libm_hidden_def(fma)

+ 1 - 1
libm/s_fpclassify.c

@@ -40,4 +40,4 @@ __fpclassify (double x)
 
 
   return retval;
   return retval;
 }
 }
-libm_hidden_def (__fpclassify)
+libm_hidden_def(__fpclassify)

+ 2 - 4
libm/s_fpclassifyf.c

@@ -21,9 +21,7 @@
 #include <math.h>
 #include <math.h>
 #include "math_private.h"
 #include "math_private.h"
 
 
-libm_hidden_proto(__fpclassifyf)
-int
-__fpclassifyf (float x)
+int __fpclassifyf (float x)
 {
 {
   u_int32_t wx;
   u_int32_t wx;
   int retval = FP_NORMAL;
   int retval = FP_NORMAL;
@@ -39,4 +37,4 @@ __fpclassifyf (float x)
 
 
   return retval;
   return retval;
 }
 }
-libm_hidden_def (__fpclassifyf)
+libm_hidden_def(__fpclassifyf)

+ 0 - 2
libm/s_isinf.c

@@ -22,5 +22,3 @@ __isinf (double x)
 	return ~(lx >> 31) & (hx >> 30);
 	return ~(lx >> 31) & (hx >> 30);
 }
 }
 libm_hidden_def(__isinf)
 libm_hidden_def(__isinf)
-weak_alias (__isinf, isinf)
-libm_hidden_weak(isinf)

+ 0 - 2
libm/s_isinff.c

@@ -11,7 +11,6 @@
 #include "math.h"
 #include "math.h"
 #include "math_private.h"
 #include "math_private.h"
 
 
-libm_hidden_proto(__isinff)
 int
 int
 __isinff (float x)
 __isinff (float x)
 {
 {
@@ -23,4 +22,3 @@ __isinff (float x)
 	return ~(t >> 31) & (ix >> 30);
 	return ~(t >> 31) & (ix >> 30);
 }
 }
 libm_hidden_def(__isinff)
 libm_hidden_def(__isinff)
-strong_alias (__isinff, isinff)

+ 1 - 8
libm/s_isnan.c

@@ -18,12 +18,7 @@
 #include "math.h"
 #include "math.h"
 #include "math_private.h"
 #include "math_private.h"
 
 
-#ifdef __STDC__
-	int __isnan(double x)
-#else
-	int __isnan(x)
-	double x;
-#endif
+int __isnan(double x)
 {
 {
 	int32_t hx,lx;
 	int32_t hx,lx;
 	EXTRACT_WORDS(hx,lx,x);
 	EXTRACT_WORDS(hx,lx,x);
@@ -33,5 +28,3 @@
 	return (int)(((u_int32_t)hx)>>31);
 	return (int)(((u_int32_t)hx)>>31);
 }
 }
 libm_hidden_def(__isnan)
 libm_hidden_def(__isnan)
-weak_alias(__isnan,isnan)
-libm_hidden_weak(isnan)

+ 1 - 3
libm/s_isnanf.c

@@ -21,7 +21,6 @@
 #include "math.h"
 #include "math.h"
 #include "math_private.h"
 #include "math_private.h"
 
 
-libm_hidden_proto(__isnanf)
 int __isnanf(float x)
 int __isnanf(float x)
 {
 {
 	int32_t ix;
 	int32_t ix;
@@ -30,5 +29,4 @@ int __isnanf(float x)
 	ix = 0x7f800000 - ix;
 	ix = 0x7f800000 - ix;
 	return (int)(((u_int32_t)(ix))>>31);
 	return (int)(((u_int32_t)(ix))>>31);
 }
 }
-libm_hidden_def (__isnanf)
-weak_alias (__isnanf, isnanf)
+libm_hidden_def(__isnanf)

+ 2 - 2
libm/s_ldexp.c

@@ -26,9 +26,9 @@ static char rcsid[] = "$NetBSD: s_ldexp.c,v 1.6 1995/05/10 20:47:40 jtc Exp $";
 	double value; int exp;
 	double value; int exp;
 #endif
 #endif
 {
 {
-	if(!finite(value)||value==0.0) return value;
+	if(!isfinite(value)||value==0.0) return value;
 	value = scalbn(value,exp);
 	value = scalbn(value,exp);
-	if(!finite(value)||value==0.0) errno = ERANGE;
+	if(!isfinite(value)||value==0.0) errno = ERANGE;
 	return value;
 	return value;
 }
 }
 libm_hidden_def(ldexp)
 libm_hidden_def(ldexp)

+ 0 - 1
libm/s_signbitf.c

@@ -24,7 +24,6 @@
 #include <math.h>
 #include <math.h>
 #include "math_private.h"
 #include "math_private.h"
 
 
-libm_hidden_proto(__signbitf)
 int
 int
 __signbitf (float x)
 __signbitf (float x)
 {
 {

+ 0 - 1
libm/s_significand.c

@@ -33,4 +33,3 @@ static char rcsid[] = "$NetBSD: s_significand.c,v 1.6 1995/05/10 20:48:11 jtc Ex
 {
 {
 	return __ieee754_scalb(x,(double) -ilogb(x));
 	return __ieee754_scalb(x,(double) -ilogb(x));
 }
 }
-libm_hidden_def(significand)

+ 0 - 1
libm/w_drem.c

@@ -12,4 +12,3 @@ double drem(double x, double y)
 {
 {
 	return remainder(x, y);
 	return remainder(x, y);
 }
 }
-libm_hidden_def(drem)

+ 1 - 1
libm/w_exp.c

@@ -42,7 +42,7 @@ u_threshold= -7.45133219101941108420e+02;  /* 0xc0874910, 0xD52D3051 */
 	double z;
 	double z;
 	z = __ieee754_exp(x);
 	z = __ieee754_exp(x);
 	if(_LIB_VERSION == _IEEE_) return z;
 	if(_LIB_VERSION == _IEEE_) return z;
-	if(finite(x)) {
+	if(isfinite(x)) {
 	    if(x>o_threshold)
 	    if(x>o_threshold)
 	        return __kernel_standard(x,x,6); /* exp overflow */
 	        return __kernel_standard(x,x,6); /* exp overflow */
 	    else if(x<u_threshold)
 	    else if(x<u_threshold)

+ 1 - 2
libm/w_gamma.c

@@ -37,7 +37,7 @@ libm_hidden_proto(signgam)
         double y;
         double y;
         y = __ieee754_lgamma_r(x,&signgam);
         y = __ieee754_lgamma_r(x,&signgam);
         if(_LIB_VERSION == _IEEE_) return y;
         if(_LIB_VERSION == _IEEE_) return y;
-        if(!finite(y)&&finite(x)) {
+        if(!isfinite(y)&&isfinite(x)) {
             if(floor(x)==x&&x<=0.0)
             if(floor(x)==x&&x<=0.0)
                 return __kernel_standard(x,x,41); /* gamma pole */
                 return __kernel_standard(x,x,41); /* gamma pole */
             else
             else
@@ -46,4 +46,3 @@ libm_hidden_proto(signgam)
             return y;
             return y;
 #endif
 #endif
 }
 }
-libm_hidden_def(gamma)

+ 1 - 1
libm/w_gamma_r.c

@@ -37,7 +37,7 @@ libm_hidden_proto(gamma_r)
         double y;
         double y;
         y = __ieee754_lgamma_r(x,signgamp);
         y = __ieee754_lgamma_r(x,signgamp);
         if(_LIB_VERSION == _IEEE_) return y;
         if(_LIB_VERSION == _IEEE_) return y;
-        if(!finite(y)&&finite(x)) {
+        if(!isfinite(y)&&isfinite(x)) {
             if(floor(x)==x&&x<=0.0)
             if(floor(x)==x&&x<=0.0)
                 return __kernel_standard(x,x,41); /* gamma pole */
                 return __kernel_standard(x,x,41); /* gamma pole */
             else
             else

+ 1 - 1
libm/w_hypot.c

@@ -34,7 +34,7 @@ static char rcsid[] = "$NetBSD: w_hypot.c,v 1.6 1995/05/10 20:49:07 jtc Exp $";
 	double z;
 	double z;
 	z = __ieee754_hypot(x,y);
 	z = __ieee754_hypot(x,y);
 	if(_LIB_VERSION == _IEEE_) return z;
 	if(_LIB_VERSION == _IEEE_) return z;
-	if((!finite(z))&&finite(x)&&finite(y))
+	if((!isfinite(z))&&isfinite(x)&&isfinite(y))
 	    return __kernel_standard(x,y,4); /* hypot overflow */
 	    return __kernel_standard(x,y,4); /* hypot overflow */
 	else
 	else
 	    return z;
 	    return z;

+ 0 - 2
libm/w_j0.c

@@ -39,7 +39,6 @@ static char rcsid[] = "$NetBSD: w_j0.c,v 1.6 1995/05/10 20:49:11 jtc Exp $";
 	    return z;
 	    return z;
 #endif
 #endif
 }
 }
-libm_hidden_def(j0)
 
 
 #ifdef __STDC__
 #ifdef __STDC__
 	double y0(double x)		/* wrapper y0 */
 	double y0(double x)		/* wrapper y0 */
@@ -68,4 +67,3 @@ libm_hidden_def(j0)
 	    return z;
 	    return z;
 #endif
 #endif
 }
 }
-libm_hidden_def(y0)

+ 0 - 2
libm/w_j1.c

@@ -40,7 +40,6 @@ static char rcsid[] = "$NetBSD: w_j1.c,v 1.6 1995/05/10 20:49:15 jtc Exp $";
 	    return z;
 	    return z;
 #endif
 #endif
 }
 }
-libm_hidden_def(j1)
 
 
 #ifdef __STDC__
 #ifdef __STDC__
 	double y1(double x)		/* wrapper y1 */
 	double y1(double x)		/* wrapper y1 */
@@ -69,4 +68,3 @@ libm_hidden_def(j1)
 	    return z;
 	    return z;
 #endif
 #endif
 }
 }
-libm_hidden_def(y1)

+ 0 - 2
libm/w_jn.c

@@ -62,7 +62,6 @@ static char rcsid[] = "$NetBSD: w_jn.c,v 1.6 1995/05/10 20:49:19 jtc Exp $";
 	    return z;
 	    return z;
 #endif
 #endif
 }
 }
-libm_hidden_def(jn)
 
 
 #ifdef __STDC__
 #ifdef __STDC__
 	double yn(int n, double x)	/* wrapper yn */
 	double yn(int n, double x)	/* wrapper yn */
@@ -91,4 +90,3 @@ libm_hidden_def(jn)
 	    return z;
 	    return z;
 #endif
 #endif
 }
 }
-libm_hidden_def(yn)

+ 1 - 1
libm/w_lgamma.c

@@ -37,7 +37,7 @@ libm_hidden_proto(signgam)
         double y;
         double y;
         y = __ieee754_lgamma_r(x,&signgam);
         y = __ieee754_lgamma_r(x,&signgam);
         if(_LIB_VERSION == _IEEE_) return y;
         if(_LIB_VERSION == _IEEE_) return y;
-        if(!finite(y)&&finite(x)) {
+        if(!isfinite(y)&&isfinite(x)) {
             if(floor(x)==x&&x<=0.0)
             if(floor(x)==x&&x<=0.0)
                 return __kernel_standard(x,x,15); /* lgamma pole */
                 return __kernel_standard(x,x,15); /* lgamma pole */
             else
             else

+ 1 - 2
libm/w_lgamma_r.c

@@ -34,7 +34,7 @@ static char rcsid[] = "$NetBSD: w_lgamma_r.c,v 1.6 1995/05/10 20:49:27 jtc Exp $
         double y;
         double y;
         y = __ieee754_lgamma_r(x,signgamp);
         y = __ieee754_lgamma_r(x,signgamp);
         if(_LIB_VERSION == _IEEE_) return y;
         if(_LIB_VERSION == _IEEE_) return y;
-        if(!finite(y)&&finite(x)) {
+        if(!isfinite(y)&&isfinite(x)) {
             if(floor(x)==x&&x<=0.0)
             if(floor(x)==x&&x<=0.0)
                 return __kernel_standard(x,x,15); /* lgamma pole */
                 return __kernel_standard(x,x,15); /* lgamma pole */
             else
             else
@@ -43,4 +43,3 @@ static char rcsid[] = "$NetBSD: w_lgamma_r.c,v 1.6 1995/05/10 20:49:27 jtc Exp $
             return y;
             return y;
 #endif
 #endif
 }
 }
-libm_hidden_def(lgamma_r)

+ 0 - 1
libm/w_log2.c

@@ -11,4 +11,3 @@ double log2 (double d)
 {
 {
 	return __ieee754_log2 (d);
 	return __ieee754_log2 (d);
 }
 }
-libm_hidden_def(log2)

+ 4 - 4
libm/w_pow.c

@@ -41,19 +41,19 @@
 	if(x==0.0){
 	if(x==0.0){
 	    if(y==0.0)
 	    if(y==0.0)
 	        return __kernel_standard(x,y,20); /* pow(0.0,0.0) */
 	        return __kernel_standard(x,y,20); /* pow(0.0,0.0) */
-	    if(finite(y)&&y<0.0)
+	    if(isfinite(y)&&y<0.0)
 	        return __kernel_standard(x,y,23); /* pow(0.0,negative) */
 	        return __kernel_standard(x,y,23); /* pow(0.0,negative) */
 	    return z;
 	    return z;
 	}
 	}
-	if(!finite(z)) {
-	    if(finite(x)&&finite(y)) {
+	if(!isfinite(z)) {
+	    if(isfinite(x)&&isfinite(y)) {
 	        if(isnan(z))
 	        if(isnan(z))
 	            return __kernel_standard(x,y,24); /* pow neg**non-int */
 	            return __kernel_standard(x,y,24); /* pow neg**non-int */
 	        else
 	        else
 	            return __kernel_standard(x,y,21); /* pow overflow */
 	            return __kernel_standard(x,y,21); /* pow overflow */
 	    }
 	    }
 	}
 	}
-	if(z==0.0&&finite(x)&&finite(y))
+	if(z==0.0&&isfinite(x)&&isfinite(y))
 	    return __kernel_standard(x,y,22); /* pow underflow */
 	    return __kernel_standard(x,y,22); /* pow underflow */
 	return z;
 	return z;
 #endif
 #endif

+ 2 - 3
libm/w_scalb.c

@@ -46,16 +46,15 @@ static char rcsid[] = "$NetBSD: w_scalb.c,v 1.6 1995/05/10 20:49:48 jtc Exp $";
 	double z;
 	double z;
 	z = __ieee754_scalb(x,fn);
 	z = __ieee754_scalb(x,fn);
 	if(_LIB_VERSION == _IEEE_) return z;
 	if(_LIB_VERSION == _IEEE_) return z;
-	if(!(finite(z)||isnan(z))&&finite(x)) {
+	if(!(isfinite(z)||isnan(z))&&isfinite(x)) {
 	    return __kernel_standard(x,(double)fn,32); /* scalb overflow */
 	    return __kernel_standard(x,(double)fn,32); /* scalb overflow */
 	}
 	}
 	if(z==0.0&&z!=x) {
 	if(z==0.0&&z!=x) {
 	    return __kernel_standard(x,(double)fn,33); /* scalb underflow */
 	    return __kernel_standard(x,(double)fn,33); /* scalb underflow */
 	}
 	}
 #ifndef _SCALB_INT
 #ifndef _SCALB_INT
-	if(!finite(fn)) errno = ERANGE;
+	if(!isfinite(fn)) errno = ERANGE;
 #endif
 #endif
 	return z;
 	return z;
 #endif
 #endif
 }
 }
-libm_hidden_def(scalb)

+ 1 - 1
libm/w_sinh.c

@@ -34,7 +34,7 @@ static char rcsid[] = "$NetBSD: w_sinh.c,v 1.6 1995/05/10 20:49:51 jtc Exp $";
 	double z;
 	double z;
 	z = __ieee754_sinh(x);
 	z = __ieee754_sinh(x);
 	if(_LIB_VERSION == _IEEE_) return z;
 	if(_LIB_VERSION == _IEEE_) return z;
-	if(!finite(z)&&finite(x)) {
+	if(!isfinite(z)&&isfinite(x)) {
 	    return __kernel_standard(x,x,25); /* sinh overflow */
 	    return __kernel_standard(x,x,25); /* sinh overflow */
 	} else
 	} else
 	    return z;
 	    return z;

+ 1 - 1
libm/w_tgamma.c

@@ -35,7 +35,7 @@ libm_hidden_proto(signgam)
 #else
 #else
 	if(_LIB_VERSION == _IEEE_) return y;
 	if(_LIB_VERSION == _IEEE_) return y;
 
 
-	if(!finite(y)&&finite(x)) {
+	if(!isfinite(y)&&isfinite(x)) {
 	  if(floor(x)==x&&x<=0.0)
 	  if(floor(x)==x&&x<=0.0)
 	    return __kernel_standard(x,x,41); /* tgamma pole */
 	    return __kernel_standard(x,x,41); /* tgamma pole */
 	  else
 	  else