Mercurial > hg > Papers > 2019 > anatofuz-thesis
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 |