Mercurial > hg > Papers > 2019 > anatofuz-thesis
changeset 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 |
files | paper/chapter4.tex paper/fig/bytecode_segment.graffle paper/fig/bytecode_segment.pdf paper/main.pdf |
diffstat | 4 files changed, 11 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/paper/chapter4.tex Fri Feb 15 14:05:22 2019 +0900 +++ b/paper/chapter4.tex Fri Feb 15 14:54:34 2019 +0900 @@ -49,11 +49,11 @@ 書き換えを行うにあたり、 MoarVMのオリジナルの箇所の実装を確認する。 今回対象とするMoarVMのバージョンは2018.04.01である。 -MoarVMのバイトコードインタプリタはsrc/core/interp.c中の関数 MVM\_interp\_runで定義されている。 -この関数ではMoarVMのバイトコードの中の、 命令に対応するバイトコードを解釈する。 +MoarVMのバイトコードは、 フォーマットが決まっており、 複数の意味のあるバイトコードの集合となっている。 +今回は、MoarVMの命令を実行する際に必要な、 命令コードに対応するバイトコードの部分に着目する。 +これは、 今回書き換えを検討するMoarVMバイトコードインタプリタが読み込み、 評価するバイトコードの部分が、 命令コードバイトコードに対応する為である。 MoarVMのバイトコードの中の、 命令に対応するバイトコードの構成を図\ref{fig:bytecode_segment}に示す。 - \begin{figure}[ht] \caption{MoarVMの命令バイトコード} \begin{center} @@ -62,6 +62,14 @@ \label{fig:bytecode_segment} \end{figure} + +MoarVMの命令バイトコードは16ビットである。上位8ビットが、 対象となる命令を示す。 +下位8ビットは、その命令の中で利用されるレジスタや、型情報が入るオペランドとなっている。 +MoarVMの命令は0から127番までが、 MoarVMのコア機能となっており、 128から255番までが、 拡張可能な命令セットとなっている。 + + +MoarVMのバイトコードインタプリタはsrc/core/interp.c中の関数 MVM\_interp\_runで定義されている。 +この関数ではMoarVMのバイトコードの中の、 命令に対応するバイトコードを解釈する。 関数内では、 解釈するべきバイトコード列が格納されている変数 cur\_op や、現在と次の命令を指し示すop、 命令に対して受け渡す現在のVM情報であるThreadContex tcなどが変数として利用されている。 実際に命令ディスパッチを行っている箇所の一部をソースコード\ref{origin_dispatch}に示す。