Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcfa/src/concurrency/kernel/fwd.hfa

    rf2384c9a r3e2b9c9  
    5050                                uint64_t rand_seed;
    5151                        #endif
    52                         struct {
    53                                 uint64_t fwd_seed;
    54                                 uint64_t bck_seed;
    55                         } ready_rng;
    5652                } kernelTLS __attribute__ ((tls_model ( "initial-exec" )));
    57 
    58 
    5953
    6054                static inline uint64_t __tls_rand() {
     
    6458                                return __xorshift64( kernelTLS.rand_seed );
    6559                        #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 M
    87                 #undef A
    88                 #undef AI
    89                 #undef C
    90                 #undef D
    91 
    92                 static inline void __tls_rand_advance_bck(void) {
    93                         kernelTLS.ready_rng.bck_seed = kernelTLS.ready_rng.fwd_seed;
    9460                }
    9561        }
Note: See TracChangeset for help on using the changeset viewer.