From e6ebd4a7d5de4c5afcede367483051e55363b18f Mon Sep 17 00:00:00 2001 From: Siddhesh Poyarekar Date: Thu, 7 Mar 2013 13:18:56 +0530 Subject: [PATCH] Use an intermediate variable to sum exponents in powerpc __mul and __sqr --- ChangeLog | 7 +++++++ sysdeps/powerpc/powerpc32/power4/fpu/mpa.c | 11 ++++++----- sysdeps/powerpc/powerpc64/power4/fpu/mpa.c | 11 ++++++----- 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/ChangeLog b/ChangeLog index f10a14684b..75841387ff 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,12 @@ 2013-03-07 Siddhesh Poyarekar + * 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. [!NO__SQR]: Define __sqr. * sysdeps/powerpc/powerpc32/power4/fpu/mpa.c: define NO__MUL diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/mpa.c b/sysdeps/powerpc/powerpc32/power4/fpu/mpa.c index ef7ada749a..1858c97407 100644 --- a/sysdeps/powerpc/powerpc32/power4/fpu/mpa.c +++ b/sysdeps/powerpc/powerpc32/power4/fpu/mpa.c @@ -99,16 +99,16 @@ __mul (const mp_no *x, const mp_no *y, mp_no *z, int p) } Z[k] = zk; + int e = EX + EY; /* Is there a carry beyond the most significant digit? */ if (Z[1] == ZERO) { for (i = 1; i <= p2; i++) Z[i] = Z[i + 1]; - EZ = EX + EY - 1; + e--; } - else - EZ = EX + EY; + EZ = e; Z[0] = X[0] * Y[0]; } @@ -202,12 +202,13 @@ __sqr (const mp_no *x, mp_no *y, int p) /* Squares are always positive. */ Y[0] = 1.0; - EY = 2 * EX; + int e = EX * 2; /* Is there a carry beyond the most significant digit? */ if (__glibc_unlikely (Y[1] == ZERO)) { for (i = 1; i <= p; i++) Y[i] = Y[i + 1]; - EY--; + e--; } + EY = e; } diff --git a/sysdeps/powerpc/powerpc64/power4/fpu/mpa.c b/sysdeps/powerpc/powerpc64/power4/fpu/mpa.c index ef7ada749a..1858c97407 100644 --- a/sysdeps/powerpc/powerpc64/power4/fpu/mpa.c +++ b/sysdeps/powerpc/powerpc64/power4/fpu/mpa.c @@ -99,16 +99,16 @@ __mul (const mp_no *x, const mp_no *y, mp_no *z, int p) } Z[k] = zk; + int e = EX + EY; /* Is there a carry beyond the most significant digit? */ if (Z[1] == ZERO) { for (i = 1; i <= p2; i++) Z[i] = Z[i + 1]; - EZ = EX + EY - 1; + e--; } - else - EZ = EX + EY; + EZ = e; Z[0] = X[0] * Y[0]; } @@ -202,12 +202,13 @@ __sqr (const mp_no *x, mp_no *y, int p) /* Squares are always positive. */ Y[0] = 1.0; - EY = 2 * EX; + int e = EX * 2; /* Is there a carry beyond the most significant digit? */ if (__glibc_unlikely (Y[1] == ZERO)) { for (i = 1; i <= p; i++) Y[i] = Y[i + 1]; - EY--; + e--; } + EY = e; }