2013-10-17 22 views
3

我知道一般建議使用-march = native(如果您正在爲您所在的機器編譯),以便gcc確定您的arch和cputype並生成最特定於機器的代碼,但它如何去做?gcc如何在x86上確定-march = native?手臂上?

它使用cpuid(無論是手臂還是x86)?在沒有cpuid-like指令的平臺上使用什麼技術?

回答

2

好問題。

我的直覺是,它會去檢查/proc/cpuinfo。實際上它取決於它已編譯運行的體系結構。好像host_detect_local_cpu是對此負責的功能。它的任務是替換-march=native無論是好-march=<...>或一組儘可能與儘可能當前CPU是標誌(-mmmx-mno-avx等)。 i386arm的示例。 i386直接使用cpuid來檢查每個可能的功能。 arm檢查在/proc/cpuinfoCPU part線中並且具有由一CPU部件值映射到生成的架構和直接在-march=<...>使用此表。

只是爲了好玩,我檢查了其他架構(我不熟悉它們)。

  • 的Solaris上sparc:使用kstat接口
  • 的Linux上sparc:使用/proc/cpuinfo
  • alpha:使用implver指令
  • 達爾文rs6000:使用hw.cpusubtype系統調用
  • FreeBSD的rs6000 :使用硬編碼powerpc
  • 上的Linux rs6000:在/proc/self/auxv檢查上rs6000在自己的進程
  • AIX的精靈翻譯平臺的價值:使用_system_configuration(顯然是一個全球性的結構)
相關問題