changeset 46:1d637bad458d

update
author anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Fri, 15 Feb 2019 16:03:08 +0900
parents 78ac3e7ec7ea
children 3f52d5153c09
files paper/chapter4.tex paper/fig/bytecode_segment.graffle paper/fig/bytecode_segment.pdf paper/fig/origin_label_goto.graffle paper/fig/origin_label_goto.pdf paper/fig/origin_not_use_label_goto.graffle paper/fig/origin_not_use_label_goto.pdf paper/main.pdf
diffstat 8 files changed, 24 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/paper/chapter4.tex	Fri Feb 15 14:54:34 2019 +0900
+++ b/paper/chapter4.tex	Fri Feb 15 16:03:08 2019 +0900
@@ -63,9 +63,11 @@
 \end{figure}
 
 
-MoarVMの命令バイトコードは16ビットである。上位8ビットが、 対象となる命令を示す。
-下位8ビットは、その命令の中で利用されるレジスタや、型情報が入るオペランドとなっている。
-MoarVMの命令は0から127番までが、 MoarVMのコア機能となっており、 128から255番までが、 拡張可能な命令セットとなっている。
+MoarVMの命令バイトコードは16ビットである。上位8ビットが、 バンクと呼ばれる命令セットの指定となる。
+MoarVMの命令はバンクの0から127番までが、 MoarVMのコア機能となっており、 128から255番までが、 拡張可能な命令セットとなっている。
+下位8ビットは、 バンクの内部の命令指定となっている。
+命令によっては、 この後のバイトコードで0個以上のオペランドを必要とする物がある。
+オペランドの中にはレジスタの型指定、 引数などが埋め込まれ、 命令バイトコードとの対応のために16ビットで表現される。
 
 
 MoarVMのバイトコードインタプリタはsrc/core/interp.c中の関数 MVM\_interp\_runで定義されている。
@@ -85,18 +87,36 @@
 このマクロの中では、 利用しているCコンパイラがラベルに対してのgotoが利用できる、 コンパイラ拡張を実装している場合は MVM\_CGOTOが真となり、 6行目までが実行される。
 それ以外の場合は8行目以降のマクロ定義となる。
 ラベルgotoが利用できる場合、 マクロDISPATCHは空白として設定され、 マクロOPは、 それぞれの命令に対応したラベルとなる。
+この場合の処理の流れを図\ref{fig:origin_label_goto}に示す。
+
+\begin{figure}[ht]
+\caption{ラベルgotoが利用できる場合のオリジナルのMVM\_interp\_runの処理の流れ}
+ \begin{center}
+  \includegraphics[width=50mm]{./fig/origin_label_goto.pdf}
+ \end{center}
+ \label{fig:origin_label_goto}
+\end{figure}
+
 次の命令に移動する際は、 マクロNEXT\_OPを用いてcur\_opを次の命令に移動させ、 opの値を再設定する。
 このopが実行すべき命令の番号が格納されている。
 opを用いて、ソースコード\ref{labels_list}に示す配列LABELSから、 命令に対応するラベルを取得する。
 LABELSはマクロOPが変換したラベルのリストである。
-ソースコード\ref{origin_dispatch}の場合、no\_opはcur\_opが0を指し、 const\_i8は1を指し示す。
+ソースコード\ref{origin_dispatch}の場合、no\_opはopが0が代入され、 const\_i8は1が設定されている。
 
 
 \lstinputlisting[frame=lrbt, label=labels_list, caption=MoarVMの命令ラベルが設定されている配列]{./codes/src/oplabels.h}
 
 ラベルgotoが利用できない場合、 マクロDISPATCHはswitch文に、 OPはcase文にそれぞれ変換される。
 cur\_opは数値そのものである為、 この場合はラベル配列へのアクセスは行われない。
+case文に変換された場合の処理の流れを\ref{fig:origin_not_use_label_goto}に示す。
 
+\begin{figure}[ht]
+\caption{case文に展開された場合のオリジナルのMVM\_interp\_runの処理の流れ}
+ \begin{center}
+  \includegraphics[width=70mm]{./fig/origin_not_use_label_goto.pdf}
+ \end{center}
+ \label{fig:origin_not_use_label_goto}
+\end{figure}
 
 またソースコード\ref{origin_dispatch}の中に含まれているマクロGET\_REGは、 ソースコード\ref{get_reg_c}に示す定義がされている。
 
Binary file paper/fig/bytecode_segment.graffle has changed
Binary file paper/fig/bytecode_segment.pdf has changed
Binary file paper/fig/origin_label_goto.graffle has changed
Binary file paper/fig/origin_label_goto.pdf has changed
Binary file paper/fig/origin_not_use_label_goto.graffle has changed
Binary file paper/fig/origin_not_use_label_goto.pdf has changed
Binary file paper/main.pdf has changed