僕の備忘録(PC、UN*X、ネットワーク関連が中心)なんです。
自分の書いたところは適当(な時とか)に書き換えますので御了承を。
Linux Kernel2.6では 2.6.XX-hoge の"-hoge"
をmake menuconfig で指定できたが、2.4
ではどうするのだろうか。
CONFIG_LOCALVERSIONなんてのはなかった。
環境変数
で伝えられるような気もしたが、さしあたりは
Plamoの真似をして、/usr/src/linux/Makefileに追記して
おいた。
VIA C3プロセッサが、i686を謳っていながら
互換性が怪しい(特にCMOVインストラクション
が実装されていない)話を思い出した。
/.Jだとか、その
リンク先だとか。
GNU GCCで
i686向け
に
最適化
するとC3で動作しない
バイナリが出来てしまうという。
Plamo-4.0.3の力を借りて、ちょっと追試してみる。
バージョンは大体こんなとこ。
kernel: 2.4.27
Glibc: 2.3.3-i586
GCC: 3.3.6
そしてGNU Screen-4.0.2。
まずGNU Screenを何も考えずにmakeし、 当たり前に動作することを確認。
次に、最前のバイナリをscreen-normalとリネームして取っておき、make clean してから、
$ CFLAGS="-march=i686 -O3" ./configure && make する。
まずCPU情報。
$ uname -m i686 $ cat /proc/cpuinfo processor : 0 vendor_id : CentaurHauls cpu family : 6 model : 7 model name : VIA Samuel 2 stepping : 3 cpu MHz : 799.886 cache size : 64 KB fdiv_bug : no hlt_bug : no f00f_bug : no coma_bug : no fpu : yes fpu_exception : yes cpuid level : 1 wp : yes flags : fpu de tsc msr cx8 mtrr pge mmx 3dnow bogomips : 1595.80
次いで不動作確認。
これもscreen-i686-O3とリネーム。
$ ./screen-i686-O3 Illegal instruction $ echo $? 132
最後に逆アセンブル。
$ objdump -c screen-normal | grep cmov | wc -l 0 $ objdump -c screen-i686-O3 | grep cmov | wc -l 583
おまけ。CFLAGS="-march=i686" だけ、もしくは
CFLAGS="-O3"なんかの場合も、ちゃんと
動作する。cmovもないらしい。
最適化が"-march=i686 -O"だけでも動かなかった。
cmovをgrepしたら、288に減ってはいたが。
VIA C5P(Nehemiah)以降はcmovをサポートしているそうな。
<後記>
objdump -c な筈がない。-d だった。
</後記>
<後記>
元ネタがあった(ISO2022-JPらしい)
</後記>
今度はIntelのCPUでも追試してみた。
PentimuM。
i686向けに最適化されたscreenは動く。
最適化オプションを"-mcpu=petium4 -O3"にしても
動いた。こちらではcmov(/proc/cpuifoには出てきた)を
使ってる様子はなかった。
あれ、-mcpu=pentium4 と -march=pentium4は別なのか?
前者で作ったバイナリは(i686最適化で動かなかった)
Pentium166MHzな
Plamoで動く。後者では動かない(それにしても
make遅い...)。
-march=pentium4するとcmovいっぱい含んでる。
これはPentiumMで動いた。
$ man 1 gcc (ry -mcpu=cpu-type Tune to cpu-type everything applicable about the generated code, except for the ABI and the set of available instructions. (ry -march=cpu-type Generate instructions for the machine type cpu-type. The choices for cpu-type are the same as for -mcpu. Moreover, specifying -march=cpu-type implies -mcpu=cpu-type.
いつ登録したかもう忘れたが、
昨年も一回メールが届いているから、
2年以上は経っている筈だ。
登録情報を公開してもいいんだが、spamが今以上に飛んで来るのも厭なのでやめとく。
リンクはご自由にどうぞ。でもURLや内容が変った場合はあしからず。