Clover2開発日誌

Clover2というJavaのように静的な型を持つRubyのようなコンパイラ+仮想マシンの開発日誌です。LLVMでJITもします。https://github.com/ab25cqにて開発しています。

JIT高速化の続き

現在./configure --with-jitは有効ではありません。 キャスト命令のJIT化をはじめました。LLVM上では複数の命令が同じ命令として扱えるので、かなり早く終わりそうです。 来週中?現職を辞める前には終わるかもしれません。 来週は忙しいですが、コーディン…

JIT高速化の続き。

現在./configure --with-jitは動きません。 まだキャスト以外の命令が残ってました。今度こそ残りはキャスト命令のみとなります。 7月末までにはリリースできそうです。それで、本当にのらプログラマー引退すると思います。拡張ライブラリを書けるようにした…

JIT高速化の続き。

現在./connfigure --with-jitは動きません。 とりあえず、キャスト命令以外のJITの命令は終わりました。 結構多かったです。 後はぼちぼち膨大な数があるキャスト命令を終えていきます。 どれくらい速くなっているか、楽しみです。

LLVM高速化の続き

現在./confiugre --with-jitは動きません。 とりあえず、だいぶ進んでます。キャスト以外の命令はほとんど終わりですかね。後はアドレスを取る命令辺りかな。 OP_INVOKE_DYNAMIC_METHODも動いてます。 今回のJITはVMのスタックを使わずにLLVM用のスタックを…

JIT高速化の続き

OP_INVOKE_VIRTUAL_METHODを実装しました。インタフェースのメソッドの実行ができます。 先日後は膨大なキャスト命令だけだと書きましたが、大事なのを忘れてました。 あとはOP_INVOKE_DYNAMIC_METHODもまだなので、今日の晩辺り、それを書いておきます。 と…

JITの高速化の続き

とりあえず、演算子は全てサポートしたはずです。 ただテストがまだです。 前書いたものから基本的にはコピーアンドペーストしただけでしたので、量だけ多くて疲れました。 ポインタ関係の演算と浮動小数点の演算辺りにバグがありそうです。ポインタを使った…

JITの高速化の続き

フィールドのロードができるようになりました。 まだまだ道のりは長いです。 LLVMにもようやく慣れてきたところです。 結構使いやすいかもしれません。セグフォが出るとバグを探すのが難しいですが。エラーメッセージ出してくれればいいんですが 大体セグフ…

JITの高速化の続き

現在./configure --with-jitは動きません。 ローカル変数が定数として扱われていたため最適化がかかりfor文などが動かなかったバグがありましたが、修正しています。 ローカル変数はマシーンスタックに確保するようにしました。 LLVMって最適化が凄くて出力…

JITの高速化の続き

現在./configure の--with-jitは有効じゃありません。 とりあえず、今回の収穫はLLVMでのグローバル変数のアクセスの仕方がわかったことと、構造体のフィールドのアクセスの仕方がわかったことです。 高速化は順調です。だいぶ速くなると思います。6月末ま…

JITのルーチンの書き直し中

現在JITは有効ではありません。--with-jitは./configureに付けないでください。 LLVM用のスタックを用意してLLVMの最適化がかかるように改造中です。今のところ、メソッドコールと一部の演算子、throwなどは動いてます。 一度書いたルーチンを流用してでの書…

LLVMのルーチンを書き直してます

高速化のためにLLVMのJITのルーチンを書き直しています。 完全にフルスクラッチからではありませんが、スタックの値をVMのスタックではなくLLVMのスタックを用意して、そこの値を使っています。1+1など単純な計算は最適化されて2とされるでしょう。 今のまま…

まだだ、まだ終わらんよ。

やっぱり、放っておけなくて速度アップのための処理を書いています。 これで速くならなかったら、本当に諦めます。 処理の結果を毎回VMのスタックに書き込むのをやめて、LLVM用のスタックを用意して、そこに書き込むようにしています。 VMのスタックの値が必…

version 1.5リリース

JITが完成しています。メソッド名にjit指定はいりません。内部的に何回か呼ばれたメソッドはJITされます。 ただし、速度の向上は微妙に速くなった程度です。あまり期待しないでください。 さて、やけ酒飲んで。明日からまた仕事に備えるか。 まあ、僕の冒険…

JITいらないです。

--with-optimizeの方が重要です。--with-debugだと17秒かかる処理が--with-optimizeで3秒程度になります。この処理の場合、とりあえず、JITしても速度は変わりません。ループ以外のところだと逆に実行時のコンパイルに時間がかかり遅くなります。 ループで非…

JITのデバッグが終了しました。

JITのデバッグが終了しました。バグは多分無いと思います。 デバッグに2週間、作成に2ヶ月半くらいなので、3ヶ月でLLVMでのJITが成功しました。思ったよりは時間がかからなかったですね。 LLVMに関してはまだまだ発展中なので、なかなか使いこなすのが難…

