From: Ulrich Drepper Date: Wed, 5 Sep 2012 13:54:57 +0000 (+0000) Subject: random.cc (random_device::_M_init): Check whether cpuid instruction is available... X-Git-Tag: misc/gccgo-go1_1_2~1030 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=efc622f843e3db6a4da4112ef411abf935048438;p=thirdparty%2Fgcc.git random.cc (random_device::_M_init): Check whether cpuid instruction is available by using __get_cpuid_max. * src/c++11/random.cc (random_device::_M_init): Check whether cpuid instruction is available by using __get_cpuid_max. From-SVN: r190982 --- diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index b7fb7956c1c3..fa11b3404b1e 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,5 +1,8 @@ 2012-09-05 Ulrich Drepper + * src/c++11/random.cc (random_device::_M_init): Check whether cpuid + instruction is available by using __get_cpuid_max. + * include/ext/random.tcc (__gnu_cxx:normal_mv_distribution<>) (operator()): Use __generate() function of _M_nd. diff --git a/libstdc++-v3/src/c++11/random.cc b/libstdc++-v3/src/c++11/random.cc index cabc388760b4..f5ee9f4fa610 100644 --- a/libstdc++-v3/src/c++11/random.cc +++ b/libstdc++-v3/src/c++11/random.cc @@ -77,9 +77,9 @@ namespace std _GLIBCXX_VISIBILITY(default) { #if defined __i386__ || defined __x86_64__ unsigned int eax, ebx, ecx, edx; - __cpuid(0, eax, ebx, ecx, edx); - // Check for "GenuineIntel" - if (ebx == 0x756e6547 && ecx == 0x6c65746e && edx == 0x49656e69) + // Check availability of cpuid and, for now at least, also the + // CPU signature for Intel's + if (__get_cpuid_max(0, &ebx) > 0 && ebx == 0x756e6547) { __cpuid(1, eax, ebx, ecx, edx); if (ecx & bit_RDRND) @@ -104,7 +104,6 @@ namespace std _GLIBCXX_VISIBILITY(default) void random_device::_M_init_pretr1(const std::string& token) - { _M_mt.seed(_M_strtoul(token)); }