svn commit: trunk/uClibc: include libc/sysdeps/linux/common/bits l etc...

vda at uclibc.org vda at uclibc.org
Tue Feb 17 01:45:33 UTC 2009


Author: vda
Date: 2009-02-17 01:45:32 +0000 (Tue, 17 Feb 2009)
New Revision: 25345

Log:
test/math/compile_test.c: "are long double functions even compile/link?" test
*: fix everything which prevents above from building



Added:
   trunk/uClibc/test/math/compile_test.c

Modified:
   trunk/uClibc/include/math.h
   trunk/uClibc/libc/sysdeps/linux/common/bits/mathcalls.h
   trunk/uClibc/libm/Makefile.in
   trunk/uClibc/libm/ldouble_wrappers.c
   trunk/uClibc/test/math/Makefile
   trunk/uClibc/test/math/libm-test.inc


Changeset:
Modified: trunk/uClibc/include/math.h
===================================================================
--- trunk/uClibc/include/math.h	2009-02-16 14:08:47 UTC (rev 25344)
+++ trunk/uClibc/include/math.h	2009-02-17 01:45:32 UTC (rev 25345)
@@ -52,38 +52,46 @@
    so we can easily declare each function as both `name' and `__name',
    and can declare the float versions `namef' and `__namef'.  */
 
-#define __MATHCALL(function,suffix, args)	\
-  __MATHDECL (_Mdouble_,function,suffix, args)
-#define __MATHDECL(type, function,suffix, args) \
-  __MATHDECL_1(type, function,suffix, args);
+#define __MATHDECL_1(type,function,suffix,args) \
+  extern type __MATH_PRECNAME(function,suffix) args __THROW
 
-#define __MATHCALLX(function,suffix, args, attrib)	\
-  __MATHDECLX (_Mdouble_,function,suffix, args, attrib)
-#define __MATHDECL_1(type, function,suffix, args) \
-  extern type __MATH_PRECNAME(function,suffix) args __THROW
-#define __MATHDECLX(type, function,suffix, args, attrib) \
-  __MATHDECL_1(type, function,suffix, args) __attribute__ (attrib); \
+#define __MATHDECL(type,function,suffix,args) \
+  __MATHDECL_1(type,function,suffix,args);
+
+#define __MATHCALL(function,suffix,args)	\
+  __MATHDECL(_Mdouble_,function,suffix,args)
+
+#define __MATHDECLX(type,function,suffix,args,attrib) \
+  __MATHDECL_1(type,function,suffix,args) __attribute__ (attrib); \
   __MATHDECLI_MAINVARIANT(function)
 
+#define __MATHCALLX(function,suffix,args,attrib)	\
+  __MATHDECLX(_Mdouble_,function,suffix,args,attrib)
+
 /* 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); \
+#define __MATHDECLI(type,function,suffix,args) \
+  __MATHDECL_1(type,function,suffix,args); \
   __MATHDECLI_MAINVARIANT(function)
+
+#define __MATHCALLI(function,suffix,args)	\
+  __MATHDECLI(_Mdouble_,function,suffix,args)
+
 /* Private helpers for purely macro impls below.
    Only make __foo{,f,l} visible but not (the macro-only) foo.  */
 #if defined _LIBC
