slash.c cleanup
This commit is contained in:
parent
9973ab1a2e
commit
5ab49ab146
@ -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;
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user