1.3 【最適化の罠?】
最後に更新してからかなり長い時間がたってしまった。年もあけてるし。
まずは何事もなく2000年を迎えることができ、めでたい。Phutのフリーズ問題の解決はまだできていないが、今世紀中には解決できるはず(笑)。IconPartyの1.0もまだだけど、これは3周年までにがんばると。とりあえず、本年もよろしく。
IconPartyのWindows用アイコン保存ルーチンをいじっていたら、妙な問題を発見。元のアイコンが'icl8'、'icl4'、'ics8'、'ics4'のすべてを含んでいない場合に保存されたデータがおかしいというもの。ソースを見るかぎりでは特に問題はなく、しかもデバッグ用のプロジェクトの方は正常に動いている。また、保存するごとにファイルサイズが違ったりしてなかなか気持ちの悪い症状だ。
デバッグ用のプロジェクトは正常に動いているため、CWのデバッガでは問題の箇所が特定できない。そこで、MacsBugに落として調べてみることにした。すると、どうもルーチンの最初に配列で確保しているアイコンの存在をチェックするフラグのアドレスがおかしくなっているらしい。さらに細かくチェックしてみると、なんと、ループの終わりにある配列を参照するアドレスをずらす部分で、「addq.w」という命令を発見した。ここは「addq.l」でなくてはならないはず……。
試しにデバッグ用のプロジェクトのコードを逆アセンブルしてみると、こちらは素直に添字をインクリメントして配列にアクセスしている。それならば動くはずだ。ということは、指定している最適化オプションのどれかに問題があるということか……。
いろいろ調べてみた結果、「Global Optimizations」の「Reduction In Strength」のチェックをはずすと問題が起こらないことがわかった。CWのドキュメントによれば、これをチェックした場合、ループ内の乗算式を追加インストラクションで置換するというものらしい。なるほど、たしかにそういう最適化が行われているようだ。が、あの「addq.w」はいただけない。コンパイラのバグなのかなぁ……。Pro4とかPro5でどうなるのかわからないけど。
他にも問題が起こっているかも知れないので「Reduction In Strength」のチェックははずすことにした。しかしこういう問題が起こるかも知れないことを考えると最適化オプションをむやみに使うのはやめた方がいいのかも知れないな。Phutの問題もひょっとしたらそのあたりにあるのかも知れないし。
で、Phut 1.15b13をリリース。最適化オプションをいっさい使わずにコンパイルしてみたもの。また、LDEFに細かいバグを見つけたのでそれも修正してある。これで解決してくれればうれしいのだけど……。
IconParty。背景色をどこかに表示する機能をつけようかなと思っているのだけどどこがいいかなぁと。第一候補は、ブレンドパレットの上部を左右に分割かな。どっちがどっちかわかりにくいかもしれないからそのへんも考えないといけないけど、デザイン的にはあまり変更がなくて楽だ。第二候補は、情報パレットを拡張して前景色と一緒に表示か。そうするとブレンドパレットの一番上はいらなくなるからすっきりするかもしれない。逆に情報パレットはごちゃごちゃするけど。
あとは、情報パレットのデザインも検討中。今のバージョンでは鉛筆ツールと消しゴムツールの太さを両方表示しているけど、実際には選択しているツールについての情報が表示されれば十分かなと。鉛筆ツールなら太さと不透明度、消しゴムツールなら太さといったような感じで。他のツールが選ばれている時になにを表示するかを考えないといけないけど、おもしろそう。スポイトツールの情報とか思いつかないけど(笑)。バケツツールは鉛筆ツールの不透明度とは別に不透明度を設定できてもいいかなぁ。選択ツールは投げ縄ツールにするオプションがあるとか。
野望はつきないけど、今日のところはこんなもんで。
|