diff --git a/src/builtins/sfns.c b/src/builtins/sfns.c index 1c516f4d..70e72bc8 100644 --- a/src/builtins/sfns.c +++ b/src/builtins/sfns.c @@ -443,10 +443,26 @@ B slash_c1(B t, B x) { B r; u8 xe = TI(x,elType); #if SINGELI && defined(__BMI2__) - if (xia<=32768 && xe==el_bit) { + if (xe==el_bit) { u64* xp = bitarr_ptr(x); - if (xia<=128) { i8* rp = m_tyarrvO(&r, 1, s, t_i8arr , 8); bmipopc_1slash8 (xp, rp, xia); } - else { i16* rp = m_tyarrvO(&r, 2, s, t_i16arr, 16); bmipopc_1slash16(xp, rp, xia); } + if (xia<=128) { i8* rp = m_tyarrvO(&r, 1, s, t_i8arr , 8); bmipopc_1slash8 (xp, rp, xia); } + else if (xia<=32768) { i16* rp = m_tyarrvO(&r, 2, s, t_i16arr, 16); bmipopc_1slash16(xp, rp, xia); } + else { + usz b = 1<<12; + i32* rp; r = m_i32arrv(&rp, s); + TALLOC(i16, buf, b); + i32* rq=rp; usz i=0; + for (; i+b