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)];
Binary file paper/main.pdf has changed