You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gentoo-overlay/sci-mathematics/pari/files/pari-2.7.0-slow-discriminan...

55 lines
2.0 KiB

diff -ru src/src/basemath/alglin1.c b/src/basemath/alglin1.c
--- src/src/basemath/alglin1.c 2014-01-29 18:00:27.000000000 +0100
+++ b/src/basemath/alglin1.c 2014-02-09 01:54:37.676725196 +0100
@@ -247,6 +247,7 @@
a = RgM_shallowcopy(a);
for (i=1; i<nbco; i++)
{
+ int garbage = 0; /* Only gerepile() once per loop iteration */
for(k=i; k<=nbco; k++)
{
gcoeff(a,k,i) = ff->red(E,gcoeff(a,k,i));
@@ -271,7 +272,7 @@
for (j=i+1; j<=nbco; j++)
{
gcoeff(a,j,k) = ff->add(E, gcoeff(a,j,k), ff->mul(E,m,gcoeff(a,j,i)));
- if (low_stack(lim, stack_lim(av,1)))
+ if (low_stack(lim, stack_lim(av,1)) && (garbage++ == 0))
{
if(DEBUGMEM>1) pari_warn(warnmem,"det. col = %ld",i);
gerepileall(av,4, &a,&x,&q,&m);
@@ -3721,6 +3722,7 @@
a = RgM_shallowcopy(a);
for (i=1; i<nbco; i++)
{
+ int garbage = 0; /* Only gerepile() once per loop iteration */
k = pivot(a, data, i, NULL);
if (k > nbco) return gerepilecopy(av, gcoeff(a,i,i));
if (k != i)
@@ -3740,7 +3742,7 @@
for (j=i+1; j<=nbco; j++)
{
gcoeff(a,j,k) = gsub(gcoeff(a,j,k), gmul(m,gcoeff(a,j,i)));
- if (low_stack(lim, stack_lim(av,3)))
+ if (low_stack(lim, stack_lim(av,3)) && (garbage++ == 0))
{
if(DEBUGMEM>1) pari_warn(warnmem,"det. col = %ld",i);
gerepileall(av,2, &a,&x);
@@ -3791,6 +3793,7 @@
{
GEN ci, ck, m;
int diveuc = (gequal1(pprec)==0);
+ int garbage = 0; /* Only gerepile() once per loop iteration */
p = gcoeff(a,i,i);
if (gequal0(p))
@@ -3827,7 +3830,7 @@
GEN p1 = gsub(gmul(p,gel(ck,j)), gmul(m,gel(ci,j)));
if (diveuc) p1 = mydiv(p1,pprec);
gel(ck,j) = gerepileupto(av2, p1);
- if (low_stack(lim,stack_lim(av,2)))
+ if (low_stack(lim,stack_lim(av,2)) && (garbage++ == 0))
{
if(DEBUGMEM>1) pari_warn(warnmem,"det. col = %ld",i);
gerepileall(av,2, &a,&pprec);