(57)【要約】【課題】複数の未解決命令を追跡するための方法、完了テーブルおよびプロセッサを提供すること。【解決手段】完了テーブルは、各々が連続番号の未解決命令を追跡する複数のエントリを含むことができる。各エントリは、連続番号の未解決命令の第１の命令の命令アドレスと識別子を格納するように構成することができる。完了テーブルの各エントリで、例えばキャッシュ・ライン長の、連続番号の未解決命令を、そのエントリにおける連続番号の未解決命令の第１の命令の命令アドレスと識別子だけを格納することで追跡できることによって、完了テーブルは、そのサイズを拡大させることなく、より多くの未解決命令を追跡することができる。【選択図】図２
2005302025.tif 000002
【特許請求の範囲】
【請求項１】
複数のエントリを含む完了テーブルであって、
前記複数のエントリの各々が連続番号の未解決命令を追跡し、前記複数のエントリの各々が前記連続番号の未解決命令の第１の命令の命令アドレスと、前記連続番号の未解決命令の前記第１の命令の識別子とを格納するように構成されたテーブル。
【請求項２】
前記連続番号の未解決命令がキャッシュ・ライン長を含む、請求項１に記載の完了テーブル。
【請求項３】
前記命令アドレスが実効アドレスである、請求項１に記載の完了テーブル。
【請求項４】
次に完了する命令の命令アドレスと識別子が、それぞれ前記完了テーブルの選択されたエントリにおける前記連続番号の未解決命令の前記第１の命令の前記命令アドレスと前記連続番号の未解決命令の前記第１の命令の前記識別子を用いて計算される、請求項１に記載の完了テーブル。
【請求項５】
前記エントリが、ある実行ユニットで最も古いアクティブな命令と前記実行ユニットで終了した命令のどちらか一方に基づいて選択される、請求項４に記載の完了テーブル。
【請求項６】
完了テーブル内の複数の未解決命令を追跡する方法であって、
第１および第２の実行ユニットに命令を発行するステップと、
前記第１および前記第２の実行ユニットのどちらか一方で、終了した命令およびアクティブな命令のどちらか一方の識別子を選択するステップと、
前記選択された命令の前記識別子を使用して次に完了する命令の識別子を計算するステップと、
前記完了テーブルのエントリにある連続番号の未解決命令の第１の命令の命令アドレスおよび識別子を選択するステップと、
前記次に完了する命令の前記識別子、ならびに前記完了テーブルの前記エントリにある前記連続番号の未解決命令の前記第１の命令の前記選択された命令アドレスおよび識別子を使用して、前記次に完了する命令の命令アドレスを計算するステップと
を含む方法。
【請求項７】
前記完了テーブルの前記エントリにある前記連続番号の未解決命令の前記第１の命令の前記選択された識別子と、前記次に完了する命令の前記識別子とを使用してアドレス・オフセットを計算するステップをさらに含む、請求項６に記載の方法。
【請求項８】
前記選択された命令が、前記完了テーブルのテール位置より前のエントリにある連続番号の未解決命令の第１の命令より古い場合は、前記連続番号の未解決命令の前記第１の命令の前記選択された命令アドレスおよび識別子が、前記完了テーブルの前記テール位置にあるエントリから選択される、請求項７に記載の方法。
【請求項９】
前記選択された命令が、前記完了テーブルのテール位置より前にあるエントリにある連続番号の未解決命令の第１の命令より古くない場合は、前記連続番号の未解決命令の前記第１の命令の前記選択された命令アドレスおよび識別子が、前記完了テーブルの前記テール位置より前にある前記エントリから選択される、請求項７に記載の方法。
【請求項１０】
前記次に完了する命令の命令アドレスを、前記計算されたアドレス・オフセットと前記選択された命令アドレスとを使用して計算するステップをさらに含む、請求項７に記載の方法。
【請求項１１】
前記次に完了する命令の前記命令アドレスが、前記計算されたアドレス・オフセットを前記選択された命令アドレスに加算することによって計算される、請求項１０に記載の方法。
【請求項１２】
前記選択された命令が、前記完了テーブルの前記テール位置より前の前記エントリにある前記連続番号の未解決命令の前記第１の命令より古くない場合は、前記完了テーブルの前記テール位置にあるエントリを割り振り解除するステップをさらに含む、請求項９に記載の方法。
【請求項１３】
前記選択された命令が、前記第１および前記第２の実行ユニットのどちらか一方で最近に終了した命令である、請求項６に記載の方法。
【請求項１４】
前記次に完了する命令の前記識別子が、前記選択された命令の前記識別子に論理値の１を加算することによって計算される、請求項１３に記載の方法。
【請求項１５】
前記第１の実行ユニットが浮動小数点ユニットであり、前記第２の実行ユニットが固定小数点ユニットである、請求項６に記載の方法。
【請求項１６】
前記浮動小数点ユニットで実行された前記選択された命令と前記固定小数点ユニットで実行された命令とが同時に終了した場合は、前記選択された命令は前記浮動小数点ユニットで終了した命令であり、前記次に完了する命令の前記識別子が、前記選択された命令の前記識別子に論理値の１を加算することによって計算される、請求項１５に記載の方法。
【請求項１７】
前記浮動小数点ユニットに終了した命令が無く、前記選択された命令が前記浮動小数点ユニットで最も古いアクティブな命令よりも古い場合は、前記選択された命令は前記固定小数点ユニットで終了した命令であり、前記次に完了する命令の前記識別子が、前記選択された命令の前記識別子に論理値の１を加算することによって計算される、請求項１５に記載の方法。
【請求項１８】
前記浮動小数点ユニットに終了した命令が無く、前記選択された命令が前記浮動小数点ユニットで最も古いアクティブな命令よりも新しい場合は、前記選択された命令は前記浮動小数点ユニットで前記最も古いアクティブな命令であり、前記固定小数点ユニットで最も新しく終了した命令が保管され、前記次に完了する命令の前記識別子が前記選択された命令の前記識別子になる、請求項１５に記載の方法。
【請求項１９】
前記浮動小数点ユニットで前記最も古いアクティブな命令が終了し、前記浮動小数点ユニットに前記浮動小数点ユニットで前記終了した最も古いアクティブな命令より古い命令が存在しない場合で、かつ前記固定小数点ユニットに他のより新しい命令が存在しない場合は、前記選択された命令は前記保管された命令であり、前記次に完了する命令の前記識別子が前記選択された命令の前記識別子に論理値の１を加算することによって計算される、請求項１８に記載の方法。
【請求項２０】
前記浮動小数点ユニットで前記最も古いアクティブな命令が終了し、前記浮動小数点ユニットに前記浮動小数点ユニットで前記終了した最も古いアクティブな命令より古い命令が存在しない場合で、かつ前記固定小数点ユニットで最も新しく終了した命令が前記保管された命令より新しい場合は、前記選択された命令は前記固定小数点ユニットで最も新しく終了した命令であり、前記次に終了する命令の前記識別子が、前記選択された命令の前記識別子に論理値の１を加算することによって計算される、請求項１８に記載の方法。
【請求項２１】
命令をフェッチするように構成された命令フェッチ・ユニットと、
前記命令フェッチ・ユニットに結合された命令ディスパッチ・ユニットであって、前記命令フェッチ・ユニットが、前記フェッチした命令を前記命令ディスパッチ・ユニットに発行するようにさらに構成され、前記命令ディスパッチ・ユニットが、前記フェッチされた命令を格納するように構成された命令キューを含むユニットと、
前記命令ディスパッチ・ユニットに結合された第１および第２の実行ユニットであって、前記ディスパッチ・ユニットが、前記フェッチされた格納済みの命令を前記第１および前記第２の実行ユニットにディスパッチするように構成されたユニットと、
前記命令フェッチ・ユニットに結合された完了ユニットであって、前記命令フェッチ・ユニットが、前記フェッチされた各命令の命令アドレスおよび識別子を前記完了ユニットに発行するようにさらに構成され、前記完了ユニットが、前記フェッチされた命令がいつ完了したかを追跡するように構成されたユニットと
を含み、前記完了ユニットが、
複数のエントリを含む完了テーブルであって、前記複数のエントリの各々が連続番号の未解決命令を追跡し、前記複数のエントリの各々が前記連続番号の未解決命令の第１の命令の命令アドレスおよび前記連続番号の未解決命令の前記第１の命令の識別子を格納するように構成されたテーブル
を含むプロセッサ。
【請求項２２】
前記完了ユニットが、
前記第１および前記第２の実行ユニットのどちらか一方で、終了した命令およびアクティブな命令のどちらか一方の識別子を選択する論理回路と、
前記選択された命令の前記識別子を使用して次に完了する命令の識別子を計算する論理回路と、
前記完了テーブルのエントリにある連続番号の未解決命令の第１の命令の命令アドレスおよび識別子を選択する論理回路と、
前記次に完了する命令の前記識別子、ならびに前記完了テーブルの前記エントリにある前記連続番号の未解決命令の前記第１の命令の前記選択された命令アドレスおよび識別子を使用して、前記次に完了する命令の命令アドレスを計算する論理回路と
を含む、請求項２１に記載のプロセッサ。
【請求項２３】
前記完了ユニットが、前記完了テーブルの前記エントリにある前記連続番号の未解決命令の前記第１の命令の前記選択された識別子と、前記次に完了する命令の前記識別子とを使用してアドレス・オフセットを計算する論理回路をさらに含む、請求項２２に記載のプロセッサ。
【請求項２４】
前記選択された命令が、前記完了テーブルのテール位置より前のエントリにある連続番号の未解決命令の第１の命令よりも古い場合は、前記連続番号の未解決命令の前記第１の命令の前記選択された命令アドレスおよび識別子が、前記完了テーブルの前記テール位置にあるエントリから選択される、請求項２３に記載のプロセッサ。
【請求項２５】
前記選択された命令が、前記完了テーブルのテール位置より前にあるエントリにある連続番号の未解決命令の第１の命令よりも古くない場合は、前記連続番号の未解決命令の前記第１の命令の前記選択された命令アドレスおよび識別子が、前記完了テーブルの前記テール位置より前にある前記エントリから選択される、請求項２３に記載のプロセッサ。
【請求項２６】
前記完了ユニットが、前記計算されたアドレス・オフセットと前記選択された命令アドレスとを使用して前記次に完了する命令の命令アドレスを計算する論理回路をさらに含む、請求項２３に記載のプロセッサ。
【請求項２７】
前記次に完了する命令の前記命令アドレスが、前記計算されたアドレス・オフセットを前記選択された命令アドレスに加算することによって計算される、請求項２６に記載のプロセッサ。
【請求項２８】
前記選択された命令が、前記完了テーブルの前記テール位置より前の前記エントリにある前記連続番号の未解決命令の前記第１の命令より古くない場合は、前記完了ユニットが、前記完了テーブルの前記テール位置にあるエントリを割り振り解除する論理回路をさらに含む、請求項２５に記載のプロセッサ。
【請求項２９】
前記選択された命令が、前記第１および前記第２の実行ユニットのどちらか一方で最近に終了した命令である、請求項２２に記載のプロセッサ。
【請求項３０】
前記次に完了する命令の前記識別子が、前記選択された命令の前記識別子に論理値の１を加算することによって計算される、請求項２９に記載のプロセッサ。
【請求項３１】
前記第１の実行ユニットが浮動小数点ユニットであり、前記第２の実行ユニットが固定小数点ユニットである、請求項２２に記載のプロセッサ。
【請求項３２】
前記浮動小数点ユニットで実行された前記選択された命令と前記固定小数点ユニットで実行された命令が同時に終了した場合は、前記選択された命令が前記浮動小数点ユニットで終了した命令であり、前記次に完了する命令の前記識別子が前記選択された命令の前記識別子に論理値の１を加算することによって計算される、請求項３１に記載のプロセッサ。
【請求項３３】
前記浮動小数点ユニットに終了した命令が無く、前記選択された命令が前記浮動小数点ユニットで最も古いアクティブな命令よりも古い場合は、前記選択された命令は前記固定小数点ユニットで終了した命令であり、前記次に完了する命令の前記識別子が、前記選択された命令の前記識別子に論理値の１を加算することによって計算される、請求項３１に記載のプロセッサ。
【請求項３４】
前記浮動小数点ユニットに終了した命令が無く、前記選択された命令が前記浮動小数点ユニットで最も古いアクティブな命令よりも新しい場合は、前記選択された命令は前記浮動小数点ユニットで前記最も古いアクティブな命令であり、前記固定小数点ユニットで最も新しく終了した命令が保管され、前記次に完了する命令の前記識別子が前記選択された命令の前記識別子である、請求項３１に記載のプロセッサ。
【請求項３５】
前記浮動小数点ユニットで前記最も古いアクティブな命令が終了し、前記浮動小数点ユニットに、前記浮動小数点ユニットで前記終了した最も古いアクティブな命令より古い命令が存在せず、かつ前記固定小数点ユニットに、他のより新しい命令が存在しない場合は、前記選択された命令は前記保管された命令であり、前記次に完了する命令の前記識別子が前記選択された命令の前記識別子に論理値の１を加算することによって計算される、請求項３４に記載のプロセッサ。
【請求項３６】
前記浮動小数点ユニットで前記最も古いアクティブな命令が終了し、前記浮動小数点ユニットに、前記浮動小数点ユニットで前記終了した最も古いアクティブな命令より古い命令が存在しない場合で、かつ前記固定小数点ユニットで最も新しく終了した命令が前記保管された命令よりも新しい場合は、前記選択された命令は前記固定小数点ユニットで前記最も新しく終了した命令であり、前記次に完了する命令の前記識別子が前記選択された命令の前記識別子に論理値の１を加算することによって計算される、請求項３４に記載のプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はマイクロプロセッサの分野に関し、より詳細にはより多数の未解決命令を追跡するように構成された完了テーブルに関する。
【背景技術】
【０００２】
マイクロプロセッサ（「プロセッサ」）がクロック・サイクルあたり複数の命令を完了できる場合、そのマイクロプロセッサはスーパスカラとして分類される。スーパスカラ・プロセッサのアーキテクチャは、プロセッサ内で複数のパラレル処理ユニットを使用してクロック・サイクルあたりより多くの命令を完了できるようにする。この処理ユニットは通常、パラレルに動作する複数の実行ユニット、命令およびデータを実行ユニットに送るディスパッチ・ユニット、実行ユニットに命令をプリロードするためのリネーム・バッファ（リネーム・レジスタ）を含む。この処理ユニットはさらに、命令を追跡し退去させるための「完了テーブル」を内蔵した完了ユニットを含むことができる。例えば、完了ユニットは、いつ命令が「完了」したのかを追跡することができる。命令は、それが実行済みであり、どのような例外によってもその命令が再発行されることがない段階になったときに「完了した」と言える。
【０００３】
代表的なスーパスカラ・プロセッサでは、複数の命令が命令キャッシュから取り出され、一般に命令キューと呼ばれているキューに入れられる。命令キューに入れられた後で、各命令は、ディスパッチ・ユニットによって様々な実行ユニットに発行される。受け取った命令の実行に際し、実行ユニットは、受け取った命令の実行を指示する指示を完了ユニットに送ることができる。この情報は、完了テーブルに格納できる。次いで完了ユニットは、その命令を完了または退去させ、完了信号を残りの実行ユニットに送って、終了したデータを設計済みのレジスタにライトバックできるようにする。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
完了テーブルのサイズは、追跡すべき未解決命令の数に応じて変わる。例えば、追跡すべき未解決命令の数が増大するほど、完了テーブルのサイズが拡大する。しかし、完了テーブルのサイズが拡大するほど、消費電力が増大し、使用されるシリコン・エリアが拡大する。完了テーブルを縮小すると、シリコン・エリアや電力は減少するが、追跡する未解決命令の数が減って性能が低下する恐れがある。
【０００５】
したがって当技術分野では、そのサイズを拡大させることなく、より多くの未解決命令を追跡するための完了テーブルが必要とされている。
【課題を解決するための手段】
【０００６】
上で概説した問題は、完了テーブルの各エントリに、そのエントリの連続番号の未解決命令の第１の実効アドレスおよび識別子（「ＩＴＡＧ」）だけを格納することで、例えばキャッシュ・ライン長の、連続番号の未解決命令を追跡できることによって、いくつかの実施形態において少なくともその一部を解決することができる。したがって完了テーブルは、そのサイズを拡大させることなく、より多くの未解決命令を追跡することができる。
【０００７】
本発明の一実施形態では、完了テーブルでより多くの未解決命令を追跡するための方法は、第１および第２の実行ユニットに命令を発行するステップを含むことができる。この方法はさらに、第１および第２の実行ユニットのどちらかで、終了した命令またはアクティブな命令のどちらか一方の識別子を選択するステップを含むことができる。この方法はさらに、その選択した命令の識別子を使用して、次に完了する命令の識別子を計算するステップを含むことができる。この方法はさらに、完了テーブルのエントリにある連続番号の未解決命令のうちの第１の命令の命令アドレスと識別子を選択するステップを含むことができる。この方法はさらに、次に完了する命令の識別子と、完了テーブルのエントリにある連続番号の未解決命令のうちの第１の命令の選択された命令アドレスおよび識別子とを使用して、次に完了する命令の命令アドレスを計算するステップを含むことができる。
【０００８】
本発明の他の実施形態では、完了テーブルは、各々が連続番号の未解決命令を追跡する複数のエントリを含むことができる。さらに、この複数の各エントリは、連続番号の未解決命令の第１の命令の命令アドレスと識別子を格納するように構成することができる。
【０００９】
前述は、以下の本発明の詳細な説明をよりよく理解できるように、本発明の１つまたは複数の実施形態の機能や技術的な利点を、やや一般的に概説したものである。本発明の追加の機能や利点については以下で説明するが、これは本発明の特許請求の範囲の主題を形成し得るものである。
【００１０】
以下の詳細な説明を添付の図面と併せて読むことによって、本発明のよりよい理解を得ることができるはずである。
【発明を実施するための最良の形態】
【００１１】
本発明は、完了テーブル中のより多くの未解決命令を追跡するための方法、完了テーブル、およびプロセッサを含む。本発明の一実施形態では、完了テーブルは、各々が連続番号の未解決命令を追跡する複数のエントリを含むことができる。各エントリは、連続番号の未解決命令の第１の命令の命令アドレスと識別子を格納するように構成することができる。完了テーブルの各エントリに、そのエントリの連続番号の未解決命令の第１の命令の命令アドレスと識別子だけを格納することで、例えばキャッシュ・ライン長の、連続番号の未解決命令を追跡できることによって、この完了テーブルは、そのサイズを拡大させることなく、より多くの未解決命令を追跡することができる。
【００１２】
以下の説明では、本発明の完全な理解を与えるために、多くの特定の詳細について記載する。しかし、本発明がこのような特定の詳細なしで実施できることは、当業者には明らかであろう。他の例として、不必要な細部によって本発明を不明瞭にしないように、周知の回路はブロック図の形で示している。ほとんどの場合、タイミングの問題などの詳細を考慮することは、本発明の完全な理解を得るためには不必要であり、またそれらは当業者の技術の範囲内にあるので省略した。
【００１３】
図１  コンピュータ・システム
図１は、本発明を実施するためのハードウェア環境を表すコンピュータ・システム１００の代表的なハードウェア構成を示したものである。コンピュータ・システム１００は、システム・バス１１２によって様々な他のコンポーネントに結合されたプロセッサ１１０を含むことができる。プロセッサ１１０のより詳細な説明は、図２に絡めて後で説明する。オペレーティング・システム１４０は、プロセッサ１１０上で実行させることができ、図１の様々なコンポーネントの機能を制御し調整する。本発明の原理に基づくアプリケーション１５０は、オペレーティング・システム１４０と共に実行させることができ、オペレーティング・システム１４０に呼出し（call）を提供する。この場合呼出しは、アプリケーション１５０によって実施される様々な機能またはサービスを実装する。ＲＯＭ（読出し専用メモリ）１１６は、システム・バス１１２に結合することができ、コンピュータ・システム１００の特定の基本機能を制御する「ＢＩＯＳ」（基本入出力システム）を含むことができる。ＲＡＭ（ランダム・アクセス・メモリ）１１４およびディスク・アダプタ１１８も、システム・バス１１２に結合することができる。オペレーティング・システム１４０およびアプリケーション１５０を含むソフトウェア・コンポーネントは、例えばコンピュータ・システム１００の実行用のメイン・メモリであるＲＡＭ１１４にロードできることに留意されたい。ディスク・アダプタ１１８は、例えばディスク・ドライブなどのディスク・ユニット１２０と通信する「ＩＤＥ」（integrateddrive electronics）アダプタとすることができる。
【００１４】
図１を参照すると、コンピュータ・システム１００は、バス１１２に結合された通信アダプタ１３４をさらに含むことができる。通信アダプタ１３４はバス１１２を外部ネットワークと相互接続して、コンピュータ・システム１００が他の同様のシステムと通信できるようにする。入／出力装置もまた、ユーザ・インタフェース・アダプタ１２２や表示アダプタ１３６を介してシステム・バス１１２に接続できる。キーボード１２４、マウス１２６、およびスピーカ１３０はすべて、ユーザ・インタフェース・アダプタ１２２を介してバス１１２に相互接続される。イベント・データはこれらの装置のいずれかを通してコンピュータ・システム１００に入力することができる。表示モニタ１３８は、ディスプレイ・アダプタ１３６によってシステム・バス１１２に接続することができる。このようにして、ユーザはキーボード１２４やマウス１２６を介してコンピュータ・システム１００に入力し、表示器１３８またはスピーカ１３０を介してコンピュータ・システム１００から出力を受け取ることができる。
【００１５】
図２  プロセッサ
図２はプロセッサ１１０（図１）の一実施形態を示す。プロセッサ１１０は命令フェッチ・ユニット２０１を含むことができる。命令フェッチ・ユニット２０１は、命令フェッチ・アドレス・レジスタ（ＩＦＡＲ）２０２および命令キャッシュ２０３を含むことができる。命令フェッチ・ユニット２０１は、例えばマルチスレッド・システムのプログラム・カウンタから命令をフェッチし、フェッチした命令のアドレスをＩＦＡＲ２０２にロードするように構成することができる。ＩＦＡＲ２０２にロードされるアドレスは、プログラムまたはコンパイラからのアドレスを表す実効アドレスであってもよい。受け取った実効アドレスに対応する命令は命令キャッシュ２０３に格納することができる。
【００１６】
命令フェッチ・ユニット２０１はさらに、フェッチした命令の実効アドレス、フェッチした命令に関連する識別子（この明細書では「ＩＴＡＧ」と呼ぶ）、およびフェッチした命令が有効かどうかに関する指示を、命令フェッチ・ユニット２０１に結合された完了ユニット２０４に発行するように構成することができる。ＩＴＡＧにより、完了テーブル中の、例えば８エントリのうちの特定のエントリにおける、例えばキャッシュ・ラインあたり３２命令のキャッシュ・ラインで、例えば６４ビット・アドレスなど、長いアドレス長の特定の命令を識別するために使用される、例えば８ビットなど、より少数のビットを参照することができる（このことについては以下でさらに論ずる）。
【００１７】
完了ユニット２０４は、フェッチした命令がいつ「完了」したかを追跡するように構成することができる。本明細書で使用する「完了」という用語は、ある命令が実行ユニットによって実行済みであり、どのような例外によってもその命令を再発行することがない段階にあることを意味する。完了ユニット２０４は、本明細書で「完了テーブル」と呼ぶテーブル２０５を含むことによって、いつ命令が完了したかを追跡することができる。完了テーブル２０５は複数のエントリを含むことができる。完了テーブル２０５の各エントリは、連続番号の未解決命令を追跡するように構成することができる。一実施形態では、各エントリは、例えば３２命令のキャッシュ・ライン長に相当する連続番号の未解決の命令を追跡するように構成することができる。
【００１８】
図２を参照すると、完了テーブル２０５の各エントリは、例えば３２連続命令からなる連続番号の未解決命令の第１の命令の実効アドレスを格納するように構成することができる。この実効アドレスのことを、本明細書では「ベース命令実効アドレス（ベースＩＥＡ）」と呼ぶ。完了テーブル２０５の各エントリはさらに、本明細書で「ベースＩＴＡＧ」と呼ぶ、第１の命令のＩＴＡＧを格納するように構成することができる。完了テーブル２０５の各エントリはさらに、完了テーブル２０５中で「Ｖ」によって示される、第１の命令が有効であるかどうかの指示を格納するように構成することができる。完了テーブルの各エントリにおける、例えばキャッシュ・ライン長の、連続番号の未解決命令を、そのエントリにおける連続番号の未解決命令の第１の命令の実効アドレスと識別子（「ＩＴＡＧ」）だけを格納することで追跡できることによって、完了テーブルは、そのサイズを拡大させることなく、より多くの未解決命令を追跡することができる。
【００１９】
図２を参照すると、プロセッサ１１０はさらに命令フェッチ・ユニット２０１に結合された命令ディスパッチ・ユニット２０６を含むことができる。命令ディスパッチ・ユニット２０６は、命令キャッシュ２０３から発行された命令を受け取るように構成することができる。これらの命令は、本明細書で「命令キュー」と呼ぶ、命令ディスパッチ・ユニット２０６のキュー２０７に格納することができる。命令キュー２０７は合計Ｎ個の命令を格納するために「Ｎ」個のエントリを含むことができる。命令ディスパッチ・ユニット２０６は、命令キュー２０７に格納された命令を任意のクロック・サイクルの間に、例えば浮動小数点ユニット、固定小数点ユニット、ロード／ストア・ユニット、分岐実行ユニットなど適切な実行ユニットにディスパッチする。命令をディスパッチする前に、各命令を適切なラッチ２０８〜２１０に格納して、適切な実行ユニット２１１〜２１３にディスパッチすることができる。例えば、固定小数点命令をラッチ２０８に格納して、後で、例えば「ＦＸＵ０」２１１などの固定小数点実行ユニット「ＦＸＵ」にディスパッチすることができる。あるいは、固定小数点命令をラッチ２０９に格納して、後で、例えば「ＦＸＵ１」２１２などの固定小数点実行ユニット「ＦＸＵ」にディスパッチすることもできる。他の例として、浮動小数点命令をラッチ２１０に格納して、後で浮動小数点実行ユニット「ＦＰＵ」２１３にディスパッチすることができる。プロセッサ１１０が、図示した以外の（数および種類を追加する）追加の実行ユニットを含むことができること、したがって図２が例示的なものであることに留意されたい。
【００２０】
命令の実行が完了すると直ぐに、実行ユニット２１１〜２１３は完了ユニット２０４に命令が「終了」したことを示す指示を送る。本明細書で使用される「終了（finished）」という用語は、適切な実行ユニットによって命令の実行が終了したことを意味する。実行ユニット２１１〜２１３は、終了した命令の識別子（「ＩＴＡＧ」）を、それぞれラッチ２１４〜２１６に入れることができる。
【００２１】
プロセッサ１１０の残りのユニットについては、図３乃至図５に絡めて後で説明することにする。図３は、本発明の一実施形態による、次に完了する命令の実効アドレスおよび識別子を計算する方法の流れ図である。図５は、本発明の一実施形態による、アウトオブオーダ・プロセッサの次に完了する命令の識別子を計算するために使用される命令の識別子を選択する方法の流れ図である。
【００２２】
一実施形態では、プロセッサ１１０はインオーダ・プロセッサとすることができる。インオーダ・プロセッサとは、例えば固定小数点命令など同じ種類の命令が同一のサイクルにディスパッチされた場合に、それを同時に実行するプロセッサである。代替実施形態では、プロセッサ１１０はアウトオブオーダ・プロセッサとすることができる。アウトオブオーダ・プロセッサとは、例えば固定小数点命令と浮動小数点命令など異なる種類の命令を、それらがディスパッチされたのとは異なる順序で実行するプロセッサである。例えば、浮動小数点命令は一般に固定小数点命令より実行に長い時間がかかる。したがって、これら２種類の命令が同一のサイクルにディスパッチされた場合は、固定小数点命令が浮動小数点命令より先に終了する可能性がある。本明細書で使用する「終了」という用語は、適切な実行ユニットによって命令の実行が終了したことを意味する。固定小数点ユニットと浮動小数点ユニットの間の（実行される命令の流れを意味する）パイプを順序通り維持するためには、（命令ディスパッチ・ユニット２０６によってディスパッチされる次の命令グループを意味する）次のディスパッチ・グループが、ディスパッチ時にストールされ、浮動小数点ユニットが実行を終了するのを待たなければならないことがある。しかし、性能を向上するためには、浮動小数点命令がディスパッチされた後でもなお、各サイクルごとに固定小数点命令の１ストリームをディスパッチすることが望ましい。このことが行われると、古い（すなわち、命令ディスパッチ・ユニット２０６によって、より早い時間にディスパッチされた）浮動小数点命令が終了する時刻までに、その浮動小数点命令より新しい（すなわち、命令ディスパッチ・ユニット２０６によって、より最近にディスパッチされた）多数の固定小数点命令が終了することになる。したがって、浮動小数点命令は固定小数点命令に対して順不同で終了することができる。
【００２３】
上記のように、完了ユニット２０４は完了テーブル２０５を使用して、フェッチされた命令がいつ完了したかを追跡することができる。一実施形態では、完了ユニット２０４は、本明細書で「次に完了する命令（next to complete instruction）」と呼ぶ命令を追跡することによって、フェッチされた命令がいつ完了したかを追跡することができる。次に完了する命令とは、完了ユニット２０４によって完了される次の命令を意味する。
【００２４】
背景技術の項目で述べたように、完了テーブルのサイズは追跡すべき未解決命令の数に応じて決まる。例えば、追跡すべき未解決命令の数が増加するにつれて、完了テーブルのサイズが拡大する。しかし、完了テーブルのサイズが拡大するにつれて、電力の消費が増加し、使用されるシリコン・エリアも拡大する。完了テーブルを縮小すると、シリコン・エリアおよび電力は削減されるが、少数の未解決命令しか追跡できないため、性能が低下する恐れがある。したがって当技術分野では、サイズを拡大させることなく、より多くの未解決命令を追跡するための完了テーブルが必要とされている。一実施形態では、完了テーブルは、連続番号の未解決命令の第１の命令の実効アドレスと識別子（「ＩＴＡＧ」）だけを格納することで、完了テーブルの各エントリにおける連続番号の未解決命令が追跡できることによって、より多くの未解決命令を追跡できる可能性がある。完了ユニット２０４は、次に完了する命令の状態を追跡することによって、完了テーブル２０５の各エントリの連続番号の未解決命令における各命令の完了を追跡することができる。次に完了する命令の状態を追跡するために、完了ユニット２０６は、次に完了する命令の実効アドレスと識別子を決定しなければならない。完了ユニット２０６は、次に完了する命令の実効アドレスと識別子を、インオーダ・プロセッサについては図３で説明する方法を使用して、アウトオブオーダ・プロセッサについては図３および図４で説明する方法を使用して決定することができる。
【００２５】
図３及び図４  次に完了する命令の実効アドレスと識別子を計算する方法
図３及び図４は、本発明の一実施形態による、次に完了する命令の実効アドレスと識別子を計算するための流れ図である。
【００２６】
図３及び図４を図２と併せて参照すると、ステップ３０１で、命令フェッチ・ユニット２０１が命令をフェッチする。ステップ３０２で、命令フェッチ・ユニット２０１は、フェッチした命令の実効アドレス（「ＩＥＡ」）と識別子（「ＩＴＡＧ」）、ならびにフェッチした命令の有効性に関する指示を完了ユニット２０４に送る。
【００２７】
ステップ３０３で、完了ユニット２０４は、受け取ったＩＥＡが前にフェッチしたＩＥＡに対して連続かどうかを判断する。すなわち、完了ユニット２０４は、フェッチした命令の実効アドレスが前にフェッチした命令の次の実効アドレスかどうかを判断する。
【００２８】
フェッチした命令の実効アドレスが前にフェッチした命令の次の実効アドレスである場合は、ステップ３０４で、完了ユニット２０４は、完了テーブル２０５の「ヘッド−１」位置が満杯かどうかを判断する。「ヘッド−１」位置とは、連続番号の未解決命令の第１の命令の実効アドレスと識別子、ならびにその命令の有効性に関する指示が最近に埋められた完了テーブル２０５中のエントリのことである。「ヘッド」位置は次のエントリ、すなわち次に埋められるエントリを意味する。
【００２９】
完了テーブル２０５の「ヘッド−１」の位置が満杯でない場合は、命令フェッチ・ユニット２０１は、ステップ３０１で他の命令をフェッチする。命令フェッチ・ユニット２０１が、方法３００の任意のステップの途中で、またはそのステップの完了の後で次の命令をフェッチできること、ならびに完了テーブル２０５の「ヘッド−１」の位置が満杯でない場合は他の命令をフェッチすることが示されていることに留意されたい。
【００３０】
一方、完了テーブル２０５の「ヘッド−１」の位置が満杯の場合、またはフェッチした命令の実効アドレスが前にフェッチした命令の次の実効アドレスでない場合は、ステップ３０５で、完了ユニット２０４は完了テーブル２０５が満杯かどうかを判断する。
【００３１】
完了テーブル２０５が満杯の場合は、命令フェッチ・ユニット２０１は、ステップ３０６で、命令を再フェッチする（ステップ３０１の命令フェッチを意味する）。ステップ３０６で命令を再フェッチすると直ぐに、ステップ３０２で、命令フェッチ・ユニット２０１は、フェッチされた命令の実効アドレス（「ＩＥＡ」）と識別子（「ＩＴＡＧ」）、ならびにそのフェッチされた命令の有効性に関する指示を完了ユニット２０４に送る。
【００３２】
完了テーブル２０５が満杯でない場合は、ステップ３０７で、完了ユニット２０４は、受け取った実効アドレス、識別子、および完了テーブル２０５の「ヘッド」位置に対応するエントリの有効性に関する指示を書き込む。フェッチした命令の受け取った実効アドレスが、前にフェッチした命令の次の実効アドレスではないので、フェッチした命令は、一連の未解決命令の次のグループ、例えば次のキャッシュ・ラインの第１の命令である可能性がある。
【００３３】
ステップ３０８で完了ユニット２０４は、「ヘッド」ポインタを次の空き位置である「ヘッド＋１」を指すように進める。一実施形態では、完了ユニット２０４は、ポインタを使用して完了テーブル２０５の次の空きエントリを指すように構成することができる。
【００３４】
ステップ３０１を参照すると、命令フェッチ・ユニット２０１が命令をフェッチした後で、ステップ３０９で、命令フェッチ・ユニット２０１はフェッチした命令を命令キュー２０７に書き込む。ステップ３１０で、命令ディスパッチ・ユニット２０６は、命令キュー２０７に格納された各命令を１つまたは複数の実行ユニット２１１〜２１３に発行する。ステップ３１１で、実行ユニット２１１、２１２、または２１３は、命令の実行と同時に指示を完了ユニット２０４に送る。
【００３５】
ステップ３１２で、完了ユニット２０４は、実行ユニット２１１、２１２、もしくは２１３が現在実行中の命令、または実行ユニット２１１、２１２、もしくは２１３が終了した命令のどちらかの識別子（「ＩＴＡＧ」）を選択し、選択したＩＴＡＧを使用して、以下で説明するように、次に完了する命令の識別子（「ＩＴＡＧ」）を計算することができる。
【００３６】
インオーダ・プロセッサの実施形態では、完了ユニット２０４は、最近に終了した命令、すなわち終了した最後の命令の識別子（「ＩＴＡＧ」）を受け取る。受け取った最後に終了した命令の識別子は、以下で論ずるように、完了ユニット２０４の機構２１７が、次に完了する命令の識別子を計算するために選択した識別子に相当する。一実施形態では、ラッチ２１４、２１５、または２１６に格納された、終了した命令の識別子（「ＩＴＡＧ」）を機構２１７に送り、次いでそれを完了ユニット２０４のラッチ２１８に格納することができる。プロセッサ１１０がインオーダ・プロセッサである場合の実施形態では、完了ユニット２０４は、最も古いアクティブな浮動小数点命令を格納するように構成されたラッチ２１９を含まなくてもよい。ラッチ２１９は、図５に絡めて後でさらに論ずるように、アウトオブオーダ・プロセッサで使用することができる。プロセッサ１１０がアウトオブオーダ・プロセッサである場合の実施形態では、機構２１７は、以下で論ずるように、ＩＴＡＧをラッチ２１４、２１５、２１６、またはラッチ２１９から選択して、次に完了する命令のＩＴＡＧを計算するように構成することができる。機構２１７がラッチ２１９（後で説明するように、「最も古いアクティブな浮動小数点命令」）のＩＴＡＧを選択した場合は、選択されたＩＴＡＧは、以下で説明するようにラッチ２１８には格納されず、ラッチ２２１に格納される。
【００３７】
アウトオブオーダ・プロセッサの実施形態では、完了ユニット２０４の機構２１７は、後で図５に絡めて説明するように、実行ユニット２１１、２１２、もしくは２１３が現在実行中の命令、または実行ユニット２１１、２１２、もしくは２１３が終了した命令のどちらかの識別子（「ＩＴＡＧ」）を選択する。図５が、上述のように固定小数点命令と浮動小数点命令を順不同で実行できるアウトオブオーダ・プロセッサのためのステップ３１２を説明したものであることに留意されたい。さらに、図５が例示的なものであり、順不同で実行できる任意の２つの異なる種類の命令に適用できることにも留意されたい。
【００３８】
図５について説明する前に、固定小数点命令と浮動小数点命令が実行される順序に関する４つの可能なシナリオについて論じておくのが適切だと思われる。
【００３９】
第１の可能なシナリオは、固定小数点命令と浮動小数点命令が同時に終了した場合である。例えば、命令ディスパッチ・ユニット２０６によって、命令ＦＸ０、ＦＸ１、ＦＸ２、ＦＰ１、およびＦＸ４が同一のサイクルにディスパッチされ、同じ時刻に終了した場合を考える。このシナリオでは、浮動小数点命令ＦＰ１の識別子（「ＩＴＡＧ」）が、次に完了する命令の識別子（「ＩＴＡＧ」）を計算するために選択される。浮動小数点命令ＦＰ１の識別子（「ＩＴＡＧ」）が選択されるのは、一つには、一般に浮動小数点命令は固定小数点命令よりも実行時間が長くかかるからである。したがって、次に完了する命令は、次の浮動小数点命令である可能性が高い。
【００４０】
第２の可能なシナリオは、終了した浮動小数点命令が無く（すなわち、例えば浮動小数点ユニット２１３などの浮動小数点ユニットによる浮動小数点命令の実行が終了しておらず）、固定小数点命令が最近に終了した場合である。最近に終了した固定小数点命令は、次いで（最も早くディスパッチされた浮動小数点命令であり、浮動小数点ユニットによって現在実行中で、まだ終了していない命令を意味する）最も古いアクティブな浮動小数点命令と比較することができる。最も新しく終了した固定小数点命令（最近に終了した固定小数点命令）が、最も古いアクティブな浮動小数点命令よりも古い場合は、最も新しく終了した固定小数点命令のＩＴＡＧを選択して、次に完了する命令のＩＴＡＧを計算する。例えば、命令ディスパッチ・ユニット２０６によって、命令ＦＸ０、ＦＸ１、およびＦＰ１がこの指示の順に同一のサイクルにディスパッチされたとする。固定小数点命令ＦＸ０が終了し、次いで固定小数点命令ＦＸ１が終了する。浮動小数点命令ＦＰ１は、まだアクティブである。このシナリオでは、次に完了する命令の識別子（「ＩＴＡＧ」）を計算するために固定小数点命令ＦＸ１の識別子（「ＩＴＡＧ」）が選択される。固定小数点命令ＦＸ１の識別子（「ＩＴＡＧ」）が選択されるのは、一つには、その命令が終了した最も古い命令だからである。上記のシナリオでは、次に完了する命令はＦＰ１になる可能性がある。ＦＰ１のＩＴＡＧは、以下で論ずるように、次に完了する命令のＩＴＡＧを使用して決定することができる。
【００４１】
第３の可能なシナリオは、終了した浮動小数点命令が無く（すなわち、例えば浮動小数点ユニット２１３などの浮動小数点ユニットによる浮動小数点命令の実行が終了しておらず）、固定小数点命令が最近に終了した場合である。最近に終了した固定小数点命令は、次いで（最も早くディスパッチされた浮動小数点命令であり、浮動小数点ユニットによって現在実行中であり、まだ終了していない命令を意味する）最も古いアクティブな浮動小数点命令と比較することができる。最も新しく終了した固定小数点命令（最近に終了した固定小数点命令）が、最も古いアクティブな浮動小数点命令よりも新しい場合は、次に完了する命令のＩＴＡＧを計算するために、最も古いアクティブな浮動小数点命令のＩＴＡＧを選択する。例えば、命令ディスパッチ・ユニット２０６によって、命令ＦＸ０、ＦＰ１、およびＦＸ１がこの指示の順に同一のサイクルにディスパッチされたとする。固定小数点命令ＦＸ０が終了し、次いで固定小数点命令ＦＸ１が終了する。このシナリオでは、次に完了する命令の識別子（「ＩＴＡＧ」）を計算するために、浮動小数点命令ＦＰ１の識別子（「ＩＴＡＧ」）が選択される。このシナリオでは、浮動小数点命令ＦＰ１のＩＴＡＧが、次に完了する命令のＩＴＡＧになる。浮動小数点命令ＦＰ１の識別子（「ＩＴＡＧ」）が選択されるのは、一つには浮動小数点命令は一般に固定小数点命令より実行により長い時間がかかり、またその命令がアクティブな最も古い命令だからである。このシナリオでは、次に完了する命令のＩＴＡＧとしてＦＰ１のＩＴＡＧが選択される。さらに、（最近に終了した固定小数点命令を意味する）最も新しく終了した固定小数点命令のＩＴＡＧを保管しておくことができる。保管された固定小数点命令は、次のシナリオで使用できる。
【００４２】
第４の可能なシナリオは、最も古いアクティブな浮動小数点命令が終了したときである。（あるサイクルにディスパッチされた浮動小数点命令のストリームを意味する）パイプに古い浮動小数点命令がない場合には、新たに終了した固定小数点命令がないものと想定して、次に完了する命令のＩＴＡＧを計算するために、保管された最も新しい固定小数点命令のＩＴＡＧを選択する。保管された固定小数点命令より新しい、終了した固定小数点命令がある場合には、次に完了する命令のＩＴＡＧを計算するために、その新しい固定小数点命令のＩＴＡＧを選択する。例えば、第３のシナリオの例を参照すると、浮動小数点命令ＦＰ１が終了したとき、より新しい固定小数点命令が終了していない場合には、次に完了する命令のＩＴＡＧを計算するために保管された固定小数点命令（この例ではＦＸ１）のＩＴＡＧが使用される。保管された浮動小数点命令、あるいは場合によるとより新しい浮動小数点命令の識別子（「ＩＴＡＧ」）が選択されるのは、一つには、その命令が終了した最も古い命令になるからである。次いで、保管された浮動小数点命令、あるいは場合によるとより新しい浮動小数点命令のＩＴＡＧを使用して、次に完了する命令のＩＴＡＧを決定することができる。
【００４３】
プロセッサ１１０の機構２１７は、図５に関して以下で説明する方法を使用して適切なＩＴＡＧを選択することによって、上記の４つのシナリオにおける次に完了する命令のＩＴＡＧを計算するように構成することができる。
【００４４】
図５を図２と併せて参照して、ステップ４０１で、完了ユニット２０４は、固定小数点ユニット２１１、２１２が固定小数点命令の実行を終了したかどうかを判断する。
【００４５】
固定小数点ユニット２１１、２１２が固定小数点命令の実行を終了している場合は、ステップ４０２で、完了ユニット２０４は、最も古いアクティブな浮動小数点命令があるかどうかを判断する。最も古いアクティブな浮動小数点命令がない場合は、ステップ４０３で、完了ユニット２０４は終了した固定小数点命令の識別子（ＩＴＡＧ）を選択する。
【００４６】
一方、（ラッチ２１９に格納された）最も古いアクティブな浮動少数点命令がある場合は、ステップ４０４で、完了ユニット２０４は、終了した固定小数点命令がその最も古いアクティブな浮動小数点命令より新しいかどうかを判断する。
【００４７】
終了している固定小数点命令が、最も古いアクティブな浮動小数点命令より新しくない場合は、ステップ４０３で、完了ユニット２０４は終了した固定小数点命令の識別子（「ＩＴＡＧ」）を選択して次に完了する命令のＩＴＡＧを計算する。次いで、完了ユニット２０４は、ステップ４０１で固定小数点ユニット２１１、２１２が固定小数点命令の実行を終了したかどうかを判断する。
【００４８】
また一方、終了した固定小数点命令が最も古いアクティブな浮動小数点命令より新しい場合は、ステップ４０５で、完了ユニット２０４は次に完了する命令のＩＴＡＧを計算するためのＩＴＡＧとして、最も古いアクティブな浮動小数点命令を選択する。上記のように、このシナリオでは、最も古いアクティブな浮動小数点命令のＩＴＡＧが次に完了する命令のＩＴＡＧになる。次に、完了ユニット２０４は、ステップ４０１で、固定小数点ユニット２１１、２１２が固定小数点命令の実行を終了したかどうかを判断する。
【００４９】
ステップ４０１に戻って、固定小数点ユニット２１１、２１２が固定小数点命令の実行を終了していない場合は、ステップ４０６で、完了ユニット２０４は浮動小数点ユニット２１３が命令の実行を終了したかどうかを判断する。浮動小数点ユニット２１３が、浮動小数点命令の実行を終了していない場合は、ステップ４０１で、完了ユニット２０４は固定小数点ユニット２１１、２１２が固定小数点命令の実行を終了したかどうかを判断する。
【００５０】
一方、浮動小数点ユニット２１３が浮動小数点命令の実行を終了している場合は、ステップ４０７で、完了ユニット２０４は（最も新しく終了した固定小数点命令を意味する）保管された固定小数点命令があるかどうかを判断する。
【００５１】
保管された固定小数点命令が無い場合は、ステップ４０８で、完了ユニット２０４は次に完了する命令のＩＴＡＧを決定するためのＩＴＡＧとして、終了した浮動小数点命令のＩＴＡＧを選択する。次に、ステップ４０１で、完了ユニット２０４は固定小数点ユニット２１１、２１２が固定小数点命令の実行を終了したかどうかを判断する。
【００５２】
一方、保管された固定小数命令がある場合は、ステップ４０９で、完了ユニット２０４は、保管された固定小数点ユニットより新しい、終了した固定小数点命令があるかどうかを判断する。保管された固定小数点命令より新しい、終了した固定小数点命令がない場合は、ステップ４１０で、完了ユニット２０４は、次に完了する命令のＩＴＡＧを決定するためのＩＴＡＧとして保管された固定小数点命令のＩＴＡＧを選択する。次に、完了ユニット２０４は、ステップ４０１で、固定小数点ユニット２１１，２１２が固定小数点命令の実行を終了したかどうかを判断する。
【００５３】
また一方、保管された固定小数点命令より新しい、終了した固定小数点命令がある場合には、ステップ４１１で、完了ユニット２０４は、より新しく終了した固定小数点命令のＩＴＡＧを次に完了する命令のＩＴＡＧを決定するためのＩＴＡＧとして選択する。次に、完了ユニット２０４は、ステップ４０１で、固定小数点ユニット２１１，２１２が固定小数点命令の実行を終了したかどうかを判断する。
【００５４】
図４に戻り、ステップ３１３で、完了ユニット２０４は、選択されたＩＴＡＧが最も古いアクティブな浮動小数点命令であるかどうかを判断する。一実施形態では、機構２１７が、選択されたＩＴＡＧが最も古いアクティブな浮動小数点命令のＩＴＡＧかどうかを判断する論理回路を含む。
【００５５】
選択されたＩＴＡＧが最も古い浮動小数点命令のＩＴＡＧでない場合には、完了ユニット２０４は、ステップ３１４で、次に完了する命令の識別子を、選択された識別子の識別子（「ＩＴＡＧ」）に論理値の「１」を加えることによって計算することができる。一実施形態では、完了ユニット２０４は、選択された識別子（「ＩＴＡＧ」）を論理値の１だけ増分しその結果をラッチ２２１に格納する増分器２２０を用いて、次に完了する命令の識別子を計算することができる。ラッチ２２１は、次に完了する命令のＩＴＡＧを格納するように構成することができる。
【００５６】
一方、選択されたＩＴＡＧが最も古いアクティブな浮動小数点命令のＩＴＡＧである場合は、ステップ３１５で、完了ユニット２０４は、その選択されたＩＴＡＧ（最も古いアクティブな浮動小数点命令のＩＴＡＧ）をそのまま次に完了する命令のＩＴＡＧにすることによって、次に完了する命令の識別子を計算することができる。一実施形態では、機構２１７は、選択されたＩＴＡＧ（最も古いアクティブな浮動小数点命令のＩＴＡＧ）をラッチ２２１に格納するように構成することができる。
【００５７】
ステップ３１６で、完了ユニット２０４は、（機構２１７によって選択されたＩＴＡＧによって識別された命令を意味する）選択された命令が、完了テーブル２０５の「テール＋１」の位置にある連続番号の未解決命令の第１の命令より古いかどうかを判断する。「テール」位置は、完了テーブル２０５における最も古いエントリを示すことができる。「テール＋１」の位置は、次に古いエントリを示すことができる。一実施形態では、完了ユニット２０４は、最後に終了した命令が、完了テーブル２０５の「テール＋１」の位置にある連続番号の未解決命令の第１の命令より古いかどうかを、テール＋１の位置にあるベースＩＴＡＧと選択された命令のＩＴＡＧとを比較するコンパレータ２２２を用いて判断することができる。比較の結果は、ラッチ２２３、２２４、および２２５に格納することができる。
【００５８】
選択された命令が、完了テーブル２０５の「テール＋１」の位置にある連続番号の未解決命令の第１の命令より古い場合は、ステップ３１７で、完了ユニット２０４は、完了テーブル２０５のテール位置にあるエントリのベースＩＴＡＧとベースＩＥＡを選択する。選択された命令が、完了テーブル２０５の「テール＋１」の位置にある連続番号の未解決命令の第１の命令より古い場合は、選択された命令は、完了テーブル２０５のテール位置に示された命令の１つに相当する。一実施形態では、完了ユニット２０４は、ベースＩＴＡＧを完了テーブル２０５のテール位置とテール＋１位置の両方からマルチプレクサ２２６に入力しておくことによって、完了テーブル２０５のテール位置のエントリにおけるベースＩＴＡＧを選択することができる。マルチプレクサ２２６は、ラッチ２２５から適切な値、例えば０または論理値「１」を受け取るマルチプレクサ２２６の選択入力によって、適切なＩＴＡＧ（この場合、完了テーブル２０５のテール位置からのベースＩＴＡＧ）を選択する。マルチプレクサ２２６によって選択されたＩＴＡＧは、次いでラッチ２２７に格納される。一実施形態では、完了ユニット２０４は、ベースＩＥＡを完了テーブル２０５のテール位置およびテール＋１位置の両方からマルチプレクサ２２８に入力しておくことによって、完了テーブル２０５のテール位置のエントリにおけるベースＩＥＡを選択することができる。マルチプレクサ２２８は、ラッチ２２３から適切な値、例えば０または論理値「１」を受け取るマルチプレクサ２２８の選択入力によって、適切なＩＥＡ（この場合、完了テーブル２０５のテール位置からのベースＩＥＡ）を選択する。マルチプレクサ２２８によって選択されたＩＥＡは、次いでラッチ２２９に格納される。
【００５９】
ステップ３１８で、完了ユニット２０４はアドレス・オフセットを計算する。一実施形態では、完了ユニット２０４は、選択されたベースＩＴＡＧをステップ３１４または３１５で計算された次に完了する命令のＩＴＡＧから減算することによってアドレス・オフセットを計算する。一実施形態では、完了ユニット２０４は、選択されたベースＩＴＡＧをステップ３１４または３１５で計算された次に完了する命令のＩＴＡＧから減算する減算器２３０を用いてアドレス・オフセットを計算する。次いで、アドレス・オフセットはラッチ２３１に格納することができる。
【００６０】
ステップ３１９で、完了ユニット２０４は次に完了する命令の実効アドレスを計算する。一実施形態では、完了ユニット２０４は、ステップ３１８で計算されたアドレス・オフセットを選択されたベースＩＥＡに加算することによって次に完了する命令の実効アドレスを計算する。一実施形態では、完了ユニット２０４は、ステップ３１８で計算されたアドレス・オフセットを選択されたベースＩＥＡに加算する加算器２３２を用いて次に完了する命令の実効アドレスを計算する。次いで、次に完了する命令の実効アドレスは、ラッチ２３３に格納することができる。
【００６１】
次に完了する命令の実効アドレスを計算すると直ぐに、命令フェッチ・ユニット２０１は、ステップ３０１で他の命令をフェッチする。命令フェッチ・ユニット２０１が、方法３００の任意のステップの途中で、またはそのステップの完了後に次の命令をフェッチできること、ならびに次に完了する命令の実効アドレスを計算すると直ぐに次の命令をフェッチすることが例示的なものであることに留意されたい。
【００６２】
ステップ３１６に戻って、選択された命令が、完了テーブルの「テール＋１」位置にある連続番号の未解決命令の第１の命令より古くない場合は、ステップ３２０で、完了ユニット２０４は、完了テーブル２０５のテール＋１位置のエントリにおけるベースＩＴＡＧおよびベースＩＥＡを選択する。選択された命令が、完了テーブル２０５の「テール＋１」位置にある連続番号の未解決命令の第１の命令より古くない場合は、選択された命令は完了テーブル２０５のテール＋１位置に示された命令の１つに相当する。一実施形態では、完了ユニット２０４は、完了テーブル２０５のテール位置およびテール＋１位置の両方からベースＩＴＡＧをマルチプレクサ２２６に入力しておくことによって、完了テーブル２０５のテール＋１位置のエントリにおけるベースＩＴＡＧを選択することができる。マルチプレクサ２２６は、ラッチ２２５から適切な値、例えば０または論理値「１」を受け取るマルチプレクサ２２６の選択入力を用いて、適切なＩＴＡＧ（この場合は、完了テーブル２０５のテール＋１位置のベースＩＴＡＧ）を選択する。次いで、マルチプレクサ２２６によって選択されたＩＴＡＧは、ラッチ２２７に格納することができる。一実施形態では、完了ユニット２０４は、完了テーブル２０５のテール位置およびテール＋１位置の両方からベースＩＥＡをマルチプレクサ２２８に入力しておくことによって、完了テーブル２０５のテール＋１位置のエントリにおけるベースＩＥＡを選択することができる。マルチプレクサ２２８は、ラッチ２２３から適切な値、例えば０または論理値「１」を受け取るマルチプレクサ２２８の選択入力を用いて、適切なＩＥＡ（この場合は、完了テーブル２０５のテール＋１位置のベースＩＥＡ）を選択する。次いで、マルチプレクサ２２８によって選択されたＩＥＡは、ラッチ２２９に格納することができる。
【００６３】
ステップ３２１で、完了ユニット２０４はアドレス・オフセットを計算する。一実施形態では、完了ユニット２０４は、選択されたベースＩＴＡＧをステップ３１４または３１５で計算された次に完了する命令のＩＴＡＧから減算することによってアドレス・オフセットを計算する。一実施形態では、完了ユニット２０４は、選択されたベースＩＴＡＧをステップ３１４または３１５で計算された次に完了する命令のＩＴＡＧから減算する減算器２３０を用いてアドレス・オフセットを計算する。次いで、アドレス・オフセットはラッチ２３１に格納することができる。
【００６４】
ステップ３２２で、完了ユニット２０４は、次に完了する命令の実効アドレスを計算する。一実施形態では、完了ユニット２０４は、ステップ３２１で計算されたアドレス・オフセットと選択されたベースＩＥＡを加算することによって次に完了する命令の実効アドレスを計算する。一実施形態では、完了ユニット２０４は、ステップ３２１で計算されたアドレス・オフセットと選択されたベースＩＥＡを加算する加算器２３２を用いて次に完了する命令の実効アドレスを計算する。次いで、次に完了する命令の実効アドレスはラッチ２３３に格納することができる。
【００６５】
ステップ３２３で、完了ユニット２０４は、完了テーブル２０５のテール位置にあるエントリを割り振り解除する。完了ユニット２０４が完了テーブル２０５のテール位置にあるエントリを割り振り解除するのは、そのエントリによって示された連続番号の命令のすべてが完了したからである。一実施形態では、完了ユニット２０４の論理ユニット２３４は、ラッチ２２４から適切な値、例えば０または論理値の「１」を受け取ると直ぐに、完了テーブル２０５のテール位置にあるエントリを割り振り解除する。
【００６６】
完了テーブル２０５のテール位置にあるエントリを割り振り解除すると直ぐに、命令フェッチ・ユニット２０１は、ステップ３０１で他の命令をフェッチする。命令フェッチ・ユニット２０１が、方法３００の任意のステップの途中で、またはそのステップの完了後に次の命令をフェッチできること、ならびに完了テーブル２０５のテール位置にあるエントリを割り振り解除すると直ぐに次の命令をフェッチすることが例示的なものであることに留意されたい。
【００６７】
インオーダ・プロセッサまたはアウトオブオーダ・プロセッサの次に完了する命令の実効アドレスと識別子（「ＩＴＡＧ」）を計算する上記の方法が、例外の処理にも使用できることに留意されたい。実行ユニット２１１、２１２、または２１３が命令の実行を終了した時点で、実行ユニット２１１、２１２、または２１３は、例外状況が存在することを知らせることができる。次に、完了ユニット２０４は、上記の方法を使用して、インオーダまたはアウトオブオーダ・プロセッサの次に完了する命令の実効アドレスおよび識別子（「ＩＴＡＧ」）を計算することができる。次に完了する命令の実効アドレスおよびＩＴＡＧは、例外状況が処理された後の、戻り実効アドレスおよびＩＴＡＧとして他に保管することができる。
【００６８】
見やすいように図示していないが、方法３００が、他のステップまたは追加のステップあるいはその両方を含むことができることにも留意されたい。方法３００が、示されたものとは異なる順序で実行できること、ならびに図３および４の議論で示された順序が例示的なものであることにも留意されたい。また、方法３００のいくつかのステップが、基本的に同時に実行できることにも留意されたい。
【００６９】
本方法、完了テーブル、およびプロセッサを、いくつかの実施形態と絡めて説明しているが、これは本明細書に記載の特定の形に限定されることを意図したものではなく、逆に、添付の特許請求の範囲で定義された本発明の趣旨および範囲内に当然含み得る、代替実施形態、修正形態、均等物などを包含することを意図したものである。見出しは構成を示すためだけに使用したものであり、特許の記載または請求の範囲の制限を意味するものではない。
【図面の簡単な説明】
【００７０】
【図１】本発明によるコンピュータ・システムの一実施形態を示す図である。
【図２】本発明によるプロセッサの一実施形態を示す図である。
【図３】本発明の一実施形態による、次に完了する命令の実効アドレスおよび識別子を計算する方法を示す流れ図の一部である。
【図４】本発明の一実施形態による、次に完了する命令の実効アドレスおよび識別子を計算する方法を示す流れ図の一部である。
【図５】本発明の一実施形態による、アウトオブオーダ（out-of-order）・プロセッサの次に完了する命令の識別子を計算するために使用される、適切な命令の識別子を選択する方法を示す流れ図である。
【符号の説明】
【００７１】
２０１  命令フェッチ・ユニット
２０２  命令フェッチ・アドレス・レジスタ（ＩＦＡＲ）
２０３  命令キャッシュ
２０４  完了ユニット
２０５  完了テーブル
２０６  命令ディスパッチ・ユニット
２０７  命令キュー
２０８  ラッチ
２０９  ラッチ
２１０  ラッチ
２１１  固定小数点ユニット０（ＦＸＵ０）
２１２  固定小数点ユニット１（ＦＸＵ１）
２１３  浮動小数点ユニット（ＦＰＵ）
２１４  ラッチ
２１５  ラッチ
２１６  ラッチ
２１７  適切なＩＴＡＧを選択する機構
２１８  ラッチ
２１９  ラッチ
２２０  増分器
２２１  ラッチ
２２２  比較器
２２３  ラッチ
２２４  ラッチ
２２５  ラッチ
２２６  マルチプレクサ（ＭＵＸ）
２２７  ラッチ
２２８  マルチプレクサ（ＭＵＸ）
２２９  ラッチ
２３０  減算器
２３１  ラッチ
２３２  加算器
２３３  ラッチ
２３４  論理ユニット
【図１】
2005302025.tif 000003
【図２】
2005302025.tif 000004
【図３】
2005302025.tif 000005
【図４】
2005302025.tif 000006
【図５】
2005302025.tif 000007