【发布时间】:2012-08-26 15:26:42
【问题描述】:
我想使用 cpuid 指令来识别 Intel CPU 的特性。我在 Kernel.framework 中找到了 cpuid.h 标头,因此我将 Kernel.framework 添加到我的项目中,并将<Kernel/i386/cpuid.h> 包含在我的源文件中。那产生了
kern/kern_types.h: No such file or directory
我不明白。但是我认为我想要使用的函数do_cpuid 是内联定义的,所以我尝试将其复制到我的源代码中。
static inline void
do_cpuid(uint32_t selector, uint32_t *data)
{
asm("cpuid"
: "=a" (data[0]),
"=b" (data[1]),
"=c" (data[2]),
"=d" (data[3])
: "a"(selector));
}
这给了我错误:
error: can't find a register in class 'BREG' while reloading 'asm'
error: 'asm' operand has impossible constraints
谷歌搜索该错误使我想到了这个问题:Problem on Mac : "Can't find a register in class BREG while reloading asm"
但该问题的解决方案是使用 dynamic-no-pic 选项(GCC_DYNAMIC_NO_PIC 构建设置),Xcode 对构建设置的帮助显示“不适合共享库(需要与位置无关)。 "我正在构建一个框架,我认为它算是一个共享库。那么我怎样才能完成这项工作呢?
【问题讨论】:
标签: xcode macos assembly x86 cpuid