summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin/math
Commit message (Collapse)AuthorAgeFilesLines
* cygwin: Fix lrint{f,l} to return a 64 bit long on x86_64Corinna Vinschen2017-06-073-3/+9
| | | | | | | | Mingw-w64 (where the code has been taken from) has 4 byte longs independently of the architecture but x86_64 Cygwin has 64 bit longs. So use fistpll instead of fistpl on x86_64 Cygwin. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* newlib: remove __infinity{f,ld} constantsCorinna Vinschen2017-04-181-0/+5
| | | | | | | | | | | | | | | previous commit 4c90db7bc89e7fa1077025fefdd58269dc71a6ac introduced a compile time error because libm/common/s_infconst.c used the remove __fmath, __dmath, and __ldmath union types. Since this is very old, and unused for a very long time, just drop the file and thus the __infinity constants entirely. Exception: Cygwin exports __infinity from the beginning. There's a very, VERY low probability that any existing executable or lib still uses this constant, but we just keep it in for backward compat, nevertheless. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* Avoid truncating from long double to double in sinhl().David Wohlferd2016-08-221-1/+1
| | | | | | | | This routine makes a call to fabs instead of fabsl(), causing truncation. Clang complains (warning: absolute value function 'fabs' given an argument of type 'long double' but has parameter of type 'double' which may cause truncation of value). Signed-off-by: David Wohlferd <dw@LimeGreenSocks.com>
* sqrt: Fix NaN propagation for IEEE Std 754-2008Ray Donnelly2016-08-221-3/+2
| | | | | | | | | | | | | | | | | | | | | | | The R language has some hacks specifically for mingw-w64 that were caused by our handling of NaNs in sqrt(x). R uses a special valued NaN to mean 'Not Available' and expects it to be retained through various calculations. Our sqrt(x) doesn't do this, instead it normalises such a NaN (retaining sign). From: http://wwwf.imperial.ac.uk/~drmii/M3SC_2016/IEEE_2008_4610935.pdf "6.2.3 NaN propagation An operation that propagates a NaN operand to its result and has a single NaN as an input should produce a NaN with the payload of the input NaN if representable in the destination format." There might even be a slight speed-up from this too. Thanks to Duncan Murdoch for finding the reference.
* truncl: Fix setting rounding bits in FPU control wordCorinna Vinschen2016-07-181-2/+6
| | | | | | | | | | | Mingw-w64, which is the source of this code, uses different definitions of the rounding bits FE_TONEAREST and friends. They immediately reflect the bit values in the FPU control word, while on Cygwin they are shifted down to become the values 0-3. Fix the bit computing expression to account for the difference. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* cygwin/math: make isinf functions signedYaakov Selkowitz2016-04-041-3/+3
| | | | | | | | | glibc returns -1 for negative infinity: http://man7.org/linux/man-pages/man3/isinfl.3.html https://sourceware.org/bugzilla/show_bug.cgi?id=15367 Signed-off-by: Yaakov Selkowitz <yselkowi@redhat.com>
* Add missing nanlCorinna Vinschen2016-03-291-0/+5
| | | | | | | | * Makefile.in (MATH_OFILES): Add nanl.o. * common.din (nanl): Export. * math/nanl.c: New file. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* Add missing long double functions to CygwinCorinna Vinschen2016-03-29133-0/+10660
This patch adds the long double functions missing in newlib to Cygwin. Apart from some self-written additions (exp10l, finite{f,l}, isinf{f,l}, isnan{f,l}, pow10l) the files are taken from the Mingw-w64 math lib. Minor changes were required, e.g. substitue _WIN64 with __x86_64__ and fixing __FLT_RPT_DOMAIN/__FLT_RPT_ERANGE for Cygwin. Cygwin: * math: New subdir with math functions. * Makefile.in (VPATH): Add math subdir. (MATH_OFILES): List of object files collected from building files in math subdir. (DLL_OFILES): Add $(MATH_OFILES). ${CURDIR}/libm.a: Add $(MATH_OFILES) to build. * common.din: Add new functions from math subdir. * i686.din: Align to new math subdir. Remove functions now commonly available. * x86_64.din: Ditto. * math.h: math.h wrapper to define mingw structs used in some files in math subdir. * include/cygwin/version.h: Bump API minor version. newlib: * libc/include/complex.h: Add prototypes for complex long double functions. Only define for Cygwin. * libc/include/math.h: Additionally enable prototypes of long double functions for Cygwin. Add Cygwin-only prototypes for dreml, sincosl, exp10l and pow10l. Explain why we don't add them to newlib. * libc/include/tgmath.h: Enable long double handling on Cygwin. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>