このページでは、GCC における最適化オプションに関する情報をまとめています。 対象としているのは x86 系 CPU, GCC 3.0 系以降です。
GCC には以下の 3 つの各 CPU 向け最適化オプションがあります。
-march
-mcpu
より速いコードを生成可能。-mcpu
-march
と違い、同系列の CPU でも動作するようなコードを生成します。-mtune
-mcpu
の別名。
これらは、以下の表にある“CPU タイプ”と組み合わせて、-march=pentium2
の様に使います。
CPU タイプ | 説明 | 対応している GCC |
---|---|---|
i386 | Intel i386 とその互換 CPU | ---- |
i486 | Intel i486 とその互換 CPU | ---- |
i586 , pentium | Intel Pentium とその互換 CPU | ---- |
i686 , pentiumpro | Intel Pentium Pro とその互換 CPU | ---- |
pentium-mmx | Intel Pentium MMX とその互換 CPU | 3.1 系以降 |
pentium2 | Intel Pentium II (Covington, Mendocino) とその互換 CPU | 3.1 系以降 |
pentium3 | Intel Pentium III (Coppermine, Tualatin) とその互換 CPU | 3.1 系以降 |
pentium3m | Intel Pentium III (低電圧版?) とその互換 CPU | 3.4 系以降 |
pentium-m | Intel Pentium M とその互換 CPU | 3.4 系以降 |
pentium4 | Intel Pentium 4 (Willamette, Northwood) とその互換 CPU | 3.1 系以降 |
pentium4m | Intel Pentium 4 (低電圧版?) とその互換 CPU | 3.4 系以降 |
prescott | Intel Pentium 4 (Prescott) とその互換 CPU | 3.3 系以降 |
nocona | Intel Pentium 4 (64-bit 拡張あり) とその互換 CPU | 3.3 系以降 |
k6 | AMD K6 とその互換 CPU | ---- |
k6-2 | AMD K6-2 とその互換 CPU | 3.1 系以降 |
k6-3 | AMD K6-III とその互換 CPU | 3.1 系以降 |
athlon | AMD Athlon とその互換 CPU | 3.0 系以降 |
athlon-tbird | AMD Athlon (Thunderbird) とその互換 CPU | 3.1 系以降 |
athlon-4 | AMD Athlon 4 とその互換 CPU | 3.1 系以降 |
athlon-xp | AMD Athlon XP とその互換 CPU | 3.1 系以降 |
athlon-mp | AMD Athlon MP とその互換 CPU | 3.1 系以降 |
k8 | AMD Athlon 64 (K8) とその互換 CPU | 3.4 系以降 |
athlon64 | AMD Athlon 64 とその互換 CPU | 3.4 系以降 |
athlon-fx | AMD Athlon 64 FX とその互換 CPU | 3.4 系以降 |
opteron | AMD Opteron とその互換 CPU | 3.4 系以降 |
winchip-c6 | IDT Winchip C6 とその互換 CPU | 3.3 系以降 |
winchip2 | IDT Winchip2 とその互換 CPU | 3.3 系以降 |
c3 | VIA C3 とその互換 CPU | 3.3 系以降 |
c3-2 | VIA C3-2 とその互換 CPU | 3.4 系以降 |
でも実は、以下はそれぞれ一緒の効果を狙っているのかもしれません。
pentium3
, pentium3m
pentium4
, pentium4m
k6-2
, k6-3
athlon
, athlon-tbird
athlon-4
, athlon-xp
, athlon-mp
k8
, opteron
, athlon64
, athlon-fx
GCC には以下の拡張命令向け最適化オプションがあります。
オプション | 説明 | 対応している GCC |
---|---|---|
-mmmx | MMX | 3.1 系以降 |
-msse | SSE | 3.1 系以降 |
-msse2 | SSE2 | 3.1 系以降 |
-msse3 | SSE3 | 3.3 系以降 |
-m3dnow | 3DNow! | 3.1 系以降 |
また、内容的に重複するところがありますが、
SSE 命令を使って浮動小数点演算を行わせる -mfpmath=sse
も GCC 3.1 系以降から使えます。