[PATCH] PPC fixes for long double

classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

[PATCH] PPC fixes for long double

Steven Munroe
This patch resolves the ulps failures in cprojl, ctanhl, ctanl, ceill,
floorl, and the Bessel functions (j0, j1, jn, y0, y1, yn).

The double double runtime does not propigate -0.0 correctly in some
case. So I have to add fixup code to some complex functions. Similarly
ceill, floorl needed explicite handling for the correct sign of 0.0;

Also found that the k_cosl, k_sinl, k_sincosl did not compute the index
into the __sincosl_table correcly for double double. The result is bad
values for larger radian inputs and cause the Bessel function failures.
Hacked around it by converting the high 32-bit (integer form) of the
high double to ieee extended and used the index calc from the ldbl-128
(ieee extended) version.



2006-01-30  Steven Munroe  <[hidden email]>

        * sysdeps/ieee754/ldbl-128ibm/k_cosl.c (__kernel_cosl): Correct index
        for __sincosl_table.
        * sysdeps/ieee754/ldbl-128ibm/k_sincosl.c (__kernel_cosl): Correct
        index for __sincosl_table.
        * sysdeps/ieee754/ldbl-128ibm/k_sinl.c (__kernel_cosl): Correct index
        for __sincosl_table.

        * sysdeps/ieee754/ldbl-128ibm/s_ceill.c: Correct sign of 0.0.
        * sysdeps/ieee754/ldbl-128ibm/s_floorl.c: Correct sign of 0.0.

        * sysdeps/ieee754/ldbl-128ibm/s_cprojl.c: New file.
        * sysdeps/ieee754/ldbl-128ibm/s_ctanhl.c: New file.
        * sysdeps/ieee754/ldbl-128ibm/s_ctanl.c: New file.

        * sysdeps/powerpc/fpu/libm-test-ulps: Update j0, j1, jn, y0, y1, yn
        ulps to match the kcosl/ksinl fix.


diff -urN libc24-cvstip-20060130b/sysdeps/ieee754/ldbl-128ibm/k_cosl.c libc24/sysdeps/ieee754/ldbl-128ibm/k_cosl.c
--- libc24-cvstip-20060130b/sysdeps/ieee754/ldbl-128ibm/k_cosl.c 2006-01-27 18:07:25.000000000 -0600
+++ libc24/sysdeps/ieee754/ldbl-128ibm/k_cosl.c 2006-01-30 14:19:19.000000000 -0600
@@ -104,6 +104,24 @@
  pre-computed tables,  compute cosl(l) and sinl(l) using a
  Chebyshev polynomial of degree 10(11) and compute
  cosl(h+l) = cosl(h)cosl(l) - sinl(h)sinl(l).  */
+      int six = tix;
+      tix = ((six - 0x3ff00000) >> 4) + 0x3fff0000;
+      index = 0x3ffe - (tix >> 16);
+      hix = (tix + (0x200 << index)) & (0xfffffc00 << index);
+      x = fabsl (x);
+      switch (index)
+ {
+ case 0: index = ((45 << 10) + hix - 0x3ffe0000) >> 8; break;
+ case 1: index = ((13 << 11) + hix - 0x3ffd0000) >> 9; break;
+ default:
+ case 2: index = (hix - 0x3ffc3000) >> 10; break;
+ }
+      hix = (hix << 4) & 0x3fffffff;
+/*
+    The following should work for double but generates the wrong index.
+    For now the code above converts double to ieee extended to compute
+    the index back to double for the h value.
+    
       index = 0x3fe - (tix >> 20);
       hix = (tix + (0x200 << index)) & (0xfffffc00 << index);
       x = fabsl (x);
@@ -114,7 +132,7 @@
  default:
  case 2: index = (hix - 0x3fc30000) >> 14; break;
  }
-
+*/
       SET_LDOUBLE_WORDS64(h, ((u_int64_t)hix) << 32, 0);
       l = y - (h - x);
       z = l * l;
diff -urN libc24-cvstip-20060130b/sysdeps/ieee754/ldbl-128ibm/k_sincosl.c libc24/sysdeps/ieee754/ldbl-128ibm/k_sincosl.c
--- libc24-cvstip-20060130b/sysdeps/ieee754/ldbl-128ibm/k_sincosl.c 2006-01-27 18:07:25.000000000 -0600
+++ libc24/sysdeps/ieee754/ldbl-128ibm/k_sincosl.c 2006-01-30 14:19:19.000000000 -0600
@@ -131,6 +131,25 @@
  Chebyshev polynomial of degree 10(11) and compute
  sinl(h+l) = sinl(h)cosl(l) + cosl(h)sinl(l) and
  cosl(h+l) = cosl(h)cosl(l) - sinl(h)sinl(l).  */
+      int six = tix;
+      tix = ((six - 0x3ff00000) >> 4) + 0x3fff0000;
+      index = 0x3ffe - (tix >> 16);
+      hix = (tix + (0x200 << index)) & (0xfffffc00 << index);
+      x = fabsl (x);
+      switch (index)
+ {
+ case 0: index = ((45 << 10) + hix - 0x3ffe0000) >> 8; break;
+ case 1: index = ((13 << 11) + hix - 0x3ffd0000) >> 9; break;
+ default:
+ case 2: index = (hix - 0x3ffc3000) >> 10; break;
+ }
+      hix = (hix << 4) & 0x3fffffff;
+/*
+    The following should work for double but generates the wrong index.
+    For now the code above converts double to ieee extended to compute
+    the index back to double for the h value.
+    
+
       index = 0x3fe - (tix >> 20);
       hix = (tix + (0x2000 << index)) & (0xffffc000 << index);
       x = fabsl (x);
@@ -141,7 +160,7 @@
  default:
  case 2: index = (hix - 0x3fc30000) >> 14; break;
  }
-
+*/
       SET_LDOUBLE_WORDS64(h, ((u_int64_t)hix) << 32, 0);
       if (iy)
  l = y - (h - x);
