]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
random.cc (random_device::_M_init): Check whether cpuid instruction is available...
authorUlrich Drepper <drepper@gmail.com>
Wed, 5 Sep 2012 13:54:57 +0000 (13:54 +0000)
committerUlrich Drepper <drepper@gcc.gnu.org>
Wed, 5 Sep 2012 13:54:57 +0000 (13:54 +0000)
* src/c++11/random.cc (random_device::_M_init): Check whether cpuid
instruction is available by using __get_cpuid_max.

From-SVN: r190982

libstdc++-v3/ChangeLog
libstdc++-v3/src/c++11/random.cc

index b7fb7956c1c3c1591ad1f45a73521e598a8a3187..fa11b3404b1e2e761bf9cef53e72854b92ab292c 100644 (file)
@@ -1,5 +1,8 @@
 2012-09-05  Ulrich Drepper  <drepper@gmail.com>
 
+       * 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.
 
index cabc388760b47bbb1cf9983bb97ae7f5e28a3c08..f5ee9f4fa6105af6495e0019d2a5439d598ada56 100644 (file)
@@ -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));
   }