21 lines
435 B
C
21 lines
435 B
C
#pragma once
|
|
|
|
#include <cpuid.h>
|
|
#include <stdint.h>
|
|
|
|
#include "util/optional.h"
|
|
|
|
struct cpuid_result_t {
|
|
uint32_t eax;
|
|
uint32_t ebx;
|
|
uint32_t ecx;
|
|
uint32_t edx;
|
|
};
|
|
|
|
inline optional<cpuid_result_t> cpuid(uint32_t leaf, uint32_t subleaf = 0) {
|
|
cpuid_result_t result{};
|
|
if (__get_cpuid_count(leaf, subleaf, &result.eax, &result.ebx, &result.ecx, &result.edx) == 0) {
|
|
return {};
|
|
}
|
|
return result;
|
|
}
|