use direct bitwiden & bitnarrow in select-rows

This commit is contained in:
dzaima 2024-08-14 05:00:31 +03:00
parent d95a792230
commit 2ca2c52c16

View File

@ -705,13 +705,12 @@ B select_rows_direct(B x, ux csz, ux cam, void* inds, ux indn, u8 ie) { // ⥊ (
ux rcam = (cam + (1<<exp)-1)>>exp; ux rcam = (cam + (1<<exp)-1)>>exp;
if (rcsz!=8) { if (rcsz!=8) {
Arr* xa = customizeShape(x); u64* xp2;
usz* xsh = arr_shAlloc(xa, 2); B x2 = m_bitarrv(&xp2, 8*cam);
xsh[0] = rcam; bitwiden(xp2, 8, xp, rcsz, cam);
xsh[1] = rcsz; decG(x);
// leave ia unchanged, desynchronizing from product of shape; TODO really really shouldn't do that, and instead pass cam & csz directly to bit widener x = x2;
x = widenBitArr(taga(xa), 1); xp = (void*) xp2;
xp = tyany_ptr(x);
SELECT_ROWS_PRINTF("8bit: widen %zu‿%zu → ⟨%zu,%zu→8⟩\n", cam, csz, rcam, rcsz); SELECT_ROWS_PRINTF("8bit: widen %zu‿%zu → ⟨%zu,%zu→8⟩\n", cam, csz, rcam, rcsz);
} }
@ -728,20 +727,17 @@ B select_rows_direct(B x, ux csz, ux cam, void* inds, ux indn, u8 ie) { // ⥊ (
if (rindn!=8) { if (rindn!=8) {
SELECT_ROWS_PRINTF("8bit: narrow %zu → %zu\n", rcsz, csz); SELECT_ROWS_PRINTF("8bit: narrow %zu → %zu\n", rcsz, csz);
usz* rsh = arr_shAlloc(a(r), 2);
rsh[0] = rcam;
rsh[1] = 8;
usz tgt = rindn; u64* rp2;
r = narrowWidenedBitArr(r, 1, 1, &tgt); // TODO this assumes trailing zeroes B r2 = m_bitarrv(&rp2, 8*rcam);
bitnarrow(rp2, rindn, rp, 8, rcam);
tyarrv_free(r);
r = r2;
Arr* ra = arr_shVec(customizeShape(r)); ux ria1 = IA(r);
r = taga(ra);
ux ria1 = ra->ia;
assert(ria <= ria1); assert(ria <= ria1);
FINISH_OVERALLOC(ra, offsetof(TyArr,a) + (ria+7)/8, offsetof(TyArr,a) + (ria1+7)/8); FINISH_OVERALLOC(a(r), offsetof(TyArr,a) + (ria+7)/8, offsetof(TyArr,a) + (ria1+7)/8);
ra->ia = ria; a(r)->ia = ria;
} }
goto decG_ret; goto decG_ret;