ハンドインライン展開

今日はひたすら手作業でインライン展開してました。
多分ですが、携帯Javaのバーチャルマシンが自動でインライン展開するようになるのはまだ先の話なんではないかと思います。

アドレッシングモードに応じて有効アドレスの計算をするメソッドと、6502のそれぞれの命令に対応しているメソッドを、全部switchの中に展開しました。

激しく単純作業でしたが、手間かけただけの効果はあったみたいです。

それから、エミュレーションからリコンパイルされたコード実行に戻るときの処理で、新しい方法を思いついたのです。
これが単純な割にはなかなかの効果がありまして、ぐっと速くなりました。

そんなこんなやってたら、6502の1フレーム分の処理がもう少しで0.1msを切りそうなところまできました(Core2duo @ 2GHzにて)。

携帯Javaだと最適化のポイントがまた違うので、逆アセしたコードみながら細かい所を詰めていきます。
携帯だとコードサイズの制約もキツいので、あんまり使わない命令はインライン展開したのをやっぱりやめて、普通のメソッド呼び出しに戻すのも検討したほうが良さそうです。