https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=792e51b721491b19904e046124fb8c4c0e83f621
commit 792e51b721491b19904e046124fb8c4c0e83f621 Author: Corinna Vinschen <[email protected]> Date: Mon Mar 28 19:35:20 2016 +0200 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 <[email protected]> Diff: --- newlib/libc/include/complex.h | 27 +- newlib/libc/include/math.h | 26 +- newlib/libc/include/tgmath.h | 7 +- winsup/cygwin/Makefile.in | 100 ++- winsup/cygwin/common.din | 102 ++- winsup/cygwin/i686.din | 27 +- winsup/cygwin/include/cygwin/version.h | 13 +- winsup/cygwin/math.h | 43 ++ winsup/cygwin/math/DISCLAIMER.PD | 9 + winsup/cygwin/math/acosh.def.h | 70 ++ winsup/cygwin/math/acoshl.c | 46 ++ winsup/cygwin/math/acosl.c | 22 + winsup/cygwin/math/asinhl.c | 33 + winsup/cygwin/math/asinl.c | 27 + winsup/cygwin/math/atan2l.c | 14 + winsup/cygwin/math/atanhl.c | 34 + winsup/cygwin/math/atanl.c | 17 + winsup/cygwin/math/cabs.def.h | 49 ++ winsup/cygwin/math/cabsl.c | 48 ++ winsup/cygwin/math/cacos.def.h | 57 ++ winsup/cygwin/math/cacosh.def.h | 100 +++ winsup/cygwin/math/cacosl.c | 50 ++ winsup/cygwin/math/carg.def.h | 49 ++ winsup/cygwin/math/cargl.c | 48 ++ winsup/cygwin/math/casin.def.h | 61 ++ winsup/cygwin/math/casinh.def.h | 99 +++ winsup/cygwin/math/casinl.c | 50 ++ winsup/cygwin/math/catan.def.h | 61 ++ winsup/cygwin/math/catanh.def.h | 93 +++ winsup/cygwin/math/catanl.c | 50 ++ winsup/cygwin/math/cbrtl.c | 80 ++ winsup/cygwin/math/ccos.def.h | 54 ++ winsup/cygwin/math/ccosh.def.h | 95 +++ winsup/cygwin/math/ccosl.c | 50 ++ winsup/cygwin/math/ceil.S | 124 +++ winsup/cygwin/math/ceilf.S | 120 +++ winsup/cygwin/math/ceill.S | 64 ++ winsup/cygwin/math/cephes_emath.c | 1283 ++++++++++++++++++++++++++++++++ winsup/cygwin/math/cephes_emath.h | 719 ++++++++++++++++++ winsup/cygwin/math/cephes_mconf.h | 417 +++++++++++ winsup/cygwin/math/cexp.def.h | 111 +++ winsup/cygwin/math/cexpl.c | 48 ++ winsup/cygwin/math/cimag.def.h | 49 ++ winsup/cygwin/math/cimagl.c | 48 ++ winsup/cygwin/math/clog.def.h | 71 ++ winsup/cygwin/math/clog10.def.h | 71 ++ winsup/cygwin/math/clog10l.c | 48 ++ winsup/cygwin/math/clogl.c | 48 ++ winsup/cygwin/math/complex_internal.h | 153 ++++ winsup/cygwin/math/conj.def.h | 49 ++ winsup/cygwin/math/conjl.c | 48 ++ winsup/cygwin/math/copysignl.S | 56 ++ winsup/cygwin/math/cos.def.h | 65 ++ winsup/cygwin/math/coshl.c | 45 ++ winsup/cygwin/math/cosl.c | 46 ++ winsup/cygwin/math/cosl_internal.S | 55 ++ winsup/cygwin/math/cossin.c | 75 ++ winsup/cygwin/math/cpow.def.h | 49 ++ winsup/cygwin/math/cpowl.c | 48 ++ winsup/cygwin/math/cproj.def.h | 58 ++ winsup/cygwin/math/cprojl.c | 48 ++ winsup/cygwin/math/creal.def.h | 49 ++ winsup/cygwin/math/creall.c | 48 ++ winsup/cygwin/math/csin.def.h | 61 ++ winsup/cygwin/math/csinh.def.h | 107 +++ winsup/cygwin/math/csinl.c | 50 ++ winsup/cygwin/math/csqrt.def.h | 122 +++ winsup/cygwin/math/csqrtl.c | 48 ++ winsup/cygwin/math/ctan.def.h | 61 ++ winsup/cygwin/math/ctanh.def.h | 94 +++ winsup/cygwin/math/ctanl.c | 50 ++ winsup/cygwin/math/erfl.c | 303 ++++++++ winsup/cygwin/math/exp.def.h | 136 ++++ winsup/cygwin/math/exp10l.c | 8 + winsup/cygwin/math/exp2.S | 94 +++ winsup/cygwin/math/exp2l.S | 92 +++ winsup/cygwin/math/expl.c | 46 ++ winsup/cygwin/math/expm1.def.h | 72 ++ winsup/cygwin/math/expm1l.c | 46 ++ winsup/cygwin/math/fabsl.c | 18 + winsup/cygwin/math/fastmath.h | 120 +++ winsup/cygwin/math/fdiml.c | 24 + winsup/cygwin/math/finite.c | 19 + winsup/cygwin/math/floorl.S | 72 ++ winsup/cygwin/math/fmal.c | 12 + winsup/cygwin/math/fmaxl.c | 13 + winsup/cygwin/math/fminl.c | 12 + winsup/cygwin/math/fmodl.c | 20 + winsup/cygwin/math/frexpl.S | 130 ++++ winsup/cygwin/math/ilogbl.S | 65 ++ winsup/cygwin/math/internal_logl.S | 66 ++ winsup/cygwin/math/isinf.c | 18 + winsup/cygwin/math/isnan.c | 18 + winsup/cygwin/math/ldexpl.c | 23 + winsup/cygwin/math/lgammal.c | 342 +++++++++ winsup/cygwin/math/llrint.c | 18 + winsup/cygwin/math/llrintf.c | 17 + winsup/cygwin/math/llrintl.c | 18 + winsup/cygwin/math/llroundl.c | 38 + winsup/cygwin/math/log.def.h | 69 ++ winsup/cygwin/math/log10l.S | 93 +++ winsup/cygwin/math/log1pl.S | 102 +++ winsup/cygwin/math/log2l.S | 87 +++ winsup/cygwin/math/logbl.c | 22 + winsup/cygwin/math/logl.c | 46 ++ winsup/cygwin/math/lrint.c | 30 + winsup/cygwin/math/lrintf.c | 30 + winsup/cygwin/math/lrintl.c | 18 + winsup/cygwin/math/lroundl.c | 37 + winsup/cygwin/math/modfl.c | 41 + winsup/cygwin/math/nearbyint.S | 57 ++ winsup/cygwin/math/nearbyintf.S | 57 ++ winsup/cygwin/math/nearbyintl.S | 58 ++ winsup/cygwin/math/nextafterl.c | 71 ++ winsup/cygwin/math/nexttoward.c | 47 ++ winsup/cygwin/math/nexttowardf.c | 43 ++ winsup/cygwin/math/pow.def.h | 215 ++++++ winsup/cygwin/math/pow10l.c | 8 + winsup/cygwin/math/powi.def.h | 153 ++++ winsup/cygwin/math/powil.c | 46 ++ winsup/cygwin/math/powl.c | 46 ++ winsup/cygwin/math/remainder.S | 40 + winsup/cygwin/math/remainderf.S | 40 + winsup/cygwin/math/remainderl.S | 39 + winsup/cygwin/math/remquol.S | 75 ++ winsup/cygwin/math/rint.c | 29 + winsup/cygwin/math/rintf.c | 29 + winsup/cygwin/math/rintl.c | 16 + winsup/cygwin/math/roundl.c | 26 + winsup/cygwin/math/scalbl.S | 35 + winsup/cygwin/math/scalbnl.S | 41 + winsup/cygwin/math/sin.def.h | 65 ++ winsup/cygwin/math/sinhl.c | 100 +++ winsup/cygwin/math/sinl.c | 46 ++ winsup/cygwin/math/sinl_internal.S | 58 ++ winsup/cygwin/math/sqrt.def.h | 94 +++ winsup/cygwin/math/sqrtl.c | 46 ++ winsup/cygwin/math/tanhl.c | 92 +++ winsup/cygwin/math/tanl.S | 62 ++ winsup/cygwin/math/tgammal.c | 393 ++++++++++ winsup/cygwin/math/truncl.c | 26 + winsup/cygwin/x86_64.din | 6 - 142 files changed, 10969 insertions(+), 42 deletions(-) diff --git a/newlib/libc/include/complex.h b/newlib/libc/include/complex.h index 3150f34..89d6162 100644 --- a/newlib/libc/include/complex.h +++ b/newlib/libc/include/complex.h @@ -108,12 +108,10 @@ long double cimagl(long double complex); /* 7.3.9.3 The conj functions */ double complex conj(double complex); float complex conjf(float complex); -/*long double complex conjl(long double complex); */ /* 7.3.9.4 The cproj functions */ double complex cproj(double complex); float complex cprojf(float complex); -/*long double complex cprojl(long double complex); */ /* 7.3.9.5 The creal functions */ double creal(double complex); @@ -125,6 +123,31 @@ double complex clog10(double complex); float complex clog10f(float complex); #endif +#if defined(__CYGWIN__) +long double complex cacosl(long double complex); +long double complex casinl(long double complex); +long double complex catanl(long double complex); +long double complex ccosl(long double complex); +long double complex csinl(long double complex); +long double complex ctanl(long double complex); +long double complex cacoshl(long double complex); +long double complex casinhl(long double complex); +long double complex catanhl(long double complex); +long double complex ccoshl(long double complex); +long double complex csinhl(long double complex); +long double complex ctanhl(long double complex); +long double complex cexpl(long double complex); +long double complex clogl(long double complex); +long double complex cpowl(long double complex, long double complex); +long double complex csqrtl(long double complex); +long double cargl(long double complex); +long double complex conjl(long double complex); +long double complex cprojl(long double complex); +#if __GNU_VISIBLE +long double complex clog10l(long double complex); +#endif +#endif /* __CYGWIN__ */ + __END_DECLS #endif /* ! _COMPLEX_H */ diff --git a/newlib/libc/include/math.h b/newlib/libc/include/math.h index eeedeba..e5d6123 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 diff --git a/newlib/libc/include/tgmath.h b/newlib/libc/include/tgmath.h index f9c8311..97dc50e 100644 --- a/newlib/libc/include/tgmath.h +++ b/newlib/libc/include/tgmath.h @@ -79,7 +79,7 @@ __tg_type3(__e1, __e2, __e3, long double _Complex) || \ __tg_type3(__e1, __e2, __e3, __typeof__(_Complex_I))) -#ifdef _LDBL_EQ_DBL +#if defined (_LDBL_EQ_DBL) || defined (__CYGWIN__) #define __tg_impl_simple(x, y, z, fn, fnf, fnl, ...) \ __builtin_choose_expr(__tg_type_corr(x, y, z, long double), \ fnl(__VA_ARGS__), __builtin_choose_expr( \ @@ -161,9 +161,10 @@ #define lround(__x) __tg_simple(__x, lround) #define nearbyint(__x) __tg_simple(__x, nearbyint) #define nextafter(__x, __y) __tg_simple2(__x, __y, nextafter) -/* not yet implemented even for _LDBL_EQ_DBL platforms +/* not yet implemented even for _LDBL_EQ_DBL platforms */ +#ifdef __CYGWIN__ #define nexttoward(__x, __y) __tg_simplev(__x, nexttoward, __x, __y) -*/ +#endif #define remainder(__x, __y) __tg_simple2(__x, __y, remainder) #define remquo(__x, __y, __z) __tg_impl_simple(__x, __x, __y, remquo, remquof, \ remquol, __x, __y, __z) diff --git a/winsup/cygwin/Makefile.in b/winsup/cygwin/Makefile.in index 6695488..bcfaa2f 100644 --- a/winsup/cygwin/Makefile.in +++ b/winsup/cygwin/Makefile.in @@ -29,7 +29,7 @@ export CCWRAP_HEADERS:=. ${srcdir} export CCWRAP_SYSTEM_HEADERS:=@cygwin_headers@ @newlib_headers@ export CCWRAP_DIRAFTER_HEADERS:=@windows_headers@ -VPATH+=$(srcdir)/regex $(srcdir)/lib $(srcdir)/libc +VPATH+=$(srcdir)/regex $(srcdir)/lib $(srcdir)/libc $(srcdir)/math target_cpu:=@target_cpu@ target_alias:=@target_alias@ @@ -153,6 +153,101 @@ DLL_IMPORTS:=${shell $(CC) -print-file-name=w32api/libkernel32.a} ${shell $(CC) MT_SAFE_OBJECTS:= # +MATH_OFILES:= \ + acoshl.o \ + acosl.o \ + asinhl.o \ + asinl.o \ + atan2l.o \ + atanhl.o \ + atanl.o \ + cabsl.o \ + cacosl.o \ + cargl.o \ + casinl.o \ + catanl.o \ + cbrtl.o \ + ccosl.o \ + ceill.o \ + cephes_emath.o \ + cexpl.o \ + cimagl.o \ + clog10l.o \ + clogl.o \ + conjl.o \ + copysignl.o \ + coshl.o \ + cosl.o \ + cosl_internal.o \ + cossin.o \ + cpowl.o \ + cprojl.o \ + creall.o \ + csinl.o \ + csqrtl.o \ + ctanl.o \ + erfl.o \ + exp10l.o \ + exp2l.o \ + expl.o \ + expm1l.o \ + fabsl.o \ + fdiml.o \ + finite.o \ + floorl.o \ + fmal.o \ + fmaxl.o \ + fminl.o \ + fmodl.o \ + frexpl.o \ + ilogbl.o \ + internal_logl.o \ + isinf.o \ + isnan.o \ + ldexpl.o \ + lgammal.o \ + llrint.o \ + llrintf.o \ + llrintl.o \ + llroundl.o \ + log10l.o \ + log1pl.o \ + log2l.o \ + logbl.o \ + logl.o \ + lrint.o \ + lrintf.o \ + lrintl.o \ + lroundl.o \ + modfl.o \ + nearbyint.o \ + nearbyintf.o \ + nearbyintl.o \ + nextafterl.o \ + nexttoward.o \ + nexttowardf.o \ + pow10l.o \ + powil.o \ + powl.o \ + remainder.o \ + remainderf.o \ + remainderl.o \ + remquol.o \ + rint.o \ + rintf.o \ + rintl.o \ + roundl.o \ + scalbl.o \ + scalbnl.o \ + sinhl.o \ + sinl.o \ + sinl_internal.o \ + sqrtl.o \ + tanhl.o \ + tanl.o \ + tgammal.o \ + truncl.o + DLL_OFILES:= \ advapi32.o \ arc4random_stir.o \ @@ -305,6 +400,7 @@ DLL_OFILES:= \ xsique.o \ $(EXTRA_OFILES) \ $(MALLOC_OFILES) \ + $(MATH_OFILES) \ $(MT_SAFE_OBJECTS) EXCLUDE_STATIC_OFILES:=$(addprefix --exclude=,\ @@ -626,7 +722,7 @@ $(srcdir)/devices.cc: gendevices devices.in devices.h ${CURDIR}/libc.a: ${LIB_NAME} ${CURDIR}/libm.a libpthread.a libutil.a ${speclib} -v ${@F} -${CURDIR}/libm.a: ${LIB_NAME} $(LIBM) +${CURDIR}/libm.a: ${LIB_NAME} $(LIBM) $(MATH_OFILES) ${speclib} ${@F} libpthread.a: ${LIB_NAME} pthread.o thread.o diff --git a/winsup/cygwin/common.din b/winsup/cygwin/common.din index 7e72abe..c2f5f0f 100644 --- a/winsup/cygwin/common.din +++ b/winsup/cygwin/common.din @@ -64,10 +64,10 @@ __getpagesize = getpagesize SIGFE __getreent NOSIGFE __gnu_basename NOSIGFE __infinity NOSIGFE -__isinfd NOSIGFE -__isinff NOSIGFE -__isnand NOSIGFE -__isnanf NOSIGFE +__isinfd = isinf NOSIGFE +__isinff = isinff NOSIGFE +__isnand = isnan NOSIGFE +__isnanf = isnanf NOSIGFE __locale_mb_cur_max NOSIGFE __main NOSIGFE __mempcpy = mempcpy NOSIGFE @@ -169,6 +169,8 @@ acos NOSIGFE acosf NOSIGFE acosh NOSIGFE acoshf NOSIGFE +acoshl NOSIGFE +acosl NOSIGFE alarm SIGFE aligned_alloc SIGFE alphasort NOSIGFE @@ -195,14 +197,19 @@ asin NOSIGFE asinf NOSIGFE asinh NOSIGFE asinhf NOSIGFE +asinhl NOSIGFE +asinl NOSIGFE asnprintf SIGFE asprintf SIGFE atan NOSIGFE atan2 NOSIGFE atan2f NOSIGFE +atan2l NOSIGFE atanf NOSIGFE atanh NOSIGFE atanhf NOSIGFE +atanhl NOSIGFE +atanl NOSIGFE atexit = cygwin_atexit SIGFE atof SIGFE atoff SIGFE @@ -226,28 +233,40 @@ cacos NOSIGFE cacosf NOSIGFE cacosh NOSIGFE cacoshf NOSIGFE +cacoshl NOSIGFE +cacosl NOSIGFE calloc SIGFE canonicalize_file_name SIGFE carg NOSIGFE cargf NOSIGFE +cargl NOSIGFE casin NOSIGFE casinf NOSIGFE casinh NOSIGFE casinhf NOSIGFE +casinhl NOSIGFE +casinl NOSIGFE catan NOSIGFE catanf NOSIGFE catanh NOSIGFE catanhf NOSIGFE +catanhl NOSIGFE +catanl NOSIGFE cbrt NOSIGFE cbrtf NOSIGFE +cbrtl NOSIGFE ccos NOSIGFE ccosf NOSIGFE ccosh NOSIGFE ccoshf NOSIGFE +ccoshl NOSIGFE +ccosl NOSIGFE ceil NOSIGFE ceilf NOSIGFE +ceill NOSIGFE cexp NOSIGFE cexpf NOSIGFE +cexpl NOSIGFE cfgetispeed NOSIGFE cfgetospeed NOSIGFE cfmakeraw NOSIGFE @@ -274,24 +293,32 @@ clock_settime SIGFE clog NOSIGFE clog10 NOSIGFE clog10f NOSIGFE +clog10l NOSIGFE clogf NOSIGFE +clogl NOSIGFE close SIGFE closedir SIGFE closelog SIGFE confstr NOSIGFE conj NOSIGFE conjf NOSIGFE +conjl NOSIGFE connect = cygwin_connect SIGFE copysign NOSIGFE copysignf NOSIGFE +copysignl NOSIGFE cos NOSIGFE cosf NOSIGFE cosh NOSIGFE coshf NOSIGFE +coshl NOSIGFE +cosl NOSIGFE cpow NOSIGFE cpowf NOSIGFE +cpowl NOSIGFE cproj NOSIGFE cprojf NOSIGFE +cprojl NOSIGFE creal NOSIGFE crealf NOSIGFE creall NOSIGFE @@ -300,12 +327,17 @@ csin NOSIGFE csinf NOSIGFE csinh NOSIGFE csinhf NOSIGFE +csinhl NOSIGFE +csinl NOSIGFE csqrt NOSIGFE csqrtf NOSIGFE +csqrtl NOSIGFE ctan NOSIGFE ctanf NOSIGFE ctanh NOSIGFE ctanhf NOSIGFE +ctanhl NOSIGFE +ctanl NOSIGFE ctermid SIGFE ctime SIGFE ctime_r SIGFE @@ -342,8 +374,9 @@ dn_expand = __dn_expand SIGFE dn_skipname = __dn_skipname SIGFE dprintf SIGFE drand48 NOSIGFE -drem NOSIGFE -dremf NOSIGFE +drem = remainder NOSIGFE +dremf= remainderf NOSIGFE +dreml= remainderl NOSIGFE dup SIGFE dup2 SIGFE dup3 SIGFE @@ -370,7 +403,9 @@ erand48 NOSIGFE erf NOSIGFE erfc NOSIGFE erfcf NOSIGFE +erfcl NOSIGFE erff NOSIGFE +erfl NOSIGFE err SIGFE error SIGFE error_at_line SIGFE @@ -387,13 +422,18 @@ exit = cygwin_exit SIGFE exp NOSIGFE exp10 NOSIGFE exp10f NOSIGFE +exp10l NOSIGFE exp2 NOSIGFE exp2f NOSIGFE +exp2l NOSIGFE expf NOSIGFE +expl NOSIGFE expm1 NOSIGFE expm1f NOSIGFE +expm1l NOSIGFE fabs NOSIGFE fabsf NOSIGFE +fabsl NOSIGFE faccessat SIGFE facl SIGFE fchdir SIGFE @@ -410,6 +450,7 @@ fcvtf SIGFE fdatasync SIGFE fdim NOSIGFE fdimf NOSIGFE +fdiml NOSIGFE fdopen SIGFE fdopendir SIGFE feclearexcept NOSIGFE @@ -459,15 +500,20 @@ flock SIGFE flockfile SIGFE floor NOSIGFE floorf NOSIGFE +floorl NOSIGFE fma NOSIGFE fmaf NOSIGFE +fmal NOSIGFE fmax NOSIGFE fmaxf NOSIGFE +fmaxl NOSIGFE fmemopen SIGFE fmin NOSIGFE fminf NOSIGFE +fminl NOSIGFE fmod NOSIGFE fmodf NOSIGFE +fmodl NOSIGFE fnmatch NOSIGFE fopen SIGFE fopencookie SIGFE @@ -493,6 +539,7 @@ fremovexattr SIGFE freopen SIGFE frexp NOSIGFE frexpf NOSIGFE +frexpl NOSIGFE fscanf SIGFE fseek SIGFE fseeko SIGFE @@ -650,6 +697,7 @@ if_nameindex SIGFE if_nametoindex SIGFE ilogb NOSIGFE ilogbf NOSIGFE +ilogbl NOSIGFE imaxabs = llabs NOSIGFE imaxdiv = lldiv NOSIGFE index NOSIGFE @@ -680,9 +728,11 @@ isdigit NOSIGFE isgraph NOSIGFE isinf NOSIGFE isinff NOSIGFE +isinfl NOSIGFE islower NOSIGFE isnan NOSIGFE isnanf NOSIGFE +isnanl NOSIGFE isprint NOSIGFE ispunct NOSIGFE issetugid NOSIGFE @@ -717,12 +767,15 @@ lchown SIGFE lcong48 NOSIGFE ldexp NOSIGFE ldexpf NOSIGFE +ldexpl NOSIGFE ldiv NOSIGFE lfind NOSIGFE lgamma NOSIGFE lgamma_r NOSIGFE lgammaf NOSIGFE lgammaf_r NOSIGFE +lgammal NOSIGFE +lgammal_r NOSIGFE lgetxattr SIGFE link SIGFE linkat SIGFE @@ -731,8 +784,12 @@ listxattr SIGFE llabs NOSIGFE lldiv NOSIGFE llistxattr SIGFE +llrint NOSIGFE +llrintf NOSIGFE +llrintl NOSIGFE llround NOSIGFE llroundf NOSIGFE +llroundl NOSIGFE localeconv NOSIGFE localtime SIGFE localtime_r SIGFE @@ -740,13 +797,18 @@ lockf SIGFE log NOSIGFE log10 NOSIGFE log10f NOSIGFE +log10l NOSIGFE log1p NOSIGFE log1pf NOSIGFE +log1pl NOSIGFE log2 NOSIGFE log2f NOSIGFE +log2l NOSIGFE logb NOSIGFE logbf NOSIGFE +logbl NOSIGFE logf NOSIGFE +logl NOSIGFE login SIGFE login_tty SIGFE logout SIGFE @@ -754,8 +816,12 @@ logwtmp SIGFE longjmp NOSIGFE lrand48 NOSIGFE lremovexattr SIGFE +lrint NOSIGFE +lrintf NOSIGFE +lrintl NOSIGFE lround NOSIGFE lroundf NOSIGFE +lroundl NOSIGFE lsearch NOSIGFE lseek SIGFE lsetxattr SIGFE @@ -805,6 +871,7 @@ mlock SIGFE mmap SIGFE modf NOSIGFE modff NOSIGFE +modfl NOSIGFE mount SIGFE mprotect SIGFE mq_close SIGFE @@ -830,8 +897,13 @@ nanf NOSIGFE nanosleep SIGFE nearbyint NOSIGFE nearbyintf NOSIGFE +nearbyintl NOSIGFE nextafter NOSIGFE nextafterf NOSIGFE +nextafterl NOSIGFE +nexttoward NOSIGFE +nexttowardf NOSIGFE +nexttowardl NOSIGFE nftw SIGFE nice SIGFE nl_langinfo SIGFE @@ -883,7 +955,9 @@ posix_spawn_file_actions_addopen SIGFE pow NOSIGFE pow10 NOSIGFE pow10f NOSIGFE +pow10l NOSIGFE powf NOSIGFE +powl NOSIGFE ppoll SIGFE pread SIGFE printf SIGFE @@ -1037,11 +1111,13 @@ regexec SIGFE regfree SIGFE remainder NOSIGFE remainderf NOSIGFE +remainderl NOSIGFE remove SIGFE removexattr SIGFE remque NOSIGFE remquo NOSIGFE remquof NOSIGFE +remquol NOSIGFE rename SIGFE renameat SIGFE res_close = __res_close SIGFE @@ -1063,9 +1139,13 @@ rewind SIGFE rewinddir SIGFE rexec = cygwin_rexec SIGFE rindex NOSIGFE +rint NOSIGFE +rintf NOSIGFE +rintl NOSIGFE rmdir SIGFE round NOSIGFE roundf NOSIGFE +roundl NOSIGFE rpmatch SIGFE rresvport = cygwin_rresvport SIGFE rresvport_af = cygwin_rresvport_af SIGFE @@ -1073,10 +1153,13 @@ ruserok SIGFE sbrk SIGFE scalb NOSIGFE scalbf NOSIGFE +scalbl NOSIGFE scalbln NOSIGFE scalblnf NOSIGFE +scalblnl NOSIGFE scalbn NOSIGFE scalbnf NOSIGFE +scalbnl NOSIGFE scandir SIGFE scandirat SIGFE scanf SIGFE @@ -1180,9 +1263,12 @@ sigwaitinfo SIGFE sin NOSIGFE sincos NOSIGFE sincosf NOSIGFE +sincosl NOSIGFE sinf NOSIGFE sinh NOSIGFE sinhf NOSIGFE +sinhl NOSIGFE +sinl NOSIGFE siprintf SIGFE sleep SIGFE snprintf SIGFE @@ -1271,6 +1357,8 @@ tan NOSIGFE tanf NOSIGFE tanh NOSIGFE tanhf NOSIGFE +tanhl NOSIGFE +tanl NOSIGFE tcdrain SIGFE tcflow SIGFE tcflush SIGFE @@ -1287,6 +1375,7 @@ tempnam SIGFE tfind NOSIGFE tgamma NOSIGFE tgammaf NOSIGFE +tgammal NOSIGFE time SIGFE timegm NOSIGFE timelocal SIGFE @@ -1307,6 +1396,7 @@ towupper NOSIGFE trunc NOSIGFE truncate SIGFE truncf NOSIGFE +truncl NOSIGFE tsearch SIGFE ttyname SIGFE ttyname_r SIGFE diff --git a/winsup/cygwin/i686.din b/winsup/cygwin/i686.din index a9b3117..f3cd2fd 100644 --- a/winsup/cygwin/i686.din +++ b/winsup/cygwin/i686.din @@ -164,21 +164,21 @@ _f_frexp NOSIGFE _f_frexpf NOSIGFE _f_ldexp NOSIGFE _f_ldexpf NOSIGFE -_f_llrint NOSIGFE -_f_llrintf NOSIGFE -_f_llrintl NOSIGFE +_f_llrint = llrint NOSIGFE +_f_llrintf = llrintf NOSIGFE +_f_llrintl = llrintl NOSIGFE _f_log NOSIGFE _f_log10 NOSIGFE _f_log10f NOSIGFE _f_logf NOSIGFE -_f_lrint NOSIGFE -_f_lrintf NOSIGFE -_f_lrintl NOSIGFE +_f_lrint = lrint NOSIGFE +_f_lrintf = lrintf NOSIGFE +_f_lrintl = lrintl NOSIGFE _f_pow NOSIGFE _f_powf NOSIGFE -_f_rint NOSIGFE -_f_rintf NOSIGFE -_f_rintl NOSIGFE +_f_rint = rint NOSIGFE +_f_rintf = rintf NOSIGFE +_f_rintl = rintl NOSIGFE _f_tan NOSIGFE _f_tanf NOSIGFE _fabs = fabs NOSIGFE @@ -622,19 +622,10 @@ fscanf_r = _fscanf_r SIGFE get_osfhandle = _get_osfhandle SIGFE getpwduid NOSIGFE lacl SIGFE -llrint = _f_llrint NOSIGFE -llrintf = _f_llrintf NOSIGFE -llrintl = _f_llrintl NOSIGFE -lrint = _f_lrint NOSIGFE -lrintf = _f_lrintf NOSIGFE -lrintl = _f_lrintl NOSIGFE posix_regcomp = regcomp SIGFE posix_regerror = regerror SIGFE posix_regexec = regexec SIGFE posix_regfree = regfree SIGFE -rint = _f_rint NOSIGFE -rintf = _f_rintf NOSIGFE -rintl = _f_rintl NOSIGFE scanf_r = _scanf_r SIGFE setmode = cygwin_setmode SIGFE setregid32 SIGFE diff --git a/winsup/cygwin/include/cygwin/version.h b/winsup/cygwin/include/cygwin/version.h index ee7c4ff..8b1a8fc 100644 --- a/winsup/cygwin/include/cygwin/version.h +++ b/winsup/cygwin/include/cygwin/version.h @@ -478,13 +478,24 @@ details. */ 294: Export clog10, clog10f. 295: Export POSIX ACL functions. 296: Export __getpagesize. + 297: Export missing math functions, acoshl, acosl, asinhl, asinl, atan2l, + atanhl, atanl, cacoshl, cacosl, cargl, casinhl, casinl, catanhl, + catanl, ccoshl, ccosl, ceill, cexpl, clog10l, clogl, conjl, + copysignl, coshl, cosl, cpowl, cprojl, csinhl, csinl, csqrtl, ctanhl, + ctanl, dreml, erfcl, erfl, exp10l, exp2l, expl, expm1l, fabsl, fdiml, + floorl, fmal, fmaxl, fminl, fmodl, frexpl, ilogbl, isinfl, isnanl, + ldexpl, lgammal, lgammal_r, llroundl, log10l, log1pl, log2l, logbl, + logl, lroundl, modfl, nearbyintl, nextafterl, nexttoward, + nexttowardf, nexttowardl, pow10l, powl, remainderl, remquol, roundl, + scalbl, scalblnl, scalbnl, sincosl, sinhl, sinl, tanhl, tanl, + tgammal, truncl. */ /* Note that we forgot to bump the api for ualarm, strtoll, strtoull, sigaltstack, sethostname. */ #define CYGWIN_VERSION_API_MAJOR 0 -#define CYGWIN_VERSION_API_MINOR 296 +#define CYGWIN_VERSION_API_MINOR 297 /* There is also a compatibity version number associated with the shared memory regions. It is incremented when incompatible diff --git a/winsup/cygwin/math.h b/winsup/cygwin/math.h new file mode 100644 index 0000000..d30ecf9 --- /dev/null +++ b/winsup/cygwin/math.h @@ -0,0 +1,43 @@ +#ifndef _LOCAL_MATH_H_ +#define _LOCAL_MATH_H_ + +/* This header is required to define the types used by some of the + mingw-w64 based files in the math subdir. */ + +typedef union __mingw_dbl_type_t { + double x; + unsigned long long val; + struct { + unsigned int low, high; + } lh; +} __mingw_dbl_type_t; + +typedef union __mingw_flt_type_t { + float x; + unsigned int val; +} __mingw_flt_type_t; + +typedef union __mingw_ldbl_type_t +{ + long double x; + struct { + unsigned int low, high; + int sign_exponent : 16; + int res1 : 16; + int res0 : 32; + } lh; +} __mingw_ldbl_type_t; + +typedef union __mingw_fp_types_t +{ + long double *ld; + double *d; + float *f; + __mingw_ldbl_type_t *ldt; + __mingw_dbl_type_t *dt; + __mingw_flt_type_t *ft; +} __mingw_fp_types_t; + +#include_next <math.h> + +#endif /* _LOCAL_MATH_H_ */ diff --git a/winsup/cygwin/math/DISCLAIMER.PD b/winsup/cygwin/math/DISCLAIMER.PD new file mode 100644 index 0000000..6c2a7c3 --- /dev/null +++ b/winsup/cygwin/math/DISCLAIMER.PD @@ -0,0 +1,9 @@ +/** + * DISCLAIMER + * This file has no copyright assigned and is placed in the Public Domain. + * + * Its code is distributed in the hope that it will be useful but WITHOUT + * ANY WARRANTY. ALL WARRANTIES, EXPRESSED OR IMPLIED ARE HEREBY DISCLAIMED. + * This includes but is not limited to warranties of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. + */ diff --git a/winsup/cygwin/math/acosh.def.h b/winsup/cygwin/math/acosh.def.h new file mode 100644 index 0000000..c039bd8 --- /dev/null +++ b/winsup/cygwin/math/acosh.def.h @@ -0,0 +1,70 @@ +/* + This Software is provided under the Zope Public License (ZPL) Version 2.1. + + Copyright (c) 2009, 2010 by the mingw-w64 project + + See the AUTHORS file for the list of contributors to the mingw-w64 project. + + This license has been certified as open source. It has also been designated + as GPL compatible by the Free Software Foundation (FSF). + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions in source code must retain the accompanying copyright + notice, this list of conditions, and the following disclaimer. + 2. Redistributions in binary form must reproduce the accompanying + copyright notice, this list of conditions, and the following disclaimer + in the documentation and/or other materials provided with the + distribution. + 3. Names of the copyright holders must not be used to endorse or promote + products derived from this software without prior written permission + from the copyright holders. + 4. The right to distribute this software or to use it for any purpose does + not give you the right to use Servicemarks (sm) or Trademarks (tm) of + the copyright holders. Use of them is covered by separate agreement + with the copyright holders. + 5. If any files are modified, you must cause the modified files to carry + prominent notices stating that you changed the files and the date of + any change. + + Disclaimer + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY EXPRESSED + OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#include "complex_internal.h" +#include <errno.h> +#include "fastmath.h" + +__FLT_TYPE +__FLT_ABI(acosh) (__FLT_TYPE x) +{ + int x_class = fpclassify (x); + if (x_class == FP_NAN || x < __FLT_CST(1.0)) + { + __FLT_RPT_DOMAIN ("acosh", x, 0.0, __FLT_NAN); + return __FLT_NAN; + } + else if (x_class == FP_INFINITE) + { + __FLT_RPT_DOMAIN ("acosh", x, 0.0, __FLT_NAN); + return __FLT_NAN; + } + + if (x > __FLT_CST(0x1p32)) + return __FLT_ABI (__fast_log) (x) + 6.9314718055994530941723E-1L; + + return __FLT_ABI (__fast_log) (x + + __FLT_ABI (__fast_sqrt) ((x + __FLT_CST(1.0)) * (x - __FLT_CST(1.0)))); +} + diff --git a/winsup/cygwin/math/acoshl.c b/winsup/cygwin/math/acoshl.c new file mode 100644 index 0000000..88f9f13 --- /dev/null +++ b/winsup/cygwin/math/acoshl.c @@ -0,0 +1,46 @@ +/* + This Software is provided under the Zope Public License (ZPL) Version 2.1. + + Copyright (c) 2009, 2010 by the mingw-w64 project + + See the AUTHORS file for the list of contributors to the mingw-w64 project. + + This license has been certified as open source. It has also been designated + as GPL compatible by the Free Software Foundation (FSF). + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions in source code must retain the accompanying copyright + notice, this list of conditions, and the following disclaimer. + 2. Redistributions in binary form must reproduce the accompanying + copyright notice, this list of conditions, and the following disclaimer + in the documentation and/or other materials provided with the + distribution. + 3. Names of the copyright holders must not be used to endorse or promote + products derived from this software without prior written permission + from the copyright holders. + 4. The right to distribute this software or to use it for any purpose does + not give you the right to use Servicemarks (sm) or Trademarks (tm) of + the copyright holders. Use of them is covered by separate agreement + with the copyright holders. + 5. If any files are modified, you must cause the modified files to carry + prominent notices stating that you changed the files and the date of + any change. + + Disclaimer + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY EXPRESSED + OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#define _NEW_COMPLEX_LDOUBLE 1 +#include "acosh.def.h" diff --git a/winsup/cygwin/math/acosl.c b/winsup/cygwin/math/acosl.c new file mode 100644 index 0000000..511b5de --- /dev/null +++ b/winsup/cygwin/math/acosl.c @@ -0,0 +1,22 @@ +/** + * This file has no copyright assigned and is placed in the Public Domain. + * This file is part of the mingw-w64 runtime package. + * No warranty is given; refer to the file DISCLAIMER.PD within this package. + */ +long double acosl (long double x); + +long double acosl (long double x) +{ + long double res = 0.0L; + + /* acosl = atanl (sqrtl(1 - x^2) / x) */ + asm ( "fld %%st\n\t" + "fmul %%st(0)\n\t" /* x^2 */ + "fld1\n\t" + "fsubp\n\t" /* 1 - x^2 */ + "fsqrt\n\t" /* sqrtl (1 - x^2) */ + "fxch %%st(1)\n\t" + "fpatan" + : "=t" (res) : "0" (x) : "st(1)"); + return res; +} diff --git a/winsup/cygwin/math/asinhl.c b/winsup/cygwin/math/asinhl.c new file mode 100644 index 0000000..bb2ca97 --- /dev/null +++ b/winsup/cygwin/math/asinhl.c @@ -0,0 +1,33 @@ +/** + * This file has no copyright assigned and is placed in the Public Domain. + * This file is part of the mingw-w64 runtime package. + * No warranty is given; refer to the file DISCLAIMER.PD within this package. + */ +#include <math.h> +#include <errno.h> +#include "fastmath.h" + + /* asinh(x) = copysign(log(fabs(x) + sqrt(x * x + 1.0)), x) */ +long double asinhl(long double x) +{ + long double z; + if (!isfinite (x)) + return x; + + z = fabsl (x); + + /* Avoid setting FPU underflow exception flag in x * x. */ +#if 0 + if ( z < 0x1p-32) + return x; +#endif + + /* Use log1p to avoid cancellation with small x. Put + x * x in denom, so overflow is harmless. + asinh(x) = log1p (x + sqrt (x * x + 1.0) - 1.0) + = log1p (x + x * x / (sqrt (x * x + 1.0) + 1.0)) */ + + z = __fast_log1pl (z + z * z / (__fast_sqrtl (z * z + 1.0L) + 1.0L)); + + return ( x > 0.0 ? z : -z); +} diff --git a/winsup/cygwin/math/asinl.c b/winsup/cygwin/math/asinl.c new file mode 100644 index 0000000..a4d8746 --- /dev/null +++ b/winsup/cygwin/math/asinl.c @@ -0,0 +1,27 @@ +/** + * This file has no copyright assigned and is placed in the Public Domain. + * This file is part of the mingw-w64 runtime package. + * No warranty is given; refer to the file DISCLAIMER.PD within this package. + */ +/* + * Written by J.T. Conklin <[email protected]>. + * Public domain. + * Adapted for long double type by Danny Smith <[email protected]>. + */ + +/* asin = atan (x / sqrt(1 - x^2)) */ +long double asinl (long double x); + +long double asinl (long double x) +{ + long double res = 0.0L; + + asm ( "fld %%st\n\t" + "fmul %%st(0)\n\t" /* x^2 */ + "fld1\n\t" + "fsubp\n\t" /* 1 - x^2 */ + "fsqrt\n\t" /* sqrt (1 - x^2) */ + "fpatan" + : "=t" (res) : "0" (x) : "st(1)"); + return res; +} diff --git a/winsup/cygwin/math/atan2l.c b/winsup/cygwin/math/atan2l.c new file mode 100644 index 0000000..a32b097 --- /dev/null +++ b/winsup/cygwin/math/atan2l.c @@ -0,0 +1,14 @@ +/** + * This file has no copyright assigned and is placed in the Public Domain. + * This file is part of the mingw-w64 runtime package. + * No warranty is given; refer to the file DISCLAIMER.PD within this package. + */ +long double atan2l (long double y, long double x); + +long double +atan2l (long double y, long double x) +{ + long double res = 0.0L; + asm ("fpatan" : "=t" (res) : "u" (y), "0" (x) : "st(1)"); + return res; +} diff --git a/winsup/cygwin/math/atanhl.c b/winsup/cygwin/math/atanhl.c new file mode 100644 index 0000000..59eb1bd --- /dev/null +++ b/winsup/cygwin/math/atanhl.c @@ -0,0 +1,34 @@ +/** + * This file has no copyright assigned and is placed in the Public Domain. + * This file is part of the mingw-w64 runtime package. + * No warranty is given; refer to the file DISCLAIMER.PD within this package. + */ +#include <math.h> +#include <errno.h> +#include "fastmath.h" + +/* atanh (x) = 0.5 * log ((1.0 + x)/(1.0 - x)) */ +long double atanhl (long double x) +{ + long double z; + if (isnan (x)) + return x; + z = fabsl (x); + if (z == 1.0L) + { + errno = ERANGE; + return (x > 0 ? INFINITY : -INFINITY); + } + if ( z > 1.0L) + { + errno = EDOM; + return nanl(""); + } + /* Rearrange formula to avoid precision loss for small x. + atanh(x) = 0.5 * log ((1.0 + x)/(1.0 - x)) + = 0.5 * log1p ((1.0 + x)/(1.0 - x) - 1.0) + = 0.5 * log1p ((1.0 + x - 1.0 + x) /(1.0 - x)) + = 0.5 * log1p ((2.0 * x ) / (1.0 - x)) */ + z = 0.5L * __fast_log1pl ((z + z) / (1.0L - z)); + return x >= 0 ? z : -z; +} diff --git a/winsup/cygwin/math/atanl.c b/winsup/cygwin/math/atanl.c new file mode 100644 index 0000000..b85d053 --- /dev/null +++ b/winsup/cygwin/math/atanl.c @@ -0,0 +1,17 @@ +/** + * This file has no copyright assigned and is placed in the Public Domain. + * This file is part of the mingw-w64 runtime package. + * No warranty is given; refer to the file DISCLAIMER.PD within this package. + */ +long double atanl (long double x); + +long double +atanl (long double x) +{ + long double res = 0.0L; + + asm ("fld1\n\t" + "fpatan" + : "=t" (res) : "0" (x)); + return res; +} diff --git a/winsup/cygwin/math/cabs.def.h b/winsup/cygwin/math/cabs.def.h new file mode 100644 index 0000000..b3ea097 --- /dev/null +++ b/winsup/cygwin/math/cabs.def.h @@ -0,0 +1,49 @@ +/* + This Software is provided under the Zope Public License (ZPL) Version 2.1. + + Copyright (c) 2009, 2010 by the mingw-w64 project + + See the AUTHORS file for the list of contributors to the mingw-w64 project. + + This license has been certified as open source. It has also been designated + as GPL compatible by the Free Software Foundation (FSF). + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions in source code must retain the accompanying copyright + notice, this list of conditions, and the following disclaimer. + 2. Redistributions in binary form must reproduce the accompanying + copyright notice, this list of conditions, and the following disclaimer + in the documentation and/or other materials provided with the + distribution. + 3. Names of the copyright holders must not be used to endorse or promote + products derived from this software without prior written permission + from the copyright holders. + 4. The right to distribute this software or to use it for any purpose does + not give you the right to use Servicemarks (sm) or Trademarks (tm) of + the copyright holders. Use of them is covered by separate agreement + with the copyright holders. + 5. If any files are modified, you must cause the modified files to carry + prominent notices stating that you changed the files and the date of + any change. + + Disclaimer + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY EXPRESSED + OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +__FLT_TYPE __cdecl +__FLT_ABI(cabs) (__FLT_TYPE __complex__ z) +{ + return __FLT_ABI(hypot) (__real__ z, __imag__ z); +} diff --git a/winsup/cygwin/math/cabsl.c b/winsup/cygwin/math/cabsl.c new file mode 100644 index 0000000..c750e87 --- /dev/null +++ b/winsup/cygwin/math/cabsl.c @@ -0,0 +1,48 @@ +/* + This Software is provided under the Zope Public License (ZPL) Version 2.1. + + Copyright (c) 2009, 2010 by the mingw-w64 project + + See the AUTHORS file for the list of contributors to the mingw-w64 project. + + This license has been certified as open source. It has also been designated + as GPL compatible by the Free Software Foundation (FSF). + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions in source code must retain the accompanying copyright + notice, this list of conditions, and the following disclaimer. + 2. Redistributions in binary form must reproduce the accompanying + copyright notice, this list of conditions, and the following disclaimer + in the documentation and/or other materials provided with the + distribution. + 3. Names of the copyright holders must not be used to endorse or promote + products derived from this software without prior written permission + from the copyright holders. + 4. The right to distribute this software or to use it for any purpose does + not give you the right to use Servicemarks (sm) or Trademarks (tm) of + the copyright holders. Use of them is covered by separate agreement + with the copyright holders. + 5. If any files are modified, you must cause the modified files to carry + prominent notices stating that you changed the files and the date of + any change. + + Disclaimer + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY EXPRESSED + OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/* long double version of the functions. */ +#define _NEW_COMPLEX_LDOUBLE 1 +#include "complex_internal.h" +#include "cabs.def.h" diff --git a/winsup/cygwin/math/cacos.def.h b/winsup/cygwin/math/cacos.def.h new file mode 100644 index 0000000..300faff --- /dev/null +++ b/winsup/cygwin/math/cacos.def.h @@ -0,0 +1,57 @@ +/* + This Software is provided under the Zope Public License (ZPL) Version 2.1. + + Copyright (c) 2009, 2010 by the mingw-w64 project + + See the AUTHORS file for the list of contributors to the mingw-w64 project. + + This license has been certified as open source. It has also been designated + as GPL compatible by the Free Software Foundation (FSF). + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions in source code must retain the accompanying copyright + notice, this list of conditions, and the following disclaimer. + 2. Redistributions in binary form must reproduce the accompanying + copyright notice, this list of conditions, and the following disclaimer + in the documentation and/or other materials provided with the + distribution. + 3. Names of the copyright holders must not be used to endorse or promote + products derived from this software without prior written permission + from the copyright holders. + 4. The right to distribute this software or to use it for any purpose does + not give you the right to use Servicemarks (sm) or Trademarks (tm) of + the copyright holders. Use of them is covered by separate agreement + with the copyright holders. + 5. If any files are modified, you must cause the modified files to carry + prominent notices stating that you changed the files and the date of + any change. + + Disclaimer + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY EXPRESSED + OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +__FLT_TYPE __complex__ __cdecl +__FLT_ABI(cacos) (__FLT_TYPE __complex__ z) +{ + __complex__ __FLT_TYPE x; + __complex__ __FLT_TYPE ret; + + x = __FLT_ABI(casin) (z); + + __real__ ret = (__FLT_TYPE) __FLT_PI_2 - __real__ x; + __imag__ ret = -__imag__ x; + + return ret; +} diff --git a/winsup/cygwin/math/cacosh.def.h b/winsup/cygwin/math/cacosh.def.h new file mode 100644 index 0000000..f4ea2da --- /dev/null +++ b/winsup/cygwin/math/cacosh.def.h @@ -0,0 +1,100 @@ +/* + This Software is provided under the Zope Public License (ZPL) Version 2.1. + + Copyright (c) 2009, 2010 by the mingw-w64 project + + See the AUTHORS file for the list of contributors to the mingw-w64 project. + + This license has been certified as open source. It has also been designated + as GPL compatible by the Free Software Foundation (FSF). + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions in source code must retain the accompanying copyright + notice, this list of conditions, and the following disclaimer. + 2. Redistributions in binary form must reproduce the accompanying + copyright notice, this list of conditions, and the following disclaimer + in the documentation and/or other materials provided with the + distribution. + 3. Names of the copyright holders must not be used to endorse or promote + products derived from this software without prior written permission + from the copyright holders. + 4. The right to distribute this software or to use it for any purpose does + not give you the right to use Servicemarks (sm) or Trademarks (tm) of + the copyright holders. Use of them is covered by separate agreement + with the copyright holders. + 5. If any files are modified, you must cause the modified files to carry + prominent notices stating that you changed the files and the date of + any change. + + Disclaimer + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY EXPRESSED + OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +__FLT_TYPE __complex__ __cdecl +__FLT_ABI(cacosh) (__FLT_TYPE __complex__ z) +{ + __complex__ __FLT_TYPE ret; + __complex__ __FLT_TYPE x; + int r_class = fpclassify (__real__ z); + int i_class = fpclassify (__imag__ z); + + if (i_class == FP_INFINITE) + { + __real__ ret = __FLT_HUGE_VAL; + __imag__ ret = (r_class == FP_NAN ? __FLT_NAN : __FLT_ABI(copysign) ( + (r_class == FP_INFINITE ? (__real__ z < __FLT_CST(0.0) ? __FLT_PI_3_4 : __FLT_PI_4) : __FLT_PI_2), __imag__ z)); + return ret; + } + + if (r_class == FP_INFINITE) + { + __real__ ret = __FLT_HUGE_VAL; + __imag__ ret = ((i_class != FP_NAN && i_class != FP_INFINITE) + ? __FLT_ABI(copysign) (signbit (__real__ z) ? __FLT_PI : __FLT_CST(0.0), __imag__ z) : __FLT_NAN); + return ret; + } + + if (r_class == FP_NAN || i_class == FP_NAN) + { + __real__ ret = __FLT_NAN; + __imag__ ret = __FLT_NAN; + return ret; + } + + if (r_class == FP_ZERO && i_class == FP_ZERO) + { + __real__ ret = __FLT_CST(0.0); + __imag__ ret = __FLT_ABI(copysign) (__FLT_PI_2, __imag__ z); + return ret; + } + + __real__ x = (__real__ z - __imag__ z) * (__real__ z + __imag__ z) - __FLT_CST(1.0); + __imag__ x = __FLT_CST(2.0) * __real__ z * __imag__ z; + + x = __FLT_ABI(csqrt) (x); + + if (__real__ z < __FLT_CST(0.0)) + x = -x; + + __real__ x += __real__ z; + __imag__ x += __imag__ z; + + ret = __FLT_ABI(clog) (x); + + if (__real__ ret < __FLT_CST(0.0)) + ret = -ret; + + return ret; +} diff --git a/winsup/cygwin/math/cacosl.c b/winsup/cygwin/math/cacosl.c new file mode 100644 index 0000000..7a8df65 --- /dev/null +++ b/winsup/cygwin/math/cacosl.c @@ -0,0 +1,50 @@ +/* + This Software is provided under the Zope Public License (ZPL) Version 2.1. + + Copyright (c) 2009, 2010 by the mingw-w64 project + + See the AUTHORS file for the list of contributors to the mingw-w64 project. + + This license has been certified as open source. It has also been designated + as GPL compatible by the Free Software Foundation (FSF). + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions in source code must retain the accompanying copyright + notice, this list of conditions, and the following disclaimer. + 2. Redistributions in binary form must reproduce the accompanying + copyright notice, this list of conditions, and the following disclaimer + in the documentation and/or other materials provided with the + distribution. + 3. Names of the copyright holders must not be used to endorse or promote + products derived from this software without prior written permission + from the copyright holders. + 4. The right to distribute this software or to use it for any purpose does + not give you the right to use Servicemarks (sm) or Trademarks (tm) of + the copyright holders. Use of them is covered by separate agreement + with the copyright holders. + 5. If any files are modified, you must cause the modified files to carry + prominent notices stating that you changed the files and the date of + any change. + + Disclaimer + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY EXPRESSED + OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/* long double version of the functions. */ +#define _NEW_COMPLEX_LDOUBLE 1 +#include "complex_internal.h" + +#include "cacosh.def.h" +#include "cacos.def.h" diff --git a/winsup/cygwin/math/carg.def.h b/winsup/cygwin/math/carg.def.h new file mode 100644 index 0000000..2ccf841 --- /dev/null +++ b/winsup/cygwin/math/carg.def.h @@ -0,0 +1,49 @@ +/* + This Software is provided under the Zope Public License (ZPL) Version 2.1. + + Copyright (c) 2009, 2010 by the mingw-w64 project + + See the AUTHORS file for the list of contributors to the mingw-w64 project. + + This license has been certified as open source. It has also been designated + as GPL compatible by the Free Software Foundation (FSF). + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions in source code must retain the accompanying copyright + notice, this list of conditions, and the following disclaimer. + 2. Redistributions in binary form must reproduce the accompanying + copyright notice, this list of conditions, and the following disclaimer + in the documentation and/or other materials provided with the + distribution. + 3. Names of the copyright holders must not be used to endorse or promote + products derived from this software without prior written permission + from the copyright holders. + 4. The right to distribute this software or to use it for any purpose does + not give you the right to use Servicemarks (sm) or Trademarks (tm) of + the copyright holders. Use of them is covered by separate agreement + with the copyright holders. + 5. If any files are modified, you must cause the modified files to carry + prominent notices stating that you changed the files and the date of + any change. + + Disclaimer + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY EXPRESSED + OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +__FLT_TYPE __cdecl +__FLT_ABI(carg) (__FLT_TYPE __complex__ z) +{ + return __FLT_ABI(atan2) (__imag__ z, __real__ z); +} diff --git a/winsup/cygwin/math/cargl.c b/winsup/cygwin/math/cargl.c new file mode 100644 index 0000000..e70f580 --- /dev/null +++ b/winsup/cygwin/math/cargl.c @@ -0,0 +1,48 @@ +/* + This Software is provided under the Zope Public License (ZPL) Version 2.1. + + Copyright (c) 2009, 2010 by the mingw-w64 project + + See the AUTHORS file for the list of contributors to the mingw-w64 project. + + This license has been certified as open source. It has also been designated + as GPL compatible by the Free Software Foundation (FSF). + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions in source code must retain the accompanying copyright + notice, this list of conditions, and the following disclaimer. + 2. Redistributions in binary form must reproduce the accompanying + copyright notice, this list of conditions, and the following disclaimer + in the documentation and/or other materials provided with the + distribution. + 3. Names of the copyright holders must not be used to endorse or promote + products derived from this software without prior written permission + from the copyright holders. + 4. The right to distribute this software or to use it for any purpose does + not give you the right to use Servicemarks (sm) or Trademarks (tm) of + the copyright holders. Use of them is covered by separate agreement + with the copyright holders. + 5. If any files are modified, you must cause the modified files to carry + prominent notices stating that you changed the files and the date of + any change. + + Disclaimer + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY EXPRESSED + OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/* long double version of the functions. */ +#define _NEW_COMPLEX_LDOUBLE 1 +#include "complex_internal.h" +#include "carg.def.h" diff --git a/winsup/cygwin/math/casin.def.h b/winsup/cygwin/math/casin.def.h new file mode 100644 index 0000000..808c1be --- /dev/null +++ b/winsup/cygwin/math/casin.def.h @@ -0,0 +1,61 @@ +/* + This Software is provided under the Zope Public License (ZPL) Version 2.1. + + Copyright (c) 2009, 2010 by the mingw-w64 project + + See the AUTHORS file for the list of contributors to the mingw-w64 project. + + This license has been certified as open source. It has also been designated + as GPL compatible by the Free Software Foundation (FSF). + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions in source code must retain the accompanying copyright + notice, this list of conditions, and the following disclaimer. + 2. Redistributions in binary form must reproduce the accompanying + copyright notice, this list of conditions, and the following disclaimer + in the documentation and/or other materials provided with the + distribution. + 3. Names of the copyright holders must not be used to endorse or promote + products derived from this software without prior written permission + from the copyright holders. + 4. The right to distribute this software or to use it for any purpose does + not give you the right to use Servicemarks (sm) or Trademarks (tm) of + the copyright holders. Use of them is covered by separate agreement + with the copyright holders. + 5. If any files are modified, you must cause the modified files to carry + prominent notices stating that you changed the files and the date of + any change. + + Disclaimer + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY EXPRESSED + OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +__FLT_TYPE __complex__ __cdecl +__FLT_ABI(casin) (__FLT_TYPE __complex__ z) +{ + /* Annex G.6: casin(z) = -i casinh (iz) */ + __complex__ __FLT_TYPE ret; + __complex__ __FLT_TYPE x; + + __real__ x = -__imag__ z; + __imag__ x = __real__ z; + + x = __FLT_ABI(casinh) (x); + + __real__ ret = __imag__ x; + __imag__ ret = -__real__ x; + + return ret; +} diff --git a/winsup/cygwin/math/casinh.def.h b/winsup/cygwin/math/casinh.def.h new file mode 100644 index 0000000..050d885 --- /dev/null +++ b/winsup/cygwin/math/casinh.def.h @@ -0,0 +1,99 @@ +/* + This Software is provided under the Zope Public License (ZPL) Version 2.1. + + Copyright (c) 2009, 2010 by the mingw-w64 project + + See the AUTHORS file for the list of contributors to the mingw-w64 project. + + This license has been certified as open source. It has also been designated + as GPL compatible by the Free Software Foundation (FSF). + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions in source code must retain the accompanying copyright + notice, this list of conditions, and the following disclaimer. + 2. Redistributions in binary form must reproduce the accompanying + copyright notice, this list of conditions, and the following disclaimer + in the documentation and/or other materials provided with the + distribution. + 3. Names of the copyright holders must not be used to endorse or promote + products derived from this software without prior written permission + from the copyright holders. + 4. The right to distribute this software or to use it for any purpose does + not give you the right to use Servicemarks (sm) or Trademarks (tm) of + the copyright holders. Use of them is covered by separate agreement + with the copyright holders. + 5. If any files are modified, you must cause the modified files to carry + prominent notices stating that you changed the files and the date of + any change. + + Disclaimer + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY EXPRESSED + OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +__FLT_TYPE __complex__ __cdecl +__FLT_ABI(casinh) (__FLT_TYPE __complex__ z) +{ + __complex__ __FLT_TYPE ret; + __complex__ __FLT_TYPE x; + int r_class = fpclassify (__real__ z); + int i_class = fpclassify (__imag__ z); + + if (i_class == FP_INFINITE) + { + __real__ ret = __FLT_ABI(copysign) (__FLT_HUGE_VAL, __real__ z); + __imag__ ret = (r_class == FP_NAN + ? __FLT_NAN + : (__FLT_ABI(copysign) ((r_class != FP_NAN && r_class != FP_INFINITE) ? __FLT_PI_2 : __FLT_PI_4, __imag__ z))); + return ret; + } + + if (r_class == FP_INFINITE) + { + __real__ ret = __real__ z; + __imag__ ret = (i_class != FP_NAN + ? __FLT_ABI(copysign) (__FLT_CST(0.0), __imag__ z) + : __FLT_NAN); + return ret; + } + + if (r_class == FP_NAN) + { + __real__ ret = __real__ z; + __imag__ ret = (i_class == FP_ZERO + ? __FLT_ABI(copysign) (__FLT_CST(0.0), __imag__ z) + : __FLT_NAN); + return ret; + } + + if (i_class == FP_NAN) + { + __real__ ret = __FLT_NAN; + __imag__ ret = __FLT_NAN; + return ret; + } + + if (r_class == FP_ZERO && i_class == FP_ZERO) + return z; + + __real__ x = (__real__ z - __imag__ z) * (__real__ z + __imag__ z) + __FLT_CST(1.0); + __imag__ x = __FLT_CST(2.0) * __real__ z * __imag__ z; + + x = __FLT_ABI(csqrt) (x); + + __real__ x += __real__ z; + __imag__ x += __imag__ z; + + return __FLT_ABI(clog) (x); +} diff --git a/winsup/cygwin/math/casinl.c b/winsup/cygwin/math/casinl.c new file mode 100644 index 0000000..1d7e247 --- /dev/null +++ b/winsup/cygwin/math/casinl.c @@ -0,0 +1,50 @@ +/* + This Software is provided under the Zope Public License (ZPL) Version 2.1. + + Copyright (c) 2009, 2010 by the mingw-w64 project + + See the AUTHORS file for the list of contributors to the mingw-w64 project. + + This license has been certified as open source. It has also been designated + as GPL compatible by the Free Software Foundation (FSF). + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions in source code must retain the accompanying copyright + notice, this list of conditions, and the following disclaimer. + 2. Redistributions in binary form must reproduce the accompanying + copyright notice, this list of conditions, and the following disclaimer + in the documentation and/or other materials provided with the + distribution. + 3. Names of the copyright holders must not be used to endorse or promote + products derived from this software without prior written permission + from the copyright holders. + 4. The right to distribute this software or to use it for any purpose does + not give you the right to use Servicemarks (sm) or Trademarks (tm) of + the copyright holders. Use of them is covered by separate agreement + with the copyright holders. + 5. If any files are modified, you must cause the modified files to carry + prominent notices stating that you changed the files and the date of + any change. + + Disclaimer + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY EXPRESSED + OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/* long double version of the functions. */ +#define _NEW_COMPLEX_LDOUBLE 1 +#include "complex_internal.h" + +#include "casinh.def.h" +#include "casin.def.h" diff --git a/winsup/cygwin/math/catan.def.h b/winsup/cygwin/math/catan.def.h new file mode 100644 index 0000000..19db6b7 --- /dev/null +++ b/winsup/cygwin/math/catan.def.h @@ -0,0 +1,61 @@ +/* + This Software is provided under the Zope Public License (ZPL) Version 2.1. + + Copyright (c) 2009, 2010 by the mingw-w64 project + + See the AUTHORS file for the list of contributors to the mingw-w64 project. + + This license has been certified as open source. It has also been designated + as GPL compatible by the Free Software Foundation (FSF). + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions in source code must retain the accompanying copyright + notice, this list of conditions, and the following disclaimer. + 2. Redistributions in binary form must reproduce the accompanying + copyright notice, this list of conditions, and the following disclaimer + in the documentation and/or other materials provided with the + distribution. + 3. Names of the copyright holders must not be used to endorse or promote + products derived from this software without prior written permission + from the copyright holders. + 4. The right to distribute this software or to use it for any purpose does + not give you the right to use Servicemarks (sm) or Trademarks (tm) of + the copyright holders. Use of them is covered by separate agreement + with the copyright holders. + 5. If any files are modified, you must cause the modified files to carry + prominent notices stating that you changed the files and the date of + any change. + + Disclaimer + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY EXPRESSED + OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +__FLT_TYPE __complex__ __cdecl +__FLT_ABI(catan) (__FLT_TYPE __complex__ z) +{ + /* Annex G.6: catan(z) = -i catanh (iz) */ + __complex__ __FLT_TYPE ret; + __complex__ __FLT_TYPE x; + + __real__ x = -__imag__ z; + __imag__ x = __real__ z; + + x = __FLT_ABI(catanh) (x); + + __real__ ret = __imag__ x; + __imag__ ret = -__real__ x; + + return ret; +} diff --git a/winsup/cygwin/math/catanh.def.h b/winsup/cygwin/math/catanh.def.h new file mode 100644 index 0000000..68949d1 --- /dev/null +++ b/winsup/cygwin/math/catanh.def.h @@ -0,0 +1,93 @@ +/* + This Software is provided under the Zope Public License (ZPL) Version 2.1. + + Copyright (c) 2009, 2010 by the mingw-w64 project + + See the AUTHORS file for the list of contributors to the mingw-w64 project. + + This license has been certified as open source. It has also been designated + as GPL compatible by the Free Software Foundation (FSF). + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions in source code must retain the accompanying copyright + notice, this list of conditions, and the following disclaimer. + 2. Redistributions in binary form must reproduce the accompanying + copyright notice, this list of conditions, and the following disclaimer + in the documentation and/or other materials provided with the + distribution. + 3. Names of the copyright holders must not be used to endorse or promote + products derived from this software without prior written permission + from the copyright holders. + 4. The right to distribute this software or to use it for any purpose does + not give you the right to use Servicemarks (sm) or Trademarks (tm) of + the copyright holders. Use of them is covered by separate agreement + with the copyright holders. + 5. If any files are modified, you must cause the modified files to carry + prominent notices stating that you changed the files and the date of + any change. + + Disclaimer + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY EXPRESSED + OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +__FLT_TYPE __complex__ __cdecl +__FLT_ABI(catanh) (__FLT_TYPE __complex__ z) +{ + __complex__ __FLT_TYPE ret; + __FLT_TYPE i2, n, d; + int r_class = fpclassify (__real__ z); + int i_class = fpclassify (__imag__ z); + + if (r_class == FP_INFINITE || r_class == FP_NAN || i_class == FP_INFINITE || i_class == FP_NAN) + { + if (i_class == FP_INFINITE) + { + __real__ ret = __FLT_ABI(copysign) (__FLT_CST(0.0), __real__ z); + __imag__ ret = __FLT_ABI(copysign) (__FLT_PI_2, __imag__ z); + return ret; + } + + if (r_class == FP_INFINITE || r_class == FP_ZERO) + { + __real__ ret = __FLT_ABI(copysign) (__FLT_CST(0.0), __real__ z); + __imag__ ret = ((i_class != FP_NAN && i_class != FP_INFINITE) + ? __FLT_ABI(copysign) (__FLT_PI_2, __imag__ z) : __FLT_NAN); + return ret; + } + + __real__ ret = __FLT_NAN; + __imag__ ret = __FLT_NAN; + return ret; + } + + if (r_class == FP_ZERO && i_class == FP_ZERO) + return z; + + i2 = __imag__ z * __imag__ z; + + n = __FLT_CST(1.0) + __real__ z; + n = i2 + n * n; + + d = __FLT_CST(1.0) - __real__ z; + d = i2 + d * d; + + __real__ ret = __FLT_CST(0.25) * (__FLT_ABI(log) (n) - __FLT_ABI(log) (d)); + + d = 1 - __real__ z * __real__ z - i2; + + __imag__ ret = __FLT_CST(0.5) * __FLT_ABI(atan2) (__FLT_CST(2.0) * __imag__ z, d); + + return ret; +} diff --git a/winsup/cygwin/math/catanl.c b/winsup/cygwin/math/catanl.c new file mode 100644 index 0000000..9c1ccdf --- /dev/null +++ b/winsup/cygwin/math/catanl.c @@ -0,0 +1,50 @@ +/* + This Software is provided under the Zope Public License (ZPL) Version 2.1. + + Copyright (c) 2009, 2010 by the mingw-w64 project + + See the AUTHORS file for the list of contributors to the mingw-w64 project. + + This license has been certified as open source. It has also been designated + as GPL compatible by the Free Software Foundation (FSF). + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions in source code must retain the accompanying copyright + notice, this list of conditions, and the following disclaimer. + 2. Redistributions in binary form must reproduce the accompanying + copyright notice, this list of conditions, and the following disclaimer + in the documentation and/or other materials provided with the + distribution. + 3. Names of the copyright holders must not be used to endorse or promote + products derived from this software without prior written permission + from the copyright holders. + 4. The right to distribute this software or to use it for any purpose does + not give you the right to use Servicemarks (sm) or Trademarks (tm) of + the copyright holders. Use of them is covered by separate agreement + with the copyright holders. + 5. If any files are modified, you must cause the modified files to carry + prominent notices stating that you changed the files and the date of + any change. + + Disclaimer + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY EXPRESSED + OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/* long double version of the functions. */ +#define _NEW_COMPLEX_LDOUBLE 1 +#include "complex_internal.h" + +#include "catanh.def.h" +#include "catan.def.h" diff --git a/winsup/cygwin/math/cbrtl.c b/winsup/cygwin/math/cbrtl.c new file mode 100644 index 0000000..95074e9 --- /dev/null +++ b/winsup/cygwin/math/cbrtl.c @@ -0,0 +1,80 @@ +/** + * This file has no copyright assigned and is placed in the Public Domain. + * This file is part of the mingw-w64 runtime package. + * No warranty is given; refer to the file DISCLAIMER.PD within this package. + */ +#include <math.h> + +static const long double CBRT2 = 1.2599210498948731647672L; +static const long double CBRT4 = 1.5874010519681994747517L; +static const long double CBRT2I = 0.79370052598409973737585L; +static const long double CBRT4I = 0.62996052494743658238361L; + +long double cbrtl(long double x) +{ + int e, rem, sign; + long double z; + + if (!isfinite (x) || x == 0.0L) + return (x); + + if (x > 0) + sign = 1; + else + { + sign = -1; + x = -x; + } + + z = x; + /* extract power of 2, leaving + * mantissa between 0.5 and 1 + */ + x = frexpl(x, &e); + + /* Approximate cube root of number between .5 and 1, + * peak relative error = 1.2e-6 + */ + x = (((( 1.3584464340920900529734e-1L * x + - 6.3986917220457538402318e-1L) * x + + 1.2875551670318751538055e0L) * x + - 1.4897083391357284957891e0L) * x + + 1.3304961236013647092521e0L) * x + + 3.7568280825958912391243e-1L; + + /* exponent divided by 3 */ + if (e >= 0) + { + rem = e; + e /= 3; + rem -= 3*e; + if (rem == 1) + x *= CBRT2; + else if (rem == 2) + x *= CBRT4; + } + else + { /* argument less than 1 */ + e = -e; + rem = e; + e /= 3; + rem -= 3*e; + if (rem == 1) + x *= CBRT2I; + else if (rem == 2) + x *= CBRT4I; + e = -e; + } + + /* multiply by power of 2 */ + x = ldexpl(x, e); + + /* Newton iteration */ + + x -= ( x - (z/(x*x)) )*0.3333333333333333333333L; + x -= ( x - (z/(x*x)) )*0.3333333333333333333333L; + + if (sign < 0) + x = -x; + return (x); +} diff --git a/winsup/cygwin/math/ccos.def.h b/winsup/cygwin/math/ccos.def.h new file mode 100644 index 0000000..2e7472c --- /dev/null +++ b/winsup/cygwin/math/ccos.def.h @@ -0,0 +1,54 @@ +/* + This Software is provided under the Zope Public License (ZPL) Version 2.1. + + Copyright (c) 2009, 2010 by the mingw-w64 project + + See the AUTHORS file for the list of contributors to the mingw-w64 project. + + This license has been certified as open source. It has also been designated + as GPL compatible by the Free Software Foundation (FSF). + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions in source code must retain the accompanying copyright + notice, this list of conditions, and the following disclaimer. + 2. Redistributions in binary form must reproduce the accompanying + copyright notice, this list of conditions, and the following disclaimer + in the documentation and/or other materials provided with the + distribution. + 3. Names of the copyright holders must not be used to endorse or promote + products derived from this software without prior written permission + from the copyright holders. + 4. The right to distribute this software or to use it for any purpose does + not give you the right to use Servicemarks (sm) or Trademarks (tm) of + the copyright holders. Use of them is covered by separate agreement + with the copyright holders. + 5. If any files are modified, you must cause the modified files to carry + prominent notices stating that you changed the files and the date of + any change. + + Disclaimer + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY EXPRESSED + OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +__FLT_TYPE __complex__ __cdecl +__FLT_ABI(ccos) (__FLT_TYPE __complex__ z) +{ + /* Annex G.6, ccos(z) = ccosh(iz) */ + __complex__ __FLT_TYPE x; + __real__ x = -__imag__ z; + __imag__ x = __real__ z; + + return __FLT_ABI(ccosh) (x); +} diff --git a/winsup/cygwin/math/ccosh.def.h b/winsup/cygwin/math/ccosh.def.h new file mode 100644 index 0000000..c18d657 --- /dev/null +++ b/winsup/cygwin/math/ccosh.def.h @@ -0,0 +1,95 @@ +/* + This Software is provided under the Zope Public License (ZPL) Version 2.1. + + Copyright (c) 2009, 2010 by the mingw-w64 project + + See the AUTHORS file for the list of contributors to the mingw-w64 project. + + This license has been certified as open source. It has also been designated + as GPL compatible by the Free Software Foundation (FSF). + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions in source code must retain the accompanying copyright + notice, this list of conditions, and the following disclaimer. + 2. Redistributions in binary form must reproduce the accompanying + copyright notice, this list of conditions, and the following disclaimer + in the documentation and/or other materials provided with the + distribution. + 3. Names of the copyright holders must not be used to endorse or promote + products derived from this software without prior written permission + from the copyright holders. + 4. The right to distribute this software or to use it for any purpose does + not give you the right to use Servicemarks (sm) or Trademarks (tm) of + the copyright holders. Use of them is covered by separate agreement + with the copyright holders. + 5. If any files are modified, you must cause the modified files to carry + prominent notices stating that you changed the files and the date of + any change. + + Disclaimer + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY EXPRESSED + OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +__FLT_TYPE __complex__ __cdecl +__FLT_ABI(ccosh) (__FLT_TYPE __complex__ z) +{ + __complex__ __FLT_TYPE ret; + __FLT_TYPE s_x, c_x; + int r_class = fpclassify (__real__ z); + int i_class = fpclassify (__imag__ z); + + if (r_class == FP_NAN) + { + __real__ ret = __FLT_NAN; + __imag__ ret = __imag__ z == __FLT_CST(0.0) ? __imag__ z : __FLT_NAN; + return ret; + } + + if (r_class == FP_INFINITE) + { + if (i_class == FP_ZERO) + { + __real__ ret = __FLT_HUGE_VAL; + __imag__ ret = __imag__ z * __FLT_ABI(copysign) (__FLT_CST(1.0), __real__ z); + return ret; + } + + if (i_class == FP_NAN || i_class == FP_INFINITE) + { + __real__ ret = __FLT_HUGE_VAL; + __imag__ ret = __FLT_NAN + __FLT_NAN; + return ret; + } + + __FLT_ABI(sincos) (__imag__ z, &s_x, &c_x); + + __real__ ret = __FLT_ABI(copysign) (__FLT_HUGE_VAL, c_x); + __imag__ ret = (__FLT_ABI(copysign) (__FLT_HUGE_VAL, s_x) * __FLT_ABI(copysign) (__FLT_CST(1.0), __real__ z)); + return ret; + } + + if (i_class == FP_NAN || i_class == FP_INFINITE) + { + __imag__ ret = __real__ z == __FLT_CST(0.0) ? __FLT_CST(0.0) : __FLT_NAN; + __real__ ret = __FLT_NAN + __FLT_NAN; + return ret; + } + + __FLT_ABI(sincos) (__imag__ z, &s_x, &c_x); + + __real__ ret = __FLT_ABI(cosh) (__real__ z) * c_x; + __imag__ ret = __FLT_ABI(sinh) (__real__ z) * s_x; + return ret; +} diff --git a/winsup/cygwin/math/ccosl.c b/winsup/cygwin/math/ccosl.c new file mode 100644 index 0000000..594a4d1 --- /dev/null +++ b/winsup/cygwin/math/ccosl.c @@ -0,0 +1,50 @@ +/* + This Software is provided under the Zope Public License (ZPL) Version 2.1. + + Copyright (c) 2009, 2010 by the mingw-w64 project + + See the AUTHORS file for the list of contributors to the mingw-w64 project. + + This license has been certified as open source. It has also been designated + as GPL compatible by the Free Software Foundation (FSF). + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions in source code must retain the accompanying copyright + notice, this list of conditions, and the following disclaimer. + 2. Redistributions in binary form must reproduce the accompanying + copyright notice, this list of conditions, and the following disclaimer + in the documentation and/or other materials provided with the + distribution. + 3. Names of the copyright holders must not be used to endorse or promote + products derived from this software without prior written permission + from the copyright holders. + 4. The right to distribute this software or to use it for any purpose does + not give you the right to use Servicemarks (sm) or Trademarks (tm) of + the copyright holders. Use of them is covered by separate agreement + with the copyright holders. + 5. If any files are modified, you must cause the modified files to carry + prominent notices stating that you changed the files and the date of + any change. + + Disclaimer + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY EXPRESSED + OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/* long double version of the functions. */ +#define _NEW_COMPLEX_LDOUBLE 1 +#include "complex_internal.h" + +#include "ccosh.def.h" +#include "ccos.def.h" diff --git a/winsup/cygwin/math/ceil.S b/winsup/cygwin/math/ceil.S new file mode 100644 index 0000000..636df1e --- /dev/null +++ b/winsup/cygwin/math/ceil.S @@ -0,0 +1,124 @@ +/** + * This file has no copyright assigned and is placed in the Public Domain. + * This file is part of the mingw-w64 runtime package. + * No warranty is given; refer to the file DISCLAIMER.PD within this package. + */ +#include <_mingw_mac.h> + + .file "ceil.S" + .text + .align 4 + .globl __MINGW_USYMBOL(ceil) + .def __MINGW_USYMBOL(ceil); .scl 2; .type 32; .endef +#ifdef __x86_64__ + .seh_proc __MINGW_USYMBOL(ceil) +#endif + +__MINGW_USYMBOL(ceil): +#if defined(_AMD64_) || defined(__x86_64__) + .seh_endprologue + movd %xmm0, %rax + movq %rax, %rcx + sarq $52, %rcx + andl $2047, %ecx + subl $1023, %ecx + cmpl $51, %ecx + jg .is_intnaninf + /* Is x zero? */ + testq %rax, %rax + je .ret_org + /* Is x signed? */ + testl %ecx, %ecx + js .signed_val + /* Is x integral? */ + movabsq $4503599627370495, %rdx + sarq %cl, %rdx + testq %rax, %rdx + je .ret_org + addsd .huge(%rip), %xmm0 + ucomisd .zero(%rip), %xmm0 + jbe .doret + testq %rax, %rax + jle .l1 + /* inexact ... */ + movabsq $4503599627370496, %r8 + shrq %cl, %r8 + addq %r8, %rax +.l1: + notq %rdx + andq %rdx, %rax +.doret: + movd %rax, %xmm0 + ret + .p2align 4,,10 +.signed_val: + addsd .huge(%rip), %xmm0 + ucomisd .zero(%rip), %xmm0 + jbe .doret2 + testq %rax, %rax + movabsq $4607182418800017408, %rdx + movabsq $-9223372036854775808, %rax + cmovns %rdx, %rax + .p2align 4,,10 +.doret2: + movd %rax, %xmm0 + ret + + .p2align 4,,10 +.is_intnaninf: + /* Is Nan or Inf? */ + cmpl $1024, %ecx + je .ret_naninf + .p2align 4,,10 +.ret_org: + /* return x. */ + rep + ret + .p2align 4,,10 +.ret_naninf: + /* return x + x; */ + addsd %xmm0, %xmm0 + ret + .seh_endproc + +/* local data. */ + .section .rdata,"dr" + .align 8 +.huge: + .long -2013235812 + .long 2117592124 + .align 8 +.zero: + .long 0 + .long 0 +#elif defined(_ARM_) || defined(__arm__) + vmrs r1, fpscr + bic r0, r1, #0x00c00000 + orr r0, r0, #0x00400000 /* Round towards Plus Infinity */ + vmsr fpscr, r0 + vcvtr.s32.f64 s0, d0 + vcvt.f64.s32 d0, s0 + vmsr fpscr, r1 + bx lr +#elif defined(_X86_) || defined(__i386__) + fldl 4(%esp) + subl $8,%esp + + fstcw 4(%esp) /* store fpu control word */ + + /* We use here %edx although only the low 1 bits are defined. + But none of the operations should care and they are faster + than the 16 bit operations. */ + movl $0x0800,%edx /* round towards +oo */ + orl 4(%esp),%edx + andl $0xfbff,%edx + movl %edx,(%esp) + fldcw (%esp) /* load modified control word */ + + frndint /* round */ + + fldcw 4(%esp) /* restore original control word */ + + addl $8,%esp + ret +#endif diff --git a/winsup/cygwin/math/ceilf.S b/winsup/cygwin/math/ceilf.S new file mode 100644 index 0000000..605c7bf --- /dev/null +++ b/winsup/cygwin/math/ceilf.S @@ -0,0 +1,120 @@ +/** + * This file has no copyright assigned and is placed in the Public Domain. + * This file is part of the mingw-w64 runtime package. + * No warranty is given; refer to the file DISCLAIMER.PD within this package. + */ +#include <_mingw_mac.h> + + .file "ceilf.S" + .text + .align 4 + .globl __MINGW_USYMBOL(ceilf) + .def __MINGW_USYMBOL(ceilf); .scl 2; .type 32; .endef +#ifdef __x86_64__ + .seh_proc __MINGW_USYMBOL(ceilf) +#endif + +__MINGW_USYMBOL(ceilf): +#if defined(_AMD64_) || defined(__x86_64__) + subq $24, %rsp + .seh_stackalloc 24 + .seh_endprologue + movd %xmm0, 12(%rsp) + movl 12(%rsp), %eax + movl %eax, %ecx + movl %eax, %edx + sarl $23, %ecx + andl $255, %ecx + subl $127, %ecx + cmpl $22, %ecx + jg .l4 + testl %ecx, %ecx + js .l5 + movl $8388607, %r8d + sarl %cl, %r8d + testl %eax, %r8d + je .l3 + addss .hugeval(%rip), %xmm0 + ucomiss .zeroval(%rip), %xmm0 + jbe .l2 + testl %eax, %eax + jle .l1 + movl $8388608, %eax + sarl %cl, %eax + addl %eax, %edx +.l1: + movl %r8d, %eax + notl %eax + andl %edx, %eax +.l2: + movl %eax, 8(%rsp) + movss 8(%rsp), %xmm0 +.l3: + addq $24, %rsp + ret + .p2align 4,,10 +.l4: + addl $-128, %ecx + jne .l3 + addss %xmm0, %xmm0 + addq $24, %rsp + ret + .p2align 4,,10 +.l5: + addss .hugeval(%rip), %xmm0 + ucomiss .zeroval(%rip), %xmm0 + jbe .islesseqzero + testl %eax, %eax + js .l6 + movl $1065353216, %edx + cmovne %edx, %eax +.islesseqzero: + movl %eax, 8(%rsp) + movss 8(%rsp), %xmm0 + addq $24, %rsp + ret + .p2align 4,,10 +.l6: + movl $-2147483648, 8(%rsp) + movss 8(%rsp), %xmm0 + addq $24, %rsp + ret + .seh_endproc + .section .rdata,"dr" + .align 4 +.hugeval: + .long 1900671690 + .align 4 +.zeroval: + .long 0 +#elif defined(_ARM_) || defined(__arm__) + vmrs r1, fpscr + bic r0, r1, #0x00c00000 + orr r0, r0, #0x00400000 /* Round towards Plus Infinity */ + vmsr fpscr, r0 + vcvt.s32.f32 s0, s0 + vcvt.f32.s32 s0, s0 + vmsr fpscr, r1 + bx lr +#elif defined(_X86_) || defined(__i386__) + flds 4(%esp) + subl $8,%esp + + fstcw 4(%esp) /* store fpu control word */ + + /* We use here %edx although only the low 1 bits are defined. + But none of the operations should care and they are faster + than the 16 bit operations. */ + movl $0x0800,%edx /* round towards +oo */ + orl 4(%esp),%edx + andl $0xfbff,%edx + movl %edx,(%esp) + fldcw (%esp) /* load modified control word */ + + frndint /* round */ + + fldcw 4(%esp) /* restore original control word */ + + addl $8,%esp + ret +#endif diff --git a/winsup/cygwin/math/ceill.S b/winsup/cygwin/math/ceill.S new file mode 100644 index 0000000..61d6199 --- /dev/null +++ b/winsup/cygwin/math/ceill.S @@ -0,0 +1,64 @@ +/** + * This file has no copyright assigned and is placed in the Public Domain. + * This file is part of the mingw-w64 runtime package. + * No warranty is given; refer to the file DISCLAIMER.PD within this package. + */ +#include <_mingw_mac.h> + + .file "ceill.S" + .text +#ifdef __x86_64__ + .align 8 +#else + .align 4 +#endif + .globl __MINGW_USYMBOL(ceill) + .def __MINGW_USYMBOL(ceill); .scl 2; .type 32; .endef +__MINGW_USYMBOL(ceill): +#if defined(_AMD64_) || defined(__x86_64__) + fldt (%rdx) + subq $24,%rsp + + fstcw 8(%rsp) /* store fpu control word */ + + /* We use here %edx although only the low 1 bits are defined. + But none of the operations should care and they are faster + than the 16 bit operations. */ + movl $0x0800,%edx /* round towards +oo */ + orl 8(%rsp),%edx + andl $0xfbff,%edx + movl %edx,(%rsp) + fldcw (%rsp) /* load modified control word */ + + frndint /* round */ + + fldcw 8(%rsp) /* restore original control word */ + + addq $24,%rsp + movq %rcx,%rax + movq $0,8(%rcx) + fstpt (%rcx) + ret +#elif defined(_ARM_) || defined(__arm__) + vmrs r1, fpscr + bic r0, r1, #0x00c00000 + orr r0, r0, #0x00400000 /* Round towards Plus Infinity */ + vmsr fpscr, r0 + vcvtr.s32.f64 s0, d0 + vcvt.f64.s32 d0, s0 + vmsr fpscr, r1 + bx lr +#elif defined(_X86_) || defined(__i386__) + fldt 4(%esp) + subl $8,%esp + fstcw 4(%esp) + movl $0x0800,%edx + orl 4(%esp),%edx + andl $0xfbff,%edx + movl %edx,(%esp) + fldcw (%esp) + frndint + fldcw 4(%esp) + addl $8,%esp + ret +#endif diff --git a/winsup/cygwin/math/cephes_emath.c b/winsup/cygwin/math/cephes_emath.c new file mode 100644 index 0000000..8fb4434 --- /dev/null +++ b/winsup/cygwin/math/cephes_emath.c @@ -0,0 +1,1283 @@ +/** + * This file has no copyright assigned and is placed in the Public Domain. + * This file is part of the mingw-w64 runtime package. + * No warranty is given; refer to the file DISCLAIMER.PD within this package. + */ +#include "cephes_emath.h" + +/* + * The constants are for 64 bit precision. + */ + + +/* Move in external format number, + * converting it to internal format. + */ +void __emovi(const short unsigned int * __restrict__ a, + short unsigned int * __restrict__ b) +{ + register const unsigned short *p; + register unsigned short *q; + int i; + + q = b; + p = a + (NE-1); /* point to last word of external number */ + /* get the sign bit */ + if (*p & 0x8000) + *q++ = 0xffff; + else + *q++ = 0; + /* get the exponent */ + *q = *p--; + *q++ &= 0x7fff; /* delete the sign bit */ +#ifdef INFINITY + if ((*(q - 1) & 0x7fff) == 0x7fff) + { +#ifdef NANS + if (__eisnan(a)) + { + *q++ = 0; + for (i = 3; i < NI; i++ ) + *q++ = *p--; + return; + } +#endif + for (i = 2; i < NI; i++) + *q++ = 0; + return; + } +#endif + /* clear high guard word */ + *q++ = 0; + /* move in the significand */ + for (i = 0; i < NE - 1; i++ ) + *q++ = *p--; + /* clear low guard word */ + *q = 0; +} + + +/* +; Add significands +; x + y replaces y +*/ + +void __eaddm(const short unsigned int * __restrict__ x, + short unsigned int * __restrict__ y) +{ + register unsigned long a; + int i; + unsigned int carry; + + x += NI - 1; + y += NI - 1; + carry = 0; + for (i = M; i < NI; i++) + { + a = (unsigned long)(*x) + (unsigned long)(*y) + carry; + if (a & 0x10000) + carry = 1; + else + carry = 0; + *y = (unsigned short)a; + --x; + --y; + } +} + +/* +; Subtract significands +; y - x replaces y +*/ + +void __esubm(const short unsigned int * __restrict__ x, + short unsigned int * __restrict__ y) +{ + unsigned long a; + int i; + unsigned int carry; + + x += NI - 1; + y += NI - 1; + carry = 0; + for (i = M; i < NI; i++) + { + a = (unsigned long)(*y) - (unsigned long)(*x) - carry; + if (a & 0x10000) + carry = 1; + else + carry = 0; + *y = (unsigned short)a; + --x; + --y; + } +} + + +/* Multiply significand of e-type number b +by 16-bit quantity a, e-type result to c. */ + +static void __m16m(short unsigned int a, + short unsigned int * __restrict__ b, + short unsigned int * __restrict__ c) +{ + register unsigned short *pp; + register unsigned long carry; + unsigned short *ps; + unsigned short p[NI]; + unsigned long aa, m; + int i; + + aa = a; + pp = &p[NI - 2]; + *pp++ = 0; + *pp = 0; + ps = &b[NI - 1]; + + for(i = M + 1; i < NI; i++) + { + if (*ps == 0) + { + --ps; + --pp; + *(pp - 1) = 0; + } + else + { + m = (unsigned long) aa * *ps--; + carry = (m & 0xffff) + *pp; + *pp-- = (unsigned short)carry; + carry = (carry >> 16) + (m >> 16) + *pp; + *pp = (unsigned short)carry; + *(pp - 1) = carry >> 16; + } + } + for (i = M; i < NI; i++) + c[i] = p[i]; +} + + +/* Divide significands. Neither the numerator nor the denominator +is permitted to have its high guard word nonzero. */ + +int __edivm(short unsigned int * __restrict__ den, + short unsigned int * __restrict__ num) +{ + int i; + register unsigned short *p; + unsigned long tnum; + unsigned short j, tdenm, tquot; + unsigned short tprod[NI + 1]; + unsigned short equot[NI]; + + p = &equot[0]; + *p++ = num[0]; + *p++ = num[1]; + + for (i = M; i < NI; i++) + { + *p++ = 0; + } + __eshdn1(num); + tdenm = den[M + 1]; + for (i = M; i < NI; i++) + { + /* Find trial quotient digit (the radix is 65536). */ + tnum = (((unsigned long) num[M]) << 16) + num[M + 1]; + + /* Do not execute the divide instruction if it will overflow. */ + if ((tdenm * 0xffffUL) < tnum) + tquot = 0xffff; + else + tquot = tnum / tdenm; + + /* Prove that the divide worked. */ + /* + tcheck = (unsigned long)tquot * tdenm; + if (tnum - tcheck > tdenm) + tquot = 0xffff; + */ + /* Multiply denominator by trial quotient digit. */ + __m16m(tquot, den, tprod); + /* The quotient digit may have been overestimated. */ + if (__ecmpm(tprod, num) > 0) + { + tquot -= 1; + __esubm(den, tprod); + if(__ecmpm(tprod, num) > 0) + { + tquot -= 1; + __esubm(den, tprod); + } + } + __esubm(tprod, num); + equot[i] = tquot; + __eshup6(num); + } + /* test for nonzero remainder after roundoff bit */ + p = &num[M]; + j = 0; + for (i = M; i < NI; i++) + { + j |= *p++; + } + if (j) + j = 1; + + for (i = 0; i < NI; i++) + num[i] = equot[i]; [...] [diff truncated at 100000 bytes]
