+ /* Handle multiple whole blocks. */ \
+ if (!d) \
+ BLKC_ADD(PRE, ctx->c, plan.from_input/PRE##_BLKSZ); \
+ else if (!s) while (plan.from_input) { \
+ pre##_eblk(&ctx->ctx, ctx->c, t); BLKC_STEP(PRE, ctx->c); \
+ BLKC_STORE(PRE, d, t); d += PRE##_BLKSZ; \
+ plan.from_input -= PRE##_BLKSZ; \
+ } else while (plan.from_input) { \
+ pre##_eblk(&ctx->ctx, ctx->c, t); BLKC_STEP(PRE, ctx->c); \
+ BLKC_XLOAD(PRE, t, s); s += PRE##_BLKSZ; \
+ BLKC_STORE(PRE, d, t); d += PRE##_BLKSZ; \
+ plan.from_input -= PRE##_BLKSZ; \