slash.c cleanup

This commit is contained in:
dzaima 2024-04-03 04:04:52 +03:00
parent 9973ab1a2e
commit 5ab49ab146

View File

@ -175,7 +175,7 @@ static void where_block_u16(u64* src, u16* dst, usz len, usz sum) {
}
}
static B compress_grouped(u64* wp, B x, usz wia, usz wsum, u8 xt) {
static B compress_grouped(u64* wp, B x, usz wia, usz wsum, u8 xt) { // expected to return a refcount-1 array (at least when rank≥1)
B r;
usz csz = arr_csz(x);
u8 xl = arrTypeBitsLog(TY(x));
@ -452,6 +452,7 @@ static B compress(B w, B x, usz wia, u8 xl, u8 xt) {
usz q=(-j)%64; if (q) rp[j/64] = o>>q;
break;
}
#define COMPRESS_BLOCK_PREP(T, PREP) \
usz b = bsp_max; TALLOC(i16, buf, b); PREP; \
T* rp0=rp; \
@ -476,25 +477,24 @@ static B compress(B w, B x, usz wia, u8 xl, u8 xt) {
else { rp=m_tyarrv(&r,W/8,wsum,xt); COMPRESS_BLOCK(i##W); } \
} \
break; }
#if SINGELI
#define DO(W) \
WITH_SPARSE(W, si_thresh_2slash##W, rp=m_tyarrv(&r,W/8,wsum,xt); si_2slash##W(wp, xp, rp, wia, wsum))
case 3: DO(8) case 4: DO(16) case 5: DO(32)
case 6: if (TI(x,elType)!=el_B) {
DO(64)
} // else follows
#undef DO
#define DO(W) WITH_SPARSE(W, si_thresh_2slash##W, rp=m_tyarrv(&r,W/8,wsum,xt); si_2slash##W(wp, xp, rp, wia, wsum))
case 3: DO(8) case 4: DO(16) case 5: DO(32)
case 6: if (TI(x,elType)!=el_B) { DO(64) } // else follows
#undef DO
#else
case 3: WITH_SPARSE( 8, 2, rp=m_tyarrv(&r,1,wsum,xt); for (usz i=0; i<wia; i++) { *rp = xp[i]; rp+= bitp_get(wp,i); })
case 4: WITH_SPARSE(16, 2, rp=m_tyarrv(&r,2,wsum,xt); for (usz i=0; i<wia; i++) { *rp = xp[i]; rp+= bitp_get(wp,i); })
#define BLOCK_OR_GROUPED(T) \
if (wsum>=wia/8 && groups_lt(wp,wia, wia/16)) r = compress_grouped(wp, x, wia, wsum, xt); \
else { T* xp=tyany_ptr(x); T* rp=m_tyarrv(&r,sizeof(T),wsum,xt); COMPRESS_BLOCK(T); }
case 5: BLOCK_OR_GROUPED(i32) break;
case 6:
if (TI(x,elType)!=el_B) { BLOCK_OR_GROUPED(u64) }
#undef BLOCK_OR_GROUPED
case 3: WITH_SPARSE( 8, 2, rp=m_tyarrv(&r,1,wsum,xt); for (usz i=0; i<wia; i++) { *rp = xp[i]; rp+= bitp_get(wp,i); })
case 4: WITH_SPARSE(16, 2, rp=m_tyarrv(&r,2,wsum,xt); for (usz i=0; i<wia; i++) { *rp = xp[i]; rp+= bitp_get(wp,i); })
#define BLOCK_OR_GROUPED(T) \
if (wsum>=wia/8 && groups_lt(wp,wia, wia/16)) r = compress_grouped(wp, x, wia, wsum, xt); \
else { T* xp=tyany_ptr(x); T* rp=m_tyarrv(&r,sizeof(T),wsum,xt); COMPRESS_BLOCK(T); }
case 5: BLOCK_OR_GROUPED(i32) break;
case 6:
if (TI(x,elType)!=el_B) { BLOCK_OR_GROUPED(u64) } // else follows
#undef BLOCK_OR_GROUPED
#endif
#undef WITH_SPARSE
else {
B xf = getFillR(x);
@ -516,9 +516,9 @@ static B compress(B w, B x, usz wia, u8 xl, u8 xt) {
}
ur xr = RNK(x);
if (xr > 1) {
Arr* ra=a(r); SPRNK(ra,xr);
usz* sh = ra->sh = m_shArr(xr)->a;
sh[0] = PIA(ra); ra->ia *= arr_csz(x);
a(r)->ia*= arr_csz(x);
usz* sh = arr_shAlloc(a(r), xr);
sh[0] = wsum;
shcpy(sh+1, SH(x)+1, xr-1);
}
return r;
@ -818,10 +818,10 @@ B slash_c2(B t, B w, B x) {
atmW_maybesh:;
if (xr > 1) {
atmW_setsh:;
usz* rsh = m_shArr(xr)->a;
a(r)->ia = s*arr_csz(x);
usz* rsh = arr_shAlloc(a(r), xr);
rsh[0] = s;
shcpy(rsh+1, SH(x)+1, xr-1);
Arr* ra=a(r); SPRNK(ra,xr); ra->sh=rsh; ra->ia=s*arr_csz(x);
}
goto decX_ret;
}