OSDN Git Service

libm: Add missing C99 float/ld wrappers
[uclinux-h8/uclibc-ng.git] / libm / float_wrappers.c
index e6d660e..105486e 100644 (file)
 #include <math.h>
 #include <complex.h>
 
-/* For the time being, do _NOT_ implement these functions
- * that are defined by SuSv3 */
-#undef L_exp2f         /*float       exp2f(float);*/
-#undef L_fdimf         /*float       fdimf(float, float);*/
-#undef L_fmaf          /*float       fmaf(float, float, float);*/
-#undef L_fmaxf         /*float       fmaxf(float, float);*/
-#undef L_fminf         /*float       fminf(float, float);*/
-#undef L_log2f         /*float       log2f(float);*/
-#undef L_nearbyintf    /*float       nearbyintf(float);*/
-#undef L_nexttowardf   /*float       nexttowardf(float, long double);*/
-#undef L_remquof       /*float       remquof(float, float, int *);*/
-#undef L_scalblnf      /*float       scalblnf(float, long);*/
-#undef L_tgammaf       /*float       tgammaf(float);*/
+
+#define WRAPPER1(func) \
+float func##f (float x) \
+{ \
+       return (float) func((double)x); \
+}
+#define int_WRAPPER1(func) \
+int func##f (float x) \
+{ \
+       return func((double)x); \
+}
+#define long_WRAPPER1(func) \
+long func##f (float x) \
+{ \
+       return func((double)x); \
+}
+#define long_long_WRAPPER1(func) \
+long long func##f (float x) \
+{ \
+       return func((double)x); \
+}
+
+#ifndef __DO_XSI_MATH__
+# undef L_j0f  /* float j0f(float x); */
+# undef L_j1f  /* float j1f(float x); */
+# undef L_jnf  /* float jnf(int n, float x); */
+# undef L_y0f  /* float y0f(float x); */
+# undef L_y1f  /* float y1f(float x); */
+# undef L_ynf  /* float ynf(int n, float x); */
+#endif
 
 /* Implement the following, as defined by SuSv3 */
 #if 0
@@ -47,6 +64,7 @@ float       cosf(float);
 float       coshf(float);
 float       erfcf(float);
 float       erff(float);
+float       exp2f(float);
 float       expf(float);
 float       expm1f(float);
 float       fabsf(float);
@@ -60,6 +78,7 @@ float       lgammaf(float);
 long long   llroundf(float);
 float       log10f(float);
 float       log1pf(float);
+float       log2f(float);
 float       logbf(float);
 float       logf(float);
 long        lroundf(float);
@@ -77,37 +96,21 @@ float       tanhf(float);
 #endif
 
 #ifdef L_acosf
-float acosf (float x)
-{
-       return (float) acos( (double)x );
-}
+WRAPPER1(acos)
 #endif
 
-
 #ifdef L_acoshf
-float acoshf (float x)
-{
-       return (float) acosh( (double)x );
-}
+WRAPPER1(acosh)
 #endif
 
-
 #ifdef L_asinf
-float asinf (float x)
-{
-       return (float) asin( (double)x );
-}
+WRAPPER1(asin)
 #endif
 
-
 #ifdef L_asinhf
-float asinhf (float x)
-{
-       return (float) asinh( (double)x );
-}
+WRAPPER1(asinh)
 #endif
 
-
 #ifdef L_atan2f
 float atan2f (float x, float y)
 {
@@ -115,23 +118,14 @@ float atan2f (float x, float y)
 }
 #endif
 
-
 #ifdef L_atanf
-float atanf (float x)
-{
-       return (float) atan( (double)x );
-}
+WRAPPER1(atan)
 #endif
 
-
 #ifdef L_atanhf
-float atanhf (float x)
-{
-       return (float) atanh( (double)x );
-}
+WRAPPER1(atanh)
 #endif
 
-
 #ifdef L_cargf
 float cargf (float complex x)
 {
@@ -139,23 +133,14 @@ float cargf (float complex x)
 }
 #endif
 
-
 #ifdef L_cbrtf
-float cbrtf (float x)
-{
-       return (float) cbrt( (double)x );
-}
+WRAPPER1(cbrt)
 #endif
 
-
 #ifdef L_ceilf
-float ceilf (float x)
-{
-       return (float) ceil( (double)x );
-}
+WRAPPER1(ceil)
 #endif
 
-
 #ifdef L_copysignf
 float copysignf (float x, float y)
 {
@@ -163,71 +148,39 @@ float copysignf (float x, float y)
 }
 #endif
 
-
 #ifdef L_cosf
-float cosf (float x)
-{
-       return (float) cos( (double)x );
-}
+WRAPPER1(cos)
+libm_hidden_def(cosf)
 #endif
 
