| 40 | #define MAX_INTEL_TOP_LVL 4 |
| 41 | |
| 42 | class CPUID { |
| 43 | uint32_t regs[4]; |
| 44 | |
| 45 | public: |
| 46 | explicit CPUID(unsigned funcId, unsigned subFuncId) { |
| 47 | #ifdef _WIN32 |
| 48 | __cpuidex((int*)regs, (int)funcId, (int)subFuncId); |
| 49 | |
| 50 | #else |
| 51 | asm volatile("cpuid" |
| 52 | : "=a"(regs[0]), "=b"(regs[1]), "=c"(regs[2]), |
| 53 | "=d"(regs[3]) |
| 54 | : "a"(funcId), "c"(subFuncId)); |
| 55 | #endif |
| 56 | } |
| 57 | |
| 58 | inline const uint32_t& EAX() const { return regs[0]; } |
| 59 | inline const uint32_t& EBX() const { return regs[1]; } |
| 60 | inline const uint32_t& ECX() const { return regs[2]; } |
| 61 | inline const uint32_t& EDX() const { return regs[3]; } |
| 62 | }; |
| 63 | |
| 64 | #endif |
| 65 | |