- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/concurrency/kernel/fwd.hfa
rf2384c9a r3e2b9c9 50 50 uint64_t rand_seed; 51 51 #endif 52 struct {53 uint64_t fwd_seed;54 uint64_t bck_seed;55 } ready_rng;56 52 } kernelTLS __attribute__ ((tls_model ( "initial-exec" ))); 57 58 59 53 60 54 static inline uint64_t __tls_rand() { … … 64 58 return __xorshift64( kernelTLS.rand_seed ); 65 59 #endif 66 }67 68 #define M (1_l64u << 48_l64u)69 #define A (25214903917_l64u)70 #define AI (18446708753438544741_l64u)71 #define C (11_l64u)72 #define D (16_l64u)73 74 static inline unsigned __tls_rand_fwd() {75 76 kernelTLS.ready_rng.fwd_seed = (A * kernelTLS.ready_rng.fwd_seed + C) & (M - 1);77 return kernelTLS.ready_rng.fwd_seed >> D;78 }79 80 static inline unsigned __tls_rand_bck() {81 unsigned int r = kernelTLS.ready_rng.bck_seed >> D;82 kernelTLS.ready_rng.bck_seed = AI * (kernelTLS.ready_rng.bck_seed - C) & (M - 1);83 return r;84 }85 86 #undef M87 #undef A88 #undef AI89 #undef C90 #undef D91 92 static inline void __tls_rand_advance_bck(void) {93 kernelTLS.ready_rng.bck_seed = kernelTLS.ready_rng.fwd_seed;94 60 } 95 61 }
Note:
See TracChangeset
for help on using the changeset viewer.