diff options
author | Torbjorn Granlund <tg@gmplib.org> | 2021-11-07 22:40:43 +0100 |
---|---|---|
committer | Torbjorn Granlund <tg@gmplib.org> | 2021-11-07 22:40:43 +0100 |
commit | 243d9d2b717294b8be7140c5742c6bef605c90ab (patch) | |
tree | a9754d61c032c72328da7dc8a8499000f86e8942 /mpn | |
parent | 9ee3ae30fa03ec0b5c52b41f3e6935672f964c97 (diff) | |
download | gmp-243d9d2b717294b8be7140c5742c6bef605c90ab.tar.gz |
Make recently added code actually work.
Diffstat (limited to 'mpn')
-rw-r--r-- | mpn/generic/sec_tabselect.c | 34 |
1 files changed, 19 insertions, 15 deletions
diff --git a/mpn/generic/sec_tabselect.c b/mpn/generic/sec_tabselect.c index 8852b096b..f50bdac90 100644 --- a/mpn/generic/sec_tabselect.c +++ b/mpn/generic/sec_tabselect.c @@ -28,6 +28,7 @@ You should have received copies of the GNU General Public License and the GNU Lesser General Public License along with the GNU MP Library. If not, see https://www.gnu.org/licenses/. */ +#include <stdio.h> #include "gmp-impl.h" #ifndef SEC_TABSELECT_METHOD @@ -78,29 +79,24 @@ mpn_sec_tabselect (volatile mp_limb_t * restrict rp, mp_limb_t mask, r0, r1, r2, r3; volatile const mp_limb_t * restrict tp; - for (i = 0; i <= n - 4; i += 4) + if (n & 1) { - tp = tab + i; - r0 = r1 = r2 = r3 = 0; + tp = tab; + r0 = 0; for (k = 0; k < nents; k++) { mask = (mp_limb_t) ((-(unsigned long) (which ^ k)) >> (BITS_PER_ULONG - 1)) - 1; r0 += tp[0] & mask; - r1 += tp[1] & mask; - r2 += tp[2] & mask; - r3 += tp[3] & mask; tp += n; } rp[0] = r0; - rp[1] = r1; - rp[2] = r2; - rp[3] = r3; - rp += 4; + rp += 1; + tab += 1; } - if (n & 2 != 0) + if (n & 2) { - tp = tab + n - 2; + tp = tab; r0 = r1 = 0; for (k = 0; k < nents; k++) { @@ -112,19 +108,27 @@ mpn_sec_tabselect (volatile mp_limb_t * restrict rp, rp[0] = r0; rp[1] = r1; rp += 2; + tab += 2; } - if (n & 1 != 0) + for (i = 0; i <= n - 4; i += 4) { - tp = tab + n - 1; - r0 = r1 = 0; + tp = tab + i; + r0 = r1 = r2 = r3 = 0; for (k = 0; k < nents; k++) { mask = (mp_limb_t) ((-(unsigned long) (which ^ k)) >> (BITS_PER_ULONG - 1)) - 1; r0 += tp[0] & mask; + r1 += tp[1] & mask; + r2 += tp[2] & mask; + r3 += tp[3] & mask; tp += n; } rp[0] = r0; + rp[1] = r1; + rp[2] = r2; + rp[3] = r3; + rp += 4; } } #endif |