30 #include <linux/string.h>
34 #define MPN_MUL_N_RECURSE(prodp, up, vp, size, tspace) \
36 if ((size) < KARATSUBA_THRESHOLD) \
37 mul_n_basecase(prodp, up, vp, size); \
39 mul_n(prodp, up, vp, size, tspace); \
42 #define MPN_SQR_N_RECURSE(prodp, up, size, tspace) \
44 if ((size) < KARATSUBA_THRESHOLD) \
45 mpih_sqr_n_basecase(prodp, up, size); \
47 mpih_sqr_n(prodp, up, size, tspace); \
91 for (i = 1; i <
size; i++) {
127 prodp[esize + esize] = cy_limb;
129 prodp[esize +
size] = cy_limb;
183 MPN_COPY(prodp + hsize, prodp + size, hsize);
185 prodp + size + hsize, hsize);
207 cy +=
mpihelp_add_n(prodp + hsize, prodp + hsize, tspace, size);
210 prodp + hsize + size, hsize, cy);
213 cy =
mpihelp_add_n(prodp + hsize, prodp + hsize, tspace + hsize,
238 prodp[
size] = cy_limb;
243 for (i = 1; i <
size; i++) {
252 prodp[
size] = cy_limb;
276 prodp[esize + esize] = cy_limb;
279 prodp[esize +
size] = cy_limb;
305 MPN_COPY(prodp + hsize, prodp + size, hsize);
307 prodp + size + hsize, hsize);
310 cy -=
mpihelp_sub_n(prodp + hsize, prodp + hsize, tspace, size);
320 cy +=
mpihelp_add_n(prodp + hsize, prodp + hsize, tspace, size);
323 prodp + hsize + size, hsize, cy);
326 cy =
mpihelp_add_n(prodp + hsize, prodp + hsize, tspace + hsize,
355 if (usize >= vsize) {
377 }
while (usize >= vsize);
414 for (ctx = ctx->
next; ctx; ctx = ctx2) {
443 mpi_ptr_t prod_endp = prodp + usize + vsize - 1;
473 for (i = 1; i < vsize; i++) {
491 memset(&ctx, 0,
sizeof ctx);
495 *_result = *prod_endp;