JP3662296B2 - スーパースカラマイクロプロセッサおよびropを処理する方法 - Google Patents

スーパースカラマイクロプロセッサおよびropを処理する方法 Download PDF

Info

Publication number
JP3662296B2
JP3662296B2 JP13401395A JP13401395A JP3662296B2 JP 3662296 B2 JP3662296 B2 JP 3662296B2 JP 13401395 A JP13401395 A JP 13401395A JP 13401395 A JP13401395 A JP 13401395A JP 3662296 B2 JP3662296 B2 JP 3662296B2
Authority
JP
Japan
Prior art keywords
flag
result
reorder buffer
microprocessor
branch
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
Application number
JP13401395A
Other languages
English (en)
Other versions
JPH07334364A (ja
Inventor
スコット・エイ・ホワイト
デイビッド・エス・クリスティー
マイケル・ディー・ゴッダード
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Advanced Micro Devices Inc
Original Assignee
Advanced Micro Devices Inc
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Advanced Micro Devices Inc filed Critical Advanced Micro Devices Inc
Publication of JPH07334364A publication Critical patent/JPH07334364A/ja
Application granted granted Critical
Publication of JP3662296B2 publication Critical patent/JP3662296B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30094Condition code generation, e.g. Carry, Zero flag
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • G06F9/384Register renaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3856Reordering of instructions, e.g. using queues or age tags
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • G06F9/3863Recovery, e.g. branch miss-prediction, exception handling using multiple copies of the architectural state, e.g. shadow registers

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)
  • Microcomputers (AREA)
  • Devices For Executing Special Programs (AREA)

Description

