From 42943f467831bfcc123214659f4b5b7f5a5e2c54 Mon Sep 17 00:00:00 2001 From: Richard Thier Date: Sat, 27 Sep 2025 05:18:07 +0200 Subject: [PATCH] trying mormords ideas and why its slower --- fastrand.h | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/fastrand.h b/fastrand.h index 83ce6b5..10ffeae 100644 --- a/fastrand.h +++ b/fastrand.h @@ -125,6 +125,15 @@ static inline uint32_t lcg_ilp(rand_ilp_state *state, RAND_ILP which) { return state->h; } assert(0); + return 0; +} + +/** Slower for me than lcg_ilp because that gets optimized out in unrolled loop! */ +static inline uint32_t lcg_ilp2(rand_ilp_state *state, RAND_ILP which) +{ + uint32_t *s = &(state->a) + which; + *s = *s * 1664525u + 1013904223u; + return *s; } /** Pick a "reasonably random" number in [0, until-1] without modulus */ @@ -134,8 +143,8 @@ static inline uint32_t rand_until(rand_state *restrict state, uint32_t until) { return (uint32_t)(((uint64_t)rand * until) >> 32); } -uint32_t fastmodlike(uint32_t num, uint32_t m) { - return (((uint64_t) num) * m); +static inline uint32_t fastmodlike(uint32_t num, uint32_t m) { + return (uint32_t)(((uint64_t) num * m) >> 32); } /**