キャスト結果は右辺値
コンパイラのバージョンを上げたところ、ライブラリチームが書いたコード中にあった、キャストした結果に対してアドレスをとるコードがコンパイルエラーになった。具体的には、こんなコード。
foo** pp = &const_cast<foo*>(p);
foo** pp = const_cast<foo**>(&p);
foo** pp = &const_cast<foo*&>(p);
コンパイラのバグ
チーム内のプログラマが、特定の条件で変数の値がおかしくなるという問題に出くわし、原因を究明できずに悩んでいたので、私の方で引き受ける。検証の結果、コンパイラのバグと判明。遅延分岐スロットに積算命令を 2 つ詰め込もうとしてる。これは、分からなくても仕方ないな……。
再現条件を詰めて、コンパイラベンダに報告。これで今年二件目。まだまだ、このバージョンのコンパイラは信用ならんね。ベータ版だから良いけど。
定数値による除算最適化
その問題追及中にアセンブリコードを読んでいて、定数値による整数除算が変わったコードに展開されていることに気づく。3 を除数とする演算、素直に考えれば 3 という値をレジスタに読み込んだ上で CPU 内蔵の除算命令を呼び出すところだが、0x55555556 というマジックナンバーとビット演算を使って結果を出している。
gcc のソースを読んでコメント発見。google で検索したら整数演算に関しては様々なテクニックがあるようで、Hacker's Delight で定数値による除算に関する記述を見つける。
邦訳された書籍 があるみたいなので、注文しておこう。
スタンディングミーティング
復活。毎朝やるよ。
モーション打ち合わせ
モーションデザイナさんからの提案について、どういう形で取り扱うかという話を。かなり詳細な提案を頂いたのだけど、現状だとまだ検討できる状況にはないと判断して、そのあたりの話をしに行く。
提案を棚上げ、あるいは握りつぶすような形になってしまい申し訳ないが、今の段階であまり詳細に立ち入ると、最も優先すべき作業が立ち往生しかねないので。
移動シーケンスについては早めに見られた方が良いだろうということで、可及的速やかに暫定の(私が適当に決めた)仕様のものを実装して、実際に見てもらう方向で。何も土台がないところで話してると、地に足がつかない展開になりがち。
投稿者 issei : 2004年12月16日 23:41 | トラックバック