gcc如何在x86上确定-march = native?在胳膊上?

时间:2013-10-17 03:53:59

标签: c gcc x86 arm

我知道通常建议使用-march = native(如果你正在编译你正在使用的机器),那么gcc会确定你的arch和cputype并生成大多数机器特定的代码,但是怎么做它那样做?

它是否使用cpuid(在arm或x86上)?在没有类似cpuid的指令的平台上使用了哪些技术?

1 个答案:

答案 0 :(得分:2)

好问题。

我的直觉是它会检查/proc/cpuinfo。实际上,它取决于它已编译运行的体系结构。似乎host_detect_local_cpu是负责此功能的函数。它的工作是用好-march=native或一组标志(-march=<...>-mmmx等)替换-mno-avx,它们尽可能匹配当前的cpu。 i386arm的示例。 i386直接使用cpuid来检查每个可能的功能。 arm/proc/cpuinfo中检查CPU part行,并有一个表格,从CPU部分值映射到体系结构的一代,并直接在-march=<...>中使用。

为了好玩,我查看其他架构(我不熟悉它们)。

  • solaris on sparc:使用kstat界面
  • linux on sparc:使用/proc/cpuinfo
  • alpha:使用implver指令
  • darwin on rs6000:使用hw.cpusubtype系统调用
  • rs6000上的freebsd:使用硬编码powerpc
  • linux on rs6000:在/proc/self/auxv中检查自己进程的elf解释器中的平台值
  • aix on rs6000:使用_system_configuration(显然是全局结构)