フェッチ速度の最適化


■固定命令語長とハーバードアーキテクチャ

 命令とオペランド(or リテラル)の組み合わせを全て固定長ビット内に納めるように、命令セットを設計する。例えば、

 add reg1, reg2, reg3; reg1 = reg2 + reg3

 のような単純計算を例にとると、add命令種別に8bit、レジスタ種別に8bitを割り当てると、上記命令は32bit幅に格納することができる。また、レジスタ幅を16bitに固定できるならば、

 mov reg1, 0xffff; reg1 = 0xffff

 のような代入式は、命令種別に8bit、レジスタ種別に8bit、リテラルに16bitで、やはり32bit幅に格納することができる。


 通常、RISCアーキテクチャでは、固定命令語長を採用するが、オペランドリテラルについてはその限りではない。そこで、オペランドリテラルまでを含んで固定命令語長にすることにより、見かけ上、1命令実行を1サイクルで行うことが可能になるため、ハーバードアーキテクチャ的なアプローチとなりえる。

※これらは、メモリバスが32bitであることを前提としている。メモリバスが64bitであれば、後述する仕組みによって、1回のフェッチサイズを64bitにすることで、フェッチ速度の最適が行われる。
※これらの実装はマイクロコード実行の際の仕様である。


VLIW(Very Long Instruction Word)とマイクロプログラミング

 今回のVM実装は他プラットフォームへの移植工数削減のため、マイクロプログラミング方式を採用するが、VMの命令セットを