最近ちょとmrubyのコードを見たりしていた。ついでにGCCの使い方を勉強しつつ、吐き出すアセンブラを眺めてみたり、そんな感じ。 勉強がてらVMまわりを少しいじってみたので自分用メモを残しておく。 眺めてたのはVMのコードで、mrubyのVMはGCCではダイレクトスレッデッドコードになるので、ラベルの配列を作ってgotoすることで命令を実行していく。 gotoするときはNEXTというマクロを使う。 #define NEXT mrb->arena_idx = ai; i=*++pc; goto *optable[GET_OPCODE(i)]ここで疑問なのはmrb->arena_idxで、こいつは何に使うのかというと、ここに説明が書いてある。 http://www.dzeta.jp/~junjis/code_reading/index.php?mruby%2FGC%BD%E8%CD%FD%A4