use direct bitwiden & bitnarrow in select-rows
This commit is contained in:
parent
d95a792230
commit
2ca2c52c16
@ -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;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user