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