[BACK]Return to N.c CVS log [TXT][DIR] Up to [local] / OpenXM_contrib2 / asir2018 / engine

Diff for /OpenXM_contrib2/asir2018/engine/N.c between version 1.2 and 1.3

version 1.2, 2018/09/21 07:06:51 version 1.3, 2018/10/01 05:49:06
Line 1 
Line 1 
   /* $OpenXM$ */
 #include "gmp.h"  #include "gmp.h"
   
 unsigned long mul64(unsigned long a,unsigned long b,unsigned long *c)  mp_limb_t mul64(mp_limb_t a,mp_limb_t b,mp_limb_t *c)
 {  {
   unsigned long u;    mp_limb_t u;
   u = (unsigned long)mpn_mul_1((mp_limb_t *)c,(mp_limb_t *)&a,1,(mp_limb_t)b);    u = (mp_limb_t)mpn_mul_1((mp_limb_t *)c,(mp_limb_t *)&a,1,(mp_limb_t)b);
   c[1] = u;    c[1] = u;
   return u;    return u;
 }  }
   
 unsigned long mod64(unsigned long u,unsigned long l,unsigned long b)  mp_limb_t mod64(mp_limb_t u,mp_limb_t l,mp_limb_t b)
 {  {
   unsigned long q[2],d[2];    mp_limb_t q[2],d[2];
   unsigned long r;    mp_limb_t r;
   
   d[0] = l; d[1] = u;    d[0] = l; d[1] = u;
   r = (unsigned long)mpn_divmod_1((mp_limb_t *)q,(mp_limb_t *)d,2,(mp_limb_t)b);    r = (mp_limb_t)mpn_divmod_1((mp_limb_t *)q,(mp_limb_t *)d,2,(mp_limb_t)b);
   return r;    return r;
 }  }
   
 unsigned long mulmod64(unsigned long a,unsigned long b,unsigned long m)  mp_limb_t mulmod64(mp_limb_t a,mp_limb_t b,mp_limb_t m)
 {  {
   unsigned long d[2],q[2];    mp_limb_t d[2],q[2];
   unsigned long r;    mp_limb_t r;
   
   d[1] = (unsigned long)mpn_mul_1(d,(mp_limb_t *)&a,1,(mp_limb_t)b);    d[1] = (mp_limb_t)mpn_mul_1(d,(mp_limb_t *)&a,1,(mp_limb_t)b);
   r = (unsigned long)mpn_divmod_1((mp_limb_t *)q,(mp_limb_t *)d,2,(mp_limb_t)m);    r = (mp_limb_t)mpn_divmod_1((mp_limb_t *)q,(mp_limb_t *)d,2,(mp_limb_t)m);
   return r;    return r;
 }  }
   
 unsigned long muladdmod64(unsigned long a,unsigned long b,unsigned long c,unsigned long m)  mp_limb_t muladdmod64(mp_limb_t a,mp_limb_t b,mp_limb_t c,mp_limb_t m)
 {  {
   unsigned long d[2],q[2];    mp_limb_t d[2],q[2];
   unsigned long r;    mp_limb_t r;
   
   d[0] = c;    d[0] = c;
   d[1] = (unsigned long)mpn_addmul_1(d,(mp_limb_t *)&a,1,(mp_limb_t)b);    d[1] = (mp_limb_t)mpn_addmul_1(d,(mp_limb_t *)&a,1,(mp_limb_t)b);
   r = (unsigned long)mpn_divmod_1((mp_limb_t *)q,(mp_limb_t *)d,2,(mp_limb_t)m);    r = (mp_limb_t)mpn_divmod_1((mp_limb_t *)q,(mp_limb_t *)d,2,(mp_limb_t)m);
   return r;    return r;
 }  }
   
 unsigned long invmod64(unsigned long a,unsigned long m)  mp_limb_t invmod64(mp_limb_t a,mp_limb_t m)
 {  {
   mpz_t x,y,z;    mpz_t x,y,z;
   
   mpz_init_set_ui(x,a);    mpz_init_set_ui(x,a);
   mpz_init_set_ui(y,m);    mpz_init_set_ui(y,m);
     mpz_init(z);
   mpz_invert(z,x,y);    mpz_invert(z,x,y);
   return mpz_get_ui(z);    return mpz_get_ui(z);
 }  }

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.3

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>