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[] = {