Clover2開発日誌

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

2017-06-01から1ヶ月間の記事一覧

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無しでとりあえず、使ってみてください。