(57)【特許請求の範囲】
【請求項１】
複数の実行ユニットと、
前記複数の実行ユニットに結合されたスケジューラと、
前記スケジューラに結合されたオペレーションコミットユニットとを有するプロセッサにおいて、
前記スケジューラは、
各々が自身に関連するオペレーションのための情報を記憶するためのメモリフィールドを含むとともに、最上列から最下列に至る一連の列にグループ分けされる複数のエントリーであって、最下列を除く各列のエントリーのメモリフィールドが次の列のエントリーのメモリフィールドに結合されるように構成されたエントリーと、
最下列を除く前記列のそれぞれのために、各列の前記エントリーのメモリフィールドに記憶された情報を次の列のメモリフィールドにシフトするか否かを制御するための制御信号を生成するグローバル制御ロジックと、
前記複数のエントリーをスキャンして、実行のために前記実行ユニットに発行するオペレーションを選択するロジックと、
発行されたオペレーションの実行のための情報を、前記実行ユニットに提供するロジックと、
前回発行されたオペレーションによる実行結果を記憶するロジックとを有しており、
前記オペレーションコミットユニットは、前記スケジューラ内のエントリーに新たなオペレーションを関連付け得るように、前記スケジューラからオペレーションを退避及び除去するとともに、当該プロセッサにより実行されるプログラムにとって必要なオペレーションに関連付けられたエントリーに前記実行結果が記憶されている場合に、当該実行結果を恒久化するように構成されている、
プロセッサ。
【請求項２】
レジスタファイルを更に含んでおり、
前記オペレーションコミットユニットは、前記実行結果を前記スケジューラ内のエントリーから前記レジスタファイルに転送して、当該実行結果を恒久化するように構成されている
請求項１記載のプロセッサ。
【請求項３】
状態レジスタを更に含んでおり、
前記オペレーションコミットユニットは、エントリーからの前記実行結果により示される状態フラグ値を前記状態フラグレジスタに転送して、当該実行結果を恒久化するように構成されている、請求項２記載のプロセッサ。
【請求項４】
前記グローバル制御ロジックは、前記オペレーションコミットユニットが前記スケジューラの最下列のエントリーに関連するすべてのオペレーションを退避させるのに応答して、前記スケジューラ内の所定の列の情報を前記スケジューラの最下列にシフトさせる信号を生成するように構成されている、請求項１記載のプロセッサ。
【請求項５】
前記プロセッサにより実行されるプログラムを構成する命令からオペレーションのセットを生成する命令デコーダを更に有しており、
この命令デコーダは、前記スケジューラの最上列のエントリーに、オペレーションのセットに関連する情報をロードするべく結合される、請求項１記載のプロセッサ。
【請求項６】
前記グローバル制御ロジックは、前記スケジューラの最上列に最後にロードされた情報が次の列にシフトされたか、あるいはシフトされつつある場合でない限り、前記スケジューラの最上列のオペレーションのセットのロードを禁止する信号を、前記命令デコーダに対して生成するように構成されている、請求項５記載のプロセッサ。
【請求項７】
前記命令デコーダは、実行すべきプログラム内で条件付き分岐命令に遭遇したときに、
前記条件付き分岐命令に従うべく予測された命令アドレスを判定し、
予測された前記命令アドレスからデコーディングを継承し、
実行されたときに予測が正しかったか否かを判定するオペレーションに関連する情報を前記スケジューラの最上列のエントリーにロードするように構成されている、請求項５記載のプロセッサ。
【請求項８】
前記スケジューラは、
前記状態レジスタと、
前記状態レジスタに記憶された値及び前記スケジューラのメモリフィールドに記憶された前記実行結果に基づいて状態フラグビットを生成する状態フラグロジックとをさらに有しており、
この状態フラグロジックは、自身に関連するスケジューラの選択された列の境界に於けるオペレーションのために、前記状態フラッグビットが有効であるか否かを示す有効性ビットを生成するように構成されている、請求項１記載のプロセッサ。
【請求項９】
前記状態フラグロジックは、
特定の実行ステージの完了のために前記状態フラグビットを必要とする第１のオペレーションについて、第１のオペレーションに関連する情報が前記状態フラグロジックに関連する選択された列の境界にシフトダウンされるまで、前記第１のオペレーションが前記実行ステージに入ることを阻止する信号を生成するように構成されている、請求項８記載のプロセッサ。
【請求項１０】
前記グローバル制御ロジックは、第１のオペレーションが、選択された前記列の境界に達した後、この第１のオペレーションのために有効な状態フラグビットが状態ビットを必要とする実行ステージに提供されるまで、前記第１のオペレーションのシフトを禁止する信号を生成するように構成されている、請求項９記載のプロセッサ。
【請求項１１】
前記状態フラグロジックは、
第１の形式のオペレーションが、選択された境界の上側の列にあるときに前記第１の形式のオペレーションを実行するための状態フラグビットを、また第２の形式のオペレーションが前記の選択された境界の下側の列にあるときに前記の第２の形式のオペレーションを実行するための状態フラグビットを、同時に提供し得るように構成されている、請求項９記載のプロセッサ。
【請求項１２】
前記第２の形式のオペレーションは、条件付き分岐判断である、請求項１１記載のプロセッサ。
【請求項１３】
データ及び命令を記憶するメモリサブシステムと、
前記メモリサブシステムに記憶される前記データ及び命令にアクセスするべく動作可能に結合されるプロセッサとを備えた処理システムにおいて、
前記プロセッサは、
複数の実行ユニットと、
前記複数の実行ユニットに結合されるスケジューラと、
前記スケジューラに結合されたオペレーションコミットユニットとを有し、
前記スケジューラは、
各々が自身に関連するオペレーションを記述する情報を記憶するためのメモリフィールドを含むとともに、最上列から最下列に至る一連の列にグループ分けされる複数のエントリーであって、最下列を除く各列のエントリーのメモリフィールドが次の列のエントリーのメモリフィールドに結合されるように構成されたエントリーと、
最下列を除く前記列のそれぞれのために、各列のメモリフィールドに記憶された情報を次の列のメモリフィールドにシフトするか否かを制御するための制御信号を生成するグローバル制御ロジックと、
前記複数のエントリーをスキャンして、実行のための前記実行ユニットに発行するオペレーションを選択するロジックと、
発行されたオペレーションの実行のために前記実行ユニットに情報を提供するロジックと、
前回発行されたオペレーションに関連するエントリーに於ける前回発行されたオペレーションの実行結果を記憶するロジックとを含み、
前記オペレーションコミットユニットは、前記スケジューラ内のエントリーに新たなオペレーションを関連付け得るように、前記スケジューラからオペレーションを退避及び除去するとともに、当該プロセッサにより実行されるプログラムにとって必要なオペレーションに関連付けられたエントリーに前記実行結果が記憶されている場合に、当該実行結果を恒久化するように構成されている、
処理システム。
【請求項１４】
前記プロセッサ及び前記メモリサブシステムは、マザーボードの構成部品である、請求項１３記載の処理システム。
【請求項１５】
前記マザーボードは、前記プロセッサに動作可能に接続された背面バスを更に備えており、
前記処理システムは、前記背面バスを介して前記マザーボードに接続されたカード上に１若しくは複数のデバイスを更に有する、請求項１４記載の処理システム。
【請求項１６】
前記プロセッサに動作可能に結合されたパラレルデバイスインタフェースを更に有する、請求項１３記載の処理システム。
【請求項１７】
前記パラレルインタフェースを介して前記プロセッサに接続されたプリンタを更に有する、請求項１６記載の処理システム。
【請求項１８】
前記プロセッサに動作可能に結合されたシリアルデバイスインタフェースを更に有する、請求項１３記載の処理システム。
【請求項１９】
前記シリアルインタフェースを介して前記プロセッサに接続されたモデムを更に有する、請求項１８記載の処理システム。
【請求項２０】
前記プロセッサに動作可能に結合されたグラフィックアダプタを更に有する、請求項１３記載の処理システム。
【請求項２１】
前記グラフィックアダプタを介して前記プロセッサに接続されたビデオディスプレイを更に有する、請求項２０記載の処理システム。
【請求項２２】
前記プロセッサに動作可能に結合されたローカルエリアネットワークアダプタを更に有する、請求項１３記載の処理システム。
【請求項２３】
前記ネットワークアダプタを介して前記プロセッサに接続されたデバイスのネットワークを更に有する、請求項２２記載の処理システム。
【請求項２４】
前記プロセッサに動作可能に結合されたディスクコントローラを更に有する、請求項１３記載の処理システム。
【請求項２５】
前記ディスクコントローラを介して前記プロセッサに接続されたハードディスクを更に有する、請求項２４記載の処理システム。
【請求項２６】
前記ディスクコントローラを介して前記プロセッサに接続されたフロッピーディスクを更に有する、請求項２４記載の処理システム。
【請求項２７】
スーパースケーラプロセッサおよび前記スーパースケーラプロセッサに結合されたＬＡＮアダプタを含んで構成されるネットワークサーバにおいて、
前記スーパースケーラプロセッサは、
複数の実行ユニットと、
前記複数の実行ユニットに結合されるスケジューラと、
前記スケジューラに結合されたオペレーションコミットユニットと、
を備えており、
前記スケジューラは、
各々が自身に関連するオペレーションを記述する情報を記憶するためのメモリフィールドを含むとともに、最上列から最下列に至る一連の列にグループ分けされる複数のエントリーであって、最下列を除く前記列に含まれるエントリーのメモリフィールドが次の列のエントリーのメモリフィールドに結合されるように構成されたエントリーと、
最下列を除く前記列のそれぞれのために、各列のメモリフィールドに記憶された情報を次の列のメモリフィールドにシフトするか否かを制御するための制御信号を生成するグローバル制御ロジックと、
前記複数のエントリーをスキャンして、実行のための前記実行ユニットに発行するオペレーションを選択するロジックと、
発行されたオペレーションの実行のために前記実行ユニットに情報を提供するロジックと、
前回に発行されたオペレーションに関連するエントリーに於ける前回発行されたオペレーションの実行結果を記憶するロジックとを有し、
前記オペレーションコミットユニットは、前記スケジューラ内のエントリーに新たなオペレーションを関連付け得るように、前記スケジューラからオペレーションを退避及び除去するとともに、当該プロセッサにより実行されるプログラムにとって必要なオペレーションに関連付けられたエントリーに前記実行結果が記憶されている場合に、当該実行結果を恒久化するように構成されている、
ネットワークサーバ。
【請求項２８】
メモリと、
前記メモリと前記スーパースケーラプロセッサとの間に結合されるプロセッサバスと、
ローカルバス及びＩ／Ｏバスと、
前記プロセッサバスを前記ローカルバスに、また前記ローカルバスを前記Ｉ／Ｏバスにそれぞれ結合する第１及び第２のブリッジとを更に備え、
前記ＬＡＮアダプタが前記ローカルバス及び前記Ｉ／Ｏバスのいずれか一方に結合される、請求項２７記載のネットワークサーバ。
【請求項２９】
前記ローカルバス及び前記Ｉ／Ｏバスのいずれか一方に結合されるデータ記憶装置を更に有する、請求項２８記載のネットワークサーバ。
【請求項３０】
前記ローカルバス及び前記Ｉ／Ｏバスのいずれか一方に結合される通信装置を更に有する、請求項２８記載のネットワークサーバ。
【請求項３１】
前記通信装置は、モデム、ファックスモデム又は総合電話装置のいずれか１つにより構成される、請求項３０記載のネットワークサーバ。
【請求項３２】
前記ＬＡＮアダプタは、ベースバンドネットワークＬＡＮアダプタ、ブロードバンドネットワークＬＡＮアダプタ、トークンパッシングネットワークＬＡＮアダプタ、トークンリングネットワークＬＡＮアダプタ、１０ベースＴネットワークＬＡＮアダプタ、又はイーサネットＬＡＮアダプタのいずれかである、請求項２７記載のネットワークサーバ。
【請求項３３】
マルチメディア機能デバイスと、
前記マルチメディア機能デバイス及びマルチメディア信号取得デバイスに結合されており、マルチメディア信号を合成してサンプリングするための信号変換インタフェースを有するマルチメディアアダプタと、
前記マルチメディアアダプタに結合されており、マルチメディアデータを転送するための入力／出力バスと、
前記入力／出力バスに結合され、マルチメディアデータを処理して、前記マルチメディアアダプタとの間でマルチメディアデータの通信を制御するスーパースケーラプロセッサとを備えるマルチメディアコンピュータシステムにおいて、
前記スーパースケーラプロセッサは、
複数の実行ユニットと、
前記実行ユニットに結合されるスケジューラと、
前記スケジューラに結合されたオペレーションコミットユニットとを有し、
前記スケジューラは、
各々が自身に関連するオペレーションを記述する情報を記憶するためのメモリフィールドを含むとともに、最上列から最下列に至る一連の列にグループ分けされる複数のエントリーであって、最下列を除く各列のエントリーのメモリフィールドが次の列のエントリーのメモリフィールドに結合されるように構成されたエントリーと、
最下列を除く前記列のそれぞれのために、各列のメモリフィールドに記憶された情報を次の列のメモリフィールドにシフトするか否かを制御するための制御信号を生成するグローバル制御ロジックと、
前記エントリーをスキャンして、実行のための前記実行ユニットに発行するオペレーションを選択するロジックと、
発行されたオペレーションの実行のために前記実行ユニットに情報を提供するロジックと、
前回発行されたオペレーションに関連するエントリーに於ける前回発行されたオペレーションの実行結果を記憶するロジックとを有しており、
前記オペレーションコミットユニットは、前記スケジューラ内のエントリーに新たなオペレーションを関連付け得るように、前記スケジューラからオペレーションを退避及び除去するとともに、当該プロセッサにより実行されるプログラムにとって必要なオペレーションに関連付けられたエントリーに前記実行結果が記憶されている場合に、当該実行結果を恒久化するように構成されている、
マルチメディアコンピュータシステム。
【請求項３４】
複数の実行ユニットと、前記複数の実行ユニットに接続されており、各々が自身に関連するオペレーションを記述する情報を記憶するとともに、最上列から最下列に至る一連の列にグループ分けされる複数のエントリーを有するスケジューラとを備えた装置により、プログラムからデコードされたオペレーションをアウトオブオーダー実行するための方法であって、
前記最上列が空であるか、または前記最上列のオペレーションのセットが下側の列にシフトしつつある場合に、複数のオペレーションを前記最上列内のエントリーにロードする過程と、
下側の列が空であったり、下側の列にオペレーションがシフトしつつある場合に、各列のオペレーションを下側の列にシフトする過程と、
前記複数の実行ユニットに発行するオペレーションを選択するために、最下列から最上列に向かう方向に前記スケジューラをスキャンする過程と、
前記オペレーションに対応する前記スケジューラのエントリーに於けるオペレーションの実行結果を一時的に記憶する過程と、
前記最下列からレジスタファイルに前記実行結果をコミットする過程と、
前記最下列に現在ある情報に関するすべてのオペレーションの前記実行結果がコミットされているか、あるいは不要な場合に、前記最下列に情報をシフトする過程とを含む方法。
【請求項３５】
前記シフトする過程と前記スキャンする過程がクロックサイクル毎に行われる、請求項３４記載の方法。
【請求項３６】
アボートオペレーションに先行するあらゆるオペレーションをコミットする過程と、
前記アボートオペレーションが前記スケジューラの最下列に達したときに、前記スケジューラ内のすべてのオペレーションをアボートして、当該オペレーションのコミットが不要であることを示すように設定する過程とを更に含む、請求項３４記載の方法。
【請求項３７】
前記実行ユニットのうち第１の実行ユニットに発行された第１のオペレーションに先行するあらゆるオペレーションをコミットする過程と、
前記第１のオペレーションが最下列にある間に、前記第１の実行ユニットが前記第１のオペレーションの実行を完了したか否かを判定する過程と、
前記第１のオペレーションが前記最下列にある間に前記第１の実行ユニットが前記第１のオペレーションの実行を完了しておらず、前記第１の実行ユニットが例外を示す信号を発しているときに、前記スケジューラのすべてのオペレーションをアボートして、当該オペレーションのコミットが不要であることを示すように設定する過程とをさらに含む、請求項３４記載の方法。
【請求項３８】
複数の実行ユニットと、前記複数の実行ユニットに接続されており、各々が自身に関連するオペレーションを記述する情報を記憶するとともに、最上列から最下列に至る一連の列にグループ分けされる複数のエントリーを有するスケジューラとを備えた装置により、プログラムからデコードされたオペレーションをアウトオブオーダー実行するための方法であって、
前記最上列が空であるか、またはその下側の列にシフトしつつある場合に、オペレーションのセットを前記最上列内のエントリーにロードする過程と、
下側の列が空であったり、下側の列のオペレーションがシフトしつつある場合に、各列のオペレーションを当該下側の列にシフトする過程と、
前記複数の実行ユニットに発行するオペレーションを選択するために、最下列から最上列に向かう方向に前記スケジューラをスキャンする過程と、
前記オペレーションに対応する前記スケジューラのエントリーに於けるオペレーションの実行結果を一時的に記憶する過程と、
前記最下列からレジスタファイルに前記実行結果をコミットする過程と、
前記最下列に現在ある情報に関するすべてのオペレーションの前記実行結果がコミットされている、あるいは不要な場合に、前記最下列に情報をシフトする過程と、
前記最上列と前記最下列との間に条件付き分岐オペレーションがあるときに、この条件付き分岐オペレーションを判定して、前記命令デコーダが前記条件付き分岐オペレーションの予測を誤ったか否かを判定する過程と、
前記条件付き分岐オペレーションの予測を誤ったと判定した場合に、前記命令デコーダを再起動する過程と、
前記条件付き分岐が前記最下列に到達するまで、前記スケジューラへのオペレーションのロードを禁止する過程と、
前記条件付き分岐に先行するすべてのオペレーションをコミットする過程と、
前記最下列に前記条件付き分岐があるときに、前記スケジューラ内のすべてのオペレーションをアボートして、当該オペレーションのコミットが不要であることを示すように設定する過程とを含む方法。
【発明の詳細な説明】
技術分野
本発明はデジタルプロセッサシステムに関し、特にプロセッサの性能を最大化するようなオペレーションの実行順序を制御するための方法および回路に関する。
背景技術の説明
通常のコンピュータプログラムは、コンパイルまたはアセンブルされたときに、プロセッサが実行する一連の機械語命令またはオペレーションを発生する命令のリストからなる。オペレーションは、コンピュータプログラムのロジックにより定められたプログラムの順序を有し、一般にプログラムの順序を以て逐次的に実行されるものとされている。スケーラープロセッサは、プログラムの順序に基づいてオペレーションを実行し、その順序は、１つのオペレーションを、次のオペレーションを行う前に実行するように定められている。スーパースケーラープロセッサは、複数のオペレーションを並行に実行し完了するように並列に作動する複数の実行ユニットを備えている。スーパースケーラープロセッサは、１クロックサイクルについて複数のオペレーションを実行できるのに対し、スケーラープロセッサは理想的には１クロックあたり１つのオペレーションを完了できるのみであることから、クロックスピードが同一であればスーパースケーラープロセッサはスケーラープロセッサよりも高速に作動することができる。
スーパースケーラープロセッサは、一般にオペレーションの実行をスケジュールする働きを有し、従ってオペレーション動作は並列に実行され、一般のプログラムの順序に従わないでオペレーションを完了することができる。コンピュータプログラムのロジックにおいては、１つのオペレーションが他のオペレーションの結果に依存する場合があり、プログラムにおける第１のオペレーションが第２のオペレーションよりも先に実行されることを要することから、out-of-order実行を行うことには、或る困難が伴う。例えば、あるオペレーションが実行されるべきか否かは分岐命令の結果に依存する場合がある。プロセッサは、分岐オペレーションを評価する前に分岐オペレーションの結果を予測し、その予測に基づいてオペレーションを実行する場合がしばしばある。分岐予測が不正確であって誤ったオペレーションが行われる場合があることから、このような実行は投機的とならざるを得ない。更に、多くのコンピュータは、オペレーションによってエラー、割り込みまたはトラップを発生する前もしくは後におけるシステムの状態を知ることを要するが、オペレーションがout-of-orderで行われる場合には、プログラムにおけるエラーに続いて行われるべきオペレーションが、エラーが発生する以前に実行される場合があり得る。このように、プロセッサは実行されるべきでなかったオペレーションをＵＮＤＯしなければならず、エラーの後のシステムの状態を再構成できなければならない。
スーパースケーラー構造は、スケジュール動作のためのやや矛盾したいくつもの目的を達成する試みである。１つの目的は、プログラムの実行のために実際に必要となるオペレーションを最大限に並列実行するように効率的なスケジューリングを行うことである。もう１つの目的は、スケジュール用の回路をあまり複雑にしないことである。なぜなら、構造を複雑化すると、エラーに対する耐性の高い設計を行うことが困難となり、回路のサイズおよびコストを増大させるからである。さらにもう１つの目的は、プロセッサが高いクロック速度をもって作動し得るように迅速なスケジューリングを行うことである。このような目的を達成し得るスケジュール用の回路が望まれている。
発明の開示
本発明によれば、out-of-order実行エンジンは、並列動作可能な一連の実行ユニットと、実行ユニットに対してオペレーション命令を発するスケジューラとを有する。スケジューラは、実行されるべきオペレーションに対応するエントリーを有している。各エントリーは、必要に応じて正しい実行ユニットに差し向けるように、関連するオペレーション及びロジックの実行のために必要な情報を記憶するための記憶領域を有する。オペレーション命令は、第１にその形式、およびその形式のオペレーションのための実行ユニットの利用可能性に基づき送り出され、第２に逐次的なプログラムの順序に基づいて送り出される。従って、異なる形式のオペレーションが、通常のプログラムの順序に従わないで実行される場合がしばしば生じる。ある形式のオペレーションのために利用可能な実行ユニットが複数設けられている場合があり、１つのオペレーション動作を、別の実行ユニットが同一形式の次のオペレーションを完了する間に実行パイプライン内に保持されることがあることから、同一形式の複数のオペレーションもout-of-order実行することができる。さらに、実行パイプラインを塞ぐようなオペレーションを、パイプラインの初期の段階で破棄することができることから、単一の実行ユニットのための複数のオペレーションもプログラムの順序に従うことなく実行することができる。
スケジューラにおけるエントリーはオペレーションの形式によって特殊化されず、１つの実行ユニットが停止状態にあるときに、ブロックされるような特別のステーションあるいはキューを有さない。アボート可能なオペレーションの実行の後、オペレーションの結果は関連するスケジューラのエントリーおよびまたは記憶キューに保持される。スケジューラは、スケジューラに結合されたオペレーションコミットユニットが、問題がなく、関連するオペレーションに変更する分岐の予測に誤りがなかったことを判定するまで結果を保持する。オペレーションコミットユニットが、最も古く実行されたオペレーションの結果が、プログラムの逐次的な実行によって発生すると判定した場合、その結果は、レジスタファイル、ステイタスレジスタまたはメモリに書き込むことにより永久化され、そのオペレーションはスケジューラから退避され、除去される。オペレーションコミットユニットは、結果がプログラムの逐次的な実行によって発生しないと判定した場合には、オペレーション動作は永久的な変化を伴うことなく退避される。
スケジュールの機能に加えて、スケジューラは非明示的なレジスタのリネームを伴うリオーダーバッファの機能も含んでいる。スケジューラにおけるエントリーの物理的な位置がプログラムの順序を表し、各エントリーに記憶された結果の値がプログラム順序における対応する点のレジスタおよび状態値を提供することから、オペレーション結果のプログラム順序を示すタグは必要でない。これにより、様々な実行ステーション間におけるタグ情報の保持および移動に関わる複雑さを解消することができる。スケジューラ内の適切な物理的方向付けによって方向付けられたスキャンチェーンが、次のオペレーションのための所望のレジスタオペランドに対して影響を与える先行するオペレーションの位置を特定することから、オペレーション実行中の実際のレジスタリネーミングは必要とされない。
本発明のある実施例においては、スケジューラは、実行予定のオペレーションに関連した複数列のエントリーを有する。各エントリーは、単一のオペレーションに対応し、各エントリーの列は、例えば４つのオペレーションなど複数のオペレーションに対応する。スケジューラを複数の列に分類することは、スケジューラの構造を単純化するが、スケジュールおよびオペレーションの実行は、オペレーションを複数の列にグループ分けするのとは独立して行われる。スケジューラは、新たなオペレーションのグループに関連する情報がスケジューラの最上列にロードされ、より古いオペレーションが退避されるに伴い、スケジューラの最下列に向けてグループとしてシフトダウンされる点においてある種のシフトレジスタとして機能する。従って、スケジューラにおけるオペレーションの位置はその古さを表す。プログラム順序で後の方に位置する新たなオペレーションはスケジューラの上の方にあり、プログラム順序の初期に現れる古いオペレーションはスケジューラの下の方に位置する。
多くのオペレーションはスケジューラの上列にロードされたときには直ちに実行可能な状態にあるが、スケジューラの任意の点から実行ユニットに送り込まれることができる。オペレーションのエントリーにおける状態フィールドは、オペレーションが発行されたか、実行パイプラインの特定の位置にあるか、あるいは完了したかを示す。オペレーションの状態は、スケジューラにおけるオペレーションの位置からは独立しているが、オペレーションが長い時間スケジューラにあれば、それだけオペレーションが発行され完了する可能性が高まる。ある列におけるオペレーションは同時に退避され、従って複数のオペレーションを各クロックサイクル中に完了することができる。従って、各クロックサイクルについて、複数のオペレーションをスケジューラにロードし、複数のオペレーションをスケジューラから退避させることができる。
条件付き分岐や状態フラッグに依存するレジスタオペレーション等のようなオペレーションは、オペレーションがスケジューラの特定の列に達したときに実行される。これは、他の列におけるこれらのオペレーションの実行をサポートするための一般的なハードウェアを不要にし、スケジューラにおけるハードウェアを単純化し、削減し、高速化する。実行するべき必要なオペランドが利用可能でありそうな場所がどこであるかに応じて、そのようなオペレーションを実行するための列を選択することによりスケジュールに伴う遅れを最小化することができる。例えば、状態フラッグに依存するオペレーションは、状態フラッグに依存するオペレーションを完了するために必要な状態フラッグの値の変更を古いオペレーションがすでに完了していそうな、スケジューラにおける低い位置において取り扱われる。スケジューラにおける高い位置で状態フラッグに依存するオペレーションを実行可能にするような回路を追加しても、実行速度をそれほど改善することができない。なぜなら、状態フラッグに依存するオペレーションがスケジューラの上方の列にあるときには、必要な状態フラッグが利用可能でない可能性が高いからである。
スケジューラは、実行ユニットおよびオペレーションコミットユニットに強く結合されており、複数実行パイプラインにおけるオペレーションに関する情報を維持する。スケジューラは、オペレーションを発行し、必要なときに、実行ユニットに向けてオペレーション情報を提供し、結果がコミットしたりあるいはアボートされるまで、実行されたオペレーション結果を保持し、他のオペレーションを実行するために必要な結果を送り出す。特に、各スケジューラのエントリーは、関連するオペレーションからのレジスタおよび情報結果を保持する。このようにスケジューラは非明示的にレジスタリネーミングを実行し、格別明示的なリネーミングすなわち論理的レジスタの物理レジスタへのマッピングを伴わない。従って、スケジューラは、オペレーションの実行のスケジュールを行う単一の統一的な構造を提供し、実行中に必要となるオペランド値を提供し、非明示的なレジスタのリネーミングを伴うリオーダーバッファとして機能する。
【図面の簡単な説明】
図１は、本発明の実施例に基づくプロセッサを含むコンピュータシステムのブロック図である。
図２は、本発明の実施例に基づくプロセッサを示す。
図３は、本発明の実施例に基づくout-of-orderエンジンにより実行されるＲＩＳＣ命令のフォーマットの例を示す。
図４Ａ〜４Ｄは、本発明の実施例に基づくＲＩＳＣオペレーションの４つの形式のパイプラインを示す。
図５は、本発明の実施例に基づくスケジューラを示す。
図６は、本発明の実施例に基づくスケジューラリザバーの一部を示す回路図である。
図７は、図５のスケジューラに記憶されたオペレーションおよびＯｐクワッドのためのフィールドのフォーマットの例を示す。
図８Ａおよび８Ｂは、高速選択のためのルックアヘッドを利用したスキャンチェーンを示す。
図９Ａ〜９Ｃは、第２の実行ユニットのためのオペレーションを高速に選択するルックアヘッドを用いたスキャンチェーンを示す。
図１０は、図５のスケジューラと実行ユニットとの間のインターフェィスのブロック図である。
図１１Ａ〜１１Ｃは、本発明の実施例としての処理システムのブロック図である。
同様のまたは類似の部分を示すために異なる図にわたって同一の符号を付した。
好適実施例の説明
本発明を次のようなアウトラインに従って詳しく説明する。
Ｉ．概要
II．スケジューラ
II．Ａ  スケジューラローディング
IIＡ．１  スタティックエントリーフィールド
II．Ａ．２  ダイナミックエントリフィルード
ii．Ａ．３  Ｏｐクワッドフィールド
II．Ｂ  ロード／シフト制御
III．オペレーション実行
III．A  発行ステージ
III．A．１  発行選択フェーズ
III．A．１．a  発行選択スキャンチェーン
III．A．１．ｂ  RUY２のための発行選択スキャンチェーン
III．A．２  オペランド情報ブロードキャストフェイズ
III．B．  オペランドフォワードステージ
III.B．１  オペランド選択フェーズ
III．Ｂ．２  オペランド転送フェーズ
III．Ｂ．３  ディスプレースメントフォワーディング
ＩＩＩ．Ｂ．４  イミーディアット値フォワーディング
ＩＩＩ．Ｃ  データオペランドのフェッチング
ＩＩＩ．Ｄ  レジスタオペレーションバンピング
ＩＩＩ．Ｅ  ロード／ストアオーダリング
ＩＩＩ．Ｆ  アボートハンドリング
ＩＶ．Ａ  外部ロジックによって用いられるスケジューラ情報
ＩＶ．Ｂ  グローバル制御ファンクション
Ｖ．状態フラグ
Ｖ．Ａ．状態フラグフェッチ
Ｖ．Ｂ  ｃｃ−Ｄｅｐ  ＲｅｇＯｐｓへの状態フォワーディング
Ｖ．分岐予測分解
ＶＩ．非アボート可能なオペレーションの同期化
ＶＩＩ．自己変更コードのハンドリング
ＶＩＩＩ．オペレーションコミットメントユニット
ＶＩＩＩ．Ａ  コミットメント
ＶＩＩＩ．Ａ．１  レジスタコミットメント
ＶＩＩＩ．Ａ．２  状態フラグコミットメント
ＶＩＩＩ．Ａ．３  ．メモリ書き込みコミットメント
ＶＩＩＩ．Ｂ  Ｏｐクワッドリタイア
ＶＩＩＩ．Ｃ．１  ロードオペレーションフォルトハンドリング
ＶＩＩＩ．Ｃ．２  フォルト及びＬＤＤＨＡ／ＬＤＡＨＡオペレーションハンドリング
ＶＩＩＩ．Ｃ．３  ターゲットリミットバイオレーションハンドリング
ＶＩＩＩ．Ｃ．４  誤って予測された分岐ハンドリング
ＶＩＩＩ．Ｄ  アボートサイクルの生成
ＩＸ．  プロセシングシステム
Ｘ．  結論
アペンディクスＡ：ＲＩＳＣ８６（登録商標）文法
アペンディクスＢ：疑似ＲＴＬ記述
Ｉ．概要
本発明の実施例に基づくプロセッサは、パソコンを含む様々な用途に応用可能である。図１は、本発明の実施例に基づくプロセッサ２００を含むコンピュータマザーボードのブロック図である。プロセッサ２００は、複雑な命令セットを実行することができ、０．３５μｍ設計に基づく５金属層ＣＭＯＳ技術などの公知の集積回路プロセスによって製造し得るモノリシック集積回路からなる。プロセッサ２００に接続されたチップセットは、外部レベル２キャッシュ１２５、メインメモリ１２２に対するインターフェイスを提供するメモリコントローラ１２１、ＰＣＩバス１５５やＩＳＡバス１６５などのローカルバスに対するインターフェイスを提供するバスコントローラ１５０および１６０を備えている。
図２は、プロセッサ２００の実施例を示すブロック図である。プロセッサ２００は、メインメモリ１２２およびローカルバス１５１および１６１上の種々のデバイスを含むコンピュータシステムのためのアドレス空間に対するアクセスを提供するシステムインターフェイス２０５を備えている。本実施例においては、システムインターフェイス２０５は変更された、排他的な、共有された、および無効（ＭＥＳＩ）状態およびコンフィグラブルバススケーリングをサポートするようなマルチプロセッサキャッシュコヒーレンシーを備えた６４ビットシステムバスを備えている。
集積化されたレベル２キャッシュコントロールロジック２１０は、レベル２キャッシュ１２５を構成する外部ＳＲＡＭに対してプライベートバスに対するインターフェイスを提供する。システムインターフェイス２１０とは別にレベル２キャッシュインターフェイスを提供することにより、レベル２キャッシュのスピードをシステムバス／チップセットから分離させ、より高速のキャッシュを可能にし、システムバスおよびキャッシュバスの利用率を低下させ、各バスに対する帯域幅を増大させる。レベル２キャッシュコントローラロジック２１０はさらに、マルチプルクロックスケーリングおよび一般的に市販されているバーストパイプラインシンクロナスＳＲＡＭにおける２ＭＢものデータおよびタグ記憶のためのコンフィグラブルキャッシュサイズに対応している。レベル２キャッシュは、ライトバックポリシーおよび３２バイトラインサイズを用いる。
図１に示された構造とは異なる別の構造として、プロセッサ２００はシステムおよびキャッシュアクセスのための単一のバスを有するものとすることができる。このバスは、例えばベンティウムなどのプロセッサのためのチップセットに対してピン対ピンの適合性を有するものであってよい。
レベル１命令キャッシュ２３０およびレベル１データキャッシュ２２０はプロセッサ２００の内部に設けられたもので、レベル１キャッシュコントロールロジック２１５を介してレベル２キャッシュおよびシステムバスに接続されている。本実施例においては、命令キャッシュ２３０は１６ＫＢの命令および追加のプリデコード情報のためのヨークを含む双方向セット関連キャッシュをなしている。より高速のオペレーションを可能にし、アクセスコンフリクトを回避するために、データキャッシュ２２０は１サイクルあたり１つのリードおよび１つのライトを可能にするようなデュアルポートメモリのパイプラインバンクを用いる。
メインメモリ１２２からの命令は、命令キャッシュ２３０にロードされる。本実施例においては、メインメモリ１２２における命令が、ＰＣ業界規格ｘ８６命令セットなどの複雑な命令セットからのＣＩＳＣ命令からなる。ＣＩＳＣ命令は、マクロ命令と呼ばれる場合がある。１サイクルに１６バイトまでのＣＩＳＣ命令がフェッチされる。命令キャッシュ２３０をロードする間に、マクロ命令境界の高速識別のために命令バイトがプリデコードされる。プリデコードは、命令バイトが命令における最初のバイトと仮定し、次の命令の開始のバイトに対するオフセットを示すために各バイトにコードビットを付加する。
命令デコーダ２４０は無条件分岐命令を実行し、条件付き分岐命令の分岐予測を行い、命令キャッシュ２３０からフェッチされたＣＩＳＣ命令を実行エンジン２５０のためのオペレーションに変換する。実行エンジン２５０は、スーパースケーラー、out-of-order、ＲＩＳＣ構造を実現する。命令キャッシュ２３０からの単一のＣＩＳＣ命令は、実行エンジン２５０のために０（無条件分岐命令）、１または複数のオペレーションにデコードされる。サイクル毎に複数のＣＩＳＣ命令をデコードし、実行エンジン２５０により実行されるオペレーションを示すＲＩＳＣ命令のセットを生成する。命令デコーダ２４０は、最も一般的なＣＩＳＣ命令のためのハードウェアデコーダ（MacDec）２４２と、一般的でなく、より複雑なＣＩＳＣ命令のためのベクトルデコーダ２４４を含む。ベクトルデコーダ２４４は、ここでEmcodeと呼ばれる場合のあるＲＩＳＣ命令シーケンスを含むEmcodeＲＯＭ２４６と呼ばれるＲＯＭ２４６を有する。ベクトルデコーダ２４４は、レコードされているＣＩＳＣ命令に基づきEmcodeＲＯＭ２４６におけるアドレスを選び、必要に応じてEmcodeＲＯＭ２４６から読み出されたＲＩＳＣ命令の一部を置換もしくは変更し、ＣＩＳＣ命令を対応するＲＩＳＣ命令に変換する。
図３およびアペンディックスＡは、ｘ８６ＣＩＳＣ命令の実行のために最適化されＲＩＳＣ８６命令セットと呼ばれるＲＩＳＣ命令のフォーマットの例を示す。各ＲＩＳＣ８６命令は、レジスタオペレーション（RegOp）ロードストアオペレーション（LdStOp）または特別オペレーション（SpecOp）からなる。RegOpは、RegOpが条件コードccを変更することを示すために、すなわち条件コードに依存することを示すために、ccRegOpと呼ばれることがある。LdStOpはさらにロードオペレーション（LdOp）およびストアオペレーション（SpecOp）に分類される。ロードイミジアット値オペレーションLIMMOpは、他のLdOpとは異なるフォーマットを有するLdOpの一形式であって、次のLdStOpまたはRegOpのための大きなイミジアット値を提供する。SpecOpは、異なるフォーマットを有する分岐オペレーションBrOpsおよび浮動小数点オペレーション（SpecOp）を含む。図３およびアペンディックスＡは、SpecOpの一例としてBrOpsのみを示している。条件付き分岐オペレーション（ＢＲＣＯＮＤ）は、条件コード（図３におけるフィールド（cc））に依存するBrOpsの一形式である。
本実施例においては、命令デコーダ２４０はｘ８６マクロ命令をＲＩＳＣ８６命令またはオペレーションに変換する。ＭＰ２４０には一般的なマクロ命令を一連の短いＲＩＳＣ８６命令に変換する。例えば、ｘ８６マクロ命令、INCreg、PUSHreg及びJcctgtは、RegOp、StOp及びBRCONDに変換される。ADDreg,memマクロ命令は、LdOp及びRegOpの順に変換され、ADDmem,regマクロ命令はLdOp、RigOp及びStOpの順に変換され、LEAVEマクロ命令は、RegOp、LdOp及びRegOpの順にに変換される。
ある実施例においては、命令デコーダ２４０は、１サイクルあたり２つまでのｘ８６マクロ命令をデコードし、１サイクル毎に実行エンジン２５０にロードし得る４つのＲＩＳＣ８６命令のセットを生成する。４つの命令のセットを完成するのに必要であればNo-op命令が用いられる。それぞれ２つ以下のオペレーションを実行する命令として２つの連続する命令が特定された場合には、１サイクル毎に２つのオペレーションがデコードされる。別の実施例においては、３つまたはそれ以上のマクロ命令を１サイクル毎にデコードして４つまたはそれ以上のオペレーションのセットを生成する。一般的でないマクロ命令をデコードしたり、ＲＩＳＣ８６オペレーションの長い列をデコードするためにベクトルデコーダ２４４は用いられる。このような列は４つのオペレーションよりも長いものであってよく、実行エンジン２５０にロードされるために１よりも多いクロックサイクルを必要とする場合がある。
無条件分岐マクロ命令については、命令デコーダ２４０は、デコードのためにフェッチされた次のマクロ命令を決定し、何らオペレーションを発生しない。条件付き分岐マクロ命令については、デコーダ２４０は、条件付き分岐命令に続くプログラムカウンタを予測し、予測が正しいか否かを判定するために後に評価される（ＢＲＣＯＮＤ）を発生する分岐予測ロジック２４８を有する。条件付き分岐（ＢＲＣＯＮＤ）はまた、デコードされているマクロ命令が、条件付き分岐でない場合にEmcodeＲＯＭ２４６からのＲＩＳＣ命令の列においても発生する。EmcodeＲＯＭ２４６は、デコードされたマクロ命令のためのＲＩＳＣ命令列を発生するときに、ベクトルデコーダ２４４が用いる、このようなＢＲＣＯＮＤそれぞれについて行う予測を含む。Emcode２４６からのＢＲＣＯＮＤのための予測は、条件付き分岐マクロ命令から直接生成されたＢＲＣＯＮＤと同様に評価される。
実行エンジン２５０は、一般的に並列オペレーション可能な７つの実行ユニット２５１〜２５７と、実行のためのオペレーションを発行するスケジューラ２８０と、オペレーション結果をコミットするためにスケジューラ２８０に結合されたオペレーションコミットユニット（ＯＣＵ）２６０とを有する。ロードユニット２５１及びストアユニット２５２はそれぞれLdOpおよびSpecOpを実行する。ストアキュー２７０はストアユニット２５２によって、SpecOpの投機実行からのデータを一時的に記憶する。ストアキュー２７０からのデータは、SpecOpの結果が、以下に説明するようにコミットしたときに、データキャッシュ２２０に書き込まれる。ここではＲＵＸおよびＲＵＹと呼ばれるレジスタユニット２５３および２５４は、名目上レジスタファイル２９０をアクセスするRegOpを実行する。浮動小数点ユニット２５５およびマルチメディアユニット２５６は、それぞれ、浮動小数点オペレーションFpOpsおよびマルチメディアアプリケーションのオペレーションを行うためのオプションとして設けることのできるユニットである。実施例においては、浮動小数点ユニット２５５およびマルチメディアユニット２５６が省略されている。
スケジューラ２８０は実行ユニット２５１〜２５７に対してオペレーションを発行し、実行中にそれぞれの実行ユニットにより必要とされる情報を送り出し、オペレーションが退避する際にオペレーション情報を削除する。スケジューラ２８０は、それぞれオペレーションに関連する記憶およびロジックを含む複数のエントリーに区画されている。エントリーのストア領域における情報は、実行されるべき、実行中のあるいはすでに実行されたオペレーションを記述するものからなる。実施例においては、４つのエントリーのセットがグループに分離され、これらのエントリーは物理的には列をなしていないが、ここでは列をなすものと見なされる。１列の４つのオペレーションに関連する情報は、Ｏｐクワッドと呼ばれる。列は、個々のオペレーションに関連する情報およびロジックに加えて、グループとしてのＯｐクワッドに関連するストアフィールドおよびロジックを含む。
スケジューラ２８０は多くの意味でシフトレジスタのような働きを行う。実施例においては、スケジューラ２８０は６列の深さを有する。デコーダ２４０はクロックサイクル毎にスケジューラ２８０の最上列に１つの新たなＯｐクワッドをロードすることができる。Ｏｐクワッドは、上列から下の列に向けてシフトダウンし、最も下の列に達した後に退避される。スケジューラ２８０におけるＯｐクワッドの位置は、Ｏｐクワッドについてのプログラムの順序における年齢あるいは位置を示すが、多くのオペレーションについては、スケジューラ２８０における位置は実行の段階とは無関係である。
図４Ａ〜４Ｄは、RegOp、LdOp、SpecOpおよびBrOpsに関連するマルチステージパイプラインを示す。パイプラインにおける各ステージは、初期の段階のオペレーションが進行するのを防ぐためにオペレーションがステージの１つにおいて停止していない限り、１プロセッサクロックサイクルを必要とする。２つの予備ステージ３１０および４２０は、全ての実行パイプラインに共通するものである。ステージ４１０において、１６バイトまでのＣＩＳＣ命令が命令キャッシュ２３０に向けてフェッチされ、命令境界を特定し、それに続くデコードタイムを短縮するためにプリデコードされる。ステージ４２０において、命令デコーダ２４０は、命令キャッシュ２３０からの３つまでのＣＩＳＣ命令をデコードし、Ｏｐクワッドを生成し、それをスケジューラ２８０の上の列にロードする。
スケジューラ２８０は、BrOps以外のオペレーションに関連するオペランドフォワードステージ４４０および発行ステージ４３０を制御する。発行ステージにおいて、スケジューラ２８０はそのエントリーをスキャンし、対応する実行ユニット２５１〜２５６に３つまでのオペレーションを発行する。スケジューラ２８０は、実行がout-of-orderおよび投機的であるように、古いオペレーションの前に新たなオペレーションを発行するように選択することができる。発行選択段階においてはオペランド依存については考慮されない。スケジューラ２８０は、発行選択ステージ４３０において先に発行されたオペレーションのためにオペランドフォワーディングステージ４４０において、実行ユニット２５１〜２５６に対してオペランドを送り出す。ステージ４４０において、いくつものクロックサイクルに亘って必要なオペランドが利用可能でない場合には、パイプラインが長時間ブロックされるのを回避するために、レジスタユニット２５３または２５４に発行されたオペレーションのあるものをパイプラインから破棄することができる。
図４Ａに示されるように、RegOpの実行は、実行ステージ４５０からなる１つのクロックサイクルにおいて完了する。RegOpの実行ステージ４５０は、実行されているRegOpの形式に基づき、RegOpのソースオペランドを、ＡＬＵがレジスタユニット２５３または２５４にて処理するようなＡＬＵフェイズ４５１と、RegOpに対応するエントリーにレジスタユニット２５３または２５４からの結果および状態値を再び記憶するような結果転送フェイズ４５２とを有する。このエントリーにストアされた結果および状態フラッグは、安全にできる段階に達したときに、レジスタファイル２９０および構造状態フラッグレジスタにおいてコミットされる。オペレーションが完了した後あるいは完了した直後に、オペレーション結果をコミットし、スケジューラ２８０からのオペレーションを含むＯｐクワッドをシフトすることによりオペレーションを退避することができる。オペレーション完了とコミット化との間において、オペレーションからの結果および状態フラッグは、他の命令を実行するためにスケジューラ２８０において利用可能となっている。
図４Ｂおよび４Ｃは、LdOpおよびSpecOpが２つの実行段階４５０および４６０を必要とすることを示している。実行ステージ４５０および４６０は、データアクセスのための仮想アドレスを決定するアドレス計算フェイズ４５３と、データキャッシュをアクセスするためにアドレスをマップするＤＴＬＢマッピングフェイズ４５５と、オペレーションに対応するエントリーにそのオペレーションの結果をストアするために戻すような結果転送フェイズとを有する。オペレーションの完了に伴い、スケジューラ２８０は、投機的であって、安全となった段階において初めてコミットするような結果を受け取る。
図４ＤはBrOpsの取り扱いを示す。命令デコーダ２４０がＣＩＳＣ分岐命令をデコードし、BrOpsを生成すると、デコーダ２４０は、次にデコードされるべきＣＩＳＣ命令のための新たなプログラムカウンタを決定する。無条件分岐については新たなプログラムカウンタについて何ら不確定性がなく、デコーダ２４０はプログラムカウンタを変更して無条件分岐を完了する。命令デコーダ２４０は、新たなプログラムカウンタ値を計算するために、オフセットおよび古いプログラムカウンタ値を高速で加算するための並列加算器を備えている。命令デコーダ２４０はまた、命令戻し後に命令アドレスを予測するために、サブルーチンコールに引き続き、命令アドレスがプッシュされるべき１６エントリーの戻しアドレススタックを含む。
条件付き分岐については、デコーダ２４０は、条件付き分岐に続いて、プログラムカウンタ値を予測し、スケジューラ２８０にロードされたＯｐクワッドにＢＲＣＯＮＤを挿入する。実施例においては、分岐予測は、当該技術分野においては２レベル分岐予測と呼ばれる分岐相関プロセスからなる。”Configurable Branch Prediction for a Processor Performing Speculative Execution”なる名称の米国特許第５，４５４，１１７号は、使用可能な分岐相関プロセスの例について記載している。分岐相関は、分岐命令の後に実行される命令のアドレスを予測する。命令デコーダ２４０における分岐予測ロジック２４８は、８，１９２のエントリーを有する分岐履歴テーブル（ＢＨＴ）を有し、各ＢＨＴエントリーは、分岐が行われたり行われなかったりする傾向を示す標準的な２つの履歴ビットを含んでいる。エントリーは、プログラムカウンタＰＣからの４つのビットとグローバル分岐履歴の９つのビットとの組合せを用いてインデックスされ、分岐が行われるべきか否かは、分岐のアドレスからばかりでなく、プログラムの実行が分岐に到達するために経た経路からも予測される。これにより、以下に説明するように、スケジューラ２８０をフラッシュしなければならない確率を減少されるような、改善された分岐予測が可能になる。
予測されたまたは変更されたプログラムカウンタが、デコーダ２４２の１６エントリー分岐ターゲットキャッシュで正しく予想されると、次のＣＩＳＣ命令が、ｘ８６命令デコードステージ４２０の終わりまでには、デコードの準備が整っている。そうでない場合には、クロックサイクル４２４は、アドレスを計算し、デコードのための次のＣＩＳＣ命令をフェッチする必要がある。
他の全てのオペレーションと同様に、スケジューラ２８０にロードされた条件付き分岐命令ＢＲＣＯＮＤは、古いオペレーションが退避されるに伴いスケジューラ２８０の底部に向けてシフトされるが、ＢＲＣＯＮＤのためには発行選択スキャンは用いられない。ＢＲＣＯＮＤは、それがスケジューラ２８０の列４に到達したときに、分岐条件評価ステージ４６４に至る。分岐評価ユニット２５７は、各ＢＲＣＯＮＤについて必要とされる条件コードｃｃが有効であることを条件に、１サイクルあたり１つのＢＲＣＯＮＤを評価することができる。分岐評価ユニット２５７は、ＢＲＣＯＮＤに引き続き正しいプログラムカウンタを決定し、ＢＲＣＯＮＤが正しく予測されたか否かを判定する。必要な条件コードは、ＢＲＣＯＮＤが列４に到達したときには有効である蓋然性が高い。なぜなら、列４および５などの古いオペレーションはすでに完了している可能性が高いからである。必要な条件コードが未だ有効ではない場合にはＢＲＣＯＮＤは、Ｏｐクワッドが列４からシフトアウトされるのを妨げることにより停止状態に保持される。ＢＲＣＯＮＤが停止状態であるとき、列４から上のＯｐクワッドは、列０から３の１つまたはふくすうのものが空のすなわち無効なＯｐクワッドでない限りシフトされることがない。列０〜３のそれぞれが有効なＯｐクワッドを含む場合、命令デコーダ２４０は、ＢＲＣＯＮＤが停止状態に保持されている間、スケジューラ２８０に新たなＯｐクワッドをロードすることができない。列４および５のシフトも、列３のシフトが停止状態に保持されている限り、同じく停止状態に保持される。なぜなら、列４または５をシフトすることは、空のＯｐクワッドを生成する必要を生じさせ、実施例は、スケジューラ２８０の最上列にのみ空のＯｐクワッドを生成することができるからである。
分岐が正しく予想された場合には、オペレーションのフェッチ、デコードおよび実行が中断されることなく継続される。分岐が誤って予測された場合、スケジューラ２８０は、ＢＲＣＯＮＤに引き続き、正しい命令アドレスにてデコーダ２４０を再起動し、デコーダ２４０は、誤って予測された分岐より古いオペレーションによって得られた結果をコミットし、スケジューラ２８０から退避させる間、正しい命令をフェッチし、デコードし始める。誤って予測されたＢＲＣＯＮＤが退避しスケジューラ２８０がフラッシュされるまで、新たな命令がスケジューラ２８０にロードされるのが禁止される。誤って予測された分岐が退避したとき、スケジューラ２８０および実行ユニット２５１〜２５７における全てのオペレーションを有効とすることにより実行ユニット２５０をフラッシュする。誤って予測された分岐に先行する全てのオペレーションは、誤って予測された分岐がスケジューラ２８０の最下列からシフトアウトされる前に完了し退避されているはずであり、誤って予測された分岐が退避される前には新たな命令がスケジューラ２８０にロードされないことから、全てのオペレーションを無効化することができる。全てのオペレーションを無効化することは、保持されるべきオペレーションを特定する必要がないことから、プロセスを単純化させる。通常、誤って予測された分岐が最下列にシフトされ、デコーダ２４０がフェッチし、最初の新たな命令を利用可能にするのとほぼ同等の時間である２クロックサイクルの後に退避されることから、新たな命令がロードされるのを遅らせることは性能に対してはほとんど影響を与えない。
実行エンジン２５０は、アボート可能およびアボート不可能オペレーションを実行する。アボート不可能オペレーションは、投機的に実行することができず、結果を安全にコミットし得るときにのみ実行される。アボート可能なオペレーションは投機的に実行される。アボート可能なオペレーションがこのパイプラインの最終ステージに到達し完了した後に、この実行から得られた結果は、オペレーションコミットユニット２６０が結果をコミットするのは安全であると判定するときまで、全てスケジューラ２８０にストアされる。各サイクル毎に、４つまでのオペレーションからなるものである１つのＯｐクワッドをコミットし、スケジューラ２８０から退避させることができる。
II．スケジューラ
図５は、スケジューラ２８０が２４までのオペレーションに関連付けられた２４のエントリーを有する実施例を示している。各エントリーは、スケジューリングリザバ５４０内の記憶要素（名目上フリップフロップ）およびエントリに対応付けられたロジック５３０、５３２、５３４、５３６および５３８の部分を含む。ストア要素は、実行待ち、実行中あるいは実行を完了したオペレーション（Op）に関する情報をストアする。オペレーションデコーダ５１０は、命令デコーダ２４０から４つのＲＩＳＣ８６命令を受け取り、スケジューラリザバ５４０の最上列における新たなＯｐクワッドをロードし初期化する。リザバ５４０におけるフィールドが図７に示されているが、図３に示された関連するＲＩＳＣ８６の命令と同一ではないが、それに関連付けられている。フィールドのあるものは、関連するオペレーションの実行の間に同一の値を保持し、ここでは静的なフィールドと呼ばれる。他のフィールドは、オペレーションが実行を完了したときなどにロードされ後に変更され、動的フィールドと呼ばれる。
スケジュール用リザバ５４０におけるストア要素は、６列の深さを有するシフトレジスタと同様のものと見ることができる。各列は、それぞれＲＩＳＣ８６命令に関連付けられた４つのエントリーを有する。各クロックサイクル毎に、ある列内に停止状態に保持されていないＯｐクワッドは、次の列から空であったり、同様に下側にシフトされつつあるＯｐクワッドを含む場合には、次の列に向けてシフトダウンされる。最下列（列５）のＯｐクワッドは、最下列に関連する全てのオペレーションがコミットした場合にスケジューラ２８０からシフトアウトされる。
図６はスケジュール用リザバ５４０の一部の実施例を示す。図６に示されたスケジュール用リザバ５４０の部分は、スケジューラ２８０の列３における動的フィールドのためのエッジトリガーフリップフロップ６２３からなる記憶要素と、同一の列における静的フィールドのためのエッジトリガーフリップフロップ６４３からなる記憶要素とを有する。列３は、図６に示され以下に説明されるように、動的および静的フィールドにおいて各ビットのための同様の記憶要素を有する。スケジュール用リザバ５４０の他の列は、列３と同様または同一であって、列３に直列接続されている。
図６において、フリップフロップ６６２、６４３および６４４は、列２、３および４のそれぞれにおける同一の静的フィールドのビットを記憶し、Ｏｐクワッドが列２から列４にシフトする際に、Ｏｐクワッドに関連するビット位置が、フリップフロップ６４２からフリップフロップ６４４にシフトされる。グローバル制御ロジック５２０は、各列毎に（i=1-5）１つの信号LdEntry4［i］を生成し、これらの信号は、対応する列へのシフシトが行われるのを制御する。列は、クロック信号ＣＬＫの立ち上がりエッジによりオーバーライトされる。例えば、信号LdEntry4、フリップフロップ６４３をイネーブルまたはディスエーブルし、信号LdEntry4はフリップフロップ６４４をイネーブルまたはディスエーブルする。従って、Ｏｐクワッドは列４に停止状態に保持された場合、信号LdEntry4は不要とされ、従ってフリップフロップ６４４は１つの値を保持する。信号LdEntry4［i］が相互に独立していることにより、停止状態に保持されたＯｐクワッドの上方に位置するものであってよい空のＯｐクワッドエントリーが埋められるのを可能にする。例えば、Ｏｐクワッドが列４に停止状態に保持された場合、クロック信号ＣＬＫの立ち上がりエッジにより、値OpField2が、列２から列３にシフトされるように信号LdEntry3が必要とされる。例えば、分岐ターゲットキャッシュミスによって命令デコーダ２４０がサイクル毎にＯｐクワッドを提供できないような場合に空の列が発生する。アペンディクスＢにおける表Ｂ．１は、静的フィールドを実現するために回路の動作を説明している。
ダイナミックフィールドは、古いデータをシフトする間に、外側スケジュール用リザバ５４０からの新たなデータが動的フィールドに挿入され、新たなデータは、次の列にシフトをし或いははシフトをしない正しいＯｐクワッドと共に留まらなければならないことから、静的フィールドに比較してより複雑である。信号OpFieldValue2およびOpFieldValue3lは、列２および３における第１および第２のＯｐクワッドに関連する情報を表している。スケジュール用リザバ５４０の外側回路が、第１および第２のＯｐクワッドに関連する情報を変更するように信号NewValue2およびNewValue3を発生する。マルチプレクサ６３２は、新たな情報信号NewOpField2が新たな値NewValue2に変化し、第１のＯｐクワッドを変更するかあるいは古い値OpFieldValue2に留まるかを選択する。マルチプレクサ６３３は、新たな情報信号NeoOpField3が新たな値NewValue3に変化するかあるいは古い値OpFieldValue3に等しいまま留まるかを選択する。
第１のＯｐクワッドに対応する動的フィールド位置が変化するか否かに拘わらず、値NewOpField2は、クロック信号ＣＬＫの立ち上がりエッジにより列２に書き込まれあるいは列３に書き込まれる。第１のＯｐクワッドが列３にシフトするためには、信号LdEntry3が、マルチプレクサ６１３に信号NewOpField3として信号ＮOpField2を選択させるようにする。信号NewOpField3は信号ＣＬＫの立ち上がりエッジにてフリップフロップ６２３に書き込まれる。第１のＯｐクワッドが列３にシフトされるのを防止するために、信号LdEntry3はマルチプレクサ６１３に、フリップフロップ２３に書き込まれる信号NewOpField3を選択させる。信号LdEntry4およびマルチプレクサ６１４は同様に、第２のＯｐクワッドが列３から列４にシフトされるべきか否かを選択する。アペンディクスＢにおける表Ｂ．２は動的フィールドを実現するための回路の動作を説明している。
II．Ａ  スケジューラローディング
命令デコーダ２４０はマクロ命令をデコードし、４つのＲＩＳＣ８６命令のセットを構成し、これらは、スケジューラ２３０の列０すなわち最上列が空であったり、列１に向けてシフトするＯｐクワッドを含むような場合にスケジューラ２８２に転送される。EmcodeＲＯＭ２４６は、Ｏｐクワッドにおける全てのオペレーションがｘ８６命令の実現形態の一部である場合にはＯｐクワッドを含むものであってよい。これは、異なるｘ８６命令がEmcodeＲＯＭ２４６における同一コードにおいて異なるエントリー点を有したり、EmcodeＲＯＭ２４６内のオペレーションが、Ｏｐクワッドの中間部への分岐を引き起こすために発生し得る。デコードされつつあるｘ８６命令のために必要でない命令は無効化されるすなわちNo-opに変換される。命令デコーディングはオペレーションフィールドのための環境変数の可変置換をも含む。可変置換については、エミュレーション環境が、例えば現在のコードセグメントおよびデコード中のｘ８６命令のためのデフォルトアドレスおよびデータサイズ並びにレジスタ番号を含む環境変数を保持する。環境変数は、EmcodeＲＯＭ２４６からのオペレーションにおける場所占め値（placeholdervalue）を置換をする。環境変数置換は、異なる環境変数が、１つのEmcodeセクションを異なるｘ８６命令を実現するように変換させることから、EmcodeＲＯＭ２４６のフレキシビリティを増大させる。命令デコーダ２４０およびまたはオペレーションデコーダ５１０は必要に応じて環境変数置換を実行する。
スケジューラ２８０において、オペレーションデコーダ５１０は命令デコーダ２４０からＯｐクワッドを受け取り、スケジュール用リザバ５４０の最上列のストアフィールドを埋める。命令デコーダ２４０から利用可能なＯｐクワッドが提供されない場合には、オペレーションデコーダ５１０は、最上列のＯｐクワッドがシフトダウンしたときに空のＯｐクワッドを生成する。
図７は、スケジューラリザバ５４０における静的エントリーフィールド５４１、動的エントリーフィールド５４２およびＯｐクワッドフィールド５４９の一例を示す。エントリーフィールド５４１および５４２の初期位置は、対応するＲＩＳＣ８６命令に依存する。オペレーションデコーダ５１０は、他のフィードに基づくＲＩＳＣ８６命令からのフィールドのあるものを変更し、既存のものから新たなフィールドを導入し、物理的に異なるフィールドによってフィールドのあるものを置換し、いくつかのフィールドを変更することなく通過させる。Ｏｐクワッドフィールドは、Ｏｐクワッド全体に対応する情報から生成される。
IIＡ．１  スタティックエントリーフィールド
本実施例に於いては、各エントリーは、次のように定義されるスタティックフィールド５４１を含む。ここで全ての信号は、アクティブで「ハイ」とする。
フィールドタイプ［2:0］は、エントリに対応するオペレーションの形式を特定する。可能な形式としてSpecOp、LdOp及びStOpがあり、StOpはメモリを参照したり誤ってよいアドレスを生成し、RegOpはレジスタユニット２５３によってのみ実行可能であり、RegOpはレジスタユニット２５３又は２５４のいずれかによって実行可能である。
マルチメディアアユニット２５６は、マルチメディアアプリケーションに関連するRegOpの選択された形式のものを実行する。浮動小数点オペレーション（FpOp）は、浮動小数点ユニット２５５によって実行されるSpecOpの１形式である。アペンディクスＢに於ける表Ｂ．３は、フィルードタイプの値を生成するオペレーションデコーダ５１０に於ける回路を記述している。
フィールドLD_Immは、オペレーションが、先行するLIMMOpからのイミーディアット値が必要であるか否かを示す。イミーディアット値は、オペレーションがエントリーのフィールドDestVal内に保持されている大ディスプレースメント対小ディスプレースメント（８ビット）を用いるLdStOpである場合には、大ディスプレースメントとなる。RegOpについては、イミーディアット値は、第２のオペランドSrc2である。アペンディクスＢの表Ｂ．４は、フィールドLD_Immのための値を生成するオペレーションデコーダ５１０に於ける回路を記述している。
フィールドSrc1Reg［4:0］、Src2Reg［4:0］及びSrcStReg［4:0］は、それぞれ第１のソースオペランドSrc1、第２のソースオペランドSrc2及びオペレーションのストアデータオペランドを保持するレジスタを特定するレジスタダムを保持する。アペンディクスＢに於ける表Ｂ．５、Ｂ．６及びＢ．７は、Src1Reg、Src2Reg及びSrcStRegのための値を生成するオペレーションデコーダ５１０における回路を記述している。
フィールドDestReg［4:0］は、オペレーションのデスティネーションレジスタを特定するレジスタナンバーを保持する。アペンディクスＢの表Ｂ．８は、フィールドDestRegのための値を生成するオペレーションデコーダ５１０に於ける回路を記述している。
フィールドSrc1BM［1:0］、Src2BM［1:0］及びSrc12BM［2］は、オペレーションの実行のためにオペランドSrc1及びSrc2のどのバイトが有効であるかを示す。定義から、Src1BM［2］及びSrc2BM［2］、Src12BM［2］に等しい。Src1BM［1:0］及びSrc2BM［1:0］のビット２、１及び０は、それぞれビット［31:16］、［15:8］及び［7:0］を示す。アペンディクスＢの表Ｂ．９は、フィールドSrc1BM［1:0］、Src2BM［1:0］及びSrc12BM［2］のための値を生成するオペレーションデコーダ５１０に於ける回路を記述している。
フィールSrcStReg［2:0］は、StOpの完了のためにデータオペランドのどのバイトが必要であるかを示す。ビットの対応は、Src1BMまたはSrc2BMの場合と同様である。アペンディクスＢの表Ｂ．１０は、フィールドSrcStBMのための値を生成するオペレーションデコーダ５１０に於ける回路を記述している。
フィールド［12:0］は、オペレーションが実行可能であるか否かに応じてオペレーションコミットユニット（ＯＣＵ：operation commit unit）即ち実行ユニットのための追加の情報を保持する。フィールドOpInfoは、オペレーションがRegOp、LdStOp又はSpecOpのいずれであるに応じて３つの可能なフィールド定義を有する。RegOpについては、フィールドOpInfoは、ＲＩＳＣ８６Typeフィールドから６ビット、ＲＩＳＣ８６Extフィールドから４ビット、ＲＩＳＣ８６R1フィールド、及びオペレーションのための有効なデータサイズDataSzを示す２ビットの連結（concatenation）を含む。LdStOpについては、フィールドOpInfoは、ＲＩＳＣ８６Typeフィールドから４ビット、ＲＩＳＣ８６ISFフィールドから２ビット、ＲＩＳＣ８６Segフィールドから４ビット、オペレーションのための有効なデータサイズDataSzを示す２ビット及びアドレス計算（32/16ビット）のための有効なアドレスサイズAddrSzを示す１ビットの連結（concatenation）を含む。SpecOpについては、フィールドOpInfoは、ＲＩＳＣ８６Typeフィールドから４ビット及びＲＩＳＣ８６ccフィールドから５ビットの連結（concatenation）を含む。アペンディクスＢに於ける表Ｂ．１１は、フィールドOpInfoのための値を生成するオペレーションデコーダ５１０における回路を記述している。
II．Ａ．２  ダイナミックエントリフィルード
ダイナミックエントリフィールド５４２は、オペレーションデコーダ５１０によって初期化されるが、オペレーションの実行の間に変化することができる。一般に各エントリは、必要に応じて、ダイナミックフィールドを変更するためのロジックを含んでいる。実施例に於けるエントリの為のダイナミックフィールドは次のように定義される。
フィールドState［3:0］は、図４Ａ〜４Ｄのパイプラインに関するオペレーションの実行状態を示す。（S3、S2，S1及びS0は、State［3:0］のための異なる信号名である。）フィールドStateは、４ビット内に１のフィールドをシフトすることにより５つの可能な状態をエンコードする。値ｂ００００は、未発行状態を示し、ｂ０００１，ｂ００１１及びｂ０１１１は、オペランドフォーワードステージ、実行ステージ１，及び実行ステージ２に於けるオペレーションを示し、ｂ１１１１は、オペレーションが完了したことを示す。オペレーションの多くは、フィールドStateがｂ００００の状態でスケジューラ２８０に入る。フィールドStateは、オペレーションが実行パイプラインに発行された後に変化する。フィールドStateは、オペレーションが発行即ちパイプラインステージから出たときに有効にシフトされることによりアップデートされる。パイプラインの完了に伴い、オペレーションがコミットされ回避する間、フィールドStateはｂ１１１にセットされる。アボートサイクルの間は、各エントリのフィールドStateがｂ１１１１にセットされる。ロードコンスタントオペレーションＬＤＫ等の、オペレーションのあるものは、初期状態フィールド値が１１１１であって、従ってスケジューラ２８０にロードされたときには、既に完了している。アペンディクスＢの表Ｂ．１２は、フィールドStateを初期化するオペレーションデコーダ５１０及び関連するオペレーションの実行の間にフィールドStateを変更するスケジューラ２８０のエントリに於ける回路を記述している。
フィールドExec1は、レジスタユニット２５３（２５４ではなく）実行中であることを示し、オペレーションがうまく実行ユニット２５３に発行されたときにセットされる。アペンディクスＢの表Ｂ．１３は、フィールドExec1をセットし、変更するロジックを示す。
フィールドDestBM［2:0］は、フィールドDestRegにより示されるどのバイトをオペレーションが変更するかを示すバイトマークを保持する。DestBM［2］，DestBM［1］及びDestBM［0］は、それぞれビット［31:16］，［15:8］及び［7:0］に対応する。フィールドDestBMはオペレーションデコーダ５１０によって初期化され、サポートサイクルの間にクリアされる場合がある。フィールドDestBMに関するロジックがアペンディクスＢの表Ｂ．１４に記述されている。
フィールドDestVal［31:0］は、DestRegについてコミットされるべきオペレーションの実行の結果を保持する。DestBMは、オペレーションの実行後にどのバイトが有効であるかを示す。フィールドDestValは、オペレーションの形式に応じてオペレーションが実行ステージ１又は、２を完了した時にロードされる。非実行オペレーション例えばＬＤＫについては、DestValは、適当な結果値によって初期化される。フィールドDestValは、オペレーションが完了したときに、結果が記憶される前に一時的な記憶を行うために用いることができる。実施例に於いては、DestValは、最初にRegOp及びＬStOpについてイミーディアット値及びデイスプレースメント値並びにBRCONDのための別の（シーケンシャル又はターゲット）分岐プログラムカウンタ値を保持する。フィールドDestValに関するロジックがアペンディクスＢの表Ｂ．１５に記述されている。
フィールドStatMod［3:0］は、オペレーションが、状態フラッグのどのグループを変更するかを示す状態グループマークを保持する。ビット３，２，１、０は、それぞれフラッグビットグループ｛EZF，ECF｝，OF，｛SF，ZF AF，PF｝及びCFに対応し、フラッグビットEZF，ECF，OF，SF，ZF，AF及びPEは、RegOpにより変更される。フィールドStatModは、非RegOpに対して全て０であって、アボートサイクルの間にクリアされる。フィールドＤＶに関するロジックは、アペンディクスＢの表Ｂ．１６に記述されている。
フィールドStatVal［7:0］は、状態レジスタEflagsにコミットされるべきオペレーションの状態の結果値を保持する。StatModは、実行後にどのフラッググループが影響を受けたかを示す。StatValは、RegOpのためにのみ意味を有し、これがStatModに反映されている。StatValは、RegOpが実行ステージ１を完了したときにロードされる。フィールドStatValに関するロジックがアペンディクスＢの表Ｂ．１７に記述されている。
フィールドOprndMatch_XXsrcYは、よりグローバルな意義を有する情報とは異なり２つのパイプラインステージ間でやりとりされる過渡的な情報のための追加の記憶要素である。但し、XXは、LU，SU，RUX又はRUYであり、Yは、１又は２である。アペンディクスＢの表Ｂ．１８は、フィールドOprndMatch_XXsrcYを制御するロジックについて記述している。
フィールドDBN［3:0］は、ＬStOpのための４つのデータブレークポイント状態ビットBn（n＝０〜３）を保持する。このフィールドは、初期には全て０であって、対応するLdStOpが実行されたとき、後のトラッピングのために、適当なユニットからのブレークポイントビットが記憶される。アペンディクスＢの表Ｂ．１９は、フィールドDBN［3:0］に関するロジックについて記述している。
II．Ａ．３  Ｏｐクワッドフィールド
スケジューラ２８０の各列は４つのエントリに加えてＯｐクワッド全体に関連するＯｐクワッドフィールド５４９を含んでいる。次に、図７に示された追加のＯｐクワッド５４９について言及する。オペレーションデコーダ５１０は、Ｏｐクワッドフィールドを初期化する。Ｏｐクワッドフィールドの多くはスタチックである。Ｏｐクワッドフィールドの或るものはダイナミックである。スケジューラ２８０の各列のロジックが、必要に応じてダイナミックＯｐクワッドフィールドを変更する。
フィールドEmcodeは、ＯｐクワッドがMacDec２４２又はベクトルデコーダ２４４（即ちEmcodeＲＯＭ２４６）のいずれかからであるかを表示し、アペンディクスＢの表Ｂ．２０はフィールドEmcodeの設定を記述している。
フィールドEretは、これがＯｐクワッドであって複雑なマクロ命令を表す一連のＯｐクワッドに於ける最後のＯｐクワッドであることがマークされているかどうかを示す。アペンディクスＢの表Ｂ．２１は、フィールドEmcodeを設定するロジックを記述している。
フィールドFaultPC［31:0］は、当該列に於ける第１のオペレーションに関連する論理マクロ命令ホールドプログラムカウンター値を保持する。オペレーションコミットユニット２６０は、フオールト例外を処理するときにフィールドFaultPC用いるアペンディクスＢの表Ｂ．２２はフィールドFaultPCを設定するロジックを記述している。
フィールドBPTInfo［14:0］は、Ｏｐクワッドが生成されたときに分岐予測表関連情報を保持する。フィールドBPTInfoは、BRCONDを含むMacDecにより生成されたＯｐクワッドについてのみ定義されている。アペンディクスＢの表Ｂ．２３は、BPTInfoを設定するロジックを記述している。
フィールドRASPtr［2:0］は、Ｏｐクワッドが生成された時点に於ける戻しアドレススタックの最上部にポインタを保持する。フィールドRASPtrは、BRCONDを含むMacDecにより生成されたＯｐクワッドについてのみ定義されている。アペンディクスＢの表Ｂ．２４は、フィールドRASPを設定するロジックについて記述している。
フィールドLimViolは、Ｏｐクワッドが、ターゲットアドレスにて、コードセグメントユニット違反が検出された転送制御命令のデコードであることを示す。多くの列についてフィールドLimViolはスタチックである。アペンディクスＢの表Ｂ．２５にまとめられているように、フィールドLimViolは列１にロードされる。
フィールドOpQVは、列が有効なＯｐクワッドを含み、グローバルロジック５２０がＯｐクワッドをシフト制御する際にフィールドＯｐクワッドVを用いるか否かを示す。無効Ｏｐクワッドは、スケジューラ２８０の下の方で、Ｏｐクワッドが停止状態に保持されている場合には上書きすることができる。無効Ｏｐクワッドを含む列に於けるフィールドは、アボートされたＯｐクワッドと同じ値を有し、アボートの結果、Ｏｐクワッドは無効となる。アペンディクスＢの表Ｂ．２６は、フィールドＯｐクワッドVを制御するロジックについて記述している。
フィールドOp1I、Op2I及びOp3Iは、Ｏｐクワッドにより表されマクロ命令の数のカウント（１，２又は３）を保持し、待避した命令をカウントするために用いられる。
フィールドIlen0及びIlen1は、Ｏｐクワッドにより表される第１及び（存在する場合には）第２のマクロ命令のバイトの長さを保持し、ホールドが発生した命令アドレスを決定するために用いられる。
フィールドSmc1stAddr，Amc1stPg，Smc2ndAddr及びAmc2ndPgは、第１及び（１より多い数の頁からの命令がＯｐクワッドにある場合には、）Ｏｐクワッドのオペレーションによりカバーされた第２のアドレスを保持し、自己変更コード（self-modifying code）を検出するために用いられる。
II．Ｂ  ロード／シフト制御
前記したように、スケジューラ２８を６列を含むシフトレジスタ（またはFIFOバッファ）として２４のエントリを管理する。スケジューラ２８０は、各列が独立したシフト制御（実際にはロード制御信号LdEntry［i］）を有する点に於いてシフトレジスタ程、リジットではない、Ｏｐクワッドは、次の列が空又は空にされつつある場合に限り、次の列にシフトダウンされる。この場合先行するＯｐクワッドは、上方からこの列に向けてシフトダウンされることができる。Ｏｐクワッドは、常に、スペースがある場合には、より高いに数の列に向けてついにシフトダウンされる。理想的には、クロックサイクルの境界に於いて各クロックサイクルごとに１列シフトダウンされる。
多くのオペレーションに於いて、スケジューラ２８０に於ける位置は、オペレーションのパイプラインステージに対して独立している。従って、実行パイプラインに於いて停止状態に保持されている場合でも、多くのオペレーションは、スケジューラ２８０内に於いて、シフトダウンする。２つの例外として、状態フラッグに依存するオペレーションと、スケジューラ２８０の最下列におけるオペレーションがある。状態フラッグに依存するオペレーションは、オペレーションがスケジューラ２８０の特定の列に於いて場合に実行されなければならないステージを有し、このステージが完了するまでシフトが禁止される。列５に於けるオペレーションは、列５に於ける全てのオペレーションが完了しコミットするまで、Ｏｐクワッドが列５からシフトまたは待避するのを禁止する。
アペンディクスＢの表Ｂ．２７は、スケジューラ２８０のシフトを制御する信号LdEntry0〜SdEntry1及び、ステップ２８０が、現在のサイクルの最後に新たなＯｐクワッドを受け入れ得るか否かを示す信号SchedFull及びSchedEmptyを示すグローバル制御ロジック５２０の回路について記述している。
III．オペレーション実行
物理的には、スケジューリングリザバ５４０は、オペレーションのための状態値を保持する記憶構造を有する。リザバ５４０に加えて、スケジューラ２８０は、オペレーション実行中状態値をオペレーションするためのロジックを備えている。制御の観点から、スケジューラ２８０は、オペレーションパイプラインを介してオペレーションを実行するための制御情報を生成し、実行結果を取り扱うパイプラインデータパスをなしている。スケジューラ記憶及び状態変化は、システムクロックに同期する。即ち、スケジューラ２８０の全ての状態の変化は、システムクロックの立ち上がりエッジによって引き起こされ、少なくともロジックに関しては、スケジューラ２８０の全ての記憶要素が、図６について前記したようなエッジトリガ式のフリップフロップからなる。ロジックの観点から、スケジューラ２８０の全ての状態シーケンシングは本質的に単一サイクルである。状態変化の決定は、サイクルごとに当該サイクルの間の機械状態に基づいて行われる。
スケジューラ２８０の行動は、オペレーション実行のパイプラインである特徴を反映している。スケジューラ２８０に於けるロジック及びそのエントリは、多くの個別のかつ概ね互いに独立した塊をなすロジックに分割され、それぞれは、与えられたオペレーション又は実行パイプラインの特定の処理段階に直接的に関連づけられている。特定の処理パイプラインの観点から、各ステージに対応するスケジューラロジックの塊は、このステージがいつうまく完了したかを決定したり、そのステージに於いて行われた処理についてのキーとなる制御情報を提供する。少なくとも最初の２つのステージの全ての処理パイプラインの全体について見た特定のステージの観点から、各パイプライン又はパイプラインのオペレーションソースオペランドについて極めて類似したロジックの塊は、同一の機能を果たす。
図４Ａ〜Ｄは、４つの形式のオペレーションのためのパイプラインタイミングを示す。これらの形式については、命令デコードステージ４２０の後にオペレーションがスケジューラ２８０にロードされる。BrOpがスケジューラ２８０の列４に到達したときに引き起こされる分岐評価ステージ４９０に於いてBrOpが完了する。RegOp、StOp及びLdOpは、３つ又は４つのステージパイプラインを経て、対応するように４つ又は、５つの状態間で変化する。スケジューラ内のフィールドState［3:0］は、エントリに対応するオペレーションのステージを追跡或いは表示する。
図４Ａ〜ＣのOp発行ステージ４３０及びオペランドフォワードステージ４４０は、全てのRegOp、StOp及びLdOpについて共通であって、その内容を以下に説明する。
オペランドフォワードステージ４３０に続いて実行ステージが設けられている。RegOpは、レジスタ２５３及び２５４が全てのRegOpを一サイクルで実行するため一つの実行ステージ４５０を有する。更に、RegOpが実行ステージ４５０に到達すると、常にうまく実行を完了し、クロックサイクルの終わりにステージ４５０を離れる。LdOp及びStOpは、二つの実行ステージ及び４５０及び４６０を有し、その間にアドレス計算４５３，セグメント及び頁トランスレーション（並びにプロテクションチェッキング）及びデータキャッシュマッピング４５４及び結果転送４６２が行われる。RegOpと異なり、LdOp及びStOpは、ステージ４５０又は、４６０に任意の時間に亘って保持されることができる。特にデータキャッシュ及びデータトランスレーションルックアサイドパスは、（DTLB）及びフォールトの結果としてのLdOpのホールドアップの多くは、最後のステージ４６０に対して適用される。ステージ４５０におけるホールドアップは、整合の狂ったメモリ参照或いは、ステージ４６０が、完了に向けて進行しないオペレーションにより占有されブロックされることに起因するものである。
スケジューラ２８０は、ユニットロード２５１、ストアユニット２５２、レジスタユニット２５３及び２５４、浮動小数点ユニット２５５及びマルチメディアユニット２５６の実行エンジンにより生成されるパイプラインを制御する。本発明の実施例は、レジスタユニット２５３及び２５４、ロードユニット２５１及びストアユニット２５２を有する。より多数の或いは少数の実行ユニットを有するプロセッサに対する本発明の様々な面の適用可能性は、本開示内容から自ずと明らかになる。例えば、マルチルディアユニット２５６を備える実施例に於いては、マルチメディァユニット２５６をロジック的に第１のレジスタユニット２５３の一部をなすものと考えることができ、レジスタユニット２５３に用いられる回路を用いて、マルチメディアユニット２５６のためのオペレーションを発行し、オペランドをフォワードし、結果を転送するもことができる。
或る実施例に於いては、浮動小数点ユニット（FPU）２５５は、それ自身の独立したレジスタファイル及びコミットユニットを有する。スケジューラ２８０は、FPU２５５に対して発行するためのスキャンチェーン選択FpOpを有する。スケジューラ２８０は、FpOpを発行し、オペランドをFPU２５５にフォワードする。FpOpの実行は、FPU２５５に関連するレジスタファイルのレジスタのみに対して影響を与え、従ってスケジューラ２８０は、FPU２５５からの結果を必要としない。FPU２５５は、実際にFpOpを完了し、コミットするずっと前にFpOpを即座に完了するような信号を発生することができる。OCU２６０は、何らの変更を加えることなくスケジューラ２８０からのFpOpをコミットし、待避させる。
レジスタユニット２５３及び２５４のそれぞれは、RUパイプラインと呼ばれ或いはレジスタユニット２５３を  レジスタユニット２５４から識別するためにRUX或いはRUYパイプラインと呼ばれるパイプラインを提供する。各RUパイプラインは、発行ステージ４３０、オペランドフォワードステージ４４０及び実行ステージ４５０と呼ばれる３つステージを有する。ロードユニット２５１及びストアユニット２５２は、それぞれ４つのステージを有するLU及びSUパイプラインを提供する。これらの４つのステージは、発行ステージ４３０、オペランドフォワードステージ４４０及び実行ステージ４５０からなる。前記したように、状態フィールドは、関連するオペレーションの現在のパイプラインステージを表示したり、オペレーションがそのパイプラインを完了したことを示すために１からなるシフト／増大のフィールド”shifting/increasing filed of ones”のエンコーディングを用いて、オペレーションの５つの状態を表示する。
スケジューラ２８０は、発行ステージ４３０及びオペランドフォワードステージ４４０の主な制御を提供する。発行及びオペランドフォワードステージ４３０及び４４０に於ける処理は、ステージごとに２つのフェーズに分解される。これらのフェーズは、名目上はシステムブロックサイクルの前半及び後半に行なわれる。発行ステージ４３０は、発行選択フェーズ４３１及びブロードキャストフェーズ４３２を含む。オペランドフォワードステージ４４０は、オペランド選択フェーズ４４１及びオペランド転送フェーズ４４２を含む。
発行選択フェーズ４３１の間、スケジューラ２８０は次のオペレーションを選択し、それぞれのパイプラインに送り込む。例えば実施例に於いては、LU、SU、RUX及びRUYパイプラインについて同時に行われる。ブロードキャストフェーズ４３２の間、それぞれ選択されたオペレーションのオペランドに関する情報が全てのスケジューラエントリ及び外部ロジックに対してブロードキャストされる。
オペランド選択フェーズ４４１の間、スケジューラ２８０は、２までの数の実行ユニットオペランドを特定するためにブロードキャストフェーズからの情報を利用する。オペランドのソースは、レジスタファイル２９０，スケジューリングリザバ５４０、或いは実行ユニット２５１，２５２，２５３又は２５４の結果バス５６１，５６２、５６３又は５６４であって良い。スケジューリングリザバ５４０は、イミーディアット値、コミットされていない結果、或いはプログラムでの順序が先行するが未だ完了していないオペレーションに関する情報のためのフィールドを含む。実行ユニットの結果バスは、所要のオペランドに対して影響を及ぼすオペレーションを実行ユニットが完了しつつ或る場合にオペランドのソースとなる。スケジューラ２８２は、また、指定されたソースから有効な値が実際に利用可能であるか等、オペランド値の状態を決定する。この情報に基づき、スケジューラ２８０は、オペランドフォワードステージ４４０に於いてどのオペレーションが実行ステージ４５０に進むべきかを決定する。この進行は、パイプラインについて独立している。明示的なオペランド依存性のみが、オペレーションを実行する順序に対する制約を行う。このような依存性を除いて、異なる形式のオペレーションは、他の形式のオペレーションに対して任意の順序をもってそれぞれのパイプライン内で処理される。
オペランド転送フェーズ４４２の間、スケジューラ２８０は、オペランド値を、指定されたソースから、オペランドバス５５４を経て実行ユニット２５１〜２５４に転送する。図５に示されるように、本実施例は、７つのオペランドバス５５４を備え、それぞれがオペランドフォワードステージに於けるオペレーションのためのオペランド値を提供する。浮動小数点ユニット２５５を有する実施例のような、より多数の実行ユニットを有する実施例に於いては、より多数のオペランドバスが用いられる。オペランド転送は、オペランド値が有効であるか否かによらず発生する。オペランド値が無効である場合には、関連するオペレーションは、実行ステージ４５０に進まず、従って実行ユニットは、無効なオペランドを用いない。
LdOp及びStOpのオペラアンド転送フェーズ４４２の間、ディスプレースメントフォワーディング４４３は、ディスプレースメントバス５５５を介して、ディスプレースメントオペランドをロードユニット２５１及びストアユニット２５２に転送する。（１つを各ユニットに）。ディスプレーストメントオペランドは、スケジューラのエントリからの３２ビット値である。ディスプレースメントのためのソースエントリーの選択は、オペランド選択フェーズ４４１の間に引き起こされる。
LdOpまたはStOpが実行ステージ４５０に入ると、ロード及びストアユニット２５１及び２５２が、対応するディスプレースメント及びオペランド値をラッチし、当該オペレーションがステージ４５０にとどまる限りそれらを保持する。スケジューラ２８０は、パイプライン実行ステージ４５０及び４６０に対して制限された制御を行う。ステージ４５０及び４６０において、スケジューラ２８０はオペレーションの状態を追跡し、結果として得られたレジスタ及び状態値を捕捉する。実行ステージ４５０におけるアドレス計算４５３は、LdStOpによりアクセスされたアドレスを決定する。LdStOpのためのアドレス及びデータサイズによって、データキャッシュにおけるエントリー間の境界を横切る向きにデータアクセスが行われる場合、LdStOpは非整合であると称する。非整合LdStOpは２つのデータアクセスに分割され、第１のアクセスは実行ステージ４６０に進み、第２のアクセスは実行ステージ４５０にて停止状態に保持される。非整合のLdStOpに対応するスケジューラのエントリーの状態フィールドは、第２のアクセスの実行ステージを示す。
実行開始するために、ソースオペランドを含むために、４つの制御プロセスに加えて、スケジュラー２８０は、StOpのためのデータオペランドを得るために同様の４つの制御プロセスを行う。しかしながら、データオペランドはStOpのためにSUステージ４６０において取得される。ストアデータを提供するプロセスは、StOpのステージ４５０および４６０と同期し、実行ステージ４５０においてStOpを特定するオペレーション選択フェーズ４５６と、データオペランドのソースを記述する情報を発信するブロードキャストフェーズ４５７と、データオペランド選択フェーズ４６１と、データオペランド転送フェーズ４６２とを含んでいる。要するに、ストアデータオペランドはStOp実行と並列にフェッチされ、実際のデータ値は、StOpの完了に伴い、取得されストアキュー２７０に転送される。ステージ４６０を完了し、それから出ることは、フェーズ４６１において選択されたデータ及びアドレス計算４５３及びＤＴＬＢマッピング４５５からの物理的アドレスに基づきStOpのためのストアキューエントリーの生成に対応する。有効なデータオペランドまたは物理的アドレスが依然として利用可能でない場合、StOpはステージ４６０にて停止状態で保持される。
オペレーション発行及びオペランドフォワーディングに関連するスケジュラーロジック５３０および５３２の塊の他に、エントリーは、ロード及びストアオペレーションを命令することに関連するロジック５３４の塊を含む。レジスターの相互依存性のために、オペレーション間にある実行の順序が守られなければならないのと同様に、メモリの相互依存性のためにLdOp及びStOp間で、ある限定された実行の順序を守らなければならない。LdOpは、古いStOpよりも先に自由に実行することができない。ロード−ストア命令は、メモリを参照したり、フォールト可能なアドレスを生成するＣＩＡ（チェック命令アドレス）及びＣＤＢ（チェックデータアドレス）などのStOp及びメモリに対してアクセスを行うStOpに対しても適用されるが、ＬＥＡ（ロード有効アドレス）オペレーションには適用されない。すべてのLdOpメモリを参照することから、LdOpはいずれもロード−ストア順序からは除外されない。
オペレーションを完了することが安全であるとされるまでLdOpまたはStOpがステージ４６０に保持される２つの実行パイプラインのステージ４６０において、ロード−ストア順序が守られる。ステージ４６０に達するまで、ＬＵ及びＳＵパイプライン間に順序が守られない。更に、LdStOpは、古いLdStOpに対して部分的なアドレスの比較をすることによりメモリの相互依存性が「証明」されたときにout-of-orderが完了する。ストアキュー２７０は、相互依存性チェックに関連するアドレス比較を行うが、ＬＵ及びＳＵ実行パイプにおけるLdOp及びStOpの相対的な年齢を決定するためのスケジュラーのサポートを必要とする。与えられたLdOpまたはStOpが完了しても良いことを決定する際に、適切なアドレス比較（古いStOpに対するLdOp及び古いLdOpに対するStOp）のみが考慮される。
ロード−ストア順序ロジック５３４は、ＬＵパイプラインに対応するロジック及びＳＵパイプラインに対応するロジックを備えている。ＬＵパイプラインに対応するロジックが、ＬＵステージ４６０におけるあらゆるLdOpの、ＳＵステージ４５０または４６０におけるあらゆるStOp及び他のStOpに対する年齢を決定する。ロジック５３４は、３つの信号SC_LU20LDER，SC_LU10SDER及びSC_LU00LDERをバス５５６上に発生し、ＳＵステージ４６０、４５０あるいは他の場所におけるStOpＰが、ＬＵステージ４６０におけるLdOpよりも古いか否かを表示する。ＳＵパイプラインに対応するロジックが、ＬＵステージ４６０におけるあらゆるLdOp及び他のLdOpに対する、ＳＵステージ４６０におけるあらゆるStOpの年齢を決定する。ロジック５３４は、２つの信号SC_LU20LDER及びSC_LU10LDERを発生し、ステージ４６０に於いてあらゆるLdOpが、LdOpよりも古いか否かを表示する。
スケジュラ−２８０は、状態フラッグまたは条件コード（cc）値を取得し用いることに関連する状態フラッグ取り扱いロジック５３８を有する。３つの相対的に依存する機能の領域が関連している。即ち、実行される状態依存RegOpのための状態フラッグ値をフェッチすること、分岐評価ユニット２５７によってBRCONDのレゾリューションのための常態フラッグ値をフェッチすること及び、先行するBRCONDによってアボート不可能なRegOpを同期することからなる。
RUX実行ユニットは、状態依存（cc依存）RegOpを実行し、レジスタオペランド値と同時に即ちオペランドフォワードステージ４４０の終了までに状態オペランド値を必要とする。cc依存RegOpは、列３に到達するまで実行ステージ４５０に進むのを許されず、有効条件コードを受け取るまで列３に留まる。レジスタ値のフェッチングの場合と異なり、状態フェッチプロセスはパイプラインされず、１サイクルに、即ち全てRUXオペランドフォワードステージ４４０の間に発生する。更に、同一のロジック５３８が、cc依存RegOp及びBRCONDの両者のためのアップデートされた状態フラグ値をフェッチする。cc依存RegOpについては、RegOpによって必要とされる状態値の有効性がチェックされるまで、条件コードは実行ユニット２５３に送られる。全ての必要な状態フラグについての有効な値が全て得られてはいない場合には、RegOpは、未だ利用可能でないレジスタオペランド値と同様に、オペランドフォワードステージ４４０内に停止状態に保持される。
BRCONDは実際の実行処理を必要としない。代わりに、BRCONDが継続中であって、スケジューラ２８０の最底部に到達する前に、BRCONDは正しく予測されたか否かをリゾルブされる。BRCONDは、１サイクル当たり１BRCONDまでの割合で順次リゾルブされる。BRCONDが列４に到達すると、状態フラグハンドリングロジック５３８が、レジスタファイル２９０またはBRCONDよりも古いオペレーションの何れかからBRCONDの評価のための有効な状態フラグが利用可能であるかを判定するためのチェックを行う。フラグハンドリングロジック５３８はまた、BRCONDの評価のために必要な状態フラグを提供する古いオペレーションがあれば、それが完了したか否かを判定する。所望の状態フラグのための値が依然として利用可能でない場合には、BRCONDのリゾリューションは、BRCONDを含むＯｐクワッドのシフトを禁止することにより停止状態に保持される。次のリゾルブされていないBRCONDのために必要な状態フラグ値が利用可能である場合、状態フラグハンドリングロジック５３８は、BRCOND内で特定された条件コードが正しく予測されたか否かを判定する分岐評価ユニット２５７に状態フラグ値を転送する。BRCONDが誤って予測された場合、再起動信号が、命令フェッチを開始するように発せられ、正しい分岐アドレスにて命令デコーダ（図２）の一部をデコードする。オペレーションが正しく予測されている場合には何も起きない。BRCONDのレゾリューションが、アボート不可能なRegOpの実行のために重要である。アボート不可能なRegOpの実行は、アボートまたはundoできない変化を引き起こす。従って、アボート不可能なRegOpは、RegOpの実行が安全となるまで実行ステージ４５０に進むのを妨げられる。これは、アボート不可能なRegOpが実行ステージ４５０に進めるようになる前に、全ての先行するBRCONDをレゾルブし、それらが正しく予測されたことを判定することを必要とする。従って、先行するBRCONDがレゾルブされない状態であったり、誤って予測されたことが見いだされる限り、アボート不可能なRegOpは、オペランドフォワードステージ４４０内に停止状態で保持される。先行するBRCONDが正しく予測された場合、遅れは一時的であるが、先行するBRCONDが誤って予測された場合、RegOpは、やがて実行されるアボートサイクルがスケジューラ２８０をフラッシュするまで停止状態に保持される。
ベクトルデコーダ２４４は、EmcodeＲＯＭ２４６からアボート不可能なRegOpを生成する。EmcodeＲＯＭ２４６に於ては、アボート不可能なRegOpの結果に、非明示的に依存するオペレーションは、アボート不可能なRegOpを含むＯｐクワッドの直前のＯｐクワッドに於て許されない。従って、列４に於てアボート不可能なRegOpが実行された場合、列５に於けるオペレーションは非明示的なアボート不可能なRegOpに対する依存性を有したかもしれない全ての古いRegOpは、アボート不可能なRegOpが列４に於て実行される前に退避し、従って終了している。
III．A  発行ステージ
スケジューラ２８０は、発行スキャン及びオペランドを必要とする各実行パイプラインについて並列に選択及びブロードキャストフェイズ４３１及び４３２を行う。実施例に於ては、発行ステージオペレーションは、ロードユニット２５１、ストアユニット２５２、レジスタユニット２５３及びレジスタユニット２５４について並列に実行される。
III．A．１  発行選択フェーズ
各サイクルに於て、スケジューラ２８０は、並列実行可能な各ユニットに対して発行するべきオペレーションを選択しようとする。実施例に於ては、スケジューラ２８０は。LU、SU、RUX及びRUYパイプラインに向けて発行するべきLdOp、StOp及び２つのRegOpを選択する。発行選択フェーズ４３１について、スケジューラ２８０は、最も古いオペレーションから最も新しいオペレーションについて、順番にスケジューリングリザーバ５４０内の全てのエントリーをスキャンし、エントリーのフィールド状態及びタイプに基づき発行されるべきオペレーションを選択する。発行選択４３１は、オペレーション同士が互いに有するかもしれないレジスタ状態またはメモリ依存性を考慮しない。これは、発行選択プロセスを単純化し、発行選択フェーズ４３１が比較的大きなリザーバ５４０について迅速に完了するのを可能にする。
発行選択は、４つの処理パイプラインのそれぞれについて同時であってかつ互いに独立している。各パイプラインLU、SU、RUXについて、フィールドタイプにより特定されるパイプラインが実行可能であるような、状態フィールドにより特定される次の未発行のオペレーションを選択する。即ち、次の未発行のLdOpがロードユニット２５１から選択され、次の未発行のStOpがストアユニット２５２から選択され、次の未発行RegOpがレジスタユニット２５３について選択される。レジスタユニット２５４については、パイプラインRUXのために選択されたRegOpに引き続くRegOpが選択される。概念的にはパイプラインRUYのための発行選択は、RUXの発行選択に依存するが、物理的にはRUYのための発行選択は、RUYの発行選択と並列に実行される。
スキャンについては、各スケジューラエントリーは、（xxをLU、SU、RUX及びRUYとしたときに、）パイプラインxxについて発行選択のために対応するオペレーションが現在利用可能であるか否かを示す４ビット（即ち各パイプライン毎に１ビット）のIssuableToxxを生成する。パイプラインxxのための発行選択プロセスは、ビットIssuableToxxセットを含むエントリーを探すために最も古いスケジューラエントリから最も新しいスケジューラエントリに向けてパイプラインxxに対するスキャンを行う。パイプラインLU、SU及びRUXについては、所望のビットITIssuableToLU、IssuableToSU或いはIssuableToRUXを有するものと見いだされた第１のオペレーションが、LU、SUまたはRUXパイプラインに対して発行が選択されたものからなる。パイプラインRUYのための発行選択は、パイプラインRUXのために選択されたオペレーションに引き続くIssuableToRUYセットを備えた第１のオペレーションを選択する。
オペレーションは、スケジューラ２８０にロードされた直後に発行選択の候補たりうる。即ち、スケジューラ２８０に於ける第１のサイクルの間にオペレーションを発行する事ができる。このような場合、サイクルの初期に於てTypeビット及びビットS0のみが有効であることを要する。エントリーの他の全てのフィールドは、発行選択フェーズ４３１の終わりに生成することができ（即ち０．５サイクル後）、ブロードキャストフェーズ４３２のためのスケジューラエントリー内で有効であればよい。発行のために選択されたオペレーションがオペランドフォワードステージ４４０に進まない場合、オペレーションは未発行のままとどまり、次のクロックサイクルの間にオペレーションが発行を互いに競い、所定の確率で再び選択されることとなる。
III．A．1．a  発行選択スキャンチェーン
本発明のある実施例に於ては、スケジューラ２８０は、エントリーに対応するロジックブロックから形成されたスキャンチェーン回路を用いてオペレーションをスキャンする。各スキャンチェーンは、ある種の加算器に於て用いられるキャリーチェーンと同様のものである。ロードユニット、ストアユニット、またはレジスタユニットXのための発行選択スキャンチェーンに於て、最も古いエントリーへの「スキャン」ビットCin入力は、エントリーの１つに於けるスキャンビットを殺すまでスキャンチェーン内を論理的に伝搬する。エントリーが所望の形式のオペレーションに対応する場合、即ちIssuableToxxが設定された場合、エントリーはスキャンビットを殺す。レジスタユニット２５４に発行されるべきオペレーションをスキャンするために、レジスタユニット２５３に発行されるべきオペレーションに関連するエントリーに於てスキャンビットが論理的に生成され、このスキャンビットは、レジスタユニット２５４に発行可能なオペレーションに対応するエントリーによって殺されるまで伝搬する。スキャンビットを殺すエントリーは、実行ユニットxxに向けて発行されるべきオペレーションに対応するエントリーとして、それ自身を特定するべく信号IssueOpToxxを設定する。このようにして、選択されたエントリーは、ブロードキャストフェーズ４３１によって必要となる適切な対応をとる。実行ユニットxxのためのスキャンビットが殺されることなく全てのエントリーに向けて伝搬した場合、スケジューラ２８０に於けるどのエントリーも、ユニットxxに対して発行可能なオペレーションに対応せず、どのオペレーションも発行のために選択されない。
スキャンビット信号が、スケジューラ２８０内のあらゆる単一のエントリーを経て直列に伝搬するようなスキャンチェーンは、比較的単純であるのに対して、より一層高速な対応が必要となる。伝統的なGenerate-Propage-Kellキャリーチェーンに用いられているのと同様のルックアヘッド技術を適用することができる。あるルックアヘッド技術は、エントリーを４つのグループに分類し、各グループはスキャンビットを生成し、伝搬し、これを殺す。ルックアヘッドはグループ発生、伝搬及びキルタームが、単一エントリータームから並列に決定され、スキャンがグループを通過するか否かは、グループに於ける全てのエントリーの信号が伝搬するのを待つことなく決定されることから、より高速である。グループタームの逐次的な組み合わせによって、全てのスケジューラリザバーが単一のグループを構成することから、スキャンビットの信号の伝搬は実際には何ら発生しない。
LU、SU及びRUXスキャンチェーンについては、単一エントリーキルタームKが信号IssuableToxxをなす。発生タームDは全て０であって、伝搬タームPは、対応するＫタームの補数である。アペンディクスＢの表Ｂ．２８は、LU、SU及びRUXスキャンチェーンのための単一エントリータームを示す。アペンディクスＢの表Ｂ．２９は、パイプラインLU、SU及びRUXのための発行選択スキャンチェーンに用いられるグループタームPgrp及びKgrpを記述する。
図８Ａ及び図８Ｂは６つのエントリーのルックアヘッドグループを用いたRUXスキャンチェーンの一部を実現するロジック８００を示す。より多数のまたはより少数のエントリーのグループを用いることもできるが、１グループ当たり６つのエントリーは、２４のエントリーを４つの象限に区画し、グループタームを処理するために用いられるワイヤの数を減少させることができる。図８Ａに示されるように、各象限は、象限３、２、１または０のためのグループキル信号Kgrp３、Kgrp２、Kgrp１またはKgrp０を生成し、互いに協働することにより６入力ORゲートとして機能する、関連するORゲート８１０及び８１２及びNANDゲート８１４を有する。ORゲート８１０及び８１２への入力は、パイプラインRUXのための単一エントリーキルタームであるIssuableToRUX信号である。パイプラインRU及びSUのためのスキャンチェーンは、互いに同一であるが、但し、IssuableToRUXに代えて、それぞれ信号IssuableToRU及びIssuableToSUが入力となっている。
発行選択スキャンは、スケジューラ２８０に於けるエントリーの物理的な順序に基づいて最も古いものから最も新しいものへと行われる。象限３は最も古いエントリーを含む。信号Kgrp３が設定された場合、象限３のオペレーションの一つはスキャンビットを殺し、象限３からのオペレーションが発行されるはずである。バッファ８２３は、象限３の選択するべくチェーン信号IssueQuadrant［3］を設定する。信号計算が設定されない場合、スキャンビットはグループ３へと伝搬することはできるが、象限２，１または０のオペレーションが選択される場合がある。NANDゲート８２２は。信号Kgrp２が設定され、信号Kgrp３が設定されない場合には、信号IssueQuadrant［2］を設定する。同様に、NANDゲート８２１及び８２０は、スキャンビットが象限１または０に伝搬することができ、グループキル信号Kgrp１またはKgrp０が設定された場合、即ちグループがスキャンビットを殺すこととなった場合、それぞれIssueQuadrant［1］及びIssueQuadrant［0］を設定する。グループキル信号Kgrp３の何れも設定されない場合、どのオペレーションも発行のために選択されることはない。
図８Ｂは、信号IssueQuadrant［0］が設定された場合に、象限０からオペレーションを選択するのを示している。それぞれの象限について、ロジック８５０と同様の４つの回路が並列に作動する。エントリー５が象限０において最も古いエントリーであることから、パイプラインRUXに発行可能であって、象限０が発行のために選択されている場合、エントリー５が選択される。ANDゲート８６５は、IssueQuadrant［0］が設定され、IssuableToRUX［5］が設定された場合、エントリー５が選択されたオペレーションを含むことを示すために、IssueOpToRUX［5］を設定する。ANDゲート８６０〜８６４は、エントリー０〜４に対応し、そのオペレーションがRUXに発行可能であって、象限０に於けるより古いオペレーションがRUXに発行可能でない場合に、選択されたオペレーションを特定するために信号IssueOpToRUX［0:4］に於ける対応するビットを設定する。NORゲート８７０〜８７３は、より古いエントリーがRUXに発行可能でないことを示すために、対応するNANDゲート８６０〜８６３に対して信号を設定する。
回路８００及び８５０に代わる回路として、アペンディクスＢに於ける表Ｂ．２９の方程式を実現しうる任意のロジックを用いることができる。
図８Ａのロジック８００は、選択されたエントリーが象限０、即ち最も後に検索された象限であっても、信号IssuableToRUX［23:0］の入力から３つのゲートの遅れの後に信号IssueQuadrant［3］を生成する。ルックアヘッド技術を用いない場合、スキャンビットは、オペレーションが選択されていない場合はスケジューラ全体を伝搬しなければならない。これは、実施例においては２４以上のゲート遅れに相当する。従って、ルックアヘッドスキャンチェーンは、スキャンビットが全てのエントリーを伝搬するようなシリアルスキャンチェーンよりもかなり高速であるのが通常である。
III．A．１．ｂ  RUY２のための発行選択スキャンチェーン
RUYスキャンチェーンはより複雑であって、４つのタームG、P、K及び0を用いる。タームG、P及びKは、従来の生成−伝搬−キル（generate-propage-kill）タームと同様である。このタームは、ただ１つのオペレーションのみが選択されるのを確実にする。エントリーｉのための単一エントリー生成タームGは、信号IssuableToRUX［i］であり、ターム0はタームGに等しい。エントリーｉのための単一エントリーキルタームKは信号IssuableToRUY［i］であり、Pタームは対応するKタームの補数である。
ルックアヘッド技術を、パイプラインRUYのための発行選択において用いることもできる。概念的には、RUYスキャンチェーンのためには、RUXに発行されるべく選択されたオペレーションを含むエントリーによってスキャンビットが生成され、パイプラインRUYに対して発行可能な、次のより新しいオペレーションによって殺される。グループ内のエントリーがスキャンビットを生成し、グループ内のそれに続くエントリーが何れもスキャンを殺さない場合には、グループは出力スキャンビットを生成する。グループは、グループ内の各エントリーがスキャンビットを伝搬させる場合には、スキャンビットを伝搬させる。一旦生成された0タームは、新たなエントリーが新たなスキャンビットを生成するのを妨げ、グループ内の何れかのエントリーが単一エントリー0タームを生成した場合には、グループ0タームが生成される。アペンディクスＢに於ける表Ｂ．３０の於ける方程式は、RUYスキャンチェーンに於ける単一エントリータームからグループタームを生成するロジックをまとめて示す。
図９Ａ、９Ｂ及び９Ｃは、初期にスケジューラ２８０を５つの３エントリーグループに区画するパイプラインRUYのための発行選択スキャンチェーンを示す。図９Ａにおいて、表Ｂ．３０に示されたロジックを実現するロジックブロック９１０は、グループタームGgrp［7:1］、Pgrp［7:1］及びOgrp［7:1］を、単一エントリー信号G［23:3］及び0［23:3］から生成する。最も新しいグループのためのグループタームのエントリー０〜２は下記する理由により必要とされない。グループタームは、より大きなグループのタームを構成するべく３段階で組み合わされる。回路９００は、最も古い６３、６、９、１２、１５、１８及び２１エントリーを含むグループのために、タームG_7、G_67、G_567、G_4567、G_3567、G_234567及びG_1234567としてグループタームを生成する。
ロジックブロック９２０を含む回路９００の第１のステージは、３つのエントリーの隣接するグループからのグループタームを組み合わせて、３つのエントリーのためのグループタームを生成する。ロジックブロック９３０を含む第２ステージは、6つ又は３つのエントリーの隣接するグループからのグループタームを組み合わせて、９つ又は１２のエントリーのためのグループタームを生成する。ロジックブロック９４０を含む第３ステージは、１２、6つ又は３つのエントリーの隣接するグループからのグループタームを組み合わせて、２１、１８又は１５のエントリーのためのグループタームを生成する。
ロジックブロック９２０、９３０及び９４０は、グループXのためのグループタームGX、PX及びOXを、次の新たなグループYのためのグループタームGY、PY及び0Yと組み合わせ、グループX及びYの連結であるグループXYのためのタームGXY、PXY、0XYを生成する。本発明のある実施例においては、ブロック９２３、９３０及び９４０は以下の方程式を具現化したものからなる。
0003720371.tif 000002
図９Ｂに示された回路は、ブロック９２０、９３０及び９４０の一実施例である。図９Ｂに於て、グループ１及び２のための入力信号及び出力信号は、グループ１及び２の結合（union）であるが、任意の連続するグループをもってグループ１及び２を置換することができる。あるいは、他の均等なロジックを用いたり、異なるステージ、ブロック９２０及び９３０またはブロック９３０及び９４０を反転したロジックをもって実現することもできる。更に、以下に述べるように、最後のステージ９４０からの伝搬タームは必要ではなく、例えばANDゲート９２２を省略するなど、伝搬方程式を具現化しないことによってブロック９４０を単純化することができる。
回路９００からの所望の出力信号は、Gターム及び0タームである。出力信号G_7、G_67、G_567、G_4567、G_3567、G_234567及びG_1234567は、先に生成されたスキャンビットが、グループ６、５、４、３、２及び１に到達したか否かを示し、ここでは信号CinGrp［6:0］と呼ばれている。信号0_7、0_67、0_567、0_4567、0_3567、0_234567及び0_1234567は、スキャンビットは、対応するグループに到達する前に殺されたか否かを問わず、スキャンビットがグループグループ６、５、４、３、２及び１に先だって生成されたか否かを示す。信号0_7、0_67、0_567、0_4567、0_3567、0_234567及び0_1234567は、ここでは信号OinGrp［6:0］と呼ばれる。
複数ビット信号IssueOpToRUY［23:0］を、グループ信号CinGrp［6:0］及び0inGrp［6:0］、並びに単一エントリー信号P、K、G及び0から生成することができる。図９Ｃは、RUY実行ユニットに対して発行されるためのエントリーを選択するロジックを示す。エントリー２３から２１への信号IssueOpToRUY［23:21］を生成するロジックは、最も古いグループであるグループ７に何らグループ伝搬が行われないことから、他のグループのためのロジックと相違する。グループ６のためのIssueOpToRUY［20:18］を生成することが示されたロジックが、グループ５〜０のそれぞれについて繰り返される。アペンディクスＢの表Ｂ．３１の場合と同様に、最後のグループ０からのグループ伝搬タームは、発行のためのオペレーションの選択にとって必要とされない。
III．A．２  オペランド情報ブロードキャストフェイズ
処理パイプラインの発行ステージのブロードキャストフェイズの間、実行ユニットに発行されるべきオペレーションのオペランドに関する情報は、全てのスケジューラエントリー及び外部ロジックにブロードキャストされる。この情報は、発行されるべく選択されたオペレーションのそれぞれのための２つのソースオペランドを記述する。選択されたオペレーションのためのエントリーはまた、選択されたオペレーションに関する情報を外部ロジック及び対応する実行ユニットに提供する。
オペランド情報バス５５２（図５）は、スケジューラ２８０内に延びている。オペランド情報バス５５２の数は、実行ユニットによって必要とされるオペランドの最大数に対応する。選択されたオペレーションに対応するエントリーは、対応するオペレーションが発行されるべき実行ユニットに対応する２つのオペランド情報バスを駆動する。各オペランド情報バス５５２は８ビット幅を有し、ソースオペランドとして５ビットレジスタSrc1Reg［4:0］またはSrc2Reg［4:0］及び３ビットバイトマークSrc1BM［2:0］またはSrc2BM［2:0］を伝送する。表Ｂ．３１は、エントリーロジックがペランド情報バス５５２を駆動する要領を記述する。
各エントリー内の比較ロジックは、ブロードキャストオペランド情報を、比較を行っているエントリーのオペレーションのためのデスティネーションレジスタ情報に関すると同様な情報と比較する。比較ロジックは、一致するレジスタ数及びオーバーラップするバイトについてチェックする。即ちオペランドにとって必要なバイトの一部または全てが、オペレーションによって変更されあるいは将来変更されることになる。複数比較（オペランド情報バスの数×エントリーの数）の結果として得られるのは、次の処理フェーズ即ちオペランド選択フェーズ４４１の間に発生するアクションを制御する信号からなる。表Ｂ．３２は比較を行うロジックを示す。次の方程式は基本的な比較を簡潔に示している。
0003720371.tif 000003
但し、XXsrcYは、LUsrc1、LUsrc2、SUsrc1、SUsrc2、RUXsrc1、RUXsrc2、RUYsrc1及びRUXYsrc2のいずれかであり、busは、オペランド情報バス５５２の1つであるprndInfo_XXsrcY信号を表す。
比較の結果得られた「一致」信号OprndMatch_XXsrcYは、ブロードキャストフェーズの結果として得られたもので、オペランド選択に用いられる。これは、各エントリー毎に全てのエントリーで同時に行われる。即ち、各エントリー内に於て、４つの一致信号がオペランド選択ロジック５３２にパイプされる。全ての一致信号は、各エントリーについてローカルの状態に留まり、次のパイプラインステージに用いるためにレジスター内にラッチされる。要するに、各エントリー内に於いて８つのオペランドバスコンパレータが、８つの制御信号を、オペランド選択ロジック５３２の８つの塊に供給する。最下列内の各エントリー内に於ける一致信号は、これらのオペレーションのレジスタの結果を構造（architechtural）レジスタファイル２９０にコミットすることに関連する、追加の信号によりゲートされ或いはマスクされる。以下のオペレーションコミットユニット２６０に関する記述を参照されたい。
各エントリーは、エントリー内のオペランドマッチレジスタ内に一致するビットをロードするのを実際に制御するわけではない。グローバルロジック５２０は、発行されたオペレーションがオペランドフォワードステージ４４０に進むか否かを示す信号LUAdv0、SUAdv0、RUXAdv0及びRUYAdv0を生成し、一致信号は単にラッチされるのみで、オペレーションが実際にオペランドフォワードステージ４４０に進む場合に利用される。ロードユニット、ストアユニット２５２、レジスタユニット２５３及びレジスタユニット２５４に対応する４つのオペレーション情報バスは、発行されたオペレーションを記述する追加の情報を提供する。OpInfoフィールドと呼ばれる追加の情報が、ブロードキャストフェーズの間にスケジューラ２８０から読み出され、このオペレーションが、オペランドフォワードステージに実際に進む場合には、外部パイプラインレジスタ内にラッチされる。表Ｂ．３３はオペレーション情報信号を発生するロジックについて記述している。
ブロードキャストフェーズの間に提供されるSrc1/2Reg及びSrc1/2BMフィールドは、次の２つのフェーズ即ちオペランドフォワードステージの間に様々な目的のために利用される。OpInfoフィールドは、単に（対応する信号XXAdv1により制御される第２のセットのパイプラインレジスタを介して、）対応する実行ユニットに向けて「パイプを流れる」。RUX及びRUYオペレーションについては、対応するバイトマークSrc1/2BMも、単に対応するレジスタユニットに向けて「パイプを流れる」。
III．B．  オペランドフォワードステージ
オペランドフォワードステージはオペランド選択フェーズ及びオペランド転送フェーズからなる。
III．B．１  オペランド選択フェーズ
オペランドフォワードステージに於て、サイクル毎にスケジューラ２８０は、フェッチされつつあるオペランドのために値を供給するエントリーを選択するために、発行ステージロジックにより生成されたオペランドマッチレジスタに記憶されたマッチビットを用いる。スケジューラ２８０はまた、オペランドの値がスケジューラエントリーまたはレジスタファイル２９０の何れかから得られたかを各オペランドについて判定する。レジスタファイル２９０は、マッチしたエントリーがない場合にはデフォルトとなる。オペランド転送フェーズの間、選択されたエントリー及びレジスタファイル２９０は、オペランド値をオペランドバス５５４にドライブし、オペランド値を対応する実行ユニットに転送する。
発行ステージに於ける発行選択プロセスと同様に、オペランド選択は、独立かつ同時に行われる。従って、オペランド選択ロジック５３２は、オペランドを提供するための８つのスキャンチェーンを有する。各エントリーは、各オペランドバス及び対応するスキャンチェーンのためのオペランドマッチレジスタを有する。各スキャンチェーンは、そのオペランドがフェッチされつつあるオペレーションを含むエントリーよりも古いが、一致が得られた最新のエントリーを検索する。論理的には、そのオペランドがフェッチされつつあるオペレーションから、古いエントリーに向けて、オペランドマッチビットセットを有する最初のエントリーへとスキャンが開始される（スキャンビットが生成される）。マッチビットセットを有する最初のエントリーが見出されると、次のフェーズで、対応するオペランドバスを駆動することにより、該エントリーは所要のオペランドを供給する。
オペランドがフェッチされつつあるオペレーションが、オペランドフォワードステージから前進しない場合、再び次のサイクルでオペランド選択プロセスが実行される。オペレーションは、例えば一致するビットセットを有するエントリーがオペランドのために必要な全てのバイトを変更せず、従ってそれを供給できない場合に、前進することができない。スケジューリングリザバー５４０内のオペレーションのフィールド状態及び物理的位置がサイクル毎に変化することから、新たな選択の結果は、現在のサイクルの結果とは異なる場合がある。要するに、各サイクルの間に、選択プロセスは、そのサイクルの間に適切なオペランド値をフォワードするために何が必要であるかを判定する。
オペランド値のための適当なソースを見いだすためのスキャンは、上記した発行選択スキャンと同様に行うことができる。しかしながら、スキャンは発行選択スキャンの方向とは逆方向に古いオペレーションに向けて行われる。更に、オペランド選択については、スキャンチェーンは、propagate-killチェーンではない。オペランド選択スキャンチェーンが、従来のキャリー即ちgenerate-propagate-killチェーンと同様に行われる。スキャンチェーンへの初期のスキャンビットCinは０であって、オペランドがフェッチされつつあるオペレーションに対応するエントリーはスキャンビットを生成する。スキャンキルは、オペランド一致ビットセットの最初の次のエントリーにおいて発生し、スキャン伝搬は、それらの間のエントリーにおいて発生する。
グローバル専用ロジック５２０は、何れかのエントリーが選択され、従ってレジスターファイル２９０がそのかわり選択されてオペランドを提供するべきか否かを判定するために、最後／最も古いエントリーからの最後の出力スキャンビットCoutを用いる。もしCoutが設定された場合、グローバル制御ロジック５２０はレジスタファイル２９０を選択する。選択されたソースは、オペランドフォワードステージの後半部分であるオペランド転送フェーズの間に、対応するオペランドバスを駆動する。オペランド選択フェーズの間に、名目上所望のオペランド値を保持するレジスタファイル２９０に於けるソースレジスタが、レジスタファイル２９０がオペランドバスを駆動するべく選択されたときに読み出される。
発行選択スキャンチェーンと同様に、ルックアヘット技術を用いることにより速度を向上されることができる。アペンディクスＢの表Ｂ．３４は、従来のgenerate-propagate-kill方程式と同様のルックアヘッド方程式に基づくオペランド選択スキャンチェーンの一例を示している
III．Ｂ．２  オペランド転送フェーズ
オペランドフォワードステージ４４０のオペランド転送フェーズ４４２の間、８つのソースオペランドのそれぞれの値がフェッチされ、オペランドバス５５４を経て、関連する実行ユニットの入力レジスタに転送される。オペランド値は３２ビット量であるが、そのうちにいくつかのバイトが未定義である場合がある。正しいオペレーションの間、実行ユニットは未定義のオペランドバイトを用いない。どのエントリーまたはレジスタファイル２９０も、それぞれのオペランドバス５５４を駆動可能であって、スケジューリングリザバー５４０の各エントリーは、バスの一部及びまたは全ての駆動することができる。
実施例においては、１９２のオペランド選択信号及び８のスキャンチェーン信号Coutが、オペランド転送フェーズの間に生成される。これらの信号に基づき、各選択されたエントリーに於けるロジックが、エントリー内の適当なバスドライバをイネーブルする。エントリーの何れもオペランドのために選択されない場合、レジスタファイル２９０は、そのオペランドのためにドライバをイネーブルする。アペンディクスＢの表Ｂ．３５は、オペランドバス５５４のためのドライバをイネーブルするためのロジックについて記述している。
実行ユニット２５１〜２５４に於けるオペランドレジスタは、それに続くパイプラインステージにおいて使用するために、オペランドバス５５４からのオペランド値を捕捉する。グローバル制御ロジック５２０は、オペランドレジスタのロードを制御するために、処理パイプライン毎に１つの制御信号を生成する。オペランドフォワードステージのオペレーションが実行ステージ４５０に進める場合、新たなオペランド値が実行ユニットにロードされる。グローバル信号にLUAdv1はLUステージ１ソースオペランドレジスタを制御する。同様に、信号SUAcv1、RUXAdv1及びRUYAdv1はそれぞれオペランドレジスタのSU、RUX及びRUYローディングを制御する。
４つの処理パイプラインのオペランドフォワードステージ４４０のオペランド転送フェーズ４４２の間、オペランド値を提供するべく選択されたオペレーションのそれぞれについての情報もスケジューラ２８０から読み出される。それぞれのオペランドバス５５４はフェッチされつつあるオペランドの起源（origin）を記述するオペランド状態信号OprndStatを伝送する関連するオペランド状態バス５５３を有する。あるエントリーからのオペランド状態信号は、オペランド値を提供するエントリーのフィールドState、DestBM、Type及びExec1の連結である。外部ロジックは有効なオペランド値のソース及び利用可能性を判定するために、オペランド転送フェーズの間にその情報を利用する。
オペランド状態バス５５３が定義された値を転送し、それらの値が、この情報を用いたロジックによって適当な挙動を引き起こすのを可能にするために、レジスタファイル２９０はまた、オペランド状態バス５５３のためのドライバのセットを備えている。アペンディクスＢの表Ｂ．３６は、オペランド状態信号及びその生成について記述している。
実行ユニットに送られたソースオペランドのそれぞれは、３つの可能なソースの何れかから送り込まれる。それらのソースは、スケジューラエントリー、レジスタファイル２９０及びこの、このまたは他の実行ユニットの結果バスである。オペランド転送フェーズ４４２は、エントリーからの送り出しをカバーする。レジスタファイル２９０は、オペランド選択フェーズの間に、スケジューラの活動と並列してアクセスされる。特に、所望のオペランドのレジスタ番号は、ブロードキャストフェーズの間にオペレーションエントリーからブロードキャストされ、レジスタファイル２９０の適当なリードポートに送られる。各オペランドが提供されるために、スケジューラ２８０はスケジューラエントリまたはレジスタファイル２９０が、当該オペランドに対応するオペランドバス５５４を駆動するか否かを判定し、結果として得られたオペランドは、オペランド転送フェーズの間に、オペランド５５４を介して実行ユニットに転送される。
図１０に示されるように、オペランド５５４は、実行ユニット２５１〜２５４のオペランド入力レジスタ１０２１〜１０２４及び１０３１〜１０３４にマルチプレクサ１０１０を介して結合される。実行ユニット２５１〜２５４からの結果バス５６１〜５６４も、マルチプレクサ１０１０に結合されている。このように、５本のオペランドバスは、各実行ユニットの各オペランド入力に接続され、即ちスケジューラ２８０またはレジスタファイル２９０からのオペランドの入力専用の１本のオペランドバス５５４、実行ユニット２５１〜２５４からの４本の結果バスからなる。オペランド転送フェーズの間、スケジューラ２８０は、各オペランド入力レジスタにおいて５対１マルチプレクサ１０１０のための選択信号を生成する。オペランド状態信号は、所望のオペランド値が実行ユニットから正に利用可能になった或いはなり得るか否かを示すもので、その場合には、実行ユニット２５１〜２５４からの結果バス及び値Result_XXが選択される。そうでない場合は、オペランドバス５５４が選択される。オペランドの有効性は、オペランドフォワードステージ４４０に於ける関連するオペレーションが実行ステージ４５０に進むか否か、即ち実際に実行ユニットに入るか否かに対してのみ影響を与える独立した問題である。
III．B．３  ディスプレースメントフォワーディング
レジスタオペランドに加えて、スケジューラ２８０は、オペランド転送フェーズ４４２の間に、LU及びSU処理パイプラインに向けてディスプレースメントオペランドをフェッチしフォワードする。ロードユニット２５１及びストアユニット２５２は、それぞれ３本の入力オペランドバスを有する。即ち２本のレジスタオペランドバス５５４及び１本のディスプレースメントバス５５５である。ディスプレースメントオペランドは３２ビット量であるが、ディスプレースメントオペランドのビットのあるものは未定義であって、従って実行ユニット２５１及び２５２の正しいオペレーションの間に使用されない。
スケジューラ２８０は、オペレーションレジスタ結果値と同様にディスプレースメントを取り扱う。ディスプレースメントは、まず使用されるまでエントリーの３２ビットDestValフィールド内に記憶され、オペランド転送フェーズ４４２の間に必要に応じてディスプレースメントバス５５５に向けてドライブされる。ディスプレースメントは、常にＲＩＳＣ８６オペレーションのイミーディアット値であって、従ってレジスタファイル２９０からフォワーディングディスプレースメント値は発生しない。フィールドDestValはまた、LdOp及びStOpのあるものからの結果値としても用いられるが、ディスプレースメントがエントリーからフォワードされた後になるまで、即ちオペランドフォワードステージ４４０の後に至るまで結果値がスケジューラエントリーにロードされないことから、フィールドDestValが２つの用途に用いられることにより矛盾は生じない。
オペレーション内でコミットされる小さな（８ビット）ディスプレースメントは、大きな（１６／３２ビット）ディスプレースメントとは異なった取り扱いを受ける。オペレーションデコーダ５１０のサインは、対応するLdStOpを保持するエントリーのDestValフィールドに小さなディスプレースメントをロードする前に、小さなディスプレースメントを伸張する。大きなディスプレースメントは、ディスプレースメントを用いるLdStOpの直前のLIMMOpのためのエントリーのDestValフィールド内に記憶されているものと推定される。一般に、先行するエントリーは、完成した形でスケジューラ２８０にロードし得る”LIMMt0，［disp］”オペレーションを保持し、LIMMOpは発行或いは実行されない。
各サイクル中に、ディスプレースメントバス５５０をドライブするDestValフィールドを選択することは、スケジューラエントリーのスキャニングを引き起こす。代わりに、各エントリーはその状態及びTypeフィールドから、DestValフィールド値を適当なディスプレースメントバス５５５に設定するための先行するエントリーに於けるそのドライバまたはそのドライバをイネーブルするか否かを判定する。アペンディクスＢの表Ｂ．３７は、各エントリー内のディスプレースメントバスドライバをイネーブルするためのロジックをまとめて示している。
ＩＩＩＢ．４  イミーディアット値フォワーディング
ＲＩＳＣ８６オペレーションの例示的なフォーマットでは、イミーディアット値が、ＲｅｇＯｐｓのオペランドｓｒｃ２からなる。スケジューラ２８０は、イミーディアット値を取り扱い、同様に変位を取り扱う。ＲＩＳＣ８６命令セットは、ＲｅｇＯｐｓ内の小さい（８ビットの）イミーディアット値のみをもち、オペレーションレコーダ５１０は、ＲｅｇＯｐを保持するエントリのフィールドＤｅｓｔＶａｌ内のイミーディアット値を記憶する。すなわち、イミーディアット値は、エントリのＤｅｓｔＶａｌフィールド内に記憶された変位と類似し、しかし、レジスタオペランドバス５５４（特に、ＲＵＸｓｒｃ２及びＲＵＹｓｒｃ２オペランドバス）を前進させられる、類似のレジスタオペランドに類似する。Ｓｒｃ２オペランドに対するイミーディアット値は、レジスタの値の代わりに、オペランドフォワードステージ４４０のオペランド転送フェーズ４４２の間に、対応するレジスタ実行ユニットに向けて進められる。レジスタ値の供給源の選択（すなわち、スケジューラエントリオアレジスタファイル２９０）が禁止され、問題となっているエントリは、直接、適切なオペランドバス５５４へそのＤｅｓｔＶａｌフィールドをドライブする。
ＲＵＸ／ＲＵＹ  ｓｒｃ２オペランドの選択の禁止は、オペランド選択フェーズ４４１が、ＲｅｇＯｐを保持しているエントリが通常オペランドの選択のスキャンチェーン内でアサートしている、単一のエントリ生成タームをマッピングすることによって、行われる。これは、ＲＵＸｓｒｃ２及びＲＵＹｓｒｃ２に対して別個にかつ独立して行われ、ＲＵＸ／Ｙｓｒｃのスキャンチェーンによる任意のエントリの選択を防止する。イミーディアット値を含むエントリは、また、デフォルトのオペランドのソースとして、レジスタファイル２９０の選択を禁止する。テーブルＢ．３４に記載されたＲＵＸ及びＲＵＹオペランド選択スキャンチェーンに対する単一エントリタームは、その禁止を表す。
各サイクルの間のＲＵＸｓｒｃ２及びＲＵＹｓｒｃ２オペランドバスへの駆動をするための「イミーディアット値」ＤｅｓｔＶａｌ値の選択は、スケジューラエントリのスキャンを必要としない。代わりに、各エントリが、そのＤｅｓｔＶａｌフィールドの、エントリの状態フィールド及び関連するビットに基づく適切なオペランドバス５５４へのドライブを可能とする。同じドライバが、レジスタオペランド値のフォワーディング及びイミーディアット値オペランドのフォワーディングのために用いられる。アペンディクスＢの表Ｂ．３８は、イミーディアット値をオペランドバス５５４へドライブするための回路を表している。エントリがイミーディアット値をオペランドバス５５４へ駆動するとき、エントリは、また、関連するオペランド状態バス５５３に対しても駆動する。同じバスドライバ及びレジスタオペランドに対するのと同じ入力のドライブの値が、イミーディアット値に対して用いられ、但し、表Ｂ．３８に示された追加のタームを伴っている。
ＩＩＩ．Ｃ  データオペランドのフェッチング
ＳｔＯｐｓは、３個のレジスタソースオペランドとを有し、宛先レジスタは有しない。これに対して、他のオペレーションは、２個までのソースオペランドと１つの宛先とを有する。ＳｔＯｐに対する第３のソースオペランドが、ストアされるべきデータを供給し、しばしばデータオペランドと本明細書では呼ばれる。データオペランドは、ＳｔＯｐの実行を開始する必要がないが、しかし、ＳｔＯｐの完了のためには必要である。データオペランドのフェッチは、その他のソースオペランドのフェッチと同様に実行されるが、ここで、「ノーマルな」オペランドフェッチプロセスは、発行ステージ４３０の間に起こり、オペランドフォワードステージ４４０、データオペランドフェッチプロセスは、ＳＵ実行ステージ４５０及び４６０の間に起こる。スケジューラ２８０は、ＳＵ実行ステージ４６０の間にデータオペランドの利用可能性をチェックし、そのデータオペランドが利用可能でない場合に、ステージ４６０での関連するＳｔＯｐを保持する。
データオペランドフェッチプロセスは、概ね、２つの主な相違点以外は、上述された発行及びオペランドフォワードステージと等しい。第１に、オペランド選択フェーズ４５６は、発行選択フェーズ４３１の間に起こるような複数の候補の間の選択を行うためのスキャンアクロススケジューラエントリを必要としない。代わりに、ＳＵステージ４５０でのＳｔＯｐに関連するエントリは、ステート及びタイプフィールドからそれ自身を特定し、必要な場合ユニット２５２を記憶するためのデータオペランドを供給する。第２の相違点は、ＳｔＯｐのＯｐＩｎｆｏフィールドが、データオペランドに対するブロードキャストフェーズ４５７の間にユニット２５２を記憶するための再びの読み出しを必要としないことである。代わりに、ストアユニット２５２、ＳｔＯｐが発行されたときにＯｐＩｎｆｏ値を保持し用いる。ＳＵ発行ステージ４３０の間のＯｐＩｎｆｏ値の読み出しは、オペランドフォワードステージ及びＳＵパイプラインの第１及び第２の実行ステージを通して下方向に向けて通過する。
アペンディクスＢの表Ｂ．３９は、データオペランド選択及びフォワーディングのために生成された信号を表している。
ＩＩＩ．Ｄ  レジスタオペレーションバンピング
スケジューラ２８０が、一般的に、インオーダー発行選択及び各タイプのオペレーションに対するプロセシングに基づいて、実行パイプラインを管理する。実行ユニットに対して発行された「通常の」オペレーションは、オペレーションが発行された順番でパイプラインを下向きに進む。オペレーションは、ＳＵもしくはＬＵパイプラインのオペランドフォワードステージで停止された場合、例えば、そのパイプラインに対して発行されるために現在選択されたオペレーションもまた、保持停止されるが、その理由は、オペレーションがプロセスパイプライン内で互いに通過しないからである。しかしながら、ＲｅｇＯｐが、レジスタユニット２５３もしくは２５４のいずれかのオペランドフォワードステージ内で、１つもしくは複数の利用できないオペランドの値を原因として、停止された場合、ＲｅｇＯｐは、プロセスパイプラインの外側にバンプされて、非発行状態へ戻される。バンピングによって、ＲｅｇＯｐの状態フィールドはｂ００００へ戻される。ＲｅｇＯｐが、オペランドフォワードステージ４４５の外へバンプされたとき、そのレジスタユニットに対して発行されるべく選択された他のＲｅｇＯｐが、バンプされたＲｅｇＯｐが生じた直後に、オペランドフォワードステージ４４０へ向けて、進む。同時に、バンプされたＲｅｇＯｐは、直ちに、必ずしも同じレジスタユニットではないが、あるレジスタユニットへ対して再び発行されるための適切な資格を得る。
バンピングは、以下の制約を仮定すれば、全てのＲｅｇＯｐｓに適応できる。第１に、ＲＵＸオンリーＲｅｇＯｐ（ＲＵＸオペランドフォワードステージ）が、ＲＵＸオンリーＲｅｇＯｐがＲＵＸに対する発行のために現在選択されているときに、バンプされていないことであり、その理由は、バンピングによって、ＲＵＸオンリーＲｅｇＯｐｓが、互いに関して順序通りに実行されるという制限を満たすことになるからである。第２に、ＲｅｇＯｐが１つ以上のサイクルに対してストールされるときに、ＲｅｇＯｐがバンプされるのみで、そうでない場合オペランドフォワードステージ４４０内にＲｅｇＯｐをより残すことにより、より有効に実行ユニットのリソースを用いる。表Ｂ．１２は、ＲｅｇＯｐバンピングを行うために、エントリの状態フィールドに変更を与える回路を表している。グローバル制御ロジック５２０は、グローバルバンプ信号ＢｕｍｐＲＵＸ及びＢｕｍｐＲＵＹを生成し、この２つの信号は、各々、信号ＲＵＸＡｄｖ０及びＲＵＹＡｄｖ０がアサートされることを強制し、適切な発行されたＲｅｇＯｐｓがオペランドフォワードステージ４４０へ向けて進むようになっている。グローバル制御ロジック５２０に関する以下の説明が、ＲｅｇＯｐがバンプされる条件を記載している。
ＩＩＩ．Ｅ  ロード／ストアオーダリング
スケジューラ２８０は、ＬｄＯｐｓとＳｔＯｐｓとの間の必要とされるオーダリングを保持する。特に、ロード・ストアオーダリングロジック５３４は、選択されたＬｄＯｐｓ及びＳｔＯｐｓの相対的な年齢を表すことにより、ロード及びストアのメモリの依存性のチェックをサポートする。ＬｄＯｐもしくはＳｔＯｐが、同じアドレスを、まだ完了していないより古いＳｔＯｐもしくはＬｄＯｐとしてアクセスする場合、ＬＵ及びＳＵ実行パイプラインの実行ステージ４６０内のオペレーションの保持は、適切なロード・ストアオーダリングを保つ。
ロード及びストアユニット２５１及び２５２は、アドレスコンパレータを含み、スケジューラ２８０のオーダリングロジック５３４は、バス５５６上に、ＳｄＳｔＯｐｓの相対的な年齢を表す情報を供給し、ＬｄＯｐもしくはＳｔＯｐのいずれかを第２実行ステージ４６０に保つかを決定するときに、適切なアドレスの比較のみが考慮される。相対的な年齢決定プロセスが、発行選択／オペランド情報ブロードキャストプロセスと同様である。ＬｄＯｐ及びＳｔＯｐパイプラインに対する実行ステージ４６０の第１フェーズ４６３の間に、オーダリングロジック５３４は、全てのスケジューラのエントリに対して最も古いものから最も新しいものまで、５個の「propagate-kill」スキャンを実行する。２個のスキャンは、ＬｄＯｐｓを、ＳＵステージ４６０のＳｔＯｐと比較し、３個のスキャンは、ＳｔＯｐｓをＬＵステージ４６０のＬｄＯｐと比較する。第２フェーズ４６４の間、実行ステージ４６０のＬｄＯｐ及び／もしくはＳｔＯｐに対するエントリは、関連する２つもしくは３つのスキャンチェーンからの結果をサンプルし、バス５５６に、所望の相対的な年齢の情報を直接表すグローバル信号をＳＣ＿ＳＵ２ＯＬＤＥＲ、ＳＣ＿ＳＵ１ＯＬＤＥＲ、ＳＣ＿ＳＵ０ＯＬＤＥＲ、ＳＣ＿ＬＵ２ＯＬＤＥＲ、及びＳＣ＿ＬＵ１ＯＬＤＥＲをドライブする。
実行ステージ４６０もしくはステージ４５０でのＬｄＯｐ、及び整合していないロードの第２部分の実行は、３つのカテゴリーのＳｔＯｐｓに対するＬｄＯｐ年齢を決定するのに３つのスキャンチェーンを必要とする。各スキャンチェーンは、１つのカテゴリ内の最も古いＳｔＯｐに対するスキャンを行う。１つのスキャンチェーンは、ステージ４６０内もしくはステージ４５０内のＳｔＯｐを検出し、整合していない記憶内容の第２の部分を実行する。他のスキャンチェーンは、ステージ４５０内のＳｔＯｐを検出し、第３のスキャンチェーンは、まだステージ４５０内にない最も古いＳｔＯｐを検出する。スキャンチェーン内の任意のポイントのスキャンビットの状態は、与えられたタイプの最もより古いＳｔＯｐが見つけだされたか否かを反映している。すなわち、ＬｄＯｐに対するエントリは、入力スキャンビットから、与えられたカテゴリ内の任意のＳｔＯｐに対するＬｄＯｐの年齢を求めることができる。入力スキャンビットＣｉｎが１のとき、スキャン信号は「キル」されておらず、与えられたカテゴリのより古いＳｔＯｐは存在しない。ロード・ストアオーダリングロジック５３４は、アドレスコンパレータからのいずれの信号が適切であるかを求める。
ステージ４６０もしくはステージ４５０のＳｔＯｐ及び、整合していないストアされた値の第２の部分の実行が、２つのカテゴリのＬｄＯｐに対するその年齢を決定するために、２つのスキャンチェーンを必要とする。１つのスキャンチェーンは、ステージ４６０もしくはステージ４５０での任意のＬｄＯｐを検出し、整合していないロードの第２の部分を実行する。第２のスキャンチェーンは、まだステージ４６０内にない任意のＬｄＯｐｓを検出する。問題とされているＳｔＯｐをホールドするエントリに対する入力スキャンビットＣｉｎに基づいて、オーダリングロジック５３４は、アドレスコンパレータからのどの信号が不適切であるかを求める。
各スキャンチェーンは、最も古いスケジューラのエントリから最も新しいものまで「propagate-kill」チェーンからなる。表Ｂ．４０（アペンディクスＢの）は、ロード・ストアオーダリングを表している。
ＩＩＩ．Ｆ  アボートハンドリング
アボートサイクルが生じたとき、スケジューラ２８０がフラッシュされる。全てのＯｐクワッドは、全てのＯｐクワッドフィールドＯｐＱＶをクリーンすることによって無効化される。エントリのフィールドはまた、無害な値に設定される。エントリ内のフィールドは、クリーンされなければならず、その理由はフィールドＯｐＱＶが、Ｏｐ  Ｑｕａｄローディング及びシフティングの制御に影響するのみで、スケジューラ２８０内のその他のオペレーションは、フィールドＯｐＱＶを無視し、そのエントリが有効であると仮定するからである。スケジューラ２８０内の論理的に無効なオペレーションは、有効に変更されるが、有効だがしかし無害なオペレーションに変更される。これを行うために、オペレーションの状態フィールドが、完了されるように設定され、オペレーションは発行もしくは実行されないようになっている。ＤｅｓｔＢＭ及びＳｔａｒＭｏｄフィールドは、オペレーションが任意のレジスタバイトもしくは状態フラグを変更することがないことを表すようにセットされる。このような状況に於いて、その他の全てのフィールドは、「害」を起こすことなく任意の値を有することができる。そのようなオペレーションは、実質上、Ｎｏ−ｏｐオペレーションである。
新たなＯｐクワッドが、スケジューラ２８０内にロードされ、スケジューラ２ｌ８０がフラッシュされた後すぐに、この新たなＯｐクワッドは、フラッシュされ、置き換えられフラッシュされる必要のある既存のＯｐクワッドの任意のものとは無関係であり、代わりに、その新たなクワッドは、論理的に、アボートの後の第１の新たなＯｐクワッドである。これは、アボートもしくは誤って予測されたＢＲＣＯＮＤの後に起こる。アボートサイクルの後の第１の新たなＯｐクワッドは、除外条件を原因として遅延される。
実際、後続のシーケンスのイベントは、アボートサイクルの終わりで起こる。スケジューラ２８０内の記憶素子は、システムのクロック信号に十分に同期しており、次のサイクルの境界がくるまで、入力に応答して変化することはない。第１に、フィールドＯｐＱＶ、Ｓｔａｔｅ、ＤｅｓｔＢＭ、及びＳｔａｒｔＭｏｄは、上述されたように起こる。次に、Ｏｐクワッドの全て、一部もしくは１つの位置だけシフトダウンするかＯｐクワッドのいずれもがシフトダウンしないか、新たなＯｐクワッドがスケジューラの一番上のエントリ内へロードされる。除外に関連したアボートに対して、新たなＯｐクワッドが、無効化されて、全てのスケジューラＯｐクワッドがフラッシュされているので、発生したシフティングは、一般的にドンドケアである。ＢＲＣＯＮＤ関連のアボートに対して、新たなＯｐクワッドが有効もしくはエンプティである。
アボート信号は、２つの種類すなわち「早い」及び「遅い」がある。早いバージョンは、ＳＣ  ＥＡｂｏｒｔと呼ばれ、遅いバージョンはＳＣ  Ａｂｏｒｔと呼ばれている。早いアボート信号は、スケジューラ２８０のセクションへ転送され、このセクションではアボートのイミーディアット値の通知が必要とされる。遅いバージョンでは、早いバージョンと同じであるが、フリップフロップによって１サイクルだけチェーンされ、より広く転送される。
ＩＶ．Ａ  外部ロジックによって用いられるスケジューラ情報
グローバル制御ロジック５２０、及び、実行ユニット２５１から２５４などの外部ロジックが、フェッチオペランド値のブロードキャストフェーズ及びオペランド転送フェーズの間に、スケジューラ２８０によって提供される様々な情報を用いる。ほとんどのタイプのオペランドに対して、ブロードキャスト及びオペランド転送フェーズは、実行パイプラインの発行及びオペランド前進ステージの間にある。ブロードキャストフェーズの間、そのオペランドがフェッチされるオペレーションに関する情報が、適切なＯｐＩｎｆｏバス５５１へ読み出され、そのオペランドにソースレジスタ（Ｓｒｃ１及びＳｒｃ２）とバイトマーク（Ｓｒｃ１ＢＭ及びＳｒｃ２ＢＭ）フィールドが、２つの関連するＯｐｒｎｄＩｎｆｏバス５５２へ読み出される。ＳｔＯｐｓのデータオペランドに対して、ブロードキャストフェーズ及びオペランド転送フェーズが、ＳＵステージ４５０及び４６０の間にある。ＳｔＯｐに対するデータオペランドへの情報が、ＯｐｒｎｄＩｎｆｏバス５５２へ駆動され、対応するＯｐＩｎｆｏは存在しない。記憶ユニット２５２は、ＳｔＯｐが発行されたときからの情報（オペレーション）を保持する。ブロードキャストオペランド情報は、次のフェーズの結合の間に用いられる。オペレーション情報は、オペレーション情報、実行ユニットのパイプラインを単に下に向けて通る。レジスタユニット２５３及び２５４の場合、ＯｐｒｎｄＩｎｆｏバス５５２からの２ソースバイトマークＳｒｃ１ＢＭ及びＳｒｃ２ＢＭビットは、パイプラインを下に向けて通過する。オペランド転送フェーズの間、オペランド値のソースであるオペレーションの各々に関する情報が、各オペランドバス５５４に対応するＯｐｒｎｄＳｔａｔバス５５３へ読み出される。ソースオペレーションの状態を記述した情報が、このフェーズの間直接的に用いられ、かつ唯一用いられる。表Ｂ４１は、様々な時刻でのスケジューラ２８０の情報読み出しを表している。
ＩＶ．Ｂ  グローバル制御ファンクション
これまで、ロジック、ステージエレメント、及びバスが、スケジューラ２８０のコアを構成するように説明されてきた。スケジューラ２８０は、また、スケジューラ２８０内でのシフト、オペレーションの「フィーディング」、及び実行ユニット２５４から２５１に対するオペランドのフィーディングをコーディネートするグローバル制御ユニット５２０をも含む。以下の記述は、オペランドフェッチプロセスの４つのフェーズに対するグローバル制御ロジック５２０について説明している。
発行選択フェーズの間、外部事項のみが、各プロセスパイプラインに対する発行のためにオペレーションが選択されたか否かに関する。的確なオペレーションを見いださなかった各々の発行セレクションに対して、対応するスケジューラのエントリは、ＯｐＩｎｆｏ及びＯｐｒｎｄＩｎｆｏバス５５１及び５５２に、ドライブしない。このプロセスパイプラインに対するこれらのバスの値及び後続の３つのフェーズは、ドントケアとなっている。唯一必要とされることは、実行パイプラインのオペランド前進ステージ４４０に対するオペレーション有効ビット（ＯｐＶ）が、このパイプラインステージのオペランドフォワードステージ４４０がエンプティであることを表すために、０となることである。
オペランドフォワーディングステージのオペレーション有効（ＯｐＶ）ビットは、有効なオペレーションがこの実行ユニットに対して発行されたか否かを表している。各々の発行選択スキャンチェーンに対する出力スキャンビットＣｏｕｔは、この発行ステージでのオペレーションに対するＯｐＶビットを生成する。表Ｂ．４２は、オペレーション有効もしくはＯｐＶビットを表している。グローバル信号ＸＸＡｄｖ０は、エンプティなオペレーションの進行に続いてパイプラインレジスタへのＯｐＶビットのローディングを制御する。アボートサイクルの間、全てのパイプラインレジスタは、無条件にクリアされて実行ユニットをフラッシュする。
ブロードキャストフェーズは、そのラッチ情報（すなわちＯｐｒｎｄＩｎｆｏ及びＯｐＩｎｆｏ値）がスケジューラ２８０から読み出されるパイプラインレジスタを制御する以外には、特別重要なグローバル制御ロジックを必要としない。
オペランド選択フェーズの間、２つの外部アクティビティが行われる。第１に、ソースレジスタの個数が（すなわち、ラッチされたＯｐｒｎｄＩｎｆｏの値のＳｒｃＹＲｅｇフィールド）が、前のフェーズで読み出されたものが、レジスタファイル２９０をアクセスするために用いられる。これは、スケジューラ２８０内のオペランド選択スキャンとパラレルに行われる。９個までのソースオペランドが各サイクルでフェッチできる。したがって、レジスタファイル２９０は、９個の対応する読み出しポートを有し、各々のポートはオペランドバス５５４の内の１つと対応している。これらのポートに対して提供されたレジスタフィールドは、ＸＸｓｒｃＹ及びＳＵｓｒｃＳｔであり、ここでＸＸ＝｛ＬＵ，ＳＵ，ＲＵＸ，ＲＵＹ｝ａｎｄＹ＝｛１，２｝、である。
オペランド選択フェーズの間の第２の外部アクティビティは、オペランドバス５５４とオペランド情報バス５５２の各々に対して、スケジューラ２８０もしくはレジスタファイル２９０が次のフェーズの間の値を提供するか否かを決定することである。各スケジューラエントリは、それ自身に対して、バスを駆動するか否かを直接決定するので、グローバル制御ロジック５２０に対する唯一の関心事項は、レジスタファイル２９０がイネーブルされるか否かということである。レジスタファイル２９０のイネーブルは、オペランド選択フェーズの間に任意のエントリが選択されたか否かを表す出力スキャンビットＣｏｕｔに基づく。オペランド選択スキャンチェーンの最後のスキャン信号Ｃｏｕｔが、対応するオペランドバス５５４に対してエントリが選択されていないことを表した場合、グローバル制御ロジックは、レジスタファイル２９０をイネーブルして、対応するオペランドバス５５４とオペランド情報バス５５２を駆動する。オペランドバス５５４の信号を記述する式が、アペンディクスＢ．３５及びＢ．３６に表されている。オペランド転送フェーズの間、グローバル制御ロジック５２０は、ＲｅｇＯｐの「バンピング」と、実行ユニットの全ての実行ユニット入力マルチプレクサ１０１０と、フェッチされた各オペランド値に対する有効性の決定と、グローバルパイプラインレジスタの生成に対するそのファクタが信号ＸＸＡｄｖ０を制御する信号ＨｏｌｄＸＸ０の生成とを制御する。
ＲｅｇＯｐのバンピングの１回の実施は、グローバルバンプ信号ＢｕｍｐＲＵＸ及びＢｕｍｐＲＵＹの生成及び信号ＲＵＸＡｄｖ１及びＲＵＹＡｄｖ１のアサートを行うエントリ及びグローバル制御ロジック５０２の状態フィールドを変更する各スケジューラエントリ内のロジックを分離することである。ＢｕｍｐＲＵＸ／Ｙ信号の生成は、オペランド転送フェーズの間に、レジスタユニットのソースオペランド（すなわち、ＯｐｒｎｄＳｔａｔ  ＲＵＸｓｒｃＹ及びＯｐｒｎｄＳｔａｔ  ＲＵＹｓｒｃＹ、ここでｓｒｃＹ＝｛ｓｒｃ１，ｓｒｃ２｝）に対するスケジューラ２８０の読み出しを行うＯｐｒｎｄＳｔａｔ値に基づく。とりわけ、各オペランドソースに対するフィールド状態及びタイプが、ソースオペレーションが有効なオペランド値を提供することから少なくとも２サイクルだけ離れているか否かを決定するべく試験される。もし、いずれのソースオペレーションも有効なオペランドの値を提供することから少なくとも２サイクル離れている場合、依存したＲｅｇＯｐは、オペランド前進ステージからバンプアウトされ、ＲｅｇＯｐは、ＲｅｇＯｐがオペランド前進ステージへ向けて進んでいないときに、オペランドを提供することから少なくとも２サイクルだけ離れている。ＬｄＯｐは、ＬｄＯｐが第１の実行ステージへ向けて前進していないとき、オペランドを提供することから少なくとも２サイクル離れている。
表Ｂ．４３は、信号ＢｕｍｐＲＵＸ／Ｙの生成を表しており、かついずれがデッドロック状態であるかを取り扱うための追加的なタイムアウト事項を含む。オペレーションの後の、ＲＵＸ及びＲＵＹオペランド前進ステージの生成信号ＲＵＸ／Ｙタイムアウトに関連する３ビットカウンタが、タイムアウト期間よりも長い間オペランドフォワードステージに保持される。１つの例としてＲＵＸをあげると、ＲＵＸオペランド前進ステージがロードされるときは、有効なオペレーションであるか無効のオペレーションであるかに関わらず、常に、関連するカウンタはスタート値にリセットされる。他の全てのサイクルの間、カウンタが減数される。このカウンタが０００に達したとき、ＲＵＸタイムアウトが、アサートされて、オペレーションが長すぎる期間にわたってホールドアップされたことが表される。
ＲＵＸ／Ｙタイムアウト信号によって、レジスタユニット２５３及び２５４のオペランドフォワードステージに対する対応するオペレーション有効信号ＯｐＶがセットされる。例えば、信号ＲＵＸタイムアウトは、直ちに、信号ＯｐＶ  ＲＵＸ  ０を、０にし、これによって、ＲＵＸオペランドフォワーディグステージを再びロードするためにパイプライン制御信号ＲＵＸＡｄｖ０がアサートされる。信号ＯｐＶ  ＲＵＸ  ０は、信号ＲＵＸＡｄｖ１もアサートされている間に、ＲＵＸ実行ステージ４５０がバンプされたＲｅｇＯｐをチェックしないことを確実とする。
オペランド転送フェーズ４４２の間に起こる第２グローバル制御ファンクションは、実行ユニット２５１から２５４に接続された各ソースオペランド入力マルチプレクサ１０１０に対する制御信号を生成することである。上述されたように、各々の５：１マルチプレクサ１０１０は、対応するオペランドバス５５４もしくは、結果バス５６１から５６４のうちの１つのバスからオペランドを選択して、オペランドレジスタ１０２１から１０２４もしくは１０３１から１０３４のうちの対応するオペランドレジスタへロードする。オペランド転送フェーズ４４２の間、制御ロジック５２０は、バス５５２からのオペランド状態信号ＯｐｒｎｄＳｔａｔを用いて、マルチプレクサ１０１０の各々に対する制御信号を生成し、オペランドレジスタへロードされるべきオペランドＯｐｒｎｄＳｔａｔ  ＳＵｓｒｃＳｔ及びＯｐｒｎｄＳｔａｔ  ＸＸｓｒｃＹを選択し、ここでＸＸ＝｛ＬＵ，ＳＵ，ＲＵＸ，ＲＵＹ｝ａｎｄ  Ｙ＝｛１，２｝、である。とりわけ、グローバル制御ロジック５２０は、各オペランドソースに対するステート及びタイプを試験し、ソースオペランドがその実行が完了されたか否かを求め、もし完了されていない場合どの実行ユニットがそのソースオペレーションを実行中であるかを求める。オペランドバス５５４は、ソースが、レジスタファイル２９０、完了されたオペレーション、もしくはそれ自身にｓｒｃのイミーディアット値を提供するオペレーションでのいずれかである場合に、選択される。そうでない場合、ソースオペレーションのタイプに対応する実行ユニットからの結果バスが、選択される。結果バスからのオペランドは、そのサイクル内でソースオペレーションが完了しない限り有効とはならない。アペンディクスＢの表Ｂ．４４は、各オペランドに対する選択信号の生成を表している。
オペランド転送フェーズの間に起こる第３のグローバル制御ファンクションは、実行ユニットソースオペランドレジスタに対して提供される９つのオペランド値の各々の有効性の決定である。ソースオペランド値が有効であるか否かを表すために、各ソースオペランドに対して信号が生成される。関連する実行ユニット入力マルチプレクサ１０１０の制御と同様に、オペランドの有効性の決定は、バス５５３からのＯｐｒｎｄＳｔａｔの値のフィールド状態及びタイプに基づいている。オペランドが有効である場合には、ソースオペレーションはすでにその実行が完了されているか、もしくは現在実行中でなければならない。さらに、ＯｐｒｎｄＳｔａｔの値のＤｅｓｔＢＭフィールドは、フェッチされているオペランドに対する、ラッチされたＯｐｒｎｄＩｎｆｏの値のフィールドＳｒｃ１ＢＭもしくはＳｒｃ２ＢＭと比較される。有効であるべきオペランドに対しては、ソースオペランドのバイトマークは、必要とされるバイトマークＳｒｃ１ＢＭもしくはＳｒｃ２ＢＭのスーパーセットでなければならない。ｓｒｃ２のイミーディアット値は常に有効である。信号ＯｐｒｎｄＩｎｖｌｄ  ＸＸｓｒｃＹは、実行ユニットＸＸに対するオペランドｓｒｃＹが有効であることを表すためにアサートされる。表Ｂ．４５は、信号ＯｐｒｎｄＩｎｖｌｄ  ＸＸｓｒｃＹを生成するロジックを表している。
オペランド転送フェーズの間に起こる第４のグローバル制御ファンクションは、前進のための必要とされたオペランドが有効でないときに、パイプラインのステージ内でオペレーションを保持するパイプライン制御信号の生成である。信号ＳＣ  ＨｏｌｄＸＸ０は、ソースオペランドが利用可能でないときに、実行ユニットＸＸのオペランド信号ステージ４４０のオペレーションをホールドする。ＳｔＯｐｓは、データオペランドが利用可能でない場合でも、オペランドフォワードステージ４４０の外に進むが、信号ＳＣ  ＨｏｌｄＳＵ２は、データオペランドが有効でない場合には、第２実行ステージ４６０のＳｔＯｐを、ホールドする。ｃｃ−ｄｅｐ  ＲｅｇＯｐｓは、要求される条件コードが有効でないとき、オペランドフォワードステージ４４０内へホールドアップされる。表Ｂ．４６は、信号ＳＣ  ＨｏｌｄＸＸ０及びＳＣ  ＨｏｌｄＳＵ２を生成するロジックを表している。
Ｖ．状態フラグ
ｘ８６アーキテクチャフラグ及びマイクロアーキテクチャフラグの両方に対する情報フラグロジック５３８は、３つの領域の機能を含む。すなわちｃｃ−ｄｅｐ  ＲｅｇＯｐｓに対する状態フラグオペランド値のフェッチ、ＢＲＣＯＮＤの分解のための状態フラグ値のフェッチ、アボート不可能なＲｅｇＯｐｓの先行するＢＲＣＯＮＤに対する同期化を含む。オペランド選択ロジック５３２及びＬｄＯｐ−ＳｔＯｐオーダリングロジック５３４とは異なり、状態フラグハンドリングロジック５３８は、スケジューラのエントリ全体にわたって広がることはない。関連するオペレーションに対する状態フラグハンドリングは、状態フラグにアクセスするオペレーションがスケジューラ２８０内の特定の行内にあるときのみ起こる。Ｃｃ−ｄｅｐ  ＲｅｇＯｐｓは、状態オペランドのフェッチングが生じるサイクルの間に（すなわち、ＲＵＸオペランドフォワードステージの間に）、行３内になければならない。ＢＲＣＯＮＤ及びアボート不可能なＲｅｇＯｐｓは、分岐評価ユニット２５７による分析の間、及び、ＲＵＸオペランド前進ステージの間、各々、行４内になければならない。したがって、ｃｃ−ｄｅｐ及びアボート不可能ＲｅｇＯｐｓは、行３及び行４へ向けて、各々、シフトダウンされるまで、ＲＵＸオペランド前進ステージ内にホールドアップされなければならず、行３及び４のＯｐクワッドのシフトは、それらの行のＣｃ−ｄｅｐ及びアボート不可能ＲｅｇＯｐｓが、ＲＵＸ実行ステージ内へ進めるまで、禁止される。ＢＲＣＯＮＤは、評価のために必要とされる状態フラグが有効となるまで、行４内にとどまる。
ｃｃ−ｄｅｐ  ＲｅｇＯｐｓ、アボート不可能ＲｅｇＯｐｓ、及びＢＲＣＯＮＤの実行及び評価を、オペレーションがスケジューラ２８０の特定の行にあるときにのみ限定することにより、状態フラグのハンドリングロジック５３８が簡単化される。例えば、状態フラグハンドリングロジック５３８は、底部の３つのスケジューラの行に於いてのみ必要とされ、底部の２つの行のみが適切な状態フラグの値を求めるために用いられる。さらに、同じ状態フラグの値が、行３のｃｃ−ｄｅｐ  ＲｅｇＯｐと行４のＢＲＣＯＮＤとの両方によって占有できる。アボート不可能ＲｅｇＯｐとＢＲＣＯＮＤとの同期化は、ＢＲＣＯＮＤが評価される位置が固定されているので、簡単化される。
ｃｃ  ｄｅｐ  ＲｅｇＯｐｓ、ＢＲＣＯＮＤ、及びアボート不可能ＲｅｇＯｐｓを、Ｏｐクワッド内で互いに配置するときに加えられる複数の限定によって、ロジックがさらに簡単化される。限定は、通常、ｅｍｃｏｄｅのためにコード規則へ翻訳されるが、ある場合には、１サイクルの間に複数のマイクロ命令のデコーディングをＭａｃＤｅｃ２４２に対して強制する。限定は、Ｏｐクワッドが以下のことを含むことを必要とする。
（１）ＢＲＯＣＯＮＤの後にＲｅｇＯｐｓを変更するｃｃがないこと。
（２）ｃｃ−ｄｅｐＲｅｇＯｐの前ＲｅｇＯｐｓを変更するｃｃがないこと。
（３）アボート不可能なＲｅｇＯｐｓとＢＲＣＯＮＤとがともに存在しないこと。
（４）ただ１つのｃｃ−ｄｅｐ  ＲｅｇＯｐがあること。、
（５）ただ１つのＢＲＣＯＮＤがあること。
（６）アボート不可能なＲｅｇＯｐが唯一ただ１つあることを含むこと。
これらの制限とともに、行３内のｃｃ−ｄｅｐ  ＲｅｇＯｐに対して正しい、かつ行４のＢＲＣＯＮＤに対しても正しい状態フラグがあることであり、かつ同じ状態フラグ回路が、２つの目的ではたらく。
Ｖ．Ａ  状態フラグフェッチ
状態フラグハンドリングロジック５３８は、フィールドＳｔａｔＭｏｄの４ビットに対応する状態フラグの４個の独立したグループをフェッチする。アペンディクスＢの表Ｂ．４７は、４個のフラググループと、それらの対応するフィールドＳｔａｔＭｏｄを特定している。あるオペレーションに対して各グループが有効であるか否かは、そのグループを変更できたより古いオペレーションが完了したか否かに応じて、別個に、決定される。
状態フラグの値を、レジスタユニット２５３もしくは２５４のいずれかから、直接、レジスタユニット２５３に入るｃｃ−ｄｅｐ  ＲｅｇＯｐへ通過させることは、例示された実施例に於いてはサポートされていない。したがって、状態フラグは、ＲｅｇＯｐを変更する条件コードの完了に続くサイクルを有効化する。これにより、状態フラグのある特定のグループを変更するＲｅｇＯｐと、そのグループを利用する後続のｃｃ−ｄｅｐ  ＲｅｇＯｐの実行との間に１サイクルの最小の遅れが生み出される。この遅れの統計学的性能の影響は、最小であり、その理由は、ｃｃ−ｄｅｐ  ＲｅｇＯｐｓが、通常のｘ８６コードをデコードするときに、比較的レアであるからである。さらに、遅れの任意の影響が、命令デコーダ２４０がＲＩＳＣ８６オペレーションを並べてｃｃ−ｄｅｐＲｅｇＯｐに対して必要とされる条件コードを変更するＲｅｇＯｐのすぐ後に続くＯｐクワッドでのｃｃ−ｄｅｐ  ＲｅｇＯｐを回避する場合に、無視することができる。
各サイクルの間に、スケジューラの行３と行４との間の境界に於ける状態フラグの値の有効な集合が計算される。この計算された状態フラグは、決定された状態フラグと、行４及び５のオペレーションによって引き起こされた状態フラグに対する全ての変化を含む。上述されたように、ＲｅｇＯｐｓのみが状態フラグを変更する。各ＲｅｇＯｐは１つ、２つ、３つ、もしくは４つの全てのグループの状態フラグを変更できるので、状態フラグの計算は、４つのグループの各々とは別個に行われる。各グループに対して、計算の結果が、フラグの値と、そのグループのセットに対応するＳｔａｔＭｏｄビットを備えた最も新しいＲｅｇＯｐからの状態の情報とからなる集合からなる。ＲｅｇＯｐに対する状態フィールドは、ＲｅｇＯｐが完了し、有効フラグの値を提供するか否かを表している。
状態フラグロジック５３８は、表Ｂ．４７に例示されているように、４つのグループの状態フラグに関連する４つの有効ビットＳＴＡＴＵＳＶと８個の状態フラグビットＳＴＡＴＵＳとを生成する。これらの１２ビットは、バス５５７を介して、ＢＲＣＯＮＤを評価する分岐評価ユニット２５７と、ｃｃ−ｄｅｐ  ＲｅｇＯｐｓを取り扱うレジスタユニット２５３内のロジックとへ送られる。レジスタユニット２５３と分岐評価ユニット２５７は、有効ビットＳＴＡＴＵＳＶから、必要とされる状態フラグが有効か否かを、そしてそれらは有効な場合、状態ビットＳＴＡＴＵＳを用いている。行３のｃｃ−ｄｅｐ  ＲｅｇＯｐを実行し、行４のＢＲＣＯＮＤを評価する。グローバル制御ロジック５２０は、必要とされる状態フラグが有効か否かに基づいてシフト制御信号を生成する。
レジスタオペランドの値のフェッチに対するものと同様のプロセスが、各状態フラグのグループを、フェッチし、スケジューラ２８０の行３の最後のオペレーションに対する適切なフラグの値を得る。以下の説明で、ＯｐＸは、スケジューラ２８０のＸエントリを表し、ここでＸ＝０は、スケジューラ２８０内の最も新しいオペレーションを表し、Ｘ＝２３は、スケジューラ２８内の最も古いオペレーションを表す。例えば、行４は、Ｏｐ１６、Ｏｐ１７、Ｏｐ１８、及びＯｐ１９を含む。各フラググループに対して、Ｏｐ１６からＯｐ２３までの伝達キルスタイルスキャンが、これらのフラグのグループをセットするために、ＳｔａｔＭｏｄを伴った第１のオペレーションをロケートし、そのエントリの完了した状態ビット（すなわちＳ３）と、適切な集合のフラグの値とが読み出される。このグループに対する状態Ｖビット、単に、見つけだされたエントリからの状態ビットＳ３である。そのようなオペレーションが見いだされない場合、所望のフラグの値は、アーキテクチャ状態フラグレジスタから読み出され、信号ＳＴＡＴＵＳＶは、セットされて、そのグループが有効であることを表す。表Ｂ．４８は、各フラググループに対する状態フラグフェッチロジックを表している。
Ｖ．Ｂ  ｃｃ−Ｄｅｐ  ＲｅｇＯｐｓへの状態フォワーディング
各サイクルの間、グローバル制御ロジック５２０は、行３内の４つのオペレーションを試験し、それらのうちのいずれがｃｃ−ｄｅｐ  ＲｅｇＯｐであるか否かを求める。１つのオペレーションがｃｃ−ｄｅｐＲｅｇＯｐである場合、そのＲｅｇＯｐがデコードされて、どのグループの状態フラグが必要であるかが求められ、状態Ｖビットがチェックされて、それらのグループの全てが有効か否かが求められる。同時に、状態［７：０］が、ＲＵＸ実行ユニットへ、無条件に送られる。必要とされるフラググループの任意のものが、現在、有効でない場合、ｃｃ−ｄｅｐ  ＲｅｇＯｐがＲＵＸ実行ステージへの前進からホールドアップされ、行３の外側へのＯｐクワッドのシフトが禁止される。必要とされるフラググループの全てが現在有効な場合、ｃｃ−ｄｅｐ  ＲｅｇＯｐが許可されて、状態オペランドのフェッチに関する限り、ＲＵＸ実行ステージへの前進が行われる。ｃｃ−ｄｅｐ  ＲｅｇＯｐは、オペランドが利用できないので、依然として前進が妨げられている。ｃｃ−ｄｅｐ  ＲｅｇＯｐが、実行ステージ４６０へ進まない場合、行３のシフトが禁止される。
行３から行５に実行されないｃｃ−ｄｅｐ  ＲｅｇＯｐが存在せず、ＲＵＸオペランド前進ステージにｃｃ−ｄｅｐ  ＲｅｇＯｐがある場合、ＲｅｇＯｐが無条件にオペランド前進ステージ内にホールドアップされる。行３にｃｃ−ｄｅｐ  ＲｅｇＯｐがまだ実行されていない場合、しかし、ＲＵＸオペランド前進ステージにｃｃ−ｄｅｐ  ＲｅｇＯｐが存在しない場合、行３のシフトは禁止される。表Ｂ．４９は、シフト及びオペレーションの前進を制御するロジックが表されている。
Ｖ．分岐予測分解
各サイクルの間、ＢＲＣＯＮＤが行４で見つけられた場合、条件コード（ｃｃ）フィールド（そのＢＲＣＯＮＤの）がデコードされて、予測条件の値が求められる。この予測条件の値は、関連する有効なビットが、選択された条件が有効であることを表示している場合、条件フラグハンドリングロジック５３８からの状態フラグから導き出された３２個の条件の値のうちの選択された１つの条件の値と比較される。選択された条件が有効でない場合、行４のＯｐクワッドのシフトが禁止され、ＢＲＣＯＮＤの評価が、次のクロックサイクルで再び試みられる。選択された条件が有効な場合、予測された条件と選択された条件との比較により、予測が正しいか否かが表される。
ＢＲＣＯＮＤが誤った予測であることが見いだされた場合（すなわちパイプラインの再スタートが必要な場合）、再スタート信号が、ＢＲＣＯＮＤがＭａｃＤｅｃ２４２からのものであるか、内部のもしくは外部のemcodeからのemcodeオペレーションであるか否かに基づいてアサートされる。さらに、適切なｘ８６マイクロ命令もしくはemcodeベクトルのアドレス、及び関連する戻りアドレススタックＴＯＰの値が、生成されて、デコーディングを再スタートさせるために命令デコーダ２４０へリターンされる。
非アボート可能ＲｅｇＯｐｓと先行するＢＲＣＯＮＤとの間の同期を取り扱うロジックの利益のために（次の２つの節で説明される）、デコードは、誤って予測されたＢＲＣＯＮＤ内に保持され、一方そのデコードは、アウトスタンドの状態に、（すなわち、アボートサイクルが起こるまで）とどまる。さらに、アウトスタンドのあらかじめ誤って予測されたＢＲＣＯＮＤは、アボートサイクルが起こるまで、新たなＯｐクワッドのローディングをホールドアップする。ＢＲＣＯＮＤが正しく予測された場合、唯一実行されるアクションは、ＢＲＣＯＮＤの状態ビットＳ３をセットすることであり、ＢＲＣＯＮＤが完了したことが表される。表Ｂ．５０は、ＢＲＣＯＮＤの評価を取り扱うロジックを表している。
ＶＩ．非アボート可能なオペレーションの同期化
各サイクルの間に、非アボート可能なＲｅｇＯｐが行４で見いだされた場合、スケジューラ２８０は、任意の先行する誤って予測されたＢＲＣＯＮＤをチェックする。emcodeのコーディング制約を原因として、任意の先行するＢＲＣＯＮＤは、より下の行内になければならず、すなわち全てが分解されていなければならない。さらに、任意の現在分解されているＢＲＣＯＮＤ（行４の）は、非アボート可能なＲｅｇＯｐの後にあり、すなわち無関係である。
誤って予測されたＢＲＣＯＮＤがない場合、非アボート可能なＲｅｇＯｐが、ＲＵＸ実行ステージを通して進むことが許可され、一方、ＲｅｇＯｐは、必要とされるオペランドが未だに利用可能でない場合には、前進できない。ＲｅｇＯｐがＲＵＸ実行ステージ内へ向かって直ちに前進しない場合、ＲｅｇＯｐは、依然として行４の外側へのシフトが許可されている。
行４及び行５が、実行されていない非アボート可能なＲｅｇＯｐを含んでおらず、しかし、ＲＵＸオペランド前進ステージ内に非アボート可能なＲｅｇＯｐが存在しない場合、非アボート可能なＲｅｇＯｐが、非アボート可能なＲｅｇＯｐが行４に達するまで、オペランド前進ステージ内に無条件にホールドアップされる。行４内の非アボート可能なＲｅｇＯｐが依然として実行されていない場合、かつ、非アボート可能なＲｅｇＯｐがＲＵＸオペランド前進ステージ内にないか、もしくは実行されていない非アボート可能なＲｅｇＯｐが行５内にある場合、行４及び行５のシフトが禁止される。表Ｂ．５１は、非アボート可能なＲｅｇＯｐｓのハンドリングのためのロジックを表している。
ＶＩＩ．自己変更コードのハンドリング
ストアキュー２７０は、決定されるべきデータに対するリニアな及び物理的なアドレスのいくつかのビットを供給する。このストアアドレスが、Ｏｐクワッドに対する任意の命令アドレスと一致する場合、命令に対する書き込みが、命令を変更し、スケジューラ２８０内の現在存在するデコードされたオペレーションが正しくないことがある。この正しくないオペレーションは、そのオペレーションの結果が決定される前に修正されなければならない。
本発明の例示的な実施例では、自己変更コードサポートロジック５３６が、ストアキュー２７０からのアドレスビットと、各Ｏｐクワッドの命令アドレス（もしくは、Ｏｐクワッドの命令が異なるページからのものである場合にはアドレス）と比較する。比較によって、コードの変更の可能性が消去される場合、ロジック５３６はナッシングである。その可能性がうち消されない場合、ロジック５３６は、スケジューラ２８０をフラッシュし、最後に決定された命令のアドレスからフェッチ／デコードプロセスを再スタートさせる。論理的に、スケジューラ２８０では、自己変更コードの検出が、「トラップペンディング」を表す信号へのトラップもしくはファクタの一種として取り扱われる。表Ｂ．５２は、自己変更コードのハンドリングロジック５３６の例示部分を表している。
ＶＩＩＩ．オペレーションコミットメントユニット
ＯＣＵ（オペレーションコミットメントユニット）２６０は、一般に、スケジューラ２８０内の最後の行もしくは最後から２番目の行（行４もしくは行５）内のオペレーションに対してのオペレートを行う。ＯＣＵ２６０の主な機能は、オペレーションの結果をコミットし（もしくは永久なものとし）、次に、スケジューラ２８０からＯｐクワッドをリタイアすることである。ＯＣＵ２６０はまた、アボートサイクルを開始する。
多くのタイプの結果もしくは状態の変化は、オペレーションの実行を停止することができる。主なタイプの変更は、アボート可能であり、レジスタの変更、状態フラグの変更、及びメモリの書き込みを含む。ＲＩＳＣ８６命令セットでは、レジスタの変更は、全てのＲｅｇＯｐｓ、ＬｄＯｐｓ、ＬＩＭＭＯｐｓ、ＬＤＫオペレーション及びＳＴＵＰＤ  ＳｔＯｐｓからの結果をレジスタが変更する。状態フラグ変更は、「．ｃｃ」ＲｅｇＯｐｓから得られ、メモリの書き込みは、ＳＴｘｘ  ＳｔＯｐｓから得られる。スケジューラ２８０及びストアキュー２７０は、関連するオペレーションがコミットもしくはリタイアされるまで、一時的に、レジスタ及び状態の結果をスケジューラ２８０のエントリに格納し、メモリの書き込みデータをストアキュー２７０のエントリに格納することにより、アボート可能な状態の変化をサポートする。オペレーションのコミットは、状態の変更を半永久的なものとする。一方、新たな状態の値が、スケジューラ２８０及びストアキュー２７０内にとどまり、状態の値が、必要に応じて個々のオペレーションに向けて進められる。
その他の全ての状態の変化は、非アボート可能であり、かつ非アボート可能なＲｅｇＯｐの実行から得られる結果である。非アボート可能な状態の変化は、セグメントレジスタ及び非状態ＥＦｌａｇｓビットなどの標準ｘ８６レジスタに対する変化と、ＲＩＳＣオペレーションの実行のためのマイクロアーキテクチャレジスタに対する変化を含む。非アボート可能な状態の変化は、非アボート可能なＲｅｇＯｐ実行の間にすぐに起こることができ、デコーダ２４０とスケジューラ２８０とは、それを取り囲むオペレーションを伴った非アボート可能なオペレーションの十分な同期化を確かにする原因となる。
ＶＩＩＩ．Ａ  コミットメント
各サイクルの間、ＯＣＵ２６０は、スケジューラ２８０の行４及び／もしくは５内のオペレーションを試験し、可能な限り多くのオペレーションの結果を決定するようにコミットすることを試みる。Ｏｐクワッド内の状態の変化は、１つのサイクルもしくはいくつかのサイクルにわたってコミットされてもよい。一番下の行のＯｐクワッドのオペレーションの全てが、コミットされたかもしくは順番にコミットされている場合、Ｏｐクワッドは、Ｏｐクワッドを行４から行５へシフトさせてかつ行５をオーバーライトすることにより、現在のサイクルの終わりでスケジューラ２８０からリタイアされる。そうでない場合、できるだけ多くの変化が、コミットされて、行５へのシフトは、禁止される。行５の全てのオペレーションがコミットされ終わり、行４からのＯｐクワッドの行５へのシフトダウンが許可されるまで、コミットプロセスが各サイクルで繰り返される。
レジスタの結果、状態の結果、及びメモリの書き込み、のコミットは、別個に行われる。複数の結果を有し（例えば、レジスタ及び状態の結果を有するＲｅｇＯｐ、もしくはレジスタの結果及びメモリの書き込みを備えたＳＴＵＰＤオペレーション）、様々な結果が同時にコミットされる必要はない。ある１つのタイプの状態の変化のコミットは、他のタイプの状態の変化のコミットの前もしくは後に行われる。１つのオペレーションの全体としてのコミットは、ＯＣＵ２６０がオペレーションからの最後の結果をコミットしたときに生ずる。
オペレーションの結果は、そのオペレーションの実行状態が、そのオペレーションは完了したことを示すまで、任意の先行するフォルト可能なオペレーション、すなわち、任意の先行するＬｄＳｔＯｐｓが完了し、そのオペレーションがフォルトフリーであることが表されるまで、任意の先行するＢＲＣＯＮＤが完了し、そのＢＲＣＯＮＤが正しく予測されたことが示されるまで、コミットされない。ＦＡＵＬＴオペレーションは、関心事項ではなく、その理由はデコーダ２４０が各々のＦＡＵＬＴオペレーションを、Ｏｐクワッド内の第１の「有効な」オペレーションとして配置して、同じ行のオペレーションが、ＦＡＵＬＴオペレーションと同じ行にあるオペレーションが完了される必要のないようになっているからである。メモリ書き込みを生成するＳｔＯｐｓに対して、さらなる制約が、ただ１つの書き込みのみが、ストアキュー２７０からデータキャッシュ２２０へ１サイクルごとにコミットできるということである。
ＯＣＵ２６０は、各サイクルで、４個のレジスタと４個の状態結果と、１つのメモリ書き込みまでをコミットでき、通常、各サイクルごとにＯｐクワッドをスケジューラ２８０からコミットもしくはリタイアさせる。Ｏｐクワッドは、スケジューラ２８０の一番下の行にとどまり、１サイクル以上にわたってリタイアされる。これはＯｐクワッドが複数のメモリ書き込みＳｔＯｐｓを含む場合、もしくはＯｐクワッドのオペレーションのあるものが未だに完了していない場合のみに限られる。
一番下の行のオペレーションがフォルトにされる必要がある場合、例えば、そのオペレーションがオペレーションの実行中の間に生じたＦＡＵＬＴオペレーションもしくはフォルトである場合、次のオペレーションのコミットが禁止される。フォルトとなったＯｐクワッド内の全ての古いオペレーションがコミットされると、もしくは順番にコミットされると、ＯＣＵ２６０は、Ｏｐクワッドをリタイアさせ、かつアボートサイクルを禁止する。アボートサイクルはスケジューラ２８０をフラッシュし、全ての大気中のオペレーションの全ての実行ユニットをフラッシュする。
アボートサイクルと同時に、ＯＣＵ２６０はまた、命令デコーダ２４０を、２つの可能なemcode「エントリポイント」アドレスの内の一方、すなわち、リセットemcodeによって初期化された「デフォルト」フォルトハンドラアドレス、または、マイクロ命令もしくは除外処理emcodeによって特定された「代わりの」ハンドラアドレスのいずれかへ向けてベクタリングする。ＬＤＤＨＡ及びＬＤＡＨＡオペレーションは、完了した状態に於いてスケジューラ２８０へロードされ、スケジューラ２８０の底部に達したときにＯＣＵ２６０によって認識されかつ「実行された」オペレーションであるが、フォルトデフォルトアドレス及び代わりのハンドラアドレスのセットをサポートする。
あるタイプのオペレーションのみがフォルトされ、すなわち、ＬｄＯｐｓ、ＳｔＯｐｓ（ＬＥＡオペレーションを除く）、及びＦＡＵＬＴオペレーションのみがフォルトされる。ＬｄＯｐもしくはＳｔＯｐに対して、フォルトが、ＬＵもしくはＳＵ実行パイプラインの第２の実行ステージ４６０によって特定され、フォルトが検出された場合、ＬｄＳｔＯｐが、関連するもしくは無関係のアボートサイクルが、スケジューラ２８０からＬｄＳｔＯｐをフラッシュし、かつ実行ユニット２５１もしくは２５２からフラッシュするまで、第２の実行ステージ内にホールドアップされる。これは、完全にフォルトフリーが保証されたＬｄＳｔＯｐに於いてもたらされる。ＯＣＵ２６０は、その各々の第２実行ステージにフォルトオペレーションがスタックされていることを表す実行ユニット２５１及び２５２からの信号によって、フォルトされたＬｄＳｔＯｐと、まだ完了されていないＬｄＳｔＯｐとを区別する。ＯＣＵ２６０が次の完了されていないＬｄＳｔＯｐをコミットしようと試み、かつ関連する実行ユニット２５１もしくは２５２が、第２の実行ステージに保たれたオペレーションに対してフォルトの信号を送るとき、ＯＣＵ２６０がコミットしようと試みているオペレーションは、フォルトをエンカウントしたオペレーションでなければならない。実行ユニット２５１もしくは２５２が、フォルト信号をアサートしない場合、完了していないＬｄＳｔＯｐに関して明確なことは何もコミットされず、ＯＣＵ２６０は、ＬｄＳｔＯｐが完了するのを待つ。
ＦＡＵＬＴオペレーションは、完了した状態でスケジューラ２８０内へロードされ、常にフォルトとなる。ＯＣＵ２６０は、ＦＡＵＬＴオペレーションのコミットを取り扱い、まわりのオペレーションの結果としてもたらされたアボートを、フォルトとなったＬｄＳｔＯｐｓと同様に取り扱う。
特定のオペレーションに対するフォルトに加えて、ＯＣＵ２６０はまた、emcodeシーケンスの終わりが、ＥＲＥＴによって表示されるまで、累積されかつナンバーされる様々なデバッグのトラップ除外を認識する。「ＥＲＥＴ」Ｏｐクワッドがリタイアされ、かつトラップ除外が継続中のとき、ＯＣＵ２６０は、フォルトがＯｐクワッド内の５番目及び最後のオペレーションで認識されたかのように、フォルトスタイルのアボートサイクルを開始する。
ＯＣＵ２６０は、「分岐ターゲット制限バイオレーション」条件を認識し、この条件は、Ｏｐクワッド内の確かなオペレーションのみに関連して、全体としてＯｐクワッドによってタグされる。これは、無条件に、あたかもフォルトがＯｐクワッド内の第１のオペレーションに於いて認識されたかのごとく、アボートサイクルを開始する。
ＯＣＵ２６０は、アボート可能な状態の変更を生成するオペレーションに関するが、ＯＣＵ２６０はまたＢＲＣＯＮをも取り扱う。ＢＲＣＯＮＤは、行４にあるときに分解される。誤った予測が検出された場合、マイクロ命令及び命令デコーダ２４０のフェッチに対するロジックは、直ちにリセットされて、適切なマイクロ命令のアドレスから再スタートされる。誤って予測されたＢＲＣＯＮＤが行５に達したとき、誤って予測されたＢＲＣＯＮＤよりも新しいオペレーションのコミットが、禁止され、アボートサイクルが、全ての誤って予測されたＢＲＣＯＮＤに先行するオペレーションが成功裡にコミットされているかもしくはコミットされた後に、開始される。アボートサイクルは、スケジューラ２８０と、全てのオペレーションの全ての実行ユニットとをフラッシュする。アボートサイクルは、さらに、「新たな」オペレーションを、デコーダ２４０からスケジューラ２８０へロードすることをイネーブルし、実行ユニット２５１から２５６を直ちに発行する。誤って予測されたＢＲＣＯＮＤ及びオペレーションフォルトのアボートは、emcodeに対するベクタリングすることが誤って予測されたＢＲＣＯＮＤに対して開始されないという点で異なる。スケジューラ２８０の底部に達した正しく予測されたＢＲＣＯＮＤのコミットに対しては、アクションは、必要ない。
ＯＣＵ２６０は、コミットもしくは各ＢＲＣＯＮＤのコミットもしくはアボートを行う。ＯＣＵ２６０は、ＢＲＣＯＮＤのスケジューラエントリの状態フィールドに基づいてアクションを選択する。ＢＲＣＯＮＤが分解されたとき、そのスケジューラエントリの状態フィールドは、正しく予測されている場合には完了するように変更され、誤って予測されている場合には発見されないままとどめられる。すなわち、ＢＲＣＯＮＤが行４に於いて完了されたか否かは、ＢＲＣＯＮＤが誤って予測されたか否かを直接表している。
オペレーションの結果のコミットの実際のタイミングは、かなり簡単であり、かつコミットサイクルの後半部分の間に起こるように観察される。通常、Ｏｐクワッドは、スケジューラ２８０の底部内に入る同じサイクルの間にコミットされ、かつそのサイクルの終わりに於いてスケジューラ２８０からリタイアされる。このサイクルの間、結果は、レジスタファイル２９０に書き込まれ、オペランドの値は、レジスタファイル２９０からではなくスケジューラ２８０から、全ての依存したオペレーションへ送られる。
メモリ書き込みのコミットは、２ステージのプロセスであり、２ステージの書き込みコミットパイプラインの形式で実行される。書き込みコミットパイプラインの第１のステージは、ＳｔＯｐに対するＯＣＵ２６０のコミットサイクルに対応し、ＯＣＵ２６０に関する限り、ＳｔＯｐは、このパイプラインの第２のステージに入るときにコミットされている。タイミングにしたがって、ＳｔＯｐは、関連するＯｐクワッドがスケジューラ２８０からリタイアされる前もしくはリタイアされるときに、第２の書き込みコミットステージに入らなければならない。ＳｔＯｐがこの第２のステージに入れない場合、ＳｔＯｐは依然としてコミットできないものとみなされ、Ｏｐクワッドのリタイアがホールドアップされる。
ＯＣＵ２６０が、オペレーションフォルトを原因として、アボートサイクルを開始したとき、アボート信号と、対応するemcodeベクトルアドレスが、フォルトになったオペレーションを含むＯｐクワッドのコミット／リタイアサイクルの間に、アサートされる。次のサイクルの間に、スケジューラ２８０は、フラッシュされ、ターゲットemcodeＯｐクワッドが、フェッチされる。内部のemcodeに対しては、スケジューラ２８０は、この１サイクルを画定するためにエンプティとなる。
誤って予測されたＢＲＣＯＮＤに対するアボート信号は、さらに、対応するＯｐクワッドのコミット／リタイアサイクルの間アサートされている。命令フェッチ及びデコードが以前に再スタートされたので、スケジューラ２８０は、できるだけ早い次のサイクルで新たなＯｐクワッドを再びロードされ、すなわち、スケジューラ２８０は、１サイクル以上はエンプティにとどまらない。
ＯＣＵ２６０が、アボートサイクルを必要とするときにＯｐクワッド内の複数のオペレーションを認識したとき、そのオペレーションの始めのオペレーションを選択して、オペレーションに対する適切な時間でそのオペレーションに対応する適切なアボートアクションを開始する。
ＶＩＩＩ．Ａ．１  レジスタコミットメント
ＯＣＵ２６０は、レジスタファイル２９０に対するレジスタ結果値のコミットの管理及び制御を行う。各サイクルの間、スケジューラ２８０の底部の２つの行のうちの１つの中の各完了されたオペレーションのレジスタ結果が、レジスタファイル２９０内に書き込まれる（そのサイクルの後半部分で、４個の別個の書き込みポートを介して行われる）。各書き込みは、バイトマークに基づいて、対応するスケジューラエントリから、フィールドＤｅｓｔＢＭ［２：０］に対して行われる。このプロセスは、ｘ８６アーキテクチャレジスタ及び一時的／マウイクロアーキテクチャレジスタに対して行われる。
オペレーションが未だ完了せずコミットできない場合、関連するレジスタファイル書き込みがこのサイクルの間禁止される。そのオペレーションが、基本的にレジスタ結果を生み出さないタイプのオペレーションである場合、バイトマークが全てクリアされ、レジスタナンバーが定義されない。これは、レジスタファイル書き込みの間にバイトが変更されないという結果をもたらす。同様に、レジスタｔ０（常時０レジスタ）が、そのオペレーションに対する宛先として特定され、バイトマークが再び全てクリアされる。これらのいずれの場合に於いても、オペレーションデコーダ２１０は、ローリングの間に、バイトマークをｂ０００とする。
一般には、競合状態が起こり得る。すなわち、複数の同時の書き込みが同じレジスタ内に行われ得る。望ましい結果は、最も新しいオペレーションからのものであり、その他の古い書き込みは禁止されかつ実質的に無視されることである。レジスタファイル２９０は、表現されたレジスタナンバーと対応する書き込みネーブルに単に基づいて、レジスタコミットプロセスのＯＣＵ２６０の制御から別個に、このファンクションを取り扱う。
さらに、競合する書き込みが、最も新しい書き込みによって変更されなかったレジスタバイトをより古い書き込みが変更するものであるような場合、効果的なレジスタファイル書き込みは、競合するオペレーションからのバイトの組み合わせとなる。例えば、第１の（最も古い）オペレーションが、バイト｛３、２、１、０｝を変更し、第２のオペレーションがバイト｛１，０｝を変更し、第３の（最も新しい）オペレーションがバイト｛１｝を変更する場合、実際のレジスタファイル書き込みは、第１のオペレーションからバイト｛３、２｝をとり、第２のオペレーションからバイト｛０｝をとり、第３のオペレーションからバイト｛１｝をとる。その他の場合、レジスタファイルバイトのあるものは、全て変更されない。レジスタファイル２９０内の制御ロジックは、この新たなファンクショナリティを取り扱う。まとめて言えば、レジスタファイル２９０内の競合分解ロジックは、３２ビットワードではなく５個のバイトのベースにオペレートする。
全ての４個のオペレーションに対する書き込みイネーブルはパラレルに生成される。対応する書き込みイネーブルは、Ｏｐクワッド内の全ての先行する／古いＬｄＳｔＯｐｓが完了し、かつ先行する／より古いＢＲＣＯＮＤの全てが誤って予測されていない場合に、各完了したオペレーションに対してレジスタファイル２９０に向けてアサートされる。オペレーションの結果がレジスタファイル２９０に書き込まれるとき、対応するＤｅｓｔＢＭビットがクリアされて、スケジューラエントリがもはや依存したオペレーションに対するレジスタ値を提供しないことを表す。ＤｅｓｔＢＭフィールドのクリーンは、また、部分的なレジスタ書き込みに対しても行われる。依存したオペレーションが１つのオペレーションに対して引き起こされる全てのバイトを得ることができない場合、この依存したオペレーションは、全てのバイトがレジスタファイル２９０から得られるまで、オペランドフォワードステージ内でホールドアップされる。
加えて、スケジューラエントリ（上述の説明を参照のこと）に対応する９個の信号ＯｐｒｎｄＭａｔｃｈ  ＸＸｓｒｃＹが、そのエントリ内のＤｅｓｔＢＭビットがほぼクリアされるときに、マークされる（すなわち、整合が起きていないことを表すようにされる）。これは、スケジューラ２８０内のレジスタオペランドフェッチプロセスのパイプライン特性に起因するものである。特に、エントリのＤｅｓｔＢＭビットは、このプロセスの２つのステージで用いられ、両方のサイクルに於いて一致していなければならない。
レジスタコミットのスループットを高めるために、オペレーションレジスタ書き込みは、行５内の全てのオペレーションに対するレジスタコミットが完了したときに、行４から行われてもよい。これは、行５の４つのオペレーションまたは行４の４つのオペレーションのいずれかを考慮するために、ＲｅｇＯｐ書き込みイネーブルロジックを一般化することにより、行われる。選択された行のオペレーションは、Ｏｐ２３からＯｐ２０、またはＯｐ１９からＯｐ１６の代わりに、「ＯｐＡ」から「ＯｐＤ」へ名称を変更される。表Ｂ．５３は、レジスタファイル２９０に対するコミットのための結果を選択するロジックを表している。
ＶＩＩＩ．Ａ．２  状態フラグコミットメント
ＯＣＵ２６０は、さらに、「．ｃｃ」ＲｅｇＯｐｓによって生成された状態フラグの結果のアーキテクチャＥＦｌａｇｓレジスタに対するコミットを管理しかつ制御する。レジスタの結果のコミットとは異なり、行５からのオペレーションの４個までの状態フラグの結果のいずれもが、行５のＯｐクワッドがリタイアされもしくはアボートされようとしているときまでに、ＥＦｌａｇｓへ書き込まれることはない。通常の場合では、Ｏｐクワッド内の全てのオペレーションは、十分にコミットされ、もしくは順番にコミットされていて、全ての４つの状態の結果の積み重ねられたもしくは全ての結果が、Ｏｐクワッドがスケジューラ２８０からリタイアされたときに、そのサイクルの終わりでＥＦｌａｇｓへ書き込まれる。フォルトになったオペレーションもしくは誤って予測されたＢＲＣＯＮＤを含む１つのＯｐクワッドに対して、ホールドの命令もしくはＢＲＣＯＮＤの前にそのオペレーションからの状態結果のみが、コミットされ、このコミットされた結果がアボートサイクルの終わりで、もしくはアボートサイクルの間に、書き込まれる。
このプロセスは、マイクロアーキテクチャ状態フラグ（ＥＺＦ及びＥＣＦ）と、ｘ８６アーキテクチャ状態フラグとに与えられる。まとめて言えば、アーキテクチャＥＦｌａｇｓレジスタは、３４ビットに拡張されて、特別の２つの状態フラグのためのルームを作る。ＲＤＦＬＧ及びＷＲＦＬＧ  ＲｅｇＯｐｓは、この拡張されたＥＦｌａｇｓレジスタの標準３２ビットポーションを表す。
積み重ねられた状態結果の生成は、底部の行内の４個のエントリの各々からの状態ビットマーク（ＳｔｔＭｏｄ［３：０］）に基づいている。８個の状態フラグは、８個の別個のビットマークを有するのではなく、変形マークの目的のために４個のグループに分割される。レジスタファイル内の一般的なレジスタを更新するのと同じように、競合が生ずる可能性があり、すなわち、複数の変更が同じグループの状態フラグに行われる可能性がある。好ましい結果は、各グループの状態フラグに対して最も新しく変更された値である。
積み重ねられた状態結果の生成はまた、４個のオペレーションの各々の完了された状態（Ｓｔａｔｅ［３］）に基づいている。アボートされたＯｐクワッドに対して、フィールド状態が、どの状態の結果がコミットされ、どの状態の結果がコミットされないべきかを特定する。コミットのために、すべての進行中のオペレーションは、完了され、フォルト及び誤った予測から解放されなければならない。表Ｂ．５４は、状態フラグの変更を累積するロジックを表している。
オペレーションのコミット及びリタイアに対する明らかな制御もしくは制限は、状態フラグの結果に関する限り、必要とされない。状態フラグの状態は、ＲｅｇＯｐｓからのみ得られ、かつ全てのＲｅｇＯｐｓが、レジスタの状態の変更を生成する（ｔ０のみの場合でさえも）。Ｏｐクワッドは、Ｏｐクワッド内の全てのＲｅｇＯｐｓが完了し、したがって有効な状態結果の値を有するまで、リタイアされない。さらに、底部の行のオペレーションに対するＳｔａｔＭｏｄフィールドのクリーンに対して、状態フラグの値がどのように前進させられているかを（ＢＲＣＯＮＤ及び「ｃｃ依存」ＲｅｇＯｐｓに対して）を与える必要はない。
ＶＩＩＩ．Ａ．３  ．メモリ書き込みコミットメント
ＯＣＵ２６０の第３のファンクションは、メモリ書き込みデータの値の「メモリ」（データキャッシュ及び／もしくはメインメモリ）へのコミットメントを制御することことである。これは、レジスタ及び状態結果のコミットメントは、様々な点で異なり、すなわち、メモリ書き込みのコミットメントとは、ほとんどのケースで、関連するストアキューエントリを含み、多くても１つのメモリ書き込みが、１サイクルの間でコミットメントされ、コミットメントプロセスは２つのステージのコミットメントパイプラインを有する。ＯＣＵ２６０は、底部の２つの行をスキャンし、コミットメントのためのメモリ書き込みに対するＳｔＯｐｓを見つけだす。関連するＳｔＯｐｓに対するフォルトの可能性が存在する。
メモリ書き込みは、全て、ＳｔＯｐｓ（ＬＥＡ、ＣＩＡ、及びＣＤＡオペレーション以外の、これらは実際にはメモリを参照しない）に関連している。ＳｔＯｐが実行を完了したとき、関連するメモリアドレスとストアデータがストアキュー２７０内に入力される。その後、メモリ書き込みのＳｔＯｐがコミットメントされたとき、このエントリがキャッシュメモリへ読み出されて、ストアキュー２７０からリタイアされる。ＳｔＯｐｓは、実行されて、ストアキュー２７０が簡単なＦＩＦＯとして働くことができるような互いに対する相対的な順番で、コミットメントされ、スケジューラＳｔＯｐｓに対応するストアキューエントリの整合が自動的に行われる。
しかしながら、実際のコミットメントプロセスは、より複雑であり、以下に説明されるようなものである。一般に、２ステージプロセスは、最後の／最も古いストアキューエントリが始めに読み出され、次にデータキャッシュ２２０内でアドレスルックアップされ、次に、ルックアップの状態に基づいて、ストアデータキャッシュ２２０及び／もしくはメモリ外に書き込まれる。後者の場合、データ及びアドレスは、通常、書き込みバッファへロードされ、後に、メモリへ書き込まれる。
２ステージ書き込みコミットメントパイプラインでは、第１のステージ（すなわち、データキャッシュタグルックアップ）は、レジスタ及び状態結果のコミットメントサイクルに対応し、すなわち、収容しているＯｐクワッドが、このステージのサイクルの終わりでリタイアされる。ＯＣＵ２６０のパースペクティブから、このコミットメントプロセスは、進んだもしくは遅れた１つのサイクル／信号ステージアクションとしておおまかにみることができる。メモリ書き込みのコミットメントは、レジスタ状態の変更に対するのと同じように、同様の理由でホールドアップされ、書き込みコミットメントがコミットパイプのステージ２に入ることができないときにも、ホールドアップされる。書き込みがコミットステージ２に入ると、関連するＳｔＯｐは、スケジューラ２８０からリタイアされ、コミットプロセスの残りの部分が、ＯＣＵ２６０とスケジューラ２８０とに対して非同期的となる。
第１のコミットステージの間、制御のコミットは行われない。データキャッシュタグルックアップが実行され、アサートされたタグデータが、単に、第２のコミットステージの間に試験されるためにラッチされる。
書き込みコミットパイプラインは、単に、書き込みコミットパイプラインは、単に１つのパイプラインであって、したがって、各サイクルごとに１つのメモリ書き込みのコミットをサポートするのみである。多くても１つのメモリ書き込みＳｔＯｐを含むＯｐクワッドに対して、これによって、可能なコミット及び各サイクルのＯｐクワッドのリタイアが可能となる（レジスタ状態のコミットからのステムが変化したときの予告の同様のソートを目的とする）。２個、３個もしくは４個のＳｔＯｐｓを含むＯｐクワッドに対して、対応する最小の数のサイクルが、少なくともそれと同じ数のサイクルにわたってスケジューラ２８０の底部にＯｐクワッドがとどまるようにするＯｐクワッドのコミットに対して必要とされる。行４もしくは行５のＳｔＯｐに関連するメモリ書き込みのコミットは、１つのＯｐクワッド内の複数のＳｔＯｐｓによって引き起こされるホールドアップを減少する。メモリ書き込みが順番にコミットされている場合、ＯＣＵ２６０は、底部のＯｐクワッドがホールドアップされているか、そうでない場合にコミットされていないメモリ書き込みのエンプティもしくは底部のＯｐクワッドが、単に、ＳｔＯｐｓを含んでいないとき、複数の書き込みＯｐクワッドに対して「ヘッドスタート」をとることができる。これによって、１以下である１つのＯｐクワッドあたりの平均の書き込み数と、ＯＣＵの１回のサイクルあたりの１回の書き込みのコミットとが整合することが、より良好に助けられる。
各サイクルの間に、ＯＣＵのメモリ書き込みコミットロジックは、最も古いコミットされたメモリ書き込みＳｔＯｐに対する（すなわちコミットを試みるための対応書き込み及び次のＳｔＯｐに対する）底部の２つの行を探す。選択されたオペレーションが、現在の底部の／最も古いストアキューエントリを生成する。オペレーションの選択と同時に、最も古いストアキューエントリのアドレスが、開始されたＤａｔａキャッシュ及びタグルックアップへ提供される。これは、「緊密に」行われる、すなわちその対応するＳｔＯｐが実際にそのときにコミットできるか否かにかかわらず行われる。
選択されたＳｔＯｐが、コミット可能であり、書き込みコミットが、第２の書き込みコミットステージ内へ進むことができる場合、ＯＣＵ２６０は、ＳｔＯｐがコミットされたとみなす。次のサイクルで、ＯＣＵ２６０は、次のメモリ書き込みＳｔＯｐをサーチする。ＳｔＯｐコミットの基準は、レジスタ結果コミットに対するものと同じであり、すなわち選択されたＳｔＯｐが完了していなければならず、Ｏｐクワッド内の全ての先行する／より古いＬｄＳｔＯｐｓが（可能ならば、このＳｔＯｐが最後の行にある場合先行するＯｐクワッドが）、さらに完了されていなければならず、先行する／より古い誤って予測されたＢＲＣＯＮＤが完了されていなくてもよいという条件である。書き込みコミットは、そのステージがエンプティか、もしくは、成功裡に書き込みのコミットの完了が行われているときに、コミットステージ２へ進むことができる。
選択されたＳｔＯｐが完了されていないことのみによってコミットできないときには、ＯＣＵ２６０は、ＳｔＯｐが、検出されたフォルト条件によってそのステージに「スタック」されているか否かを表す第２のＳＵ実行ステージからの信号を試験する。そのようなオペレーションがある場合、ＯＣＵ２６０のコミットを非成功裡に試みるのは、その同じＳｔＯｐであり、したがって、ＯＣＵ２６０によってアボートされなければならない。適切なアボートサイクルが、ＳｔＯｐが底部の行に存在するまで、開始されず、Ｏｐクワッド内の全ての先行するオペレーションは、コミットされていて、先行するＢＲＣＯＮＤのいずれもが誤って予測されてはいない。これは、ＳｔＯｐがコミット可能であるための条件の拡張である。その間に、ＯＣＵ２６０は、アボートサイクルが先行するオペレーションに対して開始されるまで、この状態にとどまる。
ＯＣＵ２６０は、第１に、メモリ書き込みＳｔＯｐｓを考慮するが、ＣＩＡ及びＣＤＡオペレーションをも取り扱い、その理由は、これらのオペレーションが、ＯＣＵ２６０が試験し及びコミットしなければならないフォルトする可能性のあるメモリアドレスを生み出すからである。フォルトなしに実行されるそのようなオペレーションの通常の場合に於いて、ＣＯＵ２６０は、明らかにそのオペレーションをコミットするのに１つのサイクルを費やし、次のサイクルでの次のＳｔＯｐをコミットすることへ移動する。オペレーションの実行の間に、ストアキューエントリが生成されないので、ストアキューからエントリがリタイアされることはない。ＣＩＡもしくはＣＤＡオペレーションの実行の間に、フォルトが検出された場合、そのオペレーションは、第２のＳＵ実行ステージ２「スタック」され、ＯＣＵ２６０は、他のＳｔＯｐｓに対するのと同様にアボートする。
ＯＣＵ２６０に対する第２の特別な状況が、ＳｔＯｐのメモリレファレンスが、整合境界（８バイト）を越え、２つの対応するストアキューエントリを備えた２つのメモリ書き込みに、ストアユニット２５２によって分離されるときに起こる。このような状況では、ＯＣＵ２６０は、２つのストアキューエントリをリタイアするのに２つのサイクルを費やし、２つのサイクルが完了するまで、正式にＳｔＯｐをコミットしない。そのＳｔＯｐがフォルトのとき、ストアキューエントリをリタイアさせることなくアボートされる。
ＯＣＵ２６０の例示された実施例では、最後の２つの行でメモり書き込みＳｔＯｐｓをコミットする過程でのＯＣＵのプログレスを表したマスクビット（ＣｍｔＭａｓｋ［７：０］）の集合を用いている。８個のマスクビットＣｍｔＭａｓｋ［７：０］の各々は、最後の２つの行の８個のエントリに対応している。始めの集合のビット０から始まるビットは、クリアされて、ＯＣＵ２６０が対応するエントリをサーチし、最後のクリアビットに対応するエントリまでＳｔＯｐｓをコミットしたことを表している。最後のクリアビットに対応するエントリは、コミットされるべき次のＳｔＯｐを含む。セットマスクビットに対応するエントリは、コミット可能なＳｔＯｐｓに対して試験されなければならない。ＯＣＵ２６０はまた、最後の２つの行のどのエントリがコミットされていないメモリ書き込みＳｔＯｐｓ含むかを表しているビットの集合（ＵｎｃｍｔＳｔＯｐ［７：０］）を保持している。
各サイクルの間に、ＯＣＵ２６０は、次のコミットされていないＳｔＯｐを選択し、このＳｔＯｐを含むエントリに基づいて新たなマスクビットの集合を生成する。マスクされていないエントリは、試験されて、その選択されたＳｔＯｐがそのときにコミット可能であるか、またはアボートサイクルが開始されなければならないかを求める。選択されたＳｔＯｐがコミット可能でありかつコミットパイプラインのステージがそのサイクルの終わりで新たな書き込みコミットを受け入れることが可能であれば、ＳｔＯｐはコミットされ、ＵｍｃｍｔＳｔＯｐビットは、新たな値に更新される。ＵｎｃｍｔＳｔＯｐビットは、また、最後の２つの行の任意のシフティングに整合するように、更新され、シフトされる。アペンディクスＢの表Ｂ．５５は、このロジックを表している。
ＶＩＩＩ．Ｂ  Ｏｐクワッドリタイア
スケジューラ２８０の底部の行内のオペレーションの全てのアボート可能な状態の変化が、コミットされ、または成功裡にコミットされつつあるとき、ＯＣＵ２６０は、そのサイクルの終わりで、Ｏｐクワッドをスケジューラ２８０からリタイアさせる。これにより、次のＯｐクワッドがスケジューラ２８０の底部の行へシフトできるようになる。必ずしも全てのそのようなオペレーションの結果がコミットされていないサイクルの間、Ｏｐクワッドは、リタイアされず、さらなるコミットプロセスのために保持されているか、もしくはアボートサイクルを原因として無効化される。無効化された場合、アボートサイクルが、行５内の１つのオペレーションで認識されたあるフォルトに応答する。
より詳しくは、Ｏｐクワッドのリタイアには、全ての結果（レジスタ）と、状態の結果と、メモリ書き込みとがコミットされなければならない、かつ、Ｏｐクワッド内にＦＡＵＬＴオペレーションもしくは誤って予測されたＢＲＣＯＮＤがないことが必要とされる。Ｏｐクワッドのリタイアは、Ｏｐクワッドが無効であるとしてマークされると直ちに起こる。スケジューラのシフト制御ロジックは自動的にこれを考慮に入れる。状態の結果は、Ｏｐクワッドのリタイア（またはアポート）とともに全てコミットされる。レジスタの結果は、関連するオペレーションが完了しているときに、コミットされるか、もしくはコミットされている。表Ｂ．５６は、ＯｐクワッドのリタイアのためのＯＣＵ２６０内の回路を表している。
ＶＩＩＩ．Ｃ  フォルトハンドリング
ＶＩＩＩ．Ｃ．１  ロードオペレーションフォルトハンドリング
ＬｄＯｐｓは、通常、ＬｄＯｐｓが一般的なレジスタ状態の変更の結果をもたらされるので、ＯＣＵ２６０による特別なハンドリングを必要としない。多くのＳｔＯｐｓと同様に、ＬｄＯｐｓもまだ、実行の間のフォルトをエンカウントすることができる。ＯＣＵ２６０の特別のロジックは、ＳｔＯｐフォルトと同じように、ＬｄＯｐフォルトを認識し取り扱う。フォルトしたＬｄＯｐがスケジューラ２８０の底部の行に存在するか否かをコミットするために、ＯＣＵ２６０は、全ての先行する／より古いオペレーションが完了しコミットされていて、先行する誤って予測されたＢＲＣＯＮＤがない、ＬｄＯｐであるオペレーションについて、行５をサーチする。ＯＣＵ２６は、さらに、検出されたフォルト条件を伴ったＬｄＯｐが、ＬＵパイプラインの第２の実行ステージ内で「スタック」されているか否かを表すロードユニット２５１からの信号を試験する。
行５のＬｄＯｐが、完了されておらず、かつ完了されかつコミットされたオペレーションのみによって先行されていて、さらにＬＵステージからの信号がアサートされている場合、ＯＣＵ２６０は、フォルトしたＬｄＯｐを認識し、適切なアボートサイクルを直ちに開始して、そのＬｄＯｐと後続する全てのオペレーションをアボートする。表Ｂ．５７は、ＯＣＵのＬｄＯｐフォルトハンドリングロジックを表している。
ＶＩＩＩ．Ｃ．２  フォルト及びＬＤＤＨＡ／ＬＤＡＨＡオペレーションハンドリング
ごくわずかな特別なオペレーション、すなわちＦＡＵＬＴ、ＬＤＤＨＡ、及びＬＤＡＨＡオペレーションは、さらに特別のコミットハンドリングを必要とする。これらのオペレーションのいずれもが、実行ユニットによって発行されかつ実行されることはない。ＦＡＵＬＴ、ＬＤＤＨＡ、及びＬＤＡＨＡオペレーションは、その他のオペレーションに依存する実行を有さず、かつＯＣＵ２６０に対してのみ重要である。
ＯＣＵ２６０は、フォルトしたＬｄＳｔＯｐと同様にＦＡＵＬＴオペレーションを取り扱う。アボートサイクルが、現在のemcodeＯＣＵフォルトハンドラに対するベクタリングとともに開始される。フォルトしたＬｄＳｔＯｐｓとは異なり、認識されるフォルトが存在するか否か、及びアボートサイクルをいつ開始するかについての発行は存在しない。ＦＡＵＬＴオペレーションを取り扱うためのＯＣＵのロジックを簡単にするために、以下の制約が、ディテクタ２４０及び５１０に課されている、すなわち（１）ＦＡＵＬＴオペレーションは、Ｏｐクワッドの第１のオペレーションの１内になければならず、（２）Ｏｐクワッド内の全ての後続のオペレーションは、「ＮＯ−ＯＰｓ」でなければならず（例えば、ＬＤＫ  ｔ０，ｘｘ）、及び（３）後続のＯｐクワッドは、任意のメモリ書き込みＳｔＯｐｓを含んでいてはならない。次のＯｐクワッドからのメモリ書き込みＳｔＯｐｓを禁止することにより、その他の全てのＯＣＵコミットロジックが、特別な考慮を必要とせずに、「ＦＡＵＬＴ」Ｏｐクワッドに対する緊密なオペレーションを行うことが確実となる。
ＦＡＵＬＴオペレーションの状態は、スケジューラ２８０にロードされたときに、ｂ００００に初期化される。ＦＡＵＬＴオペレーションが行５に達したとき、フォルトオペレーションの完了していない状態が、ＯＣＵのＯｐクワッドリタイアロジックが、Ｏｐクワッドをリタイアすることを禁止し、ＦＡＵＬＴオペレーションが、ＯＣＵ２６０内のロジックをコミットして、直ちにアボートサイクルを開始する。アボートサイクルの特徴は、ＬｄＳｔＯｐｓのフォルトに対するものと同じである。唯一の相違点は、独特のフォルトＩＤを生成することである。表Ｂ．５８は、ＦＡＵＬＴオペレーションに対してアボート信号を生成するロジックを表している。
ＬＤＤＨＡ／ＬＤＡＨＡオペレーションは、emcodeをイネーブルして、セットし、emcode内のアドレス（ＲＯＭ２４６）を、ＯＣＵが認識した除外がベクトルされているアドレスに変更する。ＯＣＵ２６０は、２つのベクトルアドレスレジスタを保持し、その１つは「デフォルト」ハンドラアドレスを保ち、もう１つは、「代わりの」ハンドラアドレスを保つ。第１のベクトルアドレスレジスタは、デフォルトによってほとんどのemcodeに対してアクティブとなり（マイクロ命令及び除外プロセスemcodeの両方）、ＬＤＤＨＡオペレーションを介したリセットemcodeによってちょうど一回だけセットされる。プロセッサ２００は、リセットの後に初期化のためにemcodeをリセットする。第２のベクトルアドレスレジスタは、ＬＤＡＨＡオペレーションを介してセットされる。
エントリポイントからＥＲＥＴまでで定義されたＬＤＡＨＡオペレーションを含まないベクトルデコーダ２４４からのｅｍシーケンスに対して、そのシーケンス内のオペレーションのＯＣＵ２６によって認識された任意のフォルトが、デフォルトハンドラアドレスレジスタ内のアドレスへのベクトルをもたらす。ＬＤＡＨＡオペレーションを含むemcodeシーケンスに対して、ＤＬＡＨＡオペレーションを含むものの前のＯｐクワッド内のオペレーションのフォルトが、デフォルトアドレスへのベクトルを結果としてもたらし、Ｏｐクワッド（ＬＤＡＨＡオペレーションを含む）の、もしくはemcodeシーケンスの最後のクワッドまでの任意の後続のＯｐクワッド内の、オペレーションのフォルトは、第２ベクトルアドレスレジスタ内のアドレスへのベクトルを結果としてもたらす。「ＥＲＥＴ」Ｏｐクワッドのリタイアは、次にＬＤＡＨＡオペレーションが起こるまで、後続の全てのオペレーションに対するデフォルトハンドラアドレスレジスタを効果的に再びアクティブにする。アボートサイクルの発生によってもまた、デフォルトハンドラアドレスレジスタが再びアクティブにされる。
ＯＣＵ２６０に対する事柄を簡単にするために、ＬＤＤＨＡ／ＬＤＡＨＡオペレーションは、Ｏｐクワッドの最も古いオペレーションの位置内に強制的に配置される。「有効な」オペレーションが、Ｏｐクワッドの後続のオペレーションの位置に於いて許可される。表Ｂ．５９は、ＯＣＵのＬＤＤＨＡ／ＬＤＡＨＡオペレーションハンドリングロジックを表している。
ＣＩＩＩ．Ｃ．３  ターゲットリミットバイオレーションハンドリング
Ｏｐクワッド内の各オペレーションに関連する状態の変化のコミットに加え、ＯＣＵ２６０はまた、全体として、Ｏｐクワッドに対しての特別なタグされた条件を認識する。ＭａｃＤｅｃ２６０が、転送制御命令をデコードしかつコードセグメントリミットバイオレーションがターゲットアドレスで検出されたときには常に（ＭａｃＤｅｃがＯｐクワッドを生成し、Ｏｐクワッドはスケジューラ２８０にロードされた後に）、Ｏｐクワッドがマークされて、そのようなバイオレーションが、Ｏｐクワッドに関連して検出されたことを表す。
Ｏｐクワッドが、ＯＣＵ２６０に到達しコミットされるべきときに、セットされたタグビットが認識されて、アボートサイクルが、Ｏｐクワッド内のオペレーションからの任意の状態の変化をコミットすることなしに開始される。効果的に全体のＯｐクワッドがフォルトされる。この効果は、ＦＡＵＬＴオペレーションがＯｐクワッド内にあるのと同じ効果である。表Ｂ．６０は、分岐ターゲットリミットバイオレーションを取り扱うためのロジックを表している。
ＶＩＩＩ．Ｃ．４  誤って予測された分岐ハンドリング
アボート可能な状態の変化のコミット及びさまざまな特別なケースのハンドリングの他に、ＯＣＵ２６０は、誤って予測されたＢＲＣＯＮＤに対するアボートサイクルの生成をも取り扱う。上述されたように、命令フェッチ及びデコード領域の再スタートは、ＢＲＣＯＮＤがスケジューラ２８０の底部に達する前に起こる。シーケンサ２８０は、順番にアボートを生成し、先行するオペレーションのみがコミットされたことを確かめる。オペレーションフォルトに対するアボートサイクルの生成と同様に、アボートは、全ての先行するオペレーションがコミットされるまで開始されない。表Ｂ．６１は、誤って予測された分岐に対するアボートの生成を行うロジックを表している。
ＶＩＩＩ．Ｄ  アボートサイクルの生成
ＯＣＵ２６０は、２つの状況に置いてアボートサイクルを生成する、すなわち、ＬｄＳｔＯｐもしくはＦＡＵＬＴオペレーションに於いてのＯｐフォルトの認識と、誤って予測されたＢＲＣＯＮＤの認識とに於いて生成する。これまでの説明及び表Ｂ．５５、Ｂ．５７、Ｂ．５８及びＢ．６１は、アボートサイクルの開始を行う信号の生成を表している（すなわち、信号ＳｔＡｂｏｒｔ、ＬｄＡｂｏｒｔ、ＦｌｔＡｂｏｒｔ、ＬｉｍＡｂｏｒｔ、及びＢｒＡｂｏｒｔ）。この節では、一般的なアボート信号と関連する情報の生成について説明する。
アボート信号は、特定のタイプの状態の変化もしくはオペレーションのコミットに関連する全ての個々のアボート信号の組み合わせである。関連するemcodeベクトルアドレスは、フォルト関連のアボートに対してのみで、ＢＲＣＯＮＤ関連のアボートに関してではなく定義され、かつ、上述されたようなＦｌｔＶｅｃＡｄｄｒである。このアボート信号は、スケジューラ２８０をフラッシュし、全ての継続中のオペレーションの全ての実行ユニット２５１から２５７をフラッシュし、かつ、命令デコーダ２４０からの新たなオペレーションを受け取るための準備をこれらの領域内で再び開始させる。ＢＲＣＯＮＤ関連のアボートに対しては、これは十分であり、その理由は、分岐評価ユニット２５７が前もって、emcode及びｘ８６マイクロ命令フェッチ及び命令デコーダ２４０を再スタートさせているからである。
除外に関連するアボートに対して、命令デコーダ２４０はまた、フォルトハンドラアドレスに於いて再びスタートさせられる必要がある。命令フェッチ／デコードリスタートが、誤って予測されたＢＲＣＯＮＤと、オペレーション除外との両方に対して同時に信号を供給されたとき、オペレーション除外は、より高い優先順位を有する。適切な再スタート信号の生成及び再スタートに対するベクトルアドレスがしたがって生成される。フォルト関連のアボートが生じたとき、ＯＣＵ２６０は、また、フォルトに関する情報をラッチし、すなわち、ｘ８６マイクロ命令プログラムカウンタ（効果的にフォルトにされた関連するｘ８６命令の論理アドレス）を、レジスタＳＲ４へラッチする。表Ｂ．６２は、ＯＣＵのアボートサイクル発生ロジックを表している。
ＩＸ．  プロセシングシステム
本発明の実施例は、さまざまなプロセシングシステムを含み、例えば、スタンドアローンのもしくはネットワークのパーソナルコンピュータシステム、ワークステーションシステム、マルチメディアシステムネットワークサーバシステム、多重プロセッサシステム、埋め込みシステム、集積化された電話システム、及びビデオ会議システムを含む。第１１Ａ図から第１１Ｃ図は、プロセシングシステムのセットを表したものであり、本発明に基づくスーパースケーラープロセッサ２００を、バス構成、メモリ階層及びキャッシュ階層、Ｉ／Ｏインタフェイス、コントローラ、デバイス、及び周辺構成要素と組み合わせたものである。第１１Ａ図から第１１Ｃ図に表されたプロセシングシステムのセットは、単なる例示である。スーパースケーラープロセッサ２００を組み込んだシステムの適切な構成は、以下のような構成要素、カード、インタフェイス及びデバイスの組み合わせを含む。
１．ビデオディスプレイ装置、モニタ、フラットパネルディスプレイ、タッチスクリーン、
２．ポインティングデバイス及びキーボード、
３．コプロセッサ、駆動小数点プロセッサ、グラフィックプロセッサ、Ｉ／Ｏコントローラ、及びＵＡＲＴ、
４．第３の及び第４の記憶装置、コントローラ、インタフェイス、キャッシュ、ＲＡＭ、ＲＯＭ、フラッシュメモリ、スタティックＲＡＭ、ダイナミックＲＡＭ、
５．ＣＤ−ＲＯＭ、固定ディスク、取り外し可能メディア記憶デバイス、フロッピーディスク、ＷＯＲＭ、ＩＤＥコントローラ、エンハンストＩＤＥコントローラ、ＳＣＳＩデバイス、スキャナ、及びジュークボックス
６．ＰＣＭＣＩＡインタフェイス及びデバイス、ＩＳＡバス及びデバイス、ＥＩＳＡバス及びデバイス、ＰＣＩローカルバス及びデバイス、ＶＥＳＡローカルバス及びデバイス、マイクロチャネルアーキテクチャバス及びデバイス
７．ネットワークインタフェイス、アダプタ及びカード（イーサネットなどに対するもの）トークンリング、１０Ｂａｓｅ−Ｔ、ツイストペア、平行線、ＡＴＭネットワーク、フレームリレイ、ＩＳＤＮなど、
８．ビデオカード及びデバイス、２Ｄ及び３Ｄグラフィックカード、フレームバッファ、ＭＰＥＧ／ＪＰＥＧ圧縮／解凍ロジック及びデバイス、ビデオ会議カード及び装置、ビデオカメラ及びフレームキャプチャデバイス
９．コンピュータの集積化された電話カード及び装置、モデムカード及び装置、ファックスカード及び装置
１０．サウンドカード及び装置、オーディオ及びビデオ入力装置、マイクロフォン、スピーク、
１１．データ獲得及び制御カード及びインタフェイス、圧縮／解凍ロジック及びデバイス、エンクリプション／デクリプションロジック及びデバイス、及び
１２．テープバックアップユニット、冗長／フォルトトレラントコンポーネント及びデバイス（ＲＡＩＤ及びＥＣＣメモリなどの）
これらの構成要素、カード、インタフェイス、及びデバイス（上述されたものと同様にそれらに相当する構成要素、カード、インタフェイス、及びデバイスを含む）の適切な組み合わせはたくさんあるので、全てをリストアップすることはしない。
スーパースケーラープロセッサ２００を組み込んだネットワークパーソナルコンピュータ１００が、第１１Ａ図に例示されている。スーパースケーラープロセッサ２００は、メモリサブシステム１２０に接続されている。メモリサブシステム１２０は、ＲＡＭとして例示されているが、他の実施例は、キャッシュもしくはＲＡＭとスーパースケーラープロセッサ２００との間に挿入された複数のキャッシュを含んでいる。スーパースケーラープロセッサ２００とメモリサブシステム１２０等は、コンピュータ１００のマザーボード１０１の一部として含まれている。一連のアダプタ、インタフェイス及びコントローラは、プロセッサ２００をデバイスもしくは周辺装置に（構成要素に）接続している。これらのアダプタ、インタフェイス、及びコントローラは、通常、プロセッサ２００に、カードとしてマザーボート１０１の背面のバスに接続されている。しかしながら、他の実施例は、個々のアダプタ、インタフェイス及びコントローラをマザーボード１０１内に組み込んでいる。グラフィックアダプタ１１０は、スーパースケーラープロセッサ２００に接続され、スーパースケーラープロセッサ２００によって供給されたスクリーン更新値に基づいてディスプレイ１１１を制御する信号を供給する。パラレルインタフェイス１０９とシリアルインタフェイス１１０とが、パラレルポートとシリアルポート（パラレルポートデバイス（例えば、プリンタ、パラレルプリンタ１０２、などの、テープバックアップユニットなど）に対する、及びシリアルデバイス（例えばモデム１０３、ポインティングデバイス、プリンタ））への、各々インタフェイスへ信号を供給している。ハードディスク／フロッピーディスクコントローラ１３０は、ハードディスク１３２及びフロッピーディスク１３１へのアクセスを制御している。ＬＡＮアダプタ１０７は、コンピュータ１００に、８０２．３イーサネット、１０ベースＴ、ツイストペア、及びトークンリングネットワークなどのローカルエリアネットワークに対するネットワークインタフェイスを提供している。その他のアダプタ及びインタフェイスと同様に、ＬＡＮアダプタ１０７は通常、カードとして、マザーボード１０１の背面バスからプロセッサ２００に接続されている。
スーパースケーラープロセッサ２００は、部分的に、プロセッサ、または複数のプロセッサのうちの１つとして、複数のスーパースケーラープロセッサ２００のインスタンスがレベルクーキャッシュ１２０及びプロセッサバス１２３に接続されているように例示された第１１図Ｂに示されたものよりも、ネットワークサーバ構成内でより魅力的である。各スーパースケーラープロセッサ２００は、メモリコントローラ１２１とシステムコントロール１５０とを、プロセッサバス１２３を介して接続している。メモリコントローラ１２１は、Ｅｒｒｏｒ  エラー補正コード（ＥＣＣ）をサポートするため、８ビットのパリティインタフェイスを含むメモリ１２２への６４ビットインタフェイスを提供している。ＥＣＣメモリは望ましいものであるが、所望に応じて取り付けられるものである。システムコントローラ１５０は、６４ビットプロセッサバス１２３と３２ビットローカルバス１５１との間のインタフェイス（もしくはブリッジ）を提供している。ローカルバス１５１は、任意の高速Ｉ／Ｏバス、例えば、ＶＥＳＡローカルバス（ＶＬバス）もしくは周辺コンポネント相互接続（ＰＣＩ）バスである。システムコントローラ１５０は、プロセッサバス１２０とローカルバス１５１の異なる可能性のあるクロックレートをサポートするためのバッファリングを提供する。システムコントローラ１５０は、２つのバス（１２３及び１５１）に用いるために任意であり、ある構成では、２つのバスにわたるデータトランザクション（バースト）をサポートする。ローカルバス１５１は、複数のローカルバス装置と、コンポネント（例えば、ＳＣＳＩアダプタ１７０、ＩＤＥコントローラ１８０、ＬＡＮアダプタ１５７、及びブリッジ及び周辺コントローラ１６０）を接続する。ディスプレイ装置の必要性が、通常、ネットワークサーバコンフィギュレーションに於いては、パーソナルコンピュータもしくはワークステーション構成に比べて低いので、ディスプレイアダプタ１１２は、低い帯域幅のＩＳＡバス１６１に接続されるものとして例示されている。
ＩＤＥコントローラ１８０は、ディスク、テープドライブ、ＣＤ−ＲＯＭなどの記憶装置をインタフェイスするために、様々な構造のコントローラを表している（ＤＩＥ、エンハンストＩＤＥ、ＡＴＡ、エンハンスト小型装置インタフェイス（ＥＳＤＩ）コントローラを含む）。ＩＤＥコントローラ１８０は、２つのディスク（ハードディスク１８１及びフロッピーディスク１８２）と、テープバックアップユニット１８３とに接続されている。他の構成が、ＩＤＥコントローラ１８０を介してＩＤＥ／エンハンストＩＤＥ  ＣＤ−ＲＯＭをインタフェイスしてもよく、ＣＤ−ＲＯＭ１７２及びＣＤジュークボックス１７３の両方が、第１１Ｂ図の実施例の小型コンピュータシステムインタフェース（ＳＣＳＩ）アダプタ１７０を介してインタフェースされる。
ＳＣＳＩアダプタ１８０は、ローカルバス１５１と、複数のＳＣＳＩデバイス（例えば、冗長アレイ廉価ディスク（ＲＡＩＤ）１７１、ＣＤ−ＲＯＭ１７２、スキャナ２０１６、ＣＤジュークボックス１７３、及びスキャナ１７４）に、例示チェーン構成で接続されている。例示を目的として、ＳＣＳＩデバイスのデイジーチェーンが、第１１Ｂに例示されている。ＬＡＮアダプタ１５７は、ＩＥＥＥ８０２．ｘ標準に基づくもののように（例えば、８０２．３ベースバンドイーサネット同軸メディア、ツイスト及び非ツイストペアメディア、１０ベースＴ、８０２．３広帯域ネットワーク、８０２．４トーキンパスネットワーク、８０２．５トークンリングネットワークなど）、及びファイバー分配データインタフェイス（ＦＤＤＩ）標準に基づくもののように、適切なネットワークアダプタを表している。ＩＳＡバス１６１は、ローカルバス１５１に、ブリッジもしくは周辺コントローラ１６０を介して接続されており、ディスプレイアダプタ１１２、テレフォンカード１３６、マルチファンクションＩ／Ｏカード（スーパーＩ／Ｏ１３５などの）を含む様々な周辺コンポネントに対する１６ビットＩ／Ｏバス及びモジュール接続部を提供する。スーパーＩ／Ｏ１３５は、ポインティングデバイス１３７．シリアルポート１３８、パラレルポート１３９、及びディスク１３１に対するサポートを提供する。
スーパースケーラープロセッサ２００に対するマルチメディアワークステーション構成が、第１１Ｃ図に示されている。第１１Ｂ図のサーバ構成と同じように、マルチメディアワークステーション構成は、各々が装置及び接続された構成要素に整合する様々な性能特性を備えた階層的バスを含む。当業者は、第１１Ｃ図の階層バスのさまざまな適切な変形を思いつくことができる。メモリバス１２６は、スーパースケーラープロセッサ２００と、キャッシュ１２７と、メモリ１２８とブリッジ１２９とを接続する。ネットワークサーバ構成（第１１Ｂ図）と同じように、さまざまなキャッシュ構成が、マルチメディアワークステーションに対しても適している。ローカルバス１５１は、好ましくは、ＶＬバスもしくはＰＣＩバスなどの高速Ｉ／Ｏバスからなる。ＳＣＳＩアダプタ１７０、ＬＡＮアダプタ１５７、グラフィックアダプタ１１４、サウンドアダプタ１９０、及びモーションビデオアダプタ１９６は、Ｉ／Ｏバス１５１を介して、互いに、もしくはスーパースケーラープロセッサ２００に接続されている。ＳＣＳＩアダプタ１７０、ＬＡＮアダプタ１５７、及び拡張バスブリッジ１６０は、各々に接続されたコンポネントもしくはデバイスとともに、第１１Ｂ図に於いて説明された対応されたアダプタ、コンポネント、デバイスに匹敵するものである。特に、ＳＣＳＩアダプタ１７０は、デイジーチェーン構成で、複数のＳＣＳＩデバイス（例えば、ディスク１７５、テープバックユニット１７６、及びＣＤ／ＲＯＭ１７２）と接続されている。
スーパースケーラープロセッサ２００のある実施例に基づけば、スーパースケーラープロセッサ２００は、ｘ８６命令セットに対するマルチメディア拡張を行うためのマルチメディアユニット２５６を含んでもよい。第１１Ｃ図を再び参照すると、マルチメディアアダプタ（サウンドアダプタ１９０などの）と、モーションビデオアダプタ１９５、グラフィックアダプタ１１４が、各々、バス１５１、１２６を介してスーパースケーラープロセッサ２００に接続されており、高い帯域幅転送（マルチメディアデータのマルチメディアアダプタと、メモリ１２８と第２記憶デバイス（例えば、ディスク１７５）との間の転送）を提供している。サウンドアダプタ１９０は、デジタル・アナログ（Ｄ／Ａ）及びアナログ・デジタル（Ａ／Ｄ）インタフェイスを、各々、オーディオ信号の合成及びサンプリングのために提供している。Ａ／Ｄ及びＤ／Ａインタフェイス（サウンドアダプタ１９０の）は、各々、マイクロフォン１９１とスピーカ１９２に接続されている。サウンドカードに適した設計は、当業者にはよく知られており、サウンドアダプタ１９０はそのような適切な設計を有する。
モーションビデオアダプタ１９５は、例えば、ビデオカメラ１９６からのビデオ信号のキャプチャ及び圧縮のためのサポートを提供する。さらに、モーションビデオアダプタ１９５は、フレームバッファ１９７を介して、テレビジョンなどのディスプレイ装置１９８、高解像度テレビジョン、及び高解像度コンピュータモニタに、ディスプレイ信号を供給する。モーションビデオアダプタ１９５の他の実施例では、フレームバッファ１９７を省略し、直接ラスタディスプレイを駆動するものであってもよい。さらに、モーションビデオアダプタ１９５の他の実施例は、モーションビデオアダプタ１９５のビデオ出力及びビデオ入力の機能を切り離し、代わりに、別個のビデオ入力コンポネントとビデオ出力コンポネントを提供するものであってもよい。
ビデオ情報は、非常に多くの記憶空間を必要とするので、その情報は通常圧縮されている。したがって、圧縮されたビデオ情報をディスプレイするために、例えば、ＣＤ−ＲＯＭ１７２のコンパクトディスク上に表されたデータから、圧縮されたビデオ情報は解凍されなければならない。高いバンド幅バーストモードのデータ転送は、Ｉ／Ｏバス１５１によってサポートされ、これは、好ましくは、バーストデータ転送を行うことのできる長さに対するサポートを備えたＰＣＩなどのローカルバスである。ビデオ圧縮及び解凍は、スーパースケーラープロセッサ２００によって、及び／もしくはモーションビデオアダプタ１０５によって（マルチメディアユニット内のマルチメディア命令を実行する）によって行われる。すなわち、メモリバス１２６及びブリッジ１２９は、好ましくは、メモリバス１２６とＩ／Ｏバス１５１との間のブリッジ１２９をわたる転送（データのバースト）をサポートする。
Ｘ．  結論
本発明が、特定の実施例に関して説明されたが、上述された説明は、本出願の発明の１つの例に関するものであり、限定を意図するものではない。説明された実施例の特徴の組み合わせ、さまざまな変形及び変更が、本発明の技術的視点内に含まれる。
アペンディクスＡ：ＲＩＳＣ８６（登録商標）文法
このアペンディクスでは第３図に示されるＲＩＳＣ８６（登録商標）文法によるｏｐ−ｃｏｄｅを記述する。
ＲｅｇＯｐ定義
Ｏｐコードのビット３６及び３７は００であり、ＲｅｇＯｐを指定する。ビット１０及び１１は使用されず、００となる。
0003720371.tif 000004
0003720371.tif 000005
“／”により分けられるニーモニックは、固有のＴｙｐｅフィールドを有し、レジスタユニット２５３及び２５４より固有に扱われる。これらのＲｅｇＯｐｓはフィールドＥｘｔ及びＳＳにより示され、且つＯＣＵ２６０によりコミットされる状態修飾において異なる。
ＴｙｐｅフィールドはフィールドＤＳｚに基づき別様に解釈される。上述したように、実行ユニットは１バイトサイズのＲｅｇＯｐに対してあるオペレーションを実行し、１６／３２ビットサイズのＲｅｇＯｐに対して別のオペレーションを実行する。
形式ｘ１ｘｘｘｘ、１ｘ１ｘｘｘ、或いはｘｘ０１ｘｘのＴｙｐｅフィールドを有する全てのバイトサイズのＲｅｇＯｐｓ及び全てのＲｅｇＯｐｓはＲＵＸ−ｏｎｌｙオペレーションである。
ハードウェアは形式ｘｘ０１ｘｘのＴｙｐｅフィールド値を有する全てのＲｅｇＯｐｓを“ｃｃ−ｄｅｐｅｎｄｅｎｔ”として扱い、従ってステータスオペランドフォワーディングを用いて、そのオペレーションの実行と同期する。
Ａ．２  ＲｅｇＯｐ拡張フィールドＥｘｔ［３：０］
MOVcc Op'sの場合、｛Type［0］，Ext［3:0］｝は５ビット条件コードを指定する。
RDxxx/WRxxx Op'sの場合、｛Type［0］，Ext［3:0］｝は５ビット専用レジスタ番号を指定する。WRFLG（．cc）の場合“．ｃｃ”が指定されるなら、エンコードする専用レジスタ番号は、所定のＳｔａｔＭｏｄ値に一致する。RDSEG Opsの場合、Ext［3:0］は４ビットセグメント（セレクタ）レジスタを指定する。セグメントレジスタのセットはｘ８６アーキテクチャレジスタ及び付加的な専用セグメントレジスタを含む。
0003720371.tif 000006
ＯＳセグメントレジスタは、Ｏｐデコード時間にて、エミュレーション環境からの現在３ビットレジスタ番号により置き換えられる。
フィールドＳＳ＝１を有する他のオペレーションの場合には、｛Type［0］，Ext［3:0］｝Ext［3:0］｝は（スケジューラ２８０に格納されるような）４つの状態修飾ビットを指定する。
Ａ．３  ＲｅｇＯｐオペレーション／データサイズフィールドＤＳｚ［２：０］
フィールドＤＳｚはオペレーションのためのデータサイズを示す。
0003720371.tif 000007
サイズＤＳｉｚｅ、ＡＳｉｚｅ、ＳＳｉｚｅは環境更新中に、対応する環境変数を用いて置き換えられるプレースホルダ（ｐｌａｃｅｈｏｌｄｅｒｓ）である。
Ａ．４  ＲｅｇＯｐ  ＲＵＸ−ｏｎｌｙフィールドＲ１
Ｒ１はＲｅｇＯｐがレジスタユニット２５１に対してのみ発行可能であることを示すためにセットされる。
Ａ．５  ＲｅｇＯｐ指定フィールドＤｅｓｔ［４：０］
フィールドＤｅｓｔ［４：０］は、そのオペレーションに対するデスティネーションレジスタを指定する５ビット汎用レジスタ番号を保有する。
Ａ．６  ＲｅｇＯｐ第１ソースフィールドＳｃｒ１［４：０］
フィールドＳｃｒ１［４：０］は、そのオペレーションに対する第１のソースレジスタを指定する５ビット汎用レジスタ番号を保有する。
Ａ．６  ＲｅｇＯｐセット状態フィールドＳＳ
フィールドＳＳは、そのオペレーションがフィールドＥｘｔにより示される状態フラグを変更することを示すためにセットされる。
Ａ．６  ＲｅｇＯｐフィールＩ
フィールドＩは、フィールドＩｍｍ８／Ｓｒｃ２が即値、或いはレジスタ番号を含むか否かを示す。
Ａ．６  ＲｅｇＯｐフィールドＩｍｍ８／Ｓｒｃ２［７：０］
Ｉｍｍ８／Ｓｒｃ２は第２のソースオペランドに対する即値、或いはレジスタ番号を保有する。Ｉ＝０の場合には、Ｉｍｍ８／Ｓｒｃ２［４：０］は５ビットレジスタ番号を含む。Ｉ＝１の場合には、Ｉｍｍ８／Ｓｒｃ２［７：０］はフィールドＤＳｚにより示されるサイズに符号拡張されたビット符号付き即値を指定する。
ＬｄＳｔＯｐ定義
Ｏｐコードのビット３７及び３６はＬｄＳｔＯｐを示すために０及び１となる。
Ａ．７  ＬｄＳｔＯｐ  ＴｙｐｅフィールドＴｙｐｅ［３：０］
0003720371.tif 000008
Ａ．８  ＬｄＳｔＯｐアドレス計算サイズフィールドＡＳｚ［１：０］
ｅｍｃｏｄｅ環境の置換前に、フィールドＡＳｚ［１：０］は以下のようなアドレス計算サイズを示す。
0003720371.tif 000009
ｅｍｃｏｄｅ環境の置換は、ＡＳｉｚｅ、ＳＳｉｚｅ、或いはＤＳｉｚｅを適切な固定サイズに変更する。
Ａ．９  ＬｄＳｔＯｐデータサイズフィールドＤＳｚ［１：０］
0003720371.tif 000010
Ａ．１０  ＬｄＳｔＯｐデータフィールドＤａｔａ［４：０］
フィールドＤａｔａは、その格納ソース、すなわちロードデスティネーションレジスタに対する５ビット汎用レジスタ番号を示す。
Ａ．１０  ＬｄＳｔＯｐセグメントフィールドＳｅｇ［３：０］
フィールドＳｅｇ［３：０］はセグメントレジスタを指定する。
Ａ．１１  ＬｄＳｔＯｐベースオペランドフィールドＢａｓｅ［３：０］
フィールドＢａｓｅは、そのレジスタファイルの下半分の汎用レジスタを示す、４ビットレジスタ番号を含む。そのレジスタからの値はそのアドレス計算に対するベースとなる。
Ａ．１２  ＬｄＳｔＯｐインデックスフィールドＩｎｄｅｘ［３：０］
フィールドＢａｓｅは、レジスタファイルの下半分の汎用レジスタを示す４ビットレジスタ番号を含む。そのレジスタからの値は、アドレス計算中スケールされベースに加えられるアドレスインデックスとして用いられる。
Ａ．１３  ＬｄＳｔＯｐインデックススケールファクタフィールドＩＳＦ［１：０］
フィールドＩＳＦはそのインデックスが１、２、４或いは８のファクタによりスケールされるべきであるということを示す。
Ａ．１４  ＬｄＳｔＯｐ大きなディスプレースメントフィールドＬＤ
フィールドＬＤは、そのオペレーションが先行するＬＩＭＭＯｐ、すなわちフィールドＤｉｓｐ８からの小さな（８ビット）ディスプレースメントからの、大きな（３２ビット）ディスプレースメントを用いるか否かを示す。
Ａ．１５  ＬｄＳｔＯｐ小さなディスプレースメントフィールドＤｉｓｐ８［７：０］
フィールドＤｉｓｐ８［７：０］はフィールドＡＳｚにより示されるサイズに符号拡張された８ビットディスプレースメントを含む。
ＬＩＭＭＯｐ定義
Ｏｐコードのビット３７及び３６は１１であり、ＬＩＭＭＯｐを示す。
Ａ．１６  ＬＩＭＭＯｐ即値フィールドＩｍｍＨｉ及びＩｍｍＬｏ
フィールドＩｍｍＨｉ［１４：０］及びＩｍｍＬｏ［１６：０］はそれぞれ３２ビット即値の最上位１５ビット及び最下位１７ビットを含む。
Ａ．１７  ＬＩＭＭＯｐデスティネーションフィールドＤｅｓｔ［３：０］
フィールドＤｅｓｔ［３：０］は即値に対するデスティネーションを示す４ビットレジスタ番号を格納する。
注記：標準ＮＯ−ＯＰはLIMM t0，＜undefined＞であり、LIMM t0，＜undefined＞は完了した状態にてスケジューラにロードされ、書き込みにより変化しないレジスタｔ０に対して即値＜undefined＞を書き込むことによりコミットされる。
ＳｐｅｃＯｐ定義
Ｏｐコードのビット３７及び３６は１０であり、ＳｐｅｃＯｐを示す。ビット３５はこのアペンディクスにおいて説明されるＳｐｅｃＯｐｓに対してセットされるが、ＦｐＯｐｓに対してはクリアされる。
Ａ．１８  ＳｐｅｃＯｐＴｙｐｅフィールドＴｙｐｅ［３：０］
0003720371.tif 000011
Ａ．１９  ＳｐｅｃＯｐ条件コードフィールドｃｃ［４：０］
フィールドｃｃ［４：０］はＢＲＣＯＮＤオペレーションに対する５ビット条件コードを含む。ビットｃｃ［４：１］はその条件を指定し、以下のように検査される。
0003720371.tif 000012
ビットｃｃ［０］は、その条件下或いはコンプリメント真理に対して評価されるか否かを指定する。
上記定義において、“〜”、“・”、“＋”及び“＾”はそれぞれ、論理演算ＮＯＴ、ＡＮＤ、ＯＲ及びＸＯＲを示す。ＯＦ、ＳＦ、ＺＦ、ＡＦ、ＰＦ及びＣＦは標準ｘ８６ステータスビットである。ＥＺＦ及びＥＣＦはアーキテクチャのゼロフラグＺＦ及びキャリーフラグＣＦが変化しない時、ｅｍｃｏｄｅがｘ８６命令をインプリメントするシーケンス内において用いるエミュレーションゼロフラグ及びエミュレーションキャリーフラグである。ＩＰ、ＤＴＦ及びＳＳＴＦはそれぞれ割り込み保留を示す信号、デバックトラップフラグ及び信号ステップトラップフラグである。
分岐条件ＳＴＲＺとＭＳＴＲＣは論理的に固有であり、ムーブストリング命令ＭＯＶＳのようなｘ８６命令をインプリメントする際に用いられる。そのようなｘ８６命令に対して、ｅｍｃｏｄｅはインデックスをレジスタ内に格納し、ＢＲＣＯＮＤと共に終了するループを生成する。そのループの各繰り返しは大量のデータを転送し、そのインデックスをデクリメントする。分岐予測は初めに、ＢＲＣＯＮＤがループの始めに分岐するということを予測する。条件ＭＳＴＲＣは、そのインデックスがｘ８６命令の完了近くに、定義済みのポイントに到達するということを示す。デコーダ２４０はその時スケジューラ２８０にロードされているＢＲＣＯＮＤに対する分岐予測を変更する。従って誤り予測された分岐及び関連するアボートは、ループが完了するとき避けることができる。これはプロセッサ効率を改善する。
Ａ．２０  ＳｐｅｃＯｐデータサイズフィールドＤＳｚ［１：０］
フィールドＤＳｚ［１：０］はロード定数演算ＬＤＫ及びＬＤＫＤに対するデータサイズ１バイト、４バイト或いはＤＳｉｚｅを示す。
Ａ．２１  ＳｐｅｃＯｐ指定フィールドＤｅｓｔ［４：０］
フィールドＤｅｓｔはオペレーションＬＤＫ及びＬＤＫＤのデスティネーションである５ビットレジスタ番号を保有する。
Ａ．２１  ＳｐｅｃＯｐ即値フィールドＩｍｍｌ７［１６：０］
フィールドＩｍｍｌ７［１６：０］は１７ビット定数、１７ビット符号付き即値或いは１４ビットＯｐアドレスを含む。
汎用レジスタ定義
２４の整数汎用レジスタがある。最初の８つのレジスタはｘ８６専用レジスタＡＸからＤＩまでに対応する。残りの１６レジスタはＣＩＳＣ命令をインプリメントする複数のオペレーションシーケンス内で用いられる一次的な、すなわちスクラップレジスタとして機能する。５ビットレジスタ番号を用いるオペレーションは３２レジスタにアクセスでき、整数レジスタに対して用いられない残りのレジスタ番号は環境変数置換のためのマルチメディアレジスタ、すなわちプレースホルダである。
ｘ８６整数レジスタセットは、レジスタ（ＡＸ、ＣＸ、ＤＸ及びＢＸ）の半分の下位２バイトのそれぞれのバイトオペレーションに対するアドレッシングを支援する。レジスタサイズ仕様に基づき、ｘ８６内の３ビットレジスタ番号は、ｈｉ／ｌｏいずれかのバイトレジスタ、すなわちｗｏｒｄ／ｄｗｏｒｄレジスタと解釈される。オペレーションパースペクティブから、このサイズはオペレーションのＡＳｚ或いはＤＳｚフィールドのいずれかにより指定される（ＬｄＳｔＯｐｓにおけるＢａｓｅ及びＩｎｄｅｘレジスタの場合にはＡＳｚ、一般にＤａｔａ／Ｄｅｓｔ、Ｓｒｃ１及びＳｒｃ２レジスタの場合にはＤＳｚ）。スクラッチ整数レジスタセットはレジスタ（ｔ１−ｔ４及びｔ８−ｔ１１）の更に半分の下位２バイトの同様なアドレッシングを支援する。
以下の表は名前付きレジスタに対するレジスタ番号１から２４をマップ化する。
0003720371.tif 000013
ニーモニック“ｔ０”及び“＿”は書き込まれるレジスタに対して同義であるが常に読み出す時値０に戻される。“＿”は一般に文字に用いられ、オペランド或いは結果値はｄｏｎ‘ｔ  ｃａｒｅである。上記したように、レジスタｔ０はバイトモードにおいて参照されることができない。
アペンディクスＢ：疑似ＲＴＬ記述
このアペンディクスにおける表は、典型的なプロセッサ２００の実施例を通して用いられる信号を発生する理論を説明する。各表は更なる説明、すなわち他の表を参照せずに、他の表において説明される信号を用いる場合がある。このアペンディクスにおいて説明される信号は他で明確に示されなければアサートされる、すなわちアクティブハイである。
以下の表記法が用いられる。“１”はインバータにより提供されるような信号の補数、すなわち逆数を示す。“・”“  ”及び“＆”を介して接続される信号はＡＮＤゲートによりインプリメントされることができるような論理ＡＮＤとして組み合わせられる。“＋”介して接続される信号はＯＲゲートによりインプリメントされることができるような論理ＯＲとして組み合わせられる。“＾”を介して接続される信号はＸＯＲゲートによりインプリメントされることができるような排他的論理ＯＲとして組み合わせられる。表記法（a）x=b else x=c、すなわち別にはlf（a）x=b : cは信号ａがアサートされるなら信号ｂに等しく、そうでなければｃに等しい出力信号ｘを有するマルチプレクサを示す。もし、else x=cが省略されるなら信号ａがローであるなら信号ｘはローである。マルチプレクサを表す別の表記法はx=switch（A）case A1: x1 case A2: x2 ... case An: xnであり、その場合出力信号ｘはマルチビット選択信号Ａの値に依存するｘ１或いはｘ２或いは．．．ｘｎを有する。x=switch（A）x1:x2: ... xnのように省略される場合には、出力信号ｘ１からｘｎは信号Ａの逐次値に対応する。記載される大部分の信号は各クロックサイクルを変更する。表記法＠（ｃｌｏｃｋ）は、信号Ａが後続クロックサイクルにおいて用いられる信号クロックのエッジにてレジスタにラッチされるということを示す。
当業者により理解されているように、以下に示すロジックは様々な方法においてインプリメントされる。
表Ｂ．１  スタティックフィールド記憶素子オペレーション
0003720371.tif 000014
表Ｂ．２  ダイナミックフィールド記憶素子オペレーション
0003720371.tif 000015
スケジューラ２８０に対する汎用的なコントロールロジック５２０は、それぞれのフリップフロップ内にロードされる信号を選択する独立な信号ＬｄＥｎｔｒｙ［ｉ］を発生する。
表記法ｘｘＯｐ．ｙｙｙはタイプｘｘＯｐのＲＩＳＣ８６命令に対して定義されるフィールドｙｙｙからの値を示し、オペレーションデコーダ５１０に対する入力信号を示す。例えば、ＲｅｇＯｐ．ＳｒｃｌはＲｅｇＯｐのＳｒｃｌフィールドと同じ位置における命令のビットを示す。第３図及びアペンディクスＡはＲｅｇＯｐ、ＬｄＳｔＯｐ、ＬＩＭＭＯｐ及びＳｐｅｃＯｐに対する典型的なフィールド定義を確定する。
表Ｂ．３  フィールドＴｙｐｅ
0003720371.tif 000016
“ＲＵＹＤ”はデバッグするための第２のレジスタユニットＲＵＹをディスエーブルする専用レジスタである。
表Ｂ．４  フィールドＬＤ  Ｉｍｍ
0003720371.tif 000017
表Ｂ．５  フィールドＳｒｃｌＲｅｇ
0003720371.tif 000018
表Ｂ．６  フィールドＳｒｃ２Ｒｅｇ
0003720371.tif 000019
表Ｂ．７  フィールドＳｒｃＳｔＲｅｇ
0003720371.tif 000020
表Ｂ．８  フィールドＤｓｔＲｅｇ
0003720371.tif 000021
表Ｂ．９フィールドＳｒｃ１ＢＭ、Ｓｒｃ２ＢＭ、及びＳｒｃ１２ＢＭ
0003720371.tif 000022
表Ｂ．１０フィールドＳｒｃＳｔＢＭ
0003720371.tif 000023
表Ｂ．１１フィールドＯｐＩｎｆｏ
0003720371.tif 000024
表Ｂ．１２ステートＦｉｅｌｄ
オペレーションデコーダ５１０デコーダ５１０は対応するＲＩＳＣ８６命令のＯｐＩｄフィールドに従ってｂ００００（未発行）或いはｂ１１１（完了済み）のいずれかとしてフィールドＳｔａｔｅ［３：０］を初期化する。
0003720371.tif 000025
フィールドＳｔａｔｅ（信号Ｓ０、Ｓ１、Ｓ２及びＳ３）は以下のようにオペレーション実行中変化する。
0003720371.tif 000026
信号SC_Abortはアサートされ、スケジューラ２８０において現在実行中のオペレーションをアボートする。
表Ｂ．１３  フィールドＥｘｅｃ１
オペレーションデコーダ５１０はフィールドＥｘｅｃ１をローに初期化する。
0003720371.tif 000027
その後フィールドExec1=Iは以下のように変化する。
0003720371.tif 000028
信号IssueOpToRUXはレジスタユニット２５３に対する発行選択スキャンチェイン中にエントリ内にて発生する。
表Ｂ．１４フィールドＤｅｓｔＢＭ
オペレーションデコーダ５２０はデスティネーションレジスタのいずれかのバイトが変更されるかを示すために、オペレーションに従ってフィールドＤｅｓｔＢＭを初期化する。
0003720371.tif 000029
フィールドDestBMは以下のようにクリアされる。
0003720371.tif 000030
表Ｂ．１５フィールドＤｓｔＶａｌ
オペレーションデコーダ５１０は以下の論理を用いて関連するＲＩＳＣ８６命令からフィールドＤｅｓｔＶａｌを生成する。
0003720371.tif 000031
オペレーションフィールドDestValの後続実行は、以下のように変化する。
0003720371.tif 000032
ここで信号DC_DestRes、SU1_DestRes、RUX_DestRes及びRUY_DestResはそのオペレーションを実行した実行ユニットからの信号である。
表Ｂ．１６  フィールドＳｔａｔＭｏｄ
オペレーションレコーダ５１０は関連するオペレーションに従ってフィールドStatModをセットする。
0003720371.tif 000033
スケジューラ２８０の論理が、アボート中にフィールドStatModをクリアする。
表Ｂ．１７  フィールドＳｔａｔＶａｌ発生論理
フィールドStatValは初期状態では０である。
0003720371.tif 000034
そして
RegOpが完了する時変化する。
0003720371.tif 000035
表Ｂ．１８  フィールドOprndMatch_XXsrcY
フィールドOprndMatch_XXsrcYは発行ステージから各プロセシングパイプラインのオペランドフォワードステージへ（或いはある場合にはステージ１からＳＵのステージ２へ）情報を渡し、値は汎用の信号ＸＸＡｄｖＹ（より詳細にはＸＸＡｄｖ０或いはＳＵＡｄｖ２）により制御される。
0003720371.tif 000036
表Ｂ．１９  フィールドＤＢＮ
フィールドＤＢＮは初期状態では０である。
0003720371.tif 000037
そして実行中以下のように変化する。
0003720371.tif 000038
表Ｂ．２０  ＯｐクワッドフィールドＥｍｃｏｄｅ
0003720371.tif 000039
表Ｂ．２１  ＯｐクワッドフィールドＥｒｅｔ
0003720371.tif 000040
表Ｂ．２２  ＯｐクワッドフィールドＦａｕｌｔＰＣ
0003720371.tif 000041
Ｏｐクワッド内の第１のデコーダされたｘ８６命令に対する論理ＰＣ。
表Ｂ．２３  ＯｐクワッドフィールドＢＰＴＩｎｆｏ
0003720371.tif 000042
現在ＢＰＴアクセスからの情報
表Ｂ．２４  ＯｐクワッドフィールドＲＡＳＰｔｒ
0003720371.tif 000043
現在のリターンアドレススタック。
表Ｂ．２５  ＯｐクワッドフィールドＯｐＱＶ
オペレーションデコーダ５１０はスケジューラ２８０の上位にロードされるＯｐクワッドが有効であるか否かを示すために、初期状態ではフィールドＯｐＱＶをセットする。
0003720371.tif 000044
このマルチプレクサは固有ではない。同様の（しかし３：１）マルチプレクサからくる全ての新しいＯｐクワッドフィールドはＥｘｃｅｐＡｂｏｒｔの記述に対するＯＣＵ記述を調べる。
フィールドＯｐＱｖはアボートの後にクリアされ、Ｏｐクワッドを無効とし、実行すなわちコミットメントを防ぐ。
0003720371.tif 000045
表Ｂ．２６  ＯｐクワッドフィールドＬｉｍＶｉｏｌ
0003720371.tif 000046
フィールドＬｉｍＶｉｏｌは、新しいＯｐクワッドが常駐し、かつスケジューラにおいて有効になる（すなわち最初のサイクル中）、全ての他のフィールドより１サイクル遅れて実際にロードする。これは、このＯｐクワッドフィールドの上記記述において反映される。
0003720371.tif 000047
表Ｂ．２７  シフトコントロール論理
信号ＬｄＥｎｔｒｙ０からＬｄＥｎｔｒｙ５は第６図に関連して記述されるように（新しいＯｐクワッドを有する）列０のローディングから、列４からのＯｐクワッドを有する列５のローディングを制御する。この表においては、ＯＣＵ２６０からの入力信号ＯｐＱＲｅｔｉｒｅは、スケジューラ２８０の一番下の列内の有効なＯｐクワッドがリタイアされ得るか否かを示し、入力信号ＨｏｌｄＯｐＱ３、ＨｏｌｄＯｐＱ４Ａ及びＨｏｌｄＯｐＱ４Ｂは、条件コード評価が列３或いは４におけるオペレーションを停止するか否かを示す。
0003720371.tif 000048
表Ｂ．２８  単一エントリ発行スキャン項
単一エントリ項は以下のようになる。
0003720371.tif 000049
ここで、“Ｓｔａｔｅ＝Ｕｎｉｓｓｕｅｄ”は〜Ｓ０であり“Ｅｘｅｃｕｔａｂｌｅ  ｂｙ  ｘｘは実行パイプラインＬＵ／ＳＵ／ＲＵＸ／ＲＵＹに対する、それぞれＬＵ／ＳＵ／ＲＵ／ＲＵ／ＲＵＹに等しい。ここで用いられるタイプビットＬＵｉ、ＳＵｉ、ＲＵｉ、ＲＵＸｉはＬｄＯｐｓの場合ＬＵ＝１であり、ＳｔＯｐｓ（ＬＥＡのようなオペレーションを含む）の場合ＳＵ＝１であり、全てのＲｅｇＯｐｓの場合ＲＵ＝１であり、ＲＵＹにより実行可能なＲｅｇＯｐｓの場合ＲＵＹ＝１である。
表Ｂ．２９  ＬＵ、ＳＵ及びＲＵＸルックアヘッドスキャンチェイン
６つの単一エントリがスキャンチェインＸＸに対する４つのグループ伝搬信号ＸＸＰｇｒｐ［３：０］及びグループキル信号ＸＸＫｇｒｐ［３：０］を形成するための信号である。ここでＸＸはＬＵ、ＳＵ或いはＲＵＸである。各グループ信号はスケジューラ２８０のクワドラントに対応する。以下はスキャンチェインの１つに対するエントリ０から５を含む第１クワドラント（クワドラント０）に対するグループ信号である。
0003720371.tif 000050
ここでＰ０からＰ５及びＫ０からＫ５は６つの連続するエントリ及びパイプラインＸＸに対する単一エントリ項である。
グループキル信号ＸＸＫｇｒｐがアサートされ、且つより古いグループがスキャンビットをキルしない場合、グループ信号は選択された命令を含む。XXIssueQuadrant［0:3］からのビットはアサートされ、パイプラインＸＸに対して発行するために選択されたオペレーションを含むグループを指定する。信号XXIssueQuadrant［0:3］は以下のように生成される。
0003720371.tif 000051
発行されるオペレーションを示す信号［IssueToXXi］は、もしあるなら、パイプラインＸＸに発行され、以下のように、信号IssueQuadrant及び単一エントリキル項IssuableToXXを生成する。
0003720371.tif 000052
表Ｂ．３０  ＲＵＹスキャンチェイン（３ビットグループ）
単一エントリＰ、Ｋ、Ｏ及びＧは組み合わされ、３つのエントリの８つのグループに対するグループ項Ｇｇｒｐ［７：０］、Ｐｇｒｐ［７：０］及びＯｇｒｐ［７：０］を生成する。グループ０の場合、そのグループ項は以下のようになる。
0003720371.tif 000053
ここで、ｘ、ｙ、及びｚはそれぞれグループＩにおける最古、中間及び最新エントリを特定する。単一エントリＧ項は信号IssuableToRUX［23:0］のビットであり、単一エントリＫ項はIssuableToRUY［23:0］のビットである。
グループ項は更に大きいグループに対してグループ項を形成するためのステージにおいて組み合わされる。以下の式はグループＸ及びＹの論理和であるグループＸＹに対するグループ項を形成するためにグループ項ＧＸ、ＯＸ、ＰＸ、ＧＹ、ＯＹ及びＰＹを組み合わせる論理を記述する。
0003720371.tif 000054
信号CinGrp［6:0］及びOinGrp［6:0］はその組み合わせからの出力である。信号CinGrp［6:0］は信号G_7、G_67、G_567、G_4567、G_34567、G_234567、及びG_1234567である。出力信号OinGro［6:0］は信号O_7、O_67、O_567、O_4567、O_34567、0_234567,及びO_1234567である。
信号IssueOpToRUY［23:0］RUY［23:0］の１ビットはアサートされ、選択されたエントリを特定する。以下の式は信号IssueOpToRUYを発生する論理を記述する。
0003720371.tif 000055
表Ｂ．３１  オペランド情報ブロードキャスト
各エントリはそのエントリに含まれるオペレーションに対するソースオペランドを記述する信号Src1InfoInfo及びSrc2Src2Infoを生成する。
0003720371.tif 000056
そのオペレーションが発行のために選択されるなら、そのエントリは、そのオペレーションが発行する実行ユニットに関連するオペランド情報バス上の信号Src1Info及びSrc2Infoを駆動する。信号OprndInfo_XXsrcYは実行ユニットＸＸに対するソースオペランドＹに関連する、オペランド情報バスにより実際に運ばれる信号であり、以下のように生成される。
0003720371.tif 000057
表Ｂ．３２  オペランド情報一致比較
以下の式は包括的な比較を要約する。
0003720371.tif 000058
ここで、”XX”XXsrcY”はLUs SUsrc1、SUsrc2、RUXsrc1、RUXsrc2、RUYrc2、RUYsrc1、及びRUYsrc2の一つであり、”bus”はオペランド情報バス５５２の１つにある信号OprndInfo_XxsrcYを参照する。バイトマークチェッキングは簡単化及びトレードオフとしてBM［2］を含まない。BM［2］=1は（BM［1］BM［0］）=1を暗示し、従ってbusBM［2］=1であるなら、DestBM［2］に関わらず、一致が示される。
表Ｂ．３３  オペレーション情報ブロードキャスト
以下の式は発行されるオペレーションを含むエントリからのOpInfoフィールドの読出しを要約する。以下の式に従って、各エントリはLU、SU、R RUX或いはRUYパイプラインに対応するオペレーション情報バス上にOpInfo_LU、OpInfo_SU、OpInfo_RUX或いはOpInfo_RUYを生成する場合がある。
0003720371.tif 000059
発行されたオペレーションを含むエントリのみがバス５５１上の信号を駆動する。
信号XXAdvOdvOは内部レジスタを制御するのと同じ方法でこれらの外部パイプラインレジスタを制御する。
表Ｂ．３４  オペランド選択スキャンチェイン
単一エントリ項は８つのスキャンチェインLUsLUsrc1、1、LUsrcsrc2、SU SUsrc1、c1、SUsrcUsrc2、RU、RUXsrcsrc1、RUXsrc2、RUYsrc1、RUYsrc2のための項である。
0003720371.tif 000060
0003720371.tif 000061
４ビットグループに対するグループ項は以下のように構成される。
0003720371.tif 000062
別の方法では、３ビット或いは６ビットグループが用いられる。
各エントリは、そのエントリが実行パイプラインＸＸに対するオペランドsrcYを供給するか否かを示す信号SupplyValueToXXsrcYを生成する論理信号を含む。
0003720371.tif 000063
XXsrcYchain.CIN及びXXsrcYchain.KはパイプラインXXのオペランドsrcYに対応するスキャンチェインにおけるエントリの入力スキャンビット信号及びキル項である。
表Ｂ．３５  オペランド転送に対するイネーブルロジック
各エントリは転送されるべき８つのオペランド信号Oprnd_XXsrcYに対応する８つのドライバを有する。信号SupplyValueToXXSrcYがオペランド選択段階中にアサートされるなら、１つのエントリがオペレーション結果値を供給するためにそのドライバをイネーブルする。
0003720371.tif 000064
スキャンチェインからのスキャンビット出力がセットされるなら、レジスタファイル２９０は信号Oprnd_XXsrcYを供給するためにそのドライバをイネーブルする。
0003720371.tif 000065
表Ｂ．３６  オペランド情報信号
オペランドを供給するエントリはまた、以下のようにオペランドステータス信号を供給する。
0003720371.tif 000066
オペランドドライバに対するイネーブル信号は以下のようにオペランドステータス信号に対するドライバをイネーブルする。
0003720371.tif 000067
オペランド状態バス５５３を駆動するレジスタファイル２９０は、いずれのオペランド状態バスにも対応するオペランドを供給するために選択されるエントリではない。レジスタファイル２９０からのオペランドステータス信号は以下の形式からなる。
0003720371.tif 000068
オペランド状態バス５５３を駆動するためのレジスタファイル２９０をイネーブルする論理は以下のように要約される。
0003720371.tif 000069
表Ｂ．３７  ディスプレースメントフォワーディング
オペランドフォワーディングステージ中、エントリからのディスプレースメントフォワーディングはそのエントリか或いはスケジューラ２８０内の先行するエントリかのいずれかによりイネーブルされる。以下はロードユニット２５１及びストアユニット２５２に対する信号Disp_LU及びDisp_SUのフォワーディングを要約する。
0003720371.tif 000070
値”thisOp”及び”nextOp”は、後続する信号LU、S1、S0及びLDからの物理エントリを特定する。またスケジューラ２８０内のfirst/newestエントリの場合、NextOP項は０である。
表B.３８  即値フォワーディング
ドライバは以下のようにレジスタユニット２５３及び２５４に対する即値を供給する。
0003720371.tif 000071
以下の式はオペランドステータス信号に対する別々のバスをイネーブルすることを要約する。
0003720371.tif 000072
表Ｂ．３９  データオペランド選択及びフォワーディング
オペレーション選択段階４５６中に、各エントリが実行ステージ４５０にあるか否かを確定する。
0003720371.tif 000073
データオペランドブロードキャスト段階中、実行ステージ４５０内にあるべきと確定されるオペレーションを含むエントリは、以下のようにデータオペランド情報信号を生成する。
0003720371.tif 000074
各エントリはそのエントリがデータオペランドのソースレジスタに影響を与えるオペレーションを含むか否かをデータオペランド情報信号から測定する。各エントリ内のデータオペランドマッチレジスタはそのエントリがデータオペランドのソースに影響を与えるか否かを示す値
0003720371.tif 000075
ここで”bus”はOprndInfo_SUsrcStを示す。
オペランド選択段階４６１中に、選択されたエントリから開始するスキャンチェインはデータオペランドのソースを選択する。そのソースは、先行するエントリがデータオペランドに影響を与えない場合、そのデータオペランドのソース、すなわちレジスタファイル２９０に影響を与えない最新の先行エントリである。スキャンチェインは単一エントリスキャン項を有する。
0003720371.tif 000076
グループレベルスキャン方程式は表Ｂ３４に示すような他のオペランド選択スキャンチェインに対する方程式と同一であり、各エントリはそのエントリに対する入力スキャンビット及びキル項からそのエントリが選択されるか否かを判定する。
0003720371.tif 000077
データオペランド転送段階４６２中に、各スケジューラエントリ内のドライバは以下のようにイネーブルされる。
0003720371.tif 000078
いかなるエントリのドライバもイネーブルされないなら、レジスタファイルの出力でのドライバは以下のようにイネーブルされる。
0003720371.tif 000079
バス５５４上を転送されるデータオペランドOprnd_SUsrcStは、ストアユニット２５２内のレジスタ１０５２内に捕捉される。データオペランド転送段階４６２中に、コントロールロジック５２０は読み出されるオペランドステータス値を用いる。
表Ｂ．４０  ロードストアオーダリングスキャンチェイン
ロードストアオーダリングスキャンチェインは各エントリのＳｔａｔｅ及びＴｙｐｅフィールドに基づく単一エントリpropagate/kill（P/K）項を有する。３つのLdOpスキャンチェインの場合、ST TypeビットはSUビットの代わりに用いられる。これは論理アドレスをのみを生成するLEAオペレーションからの実際のリファレンスメモリであるStOpsを識別する。LUst2/LUst1/LUst0及びSUld2/SUld1はロードユニット２５１及びストアユニット２５２に対するそれぞれのスキャンチェインを示す。
そのスキャンチェインに対する単一エントリ項は以下のようになる。
0003720371.tif 000080
（４つのグループに基づく）グループルックアヘッド項は以下のようになる。
0003720371.tif 000081
Ｏｐクワッドに対するスキャンビットインプット信号は以下のようになる。
0003720371.tif 000082
LdStOpに対する実行ステージ４６０の第２段階４６２中に、LdStOpを保有するエントリに対するtwo/threeスキャンビットCin'sは以下のように２４：１マルチプレクサを用いて組み合わせられる。
0003720371.tif 000083
スキャンビットCinは、汎用信号が１つである場合に、関連するステージがより古いオペレーションを含むという結果を用いて、汎用信号においてドライブされる時反転される。
表Ｂ．４１  スケジューラから外部論理への情報
以下は様々な時点で、外部において使用するための、スケジューラ２８０から読み出された情報を要約する。
オペランド情報ブロードキャスト段階：
0003720371.tif 000084
オペランド転送段階中：
0003720371.tif 000085
表Ｂ．４２  オペレーション有効ビット
以下は４つの実行パイプラインの発行ステージに対するOpVビットを要約する。
0003720371.tif 000086
表Ｂ．４３  RegOpバンピング
汎用コントロールロジック５２０は以下のように信号BumpRUX/Yを生成するロジックを含む。以下に含まれる項は、デッドロック状況になるものを処理する項である。
オペランドフォワードステージはRUX-onlyオペレーションであり、かつ発行されるべきRegOpがまたRUX-onlyオペレーションである場合に、信号InhBumpRUXはRegOpバンピングを禁止する。
0003720371.tif 000087
信号BumpRUXは、もし禁止されないなら、実行ユニット２５３のオペランドフォワードステージからのRegOpをバンプするためにアサートされ、ソースオペレーションの１つはアサートされないか或いは、オペランドフォワードステージ内のLdOpまたはタイムアウト信号がタイムアウトカウント以上の場合に停止されるオペランドフォワーディングステージ内のRegOpに応じてアサートされる。
0003720371.tif 000088
第２レジスタユニット２５４からのRegOpをバンプするための信号BunmRUYは禁止されないが、信号BumpRUXとして同じ理由のためにアサートされる。
0003720371.tif 000089
表Ｂ．４４  オペランド転送マルチプレクサコントロール
以下の式は各オペランドマルチプレクサに対する５つの入力選択信号を要約する。汎用コントロールロジック５２０がオペランドを提供するためのオペランドバス５５４或いは結果バス５６１から５６４の１つかのどちらかを選択するためにバス５５３上のオペランド状態信号を用いる。ほとんどのオペランドの場合、ソースオペレーションが完了するなら、オペランドバス５５４が選択される。
0003720371.tif 000090
RegOpsの第２のオペランドの場合には、ソースオペレーションが完了するか或いはそのオペランドが即値である場合には、オペランドバスが選択される。
0003720371.tif 000091
ここで信号RUXsrc2Imm及びRUYsrc2Immはsrc2オペランドが即値であることを示す。
0003720371.tif 000092
オペランドバス５５４が選択されない場合、ソースオペレーションを実行する実行ユニット２５１から２５４の１つからの結果バスが選択される。
0003720371.tif 000093
その選択されたオペランドは無効とされる場合もある。実行ユニットは、オペランドフォワードステージ４４０から実行ステージ４５０に送られる関連するオペレーションを防ぐことにより、無効なオペランドを用いることを防ぐことができる。
表Ｂ．４５  無効なオペランドの特定
汎用コントロールロジック５２０が、バス５５３からのオペランドステートメント信号を用いて、実行ユニットXX（XX=｛LU，SU，RUX，RUY｝）に対するオペランドsrcY（Y=｛1，2｝）であるか否かを示す信号OprndInvld_XXsrcYを生成する。
0003720371.tif 000094
表Ｂ．４６  ホールド信号ロジック
必要とされるオペランドが有効でない場合に、ホールド信号SC_HoldXX0が発生し、オペレーションが実行ステージ４５０に送られることを防ぐ。データオペランドは第２の実行ステージ４６０まで必要とされないために、そのデータオペランドがまだ有効でない場合でも、StOpsが実行ステージ４５０に送られる。しかしながら、信号SC_HoldSU2は、そのデータオペランドがまだ無効である場合には、実行ステージ４６０内にそのオペレーションを保持する。
0003720371.tif 000095
表Ｂ．４７  ステータスフラググループ
標準x86ステータスフラグビットOF、SF、ZF、PF、CF、EZF及びECFは以下のように、信号STATUSV及びフィールドStatModのビットに対応する４つのグループに分けられる。
0003720371.tif 000096
表Ｂ．４８  ステータスフラグフェッチング
エントリ１６から２３のそれぞれは、４つのフラグループに対応し、かつ４つのフラググループに対するステータスフラグ及び有効性ビットを示す信号StatInfo_1、StatInfo_2、StatInfo_3、及びStatInfo_4を生成する。任意の１つ或いはそれ以上の信号StatInfo_1、StatInfo_2、StatInfo_3、及びStatInfo_4は、そのエントリが対応するグループに対するスキャンチェインにより選択される場合に、信号STATUS及びSTATUSVを生成するために用いられる。以下において、プレフィックス”OPj:”はフィールド、すなわち信号形式エントリjを示す。
0003720371.tif 000097
アーキテクチャステータスフラグレジスタは、信号FlgStatInfo_1、FlgStatInfo_2、FlgStatInfo_3、及びFlgStatInfo_4を生成し、エントリが対応するグループに対するスキャンチェインにより選択されない場合、何れかの信号を用いて信号STATUS及びSTATUSVを生成する。
0003720371.tif 000098
以下のロジックはフラググループを提供するためにエントリを配置するためのルックアヘッドを用いない４つのスキャンチェインを示す。
0003720371.tif 000099
0003720371.tif 000100
出力ステータスフラグ情報信号は以下のようになる。
0003720371.tif 000101
0003720371.tif 000102
0003720371.tif 000103
0003720371.tif 000104
表Ｂ．４９  cc-RegOpハンドリング
信号CCDepInRUX_0はcc-dep RegOpがレジスタユニットRUXのオペランドフォワードステージ内にあるか否かを示し、オペランドフォワーディングステージ内のオペレーションに対するオペレーション情報及び有効性ビットを含むパイプラインレジスタから生成される。
0003720371.tif 000105
信号UnexecCCDepInQ3は実行されないcc-dep RegOpが列３にあるか否かを示し、列３のエントリ内のタイプ及びステートビットから生成される。
0003720371.tif 000106
以下のロジックはオペランドフォワードステージ内のRegOpに対して必要とされるステータスビットグループが有効であるか否かを示す信号StatVを生成する。
0003720371.tif 000107
信号StrtExecCCDepは実行されないcc-dep RegOpが列３内にある時のトラックを保持する。
0003720371.tif 000108
信号UnexecCCDepInQ4は実行されないcc-dep RegOpが列４内にある時のトラックを保持する。
0003720371.tif 000109
信号SC_HoldStatusはレジスタユニットRUXに対する入力にて、ステータスフラグ値のコピーを保持する。
0003720371.tif 000110
信号HoldOpQ3はスケジューラ列３内からシフトすることからOpクワッドを保持する。
0003720371.tif 000111
RUXユニットからの信号RUX_NoStatModは実行されているオペレーションがステータスフラグを変更しないということを示す。サイクル遅延バージョンはNoStatModと呼ばれる。
表Ｂ．５０  BRCONDハンドリング
以下の式はBRCONDハンドリングを記述する。ブレークポイントを示す信号及び単一ステップトラップであるそれぞれの信号DTF及びSSTFに対して参照される。“複数デコードディスエーブル”に対する信号MDDはデバッグするために用いられ、スケジューラ２８０に挿入される時点で１つ以上のマクロ命令を防ぐ。
BRCONDハンドリングはまずBRCONDが列４内にあるか否かを判定する。信号BRCONDjがOPjが評価されないBRCONDであるか否かを示す。
0003720371.tif 000112
ここでｊはエントリ番号であり、Type、OpInfo、及びS3はエントリｊのフィールドである。信号BRCONDInQ4は列４がBRCONDを含むか否かを示す。
0003720371.tif 000113
BRCONDが列４にある場合には、予測条件コードはBRCONDを含むエントリのフィールドOpInfoからの（SpecOp．cc）である。
0003720371.tif 000114
信号CondCode［4:1］の値は以下のように定義される（ビットCondCode［0］はそのセンスをフリップする）。
0003720371.tif 000115
信号CondVはBRCONDの評価のために必要とされるステータスビットが有効であるか否かを示す。
0003720371.tif 000116
信号HoldOpQ4Aは、BRCONDが列４内にあり、かつ評価するために必要な条件が無効である場合に、列４内にあるOp quadのシフトを禁止する。
0003720371.tif 000117
信号CondValは予測された値CondCode［0］に予測ミスがあったことを示す。
0003720371.tif 000118
0003720371.tif 000119
ここで信号IPは以下のように定義され、任意のアクティブh/w割り込み要求があるか否かを示す。
0003720371.tif 000120
信号SC_Resolveは解決条件分岐を示す。
0003720371.tif 000121
レジスタはクワッド４内にあるBRCONDの解決を示すSignal Resolvedを記録する。
0003720371.tif 000122
x86 MOVS（move string）命令はオペレーションのemcodeループ内においてデコードされる。MOVS命令が実行される速度を改善するために、そのループに対するバイトカウントが４より小さくなるまで全３２ビット転送が実行される。条件付きBRCONDはMOVSに対するカウントのチェックの際に用いられる。信号TermMOVSはムーブストリングがほとんど行われた場合には、emcodeループを終了する。
0003720371.tif 000123
BRCONDに対するフィールドDestValからの信号BrVecAddrは、その分岐が予測ミスであった場合に、用いられるべきemcode、すなわち命令ベクトアドレスを示す。
0003720371.tif 000124
信号SC_OldRASPtr、SC_OldBPTInfo、及びSC_RestartAddrは転送され、命令デコーダ２４０をリスタートする。リスタートは予測ミス分岐、すなわち失敗に応じて生成される。予測ミス、すなわち失敗エントリのフィールドRASPtrからの信号SC_OldRASPtrは、RAS TOSポインタをリストアするための信号である。信号SC_OldBPTInfoは分岐予測テーブルを修正するための正確な分岐予測テーブル情報を示す。信号SC_RestartAddrはリスタートに後続するプログラムカウンタを示す。
0003720371.tif 000125
信号BrVec2Emc及びBrVec2Decは、emcode、すなわちMacDec２５２からのBRCONDの場合に対する予測ミスBRCONDのためにリスタートが必要とされるということを示す。
0003720371.tif 000126
レジスタが予測ミスを記録する。
0003720371.tif 000127
BRCONDが正確に予測された場合には、BRCONDは以下のように完了したものとしてマークされる。
0003720371.tif 000128
有効に解決されるBRCONDはシフトすることができない、従って列４をシフトすることから防ぐ列５による１サイクル以上の間、列４内に置かれる。この間信号SC_Resolveはアサートされ、バス５５８上の信号BrVec2XXの１つは、（最初のサイクルに対する）全時間の間アサートされたままである。命令デコーダ２４０は信号BrVec2XXがアサートされなくなるまで各サイクルをリスタートし続ける。ベクトルアドレスのような全ての他の関連する信号はこの時間を通して適当な値に維持される。
表Ｂ．５１  アボート不可能RegOpハンドリング
信号NonAbInRUX_0はアボート不可能RegOpがRUXオペランドフォワードステージ内にあることを示すためにアサートされる。
0003720371.tif 000129
信号UnexecNonAbInQ4はアサートされ、アボート不可能RegOpがスケジューラ２８０の列４内にあり、エントリ１６から１９のフィールドType，OpInfo及びStateから生成されることを示す。
0003720371.tif 000130
アボート不可能RegOpがRUXオペランドフォワードステージにあり、列４にない場合、或いは先行するBRCODが予測ミスしたか、或いはトラップが未完了である場合、信号NonAbSyncは、RUXオペランドフォワードステージからの進捗を中止するために用いられる。
0003720371.tif 000131
非アボート可能RegOpはRUX実行ステージに送られるまで列４からシフトされないようにする。
0003720371.tif 000132
表Ｂ．５２  自己修正コードハンドリングロジック
自己修正コードハンドリングロジックはコードが修飾されている可能性を排除するために以下の比較を行う。
0003720371.tif 000133
表Ｂ．５３  レジスタファイルへのコミットメント
以下の式はレジスタファイルライトイネーブル及び、Opクワドの各オペレーションに対するDestBMフィールド並びに信号OprndMatch_XXsrcY修飾を要約する。コミットメントされるべき選択されたオペレーション結果は、信号RegCmtSelにより列４或いは５から与えられる。
0003720371.tif 000134
列５におけるオペレーションに対する制限違反が発生する場合か或いはトラックがペンディングである場合には、信号CmtInhはコミットメントを禁止する。信号RegCmtInhは、レジスタコミットメントを禁止する。
0003720371.tif 000135
コミットされているOpクワドにおける制限違反がなく、かつ列内の古いオペレーションが更に古くそれ故またコミットメントされる場合には、信号WrEnbliはレジスタファイル２９０に対するコミットメントとをイネーブルする。
0003720371.tif 000136
バイトマークDestBMは結果がレジスタフィールド２９０に対してコミットされるそのサイクルをクリアする。
0003720371.tif 000137
信号OprndMatch_XXsrcYはレジスタファイル２９０がオペランドを提供するように有効にマスクされる。
0003720371.tif 000138
表Ｂ．５４  ステータスフラグコミットメント
以下の式はステータスグループに対する累積的結果生成、或いはステータスグループに対する選択プロセッサを要約する。同様のプロセスが各ステータスグループに対して独立に適用される。
0003720371.tif 000139
表Ｂ．５５  StOpコミットメント
信号StCmtSelは、エントリ２３から１６のいずれのエントリがコミットメントのために選択されたStOpを含むかを示す。コミットされないStOpを含む最も古いエントリが選択される。
0003720371.tif 000140
エントリ２３から１６が選択される場合には、StCmtSelはb0000からB0111までに等しくなる。エントリが選択されない場合には、StCmtSelはb1111に等しい。
信号CmtMaskはスケジューラ２８０の最後の２つの列内の８つのエントリに対応する８つのビットを有する。最も古いエントリから選択されたエントリまでに対応するビットは０であり、残りのビットは１である。
0003720371.tif 000141
信号CmtCiaCdaは選択されたStOpがCIA或いはCDA命令であることを示す。
0003720371.tif 000142
全てのコミットメントが禁止される場合には、信号StCmtInhはStOpのコミットメントを禁止する。
0003720371.tif 000143
信号StCmtV及びQ5StCmtVは、それぞれStOp及び５列内のStOpがコミットメントサイクルのためいに準備されるか否かを示す。StOpが選択されない場合か、StOpsコミットメントが禁止される場合か、選択されたStOpが完了しない場合か或いは古いStOpが完了しない場合には、StOpのコミットメントはない。
0003720371.tif 000144
信号StAdvはStOpがストアコミットメントパイプラインのステージへ進むことができるか否かを示す。
0003720371.tif 000145
信号StRetire及びQ5StRetireはいずれの列５StOpがこのサイクルでコミットされるかを示す。
0003720371.tif 000146
信号NewUncmtStOpは以前にコミットされてなく、かつ現在コミットされていない一番下の２列内の全てのStOpsを特定する。
0003720371.tif 000147
StOpがコミットされる場合には、UncmtStOpビットは以下のように更新される。
0003720371.tif 000148
信号AllStCmtはコミットされていない列５内の全てのメモリ書き込みStOpsが有効にコミットされているか否かを示す。
0003720371.tif 000149
信号SC_HoldSC1はOCU 260がストアコミットメントがステージ２に送られるために準備されることを認識するか否かを示す。
0003720371.tif 000150
ストアユニット２５２は第２実行ステージ内のStOpスタックに対する失敗を示す信号SUViolを生成する。選択されたStOpが第２実行ステージ内のスタックであり、しかも失敗が生じる場合には、アボートが生成される。
0003720371.tif 000151
表Ｂ．５６  Opクワドリタイアメント
以下の式はOCUのOpクワドリタイアメントコントロールロジックを要約する。
0003720371.tif 000152
信号OpQRetireは、同じOpクワドに対する複数サイクル間にアサートされる。これは、最下位のOpクワドのシフティングが一時的に禁止されるとき発生する。
Opクワドがリタイア、すなわちアボートされるとき、累積されたステータスフラグはコミットされる。
0003720371.tif 000153
表Ｂ．５７  LdOpアボート
アボート信号が完了されない場合、並びに全ての古いオペレーションが完了し、かつコミットされている場合、OCU 260は列５内のLdOpに対するアボート信号LdAbortを生成する。
0003720371.tif 000154
表Ｂ．５８  FAULT OPアボート
以下の式はOCUのFAULTオペレーションハンドリングロジックを要約する。
0003720371.tif 000155
表Ｂ．５９  LDDHA/LDAHAハンドリングロジック
LDDHA及びLDAHAオペレーションがDestValを適切なデフォルトハンドラアドレスレジスタにロードすることによりエントリ２３に到達するとき、OCUはLDDHA及びLDAHAオペレーションを扱う。
0003720371.tif 000156
信号EffAltFltVecAddrはLDAHAオペレーションと同じOpクワド内のOps上の障害に対する新しい別のハンドラアドレスを提供する。
0003720371.tif 000157
ハンドラアドレス間の変更及び切り替えは周囲のオペレーション上の障害の認識と同期する。
0003720371.tif 000158
OPQはOpクワドフィールドを参照する。
表Ｂ．６０  分岐ターゲット制限違反ハンドリング
分岐ターゲット制限違反を有するものとタグ付けされた有効なOpクワドが列５に到達する場合には、OCU２６０はアボート信号LimAbortを生成する。
0003720371.tif 000159
表Ｂ．６１  予測ミスBRCONDに対するアボート
列５内の完了していないBRCONDに先行する全てのオペレーションが完了する時、OCU２６０は予測ミスBRCONDに対するアボート信号BrAbortを生成する。
0003720371.tif 000160
後続するオペレーションのコミットメントは、完了していないBRCONDのＳｔａｔｅにより禁止される（すなわち〜Ｓ３）。またBrAbortは、FltAbortがアサートされる時アサートされるがこれは害を与えない。
表Ｂ．６２  アボートサイクルロジック
信号ExcpAbortは任意のアボート条件がリスタートのためのベクトルアドレスを必要とするときのアボートを示す。
0003720371.tif 000161
信号SC_EAbortはまた、予測ミスBRCONDに対するアボートを含む。
0003720371.tif 000162
そのアボートはクロックエッジにて信号SC_Abortにより開始される。
0003720371.tif 000163
アボートの異なる理由に対して必要とされる情報は以下のように与えられる。
0003720371.tif 000164
0003720371.tif 000165
【図１】
0003720371.tif 000166
【図２】
0003720371.tif 000167
【図３】
0003720371.tif 000168
【図４Ａ】
0003720371.tif 000169
【図４Ｂ】
0003720371.tif 000170
【図４Ｃ】
0003720371.tif 000171
【図４Ｄ】
0003720371.tif 000172
【図５】
0003720371.tif 000173
【図６】
0003720371.tif 000174
【図７】
0003720371.tif 000175
【図８Ａ】
0003720371.tif 000176
【図８Ｂ】
0003720371.tif 000177
【図９Ａ】
0003720371.tif 000178
【図９Ｂ】
0003720371.tif 000179
【図９Ｃ】
0003720371.tif 000180
【図１０】
0003720371.tif 000181
【図１１Ａ】
0003720371.tif 000182
【図１１Ｂ】
0003720371.tif 000183
【図１１Ｃ】
0003720371.tif 000184