Mercurial > hg > Papers > 2019 > anatofuz-prosym
comparison Slide/slide.html @ 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 |
comparison
equal
deleted
inserted
replaced
93:c3b973a23fee | 94:4f0eaa330295 |
---|---|
216 | 216 |
217 <div class='slide'> | 217 <div class='slide'> |
218 <!-- _S9SLIDE_ --> | 218 <!-- _S9SLIDE_ --> |
219 <h2 id="mvm_interp_runで使用されているマクロ">MVM_interp_runで使用されているマクロ</h2> | 219 <h2 id="mvm_interp_runで使用されているマクロ">MVM_interp_runで使用されているマクロ</h2> |
220 | 220 |
221 <ul> | 221 <pre><code>DISPATCH(NEXT_OP) { |
222 <li> | 222 OP(const_i64): |
223 マクロDISPATCHでは | 223 </code></pre> |
224 </li> | 224 |
225 <ul> | |
226 <li>マクロ <code>DISPATCH</code> 及び <code>OP</code> は次の様に定義している</li> | |
227 </ul> | |
228 | |
229 <pre><code> #define OP(name) OP_ ## name | |
230 #define NEXT *LABELS[NEXT_OP] | |
231 </code></pre> | |
232 | |
233 <ul> | |
234 <li>マクロ<code>DISPATCH</code>は, ラベルgotoが利用できる場合は無視される</li> | |
235 <li>マクロ <code>OP</code> が, 対応するバイトコード命令を, ラベル列に変換する</li> | |
236 </ul> | |
237 | |
238 <pre><code> OP_const_i16: | |
239 OP_const_i32: | |
240 MVM_exception_throw_adhoc(tc, "const_iX NYI"); | |
241 OP_const_i64: | |
242 | |
243 </code></pre> | |
244 | |
245 | |
246 | |
247 </div> | |
248 | |
249 <div class='slide'> | |
250 <!-- _S9SLIDE_ --> | |
251 <h2 id="mvm_interp_runのマクロ">MVM_interp_runのマクロ</h2> | |
252 | |
253 <ul> | |
225 <li>MVM_interp_runではマクロを利用してMoarVMの環境などにアクセスしている</li> | 254 <li>MVM_interp_runではマクロを利用してMoarVMの環境などにアクセスしている</li> |
226 <li>頻出するマクロに <code>GET_REG</code> があり, 次のような使い方をする</li> | 255 <li>頻出するマクロに <code>GET_REG</code> があり, 次のような使い方をする</li> |
227 </ul> | 256 </ul> |
228 | 257 |
229 <pre><code> OP(const_i64): | 258 <pre><code> OP(const_i64): |
273 | 302 |
274 </div> | 303 </div> |
275 | 304 |
276 <div class='slide'> | 305 <div class='slide'> |
277 <!-- _S9SLIDE_ --> | 306 <!-- _S9SLIDE_ --> |
278 <h2 id="mvm_interp_run">MVM_interp_run</h2> | 307 <h2 id="mvm_interp_runのラベルテーブル">MVM_interp_runのラベルテーブル</h2> |
279 | 308 |
280 <ul> | 309 <ul> |
281 <li>ラベル遷移を利用する場合は配列<code>LABELS</code>にアクセスし, ラベル情報を取得する</li> | 310 <li>ラベル遷移を利用する場合は配列<code>LABELS</code>にアクセスし, ラベル情報を取得する</li> |
282 </ul> | 311 </ul> |
283 | 312 |
302 | 331 |
303 </div> | 332 </div> |
304 | 333 |
305 <div class='slide'> | 334 <div class='slide'> |
306 <!-- _S9SLIDE_ --> | 335 <!-- _S9SLIDE_ --> |
307 <h2 id="mvm_interp_run-1">MVM_interp_run</h2> | 336 <h2 id="mvm_interp_run">MVM_interp_run</h2> |
308 | 337 |
309 <ul> | 338 <ul> |
310 <li>Cの実装の場合, switch文に展開される可能性がある為, 命令ディスパッチが書かれているCソース・ファイルの指定の場所にのみ処理を記述せざるを得ない | 339 <li>Cの実装の場合, switch文に展開される可能性がある為, 命令ディスパッチが書かれているCソース・ファイルの指定の場所にのみ処理を記述せざるを得ない |
311 <ul> | 340 <ul> |
312 <li>その為, 1ファイルあたりの記述量が膨大になり, 命令のモジュール化ができない</li> | 341 <li>その為, 1ファイルあたりの記述量が膨大になり, 命令のモジュール化ができない</li> |