From c05aef8974161f46281170232fbe604f3fe2a68d Mon Sep 17 00:00:00 2001
From: Mathieu Faverge <mathieu.faverge@inria.fr>
Date: Fri, 22 Nov 2019 21:48:48 +0100
Subject: [PATCH] Simplify the code fro fibonacci 1p

---
 src/high_fibonacci.c | 52 +++++++++++---------------------------------
 1 file changed, 13 insertions(+), 39 deletions(-)

diff --git a/src/high_fibonacci.c b/src/high_fibonacci.c
index f1a4425..d17f456 100644
--- a/src/high_fibonacci.c
+++ b/src/high_fibonacci.c
@@ -122,52 +122,26 @@ void hqr_high_greedy1p_init(hqr_subpiv_t *arg){
     ipiv = arg->ipiv;
 
     {
-        int minMN = 1;
-        int j, k, height, start, end, firstk = 0;
-        int *nT = (int*)calloc(minMN, sizeof(int));
-        int *nZ = (int*)calloc(minMN, sizeof(int));
-
-        nT[0] = mt;
-        nZ[0] = libhqr_imax( mt - p, 0 );
-        for(k=1; k<minMN; k++) {
-            height = libhqr_imax(mt-k-p, 0);
-            nT[k] = height;
-            nZ[k] = height;
-        }
-
-        k = 0;
-        while ( (!( ( nT[minMN-1] == mt - (minMN - 1) ) &&
-                    ( nZ[minMN-1]+1 == nT[minMN-1] ) ) )
-                && ( firstk < minMN ) ) {
-            height = (nT[k] - nZ[k]) / 2;
+        int j, height, start, end;
+        int nT, nZ;
+
+        nT = mt;
+        nZ = libhqr_imax( mt - p, 0 );
+        while ( !( ( nT == mt ) &&
+                   ( nT == nZ+1 ) ) )
+        {
+            height = (nT - nZ) / 2;
             if ( height == 0 ) {
-                while ( (firstk < minMN) &&
-                        ( nT[firstk] == mt - firstk ) &&
-                        ( nZ[firstk]+1 == nT[firstk] ) ) {
-                    firstk++;
-                }
-                k = firstk;
-                continue;
+                break;
             }
 
-            start = mt - nZ[k] - 1;
+            start = mt - nZ - 1;
             end = start - height;
-            nZ[k] += height;
-            if (k < minMN-1) {
-                nT[k+1] = nZ[k];
-            }
+            nZ += height;
 
             for( j=start; j > end; j-- ) {
-                ipiv[ k*p + j-k ] = (j - height);
-            }
-
-            k++;
-            if (k > minMN-1) {
-                k = firstk;
+                ipiv[ j ] = (j - height);
             }
         }
-
-        free(nT);
-        free(nZ);
     }
 }
-- 
GitLab