MIPSアーキテクチャ
ハードウェアのアーキテクチャにより、以下のことが定められている。
汎用レジスタ $0 は常に 0 という値を返す。このレジスタに値を書いても変化はしないし、書いた値は消失する。
汎用レジスタ $31 は jal (jump and link) 命令でリンクレジスタとして使われる。
HIおよびLOレジスタは乗除算の結果へのアクセスに使われ、mfhi (move from high) 命令と mflo 命令がそのためにある。
汎用レジスタを使う際のハードウェア上の制限はこれだけである。
各種MIPSツールチェーンでは、レジスタをどのように使うかについて呼出規約を定めている。これはツールチェーンのソフトウェアが定めているもので、ハードウェアにそのような制限があるわけではない。
呼び出された側が保存すると定められているレジスタは、サブルーチンや関数の呼び出しやシステムコールでも保持される。例えば、$s-レジスタをルーチン内で使うときは、その内容をスタックに一時的に退避させなければならない。$sp と $fp はルーチンに入ってきたときにセーブされ、それぞれルーチン固有の固定値でインクリメントされる。そして、そのルーチンから戻るときに元の値に戻す。一方 $ra は jal 命令でルーチンに飛び込むときに自動的に変更される。$t-レジスタはサブルーチンを呼び出すと内容が破壊されるので、必要なら呼び出す側がセーブしておかなければならない。
初の商用モデルR2000は1985年に発表された。実行に複数サイクルを要する乗算と除算命令の処理部をチップ上にやや独立したユニットとして追加した。乗除算の結果は直接汎用レジスタには入らず、専用のレジスタに出力されるため、それを汎用レジスタに持ってくる命令も追加された。その命令を乗除算の完了前に発行するとパイプラインがインターロックする。
R2000は起動時にビッグエンディアンとリトルエンディアンのどちらかを選んで動作する。32ビット汎用レジスタを32本持つが、コンディションコードレジスタを持たない。設計者はそれがボトルネックになる可能性を考慮したためで、条件判断は指定した2つのレジスタの値の比較を行い、その結果で分岐の可否を判断する。レジスタに入っている値で条件判断するのはAMD Am29000 や DEC Alpha とよく似ている。なお、プログラムカウンタには直接アクセスできない。
R2000は最大4個のコプロセッサをサポートしており、そのうち1つは主CPUに組み込まれていて、例外処理、トラップ処理、メモリ管理などを行う。したがって、実際に外付けできるコプロセッサは3個までである。オプションの R2010 FPUをコプロセッサとして接続できる。R2010は32ビットの浮動小数点レジスタを32本持ち、倍精度演算では64ビットレジスタ16本として使用できる。
R2000の後継としてR3000が1988年に登場した。命令およびデータ向けにそれぞれ32KB(間もなく64KBに拡大)のキャッシュを追加し、マルチプロセッシングのためのキャッシュコヒーレンシにも配慮していた。