Mercurial > hg > Papers > 2019 > anatofuz-prosym
changeset 61:db9c52b9c219
add detail moarvm problem
author | Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 19 Nov 2018 14:00:01 +0900 |
parents | 99092907d3ea |
children | 31637b77c722 |
files | Paper/anatofuz.pdf Paper/anatofuz.tex |
diffstat | 2 files changed, 4 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- 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}