(57)【要約】本明細書で説明される技術は、オペレーションキャッシュから復号されたオペレーションをフェッチすることと、復号ユニットを使用して命令をフェッチ及び復号することとの間で切り替える際の低レイテンシを、オペレーションキャッシュを有する命令フェッチ及び復号ユニットにもたらす。この低レイテンシは、ワークが反対のパスからの出力を待機する必要があることに起因して停止されるまで、そのワークがオペレーションキャッシュパス及び命令キャッシュパスの両方を通じてフローすることを可能にする同期機構を通じて達成される。オペレーションキャッシュパス及び命令キャッシュパス内の分離バッファの存在は、ワークが進行するよう消去されるまで、そのワークが保持されることを可能にする。単一のサイクルにおいて複数のヒットの検出を可能にする特別に構成されたオペレーションキャッシュタグアレイなどの他の改善は、例えば、エントリが予測されたアドレスブロックを記憶した予測キューから消費される速度を改善することによって、レイテンシをも改善する。【選択図】図３
2021527887.tif 000002
【特許請求の範囲】
【請求項１】
プログラム順序において復号されたマイクロオペレーションを記憶したオペレーションキューへの出力、及び命令実行パイプラインの残りによる後続の実行のための復号されたマイクロオペレーションに、第１の予測されたアドレスブロックの命令アドレスを変換する方法であって、
前記第１の予測されたアドレスブロックが、それに対して復号されたマイクロオペレーションがオペレーションキャッシュパスのオペレーションキャッシュに記憶された少なくとも１つの命令を含むと識別することと、
第１のオペレーションキャッシュキューエントリをオペレーションキャッシュキューに記憶することであって、前記第１のオペレーションキャッシュキューエントリは、進行するための命令キャッシュパスから信号を受信することを待機するかどうかを示すインジケーションを含む、前記記憶することと、
前記オペレーションキャッシュから、前記第１のオペレーションキャッシュキューエントリに対応する復号されたマイクロオペレーションを取得することと、
進行するための前記命令キャッシュパスから前記信号を受信することを待機するかどうかを示す、前記第１のオペレーションキャッシュキューエントリの前記インジケーションに基づいた時間において、前記第１のオペレーションキャッシュキューエントリに対応する前記復号されたマイクロオペレーションを前記オペレーションキューに出力することと、を備えた、方法。
【請求項２】
前記インジケーションは、前記命令キャッシュパスからの前のマイクロオペレーションが前記オペレーションキューに書き込まれ、または前記オペレーションキューに書き込まれるのにインフライトであることを待機する必要性を示し、
前記復号されたマイクロオペレーションを前記オペレーションキューに出力することは、前記第１のオペレーションキャッシュキューに対応する前記復号されたマイクロオペレーションを前記オペレーションキューに出力する前に、前記命令キャッシュパスからの前記前のマイクロオペレーションが前記オペレーションキューに書き込まれ、または前記オペレーションキューに書き込まれるのにインフライトであるまで待機することを含む、請求項１に記載の方法。
【請求項３】
前記インジケーションは、前記命令キャッシュパスからの前のマイクロオペレーションが前記オペレーションキューに書き込まれ、または前記オペレーションキューに書き込まれるのにインフライトであることを待機する必要性を示さず、
前記復号されたマイクロオペレーションを前記オペレーションキューに出力することは、前記命令パスからの前のマイクロオペレーションを待機することなく、前記第１のオペレーションキャッシュキューエントリに対応する前記復号されたマイクロオペレーションを出力することを含む、請求項１に記載の方法。
【請求項４】
単一のサイクルにおいて、オペレーションキャッシュタグアレイ内の前記第１の予測されたアドレスブロックに対する複数のヒットを通じてつなぎ、前記第１のオペレーションキャッシュキューエントリ内の各々のそのようなヒットについての情報を含めることによって、前記第１のオペレーションキャッシュキューエントリを生成することを更に備えた、請求項１に記載の方法。
【請求項５】
前記第２の予測されたアドレスブロックが、それに対して復号されたマイクロオペレーションが前記オペレーションキャッシュに記憶されていない少なくとも１つの命令を含むと識別することと、
命令キャッシュキューエントリを命令キャッシュキューに記憶することと、
前記オペレーションキャッシュからの前のオペレーションが前記オペレーションキャッシュに書き込まれ、または前記オペレーションキャッシュに書き込まれるのにインフライトであることを待機するかどうかを示すインジケーションに従って、命令バイトバッファ内の前記命令キャッシュキューエントリに対する命令バイトを取得することと、
前記オペレーションキャッシュパスからの前記前のオペレーションを待機するかどうかを示す前記インジケーションに基づいた時間において、前記命令バイトバッファエントリに対応する復号されたマイクロオペレーションを取得するよう、前記命令バイトを復号することと、
記憶するために、前記命令バイトバッファエントリに対応する前記復号されたマイクロオペレーションを前記オペレーションキューに出力することと、
によって、前記オペレーションキューへの出力、及び命令実行パイプラインの前記残りによる後続の実行のための復号されたマイクロオペレーションに、第２の予測されたアドレスブロックの命令アドレスを変換することを更に備えた、請求項１に記載の方法。
【請求項６】
前記オペレーションキャッシュパスからの前記前のオペレーションを待機するかどうかを示す前記インジケーションは、前記オペレーションキャッシュパスからの前記前のオペレーションを待機する必要性を示し、
前記命令バイトを復号することは、前記オペレーションキャッシュパスからの前記前のオペレーションが前記オペレーションキューに書き込まれ、または前記オペレーションキューに書き込まれるのにインフライトになった後に、前記命令バイトを復号することを含む、請求項５に記載の方法。
【請求項７】
前記オペレーションキャッシュパスからの前記前のオペレーションを待機するかどうかを示す前記インジケーションは、前記オペレーションキャッシュパスからの前記前のオペレーションを待機する必要性がないことを示し、
前記命令バイトを復号することは、前記オペレーションキャッシュパスからの前記前のオペレーションが前記オペレーションキューに書き込まれ、または前記オペレーションキューに書き込まれるのにインフライトであることを待機することなく、前記命令バイトを復号することを含む、請求項５に記載の方法。
【請求項８】
前記第１の予測されたアドレスブロックは、それに対して復号されたマイクロオペレーションがオペレーションキャッシュに記憶された少なくとも１つの命令、及びそれに対して復号されたオペレーションが前記オペレーションキャッシュに記憶されていない少なくとも１つの命令を含む、請求項１に記載の方法。
【請求項９】
前記オペレーションキューに記憶された前記マイクロオペレーションを実行することを更に備えた、請求項１に記載の方法。
【請求項１０】
プログラム順序において復号されたマイクロオペレーションを記憶したオペレーションキューへの出力、及び命令実行パイプラインの残りによる後続の実行のための復号されたマイクロオペレーションに、第１の予測されたアドレスブロックの命令アドレスを変換する命令フェッチ及び復号ユニットであって、
前記第１の予測されたアドレスブロックが、それに対して復号されたマイクロオペレーションがオペレーションキャッシュパスのオペレーションキャッシュに記憶された少なくとも１つの命令を含むと識別するように構成された共有フェッチロジックと、
第１のオペレーションキャッシュキューエントリを記憶するように構成されたオペレーションキャッシュキューであって、前記第１のオペレーションキャッシュキューエントリは、進行するための命令キャッシュパスから信号を受信することを待機するかどうかを示すインジケーションを含む、前記オペレーションキャッシュキューと、
前記オペレーションキャッシュから前記第１のオペレーションキャッシュキューエントリに対応する復号されたマイクロオペレーションを取得し、進行するための前記命令キャッシュパスから前記信号を受信することを待機するかどうかを示す、前記第１のオペレーションキャッシュキューエントリの前記インジケーションに基づいた時間において、前記第１のオペレーションキャッシュキューエントリに対応する前記復号されたマイクロオペレーションを前記オペレーションキューに出力するように構成されたオペレーションキャッシュデータ読み出しロジックと、を備えた、命令フェッチ及び復号ユニット。
【請求項１１】
前記インジケーションは、前記命令キャッシュパスからの前のマイクロオペレーションが前記オペレーションキューに書き込まれ、または前記オペレーションキューに書き込まれるのにインフライトであることを待機する必要性を示し、
前記復号されたマイクロオペレーションを前記オペレーションキューに出力することは、前記第１のオペレーションキャッシュキューに対応する前記復号されたマイクロオペレーションを前記オペレーションキューに出力する前に、前記命令キャッシュパスからの前記前のマイクロオペレーションが前記オペレーションキューに書き込まれ、または前記オペレーションキューに書き込まれるのにインフライトであるまで待機することを含む、請求項１０に記載の命令フェッチ及び復号ユニット。
【請求項１２】
前記インジケーションは、前記命令キャッシュパスからの前のマイクロオペレーションが前記オペレーションキューに書き込まれ、または前記オペレーションキューに書き込まれるのにインフライトであることを待機する必要性を示さず、
前記復号されたマイクロオペレーションを前記オペレーションキューに出力することは、前記命令パスからの前のマイクロオペレーションを待機することなく、前記第１のオペレーションキャッシュキューエントリに対応する前記復号されたマイクロオペレーションを出力することを含む、請求項１０に記載の命令フェッチ及び復号ユニット。
【請求項１３】
単一のサイクルにおいて、オペレーションキャッシュタグアレイ内の前記第１の予測されたアドレスブロックに対する複数のヒットを通じてつなぎ、前記第１のオペレーションキャッシュキューエントリ内の各々のそのようなヒットについての情報を含めることによって、前記第１のオペレーションキャッシュキューエントリを生成するように構成されたフェッチ制御ユニットを更に備えた、請求項１０に記載の命令フェッチ及び復号ユニット。
【請求項１４】
前記共有フェッチロジック及び前記命令キャッシュパスは、
前記第２の予測されたアドレスブロックが、それに対して復号されたマイクロオペレーションが前記オペレーションキャッシュに記憶されていない少なくとも１つの命令を含むと識別することと、
命令キャッシュキューエントリを命令キャッシュキューに記憶することと、
前記オペレーションキャッシュからの前のオペレーションが前記オペレーションキャッシュに書き込まれ、または前記オペレーションキャッシュに書き込まれるのにインフライトであることを待機するかどうかを示すインジケーションに従って、命令バイトバッファ内の前記命令キャッシュキューエントリに対する命令バイトを取得することと、
前記オペレーションキャッシュパスからの前記前のオペレーションを待機するかどうかを示す前記インジケーションに基づいた時間において、前記命令バイトバッファエントリに対応する復号されたマイクロオペレーションを取得するよう、前記命令バイトを復号することと、
記憶するために、前記命令バイトバッファエントリに対応する前記復号されたマイクロオペレーションを前記オペレーションキューに出力することと、
によって、前記オペレーションキューへの出力、及び命令実行パイプラインの前記残りによる後続の実行のための復号されたマイクロオペレーションに、第２の予測されたアドレスブロックの命令アドレスを変換するように構成されている、請求項１０に記載の命令フェッチ及び復号ユニット。
【請求項１５】
前記オペレーションキャッシュパスからの前記前のオペレーションを待機するかどうかを示す前記インジケーションは、前記オペレーションキャッシュパスからの前記前のオペレーションを待機する必要性を示し、
前記命令バイトを復号することは、前記オペレーションキャッシュパスからの前記前のオペレーションが前記オペレーションキューに書き込まれ、または前記オペレーションキューに書き込まれるのにインフライトになった後に、前記命令バイトを復号することを含む、請求項１４に記載の命令フェッチ及び復号ユニット。
【請求項１６】
前記オペレーションキャッシュパスからの前記前のオペレーションを待機するかどうかを示す前記インジケーションは、前記オペレーションキャッシュパスからの前記前のオペレーションを待機する必要性がないことを示し、
前記命令バイトを復号することは、前記オペレーションキャッシュパスからの前記前のオペレーションが前記オペレーションキューに書き込まれ、または前記オペレーションキューに書き込まれるのにインフライトであることを待機することなく、前記命令バイトを復号することを含む、請求項１４に記載の命令フェッチ及び復号ユニット。
【請求項１７】
前記第１の予測されたアドレスブロックは、それに対して復号されたマイクロオペレーションがオペレーションキャッシュに記憶された少なくとも１つの命令、及びそれに対して復号されたオペレーションが前記オペレーションキャッシュに記憶されていない少なくとも１つの命令を含む、請求項１０に記載の命令フェッチ及び復号ユニット。
【請求項１８】
プログラム順序において復号されたマイクロオペレーションを記憶したオペレーションキューへの出力、及び命令実行パイプラインの残りによる後続の実行のための復号されたマイクロオペレーションに、第１の予測されたアドレスブロックの命令アドレスを変換する命令フェッチ及び復号ユニットを備え、
前記命令フェッチ及び復号ユニットは、
前記第１の予測されたアドレスブロックが、それに対して復号されたマイクロオペレーションがオペレーションキャッシュパスのオペレーションキャッシュに記憶された少なくとも１つの命令を含むと識別する共有フェッチロジックと、
第１のオペレーションキャッシュキューエントリを記憶するように構成されたオペレーションキャッシュキューであって、前記第１のオペレーションキャッシュキューエントリは、進行するための命令キャッシュパスからの信号を受信することを待機するかどうかを示すインジケーションを含む、前記オペレーションキャッシュキューと、
前記オペレーションキャッシュから、前記第１のオペレーションキャッシュキューエントリに対応する復号されたマイクロオペレーションを取得し、進行するための前記命令キャッシュパスから前記信号を受信することを待機するかどうかを示す、前記第１のオペレーションキャッシュキューエントリの前記インジケーションに基づいた時間において、前記第１のオペレーションキャッシュキューエントリに対応する前記復号されたマイクロオペレーションを前記オペレーションキューに出力するように構成されたオペレーションキャッシュデータ読み出しロジックと、を含む、プロセッサ。
【請求項１９】
前記インジケーションは、前記命令キャッシュパスからの前のマイクロオペレーションが前記オペレーションキューに書き込まれ、または前記オペレーションキューに書き込まれるのにインフライトであることを待機する必要性を示し、
前記復号されたマイクロオペレーションを前記オペレーションキューに出力することは、前記第１のオペレーションキャッシュキューに対応する前記復号されたマイクロオペレーションを前記オペレーションキューに出力する前に、前記命令キャッシュパスからの前記前のマイクロオペレーションが前記オペレーションキューに書き込まれ、または前記オペレーションキューに書き込まれるのにインフライトであるまで待機することを含む、請求項１８に記載のプロセッサ。
【請求項２０】
前記インジケーションは、前記命令キャッシュパスからの前のマイクロオペレーションが前記オペレーションキューに書き込まれ、または前記オペレーションキューに書き込まれるのにインフライトであることを待機する必要性を示さず、
前記復号されたマイクロオペレーションを前記オペレーションキューに出力することは、前記命令パスからの前のマイクロオペレーションを待機することなく、前記第１のオペレーションキャッシュキューエントリに対応する前記復号されたマイクロオペレーションを出力することを含む、請求項１８に記載のプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本出願は、その内容が本明細書における参照によって以下に組み込まれる、２０１８年６月２１日に出願された米国特許出願第１６／０１４，７１５号の利益を主張する。
【背景技術】
【０００２】
マイクロプロセッサ命令実行パイプラインは、命令をフェッチし、実行のためにマイクロオペレーションに命令を復号する。命令フェッチ及び復号は、非常に多くの電力を消費し、また、性能のボトルネックとなることがある。命令フェッチ及び復号への改善が常に行われている。
【発明の概要】
【０００３】
添付図面を例として併用して、以下の説明からより詳細な理解を得ることができる。
【図面の簡単な説明】
【０００４】
【図１】１つ以上の開示される特徴を実装することができる、実施例のデバイスのブロック図である。
【図２】実施例に従った、図１のプロセッサの命令実行パイプラインのブロック図である。
【図３】実施例に従った、図２の命令実行パイプラインの命令フェッチ及び復号ユニットの構成要素を示すブロック図である。
【図４Ａ】実施例に従った、命令フェッチ及び復号ユニットの共有フェッチロジックのオペレーションの方法のフローチャートである。
【図４Ｂ】実施例に従った、オペレーションキャッシュからキャッシュされ復号されたマイクロオペレーションをフェッチするオペレーションキャッシュキューのエントリを処理する方法のフローチャートである。
【図４Ｃ】実施例に従った、命令バイトバッファに記憶された命令バイトをフェッチ及び復号する方法のフローチャートである。
【発明を実施するための形態】
【０００５】
命令フェッチ及び復号ユニットは、前に復号された命令を記憶したオペレーションキャッシュ、及び復号されていない命令バイトを記憶した命令キャッシュを含む。命令フェッチ及び復号ユニットは、分岐予測子によって予測された、予測されたアドレスブロックに対応する命令をフェッチする。命令フェッチ及び復号ユニットは、フェッチ制御ブロックを含み、フェッチ制御ブロックは、予測されたアドレスブロックがオペレーションキャッシュパスまたは命令キャッシュパスからフェッチされるべきであるかどうか、及びそれらのキャッシュ内のどのエントリが関連する命令を保持するかを判定する。オペレーションキャッシュパスは、命令がオペレーションキャッシュ内で利用可能であるときに使用される。オペレーションキャッシュパスは、オペレーションキャッシュから復号されたマイクロオペレーションを取り出す。命令キャッシュパスは、命令キャッシュから命令バイトを取り出し、それらの命令バイトをマイクロオペレーションに復号する。
【０００６】
フェッチ制御ロジックは、予測されたアドレスブロックに対するヒットを検出するよう、オペレーションキャッシュのタグアレイを検査する。本明細書で他に説明されるフェッチ制御ロジックの特別な特徴に起因して、予測されたアドレスブロックをフェッチするために１つよりも多いオペレーションキャッシュエントリが必要とされるケースでは、単一のサイクルにおいて複数のヒットが検出可能である。それに対してオペレーションキャッシュ内でヒットが発見されない命令について、命令キャッシュパスは、命令キャッシュ及びより高いレベルのキャッシュから命令バイトをフェッチし、それらの命令を復号する。
【０００７】
フェッチ制御ロジックは、オペレーションキャッシュキューエントリを生成する。それらのエントリは、エントリの命令アドレスよりも前の命令が、命令キャッシュパスによってサービスされることになるかを示し、よって、オペレーションキャッシュパスが、そのオペレーションキャッシュキューエントリに対して復号されたマイクロオペレーションを出力する前に、前の命令に対して復号されたオペレーションを出力するよう、命令キャッシュパスを待機する必要があるかどうかを示す。フェッチ制御ロジックはまた、命令キャッシュパスに対して命令キャッシュキューエントリを生成し、命令キャッシュパスは、命令バイトバッファエントリの命令に対応する復号されたマイクロオペレーションが、それら自体が出力される前に、前の命令に対してマイクロオペレーションを出力するよう、オペレーションキャッシュパスを待機する必要があるかどうかを示す。よって、両方のパスは、いずれかの特定の復号されたオペレーションに対しても、そのようなオペレーションが、出力されることになる反対のパスからの復号されたオペレーションを待機する必要があるかどうかを知る。この同期機構は、他のパスを待機する必要があることに起因してワークがストールする必要があるまで、そのワークがいずれかのパスにおいて進行することを可能にする。複数のオペレーションキャッシュを検出する能力の組み合わせは、予測されたアドレスブロックに対して単一のサイクルにおいてヒットし、同期機構は、最小レイテンシを有する異なるパスの間の切り替えを可能にする。
【０００８】
図１は、本開示の態様が実装される、実施例のデバイス１００のブロック図である。デバイス１００は、例えば、コンピュータ、ゲーミングデバイス、ハンドヘルドデバイス、セットトップボックス、テレビ、携帯電話、またはタブレットコンピュータを含む。デバイス１００は、プロセッサ１０２、メモリ１０４、記憶装置１０６、１つ以上の入力デバイス１０８、及び１つ以上の出力デバイス１１０を含む。デバイス１００は、入力ドライバ１１２及び出力ドライバ１１４を含む。デバイス１００が図１には示されない追加の構成要素を含んでもよいことが理解されよう。
【０００９】
プロセッサ１０２は、既知であるように、マイクロプロセッサ、マイクロコントローラ、または他のデバイスなど、ソフトウェアを実行することが可能なコンピューティングデバイスである。メモリ１０４は、プロセッサ１０２による使用のための命令及びデータを記憶する。実施例では、メモリ１０４は、プロセッサ１０２と同一のダイ上に位置する。別の実施例では、メモリ１０４は、プロセッサ１０２とは異なるダイ上に位置する。メモリ１０４は、ランダムアクセスメモリ（ＲＡＭ）、動的ＲＡＭ、またはキャッシュなどの揮発性メモリを含む。いくつかの実施例では、メモリ１０４は、不揮発性メモリを含む。
【００１０】
記憶装置１０６は、ハードディスクドライブ、ソリッドステートドライブ、光学ディスク、またはフラッシュドライブなどの固定のまたは着脱可能の記憶装置を含む。入力デバイス１０８は、キーボード、キーパッド、タッチスクリーン、タッチパッド、検出器、マイクロフォン、加速度計、ジャイロスコープ、生体スキャナ、ネットワーク接続（例えば、無線ＩＥＥＥ８０２信号の送信及び／または受信のための無線ローカルエリアネットワークカード）、及び／または他の入力デバイスを含む。出力デバイス１１０は、ディスプレイ、スピーカ、プリンタ、触覚フィードバックデバイス、１つ以上のライト、アンテナ、ネットワーク接続（例えば、無線ＩＥＥＥ８０２信号の送信及び受信のための無線ローカルエリアネットワークカード）、及び／または他の出力デバイスを含む。
【００１１】
入力ドライバ１１２は、プロセッサ１０２及び入力デバイス１０８と通信し、プロセッサ１０２が入力デバイス１０８から入力を受信することを可能にする。様々な実施例では、デバイス１００は、１つまたは１つよりも多い入力ドライバ１１２を含む（１つのみが示されるが）。入力ドライバ１１２は、カスタム、固定機能ハードウェア、プログラム可能ハードウェア、プロセッサ（プロセッサ１０２など）上で実行するソフトウェア、またはいずれかのそれらの組み合わせとして具体化される。様々な実施例では、入力ドライバ１１２は、プロセッサ１０２及び入力デバイス１０８の両方に結合された、ペリフェラルコンポーネントインターコネクトエクスプレス（ＰＣＩｅ）ポートなどのポートに挿入された拡張カードを含む。出力ドライバ１１４は、プロセッサ１０２及び出力デバイス１１０と通信し、プロセッサ１０２が出力デバイス１１０に出力を送信することを可能にする。様々な実施例では、デバイス１００は、１つまたは１つよりも多い出力ドライバ１１４を含む（１つのみが示されるが）。出力ドライバ１１４は、カスタム、固定機能ハードウェア、プログラム可能ハードウェア、プロセッサ（プロセッサ１０２など）上で実行するソフトウェア、またはいずれかのそれらの組み合わせとして具体化される。様々な実施例では、出力ドライバ１１４は、プロセッサ１０２及び入力デバイス１０８の両方に結合された、ペリフェラルコンポーネントインターコネクトエクスプレス（ＰＣＩｅ）ポートなどのポートに挿入された拡張カードを含む。
【００１２】
図２は、実施例に従った、図１のプロセッサ１０２内に含まれる、命令実行パイプライン２００のブロック図である。命令実行パイプライン２００は、メモリにデータを出力すること、及びレジスタファイル２１８内のレジスタなど、命令実行パイプライン２００内の要素の状態を修正すること、などの命令をメモリから取り出し、命令を実行する。
【００１３】
命令実行パイプライン２００は、命令キャッシュを介してシステムメモリ（メモリ１０４など）から命令をフェッチし、フェッチされた命令を復号する命令フェッチ及び復号ユニット２０２を含む。フェッチされた命令を復号することは、命令実行パイプライン２００による実行のために、フェッチされた命令をマイクロオペレーション（単に「オペレーション」とも）に変換する。用語「命令」は、プロセッサ１０２に対して命令セットアーキテクチャにおいて指定されたタスクを指す。命令は、ソフトウェアによる実行に対して指定されてもよい。マイクロオペレーションは、一般的にソフトウェアによって直接使用可能でないサブタスクである。代わりに、マイクロオペレーションは、ソフトウェアによって要求された命令を実行するために、プロセッサ１０２によって実際に実行される個々のタスクである。よって、命令を復号することは、機能的ユニット２１６、ロード／記憶ユニット２１４、及び命令実行パイプライン２００の他の部分に適用されることになる制御信号を識別することを含む。ある命令を復号することは、命令ごとに複数のマイクロオペレーションをもたらし、その他の命令を復号することは、命令ごとに１つのマイクロオペレーションをもたらす。
【００１４】
実行パイプライン２００はまた、マイクロオペレーションを処理する演算を実行する機能的ユニット２１６、マイクロオペレーションによって指定されるようにデータキャッシュ２２０を介してシステムメモリからデータをロードし、またはシステムメモリにデータを記憶するロード／記憶ユニット２１４、並びにマイクロオペレーションに対して機能するデータを記憶したレジスタを含むレジスタファイル２１８を含む。
【００１５】
並び替えバッファ２１０は、現在インフライトである命令を追跡し、インフライトの間に順序が正しくない実行を許可するにも関わらず、命令の順序が正しい除却を保証する。「インフライト」命令は、並び替えバッファ２１０によって受信されたが、まだ「除却」されておらず、すなわち、プロセッサのアーキテクチャ状態にコミットされた結果（例えば、アーキテクチャレジスタに書き込まれた結果）をまだ有さない命令を指す。命令の全てのマイクロオペレーションが実行されたとき、命令は、除却されると考えられる。予約ステーション２１２は、インフライトマイクロオペレーションを維持し、マイクロオペレーションに対してオペランドを追跡する。全てのオペランドが特定のマイクロオペレーションの実行に対して準備ができているとき、予約ステーション２１２は、実行するために、機能的ユニット２１６またはロード／記憶ユニット２１４にマイクロオペレーションを送信する。
【００１６】
命令実行パイプライン２００の様々な要素は、共通データバス２２２を介して通信する。例えば、機能的ユニット２１６及びロード／記憶ユニット２１４は、共通データバス２２２に結果を書き込み、結果は、従属する命令／マイクロオペレーションの実行のために予約ステーション２１２に、及び実行を終了したインフライト命令の最終的な処理結果として並び替えバッファ２１０に書き込まれてもよい。
【００１７】
いくつかの技術では、命令フェッチ及び復号ユニット２０２は、前に復号された命令に対応するマイクロオペレーションを記憶したオペレーションキャッシュを含む。オペレーションの間、命令フェッチ及び復号ユニット２０２は、それらの命令に対して復号オペレーションを実行する代わりに、復号されたマイクロオペレーションがオペレーションキャッシュに記憶されているかどうかを判定するようオペレーションキャッシュをチェックし、そのような発見されたマイクロオペレーションを出力する。復号命令が相対的に電力を必要とし、高レイテンシであることを理由に、オペレーションキャッシュを使用することは、電力消費を削減すること、及び処理スループットを改善することを支援する。
【００１８】
オペレーションキャッシュによる１つの問題は、復号されたマイクロオペレーションがオペレーションキャッシュに存在するときにオペレーションキャッシュを使用することと、復号されたマイクロオペレーションがオペレーションキャッシュに存在しないときに復号ユニットにおいてそれらの命令を復号することとの間で切り替える必要があることに起因して生じる。様々な理由により、それらのいくつかは、本明細書における他で説明され、いくつかの実施態様では、オペレーションキャッシュからフェッチすることと、命令キャッシュから復号することとの間の切り替えは、いくつかの循環ペナルティを引き起こすことがある。この理由により、オペレーションキャッシュから復号されたマイクロオペレーションをフェッチすることと、復号されたマイクロオペレーションをオペレーションキャッシュ内に有していない命令に対してマイクロオペレーションを生成する命令を復号することとの間で切り替えることと関連付けられたレイテンシを削減する技術が提供される。図２は、それらの技術が適用されるプロセッサパイプライン２００の一実施例を示し、当業者は、本開示の教示が他のパイプラインアーキテクチャにも適用されることを理解するであろう。
【００１９】
図３は、実施例に従った、命令フェッチ及び復号ユニット２０２の構成要素を示すブロック図である。命令フェッチ及び復号ユニット２０２は、分岐予測子３０２、予測キュー３０４、共有フェッチロジック３０５、オペレーションキャッシュパス３０１、命令キャッシュパス３０３、及びオペレーションキュー３２８を含む。共有フェッチロジック３０５は、オペレーションキャッシュタグルックアップ回路３１０、オペレーションキャッシュタグアレイ３０６、命令キャッシュタグルックアップ回路３１２、命令キャッシュタグアレイ３０８、及びフェッチ制御回路３１３を含む。オペレーションキャッシュパス３０１は、オペレーションキャッシュキュー３１４、オペレーションキャッシュデータ読み出し回路３２０、及びオペレーションキャッシュデータアレイ３２２を含む。命令キャッシュパス３０３は、命令キャッシュキュー３１５、命令キャッシュデータ読み出し回路３１６、より高いレベルのキャッシュ（複数可）及びシステムメモリに通信可能に結合された命令キャッシュデータアレイ３１８、命令バイトバッファ３２４、並びにデコーダ３２６を含む。本明細書で使用されるように、用語「オペレーションキャッシュ」は、オペレーションキャッシュタグルックアップ回路３１０、オペレーションキャッシュタグアレイ３０６、オペレーションキャッシュデータ読み出し回路３２０、及びオペレーションキャッシュデータアレイ３２２の組み合わせを指す。本明細書で使用されるように、用語「命令キャッシュ」は、命令キャッシュタグルックアップ回路３１２、命令キャッシュタグアレイ３０８、命令キャッシュデータ読み出し回路３１６、及び命令キャッシュデータアレイ３１８の組み合わせを指す。
【００２０】
オペレーションキャッシュ及び命令キャッシュなどのいずれかのキャッシュは、タグアレイを含み、タグアレイは、特定のタグ及びインデックスがキャッシュ内で、及びキャッシュに対してデータを記憶したデータアレイ内でヒットするかどうかの判定を可能にする。よって、オペレーションキャッシュは、オペレーションキャッシュタグアレイ３０６及びオペレーションキャッシュデータアレイ３２２を含み、命令キャッシュは、命令キャッシュタグアレイ３０８及び命令キャッシュデータアレイ３１８を含む。様々な実施例では、図３に示されるユニットのいずれかまたは全ては、固定機能ハードウェアとして実装される（すなわち、固定機能回路として）。
【００２１】
分岐予測子３０２は、命令フェッチ及び復号ユニット２０２の残りによる消費のために予測されたアドレスを生成する。既知の技術を通じて、分岐予測子３０２は、予測された命令アドレスのシーケンスとして指定されるように、命令実行パイプライン２００において実行しているソフトウェアが実行することになる命令のシーケンスを識別することを試みる。この命令シーケンスの識別は、様々な実行状態情報（現在の命令ポインタアドレス、並びに様々な実施例では、特定の分岐が取られるか否かの履歴を示すデータ、及び／または他のデータを含む分岐予測履歴など）を使用する分岐予測を含む。分岐予測子３０２は、分岐予測子３０２及び命令実行パイプライン２００の他の部分が、予測誤りされた分岐パスからの命令に対してオペレーションを無効にすることと共に、分岐予測子３０２が命令アドレスを正確な分岐パスに変更することなど、予測誤りを修正するアクションを実行するケースでは、予測誤りすることがある。多種多様な分岐予測技術が存在し、様々な実施例では、分岐予測子３０２は、予測された命令アドレスのシーケンスを識別するいずれかの技術的に実現可能な分岐予測技術を使用する。
【００２２】
予測キュー３０４は、分岐予測子３０２からの予測されたアドレスを記憶する。予測キュー３０４は、分岐予測子３０２と命令フェッチ及び復号ユニット２０２の残りとの間の分離キューとしての役割を果たし、分岐予測子３０２のオペレーションのタイミングが命令フェッチ及び復号ユニット２０２の残りのオペレーションのタイミングに依存しないことを可能にする。分岐予測子３０２によって出力され、予測キュー３０４に記憶された予測されたアドレスのフォーマットは、範囲によって定義された命令アドレスのグループである、予測されたアドレスブロックの形式にある。
【００２３】
共有フェッチロジック３０５は、予測されたアドレスブロックに対応するアドレスが、オペレーションキャッシュに記憶されている対応する変換に起因して、オペレーションキャッシュパス３０１によってサービス可能であると判定されるかどうかに基づいて、予測されたアドレスブロックに対して動作し、そのような予測されたアドレスブロックからオペレーションキャッシュパス３０１、命令キャッシュパス３０３、またはその両方にアドレスを送信する。より詳細には、共有フェッチロジック３０５は、特定の予測されたアドレスブロックのいずれかのアドレスがオペレーションキャッシュに記憶されているかどうかを判定するようオペレーションキャッシュタグアレイ３０６を精査するオペレーションキャッシュタグルックアップ３１０を含む。特定の予測されたアドレスブロックに対して、このルックアップに基づいて、フェッチ制御回路３１３は、オペレーションキャッシュパス３０１及び／または命令キャッシュパス３０３によってサービスするためのオペレーションキャッシュキューエントリまたは命令キャッシュキューエントリのいずれかまたは両方を生成する。少なくとも１つのオペレーションキャッシュキューエントリが特定の予測されたアドレスブロックに対して生成される場合、オペレーションキャッシュパス３０１は、そのオペレーションキャッシュキューエントリをサービスし、命令実行パイプライン２００の残りによって処理するために、オペレーションキャッシュからキャッシュされ復号されたオペレーションを取り出し、オペレーションキュー３２８にそのようなキャッシュされ復号されたオペレーションを転送する。オペレーションキャッシュパス３０１によって完全にサービス可能でない予測されたアドレスブロックに対して（すなわち、それに対して、予測されたアドレスブロックのアドレスの全てではないがいくつかが、オペレーションキャッシュに記憶された対応する復号された命令を有し、または予測されたアドレスブロックのアドレスのいずれもが、オペレーションキャッシュに記憶された対応する復号された命令を有していない）、命令キャッシュパス３０３は、命令キャッシュから命令バイトをフェッチし、次いで、それらの命令バイトを復号することによって、その予測されたアドレスブロックを部分的または完全にサービスする。オペレーションキャッシュキューエントリ及び命令キャッシュキューエントリは、特定の予測されたアドレスブロックに対してオペレーションキャッシュパス３０１及び／または命令キャッシュパス３０３によって実行されるようワークを反映する。
【００２４】
共有フェッチロジック３０５によって出力されたキャッシュキューエントリは、オペレーションキャッシュパス３０１及び命令キャッシュパス３０３が、サービスされることになるアドレスの相対的順序に関して整合することを可能にするインジケーションを含む。より詳細には、相対的プログラム順序に従うこの整合は、オペレーションキャッシュパス３０１及び命令キャッシュパス３０３の各々に進むキャッシュキューエントリに対し、反対のパス（すなわち、オペレーションキャッシュパス３０１に対する命令キャッシュパス３０３または命令キャッシュパス３０３に対するオペレーションキャッシュパス３０１）が特定のキャッシュキューエントリに対して命令アドレスの直前に命令に対して復号されたマイクロオペレーションを取得することになるかどうかのインジケーションを含めることによって促進される。そのようなインジケーションが存在する場合、オペレーションキャッシュパス３０１または命令キャッシュパス３０３は、「待機」インジケーションが存在する命令アドレスをサービスする前に、そのような直前の命令アドレスをサービスするよう、反対のパスを待機する。このようにして待機することによって、復号されたマイクロオペレーションは、プログラム順序においてオペレーションキュー３２８に出力される。オペレーションキュー３２８は、命令フェッチ及び復号ユニット２０２に対するエンドポイントまたは最終段階としての役割を果たす。より詳細には、オペレーションキュー３２８は、命令実行パイプライン２００の残りによってサービスするために、オペレーションキャッシュパス３０１及び命令キャッシュパス３０３のプログラム順序出力を記憶する。オペレーションキュー３２８はまた、命令実行パイプライン２００の後続の段階のオペレーションタイミングから命令フェッチ及び復号ユニット２０２のオペレーションタイミングを分離する分離バッファとしての役割を果たす。
【００２５】
ここで、共有フェッチロジック３０５、オペレーションキャッシュパス３０１、及び命令キャッシュパス３０３のオペレーションは、例示され、追加の詳細を含むそれらのパスの個々の構成要素に関して、図４Ａ〜図４Ｃをも参照して、より詳細に説明される。特に、図４Ａは、共有フェッチロジック３０５のオペレーションを示し、図４Ｂは、オペレーションキャッシュパス３０１のオペレーションを示し、図４Ｃは、命令キャッシュパス３０３のオペレーションを示す。
【００２６】
図４Ａは、実施例に従った、共有フェッチロジック３０５のオペレーションの方法４００のフローチャートである。図１〜図３のコンテキストにおいて説明されたが、当業者は、いずれかの技術的に実現可能な順序において図４Ａのステップを実行するいずれかのシステムが本開示の範囲内に収まることを理解するであろう。
【００２７】
方法４００は、オペレーションキャッシュタグルックアップ３１０及び命令キャッシュタグルックアップ３１２が予測キュー３０４から予測されたアドレスブロックを取り出す、ステップ４０２において開始する。ステップ４０４において、オペレーションキャッシュタグルックアップ回路３１０及び命令キャッシュタグルックアップ回路３１２は、オペレーションキャッシュが予測されたアドレスブロックの全てに対し、予測されたアドレスブロックの一部に対し、または予測されたアドレスブロックのいずれでもないものに対して、キャッシュされ復号されたオペレーションを記憶するかどうかを判定するために、予測されたアドレスブロックを消費する。それを行うためのいずれかの技術的に実現可能な技術が可能であるが、予測されたアドレスブロックをルックアップするための詳細なルックアップオペレーションの実施例がここで提供される。
【００２８】
この実施例に従って、オペレーションキャッシュタグルックアップ回路は、オペレーションキャッシュ内の予測されたアドレスブロックに対してヒットがいずれかヒットが存在するかどうかを判定するよう、予測されたアドレスブロックを表すアドレスを、オペレーションキャッシュタグアレイ３０６に適用する。オペレーションキャッシュは、各々のインデックスが特定のセットと関連付けられ、各々のタグが１つ以上の方式と関連付けられた、セットアソシアティブキャッシュである。タグは、アドレスの上位ビット（アドレスのビット［４７：１２］など）に対応し、インデックスは、アドレスの次に下位のビットであるビット（アドレスのビット［１１：６］など）に対応する。タグが部分タグであることが可能であり、部分タグは、いくつかの技術（ハッシングなど）を通じて短縮された完全タグのバージョンである。本開示の全体を通じて、用語「タグ」は、適切である「部分タグ」によって置き換えられてもよい。
【００２９】
オペレーションキャッシュタグルックアップ３１０は、次に続くように、予測されたアドレスブロックを表すアドレスを、オペレーションキャッシュタグアレイ３０６に適用する。オペレーションキャッシュタグルックアップ３１０は、そのインデックスによって識別されたセット内にあるタグを出力する、予測されたアドレスブロックから導出されたインデックスを、オペレーションキャッシュタグアレイ３０６に適用する。予測されたアドレスブロックから導出されたタグが読み取られたタグのうちの１つ以上に一致する場合にヒットが発生する。
【００３０】
インデックス及びタグの組み合わせに対する各々のヒットは、予測されたアドレスブロック内の１つ以上の命令に対して変換されたマイクロオペレーションを記憶することができるオペレーションキャッシュ内にエントリが存在することを示す。オペレーションキャッシュが命令キャッシュラインを完全にカバーしないことがある１つ以上の個々の命令に対応するエントリを記憶することを理由に、単にタグ及びインデックスに加えて、予測されたアドレスブロックに対応するアドレスの範囲内の全ての命令からのどの特定の命令が特定のヒットに対応するかを示す情報が必要とされる。この識別情報は、開始オフセット値として、オペレーションキャッシュタグアレイ３０６の各々のエントリに記憶される。より詳細には、典型的な命令キャッシュは、キャッシュラインの粒度で命令を記憶する。言い換えると、キャッシュヒットは、インデックス及びタグによって表されるアドレスの部分と合致する特定の量のデータがキャッシュに記憶されることを示す。しかしながら、オペレーションキャッシュは、キャッシュラインよりも小さいアドレス範囲をカバーする１つ以上の個々の命令に対してエントリ（復号されたマイクロオペレーション）を記憶する。よって、オペレーションキャッシュ内の特定の命令に対するヒットは、アドレスの上位ビット（例えば、ビット［４７：６］）を表す、インデックス及びタグの一致と共に、バイトレベルまで下方に合致するアドレスの下位ビット（例えば、［５：０］）を表す開始オフセットへの一致を必要とする（いくつかの命令セットアーキテクチャに対して、２または４バイトの粒度においてのみ命令が存在することがあり、したがって、オフセットのビット［０］または［１：０］を排除することができる）。
【００３１】
上記説明されたように、開始オフセット情報は、オペレーションキャッシュタグアレイ３０６内の全てのエントリに記憶される。オペレーションキャッシュに記憶されたキャッシュされ復号されたマイクロオペレーションによってカバーされる命令アドレスの範囲を識別するために、オペレーションキャッシュエントリがサイズにおいて可変であることがあるので、オペレーションキャッシュタグアレイ３０６内の各々のエントリは、そのエントリに対応する命令の終了オフセットを示す情報を記憶する。この終了オフセットは、エントリに対応する最後の命令の後の次の命令のアドレスオフセットとして記憶される。次の命令オフセットを示す情報の目的は、その次の命令がオペレーションキャッシュに記憶されたマイクロオペレーションを復号していた場合、次のオペレーションキャッシュエントリに対するヒット状態が同一のサイクルにおいてルックアップされることを可能にすることである。第１のエントリの終了オフセットを、同一のインデックスにおいて一致するタグを有する他のタグアレイエントリの開始オフセットと比較することによって、第２のエントリが存在するかどうかが識別される。同様に、第２のエントリの終了オフセットは、第３のエントリが存在するかどうかを発見するよう、同一のインデックスにおいて一致するタグを有する他のタグアレイエントリの開始オフセットと比較される。
【００３２】
つまり、オフセット情報は、オペレーションキャッシュエントリヒットによってカバーされる予測されたアドレスブロック内の特定のアドレス範囲の識別を可能にし（インデックスが適用されるときのタグへの一致を介して）、オペレーションキャッシュタグルックアップ３１０が、そのエントリによってカバーされない次の命令のアドレスを識別することを可能にする。インデックスがオペレーションキャッシュタグアレイ３０６に適用されるとき、複数のエントリが読み取られる。各々のエントリは、タグ、開始オフセット、及び終了オフセット（次の命令オフセットとも称される）を含む。オペレーションキャッシュエントリのタグ及び開始オフセット並びに予測されたアドレスブロックのタグ及び開始オフセットの両方の間の一致は、第１のエントリに対するオペレーションキャッシュヒットをシグナルする。第１のエントリの終了オフセットは、第２のエントリを識別するよう、予測されたアドレスブロックのタグとも一致した他のエントリの開始オフセットと比較される。第２のエントリの終了オフセットは、本明細書における他で説明されるように、単一のサイクルにおける複数のエントリに対する順次的なヒット検出を共につなぐために使用される。識別されたエントリの各々に対して、終了オフセットは、予測されたアドレスブロックの終了オフセットと比較される。予測されたアドレスブロックの終了オフセットが一致し、または上回るとき、そのブロックが完全にカバーされており、更なるつながれたエントリは、その予測されたアドレスブロックの処理に対して無視される。
【００３３】
ステップ４０６において、オペレーションキャッシュタグルックアップ回路３１０は、オペレーションキャッシュタグアレイ３０６内で少なくとも１つのヒットが存在するかどうかを判定する。少なくとも１つのヒットが存在し、少なくとも１つのヒットが完全な予測されたアドレスブロックに対して全ての命令をカバーする場合、方法４００は、ステップ４０８に進む。少なくとも１つのヒットが存在し、予測されたアドレスブロックに対していくつかの命令をカバーするが、全ての命令をカバーしない場合、方法４００は、ステップ４１０に進む。オペレーションキャッシュタグアレイ３０６内にヒットが存在しない場合、方法４００は、ステップ４１４に進む。
【００３４】
ステップ４０８において、フェッチ制御回路３１３は、予測されたアドレスブロックに対するヒットに関する情報によりオペレーションキャッシュキューエントリを生成し、オペレーションキャッシュに書き込む。オペレーションキャッシュキューエントリは、各々のヒットに対するオペレーションキャッシュ内のインデックス及び方式を示す情報、並びにこのオペレーションキャッシュキューエントリに対するアドレスをサービスすることがパス変更を必要とするかどうかに関するインジケーションを含む。セット（インデックスに対応する）及び方式がオペレーションキャッシュ内で一意なエントリを識別することを理由に、「方式」が記憶される。方式は、タグ及びオフセットの各々の組み合わせに対して一意であり、インデックスによって識別されたセット内で単一のエントリを一意に識別する。パス変更は、このオペレーションキャッシュキューエントリによってサービスされる命令の直前の命令が命令キャッシュパス３０３によってサービスされるときに発生する。よって、インジケーションは、前の予測されたアドレスブロックが命令キャッシュパス３０３によってサービスされる場合に設定される（または、より詳細には、前の予測されたアドレスブロックの最後の命令が命令キャッシュパス３０３によってサービスされる場合）。オペレーションキャッシュキューエントリは、図４Ｂに関して説明されるように、オペレーションキャッシュパス３０１によってサービスされる。
【００３５】
ステップ４０６に再度目を向けると、オペレーションキャッシュ内のヒットが、予測されたアドレスブロックの全てではないがいくつかがオペレーションキャッシュによってカバーされることを示す場合、方法４００は、ステップ４１０に進む。ステップ４１０において、フェッチ制御回路３１３は、オペレーションキャッシュパス３０１に対してオペレーションキャッシュキューエントリを生成し、それらのオペレーションキャッシュキューエントリをオペレーションキャッシュキュー３１４に書き込む。オペレーションキャッシュキュー３１４は、共有フェッチロジック３０５が予測されたアドレスブロックを処理し、オペレーションキャッシュキューエントリを作成するタイミングを、オペレーションキャッシュデータ読み出し回路３２０がオペレーションキャッシュキューエントリを消費し、オペレーションキャッシュデータアレイ３２２を読み出し、プログラム順序において、復号されたオペレーションをオペレーションキュー３２８に出力するタイミングから分離する、分離バッファとしての役割を果たす。それらのオペレーションキャッシュキューエントリは、各々のヒットに対するオペレーションキャッシュ内のインデックス及び方式、並びに直前の命令からのパス変更が存在するかどうかを示すパス変更インジケーションを含む。より詳細には、パス変更インジケーションは、特定のキャッシュキューエントリによってサービスされる命令アドレスの直前の命令が命令キャッシュパス３０３によってサービスされることになるかどうかを示す。また、ステップ４１２において、フェッチ制御回路３１３は、命令キャッシュキュー３１５への記憶のための命令キャッシュキューエントリを生成する。命令キャッシュキューエントリは、ヒットが発生する命令キャッシュのインデックス及び方式、命令キャッシュからフェッチする開始オフセット及び終了オフセット、並びに最初のそのようなエントリに対してパス変更が発生することのインジケーションを含む。命令キャッシュキューに書き込まれた開始オフセットは、この予測されたアドレスブロックに対してヒットした最後のオペレーションキャッシュエントリの終了オフセットである。命令キャッシュキューに書き込まれた終了オフセットは、予測されたアドレスブロックの終了オフセットである。同一の予測されたアドレスブロックの命令である前の命令がオペレーションキャッシュパス３０１によってサービスされることを理由に、パス変更インジケーションは、この命令キャッシュキューエントリに対して設定される。
【００３６】
ステップ４０６に目を向け戻すと、オペレーションキャッシュ内で予測されたアドレスブロックに対するヒットが存在しない場合、方法４００は、ステップ４１４に進む。ステップ４１４において、フェッチ制御回路３１３は、命令キャッシュキュー３１５への記憶のための命令キャッシュキューエントリを生成する。命令キャッシュキューエントリは、ヒットが発生する命令キャッシュのインデックス及び方式、命令キャッシュからフェッチする開始オフセット及び終了オフセット、並びに最初のそのようなエントリに対してパス変更が発生するかどうかのインジケーションを含む。命令キャッシュキューに書き込まれた開始オフセットは、予測されたアドレスブロックの開始オフセットである。命令キャッシュキューに書き込まれた終了オフセットは、予測されたアドレスブロックの終了オフセットである。このインジケーションは、最初のエントリの命令の直前の命令がオペレーションキャッシュパス３０１によってサービスされることになる場合に設定される。
【００３７】
ステップ４１２または４１４のいずれかの後、方法４００は、ステップ４１６に進む。ステップ４１６において、命令キャッシュデータ読み出し回路３１６は、命令キャッシュキューの命令キャッシュキューエントリに基づいて、命令キャッシュデータアレイ３１８を読み出す。特に、命令キャッシュデータ読み出し回路３１６は、特定の命令キャッシュキューエントリに対してインデックス及び方式によって指定されたエントリにアクセスし、命令キャッシュから命令バイトを取得する。命令バイトがより上位レベルのキャッシュまたはシステムメモリからフェッチされる必要があるケースでは、いくつかの命令が命令キャッシュまたはオペレーションキャッシュに記憶されない可能性がある。命令キャッシュパス３０３は、そのような状況でもサービスする。ステップ４１８において、命令キャッシュデータ読み出し回路３１６は、デコーダ３２６によって復号されたマイクロオペレーションに復号するために、命令キャッシュから読み出された命令バイトを命令バイトバッファ３２４に書き込む。
【００３８】
実施態様では、判定及びルックアップステップ（ステップ４０４及びステップ４０６）は、オペレーションキャッシュキューエントリ及び命令キャッシュキューエントリを生成するステップ（ステップ４０８、４１０、４１２、及び４１４）に関していくつかのサイクルにわたって、及びパイプライン方式において行われる（よって、少なくとも部分的に時間において重なる）。タグアレイの検査及びキャッシュキューエントリの生成が少なくとも部分的に時間が重なるパイプライン方式において実行されるそのようなオペレーションの実施例がここでは提供される。
【００３９】
この実施例に従って、それに対してヒットがオペレーションキャッシュ内で発生するいずれかの特定の予測されたアドレスブロックに対して、オペレーションキャッシュタグルックアップ回路３１０は、それに対してヒットが発生する最低命令アドレスオフセットとして使用する第１のオフセットを識別する。いずれかの特定のサイクルでは、この第１のオフセットを識別することは、現在のサイクルが、オペレーションキャッシュタグルックアップ３１０が現在の予測されたアドレスブロックを検査している第１のサイクルであるかどうかを含む、いくつかの因子に依存する。より詳細には、オペレーションキャッシュタグルックアップ３１０は、単一のサイクルにおいてオペレーションキャッシュタグアレイ３０６内の複数のヒットを識別することが可能である。しかしながら、オペレーションキャッシュタグルックアップ３１０が１つのサイクルにおいて検査することができるヒットの数に制限がある。オペレーションキャッシュタグルックアップ３１０が数秒の間または秒よりも長いサイクルの間に特定の予測されたアドレスブロックを検査している場合、そのサイクルの間に使用する第１のオフセットは、前のサイクルの最後のヒットによって指定された終了オフセットによって指定される（言い換えると、前のサイクルの最後のヒットは、このサイクルを使用する第１のオフセットをもたらす）。そうでなければ（すなわち、現在のサイクルが、予測されたアドレスブロックがオペレーションキャッシュタグルックアップ３１０によって検査されている第１のサイクルである場合）、オペレーションキャッシュタグアレイ３０６から使用する第１のオフセットを識別する異なる技術が使用される。
【００４０】
より詳細には、現在のサイクルが、オペレーションキャッシュタグルックアップ３１０が現在の予測されたアドレスブロックを検査している第１のサイクルである場合、以下の１つが当てはまる。
・それに対してオペレーションキャッシュ内のヒットが存在する次の命令が、前に予測されたアドレスブロックに対して次の予測されたアドレスブロックに属することを示したその予測されたアドレスブロックに対してオペレーションキャッシュ内のヒットが存在した（すなわち、オペレーションキャッシュタグアレイ３０６内のエントリは、エントリが順次的な予測されたアドレスブロックに及ぶことのインジケーションを含む。この「及ぶこと」のインジケーションが設定されるとき、終了オフセットは、順次的な予測されたアドレスブロックにおけるオフセットを指す）、
・前の予測されたアドレスブロックの最後の命令が、命令キャッシュパス３０３によってサービスされた（すなわち、復号されたオペレーションがその最後の命令に対してオペレーションキャッシュに記憶されていない）、または
・現在の予測されたアドレスブロックが、取られた分岐のターゲットを表す。
【００４１】
オペレーションキャッシュエントリが順次的な予測されたアドレスブロックに及ぶことを示した、前の予測されたアドレスブロック内にオペレーションキャッシュエントリヒットが存在したケースでは、そのエントリからの終了オフセットは、現在の予測されたアドレスブロックに対して第１のオフセットをもたらす。
【００４２】
前の予測されたアドレスブロックの最後の命令が命令キャッシュパス３０３によってサービスされたケースでは、使用される第１のオフセットは、予測されたアドレスブロックの開始オフセットである。実施態様では、オペレーションキャッシュタグは、このケースに対してルックアップされず、命令キャッシュパス３０３が使用される。しかしながら、「及ぶ」オペレーションキャッシュエントリを可能にしない他の実施態様は、ヒットのケースにおいて、オペレーションキャッシュタグヒットをルックアップし、オペレーションキャッシュパス３０１を使用することを選択することができる。
【００４３】
現在の予測されたアドレスブロックが取られた分岐のターゲットを表すケースでは、使用される第１のオフセットは、予測されたアドレスブロックの開始オフセットである。
【００４４】
インデックスがオペレーションキャッシュタグアレイ３０６に適用されるとき、複数のエントリが読み取られ、オペレーションキャッシュタグルックアップ３１０において使用される。各々のエントリは、タグ、開始オフセット、及び終了オフセット（次の命令オフセットとも称される）を含む。オペレーションキャッシュエントリのタグ及び開始オフセット、並びに予測されたアドレスブロックのタグ及び単に説明された第１のオフセットの両方の間の一致は、第１のエントリに対するオペレーションキャッシュヒットをシグナルする。第１のエントリの終了オフセットは、第２のエントリを識別するよう、予測されたアドレスブロックのタグとも一致した他のエントリの開始オフセットと比較される。第２のエントリの終了オフセットは更に、本明細書における他で説明されるように、単一のサイクルにおける複数のエントリに対する順次的なヒット検出を共につなぐために使用される。単一のサイクルの間に順次的なオペレーションキャッシュエントリの最大数に到達すること、または最も直近に検査されたオペレーションキャッシュタグアレイエントリが、次のオフセットが予測されたアドレスブロックの終了オフセットを上回ることを示すこと、のうちの１つ以上が発生するまで、オペレーションキャッシュタグルックアップ３１０は、同一のサイクルにおいてこのオペレーションを繰り返す。
【００４５】
オペレーションキャッシュは、複数のヒットが単一のサイクルにおいて発生することを可能にするいくつかの特性を有する。より詳細には、単一の予測されたアドレスブロック内の全てのヒットが同一のセット内に収まることの事実と組み合わせて、オペレーションキャッシュがセットアソシアティブであるという事実は、複数のヒットが単一のサイクルにおいて発生することを可能にする。この特性に起因して、現在の予測されたアドレスブロックから導出されたインデックスがオペレーションキャッシュタグアレイ３０６に適用されるとき、予測されたアドレスブロックに属する全てのエントリは、同一のセット内で発見される。インデックスがオペレーションキャッシュタグアレイ３０６に適用されることに応答して、オペレーションキャッシュタグアレイ３０６の全てのエントリが読み取られる（セットアソシアティブキャッシュの性質に起因して）。よって、オペレーションキャッシュタグルックアップ３１０は、上記説明された第１のエントリオフセットに基づいて、第１のエントリを取得することが可能である。次いで、オペレーションキャッシュタグルックアップ３１０は、既に読み取られたエントリの１つのオフセットに一致する第１のエントリの次の命令アドレスを使用することによって次のエントリを取得し、１つのサイクルにおいて順序付けることができるエントリの数に到達するまで、または読み出す更なる順次的なエントリが存在しなくなるまで（例えば、オペレーションキャッシュが、オペレーションキャッシュ内でヒットする命令の後の次の命令に対して復号されたマイクロオペレーションを記憶しない）のいずれかで、オペレーションキャッシュタグアレイ３０６のエントリがこのサイクルを既に読み取ったその方式において順序付けることを継続することが可能である。
【００４６】
つまり、いずれかの特定の予測されたアドレスブロックに対する全てのエントリが単一のセット内に収まることの事実は、インデックスがオペレーションキャッシュタグアレイ３０６に適用されるとき、その予測されたアドレスブロックに一致する全てのエントリに対するオフセット及び次の命令アドレスが読み取られることを意味する。この事実は、クロックサイクル期間内にオペレーションキャッシュタグアレイ３０６の複数のエントリを通じてつなぐために、単純な順次的なロジックが使用されることを可能にする。単一の予測されたアドレスブロックに対するエントリが複数のセットにおいて発見される場合、インデックスがオペレーションキャッシュタグアレイ３０６に複数回適用される必要があり、より長い時間を要することを理由に、複数のエントリを通じてつなぐことは、困難または不可能である。よって、オペレーションキャッシュタグアレイ３０６の複数のエントリを通じて読み出すことは、オペレーションキャッシュパス３０１のオペレーション速度を改善し、オペレーションキャッシュ内の複数のヒットについての情報が単一のサイクルにおいてオペレーションキャッシュキュー３１４に書き込まれることを可能にすることによって、オペレーションキャッシュキューエントリの簡潔さをも改善する。
【００４７】
いずれかの特定の予測されたアドレスブロックに対する全てのエントリがオペレーションキャッシュの同一のセット内に収まることを保証するために、いずれかの技術的に実現可能な方式が使用されてもよいが、ここでは、１つの特定の技術が説明される。この技術に従って、分岐予測子は、アドレスが６４バイトの合致したブロックなどの特定の合致したブロックサイズ内にあるように、全ての予測されたアドレスブロックを形成する。予測されたアドレスブロックは、合致した境界上で開始または終了する必要がないが、それらは、合致した境界にわたることが許容されない。この制約を本質的に観察しない分岐予測子３０２の実施態様を使用する場合、処理するための共有フェッチロジック３０５に対する複数のブロックに合致境界を及ばせるいずれかの予測されたアドレスブロックを分裂させるよう、分岐予測子３０２と共有フェッチロジック３０５との間に追加の組み合わせロジックが挿入されてもよい。この合致は、予測されたアドレスブロック内の全ての適法の開始オフセットがより下位のビット内でのみ異なることを意味する。オペレーションキャッシュタグアレイ３０６内のタグをルックアップするために使用されるインデックス（セットを定義する）は、それらの最下位ビットのいずれも有さない。それらの最下位ビットのいずれも有さないことによって、インデックスは、単一の予測されたアドレスブロック内の異なるアドレスに対して変化することができず、よって、その予測されたアドレスブロックを満たす必要があるいずれかの特定のオペレーションキャッシュエントリに対してセットが同一である必要がある。
【００４８】
シーケンス内の次の命令オフセットを使用して、オペレーションキャッシュタグアレイ３０６から複数のエントリを読み出す正に説明されたオペレーションは、本明細書で「オペレーションキャッシュタグアレイ３０６からの順次的なタグ読み出し」または同様の表現を介して称されてもよい。
【００４９】
オペレーションキャッシュタグアレイ３０６からの順次的なタグ読み出しが現在のサイクルの間に完了したとオペレーションキャッシュタグルックアップ３１０が判定すると、オペレーションキャッシュタグルックアップ３１０は、オペレーションキャッシュキュー３１４への記憶のためのオペレーションキャッシュキューエントリを生成する。マイクロオペレーションをオペレーションキャッシュデータアレイ３２２から後に読み取ることができるように、オペレーションキャッシュキューエントリは、現在のサイクルの間にオペレーションキャッシュタグアレイ３０６によって示された各々のヒットに対するオペレーションキャッシュ内のインデックス及び方式を示す情報を含む。加えて、各々のオペレーションキャッシュキューエントリは、オペレーションキャッシュキューエントリによって表される第１のヒットの直前の命令が命令キャッシュパス３０３によってサービスされることになるかどうか（すなわち、オペレーションキャッシュ内のキャッシュされたマイクロオペレーションの対応するセットが存在しないことに起因して）のインジケーションを含む。このインジケーションは、本明細書における他でより詳細に説明されるように、プログラム順序において（すなわち、実行されているソフトウェアに対して実行される命令のシーケンスによって示された順序）、マイクロオペレーションをオペレーションキュー３２８に記憶することを支援する。
【００５０】
フェッチ制御ロジック３１３は、特定のオペレーションキャッシュキューエントリが、第１のヒットの直前の命令が、次に続くように、命令キャッシュパス３０３によってサービスされることになるかどうかのインジケーションを含むかどうかを判定する。特定の予測されたアドレスブロックがオペレーションキャッシュタグルックアップ３１０によって検査された第２のサイクルまたは後のサイクルにオペレーションキャッシュキューエントリが対応する場合、オペレーションキャッシュキューエントリの直前の命令は、その命令が単一の予測されたアドレスブロックに対するマルチサイクル読み出しの一部ではないことを理由に、命令キャッシュパス３０３によってサービスされない。よって、前のサイクルにおいて、オペレーションキャッシュタグルックアップ３１０は、オペレーションキャッシュが直前の命令に対して復号されたマイクロオペレーションを記憶すると判定している。
【００５１】
特定の予測されたアドレスブロックがオペレーションキャッシュタグルックアップ３１０によって検査された第１のサイクルにオペレーションキャッシュキューエントリが対応する場合、前の予測されたアドレスブロックがオペレーションキャッシュによって完全にカバーされていたかどうかの判定が行われる。前の予測されたアドレスブロックがオペレーションキャッシュによって完全にカバーされていたケースでは（方法４００の決定ブロック４０６からである「はい、完全ＰＡＢをカバーする」としても示される）、オペレーションキャッシュキューエントリの直前の命令は、命令キャッシュパス３０３によってサービスされない。前の予測されたアドレスブロックがオペレーションキャッシュによって完全にカバーされていなかった場合、オペレーションキャッシュキューエントリの直前の命令は、命令キャッシュパス３０３によってサービスされない。
【００５２】
ここで共有フェッチロジック３０５の命令キャッシュサイドに目を向けると、命令キャッシュタグルックアップ回路３１２は、次に続くように、予測キューエントリを消費及び処理する。命令キャッシュタグルックアップ３１２は、予測されたアドレスブロックを検査し、予測されたアドレスブロックのインデックスを取得し、ヒットを識別するようそのインデックスを命令キャッシュタグアレイ３０８に適用する。命令キャッシュタグルックアップ３１２は、ヒットを表す情報をフェッチ制御回路３１３に提供する。いくつかの実施態様では、予測されたアドレスブロックのサイズが、命令キャッシュタグルックアップ３１２が１つのサイクルにおいてルックアップすることができるアドレス数よりも多いことが可能である。この状況では、命令キャッシュタグルックアップ３１２は、プログラム順序において、予測されたアドレスブロックの異なるアドレス範囲部分を通じて順序付け、それらのアドレス範囲部分の各々に対してヒットを識別する。それらのヒットに基づいて、フェッチ制御回路３１３は、命令キャッシュキュー３１５への記憶のための命令キャッシュキューエントリを生成する。それらの命令キャッシュキューエントリは、インデックス及び方式情報など、命令キャッシュ内のヒットを示す情報と共に、パス変更が特定の命令キャッシュキューエントリに対して発生するかどうかを示す情報を含む。オペレーションキャッシュパス３０１を取ることと、命令キャッシュパス３０３を取ることとの間での選択が命令キャッシュヒット状態とは独立しているので、当業者は、本明細書で説明される技術に直接関連しない様々なトレードオフに基づいて、命令キャッシュタグルックアップが共有フェッチロジック３０５または命令キャッシュパス３０３のいずれかにおいて行われてもよいことが分かるであろう。
【００５３】
図４Ｂは、実施例に従った、オペレーションキャッシュからキャッシュされ復号されたマイクロオペレーションをフェッチするよう、オペレーションキャッシュキュー３１４のエントリを処理する方法４３０のフローチャートである。図１〜図３のコンテキストにおいて説明されるが、当業者は、いずれかの技術的に実現可能な順序において図４Ｂのステップを実行するいずれかのシステムが本開示の範囲内に収まることを理解するであろう。
【００５４】
ステップ４３２において、オペレーションキャッシュデータ読み出し回路３２０は、オペレーションキャッシュキュー３１４がエンプティであるかどうかを判定する。エンプティである場合、方法４３０は、ステップ４３２を再度実行する。エンプティでない場合、方法４３０は、ステップ４３４に進む。ステップ４３４において、オペレーションキャッシュデータ読み出し回路３２０は、「先頭」（または「次の」）キャッシュキューエントリに対するパス変更インジケーションが設定されているかどうかを判定する。パス変更インジケーションが設定されている場合（消去されていない）、オペレーションキャッシュキューエントリは、処理される前に命令パスを待機する必要があり、よって、方法４３０は、ステップ４３６に進む。パス変更インジケーションが設定されていない場合（消去されている）、待機が行われず、方法４３０は、ステップ４３８に進む。ステップ４３６において、オペレーションキャッシュデータ読み出し回路３２０は、オペレーションキャッシュキューエントリによって表されるオペレーションよりも前の全てのマイクロオペレーションがオペレーションキューに書き込まれるかどうか、または復号され、オペレーションキュー３２８に書き込まれる処理において現在インフライトであるかどうかを判定する。オペレーションキャッシュキューエントリによって表されるオペレーションよりも前の全てのマイクロオペレーションがオペレーションキュー３２８に書き込まれ、または復号され、オペレーションキュー３２８に書き込まれる処理において現在インフライトである場合、方法４３０は、ステップ４３８に進み、オペレーションキャッシュキューエントリによって表されるオペレーションよりも前の全てのマイクロオペレーションがオペレーションキュー３２８に書き込まれず、または復号され、オペレーションキュー３２８に書き込まれる処理において現在インフライトでない場合、方法は、ステップ４３６に戻る。
【００５５】
ステップ４３８において、オペレーションキャッシュデータ読み出し回路３２０は、オペレーションキャッシュキューエントリのコンテンツに基づいて、キャッシュされ復号されたマイクロオペレーションを取得するよう、オペレーションキャッシュデータアレイ３２２を読み出す。ステップ４４０において、オペレーションキャッシュデータ読み出し回路３２０は、プログラム順序において、読み取られたマイクロオペレーションをオペレーションキュー３２８に書き込む。
【００５６】
ステップ４３８及び４４０の詳細な実施例がここで提供される。この実施例に従って、オペレーションキャッシュデータ読み出し回路３２０は、オペレーションキャッシュキューエントリからインデックス及びタグを取得し、オペレーションキャッシュキューエントリに対して復号されたマイクロオペレーションを取得するよう、そのインデックス及びタグをオペレーションキャッシュデータアレイ３２２に適用する。オペレーションキャッシュキューエントリが複数のヒットに対してデータを記憶することが可能であることを理由に、オペレーションキャッシュデータ読み出し回路３２０は、そのエントリによって表されるヒットの回数に応じて、オペレーションキャッシュキューエントリごとに１回以上、上記ルックアップを実行する。いくつかの実施態様では、オペレーションキャッシュデータ読み出し回路３２０は、単一のサイクルにおいて同一のオペレーションキャッシュキュー３１４のエントリから複数回のルックアップを実行し、他の実施態様では、オペレーションキャッシュデータ読み出し回路３２０は、サイクルごとに１回のルックアップを実行する。
【００５７】
図４Ｃは、実施例に従った、命令バイトバッファ３２４に記憶された命令バイトをフェッチ及び復号する方法４６０のフローチャートである。図１〜３のコンテキストにおいて説明されるが、当業者は、いずれかの技術的に実現可能な順序において図４Ｃのステップを実行するいずれかのシステムが本開示の範囲内に収まることを理解するであろう。
【００５８】
ステップ４６２において、命令バイトバッファ３２４は、命令バイトバッファ３２４がエンプティであるかどうかを判定する。命令バイトバッファがエンプティである場合、方法４６０は、ステップ４６２に戻り、命令バイトバッファがエンプティでない場合、方法４６０は、ステップ４６４に進む。ステップ４６４において、命令バイトバッファ３２４は、命令バイトバッファ３２４内の「先頭」（または「次の」）エントリに対するパス変更インジケーションが消去されるかどうか（パス変更がそのエントリに対して必要とされないことを示す）を判定する。インジケーションが消去されていない場合（すなわち、インジケーションが設定される）、方法４６０は、ステップ４６６に進み、インジケーションが消去されている場合（すなわち、インジケーションが設定されていない）、方法４６０は、ステップ４６８に進む。
【００５９】
ステップ４６６において、命令バイトバッファ３２４は、オペレーションキャッシュパス３０１によってサービスされる、プログラム順序において次のエントリの前の命令に対する全てのマイクロオペレーションが、オペレーションキュー３２８に書き込まれるかどうか、またはオペレーションキュー３２８に書き込まれているのにインフライトであるかどうかをチェックする。オペレーションキャッシュパス３０１によってサービスされる、プログラム順序において次のエントリの前の命令に対する全てのマイクロオペレーションが、オペレーションキュー３２８に書き込まれ、またはオペレーションキュー３２８に書き込まれているのにインフライトである場合、方法４６０は、ステップ４６８に進み、オペレーションキャッシュパス３０１によってサービスされる、プログラム順序において次のエントリの前の命令に対する全てのマイクロオペレーションが、オペレーションキュー３２８に書き込まれず、またはオペレーションキュー３２８に書き込まれているのにインフライトでない場合、方法４６０は、ステップ４６６に戻る。
【００６０】
ステップ４６８において、命令バイトバッファ３２４は、先頭エントリを読み出し、復号するためにデコーダ３２６にそのエントリの命令バイトを送信する。ステップ４７０において、デコーダ３２６は、復号されたマイクロオペレーションを生成するよう、既知の技術に従って命令バイトを復号する。ステップ４７２において、デコーダ３２６は、プログラム順序において、復号されたマイクロオペレーションをオペレーションキュー３２８に書き込む。
【００６１】
オペレーションキュー３２８は、命令実行パイプライン２００の他の後続の段階がそれらの復号されたマイクロオペレーションを消費することが可能であるように、復号されたマイクロオペレーションを並び替えバッファ２１０及び／またはそれらの段階に提供する。命令実行パイプライン２００の残りは、それからマイクロオペレーションが導出される命令によって表されるソフトウェアを稼働させるよう、既知の技術に従って、それらのマイクロオペレーションを消費及び実行する。一般的に知られているように、そのようなソフトウェアは、いずれかの技術的に実現可能な結果を生じさせることが可能であり、結果データをメモリに書き込むこと、入力／出力デバイスと相互作用すること、及び必要に応じて他のオペレーションを実行することなど、いずれかの技術的に実現可能なオペレーションを実行することが可能である。
【００６２】
復号されると、命令キャッシュは、いずれかの技術的に実現可能な置き換えポリシに基づいて、オペレーションキャッシュを更新するために復号されたオペレーションを使用する。それらの更新の目的は、プログラム実行の状態に対してオペレーションキャッシュを最新に維持することである（例えば、最新に復号されたオペレーションが後のプログラムフローにおける命令を復号する際の使用のためにオペレーションキャッシュにおいて利用可能であることを確実にするため）。
【００６３】
命令フェッチ及び復号ユニット２０２は、パイプライン化されたユニットであり、それは、１つの段階（例えば、分岐予測子）におけるワークが異なる段階（例えば、オペレーションキャッシュタグルックアップ３１０）におけるワークと同一のサイクルにおいて特定の命令アドレスに対して実行されることが可能であることを意味することが理解されるべきである。また、オペレーションキャッシュパス３０１及び命令キャッシュパス３０３が、プログラム順序において復号されたマイクロオペレーションを出力するよう同期されるが、同一のサイクルにおいて同一の、または異なる予測されたアドレスブロックに対してワークを実行することが可能である、独立した、並列したユニットであることが理解されるべきである。
【００６４】
上述したことに対する１つの変形は、命令キャッシュキュー３１５を使用する代わりに、命令キャッシュパス３０３が、命令バイトをどのアドレス範囲から取得するかを判定するよう、予測ブロックを直接読み出すことができることである。これを促進するために、フェッチ制御回路３１３は、どのアドレスをフェッチするかを示す情報を予測キュー３０４に、そのキューに対する先頭エントリとして書き込むことができ、命令キャッシュデータ読み出し回路３１６は、予測キュー３０４内の先頭エントリに基づいて、使用する次のアドレスを識別することができる。
【００６５】
本明細書で説明される技術は、オペレーションキャッシュから復号されたオペレーションをフェッチすることと、復号ユニットを使用して命令をフェッチ及び復号することとの間で切り替える際の低レイテンシの、オペレーションキャッシュを有する命令フェッチ及び復号ユニットにもたらす。この低レイテンシは、反対のパスからの出力を待機する必要があることに起因してワークが停止されるまで、そのワークがオペレーションキャッシュパス及び命令キャッシュパスの両方を通じてフローすることを可能にする同期機構を通じて達成される。オペレーションキャッシュパス３０１（すなわち、オペレーションキャッシュキュー３１４）及び命令キャッシュパス３０３（すなわち、命令バイトバッファ３２４）内の分離バッファの存在は、ワークが２つのパスの間の同期を理由に進行するよう消去されるまで、そのワークが保持されることを可能にする。単一のサイクルにおいて複数のヒットの検出を可能にする特別に構成されたオペレーションキャッシュタグアレイなどの他の改善は、例えば、エントリが予測キュー３０４から消費される速度を改善することによって帯域幅を改善し、オペレーションキャッシュデータアレイ３２２から単一のサイクルにおいて複数のエントリを読み出す実装を有する能力を可能にする。より詳細には、オペレーションキャッシュパス３０１及び命令キャッシュパス３０３の両方が現在のエントリを読み出した後（例えば、オペレーションキャッシュタグルックアップ３１０及び命令キャッシュタグルックアップ３１２を介して）、予測キュー３０４が次のエントリに進行することを理由に、サイクルごとの複数の命令がオペレーションキャッシュタグルックアップ３１０によってサービスされることを可能にすることは、予測キューエントリが消費される割合を加速化する。
【００６６】
プログラム順序において復号されたマイクロオペレーションを記憶したオペレーションキューへの出力、及び命令実行パイプラインの残りによる後続の実行のための復号されたマイクロオペレーションに、第１の予測されたアドレスブロックの命令アドレスを変換する方法が提供される。方法は、第１の予測されたアドレスブロックが、それに対して復号されたマイクロオペレーションがオペレーションキャッシュパスのオペレーションキャッシュに記憶された少なくとも１つの命令を含むと識別することと、第１のオペレーションキャッシュキューエントリをオペレーションキャッシュキューに記憶することであって、第１のオペレーションキャッシュキューエントリは、進行するための命令キャッシュパスから信号を受信することを待機するかどうかを示すインジケーションを含む、記憶することと、オペレーションキャッシュから、第１のオペレーションキャッシュキューエントリに対応する復号されたマイクロオペレーションを取得することと、進行するための命令キャッシュパスから信号を受信することを待機するかどうかを示す、第１のオペレーションキャッシュキューエントリのインジケーションに基づいた時間において、第１のオペレーションキャッシュキューエントリに対応する復号されたマイクロオペレーションをオペレーションキューに出力することと、を含む。
【００６７】
命令フェッチ及び復号ユニットは、プログラム順序において復号されたマイクロオペレーションを記憶したオペレーションキューへの出力、及び命令実行パイプラインの残りによる後続の実行のための復号されたマイクロオペレーションに、第１の予測されたアドレスブロックの命令アドレスを変換する。命令フェッチ及び復号ユニットは、第１の予測されたアドレスブロックが、それに対して復号されたマイクロオペレーションがオペレーションキャッシュパスのオペレーションキャッシュに記憶された少なくとも１つの命令を含むと識別するように構成された共有フェッチロジックと、第１のオペレーションキャッシュキューエントリを記憶したオペレーションキャッシュキューであって、第１のオペレーションキャッシュキューエントリは、進行するための命令キャッシュパスから信号を受信することを待機するかどうかを示すインジケーションを含む、オペレーションキャッシュキューと、オペレーションキャッシュから第１のオペレーションキャッシュキューエントリに対応する復号されたマイクロオペレーションを取得し、進行するための命令キャッシュパスから信号を受信することを待機するかどうかを示す、第１のオペレーションキャッシュキューエントリのインジケーションに基づいた時間において、第１のオペレーションキャッシュキューエントリに対応する復号されたマイクロオペレーションをオペレーションキューに出力するオペレーションキャッシュデータ読み出しロジックと、を含む。
【００６８】
プロセッサは、プログラム順序において復号されたマイクロオペレーションを記憶したオペレーションキューへの出力、及び命令実行パイプラインの残りによる後続の実行のための復号されたマイクロオペレーションに、第１の予測されたアドレスブロックの命令アドレスを変換する命令フェッチ及び復号ユニットを含む。命令フェッチ及び復号ユニットは、第１の予測されたアドレスブロックが、それに対して復号されたマイクロオペレーションがオペレーションキャッシュパスのオペレーションキャッシュに記憶された少なくとも１つの命令を含むと識別する共有フェッチロジックと、第１のオペレーションキャッシュキューエントリを記憶したオペレーションキャッシュキューであって、第１のオペレーションキャッシュキューエントリは、進行するための命令キャッシュパスからの信号を受信することを待機するかどうかを示すインジケーションを含む、オペレーションキャッシュキューと、オペレーションキャッシュから、第１のオペレーションキャッシュキューエントリに対応する復号されたマイクロオペレーションを取得し、進行するための命令キャッシュパスから信号を受信することを待機するかどうかを示す、第１のオペレーションキャッシュキューエントリのインジケーションに基づいた時間において、第１のオペレーションキャッシュキューエントリに対応する復号されたマイクロオペレーションをオペレーションキューに出力するオペレーションキャッシュデータ読み出しロジックと、を含む。
【００６９】
本明細書における開示に基づいて、多くの変形が可能であることが理解されるべきである。特徴及び要素が特定の組み合わせにおいて上記説明されたが、各々の特徴または要素は、他の特徴及び要素なしに単独で、または他の特徴及び要素との様々な組み合わせで、もしくは他の特徴及び要素なしの様々な組み合わせで使用されてもよい。
【００７０】
提供される方法は、汎用コンピュータ、プロセッサ、またはプロセッサコアにおいて実装されてもよい。適切なプロセッサは、例として、汎用プロセッサ、特殊目的プロセッサ、従来型プロセッサ、デジタルシグナルプロセッサ（ＤＳＰ）、複数のマイクロプロセッサ、ＤＳＰコアと関連した１つ以上のマイクロプロセッサ、コントローラ、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）回路、いずれかの他のタイプの集積回路（ＩＣ）、及び／または状態機械を含む。そのようなプロセッサは、ネットリストを含む（そのような命令は、コンピュータ可読媒体に記憶されることが可能である）、処理されたハードウェア記述言語（ＨＤＬ）命令及び他の中間データの結果を使用して製造工程を構成することによって製造されてもよい。そのような処理の結果は、上記開示の特徴を実装するプロセッサを製造する半導体製造工程において使用されるマスクワークであってもよい。
【００７１】
本明細書で提供される方法またはフローチャートは、汎用コンピュータまたはプロセッサによる実行のために非一時的コンピュータ可読記憶媒体に組み込まれたコンピュータプログラム、ソフトウェア、またはファームウェアにおいて実装されてもよい。非一時的コンピュータ可読記憶媒体の例は、リードオンリメモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、レジスタ、キャッシュメモリ、半導体メモリデバイス、内蔵ハードディスク及び着脱可能ディスクなどの磁気媒体、磁気光学媒体、並びにＣＤ−ＲＯＭディスク及びデジタル多用途ディスク（ＤＶＤ）などの光学媒体を含む。
【図１】
2021527887.tif 000003
【図２】
2021527887.tif 000004
【図３】
2021527887.tif 000005
【図４Ａ】
2021527887.tif 000006
【図４Ｂ】
2021527887.tif 000007
【図４Ｃ】
2021527887.tif 000008
【国際調査報告】
2021527887.tif 000009
2021527887.tif 000010