Update.
authorUlrich Drepper <drepper@redhat.com>
Sun, 18 Feb 2001 09:02:38 +0000 (09:02 +0000)
committerUlrich Drepper <drepper@redhat.com>
Sun, 18 Feb 2001 09:02:38 +0000 (09:02 +0000)
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.

ChangeLog
math/libm-test.inc
sysdeps/i386/fpu/bits/mathinline.h
sysdeps/i386/fpu/e_pow.S
sysdeps/i386/fpu/e_powf.S
sysdeps/i386/fpu/e_powl.S

index 4892c83..6947440 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -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>
 
index 867efcd..3928f41 100644 (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);
index e79713d..3539231 100644 (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__ */
 
 
index 75b39e4..842faab 100644 (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)
index c023c11..30f262e 100644 (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)
index 769be4c..c6aa731 100644 (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)