diff --git a/src/builtins/sysfn.c b/src/builtins/sysfn.c index 4806992f..e3816e0d 100644 --- a/src/builtins/sysfn.c +++ b/src/builtins/sysfn.c @@ -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; } }