# HG changeset patch # User Takahiro SHIMIZU # Date 1542603601 -32400 # Node ID db9c52b9c219fa62119ee8f909350d63a7d76a71 # Parent 99092907d3ea45d4d804fd149f1dd6b2e2db46f6 add detail moarvm problem diff -r 99092907d3ea -r db9c52b9c219 Paper/anatofuz.pdf Binary file Paper/anatofuz.pdf has changed diff -r 99092907d3ea -r db9c52b9c219 Paper/anatofuz.tex --- a/Paper/anatofuz.tex Mon Nov 19 13:47:44 2018 +0900 +++ b/Paper/anatofuz.tex Mon Nov 19 14:00:01 2018 +0900 @@ -325,7 +325,10 @@ \lstinputlisting[label=dispatch_c, caption=オリジナル版MoarVMのバイトコードディスパッチ]{./src/dispatch.c} interp.cでは命令コードのディスパッチはマクロを利用したcur\_opの計算及びラベルの遷移, もしくはマクロDISPATCHが展開するswitch文で行われていた. -CbCMoarVMではこの問題を解決するために, それぞれの命令に対応するCodeGearを作成し, CodeGear名前を要素として持つCbCのCodeGearのテーブルを作成した. +この為MoarVM内の命令コードに対応する処理は, 命令ディスパッチが書かれているCソースファイルの, 特定の場所のみに記述せざるを得ない. +その為命令コードのモジュール化などが行えず, 1ファイル辺りの記述量が膨大になってしまう. +またラベルジャンプもしくはswitch文に展開されてしまう為, 別のCソースファイルからの処理の再利用が出来ない. +CbCMoarVMではこの問題を解決するために, それぞれの命令に対応するCodeGearを作成し, 各CodeGearの名前を要素として持つCbCのCodeGearのテーブルを作成した. このCodeGearのテーブルを参照するCodeGearはcbc\_nextであり, この中のマクロNEXTはinterp.cのマクロNEXTをCbC用に書き直したものである. \lstinputlisting[label=cbc_dispatch_c, caption=CbCMoarVMのバイトコードディスパッチ]{./src/cbc-interp-next.cbc}