From 73d6e5c41b61633e22ea74e3aa2df721512dca57 Mon Sep 17 00:00:00 2001 From: Bernhard Reutner-Fischer Date: Sat, 14 Nov 2009 15:59:35 +0100 Subject: libm: fix C99_MATH on __NO_LONG_DOUBLE_MATH hosts alias l to their normal double counterparts. Works around problems with libgcc blindly calling __finitel on e.g. ppc32 Signed-off-by: Bernhard Reutner-Fischer --- libm/Makefile.in | 5 ----- libm/ldouble_wrappers.c | 39 --------------------------------------- libm/math_private.h | 13 +++++++++++++ libm/s_finite.c | 3 +++ libm/s_fpclassify.c | 3 +++ libm/s_isinf.c | 3 +++ libm/s_isnan.c | 3 +++ libm/s_signbit.c | 3 +++ 8 files changed, 28 insertions(+), 44 deletions(-) (limited to 'libm') diff --git a/libm/Makefile.in b/libm/Makefile.in index d17d64fae..f1f42f696 100644 --- a/libm/Makefile.in +++ b/libm/Makefile.in @@ -129,11 +129,6 @@ FL_MOBJ := \ # Not implemented [yet?]: nexttowardl.o LD_MOBJ := \ - __finitel.o \ - __fpclassifyl.o \ - __isinfl.o \ - __isnanl.o \ - __signbitl.o \ acoshl.o \ acosl.o \ asinhl.o \ diff --git a/libm/ldouble_wrappers.c b/libm/ldouble_wrappers.c index c53b99773..9c2e522bb 100644 --- a/libm/ldouble_wrappers.c +++ b/libm/ldouble_wrappers.c @@ -116,16 +116,6 @@ long long func##l(long double x) \ } #endif /* __i386__ && __OPTIMIZE__ */ -#if defined __NO_LONG_DOUBLE_MATH -# define int_WRAPPER_C99(func) /* not needed */ -# else -# define int_WRAPPER_C99(func) \ -int func##l(long double x) \ -{ \ - return func((double) x); \ -} \ -libm_hidden_def(func##l) -#endif /* Implement the following, as defined by SuSv3 */ #if 0 @@ -501,32 +491,3 @@ long double significandl(long double x) return (long double) significand((double) x); } #endif - -#ifdef __DO_C99_MATH__ - -#ifdef L___fpclassifyl -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 -int_WRAPPER1(__isnan) -libm_hidden_def(__isnanl) -#endif - -#ifdef L___isinfl -int_WRAPPER1(__isinf) -libm_hidden_def(__isinfl) -#endif - -#endif diff --git a/libm/math_private.h b/libm/math_private.h index 2c5a30ac2..b6bea80ae 100644 --- a/libm/math_private.h +++ b/libm/math_private.h @@ -255,5 +255,18 @@ extern int __kernel_rem_pio2 (double*,double*,int,int,int,const int*) attribu #define math_force_eval(x) do { __typeof(x) __x = (x); __asm __volatile ("" : : "m" (__x)); } while (0) #endif +/* If we do not have long double support, then alias to the double variant. */ +#if defined __NO_LONG_DOUBLE_MATH +# define int_WRAPPER_C99(func) \ +weak_alias(func,func##l) +# else +# define int_WRAPPER_C99(func) \ +int func##l(long double x) \ +{ \ + return func((double) x); \ +} \ +libm_hidden_def(func##l) +#endif + #endif /* _MATH_PRIVATE_H_ */ diff --git a/libm/s_finite.c b/libm/s_finite.c index 9bbc00286..5b2bc2907 100644 --- a/libm/s_finite.c +++ b/libm/s_finite.c @@ -30,3 +30,6 @@ int __finite(double x) return (hx | 0x800fffff) != 0xffffffff; } libm_hidden_def(__finite) +#if defined __DO_C99_MATH__ +int_WRAPPER_C99(__finite) +#endif diff --git a/libm/s_fpclassify.c b/libm/s_fpclassify.c index a05cd563e..99a635474 100644 --- a/libm/s_fpclassify.c +++ b/libm/s_fpclassify.c @@ -40,3 +40,6 @@ int __fpclassify(double x) return retval; } libm_hidden_def(__fpclassify) +#if defined __DO_C99_MATH__ +int_WRAPPER_C99(__fpclassify) +#endif diff --git a/libm/s_isinf.c b/libm/s_isinf.c index 62e5263bb..1f65b8378 100644 --- a/libm/s_isinf.c +++ b/libm/s_isinf.c @@ -21,3 +21,6 @@ int __isinf(double x) return ~(lx >> 31) & (hx >> 30); } libm_hidden_def(__isinf) +#if defined __DO_C99_MATH__ +int_WRAPPER_C99(__isinf) +#endif diff --git a/libm/s_isnan.c b/libm/s_isnan.c index 1bc49cb02..fb44f6a6e 100644 --- a/libm/s_isnan.c +++ b/libm/s_isnan.c @@ -27,3 +27,6 @@ int __isnan(double x) return (int)(((u_int32_t)hx)>>31); } libm_hidden_def(__isnan) +#if defined __DO_C99_MATH__ +int_WRAPPER_C99(__isnan) +#endif diff --git a/libm/s_signbit.c b/libm/s_signbit.c index ee1b7c62e..ca4144af8 100644 --- a/libm/s_signbit.c +++ b/libm/s_signbit.c @@ -33,3 +33,6 @@ __signbit (double x) return hx & 0x80000000; } libm_hidden_def(__signbit) +#if defined __DO_C99_MATH__ +int_WRAPPER_C99(__signbit) +#endif -- cgit v1.2.3 From 53c9f62657f222a3fefed852e1b2029033ec4014 Mon Sep 17 00:00:00 2001 From: Bernhard Reutner-Fischer Date: Sat, 14 Nov 2009 17:50:41 +0100 Subject: Revert "libm: fix C99_MATH on __NO_LONG_DOUBLE_MATH hosts" This reverts commit 73d6e5c41b61633e22ea74e3aa2df721512dca57. barking up the wrong tree Signed-off-by: Bernhard Reutner-Fischer --- libm/Makefile.in | 5 +++++ libm/ldouble_wrappers.c | 39 +++++++++++++++++++++++++++++++++++++++ libm/math_private.h | 13 ------------- libm/s_finite.c | 3 --- libm/s_fpclassify.c | 3 --- libm/s_isinf.c | 3 --- libm/s_isnan.c | 3 --- libm/s_signbit.c | 3 --- 8 files changed, 44 insertions(+), 28 deletions(-) (limited to 'libm') diff --git a/libm/Makefile.in b/libm/Makefile.in index f1f42f696..d17d64fae 100644 --- a/libm/Makefile.in +++ b/libm/Makefile.in @@ -129,6 +129,11 @@ FL_MOBJ := \ # Not implemented [yet?]: nexttowardl.o LD_MOBJ := \ + __finitel.o \ + __fpclassifyl.o \ + __isinfl.o \ + __isnanl.o \ + __signbitl.o \ acoshl.o \ acosl.o \ asinhl.o \ diff --git a/libm/ldouble_wrappers.c b/libm/ldouble_wrappers.c index 9c2e522bb..c53b99773 100644 --- a/libm/ldouble_wrappers.c +++ b/libm/ldouble_wrappers.c @@ -116,6 +116,16 @@ long long func##l(long double x) \ } #endif /* __i386__ && __OPTIMIZE__ */ +#if defined __NO_LONG_DOUBLE_MATH +# define int_WRAPPER_C99(func) /* not needed */ +# else +# define int_WRAPPER_C99(func) \ +int func##l(long double x) \ +{ \ + return func((double) x); \ +} \ +libm_hidden_def(func##l) +#endif /* Implement the following, as defined by SuSv3 */ #if 0 @@ -491,3 +501,32 @@ long double significandl(long double x) return (long double) significand((double) x); } #endif + +#ifdef __DO_C99_MATH__ + +#ifdef L___fpclassifyl +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 +int_WRAPPER1(__isnan) +libm_hidden_def(__isnanl) +#endif + +#ifdef L___isinfl +int_WRAPPER1(__isinf) +libm_hidden_def(__isinfl) +#endif + +#endif diff --git a/libm/math_private.h b/libm/math_private.h index b6bea80ae..2c5a30ac2 100644 --- a/libm/math_private.h +++ b/libm/math_private.h @@ -255,18 +255,5 @@ extern int __kernel_rem_pio2 (double*,double*,int,int,int,const int*) attribu #define math_force_eval(x) do { __typeof(x) __x = (x); __asm __volatile ("" : : "m" (__x)); } while (0) #endif -/* If we do not have long double support, then alias to the double variant. */ -#if defined __NO_LONG_DOUBLE_MATH -# define int_WRAPPER_C99(func) \ -weak_alias(func,func##l) -# else -# define int_WRAPPER_C99(func) \ -int func##l(long double x) \ -{ \ - return func((double) x); \ -} \ -libm_hidden_def(func##l) -#endif - #endif /* _MATH_PRIVATE_H_ */ diff --git a/libm/s_finite.c b/libm/s_finite.c index 5b2bc2907..9bbc00286 100644 --- a/libm/s_finite.c +++ b/libm/s_finite.c @@ -30,6 +30,3 @@ int __finite(double x) return (hx | 0x800fffff) != 0xffffffff; } libm_hidden_def(__finite) -#if defined __DO_C99_MATH__ -int_WRAPPER_C99(__finite) -#endif diff --git a/libm/s_fpclassify.c b/libm/s_fpclassify.c index 99a635474..a05cd563e 100644 --- a/libm/s_fpclassify.c +++ b/libm/s_fpclassify.c @@ -40,6 +40,3 @@ int __fpclassify(double x) return retval; } libm_hidden_def(__fpclassify) -#if defined __DO_C99_MATH__ -int_WRAPPER_C99(__fpclassify) -#endif diff --git a/libm/s_isinf.c b/libm/s_isinf.c index 1f65b8378..62e5263bb 100644 --- a/libm/s_isinf.c +++ b/libm/s_isinf.c @@ -21,6 +21,3 @@ int __isinf(double x) return ~(lx >> 31) & (hx >> 30); } libm_hidden_def(__isinf) -#if defined __DO_C99_MATH__ -int_WRAPPER_C99(__isinf) -#endif diff --git a/libm/s_isnan.c b/libm/s_isnan.c index fb44f6a6e..1bc49cb02 100644 --- a/libm/s_isnan.c +++ b/libm/s_isnan.c @@ -27,6 +27,3 @@ int __isnan(double x) return (int)(((u_int32_t)hx)>>31); } libm_hidden_def(__isnan) -#if defined __DO_C99_MATH__ -int_WRAPPER_C99(__isnan) -#endif diff --git a/libm/s_signbit.c b/libm/s_signbit.c index ca4144af8..ee1b7c62e 100644 --- a/libm/s_signbit.c +++ b/libm/s_signbit.c @@ -33,6 +33,3 @@ __signbit (double x) return hx & 0x80000000; } libm_hidden_def(__signbit) -#if defined __DO_C99_MATH__ -int_WRAPPER_C99(__signbit) -#endif -- cgit v1.2.3 From 5962e391388a20e1886d400c83c36596e4d02f45 Mon Sep 17 00:00:00 2001 From: Bernhard Reutner-Fischer Date: Sun, 15 Nov 2009 19:34:35 +0100 Subject: libm: use int_WRAPPER_C99 macro Signed-off-by: Bernhard Reutner-Fischer --- libm/ldouble_wrappers.c | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) (limited to 'libm') diff --git a/libm/ldouble_wrappers.c b/libm/ldouble_wrappers.c index c53b99773..34f06722e 100644 --- a/libm/ldouble_wrappers.c +++ b/libm/ldouble_wrappers.c @@ -505,28 +505,23 @@ long double significandl(long double x) #ifdef __DO_C99_MATH__ #ifdef L___fpclassifyl -int_WRAPPER1(__fpclassify) -libm_hidden_def(__fpclassifyl) +int_WRAPPER_C99(__fpclassify) #endif #ifdef L___finitel -int_WRAPPER1(__finite) -libm_hidden_def(__finitel) +int_WRAPPER_C99(__finite) #endif #ifdef L___signbitl -int_WRAPPER1(__signbit) -libm_hidden_def(__signbitl) +int_WRAPPER_C99(__signbit) #endif #ifdef L___isnanl -int_WRAPPER1(__isnan) -libm_hidden_def(__isnanl) +int_WRAPPER_C99(__isnan) #endif #ifdef L___isinfl -int_WRAPPER1(__isinf) -libm_hidden_def(__isinfl) +int_WRAPPER_C99(__isinf) #endif #endif -- cgit v1.2.3 From 4c5c4502d0d6ae2e6cd495b1084a6c9d34a8cab3 Mon Sep 17 00:00:00 2001 From: Bernhard Reutner-Fischer Date: Thu, 19 Nov 2009 18:49:24 +0100 Subject: DO_XSI_MATH: add config knob Signed-off-by: Bernhard Reutner-Fischer --- libm/Makefile.in | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'libm') diff --git a/libm/Makefile.in b/libm/Makefile.in index d17d64fae..56b2d76c3 100644 --- a/libm/Makefile.in +++ b/libm/Makefile.in @@ -56,8 +56,8 @@ LD_MSRC := ldouble_wrappers.c ifeq ($(DO_C99_MATH),y) libm_CSRC := \ e_acos.c e_acosh.c e_asin.c e_atan2.c e_atanh.c e_cosh.c \ - e_exp.c e_fmod.c e_hypot.c e_j0.c \ - e_j1.c e_jn.c e_lgamma_r.c e_log.c e_log2.c e_log10.c \ + e_exp.c e_fmod.c e_hypot.c \ + e_lgamma_r.c e_log.c e_log2.c e_log10.c \ e_pow.c e_remainder.c e_rem_pio2.c e_scalb.c e_sinh.c \ e_sqrt.c k_cos.c k_rem_pio2.c k_sin.c k_standard.c k_tan.c \ s_asinh.c s_atan.c s_cbrt.c s_ceil.c s_copysign.c s_cos.c \ @@ -209,6 +209,10 @@ libm_CSRC := \ FL_MOBJ := sqrtf.o endif +ifeq ($(DO_XSI_MATH),y) +libm_CSRC += e_j0.c e_j1.c e_jn.c +endif + # assume that arch specific versions are provided as single sources/objects ifeq ($(UCLIBC_HAS_FPU),y) ifeq ($(DO_C99_MATH),y) -- cgit v1.2.3