=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2000/engine/Mgfs.c,v retrieving revision 1.12 retrieving revision 1.14 diff -u -p -r1.12 -r1.14 --- OpenXM_contrib2/asir2000/engine/Mgfs.c 2002/01/13 07:11:46 1.12 +++ OpenXM_contrib2/asir2000/engine/Mgfs.c 2002/09/27 08:40:49 1.14 @@ -1,6 +1,7 @@ -/* $OpenXM: OpenXM_contrib2/asir2000/engine/Mgfs.c,v 1.11 2001/10/09 01:36:10 noro Exp $ */ +/* $OpenXM: OpenXM_contrib2/asir2000/engine/Mgfs.c,v 1.13 2002/09/27 04:24:04 noro Exp $ */ #include "ca.h" +#include "inline.h" extern int up_kara_mag, current_gfs_q1; extern int *current_gfs_plus1; @@ -21,6 +22,18 @@ INLINE int _ADDSF(int a,int b) return a; a = IFTOF(a); b = IFTOF(b); + + if ( !current_gfs_ntoi ) { + a = a+b-current_gfs_q; + if ( a == 0 ) + return 0; + else { + if ( a < 0 ) + a += current_gfs_q; + return FTOIF(a); + } + } + if ( a > b ) { /* tab[a]+tab[b] = tab[b](tab[a-b]+1) */ a = current_gfs_plus1[a-b]; @@ -48,9 +61,15 @@ INLINE int _ADDSF(int a,int b) INLINE int _MULSF(int a,int b) { + int c; + if ( !a || !b ) return 0; - else { + else if ( !current_gfs_ntoi ) { + a = IFTOF(a); b = IFTOF(b); + DMAR(a,b,0,current_gfs_q,c); + return FTOIF(c); + } else { a = IFTOF(a) + IFTOF(b); if ( a >= current_gfs_q1 ) a -= current_gfs_q1; @@ -671,11 +690,7 @@ void sfmintdeg(VL vl,P fx,int dy,int c,P *fr) /* create the head coeff */ for ( l = 0, k = dxdy-dy; l < dy; l++, k++ ) { - if ( prev[k] ) { - u = IFTOF(prev[k]); - MKGFS(u,s); - } else - s = 0; + iftogfs(prev[k],&s); COEF(h)[l] = (Num)s; } for ( l = dy-1; l >= 0 && !COEF(h)[l]; l--); @@ -711,8 +726,7 @@ void sfmintdeg(VL vl,P fx,int dy,int c,P *fr) for ( k = j = 0; k <= d; k++ ) for ( i = 0; i <= k; i++, j++ ) if ( hist[j] ) { - u = IFTOF(hist[j]); - MKGFS(u,s); + iftogfs(hist[j],&s); /* mono = s*x^(k-i)*y^i */ create_bmono((P)s,x,k-i,y,i,&mono); addp(vl,f,mono,&f1);