-
 #ifdef L_coshf
-float coshf (float x)
-{
-       return (float) cosh( (double)x );
-}
+WRAPPER1(cosh)
 #endif
 
-
 #ifdef L_erfcf
-float erfcf (float x)
-{
-       return (float) erfc( (double)x );
-}
+WRAPPER1(erfc)
 #endif
 
-
 #ifdef L_erff
-float erff (float x)
-{
-       return (float) erf( (double)x );
-}
+WRAPPER1(erf)
 #endif
 
-
 #ifdef L_exp2f
-float exp2f (float x)
-{
-       return (float) exp2( (double)x );
-}
+WRAPPER1(exp2)
 #endif
 
-
 #ifdef L_expf
-float expf (float x)
-{
-       return (float) exp( (double)x );
-}
+WRAPPER1(exp)
 #endif
 
-
 #ifdef L_expm1f
-float expm1f (float x)
-{
-       return (float) expm1( (double)x );
-}
+WRAPPER1(expm1)
 #endif
 
-
 #ifdef L_fabsf
-float fabsf (float x)
-{
-       return (float) fabs( (double)x );
-}
+WRAPPER1(fabs)
 #endif
 
-
 #ifdef L_fdimf
 float fdimf (float x, float y)
 {
@@ -235,15 +188,10 @@ float fdimf (float x, float y)
 }
 #endif
 
-
 #ifdef L_floorf
-float floorf (float x)
-{
-       return (float) floor( (double)x );
-}
+WRAPPER1(floor)
 #endif
 
-
 #ifdef L_fmaf
 float fmaf (float x, float y, float z)
 {
@@ -251,7 +199,6 @@ float fmaf (float x, float y, float z)
 }
 #endif
 
-
 #ifdef L_fmaxf
 float fmaxf (float x, float y)
 {
@@ -259,7 +206,6 @@ float fmaxf (float x, float y)
 }
 #endif
 
-
 #ifdef L_fminf
 float fminf (float x, float y)
 {
@@ -267,7 +213,6 @@ float fminf (float x, float y)
 }
 #endif
 
-
 #ifdef L_fmodf
 float fmodf (float x, float y)
 {
@@ -275,7 +220,6 @@ float fmodf (float x, float y)
 }
 #endif
 
-
 #ifdef L_frexpf
 float frexpf (float x, int *_exp)
 {
@@ -283,7 +227,6 @@ float frexpf (float x, int *_exp)
 }
 #endif
 
-
 #ifdef L_hypotf
 float hypotf (float x, float y)
 {
@@ -291,15 +234,25 @@ float hypotf (float x, float y)
 }
 #endif
 
-
 #ifdef L_ilogbf
-int ilogbf (float x)
+int_WRAPPER1(ilogb)
+#endif
+
+#ifdef L_j0f
+WRAPPER1(j0)
+#endif
+
+#ifdef L_j1f
+WRAPPER1(j1)
+#endif
+
+#ifdef L_jnf
+float jnf(int n, float x)
 {
-       return (int) ilogb( (double)x );
+       return (float) jn(n, (double)x);
 }
 #endif
 
-
 #ifdef L_ldexpf
 float ldexpf (float x, int _exp)
 {
@@ -307,115 +260,67 @@ float ldexpf (float x, int _exp)
 }
 #endif
 
-
 #ifdef L_lgammaf
-float lgammaf (float x)
-{
-       return (float) lgamma( (double)x );
-}
+WRAPPER1(lgamma)
 #endif
 
-
 #ifdef L_llrintf
-long long llrintf (float x)
-{
-       return (long long) llrint( (double)x );
-}
+long_long_WRAPPER1(llrint)
 #endif
 
-
 #ifdef L_llroundf
-long long llroundf (float x)
-{
-       return (long long) llround( (double)x );
-}
+long_long_WRAPPER1(llround)
 #endif
 
-
 #ifdef L_log10f
-float log10f (float x)
-{
-       return (float) log10( (double)x );
-}
+WRAPPER1(log10)
 #endif
 
-
 #ifdef L_log1pf
-float log1pf (float x)
-{
-       return (float) log1p( (double)x );
-}
+WRAPPER1(log1p)
 #endif
 
-
 #ifdef L_log2f
-float log2f (float x)
-{
-       return (float) log2( (double)x );
-}
+WRAPPER1(log2)
 #endif
 
-
 #ifdef L_logbf
-float logbf (float x)
-{
-       return (float) logb( (double)x );
-}
+WRAPPER1(logb)
 #endif
 
-
 #ifdef L_logf
