= と + を native call ではなく instruction にする - Scheme VM を書く

数値比較の 「=」手続きは、C言語の Object numberEqualProc(Object obj) にマッピングされている。
これを VM の instruction にすれば速くなるんじゃ?的なプロジェクトです。

(= 3 4 5)

のような呼出し例が考えられるけど、引数を2つに限定してあとは展開すれば良いよね。
accumulator とスタック上に置かれた値を比較して、結果を accumulator に置けば良かろう。

(= 3 a)

の場合だったら

(const 3 (argument (refer-local 0 (number-equal (next))))


と展開されれば良い。

(= 3 4 5)

(if (= 3 4)
    (= 4 5)
    #f)

と展開してからコンパイルしてあげれば良い。
リスト操作かわいいよリスト操作。


続いて + 。

(+ 1 2)
=> (const 1 (argument (const 2 (number-add (next)))))
(+ 1 2 3)
=> (+ 1 (+ 2 3))

どちらも出来た。速度比較は次の記事へ。