diff --git a/src/builtins/slash.c b/src/builtins/slash.c index 4518689a..4d9baa95 100644 --- a/src/builtins/slash.c +++ b/src/builtins/slash.c @@ -104,6 +104,11 @@ #endif #endif +#define WHERE_SPARSE(X,R,S) do { \ + for (usz i=0, j=0; j128 && s < xia/8+(xia<=32768?xia/4:0)) { + if (xia>128 && xia<=32768 && s < xia/16) { #else if (xia<=128 || s < xia/2+(xia<=32768?xia/4:0)) { #endif usz q=xia%64; if (q) xp[xia/64] &= ((u64)1<= b/8+b/16) { + bmipopc_1slash16(xp, buf, b); + for (usz j=0; j= b/256) { + for (usz j=0; j>=24; + p=(u32)u&(top-1); rq[j]+=(3*top)|p; j+=POPC(p); u>>=24; + p=(u32)u ; rq[j]+=(3*top)|p; j+=POPC(p); + } + u64 t=((u64)i<<21)-2*top; + for (usz j=0; j>24) + CTZ((u32)t); + t &= t-1; + } + } else { + for (usz ii=i/64, j=0; j