X-Git-Url: https://git.distorted.org.uk/u/mdw/catacomb/blobdiff_plain/ce541a0ec0b78847792b0a81b829bc76f9c5efcb..c29970a7717261e63ffaabb3c67381f13c5dbca5:/mpreduce.c?ds=sidebyside 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); }