comparison paper/chapter4.tex @ 45:78ac3e7ec7ea

update
author anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Fri, 15 Feb 2019 14:54:34 +0900
parents bbf886a770fa
children 1d637bad458d
comparison
equal deleted inserted replaced
44:bbf886a770fa 45:78ac3e7ec7ea
47 その部分をバイトコードインタプリタと呼ぶ。 47 その部分をバイトコードインタプリタと呼ぶ。
48 今回はMoarVMの書き換えを検討する為に、 まずMoarVMのバイトコードインタプリタ部分の書き換えを行う。 48 今回はMoarVMの書き換えを検討する為に、 まずMoarVMのバイトコードインタプリタ部分の書き換えを行う。
49 書き換えを行うにあたり、 MoarVMのオリジナルの箇所の実装を確認する。 49 書き換えを行うにあたり、 MoarVMのオリジナルの箇所の実装を確認する。
50 今回対象とするMoarVMのバージョンは2018.04.01である。 50 今回対象とするMoarVMのバージョンは2018.04.01である。
51 51
52 MoarVMのバイトコードインタプリタはsrc/core/interp.c中の関数 MVM\_interp\_runで定義されている。 52 MoarVMのバイトコードは、 フォーマットが決まっており、 複数の意味のあるバイトコードの集合となっている。
53 この関数ではMoarVMのバイトコードの中の、 命令に対応するバイトコードを解釈する。 53 今回は、MoarVMの命令を実行する際に必要な、 命令コードに対応するバイトコードの部分に着目する。
54 これは、 今回書き換えを検討するMoarVMバイトコードインタプリタが読み込み、 評価するバイトコードの部分が、 命令コードバイトコードに対応する為である。
54 MoarVMのバイトコードの中の、 命令に対応するバイトコードの構成を図\ref{fig:bytecode_segment}に示す。 55 MoarVMのバイトコードの中の、 命令に対応するバイトコードの構成を図\ref{fig:bytecode_segment}に示す。
55
56 56
57 \begin{figure}[ht] 57 \begin{figure}[ht]
58 \caption{MoarVMの命令バイトコード} 58 \caption{MoarVMの命令バイトコード}
59 \begin{center} 59 \begin{center}
60 \includegraphics[width=120mm]{./fig/bytecode_segment.pdf} 60 \includegraphics[width=120mm]{./fig/bytecode_segment.pdf}
61 \end{center} 61 \end{center}
62 \label{fig:bytecode_segment} 62 \label{fig:bytecode_segment}
63 \end{figure} 63 \end{figure}
64 64
65
66 MoarVMの命令バイトコードは16ビットである。上位8ビットが、 対象となる命令を示す。
67 下位8ビットは、その命令の中で利用されるレジスタや、型情報が入るオペランドとなっている。
68 MoarVMの命令は0から127番までが、 MoarVMのコア機能となっており、 128から255番までが、 拡張可能な命令セットとなっている。
69
70
71 MoarVMのバイトコードインタプリタはsrc/core/interp.c中の関数 MVM\_interp\_runで定義されている。
72 この関数ではMoarVMのバイトコードの中の、 命令に対応するバイトコードを解釈する。
65 関数内では、 解釈するべきバイトコード列が格納されている変数 cur\_op や、現在と次の命令を指し示すop、 命令に対して受け渡す現在のVM情報であるThreadContex tcなどが変数として利用されている。 73 関数内では、 解釈するべきバイトコード列が格納されている変数 cur\_op や、現在と次の命令を指し示すop、 命令に対して受け渡す現在のVM情報であるThreadContex tcなどが変数として利用されている。
66 実際に命令ディスパッチを行っている箇所の一部をソースコード\ref{origin_dispatch}に示す。 74 実際に命令ディスパッチを行っている箇所の一部をソースコード\ref{origin_dispatch}に示す。
67 75
68 \lstinputlisting[frame=lrbt, label=origin_dispatch, caption=オリジナルのMoarVMの命令ディスパッチ部分]{./codes/src/dispatch.c} 76 \lstinputlisting[frame=lrbt, label=origin_dispatch, caption=オリジナルのMoarVMの命令ディスパッチ部分]{./codes/src/dispatch.c}
69 77