From 20cd7fb3ae63795ae7c9a464abf5ed19b364ade0 Mon Sep 17 00:00:00 2001 From: Siddhesh Poyarekar Date: Wed, 20 Feb 2013 18:56:20 +0530 Subject: Copy comment about inner loop from powerpc mpa.c to the default one --- sysdeps/ieee754/dbl-64/mpa.c | 10 ++++++++++ sysdeps/powerpc/powerpc32/power4/fpu/mpa.c | 2 +- sysdeps/powerpc/powerpc64/power4/fpu/mpa.c | 2 +- 3 files changed, 12 insertions(+), 2 deletions(-) (limited to 'sysdeps') diff --git a/sysdeps/ieee754/dbl-64/mpa.c b/sysdeps/ieee754/dbl-64/mpa.c index 1f60fa5a6d..845a42c5ca 100644 --- a/sysdeps/ieee754/dbl-64/mpa.c +++ b/sysdeps/ieee754/dbl-64/mpa.c @@ -749,6 +749,15 @@ __sqr (const mp_no *x, mp_no *y, int p) if (k % 2 == 0) yk += X[lim] * X[lim]; + /* In __mul, this loop (and the one within the next while loop) run + between a range to calculate the mantissa as follows: + + Z[k] = X[k] * Y[n] + X[k+1] * Y[n-1] ... + X[n-1] * Y[k+1] + + X[n] * Y[k] + + For X == Y, we can get away with summing halfway and doubling the + result. For cases where the range size is even, the mid-point needs + to be added separately (above). */ for (i = k - p, j = p; i < j; i++, j--) yk2 += X[i] * X[j]; @@ -769,6 +778,7 @@ __sqr (const mp_no *x, mp_no *y, int p) if (k % 2 == 0) yk += X[lim] * X[lim]; + /* Likewise for this loop. */ for (i = 1, j = k - 1; i < j; i++, j--) yk2 += X[i] * X[j]; diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/mpa.c b/sysdeps/powerpc/powerpc32/power4/fpu/mpa.c index c00342cb6c..be357a63af 100644 --- a/sysdeps/powerpc/powerpc32/power4/fpu/mpa.c +++ b/sysdeps/powerpc/powerpc32/power4/fpu/mpa.c @@ -598,7 +598,7 @@ __mul (const mp_no *x, const mp_no *y, mp_no *z, int p) long p2 = p; double u, zk, zk2; - /* Is z=0? */ + /* Is z=0? */ if (X[0] * Y[0] == ZERO) { Z[0] = ZERO; diff --git a/sysdeps/powerpc/powerpc64/power4/fpu/mpa.c b/sysdeps/powerpc/powerpc64/power4/fpu/mpa.c index c00342cb6c..be357a63af 100644 --- a/sysdeps/powerpc/powerpc64/power4/fpu/mpa.c +++ b/sysdeps/powerpc/powerpc64/power4/fpu/mpa.c @@ -598,7 +598,7 @@ __mul (const mp_no *x, const mp_no *y, mp_no *z, int p) long p2 = p; double u, zk, zk2; - /* Is z=0? */ + /* Is z=0? */ if (X[0] * Y[0] == ZERO) { Z[0] = ZERO; -- cgit 1.4.1