OP_MOVE

Arguments

  • A:レジスタ番号
  • B:レジスタ番号

How it works?

レジスタ[A]にレジスタ[B]のポインタを代入する
MOVEとあるが、実際はポインタのコピーを行っている。

When used?

レジスタ操作の基本。あちこちで使われる。

Note

VMが持っているレジスタはmrb_value構造体の配列であり、オブジェクトが何でも入る。
コピーで上書きされるレジスタに入っているオブジェクトの参照を減らしている。(mruby/cでは参照カウント式のGCを実装しているため)

  mrbc_release(&regs[ra]);
  mrbc_dup(&regs[rb]);
  regs[ra] = regs[rb];

mrubyでは参照の操作はなく、単にポインタをコピーしているだけ。

Reference

mrubyのバイトコードの命令の解説 - Qiitamrubyでコンパイラを作ってみたり、Rubyを書く以外の方法でmrubyのバイトコード列を書く場合、バイトコードの命令を知る必要があります。 バイトコード命令は単純そうで意外と奥が深いようです。ここではmrubyのJITを作成する経験で得たバイトコードの裏仕様を解説したい...Qiita