changeset 94:4f0eaa330295

update
author Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Fri, 11 Jan 2019 10:49:55 +0900
parents c3b973a23fee
children 01f148c3de98
files Slide/slide.html Slide/slide.md Slide/slide.pdf.html
diffstat 3 files changed, 94 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/Slide/slide.html	Fri Jan 11 10:41:24 2019 +0900
+++ b/Slide/slide.html	Fri Jan 11 10:49:55 2019 +0900
@@ -218,10 +218,39 @@
   <!-- _S9SLIDE_ -->
 <h2 id="mvm_interp_runで使用されているマクロ">MVM_interp_runで使用されているマクロ</h2>
 
+<pre><code>DISPATCH(NEXT_OP) {
+    OP(const_i64):
+</code></pre>
+
 <ul>
-  <li>
-    マクロDISPATCHでは
-  </li>
+  <li>マクロ <code>DISPATCH</code> 及び <code>OP</code> は次の様に定義している</li>
+</ul>
+
+<pre><code> #define OP(name) OP_ ## name
+ #define NEXT *LABELS[NEXT_OP]
+</code></pre>
+
+<ul>
+  <li>マクロ<code>DISPATCH</code>は, ラベルgotoが利用できる場合は無視される</li>
+  <li>マクロ <code>OP</code> が, 対応するバイトコード命令を, ラベル列に変換する</li>
+</ul>
+
+<pre><code>    OP_const_i16:
+    OP_const_i32:
+        MVM_exception_throw_adhoc(tc, "const_iX NYI");
+    OP_const_i64:
+
+</code></pre>
+
+
+
+</div>
+
+<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>
@@ -275,7 +304,7 @@
 
 <div class='slide'>
   <!-- _S9SLIDE_ -->
-<h2 id="mvm_interp_run">MVM_interp_run</h2>
+<h2 id="mvm_interp_runのラベルテーブル">MVM_interp_runのラベルテーブル</h2>
 
 <ul>
   <li>ラベル遷移を利用する場合は配列<code>LABELS</code>にアクセスし, ラベル情報を取得する</li>
@@ -304,7 +333,7 @@
 
 <div class='slide'>
   <!-- _S9SLIDE_ -->
-<h2 id="mvm_interp_run-1">MVM_interp_run</h2>
+<h2 id="mvm_interp_run">MVM_interp_run</h2>
 
 <ul>
   <li>Cの実装の場合, switch文に展開される可能性がある為, 命令ディスパッチが書かれているCソース・ファイルの指定の場所にのみ処理を記述せざるを得ない
--- a/Slide/slide.md	Fri Jan 11 10:41:24 2019 +0900
+++ b/Slide/slide.md	Fri Jan 11 10:49:55 2019 +0900
@@ -80,7 +80,31 @@
 
 ## MVM_interp_runで使用されているマクロ
 
-- マクロDISPATCHでは
+```
+DISPATCH(NEXT_OP) {
+    OP(const_i64):
+```
+
+- マクロ `DISPATCH` 及び `OP` は次の様に定義している
+
+```
+ #define OP(name) OP_ ## name
+ #define NEXT *LABELS[NEXT_OP]
+```
+
+- マクロ`DISPATCH`は, ラベルgotoが利用できる場合は無視される
+- マクロ `OP` が, 対応するバイトコード命令を, ラベル列に変換する
+
+
+```
+    OP_const_i16:
+    OP_const_i32:
+        MVM_exception_throw_adhoc(tc, "const_iX NYI");
+    OP_const_i64:
+
+```
+
+## MVM_interp_runのマクロ
 
 - MVM_interp_runではマクロを利用してMoarVMの環境などにアクセスしている
 -  頻出するマクロに `GET_REG` があり, 次のような使い方をする
@@ -120,7 +144,7 @@
 ```
 
 
-## MVM_interp_run
+## MVM_interp_runのラベルテーブル
 
 - ラベル遷移を利用する場合は配列`LABELS`にアクセスし, ラベル情報を取得する
 
--- a/Slide/slide.pdf.html	Fri Jan 11 10:41:24 2019 +0900
+++ b/Slide/slide.pdf.html	Fri Jan 11 10:49:55 2019 +0900
@@ -202,10 +202,39 @@
   <!-- _S9SLIDE_ -->
 <h2 id="mvm_interp_runで使用されているマクロ">MVM_interp_runで使用されているマクロ</h2>
 
+<pre><code>DISPATCH(NEXT_OP) {
+    OP(const_i64):
+</code></pre>
+
 <ul>
-  <li>
-    <p>マクロDISPATCHでは</p>
-  </li>
+  <li>マクロ <code>DISPATCH</code> 及び <code>OP</code> は次の様に定義している</li>
+</ul>
+
+<pre><code> #define OP(name) OP_ ## name
+ #define NEXT *LABELS[NEXT_OP]
+</code></pre>
+
+<ul>
+  <li>マクロ<code>DISPATCH</code>は, ラベルgotoが利用できる場合は無視される</li>
+  <li>マクロ <code>OP</code> が, 対応するバイトコード命令を, ラベル列に変換する</li>
+</ul>
+
+<pre><code>    OP_const_i16:
+    OP_const_i32:
+        MVM_exception_throw_adhoc(tc, "const_iX NYI");
+    OP_const_i64:
+
+</code></pre>
+
+
+
+</div>
+
+<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>
@@ -259,7 +288,7 @@
 
 <div class='slide'>
   <!-- _S9SLIDE_ -->
-<h2 id="mvm_interp_run">MVM_interp_run</h2>
+<h2 id="mvm_interp_runのラベルテーブル">MVM_interp_runのラベルテーブル</h2>
 
 <ul>
   <li>ラベル遷移を利用する場合は配列<code>LABELS</code>にアクセスし, ラベル情報を取得する</li>
@@ -288,7 +317,7 @@
 
 <div class='slide'>
   <!-- _S9SLIDE_ -->
-<h2 id="mvm_interp_run-1">MVM_interp_run</h2>
+<h2 id="mvm_interp_run">MVM_interp_run</h2>
 
 <ul>
   <li>Cの実装の場合, switch文に展開される可能性がある為, 命令ディスパッチが書かれているCソース・ファイルの指定の場所にのみ処理を記述せざるを得ない