From f39ca95c58e9270c690f3b3a8706b8654904045e Mon Sep 17 00:00:00 2001 From: dzaima Date: Sat, 4 Feb 2023 17:16:01 +0200 Subject: [PATCH] =?UTF-8?q?maybe=20slightly=20better=20bit=E2=86=92i8?= =?UTF-8?q?=E2=86=92bit=20heuristic?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit the more proper thing is to pad cells to the nearest power-of-two byte size anyway --- src/builtins/select.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/builtins/select.c b/src/builtins/select.c index 589980b9..bdeef5e2 100644 --- a/src/builtins/select.c +++ b/src/builtins/select.c @@ -161,12 +161,13 @@ B select_c2(B t, B w, B x) { B xf = getFillQ(x); usz xn = *SH(x); if (xn==0) goto base; - usz ria = wia * arr_csz(x); + usz csz = arr_csz(x); + u8 xl = cellWidthLog(x); + usz ria = wia * csz; usz xia = IA(x); u8 xe = TI(x,elType); u8 we = TI(w,elType); - u8 xl = cellWidthLog(x); #if SINGELI_X86_64 @@ -205,7 +206,7 @@ B select_c2(B t, B w, B x) { #define BOOL_SPECIAL(W) #endif - if (!BOOL_USE_SIMD && xe==el_bit && wia>=256 && xl<3 && wia/4>=xia && we!=el_bit) { + if (!BOOL_USE_SIMD && xe==el_bit && wia>=256 && we!=el_bit && ((csz&7)!=0) && (xl==0? wia/4>=xia : wia>=xia/4 && csz<40)) { return taga(cpyBitArr(select_c2(m_f64(0), w, taga(cpyI8Arr(x))))); }