【问题标题】:How to get cpuid using inline assembly in powerpc?如何在powerpc中使用内联汇编获取cpuid?
【发布时间】:2018-05-11 03:32:56
【问题描述】:

我正在尝试编译 C++ 代码。但我在 power8 架构上遇到错误。这在 x86_64 架构中运行良好。以下是我遇到的错误。

  error: impossible register constraint in 'asm'
          : "a"(func));
                      ^

下面是我收到该错误的代码块。

static INLINE void cpuid(int *dest, int func)
{
        __asm__ volatile("cpuid"
                                 : "=a"(dest[0]), "=b"(dest[1]), "=c"(dest[2]), "=d"(dest[3])
                                 : "a"(func));
}

这段代码有问题还是我遗漏了什么?

或者有没有其他方法可以获取cpu id?

提前致谢!

【问题讨论】:

  • "cpu id" - 实际上,CPUID 指令允许您检索 x86 上的大量信息,具体取决于 'func' 中指定的值。您将如何解决此问题取决于您尝试检索的信息以及您打算如何处理这些信息。另外,这个问题可能被认为是this 的欺骗。

标签: c++ gcc inline-assembly powerpc cpuid


【解决方案1】:

如前所述,cpuid 是 x86-64 (AMD64 / EMT64) 和更高版本的 x86 (IA32) 处理器中的指令,与 powerpc 无关。据我所知,powerpc 规范中没有类似的 powerpc 指令(至少不是非特权指令),因此操作系统有自己的方法。

在某些系统上,例如 BSD 变体,这可能很简单:sysctl <option>

您可以查看gcc 使用的策略来确定不同操作系统powerpcpower 处理器版本:

来自当前的gcc-8.1.0 来源:driver-powerpcspe.cdriver-rs6000.c 可能会提供一些您可以修改的代码。

另一个有趣的来源可能是GMP library 的自动工具基础架构;具体来说,顶级的config.guessconfigure.ac 文件。


另外:power[pc] 主机上的gcc -march=native -E -dM - < /dev/null 可能允许您使用 grep 查找 CPU 和/或子类型字符串。

【讨论】:

    【解决方案2】:

    cpuid 是 x86_64 的东西。 Power 上没有这样的东西。

    【讨论】:

    • 感谢您回复@jesper。如果Power里面没有这个东西,这种问题怎么处理。我们只是忽略它们或任何其他解决方法?
    • 如何“处理”取决于您在做什么。如果程序的目的是打印出有关 CPU 的信息,那么“忽略”可能不是正确的答案。另请参阅this
    猜你喜欢
    • 2018-04-20
    • 1970-01-01
    • 1970-01-01
    • 2012-03-07
    • 1970-01-01
    • 2019-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多