GC用の命令
やねうらおさんの.Netマシンにコメントしてしまったので、後戻りできなくなってしまった。
"そりゃそうだ。俺何言ってんだ?馬鹿じゃん。あー恥ずかしい。"
と思ったけど、ここまで来たら引き下がれないので考えてみる。
ポインタ転送用のデータの転送命令で、movpってのを作る。
movpってないよなぁ。調べてないから不安。
c++で書くと、
void* movp(void* a, void* b) { void* gcregster = NULL; if (a != b) { if (a != NULL) {//元のデータの参照カウンタを減らす void* c = &a[1]; (*c)--; if ((*c) == 0) {//0ならdeleteするための情報を残す。 gcregster = a; } } a = b; if (b != NULL) {//NULL以外を代入したときは参照カウンタを増やす。 ((void*)b)[1]++; } } return gcregster; }
を1クロックで行う命令。
複数バイト同時転送命令なんかも作る。
A *b = new A(); A *a = b;
A *b = null; A *a = null; A* gcregster; gcregster = (A*) movp(b, new A()); if (gcregster != NULL) {//実際はゼロフラグを見る delete gcregster; } gcregster = (A*)movp(a, b); if (gcregster != NULL) {//実際はゼロフラグを見る delete gcregster; }
とやって使う。
というのがあったら良いんじゃないかと。
ガーベジコレクションの特許についてはコピーするGCのハードウェア実装と、もうひとつがあった。初心者用の検索で2件って出てたと思う。
けど、今見たら45件?
http://www2.ipdl.ncipi.go.jp/begin/be_list.cgi?STYLE=SIMPLE&sBpos=1&S_WORD1=%83K%81%5B%83x%83W%83R%83%8C%83N%83V%83%87%83%93&R_TYPE1=02&A_HIT=45&U_HIT=0&R_AID=I00598032106&R_UID=I00599031106&sTime=1103553984680
通産省と富士通だったかな。