CPU実験室

誰も見向きもしない古いCPUをいじって動かしてみようというプロジェクトです

キャッシュ制御

CX486のキャッシュが有効に働いているか確認してみました
このCPUはi80386互換ですがi80486相当の制御レジスタを持っているのでキャッシュの制御も486と同じと考えられます。
386ではReservedになっている制御レジスタCR0のCD,NWビットをアクセスします

 

イメージ 1

 

i80486ではCD,NWビットをクリアすればキャッシュ有効になるので
同様にビットをセットリセットする関数を作成しました

 

/* キャッシュ ON */
void cache_on(void)                
{
	asm("movl %cr0,%eax");
	asm("andl $0x9fffffff,%eax");
	asm("movl %eax,%cr0");        /* CD,NW =0    */
}
/* キャッシュ OFF */
void cache_off(void)
{
	asm("movl %cr0,%eax");
	asm("orl  $0x40000000,%eax");
	asm("movl %eax,%cr0");        /* CD=1      */
	asm("invd");                  /* Cache flush */
}

 

これを使って簡単な整数演算のループをまわして見ると

 

イメージ 2

 

???

 

残念。ぜんぜん速度が変わっていません。どうなってるんかな