有没有类似x86 cpuid()的东西可用于PowerPC?

我想编写一些能够在PowerPC上查询处理器属性的C代码,就像在x86上使用cpuid一样。 我喜欢品牌,型号,步进,SIMD宽度,可用操作之类的东西,因此可以在运行时爆炸之前确认代码在兼容平台上使用。

在PowerPC上有这样的通用机制吗? 如果是这样,可以在哪里阅读它?

请注意,PowerPC没有像x86那样的许多扩展/function。 需要读取可能依赖于核心的特定特权寄存器。

我检查了Linux,你可以访问PVR,内核中有一个陷阱来管理它。

如果支持Altivec,内存和L2缓存大小,读取/ proc / cpuinfo可以返回…但这不是很方便。

这里描述了一个更好的解决方案: http : //www.freehackers.org/thomas/2011/05/13/how-to-detect-altivec-availability-on-linuxppc-at-runtime/

它使用/ proc / self / auxv的内容,它提供“在exec时间传递给进程的ELF解释器信息”。

这个例子是关于Altivec但你可以得到其他function(在“asm / cputable.h”中列出):32或64位cpu,Altivec,SPE,FPU,MMU,4xx MAC,……

最后,您将找到有关缓存(大小,行大小,关联性等)的信息,查看以下文件:/ sys / devices / system / cpu / cpu0 / cache

PowerPC没有CPUID指令的模拟。 最接近的是读取PVR(处理器版本寄存器)。 不过,这是一个主管特权的SPR。 但是,某些操作系统(例如FreeBSD)将捕获并执行用于用户空间进程的操作系统。

PVR是只读的,对于任何给定的处理器型号和版本应该是唯一的。 鉴于此,您可以确定给定CPU提供的function。