diff Slide/slide.md @ 91:3beea12854b0

update
author Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Fri, 11 Jan 2019 10:06:41 +0900
parents 1f9baa69dfe0
children c3b973a23fee
line wrap: on
line diff
--- a/Slide/slide.md	Fri Jan 11 00:01:18 2019 +0900
+++ b/Slide/slide.md	Fri Jan 11 10:06:41 2019 +0900
@@ -79,6 +79,28 @@
 
 ```
 
+## MVM_interp_runで使用されているマクロ
+
+- MVM_interp_runではマクロを利用してMoarVMの環境などにアクセスしている
+-  頻出するマクロに `GET_REG` があり, 次のような使い方をする
+
+```
+    OP(const_i64):
+        GET_REG(cur_op, 0).i64 = MVM_BC_get_I64(cur_op, 2);
+        cur_op += 10;
+```
+
+- これはバイトコードに埋められた数値を利用して, レジスタ情報を取得/設定などをする
+- `reg_base` はMoarVMの現在のフレームのレジスタ情報が保存されたポインタであり, 本来のMVM_interp_runではローカル変数として利用している
+
+
+```
+    (i->reg_base[*((MVMuint16 *)(i->cur_op + 0))]).i64 = MVM_BC_get_I64(i->cur_op, 2);
+    i->cur_op += 10;
+    goto cbc_next(i);
+```
+
+
 ## MVM_interp_run
 
 - MVM_interp_runでは次のオペコードをフェッチする際に `NEXT_OP` マクロを介して計算を行う.