diff options
author | Thiago Macieira <thiago.macieira@intel.com> | 2019-08-13 21:59:26 -0700 |
---|---|---|
committer | Thiago Macieira <thiago.macieira@intel.com> | 2019-10-09 07:31:28 -0700 |
commit | 780137d585344bf9de906a285a50498104c0c66e (patch) | |
tree | 12ba9d636b58091a4e0935fe1b9375297fde5a20 /config.tests/x86_simd | |
parent | 74858dc4af2c70b1c1540a7eda550620227badac (diff) |
QRandom: add support for RDSEED
The Intel whitepaer[1] recommends using the RDSEED over RDRAND whenever
present. libstdc++ from GCC 10 will also use it in std::random_device.
[ChangeLog][QtCore][QRandomGenerator] The system() random generator will
now use the RDSEED instruction on x86 processors whenever available as
the first source of random data. It will fall back to RDRAND and then to
the system functions, in that order.
[1] https://software.intel.com/en-us/articles/intel-digital-random-number-generator-drng-software-implementation-guide
Change-Id: I907a43cd9a714da288a2fffd15bab176e54e1975
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Diffstat (limited to 'config.tests/x86_simd')
-rw-r--r-- | config.tests/x86_simd/main.cpp | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/config.tests/x86_simd/main.cpp b/config.tests/x86_simd/main.cpp index 4fac13973a..0e7ebed8d9 100644 --- a/config.tests/x86_simd/main.cpp +++ b/config.tests/x86_simd/main.cpp @@ -132,6 +132,23 @@ attribute_target("rdrnd") int test_rdrnd() } #endif +#if T(RDSEED) +attribute_target("rdseed") int test_rdseed() +{ + unsigned short us; + unsigned int ui; + if (_rdseed16_step(&us)) + return 1; + if (_rdseed32_step(&ui)) + return 1; +# if defined(__x86_64) || defined(__x86_64__) || defined(__amd64) || defined(_M_X64) + unsigned long long ull; + if (_rdseed64_step(&ull)) + return 1; +# endif +} +#endif + #if T(SHANI) attribute_target("sha") void test_shani() { |