vars.am, math/Makefile.am: Tweak `silent-rules' machinery.
[catacomb] / math / scaf.c
index 778e5e3..2f88a30 100644 (file)
 
 #include "scaf.h"
 
+/*----- Debugging utilties ------------------------------------------------*/
+
+#ifdef SCAF_DEBUG
+
+#include <stdio.h>
+
+#include "mp.h"
+#include "mpint.h"
+#include "mptext.h"
+
+static void scaf_dump(const char *what, const scaf_piece *x,
+                     size_t npiece, size_t piecewd)
+{
+  mp *y = MP_ZERO, *t = MP_NEW;
+  size_t i;
+  unsigned o = 0;
+
+  for (i = 0; i < npiece; i++) {
+    t = mp_fromuint64(t, x[i]);
+    t = mp_lsl(t, t, o);
+    y = mp_add(y, y, t);
+    o += piecewd;
+  }
+  printf(";; %s", what); MP_PRINT("", y); putchar('\n');
+  mp_drop(y); mp_drop(t);
+}
+
+static void scaf_dumpdbl(const char *what, const scaf_dblpiece *x,
+                     size_t npiece, size_t piecewd)
+{
+  mp *y = MP_ZERO, *t = MP_NEW;
+  size_t i;
+  unsigned o = 0;
+
+  for (i = 0; i < npiece; i++) {
+    t = mp_fromuint64(t, x[i]);
+    t = mp_lsl(t, t, o);
+    y = mp_add(y, y, t);
+    o += piecewd;
+  }
+  printf(";; %s", what); MP_PRINT("", y); putchar('\n');
+  mp_drop(y); mp_drop(t);
+}
+
+#endif
+
 /*----- Main code ---------------------------------------------------------*/
 
 /* --- @scaf_load@ --- *
@@ -269,7 +315,7 @@ void scaf_reduce(scaf_piece *z, const scaf_dblpiece *x,
       u += z[j] + (l[j] ^ m);
       t[j] = u&m; u >>= piecewd;
     }
-    for (j = 0, u = -u; j < npiece; j++) z[i] = (t[i]&u) | (z[i]&~u);
+    for (j = 0, u = -u; j < npiece; j++) z[j] = (t[j]&u) | (z[j]&~u);
   }
 }