diff --git a/src/builtins/slash.c b/src/builtins/slash.c index 9374d42d..55319646 100644 --- a/src/builtins/slash.c +++ b/src/builtins/slash.c @@ -713,6 +713,34 @@ B slash_c2(B t, B w, B x) { if (xl == 0) { u64* xp = bitarr_ptr(x); u64* rp; r = m_bitarrv(&rp, s); + #if __BMI2__ + if (wv <= 52) { + u64 m = (u64)-1 / (((u64)1<>= (64/wv); + if ((j&(wv-1))==0) xw = xp[++i]; + u64 rw = _pdep_u64(xw, m); + rp[j] = (rw<> (xi%8); + u64 ex = (xw&mt)<>o|(xw&1)); + o += q; + bool oo = o>=wv; xi+=d+oo; o-=wv&-oo; + } + } + } else + #endif if (wv <= 256) { BOOL_REP_XOR_SCAN(wv) } else { BOOL_REP_OVER(wv, xlen) } goto decX_ret;