[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.5 and 1.9

version 1.5, 2006/08/09 02:43:37 version 1.9, 2009/03/02 16:28:30
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/asm/ddN.c,v 1.4 2001/10/09 01:36:03 noro Exp $   * $OpenXM: OpenXM_contrib2/asir2000/asm/ddN.c,v 1.8 2007/09/15 10:17:07 noro Exp $
 */  */
 #ifndef FBASE  #ifndef FBASE
 #define FBASE  #define FBASE
Line 288  void bxprintn(N n)
Line 288  void bxprintn(N n)
         }          }
 }  }
   
 #if defined(VISUAL) || defined(i386)  #if defined(_M_IX86) || defined(i386)
 void muln(N n1,N n2,N *nr)  void muln(N n1,N n2,N *nr)
 {  {
         unsigned int tmp,carry,mul;          unsigned int tmp,carry,mul;
Line 347  void _muln(N n1,N n2,N nr)
Line 347  void _muln(N n1,N n2,N nr)
 void muln_1(unsigned int *p,int s,unsigned int d,unsigned int *r)  void muln_1(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 374  void muln_1(unsigned int *p,int s,unsigned int d,unsig
Line 374  void muln_1(unsigned int *p,int s,unsigned int d,unsig
         }          }
 #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 390  void muln_1(unsigned int *p,int s,unsigned int d,unsig
Line 391  void muln_1(unsigned int *p,int s,unsigned int d,unsig
         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
 }  }
   
Line 494  unsigned int divn_1(unsigned int *p,int s,unsigned int
Line 496  unsigned int divn_1(unsigned int *p,int s,unsigned int
         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 523  unsigned int divn_1(unsigned int *p,int s,unsigned int
Line 525  unsigned int divn_1(unsigned int *p,int s,unsigned int
         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 538  unsigned int divn_1(unsigned int *p,int s,unsigned int
Line 541  unsigned int divn_1(unsigned int *p,int s,unsigned int
         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 553  void muln(N n1,N n2,N *nr)
Line 557  void muln(N n1,N n2,N *nr)
 {  {
         unsigned int tmp,carry,mul;          unsigned int tmp,carry,mul;
         unsigned int *p1,*pp,*m1,*m2;          unsigned int *p1,*pp,*m1,*m2;
         int i,j,d1,d2,d;          int i,j,d1,d2;
         N r;          N r;
   
         if ( !n1 || !n2 )          if ( !n1 || !n2 )
Line 570  void muln(N n1,N n2,N *nr)
Line 574  void muln(N n1,N n2,N *nr)
                 } else                  } else
                         STON(tmp,*nr);                          STON(tmp,*nr);
         } else {          } else {
                 d1 = PL(n1); d2 = PL(n2); d = d1+d2;                  d1 = PL(n1); d2 = PL(n2);
                 *nr = r = NALLOC(d); INITRC(r);                  *nr = r = NALLOC(d1+d2); INITRC(r);
                 for ( i = 0, pp = BD(r); i < d; i++, pp++ ) *pp = 0;                  bzero((char *)BD(r),(int)((d1+d2)*sizeof(int)));
                 for ( i = 0, m1 = BD(n1), m2 = BD(n2); i < d2; i++, m2++ )                  for ( i = 0, m1 = BD(n1), m2 = BD(n2); i < d2; i++, m2++ )
                         if ( mul = *m2 ) {                          if ( mul = *m2 ) {
                                 for ( j = d1, carry = 0, p1 = m1, pp = BD(r)+i;                                  for ( j = d1, carry = 0, p1 = m1, pp = BD(r)+i;

Legend:
Removed from v.1.5  
changed lines
  Added in v.1.9

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