ＦｒｅｅＢＳＤでのＣＰＵＴＹＰＥの指定方法

# はじめに
ＣＰＵＴＹＰＥの指定方法を調べてたら[^備考１]、そういえば日本語ドキュメントを見ないな…と思い出して調査メモでも残そうと一念発起してみました。

[^備考１]: `/usr/share/mk/bsd.cpu.mk`

この指定は基本的には継ぎ足しなので、`bsd.cpu.mk` [^備考１]の差分をＯＳバージョン毎に調べてみようと思ってます。取り急ぎ調べたバージョン明記するので参考にしてください。また大文字小文字の区別はあります。

最新のＣＰＵを使用中で、この表に載ってない場合は、一番近い世代のＣＰＵＴＹＰＥを指定してください。大抵のＣＰＵは過去のアーキテクチャの機能を引き継いでる[^備考２]ので、下手なコードは出力されないはずです。

[^備考２]: 希に原点回帰するアーキテクチャはある。

さて。ＣＰＵＴＹＰＥとは何か、について、`/etc/make.conf` で使用中のＣＰＵをこの変数で指定することで、コンパイル時にそのＣＰＵに最適化されたコードが出力される、というものです。パッケージシステムで運用してる人には無関係となります[^備考３]。

[^備考３]: パッケージビルドシステム内で指定されたＣＰＵＴＹＰＥでコンパイルされるため。

## 注意事項
- ここでリストアップされた、古いＣＰＵアーキテクチャ向けにコンパイルできることを保証するものではありません。
- 特にコンパイラがＧＣＣ４からＬＬＶＭ移行に辺り、それまで動いていたＣＰＵＴＹＰＥが動かなくなってる可能性があります。
- １０．０－Ｒから調査しています。それより古いバージョンは調査しません。
- 他のアーキテクチャについてはどうしよう。何か複雑なのと前後関係[^備考４]が分からないから説明しにくいです。
- 他のアーキテクチャだと消えてる（ＩＡ６４、ＳＰＡＲＣ６４）とか増えた（ＡＡＲＣＨ６４、ＲＩＳＣＶ）とか色々。

[^備考４]: 上方互換、下位互換の関係。

# ＣＰＵＴＹＰＥ（ａｍｄ６４環境およびｉ３８６環境）
※調査済みバージョン： 13.0、12.2、12.1、12.0、11.4、11.3、11.2、11.1、11.0、10.4、10.3、10.2、10.1、10.0

- 順番はなるべく最新の物が上に来るよう調査したい
- ａｍｄ６４／ｉ３８６両用ＣＰＵとｉ３８６のみのＣＰＵは分離したい
- ＳＳＥ３対応した時期の `Opteron` って何だっけ？とか、`Blue Lightning` とか `Cyrix` とか `NexGen` とか溢れる思い出はどこに行った！…とか。

