Gマイナー志向

とくに意味はありません

gcc -march=nativeが生成する最適化オプション

gcc 4.2以降、-march=nativeのオプションを与えると、CPUに合わせた最適化オプションが得られるようになった(IA-32/x86-64のみ)が、複数種のCPUが混在しているdistcc環境では利用できない。

なので、-march=nativeが生成している最適化オプションを調べてみた。手抜きスクリプトはこんな感じ。

#!/bin/sh

CC="gcc"
OPT="-march=native"
NATIVE=$(echo | ${CC} -E -v ${OPT} - 2>&1 | grep cc1)
NOARCH=$(echo | ${CC} -E -v - 2>&1 | grep cc1)

for native in ${NATIVE} ; do
        FOUND=0
        for noarch in ${NOARCH} ; do
                if [ "${native}" = "${noarch}" -a "${native}" != "${OPT}" ] ; then
                        FOUND=1
                        break
                fi
        done
        if [ ${FOUND} -eq 0 ] ; then
                echo -n "${native} "
        fi
done
echo

以下はどれもgcc-4.3.2(gentoo)での実行結果

x86_64 Intel(R) Core(TM)2 Duo CPU L7300 @ 1.40GHz GenuineIntel
-march=core2 -mcx16 -msahf --param l1-cache-size=32 --param l1-cache-line-size=64 -mtune=core2
x86_64 Intel(R) Atom(TM) CPU 330 @ 1.60GHz GenuineIntel
-march=core2 -mcx16 -msahf -mtune=core2
i686 Intel(R) Atom(TM) CPU N270 @ 1.60GHz GenuineIntel
-march=prescott -msahf

N270だと-mtuneは出力されないのね。理由は不明。