realforce

Gamer Book

木曜日, 11月 17, 2005

FreeBSD付属コンパイラの最適化オプション

私がFreeBSD4.xからFreeBSD5.xへ移行した際に、はまった点があります。 私は、最適化狂なので、下記のような設定を/etc/make.confに記述していました。
CFLAGS=-O2 -O3 -O6 -march=pentium4 -fomit-frame-pointer -mmmx -msse -msse2 -mfpmath=sse -ffast-math -fforce-mem -fforce-addr -funroll-loops -pipe
しかし、FreeBSD5.xへ移行した段階で、これが原因となりコンパイルエラーが続出していたのです。 これは 下記のように、 -fno-strict-aliasing オプションを付ければ解決するという問題でした。
CFLAGS=-O2 -O3 -O6 -march=pentium4 -fomit-frame-pointer -fno-strict-aliasing -mmmx -msse -msse2 -mfpmath=sse -ffast-math -fforce-mem -fforce-addr -funroll-loops -pipe
なお、FreeBSD6.0以降はCFLAGSのデフォルト値が、 CFLAGS?=-O2 -fno-strict-aliasing -pipe へと変更されたようです。

posted by Xune @ 20:43   links to this post 2 comments

2コメント:

At 2005年11月18日金曜日 16:31:00 JST, Anonymous otsune said...

私は-marchはCPUTYPEに指定しています。
また-O2 -O3 -O6は単に最大レベルの-O6に成るだけだと思います。またgccだったら-O2が無難かなぁ?

 
At 2005年11月19日土曜日 0:21:00 JST, Blogger gardiac said...

-marchについては、CPUTYPEに指定する方がスマートですね。
-O2 -O3 -O6と指定しても、FreeBSD付属のgccの場合は-O3となりますね。-O6は今では使っていないPentiumGCC用に設定していた名残だったりします。

ご指摘のとおり、-O2以下だと何ともないプログラムでも、-O3と指定するとセグメントフォルトを連発してくれる場合も結構あったりします。その場合は下記のようにして個別に指定していたのですが、どうなんでしょうね?
.if ${.CURDIR} == "/usr/ports/editors/emacs"
CFLAGS=-O -pipe
.endif

 

コメントを投稿

この記事へのリンク一覧:

リンクを作成 | バックリンクについて | バックリンク一覧

Previous Posts