better squeezing

This commit is contained in:
dzaima 2021-09-25 15:26:06 +03:00
parent ecb8af658b
commit a8c5dd6581
2 changed files with 8 additions and 8 deletions

View File

@ -143,7 +143,7 @@ B indexOf_c1(B t, B x) {
if (c<min) min = c;
if (c>max) max = c;
}
i64 dst = 1 + max-(i64)min;
i64 dst = 1 + (max-(i64)min);
if ((dst<xia*5 || dst<50) && min!=I32_MIN) {
i32* rp; B r = m_i32arrv(&rp, xia);
TALLOC(i32, tmp, dst);

View File

@ -476,14 +476,14 @@ B num_squeeze(B x) {
if (xe==el_i8) goto r_x;
// TODO fast paths for xe<el_f64
usz i = 0;
i32 or = 0; // using bitwise or as a heuristical ⌈´|𝕩
u32 or = 0; // using bitwise or as an approximate ⌈´
if (xe==el_f64) {
f64* xp = f64any_ptr(x);
for (; i < ia; i++) {
f64 cf = xp[i];
i32 c = (i32)cf;
if (c!=cf) goto r_x; // already f64
or|= c<0?-c:c;
or|= ((u32)c) ^ (u32)(c>>31);
}
goto r_or;
}
@ -496,7 +496,7 @@ B num_squeeze(B x) {
goto r_f64;
}
i32 c = o2iu(xp[i]);
or|= c<0?-c:c;
or|= ((u32)c) ^ (u32)(c>>31);
}
goto r_or;
}
@ -509,12 +509,12 @@ B num_squeeze(B x) {
goto r_f64;
}
i32 c = o2iu(cr);
or|= c<0?-c:c;
or|= ((u32)c) ^ (u32)(c>>31);
}
r_or:
if (or>=0 && or<=I8_MAX ) goto r_i8;
else if (or>=0 && or<=I16_MAX) goto r_i16;
else goto r_i32;
if (or<=(u32)I8_MAX ) goto r_i8;
else if (or<=(u32)I16_MAX) goto r_i16;
else goto r_i32;
r_x : return FL_SET(x, fl_squoze);
r_i8 : return FL_SET(toI8Any (x), fl_squoze);