合成命令調子悪し - Scheme VM を書く

以下の2つの合成命令化が返ってパフォーマンスを悪くすることが分かった。

  • LEAVE 1 => LEAVE1
  • APPLY 1 => APPLY1

APPLY に関して

APPLY はコードが長いので影響を与えているかもしれない。

  1. APPLY 1 は APPLY のコピペで済ませる
  2. APPLY の処理を関数化して APPLY1 と APPLY の両方から呼ぶ

ではどちらもパフォーマンスが悪くなるが前者の方がより悪い。
つまりコードサイズが問題か?それともコードの重複だろうか?

LEAVE 1 に関して

遅くなる理由が全く分からない何かのしきい値を越えたか。
コンパイル時間は遅くなっていない。

合成命令多すぎ?

現在合成命令は 15個。
例の論文では32個、64個だったのでそのあたりまでは行けると思うのだけども。

追記

APPLY 1 は APPLY のコードの途中に goto するようにしたら速くなりました。
LEAVE 1も同様の手法を試したところ遅くならなくなりました。
コードサイズが問題?