合成命令 + 測定 その1 - Scheme VM を書く

以前実装した合成命令をまず廃止した。この状態からきちんと命令が現れる頻度を測定して採用する合成命令を決める。
make bench とやると以下の表が出力される。(とても時間がかかりますがこりゃ便利)
REFER_LOCAL0とかは合成命令ではなくてオペランドも合わせて表示しているものです。


r5247。考察は明日。
連続して現れる頻度が高いものを上位から列挙しているが、1つ+オペランドとか3つ連続とかも見た方が良いかなあ。

benchmark gosh sec our sec count insn1 insn2 insn3 insn4 insn5
./bench/fib.scm 0.43 0.78 43160000 (REFER_LOCAL0 . PUSH)(5388461times, 12.5%) (PUSH . CONSTANT)(5388182times, 12.5%) (PUSH . REFER_GLOBAL)(2693828times, 6.2%) (APPLY1 . REFER_LOCAL0)(2692940times, 6.2%) (REFER_GLOBAL . APPLY1)(2692699times, 6.2%)
./bench/case.scm 0.28 0.4 17596295 (CONSTANT . PUSH)(2003045times, 11.4%) (PUSH . REFER_LOCAL0)(1505022times, 8.6%) (PUSH . REFER_FREE0)(1002406times, 5.7%) (TEST . CONSTANT)(1001690times, 5.7%) (REFER_LOCAL0 . EQV)(1001425times, 5.7%)
./bench/let.scm 0.02 0.08 1682808 (PUSH . REFER_LOCAL0)(96067times, 5.7%) (PUSH . CONSTANT)(59616times, 3.5%) (REFER_LOCAL0 . PUSH)(58899times, 3.5%) (PUSH . REFER_FREE0)(47607times, 2.8%) (NULL_P . TEST)(39071times, 2.3%)
./bench/takl.scm 0.09 1.0 29454949 (PUSH . DISPLAY)(1736238times, 5.9%) (PUSH . ENTER)(1735611times, 5.9%) (ENTER . REFER_LOCAL0)(1734429times, 5.9%) (REFER_LOCAL0 . TEST)(1733958times, 5.9%) (REFER_FREE1 . PUSH)(1689029times, 5.7%)
./bench/array1.scm 5.81 8.68 245734890 (REFER_LOCAL0 . PUSH)(32044367times, 13.0%) (PUSH . REFER_LOCAL0)(21370555times, 8.7%) (PUSH . CONSTANT)(15963955times, 6.5%) (PUSH . REFER_FREE0)(10684209times, 4.3%) (REFER_FREE0 . INDIRECT)(10680157times, 4.3%)
./bench/cpstak.scm 0.63 0.41 21377332 (PUSH . REFER_LOCAL0)(1125582times, 5.3%) (PUSH . REFER_FREE0)(1119030times, 5.2%) (REFER_LOCAL2 . PUSH)(956165times, 4.5%) (REFER_LOCAL1 . PUSH)(799208times, 3.7%) (PUSH . REFER_LOCAL3)(796058times, 3.7%)
./bench/sum.scm 0.13 0.18 20135225 (REFER_LOCAL1 . PUSH)(3002930times, 14.9%) (PUSH . CONSTANT)(2005029times, 10.0%) (PUSH . REFER_LOCAL0)(1006866times, 5.0%) (PUSH . REFER_FREE0)(1003254times, 5.0%) (PUSH . REFER_LOCAL1)(1002325times, 5.0%)
./bench/tak.scm 1.05 1.98 120996402 (REFER_LOCAL1 . PUSH)(11134121times, 9.2%) (PUSH . REFER_LOCAL2)(9542472times, 7.9%) (PUSH . REFER_GLOBAL)(6362988times, 5.3%) (NOT . TEST)(6361204times, 5.3%) (APPLY3 . REFER_LOCAL1)(6360901times, 5.3%)