Suggested mpn/generic/gcd.c patch

Niels Möller nisse at
Mon Sep 9 20:07:26 UTC 2019

tg at (Torbjörn Granlund) writes:

> This patch gets rid of the gcd_1 call and instead handles everything
> with gcd_11 and gcd_22.  It also lifts the operands into registers.
> Niels, do you agree with this?  Marco?

Looks right to me.

> We discussed a gcd_21 in the past, and here again is a utility for it.
> It is behind an UNLIKELY just as it is unlikely within gcd_22, so not
> super important.

Not that important. If we implement it, the typical case (when it's
used at all), will have it run for only one or two iterations before
calling gcd_11.

If we add any more functions, I think it's better to do variants of
gcd_11 and gcd_22 that allow one argument even.

> Perhaps gcd_21 is more common as operands directly from user code.

If we get u and v of different size from the user, we do an initial
reduction. So I don't think it will end up here.

> --- 218,261 ----
>     ASSERT(up[n-1] | vp[n-1]);
> !   /* Due to the calling convention for mpn_gcd, at most one can be even. */

This is the statement not quite agreeing with the docs, as discussed a
while ago.


Niels Möller. PGP-encrypted email is preferred. Keyid 368C6677.
Internet email is subject to wholesale government surveillance.

More information about the gmp-devel mailing list