diff -urN libc24-cvstip-20060130b/sysdeps/ieee754/ldbl-128ibm/k_sinl.c libc24/sysdeps/ieee754/ldbl-128ibm/k_sinl.c
--- libc24-cvstip-20060130b/sysdeps/ieee754/ldbl-128ibm/k_sinl.c 2006-01-27 18:07:25.000000000 -0600
+++ libc24/sysdeps/ieee754/ldbl-128ibm/k_sinl.c 2006-01-30 14:19:19.000000000 -0600
@@ -104,6 +104,24 @@
  pre-computed tables,  compute cosl(l) and sinl(l) using a
  Chebyshev polynomial of degree 10(11) and compute
  sinl(h+l) = sinl(h)cosl(l) + cosl(h)sinl(l).  */
+      int six = tix;
+      tix = ((six - 0x3ff00000) >> 4) + 0x3fff0000;
+      index = 0x3ffe - (tix >> 16);
+      hix = (tix + (0x200 << index)) & (0xfffffc00 << index);
+      x = fabsl (x);
+      switch (index)
+ {
+ case 0: index = ((45 << 10) + hix - 0x3ffe0000) >> 8; break;
+ case 1: index = ((13 << 11) + hix - 0x3ffd0000) >> 9; break;
+ default:
+ case 2: index = (hix - 0x3ffc3000) >> 10; break;
+ }
+      hix = (hix << 4) & 0x3fffffff;
+/*
+    The following should work for double but generates the wrong index.
+    For now the code above converts double to ieee extended to compute
+    the index back to double for the h value.
+    
       index = 0x3fe - (tix >> 20);
       hix = (tix + (0x2000 << index)) & (0xffffc000 << index);
       x = fabsl (x);
@@ -114,7 +132,7 @@
  default:
  case 2: index = (hix - 0x3fc30000) >> 14; break;
  }
-
+*/
       SET_LDOUBLE_WORDS64(h, ((u_int64_t)hix) << 32, 0);
       if (iy)
  l = y - (h - x);
diff -urN libc24-cvstip-20060130b/sysdeps/ieee754/ldbl-128ibm/s_ceill.c libc24/sysdeps/ieee754/ldbl-128ibm/s_ceill.c
--- libc24-cvstip-20060130b/sysdeps/ieee754/ldbl-128ibm/s_ceill.c 2006-01-27 18:07:25.000000000 -0600
+++ libc24/sysdeps/ieee754/ldbl-128ibm/s_ceill.c 2006-01-30 18:01:43.000000000 -0600
@@ -44,19 +44,23 @@
   u.d = x;
 
   if (fabs (u.dd[0]) < TWO52)
