JIT高速化の続き
OP_INVOKE_VIRTUAL_METHODを実装しました。インタフェースのメソッドの実行ができます。
先日後は膨大なキャスト命令だけだと書きましたが、大事なのを忘れてました。
あとはOP_INVOKE_DYNAMIC_METHODもまだなので、今日の晩辺り、それを書いておきます。
とりあえず、キャスト命令以外を実装していきますね。しばらく。
その後キャスト命令を一気に終えたいと思います。
高速化ができるかどうかですが確実に速くなると思います。
VM用のスタックにいちいち値を書き込んでいた頃より出力するコードの量が凄く減っています。LLVM用のスタックをJIT時に用意したので。
最適化もフェーズ全てONにして動いています。出力されるコードは本当に最適化が凄くかかって、短いコードとなってます。
やっぱり、僕はとりあえず手探りで書いて、その後もう一回書き直す方法でコーディングしないと駄目みたいで。一発で良いものは作れませんね。もし、プログラマーを仕事にすることがあれば、おんなじように2回書くようにしないと駄目だろうと思います。プロトタイプを作るってやつですかね。とりあえず、プロトタイプを書いてから、本番って感じで書くのが癖みたいです。
だって最初は使う命令を調べながら書くから、どうもわからないことだらけで、正解のコードは書けそうにないのですもの。
実際のプロはどうしているかは知りませんけど、僕のやり方は大体決まってきたかなと思います。
LLVM楽しいです。ホント作者って凄い人だと思います。gccの頃は一部のマニアだけのものだったネイティブコードの世界をオープンにしてくれたというか。JIT付きのインタプリタとかコンパイラとか、すごく簡単に作れるようになりました。Linuxより凄い業績じゃないかなぁ。コンピュータの世界にノーベル賞はないですけど、ほんとノーベル賞並の功績だと思います。尊敬します。