Ignore:
File:
1 edited

Legend:

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

    r5d1ebb9 rc52f033  
    7979                        return
    8080                        #if defined(__SIZEOF_INT128__)
    81                                 lehmer64( kernelTLS().rand_seed );
     81                                __lehmer64( kernelTLS().rand_seed );
    8282                        #else
    83                                 xorshift_13_7_17( kernelTLS().rand_seed );
     83                                __xorshift64( kernelTLS().rand_seed );
    8484                        #endif
    8585                }
    8686
     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
    8793                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;
    8996                }
    9097
    9198                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
    94109
    95110                static inline void __tls_rand_advance_bck(void) {
     
    125140                        }
    126141                }
     142
     143                extern uint64_t thread_rand();
    127144
    128145                // Semaphore which only supports a single thread
Note: See TracChangeset for help on using the changeset viewer.