aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/i386/fpu/e_powf.S
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2001-02-18 09:02:38 +0000
committerUlrich Drepper <drepper@redhat.com>2001-02-18 09:02:38 +0000
commit6571c5709af6e58e3b9a571fc6289be375a1ffe3 (patch)
tree132bbb604a697ea20c92a59631e9bcdbad5d3e81 /sysdeps/i386/fpu/e_powf.S
parent4ebacc5a6284e211976e14e016d1cf90ee2f3837 (diff)
downloadglibc-6571c5709af6e58e3b9a571fc6289be375a1ffe3.tar
glibc-6571c5709af6e58e3b9a571fc6289be375a1ffe3.tar.gz
glibc-6571c5709af6e58e3b9a571fc6289be375a1ffe3.tar.bz2
glibc-6571c5709af6e58e3b9a571fc6289be375a1ffe3.zip
Update.
2001-02-18 Ulrich Drepper <drepper@redhat.com> * math/libm-test.inc (pow_test): Correct expected results for x == +-1. * sysdeps/i386/fpu/e_pow.S: Handle x == +-1 correctly. * sysdeps/i386/fpu/e_powf.S: Likewise. * sysdeps/i386/fpu/e_powl.S: Likewise. * sysdeps/i386/fpu/bits/mathinline.h: Remove pow inline code. * sysdeps/generic/e_exp2l.c: ...this. New file. * sysdeps/i386/fpu/e_exp2.S: ...this. New file. * sysdeps/i386/fpu/e_exp2f.S: ...this. New file. * sysdeps/i386/fpu/e_exp2l.S: ...this. New file. * sysdeps/ieee754/flt-32/e_exp2f.c: ...this. New file. * sysdeps/ieee754/dbl-64/e_exp2.c: ...this. New file. * sysdeps/m68k/fpu/e_exp2.c: ...this. New file. * sysdeps/m68k/fpu/e_exp2f.c: ...this. New file. * sysdeps/m68k/fpu/e_exp2l.c: ...this. New file.
Diffstat (limited to 'sysdeps/i386/fpu/e_powf.S')
-rw-r--r--sysdeps/i386/fpu/e_powf.S18
1 files changed, 14 insertions, 4 deletions
diff --git a/sysdeps/i386/fpu/e_powf.S b/sysdeps/i386/fpu/e_powf.S
index c023c11e65..30f262e843 100644
--- a/sysdeps/i386/fpu/e_powf.S
+++ b/sysdeps/i386/fpu/e_powf.S
@@ -1,5 +1,5 @@
/* ix87 specific implementation of pow function.
- Copyright (C) 1996, 1997, 1999 Free Software Foundation, Inc.
+ Copyright (C) 1996, 1997, 1999, 2001 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
@@ -125,7 +125,18 @@ ENTRY(__ieee754_powf)
testl %edx, %edx
jnz 6b
fstp %st(0) // ST*x
-30: ret
+ ret
+
+ /* y is ±NAN */
+30: flds 4(%esp) // x : y
+ fldl MO(one) // 1.0 : x : y
+ fucomp %st(1) // x : y
+ fnstsw
+ sahf
+ je 31f
+ fxch // y : x
+31: fstp %st(1)
+ ret
.align ALIGNARG(4)
2: /* y is a real number. */
@@ -184,8 +195,7 @@ ENTRY(__ieee754_powf)
ret
.align ALIGNARG(4)
-14: fldl MO(infinity)
- fmull MO(zero) // raise invalid exception
+14: fldl MO(one)
ret
.align ALIGNARG(4)