don't use IA/SH macros for assigning

This commit is contained in:
dzaima 2022-11-18 15:04:31 +02:00
parent 99563a3391
commit 6ff521b200

View File

@ -286,12 +286,12 @@ static B compress_grouped(u64* wp, B x, usz wia, usz wsum, u8 xt) {
if (is_B) { if (is_B) {
for (usz i = 0; i < wsum*csz; i++) inc(((B*)rp)[i]); for (usz i = 0; i < wsum*csz; i++) inc(((B*)rp)[i]);
r = withFill(rh.b, getFillQ(x)); r = withFill(rh.b, getFillQ(x));
IA(r) = wsum; // Shape-setting code at end of compress expects this a(r)->ia = wsum; // Shape-setting code at end of compress expects this
} }
} else { // Bits } else { // Bits
usz width = csz; usz width = csz;
u64* xp = tyany_ptr(x); u64* xp = tyany_ptr(x);
u64* rp; r = m_bitarrv(&rp,wsum*width); IA(r) = wsum; u64* rp; r = m_bitarrv(&rp,wsum*width); a(r)->ia = wsum;
COMPRESS_GROUP(bit_cpy) COMPRESS_GROUP(bit_cpy)
} }
return r; return r;
@ -588,8 +588,8 @@ 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); Arr* ra=a(r); SPRNK(ra,xr);
usz* sh = PSH(ra) = m_shArr(xr)->a; usz* sh = ra->sh = m_shArr(xr)->a;
sh[0] = PIA(ra); PIA(ra) *= arr_csz(x); sh[0] = PIA(ra); ra->ia *= arr_csz(x);
shcpy(sh+1, SH(x)+1, xr-1); shcpy(sh+1, SH(x)+1, xr-1);
} }
return r; return r;
@ -781,7 +781,7 @@ B slash_c2(B t, B w, B x) {
if (xl == 0) { if (xl == 0) {
u64* xp = bitarr_ptr(x); u64* xp = bitarr_ptr(x);
u64* rp; r = m_bitarrv(&rp, s); if (rsh) { SPRNK(a(r),xr); SH(r) = rsh; } u64* rp; r = m_bitarrv(&rp, s); if (rsh) { SPRNK(a(r),xr); a(r)->sh = rsh; }
if (s/1024 <= wia) { if (s/1024 <= wia) {
#define SPARSE_REP(T) T* wp=T##any_ptr(w); BOOL_REP_XOR_SCAN(wp[j]) #define SPARSE_REP(T) T* wp=T##any_ptr(w); BOOL_REP_XOR_SCAN(wp[j])
if (we==el_i8 ) { SPARSE_REP(i8 ); } if (we==el_i8 ) { SPARSE_REP(i8 ); }
@ -796,7 +796,7 @@ B slash_c2(B t, B w, B x) {
} else { } else {
u8 xk = xl-3; u8 xk = xl-3;
void* rv = m_tyarrv(&r, 1<<xk, s, xt); void* rv = m_tyarrv(&r, 1<<xk, s, xt);
if (rsh) { Arr* ra=a(r); SPRNK(ra,xr); PSH(ra) = rsh; PIA(ra) = s*arr_csz(x); } if (rsh) { Arr* ra=a(r); SPRNK(ra,xr); ra->sh = rsh; ra->ia = s*arr_csz(x); }
void* xv = tyany_ptr(x); void* xv = tyany_ptr(x);
if ((xk<3? s/64 : s/32) <= wia) { // Sparse case: use both types if ((xk<3? s/64 : s/32) <= wia) { // Sparse case: use both types
#define CASE(L,XT) case L: { REP_BY_SCAN(XT, wp[j]) break; } #define CASE(L,XT) case L: { REP_BY_SCAN(XT, wp[j]) break; }
@ -894,7 +894,7 @@ B slash_c2(B t, B w, B x) {
usz* rsh = m_shArr(xr)->a; usz* rsh = m_shArr(xr)->a;
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); PSH(ra)=rsh; PIA(ra)=s*arr_csz(x); Arr* ra=a(r); SPRNK(ra,xr); ra->sh=rsh; ra->ia=s*arr_csz(x);
} }
goto decX_ret; goto decX_ret;
} }