[T106][ZXW-22]7520V3SCV2.01.01.02P42U09_VEC_V0.8_AP_VEC origin source commit
Change-Id: Ic6e05d89ecd62fc34f82b23dcf306c93764aec4b
diff --git a/ap/build/uClibc/libm/float_wrappers.c b/ap/build/uClibc/libm/float_wrappers.c
new file mode 100644
index 0000000..82b7963
--- /dev/null
+++ b/ap/build/uClibc/libm/float_wrappers.c
@@ -0,0 +1,404 @@
+/* vi: set sw=4 ts=4: */
+/*
+ * Wrapper functions implementing all the float math functions
+ * defined by SuSv3 by actually calling the double version of
+ * each function and then casting the result back to a float
+ * to return to the user.
+ *
+ * Copyright (C) 2005 by Erik Andersen <andersen@uclibc.org>
+ *
+ * GNU Lesser General Public License version 2.1 or later.
+ */
+
+#include <features.h>
+/* Prevent math.h from defining colliding inlines */
+#undef __USE_EXTERN_INLINES
+#include <math.h>
+#include <complex.h>
+
+
+#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); \
+}
+
+
+/* For the time being, do _NOT_ implement these functions
+ * that are defined by SuSv3 [because we don't need them
+ * and nobody asked to include them] */
+#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_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);*/
+
+/* Implement the following, as defined by SuSv3 */
+#if 0
+float acosf(float);
+float acoshf(float);
+float asinf(float);
+float asinhf(float);
+float atan2f(float, float);
+float atanf(float);
+float atanhf(float);
+float cargf(float complex);
+float cbrtf(float);
+float ceilf(float);
+float copysignf(float, float);
+float cosf(float);
+float coshf(float);
+float erfcf(float);
+float erff(float);
+float exp2f(float);
+float expf(float);
+float expm1f(float);
+float fabsf(float);
+float floorf(float);
+float fmodf(float, float);
+float frexpf(float value, int *);
+float hypotf(float, float);
+int ilogbf(float);
+float ldexpf(float, int);
+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);
+float modff(float, float *);
+float powf(float, float);
+float remainderf(float, float);
+float rintf(float);
+float roundf(float);
+float scalbnf(float, int);
+float sinf(float);
+float sinhf(float);
+float sqrtf(float);
+float tanf(float);
+float tanhf(float);
+#endif
+
+#ifdef L_acosf
+WRAPPER1(acos)
+#endif
+
+#ifdef L_acoshf
+WRAPPER1(acosh)
+#endif
+
+#ifdef L_asinf
+WRAPPER1(asin)
+#endif
+
+#ifdef L_asinhf
+WRAPPER1(asinh)
+#endif
+
+#ifdef L_atan2f
+float atan2f (float x, float y)
+{
+ return (float) atan2( (double)x, (double)y );
+}
+#endif
+
+#ifdef L_atanf
+WRAPPER1(atan)
+#endif
+
+#ifdef L_atanhf
+WRAPPER1(atanh)
+#endif
+
+#ifdef L_cargf
+float cargf (float complex x)
+{
+ return (float) carg( (double complex)x );
+}
+#endif
+
+#ifdef L_cbrtf
+WRAPPER1(cbrt)
+#endif
+
+#ifdef L_ceilf
+WRAPPER1(ceil)
+#endif
+
+#ifdef L_copysignf
+float copysignf (float x, float y)
+{
+ return (float) copysign( (double)x, (double)y );
+}
+#endif
+
+#ifdef L_cosf
+WRAPPER1(cos)
+#endif
+
+#ifdef L_coshf
+WRAPPER1(cosh)
+#endif
+
+#ifdef L_erfcf
+WRAPPER1(erfc)
+#endif
+
+#ifdef L_erff
+WRAPPER1(erf)
+#endif
+
+#ifdef L_exp2f
+WRAPPER1(exp2)
+#endif
+
+#ifdef L_expf
+WRAPPER1(exp)
+#endif
+
+#ifdef L_expm1f
+WRAPPER1(expm1)
+#endif
+
+#ifdef L_fabsf
+WRAPPER1(fabs)
+#endif
+
+#ifdef L_fdimf
+float fdimf (float x, float y)
+{
+ return (float) fdim( (double)x, (double)y );
+}
+#endif
+
+#ifdef L_floorf
+WRAPPER1(floor)
+#endif
+
+#ifdef L_fmaf
+float fmaf (float x, float y, float z)
+{
+ return (float) fma( (double)x, (double)y, (double)z );
+}
+#endif
+
+#ifdef L_fmaxf
+float fmaxf (float x, float y)
+{
+ return (float) fmax( (double)x, (double)y );
+}
+#endif
+
+#ifdef L_fminf
+float fminf (float x, float y)
+{
+ return (float) fmin( (double)x, (double)y );
+}
+#endif
+
+#ifdef L_fmodf
+float fmodf (float x, float y)
+{
+ return (float) fmod( (double)x, (double)y );
+}
+#endif
+
+#ifdef L_frexpf
+float frexpf (float x, int *_exp)
+{
+ return (float) frexp( (double)x, _exp );
+}
+#endif
+
+#ifdef L_hypotf
+float hypotf (float x, float y)
+{
+ return (float) hypot( (double)x, (double)y );
+}
+#endif
+
+#ifdef L_ilogbf
+int_WRAPPER1(ilogb)
+#endif
+
+#ifdef L_ldexpf
+float ldexpf (float x, int _exp)
+{
+ return (float) ldexp( (double)x, _exp );
+}
+#endif
+
+#ifdef L_lgammaf
+WRAPPER1(lgamma)
+#endif
+
+#ifdef L_llrintf
+long_long_WRAPPER1(llrint)
+#endif
+
+#ifdef L_llroundf
+long_long_WRAPPER1(llround)
+#endif
+
+#ifdef L_log10f
+WRAPPER1(log10)
+#endif
+
+#ifdef L_log1pf
+WRAPPER1(log1p)
+#endif
+
+#ifdef L_log2f
+WRAPPER1(log2)
+#endif
+
+#ifdef L_logbf
+WRAPPER1(logb)
+#endif
+
+#ifdef L_logf
+WRAPPER1(log)
+#endif
+
+#ifdef L_lrintf
+long_WRAPPER1(lrint)
+#endif
+
+#ifdef L_lroundf
+long_WRAPPER1(lround)
+#endif
+
+#ifdef L_modff
+float modff (float x, float *iptr)
+{
+ double y, result;
+ result = modf( x, &y );
+ *iptr = (float)y;
+ return (float) result;
+}
+#endif
+
+#ifdef L_nearbyintf
+WRAPPER1(nearbyint)
+#endif
+
+#ifdef L_nexttowardf
+float nexttowardf (float x, long double y)
+{
+ return (float) nexttoward( (double)x, (double)y );
+}
+#endif
+
+#ifdef L_powf
+float powf (float x, float y)
+{
+ return (float) pow( (double)x, (double)y );
+}
+#endif
+
+#ifdef L_remainderf
+float remainderf (float x, float y)
+{
+ return (float) remainder( (double)x, (double)y );
+}
+#endif
+
+#ifdef L_remquof
+float remquof (float x, float y, int *quo)
+{
+ return (float) remquo( (double)x, (double)y, quo );
+}
+#endif
+
+#ifdef L_rintf
+WRAPPER1(rint)
+#endif
+
+#ifdef L_roundf
+WRAPPER1(round)
+#endif
+
+#ifdef L_scalblnf
+float scalblnf (float x, long _exp)
+{
+ return (float) scalbln( (double)x, _exp );
+}
+#endif
+
+#ifdef L_scalbnf
+float scalbnf (float x, int _exp)
+{
+ return (float) scalbn( (double)x, _exp );
+}
+#endif
+
+#ifdef L_sinf
+WRAPPER1(sin)
+#endif
+
+#ifdef L_sinhf
+WRAPPER1(sinh)
+#endif
+
+#ifdef L_sqrtf
+WRAPPER1(sqrt)
+#endif
+
+#ifdef L_tanf
+WRAPPER1(tan)
+#endif
+
+#ifdef L_tanhf
+WRAPPER1(tanh)
+#endif
+
+#ifdef L_tgammaf
+WRAPPER1(tgamma)
+#endif
+
+#ifdef L_truncf
+WRAPPER1(trunc)
+#endif
+
+#ifdef L_fmaf
+float fmaf (float x, float y, float z)
+{
+ return (float) fma( (double)x, (double)y, (double)z );
+}
+#endif
+
+#if defined L_scalbf && defined __UCLIBC_SUSV3_LEGACY__
+float scalbf (float x, float y)
+{
+ return (float) scalb( (double)x, (double)y );
+}
+#endif
+
+#ifdef L_gammaf
+WRAPPER1(gamma)
+#endif
+
+#ifdef L_significandf
+WRAPPER1(significand)
+#endif