]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Fix PLT uses in libm on powerpc
authorAndreas Schwab <schwab@redhat.com>
Fri, 30 Dec 2011 00:36:37 +0000 (19:36 -0500)
committerAdhemerval Zanella <azanella@linux.vnet.ibm.com>
Fri, 30 Dec 2011 00:36:37 +0000 (19:36 -0500)
Backport of commit #edc121be8b53da57950daf6f42a619b5826f30b6

ChangeLog
sysdeps/powerpc/fpu/e_hypot.c
sysdeps/powerpc/fpu/e_hypotf.c
sysdeps/powerpc/fpu/e_rem_pio2f.c
sysdeps/powerpc/fpu/k_rem_pio2f.c

index 5119976d9e55be3fc6e8b76084f42d001a7d12da..64557bd99c4fa3aaf166324a1fde2ccf9fe4de1a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2011-09-15  Andreas Schwab  <schwab@redhat.com>
+
+       * sysdeps/powerpc/fpu/e_hypot.c (__ieee754_hypot): Use
+       __ieee754_sqrt instead of sqrt.
+       * sysdeps/powerpc/fpu/e_hypotf.c (__ieee754_hypotf): Use
+       __ieee754_sqrtf instead of sqrtf.
+       * sysdeps/powerpc/fpu/e_rem_pio2f.c (__ieee754_rem_pio2f): Use
+       __floorf instead of floorf.
+       * sysdeps/powerpc/fpu/k_rem_pio2f.c (__fp_kernel_rem_pio2f): Use
+       __floorf, __truncf instead of floorf, truncf.
+
 2011-03-28  Andreas Schwab  <schwab@linux-m68k.org>
 
        * sysdeps/powerpc/powerpc32/power4/strncmp.S: Don't read past
index f5300ef226089dce8c20ed4dfa3c2f9f71c60319..afbcc18e9eb1dbb78f0725cf9c3292ee6bfae02c 100644 (file)
@@ -96,22 +96,22 @@ __ieee754_hypot (double x, double y)
     {
       x *= twoM600;
       y *= twoM600;
-      return sqrt (x * x + y * y) / twoM600;
+      return __ieee754_sqrt (x * x + y * y) / twoM600;
     }
   if (y < twoM500)
     {
       if (y <= pdnum)
-       {
-         x *= two1022;
-         y *= two1022;
-         return sqrt (x * x + y * y) / two1022;
-       }
+       {
+         x *= two1022;
+         y *= two1022;
+         return __ieee754_sqrt (x * x + y * y) / two1022;
+       }
       else
-       {
-         x *= two600;
-         y *= two600;
-         return sqrt (x * x + y * y) / two600;
-       }
+       {
+         x *= two600;
+         y *= two600;
+         return __ieee754_sqrt (x * x + y * y) / two600;
+       }
     }
-  return sqrt (x * x + y * y);
+  return __ieee754_sqrt (x * x + y * y);
 }
index 0476498f8c319b949c488739061c7f50df282a24..02ad7732b9f4f71667763e38e88a8c6f61849fbb 100644 (file)
@@ -97,22 +97,22 @@ __ieee754_hypotf (float x, float y)
     {
       x *= twoM60;
       y *= twoM60;
-      return sqrtf (x * x + y * y) / twoM60;
+      return __ieee754_sqrtf (x * x + y * y) / twoM60;
     }
   if (y < twoM50)
     {
       if (y <= pdnum)
-       {
-         x *= two126;
-         y *= two126;
-         return sqrtf (x * x + y * y) / two126;
-       }
+       {
+         x *= two126;
+         y *= two126;
+         return __ieee754_sqrtf (x * x + y * y) / two126;
+       }
       else
-       {
-         x *= two60;
-         y *= two60;
-         return sqrtf (x * x + y * y) / two60;
-       }
+       {
+         x *= two60;
+         y *= two60;
+         return __ieee754_sqrtf (x * x + y * y) / two60;
+       }
     }
-  return sqrtf (x * x + y * y);
+  return __ieee754_sqrtf (x * x + y * y);
 }
