summaryrefslogtreecommitdiffstats
path: root/lib/libm/src
diff options
context:
space:
mode:
authormartynas <martynas@openbsd.org>2014-02-11 18:21:47 +0000
committermartynas <martynas@openbsd.org>2014-02-11 18:21:47 +0000
commit00ee142f1d6a4f0689a9df50fe896b7be2ffeae3 (patch)
treef18d7e401910ecb9e3e1b359721c7329fa05be13 /lib/libm/src
parent- grow the decompression buffer more aggressively if we have (diff)
downloadwireguard-openbsd-00ee142f1d6a4f0689a9df50fe896b7be2ffeae3.tar.xz
wireguard-openbsd-00ee142f1d6a4f0689a9df50fe896b7be2ffeae3.zip
Make floor round to integral value less than x, when x is tiny.
Reported by dcoppa@, thanks! OK kettenis@, dcoppa@.
Diffstat (limited to 'lib/libm/src')
-rw-r--r--lib/libm/src/ld128/s_floorl.c7
-rw-r--r--lib/libm/src/ld80/s_floorl.c7
2 files changed, 8 insertions, 6 deletions
diff --git a/lib/libm/src/ld128/s_floorl.c b/lib/libm/src/ld128/s_floorl.c
index e3c05d1c914..a7d8140cc64 100644
--- a/lib/libm/src/ld128/s_floorl.c
+++ b/lib/libm/src/ld128/s_floorl.c
@@ -34,10 +34,11 @@ floorl(long double x)
jj0 = ((i0>>48)&0x7fff)-0x3fff;
if(jj0<48) {
if(jj0<0) { /* raise inexact if x != 0 */
- if(huge+x>0.0) {/* return 0*sign(x) if |x|<1 */
- if(i0>=0) {i0=i1=0;}
+ if(huge+x>0.0) {
+ if(i0>=0)
+ return 0.0L;
else if(((i0&0x7fffffffffffffffLL)|i1)!=0)
- { i0=0xbfff000000000000ULL;i1=0;}
+ return -1.0L;
}
} else {
i = (0x0000ffffffffffffULL)>>jj0;
diff --git a/lib/libm/src/ld80/s_floorl.c b/lib/libm/src/ld80/s_floorl.c
index a1751ab9615..a5b787796bc 100644
--- a/lib/libm/src/ld80/s_floorl.c
+++ b/lib/libm/src/ld80/s_floorl.c
@@ -35,10 +35,11 @@ floorl(long double x)
jj0 = (se&0x7fff)-0x3fff;
if(jj0<31) {
if(jj0<0) { /* raise inexact if x != 0 */
- if(huge+x>0.0) {/* return 0*sign(x) if |x|<1 */
- if(sx==0) {se=0;i0=i1=0;}
+ if(huge+x>0.0) {
+ if(sx==0)
+ return 0.0L;
else if(((se&0x7fff)|i0|i1)!=0)
- { se=0xbfff;i0=i1=0;}
+ return -1.0L;
}
} else {
i = (0x7fffffff)>>jj0;