【0001】
【発明の背景】
この発明は包括的に、マイクロプロセッサに関し、より特定的には高性能スーパースカラマイクロプロセッサに関する。
【0002】
マイクロプロセッサの型式
その他多くの現代の技術分野と同様、マイクロプロセッサ設計は、技術者および科学者が常に高速化、効率および性能の向上を得ようと努力するテクノロジーである。概して、マイクロプロセッサは、スカラおよびベクトルプロセッサという2つの種類に分けることができる。基本のスカラプロセッサは、マシンサイクルにつき最大1つの命令を処理する。いわゆる「スーパースカラ」プロセッサは、マシンサイクルにつき2つ以上の命令を処理できる。スカラプロセッサとは対照的に、ベクトルプロセッサは、短時間に比較的大きな、値のアレイを処理できる。
【0003】
ベクトルプロセッサは、データの並列性に重きをおいて処理効率を達成し、一方スーパースカラプロセッサは、命令の並列性に重きをおいて演算の効率を高める。命令の並列性は、命令のシーケンスに固有の特性として考えることができ、そのような命令が並列に処理されることを可能とする。対照的に、データの並列性はデータの流れに固有の特性とみなすことができ、データの要素を並列に処理することを可能にする。命令の並列性は、命令の特定のシーケンスが示す従属性の数に関連する。従属性は、特定の命令が別の命令の結果に依存する程度として規定される。スカラプロセッサにおいて、ある命令が別の命令に対して従属性を示すとき、一般的に従属性は命令がその実行のために機能ユニットに送られる前に解決されねばならない。そのため、従来のスカラプロセッサは、そのような従属性の懸案の解決を待つ一方で、望ましくない時間の遅延を受けることになる。
【0004】
パイプライン化
プロセッサおよびマイクロプロセッサによる命令の実行を高速化するために、いくつかのアプローチが何年にもわたって採用されてきた。現在なおもマイクロプロセッサにおいて広く用いられている1つのアプローチは、パイプライン化である。パイプライン化において、アセンブリラインアプローチが行なわれ、そこでは、1)命令の取出し、2)命令のデコードおよびオペランドの収集、3)命令の実行および結果のライトバックという、3つのマイクロプロセッサの動作が重ね合わされて処理を高速化する。言い換えれば、それぞれのマシンサイクルにおいて命令1が取出され、命令1がデコードされる。命令1がデコードされそのオペランドが集められている一方で、命令2が取出される。命令1が実行され結果が書込まれている一方で、命令2がデコードされておりそのオペランドが集められ、命令3が取出されている。実際には、アセンブリラインアプローチは、上記よりも多くのアセンブリラインステーションに分割されてもよい。パイプライン化技術のより詳細な説明は、刊行物『IBMジャーナル』11巻、1967年1月、8−24頁の、D.W.アンダーソン(Anderson)らによる「IBMシステム/360 モデル91:マシンフィロソフィ(Machine Philosophy)」において示されている。
【0005】
以下の定義は、この明細書中における明確性を高めるために設けられる。「ディスパッチ」は、命令を命令デコーダから機能ユニットへ送る動作である。「発令」は、命令を機能ユニットにおいて実行に移させる動作である。「完了」は、命令の実行が終わり、結果が利用可能であるときに達成される。命令は、命令の結果がレジスタファイルに書込まれたとき、「引退した」と述べられる。これはまた、「ライトバック」としても述べられる。
【0006】
スーパースカラマイクロプロセッサ
最近の書物、「スーパースカラマイクロプロセッサ設計(Superscalar Microprocessor Design )」、ウィリアム・ジョンソン(William Johnson )、1991、プレンティスホール(Prentice-Hall )、Inc.では、実用的なスーパースカラマイクロプロセッサの設計に対するいくつかの一般的な考察を述べている。図1および図2は全体として、ジョンソンの本に述べられたスーパースカラマイクロプロセッサの実現を示す、マイクロプロセッサ10のブロック図である。マイクロプロセッサ10は、整数演算を扱うための整数ユニット15、および浮動小数点演算を扱うための浮動小数点ユニット20を含む。整数ユニット15および浮動小数点ユニット20は各々専用の、命令デコーダ、レジスタファイル、再オーダバッファ、およびロード/記憶ユニットを含む。より特定的には、図1に示されるとおり、整数ユニット15は、命令デコーダ25、レジスタファイル30、再オーダバッファ35、およびロード/記憶ユニット(60および65)を含み、浮動小数点ユニット20は、それ自身の命令デコーダ40、レジスタファイル45、再オーダバッファ50、およびロード/記憶ユニット(75および80)を含む。再オーダバッファはマイクロプロセッサの理論的状態を有し、レジスタファイルはマイクロプロセッサの構造的または実状態を有する。
【0007】
マイクロプロセッサ10は、2つの部分、すなわち命令を記憶するための命令メモリ55Aおよびデータを記憶するためのデータメモリ55Bを有するものとして考えることができる、メインメモリ55に結合される。命令メモリ55Aは、整数ユニット15および浮動小数点ユニット20の両方に結合される。同様に、データメモリ55Bは、整数ユニット15および浮動小数点ユニット20の両方に結合される。より詳細には、命令メモリ55Aは、命令キャッシュ58を介してデコーダ25およびデコーダ40に結合される。データメモリ55Bは、データキャッシュ70を介して、整数ユニット15のロード機能ユニット60および記憶機能ユニット65に結合される。データメモリ55Bはまた、データキャッシュ70を介して、浮動小数点ユニット20の浮動小数点ロード(浮動ロード)機能ユニット75および浮動小数点記憶(浮動記憶)機能ユニット80に結合される。ロードユニット60は、データメモリ55Bから選択されたデータを整数ユニット15にローディングするという従来のマイクロプロセッサ機能を実行し、記憶ユニット70は、整数ユニット15からのデータをデータメモリ55Bに記憶するという従来のマイクロプロセッサ機能を実行する。
【0008】
コンピュータプログラムは、マイクロプロセッサ10により実行される命令のシーケンスを含む。コンピュータプログラムは典型的に、コンピュータシステム内に位置する、ハードディスク、フロッピィディスクまたはその他の不揮発性記憶媒体に記憶される。プログラムが実行されているとき、プログラムは記憶媒体からメインメモリ55にローディングされる。一旦プログラムの命令および関連するデータがメインメモリ55に入れば、個々の命令は実行準備ができており、最終的にはマイクロプロセッサ10により実行される。
【0009】
命令は、メインメモリ55に記憶された後、命令キャッシュ58を通して、命令デコーダ25へと送られる。命令デコーダ25は、各々の命令を調べてとるべき適切な動作を決定する。たとえば、デコーダ25は、特定の命令が、PUSH、POP、LOAD、AND、OR、EX OR、ADD、SUB、NOP、JUMP、条件付きJUMP(BRANCH)、またはその他のタイプの命令であるかどうかを決定する。デコーダ25が、存在すると決定した命令の特定のタイプ次第で、命令は適切な機能ユニットにディスパッチされる。ジョンソンの本において提示されたスーパースカラアーキテクチャにおいて、デコーダ25は、マシンサイクルにつき4つの命令をデコードできる多命令デコーダである。したがって、デコーダ25は4つの命令幅の帯域幅を示すということができる。
【0010】
図1および図2に示されるように、OP CODEバス85は、デコーダ25と、各機能ユニット、すなわち分岐ユニット90、算術論理ユニット95および100、シフタユニット105、ロードユニット60ならびに記憶ユニット65との間に結合されている。この態様にて、各命令に対するOP CODEは、適切な機能ユニットに与えられる。
【0011】
上記の説明からしばらく逸れるが、命令は典型的に、以下のフォーマット、すなわちOP CODE、OPERAND A、OPERAND B、DESTINATION REGISTERである、多重フィールドを含むことが注目される。たとえば、サンプル命令ADD A、B、Cは、レジスタAの内容をレジスタBの内容に加算(ADD)し、結果を宛先レジスタCに与えることを意味するだろう。特定の命令に対するOP CODEが適切な機能ユニットに与えられねばならないだけでなく、その命令に対し指定されたOPERANDが引出されて機能ユニットに送られねばならない。もし特定のオペランドの値がまだ計算されていなければ、その値が第1に計算されて、機能ユニットがその命令を実行する前に機能ユニットに与えられねばならない。たとえば、もし現在の命令が先行する命令次第であれば、先行する命令の結果は、現在の命令が実行される前に決定されねばならない。この状況は、1つの命令の実行は別の命令の実行次第であるという、従属性と称される。
【0012】
機能ユニットが実行する特定の命令に対して必要なオペランドは、レジスタファイル30または再オーダバッファ35のいずれかにより、オペランドバス110に与えられる。オペランドバス110は、機能ユニットの各々に結合される。したがって、オペランドバス110は、オペランドを適切な機能ユニットに運ぶ。実際には、オペランドバス110は、OPERAND AおよびOPERAND Bに対し、別々のバスを含む。
【0013】
一旦機能ユニットにOP CODEおよびOPERAND AおよびOPERAND Bが与えられれば、機能ユニットは命令を実行し、その結果を、すべての機能ユニットの出力および再オーダバッファ35(および以下に述べられる各機能ユニットの入力でのそれぞれのリザベーションステーション)に結合される結果バス115に与える。
【0014】
リザベーションステーション
各機能ユニットの入力には、命令に対するすべてのオペランドを機能ユニットがまだ利用可能でないという意味においてまだ完了していない命令からのOPコードおよびオペランドを記憶するための、「リザベーションステーション」が設けられている。リザベーションステーションはまた、結果バスがまだフリーでない場合には、OP CODEおよびオペランド記憶を提供する。より特定的には、リザベーションステーションは、命令のOP CODEを、後にリザベーションステーションに届くであろう欠けているオペランドのために場所を保留するオペランドタグとともに記憶する。この技術のお蔭で、マイクロプロセッサが、懸案中の命令がそのオペランドとともにリザベーションステーションに集められている一方で、その他の命令の実行を続けることを可能にすることにより、性能が高められる。図1および図2に示されるように、分岐ユニット90にはリザベーションステーション90Rが、ALU95および100にはそれぞれリザベーションステーション95Rおよび100Rが、シフタユニット105にはリザベーションステーション105Rが、ロードユニット60にはリザベーションステーション60Rが、記憶ユニット65にはリザベーションステーション65Rが設けられている。このアプローチにおいて、以前のマイクロプロセッサにおいては機能ユニットの入力で典型的に用いられていた入力ラッチの場所に、リザベーションステーションが設けられている。リザベーションステーションに関する標準的な参照としては、R.M.トマスロ(Tomasulo)による、「マルチプル算術ユニットの開発のための効率的なアルゴリズム(An Efficient Algorithm For Exploiting Multiple Arithmetic Units )」、IBMジャーナル、11巻、1967年1月、25−33頁がある。
【0015】
上記のとおり、パイプラインを用いて、スカラマイクロプロセッサにおける有効スループットをマシンサイクル当り1つの命令という制限まで増大させることができる。図1および図2に示されるスーパースカラマイクロプロセッサにおいては、複数のパイプラインが用いられてマシンサイクル当り複数の命令の処理を可能とする。
【0016】
再オーダバッファおよびレジスタ再命名
「レジスタ再命名」と称される別の技術をまた採用して、スーパースカラマイクロプロセッサのスループットを高めることができる。この技術は、1つの命令の流れにおける2つの命令が両方とも、たとえば仮説レジスタ1という同じレジスタを用いることを要求する場合には有効である。レジスタ1Aと呼ばれる第2のレジスタが、第2の命令による使用のために、レジスタ1の場所に割当てられる。この態様で、第2の命令を実行でき、その結果は第1の命令がレジスタ1を用いて行なわれるのを待たずに得ることができる。図1および図2に示されるスーパースカラマイクロプロセッサ10は、レジスタ再命名アプローチを用いて命令処理能力を向上させる。マイクロプロセッサ10においてレジスタ再命名が実現される態様は、以下さらに詳細に述べられる。
【0017】
上記より、レジスタ再命名によりレジスタに対する記憶の対立が排除されることがわかる。レジスタ再命名を実現するために、整数ユニット15および浮動小数点ユニット20は、それぞれの再オーダバッファ35および50に関連づけられる。簡潔化のため、整数ユニット15における再オーダバッファ35を介したレジスタ再命名のみが論じられるが、同じ論点が、浮動小数点ユニット20における同様の回路についても当てはまる。
【0018】
再オーダバッファ35は、命令の結果に動的に割当てられる数多くの記憶ロケーションを含む。より特定的には、命令がデコーダ25によりデコードされるとき、命令の結果の値は再オーダバッファ35内のロケーションに割当てられ、その宛先レジスタ番号は、このロケーションに関連づけられる。これは、命令の宛先レジスタ番号を再オーダバッファのロケーションに効果的に再命名する。タグ、または一時的ハードウェア識別子は、マイクロプロセッサのハードウェアにより発生され結果を識別する。このタグは結果の値に対し、割当てられた再オーダバッファのロケーションを示す。命令の流れにおける後の命令が再命名された宛先レジスタを指すとき、レジスタ内に記憶されたと考えられる値を得るために、命令はその代わりとして、もし値がまだ計算されていなければ再オーダバッファに記憶された値、またはこの値に対するタグを得る。
【0019】
再オーダバッファ35は、内容アドレス可能メモリである、先入先出(FIFO)循環バッファとして実現される。これは、再オーダバッファ35におけるエントリは、エントリを直接識別するよりもむしろ、エントリが含んでいる何かを特定することにより識別されるということを意味する。より特定的には、エントリは、そこに書込まれたレジスタ番号を用いることにより識別される。レジスタ番号が再オーダバッファ35に与えられるとき、再オーダバッファはレジスタに書込まれた最新の値(またはその値がまだ計算されていなければその値に対するタグ)を提供する。このタグは、再オーダバッファ35における特定の命令の相対的で理論的な位置を含む。この編成は、レジスタ番号が提示されるときレジスタに値を与えるレジスタファイル30に似ている。しかしながら、再オーダバッファ35とレジスタファイル30とは、その中の値へのアクセスに際し非常に異なったメカニズムを用いる。
【0020】
再オーダバッファ35に採用されるメカニズムにおいて、再オーダバッファは要求されたレジスタ番号を、再オーダバッファのすべてのエントリにおけるレジスタ番号と比較する。次に、再オーダバッファは整合するレジスタ番号を有するエントリにおける値(またはタグ)をリターンする。これは、アソシアティブルックアップ技術である。対照的に、要求されたレジスタ番号がレジスタファイル30に与えられるとき、レジスタファイルは単に、レジスタ番号をデコードし、選択されたエントリにおいて値を提供する。
【0021】
命令デコーダ25が命令をデコードするとき、デコードされた命令のソースオペランドのレジスタ番号が用いられて、再オーダバッファ35とレジスタファイル30の両方に同時にアクセスする。もし再オーダバッファ35が、要求されたソースレジスタ番号と整合するレジスタ番号を備えるエントリを有さなければ、レジスタファイル30における値が、ソースオペランドとして選択される。しかしながら、もし再オーダバッファ35が整合するエントリを含めば、このエントリにおける値が、ソースオペランドとして選択されるが、それはこの値がレジスタに割当てられる最新の値であるに違いないからである。もし値がまだ計算されていないために利用不能であれば、その値に対するタグがその代わりとして選択され、オペランドとして用いられる。いずれにしても、値またはタグは、適切な機能ユニットのリザベーションステーションにコピーされる。この手続は、デコードされた各命令により要求される各々のオペランドに対し実行される。
【0022】
典型的な命令シーケンスにおいて、所与のレジスタは何度も書込まれるだろう。そのため、命令が同じ宛先レジスタを特定する場合には、異なる命令により同じレジスタが再オーダバッファ35の異なるエントリに書込まれる可能性がある。このシナリオにおいて正確なレジスタの値を得るために、再オーダバッファ35は、割当の順序により複数の整合するエントリに優先順位をつけ、特定のレジスタの値が要求されるときに最新のエントリをリターンする。この技術により、再オーダバッファへの新しいエントリが、それよりも古いエントリにとって代わる。
【0023】
機能ユニットが結果を発生するとき、結果は再オーダバッファ35およびこの結果に対するタグを含むいずれかのリザベーションステーションのエントリに書込まれる。この態様で結果の値がリザベーションステーションに書込まれるとき、リザベーションステーションは、実行のために機能ユニットに発令されることを待っている1つ以上の命令を解放する必要なオペランドを与えてもよい。結果の値が再オーダバッファ35に書込まれた後、後続の命令は再オーダバッファからの結果の値の取出しを続ける。この取出しは、エントリが新しい値によりとって代わられない限り、および値をレジスタファイル30に書込むことにより値が引退するまで続行する。引退は、元の命令シーケンスの順で発生し、したがって割込および例外に対して順序の整った状態を保存する。
【0024】
浮動小数点ユニット20に関し、浮動ロード機能ユニット75および浮動記憶機能ユニット80に加えて、浮動小数点ユニット20がその他の機能ユニットをまた含むことが注目される。たとえば、浮動小数点ユニット20は、浮動加算ユニット120、浮動変換ユニット125、浮動乗算ユニット130、および浮動除算ユニット140を含む。OP CODEバス145は、デコーダ40と、浮動小数点ユニット20における各機能ユニットとの間に結合され、デコードされた命令を機能ユニットに与える。各機能ユニットは、それぞれのリザベーションステーション、すなわち、浮動加算リザベーションステーション120R、浮動変換リザベーションステーション125R、浮動乗算リザベーションステーション130R、および浮動除算リザベーションステーション140Rを含む。オペランドバス150は、レジスタファイル45および再オーダバッファ50を機能ユニットのリザベーションステーションに結合し、こうしてオペランドが与えられる。結果バス155は浮動小数点ユニット20のすべての機能ユニットの出力を再オーダバッファ50に結合する。再オーダバッファ50はしたがって、レジスタファイル45に結合される。再オーダバッファ50およびレジスタファイル45はこうして、整数ユニット15を参照して先に述べたのと同じ態様で結果が与えられる。
【0025】
ジョンソンの本における特定的な実現では、整数再オーダバッファ35は、16のエントリを有し、浮動小数点再オーダバッファ50は8つのエントリを有する。整数再オーダバッファ35および浮動小数点再オーダバッファ50は各々、マシンサイクル当り2つの計算された結果を受入れることができ、かつサイクル当り2つの結果をそれぞれのレジスタファイルに引退させることができる。
【0026】
マイクロプロセッサがデコードされた命令を順を追って発令する(「順序発令」)ように制限されているとき、デコードされた命令が資源競合を発生するとき(すなわち2つの命令両方がR1レジスタの使用を望んでいるとき)はいつでも、またはデコードされた命令が従属性を有するときには、マイクロプロセッサは命令をデコードすることを停止しなければならない。対照的に、「順序の乱れた発令」を採用する図1および図2のマイクロプロセッサ10は、デコーダ25を実行ユニット(機能ユニット)から切り離すことにより、このタイプの命令の発令を達成する。このことは、再オーダバッファ35および機能ユニットでの前述のリザベーションステーションを用いて、分布された命令ウィンドウを効果的に確立することにより行なわれる。この態様で、たとえ命令を即時に実行することができなくても、デコーダは命令のデコードを続けることができる。命令ウィンドウは命令のプールとして働き、マイクロプロセッサが先に進んで命令の実行を続けるときにそこから命令を引出す。ルックアヘッド能力が、このようにして命令ウィンドウによりマイクロプロセッサにもたらされる。従属性が取除かれるとき、およびオペランドが利用可能になるに従って、ウィンドウにおけるより多くの命令が機能ユニットにより実行され、デコーダはウィンドウをさらに多くのデコードされた命令で満たし続ける。
【0027】
スカラ − スーパースカラ比較
スーパースカラマイクロプロセッサの動作を理解するために、パイプラインの各々の段、すなわち取出し、デコード、実行、ライトバック、および結果表明における、スカラおよびスーパースカラマイクロプロセッサを比較することが役に立つ。以下の表1は、かかる比較を提供する。
【0028】
【表1】
Figure 0003662296
分岐予測および理論的実行
マイクロプロセッサに分岐予測ユニットを含めることにより、性能を向上できる。プログラムの命令の流れにおける分岐がマイクロプロセッサの命令取出能力を妨げることは周知である。これは、分岐が発生すると、取出器が取出すべき次の命令は、分岐の結果次第であるからである。分岐予測ユニットがなければ、マイクロプロセッサの命令取出器は、停止するか、または誤った命令を取出すかもしれない。このことは、並列に実行する命令ウィンドウにおけるその他の命令をマイクロプロセッサが発見する可能性を減ずる。分岐予測ユニットがハードウェア分岐予測を採用して、命令取出しの間に発生する分岐の結果を予測することができる。このようなハードウェア分岐予測ユニットは、分岐がとられるべきか否かを予測する。たとえば、分岐目的バッファが採用されて、先行する分岐の結果の続いている履歴を保存する。この履歴に基づき、取出された分岐命令がどの分岐をとるべきかについての判断が、取出された特定の分岐の間に行なわれる。
【0029】
ソフトウェア分岐予測がまた採用されて、分岐の結果を予測することが注目される。この分岐予測アプローチにおいて、プログラムの各分岐に対していくつかのテストが実行され、どの分岐の結果がより適当であるかを統計的に決定する。ソフトウェア分岐予測技術は典型的に、好ましい分岐の結果についての統計的な分岐予測情報をプログラムそのものに埋込むことを含む。「理論的実行」という用語はしばしば、マイクロプロセッサ設計の実行において用いられ、(分岐といった)コードのシーケンスは、マイクロプロセッサがそのコードのシーケンスを実行するのに適するということが確実となる前に実行される。
【0030】
ハードウェア分岐予測への1つのアプローチは、いわゆる引退PC(プログラムカウンタ)アドレスをマイクロプロセッサに記憶することである。引退PCは、最早理論的ではないとして再オーダバッファからレジスタファイルに引退した命令と、理論的に実行された命令の結果であるとしてなお再オーダバッファ内に存在する命令との間の、回転する分界ラインである。命令が命令デコーダによりデコードされ、分岐が発生したとき、分岐予測ユニットは、その分岐に対する目的命令を予測する。マイクロプロセッサは次に、理論に基づき、予測された目的命令およびそれに続く命令の実行に取りかかる。予測された目的命令およびそれに続く命令は、「理論的に実行された命令」と指定される。分岐命令が実際に実行されるまで、分岐予測が実際に正しかったかどうか、および理論的に実行された命令が適切な経路にあったかどうかということは、わからないであろう。このように理論的に実行された命令の結果は、理論的な実行を助成するものとしての再オーダバッファ内に一時的に記憶される。言い換えれば、再オーダバッファは、予測され実行された命令は、分岐予測ユニットにより適切に選択されたという理論の下に、これらの命令の結果をオペランドとして記憶する。
【0031】
分岐予測ユニットが分岐命令の目的を正しく予測したことが判明すれば、再オーダバッファに記憶された理論的に実行された命令は、レジスタファイルに引退する。このような引退が発生するときには、引退PCは次に、引退した最後の命令のすぐ後の命令のアドレスを反映する。言い換えれば、命令が最早理論的でないとして引退したとき、引退PCは理論的に実行されることになる次の命令に進む。しかしながら、もし分岐予測ユニットが不正確であったなら、分岐予測誤りが発生したことになる。この場合、再オーダバッファにおける理論的に実行された命令結果は廃棄され、マイクロプロセッサは今度は正しい分岐をとることにより実行を続ける。
【0032】
上記より、分岐命令に出会うことによりマイクロプロセッサの性能に大きな影響を与える可能性があり、この分岐予測技術は、この問題を大きく改善するということが認識される。しかしながら、単に特定の分岐の結果を予測するよりも多くの性能上の問題が分岐命令に発生する。より特定的には、分岐命令は、様々な条件コードまたはフラグがセットされて分岐がとられるべきかどうかを決定するという状態次第である。したがって、先に述べた従来のスーパースカラマイクロプロセッサにおいて、もしシーケンスにおいて同じフラグが複数の命令により用いられれば、フラグの状態を修正する前に特定のフラグを用いて先行する命令が行なわれるまで、そのような命令は、待たなければならないかもしれない。これはフラグの従属性という状態であり、機能ユニットへの命令の発行をスローダウンするため、性能にマイナスの影響を与える。
【0033】
【発明の概要】
したがって、この発明のマイクロプロセッサの1つの利点は、分岐命令の処理に関するマイクロプロセッサの性能の向上である。
【0034】
この発明の1つの実施例に従えば、命令の流れの中に含まれる命令をデコードするため、およびデコードされた命令をROPに変換するためのデコーダを含む、スーパースカラマイクロプロセッサが提供される。マイクロプロセッサは、マイクロプロセッサの理論的な状態を記憶するための、デコーダに結合された再オーダバッファを含む。マイクロプロセッサはまた、マイクロプロセッサの実状態を記憶するための、再オーダバッファに結合されたレジスタファイルを含む。マイクロプロセッサの再オーダバッファは、理論的な整数結果を記憶するための整数結果部分と、整数結果に関連する理論的なフラグ情報を記憶するためのフラグ結果部分とを含む、複数の記憶ロケーションを有する再オーダバッファアレイを含む。フラグ結果部分および整数結果部分は連結して、整数結果よりも幅広い浮動小数点結果の記憶に対処する、浮動小数点記憶ロケーションを形成する。実フラグレジスタは、再オーダバッファから引退したフラグ情報を記憶するための再オーダバッファに結合される。マイクロプロセッサの1つの実施例は、デコーダと再オーダバッファとに結合された浮動小数点ユニット、デコーダと再オーダバッファとに結合された分岐ユニット、およびデコーダと再オーダバッファとに結合された整数ユニットを含む。
【0035】
新規性を有すると考えられるこの発明の特徴は、前掲の特許請求の範囲において特定的に述べられる。しかしながら、この発明そのものは、その構造についても動作方法についても、以下の説明および添付の図面を参照することにより、最もよく理解されるであろう。
【0036】
【発明についての説明】
I.スーパースカラマイクロプロセッサ−構造概観
この発明を実行するために意図された最高のモードの詳細な説明が以下に述べられる。説明は、この発明の例示を意図するものであり、制限とみなされるべきではない。
【0037】
図3および図4を参照すれば、この発明は、X86命令セットを実行するスーパースカラX86マイクロプロセッサ200のコンテキストにおいて最高に理解できる。マイクロプロセッサ200の構造的な概観が簡単に提示される。マイクロプロセッサ200は、命令およびデータを受取るために内部アドレスおよびデータ(IAD)バス295を介して外部メモリ302に結合された命令キャッシュ(ICACHE)210を含む。命令キャッシュ210はまた、命令キャッシュ210から命令デコーダ205への命令の供給を行なうバイトキュー(Byte Q)215に結合される。命令デコーダ205は、RISCコア202に結合される。「RISCコア」という用語は、マイクロプロセッサ200の中心カーネルを指し、レジスタファイル255、再オーダバッファ285、ならびに算術論理アンドシフトユニット240(ALU0アンドSHF)、算術論理ユニット245(ALU1)、特別レジスタブロック250(SRB)、ロード/記憶機能ユニット260(LSSEC)、分岐セクション235(BRNSEC)、および浮動小数点ユニット265(FPU)といった様々な機能ユニットを含む、RISC(縮小命令セット)アーキテクチャである。
【0038】
RISCコア202はさらに、nは0から3に変化する整数である、4つのAオペランドバス(XRDnAB(40:0))および4つのBオペランドバス(XRDnBB(40:0))を含むオペランドバス275を有する。RISCコア202はまた、デコーダ205と上記の図3および図4に示される機能ユニットとの間に結合された、4つの12ビット幅のタイプアンドディスパッチ(TAD)バス272を含む。4つのTADバス272の各々は、デコーダ205内のそれぞれの命令ディスパッチ位置D0、D1、D2およびD3に対応し、それぞれの命令のタイプを機能ユニットへ運ぶ。より特定的には、各TADバスは、機能ユニットに与えられるタイプ情報専用の3ビット、特定のディスパッチが有効であることを示す1ビット、および8ビットのオペレーションコードを含む。
【0039】
マイクロプロセッサ202はまた、機能ユニットおよび再オーダバッファ285に結合された、結果タグおよび結果バス280XRESnB(40:0)(nは0から4まで変化する)を含む。オペランドバス275のAおよびBオペランドバスはまた、レジスタファイル255および再オーダバッファ285に結合される。分岐、すなわち特定のキャッシュラインにおいて分岐がとられるかとられないかを予測する、分岐予測ブロック225が設けられる。分岐機能ユニットまたはセクション(BRNSEC)235が設けられて、レジスタファイル255および再オーダバッファ285と協力してデコーダ205によりディスパッチされる分岐命令を実際に実行する。分岐機能ユニット235は、分岐予測誤りライン(BRN_MSP)(XTARGET(31:0)バスに関連する)を介して分岐予測ブロック225に結合される分岐予測誤り出力を含み、分岐機能ユニット235での実際の分岐実行の際にいつ分岐予測誤りが発生したかについて分岐予測ブロックに知らせる。BRN_MSP信号は制御信号であり、これにより分岐機能ユニット235は分岐予測誤りが発生したことを示す。XTARGETバスは、取出しが今開始されるべきアドレスを示す再方向付けPCを転送する。言い換えれば、XTARGETバスは、分岐命令が実行されたとき発生する目的アドレスを転送する。
【0040】
命令キャッシュ210に加えて、マイクロプロセッサ200はまた、データキャッシュ270(DCACHE)および物理タグ回路310を含む。データキャッシュ270は、RISCコアのロード/記憶機能ユニット260に結合される。データキャッシュ270はまた、IADバス295を介し外部メモリ302に結合され、そこからデータにアクセスする。物理タグ回路310はIADバスを介して、命令キャッシュ210とデータキャッシュ270両方と相互作用する。命令キャッシュ210およびデータキャッシュ270は両方とも、線形的にアドレス指定可能なキャッシュである。命令キャッシュ210およびデータキャッシュ270は物理的に分離されている。しかしながら、両方のキャッシュは同じアーキテクチャを用いて組織される、すなわち両方のキャッシュは対応するタグアレイとともに記憶アレイを含む。
【0041】
マイクロプロセッサ200はまた、変換ルックアサイドバッファ(TLB)317を有するメモリ管理ユニット(MMU)315、およびバスインタフェースユニット300(BIU)を含む。メモリ管理ユニット315は、IADバス295および物理タグ回路310に結合される。バスインタフェースユニット300は、物理タグ回路310およびIADバス295に結合され、またアドバンスドマイクロディバイシズ(Advanced Micro Devices)AM486バスといった外部マイクロプロセッサバスに結合される。
【0042】
マイクロプロセッサ200は、命令のシーケンスを含むコンピュータプログラムを実行する。コンピュータプログラムは典型的に、コンピュータシステム内に位置するハードディスク、フロッピィディスクまたはその他の不揮発性記憶媒体に記憶されている。プログラムが実行されるとき、プログラムは、バスインタフェースユニット300を介してマイクロプロセッサ200によりアクセスされるメインメモリ302(外部メモリ)に、記憶媒体からロードされる。一旦プログラムの命令および関連するデータがメインメモリ302に入れば、個々の命令は実行準備ができており、最終的にはマイクロプロセッサ200により実行される。
【0043】
メインメモリ302に記憶された後、命令はバスインタフェースユニット300を介し、命令が一時的に保存される命令キャッシュ210に送られる。命令デコーダ205は、整列し命令をバッファするバイトキュー215を介し、命令キャッシュ210から命令を受取る。命令デコーダ205は命令を調べ、とるべき適切な動作を決定する。たとえば、デコーダ205は、特定の命令がPUSH、POP、LOAD、AND、OR、EX OR、ADD、SUB、NOP、JUMP、条件付きJUMP(BRANCH)、またはその他の命令であるかどうかを決定してもよい。どの特定の命令が存在するとデコーダ205が決定するかにより、命令はRISCコア202の適切な機能ユニットにディスパッチされる。
【0044】
RISCコア202にディスパッチされた命令は典型的に、以下のフォーマットの多重フィールドを含み、そのフォーマットとは、OP CODE、OPERAND A、OPERAND B、DESTINATION REGISTERである。OP CODEは、タイプアンドディスパッチ(TAD)バス272を介し、RISCコア202の機能ユニットに命令デコーダ210から与えられる。特定の命令のOP CODE(またはタイプ)が適切な機能ユニットに与えられねばならないだけでなく、命令に対して指定されたOPERANDが引出されて機能ユニットに送られねばならない。もし特定のオペランドの値が外部メモリ302に記憶されていれば、この値は引出されてデータキャッシュ270に記憶される。この値は次に、ロード記憶セクション260によりロードされ、再オーダバッファ285に与えられてもよい。その代わりとして、もし特定のオペランドの値がまだ計算されていなければ、その値が第1に計算され、命令が実行されることができる前に機能ユニットに与えられる。たとえば、もし現在の命令が先行する命令次第であれば、先行する命令の結果が、現在の命令が実行され得る前に決定されねばならない。この状況は従属性と呼ばれる。
【0045】
機能ユニットが実行することになる特定の命令に対して必要なオペランドは、レジスタファイル255または再オーダバッファ285のいずれかによりオペランドバス275に与えられる。オペランドバスは、オペランドを適切な機能ユニットに運ぶ。一旦機能ユニットがOP CODE、OPERAND A、およびOPERAND Bを受取れば、機能ユニットは命令を実行し、すべての機能ユニットの入力および出力、ならびに再オーダバッファ285に結合された結果バス280に結果を与える。
【0046】
再オーダバッファ285は、先入先出(FIFO)デバイスとして管理される。命令を命令デコーダ205がデコードするとき、対応するエントリは再オーダバッファ285に割当てられる。命令に対して計算された結果の値はしたがって、命令の実行が完了したとき割当てられたエントリに書込まれる。結果の値は次に、レジスタファイル255に書込まれ、もし命令に関連する例外がなければ、およびもし命令に影響を及ぼす理論的な分岐が懸案中でなければ、命令は引退する。もし、命令に関連するエントリが再オーダバッファ285の先頭に到達したとき命令が完了していなければ、再オーダバッファ285の進行は、命令が完了するまで停止される。しかしながら、さらなるエントリの割当は続けることができる。
【0047】
各機能ユニットは、命令に対するオペランドがまだ機能ユニットにとって利用可能ではないためまだ完了していない命令からのOP CODEを記憶するための、リザベーションステーション(RS)235R、240R、245R、260Rおよび265Rをそれぞれ含む。各リザベーションステーションは、命令のOP CODEおよびオペランドを、後にリザベーションステーションに到着する欠けているオペランドのために場所を保留するタグとともに記憶する。この技術は、懸案の命令がそのオペランドとともにリザベーションステーションに集められている一方で、マイクロプロセッサ200がその他の命令の実行を続けることを可能にすることにより、性能を高める。
【0048】
マイクロプロセッサ200は、デコーダ205をRISCコア202の機能ユニットから切り離すことにより、順序の乱れた発令を行なう。より特定的には、再オーダバッファ285および機能ユニットのリザベーションステーションは効果的に、分布された命令ウィンドウを確立する。したがって、デコーダ205は、たとえ命令が即時実行できなくとも命令のデコードを続けることができる。命令ウィンドウは命令のプールとしての働きをし、機能ユニットは続けて命令の実行を行なうときにそこから命令を引出す。命令ウィンドウはこのようにして、マイクロプロセッサ200にルックアヘッド能力をもたらす。従属性が解消し、オペランドが利用可能になれば、ウィンドウ内のさらに多くの命令が機能ユニットにより実行され、デコーダはウィンドウをさらに多くのデコードされた命令で満たし続ける。
【0049】
マイクロプロセッサ200は、分岐予測ユニット225および分岐機能ユニット235(BRNSEC)を用いて、性能を高める。分岐発生のとき、次の命令は分岐の結果次第であるため、プログラムの命令の流れにおける分岐は、マイクロプロセッサが命令を取出す能力を妨げる。したがって、命令キャッシュ210のサクセサのアレイに記憶された情報を用いて予測される、予測された分岐は、分岐セクション235により実行される。分岐セクション235は次に分岐の結果を調べて、予測された分岐が正しかったかどうかを決定する。もし分岐予測誤りがあれば、再オーダバッファ285の内容は、誤り予測された分岐命令が廃棄されるのに続いて割当てられる。
【0050】
II.スーパースカラマイクロプロセッサ−動作概観
マイクロプロセッサ200は、サイズが可変である命令を処理することができる。たとえば、マイクロプロセッサ200は、長さが可変の命令を用いる周知のIntelTM命令セットのいわゆるX86命令を処理することができる。
【0051】
マイクロプロセッサ200のアーキテクチャは、IntelTMX86命令セットに見受けられるようないわゆるCISC(複合命令セットコンピュータ)命令を取入れ、これらの命令を、RISCコア202により処理されるRISCのような命令(ROP)に変換することができる。この変換プロセスは、図3および図4に示されたマイクロプロセッサ200のデコーダ205において発生する。デコーダ205は、CISC命令をデコードし、CISC命令をROPに変換し、次にROPを実行のために機能ユニットにディスパッチする。デコーダ205の構造および動作に関するより詳細な説明は、「スーパースカラ命令デコーダ(Superscalar Instruction Decoder )」と題される、1993年10月29日に出願された、出願第08/146,383号の同時係属中の特許出願において行なわれ、その開示はこの明細書中に引用により援用され、本特許出願の譲渡人に譲渡される。
【0052】
マイクロプロセッサ200がそのRISCコアにクロックサイクル当り数多くのROPを与える能力は、このスーパースカラマイクロプロセッサによりもたらされる高性能の1つの源である。命令キャッシュ(ICACHE)210は、このROP供給をバイトのキューまたはバイトキュー(バイトQ)215としてもたらす、マイクロプロセッサ200の構成部品である。この発明のこの特定の実施例において、命令キャッシュ210は、16Kバイトの、有効フォーウェイ・セット・アソシアティブの、線形的にアドレス指定された命令キャッシュである。
【0053】
図3および図4に示されるように、命令キャッシュ210のバイトQ215は、命令デコーダ205に与えられる。命令デコーダ205は、与えられた各命令を1つ以上のROPにマップする。デコーダ205のROPディスパッチウィンドウ220は、4つのディスパッチ位置を含み、ICACHE210からの命令をそこにマップすることができる。4つのディスパッチ位置は、D0、D1、D2、D3として指定される。第1の例では、バイトQ215によりデコーダ205に与えられる命令は、2つのROPディスパッチ位置にマップすることができる命令であると仮定される。この場合、この第1の命令がデコーダ205に与えられるとき、デコーダ205は、その命令を、ディスパッチ位置D0に与えられる第1のROPと、ディスパッチ位置D1に与えられる第2のROPとにマップする。次に、後続の第2の命令は3つのROP位置にマップできると仮定される。この第2の命令がバイトQ215によりデコーダ205に与えられるとき、その命令は、ディスパッチ位置D2に与えられる第3のROPと、ディスパッチD3に与えられる第4のROPとにマップされる。ディスパッチ位置D0からD3に現われるROPは次に、機能ユニットにディスパッチされる。第2の命令がマップされる残余の第3のROPは、かかるROPがディスパッチされることができる前に、次のディスパッチウィンドウが処理されるのを待たねばならないことが注目される。
【0054】
命令キャッシュ210がどの特定のバイトをドライブ・アウトしてバイトQ215にすべきかに関する情報は、分岐予測ブロック225内に含まれており、これは命令キャッシュ210への入力である。分岐予測ブロック225は、次に予測される分岐目的ロケーションをブロックベースでブロックに示す、次のブロックアレイ(ICNXTBLK)を含む。分岐機能ユニット235は、命令の流れが出会う分岐命令を実際に実行する、機能ユニットである。マイクロプロセッサ200において利用できる1つの分岐予測メカニズムは、W.M.ジョンソンの、1992年4月8日に発行された、「キャッシュに命令の各ブロックとともに記憶された取出し情報を用いて、正しく予測された分岐命令に続く実行に対する遅延を減ずるためのシステム(System For Reducing Delay For Execution Subsequent To Correctly Predicted Branch Instruction Using Fetch Information Stored With Each Block of Instructions In Cache)」と題される、米国特許第5,136,697号に述べられ、その開示はこの明細書中に引用により援用される。命令キャッシュ210にはまた、外部メモリ302から要求された命令キャッシュミスを取出す、先取りブロック230が設けられている。
【0055】
マイクロプロセッサ200は、4つの整数機能ユニット、すなわち、分岐機能ユニット235、ALU0/シフタ機能ユニット240、ALU1機能ユニット245、および特別レジスタ機能ユニット250を含み、そこにデコーダ205の4つのROP位置を発令できる。分岐機能ユニット235は分岐命令を実行し、1サイクルの待ち時間を示す。分岐機能ユニット235は、クロックサイクル当り1つの新しいROPを受入れることができる。分岐ユニット235は、2エントリリザベーションステーション235Rを含む。この明細書の目的のために、2つのエントリを含むリザベーションステーションは、2つのリザベーションステーションと同じであると考えられる。
【0056】
ALU0/シフタ機能ユニット240は、1サイクルの待ち時間を示す。クロックサイクルにつき1つの新しいROPがユニット240に受入れられることができる。ALU0/シフタ機能ユニット240は、理論的ROPを2つまで保持する2エントリリザベーションステーション240Rを含む。すべてのX86算術および論理計算は、この機能ユニットまたはその代わりとしてその他の算術論理ユニットALU1 245を通る。さらに、シフト、ローテートまたは「第1番目発見」命令が、ALU0/シフタ機能ユニット240に与えられる。
【0057】
ALU1機能ユニット245も同様に1サイクルの待ち時間を示す。クロックサイクルにつき1つの新しいROPがALU1機能ユニット245により受入れられることができることが注目される。ALU1機能ユニットは、理論的ROPを2つまで保持する2エントリリザベーションステーション245Rを含む。すべてのX86算術および論理計算は、この機能ユニットまたはその他の算術論理ユニット、ALU0(240)を通る。ALU0およびALU1は、クロックサイクルにつき2つまでの整数結果演算の計算を可能にする。
【0058】
特別レジスタ機能ユニット250は、汎用レジスタファイル255の外にある、内部制御、状態、およびマップされた状態を扱うための、特別ブロックである。この発明の1つの実施例において、特別レジスタ機能ユニット250にはリザベーションステーションがない、というのもROPが特別レジスタ機能ユニット250に発令されるとき、懸案となっている理論的状態はないからである。
【0059】
ロード/記憶機能ユニット260および浮動小数点機能ユニット265は、デコーダ205のROPディスパッチウィンドウ220に結合される。ロード/記憶機能ユニット260は、4エントリリザベーションステーション260Rを含む。浮動小数点機能ユニット265は、2つのリザベーションステーション265Rを含む。データキャッシュ270は、ロード/記憶機能ユニット260に結合されてデータ記憶およびそれに対する検索を与える。浮動小数点機能ユニット265は、41ビットの混合整数/浮動小数点オペランドバス275および結果バス280に連結される。より詳細には、オペランドバス275は、41ビット幅を示す8つの読出オペランドバスを含む。結果バス280は、5つの結果バス、すなわち41ビット幅を示す4つの汎用バスと、32ビット幅を示す1つの専用バスとを含む。専用結果バスは、ロード記憶機能ユニット260、分岐ユニット235および特別レジスタブロック250の間に結合される。ロード記憶機能ユニットは、専用結果バスを通して記憶をリターンし、分岐ユニット235は、専用結果バスを通して分岐をリターンする。特別レジスタブロック250は、その結果を専用結果バスを通してリターンする。
【0060】
浮動小数点ユニット265が混合整数/浮動小数点オペランドおよび結果バスに連結していることにより、1つのレジスタファイル255および1つの再オーダバッファ285が理論的整数および浮動小数点ROPの両方に対して用いられることができる。2つのROPは、浮動小数点リザベーションステーション265Rから浮動小数点機能ユニット265内の82ビットの浮動小数点コアに入力される、82ビットの拡張精度演算を形成する。
【0061】
浮動小数点機能ユニットト265の82ビット浮動小数点コアは、浮動小数点加算器、浮動小数点乗算器および浮動小数点除算/平方根機能ユニットを含む。浮動小数点ユニット265内の浮動小数点加算器機能ユニットは、2サイクルの待ち時間を示す。浮動小数点加算器は、次に送られる80ビットの拡張結果を計算する。浮動小数点乗算器は、拡張精度乗算演算に対し、6サイクルの待ち時間を示す。32×32乗算器は、単精度乗算演算のために、浮動小数点機能ユニット265内に採用される。この32×32乗算器は、拡張精度を必要とする64ビット仮数演算に対し、多サイクルである。浮動小数点除算/平方根機能ユニットは、基数4の対話型除算を採用し、64ビット仮数の2ビット/クロックを計算する。
【0062】
A/Bオペランドバスのバス幅が41ビットであるこの発明の実施例において、整数ユニットに続いているこれらA/Bオペランドバスに関し、オペランドには32ビットが与えられることが注目される。この発明のその他の実施例は、A/Bオペランドバスのバス幅が41ビットでなく、32ビットまたはその他のサイズであることを意図することがまた注目されるべきである。そのような32ビットオペランドバス幅の配置においては、オペランドバスから分離される制御ラインは、制御情報の転送のために採用される。
【0063】
ロード記憶機能ユニット260は、4エントリリザベーションステーション260Rを含む。ロード記憶機能ユニット260は、クロックサイクルにつき2つのロードまたは記憶演算が発令されることを許可する。ロード記憶セクションはまた、線形のアドレスを計算し、要求されたメモリのセグメントへのアクセス権を検査する。データキャッシュ270におけるヒット/ミスの検査に関するロードまたは記憶演算の待ち時間は、1サイクルである。2つまでのロード演算が、同時にデータキャッシュ270にアクセスし、その演算を記憶バス280に送ることができる。ロード記憶セクション260は、整数および浮動小数点ロードならびに記憶演算の両方を扱う。
【0064】
図3および図4に示されるように、マイクロプロセッサ200は、再オーダバッファ285に結合されたレジスタファイル255を含む。レジスタファイル255も再オーダバッファ285も、オペランド/フラグ選択ブロック290を介してオペランドバス275に結合される。レジスタファイル255、再オーダバッファ285およびオペランド/フラグ選択ブロック290は協調して、オペランドを機能ユニットに与える。結果は機能ユニットから得られるため、これらの結果は再オーダバッファ285に転送され、エントリとしてその中に記憶される。
【0065】
より詳細には、レジスタファイル255および再オーダバッファ285は、プログラム実行の間記憶をオペランドに与える。レジスタファイル255は、整数および浮動小数点命令の両方に対しマップされたX86レジスタを含む。レジスタファイルはまた、一時的整数および浮動小数点レジスタを含み、中間計算の保持を提供する。この発明のこの特定的な実施例において、レジスタファイル255内のすべてのレジスタは、8つの読出および4つの書込ラッチとして実現される。このようにして与えられた4つの書込ポートにより、クロックサイクルにつき4つまでのレジスタファイル宛先が書込まれることが可能になる。もし浮動小数点結果がレジスタファイルに書込まれているならば、これは、ポートにつき1つの整数の値またはポートにつき0.5の浮動小数点の値のいずれかであり得る。8つの読出ポートにより、各々2つのソース読出演算を伴う4つのROPがクロックサイクルにつきディスパッチされることが可能になる。
【0066】
再オーダバッファ285は、16までの理論的ROPのキューを保持する、16エントリ環状FIFOとして編成される。再オーダバッファ285はしたがって、16エントリを割当てることができ、その各々は1つの整数結果または0.5の浮動小数点結果を含むことができる。再オーダバッファ285は、クロックサイクルにつき4つのROPを割当てることができ、クロックサイクルにつき5つまでのROPを有効にすることができ、クロックサイクルにつき4つのROPをレジスタファイル255に引退させることができる。マイクロプロセッサ200の現在の理論的状態は、必要なときに続いて機能ユニットに送るために、再オーダバッファ285に保持される。再オーダバッファ285はまた、エントリが記憶されるROBアレイ405内の位置により、各ROPの相対的な順序を維持する。再オーダバッファ285はまた、割込またはトラップルーチンのために、処理に対し予測誤りおよび例外を示す。
【0067】
再オーダバッファ285は、それぞれ8つのオペランドで8つのオペランドバス275を駆動できる。再オーダバッファ285は、5つの結果バス280で、クロックサイクルにつき5つまでの結果を受取ることができる。オペランドバスは、8つの41ビット共用整数/浮動小数点バスであることが注目される。8つのオペランドバスは、デコーダ205のROPディスパッチウィンドウ220内の4つのROPディスパッチ位置に対応する。4つのROPディスパッチ位置の各々は、ソースA読出オペランドおよびソースB読出オペランドを有することができる。このようにして形成された4つのAおよびB読出オペランドバスの対の各々は、ROPディスパッチウィンドウ220内の固定されたROPおよびソース読出ロケーションに与えられる。
【0068】
レジスタファイル255および再オーダバッファ285は、オペランド情報で読出オペランドバス275を駆動する、マイクロプロセッサ200内のデバイスである。もしデコードされたROPに対し理論的宛先が存在しなければ、すなわち、もしROPにより要求されるオペランドが再オーダバッファ内に存在しなければ、レジスタファイルがオペランドを提供する。しかしながら、もし理論的宛先が存在すれば、すなわちもしデコードされたROPにより要求されるオペランドが再オーダバッファ内に存在すれば、そのオペランドに対する再オーダバッファ内の最新のエントリが、レジスタファイル内の対応するレジスタの代わりに機能ユニットに送られる。この再オーダバッファ結果の値は、もし機能ユニット内で今なお完了されつつある理論的な宛先に対して再オーダバッファまたは再オーダバッファタグ内に存在すれば、理論的結果である可能性がある。
【0069】
5つの結果バス280は、この特定の実施例において32ビット幅である特別結果バスを除いて、41ビットバスである。読出オペランドおよび結果バスは、それぞれ、すべての整数機能ユニットへの入力および出力であることがまた注目される。これらの同じ読出オペランドおよび結果バスはまた、それぞれ、浮動小数点機能ユニット265の浮動小数点リザベーションステーション265Rへの、入力および出力である。浮動小数点リザベーションステーション265Rは、41ビットオペランドおよび結果バスを、82ビット拡張精度バスに変換し、必要時にはそれを構成する専用機能ユニットへと送る。
【0070】
マイクロプロセッサ200の整数および浮動小数点機能ユニットには、これらユニットのリザベーションステーションを介してROPのローカルバッファが与えられている。これら機能ユニットのほとんどにおいて、このローカルバッファは、FIFOとして編成される2エントリのリザベーションステーションの形式をとる。このようなリザベーションステーションの目的は、デコーダ205のディスパッチ論理が理論的ROPを、このような理論的ROPのソースオペランドが現在利用であるかどうかにかかわらず、機能ユニットに送ることを許可することである。したがって、この発明のこの実施例において、多数の理論的ROP(16まで)を、長い計算またはロードが完了するのを待たずに発令できる。この態様で、さらに多くの命令レベルの並列性が示され、マイクロプロセッサ200は、そのピーク性能により近づいて動作することができる。
【0071】
リザベーションステーションの各エントリは、2つのソースオペランドまたはタグ、プラス各エントリに関連する宛先およびオペレーションコードに関しての情報を保持できる。機能ユニットはまた、再オーダバッファが懸案であると示したソースオペランドの結果(それらのオペランドに対し再オーダバッファがオペランドそのものを与えるよりもその代わりにオペランドタグを与えることにより示したもの)を、そのような結果を待っているその他の機能ユニットに直接送ることができる。この発明のこの特定の実施例において、機能ユニットにおけるリザベーションステーションは典型的に、クロックサイクルにつき1つの新しいエントリを受け取る。機能ユニットはクロックサイクルにつき1つの新しいエントリを機能ユニットに送ることができる。
【0072】
これに対する例外は、ロード/記憶セクション260であり、クロックサイクルにつき、そのリザベーションステーションからの2つのエントリの受け取りおよび完了ができる。ロード/記憶セクション260はまた、4つのエントリのさらに大きなリザベーションステーションFIFOを有する。例外が発生すると、1つのクロックサイクル内にすべてのリザベーションステーションのエントリの割当が解除される可能性がある。もし分岐予測誤りが発生すれば、中間結果は、機能ユニット内で完了することができ、再オーダバッファから割当を解除されることができる。
【0073】
マイクロプロセッサ200は、先取りユニット230を介して命令キャッシュ210に、およびバスインタフェースユニット300に結合された内部アドレス/データバス295を含む。バスインタフェース300は、メインメモリまたは外部メモリ302に結合され、そのためマイクロプロセッサ200は外部メモリアクセスを与えられている。IADバス295はまた、図3および図4に示されるとおり、ロード/記憶機能ユニット260に結合される。
【0074】
この発明の1つの特定的な実施例において、ロード/記憶ユニット260に結合されたデータキャッシュ270は、8Kバイトの、線形的にアドレス指定された、フォーウェイ・セット・アソシアティブの、デュアルアクセスキャッシュである。アドレスおよびデータラインは、図示のとおり、データキャッシュ270をロード/記憶機能ユニット260に結合する。より特定的には、データキャッシュ270は、キャッシュ270とロード/記憶ユニット260との間に2セットのアドレスおよびデータ経路を含み、ロード/記憶機能ユニット260からの2つの同時アクセスを可能にする。これらの2つのアクセスは、16バイトデータキャッシュラインサイズに整列する、8と32ビットとの間のロードまたは記憶アクセスであり得る。データキャッシュ270は、16バイトラインまたはブロックに組織される。この特定的な実施例においてデータキャッシュ270は線形的にアドレス指定、またはセグメントベースのアドレスからアクセスされるが、ページテーブルをベースにした物理アドレスではない。データキャッシュ270は4つのバンクを含み、データキャッシュにおける1つのラインがその4つのバンクの各々において4バイトを有するように組織される。したがって、2つのアクセスのビット[3:2]の線形的なアドレスが同一でない限り、2つのアクセスは同時にキャッシュ270内のデータアレイにアクセスできる。
【0075】
データキャッシュ270は、この特定的な実施例においてフォーウェイ・セット・アソシアティブである。これは、クロックの位相PH1において2つの線形的なアドレスをとり、その4つのバンクにアクセスする。結果発生するロード動作は、それに続くクロック位相PH2で完了し、結果バスの1つを駆動できる。機能ユニットによる結果バスに対する要求は、結果のライトバックを望むその他の機能ユニットからの要求と、仲裁されて決定される。
命令キャッシュ210およびデータキャッシュ270は、これらキャッシュに記憶された命令およびデータエントリのアドレスに対応する、それぞれの命令キャッシュ線形タグアレイおよびデータキャッシュ線形タグアレイを含む。図3および図4に示されるように、マイクロプロセッサ200はまた、命令キャッシュ210およびデータキャッシュ270における命令およびデータの物理アドレスをそれぞれトラッキングするために、IADバス295に結合された物理タグI/Dブロック310を含む。より特定的には、物理タグI/Dブロック310は、これらキャッシュの物理アドレスを保持する物理命令/データタグアレイを含む。ブロック310の物理命令タグアレイは、命令キャッシュ210の対応する線形命令タグアレイに対しその編成を反映する。同様に、ブロック310内の物理データタグアレイの編成は、命令キャッシュ210内の対応する線形データタグアレイの編成を反映する。
【0076】
物理I/Dタグは、命令キャッシュまたはデータキャッシュタグであるか次第で、有効、共用、および修正ビットを有する。もしデータキャッシュ物理タグが、スヌープ(snoop)サイクルの間に修正されたビットのセットを有すれば、要求されるデータ素子は、線形データキャッシュ内の等価のロケーションにあることを示す。マイクロプロセッサ200はしたがって、外部メモリへのコピーバックサイクルを開始し、要求するデバイスが次に見ることができるメモリへ要求された修正ブロックをライトバックするだろう。
【0077】
メモリ管理ユニット(MMU)315内の変換ルックアサイドバッファTLB317は、図示のとおり、IADバス295と物理タグI/Dブロック310との間に結合される。TLB317は、128の線形から物理ページへの変換アドレスおよび128までの4Kバイトページに対するページライトを記憶する。この変換ルックアサイドバッファアレイは、ランダムな置換えを伴う、フォーウェイ・セット・アソシアティブ構造として組織される。TLB315は、X86アーキテクチャに対して規定された、線形から物理アドレスへの変換メカニズムを扱う。このメカニズムは、最新の線形から物理アドレスへの変換のキャッシュを用いて、有効変換に対し外部ページテーブルを探索することを防止する。
【0078】
バスインタフェースユニット300は、IADバス295からメモリといった外部装置へのインタフェースとなる。IADバス295は、マイクロプロセッサ200の異なる構成部品の接続のために用いられる、グローバル64ビット共用アドレス/データ/制御バスである。IADバス295は、キャッシュブロックレフィルのために採用され、修正されたブロックを書出し、またデータおよび制御情報を、特別レジスタユニット250、ロード/記憶機能ユニット260、データキャッシュ270、命令キャッシュ210、物理I/Dタグブロック310および変換ルックアサイドバッファ315、ならびにバスインタフェースユニット300といった機能ユニットに送る。
【0079】
III.スーパースカラマイクロプロセッサ−詳細な動作
CISCプログラムが実行されるとき、CISCプログラムの命令およびデータは、これら命令およびデータを記憶した記憶媒体からメインメモリ302にロードされる。プログラムが一旦、バスインタフェースユニット300に結合されたメインメモリ302にロードされれば、発送および機能ユニットによる処理のために、プログラムの順序でデコーダ205に取出される。より特定的には、デコーダ205により一度に4つまでの命令がデコードされる。命令は、メインメモリ302から、IADバス295を通り、先取りユニット230を通して命令キャッシュ210へ、次にデコーダ205に流れる。命令キャッシュ210は、デコーダ205によりデコードされて実行のために発送される命令の置場の働きをする。命令キャッシュ210は、分岐予測ユニット225と関連して動作し、デコーダ205に、理論的に実行される命令の次の予測されたブロックである、16バイトまでのキューを与える。
【0080】
より特定的には、命令キャッシュ210は、バスインタフェースユニット300を介してメインメモリから取出された命令のブロックを含む、ICSTOREと指定された記憶アレイを含む。ICACHE210は、16バイトのラインまたはブロックに編成される、16Kバイトの有効で線形的にアドレス指定された命令キャッシュである。各キャッシュラインまたはブロックは、16 × 86バイトを含む。各ラインまたはブロックはまた、各バイトに対し5ビットのプレデコード状態を含む。ICACHE210は、次の予測されたX86命令バイトを命令デコーダ205に取出す責任がある。
【0081】
ICACHE210は、FETCHPC(FPC)213と指定された理論的なプログラムカウンタを保持する。この理論的なプログラムカウンタFETCHPCまたはFPCは、キャッシュ情報を保持する以下の3つの別々のランダムアクセスメモリ(RAM)アレイにアクセスするために用いられる。より詳細には、キャッシュ情報を含む上記の3つのRAMアレイとは、1)ICTAGVであり、これは記憶アレイICSTOREにおける対応するブロックに対する線形タグおよびバイト有効ビットを保持するアレイである。キャッシュ内の各エントリは、16バイト有効ビットおよび20ビット線形タグを含む。この特定的な実施例において、256のタグが採用される。上記RAMアレイとは次に、2)アレイCINXTBLKであり、記憶アレイICSTOREにおける対応するブロックに対し分岐予測情報を保持する。CINXTBLKアレイは、256エントリの4セットに編成される。この次のブロックアレイにおける各エントリは、シーケンシャルなビット、最後に予測されたバイト、およびサクセサインデックスからなる。上記RAMアレイはまた、3)ICSTOREアレイであり、このアレイは、X86命令バイトプラス5ビットのプレデコード状態を含む。プレデコード状態はすべてのバイトと関連し、特定のバイトがマップされるであろうROPの数を示す。このプレデコード情報は、先取りブロック230のプレデコードセクションにより提供され、一旦デコーダ205に与えられれば命令のデコードの速度を高める。より特定的には、プレデコード状態は5ビットを含み、そのうち2つのサイズビットは命令がマップするROPの数を示し、1つの開始ビットは命令の第1のバイトを示し、1つの終了ビットは命令の終了を示し、1つのオペレーションコードビットは命令のオペレーションコードバイトを示す。バイトキューまたはICBYTEQ215は、先取りユニット230によりICACHE210に与えられる命令先取りの流れの現在の理論的な状態を提供する。ICACHE210として採用され得る命令キャッシュに関するさらなる情報は、1993年10月29日に出願された、「可変バイト長命令に特に適した理論的命令キューおよび方法(Speculative Instruction Queue And Method Therefor Particularly Suitable For Variable Byte-Length Instructions )」と題される、出願番号第08/145,902号の同時係属中の特許において与えられ、その開示はこの明細書中に引用により援用され、本出願の譲渡人に譲渡される。
【0082】
デコーダ205(IDECODE)は、マイクロプロセッサ200において命令デコードおよびディスパッチ動作を実行する。より特定的には、デコーダ205は、デコード1およびデコード2と称される、マイクロプロセッサパイプラインの2つの段を実行する。デコード1の開始時に、先取りされ実行が予測されたバイトは、指定された満たし位置のバイトキューに駆動される。これらのバイトは次に、バイトキュー215の独立するバイトと併合される。デコード2パイプライン段において、再オーダバッファエントリは、次のクロック位相において発送し得る対応するROPに対して割当てられる。
【0083】
デコーダ205は、バイトキュー215からの行X86命令バイトおよびプレデコード情報をとり、それらをROPディスパッチユニット220内の4つのROP位置に割当てる。デコーダ205は、各ROPが転送されるべき特定の機能ユニットを決定する。デコーダ205として採用されてもよい1つのデコーダのより詳細な説明は、1993年10月29日に出願された、ディビッド B.ウィット(David B. Witt )およびマイケル D.ゴッダード(Michael D. Goddard)による、「スーパースカラ命令デコーダ(Superscalar Instruction Decoder )」と題された、米国特許出願第08/146,383号に示され、その開示はこの明細書中に引用により援用される。ICACHEおよびデコーダ回路により、マイクロプロセッサ200がクロックサイクルにつき4つのROPをRISCのようなデータ経路にデコードおよび駆動することができる。4つのROPは、結果を再オーダバッファ285に送り返す機能ユニットへ、およびこれらの結果を要求するその他の機能ユニットへとディスパッチされる。
【0084】
図5を参照すれば、レジスタファイル255、再オーダバッファ285およびマイクロプロセッサ200の整数部分についてのより詳細な説明が与えられる。レジスタファイル255と再オーダバッファ285とはともに動作して、プログラムの流れにおける命令へ理論的な実行をもたらす。マイクロプロセッサ200の整数コアは、整数コア320として指定され、分岐機能ユニット835、ALU0、ALU1、および特別レジスタ860を含む。
【0085】
この特定的な実施例において、レジスタファイル255は、8つの32ビットレジスタ(整数レジスタ)、16の41ビットレジスタ(浮動小数点レジスタ)、16の41ビット浮動小数点1時レジスタ、および整数または浮動小数点の演算の両方に対して用いられ得る16の41ビット1時レジスタとして編成される。これらのレジスタは、デコーダ205から4つまでのROPに対し並列にアクセスされる。デコーダ205により与えられる読出ポインタ(READ AおよびREAD B)は、どの特定的なレジスタまたは複数のレジスタが、特定のROPにおけるオペランドの値として要求されているか、およびアクセスのサイズを決定する。
【0086】
レジスタファイル255はマイクロプロセッサ200のアーキテクチャ的な状態を含むのに対し、再オーダバッファ285はマイクロプロセッサ200の理論的な状態を含む。レジスタファイル255のタイミングは、デコード2のパイプライン段の位相PH2において8つまでの並列読出ポインタでアクセスされるようにとられる。これらの8つまでの読出ポインタの受取に応答し、レジスタファイル255は次にこのようにして選択されたオペランドの値を、続くクロックのPH1位相における対応するオペランドバスへと駆動する。
【0087】
再オーダバッファ285をレジスタファイル255に結合するディスエーブルバス287が、図5に示される。ディスエーブルバスは、8×3または24ライン幅であり、要求された読出の値は再オーダバッファ内に理論的エントリとして発見されたことをレジスタファイル255に示す8つのオーバライド信号を含む。この場合、レジスタファイル255はオーバライドを受け、要求された読出オペランドの値をオペランドバスに与えることができない。むしろ、理論的エントリが再オーダバッファ285内に存在するため、再オーダバッファ285はしたがって、要求された実際のオペランドの値またはその値に対するオペランドタグのいずれかを与える。
【0088】
再オーダバッファ285は、この特定的な実施例において16のエントリを含み、理論的ROP結果の値のキューとして動作する。図6により詳細に示されるように、再オーダバッファ285は、キューの先頭および末尾に対応する2つのポインタ、すなわち先頭ポインタおよび末尾ポインタを含む。これらのポインタの増分により、キューの割当のディスパッチされたROPへのシフトが発生する。
【0089】
再オーダバッファ285に与えられる入力は、デコーダ205がそこに割当てようと試みるROPの数(ブロックにつき4つのROPまで)、これら4つのROPに対するソースオペランドポインタの値(READ A、READ B)、およびそれぞれの宛先ポインタの値を含む。再オーダバッファ285は次に、その現在の理論的キューからこれらのエントリを割当てようと試みる。ディスパッチされたROPに対しエントリスペースが利用可能であるとすれば、エントリは末尾ポインタに割当てられる。
【0090】
より特定的には、エントリがデコーダ205により要求されるとき、キューの末尾からの次のエントリが割当てられる。特定のエントリの数がしたがって、デコーダ205からのその特定のROPに対する宛先タグになる。宛先タグは、対応するROP位置で、実行される特定の命令とともに機能ユニットに駆動される。「4つのROP宛先タグ」と指定された専用宛先タグは、再オーダバッファ285から整数コア320の機能ユニットへおよびマイクロプロセッサ200の残余の機能ユニットへの出力として、図5に示される。機能ユニットはこうして、実行される各ROPに対する宛先情報が与えられ、そのため機能ユニットは、ROPの結果が結果バスを介してどこに転送されるかを効果的に知る。
【0091】
上記より、理論的に実行される結果の値またはオペランドが、そのような結果オペランドが最早理論的でなくなるまで再オーダバッファ285に一時的に記憶されることがわかる。潜在的なオペランドの値のプールがしたがって、デコーダ205に与えられデコードされる次のROPが使用するために、再オーダバッファ285により与えられる。
【0092】
再オーダバッファ285にエントリが存在するとき、元のレジスタ番号(すなわちEAX)が、特定のROP結果に対し割当てられた、再オーダバッファエントリに保持される。図6は、末尾と先頭ポインタとの間での理論的状態であるエントリを、それらのエントリ内に垂直の点線で示す。各再オーダバッファエントリは、その元の宛先レジスタ番号に戻って参照される。ROPディスパッチユニット220の4つのROP位置からの8つの読出ポインタのいずれかが、エントリに関連する元のレジスタ番号に整合するとき、そのエントリの結果データは、もし有効であれば送られ、またはもしそのエントリに関連する動作がなお機能ユニットにおいて懸案中であればタグが送られる。
【0093】
再オーダバッファ285は、デコーダ205によりディスパッチされる新しいROPの正確な理論的状態を、これらROPをプログラムの順序で割当てることにより、維持する。4つのROPは次に、その現在の位置から再オーダバッファのキューの先頭位置へと、その読出オペランドのいずれかの整合を求めて、スキャンする。もし特定の再オーダバッファエントリにおいて整合が発生すれば、レジスタファイル255内の対応する読出ポートは、ディスエーブルとされ、実際の結果オペランドまたはオペランドタグのいずれかが、適切な機能ユニットによる受取りのためにオペランドバスに提示される。この配置により、動作に影響させずに、再オーダバッファ内に現われる同じレジスタの複数の更新が可能となる。結果の発送がこうして達成される。
【0094】
図6に示されるとおり、再オーダバッファ285は、再オーダバッファのキューまたはアレイ405に記憶された結果オペランドの引退を制御する引退論理325を含む。キュー405に記憶された結果オペランドが最早理論的でないとき、そのような結果オペランドは引退論理制御の下でレジスタファイル255に転送される。これを生じさせるために、ROPの引退をインタフェースする引退論理、レジスタファイルへのライトバッグ、および最後の4つのROPエントリの状態がスキャンされる。引退論理325は、割当てられたROPエントリのうちのいくつが今有効結果を有するかを決定する。さらに、引退論理は、生じた分岐、記憶およびロードミスに対するスキャンを行なう。もし最後の4つのROP内に完了した(有効化された)ROPが存在すれば、そのようなROPはレジスタファイルに引退する。しかしながら、もしROPエントリのスキャンの間、特定のROPで例外が発生したことを示す状態が発見されれば、それに続くすべてのROPは無効化され、ROPエントリ内に記憶された例外状態情報を用いてトラップベクトル取出し要求が形成される。
【0095】
分岐機能ユニット235により決定されたものとして分岐予測誤りが発生するとき、予測誤りされた分岐に関する再オーダバッファエントリは、キャンセルビットで示されてそのようなエントリが今無効であることを表わす。さらに、もしこれらキャンセルビットの1つが、再オーダバッファ285内のROPのスキャンの間に現われれば、これらROPエントリは、予測誤りされた経路にあると示されなかった第1のROPが発生するまで、EIPレジスタのいかなるライトバックまたは更新なしに無効化される。
【0096】
引退論理325内に含まれるEIPレジスタ(図6参照)は、非理論的であるそれら実行された命令から、理論の下に実行されてきた命令を分離する、実行中のプログラムにおける回転する分界点を示すプログラムカウンタまたは引退PCを保持することが注目される。EIPまたは引退PCは、再オーダバッファ285からレジスタファイル255への結果オペランドの引退の際に絶えまなく更新され、このようにして引退した命令は最早理論的でないことを反映する。再オーダバッファ285は理論的状態を容易にトラックし、クロックサイクルにつき複数のX86命令またはROPを引退させることができることに注意されたい。マイクロプロセッサ200は、例外条件または分岐予測誤りが生じた際に、すばやく無効にし訂正された命令の流れの取出しを開始できる。
【0097】
予測誤りされた分岐の場合、予測誤りされた分岐から結果として発生するROP結果は、再オーダバッファ285内にキャンセルビットで表示される。引退論理325が、再オーダバッファ285内のキャンセルビットのセットを伴うROP結果に出会うとき、引退論理はそのようなROP結果を更新して、それらをレジスタファイル255に引退させず、むしろそのような結果は割当を外されて新しいROPに対し利用可能とされる。
【0098】
マイクロプロセッサ200の機能ユニットの包括的な編成は、例示のために示された図7および図8における一般化された機能ユニットブロック図を参照して説明される。オペレーションコード、Aオペランド、Bオペランド、および宛先タグを含むROPは、図7および図8の一般化された機能ユニットにディスパッチされていることが再考されねばならない。図7の最も左の部分において、4つのAオペランドバスが、そこにディスパッチされた命令から特定のAオペランドを選択する(1:4)Aオペランドマルチプレクサ332に与えられているのがわかる。同様の態様で、4つのBオペランドバスが、図12の機能ユニットが実行する主題命令に対する特定のBオペランドを選択する、(1:4)Bオペランドマルチプレクサ335に結合されている。4つの宛先/オペレーションコードバスが、この機能ユニットにより実行されている特定の命令に対するオペレーションコードおよび宛先タグを選択するマルチプレクサ340に結合される。
【0099】
この機能ユニットは、マルチプレクサ340への「第1のFUNCタイプ発見」入力で、タイプバスをモニタする。より特定的には、機能ユニットは、機能ユニットのタイプに整合する第1のROPを探し、次に1:4マルチプレクサ332、335、および340を可能化し、対応するオペランドおよびタグ情報を、図7および図8の機能ユニットのリザベーションステーション1に駆動する。たとえば、実行ユニット345が算術論理ユニット1(ALU1)であり、マルチプレクサ340のTYPE入力で機能ユニットに提示されている命令のタイプがADD命令であると仮定すれば、宛先タグ、オペレーションコード、ディスパッチされた命令のAオペランドおよびBオペランドは、選択マルチプレクサ332、335、および340を介して、リザベーションステーションに駆動される。
【0100】
第2のリザベーションステーション、すなわちリザベーションステーション0が、リザベーションステーション1と実行ユニット345との間に示される。図7および図8の機能ユニットはしたがって、2つのリザベーションステーション、またはその代わりとして、2つのエントリを保持できる1つのリザベーションステーションということができる。この2エントリリザベーションステーションは、最も古いエントリを保留0として示してFIFOとして実現される。リザベーションステーション0および1は、レジスタファイル255または再オーダバッファ285のいずれかから、オペランドバスで何が機能ユニットに送られたか次第で、オペランドまたはオペランドタグのいずれかを保持できる。
【0101】
結果を4つの汎用結果バスに与えるその他の機能ユニットからの結果の結果発送を達成するため、機能ユニットは、A発送論理350とB発送論理355とを含む。5つの結果バスのうち、結果発送は4つの汎用結果バスに与えられることに注意されたい。A発送論理350は、ソースAオペランドに整合するタグを求めて4つの汎用結果バスをスキャンし、整合が発生すれば、A発送論理350は、対応する結果バスをリザベーションステーション1のデータ部分360へと辿る。ここで、実際のAオペランドの代わりとしてマルチプレクサ332を介しAオペランドタグが与えられるとき、Aオペランドタグは、Aタグ365と指定されたロケーションで記憶されることが注意されねばならない。整合のために4つの汎用結果バスでスキャンされた結果タグと比較されるのは、Aタグ位置365内に記憶されたこのAオペランドタグである。同様の態様で、B発送論理355は、Bオペランドタグ位置370内に記憶されたBオペランドタグに整合するいずれかの結果タグを求めて4つの汎用結果バスをスキャンする。整合が発見されれば、対応する結果オペランドは結果バスから引き出され、Bデータロケーション375に記憶される。機能ユニットにより実行されているROPの宛先タグおよびオペレーションコードは、タグおよびオペレーションコードロケーション380に記憶される。
【0102】
ROP命令の実行のために必要なすべての情報が機能ユニットに集められたとき、ROP命令は次に、実行のため実行ユニット345に発令される。より特定的には、AオペランドおよびBオペランドが、リザベーションステーションにより実行ユニット345に与えられる。その命令に対するオペレーションコードおよび宛先タグは、タグおよびオペレーションコードロケーション380により実行ユニット345に与えられる。実行ユニットは、命令を実行し結果を発生する。この実行ユニットは次に、アービトレータ(図示せず)に結果要求信号を送ることにより、結果バスへのアクセスを仲裁する。実行ユニット345に結果バスへのアクセスが与えられるとき、結果授与信号が、アービトレータから実行ユニット345により受取られる。実行ユニット345は次に、指定された結果バスに結果を与える。
【0103】
結果は、この結果と同じタグを有する懸案中のオペランドを伴うその他の機能ユニットに発送される。結果はまた、実行されたROPの宛先タグに関連するエントリで記憶するために再オーダバッファ285に与えられる。
【0104】
実行において、機能ユニットは、命令が実行されている間に結果バスに対する仲裁を行なう。より特定的には、機能ユニットに有効エントリが現われれば、すなわち実行に必要なすべてのオペランド、オペレーションコードおよび宛先タグ情報が集められるとき、命令が実行ユニット345に発令され、実行ユニット345は実際に命令を実行している一方で、機能ユニットは結果バスに対する仲裁を行なう。各リザベーションステーションはローカルオペレーションコードに対しおよび宛先タグに対し記憶を含むことに注意されたい。このタグは、完了パイプライン段の間ROPが最終的にライトバックするであろうロケーションを示す。
【0105】
図7および図8に関し、一般化された機能ユニットブロック図が説明されてきたが、実行ユニット345は、その特定的な機能に対して適切な修正が施された、分岐機能ユニット235、ALU0/シフタ240、ALU1 245、ロード/記憶260、浮動小数点ユニット265および特別レジスタ250のいずれであってもよい。
【0106】
特定の機能ユニットへの結果バスの授与が成功した際、結果の値は結果バスへと駆動され、リザベーションステーション内の対応するエントリはクリアされる。結果バスは、41ビットの結果、宛先タグ、ならびに通常、有効および例外といった状態表示情報を含む。マイクロプロセッサ200のパイプライン化された動作において、上記の機能ユニットのアクティビティのタイミングは、実行段において発生する。クロック位相Ph1の間、オペランド、宛先タグおよびオペレーションコードは、ROPがディスパッチされリザベーションステーションに与えられるときに駆動される。Ph2クロック位相の間、もしすべてのオペランドが準備されていれば、オペレーションコードにより示された動作が実行され、実行の間機能ユニットは結果バスに対する仲裁を行ない、値を再オーダバッファへ駆動する。
【0107】
図9は、分岐ROPを扱う分岐機能ユニット235のより詳細な表現である。分岐ユニット235は、リザベーションステーション235R、およびとられたことが予測された分岐をトラッキングするための分岐FIFO380を含む。分岐機能ユニット235はまた、すべてPC関係の分岐を扱うための、加算器385、増分器390、および分岐予測比較器395を含む。
【0108】
分岐機能ユニット235は、図9に示される分岐予測されたFIFO380を用いて、理論的分岐を制御する。より特定的には、分岐予測ブロック225と関連づけて命令キャッシュ210により予測されたすべてのシーケンシャルでない取出しは、分岐予測FIFO380に駆動され、その分岐のPC(プログラムカウンタ)とともにラッチされる。分岐FIFO380は、懸案中の分岐に対して予測された目的アドレスを含む。この情報は、目的バス(XTARGET)および分岐機能ユニットへのデコードPCバスへと駆動される。後に対応する分岐がデコードされ発令されたとき、実際の結果および目的アドレスは、分岐機能ユニット235によりローカルに計算される。もし整合が発生すれば、結果は、目的PCおよび整合を示す状態とともに正確に再オーダバッファ285に送り返される。もし分岐予測誤りが発生すれば、正しい目的は、取出しを開始する命令キャッシュ210、および予測を誤った分岐に含まれる次に続くROPをキャンセルする再オーダバッファ285の両方に駆動される。この態様で、正しい目的PCで実行が再開され、実行プロセスの崩壊はこのようにして防止される。誤り予測が発生するときはいつでも、分岐機能ユニット235は、新しい目的アドレスおよびインデックスの両方を、予測情報がこのアレイを更新することになっていたブロックへ送る。これは、マイクロプロセッサは、命令の新規の正しい流れの取出しを開始する一方、同時に予測アレイ情報の更新を行なうことを意味する。マイクロプロセッサはまた、新しいブロックを伴う予測情報にアクセスし、予測されたどのバイトが実行されるかを知る。ICNXTBLKアレイ(図3および図4においてICACHE210内に示される)は、デュアルポートであるため、予測情報はその第2のポートを通して更新できる。予測誤りが発生するブロックからの予測情報は、シーケンシャル/非シーケンシャル、分岐位置、およびキャッシュアレイ内で実行が予測された第1のバイトの位置といった情報である。
【0109】
加算器385および増分器390は、現在のPCプラス現在の分岐命令のオフセット、およびもしシーケンシャルであればPCプラス次のPCに対する命令長さを、ローカルに計算する。これらの値は、比較器395により、そのような分岐を予測するためのローカル分岐発生キュー(FIFO380)内の発生が予測された分岐に対して比較される。
【0110】
マイクロプロセッサ200の主要内部バスは、パイプライン段においてのマイクロプロセッサ200の動作を示すタイミング図について論じるための前置きとしてここで要約される。バスラインの先頭に示されるXは、1つの位相において動的にプリチャージされ、その他の位相において条件付きでアサートされた偽バスを示すことに注意されたい。マイクロプロセッサ200内部バスは以下を含む。
【0111】
FPC(31:0)−Ph1、静的。この取出しPCバスは、命令キャッシュ210からバイトキュー215への理論的な命令先取りに対して用いられる。このFPCバスは、ICACHE210内のFPCブロック213に結合される。
【0112】
XTARGET(31:0)−Ph1、動的。このバスは、予測誤りされた分岐および例外の再度方向付けのために、命令キャッシュ210および分岐予測ユニット(225/235)へ目的PCを伝える。
【0113】
XICBYTEnB(12:0)−Ph1、動的。このバスは、現在要求される先取りされたX86命令プラス対応するプレデコード情報の命令キャッシュ記憶アレイICSTOREの出力である。この特定の実施例において、次の実行が予測されたバイトが、バイトキューにおける第1のオープンバイト位置を満たすように整列した、合計16バイトをクロックサイクルにつきアサートできる。
【0114】
BYTEQn(7:0)−Ph1、静的。これは、命令キャッシュから先取りされた、実行が予測されたX86命令バイトのキューを表わす。この特定の実施例において、合計16バイトがデコーダ205のデコード経路に提示される。各バイトは、命令開始および終了位置のロケーション、プレフィックスバイト、およびオペレーションコードロケーションに関する、命令キャッシュからのプレデコード情報を含む。各X86命令のROPサイズはまた、プレデコード情報の中に含まれる。各バイトに加算されるプレデコード情報は、バイトにつきバイトキューにおいて合計6ビットの記憶を表わし、すなわちそれは1つの有効ビットプラス5つのプレデコードビットである。
【0115】
IAD(63、0)−Ph1、動的。IADバス295は、主要マイクロプロセッサ200ブロックに対する、一般的な相互接続バスである。これは、そのようなブロック間ならびに外部メモリへおよび外部メモリからの、アドレス、データ、および制御転送のために用いられ、すべて図3および図4のブロック図に示されている。
【0116】
XRDnAB(40:0)−Ph1、動的。この名称は、機能ユニットに与えられた各ROPに対するソースオペランドAバスを表わし、オペランドバス275内に含まれる。より特定的には、ROP0からROP3に対し、合計4つの41ビットバスを含む。オペランドバスに含まれる対応するタグバスは、再オーダバッファ285から発送されたタグが、再オーダバッファ285からの実際のオペランドデータの代わりにいつ現われたかを示す。
【0117】
XRDnBB(40:0)−Ph1、動的。この名称は、機能ユニットに送られた各ROPに対するソースオペランドBバスを示す。このバス構造は、ROP0からROP3に対し4つの41ビットバスを含み、8つの読出オペランドバス275に含まれる。対応するタグバスは、発送されたオペランドタグが再オーダバッファ285からの実際のオペランドデータの代わりにいつこのバスに現われたかを示すことが再び注目される。
【0118】
XRESnB(40:0)−Ph1、動的。この名称は、8、16、32ビット整数、または1/2の80ビット拡張結果に対する結果バス280を示す。対応する結果タグおよび状態バス282は、この結果バスでエントリを有効にすることが注意される。
【0119】
マイクロプロセッサ200は、取出し、デコード1、デコード2、実行、結果/ROBおよび引退/レジスタファイルの段を含む、6つの段のパイプラインを含む。明確にするため、デコード段は、図10においてデコード1とデコード2とに分割される。図10は、シーケンシャルな実行が行なわれているときのマイクロプロセッサのパイプラインを示す。連続するパイプライン段は、図10の垂直の列により表わされる。マイクロプロセッサ200において選択される信号は、パイプラインの様々な段において現われるものとして、水平の行に示されている。
【0120】
図10のシーケンシャルな実行パイプライン図は、以下の選択された信号を示す。
【0121】
「Ph1」は、システムクロック信号のリーディングエッジを示す。システムクロック信号は、Ph1およびPh2の構成要素の両方を含む。
【0122】
「FPC(31:0)」は、バイトキュー215からの取出しPCバスを表示する。
【0123】
「ICBYTEnB(15:0)」は、バイトキュー215に結合される命令キャッシュ210のICSTOREアレイからのICBYTEバスである。
【0124】
「BYTEQn(15:0)」は、バイトキューバスである。
「ROPmux」は、バイトQからのX86命令バイトをROPに変換する、デコーダ205内のブロックである。このブロックは、図10および図11においてROPmuxとして示されたときに動作する。ROPmuxブロック(図示せず)は、16バイトのX86命令バイトQを特定のディスパッチ位置における4つのROPにマップする責任がある。
【0125】
「SourceA/Bpointers」は、デコーダ205により再オーダバッファ285およびレジスタファイル255に与えられる、AおよびBオペランドに対する読出/書込ポインタ(READ A、READ B)である。ソースポインタは、デコードブロックからレジスタファイルおよび再オーダバッファ両方への入力である値である。
【0126】
「REGF/ROBaccess」は、機能ユニットへの転送のためのオペランドの値を獲得するための、レジスタファイルおよび再オーダバッファへのアクセスを示す。
【0127】
「Issue ROPs/dest tags」は、デコーダ205による機能ユニットへのROPおよび宛先タグの発令を示す。
【0128】
「A/B read oper buses」は、機能ユニットがAおよびBオペランドバスを読出し、したがってAおよびBオペランドまたはタグを得ることを示す。
【0129】
「Funct unit exec」は、機能ユニットによる実行を示す。図10および図11において、a&b→cおよびc&d→eおよびc&g→と示されたものは、任意の動作を表わし、「ソース1オペランド、ソース2オペランド→宛先」という形式である。より特定的には、指定されたソースレジスタは、レジスタ、すなわち一時的またはマップされたX86レジスタである。a&b→cの例において、「c」の値は、宛先を表わし、結果バスおよび再オーダバッファ両方からの、実行が予測された流れにおける次の参照へのローカルな発送を示す。
【0130】
「Result Bus arb」は、結果を、再オーダバッファへ、およびそのような結果に対応するオペランドタグを保持するためその結果が必要かもしれぬいかなるその他の機能ユニットへ転送する目的のために、機能ユニットが結果バスへのアクセスを仲裁する時間を示す。
【0131】
「Result Bus forward」は、結果が、機能ユニットから、懸案のオペランドとしてその結果が必要なその他の機能ユニットへ発送される時間を示す。
【0132】
「ROB write result」は、機能ユニットからの結果が再オーダバッファに書込まれる時間を示す。
【0133】
「ROB data forward」は、再オーダバッファが、オペランドデータをまだ結果を現在は有さないオペランドの代わりに機能ユニットへ発送する時間を示す。
【0134】
「REGF write/retire」は、結果が再オーダバッファのFIFOキューからレジスタファイルへ引退する時間を示す。
【0135】
「EIP(31:0)」は、引退PCの値を示す。この引退PCの値またはEIPは、再オーダバッファ285の引退論理325内に含まれる。
【0136】
図10のタイミング図は、X86バイトのシーケンシャルな流れを実行するマイクロプロセッサ200を示す。この例において、予測された実行の経路は、命令キャッシュから直接利用可能なだけでなく、実際に採用されるものである。
【0137】
命令の処理の第1段は、命令取出しである。図示のとおり、このクロックサイクルは、命令キャッシュアクティビティを行なって費やされる。命令キャッシュ210は、クロックサイクルのPh1の間に新しい取出しPC(FPC)を形成し、次にそのクロックサイクルの第2の位相において命令キャッシュのキャッシュアレイにアクセスする。取出しPCプログラムカウンタ(タイミング図においてFPC(31:0)として示される)は、記憶アレイと並列する線形の命令キャッシュのタグアレイにアクセスする。取出しのクロック位相Ph2の後半で、線形のタグが取出しPC線形アドレスと整合するかどうかについての決定が行なわれる。もし整合が発生すれば、実行が予測されたバイトは、バイトキュー215に発送される。
【0138】
命令キャッシュにおけるタグおよび記憶アレイへのアクセスに加え、取出しPCはまた、ブロック予測アレイ、ICNXTBLKにアクセスする。このブロック予測アレイが、X86バイトのどれが実行を予測されたか、および実行が予測される次のブロックがシーケンシャルまたは非シーケンシャルのいずれかであるかを識別する。Ph2においてまたアクセスされるこの情報は、現在取出されたブロックのどのバイトが、有効バイトとしてバイトキュー215に駆動されるかどうかを決定する。
【0139】
バイトキュー215は、以前に取出され機能ユニットへはまだディスパッチされていない、記憶されたX86バイトを現在有するかもしれない。この場合、バイトを満たす位置が命令キャッシュ210に示され、第1に予測されたバイトをシフトし、先のX86バイトの後ろに満たす。
【0140】
分岐予測情報は取出しのクロック位相Ph2において発生するため、先取りユニット230により先取りされる次のブロックは、いずれにせよキャッシュアレイに再びアクセスするクロックサイクルは1つであるため、シーケンシャルまたは非シーケンシャルとなる可能性があることに注意されたい。したがって、分岐予測アレイにより、ブロックを外れた分岐が可能となり、次のシーケンシャルなブロックにアクセスするのと同じ相対的な性能を有し、したがって性能を向上させることになる。
デコード1/デコード2パイプライン段が以下述べられる。デコード1の開始時に、先取りされ、実行が予測されたバイトが、指定された満たし位置でバイトキュー215に駆動される。これは、デコード1のPh1においてアサートしているICBYTEnB(12:0)として、図10のタイミング図に示される。これらのバイトは、バイトキューにおける何らかの懸案中のバイトに併合される。バイトキューは、5ビットのプレデコード状態プラス行X86バイトを含み、命令の境界がどこに位置するかを示す。バイトキューの先頭は、実行が予測された次のX86命令の開始にある。デコード1のクロック位相Ph1の最中に、命令キャッシュからのバイトの次の流れが、バイトキュー215における既存のバイトと併合され、併合された流れはスキャンのためデコーダ205に提示される。デコーダ205は、各命令がとるROPの数およびオペレーションコードの位置を決定し、これらオペレーションコードの、D0でのROPをディスパッチする次のROPとした、対応するROP発令ディスパッチ位置D0、D1、D2、およびD3へのアライメントを可能にする。デコーダ205は、バイトキュー215における各々のX86命令のプログラムカウンタPCのコピーを、命令の境界の間のバイトの数をカウントすることにより、または命令キャッシュ内の分岐を検出し目的PCの値をそのロケーションから取出された第1のX86バイトに与えることにより、維持する。
【0141】
オペレーションコードおよびROP位置決め情報、ならびにバイトキュー215に記憶されたイメディエイトフィールドを利用し、デコーダ205は静的に、デコード1のクロック位相Ph2およびデコード2のクロック位相Ph1の間に、以下の情報を決定する。1)機能ユニットの宛先、2)ソースA/Bおよび宛先オペランドポインタの値、3)ソースのサイズおよび宛先演算、および4)もしあればイメディエイトアドレスおよびデータの値。デコード2のクロック位相Ph1の終了までに、すべてのレジスタ読出および書込ポインタは解決され、動作は決定される。これは、図10のタイミング図において、ソースA/Bポインタの値のアサーションにより示されている。
【0142】
図10のタイミング図において示された、デコード2パイプライン段において、再オーダバッファエントリは、次のクロック位相で発令するかもしれぬ対応するROPに対し割当てられる。このようにして、4つまでのさらなるROPが、デコード2のPh1クロック位相の間に、16エントリ再オーダバッファ285内にエントリが割当てられる。デコード2のPh2クロック位相の間、すべての割当てられたROPに対するソース読出ポインタは、レジスタファイルから読出され、一方同時に再オーダバッファ内に含まれる理論的ROPのキューにアクセスする。レジスタファイルおよび再オーダバッファアレイ両方のこの同時のアクセスにより、実際のレジスタファイルの値を用いるか、または再オーダバッファからオペランドもしくはオペランドタグのいずれを発送するかについての選択が遅れることをマイクロプロセッサ200に許可する。Ph1において最初に4つのROPエントリを再オーダバッファに割当て、次にPh2において再オーダバッファのスキャンを行なうことにより、マイクロプロセッサ200は、現在のROPが、なおも理論的状態にある先行するROPと同様ディスパッチされている一方で、読出の従属性を同時に探すことができる。これは、図10のタイミング図において、REGF/ROBアクセスおよびタグの検査により示される。
【0143】
実行パイプライン段において、ROPは、専用オペレーションコードバスおよび読出オペランドバスにより、機能ユニットに発令される。専用オペレーションコードバスは、ROPのオペレーションコードを機能ユニットに連絡し、一方読出オペランドバスは、オペランドまたはオペランドタグをそのような機能ユニットに転送する。オペランドバスがオペランドを機能ユニットに連絡する時間は、A/B読出オペランドバスという名称で、図10のタイミング図に示される。
【0144】
実行パイプライン段のPh1クロック位相の後半部分で、機能ユニットはどのROPがそのような機能ユニットにディスパッチされたか、およびそのような機能ユニットにおいていずれかの懸案中のROPがローカルリザベーションステーションからの発令の準備ができているかどうかを決定する。FIFOが機能ユニットのリザベーションステーションにおいて保持され、リザベーションステーションに含まれた最も古い命令が第1に実行を行なうことを確実にすることが注目される。
【0145】
機能ユニット内でROPが実行準備完了状態であるとき、ROPはそのような実行を実行パイプライン段のPh1の遅い段階で開始し、その段のPh2を通して静的に続行する。Ph2の終了時に、機能ユニットは、仲裁の結果を検査し、結果授与信号(図示せず)と示された結果バスを与えられたかどうかを決定する。言い換えれば、結果バス仲裁信号はこの時間の間にアサートされる。もし機能ユニットが結果バスへのアクセスを与えられていれば、割当てられた結果バスを続くPh1で駆動する。
【0146】
図10のタイミング図において示される結果パイプライン段は、1つの機能ユニットから結果を必要としている別の機能ユニットへの結果の発送を表わす。結果パイプライン段のクロック位相Ph1において、理論的ROPのロケーションは、宛先結果および何らかの状態とともに再オーダバッファ内に書込まれる。再オーダバッファ内へのこのエントリは次に、有効である、および割当てられたという表示を与えられる。一旦割当てられたエントリがこのようにして有効化されると、再オーダバッファは、要求された読出アクセスを受取った際に、オペランドタグに対抗するものとしてオペランドデータを直接発送できる。結果パイプライン段のクロック位相Ph2において、新しく割当てられたオペランドデータは、それがソースオペランドの1つであることを要求する次のROPにより、検出されることができる。これは、図10のタイミング図において、「ROBdata forward」を介したソースA/Bオペランドバスへの結果Cの直接の発送として示されている。
【0147】
引退パイプライン段は、図10のタイミング図における最後のパイプラインの段である。この段では、実プログラムカウンタ(引退PC)がEIPレジスタの形式で、バス指定EIP(31:0)により示されるように、維持され、更新される。図10に示されるとおり、EIP(31:0)タイミング図は、新しいPC(または引退PC)が、再オーダバッファからレジスタファイルへの命令の引退に際して発生することを表わす。再オーダバッファからレジスタファイルへの結果の引退の実際の動作は、図10においてREGFwrite/retireと示された信号により、表わされている。図10よりわかるように、引退パイプライン段のクロック位相Ph1において、演算の結果はレジスタファイルに書込まれ、EIPレジスタは更新されてこの命令が現在実行されることを反映する。再オーダバッファにおける対応するエントリは、値が再オーダバッファからレジスタファイルへ書込まれるのと同じクロック位相Ph1で割当てを外される。再オーダバッファ内のこのエントリが今割当てを外されたため、レジスタCへの次の参照は、再オーダバッファからの理論的な読出の代わりに、レジスタファイルからの読出という結果になるだろう。この態様で、マイクロプロセッサのアーキテクチャ的状態が真に反映される。
【0148】
図11は、分岐予測誤りの間のプロセッサ200のタイミング図を示す。図11のタイミング図では、図10のタイミング図と同じ信号のタイプが示されるが、以下の例外を伴う。
【0149】
BRN_MISP信号は、いつ分岐予測誤りが発生したかを示す。
XTARGET(31:0)信号は、予測誤りの後マイクロプロセッサが現在取出を必要としている、再方向付けアドレスを示す。
【0150】
図11のタイミング図は、分岐予測誤りおよび回復の間のマイクロプロセッサ200のパイプライン段を示す。このタイミング図は、第1のサイクルは分岐の実行サイクルであり、それに続くサイクルは、予測を訂正し、新しい命令の流れを取出すことの中に含まれると仮定される。この特定の実施例において、誤り予測された分岐命令の実行の完了から、訂正された経路の実行の開始までに、3サイクルの遅延が生じることが注目される。
【0151】
図11に示されたパイプラインの取出し段は、図10に示された通常の取出し段と類似するが、例外としては、XTARGET(31:0)バスは、命令キャッシュ210に実際の目的に関する情報を与えるために、分岐機能ユニット235から命令キャッシュ210に駆動されることである。分岐機能ユニットは、分岐予測誤りが実際に発生したことを決定するマイクロプロセッサ200のブロックであることが注目される。分岐機能ユニットはまた、正しい目的を計算する。この目的は、結果バス280での予測誤りされた状態の表示とともに再オーダバッファに結果がリターンされるのと同時に送られる。結果バスはまた、もし実際の分岐が発生すれば分岐命令の引退の際にEIPレジスタを更新するための、正しいPCの値を含む。XTARGETバスはしたがって、取出しPCバスに駆動され、命令キャッシュアレイがアクセスされる。もしヒットが発生すれば、前述のようにバイトがバイトキューに駆動される。
【0152】
予測誤りが発生するとき、バイトキュー215におけるすべてのバイトは、信号BRN_MISPのアサーションとともに、取出しの第1の位相において自動的にクリアされる。訂正された経路が取出されデコードされるまで、デコーダ205からディスパッチされるさらなるROPはない。
【0153】
取出しパイプライン段のクロック位相Ph1において、予測誤りの結果状態が再オーダバッファにリターンされるとき、予測誤り状態の表示は、予測誤りの後すべての理論的ROPに送られ、そのためこれらはレジスタファイルまたはメモリに書込まれることができないだろう。これらの命令が次に引退するとき、再オーダバッファにおけるそのエントリは割当てを外され、さらなるROPの発令が可能となる。
【0154】
分岐予測誤りの間のデコード1パイプライン段に関し、訂正された経路をデコードするための残りの経路は、命令キャッシュ210のICNXTBLKアレイにおける予測情報の更新は例外として、シーケンシャルな取出しの場合と同一である。分岐の正しい方向は今、分岐が予測誤りされたキャッシュブロックへの予測アレイICNXTBLKへと書込まれる。
【0155】
予測誤りの間のパイプライン段デコード2、実行、結果、引退は、図10に示されたものと実質的に同様であろう。
【0156】
スーパースカラマイクロプロセッサの動作に関するより詳細な情報は、ディビッド B.ウィットおよびウィリアム M.ジョンソンによる、1993年10月29日に出願された、「高性能スーパースカラマイクロプロセッサ(High Performance Superscalar Microprocessor )」と題される、出願番号第08/146,382号の同時係属中の特許出願に示され、その開示は、この明細書中に引用により援用される。上記の特許出願は、本特許出願の譲渡人に譲渡される。
【0157】
IV.フラグオペランド再命名および発送
マイクロプロセッサ200は、図3および図4においてEFLAGSと示されたフラグレジスタ400を含む。EFLAGSレジスタ400は、図12において詳細に示される。EFLAGSレジスタ400は、32ビット幅で、そのうち1、3、5、15および19−31がリザーブされる。EFLAGSレジスタ内の規定されたビットおよびビットフィールドは、ある演算を制御し、マイクロプロセッサ200の状態を示す。EFLAGSレジスタの下位16ビット(ビット15−0)は、8086および80286コードの実行の際には最も有用である、16ビットレジスタネームFLAGSを含む。EFLAGSレジスタ400は、キャリフラグCF(ビット0)、パリティフラグPF(ビット2)、補助キャリフラグAF(ビット4)、ゼロフラグZF(ビット6)、符号フラグSF(ビット7)、トラップフラグTF(ビット8)、割込イネーブルフラグIF(ビット9)、方向フラグDF(ビット10)、オーバフローフラグOF(ビット11)、および再開フラグRF(ビット16)を含む。これらフラグのうち、6つの主状態フラグは、OF、SF、ZF、AF、PFおよびCFである。6つの主状態フラグは、ほとんどの整数演算の結果として更新され、分岐命令に対する条件を発生するのに用いられる。
【0158】
条件付き分岐命令はしばしば、Jcc、または条件付きジャンプコード「cc」の形式であり、ccはフラグまたは条件コードを表わす。たとえば、分岐命令JNZ 3A26は、もしゼロフラグ(ZF)が0の場合の予め定められたアドレス3A26へのジャンプを意味する。その他の条件付き分岐命令に関連する分岐決定は、たとえばOF、SF、AF、PFおよびCFといったその他のフラグの現在の値次第である。条件付き分岐命令の実行のためには、これらのフラグの値が利用可能でなければならない。これらフラグの値は、条件付き分岐命令に対するオペランドとして働く。これらのフラグはほとんどの整数演算により更新されて修正されることを考慮に入れれば、マイクロプロセッサの性能は、特定の分岐命令が、先行する命令の影響を受けたフラグが更新されて現在の分岐の実行が可能になるのを待たねばならぬときは、大きくマイナス影響を受ける可能性があることが認識されるだろう。
【0159】
この問題を解決するために、この発明の1つの実施例では、6つの状態ビットまたはEFLAGSレジスタ400のフラグOF、SF、ZF、AF、PFおよびCFを、分岐機能ユニット235のために個々の再命名可能な資源として扱う。再オーダバッファ285は、割当てられて機能ユニットからの結果の記憶可能な16のエントリ、またはディスパッチされまだ実行されていない命令に関連するまだ計算されていない結果に対応するタグを含む、再オーダバッファアレイ(ROBアレイ)405を含む。この発明に従えば、ROBアレイ405は、理論的に実行される命令に関連するフラグを記憶するためのフラグ記憶部分410(図6参照)を含む。言い換えれば、命令の結果にROBアレイ405の16のエントリの1つが割当てられるとき、関連する割当てがまた、そのような命令により修正されるフラグに対してフラグ記憶部分410内に行なわれる。
【0160】
図13は、ROBアレイ405およびそのフラグ記憶部分410をより詳細に示す。図13に示されるとおり、浮動小数点ROPがディスパッチされるとき、41ビットの浮動小数点エントリがROBアレイ405に割当てられる。たとえば、エントリ5といったエントリが、浮動小数点ROPに割当てられる。この浮動小数点ROPは、図13に示されるとおり、エントリ5の全41ビット幅を占める。このような浮動小数点命令に関連付けられるフラグはない。この態様で、ディスパッチされた浮動小数点ROPの41ビットの浮動小数点結果は、ROBアレイ405におけるエントリが割当てられる。(この特定の例において、エントリ5は、再オーダバッファの最も古いエントリを含む、再オーダバッファの先頭である。再オーダバッファの最も新しいエントリは、その末尾にある。)
しかしながら、ディスパッチされたROPが整数命令のとき、その整数ROPの32ビット整数結果は、ROPアレイ405における32ビットエントリが割当てられる。この32ビットの整数結果エントリ、たとえば図13におけるエントリ11は、図示のとおりROBアレイ405の下位ビット0−31を占める。ディスパッチされた整数ROPにより影響を受ける可能性のあるフラグ、すなわちROPのフラグ結果を形成するフラグOF、SF、ZF、AF、PFおよびCFは、図示のとおり、エントリ11に関連する上位ビット32−37が割当てられる。この態様で、エントリが広幅の浮動小数点エントリでないために未使用である整数ROPの上位ビットは、有利に用いられ、特定の整数結果に関連するフラグ更新を記憶する。
【0161】
整数ROP結果が第1にROB285内のエントリが割当てられるとき、再オーダバッファはタグの値に、この特定のROPによる影響を受ける特定のフラグの値を与える。デコーダ205が、フラグオペランドとしてそれらのフラグの値を要求する(要求されたフラグ)分岐命令といった次に続くROPをディスパッチするとき、ROBフラグ記憶部分410は、フラグタグバス417を介し、分岐機能ユニット235へ対応するフラグタグを送る。この場合、フラグタグは、実際のフラグの値(要求されたフラグ)が4つの汎用結果バスのうち1つの、ビット32:37に届くまで、分岐機能ユニット235のリザベーションステーション内に保持される。実際のフラグの値は、たとえばこれらのフラグの更新を引き起こすROPを実行するALU0またはALU1といった特定の整数機能ユニットにより、結果バスに与えられる。
【0162】
その代わりとして、もしROP命令がディスパッチされたときに要求されたフラグの値が既に決定されROBフラグ記憶部分410内に記憶されていれば、要求されたフラグの値そのものは、ROBフラグ記憶部分410からフラグオペランドバス415を通して分岐機能ユニット235に転送される。一旦特定の命令に関連するフラグの値が最早理論的でなくなれば、すなわち命令がROB285からレジスタファイル255に引退するとき、そのような引退した命令に対応するフラグは、同様にROBフラグ記憶部分410からEFLAGSレジスタ400に引退する。
【0163】
もし1つ以上のフラグオペランドを要求する分岐命令が、デコーダ205により分岐機能ユニット235にディスパッチされ、再オーダバッファのROBフラグ記憶部分410内に要求されたオペランドフラグに対応するフラグエントリまたはフラグタグがなければ、要求されたフラグオペランドはEFLAGSレジスタ400から引出され、上記と同じフラグオペランドバス415により分岐機能ユニット235に送られる。
【0164】
AオペランドおよびBオペランド/フラグ選択ブロック290は、このフラグ転送動作における援助を行なう。より特定的には、選択ブロック290はROB285を検査し、要求されたフラグオペランドまたはそれに対応するフラグタグのいずれかがROB285内に存在するかどうかを決定し、もし存在すれば、ブロック290によりこれらのフラグオペランドは、フラグオペランドバス415を介して分岐機能ユニット235に送られる。しかしながら、もし特定の分岐命令のフラグオペランドに対応するフラグオペランドまたはフラグタグがROB285に含まれないことが発見されれば、対応するフラグオペランドがEFLAGSレジスタ400から選択ブロック290により、分岐機能ユニット235への転送のためにフラグオペランドバス415に与えられる。
【0165】
フラグオペランドバス415は6ビット幅であり、したがって各主状態フラグビットOF、SF、ZF、AF、PFおよびCF専用のそれぞれのビットを含む。この態様で、要求されたフラグは、もし理論的であればROB285から、もし実際であればEFLAGSレジスタ400から、6ビットのフラグオペランドバス415を通して分岐ユニット235に転送されることができる。フラグオペランド記憶部分410はまた、理論的に実行された命令に関連するフラグを含み、EFLAGSレジスタ400は、関連する命令の引退の後のフラグの実状態を含む。
【0166】
この発明の1つの実施例において、EFLAGSレジスタ400の主状態ビットが、どの1つまたは複数のフラグが更新による影響を受けるかに従い、3つのセクションまたはサブグループに分割される。より特定的には、フラグ修正命令により潜在的に修正されるフラグの全グループ(OF、SF、ZF、AF、PFおよびCFビット)は、以下のようにサブグループに分けられる。
サブグループ1−OFビット
サブグループ2−SF、ZF、AFおよびPFビット
サブグループ3−CFビット
X86命令セットにおいて、状態フラグは上記の3つの独立するグループにおいて更新される。X86命令は、これら3つのフラググループの各々への更新に従って分類できる。言い換えれば、SF、AFおよびPFフラグビットを更新せずにまたはそれらに影響を与えずにZFフラグを更新するX86命令はないということである。この発明のこの実施例に従えば、マイクロプロセッサ200は、EFLAGSレジスタの再命名可能な部分を、フラグ記憶部分410内の3つのサブレジスタ、すなわちOFビットを含む第1のサブレジスタ、SF、ZF、AFおよびPFビットを含む第2のサブレジスタ、ならびにCFビットを含む第3のサブレジスタ、からなるものとしてみなす。
【0167】
デコーダ205が命令を様々な機能ユニットにディスパッチするとき、これら3つのサブレジスタは、ディスパッチされているROPにより修正された特定のフラグに従って更新される。フラグサブグループへの更新は、4つのディスパッチ位置D0、D1、D2およびD3の各々に対する3ビットのフラグ更新コードで、ROB285内にスケジュールされており、その3ビットコードの1つのビットは各フラグサブグループに与えられる。ROPにつき1つの3ビットフラグ更新コードが、デコーダ205により与えられ、6ビットEFLAGSレジスタ400のどの特定のフラグが更新されることになるかをROB285に示す。したがって、ディスパッチ位置D0、D1、D2およびD3に与えられた4つのROPのすべてに対し、デコーダ205とROB285との間のALLOCバス内に含まれるフラグ更新コードバスを通して、4つのそれぞれのフラグ更新コードが転送される。
【0168】
より詳細には、ALLOCバスは以下のように指定されることが注目される。
ディスパッチ位置0−ROBALLOC(3:0)
ビット3はレジスタライトバックを示し、ビット(2:0)はフラグ更新ビットである。
【0169】
ディスパッチ位置1−ROBALLOC(7:4)
ビット7はレジスタライトバックを示し、ビット(6:4)はフラグ更新ビットである。
【0170】
ディスパッチ位置2−ROBALLOC(11:8)
ビット11はレジスタライトバックを示し、ビット(10:8)はフラグ更新ビットである。
【0171】
ディスパッチ位置3−ROBALLOC(15:12)
ビット15はレジスタライトバックを示し、ビット(14:12)はフラグ更新ビットである。
【0172】
デコーダ205と再オーダバッファ285との間のSTATUSバスは以下のように指定される。
【0173】
ROBSTAT(3:0)は、バッファ285が、デコーダ205の4つのディスパッチ位置の各々においてROPの結果のための余地を有するかどうかを示す。
【0174】
5ビット幅のREAD FLAGバス419は、デコーダ205から、再オーダバッファ285およびEFLAGSレジスタ400に結合される。READ
FLAGバス419は、2ビットのREAD FLAG POSITIONバスを含み、それを通してデコーダ205は、4位置ディスパッチウィンドウ内の分岐ROPの位置を示す2ビットのコードを転送する。この特定の実施例において、ディスパッチウィンドウにつき1つの分岐ROPが許可される。READ FLAGバス419はまた、RDFLAGPTR(2:0)と指定された3ビットのREAD FLAG POINTERバス、すなわち主題分岐ROPに対し3つのフラグサブグループのうちのどれが入力オペランドとして要求されるかを示す3つのイネーブルビット(ホットビットとしても知られる)、を含む。より特定的には、READ FLAG POINTERバスのビット0は、ディスパッチウィンドウ内の分岐ROPがいつ入力オペランドとしてフラグサブグループ1を要求するかを示す。READ FLAG POINTERバスのビット1は、ディスパッチウィンドウにおける分岐ROPがいつフラグサブグループ2を入力オペランドとして要求するかを示す。最後に、READ FLAG POINTERバスのビット2は、ディスパッチウィンドウ内の分岐ROPがいつ入力オペランドとしてフラグサブグループ3を要求するかを示す。
【0175】
ディスパッチされたROPが機能ユニットにおいて実行するとき、生じたフラグ更新(すなわち結果フラグ)は、結果バス280のビット37:32でROB285にリターンされるが、これはこれらのビットはそうでなければ整数演算において用いられないためである。これらの結果フラグは、再オーダバッファ285のROBアレイ405のフラグオペランド記憶部分410内に、フラグオペランドとして記憶される。整数結果がまた、関連する結果フラグとともにROBアレイ405内に記憶される。ROPが引退するとき、データ/フラグ結果は駆動されてROB285から出される。より特定的には、そのような引退の際、ROPに対応するROBエントリは、ROB285からレジスタファイル255およびEFLAGSレジスタ400へ、その間の41ビットのライトバックバスを介して引退する。このとき、ROPに対応するフラグは、ROB285のフラグオペランド記憶部分410からEFLAGSレジスタ400へ引退する。
【0176】
結果バス280のビット37:32はこうして、フラグオペランドを機能ユニットから分岐ユニット235に転送するために用いられる。さらに、結果バス280のビット37:32はまた、フラグオペランドを機能ユニットから再オーダバッファ285のフラグ記憶部分410へ送り戻すために用いられる。
【0177】
フラグオペランドバス415および3つのフラグタグバス417に関する詳細な説明がここで行なわれる。フラグオペランドバス415は、3つのバス部分415A、415Bおよび415Cに分割される6ビットバスであり、バス部分415Aは、フラグオペランドサブグループ1の転送のためのビット0を含み、バス部分415Bは、フラグオペランドサブグループ2の転送のためのビット4:1を含み、バス部分415Cは、フラグオペランドサブグループ3の転送のためのビット5を含む。バス部分415A、415Bおよび415Cは、図3および図4においてフラグオペランドバス415として集合的に示される。3つのバス部分415A、415Bおよび415Cの各々は、それに対応するそれぞれの4ビットフラグタグバス417を有する。したがって、3つのフラグタグバスの合計帯域幅は、12ビットである。
【0178】
例示のため、CFビットをフラグオペランドとして要求する分岐命令が、分岐ユニット235にディスパッチされると仮定する。もしCFビットが現在ROB285のフラグ記憶部分410内に記憶されていれば(従属性が解決された場合のように)、CFビットは、フラグオペランドバス415、すなわちサブグループ3を転送するバス部分415Cを通して転送される。しかしながら、もし未解決の従属性がなお存在していれば、4ビットフラグタグが、フラグタグバス417を通して転送され、分岐ユニット235に、この特定のフラグオペランドに割当てられたROB285のフラグ記憶部分410内の特定のエントリ番号または宛先を示す。このフラグ再命名方式により、再命名可能なフラグエンティティの数(この特定の実施例では3つ)を主状態フラグオペランドの合計数(この実施例では6つ)よりも少なくすることができる。この特定の実施例において、再命名可能なエンティティは、フラグサブグループ3の単一のフラグである。
【0179】
代替例を示すために、SF、ZF、AFおよびPFビットをフラグオペランドとして要求する分岐命令が、分岐ユニット235にディスパッチされると仮定する。もしSF、ZF、AFおよびPFビットがROB285のフラグ記憶部分410内に記憶されていれば(従属性が解決された場合のように)、これらフラグオペランドビットは、フラグオペランドバス415、すなわちサブグループ2を転送するバス部分415Bを通して転送される。しかしながら、もし従属性がなお存在すれば、単一の4ビットフラグタグがフラグタグバス417を通して転送され、分岐ユニット235に、この特定のフラグオペランドに割当てられたROB285のフラグ記憶部分410内の特定のエントリ番号を示す。この例において、単一のタグがサブグループ2のすべての4つのフラグに対処することが注目される。この例では、再命名可能なエンティティはサブグループ2のすべてである。
【0180】
図14は、マイクロプロセッサ200におけるフラグ再命名および発送メカニズムの全体の動作を示すフローチャートである。このフローチャートは、マイクロプロセッサ200が、プログラム命令の流れにおける先行する命令を実行した後に分岐命令に遭遇したときの動作を示す。図14のフローチャートのブロック500では、命令ラインが命令キャッシュ200から取出され、バイトQ215に与えられる。各ラインに関連する分岐予測情報は、ラインでラインベースで検査され、いずれの予測された分岐も確認する。ブロック505では、分岐命令がバイトQ215に関連するディスパッチウィンドウ220に到達すると仮定される。デコーダ205は、バイトQ215から分岐命令を受取り、分岐命令をデコードする。分岐命令のデコードの際、デコーダ205は再オーダバッファ285に特定のデコードされた分岐命令のフラグ入力要求について知らせる。たとえば、もしデコードされた分岐命令が、JO 4B32(またはオーバフローによるアドレス4B32の命令へのジャンプ)であれば、ブロック510において、デコーダ205は、再オーダバッファ285に、この命令がグループ1の状態フラグであるオーバフローフラグ、OFへのアクセスを有さねばならないと知らせる。
【0181】
より特定的には、読出フラグバス419(READ FLAG)は、図3および図4に示されるように、デコーダ205と再オーダバッファ285との間に結合される。このREAD FLAGバスは、再オーダバッファ285に、現在の分岐、すなわち現在割当てられている分岐の入力要求について知らせる。このREAD FLAGバスはまた、再オーダバッファ285に、ディスパッチウィンドウ内の現在の分岐の位置を知らせる。READ FLAGバスはまた、EFLAGSレジスタ400に結合され、要求されたフラグを、もしそのようなフラグがそこに引退していれば、および要求されたフラグまたは対応するフラグタグが再オーダバッファ285内になければ、駆動する。特定の分岐命令が分岐機能ユニットにおいて実行されるために必要な1つまたは複数のフラグは、要求された1つまたは複数のフラグと呼ばれる。
【0182】
再オーダバッファ285は次に、ブロック515において、要求された1つまたは複数のフラグに関連するフラグサブグループへの最新の更新のために、ROBフラグオペランド記憶部分410のエントリのスキャンを行なう。再オーダバッファ285により次にテストが行なわれ、特定の要求された1つまたは複数のフラグに関して従属性が存在するかどうかを決定する。判断ブロック520において、要求された1つまたは複数のフラグがメンバーであるグループに関する従属性検査が行なわれる。図6に示されるように、ROB285は、3つの従属性チェッカ420A、420B、および420C、すなわち3つのフラグサブグループ各々に対し1つの従属性チェッカを含む。各従属性チェッカは、検査を行ない、そのチェッカに与えられたフラグサブグループのいずれかのフラグに従属性が関連するかどうかを決定する。従属性チェッカ420A、420B、および420Cとして採用できる1つの従属性チェッカは、1994年4月26日に出願された、発明者スコット・ホワイト(Scott White )による、「回路キャリルックアヘッドを用いたレンジ発見回路(A Range Finding Circuit Using Circular Carry Lookahead)」と題された、出願番号第08/233,568号の米国特許出願において開示され、本出願の譲渡人と同一人物に譲渡され、この明細書に引用により援用される。
【0183】
この発明のフラググループ化配置により、そうでなければ必要となる従属性チェッカの数の減少が可能になる。たとえば、フラググループ化を用いなければ、フラグの数と等しい数の従属性チェッカが必要となる可能性がある。言い換えれば、もし再命名され発送されるフラグが6つあれば、6つの従属性チェッカが必要となる可能性がある。
【0184】
もし要求されたフラグサブグループに対し、未解決の従属性があれば、図14のフローチャートのブロック525では、フラグタグが実際のフラグサブグループの代わりに分岐機能ユニット235に送られる。言い換えれば、要求されたフラググループにおけるフラグの値が、機能ユニットにおいて実行されることを待っている命令にそのようなフラグが関連するためまだ決定されていないならば、要求されたフラグの値はまだ決定されておらず、再オーダバッファに戻って報告される。この場合、実際のフラグの値を送る代わりに、再オーダバッファはデコーダにより要求された特定のフラグサブグループに対するフラグタグを送る。
【0185】
分岐機能ユニット235は次に、要求されたタグが結果タグバス282に現われるのを待つ。続いて、特定の機能ユニットが、要求されたタグに関連する命令を実行する。その特定の機能ユニットは次に、要求されたタグを結果タグバス282の1つに出力し、そのタグに関連する要求されたフラグ情報は結果バス280で今利用可能であることを信号で知らせる。分岐機能ユニット235は要求されたフラグオペランドサブグループに対するタグを受取るとき、そのサブグループに対する要求されたフラグ情報は、そのようなフラグを結果バス280を介して分岐機能ユニット235に更新した機能ユニットから発送される。分岐機能ユニット235はしたがって、ブロック535において、懸案中の分岐命令を実行する。
【0186】
しかしながら、判断ブロック520に戻って、もし要求されたフラググループに関する何らかの従属性が解決されたと判断されれば、ブロック533において、再オーダバッファ285は要求されたフラグサブグループを、ブロック535のとおり、理論的実行のために分岐機能ユニット235に転送する。もし分岐機能ユニット235がフラグサブグループ2による特定の分岐命令の実行を要求すれば、サブグループ2のすべての4つのフラグ(SF、ZF、AFおよびPF)は、分岐ユニット235に送られることが注目される。しかしながら、もし残余のサブグループ1および3が、分岐ユニット235により、特定の命令の実行を必要とされなければ、送られる必要はない。言い換えれば、1つの特定的な実施例において、要求された1つまたは複数のフラグサブグループは、分岐ユニット235に送られる。サブグループのすべてが、実行される各命令に対して分岐ユニット235に送られる必要はない。
【0187】
再び判断ブロック520に戻って、もし特定の分岐命令に対してデコーダ205により要求されたフラグサブグループに関して従属性が存在しないと決定されれば、ブロック545におけるように、EFLAGSレジスタ400の内容は、6ビットフラグオペランドバス415を通して分岐機能ユニット235に転送される。再び、要求されたフラグサブグループからのフラグオペランドのみが、EFLAGSレジスタ400から分岐ユニット235に送られる必要がある。ブロック535のように、命令は次に、分岐機能ユニット235において実行される。
【0188】
判断ブロック550において、分岐予測の正確性についての決定が行なわれる。もし分岐予測が正しいと発見されれば、ブロック555において、分岐の結果がROB285にリターンされる。言い換えれば、新しいEIPの値、および(もし分岐が行われれば)行なう/行なわない状態の情報が、ROB285に戻って報告される。この例では分岐は正しく予測されたため、分岐は最早理論的ではなく、したがって分岐はROB285からレジスタファイル255に引退する。このような引退と同時に、EIP(引退論理325内のEIPレジスタに記憶された拡張命令ポインタ)または引退PCは更新され、分岐命令が引退したことを反映する。非分岐命令が引退するとき、EIPの値は、引退した命令の後に次の命令に更新される。しかしながら、分岐命令が引退するとき、EIPレジスタは目的分岐アドレスに更新される。より特定的には、分岐命令が引退するとき、EIPは、もし分岐命令が採用された分岐であったならば、目的分岐アドレスに更新される。しかしながら、採用されなかった分岐の場合には、EIPは、分岐命令に続く次の命令に増分される。
【0189】
もし一旦分岐命令が実行されれば、判断ブロック550において、分岐予測誤りが発生したと決定され、次にブロック565において、予測誤りされた分岐に続くROB285内のエントリが廃棄されるが、これは不正確な理論によるプロセス中にあったからである。この場合、命令キャッシュ210内の予測情報は更新され、取出し器、FPC213は、再方向付けされ、正しい目的アドレスでの取出しを再開する。実行の際、予測誤りされた分岐命令は引退のためにROB285にリターンされる。上記のフローチャートは、マイクロプロセッサパイプラインを通したワントリップを示す。パイプラインの実行は、同時に実行される複数の異なる段を伴う連続するプロセスであることが理解されるべきである。
【0190】
フラグ発送がまた、分岐機能ユニット235において実行されるSETcc命令により用いられることが注目される。これらの命令は、分岐命令と同じ態様で、EFLAGSビットを入力オペランドとして用いる。しかしながら、分岐の代わりとして、SETcc命令は0または1バイトの結果を発生する。分岐と異なり、この結果は汎用結果バス280でリターンされ、そこからその他の機能ユニットに発送されることができる。結果はまた、結果バス280を介してROB285に与えられる。この態様で、SETcc命令は、望ましくない逐次化効果を回避できる。
【0191】
この発明の1つの実施例において、フラグ記憶部分410は、再オーダバッファ285内に位置するとして示されてきたが、フラグ記憶部分410はまた、再オーダバッファ285の外部に位置し得ることが理解されるべきである。
マイクロプロセッサ装置についての説明が先に示されているが、かかる装置を動作するための方法もまた開示されたことが明らかである。簡潔に言えば、この方法は、マイクロプロセッサのサイクルにつき複数の命令をデコードするためのデコーダと、デコーダに結合された再オーダバッファとを有するスーパースカラマイクロプロセッサを含み、再オーダバッファはさらに、レジスタファイルと、分岐ユニットを含む複数の機能ユニットとに結合される。特定的には、スーパースカラマイクロプロセッサにおいて命令を処理する方法は、命令の流れにおいてマイクロプロセッサに与えられた命令をデコードし、デコードされた命令をROPに変換するステップを含む。この方法はまた、フラグ修正ROPを、目的機能ユニットと指定された機能ユニットの1つにディスパッチするステップを含む。この方法はさらに、フラグ修正ROPのデータ結果に対し、再オーダバッファ内に第1のメモリロケーションを割当てるステップを含む。この方法はまた、フラグ修正ROPが実行されるとき更新されるフラグ情報を記憶するための、第2のメモリロケーションを再オーダバッファ内に割当てるステップを含む。この方法の1つの実施例は、フラグ修正ROPが実行を懸案中のとき、フラグタグに第2のメモリロケーションを関連づけるさらなるステップを含み、そのようなフラグタグはフラグ修正ROPのフラグ結果に対応する。
【0192】
フラグ再命名および発送メカニズムを含むスーパースカラマイクロプロセッサについての説明が行なわれてきた。この発明の1つの特定的な実施例において、フラグは、有利にもグループ化されて必要とされる従属性チェッカの数を減少させる。このマイクロプロセッサは、実行についてフラグ次第である命令の実行に関する性能の向上を示す。有利にも、フラグ再命名および発送を達成するために4つの読出フラグバスと6つの従属性チェッカとを用いずに、これらの構造の採用数を減らすことができる。
【0193】
この発明のある好ましい特徴のみが例示のために示されてきたが、多くの修正および変更が発生するであろう。したがって、前掲の特許請求の範囲は、この発明の真の精神の範疇であるかかる修正および変形のすべてを含むことを意図することが理解されるべきである。
【図面の簡単な説明】
【図1】従来のスーパースカラマイクロプロセッサの一部のブロック図である。
【図2】従来のスーパースカラマイクロプロセッサの他部のブロック図であり、図1と図2とで全体を構成する。
【図3】この発明に従うスーパースカラマイクロプロセッサの一部のブロック図である。
【図4】この発明に従うスーパースカラマイクロプロセッサの他部のブロック図であり、図3と図4とで全体を構成する。
【図5】図3および図4のマイクロプロセッサのRISCコア、再オーダバッファおよびレジスタファイルのブロック図である。
【図6】図3、図4および図5の再オーダバッファのブロック図である。
【図7】この発明のマイクロプロセッサにより採用される機能ユニットの一部のブロック図である。
【図8】この発明のマイクロプロセッサにより採用される機能ユニットの他部のブロック図であり、図7と図8とで全体を構成する。
【図9】この発明のマイクロプロセッサにより採用される分岐ユニットのブロック図である。
【図10】この発明のマイクロプロセッサの、シーケンシャルな実行の間の動作を示すタイミング図である。
【図11】この発明のマイクロプロセッサの、分岐予測誤りの状況が発生したときの動作を示すタイミング図である。
【図12】この発明のマイクロプロセッサのフラグレジスタを表わす図である。
【図13】この発明のスーパースカラマイクロプロセッサにより採用される、再オーダバッファアレイをより詳細に表わす図である。
【図14】この発明のマイクロプロセッサの、分岐命令が発生する状況における動作全体を示すフローチャートの図である。
【符号の説明】
205 デコーダ
210 命令キャッシュ
255 レジスタファイル
285 再オーダバッファ

