version 1.2, 2000/08/21 08:31:17 |
version 1.8, 2007/09/15 10:17:07 |
|
|
* shall be made on your publication or presentation in any form of the |
* shall be made on your publication or presentation in any form of the |
* results obtained by use of the SOFTWARE. |
* results obtained by use of the SOFTWARE. |
* (4) In the event that you modify the SOFTWARE, you shall notify FLL by |
* (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 |
* for such modification or the source code of the modified part of the |
* SOFTWARE. |
* SOFTWARE. |
* |
* |
|
|
* 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.1.1.1 1999/12/03 07:39:06 noro Exp $ |
* $OpenXM: OpenXM_contrib2/asir2000/asm/ddN.c,v 1.7 2007/02/18 05:36:27 ohara Exp $ |
*/ |
*/ |
#ifndef FBASE |
#ifndef FBASE |
#define FBASE |
#define FBASE |
|
|
#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 122 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; |
|
|
} |
} |
} |
} |
|
|
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; |
|
|
|
|
/* 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; |
|
|
} 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 252 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; |
|
|
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; |
|
|
} |
} |
} |
} |
|
|
void bxprintn(n) |
void bxprintn(N n) |
N n; |
|
{ |
{ |
int l,i; |
int l,i; |
unsigned int *b; |
unsigned int *b; |
|
|
} |
} |
|
|
#if defined(VISUAL) || defined(i386) |
#if defined(VISUAL) || 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; |
|
|
} |
} |
} |
} |
|
|
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; |
|
|
} |
} |
} |
} |
|
|
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(VISUAL) |
Line 399 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 415 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 476 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 507 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 556 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 571 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 582 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; |
|
|
} |
} |
} |
} |
|
|
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; |
|
|
|
|
/* 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 663 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; |
Line 711 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; |
|
|