HSP JIT

何年か前に放置してたHSPJITを再開。

実行時情報による最適化無し(--no-opt)はhsp3cnv+コンパイル相当の内容で、バイトコードのデコードとディスパッチ、オペランドスタックの操作などを最適化出来て数割の高速化。

プログラム実行中に変数型が変わらないと仮定(--skip-type-check)し、配列のインデックスチェックを省く(--no-range-check)とaobenchやレイトレのようなひたすら計算をするプログラムでは10倍の高速化出来た。

課題

  • hsp3cnvの実装を踏襲していて制御構文命令や関数呼び出しをまたいだ最適化が出来ない
  • 過剰に強い仮定をしていてhsp3.4付属のサンプルのうちかなり多くが動かない
  • 命令をHSP3TYPEINFO経由で呼び出すと引数のStackPush()/StackPop()が重い
  • JIT/LLVMの習作も兼ねていてとっちらかってる

http://peppermint.jp/products/hsp/hsp3ll-20150502.zip