fix generic squeeze case
This commit is contained in:
parent
ea5abeff18
commit
6bce21b55c
@ -608,17 +608,16 @@ B num_squeeze(B x) {
|
|||||||
u32 or = 0; // using bitwise or as an approximate ⌈´
|
u32 or = 0; // using bitwise or as an approximate ⌈´
|
||||||
switch (xe) { default: UD;
|
switch (xe) { default: UD;
|
||||||
case el_bit: goto r_x;
|
case el_bit: goto r_x;
|
||||||
case el_i8: { i8* xp = i8any_ptr (x); for (; i < ia; i++) { i32 c = xp[i]&~1; or|= ((u32)c) ^ (u32)(c>>31); } goto r_or; }
|
case el_i8: { i8* xp = i8any_ptr (x); for (; i < ia; i++) { i32 c = xp[i]; or|= ((u32)c & ~1) ^ (u32)(c>>31); } goto r_or; }
|
||||||
case el_i16: { i16* xp = i16any_ptr(x); for (; i < ia; i++) { i32 c = xp[i]&~1; or|= ((u32)c) ^ (u32)(c>>31); } goto r_or; }
|
case el_i16: { i16* xp = i16any_ptr(x); for (; i < ia; i++) { i32 c = xp[i]; or|= ((u32)c & ~1) ^ (u32)(c>>31); } goto r_or; }
|
||||||
case el_i32: { i32* xp = i32any_ptr(x); for (; i < ia; i++) { i32 c = xp[i]&~1; or|= ((u32)c) ^ (u32)(c>>31); } goto r_or; }
|
case el_i32: { i32* xp = i32any_ptr(x); for (; i < ia; i++) { i32 c = xp[i]; or|= ((u32)c & ~1) ^ (u32)(c>>31); } goto r_or; }
|
||||||
case el_f64: {
|
case el_f64: {
|
||||||
f64* xp = f64any_ptr(x);
|
f64* xp = f64any_ptr(x);
|
||||||
for (; i < ia; i++) {
|
for (; i < ia; i++) {
|
||||||
f64 cf = xp[i];
|
f64 cf = xp[i];
|
||||||
i32 c = (i32)cf;
|
i32 c = (i32)cf;
|
||||||
if (c!=cf) goto r_x; // already f64
|
if (c!=cf) goto r_x; // already f64
|
||||||
c&= ~1;
|
or|= ((u32)c & ~1) ^ (u32)(c>>31);
|
||||||
or|= ((u32)c) ^ (u32)(c>>31);
|
|
||||||
}
|
}
|
||||||
goto r_or;
|
goto r_or;
|
||||||
}
|
}
|
||||||
@ -632,8 +631,8 @@ B num_squeeze(B x) {
|
|||||||
while (i<ia) if (!isF64(xp[i++])) goto r_x;
|
while (i<ia) if (!isF64(xp[i++])) goto r_x;
|
||||||
goto r_f64;
|
goto r_f64;
|
||||||
}
|
}
|
||||||
i32 c = o2iu(xp[i]) & ~1;
|
i32 c = o2iu(xp[i]);
|
||||||
or|= ((u32)c) ^ (u32)(c>>31);
|
or|= ((u32)c & ~1) ^ (u32)(c>>31);
|
||||||
}
|
}
|
||||||
goto r_or;
|
goto r_or;
|
||||||
}
|
}
|
||||||
@ -646,8 +645,7 @@ B num_squeeze(B x) {
|
|||||||
goto r_f64;
|
goto r_f64;
|
||||||
}
|
}
|
||||||
i32 c = o2iu(cr);
|
i32 c = o2iu(cr);
|
||||||
i32 sgn = (u32)(c>>31);
|
or|= ((u32)c & ~1) ^ (u32)(c>>31);
|
||||||
or|= ((u32)c) ^ sgn;
|
|
||||||
}
|
}
|
||||||
r_or:
|
r_or:
|
||||||
if (or==0) goto r_bit;
|
if (or==0) goto r_bit;
|
||||||
|
|||||||
@ -9,5 +9,5 @@ test/moreCfgs.sh path/to/mlochbaum/BQN // run "2+2" in a bunch of configurations
|
|||||||
./BQN test/cmp.bqn // fuzz-test scalar comparison functions =≠<≤>≥
|
./BQN test/cmp.bqn // fuzz-test scalar comparison functions =≠<≤>≥
|
||||||
./BQN test/equal.bqn // fuzz-test 𝕨≡𝕩
|
./BQN test/equal.bqn // fuzz-test 𝕨≡𝕩
|
||||||
./BQN test/bitcpy.bqn // fuzz-test bit_cpy; requires a CBQN build with -DTEST_BITCPY
|
./BQN test/bitcpy.bqn // fuzz-test bit_cpy; requires a CBQN build with -DTEST_BITCPY
|
||||||
./BQN test/squeeze.bqn // fuzz-test bit_cpy; requires a CBQN build with -DEEQUAL_NEGZERO
|
./BQN test/squeeze.bqn // fuzz-test squeezing; requires a CBQN build with -DEEQUAL_NEGZERO
|
||||||
```
|
```
|
||||||
@ -1,3 +1,4 @@
|
|||||||
|
# make o3n-singeli && ./BQN test/equal.bqn
|
||||||
⟨ListVariations, ClearRefs, Variation, Squeeze, Info⟩ ← •internal
|
⟨ListVariations, ClearRefs, Variation, Squeeze, Info⟩ ← •internal
|
||||||
u ← ⌊100×(•UnixTime+1|100וMonoTime)@
|
u ← ⌊100×(•UnixTime+1|100וMonoTime)@
|
||||||
# u ↩ 123
|
# u ↩ 123
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user