summaryrefslogtreecommitdiff
path: root/gmp-glue.c
diff options
context:
space:
mode:
Diffstat (limited to 'gmp-glue.c')
-rw-r--r--gmp-glue.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/gmp-glue.c b/gmp-glue.c
index e75d678b..ffce6c30 100644
--- a/gmp-glue.c
+++ b/gmp-glue.c
@@ -99,6 +99,26 @@ mpn_cnd_swap (mp_limb_t cnd, volatile mp_limb_t *ap, volatile mp_limb_t *bp, mp_
}
}
+/* Copy the k'th element of the table out tn elements, each of size
+ rn. Always read complete table. Similar to gmp's mpn_tabselect. */
+void
+mpn_sec_tabselect (volatile mp_limb_t *rp, volatile const mp_limb_t *table,
+ mp_size_t rn, unsigned tn, unsigned k)
+{
+ volatile const mp_limb_t *end = table + tn * rn;
+ volatile const mp_limb_t *p;
+ mp_size_t i;
+
+ assert (k < tn);
+ for (p = table; p < end; p += rn, k--)
+ {
+ mp_limb_t mask = - (mp_limb_t) (k == 0);
+ for (i = 0; i < rn; i++)
+ rp[i] = (~mask & rp[i]) | (mask & p[i]);
+ }
+}
+
+
#endif /* NETTLE_USE_MINI_GMP */
int