mirror of git://sourceware.org/git/glibc.git
Use an intermediate variable to sum exponents in powerpc __mul and __sqr
This commit is contained in:
parent
82a9811d29
commit
e6ebd4a7d5
|
@ -1,5 +1,12 @@
|
||||||
2013-03-07 Siddhesh Poyarekar <siddhesh@redhat.com>
|
2013-03-07 Siddhesh Poyarekar <siddhesh@redhat.com>
|
||||||
|
|
||||||
|
* sysdeps/powerpc/powerpc32/power4/fpu/mpa.c (__mul): Use
|
||||||
|
intermediate variable to calculate exponent.
|
||||||
|
(__sqr): Likewise.
|
||||||
|
* sysdeps/powerpc/powerpc64/power4/fpu/mpa.c (__mul):
|
||||||
|
Likewise.
|
||||||
|
(__sqr): Likewise.
|
||||||
|
|
||||||
* sysdeps/ieee754/dbl-64/mpa.c [!NO__MUL]: Define __mul.
|
* sysdeps/ieee754/dbl-64/mpa.c [!NO__MUL]: Define __mul.
|
||||||
[!NO__SQR]: Define __sqr.
|
[!NO__SQR]: Define __sqr.
|
||||||
* sysdeps/powerpc/powerpc32/power4/fpu/mpa.c: define NO__MUL
|
* sysdeps/powerpc/powerpc32/power4/fpu/mpa.c: define NO__MUL
|
||||||
|
|
|
@ -99,16 +99,16 @@ __mul (const mp_no *x, const mp_no *y, mp_no *z, int p)
|
||||||
}
|
}
|
||||||
Z[k] = zk;
|
Z[k] = zk;
|
||||||
|
|
||||||
|
int e = EX + EY;
|
||||||
/* Is there a carry beyond the most significant digit? */
|
/* Is there a carry beyond the most significant digit? */
|
||||||
if (Z[1] == ZERO)
|
if (Z[1] == ZERO)
|
||||||
{
|
{
|
||||||
for (i = 1; i <= p2; i++)
|
for (i = 1; i <= p2; i++)
|
||||||
Z[i] = Z[i + 1];
|
Z[i] = Z[i + 1];
|
||||||
EZ = EX + EY - 1;
|
e--;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
EZ = EX + EY;
|
|
||||||
|
|
||||||
|
EZ = e;
|
||||||
Z[0] = X[0] * Y[0];
|
Z[0] = X[0] * Y[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -202,12 +202,13 @@ __sqr (const mp_no *x, mp_no *y, int p)
|
||||||
/* Squares are always positive. */
|
/* Squares are always positive. */
|
||||||
Y[0] = 1.0;
|
Y[0] = 1.0;
|
||||||
|
|
||||||
EY = 2 * EX;
|
int e = EX * 2;
|
||||||
/* Is there a carry beyond the most significant digit? */
|
/* Is there a carry beyond the most significant digit? */
|
||||||
if (__glibc_unlikely (Y[1] == ZERO))
|
if (__glibc_unlikely (Y[1] == ZERO))
|
||||||
{
|
{
|
||||||
for (i = 1; i <= p; i++)
|
for (i = 1; i <= p; i++)
|
||||||
Y[i] = Y[i + 1];
|
Y[i] = Y[i + 1];
|
||||||
EY--;
|
e--;
|
||||||
}
|
}
|
||||||
|
EY = e;
|
||||||
}
|
}
|
||||||
|
|
|
@ -99,16 +99,16 @@ __mul (const mp_no *x, const mp_no *y, mp_no *z, int p)
|
||||||
}
|
}
|
||||||
Z[k] = zk;
|
Z[k] = zk;
|
||||||
|
|
||||||
|
int e = EX + EY;
|
||||||
/* Is there a carry beyond the most significant digit? */
|
/* Is there a carry beyond the most significant digit? */
|
||||||
if (Z[1] == ZERO)
|
if (Z[1] == ZERO)
|
||||||
{
|
{
|
||||||
for (i = 1; i <= p2; i++)
|
for (i = 1; i <= p2; i++)
|
||||||
Z[i] = Z[i + 1];
|
Z[i] = Z[i + 1];
|
||||||
EZ = EX + EY - 1;
|
e--;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
EZ = EX + EY;
|
|
||||||
|
|
||||||
|
EZ = e;
|
||||||
Z[0] = X[0] * Y[0];
|
Z[0] = X[0] * Y[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -202,12 +202,13 @@ __sqr (const mp_no *x, mp_no *y, int p)
|
||||||
/* Squares are always positive. */
|
/* Squares are always positive. */
|
||||||
Y[0] = 1.0;
|
Y[0] = 1.0;
|
||||||
|
|
||||||
EY = 2 * EX;
|
int e = EX * 2;
|
||||||
/* Is there a carry beyond the most significant digit? */
|
/* Is there a carry beyond the most significant digit? */
|
||||||
if (__glibc_unlikely (Y[1] == ZERO))
|
if (__glibc_unlikely (Y[1] == ZERO))
|
||||||
{
|
{
|
||||||
for (i = 1; i <= p; i++)
|
for (i = 1; i <= p; i++)
|
||||||
Y[i] = Y[i + 1];
|
Y[i] = Y[i + 1];
|
||||||
EY--;
|
e--;
|
||||||
}
|
}
|
||||||
|
EY = e;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue