From: Andreas Schwab Date: Fri, 30 Dec 2011 00:36:37 +0000 (-0500) Subject: Fix PLT uses in libm on powerpc X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bb365f5895571160988214f760734129a7f3bf5d;p=thirdparty%2Fglibc.git Fix PLT uses in libm on powerpc Backport of commit #edc121be8b53da57950daf6f42a619b5826f30b6 --- diff --git a/ChangeLog b/ChangeLog index 5119976d9e5..64557bd99c4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2011-09-15 Andreas Schwab + + * 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 * sysdeps/powerpc/powerpc32/power4/strncmp.S: Don't read past diff --git a/sysdeps/powerpc/fpu/e_hypot.c b/sysdeps/powerpc/fpu/e_hypot.c index f5300ef2260..afbcc18e9eb 100644 --- a/sysdeps/powerpc/fpu/e_hypot.c +++ b/sysdeps/powerpc/fpu/e_hypot.c @@ -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); } diff --git a/sysdeps/powerpc/fpu/e_hypotf.c b/sysdeps/powerpc/fpu/e_hypotf.c index 0476498f8c3..02ad7732b9f 100644 --- a/sysdeps/powerpc/fpu/e_hypotf.c +++ b/sysdeps/powerpc/fpu/e_hypotf.c @@ -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); } diff --git a/sysdeps/powerpc/fpu/e_rem_pio2f.c b/sysdeps/powerpc/fpu/e_rem_pio2f.c index 24ac936a229..e4427e489dd 100644 --- a/sysdeps/powerpc/fpu/e_rem_pio2f.c +++ b/sysdeps/powerpc/fpu/e_rem_pio2f.c @@ -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) diff --git a/sysdeps/powerpc/fpu/k_rem_pio2f.c b/sysdeps/powerpc/fpu/k_rem_pio2f.c index a94ca1380b4..7090605538f 100644 --- a/sysdeps/powerpc/fpu/k_rem_pio2f.c +++ b/sysdeps/powerpc/fpu/k_rem_pio2f.c @@ -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; }