index 24ac936a229406449a6be172167cae82f43dae0d..e4427e489dd2abc09f582c47bca2b1bc7d1cefc1 100644 (file)
@@ -78,83 +78,83 @@ __ieee754_rem_pio2f (float x, float *y)
   if (ax < pio3_4)
     {
       if (x > 0)
-       {
-         z = x - pio2_1;
-         if (!__float_and_test28 (ax, pio2_24b))
-           {
-             y[0] = z - pio2_1t;
-             y[1] = (z - y[0]) - pio2_1t;
-           }
-         else
-           {
-             z -= pio2_2;
-             y[0] = z - pio2_2t;
-             y[1] = (z - y[0]) - pio2_2t;
-           }
-         return 1;
-       }
+       {
+         z = x - pio2_1;
+         if (!__float_and_test28 (ax, pio2_24b))
+           {
+             y[0] = z - pio2_1t;
+             y[1] = (z - y[0]) - pio2_1t;
+           }
+         else
+           {
+             z -= pio2_2;
+             y[0] = z - pio2_2t;
+             y[1] = (z - y[0]) - pio2_2t;
+           }
+         return 1;
+       }
       else
-       {
-         z = x + pio2_1;
-         if (!__float_and_test28 (ax, pio2_24b))
-           {
-             y[0] = z + pio2_1t;
-             y[1] = (z - y[0]) + pio2_1t;
-           }
-         else
-           {
-             z += pio2_2;
-             y[0] = z + pio2_2t;
-             y[1] = (z - y[0]) + pio2_2t;
-           }
-         return -1;
-       }
+       {
+         z = x + pio2_1;
+         if (!__float_and_test28 (ax, pio2_24b))
+           {
+             y[0] = z + pio2_1t;
+             y[1] = (z - y[0]) + pio2_1t;
+           }
+         else
+           {
+             z += pio2_2;
+             y[0] = z + pio2_2t;
+             y[1] = (z - y[0]) + pio2_2t;
+           }
+         return -1;
+       }
     }
   if (ax <= pio2_2e7)
     {
-      n = floorf (ax * invpio2 + half);
+      n = __floorf (ax * invpio2 + half);
       i = (int32_t) n;
       r = ax - n * pio2_1;
-      w = n * pio2_1t;         /* 1st round good to 40 bit */
+      w = n * pio2_1t;         /* 1st round good to 40 bit */
       if (i < 32 && !__float_and_test24 (ax, npio2_hw[i - 1]))
-       {
-         y[0] = r - w;
-       }
+       {
+         y[0] = r - w;
+       }
       else
-       {
-         float i, j;
-         j = __float_and8 (ax);
-         y[0] = r - w;
-         i = __float_and8 (y[0]);
-         if (j / i > 256.0 || j / i < 3.9062500e-3)
-           {                   /* 2nd iterations needed, good to 57 */
-             t = r;
-             w = n * pio2_2;
-             r = t - w;
-             w = n * pio2_2t - ((t - r) - w);
-             y[0] = r - w;
-             i = __float_and8 (y[0]);
-             if (j / i > 33554432 || j / i < 2.9802322e-8)
-               {               /* 3rd iteration needed, 74 bits acc */
-                 t = r;
-                 w = n * pio2_3;
-                 r = t - w;
-                 w = n * pio2_3t - ((t - r) - w);
-                 y[0] = r - w;
-               }
-           }
-       }
+       {
+         float i, j;
+         j = __float_and8 (ax);
+         y[0] = r - w;
+         i = __float_and8 (y[0]);
+         if (j / i > 256.0 || j / i < 3.9062500e-3)
+           {                   /* 2nd iterations needed, good to 57 */
+             t = r;
+             w = n * pio2_2;
+             r = t - w;
+             w = n * pio2_2t - ((t - r) - w);
+             y[0] = r - w;
+             i = __float_and8 (y[0]);
+             if (j / i > 33554432 || j / i < 2.9802322e-8)
+               {               /* 3rd iteration needed, 74 bits acc */
+                 t = r;
+                 w = n * pio2_3;
+                 r = t - w;
+                 w = n * pio2_3t - ((t - r) - w);
+                 y[0] = r - w;
+               }
+           }
+       }
       y[1] = (r - y[0]) - w;
       if (x < 0)
-       {
-         y[0] = -y[0];
-         y[1] = -y[1];
-         return -i;
-       }
+       {
+         y[0] = -y[0];
+         y[1] = -y[1];
+         return -i;
+       }
       else
-       {
-         return i;
-       }
+       {
+         return i;
+       }
     }
 
   /* all other (large) arguments */
