/ src / compat / cpuid.h
cpuid.h
 1  // Copyright (c) 2017-present The Bitcoin Core developers
 2  // Distributed under the MIT software license, see the accompanying
 3  // file COPYING or http://www.opensource.org/licenses/mit-license.php.
 4  
 5  #ifndef BITCOIN_COMPAT_CPUID_H
 6  #define BITCOIN_COMPAT_CPUID_H
 7  
 8  #if defined(__x86_64__) || defined(__amd64__) || defined(__i386__)
 9  #define HAVE_GETCPUID
10  
11  #include <cpuid.h>
12  
13  #include <cstdint>
14  
15  // We can't use cpuid.h's __get_cpuid as it does not support subleafs.
16  void static inline GetCPUID(uint32_t leaf, uint32_t subleaf, uint32_t& a, uint32_t& b, uint32_t& c, uint32_t& d)
17  {
18  #ifdef __GNUC__
19      __cpuid_count(leaf, subleaf, a, b, c, d);
20  #else
21    __asm__ ("cpuid" : "=a"(a), "=b"(b), "=c"(c), "=d"(d) : "0"(leaf), "2"(subleaf));
22  #endif
23  }
24  
25  #endif // defined(__x86_64__) || defined(__amd64__) || defined(__i386__)
26  #endif // BITCOIN_COMPAT_CPUID_H