summaryrefslogtreecommitdiff
path: root/mpn
diff options
context:
space:
mode:
authorTorbjorn Granlund <tg@gmplib.org>2021-11-07 22:40:43 +0100
committerTorbjorn Granlund <tg@gmplib.org>2021-11-07 22:40:43 +0100
commit243d9d2b717294b8be7140c5742c6bef605c90ab (patch)
treea9754d61c032c72328da7dc8a8499000f86e8942 /mpn
parent9ee3ae30fa03ec0b5c52b41f3e6935672f964c97 (diff)
downloadgmp-243d9d2b717294b8be7140c5742c6bef605c90ab.tar.gz
Make recently added code actually work.
Diffstat (limited to 'mpn')
-rw-r--r--mpn/generic/sec_tabselect.c34
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