JP3838417B2 - 制御転送命令を識別するためにプリデコードに制御転送ビットを採用するプロセッサ - Google Patents
制御転送命令を識別するためにプリデコードに制御転送ビットを採用するプロセッサ Download PDFInfo
- Publication number
- JP3838417B2 JP3838417B2 JP2000545093A JP2000545093A JP3838417B2 JP 3838417 B2 JP3838417 B2 JP 3838417B2 JP 2000545093 A JP2000545093 A JP 2000545093A JP 2000545093 A JP2000545093 A JP 2000545093A JP 3838417 B2 JP3838417 B2 JP 3838417B2
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- address
- cache
- byte
- branch
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3818—Decoding for concurrent execution
- G06F9/382—Pipelined decoding, e.g. using predecoding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/30149—Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
- G06F9/30152—Determining start or end of instruction; determining instruction length
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3804—Instruction prefetching for branches, e.g. hedging, branch folding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3816—Instruction alignment, e.g. cache line crossing
Description
【発明の背景】
1.発明の分野
この発明は、プロセッサの分野に関し、より特定的には、プロセッサ内でのプリデコーディング技術に関する。
【0002】
2.関連技術の説明
EP−A−0 651 324は、プリデコードユニットと、対応する命令バイトとともにプリデコードユニットによって生成されたプリデコード情報を記憶するためにそこに結合される命令キャッシュとを含むプロセッサを開示する。プリデコード情報は、対応する命令が開始バイトまたは終了バイトであることを表示することができ、かつバイトのタイプを表示するプリデコードビットを含む。
US−A−5 337 415は、プリデコードビットを生成するプリデコードユニットと、対応する命令バイトとともにプリデコードビットを記憶するための命令キャッシュとを有するプロセッサを開示する。プリデコードビットは、「分岐」を表示するプリデコードビットを含み、分岐命令を専用分岐ユニットに向けることが可能である。
スーパースカラプロセッサは、1クロックサイクル当り複数の命令をディスパッチしかつ実行することによって、および、設計に従って可能な限り最短のクロックサイクルで動作することによって高性能を達成しようとする。所与のプロセッサが1クロックサイクル当り複数の命令をディスパッチしかつ/または実行するのに成功する程度まで、高性能が実現可能である。1クロックサイクル当りにディスパッチされる命令の平均数を増大させるために、プロセッサ設計者は、より広い発行速度を採用するスーパースカラプロセッサを設計してきた。「ワイド発行」スーパースカラプロセッサは、「ナロウ発行」スーパースカラプロセッサがディスパッチ可能であるよりも、1クロックサイクル当りの命令のより大きい最大数をディスパッチ(または発行)することが可能である。ディスパッチ可能な命令の数が、ナロウ発行プロセッサが処理可能であるよりも大きいようなクロックサイクル中に、ワイド発行プロセッサは、より多い命令をディスパッチすることによって、1クロックサイクル当りにディスパッチされる命令のより大きい平均数を獲得することが可能である。
【0003】
多くのプロセッサは、コンピュータ産業でこれが広く受入れられているためにx86命令セットを実行するよう設計されている。たとえば、カリフォルニア州サニィベイルのアドバンスト・マイクロ・ディバイシズ・インコーポレイテッド(Advanced Micro Devices, Inc.)からのK5およびK6プロセッサは、x86命令セットを実現する。x86命令セットは、さまざまな命令がメモリ内で異なった数のバイトを占有する可変長命令セットである。命令の型および、特定の命令の符号化のために選択されるアドレッシングモードが、その特定の命令の符号化によって占有されるバイトの数に影響を与え得る。x86命令セットのような可変長命令セットは、各命令について必要とされるバイトの数のみを占有することによって、特定のプログラムを記憶するために必要とされるメモリの量を最小限にする。対照的に、多くのRISCアーキテクチャは、各命令が固定の予め定められた数のバイトを占有する固定長命令セットを採用する。
【0004】
残念ながら、可変長命令セットは、ワイド発行プロセッサの設計を複雑にする。ワイドプロセッサが有効になるには、プロセッサは、命令ディスパッチハードウェアに十分な命令を与えるためにコードシーケンス内で同時かつ高速に多数の命令を識別可能でなければならない。コードシーケンス内の各可変長命令の場所は、先行する命令に依存するので、命令の高速な識別は困難である。十分な数の命令を識別することができなければ、ワイド発行構造によって大きく性能を向上させることはできないであろう。したがって、ディスパッチのために命令を高速かつ同時に識別するプロセッサが必要とされる。
【0005】
ワイド発行スーパースカラプロセッサによって達成可能な性能にとって重要である別の特徴は、その分岐予測メカニズムの正確性および有効性である。ここに使用される場合、分岐予測メカニズムとは、ディスパッチのために識別される命令内の制御転送命令を検出し、識別された制御転送命令の実行の結果得られた次のフェッチアドレスを予測するハードウェアを指す。一般的に、「制御転送」命令とは、実行されると、実行されるべき次の命令がフェッチされるアドレスを特定する命令である。ジャンプ命令は、制御転送命令の一例である。ジャンプ命令は、ジャンプ命令のすぐ後に続くバイトのアドレス(「シーケンシャルアドレス」)と異なったターゲットアドレスを特定する。無条件ジャンプ命令では常に、フェッチされるべき次の命令はターゲットアドレスの命令となり、一方、条件付きジャンプ命令では、フェッチされるべき次の命令は、先の命令の実行結果に応答して(たとえば命令実行を介して条件フラグセットを特定することによって)、ターゲットアドレスの命令またはシーケンシャルアドレスの命令のいずれかとなる。ジャンプ命令に加えて命令の他の型もまた制御転送命令であり得る。たとえば、サブルーチンコールおよびリターン命令によって、次のフェッチアドレスを特定することに加えてスタック操作が可能となる。制御転送命令のこれらのさらなる型の多くは、(条件付または無条件のいずれかの)ジャンプ操作とさらなる命令操作とを含む。
【0006】
制御転送命令は、さまざまな方法でターゲットアドレスを特定可能である。「相対」制御転送命令は、ターゲットアドレスを生成するために、相対制御転送命令に対応するアドレスに加算されるべき値(直接にまたは間接に)を含む。値が加算されるアドレスは、命令セット定義に依存する。x86制御転送命令については、制御転送命令のすぐ後に続くバイトのアドレスが、値が加算されるアドレスである。他の命令セットは、制御転送命令自体のアドレスに値を加算することを特定可能である。加算されるべき値を直接特定する相対制御転送命令については、値を記憶するために命令フィールドが含まれ、値は、「偏位」と呼ばれる。
【0007】
他方で、「絶対」制御転送命令は、(ここでも直接または間接的に)ターゲットアドレス自体を特定する。したがって、絶対制御転送命令は、ターゲットアドレスを決定するのに制御転送命令に対応するアドレスを必要としない。ターゲットアドレスを間接的に(たとえば1つ以上のレジスタまたはメモリオペランドを介して)特定する制御転送命令を、「間接」制御転送命令と呼ぶ。
【0008】
さまざまな利用可能な制御転送命令があるために、分岐予測メカニズムはかなり複雑なものとなり得る。しかしながら、制御転送命令は多くのプログラムシーケンスで頻繁に起こるので、ワイド発行プロセッサには、非常に有効な(たとえば正確かつ高速な)分岐予測メカニズムが必要とされる。分岐予測メカニズムが非常に正確でなければ、ワイド発行プロセッサは、1クロックサイクル当り多数の命令を発行するかもしれないが、究極的には、分岐予測誤りのために発行された命令の多くをキャンセルすることになり得る。他方で、ターゲットアドレスを生成するために分岐予測メカニズムによって使用されるクロックサイクルの数は、ターゲットアドレスがフェッチされるべき命令を考慮して、最小限にする必要がある。
【0009】
「分岐命令」という言葉は、「制御転送命令」と同義であるものとしてここでは用いられる。
【0010】
【発明の概要】
上記略述した課題は、この発明に従うプロセッサによって大部分解決される。このプロセッサは、命令バイトを命令キャッシュ内に記憶するより前にこれをプリデコードするよう構成される。プロセッサによって生成されたプリデコード情報は、どの命令バイトが命令の境界であるかを識別する命令境界表示と、どの命令が制御転送命令であるかを識別する制御転送表示とを含む。命令境界表示は、ディスパッチのために複数の命令を高速かつ並列に識別し、命令識別を並列化することによってワイド発行スーパースカラプロセッサをサポートする。さらに、制御転送表示は、ディスパッチのために識別される命令内の分岐命令の高速および並列識別を可能とする。有利には、このプロセッサによって採用される分岐予測メカニズムは、分岐命令の予測を生成するために分岐命令を迅速に位置付けし得る。分岐予測メカニズムは、分岐命令を高速で位置付け、従っては識別された分岐命令について高速で分岐予測を展開することが可能であるので、分岐予測メカニズムは、命令バイトがデコードされて分岐命令を位置付けた場合よりもより効率的に動作可能である。制御転送表示および命令境界表示の組合せによって、制御転送表示および命令境界表示をスキャンするだけで、分岐予測メカニズムは命令キャッシュからフェッチされる命令バイトの群内に分岐命令を迅速に位置付けすることが可能となる。より効率的な分岐予測メカニズムは、高性能レベルでワイド発行スーパースカラプロセッサをサポート可能である。ある実施例では、分岐予測メカニズムは、1クロックサイクル当り最大2分岐命令を予測しようとする。したがって、分岐予測メカニズムは、制御転送表示および命令境界表示をスキャンして、命令キャッシュからフェッチされる命令バイトの群内に第1の2分岐命令を位置付ける。
【0011】
ある実施例では、命令境界表示は、各命令バイトに対応する開始ビットを含む。開始ビットは、対応する命令バイトが命令の先頭バイトであればセットされ、対応する命令バイトが命令の先頭バイトでなければクリアされる。制御転送表示は、同様に、各命令バイトに対応する制御転送ビットを含む。もしバイトが開始ビットによって命令の先頭バイトであると表示されれば、制御転送ビットを用いて命令が制御転送命令であるかどうかを表示する。したがって、分岐予測メカニズムは、命令キャッシュからフェッチされる命令バイトの群に対応する開始ビットおよび制御転送ビットをスキャンすることによって、分岐命令を検出し得る。
【0012】
広くには、この発明は、プリデコードユニットおよび命令キャッシュを含むプロセッサを企図する。プリデコードユニットは、プロセッサによって受取られる複数個の命令バイトに対応するプリデコード情報を生成するよう構成される。プリデコード情報は、複数個の命令バイト内の特定の命令バイトに対応する、第1の状態では、特定の命令バイトが命令の境界であることを表示する第1の表示を含む。さらに、プリデコード情報は、特定の命令バイトに対応する、第1の状態では、その特定の命令バイトが境界である命令が制御転送命令であることを表示する制御転送表示を含む。プリデコードユニットに結合されて、命令キャッシュは、複数個の命令バイトおよびプリデコードユニットから受取られるプリデコード情報を記憶するよう構成される。
【0013】
この発明はさらに、記憶装置およびデコーダを含むプリデコードユニットを企図する。記憶装置は、メモリから受取られる複数の命令バイトを記憶するよう構成される。デコーダは、複数個の命令バイトをデコードして、これに対応するプリデコード情報、すなわち、複数個の命令バイト内の各命令の境界を識別する境界表示と複数個の命令バイト内のどの命令が制御転送命令であるかを識別する制御転送表示とを含むプリデコード情報を生成するよう構成される。
【0014】
さらに、この発明は、高速制御転送命令検出のための方法を企図する。複数個の命令バイトをプリデコードして、複数個の命令バイトの各々に対応する制御転送表示と命令境界表示とを生成する。命令境界表示は、複数個の命令バイトの対応する1つが命令の境界であるか否かを表示する。複数個の命令バイトの対応する1つが命令の境界であれば、制御転送表示が、その命令が制御転送命令であるか否かを表示する。命令境界表示および制御転送表示は、複数個の命令バイトをフェッチするとスキャンされ、その中の制御転送命令を識別する。
【0015】
この発明はなおさらに、プロセッサ、メモリおよび入力/出力(I/O)装置を含むコンピュータシステムを企図する。プロセッサは、プロセッサによって受取られる複数個の命令バイトに対応するプリデコード情報を生成するよう構成される。プリデコード情報は、複数個の命令バイト内の特定の命令バイトに対応する第1の表示を含む。第1の表示は、第1の状態では、特定の命令バイトが命令の境界であることを表示する。プリデコード情報はまた、特定の命令バイトに対応する制御転送表示を含む。制御転送表示は、第1の状態では、その特定の命令バイトが境界である命令が制御転送命令であることを表示する。プロセッサに結合されて、メモリは、複数個の命令バイトを記憶しかつプロセッサに複数個の命令バイトを与えるよう構成される。I/O装置は、コンピュータシステムと、I/O装置に結合される別のコンピュータシステムとの間にデータを転送するよう構成される。
【0016】
この発明の他の目的および利点は、以下の詳細な説明を読み、添付の図面を参照すると明らかとなる。
【0017】
この発明は、さまざまな変形および代替の態様を許容するが、その特定の実施例が、図面の例によって示され、ここに詳細に記載される。しかしながら、図面およびそれに関する詳細な説明は、開示される特定の態様にこの発明を限定するものではなく、反対に、前掲のクレームによって定義されるようなこの発明の精神および範囲内にあるすべての変形、等価および代替を含むものである。
【0018】
【詳細な説明】
図1を参照して、スーパースカラプロセッサ10のある実施例のブロック図が示される。他の実施例が可能であり企図される。図1に示される実施例では、プロセッサ10は、プリデコードユニット12と、L1I−キャッシュ14と、L0I−キャッシュ16と、フェッチ/スキャンユニット18と、命令キュー20と、整列ユニット22と、ルックアヘッド/コラプスユニット24と、フューチャファイル26と、リオーダバッファ/レジスタファイル28と、第1の命令窓30Aと、第2の命令窓30Bと、複数個の機能ユニット32A、32B、32Cおよび32Dと、複数個のアドレス生成ユニット34A、34B、34Cおよび34Dと、ロード/ストアユニット36と、L1D−キャッシュ38と、FPU/マルチメディアユニット40と、外部インターフェイスユニット42とを含む。さまざまな文字が後に付された特定の参照番号によってここに示される要素は、参照番号のみを用いて集合的に呼ばれる。たとえば、機能ユニット32A、32B、32Cおよび32Dは、機能ユニット32として集合的に呼ばれる。
【0019】
図1の実施例では、外部インターフェイスユニット42は、プリデコードユニット12、L1D−キャッシュ38、L2インターフェイス44およびバスインターフェイス46に結合される。プリデコードユニット12は、L1I−キャッシュ14にさらに結合される。L1I−キャッシュ14は、L0I−キャッシュ16におよびフェッチ/スキャンユニット18に結合される。フェッチ/スキャンユニット18はまた、L0I−キャッシュ16におよび命令キュー20に結合される。命令キュー20は、整列ユニット22に結合され、これはさらにルックアヘッド/コラプスユニット24に結合される。ルックアヘッド/コラプスユニット24はさらに、フューチャファイル26、リオーダバッファ/レジスタファイル28、ロード/ストアユニット36、第1の命令窓30A、第2の命令窓30BおよびFPU/マルチメディアユニット40に結合される。FPU/マルチメディアユニット40は、ロード/ストアユニット36におよびリオーダバッファ/レジスタファイル28に結合される。ロード/ストアユニット36は、L1D−キャッシュ38に結合される。第1の命令窓30Aは、機能ユニット32A〜32Bにおよびアドレス生成ユニット34A〜34Bに結合される。同様に、第2の命令窓30Bは、機能ユニット32C〜32Dにおよびアドレス生成ユニット34C〜34Dに結合される。L1D−キャッシュ38、機能ユニット32およびアドレス生成ユニット34の各々は、複数個の結果バス48に結合され、これはさらに、ロード/ストアユニット36、第1の命令窓30A、第2の命令窓30B、リオーダバッファ/レジスタファイル28およびフューチャファイル26に結合される。
【0020】
プリデコードユニット12は、外部インターフェイスユニット42によってフェッチされる命令バイトを受取り、これがL1I−キャッシュ14に記憶されるより前にその命令バイトをプリデコードする。プリデコードユニット12によって生成されたプリデコード情報は、同様に、L1I−キャッシュ14内に記憶される。一般的に、プリデコード情報は、命令のフェッチおよび発行中に有用であり得るが、フェッチおよび発行動作中に高速で生成することが困難であり得る命令特徴の識別を支援するよう与えられる。ここでは、「プリデコード」という言葉は、命令をデコードして、命令キャッシュ(たとえばL1I−キャッシュ14および/またはL0I−キャッシュ16)に、デコードされている命令バイトと共に、後に記憶されるプリデコード情報を生成することを指すものとして用いられる。
【0021】
ある実施例では、プロセッサ10は、1命令バイト当り2ビットのプリデコード情報を採用する。これらビットのうち「開始ビット」と呼ばれる1ビットは、命令バイトが命令の先頭バイトであるか否かを表示する。命令バイトの群がフェッチされると、開始ビットの対応する組が、命令バイトの群内の命令間の境界を識別する。したがって、対応する開始ビットをスキャンすることによって、命令バイトの群から同時に複数の命令を選択可能である。開始ビットを用いて各命令の先頭バイトを識別することによって命令境界を定めることができるが、代替的に、終了ビットを用いて、各命令の最終バイトを識別することによって命令境界を定めることも可能である。
【0022】
「制御転送」ビットと呼ばれる、この実施例で用いられる第2のプリデコードビットは、どの命令が分岐命令であるかを識別する。命令の先頭バイトに対応する制御転送ビットが、命令が分岐命令であるかどうかを表示する。命令のその後のバイトに対応する制御転送ビットは、小偏位フィールドを有する相対分岐命令を除いてドントケアである。ある特定の実施例に従うと、小偏位フィールドは、8ビットフィールドである。一般的に、「小偏位フィールド」とは、分岐命令によって生成されるターゲットアドレスよりも少ないビットを有する偏位フィールドのことをいう。小偏位フィールドを有する相対分岐命令については、偏位バイトに対応する制御転送ビットが、以下に記載するように用いられる。
【0023】
命令バイトに対応するプリデコード情報を生成することに加えて、プリデコードユニット12は、この実施例では、相対分岐命令の偏位フィールドを記録して実際にターゲットアドレスを記憶するよう構成される。言換えれば、プリデコードユニット12は、プロセッサ10によって採用される命令セットによって定義されるような相対分岐命令に対応するアドレスに、相対分岐命令の偏位を加算する。結果として得られたターゲットアドレスは、偏位に対する置換として偏位フィールドに符号化され、更新された偏位フィールドは、もともとの偏位フィールドの代わりにL1I−キャッシュ14内に記憶される。ターゲットアドレス生成は、相対ターゲットアドレスを予め計算することによって簡素化され、したがって、分岐予測メカニズムはより効率的に動作可能である。
【0024】
x86命令セットを採用するプロセッサ10のある実施例では、プリデコードユニット12は、8ビットおよび32ビットの偏位フィールドを記録するよう構成される。32ビット偏位フィールドは、ターゲットアドレスの全体を記憶可能である。他方で、8ビット偏位フィールドは符号化される。より特定的には、8ビット偏位フィールドおよび対応する制御転送プリデコードビットは、キャッシュラインオフセット部と相対キャッシュライン部とに分たれる。キャッシュラインオフセット部は、ターゲットアドレスのキャッシュラインオフセット部である。相対キャッシュライン部は、相対分岐命令を記憶するキャッシュラインより上またはそれより下のキャッシュラインの数に関して、ターゲットアドレスによって識別されるキャッシュライン(「ターゲットキャッシュライン」)を定義する。第1のキャッシュラインの各バイトが、第2のキャッシュライン内のバイトが記憶されるアドレスよりも数字的により大きいアドレスに記憶されているとき、第1のキャッシュラインは第2のキャッシュラインよりも上にあるという。反対に、第1のキャッシュライン内の各バイトが、第2のキャッシュライン内のバイトが記憶されるアドレスよりも数字的により小さいアドレスに記憶されているとき、第1のキャッシュラインは第2のキャッシュラインよりも下にあるという。符号化された8ビットの偏位は、分岐命令に対応する+/−128バイトのアドレスであるアドレスを特定する。したがって、8ビット偏位を有する相対分岐命令によって到達され得る下および上のキャッシュライン数は限られている。相対キャッシュライン部は、この限られた組の上および下のキャッシュラインを符号化する。
【0025】
下の表1および表2は、プロセッサ10のある実施例に従うバイトに対応するプリデコード情報の例示の符号化を例示する。
【0026】
【表1】
【0027】
【表2】
【0028】
プリデコードユニット12は、受取った命令バイトおよび対応するプリデコード情報をL1I−キャッシュ14に送り記憶させる。L1I−キャッシュ14は、命令バイトおよびプリデコード情報を記憶する高速キャッシュメモリである。L1I−キャッシュ14は、ダイレクトマップトおよびセットアソシアティブ構成を含む、任意の好適な構成を採用し得る。ある特定の実施例では、L1−Iキャッシュ14は、64バイトのキャッシュラインを採用する、128KBの2ウェイセットアソシアティブキャッシュである。L1I−キャッシュ14は、これに記憶される命令バイトに対応するプリデコード情報のための付加的記憶装置を含む。付加的記憶装置は、命令バイト記憶装置と同様に構成される。ここでは、「キャッシュライン」という言葉は、特定のキャッシュ内の記憶装置の割当のユニットを指すものとして用いる。一般的には、キャッシュライン内の複数バイトが一ユニットとしてキャッシュによって操作される(すなわち割当てられかつ割当解除される)。
【0029】
ある実施例では、L1I−キャッシュ14は、線形にアドレス指定されかつ物理的にタグ付けされる。キャッシュをインデックス付けするために用いられるアドレスビットの少なくとも1つが、物理的アドレスビットにその後に変換される線形アドレスビットである場合、キャッシュは線形にアドレス指定されるという。線形にアドレスされ/物理的にタグ付けされたキャッシュのタグは、インデックス付けするために用いられないビットに加えて各変換されたビットを含む。x86アーキテクチャによって特定されるように、命令は、セグメンテーション変換メカニズムを介して線形アドレスに変換され、ページ変換メカニズムを介して物理的アドレスにさらに変換される論理的アドレスを生成するよう定義される。論理的アドレスと対応する線形アドレスとが等しいような、フラットアドレッシングモードを採用することがますます通常となってきている。プロセッサ10は、フラットアドレッシングモードを想定して構成可能である。したがって、命令を実行することによって生成される、フェッチアドレス、ターゲットアドレスなどは、線形アドレスである。ヒットがL1I−キャッシュ14内で検出されるかどうかを決定するために、フェッチ/スキャンユニット18によってそこに与えられた線形アドレスは、トランスレーションルックアサイドバッファ(TLB)を用いて、インデックス付けされたキャッシュラインから物理的タグに相当する対応する物理的アドレスに変換され、ヒット/ミスを決定する。フラットアドレッシングモードが使用されない場合でも、プロセッサ10はコードを実行可能であるが、論理的アドレスから線形アドレスを生成するためにさらなるクロックサイクルが用いられるだろう。
【0030】
L0I−キャッシュ16もまた、命令バイトを記憶する高速キャッシュメモリである。L1I−キャッシュ14は大きいので、L1I−キャッシュ14のアクセス時間は大きいものであり得る。ある特定の実施例では、L1I−キャッシュ14は、2クロックサイクルアクセス時間を使用する。単一のサイクルフェッチアクセスを可能にするために、L0I−キャッシュ16が採用される。L0I−キャッシュ16は、L1I−キャッシュ14よりも比較的小さく、したがって、より高速なアクセス時間をサポートし得る。ある特定の実施例では、L0I−キャッシュ16は、512バイトのフルアソシアティブキャッシュである。L1I−キャッシュ14と同様に、L0I−キャッシュ16は、命令バイトのキャッシュラインおよび対応するプリデコード情報を記憶するよう構成される(たとえば、512バイトが8個の64バイトキャッシュラインを記憶し、対応するプリデコードデータが付加的記憶装置に記憶される)。ある実施例では、L0I−キャッシュ16は、線形にアドレス指定されかつ線形にタグ付けされ得る。
【0031】
フェッチ/スキャンユニット18は、L0I−キャッシュ16についてのフェッチアドレスおよびL1I−キャッシュ14についてのプリフェッチアドレスを生成するよう構成される。L0I−キャッシュ16からフェッチされる命令は、フェッチ/スキャンユニット18によってスキャンされて、ディスパッチのために命令を識別し、さらには、分岐命令を見つけ、見つけられた分岐命令に対応する分岐予測を形成する。命令スキャン情報および対応する命令バイトは、フェッチ/スキャンユニット18によって命令キュー20に記憶される。加えて、識別された分岐命令および分岐予測を用いて、L0I−キャッシュ16についてのその後のフェッチアドレスを生成する。
【0032】
フェッチ/スキャンユニット18は、プリフェッチされたキャッシュラインがフェッチ/スキャンユニット18によってフェッチされてプロセッサ10にディスパッチされるより前に、L1I−キャッシュ14からL0I−キャッシュ16にキャッシュラインをプリフェッチしようとするプリフェッチアルゴリズムを採用する。任意の好適なプリフェッチアルゴリズムを使用してもよい。ある実施例では、フェッチ/スキャンユニット18は、以下の場合を除いて、特定のクロックサイクル中にL0I−キャッシュ16からフェッチされたキャッシュラインの、次のシーケンシャルキャッシュラインをプリフェッチするよう構成される。すなわち、(i)分岐予測誤りの信号が発生された場合、(ii)L0I−キャッシュミスが検出された場合、または、(iii)L0I−キャッシュ16をミスすると予想されるターゲットアドレスが生成された場合である。ある特定の実施例では、32ビット偏位を採用する相対分岐命令、および、間接ターゲットアドレス生成を採用する分岐命令は、L0I−キャッシュ16をミスすると予想される。(i)の場合には、フェッチ/スキャンユニット18は、訂正されたフェッチアドレスにシーケンシャルなキャッシュラインをプリフェッチする。(ii)および(iii)の場合には、フェッチ/スキャンユニット18は、対応するミスまたはターゲットアドレスをフェッチする。
【0033】
フェッチ/スキャンユニット18は、クロックサイクル中に命令のより大きい「ラン」をフェッチするために、積極的分岐予測メカニズムを採用する。ここでは、命令の「ラン」とは、セット内で特定されるシーケンスで実行されると予測される1つ以上の命令のセットを指すものとして用いられる。たとえば、フェッチ/スキャンユニット18は、L0I−キャッシュ16から24命令バイトのランをフェッチし得る。各ランは、いくつかのセクションに分たれ、これを、フェッチ/スキャンユニット18は並列にスキャンして、分岐命令を識別し、命令キュー20についての命令スキャン情報を生成する。ある実施例に従うと、フェッチ/スキャンユニット18は、大きい命令ランをサポートするために、1クロックサイクル当り最大2分岐命令を予測しようとする。
【0034】
命令キュー20は、フェッチ/スキャンユニット18によって与えられその後にディスパッチされる命令バイトを記憶するよう構成される。命令キュー20は、先入先出(FIFO)バッファとして動作可能である。ある実施例では、命令キュー20は、複数のエントリを記憶するよう構成され、各エントリは、命令のラン、ランの各セクション内の最大5命令を識別するスキャンデータ、および、ランの各セクションに対応するアドレスを含む。加えて、命令キュー20は、最大4連続ランセクション内の最大6命令を選択してこれが整列ユニット22に与えられるよう構成され得る。たとえば、命令キュー20は、2〜3エントリを採用可能である。命令キュー20の例示の実施例は、以下図13に例示される。
【0035】
整列ユニット22は、命令キュー20によって識別された命令を、ルックアヘッド/コラプスユニット24内の一組の発行位置に送るよう構成される。言換えれば、整列ユニット22は、命令キュー20によって与えられたスキャン情報に応答して、命令キュー20によって与えられたランセクションから各命令を形成するバイトを選択する。命令は、プログラム順序で発行位置に与えられる(すなわち、プログラム順序で第1である命令には、第1の発行位置が与えられ、プログラム順序で第2の命令には、第2の発行位置が与えられる、などである)。
【0036】
ルックアヘッド/コラプスユニット24は、整列ユニット22によって与えられた命令をデコードする。ルックアヘッド/コラプスユニット24によって検出されたFPU/マルチメディア命令は、FPU/マルチメディアユニット40に送られる。他の命令は、第1の命令窓30A、第2の命令窓30Bおよび/またはロード/ストアユニット36に送られる。ある実施例では、整列ユニット22によって命令が整列させられた発行位置に基づいて、特定の命令が、第1の命令窓30Aまたは第2の命令窓30Bの一方に送られる。ある特定の実施例に従うと、代替の発行位置からの命令は、代替の命令窓30Aおよび30Bに送られる。たとえば、発行位置0、2および4からの命令は、第1の命令窓30Aに送られるであろうし、発行位置1、3および5からの命令は、第2の命令窓30Bに送られるであろう。メモリ操作を含む命令はまた、ロード/ストアユニット36に送られ、これはL1D−キャッシュ38にアクセスする。
【0037】
加えて、ルックアヘッド/コラプスユニット24は、命令の特定の型についてのルックアヘッドアドレスまたは実行結果を生成しようとする。ルックアヘッドアドレス/結果生成は、x86命令セットを採用する実施例について特に有益であり得る。x86命令セットの性質のために、典型的なコードシーケンスでの命令の多くは、単純転送のバージョンである。この特徴の理由の1つは、x86命令が、その両方がソースオペランドであり、その一方がディスティネーションオペランドである、2つのオペランドを含むことである。したがって、各命令のソースオペランドの一方は、実行結果で上書される。さらに、x86命令セットは、レジスタオペランドを記憶するためにほんの少しのレジスタしか特定しない。したがって、多くの命令は、メモリ内に維持されるスタックへおよびそこからのオペランドの転送である。さらになお、多くの命令依存性は、ESP/EBPレジスタに依存するものであるが、これらのレジスタに対する更新の多くは、先に記憶された値のインクリメントおよびデクリメントである。
【0038】
これらの命令の実行を加速するために、ルックアヘッド/コラプスユニット24は、クロックサイクル中にデコードされる命令の各々についてESPレジスタおよびEBPレジスタのルックアヘッドコピーを生成する。加えて、ルックアヘッド/コラプスユニット24は、各命令によって選択されるレジスタオペランドのためにフューチャファイル26にアクセスする。各レジスタオペランドについて、フューチャファイル26は、ディスティネーションオペランドとしてそのレジスタを有する最新の命令に対応するリオーダバッファ結果キューエントリを識別するタグまたは実行結果のいずれかを記憶することが可能である。
【0039】
ある実施例では、ルックアヘッド/コラプスユニット24は、(i)メモリオペランドを含み、(ii)メモリオペランドのアドレスを形成するために使用されるレジスタオペランドが、フューチャファイル26またはESP/EBPのルックアヘッドコピーから利用可能である各命令ごとに、アドレス計算を実行しようとする。加えて、ルックアヘッド/コラプスユニット24は、(i)メモリオペランドを含まず、(ii)(インクリメントおよびデクリメントを含む)加算/減算操作を特定し、(iii)レジスタオペランドフューチャ26またはESP/EBPのルックアヘッドコピーから利用可能である各命令ごとに、結果計算を実行しようとする。このようにして、命令が命令窓30A〜30Bに送られるより前に多くの単純操作が完了され得る。
【0040】
ルックアヘッド/コラプスユニット24は、ディスパッチされる命令の群間の依存性を検出し、そこで生成されるいずれの実行結果も、その命令結果に依存する命令にまとめてしまう。加えて、ルックアヘッド/コラプスユニット24は、ルックアヘッド実行結果でフューチャファイル26を更新する。ルックアヘッドコラプスユニット24によって完了された命令操作(すなわち、アドレス生成および/または命令結果が生成され、ロード/ストアユニット36またはフューチャファイル26および結果キューが更新される)は、命令窓30A〜30Bにディスパッチされない。
【0041】
ルックアヘッド/コラプスユニット24は、ディスパッチされた各命令ごとに、リオーダバッファ/レジスタファイル28に結果キューエントリを割当てる。ある特定の実施例では、リオーダバッファ/レジスタファイル28は、同時にディスパッチ可能な命令の最大数に対応する実行結果のために十分な記憶装置を有するラインに、実行結果の記憶場所が割当てされかつ割当解除されるよう、ライン指向態様で構成される結果キューを含む。最大数未満の命令がディスパッチされれば、ライン内のある記憶場所は空である。その後にディスパッチされる命令は、次の利用可能なラインを使用し、そのある記憶場所を空のままにしておく。ある実施例では、結果キューは、40ラインを含み、その各々が、同時にディスパッチされる命令に対応する最大6命令結果を記憶し得る。実行結果は、命令キューから順番に、リオーダバッファ/レジスタファイル28内に含まれるレジスタファイルにリタイアされる。加えて、リオーダバッファは、分岐予測誤りを処理し、分岐命令の実行によって生成された訂正されたフェッチアドレスをフェッチ/スキャンユニット18に伝送する。同様に、他の例外を生成する命令は、リオーダバッファ内で処理される。例外を生成する命令の後の命令に対応する結果は、リオーダバッファによって廃棄される。レジスタファイルは、各設計されたレジスタごとに記憶場所を含む。たとえば、x86命令セットは、8個の設計されたレジスタを定義する。そのような実施例についてのレジスタファイルは、8記憶場所を含む。レジスタファイルは、マイクロコードユニットを採用する実施例においてマイクロコードユニットによって一次レジスタとして使用される記憶場所をさらに含んでもよい。フューチャファイル26およびリオーダバッファ/レジスタファイル28のある例示的実施例のさらなる詳細は、以下に図14に例示される。
【0042】
命令がルックアヘッド/コラプスユニット24によってディスパッチされると、フューチャファイル26は、設計されたレジスタの各々の投機的状態を維持する。レジスタディスティネーションオペランドを有する命令がルックアヘッド/コラプスユニット24によってデコードされると、命令に割当てられるリオーダバッファ/レジスタファイル28の結果キュー部内の記憶場所を識別するタグが、そのレジスタに対応するフューチャファイル26の記憶場所に記憶される。対応する実行結果が与えられると、(そのレジスタを更新するその後の命令がまだディスパッチされていないと仮定すると)実行結果は、対応する記憶場所に記憶される。
【0043】
なお、ある実施例では、最大6命令のグループが、命令キュー20から選択され、パイプラインを経てルックアヘッド/コラプスユニット24に一ユニットとして転送される。もし群内の1つ以上の命令がストール条件を発生すれば、群全体がストールする。この規則の例外は、群内のESP更新の数のためにルックアヘッド/コラプスユニット24がスプリットライン条件を発生した場合である。命令のそのような群をここでは、命令の「ライン」と呼ぶ。
【0044】
命令窓30は、ルックアヘッド/コラプスユニット24から命令を受取る。命令窓30は、命令に対応するオペランドが受取られるまで、命令を記憶し、実行のために命令を選択する。一旦、メモリ操作を含む命令のアドレスオペランドが受取られると、命令は、アドレス生成ユニット34の1つに伝送される。アドレス生成ユニット34は、アドレスオペランドからアドレスを生成し、このアドレスをロード/ユニット36に転送する。他方で、一旦、メモリの実行オペランドが受取られると、命令は、機能ユニット32の1つに伝送されて実行される。ある実施例では、各命令窓30A〜30Bは、命令について25記憶場所を含む。各整数窓30A〜30Bは、これに接続されるアドレス生成ユニット34および機能ユニット32内で各クロックサイクルごとに実行されるために、最大2アドレス生成および2機能ユニット操作を選択するよう構成される。ある実施例では、L0I−キャッシュ16からフェッチされた命令は、命令窓30の1つに記憶されるまで順序通りフェッチされた状態を保っており、その時点で命令は飛越し実行可能となる。
【0045】
x86命令セットを採用するプロセッサ10の実施例では、命令は、ロード/ストアユニット36についての暗黙のメモリ操作と、機能ユニット32についての明示的機能操作とを含み得る。メモリオペランドを有さない命令は、メモリ操作を含まず、機能ユニット32によって処理される。ソースメモリオペランドおよびレジスタディスティネーションオペランドを有する命令は、ロード/ストアユニット36によって処理される暗黙のロードメモリ操作と、機能ユニット32によって処理される明示的機能操作とを含む。メモリソース/ディスティネーションオペランドを有する命令は、ロード/ストアユニット36によって処理される暗黙のロードおよびストアメモリ操作と、機能ユニット32によって処理される明示的機能操作とを含む。最後に、明示的機能操作を有していない命令は、ロード/ストアユニット36によって処理される。各メモリ操作によって、アドレス生成は、ルックアヘッド/コラプスユニット24またはアドレス生成ユニット34のいずれかによって処理されるようになる。メモリ操作と命令(すなわち機能操作)とはここでは別個のものとして呼ばれるが、単一の命令から生じ得る。
【0046】
アドレス生成ユニット34は、アドレス生成操作を実行するよう構成され、これによってロード/ストアユニット36におけるメモリ操作のためにアドレスを生成する。生成されたアドレスは、結果バス48を介してロード/ストアユニット36に転送される。機能ユニット32は、整数算術/論理演算を実行しかつ分岐命令を実行するよう構成される。実行結果は、結果バス48を介して、フューチャファイル26、リオーダバッファ/レジスタファイル28および命令窓30A〜30Bに転送される。アドレス生成ユニット34および機能ユニット32は、実行された命令に割当てられた結果キュータグを結果バス48に送って、実行された命令を識別する。このようにして、フューチャファイル26、リオーダバッファ/レジスタファイル28、命令窓30A〜30Bおよびロード/ストアユニット36は、実行結果を、対応する命令と対応付けることが可能である。FPU/マルチメディアユニット40は、浮動小数点命令およびマルチメディア命令を実行するよう構成される。
【0047】
ロード/ストアユニット36は、メモリ操作を実行するためにL1D−キャッシュ38とインターフェイスするよう構成される。メモリ操作とは、プロセッサ10と外部メモリとの間のデータの転送のことである。メモリ操作は、明示的命令であってもよく、または機能ユニット32によって実行されるべき操作をも含む命令の暗黙の一部であってもよい。ロードメモリ操作は、外部メモリからプロセッサ10へのデータの転送を特定し、ストアメモリ操作は、プロセッサ10から外部メモリへのデータの転送を特定する。L1D−キャッシュ38内でメモリ操作についてヒットが検出されれば、メモリ操作は、外部メモリにアクセスすることなしにそこで完了される。ロード/ストアユニット36は、(ルックアヘッドアドレス計算を介して)ルックアヘッド/コラプスユニット24からまたはアドレス生成ユニット34からメモリ操作についてのアドレスを受取り得る。ある実施例では、ロード/ストアユニット36は、L1D−キャッシュ38への1クロックサイクル当り最大3メモリ操作を実行するよう構成される。この実施例では、ロード/ストアユニット36は、D−キャッシュ38にまだアクセスしていない最大30ロード/ストアメモリ操作をバッファするよう構成されてもよい。この実施例はさらに、D−キャッシュ38をミスしたロードメモリ操作をバッファするために96エントリミスバッファと、32エントリストアデータバッファとを含むよう構成されてもよい。ロード/ストアユニット36は、ロードメモリ操作とストアメモリ操作との間のメモリ依存性チェックを行うよう構成される。
【0048】
L1D−キャッシュ38は、データを記憶する高速キャッシュメモリである。セットアソシアティブおよびダイレクトマップト構成を含む、いかなる好適な構成がL1D−キャッシュ38のために使用されてもよい。ある特定の実施例では、L1D−キャッシュ38は、64バイトラインを採用する、128KB2ウェイセットアソシアティブキャッシュである。L1D−キャッシュ38は、たとえば、1ウェイ当り32バンクのキャッシュメモリとして構成されてもよい。加えて、L1D−キャッシュ38は、L1I−キャッシュ14と同様にTLBを採用する、線形にアドレス指定され/物理的にタグ付けされたキャッシュであってもよい。
【0049】
外部インターフェイスユニット42は、キャッシュミスに応答して、命令バイトおよびデータバイトのキャッシュラインをプロセッサ10に転送するよう構成される。命令キャッシュラインは、プリデコードユニット12に送られ、データキャッシュラインは、L1D−キャッシュ38に送られる。加えて、外部インターフェイスユニット42は、廃棄されたキャッシュラインがプロセッサ10に対して変更されたのであれば、L1D−キャッシュ38によって廃棄されたキャッシュラインをメモリに転送するよう構成される。図1に示すとおり、外部インターフェイスユニット42は、L2インターフェイス44を介して外部L2キャッシュにインターフェイスし、バスインターフェイス46を介してコンピュータシステムにもインターフェイスするよう構成される。ある実施例では、バスインターフェイスユニット46は、EV/6バスインターフェイスを含む。
【0050】
図2を参照すると、フェッチ/スキャンユニット18のある実施例のブロック図が示される。他の実施例が可能であり企図される。図2に示すとおり、フェッチ/スキャンユニット18は、プリフェッチ制御ユニット50と、複数個のネクスト選択ブロック52A〜52Cと、命令選択マルチプレクサ(mux)54と、命令スキャナ56と、分岐スキャナ58と、分岐履歴テーブル60と、分岐選択マルチプレクサ62と、リターンスタック64と、間接アドレスキャッシュ66と、フォワードコラプスユニット68とを含む。プリフェッチ制御ユニット50は、L1I−キャッシュ14,L0I−キャッシュ16、間接アドレスキャッシュ66、リターンスタック64、分岐履歴テーブル60、分岐スキャナ58、および、命令選択マルチプレクサ54に結合される。ネクスト選択ブロック52Aは、L1I−キャッシュ14に結合され、ネクスト選択ブロック52B〜52Cは、L0I−キャッシュ16に結合される。各ネクスト選択ブロック52は、命令選択マルチプレクサ54に結合され、これはさらに分岐スキャナ58および命令スキャナ56に結合される。命令スキャナ56は、命令キュー20に結合される。分岐スキャナ58は、分岐履歴テーブル60、リターンスタック64および分岐選択マルチプレクサ62に結合される。分岐選択マルチプレクサ62は、間接アドレスキャッシュ66に結合される。分岐履歴テーブル60および分岐スキャナ58は、フォワードコラプスユニット68に結合され、これは命令キュー20に結合される。
【0051】
プリフェッチ制御ユニット50は、分岐スキャナ58、分岐履歴テーブル60、リターンスタック64および間接アドレスキャッシュ66から、(ターゲットアドレスおよびテイクン/ノットテイクン予測を含む)分岐予測情報を受取る。分岐予測情報に応答して、プリフェッチ制御ユニット50は、L0I−キャッシュ16についてのフェッチアドレスと、L1I−キャッシュ14についてのプリフェッチアドレスとを生成する。ある実施例では、プリフェッチ制御ユニット50は、L0I−キャッシュ16について2つのフェッチアドレスを生成する。第1のフェッチアドレスは、分岐スキャナ58によって識別される第1の分岐命令(もしあれば)に対応するターゲットアドレスとして選択される。第2のフェッチアドレスは、先のクロックサイクルにおいて選択されたフェッチアドレスに対するシーケンシャルアドレス(すなわち命令選択マルチプレクサ54によって選択されたランに対応するフェッチアドレス)である。
【0052】
L0I−キャッシュ14は、2つのフェッチアドレスに対応するキャッシュライン(およびプリデコード情報)と、これらのキャッシュラインの各々に対してシーケンシャルであるキャッシュライン(およびプリデコード情報)とを、ネクスト選択ブロック52B〜52Cに与える。より特定的には、ネクスト選択ブロック52Bは、シーケンシャルアドレスに対応するシーケンシャルキャッシュラインと、シーケンシャルキャッシュラインの次のインクリメンタルキャッシュラインとを受取る。ネクスト選択ブロック52Cは、ターゲットアドレスに対応するターゲットキャッシュラインと、ターゲットキャッシュラインに対してシーケンシャルなキャッシュラインとを受取る。加えて、ネクスト選択ブロック52B〜52Cは、対応するフェッチアドレスのオフセット部を受取る。ネクスト選択ブロック52B〜52Cは各々、対応するフェッチアドレスのオフセット部を含むランセクションに始まって、受取ったキャッシュラインから命令バイトのラン(および対応するプリデコード情報)を選択する。各フェッチアドレスのオフセット部は、キャッシュライン内のどこからでも始まり得るので、選択されたランは、フェッチされたキャッシュラインおよびフェッチされたキャッシュラインに対しシーケンシャルなキャッシュラインの部を含み得る。したがって、フェッチされたキャッシュラインおよびシーケンシャルキャッシュラインはどちらも、ネクスト選択ブロック52B〜52Cによって受取られる。
【0053】
同様に、ネクスト選択ブロック52Aは、L1I−キャッシュ14からプリフェッチされたキャッシュライン(および対応するプリデコード情報)を受取り、そこから命令ランを選択する。1キャッシュラインはL1Iキャッシュ14からプリフェッチされるので、そこから選択されたランは、プリフェッチアドレスのオフセット部がキャッシュラインの終わり近くにあるのであれば、1ラン全体を含まないことがあり得る。なお、L0I−キャッシュ16からのフェッチキャッシュラインは、対応するアドレスがプリフェッチ制御ユニット50によって生成されるのと同じクロックサイクル中に与えられ得るが、プリフェッチキャッシュラインは、L1I−キャッシュ14のより大きいサイズおよびより遅いアクセス時間のために1クロックサイクルだけ遅延されることがある。プリフェッチされたキャッシュラインをネクスト選択ブロック52Aに与えるのに加えて、L1I−キャッシュ14は、プリフェッチされたキャッシュラインをL0I−キャッシュ16に与える。プリフェッチされたキャッシュラインが既に、L0I−キャッシュ16内に記憶されていれば、L0I−キャッシュ16は、プリフェッチされたキャッシュラインを廃棄可能である。しかしながら、プリフェッチされたキャッシュラインがL0I−キャッシュ14内にまだ記憶されていなければ、プリフェッチされたキャッシュラインはL0I−キャッシュ16に記憶される。このようにして、現在のところアクセスされ得るキャッシュラインは、L0I−キャッシュ16に送られ、そこから高速にアクセスされる。ある例示の実施例に従うと、L0I−キャッシュ16は、8エントリのフルアソシアティブキャッシュ構造を含む。フルアソシアティブ構造は、L0I−キャッシュ16内に含まれるキャッシュラインの数が比較的小さいために、採用可能である。他の実施例は、他の編成(たとえばセットアソシアティブまたはダイレクトマップト)を採用可能である。
【0054】
プリフェッチ制御ユニット50は、命令選択マルチプレクサ54を制御することによって分岐予測情報に応答してネクスト選択ブロック52の1つによって与えられる命令ランを選択する。以下により詳細に説明するとおり、プリフェッチ制御ユニット50は、クロックサイクルの初めに、分岐スキャナ58、リターンスタック64および間接アドレスキャッシュ66からターゲットアドレスを、さらには、分岐スキャナ58によって識別される第1の分岐命令の操作コードバイトの少なくとも一部を受取る。プリフェッチ制御ユニット50は、操作コードバイトの一部をデコードして、さまざまなターゲットアドレスソースからL0I−キャッシュ16からフェッチされるべきターゲットアドレスを選択し、選択されたターゲットアドレスをL0I−キャッシュ16に与える。これと並列して、先のクロックサイクル中に選択されたフェッチアドレスに対しシーケンシャルなアドレス(先のクロックサイクルからの分岐予測に依存して、先のクロックサイクルからのシーケンシャルアドレスまたはターゲットアドレスのいずれか)が計算され、L0I−キャッシュ16に与えられる。分岐予測情報(すなわちテイクンまたはノットテイクン)は、クロックサイクルの後ろの方で分岐履歴テーブル60によって与えられる。L0I−キャッシュ16からフェッチされたターゲットアドレスに対応する分岐命令がテイクンであると予測されれば、プリフェッチ制御ユニット50は、ネクスト選択ブロック52Cによって与えられた命令ランを選択する。他方で、分岐命令がノットテイクンであると予測されれば、ネクスト選択ブロック52Bによって選択された命令ランが選択される。予測されたフェッチアドレスが、先のクロックサイクル中にL0I−キャッシュ16をミスし、L1I−キャッシュ14からフェッチされたのであれば、ネクスト選択ブロック52Aによって与えられる命令ランが選択される。加えて、分岐命令が32ビット偏位であることに応答して命令ランがフェッチされたのであれば、または、間接ターゲットアドレス生成またはL0I−キャッシュミスがフェッチされたのであれば、L1I−キャッシュ14からの命令ランが選択される。
【0055】
選択された命令ランは、命令スキャナ56および分岐スキャナ58に与えられる。命令スキャナ56は、選択された命令ランに対応するプリデコード情報をスキャンして、命令ラン内の命令を識別する。より特定的には、ある実施例では、命令スキャナ56は、各ランセクションに対応する開始ビットを並列にスキャンし、各ランセクション内で最大5命令を識別する。識別された命令(ランセクション内でのオフセット)に対するポインタが生成される。ポインタ、命令バイトおよびアドレス(1ランセクション当り1つ)は、命令スキャナ56によって命令キュー20に送られる。もし特定のランセクションが5を超える命令を含めば、その特定のランセクションの後のランセクションに対応する情報は無効とされ、特定のランセクションおよびその後のランセクションは、次のクロックサイクル中に再スキャンされる。
【0056】
分岐スキャナ58は、命令スキャナ56と並列に命令ランをスキャンする。分岐スキャナ58は、命令ランの開始ビットおよび制御転送ビットをスキャンして、命令ラン内の第1の2分岐命令を識別する。上述したとおり、分岐命令は、(開始ビットによって識別される)命令の開始バイトに対応する制御転送ビットがセットされることによって識別される。第1の2分岐命令を位置付けると、分岐スキャナ58は、命令が相対分岐命令であると予想し、分岐命令の開始バイトに続く命令バイトから、対応する符号化されたターゲットアドレスを選択する。x86命令セットを採用する実施例では、9ビットターゲットアドレス(偏位バイトおよび対応する制御転送ビット)が選択され、32ビットターゲットアドレスが同様に選択される。さらに、開始ビットおよび制御転送ビットによって識別される操作コードバイトの少なくとも一部が選択される。ターゲットアドレスおよび操作コードバイトは、プリフェッチ制御ユニット50に送られ、L0I−キャッシュ16からフェッチするためのターゲットアドレスを選択するのに使用される。(各分岐命令を含むランセクションのフェッチアドレスおよびセクション内の分岐命令の位置から決定される)各分岐命令のフェッチアドレスは、分岐履歴テーブル60に送られて、各分岐命令に対応するテイクン/ノットテイクン予測が選択される。さらに、各分岐命令に対応するフェッチアドレスは、分岐選択マルチプレクサ62に送られ、これはさらに、間接アドレスキャッシュ66に送られる。各分岐命令のターゲットアドレスは、フォワードコラプスユニット68に送られる。ある実施例に従うと、分岐スキャナ58は、第1の2分岐命令について各ランセクションを並列にスキャンしてから、スキャン結果を組合せてラン内の第1の2分岐命令を選択するよう構成される。
【0057】
分岐スキャナ58は、1クロックサイクル中にサブルーチンコール命令がスキャンされるかどうかを決定するようさらに構成可能である。分岐スキャナ58は、検出されたサブルーチンコール命令に続く次の命令のフェッチアドレスを、リターンスタック64に転送して、そこに記憶させることが可能である。
【0058】
ある実施例では、3つ以上の分岐命令が1ラン内にある場合、ランは、その後のクロックサイクル中に再びスキャンされて、その後の分岐命令を識別する。
【0059】
識別された分岐命令のフェッチアドレスは、分岐履歴テーブル60に与えられ、各命令ごとにテイクン/ノットテイクン予測を決定する。分岐履歴テーブル60は、分岐命令の、先に検出された挙動に対応する複数個のテイクン/ノットテイクン予測子を含む。最新予測の履歴を維持し、分岐命令に対応するフェッチアドレスの一部でこれらの最新予測の排他的論理和演算を行なうことによって、予測子の1つが選択される。最も新しくない(最も古い)予測がフェッチアドレスのその部内の最上位ビットで排他的論理和演算され、等など、最新予測までフェッチアドレスの部内の最下位ビットで排他的論理和演算される。1クロックサイクル当り2つの予測子が選択されるので、第2の分岐命令に対応する予測子は、第1の分岐命令の予測に依存する(対応するフェッチアドレスの最下位ビットで排他的論理和演算を行なう)。分岐履歴テーブル60は、選択される可能性のある予測子の両方(すなわち第1の分岐命令がノットテイクンであると予測された場合に選択されるであろう予測子、および、第1の分岐命令がテイクンであると予測された場合に選択されるであろう予測子)を選択し、次に、第1の分岐命令について選択された実際の予測に基づいて2つの予測子のうち1つを選択することによって、第2の予測子を与える。
【0060】
分岐履歴テーブル60は、機能ユニット32A〜32Dから分岐命令の実行に関する情報を受取る。実行された分岐命令に対応する最近の予測の履歴および実行された分岐命令のフェッチアドレス、さらに、実行された分岐命令のテイクン/ノットテイクン結果が、更新すべき予測子を選択するために与えられる。分岐履歴テーブル60は、対応する予測子を選択し、テイクン/ノットテイクン結果に基づいて予測子を更新する。ある実施例では、分岐履歴テーブルは、二モードカウンタを記憶する。二モードカウンタは、最小および最大値で飽和する(すなわち、最小値のその後のデクリメントおよび最大値のインクリメントはカウンタ内のいかなる変化も起こさない)飽和カウンタである。分岐命令がテイクンであるたびに、対応するカウンタがインクリメントされ、分岐命令がノットテイクンであるたびに、対応するカウンタがデクリメントされる。カウンタの最上位ビットは、テイクン/ノットテイクン予測を表示する(たとえば、セットされていればテイクンであり、クリアされていればノットテイクンである)。ある実施例では、分岐履歴テーブル60は、64K個の予測子を記憶し、16個の最新予測の履歴を維持する。各クロックサイクルごとに、クロックサイクル中に選択された予測が履歴にシフトされ、最も古い予測が履歴からシフトアウトされる。
【0061】
リターンスタック64は、検出されたサブルーチンコール命令に対応するリターンアドレスを記憶するために用いられる。リターンスタック64は、分岐スキャナ58からサブルーチンコール命令のフェッチアドレスを受取る。(リターンスタック64に与えられたフェッチアドレスから計算された)コール命令に続くバイトのアドレスは、リターンスタック64の最上部に置かれる。リターンスタック64は、リターンスタックの最上部に記憶されたアドレスをプリフェッチ制御ユニット50に与えて、もしリターン命令が分岐スキャナ58およびプリフェッチ制御ユニット50によって検出された場合にはターゲットアドレスとして選択する。このようにして、各リターン命令は、最も最近に検出されたコール命令に対応するアドレスをターゲットアドレスとして受取る。一般的にx86命令セットにおいては、コール命令は、コール命令にシーケンシャルなアドレスがx86アーキテクチャによって定義されるスタック上に置かれることを特定する制御転送命令である。リターン命令は、スタックの最上部からターゲットアドレスを選択する命令である。一般的に、コール命令およびリターン命令は、(それぞれ)コードシーケンスでサブルーチンに出たり入ったりするために用いられる。コール命令に対応するアドレスをリターンスタック64内に置き、リターン命令のターゲットアドレスとしてリターンスタック64の最上部のアドレスを用いることによって、リターン命令のターゲットアドレスは、正確に予測可能である。ある実施例では、リターンスタック64は、16エントリを含み得る。
【0062】
間接アドレスキャッシュ66は、間接分岐命令の先の実行に対応するターゲットアドレスを記憶する。間接分岐命令に対応するフェッチアドレスおよび間接分岐命令の実行に対応するターゲットアドレスは、機能ユニット32A〜32Dによって間接アドレスキャッシュ66に与えられる。間接アドレスキャッシュ66は、対応するフェッチアドレスによってインデックス付けされたターゲットアドレスを記憶する。間接アドレスキャッシュ66は、(間接分岐命令の検出に応答して)分岐選択マルチプレクサ62によって選択されたフェッチアドレスを受取り、もしフェッチアドレスが間接アドレスキャッシュ66内でヒットすれば、対応するターゲットアドレスをプリフェッチ制御ユニット50に与える。ある実施例では、間接アドレスキャッシュ66は、32エントリを含み得る。
【0063】
ある企図された実施例に従うと、間接アドレスキャッシュ66がフェッチアドレスについてミスを検出した場合、間接アドレスキャッシュ66は、与えるべきターゲットアドレスをエントリの1つから選択するよう構成可能である。このようにして、間接分岐命令がデコードされる際、分岐ターゲットでの「推測」が与えられる。間接分岐命令の実行を介してアドレスを待つのではなく、推測からフェッチを行なうことが可能である。代替的に、別の企図される実施例は、間接分岐命令の実行を介して与えられるアドレスを待つ。
【0064】
ある実施例に従うと、プリフェッチ制御ユニット50は、(i)分岐スキャナ58によって識別される第1の分岐命令に対応する第1の符号化されたターゲットアドレスと、(ii)リターンスタック64によって与えられるリターンスタックアドレスと、(iii)シーケンシャルアドレスとから、L0I−キャッシュ16からフェッチするためのターゲットアドレスを選択する。プリフェッチ制御ユニット50は、第1の命令に対応する操作コードのデコードが、命令が相対分岐命令であり得ることを表示すれば、第1の符号化されたターゲットアドレスを選択する。もし、デコードが、命令がリターン命令であり得ることを表示すれば、リターンスタックアドレスが選択される。さもなくば、シーケンシャルアドレスが選択される。間接ターゲットアドレスおよび32ビット相対ターゲットアドレスは、L1I−キャッシュ14からプリフェッチされる。ターゲットアドレスのこれらのタイプはしばしば、ターゲットアドレスがメモリ内の分岐命令の近くにないときに用いられるので、ターゲットアドレスのこれらのタイプは、L0I−キャッシュ16においてヒットする可能性がより低い。加えて、もし、第2の分岐命令がテイクンであると予測され、かつ、第1の分岐命令がノットテイクンであると予測され、または、第1の分岐命令が、命令ラン内の第2の分岐命令を排除する前方分岐であれば、第2の分岐命令に対応する第2のターゲットアドレスが、ある実施例に従う続いて起こるクロックサイクル中にターゲットフェッチアドレスとして使用可能である。
【0065】
なお、符号化されたターゲットアドレスが選択されれば、実際のターゲットアドレスが、L0I−キャッシュ16に与えられ得る。プリフェッチ制御ユニット50は、起こり得る上の/下のターゲットアドレスの各々を予め計算し、符号化されたターゲットアドレスに基づいて正しいアドレスを選択するよう構成可能である。代替的に、プリフェッチ制御ユニット50は、どのL0I−キャッシュ記憶場所が上のおよび下のキャッシュラインを記憶しているかを記録し、タグ比較なしに直接記憶場所を選択することが可能である。
【0066】
フォワードコラプスユニット68は、テイクン/ノットテイクン予測だけでなく各選択された分岐命令の命令ラン内の位置およびターゲットアドレスを受取る。フォワードコラプスユニット68は、受取った予測に基づいて、ラン内のどの命令がキャンセルされるべきかを決定する。もし第1の分岐命令がテイクンであると予測され、後方である(すなわち偏位が負である)とすれば、第1の分岐命令の後に続く命令はすべて、キャンセルされる。もし第1の分岐命令がテイクンであると予測され、前方ではあるが偏位が小さい(たとえば命令ラン内)のであれば、第1の分岐命令とターゲットアドレスとの間にある命令は、キャンセルされる。第2の分岐命令は、第1の分岐命令の予測に従えばラン内になおもあるとすれば、同様に扱われる。ラン内の命令についてのキャンセル表示は、命令キュー20に対してセットされる。
【0067】
プリフェッチ制御ユニット50は、L0I−キャッシュ16内のキャッシュラインを選択して、L1I−キャッシュ14から与えられるキャッシュラインと置換するよう、さらに構成可能である。ある実施例では、プリフェッチ制御ユニット50は、リースト・リーセントリー・ユーズド(LRU)置換アルゴリズムを使用してもよい。
【0068】
図3を参照すると、ルックアヘッド/コラプスユニット24のある実施例のブロック図が示される。他の実施例が可能であり企図される。図3に示すとおり、ルックアヘッド/コラプスユニット24は、複数個のデコードユニット70A〜70Fと、ESP/EBPルックアヘッドユニット72と、ルックアヘッドアドレス/結果計算ユニット74と、ディスパッチ制御ユニット76と、オペランドコラプスユニット78とを含む。デコードユニット70A〜70Fは、整列ユニット22から命令を受取るよう結合される。デコードユニット70A〜70Fは、FPU/マルチメディアユニット40、ESP/EBPルックアヘッドユニット72、フューチャファイル26およびルックアヘッドアドレス/結果計算ユニット74に、デコードされた命令を与えるよう結合される。ESP/EBPルックアヘッドユニット72は、フューチャファイル26と同様に、ルックアヘッドアドレス/結果計算ユニット74に結合される。ルックアヘッドアドレス/結果計算ユニット74はさらに、ロード/ストアユニット36およびディスパッチ制御ユニット76に結合される。ディスパッチユニット76はさらに、オペランドコラプスユニット78、フューチャファイル26、ロード/ストアユニット36およびリオーダバッファ28に結合される。オペランドコラプスユニット78は、命令窓30に結合される。
【0069】
各デコードユニット70A〜70Fは、整列ユニット22が命令を整列させる発行位置を形成する。図面を簡単にするために図3には具体的には示されないが、ルックアヘッド/コラプスユニット24内で完了されなければ、命令はルックアヘッド/コラプスユニット24を介して転送され、命令窓30A〜30Bの1つに送られるが、特定の命令がその発行位置内に残る。
【0070】
デコードユニット70A〜70Fは、FPU/マルチメディアユニット40にFPU/マルチメディア命令を送る。しかしながら、FPU/マルチメディア命令がメモリオペランドを含んでいれば、メモリ操作はまた、ルックアヘッドアドレス/結果計算ユニット74を介する命令に応答して、ロード/ストアユニット36にディスパッチされる。加えて、メモリ操作についてのアドレスがルックアヘッドアドレス/結果計算ユニット74によって生成不可能であれば、アドレス生成操作は、命令窓30A〜30Bを介してアドレス生成ユニット34A〜34Dの1つにディスパッチされる。なおさらに、リオーダバッファ28内のエントリは、FPU/マルチメディア命令に割当てられ、プログラム順序で維持される。一般的に、リオーダバッファ28内のエントリは、デコードユニット70A〜70Fから割当てられ、各命令はそこで受取られる。
【0071】
デコードユニット70A〜70Fの各々は、(i)命令がソースオペランドとしてESPレジスタまたはEBPレジスタを用いるかどうか、(ii)命令がESP/EBPレジスタを変更する(すなわちディスティネーションオペランドとしてESPまたはEBPレジスタを有する)かどうかを決定するようさらに構成される。これらの決定の表示は、デコードユニット70A〜70FによってESP/EBPルックアヘッドユニット72に与えられる。ESP/EBPルックアヘッドユニット72は、各命令についてのルックアヘッド情報を生成し、これはESPまたはEBPレジスタをソースオペランドとして使用する。ルックアヘッド情報は、対応するレジスタの現在のルックアヘッド値に加算されるべき定数と、先の発行位置での命令への依存性の表示とを含み得る。ある実施例では、ESP/EBPルックアヘッドユニット72は、デコードユニット70A〜70Fによって与えられた現在デコードされた命令の組が、(i)2プッシュ操作(定数値によってESPレジスタをデクリメントする)、(ii)2ポップ操作(定数値によってESPレジスタをインクリメントする)、(iii)ESPレジスタへの1転送、(iv)ディスティネーションとしてESPを有する1算術/論理命令、または、(v)ESPを更新する3命令以下を含む限り、ルックアヘッド情報を与えるよう構成される。これらの制限の1つが超えられると、ESP/EBPルックアヘッドユニット72は、次のクロックサイクルまで、制限を超えないもの以降の命令をストールするよう構成される(「スプリットライン」の場合)。同じクロックサイクル中であるがより早い発行位置において、ESPレジスタをインクリメントまたはデクリメントする命令が先行する命令については、ESP/EBPルックアヘッドユニット72は、先行する命令によるESPレジスタに対する変更をすべて組み合わせたものを表示する定数を生成する。ESPまたはEBPレジスタに対する算術演算または転送が先行する命令について、ESP/EBPルックアヘッドユニット72は、転送または算術命令を含む発行位置を識別する値を生成する。
【0072】
ルックアヘッド値は、ルックアヘッドアドレス/結果計算ユニット74によって使用されて、発行位置内の命令に対応するルックアヘッドアドレス(これによって、さもなくばアドレス生成ユニット34〜34Dの1つによって実行されるであろうアドレス生成操作を阻止する)、または、命令に対応するルックアヘッド結果(これによって、パイプラインにおいてより早くにフューチャーファイル26にルックアヘッド状態を与える)のいずれかを生成することが可能である。アドレス生成操作を除去しおよび/または機能ユニット32A〜34Dおよびアドレス生成ユニット34A〜34Dの前にルックアヘッド状態を与えることによって、性能を向上させることが可能である。多くのx86コードシーケンスは、算術/論理演算なしのソースからディスティネーションへの値の転送などの、多数の比較的簡単な操作、または、レジスタオペランドの小さい定数またはインクリメント/デクリメントによる加算/減算などの簡単な算術演算を含む。したがって、機能ユニット32A〜32Dは典型的には、より複雑な算術/論理演算および分岐命令を実行可能であり、アドレス生成ユニット34A〜34Dは典型的には、より複雑なアドレス生成を実行可能である。命令スループットはしたがって、増大可能である。
【0073】
デコードユニット70A〜70Fは、そこでデコードされた命令から即値データフィールドを識別するようさらに構成される。即値データは、デコードユニット70A〜70Fによってルックアヘッドアドレス/結果計算ユニット74に送られる。加えて、デコードユニット70A〜70Fは、命令によって使用されるレジスタオペランドを識別し、レジスタオペランド要求をフューチャーファイル26に送るよう構成される。フューチャーファイル26は、各レジスタオペランドごとに、対応する投機的レジスタ値または結果キュータグを戻す。デコードユニット70はさらに、命令のライン間での依存性チェックを行なって、異なった発行位置内の命令の結果を使用する命令が、その発行位置に対応するタグを受取ることを確実にする。
【0074】
ルックアヘッドアドレス/結果計算ユニット74は、ESP/EBPルックアヘッドユニット72からルックアヘッド値を、デコードユニット70A〜70Fから即値データを、フューチャーファイル26から投機的レジスタ値または結果キュータグを受取る。ルックアヘッドアドレス/結果計算ユニット74は、命令のメモリオペランドに対応するルックアヘッドアドレス、または、命令がメモリオペランドを含まない場合にはルックアヘッド結果のいずれかを生成しようとする。たとえば、(機能ユニット32およびアドレス生成ユニット34に関して)単純転送操作は、アドレス生成がルックアヘッドアドレス/結果計算ユニット74によって実行可能であった場合に、完了可能である。ある実施例では、ルックアヘッドアドレス/結果計算ユニット74は、偏位のみ、偏位に加えてレジスタ、偏位に加えてESP/EBP、および、インデックスまたはベースレジスタがESP/EBPである場合を除いてはスケールインデックスベースアドレッシングモードを用いてアドレスを計算するよう構成される。ロード/ストアユニット36は、メモリ操作を実行し、結果バス48を介してメモリ操作結果を返す。たとえアドレスが、ルックアヘッドアドレス/結果計算ユニット74によってメモリ操作のために生成されなかったとしても、ルックアヘッドアドレス/結果計算ユニット74は、ロード/ストアユニット36に対してメモリ操作および対応する結果キュータグを表示して、メモリ操作のためにロード/ストアユニット36内の記憶装置を割当てる。
【0075】
ソースオペランドをインクリメントまたはデクリメントし、および、ソースオペランドに対して小さい即値を加算/減算し、または、2つのレジスタソースオペランドを加算/減算する単純算術演算はまた、ソースオペランドがフューチャーファイル26から利用可能であれば(すなわち投機的レジスタ値が結果キュータグの代わりに受取られれば)、ルックアヘッドアドレス/結果計算ユニット74によって完了可能である。ルックアヘッドアドレス/結果計算ユニット74によって完了された命令は、完了したものとして表示され、リオーダバッファ28にエントリを割当てられるが、命令窓30にはディスパッチされない。ルックアヘッドアドレス/結果計算ユニット74は、たとえば、ルックアヘッド値、即値データおよび投機的レジスタ値の中から選択するための対応する制御論理とともに各発行位置ごとに加算器を含み得る。なお、この実施例に従えば、単純算術演算はなお、命令窓30に転送され、条件フラグが生成され得る。しかしながら、ルックアヘッドアドレス/結果計算ユニット74において関数結果を生成すると、ルックアヘッド状態が早くに得られ、その後のアドレス生成/命令もまた早くに実行可能となる。
【0076】
ルックアヘッドアドレス/結果計算ユニット74は、フューチャーファイルコピーに加えて、ESP/EBPレジスタの別個のルックアヘッドコピーを維持するよう構成可能である。しかしながら、ESP/EBPに対する更新が検出され、これがルックアヘッドアドレス/結果計算ユニット74によって計算不可能であれば、ESP/EBPの新しいルックアヘッドコピーがフューチャーファイル26から得られるようになるまで(決定不可能な態様でESP/EBPを更新する命令の実行の後)、その後の命令がストールされる可能性がある。
【0077】
ディスパッチ制御ユニット76は、命令の群をディスパッチしてパイプライン流れ制御を与えるかどうかを決定する。ディスパッチ制御ユニット76は、命令窓30から命令数をおよびロード/ストアユニット36からロード/ストア数を受取り、命令の最大可能数が、ディスパッチ制御ユニット76と命令窓30とロード/ストアユニット36との間でパイプライン段階で転送中であると仮定すると、命令がそこに到着したとき、ディスパッチされるべき命令を命令窓30および/またはロード/ストアユニット36内に記憶するのに空間が利用可能であるかどうかを決定する。もしディスパッチ制御ユニット76が、ロード/ストアユニット36またはいずれかの命令窓30において利用可能な空間が不十分であると決定すれば、ディスパッチ制御ユニット76によって受取られる命令数が十分に低い値に減るまで、ディスパッチはストールされる。
【0078】
命令を解放してディスパッチ制御ユニット76を介してディスパッチされると、フューチャーファイル26およびリオーダバッファ28は、投機的に生成されたルックアヘッド結果で更新される。ある実施例では、フューチャーファイル26でのポート数を制限するために、サポートされる非ESP/EBP更新の数は、たとえば、2つに限定され得る。さらに、オペランドコラプスユニット78は、投機的に生成されたルックアヘッド結果をその後の、同時にデコードされた命令であって、先に決定されたライン内依存性によって表示される結果に依存するものにまとめる。このようにして、これらの結果は機能ユニット32A〜32Dからその後に転送されないので、依存命令は、投機的に生成されたルックアヘッド結果を受取る。命令のうちルックアヘッドアドレス/結果計算ユニット74によって完了されないものは次に、これらの命令が整列ユニット32によって整列させられた発行位置に基づいて、命令窓30A〜30Bの1つに伝送される。
【0079】
なお、プロセッサ10のある種の実施例は、マイクロコードルーチンと呼ばれれる複数個のより単純な命令をディスパッチすることによって複雑な命令を実行するために、マイクロコードユニット(図示せず)を採用可能である。デコードユニット70A〜70Fは、どの命令がマイクロコード命令であるかを検出し、かつ、マイクロコード命令をマイクロコードユニットに送るよう構成可能である。たとえば、有効な命令を受取ったデコードユニット70から出力される、直接デコードされた命令がなければ、これは、マイクロコードユニットに、対応する有効命令についての実行を開始するよう表示するものであり得る。さらになお、さまざまな記憶装置が図2および図3に示される(たとえば、図2の装置79A、79Bおよび同様の装置、ならびに、図3の装置79C、79Dおよび同様の装置)。記憶装置は、ラッチ、レジスタ、フリップフロップおよびパイプライン段階を分離するために使用可能であるその他のものを表わす。しかしながら、図2および図3に示す特定のパイプライン段階は、プロセッサ10のある実施例についての好適なパイプライン段階の一実施例にすぎない。他のパイプライン段階が、他の実施例では採用可能である。
【0080】
なお、x86命令セットおよびアーキテクチャは、上記に例として使用され、以下に例として使用可能であるが、いかなる命令セットおよびアーキテクチャを使用してもよい。加えて、偏位は、(ここに例として用いられる8ビットおよび32ビットサイズに加えて)いかなる所望のサイズであってもよい。さらに、キャッシュラインフェッチングを、ここに記載しているかもしれないが、キャッシュラインはセクタであってもよく、所望であればフェッチされるべき所望のバイトの数およびキャッシュラインサイズに基づいて、セクタがフェッチされてもよい。
【0081】
図4を参照すると、プリデコードユニット12のある実施例のブロック図が示される。他の実施例が可能であり企図される。図4に示すとおり、プリデコードユニット12は、入力命令バイトレジスタ80と、フェッチアドレスレジスタ82と、バイトプリデコード84と、制御ユニット86と、ターゲット生成器88と、開始および制御転送ビットレジスタ90と、出力命令バイトレジスタ92と、バイト選択マルチプレクサ94とを含む。入力命令バイトレジスタ80は、バイトプリデコーダ84、制御ユニット86、ターゲット生成器88、バイト選択マルチプレクサ94および外部インタフェースユニット42に結合される。フェッチアドレスレジスタ82は、L1I−キャッシュ14およびターゲット生成器88に結合される。バイトプリデコーダ84は、開始および制御転送ビットレジスタ90と制御ユニット86とに結合される。制御ユニット86は、L1I−キャッシュ14、バイト選択マルチプレクサ94およびターゲット生成器88に結合される。ターゲット生成器88は、バイト選択マルチプレクサ94に結合され、これはさらに出力命令バイトレジスタ92に結合される。出力命令バイトレジスタ92と開始および制御転送ビットレジスタ90とはさらに、L1I−キャッシュ14に結合される。
【0082】
L1I−キャッシュミスを検出すると、プリデコードユニット12は、ミスに対応する線形フェッチアドレスをフェッチアドレスレジスタ82に受取る。並列して、外部インタフェースユニット42は、対応する物理的フェッチアドレスを受取り、フェッチアドレスによって識別されるキャッシュラインについての外部フェッチを開始する。外部インタフェースユニット42は、受取った命令バイトを入力命令バイトレジスタ80に与える。
【0083】
バイトプリデコーダ84は、受取った命令バイトをプリデコードして、対応する開始および制御転送プリデコードビットを生成する。生成されたプリデコード情報は、開始および制御転送ビットレジスタ90に記憶される。命令は、x86命令セットの可変長の性質のために、キャッシュライン内の任意のバイトでの境界を有することが可能であるので、バイトプリデコーダ84は、フェッチアドレスレジスタ82内に記憶されたフェッチアドレスによって特定されるキャッシュライン内のオフセットでプリデコードを開始する。オフセットによって特定されたバイトは、命令の第1のバイトであると予想される(すなわち、対応する開始ビットがセットされる)。バイトプリデコーダ84は、第1のバイトに始まって、各バイトをプリデコードして各命令の開始を決定し、分岐命令を検出する。分岐命令の結果、分岐命令の開始バイトに対応する制御転送ビットがバイトプリデコーダ84によってセットされる。加えて、バイトプリデコーダ84は、分岐命令が相対分岐命令であるかどうかを制御ユニット86に知らせ、キャッシュライン内の分岐命令に続く命令の位置を表示する。ある実施例では、バイトプリデコーダ84は、1クロックあたり4バイトを並列にプリデコードするよう構成される。
【0084】
相対分岐命令が検出されたことを示す、バイトプリデコーダ84からの信号に応答して、制御ユニット86は、ターゲット生成器88に、相対分岐命令に対応するターゲットアドレスを生成させる。偏位バイトは、レジスタ80に記憶された命令バイトから選択される。加えて、フェッチアドレスレジスタ82に記憶されたフェッチアドレスが(分岐命令に続く命令の位置によって置換されるオフセット部とともに)、ターゲット生成器88に与えられる。ターゲット生成器88は、受取ったアドレスおよび偏位バイトを加算して、ターゲットアドレスを生成する。生成されたターゲットアドレスは次に、符号化されて、相対分岐命令の偏位フィールドについての置換として記憶される。加えて、制御ユニット86は、入力命令バイトレジスタ80からの相対分岐命令の対応する偏位バイトの代わりに、出力命令バイトレジスタ92に記憶されるべき、ターゲット生成器88の出力を選択する。他の命令バイトは、これらのバイトがバイトプリデコーダ84によってプリデコードされると、入力命令バイトレジスタ80から選択され、出力命令バイトレジスタ92に記憶される。一旦、バイトプリデコーダ84がキャッシュラインのプリデコードを完了し、各相対分岐命令がその偏位をターゲットアドレスの符号化によって置換されると、制御ユニット86は、L1I−キャッシュ14に対してプリデコード完了信号をアサートし、これが次に、出力命令バイトと対応する開始および制御転送ビットとを記憶する。
【0085】
上述したとおり、小偏位フィールド(たとえば単一の偏位バイト)を有する相対分岐命令については、偏位バイトに加えて、偏位バイトに対応する制御転送ビットを用いて、ターゲットアドレスの符号化を記憶する。ターゲット生成器88は、適切な制御転送ビットでバイトプリデコーダ84に合図し、バイトプリデコーダ84はこれを、開始および制御転送ビットレジスタ90内の対応する位置に記憶する。
【0086】
なお、相対分岐命令が2つのキャッシュラインの間の境界に及ぶ場合(すなわち第1のキャッシュラインが命令の第1の部分を記憶し、これに続くキャッシュラインが残りの部分を記憶する場合)、プリデコードユニット12は、相対分岐命令についてのプリデコーディングを完了するために、続いて起こるキャッシュラインをフェッチするよう構成可能である。さらになお、プリデコードユニット12は、複数の未決キャッシュラインを同時に処理するよう構成可能である。
【0087】
次に図4Aを参照すると、ターゲット生成器88の第1の実施例のブロック図が示される。他の実施例が可能であり企図される。図4Aに示すとおり、ターゲット生成器88は、偏位マルチプレクサ100と、符号拡張ブロック102と、加算器104と、偏位エンコーダ106とを含む。偏位マルチプレクサ100は、入力命令バイトレジスタ80および符号拡張ブロック102に結合され、制御ユニット86から制御信号を受取る。符号拡張ブロック102は、加算器104の入力に結合され、制御ユニット86から制御信号を受取る。加算器104の第2の入力は、制御ユニット86からのキャッシュライン内の位置と連結された、フェッチアドレスレジスタ82からのフェッチアドレス(オフセットビットを除く)を受取るよう結合される。加算器104はさらに、偏位エンコーダ106に結合され、これは制御ユニット86からの制御信号を受取る。偏位エンコーダ106はさらに、バイト選択マルチプレクサ94およびバイトプリデコーダ84に結合される。
【0088】
偏位マルチプレクサ100は、相対分岐命令から偏位バイトを選択するために使用される。この実施例では、偏位は、1または4バイトであり得る。したがって、偏位マルチプレクサ100は、入力バイトレジスタ80から4バイトを選択する。相対分岐命令に1バイト偏位が含まれていれば、偏位は、4バイトの最下位に選択される。残りの3バイトは、0であってもよくまたは、入力命令バイトレジスタ80での先行バイトであってもよい。符号拡張ブロック102は、制御ユニット86からの制御下で、1バイト偏位を4バイト値に符号拡張する。他方で、4バイト偏位は、偏位マルチプレクサ100によって選択され、符号拡張ブロック102によって変更されない。なお、より大きいアドレスがプロセッサ10によって採用可能である。一般的に、偏位は、アドレス内のビットの数まで符号拡張可能である。
【0089】
偏位エンコーダ106は、加算器104によって計算されたターゲットアドレスを受取り、ターゲットアドレスを、偏位バイトに記憶可能なフォーマットに符号化する。この実施例では、4バイト偏位は、ターゲットアドレスの全体を記憶する。したがって、偏位エンコーダ106は、ターゲットアドレスを変更されないままでバイト選択マルチプレクサ94に送り、これは出力命令バイトレジスタ92内に記憶される。加えて、偏位バイトに対応する制御転送ビットは、用いられない。1バイト偏位については、ターゲットアドレスが符号化される。より特定的には、偏位バイトの一部を用いて、ターゲットキャッシュライン内のターゲットアドレスのオフセットを記憶する(たとえば、この実施例では、64バイトオフセットを記憶するためには6ビットである)。偏位バイトの残りの部および対応する制御転送ビットは、フェッチアドレスレジスタ82に記憶されたフェッチアドレスによって識別されるキャッシュラインより上または下のキャッシュラインの数としてターゲットキャッシュラインを表示する値で符号化される。したがって偏位エンコーダ106は、フェッチアドレスレジスタ82からフェッチアドレスを受取るよう結合される。偏位エンコーダ106は、フェッチアドレスをターゲットアドレスと比較して、その間のキャッシュラインの数だけでなくその方向を決定する。符号化を生成すると、偏位エンコーダ106は、出力命令バイトレジスタ92に記憶するために、変更された偏位バイトをバイト選択マルチプレクサ94に伝送し、さらに、偏位バイトに対応する制御転送ビットについての値をバイトプリデコーダ84に伝送する。
【0090】
小偏位フィールドについてのターゲットアドレスを計算するために加算器104を採用する代替例として、偏位エンコーダ106は、偏位フィールドの値およびキャッシュライン内の分岐命令の位置を調べることによって、符号化されたターゲットアドレス(上下値およびキャッシュラインオフセット)を直接生成することが可能である。
【0091】
次に図5を参照すると、x86命令セットに従う8ビット偏位を有する例示の相対分岐命令110を例示する図が示される。相対分岐命令110は、2バイト、すなわち命令の第1のバイトでもある操作コードバイト112と、偏位バイト114とを含む。操作コードバイト112は、命令110が相対分岐命令であり、命令が8ビット偏位であることを特定する。偏位バイト114は、ターゲットアドレスの符号化で更新されている。符号化は、「CLオフセット」とラベル付けされたキャッシュラインオフセット部(これは現在の実施例では6ビットを含むが、対応する命令キャッシュラインサイズに好適な任意の数のビットを含むことが可能である)と、偏位バイト114に対応する制御転送ビット内の「LI2」および偏位バイト114内の「LI1 LI0」とラベル付けされた相対キャッシュライン部とを含む。
【0092】
図5は、また、命令110に対応する開始および制御転送ビットを例示する。各バイトについての開始ビットは、ビットの値を表示するボックスとともに図5においては「S」とラベル付けされ、制御転送ビットは、ビットの値を表示するボックスとともに「C」とレベル付けされる。したがって、操作コードバイト112に対応する開始ビットは、操作コードバイト112が命令の開始であることを表示するようセットされ、操作コードバイト112に対応する制御転送ビットもまた、操作コードバイト112で始まる命令が制御転送命令であることを示すようセットされる。他方で、偏位バイト114は命令の開始ではないので、偏位バイト114に対応する開始ビットはクリアである。偏位バイト114に対応する制御転送ビットは、符号化されたターゲットアドレスの相対キャッシュライン部の一部を記憶するために用いられる。
【0093】
次に図6を参照すると、x86命令セットに従う32ビット偏位を有する例示の相対分岐命令120が示される。命令120は、2バイトからなる操作コードフィールド122と、4バイトからなる偏位フィールド124とを含む。図5と同様に、図6は、命令120での各バイトごとの開始および制御転送ビットを例示する。したがって、2開始ビットおよび2制御転送ビットが、操作コードフィールド122について例示され、1開始ビットおよび制御転送ビットが、偏位フィールド124内の各バイトごとに例示される。
【0094】
操作コードフィールド122に対応する第1の開始ビット(すなわち、操作コードフィールド122の第1のバイトに対応する開始ビット)がセットされ、操作コードフィールド122の第1のバイトが命令の開始であることを表示する。操作コードフィールド122に対応する第1の制御転送ビットもまたセットされ、命令120が制御転送命令であることを表示する。操作コードフィールド122内の第2のバイトは命令の開始ではないので、操作コードフィールド122に対応する第2の開始ビットはクリアである。第2の操作コードバイトに対応する制御転送ビットは、ドントケアである(「x」で表示される)。
【0095】
偏位フィールド124は、命令120に対応するターゲットアドレスの全体を含むのに十分大きいので、偏位バイトに対応する制御転送バイトもまた、ドントケアである。偏位バイトに対応する各開始ビットはクリアであって、これらのバイトが命令の開始でないことを表示する。
【0096】
図7を参照すると、x86命令セットからの例示の組の命令130の図が示され、プロセッサ10のある実施例に従う開始ビットおよび制御転送ビットの使用をさらに例示する。図5および図6と同様に、命令の組130内の各バイトは、対応する開始ビットおよび制御転送ビットとともに例示される。
【0097】
命令の組130内の第1の命令は、ALレジスタの内容への1バイトの即値フィールドの加算を特定し、その結果をALレジスタに記憶する加算命令である。加算命令は、2バイトの命令であって、第1のバイトは操作コードバイトであり、第2のバイトは1バイトの即値フィールドである。したがって、操作コードバイトは、セット開始ビットでマークされ、命令の開始を表示する。対応する制御転送ビットはクリアであって、加算命令が分岐命令でないことを示す。即値バイトは命令の開始ではないので即値バイトに対応する開始ビットはクリアであり、制御転送ビットはドントケアである。
【0098】
加算命令に続くのは、単一バイト命令(EAXレジスタのインクリメント)である。バイトは命令の開始であるので、命令に対応する開始ビットはセットされる。インクリメントは分岐命令ではないので、制御転送ビットはクリアである。
【0099】
最後に、ALレジスタの内容への1バイト即値フィールドの加算を特定する第2の加算命令が、インクリメント命令に続いて示される。加算命令の操作コードに対応する開始ビットはセットされ、制御転送ビットはクリアである。加算命令に続くインクリメント命令は、連続するバイトが、単一バイトが命令の開始境界でもあり終了境界でもある場合にはセットされる開始ビットを有する可能性があることを示す。
【0100】
図8を参照すると、x86命令セットとともに用いられる、分岐スキャナ58のある実施例のブロック図が示される。他の実施例が可能であり企図される。図8の実施例では、分岐スキャナ58は、スキャンブロック140と、セクションターゲットマルチプレクサ142A〜142Dと、ランターゲットマルチプレクサ144A〜144Dとを含む。スキャンブロック140は、命令選択マルチプレクサ54を介してネクスト選択ブロック52からランセクションに対応する開始および制御転送ビットを受取るよう結合される。分岐スキャナ58はさらに、スキャンブロック140と同様の付加的スキャンブロックを含み、選択されたランの残りのランセクションに対応する開始および制御転送ビットをスキャンする。スキャンブロック140は、セクションターゲットマルチプレクサ142A〜142Dに結合されて、そこへの選択制御を与える。加えて、スキャンブロック140(および他のランセクションのための同様のスキャンブロック)は、ランターゲットマルチプレクサ144A〜144Dに対して選択制御を与える。セクションターゲットマルチプレクサ142A〜142Bの各々は、スキャンブロック140によってスキャンされたランセクションに対応する命令バイトおよび、対応する制御転送ビットを受取るよう結合される。セクションターゲットマルチプレクサ142C〜142Dの各々は、同様に、ランセクションに対応する命令バイトを受取るよう結合されるが、対応する制御転送ビットは受取らない可能性がある。セクションターゲットマルチプレクサ142A〜142Dの各々は、図8に示すとおり、ランターゲットマルチプレクサ144A〜144Dのそれぞれ1つに結合される。ランターゲットマルチプレクサ144Aおよび144Bの出力は、プリフェッチ制御ユニット50および分岐履歴テーブル60に結合される。ランターゲットマルチプレクサ144Cおよび144Dの出力は、プリフェッチ制御ユニット50に結合される。
【0101】
スキャンブロック140は、ランセクション内の第1の2分岐命令の位置を定めるために、そこで受取られた開始および制御転送ビットをスキャンするよう構成される。第1の分岐命令がランセクション内で識別されると、スキャンブロック140は、開始ビットおよび制御転送ビットの両方がセットされているバイトである、操作コードバイトと、第1の分岐命令が8ビット相対偏位を含む場合に符号化されたターゲットアドレスを集合的に形成する、直後に続くバイトおよび直後に続くバイトに対応する制御転送ビットとを選択するよう、セクションターゲットマルチプレクサ142Aを向ける。同様に、第2の分岐命令がランセクション内で識別されれば、スキャンブロック140は、第2の分岐命令の操作コードバイトと、直後に続くバイトおよび直後に続くバイトに対応する制御転送ビットとを選択するよう、セクションターゲットマルチプレクサ142Bを向ける。このようにして、8ビット偏位を有する第1の2相対分岐命令に対応する操作コードバイトおよびターゲットアドレスが選択される。加えて、ランセクション内の各分岐命令の位置は、スキャンブロック140によって識別される。
【0102】
スキャンブロック140は、第1の分岐命令を検出することに応答してセクションターゲットマルチプレクサ142Cを制御するようさらに構成される。より特定的には、スキャンブロック140は、第1の分岐命令の開始バイトに続く第2のバイトで始まる(すなわち、キャッシュライン内の第1の分岐命令の開始バイトの2バイト後のバイトで始まる)連続する4命令バイトを選択する。もし第1の分岐命令が32ビット相対偏位を含めば、これらの連続命令バイトは符号化されたターゲットアドレスである。同様に、スキャンブロック140は、第2の分岐命令の開始バイトに続く第2のバイトで始まる連続する4つの開始バイトを選択するよう、セクションターゲットマルチプレクサ142Dを制御する。このようにして、32ビット偏位を有する第1の2相対分岐命令に対応するターゲットアドレスが選択される。プリフェッチ制御ユニット50は、(i)セクションターゲットマルチプレクサ142Aによって選択されたターゲットアドレス、(ii)セクションターゲットマルチプレクサ142Cによって選択されたターゲットアドレス、または(iii)リターンスタック64または間接アドレスキャッシュ66からのターゲットアドレスのいずれかが第1の分岐命令に対応するかどうかを決定するよう構成される。同様に、プリフェッチ制御ユニット50は、(i)セクションターゲットマルチプレクサ142Bによって選択されたターゲットアドレス、(ii)セクションターゲットマルチプレクサ142Dによって選択されたターゲットアドレス、または(iii)リターンスタック64または間接アドレスキャッシュ66からのターゲットアドレスのいずれかが第2の分岐命令に対応するかどうかを決定するよう構成される。
【0103】
スキャンブロック140は、ランの他のセクションについての同様のスキャンブロックと連係して、ラン内の第1の2分岐命令に対応するターゲット情報を選択するようランターゲットマルチプレクサ144A〜144Dを制御する。したがって、ランターゲットマルチプレクサ144Aは、ラン内の第1の分岐命令のターゲットアドレス(すなわち直後に続くバイトおよび対応する制御転送ビット)、操作コードおよび位置を選択する。同様に、ランターゲットマルチプレクサ144Bは、ラン内の第2の分岐命令のターゲットアドレス、操作コードおよび位置を選択する。ランターゲットマルチプレクサ144C〜144Dは、それぞれ、第1および第2の分岐命令に対応する32ビットターゲットアドレスを選択する。
【0104】
図9を参照すると、プリフェッチ制御ユニット50のある実施例のブロック図が示される。他の実施例が可能であり企図される。図9に示すとおり、プリフェッチ制御ユニット50は、デコーダ150と、フェッチアドレスマルチプレクサ152と、インクリメンタ154と、L1プリフェッチ制御ユニット156とを含む。デコーダ150は、分岐スキャナ58からラン内の第1の分岐命令に対応する第1の分岐操作コードを受取るよう結合され、予測誤りリダイレクト表示および対応する訂正されたフェッチアドレスを受取るようリオーダバッファ28に結合される。加えて、デコーダ150は、フェッチアドレスマルチプレクサ152およびL1プリフェッチ制御ユニット156に結合される。フェッチアドレスマルチプレクサ152は、ランターゲットマルチプレクサ144Aによって選択されるとおり、ラン内の第1の分岐命令に対応する第1のターゲットアドレスを受取るよう結合される。第2の分岐命令アドレスに対応する第2のターゲットアドレスもまた、1クロックサイクル遅れてフェッチアドレスマルチプレクサ152に与えられる。加えて、フェッチアドレスマルチプレクサ152は、リターンスタック64によって与えられるリターンアドレス、予測誤りがリダイレクトされるとリオーダバッファ28によって与えられる訂正されたフェッチアドレス、および、(インクリメンタ154によって生成される)先のクロックサイクル中にフェッチされたアドレスに対しシーケンシャルなアドレスを受取るよう構成される。フェッチアドレスマルチプレクサ152は、L0I−キャッシュ16およびL1プリフェッチ制御ユニット156にターゲットフェッチアドレスを与えるよう結合される。L1プリフェッチ制御ユニット156はさらに、ミス表示を受取るようL0I−キャッシュ16に、予測された間接ターゲットアドレスを受取るよう間接アドレスキャッシュ66に、相対分岐命令に対応する32ビットターゲットアドレスを受取るよう分岐スキャナ58に、分岐予測誤りアドレスを受取るようリオーダバッファ28に、および、L1プリフェッチアドレスを与えるようL1I−キャッシュ14に結合される。プリフェッチ制御ユニット50は、レジスタ158を介してL0I−キャッシュ16にシーケンシャルフェッチアドレスを与える。
【0105】
デコーダ150は、L0I−キャッシュ16についてターゲットフェッチアドレスを選択するために、分岐スキャナ58からの第1の識別された分岐命令に対応する操作コードをデコードするよう構成される。できる限り迅速にターゲットフェッチアドレスを与えるために、デコーダ150は、分岐スキャナ58から受取られた操作コードバイトの一部のみをデコードする。より特定的には、x86命令セットでは、デコーダ150は、セット開始および制御転送ビットによって識別される操作コードバイトの4上位ビットをデコードして、分岐スキャナ58からの第1のターゲットアドレス、リターンスタック64からのリターンアドレスおよびシーケンシャルアドレスの1つを選択することが可能である。以下により詳細に記載される図10は、デコーダ150のある実施例に対応する真理値表である。操作コードバイトのビットのサブセットのみがデコードされるので、より少ない論理レベルを採用して、フェッチアドレスマルチプレクサ152に対する選択制御を生成し、これによって迅速なターゲットアドレス選択を可能にすることが可能である。デコードに応答して選択されたターゲットアドレスが正しくなければ、フェッチされた命令は廃棄可能であり、正しいフェッチアドレスがその後のクロックサイクル中に生成され得る。
【0106】
ラン内の第1の分岐命令に対応する分岐予測は、フェッチアドレスが選択されるクロックサイクル中のあとの方まで利用可能でないため、デコーダ150は、ターゲットフェッチアドレスとして第2の分岐ターゲットアドレスを選択しようとしない。もし第1の分岐命令がノットテイクンであると予測されれば、分岐履歴テーブル60を介して、第2の分岐命令が分岐履歴テーブル60によってテイクンであると予測された場合には、第2の識別された分岐命令に対応する第2のターゲットアドレス(もしあれば)が、その後のクロックサイクル中にフェッチ可能である。また、第1の分岐がテイクンであると予測されるが、第1のターゲットアドレスが第1の分岐と同じラン内にあれば、シーケンシャルアドレスが選択される。もし第1の分岐がラン内で第2の分岐を超えて分岐しないのであれば、第2のターゲットアドレスが、その後のクロックサイクル中に選択される。同様に、もし第1の分岐命令が間接ターゲットアドレスまたは32ビット相対ターゲットアドレスを使用すれば、フェッチアドレスマルチプレクサ152がアドレスを選択可能であり、フェッチされた命令は、実際の分岐ターゲットでの命令を支持して廃棄可能である。
【0107】
L1プリフェッチ制御ユニット156は、L1I−キャッシュ14のためのL1プリフェッチアドレスを生成する。L1プリフェッチアドレスに対応するキャッシュラインは、L0I−キャッシュ16に運ばれて記憶される。L1プリフェッチ制御ユニット156は、いくつかのソースの1つからプリフェッチアドレスを選択する。分岐予測誤りがリオーダバッファ28によって合図された場合には、リオーダバッファ28によって与えられる修正されたフェッチアドレスにシーケンシャルなアドレスが選択される。これは、他のアドレスソースは予測誤りされた経路内の命令に基づいているからである。分岐予測誤りが合図されず、L0フェッチアドレスミスが検出されれば、L1プリフェッチ制御ユニット156は、L0フェッチアドレスミスを選択してプリフェッチする。ミスが検出されなければ、L1プリフェッチ制御ユニット156は、デコーダ150からの信号に応答して、間接アドレスキャッシュ66によって与えられた間接アドレスまたは分岐スキャナ58からの32ビット分岐ターゲットアドレスのいずれかを選択する。信号がデコーダ150から受取られなければ、L1プリフェッチ制御ユニット156は、フェッチアドレス152によって選択されたターゲットアドレスにシーケンシャルなキャッシュラインをプリフェッチする。
【0108】
間接アドレスおよび32ビットターゲットアドレスは、ターゲット命令シーケンスが分岐命令近くのメモリ内に空間的に位置していないときにこれらのタイプのターゲットアドレスは典型的にはプログラマによって選択されるので、L0I−キャッシュ16からフェッチされない。L0I−キャッシュ16は、コードシーケンスが実行されたことに応答して、最も最近にアクセスされた少数のキャッシュラインを記憶するので、ターゲット命令シーケンスがL0I−キャッシュ16に記憶される可能性は統計的により低いであろう。
【0109】
インクリメンタ154は、分岐履歴テーブル60から受取られた分岐予測情報に基づいて、ディスパッチのために選択されたランに対応するフェッチアドレスをインクリメントするよう構成される。プリフェッチ制御ユニット50は、L0I−キャッシュヒット情報および分岐予測情報に基づいて、命令選択マルチプレクサ54を介してランを選択するための論理(図示せず)を含む。この論理によってまた、インクリメンタ154は、選択されたランに対応するフェッチアドレス(レジスタ158から与えられるシーケンシャルフェッチアドレスまたはフェッチアドレスマルチプレクサ152から与えられるターゲットフェッチアドレスのいずれか)をインクリメントするようになる。したがって、その後のクロックサイクルについてのシーケンシャルフェッチアドレスは、生成されてレジスタ158に記憶される。
【0110】
図10を参照すると、x86命令セットを採用するプロセッサ10のある実施例において採用されるデコーダ150のある実施例に対応する真理値表160が示される。他の実施例が可能であり企図される。図10に示すとおり、(16進法における)7、Eまたは0に等しい最上位4ビットを有する操作コードによって、第1のターゲットアドレスがフェッチアドレスマルチプレクサ152によって選択される。Cに等しい最上位4ビットを有する操作コードによって、リターンスタック64からのリターンアドレスが選択され、Fに等しい最上位4ビットを有する操作コードによって、シーケンシャルアドレスが選択されるようになる。
【0111】
7に等しい最上位4ビットを有する分岐命令操作コードは、8ビット相対偏位を有する条件付ジャンプ命令である。したがって、7に等しい最上位4ビットを有する、セット開始ビットおよびセット制御転送ビットに対応する操作コードが、ランターゲットマルチプレクサ144Aから与えられるターゲットアドレスを正しく選択する。Eに等しい最上位4ビットを有する分岐命令操作コードは、8ビット相対偏位を伴う条件付ジャンプ命令、または、8ビット相対偏位または32ビット相対偏位のいずれかを有するコールもしくは無条件ジャンプ命令であり得る。これらの場合には、デコーダ150は、ランターゲットマルチプレクサ144Aによって与えられる第1のターゲットアドレスを選択し、もしさらなるデコードが32ビット偏位フィールドが分岐命令内に含まれると表示すれば、選択に応答してフェッチされた命令は廃棄され、分岐スキャナ58から32ビットフェッチアドレスを受取るL1プリフェッチ制御ユニット156を介して正しいフェッチアドレスがL1I−キャッシュ14からプリフェッチされる。最後に、0に等しい最上位4ビットを有する分岐命令操作コードが、32ビット相対偏位を特定する。この実施例では、デコーダ150は、32ビットターゲットアドレスを選択してL0I−キャッシュ16からフェッチすることができないので、デコーダ150は、分岐スキャナ58から与えられる第1のターゲットアドレスを選択し、分岐スキャナ58からの32ビット分岐ターゲットアドレスを選択してL1I−キャッシュ14からプリフェッチするよう、L1プリフェッチ制御ユニット156に合図する。
【0112】
Cに等しい最上位4ビットを有する分岐命令操作コードは、リターン命令であり、したがって、リターンアドレススタック64によって与えられるリターンアドレスは、予測されたフェッチアドレスを与える。他方で、Fに等しい最上位4ビットを有する分岐命令操作コードは、間接ターゲットアドレス生成を用いるコールまたは無条件ジャンプ命令である。間接アドレスはフェッチアドレスマルチプレクサ152に与えられず、したがって、シーケンシャルアドレスのデフォルト選択が実行される。シーケンシャルアドレスに応答してフェッチされた命令は廃棄され、L1I−キャッシュ14からプリフェッチされた命令が、その後のクロックサイクル中に与えられる。
【0113】
真理値表160が示すとおり、開始ビットおよび制御転送ビットによって識別される命令バイトの一部のみのプリデコードを用いて、L0I−キャッシュ16についてのターゲットフェッチアドレスを選択することが可能である。したがって、プリフェッチ制御ユニット50および分岐スキャナ58は、高周波の単一サイクルL0I−キャッシュアクセスをサポート可能である。
【0114】
図10Aを参照すると、デコーダ150のある実施例の操作を例示するフローチャートが示される。他の実施例が可能であり企図される。図10Aでは直列の一連のステップとして示されるが、例示のステップは、いかなる好適な順番で実行されてもよく、デコーダ150内で採用される組合せ論理によって並列に実行されてもよい。
【0115】
デコーダ150は、分岐予測誤りの信号がリオーダバッファ28によって発生されているかどうかを決定する(決定ブロック192)。予測誤りの信号が発生された場合、リオーダバッファ28から受取られる訂正されたフェッチアドレスが選択される(ステップ193)。他方で、予測誤りの信号が発生されなかった場合、デコーダ150は、分岐スキャナ58によって先のクロックサイクル中に識別された第2の分岐命令に対応する第2のターゲットアドレスがフェッチされるべきかどうかを決定する(決定ブロック194)。第1の分岐命令がノットテイクンであると予測され、第2の分岐命令がテイクンであると予測された場合に、第2のターゲットアドレスがフェッチされ得る。加えて、第1の分岐命令がテイクンであると予測されるが、これは第2の分岐命令をキャンセルしない小さな前方偏位であり、かつ、第2の分岐命令がテイクンであると予測された場合には、第2のターゲットアドレスがフェッチされ得る。第2のターゲットアドレスがフェッチされるべきであれば、デコーダ150は、第2のターゲットアドレスを選択する(これは、先のクロックサイクル中に受取られたものであり、フェッチアドレスマルチプレクサ152に到着するのに1クロックサイクル遅延している−ステップ195)。最後に、第2のターゲットアドレスがフェッチされるべきでなければ、デコーダ150は、上述した真理値表160に従って動作する(ステップ196)。
【0116】
図11を参照すると、L1プリフェッチ制御ユニット156のある実施例の動作を例示するフローチャートが示される。他の実施例が可能であり企図される。図11では直列の一連のステップとして示されるが、例示されるステップは、いかなる好適な順番で実行されてもよく、L1プリフェッチ制御ユニット156で採用される組合せ論理によって並列に実行されてもよいことが理解される。
【0117】
分岐予測誤りリダイレクトがL1プリフェッチ制御ユニット156によって受取られた場合(決定ブロック170)、訂正されたフェッチアドレスに対応するキャッシュラインに対しシーケンシャルなキャッシュラインが、L1I−キャッシュ14からプリフェッチされる(ステップ172)。他方、分岐予測誤りリダイレクトが受取られなかった場合、L1プリフェッチ制御ユニット156は、L0I−キャッシュミスが生じたかどうかを決定する(決定ブロック174)。L0I−キャッシュミスが検出された場合、L0I−キャッシュ16をミスしたアドレスは、L1I−キャッシュ14からプリフェッチされる(ステップ176)。L0I−キャッシュミスがなければ、L1プリフェッチ制御ユニット156は、間接ターゲットアドレスまたは32ビット相対ターゲットアドレスのいずれかがデコーダ150によって検出されたかどうかを決定する(決定ブロック178)。もしそのような信号が受取られれば、間接アドレスキャッシュ66から受取られた間接アドレスまたは分岐スキャナ58から受取られた32ビット相対ターゲットアドレスが、L1I−キャッシュ14からプリフェッチされる(ステップ180)。最後に、間接ターゲットアドレスまたは32ビット相対ターゲットアドレスの信号が発生されなければ、L1プリフェッチ制御ユニット156は、現在のターゲットフェッチアドレスの次のシーケンシャルキャッシュラインをプリフェッチする(ステップ182)。
【0118】
図12を参照すると、命令ラン内で識別される第1および第2の分岐命令に対応するさまざまなターゲットアドレスおよび分岐予測についてのプロセッサ10のある実施例に対応するフェッチ結果を例示する、表190が示される。他の実施例が可能であり企図される。表190では、小前方ターゲットとは、現在のラン内に存在するターゲットのことである。反対に、大前方ターゲットとは、現在のラン内に存在しないターゲットのことである。ターゲットアドレスが分岐命令のアドレスよりも数的により大きいときに、ターゲットは前方であると呼び、ターゲットアドレスが分岐命令のアドレスよりも数的により小さければ後方であると呼ぶ。テイクン/ノットテイクン予測は、分岐履歴テーブル60から得られる。注に示すとおり、第2の分岐予測に対応する結果は、ある実施例に従うと1クロックサイクル分遅延され得る。したがって、プロセッサ10は、第2の分岐予測についてノットテイクンであると予想可能であり(すなわちシーケンシャルアドレスをフェッチする)、第2の分岐予測がテイクンであると示せば、フェッチは、その後のクロックサイクル中に訂正され得る。
【0119】
表190における結果列は、いくつかの結果を列挙する。表190の結果列で使用される場合の「スカッシュ」という言葉は、どの命令が、図2に示すフォワードコラプスユニット68からの信号によって命令キュー20から削除されるかを示す。加えて、第1および/または第2の分岐命令に応答してフェッチされるべきターゲットまたはシーケンシャルアドレスは、ターゲットまたはシーケンシャルアドレスがL0I−キャッシュ16(L0表記)またL1I−キャッシュ14(L1表記)のうちどれに運ばれるかについて括弧付表記を伴って示される。
【0120】
図13を参照すると、命令キュー20のある例示の実施例のブロック図が示される。他の実施例が可能であり企図される。図13の実施例では、命令キュー20は、ラン記憶装置300A〜300Bと、スキャンデータ記憶装置302A〜302Bと、アドレス記憶装置304A〜304Bとを含む。加えて、命令キュー20は、マルチプレクサ306および制御ユニット308を含む。命令のランは、ランバス310を介してフェッチ/スキャンユニット18から命令キュー20に与えられる。対応するスキャンデータは、スキャンデータバス312に与えられる。対応するアドレス(1ランセクションあたり1)は、ランアドレスバス314に与えられる。命令キュー20は、命令バイトバス316を介して整列ユニット22に、選択された命令バイトの組を、命令ポインタバス318を介して命令バイト内の命令に対するポインタを、アドレスバス320を介して、選択された命令バイトの組を含むランセクションについてのアドレスを与える。ランバス310は、ラン記憶装置300A〜300Bに結合され、スキャンデータバス312は、スキャンデータ記憶装置302A〜302Bに結合され、アドレス記憶装置304A〜304Bは、ランアドレスバス314に結合される。記憶装置300A〜300B、302A〜302Bおよび304A〜304Bは、マルチプレクサ306に結合され、これはさらにバス316〜320に結合される。制御ユニット308は、マルチプレクサ306およびスキャンデータ記憶装置302A〜302Bに結合される。
【0121】
フェッチ/スキャンユニット18、より特定的には、図2の実施例に従う命令スキャナ56は、バス310〜314を介して命令キュー20に命令のランおよび関連する情報を与える。制御ユニット308は、命令ランを含む命令バイトに対してラン記憶装置300A〜300Bの1つを、関連する情報に対して、対応するスキャンデータ記憶装置302A〜302Bおよびアドレス記憶装置304A〜304Bを割当てる。スキャンデータは、(i)ランセクションション内のオフセットとして開始バイトおよび終了バイト、同様に(ii)命令が存在しているランセクションを識別する命令ポインタを含む。ある特定の実施例に従うと、最大5命令が、8バイトランセクション内で識別可能であり、スキャンデータ記憶装置302内に記憶される合計最大15命令ポインタに対し、1ラン内に最大3ランセクションがある。加えて、アドレス記憶装置304は、各ランセクションに対応するアドレスを記憶する。
【0122】
制御ユニット308は、スキャンデータ記憶装置302A〜302B内の命令ポインタを調べて、連続するランセクションの組内の命令を識別して、これを整列ユニット22にディスパッチする。ある特定の実施例では、最大6命令が、最大4つの連続するランセクション内で識別される。ランセクションは、ラン記憶装置300Aまたは300Bの1つに記憶可能であり、ラン記憶装置300A〜300Bの一方から選択可能なランセクションもあれば、ラン記憶装置300A〜300Bの他方から選択可能なランセクションもある。第1のランセクションが、投機的プログラム順序で第2のランセクションの次であれば、第1のランセクションは、第2のランセクションに連続する。なお、図面には簡素化するため図13においては単一のマルチプレクサとして例示されるが、マルチプレクサ306は、いかなる好適な並列または縦続接続された組のマルチプレクサによって実現されてもよい。
【0123】
制御ユニット308は、マルチプレクサ306に1組の選択信号を与えて、選択された命令を含む1組のランセクション、および、選択された命令に対応する命令ポインタを選択する。加えて、選択されたランセクションの各々についてのアドレスが選択される。ランセクションは、命令バイトバス316に与えられ、対応する命令ポインタおよびアドレスは、命令ポインタバス318およびアドレスバス320にそれぞれ与えられる。
【0124】
図14を参照すると、フューチャファイル26およびリオーダバッファ/レジスタファイル28のある実施例のブロック図がより詳細に示される。他の実施例が可能であり企図される。図14の実施例では、フューチャファイル26は、レジスタファイル28Aおよびリオーダバッファ28Bとともに示される。フューチャファイル26は、レジスタファイル28Aと、結果バス48と、1組のソースオペランドアドレスバス330と、1組のソースオペランドバス332と、1組のルックアヘッド更新バス334とに結合される。リオーダバッファ28Bは、レジスタファイル28Aと、結果バス48と、ディスパッチされた命令バス336とに結合される。
【0125】
命令がルックアヘッド/コラプスユニット24内のデコードユニット70によってデコードされると、命令のレジスタソースオペランドは、ソースオペランドアドレスバス330を介してフューチャファイル26に送られる。フューチャファイル26は、最新の値を生成する命令が実行された場合には、各レジスタの最新投機的値を、または、最新の値を生成する命令を識別するリオーダバッファタグのいずれかを、ソースオペランドバス332に与える。加えて、ソースオペランドの1つは、ディスティネーションオペランドであるよう表示され得る。フューチャファイル26は、ディスティネーションオペランドに応答して、対応する命令に割当てられるべきリオーダバッファタグで、ディスティネーションレジスタに対応する場所を更新する。
【0126】
フューチャファイル26は加えて、ルックアヘッド/コラプスユニット24から更新を受取る。ルックアヘッドアドレス/結果計算ユニット74によって生成されたルックアヘッド結果は、ルックアヘッド更新バス334を介してフューチャファイル26に与えられる。ルックアヘッドアドレス/結果計算ユニット74からルックアヘッド更新を与えることによって、投機的実行結果は、より迅速にフューチャファイル26内に記憶されることが可能であり、これによって、その後に実行する命令に対してより迅速に利用可能となり得る。これによって、その後の命令が、ルックアヘッド結果計算を獲得する可能性がより高くなり得る。ある実施例では、フューチャファイル26上のポート数を低減するために、ルックアヘッド更新の数は制限される(たとえば、2更新が許容可能である)。ESP更新は、ルックアヘッド/コラプスユニット24によって既に取られているので、これらの更新はフューチャファイル26に記憶される必要がない。さらに、あらゆる発行位置がフューチャファイル26についての投機的更新を有するとは限らない。したがって、平均的には、フューチャファイル26において必要とされる投機的更新はより少ないものであり得、したがって、更新の数を制限することによって性能が低下することはないであろう。
【0127】
命令結果は、結果バス48上に与えられる。フューチャファイル26は、結果を受取り、(これもまた結果バス48上に与えられる)対応するリオーダバッファタグを、そこに記憶されたリオーダバッファタグと比較して、命令結果が設計されたレジスタの1つに対する最新の投機的更新を含んでいるかどうかを決定する。もしリオーダバッファタグがフューチャファイル内のリオーダバッファタグの1つに一致すれば、結果は、フューチャファイル26によって取られ、対応する設計レジスタと関連付けられる。
【0128】
フューチャファイル26は、例外/分岐予測誤りが検出されリタイアされたときに、そこに記憶された設計されたレジスタのコピーを受取るようレジスタファイル28Aに結合される。リオーダバッファ28Bは、結果バス48に与えられる結果から例外および分岐予測誤りを検出することが可能であり、レジスタファイル28Aにリタイアされる、設計されたレジスタのコピーがフューチャファイル26にコピーされるべきかどうかを、レジスタファイル28Aおよびフューチャファイル26に合図することが可能である。たとえば、例外または分岐予測誤りを有する命令をリタイアすると、コピーが実行され得る。このようにして、フューチャファイル26は、正しくない投機的実行から復旧可能である。
【0129】
リオーダバッファ28Bは、ディスパッチされた命令バス336を介してルックアヘッド/コラプスユニット24からディスパッチされた命令を受取る。ディスパッチされた命令は、命令がディスパッチされるべきであるとディスパッチ制御ユニット76によって決定されると、リオーダバッファ28Bに与えられ得る。加えて、リオーダバッファ28Bは、結果バス48を介して実行結果を受取り、プログラム順序で、レジスタファイル28Aに結果をリタイアする。
【0130】
図15を参照すると、バスブリッジ202を介してさまざまなシステム構成要素に結合されるプロセッサ10を含むコンピュータシステム200のある実施例のブロック図が示される。他の実施例が可能であり企図される。図示のシステムでは、主メモリ204は、メモリバス206を介してバスブリッジ202に結合され、グラフィックスコントローラ208は、AGPバス210を介してバスブリッジ202に結合される。最後に、複数個のPCIデバイス212A〜212Bは、PCIバス214を介してバスブリッジ202に結合される。2次バスブリッジ216をさらに設けて、EISA/ISAバス220を介して1つ以上のEISAまたはISAデバイス218への電気的インターフェイスを可能にしてもよい。プロセッサ10は、バスインターフェイス46を介してバスブリッジ202に結合される。
【0131】
バスブリッジ202は、プロセッサ10と主メモリ204とグラフィックコントローラ208とPCIバス214につながれるデバイスとの間にインタフェースを与える。操作が、バスブリッジ202に接続されるデバイスの1つから受取られると、バスブリッジ202が、操作のターゲットを識別する(たとえば、特定のデバイスまたは、PCIバス214の場合には、ターゲットはPCIバス214上にある)。バスブリッジ202は、ターゲットされたデバイスに操作を送る。バスブリッジ202は一般的に、ソースデバイスまたはバスによって用いられるプロトコルからターゲットデバイスまたはバスによって用いられるプロトコルに操作を変換する。
【0132】
PCIバス214に対してISA/EISAバスへのインターフェイスを与えることに加えて、2次バスブリッジ216はさらに、所望の如く、付加的な機能を組込む。たとえば、ある実施例では、2次バスブリッジ216は、PCIバス214の所有権を調停するためにマスタPCIアービタ(図示せず)を含む。所望のごとく、外部からまたは2次バスブリッジ216に統合される、入力/出力コントローラ(図示せず)が、コンピュータシステム200に含まれて、キーボードおよびマウス222についてのならびにさまざまな並列および直列ポートについての操作上のサポートを与えてもよい。他の実施例では、外部キャッシュユニット(図示せず)が、プロセッサ10とバスブリッジ202との間のバスインターフェイス46にさらに結合されてもよい。代替的に、外部キャッシュは、バスブリッジ202に結合されてもよく、外部キャッシュについてのキャッシュ制御論理が、バスブリッジ202に統合されてもよい。
【0133】
主メモリ204は、アプリケーションプログラムが記憶され、ここからプロセッサ10が主に実行するメモリである。好適な主メモリ204は、DRAM(ダイナミックランダムアクセスメモリ)および、好ましくは、複数個のSDRAM(シンクロナスDRAM)のバンクを含む。
【0134】
PCIデバイス212A〜212Bは、たとえば、ネットワークインターフェイスカード、ビデオアクセラレータ、オーディオカード、ハードまたはフロッピーディスクドライブまたはドライブコントローラ、SCSI(スモールコンピュータシステムインターフェイス)アダプタおよび電話機能カードなどの、さまざまな周辺デバイスを例示するものである。同様に、ISAデバイス218は、モデム、サウンドカード、GPIBまたはフィールドバスインターフェイスカードなどのさまざまなデータ収集カードなどの、さまざまなタイプの周辺デバイスを例示するものである。
【0135】
グラフィックスコントローラ208は、ディスプレイ226上のテキストおよび画像のレンダリングを制御するよう設けられる。グラフィックコントローラ208は、一般的に公知である典型的なグラフィックアクセラレータを実現するものであって、主メモリ204からおよびそこへ効果的にシフト可能である3次元データ構造をレンダリングすることが可能である。したがって、グラフィックコントローラ208は、これがバスブリッジ202においてターゲットインターフェイスへのアクセスを要求し受取ることによって、主メモリ204へのアクセスを獲得することが可能であるという点で、AGPバス210のマスタであり得る。専用グラフィックバスは、主メモリ204からのデータの高速な取出を可能とする。ある種の操作では、グラフィックコントローラ208は、AGPバス210を介してPCIコントロールトランザクションを生成するようさらに構成可能である。バスブリッジ202のAGPインターフェイスはしたがって、AGPプロトコルトランザクションと、PCIプロトコルターゲットおよびイニシエータトランザクションとの両方をサポートする機能を含み得る。ディスプレイ226は、画像またはテキストを与えることができるような任意の電子ディスプレイである。好適なディスプレイ226は、陰極線管(「CRT」)、液晶ディスプレイ(「LCD」)などを含む。
【0136】
なお、上記の記載では、AGPバス、PCIバスおよびISAバスまたはEISAバスが例として用いられたが、所望のごとく、いかなるバスアーキテクチャが代わりに用いられてもよい。なおさらに、コンピュータシステム200は、付加的プロセッサ(たとえば、コンピュータシステム200の任意の構成要素として示されるプロセッサ10a)を含むマルチプロセシングコンピュータシステムであってもよい。プロセッサ10aは、プロセッサ10と同様であり得る。より特定的には、プロセッサ10aは、プロセッサ10の同一のコピーであってもよい。プロセッサ10aは、(図15に示すとおり)プロセッサ10とバスインターフェイス46を共有してもよいし、または、独立バスを介してバスブリッジ202に接続されてもよい。
【0137】
上記の開示に従うと、プロセッサは、命令キャッシュからの命令バイトの長いランをフェッチしてワイド発行スーパースカラコアに多数の命令を与えるものとして、示された。ある実施例では、プロセッサは、1クロックサイクル当り最大2分岐命令を予測し、1クロックサイクル当り命令ラン内の最大15命令を識別することが可能である。命令は、ワイド発行スーパースカラコアに与えられて、多数の命令を同時に発行する能力を最大限に活用することが可能であるという効果を奏する。
【0138】
上記の開示を完全に理解すると、さまざまな変形および変更が当業者には明らかとなるであろう。前掲のクレームは、そのようなすべての変形および変更を包含するものとして解釈されるべきである。
【図面の簡単な説明】
【図1】 スーパースカラプロセッサのある実施例のブロック図である。
【図2】 図1に示すフェッチ/スキャンユニットのある実施例のブロック図である。
【図3】 図1に示すルックアヘッド/コラプスユニットのある実施例のブロック図である。
【図4】 図1に示すプリデコードユニットのある実施例のブロック図である。
【図4A】 図4に示すターゲット生成器のある実施例のブロック図である。
【図5】 図1に示すプロセッサのある実施例に従う8ビットオフセットを有する制御転送命令および対応するプリデコード情報を例示する図である。
【図6】 図1に示すプロセッサのある実施例に従う32ビットオフセットを有する制御転送命令および対応するプリデコード情報を例示する図である。
【図7】 図1に示すプロセッサのある実施例に従ういくつかの非制御転送命令および対応するプリデコード情報を例示する図である。
【図8】 図2に示す分岐スキャナのある実施例のブロック図である。
【図9】 図2に示すプリフェッチ制御ユニットのある実施例のブロック図である。
【図10】 図9に示すデコーダのある実施例のための真理値表である。
【図10A】 図9に示すデコーダのある実施例の動作を例示するフローチャートである。
【図11】 図9に示すL1プリフェッチ制御ユニットのある実施例の動作を例示するフローチャートである。
【図12】 最大2分岐命令が1クロックサイクル当り予測されるような、図1に示すプロセッサのある実施例についての命令フェッチおよびディスパッチ結果を例示する表である。
【図13】 図1に例示される命令キューのある実施例のブロック図である。
【図14】 図1に示すフューチャファイル、レジスタファイルおよびリオーダバッファのある実施例のブロック図である。
【図15】 図1に示すプロセッサを含むコンピュータシステムのある実施例のブロック図である。
Claims (11)
- プロセッサ(10)であって、
前記プロセッサ(10)によって受取られる複数個の命令バイトに対応するプリデコード情報を生成するよう構成されるプリデコードユニット(12)を含み、前記プリデコード情報は、前記複数個の命令バイト内の特定の命令バイトに対応する第1の表示を含み、前記第1の表示は、第1の状態では、前記特定の命令バイトが命令の境界であることを示し、さらに、
前記プリデコードユニット(12)に結合される命令キャッシュ(14)を含み、前記命令キャッシュ(14)は、前記プリデコードユニット(12)から受取られる前記プリデコード情報および前記複数個の命令バイトを記憶するよう構成され、
前記プリデコード情報は、前記特定の命令バイトに対応する制御転送表示を含み、前記制御転送表示は、第1の状態では、前記特定の命令バイトが前記境界である前記命令が制御転送命令であることを示し、前記制御転送表示は、もし前記特定の命令バイトに対応する前記第1の表示が、前記特定の命令バイトが前記命令の前記境界でないことを示す第2の状態にあれば、前記命令の代替の特徴を示すことを特徴とする、プロセッサ。 - 前記制御転送表示が前記第1の状態にあることと連係して前記第1の表示が前記第1の状態にある場合にのみ前記命令は前記制御転送命令である、請求項1に記載のプロセッサ。
- 前記第1の表示が前記第1の状態にあることは、前記特定の命令バイトが命令の開始であることを示す、請求項1または請求項2に記載のプロセッサ。
- 前記プリデコード情報は、複数個の前記第1の表示および複数個の前記制御転送表示を含む、請求項1、2または3に記載のプロセッサ。
- 前記複数個の第1の表示の数および前記制御転送表示の対応する数は、前記複数個の命令バイトの数に等しい、請求項4に記載のプロセッサ。
- 前記制御転送表示の特定の1つは、前記第1の表示の対応する1つが前記第1の状態になければ前記制御転送命令を示すものではない、請求項4または請求項5に記載のプロセッサ。
- コンピュータシステム(200)であって、
請求項1から6のいずれかに記載のプロセッサ(10)と、
前記プロセッサ(10)に結合されるメモリ(204)とを含み、前記メモリ(204)は、前記複数個の命令バイトを記憶しかつ前記プロセッサ(10)に前記複数個の命令バイトを与えるよう構成され、さらに、
入力/出力(I/O)デバイスであって、前記コンピュータシステム(200)と前記I/Oデバイスに結合される別のコンピュータシステムとの間でデータを転送するよう構成される入力/出力デバイスを含む、コンピュータシステム。 - 第2のプロセッサ(10a)であって、前記第2のプロセッサ(10a)によって受取られる前記複数個の命令バイトに対応する前記プリデコード情報を生成するよう構成される第2のプロセッサをさらに含む、請求項7に記載のコンピュータシステム。
- 高速制御転送命令検出のための方法であって、前記方法は、
複数個の命令バイトをプリデコードして、前記複数個の命令バイトの各々に対応する制御転送表示および命令境界表示を生成するステップを含み、前記命令境界表示は、前記複数個の命令バイトの対応する1つが命令の境界であるかどうかを示し、もし前記複数個の命令バイトの前記対応する1つが前記命令の前記境界であれば、前記制御転送表示が前記命令が制御転送命令であるかどうかを示し、前記複数個の命令バイトの特定の1つに対応する前記制御転送表示は、もし前記複数個の命令バイトの前記特定の1つに対応する前記命令境界表示が、前記複数個の命令バイトの前記特定の1つが前記境界でないことを示すならば、前記複数個の命令バイトの前記特定の1つを含む前記命令の代替の特徴を示し、さらに、
前記複数個の命令バイトをフェッチすると前記命令境界表示および前記制御転送表示をスキャンしてそこの制御転送命令を識別するステップを含む、方法。 - 前記境界は前記命令の開始である、請求項9に記載の方法。
- 前記複数個の命令バイトを前記フェッチするより前に前記プリデコード情報および前記複数個の命令バイトを命令キャッシュ内に記憶するステップをさらに含む、請求項10に記載の方法。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/065,294 | 1998-04-23 | ||
US09/065,294 US6134649A (en) | 1997-11-17 | 1998-04-23 | Control transfer indication in predecode which identifies control transfer instruction and an alternate feature of an instruction |
PCT/US1998/022050 WO1999054811A1 (en) | 1998-04-23 | 1998-10-19 | Processor employing control transfer bit in predecode for identifying control transfer instructions |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2002512397A JP2002512397A (ja) | 2002-04-23 |
JP3838417B2 true JP3838417B2 (ja) | 2006-10-25 |
Family
ID=22061703
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2000545093A Expired - Fee Related JP3838417B2 (ja) | 1998-04-23 | 1998-10-19 | 制御転送命令を識別するためにプリデコードに制御転送ビットを採用するプロセッサ |
Country Status (5)
Country | Link |
---|---|
EP (1) | EP1073949B1 (ja) |
JP (1) | JP3838417B2 (ja) |
KR (1) | KR100572038B1 (ja) |
DE (1) | DE69805104T2 (ja) |
WO (1) | WO1999054811A1 (ja) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10990405B2 (en) | 2019-02-19 | 2021-04-27 | International Business Machines Corporation | Call/return stack branch target predictor to multiple next sequential instruction addresses |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5337415A (en) * | 1992-12-04 | 1994-08-09 | Hewlett-Packard Company | Predecoding instructions for supercalar dependency indicating simultaneous execution for increased operating frequency |
EP0651324B1 (en) * | 1993-10-29 | 2006-03-22 | Advanced Micro Devices, Inc. | Speculative instruction queue for variable byte length instructions |
US5640526A (en) * | 1994-12-21 | 1997-06-17 | International Business Machines Corporation | Superscaler instruction pipeline having boundary indentification logic for variable length instructions |
-
1998
- 1998-10-19 JP JP2000545093A patent/JP3838417B2/ja not_active Expired - Fee Related
- 1998-10-19 KR KR1020007011778A patent/KR100572038B1/ko not_active IP Right Cessation
- 1998-10-19 EP EP98953704A patent/EP1073949B1/en not_active Expired - Lifetime
- 1998-10-19 DE DE69805104T patent/DE69805104T2/de not_active Expired - Lifetime
- 1998-10-19 WO PCT/US1998/022050 patent/WO1999054811A1/en active IP Right Grant
Also Published As
Publication number | Publication date |
---|---|
KR100572038B1 (ko) | 2006-04-18 |
EP1073949B1 (en) | 2002-04-24 |
KR20010042953A (ko) | 2001-05-25 |
DE69805104D1 (de) | 2002-05-29 |
JP2002512397A (ja) | 2002-04-23 |
DE69805104T2 (de) | 2002-12-05 |
EP1073949A1 (en) | 2001-02-07 |
WO1999054811A1 (en) | 1999-10-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6112293A (en) | Processor configured to generate lookahead results from operand collapse unit and for inhibiting receipt/execution of the first instruction based on the lookahead result | |
JP3977015B2 (ja) | リネームタグのスワッピングにより転送を行なうレジスタリネーミング | |
US6199154B1 (en) | Selecting cache to fetch in multi-level cache system based on fetch address source and pre-fetching additional data to the cache for future access | |
US6256728B1 (en) | Processor configured to selectively cancel instructions from its pipeline responsive to a predicted-taken short forward branch instruction | |
US6061786A (en) | Processor configured to select a next fetch address by partially decoding a byte of a control transfer instruction | |
US6041405A (en) | Instruction length prediction using an instruction length pattern detector | |
US6279106B1 (en) | Method for reducing branch target storage by calculating direct branch targets on the fly | |
US6125441A (en) | Predicting a sequence of variable instruction lengths from previously identified length pattern indexed by an instruction fetch address | |
US6167506A (en) | Replacing displacement in control transfer instruction with encoding indicative of target address, including offset and target cache line location | |
US6275927B2 (en) | Compressing variable-length instruction prefix bytes | |
JP2003515214A (ja) | 計算を狭いオペランドで実施するための方法と装置 | |
US6212621B1 (en) | Method and system using tagged instructions to allow out-of-program-order instruction decoding | |
US6460116B1 (en) | Using separate caches for variable and generated fixed-length instructions | |
US6240503B1 (en) | Cumulative lookahead to eliminate chained dependencies | |
US6134649A (en) | Control transfer indication in predecode which identifies control transfer instruction and an alternate feature of an instruction | |
US6253309B1 (en) | Forcing regularity into a CISC instruction set by padding instructions | |
US6347369B1 (en) | Method and circuit for single cycle multiple branch history table access | |
JP3838417B2 (ja) | 制御転送命令を識別するためにプリデコードに制御転送ビットを採用するプロセッサ | |
US6219784B1 (en) | Processor with N adders for parallel target addresses calculation | |
US6957322B1 (en) | Efficient microcode entry access from sequentially addressed portion via non-sequentially addressed portion |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20050906 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20060704 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20060711 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20060726 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100811 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100811 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110811 Year of fee payment: 5 |
|
LAPS | Cancellation because of no payment of annual fees | ||
S111 | Request for change of ownership or part of ownership |
Free format text: JAPANESE INTERMEDIATE CODE: R313113 |
|
R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |