=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2018/builtin/int.c,v retrieving revision 1.4 retrieving revision 1.6 diff -u -p -r1.4 -r1.6 --- OpenXM_contrib2/asir2018/builtin/int.c 2018/09/28 08:20:27 1.4 +++ OpenXM_contrib2/asir2018/builtin/int.c 2018/11/12 07:59:33 1.6 @@ -45,7 +45,7 @@ * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. * - * $OpenXM: OpenXM_contrib2/asir2018/builtin/int.c,v 1.3 2018/09/25 07:36:01 noro Exp $ + * $OpenXM: OpenXM_contrib2/asir2018/builtin/int.c,v 1.5 2018/10/01 05:49:06 noro Exp $ */ #include "ca.h" #include "parse.h" @@ -63,12 +63,14 @@ void Pmt_save(), Pmt_load(); void Psmall_jacobi(); void Pdp_set_mpi(); void Pntoint32(),Pint32ton(); +void Pibin(); void Pigcdbin(), Pigcdbmod(), PigcdEuc(), Pigcdacc(), Pigcdcntl(); void Pihex(); void Pimaxrsh(), Pilen(); void Ptype_t_NB(); +void Plprime64(); struct ftab int_tab[] = { {"dp_set_mpi",Pdp_set_mpi,-1}, @@ -78,6 +80,7 @@ struct ftab int_tab[] = { {"iqr",Piqr,2}, {"igcd",Pigcd,-2}, {"ilcm",Pilcm,2}, + {"ibin",Pibin,2}, {"up2_inv",Pup2_inv,2}, {"up2_init_eg",Pup2_init_eg,0}, {"up2_show_eg",Pup2_show_eg,0}, @@ -93,6 +96,9 @@ struct ftab int_tab[] = { {"fac",Pfac,1}, {"prime",Pprime,1}, {"lprime",Plprime,1}, +#if SIZEOF_LONG==8 + {"lprime64",Plprime64,1}, +#endif {"random",Prandom,-1}, {"lrandom",Plrandom,1}, {"iand",Piand,2}, @@ -119,6 +125,26 @@ static unsigned int gcd_small(unsigned int,unsigned in int TypeT_NB_check(unsigned int, unsigned int); int mpi_mag; +void ibin(unsigned long int n,unsigned long int k,Z *r) +{ + mpz_t t; + + mpz_init(t); + mpz_bin_uiui(t,n,k); + MPZTOZ(t,*r); +} + +void Pibin(NODE arg,Z *rp) +{ + unsigned long int n,k; + + asir_assert(ARG0(arg),O_N,"ibin"); + asir_assert(ARG1(arg),O_N,"ibin"); + n = ZTOS((Z)ARG0(arg)); + k = ZTOS((Z)ARG1(arg)); + ibin(n,k,rp); +} + void Pntoint32(NODE arg,USINT *rp) { Z q,z; @@ -685,6 +711,22 @@ void Plprime(NODE arg,Z *rp) p = get_lprime(i); STOZ(p,*rp); } + +#if SIZEOF_LONG==8 +void Plprime64(NODE arg,Z *rp) +{ + int i; + mp_limb_t p; + + asir_assert(ARG0(arg),O_N,"lprime64"); + i = ZTOS((Q)ARG0(arg)); + if ( i < 0 ) + *rp = 0; + else + p = get_lprime64(i); + STOZ(p,*rp); +} +#endif extern int up_kara_mag, up_tkara_mag, up_fft_mag;