ループ改善 - Scheme VM を書く

昨日の発見を教訓に多く呼ばれる命令を gcc -S を眺める。

多く呼ばれる命令 Top 5 の gcc -S を眺める

PUSH

スタックオーバーフローのチェックがやはり長いですね。
それ以外は想定通り。

CONSTANT

問題無し。

REFER_LOCAL

問題無し。

REFER_FREE
  • scheme::Object::isClosure() const
  • scheme::Object::toClosure() const

をインライン展開出来ればもう少し速くなると思う。
ただヘッダに書いていないだけだったあれ?何でだっけ。
対応した。

APPLY

とにかく長いコードの共通化をしたい。
ここは昨日挙がっていた命令列チェックを減らせればここもだいぶすっきりする。

命令列長チェック

命令毎に、命令列終端にあるかどうか?をチェックしていたがこれを終端に HALT 命令を置くことで改善した。

今日の改善結果のグラフ


そろそろこのくらいのインパクトのある改善は出来なくなってきたような気がする。