Mercurial > hg > Papers > 2019 > anatofuz-prosym
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` マクロを介して計算を行う.