128-bit multiplication & unrolling doesn't go well in clang
This commit is contained in:
parent
c5b65b9246
commit
81bdec4737
@ -333,11 +333,11 @@ B rand_range_c2(B t, B w, B x) {
|
||||
if (max<1) {
|
||||
if (max!=0) thrM("(rand).Range: 𝕩 cannot be negative");
|
||||
f64* rp; r = m_f64arrp(&rp, am);
|
||||
for (usz i = 0; i < am; i++) rp[i] = wy2u01(wyrand(&seed));
|
||||
NOUNROLL for (usz i = 0; i < am; i++) rp[i] = wy2u01(wyrand(&seed));
|
||||
} else if (max > I32_MAX) {
|
||||
if (max >= 1LL<<53) thrM("(rand).Range: 𝕩 must be less than 2⋆53");
|
||||
f64* rp; r = m_f64arrp(&rp, am);
|
||||
for (usz i = 0; i < am; i++) rp[i] = wy2u0k(wyrand(&seed), max);
|
||||
NOUNROLL for (usz i = 0; i < am; i++) rp[i] = wy2u0k(wyrand(&seed), max);
|
||||
} else {
|
||||
u8 t; usz u64am;
|
||||
|
||||
@ -351,9 +351,9 @@ B rand_range_c2(B t, B w, B x) {
|
||||
r = m_arr(offsetof(TyArr,a) + (u64am<<3), t, am);
|
||||
void* rp = ((TyArr*)r)->a;
|
||||
if (max & (max-1)) { // not power of two
|
||||
if (t==t_i32arr) for (usz i = 0; i < am; i++) ((i32*)rp)[i] = wy2u0k(wyrand(&seed), max);
|
||||
else if (t==t_i16arr) for (usz i = 0; i < am; i++) ((i16*)rp)[i] = wy2u0k(wyrand(&seed), max);
|
||||
else if (t==t_i8arr) for (usz i = 0; i < am; i++) (( i8*)rp)[i] = wy2u0k(wyrand(&seed), max);
|
||||
if (t==t_i32arr) NOUNROLL for (usz i = 0; i < am; i++) ((i32*)rp)[i] = wy2u0k(wyrand(&seed), max);
|
||||
else if (t==t_i16arr) NOUNROLL for (usz i = 0; i < am; i++) ((i16*)rp)[i] = wy2u0k(wyrand(&seed), max);
|
||||
else if (t==t_i8arr) NOUNROLL for (usz i = 0; i < am; i++) (( i8*)rp)[i] = wy2u0k(wyrand(&seed), max);
|
||||
else UD; // bitarr will be max==2, i.e. a power of two
|
||||
} else {
|
||||
u64 mask;
|
||||
@ -364,7 +364,7 @@ B rand_range_c2(B t, B w, B x) {
|
||||
if (t==t_i16arr) goto end; mask|= mask<<8;
|
||||
|
||||
end:
|
||||
for (usz i = 0; i < u64am; i++) ((u64*)rp)[i] = wyrand(&seed) & mask;
|
||||
NOUNROLL for (usz i = 0; i < u64am; i++) ((u64*)rp)[i] = wyrand(&seed) & mask;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user