From 7cbc6c55cc6649c0347fabce732e2ee6b0f027b9 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Tue, 1 Jul 2025 03:33:27 -0700 Subject: [PATCH] factor: speed up ge2, gt2 * src/factor.c (ge2, gt2): Now branchless static functions. --- src/factor.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/src/factor.c b/src/factor.c index bb33c25ef3..8d1a6fc5e5 100644 --- a/src/factor.c +++ b/src/factor.c @@ -403,12 +403,24 @@ static void factor_up (struct factors *, mp_limb_t, mp_limb_t, } while (0) /* (ah,hl) >= (bh,bl)? */ -#define ge2(ah, al, bh, bl) \ - ((ah) > (bh) || ((ah) == (bh) && (al) >= (bl))) +static bool +ge2 (mp_limb_t ah, mp_limb_t al, mp_limb_t bh, mp_limb_t bl) +{ + mp_limb_t dh, dl; + bool vh = ckd_sub (&dh, ah, bh); + mp_limb_t vl = ckd_sub (&dl, al, bl); + return ! (vh | ckd_sub (&dh, dh, vl)); +} /* (ah,hl) > (bh,bl)? */ -#define gt2(ah, al, bh, bl) \ - ((ah) > (bh) || ((ah) == (bh) && (al) > (bl))) +static bool +gt2 (mp_limb_t ah, mp_limb_t al, mp_limb_t bh, mp_limb_t bl) +{ + mp_limb_t dh, dl; + bool vh = ckd_sub (&dh, bh, ah); + mp_limb_t vl = ckd_sub (&dl, bl, al); + return vh | ckd_sub (&dh, dh, vl); +} /* Set (rh,rl) = (ah,al) - (bh,bl). Overflow wraps around. */ #ifndef sub_ddmmss -- 2.47.3