Mercurial > hg > Papers > 2019 > anatofuz-thesis
changeset 68:95a686c0087f
update
author | anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 18 Feb 2019 15:57:03 +0900 |
parents | 1a7622df57b8 |
children | c22400d1d0a4 |
files | paper/chapter5.tex paper/codes/sync.c paper/main.pdf |
diffstat | 3 files changed, 17 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/paper/chapter5.tex Mon Feb 18 15:48:09 2019 +0900 +++ b/paper/chapter5.tex Mon Feb 18 15:57:03 2019 +0900 @@ -43,3 +43,13 @@ CbCはC言語の下位言語であり、 一種のアセンブラの様な言語である。 通常のC言語では、 関数呼び出しで隠蔽されているデータを意識してCodeGearに接続しなければならない。 その為、 C言語で実装を行うより実装で利用する処理やCodeGearの数が増えてしまう。 + +今回の実装では、 MoarVMの情報をまとめた構造体のポインタを受け渡す実装で行った。 +別の実装法として、構造体のポインタでなく、 構造体そのものを受け渡す実装に変更し、 挙動を確認した。 +この構造体のメンバは、 一部メンバの内部で同じメンバを参照している。 +ポインタの受け渡しでは同期が出来ているが、 構造体そのものを渡してしまうと同期が出来ない。 +その為、 構造体のメンバを、 ソースコード\ref{cbc_sync}に示すように、 都度代入しなおす必要が生じた。 +この様にCbCを適応した場合、 データの受け渡しを非常に意識する必要がある。 + +\lstinputlisting[frame=lrbt, label=cbc_sync, caption=CbCMoarVMのデータ同期]{./codes/sync.c} +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/codes/sync.c Mon Feb 18 15:57:03 2019 +0900 @@ -0,0 +1,7 @@ + __code cbc_next(INTER i){ ++ i.tc->interp_cur_op = &i.cur_op; ++ i.tc->interp_bytecode_start = &i.bytecode_start; ++ i.tc->interp_reg_base = &i.reg_base; ++ i.tc->interp_cu = &i.cu; + __code (*c)(INTER); + c = CODES[NEXT_OP(i)];