Line data Source code
1 : // Copyright (c) 2017-2022 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 116 : 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 116 : __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 116 : } 24 : 25 : #endif // defined(__x86_64__) || defined(__amd64__) || defined(__i386__) 26 : #endif // BITCOIN_COMPAT_CPUID_H