(57)【特許請求の範囲】
【請求項１】
プロセッサ（１０）であって、
前記プロセッサ（１０）によって受取られる複数個の命令バイトに対応するプリデコード情報を生成するよう構成されるプリデコードユニット（１２）を含み、前記プリデコード情報は、前記複数個の命令バイト内の特定の命令バイトに対応する第１の表示を含み、前記第１の表示は、第１の状態では、前記特定の命令バイトが命令の境界であることを示し、さらに、
前記プリデコードユニット（１２）に結合される命令キャッシュ（１４）を含み、前記命令キャッシュ（１４）は、前記プリデコードユニット（１２）から受取られる前記プリデコード情報および前記複数個の命令バイトを記憶するよう構成され、
前記プリデコード情報は、前記特定の命令バイトに対応する制御転送表示を含み、前記制御転送表示は、第１の状態では、前記特定の命令バイトが前記境界である前記命令が制御転送命令であることを示し、前記制御転送表示は、もし前記特定の命令バイトに対応する前記第１の表示が、前記特定の命令バイトが前記命令の前記境界でないことを示す第２の状態にあれば、前記命令の代替の特徴を示すことを特徴とする、プロセッサ。
【請求項２】
前記制御転送表示が前記第１の状態にあることと連係して前記第１の表示が前記第１の状態にある場合にのみ前記命令は前記制御転送命令である、請求項１に記載のプロセッサ。
【請求項３】
前記第１の表示が前記第１の状態にあることは、前記特定の命令バイトが命令の開始であることを示す、請求項１または請求項２に記載のプロセッサ。
【請求項４】
前記プリデコード情報は、複数個の前記第１の表示および複数個の前記制御転送表示を含む、請求項１、２または３に記載のプロセッサ。
【請求項５】
前記複数個の第１の表示の数および前記制御転送表示の対応する数は、前記複数個の命令バイトの数に等しい、請求項４に記載のプロセッサ。
【請求項６】
前記制御転送表示の特定の１つは、前記第１の表示の対応する１つが前記第１の状態になければ前記制御転送命令を示すものではない、請求項４または請求項５に記載のプロセッサ。
【請求項７】
コンピュータシステム（２００）であって、
請求項１から６のいずれかに記載のプロセッサ（１０）と、
前記プロセッサ（１０）に結合されるメモリ（２０４）とを含み、前記メモリ（２０４）は、前記複数個の命令バイトを記憶しかつ前記プロセッサ（１０）に前記複数個の命令バイトを与えるよう構成され、さらに、
入力／出力（Ｉ／Ｏ）デバイスであって、前記コンピュータシステム（２００）と前記Ｉ／Ｏデバイスに結合される別のコンピュータシステムとの間でデータを転送するよう構成される入力／出力デバイスを含む、コンピュータシステム。
【請求項８】
第２のプロセッサ（１０ａ）であって、前記第２のプロセッサ（１０ａ）によって受取られる前記複数個の命令バイトに対応する前記プリデコード情報を生成するよう構成される第２のプロセッサをさらに含む、請求項７に記載のコンピュータシステム。
【請求項９】
高速制御転送命令検出のための方法であって、前記方法は、
複数個の命令バイトをプリデコードして、前記複数個の命令バイトの各々に対応する制御転送表示および命令境界表示を生成するステップを含み、前記命令境界表示は、前記複数個の命令バイトの対応する１つが命令の境界であるかどうかを示し、もし前記複数個の命令バイトの前記対応する１つが前記命令の前記境界であれば、前記制御転送表示が前記命令が制御転送命令であるかどうかを示し、前記複数個の命令バイトの特定の１つに対応する前記制御転送表示は、もし前記複数個の命令バイトの前記特定の１つに対応する前記命令境界表示が、前記複数個の命令バイトの前記特定の１つが前記境界でないことを示すならば、前記複数個の命令バイトの前記特定の１つを含む前記命令の代替の特徴を示し、さらに、
前記複数個の命令バイトをフェッチすると前記命令境界表示および前記制御転送表示をスキャンしてそこの制御転送命令を識別するステップを含む、方法。
【請求項１０】
前記境界は前記命令の開始である、請求項９に記載の方法。
【請求項１１】
前記複数個の命令バイトを前記フェッチするより前に前記プリデコード情報および前記複数個の命令バイトを命令キャッシュ内に記憶するステップをさらに含む、請求項１０に記載の方法。
【発明の詳細な説明】
【０００１】
【発明の背景】
１．発明の分野
この発明は、プロセッサの分野に関し、より特定的には、プロセッサ内でのプリデコーディング技術に関する。
【０００２】
２．関連技術の説明
ＥＰ−Ａ−０  ６５１  ３２４は、プリデコードユニットと、対応する命令バイトとともにプリデコードユニットによって生成されたプリデコード情報を記憶するためにそこに結合される命令キャッシュとを含むプロセッサを開示する。プリデコード情報は、対応する命令が開始バイトまたは終了バイトであることを表示することができ、かつバイトのタイプを表示するプリデコードビットを含む。
ＵＳ−Ａ−５  ３３７  ４１５は、プリデコードビットを生成するプリデコードユニットと、対応する命令バイトとともにプリデコードビットを記憶するための命令キャッシュとを有するプロセッサを開示する。プリデコードビットは、「分岐」を表示するプリデコードビットを含み、分岐命令を専用分岐ユニットに向けることが可能である。
スーパースカラプロセッサは、１クロックサイクル当り複数の命令をディスパッチしかつ実行することによって、および、設計に従って可能な限り最短のクロックサイクルで動作することによって高性能を達成しようとする。所与のプロセッサが１クロックサイクル当り複数の命令をディスパッチしかつ／または実行するのに成功する程度まで、高性能が実現可能である。１クロックサイクル当りにディスパッチされる命令の平均数を増大させるために、プロセッサ設計者は、より広い発行速度を採用するスーパースカラプロセッサを設計してきた。「ワイド発行」スーパースカラプロセッサは、「ナロウ発行」スーパースカラプロセッサがディスパッチ可能であるよりも、１クロックサイクル当りの命令のより大きい最大数をディスパッチ（または発行）することが可能である。ディスパッチ可能な命令の数が、ナロウ発行プロセッサが処理可能であるよりも大きいようなクロックサイクル中に、ワイド発行プロセッサは、より多い命令をディスパッチすることによって、１クロックサイクル当りにディスパッチされる命令のより大きい平均数を獲得することが可能である。
【０００３】
多くのプロセッサは、コンピュータ産業でこれが広く受入れられているためにｘ８６命令セットを実行するよう設計されている。たとえば、カリフォルニア州サニィベイルのアドバンスト・マイクロ・ディバイシズ・インコーポレイテッド（Advanced Micro Devices, Inc.）からのＫ５およびＫ６プロセッサは、ｘ８６命令セットを実現する。ｘ８６命令セットは、さまざまな命令がメモリ内で異なった数のバイトを占有する可変長命令セットである。命令の型および、特定の命令の符号化のために選択されるアドレッシングモードが、その特定の命令の符号化によって占有されるバイトの数に影響を与え得る。ｘ８６命令セットのような可変長命令セットは、各命令について必要とされるバイトの数のみを占有することによって、特定のプログラムを記憶するために必要とされるメモリの量を最小限にする。対照的に、多くのＲＩＳＣアーキテクチャは、各命令が固定の予め定められた数のバイトを占有する固定長命令セットを採用する。
【０００４】
残念ながら、可変長命令セットは、ワイド発行プロセッサの設計を複雑にする。ワイドプロセッサが有効になるには、プロセッサは、命令ディスパッチハードウェアに十分な命令を与えるためにコードシーケンス内で同時かつ高速に多数の命令を識別可能でなければならない。コードシーケンス内の各可変長命令の場所は、先行する命令に依存するので、命令の高速な識別は困難である。十分な数の命令を識別することができなければ、ワイド発行構造によって大きく性能を向上させることはできないであろう。したがって、ディスパッチのために命令を高速かつ同時に識別するプロセッサが必要とされる。
【０００５】
ワイド発行スーパースカラプロセッサによって達成可能な性能にとって重要である別の特徴は、その分岐予測メカニズムの正確性および有効性である。ここに使用される場合、分岐予測メカニズムとは、ディスパッチのために識別される命令内の制御転送命令を検出し、識別された制御転送命令の実行の結果得られた次のフェッチアドレスを予測するハードウェアを指す。一般的に、「制御転送」命令とは、実行されると、実行されるべき次の命令がフェッチされるアドレスを特定する命令である。ジャンプ命令は、制御転送命令の一例である。ジャンプ命令は、ジャンプ命令のすぐ後に続くバイトのアドレス（「シーケンシャルアドレス」）と異なったターゲットアドレスを特定する。無条件ジャンプ命令では常に、フェッチされるべき次の命令はターゲットアドレスの命令となり、一方、条件付きジャンプ命令では、フェッチされるべき次の命令は、先の命令の実行結果に応答して（たとえば命令実行を介して条件フラグセットを特定することによって）、ターゲットアドレスの命令またはシーケンシャルアドレスの命令のいずれかとなる。ジャンプ命令に加えて命令の他の型もまた制御転送命令であり得る。たとえば、サブルーチンコールおよびリターン命令によって、次のフェッチアドレスを特定することに加えてスタック操作が可能となる。制御転送命令のこれらのさらなる型の多くは、（条件付または無条件のいずれかの）ジャンプ操作とさらなる命令操作とを含む。
【０００６】
制御転送命令は、さまざまな方法でターゲットアドレスを特定可能である。「相対」制御転送命令は、ターゲットアドレスを生成するために、相対制御転送命令に対応するアドレスに加算されるべき値（直接にまたは間接に）を含む。値が加算されるアドレスは、命令セット定義に依存する。ｘ８６制御転送命令については、制御転送命令のすぐ後に続くバイトのアドレスが、値が加算されるアドレスである。他の命令セットは、制御転送命令自体のアドレスに値を加算することを特定可能である。加算されるべき値を直接特定する相対制御転送命令については、値を記憶するために命令フィールドが含まれ、値は、「偏位」と呼ばれる。
【０００７】
他方で、「絶対」制御転送命令は、（ここでも直接または間接的に）ターゲットアドレス自体を特定する。したがって、絶対制御転送命令は、ターゲットアドレスを決定するのに制御転送命令に対応するアドレスを必要としない。ターゲットアドレスを間接的に（たとえば１つ以上のレジスタまたはメモリオペランドを介して）特定する制御転送命令を、「間接」制御転送命令と呼ぶ。
【０００８】
さまざまな利用可能な制御転送命令があるために、分岐予測メカニズムはかなり複雑なものとなり得る。しかしながら、制御転送命令は多くのプログラムシーケンスで頻繁に起こるので、ワイド発行プロセッサには、非常に有効な（たとえば正確かつ高速な）分岐予測メカニズムが必要とされる。分岐予測メカニズムが非常に正確でなければ、ワイド発行プロセッサは、１クロックサイクル当り多数の命令を発行するかもしれないが、究極的には、分岐予測誤りのために発行された命令の多くをキャンセルすることになり得る。他方で、ターゲットアドレスを生成するために分岐予測メカニズムによって使用されるクロックサイクルの数は、ターゲットアドレスがフェッチされるべき命令を考慮して、最小限にする必要がある。
【０００９】
「分岐命令」という言葉は、「制御転送命令」と同義であるものとしてここでは用いられる。
【００１０】
【発明の概要】
上記略述した課題は、この発明に従うプロセッサによって大部分解決される。このプロセッサは、命令バイトを命令キャッシュ内に記憶するより前にこれをプリデコードするよう構成される。プロセッサによって生成されたプリデコード情報は、どの命令バイトが命令の境界であるかを識別する命令境界表示と、どの命令が制御転送命令であるかを識別する制御転送表示とを含む。命令境界表示は、ディスパッチのために複数の命令を高速かつ並列に識別し、命令識別を並列化することによってワイド発行スーパースカラプロセッサをサポートする。さらに、制御転送表示は、ディスパッチのために識別される命令内の分岐命令の高速および並列識別を可能とする。有利には、このプロセッサによって採用される分岐予測メカニズムは、分岐命令の予測を生成するために分岐命令を迅速に位置付けし得る。分岐予測メカニズムは、分岐命令を高速で位置付け、従っては識別された分岐命令について高速で分岐予測を展開することが可能であるので、分岐予測メカニズムは、命令バイトがデコードされて分岐命令を位置付けた場合よりもより効率的に動作可能である。制御転送表示および命令境界表示の組合せによって、制御転送表示および命令境界表示をスキャンするだけで、分岐予測メカニズムは命令キャッシュからフェッチされる命令バイトの群内に分岐命令を迅速に位置付けすることが可能となる。より効率的な分岐予測メカニズムは、高性能レベルでワイド発行スーパースカラプロセッサをサポート可能である。ある実施例では、分岐予測メカニズムは、１クロックサイクル当り最大２分岐命令を予測しようとする。したがって、分岐予測メカニズムは、制御転送表示および命令境界表示をスキャンして、命令キャッシュからフェッチされる命令バイトの群内に第１の２分岐命令を位置付ける。
【００１１】
ある実施例では、命令境界表示は、各命令バイトに対応する開始ビットを含む。開始ビットは、対応する命令バイトが命令の先頭バイトであればセットされ、対応する命令バイトが命令の先頭バイトでなければクリアされる。制御転送表示は、同様に、各命令バイトに対応する制御転送ビットを含む。もしバイトが開始ビットによって命令の先頭バイトであると表示されれば、制御転送ビットを用いて命令が制御転送命令であるかどうかを表示する。したがって、分岐予測メカニズムは、命令キャッシュからフェッチされる命令バイトの群に対応する開始ビットおよび制御転送ビットをスキャンすることによって、分岐命令を検出し得る。
【００１２】
広くには、この発明は、プリデコードユニットおよび命令キャッシュを含むプロセッサを企図する。プリデコードユニットは、プロセッサによって受取られる複数個の命令バイトに対応するプリデコード情報を生成するよう構成される。プリデコード情報は、複数個の命令バイト内の特定の命令バイトに対応する、第１の状態では、特定の命令バイトが命令の境界であることを表示する第１の表示を含む。さらに、プリデコード情報は、特定の命令バイトに対応する、第１の状態では、その特定の命令バイトが境界である命令が制御転送命令であることを表示する制御転送表示を含む。プリデコードユニットに結合されて、命令キャッシュは、複数個の命令バイトおよびプリデコードユニットから受取られるプリデコード情報を記憶するよう構成される。
【００１３】
この発明はさらに、記憶装置およびデコーダを含むプリデコードユニットを企図する。記憶装置は、メモリから受取られる複数の命令バイトを記憶するよう構成される。デコーダは、複数個の命令バイトをデコードして、これに対応するプリデコード情報、すなわち、複数個の命令バイト内の各命令の境界を識別する境界表示と複数個の命令バイト内のどの命令が制御転送命令であるかを識別する制御転送表示とを含むプリデコード情報を生成するよう構成される。
【００１４】
さらに、この発明は、高速制御転送命令検出のための方法を企図する。複数個の命令バイトをプリデコードして、複数個の命令バイトの各々に対応する制御転送表示と命令境界表示とを生成する。命令境界表示は、複数個の命令バイトの対応する１つが命令の境界であるか否かを表示する。複数個の命令バイトの対応する１つが命令の境界であれば、制御転送表示が、その命令が制御転送命令であるか否かを表示する。命令境界表示および制御転送表示は、複数個の命令バイトをフェッチするとスキャンされ、その中の制御転送命令を識別する。
【００１５】
この発明はなおさらに、プロセッサ、メモリおよび入力／出力（Ｉ／Ｏ）装置を含むコンピュータシステムを企図する。プロセッサは、プロセッサによって受取られる複数個の命令バイトに対応するプリデコード情報を生成するよう構成される。プリデコード情報は、複数個の命令バイト内の特定の命令バイトに対応する第１の表示を含む。第１の表示は、第１の状態では、特定の命令バイトが命令の境界であることを表示する。プリデコード情報はまた、特定の命令バイトに対応する制御転送表示を含む。制御転送表示は、第１の状態では、その特定の命令バイトが境界である命令が制御転送命令であることを表示する。プロセッサに結合されて、メモリは、複数個の命令バイトを記憶しかつプロセッサに複数個の命令バイトを与えるよう構成される。Ｉ／Ｏ装置は、コンピュータシステムと、Ｉ／Ｏ装置に結合される別のコンピュータシステムとの間にデータを転送するよう構成される。
【００１６】
この発明の他の目的および利点は、以下の詳細な説明を読み、添付の図面を参照すると明らかとなる。
【００１７】
この発明は、さまざまな変形および代替の態様を許容するが、その特定の実施例が、図面の例によって示され、ここに詳細に記載される。しかしながら、図面およびそれに関する詳細な説明は、開示される特定の態様にこの発明を限定するものではなく、反対に、前掲のクレームによって定義されるようなこの発明の精神および範囲内にあるすべての変形、等価および代替を含むものである。
【００１８】
【詳細な説明】
図１を参照して、スーパースカラプロセッサ１０のある実施例のブロック図が示される。他の実施例が可能であり企図される。図１に示される実施例では、プロセッサ１０は、プリデコードユニット１２と、Ｌ１Ｉ−キャッシュ１４と、Ｌ０Ｉ−キャッシュ１６と、フェッチ／スキャンユニット１８と、命令キュー２０と、整列ユニット２２と、ルックアヘッド／コラプスユニット２４と、フューチャファイル２６と、リオーダバッファ／レジスタファイル２８と、第１の命令窓３０Ａと、第２の命令窓３０Ｂと、複数個の機能ユニット３２Ａ、３２Ｂ、３２Ｃおよび３２Ｄと、複数個のアドレス生成ユニット３４Ａ、３４Ｂ、３４Ｃおよび３４Ｄと、ロード／ストアユニット３６と、Ｌ１Ｄ−キャッシュ３８と、ＦＰＵ／マルチメディアユニット４０と、外部インターフェイスユニット４２とを含む。さまざまな文字が後に付された特定の参照番号によってここに示される要素は、参照番号のみを用いて集合的に呼ばれる。たとえば、機能ユニット３２Ａ、３２Ｂ、３２Ｃおよび３２Ｄは、機能ユニット３２として集合的に呼ばれる。
【００１９】
図１の実施例では、外部インターフェイスユニット４２は、プリデコードユニット１２、Ｌ１Ｄ−キャッシュ３８、Ｌ２インターフェイス４４およびバスインターフェイス４６に結合される。プリデコードユニット１２は、Ｌ１Ｉ−キャッシュ１４にさらに結合される。Ｌ１Ｉ−キャッシュ１４は、Ｌ０Ｉ−キャッシュ１６におよびフェッチ／スキャンユニット１８に結合される。フェッチ／スキャンユニット１８はまた、Ｌ０Ｉ−キャッシュ１６におよび命令キュー２０に結合される。命令キュー２０は、整列ユニット２２に結合され、これはさらにルックアヘッド／コラプスユニット２４に結合される。ルックアヘッド／コラプスユニット２４はさらに、フューチャファイル２６、リオーダバッファ／レジスタファイル２８、ロード／ストアユニット３６、第１の命令窓３０Ａ、第２の命令窓３０ＢおよびＦＰＵ／マルチメディアユニット４０に結合される。ＦＰＵ／マルチメディアユニット４０は、ロード／ストアユニット３６におよびリオーダバッファ／レジスタファイル２８に結合される。ロード／ストアユニット３６は、Ｌ１Ｄ−キャッシュ３８に結合される。第１の命令窓３０Ａは、機能ユニット３２Ａ〜３２Ｂにおよびアドレス生成ユニット３４Ａ〜３４Ｂに結合される。同様に、第２の命令窓３０Ｂは、機能ユニット３２Ｃ〜３２Ｄにおよびアドレス生成ユニット３４Ｃ〜３４Ｄに結合される。Ｌ１Ｄ−キャッシュ３８、機能ユニット３２およびアドレス生成ユニット３４の各々は、複数個の結果バス４８に結合され、これはさらに、ロード／ストアユニット３６、第１の命令窓３０Ａ、第２の命令窓３０Ｂ、リオーダバッファ／レジスタファイル２８およびフューチャファイル２６に結合される。
【００２０】
プリデコードユニット１２は、外部インターフェイスユニット４２によってフェッチされる命令バイトを受取り、これがＬ１Ｉ−キャッシュ１４に記憶されるより前にその命令バイトをプリデコードする。プリデコードユニット１２によって生成されたプリデコード情報は、同様に、Ｌ１Ｉ−キャッシュ１４内に記憶される。一般的に、プリデコード情報は、命令のフェッチおよび発行中に有用であり得るが、フェッチおよび発行動作中に高速で生成することが困難であり得る命令特徴の識別を支援するよう与えられる。ここでは、「プリデコード」という言葉は、命令をデコードして、命令キャッシュ（たとえばＬ１Ｉ−キャッシュ１４および／またはＬ０Ｉ−キャッシュ１６）に、デコードされている命令バイトと共に、後に記憶されるプリデコード情報を生成することを指すものとして用いられる。
【００２１】
ある実施例では、プロセッサ１０は、１命令バイト当り２ビットのプリデコード情報を採用する。これらビットのうち「開始ビット」と呼ばれる１ビットは、命令バイトが命令の先頭バイトであるか否かを表示する。命令バイトの群がフェッチされると、開始ビットの対応する組が、命令バイトの群内の命令間の境界を識別する。したがって、対応する開始ビットをスキャンすることによって、命令バイトの群から同時に複数の命令を選択可能である。開始ビットを用いて各命令の先頭バイトを識別することによって命令境界を定めることができるが、代替的に、終了ビットを用いて、各命令の最終バイトを識別することによって命令境界を定めることも可能である。
【００２２】
「制御転送」ビットと呼ばれる、この実施例で用いられる第２のプリデコードビットは、どの命令が分岐命令であるかを識別する。命令の先頭バイトに対応する制御転送ビットが、命令が分岐命令であるかどうかを表示する。命令のその後のバイトに対応する制御転送ビットは、小偏位フィールドを有する相対分岐命令を除いてドントケアである。ある特定の実施例に従うと、小偏位フィールドは、８ビットフィールドである。一般的に、「小偏位フィールド」とは、分岐命令によって生成されるターゲットアドレスよりも少ないビットを有する偏位フィールドのことをいう。小偏位フィールドを有する相対分岐命令については、偏位バイトに対応する制御転送ビットが、以下に記載するように用いられる。
【００２３】
命令バイトに対応するプリデコード情報を生成することに加えて、プリデコードユニット１２は、この実施例では、相対分岐命令の偏位フィールドを記録して実際にターゲットアドレスを記憶するよう構成される。言換えれば、プリデコードユニット１２は、プロセッサ１０によって採用される命令セットによって定義されるような相対分岐命令に対応するアドレスに、相対分岐命令の偏位を加算する。結果として得られたターゲットアドレスは、偏位に対する置換として偏位フィールドに符号化され、更新された偏位フィールドは、もともとの偏位フィールドの代わりにＬ１Ｉ−キャッシュ１４内に記憶される。ターゲットアドレス生成は、相対ターゲットアドレスを予め計算することによって簡素化され、したがって、分岐予測メカニズムはより効率的に動作可能である。
【００２４】
ｘ８６命令セットを採用するプロセッサ１０のある実施例では、プリデコードユニット１２は、８ビットおよび３２ビットの偏位フィールドを記録するよう構成される。３２ビット偏位フィールドは、ターゲットアドレスの全体を記憶可能である。他方で、８ビット偏位フィールドは符号化される。より特定的には、８ビット偏位フィールドおよび対応する制御転送プリデコードビットは、キャッシュラインオフセット部と相対キャッシュライン部とに分たれる。キャッシュラインオフセット部は、ターゲットアドレスのキャッシュラインオフセット部である。相対キャッシュライン部は、相対分岐命令を記憶するキャッシュラインより上またはそれより下のキャッシュラインの数に関して、ターゲットアドレスによって識別されるキャッシュライン（「ターゲットキャッシュライン」）を定義する。第１のキャッシュラインの各バイトが、第２のキャッシュライン内のバイトが記憶されるアドレスよりも数字的により大きいアドレスに記憶されているとき、第１のキャッシュラインは第２のキャッシュラインよりも上にあるという。反対に、第１のキャッシュライン内の各バイトが、第２のキャッシュライン内のバイトが記憶されるアドレスよりも数字的により小さいアドレスに記憶されているとき、第１のキャッシュラインは第２のキャッシュラインよりも下にあるという。符号化された８ビットの偏位は、分岐命令に対応する＋／−１２８バイトのアドレスであるアドレスを特定する。したがって、８ビット偏位を有する相対分岐命令によって到達され得る下および上のキャッシュライン数は限られている。相対キャッシュライン部は、この限られた組の上および下のキャッシュラインを符号化する。
【００２５】
下の表１および表２は、プロセッサ１０のある実施例に従うバイトに対応するプリデコード情報の例示の符号化を例示する。
【００２６】
【表１】
0003838417.tif 000002
【００２７】
【表２】
0003838417.tif 000003
【００２８】
プリデコードユニット１２は、受取った命令バイトおよび対応するプリデコード情報をＬ１Ｉ−キャッシュ１４に送り記憶させる。Ｌ１Ｉ−キャッシュ１４は、命令バイトおよびプリデコード情報を記憶する高速キャッシュメモリである。Ｌ１Ｉ−キャッシュ１４は、ダイレクトマップトおよびセットアソシアティブ構成を含む、任意の好適な構成を採用し得る。ある特定の実施例では、Ｌ１−Ｉキャッシュ１４は、６４バイトのキャッシュラインを採用する、１２８ＫＢの２ウェイセットアソシアティブキャッシュである。Ｌ１Ｉ−キャッシュ１４は、これに記憶される命令バイトに対応するプリデコード情報のための付加的記憶装置を含む。付加的記憶装置は、命令バイト記憶装置と同様に構成される。ここでは、「キャッシュライン」という言葉は、特定のキャッシュ内の記憶装置の割当のユニットを指すものとして用いる。一般的には、キャッシュライン内の複数バイトが一ユニットとしてキャッシュによって操作される（すなわち割当てられかつ割当解除される）。
【００２９】
ある実施例では、Ｌ１Ｉ−キャッシュ１４は、線形にアドレス指定されかつ物理的にタグ付けされる。キャッシュをインデックス付けするために用いられるアドレスビットの少なくとも１つが、物理的アドレスビットにその後に変換される線形アドレスビットである場合、キャッシュは線形にアドレス指定されるという。線形にアドレスされ／物理的にタグ付けされたキャッシュのタグは、インデックス付けするために用いられないビットに加えて各変換されたビットを含む。ｘ８６アーキテクチャによって特定されるように、命令は、セグメンテーション変換メカニズムを介して線形アドレスに変換され、ページ変換メカニズムを介して物理的アドレスにさらに変換される論理的アドレスを生成するよう定義される。論理的アドレスと対応する線形アドレスとが等しいような、フラットアドレッシングモードを採用することがますます通常となってきている。プロセッサ１０は、フラットアドレッシングモードを想定して構成可能である。したがって、命令を実行することによって生成される、フェッチアドレス、ターゲットアドレスなどは、線形アドレスである。ヒットがＬ１Ｉ−キャッシュ１４内で検出されるかどうかを決定するために、フェッチ／スキャンユニット１８によってそこに与えられた線形アドレスは、トランスレーションルックアサイドバッファ（ＴＬＢ）を用いて、インデックス付けされたキャッシュラインから物理的タグに相当する対応する物理的アドレスに変換され、ヒット／ミスを決定する。フラットアドレッシングモードが使用されない場合でも、プロセッサ１０はコードを実行可能であるが、論理的アドレスから線形アドレスを生成するためにさらなるクロックサイクルが用いられるだろう。
【００３０】
Ｌ０Ｉ−キャッシュ１６もまた、命令バイトを記憶する高速キャッシュメモリである。Ｌ１Ｉ−キャッシュ１４は大きいので、Ｌ１Ｉ−キャッシュ１４のアクセス時間は大きいものであり得る。ある特定の実施例では、Ｌ１Ｉ−キャッシュ１４は、２クロックサイクルアクセス時間を使用する。単一のサイクルフェッチアクセスを可能にするために、Ｌ０Ｉ−キャッシュ１６が採用される。Ｌ０Ｉ−キャッシュ１６は、Ｌ１Ｉ−キャッシュ１４よりも比較的小さく、したがって、より高速なアクセス時間をサポートし得る。ある特定の実施例では、Ｌ０Ｉ−キャッシュ１６は、５１２バイトのフルアソシアティブキャッシュである。Ｌ１Ｉ−キャッシュ１４と同様に、Ｌ０Ｉ−キャッシュ１６は、命令バイトのキャッシュラインおよび対応するプリデコード情報を記憶するよう構成される（たとえば、５１２バイトが８個の６４バイトキャッシュラインを記憶し、対応するプリデコードデータが付加的記憶装置に記憶される）。ある実施例では、Ｌ０Ｉ−キャッシュ１６は、線形にアドレス指定されかつ線形にタグ付けされ得る。
【００３１】
フェッチ／スキャンユニット１８は、Ｌ０Ｉ−キャッシュ１６についてのフェッチアドレスおよびＬ１Ｉ−キャッシュ１４についてのプリフェッチアドレスを生成するよう構成される。Ｌ０Ｉ−キャッシュ１６からフェッチされる命令は、フェッチ／スキャンユニット１８によってスキャンされて、ディスパッチのために命令を識別し、さらには、分岐命令を見つけ、見つけられた分岐命令に対応する分岐予測を形成する。命令スキャン情報および対応する命令バイトは、フェッチ／スキャンユニット１８によって命令キュー２０に記憶される。加えて、識別された分岐命令および分岐予測を用いて、Ｌ０Ｉ−キャッシュ１６についてのその後のフェッチアドレスを生成する。
【００３２】
フェッチ／スキャンユニット１８は、プリフェッチされたキャッシュラインがフェッチ／スキャンユニット１８によってフェッチされてプロセッサ１０にディスパッチされるより前に、Ｌ１Ｉ−キャッシュ１４からＬ０Ｉ−キャッシュ１６にキャッシュラインをプリフェッチしようとするプリフェッチアルゴリズムを採用する。任意の好適なプリフェッチアルゴリズムを使用してもよい。ある実施例では、フェッチ／スキャンユニット１８は、以下の場合を除いて、特定のクロックサイクル中にＬ０Ｉ−キャッシュ１６からフェッチされたキャッシュラインの、次のシーケンシャルキャッシュラインをプリフェッチするよう構成される。すなわち、（ｉ）分岐予測誤りの信号が発生された場合、（ii）Ｌ０Ｉ−キャッシュミスが検出された場合、または、（iii）Ｌ０Ｉ−キャッシュ１６をミスすると予想されるターゲットアドレスが生成された場合である。ある特定の実施例では、３２ビット偏位を採用する相対分岐命令、および、間接ターゲットアドレス生成を採用する分岐命令は、Ｌ０Ｉ−キャッシュ１６をミスすると予想される。（ｉ）の場合には、フェッチ／スキャンユニット１８は、訂正されたフェッチアドレスにシーケンシャルなキャッシュラインをプリフェッチする。（ii）および（iii）の場合には、フェッチ／スキャンユニット１８は、対応するミスまたはターゲットアドレスをフェッチする。
【００３３】
フェッチ／スキャンユニット１８は、クロックサイクル中に命令のより大きい「ラン」をフェッチするために、積極的分岐予測メカニズムを採用する。ここでは、命令の「ラン」とは、セット内で特定されるシーケンスで実行されると予測される１つ以上の命令のセットを指すものとして用いられる。たとえば、フェッチ／スキャンユニット１８は、Ｌ０Ｉ−キャッシュ１６から２４命令バイトのランをフェッチし得る。各ランは、いくつかのセクションに分たれ、これを、フェッチ／スキャンユニット１８は並列にスキャンして、分岐命令を識別し、命令キュー２０についての命令スキャン情報を生成する。ある実施例に従うと、フェッチ／スキャンユニット１８は、大きい命令ランをサポートするために、１クロックサイクル当り最大２分岐命令を予測しようとする。
【００３４】
命令キュー２０は、フェッチ／スキャンユニット１８によって与えられその後にディスパッチされる命令バイトを記憶するよう構成される。命令キュー２０は、先入先出（ＦＩＦＯ）バッファとして動作可能である。ある実施例では、命令キュー２０は、複数のエントリを記憶するよう構成され、各エントリは、命令のラン、ランの各セクション内の最大５命令を識別するスキャンデータ、および、ランの各セクションに対応するアドレスを含む。加えて、命令キュー２０は、最大４連続ランセクション内の最大６命令を選択してこれが整列ユニット２２に与えられるよう構成され得る。たとえば、命令キュー２０は、２〜３エントリを採用可能である。命令キュー２０の例示の実施例は、以下図１３に例示される。
【００３５】
整列ユニット２２は、命令キュー２０によって識別された命令を、ルックアヘッド／コラプスユニット２４内の一組の発行位置に送るよう構成される。言換えれば、整列ユニット２２は、命令キュー２０によって与えられたスキャン情報に応答して、命令キュー２０によって与えられたランセクションから各命令を形成するバイトを選択する。命令は、プログラム順序で発行位置に与えられる（すなわち、プログラム順序で第１である命令には、第１の発行位置が与えられ、プログラム順序で第２の命令には、第２の発行位置が与えられる、などである）。
【００３６】
ルックアヘッド／コラプスユニット２４は、整列ユニット２２によって与えられた命令をデコードする。ルックアヘッド／コラプスユニット２４によって検出されたＦＰＵ／マルチメディア命令は、ＦＰＵ／マルチメディアユニット４０に送られる。他の命令は、第１の命令窓３０Ａ、第２の命令窓３０Ｂおよび／またはロード／ストアユニット３６に送られる。ある実施例では、整列ユニット２２によって命令が整列させられた発行位置に基づいて、特定の命令が、第１の命令窓３０Ａまたは第２の命令窓３０Ｂの一方に送られる。ある特定の実施例に従うと、代替の発行位置からの命令は、代替の命令窓３０Ａおよび３０Ｂに送られる。たとえば、発行位置０、２および４からの命令は、第１の命令窓３０Ａに送られるであろうし、発行位置１、３および５からの命令は、第２の命令窓３０Ｂに送られるであろう。メモリ操作を含む命令はまた、ロード／ストアユニット３６に送られ、これはＬ１Ｄ−キャッシュ３８にアクセスする。
【００３７】
加えて、ルックアヘッド／コラプスユニット２４は、命令の特定の型についてのルックアヘッドアドレスまたは実行結果を生成しようとする。ルックアヘッドアドレス／結果生成は、ｘ８６命令セットを採用する実施例について特に有益であり得る。ｘ８６命令セットの性質のために、典型的なコードシーケンスでの命令の多くは、単純転送のバージョンである。この特徴の理由の１つは、ｘ８６命令が、その両方がソースオペランドであり、その一方がディスティネーションオペランドである、２つのオペランドを含むことである。したがって、各命令のソースオペランドの一方は、実行結果で上書される。さらに、ｘ８６命令セットは、レジスタオペランドを記憶するためにほんの少しのレジスタしか特定しない。したがって、多くの命令は、メモリ内に維持されるスタックへおよびそこからのオペランドの転送である。さらになお、多くの命令依存性は、ＥＳＰ／ＥＢＰレジスタに依存するものであるが、これらのレジスタに対する更新の多くは、先に記憶された値のインクリメントおよびデクリメントである。
【００３８】
これらの命令の実行を加速するために、ルックアヘッド／コラプスユニット２４は、クロックサイクル中にデコードされる命令の各々についてＥＳＰレジスタおよびＥＢＰレジスタのルックアヘッドコピーを生成する。加えて、ルックアヘッド／コラプスユニット２４は、各命令によって選択されるレジスタオペランドのためにフューチャファイル２６にアクセスする。各レジスタオペランドについて、フューチャファイル２６は、ディスティネーションオペランドとしてそのレジスタを有する最新の命令に対応するリオーダバッファ結果キューエントリを識別するタグまたは実行結果のいずれかを記憶することが可能である。
【００３９】
ある実施例では、ルックアヘッド／コラプスユニット２４は、（ｉ）メモリオペランドを含み、（ii）メモリオペランドのアドレスを形成するために使用されるレジスタオペランドが、フューチャファイル２６またはＥＳＰ／ＥＢＰのルックアヘッドコピーから利用可能である各命令ごとに、アドレス計算を実行しようとする。加えて、ルックアヘッド／コラプスユニット２４は、（ｉ）メモリオペランドを含まず、（ii）（インクリメントおよびデクリメントを含む）加算／減算操作を特定し、（iii）レジスタオペランドフューチャ２６またはＥＳＰ／ＥＢＰのルックアヘッドコピーから利用可能である各命令ごとに、結果計算を実行しようとする。このようにして、命令が命令窓３０Ａ〜３０Ｂに送られるより前に多くの単純操作が完了され得る。
【００４０】
ルックアヘッド／コラプスユニット２４は、ディスパッチされる命令の群間の依存性を検出し、そこで生成されるいずれの実行結果も、その命令結果に依存する命令にまとめてしまう。加えて、ルックアヘッド／コラプスユニット２４は、ルックアヘッド実行結果でフューチャファイル２６を更新する。ルックアヘッドコラプスユニット２４によって完了された命令操作（すなわち、アドレス生成および／または命令結果が生成され、ロード／ストアユニット３６またはフューチャファイル２６および結果キューが更新される）は、命令窓３０Ａ〜３０Ｂにディスパッチされない。
【００４１】
ルックアヘッド／コラプスユニット２４は、ディスパッチされた各命令ごとに、リオーダバッファ／レジスタファイル２８に結果キューエントリを割当てる。ある特定の実施例では、リオーダバッファ／レジスタファイル２８は、同時にディスパッチ可能な命令の最大数に対応する実行結果のために十分な記憶装置を有するラインに、実行結果の記憶場所が割当てされかつ割当解除されるよう、ライン指向態様で構成される結果キューを含む。最大数未満の命令がディスパッチされれば、ライン内のある記憶場所は空である。その後にディスパッチされる命令は、次の利用可能なラインを使用し、そのある記憶場所を空のままにしておく。ある実施例では、結果キューは、４０ラインを含み、その各々が、同時にディスパッチされる命令に対応する最大６命令結果を記憶し得る。実行結果は、命令キューから順番に、リオーダバッファ／レジスタファイル２８内に含まれるレジスタファイルにリタイアされる。加えて、リオーダバッファは、分岐予測誤りを処理し、分岐命令の実行によって生成された訂正されたフェッチアドレスをフェッチ／スキャンユニット１８に伝送する。同様に、他の例外を生成する命令は、リオーダバッファ内で処理される。例外を生成する命令の後の命令に対応する結果は、リオーダバッファによって廃棄される。レジスタファイルは、各設計されたレジスタごとに記憶場所を含む。たとえば、ｘ８６命令セットは、８個の設計されたレジスタを定義する。そのような実施例についてのレジスタファイルは、８記憶場所を含む。レジスタファイルは、マイクロコードユニットを採用する実施例においてマイクロコードユニットによって一次レジスタとして使用される記憶場所をさらに含んでもよい。フューチャファイル２６およびリオーダバッファ／レジスタファイル２８のある例示的実施例のさらなる詳細は、以下に図１４に例示される。
【００４２】
命令がルックアヘッド／コラプスユニット２４によってディスパッチされると、フューチャファイル２６は、設計されたレジスタの各々の投機的状態を維持する。レジスタディスティネーションオペランドを有する命令がルックアヘッド／コラプスユニット２４によってデコードされると、命令に割当てられるリオーダバッファ／レジスタファイル２８の結果キュー部内の記憶場所を識別するタグが、そのレジスタに対応するフューチャファイル２６の記憶場所に記憶される。対応する実行結果が与えられると、（そのレジスタを更新するその後の命令がまだディスパッチされていないと仮定すると）実行結果は、対応する記憶場所に記憶される。
【００４３】
なお、ある実施例では、最大６命令のグループが、命令キュー２０から選択され、パイプラインを経てルックアヘッド／コラプスユニット２４に一ユニットとして転送される。もし群内の１つ以上の命令がストール条件を発生すれば、群全体がストールする。この規則の例外は、群内のＥＳＰ更新の数のためにルックアヘッド／コラプスユニット２４がスプリットライン条件を発生した場合である。命令のそのような群をここでは、命令の「ライン」と呼ぶ。
【００４４】
命令窓３０は、ルックアヘッド／コラプスユニット２４から命令を受取る。命令窓３０は、命令に対応するオペランドが受取られるまで、命令を記憶し、実行のために命令を選択する。一旦、メモリ操作を含む命令のアドレスオペランドが受取られると、命令は、アドレス生成ユニット３４の１つに伝送される。アドレス生成ユニット３４は、アドレスオペランドからアドレスを生成し、このアドレスをロード／ユニット３６に転送する。他方で、一旦、メモリの実行オペランドが受取られると、命令は、機能ユニット３２の１つに伝送されて実行される。ある実施例では、各命令窓３０Ａ〜３０Ｂは、命令について２５記憶場所を含む。各整数窓３０Ａ〜３０Ｂは、これに接続されるアドレス生成ユニット３４および機能ユニット３２内で各クロックサイクルごとに実行されるために、最大２アドレス生成および２機能ユニット操作を選択するよう構成される。ある実施例では、Ｌ０Ｉ−キャッシュ１６からフェッチされた命令は、命令窓３０の１つに記憶されるまで順序通りフェッチされた状態を保っており、その時点で命令は飛越し実行可能となる。
【００４５】
ｘ８６命令セットを採用するプロセッサ１０の実施例では、命令は、ロード／ストアユニット３６についての暗黙のメモリ操作と、機能ユニット３２についての明示的機能操作とを含み得る。メモリオペランドを有さない命令は、メモリ操作を含まず、機能ユニット３２によって処理される。ソースメモリオペランドおよびレジスタディスティネーションオペランドを有する命令は、ロード／ストアユニット３６によって処理される暗黙のロードメモリ操作と、機能ユニット３２によって処理される明示的機能操作とを含む。メモリソース／ディスティネーションオペランドを有する命令は、ロード／ストアユニット３６によって処理される暗黙のロードおよびストアメモリ操作と、機能ユニット３２によって処理される明示的機能操作とを含む。最後に、明示的機能操作を有していない命令は、ロード／ストアユニット３６によって処理される。各メモリ操作によって、アドレス生成は、ルックアヘッド／コラプスユニット２４またはアドレス生成ユニット３４のいずれかによって処理されるようになる。メモリ操作と命令（すなわち機能操作）とはここでは別個のものとして呼ばれるが、単一の命令から生じ得る。
【００４６】
アドレス生成ユニット３４は、アドレス生成操作を実行するよう構成され、これによってロード／ストアユニット３６におけるメモリ操作のためにアドレスを生成する。生成されたアドレスは、結果バス４８を介してロード／ストアユニット３６に転送される。機能ユニット３２は、整数算術／論理演算を実行しかつ分岐命令を実行するよう構成される。実行結果は、結果バス４８を介して、フューチャファイル２６、リオーダバッファ／レジスタファイル２８および命令窓３０Ａ〜３０Ｂに転送される。アドレス生成ユニット３４および機能ユニット３２は、実行された命令に割当てられた結果キュータグを結果バス４８に送って、実行された命令を識別する。このようにして、フューチャファイル２６、リオーダバッファ／レジスタファイル２８、命令窓３０Ａ〜３０Ｂおよびロード／ストアユニット３６は、実行結果を、対応する命令と対応付けることが可能である。ＦＰＵ／マルチメディアユニット４０は、浮動小数点命令およびマルチメディア命令を実行するよう構成される。
【００４７】
ロード／ストアユニット３６は、メモリ操作を実行するためにＬ１Ｄ−キャッシュ３８とインターフェイスするよう構成される。メモリ操作とは、プロセッサ１０と外部メモリとの間のデータの転送のことである。メモリ操作は、明示的命令であってもよく、または機能ユニット３２によって実行されるべき操作をも含む命令の暗黙の一部であってもよい。ロードメモリ操作は、外部メモリからプロセッサ１０へのデータの転送を特定し、ストアメモリ操作は、プロセッサ１０から外部メモリへのデータの転送を特定する。Ｌ１Ｄ−キャッシュ３８内でメモリ操作についてヒットが検出されれば、メモリ操作は、外部メモリにアクセスすることなしにそこで完了される。ロード／ストアユニット３６は、（ルックアヘッドアドレス計算を介して）ルックアヘッド／コラプスユニット２４からまたはアドレス生成ユニット３４からメモリ操作についてのアドレスを受取り得る。ある実施例では、ロード／ストアユニット３６は、Ｌ１Ｄ−キャッシュ３８への１クロックサイクル当り最大３メモリ操作を実行するよう構成される。この実施例では、ロード／ストアユニット３６は、Ｄ−キャッシュ３８にまだアクセスしていない最大３０ロード／ストアメモリ操作をバッファするよう構成されてもよい。この実施例はさらに、Ｄ−キャッシュ３８をミスしたロードメモリ操作をバッファするために９６エントリミスバッファと、３２エントリストアデータバッファとを含むよう構成されてもよい。ロード／ストアユニット３６は、ロードメモリ操作とストアメモリ操作との間のメモリ依存性チェックを行うよう構成される。
【００４８】
Ｌ１Ｄ−キャッシュ３８は、データを記憶する高速キャッシュメモリである。セットアソシアティブおよびダイレクトマップト構成を含む、いかなる好適な構成がＬ１Ｄ−キャッシュ３８のために使用されてもよい。ある特定の実施例では、Ｌ１Ｄ−キャッシュ３８は、６４バイトラインを採用する、１２８ＫＢ２ウェイセットアソシアティブキャッシュである。Ｌ１Ｄ−キャッシュ３８は、たとえば、１ウェイ当り３２バンクのキャッシュメモリとして構成されてもよい。加えて、Ｌ１Ｄ−キャッシュ３８は、Ｌ１Ｉ−キャッシュ１４と同様にＴＬＢを採用する、線形にアドレス指定され／物理的にタグ付けされたキャッシュであってもよい。
【００４９】
外部インターフェイスユニット４２は、キャッシュミスに応答して、命令バイトおよびデータバイトのキャッシュラインをプロセッサ１０に転送するよう構成される。命令キャッシュラインは、プリデコードユニット１２に送られ、データキャッシュラインは、Ｌ１Ｄ−キャッシュ３８に送られる。加えて、外部インターフェイスユニット４２は、廃棄されたキャッシュラインがプロセッサ１０に対して変更されたのであれば、Ｌ１Ｄ−キャッシュ３８によって廃棄されたキャッシュラインをメモリに転送するよう構成される。図１に示すとおり、外部インターフェイスユニット４２は、Ｌ２インターフェイス４４を介して外部Ｌ２キャッシュにインターフェイスし、バスインターフェイス４６を介してコンピュータシステムにもインターフェイスするよう構成される。ある実施例では、バスインターフェイスユニット４６は、ＥＶ／６バスインターフェイスを含む。
【００５０】
図２を参照すると、フェッチ／スキャンユニット１８のある実施例のブロック図が示される。他の実施例が可能であり企図される。図２に示すとおり、フェッチ／スキャンユニット１８は、プリフェッチ制御ユニット５０と、複数個のネクスト選択ブロック５２Ａ〜５２Ｃと、命令選択マルチプレクサ（ｍｕｘ）５４と、命令スキャナ５６と、分岐スキャナ５８と、分岐履歴テーブル６０と、分岐選択マルチプレクサ６２と、リターンスタック６４と、間接アドレスキャッシュ６６と、フォワードコラプスユニット６８とを含む。プリフェッチ制御ユニット５０は、Ｌ１Ｉ−キャッシュ１４，Ｌ０Ｉ−キャッシュ１６、間接アドレスキャッシュ６６、リターンスタック６４、分岐履歴テーブル６０、分岐スキャナ５８、および、命令選択マルチプレクサ５４に結合される。ネクスト選択ブロック５２Ａは、Ｌ１Ｉ−キャッシュ１４に結合され、ネクスト選択ブロック５２Ｂ〜５２Ｃは、Ｌ０Ｉ−キャッシュ１６に結合される。各ネクスト選択ブロック５２は、命令選択マルチプレクサ５４に結合され、これはさらに分岐スキャナ５８および命令スキャナ５６に結合される。命令スキャナ５６は、命令キュー２０に結合される。分岐スキャナ５８は、分岐履歴テーブル６０、リターンスタック６４および分岐選択マルチプレクサ６２に結合される。分岐選択マルチプレクサ６２は、間接アドレスキャッシュ６６に結合される。分岐履歴テーブル６０および分岐スキャナ５８は、フォワードコラプスユニット６８に結合され、これは命令キュー２０に結合される。
【００５１】
プリフェッチ制御ユニット５０は、分岐スキャナ５８、分岐履歴テーブル６０、リターンスタック６４および間接アドレスキャッシュ６６から、（ターゲットアドレスおよびテイクン／ノットテイクン予測を含む）分岐予測情報を受取る。分岐予測情報に応答して、プリフェッチ制御ユニット５０は、Ｌ０Ｉ−キャッシュ１６についてのフェッチアドレスと、Ｌ１Ｉ−キャッシュ１４についてのプリフェッチアドレスとを生成する。ある実施例では、プリフェッチ制御ユニット５０は、Ｌ０Ｉ−キャッシュ１６について２つのフェッチアドレスを生成する。第１のフェッチアドレスは、分岐スキャナ５８によって識別される第１の分岐命令（もしあれば）に対応するターゲットアドレスとして選択される。第２のフェッチアドレスは、先のクロックサイクルにおいて選択されたフェッチアドレスに対するシーケンシャルアドレス（すなわち命令選択マルチプレクサ５４によって選択されたランに対応するフェッチアドレス）である。
【００５２】
Ｌ０Ｉ−キャッシュ１４は、２つのフェッチアドレスに対応するキャッシュライン（およびプリデコード情報）と、これらのキャッシュラインの各々に対してシーケンシャルであるキャッシュライン（およびプリデコード情報）とを、ネクスト選択ブロック５２Ｂ〜５２Ｃに与える。より特定的には、ネクスト選択ブロック５２Ｂは、シーケンシャルアドレスに対応するシーケンシャルキャッシュラインと、シーケンシャルキャッシュラインの次のインクリメンタルキャッシュラインとを受取る。ネクスト選択ブロック５２Ｃは、ターゲットアドレスに対応するターゲットキャッシュラインと、ターゲットキャッシュラインに対してシーケンシャルなキャッシュラインとを受取る。加えて、ネクスト選択ブロック５２Ｂ〜５２Ｃは、対応するフェッチアドレスのオフセット部を受取る。ネクスト選択ブロック５２Ｂ〜５２Ｃは各々、対応するフェッチアドレスのオフセット部を含むランセクションに始まって、受取ったキャッシュラインから命令バイトのラン（および対応するプリデコード情報）を選択する。各フェッチアドレスのオフセット部は、キャッシュライン内のどこからでも始まり得るので、選択されたランは、フェッチされたキャッシュラインおよびフェッチされたキャッシュラインに対しシーケンシャルなキャッシュラインの部を含み得る。したがって、フェッチされたキャッシュラインおよびシーケンシャルキャッシュラインはどちらも、ネクスト選択ブロック５２Ｂ〜５２Ｃによって受取られる。
【００５３】
同様に、ネクスト選択ブロック５２Ａは、Ｌ１Ｉ−キャッシュ１４からプリフェッチされたキャッシュライン（および対応するプリデコード情報）を受取り、そこから命令ランを選択する。１キャッシュラインはＬ１Ｉキャッシュ１４からプリフェッチされるので、そこから選択されたランは、プリフェッチアドレスのオフセット部がキャッシュラインの終わり近くにあるのであれば、１ラン全体を含まないことがあり得る。なお、Ｌ０Ｉ−キャッシュ１６からのフェッチキャッシュラインは、対応するアドレスがプリフェッチ制御ユニット５０によって生成されるのと同じクロックサイクル中に与えられ得るが、プリフェッチキャッシュラインは、Ｌ１Ｉ−キャッシュ１４のより大きいサイズおよびより遅いアクセス時間のために１クロックサイクルだけ遅延されることがある。プリフェッチされたキャッシュラインをネクスト選択ブロック５２Ａに与えるのに加えて、Ｌ１Ｉ−キャッシュ１４は、プリフェッチされたキャッシュラインをＬ０Ｉ−キャッシュ１６に与える。プリフェッチされたキャッシュラインが既に、Ｌ０Ｉ−キャッシュ１６内に記憶されていれば、Ｌ０Ｉ−キャッシュ１６は、プリフェッチされたキャッシュラインを廃棄可能である。しかしながら、プリフェッチされたキャッシュラインがＬ０Ｉ−キャッシュ１４内にまだ記憶されていなければ、プリフェッチされたキャッシュラインはＬ０Ｉ−キャッシュ１６に記憶される。このようにして、現在のところアクセスされ得るキャッシュラインは、Ｌ０Ｉ−キャッシュ１６に送られ、そこから高速にアクセスされる。ある例示の実施例に従うと、Ｌ０Ｉ−キャッシュ１６は、８エントリのフルアソシアティブキャッシュ構造を含む。フルアソシアティブ構造は、Ｌ０Ｉ−キャッシュ１６内に含まれるキャッシュラインの数が比較的小さいために、採用可能である。他の実施例は、他の編成（たとえばセットアソシアティブまたはダイレクトマップト）を採用可能である。
【００５４】
プリフェッチ制御ユニット５０は、命令選択マルチプレクサ５４を制御することによって分岐予測情報に応答してネクスト選択ブロック５２の１つによって与えられる命令ランを選択する。以下により詳細に説明するとおり、プリフェッチ制御ユニット５０は、クロックサイクルの初めに、分岐スキャナ５８、リターンスタック６４および間接アドレスキャッシュ６６からターゲットアドレスを、さらには、分岐スキャナ５８によって識別される第１の分岐命令の操作コードバイトの少なくとも一部を受取る。プリフェッチ制御ユニット５０は、操作コードバイトの一部をデコードして、さまざまなターゲットアドレスソースからＬ０Ｉ−キャッシュ１６からフェッチされるべきターゲットアドレスを選択し、選択されたターゲットアドレスをＬ０Ｉ−キャッシュ１６に与える。これと並列して、先のクロックサイクル中に選択されたフェッチアドレスに対しシーケンシャルなアドレス（先のクロックサイクルからの分岐予測に依存して、先のクロックサイクルからのシーケンシャルアドレスまたはターゲットアドレスのいずれか）が計算され、Ｌ０Ｉ−キャッシュ１６に与えられる。分岐予測情報（すなわちテイクンまたはノットテイクン）は、クロックサイクルの後ろの方で分岐履歴テーブル６０によって与えられる。Ｌ０Ｉ−キャッシュ１６からフェッチされたターゲットアドレスに対応する分岐命令がテイクンであると予測されれば、プリフェッチ制御ユニット５０は、ネクスト選択ブロック５２Ｃによって与えられた命令ランを選択する。他方で、分岐命令がノットテイクンであると予測されれば、ネクスト選択ブロック５２Ｂによって選択された命令ランが選択される。予測されたフェッチアドレスが、先のクロックサイクル中にＬ０Ｉ−キャッシュ１６をミスし、Ｌ１Ｉ−キャッシュ１４からフェッチされたのであれば、ネクスト選択ブロック５２Ａによって与えられる命令ランが選択される。加えて、分岐命令が３２ビット偏位であることに応答して命令ランがフェッチされたのであれば、または、間接ターゲットアドレス生成またはＬ０Ｉ−キャッシュミスがフェッチされたのであれば、Ｌ１Ｉ−キャッシュ１４からの命令ランが選択される。
【００５５】
選択された命令ランは、命令スキャナ５６および分岐スキャナ５８に与えられる。命令スキャナ５６は、選択された命令ランに対応するプリデコード情報をスキャンして、命令ラン内の命令を識別する。より特定的には、ある実施例では、命令スキャナ５６は、各ランセクションに対応する開始ビットを並列にスキャンし、各ランセクション内で最大５命令を識別する。識別された命令（ランセクション内でのオフセット）に対するポインタが生成される。ポインタ、命令バイトおよびアドレス（１ランセクション当り１つ）は、命令スキャナ５６によって命令キュー２０に送られる。もし特定のランセクションが５を超える命令を含めば、その特定のランセクションの後のランセクションに対応する情報は無効とされ、特定のランセクションおよびその後のランセクションは、次のクロックサイクル中に再スキャンされる。
【００５６】
分岐スキャナ５８は、命令スキャナ５６と並列に命令ランをスキャンする。分岐スキャナ５８は、命令ランの開始ビットおよび制御転送ビットをスキャンして、命令ラン内の第１の２分岐命令を識別する。上述したとおり、分岐命令は、（開始ビットによって識別される）命令の開始バイトに対応する制御転送ビットがセットされることによって識別される。第１の２分岐命令を位置付けると、分岐スキャナ５８は、命令が相対分岐命令であると予想し、分岐命令の開始バイトに続く命令バイトから、対応する符号化されたターゲットアドレスを選択する。ｘ８６命令セットを採用する実施例では、９ビットターゲットアドレス（偏位バイトおよび対応する制御転送ビット）が選択され、３２ビットターゲットアドレスが同様に選択される。さらに、開始ビットおよび制御転送ビットによって識別される操作コードバイトの少なくとも一部が選択される。ターゲットアドレスおよび操作コードバイトは、プリフェッチ制御ユニット５０に送られ、Ｌ０Ｉ−キャッシュ１６からフェッチするためのターゲットアドレスを選択するのに使用される。（各分岐命令を含むランセクションのフェッチアドレスおよびセクション内の分岐命令の位置から決定される）各分岐命令のフェッチアドレスは、分岐履歴テーブル６０に送られて、各分岐命令に対応するテイクン／ノットテイクン予測が選択される。さらに、各分岐命令に対応するフェッチアドレスは、分岐選択マルチプレクサ６２に送られ、これはさらに、間接アドレスキャッシュ６６に送られる。各分岐命令のターゲットアドレスは、フォワードコラプスユニット６８に送られる。ある実施例に従うと、分岐スキャナ５８は、第１の２分岐命令について各ランセクションを並列にスキャンしてから、スキャン結果を組合せてラン内の第１の２分岐命令を選択するよう構成される。
【００５７】
分岐スキャナ５８は、１クロックサイクル中にサブルーチンコール命令がスキャンされるかどうかを決定するようさらに構成可能である。分岐スキャナ５８は、検出されたサブルーチンコール命令に続く次の命令のフェッチアドレスを、リターンスタック６４に転送して、そこに記憶させることが可能である。
【００５８】
ある実施例では、３つ以上の分岐命令が１ラン内にある場合、ランは、その後のクロックサイクル中に再びスキャンされて、その後の分岐命令を識別する。
【００５９】
識別された分岐命令のフェッチアドレスは、分岐履歴テーブル６０に与えられ、各命令ごとにテイクン／ノットテイクン予測を決定する。分岐履歴テーブル６０は、分岐命令の、先に検出された挙動に対応する複数個のテイクン／ノットテイクン予測子を含む。最新予測の履歴を維持し、分岐命令に対応するフェッチアドレスの一部でこれらの最新予測の排他的論理和演算を行なうことによって、予測子の１つが選択される。最も新しくない（最も古い）予測がフェッチアドレスのその部内の最上位ビットで排他的論理和演算され、等など、最新予測までフェッチアドレスの部内の最下位ビットで排他的論理和演算される。１クロックサイクル当り２つの予測子が選択されるので、第２の分岐命令に対応する予測子は、第１の分岐命令の予測に依存する（対応するフェッチアドレスの最下位ビットで排他的論理和演算を行なう）。分岐履歴テーブル６０は、選択される可能性のある予測子の両方（すなわち第１の分岐命令がノットテイクンであると予測された場合に選択されるであろう予測子、および、第１の分岐命令がテイクンであると予測された場合に選択されるであろう予測子）を選択し、次に、第１の分岐命令について選択された実際の予測に基づいて２つの予測子のうち１つを選択することによって、第２の予測子を与える。
【００６０】
分岐履歴テーブル６０は、機能ユニット３２Ａ〜３２Ｄから分岐命令の実行に関する情報を受取る。実行された分岐命令に対応する最近の予測の履歴および実行された分岐命令のフェッチアドレス、さらに、実行された分岐命令のテイクン／ノットテイクン結果が、更新すべき予測子を選択するために与えられる。分岐履歴テーブル６０は、対応する予測子を選択し、テイクン／ノットテイクン結果に基づいて予測子を更新する。ある実施例では、分岐履歴テーブルは、二モードカウンタを記憶する。二モードカウンタは、最小および最大値で飽和する（すなわち、最小値のその後のデクリメントおよび最大値のインクリメントはカウンタ内のいかなる変化も起こさない）飽和カウンタである。分岐命令がテイクンであるたびに、対応するカウンタがインクリメントされ、分岐命令がノットテイクンであるたびに、対応するカウンタがデクリメントされる。カウンタの最上位ビットは、テイクン／ノットテイクン予測を表示する（たとえば、セットされていればテイクンであり、クリアされていればノットテイクンである）。ある実施例では、分岐履歴テーブル６０は、６４Ｋ個の予測子を記憶し、１６個の最新予測の履歴を維持する。各クロックサイクルごとに、クロックサイクル中に選択された予測が履歴にシフトされ、最も古い予測が履歴からシフトアウトされる。
【００６１】
リターンスタック６４は、検出されたサブルーチンコール命令に対応するリターンアドレスを記憶するために用いられる。リターンスタック６４は、分岐スキャナ５８からサブルーチンコール命令のフェッチアドレスを受取る。（リターンスタック６４に与えられたフェッチアドレスから計算された）コール命令に続くバイトのアドレスは、リターンスタック６４の最上部に置かれる。リターンスタック６４は、リターンスタックの最上部に記憶されたアドレスをプリフェッチ制御ユニット５０に与えて、もしリターン命令が分岐スキャナ５８およびプリフェッチ制御ユニット５０によって検出された場合にはターゲットアドレスとして選択する。このようにして、各リターン命令は、最も最近に検出されたコール命令に対応するアドレスをターゲットアドレスとして受取る。一般的にｘ８６命令セットにおいては、コール命令は、コール命令にシーケンシャルなアドレスがｘ８６アーキテクチャによって定義されるスタック上に置かれることを特定する制御転送命令である。リターン命令は、スタックの最上部からターゲットアドレスを選択する命令である。一般的に、コール命令およびリターン命令は、（それぞれ）コードシーケンスでサブルーチンに出たり入ったりするために用いられる。コール命令に対応するアドレスをリターンスタック６４内に置き、リターン命令のターゲットアドレスとしてリターンスタック６４の最上部のアドレスを用いることによって、リターン命令のターゲットアドレスは、正確に予測可能である。ある実施例では、リターンスタック６４は、１６エントリを含み得る。
【００６２】
間接アドレスキャッシュ６６は、間接分岐命令の先の実行に対応するターゲットアドレスを記憶する。間接分岐命令に対応するフェッチアドレスおよび間接分岐命令の実行に対応するターゲットアドレスは、機能ユニット３２Ａ〜３２Ｄによって間接アドレスキャッシュ６６に与えられる。間接アドレスキャッシュ６６は、対応するフェッチアドレスによってインデックス付けされたターゲットアドレスを記憶する。間接アドレスキャッシュ６６は、（間接分岐命令の検出に応答して）分岐選択マルチプレクサ６２によって選択されたフェッチアドレスを受取り、もしフェッチアドレスが間接アドレスキャッシュ６６内でヒットすれば、対応するターゲットアドレスをプリフェッチ制御ユニット５０に与える。ある実施例では、間接アドレスキャッシュ６６は、３２エントリを含み得る。
【００６３】
ある企図された実施例に従うと、間接アドレスキャッシュ６６がフェッチアドレスについてミスを検出した場合、間接アドレスキャッシュ６６は、与えるべきターゲットアドレスをエントリの１つから選択するよう構成可能である。このようにして、間接分岐命令がデコードされる際、分岐ターゲットでの「推測」が与えられる。間接分岐命令の実行を介してアドレスを待つのではなく、推測からフェッチを行なうことが可能である。代替的に、別の企図される実施例は、間接分岐命令の実行を介して与えられるアドレスを待つ。
【００６４】
ある実施例に従うと、プリフェッチ制御ユニット５０は、（ｉ）分岐スキャナ５８によって識別される第１の分岐命令に対応する第１の符号化されたターゲットアドレスと、（ii）リターンスタック６４によって与えられるリターンスタックアドレスと、（iii）シーケンシャルアドレスとから、Ｌ０Ｉ−キャッシュ１６からフェッチするためのターゲットアドレスを選択する。プリフェッチ制御ユニット５０は、第１の命令に対応する操作コードのデコードが、命令が相対分岐命令であり得ることを表示すれば、第１の符号化されたターゲットアドレスを選択する。もし、デコードが、命令がリターン命令であり得ることを表示すれば、リターンスタックアドレスが選択される。さもなくば、シーケンシャルアドレスが選択される。間接ターゲットアドレスおよび３２ビット相対ターゲットアドレスは、Ｌ１Ｉ−キャッシュ１４からプリフェッチされる。ターゲットアドレスのこれらのタイプはしばしば、ターゲットアドレスがメモリ内の分岐命令の近くにないときに用いられるので、ターゲットアドレスのこれらのタイプは、Ｌ０Ｉ−キャッシュ１６においてヒットする可能性がより低い。加えて、もし、第２の分岐命令がテイクンであると予測され、かつ、第１の分岐命令がノットテイクンであると予測され、または、第１の分岐命令が、命令ラン内の第２の分岐命令を排除する前方分岐であれば、第２の分岐命令に対応する第２のターゲットアドレスが、ある実施例に従う続いて起こるクロックサイクル中にターゲットフェッチアドレスとして使用可能である。
【００６５】
なお、符号化されたターゲットアドレスが選択されれば、実際のターゲットアドレスが、Ｌ０Ｉ−キャッシュ１６に与えられ得る。プリフェッチ制御ユニット５０は、起こり得る上の／下のターゲットアドレスの各々を予め計算し、符号化されたターゲットアドレスに基づいて正しいアドレスを選択するよう構成可能である。代替的に、プリフェッチ制御ユニット５０は、どのＬ０Ｉ−キャッシュ記憶場所が上のおよび下のキャッシュラインを記憶しているかを記録し、タグ比較なしに直接記憶場所を選択することが可能である。
【００６６】
フォワードコラプスユニット６８は、テイクン／ノットテイクン予測だけでなく各選択された分岐命令の命令ラン内の位置およびターゲットアドレスを受取る。フォワードコラプスユニット６８は、受取った予測に基づいて、ラン内のどの命令がキャンセルされるべきかを決定する。もし第１の分岐命令がテイクンであると予測され、後方である（すなわち偏位が負である）とすれば、第１の分岐命令の後に続く命令はすべて、キャンセルされる。もし第１の分岐命令がテイクンであると予測され、前方ではあるが偏位が小さい（たとえば命令ラン内）のであれば、第１の分岐命令とターゲットアドレスとの間にある命令は、キャンセルされる。第２の分岐命令は、第１の分岐命令の予測に従えばラン内になおもあるとすれば、同様に扱われる。ラン内の命令についてのキャンセル表示は、命令キュー２０に対してセットされる。
【００６７】
プリフェッチ制御ユニット５０は、Ｌ０Ｉ−キャッシュ１６内のキャッシュラインを選択して、Ｌ１Ｉ−キャッシュ１４から与えられるキャッシュラインと置換するよう、さらに構成可能である。ある実施例では、プリフェッチ制御ユニット５０は、リースト・リーセントリー・ユーズド（ＬＲＵ）置換アルゴリズムを使用してもよい。
【００６８】
図３を参照すると、ルックアヘッド／コラプスユニット２４のある実施例のブロック図が示される。他の実施例が可能であり企図される。図３に示すとおり、ルックアヘッド／コラプスユニット２４は、複数個のデコードユニット７０Ａ〜７０Ｆと、ＥＳＰ／ＥＢＰルックアヘッドユニット７２と、ルックアヘッドアドレス／結果計算ユニット７４と、ディスパッチ制御ユニット７６と、オペランドコラプスユニット７８とを含む。デコードユニット７０Ａ〜７０Ｆは、整列ユニット２２から命令を受取るよう結合される。デコードユニット７０Ａ〜７０Ｆは、ＦＰＵ／マルチメディアユニット４０、ＥＳＰ／ＥＢＰルックアヘッドユニット７２、フューチャファイル２６およびルックアヘッドアドレス／結果計算ユニット７４に、デコードされた命令を与えるよう結合される。ＥＳＰ／ＥＢＰルックアヘッドユニット７２は、フューチャファイル２６と同様に、ルックアヘッドアドレス／結果計算ユニット７４に結合される。ルックアヘッドアドレス／結果計算ユニット７４はさらに、ロード／ストアユニット３６およびディスパッチ制御ユニット７６に結合される。ディスパッチユニット７６はさらに、オペランドコラプスユニット７８、フューチャファイル２６、ロード／ストアユニット３６およびリオーダバッファ２８に結合される。オペランドコラプスユニット７８は、命令窓３０に結合される。
【００６９】
各デコードユニット７０Ａ〜７０Ｆは、整列ユニット２２が命令を整列させる発行位置を形成する。図面を簡単にするために図３には具体的には示されないが、ルックアヘッド／コラプスユニット２４内で完了されなければ、命令はルックアヘッド／コラプスユニット２４を介して転送され、命令窓３０Ａ〜３０Ｂの１つに送られるが、特定の命令がその発行位置内に残る。
【００７０】
デコードユニット７０Ａ〜７０Ｆは、ＦＰＵ／マルチメディアユニット４０にＦＰＵ／マルチメディア命令を送る。しかしながら、ＦＰＵ／マルチメディア命令がメモリオペランドを含んでいれば、メモリ操作はまた、ルックアヘッドアドレス／結果計算ユニット７４を介する命令に応答して、ロード／ストアユニット３６にディスパッチされる。加えて、メモリ操作についてのアドレスがルックアヘッドアドレス／結果計算ユニット７４によって生成不可能であれば、アドレス生成操作は、命令窓３０Ａ〜３０Ｂを介してアドレス生成ユニット３４Ａ〜３４Ｄの１つにディスパッチされる。なおさらに、リオーダバッファ２８内のエントリは、ＦＰＵ／マルチメディア命令に割当てられ、プログラム順序で維持される。一般的に、リオーダバッファ２８内のエントリは、デコードユニット７０Ａ〜７０Ｆから割当てられ、各命令はそこで受取られる。
【００７１】
デコードユニット７０Ａ〜７０Ｆの各々は、（ｉ）命令がソースオペランドとしてＥＳＰレジスタまたはＥＢＰレジスタを用いるかどうか、（ii）命令がＥＳＰ／ＥＢＰレジスタを変更する（すなわちディスティネーションオペランドとしてＥＳＰまたはＥＢＰレジスタを有する）かどうかを決定するようさらに構成される。これらの決定の表示は、デコードユニット７０Ａ〜７０ＦによってＥＳＰ／ＥＢＰルックアヘッドユニット７２に与えられる。ＥＳＰ／ＥＢＰルックアヘッドユニット７２は、各命令についてのルックアヘッド情報を生成し、これはＥＳＰまたはＥＢＰレジスタをソースオペランドとして使用する。ルックアヘッド情報は、対応するレジスタの現在のルックアヘッド値に加算されるべき定数と、先の発行位置での命令への依存性の表示とを含み得る。ある実施例では、ＥＳＰ／ＥＢＰルックアヘッドユニット７２は、デコードユニット７０Ａ〜７０Ｆによって与えられた現在デコードされた命令の組が、（ｉ）２プッシュ操作（定数値によってＥＳＰレジスタをデクリメントする）、（ii）２ポップ操作（定数値によってＥＳＰレジスタをインクリメントする）、（iii）ＥＳＰレジスタへの１転送、（iv）ディスティネーションとしてＥＳＰを有する１算術／論理命令、または、（ｖ）ＥＳＰを更新する３命令以下を含む限り、ルックアヘッド情報を与えるよう構成される。これらの制限の１つが超えられると、ＥＳＰ／ＥＢＰルックアヘッドユニット７２は、次のクロックサイクルまで、制限を超えないもの以降の命令をストールするよう構成される（「スプリットライン」の場合）。同じクロックサイクル中であるがより早い発行位置において、ＥＳＰレジスタをインクリメントまたはデクリメントする命令が先行する命令については、ＥＳＰ／ＥＢＰルックアヘッドユニット７２は、先行する命令によるＥＳＰレジスタに対する変更をすべて組み合わせたものを表示する定数を生成する。ＥＳＰまたはＥＢＰレジスタに対する算術演算または転送が先行する命令について、ＥＳＰ／ＥＢＰルックアヘッドユニット７２は、転送または算術命令を含む発行位置を識別する値を生成する。
【００７２】
ルックアヘッド値は、ルックアヘッドアドレス／結果計算ユニット７４によって使用されて、発行位置内の命令に対応するルックアヘッドアドレス（これによって、さもなくばアドレス生成ユニット３４〜３４Ｄの１つによって実行されるであろうアドレス生成操作を阻止する）、または、命令に対応するルックアヘッド結果（これによって、パイプラインにおいてより早くにフューチャーファイル２６にルックアヘッド状態を与える）のいずれかを生成することが可能である。アドレス生成操作を除去しおよび／または機能ユニット３２Ａ〜３４Ｄおよびアドレス生成ユニット３４Ａ〜３４Ｄの前にルックアヘッド状態を与えることによって、性能を向上させることが可能である。多くのｘ８６コードシーケンスは、算術／論理演算なしのソースからディスティネーションへの値の転送などの、多数の比較的簡単な操作、または、レジスタオペランドの小さい定数またはインクリメント／デクリメントによる加算／減算などの簡単な算術演算を含む。したがって、機能ユニット３２Ａ〜３２Ｄは典型的には、より複雑な算術／論理演算および分岐命令を実行可能であり、アドレス生成ユニット３４Ａ〜３４Ｄは典型的には、より複雑なアドレス生成を実行可能である。命令スループットはしたがって、増大可能である。
【００７３】
デコードユニット７０Ａ〜７０Ｆは、そこでデコードされた命令から即値データフィールドを識別するようさらに構成される。即値データは、デコードユニット７０Ａ〜７０Ｆによってルックアヘッドアドレス／結果計算ユニット７４に送られる。加えて、デコードユニット７０Ａ〜７０Ｆは、命令によって使用されるレジスタオペランドを識別し、レジスタオペランド要求をフューチャーファイル２６に送るよう構成される。フューチャーファイル２６は、各レジスタオペランドごとに、対応する投機的レジスタ値または結果キュータグを戻す。デコードユニット７０はさらに、命令のライン間での依存性チェックを行なって、異なった発行位置内の命令の結果を使用する命令が、その発行位置に対応するタグを受取ることを確実にする。
【００７４】
ルックアヘッドアドレス／結果計算ユニット７４は、ＥＳＰ／ＥＢＰルックアヘッドユニット７２からルックアヘッド値を、デコードユニット７０Ａ〜７０Ｆから即値データを、フューチャーファイル２６から投機的レジスタ値または結果キュータグを受取る。ルックアヘッドアドレス／結果計算ユニット７４は、命令のメモリオペランドに対応するルックアヘッドアドレス、または、命令がメモリオペランドを含まない場合にはルックアヘッド結果のいずれかを生成しようとする。たとえば、（機能ユニット３２およびアドレス生成ユニット３４に関して）単純転送操作は、アドレス生成がルックアヘッドアドレス／結果計算ユニット７４によって実行可能であった場合に、完了可能である。ある実施例では、ルックアヘッドアドレス／結果計算ユニット７４は、偏位のみ、偏位に加えてレジスタ、偏位に加えてＥＳＰ／ＥＢＰ、および、インデックスまたはベースレジスタがＥＳＰ／ＥＢＰである場合を除いてはスケールインデックスベースアドレッシングモードを用いてアドレスを計算するよう構成される。ロード／ストアユニット３６は、メモリ操作を実行し、結果バス４８を介してメモリ操作結果を返す。たとえアドレスが、ルックアヘッドアドレス／結果計算ユニット７４によってメモリ操作のために生成されなかったとしても、ルックアヘッドアドレス／結果計算ユニット７４は、ロード／ストアユニット３６に対してメモリ操作および対応する結果キュータグを表示して、メモリ操作のためにロード／ストアユニット３６内の記憶装置を割当てる。
【００７５】
ソースオペランドをインクリメントまたはデクリメントし、および、ソースオペランドに対して小さい即値を加算／減算し、または、２つのレジスタソースオペランドを加算／減算する単純算術演算はまた、ソースオペランドがフューチャーファイル２６から利用可能であれば（すなわち投機的レジスタ値が結果キュータグの代わりに受取られれば）、ルックアヘッドアドレス／結果計算ユニット７４によって完了可能である。ルックアヘッドアドレス／結果計算ユニット７４によって完了された命令は、完了したものとして表示され、リオーダバッファ２８にエントリを割当てられるが、命令窓３０にはディスパッチされない。ルックアヘッドアドレス／結果計算ユニット７４は、たとえば、ルックアヘッド値、即値データおよび投機的レジスタ値の中から選択するための対応する制御論理とともに各発行位置ごとに加算器を含み得る。なお、この実施例に従えば、単純算術演算はなお、命令窓３０に転送され、条件フラグが生成され得る。しかしながら、ルックアヘッドアドレス／結果計算ユニット７４において関数結果を生成すると、ルックアヘッド状態が早くに得られ、その後のアドレス生成／命令もまた早くに実行可能となる。
【００７６】
ルックアヘッドアドレス／結果計算ユニット７４は、フューチャーファイルコピーに加えて、ＥＳＰ／ＥＢＰレジスタの別個のルックアヘッドコピーを維持するよう構成可能である。しかしながら、ＥＳＰ／ＥＢＰに対する更新が検出され、これがルックアヘッドアドレス／結果計算ユニット７４によって計算不可能であれば、ＥＳＰ／ＥＢＰの新しいルックアヘッドコピーがフューチャーファイル２６から得られるようになるまで（決定不可能な態様でＥＳＰ／ＥＢＰを更新する命令の実行の後）、その後の命令がストールされる可能性がある。
【００７７】
ディスパッチ制御ユニット７６は、命令の群をディスパッチしてパイプライン流れ制御を与えるかどうかを決定する。ディスパッチ制御ユニット７６は、命令窓３０から命令数をおよびロード／ストアユニット３６からロード／ストア数を受取り、命令の最大可能数が、ディスパッチ制御ユニット７６と命令窓３０とロード／ストアユニット３６との間でパイプライン段階で転送中であると仮定すると、命令がそこに到着したとき、ディスパッチされるべき命令を命令窓３０および／またはロード／ストアユニット３６内に記憶するのに空間が利用可能であるかどうかを決定する。もしディスパッチ制御ユニット７６が、ロード／ストアユニット３６またはいずれかの命令窓３０において利用可能な空間が不十分であると決定すれば、ディスパッチ制御ユニット７６によって受取られる命令数が十分に低い値に減るまで、ディスパッチはストールされる。
【００７８】
命令を解放してディスパッチ制御ユニット７６を介してディスパッチされると、フューチャーファイル２６およびリオーダバッファ２８は、投機的に生成されたルックアヘッド結果で更新される。ある実施例では、フューチャーファイル２６でのポート数を制限するために、サポートされる非ＥＳＰ／ＥＢＰ更新の数は、たとえば、２つに限定され得る。さらに、オペランドコラプスユニット７８は、投機的に生成されたルックアヘッド結果をその後の、同時にデコードされた命令であって、先に決定されたライン内依存性によって表示される結果に依存するものにまとめる。このようにして、これらの結果は機能ユニット３２Ａ〜３２Ｄからその後に転送されないので、依存命令は、投機的に生成されたルックアヘッド結果を受取る。命令のうちルックアヘッドアドレス／結果計算ユニット７４によって完了されないものは次に、これらの命令が整列ユニット３２によって整列させられた発行位置に基づいて、命令窓３０Ａ〜３０Ｂの１つに伝送される。
【００７９】
なお、プロセッサ１０のある種の実施例は、マイクロコードルーチンと呼ばれれる複数個のより単純な命令をディスパッチすることによって複雑な命令を実行するために、マイクロコードユニット（図示せず）を採用可能である。デコードユニット７０Ａ〜７０Ｆは、どの命令がマイクロコード命令であるかを検出し、かつ、マイクロコード命令をマイクロコードユニットに送るよう構成可能である。たとえば、有効な命令を受取ったデコードユニット７０から出力される、直接デコードされた命令がなければ、これは、マイクロコードユニットに、対応する有効命令についての実行を開始するよう表示するものであり得る。さらになお、さまざまな記憶装置が図２および図３に示される（たとえば、図２の装置７９Ａ、７９Ｂおよび同様の装置、ならびに、図３の装置７９Ｃ、７９Ｄおよび同様の装置）。記憶装置は、ラッチ、レジスタ、フリップフロップおよびパイプライン段階を分離するために使用可能であるその他のものを表わす。しかしながら、図２および図３に示す特定のパイプライン段階は、プロセッサ１０のある実施例についての好適なパイプライン段階の一実施例にすぎない。他のパイプライン段階が、他の実施例では採用可能である。
【００８０】
なお、ｘ８６命令セットおよびアーキテクチャは、上記に例として使用され、以下に例として使用可能であるが、いかなる命令セットおよびアーキテクチャを使用してもよい。加えて、偏位は、（ここに例として用いられる８ビットおよび３２ビットサイズに加えて）いかなる所望のサイズであってもよい。さらに、キャッシュラインフェッチングを、ここに記載しているかもしれないが、キャッシュラインはセクタであってもよく、所望であればフェッチされるべき所望のバイトの数およびキャッシュラインサイズに基づいて、セクタがフェッチされてもよい。
【００８１】
図４を参照すると、プリデコードユニット１２のある実施例のブロック図が示される。他の実施例が可能であり企図される。図４に示すとおり、プリデコードユニット１２は、入力命令バイトレジスタ８０と、フェッチアドレスレジスタ８２と、バイトプリデコード８４と、制御ユニット８６と、ターゲット生成器８８と、開始および制御転送ビットレジスタ９０と、出力命令バイトレジスタ９２と、バイト選択マルチプレクサ９４とを含む。入力命令バイトレジスタ８０は、バイトプリデコーダ８４、制御ユニット８６、ターゲット生成器８８、バイト選択マルチプレクサ９４および外部インタフェースユニット４２に結合される。フェッチアドレスレジスタ８２は、Ｌ１Ｉ−キャッシュ１４およびターゲット生成器８８に結合される。バイトプリデコーダ８４は、開始および制御転送ビットレジスタ９０と制御ユニット８６とに結合される。制御ユニット８６は、Ｌ１Ｉ−キャッシュ１４、バイト選択マルチプレクサ９４およびターゲット生成器８８に結合される。ターゲット生成器８８は、バイト選択マルチプレクサ９４に結合され、これはさらに出力命令バイトレジスタ９２に結合される。出力命令バイトレジスタ９２と開始および制御転送ビットレジスタ９０とはさらに、Ｌ１Ｉ−キャッシュ１４に結合される。
【００８２】
Ｌ１Ｉ−キャッシュミスを検出すると、プリデコードユニット１２は、ミスに対応する線形フェッチアドレスをフェッチアドレスレジスタ８２に受取る。並列して、外部インタフェースユニット４２は、対応する物理的フェッチアドレスを受取り、フェッチアドレスによって識別されるキャッシュラインについての外部フェッチを開始する。外部インタフェースユニット４２は、受取った命令バイトを入力命令バイトレジスタ８０に与える。
【００８３】
バイトプリデコーダ８４は、受取った命令バイトをプリデコードして、対応する開始および制御転送プリデコードビットを生成する。生成されたプリデコード情報は、開始および制御転送ビットレジスタ９０に記憶される。命令は、ｘ８６命令セットの可変長の性質のために、キャッシュライン内の任意のバイトでの境界を有することが可能であるので、バイトプリデコーダ８４は、フェッチアドレスレジスタ８２内に記憶されたフェッチアドレスによって特定されるキャッシュライン内のオフセットでプリデコードを開始する。オフセットによって特定されたバイトは、命令の第１のバイトであると予想される（すなわち、対応する開始ビットがセットされる）。バイトプリデコーダ８４は、第１のバイトに始まって、各バイトをプリデコードして各命令の開始を決定し、分岐命令を検出する。分岐命令の結果、分岐命令の開始バイトに対応する制御転送ビットがバイトプリデコーダ８４によってセットされる。加えて、バイトプリデコーダ８４は、分岐命令が相対分岐命令であるかどうかを制御ユニット８６に知らせ、キャッシュライン内の分岐命令に続く命令の位置を表示する。ある実施例では、バイトプリデコーダ８４は、１クロックあたり４バイトを並列にプリデコードするよう構成される。
【００８４】
相対分岐命令が検出されたことを示す、バイトプリデコーダ８４からの信号に応答して、制御ユニット８６は、ターゲット生成器８８に、相対分岐命令に対応するターゲットアドレスを生成させる。偏位バイトは、レジスタ８０に記憶された命令バイトから選択される。加えて、フェッチアドレスレジスタ８２に記憶されたフェッチアドレスが（分岐命令に続く命令の位置によって置換されるオフセット部とともに）、ターゲット生成器８８に与えられる。ターゲット生成器８８は、受取ったアドレスおよび偏位バイトを加算して、ターゲットアドレスを生成する。生成されたターゲットアドレスは次に、符号化されて、相対分岐命令の偏位フィールドについての置換として記憶される。加えて、制御ユニット８６は、入力命令バイトレジスタ８０からの相対分岐命令の対応する偏位バイトの代わりに、出力命令バイトレジスタ９２に記憶されるべき、ターゲット生成器８８の出力を選択する。他の命令バイトは、これらのバイトがバイトプリデコーダ８４によってプリデコードされると、入力命令バイトレジスタ８０から選択され、出力命令バイトレジスタ９２に記憶される。一旦、バイトプリデコーダ８４がキャッシュラインのプリデコードを完了し、各相対分岐命令がその偏位をターゲットアドレスの符号化によって置換されると、制御ユニット８６は、Ｌ１Ｉ−キャッシュ１４に対してプリデコード完了信号をアサートし、これが次に、出力命令バイトと対応する開始および制御転送ビットとを記憶する。
【００８５】
上述したとおり、小偏位フィールド（たとえば単一の偏位バイト）を有する相対分岐命令については、偏位バイトに加えて、偏位バイトに対応する制御転送ビットを用いて、ターゲットアドレスの符号化を記憶する。ターゲット生成器８８は、適切な制御転送ビットでバイトプリデコーダ８４に合図し、バイトプリデコーダ８４はこれを、開始および制御転送ビットレジスタ９０内の対応する位置に記憶する。
【００８６】
なお、相対分岐命令が２つのキャッシュラインの間の境界に及ぶ場合（すなわち第１のキャッシュラインが命令の第１の部分を記憶し、これに続くキャッシュラインが残りの部分を記憶する場合）、プリデコードユニット１２は、相対分岐命令についてのプリデコーディングを完了するために、続いて起こるキャッシュラインをフェッチするよう構成可能である。さらになお、プリデコードユニット１２は、複数の未決キャッシュラインを同時に処理するよう構成可能である。
【００８７】
次に図４Ａを参照すると、ターゲット生成器８８の第１の実施例のブロック図が示される。他の実施例が可能であり企図される。図４Ａに示すとおり、ターゲット生成器８８は、偏位マルチプレクサ１００と、符号拡張ブロック１０２と、加算器１０４と、偏位エンコーダ１０６とを含む。偏位マルチプレクサ１００は、入力命令バイトレジスタ８０および符号拡張ブロック１０２に結合され、制御ユニット８６から制御信号を受取る。符号拡張ブロック１０２は、加算器１０４の入力に結合され、制御ユニット８６から制御信号を受取る。加算器１０４の第２の入力は、制御ユニット８６からのキャッシュライン内の位置と連結された、フェッチアドレスレジスタ８２からのフェッチアドレス（オフセットビットを除く）を受取るよう結合される。加算器１０４はさらに、偏位エンコーダ１０６に結合され、これは制御ユニット８６からの制御信号を受取る。偏位エンコーダ１０６はさらに、バイト選択マルチプレクサ９４およびバイトプリデコーダ８４に結合される。
【００８８】
偏位マルチプレクサ１００は、相対分岐命令から偏位バイトを選択するために使用される。この実施例では、偏位は、１または４バイトであり得る。したがって、偏位マルチプレクサ１００は、入力バイトレジスタ８０から４バイトを選択する。相対分岐命令に１バイト偏位が含まれていれば、偏位は、４バイトの最下位に選択される。残りの３バイトは、０であってもよくまたは、入力命令バイトレジスタ８０での先行バイトであってもよい。符号拡張ブロック１０２は、制御ユニット８６からの制御下で、１バイト偏位を４バイト値に符号拡張する。他方で、４バイト偏位は、偏位マルチプレクサ１００によって選択され、符号拡張ブロック１０２によって変更されない。なお、より大きいアドレスがプロセッサ１０によって採用可能である。一般的に、偏位は、アドレス内のビットの数まで符号拡張可能である。
【００８９】
偏位エンコーダ１０６は、加算器１０４によって計算されたターゲットアドレスを受取り、ターゲットアドレスを、偏位バイトに記憶可能なフォーマットに符号化する。この実施例では、４バイト偏位は、ターゲットアドレスの全体を記憶する。したがって、偏位エンコーダ１０６は、ターゲットアドレスを変更されないままでバイト選択マルチプレクサ９４に送り、これは出力命令バイトレジスタ９２内に記憶される。加えて、偏位バイトに対応する制御転送ビットは、用いられない。１バイト偏位については、ターゲットアドレスが符号化される。より特定的には、偏位バイトの一部を用いて、ターゲットキャッシュライン内のターゲットアドレスのオフセットを記憶する（たとえば、この実施例では、６４バイトオフセットを記憶するためには６ビットである）。偏位バイトの残りの部および対応する制御転送ビットは、フェッチアドレスレジスタ８２に記憶されたフェッチアドレスによって識別されるキャッシュラインより上または下のキャッシュラインの数としてターゲットキャッシュラインを表示する値で符号化される。したがって偏位エンコーダ１０６は、フェッチアドレスレジスタ８２からフェッチアドレスを受取るよう結合される。偏位エンコーダ１０６は、フェッチアドレスをターゲットアドレスと比較して、その間のキャッシュラインの数だけでなくその方向を決定する。符号化を生成すると、偏位エンコーダ１０６は、出力命令バイトレジスタ９２に記憶するために、変更された偏位バイトをバイト選択マルチプレクサ９４に伝送し、さらに、偏位バイトに対応する制御転送ビットについての値をバイトプリデコーダ８４に伝送する。
【００９０】
小偏位フィールドについてのターゲットアドレスを計算するために加算器１０４を採用する代替例として、偏位エンコーダ１０６は、偏位フィールドの値およびキャッシュライン内の分岐命令の位置を調べることによって、符号化されたターゲットアドレス（上下値およびキャッシュラインオフセット）を直接生成することが可能である。
【００９１】
次に図５を参照すると、ｘ８６命令セットに従う８ビット偏位を有する例示の相対分岐命令１１０を例示する図が示される。相対分岐命令１１０は、２バイト、すなわち命令の第１のバイトでもある操作コードバイト１１２と、偏位バイト１１４とを含む。操作コードバイト１１２は、命令１１０が相対分岐命令であり、命令が８ビット偏位であることを特定する。偏位バイト１１４は、ターゲットアドレスの符号化で更新されている。符号化は、「ＣＬオフセット」とラベル付けされたキャッシュラインオフセット部（これは現在の実施例では６ビットを含むが、対応する命令キャッシュラインサイズに好適な任意の数のビットを含むことが可能である）と、偏位バイト１１４に対応する制御転送ビット内の「ＬＩ２」および偏位バイト１１４内の「ＬＩ１  ＬＩ０」とラベル付けされた相対キャッシュライン部とを含む。
【００９２】
図５は、また、命令１１０に対応する開始および制御転送ビットを例示する。各バイトについての開始ビットは、ビットの値を表示するボックスとともに図５においては「Ｓ」とラベル付けされ、制御転送ビットは、ビットの値を表示するボックスとともに「Ｃ」とレベル付けされる。したがって、操作コードバイト１１２に対応する開始ビットは、操作コードバイト１１２が命令の開始であることを表示するようセットされ、操作コードバイト１１２に対応する制御転送ビットもまた、操作コードバイト１１２で始まる命令が制御転送命令であることを示すようセットされる。他方で、偏位バイト１１４は命令の開始ではないので、偏位バイト１１４に対応する開始ビットはクリアである。偏位バイト１１４に対応する制御転送ビットは、符号化されたターゲットアドレスの相対キャッシュライン部の一部を記憶するために用いられる。
【００９３】
次に図６を参照すると、ｘ８６命令セットに従う３２ビット偏位を有する例示の相対分岐命令１２０が示される。命令１２０は、２バイトからなる操作コードフィールド１２２と、４バイトからなる偏位フィールド１２４とを含む。図５と同様に、図６は、命令１２０での各バイトごとの開始および制御転送ビットを例示する。したがって、２開始ビットおよび２制御転送ビットが、操作コードフィールド１２２について例示され、１開始ビットおよび制御転送ビットが、偏位フィールド１２４内の各バイトごとに例示される。
【００９４】
操作コードフィールド１２２に対応する第１の開始ビット（すなわち、操作コードフィールド１２２の第１のバイトに対応する開始ビット）がセットされ、操作コードフィールド１２２の第１のバイトが命令の開始であることを表示する。操作コードフィールド１２２に対応する第１の制御転送ビットもまたセットされ、命令１２０が制御転送命令であることを表示する。操作コードフィールド１２２内の第２のバイトは命令の開始ではないので、操作コードフィールド１２２に対応する第２の開始ビットはクリアである。第２の操作コードバイトに対応する制御転送ビットは、ドントケアである（「ｘ」で表示される）。
【００９５】
偏位フィールド１２４は、命令１２０に対応するターゲットアドレスの全体を含むのに十分大きいので、偏位バイトに対応する制御転送バイトもまた、ドントケアである。偏位バイトに対応する各開始ビットはクリアであって、これらのバイトが命令の開始でないことを表示する。
【００９６】
図７を参照すると、ｘ８６命令セットからの例示の組の命令１３０の図が示され、プロセッサ１０のある実施例に従う開始ビットおよび制御転送ビットの使用をさらに例示する。図５および図６と同様に、命令の組１３０内の各バイトは、対応する開始ビットおよび制御転送ビットとともに例示される。
【００９７】
命令の組１３０内の第１の命令は、ＡＬレジスタの内容への１バイトの即値フィールドの加算を特定し、その結果をＡＬレジスタに記憶する加算命令である。加算命令は、２バイトの命令であって、第１のバイトは操作コードバイトであり、第２のバイトは１バイトの即値フィールドである。したがって、操作コードバイトは、セット開始ビットでマークされ、命令の開始を表示する。対応する制御転送ビットはクリアであって、加算命令が分岐命令でないことを示す。即値バイトは命令の開始ではないので即値バイトに対応する開始ビットはクリアであり、制御転送ビットはドントケアである。
【００９８】
加算命令に続くのは、単一バイト命令（ＥＡＸレジスタのインクリメント）である。バイトは命令の開始であるので、命令に対応する開始ビットはセットされる。インクリメントは分岐命令ではないので、制御転送ビットはクリアである。
【００９９】
最後に、ＡＬレジスタの内容への１バイト即値フィールドの加算を特定する第２の加算命令が、インクリメント命令に続いて示される。加算命令の操作コードに対応する開始ビットはセットされ、制御転送ビットはクリアである。加算命令に続くインクリメント命令は、連続するバイトが、単一バイトが命令の開始境界でもあり終了境界でもある場合にはセットされる開始ビットを有する可能性があることを示す。
【０１００】
図８を参照すると、ｘ８６命令セットとともに用いられる、分岐スキャナ５８のある実施例のブロック図が示される。他の実施例が可能であり企図される。図８の実施例では、分岐スキャナ５８は、スキャンブロック１４０と、セクションターゲットマルチプレクサ１４２Ａ〜１４２Ｄと、ランターゲットマルチプレクサ１４４Ａ〜１４４Ｄとを含む。スキャンブロック１４０は、命令選択マルチプレクサ５４を介してネクスト選択ブロック５２からランセクションに対応する開始および制御転送ビットを受取るよう結合される。分岐スキャナ５８はさらに、スキャンブロック１４０と同様の付加的スキャンブロックを含み、選択されたランの残りのランセクションに対応する開始および制御転送ビットをスキャンする。スキャンブロック１４０は、セクションターゲットマルチプレクサ１４２Ａ〜１４２Ｄに結合されて、そこへの選択制御を与える。加えて、スキャンブロック１４０（および他のランセクションのための同様のスキャンブロック）は、ランターゲットマルチプレクサ１４４Ａ〜１４４Ｄに対して選択制御を与える。セクションターゲットマルチプレクサ１４２Ａ〜１４２Ｂの各々は、スキャンブロック１４０によってスキャンされたランセクションに対応する命令バイトおよび、対応する制御転送ビットを受取るよう結合される。セクションターゲットマルチプレクサ１４２Ｃ〜１４２Ｄの各々は、同様に、ランセクションに対応する命令バイトを受取るよう結合されるが、対応する制御転送ビットは受取らない可能性がある。セクションターゲットマルチプレクサ１４２Ａ〜１４２Ｄの各々は、図８に示すとおり、ランターゲットマルチプレクサ１４４Ａ〜１４４Ｄのそれぞれ１つに結合される。ランターゲットマルチプレクサ１４４Ａおよび１４４Ｂの出力は、プリフェッチ制御ユニット５０および分岐履歴テーブル６０に結合される。ランターゲットマルチプレクサ１４４Ｃおよび１４４Ｄの出力は、プリフェッチ制御ユニット５０に結合される。
【０１０１】
スキャンブロック１４０は、ランセクション内の第１の２分岐命令の位置を定めるために、そこで受取られた開始および制御転送ビットをスキャンするよう構成される。第１の分岐命令がランセクション内で識別されると、スキャンブロック１４０は、開始ビットおよび制御転送ビットの両方がセットされているバイトである、操作コードバイトと、第１の分岐命令が８ビット相対偏位を含む場合に符号化されたターゲットアドレスを集合的に形成する、直後に続くバイトおよび直後に続くバイトに対応する制御転送ビットとを選択するよう、セクションターゲットマルチプレクサ１４２Ａを向ける。同様に、第２の分岐命令がランセクション内で識別されれば、スキャンブロック１４０は、第２の分岐命令の操作コードバイトと、直後に続くバイトおよび直後に続くバイトに対応する制御転送ビットとを選択するよう、セクションターゲットマルチプレクサ１４２Ｂを向ける。このようにして、８ビット偏位を有する第１の２相対分岐命令に対応する操作コードバイトおよびターゲットアドレスが選択される。加えて、ランセクション内の各分岐命令の位置は、スキャンブロック１４０によって識別される。
【０１０２】
スキャンブロック１４０は、第１の分岐命令を検出することに応答してセクションターゲットマルチプレクサ１４２Ｃを制御するようさらに構成される。より特定的には、スキャンブロック１４０は、第１の分岐命令の開始バイトに続く第２のバイトで始まる（すなわち、キャッシュライン内の第１の分岐命令の開始バイトの２バイト後のバイトで始まる）連続する４命令バイトを選択する。もし第１の分岐命令が３２ビット相対偏位を含めば、これらの連続命令バイトは符号化されたターゲットアドレスである。同様に、スキャンブロック１４０は、第２の分岐命令の開始バイトに続く第２のバイトで始まる連続する４つの開始バイトを選択するよう、セクションターゲットマルチプレクサ１４２Ｄを制御する。このようにして、３２ビット偏位を有する第１の２相対分岐命令に対応するターゲットアドレスが選択される。プリフェッチ制御ユニット５０は、（ｉ）セクションターゲットマルチプレクサ１４２Ａによって選択されたターゲットアドレス、（ｉｉ）セクションターゲットマルチプレクサ１４２Ｃによって選択されたターゲットアドレス、または（ｉｉｉ）リターンスタック６４または間接アドレスキャッシュ６６からのターゲットアドレスのいずれかが第１の分岐命令に対応するかどうかを決定するよう構成される。同様に、プリフェッチ制御ユニット５０は、（ｉ）セクションターゲットマルチプレクサ１４２Ｂによって選択されたターゲットアドレス、（ｉｉ）セクションターゲットマルチプレクサ１４２Ｄによって選択されたターゲットアドレス、または（ｉｉｉ）リターンスタック６４または間接アドレスキャッシュ６６からのターゲットアドレスのいずれかが第２の分岐命令に対応するかどうかを決定するよう構成される。
【０１０３】
スキャンブロック１４０は、ランの他のセクションについての同様のスキャンブロックと連係して、ラン内の第１の２分岐命令に対応するターゲット情報を選択するようランターゲットマルチプレクサ１４４Ａ〜１４４Ｄを制御する。したがって、ランターゲットマルチプレクサ１４４Ａは、ラン内の第１の分岐命令のターゲットアドレス（すなわち直後に続くバイトおよび対応する制御転送ビット）、操作コードおよび位置を選択する。同様に、ランターゲットマルチプレクサ１４４Ｂは、ラン内の第２の分岐命令のターゲットアドレス、操作コードおよび位置を選択する。ランターゲットマルチプレクサ１４４Ｃ〜１４４Ｄは、それぞれ、第１および第２の分岐命令に対応する３２ビットターゲットアドレスを選択する。
【０１０４】
図９を参照すると、プリフェッチ制御ユニット５０のある実施例のブロック図が示される。他の実施例が可能であり企図される。図９に示すとおり、プリフェッチ制御ユニット５０は、デコーダ１５０と、フェッチアドレスマルチプレクサ１５２と、インクリメンタ１５４と、Ｌ１プリフェッチ制御ユニット１５６とを含む。デコーダ１５０は、分岐スキャナ５８からラン内の第１の分岐命令に対応する第１の分岐操作コードを受取るよう結合され、予測誤りリダイレクト表示および対応する訂正されたフェッチアドレスを受取るようリオーダバッファ２８に結合される。加えて、デコーダ１５０は、フェッチアドレスマルチプレクサ１５２およびＬ１プリフェッチ制御ユニット１５６に結合される。フェッチアドレスマルチプレクサ１５２は、ランターゲットマルチプレクサ１４４Ａによって選択されるとおり、ラン内の第１の分岐命令に対応する第１のターゲットアドレスを受取るよう結合される。第２の分岐命令アドレスに対応する第２のターゲットアドレスもまた、１クロックサイクル遅れてフェッチアドレスマルチプレクサ１５２に与えられる。加えて、フェッチアドレスマルチプレクサ１５２は、リターンスタック６４によって与えられるリターンアドレス、予測誤りがリダイレクトされるとリオーダバッファ２８によって与えられる訂正されたフェッチアドレス、および、（インクリメンタ１５４によって生成される）先のクロックサイクル中にフェッチされたアドレスに対しシーケンシャルなアドレスを受取るよう構成される。フェッチアドレスマルチプレクサ１５２は、Ｌ０Ｉ−キャッシュ１６およびＬ１プリフェッチ制御ユニット１５６にターゲットフェッチアドレスを与えるよう結合される。Ｌ１プリフェッチ制御ユニット１５６はさらに、ミス表示を受取るようＬ０Ｉ−キャッシュ１６に、予測された間接ターゲットアドレスを受取るよう間接アドレスキャッシュ６６に、相対分岐命令に対応する３２ビットターゲットアドレスを受取るよう分岐スキャナ５８に、分岐予測誤りアドレスを受取るようリオーダバッファ２８に、および、Ｌ１プリフェッチアドレスを与えるようＬ１Ｉ−キャッシュ１４に結合される。プリフェッチ制御ユニット５０は、レジスタ１５８を介してＬ０Ｉ−キャッシュ１６にシーケンシャルフェッチアドレスを与える。
【０１０５】
デコーダ１５０は、Ｌ０Ｉ−キャッシュ１６についてターゲットフェッチアドレスを選択するために、分岐スキャナ５８からの第１の識別された分岐命令に対応する操作コードをデコードするよう構成される。できる限り迅速にターゲットフェッチアドレスを与えるために、デコーダ１５０は、分岐スキャナ５８から受取られた操作コードバイトの一部のみをデコードする。より特定的には、ｘ８６命令セットでは、デコーダ１５０は、セット開始および制御転送ビットによって識別される操作コードバイトの４上位ビットをデコードして、分岐スキャナ５８からの第１のターゲットアドレス、リターンスタック６４からのリターンアドレスおよびシーケンシャルアドレスの１つを選択することが可能である。以下により詳細に記載される図１０は、デコーダ１５０のある実施例に対応する真理値表である。操作コードバイトのビットのサブセットのみがデコードされるので、より少ない論理レベルを採用して、フェッチアドレスマルチプレクサ１５２に対する選択制御を生成し、これによって迅速なターゲットアドレス選択を可能にすることが可能である。デコードに応答して選択されたターゲットアドレスが正しくなければ、フェッチされた命令は廃棄可能であり、正しいフェッチアドレスがその後のクロックサイクル中に生成され得る。
【０１０６】
ラン内の第１の分岐命令に対応する分岐予測は、フェッチアドレスが選択されるクロックサイクル中のあとの方まで利用可能でないため、デコーダ１５０は、ターゲットフェッチアドレスとして第２の分岐ターゲットアドレスを選択しようとしない。もし第１の分岐命令がノットテイクンであると予測されれば、分岐履歴テーブル６０を介して、第２の分岐命令が分岐履歴テーブル６０によってテイクンであると予測された場合には、第２の識別された分岐命令に対応する第２のターゲットアドレス（もしあれば）が、その後のクロックサイクル中にフェッチ可能である。また、第１の分岐がテイクンであると予測されるが、第１のターゲットアドレスが第１の分岐と同じラン内にあれば、シーケンシャルアドレスが選択される。もし第１の分岐がラン内で第２の分岐を超えて分岐しないのであれば、第２のターゲットアドレスが、その後のクロックサイクル中に選択される。同様に、もし第１の分岐命令が間接ターゲットアドレスまたは３２ビット相対ターゲットアドレスを使用すれば、フェッチアドレスマルチプレクサ１５２がアドレスを選択可能であり、フェッチされた命令は、実際の分岐ターゲットでの命令を支持して廃棄可能である。
【０１０７】
Ｌ１プリフェッチ制御ユニット１５６は、Ｌ１Ｉ−キャッシュ１４のためのＬ１プリフェッチアドレスを生成する。Ｌ１プリフェッチアドレスに対応するキャッシュラインは、Ｌ０Ｉ−キャッシュ１６に運ばれて記憶される。Ｌ１プリフェッチ制御ユニット１５６は、いくつかのソースの１つからプリフェッチアドレスを選択する。分岐予測誤りがリオーダバッファ２８によって合図された場合には、リオーダバッファ２８によって与えられる修正されたフェッチアドレスにシーケンシャルなアドレスが選択される。これは、他のアドレスソースは予測誤りされた経路内の命令に基づいているからである。分岐予測誤りが合図されず、Ｌ０フェッチアドレスミスが検出されれば、Ｌ１プリフェッチ制御ユニット１５６は、Ｌ０フェッチアドレスミスを選択してプリフェッチする。ミスが検出されなければ、Ｌ１プリフェッチ制御ユニット１５６は、デコーダ１５０からの信号に応答して、間接アドレスキャッシュ６６によって与えられた間接アドレスまたは分岐スキャナ５８からの３２ビット分岐ターゲットアドレスのいずれかを選択する。信号がデコーダ１５０から受取られなければ、Ｌ１プリフェッチ制御ユニット１５６は、フェッチアドレス１５２によって選択されたターゲットアドレスにシーケンシャルなキャッシュラインをプリフェッチする。
【０１０８】
間接アドレスおよび３２ビットターゲットアドレスは、ターゲット命令シーケンスが分岐命令近くのメモリ内に空間的に位置していないときにこれらのタイプのターゲットアドレスは典型的にはプログラマによって選択されるので、Ｌ０Ｉ−キャッシュ１６からフェッチされない。Ｌ０Ｉ−キャッシュ１６は、コードシーケンスが実行されたことに応答して、最も最近にアクセスされた少数のキャッシュラインを記憶するので、ターゲット命令シーケンスがＬ０Ｉ−キャッシュ１６に記憶される可能性は統計的により低いであろう。
【０１０９】
インクリメンタ１５４は、分岐履歴テーブル６０から受取られた分岐予測情報に基づいて、ディスパッチのために選択されたランに対応するフェッチアドレスをインクリメントするよう構成される。プリフェッチ制御ユニット５０は、Ｌ０Ｉ−キャッシュヒット情報および分岐予測情報に基づいて、命令選択マルチプレクサ５４を介してランを選択するための論理（図示せず）を含む。この論理によってまた、インクリメンタ１５４は、選択されたランに対応するフェッチアドレス（レジスタ１５８から与えられるシーケンシャルフェッチアドレスまたはフェッチアドレスマルチプレクサ１５２から与えられるターゲットフェッチアドレスのいずれか）をインクリメントするようになる。したがって、その後のクロックサイクルについてのシーケンシャルフェッチアドレスは、生成されてレジスタ１５８に記憶される。
【０１１０】
図１０を参照すると、ｘ８６命令セットを採用するプロセッサ１０のある実施例において採用されるデコーダ１５０のある実施例に対応する真理値表１６０が示される。他の実施例が可能であり企図される。図１０に示すとおり、（１６進法における）７、Ｅまたは０に等しい最上位４ビットを有する操作コードによって、第１のターゲットアドレスがフェッチアドレスマルチプレクサ１５２によって選択される。Ｃに等しい最上位４ビットを有する操作コードによって、リターンスタック６４からのリターンアドレスが選択され、Ｆに等しい最上位４ビットを有する操作コードによって、シーケンシャルアドレスが選択されるようになる。
【０１１１】
７に等しい最上位４ビットを有する分岐命令操作コードは、８ビット相対偏位を有する条件付ジャンプ命令である。したがって、７に等しい最上位４ビットを有する、セット開始ビットおよびセット制御転送ビットに対応する操作コードが、ランターゲットマルチプレクサ１４４Ａから与えられるターゲットアドレスを正しく選択する。Ｅに等しい最上位４ビットを有する分岐命令操作コードは、８ビット相対偏位を伴う条件付ジャンプ命令、または、８ビット相対偏位または３２ビット相対偏位のいずれかを有するコールもしくは無条件ジャンプ命令であり得る。これらの場合には、デコーダ１５０は、ランターゲットマルチプレクサ１４４Ａによって与えられる第１のターゲットアドレスを選択し、もしさらなるデコードが３２ビット偏位フィールドが分岐命令内に含まれると表示すれば、選択に応答してフェッチされた命令は廃棄され、分岐スキャナ５８から３２ビットフェッチアドレスを受取るＬ１プリフェッチ制御ユニット１５６を介して正しいフェッチアドレスがＬ１Ｉ−キャッシュ１４からプリフェッチされる。最後に、０に等しい最上位４ビットを有する分岐命令操作コードが、３２ビット相対偏位を特定する。この実施例では、デコーダ１５０は、３２ビットターゲットアドレスを選択してＬ０Ｉ−キャッシュ１６からフェッチすることができないので、デコーダ１５０は、分岐スキャナ５８から与えられる第１のターゲットアドレスを選択し、分岐スキャナ５８からの３２ビット分岐ターゲットアドレスを選択してＬ１Ｉ−キャッシュ１４からプリフェッチするよう、Ｌ１プリフェッチ制御ユニット１５６に合図する。
【０１１２】
Ｃに等しい最上位４ビットを有する分岐命令操作コードは、リターン命令であり、したがって、リターンアドレススタック６４によって与えられるリターンアドレスは、予測されたフェッチアドレスを与える。他方で、Ｆに等しい最上位４ビットを有する分岐命令操作コードは、間接ターゲットアドレス生成を用いるコールまたは無条件ジャンプ命令である。間接アドレスはフェッチアドレスマルチプレクサ１５２に与えられず、したがって、シーケンシャルアドレスのデフォルト選択が実行される。シーケンシャルアドレスに応答してフェッチされた命令は廃棄され、Ｌ１Ｉ−キャッシュ１４からプリフェッチされた命令が、その後のクロックサイクル中に与えられる。
【０１１３】
真理値表１６０が示すとおり、開始ビットおよび制御転送ビットによって識別される命令バイトの一部のみのプリデコードを用いて、Ｌ０Ｉ−キャッシュ１６についてのターゲットフェッチアドレスを選択することが可能である。したがって、プリフェッチ制御ユニット５０および分岐スキャナ５８は、高周波の単一サイクルＬ０Ｉ−キャッシュアクセスをサポート可能である。
【０１１４】
図１０Ａを参照すると、デコーダ１５０のある実施例の操作を例示するフローチャートが示される。他の実施例が可能であり企図される。図１０Ａでは直列の一連のステップとして示されるが、例示のステップは、いかなる好適な順番で実行されてもよく、デコーダ１５０内で採用される組合せ論理によって並列に実行されてもよい。
【０１１５】
デコーダ１５０は、分岐予測誤りの信号がリオーダバッファ２８によって発生されているかどうかを決定する（決定ブロック１９２）。予測誤りの信号が発生された場合、リオーダバッファ２８から受取られる訂正されたフェッチアドレスが選択される（ステップ１９３）。他方で、予測誤りの信号が発生されなかった場合、デコーダ１５０は、分岐スキャナ５８によって先のクロックサイクル中に識別された第２の分岐命令に対応する第２のターゲットアドレスがフェッチされるべきかどうかを決定する（決定ブロック１９４）。第１の分岐命令がノットテイクンであると予測され、第２の分岐命令がテイクンであると予測された場合に、第２のターゲットアドレスがフェッチされ得る。加えて、第１の分岐命令がテイクンであると予測されるが、これは第２の分岐命令をキャンセルしない小さな前方偏位であり、かつ、第２の分岐命令がテイクンであると予測された場合には、第２のターゲットアドレスがフェッチされ得る。第２のターゲットアドレスがフェッチされるべきであれば、デコーダ１５０は、第２のターゲットアドレスを選択する（これは、先のクロックサイクル中に受取られたものであり、フェッチアドレスマルチプレクサ１５２に到着するのに１クロックサイクル遅延している−ステップ１９５）。最後に、第２のターゲットアドレスがフェッチされるべきでなければ、デコーダ１５０は、上述した真理値表１６０に従って動作する（ステップ１９６）。
【０１１６】
図１１を参照すると、Ｌ１プリフェッチ制御ユニット１５６のある実施例の動作を例示するフローチャートが示される。他の実施例が可能であり企図される。図１１では直列の一連のステップとして示されるが、例示されるステップは、いかなる好適な順番で実行されてもよく、Ｌ１プリフェッチ制御ユニット１５６で採用される組合せ論理によって並列に実行されてもよいことが理解される。
【０１１７】
分岐予測誤りリダイレクトがＬ１プリフェッチ制御ユニット１５６によって受取られた場合（決定ブロック１７０）、訂正されたフェッチアドレスに対応するキャッシュラインに対しシーケンシャルなキャッシュラインが、Ｌ１Ｉ−キャッシュ１４からプリフェッチされる（ステップ１７２）。他方、分岐予測誤りリダイレクトが受取られなかった場合、Ｌ１プリフェッチ制御ユニット１５６は、Ｌ０Ｉ−キャッシュミスが生じたかどうかを決定する（決定ブロック１７４）。Ｌ０Ｉ−キャッシュミスが検出された場合、Ｌ０Ｉ−キャッシュ１６をミスしたアドレスは、Ｌ１Ｉ−キャッシュ１４からプリフェッチされる（ステップ１７６）。Ｌ０Ｉ−キャッシュミスがなければ、Ｌ１プリフェッチ制御ユニット１５６は、間接ターゲットアドレスまたは３２ビット相対ターゲットアドレスのいずれかがデコーダ１５０によって検出されたかどうかを決定する（決定ブロック１７８）。もしそのような信号が受取られれば、間接アドレスキャッシュ６６から受取られた間接アドレスまたは分岐スキャナ５８から受取られた３２ビット相対ターゲットアドレスが、Ｌ１Ｉ−キャッシュ１４からプリフェッチされる（ステップ１８０）。最後に、間接ターゲットアドレスまたは３２ビット相対ターゲットアドレスの信号が発生されなければ、Ｌ１プリフェッチ制御ユニット１５６は、現在のターゲットフェッチアドレスの次のシーケンシャルキャッシュラインをプリフェッチする（ステップ１８２）。
【０１１８】
図１２を参照すると、命令ラン内で識別される第１および第２の分岐命令に対応するさまざまなターゲットアドレスおよび分岐予測についてのプロセッサ１０のある実施例に対応するフェッチ結果を例示する、表１９０が示される。他の実施例が可能であり企図される。表１９０では、小前方ターゲットとは、現在のラン内に存在するターゲットのことである。反対に、大前方ターゲットとは、現在のラン内に存在しないターゲットのことである。ターゲットアドレスが分岐命令のアドレスよりも数的により大きいときに、ターゲットは前方であると呼び、ターゲットアドレスが分岐命令のアドレスよりも数的により小さければ後方であると呼ぶ。テイクン／ノットテイクン予測は、分岐履歴テーブル６０から得られる。注に示すとおり、第２の分岐予測に対応する結果は、ある実施例に従うと１クロックサイクル分遅延され得る。したがって、プロセッサ１０は、第２の分岐予測についてノットテイクンであると予想可能であり（すなわちシーケンシャルアドレスをフェッチする）、第２の分岐予測がテイクンであると示せば、フェッチは、その後のクロックサイクル中に訂正され得る。
【０１１９】
表１９０における結果列は、いくつかの結果を列挙する。表１９０の結果列で使用される場合の「スカッシュ」という言葉は、どの命令が、図２に示すフォワードコラプスユニット６８からの信号によって命令キュー２０から削除されるかを示す。加えて、第１および／または第２の分岐命令に応答してフェッチされるべきターゲットまたはシーケンシャルアドレスは、ターゲットまたはシーケンシャルアドレスがＬ０Ｉ−キャッシュ１６（Ｌ０表記）またＬ１Ｉ−キャッシュ１４（Ｌ１表記）のうちどれに運ばれるかについて括弧付表記を伴って示される。
【０１２０】
図１３を参照すると、命令キュー２０のある例示の実施例のブロック図が示される。他の実施例が可能であり企図される。図１３の実施例では、命令キュー２０は、ラン記憶装置３００Ａ〜３００Ｂと、スキャンデータ記憶装置３０２Ａ〜３０２Ｂと、アドレス記憶装置３０４Ａ〜３０４Ｂとを含む。加えて、命令キュー２０は、マルチプレクサ３０６および制御ユニット３０８を含む。命令のランは、ランバス３１０を介してフェッチ／スキャンユニット１８から命令キュー２０に与えられる。対応するスキャンデータは、スキャンデータバス３１２に与えられる。対応するアドレス（１ランセクションあたり１）は、ランアドレスバス３１４に与えられる。命令キュー２０は、命令バイトバス３１６を介して整列ユニット２２に、選択された命令バイトの組を、命令ポインタバス３１８を介して命令バイト内の命令に対するポインタを、アドレスバス３２０を介して、選択された命令バイトの組を含むランセクションについてのアドレスを与える。ランバス３１０は、ラン記憶装置３００Ａ〜３００Ｂに結合され、スキャンデータバス３１２は、スキャンデータ記憶装置３０２Ａ〜３０２Ｂに結合され、アドレス記憶装置３０４Ａ〜３０４Ｂは、ランアドレスバス３１４に結合される。記憶装置３００Ａ〜３００Ｂ、３０２Ａ〜３０２Ｂおよび３０４Ａ〜３０４Ｂは、マルチプレクサ３０６に結合され、これはさらにバス３１６〜３２０に結合される。制御ユニット３０８は、マルチプレクサ３０６およびスキャンデータ記憶装置３０２Ａ〜３０２Ｂに結合される。
【０１２１】
フェッチ／スキャンユニット１８、より特定的には、図２の実施例に従う命令スキャナ５６は、バス３１０〜３１４を介して命令キュー２０に命令のランおよび関連する情報を与える。制御ユニット３０８は、命令ランを含む命令バイトに対してラン記憶装置３００Ａ〜３００Ｂの１つを、関連する情報に対して、対応するスキャンデータ記憶装置３０２Ａ〜３０２Ｂおよびアドレス記憶装置３０４Ａ〜３０４Ｂを割当てる。スキャンデータは、（ｉ）ランセクションション内のオフセットとして開始バイトおよび終了バイト、同様に（ii）命令が存在しているランセクションを識別する命令ポインタを含む。ある特定の実施例に従うと、最大５命令が、８バイトランセクション内で識別可能であり、スキャンデータ記憶装置３０２内に記憶される合計最大１５命令ポインタに対し、１ラン内に最大３ランセクションがある。加えて、アドレス記憶装置３０４は、各ランセクションに対応するアドレスを記憶する。
【０１２２】
制御ユニット３０８は、スキャンデータ記憶装置３０２Ａ〜３０２Ｂ内の命令ポインタを調べて、連続するランセクションの組内の命令を識別して、これを整列ユニット２２にディスパッチする。ある特定の実施例では、最大６命令が、最大４つの連続するランセクション内で識別される。ランセクションは、ラン記憶装置３００Ａまたは３００Ｂの１つに記憶可能であり、ラン記憶装置３００Ａ〜３００Ｂの一方から選択可能なランセクションもあれば、ラン記憶装置３００Ａ〜３００Ｂの他方から選択可能なランセクションもある。第１のランセクションが、投機的プログラム順序で第２のランセクションの次であれば、第１のランセクションは、第２のランセクションに連続する。なお、図面には簡素化するため図１３においては単一のマルチプレクサとして例示されるが、マルチプレクサ３０６は、いかなる好適な並列または縦続接続された組のマルチプレクサによって実現されてもよい。
【０１２３】
制御ユニット３０８は、マルチプレクサ３０６に１組の選択信号を与えて、選択された命令を含む１組のランセクション、および、選択された命令に対応する命令ポインタを選択する。加えて、選択されたランセクションの各々についてのアドレスが選択される。ランセクションは、命令バイトバス３１６に与えられ、対応する命令ポインタおよびアドレスは、命令ポインタバス３１８およびアドレスバス３２０にそれぞれ与えられる。
【０１２４】
図１４を参照すると、フューチャファイル２６およびリオーダバッファ／レジスタファイル２８のある実施例のブロック図がより詳細に示される。他の実施例が可能であり企図される。図１４の実施例では、フューチャファイル２６は、レジスタファイル２８Ａおよびリオーダバッファ２８Ｂとともに示される。フューチャファイル２６は、レジスタファイル２８Ａと、結果バス４８と、１組のソースオペランドアドレスバス３３０と、１組のソースオペランドバス３３２と、１組のルックアヘッド更新バス３３４とに結合される。リオーダバッファ２８Ｂは、レジスタファイル２８Ａと、結果バス４８と、ディスパッチされた命令バス３３６とに結合される。
【０１２５】
命令がルックアヘッド／コラプスユニット２４内のデコードユニット７０によってデコードされると、命令のレジスタソースオペランドは、ソースオペランドアドレスバス３３０を介してフューチャファイル２６に送られる。フューチャファイル２６は、最新の値を生成する命令が実行された場合には、各レジスタの最新投機的値を、または、最新の値を生成する命令を識別するリオーダバッファタグのいずれかを、ソースオペランドバス３３２に与える。加えて、ソースオペランドの１つは、ディスティネーションオペランドであるよう表示され得る。フューチャファイル２６は、ディスティネーションオペランドに応答して、対応する命令に割当てられるべきリオーダバッファタグで、ディスティネーションレジスタに対応する場所を更新する。
【０１２６】
フューチャファイル２６は加えて、ルックアヘッド／コラプスユニット２４から更新を受取る。ルックアヘッドアドレス／結果計算ユニット７４によって生成されたルックアヘッド結果は、ルックアヘッド更新バス３３４を介してフューチャファイル２６に与えられる。ルックアヘッドアドレス／結果計算ユニット７４からルックアヘッド更新を与えることによって、投機的実行結果は、より迅速にフューチャファイル２６内に記憶されることが可能であり、これによって、その後に実行する命令に対してより迅速に利用可能となり得る。これによって、その後の命令が、ルックアヘッド結果計算を獲得する可能性がより高くなり得る。ある実施例では、フューチャファイル２６上のポート数を低減するために、ルックアヘッド更新の数は制限される（たとえば、２更新が許容可能である）。ＥＳＰ更新は、ルックアヘッド／コラプスユニット２４によって既に取られているので、これらの更新はフューチャファイル２６に記憶される必要がない。さらに、あらゆる発行位置がフューチャファイル２６についての投機的更新を有するとは限らない。したがって、平均的には、フューチャファイル２６において必要とされる投機的更新はより少ないものであり得、したがって、更新の数を制限することによって性能が低下することはないであろう。
【０１２７】
命令結果は、結果バス４８上に与えられる。フューチャファイル２６は、結果を受取り、（これもまた結果バス４８上に与えられる）対応するリオーダバッファタグを、そこに記憶されたリオーダバッファタグと比較して、命令結果が設計されたレジスタの１つに対する最新の投機的更新を含んでいるかどうかを決定する。もしリオーダバッファタグがフューチャファイル内のリオーダバッファタグの１つに一致すれば、結果は、フューチャファイル２６によって取られ、対応する設計レジスタと関連付けられる。
【０１２８】
フューチャファイル２６は、例外／分岐予測誤りが検出されリタイアされたときに、そこに記憶された設計されたレジスタのコピーを受取るようレジスタファイル２８Ａに結合される。リオーダバッファ２８Ｂは、結果バス４８に与えられる結果から例外および分岐予測誤りを検出することが可能であり、レジスタファイル２８Ａにリタイアされる、設計されたレジスタのコピーがフューチャファイル２６にコピーされるべきかどうかを、レジスタファイル２８Ａおよびフューチャファイル２６に合図することが可能である。たとえば、例外または分岐予測誤りを有する命令をリタイアすると、コピーが実行され得る。このようにして、フューチャファイル２６は、正しくない投機的実行から復旧可能である。
【０１２９】
リオーダバッファ２８Ｂは、ディスパッチされた命令バス３３６を介してルックアヘッド／コラプスユニット２４からディスパッチされた命令を受取る。ディスパッチされた命令は、命令がディスパッチされるべきであるとディスパッチ制御ユニット７６によって決定されると、リオーダバッファ２８Ｂに与えられ得る。加えて、リオーダバッファ２８Ｂは、結果バス４８を介して実行結果を受取り、プログラム順序で、レジスタファイル２８Ａに結果をリタイアする。
【０１３０】
図１５を参照すると、バスブリッジ２０２を介してさまざまなシステム構成要素に結合されるプロセッサ１０を含むコンピュータシステム２００のある実施例のブロック図が示される。他の実施例が可能であり企図される。図示のシステムでは、主メモリ２０４は、メモリバス２０６を介してバスブリッジ２０２に結合され、グラフィックスコントローラ２０８は、ＡＧＰバス２１０を介してバスブリッジ２０２に結合される。最後に、複数個のＰＣＩデバイス２１２Ａ〜２１２Ｂは、ＰＣＩバス２１４を介してバスブリッジ２０２に結合される。２次バスブリッジ２１６をさらに設けて、ＥＩＳＡ／ＩＳＡバス２２０を介して１つ以上のＥＩＳＡまたはＩＳＡデバイス２１８への電気的インターフェイスを可能にしてもよい。プロセッサ１０は、バスインターフェイス４６を介してバスブリッジ２０２に結合される。
【０１３１】
バスブリッジ２０２は、プロセッサ１０と主メモリ２０４とグラフィックコントローラ２０８とＰＣＩバス２１４につながれるデバイスとの間にインタフェースを与える。操作が、バスブリッジ２０２に接続されるデバイスの１つから受取られると、バスブリッジ２０２が、操作のターゲットを識別する（たとえば、特定のデバイスまたは、ＰＣＩバス２１４の場合には、ターゲットはＰＣＩバス２１４上にある）。バスブリッジ２０２は、ターゲットされたデバイスに操作を送る。バスブリッジ２０２は一般的に、ソースデバイスまたはバスによって用いられるプロトコルからターゲットデバイスまたはバスによって用いられるプロトコルに操作を変換する。
【０１３２】
ＰＣＩバス２１４に対してＩＳＡ／ＥＩＳＡバスへのインターフェイスを与えることに加えて、２次バスブリッジ２１６はさらに、所望の如く、付加的な機能を組込む。たとえば、ある実施例では、２次バスブリッジ２１６は、ＰＣＩバス２１４の所有権を調停するためにマスタＰＣＩアービタ（図示せず）を含む。所望のごとく、外部からまたは２次バスブリッジ２１６に統合される、入力／出力コントローラ（図示せず）が、コンピュータシステム２００に含まれて、キーボードおよびマウス２２２についてのならびにさまざまな並列および直列ポートについての操作上のサポートを与えてもよい。他の実施例では、外部キャッシュユニット（図示せず）が、プロセッサ１０とバスブリッジ２０２との間のバスインターフェイス４６にさらに結合されてもよい。代替的に、外部キャッシュは、バスブリッジ２０２に結合されてもよく、外部キャッシュについてのキャッシュ制御論理が、バスブリッジ２０２に統合されてもよい。
【０１３３】
主メモリ２０４は、アプリケーションプログラムが記憶され、ここからプロセッサ１０が主に実行するメモリである。好適な主メモリ２０４は、ＤＲＡＭ（ダイナミックランダムアクセスメモリ）および、好ましくは、複数個のＳＤＲＡＭ（シンクロナスＤＲＡＭ）のバンクを含む。
【０１３４】
ＰＣＩデバイス２１２Ａ〜２１２Ｂは、たとえば、ネットワークインターフェイスカード、ビデオアクセラレータ、オーディオカード、ハードまたはフロッピーディスクドライブまたはドライブコントローラ、ＳＣＳＩ（スモールコンピュータシステムインターフェイス）アダプタおよび電話機能カードなどの、さまざまな周辺デバイスを例示するものである。同様に、ＩＳＡデバイス２１８は、モデム、サウンドカード、ＧＰＩＢまたはフィールドバスインターフェイスカードなどのさまざまなデータ収集カードなどの、さまざまなタイプの周辺デバイスを例示するものである。
【０１３５】
グラフィックスコントローラ２０８は、ディスプレイ２２６上のテキストおよび画像のレンダリングを制御するよう設けられる。グラフィックコントローラ２０８は、一般的に公知である典型的なグラフィックアクセラレータを実現するものであって、主メモリ２０４からおよびそこへ効果的にシフト可能である３次元データ構造をレンダリングすることが可能である。したがって、グラフィックコントローラ２０８は、これがバスブリッジ２０２においてターゲットインターフェイスへのアクセスを要求し受取ることによって、主メモリ２０４へのアクセスを獲得することが可能であるという点で、ＡＧＰバス２１０のマスタであり得る。専用グラフィックバスは、主メモリ２０４からのデータの高速な取出を可能とする。ある種の操作では、グラフィックコントローラ２０８は、ＡＧＰバス２１０を介してＰＣＩコントロールトランザクションを生成するようさらに構成可能である。バスブリッジ２０２のＡＧＰインターフェイスはしたがって、ＡＧＰプロトコルトランザクションと、ＰＣＩプロトコルターゲットおよびイニシエータトランザクションとの両方をサポートする機能を含み得る。ディスプレイ２２６は、画像またはテキストを与えることができるような任意の電子ディスプレイである。好適なディスプレイ２２６は、陰極線管（「ＣＲＴ」）、液晶ディスプレイ（「ＬＣＤ」）などを含む。
【０１３６】
なお、上記の記載では、ＡＧＰバス、ＰＣＩバスおよびＩＳＡバスまたはＥＩＳＡバスが例として用いられたが、所望のごとく、いかなるバスアーキテクチャが代わりに用いられてもよい。なおさらに、コンピュータシステム２００は、付加的プロセッサ（たとえば、コンピュータシステム２００の任意の構成要素として示されるプロセッサ１０ａ）を含むマルチプロセシングコンピュータシステムであってもよい。プロセッサ１０ａは、プロセッサ１０と同様であり得る。より特定的には、プロセッサ１０ａは、プロセッサ１０の同一のコピーであってもよい。プロセッサ１０ａは、（図１５に示すとおり）プロセッサ１０とバスインターフェイス４６を共有してもよいし、または、独立バスを介してバスブリッジ２０２に接続されてもよい。
【０１３７】
上記の開示に従うと、プロセッサは、命令キャッシュからの命令バイトの長いランをフェッチしてワイド発行スーパースカラコアに多数の命令を与えるものとして、示された。ある実施例では、プロセッサは、１クロックサイクル当り最大２分岐命令を予測し、１クロックサイクル当り命令ラン内の最大１５命令を識別することが可能である。命令は、ワイド発行スーパースカラコアに与えられて、多数の命令を同時に発行する能力を最大限に活用することが可能であるという効果を奏する。
【０１３８】
上記の開示を完全に理解すると、さまざまな変形および変更が当業者には明らかとなるであろう。前掲のクレームは、そのようなすべての変形および変更を包含するものとして解釈されるべきである。
【図面の簡単な説明】
【図１】  スーパースカラプロセッサのある実施例のブロック図である。
【図２】  図１に示すフェッチ／スキャンユニットのある実施例のブロック図である。
【図３】  図１に示すルックアヘッド／コラプスユニットのある実施例のブロック図である。
【図４】  図１に示すプリデコードユニットのある実施例のブロック図である。
【図４Ａ】  図４に示すターゲット生成器のある実施例のブロック図である。
【図５】  図１に示すプロセッサのある実施例に従う８ビットオフセットを有する制御転送命令および対応するプリデコード情報を例示する図である。
【図６】  図１に示すプロセッサのある実施例に従う３２ビットオフセットを有する制御転送命令および対応するプリデコード情報を例示する図である。
【図７】  図１に示すプロセッサのある実施例に従ういくつかの非制御転送命令および対応するプリデコード情報を例示する図である。
【図８】  図２に示す分岐スキャナのある実施例のブロック図である。
【図９】  図２に示すプリフェッチ制御ユニットのある実施例のブロック図である。
【図１０】  図９に示すデコーダのある実施例のための真理値表である。
【図１０Ａ】  図９に示すデコーダのある実施例の動作を例示するフローチャートである。
【図１１】  図９に示すＬ１プリフェッチ制御ユニットのある実施例の動作を例示するフローチャートである。
【図１２】  最大２分岐命令が１クロックサイクル当り予測されるような、図１に示すプロセッサのある実施例についての命令フェッチおよびディスパッチ結果を例示する表である。
【図１３】  図１に例示される命令キューのある実施例のブロック図である。
【図１４】  図１に示すフューチャファイル、レジスタファイルおよびリオーダバッファのある実施例のブロック図である。
【図１５】  図１に示すプロセッサを含むコンピュータシステムのある実施例のブロック図である。
【図１】
0003838417.tif 000004
【図２】
0003838417.tif 000005
【図３】
0003838417.tif 000006
【図４】
0003838417.tif 000007
【図４Ａ】
0003838417.tif 000008
【図５】
0003838417.tif 000009
【図６】
0003838417.tif 000010
【図７】
0003838417.tif 000011
【図８】
0003838417.tif 000012
【図９】
0003838417.tif 000013
【図１０】
0003838417.tif 000014
【図１０Ａ】
0003838417.tif 000015
【図１１】
0003838417.tif 000016
【図１２】
0003838417.tif 000017
【図１３】
0003838417.tif 000018
【図１４】
0003838417.tif 000019
【図１５】
0003838417.tif 000020