aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/i386/fpu/e_exp10l.S
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2012-05-06 18:23:44 +0000
committerJoseph Myers <joseph@codesourcery.com>2012-05-06 18:23:44 +0000
commitd8b82cad1b525bdcbfff88d218c7c45032e4a3af (patch)
tree77e88bf7642e69d74d4df3d771ffbb4274937b31 /sysdeps/i386/fpu/e_exp10l.S
parent6c23e11c4dd036e65073d4e4d6bc971a445deaea (diff)
downloadglibc-d8b82cad1b525bdcbfff88d218c7c45032e4a3af.tar
glibc-d8b82cad1b525bdcbfff88d218c7c45032e4a3af.tar.gz
glibc-d8b82cad1b525bdcbfff88d218c7c45032e4a3af.tar.bz2
glibc-d8b82cad1b525bdcbfff88d218c7c45032e4a3af.zip
Fix exp10 inaccuracy and exceptions (bugs 13884, 13914).
Diffstat (limited to 'sysdeps/i386/fpu/e_exp10l.S')
-rw-r--r--sysdeps/i386/fpu/e_exp10l.S41
1 files changed, 2 insertions, 39 deletions
diff --git a/sysdeps/i386/fpu/e_exp10l.S b/sysdeps/i386/fpu/e_exp10l.S
index 04ec8001d9..d843e2b5e8 100644
--- a/sysdeps/i386/fpu/e_exp10l.S
+++ b/sysdeps/i386/fpu/e_exp10l.S
@@ -1,39 +1,2 @@
-/*
- * Written by Ulrich Drepper <drepper@cygnus.com>.
- */
-
-#include <machine/asm.h>
-
-/* 10^x = 2^(x * log2l(10)) */
-ENTRY(__ieee754_exp10l)
- fldt 4(%esp)
-/* I added the following ugly construct because expl(+-Inf) resulted
- in NaN. The ugliness results from the bright minds at Intel.
- For the i686 the code can be written better.
- -- drepper@cygnus.com. */
- fxam /* Is NaN or +-Inf? */
- fstsw %ax
- movb $0x45, %dh
- andb %ah, %dh
- cmpb $0x05, %dh
- je 1f /* Is +-Inf, jump. */
- fldl2t
- fmulp /* x * log2(10) */
- fld %st
- frndint /* int(x * log2(10)) */
- fsubr %st,%st(1) /* fract(x * log2(10)) */
- fxch
- f2xm1 /* 2^(fract(x * log2(10))) - 1 */
- fld1
- faddp /* 2^(fract(x * log2(10))) */
- fscale /* e^x */
- fstp %st(1)
- ret
-
-1: testl $0x200, %eax /* Test sign. */
- jz 2f /* If positive, jump. */
- fstp %st
- fldz /* Set result to 0. */
-2: ret
-END (__ieee754_exp10l)
-strong_alias (__ieee754_exp10l, __exp10l_finite)
+#define USE_AS_EXP10L
+#include <e_expl.S>