diff Slide/slide.html @ 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.html	Fri Jan 11 00:01:18 2019 +0900
+++ b/Slide/slide.html	Fri Jan 11 10:06:41 2019 +0900
@@ -221,6 +221,34 @@
 
 <div class='slide'>
   <!-- _S9SLIDE_ -->
+<h2 id="mvm_interp_runで使用されているマクロ">MVM_interp_runで使用されているマクロ</h2>
+
+<ul>
+  <li>MVM_interp_runではマクロを利用してMoarVMの環境などにアクセスしている</li>
+  <li>頻出するマクロに <code>GET_REG</code> があり, 次のような使い方をする</li>
+</ul>
+
+<pre><code>    OP(const_i64):
+        GET_REG(cur_op, 0).i64 = MVM_BC_get_I64(cur_op, 2);
+        cur_op += 10;
+</code></pre>
+
+<ul>
+  <li>これはバイトコードに埋められた数値を利用して, レジスタ情報を取得/設定などをする</li>
+  <li><code>reg_base</code> はMoarVMの現在のフレームのレジスタ情報が保存されたポインタであり, 本来のMVM_interp_runではローカル変数として利用している</li>
+</ul>
+
+<pre><code>    (i-&gt;reg_base[*((MVMuint16 *)(i-&gt;cur_op + 0))]).i64 = MVM_BC_get_I64(i-&gt;cur_op, 2);
+    i-&gt;cur_op += 10;
+    goto cbc_next(i);
+</code></pre>
+
+
+
+</div>
+
+<div class='slide'>
+  <!-- _S9SLIDE_ -->
 <h2 id="mvm_interp_run-1">MVM_interp_run</h2>
 
 <ul>
@@ -369,7 +397,7 @@
 
 <pre><code>
 __code cbc_next(INTERP i){
-    __code (*c)(INTERP);
+    __code (*c)(INTERP)
     c = CODES[(i-&gt;op = *(MVMuint16 *)(i-&gt;cur_op), i-&gt;cur_op += 2, i-&gt;op)]; // c = NEXT(i)
     goto c(i);
 }