JP3866918B2 - ルックアヘッド結果を発生し移動命令、比較命令および簡単な算術命令をまとめるよう構成されるプロセッサ - Google Patents
ルックアヘッド結果を発生し移動命令、比較命令および簡単な算術命令をまとめるよう構成されるプロセッサ Download PDFInfo
- Publication number
- JP3866918B2 JP3866918B2 JP2000521433A JP2000521433A JP3866918B2 JP 3866918 B2 JP3866918 B2 JP 3866918B2 JP 2000521433 A JP2000521433 A JP 2000521433A JP 2000521433 A JP2000521433 A JP 2000521433A JP 3866918 B2 JP3866918 B2 JP 3866918B2
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- operand
- unit
- instructions
- look
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
- 230000004044 response Effects 0.000 claims description 26
- 238000004364 calculation method Methods 0.000 claims description 20
- 230000001419 dependent effect Effects 0.000 claims description 10
- 238000000034 method Methods 0.000 claims description 10
- 230000011664 signaling Effects 0.000 claims 1
- 238000013215 result calculation Methods 0.000 abstract description 41
- 230000000977 initiatory effect Effects 0.000 abstract 1
- 238000006073 displacement reaction Methods 0.000 description 36
- 238000012546 transfer Methods 0.000 description 16
- 238000010586 diagram Methods 0.000 description 14
- 230000006870 function Effects 0.000 description 6
- 230000007246 mechanism Effects 0.000 description 6
- 230000000694 effects Effects 0.000 description 5
- 238000000802 evaporation-induced self-assembly Methods 0.000 description 4
- 238000012986 modification Methods 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 238000004422 calculation algorithm Methods 0.000 description 3
- 238000006243 chemical reaction Methods 0.000 description 3
- 238000013507 mapping Methods 0.000 description 3
- 230000008859 change Effects 0.000 description 2
- 230000001186 cumulative effect Effects 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 238000009877 rendering Methods 0.000 description 2
- 230000011218 segmentation Effects 0.000 description 2
- 238000013519 translation Methods 0.000 description 2
- 230000002411 adverse Effects 0.000 description 1
- 230000003190 augmentative effect Effects 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 230000005764 inhibitory process Effects 0.000 description 1
- 239000003999 initiator Substances 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 230000008569 process Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 239000000758 substrate Substances 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 238000010977 unit operation Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30021—Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0862—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0893—Caches characterised by their organisation or structure
- G06F12/0897—Caches characterised by their organisation or structure with two or more cache hierarchy levels
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
- G06F9/30058—Conditional branch instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/32—Address formation of the next instruction, e.g. by incrementing the instruction counter
- G06F9/322—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3804—Instruction prefetching for branches, e.g. hedging, branch folding
- G06F9/3806—Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3824—Operand accessing
- G06F9/383—Operand prefetching
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3838—Dependency mechanisms, e.g. register scoreboarding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
Description
【発明の分野】
この発明は、プロセッサの分野に関し、特に、プロセッサ内の命令実行の並列化に関する。
【0002】
【従来の技術】
スーパースカラプロセッサは、1クロックサイクルあたり複数の命令をディスパッチし実行することによって、かつ、設計と一貫した可能な限り短いクロックサイクルタイムで動作することによって、高い性能を達成しようとする。所与のプロセッサが、1クロックサイクルあたり複数の命令をディスパッチおよび/または実行することに成功する範囲内で、高い性能が実現されよう。1クロックサイクルあたりにディスパッチされる命令の平均数を増加させるため、プロセッサ設計者は、より幅の広い発行速度を用いるスーパースカラプロセッサを設計してきた。「発行が広い」スーパースカラプロセッサは、「発行が狭い」スーパースカラプロセッサがディスパッチできるよりも、クロックサイクル当りディスパッチ(または発行)することができる命令の最大数がより大きい。発行が狭いプロセッサが処理できる数よりも、ディスパッチ可能な命令の数が多いクロックサイクルの間に、発行が広いプロセッサはより多くの命令をディスパッチするであろうし、それによって、1クロックサイクルあたりにディスパッチされる命令の平均数の増加を達成する。
【0003】
残念ながら、より幅の広い発行速度をサポートするためには、通常、プロセッサ内の実行ハードウェアの量を増やす必要がある。もし十分な実行ハードウェアが設けられていなければ、そのプロセッサが同時に多数の命令を発行できるものであったとしても、プロセッサの命令のスループットに悪影響があるであろう。命令ハードウェアは、半導体基板面積の相当量を占めるであろうから、プロセッサの総ダイサイズしたがって、プロセッサのコストを増加させる。
【0004】
加えて、多くの命令は、簡単な実行ハードウェアによって処理され得る比較的簡単な命令である。たとえば、レジスタオペランドのみを指定する移動命令(すなわちソースレジスタから行先レジスタへの移動)は、実行のためにほとんどハードウェアを必要としない簡単な命令である。メモリおよびレジスタのオペランドを有する移動命令は、アドレス発生を伴う比較的小さな付加的ハードウェアしか伴わない。さらに、レジスタオペランドを有する加算系命令(たとえば加算/減算/インクリメント/デクリメント)も同様に比較的簡単な命令である。さらに、通常のコードシーケンスにおいては、簡単な命令の方が比較的頻繁であろう。しかし、実行ハードウェアはさらに、複雑な命令の一方を実行できなければならない。いくつかのスーパースカラプロセッサは、複雑な実行ユニットおよび簡単な実行ユニットの両方を設け、実行ユニットへの命令の発行を、簡単な実行ユニットは簡単な命令のみを受取り、より複雑なユニットは簡単な命令または複雑な命令を受取るように制御することによって、よりコストの低い実行ハードウェアを提供しようと試みてきた。このような方策によって実行ハードウェアにより占有される面積は減じられるであろうが、発行論理はより複雑となる。複雑な論理はより多くの面積をとるであろうし、または、クロックサイクルタイムを律速するであろう。したがって、簡単な命令および複雑な命令の混ざったものを処理するためのより効率的な方法が望ましい。
【0005】
より高いクロック周波数(すなわちより短いクロックサイクルタイム)をサポートするため、スーパースカラプロセッサはより幅の広い発行速度と同時により長いパイプライン(すなわちより多くの段を含むパイプライン)を用いてきた。パイプラインがより長いとより高いクロック周波数が達成されるであろうが、パイプラインがより長いと、同時に付加的な設計の課題が生じる。特に、前の命令の実行が完了する前に、パイプラインにより多くの命令がフェッチされ投入されるかもしれないので、並列実行をサポートするためにフォワードのためのハードウェアの追加が必要であろう。たとえば、前の命令の実行よりも前に、オペランドフェッチ段よりも先に進む命令が多くなるだろう。もしこれらの命令が前の命令に依存するものであれば、これらの命令のためのオペランドは命令がオペランドフェッチ段に到達したときに利用可能ではないであろう。命令がパイプラインを通じて実行へと進むにつれて命令に対しオペランドを与えるためフォワードのためのハードウェアが設けられていれば、これらの命令が次のパイプライン段へ進むことは可能であろう。残念ながら、フォワードのためのハードウェアは、面積の点と同時に複雑性の点でもコストがかかるであろう。したがって、依存型命令に対しオペランドを与えるためのより効率的な解決策が望ましい。
【0006】
ここでは、「依存」という語は、第2の命令の実行よりも前に第1の命令が実行されていることを第2の命令が必要とするような、第1の命令とそれに続く第2の命令との関係を指すため使用する。たとえば、第2の命令が、第1の命令の実行を通じて発生されるソースオペランドを含むようなときである。一般に、オペランドとは、命令の実行の間にそれに対する操作が行なわれる値である。特定の命令についてのオペランドが命令内にエンコードされたオペランド指示子を通じて位置特定される。たとえば、あるオペランドは、プロセッサ内で用いられるレジスタ内に記憶されるであろう。命令内にエンコードされたレジスタオペランド指示子は、オペランドを記憶している特定のレジスタを選択する。さらに、レジスタオペランド指示子は、レジスタアドレスまたはレジスタ番号とも呼ばれる。一方、他の命令は、プロセッサと結合されたメインメモリ内のメモリ場所内に記憶されたメモリオペランドを指定するであろう。メモリアドレスもオペランド指示子を通じて指定される。たとえば、命令は、メモリオペランドを記憶するメモリ場所を特定する変位を含むであろう。他の命令は、メモリアドレスを形成するために使用されるレジスタオペランドを指定するアドレスオペランド指示子を含むであろう。もしそのオペランドが命令のための入力値であれば、オペランドはソースオペランドであろう。もしそのオペランドが命令の結果であれば、オペランドは行先オペランドであろう。行先オペランド指示子は、命令実行の結果が記憶されるべき記憶場所を指定する。
WO93/20505は、アウトオブオーダでの実行が可能なスーパースカラRISCプロセッサにおける命令のスケジューリングを説明する。該文献は、スケジューリング論理の部分であるレジスタリネーム回路であって、データ依存性が依存性チェックユニットにおいて解決され、第1の命令の結果がレジスタファイルへ転送されることなく一時バッファ命令ウィンドウ内に記憶されるという形で並列命令実行を高速化するレジスタリネーム回路を開示する。これによって、第2の命令の結果を、入力オペランドとして結果を用いてフォワーディングすることが可能になる。しかし、この処理は、命令がディスパッチされて後のパイプラインの命令実行段において発生する。
US−A−5,675,758は、加算/移動ユニット(AMU)と呼ばれ他の実行ユニットに対して選択加算および移動を並列してアウトオブオーダで行なう補助整数実行ユニットの付加によって、既存の実行ユニットが増強される、高性能プロセッサを開示する。AMUは、データ依存性を取り除くことによって、利用可能な命令レベルの並列性を高める。
【0007】
【発明の概要】
上記問題は、前掲の特許請求の範囲の請求項1に規定されるこの発明によるプロセッサによりほぼ解決される。一実施例において、プロセッサは、1以上の命令のソースオペランドに対応するオペランド情報(オペランド値を生成するであろう命令を特定するタグまたはオペランドのいずれか)を受取るよう構成されるルックアヘッドアドレス/結果計算ユニットを含む。もしオペランドが利用可能であれば、ルックアヘッドアドレス/結果計算ユニットは、命令のメモリオペランドのためのルックアヘッドアドレス、または、命令の機能的命令演算に対応するルックアヘッド結果のいずれかを発生するであろう。ルックアヘッドアドレスは、命令に対応するメモリ演算の早期開始のためロード/ストアユニットへ与えられるであろう。ルックアヘッド結果は、投機的オペランドソース(たとえばフューチャファイル)へ、その中での更新のため与えられるであろう。レジスタのためのルックアヘッド状態が、パイプライン内に早期に与えられるという効果がある。その後の命令はそのルックアヘッド状態を受取り、そのルックアヘッド状態を使用して早期にルックアヘッド状態を追加して発生するであろう。他方、その後の命令はそのルックアヘッド状態を受取るであろうし、そしてそれによって、(前の命令の実行を命令ウィンドウ内で待つのではなく)命令ウィンドウへディスパッチされればすぐ実行できる状態となるであろう。
【0008】
プロセッサは、さまざまな態様でより効率的なフォワーディングを達成するであろう。たとえば、多数の命令がオペランドフェッチに際してルックアヘッド結果を受取ってもよく、その場合その後のオペランドのフォワーディングを待つ必要がない。さらに、いくつかの命令オペランドはルックアヘッドアドレス/結果計算ユニットにおいて完了されるであろうから、幅の広い発行速度をサポートするために必要とされる機能ユニットがより少ないであろう。したがって、より少ないフォワーディングバスが(機能ユニットがより少ないことを反映して)実現されるであろう。加えて、ルックアヘッドオペランドを生成する命令がプロセッサパイプラインの実行段に到達するよりも前に、命令に対するルックアヘッドオペランドを提供することによって、性能が上がるであろう。
【0009】
一実施例においては、プロセッサはさらに、ルックアヘッド結果をその後の、同時にデコードされる命令(ライン内依存性)にまとめる(collapse)よう構成されるオペランドまとめユニットを含む。さらに、オペランドまとめユニットは、比較命令を、比較の結果に依存する次の分岐命令内にまとめるよう構成されるであろう。比較/分岐の組合せは単一の機能ユニットしか占めないという効果がある。
【0010】
概括すると、この発明は、ライン内依存性チェックユニット、ルックアヘッド計算ユニット、オペランドまとめユニットおよび1以上の命令ウィンドウを含むプロセッサを企図する。ライン内依存性チェックユニットは、命令のラインに対応する複数のオペランド指示子を受取るよう結合され、複数のオペランド指示子を比較することによって、命令のライン中の命令の間の依存性を判定するよう構成される。ルックアヘッド計算ユニットは、複数のオペランド指示子により指定される1以上のオペランドを受けるよう結合され、もし、命令のライン内の第1の命令に対応するルックアヘッド結果を発生するために第1の命令により使用される各オペランドが1以上のオペランド中にあれば、ルックアヘッド結果を計算するよう構成される。オペランドまとめユニットは、ルックアヘッド計算ユニットおよびライン内依存性チェックユニットと結合され、ルックアヘッド結果を命令ライン中の第2の命令のオペランドとして提供するよう構成される。オペランドまとめユニットは、ルックアヘッド結果をオペランドとして(i)ルックアヘッド計算ユニットからのルックアヘッド結果が有効であるとの表示に応答して、かつ(ii)ライン内依存性チェックユニットからの第2の命令は第1の命令に依存するとの表示に応答して、提供するであろう。命令ウィンドウは、オペランドまとめユニットと結合され、対応するオペランドが与えられるまで命令を記憶しその後実行のためにその命令を選択するよう構成される。オペランドまとめユニットは、もしルックアヘッド結果が有効であれば、ルックアヘッド結果により表わされる第1の命令の少なくとも第1の命令演算の実行を禁止するよう命令ウィンドウに信号を送るよう構成される。
【0011】
この発明はさらに、オペランドまとめユニットおよび1以上の命令ウィンドウを含むプロセッサを企図する。オペランドまとめユニットは、命令のラインに対応する複数のオペランドを受取るよう結合される。オペランドまとめユニットは、命令のライン中の第1の命令に対応する複数のオペランドのうち1以上のオペランドを、命令のライン中の第2の命令のオペランドとして、(i)比較命令である第1の命令に応答して、(ii)条件付き分岐命令である第2の命令に応答して、および(iii)第1の命令に続いた第2の命令に応答して、与えるよう構成される。命令ウィンドウは、オペランドまとめユニットと結合され、対応するオペランドが与えられるまで命令を記憶しその後実行のためにその命令を選択するよう構成される。オペランドまとめユニットは、もし(i)第1の命令が比較命令であれば、(ii)第2の命令が条件付き分岐命令であれば、および(iii)第2の命令が第1の命令に続いていれば、第1の命令の受取りを禁止するよう命令ウィンドウに信号を送るよう構成される。
【0012】
さらに、この発明は、プロセッサにおいて命令のラインを実行するための方法を企図する。複数のオペランド指示子を検出するため、命令のラインがデコードされる。ライン内依存性を検出するため、命令のライン中の各命令の行先オペランド指示子が、命令のライン中の各次の命令のソースオペランド指示子と比較される。ソースオペランド指示子により指定されるソースオペランドを取込むため投機的オペランドソースの読出が行なわれる。ソースオペランドが投機的オペランドソースにおいて利用可能であれば、ライン中の第1の命令に対するルックアヘッド結果が計算される。もしルックアヘッド結果が成功裡に計算されたならば、ルックアヘッド結果を生成する第1の命令の少なくとも第1の命令演算の実行を禁止するため、第1の命令を受取るよう構成された命令ウィンドウに、信号が送られる。もし比較が第2の命令の第1の命令に対する依存性を示せば、命令のライン中の第2の命令にルックアヘッド結果が与えられる。与えるステップは、第2の命令を命令ウィンドウ内に記憶するよりも前に行なわれる。
【0013】
この発明はまたさらに、プロセッサおよび入力/出力(I/O)装置を含むコンピュータシステムを企図する。プロセッサは、命令のラインを複数の発行位置へ整列させるよう構成される整列ユニットと、投機的オペランドを記憶するよう構成される投機的オペランドソースと、命令をそれらの命令に対してオペランドが提供されるまで記憶するよう構成される命令ウィンドウと、ルックアヘッド/まとめユニットとを含む。ルックアヘッド/まとめユニットは、投機的オペランドソース、命令ウィンドウおよび整列ユニットと結合され、整列ユニットから受取った命令のラインに応答して投機的オペランドソースからオペランドを読出すよう構成される。ルックアヘッド/まとめユニットは、オペランドに応答して命令のライン内の第1の命令に対応するルックアヘッド結果を発生するよう構成される。ルックアヘッド/まとめユニットはさらに、ルックアヘッド結果で投機的オペランドソースを更新するよう構成され、さらに、第1の命令に依存する、命令のライン内の第2の命令にルックアヘッド結果をフォワードするよう構成される。ルックアヘッド/まとめユニットは、ルックアヘッド結果を生成する第1の命令の少なくとも第1の命令演算の実行を禁止するよう命令ウィンドウに信号を送るよう構成される。I/O装置は、プロセッサと結合され、コンピュータシステムとI/O装置が結合された他のコンピュータシステムとの間で通信するよう構成される。
【0014】
この発明の他の目的および利点は、添付の図面を参照し以下の詳細な説明を読むことで明らかとなるであろう。
【0015】
この発明にはさまざまな変更および代替的な形態が可能であるが、この発明の特定の実施例を例として図面に示し以下で詳細に説明する。しかし、図面および詳細な説明はこの発明を開示される特定の形態に限定することを意図するものではなく、逆に、前掲特許請求の範囲により規定されるこの発明の精神および範囲内にあるすべての変更、均等物および代替例を包含することが意図されることが理解されねばならない。
【0016】
【詳細な説明】
さて図1を参照し、スーパースカラプロセッサ10の一実施例のブロック図を示す。他の実施例が可能であり企図される。図1に示す実施例においては、プロセッサ10は、プリデコードユニット12、L1 I−キャッシュ14、L0 I−キャッシュ16、フェッチ/スキャンユニット18、命令キュー20、整列ユニット22、ルックアヘッド/まとめユニット24、フューチャファイル26、リオーダバッファ/レジスタファイル28、第1の命令ウィンドウ30A、第2の命令ウィンドウ30B、複数の機能ユニット32A、32B、32Cおよび32D、複数のアドレス発生ユニット34A、34B、34Cおよび34D、ロード/ストアユニット36、L1 D−キャッシュ38、FPU/マルチメディアユニット40および外部インターフェイスユニット42を含む。ここで特定の参照番号に異なった文字を付けた参照符号で示される要素は、集合的に参照番号のみを使用して示されるであろう。たとえば、機能ユニット32A、32B、32Cおよび32Dは、集合的には機能ユニット32として示されるであろう。
【0017】
図1の実施例では、外部インターフェイスユニット42は、プリデコードユニット12、L1 D−キャッシュ38、L2インターフェイス44およびバスインターフェイス46と結合される。プリデコードユニット12はさらにL1 I−キャッシュ14と結合される。L1 I−キャッシュ14は、L0 I−キャッシュ16およびフェッチ/スキャンユニット18と結合される。フェッチ/スキャンユニット18はさらに、L0 I−キャッシュ16および命令キュー20と結合される。命令キュー20は、整列ユニット22と結合され、整列ユニット22はさらに、ルックアヘッド/まとめユニット24と結合される。ルックアヘッド/まとめユニット24はさらに、フューチャファイル26、リオーダバッファ/レジスタファイル28、ロード/ストアユニット36、第1の命令ウィンドウ30A、第2の命令ウィンドウ30BおよびFPU/マルチメディアユニット40と結合される。FPU/マルチメディアユニット40は、ロード/ストアユニット36およびリオーダバッファ/レジスタファイル28と結合される。ロード/ストアユニット36は、L1 D−キャッシュ38と結合される。第1の命令ウィンドウ30Aは、機能ユニット32A〜32Bおよびアドレス発生ユニット34A〜34Bと結合される。同様に、第2の命令ウィンドウ30Bは、機能ユニット32C〜32Dおよびアドレス発生ユニット34C〜34Dと結合される。L1 D−キャッシュ38、機能ユニット32およびアドレス発生ユニット34は各々、複数の結果バス48と結合され、複数の結果バス48はさらに、ロード/ストアユニット36、第1の命令ウィンドウ30A、第2の命令ウィンドウ30B、リオーダバッファ/レジスタファイル28およびフューチャファイル26と結合される。
【0018】
概して、ルックアヘッド/まとめユニット24は、所定の命令のためのルックアヘッド結果を、これらの命令が実行のためにディスパッチされる前に発生するよう構成される。もし結果を生成するために使用されるオペランドが、フューチャファイルからのオペランドのフェッチに際してフューチャファイル26内で利用可能であれば、ルックアヘッド結果が所定の命令のために発生される。(実行の際の結果としてオペランドを生成するであろう命令を特定する結果キュータグである場合とは異なり)もしその値がフューチャファイル26内で有効であれば、オペランドはフューチャファイル26内で利用可能である。もしルックアヘッド結果が成功裡に発生されれば、結果はフューチャファイル26へ与えられて記憶され、命令の同じ「ライン」内の(すなわち命令とともに同時にデコードされる)従属している命令へ与えられる。投機的結果が、パイプライン内でより早期に後の命令に対し利用可能となるという効果が奏されるであろう。したがって、後の命令のためにルックアヘッド結果が計算されるであろう。さらに、フォワーディングがフューチャファイル26を通じてより頻繁に達成されるので、フォワーディングがより効率的となろう。したがって、フォワードするためのハードウェアが減じられるであろう。さらに、所定の命令に対して実行ハードウェアの外で結果が発生されるために、幅の広い発行速度を依然サポートしつつも、プロセッサ10内で用いられる実行ハードウェアの量が減じられるであろう。
【0019】
一実施例においては、ルックアヘッド/まとめユニット24は、メモリオペランドを有する命令のためのルックアヘッドアドレスを発生するよう構成される。このような命令については、さもなくば、アドレス発生ユニット34の1つによって行なわれるアドレス発生命令演算が、ルックアヘッド/まとめユニット24により行なわれるであろう。したがって、ロード/ストアユニット36は、さもなくば達成可能であったであろうよりも、早期にパイプライン内でアドレスを受取るであろう。もし、命令が加算系命令演算またはレジスタからレジスタへの移動を指定するならば、そして、メモリオペランドを含んでいなければ、ルックアヘッド/まとめユニット24はルックアヘッド結果を発生するであろう。したがって、さもなくば機能ユニット32の1つによって実行されたであろう機能的命令演算が、パイプライン内でより早期にルックアヘッド/まとめユニット24により行なわれる。
【0020】
プリデコードユニット12は、外部インターフェイスユニット42によりフェッチされた命令バイトを受取り、命令バイトがL1 I−キャッシュ14内に記憶されるより前に命令バイトをプリデコードする。プリデコードユニット12によって発生されたプリデコード情報は、同様にL1 I−キャッシュ14内に記憶される。一般に、プリデコード情報は、命令のフェッチおよび発行の間に有用であろう命令特徴の特定を助けるため提供されるが、フェッチおよび発行演算の間に迅速に発生することは困難であろう。ここで使用する際は「プリデコード」という語は、デコードされる命令バイトとともに後に命令キャッシュ(たとえばL1 I−キャッシュ14および/またはL0 I−キャッシュ16など)内に記憶されるプリデコード情報を発生するためのデコード命令を指す。
【0021】
一実施例では、プロセッサ10は、命令バイトごとにプリデコード情報2ビットを用いる。これらのビットの1つは、「開始ビット」と呼ばれ、その命令バイトが命令の最初のバイトであるのか否かを示す。命令バイトの群がフェッチされるとき、対応する開始ビットの組が命令バイトの群の中の命令間の境界を特定する。したがって、対応する開始ビットをスキャンすることによって、命令バイトの群から複数の命令が同時に選択されよう。開始ビットが、各命令の最初のバイトを特定することによって命令の境界を位置特定するため使用される一方で、代替的に各命令の最後のバイトを特定することによって命令の境界を位置特定するよう、終了ビットが使用できよう。
【0022】
この実施例において使用される第2のプリデコードビットは、「転送制御」ビットと呼ばれ、どの命令が分岐命令であるかを特定する。命令の最初のバイトに対応する転送制御ビットは、その命令が分岐命令であるか否かを示す。命令の後のバイトに対応する転送制御ビットは、小変位フィールドを有する相対分岐命令以外についてはドントケアである。具体的一実施例によれば、小変位フィールドは8ビットフィールドである。一般に、「小変位フィールド」は、分岐命令により発生されるターゲットアドレスよりも少ないビットを有する変位フィールドを指す。小変位フィールドを有する相対分岐命令については、変位バイトに対応する転送制御ビットが以下に説明するように使用される。
【0023】
命令バイトに対応するプリデコード情報を発生するのに加えて、プリデコードユニット12は、この実施例においては、ターゲットアドレスを実際に記憶するため相対分岐命令の変位フィールドを再コードするよう構成される。すなわち、プリデコードユニット12は、相対分岐命令の変位を、プロセッサ10により用いられる命令セットにより規定されるように、相対分岐命令に対応するアドレスに加える。得られたターゲットアドレスは、変位の代わりとして変位フィールドにエンコードされ、更新された変位フィールドが元の変位フィールドの代わりにL1 I−キャッシュ14に記憶される。相対ターゲットアドレスを前もって計算することによって、ターゲットアドレス発生が簡単にされ、それによって分岐予測機構がより効率的に動作するであろう。
【0024】
x86命令セットを用いるプロセッサ10の一実施例においては、プリデコードユニット12は、8ビットの変位フィールドおよび32ビットの変位フィールドを再コードするよう構成される。32ビットの変位フィールドはターゲットアドレス全体を記憶するであろう。一方、8ビットの変位フィールドはエンコードされる。特に、8ビットの変位フィールドおよび対応する転送制御プリデコードビットは、キャッシュラインオフセット部と相対的キャッシュライン部とに分割される。キャッシュラインオフセット部は、ターゲットアドレスのキャッシュラインオフセット部である。相対キャッシュライン部は、相対分岐命令を記憶しているキャッシュラインよりも上または下のキャッシュライン数という形で、ターゲットアドレスにより特定されるキャッシュライン(「ターゲットキャッシュライン」)を定義する。第1のキャッシュライン内の各バイトが第2のキャッシュライン内のバイトが記憶されているアドレスよりも数値的に大きいアドレスに記憶されているとき、第1のキャッシュラインは第2のキャッシュラインよりも上であるという。逆に、第1のキャッシュライン内の各バイトが、第2のキャッシュライン内のバイトが記憶されているアドレスよりも数値的に小さいアドレスに記憶されていれば、第1のキャッシュラインは第2のキャッシュラインよりも下であるという。符号付の8ビット変位は、分岐命令に対応するアドレスから+/−128バイトのアドレスを指定する。したがって、8ビット変位を有する相対分岐命令により到達可能な上のおよび下のキャッシュラインの数は限定される。相対キャッシュライン部は、この限定された上のおよび下のキャッシュラインの組をエンコードする。通常、小変位フィールドを有する分岐命令は、予め定められた範囲内に変位を有するが、より大きな変位フィールドは、予め定められた範囲外の値を記憶するであろう。
【0025】
次の表1および表2は、プロセッサ10の一実施例による、バイトに対応するプリデコード情報のエンコードの例を示す。
【0026】
【表1】
【0027】
【表2】
【0028】
プリデコードユニット12は、受取った命令バイトと対応するプリデコード情報とを記憶するためL1 I−キャッシュ14へ送る。L1 I−キャッシュ14は、命令バイトおよびプリデコード情報を記憶するための高速キャッシュメモリである。L1 I−キャッシュ14は、ダイレクトマッピング構成およびセットアソシアティブ構成を含む任意の適切な構成を用いてよい。具体的一実施例では、L1 I−キャッシュ14は、64バイトのキャッシュラインを用いる128KBの2ウェイセットアソシアティブキャッシュである。L1 I−キャッシュ14は、中に記憶される命令バイトに対応するプリデコード情報用の付加的記憶装置を含む。付加的記憶装置は、命令バイト記憶装置と同様に編成される。ここで使用する際には、「キャッシュライン」という語は、特定のキャッシュ内の記憶装置の割当の単位を指す。一般に、キャッシュライン内のバイトが、1単位としてキャッシュにより操作される(すなわち割当てられ割当て解除される)。
【0029】
一実施例では、L1 I−キャッシュ14は、線形にアドレス指定され、物理的タグが付けられる。キャッシュを索引するために使用されるアドレスビットの少なくとも1つが、後から物理的アドレスビットに変換される線形アドレスビットであれば、キャッシュは線形にアドレス指定されているという。線形にアドレス指定された/物理的タグが付けられたキャッシュのタグは、インデックスのために使用されないビットに加え変換された各ビットを含む。x86アーキテクチャの指定によれば、命令は論理アドレスを発生し、それはセグメンテーション変換機構を通じて線形アドレスに変換されさらにページ変換機構を通じて物理アドレスに変換されるように規定されている。論理アドレスと対応する線形アドレスとが等しいフラットアドレッシングモードの使用がますます一般的となってきている。プロセッサ10は、フラットアドレッシングモードを用いるよう構成されてもよい。したがって、実行中の命令により発生されるフェッチアドレス、ターゲットアドレスなどは線形アドレスである。L1 I−キャッシュ14においてヒットが検出されるか否かを判定するため、フェッチ/スキャンユニット18によりキャッシュに提示される線形アドレスは、変換ルックアサイドバッファ(TLB)を使用して対応する物理アドレスに変換され、この物理アドレスが指し示されたキャッシュラインからの物理的タグと比較されてヒット/ミスが判定される。フラットアドレッシングモードが使用されないときは、プロセッサ10はやはりコードを実行するであろうが、論理アドレスから線形アドレスを発生するために付加的なクロックサイクルが使用されるであろう。
【0030】
さらに、L0 I−キャッシュ16は、命令バイトを記憶するための高速キャッシュメモリである。L1 I−キャッシュ14は大きいために、L1 I−キャッシュ14のアクセスタイムは長いであろう。具体的一実施例では、L1 I−キャッシュ14は2クロックサイクルのアクセスタイムを使用する。単一サイクルでのフェッチアクセスを可能にするため、L0 I−キャッシュ16が用いられる。L0 I−キャッシュ16は、L1 I−キャッシュ14と比較してより小さく、そのためより高速のアクセスタイムをサポートするであろう。具体的一実施例では、L0 I−キャッシュ16は512バイトのフルアソシアティブキャッシュである。L1 I−キャッシュ14と同様、L0 I−キャッシュ16は、命令バイトのキャッシュラインおよび対応するプリデコード情報を記憶するよう構成される(たとえば512バイトで、8つの64バイトキャッシュラインを記憶し、対応するプリデコードデータは付加的記憶装置内に記憶される)。一実施例では、L0 I−キャッシュ16は線形にアドレス指定され線形タグが付けられるであろう。
【0031】
フェッチ/スキャンユニット18は、L0 I−キャッシュ16に対してフェッチアドレスを発生するよう、そして、L1 I−キャッシュ14に対してフェッチまたはプリフェッチアドレスを発生するよう構成される。L0 I−キャッシュ16からフェッチされた命令は、フェッチ/スキャンユニット18によってスキャンされ、ディスパッチのために命令を特定すると同時に分岐命令を位置特定し、さらに、位置特定された分岐命令に対応する分岐予測を形成する。命令スキャン情報および対応する命令バイトは、フェッチ/スキャンユニット18によって命令キュー20へ記憶される。さらに、特定された分岐命令および分岐予測は、L0 I−キャッシュ16に対しその後のフェッチアドレスを発生するため使用される。
【0032】
フェッチ/スキャンユニット18は、プリフェッチされるキャッシュラインがプロセッサ10へのディスパッチのためにフェッチ/スキャンユニット18によりフェッチされるよりも前に、L1 I−キャッシュ14からL0 I−キャッシュ16へのキャッシュラインのプリフェッチを試みるためプリフェッチアルゴリズムを用いる。任意の適当なプリフェッチアルゴリズムが使用されてよい。プリフェッチアルゴリズムの一実施例を以下にさらに詳細に示す。
【0033】
フェッチ/スキャンユニット18は、1クロックサイクルの間に命令のより大きな「ラン」をフェッチしようとする試みにおいて、攻撃的な分岐予測機構を用いる。ここで使用する際には、命令の「ラン」とは、そのセットの中で指定されたシーケンスで実行されると予測される、1以上の命令のセットである。たとえば、フェッチ/スキャンユニット18は、L0 I−キャッシュ16から24個の命令バイトのランをフェッチするであろう。各ランは、いくつかのセクションに分割され、フェッチ/スキャンユニット18はこれらのセクションを並列でスキャンして、分岐命令を特定し、命令キュー20のために命令スキャン情報を発生する。一実施例では、フェッチ/スキャンユニット18は、大きな命令のランをサポートするため、クロックサイクル当り最大2つの分岐命令を予測するよう試みる。
【0034】
命令キュー20は、続いてのディスパッチのために、フェッチ/スキャンユニット18により与えられる命令バイトを記憶するよう構成される。命令キュー20は、ファーストインファーストアウト(FIFO)バッファとして動作してよい。一実施例では、命令キュー20は、複数のエントリを記憶するよう構成され、各エントリは、命令のラン、ランの各セクション内の最大5つの命令を特定するスキャンデータおよびランの各セクションに対応するアドレスを含む。さらに、命令キュー20は、整列ユニット22への提示のため、ランの最大4つの連続したセクション内から最大6つの命令を選択するよう構成されてもよい。命令キュー20は、たとえば2〜3のエントリを用いてよい。
【0035】
整列ユニット22は、命令キュー20により特定された命令をルックアヘッド/まとめユニット24内の発行位置のセットへ割り振るよう構成される。すなわち、整列ユニット22は、命令キュー20により与えられるスキャン情報に応答して、命令キュー20によって与えられるランのセクションから各命令を形成するバイトを選択する。命令はプログラム順に発行位置へと与えられる(すなわち、プログラム順において1番目の命令が第1の発行位置に与えられ、プログラム順において第2番目の命令が第2の発行位置に与えられる、等々)。
【0036】
ルックアヘッド/まとめユニット24は、整列ユニット22により与えられる命令をデコードする。ルックアヘッド/まとめユニット24により検出されたFPU/マルチメディア命令は、FPU/マルチメディアユニット40へ与えられる。他の命令は、第1の命令ウィンドウ30A、第2の命令ウィンドウ30Bおよび/またはロード/ストアユニット36に与えられる。一実施例では、特定の命令が、その命令が整列ユニット22により整列させられた発行位置に基づいて、第1の命令ウィンドウ30Aまたは第2の命令ウィンドウ30Bへ与えられる。具体的一実施例では、発行位置からの命令が命令ウィンドウ30aおよび30bに交互に与えられる。たとえば、発行位置0、2および4からの命令が第1の命令ウィンドウ30Aに与えられてよく、発行位置1、3および5からの命令が第2の命令ウィンドウ30Bに与えられてよい。メモリ演算を含む命令はさらに、L1 D−キャッシュ38へのアクセスのためロード/ストアユニット36へ与えられる。
【0037】
さらに、ルックアヘッド/まとめユニット24は、特定のタイプの命令のためにルックアヘッドアドレスまたは実行結果を発生しようと試みる。ルックアヘッドアドレス/結果発生は、特にx86命令セットを用いる実施例において有益であろう。x86命令セットの性質のため、典型的なコードシーケンスにおける多くの命令は、簡単な移動の一種である。この特徴の理由は、x86命令が2つのオペランドを含み、その両方がソースオペランドであり一方が行先オペランドであるからである。このため、各命令のソースオペランドの一方が実行結果でオーバーライトされる。さらに、x86命令セットは、レジスタオペランドの記憶のため極めて少数のレジスタしか指定しない。したがって、多くの命令はメモリ内に維持されるスタックへのオペランドの移動およびスタックからのオペランドの移動である。さらに、多くの命令の依存性は、ESP/EBPレジスタに対する依存性であるが、これらのレジスタへの更新の多くは前に記憶された値へのインクリメントおよびデクリメントである。
【0038】
これらの命令の実行を加速するため、ルックアヘッド/まとめユニット24は、クロックサイクルの間にデコードされる各命令のためにESPおよびEBPレジスタのルックアヘッドコピーを発生する。さらに、ルックアヘッド/まとめユニット24は、各命令により選択されるレジスタオペランドのためフューチャファイル26にアクセスする。各レジスタオペランドに対して、フューチャファイル26は、このレジスタを行先オペランドとして有する最も最近の命令に対応するリオーダバッファ結果キューエントリを特定するタグまたは実行結果のいずれかを記憶しているであろう。
【0039】
一実施例では、ルックアヘッド/まとめユニット24は、(i)メモリオペランドを含む、および(ii)メモリオペランドのアドレスを形成するため使用されるレジスタオペランドがフューチャファイル26またはESP/EBPのルックアヘッドコピーから利用可能である、各命令に対してアドレス計算を行なうよう試みる。加えて、ルックアヘッド/まとめユニット24は、(i)メモリオペランドを含まない、(ii)(インクリメントおよびデクリメントを含む)加算/減算演算を指定する、および(iii)レジスタオペランドがフューチャファイル26またはESP/EBPのルックアヘッドコピーから利用可能である、各命令に対して結果計算を行なうよう試みる。上記態様において、多くの簡単な演算が、命令が命令ウィンドウ30A〜30Bに送られるよりも前に完了されるであろう。
【0040】
ルックアヘッド/まとめユニット24は、ディスパッチされてくる命令の群の間の依存性を検出し、中で発生される実行結果をすべてこれらの命令結果に依存する命令中にまとめる。さらに、ルックアヘッド/まとめユニット24は、ルックアヘッド実行結果でフューチャファイル26を更新する。ルックアヘッド/まとめユニット24により完了される命令演算(すなわち、アドレス発生および/または命令結果が発生され、ロード/ストアユニット36またはフューチャファイル26および結果キューが更新される)は、命令ウィンドウ30A〜30Bへディスパッチされない。
【0041】
ルックアヘッド/まとめユニット24は、ディスパッチされる各命令に対してリオーダバッファ/レジスタファイル28内の結果キューエントリを割当てる。具体的一実施例では、リオーダバッファ/レジスタファイル28は、ライン指向型で編成された結果キューを含み、この結果キュー内では、実行結果のための記憶場所が、同時にディスパッチ可能な命令の最大数に対応する実行結果用の十分な記憶場所を有するライン内で割当てられかつ割当て解除される。もし最大数に満たない命令がディスパッチされれば、ライン内の特定の記憶場所が空となる。その後ディスパッチされる命令は、次に利用可能なラインを使用し所定の記憶場所は空のままとする。一実施例では、結果キューは40個のラインを含み、各ラインは同時にディスパッチされる命令に対応する最大6つの実行結果を記憶するであろう。実行結果は、リオーダバッファ/レジスタファイル28内に含まれるレジスタファイルへと順番に結果キューからリタイアされる。さらに、リオーダバッファは分岐予測誤りを処理し、分岐命令の実行により発生される訂正されたフェッチアドレスをフェッチ/スキャンユニット18へ送る。同様に、他の例外を発生する命令は、リオーダバッファ内で処理される。例外を発生した命令の後の命令に対応する結果は、リオーダバッファにより廃棄される。レジスタファイルは設計されたレジスタ各々に対する記憶場所を含む。たとえば、x86命令セットは8つの設計されたレジスタを規定する。このような実施例に対するレジスタファイルは8つの記憶場所を含む。レジスタファイルはさらに、マイクロコードユニットを用いる実施例においてはマイクロコードユニットにより一時レジスタとして使用される記憶場所を含むであろう。
【0042】
フューチャファイル26は、命令がルックアヘッド/まとめユニット24によりディスパッチされる間、設計されたレジスタ各々の投機的状態を維持する。レジスタ行先オペランドを有する命令がルックアヘッド/まとめユニット24によりデコードされるに伴い、命令に割当てられるリオーダバッファ/レジスタファイル28の結果キュー部分内の記憶場所を特定するタグが、レジスタに対応するフューチャファイル26の記憶場所へ記憶される。対応する実行結果が与えられたとき、(レジスタを更新する次の命令がまだディスパッチされていないと仮定して)その実行結果は対応する記憶場所へ記憶される。
【0043】
一実施例では、命令キュー20から最大6つの命令の群が選択され、1単位としてルックアヘッド/まとめユニット24内のパイプラインを移動することが注意される。もし、この群内の1以上の命令がストール条件を発生すれば、群全体がストールする。この規則の例外は、その群の中でのESP更新の数のためにルックアヘッド/まとめユニット24がライン分離条件を発生する場合である。このような命令の群を、ここでは命令の「ライン」と呼ぶ。
【0044】
命令ウィンドウ30はルックアヘッド/まとめユニット24から命令を受取る。命令ウィンドウ30はその命令に対応するオペランドが受取られるまでその命令を記憶し、実行のため命令を選択する。一旦メモリ演算を含む命令のアドレスオペランドが受取られると、命令はアドレス発生ユニット34の1つに送られる。アドレス発生ユニット34はアドレスオペランドからアドレスを発生し、アドレスをロード/ストアユニット36へフォワードする。一方、一旦命令の実行オペランドが受取られると、命令は実行のため機能ユニット32の1つへ送られる。一実施例では、各整数ウィンドウ30A〜30Bは命令のための25個の記憶場所を含む。各整数ウィンドウ30A〜30Bは、各整数ウィンドウに接続されるアドレス発生ユニット34および機能ユニット32内の最大で2つのアドレス発生および2つの機能ユニット演算を各クロックサイクルについて実行のために選択するよう構成される。一実施例では、L0 I−キャッシュ16からフェッチされた命令は、命令ウィンドウ30の1つに記憶されるまではフェッチされたときの順番のままで維持され、命令ウィンドウ30の1つに記憶された時点で命令はアウトオブオーダで実行されるであろう。
【0045】
x86命令セットを用いるプロセッサ10の実施例では、命令はロード/ストアユニット36のための暗黙のメモリ演算と機能ユニット32のための明示的機能演算とを含むであろう。メモリオペランドを持たない命令はメモリ演算を全く含まず、機能ユニット32によって処理される。ソースメモリオペランドおよびレジスタ行先オペランドを有する命令は、ロード/ストアユニット36により処理される暗黙のロードメモリ演算および機能ユニット32により処理される明示的機能演算を含む。メモリソース/行先オペランドを有する命令は、ロード/ストアユニット36により処理される暗黙のロードおよびストアメモリ演算および機能ユニット32により処理される明示的機能演算を含む。最後に、明示的機能演算を持たない命令はロード/ストアユニット36により処理される。各メモリ演算の結果、ルックアヘッド/まとめユニット24またはアドレス発生ユニット34のいずれかにより処理されるアドレス発生が生じる。ここではメモリ演算および命令(すなわち機能演算)を別個に述べるであろうが、この2つは単一の命令から生じ得る。
【0046】
アドレス発生ユニット34は、アドレス発生演算を行ないそれによってロード/ストアユニット36内でのメモリ演算のためのアドレスを発生するよう構成される。発生されたアドレスは結果バス48を通じてロード/ストアユニット36へフォワードされる。機能ユニット32は、整数算術/論理演算を行ない分岐命令を実行するよう構成される。実行結果はフューチャファイル26、リオーダバッファ/レジスタファイル28および命令ウィンドウ30A〜30Bへ結果バス48を通じてフォワードされる。アドレス発生ユニット34および機能ユニット32は、実行されている命令を特定するため、実行されている命令に割当てられた結果キュータグを結果バス48上で運ぶ。上記態様で、フューチャファイル26、リオーダバッファ/レジスタファイル28、命令ウィンドウ30A〜30Bおよびロード/ストアユニット36が、実行結果を対応する命令に対して特定するであろう。FPU/マルチメディアユニット40は、浮動小数点およびマルチメディア命令を実行するよう構成される。
【0047】
ロード/ストアユニット36は、メモリ演算を行なうためL1 D−キャッシュ38とインターフェイスするよう構成される。メモリ演算は、プロセッサ10と外部メモリとの間でのデータの転送である。メモリ演算は、やはり機能ユニット32により実行される演算を含む、命令の暗黙の部分であってもよく、または明示的命令であってもよい。ロードメモリ演算は、外部メモリからプロセッサ10へのデータの転送を指定し、ストアメモリ演算は、プロセッサ10から外部メモリへのデータの転送を指定する。もし、L1 D−キャッシュ38内でのメモリ演算についてヒットが検出されれば、外部メモリにアクセスすることなくそこでメモリ演算が完了する。ロード/ストアユニット36は、ルックアヘッド/まとめユニット24から(ルックアヘッドアドレス計算を通じて)またはアドレス発生ユニット34からメモリ演算のためのアドレスを受取るであろう。この一実施例では、ロード/ストアユニット36は、クロックサイクル当り3つのメモリ演算をL1 D−キャッシュ38に対して行なうよう構成される。この実施例では、ロード/ストアユニット36は、D−キャッシュ38にまだアクセスしていない最大で30のロード/ストアメモリ演算をバッファするよう構成されるであろう。この実施例はさらに、D−キャッシュ38をミスしたロードメモリ演算をバッファするための96個のエントリのミスバッファおよび32個のエントリの記憶データバッファを含むよう構成されるであろう。ロード/ストアユニット36は、ロードおよびストアメモリ演算の間、メモリ依存性チェックを行なうよう構成される。
【0048】
L1 D−キャッシュ38はデータを記憶するための高速キャッシュメモリである。セットアソシアティブ構成およびダイレクトマッピング構成を含む、任意の適切な構成をL1 D−キャッシュ38のために使用してよい。一具体例では、L1 D−キャッシュ38は、64バイトのラインを用いる128KBの2ウェイセットアソシアティブキャッシュである。L1 D−キャッシュ83は、たとえば、ウェイごとに32個のバンクのキャッシュメモリとして編成されてもよい。さらに、L1 D−キャッシュ38は、L1 I−キャッシュ14と同様、TLBを用いる線形にアドレス指定され/物理的タグが付けられるキャッシュであってよい。
【0049】
外部インターフェイスユニット42は、キャッシュのミスに応答して、命令バイトおよびデータバイトのキャッシュラインをプロセッサ10へ転送するよう構成される。命令キャッシュラインは、プリデコードユニット12へ割り振られ、データキャッシュラインはL1 D−キャッシュ38に割り振られる。さらに、外部インターフェイスユニット42は、L1 D−キャッシュ38により廃棄されるキャッシュラインを、もしその廃棄されるキャッシュラインがプロセッサ10に対し変更されていれば、メモリへ転送するよう構成される。図1に示すように、外部インターフェイスユニット42は、バスインターフェイス46を介してコンピュータシステムへインターフェイスすると同時にL2インターフェイス44を介して外部L2キャッシュにインターフェイスするよう構成される。一実施例では、バスインターフェイスユニット46はEV/6バスインターフェイスを含む。
【0050】
次に図2を参照し、フェッチ/スキャンユニット18の一実施例のブロック図を示す。他の実施例も可能であり企図される。図2に示すように、フェッチ/スキャンユニット18は、フェッチ制御ユニット50、複数の次選択ブロック52A〜52C、命令選択マルチプレクサ(mux)54、命令スキャナ56、分岐スキャナ58、分岐履歴テーブル60、分岐選択mux62、リターンスタック64、間接アドレスキャッシュ66、およびフォワードまとめユニット68を含む。フェッチ制御ユニット50は、L1 I−キャッシュ14、L0 I−キャッシュ16、間接アドレスキャッシュ66、リターンスタック64、分岐履歴テーブル60、分岐スキャナ58および命令選択mux54と結合される。次選択ブロック52AはL1 I−キャッシュ14と結合され、他方、次選択ブロック52B〜52CはL0 I−キャッシュ16と結合される。各次選択ブロック52は、命令選択mux54と結合され、命令選択mux54はさらに、分岐スキャナ58および命令スキャナ56と結合される。命令スキャナ56は命令キュー20と結合される。分岐スキャナ58は分岐履歴テーブル60、リターンスタック64および分岐選択mux62と結合される。分岐選択mux62は間接アドレスキャッシュ66と結合される。分岐履歴テーブル60および分岐スキャナ58は、フォワードまとめユニット68と結合され、フォワードまとめユニット68は命令キュー20と結合される。
【0051】
フェッチ制御ユニット50は、分岐スキャナ50、分岐履歴テーブル60、リターンスタック64および間接アドレスキャッシュ66から(ターゲットアドレスおよびテイクン/ノットテイクン予測を含む)分岐予測情報を受取る。フェッチ制御ユニット50は、分岐予測情報に応答して、L0 I−キャッシュ16のためのフェッチアドレスを発生し、L1 I−キャッシュ14のためのフェッチアドレスまたはプリフェッチアドレスを発生する。一実施例では、フェッチ制御ユニット50は、L0 I−キャッシュ16のために2つのフェッチアドレスを発生する。第1のフェッチアドレスは、分岐スキャナ58により特定される第1の分岐命令(もしあれば)に対応するターゲットアドレスとして選択される。第2のフェッチアドレスは、前のクロックサイクル中に選択されたフェッチアドレスの次のアドレスである(すなわち、命令選択mux54により選択されたランに対応するフェッチアドレス)。
【0052】
L0 I−キャッシュ14は、2つのフェッチアドレスに対応するキャッシュライン(およびプリデコード情報)と、これらのキャッシュライン各々の次のキャッシュライン(およびプリデコード情報)とを、次選択ブロック52B〜52Cへ与える。特に、次選択ブロック52Bは、次のアドレスに対応する次のキャッシュラインおよびこの次のキャッシュラインの次のインクリメントしたキャッシュラインを受ける。次選択ブロック52Cは、ターゲットアドレスに対応するターゲットキャッシュラインとターゲットキャッシュラインの次のキャッシュラインとを受ける。さらに、次選択ブロック52B〜52Cは、対応するフェッチアドレスのオフセット部を受ける。各次選択ブロック52B〜52Cは、対応するフェッチアドレスのオフセット部を含むランセクションで始めて、受取ったキャッシュラインから命令バイト(および対応するプリデコード情報)のランを選択する。各フェッチアドレスのオフセット部はキャッシュラインのどこからでも始まり得るので、選択されたランは、フェッチされたキャッシュライン部およびフェッチされたキャッシュラインの次のキャッシュライン部を含み得る。したがって、フェッチされたキャッシュラインおよび次のキャッシュラインの両方が次選択ブロック52B〜52Cにより受取られる。
【0053】
同様に、次選択ブロック52Aは、L1 I−キャッシュ14からプリフェッチされたキャッシュライン(および対応するプリデコード情報)を受け、そこから命令のランを選択する。1つのキャッシュラインがL1 I−キャッシュ14からプリフェッチされるので、そこから選択されるランは、もしプリフェッチアドレスのオフセット部がキャッシュラインの終りに近ければ、含むのはラン全体よりも少ないであろう。L0 I−キャッシュ16からのフェッチキャッシュラインは、対応するアドレスがフェッチ制御ユニット50によって発生されるため、同一のクロックサイクル中に与えられるであろうが、プリフェッチキャッシュラインはL1 I−キャッシュ14のサイズがより大きくアクセスタイムがより遅いために1クロックサイクル遅延され得ることが留意される。L1 I−キャッシュ14は、プリフェッチされたキャッシュラインを次選択ブロック52Aへ与えるのに加えて、L0 I−キャッシュ16へプリフェッチされたキャッシュラインを与える。もし、プリフェッチされたキャッシュラインが既にL0 I−キャッシュ16内に記憶されていれば、L0 I−キャッシュ16はプリフェッチされたキャッシュラインを廃棄するであろう。しかしながら、もしプリフェッチされたキャッシュラインがまだL0 I−キャッシュ14内に記憶されていなければ、プリフェッチされたキャッシュラインはL0 I−キャッシュ16へ記憶される。上記態様で、現在アクセスされているであろうキャッシュラインが、L0 I−キャッシュ16からの迅速なアクセスのためにL0 I−キャッシュ16へ送られる。具体的一実施例によれば、L0 I−キャッシュ16は8つのエントリのフルアソシアティブキャッシュ構造を含む。フルアソシアティブ構造は、L0 I−キャッシュ16に含まれるキャッシュラインの数が比較的少ないので用いられ得る。他の実施例では他の編成(たとえばセットアソシアティブまたはダイレクトマッピング)を用いてもよい。
【0054】
フェッチ制御ユニット50は、命令選択mux54を制御することによって、分岐予測情報に応答して次選択ブロック52の1つにより与えられる命令ランを選択する。以下にさらに詳細に説明するように、フェッチ制御ユニット50はクロックサイクルの早期において分岐スキャナ58、リターンスタック64および間接アドレスキャッシュ66から(この実施例では)ターゲットアドレスを受取り、かつ、分岐スキャナ58により特定される第1の分岐命令のオペコードバイトの少なくとも一部を受取る。フェッチ制御ユニット50は、オペコードバイトの部分をデコードして、さまざまなターゲットアドレスソースから、L0 I−キャッシュ16からフェッチされるべきターゲットアドレスを選択し、選択されたターゲットアドレスをL0 I−キャッシュ16へ与える。並行して、前のクロックサイクル中に選択されたフェッチアドレスの次のアドレス(前のクロックサイクルからの分岐予測に依存して、ターゲットアドレスまたは前のクロックサイクルの次のアドレスのいずれか)が計算され、L0 I−キャッシュ16へ与えられる。クロックサイクルの後の方で、分岐予測情報(すなわちテイクンまたはノットテイクン)が分岐履歴テーブル60により与えられる。もし、L0 I−キャッシュ16からフェッチされたターゲットアドレスに対応する分岐命令が、テイクン予測されれば、フェッチ制御ユニット50は次選択ブロック52Cにより与えられた命令ランを選択する。一方、もし分岐命令がノットテイクン予測されれば、次選択ブロック52Bにより選択された命令ランが選択される。もし、前のクロックサイクルにおいて、予測されたフェッチアドレスがL0 I−キャッシュ16でミスしL1 I−キャッシュ14からフェッチされていれば、次選択ブロック52Aにより与えられる命令ランが選択される。さらに、分岐命令が32ビット変位または間接ターゲットアドレス発生を有すること、またはL0 I−キャッシュミスがフェッチされたことに応答して、命令ランがフェッチされていたならば、L1 I−キャッシュ14からの命令ランが選択される。
【0055】
選択された命令ランは、命令スキャナ56および分岐スキャナ58に与えられる。命令スキャナ56は、選択された命令ランに対応するプリデコード情報をスキャンし、命令ラン内の命令を特定する。一実施例では特に、命令スキャナ56は並行して各ランセクションに対応する開始ビットをスキャンし、各ランセクション内の最高5つの命令を特定する。特定された命令に対するポインタ(ランセクション内でのオフセット)が発生される。ポインタ、命令バイトおよび(ランセクション当り1つの)アドレスが命令スキャナ56によって命令キュー20へ送られる。もし、特定のランセクションが6以上の命令を含んでいれば、特定のランセクションの後のランセクションに対応する情報は無効とされ、この特定のランセクションおよびその後のランセクションが次のクロックサイクルの間に再びスキャンされる。
【0056】
分岐スキャナ58は、命令スキャナ56と並行して、命令ランをスキャンする。分岐スキャナ58は命令ランの開始ビットおよび転送制御ビットをスキャンし、命令ラン中の最初の2つの分岐命令を特定する。上述のように、分岐命令は、設定されている(開始ビットにより特定される)命令の開始バイトに対応する転送制御ビットにより特定される。第1の2つの分岐命令を見出すと、分岐スキャナ58は命令が相対分岐命令であるとみなし、分岐命令の開始バイトの後の命令バイトから、対応するエンコードされたターゲットアドレスを選択する。x86命令セットを用いる実施例においては、9ビットのターゲットアドレス(変位バイトおよび対応する転送制御ビット)が選択され、同様に32ビットのターゲットアドレスが選択される。さらに、開始ビットおよび転送制御ビットにより特定されたオペコードバイトの少なくとも一部が選択される。ターゲットアドレスおよびオペコードバイトは、L0 I−キャッシュ16からのフェッチのためのターゲットアドレスの選択において使用するため、フェッチ制御ユニット50へ与えられる。(各分岐命令を含むランセクションのフェッチアドレスおよびセクション内の分岐命令の位置から決定される)各分岐命令のフェッチアドレスは、各分岐命令に対応するテイクン/ノットテイクン予測を選択するため分岐履歴テーブル60へ与えられる。さらに、各分岐命令に対応するフェッチアドレスが分岐選択mux62へ与えられ、さらに間接アドレスキャッシュ66へ与えられる。各分岐命令のターゲットアドレスは、フォワードまとめユニット68へ与えられる。一実施例によれば、分岐スキャナ58は、第1の2つの分岐命令について並行して各ランセクションをスキャンするよう構成され、その後スキャン結果を組合せてラン内の第1の2つの分岐命令を選択するよう構成される。
【0057】
分岐スキャナ58はさらに、クロックサイクル中にサブルーチン呼出命令がスキャンされるか否かを判定するよう構成されてもよい。分岐スキャナ58は、検出されたサブルーチン呼出命令に続く次の命令のフェッチアドレスをリターンスタック64に記憶するためリターンスタック64へフォワードするであろう。
【0058】
一実施例においては、もしラン内に3以上の分岐命令があれば、次の分岐命令を特定するため、次のクロックサイクル中にランが再びスキャンされる。
【0059】
特定された分岐命令のフェッチアドレスは、各命令についてテイクン/ノットテイクン予測を判定するため、分岐履歴テーブル60へ与えられる。分岐履歴テーブル60は、以前に検出された分岐命令の挙動に対応する複数のテイクン/ノットテイクン予測子を含む。最新の予測の履歴を維持し、これらの最新の予測と分岐命令に対応するフェッチアドレスの部分とを排他的論理和演算することによって、予測子の1つが選択される。最も新しくない(最も古い)予測は、フェッチアドレスの部分の中の最上位ビットと排他的論理和演算され、以下同様に、最新の予測までフェッチアドレスの部分の中の最下位ビットと排他的論理和演算される。クロックサイクルごとに2つの予測子が選択されるので、第2の分岐命令に対応する予測子は、(対応するフェッチアドレスの最下位ビットとの排他的論理和演算のため)第1の分岐命令の予測に依存する。分岐履歴テーブル60は、選択される可能性のある予測子両方を(すなわち、第1の分岐命令がノットテイクン予測されるならば選択されるであろう予測子および第1の分岐命令がテイクン予測されるならば選択されるであろう予測子を)選択し、次に、第1の分岐命令について選択された実際の予測に基づいて2つの予測子の一方を選択することにより、第2の予測子を与える。
【0060】
分岐履歴テーブル60は、機能ユニット32A〜32Dから分岐命令の実行に関する情報を受取る。実行された分岐命令に対応する最近の予測の履歴および実行された分岐命令のフェッチアドレスが、更新するべき予測子および実行された分岐命令のテイクン/ノットテイクン結果を選択するために与えられる。分岐履歴テーブル60は、対応する予測子を選択し、テイクン/ノットテイクン結果に基づいて予測子を更新する。一実施例においては、分岐履歴テーブルは2モードカウンタを記憶する。2モードカウンタは、最小値および最大値において飽和する飽和カウンタである(すなわち、最小値に続いてデクリメントおよび最大値に続いてインクリメントしても、カウンタには変化が起らない)。分岐命令がテイクンであるごとに、対応するカウンタがインクリメントされ、分岐命令がノットテイクンであるごとに、対応するカウンタがデクリメントされる。カウンタの最上位ビットは、テイクン/ノットテイクン予測を示す(たとえばセットであればテイクン、クリアであればノットテイクン)。一実施例では、分岐履歴テーブル60は64Kの予測子を記憶し、16個の最も最近の予測の履歴を維持する。各クロックサイクルにおいて、そのクロックサイクル中に選択された予測は履歴にシフトされ、最も古い予測は履歴からシフトアウトされる。
【0061】
リターンスタック64が、検出されたサブルーチン呼出命令に対応するリターンアドレスを記憶するため使用される。リターンスタック64は、分岐スキャナ58からサブルーチン呼出命令のフェッチアドレスを受取る。(リターンスタック64に与えられたフェッチアドレスから計算された)呼出命令の次のバイトのアドレスは、リターンスタック64の一番上に置かれる。リターンスタック64は、もしリターン命令が分岐スキャナ58およびフェッチ制御ユニット50により検出されたならば、リターンスタックの一番上に記憶されたアドレスを、ターゲットアドレスとしての選択のためにフェッチ制御ユニット50へ与える。上記態様において、各リターン命令は、最も最近に検出された呼出命令に対応するアドレスをターゲットアドレスとして受取る。一般にx86命令セットにおいては、呼出命令は、呼出命令の次のアドレスがx86アーキテクチャにより規定されるスタックの上に置かれることを指定する転送制御命令である。リターン命令は、スタックの一番上からターゲットアドレスを選択する命令である。一般に、呼出命令およびリターン命令は、コードシーケンス内で(それぞれ)サブルーチンに入るため使用され、サブルーチンから出るため使用される。リターンスタック64内に呼出命令に対応するアドレスを置き、リターンスタック64の一番上のアドレスをリターン命令のターゲットアドレスとして使用することにより、リターン命令のターゲットアドレスが正確に予測され得る。一例においては、リターンスタック64は16個のエントリを含むであろう。
【0062】
間接アドレスキャッシュ66は、間接分岐命令の前の実行に対応するターゲットアドレスを記憶する。間接分岐命令に対応するフェッチアドレスおよび間接分岐命令の実行に対応するターゲットアドレスは、機能ユニット32A〜32Dにより間接アドレスキャッシュ66へ与えられる。間接アドレスキャッシュ66は、対応するフェッチアドレスにより索引されるターゲットアドレスを記憶する。間接アドレスキャッシュ66は、(間接分岐命令の検出に応答して)分岐選択mux62により選択されたフェッチアドレスを受け、もしフェッチアドレスが間接アドレスキャッシュ66でヒットすれば、対応するターゲットアドレスをフェッチ制御ユニット50へ与える。一例においては、間接アドレスキャッシュ66は、32個のエントリを含むであろう。
【0063】
企図される一実施例によれば、もし間接アドレスキャッシュ66がフェッチアドレスのミスを検出すれば、間接アドレスキャッシュ66はエントリの1つからターゲットアドレスを選択して提供するよう構成されてもよい。上記態様において、間接分岐命令がデコードされる場合に、分岐ターゲットの「推測」が与えられる。間接分岐命令の実行によるアドレスを待つよりもむしろ、推測からのフェッチが行なわれるであろう。代替的に、企図される他実施例では、間接分岐命令の実行から与えられるアドレスを待つ。
【0064】
なお、もしエンコードされたターゲットアドレスが選択されるならば、実際のターゲットアドレスはL0 I−キャッシュ16へ提示されるであろう。フェッチ制御ユニット50は、可能性のある上の/下のターゲットアドレス各々を予め計算しエンコードされたターゲットアドレスに基づいて正しいアドレスを選択するように構成されてもよい。代替的に、フェッチ制御ユニット50は、どのL0 I−キャッシュの記憶場所が上のおよび下のキャッシュラインを記憶しているのかを記録しタグ比較なしに直接記憶場所を選択してもよい。
【0065】
フォワードまとめユニット68は、ターゲットアドレスならびに、選択された分岐命令各々の命令ラン内の位置およびテイクン/ノットテイクン予測を受取る。フォワードまとめユニット68は、ラン内のどの命令が、受取られた予測に基づいて取消されるべきであるかを判定する。もし、第1の分岐命令がテイクン予測され後ろ向きであれば(すなわち変位が負であれば)、第1の分岐命令の後のすべての命令が取消される。もし第1の分岐命令がテイクン予測され前向きであるが変位が小さければ(たとえば命令ランの中であれば)、第1の分岐命令とターゲットアドレスとの間の命令が取消される。第2の分岐命令は、もし第1の分岐命令の予測によりやはりラン内にあれば、同様に処理される。ラン内の命令についての取消表示は、命令キュー20に設定される。
【0066】
次に図3を参照し、ルックアヘッド/まとめユニット24の一実施例のブロック図を示す。他の実施例も可能であり企図される。図3に示すように、ルックアヘッド/まとめユニット24は、複数のデコードユニット70A〜70F、ESP/EBPルックアヘッドユニット72、即値フィールド発生ユニット73、ライン内依存性チェックユニット75、ルックアヘッドアドレス/結果計算ユニット74、ディスパッチ制御ユニット76およびオペランドまとめユニット78を含む。デコードユニット70A〜70Fは、整列ユニット22からの命令を受取るよう結合される。デコードユニット70A〜70Fは、デコードされた命令および/または命令の情報を、FPU/マルチメディアユニット40、ESP/EBPルックアヘッドユニット72、即値フィールド発生ユニット73、ライン内依存性チェックユニット75、フューチャファイル26およびルックアヘッドアドレス/結果計算ユニット74に与えるよう結合される。ESP/EBPルックアヘッドユニット72は、フューチャファイル26、即値フィールド発生ユニット73およびライン内依存性チェックユニット75と同様に、ルックアヘッドアドレス/結果計算ユニット74と結合される。ルックアヘッドアドレス/結果計算ユニット74はさらに、ロード/ストアユニット36およびディスパッチ制御ユニット76と結合される。ディスパッチユニット76はさらに、オペランドまとめユニット78、フューチャファイル26、ロード/ストアユニット36およびリオーダバッファ28と結合される。オペランドまとめユニット78は、命令ウィンドウ30と結合される。
【0067】
各デコードユニット70A〜70Fは、整列ユニット22が命令を整列させる発行位置を形成する。図面を簡単にするため図3を通じて特に示していないが、特定の命令が、その命令がルックアヘッド/まとめユニット24を通じて移動する間その発行位置内に留まり、もしルックアヘッド/まとめユニット24内で完了されなければ命令ウィンドウ30A〜30Bの1つに与えられる。
【0068】
デコードユニット70A〜70Fは、FPU/マルチメディア命令をFPU/マルチメディアユニット40に与える。しかし、もしFPU/マルチメディア命令がメモリオペランドを含むと、メモリ演算はさらに、命令に応答してルックアヘッドアドレス/結果計算ユニット74を通じてロード/ストアユニット36へディスパッチされる。さらに、もし、メモリ演算のためのアドレスがルックアヘッドアドレス/結果計算ユニット74により発生され得なければ、アドレス発生演算が、命令ウィンドウ30A〜30Bを通じてアドレス発生ユニット34A〜34Dの1つへディスパッチされる。さらに、リオーダバッファ28内のエントリは、プログラムの順序を維持するためFPU/マルチメディア命令に割当てられる。一般に、リオーダバッファ28内のエントリは、デコードユニット内で受取られる各命令について、デコードユニット70A〜70Fから、割当てられる。
【0069】
各デコードユニット70A〜70Fは、その中でデコードされる命令のオペコードおよびmod r/mバイトをESP/EBPルックアヘッドユニット72へ与えるよう構成され得る。ESP/EBPルックアヘッドユニット72は、(i)命令がESPまたはEBPレジスタをソースオペランドとして使用するか否か、および(ii)命令がESP/EBPレジスタを変更するか否か(すなわち、ESPまたはEBPレジスタを行先オペランドとして有するか否か)を判定するであろう。ESP/EBPルックアヘッドユニット72は、ESPレジスタまたはEBPレジスタをソースオペランドとして使用する各命令のためにルックアヘッド情報を発生する。ルックアヘッド情報は、対応するレジスタの現在のルックアヘッド値に加えられるべき定数および/または前の発行位置内の命令に対する依存性の表示を含み得る。一実施例においては、ESP/EBPルックアヘッドユニット72は、デコードユニット70A〜70Fにより与えられる命令のラインが、(i)(定数値でESPレジスタをデクリメントする)3以上のプッシュ演算、(ii)(定数値でESPレジスタをインクリメントする)3以上のポップ演算、(iii)ESPレジスタへの2以上の移動、(iv)ESPを行先として有する2以上の算術/論理命令または(v)ESPを更新する4以上の命令を含まない限り、ルックアヘッド情報を与えるよう構成される。これらの制約の1つが超えられると、ESP/EBPルックアヘッドユニット72は、次のクロックサイクルまで、制約を超えていない命令より先の命令をストールするよう構成される(「スプリットライン」の例)。同じクロックサイクル内だがより早い発行位置にある、ESPレジスタをインクリメントまたはデクリメントする命令の後にある命令については、ESP/EBPルックアヘッドユニット72は、先行する命令のESPレジスタに対する変更をすべて組合わせたものを示す定数を発生する。ESPまたはEBPレジスタにおける移動または算術演算の後の命令については、ESP/EBPルックアヘッドユニット72は、移動または算術命令を含む発行位置を特定する値を発生する。
【0070】
ルックアヘッド値は、発行位置内の命令に対応する(したがって、さもなくばアドレス発生ユニット34A〜34Dの1つにより行なわれるであろうアドレス発生演算を禁止する)ルックアヘッドアドレス、または、命令に対応する(それによってパイプライン内でより早期にフューチャファイル26へルックアヘッド状態を与える)ルックアヘッド結果のいずれかを発生するため、ルックアヘッドアドレス/結果計算ユニット74により使用され得る。アドレス発生演算を取除くおよび/または機能ユニット32A〜32Dおよびアドレス発生ユニット34A〜34D内での命令演算の実行よりも前にルックアヘッド状態を与えることによって、性能を上げることができよう。多くのx86コードシーケンスは、算術/論理演算を伴わないソースから行先への値の移動などの比較的簡単な演算またはレジスタオペランドの小さな定数による加算/減算もしくはインクリメント/デクリメントなどの簡単な算術演算を多数含む。したがって、機能ユニット32A〜32Dは、典型的には、より複雑な算術/論理演算および分岐命令を実行するであろうし、アドレス発生ユニット34A〜34Dは、典型的には、より複雑なアドレス発生を行なうであろう。したがって、命令スループットが上がるであろう。
【0071】
即値フィールド発生ユニット73は、その中でデコードされる命令のラインから即値データフィールドを抽出するよう構成されるであろう(ここで使用する場合には、即値データとは、アドレス発生において使用するための変位または機能的命令演算において使用するための即値データであろう)。即値データは、ルックアヘッドアドレス/結果計算ユニット74に与えられる。さらに、デコードユニット70A〜70Fは、命令によって使用されるレジスタオペランド指示子を特定しレジスタオペランド要求をフューチャファイル26へ与えるよう構成される。フューチャファイル26は、各レジスタオペランドに対して、対応する投機的レジスタ値または結果キュータグをリターンする。ライン内依存性チェックユニット75は、1ラインの命令間での依存性チェックを行なう。オペランドまとめユニット78は、適切なオペランドを各命令に対して割振るため、ライン内依存性チェックユニット75により発生された依存性情報を受取る。
【0072】
ルックアヘッドアドレス/結果計算ユニット74は、ESP/EBPルックアヘッドユニット72からルックアヘッド値を受取り、即値フィールド発生ユニット73から即値データを受取り、フューチャファイル26から投機的レジスタ値または結果キュータグを受取る。ルックアヘッドアドレス/結果計算ユニット74は、命令のメモリオペランドに対応するルックアヘッドアドレスか、または命令がメモリオペランドを含まない場合ならばルックアヘッド結果のいずれかを発生しようと試みる。たとえば、簡単なレジスタからレジスタへの移動演算は、ソースオペランドを行先オペランドとして与えることによって(機能ユニット32およびアドレス発生ユニット34について)完了できる。メモリ演算およびレジスタ行先を用いる移動演算は、アドレス発生がルックアヘッドアドレス/結果計算ユニット74により行なわれ得るのであれば、(機能ユニット32およびアドレス発生ユニット34に関して)完了され得る。一実施例においては、ルックアヘッドアドレス/結果計算ユニット74は、変位のみ、レジスタおよび変位、ESP/EBPおよび変位、ならびに索引またはベースレジスタがESP/EBPである場合以外についてはスケール−インデックス−ベースアドレッシングモードを使用してアドレスを計算するよう構成される。ロード/ストアユニット36は、メモリ演算を行ないメモリ演算の結果を結果バス48を通じてリターンする。メモリ演算に対してルックアヘッドアドレス/結果計算ユニット74により全くアドレスが発生されなかった場合でも、ルックアヘッドアドレス/結果計算ユニット74は、メモリ演算のためにロード/ストアユニット36内の記憶場所を割当てるため、メモリ演算および対応する結果キュータグをロード/ストアユニット36へ示す。
【0073】
ソースオペランドをインクリメントもしくはデクリメントする、ソースオペランドに小さな即値を加算/減算する、または2つのレジスタソースオペランドを加算/減算する、簡単な算術演算はさらに、ソースオペランドがフューチャファイル26から利用可能であれば(すなわち投機的レジスタ値が結果キュータグの代わりに受取られるのであれば)ルックアヘッドアドレス/結果計算ユニット74を通じて完了され得る。ルックアヘッドアドレス/結果計算ユニット74により完了された命令は、完了されたことが表示され、リオーダバッファ28内のエントリが割当てられるが、命令ウィンドウ30にディスパッチャはされない。ルックアヘッドアドレス/結果計算ユニット74は、たとえば、ルックアヘッド値、即値データおよび投機的レジスタ値の中から選択するため、対応する制御論理とともに各発行位置のための加算器を含み得る。この実施例によると、条件フラグの発生のために、簡単な算術演算がやはり命令ウィンドウ30へフォワードされ得ることが注意される。しかし、ルックアヘッドアドレス/結果計算ユニット74内で機能的結果を発生すると、早期にルックアヘッド状態が与えられ、その後のアドレス発生/命令を同様に早期に行なうことが可能である。
【0074】
ルックアヘッドアドレス/結果計算ユニット74は、フューチャファイルのコピーに加えて、ESP/EBPレジスタの別個のルックアヘッドコピーを維持するよう構成されてもよい。しかし、もし、ルックアヘッドアドレス/結果計算ユニット74により計算できないESP/EBPへの更新が検出されたならば、ESP/EBPの新しいルックアヘッドコピーがフューチャファイル26から(規定されない態様でのESP/EBPの更新の命令の実行後に)与えられ得るようになるまで、その後の命令がストールされ得る。
【0075】
ディスパッチ制御ユニット76は、パイプラインフロー制御を行なうため、命令の群がディスパッチされたか否かを判定する。ディスパッチ制御ユニット76は、命令ウィンドウ30から命令のカウントを受取り、ロード/ストアユニット36からロード/ストアのカウントを受取り、可能な最大数の命令がディスパッチ制御ユニット76、命令ウィンドウ30およびロード/ストアユニット36の間をパイプライン段を通過中であるとみなし、命令ウィンドウ30および/またはロード/ストアユニット36内でディスパッチされるべき命令が、その中に到達したときに命令を記憶するために空間が利用可能であろうか否かを判定する。もし、ディスパッチ制御ユニット76が、ロード/ストアユニット36内でおよび命令ウィンドウ30のいずれかで利用可能となるであろう空間が不十分であると判定すれば、ディスパッチ制御ユニット76の受取る命令のカウントが十分に低い値にまで減じられるまでディスパッチがストールされる。
【0076】
ディスパッチ制御ユニット76を通じてのディスパッチのための命令の解放に際し、フューチャファイル26およびリオーダバッファ28は、投機的に発生されたルックアヘッド結果で更新される。一実施例においては、サポートされる非ESP/EBP更新の数は、フューチャファイル26のポートの数を制限するため、たとえば2に限定されるであろう。さらに、オペランドまとめユニット78は、投機的に発生されたルックアヘッド結果を、前に判定されたライン内依存性により示されるようにこれらの結果に依存する、その後の同時にデコードされる命令へとまとめる。上記態様において、投機的に発生されたルックアヘッド結果は、機能ユニット32A〜32Dからその後フォワードされないであろうから、依存性の命令は、投機的に発生されたルックアヘッド結果を受取る。ルックアヘッドアドレス/結果計算ユニット74により完了されないこれらの命令は、次に、これらの命令が整列ユニット22より整列させられた発行位置に基づいて、命令ウィンドウ30A〜30Bの1つへ送られる。
【0077】
なお、プロセッサ10の一実施例は、マイクロコードルーチンと呼ばれる、複数のより簡単な命令をディスパッチすることによって複雑な命令を実行するための(図示しない)マイクロコードユニットを用いてもよい。デコードユニット70A〜70Fは、どの命令がマイクロコード命令であるかを検出しマイクロコード命令をマイクロコードユニットへ割振るよう構成されてもよい。たとえば、有効な命令を受取ったデコードユニット70からの直接デコードされた命令出力がないことは、対応する有効な命令に対し実行を開始するようにというマイクロコードユニットに対する表示であり得る。さらに、図2および図3にさまざまな記憶装置が図示されていることが注意される(たとえば、図2の装置79A、79Bおよび同様の装置ならびに図3の装置79C、79Dおよび同様の装置)。記憶装置は、パイプライン段を分離するために使用され得る、ラッチ、レジスタ、フリップフロップなどを表わす。しかし、図2および図3に示す特定のパイプライン段は、プロセッサ10の一実施例のための適当なパイプライン段の一実施例にすぎない。他の実施例では他のパイプライン段を用い得る。
【0078】
x86命令セットおよびアーキテクチャが、上で例として使用され、以下で例として使用されるであろうが、どのような命令セットおよびアーキテクチャでも使用できることが注意される。さらに、変位は(ここで例として使用される8ビットサイズおよび32ビットサイズに加え)任意の所望のサイズであり得る。さらに、ここでキャッシュラインのフェッチが説明されるであろうが、所望であれば、フェッチされることが望ましいキャッシュラインのサイズおよびバイトの数に基づいて、キャッシュラインはセクタでもあり得、セクタがフェッチされてもよいことが注意される。
【0079】
次に図4を参照し、デコードユニット70A、ESP/EBPルックアヘッドユニット72、ライン内依存性チェックユニット75、即値フィールド発生ユニット73および命令バイト記憶装置80を示すブロック図が示される。プロセッサ10の一実施例による図示されるブロック間の相互接続は図4に示される。付加的な、代替的なおよび/または異なった相互接続方式を用いる他の実施例が企図される。図4の実施例では、デコードユニット70Aが、オペコード/mod R/Mバス82A、ソースおよび行先レジスタ指示子バス84A、ならびに開始位置バス86Aと結合される。開始位置バス86Aおよびオペコード/mod R/Mバス82Aは、即値フィールド発生ユニット73と結合され、即値フィールド発生ユニット73はさらに命令バイト記憶装置80と結合される。オペコード/mod R/Mバス82Aはさらに、ESP/EBPルックアヘッドユニット72と結合される。ソースおよび行先レジスタ指示子バス84Aは、ライン内依存性チェックユニット75と結合され、ライン内依存性チェックユニット75はさらに、他のデコードユニット70からの同様のソースおよび行先レジスタ指示子バス84B〜84Fと結合される。ESP/EBPルックアヘッドユニット72は、ルックアヘッドESP/EBPバス88および定数バス90Aと結合され、ルックアヘッドESP/EBPバス88および定数バス90Aはさらに、ルックアヘッドアドレス/結果計算ユニット74と結合される。ライン内依存性チェックユニット75は、依存性バス92と結合され、依存性バス92はさらにオペランドまとめユニット78と結合される。即値フィールド発生ユニット73は、即値フィールドバス94Aおよび比較ライン96Aと結合される。比較ライン96Aは、オペランドまとめユニット78と結合され、即値フィールドバス94Aはルックアヘッドアドレス/結果計算ユニット74と結合される。参照番号の後に文字を付して示すバスおよびラインは、デコードユニット70Aによりデコードされる命令に対応する。デコードユニット70B〜70Fにより同時にデコードされる命令に対応して同様の相互接続が設けられるであろう。図面では簡単にするため、同時にデコードされる他の命令に対応する相互接続は、図4(およびそれに続く他の図)では必ずしも示していない。しかし、図示する相互接続と同様の相互接続がライン内の他の命令についても設けられるであろう。
【0080】
デコードユニット70Aは、命令整列ユニット22により与えられた命令をデコードし、命令整列ユニット22によりデコードユニット70A〜70Fに同時に与えられた命令のラインに対応する命令バイト内の命令の開始位置を検出する。ラインに対応する命令バイトは、(たとえばレジスタであり得る)命令記憶装置80内に記憶され、デコードユニット70Aがそのデコードを行なうためにデコードユニット70Aにより使用される命令の部分を受取る。一例においては、デコードユニット70Aは、デコードされる命令に対応するプレフィックス、オペコードおよびmod R/Mバイトと同様にラインに対応する命令バイト内の命令の開始位置を受取る。他の実施例では、その実施例において用いられる命令セットのアーキテクチャに依存して命令の異なった部分が受取られるであろう。
【0081】
デコードユニット70Aは、命令のためのソースおよび行先レジスタオペランド指示子を特定し、ソースおよび行先レジスタ指示子バス84A上で指示子を運ぶ。好ましい実施例においては、命令は、最大2つのソースオペランドおよび1つの行先オペランドを有するであろう。もし命令が、メモリオペランドを含むのであれば、ソースオペランドはアドレスオペランドを含むであろう。さらに、デコードユニット70Aは開始位置バス86A上で命令の開始位置を運ぶ。
【0082】
ESP/EBPルックアヘッドユニット72は、オペコードおよびmod R/Mバイトを受取り、対応する命令がソースオペランドとしてESPレジスタまたはEBPレジスタを有するか否か、および、命令がいずれかのレジスタの更新を指定しているか否かを判定する。ESP/EBPルックアヘッドユニット72は、ルックアヘッドESP/EBPバス88上でルックアヘッドESPおよびルックアヘッドEBP値を与える。ルックアヘッドレジスタ値は、デコードユニット70A〜70Fによりデコードされる命令のラインよりも前にディスパッチされた命令の結果の累積に対応する。さらに、ESP/EBPルックアヘッドユニット72は、デコードユニット70Aによりデコードされる命令に対するソースオペランドを発生するため、ルックアヘッドESPまたはEBP値に加えられるべき定数を発生する。ライン内の他の命令のためにも同様の定数が発生されるであろう。各発行位置のための定数は、ライン内のその発行位置に対応する命令を含めてこの命令よりも前の命令の累積効果を表わす。デコードユニット70Aの場合には、ライン内の命令よりも前には命令は存在しないので、命令のためのソースオペランドとして値を使用する前に行なわれる、対応するレジスタに対する変更に、定数は対応する。たとえば、x86命令セットにより規定されるPUSH命令は、命令のためのアドレスオペランドとしてESPレジスタ値を使用する前にESPレジスタ値をデクリメントするよう指定する。
【0083】
ライン内依存性チェックユニット75は、デコードユニット70Aおよび他のデコードユニット70B〜70Fからソースおよび行先レジスタ指示子を受取る。ライン内依存性チェックユニット75は、特定の発行位置内の命令に対応する各ソースオペランドに対しライン内の前の命令各々の行先オペランドに対しての依存性チェックを行なう。もし依存性が検出されれば、依存性バス92上で対応の表示が与えられる。したがって、依存性バス92は、可能性のあるソースオペランド各々について、そのソースオペランドに対して依存性が検出されたか否か、およびどの発行位置にソースオペランドが依存しているかを示す表示を含む。たとえば、依存性バス92は、各ソースオペランドに対応する依存性信号および各ソースオペランドに対応する発行位置番号を含むであろう。
【0084】
即値フィールド発生ユニット73は、命令のオペコードおよびmod R/Mバイトをデコードし、即値フィールドが命令内に含まれているかを判定する。即値フィールド発生ユニット73は、命令バイト記憶装置80から即値フィールドを抽出し、即値フィールドバス94A上に即値フィールドを与える。一実施例においては、さまざまなサイズの即値フィールドがサポートされる(たとえば8ビットおよび32ビット)。即値フィールド発生ユニット73は、より小さな即値フィールドを符号拡張(sign extend)またはゼロ拡張(zero extend)して、適宜サポートされる最大の即値フィールドサイズにするよう構成され得る。さらに、もし命令がインクリメント/デクリメント命令であれば、即値フィールド発生ユニット73は、インクリメント/デクリメントのサイズを反映した即値フィールドのための定数を発生するよう構成されるであろう。もし、命令が即値フィールドを含まずインクリメント/デクリメント命令でなければ、即値フィールド発生ユニット73は、即値フィールドバス94A上でゼロ値を発生するよう構成されるであろう。即値フィールド発生ユニット73はさらに、他のデコードユニット70内の命令に対応して、同様の動作を行なうよう構成されるであろう。即値フィールド発生ユニット73は、デコードユニット70Aにより与えられた開始位置およびオペコードおよびmod R/Mバイトのデコードにより、命令バイト記憶装置80から即値フィールドを選択する。
【0085】
この実施例においては、命令バイト記憶装置80は、同時にデコードされる命令のラインに対応する命令バイトを記憶する。命令バイトは、命令のラインとともにパイプライン化され、所望に従い命令のさまざまなフィールドを抽出することが可能である。他の実施例では、命令は(命令バイト記憶装置80内の命令に対して命令のサブセットおよびポインタを割振るのではなく)完全に各発行位置内で割振られるであろう。
【0086】
この実施例では、即値フィールド発生ユニット73はさらに、特定の発行位置内の比較命令であって、その比較結果に依存する分岐命令が(すなわち条件付き分岐命令が)直後の発行位置にある、比較命令を検出するよう構成される。このような組合せを検出すると、即値フィールド発生ユニット73はオペランドまとめユニット78に対して比較表示をアサートする。他の実施例では、比較/分岐の組合せを検出するために別個の制御ユニットを設けることもでき、または、他のユニットの1つをこの機能を提供するため構成することもできる。さらに、比較/分岐の組合せが検出されない実施例も企図される。オペランドまとめユニット78は、比較演算および分岐演算を1つの発行位置にとまとめるよう構成されるであろう(すなわち、1つの機能ユニットが比較演算と依存性の分岐演算とを両方同時に行なうであろう)。
【0087】
図4中、図示されるユニットの所定の出力が、たとえばオペランドまとめユニット78までパイプライン化されているものとして示されていることが注意される。これは、これらの出力が発生され対応する命令とともにパイプラインを通って受取ユニットへ運ばれることを示すよう意図されている。代替的に、これらの出力は、受取ユニットによって取り込まれ得、受取ユニットへの命令の到着に際して対応する命令と関連づけられることも可能である。
【0088】
次に図5を参照し、ルックアヘッドアドレス/結果計算ユニット74の一実施例の部分を示す。他の実施例も可能であり企図される。図5の実施例においては、発行位置0に対応する(すなわちデコードユニット70Aに対応する)ルックアヘッドアドレス/結果計算ユニット74の部分が図示される。他の発行位置についても同様のハードウェアが同様に提供されるであろう。制御ユニット100は、デコードユニット70Aからパイプライン化されたオペコード/mod R/Mバス82Aと結合されるよう示される。制御ユニット100はさらに、バス102を介してフューチャファイル26により与えられる命令のソースオペランドに対応する有効な表示を受取るよう結合される。ソースオペランドは、もし、実行に際してそのソースオペランドを生成するであろう命令を示す結果キュータグの代わりにそのソースオペランドが与えられるのであれば、フューチャファイル26内で有効である。制御ユニット100は、オペランド選択マルチプレクサ(mux)104Aおよび104Bに選択制御を与えるよう結合される。オペランド選択mux104Aは、ルックアヘッドESPバス88−1(ルックアヘッドESP値を与えるルックアヘッドESP/EBPバス88の部分)、定数バス90Aおよびフューチャファイル26からのソース1バス112と結合される。オペランド選択mux104Bは、ルックアヘッドEBPバス88−2(ルックアヘッドEBP値を与えるルックアヘッドESP/EBPバス88の部分)、定数バス90Aおよびフューチャファイル26からのソース2バス114と結合される。加算器106が、即値フィールドバス94Aおよびセグメントバス108と同様にオペランド選択mux104と結合されるものとして示される。加算器106は、結果バス110A上で、ロード/ストアユニット36、フューチャファイル26およびオペランドまとめユニット78に与えられる結果を与える。制御ユニット100は、アドレス有効ライン116A上へロード/ストアユニット36およびオペランドまとめユニット78へのアドレス有効信号を生成し、結果有効ライン118A上へフューチャファイル26およびオペランドまとめユニット78への結果有効信号を生成する。上述のように、参照番号の後に文字を付して示す接続は、(図5には示さない)他の発行位置内の命令についても同様に設けられるであろうことが注意される。
【0089】
制御ユニット100は、命令のオペコードおよびmod R/Mバイトをデコードし、(メモリオペランドを含む命令のために)ルックアヘッドアドレス発生を行なうか、または、(メモリオペランドを含まず加算系命令演算または移動命令演算を行なう命令のために)ルックアヘッド結果発生を行なうか、またはいずれも行なわないかを判定するよう構成される。制御ユニット100は、命令のデコードにより、オペランド選択mux104を介してオペランドを選択するであろう。加算器106は、(i)オペランド選択mux104Aおよび104Bにより与えられる値、即値フィールドバス94上で与えられる即値、および(iii)セグメントバス108上で与えられるセグメント基準アドレスを、結果を生成するために加算するよう構成される。(アドレス発生ではなく)結果発生のため、(図示しない)制御ユニット100からの制御信号に応答して、セグメント値はゼロであり得、または加算器106により無視され得る。
【0090】
たとえば、図6に示す真理値表120が、もし命令がメモリオペランドのためのアドレス発生命令演算を含むのであれば、オペランド選択mux104の値を選択するため、制御ユニット100の一実施例のため用いられるであろう。真理値表120は、メモリオペランドのアドレスを発生するため命令により用いられるアドレッシングモードを示すアドレッシングモード列、制御ユニット100からの制御に応答してオペランド選択mux104Aにより選択される値を示すmux1列、および制御ユニット100からの制御に応答してオペランド選択mux104Bにより選択される値を示すmux2列を含む。他の実施例も可能であり、企図される。図6に示す例は、以下のアドレッシングモードをサポートする:(i)変位のみ、(ii)任意の変位および(ESPまたはEBPレジスタを含まない)1つまたは2つのアドレスオペランドの組合せ、または(iii)任意の変位およびソースオペランドとしてのESPまたはEBPレジスタ。スケールファクタが、x86命令セットアーキテクチャ内において指定可能なスケール−インデックス−ベースアドレッシングモードに含まれるであろうことが注意される。mux104Aは、1ビットまたは2ビット左シフトされたソース1オペランドを選択することにより、ソース1オペランドをスケーリングするよう構成され得る。さらに、図6に示す変位は、この実施例では即値バス94A上で与えられることが注意される。
【0091】
命令によって指定されるアドレッシングモードに依存して、制御ユニット100は、フューチャファイル26からの有効な指示を調べ、加算器106がメモリオペランドのアドレスを成功裡に発生したか否かを判定する。すなわち、アドレスオペランドである各ソースオペランドが有効であれば、加算器106は成功裡にアドレスを発生するであろう。もしアドレスが成功裡に発生されれば、制御ユニット100は、アドレス有効ライン116A上でアドレス有効信号をアサートし、結果バス110A上で与えられるアドレスが対応する命令のためにメモリオペランドのアドレスとして取込まれ使用されるであろうということを、ロード/ストアユニット36に対して示す。もしアドレスが成功裡に発生されなければ、アドレス発生ユニット34が、続いてアドレスを発生するため使用されるであろうし、そのアドレスがその後ロード/ストアユニット36にフォワードされるであろう。
【0092】
セグメントバス108は、x86命令セットアーキテクチャにより規定されるセグメンテーション変換機構によりセグメント基準アドレスを与える。他の命令セットアーキテクチャを用いるプロセッサのための他の実施例では、セグメントバス108は取除かれるかもしれない。セグメントバス108上で与えられるセグメント基準アドレスは、現在の発行位置内の命令に対応する選択されたセグメントのセグメント基準アドレスである。代替的に、対応する命令によって、各利用可能なセグメント基準アドレスが与えられ選択されてもよい。セグメント情報は、当分野で周知のように適当な変換ユニットまたは特別なレジスタユニット内で維持されるであろう。
【0093】
もし現在の発行位置内の命令がメモリオペランドを含んでいなければ、制御ユニット100は、命令のためのルックアヘッド結果を発生するためオペランドを選択しようと試みるであろう。この実施例では、制御ユニット100は、1つまたは2つのソースオペランドおよび/または即値を含む加算/減算演算またはインクリメント/デクリメント演算をサポートするであろう。制御ユニット100はさらに、第2のソースオペランドを加算器106への唯一の入力として与えることによりレジスタからレジスタへの移動をサポートするであろう。
【0094】
たとえば、制御ユニット100の一実施例は、図7に示す真理値表122により動作するであろう。他の実施例も可能であり企図される。図7に示すような真理値表122は、この実施例によるルックアヘッドアドレス/結果計算ユニット74によりサポートされる算術演算を示す算術演算列を含む。図6に示す真理値表120と同様、真理値表122は、制御ユニット100からのそれぞれの制御に応答して、オペランド選択mux104Aにより選択されるオペランドを示すmux1列およびオペランド選択mux104Bにより選択されるオペランドを示すmux2列を含む。表によれば、(もしmux104Bによりゼロが選択されたならば)1個または2個のソースオペランドおよび任意の即値フィールドの加算または減算が、インクリメントまたはデクリメントおよびレジスタからレジスタへの移動と同様にサポートされるであろう。
【0095】
制御ユニット100は、加算器106が成功裡に結果バス110AAでルックアヘッド結果を生成したか否かを判定するよう構成される。制御ユニット100は、もし、フューチャファイル26によって示されたところの、結果を発生するために使用された各ソースオペランドが有効であれば、そして命令によって指定された機能的命令演算がルックアヘッドアドレス/結果計算ユニット74によりサポートされるものであれば、成功裡に結果が生成されたと判定する。もし、結果が成功裡に生成されたと判定されれば、制御ユニット100はフューチャファイル26およびオペランドまとめユニット78に対して結果有効ライン118A上で結果有効信号をアサートする。フューチャファイル26は、(結果バス110A上でも与えられ得る)命令の行先レジスタにより結果を記憶するよう構成されるであろう。オペランドまとめユニット78は、(ライン内依存性チェックユニット75により与えられる依存性表示により)依存性の命令のソースオペランドへと、結果をまとめるよう構成されるであろう。
【0096】
次に図8を参照し、オペランドまとめユニット78の一実施例の部分を示すブロック図を示す。他の実施例も可能であり企図される。図8に示す部分においては、制御ユニット130がオペランドまとめmux132A〜132Dとともに示される。制御ユニット130は、(図5に示す結果有効ライン118Aを含む)複数の結果有効ライン118、(図5に示すアドレス有効ライン116Aを含む)複数のアドレス有効ライン116、ライン内依存性チェックユニット75からの依存性バス92、(図4に示す比較ライン96Aを含む)複数の比較ライン96および禁止バス134と結合される。制御ユニット130はさらに、(図8に示されない他の発行位置のためのまとめmuxと同様)各まとめmux132へ選択制御を与えるよう結合される。各まとめmux132A〜132Dは、1つの発行位置内の1つのソースオペランドに対応する。各まとめmux132A〜132Dは、ライン内の前の発行位置に対応する行先タグおよびこれらの発行位置に対応するルックアヘッド結果を受取るよう結合される。さらに、各まとめmux132A〜132Dは、まとめmux132A〜132Dに対応する発行位置の直前の発行位置内の命令のソースオペランドのための、および、まとめmux132A〜132Dに対応する発行位置内の命令のソースオペランドのためのフューチャファイル出力を受けるよう結合される。たとえば、まとめmux132Aは、発行位置1のためのソース1オペランドを与え、(i)発行位置0内の命令に対する行先タグ、(ii)結果バス110A上で与えられる発行位置0に対応するルックアヘッド結果、および(iii)発行位置0のソース1オペランドおよび発行位置1のソース1オペランドに対応するフューチャファイル26からのソース1オペランドを受けるよう結合される。図8に示すように、大文字Pの後に数字をつけたものは、示された値に対応する発行位置を示す(すなわち、P0は発行位置0であり、P1は発行位置1である)。
【0097】
上述のように、オペランドまとめユニット78は、ルックアヘッドアドレス/結果計算ユニット74により発生されたルックアヘッド結果を、ライン内の依存性命令のソースオペランドへとまとめる。図8に示す例においては、オペランドまとめmux132が、各ソースオペランドおよび、まとめが行なわれるであろう各発行位置に対して設けられる。したがって、発行位置0はライン内の第1の発行位置であるためライン内依存性を経験しないであろうから、発行位置0についてはオペランドまとめmuxは示されていない。オペランドまとめmux132Aおよび132Bは、発行位置1のためのソースオペランドを与え、一方、オペランドまとめmux132Cおよび132Dは、発行位置2のためのソースオペランドを与える。同様のオペランドクラスのmuxが、(図8に示さない)発行位置3、4および5に対しソース1ソースオペランドを与える。
【0098】
制御ユニット130は、結果有効ライン118を通じてどの結果が有効であるかの表示および依存性バス92の上でライン内依存性の表示を受取る。もし、依存性が特定の発行位置内の特定のソースオペランドに関して依存性バス92を通じて知らされれば、そして、ソースオペランドが依存する発行位置についての、結果有効ライン118により示される結果が有効であれば、制御ユニット130は、対応するオペランドまとめmux132を制御して、対応するルックアヘッド結果バスから結果を選択するであろう。他方、もし対応する結果が有効ではないと依存性が示されれば、制御ユニット130は対応するオペランドまとめmux132を制御して、ソースオペランドが依存する発行位置の行先タグを選択するであろう。制御ユニット130はさらに、比較/分岐が検出されたことを示す比較信号を比較ライン96上で受取る。もし、比較/分岐の組合せが検出されていれば、制御ユニット130は、分岐命令を含む発行位置のオペランドまとめmux132のために、前の発行位置のソースオペランドに対するフューチャファイル出力を選択する。上記態様において、比較命令のソースオペランドが、分岐命令を有する発行位置に与えられるであろう。その後、受取り機能ユニットが(比較ソースオペランドを使用して)比較を行なうことができ、かつ、比較の結果として分岐命令がテイクンであるのかノットテイクンであるのか判定できる。もし、特定の発行位置の特定のソースオペランドについて依存性が認められず、発行位置が比較/分岐の組合せの分岐部分でなければ、制御ユニット130は、対応するオペランドまとめmux132を制御し、(結果キュータグまたは有効ソースオペランドであり得る)その発行位置内のソースオペランドのためにフューチャファイル出力を選択する。
【0099】
制御ユニット130が行なうであろう付加的なチェックは、特定の発行位置内の特定のソースオペランドが、前の発行位置に依存することが示され、その前の発行位置に対する結果がルックアヘッドアドレス/結果計算ユニット74により有効であると示されている場合の、判定である。もし前の発行位置に、ライン内ソース依存性が示されていれば、ルックアヘッドアドレス/結果計算ユニット74に与えられる結果は実は(誤ったソースオペランドに基づくものであるから)無効である。このような場合には、制御ユニット130は、ルックアヘッドアドレス/結果計算ユニット74により与えられるルックアヘッド結果の選択を禁止するであろうし、その代わりに前の発行位置に対応する行先タグを選択するであろう。一実現例では、対応する発行位置内で依存性が示されればマスキングされた結果有効信号がリセットされるよう制御ユニット130は、結果有効信号を依存性バス92からの対応する依存性表示でマスキングするであろう。フューチャファイル26およびロード/ストアユニット36が、同様の態様で、ルックアヘッド結果/アドレスを無効にするであろうことが注意される。
【0100】
制御ユニット130は、さらに、禁止バス134を介して命令ウインドウ30へ信号を送るよう構成されるであろう。ルックアヘッドアドレス/結果計算ユニット74により完了される各命令演算(アドレス発生または機能演算のいずれか)に対して、制御ユニット130は、命令演算が機能ユニット32またはアドレス発生ユニット34による実行のため選択されないように、命令ウインドウ30内の対応する演算を禁止するであろう。たとえば、禁止バス134は、各発行位置についてアドレス発生禁止信号および機能演算禁止信号を含むであろう。もし、ルックアヘッドアドレス/結果計算ユニット74が(あらゆるライン内依存性の影響を含む)特定の発行位置に対するルックアヘッドアドレスを成功裡に発生したならば、制御ユニット130は、特定の発行位置に対するアドレス発生禁止信号を活性化するであろう。他方、もし、ルックアヘッドアドレス/結果計算ユニット74が(あらゆるライン内依存性の影響を含む)特定の発行位置に対応するルックアヘッド結果を成功裡に発生したならば、制御ユニット130は、機能演算禁止信号を活性化するであろう。さらに、もし特定の発行位置が比較/分岐の組合せの比較部分を記憶していれば、制御ユニット130は、機能演算禁止信号を活性化するであろう。上述のように、算術演算は、算術命令の機能演算に加えフラグ発生を含むであろう。機能的結果が既に発生されていたとしても、フラグ結果の発生を可能とするため、このような命令は禁止されないであろう。代替的に、フューチャファイル26がルックアヘッド結果で更新されるよりも前にフューチャファイル26を読出すであろう命令に対するフォワーディングを行なうため機能的結果は禁止されないであろう。さもなくば、フューチャファイルの読出とルックアヘッド結果の提供との間でパイプライン段の中で局所フォワーディングが行なわれるであろう。制御ユニット130は、アドレス発生禁止信号を発生するため、アドレス有効信号を受取る。さらに、制御ユニット130は、もし対応する命令が条件コードおよび結果レジスタを更新するのであれば、機能演算を禁止しないように構成されるであろう。したがって、条件コードの計算のため、機能演算は機能ユニットへ与えられるであろう。
【0101】
次に図9を参照し、特定の発行位置のための特定のソースオペランドを選択するための制御ユニット130の一実施例の演算を示すフローチャートを示す。他の実施例も可能であり企図される。図9に示すステップは、各ソースオペランドについて並行して行なわれ得る。図9に示すステップは、理解を容易にするため特定の順番で示しているが、任意の適切な順番で行ない得る。さらに、制御ユニット130内の論理において、所望であれば、ステップを並行して行ない得る。
【0102】
制御ユニット130は、特定のソースオペランドについて認められるライン内依存性があるか否かを判定する(判定ブロック140)。もし、ライン内依存性が認められれば、制御ユニット130は、ルックアヘッドアドレス/結果計算ユニット74が、特定のソースオペランドが依存する前の発行位置についてのルックアヘッド結果が成功裡に発生されたか否かを判定する(判定ブロック142)。もし、ルックアヘッド結果が成功裡に発生されていなければ、制御ユニット130は、前の発行位置に対応する行先タグを選択する(ステップ144)。さらに、もし、前の発行位置内で結果が有効であるが、前の発行位置の1以上のソースオペランドについてライン内依存性が認められれば(判定ブロック146)、制御ユニット130は、同様に前の発行位置に対応する行先タグを選択する(ステップ144)。もし前の発行位置のソースオペランドについて依存性が認められず、結果が有効であれば、制御ユニット130はルックアヘッドアドレス/結果計算ユニット74により与えられた結果を選択する(ステップ148)。
【0103】
もし特定のソースオペランドについてライン内依存性が全く認められなければ(判定ブロック140)、制御ユニット130は、比較/分岐の組合せであって、特定の発行位置がその分岐部分である比較/分岐の組合せが検出されているか否かを判定する(判定ブロック150)。もし比較/分岐の組合せが検出されていれば、制御ユニット130によって前の発行位置(すなわち比較命令を含む発行位置)からのソースオペランドが選択される(ステップ152)。他方、もし比較/分岐の組合せが検出されていなければ、制御ユニット130は特定のソースオペランドについてフューチャファイル出力を選択する(ステップ154)。
【0104】
上にmuxとしてさまざまな特徴を示したが、説明した選択を行なうため選択論理のどのようなパラレルでのまたはシリアルでの組合せも使用され得ることが注意される。さらに、この実施例は、ライン内結果および比較/分岐の組合せに対してまとめを行なうが、これらの特徴の一方のみを提供する例も企図されることが注意される。さらに、この実施例ではオペランドのソースとしてフューチャファイルが使用されるが、他の実施例では、オペランドのソースとして、リオーダバッファ、リネームレジスタファイルなど他の投機的記憶装置要素を用いてもよいことが注意される。
【0105】
次に、図10を参照し、バスブリッジ202を通じてさまざまなシステム構成要素と結合されるプロセッサ10を含むコンピュータシステム200の一実施例のブロック図を示す。他の実施例も可能であり企図される。図示されるシステム中、メインメモリ204がメモリバス206を通じてバスブリッジ202と結合され、グラフィックスコントローラ208がAGPバス210を通じてバスブリッジ202と結合される。最後に、複数のPCI装置212A〜212BがPCIバス214を通じてバスブリッジ202と結合される。第2のバスブリッジ216がさらに、EISA/ISAバス220を通じて1以上のEISAまたはISA装置218への電気的インターフェイスに対処するため設けられてもよい。プロセッサ10は、バスインターフェイス46を通じてバスブリッジ202と結合される。
【0106】
バスブリッジ202は、プロセッサ10、メインメモリ204、グラフィックスコントローラ208およびPCIバス214と接続された装置の間のインターフェイスを提供する。バスブリッジ202に接続される装置の1つから演算が受取られるとき、バスブリッジ202は演算のターゲットを特定する(たとえば特定の装置またはPCIバス214の場合にはターゲットはPCIバス214上にある)。バスブリッジ202は、演算をターゲットである装置に与える。バスブリッジ202は通常、演算をソース装置またはバスにより使用されるプロトコルからターゲット装置またはバスにより使用されるプロトコルに変換する。
【0107】
PCIバス214のためのISA/EISAバスへのインターフェイスを提供するのに加えて、必要であれば、第2のバスブリッジ216がさらに付加的な機能を組入れるであろう。たとえば、一実施例においては、第2のバスブリッジ216はPCIバス214の所有権を調停するための(図示しない)マスタPCIアービタを含む。第2のバスブリッジ216の外部であるかまたは第2のバスブリッジ216と統合される(図示しない)入力/出力コントローラがさらに、所望であればキーボードおよびマウス222ならびにさまざまなシリアルポートおよびパラレルポートのための動作的サポートを与えるためコンピュータシステム200内に含まれ得る。(図示しない)外部キャッシュユニットがさらに、他の実施例においてはプロセッサ10とバスブリッジ202との間のバスインターフェイス46と結合され得る。代替的に、外部キャッシュは、バスブリッジ202と結合され、外部キャッシュ用のキャッシュ制御論理がバスブリッジ202へ統合され得る。
【0108】
メインメモリ204は、その中にアプリケーションプログラムが記憶され、そこからプロセッサが主として実行を行なうメモリである。適当なメインメモリ204は、DRAM(ダイナミック・ランダム・アクセス・メモリ)を含み、好ましくは、SDRAM(シンクロナスDRAM)の複数のバンクを含む。
【0109】
PCI装置212A〜212Bは、たとえば、ネットワークインターフェイスカード、ビデオアクセラレータ、オーディオカード、ハードディスクドライブもしくはフロッピーディスクドライブまたはドライブコントローラ、SCSI(スモール・コンピュータ・システムズ・インターフェイス)アダプタおよび電話通信カードなどのさまざまな周辺装置の例である。同様に、ISA装置218は、モデム、サウンドカード、およびGPIBまたはフィールドバスインターフェイスカードなどのさまざまなデータアクイジションカードなどのさまざまな種類の周辺装置の例である。
【0110】
グラフィックスコントローラ208は、ディスプレイ226上でのテキストおよび画像のレンダリングを制御するために設けられる。グラフィックスコントローラ208は、メインメモリ204へ、およびメインメモリ204から効果的に移動され得る3次元データ構造をレンダリングするための当分野では一般に公知の典型的なグラフィックアクセラレータであり得る。グラフィックスコントローラ208はしたがって、バスブリッジ202内のターゲットインターフェイスへのアクセスを要求し受けることができ、それによってメインメモリ204へのアクセスを得るという点で、AGPバス210のマスタであり得る。専用グラフィックスバスが、メインメモリ204からのデータの迅速な取出しに対処する。所定の動作については、グラフィックスコントローラ208はさらに、AGPバス210上でPCIプロトコルトランザクションを発生するよう構成され得る。バスブリッジ202のAGPインターフェイスはしたがって、AGPプロトコルトランザクションおよびPCIプロトコルターゲットとイニシエータとのトランザクションの両方をサポートする機能を含み得る。ディスプレイ226は、上に画像またはテキストが提示され得る任意の電子的ディスプレイである。適切なディスプレイ226は、陰極線管(CRT)、液晶ディスプレイ(LCD)などを含む。
【0111】
上述の説明においては例としてAGP、PCIおよびISAまたはEISAバスが使用されたが、所望であれば任意のバスアーキテクチャで置換えられることが注意される。さらに、コンピュータシステム200は付加的なプロセッサ(たとえばコンピュータシステム200の任意構成要素として示されるプロセッサ10aなど)を含むマルチプロセッシングコンピュータシステムであり得ることが注意される。プロセッサ10aはプロセッサ10と同様のものであり得る。特に、プロセッサ10aはプロセッサ10の同一コピーであり得る。プロセッサ10aは、(図10に示すように)プロセッサ10とバスインターフェイス46を共有し得、または、独立バスを通じてバスブリッジ202へ接続され得る。
【0112】
上の開示により、命令の実行よりも前にルックアヘッドアドレスおよび/または結果を発生するよう試みるプロセッサが示された。ライン内依存性が認められ、ルックアヘッド結果は依存性の命令のソースオペランドへとまとめされる。(フューチャファイルおよびまとめ機構を通じてフォワーディングを提供することで)早期にルックアヘッド結果を与えることによりフォワーディングはより効率的になり得る。さらに、機能ユニット内で実行されるべき必要な命令演算の数がより少ないことで、サポートされる機能ユニットがより少なくなり得る。
【0113】
一旦本開示が十分に理解されれば、当業者には多くの変形および変更が明らかとなるであろう。前掲の特許請求の範囲は、これらの変形および変更すべてを包含するものと解釈されるよう意図される。
【図面の簡単な説明】
【図1】 プロセッサの一実施例のブロック図である。
【図2】 図1に示すフェッチ/スキャンユニットの一実施例のブロック図である。
【図3】 図1に示すルックアヘッド/まとめユニットの一実施例のブロック図である。
【図4】 図3に示すルックアヘッド/まとめユニットの部分の間の相互接続を示す、図3に示すルックアヘッド/まとめユニットの部分のブロック図である。
【図5】 図3および図4に示すルックアヘッドアドレス/結果発生ユニットの一実施例の部分を示す図である。
【図6】 ルックアヘッドアドレス発生のための、図5に示す制御ユニットの一実施例による真理値表の図である。
【図7】 ルックアヘッド結果発生のための、図5に示す制御ユニットの一実施例による真理値表の図である。
【図8】 図3に示すオペランドまとめユニットの一実施例の部分のブロック図である。
【図9】 図8に示す制御ユニットの一実施例を示すフローチャートのブロック図である。
【図10】 図1に示すプロセッサを含むコンピュータシステムのブロック図である。
Claims (21)
- プロセッサであって、
命令のラインに対応する複数のオペランド指示子を受取るよう結合されるライン内依存性チェックユニットを含み、前記ライン内依存性チェックユニットは、前記複数のオペランド指示子を比較することによって、前記命令のライン中の命令の間の依存性を判定するよう構成され、前記プロセッサはさらに、
前記複数のオペランド指示子により指定される1以上のオペランドを受けるよう結合されるルックアヘッド計算ユニットを含み、前記ルックアヘッド計算ユニットは、もし、前記命令のライン内の第1の命令に対応するルックアヘッド結果を発生するために前記第1の命令により使用される各オペランドが前記1以上のオペランド中にあれば、前記ルックアヘッド結果を計算するよう構成され、前記プロセッサはさらに、
前記ルックアヘッド計算ユニットおよび前記ライン内依存性チェックユニットと結合されるオペランドまとめユニットを含み、前記オペランドまとめユニットは、前記ルックアヘッド結果を前記命令ライン中の第2の命令のオペランドとして(i)前記ルックアヘッド計算ユニットからの前記ルックアヘッド結果が有効であるとの表示に応答して、および(ii)前記ライン内依存性チェックユニットからの前記第2の命令は前記第1の命令に依存するとの表示に応答して、提供するよう構成され、前記プロセッサはさらに、
前記オペランドまとめユニットと結合される1以上の命令ウィンドウを含み、前記1以上の命令ウィンドウは対応するオペランドが与えられるまで命令を記憶しその後実行のため前記命令を選択するよう構成され、
前記オペランドまとめユニットは、もし前記ルックアヘッド結果が有効であれば、前記ルックアヘッド結果により提示される前記第1の命令の少なくとも第1の命令演算の実行を禁止するよう前記1以上の命令ウィンドウに信号を送るよう構成される、プロセッサ。 - 前記ルックアヘッド計算ユニットは、前記命令がレジスタオペランドのみ持つ移動命令であれば、前記ルックアヘッド結果を計算するよう構成され、前記移動命令は、前記1以上の命令ウィンドウから禁止された前記第1の命令演算を含む、請求項1に記載のプロセッサ。
- 前記ルックアヘッド計算ユニットは、もし前記命令がレジスタソースオペランドのみ持つ加算系命令であれば、前記ルックアヘッド結果を計算するよう構成される、請求項1に記載のプロセッサ。
- 前記加算系命令は、フラグ結果を生成するための次の実行のために前
記1以上の命令ウィンドウに与えられ、前記第1の命令演算は前記加算系演算を含む、請求項3に記載のプロセッサ。 - 前記ルックアヘッド計算ユニットは、もし前記第1の命令がメモリオペランドを含み、前記1以上のオペランドが前記第1の命令に対応する1以上のアドレスオペランドを含むならば、ルックアヘッドアドレスを計算するよう構成され、前記第1の命令演算は前記アドレス発生を含む、請求項3に記載のプロセッサ。
- 前記ルックアヘッド計算ユニットと結合されるロード/ストアユニットをさらに含み、前記ロード/ストアユニットは、前記ルックアヘッド計算ユニットからの前記ルックアヘッドアドレスが有効であるとの表示に応答して、前記メモリオペランドのアドレスとして前記ルックアヘッドアドレスを受取るよう構成され、前記オペランドまとめユニットは、前記命令のラインの前記1以上の命令ウィンドウへの提供に際し、前記第1の命令に対応するアドレス発生を不能化するよう構成される、請求項3に記載のプロセッサ。
- 前記1以上の命令ウィンドウと結合されるアドレス発生ユニットをさらに含み、前記アドレス発生ユニットは、もし前記ルックアヘッドアドレスが無効であれば、前記アドレスを発生するよう構成される、請求項6に記載のプロセッサ。
- 前記1以上の命令ウィンドウと結合される機能ユニットをさらに含み、前記機能ユニットは、前記1以上の命令ウィンドウにより前記機能ユニットへ与えられる命令を実行するよう構成される、請求項1に記載のプロセッサ。
- 前記機能ユニットは、もし前記ルックアヘッド結果が有効であれば、前記ルックアヘッド結果により提示される前記第1の命令の前記部分を実行しない、請求項8に記載のプロセッサ。
- 前記ルックアヘッド計算ユニットと結合されるフューチャファイルをさらに含み、前記フューチャファイルは、前記複数のオペランド指示子に応答して前記ルックアヘッド計算ユニットに前記1以上のオペランドを与えるよう構成される、請求項9に記載のプロセッサ。
- 前記フューチャファイルは前記ルックアヘッド結果を受取るよう結合され、前記ルックアヘッド結果に応答して前記ルックアヘッド結果に対応して行先オペランドを更新するよう結合される、請求項10に記載のプロセッサ。
- 前記フューチャファイルは前記機能ユニットと結合され、前記フューチャファイルは、前記機能ユニットから与えられる実行結果に対応して前記行先オペランドを更新するよう構成される、請求項11に記載のプロセッサ。
- 前記オペランドまとめユニットは、もし前記第1の命令が比較命令であり、前記第2の命令が条件付き分岐命令であり、前記第2の命令が前記第1の命令に続いていれば、前記第2の命令のオペランドとして前記第1の命令に対応するオペランドを与えるよう構成される、請求項1に記載のプロセッサ。
- 前記オペランドまとめユニットはさらに、前記1以上の命令ウィンドウの前記比較命令の受取りを禁止するよう構成される、請求項13に記載のプロセッサ。
- プロセッサであって、
命令のラインに対応する複数のオペランドを受取るよう結合されるオペランドまとめユニットを含み、前記オペランドまとめユニットは、前記命令のライン中の第1の命令に対応する前記複数のオペランドのうち1以上のオペランドを、前記命令のライン中の第2の命令のオペランドとして、もし(i)前記第1の命令が比較命令であれば、(ii)前記第2の命令が条件付き分岐命令であれば、および(iii)前記第2の命令が前記第1の命令
に続いていれば、与えるよう構成され、前記プロセッサはさらに、
前記オペランドまとめユニットと結合される1以上の命令ウィンドウを含み、前記1以上の命令ウィンドウは、対応するオペランドが与えられるまで命令を記憶しその後実行のために前記命令を選択するよう構成され、
前記オペランドまとめユニットは、もし(i)前記第1の命令が比較命令であれば、(ii)前記第2の命令が条件付き分岐命令であれば、および(iii)前記第2の命令が前記
第1の命令に続いていれば、前記第1の命令の受取りを禁止するよう前記1以上の命令ウィンドウに信号を送るよう構成され、前記プロセッサはさらに、
前記1以上の命令ウィンドウと結合される少なくとも1つの機能ユニットを含み、前記1以上の命令ウィンドウは前記機能ユニットによる実行のために前記第2の命令を計画するように構成され、前記機能ユニットは、前記比較命令によって規定される比較および前記条件付き分岐命令によって規定される分岐のいずれをも含む前記第2の命令を実行するように構成される、プロセッサ。 - プロセッサ内の命令のラインを実行するための方法であって、
複数のオペランド指示子を検出するため、前記命令のラインをデコードするステップと、
ライン内依存性を検出するため、前記命令のライン中の各命令の行先オペランド指示子を、前記命令のライン中の各次の命令のソースオペランド指示子と比較するステップと、
前記ソースオペランド指示子により指定されるソースオペランドを取込むため投機的オペランドソースの読出を行なうステップと、
前記ソースオペランドが前記投機的オペランドソースにおいて利用可能であれば、前記ライン中の第1の命令に対するルックアヘッド結果を計算するステップとを含み、前記計算するステップは、ルックアヘッド計算ユニットで行なわれ、前記方法はさらに、
もし前記ルックアヘッド結果が成功裡に計算されたならば、前記ルックアヘッド結果を生成する前記第1の命令の少なくとも第1の命令演算の実行を禁止するよう、前記第1の命令を受取るよう構成された命令ウィンドウに、信号を送るステップと、
もし前記比較が前記第2の命令の前記第1の命令に対する依存性を示せば、前記命令のライン中の第2の命令に前記ルックアヘッド結果を与えるステップとを含み、前記与えるステップは、前記第2の命令を前記命令ウィンドウ内に記憶するよりも前に行なわれ、前 記与えるステップは、オペランドまとめユニットによって行なわれる、プロセッサ内の命令のラインを実行するための方法。 - 実行のために、前記命令ウィンドウから前記第2の命令を選択するステップをさらに含む、請求項16に記載のプロセッサ内の命令のラインを実行するための方法。
- 前記計算するステップは、もし、前記命令がレジスタオペランドのみを有する加算系命令であり、前記レジストオペランド各々が前記読出の際に前記投機的オペランド記憶装置内で利用可能であれば、成功である、請求項16に記載のプロセッサ内の命令のラインを実行するための方法。
- もし前記第1の命令がメモリオペランドを含み、前記第1の命令に対応するアドレスオペランドが前記読出に際して前記投機的オペランドソースにおいて利用可能であれば、ルックアヘッドアドレスを計算するステップをさらに含む、請求項18に記載のプロセッサ内の命令のラインを実行するための方法。
- コンピュータシステムであって、
命令のラインを複数の発行位置に整列させるよう構成される整列ユニットと、
投機的オペランドを記憶するよう構成される投機的オペランドソースと、
命令に対してオペランドが与えられるまでそれらの命令を記憶するよう構成される命令ウィンドウと、
前記投機的オペランドソース、前記命令ウィンドウおよび前記整列ユニットと結合されるルックアヘッド/まとめユニットとを含むプロセッサを含み、前記ルックアヘッド/まとめユニットは、前記整列ユニットから受取られる前記命令のラインに応答して前記投機的オペランドソースからオペランドを読出すよう構成され、前記ルックアヘッド/まとめユニットは、前記オペランドに応答して前記命令のライン中の第1の命令に対応するルックアヘッド結果を発生するよう構成され、前記ルックアヘッド/まとめユニットはさらに、前記投機的オペランドソースを前記ルックアヘッド結果で更新するよう構成され、前記ルックアヘッド/まとめユニットは、前記第1の命令に依存する、前記命令のライン中の第2の命令に前記ルックアヘッド結果をフォワードするよう構成され、前記ルックアヘッド/まとめユニットは、前記ルックアヘッド結果を生成する前記第1の命令の少なくとも第1の命令演算の実行を禁止するよう前記命令ウィンドウに信号を送るよう構成され、前記コンピュータシステムはさらに、
前記プロセッサと結合される入力/出力(I/O)装置を含み、前記I/O装置は、前
記コンピュータシステムと、前記I/O装置が結合される他のコンピュータシステムとの間で通信するよう構成される、コンピュータシステム。 - 第2のプロセッサをさらに含むコンピュータシステムであって、前記第2のプロセッサは、
命令のラインを複数の発行位置に整列させるよう構成される整列ユニットと、
投機的オペランドを記憶するよう構成される投機的オペランドソースと、
命令に対してオペランドが与えられるまでこれらの命令を記憶するよう構成される命令ウィンドウと、
前記投機的オペランドソース、前記命令ウィンドウおよび前記整列ユニットと結合されるルックアヘッド/まとめユニットとを含み、前記ルックアヘッド/まとめユニットは、前記整列ユニットから受取られる前記命令のラインに応答して前記投機的オペランドソースからオペランドを読出すよう構成され、前記ルックアヘッド/まとめユニットは、前記オペランドに応答して前記命令のライン中の第1の命令に対応するルックアヘッド結果を発生するよう構成され、前記ルックアヘッド/まとめユニットはさらに、前記投機的オペランドソースを前記ルックアヘッド結果で更新するよう構成され、前記ルックアヘッド/まとめユニットは、前記命令ライン中の、前記第1の命令に依存する第2の命令に前記ルックアヘッド結果をフォワードするよう構成され、前記ルックアヘッド/まとめユニットは、前記ルックアヘッド結果を生成する前記第1の命令の少なくとも第1の命令演算の実行を禁止するよう、前記命令ウィンドウに信号を送るよう構成される、請求項20に記載 のコンピュータシステム。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US6587897P | 1997-11-17 | 1997-11-17 | |
US09/115,123 US6112293A (en) | 1997-11-17 | 1998-07-14 | Processor configured to generate lookahead results from operand collapse unit and for inhibiting receipt/execution of the first instruction based on the lookahead result |
US09/115,123 | 1998-07-14 | ||
US60/065,878 | 1998-07-14 | ||
PCT/US1998/022030 WO1999026132A2 (en) | 1997-11-17 | 1998-10-19 | Processor configured to generate lookahead results from collapsed moves, compares and simple arithmetic instructions |
Publications (3)
Publication Number | Publication Date |
---|---|
JP2001523854A JP2001523854A (ja) | 2001-11-27 |
JP2001523854A5 JP2001523854A5 (ja) | 2006-01-05 |
JP3866918B2 true JP3866918B2 (ja) | 2007-01-10 |
Family
ID=26746120
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2000521433A Expired - Fee Related JP3866918B2 (ja) | 1997-11-17 | 1998-10-19 | ルックアヘッド結果を発生し移動命令、比較命令および簡単な算術命令をまとめるよう構成されるプロセッサ |
Country Status (5)
Country | Link |
---|---|
US (1) | US6112293A (ja) |
EP (1) | EP1031074B1 (ja) |
JP (1) | JP3866918B2 (ja) |
DE (1) | DE69835100T2 (ja) |
WO (1) | WO1999026132A2 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9690591B2 (en) | 2008-10-30 | 2017-06-27 | Intel Corporation | System and method for fusing instructions queued during a time window defined by a delay counter |
Families Citing this family (40)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6363469B1 (en) * | 1998-07-13 | 2002-03-26 | Matsushita Electric Industrial Co., Ltd. | Address generation apparatus |
US6247146B1 (en) * | 1998-08-17 | 2001-06-12 | Advanced Micro Devices, Inc. | Method for verifying branch trace history buffer information |
US6862635B1 (en) | 1998-11-13 | 2005-03-01 | Cray Inc. | Synchronization techniques in a multithreaded environment |
US6314471B1 (en) * | 1998-11-13 | 2001-11-06 | Cray Inc. | Techniques for an interrupt free operating system |
US6480818B1 (en) | 1998-11-13 | 2002-11-12 | Cray Inc. | Debugging techniques in a multithreaded environment |
US6952827B1 (en) * | 1998-11-13 | 2005-10-04 | Cray Inc. | User program and operating system interface in a multithreaded environment |
US6189091B1 (en) * | 1998-12-02 | 2001-02-13 | Ip First, L.L.C. | Apparatus and method for speculatively updating global history and restoring same on branch misprediction detection |
US6353829B1 (en) | 1998-12-23 | 2002-03-05 | Cray Inc. | Method and system for memory allocation in a multiprocessing environment |
US6230313B1 (en) * | 1998-12-23 | 2001-05-08 | Cray Inc. | Parallelism performance analysis based on execution trace information |
US6321379B1 (en) | 1998-12-23 | 2001-11-20 | Cray Inc. | Method and system for target register allocation |
US6415433B1 (en) | 1998-12-23 | 2002-07-02 | Cray Inc. | Method and system for identifying locations to move portions of the computer program |
US6430676B1 (en) * | 1998-12-23 | 2002-08-06 | Cray Inc. | Method and system for calculating instruction lookahead |
US6665688B1 (en) | 1998-12-23 | 2003-12-16 | Cray Inc. | Method and system for automatically regenerating data on-demand |
US6247097B1 (en) * | 1999-01-22 | 2001-06-12 | International Business Machines Corporation | Aligned instruction cache handling of instruction fetches across multiple predicted branch instructions |
US6499101B1 (en) | 1999-03-18 | 2002-12-24 | I.P. First L.L.C. | Static branch prediction mechanism for conditional branch instructions |
US6343359B1 (en) | 1999-05-18 | 2002-01-29 | Ip-First, L.L.C. | Result forwarding cache |
US6546481B1 (en) | 1999-11-05 | 2003-04-08 | Ip - First Llc | Split history tables for branch prediction |
US6629234B1 (en) * | 2000-03-30 | 2003-09-30 | Ip. First, L.L.C. | Speculative generation at address generation stage of previous instruction result stored in forward cache for use by succeeding address dependent instruction |
US6782469B1 (en) * | 2000-09-29 | 2004-08-24 | Intel Corporation | Runtime critical load/data ordering |
US7100024B2 (en) | 2003-02-04 | 2006-08-29 | Via Technologies, Inc. | Pipelined microprocessor, apparatus, and method for generating early status flags |
US7107438B2 (en) * | 2003-02-04 | 2006-09-12 | Via Technologies, Inc. | Pipelined microprocessor, apparatus, and method for performing early correction of conditional branch instruction mispredictions |
US7185182B2 (en) * | 2003-02-04 | 2007-02-27 | Via Technologies, Inc. | Pipelined microprocessor, apparatus, and method for generating early instruction results |
US7290121B2 (en) * | 2003-06-12 | 2007-10-30 | Advanced Micro Devices, Inc. | Method and data processor with reduced stalling due to operand dependencies |
US20050216713A1 (en) * | 2004-03-25 | 2005-09-29 | International Business Machines Corporation | Instruction text controlled selectively stated branches for prediction via a branch target buffer |
US7797493B2 (en) | 2005-02-15 | 2010-09-14 | Koninklijke Philips Electronics N.V. | Enhancing performance of a memory unit of a data processing device by separating reading and fetching functionalities |
US7243210B2 (en) * | 2005-05-31 | 2007-07-10 | Atmel Corporation | Extracted-index addressing of byte-addressable memories |
US7734900B2 (en) * | 2008-01-11 | 2010-06-08 | International Business Machines Corporation | Computer configuration virtual topology discovery and instruction therefore |
US7870339B2 (en) * | 2008-01-11 | 2011-01-11 | International Business Machines Corporation | Extract cache attribute facility and instruction therefore |
US7895419B2 (en) | 2008-01-11 | 2011-02-22 | International Business Machines Corporation | Rotate then operate on selected bits facility and instructions therefore |
US9280480B2 (en) | 2008-01-11 | 2016-03-08 | International Business Machines Corporation | Extract target cache attribute facility and instruction therefor |
US20090182984A1 (en) * | 2008-01-11 | 2009-07-16 | International Business Machines Corporation | Execute Relative Long Facility and Instructions Therefore |
US20090182992A1 (en) * | 2008-01-11 | 2009-07-16 | International Business Machines Corporation | Load Relative and Store Relative Facility and Instructions Therefore |
US7739434B2 (en) | 2008-01-11 | 2010-06-15 | International Business Machines Corporation | Performing a configuration virtual topology change and instruction therefore |
US20090182985A1 (en) * | 2008-01-11 | 2009-07-16 | International Business Machines Corporation | Move Facility and Instructions Therefore |
US20090182988A1 (en) * | 2008-01-11 | 2009-07-16 | International Business Machines Corporation | Compare Relative Long Facility and Instructions Therefore |
US8966230B2 (en) * | 2009-09-30 | 2015-02-24 | Intel Corporation | Dynamic selection of execution stage |
JP2013131036A (ja) * | 2011-12-21 | 2013-07-04 | Fujitsu Ltd | 演算処理装置及び演算処理装置の制御方法 |
CN103984637A (zh) * | 2013-02-07 | 2014-08-13 | 上海芯豪微电子有限公司 | 一种指令处理系统及方法 |
GB2518613A (en) | 2013-09-25 | 2015-04-01 | Ibm | Multiple core processing with high throughput atomic memory operations |
CN106406820B (zh) * | 2015-07-29 | 2019-01-15 | 深圳市中兴微电子技术有限公司 | 一种网络处理器微引擎的多发射指令并行处理方法及装置 |
Family Cites Families (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5197137A (en) * | 1989-07-28 | 1993-03-23 | International Business Machines Corporation | Computer architecture for the concurrent execution of sequential programs |
US5630157A (en) * | 1991-06-13 | 1997-05-13 | International Business Machines Corporation | Computer organization for multiple and out-of-order execution of condition code testing and setting instructions |
US5539911A (en) * | 1991-07-08 | 1996-07-23 | Seiko Epson Corporation | High-performance, superscalar-based computer system with out-of-order instruction execution |
DE69311330T2 (de) * | 1992-03-31 | 1997-09-25 | Seiko Epson Corp | Befehlsablauffolgeplanung von einem risc-superskalarprozessor |
DE69329778T2 (de) * | 1992-09-29 | 2001-04-26 | Seiko Epson Corp | System und verfahren zur handhabung von laden und/oder speichern in einem superskalar mikroprozessor |
US5628021A (en) * | 1992-12-31 | 1997-05-06 | Seiko Epson Corporation | System and method for assigning tags to control instruction processing in a superscalar processor |
DE69429061T2 (de) * | 1993-10-29 | 2002-07-18 | Advanced Micro Devices Inc | Superskalarmikroprozessoren |
US5625789A (en) * | 1994-10-24 | 1997-04-29 | International Business Machines Corporation | Apparatus for source operand dependendency analyses register renaming and rapid pipeline recovery in a microprocessor that issues and executes multiple instructions out-of-order in a single cycle |
US5675758A (en) * | 1994-11-15 | 1997-10-07 | Advanced Micro Devices, Inc. | Processor having primary integer execution unit and supplemental integer execution unit for performing out-of-order add and move operations |
US5878244A (en) * | 1995-01-25 | 1999-03-02 | Advanced Micro Devices, Inc. | Reorder buffer configured to allocate storage capable of storing results corresponding to a maximum number of concurrently receivable instructions regardless of a number of instructions received |
US5768610A (en) * | 1995-06-07 | 1998-06-16 | Advanced Micro Devices, Inc. | Lookahead register value generator and a superscalar microprocessor employing same |
US5835968A (en) * | 1996-04-17 | 1998-11-10 | Advanced Micro Devices, Inc. | Apparatus for providing memory and register operands concurrently to functional units |
US5872951A (en) * | 1996-07-26 | 1999-02-16 | Advanced Micro Design, Inc. | Reorder buffer having a future file for storing speculative instruction execution results |
US5961639A (en) * | 1996-12-16 | 1999-10-05 | International Business Machines Corporation | Processor and method for dynamically inserting auxiliary instructions within an instruction stream during execution |
US5913048A (en) * | 1997-03-31 | 1999-06-15 | International Business Machines Corporation | Dispatching instructions in a processor supporting out-of-order execution |
US5948098A (en) * | 1997-06-30 | 1999-09-07 | Sun Microsystems, Inc. | Execution unit and method for executing performance critical and non-performance critical arithmetic instructions in separate pipelines |
-
1998
- 1998-07-14 US US09/115,123 patent/US6112293A/en not_active Expired - Lifetime
- 1998-10-19 WO PCT/US1998/022030 patent/WO1999026132A2/en active IP Right Grant
- 1998-10-19 EP EP98953695A patent/EP1031074B1/en not_active Expired - Lifetime
- 1998-10-19 JP JP2000521433A patent/JP3866918B2/ja not_active Expired - Fee Related
- 1998-10-19 DE DE69835100T patent/DE69835100T2/de not_active Expired - Lifetime
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9690591B2 (en) | 2008-10-30 | 2017-06-27 | Intel Corporation | System and method for fusing instructions queued during a time window defined by a delay counter |
US10649783B2 (en) | 2008-10-30 | 2020-05-12 | Intel Corporation | Multicore system for fusing instructions queued during a dynamically adjustable time window |
Also Published As
Publication number | Publication date |
---|---|
WO1999026132A2 (en) | 1999-05-27 |
DE69835100D1 (de) | 2006-08-10 |
WO1999026132A3 (en) | 1999-09-16 |
EP1031074B1 (en) | 2006-06-28 |
EP1031074A2 (en) | 2000-08-30 |
US6112293A (en) | 2000-08-29 |
DE69835100T2 (de) | 2007-02-01 |
JP2001523854A (ja) | 2001-11-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3866918B2 (ja) | ルックアヘッド結果を発生し移動命令、比較命令および簡単な算術命令をまとめるよう構成されるプロセッサ | |
US6256728B1 (en) | Processor configured to selectively cancel instructions from its pipeline responsive to a predicted-taken short forward branch instruction | |
US6256721B1 (en) | Register renaming in which moves are accomplished by swapping tags | |
US6367001B1 (en) | Processor including efficient fetch mechanism for L0 and L1 caches | |
US6279106B1 (en) | Method for reducing branch target storage by calculating direct branch targets on the fly | |
US6061786A (en) | Processor configured to select a next fetch address by partially decoding a byte of a control transfer instruction | |
US6457117B1 (en) | Processor configured to predecode relative control transfer instructions and replace displacements therein with a target address | |
US6260134B1 (en) | Fixed shift amount variable length instruction stream pre-decoding for start byte determination based on prefix indicating length vector presuming potential start byte | |
US6493819B1 (en) | Merging narrow register for resolution of data dependencies when updating a portion of a register in a microprocessor | |
EP1116103A1 (en) | Mechanism for store to load forwarding | |
US6460132B1 (en) | Massively parallel instruction predecoding | |
US6240503B1 (en) | Cumulative lookahead to eliminate chained dependencies | |
US6134649A (en) | Control transfer indication in predecode which identifies control transfer instruction and an alternate feature of an instruction | |
US5946468A (en) | Reorder buffer having an improved future file for storing speculative instruction execution results | |
US6347369B1 (en) | Method and circuit for single cycle multiple branch history table access | |
US6219784B1 (en) | Processor with N adders for parallel target addresses calculation | |
EP1073949B1 (en) | Processor and method employing control transfer bit in predecode for identifying control transfer instructions |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20050913 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20050913 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20060620 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20060817 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20060912 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20061006 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20091013 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20101013 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20111013 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20111013 Year of fee payment: 5 |
|
S111 | Request for change of ownership or part of ownership |
Free format text: JAPANESE INTERMEDIATE CODE: R313113 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20111013 Year of fee payment: 5 |
|
R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20121013 Year of fee payment: 6 |
|
LAPS | Cancellation because of no payment of annual fees |