Claims (50)

  1. スーパースカラマイクロプロセッサであって、
    命令の流れに含まれる命令をデコードし、デコードされた命令をROPに変換するためのデコーダと、
    デコーダに結合され、マイクロプロセッサの理論的な状態を記憶するための再オーダバッファと、
    再オーダバッファに結合され、マイクロプロセッサの実状態を記憶するためのレジスタファイルとを含み、
    再オーダバッファは、理論的な整数結果を記憶するための整数結果部分と整数結果に関連する理論的なフラグ情報を記憶するためのフラグ結果部分とを含む複数の記憶ロケーションを有する再オーダバッファアレイを含み、フラグ結果部分と整数結果部分とは連結されて整数結果よりも幅の広い浮動小数点結果の記憶を収容する浮動小数点記憶ロケーションを形成し、スーパースカラマイクロプロセッサはさらに、
    再オーダバッファに結合され、再オーダバッファから引退したフラグ情報を記憶するための実フラグレジスタを含む、スーパースカラマイクロプロセッサ。
  2. デコーダと再オーダバッファとに結合された浮動小数点ユニットと、
    デコーダと再オーダバッファとに結合された分岐ユニットと、
    デコーダと再オーダバッファとに結合された整数ユニットとをさらに含む、請求項1に記載のマイクロプロセッサ。
  3. デコーダはさらに、フラグ修正ROPを整数ユニットにディスパッチするため、分岐ROPを分岐ユニットにディスパッチするため、および浮動小数点ROPを浮動小数点ユニットにディスパッチするためのディスパッチウィンドウを含み、整数ユニットは整数ROPがその中で実行するとき整数結果を発生し、浮動小数点ユニットはその中で浮動小数点ROPが実行するとき浮動小数点結果を発生する、請求項2に記載のマイクロプロセッサ。
  4. 再オーダバッファは、再オーダバッファのフラグ結果部分の1つを、デコーダによりディスパッチされた特定のフラグ修正ROPのフラグ結果へ割当て、したがって割当てられたフラグ結果部分を発生するための再命名手段を含む、請求項3に記載のマイクロプロセッサ。
  5. 再命名手段はさらに、割当てられたフラグ結果部分に対応するフラグ修正ROPの実行が懸案中である一方で、フラグタグに、割当てられたフラグ結果部分を関連づけるための手段を含む、請求項4に記載のマイクロプロセッサ。
  6. 再オーダバッファと分岐ユニットとの間に結合され、再オーダバッファからのフラグタグを分岐ユニットに伝えるためのフラグタグバスをさらに含む、請求項5に記載のマイクロプロセッサ。
  7. 再オーダバッファ、実フラグレジスタ、および分岐ユニットの間に結合され、再オーダバッファおよび実フラグレジスタからのフラグ結果を分岐ユニットに伝えるためのフラグオペランドバスをさらに含む、請求項6に記載のマイクロプロセッサ。
  8. フラグ結果部分は、複数のフラグを記憶するための複数のフラグビット位置を示し、前記複数のフラグは、フラグ修正ROPが実行するときどのフラグがともに更新されるかに従いフラグサブグループにグループ分けされる、請求項7に記載のマイクロプロセッサ。
  9. フラグタグに特定のフラグサブグループを関連づける手段をさらに含む、請求項8に記載のマイクロプロセッサ。
  10. フラグサブグループの数と同じ数の複数のフラグタグバスをさらに含み、フラグタグバスは再オーダバッファのフラグ結果部分と分岐ユニットとの間に結合され、各フラグタグバスはそれぞれのフラグサブグループを分岐ユニットに伝える、請求項9に記載のマイクロプロセッサ。
  11. 複数の従属性チェッカをさらに含み、それぞれの従属性チェッカは各フラグサブグループに対して与えられ、サブグループのフラグに関連する命令に関して何らかの従属性が存在するかどうかを決定する、請求項10に記載のマイクロプロセッサ。
  12. フラグ結果部分は、複数のフラグを記憶するための複数のフラグビット位置を示し、前記複数のフラグは、フラグ修正ROPが実行するときどのフラグがともに更新されるかに従いフラグサブグループにグループ分けされる、請求項2に記載のマイクロプロセッサ。
  13. フラグタグに特定のフラグサブグループを関連づけるための手段をさらに含む、請求項12に記載のマイクロプロセッサ。
  14. フラグサブグループの数と等しい数の複数のフラグタグバスをさらに含み、フラグタグバスは再オーダバッファのフラグ結果部分と分岐ユニットとの間に結合され、各フラグタグバスはそれぞれのフラグサブグループを分岐ユニットに伝える、請求項13に記載のマイクロプロセッサ。
  15. 複数の従属性チェッカをさらに含み、それぞれの従属性チェッカはフラグサブグループの各々に対して与えられ、サブグループのフラグに関連する命令に関して何らかの従属性が存在するかどうかを決定する、請求項14に記載のマイクロプロセッサ。
  16. 分岐ユニット、整数ユニット、浮動小数点ユニット、および再オーダバッファをともに結合する結果バスをさらに含む、請求項2に記載のマイクロプロセッサ。
  17. 結果バスは浮動小数点結果の幅に等しい合計のデータ幅を示し、そのため浮動小数点結果は結果バスの合計幅で転送されることができ、結果バスは、浮動小数点結果のデータ幅よりも小さなデータ幅を示す整数結果を転送するための整数結果部分を含み、さらにフラグ修正ROPの整数結果に関連するフラグ結果を転送するための残余のフラグ結果部分を含む、請求項16に記載のマイクロプロセッサ。
  18. マイクロプロセッサに命令およびデータを与えるための外部メモリと結合される、請求項1に記載のマイクロプロセッサ。
  19. マイクロプロセッサに命令およびデータを与えるための外部メモリと結合される、請求項2に記載のマイクロプロセッサ。
  20. スーパースカラマイクロプロセッサであって、
    命令の流れに含まれる命令をデコードするためのデコーダと、
    デコーダに結合され、マイクロプロセッサの理論的な状態を記憶するための再オーダバッファと、
    再オーダバッファに結合され、マイクロプロセッサの実状態を記憶するためのレジスタファイルとを含み、
    再オーダバッファは、理論的整数結果を記憶するための整数結果部分と整数結果に関連する理論的フラグ情報を記憶するためのフラグ結果部分とを含む複数の記憶ロケーションを有する再オーダバッファアレイを含み、フラグ結果部分と整数結果部分とは連結されて整数結果よりも幅の広い浮動小数点結果の記憶を収容する浮動小数点記憶ロケーションを形成し、スーパースカラマイクロプロセッサはさらに、
    再オーダバッファに結合され、再オーダバッファから引退したフラグ情報を記憶するための実フラグレジスタを含む、スーパースカラマイクロプロセッサ。
  21. デコーダと再オーダバッファとに結合された浮動小数点ユニットと、
    デコーダと再オーダバッファとに結合された分岐ユニットと、
    デコーダと再オーダバッファとに結合された整数ユニットとをさらに含む、請求項20に記載のマイクロプロセッサ。
  22. デコーダはさらに、フラグ修正命令を整数ユニットにディスパッチするため、分岐命令を分岐ユニットにディスパッチするため、および浮動小数点命令を浮動小数点ユニットにディスパッチするためのディスパッチウィンドウを含み、整数ユニットはその中で整数命令が実行するとき整数結果を発生し、浮動小数点ユニットはその中で浮動小数点命令が実行するとき浮動小数点結果を発生する、請求項21に記載のマイクロプロセッサ。
  23. 再オーダバッファは、再オーダバッファのフラグ結果部分の1つを、デコーダによりディスパッチされた特定のフラグ修正命令のフラグ結果に割当て、したがって割当てられたフラグ結果部分を発生するための再命名手段を含む、請求項22に記載のマイクロプロセッサ。
  24. 再命名手段はさらに、割当てられたフラグ結果部分に対応するフラグ修正命令の実行が懸案中である一方で、フラグタグに、割当てられたフラグ結果部分を関連づけるための手段を含む、請求項23に記載のマイクロプロセッサ。
  25. 再オーダバッファと分岐ユニットとの間に結合され、再オーダバッファからのフラグタグを分岐ユニットに伝えるためのフラグタグバスをさらに含む、請求項24に記載のマイクロプロセッサ。
  26. 再オーダバッファ、実フラグレジスタ、および分岐ユニットの間に結合され、再オーダバッファおよび実フラグレジスタからの結果を分岐ユニットに伝えるためのフラグオペランドバスをさらに含む、請求項25に記載のマイクロプロセッサ。
  27. マイクロプロセッサに命令およびデータを与えるための外部メモリと結合された、請求項20に記載のマイクロプロセッサ。
  28. マイクロプロセッサに命令およびデータを与えるための外部メモリと結合された、請求項21に記載のマイクロプロセッサ。
  29. マイクロプロセッサのサイクルにつき複数のRISCのような演算(ROP)をデコードするためのデコーダと、デコーダに結合された再オーダバッファとを含むスーパースカラマイクロプロセッサにおいて、再オーダバッファはさらに、レジスタファイルと、分岐ユニットを含む複数の機能ユニットとに結合され、再オーダバッファは前記マイクロプロセッサの理論的状態を記憶し、レジスタファイルは前記マイクロプロセッサの実状態を記憶し、ROPを処理する方法は、
    命令の流れにおいてマイクロプロセッサに与えられた命令をデコードし、デコードされた命令をROPに変換するステップと、
    フラグ修正ROPを目的機能ユニットと指定された機能ユニットの1つにディスパッチするステップと、
    フラグ修正ROPのデータ結果に対し再オーダバッファ内に第1のメモリロケーションを割当てるステップと、
    フラグ修正ROPが実行されるとき更新されるフラグ情報を記憶するために、第2のメモリロケーションを再オーダバッファに割当てるステップとを含む、ROPを処理する方法。
  30. フラグ修正ROPが実行を懸案中であるときフラグタグに第2のメモリロケーションを関連づけるステップをさらに含み、フラグタグはフラグ修正ROPのフラグ結果に対応する、請求項29に記載の方法。
  31. 分岐ROPを分岐ユニットにディスパッチするステップをさらに含み、分岐ROPは、分岐ROPのフラグオペランドとしてフラグ修正ROPのフラグ結果を有する、請求項30に記載の方法。
  32. 目的機能ユニットによりフラグ修正ROPを実行するステップと、
    フラグ修正ROPのフラグ結果を、第2のメモリロケーションへの記憶のために、目的機能ユニットから再オーダバッファに送るステップとをさらに含む、請求項31に記載の方法。
  33. フラグ結果を再オーダバッファから分岐ユニットへ、その間のフラグオペランドバスを介して送るステップをさらに含む、請求項32に記載の方法。
  34. 目的機能ユニットによりフラグ修正ROPを実行するステップと、
    フラグ修正ROPのフラグ結果を、分岐ユニットにディスパッチされた分岐ROPのフラグオペランドとして分岐ユニットが使用するために、目的機能ユニットから結果バスを通して分岐ユニットに送るステップとをさらに含む、請求項33に記載の方法。
  35. 結果バスは浮動小数点結果を収容するのに十分な幅を示し、整数結果の幅は浮動小数点結果の幅よりも小さく、この方法はさらに、
    整数結果を整数機能ユニットから結果バスの第1の部分に転送するステップと、
    フラグ結果を整数機能ユニットから残余の結果バスの第2の部分に転送するステップとを含む、請求項34に記載の方法。
  36. 機能ユニットの1つにより整数ROPを実行し、第1のデータ幅を示す整数結果を発生するステップと、
    別の機能ユニットにより浮動小数点ROPを実行し、第1のデータ幅よりも大きな第2のデータ幅を示す浮動小数点結果を発生するステップとをさらに含む、請求項29に記載の方法。
  37. 整数結果を第1のメモリロケーションに記憶するステップをさらに含む、請求項36に記載の方法。
  38. フラグ結果を第2のメモリロケーションに記憶するステップをさらに含む、請求項37に記載の方法。
  39. 再オーダバッファにおける第1のメモリロケーションと第2のメモリロケーションとはともに浮動小数点結果メモリロケーションを形成し、この方法は浮動小数点結果を浮動小数点メモリロケーションに記憶するステップを含む、請求項36に記載の方法。
  40. 再オーダバッファにおける第2のメモリロケーションに関連するフラグタグを、フラグタグバスを介して分岐機能ユニットに伝えるステップをさらに含む、請求項30に記載の方法。
  41. 再オーダバッファの第2のメモリロケーションに記憶されたフラグ情報は複数のフラグを含み、この方法はさらに、フラグ修正ROPが実行するときどのフラグがともに更新されるかに従いフラグをサブグループにグループ分けするステップを含む、請求項30に記載の方法。
  42. それぞれのフラグタグを各フラグサブグループに与えるステップをさらに含む、請求項30に記載の方法。
  43. 各フラグサブグループに対し、再オーダバッファと分岐ユニットとの間にそれぞれのフラグタグバスを与えるステップをさらに含む、請求項30に記載の方法。
  44. 分岐ROPを分岐ユニットにディスパッチし、ディスパッチされた分岐ROPを与えるステップをさらに含む、請求項29に記載の方法。
  45. ディスパッチされた分岐ROPに対し要求されたフラグ情報を再オーダバッファおよび実フラグレジスタに転送するステップをさらに含む、請求項44に記載の方法。
  46. 前記フラグ情報が非理論的になったとき、再オーダバッファからフラグ情報を引退させるステップと、
    引退の際にこの引退したフラグ情報を実フラグレジスタに記憶するステップとをさらに含む、請求項45に記載の方法。
  47. 再オーダバッファから利用可能な、要求されたフラグまたはそれに対するフラグタグがないとき、実フラグを、実フラグレジスタから分岐機能ユニットへ、フラグオペランドとして転送するステップをさらに含む、請求項46に記載の方法。
  48. 要求されたフラグの値が別の機能ユニットによりまだ決定中であるとき、フラグタグを再オーダバッファから分岐ユニットに転送するステップをさらに含む、請求項46に記載の方法。
  49. 要求されたフラグが再オーダバッファ内に記憶されており、要求されたフラグの値がまだ理論的であるとき、フラグを再オーダバッファから分岐ユニットに転送するステップをさらに含む、請求項46に記載の方法。
  50. 再オーダバッファと機能ユニットとに結合され、機能ユニットにより更新されるフラグの実状態を記憶するための、実フラグレジスタを与えるステップをさらに含む、請求項29に記載の方法。
