(57)【特許請求の範囲】
【請求項１】
パイプラインプロセッサを動作させる方法であって、
命令フェッチの順序どおりのシーケンスを決定するステップと、
前記命令を順序どおりにフェッチするステップと、
順序どおりに前記フェッチされた命令を待ち行列に入れるステップと、
前記命令を順序どおりでなく推測で実行して結果を発生するステップと、
実行された命令の結果を順序どおりに回収するステップと、
実行された命令の結果の前記回収を追跡するステップと、
再同期化条件を予め規定するステップと、
命令が実行される際に前記予め規定された再同期化条件を検出するステップと、
前記再同期化条件が検出された命令の結果を回収する際に前記プロセッサを再同期化させるステップとを含み、再同期化動作は、
フェッチされた命令の前記待ち行列をフラッシュするステップと、
回収された命令結果の前記追跡に基づいて命令フェッチの順序どおりのシーケンスを命令点へ再指定するステップとを含む、方法。
【請求項２】
命令フェッチの前記順序どおりのシーケンスを再指定する前記ステップが、再同期化条件が検出された命令に先立つ命令にフェッチを再指定するステップを含む、請求項１に記載の方法。
【請求項３】
命令フェッチの前記順序どおりのシーケンスを再指定する前記ステップが、再同期化条件が検出される命令へフェッチを再指定するステップを含む、請求項１に記載の方法。
【請求項４】
前記フェッチされた命令を順序どおりに待ち行列に入れる前記ステップが、
複数のリオーダバッファエントリを有するリオーダバッファにおいて、前記命令を順序どおりに待ち行列に入れるサブステップと、
前記命令を複数の機能ユニットのいくつかに発行してから次に前記命令を実行するサブステップとを含み、前記複数の機能ユニットはそれぞれのリザベーションステーションを各々有し、前記ステップはさらに
前記機能ユニットに指定された前記選択された命令を前記それぞれのリザベーションステーションで待ち行列に入れるサブステップを含み、
フェッチされた命令の前記待ち行列をフラッシュする前記ステップは、
前記複数の機能ユニットの前記リザベーションステーションをクリアするサブステップと、
前記再同期化条件が検出される前記命令に続いて待ち行列に入れられるすべてのリオーダバッファエントリをクリアするサブステップとを含む、請求項１に記載の方法。
【請求項５】
前記命令が、可変数のビットだけデータをそれぞれローテートまたはシフトするデータローテート命令またはデータシフト命令を含み、前記可変数は順番に関して前の命令の結果に従属し、
前記命令が、前記データローテート命令またはデータシフト命令の結果を条件とする条件分岐命令を含み、
再同期化条件を検出する前記ステップが、ローテートまたはシフトのための前記可変ビット数をゼロに設定する前記データローテート命令またはデータシフト命令の結果を検出するステップを含み、条件分岐命令が前記結果を条件とする、請求項１に記載の方法。
【請求項６】
前記命令が浮動小数点例外条件が検出される浮動小数点命令を含み、
前記プロセッサが、浮動小数点例外条件が無視されるかどうかを判断する外部信号に接続される入力ピンを含み、
再同期化条件を検出する前記ステップが、浮動小数点例外条件を検出するステップを含み、前記外部信号は、前記浮動小数点例外条件が無視されることを特定する、請求項１に記載の方法。
【請求項７】
前記命令が、複数のサブ動作のシーケンスとして実行される命令を含み、
再同期化条件を検出する前記ステップが、前記複数のサブ動作のうちの１つの実行中に、後続のサブ動作の実行を無意味にする条件を検出するステップを含む、請求項１に記載の方法。
【請求項８】
サブ動作のシーケンスとして実行される浮動小数点命令を前記命令が含み、前記浮動小数点命令は浮動小数点機能ユニットによって実行され、
再同期化条件を検出する前記ステップが、浮動小数点サブ動作の実行中に、後続のサブ動作の実行を無意味にする条件を検出するステップを含む、請求項１に記載の方法。
【請求項９】
前記命令が浮動小数点スタック交換命令を含み、
再同期化条件を検出する前記ステップが、浮動小数点スタック交換命令の実行中に、スタックオーバーフロー条件およびスタックアンダーフロー条件を含むスタックエラー条件を検出するステップを含む、請求項１に記載の方法。
【請求項１０】
前記命令がメモリへのデータストア命令を含み、
再同期化条件を検出する前記ステップが、メモリへのデータストア命令の実行中に、命令メモリへのストアを検出するステップを含む、請求項１に記載の方法。
【請求項１１】
パイプラインプロセッサであって、
命令フェッチの順序どおりのシーケンスを決定するフェッチプログラムカウンタと、
前記フェッチプログラムカウンタに接続されて、前記命令を順序どおりにフェッチするための命令キャッシュと、
前記命令キャッシュに結合されて、前記フェッチされた命令を順序どおりに待ち行列に入れるためのオーダバッファアレイと、
前記命令キャッシュおよび前記リオーダバッファアレイに結合されて、前記命令を順序どおりでなく推測で実行して結果を発生するための機能ユニットと、
前記機能ユニットに結合されて実行された命令の結果を順序どおりに回収するためのリオーダバッファコントローラと、
前記リオーダバッファコントローラに結合されて、実行された命令の結果の前記回収を追跡する命令ポインタと、
前記機能ユニットに結合されて、命令が実行される際に再同期化条件を検出するための再同期化条件検出器と、
前記リオーダバッファコントローラに結合されて、再同期化条件がそれについて検出された命令の結果の回収に応答する再同期化コントローラを含み、前記再同期化コントローラはさらに
前記再同期化コントローラに結合されて、フェッチされた命令の待ち行列をフラッシュするための待ち行列コントローラと、
前記命令ポインタを前記フェッチプログラムカウンタに結合し、回収された命令結果の前記追跡に基づいて命令のフェッチの順序どおりのシーケンスを再指定する分岐ユニットとを含む、パイプラインプロセッサ。
【請求項１２】
複数の機能ユニットをさらに含み、前記複数の機能ユニットのいくつかは選択されて前記命令を推測で実行し、前記機能ユニットは前記選択された命令を待ち行列に入れるためのリザベーションステーションを有し、
前記待ち行列コントローラは、前記リザベーションステーションをフラッシュするよう前記複数の機能ユニットを指示することにより、および前記リオーダバッファアレイをフラッシュするよう前記リオーダバッファを指示することにより前記命令待ち行列をフラッシュする、請求項１１に記載のパイプラインプロセッサ。
【請求項１３】
複数の機能ユニットをさらに含み、
第１の機能ユニットが算術論理ユニット（ＡＬＵ）であり、前記ＡＬＵにより実行される命令が、データを可変のビット数だけローテートまたはシフトするそれぞれデータローテート命令およびデータシフト命令を含み、前記可変数は順番に関して前の命令の結果に依存し、
第２の機能ユニットが分岐ユニットであり、前記分岐ユニットで実行される命令が、前記データローテート命令またはデータシフト命令の結果を条件とする条件分岐命令を含み、前記分岐ユニットは、ローテートまたはシフトに関する前記可変数のビットを設定する結果がゼロであるとき、再同期化条件を発生するための回路を含む、請求項１１に記載のパイプラインプロセッサ。
【請求項１４】
前記プロセッサは、浮動小数点例外条件が無視されるかどうかを判断する外部信号に結合された入力ピンを含み、
前記機能ユニットは浮動小数点ユニットであり、前記浮動小数点ユニット上で実行される前記命令は、浮動小数点例外条件が検出される浮動小数点命令を含み、前記浮動小数点ユニットは、浮動小数点例外条件が検出されかつ、前記浮動小数点例外条件が無視されることを前記外部信号が特定するとき、再同期化条件信号を発生するための回路を含む、請求項１１に記載のパイプラインプロセッサ。
【請求項１５】
前記機能ユニットは、複数のサブ動作のシーケンスとして実行される命令を実行する機能ユニットであり、前記機能ユニットは、後続のサブ動作の実行を無意味にする前記複数のサブ動作の１つの実行中に、再同期化条件信号を発生するための回路を含む、請求項１１に記載のパイプラインプロセッサ。
【請求項１６】
前記機能ユニットが浮動小数点ユニットであり、前記浮動小数点ユニットで実行される命令が、サブ動作のシーケンスとして実行される浮動小数点命令を含み、前記浮動小数点ユニットは、後続のサブ動作の実行を無意味にする浮動小数点サブ動作の実行中に再同期化条件信号を発生するための回路を含む、請求項１１に記載のパイプラインプロセッサ。
【請求項１７】
前記命令が浮動小数点スタック交換命令を含み、前記プロセッサはさらに、浮動小数点スタック交換命令の実行中にスタックオーバーフロー条件およびスタックアンダーフロー条件を含むスタックエラー条件を検出しかつ、スタックエラー条件が検出されると、再同期化条件信号を発生するための回路を含む、請求項１１に記載のパイプラインプロセッサ。
【請求項１８】
前記機能ユニットはロード／ストア機能ユニットであり、前記命令が、前記ロード／ストア機能ユニットにより実行されるメモリへのデータストア命令を含み、
前記ロード／ストア機能ユニットが、メモリへのデータストア命令の実行中に命令メモリへのストアを検出しかつ、命令メモリへのストアが検出されると、再同期化条件信号を発生するための回路を含む、請求項１１に記載のパイプラインプロセッサ。
【請求項１９】
前記再同期化コントローラが選択的に、第１の場合に、それについて再同期化条件が検出される命令に先立つ命令に命令フェッチの順序どおりのシーケンスを再指定し、第２の場合に、再同期化条件がそれについて検出される命令に命令フェッチの順序どおりのシーケンスを再指定する、請求項１１に記載のパイプラインプロセッサ。
【請求項２０】
パイプラインプロセッサを動作させる方法であって、
フェッチプログラムカウンタを更新するステップと、
メモリから命令をフェッチするステップとを含み、前記命令は前記フェッチプログラムカウンタによって示され、さらに
複数の命令を複数の機能ユニットのうちの示されたものに発行するステップを含み、前記命令はフェッチの順に発行され、さらに
前記発行された命令を前記複数の機能ユニットのうちの前記示されたもののリザベーションステーションに待ち行列に入れるステップと、
リオーダバッファの待ち行列に前記待ち行列に入れられた命令に対応する結果エントリを発行順に割当てるステップと、
前記機能ユニットが前に待ち行列に入れられた命令の実行を終え、かつ前記命令を実行する際に用いられるデータが先に発行された命令の実行から利用可能となっているときに、リザベーションステーションからの前記命令を実行するステップと、
前記対応する命令の実行が完了すると、前記割当てられた結果エントリに結果を入れるステップと、
前記リオーダバッファ待ち行列のヘッドにある、入れられた結果を回収するステップと、
前記結果が回収されるときに命令ポインタを更新するステップとを含み、前記命令ポインタは、前記結果エントリに対応する命令の前記フェッチプログラムカウンタと一致し、さらに
前記プロセッサを再同期化させるステップを含み、これがさらに
命令の実行中に再同期化条件を検出するステップと、
前記再同期化条件を検出する命令に対応する割当てられた結果エントリにおいて前記再同期化条件を認め、前記入れられた結果を回収する際に前記再同期化条件を認めるステップと、
前記機能ユニットの前記リザベーションステーションおよび前記リオーダバッファをフラッシュするステップと、
前記フェッチプログラムカウンタを前記命令ポインタによってアドレスされる前記命令に再指定するステップとを含む、方法。
【請求項２１】
前記命令が、データを可変数ビットだけそれぞれローテートおよびシフトするデータローテート命令およびデータシフト命令を含み、前記可変数は先に発行された命令の結果に依存し、
前記データローテート命令およびデータシフト命令の結果を条件とする条件分岐命令を前記命令が含み、
再同期化条件を検出する前記ステップは、ローテートおよびシフトのための前記可変ビット数をゼロに設定する前記データローテート命令またはデータシフト命令の結果を検出するステップを含み、条件分岐命令が前記結果を条件とする、請求項２０に記載の方法。
【請求項２２】
前記命令が浮動小数点例外条件が検出される浮動小数点命令を含み、
前記プロセッサが、前記浮動小数点例外条件が無視されるかどうかを決定する外部信号に結合される入力ピンを含み、
再同期化条件を検出する前記ステップは、浮動小数点例外条件を検出する前記ステップを含み、前記外部信号は、前記浮動小数点例外条件が無視されることを特定する、請求項２０に記載の方法。
【請求項２３】
前記命令が、複数のサブ動作のシーケンスとして発行され、実行される命令を含み、
再同期化条件を検出する前記ステップが、後続のサブ動作の実行を無意味にする条件を、サブ動作の実行中に検出するステップを含む、請求項２０に記載の方法。
【請求項２４】
前記命令が、サブ動作のシーケンスとして発行され、実行される浮動小数点命令を含み、
再同期化条件を検出する前記ステップは、後続のサブ動作の実行を無意味にする条件を、浮動小数点サブ動作の実行中に検出するステップを含む、請求項２０に記載の方法。
【請求項２５】
前記命令はスタック交換命令を含み、再同期化条件を検出する前記ステップは、スタック交換命令の実行中に、スタックオーバーフロー条件およびスタックアンダーフロー条件を含むスタックエラー条件を検出するステップを含む、請求項２０に記載の方法。
【請求項２６】
前記命令が浮動小数点スタック交換命令を含み、
再同期化条件を検出する前記ステップは、浮動小数点スタック交換命令の実行中に、スタックオーバーフロー条件およびスタックアンダーフロー条件を含むスタックエラー条件を検出するステップを含む、請求項２０に記載の方法。
【請求項２７】
前記命令がメモリへのデータストア命令を含み、
再同期化条件を検出する前記ステップは、メモリへのデータストア命令の実行中に、命令メモリへのストアを検出するステップを含む、請求項２０に記載の方法。
【請求項２８】
パイプラインプロセッサであって、
命令キャッシュを含み、前記命令キャッシュは、
キャッシュメモリと、
フェッチプログラムカウンタレジスタと、
前記フェッチプログラムカウンタレジスタおよび前記キャッシュメモリに結合されるフェッチ論理とを備え、前記プロセッサはさらに
前記命令キャッシュに結合される命令デコーダと、
複数の機能ユニットとを含み、その各々は前記命令デコーダに結合されて、前記機能ユニットのうち指定されたものに発行される命令を受取り、前記機能ユニットの各々は、リザベーションステーション命令待ち行列、および前記リザベーションステーション命令待ち行列に結合されて実行のための命令を受取る命令実行回路を有し、さらに
前記命令デコーダおよび前記機能ユニットに結合されるリオーダバッファを含み、前記リオーダバッファは、
前記機能ユニットに結合されて実行結果を受取る結果エントリの順序どおりの待ち行列と、
結果を回収するために前記結果エントリ待ち行列のヘッドに結合される回収論理と、
前記回収論理に結合される命令ポインタとを備え、前記命令ポインタは回収する結果の前記プログラムカウンタと一致し、
前記プロセッサは再同期化論理をさらに含み、前記再同期化論理は、
前記機能ユニットの指定されたものに結合される複数の再同期化条件検出器と、
前記リオーダバッファ結果エントリ待ち行列に結合される再同期化インジケータと、
前記リオーダバッファに結合され、前記リオーダバッファをフラッシュすることによって前記回収論理および前記再同期化インジケータに応答する待ち行列コントローラと、
前記機能ユニットのリザベーションステーションに結合され、前記リザベーションステーションをフラッシュすることによって前記回収論理および前記再同期化インジケータに応答する待ち行列論理と、
前記命令ポインタを前記フェッチプログラムカウンタに結合することによって前記回収論理および前記再同期化インジケータに応答するターゲットプログラムカウンタとを備える、パイプラインプロセッサ。
【請求項２９】
第１の機能ユニットが算術論理ユニット（ＡＬＵ）であり、前記ＡＬＵで実行される命令が、可変数のビットだけデータをそれぞれローテートまたはシフトするデータローテート命令およびデータシフト命令を含み、前記可変数は、順番に関して前の命令の結果に依存し、
第２の機能ユニットが分岐ユニットであり、前記分岐ユニットで実行される命令が、前記データローテート命令またはデータシフト命令の結果を条件とする条件分岐命令を含み、前記分岐ユニットは、ローテートまたはシフトのための前記可変ビット数を設定する前記第１の機能ユニットの結果がゼロであるときに再同期化条件信号を発生するための回路を含む、請求項２８に記載のパイプラインプロセッサ。
【請求項３０】
前記プロセッサは、浮動小数点例外条件が無視されるかどうかを判断する外部信号に結合された入力ピンを含み、
機能ユニットが浮動小数点ユニットであり、前記浮動小数点ユニットで実行される命令が、浮動小数点例外条件が検出される浮動小数点命令を含み、前記浮動小数点ユニットは、浮動小数点例外条件が検出されかつ、浮動小数点例外条件が無視されることを外部信号が特定すると、再同期化条件信号を発生するための回路を含む、請求項２８に記載のパイプラインプロセッサ。
【請求項３１】
機能ユニットが、複数のサブ動作のシーケンスとして実行される命令を実行する機能ユニットであり、前記機能ユニットは、後続のサブ動作の実行を無意味にする前記複数のサブ動作の１つの実行中に再同期化条件信号を発生するための回路を含む、請求項２８に記載のパイプラインプロセッサ。
【請求項３２】
機能ユニットが浮動小数点ユニットであり、前記浮動小数点ユニットで実行される命令が、サブ動作のシーケンスとして実行される浮動小数点命令を含み、前記浮動小数点ユニットは、後続のサブ動作の実行を無意味にする浮動小数点サブ動作の実行中に再同期化条件信号を発生するための回路を含む、請求項２８に記載のパイプラインプロセッサ。
【請求項３３】
前記命令が浮動小数点スタック交換命令を含み、前記プロセッサはさらに、浮動小数点スタック交換命令の実行中にスタックオーバーフロー条件およびスタックアンダーフロー条件を含むスタックエラー条件を検出しかつ、スタックエラー条件が検出されると、再同期化条件信号を発生するための回路を含む、請求項２８に記載のパイプラインプロセッサ。
【請求項３４】
機能ユニットがロード／ストア機能ユニットであり、
前記命令は、前記ロード／ストア機能ユニットにより実行されるメモリへのデータストア命令を含み、
前記ロード／ストア機能ユニットは、メモリへのデータストア命令の実行中に命令メモリへのストアを検出しかつ、命令メモリへのストアが検出されると、再同期化条件信号を発生するための回路を含む、請求項２８に記載のパイプラインプロセッサ。
【請求項３５】
パイプラインプロセッサであって、
命令キャッシュを含み、前記命令キャッシュは
キャッシュメモリと、
フェッチプログラムカウンタレジスタと、
前記フェッチプログラムカウンタレジスタおよび前記キャッシュメモリに結合されるフェッチ論理とを備え、前記フェッチ論理は前記カウンタを更新し、前記フェッチプログラムカウンタによって示された命令をフェッチし、
前記パイプラインプロセッサはさらに、
前記命令キャッシュに結合されて複数の命令をフェッチの順に同時に発行するための命令デコーダと、
複数の機能ユニットとを含み、その各々は前記命令デコーダに結合されて発行された命令を受取り、前記命令は前記機能ユニットのうちの示されたものに発行され、前記機能ユニットの各々は
前記命令を待ち行列に入れるリザベーションステーションと、
前記リザベーションステーションに結合されて命令を前記リザベーションステーション待ち行列から受取り、前に待ち行列に入れられた命令の実行が完了しかつ前記命令を実行するためのデータが先に発行された命令の実行から利用可能になると、命令を実行する命令実行回路とを有し、
前記プロセッサはさらに
前記命令デコーダおよび前記機能ユニットに結合されるリオーダバッファを含み、前記リオーダバッファは
結果エントリの待ち行列を備え、前記エントリは発行順に割当てられ、前記待ち行列に入れられた命令に対応し、対応する命令の実行が完了すると、前記エントリは前記機能ユニットから結果を受取り、前記リオーダバッファはさらに
前記待ち行列に結合されて前記待ち行列のヘッドにある結果エントリを回収する回収論理と、
前記回収論理に結合される命令ポインタとを備え、前記命令ポインタは、前記結果エントリが回収されると前記回収論理によって更新され、前記命令ポインタは、前記結果エントリに対応する命令のフェッチプログラムカウンタと一致し、
前記プロセッサはさらに再同期化論理を含み、前記再同期化論理は、
複数の再同期化条件検出器を含み、その各々は示された機能ユニットに結合され、前記再同期化条件は、実行する命令に関連して検出され、前記再同期化論理はさらに
前記リオーダバッファ結果エントリ待ち行列に結合される再同期化インジケータを備え、対応する命令の実行が完了しかつ再同期化条件が検出されると、再同期化が示され、
前記再同期化論理はさらに、
前記リオーダバッファに結合されて、前記リオーダバッファをフラッシュするための再同期化インジケータを有する前記リオーダバッファエントリの回収に応答する待ち行列コントローラと、
前記機能ユニットリザベーションステーションに結合され、前記リオーダバッファをフラッシュするための再同期化インジケータを有する前記リオーダバッファエントリの回収に応答する待ち行列論理と、
前記命令キャッシュおよびリオーダバッファを結合し、前記命令ポインタによってアドレスされた命令に前記フェッチプログラムカウンタを再指定するターゲットプログラムカウンタとを備える、パイプラインプロセッサ。
【請求項３６】
第１の機能ユニットが算術論理ユニット（ＡＬＵ）であり、前記ＡＬＵで実行される前記命令が、可変数ビットだけデータをそれぞれローテートまたはシフトするデータローテート命令およびデータシフト命令を含み、前記可変数は順番に関して前の命令の結果に依存し、
第２の機能ユニットが分岐ユニットであり、前記分岐ユニットで実行される命令が、前記データローテート命令またはデータシフト命令の結果を条件とする条件分岐命令を含み、前記分岐ユニットは、ローテートまたはシフトのための前記可変ビット数を設定する前記第１の機能ユニットの結果がゼロであるときに再同期化条件信号を発生するための回路を含む、請求項３５に記載のパイプラインプロセッサ。
【請求項３７】
前記プロセッサが、浮動小数点例外条件が無視されるかどうかを決定する外部信号に結合される入力ピンを含み、
機能ユニットが浮動小数点ユニットであり、前記浮動小数点ユニットで実行される命令が、浮動小数点例外条件がそれについて検出される浮動小数点命令を含み、前記浮動小数点ユニットは、浮動小数点例外条件が検出されかつ、前記浮動小数点例外条件が無視されることを前記外部信号が特定すると、再同期化条件信号を発生するための回路を含む、請求項３５に記載のパイプラインプロセッサ。
【請求項３８】
機能ユニットが、複数のサブ動作のシーケンスとして実行される命令を実行する機能ユニットであり、前記機能ユニットは、後続のサブ動作の実行を無意味にする前記複数のサブ動作の１つの実行中に再同期化条件信号を発生するための回路を含む、請求項３５に記載のパイプラインプロセッサ。
【請求項３９】
機能ユニットが浮動小数点ユニットであり、前記浮動小数点ユニットで実行される命令が、サブ動作のシーケンスとして実行される浮動小数点命令を含み、前記浮動小数点ユニットが、後続のサブ動作の実行を無意味にする浮動小数点サブ動作の実行中に再同期化条件信号を発生するための回路を含む、請求項３５に記載のパイプラインプロセッサ。
【請求項４０】
前記命令が浮動小数点スタック交換命令を含み、前記プロセッサはさらに、浮動小数点スタック交換命令の実行中にスタックオーバーフロー条件およびスタックアンダーフロー条件を含むスタックエラー条件を検出しかつ、スタックエラー条件が検出されると、再同期化条件信号を発生するための回路を含む、請求項３５に記載のパイプラインプロセッサ。
【請求項４１】
機能ユニットがロード／ストア機能ユニットであり、
前記命令は、前記ロード／ストア機能ユニットにより実行されるメモリへのデータストア命令を含み、
前記ロード／ストア機能ユニットは、メモリへのデータストア命令の実行中に命令メモリへのストアを検出しかつ、命令メモリへのストアが検出されると、再同期化条件信号を発生するための回路を含む、請求項３５に記載のパイプラインプロセッサ。
【請求項４２】
パイプラインプロセッサであって、命令フェッチの順序どおりのシーケンスを決定するためのフェッチプログラムカウンタと、前記フェッチプログラムカウンタに結合されて前記命令を順序どおりにフェッチするための命令キャッシュと、前記命令キャッシュに結合されて前記フェッチされた命令を順序どおりに待ち行列に入れるためのリオーダバッファアレイと、前記命令キャッシュに結合されかつ前記リオーダバッファアレイに結合されて前記命令を順序どおりでなく推測で実行して結果を発生するための機能ユニットと、前記機能ユニットに結合されて実行された命令結果を順序どおりに回収するためのリオーダバッファコントローラと、前記リオーダバッファコントローラに結合されて実行された命令結果の前記回収を追跡するための命令ポインタとを含み、前記パイプラインプロセッサは、
前記機能ユニットに結合されて、命令が実行される際に再同期化条件を検出するための再同期化条件検出器と、
前記リオーダバッファコントローラに結合されて、再同期化条件が検出される命令の前記結果の回収に応答する再同期化コントローラとを含み、前記再同期化コントローラは、
前記再同期化コントローラに結合されて、フェッチされた命令の前記待ち行列をフラッシュするための待ち行列コントローラと、
前記命令ポインタを前記フェッチプログラムカウンタに結合して、回収された命令の結果の前記追跡に基づき命令フェッチの前記順序どおりのシーケンスを再指定するための分岐ユニットとをさらに含む、パイプラインプロセッサ。
【発明の詳細な説明】
【０００１】
【発明の背景】
本発明はプロセッサアーキテクチャに関し、より特定的にはある条件に続く動作を再同期化させるためのプロセッサアーキテクチャに関する。
【０００２】
【関連技術の説明】
プロセッサおよびコンピュータは一般に、命令のフェッチ、デコードおよび実行のステップを含むいくつかのステップで命令を処理する。初期の技術によるプロセッサはこれらのステップをシリアルに実行していた。技術の進歩によって、多くの命令の別々のステップを同時に実行する、スカラプロセッサとも称するパイプラインアーキテクチャのプロセッサをもたらした。「スーパースカラ」プロセッサはパイプライン構造を用いて実現されるが、各処理ステップにおいていくつかのスカラ命令を同時に処理することで性能を向上する。したがって、スーパースカラマイクロプロセッサパイプラインでは一度にいくつかの命令が処理される。
【０００３】
スーパースカラプロセッサでは、データまたは資源が利用可能でないために発行された命令が実行できないという、命令のコンフリクトおよび従属の条件が生じる。たとえば発行された命令は、そのオペランドが他の未実行の命令によって計算されるデータに従属していれば、実行できない。したがって、スーパースカラプロセッサの性能は、複数の同時に実行される命令が共通のレジスタにアクセスすることが可能であれば、さらに向上する。しかしながら、これは本質的に資源のコンフリクトを起こす。レジスタのコンフリクトを解決する技術の１つは、「レジスタリネーム」と呼ばれる。複数の一時リネームレジスタが永久レジスタの値を設定する各命令につき１つダイナミックに割当てられる。この態様で、１つの永久レジスタが複数の命令の結果を受取るための宛先として機能し得る。これらの結果は、複数の割当てられた一時リネームレジスタに保持される。プロセッサは、リネームレジスタからデータを受取る命令が適切なレジスタにアクセスするように、リネームレジスタを追跡する。このレジスタリネーム機能は、一時リネームレジスタを含むリオーダバッファを用いて実現できる。
【０００４】
スーパースカラプロセッサの性能は、分岐命令の推測による実行によってさらに向上し、それによると、分岐の条件が予測され、それらの予測に基づいて命令が処理されて、予測の検証を待つことなく命令を連続的にデコードする。命令のデコードと命令の実行とを分けるには、命令を実行する機能ユニットとプロセッサの命令デコーダとの間でバッファを用いる。
【０００５】
したがって、スーパースカラプロセッサパイプラインでは一度にいくつかの命令が処理されるだけでなく、推測による状態にあるさらなる命令がプロセッサバッファ内に保持される。
【０００６】
パイプラインでの実行を終了して推測による命令の結果は破棄するが、もはや推測によるものではない命令の結果は保持することが望ましい条件がしばしば生じる。
【０００７】
スーパースカラパイプラインおよびプロセッサの推測の状態をクリアして、推測によるものではない最も最近の命令から命令の処理を再び始めるプロセッサおよびその動作方法が所望される。プロセッサの推測によるものではない状態は、正確に保持されなくてはならない。
【０００８】
【発明の概要】
第１の実施例に従えば、命令フェッチの順序だったシーケンスを決定するステップと、決定された順序で命令をフェッチするステップと、フェッチされた命令を決定された順序で待ち行列に入れるステップと、命令を推測によって実行して、命令実行のためにプロセッサの資源およびデータの準備が整い、利用可能となったときに、結果を発生するステップとを含むパイプラインプロセッサの動作方法が説明される。命令を推測によって実行するこの順序を、順番ではない命令の実行と称する。この方法はさらに、フェッチした順に実行された命令結果を回収するステップと、命令ポインタを用いて実行された命令の結果の回収を追跡するステップとをさらに含む。この方法はさらに、プロセッサを再同期化することを含み、命令が実行される際の再同期化条件を検出するステップと、再同期化条件が検出された命令についてその結果の回収の際にプロセッサを再同期化させるステップとを含む。再同期化の動作は、フェッチされた命令の待ち行列をフラッシュするステップと、回収された命令の結果の追跡に基づいて命令フェッチのシーケンスを再指定するステップとを含む。
【０００９】
第２の実施例に従えば、命令フェッチの順序だったシーケンスを決定するためのフェッチプログラムカウンタと、フェッチプログラムカウンタに接続されて順序どおりに命令をフェッチする命令キャッシュと、命令キャッシュに接続されて順序どおりにフェッチされた命令を待ち行列に入れるためのリオーダバッファアレイと、命令キャッシュおよびリオーダバッファアレイに接続されて命令を順番にではなく推測によって実行して結果を発生する機能ユニットとを含むパイプラインプロセッサが説明される。このプロセッサはさらに、機能ユニットに接続されて順序どおりに実行された命令の結果を回収するためのリオーダバッファコントローラと、リオーダバッファコントローラに接続されて実行された命令の結果の回収を追跡するための命令ポインタと、機能ユニットに接続されて命令が実行される際の再同期化条件を検出するための再同期化条件検出器とを含む。プロセッサはさらに、リオーダバッファコントローラに接続される再同期化コントローラを含み、これは再同期化の条件がそれについて検出された命令の結果の回収に応答する。再同期化コントローラはさらに、再同期化コントローラに接続されてフェッチされた命令の待ち行列をフラッシュする待ち行列コントローラと、命令ポインタをフェッチプログラムカウンタに接続させて、回収された命令の結果の追跡に基づいて命令のフェッチの順序だったシーケンスを再指定する分岐ユニットとを含む。
【００１０】
本発明は、添付の図面に関連して読まれると以下の詳細な説明より、よりよく理解され、その利点、目的および特徴がより明らかになるであろう。図面において同様の参照番号は同様の要素を示す。
【００１１】
【好ましい実施例の詳細な説明】
整数および浮動小数点演算を実行するための命令セットを有するスーパースカラプロセッサ１１０のアーキテクチャが図２および３に示される。なお図１は、図２および３の組合せの態様を示す。６４ビット内部アドレスおよびデータバス１１１は、プロセッサ１１０の種々の機能ブロックおよび外部メモリ１１４の間でアドレス、データおよび制御の移行のやり取りを行なう。命令キャッシュ１１６はＣＩＳＣ命令をパージングし、プリデコードする。バイトキュー１３５はプリデコードされた命令を命令デコーダ１１８に送り、これがＣＩＳＣ命令をＲＩＳＣ的演算（「ＲＯＰ」）のためのそれぞれの命令シーケンスにマッピングする。命令デコーダ１１８は、バイト待ち行列（キュー）１３５内のプリデコードされたＣＩＳＣ命令に基づいてすべてのＲＯＰに関してタイプ、オペコードおよびポインタ値を発生する。
【００１２】
適切な命令キャッシュ１１６は、デイビッド・ビィ・ウィット（David B. Witt ）およびマイケル・ディ・ゴダード（Michael D. Goddard）の「可変バイト長命令フォーマットを有するタイプのプロセッサのための命令キャッシュ」と題する１９９４年１０月２５日出願の特願平６−２６０７０１号（米国では１９９３年１０月２９日に出願された米国特許出願連続番号第０８／１４５，９０５号）にさらに詳細に説明される。適切なバイトキュー１３５は、デイビッド・ビィ・ウィットの「可変バイト長命令フォーマットを有するタイプのプロセッサのための推論的命令キュー」と題する１９９４年１０月２５日出願の特願平６−２６０７００号（米国では１９９３年１０月２９日に出願された米国特許出願連続番号第０８／１４５，９０２号）にさらに詳細に説明される。適切な命令デコーダ１１８は、デイビッド・ビィ・ウィットおよびマイケル・ディ・ゴダードの「スーパースカラ命令デコード／発行装置」と題する１９９４年１０月２６日に出願の特願平６−２６２４３７号（米国では１９９３年１０月２９日に出願された米国特許出願連続番号第０８／１４６，３８３号）により詳細に説明される。これらの各特許出願は、ここにその全体を引用によって援用する。
【００１３】
命令デコーダ１１８は種々のバスを介してプロセッサ１１０内の機能ブロックにＲＯＰ演算を発行する。プロセッサ１１０は、４つまでのＲＯＰの発行、５つまでのＲＯＰ結果の完了、および１６までの推測により実行されたＲＯＰの結果の処理をすべて同時にサポートする。ＲＯＰを実行すべき機能ユニットを特定するためのタイプコードは、４つのオペコード／タイプバス１５０を介してやり取りされる。ＡおよびＢソースオペランドおよび宛先レジスタへの４つまでのポインタ組は、それぞれＡオペランドポインタ１３６、Ｂオペランドポインタ１３７および宛先レジスタポインタ１４３を介して命令デコーダ１１８によってレジスタファイル１２４およびリオーダバッファ１２６に供給される。レジスタファイル１２４およびリオーダバッファ１２６は、ＲＩＳＣオペランドＡおよびＢの「予測実行された」ものを種々の機能ユニットに４対の４１ビットＡオペランドバス１３０およびＢオペランドバス１３１を介して供給する。ＡおよびＢオペランドバス１３０および１３１と関連するのは、４対のＡオペランドタグバス１４８およびＢオペランドタグバス１４９を含むオペランドタグバスである。オペランドデータがオペランドバスに置くのに利用可能でないときには、それが利用可能となったときに結果を受取るためのリオーダバッファ１２６内のエントリを特定するタグが対応するオペランドタグバスにロードされる。４対のオペランドおよびオペランドタグバスは４つのＲＯＰ発行位置に対応する。命令デコーダはリオーダバッファ１２６と協働して、ＲＯＰが実行された後に機能ユニットから結果を受取る、リオーダバッファ１２６内のエントリを特定するための４つの宛先タグバス１４０を特定する。機能ユニットはＲＯＰを実行し、宛先タグを５つの結果タグバス１３９のうちの１つにコピーし、結果が利用可能となったときに５つの結果バス１３２のうちの対応する１つに結果を置く。結果タグバス１３９上の対応するタグが結果を待っているＲＯＰのオペランドタグと一致すれば、機能ユニットは結果バス１３２上の結果に直接アクセスする。
【００１４】
命令デコーダ１１８は、オペコードおよびオペコードタイプを含むオペコード情報をＡおよびＢソースオペランド情報とともに４つのオペコード／タイプバス１５０を介して発行する。
【００１５】
プロセッサ１１０は、分岐ユニット１７０、特殊レジスタブロック１７１、浮動小数点機能ユニット１７２、ロード／ストア機能ユニット１７３ならびに２つの算術論理ユニット（ＡＬＵ）１７４および１７５等のいくつかの機能ユニットを含む。分岐ユニット１７０は条件分岐予測を有効化し、これによって分岐が存在する際の十分な命令フェッチ速度を可能にし、複数の命令の投入に関する性能の向上を達成する。ある条件下では、分岐ユニット１７０は、ターゲットｐｃバス１２２を介して命令キャッシュ１１６に信号を送ることによって命令のフェッチおよび発行の順序を指定し直す。分岐ユニット１７０および命令デコーダ１１８を含む適切な分岐予測システムは、ウィリアム・エム・ジョンソン（William M. Johnson）の「キャッシュ内の各命令ブロックとストアされたフェッチ情報を用いる、正しく予測された分岐命令後の実行に関する遅延を低減するためのシステム」（“System for Reducing Delay for Execution Subsequent to Correctly Predicted Branch Instruction Using Fetch Information Stored with each Block of Instructions in Cache”と題する米国特許番号５，１３６，６９７号にさらに詳細に説明され、この全体をここに引用によって援用する。各機能ユニット１７０ないし１７５は、オペランドバス１３０および１３１ならびにオペコード／タイプバス１５０に接続された入力を有するそれぞれのリザベーションステーション（図示せず）を有する。リザベーションステーションは、機能ユニットへの推測的なＲＯＰの発行を可能にする。
【００１６】
ロード／ストアユニット１７３はデータキャッシュ１８０に接続され、機能ユニット、レジスタファイル１２４、リオーダバッファ１２６およびデータキャッシュ１８０の間でデータをやり取りするために用いられる。データキャッシュ１８０は、命令キャッシュ１１６のアーキテクチャと類似したものを用いて構成される。どちらも、ストアアレイおよび対応するタグアレイを含む線形的にアドレス可能なキャッシュである。ＡＬＵ１７４およびＡＬＵ１７５は、２進で符号化された数値データに対して演算する算術命令を実行する。演算は、加算、減算、乗算および除算、ならびに増分、減分、比較および符号の変更を含む。符号付きおよび符号なし２進整数の計算もサポートされる。ＡＬＵ１７５は右および左シフトならびにローテート命令を実行する。算術ならびにシフトおよびローテート命令は、ゼロフラグ（ＺＦ）、キャリーフラグ（ＣＦ）、符号フラグ（ＳＦ）およびオーバーフローフラグ（ＯＦ）を更新する。ＣＦは符号なし整数に関して更新される。ＳＦおよびＯＦは符号付き整数に関して更新される。ＺＦは、符号付きおよび符号なし整数の両方に関連し、結果のビットすべてがクリアされるときにセットされる。
レジスタファイル１２４は、整数および浮動小数点命令で用いられるデータをストアするためのマッピングされたＣＩＳＣレジスタを含む物理記憶メモリである。レジスタファイル１２４は、４つまでの同時に発行されるＲＯＰの各々のためのソースオペランドに関するレジスタ番号を指定するＡおよびＢオペランドポインタ１３６および１３７の２つまでのレジスタポインタによってアドレスされる。これらのポインタはレジスタファイルのエントリを指し、選択されたエントリ内の値が８つの読出ポートを介してオペランドバス１３０および１３１のオペランドバスに置かれる。整数は３２ビット＜３１：０＞レジスタ内にストアされ、浮動小数点数はレジスタファイル１２４の８２ビット＜８１：０＞浮動小数点レジスタにストアされる。レジスタファイル１２４は、４つの４１ビットライトバックバス１３４を介してリオーダバッファ１２６から実行されたおよび推測ではない演算の整数および浮動小数点結果を受取る。ＲＯＰとしてリオーダバッファ１２６からレジスタファイル１２４に書込まれる結果は回収（リタイア）される。ＲＯＰの実行の結果として生じるフラグは、結果データの回収と類似した態様で回収される。フラグはリオーダバッファ１２６からＥＦＬＡＧＳライン１４５を介して状態フラグレジスタ１２５に回収される。
【００１７】
リオーダバッファ１２６は、推測によって実行されたＲＯＰの相対的順序を追跡する環状ＦＩＦＯである。リオーダバッファ１２６の記憶位置は、回収する結果をレジスタファイル１２４に送り、かつ機能ユニットから結果を受取るためにダイナミックに割当てられる。命令がデコードされると、その宛先オペランドが次の利用可能なリオーダバッファの位置に割当てられ、その宛先レジスタ番号は宛先タグとしてその位置と関連付けられ、実際には宛先レジスタをリオーダバッファの位置にリネームする。そのソースオペランドのレジスタ番号は、リオーダバッファ１２６およびレジスタファイル１２４に同時にアクセスするために用いられる。リオーダバッファ１２６が、その宛先タグがソースオペランドレジスタ番号と一致するエントリを持たなければ、レジスタファイル１２４内の値がオペランドとして選択される。リオーダバッファ１２６が１つ以上の一致するエントリを有する場合には、最も新しく割当てられた一致するエントリの値が、もし利用可能であれば供給される。結果が利用可能でなければ、そのリオーダバッファのエントリを識別するタグが、ＡおよびＢオペランドタグバス１４８および１４９のオペランドタグバスを介して供給される。結果またはタグは、それぞれオペランドバス１３０、１３１またはオペランドタグバス１４８、１４９を介して機能ユニットに供給される。機能ユニット１７０ないし１７５における実行の完了から結果が得られれば、結果およびそれらのそれぞれの結果タグが、５バス幅結果バス１３２および結果タグバス１３９を介してリオーダバッファ１２６および機能ユニットのリザベーションステーションに供給される。５つの結果、結果タグおよび状態バスのうちの４つは、リオーダバッファに整数および浮動小数点結果を送るための汎用バスである。第５の結果、結果タグおよび状態バスは、転送されない結果である情報をある機能ユニットからリオーダバッファに転送するために用いられる。たとえば、ロード／ストア機能ユニット１７３によるストア動作または分岐ユニット１７０による分岐動作から起こる状態情報は、この付加的なバスに置かれる。この付加的なバスは結果バスのバンド幅を節約する。浮動小数点（ＦＰ）フラグバス１３８は、浮動小数点機能ユニット１７２からリオーダバッファ１２６に浮動小数点情報を送る。リオーダバッファ１２６は例外および誤予測誤りを扱い、プログラムカウンタ（図示せず）および実行フラグを含むあるレジスタの状態を維持する。一般に、例外条件は機能ユニットによって検出される。機能ユニットは状態バス１４１を介して例外条件が起こったことを示すコードをリオーダバッファ１２６に伝える。リオーダバッファ１２６はその後すべての機能ユニットに例外ライン１６０を用いて例外条件を知らせる。リオーダバッファを含む、ＲＩＳＣコアのための適切なユニットは、デイビッド・ビィ・ウィットおよびウィリアム・エム・ジョンソンの「スーパースカラマイクロプロセッサ」と題する１９９４年１０月２７日出願の特願平６−２６３３１７号（米国では１９９３年１０月２９日に出願された米国特許出願連続番号第０８／１４６，３８２号）に開示されており、その全体をここに引用によって援用する。
【００１８】
命令デコーダ１１８は機能ユニットにＲＯＰを「順序どおりに」発行する。この順序は、リオーダバッファエントリの順序で維持される。機能ユニットはＲＯＰを待ち行列に入れ、キュー内の前のＲＯＰのすべてが実行を完了し、すべてのソースオペランドがオペランドバスまたは結果バスを介して利用可能であり、結果バスも結果を受取るために利用可能となるときにＲＯＰを投入する。このように機能ユニットはＲＯＰを「順序どおりでなく」完了する。演算の発行は演算の完了に従属せず、そのためリザベーションステーションのキューが利用可能でないこと、またはリオーダバッファのエントリが割当てられないことによってプロセッサが停止されない限り、命令デコーダ１１８は命令が迅速に完了されるかどうかに関係なくこれらをデコードし続ける。
【００１９】
データ経路はレジスタファイル１２４内のレジスタと、リオーダバッファ１２６の各エントリ内の結果フィールドと、オペランド、結果およびライトバックバスとを含む。一実施例では、プロセッサは、浮動小数点演算を収容する４１ビットデータ経路を有する。３２ビットデータ経路は４１ビット構造のビット＜３１：０＞にマッピングされる。この実施例は、スコット・エィ・ホワイト（Scott A. White）、マイケル・ディ・ゴダードおよびウィリアム・エム・ジョンソンの「整数／浮動小数点混在固定ピッチコア」（“Mixed Integer / Floating Point Fixed Pitch Core ”）と題する１９９４年４月２６日出願の米国特許出願連続番号第 号に説明され、ここにその全体を引用によって援用する。
【００２０】
プロセッサ１１０は内部アドレス／データ（ＩＡＤ）バス１１１を含み、これは命令キャッシュ１１６およびバスインタフェースユニット１８４に接続される。バスインタフェースユニット１８４は主メモリまたは外部メモリ１１４に接続されるので、プロセッサ１１０は外部メモリアクセスを与えられる。ＩＡＤバス１１１はまたロード／ストア機能ユニット１７３にも接続される。プロセッサ１１０はまた、メモリ管理ユニット（ＭＭＵ）１８８およびバスインタフェースユニット１８４（ＢＩＵ）を含む。メモリ管理ユニット１８８は、ＩＡＤバス１１１および物理Ｉ／Ｄタグブロック１８６に接続される。メモリ管理ユニット（ＭＭＵ）１８８内のトランスレーションルックアサイドバッファＴＬＢ（図２３の７４０）は、図示されるとおりＩＡＤバス１１１と物理タグＩ／Ｄブロック１８６との間に接続される。バスインタフェースユニット１８４は、物理Ｉ／Ｄタグブロック１８６とＩＡＤバス１１１とに接続される。
【００２１】
物理タグＩ／Ｄブロック１８６はＩＡＤバス１１１に接続されて、命令キャッシュ１１６およびデータキャッシュ１８０内のそれぞれ命令およびデータの物理アドレスを追跡する。具体的には、物理タグＩ／Ｄブロック１８６は、命令キャッシュ１１６およびデータキャッシュ１８０の物理アドレスを維持する物理命令／データタグアレイを含む。ブロック１８６の物理命令タグアレイは、命令キャッシュ１１６の対応する線形命令タグアレイの構成を反映する。同様に、ブロック１８６内の物理データタグアレイの構成は、データキャッシュ１８０内の対応する線形データタグアレイの構成を反映する。
【００２２】
バスインタフェースユニット１８４はＩＡＤバス１１１をメモリ１１４等の外部装置にインタフェースさせる。ＩＡＤバス１１１は、プロセッサ１１０の様々な構成要素を接続するために用いられるグローバル６４ビット共有アドレス／データ／制御バスである。ＩＡＤバス１１１は、キャッシュブロックをリフィルし、変更されたブロックを書込み、特殊レジスタブロック１７１、ロード／ストア機能ユニット１７３、データキャッシュ１８０、命令キャッシュ１１６、物理Ｉ／Ｄタグブロック１８６、トランスレーションルックアサイトバッファ１８８、およびバスインタフェースユニット１８４等の機能ブロックにデータおよび制御情報を伝えるために用いられる。
【００２３】
プロセッサ１１０はコンピュータプログラムを形成する命令のシーケンスを実行する。コンピュータプログラムは典型的にはハードディスクまたはフロッピーディスク等の不揮発性記憶媒体にストアされる。プログラムは記憶媒体から主メモリ１１４にロードされ、バスインタフェースユニット１８４を介してプロセッサ１１０によって実行される。
【００２４】
主メモリ１１４に記憶された後、命令はバスインタフェースユニット１８４を介して命令キャッシュ１１６に渡され、ここで命令が一時的に保持される。図２に示される命令キャッシュ１１６はプリフェッチされたｘ８６命令バイトをプリデコードし、命令デコーダ１１８が（単一のクロックサイクル内で）４つまでのｘ８６命令をＲＯＰにデコードかつマッピングし、４つまでのＲＯＰを並列に発行するのを補助する。図４を参照して、命令キャッシュ１１６は、キャッシュ制御２０８と、フェッチＰＣ２１０と、フェッチＰＣバス２０６と、プリデコードブロック２１２と、コードセグメントブロック２１６と、バイトキューシフトブロック２１８と、キャッシュアレイ２００とを含み、キャッシュアレイ２００は３つのアレイ、すなわち命令ストアアレイ２５０、アドレスタグアレイ２５２およびサクセッサアレイ２５４に組織される。
【００２５】
コードセグメントブロック２１６は、リクエストされたアクセスの妥当性をチェックするために用いられるコードセグメントディスクリプタのコピーを保持する。コードセグメントブロック２１６はコードセグメント（ＣＳ）ベース値を供給し、これは論理アドレスを線形アドレスに変換するためにＣＳベースライン２３０を介して分岐ユニット１７０に運ばれる。プリデコードブロック２１２は、内部アドレス／データバス１１１を介してプリフェッチされたｘ８６命令バイトを受取り、各ｘ８６命令バイトについてプリデコードビットを割当て、プリデコードされたＸ８６命令バイトを４つのバス群２０４を用いて命令ストアアレイ２５０に書込む。バイトキュー１３５は、キャッシュアレイ２００からの予測実行された命令をバッファ処理し、１６までの有効プリデコードｘ８６命令バイトを１６のバス群２４８を介して命令デコーダ１１８に与える。バイトキューシフトブロック２１８は、ｘ８６境界上の命令をローテートし、マスクし、シフトする。シフトは、ｘ８６命令のすべてのＲＯＰが命令デコーダ１１８によって投入されるとシフト制御ライン２７４上の信号に応答して起こる。キャッシュ制御２０８は、種々の命令キャッシュ１１６の動作を管理する制御信号を発生する。
【００２６】
フェッチｐｃバス２０６を介してやり取りするフェッチＰＣ２１０は、キャッシュアレイ２００内の３つのアレイの順次的および非順次的アクセスの間にフェッチされるべき命令を特定する。フェッチＰＣ２１０の中位ビットは、検索のために各アレイからのエントリにアドレスするキャッシュインデックスである。上位ビットは、アドレス指定されてアドレスタグアレイ２５２から検索されたタグと比較されるアドレスタグである。一致はキャッシュヒットを示す。この比較動作は、比較ブロック２２０によって与えられる。下位ビットは、アドレスされたバイトを識別する、命令ストアアレイ２５０からのアドレスされて検索されたエントリへのオフセットである。フェッチＰＣ、キャッシュ制御２０８およびキャッシュアレイ２００は協働して、フェッチｐｃバス２０６を介して運ばれたアドレスを維持し、これを再指定する。フェッチＰＣ２１０は、同じアドレスを維持するか、次のキャッシュエントリにアドレスを増分するか、内部アドレス／データバス１１１を介してアドレスを受取るか、またはターゲットｐｃバス１２２からアドレスをロードすることによって、あるサイクルから次のサイクルへと更新する。ターゲットＰＣは、分岐命令が回収されるときにリオーダバッファ１２６から送られる分岐予測誤りフラグ２１７に応答してキャッシュ制御２０８による活性化の際に用いられる。
【００２７】
アドレスタグアレイ２５２のエントリは、命令ストアアレイ２５０のバイトの各々に対応するバイト有効ビット、アドレスタグ、および有効ビットを含む。キャッシュヒットはアドレスタグを用いて識別される。有効ビットはアドレスタグが有効であるかどうかを示す。バイト有効ビットは、プリデコードされたｘ８６命令バイトが有効ｘ８６命令バイトおよび有効プリデコードビットを含むかどうかを示す。キャッシュミスの後、バス２０６を介して運ばれるフェッチＰＣアドレスの上位ビットをアドレスタグに書込み、タグ有効ビットをセットして有効アドレスタグであることを示し、バイト有効ビットのすべてをクリアして前のアクティビティから命令ストアアレイ２５０内の対応するエントリに残っているいかなる命令バイトをも無効にすることによって、アドレスタグアレイ２５２内のインデックス位置においてエントリが割当てられる。プリデコードされた命令バイトが命令ストアアレイ２５０内の先に割当てられたエントリに書込まれる際に、それぞれのバイト有効ビットも同様にアドレスタグアレイ２５２内の対応するエントリにおいてセットされる。
【００２８】
サクセッサアレイ２５４は分岐予測をサポートする。サクセッサアレイ２５４のエントリは、サクセッサインデックス、サクセッサ有効ビット（ＮＳＥＱ）およびブロック分岐インデックス（ＢＢＩ）を含む。ＮＳＥＱはアサートされると、サクセッサアレイが命令ストアアレイ２５０にアドレスしていることを示す。命令ブロック内のどの分岐も「成立予測」されなければ、ＮＳＥＱはクリアされる。ＢＢＩは、ＮＳＥＱがアサートされたときにのみ規定される。これは実行と予測された最後の命令バイトの現在の命令ブロック内のバイト位置を指定する。サクセッサインデックスは、キャッシュへのアドレスインデックス、命令バイトのサクセッサブロックを含む４ウェイセットアソシアティブアレイの列のインジケータ（したがってこのアドレスでどの列が「ヒット」しているかを判断するのに必要な時間を回避する）、および次の実行されると予測されたサクセッサブロック内の特定のバイトのインジケータを含む。サクセッサインデックスは、次の予測実行された命令のバイトすなわち推測による分岐のターゲットＰＣから始まる命令がキャッシュ内のどこに位置するかを示す。
【００２９】
分岐命令は、命令キャッシュ１１６および分岐ユニット１７０の協働した動作で行なわれる。たとえば、命令キャッシュ１１６は分岐を不成立と予測して命令を順次フェッチし続ける。後に分岐ユニット１７０によって分岐が成立であると判断されれば、予測は誤ったものであり、分岐ユニット１７０は予測誤りフラグ２１７および分岐成立フラグ２１９をアサートする。命令キャッシュ１１６は推測による命令のバイトキュー１３５をフラッシュする。分岐ユニット１７０は、ターゲットｐｃバス１２２を介して正しいターゲットＰＣを命令キャッシュ１１６に戻すことによって命令キャッシュ１１６に再指示を与える。フェッチＰＣ２１０は命令ストリームをターゲットｐｃアドレスに送り、バイトキュー１３５のリフィルを始める。ＮＳＥＱビットをアサートし、ＢＢＩを分岐命令の最後のバイトを指すようにセットし、ターゲット命令の命令キャッシュ１１６内の位置を示すようにサクセッサインデックスをセットすることによって、予測誤りされた分岐命令を含むサクセッサアレイ２５４のエントリが予測分岐を示すように変更される。サクセッサインデックスは、完全なアドレスではなくターゲット命令のインデックス、列およびオフセットをストアする。サクセッサインデックスによって与えられる列およびインデックスを用いてキャッシュブロックにアクセスすることにより、かつそのブロック内にストアされたアドレスタグ上位ビットを先のサクセッサインデックスからのオフセットおよびインデックスビットに連接することによって、フェッチＰＣアドレスが再構成される。
【００３０】
フェッチＰＣ２１０からの再構成された分岐ターゲットＰＣは、命令キャッシュ１１６から命令デコーダ１１８にフェッチＰＣバス２０６を介して渡され、そのため命令デコーダ１１８は命令が発行される際のデコードＰＣを維持する。命令デコーダ１１８は、バイトキュー１３５内のマーカービットおよび分岐命令を保持するキャッシュ列を識別する対応のフィールドによって指定される分岐命令位置とフェッチｐｃバス２０６を介して受取られた分岐ターゲットＰＣとを比較する。命令デコーダ１１８は、命令バイトが発行される際に現在のデコードＰＣからバイトを増分し、分岐命令の最初のバイトがバイトキュー１３５から命令デコーダ１１８にロードされるとき新しい分岐ターゲットＰＣをロードする。
【００３１】
命令デコーダ１１８は分岐命令を分岐ユニット１７０に発行する際に、デコードＰＣ、ターゲット命令の分岐オフセットおよび分岐の予測状態を送る。分岐命令を実行し、予測が正しかったかどうかを後で判断するために分岐ユニット１７０によって情報が用いられる。予測が正しければ実行が進められる。しかしながら予測誤りが起これば、分岐ユニット１７０は分岐の結果の正しいターゲットＰＣを命令キャッシュ１１６に送る。分岐成立予測された分岐が予測誤りされれば、（予測誤りされた分岐を含んでいる）先のキャッシュブロックにおけるＮＳＥＱフィールドがリセットされる。他のフィールド、ＢＢＩおよびサクセッサインデックスはＮＳＥＱがリセットされると必ず無視され、順次アクセスを示す（すなわち成立でないと予測された分岐）。負のオフセットターゲットＰＣを参照し、予測誤りされている（実際には分岐成立しない）分岐成立予測された分岐は更新されず、分岐成立予測された分岐として維持される。
【００３２】
ここで図５、６および７を参照して、図６および７の組合せの態様が図５に示される。図６および７に示される命令デコーダ１１８はバイトキュー１３５からプリデコードされたｘ８６命令バイトを受取り、これらをそれぞれのＲＯＰシーケンスに変換し、複数の発行位置からＲＯＰを発行する。変換は、ほとんどの単純な命令についてはハードワイヤード高速変換経路において処理される。４つ以上のＲＯＰに変換される複雑な命令および頻繁には用いられない命令は、マイクロコードＲＯＭ内に含まれるシーケンスによって処理される。
【００３３】
ＲＯＰを変換するのに用いられる情報は、機能ユニットタイプ、機能ユニットによって実行されるべきＲＩＳＣ的命令、ならびにソースおよび宛先ポインタの識別子を含む。命令デコーダ１１８は高速経路またはマイクロコードＲＯＭからのＲＯＰ情報を選択し、これを増し、機能ユニットによる実行のための完全なＲＯＰを供給する。
【００３４】
ＲＯＰマルチプレクサ３００はバイトキュー１３５内の１つ以上のプリデコードされたｘ８６命令を、バイトキュー１３５のヘッドにあるｘ８６命令から、１つ以上の利用可能な発行位置に同時に送る。ＲＯＰ発行位置ＲＯＰ０、１、２および３（３１０、３２０、３３０および３４０）はそれぞれの高速コンバータ０、１、２および３（順に３１２、３２２、３３２および３４２）と、それぞれの共通ステージ０、１、２および３（３１４、３２４、３３４および３４４）と、それぞれのマイクロコードＲＯＭ０、１、２および３（３１６、３２６、３３６、および３４６）とを含む。各発行位置は、共通ステージと、高速コンバータと、ＭＲＯＭとを含む。ＭＲＯＭ３１６、３２６、３３６、および３４６は、マイクロコードＲＯＭ（ＭＲＯＭ）コントローラ３６０によって制御される。
【００３５】
ＭＲＯＭは、ＣＡＬＬゲート命令、ＳＴＲＩＮＧ移動命令、および超越浮動小数点ルーチン等の複雑な対話型命令を含む、高速コンバータでは変換不可能なｘ８６命令を処理するためのＲＯＭアレイである。ＭＲＯＭ経路命令については、ＭＲＯＭコントローラ３６０はエントリポイントとして知られるマイクロコードＲＯＭアドレスを形成し、そのエントリポイントに基づいて、１サイクルにつき４つのＲＯＰの割合でＭＲＯＭ０、１、２および３（３１６、３２６、３３６および３４６）にストアされたマイクロコードＲＯＭ命令からＲＯＰシーケンスを読出す。
【００３６】
共通ステージは、高速経路およびマイクロコードＲＯＭ命令に共通したｘ８６命令変換動作を扱う。各共通ステージは命令入力信号のあるビットを分離し、宛先およびオペランドポインタをセットしレジスタを選択するためにこれらのビットをＲＯＰ選択に供給する。この信号はアドレスサイズ（３２または１６ビット）を選択し、倍長語または語のオペランドバイトサイズを判断し、特殊レジスタを選択して、特定のアドレスモードのためのオペランドを特定し、変位フィールドをいかに処理するかを規定する。このように、高速経路およびマイクロコードマッピング経路に関するすべてのｘ８６アドレスモードが共通して扱われる。
【００３７】
ＭＲＯＭコントローラ３６０は、命令タイプおよびオペコード情報の供給、発行ウィンドウを充満するＲＯＰの数の予測、予測に鑑みてバイトキュー１３５をいかにシフトするかを命令キャッシュ１１６に知らせること、バイトキュー１３５のヘッドにあるｘ８６命令について発行するＲＯＰの数をＲＯＰマルチプレクサ３００に知らせること、ならびにマイクロコードおよび制御ＲＯＭのアクセス等の制御機能を行なう。
【００３８】
ＭＲＯＭコントローラ３６０は２つの技術、すなわち命令レベルシーケンス制御およびマイクロ分岐ＲＯＰを用いてＲＯＰの順序付けを制御する。命令レベル分岐およびマイクロ分岐ＲＯＰのいずれも実行のために分岐ユニット１７０に発行され、予測誤りの際には訂正を受ける。命令レベルシーケンス制御フィールドはいくつかの能力、すなわちマイクロコードサブルーチンコール／リターン、ブロック整列されたＭＲＯＭ位置への無条件分岐、プロセッサ状態ベースの条件分岐、シーケンスの終了の識別等を与える。命令レベルシーケンスＲＯＰが発行されると、（命令アドレスではなく）ＭＲＯＭアドレスがターゲットＰＣ形成または分岐訂正のために送られる。
【００３９】
マイクロ分岐ＲＯＰは、ゼロ、非ゼロ、正または負のレジスタ値に基づいて無条件分岐および条件分岐を与える。マイクロ分岐ＲＯＰは実行のために分岐ユニット１７０に発行され、遅延効果を有する。ＭＲＯＭコントローラ３６０は、分岐ユニット１７０内のマイクロ分岐予測誤り論理によって開始されたマイクロコードＲＯＭエントリポイントを受入れる。分岐ユニット１７０によって発生されたマイクロコードエントリポイントは、ターゲットｐｃバス１２２を介して命令デコーダ１１８に渡される。マイクロ分岐訂正の際に、分岐ユニット１７０はターゲットｐｃバス１２２を介して命令デコーダ１１８に、訂正アドレスがＰＣではなくＭＲＯＭアドレスであることを知らせる。
【００４０】
ＲＯＰ選択０、１、２および３（３１８、３２８、３３８および３４８）は、共通ステージの出力と合せて、高速コンバータまたはＭＲＯＭの出力を選択し、この情報をレジスタファイル１２４、リオーダバッファ１２６および種々の機能ユニットに送る。発行された情報は、ＡおよびＢオペランド宛先ポインタ、命令タイプおよびオペコード、割込およびバックアップイネーブル、命令終了、ならびに機能ユニットに即値アドレスまたは定数を送るための即値フィールド定数を含む。分岐ユニット１７０に与えられる他の情報は、分岐ユニット１７０に分岐命令発行の際の予測を示す分岐成立予測信号を含む。
【００４１】
ＲＯＰ共有３９０およびＲＯＰ選択０、１、２および３（３１８、３２８、３３８および３４８）は、すべての発行位置間で共有される資源が用いる発行情報を発生するために種々の機能ユニットに発行される命令のためのオペランドを協働して選択する。ＲＯＰ共有３９０は、機能ユニットへの発行のためのオペコード／タイプバス１５０にＲＯＰオペコード符号化を与える。
【００４２】
分岐ユニット１７０は、オペコードを受取るのに加えて、他のＲＯＰ共有３９０の出力、すなわち１ビット交換アンダーフロー信号、２ビットキャッシュ列選択識別子、１ビット分岐成立予測選択信号、１ビットマイクロ分岐インジケータ、および分岐ユニット１７０がターゲットｐｃバス１２２を介して分岐成立予測ＦＩＦＯ（図１５の９０６）に成立予測アドレスを書込むべきかどうかを示す１ビット信号を含むこれらの出力を受取る。さらに、整数フラグソースオペランドを識別する３ビット読出フラグポインタが、分岐ユニット１７０にマッピングされる最初の未発行ＲＯＰの位置に基づいてセットされる。分岐ユニット１７０にどのＲＯＰもマッピングされていなければ、読出フラグポインタは０に設定される。２ビット使用インジケータが、分岐ユニット１７０にマッピングされる最初の未発行ＲＯＰの発行位置を設定するために符号化される。
【００４３】
命令デコーダ１１８は、デコードＰＣブロック３８２、デコーダ制御ブロック３８４およびデコーダスタック３８６を含む。デコーダ制御ブロック３８４は、バイトキュー１３５におけるＲＯＰの数、ｘ８６命令境界の位置、機能ユニットの状態（ライン３７０から）およびリオーダバッファ１２６の状態（３７２から）に基づいて、投入すべきＲＯＰの数を決定する。デコーダ制御ブロック３８４は、投入されるＲＯＰの数をシフト制御ライン２７４を介してバイトキュー１３５に伝え、バイトキュー１３５が完全に実行されたｘ８６命令の数だけシフトし、バイトキュー１３５の始めが常に次の完全なｘ８６命令の始めとなるようにする。例外または分岐予測誤りが起こると、デコーダ制御ブロック３８４は、新しいフェッチＰＣが入るか、またはエントリポイントが例外マイクロコードルーチンのためにＭＲＯＭに送られるまで、さらなるＲＯＰの投入を防ぐ。
【００４４】
デコードＰＣブロック３８２は、バイトキュー１３５から送られる各ｘ８６命令の論理プログラムアドレス値を追跡する。バイトキュー１３５が非順次的フェッチを検出すると、これは新しいアドレスを指定し、それをデコードＰＣブロック３８２に送る。分岐に続く順次的命令については、デコードＰＣブロック３８２は断たれていないシーケンスの開始および終了位置間のバイトキュー１３５におけるｘ８６バイトの数をカウントし、この数を現在のＰＣに加えてシーケンスに続く次のＰＣを決定する。デコードＰＣはＤＰＣバス２１３を介して分岐ユニット１７０に送られる。
【００４５】
デコーダスタック３８６は、先見スタックトップ（ＴＯＳ）ポインタ３０２、先見リマッピングアレイ３０４および先見フル／空アレイ３０６を含む種々の浮動小数点スタックポインタアレイおよびレジスタの先見コピーを保持する。これらのアレイおよびポインタは、スタックに影響を与えるＲＯＰの推測による投入から結果として生じる浮動小数点スタックの推測による変更を処理し、これは分岐予測誤りまたは例外の際に正しい状態に戻るようにスタックを処理することを含む。
【００４６】
先見リマッピングアレイ３０４はポインタのアレイであり、各々がスタックアレイのうちの１つのレジスタを示す。スタックの例示的な実施例では、先見リマッピングアレイ３０４は、８つの３ビットポインタのアレイであり、各々がレジスタファイル１２４内の浮動小数点スタックアレイ５００（図９に示される）のエレメントを識別する。先見ＴＯＳ３０２は、先見リマッピングアレイ３０４のポインタの１つを選択する３ビットポインタである。先見フル／空アレイ３０６は、スタック位置がフル（１）または空（０）のいずれかを示す単一ビットのアレイである。
【００４７】
スーパースカラプロセッサでは、演算が発行されることはこれが必ずしも実行されるべきであることを示すわけではない。分岐が予測され、その予測のうちのいくつかは不正確である。予測誤りされた分岐から迅速にリカバーすることが有利である。先見リマッピングアレイ３０４、先見ＴＯＳ３０２および先見フル／空アレイ３０６は、スタックの推測による状態のコピーをセーブすることによって予測誤りのリカバリを速くする。浮動小数点スタックを変更する演算については、命令デコーダ１１８は命令をデコードする際に浮動小数点スタックアレイ５００の将来の状態を更新する。命令デコーダ１１８は、スタックポインタを増分または減分する命令をデコードすると、先見ＴＯＳ３０２を更新する。同様の態様で、命令デコーダ１１８は、浮動小数点交換命令（ＦＸＣＨ）をデコードすると、ポインタを命令によって特定されるように交換することによって先見リマッピングアレイ３０４の将来の状態を調整する。スタックの状態は何らかの２つの分岐命令間で変り得るため、各分岐動作についてスタック情報が保持される。
【００４８】
ここで図８を参照して、レジスタファイル１２４は読出デコーダ４６０と、レジスタファイルアレイ４６２と、書込デコーダ４６４と、レジスタファイル制御４６６と、レジスタファイルオペランドバスドライバ４６８とを含む。読出デコーダ４６０はＡおよびＢオペランドポインタ１３６および１３７を受取り、４対の６４ビットＡおよびＢオペランドアドレス信号ＲＡ０、ＲＡ１、ＲＡ２、ＲＡ３、ＲＢ０、ＲＢ１、ＲＢ２およびＲＢ３を介してレジスタファイルアレイ４６２にアドレスする。レジスタファイル制御４６６は、リオーダバッファ１２６からＡオペランド無効ライン４５７およびＢオペランド無効ライン４５８を介して無効信号を受取り、これらは次にレジスタファイル制御４６６からレジスタファイルオペランドバスドライバ４６８に送られる。
【００４９】
レジスタファイルアレイ４６２は、ライトバックバス１３４を介してリオーダバッファ１２６から結果データを受取る。リオーダバッファエントリが３つまでの他のリオーダバッファエントリと並列に回収されると、そのエントリに関する結果データがライトバックバス１３４のうちの１つに置かれ、そのエントリのための宛先ポインタが、そのライトバックバスに対応する書込ポインタ１３３に置かれる。ライトバックバス１３４上のデータは、書込デコーダ４６４に与えられらる書込ポインタ１３３上のアドレス信号に従ってレジスタファイルアレイ４６２内の指定されたレジスタに送られる。
【００５０】
あるＲＯＰを回収する際に、リオーダバッファ１２６はデータをレジスタファイル１２４内の種々の浮動小数点スタックレジスタ、すなわち浮動小数点リマッピングアレイ４７４、浮動小数点スタックトップ（ＴＯＳ）レジスタ４７２および浮動小数点フル／空アレイ４７６に送る。レジスタファイル１２４内に位置する浮動小数点スタックアレイ５００は、拡張実データをストアするための８つの８２ビット数値レジスタのアレイである。各レジスタは、１符号ビット、１９ビット指数フィールド、６２ビット有効数字部フィールドを含む。浮動小数点リマッピングアレイ４７４は、８つのポインタのアレイであり、その各々は浮動小数点スタックアレイ５００のレジスタに対するポインタである。浮動小数点ＴＯＳ４７２は、浮動小数点リマッピングアレイ４７４へのポインタを示す３ビットポインタである。浮動小数点フル／空アレイ４７６は、スタックアレイの位置がフル（１）または空（０）のいずれであるかを示す単一ビットのアレイであり、その各々が浮動小数点スタックアレイ５００のエレメントに対応する。
【００５１】
レジスタファイルアレイ４６２は、プロセッサ機能ユニットによって演算され、これらによって発生される結果をストアするための複数のアドレス可能レジスタを含む。図９は、以下の４０のレジスタを備える例示的なレジスタファイルアレイ４６２を示し、すなわち、８つの３２ビット整数レジスタ（ＥＡＸ、ＥＢＸ、ＥＣＸ、ＥＤＸ、ＥＳＰ、ＥＢＰ、ＥＳＩおよびＥＤＩ）と、８つの８２ビット浮動小数点レジスタＦＰ０ないしＦＰ７と、１６の４１ビット一時整数レジスタＥＴＭＰ０ないしＥＴＭＰ１５と、この実施例においては一時整数レジスタＥＴＭＰ０ないしＥＴＭＰ１５と同じ物理レジスタ位置にマッピングされる８つの８２ビット一時浮動小数点レジスタＦＴＭＰ０ないしＦＴＭＰ７を含む。浮動小数点レジスタＦＰ０ないしＦＰ７は、浮動小数点スタックアレイ５００としてアドレスされ、これらはレジスタファイル１２４内のレジスタおよびスタックアレイ、浮動小数点リマッピングアレイ４７４、ＴＯＳレジスタ４７２およびフル／空アレイ４７６を用いてアクセスされる。
【００５２】
ここで図１０ないし１２を参照する。図１０は、図１１および１２の組合せの態様を示す。図１１および１２を参照して、リオーダバッファ１２６は、リオーダバッファ（ＲＯＢ）制御および状態ブロック６００と、ＲＯＢアレイ６０４と、ＲＯＢオペランドバスドライバ６０６と、ＥＩＰジェネレータ回路６３０とを含む。ＲＯＰ制御および状態ブロック６００は、ＡおよびＢオペランドポインタ１３６および１３７と宛先ポインタ（ＤＥＳＴ  ＲＥＧ）バス１４３とに接続されて、ＲＯＰに関するソースおよび宛先オペランドを識別する入力を受取る。ＲＯＢアレイ６０４は、ＲＯＢ制御および状態ブロック６００によって制御されるメモリアレイである。ＲＯＢアレイ６０４は結果バス１３２に接続されて、機能ユニットからの結果を受取る。ヘッド６１６、テイル６１８、Ａオペランド選択、Ｂオペランド選択、および結果選択信号を含む制御信号が、ＲＯＢ制御および状態６００からＲＯＢアレイ６０４に渡される。これらの制御信号は、結果バス１３２のデータから入力され、ライトバックバス１３４、書込ポインタ１３３、ＡおよびＢオペランドバス１３０および１３１、ならびにＡおよびＢオペランドタグバス１４８および１４９に出力されるＲＯＢアレイエレメントを選択する。各リオーダバッファアレイのエレメントにつき１つ与えられる１６の宛先ポインタが、従属性チェックを行なうためにＲＯＰアレイ６０４からＲＯＢ制御および状態６００に送られる。
【００５３】
ＲＯＰ発行の際に、ＡまたはＢオペランドポインタ１３６および１３７のポインタが、ＲＯＢ制御ブロック６００を介してＲＯＢアレイ６０４にアドレスし、ＲＯＰオペランドバスドライバ６０６に与えるべきオペランドデータを指定する。ＲＯＢ制御および状態６００は、ＡおよびＢオペランドポインタ１３６および１３７を介してオペランドポインタを、および宛先レジスタ（ＤＥＳＴ  ＲＥＧ）バス１４３を介して宛先ポインタを受取り、宛先ポインタをＲＯＢアレイ６０４の宛先ポインタ（ＤＥＳＴ  ＰＴＲ＜８：０＞）フィールドに書込む。
【００５４】
図１１および１２と関連して図１３は、１６のエントリを含むリオーダバッファアレイ６０４の一例を示し、これらエントリの各々は、４１ビット結果フィールドと、９ビット宛先ポインタフィールドと、４ビット下位プログラムカウンタフィールドと、１１ビット浮動小数点演算コードフィールドと、１１ビット浮動小数点フラグレジスタフィールドと、２４ビット制御および状態フィールドとを含む。４１ビット結果フィールドは、機能ユニットから受取られる結果をストアするために供給される。２つのリオーダバッファエントリが、浮動小数点結果をストアするために用いられる。整数結果は、４１ビットのうちの３２ビットにストアされ、残りの９ビットは状態フラグを保持するために用いられる。各ＲＯＢアレイ６０４のエントリの宛先ポインタフィールド（ＤＥＳＴ  ＰＴＲ＜８：０＞）は、レジスタファイル１２４内の宛先レジスタを指定する。浮動小数点演算コードフィールドは、リオーダバッファエントリに割当てられる命令に対応するｘ８６浮動小数点演算コードのビットのサブセットをストアする。浮動小数点フラグレジスタフィールドは、浮動小数点演算から結果として生じる浮動小数点フラグの状態をストアする。浮動小数点フラグは、浮動小数点機能ユニット１７２によって検出される無効オペランド、非正規化オペランドエラー、ゼロ除算、オーバーフロー、アンダーフロー、精度に関する情報をストアする。整数オペランドに関しては、対応するフラグフィールドは必要ではない、というのは整数演算から結果として生じるフラグは、４１ビット結果フィールドの上位ビットに保持されるからである。制御および状態フィールドは、ＲＯＢエントリの状態を示すビットを含み、たとえば、ALLOCATE（割当）ビット、BRANCH TAKEN（分岐成立）ビット、MISPREDICT（予測誤り）ビット、VALID （有効）ビット、EXIT（出口）ビット、UPDATE EIP（ＥＩＰ更新）ビット、EXCEPTION （例外）ビットである。ALLOCATEビットは、リオーダバッファエントリが割当てられているかどうかを示す。MISPREDICTビットは、分岐が誤って予測されたことを示す。EXCEPTION ビットは、命令の実行が例外またはエラー条件を引起こしたことを示す。VALID ビットは、結果が有効であり命令が完了したことを示す。制御および状態フィールドはまた、実行プログラムカウンタ値を発生するのに用いられるビットを含む。これらのビットは、DECODE PC CARRY ビットおよびEXITビットを含む。DECODE PC CARRY ビットは、デコードＰＣブロック３８２からのキャリービットである。EXITビットは、ＲＯＰが特定のｘ８６命令のＲＯＰシーケンスのうちの最後のＲＯＰであり、ＥＩＰレジスタ６２０の更新をトリガするのに用いられることを特定する。ＥＩＰレジスタ６２０は、特定のｘ８６命令に関するＲＯＰシーケンスが完了するときのみ更新される。
【００５５】
リオーダバッファ１２６は、ＥＩＰレジスタ６２０を更新するためのアドレス値をコンパクトな形態で保持する。４つの最下位ビット（ＬＳＢ）およびビット増分指示のみがセーブされる。順次的なｘ８６バイトについては、加えられるバイト数は１５を上回ることはなく、非順次的フェッチに関しては、分岐がうまく完了すると新しい分岐ターゲットＰＣを結果バス１３２に置く。これは、ＥＩＰレジスタ６２０の更新に関して命令デコーダ１１８からリオーダバッファ１２６へのフェッチＰＣの書込が必要でないこととなる。これは、下位ＥＩＰジェネレータ回路６３２と、上位ＥＩＰジェネレータ回路６３４とＥＩＰ制御回路６３６とを含むＥＩＰジェネレータ回路６３０を用いて行なわれる。
下位ＥＩＰジェネレータ回路６３２は、エントリマルチプレクサ６４０と、分岐マルチプレクサ６４２と、ＥＩＰレジスタ６２０の４つのＬＳＢを保持するＬＳＢ  ＥＩＰレジスタ６２２とを含む。エントリマルチプレクサ６４０は、ＲＯＢアレイ６０４のヘッド６１６にある４つのリオーダバッファ１２６エントリのデコードＰＣに対応する４つのアドレスＬＳＢを受取る。これらの４ビットフィールドが、ＲＯＰの発行の際に割当てられ、セットされて、ＲＯＢアレイ６０４の４つのエントリの下位ブロックカウンタフィールドにストアされる。エントリマルチプレクサ６４０は、４つの下位プログラムカウンタフィールドのうちの１つを選択する。分岐マルチプレクサ６４２は、ＲＯＢアレイ６０４のヘッド６１６にある４つのリオーダバッファ１２６のエントリのターゲットＰＣに対応する４つのアドレスＬＳＢを受取る。これらの４ビットフィールドは、分岐命令ＲＯＰに関してのみ規定され、ＲＯＢアレイ６０４の４つのエントリの結果フィールドにストアされる。４つのターゲットＰＣフィールドに加えて、分岐マルチプレクサ６４２はまた、エントリマルチプレクサ６４０によって選択される下位プログラムカウンタフィールドを受取る。ＥＩＰ制御回路６３６は、実行すべき次の命令を指定する４ビット下位分岐ターゲットを選択するためにエントリマルチプレクサ６４０および分岐マルチプレクサ６４２に制御信号を与える。この下位分岐ターゲットは、分岐マルチプレクサ６４２からＬＳＢ  ＥＩＰレジスタ６２２に渡され、次のＥＩＰレジスタ６２０の４ビットＬＳＢである。
【００５６】
上位ＥＩＰジェネレータ回路６３４は、エントリマルチプレクサ６５０と、分岐マルチプレクサ６５２と、発生上位増分回路６５４と、加算器回路６５６と、ＥＩＰレジスタ６２０の最上位２８ビット（ＭＳＢ）を保持するＨＳＢ  ＥＩＰレジスタ６２４とを含む。エントリマルチプレクサ６５０は、ＲＯＢアレイ６０４のヘッド６１６にある４つのリオーダバッファ１２６エントリのターゲットＰＣに対応する２８のアドレスＭＳＢを受取る。これらの２８ビットフィールドは、分岐命令ＲＯＰに関してのみ規定され、ＲＯＢアレイ６０４の４つのエントリの結果フィールドにストアされる。エントリマルチプレクサ６５０は、４つの２８ビットＨＳＢターゲットＰＣのうちの１つを選択する。分岐マルチプレクサ６５２は、エントリマルチプレクサ６５０によって選択される２８ビットＭＳＢターゲットＰＣを受取り、さらにＭＳＢ  ＥＩＰレジスタ６２４に保持される２８のＭＳＢを受取る。分岐マルチプレクサ６５２は、ＥＩＰ制御回路６３６の制御下でＭＳＢターゲットＰＣとＨＳＢ  ＥＩＰとの間で選択して、マルチプレクスクプリリミナリＥＩＰと称する次の分岐ターゲット値の２８ビット上位分岐ターゲット値を発生する。上位ＥＩＰジェネレータ回路６３４の発生上位増分回路６５４は、増分信号を供給し、これは命令の発行の際に命令デコーダ１１８によってセットされ、分岐マルチプレクサ６５２からマルチプレクスプリリミナリＥＩＰとともに加算器回路６５６に与えられる。加算器回路６５６は、増分信号によってマルチプレクスプリリミナリＥＩＰを増分して上位ＥＩＰアドレスを供給し、これがＭＳＢ  ＥＩＰレジスタ６２４に書込まれて、クロック動作される上位２８ビットＥＩＰアドレスを発生する。ＥＩＰ制御回路６３６は、実行すべき次の命令を指定する２８のＭＳＢ分岐ターゲットを選択するためにエントリマルチプレクサ６５０および分岐マルチプレクサ６５２に制御信号を与える。この上位分岐ターゲットは、分岐マルチプレクサ６５２からＭＳＢ  ＥＩＰレジスタ６２４に渡され、次のＥＩＰレジスタ６２０の２８ビットＨＳＢである。
【００５７】
ＥＩＰ制御回路６３６は、キューのヘッド６１６にある４つのＲＯＢエントリの種々のビットフィールドに保持された制御情報に基づいてＥＩＰレジスタ６２０を設定する。この情報は、BRANCH TAKENビット、UPDATE EIPビット、EXITビット、およびVALID ビットを含む。ＥＩＰ制御回路６３６は、下位および上位ＥＩＰジェネレータ回路６３２および６３４のそれぞれエントリマルチプレクサ６４０および６５０、分岐マルチプレクサ６４２および６５２、ならびにレジスタ６２２および６２４を制御する。UPDATE EIP信号は、新しいアドレスを決定するためにＥＩＰジェネレータ回路６３０を活性化する。VALID ビットは、ＲＯＰが実行を完了したことを示す。EXITビットは、ＲＯＰが特定のｘ８６命令のＲＯＰシーケンスにおける最後のＲＯＰであることを特定する。EXITビットは、ＥＩＰレジスタ６２０の更新をトリガする。ＥＩＰ制御回路６３６は、セットされたVALID ビットを有し、かつそれについてそのエントリとヘッドエントリとの間のすべてのＲＯＢエントリがセットされたVALID ビットを有するＲＯＢエントリのみのＭＳＢおよびＬＳＢ対を選択するようにマルチプレクサを制御する。VALID ビットは、ＲＯＰの結果が回収されるべきかどうかを決定する。エントリマルチプレクサ６４０は、４つの下位プログラムカウンタフィールドのうちの１つを選択する。選択された下位プログラムカウンタフィールドは、４つのＲＯＰのうちの回収されるべきＲＯＰに対応し、これは、キューのヘッド６１６にあるＲＯＰを含むすべての介在するＲＯＰもまた回収されるべきである限り、キューのヘッド６１６から最も遠くにある。BRANCH TAKENビットは、BRANCH TAKENビットがセットされるときに分岐に基づいてＥＩＰレジスタ６２０が更新されるべきであることを特定する。４つのリオーダバッファ１２６のエントリのうちの１つが、EXITおよびVALID ビットによって回収されるべきであると特定された分岐命令ＲＯＰに対応し、かつそのBRANCH TAKENビットがセットされていれば、ＥＩＰ制御回路６３６は、ＥＩＰレジスタ６２０をセットするために分岐のターゲットＰＣを選択する。
【００５８】
ＲＯＢ制御および状態ブロック６００は、ＲＯＢアレイ６０４内にストアされた結果オペランドの回収を制御する。ＲＯＢアレイ６０４内の結果がもはや推測によるものではない場合には、ＲＯＢ制御および状態ブロック６００は、キューのヘッド６１６に最も近い４つのリオーダバッファエントリのALLOCATEビット、VALID ビット、EXCEPTION ビットを同時にテストする。さらに、ＲＯＢ制御および状態ブロック６００は、成立分岐と、ストアと、ロードミスとを検出するために４つのエントリをテストする。ＲＯＢ制御および状態ブロック６００は、割当てられたＲＯＰエントリのうちのどれが有効な結果を有するかを判断する。４つのテストされたＲＯＰの結果は、キューのヘッド６１６から回収されるべき結果を有するＲＯＰまでのすべてのＲＯＰのVALID ビットがアサートされる限り、回収される。ＲＯＢ制御および状態６００はＲＯＰを回収し、ＲＯＢアレイ６０４のエレメントの結果フィールドをライトバックバス１３４のうちの１つに置いて宛先ポインタを用いてライトバックバスに対応する書込ポインタ１３３を駆動することによって、レジスタファイル１２４に結果を送る。書込ポインタ１３３は、回収された結果を受取るべきレジスタファイル１２４内のレジスタアドレスを指定する。整数データのライトバックについては、結果の下位ビット＜３１：０＞が整数データを保持し、一方、上位ビット＜３７：３２＞は状態フラグレジスタ１２５を更新するフラグＥＦＬＡＧＳ１４５である。浮動小数点データについては、別個のＦＰフラグバス１３８がフラグをリオーダバッファ１２６に送り、ここでフラグは、浮動小数点ＲＯＰが回収されるときに浮動小数点状態レジスタ（図示せず）にこれらが送られるまで、ストアされる。
【００５９】
キューのテイル６１８は、次に発行されるＲＯＰに割当てられるべきリオーダバッファエントリを指す。キューのヘッド６１６は、回収すべき次の結果を特定する。ＲＯＢアレイ６０４内のエントリの相対位置は、推測によるプログラムの実行の順序に対応する。リオーダバッファ１２６においてそのリネームされたものに対応するエントリを有する特定のレジスタにアクセスするには、その最も新しいものが、ＲＯＢアレイ６０４内の最も新しく割当てられた対応するリネームレジスタの相対位置によって決定される。リオーダバッファ１２６は、リオーダバッファエントリの総数（この特定的な実施例では１６）まで、レジスタファイル１２４内のいかなるレジスタの複数のリネームされたものをも更新できる。
【００６０】
リオーダバッファ１２６は、推測によるＲＯＰ実行の際に起こる例外およびトラップを扱う。機能ユニットがＲＯＰを実行する際に例外またはトラップを検出すると、状態バス１４１を介してその事象を示すフラグを送る。フラグは、ＲＯＰに割当てられるリオーダバッファ１２６のエントリ、特定的には制御状態フィールド内に保持される。この結果を回収しようとすると、例外の告知がリオーダバッファ１２６から機能ユニットに例外ライン１６０を介して送られる。機能ユニットは、それらのリザベーションステーションをフラッシュすることによってこの例外に応答する。すべての推測によるリオーダバッファエントリは無効である。命令によって、例外またはトラップに対応するリオーダバッファエントリが、推測による状態をクリアする前に回収されるものと、エントリがクリアされて回収されないものがある。推測による状態は、ヘッド６１６およびテイル６１８のポインタを０に設定することによって１クロックサイクル内にクリアされる。これによってリオーダバッファ１２６が、例外またはトラップがとられた後フェッチされる正しいシーケンス内のＲＯＰにエントリを自由に割当てることを可能にする。
【００６１】
さらに、リオーダバッファ１２６は推測によるＲＯＰ実行からの結果として生じるデータを扱う。成立分岐に関しては、分岐ＲＯＰに割当てられるリオーダバッファ１２６のエントリは分岐のターゲットＰＣを保持する。予測誤りされた分岐については、リオーダバッファ１２６はCANCELビットをセットして、予測誤りされた分岐からキューのテイル６１８までのすべてのリオーダバッファ１２６のエントリを含む、分岐を超えた推測によるＲＯＰを無効にする。リオーダバッファ１２６は、無効エントリの各々についてＲＯＢアレイ６０４状態および制御フィールド＜２３：０＞におけるCANCELビットをセットすることによってこの無効性を記録する。無効エントリが回収されると、それらの結果は廃棄され、レジスタファイル１２４等のプロセッサ資源は更新されない。アサートされたCANCELビットを有するリオーダバッファのエントリが回収されるとき、レジスタファイル１２４への結果の書込およびＥＩＰレジスタ６２０の更新が禁じられる。しかしながら、キューのヘッド６１６は、CANCELビットがアサートされないときと同様に通常どおり増分されて、リオーダバッファのエントリが割当てから外され、新しいＲＯＰのために利用可能となる。機能ユニットのリザベーションステーションはフラッシュされない。
【００６２】
リオーダバッファ１２６はレジスタを管理するだけでなく、リネーム可能な資源として状態フラグの処理も行なう。状態フラグ１２５内の指定されたビットおよびビットフィールドは、種々の動作を制御しプロセッサ１１０の状態を示すために用いられる。状態フラグ１２５は、キャリーフラグＣＦ（ビット０）、パリティフラグＰＦ（ビット２）、補助キャリーフラグＡＦ（ビット４）、ゼロフラグＺＦ（ビット６）、符号フラグＳＦ（ビット７）、トラップフラグＴＦ（ビット８）、割込イネーブルフラグＩＦ（ビット９）、方向フラグＤＦ（ビット１０）、オーバーフローフラグＯＦ（ビット１１）、および再開フラグＲＦ（ビット１６）を含む。これらのフラグのうち、６つの主な状態フラグ（ＯＦ、ＳＦ、ＺＦ、ＡＦ、ＰＦおよびＣＦ）はほとんどの整数演算の結果として更新され、条件分岐命令のための条件を発生するために用いられる。条件分岐命令は、Ｊｃｃ、すなわち条件コードｃｃでのジャンプの形態であることが多い。ここでｃｃはフラグすなわち条件コードを表わす。たとえば、分岐命令ＪＮＺとは、ゼロフラグ（ＺＦ）がゼロの場合に予め定められたアドレスにジャンプすることを意味する。
【００６３】
スーパースカラプロセッサ１１０では、発行されたＲＯＰが実行を完了していないものもあるし、実行は完了しているが推測的状態にあるもの、さらに推測によらない状態となったものもある。リオーダバッファ１２６は未実行および推測によるＲＯＰのための結果データを扱う。レジスタファイル１２４は、非推測的ＲＯＰに関する回収された結果データを保持する。結果データを生成する命令があるのと同じように、種々の命令がフラグを生成し、これも同様に利用不可能、推測的、および非推測的状態を有する。フラグを扱うための種々のレジスタ、回路および接続は、エス・エィ・ホワイト（S.A.White ）、ディ・エス・クリスティ（D.S.Christie）およびエム・ディ・ゴダードの「フラグオペランドリネームおよび転送装置を含むスーパースカラマイクロプロセッサ」（Super Scalar Microprocessor including Flag Operand Renaming and Forwarding Apparatus）と題する１９９４年６月１日出願の米国特許連続番号第 号により詳細に説明されるように設けられ、その全体をここに引用によって援用する。状態フラグ１２５は、非推測的となったフラグを保持する機能を果たす。リオーダバッファ１２６は、フラグの推測による状態を処理するための回路を含む。
【００６４】
状態フラグ１２５の６つの状態ビットすなわちフラグＯＦ、ＳＦ、ＺＦ、ＡＦ、ＰＦおよびＣＦは、分岐ユニット１７０の使用のためのリネーム可能な資源として与えられる。リオーダバッファ１２６は１６のエレメントのリオーダバッファアレイ６０４を含み、その各エレメントは４１ビット結果フィールドおよび１１ビット浮動小数点フラグレジスタフィールドを含む。浮動小数点ＲＯＰが実行された後、浮動小数点結果が結果フィールドに書込まれ、浮動小数点フラグがリオーダバッファアレイ６０４のエントリの浮動小数点フラグレジスタフィールドに書込まれる。フラグをセットした整数ＲＯＰが実行された後、整数結果が結果フィールドのビット＜３１：０＞に書込まれ、整数フラグがリオーダバッファアレイ６０４の結果フィールドのビット＜３７：３２＞に書込まれる。この態様で、リオーダバッファ１２６はレジスタのリネームおよびフラグのリネームを達成する。
【００６５】
リオーダバッファ１２６は、エントリを割当て、オペランドタグを割当てる際に、ＲＯＰによって影響されるフラグにタグ値も割当てる。命令デコーダ１１８が、ソースフラグオペランドとしてこれらのフラグ値を要求する分岐命令ＲＯＰ等の後続のＲＯＰを発行すると、リオーダバッファ１２６は、利用可能であれば対応するフラグ値を送り、または分岐ユニット１７０にタグバス（図示せず）を介して対応するフラグタグを送る。分岐ユニット１７０は、分岐の実行の準備ができるまで、分岐リザベーションステーション９０２にフラグ値またはフラグタグを保持する。フラグタグが分岐ユニット１７０に送られれば、分岐リザベーションステーション（図１５の９０２）は、これらのフラグが更新されることを引起こすＲＯＰを実行するＡＬＵ０またはＡＬＵ１等の整数機能ユニットによるＲＯＰ実行の結果として４つの汎用結果バス１３２のビット＜３７：３２＞にフラグ値が送られるまで待つ。
【００６６】
結果バス上の整数フラグ値もまたリオーダバッファアレイ６０４に書込まれる。結果の回収の際に、ＲＯＰと関連するフラグ値がもはや推測によるものではなくなると、回収されるＲＯＰに対応するフラグも同様にリオーダバッファアレイ６０４から状態フラグ１２５に回収される。
【００６７】
１つ以上のフラグオペランドを必要とする分岐ＲＯＰが命令デコーダ１１８によって分岐ユニット１７０に発行され、必要とされるオペランドフラグに対応するフラグエントリまたはフラグタグがリオーダバッファアレイ６０４内になければ、必要とされるフラグオペランドが状態フラグ１２５から検索され、フラグオペランドバス（図示せず）によって分岐ユニット１７０に送られる。
【００６８】
結果データオペランドおよびフラグの従属性チェックは、リオーダバッファ１２６内の従属性チェック回路（図示せず）を用いて行なわれる。別個の従属性チェック回路がリオーダバッファ１２６内の各リネーム可能な資源について供給されて、そのためすべての従属性が同時にテストされることとなる。３つのフラグ群がリネーム可能な資源であり、そのため３つの従属性論理回路がフラグのリネームのために用いられる。適切な従属性チェック回路は、１９９４年４月２６日出願の米国特許出願連続番号 号（スコット・エィ・ホワイトの「環状桁上げ先見を用いる範囲発見回路」（“A Range-Finding Circuit using Circular Carry Look ahead ”））に詳細に説明され、ここに引用によって援用する。あるフラグ、特にＳＦ、ＺＦ、ＡＦおよびＰＦビットは相互依存しており、そのためビットのうちの１つを評価するＲＯＰは他のすべてをも評価する。これらの相互依存フラグは、単一のリネーム可能な資源として分類され、供給される従属性回路を１つにする。
【００６９】
フラグのリネームは、フラグオペランドが利用可能になるとすぐに条件分岐を実行することを可能にし、それによってスーパースカラプロセッサ１１０の性能を向上する。特定的には、分岐命令ＲＯＰが分岐ユニット１７０に発行され、条件分岐が従属する条件フラグの値をＡＬＵ１７５等の他の機能ユニットが決定する前にフラグへの更新がスケジュールに組まれる。ここで発生する１つの問題は、左および右ローテートおよびシフト動作を含む、ＡＬＵ１７５によって行なわれる命令のいくつかは、可変でありかつ他の命令の結果に従属するローテートまたはシフトカウントを用いることである。シフトまたはローテートカウントはゼロになる可能性があり、これは後続の分岐命令ＲＯＰの発行の際には判断することができない。ゼロのシフトまたはローテートカウントに関して、ｘ８６命令はフラグの更新を抑え、そのためフラグは更新がキャンセルされた後にも変わらないままである。ＡＬＵ１７５は出力オペランドとしてフラグを供給するが、これらを入力パラメータとしては受取らず、そのためフラグ更新がキャンセルされた際に、ＡＬＵは次の最も新しいフラグ値を供給することができない。分岐ユニット１７０は、キャリーフラグの更新がキャンセルされたことを検出することができない。さらに、分岐ユニット１７０はキャンセルされたシフト動作に続く誤ったフラグオペランドの転送をキャンセルするように指示され得ず、これはフラグの最も新しい有効なリネームされたコピーを示すポインタがないためである。
【００７０】
プロセッサ１１０は、再同期化応答を起こすことによってキャンセルされたフラグ更新を扱う。フラグ更新がキャンセルされると、ＡＬＵ１７５は状態バス１４１を介して更新キャンセルコードをアサートする。更新キャンセルコードは、ＲＯＰに与えられたリオーダバッファ１２６のエントリ、特定的には状態／制御＜２３：０＞フィールド内に保持される。キャンセルされたシフトまたローテートＲＯＰが回収されるとき、リオーダバッファ１２６は命令のキャンセルを認め、そのため状態フラグ１２５へのフラグの書込がキャンセルされる。リオーダバッファ１２６はさらに、再同期化応答を起こすことによってキャンセルされたシフトまたローテート命令を認める。キャンセルされたフラグ条件の結果として起こる再同期化のリクエストは、例外ライン１６０を介してリオーダバッファ１２６から機能ユニットに伝えられ、すべてのプロセッサ１１０の動作を再同期化する再同期化応答が始められる。再同期化はゼロによるシフトＲＯＰが回収されるときにのみ起こるので、ゼロによるシフトが予測誤りされた分岐から起こる場合、またはシフトＲＯＰが回収される前に割込または例外が起こる場合には再同期化は避けられる。
【００７１】
再同期化は、キャンセルされたシフト命令に従属するいかなる分岐命令ＲＯＰエントリをも含む推測によるＲＯＰをキャンセルする。再同期化に続いて、実行はキャンセルされたシフトＲＯＰに続くＲＯＰから始まる。推測によるフラグ値のすべてがフラッシュされる。キャンセルされたシフト動作に対する従属性を有するいかなる分岐命令ＲＯＰも、状態フラグ１２５からの非推測的フラグオペランドを用いて適切に実行する。
【００７２】
図１４は、命令パイプラインにおけるプログラム命令のシーケンス、およびパイプライン内の命令に対する種々の命令ポインタを示す。図示される命令シーケンスは分岐命令を含む。命令（ＩＮＳＴ  ｊおよびＩＮＳＴ  ｊ＋１）は、ＲＯＰ（ＲＯＰ  ｉ＋９）にデコードされ、発行され、実行されて回収される（ＲＯＰ  ｉ）。ＲＯＰ  ｉ＋１ないしｉ＋９は、推測によるＲＯＰである。ＲＯＰ  ｉ−１およびｉ−２は回収され、もう動作パイプラインには存在しない。
【００７３】
ここで図２ないし７、図１１および１２、ならびに図１５とともに図１４を参照して、プロセッサはプログラムカウンタまたは命令ポインタを用いて実行すべき命令を指定する。スーパースカラプロセッサは複数のステージの複数の命令を並列して実行するので、様々な目的のためにいくつかのプログラムカウンタが有用である。プロセッサ１１０は、種々の機能を行なう４つのプログラムカウンタ、すなわちフェッチプログラムカウンタ（フェッチＰＣ）２１０、デコードプログラムカウンタ３８２（デコードＰＣ）、ターゲットプログラムカウンタ１２２（ターゲットＰＣ）および拡張命令ポインタ６２０（ＥＩＰ）を含む。
【００７４】
フェッチＰＣ２１０はパイプラインの始めに維持されて、命令または命令のグループがフェッチされる、命令キャッシュ１１６の命令ストアアレイ２５０内のアドレスを指定する。フェッチＰＣはパイプラインに入る命令（ＩＮＳＴ  ｊ）を指す。命令がパイプラインステージに沿って伝播するＲＯＰに変換される際に、後続の命令（ＩＮＳＴ  ｊ＋１）がフェッチされ、パイプライン内に置かれる。このように、フェッチＰＣは処理の第１のステージであるフェッチステージにある命令のみを示す。命令のストリームの実行を止める問題のほとんどは、パイプラインのより後のステージで検出される。フェッチＰＣ２１０は命令キャッシュ１１６内に置かれ、命令キャッシュ１１６および外部メモリ１１４の順次的および非順次的アクセスの間にフェッチされるべきｘ８６命令を識別する。フェッチＰＣ２１０は、キャッシュミスの後適切な命令アドレスをリカバーするのに有用である。命令キャッシュ１１６は、同じアドレスを維持し、またはそのアドレスを次のキャッシュエントリに増分し、または内部アドレス／データバス１１１を介してアドレス受取り、またはアドレスをターゲットｐｃバス１２２からロードすることによって、あるサイクルから次のサイクルへとフェッチＰＣ２１０を更新する。
【００７５】
命令デコーダ１１８は、バイトキュー１３５から送られる各ｘ８６命令の論理命令アドレスを追跡するデコードＰＣブロック３８２を含む。命令キャッシュ１１６は線形アドレス指定に基づいて命令にアクセスする。フェッチＰＣは、アドレスｊおよびｊ＋１として示されるこれらの線形アドレスを識別する。しかしながら、リオーダバッファ１２６内のＥＩＰレジスタ６２０は、ＲＯＰアドレスｉ−２ないしｉ＋９として示されるように論理ｘ８６アドレスを維持する。命令デコーダ１１８は、フェッチＰＣの線形アドレスを論理アドレスに、ＥＩＰレジスタ６２０の更新のために変換する。命令キャッシュ１１６は、論理アドレスを導出するために線形アドレスからセグメントベースポインタを減ずることによってこの変換を補助する。この３２ビット論理アドレスは、デコードＰＣを発生して論理ＲＯＰアドレスを示す命令デコーダ１１８のデコードＰＣブロック３８２に送られる。
【００７６】
バイトキュー１３５が非順次的フェッチを検知すると、成立分岐から起こるプログラムカウンタおよびこのプログラムカウンタ内の特定のバイトに対するポインタを示し、この情報をデコードＰＣブロック３８２に送る。デコードＰＣブロック３８２は、命令キャッシュ１１６によって供給される各ＲＯＰについてのデコードＰＣ値を発生する。図１４に示されるデコードＰＣは、ＲＯＰｉ＋９を示す。命令デコーダ１１８は、命令バイトが発行される際に現在のデコードＰＣからバイトを増分し、分岐命令の第１のバイトがバイトキュー１３５から命令デコーダ１１８にロードされるときに新しい分岐ＰＣをロードすることによって、デコードＰＣを導出する。分岐に続く順次的命令に関しては、デコードＰＣブロック３８２は、分断されていないシーケンスの開始位置と終了位置との間のバイトキュー１３５内のｘ８６バイトの数をカウントし、この数を現在のデコードＰＣに加えて、シーケンスの後の次のデコードＰＣを決定する。命令デコーダ１１８は、分岐命令ＲＯＰを分岐ユニット１７０に発行する際に、デコードｐｃバス２１３を介してデコードＰＣを送る。
【００７７】
デコードＰＣは、ＤＰＣバス２１３を介して分岐ユニット１７０に送られる。分岐ユニット１７０は、ターゲットＰＣの計算のため、および更新されたターゲットＰＣを予測されたターゲットＰＣと比較して分岐が正しく予測されたかどうかを判断するために、送られたデコードＰＣをベースアドレスとして用いる。
【００７８】
分岐ユニット１７０は第３のプログラムカウンタであるターゲットＰＣを発生し、条件分岐命令の予測誤りに続く命令のフェッチの再指定を与える。分岐ユニット１７０は、オフセット（たとえば＋１）および分岐命令（たとえばＲＯＰ  ｉ＋３）のアドレスに基づいて、ＲＯＰによって指定されるようにターゲットＰＣを導出する。分岐ユニット１７０は、図１５に示されるように加算器９１０またはインクリメンタ９１２を用いて、分岐命令ＲＯＰおよびそのオペランドの特定に従ってターゲットＰＣを変更する。たとえば、加算器９１０を用いて、オペランドバス１３０および１３１を介してオペランドとして供給されるオフセットパラメータ（＋１）および分岐命令ＲＯＰ（たとえばＲＯＰ  ｉ＋３）のデコードＰＣ値から新しいターゲットＰＣ（たとえばＲＯＰ  ｉ＋４）を計算する。更新されたターゲットＰＣ（ＲＯＰ  ｉ＋４）と命令デコーダ１１８によって与えられた情報を用いて計算されたターゲットＰＣとの間で一致が起これば、分岐ユニット１７０は結果バス１３２を介してリオーダバッファ１２６に結果を送る。結果は、一致を示す状態コードおよびターゲットＰＣ（ＲＯＰ  ｉ＋４）を含む。分岐が予測誤りされていれば、正しいターゲットＰＣ（ＲＯＰ  ｉ＋６）が命令キャッシュ１１６に送られ、フェッチアドレスを再指定する。分岐ユニット１７０は、再指定ターゲットＰＣをターゲットｐｃバス１２２を介して命令キャッシュ１１６に戻すことによって、命令キャッシュ１１６に再び指示を与える。ターゲットＰＣは、フェッチを始めるべきアドレスを示す。フェッチＰＣ２１０は、命令ストリームをターゲットＰＣアドレスに指定し、バイトキュー１３５のリフィルを始める。
【００７９】
リオーダバッファ１２６内のＥＩＰレジスタ６２０は第４のプログラムカウンタとして機能し、実行された命令のアドレスを追跡し、実行を完了する次の命令を示し、その結果を回収させる（たとえばＲＯＰ  ｉ）。結果の回収が起こると、ＥＩＰは前進して、回収された結果を有する命令のうちの最後のものの直後の命令のアドレスを反映する。このように、ＥＩＰレジスタ６２０は、推測によって実行しているＲＯＰから非推測的データを発生しているＲＯＰを識別するポインタとして暗に機能する。ＥＩＰレジスタ６２０のポインタは、ジャンプ、リターンおよびコールを含む制御移行命令と、例外と、割込とによって暗に制御される。ＥＩＰレジスタ６２０はある命令の境界から次の境界へと前進させられる。命令のプリフェッチのために、これはプロセッサに命令をロードするバスアクティビティのおおむねの指示にすぎない。
【００８０】
例外またはトラップ等の、命令ストリームの実行を停止する問題に遭遇する命令のアドレスを識別するために、ＥＩＰレジスタ６２０が有用である。ＥＩＰはしたがって、訂正する動作が行なわれた後の命令ストリームの実行の継続、またはデバッギングに有用である。
【００８１】
図１５に示される分岐ユニット１７０は、ジャンプおよびコール動作ならびにリターンマイクロルーチンを含む、順次的なプログラム順序に従わない命令のフェッチを制御する。分岐ユニット１７０は分岐予測を検証し、予測誤り信号を発生する。分岐ユニット１７０は分岐リザベーションステーション９０２を含み、これは加算器９１０、インクリメンタ９１２、分岐予測比較論理９０８および分岐リマッピングアレイ９０４に接続される。分岐リマッピングアレイ９０４は、浮動小数点スタックの一部である。分岐ユニット１７０はさらに、「成立予測」された分岐を追跡する分岐予測成立ＦＩＦＯ９０６をさらに含む。分岐予測成立ＦＩＦＯ９０６は、成立予測された分岐のＰＣを保持し、このＰＣを分岐予測比較論理９０６に与える。加算器９１０およびインクリメンタ９１２は、分岐命令ＲＯＰのアドレスに関して分岐に関するターゲットアドレスを計算する。非順次的フェッチが命令キャッシュ１１６によって予測されると、その非順次的アドレス（分岐動作の結果）が分岐成立予測ＦＩＦＯ９０６に送られ、分岐のＰＣとともにラッチされる。対応する分岐が後にデコードされ、投入されると、分岐ユニット１７０は、加算器９１０またはインクリメンタ９１２を用いて、ＲＯＰによって指示されるように分岐命令のアドレスに基づいてターゲットＰＣを導出することによって分岐ＲＯＰを実行する。たとえば、加算器９１０は、オペランドバス１３０および１３１を介してオペランドとして与えられるオフセットパラメータおよび分岐命令ＲＯＰのデコードＰＣ値から新しいターゲットＰＣを計算するために用いられる。更新されたターゲットＰＣと命令デコーダ１１８から与えられたデコードＰＣとの間に一致が起これば、分岐ユニット１７０はその結果を結果バス１３２を介してリオーダバッファ１２６に送る。結果は、一致を示す状態コードおよびターゲットＰＣを含む。分岐が予測誤りされていれば、分岐ユニット１７０は正しいターゲットＰＣを命令キャッシュ１１６にターゲットＰＣバス１２２を介して、およびリオーダバッファ１２６に結果バス１３２を介して送る。ターゲットＰＣは命令キャッシュ１１６に送られて、訂正された経路での命令のフェッチを直ちに始める。ターゲットＰＣはリオーダバッファ１２６に送られて、予測誤りされた分岐に含まれる後続のＲＯＰをキャンセルする。この態様で、実行は正しいターゲットＰＣから再スタートされ、実行プロセスの誤りがこのように防がれる。
【００８２】
分岐リザベーションステーション９０２は、オペコード／タイプバス１５０を介して命令デコーダ１１８からＲＯＰオペコードと、ＡおよびＢオペランドバス１３０および１３１を介してレジスタファイル１２４およびリオーダバッファ１２６から、ならびに結果バス１３２からオペランドおよび結果データとを受取る複数エレメントＦＩＦＯアレイである。各リザベーションステーションエレメントは、１つの分岐命令ＲＯＰに関するオペコード情報をストアする。複数分岐命令ＲＯＰがそのキュー内に保持され得る。分岐リザベーションステーション９０２によって受取られた情報は、デコードＰＣ、分岐予測および分岐オフセットを含む。デコードＰＣはデコードＰＣバス２１３を介して伝えられる。分岐予測は、分岐予測ラインを介して送られる。オフセットは、ＡおよびＢオペランドバス１３０および１３１を介し、リオーダバッファ１２６を介して分岐ユニット１７０に送られる。
【００８３】
命令デコーダ１１８は、分岐命令ＲＯＰを分岐ユニット１７０に発行すると、先見ＴＯＳ３０２および先見フル／空アレイ３０６を伝え、これらは分岐リザベーションステーション９０２内にストアされる。先見ＴＯＳは、命令デコーダ１１８以外の機能ブロック内で実現され得る。好ましくは、先見リマッピングアレイ３０４、先見フル／空アレイ３０６、および先見ＴＯＳ３０２が、分岐ユニット１７０による処理のために利用可能であって、そのためプロセッサは予測が正しいときに動作する態様と予測誤りのときに動作する態様とが異なることとなる。
【００８４】
予測された分岐命令ＲＯＰがデコードされ、投入されると、デコードＰＣ、オフセットおよび予測が発行され、分岐ユニット１７０のリザベーションステーション９０２内に保持される。予測されたターゲットＰＣがデコードＰＣと一致すると、分岐は正しく予測されており、正しい予測を反映する結果情報がリオーダバッファ１２６に正しく戻される。この情報は、一致が達成されたことを示す状態コードおよびターゲットＰＣを含む。分岐が予測誤りされれば、分岐ユニット１７０は正しいターゲットＰＣを命令キャッシュ１１６とリオーダバッファ１２６との両方に送り、命令ブロックインデックスを命令キャッシュ１１６に渡す。インデックスは、分岐成立予測ＦＩＦＯ９０６を更新するために用いられる予測情報を表わす。リオーダバッファ１２６は、後続のＲＯＰ動作をキャンセルすることによって、予測誤りされた分岐に応答する。
【００８５】
分岐ユニット１７０はまた、予測誤りの際に命令デコーダ１１８からの論理アドレスを線形アドレスに変換する。これを行なうために、コードセグメントベースポインタのローカルコピーが、命令キャッシュ１１６のコードセグメントブロック２１６によって分岐ユニット１７０に与えられる。
【００８６】
分岐ユニット１７０は、浮動小数点ＴＯＳ４７２、浮動小数点リマッピングアレイ４７４および浮動小数点フル／空アレイ４７６を含む浮動小数点スタックブロックの推測による更新を管理して、浮動小数点交換命令（ＦＸＣＨ）を実現し、浮動小数点演算を加速する。分岐ユニット１７０はこれらの目的を、推測による分岐が起こると必ず現在のスタック状態のコピーを保存することによって達成する。分岐リマッピングアレイ９０４は、各ＦＸＣＨ命令とともに発行される先見リマッピングアレイ３０４（図６および７を参照）からコピーされる。分岐リマッピングアレイ９０４は、先見リマッピングアレイ３０４と同じ情報をストアするので、絶対に必要なわけではない。しかしながら、各分岐命令ＲＯＰについてではなく必要なときにのみ先見リマッピングアレイ３０４を発行することが望ましい。先見リマッピングアレイ３０４はＦＸＣＨ命令に応答してのみ変化するので、ＦＸＣＨリクエストに対してのみこれが分岐ユニット１７０に送られる。
【００８７】
分岐ユニット１７０は、スタックポインタ、リマッピングアレイおよびフル／空アレイの正しいコピーを最後の成功した分岐後に存在した状態にストアすることによって予測誤りに応答する。分岐ＲＯＰの完了時に、分岐ユニット１７０は分岐タグ９００を結果バス１３２のうちの１つへと送り、分岐予測結果を送る。分岐タグ９００は、分岐命令のＲＯＰを保持するリオーダバッファエントリに対応し、これを識別する宛先タグである。リオーダバッファ１２６は、予測誤りされた分岐命令ＲＯＰにプログラム順に後続する、発行されたＲＯＰのすべてをはさむ分岐タグ９００およびテイル６１８を受取る。
【００８８】
分岐が正しく予測されると、浮動小数点ＴＯＳ４７２、浮動小数点リマッピングアレイ４７４、および浮動小数点フル／空アレイ４７６が変更なくセーブされる。
【００８９】
分岐が予測誤りされると、予測誤りされた分岐に関してリザベーションステーション９０２内にストアされたフル／空アレイおよびスタックトップポインタおよび分岐リマッピングアレイ９０４は、予測誤りされた分岐の前のスタックの状態を表わす。分岐ユニット１７０は局所的にストアされたリマッピングおよびＴＯＳ値を命令デコーダ１１８内の先見ＴＯＳ３０２および先見リマッピングアレイ３０４に書込み、スタックの状態を事実上予測誤りされた分岐の前のものに戻す。分岐ユニット１７０だけが予測誤りを検出するので、別のユニットではなく分岐機能ユニットがスタックをテストし、リカバーするのが好ましい。
【００９０】
プロセッサ１１０内の機能ユニットが例外条件を検出すると、これはコードをリオーダバッファ１２６に戻す。リオーダバッファ１２６は、既知の状態で実行を再開するように、そのエントリをフラッシュすることよってリカバリを達成する。リオーダバッファ制御ブロック６７０は、スタックに関して同様のリカバリ動作を実行する。例外の際に、リオーダバッファ１２６は浮動小数点リマッピングアレイ４７４を先見リマッピングアレイ３０４に、浮動小数点ＴＯＳ４７２を先見ＴＯＳ３０２に、さらに浮動小数点フル／空アレイ４７６を先見フル／空アレイ３０６に書込む。
【００９１】
プロセッサ１１０は、浮動小数点算術命令と並行して浮動小数点交換を実行することができるが、これは浮動小数点スタックがＦＰＵの外部に実現されるからである。この理由のため、浮動小数点スタック構成要素ブロックは、浮動小数点ユニット以外のユニットに組込まれる。したがって、先見リマッピングアレイ３０４および先見ＴＯＳ３０２は命令デコーダ１１８に組込まれる。浮動小数点ＴＯＳ４７２、浮動小数点リマッピングアレイ４７４および浮動小数点スタックアレイ５００はリオーダバッファ１２６内に置かれる。分岐ユニット１７０は分岐リマッピングアレイ９０４を供給する。同様に、ＦＸＣＨ命令は、並列した命令処理を促進するように浮動小数点ユニットではなく分岐ユニット１７０内で実行される。
【００９２】
浮動小数点交換命令が分岐予測誤り、例外、割込またはトラップなく通常どおり実行されると、分岐ユニット１７０は、命令デコーダ１１８によって送られた先見リマッピングアレイ３０４をストアする。ＦＸＣＨの実行の完了時に、分岐ユニット１７０は先見リマッピングアレイ３０４の値を結果バス１３２に書込む。リオーダバッファ１２６は、回収時に先見リマッピングアレイを浮動小数点リマッピングアレイ４７４に書込むことによって、レジスタの交換を行なう。
【００９３】
分岐ユニット１７０は、ＦＸＣＨ命令ＲＯＰを実行するに先立ってスタックエラーについてチェックする。これらのエラーは、スタックオーバーフローおよびアンダーフロー条件を含む。スタックアンダーフローおよびオーバーフロー条件の検出は、エム・ディ・ゴダードおよびエス・エィ・ホワイトによる「浮動小数点スタックおよび交換命令」（Floating Point Stack and Exchange Instruction ）と題する米国特許出願連続番号第 号により詳細に説明され、その全体をここに引用によって援用する。スタックアンダーフローエラーが検出されると、分岐ユニット１７０はエラー告知コードをリオーダバッファ１２６に状態バス１４１を介して戻し、これによってリオーダバッファ１２６は再同期化応答を始めることとなる。これによってＦＸＣＨ命令でプロセッサが再始動する。しかしながら、スタックアンダーフロー条件に続く再同期化の際に起こったＦＸＣＨ命令は、他のＦＸＣＨ命令とは異なる。特に、非再同期化ＦＸＣＨ命令は、単一のＦＸＣＨ  ＲＯＰを含む。再同期化ＦＸＣＨ命令は、２対の浮動小数点加算（ＦＡＤＤ）ＲＯＰおよび単一のＦＸＣＨ  ＲＯＰを含む５つのＲＯＰを含む。２対のＦＡＤＤ  ＲＯＰは、ＦＸＣＨ命令において交換される２つの浮動小数点レジスタにそれぞれゼロを加える。スタックアンダーフローエラーは、空のスタック位置からオペランドを読出そうとして起こる。浮動小数点ユニット１７２は、レジスタが空であるかフルであるかを、先見フル／空レジスタ３０６に従って判断する。交換された浮動小数点レジスタが有効なデータを含んでいれば、ゼロを加えてもデータの値は変わらない。そうでなければ、浮動小数点ユニット１７２がＦＡＤＤ  ＲＯＰを実行し、かつ交換された浮動小数点レジスタが空であれば、浮動小数点ユニット１７２は、トラッピングがマスクされていなければトラップ応答を始めることによって、またはクワイエット非数字（ＱＮａＮ）コードをレジスタにロードすることによって応答する。
【００９４】
スタックアンダーフローの後の再同期化によって、プロセッサ１１０はＦＸＣＨ命令に戻り、有効データまたはＱＮａＮコードのいずれかの既知の状態にデータを置き、無効データを用いて実行されるいかなる命令をも含む、ＦＸＣＨに続く命令を再試行する。
【００９５】
どの浮動小数点命令も、８２ビット浮動小数点データを収容するための４１ビットオペランドバス１３０および１３１ならびに４１ビット結果バス１３２に関する少なくとも１対のＲＯＰを含むことに注目されたい。
【００９６】
機能ユニットはＲＯＰを実行しながら例外およびトラップを検出し、EXCEPTION 状態コードを状態バス１４１を介してリオーダバッファ１２６に送ることによって応答する。図１６は、例外およびトラップに応答する手順を示すフロー図である。この手順は５１０ないし５５２と符号を付されるステップを含み、これらは機能ユニットステップ５１０、リオーダバッファステップ５２０、分岐機能ユニットステップ５４０および命令キャッシュステップ５５０を含む。機能ユニットは種々の再同期化動作５１０を行なう。機能ユニットうちの特定のものが再同期化条件５１２を検出し、このような検出に応答して、EXCEPTION 状態コードをリオーダバッファ１２６に送る（５１４）。
【００９７】
動作５２０において、リオーダバッファ１２６は、推測によるＲＯＰ実行の間に起こる例外およびトラップに対するプロセッサ１１０の応答を制御する。EXCEPTION コードは、ＲＯＰと関連するリオーダバッファ１２６のエントリ内に保持される（５２２）。ＲＯＰが回収されると（５２４）、ＥＩＰジェネレータ回路６３０は、EXCEPTION ビットを含む種々の状態ビットをテストする。EXCEPTION ビットがアサートされると、トラップベクトルフェッチリクエスト５２６が、ＲＯＰエントリ内にストアされた例外状態情報で形成される。例外の告知がリオーダバッファ１２６から例外ライン１６０を介して機能ユニットに送られる。リオーダバッファ１２６は、グローバルなEXCEPTION 信号５２８をすべての機能ユニットと命令デコーダ１１８および命令キャッシュ１１６を含む他のユニットとにリレーする。機能ユニットおよびプロセッサの他の機能ブロックは次に、「例外応答」を行ない、リザベーションステーションがフラッシュされ（５１６）、他の何らかの初期化タイプの手順が行なわれる。例外またはトラップの後のすべての推測によるリオーダバッファのエントリが無効にされる（５３０）。推測による状態は、ヘッド６１６ポインタおよびテイル６１８ポインタをゼロに設定することによって１クロックサイクル内にクリアされる。これによって、リオーダバッファ１２６は、例外が行なわれてからフェッチされる正しいシーケンスにおけるＲＯＰの割当てを自由に行うことができる。
【００９８】
典型的にはリオーダバッファ１２６が例外ライン１６０を介してEXCEPTIOIN信号を実質的にプロセッサ１１０全体にグローバルに送ってから１サイクル後に、リオーダバッファ１２６は、reqtrap ライン１６２を介してREQTRAP 信号５３２を分岐ユニット１７０だけに送り、分岐ユニットは再同期化動作を行なう（５４０）。REQTRAP 信号は、例外もしくはトラップ応答、または同様に再同期化応答をリクエストし、一方XRES4B＜３１：０＞がリオーダバッファ１２６から分岐ユニット１７０に送られて、例外の後に命令がそこからフェッチされるべきフェッチＰＣを分岐ユニット１７０に知らせる。例外の場合には、XRES4B＜３１：０＞が２つの方法のうちの１つでセットされる。第１の方法は、例外を検出する機能ユニットが、命令キャッシュ１１６による命令フェッチの再指定のためのマイクロコードエントリを特定し得るというものである。機能ユニットはこのマイクロコードＲＯＭエントリポイントを結果バス１３２のうちの１つに置く。代替的に、例外のうちのあるものに関しては、機能ユニットは結果バス１３２を用いて結果をリオーダバッファ１２６に戻して、結果バス１３２がマイクロコードエントリポイントのやり取りのために利用不可能とする。第２の方法は、リオーダバッファ１２６がマイクロコードＲＯＭエントリポイントを局所的に発生するというものである。いずれの場合にも、リオーダバッファ１２６はマイクロコードＲＯＭエントリポイントをXRES4B＜３１：０＞に送る。
【００９９】
プロセッサ１１０はマイクロコードＲＯＭエントリポイントから、または再同期化に関しては命令ＰＣから実行を始める。ＳＹＮＣ信号もまたリオーダバッファ１２６から分岐ユニット１７０に送られる。ＳＹＮＣは、REQTRAP を識別、すなわちXRES4B＜３１：０＞上の情報を識別するのに用いられる。スタックアンダーフローの際の再同期化に関しては、EXCHANGE SYNC 信号もリオーダバッファ１２６から分岐ユニット１７０に送られる。分岐ユニット１７０は再同期化ＦＸＣＨ  ＲＯＰシーケンスを起こす。
【０１００】
分岐ユニット１７０は命令キャッシュ１１６に信号を送ることによって実行のための命令を再指定し（５４２）、命令キャッシュ１１６は再同期化動作を行なう（５５０）。UPDFPCがセットされてＥＩＰレジスタ６２０を再指定する。ＦＰＣＴＹＰが分岐ユニット１７０から命令キャッシュ１１６に送られて、プロセッサ１１０がＭＲＯＭまたは命令メモリ１１２のいずれから動作を始めるべきかを示す。分岐ユニット１７０は、XTARGET を命令キャッシュ１１６に送って、フェッチＰＣを設定するためにキャッシュのためのポインタを与え、再指定されたアドレス５５２で命令のフェッチを始める。
【０１０１】
図１７は、浮動小数点ユニット１７２の概略のブロック図を示し、これは３つのパイプラインを用いて算術計算を行なう。第１のパイプラインは、２つの加算器ステージ９２２および９２３ならびに正規化シフタステージ９３３を含む加算／減算パイプラインである。第２のパイプラインは、２つの乗算ステージ９２４および９２５を有する乗算パイプラインである。第３のパイプラインは、単一の除算ステージ９２６を有する除算／平方根パイプラインである。浮動小数点機能ユニット１７２はまた、共有浮動小数点丸め装置９２７、検出ブロック９３２、およびＦＰＵ結果ドライバ９３１を含む。浮動小数点リザベーションステーション９２１は、オペコード／タイプバス１５０、ＡおよびＢオペランドバス１３０および１３１、結果バス１３２、結果タグバス１３９、ＡおよびＢオペランドタグバス１４８および１４９、ならびに宛先タグバス１４０からの入力を受取るように接続される。リザベーションステーション９２１は２つのエントリを保持し、その各々が、８２ビットＡオペランドおよび８２ビットＢオペランド、宛先結果タグ、例外処理のための８ビットオペコード、４ビットＡオペランドタグ、４ビットＢオペランドタグ、ならびに浮動小数点スタックにスタックオーバーフローおよびアンダーフロー条件を示す状態ビットのための記憶場所を含む。浮動小数点スタックが浮動小数点機能ユニット１７２の内部にはなく、一般にこれから構造的に分離されていることに注目されたい。リザベーションステーション９２１は、１クロックサイクルにつき２つのＲＯＰの形で浮動小数点演算を１つ受入れることができる。リザベーションステーション９２１は８５ビット浮動小数点ＡおよびＢオペランドバス９３４および９３５を駆動し、各々が８２ビットオペランドおよび３つの浮動小数点計算制御ビットを含む。
【０１０２】
検出ブロック９３２は、浮動小数点ユニット１７２への入力が規定された無効性のある条件を満たすときに、EXCEPTION 状態コードを発生する。浮動小数点スタックオーバーフローまたはアンダーフロー信号がセットされるか、除算演算の分母オペランドがゼロに等しいか、または命令の発生された結果がゼロまたは無限になるような値をソースオペランドの値が有する場合には、無効条件が起こる。浮動小数点機能ユニット１７２への入力によって例外が発生されると、ユニットは演算の残りのステージをキャンセルし、EXCEPTION 状態コードを状態バス１４１に置いて、リオーダバッファ１２６がプロセッサ１１０全体で例外応答を始めるようにする。
【０１０３】
浮動小数点丸め装置９２７は、浮動小数点ＲＯＰの実行の結果として生じる例外を検出する。これらの例外は、浮動小数点指数値のオーバーフローまたはアンダーフロー、または丸める際に起こる不正確なエラーを含む。これらのエラーはリザベーションステーション９２１に知らされる。
【０１０４】
リオーダバッファ１２６は推測によるＲＯＰから結果として生じるすべてのデータへのアクセスを管理する。浮動小数点ユニット１７２等の機能ユニットは、このようなデータ管理のタスクを行なわない。機能ユニットは、オペランドバス１３０および１３１を介してリオーダバッファ１２６によって供給されたデータに対して算術演算を行なう。リオーダバッファ１２６は、浮動小数点スタック内のデータを含むすべての推測によるデータが、プロセッサ１１０内の種々のブロック間の協働によって一貫した態様ではあるようにデータの管理を制御するが、一般に浮動小数点機能ユニット１７２の動作には依存しないで処理される。リオーダバッファ１２６のみに従属性の決定を含むデータフロー制御を与えることによって、ＦＰＵ１７２を含む他の処理ブロックは簡略化される。浮動小数点ユニット１７２によって用いられる制御情報は、スタックオーバーフローまたはアンダーフロー条件を示すビット等のスタック状態ビットに限られる。この情報は命令デコーダ１１８によって発生され、動作の発行の際に浮動小数点ユニット１７２に渡される。ＦＰＵ１７２がオーバーフローまたはアンダーフロートラップを受取ると、これはEXCEPTION 状態コードを発生する。
【０１０５】
浮動小数点機能ユニット１７２は、プロセッサ１１０が再同期化応答を起こす２つの条件を検出する。第１の再同期化条件は、ＣＲ０制御レジスタのＮＥ（数値エラー）ビット（ビット５）がゼロに設定され、ＩＧＧＮＥ／（本明細書中、否定、相補および反転等を表わすバー記号に代えて／を用いる）ピンがゼロに設定された状態での浮動小数点例外の発生である。第２の再同期化条件は、早い浮動小数点の出力に関して起こる。
【０１０６】
ＣＲ０制御レジスタのＮＥビットは、プロセッサ１１０の例外処理を制御する。特定的には、ＣＲ０制御レジスタのＮＥビットの値に依存して、例外ハンドラが、割込ベクトル１６を介してか（ＮＥ＝１）、または外部割込を介して（ＮＥ＝０）呼び出される。ＮＥビットは、セットされると浮動小数点数値エラーを報告するための標準的な手順を可能化する。ＮＥがクリアされており、ＩＧＮＮＥ／入力がアクティブ（ロー）であれば、数値エラーは無視される。ＮＥビットがクリアされており、かつＩＧＮＮＥ／入力がイナクティブ（ハイ）であれば、数値エラーによってプロセッサは停止し、割込を待つこととなる。この割込は、入力を割込コントローラに送るためにＦＥＲＲ／ピンを用いることによって発生される。ＮＥビット、ＩＧＮＮＥ／ピン、およびＦＥＲＲ／ピンは、浮動小数点エラーに対するプロセッサ１１０の応答を特定するために用いられる。再同期化は、プロセッサ１１０がエラーを無視することを可能にするために用いられる。ＮＥビット、ＩＧＮＮＥ／ピン、およびＦＥＲＲ／ピンは、外部論理とともに用いられてＰＣスタイルのエラーの報告を実現する。ＣＲ０制御レジスタならびにＩＧＮＮＥ／およびＦＥＲＲ／ピンは、１９９２年カリフォルニア州サンタクララ（Santa Clara ）のインテル社（Intel Corporation ）の出版物「インテル４８６マイクロプロセッサファミリ：プログラマーの手引書」（Intel 486 TM Microprocessor Family: Programmer´s Reference Manual ）の補遺Ｅにより詳細に述べられ、その全体をここに引用によって援用する。
【０１０７】
第２の再同期化条件は、早い浮動小数点の出力に関して起こる。ｘ８６浮動小数点命令は、複数の浮動小数点ＲＯＰのシーケンスの形で実行され得る。浮動小数点エラー条件等の種々の条件下で、浮動小数点ＲＯＰは、もはや後続の浮動小数点ＲＯＰを実行するのに意味がないか、または望ましくないという条件または結果をもたらし得る。これらのＲＯＰは命令ストリームに関して無意味であると考えられる。たとえば、検出ブロック９３２は、無効演算（ＦＰスタックアンダーフローまたはオーバーフロー等）、ゼロ除算、ゼロになる結果、ソースオペランドに基づく無限等の無効条件を検出する。ゼロ除算の条件は、後続の浮動小数点ＲＯＰがオーバーフローエラーしかもたらさないことを示し得る。このような条件下では、最初の意味のあるＲＯＰに基づいてフラグを含む浮動小数点結果を生成し、後続の不適切なＲＯＰをキャンセルすることが効率的である。早い浮動小数点の出力応答の際、入力の例外によって動作の残りのステージ（さらなるＲＯＰ）のキャンセルを起こし、浮動小数点の出力が早いという状態の指示とともに宛先コードを結果バスを介して送る。
【０１０８】
一般に、出力条件を検出してリオーダバッファ１２６に条件コードを送るＲＯＰは再同期化応答を始め、リオーダバッファ１２６および機能ユニットリザベーションステーションをフラッシュし、浮動小数点ＲＯＰのシーケンスを超えるフェッチＰＣを再指定する。再同期化動作は、シーケンスにおける最終の浮動小数点ＲＯＰに続いて始められる。
【０１０９】
図１８を参照して、ロード／ストア機能ユニット１７３は、ロードおよびストア命令を実行し、データキャッシュ１８０と相互作用する。ロード／ストア機能ユニット１７３は、デュアルポートリザベーションステーション９４５と、４エントリストアバッファ９４４と、ロード／ストア結果バスドライバ９４７とを含む。各ポートはストアバッファ９４４およびデータキャッシュ１８０にチャネルによって接続され、これは４０のデータビットと適切な数のアドレスビットとを含む。リザベーションステーション９４５は、マルチプレクサ９４１と、ロードストアコントローラ９４３と、マージ回路９５０と、４つまでのＲＯＰを待ち行列に入れるためのＦＩＦＯ９４２とを含む。
【０１１０】
マルチプレクサ９４１は、ＡおよびＢオペランドならびにタグバス１３０、１３１、１４８および１４９に接続される４：１マルチプレクサを含む。リザベーションステーション９４５内の各ＦＩＦＯエントリは、ロードまたはストア動作を実行するのに必要な情報フィールドのすべてを保持する。１プロセッサクロックサイクル中に、２つまでのＲＯＰが投入され、２つまでのＦＩＦＯエントリが回収される。ロード／ストアリサベーションステーション９４５は、その入力で、４つのＡおよびＢオペランドバス１３０および１３１と、４つのＡおよびＢオペランドタグバス１４８および１４９と、５つの結果バス１３２と、４つの宛先タグバス１４０および４つのオペコード／タイプバス１５０とに接続される。リザベーションステーション９４５はまた、データキャッシュ１８０のポートＡおよびＢのデータ部分に接続される。リザベーションステーション９４５は、ＡおよびＢポートリザベーションステーションデータバスそれぞれRSDATA AおよびRSDATA Bと、ＡおよびＢポートリザベーションステーションアドレスバスRSADDR AおよびRSADDR Bを用いてストアバッファ９４４に接続され、これらはまたデータキャッシュ１８０のポートＡおよびＢのアドレスラインに接続される。リザベーションステーション９４５は、リザベーションステーションロードバスRSLOADおよびリザベーションステーションシフトバスRSHIFTを用いてコントローラ９４３に接続される。ストアバッファ９４４は、ロード／ストア結果バスドライバ９４７と、アドレス／データバス１１１と、ロードストアコントローラ９４３とに、ストアバッファロードバスSBLOADおよびストアバッファシフトバスSBSHIFT を用いて接続される。リザベーションステーション９４５およびストアバッファ９４４との接続に加えて、ロードストアコントローラ９４３はデータキャッシュ１８０およびリオーダバッファ１２６にも接続される。ストアバッファ９４４への接続に加えて、ロード／ストア結果バスドライバはデータキャッシュ１８０と、５つの結果バス１３２および５つの結果タグバス１３９とにも接続する。
【０１１１】
データキャッシュ１８０は、１クロックサイクルにつき２つの動作をサポートする、線形にアドレスされる４ウェイインタリーブ８Ｋバイト４ウェイセットアソシアティブキャッシュである。データキャッシュ１８０は、１２８の１６バイトラインまたはブロックとして構成される。各１６バイトエントリは、４つの個々にアドレスされる３２ビットバンクのラインにストアされる。アドレス（ＡＤＤＲ）およびデータ（ＤＡＴＡ）ラインは、図示のとおりデータキャッシュ１８０をロード／ストア機能ユニット１７３に接続する。より特定的には、データキャッシュ１８０は、データキャッシュ１８０とロード／ストアユニット１７３との間に２組のアドレスおよびデータ経路を含み、ロード／ストア機能ユニット１７３からの２つの同時アクセスを可能にする。個々にアドレスされるバンクによって、データキャッシュ１８０は、デュアルポーティングと関係するオーバーヘッドを避けながら、２つの同時ロード動作等の２つのＲＯＰによる同時アクセスを可能とする。これらの２つのアクセスは、１６バイトデータキャッシュラインサイズに整列される８ないし３２ビットロードまたはストアアクセスであり得る。
【０１１２】
ロード動作は、データキャッシュ１８０からデータを読出す。ロード動作の間に、リザベーションステーション９４５はアドレスをデータキャッシュ１８０に供給する。アドレスがキャッシュヒットを発生すると、データキャッシュ１８０は、リザベーションステーション９４５にデータキャッシュ１８０のストアアレイ（図示せず）の対応するバンクおよびブロックにストアされるデータを供給する。倍長語がデータキャッシュ１８０からロード／ストア結果バスドライバ９４７に転送される。ロード／ストア命令オペコードの上位２ビットが、生成されるべき結果のサイズを特定する。結果のタイプは、倍長語、語、上位バイトまたは下位バイトである。未使用のバイトはゼロにセットされる。上位バイトについては、ＲＯＰを実行することによって生成される結果は、ロード／ストア結果バスドライバ９４７によって結果が結果バス１３２へと送られる前に中位ビットフィールドにリマッピングされる。上位ビットは常にオペランドの中位ビットフィールドから読出される。ロード／ストア結果バスドライバ９４７は、倍長語読出動作によって読出されるデータの未使用の部分をマスクする。AHBYTE信号がセットされれば、ロード／ストア結果バスドライバ９４７は下位フィールドデータビット＜７：０＞を中位フィールドビット＜１５：８＞に再マッピングする。バスドライバ９４７は結果を結果バス１３２のうちの１つに送る。アドレスがポートＡを介してデータキャッシュ１８０に供給されたのであれば、データはポートＡを介してリザベーションステーション回路９４５に与えられる。そうではなく、アドレスがポートＢを用いてデータキャッシュ１８０に与えられた場合には、データがリザベーションステーション９４５にポートＢを介して伝えられる。アドレスはデータキャッシュ１８０に送られ、データはポートＡおよびＢを用いて同時にデータキャッシュ１８０から受取られる。ロード／ストア結果バスドライバ９４７は結果を結果バス１３２のうちの１つへと送る際に、結果タグバス１３９のうちの対応する１つをも駆動する。
【０１１３】
ストア動作は、データキャッシュ１８０からの倍長語読出動作であり、キャッシュ１８０への倍長語ライトバックがこれに続く。ストア動作の間、アドレスされた倍長語がまずデータキャッシュ１８０からストアバッファ９４４に転送される。次にデータがリザベーションステーション９４５からストアバッファ９４４に送られる。ストアデータの幅が３２ビット以上であれば、データキャッシュ１８０から読出された倍長語にデータがとって代わる。ストアデータの幅が３２ビット未満であれば、マージ回路９５０が適用可能なデータフィールドを、データキャッシュ１８０から読出された倍長語にマージする。ストアデータの一部が利用可能でなければ、利用不可能なデータに代わるオペランドタグが用いられる。結果バスから欠けているデータのすべてのビットフィールドが送られるまで、データおよびタグの混ったものがストアバッファに保持される。すべてのフィールドが利用可能となるまでストアバッファ９４４に部分データを保持することによって、フルの倍長語のみがキャッシュ１８０に書込まれる。個々の８ビットバイトの書込は必要ではない。マージされたデータはロード／ストア結果バスドライバ９４７によってデータキャッシュ１８０に戻される。幅が３２ビットを上回るストアデータのロードおよびストア動作は、データキャッシュ１８０への複数のアクセスを行ない、データキャッシュ１８０にライトバックする前にストアバッファ９４４においてデータを構成する。ストア動作が解放されると、データおよび対応するアドレスがデータキャッシュ１８０にアドレス／データバス１１１を用いて伝えられる。
【０１１４】
適切なロード／ストア機能ユニットは、ウィリアム・エム・ジョンソン、デイビッド・ビィ・ウィットおよびミュラリ・チナコンダによる「マイクロプロセッサのロード／ストア機能ユニットおよび情報処理用装置」と題する１９９４年１０月２５日出願の特願平６−２６０６９９号（米国では１９９３年１０月２９日に出願された米国特許出願連続番号第０８／１４６，３７６号）に開示され、その全体をここに引用によって援用する。
【０１１５】
ここで図２０および２１を参照して、データキャッシュ１８０はデータキャッシュコントローラ７００とデータキャッシュアレイ７０２とを含む。なお、図１９は、図２０および２１の組合せの態様を示す。データキャッシュコントローラ７００は、データキャッシュ１８０の種々の動作を制御する。データキャッシュコントローラ７００は、ロード／ストア機能ユニット１７３およびＩＡＤバス１１１からの制御信号（CONTROL ）を受取り、制御信号をデータキャッシュアレイ７０２に発生する。データキャッシュアレイ７０２はデータをブロックの形でストアし、ブロックのアドレス指定の際にデータブロックへのアクセスを供給する。データキャッシュアレイ７０２はロード／ストア機能ユニット１７３からアドレス信号およびデータ信号を受取り、ＩＡＤバス１１１とやり取りする。データキャッシュ１８０は４ウェイアソシアティブであり、２つの線形アドレスをとり、単一のクロックサイクルの第１の段階でその４つのバンクにアクセスする。結果としてのロード動作はサイクルの第２の段階で完了し、結果バス１３２のうちの１つを駆動し得る。結果バス１３２に対する機能ユニットによるリクエストは、他の機能ユニットからのリクエストと調停される。
【０１１６】
データキャッシュアレイ７０２は２つのアレイ、すなわちデータストアアレイ７０４とデータ線形タグアレイ７０６とを含む。データキャッシュアレイ７０４は２つのデータ信号（DATA A、DATA B）を受取り、これらをロード／ストア機能ユニット１７３に与える。ロード／ストア機能ユニット１７３は、２つの線形アドレスADDR AおよびADDR Bを用いてデータ線形タグ回路７０２とデータストアアレイ７０４とにアドレスする。したがって、データキャッシュアレイ７０２はデュアルポートメモリアレイであり、両方のポートがロード／ストア機能ユニット１７３に接続されて、２つのデータ値が同時に書込または読出されるのを可能にする。データストアアレイ７０４はまた、線形タグアレイ７０６から制御信号を受取る。
【０１１７】
データキャッシュコントローラ７００は、データキャッシュアレイ７０２に線形アドレス信号を含む制御信号を発生する。線形アドレス信号の中位ビットは、データ線形タグアレイ７０６の各列内のブロックにアドレスし、かつデータストアアレイ７０４からエントリを検索するためのキャッシュブロックインデックスを供給する。各線形アドレスの上位ビットは、線形タグアレイ７０６の各列の線形データタグと比較され、キャッシュブロックインデックスによってアクセスされる列のうちの１つを選択する。各線形アドレスの下位ビットは、線形アドレスによってアドレスされるバイトにアクセスするために検索されたエントリへのオフセットを与える。
【０１１８】
データストアアレイ７０４内のエントリは、１６バイトのデータブロックを含む。データ線形タグアレイ７０６内のエントリは、データ線形タグ値と、線形タグ有効ビットと、データ有効ビットと、ダーティビットと、有効物理変換ビットとを含む。線形アドレスの上位２１ビットに対応するデータ線形タグ値は、対応するデータストアアレイ７０４のエントリにストアされるブロックの線形ブロックフレームアドレスを示す。線形タグ有効ビットは、線形タグが有効であるかどうかを示す。データ有効ビットは、ストアアレイ内の対応するエントリが有効であるかどうかを示す。ダーティビットは、キャッシュラインが変更されたことを示し、アクセスされたラインが以前に変更されたときにデータキャッシュストアアレイ７０４に示すために用いられる。有効物理変換ビットは、エントリが成功した物理タグヒットに対応するかどうかを示す。
【０１１９】
データキャッシュ１８０は、４つの２Ｋバイト列またはバンクに構成され、これらは、データキャッシュ内のラインの１つが４つのバンクの各々において４バイトを有するように構成される。したがって、２つのアクセスのビット［３：２］の線形アドレスが同じでない限り、２つのアクセスは同時にデータキャッシュ１８０内のデータアレイにアクセスできる。データ線形タグアレイ７０６およびデータキャッシュストアアレイ７０４は、命令キャッシュ１１６のアドレスタグアレイ２５２および命令ストアアレイ２５０と同様の態様で構成される。しかしながら、データキャッシュ１８０は、データ線形タグアレイ７０６が２つの線形アドレス（ADDR A、ADDR B）を同時に受取り、データストアアレイ７０４が２つのデータ信号（DATA A、DATA B）を同時に受取りかつこれらを供給するデュアルポートデータキャッシュとして機能する。データストアアレイ７０４は、４つの別個のデータストアアレイ、列０、１、２および３、それぞれ７１０、７１２、７１４および７１６とマルチプレクサ回路７１８とを含む。マルチプレクサ７１８は、それぞれの線形タグアレイにストアされた線形タグ値との一致があるかどうかを示す制御信号をデータ線形タグアレイ７０６から受取る。マルチプレクサ７１８はデータを受取り、これをストアアレイ７１０、７１２、７１４および７１６に供給する。マルチプレクサ７１８はまたデータを受取り、これをＩＡＤバス１１１およびロードストア機能ユニット１７３に供給する。
【０１２０】
線形タグアレイ７０６は、線形タグアレイ列０、１、２および３、それぞれ７２０、７２２、７２４および７２６を含み、これらの各々は対応する比較回路７３０、７３２、７３４および７３６と接続される。データキャッシュ１８０の各列は、ストアアレイと、線形タグアレイと比較回路とを含み、これらのすべてがロード／ストア機能ユニット１７３から線形アドレスADDR A、ADDR Bを受取る。
【０１２１】
ここで図２２を参照して、物理Ｉ／Ｄタグブロック１８６は、命令物理タグアレイ部分７５０とデータ物理タグアレイ部分７５２とを含む。命令物理タグアレイ部分７５０は、いくつかの命令物理タグアレイ７６０、７６２、７６４および７６６と、いくつかの命令比較回路７７０、７７２、７７４および７７６を含む。データ物理タグアレイ部分７５２は、いくつかのデータ物理タグアレイ７８０、７８２、７８４および７８６と、いくつかの対応するデータ比較回路７９０、７９２、７９４および７９６とを含む。命令物理タグアレイ７６０、７６２、７６４および７６６は、命令キャッシュ１１６の列０、１、２および３に対応する。データ物理タグアレイ７８０、７８２、７８４および７８６は、データキャッシュ１８０の列０、１、２および３に対応する。
【０１２２】
命令物理タグアレイ７６０、７６２、７６４および７６６は、バスインタフェースユニット１８４によって供給される物理アドレスの最下位ビットを受取り、それぞれの物理タグを比較回路７７０、７７２、７７４および７７６に供給し、これらは同じ物理アドレスの最上位ビットも受取る。比較回路７７０、７７２、７７４および７７６は、それぞれの命令列ヒット指示信号（IHIT C0 、IHIT C1 、IHIT C2 およびIHIT C3 ）を命令ストアアレイ２５０内のマルチプレクサ回路（図示せず）のHIT COL 入力に供給し、出力命令を供給するための列ストアアレイを選択する。
【０１２３】
データ物理タグアレイ７８０、７８２、７８４および７８６は、バスインタフェースユニット１８４から物理アドレスの最下位ビットを受取り、それぞれのデータ物理タグを比較回路７９０、７９２、７９４および７９６に供給し、これらは同じ物理アドレスの最上位ビットも受取る。比較回路７９０、７９２、７９４および７９６は、それぞれのデータ列ヒット指示信号（DHIT C0 、DHIT C1 、DHIT C2 およびDHIT C3 ）をデータストアアレイ７０４内のマルチプレクサ７１８のHIT COL A 入力に供給し、出力データを与えるための列ストアアレイを選択する。
【０１２４】
データ物理タグアレイ７８０、７８２、７８４および７８６ならびに命令物理タグアレイ７６０、７６２、７６４および７６６内の物理タグエントリは、物理タグ値（ＰＴＡＧ）と、物理タグ有効ビット（ＰＶ）と、シェアードビット（Ｓ）とを含む。物理データタグエントリはまた、モディファイドビット（Ｍ）、キャッシュディスエーブルビット（ＣＤ）と、ライトスルービット（ＷＴ）とを含む。物理命令タグは有効ビットしか持たない、というのは物理命令キャッシュは変更され得ないからである。ＰＴＡＧエントリは、ストアアレイ内の対応するエントリと関連する線形アドレスの変換の結果としてできる物理アドレスを識別する。物理タグ有効ビットは、対応するストアアレイの関連するエントリが有効情報を含んでいるかどうかを示す。シェアードビットは、プロセッサ１１０を含むコンピュータシステム内の別のキャッシュが同じ物理メモリにマッピングするかどうかを示す。モディファイドビットは、ストアアレイ内にストアされたデータが書込まれたかまたは変更されていて、キャッシュの外部にストアされた対応するデータとはもはや一致しないことを示す。キャッシュディスエーブルビットは、エントリがキャッシュディスエーブルされておりキャッシュ書込の際に書込まれないことを示す。ライトスルービットは、エントリがキャッシュに書込まれるときにエントリの対応する外部メモリ位置にも書込まれるべきであることを示す。
【０１２５】
ここで図２３を参照して、メモリ管理ユニット（ＭＭＵ）１８８は、線形アドレスと物理アドレスとの間で変換するための変換回路として機能する。ＴＬＢ７４０は、ｘ８６アーキテクチャに関して規定される線形−物理アドレス変換の手順を行なう。この手順は、有効な変換を求めて外部ページテーブルをサーチするのを防ぐように、最も最近の線形−物理アドレス変換のキャッシュを用いる。ＭＭＵ１８８は、ＴＬＢアレイ７４２およびＴＬＢ比較回路７４４を有するトランスレーションルックアサイドバッファ（ＴＬＢ）７４０を含む。ＴＬＢアレイ７４２は、４ウェイセットアソシアティブキャッシュとして構成される。各セットは３２のエントリを含み、したがって１２８のＴＬＢエントリを含む。ＴＬＢ１８８の各ＴＬＢエントリは、線形タグ値（ＬＴＡＧ）および物理タグ値（ＰＴＡＧ）を含む。ＬＴＡＧは線形アドレスの最上位ビットに対応する。ＰＴＡＧは、線形アドレスに対応する物理アドレスの最上位ビットに対応する。ＰＴＡＧは、ページテーブルの単一レベルのみを用いて物理アドレスを得るために、ＬＴＡＧに対応する線形アドレスの下位ビットと連結される。
【０１２６】
キャッシュミスとは、データキャッシュ１８０内にストアされていないデータ値がロード／ストア機能ユニット１７３によってリクエストされたときに起こる条件である。プロセッサ１１０は、外部メモリ１１４からリクエストされたデータ値をデータキャッシュ１８０にロードすることによってキャッシュミスに応答する。
【０１２７】
データキャッシュ１８０をロードするために、ロード／ストア機能ユニット１７３は求められたデータに関する論理アドレスを線形アドレスに変換して、線形アドレスをメモリ管理ユニット１８８に与える。ＭＭＵ１１８はＴＬＢヒットがあるかどうかを判断するためにＴＬＢ比較回路７４４を用いて、ＴＬＢアレイ７４２の線形タグ部分に対して線形アドレスをチェックする。もしヒットがあれば、線形アドレスを変換することによって得られる物理アドレスの上位ビットが、線形アドレスのキャッシュブロックインデックスビットおよび列選択ビットに対応するデータ物理タグアレイ部分７５２のエントリに書込まれる。データ線形タグアレイ７２０、７２２、７２４および７２６は線形タグの列選択ビットに対応し、線形アドレスビットのキャッシュブロックインデックスはＴＬＢアレイ７４２からの線形タグと書込まれる。ＴＬＢヒットがなければ、ＴＬＢ７４４はメモリ管理ユニット１８８によってリクエストされた値のアドレスを含むように更新され、そのためＴＬＢヒットが結果として起こり、実ページ数がデータ物理タグ部分７５２に書込まれることとなる。
【０１２８】
読出リクエストが外部メモリに対してロード／ストア機能ユニット１７３によって行なわれ、線形アドレスに対応する物理アドレスで外部メモリ１１４にストアされた値が外部メモリから検索される。この値は、それぞれ物理および線形タグアレイにストアされたその値の物理および線形タグのラインおよび列位置に対応するストアアレイ７０４のラインおよび列にストアされる。物理タグアレイ７５２内の対応する物理タグ有効ビットは、セットされると物理タグが有効であることを示す。線形タグアレイ７０６内の対応するデータ有効ビット、線形タグ有効ビットおよび有効物理変換ビットもまたセットされると線形タグに対応するエントリが有効であること、線形タグが有効であること、およびエントリが物理変換をうまく与えることを示す。
この値の論理アドレスが機能ユニットによって再びリクエストされると、ロード／ストア機能ユニット１７３は、線形アドレスタグアレイ７０６内の線形タグをリクエストされたアドレスと比較するために、論理アドレスを線形アドレスに変換する。有効ビットがセットされ、かつ有効物理変換ビットがセットされているので、線形アドレスヒットが起こり、データストアアレイ７０２の対応するラインにストアされたエントリがリクエストした機能ユニットに送られる。ロード／ストア機能ユニット１７３によるアクセスの間、物理Ｉ／Ｄタグブロック１８６またはＴＬＢ回路１８８にアクセスする必要はない。これは、エントリが有効物理変換を有することを示す有効物理変換ビットがセットされているためである。ＴＬＢ７４４が更新されない限り、各データキャッシュアクセスについてこのプロセスが繰り返される。
【０１２９】
プロセッサ１１０は、自己変更コードに対応している。自己変更コードは実行中に新しいオペコード、アドレスまたはデータ値を既存の命令に対して書込むことによってそれ自体を変更するプログラムコードである。自己変更コードは、命令キャッシュ１１６に現在あるアドレスにストア動作が書込むときのプロセッサ１１０の動作のコンテキストで起こる。
【０１３０】
ここで図４と１７ないし２３とを参照して、ストア動作は、ストア動作の第１の部分がロード動作に類似したリード・モディファイ・ライト動作として行なわれる。ロード動作に関しては、ロード／ストア機能ユニット１７３は、ストアされるべき位置にあるデータ値がデータキャッシュ１８０内で利用可能であるかどうかを判断する。線形アドレスの最下位１１ビットであるキャッシュインデックスが、線形アドレス計算の一部として計算される。このキャッシュインデックス線形アドレスは、データキャッシュストアアレイ７０４の適切なバンクおよびラインにアクセスするのに用いられる。適切なラインおよびバンクがアクセスされると、線形タグを比較することによってストアアレイ７０４の適切な列にアクセスするのに線形アドレスが用いられる。タグが一致すれば、データキャッシュヒットが起こる。推測によるロード動作がロード／ストア機能ユニット１７３によって行なわれており、かつロードされるべきデータ値がデータキャッシュ１８０内で利用可能でないときには、推測によるデータキャッシュミスが起こる。
【０１３１】
データキャッシュ１８０がアクセスされ、かつ結果がキャッシュミスである場合には、ＭＭＵ１８８においてＴＬＢ７４０がアクセスされ、物理タグが物理Ｉ／Ｄタグブロック１８６内でアクセスされて、データ値の物理アドレスを決定する。この物理アドレスは次にＭＭＵ１８８内で、物理アドレスがいかなる保護チェックをも犯すものでないことを確かにするためにチェックされる。ロード／ストアコントローラ９４３は、線形アドレスに対して当該分野では周知であるようにセグメントリミットチェックおよび保護チェックを行なう。保護チェックの一部として、データキャッシュ１８０および命令キャッシュ１１６のメモリの双方ともがコンフリクトに関してテストされる。線形−物理アドレスのマッピングによって命令アクセスおよびデータアクセスが同じ物理位置をリクエストすることを可能にするので、線形キャッシュにおいてミスが起こるとキャッシュの双方ともがテストされる。ＭＭＵ１８８は、自己変更コードの場合に命令キャッシュのデータキャッシュ変更をストア動作が求めることを判断する。ストア動作がリクエストされているので、これはプログラムコードメモリへの書込であり、そのため命令キャッシュブロックおよびその関連のプリデコード情報が無効にされる。これはアドレスタグアレイ２５２のエントリの有効ビットをクリアすることによって行なわれ、これが命令キャッシュ１１６内の命令ブロックを割当てから外し、このブロックのデータキャッシュ１８０に対する割当てを可能にする。新しく割当てられたデータブロックの第１のアクセスはロードであり、この後にデータキャッシュ１８０への局所的ストアが続く。結果としてのデータ値がDATA Aデータ経路を介してリザベーションステーション９４５に戻される。このデータ値は、結果バスドライバ９４７によって結果バス０にフォーマット化される。適切なモディファイドビットが物理Ｉ／Ｄタグ１８６においてアサートされて、データストアアレイ７０４内にストアされたデータが書込まれたか、または変更され、キャッシュの外部にストアされた対応のデータとはもはや一致しないことを示す。適切なダーティビットがデータ線形タグアレイ７０６のエントリ内でアサートされて、外部メモリ１１４内の情報がデータキャッシュ１８０と矛盾しないことを確かにする。キャッシュアレイ７０４は、タグバスからのラインのタグ有効ビットで更新される。タグ値、宛先タグおよび状態が次に利用可能な結果バスへと送られる。データ値および対応する宛先タグがポートＡに対して結果バス０へと送られ、データストアアレイ７０４の次に利用可能なエントリにストアされる。この値はデータストアアレイ７０４に、リオーダバッファ１２６からストア動作が回収されるまで保持され、これは未決の他の命令が存在しないときに起こる。リオーダバッファ１２６は、ロードストア回収信号を用いてロード／ストア機能ユニット１７３に、ストア命令が回収され得ること、すなわちストアを行なってもよいことを示す。ストアは実際にデータ値の状態を変更するので、ストアは推測では行なわれず、リオーダバッファ１２６がストアを実行することを可能にする前にストアが実際に推測によるものではないことが明らかとなるまで待たなくてはならない。
【０１３２】
命令キャッシュ１１６のデータキャッシュストアの回収は、再同期化応答を起こし、リオーダバッファ１２６からすべての推測によるＲＯＰをフラッシュし、命令キャッシュ１１６が、最後に回収された命令の時点、すなわちストアＲＯＰの直後の命令の時点から命令をフェッチし始めることを引起こす。ストアの後の未決のＲＯＰはすべて再フェッチされる。再同期化は、自己変更コードストアに後続する命令に対してのみ適用される。
【０１３３】
ここで図２４を参照して、プロセッサは６ステージパイプラインで動作し、実行経路が正しく成立予測され、かつ命令が命令キャッシュ１１６から直接利用可能な状態で、Ｘ８６バイトの順次的ストリームをプロセッサ１１０が実行する。各ステージは段階１および段階２と称する２つの段階を含む。
【０１３４】
この段階は、上下の列によって示されるように、順にフェッチ、デコード１、デコード２、実行、結果および回収パイプラインステージを含む。選択信号がパイプラインの種々のステージで現われるのにあわせて横方向の行に表わされ、これらは、システム前縁クロック信号（ｐｈ１）、フェッチＰＣバス信号（FPC ＜３１：０＞）、命令ストアアレイ２５０バス出力信号（ICBYTEnB＜１５：０＞）、バイトキュー１３５バス信号（BYTEQn＜７：０＞）および命令デコーダ１１８命令Ｘ８６−ＲＯＰ変換信号（ROPmux）を含む。選択信号はさらに、ソースオペランドポインタバス１３６および１３７を介して送られる信号（source / dest pointers）、オペランドバス１３０および１３１を介して送られる信号（REGF /ROB access）、ＲＯＰおよび宛先タグを機能ユニットに発行するための信号（issue ROPs / dest tags）、オペランドバス１３０および１３１を機能ユニットが読出すための信号（A/B read operand buses）、および機能ユニットによるＲＯＰ実行のための信号（Func unit exec）を含む。ａ＆ｂ→ｃ、ｃ＆ｄ→ｅおよびｃ＆ｇ→は、ソースＡ、ソースＢ＞宛先の形で任意のＲＯＰ実行動作を示す。選択信号はさらに、結果バス調停信号（Result Bus arb）、結果バス１３２を介して結果を転送するための信号（Result Bus forward）、結果バス１３２からリオーダバッファ１２６に結果を書込むための信号（ROB write result）、およびデータ転送のために機能ユニットのリザベーションステーションに結果タグ１３９を送るための信号（ROB tag forward ）を含む。選択信号はさらに、リオーダバッファ１２６からレジスタファイル１２４に結果を回収するための信号（REGF write / retire ）および回収のための信号EIP ＜３１：０＞を含む。
【０１３５】
フェッチの際に、命令キャッシュ１１６は段階１で新しいフェッチＰＣ（FPC ＜３１：０＞を形成し、フェッチＰＣを用いて段階２でキャッシュアレイ２００にアクセスする。線形命令キャッシュタグアレイがストアアレイと並列してアクセスされる。フェッチ段階２の遅くに、キャッシュアクセスがヒットであるかどうかを判断し、予測実行されたＸ８６バイトを識別し、予測実行される次のブロックが順次的であるか非順次的であるかを確認することによって、命令キャッシュ１１６は現在フェッチされているブロックの有効バイトを識別する。タグおよびストアアレイにアクセスするのに加えて、フェッチプログラムカウンタ値はまたサクセッサアレイ２５４にアクセスし、これは分岐予測アレイとも称する。サクセッサアレイ２５４は、どのｘ８６バイトが予測実行されるかを識別し、さらに予測実行される次のブロックが順次的であるか非順次的であるかを判断する。フェッチサイクルのＰＨ２でアクセスされるこの情報は、現在フェッチされているブロックのバイトが有効バイトとしてバイトキュー１３５に送られるかを判断する。命令キャッシュ１１６は有効な予測実行バイトをバイトキュー１３５に送る。
【０１３６】
分岐予測がフェッチ段階２で起こるので、プリフェッチすべき次のブロックは順次的なものでも非順次的なものでもあり得る。いずれにしても、ブロックからの分岐が順次的な動作と同じ動作速度を有するように、キャッシュアレイ２００に再アクセスするのには１クロックサイクルを利用できる。
【０１３７】
デコード１の間、推測による命令がフェッチされ、命令デコーダ１１８が命令をデコードし、命令が有効となる。デコード１の段階１の早くに、プリフェッチされ、予測実行されたバイトが指定された充満位置に送られ、バイトキュー１３５内の未決のバイトとマージされ、信号ICBYTEnB＜１５：０＞として示される。デコード１の段階１の途中で、マージされたバイトは、オペコードをＲＯＰ発行位置Ｄ０、Ｄ１、Ｄ２およびＤ３に整列させ、ＲＯＰを信号ROPmuxで発行するために、信号BYTEQn＜１５：０＞を介して命令デコーダ１１８に送られる。命令デコーダ１１８は、命令境界間のバイト数をカウントすることによって、または分岐を検出してターゲットＰＣ値をその位置からフェッチされた最初のＸ８６バイトに割当てることによって、バイトキュー１３５内の各Ｘ８６命令のフェッチＰＣのコピーを維持する。デコード１の段階２およびデコード２の段階１で、命令デコーダ１１８は、ＲＯＰに関する即値アドレスおよびデータ値、機能ユニットの宛先、ならびにソースおよび宛先オペランドポインタの値およびサイズを決定する。命令デコーダ１１８は、これらの信号を図２４に示されるように適切なバスを介して信号source / dest pointersとして送る。
【０１３８】
デコード２の間に、命令デコーダ１１８の出力は有効になる。たとえば、オペランドバス１３０および１３１とオペランドタグバス１４８および１４９とがデコード２の早くに有効となり、これによってレジスタファイル１２４およびリオーダバッファ１２６からのオペランドとリオーダバッファ１２６からのオペランドタグとがデコード２の遅くに利用可能となる。デコード２の段階１で、４つまでのリオーダバッファ１２６のエントリが、次のクロック段階で投入され得るＲＯＰに対して割当てられる。ＲＯＰが割当てられると、リオーダバッファ１２６のエントリにおける割当てられたビットがアサートされる。デコード２の段階２で、割当てられたすべてのＲＯＰに関するソース読出ポインタ１３６および１３７がレジスタファイル１２４およびリオーダバッファ１２６に与えられて、信号REGF / ROB access によって非推測的および推測的オペランドデータにそれぞれアクセスする。段階１でＲＯＰエントリを割当て、これらに段階２でアクセスすることによって、リオーダバッファ１２６は、現在の発行ウィンドウ内のエントリおよび先に発行されたエントリに対するデータ従属性に関してチェックできる。
【０１３９】
命令デコーダ１１８は、命令境界間のバイト数をカウントすることによって、または命令キャッシュ１１６内の分岐を検出してターゲットＰＣをその位置からフェッチされた第１のＸ８６バイトに付加することによって、バイトキュー１３５内のｘ８６命令の各々のフェッチＰＣのコピーを導出するための情報を維持する。オペコードＲＯＰ位置決め情報、およびバイトキュー１３５にストアされた即値フィールドを用いて、命令デコーダ１１８は、第１のデコードサイクルのＰＨ２および第２のデコードサイクルのＰＨ１の間にプログラムカウンタ情報を決定する。第２のデコードサイクルのＰＨ１の終りまでに、すべてのレジスタ読出および書込ポインタが解決され、動作が決定される。これは図２４にソースＡ／Ｂポインタ値のアサートとして示される。
【０１４０】
実行の際に、オペランドバス１３０および１３１とタグ１４８および１４９とが有効となり、機能ユニットのリザベーションステーションに供給される。機能ユニットはＲＯＰを実行し、結果バスを調停する。実行の際に、ＲＯＰはオペコード／タイプバス１５０を介して信号issue ROPs /dest tags によって、およびオペランドバス１３０および１３１を介して信号A / B read oper buses によって機能ユニットに投入される。実行段階１の遅くに、機能ユニットはオペコード／タイプバス１５０からの信号にアクセスして、発行されたＲＯＰの１つまたはそれ以上を待ち行列に入れるかどうかを判断する。機能ユニットがＲＯＰを実行する準備ができていれば、実行段階１の遅くに実行を始め、タイミング信号Func unit execで段階２まで実行を続ける。段階２の終りに、機能ユニットはタイミング信号Result bus arbで結果バスアービトレータ（図示せず）から結果バス付与信号（図示せず）を調べて、結果バスが付与されるかどうかを判断する。結果バスへのアクセスが認められれば、認められた機能ユニットは後続の結果段階１で割当てられた結果バスを駆動する。
【０１４１】
結果ステージの間に、信号Result bus forwardは機能ユニット結果バスドライバから結果バス入力、機能ユニットおよびリオーダバッファ１２６への結果の転送を時間決めする。結果段階１において、結果、結果タグおよび状態情報がそれぞれバス１３２、１３９および１４１を介してリオーダバッファ１２６に送られ、タイミング信号ROB write resultによって書込まれる。状態情報は有効、例外および予測誤りフラグを含む状態フラグを含む。このとき、有効な結果を生成したＲＯＰに関してＲＯＢエントリにおいて有効ビットがアサートされる。結果段階２においては、新しく割当てられた結果データが、そのデータをソースオペランドとして用いる後続のＲＯＰによって検出可能であり、結果データがタイミング信号ROB tag forward でオペランドバス１３０および１３１に送られる。
【０１４２】
回収のＰＨ１において、ＲＯＰの結果がリオーダバッファ１２６からレジスタファイル１２４に書込まれ、ＥＩＰレジスタ６２０が信号REGF write / retire で回収すべき次の命令を指すように更新される。回収サイクルのＰＨ１で、リオーダバッファ１２６内のエントリが割当てから外され、結果フィールドがリオーダバッファ１２６からレジスタファイル１２４に書込まれる。リオーダバッファ１２６は、回収されてしたがってもう推測によるものではない命令のプログラムカウンタを追跡するようにＥＩＰレジスタ６２０を維持し、更新する。EIP ＜３１：０＞タイミング信号はＥＩＰレジスタ６２０を更新し、ＲＯＰが回収される際にEIP ＜３１：０＞バスを駆動する。リオーダバッファ１２６のエントリが割当てから外されるので、その後のレジスタへの参照は、リオーダバッファ１２６からの推測による読出ではなく、レジスタファイル１２４からの読出となる。レジスタファイル１２４からの読出は、プロセッサ１１０の推測による状態ではなく実際の状態を示す。
【０１４３】
図２５は、図２６および２７の組合せの態様を示し、図２６および２７は、再同期化応答を引起こすように指定された条件が第１のサイクルで生じ、再同期化が第１のサイクルに続くサイクルで達成されることを起こすときのプロセッサ１１０のタイミング図である。再同期化条件に先立ったクロックサイクルの信号は、図２４に示される正しく予測された分岐に関する信号と同じである。しかしながら、さらに例外フラグEXCEPTION 、リクエストトラップREQTRAP 、同期化フラグSYNC、XRES4B＜３１：０＞ポインタ、更新フェッチＰＣ UPDFPC/FPCTYPE およびターゲットＰＣ  XTARGET ＜３１：０＞信号がプロセッサ１１０に与えられて、再同期化応答を制御する。例外フラグEXCEPTION は、リオーダバッファ１２６から機能ユニットおよび他のブロックに伝えられ、機能ユニットおよびブロックの局地的な初期化をトリガし、ＲＯＰの進行中の実行を終らせる。たとえば、EXCEPTION は一般には機能ユニットのリザベーションステーションのフラッシュを始める。リクエストトラップREQTRAP は、リオーダバッファ１２６から分岐ユニット１７０へのラインであり、これはXRES4B＜３１：０＞とともに例外、トラップ応答または再同期化応答をリクエストする。リオーダバッファ１２６から分岐ユニット１７０に伝えられるXRES4B＜３１：０＞は、分岐ユニット１７０に例外の後にそこから命令をフェッチするべきフェッチＰＣを知らせる。XRES4B＜３１：０＞は、例外に応答する際にプロセッサ１１０が向けられるべき命令ポインタである。同期化フラグSYNCは、REQTRAP を識別し、再同期化応答を例外応答と区別するために用いられる。例外応答の際には、SYNCがデアサートされてリクエストトラップREQTRAP 信号および関連のXRES4B＜３１：０＞ポインタによってプロセッサ１１０がXRES4B＜３１：０＞によって示されるプログラム命令位置から始まって命令をフェッチすることとなる。再同期化応答の際には、SYNCがアサートされて、XRES4B＜３１：０＞ポインタポインタ上の値を識別する。XRES4B＜３１：０＞は、例外の後のプロセッサの動作を再指定するためのＭＲＯＭアドレスか、または再同期化条件に続くプロセッサの動作を再指定するためのＥＩＰレジスタ６２０の内容を有する。SYNCがアサートされると、XRES4B＜３１：０＞は拡張命令ポインタＥＩＰを有し、リクエストトラップ信号REQTRAP によって、プロセッサ１１０はポイントＥＩＰによって示されるプログラム命令位置から始まって命令をフェッチすることとなる。
【０１４４】
スタックアンダーフローの際の再同期化については、EXCHANGE SYNC 信号もまたリオーダバッファ１２６から分岐ユニット１７０に送られ、分岐ユニット１７０が再同期化FXCH ROPシーケンスを起こすこととなる。更新フェッチＰＣ UPDFPC およびXTARGET ＜３１：０＞が分岐ユニット１７０から命令キャッシュ１１６に送られる。更新フェッチＰＣ UPDFPC / FPCTYPE はフェッチプログラムカウンタを更新するように命令キャッシュ１１６に知らせ、一方XTARGET ＜３１：０＞はフェッチＰＣがそれに更新されるアドレスを保持する。FPCTYPE 信号は、SYNC信号の態様でXTARGET ＜３１：０＞ポインタ上の値を識別し、フェッチポインタ再指定のタイプ、すなわちＭＲＯＭアドレスまたはＥＩＰポインタフェッチングのいずれであるかを区別する。
【０１４５】
機能ユニットは再同期化条件を検出し、タイミング段階RESULT / ROBの間に、信号ROB write resultによって状態バス１４１を介してリオーダバッファ１２６に再同期化フラグを送る。RESYNCビットおよびEXCEPTION ビットが、ＲＯＰと関連するリオーダバッファ１２６のエントリ内に保持される。ＲＯＰが回収されるとき、ＥＩＰジェネレータ回路６３０は、RESYNCおよびEXCEPTION ビットを含む種々の状態ビットをテストする。RESYNCおよびEXCEPTION ビットのアサートによって、リオーダバッファ１２６はトラップベクトルリクエストを行なう。タイミング段階RETIRE /REGFの間に、例外の告知がEXCEPTION 信号によってリオーダバッファ１２６から例外ライン１６０を介して機能ユニットに送られる。リオーダバッファ１２６はEXCEPTION 信号を機能ユニットのすべてにリレーし、これらはそれぞれのリザベーションステーションをフラッシュして、さらにこの信号を命令デコーダ１１８および命令キャッシュ１１６を含む他のユニットにも送る。EXCEPTION 信号がすべての機能ユニットに送られてから１サイクル後に、リオーダバッファ１２６はREQTRAP およびSYNC信号を例外段階の間に分岐ユニット１７０に送る。リオーダバッファ１２６は例外段階の間に、ヘッド６１６ポインタおよびテイル６１８ポインタをゼロにセットすることによって１サイクルの間に推測による状態がクリアされる際に、フラッシュされる。
【０１４６】
フェッチ／ターゲット段階において、分岐ユニット１７０は更新フェッチＰＣ UPDFPC / FPCTYPE 信号およびXTARGET ＜３１：０＞アドレスを命令キャッシュ１１６に送る。SYNC信号がセットされると、分岐ユニット１７０はXTARGET ＜３１：０＞を最後に回収されたＥＩＰアドレスに設定する。XTARGET ＜３１：０＞は、再同期化に関して命令のフェッチがそれに指定されるプログラムカウンタを示す。リカバリは、命令の実行段階の間の再同期化条件の発見から再同期化される経路における命令のフェッチまでの３サイクルの遅延を含む。
【０１４７】
フェッチ段階は、再同期化に関してターゲットｐｃバス１２２が分岐ユニット１７０からタイミング信号XTARGET ＜３１：０＞で命令キャッシュ１１６に駆動されてフェッチがそこに再指定されるプログラムカウンタを供給することを除いて、標準の動作および再同期化応答と類似している。分岐ユニット１７０はタイミング信号UPDFPC / FPCTYPEで示されるように、命令キャッシュ１１６に更新フェッチＰＣ  UPDFPC / FPCTYPE指示を送るのと同時に、命令キャッシュ１１６にターゲットを送る。命令キャッシュ１１６はターゲットＰＣをフェッチｐｃバス２０６に送り、アレイ２００にアクセスし、これはフェッチ段階２で行なわれる。キャッシュヒットが起こると、バイトは正しく予測された場合のようにバイトキュー１３５に送られる。
【０１４８】
デコード１、デコード２および実行ステージは再同期化に続いて標準的な条件と同様である。
【０１４９】
本発明を種々の実施例に関して説明したが、これらの実施例は例示的なものであり、本発明の範囲はこれに限られるものではないことを理解されたい。説明した実施例の多くの変形、変更、付加および改良が可能である。たとえば、再同期化が行なわれる条件は、処理中のエラー条件または他の変則等の他のタイプの条件を含み得る。再同期化動作を実現する論理および回路は、例示的な実施例に示したのとは別の、プロセッサ中の他の内部ブロックに位置されてもよい。これらのおよび他の変形、変更、付加および改良は、前掲の特許請求の範囲によって定められる本発明の範囲内である。
【図面の簡単な説明】
【図１】図２および図３の組合せの態様を示す図である。
【図２】再同期化応答を実現するプロセッサのアーキテクチャレベルのブロック図である。
【図３】再同期化応答を実現するプロセッサのアーキテクチャレベルのブロック図である。
【図４】プロセッサ再同期化を実現する特徴を含む命令キャッシュアーキテクチャレベルのブロック図である。
【図５】図６および図７の組合せの態様を示した図である。
【図６】プロセッサの再同期化を実現する特徴を含む命令デコーダのアーキテクチャレベルのブロック図である。
【図７】プロセッサの再同期化を実現する特徴を含む命令デコーダのアーキテクチャレベルのブロック図である。
【図８】図２および３のプロセッサ内のレジスタファイルのアーキテクチャレベルのブロック図である。
【図９】図８に示されるレジスタファイルのメモリフォーマットを示す図である。
【図１０】図１１および図１２の組合せの態様を示した図である。
【図１１】プロセッサ再同期化を実現する特徴を含む、図２および３のプロセッサ内のリオーダバッファのアーキテクチャレベルのブロック図である。
【図１２】プロセッサ再同期化を実現する特徴を含む、図２および３のプロセッサ内のリオーダバッファのアーキテクチャレベルのブロック図である。
【図１３】図１１および１２のリオーダバッファ内のメモリフォーマットの図である。
【図１４】図２および３のプロセッサ内のプログラムカウンタの相互作用を表わす図である。
【図１５】プロセッサ再同期化を実現する特徴を含む分岐ユニットのアーキテクチャレベルのブロック図である。
【図１６】例外およびトラップを含む種々の条件に応答してプロセッサを再同期化させる方法のフローチャートである。
【図１７】プロセッサ再同期化を実現する特徴を含む浮動小数点機能ユニットのブロック図である。
【図１８】プロセッサ再同期化を実現する特徴を含むロード／ストア機能ユニットのブロック図である。
【図１９】図２０および図２１の組合せの態様を示した図である。
【図２０】プロセッサ再同期化を実現する特徴を含むデータキャッシュのブロック図である。
【図２１】プロセッサ再同期化を実現する特徴を含むデータキャッシュのブロック図である。
【図２２】プロセッサ再同期化を実現する特徴を含む物理Ｉ／Ｄタグブロックのブロック図である。
【図２３】プロセッサ再同期化を実現する特徴を含むトランスレーションルックアサイドバッファのブロック図である。
【図２４】プロセッサにおける複数ステージの順次的実行パイプラインのタイミング図である。
【図２５】図２６および図２７の組合せの態様を示した図である。
【図２６】再同期化される際のプロセッサにおける複数ステージの順次的実行パイプラインのタイミング図である。
【図２７】再同期化される際のプロセッサにおける複数ステージの順次的実行パイプラインのタイミング図である。
【符号の説明】
１１０  パイプラインプロセッサ
１２６  リオーダバッファ
１７０−１７５  機能ユニット
６２０  命令ポインタ
【図１】
0003751049.tif 000002
【図２】
0003751049.tif 000003
【図３】
0003751049.tif 000004
【図４】
0003751049.tif 000005
【図５】
0003751049.tif 000006
【図６】
0003751049.tif 000007
【図７】
0003751049.tif 000008
【図８】
0003751049.tif 000009
【図９】
0003751049.tif 000010
【図１０】
0003751049.tif 000011
【図１１】
0003751049.tif 000012
【図１２】
0003751049.tif 000013
【図１３】
0003751049.tif 000014
【図１４】
0003751049.tif 000015
【図１５】
0003751049.tif 000016
【図１６】
0003751049.tif 000017
【図１７】
0003751049.tif 000018
【図１８】
0003751049.tif 000019
【図１９】
0003751049.tif 000020
【図２０】
0003751049.tif 000021
【図２１】
0003751049.tif 000022
【図２２】
0003751049.tif 000023
【図２３】
0003751049.tif 000024
【図２４】
0003751049.tif 000025
【図２５】
0003751049.tif 000026
【図２６】
0003751049.tif 000027
【図２７】
0003751049.tif 000028