X-Git-Url: https://git.distorted.org.uk/u/mdw/catacomb/blobdiff_plain/cd9aae843a443d75998c7123f953beb00fc2185a..3485fc41bcb8b082815b7d5e48a080c1fcfbab38:/mpreduce.c diff --git a/mpreduce.c b/mpreduce.c index 1c39564..bc41f60 100644 --- 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; - size_t w, b; + size_t w, b, bb; /* --- Fill in the easy stuff --- */ @@ -105,6 +105,7 @@ int mpreduce_create(mpreduce *r, mp *p) 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; @@ -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; - b = (MPW_BITS + i - d - 1)%MPW_BITS; + b = (bb + i)%MPW_BITS; INSTR(op | !!b, w, b); } } @@ -154,6 +155,10 @@ int mpreduce_create(mpreduce *r, mp *p) } } DA_DESTROY(&iv); + +#ifdef DEBUG + mpreduce_dump(r, stdout); +#endif return (0); }