Ignore:
File:
1 edited

Legend:

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

    r5d1ebb9 r24e321c  
    7777
    7878                static inline uint64_t __tls_rand() {
    79                         return
    8079                        #if defined(__SIZEOF_INT128__)
    81                                 lehmer64( kernelTLS().rand_seed );
     80                                return __lehmer64( kernelTLS().rand_seed );
    8281                        #else
    83                                 xorshift_13_7_17( kernelTLS().rand_seed );
     82                                return __xorshift64( kernelTLS().rand_seed );
    8483                        #endif
    8584                }
    8685
     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
    8792                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;
    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) {
     
    97112                }
    98113        }
     114
     115
    99116
    100117        extern void disable_interrupts();
     
    125142                        }
    126143                }
     144
     145                extern uint64_t thread_rand();
    127146
    128147                // Semaphore which only supports a single thread
Note: See TracChangeset for help on using the changeset viewer.