aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/libm-i387
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>1998-06-09 18:24:13 +0000
committerUlrich Drepper <drepper@redhat.com>1998-06-09 18:24:13 +0000
commit4bbac92a0a58c00a8c8c99241cde3d4a3ddb3f5c (patch)
tree4557a7d8b1e9402e5ad426280f3bcdd33a68b742 /sysdeps/libm-i387
parent69f234e8ff029cdd0ee7f91df7bcd006bbcab42f (diff)
downloadglibc-4bbac92a0a58c00a8c8c99241cde3d4a3ddb3f5c.tar
glibc-4bbac92a0a58c00a8c8c99241cde3d4a3ddb3f5c.tar.gz
glibc-4bbac92a0a58c00a8c8c99241cde3d4a3ddb3f5c.tar.bz2
glibc-4bbac92a0a58c00a8c8c99241cde3d4a3ddb3f5c.zip
Update.
1998-06-09 18:16 Ulrich Drepper <drepper@cygnus.com> * math/Makefile (libm-calls): Add w_exp10 and e_exp10. * math/libm.map: Add exp10{,f,l} and pow10{,f,l}. * math/math_private.h: Add prototypes for __ieee754_exp10{,f,l}. * math/bits/mathcalls.h: Add definitions for exp10 and pow10 prototypes. * sysdeps/libm-i387/e_exp10.S: New file. * sysdeps/libm-i387/e_exp10f.S: New file. * sysdeps/libm-i387/e_exp10l.S: New file. * sysdeps/libm-ieee754/e_exp10.c: New file. * sysdeps/libm-ieee754/e_exp10f.c: New file. * sysdeps/libm-ieee754/e_exp10l.c: New file. * sysdeps/libm-ieee754/w_exp10.c: New file. * sysdeps/libm-ieee754/w_exp10f.c: New file. * sysdeps/libm-ieee754/w_exp10l.c: New file. * sysdeps/libm-ieee754/k_standard.c: Add exception code for exp10. 1998-05-25 22:18 H.J. Lu <hjl@gnu.org> * sysdeps/unix/sysv/linux/i386/Makefile (sysdep_headers): Add sys/elf.h and sys/reg.h. * sysdeps/unix/sysv/linux/i386/sys/elf.h: New file. * sysdeps/unix/sysv/linux/i386/sys/reg.h: New file. * sysdeps/unix/sysv/linux/i386/sys/procfs.h: New file. * sysdeps/unix/sysv/linux/i386/sys/user.h: New file. * sysdeps/unix/sysv/linux/sys/ptrace.h (PTRACE_GETREGS, PTRACE_SETREGS, PTRACE_GETFPREGS, PTRACE_SETFPREGS): Added.
Diffstat (limited to 'sysdeps/libm-i387')
-rw-r--r--sysdeps/libm-i387/e_exp10.S38
-rw-r--r--sysdeps/libm-i387/e_exp10f.S38
-rw-r--r--sysdeps/libm-i387/e_exp10l.S38
3 files changed, 114 insertions, 0 deletions
diff --git a/sysdeps/libm-i387/e_exp10.S b/sysdeps/libm-i387/e_exp10.S
new file mode 100644
index 0000000000..6bfcdbb723
--- /dev/null
+++ b/sysdeps/libm-i387/e_exp10.S
@@ -0,0 +1,38 @@
+/*
+ * Written by Ulrich Drepper <drepper@cygnus.com>.
+ */
+
+#include <machine/asm.h>
+
+/* 10^x = 2^(x * log2(10)) */
+ENTRY(__ieee754_exp10)
+ fldl 4(%esp)
+/* I added the following ugly construct because exp(+-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_exp10)
diff --git a/sysdeps/libm-i387/e_exp10f.S b/sysdeps/libm-i387/e_exp10f.S
new file mode 100644
index 0000000000..4791b99afa
--- /dev/null
+++ b/sysdeps/libm-i387/e_exp10f.S
@@ -0,0 +1,38 @@
+/*
+ * Written by Ulrich Drepper.
+ */
+
+#include <machine/asm.h>
+
+/* e^x = 2^(x * log2(10)) */
+ENTRY(__ieee754_exp10f)
+ flds 4(%esp)
+/* I added the following ugly construct because exp(+-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_exp10f)
diff --git a/sysdeps/libm-i387/e_exp10l.S b/sysdeps/libm-i387/e_exp10l.S
new file mode 100644
index 0000000000..71f0da792d
--- /dev/null
+++ b/sysdeps/libm-i387/e_exp10l.S
@@ -0,0 +1,38 @@
+/*
+ * Written by Ulrich Drepper <drepper@cygnus.com>.
+ */
+
+#include <machine/asm.h>
+
+/* e^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)