JP13401395A 1994-06-01 1995-05-31 スーパースカラマイクロプロセッサおよびropを処理する方法 Expired - Fee Related JP3662296B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US08/252,029 US5632023A (en) 1994-06-01 1994-06-01 Superscalar microprocessor including flag operand renaming and forwarding apparatus
US252029 1994-06-01

Publications (2)

Publication Number Publication Date
JPH07334364A JPH07334364A (ja) 1995-12-22
JP3662296B2 true JP3662296B2 (ja) 2005-06-22

Family

ID=22954322

Family Applications (1)

Application Number Title Priority Date Filing Date
JP13401395A Expired - Fee Related JP3662296B2 (ja) 1994-06-01 1995-05-31 スーパースカラマイクロプロセッサおよびropを処理する方法

Country Status (5)

Country Link
US (2) US5632023A (ja)
EP (1) EP0686913B1 (ja)
JP (1) JP3662296B2 (ja)
AT (1) ATE177855T1 (ja)
DE (1) DE69508303T2 (ja)

Families Citing this family (109)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE69427265T2 (de) * 1993-10-29 2002-05-02 Advanced Micro Devices, Inc. Superskalarbefehlsdekoder
US5630082A (en) * 1993-10-29 1997-05-13 Advanced Micro Devices, Inc. Apparatus and method for instruction queue scanning
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
US5903741A (en) * 1995-01-25 1999-05-11 Advanced Micro Devices, Inc. Method of allocating a fixed reorder buffer storage line for execution results regardless of a number of concurrently dispatched instructions
US6237082B1 (en) 1995-01-25 2001-05-22 Advanced Micro Devices, Inc. Reorder buffer configured to allocate storage for instruction results corresponding to predefined maximum number of concurrently receivable instructions independent of a number of instructions received
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
US5901302A (en) * 1995-01-25 1999-05-04 Advanced Micro Devices, Inc. Superscalar microprocessor having symmetrical, fixed issue positions each configured to execute a particular subset of instructions
US6101596A (en) * 1995-03-06 2000-08-08 Hitachi, Ltd. Information processor for performing processing without register conflicts
US5822574A (en) * 1995-04-12 1998-10-13 Advanced Micro Devices, Inc. Functional unit with a pointer for mispredicted resolution, and a superscalar microprocessor employing the same
US5761105A (en) * 1995-09-26 1998-06-02 Advanced Micro Devices, Inc. Reservation station including addressable constant store for a floating point processing unit
US5878266A (en) * 1995-09-26 1999-03-02 Advanced Micro Devices, Inc. Reservation station for a floating point processing unit
US5748516A (en) * 1995-09-26 1998-05-05 Advanced Micro Devices, Inc. Floating point processing unit with forced arithmetic results
US5933618A (en) * 1995-10-30 1999-08-03 Advanced Micro Devices, Inc. Speculative register storage for storing speculative results corresponding to register updated by a plurality of concurrently recorded instruction
US5790822A (en) * 1996-03-21 1998-08-04 Intel Corporation Method and apparatus for providing a re-ordered instruction cache in a pipelined microprocessor
DE69636484T2 (de) * 1996-07-16 2007-03-29 Advanced Micro Devices Inc., Austin Funktionseinheit mit zeiger für falsch vorhergesagte verzweigungsauflösung und superskalarer mikroprozessor zu deren anwendung
US5903740A (en) * 1996-07-24 1999-05-11 Advanced Micro Devices, Inc. Apparatus and method for retiring instructions in excess of the number of accessible write ports
US5915110A (en) * 1996-07-26 1999-06-22 Advanced Micro Devices, Inc. Branch misprediction recovery in a reorder buffer having a future file
US5946468A (en) * 1996-07-26 1999-08-31 Advanced Micro Devices, Inc. Reorder buffer having an improved future file for storing speculative instruction execution results
US5872951A (en) * 1996-07-26 1999-02-16 Advanced Micro Design, Inc. Reorder buffer having a future file for storing speculative instruction execution results
US6049864A (en) * 1996-08-20 2000-04-11 Intel Corporation Method for scheduling a flag generating instruction and a subsequent instruction by executing the flag generating instruction in a microprocessor
US5826070A (en) * 1996-08-30 1998-10-20 International Business Machines Corporation Apparatus and method for maintaining status flags and condition codes using a renaming technique in an out of order floating point execution unit
US5983342A (en) * 1996-09-12 1999-11-09 Advanced Micro Devices, Inc. Superscalar microprocessor employing a future file for storing results into multiportion registers
US6871275B1 (en) * 1996-12-12 2005-03-22 Intel Corporation Microprocessor having a branch predictor using speculative branch registers
US5938760A (en) * 1996-12-17 1999-08-17 International Business Machines Corporation System and method for performance monitoring of instructions in a re-order buffer
US5978900A (en) * 1996-12-30 1999-11-02 Intel Corporation Renaming numeric and segment registers using common general register pool
US5887185A (en) * 1997-03-19 1999-03-23 Advanced Micro Devices, Inc. Interface for coupling a floating point unit to a reorder buffer
US5828873A (en) * 1997-03-19 1998-10-27 Advanced Micro Devices, Inc. Assembly queue for a floating point unit
US6289437B1 (en) * 1997-08-27 2001-09-11 International Business Machines Corporation Data processing system and method for implementing an efficient out-of-order issue mechanism
US5961636A (en) * 1997-09-22 1999-10-05 International Business Machines Corporation Checkpoint table for selective instruction flushing in a speculative execution unit
US6128722A (en) * 1998-02-13 2000-10-03 International Business Machines Corporation Data processing system having an apparatus for exception tracking during out-of-order operation and method therefor
US6282634B1 (en) * 1998-05-27 2001-08-28 Arm Limited Apparatus and method for processing data having a mixed vector/scalar register file
WO2000000878A2 (en) * 1998-06-26 2000-01-06 Chi Lan Wong Derek Methods for increasing instruction-level parallelism in microprocessors and digital systems
US6988183B1 (en) 1998-06-26 2006-01-17 Derek Chi-Lan Wong Methods for increasing instruction-level parallelism in microprocessors and digital system
US6094716A (en) 1998-07-14 2000-07-25 Advanced Micro Devices, Inc. Register renaming in which moves are accomplished by swapping rename tags
US6243805B1 (en) * 1998-08-11 2001-06-05 Advanced Micro Devices, Inc. Programming paradigm and microprocessor architecture for exact branch targeting
US6289442B1 (en) * 1998-10-05 2001-09-11 Advanced Micro Devices, Inc. Circuit and method for tagging and invalidating speculatively executed instructions
US6161174A (en) * 1998-11-05 2000-12-12 Wilhite; John E. Pipelined central processor incorporating indicator busy sensing and responsive pipeline timing modification
US6240503B1 (en) 1998-11-12 2001-05-29 Advanced Micro Devices, Inc. Cumulative lookahead to eliminate chained dependencies
JP3565314B2 (ja) 1998-12-17 2004-09-15 富士通株式会社 分岐命令実行制御装置
US6266763B1 (en) 1999-01-05 2001-07-24 Advanced Micro Devices, Inc. Physical rename register for efficiently storing floating point, integer, condition code, and multimedia values
SE521071C2 (sv) * 1999-01-11 2003-09-30 Ericsson Telefon Ab L M Resultatfältskö
SE513431C2 (sv) * 1999-01-11 2000-09-11 Ericsson Telefon Ab L M Buffert för icke-rapporterade hopp
US6370596B1 (en) * 1999-08-03 2002-04-09 Chameleon Systems, Inc. Logic flag registers for monitoring processing system events
US6513109B1 (en) * 1999-08-31 2003-01-28 International Business Machines Corporation Method and apparatus for implementing execution predicates in a computer processing system
US6449710B1 (en) * 1999-10-29 2002-09-10 Stmicroelectronics, Inc. Stitching parcels
US6574725B1 (en) * 1999-11-01 2003-06-03 Advanced Micro Devices, Inc. Method and mechanism for speculatively executing threads of instructions
US6629170B1 (en) * 1999-11-08 2003-09-30 International Business Machines Corporation Method and apparatus for a byte lane selectable performance monitor bus
US6535972B1 (en) 1999-11-16 2003-03-18 Advanced Micro Devices, Inc. Shared dependency checking for status flags
US6968545B1 (en) * 2000-09-11 2005-11-22 Agilent Technologies, Inc. Method and apparatus for no-latency conditional branching
WO2002046917A1 (en) * 2000-12-07 2002-06-13 Koninklijke Philips Electronics N.V. Digital signal processing apparatus
US20020152259A1 (en) * 2001-04-14 2002-10-17 International Business Machines Corporation Pre-committing instruction sequences
US20030065906A1 (en) * 2001-09-28 2003-04-03 Rakvic Ryan N. ASAP instruction caching
US7058794B2 (en) * 2001-10-23 2006-06-06 Col Gerard M Apparatus and method for masked move to and from flags register in a processor
US7076639B2 (en) * 2001-10-23 2006-07-11 Ip-First, Llc Apparatus and method for masked move to and from flags register in a processor
US7100022B1 (en) * 2002-02-28 2006-08-29 Mindspeed Technologies, Inc. Area and power efficient VLIW processor with improved speed
US7120780B2 (en) * 2002-03-04 2006-10-10 International Business Machines Corporation Method of renaming registers in register file and microprocessor thereof
JP3816845B2 (ja) 2002-07-05 2006-08-30 富士通株式会社 プロセッサ及び命令制御方法
US20050071518A1 (en) * 2003-09-30 2005-03-31 Intel Corporation Flag value renaming
US7043626B1 (en) 2003-10-01 2006-05-09 Advanced Micro Devices, Inc. Retaining flag value associated with dead result data in freed rename physical register with an indicator to select set-aside register instead for renaming
US7472296B2 (en) * 2004-02-20 2008-12-30 Semiconductor Energy Laboratory Co., Ltd. Integrated circuit, semiconductor device and ID chip
KR100628573B1 (ko) * 2004-09-08 2006-09-26 삼성전자주식회사 조건부실행명령어의 비순차적 수행이 가능한 하드웨어장치 및 그 수행방법
US7519794B2 (en) * 2005-06-29 2009-04-14 Intel Corporation High performance architecture for a writeback stage
US7877630B1 (en) 2005-09-28 2011-01-25 Oracle America, Inc. Trace based rollback of a speculatively updated cache
US7779307B1 (en) 2005-09-28 2010-08-17 Oracle America, Inc. Memory ordering queue tightly coupled with a versioning cache circuit
US8024522B1 (en) 2005-09-28 2011-09-20 Oracle America, Inc. Memory ordering queue/versioning cache circuit
US7783863B1 (en) 2005-09-28 2010-08-24 Oracle America, Inc. Graceful degradation in a trace-based processor
US8370576B1 (en) 2005-09-28 2013-02-05 Oracle America, Inc. Cache rollback acceleration via a bank based versioning cache ciruit
US7568089B1 (en) 2005-10-26 2009-07-28 Sun Microsystems, Inc. Flag management in processors enabled for speculative execution of micro-operation traces
US7987342B1 (en) 2005-09-28 2011-07-26 Oracle America, Inc. Trace unit with a decoder, a basic-block cache, a multi-block cache, and sequencer
US8019944B1 (en) 2005-09-28 2011-09-13 Oracle America, Inc. Checking for a memory ordering violation after a speculative cache write
US7949854B1 (en) 2005-09-28 2011-05-24 Oracle America, Inc. Trace unit with a trace builder
US8499293B1 (en) 2005-09-28 2013-07-30 Oracle America, Inc. Symbolic renaming optimization of a trace
US8051247B1 (en) 2005-09-28 2011-11-01 Oracle America, Inc. Trace based deallocation of entries in a versioning cache circuit
US7849292B1 (en) 2005-09-28 2010-12-07 Oracle America, Inc. Flag optimization of a trace
US8037285B1 (en) 2005-09-28 2011-10-11 Oracle America, Inc. Trace unit
US7953933B1 (en) 2005-09-28 2011-05-31 Oracle America, Inc. Instruction cache, decoder circuit, basic block cache circuit and multi-block cache circuit
US7870369B1 (en) 2005-09-28 2011-01-11 Oracle America, Inc. Abort prioritization in a trace-based processor
US7814298B1 (en) 2005-09-28 2010-10-12 Oracle America, Inc. Promoting and appending traces in an instruction processing circuit based upon a bias value
US8015359B1 (en) 2005-09-28 2011-09-06 Oracle America, Inc. Method and system for utilizing a common structure for trace verification and maintaining coherency in an instruction processing circuit
US7966479B1 (en) 2005-09-28 2011-06-21 Oracle America, Inc. Concurrent vs. low power branch prediction
US7747822B1 (en) 2005-10-31 2010-06-29 Oracle America Inc. Maintaining memory coherency with a trace cache
US7937564B1 (en) 2005-09-28 2011-05-03 Oracle America, Inc. Emit vector optimization of a trace
US7953961B1 (en) 2005-09-28 2011-05-31 Oracle America, Inc. Trace unit with an op path from a decoder (bypass mode) and from a basic-block builder
US8032710B1 (en) 2005-09-28 2011-10-04 Oracle America, Inc. System and method for ensuring coherency in trace execution
US7546420B1 (en) 2005-09-28 2009-06-09 Sun Microsystems, Inc. Efficient trace cache management during self-modifying code processing
US7797517B1 (en) 2005-11-18 2010-09-14 Oracle America, Inc. Trace optimization via fusing operations of a target architecture operation set
US7681019B1 (en) 2005-11-18 2010-03-16 Sun Microsystems, Inc. Executing functions determined via a collection of operations from translated instructions
US7475225B2 (en) * 2005-12-30 2009-01-06 Intel Corporation Method and apparatus for microarchitecture partitioning of execution clusters
US8370609B1 (en) 2006-09-27 2013-02-05 Oracle America, Inc. Data cache rollbacks for failed speculative traces with memory operations
US8010745B1 (en) 2006-09-27 2011-08-30 Oracle America, Inc. Rolling back a speculative update of a non-modifiable cache line
US8006042B2 (en) * 2007-11-26 2011-08-23 Globalfoundries Inc. Floating point bypass retry
US7502918B1 (en) 2008-03-28 2009-03-10 International Business Machines Corporation Method and system for data dependent performance increment and power reduction
US8495699B2 (en) 2008-12-23 2013-07-23 At&T Intellectual Property I, L.P. Distributed content analysis network
US20100223660A1 (en) * 2009-02-27 2010-09-02 At&T Intellectual Property I, L.P. Providing multimedia content with time limit restrictions
US20100223673A1 (en) * 2009-02-27 2010-09-02 At&T Intellectual Property I, L.P. Providing multimedia content with access restrictions
KR101059899B1 (ko) * 2009-04-23 2011-08-29 광주과학기술원 마이크로 프로세서
US8539397B2 (en) * 2009-06-11 2013-09-17 Advanced Micro Devices, Inc. Superscalar register-renaming for a stack-addressed architecture
US8904421B2 (en) 2009-06-30 2014-12-02 At&T Intellectual Property I, L.P. Shared multimedia experience including user input
US20110055838A1 (en) * 2009-08-28 2011-03-03 Moyes William A Optimized thread scheduling via hardware performance monitoring
US9135014B2 (en) * 2012-02-15 2015-09-15 Freescale Semiconductor, Inc Data processing system with latency tolerance execution
US9672044B2 (en) * 2012-08-01 2017-06-06 Nxp Usa, Inc. Space efficient checkpoint facility and technique for processor with integrally indexed register mapping and free-list arrays
CN105765522B (zh) * 2013-10-25 2020-05-19 超威半导体公司 用于立即数处置和旗标处置的处理器和方法
US10579378B2 (en) 2014-03-27 2020-03-03 Intel Corporation Instructions for manipulating a multi-bit predicate register for predicating instruction sequences
WO2016028410A1 (en) * 2014-07-14 2016-02-25 Mill Computing, Inc. Execution and scheduling of software pipelined loops
US20160055004A1 (en) * 2014-08-21 2016-02-25 Edward T. Grochowski Method and apparatus for non-speculative fetch and execution of control-dependent blocks
US11429393B2 (en) * 2015-11-11 2022-08-30 Arm Limited Apparatus and method for supporting out-of-order program execution of instructions
US10095637B2 (en) * 2016-09-15 2018-10-09 Advanced Micro Devices, Inc. Speculative retirement of post-lock instructions
US10025554B2 (en) * 2016-09-19 2018-07-17 Arm Limited Data item order restoration
US10963567B2 (en) * 2017-10-12 2021-03-30 Microsoft Technology Licensing, Llc Speculative side-channel attack mitigations

