命令セットアーキテクチャを考える2 (レジスタ)
レジスタ構成について、先の記事の最後の部分の再掲載から。
・64bit汎用レジスタ×64本、64bit(倍精度)浮動小数点レジスタ×64本
・R0はゼロレジスタ、FR0はゼロレジスタ
・連続する複数本のレジスタを使用する命令で、ゼロレジスタを指定された場合、ゼロレジスタが仮想的に拡張される(R1…,FR1…が使用されるわけではない)
レジスタ本数が64本と多いのは、後で説明するSIMD演算用にも使うため。SIMD演算用の特別なレジスタは持たない。
[General Register 64bit*64]
R0 Zero register(always zero)
R1
…
R63
・R0はゼロレジスタであり、読み込んだ際にはオールゼロビットが読み出され、書き込みは無視される。(命令は正常終了する)
・連続する複数本のレジスタを使用する命令で、ゼロレジスタを指定された場合、ゼロレジスタが仮想的に拡張される(R1…が使用されるわけではない)。
・byteモードの場合は下位8ビット、half wordモードの場合は下位16bit、wordモードの場合は下位32ビットのみが演算に用いられる。残りの上位ビットは変化しない。
・レジスタの上位ビットのみを参照したり変更するようなハードウェア命令はない。そのような処理が必要な場合は、シフト命令と組み合わせて実現する必要がある。
・SIMDモード命令の場合、8ビット*8、16ビット*4、32ビット×2として使用する。doble wordのSIMDモード命令はない。内部的にはエラーとはならないが、通常のdouble-wordの演算(64bit×1)と同じ演算結果が得られる。
[Floating point number Register 64bit*64]
FR0 Zero register(always zero)
FR1
…
FR63
・FR0はゼロレジスタであり、読み込んだ際にはプラスゼロ(オールビットゼロ)が読み出され、書き込みは無視される。(命令は正常終了する)
・連続する複数本のレジスタを使用する命令で、ゼロレジスタを指定された場合、ゼロレジスタが仮想的に拡張される(FR1…が使用されるわけではない)。
・単精度モードの場合は下位32ビットのみ演算に用いられる。残りの上位ビットは変化しない。
・連続する二つのレジスタを連結して四倍精度実数データを格納できる。
・SIMDモード命令の場合、連続する四本のレジスタを使って、単精度(32bit)*8、倍精度(64bit)*4、(四倍精度)128bit*2のデータとして演算に使用される。
・浮動小数点レジスタと汎用レジスタとのデータのコピー/変換命令を備える。
| 固定リンク
この記事へのコメントは終了しました。


コメント