(57)【特許請求の範囲】
【請求項１】
プロセッサであって、
命令のラインに対応する複数のオペランド指示子を受取るよう結合されるライン内依存性チェックユニットを含み、前記ライン内依存性チェックユニットは、前記複数のオペランド指示子を比較することによって、前記命令のライン中の命令の間の依存性を判定するよう構成され、前記プロセッサはさらに、
前記複数のオペランド指示子により指定される１以上のオペランドを受けるよう結合されるルックアヘッド計算ユニットを含み、前記ルックアヘッド計算ユニットは、もし、前記命令のライン内の第１の命令に対応するルックアヘッド結果を発生するために前記第１の命令により使用される各オペランドが前記１以上のオペランド中にあれば、前記ルックアヘッド結果を計算するよう構成され、前記プロセッサはさらに、
前記ルックアヘッド計算ユニットおよび前記ライン内依存性チェックユニットと結合されるオペランドまとめユニットを含み、前記オペランドまとめユニットは、前記ルックアヘッド結果を前記命令ライン中の第２の命令のオペランドとして（ｉ）前記ルックアヘッド計算ユニットからの前記ルックアヘッド結果が有効であるとの表示に応答して、および（ii）前記ライン内依存性チェックユニットからの前記第２の命令は前記第１の命令に依存するとの表示に応答して、提供するよう構成され、前記プロセッサはさらに、
前記オペランドまとめユニットと結合される１以上の命令ウィンドウを含み、前記１以上の命令ウィンドウは対応するオペランドが与えられるまで命令を記憶しその後実行のため前記命令を選択するよう構成され、
前記オペランドまとめユニットは、もし前記ルックアヘッド結果が有効であれば、前記ルックアヘッド結果により提示される前記第１の命令の少なくとも第１の命令演算の実行を禁止するよう前記１以上の命令ウィンドウに信号を送るよう構成される、プロセッサ。
【請求項２】
前記ルックアヘッド計算ユニットは、前記命令がレジスタオペランドのみ持つ移動命令であれば、前記ルックアヘッド結果を計算するよう構成され、前記移動命令は、前記１以上の命令ウィンドウから禁止された前記第１の命令演算を含む、請求項１に記載のプロセッサ。
【請求項３】
前記ルックアヘッド計算ユニットは、もし前記命令がレジスタソースオペランドのみ持つ加算系命令であれば、前記ルックアヘッド結果を計算するよう構成される、請求項１に記載のプロセッサ。
【請求項４】
前記加算系命令は、フラグ結果を生成するための次の実行のために前
記１以上の命令ウィンドウに与えられ、前記第１の命令演算は前記加算系演算を含む、請求項３に記載のプロセッサ。
【請求項５】
前記ルックアヘッド計算ユニットは、もし前記第１の命令がメモリオペランドを含み、前記１以上のオペランドが前記第１の命令に対応する１以上のアドレスオペランドを含むならば、ルックアヘッドアドレスを計算するよう構成され、前記第１の命令演算は前記アドレス発生を含む、請求項３に記載のプロセッサ。
【請求項６】
前記ルックアヘッド計算ユニットと結合されるロード／ストアユニットをさらに含み、前記ロード／ストアユニットは、前記ルックアヘッド計算ユニットからの前記ルックアヘッドアドレスが有効であるとの表示に応答して、前記メモリオペランドのアドレスとして前記ルックアヘッドアドレスを受取るよう構成され、前記オペランドまとめユニットは、前記命令のラインの前記１以上の命令ウィンドウへの提供に際し、前記第１の命令に対応するアドレス発生を不能化するよう構成される、請求項３に記載のプロセッサ。
【請求項７】
前記１以上の命令ウィンドウと結合されるアドレス発生ユニットをさらに含み、前記アドレス発生ユニットは、もし前記ルックアヘッドアドレスが無効であれば、前記アドレスを発生するよう構成される、請求項６に記載のプロセッサ。
【請求項８】
前記１以上の命令ウィンドウと結合される機能ユニットをさらに含み、前記機能ユニットは、前記１以上の命令ウィンドウにより前記機能ユニットへ与えられる命令を実行するよう構成される、請求項１に記載のプロセッサ。
【請求項９】
前記機能ユニットは、もし前記ルックアヘッド結果が有効であれば、前記ルックアヘッド結果により提示される前記第１の命令の前記部分を実行しない、請求項８に記載のプロセッサ。
【請求項１０】
前記ルックアヘッド計算ユニットと結合されるフューチャファイルをさらに含み、前記フューチャファイルは、前記複数のオペランド指示子に応答して前記ルックアヘッド計算ユニットに前記１以上のオペランドを与えるよう構成される、請求項９に記載のプロセッサ。
【請求項１１】
前記フューチャファイルは前記ルックアヘッド結果を受取るよう結合され、前記ルックアヘッド結果に応答して前記ルックアヘッド結果に対応して行先オペランドを更新するよう結合される、請求項１０に記載のプロセッサ。
【請求項１２】
前記フューチャファイルは前記機能ユニットと結合され、前記フューチャファイルは、前記機能ユニットから与えられる実行結果に対応して前記行先オペランドを更新するよう構成される、請求項１１に記載のプロセッサ。
【請求項１３】
前記オペランドまとめユニットは、もし前記第１の命令が比較命令であり、前記第２の命令が条件付き分岐命令であり、前記第２の命令が前記第１の命令に続いていれば、前記第２の命令のオペランドとして前記第１の命令に対応するオペランドを与えるよう構成される、請求項１に記載のプロセッサ。
【請求項１４】
前記オペランドまとめユニットはさらに、前記１以上の命令ウィンドウの前記比較命令の受取りを禁止するよう構成される、請求項１３に記載のプロセッサ。
【請求項１５】
プロセッサであって、
命令のラインに対応する複数のオペランドを受取るよう結合されるオペランドまとめユニットを含み、前記オペランドまとめユニットは、前記命令のライン中の第１の命令に対応する前記複数のオペランドのうち１以上のオペランドを、前記命令のライン中の第２の命令のオペランドとして、もし（ｉ）前記第１の命令が比較命令であれば、（ii）前記第２の命令が条件付き分岐命令であれば、および（iii）前記第２の命令が前記第１の命令
に続いていれば、与えるよう構成され、前記プロセッサはさらに、
前記オペランドまとめユニットと結合される１以上の命令ウィンドウを含み、前記１以上の命令ウィンドウは、対応するオペランドが与えられるまで命令を記憶しその後実行のために前記命令を選択するよう構成され、
前記オペランドまとめユニットは、もし（ｉ）前記第１の命令が比較命令であれば、（ii）前記第２の命令が条件付き分岐命令であれば、および（iii）前記第２の命令が前記
第１の命令に続いていれば、前記第１の命令の受取りを禁止するよう前記１以上の命令ウィンドウに信号を送るよう構成され、前記プロセッサはさらに、
前記１以上の命令ウィンドウと結合される少なくとも１つの機能ユニットを含み、前記１以上の命令ウィンドウは前記機能ユニットによる実行のために前記第２の命令を計画するように構成され、前記機能ユニットは、前記比較命令によって規定される比較および前記条件付き分岐命令によって規定される分岐のいずれをも含む前記第２の命令を実行するように構成される、プロセッサ。
【請求項１６】
プロセッサ内の命令のラインを実行するための方法であって、
複数のオペランド指示子を検出するため、前記命令のラインをデコードするステップと、
ライン内依存性を検出するため、前記命令のライン中の各命令の行先オペランド指示子を、前記命令のライン中の各次の命令のソースオペランド指示子と比較するステップと、
前記ソースオペランド指示子により指定されるソースオペランドを取込むため投機的オペランドソースの読出を行なうステップと、
前記ソースオペランドが前記投機的オペランドソースにおいて利用可能であれば、前記ライン中の第１の命令に対するルックアヘッド結果を計算するステップとを含み、前記計算するステップは、ルックアヘッド計算ユニットで行なわれ、前記方法はさらに、
もし前記ルックアヘッド結果が成功裡に計算されたならば、前記ルックアヘッド結果を生成する前記第１の命令の少なくとも第１の命令演算の実行を禁止するよう、前記第１の命令を受取るよう構成された命令ウィンドウに、信号を送るステップと、
もし前記比較が前記第２の命令の前記第１の命令に対する依存性を示せば、前記命令のライン中の第２の命令に前記ルックアヘッド結果を与えるステップとを含み、前記与えるステップは、前記第２の命令を前記命令ウィンドウ内に記憶するよりも前に行なわれ、前記与えるステップは、オペランドまとめユニットによって行なわれる、プロセッサ内の命令のラインを実行するための方法。
【請求項１７】
実行のために、前記命令ウィンドウから前記第２の命令を選択するステップをさらに含む、請求項１６に記載のプロセッサ内の命令のラインを実行するための方法。
【請求項１８】
前記計算するステップは、もし、前記命令がレジスタオペランドのみを有する加算系命令であり、前記レジストオペランド各々が前記読出の際に前記投機的オペランド記憶装置内で利用可能であれば、成功である、請求項１６に記載のプロセッサ内の命令のラインを実行するための方法。
【請求項１９】
もし前記第１の命令がメモリオペランドを含み、前記第１の命令に対応するアドレスオペランドが前記読出に際して前記投機的オペランドソースにおいて利用可能であれば、ルックアヘッドアドレスを計算するステップをさらに含む、請求項１８に記載のプロセッサ内の命令のラインを実行するための方法。
【請求項２０】
コンピュータシステムであって、
命令のラインを複数の発行位置に整列させるよう構成される整列ユニットと、
投機的オペランドを記憶するよう構成される投機的オペランドソースと、
命令に対してオペランドが与えられるまでそれらの命令を記憶するよう構成される命令ウィンドウと、
前記投機的オペランドソース、前記命令ウィンドウおよび前記整列ユニットと結合されるルックアヘッド／まとめユニットとを含むプロセッサを含み、前記ルックアヘッド／まとめユニットは、前記整列ユニットから受取られる前記命令のラインに応答して前記投機的オペランドソースからオペランドを読出すよう構成され、前記ルックアヘッド／まとめユニットは、前記オペランドに応答して前記命令のライン中の第１の命令に対応するルックアヘッド結果を発生するよう構成され、前記ルックアヘッド／まとめユニットはさらに、前記投機的オペランドソースを前記ルックアヘッド結果で更新するよう構成され、前記ルックアヘッド／まとめユニットは、前記第１の命令に依存する、前記命令のライン中の第２の命令に前記ルックアヘッド結果をフォワードするよう構成され、前記ルックアヘッド／まとめユニットは、前記ルックアヘッド結果を生成する前記第１の命令の少なくとも第１の命令演算の実行を禁止するよう前記命令ウィンドウに信号を送るよう構成され、前記コンピュータシステムはさらに、
前記プロセッサと結合される入力／出力（Ｉ／Ｏ）装置を含み、前記Ｉ／Ｏ装置は、前
記コンピュータシステムと、前記Ｉ／Ｏ装置が結合される他のコンピュータシステムとの間で通信するよう構成される、コンピュータシステム。
【請求項２１】
第２のプロセッサをさらに含むコンピュータシステムであって、前記第２のプロセッサは、
命令のラインを複数の発行位置に整列させるよう構成される整列ユニットと、
投機的オペランドを記憶するよう構成される投機的オペランドソースと、
命令に対してオペランドが与えられるまでこれらの命令を記憶するよう構成される命令ウィンドウと、
前記投機的オペランドソース、前記命令ウィンドウおよび前記整列ユニットと結合されるルックアヘッド／まとめユニットとを含み、前記ルックアヘッド／まとめユニットは、前記整列ユニットから受取られる前記命令のラインに応答して前記投機的オペランドソースからオペランドを読出すよう構成され、前記ルックアヘッド／まとめユニットは、前記オペランドに応答して前記命令のライン中の第１の命令に対応するルックアヘッド結果を発生するよう構成され、前記ルックアヘッド／まとめユニットはさらに、前記投機的オペランドソースを前記ルックアヘッド結果で更新するよう構成され、前記ルックアヘッド／まとめユニットは、前記命令ライン中の、前記第１の命令に依存する第２の命令に前記ルックアヘッド結果をフォワードするよう構成され、前記ルックアヘッド／まとめユニットは、前記ルックアヘッド結果を生成する前記第１の命令の少なくとも第１の命令演算の実行を禁止するよう、前記命令ウィンドウに信号を送るよう構成される、請求項２０に記載のコンピュータシステム。
【発明の詳細な説明】
【０００１】
【発明の分野】
この発明は、プロセッサの分野に関し、特に、プロセッサ内の命令実行の並列化に関する。
【０００２】
【従来の技術】
スーパースカラプロセッサは、１クロックサイクルあたり複数の命令をディスパッチし実行することによって、かつ、設計と一貫した可能な限り短いクロックサイクルタイムで動作することによって、高い性能を達成しようとする。所与のプロセッサが、１クロックサイクルあたり複数の命令をディスパッチおよび／または実行することに成功する範囲内で、高い性能が実現されよう。１クロックサイクルあたりにディスパッチされる命令の平均数を増加させるため、プロセッサ設計者は、より幅の広い発行速度を用いるスーパースカラプロセッサを設計してきた。「発行が広い」スーパースカラプロセッサは、「発行が狭い」スーパースカラプロセッサがディスパッチできるよりも、クロックサイクル当りディスパッチ（または発行）することができる命令の最大数がより大きい。発行が狭いプロセッサが処理できる数よりも、ディスパッチ可能な命令の数が多いクロックサイクルの間に、発行が広いプロセッサはより多くの命令をディスパッチするであろうし、それによって、１クロックサイクルあたりにディスパッチされる命令の平均数の増加を達成する。
【０００３】
残念ながら、より幅の広い発行速度をサポートするためには、通常、プロセッサ内の実行ハードウェアの量を増やす必要がある。もし十分な実行ハードウェアが設けられていなければ、そのプロセッサが同時に多数の命令を発行できるものであったとしても、プロセッサの命令のスループットに悪影響があるであろう。命令ハードウェアは、半導体基板面積の相当量を占めるであろうから、プロセッサの総ダイサイズしたがって、プロセッサのコストを増加させる。
【０００４】
加えて、多くの命令は、簡単な実行ハードウェアによって処理され得る比較的簡単な命令である。たとえば、レジスタオペランドのみを指定する移動命令（すなわちソースレジスタから行先レジスタへの移動）は、実行のためにほとんどハードウェアを必要としない簡単な命令である。メモリおよびレジスタのオペランドを有する移動命令は、アドレス発生を伴う比較的小さな付加的ハードウェアしか伴わない。さらに、レジスタオペランドを有する加算系命令（たとえば加算／減算／インクリメント／デクリメント）も同様に比較的簡単な命令である。さらに、通常のコードシーケンスにおいては、簡単な命令の方が比較的頻繁であろう。しかし、実行ハードウェアはさらに、複雑な命令の一方を実行できなければならない。いくつかのスーパースカラプロセッサは、複雑な実行ユニットおよび簡単な実行ユニットの両方を設け、実行ユニットへの命令の発行を、簡単な実行ユニットは簡単な命令のみを受取り、より複雑なユニットは簡単な命令または複雑な命令を受取るように制御することによって、よりコストの低い実行ハードウェアを提供しようと試みてきた。このような方策によって実行ハードウェアにより占有される面積は減じられるであろうが、発行論理はより複雑となる。複雑な論理はより多くの面積をとるであろうし、または、クロックサイクルタイムを律速するであろう。したがって、簡単な命令および複雑な命令の混ざったものを処理するためのより効率的な方法が望ましい。
【０００５】
より高いクロック周波数（すなわちより短いクロックサイクルタイム）をサポートするため、スーパースカラプロセッサはより幅の広い発行速度と同時により長いパイプライン（すなわちより多くの段を含むパイプライン）を用いてきた。パイプラインがより長いとより高いクロック周波数が達成されるであろうが、パイプラインがより長いと、同時に付加的な設計の課題が生じる。特に、前の命令の実行が完了する前に、パイプラインにより多くの命令がフェッチされ投入されるかもしれないので、並列実行をサポートするためにフォワードのためのハードウェアの追加が必要であろう。たとえば、前の命令の実行よりも前に、オペランドフェッチ段よりも先に進む命令が多くなるだろう。もしこれらの命令が前の命令に依存するものであれば、これらの命令のためのオペランドは命令がオペランドフェッチ段に到達したときに利用可能ではないであろう。命令がパイプラインを通じて実行へと進むにつれて命令に対しオペランドを与えるためフォワードのためのハードウェアが設けられていれば、これらの命令が次のパイプライン段へ進むことは可能であろう。残念ながら、フォワードのためのハードウェアは、面積の点と同時に複雑性の点でもコストがかかるであろう。したがって、依存型命令に対しオペランドを与えるためのより効率的な解決策が望ましい。
【０００６】
ここでは、「依存」という語は、第２の命令の実行よりも前に第１の命令が実行されていることを第２の命令が必要とするような、第１の命令とそれに続く第２の命令との関係を指すため使用する。たとえば、第２の命令が、第１の命令の実行を通じて発生されるソースオペランドを含むようなときである。一般に、オペランドとは、命令の実行の間にそれに対する操作が行なわれる値である。特定の命令についてのオペランドが命令内にエンコードされたオペランド指示子を通じて位置特定される。たとえば、あるオペランドは、プロセッサ内で用いられるレジスタ内に記憶されるであろう。命令内にエンコードされたレジスタオペランド指示子は、オペランドを記憶している特定のレジスタを選択する。さらに、レジスタオペランド指示子は、レジスタアドレスまたはレジスタ番号とも呼ばれる。一方、他の命令は、プロセッサと結合されたメインメモリ内のメモリ場所内に記憶されたメモリオペランドを指定するであろう。メモリアドレスもオペランド指示子を通じて指定される。たとえば、命令は、メモリオペランドを記憶するメモリ場所を特定する変位を含むであろう。他の命令は、メモリアドレスを形成するために使用されるレジスタオペランドを指定するアドレスオペランド指示子を含むであろう。もしそのオペランドが命令のための入力値であれば、オペランドはソースオペランドであろう。もしそのオペランドが命令の結果であれば、オペランドは行先オペランドであろう。行先オペランド指示子は、命令実行の結果が記憶されるべき記憶場所を指定する。
ＷＯ９３／２０５０５は、アウトオブオーダでの実行が可能なスーパースカラＲＩＳＣプロセッサにおける命令のスケジューリングを説明する。該文献は、スケジューリング論理の部分であるレジスタリネーム回路であって、データ依存性が依存性チェックユニットにおいて解決され、第１の命令の結果がレジスタファイルへ転送されることなく一時バッファ命令ウィンドウ内に記憶されるという形で並列命令実行を高速化するレジスタリネーム回路を開示する。これによって、第２の命令の結果を、入力オペランドとして結果を用いてフォワーディングすることが可能になる。しかし、この処理は、命令がディスパッチされて後のパイプラインの命令実行段において発生する。
ＵＳ−Ａ−５，６７５，７５８は、加算／移動ユニット（ＡＭＵ）と呼ばれ他の実行ユニットに対して選択加算および移動を並列してアウトオブオーダで行なう補助整数実行ユニットの付加によって、既存の実行ユニットが増強される、高性能プロセッサを開示する。ＡＭＵは、データ依存性を取り除くことによって、利用可能な命令レベルの並列性を高める。
【０００７】
【発明の概要】
上記問題は、前掲の特許請求の範囲の請求項１に規定されるこの発明によるプロセッサによりほぼ解決される。一実施例において、プロセッサは、１以上の命令のソースオペランドに対応するオペランド情報（オペランド値を生成するであろう命令を特定するタグまたはオペランドのいずれか）を受取るよう構成されるルックアヘッドアドレス／結果計算ユニットを含む。もしオペランドが利用可能であれば、ルックアヘッドアドレス／結果計算ユニットは、命令のメモリオペランドのためのルックアヘッドアドレス、または、命令の機能的命令演算に対応するルックアヘッド結果のいずれかを発生するであろう。ルックアヘッドアドレスは、命令に対応するメモリ演算の早期開始のためロード／ストアユニットへ与えられるであろう。ルックアヘッド結果は、投機的オペランドソース（たとえばフューチャファイル）へ、その中での更新のため与えられるであろう。レジスタのためのルックアヘッド状態が、パイプライン内に早期に与えられるという効果がある。その後の命令はそのルックアヘッド状態を受取り、そのルックアヘッド状態を使用して早期にルックアヘッド状態を追加して発生するであろう。他方、その後の命令はそのルックアヘッド状態を受取るであろうし、そしてそれによって、（前の命令の実行を命令ウィンドウ内で待つのではなく）命令ウィンドウへディスパッチされればすぐ実行できる状態となるであろう。
【０００８】
プロセッサは、さまざまな態様でより効率的なフォワーディングを達成するであろう。たとえば、多数の命令がオペランドフェッチに際してルックアヘッド結果を受取ってもよく、その場合その後のオペランドのフォワーディングを待つ必要がない。さらに、いくつかの命令オペランドはルックアヘッドアドレス／結果計算ユニットにおいて完了されるであろうから、幅の広い発行速度をサポートするために必要とされる機能ユニットがより少ないであろう。したがって、より少ないフォワーディングバスが（機能ユニットがより少ないことを反映して）実現されるであろう。加えて、ルックアヘッドオペランドを生成する命令がプロセッサパイプラインの実行段に到達するよりも前に、命令に対するルックアヘッドオペランドを提供することによって、性能が上がるであろう。
【０００９】
一実施例においては、プロセッサはさらに、ルックアヘッド結果をその後の、同時にデコードされる命令（ライン内依存性）にまとめる（collapse）よう構成されるオペランドまとめユニットを含む。さらに、オペランドまとめユニットは、比較命令を、比較の結果に依存する次の分岐命令内にまとめるよう構成されるであろう。比較／分岐の組合せは単一の機能ユニットしか占めないという効果がある。
【００１０】
概括すると、この発明は、ライン内依存性チェックユニット、ルックアヘッド計算ユニット、オペランドまとめユニットおよび１以上の命令ウィンドウを含むプロセッサを企図する。ライン内依存性チェックユニットは、命令のラインに対応する複数のオペランド指示子を受取るよう結合され、複数のオペランド指示子を比較することによって、命令のライン中の命令の間の依存性を判定するよう構成される。ルックアヘッド計算ユニットは、複数のオペランド指示子により指定される１以上のオペランドを受けるよう結合され、もし、命令のライン内の第１の命令に対応するルックアヘッド結果を発生するために第１の命令により使用される各オペランドが１以上のオペランド中にあれば、ルックアヘッド結果を計算するよう構成される。オペランドまとめユニットは、ルックアヘッド計算ユニットおよびライン内依存性チェックユニットと結合され、ルックアヘッド結果を命令ライン中の第２の命令のオペランドとして提供するよう構成される。オペランドまとめユニットは、ルックアヘッド結果をオペランドとして（ｉ）ルックアヘッド計算ユニットからのルックアヘッド結果が有効であるとの表示に応答して、かつ（ii）ライン内依存性チェックユニットからの第２の命令は第１の命令に依存するとの表示に応答して、提供するであろう。命令ウィンドウは、オペランドまとめユニットと結合され、対応するオペランドが与えられるまで命令を記憶しその後実行のためにその命令を選択するよう構成される。オペランドまとめユニットは、もしルックアヘッド結果が有効であれば、ルックアヘッド結果により表わされる第１の命令の少なくとも第１の命令演算の実行を禁止するよう命令ウィンドウに信号を送るよう構成される。
【００１１】
この発明はさらに、オペランドまとめユニットおよび１以上の命令ウィンドウを含むプロセッサを企図する。オペランドまとめユニットは、命令のラインに対応する複数のオペランドを受取るよう結合される。オペランドまとめユニットは、命令のライン中の第１の命令に対応する複数のオペランドのうち１以上のオペランドを、命令のライン中の第２の命令のオペランドとして、（ｉ）比較命令である第１の命令に応答して、（ii）条件付き分岐命令である第２の命令に応答して、および（iii）第１の命令に続いた第２の命令に応答して、与えるよう構成される。命令ウィンドウは、オペランドまとめユニットと結合され、対応するオペランドが与えられるまで命令を記憶しその後実行のためにその命令を選択するよう構成される。オペランドまとめユニットは、もし（ｉ）第１の命令が比較命令であれば、（ii）第２の命令が条件付き分岐命令であれば、および（iii）第２の命令が第１の命令に続いていれば、第１の命令の受取りを禁止するよう命令ウィンドウに信号を送るよう構成される。
【００１２】
さらに、この発明は、プロセッサにおいて命令のラインを実行するための方法を企図する。複数のオペランド指示子を検出するため、命令のラインがデコードされる。ライン内依存性を検出するため、命令のライン中の各命令の行先オペランド指示子が、命令のライン中の各次の命令のソースオペランド指示子と比較される。ソースオペランド指示子により指定されるソースオペランドを取込むため投機的オペランドソースの読出が行なわれる。ソースオペランドが投機的オペランドソースにおいて利用可能であれば、ライン中の第１の命令に対するルックアヘッド結果が計算される。もしルックアヘッド結果が成功裡に計算されたならば、ルックアヘッド結果を生成する第１の命令の少なくとも第１の命令演算の実行を禁止するため、第１の命令を受取るよう構成された命令ウィンドウに、信号が送られる。もし比較が第２の命令の第１の命令に対する依存性を示せば、命令のライン中の第２の命令にルックアヘッド結果が与えられる。与えるステップは、第２の命令を命令ウィンドウ内に記憶するよりも前に行なわれる。
【００１３】
この発明はまたさらに、プロセッサおよび入力／出力（Ｉ／Ｏ）装置を含むコンピュータシステムを企図する。プロセッサは、命令のラインを複数の発行位置へ整列させるよう構成される整列ユニットと、投機的オペランドを記憶するよう構成される投機的オペランドソースと、命令をそれらの命令に対してオペランドが提供されるまで記憶するよう構成される命令ウィンドウと、ルックアヘッド／まとめユニットとを含む。ルックアヘッド／まとめユニットは、投機的オペランドソース、命令ウィンドウおよび整列ユニットと結合され、整列ユニットから受取った命令のラインに応答して投機的オペランドソースからオペランドを読出すよう構成される。ルックアヘッド／まとめユニットは、オペランドに応答して命令のライン内の第１の命令に対応するルックアヘッド結果を発生するよう構成される。ルックアヘッド／まとめユニットはさらに、ルックアヘッド結果で投機的オペランドソースを更新するよう構成され、さらに、第１の命令に依存する、命令のライン内の第２の命令にルックアヘッド結果をフォワードするよう構成される。ルックアヘッド／まとめユニットは、ルックアヘッド結果を生成する第１の命令の少なくとも第１の命令演算の実行を禁止するよう命令ウィンドウに信号を送るよう構成される。Ｉ／Ｏ装置は、プロセッサと結合され、コンピュータシステムとＩ／Ｏ装置が結合された他のコンピュータシステムとの間で通信するよう構成される。
【００１４】
この発明の他の目的および利点は、添付の図面を参照し以下の詳細な説明を読むことで明らかとなるであろう。
【００１５】
この発明にはさまざまな変更および代替的な形態が可能であるが、この発明の特定の実施例を例として図面に示し以下で詳細に説明する。しかし、図面および詳細な説明はこの発明を開示される特定の形態に限定することを意図するものではなく、逆に、前掲特許請求の範囲により規定されるこの発明の精神および範囲内にあるすべての変更、均等物および代替例を包含することが意図されることが理解されねばならない。
【００１６】
【詳細な説明】
さて図１を参照し、スーパースカラプロセッサ１０の一実施例のブロック図を示す。他の実施例が可能であり企図される。図１に示す実施例においては、プロセッサ１０は、プリデコードユニット１２、Ｌ１  Ｉ−キャッシュ１４、Ｌ０  Ｉ−キャッシュ１６、フェッチ／スキャンユニット１８、命令キュー２０、整列ユニット２２、ルックアヘッド／まとめユニット２４、フューチャファイル２６、リオーダバッファ／レジスタファイル２８、第１の命令ウィンドウ３０Ａ、第２の命令ウィンドウ３０Ｂ、複数の機能ユニット３２Ａ、３２Ｂ、３２Ｃおよび３２Ｄ、複数のアドレス発生ユニット３４Ａ、３４Ｂ、３４Ｃおよび３４Ｄ、ロード／ストアユニット３６、Ｌ１  Ｄ−キャッシュ３８、ＦＰＵ／マルチメディアユニット４０および外部インターフェイスユニット４２を含む。ここで特定の参照番号に異なった文字を付けた参照符号で示される要素は、集合的に参照番号のみを使用して示されるであろう。たとえば、機能ユニット３２Ａ、３２Ｂ、３２Ｃおよび３２Ｄは、集合的には機能ユニット３２として示されるであろう。
【００１７】
図１の実施例では、外部インターフェイスユニット４２は、プリデコードユニット１２、Ｌ１  Ｄ−キャッシュ３８、Ｌ２インターフェイス４４およびバスインターフェイス４６と結合される。プリデコードユニット１２はさらにＬ１  Ｉ−キャッシュ１４と結合される。Ｌ１  Ｉ−キャッシュ１４は、Ｌ０  Ｉ−キャッシュ１６およびフェッチ／スキャンユニット１８と結合される。フェッチ／スキャンユニット１８はさらに、Ｌ０  Ｉ−キャッシュ１６および命令キュー２０と結合される。命令キュー２０は、整列ユニット２２と結合され、整列ユニット２２はさらに、ルックアヘッド／まとめユニット２４と結合される。ルックアヘッド／まとめユニット２４はさらに、フューチャファイル２６、リオーダバッファ／レジスタファイル２８、ロード／ストアユニット３６、第１の命令ウィンドウ３０Ａ、第２の命令ウィンドウ３０ＢおよびＦＰＵ／マルチメディアユニット４０と結合される。ＦＰＵ／マルチメディアユニット４０は、ロード／ストアユニット３６およびリオーダバッファ／レジスタファイル２８と結合される。ロード／ストアユニット３６は、Ｌ１  Ｄ−キャッシュ３８と結合される。第１の命令ウィンドウ３０Ａは、機能ユニット３２Ａ〜３２Ｂおよびアドレス発生ユニット３４Ａ〜３４Ｂと結合される。同様に、第２の命令ウィンドウ３０Ｂは、機能ユニット３２Ｃ〜３２Ｄおよびアドレス発生ユニット３４Ｃ〜３４Ｄと結合される。Ｌ１  Ｄ−キャッシュ３８、機能ユニット３２およびアドレス発生ユニット３４は各々、複数の結果バス４８と結合され、複数の結果バス４８はさらに、ロード／ストアユニット３６、第１の命令ウィンドウ３０Ａ、第２の命令ウィンドウ３０Ｂ、リオーダバッファ／レジスタファイル２８およびフューチャファイル２６と結合される。
【００１８】
概して、ルックアヘッド／まとめユニット２４は、所定の命令のためのルックアヘッド結果を、これらの命令が実行のためにディスパッチされる前に発生するよう構成される。もし結果を生成するために使用されるオペランドが、フューチャファイルからのオペランドのフェッチに際してフューチャファイル２６内で利用可能であれば、ルックアヘッド結果が所定の命令のために発生される。（実行の際の結果としてオペランドを生成するであろう命令を特定する結果キュータグである場合とは異なり）もしその値がフューチャファイル２６内で有効であれば、オペランドはフューチャファイル２６内で利用可能である。もしルックアヘッド結果が成功裡に発生されれば、結果はフューチャファイル２６へ与えられて記憶され、命令の同じ「ライン」内の（すなわち命令とともに同時にデコードされる）従属している命令へ与えられる。投機的結果が、パイプライン内でより早期に後の命令に対し利用可能となるという効果が奏されるであろう。したがって、後の命令のためにルックアヘッド結果が計算されるであろう。さらに、フォワーディングがフューチャファイル２６を通じてより頻繁に達成されるので、フォワーディングがより効率的となろう。したがって、フォワードするためのハードウェアが減じられるであろう。さらに、所定の命令に対して実行ハードウェアの外で結果が発生されるために、幅の広い発行速度を依然サポートしつつも、プロセッサ１０内で用いられる実行ハードウェアの量が減じられるであろう。
【００１９】
一実施例においては、ルックアヘッド／まとめユニット２４は、メモリオペランドを有する命令のためのルックアヘッドアドレスを発生するよう構成される。このような命令については、さもなくば、アドレス発生ユニット３４の１つによって行なわれるアドレス発生命令演算が、ルックアヘッド／まとめユニット２４により行なわれるであろう。したがって、ロード／ストアユニット３６は、さもなくば達成可能であったであろうよりも、早期にパイプライン内でアドレスを受取るであろう。もし、命令が加算系命令演算またはレジスタからレジスタへの移動を指定するならば、そして、メモリオペランドを含んでいなければ、ルックアヘッド／まとめユニット２４はルックアヘッド結果を発生するであろう。したがって、さもなくば機能ユニット３２の１つによって実行されたであろう機能的命令演算が、パイプライン内でより早期にルックアヘッド／まとめユニット２４により行なわれる。
【００２０】
プリデコードユニット１２は、外部インターフェイスユニット４２によりフェッチされた命令バイトを受取り、命令バイトがＬ１  Ｉ−キャッシュ１４内に記憶されるより前に命令バイトをプリデコードする。プリデコードユニット１２によって発生されたプリデコード情報は、同様にＬ１  Ｉ−キャッシュ１４内に記憶される。一般に、プリデコード情報は、命令のフェッチおよび発行の間に有用であろう命令特徴の特定を助けるため提供されるが、フェッチおよび発行演算の間に迅速に発生することは困難であろう。ここで使用する際は「プリデコード」という語は、デコードされる命令バイトとともに後に命令キャッシュ（たとえばＬ１  Ｉ−キャッシュ１４および／またはＬ０  Ｉ−キャッシュ１６など）内に記憶されるプリデコード情報を発生するためのデコード命令を指す。
【００２１】
一実施例では、プロセッサ１０は、命令バイトごとにプリデコード情報２ビットを用いる。これらのビットの１つは、「開始ビット」と呼ばれ、その命令バイトが命令の最初のバイトであるのか否かを示す。命令バイトの群がフェッチされるとき、対応する開始ビットの組が命令バイトの群の中の命令間の境界を特定する。したがって、対応する開始ビットをスキャンすることによって、命令バイトの群から複数の命令が同時に選択されよう。開始ビットが、各命令の最初のバイトを特定することによって命令の境界を位置特定するため使用される一方で、代替的に各命令の最後のバイトを特定することによって命令の境界を位置特定するよう、終了ビットが使用できよう。
【００２２】
この実施例において使用される第２のプリデコードビットは、「転送制御」ビットと呼ばれ、どの命令が分岐命令であるかを特定する。命令の最初のバイトに対応する転送制御ビットは、その命令が分岐命令であるか否かを示す。命令の後のバイトに対応する転送制御ビットは、小変位フィールドを有する相対分岐命令以外についてはドントケアである。具体的一実施例によれば、小変位フィールドは８ビットフィールドである。一般に、「小変位フィールド」は、分岐命令により発生されるターゲットアドレスよりも少ないビットを有する変位フィールドを指す。小変位フィールドを有する相対分岐命令については、変位バイトに対応する転送制御ビットが以下に説明するように使用される。
【００２３】
命令バイトに対応するプリデコード情報を発生するのに加えて、プリデコードユニット１２は、この実施例においては、ターゲットアドレスを実際に記憶するため相対分岐命令の変位フィールドを再コードするよう構成される。すなわち、プリデコードユニット１２は、相対分岐命令の変位を、プロセッサ１０により用いられる命令セットにより規定されるように、相対分岐命令に対応するアドレスに加える。得られたターゲットアドレスは、変位の代わりとして変位フィールドにエンコードされ、更新された変位フィールドが元の変位フィールドの代わりにＬ１  Ｉ−キャッシュ１４に記憶される。相対ターゲットアドレスを前もって計算することによって、ターゲットアドレス発生が簡単にされ、それによって分岐予測機構がより効率的に動作するであろう。
【００２４】
ｘ８６命令セットを用いるプロセッサ１０の一実施例においては、プリデコードユニット１２は、８ビットの変位フィールドおよび３２ビットの変位フィールドを再コードするよう構成される。３２ビットの変位フィールドはターゲットアドレス全体を記憶するであろう。一方、８ビットの変位フィールドはエンコードされる。特に、８ビットの変位フィールドおよび対応する転送制御プリデコードビットは、キャッシュラインオフセット部と相対的キャッシュライン部とに分割される。キャッシュラインオフセット部は、ターゲットアドレスのキャッシュラインオフセット部である。相対キャッシュライン部は、相対分岐命令を記憶しているキャッシュラインよりも上または下のキャッシュライン数という形で、ターゲットアドレスにより特定されるキャッシュライン（「ターゲットキャッシュライン」）を定義する。第１のキャッシュライン内の各バイトが第２のキャッシュライン内のバイトが記憶されているアドレスよりも数値的に大きいアドレスに記憶されているとき、第１のキャッシュラインは第２のキャッシュラインよりも上であるという。逆に、第１のキャッシュライン内の各バイトが、第２のキャッシュライン内のバイトが記憶されているアドレスよりも数値的に小さいアドレスに記憶されていれば、第１のキャッシュラインは第２のキャッシュラインよりも下であるという。符号付の８ビット変位は、分岐命令に対応するアドレスから＋／−１２８バイトのアドレスを指定する。したがって、８ビット変位を有する相対分岐命令により到達可能な上のおよび下のキャッシュラインの数は限定される。相対キャッシュライン部は、この限定された上のおよび下のキャッシュラインの組をエンコードする。通常、小変位フィールドを有する分岐命令は、予め定められた範囲内に変位を有するが、より大きな変位フィールドは、予め定められた範囲外の値を記憶するであろう。
【００２５】
次の表１および表２は、プロセッサ１０の一実施例による、バイトに対応するプリデコード情報のエンコードの例を示す。
【００２６】
【表１】
0003866918.tif 000002
【００２７】
【表２】
0003866918.tif 000003
【００２８】
プリデコードユニット１２は、受取った命令バイトと対応するプリデコード情報とを記憶するためＬ１  Ｉ−キャッシュ１４へ送る。Ｌ１  Ｉ−キャッシュ１４は、命令バイトおよびプリデコード情報を記憶するための高速キャッシュメモリである。Ｌ１  Ｉ−キャッシュ１４は、ダイレクトマッピング構成およびセットアソシアティブ構成を含む任意の適切な構成を用いてよい。具体的一実施例では、Ｌ１  Ｉ−キャッシュ１４は、６４バイトのキャッシュラインを用いる１２８ＫＢの２ウェイセットアソシアティブキャッシュである。Ｌ１  Ｉ−キャッシュ１４は、中に記憶される命令バイトに対応するプリデコード情報用の付加的記憶装置を含む。付加的記憶装置は、命令バイト記憶装置と同様に編成される。ここで使用する際には、「キャッシュライン」という語は、特定のキャッシュ内の記憶装置の割当の単位を指す。一般に、キャッシュライン内のバイトが、１単位としてキャッシュにより操作される（すなわち割当てられ割当て解除される）。
【００２９】
一実施例では、Ｌ１  Ｉ−キャッシュ１４は、線形にアドレス指定され、物理的タグが付けられる。キャッシュを索引するために使用されるアドレスビットの少なくとも１つが、後から物理的アドレスビットに変換される線形アドレスビットであれば、キャッシュは線形にアドレス指定されているという。線形にアドレス指定された／物理的タグが付けられたキャッシュのタグは、インデックスのために使用されないビットに加え変換された各ビットを含む。ｘ８６アーキテクチャの指定によれば、命令は論理アドレスを発生し、それはセグメンテーション変換機構を通じて線形アドレスに変換されさらにページ変換機構を通じて物理アドレスに変換されるように規定されている。論理アドレスと対応する線形アドレスとが等しいフラットアドレッシングモードの使用がますます一般的となってきている。プロセッサ１０は、フラットアドレッシングモードを用いるよう構成されてもよい。したがって、実行中の命令により発生されるフェッチアドレス、ターゲットアドレスなどは線形アドレスである。Ｌ１  Ｉ−キャッシュ１４においてヒットが検出されるか否かを判定するため、フェッチ／スキャンユニット１８によりキャッシュに提示される線形アドレスは、変換ルックアサイドバッファ（ＴＬＢ）を使用して対応する物理アドレスに変換され、この物理アドレスが指し示されたキャッシュラインからの物理的タグと比較されてヒット／ミスが判定される。フラットアドレッシングモードが使用されないときは、プロセッサ１０はやはりコードを実行するであろうが、論理アドレスから線形アドレスを発生するために付加的なクロックサイクルが使用されるであろう。
【００３０】
さらに、Ｌ０  Ｉ−キャッシュ１６は、命令バイトを記憶するための高速キャッシュメモリである。Ｌ１  Ｉ−キャッシュ１４は大きいために、Ｌ１  Ｉ−キャッシュ１４のアクセスタイムは長いであろう。具体的一実施例では、Ｌ１  Ｉ−キャッシュ１４は２クロックサイクルのアクセスタイムを使用する。単一サイクルでのフェッチアクセスを可能にするため、Ｌ０  Ｉ−キャッシュ１６が用いられる。Ｌ０  Ｉ−キャッシュ１６は、Ｌ１  Ｉ−キャッシュ１４と比較してより小さく、そのためより高速のアクセスタイムをサポートするであろう。具体的一実施例では、Ｌ０  Ｉ−キャッシュ１６は５１２バイトのフルアソシアティブキャッシュである。Ｌ１  Ｉ−キャッシュ１４と同様、Ｌ０  Ｉ−キャッシュ１６は、命令バイトのキャッシュラインおよび対応するプリデコード情報を記憶するよう構成される（たとえば５１２バイトで、８つの６４バイトキャッシュラインを記憶し、対応するプリデコードデータは付加的記憶装置内に記憶される）。一実施例では、Ｌ０  Ｉ−キャッシュ１６は線形にアドレス指定され線形タグが付けられるであろう。
【００３１】
フェッチ／スキャンユニット１８は、Ｌ０  Ｉ−キャッシュ１６に対してフェッチアドレスを発生するよう、そして、Ｌ１  Ｉ−キャッシュ１４に対してフェッチまたはプリフェッチアドレスを発生するよう構成される。Ｌ０  Ｉ−キャッシュ１６からフェッチされた命令は、フェッチ／スキャンユニット１８によってスキャンされ、ディスパッチのために命令を特定すると同時に分岐命令を位置特定し、さらに、位置特定された分岐命令に対応する分岐予測を形成する。命令スキャン情報および対応する命令バイトは、フェッチ／スキャンユニット１８によって命令キュー２０へ記憶される。さらに、特定された分岐命令および分岐予測は、Ｌ０  Ｉ−キャッシュ１６に対しその後のフェッチアドレスを発生するため使用される。
【００３２】
フェッチ／スキャンユニット１８は、プリフェッチされるキャッシュラインがプロセッサ１０へのディスパッチのためにフェッチ／スキャンユニット１８によりフェッチされるよりも前に、Ｌ１  Ｉ−キャッシュ１４からＬ０  Ｉ−キャッシュ１６へのキャッシュラインのプリフェッチを試みるためプリフェッチアルゴリズムを用いる。任意の適当なプリフェッチアルゴリズムが使用されてよい。プリフェッチアルゴリズムの一実施例を以下にさらに詳細に示す。
【００３３】
フェッチ／スキャンユニット１８は、１クロックサイクルの間に命令のより大きな「ラン」をフェッチしようとする試みにおいて、攻撃的な分岐予測機構を用いる。ここで使用する際には、命令の「ラン」とは、そのセットの中で指定されたシーケンスで実行されると予測される、１以上の命令のセットである。たとえば、フェッチ／スキャンユニット１８は、Ｌ０  Ｉ−キャッシュ１６から２４個の命令バイトのランをフェッチするであろう。各ランは、いくつかのセクションに分割され、フェッチ／スキャンユニット１８はこれらのセクションを並列でスキャンして、分岐命令を特定し、命令キュー２０のために命令スキャン情報を発生する。一実施例では、フェッチ／スキャンユニット１８は、大きな命令のランをサポートするため、クロックサイクル当り最大２つの分岐命令を予測するよう試みる。
【００３４】
命令キュー２０は、続いてのディスパッチのために、フェッチ／スキャンユニット１８により与えられる命令バイトを記憶するよう構成される。命令キュー２０は、ファーストインファーストアウト（ＦＩＦＯ）バッファとして動作してよい。一実施例では、命令キュー２０は、複数のエントリを記憶するよう構成され、各エントリは、命令のラン、ランの各セクション内の最大５つの命令を特定するスキャンデータおよびランの各セクションに対応するアドレスを含む。さらに、命令キュー２０は、整列ユニット２２への提示のため、ランの最大４つの連続したセクション内から最大６つの命令を選択するよう構成されてもよい。命令キュー２０は、たとえば２〜３のエントリを用いてよい。
【００３５】
整列ユニット２２は、命令キュー２０により特定された命令をルックアヘッド／まとめユニット２４内の発行位置のセットへ割り振るよう構成される。すなわち、整列ユニット２２は、命令キュー２０により与えられるスキャン情報に応答して、命令キュー２０によって与えられるランのセクションから各命令を形成するバイトを選択する。命令はプログラム順に発行位置へと与えられる（すなわち、プログラム順において１番目の命令が第１の発行位置に与えられ、プログラム順において第２番目の命令が第２の発行位置に与えられる、等々）。
【００３６】
ルックアヘッド／まとめユニット２４は、整列ユニット２２により与えられる命令をデコードする。ルックアヘッド／まとめユニット２４により検出されたＦＰＵ／マルチメディア命令は、ＦＰＵ／マルチメディアユニット４０へ与えられる。他の命令は、第１の命令ウィンドウ３０Ａ、第２の命令ウィンドウ３０Ｂおよび／またはロード／ストアユニット３６に与えられる。一実施例では、特定の命令が、その命令が整列ユニット２２により整列させられた発行位置に基づいて、第１の命令ウィンドウ３０Ａまたは第２の命令ウィンドウ３０Ｂへ与えられる。具体的一実施例では、発行位置からの命令が命令ウィンドウ３０ａおよび３０ｂに交互に与えられる。たとえば、発行位置０、２および４からの命令が第１の命令ウィンドウ３０Ａに与えられてよく、発行位置１、３および５からの命令が第２の命令ウィンドウ３０Ｂに与えられてよい。メモリ演算を含む命令はさらに、Ｌ１  Ｄ−キャッシュ３８へのアクセスのためロード／ストアユニット３６へ与えられる。
【００３７】
さらに、ルックアヘッド／まとめユニット２４は、特定のタイプの命令のためにルックアヘッドアドレスまたは実行結果を発生しようと試みる。ルックアヘッドアドレス／結果発生は、特にｘ８６命令セットを用いる実施例において有益であろう。ｘ８６命令セットの性質のため、典型的なコードシーケンスにおける多くの命令は、簡単な移動の一種である。この特徴の理由は、ｘ８６命令が２つのオペランドを含み、その両方がソースオペランドであり一方が行先オペランドであるからである。このため、各命令のソースオペランドの一方が実行結果でオーバーライトされる。さらに、ｘ８６命令セットは、レジスタオペランドの記憶のため極めて少数のレジスタしか指定しない。したがって、多くの命令はメモリ内に維持されるスタックへのオペランドの移動およびスタックからのオペランドの移動である。さらに、多くの命令の依存性は、ＥＳＰ／ＥＢＰレジスタに対する依存性であるが、これらのレジスタへの更新の多くは前に記憶された値へのインクリメントおよびデクリメントである。
【００３８】
これらの命令の実行を加速するため、ルックアヘッド／まとめユニット２４は、クロックサイクルの間にデコードされる各命令のためにＥＳＰおよびＥＢＰレジスタのルックアヘッドコピーを発生する。さらに、ルックアヘッド／まとめユニット２４は、各命令により選択されるレジスタオペランドのためフューチャファイル２６にアクセスする。各レジスタオペランドに対して、フューチャファイル２６は、このレジスタを行先オペランドとして有する最も最近の命令に対応するリオーダバッファ結果キューエントリを特定するタグまたは実行結果のいずれかを記憶しているであろう。
【００３９】
一実施例では、ルックアヘッド／まとめユニット２４は、（ｉ）メモリオペランドを含む、および（ii）メモリオペランドのアドレスを形成するため使用されるレジスタオペランドがフューチャファイル２６またはＥＳＰ／ＥＢＰのルックアヘッドコピーから利用可能である、各命令に対してアドレス計算を行なうよう試みる。加えて、ルックアヘッド／まとめユニット２４は、（ｉ）メモリオペランドを含まない、（ii）（インクリメントおよびデクリメントを含む）加算／減算演算を指定する、および（iii）レジスタオペランドがフューチャファイル２６またはＥＳＰ／ＥＢＰのルックアヘッドコピーから利用可能である、各命令に対して結果計算を行なうよう試みる。上記態様において、多くの簡単な演算が、命令が命令ウィンドウ３０Ａ〜３０Ｂに送られるよりも前に完了されるであろう。
【００４０】
ルックアヘッド／まとめユニット２４は、ディスパッチされてくる命令の群の間の依存性を検出し、中で発生される実行結果をすべてこれらの命令結果に依存する命令中にまとめる。さらに、ルックアヘッド／まとめユニット２４は、ルックアヘッド実行結果でフューチャファイル２６を更新する。ルックアヘッド／まとめユニット２４により完了される命令演算（すなわち、アドレス発生および／または命令結果が発生され、ロード／ストアユニット３６またはフューチャファイル２６および結果キューが更新される）は、命令ウィンドウ３０Ａ〜３０Ｂへディスパッチされない。
【００４１】
ルックアヘッド／まとめユニット２４は、ディスパッチされる各命令に対してリオーダバッファ／レジスタファイル２８内の結果キューエントリを割当てる。具体的一実施例では、リオーダバッファ／レジスタファイル２８は、ライン指向型で編成された結果キューを含み、この結果キュー内では、実行結果のための記憶場所が、同時にディスパッチ可能な命令の最大数に対応する実行結果用の十分な記憶場所を有するライン内で割当てられかつ割当て解除される。もし最大数に満たない命令がディスパッチされれば、ライン内の特定の記憶場所が空となる。その後ディスパッチされる命令は、次に利用可能なラインを使用し所定の記憶場所は空のままとする。一実施例では、結果キューは４０個のラインを含み、各ラインは同時にディスパッチされる命令に対応する最大６つの実行結果を記憶するであろう。実行結果は、リオーダバッファ／レジスタファイル２８内に含まれるレジスタファイルへと順番に結果キューからリタイアされる。さらに、リオーダバッファは分岐予測誤りを処理し、分岐命令の実行により発生される訂正されたフェッチアドレスをフェッチ／スキャンユニット１８へ送る。同様に、他の例外を発生する命令は、リオーダバッファ内で処理される。例外を発生した命令の後の命令に対応する結果は、リオーダバッファにより廃棄される。レジスタファイルは設計されたレジスタ各々に対する記憶場所を含む。たとえば、ｘ８６命令セットは８つの設計されたレジスタを規定する。このような実施例に対するレジスタファイルは８つの記憶場所を含む。レジスタファイルはさらに、マイクロコードユニットを用いる実施例においてはマイクロコードユニットにより一時レジスタとして使用される記憶場所を含むであろう。
【００４２】
フューチャファイル２６は、命令がルックアヘッド／まとめユニット２４によりディスパッチされる間、設計されたレジスタ各々の投機的状態を維持する。レジスタ行先オペランドを有する命令がルックアヘッド／まとめユニット２４によりデコードされるに伴い、命令に割当てられるリオーダバッファ／レジスタファイル２８の結果キュー部分内の記憶場所を特定するタグが、レジスタに対応するフューチャファイル２６の記憶場所へ記憶される。対応する実行結果が与えられたとき、（レジスタを更新する次の命令がまだディスパッチされていないと仮定して）その実行結果は対応する記憶場所へ記憶される。
【００４３】
一実施例では、命令キュー２０から最大６つの命令の群が選択され、１単位としてルックアヘッド／まとめユニット２４内のパイプラインを移動することが注意される。もし、この群内の１以上の命令がストール条件を発生すれば、群全体がストールする。この規則の例外は、その群の中でのＥＳＰ更新の数のためにルックアヘッド／まとめユニット２４がライン分離条件を発生する場合である。このような命令の群を、ここでは命令の「ライン」と呼ぶ。
【００４４】
命令ウィンドウ３０はルックアヘッド／まとめユニット２４から命令を受取る。命令ウィンドウ３０はその命令に対応するオペランドが受取られるまでその命令を記憶し、実行のため命令を選択する。一旦メモリ演算を含む命令のアドレスオペランドが受取られると、命令はアドレス発生ユニット３４の１つに送られる。アドレス発生ユニット３４はアドレスオペランドからアドレスを発生し、アドレスをロード／ストアユニット３６へフォワードする。一方、一旦命令の実行オペランドが受取られると、命令は実行のため機能ユニット３２の１つへ送られる。一実施例では、各整数ウィンドウ３０Ａ〜３０Ｂは命令のための２５個の記憶場所を含む。各整数ウィンドウ３０Ａ〜３０Ｂは、各整数ウィンドウに接続されるアドレス発生ユニット３４および機能ユニット３２内の最大で２つのアドレス発生および２つの機能ユニット演算を各クロックサイクルについて実行のために選択するよう構成される。一実施例では、Ｌ０  Ｉ−キャッシュ１６からフェッチされた命令は、命令ウィンドウ３０の１つに記憶されるまではフェッチされたときの順番のままで維持され、命令ウィンドウ３０の１つに記憶された時点で命令はアウトオブオーダで実行されるであろう。
【００４５】
ｘ８６命令セットを用いるプロセッサ１０の実施例では、命令はロード／ストアユニット３６のための暗黙のメモリ演算と機能ユニット３２のための明示的機能演算とを含むであろう。メモリオペランドを持たない命令はメモリ演算を全く含まず、機能ユニット３２によって処理される。ソースメモリオペランドおよびレジスタ行先オペランドを有する命令は、ロード／ストアユニット３６により処理される暗黙のロードメモリ演算および機能ユニット３２により処理される明示的機能演算を含む。メモリソース／行先オペランドを有する命令は、ロード／ストアユニット３６により処理される暗黙のロードおよびストアメモリ演算および機能ユニット３２により処理される明示的機能演算を含む。最後に、明示的機能演算を持たない命令はロード／ストアユニット３６により処理される。各メモリ演算の結果、ルックアヘッド／まとめユニット２４またはアドレス発生ユニット３４のいずれかにより処理されるアドレス発生が生じる。ここではメモリ演算および命令（すなわち機能演算）を別個に述べるであろうが、この２つは単一の命令から生じ得る。
【００４６】
アドレス発生ユニット３４は、アドレス発生演算を行ないそれによってロード／ストアユニット３６内でのメモリ演算のためのアドレスを発生するよう構成される。発生されたアドレスは結果バス４８を通じてロード／ストアユニット３６へフォワードされる。機能ユニット３２は、整数算術／論理演算を行ない分岐命令を実行するよう構成される。実行結果はフューチャファイル２６、リオーダバッファ／レジスタファイル２８および命令ウィンドウ３０Ａ〜３０Ｂへ結果バス４８を通じてフォワードされる。アドレス発生ユニット３４および機能ユニット３２は、実行されている命令を特定するため、実行されている命令に割当てられた結果キュータグを結果バス４８上で運ぶ。上記態様で、フューチャファイル２６、リオーダバッファ／レジスタファイル２８、命令ウィンドウ３０Ａ〜３０Ｂおよびロード／ストアユニット３６が、実行結果を対応する命令に対して特定するであろう。ＦＰＵ／マルチメディアユニット４０は、浮動小数点およびマルチメディア命令を実行するよう構成される。
【００４７】
ロード／ストアユニット３６は、メモリ演算を行なうためＬ１  Ｄ−キャッシュ３８とインターフェイスするよう構成される。メモリ演算は、プロセッサ１０と外部メモリとの間でのデータの転送である。メモリ演算は、やはり機能ユニット３２により実行される演算を含む、命令の暗黙の部分であってもよく、または明示的命令であってもよい。ロードメモリ演算は、外部メモリからプロセッサ１０へのデータの転送を指定し、ストアメモリ演算は、プロセッサ１０から外部メモリへのデータの転送を指定する。もし、Ｌ１  Ｄ−キャッシュ３８内でのメモリ演算についてヒットが検出されれば、外部メモリにアクセスすることなくそこでメモリ演算が完了する。ロード／ストアユニット３６は、ルックアヘッド／まとめユニット２４から（ルックアヘッドアドレス計算を通じて）またはアドレス発生ユニット３４からメモリ演算のためのアドレスを受取るであろう。この一実施例では、ロード／ストアユニット３６は、クロックサイクル当り３つのメモリ演算をＬ１  Ｄ−キャッシュ３８に対して行なうよう構成される。この実施例では、ロード／ストアユニット３６は、Ｄ−キャッシュ３８にまだアクセスしていない最大で３０のロード／ストアメモリ演算をバッファするよう構成されるであろう。この実施例はさらに、Ｄ−キャッシュ３８をミスしたロードメモリ演算をバッファするための９６個のエントリのミスバッファおよび３２個のエントリの記憶データバッファを含むよう構成されるであろう。ロード／ストアユニット３６は、ロードおよびストアメモリ演算の間、メモリ依存性チェックを行なうよう構成される。
【００４８】
Ｌ１  Ｄ−キャッシュ３８はデータを記憶するための高速キャッシュメモリである。セットアソシアティブ構成およびダイレクトマッピング構成を含む、任意の適切な構成をＬ１  Ｄ−キャッシュ３８のために使用してよい。一具体例では、Ｌ１  Ｄ−キャッシュ３８は、６４バイトのラインを用いる１２８ＫＢの２ウェイセットアソシアティブキャッシュである。Ｌ１  Ｄ−キャッシュ８３は、たとえば、ウェイごとに３２個のバンクのキャッシュメモリとして編成されてもよい。さらに、Ｌ１  Ｄ−キャッシュ３８は、Ｌ１  Ｉ−キャッシュ１４と同様、ＴＬＢを用いる線形にアドレス指定され／物理的タグが付けられるキャッシュであってよい。
【００４９】
外部インターフェイスユニット４２は、キャッシュのミスに応答して、命令バイトおよびデータバイトのキャッシュラインをプロセッサ１０へ転送するよう構成される。命令キャッシュラインは、プリデコードユニット１２へ割り振られ、データキャッシュラインはＬ１  Ｄ−キャッシュ３８に割り振られる。さらに、外部インターフェイスユニット４２は、Ｌ１  Ｄ−キャッシュ３８により廃棄されるキャッシュラインを、もしその廃棄されるキャッシュラインがプロセッサ１０に対し変更されていれば、メモリへ転送するよう構成される。図１に示すように、外部インターフェイスユニット４２は、バスインターフェイス４６を介してコンピュータシステムへインターフェイスすると同時にＬ２インターフェイス４４を介して外部Ｌ２キャッシュにインターフェイスするよう構成される。一実施例では、バスインターフェイスユニット４６はＥＶ／６バスインターフェイスを含む。
【００５０】
次に図２を参照し、フェッチ／スキャンユニット１８の一実施例のブロック図を示す。他の実施例も可能であり企図される。図２に示すように、フェッチ／スキャンユニット１８は、フェッチ制御ユニット５０、複数の次選択ブロック５２Ａ〜５２Ｃ、命令選択マルチプレクサ（ｍｕｘ）５４、命令スキャナ５６、分岐スキャナ５８、分岐履歴テーブル６０、分岐選択ｍｕｘ６２、リターンスタック６４、間接アドレスキャッシュ６６、およびフォワードまとめユニット６８を含む。フェッチ制御ユニット５０は、Ｌ１  Ｉ−キャッシュ１４、Ｌ０  Ｉ−キャッシュ１６、間接アドレスキャッシュ６６、リターンスタック６４、分岐履歴テーブル６０、分岐スキャナ５８および命令選択ｍｕｘ５４と結合される。次選択ブロック５２ＡはＬ１  Ｉ−キャッシュ１４と結合され、他方、次選択ブロック５２Ｂ〜５２ＣはＬ０  Ｉ−キャッシュ１６と結合される。各次選択ブロック５２は、命令選択ｍｕｘ５４と結合され、命令選択ｍｕｘ５４はさらに、分岐スキャナ５８および命令スキャナ５６と結合される。命令スキャナ５６は命令キュー２０と結合される。分岐スキャナ５８は分岐履歴テーブル６０、リターンスタック６４および分岐選択ｍｕｘ６２と結合される。分岐選択ｍｕｘ６２は間接アドレスキャッシュ６６と結合される。分岐履歴テーブル６０および分岐スキャナ５８は、フォワードまとめユニット６８と結合され、フォワードまとめユニット６８は命令キュー２０と結合される。
【００５１】
フェッチ制御ユニット５０は、分岐スキャナ５０、分岐履歴テーブル６０、リターンスタック６４および間接アドレスキャッシュ６６から（ターゲットアドレスおよびテイクン／ノットテイクン予測を含む）分岐予測情報を受取る。フェッチ制御ユニット５０は、分岐予測情報に応答して、Ｌ０  Ｉ−キャッシュ１６のためのフェッチアドレスを発生し、Ｌ１  Ｉ−キャッシュ１４のためのフェッチアドレスまたはプリフェッチアドレスを発生する。一実施例では、フェッチ制御ユニット５０は、Ｌ０  Ｉ−キャッシュ１６のために２つのフェッチアドレスを発生する。第１のフェッチアドレスは、分岐スキャナ５８により特定される第１の分岐命令（もしあれば）に対応するターゲットアドレスとして選択される。第２のフェッチアドレスは、前のクロックサイクル中に選択されたフェッチアドレスの次のアドレスである（すなわち、命令選択ｍｕｘ５４により選択されたランに対応するフェッチアドレス）。
【００５２】
Ｌ０  Ｉ−キャッシュ１４は、２つのフェッチアドレスに対応するキャッシュライン（およびプリデコード情報）と、これらのキャッシュライン各々の次のキャッシュライン（およびプリデコード情報）とを、次選択ブロック５２Ｂ〜５２Ｃへ与える。特に、次選択ブロック５２Ｂは、次のアドレスに対応する次のキャッシュラインおよびこの次のキャッシュラインの次のインクリメントしたキャッシュラインを受ける。次選択ブロック５２Ｃは、ターゲットアドレスに対応するターゲットキャッシュラインとターゲットキャッシュラインの次のキャッシュラインとを受ける。さらに、次選択ブロック５２Ｂ〜５２Ｃは、対応するフェッチアドレスのオフセット部を受ける。各次選択ブロック５２Ｂ〜５２Ｃは、対応するフェッチアドレスのオフセット部を含むランセクションで始めて、受取ったキャッシュラインから命令バイト（および対応するプリデコード情報）のランを選択する。各フェッチアドレスのオフセット部はキャッシュラインのどこからでも始まり得るので、選択されたランは、フェッチされたキャッシュライン部およびフェッチされたキャッシュラインの次のキャッシュライン部を含み得る。したがって、フェッチされたキャッシュラインおよび次のキャッシュラインの両方が次選択ブロック５２Ｂ〜５２Ｃにより受取られる。
【００５３】
同様に、次選択ブロック５２Ａは、Ｌ１  Ｉ−キャッシュ１４からプリフェッチされたキャッシュライン（および対応するプリデコード情報）を受け、そこから命令のランを選択する。１つのキャッシュラインがＬ１  Ｉ−キャッシュ１４からプリフェッチされるので、そこから選択されるランは、もしプリフェッチアドレスのオフセット部がキャッシュラインの終りに近ければ、含むのはラン全体よりも少ないであろう。Ｌ０  Ｉ−キャッシュ１６からのフェッチキャッシュラインは、対応するアドレスがフェッチ制御ユニット５０によって発生されるため、同一のクロックサイクル中に与えられるであろうが、プリフェッチキャッシュラインはＬ１  Ｉ−キャッシュ１４のサイズがより大きくアクセスタイムがより遅いために１クロックサイクル遅延され得ることが留意される。Ｌ１  Ｉ−キャッシュ１４は、プリフェッチされたキャッシュラインを次選択ブロック５２Ａへ与えるのに加えて、Ｌ０  Ｉ−キャッシュ１６へプリフェッチされたキャッシュラインを与える。もし、プリフェッチされたキャッシュラインが既にＬ０  Ｉ−キャッシュ１６内に記憶されていれば、Ｌ０  Ｉ−キャッシュ１６はプリフェッチされたキャッシュラインを廃棄するであろう。しかしながら、もしプリフェッチされたキャッシュラインがまだＬ０  Ｉ−キャッシュ１４内に記憶されていなければ、プリフェッチされたキャッシュラインはＬ０  Ｉ−キャッシュ１６へ記憶される。上記態様で、現在アクセスされているであろうキャッシュラインが、Ｌ０  Ｉ−キャッシュ１６からの迅速なアクセスのためにＬ０  Ｉ−キャッシュ１６へ送られる。具体的一実施例によれば、Ｌ０  Ｉ−キャッシュ１６は８つのエントリのフルアソシアティブキャッシュ構造を含む。フルアソシアティブ構造は、Ｌ０  Ｉ−キャッシュ１６に含まれるキャッシュラインの数が比較的少ないので用いられ得る。他の実施例では他の編成（たとえばセットアソシアティブまたはダイレクトマッピング）を用いてもよい。
【００５４】
フェッチ制御ユニット５０は、命令選択ｍｕｘ５４を制御することによって、分岐予測情報に応答して次選択ブロック５２の１つにより与えられる命令ランを選択する。以下にさらに詳細に説明するように、フェッチ制御ユニット５０はクロックサイクルの早期において分岐スキャナ５８、リターンスタック６４および間接アドレスキャッシュ６６から（この実施例では）ターゲットアドレスを受取り、かつ、分岐スキャナ５８により特定される第１の分岐命令のオペコードバイトの少なくとも一部を受取る。フェッチ制御ユニット５０は、オペコードバイトの部分をデコードして、さまざまなターゲットアドレスソースから、Ｌ０  Ｉ−キャッシュ１６からフェッチされるべきターゲットアドレスを選択し、選択されたターゲットアドレスをＬ０  Ｉ−キャッシュ１６へ与える。並行して、前のクロックサイクル中に選択されたフェッチアドレスの次のアドレス（前のクロックサイクルからの分岐予測に依存して、ターゲットアドレスまたは前のクロックサイクルの次のアドレスのいずれか）が計算され、Ｌ０  Ｉ−キャッシュ１６へ与えられる。クロックサイクルの後の方で、分岐予測情報（すなわちテイクンまたはノットテイクン）が分岐履歴テーブル６０により与えられる。もし、Ｌ０  Ｉ−キャッシュ１６からフェッチされたターゲットアドレスに対応する分岐命令が、テイクン予測されれば、フェッチ制御ユニット５０は次選択ブロック５２Ｃにより与えられた命令ランを選択する。一方、もし分岐命令がノットテイクン予測されれば、次選択ブロック５２Ｂにより選択された命令ランが選択される。もし、前のクロックサイクルにおいて、予測されたフェッチアドレスがＬ０  Ｉ−キャッシュ１６でミスしＬ１  Ｉ−キャッシュ１４からフェッチされていれば、次選択ブロック５２Ａにより与えられる命令ランが選択される。さらに、分岐命令が３２ビット変位または間接ターゲットアドレス発生を有すること、またはＬ０  Ｉ−キャッシュミスがフェッチされたことに応答して、命令ランがフェッチされていたならば、Ｌ１  Ｉ−キャッシュ１４からの命令ランが選択される。
【００５５】
選択された命令ランは、命令スキャナ５６および分岐スキャナ５８に与えられる。命令スキャナ５６は、選択された命令ランに対応するプリデコード情報をスキャンし、命令ラン内の命令を特定する。一実施例では特に、命令スキャナ５６は並行して各ランセクションに対応する開始ビットをスキャンし、各ランセクション内の最高５つの命令を特定する。特定された命令に対するポインタ（ランセクション内でのオフセット）が発生される。ポインタ、命令バイトおよび（ランセクション当り１つの）アドレスが命令スキャナ５６によって命令キュー２０へ送られる。もし、特定のランセクションが６以上の命令を含んでいれば、特定のランセクションの後のランセクションに対応する情報は無効とされ、この特定のランセクションおよびその後のランセクションが次のクロックサイクルの間に再びスキャンされる。
【００５６】
分岐スキャナ５８は、命令スキャナ５６と並行して、命令ランをスキャンする。分岐スキャナ５８は命令ランの開始ビットおよび転送制御ビットをスキャンし、命令ラン中の最初の２つの分岐命令を特定する。上述のように、分岐命令は、設定されている（開始ビットにより特定される）命令の開始バイトに対応する転送制御ビットにより特定される。第１の２つの分岐命令を見出すと、分岐スキャナ５８は命令が相対分岐命令であるとみなし、分岐命令の開始バイトの後の命令バイトから、対応するエンコードされたターゲットアドレスを選択する。ｘ８６命令セットを用いる実施例においては、９ビットのターゲットアドレス（変位バイトおよび対応する転送制御ビット）が選択され、同様に３２ビットのターゲットアドレスが選択される。さらに、開始ビットおよび転送制御ビットにより特定されたオペコードバイトの少なくとも一部が選択される。ターゲットアドレスおよびオペコードバイトは、Ｌ０  Ｉ−キャッシュ１６からのフェッチのためのターゲットアドレスの選択において使用するため、フェッチ制御ユニット５０へ与えられる。（各分岐命令を含むランセクションのフェッチアドレスおよびセクション内の分岐命令の位置から決定される）各分岐命令のフェッチアドレスは、各分岐命令に対応するテイクン／ノットテイクン予測を選択するため分岐履歴テーブル６０へ与えられる。さらに、各分岐命令に対応するフェッチアドレスが分岐選択ｍｕｘ６２へ与えられ、さらに間接アドレスキャッシュ６６へ与えられる。各分岐命令のターゲットアドレスは、フォワードまとめユニット６８へ与えられる。一実施例によれば、分岐スキャナ５８は、第１の２つの分岐命令について並行して各ランセクションをスキャンするよう構成され、その後スキャン結果を組合せてラン内の第１の２つの分岐命令を選択するよう構成される。
【００５７】
分岐スキャナ５８はさらに、クロックサイクル中にサブルーチン呼出命令がスキャンされるか否かを判定するよう構成されてもよい。分岐スキャナ５８は、検出されたサブルーチン呼出命令に続く次の命令のフェッチアドレスをリターンスタック６４に記憶するためリターンスタック６４へフォワードするであろう。
【００５８】
一実施例においては、もしラン内に３以上の分岐命令があれば、次の分岐命令を特定するため、次のクロックサイクル中にランが再びスキャンされる。
【００５９】
特定された分岐命令のフェッチアドレスは、各命令についてテイクン／ノットテイクン予測を判定するため、分岐履歴テーブル６０へ与えられる。分岐履歴テーブル６０は、以前に検出された分岐命令の挙動に対応する複数のテイクン／ノットテイクン予測子を含む。最新の予測の履歴を維持し、これらの最新の予測と分岐命令に対応するフェッチアドレスの部分とを排他的論理和演算することによって、予測子の１つが選択される。最も新しくない（最も古い）予測は、フェッチアドレスの部分の中の最上位ビットと排他的論理和演算され、以下同様に、最新の予測までフェッチアドレスの部分の中の最下位ビットと排他的論理和演算される。クロックサイクルごとに２つの予測子が選択されるので、第２の分岐命令に対応する予測子は、（対応するフェッチアドレスの最下位ビットとの排他的論理和演算のため）第１の分岐命令の予測に依存する。分岐履歴テーブル６０は、選択される可能性のある予測子両方を（すなわち、第１の分岐命令がノットテイクン予測されるならば選択されるであろう予測子および第１の分岐命令がテイクン予測されるならば選択されるであろう予測子を）選択し、次に、第１の分岐命令について選択された実際の予測に基づいて２つの予測子の一方を選択することにより、第２の予測子を与える。
【００６０】
分岐履歴テーブル６０は、機能ユニット３２Ａ〜３２Ｄから分岐命令の実行に関する情報を受取る。実行された分岐命令に対応する最近の予測の履歴および実行された分岐命令のフェッチアドレスが、更新するべき予測子および実行された分岐命令のテイクン／ノットテイクン結果を選択するために与えられる。分岐履歴テーブル６０は、対応する予測子を選択し、テイクン／ノットテイクン結果に基づいて予測子を更新する。一実施例においては、分岐履歴テーブルは２モードカウンタを記憶する。２モードカウンタは、最小値および最大値において飽和する飽和カウンタである（すなわち、最小値に続いてデクリメントおよび最大値に続いてインクリメントしても、カウンタには変化が起らない）。分岐命令がテイクンであるごとに、対応するカウンタがインクリメントされ、分岐命令がノットテイクンであるごとに、対応するカウンタがデクリメントされる。カウンタの最上位ビットは、テイクン／ノットテイクン予測を示す（たとえばセットであればテイクン、クリアであればノットテイクン）。一実施例では、分岐履歴テーブル６０は６４Ｋの予測子を記憶し、１６個の最も最近の予測の履歴を維持する。各クロックサイクルにおいて、そのクロックサイクル中に選択された予測は履歴にシフトされ、最も古い予測は履歴からシフトアウトされる。
【００６１】
リターンスタック６４が、検出されたサブルーチン呼出命令に対応するリターンアドレスを記憶するため使用される。リターンスタック６４は、分岐スキャナ５８からサブルーチン呼出命令のフェッチアドレスを受取る。（リターンスタック６４に与えられたフェッチアドレスから計算された）呼出命令の次のバイトのアドレスは、リターンスタック６４の一番上に置かれる。リターンスタック６４は、もしリターン命令が分岐スキャナ５８およびフェッチ制御ユニット５０により検出されたならば、リターンスタックの一番上に記憶されたアドレスを、ターゲットアドレスとしての選択のためにフェッチ制御ユニット５０へ与える。上記態様において、各リターン命令は、最も最近に検出された呼出命令に対応するアドレスをターゲットアドレスとして受取る。一般にｘ８６命令セットにおいては、呼出命令は、呼出命令の次のアドレスがｘ８６アーキテクチャにより規定されるスタックの上に置かれることを指定する転送制御命令である。リターン命令は、スタックの一番上からターゲットアドレスを選択する命令である。一般に、呼出命令およびリターン命令は、コードシーケンス内で（それぞれ）サブルーチンに入るため使用され、サブルーチンから出るため使用される。リターンスタック６４内に呼出命令に対応するアドレスを置き、リターンスタック６４の一番上のアドレスをリターン命令のターゲットアドレスとして使用することにより、リターン命令のターゲットアドレスが正確に予測され得る。一例においては、リターンスタック６４は１６個のエントリを含むであろう。
【００６２】
間接アドレスキャッシュ６６は、間接分岐命令の前の実行に対応するターゲットアドレスを記憶する。間接分岐命令に対応するフェッチアドレスおよび間接分岐命令の実行に対応するターゲットアドレスは、機能ユニット３２Ａ〜３２Ｄにより間接アドレスキャッシュ６６へ与えられる。間接アドレスキャッシュ６６は、対応するフェッチアドレスにより索引されるターゲットアドレスを記憶する。間接アドレスキャッシュ６６は、（間接分岐命令の検出に応答して）分岐選択ｍｕｘ６２により選択されたフェッチアドレスを受け、もしフェッチアドレスが間接アドレスキャッシュ６６でヒットすれば、対応するターゲットアドレスをフェッチ制御ユニット５０へ与える。一例においては、間接アドレスキャッシュ６６は、３２個のエントリを含むであろう。
【００６３】
企図される一実施例によれば、もし間接アドレスキャッシュ６６がフェッチアドレスのミスを検出すれば、間接アドレスキャッシュ６６はエントリの１つからターゲットアドレスを選択して提供するよう構成されてもよい。上記態様において、間接分岐命令がデコードされる場合に、分岐ターゲットの「推測」が与えられる。間接分岐命令の実行によるアドレスを待つよりもむしろ、推測からのフェッチが行なわれるであろう。代替的に、企図される他実施例では、間接分岐命令の実行から与えられるアドレスを待つ。
【００６４】
なお、もしエンコードされたターゲットアドレスが選択されるならば、実際のターゲットアドレスはＬ０  Ｉ−キャッシュ１６へ提示されるであろう。フェッチ制御ユニット５０は、可能性のある上の／下のターゲットアドレス各々を予め計算しエンコードされたターゲットアドレスに基づいて正しいアドレスを選択するように構成されてもよい。代替的に、フェッチ制御ユニット５０は、どのＬ０  Ｉ−キャッシュの記憶場所が上のおよび下のキャッシュラインを記憶しているのかを記録しタグ比較なしに直接記憶場所を選択してもよい。
【００６５】
フォワードまとめユニット６８は、ターゲットアドレスならびに、選択された分岐命令各々の命令ラン内の位置およびテイクン／ノットテイクン予測を受取る。フォワードまとめユニット６８は、ラン内のどの命令が、受取られた予測に基づいて取消されるべきであるかを判定する。もし、第１の分岐命令がテイクン予測され後ろ向きであれば（すなわち変位が負であれば）、第１の分岐命令の後のすべての命令が取消される。もし第１の分岐命令がテイクン予測され前向きであるが変位が小さければ（たとえば命令ランの中であれば）、第１の分岐命令とターゲットアドレスとの間の命令が取消される。第２の分岐命令は、もし第１の分岐命令の予測によりやはりラン内にあれば、同様に処理される。ラン内の命令についての取消表示は、命令キュー２０に設定される。
【００６６】
次に図３を参照し、ルックアヘッド／まとめユニット２４の一実施例のブロック図を示す。他の実施例も可能であり企図される。図３に示すように、ルックアヘッド／まとめユニット２４は、複数のデコードユニット７０Ａ〜７０Ｆ、ＥＳＰ／ＥＢＰルックアヘッドユニット７２、即値フィールド発生ユニット７３、ライン内依存性チェックユニット７５、ルックアヘッドアドレス／結果計算ユニット７４、ディスパッチ制御ユニット７６およびオペランドまとめユニット７８を含む。デコードユニット７０Ａ〜７０Ｆは、整列ユニット２２からの命令を受取るよう結合される。デコードユニット７０Ａ〜７０Ｆは、デコードされた命令および／または命令の情報を、ＦＰＵ／マルチメディアユニット４０、ＥＳＰ／ＥＢＰルックアヘッドユニット７２、即値フィールド発生ユニット７３、ライン内依存性チェックユニット７５、フューチャファイル２６およびルックアヘッドアドレス／結果計算ユニット７４に与えるよう結合される。ＥＳＰ／ＥＢＰルックアヘッドユニット７２は、フューチャファイル２６、即値フィールド発生ユニット７３およびライン内依存性チェックユニット７５と同様に、ルックアヘッドアドレス／結果計算ユニット７４と結合される。ルックアヘッドアドレス／結果計算ユニット７４はさらに、ロード／ストアユニット３６およびディスパッチ制御ユニット７６と結合される。ディスパッチユニット７６はさらに、オペランドまとめユニット７８、フューチャファイル２６、ロード／ストアユニット３６およびリオーダバッファ２８と結合される。オペランドまとめユニット７８は、命令ウィンドウ３０と結合される。
【００６７】
各デコードユニット７０Ａ〜７０Ｆは、整列ユニット２２が命令を整列させる発行位置を形成する。図面を簡単にするため図３を通じて特に示していないが、特定の命令が、その命令がルックアヘッド／まとめユニット２４を通じて移動する間その発行位置内に留まり、もしルックアヘッド／まとめユニット２４内で完了されなければ命令ウィンドウ３０Ａ〜３０Ｂの１つに与えられる。
【００６８】
デコードユニット７０Ａ〜７０Ｆは、ＦＰＵ／マルチメディア命令をＦＰＵ／マルチメディアユニット４０に与える。しかし、もしＦＰＵ／マルチメディア命令がメモリオペランドを含むと、メモリ演算はさらに、命令に応答してルックアヘッドアドレス／結果計算ユニット７４を通じてロード／ストアユニット３６へディスパッチされる。さらに、もし、メモリ演算のためのアドレスがルックアヘッドアドレス／結果計算ユニット７４により発生され得なければ、アドレス発生演算が、命令ウィンドウ３０Ａ〜３０Ｂを通じてアドレス発生ユニット３４Ａ〜３４Ｄの１つへディスパッチされる。さらに、リオーダバッファ２８内のエントリは、プログラムの順序を維持するためＦＰＵ／マルチメディア命令に割当てられる。一般に、リオーダバッファ２８内のエントリは、デコードユニット内で受取られる各命令について、デコードユニット７０Ａ〜７０Ｆから、割当てられる。
【００６９】
各デコードユニット７０Ａ〜７０Ｆは、その中でデコードされる命令のオペコードおよびｍｏｄ  ｒ／ｍバイトをＥＳＰ／ＥＢＰルックアヘッドユニット７２へ与えるよう構成され得る。ＥＳＰ／ＥＢＰルックアヘッドユニット７２は、（ｉ）命令がＥＳＰまたはＥＢＰレジスタをソースオペランドとして使用するか否か、および（ｉｉ）命令がＥＳＰ／ＥＢＰレジスタを変更するか否か（すなわち、ＥＳＰまたはＥＢＰレジスタを行先オペランドとして有するか否か）を判定するであろう。ＥＳＰ／ＥＢＰルックアヘッドユニット７２は、ＥＳＰレジスタまたはＥＢＰレジスタをソースオペランドとして使用する各命令のためにルックアヘッド情報を発生する。ルックアヘッド情報は、対応するレジスタの現在のルックアヘッド値に加えられるべき定数および／または前の発行位置内の命令に対する依存性の表示を含み得る。一実施例においては、ＥＳＰ／ＥＢＰルックアヘッドユニット７２は、デコードユニット７０Ａ〜７０Ｆにより与えられる命令のラインが、（ｉ）（定数値でＥＳＰレジスタをデクリメントする）３以上のプッシュ演算、（ii）（定数値でＥＳＰレジスタをインクリメントする）３以上のポップ演算、（iii）ＥＳＰレジスタへの２以上の移動、（iv）ＥＳＰを行先として有する２以上の算術／論理命令または（ｖ）ＥＳＰを更新する４以上の命令を含まない限り、ルックアヘッド情報を与えるよう構成される。これらの制約の１つが超えられると、ＥＳＰ／ＥＢＰルックアヘッドユニット７２は、次のクロックサイクルまで、制約を超えていない命令より先の命令をストールするよう構成される（「スプリットライン」の例）。同じクロックサイクル内だがより早い発行位置にある、ＥＳＰレジスタをインクリメントまたはデクリメントする命令の後にある命令については、ＥＳＰ／ＥＢＰルックアヘッドユニット７２は、先行する命令のＥＳＰレジスタに対する変更をすべて組合わせたものを示す定数を発生する。ＥＳＰまたはＥＢＰレジスタにおける移動または算術演算の後の命令については、ＥＳＰ／ＥＢＰルックアヘッドユニット７２は、移動または算術命令を含む発行位置を特定する値を発生する。
【００７０】
ルックアヘッド値は、発行位置内の命令に対応する（したがって、さもなくばアドレス発生ユニット３４Ａ〜３４Ｄの１つにより行なわれるであろうアドレス発生演算を禁止する）ルックアヘッドアドレス、または、命令に対応する（それによってパイプライン内でより早期にフューチャファイル２６へルックアヘッド状態を与える）ルックアヘッド結果のいずれかを発生するため、ルックアヘッドアドレス／結果計算ユニット７４により使用され得る。アドレス発生演算を取除くおよび／または機能ユニット３２Ａ〜３２Ｄおよびアドレス発生ユニット３４Ａ〜３４Ｄ内での命令演算の実行よりも前にルックアヘッド状態を与えることによって、性能を上げることができよう。多くのｘ８６コードシーケンスは、算術／論理演算を伴わないソースから行先への値の移動などの比較的簡単な演算またはレジスタオペランドの小さな定数による加算／減算もしくはインクリメント／デクリメントなどの簡単な算術演算を多数含む。したがって、機能ユニット３２Ａ〜３２Ｄは、典型的には、より複雑な算術／論理演算および分岐命令を実行するであろうし、アドレス発生ユニット３４Ａ〜３４Ｄは、典型的には、より複雑なアドレス発生を行なうであろう。したがって、命令スループットが上がるであろう。
【００７１】
即値フィールド発生ユニット７３は、その中でデコードされる命令のラインから即値データフィールドを抽出するよう構成されるであろう（ここで使用する場合には、即値データとは、アドレス発生において使用するための変位または機能的命令演算において使用するための即値データであろう）。即値データは、ルックアヘッドアドレス／結果計算ユニット７４に与えられる。さらに、デコードユニット７０Ａ〜７０Ｆは、命令によって使用されるレジスタオペランド指示子を特定しレジスタオペランド要求をフューチャファイル２６へ与えるよう構成される。フューチャファイル２６は、各レジスタオペランドに対して、対応する投機的レジスタ値または結果キュータグをリターンする。ライン内依存性チェックユニット７５は、１ラインの命令間での依存性チェックを行なう。オペランドまとめユニット７８は、適切なオペランドを各命令に対して割振るため、ライン内依存性チェックユニット７５により発生された依存性情報を受取る。
【００７２】
ルックアヘッドアドレス／結果計算ユニット７４は、ＥＳＰ／ＥＢＰルックアヘッドユニット７２からルックアヘッド値を受取り、即値フィールド発生ユニット７３から即値データを受取り、フューチャファイル２６から投機的レジスタ値または結果キュータグを受取る。ルックアヘッドアドレス／結果計算ユニット７４は、命令のメモリオペランドに対応するルックアヘッドアドレスか、または命令がメモリオペランドを含まない場合ならばルックアヘッド結果のいずれかを発生しようと試みる。たとえば、簡単なレジスタからレジスタへの移動演算は、ソースオペランドを行先オペランドとして与えることによって（機能ユニット３２およびアドレス発生ユニット３４について）完了できる。メモリ演算およびレジスタ行先を用いる移動演算は、アドレス発生がルックアヘッドアドレス／結果計算ユニット７４により行なわれ得るのであれば、（機能ユニット３２およびアドレス発生ユニット３４に関して）完了され得る。一実施例においては、ルックアヘッドアドレス／結果計算ユニット７４は、変位のみ、レジスタおよび変位、ＥＳＰ／ＥＢＰおよび変位、ならびに索引またはベースレジスタがＥＳＰ／ＥＢＰである場合以外についてはスケール−インデックス−ベースアドレッシングモードを使用してアドレスを計算するよう構成される。ロード／ストアユニット３６は、メモリ演算を行ないメモリ演算の結果を結果バス４８を通じてリターンする。メモリ演算に対してルックアヘッドアドレス／結果計算ユニット７４により全くアドレスが発生されなかった場合でも、ルックアヘッドアドレス／結果計算ユニット７４は、メモリ演算のためにロード／ストアユニット３６内の記憶場所を割当てるため、メモリ演算および対応する結果キュータグをロード／ストアユニット３６へ示す。
【００７３】
ソースオペランドをインクリメントもしくはデクリメントする、ソースオペランドに小さな即値を加算／減算する、または２つのレジスタソースオペランドを加算／減算する、簡単な算術演算はさらに、ソースオペランドがフューチャファイル２６から利用可能であれば（すなわち投機的レジスタ値が結果キュータグの代わりに受取られるのであれば）ルックアヘッドアドレス／結果計算ユニット７４を通じて完了され得る。ルックアヘッドアドレス／結果計算ユニット７４により完了された命令は、完了されたことが表示され、リオーダバッファ２８内のエントリが割当てられるが、命令ウィンドウ３０にディスパッチャはされない。ルックアヘッドアドレス／結果計算ユニット７４は、たとえば、ルックアヘッド値、即値データおよび投機的レジスタ値の中から選択するため、対応する制御論理とともに各発行位置のための加算器を含み得る。この実施例によると、条件フラグの発生のために、簡単な算術演算がやはり命令ウィンドウ３０へフォワードされ得ることが注意される。しかし、ルックアヘッドアドレス／結果計算ユニット７４内で機能的結果を発生すると、早期にルックアヘッド状態が与えられ、その後のアドレス発生／命令を同様に早期に行なうことが可能である。
【００７４】
ルックアヘッドアドレス／結果計算ユニット７４は、フューチャファイルのコピーに加えて、ＥＳＰ／ＥＢＰレジスタの別個のルックアヘッドコピーを維持するよう構成されてもよい。しかし、もし、ルックアヘッドアドレス／結果計算ユニット７４により計算できないＥＳＰ／ＥＢＰへの更新が検出されたならば、ＥＳＰ／ＥＢＰの新しいルックアヘッドコピーがフューチャファイル２６から（規定されない態様でのＥＳＰ／ＥＢＰの更新の命令の実行後に）与えられ得るようになるまで、その後の命令がストールされ得る。
【００７５】
ディスパッチ制御ユニット７６は、パイプラインフロー制御を行なうため、命令の群がディスパッチされたか否かを判定する。ディスパッチ制御ユニット７６は、命令ウィンドウ３０から命令のカウントを受取り、ロード／ストアユニット３６からロード／ストアのカウントを受取り、可能な最大数の命令がディスパッチ制御ユニット７６、命令ウィンドウ３０およびロード／ストアユニット３６の間をパイプライン段を通過中であるとみなし、命令ウィンドウ３０および／またはロード／ストアユニット３６内でディスパッチされるべき命令が、その中に到達したときに命令を記憶するために空間が利用可能であろうか否かを判定する。もし、ディスパッチ制御ユニット７６が、ロード／ストアユニット３６内でおよび命令ウィンドウ３０のいずれかで利用可能となるであろう空間が不十分であると判定すれば、ディスパッチ制御ユニット７６の受取る命令のカウントが十分に低い値にまで減じられるまでディスパッチがストールされる。
【００７６】
ディスパッチ制御ユニット７６を通じてのディスパッチのための命令の解放に際し、フューチャファイル２６およびリオーダバッファ２８は、投機的に発生されたルックアヘッド結果で更新される。一実施例においては、サポートされる非ＥＳＰ／ＥＢＰ更新の数は、フューチャファイル２６のポートの数を制限するため、たとえば２に限定されるであろう。さらに、オペランドまとめユニット７８は、投機的に発生されたルックアヘッド結果を、前に判定されたライン内依存性により示されるようにこれらの結果に依存する、その後の同時にデコードされる命令へとまとめる。上記態様において、投機的に発生されたルックアヘッド結果は、機能ユニット３２Ａ〜３２Ｄからその後フォワードされないであろうから、依存性の命令は、投機的に発生されたルックアヘッド結果を受取る。ルックアヘッドアドレス／結果計算ユニット７４により完了されないこれらの命令は、次に、これらの命令が整列ユニット２２より整列させられた発行位置に基づいて、命令ウィンドウ３０Ａ〜３０Ｂの１つへ送られる。
【００７７】
なお、プロセッサ１０の一実施例は、マイクロコードルーチンと呼ばれる、複数のより簡単な命令をディスパッチすることによって複雑な命令を実行するための（図示しない）マイクロコードユニットを用いてもよい。デコードユニット７０Ａ〜７０Ｆは、どの命令がマイクロコード命令であるかを検出しマイクロコード命令をマイクロコードユニットへ割振るよう構成されてもよい。たとえば、有効な命令を受取ったデコードユニット７０からの直接デコードされた命令出力がないことは、対応する有効な命令に対し実行を開始するようにというマイクロコードユニットに対する表示であり得る。さらに、図２および図３にさまざまな記憶装置が図示されていることが注意される（たとえば、図２の装置７９Ａ、７９Ｂおよび同様の装置ならびに図３の装置７９Ｃ、７９Ｄおよび同様の装置）。記憶装置は、パイプライン段を分離するために使用され得る、ラッチ、レジスタ、フリップフロップなどを表わす。しかし、図２および図３に示す特定のパイプライン段は、プロセッサ１０の一実施例のための適当なパイプライン段の一実施例にすぎない。他の実施例では他のパイプライン段を用い得る。
【００７８】
ｘ８６命令セットおよびアーキテクチャが、上で例として使用され、以下で例として使用されるであろうが、どのような命令セットおよびアーキテクチャでも使用できることが注意される。さらに、変位は（ここで例として使用される８ビットサイズおよび３２ビットサイズに加え）任意の所望のサイズであり得る。さらに、ここでキャッシュラインのフェッチが説明されるであろうが、所望であれば、フェッチされることが望ましいキャッシュラインのサイズおよびバイトの数に基づいて、キャッシュラインはセクタでもあり得、セクタがフェッチされてもよいことが注意される。
【００７９】
次に図４を参照し、デコードユニット７０Ａ、ＥＳＰ／ＥＢＰルックアヘッドユニット７２、ライン内依存性チェックユニット７５、即値フィールド発生ユニット７３および命令バイト記憶装置８０を示すブロック図が示される。プロセッサ１０の一実施例による図示されるブロック間の相互接続は図４に示される。付加的な、代替的なおよび／または異なった相互接続方式を用いる他の実施例が企図される。図４の実施例では、デコードユニット７０Ａが、オペコード／ｍｏｄ  Ｒ／Ｍバス８２Ａ、ソースおよび行先レジスタ指示子バス８４Ａ、ならびに開始位置バス８６Ａと結合される。開始位置バス８６Ａおよびオペコード／ｍｏｄ  Ｒ／Ｍバス８２Ａは、即値フィールド発生ユニット７３と結合され、即値フィールド発生ユニット７３はさらに命令バイト記憶装置８０と結合される。オペコード／ｍｏｄ  Ｒ／Ｍバス８２Ａはさらに、ＥＳＰ／ＥＢＰルックアヘッドユニット７２と結合される。ソースおよび行先レジスタ指示子バス８４Ａは、ライン内依存性チェックユニット７５と結合され、ライン内依存性チェックユニット７５はさらに、他のデコードユニット７０からの同様のソースおよび行先レジスタ指示子バス８４Ｂ〜８４Ｆと結合される。ＥＳＰ／ＥＢＰルックアヘッドユニット７２は、ルックアヘッドＥＳＰ／ＥＢＰバス８８および定数バス９０Ａと結合され、ルックアヘッドＥＳＰ／ＥＢＰバス８８および定数バス９０Ａはさらに、ルックアヘッドアドレス／結果計算ユニット７４と結合される。ライン内依存性チェックユニット７５は、依存性バス９２と結合され、依存性バス９２はさらにオペランドまとめユニット７８と結合される。即値フィールド発生ユニット７３は、即値フィールドバス９４Ａおよび比較ライン９６Ａと結合される。比較ライン９６Ａは、オペランドまとめユニット７８と結合され、即値フィールドバス９４Ａはルックアヘッドアドレス／結果計算ユニット７４と結合される。参照番号の後に文字を付して示すバスおよびラインは、デコードユニット７０Ａによりデコードされる命令に対応する。デコードユニット７０Ｂ〜７０Ｆにより同時にデコードされる命令に対応して同様の相互接続が設けられるであろう。図面では簡単にするため、同時にデコードされる他の命令に対応する相互接続は、図４（およびそれに続く他の図）では必ずしも示していない。しかし、図示する相互接続と同様の相互接続がライン内の他の命令についても設けられるであろう。
【００８０】
デコードユニット７０Ａは、命令整列ユニット２２により与えられた命令をデコードし、命令整列ユニット２２によりデコードユニット７０Ａ〜７０Ｆに同時に与えられた命令のラインに対応する命令バイト内の命令の開始位置を検出する。ラインに対応する命令バイトは、（たとえばレジスタであり得る）命令記憶装置８０内に記憶され、デコードユニット７０Ａがそのデコードを行なうためにデコードユニット７０Ａにより使用される命令の部分を受取る。一例においては、デコードユニット７０Ａは、デコードされる命令に対応するプレフィックス、オペコードおよびｍｏｄ  Ｒ／Ｍバイトと同様にラインに対応する命令バイト内の命令の開始位置を受取る。他の実施例では、その実施例において用いられる命令セットのアーキテクチャに依存して命令の異なった部分が受取られるであろう。
【００８１】
デコードユニット７０Ａは、命令のためのソースおよび行先レジスタオペランド指示子を特定し、ソースおよび行先レジスタ指示子バス８４Ａ上で指示子を運ぶ。好ましい実施例においては、命令は、最大２つのソースオペランドおよび１つの行先オペランドを有するであろう。もし命令が、メモリオペランドを含むのであれば、ソースオペランドはアドレスオペランドを含むであろう。さらに、デコードユニット７０Ａは開始位置バス８６Ａ上で命令の開始位置を運ぶ。
【００８２】
ＥＳＰ／ＥＢＰルックアヘッドユニット７２は、オペコードおよびｍｏｄ  Ｒ／Ｍバイトを受取り、対応する命令がソースオペランドとしてＥＳＰレジスタまたはＥＢＰレジスタを有するか否か、および、命令がいずれかのレジスタの更新を指定しているか否かを判定する。ＥＳＰ／ＥＢＰルックアヘッドユニット７２は、ルックアヘッドＥＳＰ／ＥＢＰバス８８上でルックアヘッドＥＳＰおよびルックアヘッドＥＢＰ値を与える。ルックアヘッドレジスタ値は、デコードユニット７０Ａ〜７０Ｆによりデコードされる命令のラインよりも前にディスパッチされた命令の結果の累積に対応する。さらに、ＥＳＰ／ＥＢＰルックアヘッドユニット７２は、デコードユニット７０Ａによりデコードされる命令に対するソースオペランドを発生するため、ルックアヘッドＥＳＰまたはＥＢＰ値に加えられるべき定数を発生する。ライン内の他の命令のためにも同様の定数が発生されるであろう。各発行位置のための定数は、ライン内のその発行位置に対応する命令を含めてこの命令よりも前の命令の累積効果を表わす。デコードユニット７０Ａの場合には、ライン内の命令よりも前には命令は存在しないので、命令のためのソースオペランドとして値を使用する前に行なわれる、対応するレジスタに対する変更に、定数は対応する。たとえば、ｘ８６命令セットにより規定されるＰＵＳＨ命令は、命令のためのアドレスオペランドとしてＥＳＰレジスタ値を使用する前にＥＳＰレジスタ値をデクリメントするよう指定する。
【００８３】
ライン内依存性チェックユニット７５は、デコードユニット７０Ａおよび他のデコードユニット７０Ｂ〜７０Ｆからソースおよび行先レジスタ指示子を受取る。ライン内依存性チェックユニット７５は、特定の発行位置内の命令に対応する各ソースオペランドに対しライン内の前の命令各々の行先オペランドに対しての依存性チェックを行なう。もし依存性が検出されれば、依存性バス９２上で対応の表示が与えられる。したがって、依存性バス９２は、可能性のあるソースオペランド各々について、そのソースオペランドに対して依存性が検出されたか否か、およびどの発行位置にソースオペランドが依存しているかを示す表示を含む。たとえば、依存性バス９２は、各ソースオペランドに対応する依存性信号および各ソースオペランドに対応する発行位置番号を含むであろう。
【００８４】
即値フィールド発生ユニット７３は、命令のオペコードおよびｍｏｄ  Ｒ／Ｍバイトをデコードし、即値フィールドが命令内に含まれているかを判定する。即値フィールド発生ユニット７３は、命令バイト記憶装置８０から即値フィールドを抽出し、即値フィールドバス９４Ａ上に即値フィールドを与える。一実施例においては、さまざまなサイズの即値フィールドがサポートされる（たとえば８ビットおよび３２ビット）。即値フィールド発生ユニット７３は、より小さな即値フィールドを符号拡張（sign extend）またはゼロ拡張（zero extend）して、適宜サポートされる最大の即値フィールドサイズにするよう構成され得る。さらに、もし命令がインクリメント／デクリメント命令であれば、即値フィールド発生ユニット７３は、インクリメント／デクリメントのサイズを反映した即値フィールドのための定数を発生するよう構成されるであろう。もし、命令が即値フィールドを含まずインクリメント／デクリメント命令でなければ、即値フィールド発生ユニット７３は、即値フィールドバス９４Ａ上でゼロ値を発生するよう構成されるであろう。即値フィールド発生ユニット７３はさらに、他のデコードユニット７０内の命令に対応して、同様の動作を行なうよう構成されるであろう。即値フィールド発生ユニット７３は、デコードユニット７０Ａにより与えられた開始位置およびオペコードおよびｍｏｄ  Ｒ／Ｍバイトのデコードにより、命令バイト記憶装置８０から即値フィールドを選択する。
【００８５】
この実施例においては、命令バイト記憶装置８０は、同時にデコードされる命令のラインに対応する命令バイトを記憶する。命令バイトは、命令のラインとともにパイプライン化され、所望に従い命令のさまざまなフィールドを抽出することが可能である。他の実施例では、命令は（命令バイト記憶装置８０内の命令に対して命令のサブセットおよびポインタを割振るのではなく）完全に各発行位置内で割振られるであろう。
【００８６】
この実施例では、即値フィールド発生ユニット７３はさらに、特定の発行位置内の比較命令であって、その比較結果に依存する分岐命令が（すなわち条件付き分岐命令が）直後の発行位置にある、比較命令を検出するよう構成される。このような組合せを検出すると、即値フィールド発生ユニット７３はオペランドまとめユニット７８に対して比較表示をアサートする。他の実施例では、比較／分岐の組合せを検出するために別個の制御ユニットを設けることもでき、または、他のユニットの１つをこの機能を提供するため構成することもできる。さらに、比較／分岐の組合せが検出されない実施例も企図される。オペランドまとめユニット７８は、比較演算および分岐演算を１つの発行位置にとまとめるよう構成されるであろう（すなわち、１つの機能ユニットが比較演算と依存性の分岐演算とを両方同時に行なうであろう）。
【００８７】
図４中、図示されるユニットの所定の出力が、たとえばオペランドまとめユニット７８までパイプライン化されているものとして示されていることが注意される。これは、これらの出力が発生され対応する命令とともにパイプラインを通って受取ユニットへ運ばれることを示すよう意図されている。代替的に、これらの出力は、受取ユニットによって取り込まれ得、受取ユニットへの命令の到着に際して対応する命令と関連づけられることも可能である。
【００８８】
次に図５を参照し、ルックアヘッドアドレス／結果計算ユニット７４の一実施例の部分を示す。他の実施例も可能であり企図される。図５の実施例においては、発行位置０に対応する（すなわちデコードユニット７０Ａに対応する）ルックアヘッドアドレス／結果計算ユニット７４の部分が図示される。他の発行位置についても同様のハードウェアが同様に提供されるであろう。制御ユニット１００は、デコードユニット７０Ａからパイプライン化されたオペコード／ｍｏｄ  Ｒ／Ｍバス８２Ａと結合されるよう示される。制御ユニット１００はさらに、バス１０２を介してフューチャファイル２６により与えられる命令のソースオペランドに対応する有効な表示を受取るよう結合される。ソースオペランドは、もし、実行に際してそのソースオペランドを生成するであろう命令を示す結果キュータグの代わりにそのソースオペランドが与えられるのであれば、フューチャファイル２６内で有効である。制御ユニット１００は、オペランド選択マルチプレクサ（ｍｕｘ）１０４Ａおよび１０４Ｂに選択制御を与えるよう結合される。オペランド選択ｍｕｘ１０４Ａは、ルックアヘッドＥＳＰバス８８−１（ルックアヘッドＥＳＰ値を与えるルックアヘッドＥＳＰ／ＥＢＰバス８８の部分）、定数バス９０Ａおよびフューチャファイル２６からのソース１バス１１２と結合される。オペランド選択ｍｕｘ１０４Ｂは、ルックアヘッドＥＢＰバス８８−２（ルックアヘッドＥＢＰ値を与えるルックアヘッドＥＳＰ／ＥＢＰバス８８の部分）、定数バス９０Ａおよびフューチャファイル２６からのソース２バス１１４と結合される。加算器１０６が、即値フィールドバス９４Ａおよびセグメントバス１０８と同様にオペランド選択ｍｕｘ１０４と結合されるものとして示される。加算器１０６は、結果バス１１０Ａ上で、ロード／ストアユニット３６、フューチャファイル２６およびオペランドまとめユニット７８に与えられる結果を与える。制御ユニット１００は、アドレス有効ライン１１６Ａ上へロード／ストアユニット３６およびオペランドまとめユニット７８へのアドレス有効信号を生成し、結果有効ライン１１８Ａ上へフューチャファイル２６およびオペランドまとめユニット７８への結果有効信号を生成する。上述のように、参照番号の後に文字を付して示す接続は、（図５には示さない）他の発行位置内の命令についても同様に設けられるであろうことが注意される。
【００８９】
制御ユニット１００は、命令のオペコードおよびｍｏｄ  Ｒ／Ｍバイトをデコードし、（メモリオペランドを含む命令のために）ルックアヘッドアドレス発生を行なうか、または、（メモリオペランドを含まず加算系命令演算または移動命令演算を行なう命令のために）ルックアヘッド結果発生を行なうか、またはいずれも行なわないかを判定するよう構成される。制御ユニット１００は、命令のデコードにより、オペランド選択ｍｕｘ１０４を介してオペランドを選択するであろう。加算器１０６は、（ｉ）オペランド選択ｍｕｘ１０４Ａおよび１０４Ｂにより与えられる値、即値フィールドバス９４上で与えられる即値、および（iii）セグメントバス１０８上で与えられるセグメント基準アドレスを、結果を生成するために加算するよう構成される。（アドレス発生ではなく）結果発生のため、（図示しない）制御ユニット１００からの制御信号に応答して、セグメント値はゼロであり得、または加算器１０６により無視され得る。
【００９０】
たとえば、図６に示す真理値表１２０が、もし命令がメモリオペランドのためのアドレス発生命令演算を含むのであれば、オペランド選択ｍｕｘ１０４の値を選択するため、制御ユニット１００の一実施例のため用いられるであろう。真理値表１２０は、メモリオペランドのアドレスを発生するため命令により用いられるアドレッシングモードを示すアドレッシングモード列、制御ユニット１００からの制御に応答してオペランド選択ｍｕｘ１０４Ａにより選択される値を示すｍｕｘ１列、および制御ユニット１００からの制御に応答してオペランド選択ｍｕｘ１０４Ｂにより選択される値を示すｍｕｘ２列を含む。他の実施例も可能であり、企図される。図６に示す例は、以下のアドレッシングモードをサポートする：（ｉ）変位のみ、（ii）任意の変位および（ＥＳＰまたはＥＢＰレジスタを含まない）１つまたは２つのアドレスオペランドの組合せ、または（iii）任意の変位およびソースオペランドとしてのＥＳＰまたはＥＢＰレジスタ。スケールファクタが、ｘ８６命令セットアーキテクチャ内において指定可能なスケール−インデックス−ベースアドレッシングモードに含まれるであろうことが注意される。ｍｕｘ１０４Ａは、１ビットまたは２ビット左シフトされたソース１オペランドを選択することにより、ソース１オペランドをスケーリングするよう構成され得る。さらに、図６に示す変位は、この実施例では即値バス９４Ａ上で与えられることが注意される。
【００９１】
命令によって指定されるアドレッシングモードに依存して、制御ユニット１００は、フューチャファイル２６からの有効な指示を調べ、加算器１０６がメモリオペランドのアドレスを成功裡に発生したか否かを判定する。すなわち、アドレスオペランドである各ソースオペランドが有効であれば、加算器１０６は成功裡にアドレスを発生するであろう。もしアドレスが成功裡に発生されれば、制御ユニット１００は、アドレス有効ライン１１６Ａ上でアドレス有効信号をアサートし、結果バス１１０Ａ上で与えられるアドレスが対応する命令のためにメモリオペランドのアドレスとして取込まれ使用されるであろうということを、ロード／ストアユニット３６に対して示す。もしアドレスが成功裡に発生されなければ、アドレス発生ユニット３４が、続いてアドレスを発生するため使用されるであろうし、そのアドレスがその後ロード／ストアユニット３６にフォワードされるであろう。
【００９２】
セグメントバス１０８は、ｘ８６命令セットアーキテクチャにより規定されるセグメンテーション変換機構によりセグメント基準アドレスを与える。他の命令セットアーキテクチャを用いるプロセッサのための他の実施例では、セグメントバス１０８は取除かれるかもしれない。セグメントバス１０８上で与えられるセグメント基準アドレスは、現在の発行位置内の命令に対応する選択されたセグメントのセグメント基準アドレスである。代替的に、対応する命令によって、各利用可能なセグメント基準アドレスが与えられ選択されてもよい。セグメント情報は、当分野で周知のように適当な変換ユニットまたは特別なレジスタユニット内で維持されるであろう。
【００９３】
もし現在の発行位置内の命令がメモリオペランドを含んでいなければ、制御ユニット１００は、命令のためのルックアヘッド結果を発生するためオペランドを選択しようと試みるであろう。この実施例では、制御ユニット１００は、１つまたは２つのソースオペランドおよび／または即値を含む加算／減算演算またはインクリメント／デクリメント演算をサポートするであろう。制御ユニット１００はさらに、第２のソースオペランドを加算器１０６への唯一の入力として与えることによりレジスタからレジスタへの移動をサポートするであろう。
【００９４】
たとえば、制御ユニット１００の一実施例は、図７に示す真理値表１２２により動作するであろう。他の実施例も可能であり企図される。図７に示すような真理値表１２２は、この実施例によるルックアヘッドアドレス／結果計算ユニット７４によりサポートされる算術演算を示す算術演算列を含む。図６に示す真理値表１２０と同様、真理値表１２２は、制御ユニット１００からのそれぞれの制御に応答して、オペランド選択ｍｕｘ１０４Ａにより選択されるオペランドを示すｍｕｘ１列およびオペランド選択ｍｕｘ１０４Ｂにより選択されるオペランドを示すｍｕｘ２列を含む。表によれば、（もしｍｕｘ１０４Ｂによりゼロが選択されたならば）１個または２個のソースオペランドおよび任意の即値フィールドの加算または減算が、インクリメントまたはデクリメントおよびレジスタからレジスタへの移動と同様にサポートされるであろう。
【００９５】
制御ユニット１００は、加算器１０６が成功裡に結果バス１１０ＡＡでルックアヘッド結果を生成したか否かを判定するよう構成される。制御ユニット１００は、もし、フューチャファイル２６によって示されたところの、結果を発生するために使用された各ソースオペランドが有効であれば、そして命令によって指定された機能的命令演算がルックアヘッドアドレス／結果計算ユニット７４によりサポートされるものであれば、成功裡に結果が生成されたと判定する。もし、結果が成功裡に生成されたと判定されれば、制御ユニット１００はフューチャファイル２６およびオペランドまとめユニット７８に対して結果有効ライン１１８Ａ上で結果有効信号をアサートする。フューチャファイル２６は、（結果バス１１０Ａ上でも与えられ得る）命令の行先レジスタにより結果を記憶するよう構成されるであろう。オペランドまとめユニット７８は、（ライン内依存性チェックユニット７５により与えられる依存性表示により）依存性の命令のソースオペランドへと、結果をまとめるよう構成されるであろう。
【００９６】
次に図８を参照し、オペランドまとめユニット７８の一実施例の部分を示すブロック図を示す。他の実施例も可能であり企図される。図８に示す部分においては、制御ユニット１３０がオペランドまとめｍｕｘ１３２Ａ〜１３２Ｄとともに示される。制御ユニット１３０は、（図５に示す結果有効ライン１１８Ａを含む）複数の結果有効ライン１１８、（図５に示すアドレス有効ライン１１６Ａを含む）複数のアドレス有効ライン１１６、ライン内依存性チェックユニット７５からの依存性バス９２、（図４に示す比較ライン９６Ａを含む）複数の比較ライン９６および禁止バス１３４と結合される。制御ユニット１３０はさらに、（図８に示されない他の発行位置のためのまとめｍｕｘと同様）各まとめｍｕｘ１３２へ選択制御を与えるよう結合される。各まとめｍｕｘ１３２Ａ〜１３２Ｄは、１つの発行位置内の１つのソースオペランドに対応する。各まとめｍｕｘ１３２Ａ〜１３２Ｄは、ライン内の前の発行位置に対応する行先タグおよびこれらの発行位置に対応するルックアヘッド結果を受取るよう結合される。さらに、各まとめｍｕｘ１３２Ａ〜１３２Ｄは、まとめｍｕｘ１３２Ａ〜１３２Ｄに対応する発行位置の直前の発行位置内の命令のソースオペランドのための、および、まとめｍｕｘ１３２Ａ〜１３２Ｄに対応する発行位置内の命令のソースオペランドのためのフューチャファイル出力を受けるよう結合される。たとえば、まとめｍｕｘ１３２Ａは、発行位置１のためのソース１オペランドを与え、（ｉ）発行位置０内の命令に対する行先タグ、（ii）結果バス１１０Ａ上で与えられる発行位置０に対応するルックアヘッド結果、および（iii）発行位置０のソース１オペランドおよび発行位置１のソース１オペランドに対応するフューチャファイル２６からのソース１オペランドを受けるよう結合される。図８に示すように、大文字Ｐの後に数字をつけたものは、示された値に対応する発行位置を示す（すなわち、Ｐ０は発行位置０であり、Ｐ１は発行位置１である）。
【００９７】
上述のように、オペランドまとめユニット７８は、ルックアヘッドアドレス／結果計算ユニット７４により発生されたルックアヘッド結果を、ライン内の依存性命令のソースオペランドへとまとめる。図８に示す例においては、オペランドまとめｍｕｘ１３２が、各ソースオペランドおよび、まとめが行なわれるであろう各発行位置に対して設けられる。したがって、発行位置０はライン内の第１の発行位置であるためライン内依存性を経験しないであろうから、発行位置０についてはオペランドまとめｍｕｘは示されていない。オペランドまとめｍｕｘ１３２Ａおよび１３２Ｂは、発行位置１のためのソースオペランドを与え、一方、オペランドまとめｍｕｘ１３２Ｃおよび１３２Ｄは、発行位置２のためのソースオペランドを与える。同様のオペランドクラスのｍｕｘが、（図８に示さない）発行位置３、４および５に対しソース１ソースオペランドを与える。
【００９８】
制御ユニット１３０は、結果有効ライン１１８を通じてどの結果が有効であるかの表示および依存性バス９２の上でライン内依存性の表示を受取る。もし、依存性が特定の発行位置内の特定のソースオペランドに関して依存性バス９２を通じて知らされれば、そして、ソースオペランドが依存する発行位置についての、結果有効ライン１１８により示される結果が有効であれば、制御ユニット１３０は、対応するオペランドまとめｍｕｘ１３２を制御して、対応するルックアヘッド結果バスから結果を選択するであろう。他方、もし対応する結果が有効ではないと依存性が示されれば、制御ユニット１３０は対応するオペランドまとめｍｕｘ１３２を制御して、ソースオペランドが依存する発行位置の行先タグを選択するであろう。制御ユニット１３０はさらに、比較／分岐が検出されたことを示す比較信号を比較ライン９６上で受取る。もし、比較／分岐の組合せが検出されていれば、制御ユニット１３０は、分岐命令を含む発行位置のオペランドまとめｍｕｘ１３２のために、前の発行位置のソースオペランドに対するフューチャファイル出力を選択する。上記態様において、比較命令のソースオペランドが、分岐命令を有する発行位置に与えられるであろう。その後、受取り機能ユニットが（比較ソースオペランドを使用して）比較を行なうことができ、かつ、比較の結果として分岐命令がテイクンであるのかノットテイクンであるのか判定できる。もし、特定の発行位置の特定のソースオペランドについて依存性が認められず、発行位置が比較／分岐の組合せの分岐部分でなければ、制御ユニット１３０は、対応するオペランドまとめｍｕｘ１３２を制御し、（結果キュータグまたは有効ソースオペランドであり得る）その発行位置内のソースオペランドのためにフューチャファイル出力を選択する。
【００９９】
制御ユニット１３０が行なうであろう付加的なチェックは、特定の発行位置内の特定のソースオペランドが、前の発行位置に依存することが示され、その前の発行位置に対する結果がルックアヘッドアドレス／結果計算ユニット７４により有効であると示されている場合の、判定である。もし前の発行位置に、ライン内ソース依存性が示されていれば、ルックアヘッドアドレス／結果計算ユニット７４に与えられる結果は実は（誤ったソースオペランドに基づくものであるから）無効である。このような場合には、制御ユニット１３０は、ルックアヘッドアドレス／結果計算ユニット７４により与えられるルックアヘッド結果の選択を禁止するであろうし、その代わりに前の発行位置に対応する行先タグを選択するであろう。一実現例では、対応する発行位置内で依存性が示されればマスキングされた結果有効信号がリセットされるよう制御ユニット１３０は、結果有効信号を依存性バス９２からの対応する依存性表示でマスキングするであろう。フューチャファイル２６およびロード／ストアユニット３６が、同様の態様で、ルックアヘッド結果／アドレスを無効にするであろうことが注意される。
【０１００】
制御ユニット１３０は、さらに、禁止バス１３４を介して命令ウインドウ３０へ信号を送るよう構成されるであろう。ルックアヘッドアドレス／結果計算ユニット７４により完了される各命令演算（アドレス発生または機能演算のいずれか）に対して、制御ユニット１３０は、命令演算が機能ユニット３２またはアドレス発生ユニット３４による実行のため選択されないように、命令ウインドウ３０内の対応する演算を禁止するであろう。たとえば、禁止バス１３４は、各発行位置についてアドレス発生禁止信号および機能演算禁止信号を含むであろう。もし、ルックアヘッドアドレス／結果計算ユニット７４が（あらゆるライン内依存性の影響を含む）特定の発行位置に対するルックアヘッドアドレスを成功裡に発生したならば、制御ユニット１３０は、特定の発行位置に対するアドレス発生禁止信号を活性化するであろう。他方、もし、ルックアヘッドアドレス／結果計算ユニット７４が（あらゆるライン内依存性の影響を含む）特定の発行位置に対応するルックアヘッド結果を成功裡に発生したならば、制御ユニット１３０は、機能演算禁止信号を活性化するであろう。さらに、もし特定の発行位置が比較／分岐の組合せの比較部分を記憶していれば、制御ユニット１３０は、機能演算禁止信号を活性化するであろう。上述のように、算術演算は、算術命令の機能演算に加えフラグ発生を含むであろう。機能的結果が既に発生されていたとしても、フラグ結果の発生を可能とするため、このような命令は禁止されないであろう。代替的に、フューチャファイル２６がルックアヘッド結果で更新されるよりも前にフューチャファイル２６を読出すであろう命令に対するフォワーディングを行なうため機能的結果は禁止されないであろう。さもなくば、フューチャファイルの読出とルックアヘッド結果の提供との間でパイプライン段の中で局所フォワーディングが行なわれるであろう。制御ユニット１３０は、アドレス発生禁止信号を発生するため、アドレス有効信号を受取る。さらに、制御ユニット１３０は、もし対応する命令が条件コードおよび結果レジスタを更新するのであれば、機能演算を禁止しないように構成されるであろう。したがって、条件コードの計算のため、機能演算は機能ユニットへ与えられるであろう。
【０１０１】
次に図９を参照し、特定の発行位置のための特定のソースオペランドを選択するための制御ユニット１３０の一実施例の演算を示すフローチャートを示す。他の実施例も可能であり企図される。図９に示すステップは、各ソースオペランドについて並行して行なわれ得る。図９に示すステップは、理解を容易にするため特定の順番で示しているが、任意の適切な順番で行ない得る。さらに、制御ユニット１３０内の論理において、所望であれば、ステップを並行して行ない得る。
【０１０２】
制御ユニット１３０は、特定のソースオペランドについて認められるライン内依存性があるか否かを判定する（判定ブロック１４０）。もし、ライン内依存性が認められれば、制御ユニット１３０は、ルックアヘッドアドレス／結果計算ユニット７４が、特定のソースオペランドが依存する前の発行位置についてのルックアヘッド結果が成功裡に発生されたか否かを判定する（判定ブロック１４２）。もし、ルックアヘッド結果が成功裡に発生されていなければ、制御ユニット１３０は、前の発行位置に対応する行先タグを選択する（ステップ１４４）。さらに、もし、前の発行位置内で結果が有効であるが、前の発行位置の１以上のソースオペランドについてライン内依存性が認められれば（判定ブロック１４６）、制御ユニット１３０は、同様に前の発行位置に対応する行先タグを選択する（ステップ１４４）。もし前の発行位置のソースオペランドについて依存性が認められず、結果が有効であれば、制御ユニット１３０はルックアヘッドアドレス／結果計算ユニット７４により与えられた結果を選択する（ステップ１４８）。
【０１０３】
もし特定のソースオペランドについてライン内依存性が全く認められなければ（判定ブロック１４０）、制御ユニット１３０は、比較／分岐の組合せであって、特定の発行位置がその分岐部分である比較／分岐の組合せが検出されているか否かを判定する（判定ブロック１５０）。もし比較／分岐の組合せが検出されていれば、制御ユニット１３０によって前の発行位置（すなわち比較命令を含む発行位置）からのソースオペランドが選択される（ステップ１５２）。他方、もし比較／分岐の組合せが検出されていなければ、制御ユニット１３０は特定のソースオペランドについてフューチャファイル出力を選択する（ステップ１５４）。
【０１０４】
上にｍｕｘとしてさまざまな特徴を示したが、説明した選択を行なうため選択論理のどのようなパラレルでのまたはシリアルでの組合せも使用され得ることが注意される。さらに、この実施例は、ライン内結果および比較／分岐の組合せに対してまとめを行なうが、これらの特徴の一方のみを提供する例も企図されることが注意される。さらに、この実施例ではオペランドのソースとしてフューチャファイルが使用されるが、他の実施例では、オペランドのソースとして、リオーダバッファ、リネームレジスタファイルなど他の投機的記憶装置要素を用いてもよいことが注意される。
【０１０５】
次に、図１０を参照し、バスブリッジ２０２を通じてさまざまなシステム構成要素と結合されるプロセッサ１０を含むコンピュータシステム２００の一実施例のブロック図を示す。他の実施例も可能であり企図される。図示されるシステム中、メインメモリ２０４がメモリバス２０６を通じてバスブリッジ２０２と結合され、グラフィックスコントローラ２０８がＡＧＰバス２１０を通じてバスブリッジ２０２と結合される。最後に、複数のＰＣＩ装置２１２Ａ〜２１２ＢがＰＣＩバス２１４を通じてバスブリッジ２０２と結合される。第２のバスブリッジ２１６がさらに、ＥＩＳＡ／ＩＳＡバス２２０を通じて１以上のＥＩＳＡまたはＩＳＡ装置２１８への電気的インターフェイスに対処するため設けられてもよい。プロセッサ１０は、バスインターフェイス４６を通じてバスブリッジ２０２と結合される。
【０１０６】
バスブリッジ２０２は、プロセッサ１０、メインメモリ２０４、グラフィックスコントローラ２０８およびＰＣＩバス２１４と接続された装置の間のインターフェイスを提供する。バスブリッジ２０２に接続される装置の１つから演算が受取られるとき、バスブリッジ２０２は演算のターゲットを特定する（たとえば特定の装置またはＰＣＩバス２１４の場合にはターゲットはＰＣＩバス２１４上にある）。バスブリッジ２０２は、演算をターゲットである装置に与える。バスブリッジ２０２は通常、演算をソース装置またはバスにより使用されるプロトコルからターゲット装置またはバスにより使用されるプロトコルに変換する。
【０１０７】
ＰＣＩバス２１４のためのＩＳＡ／ＥＩＳＡバスへのインターフェイスを提供するのに加えて、必要であれば、第２のバスブリッジ２１６がさらに付加的な機能を組入れるであろう。たとえば、一実施例においては、第２のバスブリッジ２１６はＰＣＩバス２１４の所有権を調停するための（図示しない）マスタＰＣＩアービタを含む。第２のバスブリッジ２１６の外部であるかまたは第２のバスブリッジ２１６と統合される（図示しない）入力／出力コントローラがさらに、所望であればキーボードおよびマウス２２２ならびにさまざまなシリアルポートおよびパラレルポートのための動作的サポートを与えるためコンピュータシステム２００内に含まれ得る。（図示しない）外部キャッシュユニットがさらに、他の実施例においてはプロセッサ１０とバスブリッジ２０２との間のバスインターフェイス４６と結合され得る。代替的に、外部キャッシュは、バスブリッジ２０２と結合され、外部キャッシュ用のキャッシュ制御論理がバスブリッジ２０２へ統合され得る。
【０１０８】
メインメモリ２０４は、その中にアプリケーションプログラムが記憶され、そこからプロセッサが主として実行を行なうメモリである。適当なメインメモリ２０４は、ＤＲＡＭ（ダイナミック・ランダム・アクセス・メモリ）を含み、好ましくは、ＳＤＲＡＭ（シンクロナスＤＲＡＭ）の複数のバンクを含む。
【０１０９】
ＰＣＩ装置２１２Ａ〜２１２Ｂは、たとえば、ネットワークインターフェイスカード、ビデオアクセラレータ、オーディオカード、ハードディスクドライブもしくはフロッピーディスクドライブまたはドライブコントローラ、ＳＣＳＩ（スモール・コンピュータ・システムズ・インターフェイス）アダプタおよび電話通信カードなどのさまざまな周辺装置の例である。同様に、ＩＳＡ装置２１８は、モデム、サウンドカード、およびＧＰＩＢまたはフィールドバスインターフェイスカードなどのさまざまなデータアクイジションカードなどのさまざまな種類の周辺装置の例である。
【０１１０】
グラフィックスコントローラ２０８は、ディスプレイ２２６上でのテキストおよび画像のレンダリングを制御するために設けられる。グラフィックスコントローラ２０８は、メインメモリ２０４へ、およびメインメモリ２０４から効果的に移動され得る３次元データ構造をレンダリングするための当分野では一般に公知の典型的なグラフィックアクセラレータであり得る。グラフィックスコントローラ２０８はしたがって、バスブリッジ２０２内のターゲットインターフェイスへのアクセスを要求し受けることができ、それによってメインメモリ２０４へのアクセスを得るという点で、ＡＧＰバス２１０のマスタであり得る。専用グラフィックスバスが、メインメモリ２０４からのデータの迅速な取出しに対処する。所定の動作については、グラフィックスコントローラ２０８はさらに、ＡＧＰバス２１０上でＰＣＩプロトコルトランザクションを発生するよう構成され得る。バスブリッジ２０２のＡＧＰインターフェイスはしたがって、ＡＧＰプロトコルトランザクションおよびＰＣＩプロトコルターゲットとイニシエータとのトランザクションの両方をサポートする機能を含み得る。ディスプレイ２２６は、上に画像またはテキストが提示され得る任意の電子的ディスプレイである。適切なディスプレイ２２６は、陰極線管（ＣＲＴ）、液晶ディスプレイ（ＬＣＤ）などを含む。
【０１１１】
上述の説明においては例としてＡＧＰ、ＰＣＩおよびＩＳＡまたはＥＩＳＡバスが使用されたが、所望であれば任意のバスアーキテクチャで置換えられることが注意される。さらに、コンピュータシステム２００は付加的なプロセッサ（たとえばコンピュータシステム２００の任意構成要素として示されるプロセッサ１０ａなど）を含むマルチプロセッシングコンピュータシステムであり得ることが注意される。プロセッサ１０ａはプロセッサ１０と同様のものであり得る。特に、プロセッサ１０ａはプロセッサ１０の同一コピーであり得る。プロセッサ１０ａは、（図１０に示すように）プロセッサ１０とバスインターフェイス４６を共有し得、または、独立バスを通じてバスブリッジ２０２へ接続され得る。
【０１１２】
上の開示により、命令の実行よりも前にルックアヘッドアドレスおよび／または結果を発生するよう試みるプロセッサが示された。ライン内依存性が認められ、ルックアヘッド結果は依存性の命令のソースオペランドへとまとめされる。（フューチャファイルおよびまとめ機構を通じてフォワーディングを提供することで）早期にルックアヘッド結果を与えることによりフォワーディングはより効率的になり得る。さらに、機能ユニット内で実行されるべき必要な命令演算の数がより少ないことで、サポートされる機能ユニットがより少なくなり得る。
【０１１３】
一旦本開示が十分に理解されれば、当業者には多くの変形および変更が明らかとなるであろう。前掲の特許請求の範囲は、これらの変形および変更すべてを包含するものと解釈されるよう意図される。
【図面の簡単な説明】
【図１】  プロセッサの一実施例のブロック図である。
【図２】  図１に示すフェッチ／スキャンユニットの一実施例のブロック図である。
【図３】  図１に示すルックアヘッド／まとめユニットの一実施例のブロック図である。
【図４】  図３に示すルックアヘッド／まとめユニットの部分の間の相互接続を示す、図３に示すルックアヘッド／まとめユニットの部分のブロック図である。
【図５】  図３および図４に示すルックアヘッドアドレス／結果発生ユニットの一実施例の部分を示す図である。
【図６】  ルックアヘッドアドレス発生のための、図５に示す制御ユニットの一実施例による真理値表の図である。
【図７】  ルックアヘッド結果発生のための、図５に示す制御ユニットの一実施例による真理値表の図である。
【図８】  図３に示すオペランドまとめユニットの一実施例の部分のブロック図である。
【図９】  図８に示す制御ユニットの一実施例を示すフローチャートのブロック図である。
【図１０】  図１に示すプロセッサを含むコンピュータシステムのブロック図である。
【図１】
0003866918.tif 000004
【図２】
0003866918.tif 000005
【図３】
0003866918.tif 000006
【図４】
0003866918.tif 000007
【図５】
0003866918.tif 000008
【図６】
0003866918.tif 000009
【図７】
0003866918.tif 000010
【図８】
0003866918.tif 000011
【図９】
0003866918.tif 000012
【図１０】
0003866918.tif 000013