Blocked 4-byte ⍋bool and ⍒bool with Singeli
This commit is contained in:
parent
1647e98fd2
commit
cd16c8a1c7
@ -444,12 +444,27 @@ B grade_bool(B x, usz xia, bool up) {
|
|||||||
if (xia <= 128) { BMI_GRADE(8) } else { BMI_GRADE(16) }
|
if (xia <= 128) { BMI_GRADE(8) } else { BMI_GRADE(16) }
|
||||||
#undef BMI_GRADE
|
#undef BMI_GRADE
|
||||||
decG(notx);
|
decG(notx);
|
||||||
|
} else if (xia <= 1ull<<31) {
|
||||||
|
i32* rp0; r = m_i32arrv(&rp0, xia);
|
||||||
|
i32* rp1 = rp0 + l0;
|
||||||
|
if (!up) { i32* t=rp1; rp1=rp0; rp0=t; }
|
||||||
|
usz b = 256; TALLOC(u8, buf, b+b/8);
|
||||||
|
u64* xp1 = xp;
|
||||||
|
u64* xp0 = (u64*)(buf + b);
|
||||||
|
for (usz i=0; i<xia; i+=b) {
|
||||||
|
if (b>xia-i) b=xia-i;
|
||||||
|
for (usz j=0; j<BIT_N(b); j++) xp0[j] = ~xp1[j];
|
||||||
|
usz s0=bit_sum(xp0,b); bmipopc_1slash8(xp0, (i8*)buf, b); for (usz j=0; j<s0; j++) *rp0++ = i+buf[j];
|
||||||
|
usz s1=b-s0; bmipopc_1slash8(xp1, (i8*)buf, b); for (usz j=0; j<s1; j++) *rp1++ = i+buf[j];
|
||||||
|
xp1+= b/64;
|
||||||
|
}
|
||||||
|
TFREE(buf);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
if (xia <= 128) { BRANCHLESS_GRADE(i8) }
|
if (xia <= 128) { BRANCHLESS_GRADE(i8) }
|
||||||
else if (xia <= 1<<15) { BRANCHLESS_GRADE(i16) }
|
else if (xia <= 1<<15) { BRANCHLESS_GRADE(i16) }
|
||||||
#endif
|
|
||||||
else if (xia <= 1ull<<31) { BRANCHLESS_GRADE(i32) }
|
else if (xia <= 1ull<<31) { BRANCHLESS_GRADE(i32) }
|
||||||
|
#endif
|
||||||
else { BRANCHLESS_GRADE(f64) }
|
else { BRANCHLESS_GRADE(f64) }
|
||||||
#undef BRANCHLESS_GRADE
|
#undef BRANCHLESS_GRADE
|
||||||
#undef BG_LOOP
|
#undef BG_LOOP
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user