-    {      
+    {
+      double high = u.dd[0];
       fesetround(FE_UPWARD);
-      if (u.dd[0] > 0.0)
+      if (high > 0.0)
  {
-  u.dd[0] += TWO52;
-  u.dd[0] -= TWO52;
+  high += TWO52;
+  high -= TWO52;
+          if (high == -0.0) high = 0.0;
  }
-      else if (u.dd[0] < 0.0)
+      else if (high < 0.0)
  {
-  u.dd[0] -= TWO52;
-  u.dd[0] += TWO52;
+  high -= TWO52;
+  high += TWO52;
+          if (high == 0.0) high = -0.0;
  }
-      u.dd[1] = 0.0;      
+      u.dd[0] = high;
+      u.dd[1] = 0.0;
       fesetround(mode);
     }
   else if (fabs (u.dd[1]) < TWO52 && u.dd[1] != 0.0)
diff -urN libc24-cvstip-20060130b/sysdeps/ieee754/ldbl-128ibm/s_cprojl.c libc24/sysdeps/ieee754/ldbl-128ibm/s_cprojl.c
--- libc24-cvstip-20060130b/sysdeps/ieee754/ldbl-128ibm/s_cprojl.c Wed Dec 31 18:00:00 1969
+++ libc24/sysdeps/ieee754/ldbl-128ibm/s_cprojl.c Mon Jan 30 14:19:19 2006
@@ -0,0 +1,54 @@
+/* Compute projection of complex long double value to Riemann sphere.
+   Copyright (C) 1997, 1999, 2006 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <[hidden email]>, 1997.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <complex.h>
+#include <math.h>
+#include <math_ldbl_opt.h>
+
+__complex__ long double
+__cprojl (__complex__ long double x)
+{
+  __complex__ long double res;
+  
+  if (isnan (__real__ x) && isnan (__imag__ x))
+    return x;
+  else if (!isfinite (__real__ x) || !isfinite (__imag__ x))
+    {
+      __real__ res = INFINITY;
+      __imag__ res = __copysignl (0.0, __imag__ x);
+    }
+  else
+    {
+      long double den = (__real__ x * __real__ x + __imag__ x * __imag__ x
+ + 1.0);
+  
+      __real__ res = (2.0 * __real__ x) / den;
+      __imag__ res = (2.0 * __imag__ x) / den;
+      /* __gcc_qmul does not respect -0.0 so we need the following fixup.  */  
+       if (__real__ x == 0.0)
+         __real__ res = __real__ x;
+      
+       if (__imag__ x == 0.0)
+         __imag__ res = __imag__ x;
+    }
+
+  return res;
+}
+long_double_symbol (libm, __cprojl, cprojl);
diff -urN libc24-cvstip-20060130b/sysdeps/ieee754/ldbl-128ibm/s_ctanhl.c libc24/sysdeps/ieee754/ldbl-128ibm/s_ctanhl.c
--- libc24-cvstip-20060130b/sysdeps/ieee754/ldbl-128ibm/s_ctanhl.c Wed Dec 31 18:00:00 1969
+++ libc24/sysdeps/ieee754/ldbl-128ibm/s_ctanhl.c Mon Jan 30 14:19:19 2006
@@ -0,0 +1,87 @@
+/* Complex hyperbole tangent for long double.
+   Copyright (C) 1997, 2005, 2006 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <[hidden email]>, 1997.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <complex.h>
+#include <fenv.h>
+#include <math.h>
+#include <math_ldbl_opt.h>
+
+#include "math_private.h"
+
+
+__complex__ long double
+__ctanhl (__complex__ long double x)
+{
+  __complex__ long double res;
+
+  if (!isfinite (__real__ x) || !isfinite (__imag__ x))
+    {
+      if (__isinfl (__real__ x))
+ {
+  __real__ res = __copysignl (1.0, __real__ x);
+  __imag__ res = __copysignl (0.0, __imag__ x);
+ }
+      else if (__imag__ x == 0.0)
+ {
+  res = x;
+ }
+      else
+ {
+  __real__ res = __nanl ("");
+  __imag__ res = __nanl ("");
+
+#ifdef FE_INVALID
+  if (__isinfl (__imag__ x))
+    feraiseexcept (FE_INVALID);
+#endif
+ }
+    }
+  else
+    {
+      long double sin2ix, cos2ix;
+      long double den;
+
+      __sincosl (2.0 * __imag__ x, &sin2ix, &cos2ix);
+
+      den = (__ieee754_coshl (2.0 * __real__ x) + cos2ix);
+
+      if (den == 0.0L)
+ {
+  __complex__ long double ez = __cexpl (x);
+  __complex__ long double emz = __cexpl (-x);
+
+  res = (ez - emz) / (ez + emz);
+ }
+      else
+ {
+  __real__ res = __ieee754_sinhl (2.0 * __real__ x) / den;
+  __imag__ res = sin2ix / den;
+ }
+      /* __gcc_qmul does not respect -0.0 so we need the following fixup.  */  
+      if ((__real__ res == 0.0) && (__real__ x == 0.0))
+        __real__ res = __real__ x;
+      
+      if ((__real__ res == 0.0) && (__imag__ x == 0.0))
+        __imag__ res = __imag__ x;
+    }
+
+  return res;
+}
+long_double_symbol (libm, __ctanhl, ctanhl);
diff -urN libc24-cvstip-20060130b/sysdeps/ieee754/ldbl-128ibm/s_ctanl.c libc24/sysdeps/ieee754/ldbl-128ibm/s_ctanl.c
--- libc24-cvstip-20060130b/sysdeps/ieee754/ldbl-128ibm/s_ctanl.c Wed Dec 31 18:00:00 1969
+++ libc24/sysdeps/ieee754/ldbl-128ibm/s_ctanl.c Mon Jan 30 14:19:19 2006
@@ -0,0 +1,88 @@
+/* Complex tangent function for long double.
+   Copyright (C) 1997, 2005, 2006 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <[hidden email]>, 1997.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <complex.h>
+#include <fenv.h>
+#include <math.h>
+#include <math_ldbl_opt.h>
+
+#include "math_private.h"
+
+
+__complex__ long double
+__ctanl (__complex__ long double x)
+{
+  __complex__ long double res;
+
+  if (!isfinite (__real__ x) || !isfinite (__imag__ x))
+    {
+      if (__isinfl (__imag__ x))
+ {
+  __real__ res = __copysignl (0.0, __real__ x);
+  __imag__ res = __copysignl (1.0, __imag__ x);
+ }
+      else if (__real__ x == 0.0)
+ {
+  res = x;
+ }
+      else
+ {
+  __real__ res = __nanl ("");
+  __imag__ res = __nanl ("");
+
+#ifdef FE_INVALID
+  if (__isinfl (__real__ x))
+    feraiseexcept (FE_INVALID);
+#endif
+ }
+    }
+  else
+    {
+      long double sin2rx, cos2rx;
+      long double den;
+
+      __sincosl (2.0 * __real__ x, &sin2rx, &cos2rx);
+
+      den = cos2rx + __ieee754_coshl (2.0 * __imag__ x);
+
+
+      if (den == 0.0)
+ {
+  __complex__ long double ez = __cexpl (1.0i * x);
+  __complex__ long double emz = __cexpl (-1.0i * x);
+
+  res = (ez - emz) / (ez + emz) * -1.0i;
+ }
+      else
+ {
+  __real__ res = sin2rx / den;
+  __imag__ res = __ieee754_sinhl (2.0 * __imag__ x) / den;
+ }
+      /* __gcc_qmul does not respect -0.0 so we need the following fixup.  */  
+      if ((__real__ res == 0.0) && (__real__ x == 0.0))
+        __real__ res = __real__ x;
+      
+      if ((__real__ res == 0.0) && (__imag__ x == 0.0))
+        __imag__ res = __imag__ x;
+    }
+
+  return res;
+}
+long_double_symbol (libm, __ctanl, ctanl);
diff -urN libc24-cvstip-20060130b/sysdeps/ieee754/ldbl-128ibm/s_floorl.c libc24/sysdeps/ieee754/ldbl-128ibm/s_floorl.c
--- libc24-cvstip-20060130b/sysdeps/ieee754/ldbl-128ibm/s_floorl.c 2006-01-27 18:07:25.000000000 -0600
+++ libc24/sysdeps/ieee754/ldbl-128ibm/s_floorl.c 2006-01-30 18:03:06.000000000 -0600
@@ -44,18 +44,22 @@
   u.d = x;
 
   if (fabs (u.dd[0]) < TWO52)
