(57)【特許請求の範囲】
【請求項１】
複数の動作を同時に行なうためのプロセッサであって、前記動作は、浮動小数点計算命令と、浮動小数点スタック交換と、浮動小数点スタックをプッシュまたはポップする命令とを含む命令セットから選択され、前記プロセッサは、
（ａ）  前記浮動小数点スタック交換命令を含む前記命令セットにおいて、命令をデコードするための命令デコーダと、
（ｂ）  前記命令デコーダに結合され、前記命令セットにおいて命令の推論的実行を判断するための分岐ユニットとを含み、前記分岐ユニットは、前記推論的実行に従って前記浮動小数点スタック交換命令を実行するためのものであり、前記プロセッサは、
（ｃ）  前記命令デコーダに結合され、浮動小数点計算命令を実行するための浮動小数点機能ユニットと、
（ｄ）  前記浮動小数点機能ユニットに結合され、
前記浮動小数点機能ユニットから受取られる計算結果をストアするための浮動小数点スタックアレイと、
前記浮動小数点スタックアレイに結合され、アレイエレメントを特定するための浮動小数点スタックポインタと、
前記浮動小数点スタックポインタを前記浮動小数点スタックアレイに結合し、前記スタックポインタによってアドレス指定される浮動小数点スタックアレイエレメントを再順序づけするための浮動小数点スタックリマップアレイとを含む浮動小数点スタックとを含む、プロセッサ。
【請求項２】
前記浮動小数点スタックは、浮動小数点スタック交換命令が浮動小数点計算と同時に実行できるように、前記浮動小数点機能ユニットから独立して動作可能である、請求項１に記載のプロセッサ。
【請求項３】
前記命令セットは分岐命令をさらに含み、前記浮動小数点スタックは、
アレイエレメントを交換することによって浮動小数点スタック交換命令に応答するルックアヘッドリマップアレイと、
前記浮動小数点スタックアレイのエレメントを特定するように前記ルックアヘッドリマップアレイに結合され、前記浮動小数点スタックをポップまたはプッシュする命令に応答して前記ポインタを調節するルックアヘッドスタックポインタとを含み、
前記分岐ユニットは、前記ルックアヘッドリマップアレイおよび前記ルックアヘッドスタックポインタに結合され、前記分岐ユニットはさらに、
分岐命令に応答して前記ルックアヘッドリマップアレイをセーブするためのメモリと、
分岐が発生されるかどうかを予測するための分岐予測器と、
前記分岐予測器に結合され、分岐が予測されるかまたは誤予測されるかを判断する分岐比較器と、
前記メモリと前記ルックアヘッドリマップアレイとの間に結合され、誤予測された分岐に応答して、セーブされた値をアレイに送る第１の制御ラインと、
前記ルックアヘッドリマップアレイおよび前記ルックアヘッドスタックポインタをそれぞれ前記浮動小数点リマップアレイおよび前記浮動小数点スタックポインタに結合し、それぞれ浮動小数点の値をルックアヘッドの値で置き換えることによってスタック交換命令の実行に応答する第２の制御ラインとを含む、請求項１に記載のプロセッサ。
【請求項４】
前記浮動小数点スタックは、
前記浮動小数点リマップアレイに結合され、浮動小数点スタックエレメントが空であるかいっぱいであるかを指定する浮動小数点スタックフル／エンプティアレイと、
前記ルックアヘッドリマップアレイに結合され、前記浮動小数点スタックフル／エンプティアレイのルックアヘッド状態をモニタするルックアヘッドスタックフル／エンプティアレイとをさらに含む、請求項１に記載のプロセッサ。
【請求項５】
スタック交換命令と、スタックをプッシュまたはポップする命令と、スタックにアクセスする命令とを含む命令セットを行なうプロセッサにおいてスタックを制御するための方法であって、
命令デコーダにおいて命令をデコードしてその指示を判断するステップと、
前記指示がスタック交換命令であるとき、推論的実行を制御するための分岐ユニットにおいてスタックリマップアレイのエレメントの交換を指示するステップと、
前記指示がスタックプッシュであるとき、スタックポインタを前記指示デコーダにおける１つの方向に調節するステップと、
前記指示がスタックポップであるとき、前記スタックポインタを前記指示デコーダにおける別の方向に調節するステップと、
前記指示がスタックアクセスであるとき前記スタックポインタによって指定されかつ前記スタックリマップアレイによって再順序づけされたスタックアレイエレメントを用いるステップとを含む、方法。
【請求項６】
スタック交換命令、スタックをプッシュまたはポップする命令、スタックにアクセスする命令、および条件つき分岐命令を含む命令セットを行なうプロセッサにおいてスタックを制御するための方法であって、
（ａ）  命令デコーダにおいて命令をデコードしてその指示を判断するステップと、
（ｂ）  スタック交換命令に応答して、分岐ユニットにおいてルックアヘッドスタックリマップアレイのエレメントの交換を指示し、推論的実行の制御をするためのステップと、
（ｃ）  スタックをプッシュまたはポップする命令に応答して、指示により命令デコードにおいてルックアヘッドスタックポインタを調節するステップと、
（ｄ）  スタックにアクセスする命令に応答して、前記ルックアヘッドスタックポインタによって指定されかつ前記ルックアヘッドスタックリマップアレイによって再順序づけされたスタックアレイエレメントを用いるステップと、
（ｅ）  分岐ユニットにおいて条件つき分岐命令に応答するステップとを含み、前記条件つき分岐命令に応答するステップは、
前記ルックアヘッドリマップアレイをセーブするステップと、
分岐が発生されるかどうかを予測するステップと、
分岐が正しく予測されたか誤予測されたかを判断するステップと、
分岐命令が誤予測されたときに前記ルックアヘッドリマップアレイをセーブされた値に復元するステップとを含み、前記方法は、
（ｆ）  命令をそのプログラムの順序で、リオーダバッファ回収理論の指示により回収するステップをさらに含み、前記回収するステップは、
回収するスタック交換命令に応答してスタックリマップアレイを前記ルックアヘッドリマップアレイと置き換えるステップと、
回収するスタックをプッシュまたはポップする命令に応答してスタックポインタを調節するステップとを含む、方法。
【請求項７】
スタックをプッシュおよびポップする命令に応答してルックアヘッドフル／エンプティアレイにおけるエントリを設定およびクリアするステップと、
スタックをプッシュまたはポップする命令の回収に応答してルックアヘッドフル／エンプティアレイにおけるエントリを設定およびクリアするステップとをさらに含む、請求項６に記載の方法。
【請求項８】
（ａ）  スタック実行エラーを検出するステップをさらに含み、前記ステップは、
前記ルックアヘッドフル／エンプティアレイのすべてのエレメントがいっぱいであるかどうかを判断するステップと、
前記ルックアヘッドフル／エンプティアレイのすべてのエレメントが空であるかどうかを判断するステップと、
前記ルックアヘッドフル／エンプティアレイのすべてのエレメントが空であるとき、スタックをポップする命令に応答してスタックアンダフローエラーを検出するステップと、
前記ルックアヘッドフル／エンプティアレイのすべてのエレメントがいっぱいであるとき、スタックをプッシュする命令に応答してスタックオーバフローエラーを検出するステップとを含み、
（ｂ）  検出されたスタック実行エラーに応答して再同期化応答を開始するステップをさらに含む、請求項７に記載の方法。
【請求項９】
例外状態を検出するステップと、
検出された例外状態に応答して、前記スタックリマップアレイを前記ルックアヘッドスタックリマップアレイにコピーし、かつ前記スタックポインタを前記ルックアヘッドスタックポインタにコピーするステップとをさらに含む、請求項７に記載の方法。
【請求項１０】
スタック交換命令とスタックをプッシュまたはポップする命令とを含む命令セットを行なうプロセッサにおけるスタックであって、前記プロセッサは、
前記スタック交換命令を含む前記命令セットにおいて、命令をデコードするための命令デコーダと、
前記命令デコーダに結合され、前記命令セットにおいて命令の推論的実行を判断するための分岐ユニットとを含み、前記分岐ユニットは前記推論的実行に従って前記スタック交
換命令を実行するためのものであり、前記スタックは、
前記命令デコーダと前記分岐ユニットとに結合されたスタックメモリアレイと、
前記スタックメモリアレイに結合され、スタックメモリアレイエレメントを指定するスタックポインタとを含み、前記スタックポインタは、スタックをプッシュまたはポップする命令に応答して調節され、前記スタックはさらに、
前記スタックポインタに結合されかつ前記スタックメモリアレイに結合されてスタックアレイエレメントを、前記スタックポインタによってアドレス指定されるように再順序づけするポインタのスタックリマップアレイを含み、前記ポインタはスタック交換命令に応答して交換される、スタック。
【請求項１１】
前記スタックリマップアレイに結合され、前記スタックリマップアレイを介して前記スタックポインタによってアドレス指定され、スタックアレイエレメントを、前記スタックポインタによってアドレス指定されるように再順序づけするスタックフル／エンプティアレイをさらに含み、前記スタックフル／エンプティアレイのエレメントはそれぞれ、スタックアレイエントリの加算または削除を表わす、スタックをプッシュおよびポップする命令に応答してセットおよびクリアされる、請求項１０に記載のスタック。
【請求項１２】
分岐命令、スタック交換命令、スタックをプッシュする命令、およびスタックをポップする命令を含む命令セットの複数の命令を同時にフェッチし、デコードし、実行し、かつ回収するプロセッサにおけるスタックであって、前記プロセッサは、条件つき分岐命令に応答して分岐が発生されるかどうかを予測する分岐予測器と、前記分岐予測器に結合され、その後に条件つき分岐が予測されたかまたは誤予測されたかを判断する分岐テスタとを有する分岐ユニットを含み、前記スタックは、
スタックメモリアレイと、
前記スタックメモリアレイに結合され、スタックメモリアレイエレメントを指定するためのスタックポインタとを含み、前記スタックポインタは、スタックをプッシュまたはポップする命令に応答して調節され、
前記スタックポインタに結合され、かつ前記スタックメモリアレイに結合されて前記スタックポインタによってアドレス指定されるスタックアレイエレメントを再順序づけするポインタのスタックリマップアレイをさらに含み、前記ポインタは、スタック交換命令に応答して交換され、
前記スタックポインタのルックアヘッド状態を指定するルックアヘッドスタックポインタをさらに含み、前記ルックアヘッドスタックポインタはスタックをプッシュまたはポップする命令に応答して調節され、
前記ルックアヘッドスタックポインタに結合され前記スタックポインタによってアドレス指定されるスタックアレイエレメントを再順序づけするためのルックアヘッドリマップアレイをさらに含み、前記ルックアヘッドリマップアレイのエレメントはスタック交換命令に応答して交換され、
前記分岐ユニットに結合され、スタック交換命令に応答して前記ルックアヘッドリマップアレイをセーブするためのメモリと、
前記分岐ユニットに結合され、スタックをプッシュまたはポップする命令に応答して前記ルックアヘッドスタックポインタをセーブするためのメモリと、
前記分岐テスタに結合され、誤予測された分岐に応答して前記ルックアヘッドリマップアレイおよび前記ルックアヘッドスタックポインタをセーブされた値に復元するための手段と、
スタック交換命令の回収に応答して、前記スタックリマップアレイを前記ルックアヘッドリマップアレイで置き換えるための手段とをさらに含む、スタック。
【請求項１３】
前記ルックアヘッドリマップアレイに結合され、スタックアレイエレメントを再順序づけするためにルックアヘッドスタックポインタによってルックアヘッドリマップアレイを介してアドレス指定されるルックアヘッドフル／エンプティアレイをさらに含み、前記ルックアヘッドフル／エンプティアレイのエレメントは、それぞれスタックアレイエントリの加算または削除を表わすスタックをプッシュまたはポップする命令に応答して設定およびクリアされる、請求項１２に記載のスタック。
【請求項１４】
前記ルックアヘッドスタックポインタと、ルックアヘッドリマップアレイと、ルックアヘッドフル／エンプティアレイとに結合される命令デコーダをさらに含むプロセッサにおけるスタックであって、前記スタックは、前記命令デコーダに結合され、スタック交換命令に応答して前記ルックアヘッドリマップアレイのポインタを交換するための手段と、
前記命令デコーダに結合され、スタックをプッシュする命令およびスタックをポップする命令に応答して、前記ルックアヘッドスタックポインタを調整し、かつそれぞれ前記ルックアヘッドフル／エンプティアレイにおいてエントリを加えるおよび取除くための手段とを含む、請求項１３に記載のスタック。
【請求項１５】
前記命令デコーダに結合され、スタック実行エラーを検出するための手段と、
前記検出手段のスタックエラー検出に応答して、再同期化応答を開始するための手段とをさらに含む、請求項１４に記載のスタック。
【請求項１６】
前記スタックポインタおよび前記リマップアレイに結合されるリオーダバッファと、前記スタックメモリアレイに結合されるレジスタファイルとをさらに含むプロセッサにおけるスタックであって、前記スタックは、
前記リオーダバッファに結合され、かつ前記スタックリマップアレイを介して前記スタックポインタに結合されるスタックフル／エンプティアレイをさらに含む、請求項１３に記載のスタック。
【請求項１７】
前記プロセッサは例外状態検出器を含み、
前記命令デコーダに結合され、例外状態に応答して、前記ルックアヘッドリマップアレイを前記スタックリマップアレイで置き換え、前記ルックアヘッドスタックフル／エンプティアレイを前記スタックフル／エンプティアレイで置き換え、前記ルックアヘッドスタックポインタを前記スタックポインタで置き換えるための手段をさらに含む、請求項１６に記載のスタック。
【請求項１８】
前記プロセッサは浮動小数点機能ユニットをさらに含み、前記浮動小数点機能ユニットは前記スタックメモリアレイ内に含まれるデータに基づいて動作する、請求項１３に記載のスタック。
【請求項１９】
分岐命令と、スタックエレメント交換命令と、スタックをプッシュおよびポップする命令とを含む命令セットからの複数の命令を同時に実行するプロセッサであって、
前記スタックは、
（ａ）  スタックメモリアレイを含むレジスタファイルと、
（ｂ）  前記レジスタファイルに結合されるリオーダバッファとを含み、前記リオーダバッファは、
スタックメモリアレイエレメントを特定するたのスタックポインタと、
前記スタックポインタを前記スタックメモリアレイに結合し、前記スタックポインタによってアドレス指定されるスタックメモリエレメントを再順序づけするためのスタックリマップアレイとを含み、
（ｃ）  前記レジスタファイルおよび前記リオーダバッファに結合される命令デコーダをさらに含み、前記命令デコーダは、
ルックアヘッドスタックポインタと、
前記ルックアヘッドスタックポインタに結合されるルックアヘッドリマップアレイと、
前記ルックアヘッドスタックポインタおよび前記ルックアヘッドリマップアレイに結合されるデコーダ回路と、
スタックエレメント交換命令のデコードに応答して、ルックアヘッドリマップアレイエレメントを交換するための手段と、
スタックをプッシュまたはポップする命令のデコードに応答して、前記ルックアヘッドスタックポインタを調節するための手段とを含み、
（ｄ）  前記命令デコーダに結合され、前記ルックアヘッドリマップアレイおよび前記ルックアヘッドスタックポインタのコピーを受取るための分岐ユニットをさらに含み、前記分岐ユニットは、
分岐命令に応答して、前記ルックアヘッドリマップアレイおよび前記ルックアヘッドスタックポインタのコピーをその中にセーブするためのメモリと、
条件つき分岐命令に応答して、分岐が発生されるかどうかを予測するための分岐予測器と、
前記分岐予測器に結合され、前記条件つき分岐が予測されたか誤予測されたかをその後に判断するための分岐テスタと、
誤予測された分岐に応答して、前記ルックアヘッドリマップアレイを前記セーブされたルックアヘッドリマップアレイで置き換え、かつ前記ルックアヘッドスタックポインタを前記セーブされたルックアヘッドスタックポインタで置き換えるための手段と、
スタックエレメント交換命令の実行の終了に応答して、前記スタックリマップアレイを前記セーブされたルックアヘッドリマップアレイで置き換えるための手段とを含む、プロセッサ。
【請求項２０】
前記命令デコーダに結合され、スタック実行エラーを検出するための手段と、
前記検出手段のスタックエラー検出に応答して、再同期化応答を開始するための手段とをさらに含む、請求項１９に記載のプロセッサ。
【請求項２１】
例外状態を検出するための手段と、
前記命令デコーダに結合され、例外状態に応答して、前記ルックアヘッドリマップアレイを前記スタックリマップアレイで置き換え、前記ルックアヘッドスタックフル／エンプティアレイを前記スタックフル／エンプティアレイで置き換え、前記ルックアヘッドスタックポインタを前記スタックポインタで置き換えるための手段とをさらに含む、請求項１９に記載のプロセッサ。
【請求項２２】
浮動小数点機能ユニットをさらに含み、前記浮動小数点機能ユニットは、前記スタックメモリアレイに含まれるデータに基づいて動作する、請求項１９に記載のプロセッサ。
【請求項２３】
スタックプッシュ、スタックポップ、および分岐命令を含む命令セットからの命令を行なうプロセッサにおけるスタックであって、前記プロセッサは、命令をディスパッチするデコーダと、前記デコーダに結合され、条件つき分岐命令を予測しかつ誤予測を検出する分岐ユニットと、前記デコーダに結合され、予測に応じて命令を推論的に実行する複数の機能ユニットと、前記デコーダおよび前記機能ユニットに結合され、回収された命令の結果を受取るメモリとを含み、前記スタックは、
（ａ）  リオーダバッファに結合された複数の記憶エレメントと、
（ｂ）  前記記憶エレメントに結合され、さらに前記リオーダバッファに結合されて前記複数の記憶エレメントのうちの記憶エレメントにアドレス指定するためのポインタと、
（ｃ）  前記デコーダに結合され、前記機能ユニットが命令を推論的に実行しているときに前記複数の記憶エレメントのうちの記憶エレメントをアドレス指定するためのルックアヘッドポインタと、
（ｄ）  前記記憶エレメントと、前記ポインタと、前記ルックアヘッドポインタと、前記デコーダとに結合されるスタックコントローラとを含み、前記スタックコントローラは、
スタックプッシュおよびスタックポップのディスパッチに応答して、前記ルックアヘッドポインタを更新するための手段と、
スタックプッシュおよびスタックポップの回収に応答して、前記ルックアヘッドポインタを前記ポインタにコピーするための手段と、
条件つき分岐命令のディスパッチに応答して、前記ルックアヘッドポインタをセーブするための手段と、
分岐の誤予測に応答して、前記ルックアヘッドポインタを前記セーブされた値に復元するための手段とを含む、スタック。
【請求項２４】
前記ポインタに結合され、前記複数の記憶エレメントのうちの記憶エレメントに対応するエレメントを有し、前記記憶エレメントがいっぱいであるか空であるかを示すためのフル／エンプティアレイをさらに含み、前記スタックコントローラは、
スタックプッシュおよびスタックポップのディスパッチに応答して前記フル／エンプティアレイを調節するための手段と、
スタックプッシュおよびスタックポップの回収に応答して、前記フル／エンプティアレイを調節するための手段と、
条件つき分岐命令予測に応答して、前記フル／エンプティアレイをセーブするための手段と、
分岐の誤予測に応答して、前記フル／エンプティアレイを前記セーブされた値に復元するための手段とをさらに含む、請求項２３に記載のスタック。
【請求項２５】
スタックプッシュ、スタックポップ、および分岐命令を含む命令セットからの命令を行なうプロセッサにおけるスタックであって、前記プロセッサは、命令をディスパッチするデコーダと、前記デコーダに結合され、条件つき分岐命令を予測しかつ誤予測を検出する分岐ユニットと、前記デコーダに結合され、予測に応じて命令を推論的に実行するための複数の機能ユニットと、前記デコーダおよび前記機能ユニットに結合され、回収された命令の結果を受取るためのメモリとを含み、前記スタックは、
（ａ）  前記リオーダバッファに結合された複数の記憶エレメントと、
（ｂ）  前記記憶エレメントと前記リオーダバッファとに結合され、前記複数の記憶エレメントのうちの記憶エレメントを再順序づけするためのリマップアレイと、
（ｃ）  前記リマップアレイを介して前記記憶エレメントに結合され、前記複数の記憶エレメントのうちの記憶エレメントをアドレス指定するためのポインタと、
（ｄ）  前記デコーダに結合され、前記機能ユニットが推論的に命令を実行しているときに前記複数の記憶エレメントのうちの記憶エレメントをアドレス指定するルックアヘッドポインタと、
（ｅ）  前記記憶エレメントと前記デコーダとに結合され、前記機能ユニットがディスパッチされたスタック交換命令に関して命令を推論的に実行しているときに前記複数の記憶エレメントのうちの記憶エレメントを再順序づけするためのルックアヘッドリマップアレイと、
（ｆ）  前記記憶エレメント、前記リマップアレイ、前記ポインタ、前記ルックアヘッドポインタ、前記推論的な分岐ルックアヘッドポインタ、および前記ルックアヘッドリマップアレイに接続されるスタックコントローラとを含み、前記スタックコントローラは、
前記デコーダに結合され、スタックプッシュおよびスタックポップのディスパッチに応答して、前記ルックアヘッドポインタを更新するための手段と、
前記リオーダバッファに結合され、スタックプッシュおよびスタックポップの回収に応答して、前記ルックアヘッドポインタを前記ポインタにコピーするための手段と、
前記デコーダに結合され、条件つき分岐命令のディスパッチに応答して、前記ルックアヘッドポインタをセーブするための手段と、
前記分岐ユニットに結合され、分岐の誤予測に応答して、前記ルックアヘッドポインタを前記セーブされた値に復元するための手段と、
前記分岐ユニットに結合され、スタック交換命令のディスパッチに応答して、前記ルックアヘッドリマップアレイのエレメントを交換するための手段と、
前記分岐ユニットに結合され、条件つき分岐命令予測のディスパッチに応答して、前記ルックアヘッドリマップアレイを前記推論的分岐ルックアヘッドリマップアレイにセーブするための手段と、
前記分岐ユニットに結合され、分岐の誤予測に応答して、前記ルックアヘッドリマップアレイを前記セーブされた値に復元するための手段と、
前記リオーダバッファに結合され、スタック交換命令の回収に応答して、前記ルックアヘッドリマップアレイを前記リマップアレイにコピーするための手段とを含む、スタック。
【請求項２６】
プロセッサのスタックアレイを動作させるための方法であって、
（ａ）  スタックポインタを用いて前記スタックアレイのエレメントを選択するステップと、
（ｂ）  リマップアレイを用いて、前記スタックポインタによって指定されるスタックアレイエレメントを再順序づけするステップと、
（ｃ）  前記スタックのルックアヘッド状態を、前記スタックポインタに対応するルックアヘッドスタックポインタメモリと、前記リマップアレイに対応するルックアヘッドリマップアレイとにストアするステップと、
（ｄ）  スタックエレメント交換命令に応答して、前記分岐ユニットの推論的状態の指示により、前記ルックアヘッドリマップアレイのエレメントを交換するステップと、
（ｅ）  スタックをプッシュまたはポップする命令に応答して前記ルックアヘッドスタックポインタを調節するステップと、
（ｆ）  分岐命令、スタック交換命令、およびスタックをプッシュまたはポップする命令を含む命令を分岐ユニットにおいて推論的に実行するステップと、
（ｇ）  推論的に実行された分岐命令に対応して、前記ルックアヘッドスタックポインタおよび前記ルックアヘッドリマップアレイをセーブするステップと、
（ｈ）  推論的に実行された命令を回収するステップとを含み、前記回収ステップは、
回収するスタック交換命令に応答して、前記リマップアレイを前記ルックアヘッドリマップアレイで置き換えるステップと、
回収するスタックプッシュまたはポップ命令に応答して前記スタックポインタを調節するステップとを含み、
（ｉ）  誤予測された分岐に応答して、前記ルックアヘッドスタックポインタおよび前記ルックアヘッドリマップアレイをセーブされた値に復元するステップをさらに含む、方法。
【請求項２７】
前記ポインタに結合されるフル／エンプティアレイを用いて前記スタックアレイエレメントが空であるかいっぱいであるかをモニタするステップをさらに含み、前記フル／エンプティアレイは、前記スタックアレイのエレメントに対応するエレメントを有し、スタックコントローラは、
スタックをプッシュおよびポップする命令のディスパッチに応答して指示によりそれぞれエントリを加えるおよび取除くことによって前記フル／エンプティアレイのルックアヘッドコピーを調節するステップと、
スタックをプッシュおよびポップする命令の回収に応答して、必要に応じて、それぞれエントリを加えるおよび取除くことによって前記フル／エンプティアレイの永久的なコピーを調節するステップと、
条件つき分岐命令予測に応答して、前記ルックアヘッドフル／エンプティアレイをセーブするステップと、
分岐の誤予測の検出に応答して前記ルックアヘッドフル／エンプティアレイをセーブされた推論的分岐ルックアヘッドフル／エンプティアレイに復元するステップとを実行する、請求項２６に記載の方法。
【発明の詳細な説明】
【０００１】
【発明の分野】
本発明はプロセッサスタックに関し、より特定的には、命令の推論的実行に関わるプロセッサのためのスタックおよびスタック動作方法に関する。
【０００２】
【関連技術の説明】
プロセッサは一般に命令セットのうちの１つの命令をいくつかのステップで処理する。初期の技術によるプロセッサは、これらのステップをシリアルに行なっていた。技術の進歩により、多くの命令の異なるステップを同時に行なうスカラプロセッサと呼ばれるパイプライン方式のプロセッサが開発された。「スーパースカラ」プロセッサは、スカラ命令の同時実行をサポートすることにより性能をさらに向上する。スーパースカラプロセッサでは、データまたは資源が利用可能でないため発行された命令を実行することができない従属性の条件や命令の競合が生じる。たとえば、発行された命令は、その入力オペランドがまだ実行を終了していない他の命令によって計算されるデータに依存する場合は、実行することができない。
【０００３】
スーパースカラプロセッサの性能は、命令をすぐに実行する能力にかかわらず命令をデコードし続けることにより向上される。命令のデコードと命令の実行とを切離すためには、命令を実行する機能ユニットと呼ばれる回路によって用いられるディスパッチされた命令情報をストアするためのルックアヘッドバッファと呼ばれるバッファが必要である。
【０００４】
このバッファによっても、散在する分岐命令を含む命令シーケンスに対するプロセッサの性能が向上される。分岐に従う命令は通常、状態がわかるまで待たなければならず、その後になって初めて実行を進めることができるため、分岐命令はプロセッサの性能を損なう。スーパースカラプロセッサでは、「推論的に」命令を実行することによって、分岐条件の結果を予測しかつその予測に従ってその次の命令に進むことに関わる分岐能力が向上される。バッファは、プロセッサの推論状態を維持するように実現される。予測が間違っている場合には、間違って予測された分岐に従う命令によって生じた結果は放棄される。分岐を間違って予測した場合に迅速に回復し、適切な命令シーケンスを再び開始することにより、スーパースカラプロセッサの性能はかなり向上される。回復方法により、不適切に行なわれた命令による影響が取消される。再開始の手順により、正しい命令シーケンスが再び確立される。
【０００５】
『スーパースカラプロセッサ設計（Superscalar Processor Design）』, Englewood Cliffs, N.J., Prentice Hall, 1991, p.92-97においてマイク・ジョンソン（Mike Johnson）によって教示される１つの回復および再開始方法では、リオーダバッファおよびレジスタファイルが用いられる。レジスタファイルは、回収された動作、すなわちもう推論的でない動作によって発生したレジスタ値を保持する。リオーダバッファは、動作の推論的結果、すなわち予測されてはいるが確証はされていない分岐に従ったシーケンスで実行される動作の結果を保持する。リオーダバッファは、先入れ先出しの待ち行列として動作する。命令がデコードされると、リオーダバッファの末尾でエントリが割当てられる。エントリは、命令および命令の結果に関する情報が利用可能になればそれを保持する。その結果値を受取ったエントリがリオーダバッファの先頭に達すると、その結果をレジスタファイルに書込むことによりその動作は回収される。リオーダバッファは、誤予測された分岐に従う命令によって生じたレジスタ値を放棄するために、分岐の誤予測の後の回復の間にプロセッサによって用いられる。リオーダバッファは誤予測された分岐に従うレジスタを復元するが、他のプロセッサのレジスタも復元される必要があるかもしれない。たとえば、データを管理するためにスタックを用いるプロセッサでは、スタックは復元を必要とする。スタックの復元には、アレイエレメントおよびポインタを含むすべてのスタックエレメントの回復が必要である。
【０００６】
スタックの一例は、カリフォルニア州サンタクララ（Santa Clara ）のインテル・コーポレイション（Intel Corporation ）から入手可能な商標ペンチウム（Pentium ）マイクロプロセッサの浮動小数点ユニット（ＦＰＵ）レジスタスタックである。ＦＰＵレジスタスタックは、拡張された実データをストアする、８つのマルチビット数値レジスタのアレイである。ＦＰＵの命令により、スタックの頂部（ＴＯＳ）に関するデータレジスタがアドレス指定される。商標ペンチウムマイクロプロセッサにおける浮動小数点交換（ＦＸＣＨ）命令により、スタックの頂部の内容が、特定のスタックエレメント、たとえばＴＯＳに関するスタックの終わりから２番目の位置にあるデフォルトエレメントの内容と交換する。ペンチウム（商標）浮動小数点命令は一般に、スタックのトップ位置に配置されるべき１つのソースオペランドを必要とし、かつＦＰＵ命令の結果がＴＯＳに残されることがよくあるため、ＦＸＣＨ命令は有用である。ほとんどのＦＰＵ命令がＴＯＳへのアクセスを必要とするため、ＦＸＣＨ命令を用いてスタック内のデータ位置を操作することが望ましい。
【０００７】
スタックのトップ位置はＴＯＳポインタによって識別される。スタックエントリは、いくつかの浮動小数点命令とデータのロードおよびストア命令とを実行することによりプッシュされかつポップされる。これらの命令がプロセッサのプログラミングに依存するため、浮動小数点のオーバフローおよびアンダフローが生じ、これらはトラップされなければならず、それにより例外条件が発生する。誤予測された分岐のような例外条件には、プロセッサの推論的状態の復元が必要である。
【０００８】
このＦＸＣＨ命令により生じる１つの結果は、スタックエレメントの順序が変わりやすくなってしまうことであり、これにより誤予測された分岐または例外の後に生じるスタックの復元が複雑になってしまう。
【０００９】
スーパースカラプロセッサでは、誤予測された分岐および例外が生じても、効果的な回復および再開始の手順を所望のように行なう。スタック、およびスタックの状態を簡単にかつ迅速に復元するためのスタックの動作方法が求められている。
【００１０】
【発明の概要】
本発明の一実施例は、浮動小数点計算命令、浮動小数点スタック交換、浮動小数点スタックをプッシュまたはポップする命令等の複数個の動作を同時に行なうためのプロセッサである。このプロセッサは、計算を実行するための浮動小数点機能ユニットと、浮動小数点機能ユニットから得られた計算結果を扱うための浮動小数点スタックとを含む。スタックは、浮動小数点機能ユニットから得られた計算結果をストアするための浮動小数点スタックアレイと、浮動小数点スタックアレイのエレメントを特定するための浮動小数点スタックポインタと、スタックポインタによってアドレス指定された浮動小数点スタックアレイエレメントを順序づけるための浮動小数点スタックリマップアレイとを含む。
【００１１】
本発明の別の実施例は、スタックを制御するための方法である。スタックは、スタック交換命令およびスタックをプッシュまたはポップする命令を含む命令を実行するためのプロセッサにおいてスタックメモリアレイおよびスタックポインタを含む。この方法は、スタックポインタをスタックのトップ位置のメモリアレイに設定し、かつシーケンシャルな順序でスタックメモリアレイエレメントをアドレス指定するようにスタックリマップアレイを設定することによってスタックを初期化するステップを含む。この方法は、実行するための命令をデコードしかつディスパッチするステップと、スタック交換命令に応答してスタックリマップアレイのエレメントを交換するステップと、スタックをプッシュまたはポップする命令に応答してスタックポインタを調節するステップとをさらに含む。
【００１２】
本発明のさらに他の実施例は、プロセッサスタックを制御するための方法である。スタックは、メモリアレイおよびスタックポインタを含む。この方法は、スタックを初期化するステップを含み、この初期化ステップは、スタックポインタおよびルックアヘッドスタックポインタをスタックのトップ位置のメモリアレイに設定し、シーケンシャルな順序でスタックメモリアレイエレメントをアドレス指定するようにスタックリマップアレイおよびルックアヘッドリマップアレイを設定するサブステップを含む。この方法は、実行するための命令をデコードしかつディスパッチするステップと、ディスパッチされたスタック交換命令に応答してルックアヘッドリマップアレイのエレメントを交換するステップと、ディスパッチされたスタックをプッシュまたはポップする命令に応答してルックアヘッドスタックポインタを調節するステップとをさらに含む。ディスパッチされた分岐命令に応答して、この方法は、ルックアヘッドリマップアレイをセーブするステップと、分岐が発生されるかどうかを予測するステップと、分岐が正しく予測されたかどうかを判断するステップと、分岐命令が誤って予測されたときにルックアヘッドリマップアレイをセーブされた値に復元するステップとを含む。この方法は、命令をそのプログラムの順序で回収するステップをさらに含み、この回収ステップは、回収するスタック交換命令に応答してスタックリマップアレイをルックアヘッドリマップアレイで置き換え、回収するスタックをプッシュまたはポップする命令に応答してスタックポインタを調節するサブステップを含む。
【００１３】
本発明の種々の実施例は、プロセッサが誤予測された分岐または例外に遭遇した場合に単純でかつ迅速な回復および再始動の手順を達成するデータスタックを動作させるための方法および装置を含む。
【００１４】
本発明の特定の応用は、単純でかつ迅速な回復および再始動の手順を達成する浮動小数点データスタックを動作させるための方法および装置である。本発明により、浮動小数点演算命令とパラレルに浮動小数点交換命令を実行することができるという有利な能力が得られる。
【００１５】
添付の図面を参照して以下に示す詳細な説明を読めば本発明がよりよく理解され、本発明の利点、目的および特徴がより明らかになるであろう。図中、同一の参照番号は同一のエレメントを示す。
【００１６】
【好ましい実施例の詳細な説明】
図２および図３は、種々の機能ブロックの間でアドレス、データおよび制御の転送のやり取りを行なう内部アドレスおよびデータバス１１１を含むスーパースカラプロセッサ１１０と、外部メモリ１１４とを示している。命令キャッシュ１１６は、ＣＩＳＣ命令を解析しかつプリデコードする。バイトキュー１３５は、プリデコードされた命令を命令デコーダ１１８に転送し、これはＣＩＳＣ命令をそれぞれＲＩＳＣのような動作（「ＲＯＰ」）のための命令のシーケンスにマップする。
【００１７】
適切な命令キャッシュ１１６は、１９９３年１０月２９日出願の米国特許出願連続番号第０８／１４５，９０５号により詳細に記載されている（デイビッド・ビィ・ウィット（David B. Witt ）およびマイケル・ディ・ゴダード（Michael D. Goddard）「可変バイト長命令に特に適切なプリデコード命令キャッシュおよびその方法（“Pre-Decode Instruction Cache and Method Therefor Particularly Suitable for Variable Byte-Length Instructions”）」；１９９４年１０月２５日、日本出願第２６０７０１号の「可変バイト長命令フォーマットを有するタイプのプロセッサのための命令キャッシュ」）。適切なバイトキュー１３５は、１９９３年１０月２９日出願の米国特許出願連続番号第０８／１４５，９０２号に詳細に記載されている（デイビッド・ビィ・ウィット（David B. Witt ）「可変バイト長命令に特に適切な推論的命令キューおよびその方法（“Speculative Instruction Queue and Method Therefor Particularly Suitable for Variable Byte-Length Instructions ”）」；１９９４年１０月２５日、日本出願第２６０７００号の「可変バイト長命令フォーマットを有するタイプのプロセッサのための推論的命令キュー」）。適切な命令デコーダ１１８は、１９９３年１０月２９日出願の米国特許出願連続番号第０８／１４６，３８３号により詳細に記載されている（デイビッド・ビィ・ウィット（David B. Witt ）およびマイケル・ディ・ゴダード（Michael D. Goddard）「スーパースカラ命令デコーダ（Syperscalar Instrucion Dcode）」；１９９４年１０月２６日、日本出願第２６２４３７号の「スーパースカラ命令デコード／発行装置」）。これらの出願全体を引用をここに援用する。
命令デコーダ１１８は、種々のバスを介してプロセッサ１１０内の機能ブロックにＲＯＰをディスパッチする。プロセッサ１１０は、マイクロプロセッサのサイクルにおいて、４個以下のＲＯＰの発行、５個以下のＲＯＰ結果のやり取り、および１６個以下の推論的に実行されたＲＯＰのキューへの登録をサポートする。ＡおよびＢソースオペランドと宛先レジスタとに対する４組以下のポインタが、命令デコーダ１１８によって、それぞれのＡオペランドポインタ１３６、Ｂオペランドポインタ１３７、および宛先レジスタポインタ１４３を介してレジスタファイル１２４およびリオーダバッファ１２６に与えられる。レジスタファイル１２４およびリオーダバッファ１２６により、４対のＡオペランドバス１３０およびＢオペランドバス１３１上の種々の機能ユニットに適切なソースオペランドＡおよびＢが与えられる。４対のＡオペランドタグバス１４８およびＢオペランドタグバス１４９を含むオペランドタグバスは、Ａオペランドバス１３０およびＢオペランドバス１３１に関連する。データをオペランドバス上に配置するのに利用できない場合、利用可能になったときにデータを受取るためのリオーダバッファ１２６におけるエントリを識別するタグは、対応するオペランドタグバス上にロードされる。オペランドバスおよびタグバスは、４つのＲＯＰディスパッチ位置に対応する。命令デコーダは、リオーダバッファ１２６と協働して、ＲＯＰが実行された後に機能ユニットから結果を受取るために、リオーダバッファ１２６におけるエントリを識別するための４つの宛先タグバス１４０を特定する。機能ユニットは、ＲＯＰを実行し、宛先タグを５本の結果タグバス１３９のうちの１つにコピーし、結果が利用可能である場合にはその結果を５本の結果バス１３２のうちの対応する結果バスに配置する。結果タグバス１３９における対応するタグが結果を待っているＲＯＰのオペランドタグと一致すれば、機能ユニットは結果バス１３２上の結果にアクセスする。
【００１８】
命令デコーダ１１８は、４本の操作コード／タイプバス１５０を介してＡおよびＢソースオペランド情報に付随する操作コード情報をディスパッチする。操作コード情報は、機能ユニットのうちの適切な１つを選択するタイプフィールドと、ＲＩＳＣ操作コードを識別する操作コードフィールドとを含む。
【００１９】
プロセッサ１１０は、分岐ユニット１２０、整数機能ユニット１２１、浮動小数点機能ユニット１２２、ロード／ストア機能ユニット１８０等のいくつかの機能ユニットを含む。整数機能ユニット１２１は一般的な意味で与えられたものであって、種々のタイプの演算論理ユニットまたはシフトユニットを表わす。分岐ユニット１２０は、分岐がある場合に適切な命令フェッチ速度を可能にする分岐予測機能を果たし、複数の命令が発行された場合の性能を達成するために必要とされる。分岐ユニット１２０および命令デコーダ１１８を含む適切な分岐予測システムは、ジョンソン（Johnson ）による『スーパースカラマイクロプロセッサ設計（“Superscalar Microprocessor Design ）』, Prentice Hall, 1990 、および米国特許番号第５，１３６，６９７号（ウィリアム・エム・ジョンソン（William M. Johnson）「キャッシュの命令ブロックの各々でストアされるフェッチ情報を用いて、正しく予測された分岐命令の後の実行に関して遅延を低減するためのシステム（“System for Reducing Delay for Execution Subsequent ro Correctly Predicted Branch Instruction Using Fetch Information Stored with each Block of Instructions in Cache”）」）により詳細に示されており、これは引用によりここに援用される。プロセッサ１１０は、複雑になりすぎないようにするために単純な１組の機能ユニットを有するように示されている。必要に応じて、整数ユニットおよび浮動小数点ユニットの他の組合せを実現することも可能である。
【００２０】
レジスタファイル１２４は、中間の計算結果を保持するためのマップされたＣＩＳＣ整数レジスタ、浮動小数点レジスタ、一次レジスタを含む物理記憶メモリである。レジスタファイル１２４は、４個以下の同時にディスパッチされたＲＯＰの各々に関してＡオペランドポインタ１３６およびＢオペランドポインタ１３７の２個以下のレジスタポインタによってアドレス指定され、選択されたエントリの値を８個の読取ポートを介してＡオペランドバス１３０およびＢオペランドバス１３１上に与える。整数はレジスタファイル１２４の３２ビットレジスタにストアされ、浮動小数点の数はレジスタファイル１２４の８２ビットレジスタにストアされる。レジスタファイル１２４は、回収結果として既知であるプロセスにおいて、リオーダバッファ１２６から４本のライトバックバス１３４を介して実行された動作および非推論的動作の結果を受取る。
【００２１】
リオーダバッファ１２６は、推論的に実行されたＲＯＰの相対的な順序を追跡するための環状ＦＩＦＯである。記憶位置は、先頭キューポインタおよび末尾キューポインタを用いて、結果をレジスタファイル１２４に回収しかつ機能ユニットから結果を受取るように動的に割当てられる。命令がデコードされると、そのＲＯＰには、利用可能になった場合には結果値と、結果が書込まれるべきレジスタファイル１２４の宛先レジスタの番号とを含むＲＯＰ情報をストアするためのリオーダバッファ１２６における位置が割当てられる。従属性を持たないＲＯＰに関しては、Ａオペランドバス１３０およびＢオペランドバス１３１は、レジスタファイル１２４から駆動される。浮動小数点データは、従属性を持たない浮動小数点ＲＯＰに関してＡオペランド、Ｂオペランドおよび宛先レジスタが整数ＲＯＰの態様で直接アドレス指定されるのではなくスタックポインタおよびリマップレジスタによって指定されるように、スタックを用いてアクセスされる。スタックポインタおよびリマップレジスタは組合されて、レジスタファイル１２４の浮動小数点レジスタを指す。しかしながら、ＲＯＰが従属性を持ち、そこにストアされていると考えられる値を得るために名前が変えられた宛先レジスタを参照すると、エントリがリオーダバッファ１２６内でアクセスされる。そこで結果が利用可能であれば、この結果はオペランドバス上に置かれる。結果が利用不可能であれば、リオーダバッファエントリを識別するタグがＡオペランドタグバス１４８およびＢオペランドタグバス１４９のうちの一方の上に与えられる。結果またはタグは、それぞれオペランドバス１３０、１３１またはオペランドタグバス１４８、１４９を介して機能ユニットに与えられる。浮動小数点ＲＯＰに関しては、データ依存性オペランドがリオーダバッファ１２４からアクセスされるか、またはスタックポインタおよびリマップレジスタに従ってタグがつけられる。
【００２２】
機能ユニット１２０、１２１、１２２、１８０において実行が終了し結果が得られると、それらの結果およびそれぞれの結果タグは５本のバス幅結果バス１３２および結果タグバス１３９を介してリオーダバッファ１２６と機能ユニットの保存局に与えられる。５本の結果バス、結果タグおよび状態バスのうち、４本は、整数および浮動小数点の結果をリオーダバッファに送るための汎用バスである。送られた結果以外の情報を機能ユニットのうちのいくつかからリオーダバッファに送るために、付加的な第５の結果バス、結果タグおよび状態バスが用いられる。たとえば、分岐ユニット１２０による分岐動作から生じる状態情報は、この付加的なバスに置かれる。特定の機能ユニットは、５本の結果バス１３２および対応する結果タグバス１３９のサブセットにのみ相互接続し得る。
【００２３】
レジスタファイル、リオーダバッファ、およびバスを含む適切なＲＩＳＣコアは、１９９３年１０月２９日出願の米国特許出願連続番号第０８／１４６，３８２号（デイビッド・ビィ・ウィット（David B. Witt ）およびウィリアム・エム・ジョンソン（William M. Johnson）「高性能スーパースカラマイクロプロセッサ（High Performance Superscalar Microprocessor ）」；１９９４年１０月２７日、日本出願第２６３３１７号の「スーパースカラマイクロプロセッサ」）に記載されており、これを引用によりここに援用する。
【００２４】
図４は、３つのパイプラインを用いて算術計算を行なう浮動小数点ユニット１２２の概略ブロック図である。第１のパイプラインは、２つの加算器段２４２、２４３と正規化シフタ段２５３とを含む加算／減算パイプラインである。第２のパイプラインは、２つの乗算段２４４、２４５を含む乗算パイプラインである。第３のパイプラインは、検出ブロック２５２を含む。浮動小数点機能ユニット１２２はまた、共有浮動小数点ラウンダ２４７とＦＰＵ結果ドライバ２５１とを含む。浮動小数点保存局２４１は、操作コード／タイプバス１５０、Ａオペランドバス１３０、Ｂオペランドバス１３１、結果バス１３２、結果タグバス１３９、Ａオペランドタグバス１４８、Ｂオペランドタグバス１４９、および宛先タグバス１４０からの入力を受取るように接続される。保存局２４１は、２つのエントリを保持し、これらのエントリの各々は８２ビットＡオペランドおよび８２ビットＢオペランドのための記憶装置と、宛先結果タグと、８ビット操作コードと、４ビットＡオペランドタグと、４ビットＢオペランドタグと、浮動小数点スタックのオーバフローおよびアンダフローの状態を示すための状態ビットとを含む。保存局２４１は、クロックサイクルごとに、２つのＲＯＰの形の１つの浮動小数点動作を受入れることができる。保存局２４１は、その各々が８２ビットオペランドと３つの浮動小数点計算制御ビットとを含む８５ビット浮動小数点Ａオペランドバス２５４および８５ビット浮動小数点Ｂオペランドバス２５５を駆動する。
【００２５】
検出２５２は、浮動小数点ユニット１２２への入力が規定された無効性のある条件を満たす場合例外信号を発生する。浮動小数点スタックオーバフローまたはアンダフロー信号が設定されるか、除算動作において分母オペランドが０であるか、またはソースオペランドの値が命令により発生された結果が０または∞にされるような値を有する場合に、無効状態が生じる。浮動小数点機能ユニット１２２への入力のために例外が発生されると、ユニットが動作の残りの段をキャンセルし、リオーダバッファ１２６がプロセッサ１１０中にわたって例外応答を開始するように結果バス１３２上に例外信号を配置する。
【００２６】
浮動小数点ラウンダ２４７は、浮動小数点ＲＯＰの実行により生じる例外を検出する。これらの例外は、浮動小数点の指数値のオーバフローもしくはアンダフロー、または丸めている間の不正確な誤差を含む。これらの誤差は信号で保存局１４１に送られる。
【００２７】
浮動小数点スタックは、浮動小数点命令により用いられる。浮動小数点命令は、スタックからそのオペランドを取る。なお、浮動小数点スタックはプロセッサ１１０においていくぶんか分配されており、浮動小数点機能ユニット１２２内にはなく、一般的には、浮動小数点機能ユニット１２２から構造的に分離されている。
【００２８】
リオーダバッファ１２６は、浮動小数点スタックにあるデータを含む推論データが、プロセッサ１１０の種々のブロックが協働することにより一貫した態様で、しかしながら浮動小数点機能ユニット１２２の動作から一般に独立して扱われるようにデータの管理を制御する。リオーダバッファ１２６において従属性分析を含むデータフロー制御を与えることによって、ＦＰＵ１２２を含む他のプロセッサブロックが簡略化される。浮動小数点ユニット１２２によって用いられる制御情報は、スタックのオーバフローまたはアンダフローの状態を示すビット等のスタック状態ビットに制限される。この情報は命令デコーダ１１８によって発生され、ＲＯＰがディスパッチされると浮動小数点ユニット１２２に送られる。ＦＰＵ１２２は、オーバフローまたはアンダフロートラップを受取ると、例外信号を発生する。
【００２９】
図５は、種々のレジスタと、スタックを制御しかつスタックを動作させるためのデータ通信経路を相互接続するためのアレイとを含む、浮動小数点スタックを組込むプロセッサ１１０のエレメントを示している。図５は、分岐の予測および誤った予測によりスタック機能性のいくつかの局面が左右されるため、分岐機能を実現するエレメントを示している。浮動小数点スタックは、命令デコーダ１１８、分岐ユニット１２０、リオーダバッファ１２６およびレジスタファイル１２４内に記憶および制御回路を含む。なお、本実施例のプロセッサ１１０では、浮動小数点機能ユニット１２２は、浮動小数点スタックの構造のうちのいずれも含んでおらず、それにより浮動小数点命令および浮動小数点スタック交換命令を同時に実行することができる。
【００３０】
スタックに影響を及ぼす命令のタイプは２つある。スタックに影響を及ぼす命令の第１のタイプは、浮動小数点命令である。これらの命令は、スタック上のデータを用い、結果をスタックに戻す。このスタックに影響を及ぼす命令の第１のタイプは、浮動小数点ユニット１２２において実行される。スタックに影響を及ぼす命令の第２のタイプは、スタックのエレメントを交換する浮動小数点スタック交換（ＦＸＣＨ）命令である。種々の理由のため、ＦＸＣＨ命令は分岐ユニット１２０において実行される。
【００３１】
ＦＸＣＨ命令が分岐ユニット１２０において実行される１つの理由は、データオペランドの値が推論的であるのと同様にスタックエレメントの順序が推論的であることである。条件つき分岐は誤予測され得るため、誤予測された分岐に従うＦＸＣＨ命令によって変更されるスタックエレメントの順序を復元しなければならない。分岐がディスパッチされるときにルックアヘッドスタックエレメントの順序をセーブするために、ＦＸＣＨ命令は分岐ユニット１２０にディスパッチされる。ＦＸＣＨ命令を分岐ユニット１２０において実行する第２の理由は、プロセッサ１１０が、分岐ユニット１２０によって開始される再同期化動作を介してスタックアンダフロー状態等のスタックエラーに応答することである。
【００３２】
命令キャッシュ１１６と分岐ユニット１２０とが協働することにより、ターゲットＰＣバス３２２および分岐フラグ３１０を介する通信を用いて分岐予測能力が得られる。命令キャッシュ１１６は、バイトキューバス３４８を介して命令デコーダ１１８に命令を与える。分岐ユニット１２０は、スタックのルックアヘッド状態を特定の分岐命令と相関させるデータをストアするレジスタを含む。ＦＸＣＨおよび浮動小数点命令を同時に実行できるように、ＦＸＣＨ命令を浮動小数点ユニット１２２にではなく分岐ユニット１２０にディスパッチすることが有利である。
【００３３】
命令デコーダ１１８は、与えられた命令に対応するＲＯＰを種々のバスを介して種々の機能ユニットにディスパッチし、この種々の機能ユニットのうちの１つのは分岐ユニット１２０である。命令デコーダ１１８は、ＲＯＰをディスパッチすると、ＲＯＰのソースオペランドおよび宛先レジスタを識別するために、Ａオペランドポインタ１３６、Ｂオペランドポインタ１３７、および宛先ポインタ１４３をレジスタファイル１２４およびリオーダバッファ１２６に駆動する。命令デコーダ１１８は、デコード（ＤＰＣ）バス３１３を介して分岐ユニット１２０にデコードプログラムカウンタ（ＰＣ）を送る。命令デコーダ１１８は、スタックのルックアヘッド状態をストアするレジスタおよびアレイを含む。浮動小数点ＲＯＰに関しては、ルックアヘッドのスタックのレジスタおよびアレイは、レジスタファイル１２４およびリオーダバッファ１２６のエレメントにアクセスするために、オペランドポインタバス１３６、１３７上で駆動されるポインタと宛先ポインタ１４３との値を引出すために用いられる。非推論的な整数および浮動小数点データは共にレジスタファイル１２４にストアされる。浮動小数点スタックは、レジスタファイル１２４内のレジスタの形である。推論的な整数および浮動小数点データはリオーダバッファ１２６にストアされる。命令デコーダ１１８は、ルックアヘッドスタックポインタおよびアレイを用いて、浮動小数点オペランドの指定を、スタックのトップ位置に関するスタックエレメントの識別からレジスタファイル１２４内の物理レジスタの識別に変換する。この変換が行なわれると、リオーダバッファ１２６の推論的浮動小数点は整数オペランドと同様に処理される。データ処理のほとんどの局面に関して、プロセッサ１１０は浮動小数点データを整数データと同様に扱い、これにより専用論理が必要でなくなる。
【００３４】
命令デコーダ１１８は、命令処理パイプラインの最初にある。整数データと浮動小数点データとをパイプラインの各段で同じように一貫して処理することが有利である。スタックのルックアヘッド状態は、ＲＯＰがデコードされるときに決定される。命令デコーダ１１８は、ルックアヘッドスタックポインタおよびリマップアレイの更新を制御し、浮動小数点オペランドの識別をスタック上の位置の指定から固定レジスタの指定に変換する。命令デコーダ１１８は、命令パイプラインの最初の位置にあるため、この命令デコーダ１１８により浮動小数点データおよび整数データをプロセッサパイプラインにおけるできるだけ早い段階で一貫した態様で処理することができるようになる。
【００３５】
レジスタファイル１２４は、スタックトップ位置ポインタおよびリマップレジスタを含む、浮動小数点スタック、浮動小数点スタック制御ポインタおよびアレイを保持するためのレジスタを有する。したがって、命令デコーダ１１８はスタック制御エレメントの推論的状態を保持し、リオーダバッファ１２６は推論的状態にあるいかなるスタックデータをも保持し、レジスタファイル１２４は非推論的浮動小数点スタックデータおよびスタック制御エレメントをストアする。
【００３６】
リオーダバッファ１２６はプロセッサの回復および再始動手順を制御する。浮動小数点スタック回復および再始動機能は、スタックをレジスタファイル１２４に物理的に組込むことによって、およびオペランドが回収されるとスタックレジスタおよびアレイの書込を制御するためにリオーダバッファ１２６を用いることによって達成される。リオーダバッファ１２６は、スタックの推論的状態を含むプロセッサ１１０の推論的状態を追跡するため、この更新のタイミングを制御する。
【００３７】
プロセッサ１１０の分岐予測能力およびそれが浮動小数点スタックに与える影響をよりよく理解するために、図６に詳細に示される命令キャッシュ１１６のアーキテクチャを考える。命令キャッシュ１１６は、命令デコーダ１１８のためのプリフェッチされたｘ８６命令バイトをプリデコードする。命令キャッシュ１１６は、キャッシュコントロール４０８、フェッチプログラムカウンタ（ＰＣ）４１０、フェッチｐｃバス４０６、プリデコード４１２、コードセグメント４１６、バイトキューシフト４１８、バイトキュー１３５、および３つのアレイ、すなわち命令ストアアレイ４５０とアドレスタグアレイ４５２とサクセッサアレイ４５４とに組織化されるキャッシュアレイ４００を含む。
【００３８】
コードセグメントレジスタ４１６は、リクエストされたメモリアクセスの有効性をチェックするために用いられるコードセグメントディスクリプタのコピーを保持する。コードセグメント４１６は、アプリケーションのアドレス空間にあるアドレスである論理アドレスをプロセッサ１１０のアドレス空間にあるアドレスである線形アドレスに変換するために分岐ユニット１２０において用いられるコードセグメント（ＣＳ）ベース値を与える。ＣＳベースは、ＣＳベースライン４３０を介して分岐ユニット１２０に伝えられる。プリデコード４１２は、内部アドレス／データバス１１１を介して、プリフェッチされたｘ８６命令バイトを受取り、各々のｘ８６命令バイトにプリデコードされたビットを割当て、プリデコードされたｘ８６命令バイトをバス４０４を介して命令ストアアレイ４５０に書込む。バイトキュー１３５は、キャッシュアレイ４００からの予測実行された命令を保持し、１６以下の有効なプリデコードされたｘ８６命令バイトを１６本のバス３４８を介して命令デコーダ１１８に与える。バイトキューシフト４１８は、ｘ８６の境界において命令を循環させ、マスクし、かつシフトする。シフトは、ｘ８６命令のすべてのＲＯＰが命令デコーダ１１８によってディスパッチされるとシフト制御ライン４７４上の信号に応答して生じる。キャッシュコントロール４０８は、命令キャッシュ１１６の動作を管理するために制御信号を発生する。
【００３９】
レジスタ４１０にストアされかつフェッチｐｃバス４０６を介してやり取りされるフェッチＰＣは、キャッシュアレイ４００の３つのアレイのアクセス中にフェッチされるべき命令を識別する。中位フェッチＰＣビットは、検索のために各アレイからのエントリをアドレス指定するキャッシュインデックスである。高位ビットは、比較４２０によってアドレス指定されたタグと比較され、かつアドレスタグアレイ４５２から取出されるアドレスタグである。一致すると、それはキャッシュヒットを表わす。低位ビットは、命令ストアアレイ４５０からのアドレス指定されかつ取出されたエントリのアドレス指定されたバイトを識別するオフセットである。フェッチＰＣ４１０、キャッシュコントロール４０８、およびキャッシュアレイ４００は協働して、フェッチｐｃバス４０６を介して伝えられたアドレスを維持しかつ再送する。フェッチＰＣレジスタ４１０は、ポインタ値を保持するか、ポインタを増分するか、内部アドレス／データバス１１１を介してポインタを受取るか、またはターゲットｐｃバス３２２からのポインタをロードすることによって、１つのサイクルからその次のサイクルでポインタを更新する。ターゲットｐｃは、分岐命令が実行されかつそれが誤予測されたものであることがわかると分岐ユニット１２０から受取られる分岐フラグ３１０の分岐誤予測フラグ４１７に応答してキャッシュコントロール４０８によってフェッチＰＣレジスタ４１０にロードされる。
【００４０】
アドレスタグアレイ４５２のエントリは、キャッシュヒットを識別するためのアドレスタグと、アドレスタグの有効性を示すための有効ビットと、命令ストアアレイ４５０のバイトの各々に対応し、プリデコードされたｘ８６命令バイトが有効なｘ８６命令バイトおよび有効なプリデコードビットを含むかどうかを示すためのバイト有効ビットとを含む。
【００４１】
分岐予測をサポートするサクセッサアレイ４５４は、サクセッサインデックス、サクセッサ有効ビット（ＮＳＥＱ）、およびブロック分岐インデックス（ＢＢＩ）を含むエントリを有する。サクセッサアレイが命令ストアアレイ４５０をアドレス指定するとＮＳＥＱがアサートされ、命令ブロックの分岐がいずれも「予測発生されていない」場合はＮＳＥＱはアサートされない。ＮＳＥＱがアサートされかつ予測実行された最後の命令バイトの現在の命令ブロック内のバイト位置を指定するときにのみＢＢＩが規定される。サクセッサインデックスは、推論的分岐のターゲット位置から始まる、その次の予測実行された命令の最初のバイトのキャッシュ位置を示す。
【００４２】
分岐命令は、命令キャッシュ１１６と分岐ユニット１２０との動作を調製することによって行なわれる。たとえば、命令キャッシュ１２０が分岐がまだ発生していないと予測すると、命令はシーケンシャルにフェッチされる。その後分岐が分岐ユニット１２０による実行の際に発生されると、予測は間違っていることになり、分岐ユニット１２０は分岐誤予測フラグ４１７および分岐発生フラグ４１８をアサートする。分岐ユニット１２０は、ターゲットｐｃバス３２２を介して正しいターゲットＰＣを命令キャッシュ１１６に戻し、これはフェッチＰＣレジスタ４１０にストアされる。命令ストアアレイ４５０は、フェッチＰＣレジスタ４１０の値に従って、ターゲットｐｃアドレスで始まる命令ストリームを与え、バイトキュー１３５を再び満たし始める。ＲＯＢ１２６およびＦＰスタックの推論的状態は流される。
【００４３】
命令キャッシュ１２０が分岐が発生したと予測すると、その次の命令はシーケンシャルではない。サクセッサアレイ４５４のエントリが予測発生された分岐命令に割当てられ、ＮＳＥＱビットがアサートされると、分岐命令の最後のバイトを指すようにＢＢＩが設定され、ターゲット命令の命令キャッシュ１１６内の位置を示すようにサクセッサインデックスが設定される。サクセッサインデックスは、完全なアドレスではなく、命令ストアアレイ４５０のターゲット命令のインデックス、カラムおよびオフセットをストアする。シーケンシャルではないその次の命令に関するフェッチＰＣは、サクセッサインデックスによって与えられたインデックスおよびカラムを用いてキャッシュブロックにアクセスすることによって、およびそのブロック内にストアされたアドレスタグの高位ビットとその前のサクセッサインデックスからのインデックスおよびオフセットビットとを連結することによって構成される。
【００４４】
構成された分岐ターゲットは、命令キャッシュ１１６からフェッチｐｃバス４０６を介して命令デコーダ１１８に送られ、命令デコーダ１１８によって、命令がデコードされるときにデコードＰＣを維持するために用いられる。
【００４５】
命令デコーダ１１８は、分岐ユニット１２０に分岐命令をディスパッチすると、デコードｐｃバス３１３を介してデコードＰＣを送り、オペランドバス１３０を介してターゲットの分岐オフセットを送る。この情報は、分岐命令を実行するために、および予測を確認するために分岐ユニット１２０によって用いられる。
【００４６】
図８および図９に示される命令デコーダ１１８は、バイトキュー１３５からプリデコードされたｘ８６命令バイトを受取り、それらをＲＯＰのそれぞれのシーケンスに翻訳し、複数のディスパッチ位置からＲＯＰをディスパッチする。単純な命令に関しては、翻訳は、ハードウェアに組込まれた高速変換経路を介して行なわれる。マイクロコードＲＯＭシーケンスは、使用頻度の少ない命令と、３つよりも多いＲＯＰに翻訳する複雑な命令とを扱う。命令デコーダ１１８は高速経路またはマイクロコードＲＯＭからのＲＯＰ情報を選択しかつ増加させ、機能ユニットによる実行のために完全なＲＯＰを与える。
【００４７】
ＲＯＰマルチプレクサ５００は、バイトキュー１３５の先頭にあるｘ８６命令から始まる、バイトキュー１３５の１つ以上のプリデコードされたｘ８６命令を１つ以上の利用可能なディスパッチ位置に同時に送る。ＲＯＰディスパッチ位置ＲＯＰ０、１、２、３（５１０、５２０、５３０、５４０）はそれぞれ、高速変換器０、１、２、３（順に、５１２、５２２、５３２、５４２）と、共通段０、１、２、３（５１４、５２４、５３４、５４４）、マイクロコードＲＯＭ０、１、２、３（５１６、５２６、５３６、５４６）とを含む。各ディスパッチ位置は、共通段、高速変換器、およびＭＲＯＭを含む。ＭＲＯＭ５１６、５２６、５３６、５４６は、マイクロコードＲＯＭ（ＭＲＯＭ）コントローラ５６０によって制御される。
【００４８】
共通段は、アドレス指定モードの処理を含む、高速経路およびマイクロコードＲＯＭ命令に共通するパイプライン処理およびｘ８６命令変換動作を扱う。
【００４９】
ＭＲＯＭコントローラ５６０は、命令タイプおよび操作コードを与える、ディスパッチウィンドウを満たすＲＯＰの数を予測する、命令キャッシュ１１６の分岐予測に従ってバイトキュー１３５のシフトをガイドする、ＲＯＰマルチプレクサ５００にＲＯＰの数を知らせてバイトキュー１３５の先頭にあるｘ８６命令に関してディスパッチする、マイクロコードおよび制御ＲＯＭにアクセスする、等の制御機能を果たす。ＭＲＯＭコントローラ５６０は、２つの方法、すなわち命令レベルのシーケンス制御、およびマイクロ分岐ＲＯＰを用いてＲＯＰの順序づけを制御する。命令レベルの分岐およびマイクロ分岐ＲＯＰはともに、誤った予測を確認しかつ訂正するために分岐ユニット１２０にディスパッチされる。命令レベルシーケンス制御フィールドは、マイクロコードサブルーチン呼出／リターン、ブロックに整列されたＭＲＯＭ位置に対する無条件分岐、プロセッサの状態に基づく条件つき分岐、およびシーケンスの終わりの識別のようないくつかの能力を与える。命令レベルのシーケンスＲＯＰがディスパッチされると、（命令アドレスではなく）ＭＲＯＭアドレスがターゲットの形成または分岐の訂正のために送られる。
【００５０】
マイクロ分岐ＲＯＰが無条件分岐および状態フラグ１２５に基づく条件つき分岐を与える。マイクロ分岐ＲＯＰは、実行のために分岐ユニット１２０にディスパッチされる。ＭＲＯＭコントローラ５６０は、分岐ユニット１２０のマイクロ分岐誤予測論理によって開始されるマイクロコードＲＯＭエントリポイントを受入れる。分岐ユニット１２０によって発生されたマイクロコードエントリポイントは、ターゲットｐｃバス３２２を介して命令デコーダ１１８に送られる。マイクロ分岐が訂正されると、分岐ユニット１２０は、訂正アドレスがＰＣではなくＭＲＯＭアドレスであることをターゲットｐｃバス３２２を介して命令デコーダ１１８に示す。
【００５１】
ＲＯＰセレクト０、１、２、３（５１８、５２８、５３８、５４８）は、共通段の出力と組合せて高速変換器またはＭＲＯＭの出力を選択し、この情報をレジスタファイル１２４、リオーダバッファ１２６、および種々の機能ユニットに送る。
【００５２】
ＲＯＰ共有５９０は、すべてのディスパッチ位置によって共有される資源によって用いられる情報をディスパッチする。ＲＯＰ共有５９０は、機能ユニットにディスパッチするために、操作コード／タイプバス１５０にＲＯＰ操作コードを符号化したものを与える。
【００５３】
分岐ユニット１２０は、操作コードと、１ビット交換アンダフロー信号、２ビットキャッシュカラム選択識別子、１ビット分岐予測発生選択信号、１ビットマイクロ分岐インジケータ、および分岐ユニット１２０がターゲットｐｃバス３２２上の予測発生されたアドレスを分岐予測発生ＦＩＦＯ（図１０の９０６）に書込むべきであるかどうかを示す１ビット信号を含む他のＲＯＰ共有５９０の出力とを受取る。さらに、整数フラグソースオペランドを識別する３ビット読取フラグポインタが、分岐ユニット１２０にマップされる最初のディスパッチされていないＲＯＰの位置に基づいて設定される。分岐ユニット１２０にＲＯＰがマップされていなければ、読取フラグポインタは０に設定される。２ビット利用インジケータは、分岐ユニット１２０にマップされる最初のディスパッチされていないＲＯＰのディスパッチ位置を設定するように符号化される。
【００５４】
命令デコーダ１１８は、デコードＰＣ５８２、デコーダコントロール５８４、およびデコーダスタック５８６を含む。デコーダコントロール５８４は、バイトキュー１３５のｘ８６命令の数、（ライン５７０からの）機能ユニットの状態、および（ライン５７２からの）リオーダバッファの状態に基づいて発行されるべきＲＯＰの数を決定する。デコーダコントロール５８４は、バイトキュー１３５が完全に実行されたｘ８６命令の数だけシフトしかつバイトキュー１３５の始まりが常にその次の完全なｘ８６命令の開始となるように、バイトキュー１３５に発行されたＲＯＰの数をシフト制御ライン４７４を介して送る。例外または分岐が誤って予測されると、デコーダコントロール５８４は、例外マイクロコードルーチンのために、新しいフェッチＰＣが入力されるかまたはエントリポイントがＭＲＯＭに送られるまで、付加的なＲＯＰの発行を妨げる。
【００５５】
デコードＰＣ５８２は、バイトキュー１３５からの各々のｘ８６命令の論理ＰＣを追跡する。シーケンシャルでないフェッチが検出されると、デコードＰＣ５８２は新しいポインタを含む。シーケンシャルな命令が分岐の後に生じると、デコードＰＣ５８２は、壊されていないシーケンスの最初と最後の位置の間のバイトキュー１３５のｘ８６バイトの数をカウントし、この数を現在のＰＣに加えて、そのシーケンスに続くその次のＰＣを決定する。デコードＰＣは、ＤＰＣバス３１３を介して分岐ユニット１２０に伝えられる。
【００５６】
デコーダスタック５８６は、ルックアヘッドスタックトップ位置（ＴＯＳ）ポインタ５０２、ルックアヘッドリマップアレイ５０４、およびルックアヘッドフル／エンプティアレイ５０６を含む種々の浮動小数点スタックポインタアレイおよびレジスタのルックアヘッドコピーを保持する。これらのアレイおよびポインタは、スタックを分岐の誤予測または例外に従った適切な状態に戻すことを含む、スタックに影響を与えるＲＯＰの推論的な発行から生じる浮動小数点スタックの推論的変更を扱う。
【００５７】
ルックアヘッドリマップアレイ５０４は、各々がスタックアレイの１つのレジスタを指定するポインタのアレイである。スタックの例示的な実施例では、ルックアヘッドリマップアレイ５０４は、各々がレジスタファイル１２４内の浮動小数点スタックアレイ７００のエレメントを識別する８つの３ビットポインタのアレイである。ルックアヘッドＴＯＳ５０２は、ルックアヘッドリマップアレイ５０４の１つのポインタを選択する３ビットポインタである。ルックアヘッドフル／エンプティアレイ５０６は、スタックエントリがフル（１）であるかエンプティ（０）であるかを指定する単一ビットのアレイである。
【００５８】
スーパースカラプロセッサでは、動作がディスパッチされても、その実行が適切であることの確認にはならない。分岐が予測されると、その予測のうちのいくつかは不正確である。ルックアヘッドリマップアレイ５０４、ルックアヘッドＴＯＳ５０２、およびルックアヘッドフル／エンプティアレイ５０６は、浮動小数点スタックの推論的状態のコピーをセーブするために用いられ、それにより誤予測された分岐からの回復が加速される。浮動小数点スタックを変更する動作に関しては、命令デコーダ１１８は、命令をデコードすると、浮動小数点スタックアレイ７００の未来の状態を更新する。命令デコーダ１１８は、スタックポインタを増分または減分する命令をデコードすると、ルックアヘッドＴＯＳ５０２を更新する。同様に、命令デコーダ１１８は、浮動小数点交換命令（ＦＸＣＨ）をデコードすると、その命令によって特定されるようなポインタを交換することによってルックアヘッドリマップアレイ５０４の未来の状態を調節する。スタックの状態がいかなる２つの分岐命令の間でも変化し得るため、スタック情報はすべての分岐動作のために保存される。
【００５９】
浮動小数点ＲＯＰに関しては、ルックアヘッドＴＯＳ５０２およびルックアヘッドリマップアレイ５０４は、Ａオペランドポインタ１３６、Ｂオペランドポインタ１３７、および宛先レジスタポインタ１４３の値を決定するために組合せて用いられる。したがって、浮動小数点ＲＯＰがデコードされると、そのオペランドは、浮動小数点スタックの位置によって明確にまたは暗に指定される。スタックのトップ位置にあるオペランドに関しては、ルックアヘッドＴＯＳ５０２は、ルックアヘッドリマップアレイ５０４のエレメントを指し、このルックアヘッドリマップアレイ５０４のエレメントは浮動小数点スタックアレイ７００上の位置を指定する。この位置は、レジスタファイル１２４における浮動小数点レジスタに対応する。この位置は、スタックのトップ位置にあるいかなるオペランドまたは宛先レジスタに関しても、Ａオペランドポインタ１３６、Ｂオペランドポインタ１３７、および宛先レジスタポインタ１４３として適用される。同様に、スタックのトップ位置に関するいかなる位置に対するポインタも、ルックアヘッドＴＯＳ５０２から指定された量だけオフセットされたポインタを適用することによって決定される。このようにしてルックアヘッドＴＯＳ５０２およびリマップアレイ５０４からオペランドおよび宛先ポインタを引出すことにより、レジスタファイル１２４およびリオーダバッファ１２６が浮動小数点ＲＯＰおよび整数ＲＯＰの両方に関して同じ態様で推論的にまたは非推論的にデータを処理することができるようになる。
【００６０】
図１０を参照して、レジスタファイル１２４は、読取デコーダ６６０、レジスタファイルアレイ６６２、書込デコーダ６６４、レジスタファイルコントロール６６６、およびレジスタファイルオペランドバスドライバ６６８を含む。読取デコーダ６６０はＡオペランドポインタ１３６およびＢオペランドポインタ１３７を受取り、４対の６４ビットのＡオペランドアドレス信号およびＢオペランドアドレス信号ＲＡ０、ＲＡ１、ＲＡ２、ＲＡ３、ＲＢ０、ＲＢ１、ＲＢ２、ＲＢ３によってレジスタファイルアレイ６６２をアドレス指定する。レジスタファイルアレイ６６２は、ライトバックバス１３４を介してリオーダバッファ１２６から結果データを受取る。リオーダバッファエントリが３個以下の他のリオーダバッファエントリとパラレルに回収されると、エントリに関する結果データがライトバックバス１３４のうちの１つに置かれ、そのエントリに関する宛先ポインタがそのライトバックバスに対応する書込ポインタ１３３に置かれる。ライトバックバス１３４上のデータは、書込デコーダ６６４に与えられる書込ポインタ１３３上のアドレス信号に従ってレジスタファイルアレイ６６２の指定されたレジスタに送られる。
【００６１】
浮動小数点スタックの種々のレジスタおよびアレイに影響を及ぼす特定のＲＯＰを回収すると、リオーダバッファ１２６は、浮動小数点リマップアレイ６７４、浮動小数点トップ・オブ・スタック（ＴＯＳ）レジスタ６７２、および浮動小数点フル／エンプティアレイ６７６を含むレジスタファイル１２４内の種々の浮動小数点スタックレジスタにデータを駆動する。レジスタファイル１２４内に配置される浮動小数点スタックアレイ７００（図１１）は、拡張された実データをストアするための８つの８２ビット数値レジスタのアレイである。レジスタの各々は、１つの符号ビット、１９ビット指数フィールド、および６２ビット有効数字部フィールドを含む。浮動小数点リマップアレイ６７４は、各々が浮動小数点スタックアレイ７００のレジスタに対するポインタである８つのポインタのアレイである。浮動小数点ＴＯＳ６７２は、浮動小数点リマップアレイ６７４へのポイントを指定する３ビットのポインタである。浮動小数点フル／エンプティアレイ６７６は、スタックアレイの位置がフル（１）であるかエンプティ（０）であるかを示し、各々が浮動小数点スタックアレイ７００のエレメントに対応する単一ビットのアレイである。
レジスタファイルアレイ６６２は、プロセッサ機能ユニットにおいて演算されかつ発生される結果をストアするための複数のアドレス指定可能なレジスタを含む。図１１は、８つの３２ビット整数レジスタ（ＥＡＸ、ＥＢＸ、ＥＣＸ、ＥＤＸ、ＥＳＰ、ＥＢＰ、ＥＳＩ、ＥＤＩ）、８つの８２ビット浮動小数点レジスタＦＰ０〜ＦＰ７、１６個の４１ビット一時整数レジスタＥＴＭＰ０〜ＥＴＭＰ１５、および本実施例では一時整数レジスタＥＴＭＰ０〜ＥＴＭＰ１５と同じ物理レジスタ位置にマップされる８つの８２ビット一時浮動小数点レジスタＦＴＭＰ０〜ＦＴＭＰ７を含む４０個のレジスタを備える例示的なレジスタファイルアレイ６６２を示している。浮動小数点レジスタＦＰ０〜ＦＰ７は、浮動小数点スタックアレイ７００としてアドレス指定され、これらはルックアヘッドＴＯＳ５０２およびルックアヘッドリマップアレイ５０４を用いて得られるとＡオペランドポインタ１３６、Ｂオペランドポインタ１３７および宛先レジスタポインタ１４３を用いてアクセスされる。
【００６２】
図１２を参照して、リオーダバッファ１２６は、リオーダバッファ（ＲＯＢ）コントロールおよびステータス８７０、ＲＯＢアレイ８７４、およびＲＯＢオペランドバスドライバ８７６を含む。ＲＯＢコントロールおよびステータス８７０は、ＲＯＰのソースオペランドおよび宛先オペランドを識別する入力を受取るようにＡオペランドポインタ１３６、Ｂオペランドポインタ１３７、および宛先ポインタ（ＤＥＳＴ  ＲＥＧ）バス１４３に接続される。ＲＯＢアレイ８７４は、ＲＯＢコントロールおよびステータス８７０によって制御されるメモリアレイである。ＲＯＢアレイ８７４は、機能ユニットから結果を受取るように、結果バス１３２に接続される。先頭、末尾、Ａオペランド選択、Ｂオペランド選択、および結果選択信号を含む制御信号は、ＲＯＢコントロールおよびステータス８７０からＲＯＢアレイ８７４に伝えられる。これらの制御信号が、結果バス１３２から入力されかつライトバックバス１３４、ライトポインタ１３３、Ａオペランドバス１３０、Ｂオペランドバス１３１、Ａオペランドタグバス１４８、およびＢオペランドタグバス１４９に出力されるＲＯＢアレイエレメントを選択する。各リオーダバッファアレイエレメントに１つである１６個の宛先ポインタが、従属性をチェックするためにＲＯＢアレイ８７４からＲＯＢコントロールおよびステータス８７０に与えられる。適切な従属性検査回路は、１９９４年４月２６日出願の米国特許出願（スコット・エイ・ホワイト（Scott A. White）「環状けた上げルックアヘッドを用いる範囲発見回路（A Range-Finding Circuit using Circular Carry Lookahead）」）に詳細に記載されており、これを引用によりここに援用する。
【００６３】
図１３は、図１２と関連して、各々が４１ビットの結果フィールド、９ビットの宛先ポインタフィールド、４ビットの下位プログラムカウンタフィールド、１１ビットの浮動小数点操作コードフィールド、１１ビットの浮動小数点フラグレジスタフィールド、および２４ビットのコントロールおよびステータスフィールドを有する１６個のエントリを含むリオーダバッファアレイ８７４の一例である。４１ビットの結果フィールドは、機能ユニットから受取った結果をストアするために与えられる。２つのリオーダバッファエントリは、浮動小数点結果をストアするために用いられる。整数の結果は４１ビットのうちの３２ビットにストアされ、残りの９ビットは状態フラグを保持するために用いられる。ＲＯＢアレイ８７４の各エントリの宛先ポインタフィールド（ＤＥＳＴ  ＰＴＲ〈８：０〉）は、レジスタファイル１２４の宛先レジスタを指定する。浮動小数点操作コードフィールドは、リオーダバッファエントリに割当てられる命令に対応するｘ８６浮動小数点操作コードのビットのサブセットをストアする。浮動小数点フラグレジスタフィールドは、浮動小数点動作から得られる浮動小数点フラグの状態をストアする。浮動小数点フラグは、浮動小数点機能ユニット１２２によって検出される精度、アンダフロー、オーバフロー、ゼロ除算、非正規化オペランドおよび無効オペランドのエラーに関する情報をストアする。コントロールおよびステータスフィールドは、たとえばＡＬＬＯＣＡＴＥビット、ＢＲＡＮＣＨ  ＴＡＫＥＮビット、ＭＩＳＰＲＥＤＩＣＴビット、ＶＡＬＩＤビット、ＥＸＩＴビット、ＵＰＤＡＴＥ  ＥＩＰビット、およびＥＸＣＥＰＴＩＯＮビット等のＲＯＢエントリの状態を示すビットを含む。ＡＬＬＯＣＡＴＥビットは、リオーダバッファエントリが割当てられるかどうかを指定する。ＢＲＡＮＣＨ  ＴＡＫＥＮビットは、分岐ユニット１２０が分岐が発生された分岐命令を実行したことを信号で示す。ＭＩＳＰＲＥＤＩＣＴビットは、分岐が不正確に予測されることを示す。ＶＡＬＩＤビットは、結果が有効でありかつ命令が終了することを示す。ＥＸＩＴビットは、ＲＯＰが特定のｘ８６命令のＲＯＰのシーケンスにおいて最後のＲＯＰであることを示し、拡張命令ポインタ（ＥＩＰ）レジスタ（図示せず）の更新をトリガするために用いられる。ＵＰＤＡＴＥ  ＥＩＰビットはまた、ＥＩＰレジスタが更新されるべきであることを示す。ＥＸＣＥＰＴＩＯＮビットは、命令の実行により例外またはエラー状態が生じたことを示す。
【００６４】
さらに、コントロールおよびステータスフィールドはまた、スタックポインタを更新するためのＳＴＡＣＫビットを含む。命令デコーダ１１８は、浮動小数点ＲＯＰをディスパッチすると、スタックを更新するための情報をリオーダバッファ１２６に送る。この情報は、動作が回収されるとスタックポインタで行なうための動作を指定するコードを含む。スタックはプッシュされるか、ポップされるか、２度ポップされるか、または変えないままにすることが可能である。リオーダバッファ１２６は、動作の実行が終了しかつオペランドが回収されるまで、リオーダバッファアレイ８７４内のエントリのＳＴＡＣＫビットコントロールおよびステータスフィールドにこの情報を保持する。
【００６５】
機能ユニットがスタック変更命令の実行を終了しかつそれ以前のすべてのプログラムの順序の動作が終了されかつそれらのオペランドが回収されると、リオーダバッファ１２６は、もし分岐の誤予測または例外等のエラーが生じていなければ動作を回収する。スタックは、リオーダバッファアレイ８７４内のエントリのコントロールフィールドによって指定される動作に従って更新される。たとえば、浮動小数点ＴＯＳ６７２は、スタックをポップする場合には増分され、スタックを２回ポップする場合には２だけ増分され、プッシュするかまたは変えないままにする場合には減分される。
【００６６】
ＦＸＣＨ命令が実行されると、分岐ユニット１２０は４本の結果バス１３２のうちの１本を介してルックアヘッドリマップアレイのコピーをリオーダバッファ１２６に送る。回収の際に、リオーダバッファ１２６は、ライトバックバス１３４のうちの１つを介してこのルックアヘッドリマップアレイ５０４の値を浮動小数点リマップアレイ６７４に駆動し、この浮動小数点リマップアレイ６７４でその値がストアされる。リオーダバッファ１２６から浮動小数点ＴＯＳ６７２への付加的なライン（図示せず）は、スタックポインタを更新するために用いられる。レジスタファイルアレイ６６２は、浮動小数点スタックアレイ７００のエントリが更新されると浮動小数点フル／エンプティアレイ６７６に０および１を書込む回路（図示せず）を含む。このようにして、推論的な浮動小数点スタック交換が非推論的となる。
【００６７】
図１４に示される分岐ユニット１２０は、ジャンプおよび呼出動作、復帰マイクロルーチンを含む、シーケンシャルなプログラム順序に従っていない命令のフェッチを制御する。分岐ユニット１２０は、加算器９１０およびインクリメンタ９１２に接続される分岐保存局９０２と、分岐予測比較論理９０８と、分岐リマップアレイ９０４とを含む。分岐リマップアレイ９０４は、浮動小数点スタックの一部分である。分岐ユニット１２０はさらに、「予測発生される」分岐を追跡する分岐予測発生ＦＩＦＯ９０６を含む。分岐予測発生ＦＩＦＯ９０６のエントリは、対応する分岐のキャッシュ位置と、予測発生された分岐のＰＣとを保持する。予測発生された分岐のＰＣは、分岐が正しく予測されるかどうかを決定するために分岐予測比較論理９０６に与えられる。加算器９１０およびインクリメンタ９１２は、デコードＰＣに関する分岐のアドレスを計算する。命令キャッシュ１１６によって分岐が予測発生されると、そのシーケンシャルでない予測されたターゲットＰＣは、分岐ブロックのＰＣ、カラム、およびＢＢＩから形成される分岐の位置とともに分岐予測発生ＦＩＦＯ９０６に駆動され、かつ分岐予測発生ＦＩＦＯ９０６にラッチされる。分岐ユニット１２０は、加算器９１０またはインクリメンタ９１２を用いて、プログラムカウンタを決定することによって対応する分岐ＲＯＰを実行する。たとえば、分岐が発生されると、分岐命令のＰＣからのターゲットプログラムカウンタと、オペランドバス１３０を介してオペランドとして供給されたオフセットパラメータとを計算するために加算器９１０が用いられる。分岐ユニット１２０によって更新されるプログラムカウンタと、ＤＰＣバス３１３を介して命令デコーダ１１８から供給されるデコードＰＣとが一致すると、分岐ユニット１２０は結果バス１３２を介して結果をリオーダバッファ１２６に駆動する。この結果は、ターゲットＰＣと、一致を示す状態コードとを含む。分岐が誤予測されると、正しいターゲットは命令キャッシュ１１６に駆動され、フェッチＲＣを再送する。
【００６８】
分岐保存局９０２は、命令デコーダ１１８から操作コード／タイプバス１５０を介してＲＯＰ操作コードを受取り、かつ、Ａオペランドバス１３０およびＢオペランドバス１３１を介してレジスタファイル１２４およびリオーダバッファ１２６からオペランドを受取り、かつ、さらに結果バス１３２から結果データを受取るマルチエレメントＦＩＦＯアレイである。保存局の各エレメントは、１つの分岐命令に関する操作コード情報をストアする。複数個の分岐命令は、そのキュー内に保持され得る。分岐保存局９０２によって受取られる情報は、デコードＰＣ、分岐予測、および分岐オフセットを含む。デコードＰＣは、デコードＰＣバス３１３を介してやり取りされる。分岐予測は、分岐予測ラインを介して伝えられる。オフセットは、リオーダバッファ１２６を通過しＡオペランドバス１３０およびＢオペランドバス１３１を介して分岐ユニット１２０に送られる。オフセットは、リオーダバッファ１２６を通過しＡオペランドバス１３０およびＢオペランドバス１３１を介して分岐ユニット１２０に送られる。
【００６９】
命令デコーダ１１８は、分岐ユニット１２０に分岐命令をディスパッチすると、分岐保存局９０２にストアされるルックアヘッドＴＯＳ５０２およびルックアヘッドフル／エンプティアレイ５０６とやり取りされる。好ましくは、ルックアヘッドリマップアレイ５０４、ルックアヘッドフル／エンプティアレイ５０６、およびルックアヘッドＴＯＳ５０２は、予測が正しいときにはプロセッサ１１０がある態様で機能しかつ予測が間違っている場合にはそれと異なった態様で機能するように、分岐ユニット１２０による処理に利用可能である。
【００７０】
予測発生された分岐命令ＲＯＰがデコードされ発行されると、デコードＰＣ、オフセット、および予測がディスパッチされ、分岐ユニット１２０の保存局９０２に保持される。予測されたターゲットカウンタがデコードＰＣと一致すると、分岐は正しく予測されたことになり、正しい予測を反映する結果情報が正しくリオーダバッファ１２６に戻される。この情報は、ターゲットＰＣと、一致が達成されたことを示す状態コードとを含む。分岐が誤予測されると、分岐ユニット１２０は正しいターゲットを命令キャッシュ１１６およびリオーダバッファ１２６の両方に駆動し、命令ブロックインデックスを命令キャッシュ１１６に送る。このインデックスは、分岐予測発生ＦＩＦＯ９０６を更新するために用いられる予測情報を表わす。リオーダバッファ１２６は、その後に続くＲＯＰの結果を取消すことにより、誤予測された分岐に応答する。
【００７１】
分岐ユニット１２０はまた、誤予測が発生した場合、命令デコーダ１１８からの論理アドレスを線形アドレスに変換する。これを行なうために、コードセグメントベースポインタの局所コピーが、命令キャッシュ１１６のコードセグメント４１６によって分岐ユニット１２０に供給される。分岐ユニット１２０は、浮動小数点交換命令（ＦＸＣＨ）を実現しかつ浮動小数点動作を加速するために、浮動小数点ＴＯＳ６７２、浮動小数点リマップアレイ６７４、および浮動小数点フル／エンプティアレイ６７６を含む浮動小数点スタック回路の推論的更新を管理する。分岐ユニット１２０は、推論的分岐が生じたときには常に現在のスタック状態のコピーを保存することによってこれらの目的を果たす。分岐リマップアレイ９０４は、各ＦＸＣＨ命令でディスパッチされるルックアヘッドリマップアレイ５０４からコピーされる。他の実施例では、分岐リマップアレイ９０４は、ルックアヘッドリマップアレイ５０４と同じ情報をストアするため、絶対に必要であるわけではない。しかしながら、例示的な実施例では、分岐命令ごとにではなく必要な場合にのみルックアヘッドリマップアレイ５０４とやり取りする。ここに記載する実施例では、ルックアヘッドリマップアレイ５０４はＦＸＣＨ命令に応答してのみ変化するため、ルックアヘッドリマップアレイ５０４はＦＸＣＨがリクエストされたときにのみ分岐ユニット１２０に送られる。
【００７２】
分岐ユニット１２０は、スタックポインタ、リマップアレイおよびフル／エンプティアレイの正しいコピーを、最後に成功した分岐後に存在した状態にストアすることによって、誤予測に応答する。分岐ＲＯＰが終了すると、分岐ユニット１２０は、分岐予測結果を送るように結果バス１３２を駆動する。分岐が正しく予測されると、浮動小数点ＴＯＳ６７２、浮動小数点リマップアレイ６７４、および浮動小数点フル／エンプティアレイ６７６は変更されずにセーブされる。
【００７３】
分岐の誤予測、例外、割込またはトラップなしでＦＸＣＨ命令が通常に実行されると、分岐ユニット１２０は命令デコーダ１１８によって送られるルックアヘッドリマップアレイ５０４の値をストアする。実行が終了すると、分岐ユニット１２０はルックアヘッドリマップアレイ５０４の値を結果バス１３２に書込む。命令が回収されると、リオーダバッファ１２６は、ルックアヘッドリマップアレイ５０４を浮動小数点リマップアレイ６７４に書込むことによってレジスタの交換にコミットする。しかしながら、分岐ユニット１２０は、スタックアンダフローエラー等のＦＸＣＨ命令に関する問題を検出すると、リオーダバッファ１２６によって、プロセッサをＦＸＣＨ命令の際に再始動させる再同期化応答を開始するようにされる。この再同期化応答は、エス・エイ・ホワイト（S. A. White ）およびエム・ディ・ゴダード（M. D. Goddard ）による「スーパースカラプロセッサの再同期化（RESYNCHRONIZATION OF A SUPERSCALAR PROCESSOR）」と題された本願と同日出願の同時継続中の米国特許出願において議論されており、これを引用によりここに援用する。
【００７４】
分岐ユニット１２０は、ＦＸＣＨ命令ＲＯＰを実行する前にスタックエラーに関して検査する。スタックアンダフローエラーが検出されると、分岐ユニット１２０はリオーダバッファ１２６にエラー通知コードを戻し、これによりリオーダバッファ１２６に再同期化応答を開始させる。これにより、プロセッサをＦＸＣＨ命令の際に再始動させる。しかしながら、スタックアンダフロー状態の後の再同期化の際に生じるＦＸＣＨ命令は他のＦＸＣＨとは異なる。特に、非再同期化ＦＸＣＨ命令は、１つのＦＸＣＨ  ＲＯＰを含む。再同期化ＦＸＣＨ命令は、２対の浮動小数点加算（ＦＡＤＤ）ＲＯＰと１つのＦＸＣＨ  ＲＯＰとを含む５つのＲＯＰを含む。この２対のＦＡＤＤ  ＲＯＰはそれぞれ、ＦＸＣＨ命令において交換される２つの浮動小数点レジスタに０を加える。スタックアンダフローエラーは、空のスタック位置からオペランドを読取ろうとすることによって生じる。浮動小数点ユニット１２２は、ルックアヘッドフル／エンプティレジスタ５０６に従って、レジスタが空であるかいっぱいであるかを決定する。交換された浮動小数点レジスタが有効データを含んでいれば、０を加えてもデータの値は変わらない。有効データを含んでいなければ、浮動小数点ユニット１２２がＦＡＤＤＲＯＰを実行しかつ交換された浮動小数点レジスタが空であれば、浮動小数点ユニット１２２はトラッピングがマスクされていなければトラップ応答を開始することによって、またはクワイエット非数字（ＱＮａＮ）コードをレジスタにロードすることによって応答する。
【００７５】
スタックアンダフローの後に生じる再同期化により、プロセッサ１１０はＦＸＣＨ命令に戻り、既知の状態のデータ、すなわち有効データまたはＱＮａＮコードを配置し、無効データを用いて実行されるいかなる命令をも含むＦＸＣＨの後に生じる命令を再試行する。
【００７６】
なお、すべての浮動小数点命令は、８２ビット浮動小数点データに適応するために、４１ビットオペランドバス１３０、１３１および４１ビット結果バス１３２に関して少なくとも１対のＲＯＰを含む。
【００７７】
分岐が誤予測されると、この誤予測された分岐に関して、分岐リマップアレイ９０４と保存局９０２にストアされるスタックトップ位置ポインタおよびフル／エンプティアレイとは、誤予測された分岐の前のスタックの状態を示す。分岐ユニット１２０は、局所的にストアされたリマップおよびＴＯＳ値を命令デコーダ１１８内のルックアヘッドリマップアレイ５０４およびルックアヘッドＴＯＳに書込み、スタックの状態を誤予測された分岐の事実上前の状態に戻す。分岐ユニット１２０のみが誤予測を検出するため、別の機能ユニットではなく分岐ユニット１２０がスタックをテストしかつ回復する。
【００７８】
プロセッサ１１０が例外状態を検出すると、リオーダバッファ１２６は、実行が既知の状態で再開されるようにそのエントリを流すことによって回復を達成する。リオーダバッファコントロール８７０は、スタックに関して同様の回復動作を実行する。例外の場合には、リオーダバッファ１２６は浮動小数点リマップアレイ６７４をルックアヘッドリマップアレイ５０４に書込み、浮動小数点ＴＯＳ２７をルックアヘッドＴＯＳ５０２に書込み、浮動小数点フル／エンプティアレイ６７６をルックアヘッドフル／エンプティアレイ５０６に書込む。
【００７９】
浮動小数点スタックがＦＰＵの外で実現されるため、プロセッサ１１０は浮動小数点演算命令とパラレルに浮動小数点交換を実行する。この理由のため、浮動小数点スタックコンポーネント回路は浮動小数点ユニット以外のユニットに組込まれる。したがって、ルックアヘッドリマップアレイ５０４およびルックアヘッドＴＯＳ５０２は、命令デコーダ１１８に組込まれる。浮動小数点ＴＯＳ６７２、浮動小数点リマップアレイ６７４、および浮動小数点スタックアレイ７００は、レジスタファイル１２４内に置かれる。分岐ユニット１２０は、分岐リマップアレイ９０４を与える。同様に、パラレルな命令処理を促進するために、ＦＸＣＨ命令は、浮動小数点ユニットではなく分岐ユニット１２０内で実行される。
【００８０】
図１５および図１６はそれぞれ、リマップアレイＭＡＰ〈２３：０〉９２４とスタックトップ位置ポインタＴＯＳ〈２：０〉９２６とに従ってスタックエントリを選択する、スタック選択信号ＳＴｉ〈２：０〉９２８を引出すためのスタック回路９２０、およびスタック選択信号ＳＴＩ〈２：０〉９２９を引出すためのスタック回路９２２を示している。４つのディスパッチ位置の各々に関してルックアヘッドリマップアレイ５０４およびルックアヘッドＴＯＳ５０２を与えるために、スタック回路９２０のマルチプレクサ９３０および加算器９３２は、命令デコーダ１１８において４回複製される。ルックアヘッドリマップアレイ５０４はＭＡＰ〈２３：０〉９２４に対応する。ルックアヘッドＴＯＳ５０２はＴＯＳ〈２：０〉９２６に対応する。ＭＡＰ〈２３：０〉９２４に対応する浮動小数点リマップアレイ６７４、およびＴＯＳ〈２：０〉９２６に対応する浮動小数点ＴＯＳ６７２を与えるために、レジスタファイル１２４には１つのスタック回路９２０も含まれている。
【００８１】
同様に、ルックアヘッドスタック選択信号であるスタック選択信号ＳＴＩ〈２：０〉９２９を引出すために、命令デコーダ１１８にはスタック回路９２２のマルチプレクサ９３４および加算器９３６が含まれる。スタック回路９２２は、４つのデコーダディスパッチ位置によって共有される。浮動小数点スタック選択信号であるスタック選択信号ＳＴＩ〈２：０〉９２９を引出すために、レジスタファイル１２４にスタック回路９２２のマルチプレクサ９３４および加算器９３６が含まれる。
【００８２】
ＳＴｉ〈２：０〉９２８またはＳＴＩ〈２：０〉９２９に対応する浮動小数点スタック選択信号は、図１１のレジスタファイルアレイ６６２をアドレス指定するビット〈５：３〉をセットする。これにより、浮動小数点命令は、スタックのトップ位置に関する位置を指定することによってスタックのエントリを選択する。したがって、スタック回路９２０または９２２は、レジスタファイルアレイ６６２をアドレス指定するためにＳＴｉ〈２：０〉９２８またはＳＴＩ〈２：０〉９２９を引出す。下位４１ビットにアクセスするためにレジスタファイルアドレスビット〈８：６〉を「１００」にセットすることにより、および浮動小数点の数の上位４１ビットにアクセスするためにレジスタファイルアドレスビット〈８：６〉を「１１０」にセットすることにより、浮動小数点オペランドはオペランドバス１３０、１３１上に駆動される。浮動小数点ＲＯＰに関して推論的実行およびフォワーディングが達成されるように、浮動小数点データの従属性に関してテストするためにＳＴｉ〈２：０〉９２８またはＳＴＩ〈２：０〉９２９の信号はリオーダバッファ１２６に与えられる。
【００８３】
１つの２４ビットレジスタＭＡＰ〈２３：０〉９２４内で、ルックアヘッドリマップアレイ５０４の８つのポインタは、一連の連結された３ビットレジスタＭＡＰ〈２：０〉〜ＭＡＰ〈２３：２１〉に構成される。同様に、浮動小数点リマップアレイ６７４の８つのポインタは、１つの２４ビットレジスタＭＡＰ〈２３：０〉９２４内に構成される。ルックアヘッドＴＯＳ５０２および浮動小数点ＴＯＳ〈２：０〉はそれぞれ３ビットポインタＴＯＳ〈２：０〉９２６によって示される。図１５および図１６に示されるＭＡＰ〈２３：０〉およびＴＯＳ〈２：０〉の内容は、スタックの初期状態を表わす。
【００８４】
３ビットＭＡＰレジスタ（ＭＡＰ〈２：０〉…ＭＡＰ〈２３：２１〉９２４）におけるデータは、３ビットのリマップされたスタック信号ＳＴｉ〈２：０〉（ここで、ｉはスタックのトップ位置に関する８つのスタック位置０〜７のうちの１つを選択する）を発生するために、８方向マルチプレクサ９３０に与えられる。ＳＴ０〈２：０〉は、スタックのトップ位置におけるスタックのリマップされたエントリを識別し、ＴＯＳ〈２：０〉９２６は０である。ＳＴ１〈２：０〉は、スタックのトップ位置のエントリの後の位置のリマップされたスタックエントリを識別する。加算器９３２は、マルチプレクサ９３０においてＳＴ１〈２：０〉を選択するために、ＴＯＳ〈２：０〉ポインタに１を加える。ポインタｉが増加すると、ＳＴｉ〈２：０〉は、スタックの物理的な限界（７）を超えるポインタがより低いスタックアドレス（０）にラップするように、循環的にシーケンシャルに付加的なスタックエレメントをアドレス指定する。ＳＴ７〈２：０〉は、ＴＯＳ〈２：０〉９２６によってアドレス指定されたエレメントの前の位置にあるリマップアレイ９２４のエレメントである。
【００８５】
いくつかのｘ８６命令は、特定のスタックエレメントに作用する動作を指定する。たとえば、８つのスタックエレメントのうちのいずれも、ＲＯＰによって用いられるスタックエレメントを規定するために、命令のmodrm バイトから得られるＲＥＧ２を用いて指定することができる。図１６では、命令デコーダ１１８またはレジスタファイル１２４は、ＴＯＳ〈２：０〉９２６とＲＥＧ２との和によって指定されるリマップされたスタックエントリＳＴＩ〈２：０〉を選択する。加算器９３６はポインタ値を加え、その和をマルチプレクサ９３４に与えて、ＳＴＩ〈２：０〉９２９が得られる。
【００８６】
図１７を参照して、８つのスタックエレメントｉ＝０〜７に関するＳＴｉＥＭＰＴＹ９４４を発生するために、フル／エンプティアレイ９４２（ＥＭＰＴＹ〈７：０〉）に保持されるデータがマルチプレクサ９３８に与えられるエンプティ回路９４６が示されている。出力信号ＳＴｉＥＭＰＴＹ９４４は、スタックのエレメントがいっぱいであるかまたは空であるかを指定する。ＳＴｉＥＭＰＴＹ９４４は、ルックアヘッドスタックレジスタＳＴｉ〈２：０〉９２８の出力によってアドレス指定されるルックアヘッドフル／エンプティアレイＥＭＰＴＹ（ＥＭＰＴＹ〈７〉…ＥＭＰＴＹ〈０〉）のエレメントの値である。ＳＴｉＥＭＰＴＹ９４４の値１は、指定された浮動小数点スタックアレイエレメントが規定されている（いっぱいである）ことを示し、値０は、スタックエレメントが規定されていない（空である）ことを示す。４つのディスパッチ位置の各々に関してルックアヘッドフル／エンプティアレイ５０６を与えるために、エンプティ回路９４６のマルチプレクサ９３８は命令デコーダ１１８において４回複製される。ルックアヘッドフル／エンプティアレイ５０６（ＥＭＰＴＹ〈７：０〉）は、ルックアヘッドスタックレジスタＳＴｉ〈２：０〉の出力によってアドレス指定されるフル／エンプティアレイ９４２（ＥＭＰＴＹ〈７：０〉）に対応する。浮動小数点スタックレジスタＳＴｉ〈２：０〉の出力によってアドレス指定されるフル／エンプティアレイ９４２（ＥＭＰＴＹ〈７：０〉）に対応する浮動小数点フル／エンプティアレイ８０６を与えるために、１つのエンプティ回路９４６もレジスタファイル１２４に含まれる。
【００８７】
ポインタＲＥＧ２を用いて８つのフル／エンプティアレイエレメントの各々をアドレス指定することができる。図１８を参照して、フル／エンプティアレイ９４２（ＥＭＰＴＹ〈７：０〉）に保持されるデータがマルチプレクサ９４０に与えられてＳＴＩＥＭＰＴＹ９４５信号を発生するエンプティ回路９４８が示されている。信号ＳＴＩ〈２：０〉９２９によって、スタックフル／エンプティアレイ９４２のエレメントが選択される。ＳＴＩＥＭＰＴＹ９４５は、ポインタＲＥＧ２によって決定されるスタック信号ＳＴＩ〈２：０〉９２９によってアドレス指定されるフル／エンプティアレイＥＭＰＴＹ（ＥＭＰＴＹ〈７〉…ＥＭＰＴＹ〈０〉）のエレメントの値である。ルックアヘッドフル／エンプティアレイ５０６を与えるために、エンプティ回路９４８のマルチプレクサ９４０は、命令デコーダ１１８におけるデコーダディスパッチ位置によって共有される。ルックアヘッドフル／エンプティアレイ５０６（ＥＭＰＴＹ〈７：０〉）は、ルックアヘッドスタックレジスタＳＴＩ〈２：０〉の出力によってアドレス指定されるフル／エンプティアレイ９４２（ＥＭＰＴＹ〈７：０〉）に対応する。浮動小数点スタックレジスタＳＴＩ〈２：０〉の出力によってアドレス指定されるフル／エンプティアレイ９４２（ＥＭＰＴＹ〈７：０〉）に対応する浮動小数点フル／エンプティアレイ８０６を与えるために、１つのエンプティ回路９４８もレジスタファイル１２４に含まれる。
【００８８】
４つのディスパッチ位置の各々に関して、スタックアンダフローおよびオーバフローの状態がテストされ、スタックフル／エンプティアレイ５０６の種々の状態の分析から結果が発生される。宛先オペランドに関係する、１つがＡソースオペランドおよびＢソースオペランドの各々に関するものである２つの可能なアンダフローインジケータと、１つのオーバフローインジケータとが、２つのＳＴＡＣＫＵＮＤＥＲインジケータおよび１つのＳＴＡＣＫＯＶＥＲインジケータを引出すあるタイプの浮動小数点動作および分岐命令に応答して発生される。浮動小数点ユニットにその次のＲＯＰ対がディスパッチされると、ＳＴＡＣＫＵＮＤＥＲ（Ａ、Ｂ）インジケータおよびＳＴＡＣＫＯＶＥＲインジケータが命令デコーダ１１８から浮動小数点機能ユニット１２２に送られる。動作がスタックプッシュを指定し、かつ、ＳＴ７ＥＭＰＴＹがスタックエレメントが空でないことを示すと、スタックオーバフロー状態が検出される。
【００８９】
図１９、図２０、図２１および図２２は、以下に示すＣＩＳＣタイプ命令コードのディスパッチおよび実行から得られるスタックアレイおよびレジスタにおける変化を示している。
【００９０】
ＦＡＤＤＰ                  ／／スタックポップに応じて加算
ＦＸＣＨ  ＳＴ（２）        ／／交換
ＦＭＵＬ                    ／／乗算
図１９（Ａ）〜図１９（Ｃ）は、リマップアレイが初期状態にある場合の、動作がディスパッチされる前のスタックレジスタおよびアレイを示している。図１９（Ａ）は、命令デコーダ１１８のルックアヘッドＴＯＳ５０２、ルックアヘッドリマップアレイ５０４、およびルックアヘッドフル／エンプティアレイ５０６を示している。図１９（Ｂ）は、分岐ユニット１２０の分岐リマップアレイ９０４を示している。図１９（Ｃ）は、レジスタファイル１２４の浮動小数点ＴＯＳ６７２、リマップアレイ６７４、スタックアレイ７００、およびフル／エンプティアレイ６７６を示している。浮動小数点ＴＯＳ６７２は、値４を有し、浮動小数点リマップアレイ６７４の位置４を指している。ルックアヘッドリマップアレイ５０４は、初期化の際に設定されるポインタ値を保持し、ポインタはシーケンスにおいて順に０から７まで１ずつ増分する。スタックアレイ７００およびフル／エンプティアレイ６７６のエレメントを指す浮動小数点リマップアレイ６７４およびルックアヘッドリマップアレイ５０４は、初期化の際にこのように設定され、浮動小数点交換（ＦＸＣＨ）命令に応答してのみ変化する。
【００９１】
図１９（Ａ）および図１９（Ｃ）では、スタックのトップ位置は４であり、リマップアレイの位置４は、値２．０を含む浮動小数点スタックアレイ７００の位置４を指す。浮動小数点スタック７００は、アレイエレメント４〜７にあるデータのみを含む。したがって、フル／エンプティアレイ６７６およびルックアヘッドフル／エンプティアレイ５０６のエレメントはレジスタエレメント４〜７において１に設定され、スタック７００の対応するエレメントにデータ値が存在することを示す。命令デコーダ１１８は、３つの命令をディスパッチするために２つのサイクルを用いる。最初のサイクルでは、デコーダはＦＡＤＤＰを浮動小数点ユニット１２２にディスパッチし、ＦＸＣＨを分岐ユニット１２０にディスパッチする。
【００９２】
図２０（Ａ）〜図２０（Ｃ）は、ＦＡＤＤＰおよびＦＸＣＨ命令がディスパッチされ、そのいずれの命令も実行される前のスタックレジスタおよびアレイの値を示している。ＦＡＤＤＰは、命令デコーダ１１８によって、スタックのトップ位置の浮動小数点スタックアレイ７００のエントリ２．０をＴＯＳ（位置５）から１だけ除いた位置のスタック値３．０に加え、ＴＯＳを（位置５）に増分し、その和である５．０をＴＯＳにストアするＲＯＰシーケンスに変換される。したがって、図２０（Ａ）では、命令デコーダ１１８はルックアヘッドＴＯＳ５０２を５に更新してスタックポップを実現し、ルックアヘッドフル／エンプティアレイ５０６の位置４を０に設定する。
【００９３】
ＦＸＣＨは、ＴＯＳの記憶エレメントの内容と、ＴＯＳから２つのエレメントだけ除いた指定されたスタック位置の内容との交換を命令する。プロセッサは、スタックレジスタにあるデータを交換することによってではなく、ルックアヘッドリマップアレイ５０４におけるポインタ５とポインタ７とを交換することによってこれを行なう。図２０（Ａ）では、命令デコーダ１１８は、ＴＯＳの位置５のポインタと位置７のポインタとを交換し、ＦＡＤＤＰおよびＦＸＣＨをディスパッチする。図２０（Ｃ）は、浮動小数点ＴＯＳ６７２、リマップアレイ６７４、スタックアレイ７００、およびフル／エンプティアレイ６７６がＲＯＰがディスパッチされても図１６の値から変わらないことを示している。
【００９４】
図２１（Ａ）〜図２１（Ｃ）は、ＦＡＤＤＰおよびＦＸＣＨ  ＲＯＰの実行後、およびＦＭＵＬがディスパッチされた後のスタックレジスタおよびアレイを示している。図２１（Ａ）では、ＦＭＵＬはスタックを変更しないため、ＦＭＵＬがディスパッチされてもルックアヘッドＴＯＳ５０２またはフル／エンプティアレイ５０６は変化しない。同様に、交換命令ＦＸＣＨのみがリマップアレイの値を変えるため、ＦＭＵＬがディスパッチされても、ルックアヘッドリマップアレイ５０４は変化しない。図２１（Ｂ）では、ＦＸＣＨの実行により、ルックアヘッドリマップアレイ５０４は分岐リマップアレイ９０４にコピーされる。図２１（Ｃ）は、ＦＡＤＤＰ、ＦＸＣＨまたはＦＭＵＬがいずれも回収されず、ＲＯＰが回収されるまで浮動小数点ＴＯＳ６７２、リマップアレイ６７４、スタックアレイ７００、およびフル／エンプティアレイ６７６が変化しないことを示している。
【００９５】
図２２（Ａ）〜図２２（Ｃ）は、ＦＡＤＤＰ、ＦＸＣＨ、およびＦＭＵＬのＲＯＰの回収後のスタックレジスタおよびアレイを示している。ＦＡＤＤＰに応答して、浮動小数点機能ユニット１２２は、スタックの前のトップ位置からの２．０と、スタックのその次の位置からの３．０とを加算し、そこにその和をストアする。浮動小数点ＴＯＳ６７２は、５に増分される。ＦＸＣＨの実行の際に、命令が回収されるとルックアヘッドリマップアレイ５０４は浮動小数点リマップアレイ６７４に書込まれる。ＦＡＤＤＰが回収されると、ルックアヘッドＴＯＳ５０２が更新される。ＦＭＵＬは、スタックのトップ位置のエントリ（位置５の８．０）をＴＯＳから１除いた位置のスタックエントリ（位置６の４．０）で乗算する。ＦＭＵＬは、ＴＯＳの位置５においてその積をストアする。図２２（Ｃ）では、ＦＭＵＬ  ＲＯＰに応答して、浮動小数点スタックアレイ７００は、乗算の積を含む。
【００９６】
分岐ユニット１２０がスタックアンダフローエラー等のＦＸＣＨ命令に関する問題を検出すると、分岐ユニット１２０は、再同期化状態の存在を示す状態フラグ（図示せず）をリオーダバッファ１２６に戻す。これらのフラグは、アサートされた例外状態通知を含む。リオーダバッファ１２６は、例外信号および再同期化信号（図示せず）を分岐ユニット１２０に送ることによって、再同期化応答を開始する。分岐ユニット１２０は、フェッチＰＣをＦＸＣＨ命令の位置に再送し、かつ、ルックアヘッドＴＯＳ５０２、ルックアヘッドリマップアレイ５０４、およびルックアヘッドフル／エンプティアレイ５０６をＦＸＣＨのデコードの前の状態に復元させることによって、これらの信号に応答する。この状態で、ルックアヘッドＴＯＳ５０２およびルックアヘッドフル／エンプティアレイ５０６は、図２０（Ａ）に示されるようにＦＡＤＤＰをデコードした後の状態に対応するように更新され、ルックアヘッドリマップアレイ５０４は、図１９（Ａ）に示されるようにＦＸＣＨのデコードの前の状態に復元される。
【００９７】
分岐ユニット１２０によってＦＸＣＨ命令および分岐命令が誤予測されたことが発見された後に条件つき分岐命令がディスパッチされると、分岐ユニット１２０は命令キャッシュ１１６のフェッチＰＣを適切な命令ポインタに再送し、ＦＸＣＨ命令に対応する、図２１（Ｂ）および図２２（Ｂ）に示される分岐リマップアレイ９０４にストアされるアレイでルックアヘッドリマップアレイ５０４を書換える。
【００９８】
プロセッサ１１０の機能エレメントによって例外状態が検出されると、例外が回収されたときの浮動小数点ＴＯＳ６７２、リマップアレイ６７４、およびフル／エンプティアレイ６７６はそれぞれルックアヘッドＴＯＳ５０２、リマップアレイ５０４、およびフル／エンプティアレイ５０６に書込まれる。
【００９９】
プロセッサ１１０は、複数段パイプラインとして動作する。図２３は、シーケンシャル実行パイプラインに関するタイミング図である。段は、順に、フェッチ段、デコード１段、デコード２段、実行段、結果段、および回収段を含む。
【０１００】
デコード１の間、推論的命令がフェッチされ、命令デコーダ１１８が命令をデコードし、命令が有効になる。命令デコーダ１１８は、ＳＴＩ、ＳＴＩＥＭＰＴＹ、ＳＴｉ、およびＳＴｉＥＭＰＴＹ（ｉ＝０〜７）を含むスタック情報がデコード２の間に更新されるように、ルックアヘッドＴＯＳ５０２、ルックアヘッドフル／エンプティアレイ５０６、およびルックアヘッドリマップアレイ５０４を更新する。
【０１０１】
デコード２の間、命令デコーダ１１８の出力は有効になる。たとえば、オペランドバス１３０、１３１およびオペランドタグバス１４８、１４９はデコード２の初期段階で有効になり、レジスタファイル１２４およびリオーダバッファ１２６からのオペランドとリオーダバッファ１２６からのオペランドタグとがデコード２の後の方で利用可能になるようにする。
【０１０２】
実行の間、オペランドバス１３０、１３１およびタグ１４８、１４９は有効になり、機能ユニットの保存局に与えられる。機能ユニットはＲＯＰを実行し、結果バスに関して調停する。ＦＸＣＨ  ＲＯＰが実行されると、分岐ユニット１２０は現在のルックアヘッドリマップアレイ５０４をセーブする。分岐命令に関しては、分岐ユニット１２０は、ルックアヘッドＴＯＳ５０２およびルックアヘッドフル／エンプティアレイ５０６を保存する。誤予測された分岐に関しては、ルックアヘッドＴＯＳ５０２、ルックアヘッドフル／エンプティアレイ５０６、およびルックアヘッドリマップアレイ５０４は、分岐ユニット１２０によってセーブされた値から復元される。
結果の間、機能ユニットは結果をリオーダバッファ１２６および保存局に書込む。スタック交換命令結果が書込まれると、結果段の終わりのほうの段階で浮動小数点リマップアレイ６７４は分岐リマップアレイ９０４によって置き換えられる。プッシュまたはポップするＲＯＰの結果がリオーダバッファ１２６に書込まれた後、ＴＯＳ６７２および浮動小数点フル／エンプティアレイ６７６は結果段の終わりのほうの段階で更新される。回収の間、オペランドは、リオーダバッファ１２６からレジスタファイル１２４に回収される。
【０１０３】
図２４は、スーパースカラプロセッサにおいてスタックを制御するための方法の一部分として、命令デコーダ１１８によって行なわれる手順のフローチャートである。この手順は、ディスパッチウィンドウにおいてディスパッチされる４つ以下のＲＯＰの動作ごとに繰返される。例示的なプロセッサ１１０では、２つ以下の浮動小数点命令または１つだけの浮動小数点命令と、２つの非浮動小数点命令とが１つのディスパッチウィンドウに置かれる。これにより、ディスパッチウィンドウにおいて、浮動小数点スタックに影響を及ぼすＲＯＰの数は効果的に２つに制限される。命令デコーダ１１８はステップ９５０で命令をデコードし、ステップ９５２でデコードされた命令がスタックに影響を及ぼす命令であるかどうかを決定する。分岐命令等の、スタックを直接変えない命令も命令デコーダ１１８によって処理される。フローチャートを簡略化するために、図２４にはスタックパラメータを更新する機能のみが示されている。スタック調節命令は、スタックエレメント交換ＲＯＰと、スタックをプッシュおよびポップするＲＯＰを含む。
【０１０４】
論理ステップ９５４の制御下で、ＲＯＰがスタックをプッシュまたはポップすると、命令デコーダ１１８は、ルックアヘッドＴＯＳ５０２を減分または増分することにより、およびルックアヘッドフル／エンプティアレイ５０６を更新することによりルックアヘッドＴＯＳを更新する。ステップ９５６で、ルックアヘッドＴＯＳ５０２は、プッシュ機能の場合は減分され、ポップ機能の場合は増分される。なお、プッシュ動作またはポップ動作に関してスタックポインタを増分または減分することによって異なるスタック実現例を調節してもよい。プッシュ動作において減分され、ポップ動作において増分されるスタックが開示されたスタックの実施例と同等のものであり本発明の範囲内であることが理解される筈である。スタックのプッシュの際に特定されるルックアヘッドフル／エンプティアレイ５０６のエレメントは１に設定され、ＴＯＳポインタは減分される。スタックのポップの前に指定されるルックアヘッドフル／エンプティアレイ５０６のエレメントは０にクリアされ、ＴＯＳポインタ５０２はポップ動作において増分される。
【０１０５】
論理ステップ９５８で識別されるスタックエレメント交換ＲＯＰに関しては、命令デコーダ１１８は、ステップ９６０で、命令によって指定されるルックアヘッドリマップアレイ５０４のエレメントを交換する。
【０１０６】
ステップ９６２で、スタックに影響を及ぼさないＲＯＰを含むすべてのＲＯＰが命令デコーダ１１８によって種々の機能ユニットにディスパッチされる。たとえば、分岐動作は分岐ユニット１２０にディスパッチされる。図２５は、スーパースカラプロセッサにおいてスタックを制御するための方法の第２の部分として、分岐ユニット１２０によって行なわれる手順のフローチャートである。分岐ユニット１２０にディスパッチされるＲＯＰは、スタック交換命令および種々の分岐ＲＯＰを含む。ＲＯＰは、動作識別ステップ９６４において識別される。
【０１０７】
論理ステップ９６５に従って命令がスタックエレメント交換命令であれば、分岐ユニット１２０はステップ９６６でＳＴＡＣＫＵＮＤＥＲ識別をテストすることによってスタックアンダフローエラーが起こったかどうかを決定する。アンダフローが生じれば、ステップ９６７で再同期化の手順が管理される。スタックアンダフローが起こっていなければ、命令デコーダ１１８によって交換命令に関して更新されたルックアヘッドリマップアレイ５０４がステップ９６８でセーブされる。ルックアヘッドリマップアレイ５０４のすべてのエレメントは、分岐リマップアレイ９０４内のエントリに書込まれる。
【０１０８】
論理ステップ９７０で検出された分岐ＲＯＰに関しては、分岐ユニット１２０はスタックパラメータをディスパッチされた分岐ＲＯＰと相関させるために、ステップ９７２で保存局９０２にルックアヘッドＴＯＳ５０２およびルックアヘッドスタックフル／エンプティアレイ５０６をセーブする。保存局９０２は、分岐ＲＯＰの実行を妨げる競合を解決し、ステップ９７４でＲＯＰを発行する。ＲＯＰが発行されると、分岐ユニット１２０は分岐確認ステップ９７６を実行する。誤予測が検出されると、分岐ユニット１２０は、予測訂正論理ステップ９７８に応じて、命令デコーダ１１８におけるルックアヘッドＴＯＳ５０２およびルックアヘッドスタックフル／エンプティアレイ５０６を、ステップ９７２で分岐ユニット保存局９０２にストアされた値に置き換えることによって、ステップ９８０でプロセッサ１１０のルックアヘッド状態を復元する。
【０１０９】
分岐が予測されても誤予測されても、分岐ユニット１２０は、ステップ９８２で結果情報を結果バス１３２のうちの１つに書込むことによって現在の分岐動作を終了する。図２６は、スーパースカラプロセッサにおいてスタックを制御するための方法の第３の部分として組合された、リオーダバッファ１２６およびレジスタファイル１２４によって行なわれる手順の概略的なフローチャートである。分岐命令が終了すると結果バス１３２を介してリオーダバッファ１２６およびレジスタファイル１２４に戻される分岐情報は、ルックアヘッドリマップアレイ５０４を含む。浮動小数点機能ユニット１２２が実行を終了すると更新されるパラメータは、浮動小数点ＴＯＳ６７２および浮動小数点フル／エンプティアレイ６７６である。リオーダバッファ１２６およびレジスタファイル１２４は、スタックをプッシュまたはポップする浮動小数点動作またはスタック交換動作が実行を終了し、かつそのオペランドが回収されると、スタックに関連するレジスタおよび位置を更新する。ＲＯＰの識別は、識別ステップ９８４で認識される。
【０１１０】
論理ステップ９８６での決定に従ってＲＯＰがスタック交換命令であれば、ステップ９８８でリオーダバッファ１２６内の浮動小数点リマップアレイ６７４は、分岐ユニット１２０における分岐リマップアレイ９０４からルックアヘッドリマップアレイ５０４に置き換えられる。同様に、論理ステップ９９０に従って動作がスタックプッシュまたはポップであれば、浮動小数点ＴＯＳ６７２はそれぞれ減分または増分される。ステップ９９２で、スタックがプッシュされた後にＴＯＳ６７２によってアドレス指定される浮動小数点フル／エンプティアレイ６７６のエレメントは、プッシュが回収されると１に設定される。スタックをポップする前にＴＯＳ６７２によってアドレス指定される浮動小数点フル／エンプティアレイ６７６のエレメントは、スタックポップが回収されると０にクリアされる。
【０１１１】
以上の説明では、種々のブロック、回路、ポインタおよびアレイの位置を含む、スタックおよびプロセッサの多数の属性を特に特定している。スタックは、例示的に浮動小数点スタックとして実施されている。これらの属性は本発明の範囲を制限するものではなく、好ましい実施例を説明するためのものである。たとえば、種々のデータ構造の各々はプロセッサのいかなる位置に実現されてもよい。スタックは独立した汎用スタックであってもよく、または特定の機能ブロック内に配置されてもよい。スタックは、汎用スタックの呼出に応答して動作してもよく、または特定の動作が実行されているときにのみ機能してもよい。スタックは浮動小数点動作と関連していなくてもよい。スタックは、スーパースカラ以外のプロセッサに組込まれてもよく、または、多くのパイプラインを有しかつクロックサイクルの間に種々の多くのＲＯＰを処理する能力を有するスーパースカラプロセッサに組込まれてもよい。本発明の範囲は、前掲の特許請求の範囲およびそれと同等のものによってのみ決定される。
【図面の簡単な説明】
【図１】図２および図３の配置を示す図である。
【図２】データスタックが分布される種々の主なブロックを示すプロセッサのアーキテクチャレベルの概略ブロック図の上半分を示す図である。
【図３】データスタックが分布される種々の主なブロックを示すプロセッサのアーキテクチャレベルの概略ブロック図の下半分を示す図である。
【図４】図２および図３のプロセッサにおける浮動小数点機能ユニットの概略ブロック図である。
【図５】図２および図３のプロセッサにおいて浮動小数点スタックをサポートする機能ブロックを示すブロック図である。
【図６】スタックに関連する機能を果たす命令キャッシュのアーキテクチャレベルのブロック図である。
【図７】図８および図９の配置を示す図である。
【図８】スタックの機能ブロックを含む命令デコーダのアーキテクチャレベルのブロック図の左半分を示す図である。
【図９】スタックの機能ブロックを含む命令デコーダのアーキテクチャレベルのブロック図の右半分を示す図である。
【図１０】図２および図３のプロセッサ内のレジスタファイルのアーキテクチャレベルのブロック図である。
【図１１】図１０に示されるレジスタファイルのメモリフォーマットを示す図である。
【図１２】図２および図３のプロセッサ内のリオーダバッファのアーキテクチャレベルのブロック図である。
【図１３】図１２のリオーダバッファ内のメモリフォーマットを表わす図である。
【図１４】スタック機能ブロックを含む分岐ユニットのアーキテクチャレベルのブロック図である。
【図１５】ルックアヘッドスタック機能ブロックの相互接続を示す命令デコーダの機能ブロックを示す図である。
【図１６】ルックアヘッドスタック機能ブロックの相互接続を示す命令デコーダの機能ブロックの図である。
【図１７】ルックアヘッドスタック機能ブロックの相互接続を示す命令デコーダの機能ブロックの図である。
【図１８】ルックアヘッドスタック機能ブロックの相互接続を示す命令デコーダの機能ブロックの図である。
【図１９】（Ａ）、（Ｂ）および（Ｃ）は、図２および図３のプロセッサにおいてスタックを制御するためのレジスタ、アレイおよびポインタと、その１回目の内容を示す図である。
【図２０】（Ａ）、（Ｂ）および（Ｃ）は、図２および図３のプロセッサにおいてスタックを制御するためのレジスタ、アレイおよびポインタと、その２回目の内容を示す図である。
【図２１】（Ａ）、（Ｂ）および（Ｃ）は、図２および図３のプロセッサにおいてスタックを制御するためのレジスタ、アレイおよびポインタと、その３回目の内容を示す図である。
【図２２】（Ａ）、（Ｂ）および（Ｃ）は、図２および図３のプロセッサにおいてスタックを制御するためのレジスタ、アレイおよびポインタと、その４回目の内容を示す図である。
【図２３】プロセッサ１１０における複数段シーケンシャル実行パイプラインに関するタイミング図である。
【図２４】組合せてスタックを制御する種々の機能ブロックにおいて行なわれる手順のフロー図である。
【図２５】組合せてスタックを制御する種々の機能ブロックにおいて行なわれる手順のフロー図である。
【図２６】組合せてスタックを制御する種々の機能ブロックにおいて行なわれる手順のフロー図である。
【符号の説明】
５０２  ルックアヘッドスタックポインタ
５０４  リマップアレイ
６７２  スタックポインタ
６７４  リマップアレイ
７００  データエレメント
【図１】
0003714992.tif 000002
【図２】
0003714992.tif 000003
【図３】
0003714992.tif 000004
【図４】
0003714992.tif 000005
【図５】
0003714992.tif 000006
【図６】
0003714992.tif 000007
【図７】
0003714992.tif 000008
【図８】
0003714992.tif 000009
【図９】
0003714992.tif 000010
【図１０】
0003714992.tif 000011
【図１１】
0003714992.tif 000012
【図１２】
0003714992.tif 000013
【図１３】
0003714992.tif 000014
【図１４】
0003714992.tif 000015
【図１５】
0003714992.tif 000016
【図１６】
0003714992.tif 000017
【図１７】
0003714992.tif 000018
【図１８】
0003714992.tif 000019
【図１９】
0003714992.tif 000020
【図２０】
0003714992.tif 000021
【図２１】
0003714992.tif 000022
【図２２】
0003714992.tif 000023
【図２３】
0003714992.tif 000024
【図２４】
0003714992.tif 000025
【図２５】
0003714992.tif 000026
【図２６】
0003714992.tif 000027