summaryrefslogtreecommitdiff
path: root/sysdeps/i386/fpu/s_expm1.S
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/i386/fpu/s_expm1.S')
-rw-r--r--sysdeps/i386/fpu/s_expm1.S26
1 files changed, 4 insertions, 22 deletions
diff --git a/sysdeps/i386/fpu/s_expm1.S b/sysdeps/i386/fpu/s_expm1.S
index 05e5285d7b..0bd227ee7a 100644
--- a/sysdeps/i386/fpu/s_expm1.S
+++ b/sysdeps/i386/fpu/s_expm1.S
@@ -1,5 +1,5 @@
/* ix87 specific implementation of exp(x)-1.
- Copyright (C) 1996-2015 Free Software Foundation, Inc.
+ Copyright (C) 1996-2016 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
Based on code by John C. Bowman <bowman@ipp-garching.mpg.de>.
@@ -23,6 +23,7 @@
#include <sysdep.h>
#include <machine/asm.h>
+#include <i386-math-asm.h>
.section .rodata
@@ -37,12 +38,7 @@ one: .double 1.0
l2e: .tfloat 1.442695040888963407359924681002
ASM_SIZE_DIRECTIVE(l2e)
- .section .rodata.cst8,"aM",@progbits,8
-
- .p2align 3
- .type dbl_min,@object
-dbl_min: .byte 0, 0, 0, 0, 0, 0, 0x10, 0
- ASM_SIZE_DIRECTIVE(dbl_min)
+DEFINE_DBL_MIN
#ifdef PIC
#define MO(op) op##@GOTOFF(%edx)
@@ -81,21 +77,6 @@ ENTRY(__expm1)
#ifdef PIC
LOAD_PIC_REG (dx)
#endif
- fld %st
- fabs
- fcoml MO(dbl_min)
- fstp %st
- fnstsw
- sahf
- jae 5f
- subl $8, %esp
- cfi_adjust_cfa_offset (8)
- fld %st(0)
- fmul %st(0)
- fstpl (%esp)
- addl $8, %esp
- cfi_adjust_cfa_offset (-8)
- ret
5: fldt MO(l2e) // log2(e) : x
fmulp // log2(e)*x
@@ -122,6 +103,7 @@ ENTRY(__expm1)
fsubrl MO(one) // 1-2^int(log2(e)*x) : int(log2(e)*x) : 2^(log2(e)*x)-2^int(log2(e)*x)
fstp %st(1) // 1-2^int(log2(e)*x) : 2^(log2(e)*x)-2^int(log2(e)*x)
fsubrp %st, %st(1) // 2^(log2(e)*x)
+ DBL_CHECK_FORCE_UFLOW
ret
2: fstp %st