命令セットアーキテクチャを考える (番外編) 本当の汎用レジスタ
ほとんどのCPUアーキテクチャでは、整数演算/論理演算/ビット操作等用の汎用レジスタと、浮動小数点レジスタは別構成となっています。「ぼくのかんがえたさいきょうのめいれいせっと」シリーズでもそれにならって、汎用レジスタ×64本と浮動小数点レジスタ×64本の構成としました。
汎用レジスタと浮動小数点レジスタを別構成にするというのは、おそらく浮動小数点演算ユニットが電子回路的に複雑でチップ面積をたくさん必要とするとか、処理クロックもたくさん掛かるとかなどで、浮動小数点演算ユニットが使うレジスタも、汎用レジスタとは別回路として演算回路の近くに配置しよう、というような理由じゃないかと想像しています。というか、浮動小数点演算はコプロセッサとして別チップだったという歴史的な背景もあるように思います。
一方で、アプリケーションプログラマからみると、汎用レジスタも浮動小数点レジスタも、演算用にデータを一時的に置いておくところという意味では同じです。別になっていなければならない理由はありません。むしろ、load/store型アーキテクチャでは、浮動小数点レジスタにどのようにデータを詰め込むか、あるいは取り出すかということを、汎用レジスタとは別に考えなければならなくなります。
「ぼくのかんがえたさいきょうのめいれいせっと」アーキテクチャでも、浮動小数点レジスタ用のメモリデータアクセス(load/store)命令と、汎用レジスタ⇔浮動小数点レジスタ間のビットパターン転送命令を追加しました。
電子回路的なことは無視すると、同一のレジスタを整数演算命令が操作するときは整数データとして、浮動小数点数演算命令が操作するときは浮動小数点数データとして扱うようにできれば、便利になりそうです。
「ぼくのかんがえたさいきょうのめいれいせっと」アーキテクチャは、64本ものレジスタを持っており、最近主流のCPUアーキテクチャはだいたい32本であることを考えると、64本が汎用/浮動小数点レジスタ兼用という「本当の汎用」レジスタにしても、レジスタ本数が少なくて不便ということは少ないと考えられます。
| 固定リンク
この記事へのコメントは終了しました。


コメント