-    {    
+    {
+      double high = u.dd[0];
       fesetround(FE_DOWNWARD);
-      if (u.dd[0] > 0.0)
+      if (high > 0.0)
  {
-  u.dd[0] += TWO52;
-  u.dd[0] -= TWO52;
+  high += TWO52;
+  high -= TWO52;
+          if (high == -0.0) high = 0.0;
  }
-      else if (u.dd[0] < 0.0)
+      else if (high < 0.0)
  {
-  u.dd[0] -= TWO52;
-  u.dd[0] += TWO52;
+  high -= TWO52;
+  high += TWO52;
+          if (high == 0.0) high = -0.0;
  }
+      u.dd[0] = high;
       u.dd[1] = 0.0;
       fesetround(mode);
     }
diff -urN libc24-cvstip-20060130b/sysdeps/powerpc/fpu/libm-test-ulps libc24/sysdeps/powerpc/fpu/libm-test-ulps
--- libc24-cvstip-20060130b/sysdeps/powerpc/fpu/libm-test-ulps 2006-01-30 16:29:27.000000000 -0600
+++ libc24/sysdeps/powerpc/fpu/libm-test-ulps 2006-01-30 18:22:09.562194992 -0600
@@ -37,16 +37,9 @@
 ldouble: 1
 
 # cacosh
-Test "Real part of: cacosh (-2 - 3 i) == 1.9833870299165354323470769028940395 - 2.1414491111159960199416055713254211 i":
-double: 1
-float: 7
-idouble: 1
-ifloat: 7
 Test "Imaginary part of: cacosh (-2 - 3 i) == 1.9833870299165354323470769028940395 - 2.1414491111159960199416055713254211 i":
-double: 1
-float: 3
-idouble: 1
-ifloat: 3
+float: 1
+ifloat: 1
 
 # casin
 Test "Real part of: casin (-2 - 3 i) == -0.57065278432109940071028387968566963 - 1.9833870299165354323470769028940395 i":
@@ -84,8 +77,6 @@
 
 # catan
 Test "Real part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - 0.22907268296853876629588180294200276 i":
-float: 3
-ifloat: 3
 ildouble: 1
 ldouble: 1
 Test "Imaginary part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - 0.22907268296853876629588180294200276 i":
@@ -93,23 +84,14 @@
 float: 1
 idouble: 1
 ifloat: 1
-Test "Real part of: catan (0.75 + 1.25 i) == 1.10714871779409050301706546017853704 + 0.549306144334054845697622618461262852 i":
-float: 4
-ifloat: 4
 
 # catanh
 Test "Real part of: catanh (-2 - 3 i) == -0.14694666622552975204743278515471595 - 1.3389725222944935611241935759091443 i":
 double: 4
 idouble: 4
-Test "Imaginary part of: catanh (-2 - 3 i) == -0.14694666622552975204743278515471595 - 1.3389725222944935611241935759091443 i":
-float: 4
-ifloat: 4
 Test "Real part of: catanh (0.75 + 1.25 i) == 0.261492138795671927078652057366532140 + 0.996825126463918666098902241310446708 i":
 double: 1
 idouble: 1
-Test "Imaginary part of: catanh (0.75 + 1.25 i) == 0.261492138795671927078652057366532140 + 0.996825126463918666098902241310446708 i":
-float: 6
-ifloat: 6
 
 # cbrt
 Test "cbrt (-27.0) == -3.0":
@@ -167,8 +149,6 @@
 
 # clog
 Test "Imaginary part of: clog (-2 - 3 i) == 1.2824746787307683680267437207826593 - 2.1587989303424641704769327722648368 i":
-float: 3
-ifloat: 3
 ildouble: 1
 ldouble: 1
 Test "Real part of: clog (0.75 + 1.25 i) == 0.376885901188190075998919126749298416 + 1.03037682652431246378774332703115153 i":
@@ -197,9 +177,7 @@
 ldouble: 1
 Test "Imaginary part of: clog10 (-2 - 3 i) == 0.556971676153418384603252578971164214 - 0.937554462986374708541507952140189646 i":
 double: 1
-float: 5
 idouble: 1
-ifloat: 5
 ildouble: 1
 ldouble: 1
 Test "Imaginary part of: clog10 (-3 + inf i) == inf + pi/2*log10(e) i":
@@ -298,19 +276,15 @@
 # cos
 Test "cos (M_PI_6l * 2.0) == 0.5":
 double: 1
-float: 1
 idouble: 1
-ifloat: 1
 Test "cos (M_PI_6l * 4.0) == -0.5":
 double: 2
 float: 1
 idouble: 2
 ifloat: 1
-Test "cos (pi/2) == 0":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
+Test "cos (16.0) == -0.9576594803233846418996372326511034717803"
+ildouble: 2
+ldouble: 2
 
 # cpow
 Test "Real part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i) == 0.331825439177608832276067945276730566 + 0.131338600281188544930936345230903032 i":
@@ -381,9 +355,6 @@
 ifloat: 1
 
 # ctan
-Test "Real part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i":
-double: 1
-idouble: 1
 Test "Imaginary part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i":
 ildouble: 1
 ldouble: 1
@@ -446,10 +417,10 @@
 ildouble: 1
 ldouble: 1
 Test "exp10 (3) == 1000":
-double: 6
 float: 2
-idouble: 6
 ifloat: 2
+double: 6
+idouble: 6
 ildouble: 8
 ldouble: 8
 
@@ -500,68 +471,92 @@
 # j0
 Test "j0 (-4.0) == -3.9714980986384737228659076845169804197562E-1":
 double: 1
-float: 2
+float: 1
 idouble: 1
-ifloat: 2
+ifloat: 1
+ildouble: 1
+ldouble: 1
 Test "j0 (10.0) == -0.245935764451348335197760862485328754":
-double: 3
+double: 2
 float: 1
-idouble: 3
+idouble: 2
 ifloat: 1
+ildouble: 1
+ldouble: 1
 Test "j0 (2.0) == 0.223890779141235668051827454649948626":
 float: 2
 ifloat: 2
 Test "j0 (4.0) == -3.9714980986384737228659076845169804197562E-1":
 double: 1
-float: 2
+float: 1
 idouble: 1
-ifloat: 2
+ifloat: 1
+ildouble: 1
+ldouble: 1
 Test "j0 (8.0) == 0.171650807137553906090869407851972001":
 float: 1
 ifloat: 1
+ildouble: 1
+ldouble: 1
 
 # j1
 Test "j1 (10.0) == 0.0434727461688614366697487680258592883":
 float: 2
 ifloat: 2
+ildouble: 1
+ldouble: 1
 Test "j1 (2.0) == 0.576724807756873387202448242269137087":
 double: 1
 idouble: 1
 Test "j1 (8.0) == 0.234636346853914624381276651590454612":
 double: 1
 idouble: 1
+ildouble: 1
+ldouble: 1
 
 # jn
 Test "jn (0, -4.0) == -3.9714980986384737228659076845169804197562E-1":
 double: 1
-float: 2
+float: 1
 idouble: 1
-ifloat: 2
+ifloat: 1
+ildouble: 1
+ldouble: 1
 Test "jn (0, 10.0) == -0.245935764451348335197760862485328754":
-double: 3
+double: 2
 float: 1
-idouble: 3
+idouble: 2
 ifloat: 1
+ildouble: 1
+ldouble: 1
 Test "jn (0, 2.0) == 0.223890779141235668051827454649948626":
 float: 2
 ifloat: 2
 Test "jn (0, 4.0) == -3.9714980986384737228659076845169804197562E-1":
 double: 1
-float: 2
+float: 1
 idouble: 1
-ifloat: 2
+ifloat: 1
+ildouble: 1
+ldouble: 1
 Test "jn (0, 8.0) == 0.171650807137553906090869407851972001":
 float: 1
 ifloat: 1
+ildouble: 1
+ldouble: 1
 Test "jn (1, 10.0) == 0.0434727461688614366697487680258592883":
 float: 2
 ifloat: 2
+ildouble: 1
+ldouble: 1
 Test "jn (1, 2.0) == 0.576724807756873387202448242269137087":
 double: 1
 idouble: 1
 Test "jn (1, 8.0) == 0.234636346853914624381276651590454612":
 double: 1
 idouble: 1
+ildouble: 1
+ldouble: 1
 Test "jn (10, -1.0) == 0.263061512368745320699785368779050294e-9":
 ildouble: 1
 ldouble: 1
@@ -583,6 +578,8 @@
 Test "jn (10, 10.0) == 0.207486106633358857697278723518753428":
 float: 1
 ifloat: 1
+ildouble: 4
+ldouble: 4
 Test "jn (10, 2.0) == 0.251538628271673670963516093751820639e-6":
 float: 4
 ifloat: 4
@@ -602,9 +599,11 @@
 ldouble: 1
 Test "jn (3, 10.0) == 0.0583793793051868123429354784103409563":
 double: 3
-float: 2
+float: 1
 idouble: 3
-ifloat: 2
+ifloat: 1
+ildouble: 2
+ldouble: 2
 Test "jn (3, 2.0) == 0.128943249474402051098793332969239835":
 double: 1
 float: 2
@@ -647,22 +646,20 @@
 ildouble: 1
 ldouble: 1
 
+# sin
+Test "sin (16.0) == -0.2879033166650652947844562482186175296207"
+ildouble: 2
+ldouble: 2
+
 # sincos
 Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.5 in cos_res":
 double: 1
-float: 1
 idouble: 1
-ifloat: 1
 Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in sin_res":
 double: 1
 float: 1
 idouble: 1
 ifloat: 1
-Test "sincos (pi/2, &sin_res, &cos_res) puts 0 in cos_res":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
 Test "sincos (pi/6, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in cos_res":
 float: 1
 ifloat: 1
@@ -674,8 +671,6 @@
 
 # tan
 Test "tan (pi/4) == 1":
-double: 1
-idouble: 1
 ildouble: 1
 ldouble: 1
 
@@ -718,19 +713,23 @@
 float: 1
 idouble: 2
 ifloat: 1
-Test "y0 (10.0) == 0.0556711672835993914244598774101900481":
+Test "y0 (2.0) == 0.510375672649745119596606592727157873":
 double: 1
-float: 1
 idouble: 1
+Test "y0 (10.0) == 0.0556711672835993914244598774101900481":
+float: 1
 ifloat: 1
-Test "y0 (2.0) == 0.510375672649745119596606592727157873":
-double: 1
 idouble: 1
+double: 1
+ildouble: 1
+ldouble: 1
 Test "y0 (8.0) == 0.223521489387566220527323400498620359":
 double: 1
 float: 1
 idouble: 1
 ifloat: 1
+ildouble: 1
+ldouble: 1
 
 # y1
 Test "y1 (0.125) == -5.19993611253477499595928744876579921":
@@ -744,16 +743,20 @@
 float: 1
 idouble: 3
 ifloat: 1
+ildouble: 2
+ldouble: 2
 Test "y1 (2.0) == -0.107032431540937546888370772277476637":
 double: 1
 float: 1
-idouble: 1
-ifloat: 1
+idouble: 2
+ifloat: 2
 Test "y1 (8.0) == -0.158060461731247494255555266187483550":
 double: 1
 float: 2
 idouble: 1
 ifloat: 2
+ildouble: 2
+ldouble: 2
 
 # yn
 Test "yn (0, 0.75) == -0.137172769385772397522814379396581855":
@@ -764,37 +767,43 @@
 float: 1
 idouble: 2
 ifloat: 1
-ildouble: 1
-ldouble: 1
+ildouble: 2
+ldouble: 2
 Test "yn (0, 1.5) == 0.382448923797758843955068554978089862":
 double: 2
 float: 1
 idouble: 2
 ifloat: 1
-Test "yn (0, 10.0) == 0.0556711672835993914244598774101900481":
+Test "yn (0, 2.0) == 0.510375672649745119596606592727157873":
 double: 1
-float: 1
 idouble: 1
+Test "yn (0, 10.0) == 0.0556711672835993914244598774101900481":
+float: 1
 ifloat: 1
-Test "yn (0, 2.0) == 0.510375672649745119596606592727157873":
-double: 1
 idouble: 1
+double: 1
+ildouble: 2
+ldouble: 2
 Test "yn (0, 8.0) == 0.223521489387566220527323400498620359":
 double: 1
 float: 1
 idouble: 1
 ifloat: 1
+ildouble: 2
+ldouble: 2
 Test "yn (1, 0.125) == -5.19993611253477499595928744876579921":
 double: 1
 idouble: 1
 Test "yn (1, 1.5) == -0.412308626973911295952829820633445323":
-float: 2
-ifloat: 2
+float: 1
+ifloat: 1
 Test "yn (1, 10.0) == 0.249015424206953883923283474663222803":
 double: 3
 float: 1
 idouble: 3
 ifloat: 1
+ildouble: 2
+ldouble: 2
 Test "yn (1, 2.0) == -0.107032431540937546888370772277476637":
 double: 1
 float: 1
@@ -805,9 +814,8 @@
 float: 2
 idouble: 1
 ifloat: 2
-Test "yn (3, 0.125) == -2612.69757350066712600220955744091741":
-double: 1
-idouble: 1
+ildouble: 2
+ldouble: 2
 Test "yn (10, 0.125) == -127057845771019398.252538486899753195":
 double: 1
 idouble: 1
@@ -821,16 +829,16 @@
 ifloat: 2
 Test "yn (10, 10.0) == -0.359814152183402722051986577343560609":
 double: 2
-float: 2
 idouble: 2
-ifloat: 2
+ildouble: 2
+ldouble: 2
 Test "yn (10, 2.0) == -129184.542208039282635913145923304214":
-double: 3
 float: 1
-idouble: 3
 ifloat: 1
-ildouble: 1
-ldouble: 1
+double: 3
+idouble: 3
+ldouble: 2
+ildouble: 2
 Test "yn (3, 0.125) == -2612.69757350066712600220955744091741":
 double: 1
 idouble: 1
@@ -842,6 +850,8 @@
 float: 1
 idouble: 1
 ifloat: 1
+ildouble: 2
+ldouble: 2
 Test "yn (3, 2.0) == -1.12778377684042778608158395773179238":
 double: 1
 idouble: 1
@@ -886,18 +896,12 @@
 ldouble: 1
 
 Function: Real part of "cacosh":
-double: 1
-float: 7
-idouble: 1
-ifloat: 7
 ildouble: 1
 ldouble: 1
 
 Function: Imaginary part of "cacosh":
-double: 1
-float: 3
-idouble: 1
-ifloat: 3
+float: 1
+ifloat: 1
 
 Function: Real part of "casin":
 double: 1
@@ -928,8 +932,6 @@
 ldouble: 1
 
 Function: Real part of "catan":
-float: 4
-ifloat: 4
 ildouble: 1
 ldouble: 1
 
@@ -945,10 +947,6 @@
 double: 4
 idouble: 4
 
-Function: Imaginary part of "catanh":
-float: 6
-ifloat: 6
-
 Function: "cbrt":
 double: 1
 idouble: 1
@@ -1002,8 +1000,6 @@
 ldouble: 2
 
 Function: Imaginary part of "clog":
-float: 3
-ifloat: 3
 ildouble: 1
 ldouble: 1
 
@@ -1015,9 +1011,9 @@
 
 Function: Imaginary part of "clog10":
 double: 1
-float: 5
+float: 1
 idouble: 1
-ifloat: 5
+ifloat: 1
 ildouble: 1
 ldouble: 1
 
@@ -1082,8 +1078,6 @@
 ldouble: 1
 
 Function: Real part of "ctan":
-double: 1
-idouble: 1
 ildouble: 1
 ldouble: 1
 
@@ -1130,8 +1124,8 @@
 float: 2
 idouble: 6
 ifloat: 2
-ildouble: 8
-ldouble: 8
+ildouble: 1
+ldouble: 1
 
 Function: "exp2":
 ildouble: 2
@@ -1154,22 +1148,28 @@
 ldouble: 1
 
 Function: "j0":
-double: 3
+double: 2
 float: 2
-idouble: 3
+idouble: 2
 ifloat: 2
+ildouble: 1
+ldouble: 1
 
 Function: "j1":
 double: 1
 float: 2
 idouble: 1
 ifloat: 2
+ildouble: 1
+ldouble: 1
 
 Function: "jn":
 double: 3
 float: 4
 idouble: 3
 ifloat: 4
+ildouble: 4
+ldouble: 4
 
 Function: "lgamma":
 double: 1
@@ -1244,17 +1244,23 @@
 float: 1
 idouble: 2
 ifloat: 1
+ildouble: 1
+ldouble: 1
 
 Function: "y1":
 double: 3
 float: 2
 idouble: 3
 ifloat: 2
+ildouble: 2
+ldouble: 2
 
 Function: "yn":
 double: 3
 float: 2
 idouble: 3
 ifloat: 2
+ildouble: 2
+ldouble: 2
 
 # end of automatic generation
Reply | Threaded
Open this post in threaded view
|

Re: [PATCH] PPC fixes for long double

Jakub Jelinek
On Tue, Jan 31, 2006 at 10:12:35AM -0600, Steven Munroe wrote:

> This patch resolves the ulps failures in cprojl, ctanhl, ctanl, ceill,
> floorl, and the Bessel functions (j0, j1, jn, y0, y1, yn).
>
> The double double runtime does not propigate -0.0 correctly in some
> case. So I have to add fixup code to some complex functions. Similarly
> ceill, floorl needed explicite handling for the correct sign of 0.0;
>
> Also found that the k_cosl, k_sinl, k_sincosl did not compute the index
> into the __sincosl_table correcly for double double. The result is bad
> values for larger radian inputs and cause the Bessel function failures.
> Hacked around it by converting the high 32-bit (integer form) of the
> high double to ieee extended and used the index calc from the ldbl-128
> (ieee extended) version.

Great to see Bessel fns resolved.  But could you avoid decreasing ulps
in the ulps file?  While on ppc32 we require GCC 4.1+ (if Mark accepts
the changes) now, on ppc64 we do not and some older GCCs might result
in bigger ulps.  So *double/*float numbers really shouldn't change
when touching only long double routines.

Any perl hackers around?  Maybe math/gen-libm-test.pl could have a new
option, where it would be additionally given filename of the old
ulps file and would compute maximum between the old ulps file and
the newly generated ulps.

> --- libc24-cvstip-20060130b/sysdeps/powerpc/fpu/libm-test-ulps 2006-01-30 16:29:27.000000000 -0600
> +++ libc24/sysdeps/powerpc/fpu/libm-test-ulps 2006-01-30 18:22:09.562194992 -0600
> @@ -37,16 +37,9 @@
>  ldouble: 1
>  
>  # cacosh
> -Test "Real part of: cacosh (-2 - 3 i) == 1.9833870299165354323470769028940395 - 2.1414491111159960199416055713254211 i":
> -double: 1
> -float: 7
> -idouble: 1
> -ifloat: 7
>  Test "Imaginary part of: cacosh (-2 - 3 i) == 1.9833870299165354323470769028940395 - 2.1414491111159960199416055713254211 i":
> -double: 1
> -float: 3
> -idouble: 1
> -ifloat: 3
> +float: 1
> +ifloat: 1

        Jakub
Reply | Threaded
Open this post in threaded view
|

Re: [PATCH] PPC fixes for long double

Steve Munroe
Steven J. Munroe
Linux on Power Toolchain Architect
IBM Corporation, Linux Technology Center


Jakub Jelinek <[hidden email]> wrote on 01/31/2006 10:23:10 AM:

> On Tue, Jan 31, 2006 at 10:12:35AM -0600, Steven Munroe wrote:
> > This patch resolves the ulps failures in cprojl, ctanhl, ctanl, ceill,
> > floorl, and the Bessel functions (j0, j1, jn, y0, y1, yn).
> >
> > The double double runtime does not propigate -0.0 correctly in some
> > case. So I have to add fixup code to some complex functions. Similarly
> > ceill, floorl needed explicite handling for the correct sign of 0.0;
> >
> > Also found that the k_cosl, k_sinl, k_sincosl did not compute the
index
> > into the __sincosl_table correcly for double double. The result is bad
> > values for larger radian inputs and cause the Bessel function
failures.

> > Hacked around it by converting the high 32-bit (integer form) of the
> > high double to ieee extended and used the index calc from the ldbl-128
> > (ieee extended) version.
>
> Great to see Bessel fns resolved.  But could you avoid decreasing ulps
> in the ulps file?  While on ppc32 we require GCC 4.1+ (if Mark accepts
> the changes) now, on ppc64 we do not and some older GCCs might result
> in bigger ulps.  So *double/*float numbers really shouldn't change
> when touching only long double routines.
>
I did not intend to change the *double/*float values just reorder them for
legibility. I was trying to eliminate the high ulps you had put in for
broken the bessel functions.

I am trying to verify ppc64 -mlong-double-128 with gcc-3.4, but we are
currently seeing a ICE in while compiling vfprintf.
Reply | Threaded
Open this post in threaded view
|

Re: [PATCH] PPC fixes for long double

Jakub Jelinek
In reply to this post by Steven Munroe
On Tue, Jan 31, 2006 at 10:12:35AM -0600, Steven Munroe wrote:
> * sysdeps/powerpc/fpu/libm-test-ulps: Update j0, j1, jn, y0, y1, yn
> ulps to match the kcosl/ksinl fix.

Here is a patch intended to be used instead of
sysdeps/powerpc/fpu/libm-test-ulps in your patch that only increases ULPs
and keeps it sorted as well.

--- libc/sysdeps/powerpc/fpu/libm-test-ulps.jj 2006-01-31 16:02:12.000000000 +0100
+++ libc/sysdeps/powerpc/fpu/libm-test-ulps 2006-01-31 21:43:07.000000000 +0100
@@ -311,6 +311,9 @@ double: 1
 float: 1
 idouble: 1
 ifloat: 1
+Test "cos (16.0) == -0.9576594803233846418996372326511034717803"
+ildouble: 2
+ldouble: 2
 
 # cpow
 Test "Real part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i) == 0.331825439177608832276067945276730566 + 0.131338600281188544930936345230903032 i":
@@ -503,11 +506,15 @@ double: 1
 float: 2
 idouble: 1
 ifloat: 2
+ildouble: 1
+ldouble: 1
 Test "j0 (10.0) == -0.245935764451348335197760862485328754":
 double: 3
 float: 1
 idouble: 3
 ifloat: 1
+ildouble: 1
+ldouble: 1
 Test "j0 (2.0) == 0.223890779141235668051827454649948626":
 float: 2
 ifloat: 2
@@ -516,20 +523,28 @@ double: 1
 float: 2
 idouble: 1
 ifloat: 2
+ildouble: 1
+ldouble: 1
 Test "j0 (8.0) == 0.171650807137553906090869407851972001":
 float: 1
 ifloat: 1
+ildouble: 1
+ldouble: 1
 
 # j1
 Test "j1 (10.0) == 0.0434727461688614366697487680258592883":
 float: 2
 ifloat: 2
+ildouble: 1
+ldouble: 1
 Test "j1 (2.0) == 0.576724807756873387202448242269137087":
 double: 1
 idouble: 1
 Test "j1 (8.0) == 0.234636346853914624381276651590454612":
 double: 1
 idouble: 1
+ildouble: 1
+ldouble: 1
 
 # jn
 Test "jn (0, -4.0) == -3.9714980986384737228659076845169804197562E-1":
@@ -537,11 +552,15 @@ double: 1
 float: 2
 idouble: 1
 ifloat: 2
+ildouble: 1
+ldouble: 1
 Test "jn (0, 10.0) == -0.245935764451348335197760862485328754":
 double: 3
 float: 1
 idouble: 3
 ifloat: 1
+ildouble: 1
+ldouble: 1
 Test "jn (0, 2.0) == 0.223890779141235668051827454649948626":
 float: 2
 ifloat: 2
@@ -550,18 +569,26 @@ double: 1
 float: 2
 idouble: 1
 ifloat: 2
+ildouble: 1
+ldouble: 1
 Test "jn (0, 8.0) == 0.171650807137553906090869407851972001":
 float: 1
 ifloat: 1
+ildouble: 1
+ldouble: 1
 Test "jn (1, 10.0) == 0.0434727461688614366697487680258592883":
 float: 2
 ifloat: 2
+ildouble: 1
+ldouble: 1
 Test "jn (1, 2.0) == 0.576724807756873387202448242269137087":
 double: 1
 idouble: 1
 Test "jn (1, 8.0) == 0.234636346853914624381276651590454612":
 double: 1
 idouble: 1
+ildouble: 1
+ldouble: 1
 Test "jn (10, -1.0) == 0.263061512368745320699785368779050294e-9":
 ildouble: 1
 ldouble: 1
@@ -583,6 +610,8 @@ ldouble: 1
 Test "jn (10, 10.0) == 0.207486106633358857697278723518753428":
 float: 1
 ifloat: 1
+ildouble: 4
+ldouble: 4
 Test "jn (10, 2.0) == 0.251538628271673670963516093751820639e-6":
 float: 4
 ifloat: 4
@@ -605,6 +634,8 @@ double: 3
 float: 2
 idouble: 3
 ifloat: 2
+ildouble: 2
+ldouble: 2
 Test "jn (3, 2.0) == 0.128943249474402051098793332969239835":
 double: 1
 float: 2
@@ -647,6 +678,11 @@ Test "log2 (e) == M_LOG2El":
 ildouble: 1
 ldouble: 1
 
+# sin
+Test "sin (16.0) == -0.2879033166650652947844562482186175296207"
+ildouble: 2
+ldouble: 2
+
 # sincos
 Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.5 in cos_res":
 double: 1
@@ -723,6 +759,8 @@ double: 1
 float: 1
 idouble: 1
 ifloat: 1
+ildouble: 1
+ldouble: 1
 Test "y0 (2.0) == 0.510375672649745119596606592727157873":
 double: 1
 idouble: 1
@@ -731,6 +769,8 @@ double: 1
 float: 1
 idouble: 1
 ifloat: 1
+ildouble: 1
+ldouble: 1
 
 # y1
 Test "y1 (0.125) == -5.19993611253477499595928744876579921":
@@ -744,16 +784,20 @@ double: 3
 float: 1
 idouble: 3
 ifloat: 1
+ildouble: 2
+ldouble: 2
 Test "y1 (2.0) == -0.107032431540937546888370772277476637":
 double: 1
 float: 1
-idouble: 1
-ifloat: 1
+idouble: 2
+ifloat: 2
 Test "y1 (8.0) == -0.158060461731247494255555266187483550":
 double: 1
 float: 2
 idouble: 1
 ifloat: 2
+ildouble: 2
+ldouble: 2
 
 # yn
 Test "yn (0, 0.75) == -0.137172769385772397522814379396581855":
@@ -764,8 +808,8 @@ double: 2
 float: 1
 idouble: 2
 ifloat: 1
-ildouble: 1
-ldouble: 1
+ildouble: 2
+ldouble: 2
 Test "yn (0, 1.5) == 0.382448923797758843955068554978089862":
 double: 2
 float: 1
@@ -776,6 +820,8 @@ double: 1
 float: 1
 idouble: 1
 ifloat: 1
+ildouble: 2
+ldouble: 2
 Test "yn (0, 2.0) == 0.510375672649745119596606592727157873":
 double: 1
 idouble: 1
@@ -784,6 +830,8 @@ double: 1
 float: 1
 idouble: 1
 ifloat: 1
+ildouble: 2
+ldouble: 2
 Test "yn (1, 0.125) == -5.19993611253477499595928744876579921":
 double: 1
 idouble: 1
@@ -795,6 +843,8 @@ double: 3
 float: 1
 idouble: 3
 ifloat: 1
+ildouble: 2
+ldouble: 2
 Test "yn (1, 2.0) == -0.107032431540937546888370772277476637":
 double: 1
 float: 1
@@ -805,6 +855,8 @@ double: 1
 float: 2
 idouble: 1
 ifloat: 2
+ildouble: 2
+ldouble: 2
 Test "yn (3, 0.125) == -2612.69757350066712600220955744091741":
 double: 1
 idouble: 1
@@ -824,13 +876,15 @@ double: 2
 float: 2
 idouble: 2
 ifloat: 2
+ildouble: 2
+ldouble: 2
 Test "yn (10, 2.0) == -129184.542208039282635913145923304214":
 double: 3
 float: 1
 idouble: 3
 ifloat: 1
-ildouble: 1
-ldouble: 1
+ildouble: 2
+ldouble: 2
 Test "yn (3, 0.125) == -2612.69757350066712600220955744091741":
 double: 1
 idouble: 1
@@ -842,6 +896,8 @@ double: 1
 float: 1
 idouble: 1
 ifloat: 1
+ildouble: 2
+ldouble: 2
 Test "yn (3, 2.0) == -1.12778377684042778608158395773179238":
 double: 1
 idouble: 1
@@ -1158,18 +1214,24 @@ double: 3
 float: 2
 idouble: 3
 ifloat: 2
+ildouble: 1
+ldouble: 1
 
 Function: "j1":
 double: 1
 float: 2
 idouble: 1
 ifloat: 2
+ildouble: 1
+ldouble: 1
 
 Function: "jn":
 double: 3
 float: 4
 idouble: 3
 ifloat: 4
+ildouble: 4
+ldouble: 4
 
 Function: "lgamma":
 double: 1
@@ -1244,17 +1306,23 @@ double: 2
 float: 1
 idouble: 2
 ifloat: 1
+ildouble: 1
+ldouble: 1
 
 Function: "y1":
 double: 3
 float: 2
 idouble: 3
 ifloat: 2
+ildouble: 2
+ldouble: 2
 
 Function: "yn":
 double: 3
 float: 2
 idouble: 3
 ifloat: 2
+ildouble: 2
+ldouble: 2
 
 # end of automatic generation


        Jakub
Reply | Threaded
Open this post in threaded view
|

Re: [PATCH] PPC fixes for long double

Steve Munroe
Jakub Jelinek <[hidden email]> wrote on 01/31/2006 02:45:45 PM:

> On Tue, Jan 31, 2006 at 10:12:35AM -0600, Steven Munroe wrote:
> >    * sysdeps/powerpc/fpu/libm-test-ulps: Update j0, j1, jn, y0, y1, yn
> >    ulps to match the kcosl/ksinl fix.
>
> Here is a patch intended to be used instead of
> sysdeps/powerpc/fpu/libm-test-ulps in your patch that only increases
ULPs
> and keeps it sorted as well.
>
I now see I diffed against the wrong source for the ulps file. Sorry for
the confusion.

I see Roland has committed the changes including libm-test-ulps.

Thanks

Steven J. Munroe
Linux on Power Toolchain Architect
IBM Corporation, Linux Technology Center