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

Diff for /OpenXM_contrib2/asir2000/asm/ddN.c between version 1.1 and 1.11

version 1.1, 1999/12/03 07:39:06 version 1.11, 2013/11/05 02:55:02
Line 1 
Line 1 
 /* $OpenXM: OpenXM/src/asir99/asm/ddN.c,v 1.1.1.1 1999/11/10 08:12:25 noro Exp $ */  /*
    * Copyright (c) 1994-2000 FUJITSU LABORATORIES LIMITED
    * All rights reserved.
    *
    * FUJITSU LABORATORIES LIMITED ("FLL") hereby grants you a limited,
    * non-exclusive and royalty-free license to use, copy, modify and
    * redistribute, solely for non-commercial and non-profit purposes, the
    * computer program, "Risa/Asir" ("SOFTWARE"), subject to the terms and
    * conditions of this Agreement. For the avoidance of doubt, you acquire
    * only a limited right to use the SOFTWARE hereunder, and FLL or any
    * third party developer retains all rights, including but not limited to
    * copyrights, in and to the SOFTWARE.
    *
    * (1) FLL does not grant you a license in any way for commercial
    * purposes. You may use the SOFTWARE only for non-commercial and
    * non-profit purposes only, such as academic, research and internal
    * business use.
    * (2) The SOFTWARE is protected by the Copyright Law of Japan and
    * international copyright treaties. If you make copies of the SOFTWARE,
    * with or without modification, as permitted hereunder, you shall affix
    * to all such copies of the SOFTWARE the above copyright notice.
    * (3) An explicit reference to this SOFTWARE and its copyright owner
    * 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@sec.flab.fujitsu.co.jp of the detailed specification
    * for such modification or the source code of the modified part of the
    * SOFTWARE.
    *
    * THE SOFTWARE IS PROVIDED AS IS WITHOUT ANY WARRANTY OF ANY KIND. FLL
    * MAKES ABSOLUTELY NO WARRANTIES, EXPRESSED, IMPLIED OR STATUTORY, AND
    * EXPRESSLY DISCLAIMS ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS
    * FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT OF THIRD PARTIES'
    * RIGHTS. NO FLL DEALER, AGENT, EMPLOYEES IS AUTHORIZED TO MAKE ANY
    * MODIFICATIONS, EXTENSIONS, OR ADDITIONS TO THIS WARRANTY.
    * UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, TORT, CONTRACT,
    * OR OTHERWISE, SHALL FLL BE LIABLE TO YOU OR ANY OTHER PERSON FOR ANY
    * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, PUNITIVE OR CONSEQUENTIAL
    * DAMAGES OF ANY CHARACTER, INCLUDING, WITHOUT LIMITATION, DAMAGES
    * ARISING OUT OF OR RELATING TO THE SOFTWARE OR THIS AGREEMENT, DAMAGES
    * FOR LOSS OF GOODWILL, WORK STOPPAGE, OR LOSS OF DATA, OR FOR ANY
    * DAMAGES, EVEN IF FLL SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF
    * SUCH DAMAGES, OR FOR ANY CLAIM BY ANY OTHER PARTY. EVEN IF A PART
    * OF THE SOFTWARE HAS BEEN DEVELOPED BY A THIRD PARTY, THE THIRD PARTY
    * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE,
    * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE.
    *
    * $OpenXM: OpenXM_contrib2/asir2000/asm/ddN.c,v 1.10 2009/03/02 19:01:43 ohara Exp $
   */
 #ifndef FBASE  #ifndef FBASE
 #define FBASE  #define FBASE
 #endif  #endif
