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.
This commit is contained in:
Ulrich Drepper 2001-02-18 09:02:38 +00:00
parent 4ebacc5a62
commit 6571c5709a
6 changed files with 66 additions and 77 deletions

View File

@ -1,25 +1,34 @@
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.
2001-02-17 Ulrich Drepper <drepper@redhat.com>
* math/Makefile (libm-calls): It's e_exp2 not s_exp2.
* sysdeps/generic/s_exp2l.c: Renamed to...
* sysdeps/generic/s_exp2l.c: ...this. New file.
* sysdeps/generic/e_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/e_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/e_exp2f.S: ...this. New file.
* sysdeps/i386/fpu/s_exp2l.S: Renamed to...
* sysdeps/i386/fpu/s_exp2l.S: ...this. New file.
* sysdeps/i386/fpu/e_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/flt-32/e_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/ieee754/dbl-64/e_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/e_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/e_exp2f.c: ...this. New file.
* sysdeps/m68k/fpu/s_exp2l.c: Renamed to...
* sysdeps/m68k/fpu/s_exp2l.c: ...this. New file.
* sysdeps/m68k/fpu/e_exp2l.c: ...this. New file.
2001-02-17 Andreas Jaeger <aj@suse.de>

View File

@ -3468,7 +3468,7 @@ pow_test (void)
TEST_ff_f (pow, nan_value, nan_value, nan_value);
TEST_ff_f (pow, 0, nan_value, nan_value);
TEST_ff_f (pow, 1, nan_value, nan_value);
TEST_ff_f (pow, 1, nan_value, 1);
TEST_ff_f (pow, -1, nan_value, nan_value);
TEST_ff_f (pow, nan_value, 1, nan_value);
TEST_ff_f (pow, nan_value, -1, nan_value);
@ -3476,10 +3476,10 @@ pow_test (void)
/* pow (x, NaN) == NaN. */
TEST_ff_f (pow, 3.0, nan_value, nan_value);
TEST_ff_f (pow, 1, plus_infty, nan_value, INVALID_EXCEPTION);
TEST_ff_f (pow, -1, plus_infty, nan_value, INVALID_EXCEPTION);
TEST_ff_f (pow, 1, minus_infty, nan_value, INVALID_EXCEPTION);
TEST_ff_f (pow, -1, minus_infty, nan_value, INVALID_EXCEPTION);
TEST_ff_f (pow, 1, plus_infty, 1);
TEST_ff_f (pow, -1, plus_infty, 1);
TEST_ff_f (pow, 1, minus_infty, 1);
TEST_ff_f (pow, -1, minus_infty, 1);
TEST_ff_f (pow, -0.1L, 1.1L, nan_value, INVALID_EXCEPTION);
TEST_ff_f (pow, -0.1L, -1.1L, nan_value, INVALID_EXCEPTION);

View File

@ -1,5 +1,5 @@
/* Inline math functions for i387.
Copyright (C) 1995,96,97,98,99,2000 Free Software Foundation, Inc.
Copyright (C) 1995,96,97,98,99,2000,2001 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by John C. Bowman <bowman@math.ualberta.ca>, 1995.
@ -413,56 +413,6 @@ __inline_mathcodeNP (tan, __x, \
("fptan" \
: "=t" (__value2), "=u" (__value) : "0" (__x)); \
return __value)
__inline_mathcodeNP2 (pow, __x, __y, \
register long double __value; \
register long double __exponent; \
__extension__ long long int __p = (long long int) __y; \
if (__x == 0.0) \
{ \
if (__y > 0.0) \
return __y == (double) __p && (__p & 1) != 0 ? __x : 0.0; \
else if (__y < 0.0) \
return (__y == (double) __p && (-__p & 1) != 0 \
? 1.0 / __x : 1.0 / fabs (__x)); \
} \
if (__y == (double) __p) \
{ \
long double __r = 1.0; \
if (__p == 0) \
return 1.0; \
if (__p < 0) \
{ \
__p = -__p; \
__x = 1.0 / __x; \
} \
while (1) \
{ \
if (__p & 1) \
__r *= __x; \
__p >>= 1; \
if (__p == 0) \
return __r; \
__x *= __x; \
} \
/* NOTREACHED */ \
} \
__asm __volatile__ \
("fyl2x" : "=t" (__value) : "0" (__x), "u" (1.0) : "st(1)"); \
__asm __volatile__ \
("fmul %%st(1) # y * log2(x)\n\t" \
"fst %%st(1)\n\t" \
"frndint # int(y * log2(x))\n\t" \
"fxch\n\t" \
"fsub %%st(1) # fract(y * log2(x))\n\t" \
"f2xm1 # 2^(fract(y * log2(x))) - 1\n\t" \
: "=t" (__value), "=u" (__exponent) : "0" (__y), "1" (__value)); \
__value += 1.0; \
__asm __volatile__ \
("fscale" \
: "=t" (__value) : "0" (__value), "u" (__exponent)); \
return __value)
#endif /* __FAST_MATH__ */

View File

@ -1,5 +1,5 @@
/* ix87 specific implementation of pow function.
Copyright (C) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
Copyright (C) 1996, 1997, 1998, 1999, 2001 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
@ -130,7 +130,18 @@ ENTRY(__ieee754_pow)
orl %edx, %ecx
jnz 6b
fstp %st(0) // ST*x
30: ret
ret
/* y is ±NAN */
30: fldl 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. */
@ -189,8 +200,7 @@ ENTRY(__ieee754_pow)
ret
.align ALIGNARG(4)
14: fldl MO(infinity)
fmull MO(zero) // raise invalid exception
14: fldl MO(one)
ret
.align ALIGNARG(4)

View File

@ -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)

View File

@ -1,5 +1,5 @@
/* ix87 specific implementation of pow function.
Copyright (C) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
Copyright (C) 1996, 1997, 1998, 1999, 2001 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
@ -130,7 +130,18 @@ ENTRY(__ieee754_powl)
orl %edx, %ecx
jnz 6b
fstp %st(0) // ST*x
30: ret
ret
/* y is ±NAN */
30: fldt 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. */
@ -189,8 +200,7 @@ ENTRY(__ieee754_powl)
ret
.align ALIGNARG(4)
14: fldl MO(infinity)
fmull MO(zero) // raise invalid exception
14: fldl MO(one)
ret
.align ALIGNARG(4)