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