まだJITにバグがあります

まだまだです。6月末までにはなんとかしたいと思います。

バグフィックスは続く

メソッドコールとif文のバグを直しました。 String.equalsはとりあえず、JIT化出来て動いています。 徐々に基礎ライブラリをJIT化して、ついでにバグフィックスしていきたいと思います。

まだまだJITにバグが見つかってます

とりあえず、基礎ライブラリをJIT化していってバグをなくしたいと 思います。 すごくたくさん、バグが出てます。メソッドをjit指定するたびに バグが出る感じです。 申し訳ないですが、JIT無しでとりあえず、使ってみてください。

JITのバグを修正。

if文とかfor文とかをネストすると落ちるバグを修正。 まだJITにはバグがあると思いますので、ぼちぼちデバッグしていきます。 しばらくはバグが有ることを許してください。 申し訳ないです。JITなしだと、とりあえず安定しているので JIT無しで使っていただ…

LLVMによるJITが完成しました。

ついにやりました。全VMの命令をJIT化しています。 処理速度はまだ測ってませんが、だいぶ速くなると思います。 良かったら、試してください。 今日は奥さんの料理で打ち上げします。楽しみです。 贅沢に本物のビール2本飲もうかな。明太子も出してもらおう…

いよいよJIT化のフィナーレです

LLVMによるJIT化があと少しで終わります。 膨大なキャスト命令をだいぶJIT化しました。 ほとんどvimのコピペとマクロで作ってます。うーむ、vimは便利。 後はアセンブラでキャストする部分だけですね。 終わったら、家族に言って、打ち上げしてもらいます。 …

ちょっと無理してキャストのJIT化を大幅に進めました。

お題のとおりです。ちょっと疲れました。 キャスト命令の全体の1/2くらい進めた感じです。 後はのんびり進めます。 問題は速度が出るかですねぇ。演算子以外アセンブラで書かずに C関数を呼んでいるだけの部分が多いので速くなるか謎です。 後家のサーバーは…

キャスト以外の命令のJIT化に成功

テストはいまいちやってませんが、一応動いています。 キャスト以外の命令のJIT化に成功してます。 後はキャスト命令のJIT化していきます。 まあ、凄い分量があるので、ぼちぼちですね。 やはり予定通りLLVMによるJITの完成は6月下旬になりそうです。 今日は…

キャスト以外の命令のJIT化がだいぶ進みました

お題のとおりです。明日以降キャスト以外の命令をJIT化してから、大量にあるキャスト命令のJIT化をしたいと思います。 山場だと思っていたOP_INVOKE_VIRTUAL_METHOD, OP_INVOKE_DYNAMIC_METHODなどはCの関数を呼ぶだけで簡単に実装できました。ブロックの呼…

全演算子をJIT化

タイトル通り全演算子をJIT化できました。 ちょっとテストが足りていないので、バグがあるかもしれませんが、多分、大丈夫だと思います。 あとは山ほどあるキャストをJIT化していきます。 見るだけでゲンナリするほど量がありますが、少しずつ進めたいと思い…

JITで演算子の実装を進めました

今回の収穫はキャストの仕方がわかったことですね。 とりあえず、僕のVMにはキャストが山ほどあるので、それが山場だと思っていたので、それがなんとかなりそうだと分かり、ほっとしてます。 あとは道なりに全部の命令をJIT化していきます。 問題は速くなる…

JITで補数の単項演算子を追加

JITで補数の単項演算子を追加しました。 だいたい全体の1/2くらいの進捗ですかね。 ぼちぼち残りの1/2やっていきます。 重要な命令はほとんどできているので、後はキャストやfloat, doubleの演算子辺りが山場ですかね。 大体来月末にはJIT付きのVMでversion …

LLVM化は続く

とりあえず、byte,ubyte,short,ushort,int,uint,long,ulongの2項演算子は出来ました。全体の1/4か1/3くらいの進捗だと思います。 早ければ今月末か来月末には終えられると思います。 その後は拡張ライブラリを書くためにSystemクラスにLoadLibrary?でした…

LLVM化進んでます

VMの命令を上から順番にLLVMに移植しています。 intからbyteへのキャストなどアラインメントが小さくなるキャストは意味がないとやっと気づいたので消去しました。 少し速くなったかもしれません。コンピュータに対する無知が知れてしまい恥ずかしい思いです…

LLVM化もだいぶ慣れてきました。

TRY文に対応しました。とりあえず、制御構文は対応できました。 あとは順次VMにある命令の上から一つづつLLVMに対応してます。 夏の終わり頃には終わるのではと言ってましたが、もしかしたら、春の終わりにはLLVMでのJITに対応できるかもしれません。 LLVM化…