torutkのブログ

ソフトウェア・エンジニアのブログ

Java SE 6(Mustang)のWindows版コンパイルオプションを調査

Windows用のMustangのビルドにおける最適化オプションの定義を調べています。とりあえず手元に展開しているbeta65のソース用Makefileでは、j2se/make/common/Defs-windows.gmkに以下の定義があります。

VisualStudio 2003の場合、32bitモードでは、以下のマクロ変数定義が行われています。

CC_HIGHEST_OPT = -O2
CC_HIGHER_OPT = -O1
CC_LOWER_OPT = -O1
CC_NO_OPT = -Od

バリバリ最適化をするとしたら、以下のように書き換えます。

CC_HIGHEST_OPT = -Ox -Gs -GF -Gy -G7 -arch:SSE
  • Oxオプションは、-Ogityb2 -Gsと同じ意味とあります。
  • Og:グローバルな最適化を有効にする
  • Oi:組み込み関数を有効にする
  • Ot:コードのスピードを優先
  • Oy:フレームポインタの省略
  • Ob2:インライン展開のレベルを2
  • Gs:スタックチェックの呼びだしを制御
  • GF:同一文字列の削除
  • Gy:関数レベルのリンクの有効化
  • G7:Pentium4またはAthlon向けの最適化を行う(古いCPUでも動作はする)
  • arch:SSE:SSE有効

変更後VisualStudio 2003環境でビルドすると、以下のようなオプションが適用されています。(/Iは削除)

cl.exe /nologo /W3 /WX /Zi /D "IA32" /D "MSC_VER=1310" /MD /D _STATIC_CPPLIB
 /Ox /Gs /GF /Gy /G7 /arch:SSE /D "PRODUCT" /D "COMPILER1" /D "HOTSPOT_BUILD
_VERSION=\"1.6.0-beta-torutk-b65-1\"" /D "HOTSPOT_BUILD_USER=\"toru\"" /D "HOTSP
OT_RELEASE_VERSION=\"1.6.0-b65-1\"" /D "WIN32" /D "_WINDOWS" /D "VM_LITTLE_ENDIAN"
 /D "_JNI_IMPLEMENTATION_" /Fp"vm.pch" /Yu"incls/_precompiled.incl" /c