Faster trailing zero trim, and apply it to all cases in compress()
This commit is contained in:
parent
2baa88ad31
commit
c796670549
@ -264,9 +264,17 @@ static B where(B x, usz xia, u64 s) {
|
|||||||
static B compress(B w, B x, usz wia, B xf) {
|
static B compress(B w, B x, usz wia, B xf) {
|
||||||
B r;
|
B r;
|
||||||
u64* wp = bitarr_ptr(w);
|
u64* wp = bitarr_ptr(w);
|
||||||
|
u64 we = 0;
|
||||||
|
usz ie = wia/64;
|
||||||
|
usz q=wia%64; if (q) we = wp[ie] &= ((u64)1<<q) - 1;
|
||||||
|
while (!we) {
|
||||||
|
if (RARE(ie==0)) { return q_N(xf)? emptyHVec() : isF64(xf)? emptyIVec() : isC32(xf)? emptyCVec() : m_emptyFVec(xf); }
|
||||||
|
we = wp[--ie];
|
||||||
|
}
|
||||||
|
wia = 64*(ie+1) - CLZ(we);
|
||||||
|
usz wsum = bit_sum(wp, wia);
|
||||||
u8 xe = TI(x,elType);
|
u8 xe = TI(x,elType);
|
||||||
#ifdef __BMI2__
|
#ifdef __BMI2__
|
||||||
usz wsum = bit_sum(wp, wia);
|
|
||||||
switch(xe) {
|
switch(xe) {
|
||||||
case el_bit: {
|
case el_bit: {
|
||||||
u64* xp = bitarr_ptr(x); u64* rp; r = m_bitarrv(&rp,wsum+128); a(r)->ia = wsum;
|
u64* xp = bitarr_ptr(x); u64* rp; r = m_bitarrv(&rp,wsum+128); a(r)->ia = wsum;
|
||||||
@ -294,11 +302,6 @@ static B compress(B w, B x, usz wia, B xf) {
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
while (wia>0 && !bitp_get(wp,wia-1)) wia--;
|
|
||||||
#ifndef __BMI2__
|
|
||||||
usz wsum = bit_sum(wp, wia);
|
|
||||||
#endif
|
|
||||||
if (wsum==0) { return q_N(xf)? emptyHVec() : isF64(xf)? emptyIVec() : isC32(xf)? emptyCVec() : m_emptyFVec(xf); }
|
|
||||||
switch(xe) { default: UD;
|
switch(xe) { default: UD;
|
||||||
|
|
||||||
#if !SINGELI
|
#if !SINGELI
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user