mpn_perfpow: do we need a special GCD for mp_bitcnt_t?
    bodrato at mail.dm.unipi.it 
    bodrato at mail.dm.unipi.it
       
    Mon Sep  1 20:00:11 UTC 2014
    
    
  
Ciao,
Il Lun, 1 Settembre 2014 2:40 pm, Torbjörn Granlund ha scritto:
> nisse at lysator.liu.se (Niels Möller) writes:
>   > examined number, the exponent is returned as mp_bitcnt_t, the returned
>   > value is then casted to mp_limb_t, because we need the GCD of the
>   > exponents and mpn_gcd_1 wants limbs.
>
>   And when can there be a problem? If the mp_limb_t type is smaller than
>   mp_bitcnt_t?
> I am not aware of any configurations where mp_limb_t is the smaller of
> the two.  But I feel bothered by type mixing such as this.
Mixing types is not good for abstraction, i.e. portability and
maintainability.
>   Vaguely related: We could have an mpn_gcd_11 function, accepting two
>   limb-size arguments.
>
> Which would then be in assembly.  This would obsolete the many mpn_gcd_1
> implementations, I think.
Agreed.
There are at least two functions where mpn_gcd_11 is needed and currently
mpn_gcd_1 (&x, 1, y) is used:
$ grep -rl "mpn_gcd_1 (&" mp?
mpn/generic/perfpow.c
mpz/mfac_uiui.c
... in both cases, to be honest, the GCD is needed on arguments that are
not limbs...
Regards,
m
-- 
http://bodrato.it/
    
    
More information about the gmp-devel
mailing list