自作CPUの面積が結構大きいので、面積削減を検討していきたい。
次に、ROBの削減について考えていきたい。 現状、ROBの面積が非常に大きくなってしまっているのを確認している。 明らかに問題なのは、例外を扱う論理だ。 ROBの各エントリで律儀に例外情報と要因を保持し、コミット時に選択する仕組みになっているが、明らかに最も古い例外情報のみを記録すればよく、ROBエントリすべてが例外情報を保持しておく必要はない。 これでROBエントリの例外情報を大幅に削減できるはずだ。
まず、各バックエンドからの命令完了情報をフィルタリングして、例外が発生した命令のなかで最も古い命令を抽出する。 そして、現在のもっとも古い例外が発生した命令を格納しているバッファとさらに年齢を比較し、バッファの内容を更新する。
命令コミット時にバッファを確認し、バッファの命令IDがコミットの命令IDと一致していればその内容を抽出してコミット情報に付け足す。 これで、ROBの各エントリから例外の情報を完全に無くすことができる。
一応注意なのは、浮動小数点のfflagsなどはROBに相変わらず保持することが求められるだろう。 まあ、FPUでは浮動小数点例外に応じて例外は発生しないので、この部分は独立して管理することができる。