Family Cites Families (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4490908A (en) * 1982-04-09 1985-01-01 Associated Enterprises, Inc. Wire stripper and method
US4807115A (en) * 1983-10-07 1989-02-21 Cornell Research Foundation, Inc. Instruction issuing mechanism for processors with multiple functional units
JPH0658631B2 (ja) * 1983-12-19 1994-08-03 株式会社日立製作所 デ−タ処理装置
US5056006A (en) * 1988-09-12 1991-10-08 General Electric Company Parallel processor with single program storage and sequencer and simultaneous instruction processing
US5226126A (en) * 1989-02-24 1993-07-06 Nexgen Microsystems Processor having plurality of functional units for orderly retiring outstanding operations based upon its associated tags
US5136697A (en) * 1989-06-06 1992-08-04 Advanced Micro Devices, Inc. System for reducing delay for execution subsequent to correctly predicted branch instruction using fetch information stored with each block of instructions in cache
US5129067A (en) * 1989-06-06 1992-07-07 Advanced Micro Devices, Inc. Multiple instruction decoder for minimizing register port requirements
US5251306A (en) * 1990-01-16 1993-10-05 Advanced Micro Devices, Inc. Apparatus for controlling execution of a program in a computing device
US5185868A (en) * 1990-01-16 1993-02-09 Advanced Micro Devices, Inc. Apparatus having hierarchically arranged decoders concurrently decoding instructions and shifting instructions not ready for execution to vacant decoders higher in the hierarchy
US5226130A (en) * 1990-02-26 1993-07-06 Nexgen Microsystems Method and apparatus for store-into-instruction-stream detection and maintaining branch prediction cache consistency
US5077692A (en) * 1990-03-05 1991-12-31 Advanced Micro Devices, Inc. Information storage device with batch select capability
US5237700A (en) * 1990-03-21 1993-08-17 Advanced Micro Devices, Inc. Exception handling processor for handling first and second level exceptions with reduced exception latency
US5053631A (en) * 1990-04-02 1991-10-01 Advanced Micro Devices, Inc. Pipelined floating point processing unit
US5058048A (en) * 1990-04-02 1991-10-15 Advanced Micro Devices, Inc. Normalizing pipelined floating point processing unit
US5095458A (en) * 1990-04-02 1992-03-10 Advanced Micro Devices, Inc. Radix 4 carry lookahead tree and redundant cell therefor
US5206828A (en) * 1990-04-02 1993-04-27 Advanced Micro Devices, Inc. Special carry save adder for high speed iterative division
US5128888A (en) * 1990-04-02 1992-07-07 Advanced Micro Devices, Inc. Arithmetic unit having multiple accumulators
US5128891A (en) * 1990-04-02 1992-07-07 Advanced Micro Devices, Inc. High speed divider with square root capability
US5157780A (en) * 1990-06-12 1992-10-20 Advanced Micro Devices, Inc. Master-slave checking system
US5247644A (en) * 1991-02-06 1993-09-21 Advanced Micro Devices, Inc. Processing system with improved sequential memory accessing
IE80854B1 (en) * 1993-08-26 1999-04-07 Intel Corp Processor ordering consistency for a processor performing out-of-order instruction execution
US5574928A (en) * 1993-10-29 1996-11-12 Advanced Micro Devices, Inc. Mixed integer/floating point processor core for a superscalar microprocessor with a plurality of operand buses for transferring operand segments
EP0651321B1 (en) * 1993-10-29 2001-11-14 Advanced Micro Devices, Inc. Superscalar microprocessors
US5689693A (en) * 1994-04-26 1997-11-18 Advanced Micro Devices, Inc. Range finding circuit for selecting a consecutive sequence of reorder buffer entries using circular carry lookahead

Also Published As

Publication number Publication date
EP0686913B1 (en) 1999-03-17
US5805853A (en) 1998-09-08
DE69508303D1 (de) 1999-04-22
EP0686913A2 (en) 1995-12-13
JPH07334364A (ja) 1995-12-22
ATE177855T1 (de) 1999-04-15
DE69508303T2 (de) 1999-11-11
US5632023A (en) 1997-05-20
EP0686913A3 (en) 1996-11-27

Similar Documents

Publication Publication Date Title
JP3662296B2 (ja) スーパースカラマイクロプロセッサおよびropを処理する方法
US5867682A (en) High performance superscalar microprocessor including a circuit for converting CISC instructions to RISC operations
JP3628379B2 (ja) 命令を処理するためのパイプラインを有するマイクロプロセッサ装置およびそれにおいて用いるためのプログラムカウンタ値を発生する装置
US5721855A (en) Method for pipeline processing of instructions by controlling access to a reorder buffer using a register file outside the reorder buffer
JP3751049B2 (ja) パイプラインプロセッサおよびその動作方法
US5511175A (en) Method an apparatus for store-into-instruction-stream detection and maintaining branch prediction cache consistency
EP0651323B1 (en) Microprocessors load/store functional units and data caches
US5832297A (en) Superscalar microprocessor load/store unit employing a unified buffer and separate pointers for load and store operations
US6141747A (en) System for store to load forwarding of individual bytes from separate store buffer entries to form a single load word
US5951670A (en) Segment register renaming in an out of order processor
EP1441284A2 (en) Apparatus and method for efficiently updating branch target address cache
JP2003514274A (ja) 接近して結合される多重プロセッサのための高速マルチスレッディング
EP1439459A2 (en) Apparatus and method for avoiding instruction fetch deadlock in a processor with a branch target address cache
US5649137A (en) Method and apparatus for store-into-instruction-stream detection and maintaining branch prediction cache consistency
CN111133413A (zh) 利用单个cam端口的具有分区重排序队列的加载-存储单元

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20050307

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: 20050315

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20050323

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: 20080401

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20090401

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20100401

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20100401

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110401

Year of fee payment: 6

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120401

Year of fee payment: 7

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: 20120401

Year of fee payment: 7

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

LAPS Cancellation because of no payment of annual fees