如何调用 CPUID 叶 7 和子叶 0?
Posted
技术标签:
【中文标题】如何调用 CPUID 叶 7 和子叶 0?【英文标题】:How to call CPUID leaf 7 and subleaf 0? 【发布时间】:2013-03-07 16:42:02 【问题描述】:我已经在 fedora 上下载并安装了 yum install cpuid。 你能告诉我如何调用 CPUID 叶 7 和 subleaf 0 吗?我想检查该平台上可用的一些功能。 我真的很感谢你的帮助。提前致谢。
【问题讨论】:
【参考方案1】:_cpuid_count 可用于获取带有子叶的函数 7 和 0xD。
定义在cpuid.h中
#define __cpuid_count(level, count, a, b, c, d)
__asm__ ("cpuid\n\t"
: "=a" (a), "=b" (b), "=c" (c), "=d" (d)
: "0" (level), "2" (count))
请注意,_cpuid_count 不检查该功能是否受支持。 您可以在 cpuid.h 中进行类似于 __get_cpuid 的检查。这可能应该添加到 stdc 库中。
static __inline int
__get_cpuid_count (unsigned int __level, unsigned int __count,
unsigned int *__eax, unsigned int *__ebx,
unsigned int *__ecx, unsigned int *__edx)
unsigned int __ext = __level & 0x80000000;
if (__get_cpuid_max (__ext, 0) < __level)
return 0;
__cpuid_count (__level, __count, *__eax, *__ebx, *__ecx, *__edx);
return 1;
【讨论】:
看来你可以改用__get_cpuid_max
。 __get_cpuid_max
执行必要的检查以确保函数/叶子可用。
为什么是__level & 0x80000000
?这对我来说看起来不对。以上是关于如何调用 CPUID 叶 7 和子叶 0?的主要内容,如果未能解决你的问题,请参考以下文章