
OP_MOVE
Arguments
- A:レジスタ番号
- B:レジスタ番号
How it works?
レジスタ[A]にレジスタ[B]のポインタを代入する
MOVEとあるが、実際はポインタのコピーを行っている。
When used?
レジスタ操作の基本。あちこちで使われる。
Note
VMが持っているレジスタはmrb_value構造体の配列であり、オブジェクトが何でも入る。
コピーで上書きされるレジスタに入っているオブジェクトの参照を減らしている。(mruby/cでは参照カウント式のGCを実装しているため)
mrbc_release(®s[ra]);
mrbc_dup(®s[rb]);
regs[ra] = regs[rb];
mrubyでは参照の操作はなく、単にポインタをコピーしているだけ。
Reference
mrubyのバイトコードの命令の解説 - Qiitamrubyでコンパイラを作ってみたり、Rubyを書く以外の方法でmrubyのバイトコード列を書く場合、バイトコードの命令を知る必要があります。 バイトコード命令は単純そうで意外と奥が深いようです。ここではmrubyのJITを作成する経験で得たバイトコードの裏仕様を解説したい...Qiita