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