x86_64の命令サポート範囲
Ubuntuで動かなかったのはUbuntuの問題ではなく、configureがx86_64 CPUに関して常にSSE3の存在を仮定することにあった。実際には、x86_64であることはSSE2までしか保証しない。(要するに、通常のシチュエーションでは-msseとか-mfpmath=sseは明示的に指定する必要は無い。これらはarchがx86_64ならば自動的に含まれる。)
もっとも、x86_64であってSSE3を装備していないCPUは殆ど無い(初期のAthlon64だけが当てはまる)ため、切り捨てるという選択も有りうる。
x86?64*) arch=x86_64 MOSH_OPTS="-O3 -momit-leaf-frame-pointer -fomit-frame-pointer -msse3 -mfpmath=sse"
ちなみにskymoshでは現在のところmoshと同様の最適化オプションを与えているが、変更予定 :
- 要求されたとき(specにcompiler-native指定)は-march=native (これはgcc4.2以降でしか使えない。)
- 要求されないときのデフォルトは指定無し(-mtune=generic -pipe -O3のみ)
- -march=i686くらいは入れたほうが良いのかも。ディストリビューションによってはデフォルト。
- skymoshの生成するCモジュールは-combineを使って一度にコンパイル
これらの変更は各ディストリビューション向けのバイナリパッケージの生成を意図している。
個々の最適化フラグの明示は良い結果を招くこともあれば悪い結果を招くことも有る。
他に気になっているのは :
- global common subexpression eliminationはcomputed gotoを使うとより悪い結果になることがある
- i386には-minline-all-stringopsのようなmemcpyに関わる最適化がいくつかある