# HG changeset patch # User Takahiro SHIMIZU # Date 1541735778 -32400 # Node ID 7d9b01a98b9af06668629400c8ceffbfc2f64e4a # Parent 79ba487d3576dfc2f199c763ce19ce04eb1ea7f3 update about moarvm bytecodes diff -r 79ba487d3576 -r 7d9b01a98b9a Paper/anatofuz.pdf Binary file Paper/anatofuz.pdf has changed diff -r 79ba487d3576 -r 7d9b01a98b9a Paper/anatofuz.tex --- 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の実装を行うにあたり導入を検討している.