~ chicken-core (chicken-5) b443ae384c5f853222427b68a3f261a2768ec07a
commit b443ae384c5f853222427b68a3f261a2768ec07a Author: Kooda <kooda@upyum.com> AuthorDate: Tue Dec 12 19:35:06 2017 +0100 Commit: Kooda <kooda@upyum.com> CommitDate: Tue Dec 12 21:18:49 2017 +0100 Force the ordering of calls to random_word in random64. Thanks to Riastradh for the help. diff --git a/runtime.c b/runtime.c index 8cb56a6e..ce68a8a0 100644 --- a/runtime.c +++ b/runtime.c @@ -12705,11 +12705,17 @@ C_s_a_u_i_random_int(C_word **ptr, C_word n, C_word rn) * number in [0, 1], 0.00001010011111010100...; then round it. * More information on https://mumble.net/~campbell/2014/04/28/uniform-random-float */ + +static inline C_u64 random64() { #ifdef C_SIXTY_FOUR -# define random64() random_word() + return random_word(); #else -# define random64() ((((C_u64) random_word()) << 32) | ((C_u64) random_word())) + C_u64 v = 0; + v |= ((C_u64) random_word()) << 32; + v |= (C_u64) random_word(); + return v; #endif +} #ifdef __GNUC__ # define clz64 __builtin_clzllTrap