[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: egcs bug?
青木@kinotropeです。
追加情報です。
>>>>>> Thu, 4 Mar 1999 19:38:21 +0900,
"TA" == Toshimi Aoki wrote:
TA> PostgreSQLのコンパイルで最適化オプション (-O, -O2)を付けると正常に
TA> 動作しない件をちょっと調べてみました。
TA>
TA> 問題を簡単にしていくと、下記のようなものになると思います。
TA> % cat i.c
TA> char
TA> int2eq(short arg1, short arg2)
TA> {
TA> return arg1 == arg2;
TA> }
TA>
TA> 最適化をかけた場合、 int2eq()は short ではなく int で処理している
よ
TA> うです。
TA> cc -S -O i.c すると、
TA> int2eq:
TA> xor 3,3,4
TA> subfic 0,3,0
TA> adde 3,0,3
TA> blr
TA>
TA> のようになります。
PostgreSQLのMLで聞いてみたところ、Linuxではうまく行くようです。
Message-Id: <199903050617.PAA03432@srapc451.sra.co.jp>
To: pgsql-jp@sra.co.jp
From: Tatsuo Ishii <t-ishii@sra.co.jp>
Date: Fri, 05 Mar 1999 15:17:15 +0900
石井です。
MkLinux(egcs-2.90.25 980302 (egcs-1.0.2 prerelease)) では
int2eq:
rlwinm 3,3,0,0xffff
rlwinm 4,4,0,0xffff
xor 3,3,4
subfic 0,3,0
adde 3,0,3
blr
LinuxPPC では
int2eq:
extsh 3,3
extsh 4,4
xor 3,3,4
subfic 0,3,0
adde 3,0,3
blr
となりますね。いずれにしても、引数に対して 16bit のマスクをかけている
ように思えます(私もアセンブラ良く分かってないので確証は無いのですが)。
やっぱりこのマスクがかからないのはコンパイラがおかしいような気がするの
ですが。
- References:
- egcs bug?
- From: Toshimi Aoki <toshi@kinotrope.co.jp>