@@ -168,11 +168,11 @@ __ieee754_rem_pio2f (float x, float *y)
   e0 = __float_and8 (ax / 128.0);
   z = ax / e0;
 
-  tx[0] = floorf (z);
+  tx[0] = __floorf (z);
   z = (z - tx[0]) * two8;
-  tx[1] = floorf (z);
+  tx[1] = __floorf (z);
   z = (z - tx[1]) * two8;
-  tx[2] = floorf (z);
+  tx[2] = __floorf (z);
 
   nx = 3;
   while (tx[nx - 1] == zero)
index a94ca1380b4b4a1b213001aba658488d2b4cfbbc..7090605538f9037892227172e0c1c212d5581296 100644 (file)
@@ -79,17 +79,17 @@ static const float two_over_pi[] = {
 
 
 static const float PIo2[] = {
-  1.5703125000e+00,            /* 0x3fc90000 */
-  4.5776367188e-04,            /* 0x39f00000 */
-  2.5987625122e-05,            /* 0x37da0000 */
-  7.5437128544e-08,            /* 0x33a20000 */
-  6.0026650317e-11,            /* 0x2e840000 */
-  7.3896444519e-13,            /* 0x2b500000 */
-  5.3845816694e-15,            /* 0x27c20000 */
-  5.6378512969e-18,            /* 0x22d00000 */
-  8.3009228831e-20,            /* 0x1fc40000 */
-  3.2756352257e-22,            /* 0x1bc60000 */
-  6.3331015649e-25,            /* 0x17440000 */
+  1.5703125000e+00,            /* 0x3fc90000 */
+  4.5776367188e-04,            /* 0x39f00000 */
+  2.5987625122e-05,            /* 0x37da0000 */
+  7.5437128544e-08,            /* 0x33a20000 */
+  6.0026650317e-11,            /* 0x2e840000 */
+  7.3896444519e-13,            /* 0x2b500000 */
+  5.3845816694e-15,            /* 0x27c20000 */
+  5.6378512969e-18,            /* 0x22d00000 */
+  8.3009228831e-20,            /* 0x1fc40000 */
+  3.2756352257e-22,            /* 0x1bc60000 */
+  6.3331015649e-25,            /* 0x17440000 */
 };
 
 
@@ -126,7 +126,7 @@ __fp_kernel_rem_pio2f (float *x, float *y, float e0, int32_t nx)
   for (i = 0; i <= jk; i++)
     {
       for (j = 0, fw = 0.0; j <= jx; j++)
-       fw += x[j] * f[jx + i - j];
+       fw += x[j] * f[jx + i - j];
       q[i] = fw;
     }
 
@@ -135,19 +135,19 @@ recompute:
   /* distill q[] into iq[] reversingly */
   for (i = 0, j = jz, z = q[jz]; j > 0; i++, j--)
     {
-      fw = truncf (twon8 * z);
+      fw = __truncf (twon8 * z);
       iq[i] = (int32_t) (z - two8 * fw);
       z = q[j - 1] + fw;
     }
 
   /* compute n */
-  z = __scalbnf (z, q0);       /* actual value of z */
-  z -= 8.0 * floorf (z * 0.125);       /* trim off integer >= 8 */
+  z = __scalbnf (z, q0);       /* actual value of z */
+  z -= 8.0 * __floorf (z * 0.125);     /* trim off integer >= 8 */
   n = (int32_t) z;
-  z -= truncf (z);
+  z -= __truncf (z);
   ih = 0;
   if (q0 > 0)
-    {                          /* need iq[jz-1] to determine n */
+    {                          /* need iq[jz-1] to determine n */
       i = (iq[jz - 1] >> (8 - q0));
       n += i;
       iq[jz - 1] -= i << (8 - q0);
@@ -159,41 +159,41 @@ recompute:
     ih = 2;
 
   if (ih > 0)
-    {                          /* q > 0.5 */
+    {                          /* q > 0.5 */
       n += 1;
       carry = 0;
       for (i = 0; i < jz; i++)
-       {                       /* compute 1-q */
-         j = iq[i];
-         if (carry == 0)
-           {
-             if (j != 0)
-               {
-                 carry = 1;
-                 iq[i] = 0x100 - j;
-               }
-           }
-         else
-           iq[i] = 0xff - j;
-       }
+       {                       /* compute 1-q */
+         j = iq[i];
+         if (carry == 0)
+           {
+             if (j != 0)
+               {
+                 carry = 1;
+                 iq[i] = 0x100 - j;
+               }
+           }
+         else
+           iq[i] = 0xff - j;
+       }
       if (q0 > 0)
-       {                       /* rare case: chance is 1 in 12 */
-         switch (q0)
-           {
-           case 1:
-             iq[jz - 1] &= 0x7f;
-             break;
-           case 2:
-             iq[jz - 1] &= 0x3f;
-             break;
-           }
-       }
+       {                       /* rare case: chance is 1 in 12 */
+         switch (q0)
+           {
+           case 1:
+             iq[jz - 1] &= 0x7f;
+             break;
+           case 2:
+             iq[jz - 1] &= 0x3f;
+             break;
+           }
+       }
       if (ih == 2)
-       {
-         z = one - z;
-         if (carry != 0)
-           z -= __scalbnf (one, q0);
-       }
+       {
+         z = one - z;
+         if (carry != 0)
+           z -= __scalbnf (one, q0);
+       }
     }
 
   /* check if recomputation is needed */
@@ -201,21 +201,21 @@ recompute:
     {
       j = 0;
       for (i = jz - 1; i >= jk; i--)
-       j |= iq[i];
+       j |= iq[i];
       if (j == 0)
-       {                       /* need recomputation */
-         for (k = 1; iq[jk - k] == 0; k++);    /* k = no. of terms needed */
+       {                       /* need recomputation */
+         for (k = 1; iq[jk - k] == 0; k++);    /* k = no. of terms needed */
 
-         for (i = jz + 1; i <= jz + k; i++)
-           {                   /* add q[jz+1] to q[jz+k] */
-             f[jx + i] = two_over_pi[jv + i];
-             for (j = 0, fw = 0.0; j <= jx; j++)
-               fw += x[j] * f[jx + i - j];
-             q[i] = fw;
-           }
-         jz += k;
-         goto recompute;
-       }
+         for (i = jz + 1; i <= jz + k; i++)
+           {                   /* add q[jz+1] to q[jz+k] */
+             f[jx + i] = two_over_pi[jv + i];
+             for (j = 0, fw = 0.0; j <= jx; j++)
+               fw += x[j] * f[jx + i - j];
+             q[i] = fw;
+           }
+         jz += k;
+         goto recompute;
+       }
     }
 
   /* chop off zero terms */
@@ -224,24 +224,24 @@ recompute:
       jz -= 1;
       q0 -= 8;
       while (iq[jz] == 0)
-       {
-         jz--;
-         q0 -= 8;
-       }
+       {
+         jz--;
+         q0 -= 8;
+       }
     }
   else
-    {                          /* break z into 8-bit if necessary */
+    {                          /* break z into 8-bit if necessary */
       z = __scalbnf (z, -q0);
       if (z >= two8)
-       {
-         fw = truncf (twon8 * z);
-         iq[jz] = (int32_t) (z - two8 * fw);
-         jz += 1;
-         q0 += 8;
-         iq[jz] = (int32_t) fw;
-       }
+       {
+         fw = __truncf (twon8 * z);
+         iq[jz] = (int32_t) (z - two8 * fw);
+         jz += 1;
+         q0 += 8;
+         iq[jz] = (int32_t) fw;
+       }
       else
-       iq[jz] = (int32_t) z;
+       iq[jz] = (int32_t) z;
     }
 
   /* convert integer "bit" chunk to floating-point value */
@@ -256,7 +256,7 @@ recompute:
   for (i = jz; i >= 0; i--)
     {
       for (fw = 0.0, k = 0; k <= jp && k <= jz - i; k++)
-       fw += PIo2[k] * q[i + k];
+       fw += PIo2[k] * q[i + k];
       fq[jz - i] = fw;
     }