(57)【要約】ロードオペレーションの投機的な結果をレジスタ値にリンクするためのシステムおよび方法。システム（１００）は、第１のアドレス指定パターン（２０６）および第１のタグ（２０８）を記憶するように構成されたエントリ（２２０）含むメモリファイル（１３２）を有する。メモリファイル（１３２）は、第１のアドレス指定パターン（２０６）を、ロードオペレーションの第２のアドレス指定パターン（２０６）と比較して、一致した場合に、第１のタグ（２０８）によって識別されるデータ値をロードオペレーションの投機的な結果にリンクするように構成されている。システム（１００）は、メモリファイル（１３２）に結合され、ロードオペレーションに依存する第２のオペレーションを実行する際に、この投機的な結果にアクセスするように構成された実行コア（１２４）と、メモリファイル（１３２）に結合され、１つ以上のアドレスの比較を実行することによって、データ値と、ロードオペレーションの投機的な結果とのリンクを検証するように構成された機能ユニット（１２６）とをさらに有する。
2007536626.tif 000002
【特許請求の範囲】
【請求項１】
第１のアドレス指定パターン（２０６）および第１のタグ（２０８）を記憶するように構成されたエントリ（２２０）を含むメモリファイル（１３２）であって、前記メモリファイル（１３２）は、前記エントリ（２２０）に含まれる前記第１のアドレス指定パターン（２０６）を、ロードオペレーションの第２のアドレス指定パターン（２０６）と比較するように構成されており、前記メモリファイル（１３２）は、前記第２のアドレス指定パターン（２０６）が前記エントリ（２２０）に記憶されている前記第１のアドレス指定パターン（２０６）と一致する場合、前記第１のタグ（２０８）によって識別されるデータ値を前記ロードオペレーションの投機的な結果にリンクするように構成されているメモリファイル（１３２）と、
前記メモリファイル（１３２）に結合され、前記ロードオペレーションに依存する第２のオペレーションを実行する際に、前記投機的な結果にアクセスするように構成された実行コア（１２４）と、
前記メモリファイル（１３２）に結合され、１つ以上のアドレスの比較を実行することによって、前記第１のタグ（２０８）によって識別される前記データ値と前記ロードオペレーションの前記投機的な結果との前記リンクを検証するように構成された機能ユニット（１２６）とを備えるシステム（１００）。
【請求項２】
前記機能ユニット（１２６）は、前記比較を実行し、かつ非投機的なストアからロードへの転送を実行するように構成されたストアからロードへの転送比較器（２８０）を有する請求項１記載のシステム（１００）。
【請求項３】
前記エントリ（２２０）は、前記エントリ（２２０）の割り当てを生じさせたロードオペレーションまたはストアオペレーションを識別する転送タグ（２５６）を記憶し、かつ前記第２のアドレス指定パターン（２０６）が、前記エントリ（２２０）に記憶されている前記第１のアドレス指定パターンと一致する場合、前記転送タグ（２５６）を出力するようにさらに構成されている請求項１記載のシステム（１００）。
【請求項４】
前記機能ユニット（１２６）は、前記転送タグ（２５６）を受け取るために結合されており、前記ロードオペレーションより先で、かつ前記ロードオペレーションのアドレスと一致するアドレスを有するオペレーションのうち最も後のものを選択し、前記転送タグ（２５６）を前記選択された最も後のオペレーションの識別タグと比較することによって、前記比較を実行するようにさらに構成されており、前記選択された最も後のオペレーションは、ロードオペレーションまたはストアオペレーションである請求項３記載のシステム（１００）。
【請求項５】
前記機能ユニット（１２６）は、前記転送タグ（２５６）を受け取るために結合されており、それぞれが前記ロードオペレーションより先で、かつそれぞれが前記ロードオペレーションのアドレスと一致するアドレスを有する最も後のロードオペレーションと最も後のストアオペレーションとを選択し、前記選択された最も後のロードオペレーションが前記選択された最も後のストアオペレーションよりもプログラムの順序において後であると判定して、前記転送タグ（２５６）を前記選択された最も後のロードオペレーションの識別タグと比較することによって、前記比較を実行するようにさらに構成されている請求項３記載のシステム（１００）。
【請求項６】
第１のアドレス指定パターン（２０６）および第１のタグ（２０８）を含むエントリ（２２０）を記憶するステップと、
前記エントリ（２２０）の記憶の後に、前記エントリ（２２０）に含まれる前記第１のアドレス指定パターン（２０６）を、ロードオペレーションの第２のアドレス指定パターン（２０６）と比較するステップと、
前記比較を受けて、前記第２のアドレス指定パターン（２０６）が前記エントリ（２２０）に記憶されている前記第１のアドレス指定パターン（２０６）と一致する場合、前記第１のタグ（２０８）によって識別されるデータ値を前記ロードオペレーションの投機的な結果にリンクするステップと、
前記リンク後、前記ロードオペレーションに依存する第２のオペレーションを実行する際に、前記投機的な結果にアクセスするステップと、
前記リンク後、１つ以上のアドレスの比較を実行することによって、前記第１のタグ（２０８）によって識別される前記データ値と前記ロードオペレーションの前記投機的な結果との前記リンクを検証するステップとを有する方法。
【請求項７】
前記エントリ（２２０）は、前記ロードオペレーションよりもプログラムの順序において先にくるストアオペレーションを受けて割り当てられており、前記方法は、前記タグによって識別される前記データ値が前記ロードオペレーションの前記投機的な結果にリンクされたことを受けて、前記ストアオペレーションに関連付けられているフラグ（２６９）をセットするステップをさらに有する請求項６記載の方法。
【請求項８】
前記比較を実行することによって前記リンクが検証されるまで、前記ストアオペレーションに関連する情報を保持するステップをさらに有し、前記保持は、前記フラグ（２６９）のセットを受けて行われる請求項７記載の方法。
【請求項９】
前記フラグ（２６９）のセットを受けて、前記ストアオペレーションを前記リンクが検証されるまでリタイアさせないステップをさらに有する請求項８記載の方法。
【請求項１０】
第１のアドレス指定パターン（２０６）および第１のタグ（２０８）を含むエントリ（２２０）を記憶するステップと、
前記エントリ（２２０）の記憶の後に、前記エントリ（２２０）に含まれる前記第１のアドレス指定パターン（２０６）を、ロードオペレーションの第２のアドレス指定パターン（２０６）と比較するステップと、
前記比較を受けて、前記第２のアドレス指定パターン（２０６）が前記エントリ（２２０）に記憶されている前記第１のアドレス指定パターン（２０６）と一致する場合、前記第１のタグ（２０８）によって識別されるデータ値を前記ロードオペレーションの投機的な結果にリンクするステップと、
前記リンク後、前記ロードオペレーションに依存する第２のオペレーションを実行する際に、前記投機的な結果にアクセスするステップと、
前記リンク後、前記ロードオペレーションの前記投機的な結果と実結果との比較を実行することによって、前記第１のタグ（２０８）によって識別される前記データ値と前記ロードオペレーションの前記投機的な結果との前記リンクを検証するステップとを有する方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサの分野に関し、より詳細には、プロセッサにおいてデータ投機的な実行を行うことに関する。
【背景技術】
【０００２】
スーパースカラプロセッサは、複数の命令を同時に実行すると共に、その設計と整合した可能な最短のクロックサイクルを使用することで高性能を達成している。しかし、命令間でのデータと制御のフローの依存性により、所定の時間に発行可能な命令の数が制限されることがある。この結果、一部のプロセッサでは、パフォーマンスの一層の向上を達成するために、投機的実行に対応している。
【０００３】
投機の一種に、制御フローの投機がある。制御フローの投機では、プログラムの制御が進行する方向を予測する。例えば、分岐が成立するかどうかを予測するために分岐予測が使用され得る。多くの種類の分岐予測が利用可能であり、これには、毎回ただ同じ予測をする方法から、履歴に基づいた予測を行うために、過去に行った分岐の高度な履歴をプログラム内に保持する方法まで多岐にわたる。分岐予測は、ハードウェアの最適化、コンパイラによる最適化、またはこの両者によって行うことができる。分岐予測メカニズムが行う予測に基づいて、命令が投機的にフェッチおよび実行され得る。分岐命令を最終的に評価する際に、分岐命令を検証することができる。予測が正しくなかった場合、誤った予測に基づいて投機的に実行された命令が破棄され得る。
【０００４】
提唱されている別の種類の投機に、データの投機がある。例えば、データ項目の値を予測する値予測では、データのパターンを観察し、そのパターンを予測のベースとすることが行われる（例えば、インデックスカウンタ変数の値が、その変数が以前取っていた値がどのようにインクリメントまたはデクリメントされるかを観察することによって予測できる）。アドレス予測では、データの位置の予測が行われる。さらに別の種類のデータ投機に、メモリシステムオプティミズム（optimism）と呼ばれる手法がある。マルチプロセッサシステムでは、メモリシステムオプティミズムは、コヒーレンシチェックが完了する前に、プロセッサがそのプロセッサのローカルキャッシュにあるデータを使用して命令を投機的に実行する場合に行われる。同様に、別の種類のデータ投機では、ロードがアクセスするアドレスと同じアドレスに、ストアがデータをストアする可能性がある場合であっても、そのロードの実行時にまだ計算されていないアドレスを有するストアに先行して、ロードを投機的に実行することができるようにする。上記に挙げた種類のデータ投機のすべてにおいて、基礎をなす条件が最終的に評価されて、これにより、投機の検証または取り消しが可能となる。投機が結局誤っていた場合、投機的なデータを使用して実行された命令が、（例えば、更新したデータおよび／または非投機的なデータを使用して）再実行され得る。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
投機によって、依存性のチェックが完了する前に実行が進行するようになるため、正しい投機から得られる性能向上が、誤った投機による性能損失を上回れば、大幅なパフォーマンスの向上を達成することができる。したがって、プロセッサにおいてデータ投機を実行できるようにすると共に、投機ミスに対する効率的な回復メカニズムを提供することが望ましい。
【課題を解決するための手段】
【０００６】
ロードオペレーションの投機的な結果をレジスタ値にリンクするためのシステムおよび方法の各種実施形態が開示される。一実施形態では、システムは、第１のアドレス指定パターンおよび第１のタグを記憶するように構成されたエントリを含むメモリファイルを有し、このメモリファイルは、エントリに含まれる第１のアドレス指定パターンを、ロードオペレーションの第２のアドレス指定パターンと比較するように構成されており、メモリファイルは、第２のアドレス指定パターンがエントリに記憶されている第１のアドレス指定パターンと一致する場合、第１のタグによって識別されるデータ値をロードオペレーションの投機的な結果にリンクするように構成されている。上記システムは、メモリファイルに結合された実行コアをさらに有し、この実行コアは、ロードオペレーションに依存する第２のオペレーションを実行する際に、この投機的な結果にアクセスするように構成されており、これに加え、メモリファイルに結合され、１つ以上のアドレスの比較を実行することによって、第１のタグによって識別されるデータ値と、ロードオペレーションの投機的な結果とのリンクを検証するように構成された機能ユニットも有する。
【０００７】
別の実施形態では、システムは、第１のアドレス指定パターンおよび第１のタグを記憶するように構成されたエントリを含むメモリファイルを有し、このメモリファイルは、エントリに含まれる第１のアドレス指定パターンを、ロードオペレーションの第２のアドレス指定パターンと比較するように構成されており、メモリファイルは、第２のアドレス指定パターンがエントリに記憶されている第１のアドレス指定パターンと一致する場合、第１のタグによって識別されるデータ値をロードオペレーションの投機的な結果にリンクするように構成されている。上記システムは、メモリファイルに結合された実行コアをさらに有し、この実行コアは、ロードオペレーションに依存する第２のオペレーションを実行する際に、この投機的な結果にアクセスするように構成されており、これに加え、メモリファイルに結合され、ロードオペレーションの投機的な結果と実結果との比較を実行することによって、第１のタグによって識別されるデータ値と、ロードオペレーションの投機的な結果とのリンクを検証するように構成された機能ユニットも有する。
【０００８】
本発明は、様々に変形することができ、代替形態を取り得るが、その特定の実施形態を、例として図面に図示し、かつ本明細書に詳細に記載する。しかし、図面およびその詳細な説明は、開示の形態に本発明を限定することを意図するものではなく、本発明が、添付の特許請求の範囲によって規定される本発明の趣旨ならびに範囲に含まれるすべての変形例、均等物および代替例を含むことを意図することが理解されるべきである。本明細書中に使用されている見出しは、分類のみを意図しており、本明細書または特許請求の範囲を限定するものではない。さらに、本願にわたり「し得る、してもよい」との用語は許容の意味（すなわち、可能性があること、できること）に用いられ、義務的な意味（すなわち必須）の意味には用いられていない点に留意されたい。「含む、備える」との用語ならびにその派生語は、「含むがこれに限定されない」ことを意味する。「接続されている」との用語は、「直接的または間接的に接続されている」ことを意味し、「結合されている」との用語は、「直接的または間接的に結合されている」ことを意味する。
【発明を実施するための最良の形態】
【０００９】
本発明は、添付の図面を考慮して以下の詳細な説明を読めば、よりよく理解することができる。
【００１０】
図１は、プロセッサ１００の一実施形態のブロック図である。プロセッサ１００は、システムメモリ２００に記憶されている命令を実行するように構成されている。この命令の多くは、システムメモリ２００に記憶されているデータに対して操作を行う。システムメモリ２００はコンピュータシステムの全体にわたって物理的に分散されており、１つ以上のプロセッサ１００によってアクセスされてもよい点に留意されたい。
【００１１】
プロセッサ１００は、命令キャッシュ１０６とデータキャッシュ１２８とを備え得る。プロセッサ１００は、命令キャッシュ１０６に結合されたプリフェッチユニット１０８を備え得る。ディスパッチユニット１０４は、命令キャッシュ１０６から命令を受け取って、スケジューラ１１８にオペレーション（operation）をディスパッチするように構成され得る。１つ以上のスケジューラ１１８は、ディスパッチユニット１０４からディスパッチされたオペレーションを受け取って、１つ以上の実行コア１２４にオペレーションを発行するようにこれらに結合され得る。実行コア１２４は、データキャッシュ１２８に対するアクセスを実行するように構成されたロード／ストアユニット１２６を備え得る。実行コア１２４によって得られた結果は、結果バス１３０に出力され得る。この結果は、後から発行される命令のためのオペランド値として使用されるか、レジスタファイル１１６に記憶されるか、この両方が行われ得る。スケジューラ１１８とディスパッチユニット１０４にリタイアキュー１０２が結合され得る。リタイアキューは、発行した各オペレーションをリタイア（完了）させるタイミングを決定するように構成され得る。一実施形態では、プロセッサ１００は、ｘ８６アーキテクチャと互換性を有するように設計され得る。プロセッサ１００はこのほかの数多くの構成要素を備えていてもよい点に留意されたい。例えば、プロセッサ１００は、分岐予測ユニット（図示せず）を備えていてもよい。
【００１２】
命令キャッシュ１０６は、ディスパッチユニット１０４が命令を受け取る前に、その命令を一時的に記憶し得る。プリフェッチユニット１０８を介して命令コードがシステムメモリ２００からプリフェッチされて、命令キャッシュ１０６に提供され得る。命令キャッシュ１０６は、様々な構成（セットアソシエーティブ構成、フルアソシエーティブ構成、ダイレクトマップド構成など）で実施することができる。
【００１３】
プリフェッチユニット１０８は、命令キャッシュ１０６に記憶させる命令コードをシステムメモリ２００からプリフェッチし得る。一実施形態では、プリフェッチユニット１０８は、システムメモリ２００から命令キャッシュ１０６にコードをバースト転送（burst）させるように構成され得る。プリフェッチユニット１０８は、コードをプリフェッチするための各種手法およびアルゴリズムを使用し得る。
【００１４】
ディスパッチユニット１０４は、実行コア１２４が実行可能なビット符号化されたオペレーションが含まれる信号に加えて、オペランドのアドレス情報、即値データおよび／または変位データを出力し得る。一部実施形態では、ディスパッチユニット１０４は、特定の命令を、実行コア１２４内で実行可能なオペレーションにデコードするためのデコード回路（図示せず）を備えていてもよい。単純な命令は、１つのオペレーションに対応し得る。一部実施形態では、より複雑な命令は、複数のオペレーションに対応し得る。レジスタの更新に関連するオペレーションのデコード時に、投機的なレジスタ状態を記憶するため、レジスタファイル１１６内のレジスタ位置が予約され得る（別の実施形態では、レジスタ毎に、１つ以上の投機的なレジスタ状態を記憶するためにリオーダバッファが使用され得る）。レジスタマップ１３４は、レジスタリネーミングを容易にするために、ソースおよびデスティネーションのオペランドの論理レジスタ名を物理レジスタ名に変換し得る。レジスタマップ１３４は、レジスタファイル１１６内のレジスタのうち、どのレジスタが現在割り当て済みで、どのレジスタが未割り当てであるかを追跡し得る。
【００１５】
図１のプロセッサ１００は、アウトオブオーダー実行に対応している。リタイアキュー１０２は、レジスタの読出しオペレーションおよび書込みオペレーションについて元のプログラムの順序を記録し、投機的な命令の実行と分岐予測ミスからの回復を可能にすると共に、正確な例外を促進し得る。一部実施形態では、リタイアキュー１０２も、投機的なレジスタ状態のデータの値を記憶することで、レジスタリネーミングに対応し得る。多くの実施形態では、リタイアキュー１０２は、リオーダバッファと同じように機能し得る。しかし、リタイアキュー１０２は、代表的なリオーダバッファとは異なり、どのようなデータ値でも記憶できないことがある。一部実施形態では、リタイアキュー１０２は、先入れ先出し（First-in-First-out）構成で実施され得、この構成では、オペレーションはその妥当性が検証されるとバッファの「一番下」に移動し、キューの「先頭」に新しいエントリが入ることができる空きが生じる。オペレーションがリタイアされると、リタイアキュー１０２は、レジスタファイル１１６内の、投機的なレジスタ状態を記憶する必要がなくなったレジスタの割当てを解除して、現在未使用のレジスタを通知する信号をレジスタマップ１３４に供給し得る。投機的なレジスタ状態を生成したオペレーションの妥当性が検証されるまで、その状態をレジスタファイル１１６内に（または、別の実施形態では、リオーダバッファ内に）保持しておくことにより、分岐予測が正しくなかった場合に、予測ミスとなった経路に沿って投機的に実行されたオペレーションの結果を、レジスタファイル１１６内で無効にすることができる。
【００１６】
特定のオペレーションのデコード時に、必要なオペランドがレジスタ位置の場合、レジスタのアドレス情報がレジスタマップ１３４（またはリオーダバッファ）に転送され得る。例えば、ｘ８６アーキテクチャでは、８つの３２ビットレジスタ（ＥＡＸ、ＥＢＸ、ＥＣＸ、ＥＤＸ、ＥＢＰ、ＥＳＩ、ＥＤＩおよびＥＳＰなど）が存在する。物理レジスタファイル１１６（またはリオーダバッファ）は、アウトオブオーダー実行が可能となるように、これらの論理レジスタの内容を変える結果を格納するための記憶領域を備えている。デコード時に、論理レジスタのうちの１つの内容を変更すると判断された各オペレーションの結果を記憶するために、レジスタファイル１１６の物理レジスタが割り当てられ得る。このため、あるプログラムの実行中の様々な時点で、レジスタファイル１１６（または別の実施形態ではリオーダバッファ）は、特定の論理レジスタについて投機的に実行された内容を格納しているレジスタを１つ以上有し得る。
【００１７】
レジスタマップ１３４は、オペレーションのデスティネーションオペランドとして指定されている特定の論理レジスタに物理レジスタを割り当て得る。ディスパッチユニット１０４は、あるオペレーションのソースオペランドとして指定されている論理レジスタに割り当てられている割り当て済みの１つ以上の物理レジスタが、レジスタファイル１１６に存在することを判定し得る。レジスタマップ１３４は、その論理レジスタに最後に割り当てられた物理レジスタのタグを提供し得る。このタグは、レジスタファイル１１６にあるオペランドのデータ値にアクセスするか、または結果バス１３０を介した結果転送（result forwarding）によってこのデータ値を受け取るために使用することができる。オペランドがメモリ位置に対応している場合、このオペランド値が、ロード／ストアユニット１２６を介して（結果転送および／またはレジスタファイル１１８内の記憶領域のため）結果バスに提供され得る。このオペレーションがスケジューラ１１８のうちの１つによって発行されると、オペランドのデータ値が実行コア１２４に提供され得る。別の実施形態では、オペレーションがディスパッチされたときに、対応するスケジューラ１１８にオペランド値が提供されてもよい（オペレーションの発行時に、対応する実行コア１２４に提供されるのではない）点に留意されたい。
【００１８】
ディスパッチユニット１０４の出力に提供されたビット符号化されたオペレーションおよび即値データが、１つ以上のスケジューラ１１８に転送され得る。本明細書においては、スケジューラとは、オペレーションの実行の準備が整っていることを検出して、１つ以上の実行ユニットに準備が整ったオペレーションを発行する装置であるという点に留意されたい。例えば、リザベーションステーションは、スケジューラである。各スケジューラ１１８は、実行コア１２４への発行を待機している数個の未処理のオペレーションについて、オペレーション情報（ビット符号化された実行ビットのほか、オペランド値、オペランドのタグおよび／または即値データなど）を保持する機能を備え得る。一部実施形態では、各スケジューラ１１８は、オペランド値の記憶領域を有さない。その代わりに、各スケジューラは、実行コア１２４がオペランド値を（レジスタファイル１１６または結果バス１３０から）利用することができるようになるタイミングを決定するために、レジスタファイル１１６内で利用可能な発行済みのオペレーションと結果を監視し得る。一部実施形態では、各スケジューラ１１８は、特定の実行コア１２４に専用に使用され得る。別の実施形態では、１つのスケジューラ１１８が、１つ以上の実行コア１２４にオペレーションを発行し得る。
【００１９】
スケジューラ１１８は、実行コア１２４が実行するオペレーション情報を一時的に記憶するために設けられ得る。前述のように、各スケジューラ１１８は、未処理のオペレーションに関するオペレーション情報を記憶することができる。さらに、各スケジューラは、実行は既に完了しているが、再度発行される可能性のあるオペレーションのオペレーション情報を記憶することができる。オペレーションは、必要な任意のオペランドの値が実行に間に合うように利用可能になると、実行のため実行コア１２４に発行される。このため、オペレーションの実行順序は、元のプログラム命令のシーケンスの順序と一致しないことがある。データ投機を伴うオペレーションは、データ投機が誤っていた場合に再発行できるように、そのオペレーションが投機的でなくなるまでスケジューラ１１８内に保持され得る。
【００２０】
一実施形態では、各実行コア１２４は、加算と減算の整数演算オペレーションのほか、シフト、ローテート、論理演算オペレーションおよび分岐オペレーションを実行するように構成された構成要素を備え得る。このほか、浮動小数点演算オペレーションに対応するために浮動小数点ユニットが備えられていてもよい。実行コア１２４の１つ以上は、ロード／ストアユニット１２６が実行するロードおよびストアのメモリオペレーションのために、アドレス生成を実行するように構成され得る。
【００２１】
また、実行コア１２４は、条件分岐命令の実行に関する情報を分岐予測ユニットに提供し得、この結果、その分岐が予測ミスとなった場合に、分岐予測ユニットは、予測ミスとなった分岐に後続する命令のうち、命令処理パイプラインに既に入っている命令を破棄し、プリフェッチユニット１０６をリダイレクトし得る。その後、リダイレクトされたプリフェッチユニット１０６は、命令キャッシュ１０６またはシステムメモリ２００から、正しい命令の組のフェッチを開始し得る。このような状況では、元のプログラム順序にある命令のうち、予測ミスとなった分岐命令の後にくる命令の結果を放棄することができ、これには、投機的に実行され、レジスタファイル１１６に一時的に記憶されたものも含まれる。レジスタ値を更新する場合には、実行コア１２４内の構成要素によって得られた結果が、結果バス１３０を介してレジスタファイル１１６に出力され得る。メモリ位置の内容を変更する場合には、実行コア１２４内で得られた結果がロード／ストアユニット１２６に提供され得る。
【００２２】
ロード／ストアユニット１２６は、実行コア１２４とデータキャッシュ１２８との間のインタフェースを取る。一実施形態では、ロード／ストアユニット１２６は、未処理のロードおよびストアのためにデータとアドレス情報を記憶する数個の記憶場所を有するロード／ストアバッファを備えて構成され得る。また、ロード／ストアユニット１２６は、データコヒーレンシが維持されるように、ロード命令と未処理のストア命令との依存性のチェックを実行し得る。
【００２３】
データキャッシュ１２８は、ロード／ストアユニット１２６とシステムメモリ２００の間で転送されるデータを一時的に記憶するために設けられたキャッシュメモリである。前述の命令キャッシュ１０６と同様に、データキャッシュ１２８は、セットアソシエーティブ構成などの各種のメモリ構成で実施することができる。さらに、一部実施形態では、データキャッシュ１０６と命令キャッシュ１２８とを、統合したキャッシュとして実施してもよい。
【００２４】
メモリファイル
【００２５】
図２Ａは、ディスパッチユニット１０４の一実施形態を示す。この実施形態では、ディスパッチユニット１０４は、レジスタマップ１３４とメモリファイル１３２を備える。前述のように、レジスタマップ１３４は、レジスタリネーミングを提供するように構成され得る。レジスタマップ１３４は、各ソースオペランドおよびデスティネーションオペランドの論理レジスタ名を受け取り、その論理レジスタに最後に割り当てられた物理レジスタの物理レジスタ名を出力し得る。メモリファイル１３２は、メモリファイルコントローラ２０２とメモリファイル記憶部２０４とを備える。
【００２６】
メモリファイル記憶部２０４は、１つ以上のエントリ２２０を有する。各エントリ２２０は、アドレス指定パターン２０６と、そのエントリのアドレス指定パターンに関連付けられているタグ２０８を有し得る。各タグは、データ値が生成されるときに、そのデータ値を記憶する場所（リオーダバッファ内またはレジスタファイル１１６内など）を示すことで、データ値を識別し得る。例えば、例示した実施形態に示すように、各タグは、レジスタマップ１３４が示している、そのデータ値を記憶するために割り当てられた物理レジスタを識別し得る。各アドレス指定パターンは、オペレーション内のアドレスを指定するための情報を少なくとも一部有し得る。例えば、図２Ｂを手短に参照すると、例示的なアドレス指定パターン２０６が示される。この実施形態では、アドレス指定パターン２０６は、ベース論理レジスタ名２１０、インデックス論理レジスタ名２１２、および変位２１４を有する。一部のアドレス指定パターン２０６は、メモリ内の特定のセグメントを識別しているレジスタのセグメント論理レジスタ名を有し得る。一部実施形態では、メモリファイル記憶部２０４は、数個のレジスタ、ラッチ、フリップフロップ、およびその他のクロック動作する記憶部から実施され得る。別の実施形態では、メモリファイル記憶部２０４は、１つ以上のランダムアクセスメモリ（ＲＡＭ：Random Access Memory）セルを備え得る。
【００２７】
一部実施形態では、メモリファイル記憶部２０４に記憶されているアドレス指定パターン２０６は、オペレーションで指定された全アドレス指定情報よりも少なくてもよい点に留意されたい。例えば、メモリファイル記憶部２０４のエントリが記憶しているビット数は、変位フィールド２１４中において変位の指定に用いられる全ビットよりも少なくてもよい。別の実施形態では、メモリファイルコントローラ２０２は、メモリファイルのエントリが、特定のオペレーションのアドレス指定情報をすべて記憶できるかどうかに応じて、メモリファイル記憶部２０４のエントリを割り当てるかどうかを選択的に選択してもよい。例えば、メモリファイル記憶部２０４の各エントリが変位情報を最大で１６ビット記憶することができ、あるオペレーションのアドレス指定情報が２４ビットの変位情報を含む場合、メモリファイルコントローラ２０２は、そのオペレーションのアドレス指定情報にメモリファイルエントリを割り当てないこともある。
【００２８】
メモリファイルコントローラ２０２は、未ディスパッチのオペレーションで指定されているアドレス指定パターンと、メモリファイル記憶部２０４のエントリに記憶されているアドレス指定パターンとを比較し得る。オペレーションのアドレス指定パターンが、現在メモリファイル記憶部２０４に記憶されているどのエントリのアドレス指定パターンとも一致しない（すなわち、オペレーションのアドレス指定パターンが、メモリファイル記憶部でヒットしない）場合、メモリファイルコントローラ２０２は、メモリファイル記憶部２０４に新しいエントリを割り当て、そのオペレーションのアドレス指定パターンの少なくとも一部を記憶し得る。割り当てに使用できる空きのエントリがメモリファイル記憶部２０４内に存在しない場合、メモリファイルコントローラ２０２は、ＬＲＵ（最低使用頻度法）、ＦＩＦＯ（先入れ先出し法）、ランダム置換などの置き換え方式を使用して、上書きするエントリを選択し得る。
【００２９】
メモリファイルコントローラ２０２は、割り当てたエントリにオペレーションのアドレス指定パターンを記憶するほか、そのオペレーションのアドレス指定パターンが識別しているメモリ位置からロードしようとしているか、またはそこにストアしようとしている値を識別するタグを含むことがある物理レジスタ名２０８（物理レジスタの名前など）も記憶し得る。例えば、メモリからデータをロードするロードオペレーションが処理されようとしている場合、そのロードオペレーションを受けて割り当てられるエントリは、ロードオペレーションの結果を記憶するために割り当てられる物理レジスタの名前を記憶し得る。メモリ位置にデータを書き込むストアオペレーションが処理されようとしている場合、メモリファイルコントローラ２０２は、そのストアのソース値が記憶されているレジスタの物理レジスタ名をメモリファイル記憶部２０４に記憶し得る。
【００３０】
オペレーションのアドレス指定パターン（またはそのパターンの一部）がメモリファイル２０４内のエントリに既に記憶されている（すなわち、オペレーションのアドレス指定パターンがメモリファイル記憶部でヒットする）場合、メモリファイルコントローラ２０２は、一致したアドレス指定パターンを含むエントリを使用するか変更し得る。ロードオペレーション（特定のアドレスからレジスタに値をロードするオペレーション）が処理されようとしている場合、メモリファイルコントローラ２０２は、一致するエントリに記憶されている物理レジスタ名２０８を出力し得る。ストアオペレーション（レジスタから特定のアドレスに値をストアするオペレーション）が処理されようとしている場合、メモリファイルコントローラ２０２は、一致するエントリに記憶されているタグ（物理レジスタ名２０８など）を、ストアしようとしているデータのタグで上書きし得る。
【００３１】
ロードオペレーションが処理されようとしており、このロードオペレーションがメモリファイル記憶部２０４でヒットする場合、メモリファイルコントローラ２０２が出力するタグが、このタグが識別する記憶された値を、そのロードオペレーションの投機的な結果にリンクするために使用され得る。例えば、一部実施形態では、ロードオペレーションがスケジューラ１１８にディスパッチされると、メモリファイル１３２が出力するタグがスケジューラにも（例えば、投機的なソースオペランドのタグとして）提供され得る。スケジューラ１１８は、このタグが識別する値が（例えば、レジスタファイル１１６内、または結果バス１３０上で）利用可能になると、ロードオペレーションを発行し得る。実行コア１２４は、このロードオペレーションを実行し、この結果、リンクされている値が、ロードオペレーションの投機的な結果として結果バス１３０を介してブロードキャストされ得る（一部実施形態では、ロードの結果として生成されるデータ値にフラグを設定したり、あるいはこの値を投機的な値として識別しなくてもよい点に留意されたい）。別の実施形態では、後述するように、タグを投機マップに記憶することで、データ値がロードオペレーションの投機的な結果にリンクされ得る。
【００３２】
リンクが確立されたことで、タグが識別するデータ値が（例えば、レジスタファイル１１６内、または結果バス１３０上で）ひとたび利用可能になると、投機的な結果を使用して依存関係のあるオペレーションを実行できるように、このデータ値が、ロードの投機的な結果として転送され得る。多くの場合、ロードオペレーションの投機的な結果を使用して依存関係のあるオペレーションを実行できるようになり、ロードオペレーションの非投機的な結果が利用可能になるまで待たされる場合よりもオペレーションを早く実行できるようになる。一部実施形態では、ロードオペレーションを実行することでデータ値が転送され、この結果、データ値がロードオペレーションの投機的な結果として結果バス１３０に出力され得る。例えば、一実施形態では、３サイクルを要してロードを非投機的に実行する代わりに（このロードがデータキャッシュ１２８でヒットすると仮定した場合）、データ値とそのデータ値を識別するタグをロードの結果として出力することで、ロードを１サイクルで実行することができる。別の実施形態では、ディスパッチ時に、メモリファイルコントローラ２０２が出力するタグを、依存関係のあるオペレーション（ロードオペレーションによって生成されるオペランドをとるオペレーション）に投機的なオペランドソースとして直接提供することで、より間接的な方法でデータ値を転送してもよい。データ値を転送する手段は、ロードオペレーションを、投機的なレジスタ間移動オペレーションとして実行されるように変更するか、あるいは、依存関係のあるオペレーションに投機的なオペランドソースのタグとしてタグを提供するように構成された１つ以上のディスパッチユニットと、リンクされているデータ値が利用可能かどうかに応じて、変更したロードオペレーションおよび／または依存関係のあるオペレーションを発行するように構成されたスケジューラと、リンクされているデータ値をロードの結果として出力するか、またはリンクされているデータ値を使用して依存関係のあるオペレーションを実行するように構成された実行コアの１つ以上を備え得る。
【００３３】
前述のように、メモリファイル１３２は、データキャッシュ１２８（またはシステムメモリ２００）内のデータにアクセスするオペレーションのアドレス指定パターンを追跡している。この結果、物理レジスタに記憶されているレジスタ値を、メモリの特定のアドレスに記憶されている値にリンクできるようになる。メモリファイル１３２が、オペレーションストリームから相互に相対的に取り出され、レジスタ値を投機的なロードの結果にリンクするのに用いられる複数のオペレーション間の依存性を許容する点に留意されたい。このため、メモリファイルは、数個の介入オペレーションによって分けられる可能性のある複数のオペレーション間の依存性の履歴（dependency history）を提供し得る。
【００３４】
図３は、ロードオペレーションの投機的な結果をレジスタ値にリンクする方法の一実施形態のフローチャートである。３０１において、レジスタタグとアドレス指定パターンとが関連付けられ、レジスタとアドレスの両方が同じデータ値を記憶している可能性が高いことが示される。タグとアドレス指定パターンは、いずれも最初のロードオペレーションまたはストアオペレーションに対して指定される。例えば、最初のオペレーションがロードオペレーションの場合、タグは、ロードの結果を記憶するために割り当てられた物理レジスタを識別しており、アドレス指定パターンは、ロードのアドレスの算出に使用されるパターンであり得る。あるいは、最初のオペレーションがストアオペレーションの場合、アドレス指定パターンはストアのデスティネーションのアドレスを示しており、タグはストアオペレーションによってストアされるデータを識別し得る。一部実施形態では、タグとアドレス指定パターンとは、この両者をメモリファイルのエントリに記憶することで関連付けられ得る。
【００３５】
ステップ３０３〜３０５に示すように、ロードオペレーションのアドレス指定パターンと最初のオペレーションのアドレス指定パターンとが一致する場合、ロードの投機的な結果が、最初のオペレーションに対して指定されたタグが識別するデータ値にリンクされ得る。ステップ３０３〜３１１に示すように、ロードオペレーションのアドレス指定パターンと最初のオペレーションのアドレス指定パターンとが一致しない場合、ロードのアドレス指定パターンと、ロードのデスティネーションのタグとが（例えば、この両者をメモリファイルのエントリに記憶することにより）関連付けられ得る。さらに、ステップ３１３に示すように、データキャッシュにアクセスすることにより、ロードが通常通り実行され得る。一実施形態では、ロードオペレーションのアドレス指定パターンと、以前に実行された２つ以上のオペレーションのアドレス指定パターンとが比較され得る。例えば、ロードのアドレス指定パターンと、現在メモリファイルに記憶されているアドレス指定パターンの各々とが比較され得る。
【００３６】
ロードの投機的な結果が、タグが識別するデータ値にリンクされた場合、ステップ３０７に示すように、そのデータ値が、ロードオペレーションの投機的な結果として１つ以上の依存関係のあるオペレーションに転送され得る。このデータ値は、後で詳しく説明するように、結果転送によって転送されるか、あるいは依存関係のあるオペレーションが、そのデータ値を投機的なオペランドソースとして使用することができるようにする指標（indication）を転送することで転送され得る。一実施形態では、データ値が結果転送によって転送される場合、このデータ値を生成したオペレーションの実行が完了した１サイクル後に、転送されたデータ値を使用して依存関係のあるオペレーションが実行され得る。データ値が、依存関係のあるオペレーションが、そのデータ値を投機的なオペランドソースとして使用することができるようにする指標の形で転送された場合、そのデータ値を生成したオペレーションが実行を完了した直後に、依存関係のあるオペレーションを発行することができる。３０９に示すように、投機的な結果が転送されてから、投機的な結果が検証され得る。投機的な結果は、データキャッシュにアクセスすることなく転送することができる（つまり、投機的な結果は、データキャッシュにアクセスすることで得られる非投機的な結果よりも早く転送することができる）。
【００３７】
ステップ３０９において、投機的な結果が正しいことが検証された場合、データキャッシュへのアクセスを実行せずに、ロードオペレーションを完了することができる。しかし、ステップ３０９において、投機的な結果が正しくないと判定された場合、正しい結果を取得するため、データキャッシュに対するアクセスが実行され得る（図示せず）。この場合、ロードの投機的な結果を使用して実行された依存関係のある全てのオペレーションが、ロードの正しい結果を使用して再実行され得る。場合によっては、（ステップ３０７において）リンクされているデータ値をロードの投機的な結果として転送する前に、（ステップ３０９において）検証を実行してもよい点に留意されたい。このような状況では、ロードは通常通り実行されるか、あるいはリンクが正しいと判定された場合は、データ値がロードオペレーションの非投機的な結果として転送され得る。
【００３８】
メモリファイル１３２の動作をさらに詳しく説明するため、ディスパッチユニット１０４が処理する命令のシーケンスに次の命令が含まれるとする。
MOV EBX, [EDX + EAX - 変位Ａ]      （ＬＯＡＤ１）
…
MOV ECX, [EDX + EAX - 変位Ａ]      （ＬＯＡＤ２）
…
MOV [EDX + EAX - 変位Ａ], EAX      （ＳＴＯＲＥ１）
【００３９】
これらのオペレーションの各々は、プログラムの順序内で１つ以上の介入命令によって分けられる可能性がある。上に示すように、これらの３つのオペレーションは、同じアドレス指定パターン（EDX + EAX - 変位Ａ）を有する。
【００４０】
ＬＯＡＤ１のアドレス指定パターンがメモリファイル１３２に提供されると、メモリファイルコントローラ２０２は、ＬＯＡＤ１のアドレス指定パターンと一致するアドレス指定パターンがないか、メモリファイル記憶部２０４を調べ得る。このアドレス指定パターンがメモリファイル記憶部２０４でヒットしないとすると、メモリファイルコントローラ２０２は、エントリを割り当てて（その際、未割当のエントリを使用するか、割り当て済みのエントリに上書きする）、ロードオペレーションのアドレス指定パターンと、レジスタマップ１３４によって提供されるロードオペレーションのデスティネーションの物理レジスタの物理レジスタ名との少なくとも一部を記憶し得る。このロードオペレーションはメモリファイル記憶部でヒットしないため、メモリファイルコントローラ２０２は、このロードオペレーションのタグを出力することができない。
【００４１】
続いて、メモリファイル１３２によってＬＯＡＤ２が処理されると、（介入オペレーションによってＬＯＡＤ１のエントリが上書きされていないとすると、）そのアドレス指定パターンは、ＬＯＡＤ１に対して割り当てられたエントリのアドレス指定パターンに一致し得る。ＬＯＡＤ２のアドレス指定パターンがメモリファイル記憶部２０４でヒットすると、メモリファイルコントローラ２０２は、ＬＯＡＤ１の結果を記憶するために割り当てられた物理レジスタの物理レジスタ名を出力し得る。この物理レジスタ名は、ＬＯＡＤ１によってロードされたデータ値を、ＬＯＡＤ２の投機的な結果にリンクするために使用され得る。
【００４２】
メモリファイル１３２によってＳＴＯＲＥ１が処理されると、（この場合も、介入オペレーションによってＬＯＡＤ１のエントリが上書きされていないとすると、）そのアドレス指定パターンは、ＬＯＡＤ１に対して割り当てられたエントリにヒットし得る。メモリファイルコントローラ２０２は、（ＬＯＡＤ２のときのように）ＬＯＡＤ１の結果を記憶するために割り当てられた物理レジスタの物理レジスタ名を出力するのではなく、そのエントリに記憶されている物理レジスタ名を、ＳＴＯＲＥ１によってストアされようとしているデータを格納しているレジスタの物理レジスタ名２０８で上書きし得る。このため、その後処理されるロードオペレーションがこのエントリにヒットすると、メモリファイルコントローラ２０２は、ＬＯＡＤ１のデスティネーションレジスタの物理レジスタ名ではなく、ＳＴＯＲＥ１のソースの物理レジスタの物理レジスタ名を出力するようになる。
【００４３】
メモリファイル１３２は投機的な構造として使用されているため、メモリファイル記憶部２０４に記憶されている情報が正確であるかどうかによって、プロセッサ１００の正常な動作が重大な影響を受け得ない（例えば、メモリファイル１３２内の予測ミスによって、プロセッサ１００の出力のエラーが発生しないことがある）。しかし、ロードオペレーションの投機的な結果と物理レジスタに記憶されている値とを正確にリンクすること、および／または予測ミスとなった投機的なリンクによって引き起こされる性能ペナルティーを低減することによって得られる恩恵を高めるために、メモリファイル１３２の精度を改善することは望ましいといえる。一部実施形態では、アドレスの指定に使用するレジスタに対する更新が検出された場合に、メモリファイル記憶部２０４のエントリを無効にすることによって、メモリファイル１３２の精度を向上させることができる。例えば、各アドレス指定パターンに、アドレス計算のためのベースおよびインデックスの識別に使用する１つ以上の論理レジスタ識別子が含まれ得る。後続のオペレーションが、エントリのアドレス指定パターン２０６の一部として指定されている論理レジスタの１つを変更する場合、そのエントリが無効にされ得る。このため、図２Ａに示すように、エントリの無効処理を実行するために、各オペレーションのデスティネーションレジスタの論理レジスタ名が、メモリファイル１３２に入力され得る。
【００４４】
さらに、一部実施形態では、特定のアドレスにあるデータに別のデバイスが書込みアクセスを取得したことが検知されると、メモリファイル記憶部２０４内のエントリが無効にされ得る。同様に、予測ミスが検出されると、エントリが無効にされ得る。通常、メモリファイル記憶部２０４のエントリの精度に影響を及ぼす可能性のある条件などの多くの条件が監視されて、エントリを無効にすべきタイミングを決定するために使用され得る。しかし、メモリファイル１３２は投機的な構造であるため、特定の監視方法を実施するために必要となる追加ハードウェアのコストが、メモリファイルの精度を改善できる可能性を上回る場合、これらの監視方法の一部を実施しない実施形態もある。
【００４５】
メモリファイルの検証
【００４６】
ロード／ストアユニット１２６（またはプロセッサ１００に存在し、リンクを検証するための別の手段）は、メモリファイル１３２によって識別される物理レジスタに記憶されている値と、ロードオペレーションの投機的な結果とのリンクを検証し得る。リンクが正しくない場合、ロードストアユニット１２６はロードオペレーションを再発行させるか、ロードオペレーションの正しい結果を結果バス１３０上にブロードキャストするか、この両方を実行し得る。ロードが再発行されると、ロードの投機的な結果を使用して実行された依存関係のあるすべてのオペレーションが再発行され、更新後の非投機的な値を使用して実行される。別の実施形態では、リンクが正しくない場合、プロセッサ１００は投機ミス後に発生したオペレーションを破棄して、ロードオペレーションの正しい結果を使用してこれらのオペレーションの実行を再開し得る。
【００４７】
一部実施形態では、リンク検証は、ロードストアユニット１２６において、オペレーションのアドレスを比較することによって実行され得る。ロードストアユニット１２６は、様々なメモリオペレーションのアドレスを比較して、本来リンクされるべきであったオペレーションを検出し得る。一実施形態では、ロードストアユニット１２６は、ストアからロードへの（store-to-load）転送比較器を使用して、投機的なリンクを検証し得る。ストアからロードへの転送比較器は、リンク検証に使用されるほか、先のストアから後のロードの結果を転送するために使用され得る。例えば、ロードストアユニットは、ストアからロードへの転送を実行するために使用される比較器を備え得る。これらの比較器は、未処理の各ロードのアドレスを、先のストアの組のアドレスと比較し得る。後のロードのアドレスと一致するアドレスを有する先のストアの組のうち、最も新しいものが選択され得る。その後、先のストアの組から選択したストアによってストアされたデータが、ロードの結果として転送され得る。
【００４８】
図４Ａは、オペレーションのアドレスを比較することによってリンク検証を実行するために、ストアからロードへの転送（store-to-load forwarding：ＳＴＬＦ）比較器２８０を使用するように構成されたロードストアユニット１２６の一実施形態を示す。図に示すように、ロードストアユニット１２６は、未処理のロードとストアのための記憶部を備え得る。図に示した実施形態では、ロードとストアのそれぞれの記憶部が（ロード記憶部２５０とストア記憶部２６０内に）設けられているが、別の実施形態では、ロードとストアが同じオペレーション記憶部に記憶されてもよい（例えば、追加のフィールドにより、各オペレーションがロード、ストア、またはこの両者であるかを示すなど）。一部実施形態では、このオペレーション記憶部は、スケジューラ１８の一部であってもよい。
【００４９】
各ロードオペレーションを識別する情報が、ロード記憶部２５０のエントリ２５２に格納され得る。この情報には、ロードオペレーションを識別するタグ２５４、ロードの投機的な結果がリンクされている値を持つメモリオペレーション（別のロードまたはストア）を識別する転送タグ２５６、およびロードのターゲットのアドレスを示すアドレス２５８が含まれ得る。他のフィールド（図示せず）が含まれてもよい。
【００５０】
転送タグ２５６は、メモリファイル１３２内でロードオペレーションのヒットがみつかると、メモリファイル１３２によって生成され得る（このロードオペレーションは、その投機的な結果を、メモリファイルが生成するタグによって識別されるデータ値にリンクしており、“リンク先（linking）ロード”と呼ぶ）。メモリファイル１３２は、タグ２０８とアドレス指定パターン２０６をメモリファイルの各エントリ２２０に記憶するほかに、そのエントリ２２０の割当を生じさせた元のメモリオペレーション（ロードまたはストアなど）を識別するタグを記憶し得る。このタグは転送タグ２５６として出力され得、先のメモリオペレーション（そのオペランドが後のメモリオペレーションの投機的な結果にリンクされている）を識別している。
【００５１】
各ストアオペレーションを識別する情報が、ストア記憶部２６０内のエントリ２６２に記憶され得る。この情報には、そのストアオペレーションを識別するタグ２６４と、そのストアオペレーションのターゲットのアドレスを示すアドレス２６８が含まれる。
【００５２】
ＳＴＬＦ比較器２８０は、ロードが、データをそこから転送してくるストア（存在する場合）を決定するように構成され得る。さらに、ＳＴＬＦ比較器２８０は、ロードオペレーションの投機的な結果と値とのリンクを検証し得る。このリンクは、前述のようにメモリファイル１３２によって生成され得る。ＳＴＬＦ比較器２８０は、ロードオペレーションのアドレス２５８を、１つ以上のストアオペレーションのアドレス２６８と比較して、そのロードが本来そこからデータを転送すべきだったストア（存在する場合）を検索することによって、ロードオペレーションの投機的な結果とストアのオペランドとのリンクを検証するように構成され得る。一致するストア（リンク元のロードと同じアドレスを持つストア）がみつからないが、ロードの投機的な結果がデータ値にリンクされていることをロードの転送タグ２５６が示す場合、ＳＴＬＦ比較器２８０は、リンクが正しくないという指標を出力し得る（後述するように、ロードがそこからテータを転送した可能性のあるロードがほかに特定されない場合）。一致するストアがみつかったが、この一致したストアのタグ２６４が、ロードオペレーションの転送タグ２５６と一致しない場合、ＳＴＬＦ比較器２８０は、同様にリンクが正しくないという指標を出力し得る。一致するストアがみつかり、この一致したストアのタグ２６４が、ロードオペレーションの転送のロードと一致した場合、ＳＴＬＦ比較器２８０は、リンクを検証したことを示す指標を出力し得る（または、単にリンクが正しくないという指標を出力しない）。一部実施形態では、この検証プロセスの少なくとも一部分が、ロードに対し、ストアからロードへの転送が実行されるプロセスとほぼ同時に行われ得る。
【００５３】
特定のロードの投機的な結果が別のメモリオペレーションのオペランドにリンクされていない場合、そのロードの転送タグ２５６が、無効な値にセットされるか、あるいはそのロードに対してリンク検証を実行する必要がないことを示す値にセットされ得る。ＳＴＬＦ比較器２８０は、このようなロードに対して、ストアからロードへの転送を実行するが、リンクの検証は実行しないことがある。
【００５４】
ＳＴＬＦ比較器２８０は、ロードの投機的な結果とストアのオペランドとのリンクの検証のほかに、ロードの投機的な結果と他のロードのオペランドとのリンクを検証するようにも構成され得る。例えば、メモリファイル１３２が、後のロードの投機的な結果を、先のロードのオペランドにリンクしていることがある。このため、後のロードの転送タグ２５６が、先のロードを識別していることがある。ＳＴＬＦ比較器２８０は、プログラムの順序において、リンクされたロード同士の間に、後のロードのアドレスと一致するストアアドレスを有するストアが存在しないことを検証することによって、このようなロード間リンクを検証することができる。後のロードと先のストア間のリンクの検証と同様に、ＳＴＬＦ比較器２８０が、リンクが正しくない（例えば、介在するストアのアドレスが、後のロードのアドレスと一致するため）と判定した場合、ＳＴＬＦ比較器２８０は、リンクが正しくないという指標を出力し得る。
【００５５】
一実施形態において、ＳＴＬＦ比較器は、リンク元のロードよりも先のロードおよびストアの組から、その投機的な結果が先のオペレーションのオペランドにリンクされているロードオペレーションのアドレスと一致するアドレスを有するオペレーションのうち、最も後のものを検索することによって、一対のロードオペレーション間のリンクを検証し得る。一致する最も後のオペレーションが、リンク元のロードオペレーションと共に記憶された転送タグ２５６によって識別されるオペレーションである場合、ＳＴＬＦ比較器はリンクが正しいと判定し得る。一致するオペレーションがみつからないか、あるいは一致するオペレーションが、転送タグ２５６によって識別されるオペレーションでない場合、ＳＴＬＦ比較器２８０はリンクが正しくないという指標を出力し得る。
【００５６】
別の実施形態では、ＳＴＬＦ比較器２８０は、（リンク元のロードより先で、かつリンク元のロードのアドレスと一致するアドレスを有するロードの組から）一致する最も後のロードと、（リンク元のロードより先で、かつリンク元のロードのアドレスと一致するアドレスを有するストアの組から）一致する最も後のストアを検索し得る。一致する最も後のロードが一致する最も後のストアよりも（プログラムの順序において）後で、かつ一致する最も後のロードが、リンク元のロードの転送タグ２５６によって識別されるオペレーションである場合、ＳＴＬＦ比較器２８０は、リンクが正しいと判定し得る。一致する最も後のロードが一致する最も後のストアよりも先の場合、ＳＴＬＦ比較器２８０はリンクが正しくないと判定し得る（この理由は、例えば、リンク元のロードは本来、一致する最も後のストアにリンクされているはずだからである）。
【００５７】
リンク元のロードが、リンク元のロードよりも先のストアのうち、最も後のものよりも、プログラムの順序において後にくる一致する任意のロードに適切にリンクされている場合もある（一致する先のロードのうちの最も後のロードのみに適切にリンクされているのではない）ため、ＳＴＬＦ比較器２８０は、一対のロード間のリンクの検証中に、複数の一致するロードを比較し得る。このため、ＳＴＬＦ比較器は、一致する最も後のロードを識別するのみならず、一致するロードの組を識別して、その組の任意の１つが、リンク元のロードの転送タグ２５６によって識別されるリンク先ロードであるかどうかを判定し得る。
【００５８】
場合によっては、リンク先のメモリオペレーションが、リンクが検証される前に、リタイアされてしまう、すなわちプロセッサ１００から削除されてしまうことがある。このため、先のオペレーションが削除されたため、リンクが他の点では正しい場合であっても、ＳＴＬＦ比較器２８０は、削除されたオペレーションのオペランドにその投機的な結果がリンクされているロードについて、一致するメモリオペレーションを特定できない可能性がある。リンクが検証できない状況では、ＳＴＬＦ比較器２８０は、リンクが正しくないという指標を出力し得る。
【００５９】
リンクが正しくないという指標を受けると、メモリファイル１３２の全部または一部が無効にされ得る。例えば、一実施形態では、当該ロードの投機的な結果を提供するために使用されたメモリファイルのエントリが、無効にされ得る。別の実施形態では、ＳＴＬＦ比較器２８０によって正しくないリンクが検出されると、メモリファイル１３２の全体が無効にされ得る。さらに、ロードの結果に依存している、依存関係のあるオペレーションが、メモリファイル１３２から取得される投機的な結果の代わりに、ロードの非投機的な結果を使用して実行され得る（あるいは、オペレーションが既に実行されている場合は再実行される）。
【００６０】
図に示した実施形態ではＳＴＬＦ比較器を用いてリンク検証を実行しているが、他の実施形態では、メモリオペレーションのアドレスおよび／またはアドレス指定パターンを比較することによってリンク検証を実行するために、ストアからロードへの転送に用いられない専用の比較器を使用してもよいことに留意されたい。
【００６１】
一部実施形態では、メモリファイル１３２が、ロードの投機的な結果がリンクされるデータ値を識別するタグを出力する度に、メモリファイル１３２は、そのロードにリンクされるメモリオペレーションに関連付けられたフラグをセットさせ得る。例えば、ロードのアドレス指定パターンがメモリファイルのエントリでヒットしたことを受けて、ロードの投機的な結果が、先のストアオペレーションのストアオペランドにリンクされると、メモリファイル１３２は、投機的な結果にリンクするためにデータ値のタグを出力し、先のストアが後のロードにリンクされたことを示す指標を出力し得る。この指標を受けて、ロードストアユニット１２６は、図４Ｂに示すように、先のストアに関連付けられているリタイアフラグ２６９をセットし得る。ロードストアユニット１２６は、ストアのオペランドにその投機的な結果がリンクされている後のロードオペレーションがすべて検証されるまで、リタイアフラグ２６９を保持し続け得る。一部実施形態では、後のロードの投機的な結果が、先のロードオペレーション（図示せず）のデスティネーションオペランドにリンクされている場合にも、先のロードに関連付けられているリタイアフラグがセットされ得る点に留意されたい。
【００６２】
ロードストアユニット１２６および／またはリタイアキュー１０２は、各ストアオペレーションに関連付けられているリタイアフラグ２６９を用いて、そのストアオペレーションに割り当てられたエントリ２６２の割当を解除すべきタイミング、およびそのストアオペレーションをリタイアさせるタイミングを決定することができる。ストアオペレーションのリタイアフラグがセットされている場合、ロードストアユニット１２６は、ストアのオペランドと後のストアの投機的な結果とのリンクが検証可能なように、そのストアオペレーションに対するエントリ２６２の割当を保持し得る。同様に、リタイアフラグ２６９がセットされている間は、リタイアキュー１０２はオペレーションをリタイアさせることができない。ロードオペレーションに関連付けられているリタイアフラグを使用する実施形態では、ロードストアユニット１２６および／またはリタイアキュー１０２は、ストアオペレーションに関して記載したのと同様の方法で、各ロードオペレーションに関連付けられているリタイアフラグを用いて、そのロードオペレーションに割り当てられているエントリ２５２の割当を解除すべきタイミング、およびそのロードオペレーションをリタイアさせるタイミングを決定することができる。
【００６３】
図５Ａは、一実施形態による、ロードオペレーションの投機的な結果と特定のタグによって識別されるデータ値とのリンクを検証する方法を示すフローチャートである。ステップ３２１および３２３に示すように、ロードの投機的な結果が、（プログラムの順序において）先のメモリオペレーションのオペランドにリンクされている場合、リンク先の先行オペレーションのタグが、リンク元の（後の）ロードと共に保存され得る。例えば、図２Ａに示したものなどのメモリファイルを使用して、リンク元のロードの投機的な結果が、先のストアによってストアされたデータ値に、あるいは先のロードによってロードされたデータ値にリンクされ得る。先のロードまたはストアのタグは、リンク元のロードがリンクされているオペレーションを識別するために、そのリンク元ロードと共に（例えば、スケジューラおよび／またはロードストアユニット内に）記憶され得る。
【００６４】
ステップ３２５に示すように、ある時点で、ロードストアユニットは、リンク元のロードとリンク先の先行オペレーションとのリンクを検証し得る。一部実施形態では、ロードストアユニットは、ＳＴＬＦ比較器を使用してこの検証を実行し得る。ＳＴＬＦ比較器は、リンク検証の実行のほかに、ストアからロードへの転送を実行するためにも使用され得る。別の実施形態では、ロードストアユニットが、リンク検証のみを実行する専用の論理回路を有してもよい。
【００６５】
ステップ３２５で判定したように、ロードストアユニットが、リンクが正しいと判定すると、ステップ３２７に示すように、ロードストアユニットは、ロードオペレーションの投機的な結果が、（少なくともメモリファイルによって実行される予測に関して）非投機的であると判定し得る。一部実施形態では、ロードストアユニットは、プロセッサの他の構成要素（スケジューラなど）に対して、リンクが検証されたことを通知し得る。
【００６６】
ステップ３２５および３２９に示すように、ロードストアユニットが、リンクが正しくないと判定した場合、ロードストアユニットは、リンクが正しくないという指標を（例えば、スケジューラおよび／またはディスパッチユニットに）出力し得る。この指標に応えて、リンク元のロードの新しい結果が生成され得る。例えば、ＳＴＬＦ比較器を使用してリンクを検証する場合、ＳＴＬＦ比較器は、検証プロセス中に、リンク元のロードが本来、そこからデータを転送すべきであった元のストアを特定した可能性がある。特定されたストアによってストアされたデータが、ロードオペレーションの非投機的な結果として転送され得る。さらに、正しくないリンクが検出されると、メモリファイル（またはメモリファイルの少なくとも１つのエントリ）が無効にされ得る。
【００６７】
図５Ｂは、一実施形態による、メモリオペレーションに関連するリンクが検証されたかどうかに基づいて、そのメモリオペレーションをリタイアさせる方法のフローチャートである。ステップ３３１〜３３３に示すように、後のロードの投機的な結果が、先のメモリオペレーションによって操作された（例えば、ロードまたはストアされた）データにリンクされている場合、先のオペレーション（リンク先オペレーション）に関連付けられているフラグがセットされ得る。一部実施形態では、このフラグは、スケジューラまたはロードストアユニットに備えられ得る。
【００６８】
ステップ３３５〜３３７に示すように、オペレーションのフラグがセットされている場合、後のロードの投機的な結果と先のオペレーションによって操作されたデータとのリンクが検証されるまで、オペレーションのリタイアが遅延され得る。ステップ３３９に示すように、フラグがセットされていない場合、先のオペレーションは通常通りリタイアされ得る。
【００６９】
上記の例では、アドレス比較を用いて（すなわち、メモリオペレーションによってアクセスされるアドレスを比較することによって）リンク検証を実行しているが、他の実施形態では、値の比較を用いて（すなわち、メモリオペレーションのアクセスによって生成されるデータ値を比較することによって）リンク検証を実行してもよい。例えば、アドレス計算に特定のレジスタ値を使用しないロードオペレーションについて、投機的なリンクの検証のために、そのレジスタ値を使用することによって、リンクが検証されてもよい。アドレス計算に使用されないレジスタが、ロードオペレーションの結果に投機的にリンクされている値をストアするために使用され得る。ロードオペレーションの実結果が得られると、ロードストアユニット（または実行コア）は、本来であれば未使用のレジスタ内の値を、実結果の値と比較し得る。この２つが等しい場合、リンクは正しい。等しくない場合、リンクは誤っており、訂正内容をプロセッサ全体に伝達するために、ロードオペレーションの正しい非投機的な結果がブロードキャストされ得る。さらに、正しくないリンクが検出されたことを受けて、メモリファイルの全部または一部が無効にされ得る。
【００７０】
一実施形態では、投機的にリンクされた結果値を記憶するために使用するレジスタは、インデックスレジスタでありうる。メモリファイルコントローラは、アドレス計算にインデックスレジスタを使用しないメモリオペレーションに対して、メモリファイル記憶部内にエントリを単に割り当てるように構成され得る。
【００７１】
一実施形態では、図６Ａに示すように、ロードストアユニット１２６において、値に基づくリンク検証が実行されてもよい。この場合、ロードストアユニット１２６は、（ストアからロードへの転送により、あるいはデータキャッシュおよび／またはメモリにアクセスすることにより）ロードオペレーションによってロードされた実際値２５５を、ロードオペレーションの投機的な結果２５７と比較するように構成された専用の値比較器２８２を備える。この２つの値が等しい場合、ロードストアユニット１２６はリンクが正しいと判定し得る。等しくない場合、ロードストアユニット１２６は、ロードオペレーションの正しい結果（ロードした値２５５）をブロードキャストし、その結果、任意の依存関係のあるオペレーションが正しい値を用いて実行（または再実行）可能となる。また、ロードストアユニット１２６は、正しくないリンクが検出されると、メモリファイル１３２の１つ以上のエントリを無効にすべきことを示す信号を、ディスパッチユニット１０４に供給し得る。
【００７２】
別の実施形態では、図６Ｂに示すように、値に基づくリンク検証が、実行コア１２４において実行されてもよい。これらの実施形態では、その投機的な結果が、メモリファイル１３２によって識別されるデータ値にリンクされているロードが、ディスパッチユニット１０４によって、ロードオペレーションと比較オペレーションの組み合わせに変換され得る。これらのオペレーションは、ロードストアユニット１２６と機能ユニット１２６にそれぞれ発行され得る。ロードストアユニット１２６は、通常通りロードを実行し得る。ロードの非投機的な結果が利用可能な場合、未使用のアドレス計算レジスタ（インデックスレジスタなど）を介して投機的な結果にアクセスし、この投機的な結果を、ロードストアユニット１２６が生成した非投機的な結果と比較することによって、比較オペレーションが実行され得る。この２つが等しい場合、リンクは正しいが、そうではない場合、リンクは誤っている。
【００７３】
図７は、一実施形態による、ロードオペレーションの投機的な結果と特定のタグによって識別されるデータ値とのリンクを、値比較を使用して検証する方法のフローチャートである。ステップ３４１〜３４３に示すように、ロードの投機的な結果が、（例えばメモリファイルによって）先のメモリオペレーションのオペランドにリンクされている場合、ロードのアドレス計算に必要ではないオペランドが、ロードの投機的な結果を記憶するために使用され得る。例えば、ロードがアドレス計算にインデックスレジスタを使用しない場合、インデックスレジスタが、ロードの投機的な結果を記憶するために使用され得る。
【００７４】
ステップ３４５および３４７に示すように、ロードの実結果がロードの投機的な結果と一致する（例えば、機能ユニットにおいて値比較を実行することによって判定される）場合、リンクが正しく、投機的な結果は非投機的となり得る。一致しない場合、リンクが誤っており、３４９に示すように、任意の依存関係のあるオペレーションに正しい結果を伝達するために、ロードの実結果が結果バスでブロードキャストされ得る。
【００７５】
ロードの投機的な結果の、ソースオペランドとしての転送
【００７６】
各種の実施形態では、多種多様な方法によって、ロードオペレーションの投機的な結果をレジスタのデータ値にリンクすることができる。一部実施形態では、オペランドについて投機的なソースと非投機的なソースの２種類のソースを識別することで値をリンクし得る。投機的なソースとは、リンクされたデータ値であり得る。ロードの投機的な結果にリンクされているデータ値を示すために、投機的なソースがそのロードオペレーションに提供され得る。一部実施形態では、投機的なソースは、このようなロードオペレーションに依存しているオペレーションにも提供され得る。このため、オペランドのなかには、投機的なソースを識別するタグと、非投機的なソースを識別するタグの２つのタグを有するものがあり得る。このような実施形態では、図８に示すように、各スケジューラ１１８は、投機的なオペランドと非投機的なオペランドの両方のためのタグの記憶領域を提供し得る。
【００７７】
図８は、プロセッサに備えられ得るスケジューラ１１８の一実施形態を示す。例示した実施形態では、スケジューラ１１８は、スケジューラコントローラ５０２とオペレーション記憶部５０４とを備える。スケジューラコントローラ５０２は、ディスパッチユニット１０４がオペレーションをディスパッチすると、そのオペレーションに対応する情報を記憶するためのエントリを、オペレーション記憶部５０４内に割り当て得る。例えば、オペレーション記憶部５０４のエントリ５２２は、オペコードフィールド５１０、１つ以上のオペランドフィールドおよび結果フィールド５１６を有し得る。結果フィールド５１６は、そのエントリのオペレーションの結果を記憶すべき物理レジスタを識別するタグを記憶し得る。オペレーションが発行されると、このタグが、１つ以上のタグバス５２０のうちの１つを介して、各スケジューラ１１８に転送され得る。各スケジューラは、未処理のオペレーションについて、その未処理のオペレーションのオペランドが利用可能になるタイミングを決定するために、タグバス５２０を介して転送されたタグと、オペランドのタグ（後述するように投機的なタグと非投機的なタグの両方）とを比較し得る。このため、オペレーションのソースオペランドのタグがタグバス５２０に出力されると、そのオペレーションが発行され得る（あるいは発行の準備が整っていることを知らせるようにマークされ得る）。
【００７８】
各オペランドフィールドは、投機的なオペランドソースを識別している投機的なタグと、非投機的なオペランドソースを識別している非投機的なタグの両方の記憶領域を有し得る。例示したエントリ５２２では、オペランド１の２つのソースは、非投機的なタグ５１２と投機的なタグ５１４とによって識別される。スケジューラ１１８は、オペレーションのオペランドが利用可能となったことを知らせる指標を１つ以上受け取ると、オペレーションを発行するように構成され得る。オペランドは、投機的なソースまたは非投機的なソースのいずれか一方から利用可能であれば、利用可能といえる。オペランドが投機的なソースと非投機的なソースの両方から利用可能な場合、非投機的なソースから利用可能な値を使用してオペレーションが実行され得る。一部実施形態では、スケジューラ１１８は、投機的なオペランドソースのみしか利用できないオペレーションよりも、非投機的なオペランドソースが利用可能なオペレーションを優先して発行するように優先順位を決定し得る。
【００７９】
オペレーションが、一部の、投機的なソースを持つオペランドと、他の、投機的なソースを持たないオペランドとを含みうることに留意されたい。また、同じソースが、オペレーションによって、投機的なソースとなったり、非投機的なソースとなったりすることがある点にも留意されたい。一部実施形態では、オペレーションの実行時に、各オペランドについて、１つのデータ値しか読み出されなくてもよい（例えば、実行コア１２４が、投機的なオペランドソースと、非投機的なオペランドソースの一方を読み出し、両方共読み出すことはない）。これにより、レジスタファイル１１６に追加ポートを追加しなくても済むようになり得る。一部実施形態では、投機的なソースと物理的なソースが同じ記憶場所に（例えば、レジスタファイル１１６内に）記憶されており、投機的なソースは、フラグの設定か、あるいは別の方法によって投機的なソースとして識別されなくてもよい。
【００８０】
多くの実施形態では、オペレーションが実行コアに１２４を発行されたのちも、スケジューラ１１８が、そのオペレーションに割り当てられたエントリを保持するように構成することができる。１つ以上の投機的なオペランドが利用可能となり、スケジューラ１１８によってオペレーションが発行されたときに、スケジューラはそのオペレーションに割り当てられたエントリ５２２を保持し、この結果、投機的なリンクが正しくない場合に当該オペレーションを再発行できるようになる。一部実施形態では、ロード／ストアユニットは、投機的なロード結果が物理レジスタに記憶されているデータ値にリンクされたときに確立される投機的なリンクを検証するように構成され得る。リンクが正しい場合、正しい結果がリンクを介して既に利用可能となっているため、ロードストアユニットは、ロードの非投機的な結果をブロードキャストしないように構成され得る。その場合、オペレーションの非投機的なオペランドソースを識別するタグが、結果バス１３０を介してブロードキャストされていれば、スケジューラ１１８は、そのオペレーションを再発行するように構成され得る。
【００８１】
別の実施形態では、ロード／ストアユニットは、ストアの結果を追加の状態ビットと併せてブロードキャストすることができ、この状態ビットは、ブロードキャストをマスクするか、または投機的なリンクが正しくロードの再発行が不要であることを示す。しかし、投機的なリンクが正しくない場合、ロード／ストアユニットは、ロードの正しい結果を取得して、ロードの結果をブロードキャストするために、データキャッシュおよび／またはメモリへのアクセスを実行し得る。結果が常にブロードキャストされる実施形態では、この追加の状態ビットが、投機的なリンクが誤っていたことを通知してもよい。このため、多くの実施形態では、投機的なリンクが正しくないことを通知するために、プロセッサに既に設けられている同じタグバスと結果バスが使用され得る。別の実施形態では、代替の指標メカニズムが実施されてもよい（例えば、別の結果バス１３０および／または結果タグバス５２０を使用して予測ミスを通知する）。
【００８２】
図９は、投機的なオペランドソースと非投機的なオペランドソースの両方を有するオペレーションを発行および再発行するための方法の一実施形態のフローチャートである。ステップ８０１〜８０３に示すように、あるオペレーションの投機的なオペランドソースが利用可能な場合、そのオペレーションが発行され得る。データ値がレジスタファイル内の特定のレジスタに存在するか、またはデータ値が結果バスに出力されている場合には、オペレーションの投機的なオペランドソースが利用可能であるとされ得る。場合によっては、同じオペランドについて、オペレーションの非投機的なオペランドソースが、投機的なオペランドソースよりも先に利用可能となることがある点に留意されたい。このような状況では、投機的なオペランドソースが利用可能になる前にオペレーションが発行され得る。一部実施形態では、投機的なソースが後から利用可能となっても、オペレーションが再発行されなくてもよい。
【００８３】
ステップ８０５に示すように、発行されたオペレーションが、投機的なオペランドソースが提供するデータ値を使用して実行され、８０７に示すように、このオペレーションの結果がブロードキャストされ得る。オペレーションの結果がブロードキャストされると、依存関係のあるオペレーションが実行できるようになる。
【００８４】
その少し後、投機的なソースが正しくないと判定された場合（例えば、投機的なソースが提供するデータ値と非投機的なソースが提供するデータ値とが一致しないか、あるいは投機的なソースのタグの生成に使用した投機的なリンクが正しくない場合）、非投機的なソースのタグが、投機的なソースの値が正しくないことを知らせる指標としてブロードキャストされ得る。非投機的なソースのタグをブロードキャストする際には、スケジューラが、オペレーションを再発行することで応答できるように、タグがブロードキャストされる。例えば、一部実施形態では、タグがブロードキャストされており、このタグに関連付けられている状態フラグが特定の値にセットされている場合に、スケジューラが応答してもよく、別の実施形態では、関連する状態フラグを使用せず、スケジューラは、非投機的なタグがブロードキャストされる度にオペレーションを再発行するように構成されていてもよい。
【００８５】
ソースが投機的であるか非投機的であるかに基づく発行の準備状態の判定
【００８６】
図１０に示すような一部実施形態では、スケジューラ１１８は、オペランドの投機的なソースが利用可能であること、またはオペランドの非投機的なソースが利用可能であることの一方（同時にこの両者ではない）によって示される、特定のオペランドの準備状態（readiness）を判定するように構成され得る。これにより、結果タグバス５２０に対する潜在的に有害なロードの影響（loading effect）を低減できる可能性がある。
【００８７】
図１０において、スケジューラは、比較器５３４を使用して、マルチプレクサ５３２によって選択される、オペランドの投機的なソースのタグ５１４かオペランドの非投機的なソースのタグ５１２の一方を、結果タグバス５２０に現在出力されているタグと比較することによって、オペレーションのオペランドの準備状態を判定する。このため、スケジューラは、結果タグバス５２０で投機的なソースが利用可能であること、または非投機的なソースが利用可能であることの一方（この両者ではない）を監視することによって、オペレーションが発行の準備が整っているかどうかを判定し得る。このように、スケジューラは、結果タグバスにブロードキャストされているそれぞれの結果タグを、オペランドの投機的なソースのタグとオペランドの非投機的なソースのタグの両方と比較する代わりに、ブロードキャストされている結果タグをオペランドのソースタグの一方と比較するだけで済む。オペレーションの全オペランドが（投機的なソースか非投機的なソースの一方から）利用可能な場合、そのオペレーションのレディフラグ５０８がセットされ、オペレーションの発行の準備が整っていることが示され得る。
【００８８】
誤投機検出論理回路５３０は、スケジューラが、オペレーションの投機的なソースか非投機的なソースの一方に基づいて、オペレーションの発行の準備が整っていることを判定するかどうかを制御し得る。一部実施形態では、各オペレーションが、結果バス５２０上で、投機的なソースか非投機的なソースの一方を個々に監視することができるように、誤投機検出論理回路５３０は、スケジューラ内の未処理のオペレーションの各々に対して重複して設けられ得る。別の実施形態では、全オペレーションが投機的なソース（利用可能な場合）を監視中か、あるいは全オペレーションが非投機的なソースを監視中となるように、未処理の全オペレーションが同様に制御され得る。
【００８９】
誤投機検出論理回路５３０は、誤った投機が検出されていない間は、スケジューラが、オペレーションが発行の準備が整っているかどうかを、その投機的なソースが利用可能であることに基づいて判定するように、スケジューラ１１８の挙動を制御するように構成され得る。誤った投機が検出されると、誤投機検出論理回路５３０は、非投機的なソースの準備状態を監視するように「切り替わり（flip）」得る。例えば、ロードストアユニット１２６が、アドレスまたは値の比較により正しくないリンクを検出した場合、誤投機論理回路５３０は、非投機的なソースを使用して、オペレーションの発行の準備状態を判定するように切り替わり得る。また、正しくないリンクが検出されると、メモリファイル１３２の全部または一部、あるいは投機の他のソースが無効にされ得る。誤投機検出論理回路５３０は、投機のソースが再設定されるか、あるいは別の方法によって誤った投機が是正されるまで、投機的なソースの代わりに非投機的なソースを監視し続け得る。
【００９０】
誤投機検出論理回路５３０が、非投機的なソースが利用可能であることの監視から、投機的なソースが利用可能であることの監視に「切り替え」たときに、スケジューラ１１８が、非投機的なソースが利用可能であるかどうかに関する情報を持っていない可能性がある。一部実施形態では、スケジューラ１１８は、非投機的なソースが全て利用可能であり、このためオペレーションは発行の準備が整っていると仮定し得る。この仮定が正しくない場合、非投機的なソースが実際に利用可能になったとき（例えば、非投機的なソースのタグが、結果タグバス５２０にブロードキャストされていることが検出された場合など）に、オペレーションが再発行され得る。
【００９１】
投機レジスタマップ
【００９２】
図１１は、プロセッサ１００に備えられ得るディスパッチユニット１０４の別の実施形態を示す。この実施形態では、ディスパッチユニット１０４は、レジスタマップ１３４、メモリファイル１３２、および投機レジスタマップ８００を備える。レジスタマップ１３４と同様に、投機レジスタマップ８００は、論理レジスタ名を物理レジスタ名に変換し得る。しかし、投機レジスタマップ８００は、（メモリファイル１３２が、物理レジスタに記憶されている値をロードオペレーションの投機的な結果にリンクした場合など）、論理レジスタ名を物理レジスタ名に投機的にマップし得る。投機レジスタマップ８００によって、アドレス指定パターンを含まないオペレーションの投機的なオペランド値を、レジスタのデータ値にリンクできるようになり得る。例えば、論理レジスタＥＡＸについて有効な投機マップが存在する場合、ソースオペランドとしてＥＡＸを有するオペレーションは、レジスタマップ１３４が提供する非投機的なタグと、投機レジスタマップ８００が提供する投機的なタグの２つのソースタグを有し得る。投機的なソースが利用可能になると直ちにオペレーションが発行できるため、投機レジスタマップ８００は、介入するロードおよびストアをすべて迂回して、投機的なオペランドのタグを介して、データの使用先をデータの作成元に直接連結し得る。一部実施形態（投機的なレジスタ状態を記憶するための記憶領域を備えたリオーダバッファを有する実施形態など）では、投機マップが、物理レジスタ名以外のタグを記憶してもよい点に留意されたい。
【００９３】
投機レジスタマップ８００は、投機レジスタマップコントローラ８０２と投機レジスタマップ記憶部８０４を備える。投機レジスタマップ記憶部は、１つ以上のエントリ８２０を有し得る。各エントリ８２０は、特定の論理レジスタと関連付けられており、その論理レジスタが現在投機的にマップされている物理レジスタの物理レジスタ識別子８１２を示し得る。また、各投機レジスタマップエントリ８２０は、そのエントリが現在有効かどうかを示す指標（図示せず）も有し得る。一実施形態では、投機レジスタマップ記憶部８０４は、論理レジスタ毎に１つのエントリを有し得る。別の実施形態では、投機レジスタマップ８０４は、論理レジスタの個数よりも少ない数のエントリを有し得る。このような実施形態では、各エントリ８２０は、現在そのエントリに対応している論理レジスタを示す指標を有し得る。
【００９４】
投機レジスタマップコントローラ８０２は、ロードオペレーションの投機的な結果が、特定の物理レジスタ名によって識別されるデータ値にリンクされたという指標を受けて、エントリ８２０を更新するように構成され得る。例示した実施形態では、この指標はメモリファイル１３２から提供される。更新対象となるエントリ８２０は、ロードオペレーションのデスティネーションとして指定されている論理レジスタに対応するエントリである。このエントリは、当該ロードオペレーションに対してメモリファイル１３２が出力する物理レジスタ識別子を有するように更新され得る。別の実施形態では、投機レジスタマップのエントリは、メモリファイル１３２が提供する以外の指標を受けて作成され得る（これらの実施形態の一部では、ディスパッチユニット１０４がメモリファイルを備えていなくてもよい）。例えば、ディスパッチユニット１０４は、条件付きの転送命令“CMOV EAX, EBX if Z”を検出し、これに対して、ＥＡＸの投機レジスタマップのエントリが、現在ＥＢＸにマップされている物理レジスタを識別すべきことを示し得る。一般に、投機レジスタマップエントリは、論理レジスタが特定の物理レジスタに投機的にマップされるべきことを示す任意の予測機構に応えて作成され得る。
【００９５】
一部実施形態では、オペレーションがレジスタマップ１３４に提供されるサイクル中に、投機レジスタマップ８００にもオペレーションが提供され得る。レジスタマップ１３４が、オペレーションに対し非投機的なレジスタリネーミングを実行すると、投機レジスタマップ８００は、そのオペレーションの投機的なソースオペランドの１つを記憶していると示される論理レジスタのいずれかが、特定の物理レジスタにリンクされているかどうかを通知し得る。そのオペレーションの論理レジスタソースのうちの１つに対応する有効なエントリが、投機レジスタマップ記憶部８０４に存在する場合、投機レジスタマップコントローラ８０２は、その論理レジスタのエントリに記憶されている物理レジスタ名を出力し得る。オペレーションがスケジューラ１１８にディスパッチされるときに、ディスパッチユニット１０４は、この投機的な物理レジスタ名を投機的なソースとして出力し得る。このため、ＡＤＤオペレーションが投機レジスタマップ８００に提供され、ＡＤＤオペレーションのソースのうちの１つに対応する有効なエントリが投機レジスタマップ記憶部８０４に存在する場合、そのエントリにおいて識別される物理レジスタのタグが、投機的なソースオペランドのタグとしてスケジューラ１１８に提供され得る。前述のように、スケジューラは、投機的なオペランドのタグと非投機的なオペランドのタグの両方を記憶するように構成され得、一部実施形態では、結果バスに非投機的なタグがブロードキャストされると、オペレーションを（発行済みの場合に）再発行するように構成され得る。
【００９６】
特定の論理レジスタのデータ値が変更されたことを示す指標を受けると、投機マップ内のエントリが無効にされ得る。例えば、オペレーション“ADD EAX, ECX”がディスパッチユニット１０４によって処理されると、ＡＤＤオペレーションによってＥＡＸレジスタの値が変更されるため、投機レジスタマップコントローラ８０２は、ＥＡＸに現在割り当てられている投機マップエントリを無効にし得る。
【００９７】
一般に、１つのオペレーションの投機的な結果がレジスタのデータ値にリンクされる度に、投機的なオペランドのタグがスケジューラ１１８に提供され得る。一部実施形態では、投機的な結果をレジスタ値にリンクするために、メモリファイル１３２および数サイクルにわたって依存性を追跡する他の構造（後述するように投機レジスタマップなど）が使用され得る。例えば、ディスパッチユニット１０４は、メモリファイル１３２がリンクを識別すると、オペレーションに対する投機的なタグを生成し得る。一部実施形態では、このような投機マップを使用せずに投機的なタグが生成され得る。例えば、命令のシーケンスに以下が含まれるとする。
ADD EBX, EBX                         （ＡＤＤ１）
MOV [アドレス指定パターンＡ], EBX    （ＳＴＯＲＥ１）
ADD [アドレス指定パターンＡ], ECX    （ＡＤＤ２）
【００９８】
これらの命令は、連続する命令であり得る（例えば、これらの命令は、プログラムの順序内で連続的に実行され得る）。これらの命令は、実行コア１２４内での実行のため、以下の構成要素オペレーション（物理アドレスに変換した論理アドレスで示す）に分離され得る。
ADD PR2, PR2, PR1                      （ＡＤＤ１）
MOV [アドレス指定パターンＡ], PR2      （ＳＴＯＲＥ１）
MOV PR3, [アドレス指定パターンＡ]      （ＡＤＤ２のロード）
ADD PR4, PR3, PR5                    （ＡＤＤ２の加算）
MOV [アドレス指定パターン], PR4      （ＡＤＤ２のストア）
【００９９】
ディスパッチユニット１０４は、ＡＤＤ２の構成要素オペレーションであるロード、加算およびストアの各オペレーションをディスパッチする前に、このシーケンス内の構成要素オペレーション間に、投機的な結果にリンクできるようにする依存性が存在するかどうかを検出し得る。さらに、ＳＴＯＲＥ１によってストアされるデータは、ロードの投機的な結果に（例えば、メモリファイルによって）リンクすることができる。介入オペレーションが存在しないため、ディスパッチユニットは、ロードオペレーションと加算オペレーション（いずれのオペレーションも同じ命令に由来する）の間の同じディスパッチサイクルにおける依存性を検出するために必要な情報をすべて有し得る。ディスパッチユニット１０４は、この２つの依存性に基づいて、ＳＴＯＲＥ１によってストアされるデータのタグ（ＰＲ２）を、ＡＤＤ２の一部として実行されるロードオペレーションの投機的な結果にリンクし得る。ディスパッチユニットは、今度はこの投機的なリンクによって、ＡＤＤ２の一部として実行される加算オペレーションのソースを、ＰＲ２に記憶されている値にリンクすることができる。このため、ディスパッチユニット１０４は、ＰＲ２が加算のオペランドのうちの１つのソースとして投機的に使用できるが、ＰＲ３はこのオペランドの非投機的なソースであることを示す指標を出力し得る。このため、一実施形態では、ディスパッチユニットが出力するオペレーションとオペランド識別子は、以下のように指定され得る。
ADD PR2, PR2, PR1                      （ＡＤＤ１）
MOV [アドレス指定パターンＡ], PR2      （ＳＴＯＲＥ１）
MOV PR3, [アドレス指定パターンＡ]      （ＡＤＤ２のロード）
ADD PR4, PR2＊, PR3, PR5      （ＡＤＤ２の加算であり、PR2＊はＥＣＸの投機的なソースであり、PR3はＥＣＸの非投機的なソースである）
MOV [アドレス指定パターン], PR4       （ＡＤＤ２のストア）
【０１００】
別の実施形態では、ディスパッチユニット１０４は、ロードオペレーションに依存するオペレーションについて、投機的なソースオペランドを識別するようには構成されていなくてもよい。その代わりに、ディスパッチユニット１０４は、図１２に示すように、依存関係のあるオペレーションに投機的なロード結果を提供するために、ロードオペレーションを、レジスタ間移動オペレーションを含む１つ以上のオペレーションに変換するように構成されたオペレーションコンバータ１８０を備え得る。ロードオペレーションの変換は、ロードオペレーションの投機的な結果と、特定の物理レジスタ名によって識別されるデータ値との間にリンクが存在することを示す指標を受けて実行され得る。この指標はリンク検出器１８２によって提供され、一部実施形態では、このリンク検出器１８２はメモリファイル１３２を有し得る。別の実施形態では、リンク検出器１８２は、前述のように、条件付きの移動オペレーションなどのオペレーションを受けて、データ値をリンクするように構成された論理回路を有してもよい。
【０１０１】
一実施形態では、オペレーションコンバータは、オペレーションの入力オペコードのほか、そのオペレーションについて、レジスタ値と、そのオペレーションの投機的な結果との間にリンクが検出されているかどうかを知らせる指標を受信し得る。オペレーションがロードであり、投機的なリンクが検出されている場合、オペレーションコンバータは、レジスタ間移動オペレーションのオペコードを出力し得る。ディスパッチユニット１０４は、レジスタ間移動オペレーションをディスパッチし、その際、リンク検出ユニットが出力するタグを、レジスタ間移動のソースオペランドのタグとして使用し得る。
【０１０２】
一部実施形態では、オペレーションコンバータは、レジスタ間移動をディスパッチするように構成され得、この結果、スケジューラが得られたレジスタ間移動オペレーションに必要なオペランドのタグと、そのレジスタ間移動に割り当てられたエントリにある変更前のロードオペレーションに必要なオペランドのタグの両方を記憶するようになる。これによって、レジスタ間移動オペレーションの投機的な結果が正しくなかったことが検出された場合に、このオペレーションを変更前のロードオペレーションとして再発行できるようになる。これを実施するために、ロードオペレーションを変更して得られる各レジスタ間移動オペレーションに、付加的なソースオペランドが追加され得る（あるいは、別の実施形態では、これを実施するために既存のソースオペランドが変更され得る）。一部実施形態では、変更前のロードのアドレス計算を実行するか、リンクされているデータ値と実際のロード結果のデータ値とを比較するか、この両方を実行することで、レジスタ間移動オペレーションの投機的な結果が検証され得る。投機的な結果が正しくない場合、ロードの正しい結果を取得するために、データキャッシュがアクセスされ得る。ロードの正しい結果が再ブロードキャストされて、これにより、スケジューラは、間違った値を使用して実行された依存関係のある全てのオペレーションを再発行し得る。
【０１０３】
一部実施形態では、オペレーションコンバータ１８０は、ロードオペレーションを二重（dual-nature）オペレーションに変換するように構成され得る。ロードオペレーションと同様に、この二重オペレーションでは、アドレス計算とデータの移動が実行され得る。ロードとは異なり、二重オペレーションが開始するデータの転送は、レジスタ間移動である。さらに、二重オペレーションが開始するデータの移動は、アドレス計算の完了前に行われ得る。このアドレス計算は、投機的なリンクが正しかったかどうかの検証に使用され得る。投機的なリンクが誤っていた場合、二重オペレーションは通常のロードオペレーションとして再発行されて、データキャッシュへのアクセスの完了後、その結果が、依存しているオペレーションに再ブロードキャストされ得る。
【０１０４】
以下の例では、この例示的なオペレーションのシーケンスを変換する各種実施形態を示す。
ADD PR2, PR1, PR1                        （ＡＤＤ１）
…
STORE [アドレス指定パターンＡ], PR2      （ＳＴＯＲＥ１）
…
LOAD PR3, [アドレス指定パターンＡ]       （ＬＯＡＤ１）
…
ADD PR4, PR3, PR3                        （ＡＤＤ２）
【０１０５】
このシーケンスでは、指定されたオペレーションが１つ以上の介入オペレーションによって分けられる可能性がある。しかし、介入オペレーションによって、アドレス指定パターンＡで使用されている値が変更されたり、アドレス指定パターンＡから計算されたアドレスに記憶されているデータ値とＰＲ２に記憶されているデータ値が変更されることがないとすると、ＰＲ２に記憶されているデータ値とアドレス指定パターンＡから算出されたアドレスに記憶されているデータ値との間に投機的なリンクが検出され得る。
【０１０６】
一実施形態では、投機的リンク検出器１８２がこの投機的なリンクを検出すると、オペレーションコンバータ１８０は、ＬＯＡＤ１を、二重移動オペレーション“MOV PR3, PR2”に変換し得る。この二重移動オペレーションは、レジスタのソースおよびデスティネーションを指定しているほか、ＬＯＡＤ１のアドレス計算を実行できるように、アドレス指定パターンＡも指定し得る。しかし、ＥＣＸが利用可能になると直ちに、二重移動オペレーションの移動部分が発行され得る。二重オペレーションの移動部分の結果がブロードキャストされるとすぐに、ＡＤＤ２が、この移動オペレーションの投機的な結果をオペランドとして使用して発行され得る。アドレス計算が実行されると、投機的なリンクが検証され得る。投機的なリンクが正しくない場合、ロード／ストアユニットは、二重移動オペレーションをロードオペレーションとして再発行するようにスケジューラに指示する指標を、スケジューラに提供し得る。ロードオペレーションの結果がブロードキャストされると、ＡＤＤ２など、移動の投機的な結果を使用して実行された依存関係のあるすべてのオペレーションが再発行され得る。この二重オペレーションはスケジューラの１つのエントリを占有してスケジュールされ得るという点と、スケジューラ１１８が、二重オペレーションを２度（ロードのアドレス計算で１度、レジスタ間移動で１度）発行するように選択し得るという点に留意されたい。
【０１０７】
別の実施形態では、オペレーションコンバータ１８０は、投機的なリンクを検出すると、ＬＯＡＤ１を、“LOAD PR3, [アドレス指定パターンＡ]”と“MOV PR3, PR2”の２つのリンクされたオペレーションに変換し得る。二重オペレーションを使用する前述の例とは異なり、これらのリンクされたオペレーションは、スケジューラの１つのエントリを共有するのではなく、それぞれがスケジューラ１１８のエントリを占有し得る。このレジスタ間移動オペレーションが発行されると、ＡＤＤ２などの依存関係のあるオペレーションが、ＰＲ３の投機的な値をオペランド値として使用して発行され得る。このＬＯＡＤオペレーションは、投機的なリンクが正しいと判定された場合に、ロード結果のタグがブロードキャストされないよう、特別な種類のロードオペレーションとしてタグ付けされ得る（または、移動の結果が正しく、依存関係のあるオペレーションの再発行が不要であることを知らせる指標を付けてブロードキャストされるようになる）。また、ロードオペレーションと移動オペレーションの両方が同じサイクルでそれぞれの結果をブロードキャストした場合、移動の結果ではなくロードの結果が、依存しているオペレーションで使用されるようにする指標が提供され得る。一部実施形態では、このために、スケジューラが応答すべきタグを示す余分のビットが、プロセッサ１００内の各タグバスに追加され得る。投機的なリンクが正しくない（例えば、このことがロード結果のタグのブロードキャストによって示される）場合、移動オペレーションがキャンセルされ得る（例えば、この移動オペレーションをスケジュールするスケジューラ１１８は、このレジスタ間移動を再発行できないように、このオペレーションに現在割り当てられているスケジューラのエントリの割り当てを解除し得る）。多くの実施形態では、スケジューラは、ロード結果のタグが結果バスに再送信されると、投機的なロード結果を使用して実行された依存関係のあるすべてのオペレーションを再発行するように構成され得る。
【０１０８】
一実施形態では、特定のタグが識別するレジスタのデータ値と、ロードオペレーションの投機的な結果との間に（例えば、メモリファイルによる）リンクが検出された場合、ロードオペレーションが、レジスタ間移動オペレーションを含み、ソースオペランドのタグが、投機的なロード結果にリンクされているデータ値のタグと等しくなるように変更される。レジスタ間移動オペレーションが実行されて、その際、ロードの結果のタグと共に、そのタグが識別するデータ値が結果バスに出力され得る。
【０１０９】
（元のロードのアドレス計算を実行するなどにより）投機的な結果が検証され得る。投機的な結果が正しい場合、ロードの結果が結果バスに再ブロードキャストされることはない（あるいは、別の実施形態では、ロードの結果と共に、結果が再ブロードキャストされても依存関係のあるオペレーションの再発行が不要であることを知らせる指標が再ブロードキャストされ得る）。投機的な結果が正しくない場合、データキャッシュにアクセスしてロードの正しい結果が取得され、ロードの正しい結果が結果バスにブロードキャストされ得る。これにより、投機的な結果値を使用して発行された依存関係のあるすべてのオペレーションが再発行され得る。場合によっては、投機的な結果が検証されてから、レジスタ間移動オペレーションが実行されてもよい点に留意されたい。投機的な結果が正しくない場合、レジスタ間移動オペレーションは実行されなくてもよい。
【０１１０】
ロードオペレーションの投機的な結果とレジスタのデータ値との間にリンクが検出されない（例えばロードのアドレス指定パターンがメモリファイルでヒットしない場合）、ロードを変更することができない。ロードは、通常通り実行され、データキャッシュがアクセスされて、その結果が結果バスにブロードキャストされ得る。
【０１１１】
タグのカラー指定
【０１１２】
場合によっては、メモリファイル１３２が、ロードオペレーションの投機的な結果を、特定の論理レジスタ内の値にリンクすることがある。場合によっては、その論理レジスタが上書きされることがあり、レジスタマップによってその論理レジスタに割り当てられていた物理レジスタが、フリーリスト（割当可能な空き物理レジスタのリスト）に戻される。その後、その物理レジスタが、別の値を記憶するために再割り当てされ得る。物理レジスタがフリーリストに戻されるか、物理レジスタが再割り当てされるか、この両方が行われても、その物理レジスタを指定しているメモリファイルのエントリは変更されない。このため、その後、メモリファイル１３２によってリンクが作成されても、物理レジスタの再割当が考慮されないことになる。例えば、次の命令のシーケンスを考える。
MOV [EBP+50], EAX
XOR EAX, EAX
MOV EBX, [EBP+50]
【０１１３】
このシーケンスに対して、メモリファイル１３２は、最初のストアオペレーションを受けて、アドレス指定パターン“ＥＢＰ＋５０”と、ＥＡＸに割り当てられた物理レジスタにエントリを割り当て得る。ＥＡＸがＸＯＲ演算によって上書きされると、ＥＡＸの現在の値は、メモリファイル１３２内のアドレス指定パターンにリンクされている値にもはや対応しなくなる。しかし、メモリファイル１３２は、後続のロードオペレーションのアドレス指定パターンと先のストアのアドレス指定パターンが一致することに基づいて、このロードの投機的な結果を古い値にリンクし得る。
【０１１４】
一部実施形態では、レジスタファイル１１６内の各物理レジスタに、カラーが割り当てられ得る。このカラーは、各レジスタのタグと関連付けられ得、レジスタのタグと共に、プロセッサ全体に伝達され得る。本明細書中で使用されるように、「カラー」とは、レジスタが再割り当てされたかどうかを示す１ビット以上の情報である。一実施形態では、カラーは１ビットであって、レジスタがフリーリストに戻るか、フリーリストから取り出される度にトグルされ得る。あるレジスタのタグを指定しているエントリが、メモリファイル内に割り当てられている場合、メモリファイルは、割り当てられたエントリ中に、そのレジスタに関連付けられたカラーも記憶し得る。同様に、図１３に示すように、投機レジスタマップは、各タグのカラー８１４を記憶し得る。カラーは、レジスタマップ１３４およびスケジューラ１１８内に、タグと共に記憶されてもよい。レジスタのタグが結果バス５２０に出力されると、そのタグに関連付けられているカラーも結果バス５２０に出力され得る。
【０１１５】
例えば、カラーが最初は‘０’である物理レジスタを考える。この物理レジスタは、カラーが０であり、レジスタマップ１３４によって特定の論理レジスタに割り当てられ得る。さらに、この物理レジスタは、カラーが０であり、投機レジスタマップ８００の論理レジスタに割り当てられ得る。投機レジスタマップ８００のエントリが割り当てられた後、ある時点で、この物理レジスタがフリーリストに戻され、その後、再割当のために選択され得る。物理レジスタがフリーリストから取り出されると、そのカラーが‘１’に更新され得る。レジスタのカラーが更新された後、ある時点で、投機レジスタマップ８００が、このレジスタが再割り当てされる前に割り当てられたエントリに基づいて、レジスタのタグとカラー‘０’により、オペレーションの投機的なソースを特定し得る。投機的なソースを識別するこの情報はスケジューラ１１８に記憶され得る。このオペレーションが発行される前に、別のオペレーションがそのレジスタの新しい値を生成し、タグと現在のカラー‘１’が結果バス５２０にブロードキャストされ得る。スケジューラ１１８は、レジスタのタグに関連付けられている現在のカラー‘１’と、投機レジスタマップエントリのレジスタのタグに関連付けられているカラー‘０’とを比較することによって、タグがもはや同じ値を識別していないと判定し得る。一部実施形態では、スケジューラ１１８はこの状態を誤った投機として扱い、図１０を参照して上述したように、そのオペランドについて非投機的なソースの監視に切り替え得る。この切り替えは、カラーの不一致が検出された特定のオペレーションのみに限られ得る（スケジューラ内の未処理のオペレーションの全てが切り替えられる訳ではない）。
【０１１６】
一般に、物理レジスタ再割当の管理の問題を生じさせずに、依存関係グラフからレジスタ間移動オペレーションを除去することは困難である。例えば、２つの論理レジスタの番号が同じ物理レジスタ番号を参照するように、レジスタマップ１３４を更新することによって、レジスタ間の移動を実装している場合、その物理レジスタ番号によって識別される物理レジスタがフリーリストに戻されるべき時点を特定するのは困難となり得る。レジスタのカラー指定は、このようなシステムに代えて用いることができる。
【０１１７】
一部実施形態では、投機レジスタマップ８００を使用することで、レジスタ間の移動の性能を最適化する際に、レジスタのカラー指定を用いることができる。例えば、投機レジスタマップ８００を使用して、依存関係グラフからレジスタ間移動オペレーションを除去することができる（すなわち、レジスタ間移動オペレーションの結果に依存するオペレーションは、移動のソースが既に利用可能である場合には、その移動オペレーションの実行を待つ必要がなくなる）。投機レジスタマップ８００は、レジスタ間移動オペレーションが検出される度に、その移動オペレーションで指定されているソースおよびデスティネーションのレジスタをリンクしているエントリを割り当て得る。各物理レジスタのカラーは、作成された投機レジスタマップ８００のエントリに記憶され得る。このシステムでは、複数の論理レジスタが同じ物理レジスタに関連付けられるように、レジスタマップ１３４が更新されるシステムで発生する問題を招くことなく、物理レジスタを正常に再割り当てすることができる。カラー指定を用いているシステムにおいて物理レジスタが再割り当てされた際に、物理レジスタが現在割り当てられている特定の値を、その物理レジスタを識別している各タグに関連付けられているカラーによって、その物理レジスタが再割り当てされる前に同じ物理レジスタに割り当てられていた他の値と区別できる。
【０１１８】
投機レジスタマップ８００は、整数レジスタと浮動小数点レジスタの両方を扱うように構成することができ、これにより、投機レジスタマップが、依存関係グラフから浮動小数点レジスタ間移動操作を除去できるようになる。これにより、非常にレーテンシの大きなＦＸＣＨ（スタックの所定の要素と、現在スタックの最上位にある要素を交換する）などのオペレーションを、依存関係グラフから除去することが可能となる。投機レジスタマップ８００を使用することで、レジスタ間の移動を依存関係グラフから除去できるものの、レジスタ間の移動は実行されることがある点に留意されたい。
【０１１９】
例示的なコンピュータシステム
【０１２０】
図１４は、バスブリッジ４０２を介して各種のシステムコンポーネントに結合されているプロセッサ１００を備えたコンピュータシステム４００の一実施形態のブロック図を示す。プロセッサ１００は、前述のようにディスパッチユニット１０４、メモリファイル１３２、スケジューラ１１８および／または投機レジスタマップ８００の一実施形態を備え得る。コンピュータシステムのこれ以外の実施形態も可能であり、考察される。図中のシステムにおいて、メインメモリ２００は、メモリバス４０６を介してバスブリッジ４０２に結合され、グラフィックコントローラ４０８は、ＡＧＰバス４１０を介してバスブリッジ４０２に結合されている。ＰＣＩバス４１４を介して複数のＰＣＩデバイス４１２Ａ〜４１２Ｂがバスブリッジ４０２に結合されている。ＥＩＳＡ／ＩＳＡバス４２０を介して１台以上のＥＩＳＡデバイスまたはＩＳＡデバイス４１８を電気的に接続できるように、セカンダリバスブリッジ４１６を設けてもよい。この例では、プロセッサ１００は、ＣＰＵバス４２４を介してバスブリッジ４０２に結合されているほか、任意選択で設けられるＬ２キャッシュ４２８にも結合されている。一部実施形態では、プロセッサ１００は、一体化されたＬ１キャッシュ（図示せず）を備えていてもよい。
【０１２１】
バスブリッジ４０２は、プロセッサ１００、メインメモリ４０４、グラフィックコントローラ４０８、およびＰＣＩバス４１４に取付けられたデバイス間にインタフェースを提供する。バスブリッジ４０２に接続されたデバイスのうちの１台からオペレーション（operation）を受信すると、バスブリッジ４０２は、このオペレーションのターゲット（例えば、特定のデバイスか、ターゲットがＰＣＩバス４１４に接続している場合はＰＣＩバス４１４）を識別する。バスブリッジ４０２は、このオペレーションをターゲットのデバイスに転送する。バスブリッジ４０２は通常、ソースのデバイスまたはバスによって用いられるプロトコルからターゲットのデバイスまたはバスによって用いられるプロトコルにオペレーションを変換する。
【０１２２】
セカンダリバスブリッジ４１６は、ＰＣＩバス４１４に対するインタフェースをＩＳＡ／ＥＩＳＡバスに提供すると共に、追加の機能も有していてもよい。また、必要に応じて、セカンダリバスブリッジ４１６の外部に設けたか、セカンダリバスブリッジ４１６に内蔵した入出力コントローラ（図示せず）をコンピュータシステム４００に設けて、キーボードおよびマウス４２２、ならび各種シリアルポートおよびパラレルポートの動作をサポートしてもよい。別の実施形態においては、プロセッサ１００とバスブリッジ４０２の間のＣＰＵバス４２４に、外部キャッシュユニット（図示せず）を結合してもよい。別法として、外部キャッシュをバスブリッジ４０２に結合してもよく、この外部キャッシュのためのキャッシュ制御論理回路をバスブリッジ４０２に搭載してもよい。Ｌ２キャッシュ４２８は、プロセッサ１００のバックサイド構成（backside configuration）として図示されている。Ｌ２キャッシュ４２８は、プロセッサ１００から独立していても、プロセッサ１００にカートリッジ（例えば、スロット１またはスロットＡ）と統合されていても、プロセッサ１００と共に半導体基板に搭載されていてもよいという点に留意されたい。
【０１２３】
メインメモリ２００は、アプリケーションプログラムのストア先であると共に、プロセッサ１００の主な実行元のメモリである。適切なメインメモリ２００は、ＤＲＡＭ（ダイナミックランダムアクセスメモリ）を有する。例えば、複数バンク構成のＳＤＲＡＭ（シンクロナスＤＲＡＭ）のまたはラムバスＤＲＡＭ（ＲＤＲＡＭ）が適切であり得る。
【０１２４】
ＰＣＩデバイス４１２Ａおよび４１２Ｂの例に、ネットワークインタフェースカード、ビデオアクセラレータ、オーディオカード、ハードディスクもしくはフロッピーディスクドライブまたはドライブコントローラ、ＳＣＳＩ（Small Computer Systems Interface）アダプタ、およびテレフォニーカードなどの様々な周辺機器がある。同様に、ＩＳＡデバイス４１８の例には、モデム、サウンドカード等の様々なタイプの周辺機器のほか、種々のデータ取得カード（ＧＰＩＢインタフェースカードまたはフィールドバスインタフェースカード等）などがある。
【０１２５】
グラフィックコントローラ４０８は、ディスプレイ４２６への文字および画像の表示を制御するために設けられる。グラフィックコントローラ４０８は、メインメモリ２００の内外へ効果的に移動できる３次元データ構造をレンダリングする、当該技術分野では一般的に知られた代表的なグラフィックアクセラレータを具体化していてもよい。したがって、グラフィックコントローラ４０８は、バスブリッジ４０２内のターゲットインタフェースへのアクセスを要求すると共に受取り、これによりメインメモリ２００へのアクセスを取得可能であるという点で、ＡＧＰバス４１０のマスタであり得る。専用のグラフィックバスによって、メインメモリ４０４から高速にデータを取得することが可能となる。グラフィックコントローラ４０８は、特定のオペレーションのために、ＡＧＰバス４１０上でＰＣＩプロトコルトランザクションを生成するようにさらに構成され得る。このため、バスブリッジ４０２のＡＧＰインタフェースは、ＡＧＰプロトコルのトランザクションと、ＰＣＩプロトコルのターゲットトランザクションおよびイニシエータトランザクションとの両方をサポートする機能を備え得る。ディスプレイ４２６は、画像または文字を表現可能な任意の電子ディスプレイである。適切なディスプレイ４２６には、陰極線管（「ＣＲＴ」）ディスプレイや液晶ディスプレイ（「ＬＣＤ」）などがある。
【０１２６】
上記の説明においてＡＧＰバス、ＰＣＩバス、およびＩＳＡバスまたはＥＩＳＡバスを例として採り上げたが、必要に応じて任意のバスアーキテクチャを代用してもよいという点に留意されたい。さらに、コンピュータシステム４００は、追加のプロセッサ（コンピュータシステム４００の追加の構成要素として示したプロセッサ１００ａなど）を備えたマルチプロセッシングコンピュータシステムであってもよいという点に留意されたい。プロセッサ１００ａはプロセッサ１００と類似のものであってもよい。より詳細には、プロセッサ１００ａは、プロセッサ１００と全く同一であってもよい。プロセッサ１００ａは、（図１４に示すように）独立したバスを介してバスブリッジ４０２に結合されていても、プロセッサ１００との間でＣＰＵバス２２４を共用してもよい。さらに、プロセッサ１００ａは、Ｌ２キャッシュ４２８と類似した追加のＬ２キャッシュ４２８ａと結合されてもよい。
【０１２７】
図１５を参照すると、前述のディスパッチユニット１０４、メモリファイル１３２、スケジューラ１１８および／または投機レジスタマップ８００を備え得るコンピュータシステム４００の別の実施形態が示される。他の実施形態も可能であり、考察される。図１５の実施形態では、コンピュータシステム４００は、複数の処理ノード６１２Ａ，６１２Ｂ，６１２Ｃ，６１２Ｄを備える。各処理ノードは、処理ノード６１２Ａ〜６１２Ｄにそれぞれ設けられているメモリコントローラ６１６Ａ〜６１６Ｄを介して各々のメモリ６１４Ａ〜６１４Ｄに結合されている。さらに、処理ノード６１２Ａ〜６１２Ｄは、処理ノード６１２Ａ〜６１２Ｄ間の通信に使用するインタフェースロジックを備える。例えば、処理ノード６１２Ａは、処理ノード６１２Ｂと通信するためのインタフェースロジック６１８Ａと、処理ノード６１２Ｃと通信するためのインタフェースロジック６１８Ｂと、さらに別の処理ノード（図示せず）と通信するための第３のインタフェースロジック６１８Ｃとを備える。同様に、処理ノード６１２Ｂは、インタフェースロジック６１８Ｄ，６１８Ｅ，６１８Ｆを備え、処理ノード６１２Ｃは、インタフェースロジック６１８Ｇ，６１８Ｈ，６１８Ｉを備え、処理ノード６１２Ｄは、インタフェースロジック６１８Ｊ，６１８Ｋ，６１８Ｌを備える。処理ノード６１２Ｄは、インタフェースロジック６１８Ｌを介して複数の入出力デバイス（例えばデイジーチェーン構成のデバイス６２０Ａ〜６２０Ｂ）と通信するように結合される。その他の処理ノードも、同様にその他のＩ／Ｏデバイスと通信してもよい。
【０１２８】
処理ノード６１２Ａ〜６１２Ｄは、処理ノード間で通信を行うためにパケットベースのリンクを実施している。この実施形態では、このリンクは、一方向のラインの組として実施されてもよい（例えば、ライン６２４Ａは、処理ノード６１２Ａから処理ノード６１２Ｂにパケットを送信するために使用され、ライン６２４Ｂは、処理ノード６１２Ｂから処理ノード６１２Ａにパケットを送信するために使用される）。ラインのその他の組６２４Ｃ〜６２４Ｈは、図１５に示すように、その他の処理ノード間でパケットを送信するために使用される。一般に、ラインの各組６２４は、１本以上のデータラインと、このデータラインに対応する１本以上のクロックラインと、伝達するパケットの種類を示す１本以上の制御ラインとを含み得る。このリンクは、処理ノード間の通信ではキャッシュコヒーレントな方法で動作するか、処理ノードとＩ／Ｏデバイス間の通信（あるいは、バスブリッジから、ＰＣＩバスまたはＩＳＡバスなどの従来の構成のＩ／Ｏバスへの通信）で非コヒーレントな方法で動作し得る。また、図に示すように、このリンクは、Ｉ／Ｏデバイス間のデイジーチェーン構成を使用して、非コヒーレントな方法で動作することもできる。１つのプロセッサから別のプロセッサに送信されるパケットが、１つ以上の中間ノードを通過し得る点に留意されたい。例えば、図１５に示すように、処理ノード６１２Ａによって処理ノード６１２Ｄに送信されるパケットは、処理ノード６１２Ｂか処理ノード６１２Ｃのいずれかを通過し得る。適したルーティングアルゴリズムであれば、どのようなものでも使用することができる。コンピュータシステム４００の別の実施形態では、処理ノードの数が、図１５に示した実施形態よりも上下してもよい。
【０１２９】
一般に、パケットは、ノード間のライン６２４を伝わる１つ以上のビットタイミング（bit time）として送信され得る。ビットタイミングは、対応するクロックラインを伝わるクロック信号の立ち上がりまたは立ち下がりであり得る。パケットには、トランザクションを開始するためのコマンドパケット、キャッシュコヒーレンシを維持するためのプローブパケット、プローブおよびコマンドに応答する応答パケットなどがあり得る。
【０１３０】
処理ノード６１２Ａ〜６１２Ｄは、メモリコントローラおよびインタフェースロジックに加えて、１つ以上のプロセッサを有していてもよい。概して、処理ノードは、少なくとも１つのプロセッサを備えており、必要に応じてメモリおよびその他の論理回路と通信するためのメモリコントローラを任意選択で備えていてもよい。より詳細には、各処理ノード６１２Ａ〜６１２Ｄは、プロセッサ１００のコピーを１つ以上備えていてもよい。外部インタフェースユニット１８は、メモリコントローラ６１６のほかにノード内にインタフェースロジック６１８を備える。
【０１３１】
メモリ６１４Ａ〜６１４Ｄは任意の好適なメモリ素子を含んでいてもよい。例えば、メモリ６１４Ａ〜６１４Ｄは、１つ以上のラムバスＤＲＡＭ（ＲＤＲＡＭ）、シンクロナスＤＲＡＭ（ＳＤＲＡＭ）、スタティックＲＡＭなどを含んでいてもよい。コンピュータシステム４００のアドレス空間は、メモリ６１４Ａ〜６１４Ｄに分割されている。各処理ノード６１２Ａ〜６１２Ｄは、アドレスとメモリ６１４Ａ〜６１４Ｄとの対応関係、すなわち、特定のアドレスについてメモリ要求を転送すべき処理ノード６１４Ａ〜６１４Ｄの決定に用いるメモリマップを備えていてもよい。一実施形態では、コンピュータシステム４００内のアドレスのコヒーレンシポイント（coherency point）は、そのアドレスに対応しているバイトを記憶しているメモリに結合されたメモリコントローラ６１６Ａ〜６１６Ｄである。換言すれば、メモリコントローラ６１６Ａ〜６１６Ｄは、対応するメモリ６１４Ａ〜６１４Ｄへのあらゆるメモリアクセスが、キャッシュコヒーレントな方法で行われることを保証する責任を負っている。メモリコントローラ６１６Ａ〜６１６Ｄは、メモリ６１４Ａ〜６１４Ｄとインタフェースするための制御回路を備え得る。さらに、メモリコントローラ６１６Ａ〜６１６Ｄは、メモリ要求をキューに記憶するための要求キューを備えていてもよい。
【０１３２】
インタフェースロジック６１８Ａ〜６１８Ｌは、リンクからパケットを受信すると共に、リンクに送信するパケットをバッファするための各種バッファを備え得る。コンピュータシステム４００は、パケットを送信するための任意の適切なフロー制御メカニズムを使用することができる。例えば、一実施形態では、各インタフェースロジック６１８は、そのインタフェースロジックに接続されているリンクの反対側にある受信装置内の各種バッファの数のカウントを記憶している。インタフェースロジックは、パケットを記憶するための空きバッファが受信側のインタフェースロジックになければ、パケットを送信しない。パケットを前方にルーティングしたことで受信側のバッファに空きが生ずると、受信側のインタフェースロジックは、バッファに空きが生じたことを知らせるメッセージを、送信側のインタフェースロジックに送信する。このようなメカニズムは、「クーポンベースの」システムと呼ぶことができる。
【０１３３】
Ｉ／Ｏデバイス６２０Ａ〜６２０Ｂは、適したＩ／Ｏデバイスであれば、どのようなものであってもよい。例えば、Ｉ／Ｏデバイス６２０Ａ〜６２０Ｂは、別のコンピュータシステムに結合され、そのコンピュータシステムと通信するための装置（ネットワークインタフェースカードやモデムなど）を含んでいてもよい。また、Ｉ／Ｏデバイス６２０Ａ〜６２０Ｂは、ビデオアクセラレータ、オーディオカード、ハードディスクドライブもしくはフロッピーディスクドライブまたはドライブコントローラ、ＳＣＳＩアダプタ、テレフォニーカード、サウンドカード、およびＧＰＩＢインタフェースカードまたはフィールドバスインタフェースカードなどの様々なデータ収集カードを含んでいてもよい。本明細書において、「Ｉ／Ｏデバイス」との用語と「周辺機器」との用語は同義であるとされる点に留意されたい。
【０１３４】
本明細書中で使用されるように、「クロックサイクル」または「サイクル」との用語は、命令処理パイプラインの各種ステージがタスクを完了する時間間隔を指す。クロックサイクルを定義しているクロック信号に従って、命令および計算値がメモリ素子（レジスタまたはアレイなど）によって取得される。例えば、メモリ素子が、クロック信号の立ち上がりまたは立ち下がりに従って値を取得し得る。
【０１３５】
上記の開示を完全に理解できれば、当業者にとって数多くの変形例および変更例が明らかとなるであろう。添付の特許請求の範囲は、このような変形例および変更例を全て包含するものと解釈されることが意図される。
【産業上の利用可能性】
【０１３６】
本発明は、一般に、プロセッサの分野に適用可能でありうる。
【図面の簡単な説明】
【０１３７】
【図１】プロセッサの一実施形態を示す図である。
【図２Ａ】ディスパッチユニットの一実施形態のブロック図である。
【図２Ｂ】一実施形態において使用され得る例示的なメモリファイル記憶部のエントリを示す図である。
【図３】ロードオペレーションの投機的な結果を、特定のタグが識別するデータ値にリンクする方法の一実施形態を示すフローチャートである。
【図４Ａ】一実施形態によるロードストアユニットのブロック図である。
【図４Ｂ】別の実施形態によるロードストアユニットのブロック図である。
【図５Ａ】一実施形態による、ロードオペレーションの投機的な結果と特定のタグによって識別されるデータ値とのリンクを検証する方法を示すフローチャートである。
【図５Ｂ】一実施形態による、メモリオペレーションに関連するリンクが検証されたかどうかに基づいて、そのメモリオペレーションをリタイアさせる方法のフローチャートである。
【図６Ａ】一実施形態による、ロードオペレーションの投機的な結果と特定のタグによって識別されるデータ値とのリンクを検証するように構成されたロードストアユニットのブロック図である。
【図６Ｂ】一実施形態による、ロードオペレーションの投機的な結果と特定のタグによって識別されるデータ値とのリンクを検証するように構成された実行コアのブロック図である。
【図７】一実施形態による、ロードオペレーションの投機的な結果と特定のタグによって識別されるデータ値とのリンクを、値比較によって検証する方法のフローチャートである。
【図８】スケジューラの一実施形態を示すブロック図である。
【図９】オペレーションを発行し、データ投機が誤っていたことを示す指標を受けてオペレーションを再発行する方法の一実施形態のフローチャートである。
【図１０】一実施形態による、投機的なオペランドのソースと非投機的なオペランドのソースの一方に基づいて、オペレーションの発行の準備状態を選択的に判定するように構成されたスケジューラのブロック図である。
【図１１】ディスパッチユニットの別の実施形態のブロック図である。
【図１２】ディスパッチユニットのさらに別の実施形態のブロック図である。
【図１３】一実施形態による、特定のオペランドのタグに関連付けられたカラーの指標を保持するように構成された投機レジスタマップを示す図である。
【図１４】コンピュータシステムの一実施形態を示す図である。
【図１５】コンピュータシステムの別の実施形態を示す図である。
【図１】
2007536626.tif 000003
【図２Ａ】
2007536626.tif 000004
【図２Ｂ】
2007536626.tif 000005
【図３】
2007536626.tif 000006
【図４Ａ】
2007536626.tif 000007
【図４Ｂ】
2007536626.tif 000008
【図５Ａ】
2007536626.tif 000009
【図５Ｂ】
2007536626.tif 000010
【図６Ａ】
2007536626.tif 000011
【図６Ｂ】
2007536626.tif 000012
【図７】
2007536626.tif 000013
【図８】
2007536626.tif 000014
【図９】
2007536626.tif 000015
【図１０】
2007536626.tif 000016
【図１１】
2007536626.tif 000017
【図１２】
2007536626.tif 000018
【図１３】
2007536626.tif 000019
【図１４】
2007536626.tif 000020
【図１５】
2007536626.tif 000021
【手続補正書】
【提出日】平成18年3月3日(2006.3.3)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
第１のアドレス指定パターン（２０６）および第１のタグ（２０８）を記憶するように構成されたエントリ（２２０）を含むメモリファイル（１３２）であって、
前記メモリファイル（１３２）は、前記エントリ（２２０）に含まれる前記第１のアドレス指定パターン（２０６）を、ロードオペレーションの第２のアドレス指定パターン（２０６）と比較するように構成されており、前記メモリファイル（１３２）は、前記第２のアドレス指定パターン（２０６）が前記エントリ（２２０）に記憶されている前記第１のアドレス指定パターン（２０６）と一致する場合、前記第１のタグ（２０８）によって識別されるデータ値を前記ロードオペレーションの投機的な結果にリンクするように構成されているメモリファイル（１３２）と、
前記メモリファイル（１３２）に結合され、前記ロードオペレーションに依存する第２のオペレーションを実行する際に、前記投機的な結果にアクセスするように構成された実行コア（１２４）と、
前記メモリファイル（１３２）に結合され、前記ロードオペレーションによってアクセスされるアドレスを計算して、前記計算されたアドレスと、以前のストアオペレーションによってアクセスされた１つ以上のアドレスとの比較を実行することによって、前記第１のタグ（２０８）によって識別される前記データ値と前記ロードオペレーションの前記投機的な結果との前記リンクを検証するように構成された機能ユニット（１２６）とを備えるシステム（１００）。
【請求項２】
前記機能ユニット（１２６）は、前記比較を実行し、かつ非投機的なストアからロードへの転送を実行するように構成されたストアからロードへの転送比較器（２８０）を有する請求項１記載のシステム（１００）。
【請求項３】
前記エントリ（２２０）は、前記エントリ（２２０）の割り当てを生じさせたロードオペレーションまたはストアオペレーションを識別する転送タグ（２５６）を記憶し、かつ前記第２のアドレス指定パターン（２０６）が、前記エントリ（２２０）に記憶されている前記第１のアドレス指定パターンと一致する場合、前記転送タグ（２５６）を出力するようにさらに構成されている請求項１記載のシステム（１００）。
【請求項４】
前記機能ユニット（１２６）は、前記転送タグ（２５６）を受け取るために結合されており、前記ロードオペレーションより先で、かつ前記ロードオペレーションのアドレスと一致するアドレスを有するオペレーションのうち最も後のものを選択し、前記転送タグ（２５６）を前記選択された最も後のオペレーションの識別タグと比較することによって、前記比較を実行するようにさらに構成されており、前記選択された最も後のオペレーションは、ロードオペレーションまたはストアオペレーションである請求項３記載のシステム（１００）。
【請求項５】
前記機能ユニット（１２６）は、前記転送タグ（２５６）を受け取るために結合されており、それぞれが前記ロードオペレーションより先で、かつそれぞれが前記ロードオペレーションのアドレスと一致するアドレスを有する最も後のロードオペレーションと最も後のストアオペレーションとを選択し、前記選択された最も後のロードオペレーションが前記選択された最も後のストアオペレーションよりもプログラムの順序において後であると判定して、前記転送タグ（２５６）を前記選択された最も後のロードオペレーションの識別タグと比較することによって、前記比較を実行するようにさらに構成されている請求項３記載のシステム（１００）。
【請求項６】
第１のアドレス指定パターン（２０６）および第１のタグ（２０８）を含むエントリ（２２０）を記憶するステップと、
前記エントリ（２２０）の記憶の後に、前記エントリ（２２０）に含まれる前記第１のアドレス指定パターン（２０６）を、ロードオペレーションの第２のアドレス指定パターン（２０６）と比較するステップと、
前記比較を受けて、前記第２のアドレス指定パターン（２０６）が前記エントリ（２２０）に記憶されている前記第１のアドレス指定パターン（２０６）と一致する場合、前記第１のタグ（２０８）によって識別されるデータ値を前記ロードオペレーションの投機的な結果にリンクするステップと、
前記リンク後、前記ロードオペレーションに依存する第２のオペレーションを実行する際に、前記投機的な結果にアクセスするステップと、
前記リンク後、前記ロードオペレーションによってアクセスされるアドレスを計算して、前記計算されたアドレスと、以前のストアオペレーションによってアクセスされた１つ以上のアドレスとの比較を実行することによって、前記第１のタグ（２０８）によって識別される前記データ値と前記ロードオペレーションの前記投機的な結果との前記リンクを検証するステップとを有する方法。
【請求項７】
前記エントリ（２２０）は、前記ロードオペレーションよりもプログラムの順序において先にくるストアオペレーションを受けて割り当てられており、前記方法は、前記タグによって識別される前記データ値が前記ロードオペレーションの前記投機的な結果にリンクされたことを受けて、前記ストアオペレーションに関連付けられているフラグ（２６９）をセットするステップをさらに有する請求項６記載の方法。
【請求項８】
前記比較を実行することによって前記リンクが検証されるまで、前記ストアオペレーションに関連する情報を保持するステップをさらに有し、前記保持は、前記フラグ（２６９）のセットを受けて行われる請求項７記載の方法。
【請求項９】
前記フラグ（２６９）のセットを受けて、前記ストアオペレーションを前記リンクが検証されるまでリタイアさせないステップをさらに有する請求項８記載の方法。
【国際調査報告】
2007536626.tif 000022
2007536626.tif 000023