関数が定義できるようになった。

rowlVM上で関数定義が出来るようになりました。
以下はfibonacciの定義。バイトコード長は22バイトです。今は手書きだけど、後でコンパイラ作ります。

(byte[] 100 fib @(assemble `(
    arg0
    imm_i3
    isub
    (if_lt hoge)
    arg0
    imm_i1
    isub
    (vcall 0 4) ; 0番(fib自身)をcall,引数は4バイト
    arg0
    imm_i2
    isub
    (vcall 0 4)
    iadd
    ireturn
    (label hoge)
    imm_i1
    ireturn

これを

(vm_register_function 0 fib)

という関数でVMの関数テーブル0番に登録します。これも後で自動化します。
fib(36)の実行時間は0.92secでした。C言語の5倍程の速度低下で収まりました。