version 1.6, 2003/09/02 07:00:51 |
version 1.10, 2009/03/02 16:28:30 |
|
|
* 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/engine/N.c,v 1.5 2001/10/09 01:36:10 noro Exp $ |
* $OpenXM: OpenXM_contrib2/asir2000/engine/N.c,v 1.9 2007/09/15 10:17:08 noro Exp $ |
*/ |
*/ |
#include "ca.h" |
#include "ca.h" |
#include "base.h" |
#include "base.h" |
|
|
#if defined(VISUAL) || defined(i386) |
#if defined(_M_IX86) || defined(i386) |
void addn(N n1,N n2,N *nr) |
void addn(N n1,N n2,N *nr) |
{ |
{ |
unsigned int *m1,*m2,*mr; |
unsigned int *m1,*m2,*mr; |
Line 71 void addn(N n1,N n2,N *nr) |
|
Line 71 void addn(N n1,N n2,N *nr) |
|
} |
} |
*nr = r = NALLOC(d1 + 1); INITRC(r); mr = BD(r); |
*nr = r = NALLOC(d1 + 1); INITRC(r); mr = BD(r); |
|
|
#if defined(VISUAL) |
#if defined(_M_IX86) |
__asm { |
__asm { |
push esi |
push esi |
push edi |
push edi |
Line 98 void addn(N n1,N n2,N *nr) |
|
Line 98 void addn(N n1,N n2,N *nr) |
|
} |
} |
#else |
#else |
asm volatile("\ |
asm volatile("\ |
|
pushl %%ebx;\ |
movl %1,%%esi;\ |
movl %1,%%esi;\ |
movl %2,%%edi;\ |
movl %2,%%edi;\ |
movl %3,%%ebx;\ |
movl %3,%%ebx;\ |
Line 115 void addn(N n1,N n2,N *nr) |
|
Line 116 void addn(N n1,N n2,N *nr) |
|
jnz Lstart_addn;\ |
jnz Lstart_addn;\ |
movl $0,%%eax;\ |
movl $0,%%eax;\ |
adcl %%eax,%%eax;\ |
adcl %%eax,%%eax;\ |
movl %%eax,%0"\ |
movl %%eax,%0;\ |
|
popl %%ebx"\ |
:"=m"(c)\ |
:"=m"(c)\ |
:"m"(m1),"m"(m2),"m"(mr),"m"(d2)\ |
:"m"(m1),"m"(m2),"m"(mr),"m"(d2)\ |
:"eax","ebx","ecx","edx","esi","edi"); |
:"eax","ecx","edx","esi","edi"); |
#endif |
#endif |
for ( i = d2, m1 += d2, mr += d2; (i < d1) && c ; i++ ) { |
for ( i = d2, m1 += d2, mr += d2; (i < d1) && c ; i++ ) { |
tmp = *m1++ + c; |
tmp = *m1++ + c; |
Line 175 int subn(N n1,N n2,N *nr) |
|
Line 177 int subn(N n1,N n2,N *nr) |
|
} |
} |
*nr = r = NALLOC(d1); INITRC(r); mr = BD(r); |
*nr = r = NALLOC(d1); INITRC(r); mr = BD(r); |
|
|
#if defined(VISUAL) |
#if defined(_M_IX86) |
__asm { |
__asm { |
push esi |
push esi |
push edi |
push edi |
Line 202 int subn(N n1,N n2,N *nr) |
|
Line 204 int subn(N n1,N n2,N *nr) |
|
} |
} |
#else |
#else |
asm volatile("\ |
asm volatile("\ |
|
pushl %%ebx;\ |
movl %1,%%esi;\ |
movl %1,%%esi;\ |
movl %2,%%edi;\ |
movl %2,%%edi;\ |
movl %3,%%ebx;\ |
movl %3,%%ebx;\ |
Line 219 int subn(N n1,N n2,N *nr) |
|
Line 222 int subn(N n1,N n2,N *nr) |
|
jnz Lstart_subn;\ |
jnz Lstart_subn;\ |
movl $0,%%eax;\ |
movl $0,%%eax;\ |
adcl %%eax,%%eax;\ |
adcl %%eax,%%eax;\ |
movl %%eax,%0"\ |
movl %%eax,%0;\ |
|
popl %%ebx"\ |
:"=m"(br)\ |
:"=m"(br)\ |
:"m"(m1),"m"(m2),"m"(mr),"m"(d2)\ |
:"m"(m1),"m"(m2),"m"(mr),"m"(d2)\ |
:"eax","ebx","ecx","edx","esi","edi"); |
:"eax","ecx","edx","esi","edi"); |
#endif |
#endif |
for ( i = d2, m1 += d2, mr += d2; (i < d1) && br; i++ ) { |
for ( i = d2, m1 += d2, mr += d2; (i < d1) && br; i++ ) { |
t = *m1++; |
t = *m1++; |
Line 257 void _addn(N n1,N n2,N nr) |
|
Line 261 void _addn(N n1,N n2,N nr) |
|
} |
} |
mr = BD(nr); |
mr = BD(nr); |
|
|
#if defined(VISUAL) |
#if defined(_M_IX86) |
__asm { |
__asm { |
push esi |
push esi |
push edi |
push edi |
Line 284 void _addn(N n1,N n2,N nr) |
|
Line 288 void _addn(N n1,N n2,N nr) |
|
} |
} |
#else |
#else |
asm volatile("\ |
asm volatile("\ |
|
pushl %%ebx;\ |
movl %1,%%esi;\ |
movl %1,%%esi;\ |
movl %2,%%edi;\ |
movl %2,%%edi;\ |
movl %3,%%ebx;\ |
movl %3,%%ebx;\ |
Line 301 void _addn(N n1,N n2,N nr) |
|
Line 306 void _addn(N n1,N n2,N nr) |
|
jnz Lstart__addn;\ |
jnz Lstart__addn;\ |
movl $0,%%eax;\ |
movl $0,%%eax;\ |
adcl %%eax,%%eax;\ |
adcl %%eax,%%eax;\ |
movl %%eax,%0"\ |
movl %%eax,%0;\ |
|
popl %%ebx"\ |
:"=m"(c)\ |
:"=m"(c)\ |
:"m"(m1),"m"(m2),"m"(mr),"m"(d2)\ |
:"m"(m1),"m"(m2),"m"(mr),"m"(d2)\ |
:"eax","ebx","ecx","edx","esi","edi"); |
:"eax","ecx","edx","esi","edi"); |
#endif |
#endif |
for ( i = d2, m1 += d2, mr += d2; (i < d1) && c ; i++ ) { |
for ( i = d2, m1 += d2, mr += d2; (i < d1) && c ; i++ ) { |
tmp = *m1++ + c; |
tmp = *m1++ + c; |
Line 360 int _subn(N n1,N n2,N nr) |
|
Line 366 int _subn(N n1,N n2,N nr) |
|
} |
} |
mr = BD(nr); |
mr = BD(nr); |
|
|
#if defined(VISUAL) |
#if defined(_M_IX86) |
__asm { |
__asm { |
push esi |
push esi |
push edi |
push edi |
Line 387 int _subn(N n1,N n2,N nr) |
|
Line 393 int _subn(N n1,N n2,N nr) |
|
} |
} |
#else |
#else |
asm volatile("\ |
asm volatile("\ |
|
pushl %%ebx;\ |
movl %1,%%esi;\ |
movl %1,%%esi;\ |
movl %2,%%edi;\ |
movl %2,%%edi;\ |
movl %3,%%ebx;\ |
movl %3,%%ebx;\ |
Line 404 int _subn(N n1,N n2,N nr) |
|
Line 411 int _subn(N n1,N n2,N nr) |
|
jnz Lstart__subn;\ |
jnz Lstart__subn;\ |
movl $0,%%eax;\ |
movl $0,%%eax;\ |
adcl %%eax,%%eax;\ |
adcl %%eax,%%eax;\ |
movl %%eax,%0"\ |
movl %%eax,%0;\ |
|
popl %%ebx"\ |
:"=m"(br)\ |
:"=m"(br)\ |
:"m"(m1),"m"(m2),"m"(mr),"m"(d2)\ |
:"m"(m1),"m"(m2),"m"(mr),"m"(d2)\ |
:"eax","ebx","ecx","edx","esi","edi"); |
:"eax","ecx","edx","esi","edi"); |
#endif |
#endif |
for ( i = d2, m1 += d2, mr += d2; (i < d1) && br; i++ ) { |
for ( i = d2, m1 += d2, mr += d2; (i < d1) && br; i++ ) { |
t = *m1++; |
t = *m1++; |
Line 669 void pwrn(N n,int e,N *nr) |
|
Line 677 void pwrn(N n,int e,N *nr) |
|
extern int igcd_algorithm; |
extern int igcd_algorithm; |
|
|
void gcdEuclidn(), gcdn_HMEXT(); |
void gcdEuclidn(), gcdn_HMEXT(); |
|
|
|
void lcmn(N n1,N n2,N *nr) |
|
{ |
|
N g,t; |
|
|
|
gcdn(n1,n2,&g); |
|
divsn(n1,g,&t); |
|
muln(t,n2,nr); |
|
} |
|
|
void gcdn(N n1,N n2,N *nr) |
void gcdn(N n1,N n2,N *nr) |
{ |
{ |