aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog8
-rw-r--r--NEWS4
-rw-r--r--sysdeps/i386/fpu/e_logl.S5
-rw-r--r--sysdeps/i386/i686/fpu/e_logl.S5
-rw-r--r--sysdeps/x86_64/fpu/e_logl.S5
5 files changed, 22 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index 997cec628a..3204c4e046 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2014-06-18 Joseph Myers <joseph@codesourcery.com>
+
+ [BZ #17022]
+ * sysdeps/i386/fpu/e_logl.S (__ieee754_logl): Do not subtract 1
+ from arguments -2 or below.
+ * sysdeps/i386/i686/fpu/e_logl.S (__ieee754_logl): Likewise.
+ * sysdeps/x86_64/fpu/e_logl.S (__ieee754_logl): Likewise.
+
2014-06-18 Andreas Schwab <schwab@suse.de>
[BZ #17062]
diff --git a/NEWS b/NEWS
index 429dba5f2e..0c4d8bb184 100644
--- a/NEWS
+++ b/NEWS
@@ -19,8 +19,8 @@ Version 2.20
16791, 16796, 16799, 16800, 16815, 16823, 16824, 16831, 16838, 16849,
16854, 16876, 16877, 16878, 16882, 16885, 16888, 16890, 16912, 16915,
16916, 16917, 16922, 16927, 16928, 16932, 16943, 16958, 16965, 16966,
- 16967, 16977, 16978, 16984, 16990, 16996, 17009, 17031, 17042, 17048,
- 17058, 17062.
+ 16967, 16977, 16978, 16984, 16990, 16996, 17009, 17022, 17031, 17042,
+ 17048, 17058, 17062.
* The minimum Linux kernel version that this version of the GNU C Library
can be used with is 2.6.32.
diff --git a/sysdeps/i386/fpu/e_logl.S b/sysdeps/i386/fpu/e_logl.S
index edae1d70df..828e98aa8d 100644
--- a/sysdeps/i386/fpu/e_logl.S
+++ b/sysdeps/i386/fpu/e_logl.S
@@ -40,8 +40,11 @@ ENTRY(__ieee754_logl)
fld %st // x : x : log(2)
sahf
jc 3f // in case x is NaN or +-Inf
+ movzwl 4+8(%esp), %eax
+ cmpl $0xc000, %eax
+ jae 6f // x <= -2, avoid overflow from -LDBL_MAX - 1.
4: fsubl MO(one) // x-1 : x : log(2)
- fld %st // x-1 : x-1 : x : log(2)
+6: fld %st // x-1 : x-1 : x : log(2)
fabs // |x-1| : x-1 : x : log(2)
fcompl MO(limit) // x-1 : x : log(2)
fnstsw // x-1 : x : log(2)
diff --git a/sysdeps/i386/i686/fpu/e_logl.S b/sysdeps/i386/i686/fpu/e_logl.S
index a0d1107dc0..0ccc8fc71e 100644
--- a/sysdeps/i386/i686/fpu/e_logl.S
+++ b/sysdeps/i386/i686/fpu/e_logl.S
@@ -39,8 +39,11 @@ ENTRY(__ieee754_logl)
LOAD_PIC_REG (dx)
#endif
fld %st // x : x : log(2)
+ movzwl 4+8(%esp), %eax
+ cmpl $0xc000, %eax
+ jae 5f // x <= -2, avoid overflow from -LDBL_MAX - 1.
fsubl MO(one) // x-1 : x : log(2)
- fld %st // x-1 : x-1 : x : log(2)
+5: fld %st // x-1 : x-1 : x : log(2)
fabs // |x-1| : x-1 : x : log(2)
fld MO(limit) // 0.29 : |x-1| : x-1 : x : log(2)
fcomip %st(1) // |x-1| : x-1 : x : log(2)
diff --git a/sysdeps/x86_64/fpu/e_logl.S b/sysdeps/x86_64/fpu/e_logl.S
index 315afc0033..047b8db88a 100644
--- a/sysdeps/x86_64/fpu/e_logl.S
+++ b/sysdeps/x86_64/fpu/e_logl.S
@@ -38,8 +38,11 @@ ENTRY(__ieee754_logl)
fld %st // x : x : log(2)
testb $1, %ah
jnz 3f // in case x is NaN or +-Inf
+ movzwl 8+8(%rsp), %eax
+ cmpl $0xc000, %eax
+ jae 6f // x <= -2, avoid overflow from -LDBL_MAX - 1.
4: fsubl MO(one) // x-1 : x : log(2)
- fld %st // x-1 : x-1 : x : log(2)
+6: fld %st // x-1 : x-1 : x : log(2)
fabs // |x-1| : x-1 : x : log(2)
fcompl MO(limit) // x-1 : x : log(2)
fnstsw // x-1 : x : log(2)