| 導入バージョン | ＣＰＵＴＹＰＥ（エイリアス名）      | ＣＰＵコード名（アーキテクチャ名） | 備考                                                         |
| -------------- | ----------------------------------- | -----------------------------------| ------------------------------------------------------------ |
| 13.0           | `tigerlake`                         | Intel Tiger Lake                   |                                                              |
| 13.0           | `cooperlake`                        | Intel Cooper Lake                  |                                                              |
| 13.0           | `cascadelake`                       | Intel Cascade Lake                 |                                                              |
| 11.3 / 12.1    | `icelake-server`                    | Intel Ice Lake-SP                  |                                                              |
| 11.3 / 12.1    | `icelake-client`                    | Intel Ice Lake                     |                                                              |
| 11.2 / 12.1    | `cannonlake`                        | Intel Cannon Lake                  |                                                              |
| 11.3 / 12.1    | `skylake-avx512`（`skx`）           | Intel Skylake]                     |                                                              |
| 11.2           | `skylake-avx512`                    | Intel Skylake]                     |                                                              |
| 11.0           | `skylake`                           | Intel Skylake                      |                                                              |
| 11.0           | `broadwell`                         | Intel Broadwell                    |                                                              |
| 11.0           | `haswell`（`core-avx2`）            | Intel Haswell                      |                                                              |
| 11.0           | `ivybridge`（`core-avx-i`）         | Intel IvyBridge                    |                                                              |
| 11.0           | `sandybridge`（`corei7-avx`）       | Intel SandyBridge                  |                                                              |
| 10.0           | `core-avx-i`                        | Intel IvyBridge                    |                                                              |
| 10.0           | `corei7-avx`                        | Intel SandyBridge                  |                                                              |
| 13.0           | `znver2`                            | AMD Zen2                           |                                                              |
| 11.2           | `znver1`                            | AMD Zen                            |                                                              |
| 11.0           | `bdver4`                            | AMD Excavator                      |                                                              |
| 10.1           | `bdver3`                            | AMD Steamroller                    |                                                              |
| 10.0           | `bdver2`                            | AMD Piledriver                     |                                                              |
| 10.0           | `bdver1`                            | AMD Bulldozer                      |                                                              |
| 13.0           | `btver2`                            | AMD Jaguar                         |                                                              |
| 10.0           | `btver1`                            | AMD Bobcat                         |                                                              |
| 11.3 / 12.1    | `tremont`                           | Intel Tremont                      |                                                              |
| 11.3 / 12.1    | `goldmont-plus`                     | Intel Goldmont+                    |                                                              |
| 11.2           | `goldmont`                          | Intel Goldmont                     |                                                              |
| 11.0           | `silvermont`（`slm`）               | Intel Silvermont                   |                                                              |
| 10.1           | `slm`                               | Intel Silvermont                   |                                                              |
| 11.0           | `bonnell`（`atom`）                 | Intel Bonnell                      |                                                              |
| 10.0           | `atom`                              | Intel Bonnell                      |                                                              |
| 11.2 / 12.1    | `knm`                               | Intel Knights Mill                 |                                                              |
| 11.0           | `knl`                               | Intel Knights Landing              |                                                              |
| 10.0           | `penryn`                            | Intel Penryn                       |                                                              |
| 10.0           | `core2`                             | Intel Core2                        |                                                              |
| 10.0           | `westmere`                          | Intel Westmere                     |                                                              |
| 10.0           | `nehalem`（`corei7`）               | Intel Nehalem                      |                                                              |
| 10.0           | `yonah`                             | Intel Yonah                        |                                                              |
| 10.0           | `prescott`（`core`）                | Intel Prescot                      |                                                              |
| 10.0           | `nocona`（`prescott`）              | Intel Nocona                       | ａｍｄ６４環境では `prescott` は `nocona` として取り扱われる |
| 10.0           | `pentium4`（`p4`）                  | Intel Pentium 4                    |                                                              |
| 10.0           | `pentium4m`（`p4m`）                | Intel Pentium 4M                   |                                                              |
| 10.0           | `pentium3`（`p3`）                  | Intel Pentium 3                    |                                                              |
| 10.0           | `pentium3m`（`p3m`）                | Intel Pentium 3M                   |                                                              |
| 10.0           | `pentium-m`（`p-m`）                | Intel Pentium M                    |                                                              |
| 10.0           | `pentium2`（`p2`）                  | Intel Pentium 2                    |                                                              |
| 10.0           | `pentiumpro`（`i686`）              | Intel Pentium Pro                  | ＦｒｅｅＢＳＤ１３／ｉ３８６の最低ライン                     |
| 10.0           | `pentium-mmx`（`i586/mmx`）         | Intel Pentium MMX                  |                                                              |
| 10.0           | `pentium`（`i586`）                 | Intel Pentium                      |                                                              |
| 10.0           | `i486`                              | Intel i80486                       |                                                              |
| 10.0           | `i386`                              | Intel i80386                       |                                                              |
| 10.0           | `opteron-sse3`                      | AMD Opteron                        |                                                              |
| 10.0           | `athlon64-sse3`                     | AMD Athlon64                       |                                                              |
| 10.0           | `k8-sse3`                           | AMD K8                             |                                                              |
| 10.0           | `opteron`                           | AMD Opteron                        |                                                              |
| 10.0           | `amdfam10`（`barcelona`）           | AMD K10                            |                                                              |
| 10.0           | `athlon64`                          | AMD Athlon64                       |                                                              |
| 10.0           | `athlon-fx`                         | AMD Athlon FX                      |                                                              |
| 10.0           | `athlon-mp`                         | AMD Athlon MP                      |                                                              |
| 10.0           | `athlon-xp`                         | AMD Athlon XP                      |                                                              |
| 10.0           | `athlon-4`                          | AMD Athlon 4                       |                                                              |
| 10.0           | `x86-64`                            | AMD Opteron                        | ＦｒｅｅＢＳＤ／ａｍｄ６４の最低ライン                       |
| 10.0           | `k8`                                | AMD K8                             |                                                              |
| 11.0           | `athlon`（`k7`）                    | AMD Athlon                         |                                                              |
| 10.0           | `athlon`                            | AMD Athlon                         |                                                              |
| 10.0           | `athlon-tbird`                      | AMD Athlon Thunderbird             |                                                              |
| 10.0           | `k7`                                | AMD K7                             |                                                              |
| 10.0           | `k6`                                | AMD K6                             |                                                              |
| 10.0           | `k6-2`                              | AMD K6-2                           |                                                              |
| 10.0           | `k6-3`                              | AMD K6-3                           |                                                              |
| 10.0           | `geode`                             | NSC Geode                          |                                                              |
| 10.0           | `k5`                                | AMD K5                             | `pentium` と同じ扱い（エイリアスでない点は不明）             |
| 10.0           | `crusoe`                            | Transmeta Crusoe                   |                                                              |
| 10.0           | `c7`                                | VIA C7                             | `c3-m` と同じ扱い                                            |
| 10.0           | `c3-2`                              | VIA C3-2                           |                                                              |
| 10.0           | `c3`                                | VIA C3                             |                                                              |
| 10.0           | `winchip2`                          | Centaur WinChip 2                  |                                                              |
| 10.0           | `winchip2-c6`                       | Centaur WinChip C6                 |                                                              |