Line 7 
Line 55 
 #include "base.h"  #include "base.h"
 #include "inline.h"  #include "inline.h"
   
 void bxprintn(N),bprintn(N);  void divn(N n1,N n2,N *nq,N *nr)
 void divnmain_special(int,int,unsigned int *,unsigned int *,unsigned int *);  
 void dupn(N,N);  
   
 void divn(n1,n2,nq,nr)  
 N n1,n2,*nq,*nr;  
 {  {
         int tmp,b;          int tmp,b;
         int i,j,d1,d2,dd;          int i,j,d1,d2,dd;
Line 74  N n1,n2,*nq,*nr;
Line 117  N n1,n2,*nq,*nr;
         }          }
 }  }
   
 void divsn(n1,n2,nq)  void divsn(N n1,N n2,N *nq)
 N n1,n2,*nq;  
 {  {
         int d1,d2,dd,i,b;          int d1,d2,dd,i,b;
         unsigned int *m1,*m2;          unsigned int *m1,*m2;
Line 114  N n1,n2,*nq;
Line 156  N n1,n2,*nq;
         }          }
 }  }
   
 void remn(n1,n2,nr)  void remn(N n1,N n2,N *nr)
 N n1,n2,*nr;  
 {  {
         int d1,d2,tmp;          int d1,d2,tmp;
         unsigned int uq,ur;          unsigned int uq,ur;
Line 147  N n1,n2,*nr;
Line 188  N n1,n2,*nr;
   
 /* d = 2^(32*words)-lower */  /* d = 2^(32*words)-lower */
   
 void remn_special(a,d,bits,lower,b)  void remn_special(N a,N d,int bits,unsigned int lower,N *b)
 N a,d;  
 int bits;  
 unsigned int lower;  
 N *b;  
 {  {
         int words;          int words;
         N r;          N r;
Line 189  N *b;
Line 226  N *b;
         } else          } else
                 *b = r;                  *b = r;
 }  }
 void mulin(n,d,p)  void mulin(N n,unsigned int d,unsigned int *p)
 N n;  
 unsigned int d;  
 unsigned int *p;  
 {  {
         unsigned int carry;          unsigned int carry;
         unsigned int *m,*me;          unsigned int *m,*me;
Line 204  unsigned int *p;
Line 238  unsigned int *p;
         *p = carry;          *p = carry;
 }  }
   
 unsigned int divin(n,dvr,q)  unsigned int divin(N n,unsigned int dvr,N *q)
 N n;  
 unsigned int dvr;  
 N *q;  
 {  {
         int d;          int d;
         unsigned int up;          unsigned int up;
Line 229  N *q;
Line 260  N *q;
         return ( up );          return ( up );
 }  }
   
 void bprintn(n)  void bprintn(N n)
 N n;  
 {  {
         int l,i;          int l,i;
         unsigned int *b;          unsigned int *b;
Line 244  N n;
Line 274  N n;
         }          }
 }  }
   
 void bxprintn(n)  void bxprintn(N n)
 N n;  
 {  {
         int l,i;          int l,i;
         unsigned int *b;          unsigned int *b;
Line 259  N n;
Line 288  N n;
         }          }
 }  }
   
 #if defined(VISUAL) || defined(i386)  #if defined(_M_IX86) || defined(i386)
 void muln(n1,n2,nr)  void muln(N n1,N n2,N *nr)
 N n1,n2,*nr;  
 {  {
         unsigned int tmp,carry,mul;          unsigned int tmp,carry,mul;
         unsigned int *p1,*m1,*m2;          unsigned int *p1,*m1,*m2;
Line 293  N n1,n2,*nr;
Line 321  N n1,n2,*nr;
         }          }
 }  }
   
 void _muln(n1,n2,nr)  void _muln(N n1,N n2,N nr)
 N n1,n2,nr;  
 {  {
         unsigned int mul;          unsigned int mul;
         unsigned int *m1,*m2;          unsigned int *m1,*m2;
Line 317  N n1,n2,nr;
Line 344  N n1,n2,nr;
         }          }
 }  }
   
 void muln_1(p,s,d,r)  void muln_1(unsigned int *p,int s,unsigned int d,unsigned int *r)
 unsigned int *p;  
 int s;  
 unsigned int d;  
 unsigned int *r;  
 {  {
         /* esi : p, edi : r, carry : ebx, s : ecx */          /* esi : p, edi : r, carry : ebx, s : ecx */
 #if defined(VISUAL)  #if defined(_M_IX86)
         __asm {          __asm {
         push esi          push esi
         push edi          push edi
Line 351  unsigned int *r;
Line 374  unsigned int *r;
         }          }
 #else  #else
         asm volatile("\          asm volatile("\
           pushl   %%ebx;\
         movl    %0,%%esi;\          movl    %0,%%esi;\
         movl    %1,%%edi;\          movl    %1,%%edi;\
         movl    $0,%%ebx;\          movl    $0,%%ebx;\
Line 367  unsigned int *r;
Line 391  unsigned int *r;
         leal    4(%%edi),%%edi;\          leal    4(%%edi),%%edi;\
         decl    %3;\          decl    %3;\
         jnz             Lstart_muln;\          jnz             Lstart_muln;\
         movl    %%ebx,(%%edi)"\          movl    %%ebx,(%%edi);\
           popl    %%ebx"\
         :\          :\
         :"m"(p),"m"(r),"m"(d),"m"(s)\          :"m"(p),"m"(r),"m"(d),"m"(s)\
         :"eax","ebx","edx","esi","edi");          :"eax","edx","esi","edi");
 #endif  #endif
 }  }
   
 void divnmain(d1,d2,m1,m2,q)  void divnmain(int d1,int d2,unsigned int *m1,unsigned int *m2,unsigned int *q)
 int d1,d2;  
 unsigned int *m1,*m2,*q;  
 {  {
         int i,j;          int i,j;
         UL r,ltmp;          UL r,ltmp;
Line 428  unsigned int *m1,*m2,*q;
Line 451  unsigned int *m1,*m2,*q;
         }          }
 }  }
   
 void divnmain_special(d1,d2,m1,m2,q)  void divnmain_special(int d1,int d2,unsigned int *m1,unsigned int *m2,unsigned int *q)
 int d1,d2;  
 unsigned int *m1,*m2,*q;  
 {  {
         int i,j;          int i,j;
         UL ltmp;          UL ltmp;
Line 459  unsigned int *m1,*m2,*q;
Line 480  unsigned int *m1,*m2,*q;
         }          }
 }  }
   
 unsigned int divn_1(p,s,d,r)  unsigned int divn_1(unsigned int *p,int s,unsigned int d,unsigned int *r)
 unsigned int *p;  
 int s;  
 unsigned int d;  
 unsigned int *r;  
 {  {
 /*  /*
         unsigned int borrow,l;          unsigned int borrow,l;
Line 479  unsigned int *r;
Line 496  unsigned int *r;
         return borrow;          return borrow;
 */  */
         /* esi : p, edi : r, borrow : ebx, s : ecx */          /* esi : p, edi : r, borrow : ebx, s : ecx */
 #if defined(VISUAL)  #if defined(_M_IX86)
         __asm {          __asm {
         push esi          push esi
         push edi          push edi
Line 508  unsigned int *r;
Line 525  unsigned int *r;
         unsigned int borrow;          unsigned int borrow;
   
         asm volatile("\          asm volatile("\
           pushl   %%ebx;\
         movl    %1,%%esi;\          movl    %1,%%esi;\
         movl    %2,%%edi;\          movl    %2,%%edi;\
         movl    $0,%%ebx;\          movl    $0,%%ebx;\
Line 523  unsigned int *r;
Line 541  unsigned int *r;
         leal    4(%%edi),%%edi;\          leal    4(%%edi),%%edi;\
         decl    %4;\          decl    %4;\
         jnz             Lstart_divn;\          jnz             Lstart_divn;\
         movl    %%ebx,%0"\          movl    %%ebx,%0;\
           popl    %%ebx"\
         :"=m"(borrow)\          :"=m"(borrow)\
         :"m"(p),"m"(r),"m"(d),"m"(s)\          :"m"(p),"m"(r),"m"(d),"m"(s)\
         :"eax","ebx","edx","esi","edi");          :"eax","edx","esi","edi");
   
         return borrow;          return borrow;
 #endif  #endif
Line 534  unsigned int *r;
Line 553  unsigned int *r;
   
 #else  #else
   
 void muln(n1,n2,nr)  void muln(N n1,N n2,N *nr)
 N n1,n2,*nr;  
 {  {
         unsigned int tmp,carry,mul;          unsigned int tmp,carry,mul;
         unsigned int *p1,*pp,*m1,*m2;          unsigned int *p1,*pp,*m1,*m2;
Line 571  N n1,n2,*nr;
Line 589  N n1,n2,*nr;
         }          }
 }  }
   
 void _muln(n1,n2,nr)  void _muln(N n1,N n2,N nr)
 N n1,n2,nr;  
 {  {
         unsigned int tmp,carry,mul;          unsigned int carry=0,mul;
         unsigned int *p1,*pp,*m1,*m2;          unsigned int *p1,*pp,*m1,*m2;
         int i,j,d1,d2;          int i,j,d1,d2;
   
Line 601  N n1,n2,nr;
Line 618  N n1,n2,nr;
   
 /* r[0...s] = p[0...s-1]*d */  /* r[0...s] = p[0...s-1]*d */
   
 void muln_1(p,s,d,r)  void muln_1(unsigned int *p,int s,unsigned int d,unsigned int *r)
 unsigned int *p;  
 int s;  
 unsigned int d;  
 unsigned int *r;  
 {  {
         unsigned int carry;          unsigned int carry;
   
Line 615  unsigned int *r;
Line 628  unsigned int *r;
         *r = carry;          *r = carry;
 }  }
   
 void divnmain(d1,d2,m1,m2,q)  void divnmain(int d1,int d2,unsigned int *m1,unsigned int *m2,unsigned int *q)
 int d1,d2;  
 unsigned int *m1,*m2,*q;  
 {  {
         int i,j;          int i,j;
         UL r,ltmp;          UL r,ltmp;
         unsigned int l,ur,tmp;          unsigned int l,ur;
         unsigned int *n1,*n2;          unsigned int *n1,*n2;
         unsigned int u,qhat;          unsigned int u,qhat;
         unsigned int v1,v2;          unsigned int v1,v2;
Line 663  unsigned int *m1,*m2,*q;
Line 674  unsigned int *m1,*m2,*q;
         }          }
 }  }
   
 unsigned int divn_1(p,s,d,r)  unsigned int divn_1(unsigned int *p,int s,unsigned int d,unsigned int *r)
 unsigned int *p;  
 int s;  
 unsigned int d;  
 unsigned int *r;  
 {  {
         unsigned int borrow,l;          unsigned int borrow,l;
   

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.11

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