Mercurial > hg > Papers > 2019 > anatofuz-prosym
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ソース・ファイルの指定の場所にのみ処理を記述せざるを得ない