如何确定 gcc 支持哪些架构?

Bee*_*ope 6 performance x86 gcc

GCC 支持-march允许您指定目标架构的开关 - 允许它调整该平台的指令序列以及使用该平台上可能可用但在“默认”或基本版本上不可用的指令架构。

例如,-march=skylake将告诉编译器以 Skylake CPU 为目标,包括使用 Skylake 上可用的指令集,例如 AVX2。

如何判断-march本地版本gcc支持的值?当传递无效参数时,较新版本有助于列出有效参数,但较旧版本不会。

Pet*_*des 12

对于 gcc7 及更高版本,gcc 将打印它支持的值作为错误消息的一部分。

\n\n
$ gcc -E -march=help -xc /dev/null\n# 1 "/dev/null"\ncc1: error: bad value (\xe2\x80\x98help\xe2\x80\x99) for \xe2\x80\x98-march=\xe2\x80\x99 switch\ncc1: note: valid arguments to \xe2\x80\x98-march=\xe2\x80\x99 switch are: nocona core2 nehalem corei7 westmere sandybridge corei7-avx ivybridge core-avx-i haswell core-avx2 broadwell skylake skylake-avx512 bonnell atom silvermont slm knl x86-64 eden-x2 nano nano-1000 nano-2000 nano-3000 nano-x2 eden-x4 nano-x4 k8 k8-sse3 opteron opteron-sse3 athlon64 athlon64-sse3 athlon-fx amdfam10 barcelona bdver1 bdver2 bdver3 bdver4 znver1 btver1 btver2\n
Run Code Online (Sandbox Code Playgroud)\n\n

我检查了 Godbolt和 x86 gcc6.x 以及更早的版本,只是说 error: bad value (invalid) for -march= switch甚至与-v.

\n\n

它也不适用于 clang5.0 或 ICC18。

\n\n
\n\n

这是特定于目标的:ARM gcc6.3 确实会生成受支持值的列表-march,或-mcpu=.

\n