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

提前致谢!

最佳答案

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

在某些系统上,例如BSD变体,这可能很简单:sysctl <option>
您可以看看gcc使用的策略来确定不同操作系统的powerpcpower处理器版本:

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

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

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

08-16 23:54