MCKL
Monte Carlo Kernel Library
Classes | Namespaces | Macros
threefry_generic_2x32.hpp File Reference
#include <mckl/random/internal/common.hpp>
#include <mckl/random/internal/threefry_common.hpp>
#include <mckl/random/internal/threefry_constants.hpp>
#include <mckl/random/increment.hpp>

Go to the source code of this file.

Classes

class  mckl::internal::Threefry2x32GeneratorGenericImpl< T >
 

Namespaces

 mckl
 
 mckl::internal
 

Macros

#define MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_2X32_CYCLE_4(N)
 
#define MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_2X32_CYCLE_8(N)
 
#define MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_2X32_KBOX(N)
 
#define MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_2X32_RBOX(N)
 
#define MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_2X32_ROUND_20
 

Macro Definition Documentation

◆ MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_2X32_CYCLE_4

#define MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_2X32_CYCLE_4 (   N)
Value:
MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_2X32_RBOX(N * 8 + 2); \
MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_2X32_RBOX(N * 8 + 3); \
MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_2X32_RBOX(N * 8 + 4); \
MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_2X32_KBOX(N * 8 + 4);
#define MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_2X32_RBOX(N)

Definition at line 53 of file threefry_generic_2x32.hpp.

◆ MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_2X32_CYCLE_8

#define MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_2X32_CYCLE_8 (   N)
Value:
MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_2X32_RBOX(N * 8 + 2); \
MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_2X32_RBOX(N * 8 + 3); \
MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_2X32_RBOX(N * 8 + 4); \
MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_2X32_KBOX(N * 8 + 4); \
MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_2X32_RBOX(N * 8 + 5); \
MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_2X32_RBOX(N * 8 + 6); \
MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_2X32_RBOX(N * 8 + 7); \
MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_2X32_RBOX(N * 8 + 8); \
MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_2X32_KBOX(N * 8 + 8);
#define MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_2X32_RBOX(N)

Definition at line 60 of file threefry_generic_2x32.hpp.

◆ MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_2X32_KBOX

#define MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_2X32_KBOX (   N)
Value:
s0 += ThreefryKBox<T, K, N>::template key<0>(par); \
s1 += ThreefryKBox<T, K, N>::template key<1>(par);

Definition at line 40 of file threefry_generic_2x32.hpp.

◆ MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_2X32_RBOX

#define MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_2X32_RBOX (   N)
Value:
{ \
constexpr int L0 = Constants::rotate::value[0][(N - 1) % 8]; \
constexpr int R0 = 32 - L0; \
s0 += s1; \
s1 = (s1 << L0) | (s1 >> R0); \
s1 ^= s0; \
}

Definition at line 44 of file threefry_generic_2x32.hpp.

◆ MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_2X32_ROUND_20

#define MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_2X32_ROUND_20
Value:
T s0 = std::get<0>(buf.s); \
T s1 = std::get<1>(buf.s); \
MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_2X32_KBOX(0) \
MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_2X32_CYCLE_8(0) \
MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_2X32_CYCLE_8(1) \
MCKL_RANDOM_INTERNAL_THREEFRY_GENERIC_2X32_CYCLE_4(2) \
std::get<0>(buf.s) = s0; \
std::get<1>(buf.s) = s1;

Definition at line 72 of file threefry_generic_2x32.hpp.