changeset 38:7d9b01a98b9a

update about moarvm bytecodes
author Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Fri, 09 Nov 2018 12:56:18 +0900
parents 79ba487d3576
children e216aa15e656
files Paper/anatofuz.pdf Paper/anatofuz.tex
diffstat 2 files changed, 6 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
Binary file Paper/anatofuz.pdf has changed
--- a/Paper/anatofuz.tex	Fri Nov 09 11:29:54 2018 +0900
+++ b/Paper/anatofuz.tex	Fri Nov 09 12:56:18 2018 +0900
@@ -204,7 +204,7 @@
     \label{fig:nqpbuild}
 \end{figure}
 
-NQPのビルドフローは図\ref{fig:nqpbuild}に示す.
+NQPのビルドフローを図\ref{fig:nqpbuild}に示す.
 実際にperl6を動かすためにはself buildしたNQPコンパイラが必要となる.その為にstage0を利用してStage1をビルドしNQPコンパイラを作成する.
 Stage1は中間的な出力であり,生成されたNQPファイルはStage2と同一であるが,MoarVMBytecodeが異なる.
 Perl6では完全なセルフコンパイルを実行したNQPが要求される為,Stage1を利用してもう一度ビルドを行いStage2を作成する.
@@ -261,7 +261,7 @@
 
 
 OP(.*)の.*に該当する箇所はバイトコードの名前である.通常このブロックにはLABELから遷移する為,バイトコードの名前はLABELSの配列の添字に変換されている.
-そのため対象となるCodeSegmentをLABLESの並びと対応させ,配列CODESに設定すればCodeSegmentの名前は問わない.
+そのため対象となるCodeSegmentをLABLESの並びと対応させ,CodeSegmentの配列CODESとして設定すればCodeSegmentの名前は問わない.
 今回はCodeSegmentである事を示す為にsuffixとしてcbc\_をつける.
 
 
@@ -281,7 +281,7 @@
 
 \lstinputlisting[label=cbc_dispatch_c, caption=CbCMoarVMのバイトコードディスパッチ]{./src/cbc-interp-next.cbc}
 
-\lstinputlisting[label=cbc_codesegs_c, caption=CbCMoarVMのバイトコードディスパッチ]{./src/cbc_codesegs.cbc}
+\lstinputlisting[label=cbc_codesegs_c, caption=CbCMoarVMのバイトコードに対応するCodeSegment]{./src/cbc_codesegs.cbc}
 
 \begin{figure}[ht]
      \begin{center}
@@ -304,6 +304,9 @@
 \end{itemize}
 
 
+上記Code\ref{cbc_codesegs_c}ではcbc\_const\_i8などがcase文の下の部分に該当するcbc\_const\_i64に遷移する様に変換されている.
+またcbc\_pushcompscではMVMROOTに局所変数scを渡している為,これをstaticで宣言し直している.
+
 現在CbCで記述されたOSであるGearsOSにはInterfaceが導入されている.
 これはJavaのinterface,Haskellの型クラスに該当する概念であり,次のCodeSegmentにInterface経由で継続する事が可能である.
 Interfaceは現在のMoarVMには実装されていない為,今後ThreadeCodeの実装を行うにあたり導入を検討している.