diff options
author | Danny Smith <dannysmith@users.sourceforge.net> | 2004-02-01 02:52:21 +0000 |
---|---|---|
committer | Danny Smith <dannysmith@users.sourceforge.net> | 2004-02-01 02:52:21 +0000 |
commit | f6565cd1a68b4a4b7c43b588513cd802597bc5d3 (patch) | |
tree | 560b376dfe5b8a3ec441432c47dd07107560b51d /winsup/mingw | |
parent | 416bc450609d4845ee47a79342f4af99b0bf7036 (diff) | |
download | cygnal-f6565cd1a68b4a4b7c43b588513cd802597bc5d3.tar.gz cygnal-f6565cd1a68b4a4b7c43b588513cd802597bc5d3.tar.bz2 cygnal-f6565cd1a68b4a4b7c43b588513cd802597bc5d3.zip |
* mingwex/math/ldexpl.c (ldexpl): Call __asm__("fscale")
directly, rather than via scabnl.
Diffstat (limited to 'winsup/mingw')
-rw-r--r-- | winsup/mingw/ChangeLog | 5 | ||||
-rw-r--r-- | winsup/mingw/mingwex/math/ldexpl.c | 21 |
2 files changed, 18 insertions, 8 deletions
diff --git a/winsup/mingw/ChangeLog b/winsup/mingw/ChangeLog index f32087fac..bd57ce6b4 100644 --- a/winsup/mingw/ChangeLog +++ b/winsup/mingw/ChangeLog @@ -1,5 +1,10 @@ 2004-02-01 Danny Smith <dannysmith@users.sourceforge.net> + * mingwex/math/ldexpl.c (ldexpl): Call __asm__("fscale") + directly, rather than via scabnl. + +2004-02-01 Danny Smith <dannysmith@users.sourceforge.net> + * mingwex/math/powl.c (powl): Return infinity if extended precision multiplication of x by log2(y) overflows. diff --git a/winsup/mingw/mingwex/math/ldexpl.c b/winsup/mingw/mingwex/math/ldexpl.c index e4477bf6c..19a3d56e3 100644 --- a/winsup/mingw/mingwex/math/ldexpl.c +++ b/winsup/mingw/mingwex/math/ldexpl.c @@ -1,14 +1,19 @@ #include <math.h> #include <errno.h> - - + long double ldexpl(long double x, int expn) { - if (isfinite (x) && x != 0.0L) - { - x = scalbnl (x , expn); - if (!isfinite (x) || x == 0.0) errno = ERANGE; - } - return x; + long double res; + if (!isfinite (x) || x == 0.0L) + return x; + + __asm__ ("fscale" + : "=t" (res) + : "0" (x), "u" ((long double) expn)); + + if (!isfinite (res) || res == 0.0L) + errno = ERANGE; + + return res; } |