summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJon Beniston <jon@beniston.com>2018-08-31 22:42:29 +0100
committerCorinna Vinschen <corinna@vinschen.de>2018-09-03 09:41:23 +0200
commitfcc1e7039f92509ccca895432844dc26a2366671 (patch)
tree3adb2ea3349513508e3e1ca6da7655ddddf1ea0b
parent3017f23f1cfdf31dbebdeaa32e45aca15c0b77b6 (diff)
downloadcygnal-fcc1e7039f92509ccca895432844dc26a2366671.tar.gz
cygnal-fcc1e7039f92509ccca895432844dc26a2366671.tar.bz2
cygnal-fcc1e7039f92509ccca895432844dc26a2366671.zip
e_scalb.c: Call scalbln instead of scalbn on 16-bit targets to ensure constant fits in an int.
-rw-r--r--newlib/libm/math/e_scalb.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/newlib/libm/math/e_scalb.c b/newlib/libm/math/e_scalb.c
index 0bb924b43..4d8bb8b71 100644
--- a/newlib/libm/math/e_scalb.c
+++ b/newlib/libm/math/e_scalb.c
@@ -46,8 +46,13 @@
else return x/(-fn);
}
if (rint(fn)!=fn) return (fn-fn)/(fn-fn);
+#if INT_MAX == 32767
+ if ( fn > 65000.0) return scalbln(x, 65000);
+ if (-fn > 65000.0) return scalbln(x,-65000);
+#else
if ( fn > 65000.0) return scalbn(x, 65000);
if (-fn > 65000.0) return scalbn(x,-65000);
+#endif
return scalbn(x,(int)fn);
#endif
}