From 1e3089ceaa7ac3327c60f372a78c5914dea3dbc9 Mon Sep 17 00:00:00 2001 From: dzaima Date: Tue, 20 Sep 2022 22:29:32 +0300 Subject: [PATCH] =?UTF-8?q?fast=20=E2=8D=89=F0=9D=95=A9=20when=202=3D?= =?UTF-8?q?=E2=89=A0=F0=9D=95=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/builtins/sfns.c | 80 ++++++++++++++++++++++++++++++++------------- src/core/arrFns.h | 2 ++ src/core/tyarr.c | 6 ++++ 3 files changed, 66 insertions(+), 22 deletions(-) diff --git a/src/builtins/sfns.c b/src/builtins/sfns.c index af41cbb0..1d0b6d0e 100644 --- a/src/builtins/sfns.c +++ b/src/builtins/sfns.c @@ -874,6 +874,9 @@ B reverse_c2(B t, B w, B x) { return withFill(mut_fcd(r, x), xf); } +#ifdef __BMI2__ +#include +#endif extern B rt_transp; B transp_c1(B t, B x) { @@ -889,29 +892,62 @@ B transp_c1(B t, B x) { Arr* r; usz xi = 0; u8 xe = TI(x,elType); - switch(xe) { default: UD; - case el_bit: x = taga(cpyI8Arr(x)); xsh=SH(x); xe=el_i8; // fallthough; lazy; TODO squeeze - case el_i8: case el_c8: { u8* xp=tyany_ptr(x); u8* rp = m_tyarrp(&r,1,ia,el2t(xe)); for(usz y=0;ya; } // TODO extract this to an inline function - - HArr_p p = m_harrUp(ia); - for(usz y=0;ya; } + B* x0 = xp; B* x1 = x0+w; + HArr_p rp = m_harrUp(ia); + for (usz i=0; ia; + for (usz i=0; ia; } // TODO extract this to an inline function + + HArr_p p = m_harrUp(ia); + for(usz y=0;y