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
通産省富士通だったかな。