=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2000/engine/up_lm.c,v retrieving revision 1.2 retrieving revision 1.10 diff -u -p -r1.2 -r1.10 --- OpenXM_contrib2/asir2000/engine/up_lm.c 2000/08/21 08:31:28 1.2 +++ OpenXM_contrib2/asir2000/engine/up_lm.c 2015/08/08 14:19:41 1.10 @@ -23,7 +23,7 @@ * shall be made on your publication or presentation in any form of the * results obtained by use of the SOFTWARE. * (4) In the event that you modify the SOFTWARE, you shall notify FLL by - * e-mail at risa-admin@flab.fujitsu.co.jp of the detailed specification + * e-mail at risa-admin@sec.flab.fujitsu.co.jp of the detailed specification * for such modification or the source code of the modified part of the * SOFTWARE. * @@ -45,7 +45,7 @@ * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. * - * $OpenXM: OpenXM_contrib2/asir2000/engine/up_lm.c,v 1.1.1.1 1999/12/03 07:39:08 noro Exp $ + * $OpenXM: OpenXM_contrib2/asir2000/engine/up_lm.c,v 1.9 2015/08/06 10:01:52 fujimoto Exp $ */ #include "ca.h" #include @@ -54,12 +54,9 @@ extern GC_dont_gc; extern struct oEGT eg_chrem,eg_fore,eg_back; extern int debug_up; extern int up_lazy; +extern int current_ff; -void crup_lm(ModNum **,int,int *,int,N,N,UP *); - -void fft_mulup_lm(n1,n2,nr) -UP n1,n2; -UP *nr; +void fft_mulup_lm(UP n1,UP n2,UP *nr) { ModNum *f1,*f2,*w,*fr; ModNum *frarray[1024]; @@ -108,9 +105,7 @@ UP *nr; error("fft_mulup : FFT_primes exhausted"); } -void fft_squareup_lm(n1,nr) -UP n1; -UP *nr; +void fft_squareup_lm(UP n1,UP *nr) { ModNum *f1,*w,*fr; ModNum *frarray[1024]; @@ -157,10 +152,7 @@ UP *nr; error("fft_squareup : FFT_primes exhausted"); } -void trunc_fft_mulup_lm(n1,n2,dbd,nr) -UP n1,n2; -int dbd; -UP *nr; +void trunc_fft_mulup_lm(UP n1,UP n2,int dbd,UP *nr) { ModNum *f1,*f2,*fr,*w; ModNum *frarray[1024]; @@ -210,14 +202,7 @@ UP *nr; error("trunc_fft_mulup : FFT_primes exhausted"); } -void crup_lm(f,d,mod,index,m,lm_mod,r) -ModNum **f; -int d; -int *mod; -int index; -N m; -N lm_mod; -UP *r; +void crup_lm(ModNum **f,int d,int *mod,int index,N m,N lm_mod,UP *r) { double *k; double c2; @@ -231,7 +216,6 @@ UP *r; unsigned int **sum; unsigned int *sum_b; Q q; - struct oEGT eg0,eg1; if ( !lm_mod ) error("crup_lm : current_mod_lm is not set"); @@ -267,13 +251,13 @@ UP *r; k[j] += c2*f[i][j]; } uiarraytoup(sum,len,d,&s); - GC_free(sum_b); + GCFREE(sum_b); u = UPALLOC(d); for ( j = 0; j <= d; j++ ) { #if 1 a = (UL)floor(k[j]); -#if defined(i386) || defined(__alpha) || defined(VISUAL) +#if defined(i386) || defined(__alpha) || defined(VISUAL) || defined(__MINGW32__) || defined(__MINGW64__) || defined(__x86_64) au = ((unsigned int *)&a)[1]; al = ((unsigned int *)&a)[0]; #else @@ -303,9 +287,7 @@ UP *r; addup(s,s1,r); } -void fft_rembymulup_special_lm(n1,n2,inv2,nr) -UP n1,n2,inv2; -UP *nr; +void fft_rembymulup_special_lm(UP n1,UP n2,UP inv2,UP *nr) { int d1,d2,d; UP r1,t,s,q,u; @@ -328,9 +310,7 @@ UP *nr; } } -void uptolmup(n,nr) -UP n; -UP *nr; +void uptolmup(UP n,UP *nr) { int i,d; Q *c; @@ -352,14 +332,13 @@ UP *nr; } } -save_up(obj,name) -UP obj; -char *name; +void save_up(UP obj,char *name) { P p; Obj ret; NODE n0,n1; STRING s; + void Pbsave(); uptop(obj,&p); MKSTR(s,name); @@ -367,16 +346,12 @@ char *name; Pbsave(n0,&ret); } -void hybrid_powermodup(f,xp) -UP f; -UP *xp; +void hybrid_powermodup(UP f,UP *xp) { N n; UP x,y,t,invf,s; int k; LM lm; - struct oEGT eg_sq,eg_rem,eg_mul,eg_inv,eg0,eg1,eg2,eg3; - char name[BUFSIZ]; getmod_lm(&n); if ( !n ) @@ -400,25 +375,34 @@ UP *xp; *xp = y; } -void powermodup(f,xp) -UP f; -UP *xp; +void powermodup(UP f,UP *xp) { N n; UP x,y,t,invf,s; int k; - LM lm; - struct oEGT eg_sq,eg_rem,eg_mul,eg_inv,eg0,eg1,eg2,eg3; + Num c; + if ( !current_ff ) + error("powermodup : current_ff is not set"); field_order_ff(&n); - if ( !n ) - error("powermodup : current_mod_lm is not set"); - MKLM(ONEN,lm); - x = UPALLOC(1); x->d = 1; x->c[1] = (Num)lm; - y = UPALLOC(0); y->d = 0; y->c[0] = (Num)lm; + one_ff(&c); + x = UPALLOC(1); x->d = 1; x->c[1] = c; + y = UPALLOC(0); y->d = 0; y->c[0] = c; reverseup(f,f->d,&t); - invmodup(t,f->d,&s); uptolmup(s,&invf); + invmodup(t,f->d,&s); + switch ( current_ff ) { + case FF_GFP: + case FF_GFPN: + uptolmup(s,&invf); + break; + case FF_GFS: + case FF_GFSN: + invf = s; /* XXX */ + break; + default: + error("powermodup : not implemented yet"); + } for ( k = n_bits(n)-1; k >= 0; k-- ) { ksquareup(y,&t); rembymulup_special(t,f,invf,&s); @@ -434,16 +418,12 @@ UP *xp; /* g^d mod f */ -void hybrid_generic_powermodup(g,f,d,xp) -UP g,f; -Q d; -UP *xp; +void hybrid_generic_powermodup(UP g,UP f,Q d,UP *xp) { N e; UP x,y,t,invf,s; int k; LM lm; - struct oEGT eg_sq,eg_rem,eg_mul,eg_inv,eg0,eg1,eg2,eg3; e = NM(d); MKLM(ONEN,lm); @@ -471,20 +451,16 @@ UP *xp; *xp = y; } -void generic_powermodup(g,f,d,xp) -UP g,f; -Q d; -UP *xp; +void generic_powermodup(UP g,UP f,Q d,UP *xp) { N e; UP x,y,t,invf,s; int k; - LM lm; - struct oEGT eg_sq,eg_rem,eg_mul,eg_inv,eg0,eg1,eg2,eg3; + Num c; e = NM(d); - MKLM(ONEN,lm); - y = UPALLOC(0); y->d = 0; y->c[0] = (Num)lm; + one_ff(&c); + y = UPALLOC(0); y->d = 0; y->c[0] = c; remup(g,f,&x); if ( !x ) { *xp = !d ? y : 0; @@ -508,15 +484,11 @@ UP *xp; *xp = y; } -void hybrid_powertabup(f,xp,tab) -UP f; -UP xp; -UP *tab; +void hybrid_powertabup(UP f,UP xp,UP *tab) { UP y,t,invf; int i,d; LM lm; - struct oEGT eg_rem,eg_mul,eg0,eg1,eg2; d = f->d; MKLM(ONEN,lm); @@ -528,26 +500,26 @@ UP *tab; invmodup(t,f->d,&invf); for ( i = 2; i < d; i++ ) { - if ( debug_up ) - fprintf(stderr,"."); - hybrid_mulup(FF_GFP,tab[i-1],xp,&t); - hybrid_rembymulup_special(FF_GFP,t,f,invf,&tab[i]); + if ( debug_up ){ + fprintf(stderr,"."); +#if defined(__MINGW32__) || defined(__MINGW64__) + fflush(stderr); +#endif + } + hybrid_mulup(FF_GFP,tab[i-1],xp,&t); + hybrid_rembymulup_special(FF_GFP,t,f,invf,&tab[i]); } } -void powertabup(f,xp,tab) -UP f; -UP xp; -UP *tab; +void powertabup(UP f,UP xp,UP *tab) { UP y,t,invf; int i,d; - LM lm; - struct oEGT eg_rem,eg_mul,eg0,eg1,eg2; + Num c; d = f->d; - MKLM(ONEN,lm); - y = UPALLOC(0); y->d = 0; y->c[0] = (Num)lm; + one_ff(&c); + y = UPALLOC(0); y->d = 0; y->c[0] = c; tab[0] = y; tab[1] = xp; @@ -555,9 +527,13 @@ UP *tab; invmodup(t,f->d,&invf); for ( i = 2; i < d; i++ ) { - if ( debug_up ) - fprintf(stderr,"."); - kmulup(tab[i-1],xp,&t); - rembymulup_special(t,f,invf,&tab[i]); + if ( debug_up ){ + fprintf(stderr,"."); +#if defined(__MINGW32__) || defined(__MINGW64__) + fflush(stderr); +#endif + } + kmulup(tab[i-1],xp,&t); + rembymulup_special(t,f,invf,&tab[i]); } }