-float logf (float x)
-{
-       return (float) log( (double)x );
-}
+WRAPPER1(log)
 #endif
 
-
 #ifdef L_lrintf
-long lrintf (float x)
-{
-       return (long) lrint( (double)x );
-}
+long_WRAPPER1(lrint)
 #endif
 
-
 #ifdef L_lroundf
-long lroundf (float x)
-{
-       return (long) lround( (double)x );
-}
+long_WRAPPER1(lround)
 #endif
 
-
 #ifdef L_modff
 float modff (float x, float *iptr)
 {
        double y, result;
-       result = modf ( x, &y );
+       result = modf( x, &y );
        *iptr = (float)y;
        return (float) result;
-
 }
 #endif
 
-
 #ifdef L_nearbyintf
-float nearbyintf (float x)
-{
-       return (float) nearbyint( (double)x );
-}
+WRAPPER1(nearbyint)
 #endif
 
-
 #ifdef L_nexttowardf
 float nexttowardf (float x, long double y)
 {
-       return (float) nexttoward( (double)x, (double)y );
+       return (float) nexttoward( (double)x, (long double)y );
 }
 #endif
 
-
 #ifdef L_powf
 float powf (float x, float y)
 {
@@ -423,7 +328,6 @@ float powf (float x, float y)
 }
 #endif
 
-
 #ifdef L_remainderf
 float remainderf (float x, float y)
 {
@@ -431,7 +335,6 @@ float remainderf (float x, float y)
 }
 #endif
 
-
 #ifdef L_remquof
 float remquof (float x, float y, int *quo)
 {
@@ -439,23 +342,14 @@ float remquof (float x, float y, int *quo)
 }
 #endif
 
-
 #ifdef L_rintf
-float rintf (float x)
-{
-       return (float) rint( (double)x );
-}
+WRAPPER1(rint)
 #endif
 
-
 #ifdef L_roundf
-float roundf (float x)
-{
-       return (float) round( (double)x );
-}
+WRAPPER1(round)
 #endif
 
-
 #ifdef L_scalblnf
 float scalblnf (float x, long _exp)
 {
@@ -463,7 +357,6 @@ float scalblnf (float x, long _exp)
 }
 #endif
 
-
 #ifdef L_scalbnf
 float scalbnf (float x, int _exp)
 {
@@ -471,70 +364,36 @@ float scalbnf (float x, int _exp)
 }
 #endif
 
-
 #ifdef L_sinf
-float sinf (float x)
-{
-       return (float) sin( (double)x );
-}
+WRAPPER1(sin)
+libm_hidden_def(sinf)
 #endif
 
-
 #ifdef L_sinhf
-float sinhf (float x)
-{
-       return (float) sinh( (double)x );
-}
+WRAPPER1(sinh)
 #endif
 
-
 #ifdef L_sqrtf
-float sqrtf (float x)
-{
-       return (float) sqrt( (double)x );
-}
+WRAPPER1(sqrt)
 #endif
 
-
 #ifdef L_tanf
-float tanf (float x)
-{
-       return (float) tan( (double)x );
-}
+WRAPPER1(tan)
 #endif
 
-
 #ifdef L_tanhf
-float tanhf (float x)
-{
-       return (float) tanh( (double)x );
-}
+WRAPPER1(tanh)
 #endif
 
-
 #ifdef L_tgammaf
-float tgammaf (float x)
-{
-       return (float) tgamma( (double)x );
-}
+WRAPPER1(tgamma)
 #endif
 
-
 #ifdef L_truncf
-float truncf (float x)
-{
-       return (float) trunc( (double)x );
-}
+WRAPPER1(trunc)
 #endif
 
-#ifdef L_fmaf
-float fmaf (float x, float y, float z)
-{
-       return (float) fma( (double)x, (double)y, (double)z );
-}
-#endif
-
-#ifdef L_scalbf
+#if defined L_scalbf && defined __UCLIBC_SUSV3_LEGACY__
 float scalbf (float x, float y)
 {
        return (float) scalb( (double)x, (double)y );
@@ -542,15 +401,24 @@ float scalbf (float x, float y)
 #endif
 
 #ifdef L_gammaf
-float gammaf (float x)
-{
-       return (float) gamma( (double)x );
-}
+WRAPPER1(gamma)
 #endif
 
 #ifdef L_significandf
-float significandf (float x)
+WRAPPER1(significand)
+#endif
+
+#ifdef L_y0f
+WRAPPER1(y0)
+#endif
+
+#ifdef L_y1f
+WRAPPER1(y1)
+#endif
+
+#ifdef L_ynf
+float ynf(int n, float x)
 {
-       return (float) significand( (double)x );
+       return (float) yn(n, (double)x);
 }
 #endif