1

我正在尝试编译 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?

提前致谢!

4

2 回答 2

3

如前所述,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 库的 autotools 基础设施;具体来说,顶层config.guessconfigure.ac文件。


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

于 2018-05-11T04:51:11.100 回答
1

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

于 2018-05-11T03:41:36.193 回答