[BACK]Return to pdiv.c CVS log [TXT][DIR] Up to [local] / OpenXM_contrib2 / asir2000 / builtin

Diff for /OpenXM_contrib2/asir2000/builtin/pdiv.c between version 1.4 and 1.8

version 1.4, 2000/08/22 05:03:59 version 1.8, 2004/06/30 04:29:38
Line 45 
Line 45 
  * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE,   * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE,
  * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE.   * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE.
  *   *
  * $OpenXM: OpenXM_contrib2/asir2000/builtin/pdiv.c,v 1.3 2000/08/21 08:31:20 noro Exp $   * $OpenXM: OpenXM_contrib2/asir2000/builtin/pdiv.c,v 1.7 2002/02/08 08:28:00 noro Exp $
 */  */
 #include "ca.h"  #include "ca.h"
 #include "parse.h"  #include "parse.h"
   
 void Psdiv(), Psrem(), Ptdiv(), Psqr(), Pinva_mod();  void Psdiv(), Psrem(), Ptdiv(), Psqr(), Pinva_mod(), Pprem();
 void Psdiv_gf2n(), Psrem_gf2n();  void Psdiv_gf2n(), Psrem_gf2n(), Pgcd_gf2n();
 void Psdivm(), Psremm(), Psqrm();  void Psdivm(), Psremm(), Psqrm();
 void Psrem_mod();  void Psrem_mod();
 void Pugcd();  void Pugcd();
Line 61  void Pudiv();
Line 61  void Pudiv();
 struct ftab pdiv_tab[] = {  struct ftab pdiv_tab[] = {
         {"sdiv",Psdiv,-3},          {"sdiv",Psdiv,-3},
         {"srem",Psrem,-3},          {"srem",Psrem,-3},
           {"prem",Pprem,-3},
         {"sdiv_gf2n",Psdiv_gf2n,2},          {"sdiv_gf2n",Psdiv_gf2n,2},
         {"srem_gf2n",Psrem_gf2n,2},          {"srem_gf2n",Psrem_gf2n,2},
           {"gcd_gf2n",Pgcd_gf2n,2},
         {"sqr",Psqr,-3},          {"sqr",Psqr,-3},
         {"tdiv",Ptdiv,2},          {"tdiv",Ptdiv,-3},
         {"udiv",Pudiv,2},          {"udiv",Pudiv,2},
         {"sdivm",Psdivm,-4},          {"sdivm",Psdivm,-4},
         {"sremm",Psremm,-4},          {"sremm",Psremm,-4},
Line 118  Obj *rp;
Line 120  Obj *rp;
                 divsrp(CO,dnd,dvr,&q,(P *)rp);                  divsrp(CO,dnd,dvr,&q,(P *)rp);
 }  }
   
   void Pprem(arg,rp)
   NODE arg;
   P *rp;
   {
           P q,r,dnd,dnd1,dvr,dvr1;
           V v;
           VL vl;
   
           asir_assert(ARG0(arg),O_P,"prem");
           asir_assert(ARG1(arg),O_P,"prem");
           dnd = (P)ARG0(arg); dvr = (P)ARG1(arg);
           if ( argc(arg) == 3 ) {
                   v = VR((P)ARG2(arg));
                   change_mvar(CO,dnd,v,&dnd1); change_mvar(CO,dvr,v,&dvr1);
                   reordvar(CO,v,&vl);
                   premp(vl,dnd1,dvr1,&r);
                   restore_mvar(CO,r,v,rp);
           } else
                   premp(CO,dnd,dvr,rp);
   }
   
 void Psqr(arg,rp)  void Psqr(arg,rp)
 NODE arg;  NODE arg;
 LIST *rp;  LIST *rp;
Line 177  GF2N *rp;
Line 200  GF2N *rp;
         }          }
 }  }
   
   void Pgcd_gf2n(arg,rp)
   NODE arg;
   GF2N *rp;
   {
           GF2N p1,p2;
           UP2 gcd;
   
           p1 = (GF2N)ARG0(arg); p2 = (GF2N)ARG1(arg);
           if ( !p1 )
                   *rp = p2;
           else if ( !p2 )
                   *rp = p1;
           else {
                   gcdup2(p1->body,p2->body,&gcd);
                   MKGF2N(gcd,*rp);
           }
   }
   
 void Ptdiv(arg,rp)  void Ptdiv(arg,rp)
 NODE arg;  NODE arg;
 P *rp;  P *rp;
 {  {
         P p1,p2,q1,q2,q,c1,c2,c;          P p1,p2,q1,q2,q,c1,c2,c;
           int m;
   
         p1 = (P)ARG0(arg); p2 = (P)ARG1(arg);          p1 = (P)ARG0(arg); p2 = (P)ARG1(arg);
         asir_assert(p1,O_P,"tdiv");          asir_assert(p1,O_P,"tdiv");
Line 190  P *rp;
Line 232  P *rp;
                 *rp = 0;                  *rp = 0;
         else if ( (OID(p1) > O_P) || (OID(p2) > O_P ) )          else if ( (OID(p1) > O_P) || (OID(p2) > O_P ) )
                 *rp = 0;                  *rp = 0;
         else {          else if ( argc(arg) == 3 ) {
                   m = QTOS((Q)ARG2(arg));
                   ptomp(m,p1,&q1); ptomp(m,p2,&q2);
                   if ( divtmp(CO,m,q1,q2,&q) )
                           mptop(q,rp);
                   else
                           *rp = 0;
           } else if ( qpcheck((Obj)p1) && qpcheck((Obj)p2) ) {
                 ptozp(p1,1,(Q *)&c1,&q1); ptozp(p2,1,(Q *)&c2,&q2);                  ptozp(p1,1,(Q *)&c1,&q1); ptozp(p2,1,(Q *)&c2,&q2);
                 if ( divtpz(CO,q1,q2,&q) ) {                  if ( divtpz(CO,q1,q2,&q) ) {
                         divq((Q)c1,(Q)c2,(Q *)&c); mulp(CO,q,c,rp);                          divq((Q)c1,(Q)c2,(Q *)&c); mulp(CO,q,c,rp);
                 } else                  } else
                           *rp = 0;
           } else {
                   if ( !divtp(CO,p1,p2,rp) )
                         *rp = 0;                          *rp = 0;
         }          }
 }  }

Legend:
Removed from v.1.4  
changed lines
  Added in v.1.8

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