Add missing long double functions to Cygwin
This patch adds the long double functions missing in newlib to Cygwin. Apart from some self-written additions (exp10l, finite{f,l}, isinf{f,l}, isnan{f,l}, pow10l) the files are taken from the Mingw-w64 math lib. Minor changes were required, e.g. substitue _WIN64 with __x86_64__ and fixing __FLT_RPT_DOMAIN/__FLT_RPT_ERANGE for Cygwin. Cygwin: * math: New subdir with math functions. * Makefile.in (VPATH): Add math subdir. (MATH_OFILES): List of object files collected from building files in math subdir. (DLL_OFILES): Add $(MATH_OFILES). ${CURDIR}/libm.a: Add $(MATH_OFILES) to build. * common.din: Add new functions from math subdir. * i686.din: Align to new math subdir. Remove functions now commonly available. * x86_64.din: Ditto. * math.h: math.h wrapper to define mingw structs used in some files in math subdir. * include/cygwin/version.h: Bump API minor version. newlib: * libc/include/complex.h: Add prototypes for complex long double functions. Only define for Cygwin. * libc/include/math.h: Additionally enable prototypes of long double functions for Cygwin. Add Cygwin-only prototypes for dreml, sincosl, exp10l and pow10l. Explain why we don't add them to newlib. * libc/include/tgmath.h: Enable long double handling on Cygwin. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
This commit is contained in:
@ -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
|
||||
|
Reference in New Issue
Block a user