From 52e4b04109f18a91e8c3e50255d198c240884e31 Mon Sep 17 00:00:00 2001 From: mdw Date: Mon, 22 Nov 1999 13:58:40 +0000 Subject: [PATCH] Add an option to disable Montgomery reduction, so that performance comparisons can be done. --- mpmont.c | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 54 insertions(+), 1 deletion(-) diff --git a/mpmont.c b/mpmont.c index 35bffc2..7522dba 100644 --- a/mpmont.c +++ b/mpmont.c @@ -1,6 +1,6 @@ /* -*-c-*- * - * $Id: mpmont.c,v 1.4 1999/11/21 12:27:06 mdw Exp $ + * $Id: mpmont.c,v 1.5 1999/11/22 13:58:40 mdw Exp $ * * Montgomery reduction * @@ -30,6 +30,10 @@ /*----- Revision history --------------------------------------------------* * * $Log: mpmont.c,v $ + * Revision 1.5 1999/11/22 13:58:40 mdw + * Add an option to disable Montgomery reduction, so that performance + * comparisons can be done. + * * Revision 1.4 1999/11/21 12:27:06 mdw * Remove a division from the Montgomery setup by calculating * %$R^2 \bmod m$% first and then %$R \bmod m$% by Montgomery reduction of @@ -53,6 +57,16 @@ #include "mp.h" #include "mpmont.h" +/*----- Tweakables --------------------------------------------------------*/ + +/* --- @MPMONT_DISABLE@ --- * + * + * Replace all the clever Montgomery reduction with good old-fashioned long + * division. + */ + +/* #define MPMONT_DISABLE */ + /*----- Main code ---------------------------------------------------------*/ /* --- @mpmont_create@ --- * @@ -65,6 +79,18 @@ * Use: Initializes a Montgomery reduction context ready for use. */ +#ifdef MPMONT_DISABLE + +void mpmont_create(mpmont *mm, mp *m) +{ + mp_shrink(m); + mm->m = MP_COPY(m); + mm->r = MP_ONE; + mm->r2 = MP_ONE; +} + +#else + void mpmont_create(mpmont *mm, mp *m) { /* --- Take a copy of the modulus --- */ @@ -109,6 +135,8 @@ void mpmont_create(mpmont *mm, mp *m) } } +#endif + /* --- @mpmont_destroy@ --- * * * Arguments: @mpmont *mm@ = pointer to a Montgomery reduction context @@ -135,6 +163,16 @@ void mpmont_destroy(mpmont *mm) * Returns: Result, %$a R^{-1} \bmod m$%. */ +#ifdef MPMONT_DISABLE + +mp *mpmont_reduce(mpmont *mm, mp *d, const mp *a) +{ + mp_div(0, &d, a, mm->m); + return (d); +} + +#else + mp *mpmont_reduce(mpmont *mm, mp *d, const mp *a) { mpw *dv, *dvl; @@ -175,6 +213,8 @@ mp *mpmont_reduce(mpmont *mm, mp *d, const mp *a) return (d); } +#endif + /* --- @mpmont_mul@ --- * * * Arguments: @mpmont *mm@ = pointer to Montgomery reduction context @@ -184,6 +224,17 @@ mp *mpmont_reduce(mpmont *mm, mp *d, const mp *a) * Returns: Result, %$a b R^{-1} \bmod m$%. */ +#ifdef MPMONT_DISABLE + +mp *mpmont_mul(mpmont *mm, mp *d, const mp *a, const mp *b) +{ + d = mp_mul(d, a, b); + mp_div(0, &d, d, mm->m); + return (d); +} + +#else + mp *mpmont_mul(mpmont *mm, mp *d, const mp *a, const mp *b) { mpw *dv, *dvl; @@ -240,6 +291,8 @@ mp *mpmont_mul(mpmont *mm, mp *d, const mp *a, const mp *b) return (d); } +#endif + /* --- @mpmont_expr@ --- * * * Arguments: @mpmont *mm@ = pointer to Montgomery reduction context -- 2.11.0