GCC编译器-march选项中未文档化的atom等参数有何作用?
GCC
-march 未文档化参数说明 GCC编译器支持-march=cpu-type编译选项,根据官方定义:
为指定cpu-type类型的处理器生成指令。与仅针对指定cpu-type优化代码的
-mtune=cpu-type不同,-march=cpu-type允许GCC生成仅能在指定处理器上运行的代码。除非另有说明,指定-march=cpu-type默认包含-mtune=cpu-type的效果。
官方文档列出的合法cpu-type选项里没有atom、corei7、corei7-avx和slm,但这些值作为-march=参数时GCC可正常运行,它们的具体作用如下:
atom:针对Silvermont架构之前的Intel Atom处理器(如Bonnell、Saltwell)生成指令,启用SSSE3、SSE4.1等该架构支持的指令集,同时适配Atom低功耗、顺序执行的特性做优化。corei7:对应初代Intel Core i7的Nehalem架构,启用SSE4.2、POPCNT等指令集,适配Nehalem的超标量乱序执行架构做代码生成与优化。corei7-avx:对应支持AVX指令集的Intel Core i7(Sandy Bridge架构),在corei7的基础上额外启用AVX指令集,允许生成256位向量操作的代码。slm:针对Intel Silvermont架构的Atom处理器(如Bay Trail、Cherry Trail),支持AVX、AES-NI等指令集,适配Silvermont的超标量乱序执行微架构做优化。
这些属于GCC保留的向下兼容别名,功能上等价于对应架构的正式参数(比如slm等价于silvermont),但未被官方文档收录,新代码建议优先使用文档明确标注的正式参数。
内容的提问来源于stack exchange,提问作者VL-80
相关产品推荐
相关产品推荐

