【问题标题】:How to call CPUID leaf 7 and subleaf 0?如何调用 CPUID 叶 7 和子叶 0?
【发布时间】:2013-03-07 16:42:02
【问题描述】:

我已经在 fedora 上下载并安装了 yum install cpuid。 你能告诉我如何调用 CPUID 叶 7 和 subleaf 0 吗?我想检查该平台上可用的一些功能。 我真的很感谢你的帮助。提前致谢。

【问题讨论】:

    标签: cpuid


    【解决方案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 &amp; 0x80000000?这对我来说看起来不对。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多