Mercurial > hg > Papers > 2019 > anatofuz-prosym
comparison Slide/slide.md @ 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 |
---|---|
78 | 78 |
79 ``` | 79 ``` |
80 | 80 |
81 ## MVM_interp_runで使用されているマクロ | 81 ## MVM_interp_runで使用されているマクロ |
82 | 82 |
83 - マクロDISPATCHでは | 83 ``` |
84 DISPATCH(NEXT_OP) { | |
85 OP(const_i64): | |
86 ``` | |
87 | |
88 - マクロ `DISPATCH` 及び `OP` は次の様に定義している | |
89 | |
90 ``` | |
91 #define OP(name) OP_ ## name | |
92 #define NEXT *LABELS[NEXT_OP] | |
93 ``` | |
94 | |
95 - マクロ`DISPATCH`は, ラベルgotoが利用できる場合は無視される | |
96 - マクロ `OP` が, 対応するバイトコード命令を, ラベル列に変換する | |
97 | |
98 | |
99 ``` | |
100 OP_const_i16: | |
101 OP_const_i32: | |
102 MVM_exception_throw_adhoc(tc, "const_iX NYI"); | |
103 OP_const_i64: | |
104 | |
105 ``` | |
106 | |
107 ## MVM_interp_runのマクロ | |
84 | 108 |
85 - MVM_interp_runではマクロを利用してMoarVMの環境などにアクセスしている | 109 - MVM_interp_runではマクロを利用してMoarVMの環境などにアクセスしている |
86 - 頻出するマクロに `GET_REG` があり, 次のような使い方をする | 110 - 頻出するマクロに `GET_REG` があり, 次のような使い方をする |
87 | 111 |
88 ``` | 112 ``` |
118 ``` | 142 ``` |
119 goto *LABELS[(op = *(MVMuint16 *)(cur_op), cur_op += 2, op)]; | 143 goto *LABELS[(op = *(MVMuint16 *)(cur_op), cur_op += 2, op)]; |
120 ``` | 144 ``` |
121 | 145 |
122 | 146 |
123 ## MVM_interp_run | 147 ## MVM_interp_runのラベルテーブル |
124 | 148 |
125 - ラベル遷移を利用する場合は配列`LABELS`にアクセスし, ラベル情報を取得する | 149 - ラベル遷移を利用する場合は配列`LABELS`にアクセスし, ラベル情報を取得する |
126 | 150 |
127 ``` | 151 ``` |
128 static const void * const LABELS[] = { | 152 static const void * const LABELS[] = { |