R4000は、MIPS III命令セットアーキテクチャ (ISA) を実装したマイクロプロセッサで、ミップス社が設計した。1991年10月1日に正式発表された[1][2]。64ビットのマイクロプロセッサとしては最初期のもので、MIPS III を最初に実装した。1990年代初期、RISCマイクロプロセッサは Intel486 などのCISCマイクロプロセッサに取って代わることが期待され(1991年当時、副社長だったスキップ・ストリッター
(英語版)はR4000を製造するNECが486を製造するintelとの価格競争に勝つだろうとの見方を示していた[3])、R4000はRISCプラットフォームの業界共通規格である Advanced Computing Environment(英語版) (ACE) で使用するマイクロプロセッサに選ばれた。ACE自体は様々な要因が重なって失敗に終わったが、R4000 はワークステーションやサーバ市場で成功を収めた。uPD30400RJ-40R3000に比較して、以下のような強化がなされている。
FPUを内蔵
64ビット対応のレジスタセットと命令セット
8段のパイプラインで、システムクロックの倍のクロックで動作する(スーパーパイプラインと呼称)。
動作周波数(内部)は100MHzと150MHz
二次キャッシュメモリをサポート(最大 4Mバイト)
マルチプロセッサ対応の命令とキャッシュ
R4000はバリエーションとして以下のものがある。
R4000PC 二次キャッシュへのインタフェースを削除してピン数を減らしたバージョン。
R4000SC 二次キャッシュを接続可能なバージョン。
R4000MC 二次キャッシュ・インタフェースに加えてマルチプロセッサ対応インターフェイスを備えたバージョン。
ただし、内蔵キャッシュは命令 8Kバイト、データ 8Kバイトであり、R3000よりも小さくなっている。ほとんど間をおかずに内蔵キャッシュ容量を倍増したR4400をリリースしている。スーパーパイプラインの割りには動作周波数が低く、スーパースカラも採用していないため、他社CPUに遅れをとるようになった。これは自社工場を持たず、設計と製造が分離されたことによるオーバーヘッドによるものと見るものもある。その後、R10000などにより、第一線級CPUファミリーへの復帰を図ったが、ある程度先端的なラインと製造技術を要求するため、製造できるメーカが限られる結果となり、競争力をさらに低下させる遠因ともなった。
とは言うものの、R4000/R4400はワークステーションやサーバに広く使われた。また、派生品の R4100、R4300、R4600などは組み込みシステムで多く使われている。 R4000は、パイプラインの段数を8段にしてひとつのステージの処理量を減らし、動作周波数を向上させた(スーパーパイプライン)。プロセッサのアーキテクチャ上の改善は実はそれだけであり、分岐予測もアウト・オブ・オーダー実行も投機的実行もレジスタ・リネーミングもこの段階では全く採用されていない。それよりも、設計上の主眼はマルチプロセッサ対応機能のサポートと64ビット化に置かれている。 細かい機能の改善点としては、以下のような点が上げられる。 64ビットモードでは、汎用レジスタが全て64ビット幅となり、アドレスに関連する情報を格納するCP0レジスタも64ビット化された。各種演算は64ビット版が用意されている。メモリ管理ユニット (MMU) は48エントリのTLBを使って仮想アドレスから物理アドレスへの変換を行う。仮想アドレス空間は64ビットとなっているが、実はフラットではない(右図参照)。実際には40ビット、すなわち1TBの仮想記憶空間しか実装していない。それ以外のビットはゼロであることを確認するだけとなっている。物理アドレスは36ビットで、物理メモリ空間は64GBまでとなっている。また、特筆すべきは特権モードとしてカーネルモードとユーザモードの中間のスーパーバイザモードが導入された点である。
アーキテクチャ
branch likely 命令の追加(MIPS II で既に追加されている)。条件分岐命令では次の命令が必ず実行された上で分岐すべき状態ならば分岐していた。branch likely命令では分岐するときだけ次の命令を実行し、分岐しないときは実行しないという動作をする。これを使うと、分岐先を2命令先にしておけば、実質的に分岐で実行されるのは次の命令だけとなり、パイプラインを乱さずに条件付動作を実現できる。
浮動小数点演算では、平方根を求める命令が追加された。
TLBは 48エントリと減っているが、1エントリで物理ページを2ページマップすることができるようになっている。したがって、実質的には96エントリに増えているとも言える。
また、ページサイズが4Kバイト固定から、4K?16Mバイトまで可変となった。たとえばX Window Systemのサーバプロセスがフレームバッファを16MバイトのページでマップすることでTLBの浪費を防ぐことができる。
64ビット・アーキテクチャR4000/R4400の64ビットモードでのメモリマップ