CPUTYPEの仕組み

make.confで設定するCPUTYPEの話。

make.confでは、コンパイラに対して通知するCPUTYPEを設定することができる(効果はさておき)。
そして、FreeBSDが認識するCPUTYPEは、/usr/share/examples/etc/make.confで確認できる。

$ uname -sr
FreeBSD 7.0-STABLE-200803

上記のシステム(ちょっと古いなあ)から抜粋すると;

#   Intel x86 architecture:
#       (AMD CPUs)      opteron athlon64 athlon-mp athlon-xp athlon-4
#                       athlon-tbird athlon k8 k6-3 k6-2 k6 k5
#       (Intel CPUs)    core2 core nocona pentium4m pentium4 prescott
#                       pentium3m pentium3 pentium-m pentium2
#                       pentiumpro pentium-mmx pentium i486 i386
#       (Via CPUs)      c3 c3-2
#   AMD64 architecture: opteron, athlon64, nocona, prescott, core2

ただし、上記はあくまでもFreeBSDが認識するというだけ。
実際には、このあと/usr/share/mk/bsd.cpu.mkで"翻訳"され、gccに渡される。
中身をのぞいてみると;

.  if ${CPUTYPE} == "nocona"
CPUTYPE = prescott
.  elif ${CPUTYPE} == "core" || ${CPUTYPE} == "core2"
CPUTYPE = prescott

現時点ではCPUTYPEをcore, core2にしてもnoconaとひっくるめてprescottにされてしまうという衝撃の事実。…まあ、そのうちbsd.cpu.mkもgccのバージョンに合わせてアップデートされることでしょう。

と、ここまで引っ張っておいて何だが、俺はCPUTYPEを設定していない。
どうも俺みたいな日曜FreeBSDユーザが調子に乗ってmake.confをいじると、後で絶対にはまるから。