-# define __MATHDECL_PRIV(type, function,suffix, args, attrib) \
-  __MATHDECL_1(type, __CONCAT(__,function),suffix, args) __attribute__ (attrib); \
+# define __MATHDECL_PRIV(type,function,suffix,args,attrib) \
+  __MATHDECL_1(type,__CONCAT(__,function),suffix,args) __attribute__ (attrib); \
   libm_hidden_proto(__MATH_PRECNAME(__##function,suffix))
 #else
-# define __MATHDECL_PRIV(type, function,suffix, args, attrib) \
-  __MATHDECL_1(type, __CONCAT(__,function),suffix, args) __attribute__ (attrib);
+# define __MATHDECL_PRIV(type,function,suffix,args,attrib) \
+  __MATHDECL_1(type,__CONCAT(__,function),suffix,args) __attribute__ (attrib);
 #endif
 
+
+/* Include the file of declarations, declaring souble versions */
+
 #if defined _LIBC
 # define __MATHDECLI_MAINVARIANT(x) libm_hidden_proto(x)
 #else
@@ -124,7 +132,8 @@
 # undef _Mdouble_END_NAMESPACE
 # undef	__MATH_PRECNAME
 
-# if (__STDC__ - 0 || __GNUC__ - 0) \
+
+# if (defined __STDC__ || defined __GNUC__) \
      && (defined __UCLIBC_HAS_LONG_DOUBLE_MATH__ || defined __LDBL_COMPAT)
 #  ifdef __LDBL_COMPAT
 
@@ -147,11 +156,10 @@
    instead of `double' and appending l to each function name.  */
 
 #   undef __MATHDECL_1
-#   define __MATHDECL_2(type, function,suffix, args, alias) \
-  extern type __REDIRECT_NTH(__MATH_PRECNAME(function,suffix), \
-			     args, alias)
-#   define __MATHDECL_1(type, function,suffix, args) \
-  __MATHDECL_2(type, function,suffix, args, __CONCAT(function,suffix))
+#   define __MATHDECL_2(type,function,suffix,args,alias) \
+  extern type __REDIRECT_NTH(__MATH_PRECNAME(function,suffix),args,alias)
+#   define __MATHDECL_1(type,function,suffix,args) \
+  __MATHDECL_2(type,function,suffix,args,__CONCAT(function,suffix))
 #  endif
 
 #  ifndef _Mlong_double_

Modified: trunk/uClibc/libc/sysdeps/linux/common/bits/mathcalls.h
===================================================================
--- trunk/uClibc/libc/sysdeps/linux/common/bits/mathcalls.h	2009-02-16 14:08:47 UTC (rev 25344)
+++ trunk/uClibc/libc/sysdeps/linux/common/bits/mathcalls.h	2009-02-17 01:45:32 UTC (rev 25345)
@@ -48,6 +48,13 @@
 #endif
 
 
+/* __MATHCALLX includes libm_hidden_def
+ * __MATHCALLI includes libm_hidden_def too
+ * __MATHCALL  does not
+ * __MATHDECL_PRIV includes libm_hidden_def and declared only __foo, not foo
+ */
+
+
 /* Trigonometric functions.  */
 
 _Mdouble_BEGIN_NAMESPACE

Modified: trunk/uClibc/libm/Makefile.in
===================================================================
--- trunk/uClibc/libm/Makefile.in	2009-02-16 14:08:47 UTC (rev 25344)
+++ trunk/uClibc/libm/Makefile.in	2009-02-17 01:45:32 UTC (rev 25345)
@@ -85,10 +85,10 @@
 	ceill.o copysignl.o coshl.o cosl.o erfcl.o erfl.o exp2l.o expl.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 log2l.o logbl.o logl.o lrintl.o lroundl.o \
 	modfl.o nearbyintl.o nextafterl.o XXXnexttowardl.o powl.o remainderl.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 significandl.o
 else
 # This list of math functions was taken from POSIX/IEEE 1003.1b-1993
 libm_CSRC := \

Modified: trunk/uClibc/libm/ldouble_wrappers.c
===================================================================
--- trunk/uClibc/libm/ldouble_wrappers.c	2009-02-16 14:08:47 UTC (rev 25344)
+++ trunk/uClibc/libm/ldouble_wrappers.c	2009-02-17 01:45:32 UTC (rev 25345)
@@ -309,6 +309,15 @@
 }
 #endif
 
+#ifdef L_gammal
+/* WRAPPER1(gamma) won't work, tries to call __GI_xxx,
+ * and gamma() hasn't got one. */
+long double gammal(long double x)
+{
+	return (long double) gamma((double) x);
+}
+#endif
+
 #ifdef L_hypotl
 long double hypotl (long double x, long double y)
 {
@@ -348,7 +357,11 @@
 #endif
 
 #ifdef L_log2l
-WRAPPER1(log2)
+/* WRAPPER1(log2) won't work */
+long double log2l(long double x)
+{
+	return (long double) log2((double)x);
+}
 #endif
 
 #ifdef L_logbl
@@ -438,6 +451,8 @@
 }
 #endif
 
+/* scalb is an obsolete function */
+
 #ifdef L_sinhl
 WRAPPER1(sinh)
 #endif
@@ -466,18 +481,30 @@
 WRAPPER1(trunc)
 #endif
 
+#ifdef L_significandl
+/* WRAPPER1(significand) won't work, tries to call __GI_xxx,
+ * and significand() hasn't got one. */
+long double significandl(long double x)
+{
+	return (long double) significand((double) x);
+}
+#endif
+
 #ifdef __DO_C99_MATH__
 
 #ifdef L_fpclassifyl
-int_WRAPPER1(__fpclassify);
+int_WRAPPER1(__fpclassify)
+libm_hidden_def(__fpclassifyl)
 #endif
 
 #ifdef L_finitel
 int_WRAPPER1(__finite)
+libm_hidden_def(__finitel)
 #endif
 
 #ifdef L___signbitl
 int_WRAPPER1(__signbit)
+libm_hidden_def(__signbitl)
 #endif
 
 #ifdef L_isnanl

Modified: trunk/uClibc/test/math/Makefile
===================================================================
--- trunk/uClibc/test/math/Makefile	2009-02-16 14:08:47 UTC (rev 25344)
+++ trunk/uClibc/test/math/Makefile	2009-02-17 01:45:32 UTC (rev 25345)
@@ -1,9 +1,11 @@
 # uClibc math tests
 # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
 
+include ../../.config
+
 TESTS := basic-test rint tst-definitions test-fpucw test-float test-ifloat test-double test-idouble
 ifeq ($(strip $(UCLIBC_HAS_LONG_DOUBLE_MATH)),y)
-TESTS += test-ldouble test-ildouble
+TESTS += test-ldouble test-ildoubl compile_test
 else
 CFLAGS_basic-test := -DNO_LONG_DOUBLE
 endif

Added: trunk/uClibc/test/math/compile_test.c
===================================================================
--- trunk/uClibc/test/math/compile_test.c	                        (rev 0)
+++ trunk/uClibc/test/math/compile_test.c	2009-02-17 01:45:32 UTC (rev 25345)
@@ -0,0 +1,71 @@
+#include <math.h>
+
+void testl(long double long_double_x, int int_x, long long_x)
+{
+__finitel(long_double_x);
+__fpclassifyl(long_double_x);
+__isinfl(long_double_x);
+__isnanl(long_double_x);
+__signbitl(long_double_x);
+acoshl(long_double_x);
+acosl(long_double_x);
+asinhl(long_double_x);
+asinl(long_double_x);
+atan2l(long_double_x, long_double_x);
+atanhl(long_double_x);
+atanl(long_double_x);
+cbrtl(long_double_x);
+ceill(long_double_x);
+copysignl(long_double_x, long_double_x);
+coshl(long_double_x);
+cosl(long_double_x);
+erfcl(long_double_x);
+erfl(long_double_x);
+exp2l(long_double_x);
+expl(long_double_x);
+expm1l(long_double_x);
+fabsl(long_double_x);
+fdiml(long_double_x, long_double_x);
+floorl(long_double_x);
+fmal(long_double_x, long_double_x, long_double_x);
+fmaxl(long_double_x, long_double_x);
+fminl(long_double_x, long_double_x);
+fmodl(long_double_x, long_double_x);
+frexpl(long_double_x, &int_x);
+hypotl(long_double_x, long_double_x);
+ilogbl(long_double_x);
+ldexpl(long_double_x, int_x);
+lgammal(long_double_x);
+llrintl(long_double_x);
+llroundl(long_double_x);
+log10l(long_double_x);
+log1pl(long_double_x);
+log2l(long_double_x);
+logbl(long_double_x);
+logl(long_double_x);
+lrintl(long_double_x);
+lroundl(long_double_x);
+modfl(long_double_x, &long_double_x);
+nearbyintl(long_double_x);
+nextafterl(long_double_x, long_double_x);
+nexttowardl(long_double_x, long_double_x);
+powl(long_double_x, long_double_x);
+remainderl(long_double_x, long_double_x);
+remquol(long_double_x, long_double_x, &int_x);
+rintl(long_double_x);
+roundl(long_double_x);
+scalblnl(long_double_x, long_x);
+scalbnl(long_double_x, int_x);
+sinhl(long_double_x);
+sinl(long_double_x);
+sqrtl(long_double_x);
+tanhl(long_double_x);
+tanl(long_double_x);
+tgammal(long_double_x);
+truncl(long_double_x);
+}
+
+int main(int argc, char **argv)
+{
+	return (long) &testl;
+}

Modified: trunk/uClibc/test/math/libm-test.inc
===================================================================
--- trunk/uClibc/test/math/libm-test.inc	2009-02-16 14:08:47 UTC (rev 25344)
+++ trunk/uClibc/test/math/libm-test.inc	2009-02-17 01:45:32 UTC (rev 25345)
@@ -4231,8 +4231,8 @@
 static void
 scalb_test (void)
 {
-
   START (scalb);
+#ifndef TEST_LDOUBLE /* uclibc doesn't have scalbl */
 
   TEST_ff_f (scalb, 2.0, 0.5, nan_value, INVALID_EXCEPTION);
   TEST_ff_f (scalb, 3.0, -2.5, nan_value, INVALID_EXCEPTION);
@@ -4283,7 +4283,7 @@
 
   TEST_ff_f (scalb, 0.8L, 4, 12.8L);
   TEST_ff_f (scalb, -0.854375L, 5, -27.34L);
-
+#endif
   END (scalb);
 }
 



More information about the uClibc-cvs mailing list