diff options
author | Milad Fa <46688537+miladfarca@users.noreply.github.com> | 2021-10-29 15:51:54 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-10-29 15:51:54 -0400 |
commit | 022527c50e0e2bc937f9fa3c516e3e36cbba0845 (patch) | |
tree | 43eab7650ba5506b357fd846f9d0a8cc74ac1e84 /absl/random/internal/randen_engine.h | |
parent | cc413f8b674d61e3aa948386432e526e051afca0 (diff) | |
download | abseil-022527c50e0e2bc937f9fa3c516e3e36cbba0845.tar.gz abseil-022527c50e0e2bc937f9fa3c516e3e36cbba0845.tar.bz2 abseil-022527c50e0e2bc937f9fa3c516e3e36cbba0845.zip |
Fix Randen and PCG on Big Endian platforms (#1031)
Diffstat (limited to 'absl/random/internal/randen_engine.h')
-rw-r--r-- | absl/random/internal/randen_engine.h | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/absl/random/internal/randen_engine.h b/absl/random/internal/randen_engine.h index 92bb8905..372c3ac2 100644 --- a/absl/random/internal/randen_engine.h +++ b/absl/random/internal/randen_engine.h @@ -121,6 +121,13 @@ class alignas(16) randen_engine { const size_t requested_entropy = (entropy_size == 0) ? 8u : entropy_size; std::fill(std::begin(buffer) + requested_entropy, std::end(buffer), 0); seq.generate(std::begin(buffer), std::begin(buffer) + requested_entropy); +#ifdef ABSL_IS_BIG_ENDIAN + // Randen expects the seed buffer to be in Little Endian; reverse it on + // Big Endian platforms. + for (sequence_result_type& e : buffer) { + e = absl::little_endian::FromHost(e); + } +#endif // The Randen paper suggests preferentially initializing even-numbered // 128-bit vectors of the randen state (there are 16 such vectors). // The seed data is merged into the state offset by 128-bits, which |