[Uclinux-h8-devel] Re: 64bit swap in H8/300H gcc 3.4.2

Zurück zum Archiv-Index

Kazu Hirata kazu****@cs*****
2004年 10月 7日 (木) 08:37:54 JST


高岡様、

> #佐藤様、平田様、御無沙汰しております^_^;。

こちらこそ、ご無沙汰しております。

> 64bitの値を上下逆にしたくて、以下のように書いてgcc 3.4.2でコンパイルす
> ると、無駄に思えるコードが出てきます。
> 
> unsigned long long swap64 (unsigned long long v) {
>         return (v << 32) | (v >> 32);
> }
> 
> unsigned long long val64;
> 
> void foo (void) {
>         val64 = swap64(12345678ULL << 32 | 98765432ULL);
> }
> 
> h8300-hms-gcc -mh -mint32 -fomit-frame-pointer -O2 -S でコンパイルしま
> した。
> 
> 32や16bitで同様のコードを記述すると、xorを使った素晴らしいコードが出力
> されるんですが...。long longも何とかなりますでしょうか。宜しく御検討下
> さい。

H8/300 ポートの 64-bit 関連はまったくといって言いほど最適化されていま
せん。もっとも、ADDX の 32-bit 版がなかったりとか、命令セットが 64-bit 
化のやる気を失わせていたりますが…。64-bit の特定の演算を最適化するこ
とも考えてみます。uClinux でも一部、64-bit 系の演算が行われているよう
なので、ちょっとびびっております。

> #H8/300Hのgdbも平田様がメンテされているのでしょうか?

gdb はやっておりません。

Kazu Hirata



Uclinux-h8-devel メーリングリストの案内
Zurück zum Archiv-Index