- File:
-
- 1 edited
-
libcfa/src/concurrency/kernel/fwd.hfa (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/concurrency/kernel/fwd.hfa
r5d1ebb9 r24e321c 77 77 78 78 static inline uint64_t __tls_rand() { 79 return80 79 #if defined(__SIZEOF_INT128__) 81 lehmer64( kernelTLS().rand_seed );80 return __lehmer64( kernelTLS().rand_seed ); 82 81 #else 83 xorshift_13_7_17( kernelTLS().rand_seed );82 return __xorshift64( kernelTLS().rand_seed ); 84 83 #endif 85 84 } 86 85 86 #define M (1_l64u << 48_l64u) 87 #define A (25214903917_l64u) 88 #define AI (18446708753438544741_l64u) 89 #define C (11_l64u) 90 #define D (16_l64u) 91 87 92 static inline unsigned __tls_rand_fwd() { 88 return LCGBI_fwd( kernelTLS().ready_rng.fwd_seed ); 93 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) { … … 97 112 } 98 113 } 114 115 99 116 100 117 extern void disable_interrupts(); … … 125 142 } 126 143 } 144 145 extern uint64_t thread_rand(); 127 146 128 147 // Semaphore which only supports a single thread
Note:
See TracChangeset
for help on using the changeset viewer.