projects
/
u
/
mdw
/
catacomb
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix various assumptions about mpw sizes.
[u/mdw/catacomb]
/
mpreduce.c
diff --git
a/mpreduce.c
b/mpreduce.c
index
1c39564
..
bc41f60
100644
(file)
--- a/
mpreduce.c
+++ b/
mpreduce.c
@@
-60,7
+60,7
@@
int mpreduce_create(mpreduce *r, mp *p)
instr_v iv = DA_INIT;
unsigned long d, i;
unsigned op;
instr_v iv = DA_INIT;
unsigned long d, i;
unsigned op;
- size_t w, b;
+ size_t w, b
, bb
;
/* --- Fill in the easy stuff --- */
/* --- Fill in the easy stuff --- */
@@
-105,6
+105,7
@@
int mpreduce_create(mpreduce *r, mp *p)
st = Z;
#endif
st = Z;
#endif
+ bb = MPW_BITS - (d + 1)%MPW_BITS;
for (i = 0, mp_scan(&sc, p); i < d && mp_step(&sc); i++) {
switch (st | mp_bit(&sc)) {
case Z | 1: st = Z1; break;
for (i = 0, mp_scan(&sc, p); i < d && mp_step(&sc); i++) {
switch (st | mp_bit(&sc)) {
case Z | 1: st = Z1; break;
@@
-115,7
+116,7
@@
int mpreduce_create(mpreduce *r, mp *p)
case X0 | 0: st = Z; op = MPRI_SUB; goto instr;
instr:
w = (d - i)/MPW_BITS + 1;
case X0 | 0: st = Z; op = MPRI_SUB; goto instr;
instr:
w = (d - i)/MPW_BITS + 1;
- b = (
MPW_BITS + i - d - 1
)%MPW_BITS;
+ b = (
bb + i
)%MPW_BITS;
INSTR(op | !!b, w, b);
}
}
INSTR(op | !!b, w, b);
}
}
@@
-154,6
+155,10
@@
int mpreduce_create(mpreduce *r, mp *p)
}
}
DA_DESTROY(&iv);
}
}
DA_DESTROY(&iv);
+
+#ifdef DEBUG
+ mpreduce_dump(r, stdout);
+#endif
return (0);
}
return (0);
}