From 73123f5bdebbd10f54377afc31321a95983ad2ec Mon Sep 17 00:00:00 2001 From: dzaima Date: Thu, 6 Jun 2024 23:21:35 +0300 Subject: [PATCH] =?UTF-8?q?even=20faster=20=C2=BB=E2=8E=891=20&=20=C2=AB?= =?UTF-8?q?=E2=8E=891=20for=20narrow=20bitarr=20=F0=9D=95=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/builtins/cells.c | 37 +++++++++++++++++++++++++++---------- test/cases/fuzz.bqn | 11 +++++++++++ 2 files changed, 38 insertions(+), 10 deletions(-) diff --git a/src/builtins/cells.c b/src/builtins/cells.c index 25a8d1c9..c27bc9b3 100644 --- a/src/builtins/cells.c +++ b/src/builtins/cells.c @@ -225,16 +225,31 @@ static NOINLINE B select_cells(usz n, B x, usz cam, usz k, bool leaf) { // n {le return taga(ra); } -static void set_column_typed(void* rp, B v, u8 e, ux p, ux stride, ux n) { +static void set_column_typed(void* rp, B v, u8 e, ux p, ux stride, ux n) { // may write to all elements 0 ≤ i < stride×n, and after that too for masked stores + assert(p < stride); switch(e) { default: UD; - case el_bit: NOVECTORIZE for (usz i=0; i64) goto bit_special; + NOVECTORIZE for (usz i=0; ia, f, e, p, csz, cam); + } else { + set_column_typed(r->a, f, e, p, csz, cam); + } return mut_fcd(r, x); } diff --git a/test/cases/fuzz.bqn b/test/cases/fuzz.bqn index 84004836..a25675f0 100644 --- a/test/cases/fuzz.bqn +++ b/test/cases/fuzz.bqn @@ -11,3 +11,14 @@ # ∾𝕩 not getting garbage ≠{𝕊: ! ∧´1=⥊∾⎊1 ⥊⟜1¨ (4•rand.Range 3) •rand.Range¨ 4}¨↕10000 ) + +( + # bitarr »˘ / «˘ + _test ← {𝔽_𝕣𝕩: + a←(1+2•rand.Range 100)•rand.Range 2 + v←•rand.Range 2 + v‿a ! (v 𝔽○•internal.Keep˘ a) ≡ v 𝔽˘ a + } + » _test¨ ↕10000 + « _test¨ ↕10000 +)