aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/i386/fpu
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2001-02-17 16:54:13 +0000
committerUlrich Drepper <drepper@redhat.com>2001-02-17 16:54:13 +0000
commit63640cb777a26b684f44a1786c1384d3a96a8825 (patch)
tree9ed7ce04cdc72dd2a25d903adfc5333514c68bb7 /sysdeps/i386/fpu
parentd313277ad2a2a7a292705a5d9c9a47709e759f42 (diff)
downloadglibc-63640cb777a26b684f44a1786c1384d3a96a8825.zip
glibc-63640cb777a26b684f44a1786c1384d3a96a8825.tar.gz
glibc-63640cb777a26b684f44a1786c1384d3a96a8825.tar.bz2
Update.
2001-02-17 Ulrich Drepper <drepper@redhat.com> * sysdeps/generic/s_exp2l.c: Renamed to... * sysdeps/generic/s_exp2l.c: ...this. New file. * sysdeps/i386/fpu/s_exp2.S: Renamed to... * sysdeps/i386/fpu/s_exp2.S: ...this. New file. * sysdeps/i386/fpu/s_exp2f.S: Renamed to... * sysdeps/i386/fpu/s_exp2f.S: ...this. New file. * sysdeps/i386/fpu/s_exp2l.S: Renamed to... * sysdeps/i386/fpu/s_exp2l.S: ...this. New file. * sysdeps/ieee754/flt-32/s_exp2f.c: Renamed to... * sysdeps/ieee754/flt-32/s_exp2f.c: ...this. New file. * sysdeps/ieee754/dbl-64/s_exp2.c: Renamed to... * sysdeps/ieee754/dbl-64/s_exp2.c: ...this. New file. * sysdeps/m68k/fpu/s_exp2.c: Renamed to... * sysdeps/m68k/fpu/s_exp2.c: ...this. New file. * sysdeps/m68k/fpu/s_exp2f.c: Renamed to... * sysdeps/m68k/fpu/s_exp2f.c: ...this. New file. * sysdeps/m68k/fpu/s_exp2l.c: Renamed to... * sysdeps/m68k/fpu/s_exp2l.c: ...this. New file.
Diffstat (limited to 'sysdeps/i386/fpu')
-rw-r--r--sysdeps/i386/fpu/e_exp2.S37
-rw-r--r--sysdeps/i386/fpu/e_exp2f.S37
-rw-r--r--sysdeps/i386/fpu/e_exp2l.S37
3 files changed, 111 insertions, 0 deletions
diff --git a/sysdeps/i386/fpu/e_exp2.S b/sysdeps/i386/fpu/e_exp2.S
new file mode 100644
index 0000000..778c0c0
--- /dev/null
+++ b/sysdeps/i386/fpu/e_exp2.S
@@ -0,0 +1,37 @@
+/*
+ * Written by J.T. Conklin <jtc@netbsd.org>.
+ * Adapted for exp2 by Ulrich Drepper <drepper@cygnus.com>.
+ * Public domain.
+ */
+
+#include <machine/asm.h>
+
+ENTRY(__ieee754_exp2)
+ 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. */
+ fld %st
+ frndint /* int(x) */
+ fsubr %st,%st(1) /* fract(x) */
+ fxch
+ f2xm1 /* 2^(fract(x)) - 1 */
+ fld1
+ faddp /* 2^(fract(x)) */
+ 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_exp2)
diff --git a/sysdeps/i386/fpu/e_exp2f.S b/sysdeps/i386/fpu/e_exp2f.S
new file mode 100644
index 0000000..c2d1af1
--- /dev/null
+++ b/sysdeps/i386/fpu/e_exp2f.S
@@ -0,0 +1,37 @@
+/*
+ * Written by J.T. Conklin <jtc@netbsd.org>.
+ * Adapted for exp2 by Ulrich Drepper <drepper@cygnus.com>.
+ * Public domain.
+ */
+
+#include <machine/asm.h>
+
+ENTRY(__ieee754_exp2f)
+ 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. */
+ fld %st
+ frndint /* int(x) */
+ fsubr %st,%st(1) /* fract(x) */
+ fxch
+ f2xm1 /* 2^(fract(x)) - 1 */
+ fld1
+ faddp /* 2^(fract(x)) */
+ 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_exp2f)
diff --git a/sysdeps/i386/fpu/e_exp2l.S b/sysdeps/i386/fpu/e_exp2l.S
new file mode 100644
index 0000000..fa1fdc9
--- /dev/null
+++ b/sysdeps/i386/fpu/e_exp2l.S
@@ -0,0 +1,37 @@
+/*
+ * Written by J.T. Conklin <jtc@netbsd.org>.
+ * Adapted for exp2 by Ulrich Drepper <drepper@cygnus.com>.
+ * Public domain.
+ */
+
+#include <machine/asm.h>
+
+ENTRY(__ieee754_exp2l)
+ fldt 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. */
+ fld %st
+ frndint /* int(x) */
+ fsubr %st,%st(1) /* fract(x) */
+ fxch
+ f2xm1 /* 2^(fract(x)) - 1 */
+ fld1
+ faddp /* 2^(fract(x)) */
+ 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_exp2l)