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; B r;
usz csz = arr_csz(x); usz csz = arr_csz(x);
u8 xl = arrTypeBitsLog(TY(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; usz q=(-j)%64; if (q) rp[j/64] = o>>q;
break; break;
} }
#define COMPRESS_BLOCK_PREP(T, PREP) \ #define COMPRESS_BLOCK_PREP(T, PREP) \
usz b = bsp_max; TALLOC(i16, buf, b); PREP; \ usz b = bsp_max; TALLOC(i16, buf, b); PREP; \
T* rp0=rp; \ 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); } \ else { rp=m_tyarrv(&r,W/8,wsum,xt); COMPRESS_BLOCK(i##W); } \
} \ } \
break; } break; }
#if SINGELI #if SINGELI
#define DO(W) \ #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))
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 3: DO(8) case 4: DO(16) case 5: DO(32) case 6: if (TI(x,elType)!=el_B) { DO(64) } // else follows
case 6: if (TI(x,elType)!=el_B) { #undef DO
DO(64)
} // else follows
#undef DO
#else #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 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); }) 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) \ #define BLOCK_OR_GROUPED(T) \
if (wsum>=wia/8 && groups_lt(wp,wia, wia/16)) r = compress_grouped(wp, x, wia, wsum, xt); \ 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); } 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 5: BLOCK_OR_GROUPED(i32) break;
case 6: case 6:
if (TI(x,elType)!=el_B) { BLOCK_OR_GROUPED(u64) } if (TI(x,elType)!=el_B) { BLOCK_OR_GROUPED(u64) } // else follows
#undef BLOCK_OR_GROUPED #undef BLOCK_OR_GROUPED
#endif #endif
#undef WITH_SPARSE #undef WITH_SPARSE
else { else {
B xf = getFillR(x); 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); ur xr = RNK(x);
if (xr > 1) { if (xr > 1) {
Arr* ra=a(r); SPRNK(ra,xr); a(r)->ia*= arr_csz(x);
usz* sh = ra->sh = m_shArr(xr)->a; usz* sh = arr_shAlloc(a(r), xr);
sh[0] = PIA(ra); ra->ia *= arr_csz(x); sh[0] = wsum;
shcpy(sh+1, SH(x)+1, xr-1); shcpy(sh+1, SH(x)+1, xr-1);
} }
return r; return r;
@ -818,10 +818,10 @@ B slash_c2(B t, B w, B x) {
atmW_maybesh:; atmW_maybesh:;
if (xr > 1) { if (xr > 1) {
atmW_setsh:; 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; rsh[0] = s;
shcpy(rsh+1, SH(x)+1, xr-1); 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; goto decX_ret;
} }