我正在尝试编译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
使用的策略来确定不同操作系统的powerpc
和power
处理器版本:
从当前的gcc-8.1.0
来源: driver-powerpcspe.c
, driver-rs6000.c
可能会提供一些您可以修改的代码。
另一个有趣的来源可能是GMP library的自动工具基础结构;特别是顶级config.guess
和configure.ac
文件。
另外:power [pc]主机上的gcc -march=native -E -dM - < /dev/null
可能允许您grep输入CPU和/或子类型字符串。