如何在Powerpc中使用内联程序集获取CPUID?



我正在尝试编译 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.cdriver-rs6000.c可能会提供一些可以改编的代码。

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


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

cpuid是一件x86_64的事情。权力上没有这样的东西。

相关内容

  • 没有找到相关文章

最新更新