diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2017-06-07 11:03:16 +0200 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2017-06-07 11:03:16 +0200 |
commit | e4094e49c10dba19e4c2f9fa390b12473f017c42 (patch) | |
tree | 87ce00dc3fbb93b8053acfca31a1b1d6488dfd8e /winsup/cygwin/math/lrintl.c | |
parent | 163066a1a5fec04b3b05d44955fe1b07c0391f1c (diff) | |
download | cygnal-e4094e49c10dba19e4c2f9fa390b12473f017c42.tar.gz cygnal-e4094e49c10dba19e4c2f9fa390b12473f017c42.tar.bz2 cygnal-e4094e49c10dba19e4c2f9fa390b12473f017c42.zip |
cygwin: Fix lrint{f,l} to return a 64 bit long on x86_64
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>
Diffstat (limited to 'winsup/cygwin/math/lrintl.c')
-rw-r--r-- | winsup/cygwin/math/lrintl.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/winsup/cygwin/math/lrintl.c b/winsup/cygwin/math/lrintl.c index 94c4e4924..c25df9226 100644 --- a/winsup/cygwin/math/lrintl.c +++ b/winsup/cygwin/math/lrintl.c @@ -8,7 +8,9 @@ long lrintl (long double x) { long retval = 0l; -#if defined(_AMD64_) || defined(__x86_64__) || defined(_X86_) || defined(__i386__) +#if defined (__x86_64__) && defined (__CYGWIN__) + __asm__ __volatile__ ("fistpll %0" : "=m" (retval) : "t" (x) : "st"); +#elif defined(_AMD64_) || defined(__x86_64__) || defined(_X86_) || defined(__i386__) __asm__ __volatile__ ("fistpl %0" : "=m" (retval) : "t" (x) : "st"); #elif defined(__arm__) || defined(_ARM_) retval = lrint(x); |