[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 のマスクをかけている
ように思えます(私もアセンブラ良く分かってないので確証は無いのですが)。
やっぱりこのマスクがかからないのはコンパイラがおかしいような気がするの
ですが。