* multiplication (e.g., @mpx_umul@) on large numbers, although
* more expensive on small ones.
*
* multiplication (e.g., @mpx_umul@) on large numbers, although
* more expensive on small ones.
*
- * The destination must be twice as large as the larger
- * argument. The scratch space must be twice as large as the
- * larger argument, plus the magic number @MPK_SLOP@.
+ * The destination must be three times as large as the larger
+ * argument. The scratch space must be five times as large as
+ * the larger argument.
/* --- Sort out the middle term --- */
{
mpw *bsv = sv + m + 1, *ssv = bsv + m + 1;
mpw *rdv = dv + m, *rdvl = rdv + 2 * (m + 2);
/* --- Sort out the middle term --- */
{
mpw *bsv = sv + m + 1, *ssv = bsv + m + 1;
mpw *rdv = dv + m, *rdvl = rdv + 2 * (m + 2);
UADD2(sv, bsv, av, avm, avm, avl);
UADD2(bsv, ssv, bv, bvm, bvm, bvl);
if (m > MPK_THRESH)
UADD2(sv, bsv, av, avm, avm, avl);
UADD2(bsv, ssv, bv, bvm, bvm, bvl);
if (m > MPK_THRESH)
mpx_kmul(d, dl, a, al, b, bl, s, sl);
if (!mpx_ueq(d, dl, c, cl)) {
mpx_kmul(d, dl, a, al, b, bl, s, sl);
if (!mpx_ueq(d, dl, c, cl)) {