/* -*-c-*-
*
- * $Id: mpx-ksqr.c,v 1.5 2000/10/08 12:11:01 mdw Exp $
+ * $Id: mpx-ksqr.c,v 1.6 2000/10/08 15:48:35 mdw Exp $
*
* Karatsuba-based squaring algorithm
*
/*----- Revision history --------------------------------------------------*
*
* $Log: mpx-ksqr.c,v $
+ * Revision 1.6 2000/10/08 15:48:35 mdw
+ * Rename Karatsuba constants now that we have @gfx_kmul@ too.
+ *
* Revision 1.5 2000/10/08 12:11:01 mdw
* Use @mpx_ueq@ instead of @MPX_UCMP@.
*
#include <stdio.h>
#include "mpx.h"
-#include "mpx-kmac.h"
+#include "karatsuba.h"
/*----- Tweakables --------------------------------------------------------*/
#ifdef TEST_RIG
-# undef KARATSUBA_CUTOFF
-# define KARATSUBA_CUTOFF 2
+# undef MPK_THRESH
+# define MPK_THRESH 2
#endif
/*----- Main code ---------------------------------------------------------*/
*
* The destination must be twice as large as the argument. The
* scratch space must be twice as large as the argument, plus
- * the magic number @KARATSUBA_SLOP@.
+ * the magic number @MPK_SLOP@.
*/
void mpx_ksqr(mpw *dv, mpw *dvl,
MPX_SHRINK(av, avl);
- if (avl - av <= KARATSUBA_CUTOFF) {
+ if (avl - av <= MPK_THRESH) {
mpx_usqr(dv, dvl, av, avl);
return;
}
mpw *rdv = tdv + m;
UADD2(sv, svm, av, avm, avm, avl);
- if (m > KARATSUBA_CUTOFF)
+ if (m > MPK_THRESH)
mpx_ksqr(tdv, rdv + m + 4, sv, svm + 1, ssv, svl);
else
mpx_usqr(tdv, rdv + m + 4, sv, svm + 1);
- if (m > KARATSUBA_CUTOFF)
+ if (m > MPK_THRESH)
mpx_ksqr(sv, ssv, avm, avl, ssv, svl);
else
mpx_usqr(sv, ssv, avm, avl);
UADD(rdv, sv, svm + 1);
USUB(tdv, sv, svn);
- if (m > KARATSUBA_CUTOFF)
+ if (m > MPK_THRESH)
mpx_ksqr(sv, ssv, av, avm, ssv, svl);
else
mpx_usqr(sv, ssv, av, avm);