summaryrefslogtreecommitdiff
path: root/sysdeps/i386/i686/fpu/e_logl.S
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/i386/i686/fpu/e_logl.S')
-rw-r--r--sysdeps/i386/i686/fpu/e_logl.S5
1 files changed, 4 insertions, 1 deletions
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)