- File:
-
- 1 edited
-
libcfa/src/concurrency/kernel/fwd.hfa (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/concurrency/kernel/fwd.hfa
r5d1ebb9 rc52f033 79 79 return 80 80 #if defined(__SIZEOF_INT128__) 81 lehmer64( kernelTLS().rand_seed );81 __lehmer64( kernelTLS().rand_seed ); 82 82 #else 83 xorshift_13_7_17( kernelTLS().rand_seed );83 __xorshift64( kernelTLS().rand_seed ); 84 84 #endif 85 85 } 86 86 87 #define M (1_l64u << 48_l64u) 88 #define A (25214903917_l64u) 89 #define AI (18446708753438544741_l64u) 90 #define C (11_l64u) 91 #define D (16_l64u) 92 87 93 static inline unsigned __tls_rand_fwd() { 88 return LCGBI_fwd( kernelTLS().ready_rng.fwd_seed ); 94 kernelTLS().ready_rng.fwd_seed = (A * kernelTLS().ready_rng.fwd_seed + C) & (M - 1); 95 return kernelTLS().ready_rng.fwd_seed >> D; 89 96 } 90 97 91 98 static inline unsigned __tls_rand_bck() { 92 return LCGBI_bck( kernelTLS().ready_rng.bck_seed ); 93 } 99 unsigned int r = kernelTLS().ready_rng.bck_seed >> D; 100 kernelTLS().ready_rng.bck_seed = AI * (kernelTLS().ready_rng.bck_seed - C) & (M - 1); 101 return r; 102 } 103 104 #undef M 105 #undef A 106 #undef AI 107 #undef C 108 #undef D 94 109 95 110 static inline void __tls_rand_advance_bck(void) { … … 125 140 } 126 141 } 142 143 extern uint64_t thread_rand(); 127 144 128 145 // Semaphore which only supports a single thread
Note:
See TracChangeset
for help on using the changeset viewer.