LCOV - code coverage report
Current view: top level - core/src/lib/random - xoroshiro.h Hit Total Coverage
Test: ROOT-Sim develop Documentation Coverage Lines: 1 4 25.0 %
Date: 2021-03-02 11:24:52

          Line data    Source code
       1           1 : /**
       2             :  * @file lib/random/xoroshiro.h
       3             :  *
       4             :  * @brief Xoroshiro RNG support functions
       5             :  *
       6             :  * Xoroshiro RNG support functions.
       7             :  *
       8             :  * SPDX-FileCopyrightText: 2008-2021 D. Blackman and S. Vigna <vigna@acm.org>
       9             :  * SPDX-License-Identifier: CC0-1.0
      10             :  */
      11             : #pragma once
      12             : 
      13             : #include <stdint.h>
      14             : 
      15           0 : #define rotl(x, k) (((x) << (k)) | ((x) >> (64 - (k))))
      16             : 
      17           0 : #define random_u64(rng_s)                                               \
      18             : __extension__ ({                                                        \
      19             :         const uint64_t __res = rotl((rng_s)[1] * 5, 7) * 9;             \
      20             :         const uint64_t __t = (rng_s)[1] << 17;                            \
      21             :                                                                         \
      22             :         (rng_s)[2] ^= (rng_s)[0];                                       \
      23             :         (rng_s)[3] ^= (rng_s)[1];                                       \
      24             :         (rng_s)[1] ^= (rng_s)[2];                                       \
      25             :         (rng_s)[0] ^= (rng_s)[3];                                       \
      26             :         (rng_s)[2] ^= __t;                                              \
      27             :         (rng_s)[3] = rotl((rng_s)[3], 45);                              \
      28             :                                                                         \
      29             :         __res;                                                          \
      30             : })
      31             : 
      32             : // FIXME: this is a very poor way to seed the generator
      33           0 : #define random_init(rng_s, llid, seed)                                  \
      34             : __extension__ ({                                                        \
      35             :         (rng_s)[0] = (llid + 1) * UINT64_C(16232384076195101791) ^ seed;\
      36             :         (rng_s)[1] = (llid + 1) * UINT64_C(13983006573105492179) ^ seed;\
      37             :         (rng_s)[2] = (llid + 1) * UINT64_C(10204677566545858177) ^ seed;\
      38             :         (rng_s)[3] = (llid + 1) * UINT64_C(14539058011249359317) ^ seed;\
      39             :         unsigned __i = 1024;                                            \
      40             :         while (__i--)                                                   \
      41             :                 random_u64((rng_s));                                    \
      42             : })
      43             : 

Generated by: LCOV version 1.14