如何在 powerpc 中使用内联汇编获取 cpuid?
How to get cpuid using inline assembly in powerpc?
我正在尝试编译 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 的东西。 Power上没有这样的东西。
如前所述,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 的 autotools 基础设施;具体来说,顶级 config.guess
和 configure.ac
文件。
此外:gcc -march=native -E -dM - < /dev/null
在 power[pc] 主机上可能允许您 grep 查找 CPU and/or 子类型字符串。
我正在尝试编译 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 的东西。 Power上没有这样的东西。
如前所述,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 的 autotools 基础设施;具体来说,顶级 config.guess
和 configure.ac
文件。
此外:gcc -march=native -E -dM - < /dev/null
在 power[pc] 主机上可能允许您 grep 查找 CPU and/or 子类型字符串。