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