diff options
Diffstat (limited to 'newlib/libc/include/math.h')
-rw-r--r-- | newlib/libc/include/math.h | 26 |
1 files changed, 22 insertions, 4 deletions
diff --git a/newlib/libc/include/math.h b/newlib/libc/include/math.h index eeedeba92..e5d612367 100644 --- a/newlib/libc/include/math.h +++ b/newlib/libc/include/math.h @@ -421,8 +421,12 @@ extern float log2f _PARAMS((float)); extern float hypotf _PARAMS((float, float)); #endif /* ! defined (_REENT_ONLY) */ -/* On platforms where long double equals double. */ -#ifdef _LDBL_EQ_DBL +/* Newlib doesn't fully support long double math functions so far. + On platforms where long double equals double the long double functions + simply call the double functions. On Cygwin the long double functions + are implemented independently from newlib to be able to use optimized + assembler functions despite using the Microsoft x86_64 ABI. */ +#if defined (_LDBL_EQ_DBL) || defined (__CYGWIN__) /* Reentrant ANSI C functions. */ #ifndef __math_68881 extern long double atanl _PARAMS((long double)); @@ -492,7 +496,7 @@ extern long double lgammal _PARAMS((long double)); extern long double erfl _PARAMS((long double)); extern long double erfcl _PARAMS((long double)); #endif /* ! defined (_REENT_ONLY) */ -#else /* !_LDBL_EQ_DBL */ +#else /* !_LDBL_EQ_DBL && !__CYGWIN__ */ extern long double hypotl _PARAMS((long double, long double)); extern long double sqrtl _PARAMS((long double)); #ifdef __i386__ @@ -501,13 +505,16 @@ extern _LONG_DOUBLE rintl _PARAMS((_LONG_DOUBLE)); extern long int lrintl _PARAMS((_LONG_DOUBLE)); extern long long int llrintl _PARAMS((_LONG_DOUBLE)); #endif /* __i386__ */ -#endif /* !_LDBL_EQ_DBL */ +#endif /* !_LDBL_EQ_DBL && !__CYGWIN__ */ #endif /* __ISO_C_VISIBLE >= 1999 */ #if __MISC_VISIBLE extern double drem _PARAMS((double, double)); extern float dremf _PARAMS((float, float)); +#ifdef __CYGWIN__ +extern float dreml _PARAMS((long double, long double)); +#endif /* __CYGWIN__ */ extern double gamma_r _PARAMS((double, int *)); extern double lgamma_r _PARAMS((double, int *)); extern float gammaf_r _PARAMS((float, int *)); @@ -536,6 +543,9 @@ extern float jnf _PARAMS((int, float)); #if __GNU_VISIBLE extern void sincos _PARAMS((double, double *, double *)); extern void sincosf _PARAMS((float, float *, float *)); +#ifdef __CYGWIN__ +extern void sincosl _PARAMS((long double, long double *, long double *)); +#endif /* __CYGWIN__ */ # ifndef exp10 extern double exp10 _PARAMS((double)); # endif @@ -548,6 +558,14 @@ extern float exp10f _PARAMS((float)); # ifndef pow10f extern float pow10f _PARAMS((float)); # endif +#ifdef __CYGWIN__ +# ifndef exp10l +extern float exp10l _PARAMS((float)); +# endif +# ifndef pow10l +extern float pow10l _PARAMS((float)); +# endif +#endif /* __CYGWIN__ */ #endif /* __GNU_VISIBLE */ #if __MISC_VISIBLE || __XSI_VISIBLE |