(57)【特許請求の範囲】
【請求項１】
プログラム中の分岐命令および結果の分岐ターゲット命令の実行によって生じる時間損失を低減するプロセッサ装置であって、
前記プロセッサ装置による実行のためにメモリ内の非順次記憶場所からフェッチされた命令ブロックのグループを受け取って格納する命令キャッシュ（Ｉキャッシュ）と、
前記命令が前記プログラムの前の実行中またはコンパイル中に分岐履歴を入手したときに前記プログラム内でフェッチするためにアドレス指定されている命令の直後の複数の分岐命令の分岐結果を予測する分岐命令予測ユニット（予測ユニット）と、
前記Ｉキャッシュに格納された命令ブロックの実行履歴シーケンスを記録するＦＨＴ項目を含むフェッチ履歴テーブル（ＦＨＴ）と、
前記ＦＨＴ項目のうちの１つのＦＨＴ項目の制御下で前記命令ブロックを前記Ｉキャッシュから実行要素に出力し、前記実行要素による実行のために前記記録された履歴シーケンスで前記命令ブロックを供給するゲートと、
前記プログラムの実行中に前記予測ユニットへの命令アドレスの入力に応答して、前記予測ユニットによって提供される分岐結果予測ベクトルと、
前記分岐結果予測ベクトルの少なくとも一部と一致する分岐結果フィールドを含む有効ＦＨＴ項目を選択するＦＨＴ項目選択および始動コントロールと、
前記ＦＨＴ項目選択および始動コントロールに応答して、前記ＦＨＴ項目に記録された前記履歴シーケンスで前記Ｉキャッシュから命令を受け取る命令順序づけバッファとをさらに含む、プロセッサ装置。
【請求項２】
前記ＦＨＴ項目内の前記履歴シーケンスで示されたすべてのブロックが前記命令順序づけバッファに出力された時点を判断して前記プログラムの現行フェッチ・サイクルを終了させるフェッチ・サイクル完了コントロールと、
前記プロセッサ装置の次のフェッチ・サイクルを開始するための次の予測を行うために前記ＦＨＴ項目の前記履歴シーケンスによって示された最後の分岐命令のターゲット・アドレスを受け取る前記予測ユニットとをさらに含む、請求項１に記載のＦＨＴを使用するプロセッサ装置。
【請求項３】
前記Ｉキャッシュに格納されたブロックのそれぞれのグループに関連づけられ、前記グループ内の前記ブロックの実行の特定の履歴シーケンスを示す前記ＦＨＴ内の各ＦＨＴ項目をさらに含む、請求項２に記載のＦＨＴを使用するプロセッサ装置。
【請求項４】
前記Ｉキャッシュに格納されたブロックのそれぞれのグループに関連づけられた前記ＦＨＴ内の複数のＦＨＴ項目のセットと、
前記それぞれのグループ内の前記ブロックの実行の異なる履歴シーケンスを示す前記セット内の各ＦＨＴ項目とをさらに含む、請求項３に記載のＦＨＴを使用するプロセッサ装置。
【請求項５】
前記グループの前記ブロックが前記Ｉキャッシュに格納されるときにグループ内の前記ブロックの実行のシーケンスを記録する前記セット内の第１のＦＨＴ項目と、
ブロックの前記グループが前記Ｉキャッシュに書き込まれた後で行われる前記プログラム中の前記ブロックの実行の異なる履歴シーケンスを記録する前記グループ内の他の各ＦＨＴ項目とをさらに含む、請求項４に記載のＦＨＴを使用するプロセッサ装置。
【請求項６】
前記ＦＨＴ項目内の前記履歴シーケンスを記録するために各ＦＨＴ項目内に設けられたブロック・シーケンス・フィールドをさらに含む、請求項１に記載のＦＨＴを使用するプロセッサ装置。
【請求項７】
前記Ｉキャッシュ内に構成され、各セクタが、前記プログラムの全部または一部を含むメモリまたはバッファから受け取ったシーケンスで命令を格納する固定数の記憶位置を含むセクタを含み、
各セクタが前記プログラム内の命令の基本ブロックの全部または一部を記憶する容量を有し、各基本ブロックが、前記Ｉキャッシュに格納されるときにセクタ内の先頭記憶場所から始まり、前記基本ブロックが同じセクタ内または別のセクタ内の記憶場所で終わり、前記Ｉキャッシュ内に格納されている基本ブロックが１つまたは複数のセクタ内の任意の数の命令位置を占有し、そのうち、各基本ブロックがセクタの少なくとも最初の命令位置を占有し、それによって前記Ｉキャッシュに格納された各基本ブロックがセクタの所定の側に位置合わせされる各セクタと、
セクタ内の各未占有命令位置に格納されるノー・オペレーション・コード（ｎｏｐ）であって、それによって前記Ｉキャッシュが位置合わせ命令キャッシュ（ＡＩＣ）として構成されるノー・オペレーション・コード（ｎｏｐ）とをさらに含む、請求項１に記載のＦＨＴを使用するプロセッサ装置。
【請求項８】
複数の行として構成された前記Ｉキャッシュであって、各行が複数の前記セクタを含み、各セクタに前記プログラムの１つの基本ブロックのみの命令が格納され、前記Ｉキャッシュに格納された各基本ブロックがセクタ内のセクタ位置合わせ記憶場所から始まり、前記基本ブロックが前記セクタを超える場合、前記基本ブロックの終わりに達するまで前記基本ブロックを各セクタ内まで続けさせるが、前記基本ブロックが前記行の終わりを超えて続く必要がある場合は、前記行を超える最初の命令の命令アドレスを使用して別の行を位置指定し、前記基本ブロックが前記Ｉキャッシュ内のいずれかのセクタ内で終わるまで前記基本ブロックを前記別の行の最初のセクタおよび必要な連続したセクタ内に続ける前記Ｉキャッシュと、
最後の基本ブロックの終わりに分岐成立命令がある場合はターゲット分岐命令を使用してアクセスされる前記Ｉキャッシュ内の次のセクタであるが、前記次のセクタは、最後の基本ブロックの終わりに分岐不成立命令があるかまたは現行基本ブロックのためにアクセスされた最後のセクタに分岐命令がない場合は次に続くセクタ場所にあるセクタである次のセクタと、
所定数のセクタ内に前記プログラムの命令の実行シーケンスを含む前記Ｉキャッシュ内のセクタのシーケンスを示す各ＦＨＴ項目内に格納されたセクタ配列情報と、
セクタ・アドレス・フィールドを有するディレクトリ項目を含むＩキャッシュ・ディレクトリであって、前記セクタ・アドレス・フィールドに前記Ｉキャッシュ内の前記セクタがそれぞれ関連づけられ、各セクタ・アドレス・フィールドが前記関連づけられたセクタ内に格納されたいずれかの最初の命令のアドレスを受け入れ、前記セクタ・アドレス・フィールドが前記ディレクトリ内に見つかった場合は前記関連づけられたセクタに前記Ｉキャッシュ内の前記命令が含まれているため、前記Ｉキャッシュ・ディレクトリ内のいずれかのセクタ・アドレス・フィールに前記プログラム命令アドレスが含まれているか否かを判断することによって、後で使用されるプログラム命令アドレスが前記アドレスを有する前記命令を含むいずれかのセクタを位置指定することができるようにするＩキャッシュ・ディレクトリとをさらに含む、請求項１に記載のＦＨＴを使用するプロセッサ装置。
【請求項９】
同じＦＨＴ項目の前記セクタ配列情報で示された各セクタの前記分岐結果として「分岐成立」または「分岐不成立」または「セクタ内に分岐命令なし」のうちのいずれか１つを示す各ＦＨＴ項目内に格納されたセクタ分岐結果情報をさらに含む、請求項８に記載のＦＨＴを使用するプロセッサ装置。
【請求項１０】
前記予測ベクトルに現行プログラム実行アドレス（プログラム・アドレス）の直後の前記プログラム中の基本ブロックのシーケンスの分岐結果予測を表す状態を有するビットが含まれている前記プログラム・アドレスにある予測分岐結果ベクトル（予測ベクトル）を生成する前記予測ユニットと、
前記予測ベクトルに分岐命令を含まないセクタに関する情報が含まれていない場合に、検出操作に前記「セクタ内分岐命令なし」の結果標識を無視させることによって前記予測ベクトルの少なくとも最初の部分が前記ＦＨＴ内のＦＨＴ項目内の前記セクタ分岐結果情報と等しいか否かを検出する論理回路と、
前記論理回路が前記ＦＨＴ項目内の前記セクタ分岐結果情報に等しいものを検出した場合に、前記ＦＨＴ項目内の前記セクタ配列情報によって示されたシーケンス内の前記ＦＨＴ項目の前記セクタ配列情報で識別されている各セクタから前記命令を受け取る前記実行要素とをさらに含む、請求項９に記載のＦＨＴを使用するプロセッサ装置。
【請求項１１】
前記ＦＨＴ項目で順次に示された前記セクタから前記命令を受け取り、前記命令を受け取った順序で前記実行ユニットに転送する命令順序づけバッファをさらに含む、請求項１０に記載のＦＨＴを使用するプロセッサ装置。
【請求項１２】
前記ＦＨＴ内の各ＦＨＴ項目内の同じフィールドに格納された前記セクタ配列情報と前記セクタ分岐結果情報とをさらに含む、請求項１０に記載のＦＨＴを使用するプロセッサ装置。
【請求項１３】
前記ＦＨＴ内の各ＦＨＴ項目内の異なるフィールドに格納された前記セクタ配列情報と前記セクタ分岐結果情報とをさらに含む、請求項１１に記載のＦＨＴを使用するプロセッサ装置。
【請求項１４】
前記Ｉキャッシュ内の命令を含むセクタのグループの履歴シーケンスを格納する各ＦＨＴ項目内のセクタ配列フィールドと、
前記ＦＨＴ項目内の前記セクタ配列フィールドで示された各ブロックについて成立または不成立の条件を含む結果を記録する各ＦＨＴ項目内に設けられた分岐結果フィールドとをさらに含む、請求項１に記載のＦＨＴを使用するプロセッサ装置。
【請求項１５】
各行が所定数のセクタを含み、各行が前記Ｉキャッシュ内の固有の場所を有する、前記Ｉキャッシュを構成する複数のＩキャッシュ行と、
ＦＨＴセット内の各ＦＨＴ項目が前記Ｉキャッシュ内の関連づけられたＩキャッシュ行の場所によって決定する前記ＦＨＴ内の場所を有する、前記ＦＨＴ内に固有に配置されたＦＨＴ項目の複数のＦＨＴセットとをさらに含む、請求項１１に記載のＦＨＴを使用するプロセッサ装置。
【請求項１６】
各ＦＨＴセット内に設けられた所定セット数のＦＨＴ項目と、
前記所定セット数と前記Ｉキャッシュ内の関連づけられたＩキャッシュ行のインデックスとによって計算される前記ＦＨＴ内の各ＦＨＴセットのインデックスとをさらに含む、請求項１５に記載のＦＨＴを使用するプロセッサ装置。
【請求項１７】
前記ＦＨＴ内の各ＦＨＴ項目内に構成され、前記ＦＨＴ項目が前記Ｉキャッシュを制御するために使用可能であることを示す有効フィールドと、
各ＦＨＴ項目内に構成され、前記セット内のどの項目が最長期間不使用（ＬＲＵ）であり、次の置換候補であるかを示す置換フィールドとをさらに含む、請求項１６に記載のＦＨＴを使用するプロセッサ装置。
【請求項１８】
前記関連づけられたＦＨＴ項目内の前記シーケンス情報によって示された前記実行シーケンスで最初に出力すべき前記関連づけられたＡＩＣ行のセクタ内の最初の命令のアドレスを示す、各有効ＦＨＴ項目内の先頭命令フィールドをさらに含む、請求項１７に記載のＦＨＴを使用するプロセッサ装置。
【請求項１９】
前記ＦＨＴ項目内で示された前記セクタ・シーケンス内の最後の命令の後に続くべき（前記プログラム実行シーケンス中の）命令のアドレスを示す、各有効ＦＨＴ項目内の次命令アドレス・フィールドをさらに含む、請求項１８に記載のＦＨＴを使用するプロセッサ装置。
【請求項２０】
プログラムの前の実行の実行履歴を使用して、コンピュータ・システム内に記憶されたプログラムの複数の基本ブロックから入手した命令の実行のために即時に順序づけするプロセッサ制御方法であって、
各フェッチ・サイクルが前記プログラムの最大「ｍ」個の複数の基本ブロックに含まれる命令を実行のために順序づけすることができる、フェッチ・サイクルを使用して実行のために前記プログラムの命令を順序づけするステップと、
入口アドレスとターゲット・アドレスがそれぞれフェッチ・サイクルのサイクル開始アドレスであり、最初はプログラム内の入口アドレスでありその後は前のフェッチ・サイクル中の最後の分岐命令から入手したターゲット・アドレスである命令アドレスを使用して、プログラム実行が完了するまで各フェッチ・サイクルを開始するステップと、
予測ベクトルが状態ビットのストリングを含み、各状態ビットが前記プログラム実行シーケンス内で次に発生すると予測された「ｍ」個の分岐命令の各分岐命令の成立状態または不成立状態を示す、前記開始アドレスを使用して各フェッチ・サイクルの最初に予測ベクトルを入手するステップと、
位置合わせＩキャッシュ（ＡＩＣ）ディレクトリ内で前記サイクル開始アドレスを探索し、（関連づけられたＡＩＣ内の）いずれかのＡＩＣ行が前記サイクル開始アドレスを有する命令を含むか否かを判断し、ＡＩＣ行内のＡＩＣセクタ内に前記命令が見つかった場合はＡＩＣヒットを示すが、前記ＡＩＣ内に前記命令が見つからない場合はＡＩＣミスを示すステップと、
ＡＩＣヒットが示された場合、見つかった前記ＡＩＣ行に関連づけられたＦＨＴ内のＦＨＴ項目のフェッチ履歴テーブル（ＦＨＴ）セットを探し出すステップと、
前記予測ベクトルを前記探し出したＦＨＴセットのＦＨＴ項目内の「セクタ分岐結果」情報と比較し、ＦＨＴヒットを有する前記ＦＨＴセット内のいずれかのＦＨＴ項目を選択し、前記セット内のいずれのＦＨＴ項目にもＦＨＴヒットがない場合にはＦＨＴミスが発生するステップと、
ＦＨＴヒットが発生した場合、前記ＦＨＴ項目の「セクタ配列」情報で示されたシーケンスで前記セクタの出力を制御することによって、前記ＦＨＴ項目内の前記「セクタ配列」情報で示されたＡＩＣセクタ内の命令を実行のために出力するステップとを含むプロセッサ制御方法。
【請求項２１】
各ＡＩＣ行が所定数のセクタを含み、各セクタが所定数の命令記憶位置を有し、ＡＩＣミスが発生した場合、前記サイクル開始アドレスを使用して前記ＡＩＣディレクトリ内で前記ＡＩＣ行に関連づけられたディレクトリ項目を選択するステップと、
前記ＦＨＴ内で選択された前記ＡＩＣ行に関連づけられたＦＨＴ項目を選択するステップと、
将来の使用のための選択された前記ＡＩＣ行と選択された前記ＦＨＴ項目のセットアップに備えて、選択された前記ＡＩＣ行を無効化し、選択された前記ＦＨＴ項目を無効化するステップと、
前記コンピュータ・システムの記憶階層内の前記フェッチ・サイクル開始アドレスにある命令を含むメモリ・ラインを探し出すステップと、
前記メモリ・ライン内の前記サイクル開始アドレスにある命令のフェッチを開始し、前記フェッチされた命令を、前記セクタの位置合わせ命令位置から始まって前記行内の最初のセクタ内にコピーし、分岐命令が検出されるか、前記ＡＩＣ行の終わりに達するか、または前記メモリ・ラインの終わりに達するかいずれかのうち最も早いものに達したときに前記フェッチおよびコピーを終了し、必要な場合には前記ＡＩＣ行内の連続したセクタ内のフェッチおよびコピーを継続すると同時に、前記フェッチおよびコピーが進むにつれて前記プログラム命令アドレスを更新し、前記行内にコピーされた最初の基本ブロックが前記行のいずれかのセクタ内で終わるステップと、
前記命令がフェッチされコピーされるにつれて前記命令を実行のために出力するステップと、
前記行内の前記最初のセクタを位置指定するために前記ＡＩＣディレクトリ項目内の「セクタ先頭アドレス」に前記サイクル開始アドレスを格納し、選択された前記ＦＨＴ項目内の「セクタ配列」フィールド内の最初のセクタ位置に先頭セクタ標識を格納し、選択されたＡＩＣディレクトリ項目内のセクタＳ先頭アドレス・フィールドに、各対応するセクタ内の最初の命令の前記プログラム・アドレスを格納するステップと、
フェッチされた命令を受け入れる各セクタ内に分岐命令がないか検査し、フェッチされた命令を受け入れる各セクタの選択された前記ＦＨＴ項目のセクタ配列フィールドにセクタ識別子を格納し、前記ＦＨＴ項目内のセクタ分岐結果フィールドの対応する各セクタ位置にフェッチされた各セクタのセクタ結果標識を格納するステップであって、各セクタ結果標識が、対応する各セクタに非分岐命令、分岐成立命令、または分岐不成立命令のいずれがあるかを示すステップと、
前記ＡＩＣ行内のすべてのＡＩＣセクタに受け取られたフェッチ命令があるか否かを検査して、選択された前記ＡＩＣ行内に処理すべきセクタが残っていないか否かを判断し、ある場合は次に使用可能なセクタを選択し、前記セクタを現行セクタにするステップと、
前記現行プログラム命令アドレスを更新する（選択された前記ＡＩＣ行内の最後にコピーされた分岐命令のターゲット・アドレスか、または前記コピーが前記行の終わりに達した場合は前記更新されたプログラム命令アドレスが前記行にコピーされた命令の数だけ増分される）ステップと、
別のセクタが存在する場合、現行プログラム命令アドレスにある命令を含む前記メモリ・ラインを見つけ、前記現行プログラム・アドレスにある前記メモリ・ラインから命令のフェッチを開始し、前記セクタ内の位置合わせ命令位置から始めて実行のためにフェッチされた前記命令の現在選択されているＡＩＣセクタ内へのコピーを開始し、分岐命令が検出されるか、ＡＩＣ行の終わりに達するか、またはメモリ・ラインの終わりに達するか、いずれか最も早いものが発生したときに前記フェッチおよびコピーを終了し、必要な場合には前記フェッチおよびコピーを進めるにつれて前記プログラム命令アドレスを更新しながら、選択された前記ＡＩＣ行のすべてのセクタの中に命令がコピーされるまで前記ＡＩＣ行内の連続したセクタ内でフェッチおよびコピーを続けるステップと、
前記ＡＩＣディレクトリ項目内の前記セクタの「セクタ先頭アドレス」に前記開始プログラム・アドレスを格納するステップと、
前記ＦＨＴ項目内の前記「セクタ配列」フィールド内の対応するセクタ・サブフィールドに次の各セクタのセクタ識別子を格納するステップと、
コピーされたいずれかの命令を受け取る次の各セクタ内に分岐命令がないか検査し、前記ＦＨＴ項目内のセクタ分岐結果フィールドの対応する各セクタ位置に、コピーされた各セクタのセクタ結果標識を格納するステップであって、各セクタ結果標識が、対応する各セクタに非分岐命令、分岐成立命令、または分岐不成立命令のいずれがあるかを示すステップと、
前記ＡＩＣ行内のすべてのＡＩＣセクタがコピーされた命令を受け取ったか否か検査して、選択された前記ＡＩＣ行にすべてのセクタがコピーされたか否かを判断し、次に、選択された前記ＦＨＴ項目内の置換フィールドを最長期間不使用状態に設定するステップと、
選択された前記ＦＨＴ項目内の「次プログラム・アドレス」フィールドを現行プログラム・アドレスに設定し、選択された前記ＦＨＴ項目内の有効フィールドを有効状態に設定するステップとをさらに含む、請求項２０に記載のプログラムの複数の基本ブロックから入手した命令を実行のために即時に順序づけするプロセッサ制御方法。
【請求項２２】
前記方法を実行するプロセッサの実行パイプラインに前記命令を供給する命令順序づけバッファに出力することによって実行のための出力を行うステップをさらに含む、請求項２１に記載のプログラムの複数の基本ブロックから入手した命令を実行のために即時に順序づけするプロセッサ制御方法。
【請求項２３】
ＡＩＣヒットが発生したときにＦＨＴミスが発生した場合、前記ＦＨＴセット内の無効なＦＨＴ項目を選択し、サブフィールド・インデックスＣを現行サブフィールドＣを位置指定するように０に設定し、セクタ・インデックスＳを現行セクタＳを位置指定するように０に設定し、ベクトル・ビット・インデックスＢを現行ベクトル・ビットを位置指定するように０に設定するステップと、
前記現行プログラム・アドレスを選択された前記ＦＨＴ項目内の「先頭命令フィールド」内に設定するステップと、
選択された前記ＦＨＴ項目内の置換フィールドを指示された最も最近に使用された状態に合わせて調整するステップと、
将来の使用のための前記ＦＨＴ項目のセットアップに備えて、選択された前記ＦＨＴ項目内の「セクタ配列」フィールド内のサブフィールドＣにＳを格納するステップと、
選択された前記ＡＩＣ行の前記セクタＳ内に含まれたすべての命令を実行のために出力するステップと、
分岐命令セクタＳがないか検査し、セクタＳ内に分岐命令が存在しない場合は、選択された前記ＦＨＴ項目のサブフィールドＣに「無命令」コードを格納し、前記プログラム命令アドレスを実行のためにセクタＳから出力された命令の数だけ増分するステップと、
セクタＳ内に分岐命令が検出された場合は、前記予測ベクトル内の現行ビットＢが成立状態か不成立状態かを検査し、成立状態が見つかった場合は、選択された前記ＦＨＴ項目内の「セクタ分岐結果」フィールドのサブフィールドＣに成立標識を格納し、前記プログラム命令アドレスをセクタＳ内で検出された前記分岐命令のターゲット・アドレスに設定するが、不成立状態が見つかった場合は、選択された前記ＦＨＴ項目内の前記「セクタ分岐結果」フィールドのサブフィールドＣに不成立標識を格納し、前記プログラム命令アドレスを実行のためにセクタＳから出力された命令の数だけ増分するステップと、
サブフィールドＣを１だけ増分して新しい現行サブフィールドＣを入手し、増分された前記値を検査して前記ＡＩＣ行内のすべてのセクタが処理されたことを示しているか否かを判断し、すべてのセクタが処理された場合は、選択された前記ＦＨＴ項目内の有効フィールドを有効状態に設定し、現行プログラム命令アドレスを選択された前記ＦＨＴ項目内の「次プログラム命令アドレス」フィールドから入手した新しい値に設定するステップと、
次に、前記プログラム命令アドレスの新しい前記値を使用して次のフェッチ・サイクルを開始するステップと、
サブフィールドＣの増分された前記値の前記検査が、すべてのＡＩＣセクタが処理されていないことを示した場合、選択された前記ＡＩＣディレクトリ項目にアクセスするステップと、
選択された前記ＡＩＣディレクトリ項目内の「セクタ先頭アドレス」フィールドを探索して現行プログラム命令アドレスと一致するフィールドがないか調べ、前記フィールドのいずれかが一致する場合はセクタ・ヒットが発生し、一致するフィールドが、処理を必要として選択されたＡＩＣセクタになる対応するＡＩＣセクタ（選択された前記ＡＩＣ行内のいずれのセクタの場所にあってもよい）を識別し、次に、新たに選択された前記ＡＩＣセクタのためにフェッチ・サイクルを開始するステップと、
サブフィールドＣがすべてのセクタが処理されたことを示す値に達するまで次の各サブフィールドＣについて前記処理を繰り返し、次に、選択された前記ＦＨＴ項目を有効状態に設定し、その置換フィールドを最長期間不使用状態を示すように設定するステップと、
前記ＡＩＣディレクトリ項目の前記探索中にセクタ・ヒットが見つからない場合は、セクタ・ミスが発生し、選択された前記ＦＨＴ項目の前記「セクタ配列」フィールドおよび「セクタ分岐結果」フィールド内の残りのサブフィールドにノー・オペレーション文字を書き込むステップと、
前記現行プログラム命令アドレスを前記現行ＡＩＣ行の前記「次プログラム命令アドレス」フィールドにある値に設定し、次のフェッチ・サイクルを開始するステップとをさらに含む、請求項２０に記載のプログラムの複数の基本ブロックから入手した命令を実行のために即時に順序づけするプロセッサ制御方法。
【請求項２４】
前記方法を実行するプロセッサの実行パイプラインに前記命令を供給する命令順序づけバッファに出力することによって実行のための出力を行うステップをさらに含む、請求項２３に記載のプログラムの複数の基本ブロックから入手した命令を実行のために即時に順序づけするプロセッサ制御方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、一般には、プログラムの実行のためのプロセッサの命令フェッチ速度向上を可能にすることに関する。より詳細には、本発明は、単一のフェッチ・サイクルで複数予測基本ブロックをフェッチするようにメモリ・アクセス命令をプロセッサ実行ハードウェア（命令実行パイプライン処理ハードウェアなど）に配布するための、命令キャッシュと共に直接動作するフェッチ履歴テーブルを生成する。
【０００２】
【従来の技術】
本発明を理解するには、すべてのコンピュータ・プログラムの基本ブロック特性を背景として理解する必要がある。プログラムは、プロセッサのメイン・メモリを含む記憶階層に線形に記憶され、それによってその中のすべての命令記憶場所が線形な特性を有するようにする。しかし、これらの命令がプロセッサによって実行されるとき、プロセッサは、プログラム中の分岐命令によって、階層から線形に入手したそれらの同じ命令の非線形順序づけを使用する必要が生じる。したがって、すべてのコンピュータ・プログラムの実行順序は、各プログラムに含まれる分岐命令によって決まる。各プログラムの実行では、プログラムを、それぞれ分岐命令の分岐先命令から始まり、プログラムの命令実行順序で次の基本ブロックを開始するターゲット・アドレスを提供する分岐命令で終わる基本ブロックに分割する。基本ブロックはいずれも、１個の命令（分岐命令）からきわめて多数の命令（数千個の命令など）に至る任意の数の命令を含むことができる。プロセッサは、命令がメモリ内に順次に入れられていれば最も速く命令をフェッチし、命令が分岐のターゲットであって、プロセッサが介在してターゲット・アドレスの計算を行う必要が生じ、処理を大幅に遅らせるページ・フォルトの入手など、その命令を見つけるためにメモリ内のいずれかの場所までしばしば行く必要がある場合にフェッチ速度が最も遅くなる。
【０００３】
プログラム中に多数の条件分岐があると、最新のプロセッサの命令フェッチ機構の妨げになる。大幅に増加する１サイクル当たりの命令数に対応するために、将来のマイクロプロセッサは多数の命令の投機フェッチおよび実行をサポートすることが必要になる。本明細書に記載の方法は、コンパイル中または命令キャッシュのロード中の動的マルチレベル分岐予測とコード再編成とに基づいて、各サイクル中に（異なるターゲット・アドレスを持つ）複数の条件分岐にわたって命令を投機的にフェッチすることができる。
【０００４】
過去１０年間で、マイクロプロセッサのパフォーマンスは年に約６０％の割合で向上してきた。このパフォーマンス向上率を維持するには、将来のマイクロプロセッサは１サイクル当たり大幅に増加した数の命令を実行（およびコミット）する必要がある。条件分岐によって非数値ワークロードが課され、それによってスーパースカラ・プロセッサの実施が困難になる。１つの研究では、（ＲＳ／６０００プラット・フォーム上で）平均的なＣ言語プログラムはその命令の約１８％が条件命令であり、Ｃ＋＋プログラムは命令の約１１％が条件分岐である。これらによって、基本ブロックのサイズは６〜１０命令に制限される。これらによって、基本ブロックを超える投機実行が必要になる。
【０００５】
ほとんどのプロセッサは、高度な分岐予測機構を使用して、条件分岐がとる経路とそのターゲット・アドレスを予測する。しかし、これらの機構は、次に実行する条件分岐の結果を予測するために使用されているに過ぎない。基本ブロックのサイズが小さいことと投機の必要の増大により、将来のマイクロプロセッサは１サイクル中に複数の分岐の結果を高い確度で予測する必要があり、１サイクル中にそれらの分岐命令のターゲット・アドレスから命令をフェッチすることができなければならない。
【０００６】
わかりやすく言えば、多くの経路ベースの相関動的分岐予測アルゴリズムは、多くの非数値ワークロード（ＳＰＥＣｉｎｔなど）について９７％もの確度で分岐予測を行うことができる。このような高い確度により、４個の連続した条件分岐の結果の予測を８８．５％の確度で行うことができる。同様に、３個の連続した条件分岐は９１．３％の確度で予測可能であり、２個の連続した条件分岐は９４．１％の確度で予測可能である。これは、平均的な基本ブロック・サイズである６命令では、その経路をとることになる投機実行命令の期待数は、（単一レベルの分岐予測では１１．８命令に過ぎないのに対して）４レベルの分岐予測では２８．３であることを意味する。
【０００７】
分岐が実行の現在点から離れるにつれて、予測可能な確度が低下する。多数の命令をフェッチすることができることにより、データ・ハザード、制御ハザード、および構造ハザードの制約内で所与の１サイクル中に実行可能な命令の数を大幅に増やすことができる。
【０００８】
各コンピュータ・プログラムは、コンピュータ・システムの永続メモリ内に記憶場所シーケンスで記憶された１組の命令から成り、このシーケンスは、実行のためにそのプログラムをフェッチするプロセッサに対して仮想アドレス・シーケンスで示すこともできる。フェッチされた命令のシーケンスは、プロセッサによって命令実行シーケンスとして解決される。この命令実行シーケンスは通常、プログラム中の分岐命令のためにプログラムの記憶場所シーケンスとはかなり異なる。
【０００９】
したがって、プログラムは一般に永続コンピュータ・メモリ（ハード・ディスクなど）に仮想アドレス・シーケンスで記憶され、この仮想アドレス・シーケンスは一般に、プロセッサがプログラムの各部分（ページ単位など）をコンピュータ・システムのランダム・アクセス・メモリに転送するために使用され、その後、プロセッサは、プロセッサによる実行のためにプログラムの仮想アドレスを使用してメモリ内のプログラムの行をフェッチする。
【００１０】
したがって、プロセッサ内のプログラムの命令実行シーケンスは、プログラムの命令コンパイル・シーケンスでは現れず、命令実行シーケンスは各プログラム中で実行される分岐命令によって決まり、その結果、プログラムのアーキテクテッド命令実行シーケンスになる。プログラムのアーキテクテッド命令実行シーケンスに従わなければならないある種の複雑なプロセッサに見られるいわゆる順序外れ（アウト・オブ・シーケンス）命令実行は、本発明には関係がない。
【００１１】
命令の各プログラム・アーキテクテッド実行シーケンスは、プログラムの特定の実行で使用されるデータに依存し、変化するデータによって命令のプログラム実行シーケンスは予測不能な変化をすることがある。データによって、分岐命令をとるかとらないかがしばしば制御される。不成立分岐命令によって、プログラムの仮想アドレス・シーケンスで次の命令を指すターゲット・アドレスが生成される。成立分岐命令によって、仮想アドレスにある非順次命令を指すターゲット・アドレスが生成される。
【００１２】
すべてのプロセッサにおける命令フェッチ機構は、順次命令に仮想アドレス・シーケンスでアクセスしている限り、最も速く動作する。これは、その場合、それぞれの次の命令アドレスが単に現行命令アドレスを増分して次の順次命令アドレスを生成するだけで生成され、この次の順次命令アドレスはプロセッサ・キャッシュ内の同じラインにある次の順次命令である（キャッシュ・ヒット）ことが多く、そこからその命令を実行のためにプロセッサにただちに供給することができるためである。
【００１３】
しかし、分岐をとることによって、現在キャッシュにない（キャッシュ・ミス）記憶場所にあるターゲット命令をフェッチしなければならず、それによってターゲット命令を含む別のラインをメモリからキャッシュにコピーするフェッチ・サイクルが開始されるという追加的なオーバーヘッドが生じることがある。プログラム中の命令の仮想アドレス・シーケンスから逸脱した成立分岐命令のために、成立分岐命令がプロセッサでのプログラムの実行に必要な命令のフェッチ速度を低下させることはよく知られている。
【００１４】
したがって、分岐命令のターゲット命令が実際のターゲット・アドレスが実際にわかるまでフェッチされず、それによって追加のラインをプロセッサのＩキャッシュにフェッチするための遅延が生じる場合、プログラム実行は分岐命令をとることによって遅くなる。したがって、実行パイプラインによってターゲット命令が受け取られるのをプロセッサが待つ間の追加の処理遅延が生じるため、成立分岐命令をプロセッサが処理する際に余分なオーバーヘッドが生じる。このようにして、成立分岐命令の処理により、プログラムの処理が遅くなり、プログラムの実行時間が増大する。
【００１５】
従来の技術では、各成立分岐命令によって、プロセッサが１つまたは複数の基本ブロックをフェッチするフェッチ・サイクルが開始される。基本ブロックは、メモリ（実メモリまたは仮想メモリ）内に順次アドレスを有する１つまたは複数の命令から成り、最後の命令が分岐タイプの命令である。分岐タイプの命令は、条件付き分岐または無条件分岐、あるいはリターン命令または呼出し命令である。基本ブロックを終了させる分岐タイプの命令のターゲット・アドレスによって、次の基本ブロックが始まる。
【００１６】
従来のコラプシング・バッファ（Collapsing Buffer)手法には、フェッチすべきキャッシュ・ライン内の命令を判断するのにいくつかの欠点がある。第１に、高インタリーブ（Ｉキャッシュ・ライン内の命令数と同数）分岐ターゲット・バッファ（ＢＴＢ）を必要とする。第２に、命令をフェッチするキャッシュ・ライン内のすべての分岐について、ＢＴＢ内に項目を必要とする。第３に、キャッシュ・ライン内からどの命令をフェッチすべきかを示すビット・ベクトルを作成するために、（４個プラス直前の１個の命令アドレスを最後の分岐命令のターゲット・アドレスと比較する）一連のアドレス・コンパレータを有する。連続内のコンパレータの数は、キャッシュ・ライン内の命令の数と等しい。これにより、プロセッサ・クロックが大幅に低下する。
【００１７】
各項目に制御フロー・グラフの一部が記憶される、分岐アドレス・キャッシュ（ＢＡＣ）が提案されている。ＢＡＣは、ＢＴＢを拡張して、単一の分岐ターゲットではなく、複数の分岐のターゲット・アドレスと不成立アドレスを記憶する。ＢＡＣ内にフェッチ・アドレスの項目がない場合、分岐ターゲットと不整列経路は実行中に埋められる。しかし、分岐のうちのいくつかの分岐が実行されなかったために、項目に穴ができる可能性がある。しかし、この論文では、分岐とそのターゲットとの間の使用されないインタリーブ命令をなくす方法については、十分な説明がなされていない。この目的のために、コラプシング・バッファと類似した手法が必要である。
【００１８】
本明細書に記載の手法はこれらの欠陥のいずれも持たない。さらに、コンパイラまたはキャッシュ再ロード論理によって生成されたヒントを使用していくつかの分岐にわたる高帯域幅フェッチを実現する。コンパイラ・ベースの手法の方がより良い結果を出すと予測される。これは、コンパイラはコード生成中にサブプログラム全体を見ることができ、すべてのパス情報のコード化をより正確に入手することができ、したがってフェッチ履歴テーブルで維持されている分岐ターゲット情報に穴がなくなるためである。
【００１９】
Ｅ．ローテンバーグ（Rotenberg）、Ｓ．ベネット（Bennett）、およびＪ．スミス（Smith)による「Trace Cache: a Low Latency Approach to High Bandwidth Fetching」（１９９６年４月１１日）という名称の論文で、命令のプロセッサ・フェッチを制御する従来技術の「トレース・キャッシュ」技法が提案されている。このローテンバーグ等の論文では、トレース・キャッシュが、命令キャッシュ（Ｉキャッシュ）を含む「コア・フェッチ・ユニット」と共に動作する。コア・フェッチ・ユニットは、分岐ターゲット・バッファ（ＢＴＢ）、ＢＴＢ論理回路、および複数分岐予測機構も含む。コア・フェッチ・ユニットは、一連のフェッチ・サイクルを使用してメイン・メモリから命令をそのＩキャッシュにフェッチする。
【００２０】
各フェッチ・サイクルは、分岐予測機構からの現在の予測プログラム経路中に１つまたは複数の基本ブロックを含むことができる。フェッチ・サイクルは、トレースされ、プログラム中の同じプログラム・アドレスに関連づけられたトレース・キャッシュ・ラインに記憶された前の経路と一致する経路内のすべての命令を含む。現行フェッチ・サイクルは、アドレスされたトレース・キャッシュ・ラインに記憶されている経路と不一致のときには常に終了する。現行トレース・キャッシュ・ラインを示す情報が、トレース・キャッシュ・ラインに関連づけられたトレース・タグ・キャッシュ・ディレクトリ項目に記憶される。
【００２１】
トレース・タグ・キャッシュは、トレース・バッファと、トレース・タグ・ディレクトリと、トレース・ライン・フィル・バッファおよび論理とから成る。トレース・タグ・ディレクトリには、制御情報が入れられる。
【００２２】
トレースの長さは命令数ｎと基本ブロック数ｍの２通りの方法で制限され、そのうちｎはプロセッサのピーク・ディスパッチ・レートによって制限され、ｍは１フェッチ・サイクル当たりの分岐予測の平均数によって制限される。トレース・タグ・ディレクトリ内の各項目内の制御情報は、有効ビットと、先頭アドレスが入ったタグ・フィールドと、各ビットが各（成立または不成立）分岐命令の後にたどる経路を示すトレース内の分岐を表す、（ｍ−１）ビットを有する分岐フラグ・フィールドと、（１）関連づけられたトレース内の分岐の数と（２）トレースが分岐で終わるかどうかを示す分岐マスク・フィールドと、分岐が成立しない場合に次のフェッチのアドレスが入れられるトレース不成立アドレス・フィールドと、分岐が成立した場合に次のフェッチ・アドレスが入れられるトレース・ターゲット・アドレス・フィールドとである。
【００２３】
ローテンバーグ等のＢＴＢ内の１６個の項目すべてが、選択されたトレース・タグ・キャッシュ・ライン内の１６個の命令と並列して動作して、その中の各命令が分岐命令ではないか調べる。分岐予測回路は、グローバル・アドレス相関分岐予測機構（ＧＡｇ）と単一パターン履歴テーブルを使用する。ＢＴＢ論理は、ＢＴＢヒット情報を分岐予測と結合して、次のフェッチ・アドレスを生成し、有効命令ビット・ベクトルを生成する。
【００２４】
予測論理によって複数分岐予測が行われる間、ローテンバーグ等のトレース・キャッシュ、ＢＴＢ、および命令キャッシュすべてに並列してアクセスされる。トレース・キャッシュ・ヒットには、現行トレース・ディレクトリ項目について、（１）実フェッチ・アドレスがタグ・フィールドと一致し、（２）分岐予測が分岐フラグ・フィールドと一致する必要がある。トレース・キャッシュ・ミス時、フェッチは通常、トレース・キャッシュ情報を使用せずに、従来の方式でＩキャッシュから進められる。しかし、この従来のフェッチ・プロセス中、トレース・キャッシュ項目が生成されてトレース・キャッシュに入れられ、対応するトレース・キャッシュ・ディレクトリ項目が生成される。命令が従来のようにＩキャッシュにフェッチされるにつれて、Ｉキャッシュ・ラインに転送される各基本ブロックが、Ｉキャッシュからライン・フィル・バッファにも転送され、この転送は、ライン・フィル・バッファにｍ個の基本ブロックまたはｎ個の命令（フル・キャッシュ・ラインと等しい）が記憶されるまで行われる。その後、ライン・フィル・バッファの内容が現行フェッチ・アドレスによって入手されたトレース・キャッシュ内の現行ラインに転送される。それと同時に、次のフェッチ・サイクルの必要に応じて、分岐フラグ、分岐マスク、および不成立アドレスまたはターゲット・アドレスの生成によって、対応するトレース・ディレクトリ項目が生成される。
【００２５】
単純なトレース・サイクルの不利な点は、各先頭フェッチ・アドレスについて単一のトレース項目しかトレース・キャッシュに記憶することができず、単一の対応する項目がトレース・ディレクトリに記憶される点である。したがって、プログラム中の同じフェッチ・アドレスからの異なる経路に、異なるトレース・キャッシュ項目と異なる対応トレース・ディレクトリ項目が必要になる。その結果、プログラム中の各フェッチ・アドレスごとに多数のトレース項目が生じ、プログラム実行中にそのアドレスから異なる経路がたどられる。プログラムは前に実行された命令に分岐して戻り、その後でプログラム全体を通して反復する際にそこから異なる経路をたどることが多いため、これによって、トレース・キャッシュとトレース・ディレクトリ項目の非効率的な使用によりトレース・キャッシュの効率が大幅に制限される。
【００２６】
【発明が解決しようとする課題】
したがって、ローテンバーグ等のシステムは、Ｉキャッシュと共にトレース・キャッシュを必要とする。本発明は、トレース・キャッシュを使用せず、ローテンバーグ等のものに見られるシステム構成を使用しない。
【００２７】
【課題を解決するための手段】
本発明は、（好ましくは複数のキャッシュ・セクタを使用して構造化された）新規な位置合わせＩキャッシュと共に機能する新規なフェッチ履歴テーブルを提供する。
【００２８】
本発明は、その結果が高度な信頼性の高い分岐予測機構によって予測される複数の分岐のターゲットから命令をフェッチすることができるようにし、セグメント化された命令キャッシュと共に動作する機構を含む。
【００２９】
本発明は、命令キャッシュ・セクタ化コントロールを使用して、命令の基本ブロックを整列Ｉキャッシュ・セクタに位置合わせする機械コードを順序づけし直す。このような命令位置合わせは、実行時に命令キャッシュ再ロード／アクセル論理を使用して処理系依存機能をオブジェクト・コードに組み込むことによって行われる。プログラムは、実行のためにプロセッサが必要とする編成を反映せずにメイン・メモリ内に処理系独立方式で線形に配置され、処理系固有の特徴は実行プロセスのためのプロセッサ操作によって導入される。これによって、異なる内部編成を備えたプロセッサ間のオブジェクト・コード実行互換性が可能になる。本発明は、プログラム中の分岐命令の実行によって生じるプロセッサの時間損失を大幅に低減することができる。
【００３０】
本発明が備える新規なハードウェアは、「位置合わせ命令キャッシュ」（ＡＩＣ）と、ＡＩＣディレクトリと、「フェッチ履歴テーブル」（ＦＨＴ）とを含む。この新規なハードウェアは新規な方法を使用して本発明で必要な操作を実現する。
【００３１】
ＡＩＣは、セクタ化命令キャッシュであり、セクタはフェッチされた命令の順次グループを位置合わせする。すなわち、ＡＩＣに記憶される各基本ブロックは、その最初の命令をセクタ内の最初の命令記憶場所に配置することによってセクタ位置合わせされ、セクタ内の他の命令は同じ基本ブロック中のメモリ内の場所順次アドレスに入れられる。プログラム中の基本ブロックの命令数は大幅に異なることがあるため、基本ブロックは、同じセクタ内のいずれかの命令位置で終わったり、セクタのサイズを超えたりすることがある。基本ブロックが同じセクタ内で終わる場合、その基本ブロックを終了させる分岐命令に続くセクタの命令記憶位置にノーオペレーション（ＮＯＰ）文字が書き込まれる。基本ブロックがセクタ・サイズを超える場合、基本ブロックはＡＩＣ行内の１つまたは複数の連続するセクタ内に続き、いずれかの行で終わることができ、その場合、残りの位置はＮＯＰで埋められる。ＡＩＣ行内のセクタは、有効な命令が記憶されていなければ使用することができる。
【００３２】
ＡＩＣディレクトリは、関連づけられたＡＩＣ行内の各セクタＳについて「セクタＳ先頭アドレス」フィールドを含み、このフィールドには、関連づけられたＡＩＣディレクトリ項目でその内容が有効であると示された場合に、関連づけられたセクタＳ内の最初の命令のメモリ・アドレスが入れられる。各ＡＩＣディレクトリ項目は、それに関連づけられたＡＩＣ行Ｒのインデックスと同じディレクトリインデックスＲに配置することができる。
【００３３】
ＦＨＴは、直接マップ・テーブルまたはセットアソシアティブ・テーブルとすることができる。直接マップされる場合、ＦＨＴ項目のインデックスはＡＩＣ内の関連づけられた行Ｒのインデックスから直接計算される。たとえば、任意のＦＨＴセット内の項目のインデックスを、Ｆ＊Ｒ、Ｆ＊Ｒ＋１、Ｆ＊Ｒ＋２．．．Ｆ＊Ｒ＋（Ｆ−１）のように計算することができ、ここでＦはＦＨＴセット内のＦＨＴ項目の数である。
【００３４】
各ＦＨＴ項目は、関連づけられたＡＩＣ行のセクタに記憶された命令のシーケンスについて前の実行履歴を記録するためのきわめて効率の高いフィールドを含み、このフィールドにはプログラムの複数の基本ブロックを入れることができる。フェッチ・サイクル中に本発明によって使用される場合、有効なＦＨＴ項目によって、複数のセクタがプロセッサによる実行のために基本ブロック実行の予測順序でただちに出力され、その際、プロセッサは、通常ならそれらの命令をメモリ内の異なる場所からフェッチするのに必要になるはずの必要時間を待たない。
【００３５】
本発明の教示によるプロセスは、各プロセッサ命令フェッチ・サイクルが（ＡＩＣヒットとＦＨＴヒットの両方を見つける）１つの有効ＦＨＴ項目を使用して、関連づけられたＡＩＣ行の有効セクタ内の命令をプログラムが必要とする「任意の」順序で出力することができるようにする。ＡＩＣヒットおよびＦＨＴヒットは、プログラムが前に実行され、そのＦＨＴ項目に記録される履歴を作成した後の時間のほとんどの時間に起こる可能性がある。
【００３６】
プロセッサがＦＨＴミスに遭遇した場合、プロセッサはそれにもかかわらず必要な命令を実行すると同時に、その実行の履歴を選択されたＦＨＴ項目のフィールドに記録し、その後は、ＦＨＴ項目が古くなってＦＨＴから除去される（すなわち項目は古くなると無効化される）ことがないだけ頻繁にヒットが起こる限り、それと同じシーケンスの命令が再度実行されるたびにＦＨＴヒットが起こる。
【００３７】
有効なＦＨＴ項目は、選択されたＡＩＣ行Ｒ内の選択されたセクタを出力するためにＡＩＣ内のセクタのそれぞれの列をつなぐセクタ・ゲートを使用可能にする。セクタ・ゲートは、ＦＨＴ項目に記録された順序で使用可能にされ、それによって、それぞれのＦＨＴ項目で示されているどのような順序でも、選択されたセクタ内の命令のシーケンスをプロセッサによって実行するためにアウトゲートされる。
【００３８】
好ましい実施形態は、各ＦＨＴ項目内に「セクタ配列」フィールドと「セクタ分岐結果」フィールドを有する実施態様においてその実行履歴を効率的に記録し、サブフィールド・インデックスによってこれらのフィールドの履歴内容が関係づけられ、一方のフィールド内のサブフィールドによってセクタが識別され、他方のフィールド内のサブフィールドによって分岐結果（すなわち識別されたセクタに分岐命令が含まれているか否か、含まれている場合はその分岐が成立か不成立か）が示される。好ましい実施態様は２つのフィールドを使用するが、代わりに単一のフィールドを使用して同じ履歴情報を含めることもできることは明らかである。
【００３９】
ＦＨＴ項目に記録された履歴シーケンスは、同じプログラム中の前の実際の実行シーケンスに基づく、何度も繰り返されると予測される命令の予測シーケンスである。
【００４０】
本発明は、同じＡＩＣ行に記憶された命令の有効セクタについて異なる実行シーケンス履歴を同時に記録することができる。これは、複数のＦＨＴ項目に同じＡＩＣ行を関連づけることによって行われ、好ましい実施形態では複数のＦＨＴ項目から成るセットを各ＡＩＣ行に関連づけることによって実現される。たとえば、各ＦＨＴセットに４つのＦＨＴ項目がある場合、４つの項目のそれぞれの項目が異なるセクタ・シーケンス履歴を記録することができ、それによって、同じセット内の４つの異なる項目を使用することにより、同じセクタの命令をそれらのセクタの４つの異なるシーケンスで実行することができる。
【００４１】
各ＦＨＴ項目が単一のシーケンスのセクタ・アウトゲートを記録するため、ＦＨＴセットは多くの異なるシーケンスを記録することができる。新たに発生するシーケンスの変形には、ＦＨＴセット内の最も長期間使用されなかった有効項目を無効化して置き換えることによって対応することができる。このような置き換えは、ＦＨＴセット内の各ＦＨＴ項目に最長時間不使用（ＬＲＵ）フィールドを設けて置換選択を可能にすることによって可能になる。
【００４２】
プロセッサ動作中に使用するためのＦＨＴ項目の選択は、新規なＦＨＴ選択プロセスによって行われ、これには、予測ベクトルとＦＨＴセット内のＦＨＴ項目中の履歴フィールドとの突き合わせが含まれる。予測ベクトルは、フェッチ・サイクルによってＦＨＴ項目に関係づけられる。予測ベクトルは、フェッチ・サイクルの最初に分岐予測機構（従来技術が備えるタイプのものとすることができる）によって生成され、セクタの存在を認識しない。本発明は、このベクトルを、関連づけられたＦＨＴセット内の有効ＦＨＴ項目に記憶されたセクタ化履歴と突き合わせる新規なプロセスを提供する。ＦＨＴ項目フィールドに、突き合わせプロセスが、識別されたセクタ内に非分岐命令があることを示すセクタ情報をスキップして、識別されたセクタ内に分岐成立か不成立かを問わず分岐命令があることを示すセクタ情報にのみ焦点を絞ることができる形で情報が記録される。
【００４３】
好ましい実施形態は、命令順序づけバッファ（ＩＳＢ）を使用して、ＦＨＴ項目選択コントロールと起動コントロールに応答してＦＨＴ項目内に記録された履歴シーケンスでＩキャッシュから命令を受け取る。しかし、命令は、本発明により、その命令の必要なシーケンスでアウトゲートされ、命令実行パイプラインに直接送るなど、ＩＳＢとは異なる他の実行実体にアウトゲートすることができる。
【００４４】
本発明では、フェッチ・サイクル完了コントロールを設けて、ＦＨＴ項目に最後のサブフィールドが記録された時点など、ＦＨＴ項目が記録可能な順序づけ履歴をすべて記録し終えた時点を示す。
【００４５】
ＦＨＴ記録プロセスの動作は、任意のＦＨＴセット内の最初の項目と、同じセット内の後で生成された項目とでは若干異なる。その理由は、最初の項目は関連づけられたＡＩＣ行がプロセッサ・メモリからコピーされた命令（この命令は同時に実行するために迂回することもできる）で一杯になったときに生成されるためである。セット内の他のＦＨＴ項目は、後で、同じＡＩＣ行内の前に満たされたセクタのために異なる実行シーケンスが発生されたときに生成される。
【００４６】
本発明は、任意の選択されたＡＩＣ行内のセクタについて任意のシーケンスのアウトゲートをサポートすることができ、特別な状況では、複数のセクタのうちのいずれのセクタが最初にアウトゲートするセクタであるかを示すことが望ましい。これは、各ＦＨＴ項目内に「先頭命令アドレス」フィールドを設けて、セクタのシーケンス内でどのセクタを最初にアウトゲートすべきであるかを示すことによってサポートされる。
【００４７】
（しばしばターゲット分岐の計算などいくつかの処理ステップを回避することによって）記録された履歴シーケンスがアウトゲートされた後で次のＡＩＣ行を選択する際の時間を節約するために、本発明は各ＦＨＴ項目内に「次命令フェッチ・アドレス」フィールドを設け、プロセッサはそこから次の命令が入っている可能性が高い次のＡＩＣ行をただちに判断することができる。
【００４８】
【発明の実施の形態】
略語の定義：
ＡＩＣ＝位置合わせ命令キャッシュ
ＦＨＴ＝フェッチ履歴テーブル
Ｒ＝ＡＩＣ内の選択された行
ＦＨＴセット＝選択されたＡＩＣ行に関連づけられたＦＨＴ項目のセット
Ｆ＝ＦＨＴセット内の選択された項目
ＩＦＡＲ＝命令フェッチ・アドレス・レジスタ（プロセス中の現行命令の記憶アドレスを含む）
ＬＲＵ＝ＦＨＴ項目内またはＡＩＣ行内の最長時間不使用標識
有効ビット＝ＦＨＴ項目内またはＡＩＣ行内のフィールド（その項目または行が有効であり使用可能であることを示す）
ＩＳＢ＝命令順序づけバッファ（ＡＩＣの出力セクタから実行順序で命令を受け取るバッファ）
ＭＩＳＳ＝キャッシュまたはテーブル内に検索項目が見つからない。
ＨＩＴ＝キャッシュまたはテーブル内に検索項目が見つかった。
Ｂ＝ベクトル・ビット・カウント
Ｓ＝セクタ識別子カウント
Ｃ＝サブフィールド識別子カウント（ＦＨＴセット内で最初の項目が生成された後で、ＦＨＴ項目のＦＨＴ「セクタ配列」フィールドと「セクタ分岐結果」フィールド内のサブフィールドを探し出す）
"ｍ"＝各実行順序予測における予測基本ブロックの数
Ｌ＝ＡＩＣセクタ内の現行命令数
ＬＴ＝各ＡＩＣセクタ内の命令位置の合計数
ＳＴ＝各ＡＩＣ行内のセクタ数
ＮＯＰ＝ノー・オペレーション・コード（ＮＯＰコードを含む場所には命令が存在しないことを示す）
ＲＴ＝ＡＩＣ内の合計行数
ＦＴ＝各ＦＨＴセット内の合計項目数
【００４９】
直接マップＦＨＴ＝各ＦＨＴセット内の項目のＦＨＴ中の場所を、各ＡＩＣ行のＦＨＴ項目のＦＴ数を使用するなどして、ＡＩＣ内の対応する行の場所から計算することができる。（すなわち、各ＦＨＴセット内の項目のＦＨＴ内のインデックスを、ＡＩＣ内の対応する行ＲのインデックスＲから判断する。たとえば、ＦＨＴ内の各セットが４個のＦＨＴ項目（ＦＴ＝４）を含む場合、その４個のＦＨＴ項目のインデックスは、４＊Ｒ、４＊Ｒ＋１、４＊Ｒ＋２、および４＊Ｒ＋３となる。）非直接マップＦＨＴ（ＡＩＣ行とＦＨＴ項目との間に厳密なインデックスがない）、各ＦＨＴ項目に「先頭命令アドレス」フィールドが必要な場合がある。
【００５０】
ＡＩＣヒット：ＩＦＡＲアドレスが「Ｉ」の場合、５１２項目の直接マップ位置合わせＩキャッシュ内のヒットを判断するには、まず、ＡＩＣ行番号「Ｒ」をＩ（５１２を法として）と判断する。ＡＩＣ項目「Ｒ」が有効で、命令がＩＦＡＲアドレス「Ｉ」に入っている場合（この情報はＩキャッシュ・ディレクトリに記憶されている）、ＡＩＣヒットがある。好ましい実施形態では、ＡＩＣはＡＩＣ行へのアクセスを管理するディレクトリを有し、ＩＦＡＲアドレスを使用する必要なＡＩＣを選択するために従来の合同クラス・アルゴリズムを使用する。ＡＩＣはセットアソシアティブであってもなくてもよい。セットアソシアティブの場合、ＡＩＣ内の各合同クラスは複数の行（一般には２または４行）を有し、そこからＩＦＡＲアドレスの識別部分（たとえばＩＦＡＲアドレスの事前定義されたビット位置）と、それぞれの行が記憶され、検証されたときにどのようなＩＦＡＲアドレスが存在していたかを表す各ＡＩＣ行内に記憶された対応するアドレス部分とを比較することによって、必要な行を選択する。合同クラス内の行のうちの１つの行について比較−同等条件が見つかった場合、ＡＩＣヒットになる。アクセスした合同クラス内のすべての行について比較−不等条件が見つかった場合は、ＡＩＣミスになる。
【００５１】
ＦＨＴヒット：現在ＩＦＡＲに入っているアドレスを有する命令が入っているＡＩＣ行アドレス「Ｒ」を判断する。ＦＨＴヒットの場合、ＦＨＴの行４＊Ｒ〜４＊Ｒ＋３内の有効なＦＨＴ項目を調べる。これらのＨＦＴ項目のいずれかにＩＦＡＲアドレスと一致する「先頭命令アドレス」フィールドがあり、「セクタ分岐結果」フィールドが「結果予測ベクトル」と一致する場合、ＦＨＴヒットがある。「セクタ分岐結果」を「結果予測ベクトル」と比較するとき、「セクタ分岐結果」フィールドのサブフィールド内のアスタリスク（「＊」）は無視される。（たとえば、「セクタ分岐結果」フィールドが「＊０＊１」で「結果予測ベクトル」が「０１１１」の場合、「セクタ分岐結果」は（「＊」を無視して）「０１」であり、これは「結果予測ベクトル」の接頭部であるため、一致がある。）
【００５２】
ハードウェアおよび全般的動作の説明
本発明は、新規なプロセスを使用する新規な装置を有する。本発明は、予測ベクトルを生成し、それを新規なハードウェア・テーブル内の項目を含む新規な履歴と突き合わせて、順序外れ命令シーケンスが位置合わせされる新規なセクタ化命令キャッシュからの順序外れ命令シーケンスの実行のためのアウトゲートを制御する。本発明の動作の結果、単一のフェッチ・サイクルで命令の複数の順序外れシーケンスの基本ブロックを予測的に順序づけすることにより、それらの命令を含むプログラムの実行速度が向上する。
【００５３】
本発明は、複数の予測命令ブロックを並列して実行するが、その予測分岐命令を、同じ分岐命令の実際の実行ターゲットと絶えず照合し、実行された予測シーケンスがプログラムが必要とする命令シーケンスから逸脱することがあるかどうかを判断する。本発明は、実行不一致コントロール１９を使用して、そのような分岐ターゲットの逸脱を検出し、出力修正信号を生成する。この修正信号は命令ストリームを問題を起こしている命令アドレスから再開させる。実行不一致コントロール１９の構造は、当技術分野で周知であり、したがって本明細書では詳細には示さない。
【００５４】
図１に、本発明の好ましい実施形態を備えるためにプロセッサにおいて必要なハードウェア要素である、好ましい実施形態のハードウェア構成を示す。これは、「位置合わせ命令キャッシュ」（ＡＩＣ）１１と、ＡＩＣディレクトリ１２と、「フェッチ履歴テーブル」（ＦＨＴ）１４と、「命令フェッチ・アドレス・レジスタ」（ＩＦＡＲ）１６と、「分岐予測ユニット」１７と、「命令順序づけバッファ」（ＩＳＢ）１８と、実行不一致コントロール１９とを含む。図２に、ＡＩＣディレクトリ項目２２を示し、図３にＦＨＴ項目をより詳細に示す。ＡＩＣ行は、ＡＩＣ内のインデックス０〜５１１に配置されている。ＦＨＴ項目はＦＨＴ内のインデックス０〜２０４７に配置されている。ＡＩＣ内の任意の選択された行のインデックスＲを使用して、ＦＨＴ１４内のＦＨＴインデックス４＊Ｒ、４＊Ｒ＋１、４＊Ｒ＋２、および４＊Ｒ＋３にある４つのＦＨＴ項目から成る関連づけられたＦＨＴセットを探し出す。
【００５５】
各ＡＩＣ行が複数のセクタに分割され、図１のＡＩＣ内の各行には４つのセクタが図示されている。いずれかのセクタに有効な命令が含まれている場合、それらの命令はプロセッサ・メモリ内で常に順次に配置され、各ＡＩＣセクタＳ内の先頭の命令は、関連づけられたＡＩＣディレクトリ項目のそのセクタの「セクタＳ先頭アドレス」フィールドに入っている記憶場所を有する。
【００５６】
各ＡＩＣディレクトリ項目は、４つの「セクタＳ先頭アドレス」フィールドと、４つのセクタ・アドレス・フィールドのそれぞれについてビットが入れられる「有効」フィールドとを含む５つのフィールドに分割されている。したがって、各セクタ・アドレスには、有効な場合は、関連づけられたＡＩＣ行２１内の対応するセクタ内の先頭の命令のアドレスが含まれる。
【００５７】
図４に、ＦＨＴ１４内の４つのＦＨＴ項目２４Ａ、２４Ｂ、２４Ｃ、および２４Ｄから成るＦＨＴセットを示す。各ＦＨＴセットには、ＡＩＣ行が関連づけられている。任意のセット内の４項目を、ＦＨＴ（０）、ＦＨＴ（１）、ＦＨＴ（２）、およびＦＨＴ（３）と呼ぶことができる。またはこれらをそれぞれのＦＨＴインデックスで呼ぶこともできる。
【００５８】
ＩＦＡＲ１６内のアドレスは、関連づけられたＡＩＣディレクトリ項目２２によってアドレスされた４つのセクタＳ（０、１、２、または３）のうちの１つを同時に、探し出し、関連づけ、選択することができ、対応するＦＨＴセットを選択することができる。ＡＩＣ行２１とそれに関連づけられたＡＩＣディレクトリ項目２２は、そのセクタ・アドレスのうちのいずれかのセクタ・アドレスが選択されると選択されたと見なされる。
【００５９】
ＩＦＡＲが最初にＦＨＴ１４内の４つの項目２４から成るセットを選択すると、ＦＨＴセット内の最初のＦＨＴ項目ＦＨＴ（０）が最初に選択される。その後、このセット内のＦＨＴ項目の選択は、たとえばＦＨＴ（０）−ＦＨＴ（１）−ＦＨＴ（２）−ＦＨＴ（３）の順に選択し、ＦＨＴ（０）に戻るというように、ラウンド・ロビン方式で行われる。ＦＨＴ１４は、そのＦＨＴ項目の場所がＡＩＣ内の行アドレスＲから直接判断されるため、「直接マップ」される。関連づけられたＡＩＣディレクトリ項目がディレクトリ内の同じアドレスＲにある。すなわち、行Ｒのインデックスによってそれに関連づけられたディレクトリ項目を直接選択することができ、関連づけられたＦＨＴセット内の関連づけられた各ＦＨＴ項目のアドレスを直接計算することができる。
【００６０】
好ましい実施形態では、ＡＩＣには５１２の行２１が含まれる。各行２１は４個のセクタを含み、各セクタは８個の命令記憶場所を含み、それによって各セクタにはシステム記憶階層（図示せず）内に記憶された命令の任意のラインからフェッチされた最大８個の命令を記憶することができる。ＦＨＴ１２は、５１２セットに分割された２０４８個の項目２２を含み、各セットはＡＩＣ内のそれぞれの行２１に関連づけられた４つの項目を含む。各セット内の４つのＦＨＴ項目２２は、ＦＨＴ内の、ＡＩＣ１１内の関連づけられた行２１のインデックスによって判断されたインデックス位置に配置される。セット内の４つの項目の場所は、ＡＩＣ内で関連づけられた行が選択されると決定する。選択された行はＡＩＣ内のインデックスＲを有し、本明細書では行Ｒと呼ぶ。行ＲのインデックスＲによって、ＦＨＴ内のインデックス４＊Ｒ、４＊Ｒ＋１、４＊Ｒ＋２、および４＊Ｒ＋３にそれぞれ配置された４つのＦＨＴ項目を含むそれに関連づけられたＦＨＴセットの場所が決まる。好ましい実施形態で使用される規則は、ＩＦＡＲアドレスにハッシュ・アルゴリズム（従来の技術で周知のキャッシュ行選択技法）を適用し、本明細書で使用する行アドレスＲを生成してＡＩＣディレクトリ内の行Ｒを選択するものである。この技法は、従来の技術では「合同（congruence）クラス」キャッシュ行選択と呼ばれることがある。
【００６１】
システム・メモリ階層からフェッチされ、ＡＩＣの１つまたは複数の行にコピーされる各基本ブロックのために「セクタ位置合わせ」機能を備える。この位置合わせは、コピーされた各基本ブロックの最初の命令を常にＡＩＣセクタの先頭命令位置、たとえばセクタ内の８個の命令記憶位置のうちの位置１に書き込むことによって行われ、本明細書ではこの位置をセクタの左端であるものとする。基本ブロックは、任意の行の４つのセクタのうちのいずれかのセクタの先頭位置から始まることができる。基本ブロックは、任意の数の命令を有することができ、したがって単一のセクタ内の命令位置の数よりも少ないか、等しいか、より多いことがある。基本ブロックが、セクタの８個未満の位置に記憶される場合、セクタ内の基本ブロックによって使用されない各命令記憶域（その基本ブロックを終わらせる分岐命令の右側にある）は、各未使用命令位置に「無命令」（ＮＯＰ）コードを書き込むことによって埋められる。基本ブロックがセクタ・サイズと等しい（たとえば８命令）場合、その終わりの分岐命令はセクタ内の最後の命令位置に入れられ、そのセクタにはＮＯＰは書き込まれない。しかし、基本ブロックがセクタを超える（たとえば８以上の命令を有する）場合、その基本ブロックの命令は、基本ブロックがいずれかのセクタで終わるまで、同じＡＩＣ行の次の各セクタに順次に記憶される。基本ブロックがその行の最後のセクタを超える場合は、ＡＩＣの別の行内に続き、（別の行に記憶される基本ブロックの最初の命令の）ＩＦＡＲアドレスは、関連づけられた４個のＦＨＴ項目のセット内の選択されたＦＨＴ項目内の「次ＩＦＡＲアドレス」フィールドに記憶される。基本ブロックは、ＡＩＣ内の１つまたは複数の行内の任意の数のセクタを占有することができる。また、基本ブロックは１つの命令（分岐）しか持たないこともでき、その命令はセクタの先頭の位置にのみ配置される。
【００６２】
「命令順序づけ」バッファ１８は、ＡＩＣから選択的に出力される命令のセクタを受け取る。セクタは、プログラムが必要とするいずれかの順序でＩＳＢ１８に出力され、命令をプロセッサの実行パイプラインに供給するために任意の実行プログラムが必要とするいずれかの順序で、基本ブロックに命令の順序が与えられる。命令は、プログラムのために実行する必要があり、それらの命令がＡＩＣ行内に見つからないときに、オン・デマンドでメモリからフェッチされる。ＡＩＣには多数の行２１が含まれ、各行はセクタ０、１、２、および３を含む。各セクタは８個の命令位置を含み、そこに１〜８命令の一連の命令を記憶することができる。
【００６３】
「実行不一致コントロール」１９は、（いずれかの実行された分岐命令によって供給された）実ターゲット・アドレスが、分岐予測ユニット１７によって供給された対応する予測ターゲット・アドレスと不一致か否かを検出する。コントロール１９でこのような不一致が検出されると、プロセッサは、ＩＳＢを含めて、実行パイプライン内の実行シーケンスをリセットし、それによってプロセッサが、現行の動作に割り込んで正しいアドレスをＩＦＡＲ１６にロードすることによって、プロセッサ命令ストリームが不一致になった実ターゲット・アドレスまでさかのぼるようにする。したがって、各分岐命令のターゲット・アドレスは、予測された分岐ターゲットを、その分岐命令（プログラム中で最後に実行された基本ブロックを終わらせ、次の基本ブロックのターゲット・アドレスを供給する分岐命令）のプロセッサ実行によって生成された対応する実ターゲットと比較することによって検査される。この比較によって、予測ターゲット・アドレスがそれに対応する実ターゲット・アドレスと不一致の場合、プロセッサにおいて非同期割込み信号が供給され、現行フェッチ・サイクルを終了し、ＩＦＡＲに実ターゲット・アドレスをロードし、命令ストリームを修正されたターゲット・アドレスまでさかのぼる動作４０３からフェッチ・サイクルを再開する。したがって、プロセッサは常に正しい命令・シーケンスを入手する。ただし、プログラムの命令順序づけにおける誤った予測のためにわずかな時間損失の犠牲は払われる。しかし、統計的研究により、このような予測誤りは比較的まれであることがわかっている。
【００６４】
図２に、５フィールドＡＩＣディレクトリ項目２２が示されている。この項目は、ＡＩＣディレクトリ項目２２内の４つの「セクタ・アドレス」フィールドの各フィールドと、関連づけられたＡＩＣ行２１内のアドレス指定されたセクタとの有効／無効をそれぞれ示す４ビットを含む、「有効ビット」フィールドを有する。１は対応する「セクタ・アドレス」フィールドとそのアドレス指定されたセクタとが有効であることを示し、０は無効であることを示す。最初は、４つの有効ビットすべてが０に設定され、ディレクトリ項目全体とそれに関連づけられたＡＩＣ行のすべてのセクタが無効であることを示す。項目２２は、４つの「セクタＳアドレス」フィールドも有し、それぞれ、関連づけられたＡＩＣ行Ｒ内の４つのセクタに対応する。各有効「セクタＳアドレス」フィールドには、それに関連づけられたセクタＳ内の最初の命令の仮想アドレス（またはその固有部分）が、ＩＦＡＲが使用できる形で入れられる。
【００６５】
図３に、各ＦＨＴ項目内のフィールドを示す。これは以下の通りである。
（１）有効フィールド：当該項目が有効（＝１）か無効（＝０）かを示す１ビット。
【００６６】
ＬＲＵフィールド：４つのＦＨＴ項目から成るそのＦＨＴセット内で当該ＦＨＴ項目がどの程度最近に使用されたかを以下のように示す２ビット。
最も長期間使用されなかったＦＨＴ項目        ＬＲＵビット＝「００」
２番目に最近に使用されたＦＨＴ項目    ＬＲＵビット＝「０１」
３番目に最近に使用されたＦＨＴ項目    ＬＲＵビット＝ｌ「１０」
最も最近に使用されたＦＨＴ項目        ＬＲＵビット＝「１１」
【００６７】
先頭命令アドレス：当該ＦＨＴ項目がそのために作成された命令シーケンスを開始する命令を有する選択されたＡＩＣ行内のいずれかのセクタ内の先頭の命令のアドレス。図４に示す例では、「セクタ先頭命令」フィールド内のＵが、セクタ配列シーケンス１、２、０によって表された命令シーケンス内の先頭命令アドレスを示す。Ｕは、当該ＦＨＴ項目の行に入れられるシーケンス内の先頭の命令のアドレスである。
【００６８】
セクタ分岐結果：このフィールドは４つのサブフィールドを有し、各サブフィールドには同じＦＨＴ項目の「セクタ配列」フィールド内のそれぞれのサブフィールドが関連づけられている。たとえば、２番目の「セクタ分岐結果」サブフィールドは、同じＦＨＴ項目の「セクタ配列」フィールド内の２番目のサブフィールドで識別されているセクタ内の分岐条件を示す。そのために、各「セクタ分岐結果」サブフィールドに１、０、または＊が入れられ、１は識別されているセクタが「成立」分岐で終わることを示し、０は「不成立」分岐で終わることを示し、＊は識別されたセクタ内に分岐命令が存在しないことを示す。
【００６９】
したがって、各サブフィールドは、同じサブフィールド・インデックスを有する同じＦＨＴ項目の「セクタ配列」フィールド内の対応するサブフィールド内にセクタ番号によって識別されているセクタ内の分岐条件を示す。すべてのサブフィールドが有効である必要はなく、有効サブフィールドは、関連づけられた「セクタ配列」フィールド内の最後の有効サブフィールドの後（右）の０などの特殊文字によって表される。したがって、任意のＦＨＴ項目内で可変数の分岐を扱うことができ、その数はそのＦＨＴ項目が生成された時点で用いられた「ｍ」分岐予測における分岐命令の数によって決まる。
【００７０】
セクタ配列：このフィールドには４つのサブフィールドがある。各サブフィールドには、０〜４の数字を入れることができ、０〜３はそれぞれのセクタ０〜３の識別子であり、４は無セクタを示す。サブフィールドの左から右の順序は、現行フェッチ・サイクル中に命令順序づけバッファ（ＩＳＢ）に転送される識別されたセクタのシーケンスを示す。たとえば、このフィールドにセクタ識別子「１、２、０、４」がある場合、セクタ１、２、および０がこの順序でＩＳＢに転送される。最後のサブフィールドの４は、現行フェッチ・サイクル中に（４で表された）最後のサブフィールドについて、ＩＳＢに転送される命令がないことを示す。他の例を挙げると、「２３２１」は、単一フェッチ・サイクル中に、セクタ２、３、２の次に１が（この順序で）ＩＳＢに転送されることを示す。
【００７１】
次ＩＦＡＲアドレス：このフィールドは、次のフェッチ・サイクルで使用されるＩＦＡＲアドレスを示す。
【００７２】
図４で、セクタに「成立」分岐が入っている場合、その成立経路は、別のセクタの先頭にある分岐のターゲット、または別のＡＩＣ行への「成立」と書かれた曲がった矢印で示されている。成立経路は実際には同じＡＩＣ行内のいずれかのセクタまたは別のＡＩＣ行内のいずれかのセクタの先頭に行く。分岐が「不成立」の場合、図４では不成立経路は次の後続セクタへの水平の矢印で示されている。セクタに分岐が入っている場合、そのセクタ内でその分岐に続く実際の命令がなく、その分岐が成立または不成立であって、セクタ内の最後の命令内にない場合、セクタ内の残りの各命令位置はＮＯＰコードで埋められる。
【００７３】
本発明によって行われる各フェッチ・サイクルは、そのアドレスがＩＦＡＲ１６に設定されているプログラム中の命令から開始する。プログラムの少なくともＩＦＡＲ命令を含む部分が前に実行されていることと、プログラムの過去の分岐履歴がＩＦＡＲ命令から維持されており、それによって分岐予測ユニット１７がプログラムによって実行された過去の「ｍ」個の分岐を示す予測ベクトルを供給することができることを前提とする。その後、分岐予測ユニット１７は、ＩＦＡＲアドレスを使用して「分岐結果予測ベクトル」を供給することによって、次の「ｍ」個の条件分岐の予測を行う。このベクトルは、最大「ｍ」ビットのうちの各ビットがプログラム中の分岐のシーケンスを表すビット・ストリングであり、各ビットは分岐成立を表す場合は１状態を有し、分岐不成立を表す場合は０状態を有する。これらの分岐は、プログラム中の基本ブロックの終わりで発生する。
【００７４】
本発明は、現行「分岐結果予測ベクトル」を、現行ＩＦＡＲアドレスによって判断されたＡＩＣ行Ｒに関連づけられたＦＨＴセットのＦＨＴ項目内の「セクタ分岐結果」フィールドと突き合わせる。ベクトルで予測されている分岐のシーケンスが、ＦＨＴセット内のいずれかのＦＨＴ項目の「セクタ分岐結果」フィールドで識別されている分岐のシーケンスと同じ場合、ＦＨＴヒットが得られる。その場合、関連づけられ行内の複数のセクタを選択して、ヒットＦＨＴ項目の「セクタ配列」フィールド内の複数のサブフィールドによって指定された順序でＩＳＢにアウトゲートすることができる。ＩＳＢ内の命令のシーケンスがプロセッサによって実行され、プログラムが必要とする順序であるか否かが検査されて予測の正しさが検証される。
【００７５】
本発明の結果、プログラムの実行シーケンス中にある非順次配置命令の高速実行が実現される。すなわち、本発明は、命令順序づけ予測が９５パーセント以上の確度を有することを利用し、それによって９５パーセント以上の時間にわたり、予測されたシーケンスによって最大「ｍ」個の複数の非順次配置基本ブロックの即時実行が可能になり、従来技術のプロセッサでは必要であったように、実行シーケンス中の非順次配置命令の低速フェッチを待つ必要がない。プログラムによって実行された命令のうちのきわめてわずかな割合の命令を、再実行によって修正するだけで済む。
【００７６】
たとえば、現行予測ベクトルに、「ｍ」予測における最初の２つの分岐について「０１」が入っており、図のＦＨＴセット内の４つの項目の中で突き合わせＦＨＴ項目が「セクタ分岐結果」フィールド「０＊１」を有することがわかった場合、突き合わせの目的ではアスタリスク＊は無視され、一致があることになる。その場合、この項目内の「セクタ配列」によって、関連づけられたＡＩＣ行から「命令順序づけバッファ」（ＩＳＢ）への命令の出力が制御される。ヒットＦＨＴ項目内の「セクタ配列」フィールドに「０１２４」が入っているものとすると、それによってセクタＶおよびＵ内の命令がこの順序でただちに出力され、現行フェッチ・サイクル中にＩＳＢに転送されることになり、これは、システム階層記憶域内のどの場所に非順次に入っているか、異なる命令記憶ラインに入っているかには関係がない。ヒットＦＨＴ項目内の「次ＩＦＡＲ命令」は、システム記憶内のどこに記憶されているかに関係なく、ＡＩＣ内のどこで次に必要な命令セクタが実行のためにただちに使用可能であるかを示す。たとえば、「次ＩＦＡＲ命令」フィールドにアドレスＹが入っているとする。その場合、Ｙはプログラム中の次に実行する命令のアドレスであり、従来の低速な方法で入手するのを待たずに、ＹがＩＦＡＲにロードされ、次の命令フェッチ・サイクルを開始するためにＩＦＡＲをセットする。
【００７７】
ＦＨＴセットの最初のＦＨＴ項目は、セクタが関連づけられたＡＩＣ行Ｒに書き込まれる間に生成され、それによって最初のＦＨＴ項目は、そのセクタが順次に（すなわち、その「セクタ配列」フィールドで示された０、１、２、３の順）出力されるべきであることを示す特別なセットアップを有することができる。したがって、このような最初のＦＨＴ項目がＦＨＴヒットを有する場合、最初のＦＨＴ項目は、０、１、２、３の順のセクタ出力順序を制御する。同じセット内の他のＨＦＴ項目は、その「セクタ配列」フィールド内の別の順序でセクタ出力を制御することになる。
【００７８】
具体的プロセスの説明
図５から図１４に、図１に示すハードウェアにおいて好ましい実施形態によって行われる特定のプロセスについて説明する。
【００７９】
図５および図６に、初期設定動作と基本ＦＨＴ制御動作を示す。最初の動作４０１で、プログラムはプロセッサでの実行を開始する。そのうちの本発明の新規なプロセッサ部分のみを示す。プロセッサの残りの部分は従来技術に見られるように構成され、動作するものとみなすことができる。次に、動作４０２で、プロセッサの命令フェッチ・アドレス・レジスタ（ＩＦＡＲ）が、プログラム中で最初に実行される命令の仮想アドレスをその中に設定することによってプログラム中の最初の命令アドレスに設定される。
【００８０】
次に、プロセッサは、次の動作４０３でＩＦＡＲアドレスを使用し、ＩＦＡＲによってアドレス指定された命令から初めて、プログラム中の次の「ｍ」個の分岐の予測を入手する。この予測動作４０３には、（本明細書で前述した）「分岐結果予測ベクトル」の入手が含まれる。予測とそのベクトルとを入手するプロセスによって、ＩＦＡＲ内の命令アドレスからプログラムの実行シーケンスで予測された最大「ｍ」個の基本ブロック内の命令をフェッチする試みのための本発明の「フェッチ・サイクル」が開始される。
【００８１】
各「分岐結果予測ベクトル」（ベクトル）が、対応する「ｍ」分岐予測内の分岐命令のシーケンスの結果にそれぞれ対応するビットのシーケンスとして生成される。ベクトル内の各ビットの部分は、「ｍ」予測内の対応する分岐命令の部分に対応し、ビットの値は分岐におけるプログラム動作の結果、すなわち、対応する分岐命令が成立と不成立のいずれとして予測されているかを示す。各「ｍ」予測内の基本ブロックは、ＩＦＡＲアドレスと予測された次の「ｍ」個の分岐とによって決まる。したがって、「ｍ」分岐予測最初の基本ブロックは、ＩＦＡＲアドレスにある命令から開始し、予測に含まれる分岐命令のターゲット・アドレスを使用して入手された最大「ｍ」個の基本ブロックを含む。本発明の通常の動作では、ＩＦＡＲアドレスは次に最後のフェッチ・サイクルの終わりに入手される。したがって、「ベクトル」はＡＩＣまたはＦＨＴを調べる前に生成される。
【００８２】
次に、プロセスは動作４０４に進み、ハッシュ・アルゴリズム（従来のものとすることができる）でこのＩＦＡＲアドレスを使用して、ＡＩＣディレクトリ内のドレスを生成し、ＩＦＡＲアドレスに関連づけられた行Ｒを探し出す。次に、ＩＦＡＲアドレスを、ＡＩＣディレクトリ項目Ｒ内の４つの「セクタ先頭アドレス」の各セクタ先頭アドレスと突き合わせて一致があるか否かを判断する。一致があれば、対応するＡＩＣ行Ｒの突き合わせセクタ内で「ＡＩＣヒット」が得られ、次の動作４０６に入る。一致が見つからない場合は、「ＡＩＣミス」になり、プロセスは図１１の入口点Ｆ（図１１の表記（Ｆ）で示す）に進む。
【００８３】
ＡＩＣヒットが発生した場合、新規な動作４０６によって、本明細書で前述した、選択されたＡＩＣ行Ｒとそれに関連づけられたＦＨＴセットとの新規な関係を使用して、関連づけられたＦＨＴセットにアクセスし、ＦＨＴヒットとミスのいずれが見つかったかが判断される。この判断を行うために、動作４０６では、ＦＨＴセット内のＦＨＴ項目の「セクタ分岐結果」フィールドに現行「分岐結果予測ベクトル」との一致がないか探索し、ＦＨＴヒットがあるかどうかを判断する。「分岐結果ベクトル」には、ＡＩＣ行内のセクタ数以下の分岐標識のシーケンスが含まれる。しかし、ベクトルの標識には任意のシーケンスのセクタ番号を入れることができる。
【００８４】
（予測における各分岐命令のビットを含む）予測ベクトルとセット内の各有効ＦＨＴ項目内の「セクタ分岐結果フィールド」との相違点は、各「セクタ分岐結果フィールド」には含まれるキャッシュ・セグメント化に関する情報が、ベクトルには含まれないことである。すなわち、予測ベクトルには、予測における分岐命令をそれぞれ表すビットのシーケンスのみが含まれるのに対し、各「セクタ分岐結果フィールド」には、同じＡＩＣ行内の、分岐命令を含まないセグメントに関する情報も含まれる。この相違は、この新規なプロセスのうちの次に説明する各動作に示す突き合わせプロセスで対処される。
【００８５】
ＦＨＴ項目は、そのＦＨＴ項目の「セクタ配列」フィールド内の単一のＡＩＣ行内のセクタの任意のシーケンスを示すことができ、各セクタは順次配置命令のみを含むことができ、行内の異なるセクタはアウト・オブ・シーケンス命令を含む。各ＦＨＴ項目の「セクタ配列」フィールドでは特定のセクタ出力シーケンスが示されるのに対し、同じＦＨＴ項目内の「セクタ分岐結果」フィールドはこれらの同じセクタの各セクタ内で発生する分岐結果状態（成立、不成立、または非分岐）を示す。他方、ベクトルには、分岐命令を含まないセクタ状態に関する情報が含まれない。したがって、この突き合わせプロセスは、各「セクタ分岐結果」フィールドにある各「非分岐」表示を使用して、同じ項目の「セクタ配列」フィールド内の対応するセクタ標識（ＦＨＴヒットと判断された場合にセクタからＩＳＢへの命令の出力を制御するために使用される）を無視する。
【００８６】
次の動作４０７で、ヒットＦＨＴ項目の「セクタ配列」フィールドと「次行アドレス」フィールドを入手する。「セクタ配列」フィールド内で、「セクタ標識」サブフィールドに左から右の順に順次にアクセスする。アクセスされた各「セクタ標識」サブフィールドに格納された各セクタ番号を使用して、現在選択されているＡＩＣ行内の指示されたセクタを選択し、フィールド内でリストされている順にアウトゲートする。アウトゲートされたセクタは、そのセクタに含まれている命令をＩＳＢに送り、ＩＳＢがプロセッサの実行パイプラインに供給する。選択されたＡＩＣ行からアウトゲートされるこのＦＨＴ順序化セクタによって、ＡＩＣ行内の基本ブロックを実行のために任意のセクタ順序で出力することができる。セクタのアウトゲートは、「セクタ配列」フィールドのサブフィールドの走査中に終わりまたは特殊文字に達すると停止する。
【００８７】
次に、動作４０８で、ＦＨＴ項目のＬＲＵフィールド内のＬＲＵビットを、このＦＨＴ項目がそのＦＨＴセット内で最も最近に使用された項目であることを示すように調整する。
【００８８】
次に、動作４０９で、ＩＦＡＲ内のアドレスを現行ＦＨＴ項目の「次ＩＦＡＲアドレス」フィールドに格納し、このプロセスが別のＡＩＣ行内で予測実行シーケンス中の次の命令を探し出すことができるようにする。次に、この命令順序づけプロセスは動作４０３に再び入り、ＩＦＡＲ内に設定された新しい命令アドレスに基づいて次の「ｍ」分岐予測を入手する。
【００８９】
選択されたＡＩＣ行内のすべてのセクタを、「セクタ配列」フィールドの制御下で任意のシーケンスでアウトゲートすることができるが、行のすべてのセクタより少ない数のセクタをアウトゲートすることもでき、この数は１セクタという少ない数であってもよい。したがって、各「セクタ配列」フィールド中で少なくとも１つの「セクタ標識」サブフィールド（左端）が使用され、最大ですべての「セクタ標識」サブフィールドを使用することができる。「セクタ配列」フィールドの１つまたは複数のサブフィールドに特殊文字をコード化して、アウトゲートしないセクタを示すことができる。したがって、ＦＨＴ「セクタ配列」フィールド内でアウトゲートに使用される「セクタ標識」フィールドの数は変動可能である。
【００９０】
セクタのアウトゲートが完了した後、ＩＦＡＲは「次行アドレス」に格納されているアドレスに設定されてから、プロセスは動作４０３に戻り、このプログラムのために次に実行する命令を含む別のＡＩＣ行からアクセスする。この次ＩＦＡＲアドレスによって、次の「フェッチ制御サイクル」が可能になる。
【００９１】
本発明の動作は、前述したような方式で各サイクルが次の「ｍ」予測によって開始される連続したフェッチ制御サイクル中にＡＩＣヒットとＦＨＴヒットが発生した場合に最も速くなる。したがって、ヒットのある各フェッチ制御サイクルによって、最速プロセッサ命令実行のために、ＡＩＣからプロセッサの実行プロセスに複数の命令の非順次配置基本ブロックをただちに供給することができる。
【００９２】
動作４０４でＡＩＣミスが発生した場合、プロセスは図７に進み、動作５０１を実行する。図７の動作５０１で、セクタ・カウントＳを０（ゼロ）に設定して、選択されたＡＩＣ行Ｒの最初のセクタを示す。Ｓは、現行ＡＩＣ行Ｒ内の先頭（左端）セクタを選択するように、最初は０に設定される。また、ベクトル分岐カウントＢも０に設定され、「分岐結果予測ベクトル」内の先頭ビットを指すインデックスを示す。Ｂのこの最初の設定は、ＩＦＡＲ内の現行アドレスにある命令に続く最初の分岐命令を表すベクトル内の先頭ビットの位置を示す。Ｂは、分岐成立か不成立かを示すセクタ・サブフィールドと比較されるベクトル・ビットの位置を示すが、このベクトル・ビットは比較プロセスでスキップされる非分岐命令標識を含むセクタ・サブフィールドとは比較されない。
【００９３】
次に、動作５０２で、たとえばハッシュＩＦＡＲアドレスを使用して、ＡＩＣ行Ｒを選択する。また、この動作では、それに関連づけられたＦＨＴセットも選択し、そのセット内の４つのＦＨＴ項目がすべて無効化される。
【００９４】
次に、動作５０３で、関連づけられたＦＨＴセット内の最初の項目ＦＨＴ（０）を現行ＦＨＴ項目Ｆとして選択する。次に、動作５０４で、選択された「最初の」ＦＨＴ項目Ｆの「先頭命令アドレス」フィールドにＩＦＡＲアドレスを格納して、このＦＨＴ項目が再び使用される場合にセクタ０が最初にＩＳＢに出力されるセクタであることを示す。
【００９５】
好ましい実施形態は、ＡＩＣミス時に、セットのうちの最初のＦＨＴ項目であるＦＨＴ（０）のみが生成される。ＦＨＴミス時に、セット内の他のＦＨＴ項目ＦＨＴ（２）．．．ＦＨＴ（ＦＴ）のうちのいずれかが生成される。合計ＦＨＴ項目数ＦＴは、経験に基づいて決定された数であり、ＦＴの値が高いほど、関連づけられたＡＩＣ行の各ＦＨＴセット内で表すことができる実行シーケンスの数が多く、ＦＨＴセット内でいくつかのＦＨＴ項目が使用されない可能性も高くなるということを考慮している。ＦＴの値が低いほど、ＦＨＴミスが発生する可能性が高くなり、その結果、本発明の使用で得られるプログラム実行効率が低下する。直接マップＦＨＴのＦＴの値は、ＦＨＴ項目数をＡＩＣ内の行数で割ることによって得ることができる。この場合、ＦＨＴ内の項目数はＡＩＣ内の行数の整数倍である。次に、それぞれのＡＩＣ行（ＡＩＣ内のインデックスＲの位置にある）に、ＦＨＴインデックスＦ＊Ｒ、Ｆ＊Ｒ＋１、Ｆ＊Ｒ＋２、．．．Ｆ＊Ｒ＋（ＦＴ−１）位置に配置されたＦＨＴ項目を含むＦＨＴセットを関連づける。これらのＦＨＴ項目はＦＨＴ項目Ｆ（０）、Ｆ（１）．．．Ｆ（Ｆ）として示すことができる。好ましい実施形態では、ＦＴ＝４であり、それによってＡＩＣ内の各行に４つのＦＨＴ項目が関連づけられ、これらはＦＨＴ項目ＦＨＴ（０）、ＦＨＴ（１）、ＦＨＴ（２）、およびＦＨＴ（３）のＦＨＴインデックス４＊Ｒ、４＊Ｒ＋１、４＊Ｒ＋２および４＊Ｒ＋３位置に配置される。現在選択されているＦＨＴ項目をＦＨＴ項目Ｆと呼ぶ。
【００９６】
動作５０６で、システム・メモリ階層内のメモリ・ラインから、ＩＦＡＲ内のアドレスで位置指定された命令を（ＩＦＡＲアドレスから開始して）順次にフェッチする。フェッチは、分岐命令が検出されるまで、またはラインの終わりに達するまで、そのメモリ・ラインで続けられる。「セクタ分岐制御ビット」ＨをＨ＝１に設定して現行セクタ内で分岐命令が検出された時を示すことができる。または、セクタ内で分岐命令が検出されなかったときはＨ＝０に設定する。したがって、最大ＬＴ（各セクタ内の命令記憶位置の数）がメモリ・ラインから現行セクタにコピーされる。ＬＴ数より少ない命令がセクタにコピーされた場合、セクタ内の分岐命令の右側にある残りの各命令場所にＮＯＰコードが書き込まれる。命令カウントＬは、セクタ内にコピーされた命令の数をカウントする。ＮＯＰはカウントＬから実行され、分岐制御ビットＨは、セクタに分岐命令が含まれているかいないかを示す。
【００９７】
動作５０８で、フェッチされた命令がＩＳＢと、選択されたＡＩＣ行Ｒ内のＳ番目のセクタの両方にコピーされる。その際、その先頭セクタ０がフェッチされた最初のブロックを受け入れる。Ｓが最初のＦＨＴ項目を生成するプロセスを通して各反復時に１つずつ増分されるため、セクタはフェッチされた命令をコピーするために０、１、２、３の順に選択される。たとえば、好ましい実施形態では８個の命令位置（ＬＴ＝８）のセクタ・サイズを有し、１つのセクタに８未満の命令が書き込まれる場合（Ｌ＜８）、分岐命令とセクタの右側との間のセクタの命令地位にＮＯＰ埋込みが行われ、それによって１〜８個の命令から成る命令シーケンスが、常にＡＩＣの行内のセクタの左側に位置合わせされるようになる。
【００９８】
次に、動作５０９で、ＩＦＡＲアドレスを選択されたＡＩＣディレクトリ項目Ｒの「セクタ１アドレス」フィールドに格納する。
【００９９】
次に、プロセスは図９に進み、関連づけられたＦＨＴセット内の選択されたＦＨＴ項目Ｆを部分的に生成して、現行ＦＨＴ項目Ｆで表されるシーケンス内の現行セクタＳを表す。
【０１００】
動作６０１で、現行ＦＨＴ項目Ｆの「セクタ配列」フィールド内のＳ番目のサブフィールドにＳを格納する。これによって、ＡＩＣ行のセクタ０内の命令が、このＦＨＴ項目によって示される出力シーケンスで出力される最初のセクタとして示される。
【０１０１】
動作６０１で、現行セクタ・カウントＳを、生成する現行ＦＨＴ項目の「セクタ配列」フィールドのＳ番目のサブフィールドに格納する。このセクタ・カウントＳは、同じＦＨＴセット内の「セクタ配列」フィールドと「セクタ分岐結果」フィールドの両方でサブフィールド・インデックスとして使用される。いずれのＡＩＣ行内でも、命令は、メモリ内にある「場所シーケンス」ではなく、プログラムの基本ブロックの「実行シーケンス」でメモリからフェッチされ、選択されたＡＩＣ行のセクタに書き込まれる。行に書き込まれるこのセクタ順序は、その行のＦＨＴセット内の最初のＦＨＴ項目の「セクタ配列」フィールドに反映され、それによって、プログラム内の同じシーケンスの後続の実行を最初のＦＨＴ項目によって識別することができるようになり、それによってそのシーケンスでＩＳＢに迅速に出力することができる。たとえば、好ましい実施形態では、ＦＨＴセット内の最初の各ＦＨＴ項目によって、セクタ出力順序が０、１、２、３として識別される。
【０１０２】
次に、動作６０２で、セクタＳ内に分岐命令が格納されているか否かを判断する。これは、「セクタ分岐制御ビット」Ｈが、セクタＳに分岐命令が格納されていることを示すＨ＝１に設定されているか否かを調べることによって行うことができる。１に設定されている場合、次の動作は６０４である。したがって、ビットＨの状態は、現行セクタＳについて分岐命令または非分岐命令が検出されたか否かを示す。
【０１０３】
Ｈが１ではないと判断された場合、Ｈ＝０であり、セクタＳ内で分岐が検出されなかったことを示し、動作６０３が行われる。動作６０４でＩＦＡＲ内のアドレスにカウントＬを加えて新しいＩＦＡＲアドレスを入手する。
【０１０４】
動作６０６（Ｈ＝０の場合に入る）で、現行ＦＨＴ項目Ｆ内の「セクタ分岐結果」フィールド内のＳ番目のサブフィールドにアスタリスク（＊）を格納する。次に、動作６０７で、カウントＳを１だけ増分してカウントＳの次の値を得る。好ましい実施形態では、「セクタ分岐結果」フィールドのサブフィールドにアスタリスク（＊）が格納され、同じＦＨＴ項目の「セクタ配列」フィールド内の同じサブフィールド・インデックスを有する対応するサブフィールド内のセクタ番号によって識別されているセクタ内に分岐命令が存在しないことを示す。
【０１０５】
Ｈ＝１の場合、動作６０４が行われる。これまでのところ、プロセスはセクタＳ内に分岐命令が存在することを知っているが、その分岐が成立したか否かはまだ知らない。これは、次に現行「分岐結果予測ベクトル」内の現行インデックスＢ位置にあるビットを検査することによって判断され、このビットはこの同じ分岐命令の成立状態または不成立状態を表す。インデックスＢにあるビットが１状態の場合、分岐は成立と予測され、「セクタ分岐結果」フィールドの現行サブフィールドＳに１が格納される。次に、ＩＦＡＲがこの分岐成立命令のターゲット・アドレスに設定される。しかし、インデックスＢのビットが０状態の場合、分岐は不成立と予測され、このサブフィールドＳに０が格納されて不成立条件が示される。その場合、ＩＦＡＲが現行カウントＬだけ増分され、分岐不成立のＡＩＣ行内の次の順次セクタから始まる命令のアドレスを得る。
【０１０６】
Ｂのビットが使用された後、インデックスＢを１だけ増分して次のベクトル・ビットを位置指定する。次に、この行内の次のセクタにアクセスするためにセクタ・カウントＳを１だけ増分する。
【０１０７】
次の動作６０８で、行内の最後のセクタが使用されたか否かを判断する。各ＡＩＣ行内には４つのセクタ（すなわちセクタ０、１、２、３）があるため、最上位セクタは３であり、最後のセクタが完了した後で次に高い番号４に増分する。（一般に、ＳＴが各行内のセクタの合計数である場合に、最後のセクタが使用された後ＳがＳＴ＋１に増分されることになる場合、ＳがＳＴ＋１と等しいか否かが検査される。）
【０１０８】
したがって、Ｓが４と等しくない場合、行内で少なくとも１つのセクタがまだ使用されておらず、動作６１１が行われ、ＩＦＡＲアドレスが現在アクセスしている「メモリ・ライン」と照合されて、次のセクタの命令が含まれているか否かを判断する。Ｓ＝４の場合、このＡＩＣ行にはそれ以上セクタが残っておらず、動作６１２が行われる。
【０１０９】
動作６１１で、メモリ・ラインに現行ＩＦＡＲアドレスが入っていない場合、そのＩＦＡＲアドレスを有する別のメモリ・ラインにアクセスする。次に、プロセスは図８の（入口Ｃを有する）動作５０６に戻る。
【０１１０】
動作６１２で、現行ＦＨＴ項目の処理が終わりになり、ＬＲＵフィールド内のビットが設定されて、それが最も最近に使用されたＦＨＴ項目であることが示される。次に、動作６１４で、「最初の」ＦＨＴ項目内の「次ＩＦＡＲアドレス」フィールドを設定し、その「有効」フィールドも設定して、この項目が現在有効状態を有し、したがって図５に示すプロセスで使用できるようになったことを示し、次に入口（Ｃ）を有する動作４０３に入る。
【０１１１】
図５の動作４０６で、ＡＩＣヒットの後にＦＨＴミスが発生した場合、図１１および図１２のプロセスに入ることによって新しいＦＨＴ項目を生成する必要がある。
【０１１２】
図１１の動作７０１で、ＩＦＡＲによって現在アドレス指定されている命令が入っている現行ＡＩＣ行に関連づけられたＦＨＴセット内の無効ＦＨＴ項目を見つける。（関連づけられたＦＨＴセットは、ＦＨＴ内のインデックス４＊Ｒ、４＊Ｒ＋１、４＊Ｒ＋２、４＊Ｒ＋３位置にある。この場合４はＦＨＴセット内の項目数である。）この無効ＦＨＴ項目は次に処理するＦＨＴ項目として選択される。ＦＨＴセット内に複数の無効ＦＨＴ項目が存在する場合、それらのうちのいずれでも選択することができるが、ここではラウンド・ロビン選択技法を使用するものとする。ＦＨＴセット内に無効ＦＨＴ項目が存在しない場合、セット内の有効項目のうちの最も長期間使用されなかった（ＬＲＵ）項目を選択する動作７０２が行われ、それが選択され、無効化され、その後、新しいＦＨＴ項目として生成されるセット内の現在選択されている無効ＦＨＴ項目Ｆとして使用される。
【０１１３】
動作７０３で、この無効ＦＨＴ項目を「現行ＦＨＴ項目Ｆ」として選択する。次に、サブフィールド・カウントＣを０に設定して、ＦＨＴ項目内の「セクタ配列」フィールドと「セクタ分岐結果」フィールド内の最初のサブフィールドを位置指定する。また、セクタ・カウントＳも０に設定して、関連づけられたＡＩＣ行Ｒ内の最初のセクタを位置指定する。
【０１１４】
動作７０４で、ＩＦＡＲアドレスをＦＨＴ項目内の「先頭命令アドレス」フィールドに設定することによって、選択されたＦＨＴ項目Ｆの生成を続ける。また、ＦＨＴ項目のＬＲＵフィールドも設定して、この項目がそのセット内で最も最近に使用されたことを示す。
【０１１５】
次に、動作７０６で、項目内の「セクタ配列」フィールドのＣ番目のサブフィールドにカウントＳを格納する。次の動作７０７で、ＡＩＣ行Ｓ内のセクタＳを選択し、その命令をＩＳＢに出力し、セクタＳからの出力命令数のカウントＬを生成する。
【０１１６】
動作７０８から始まる、ＦＨＴミス・プロセスにおける後続の動作では、ＦＨＴ項目にサブフィールドを格納する。動作７０８、７１１、７１２、および７１４は、前述の図９の動作６０２、６０３、６０６、および６０４と同様である。
【０１１７】
次の動作７０８で、「セクタ分岐制御ビット」Ｈの状態を検査することによってセクタＳに分岐命令が格納されているか否かを判断することができる。このビットＨは、現行セクタＳ内の命令がＩＳＢに転送されていたときに分岐命令が検出された場合はＨ＝１に設定されており、分岐命令が検出されない場合はＨ＝０のままである。
【０１１８】
Ｈ＝０の場合は、セクタＳ内に分岐命令が検出されなかったことを示し、動作７１１でＩＦＡＲにカウントＬを追加して新しいＩＦＡＲアドレスを得る。
【０１１９】
Ｈ＝０の場合、次に動作７１２に入り、現行ＦＨＴ項目Ｆ内の「セクタ分岐結果」フィールド内のＣ番目のサブフィールドにアスタリスク（＊）を格納する。次に、図１３の動作８０１で、カウントＣを１だけ増分してカウントＣの次の値を得る。好ましい実施形態では、「セクタ分岐結果」フィールドのサブフィールドにアスタリスク（＊）を格納して、同じＦＨＴ項目内の同じサブフィールド・インデックスを有する対応する「セクタ配列」サブフィールド内のセクタ番号によって識別されたセクタ内に分岐命令が存在しないことを示す。
【０１２０】
Ｈ＝１の場合、動作７１４が行われる。これまでのところ、プロセスはセクタＣ内に分岐命令があることは知っているが、その分岐が成立したかどうかはまだ知らない。これを、次に、現行「分岐結果予測ベクトル」内の現行インデックスＢにあるビットの検査によって判断し、この予測ビットはその同じ分岐命令の成立状態と不成立状態のいずれかを示す。インデックスＢのビットが１状態の場合、分岐は成立すると予測され、「セクタ分岐結果」フィールドの現行サブフィールドＣに１が格納される。次に、ＩＦＡＲがこの分岐成立命令のターゲット・アドレスに設定される。しかし、インデックスＢのビットが０状態の場合、分岐は不成立と予測され、このサブフィールドＣに０が格納されて不成立条件が示される。次に、ＩＦＡＲが現行カウントＬだけ増分されて、この不成立分岐のためにＡＩＣ行内の次の順次セクタから始まる命令のアドレスが得られる。
【０１２１】
Ｂのビットを使用した後、インデックスＢを１だけ増分して次のベクトル・ビットを位置指定する。次に、図１３の動作８０１で、現行カウントＣを１だけ増分する。Ｃの値は、ＦＨＴ項目Ｆのフィールド内のサブフィールドを位置指定する。関連づけられた行Ｒ内のセクタの左から右の順に基本ブロックが実行順序で書き込まれたために、ＦＨＴセット内の前に生成された「最初の」ＦＨＴ項目には、その「セクタ配列」フィールドのサブフィールド内に順次に順序づけされたセクタ番号（１、２、３など）が入っていることに留意されたい。しかし、「後の」各ＦＨＴ項目は、後のＦＨＴ項目によって古くなったことによって最初のＦＨＴ項目が無効化されていない限り、関連づけられた同じ行Ｒの「セクタ配列」フィールドで異なるセクタ・シーケンスを有するように生成されることがある。さらに、「分岐フェッチ・カウント」の現行の設定Ｂは、ＦＨＴ項目によって現行行Ｒの現行セクタＳから出力される基本ブロックを終わらせる予測分岐命令の「結果予測ベクトル」内の「成立／不成立」ビットを位置指定する。しかし、ビットＢの現行の設定は、関連づけられた行Ｒ内のどのセクタに（ある場合）この分岐命令が入っている可能性があるかを示さない。
【０１２２】
次に、「セクタ配列」フィールドと「セクタ分岐結果」フィールド内の次のＣ番目のサブフィールドを、増分されたＣ値を使用して、現在選択されているＦＨＴ項目Ｆ内のこれらの各フィールド内の次のサブフィールドを位置指定するように準備することになる。ただしこれは、４つのセクタすべてを、このＦＨＴ項目Ｆのセクタの出力シーケンスになっているかどうかについて検査し終わっていることを条件とする。したがって、Ｃの現行値を検査してＣの許容最大数値を超えたかどうか調べる。この最大値は、Ｃの最初の値がゼロであるため３である。次に、ステップ８０２で、Ｃを４と比較する。Ｃが４に等しい場合、現行ＡＩＣ行Ｒ内のすべてのセクタを調べ終わっており、動作８０４を行う。しかしＣが４に等しくない場合、現行ＡＩＣ行Ｒ内に調べるべきセクタが他に少なくとも１つ残っており、動作８０３を行う。
【０１２３】
すべてのセクタを調べ終わった場合、次に動作８０３を行う。動作８０３では、ＡＩＣディレクトリ項目Ｒにアクセスして、そのディレクトリ項目に現行ＩＦＡＲアドレスを有する「セクタ先頭アドレス」フィールドがあるかどうかを調べる。ディレクトリ項目フィールドのいずれかがＩＦＡＲアドレスと等しい場合、その「セクタ先頭アドレス」フィールドのセクタ番号は、関連づけられた行Ｒ内に見つかる命令の実行可能シーケンスの次のセクタのＳ値を示す。
【０１２４】
見つかった場合、動作８０７で、セクタ・カウントＳをステップ８０３で見つかったＳの値に設定し、図１１の動作７０６を行って、このＳ値を選択されたＦＨＴ項目Ｆの「セクタ配列」フィールド内のＣ番目のインデックスにある現行サブフィールドに設定し、以下、図１１および図１２の各動作について前述したのと同様の操作を行う。
【０１２５】
動作８０３で、一致する「セクタ先頭アドレス」フィールドが見つからなかった場合、動作８０６を行い、ＦＨＴ項目Ｆの「セクタ配列」フィールドの現行のＣ番目のサブフィールドに０を格納し、「セクタ分岐結果」フィールド内のＣ番目のサブフィールドにアスタリスク＊を格納する。次に、動作８０８でＣを１だけ増分し、次に、増分されたＣを動作８０９で検査して、最後のサブフィールドＣが生成されたかどうかを判断する。生成されていない場合、残りのサブフィールドをアスタリスク＊で埋めて、それらのサブフィールドがいかなる動作も行わないことを示す。これは、動作８０６に戻って、アスタリスクを埋め込むことによって行い、これをステップ８０９ですべてのサブフィールドが処理されたと判断されるまで続けた後、プロセスは動作８１１に進む。
【０１２６】
動作８１１で、有効ビット・フィールドを１に設定して、現行ＦＨＴ項目Ｆの有効状態を示す。また、ＩＦＡＲも、現行ＦＨＴ項目Ｆ内の「次ＩＦＡＲアドレス」フィールドに入っている現行ＩＦＡＲアドレスによって位置指定されている次の命令のアドレスに設定し、それによって、いずれかのＡＩＣ行に次に実行する命令（現在ＩＦＡＲによってアドレス指定されている）が含まれている場合に次のＡＩＣ行を見つけることができるようにする。
【０１２７】
ＦＨＴ項目の生成はこれで完了し、現行フェッチ・サイクルが完了する。次に、プロセスは図５の動作４０３に戻り、次のフェッチ・サイクルを開始する。プログラム中で次に実行する命令はＩＦＡＲにある。
【０１２８】
いずれのＦＨＴセットでもすべてのＦＨＴ項目内の「セクタ配列」サブフィールドが同じ先頭セクタ、すなわちセクタ０を有するため、上述の実施形態には順序づけの制約がある。したがって、いずれのセット内でもすべてのＦＨＴ項目が、その「セクタ配列」フィールドおよび「セクタ分岐結果」フィールド内の先頭サブフィールド（すなわちＣ＝０の場合）に同じＩＦＡＲアドレスを使用して同じ先頭セクタを識別するが、任意のセット内のこれらのＦＨＴ項目は、先頭サブフィールドの後の他のサブフィールドを指定する際に（すなわち、サブフィールド１、２、および３についてそれぞれＣ＝１、２、または３の場合）、順序づけに完全な柔軟性がある。
【０１２９】
しかし、完全な順序づけの柔軟性は、好ましい実施形態で示したＡＩＣ行ディレクトリの代わりに、またはそれに加えて、セクタ・ディレクトリ（図示せず）を使用する異なる実施形態によって得られる。このようなセクタ・ディレクトリには、好ましくはアドレス順に格納されたすべての「セクタＳ先頭アドレス」フィールド（ＡＩＣディレクトリ内のすべての行について示す）が含まれる。セクタ・ディレクトリ内の各アドレスは、ＡＩＣ内の関連づけられたセクタの記憶域である引数を有する。ＩＦＡＲアドレスは、セクタ・ディレクトリの「セクタＳ先頭アドレス」フィールドを探索し、等しい条件があればＩＦＡＲヒットになり、関連づけられたＡＩＣ記憶位置を使用してそれをアウトゲートする。
【０１３０】
まとめとして、本発明の構成に関して以下の事項を開示する。
【０１３１】
（１）プログラム中の分岐命令および結果の分岐ターゲット命令の実行によって生じる時間損失を低減するプロセッサ装置であって、
前記プロセッサ装置による実行のためにメモリ内の非順次記憶場所からフェッチされた命令ブロックのグループを受け取って格納する命令キャッシュ（Ｉキャッシュ）と、
前記命令が前記プログラムの前の実行中またはコンパイル中に分岐履歴を入手したときに前記プログラム内でフェッチするためにアドレス指定されている命令の直後の複数の分岐命令の分岐結果を予測する分岐命令予測ユニット（予測ユニット）と、
前記Ｉキャッシュに格納された命令ブロックの実行履歴シーケンスを記録するＦＨＴ項目を含むフェッチ履歴テーブル（ＦＨＴ）と、
前記ＦＨＴ項目のうちの１つのＦＨＴ項目の制御下で前記命令ブロックを前記Ｉキャッシュから実行要素に出力し、前記実行要素による実行のために前記記録された履歴シーケンスで前記命令ブロックを供給するゲートとを含むプロセッサ装置。
（２）前記プログラムの実行中に前記予測ユニットへの命令アドレスの入力に応答して、前記予測ユニットによって提供される分岐結果予測ベクトルと、
前記分岐結果予測ベクトルの少なくとも一部と一致する分岐結果フィールドを含む有効ＦＨＴ項目を選択するＦＨＴ項目選択および始動コントロールと、
前記ＦＨＴ項目選択および始動コントロールに応答して、前記ＦＨＴ項目に記録された前記履歴シーケンスで前記Ｉキャッシュから命令を受け取る命令順序づけバッファとをさらに含む、上記（１）に記載のＦＨＴを使用するプロセッサ装置。
（３）前記ＦＨＴ項目内の前記履歴シーケンスで示されたすべてのブロックが前記命令順序づけバッファに出力された時点を判断して前記プログラムの現行フェッチ・サイクルを終了させるフェッチ・サイクル完了コントロールと、
前記プロセッサ装置の次のフェッチ・サイクルを開始するための次の予測を行うために前記ＦＨＴ項目の前記履歴シーケンスによって示された最後の分岐命令のターゲット・アドレスを受け取る前記予測ユニットとをさらに含む、上記（２）に記載のＦＨＴを使用するプロセッサ装置。
（４）前記Ｉキャッシュに格納されたブロックのそれぞれのグループに関連づけられ、前記グループ内の前記ブロックの実行の特定の履歴シーケンスを示す前記ＦＨＴ内の各ＦＨＴ項目をさらに含む、上記（３）に記載のＦＨＴを使用するプロセッサ装置。
（５）前記Ｉキャッシュに格納されたブロックのそれぞれのグループに関連づけられた前記ＦＨＴ内の複数のＦＨＴ項目のセットと、
前記それぞれのグループ内の前記ブロックの実行の異なる履歴シーケンスを示す前記セット内の各ＦＨＴ項目とをさらに含む、上記（４）に記載のＦＨＴを使用するプロセッサ装置。
（６）前記グループの前記ブロックが前記Ｉキャッシュに格納されるときにグループ内の前記ブロックの実行のシーケンスを記録する前記セット内の第１のＦＨＴ項目と、
ブロックの前記グループが前記Ｉキャッシュに書き込まれた後で行われる前記プログラム中の前記ブロックの実行の異なる履歴シーケンスを記録する前記グループ内の他の各ＦＨＴ項目とをさらに含む、上記（５）に記載のＦＨＴを使用するプロセッサ装置。
（７）前記ＦＨＴ項目内の前記履歴シーケンスを記録するために各ＦＨＴ項目内に設けられたブロック・シーケンス・フィールドをさらに含む、上記（１）に記載のＦＨＴを使用するプロセッサ装置。
（８）前記Ｉキャッシュ内に構成され、各セクタが、前記プログラムの全部または一部を含むメモリまたはバッファから受け取ったシーケンスで命令を格納する固定数の記憶位置を含むセクタを含み、
各セクタが前記プログラム内の命令の基本ブロックの全部または一部を記憶する容量を有し、各基本ブロックが、前記Ｉキャッシュに格納されるときにセクタ内の先頭記憶場所から始まり、前記基本ブロックが同じセクタ内または別のセクタ内の記憶場所で終わり、前記Ｉキャッシュ内に格納されている基本ブロックが１つまたは複数のセクタ内の任意の数の命令位置を占有し、そのうち、各基本ブロックがセクタの少なくとも最初の命令位置を占有し、それによって前記Ｉキャッシュに格納された各基本ブロックがセクタの所定の側に位置合わせされる各セクタと、
セクタ内の各未占有命令位置に格納されるノー・オペレーション・コード（ｎｏｐ）であって、それによって前記Ｉキャッシュが位置合わせ命令キャッシュ（ＡＩＣ）として構成されるノー・オペレーション・コード（ｎｏｐ）とをさらに含む、上記（１）に記載のＦＨＴを使用するプロセッサ装置。
（９）複数の行として構成された前記Ｉキャッシュであって、各行が複数の前記セクタを含み、各セクタに前記プログラムの１つの基本ブロックのみの命令が格納され、前記Ｉキャッシュに格納された各基本ブロックがセクタ内のセクタ位置合わせ記憶場所から始まり、前記基本ブロックが前記セクタを超える場合、前記基本ブロックの終わりに達するまで前記基本ブロックを各セクタ内まで続けさせるが、前記基本ブロックが前記行の終わりを超えて続く必要がある場合は、前記行を超える最初の命令の命令アドレスを使用して別の行を位置指定し、前記基本ブロックが前記Ｉキャッシュ内のいずれかのセクタ内で終わるまで前記基本ブロックを前記別の行の最初のセクタおよび必要な連続したセクタ内に続ける前記Ｉキャッシュと、
最後の基本ブロックの終わりに分岐成立命令がある場合はターゲット分岐命令を使用してアクセスされる前記Ｉキャッシュ内の次のセクタであるが、前記次のセクタは、最後の基本ブロックの終わりに分岐不成立命令があるかまたは現行基本ブロックのためにアクセスされた最後のセクタに分岐命令がない場合は次に続くセクタ場所にあるセクタである次のセクタと、
所定数のセクタ内に前記プログラムの命令の実行シーケンスを含む前記Ｉキャッシュ内のセクタのシーケンスを示す各ＦＨＴ項目内に格納されたセクタ配列情報と、
セクタ・アドレス・フィールドを有するディレクトリ項目を含むＩキャッシュ・ディレクトリであって、前記セクタ・アドレス・フィールドに前記Ｉキャッシュ内の前記セクタがそれぞれ関連づけられ、各セクタ・アドレス・フィールドが前記関連づけられたセクタ内に格納されたいずれかの最初の命令のアドレスを受け入れ、前記セクタ・アドレス・フィールドが前記ディレクトリ内に見つかった場合は前記関連づけられたセクタに前記Ｉキャッシュ内の前記命令が含まれているため、前記Ｉキャッシュ・ディレクトリ内のいずれかのセクタ・アドレス・フィールに前記プログラム命令アドレスが含まれているか否かを判断することによって、後で使用されるプログラム命令アドレスが前記アドレスを有する前記命令を含むいずれかのセクタを位置指定することができるようにするＩキャッシュ・ディレクトリとをさらに含む、上記（１）に記載のＦＨＴを使用するプロセッサ装置。
（１０）同じＦＨＴ項目の前記セクタ配列情報で示された各セクタの前記分岐結果として「分岐成立」または「分岐不成立」または「セクタ内に分岐命令なし」のうちのいずれか１つを示す各ＦＨＴ項目内に格納されたセクタ分岐結果情報をさらに含む、上記（９）に記載のＦＨＴを使用するプロセッサ装置。
（１１）前記予測ベクトルに現行プログラム実行アドレス（プログラム・アドレス）の直後の前記プログラム中の基本ブロックのシーケンスの分岐結果予測を表す状態を有するビットが含まれている前記プログラム・アドレスにある予測分岐結果ベクトル（予測ベクトル）を生成する前記予測ユニットと、
前記予測ベクトルに分岐命令を含まないセクタに関する情報が含まれていない場合に、検出操作に前記「セクタ内分岐命令なし」の結果標識を無視させることによって前記予測ベクトルの少なくとも最初の部分が前記ＦＨＴ内のＦＨＴ項目内の前記セクタ分岐結果情報と等しいか否かを検出する論理回路と、
前記論理回路が前記ＦＨＴ項目内の前記セクタ分岐結果情報に等しいものを検出した場合に、前記ＦＨＴ項目内の前記セクタ配列情報によって示されたシーケンス内の前記ＦＨＴ項目の前記セクタ配列情報で識別されている各セクタから前記命令を受け取る前記実行要素とをさらに含む、上記（１０）に記載のＦＨＴを使用するプロセッサ装置。
（１２）前記ＦＨＴ項目で順次に示された前記セクタから前記命令を受け取り、前記命令を受け取った順序で前記実行ユニットに転送する命令順序づけバッファをさらに含む、上記（１１）に記載のＦＨＴを使用するプロセッサ装置。
（１３）前記ＦＨＴ内の各ＦＨＴ項目内の同じフィールドに格納された前記セクタ配列情報と前記セクタ分岐結果情報とをさらに含む、上記（１１）に記載のＦＨＴを使用するプロセッサ装置。
（１４）前記ＦＨＴ内の各ＦＨＴ項目内の異なるフィールドに格納された前記セクタ配列情報と前記セクタ分岐結果情報とをさらに含む、上記（１２）に記載のＦＨＴを使用するプロセッサ装置。
（１５）前記Ｉキャッシュ内の命令を含むセクタのグループの履歴シーケンスを格納する各ＦＨＴ項目内のセクタ配列フィールドと、
前記ＦＨＴ項目内の前記セクタ配列フィールドで示された各ブロックについて成立または不成立の条件を含む結果を記録する各ＦＨＴ項目内に設けられた分岐結果フィールドとをさらに含む、上記（１）に記載のＦＨＴを使用するプロセッサ装置。
（１６）各行が所定数のセクタを含み、各行が前記Ｉキャッシュ内の固有の場所を有する、前記Ｉキャッシュを構成する複数のＩキャッシュ行と、
ＦＨＴセット内の各ＦＨＴ項目が前記Ｉキャッシュ内の関連づけられたＩキャッシュ行の場所によって決定する前記ＦＨＴ内の場所を有する、前記ＦＨＴ内に固有に配置されたＦＨＴ項目の複数のＦＨＴセットとをさらに含む、上記（１２）に記載のＦＨＴを使用するプロセッサ装置。
（１７）各ＦＨＴセット内に設けられた所定セット数のＦＨＴ項目と、
前記所定セット数と前記Ｉキャッシュ内の関連づけられたＩキャッシュ行のインデックスとによって計算される前記ＦＨＴ内の各ＦＨＴセットのインデックスとをさらに含む、上記（１６）に記載のＦＨＴを使用するプロセッサ装置。
（１８）前記ＦＨＴ内の各ＦＨＴ項目内に構成され、前記ＦＨＴ項目が前記Ｉキャッシュを制御するために使用可能であることを示す有効フィールドと、
各ＦＨＴ項目内に構成され、前記セット内のどの項目が最長期間不使用（ＬＲＵ）であり、次の置換候補であるかを示す置換フィールドとをさらに含む、上記（１７）に記載のＦＨＴを使用するプロセッサ装置。
（１９）前記関連づけられたＦＨＴ項目内の前記シーケンス情報によって示された前記実行シーケンスで最初に出力すべき前記関連づけられたＡＩＣ行のセクタ内の最初の命令のアドレスを示す、各有効ＦＨＴ項目内の先頭命令フィールドをさらに含む、上記（１８）に記載のＦＨＴを使用するプロセッサ装置。
（２０）前記ＦＨＴ項目内で示された前記セクタ・シーケンス内の最後の命令の後に続くべき（前記プログラム実行シーケンス中の）命令のアドレスを示す、各有効ＦＨＴ項目内の次命令アドレス・フィールドをさらに含む、上記（１９）に記載のＦＨＴを使用するプロセッサ装置。
（２１）プログラムの前の実行の実行履歴を使用して、コンピュータ・システム内に記憶されたプログラムの複数の基本ブロックから入手した命令の実行のために即時に順序づけするプロセッサ方法であって、
各フェッチ・サイクルが前記プログラムの最大「ｍ」個の複数の基本ブロックに含まれる命令を実行のために順序づけすることができる、フェッチ・サイクルを使用して実行のために前記プログラムの命令を順序づけするステップと、
入口アドレスとターゲット・アドレスがそれぞれフェッチ・サイクルのサイクル開始アドレスであり、最初はプログラム内の入口アドレスでありその後は前のフェッチ・サイクル中の最後の分岐命令から入手したターゲット・アドレスである命令アドレスを使用して、プログラム実行が完了するまで各フェッチ・サイクルを開始するステップと、
予測ベクトルが状態ビットのストリングを含み、各状態ビットが前記プログラム実行シーケンス内で次に発生すると予測された「ｍ」個の分岐命令の各分岐命令の成立状態または不成立状態を示す、前記開始アドレスを使用して各フェッチ・サイクルの最初に予測ベクトルを入手するステップと、
位置合わせＩキャッシュ（ＡＩＣ）ディレクトリ内で前記サイクル開始アドレスを探索し、（関連づけられたＡＩＣ内の）いずれかのＡＩＣ行が前記サイクル開始アドレスを有する命令を含むか否かを判断し、ＡＩＣ行内のＡＩＣセクタ内に前記命令が見つかった場合はＡＩＣヒットを示すが、前記ＡＩＣ内に前記命令が見つからない場合はＡＩＣミスを示すステップと、
ＡＩＣヒットが示された場合、見つかった前記ＡＩＣ行に関連づけられたＦＨＴ内のＦＨＴ項目のフェッチ履歴テーブル（ＦＨＴ）セットを探し出すステップと、
前記予測ベクトルを前記探し出したＦＨＴセットのＦＨＴ項目内の「セクタ分岐結果」情報と比較し、ＦＨＴヒットを有する前記ＦＨＴセット内のいずれかのＦＨＴ項目を選択し、前記セット内のいずれのＦＨＴ項目にもＦＨＴヒットがない場合にはＦＨＴミスが発生するステップと、
ＦＨＴヒットが発生した場合、前記ＦＨＴ項目の「セクタ配列」情報で示されたシーケンスで前記セクタの出力を制御することによって、前記ＦＨＴ項目内の前記「セクタ配列」情報で示されたＡＩＣセクタ内の命令を実行のために出力するステップとを含むプロセッサ方法。
（２２）各ＡＩＣ行が所定数のセクタを含み、各セクタが所定数の命令記憶位置を有し、ＡＩＣミスが発生した場合、前記サイクル開始アドレスを使用して前記ＡＩＣディレクトリ内で前記ＡＩＣ行に関連づけられたディレクトリ項目を選択するステップと、
前記ＦＨＴ内で選択された前記ＡＩＣ行に関連づけられたＦＨＴ項目を選択するステップと、
将来の使用のための選択された前記ＡＩＣ行と選択された前記ＦＨＴ項目のセットアップに備えて、選択された前記ＡＩＣ行を無効化し、選択された前記ＦＨＴ項目を無効化するステップと、
前記コンピュータ・システムの記憶階層内の前記フェッチ・サイクル開始アドレスにある命令を含むメモリ・ラインを探し出すステップと、
前記メモリ・ライン内の前記サイクル開始アドレスにある命令のフェッチを開始し、前記フェッチされた命令を、前記セクタの位置合わせ命令位置から始まって前記行内の最初のセクタ内にコピーし、分岐命令が検出されるか、前記ＡＩＣ行の終わりに達するか、または前記メモリ・ラインの終わりに達するかいずれかのうち最も早いものに達したときに前記フェッチおよびコピーを終了し、必要な場合には前記ＡＩＣ行内の連続したセクタ内のフェッチおよびコピーを継続すると同時に、前記フェッチおよびコピーが進むにつれて前記プログラム命令アドレスを更新し、前記行内にコピーされた最初の基本ブロックが前記行のいずれかのセクタ内で終わるステップと、
前記命令がフェッチされコピーされるにつれて前記命令を実行のために出力するステップと、
前記行内の前記最初のセクタを位置指定するために前記ＡＩＣディレクトリ項目内の「セクタ先頭アドレス」に前記サイクル開始アドレスを格納し、選択された前記ＦＨＴ項目内の「セクタ配列」フィールド内の最初のセクタ位置に先頭セクタ標識を格納し、選択されたＡＩＣディレクトリ項目内のセクタＳ先頭アドレス・フィールドに、各対応するセクタ内の最初の命令の前記プログラム・アドレスを格納するステップと、
フェッチされた命令を受け入れる各セクタ内に分岐命令がないか検査し、フェッチされた命令を受け入れる各セクタの選択された前記ＦＨＴ項目のセクタ配列フィールドにセクタ識別子を格納し、前記ＦＨＴ項目内のセクタ分岐結果フィールドの対応する各セクタ位置にフェッチされた各セクタのセクタ結果標識を格納するステップであって、各セクタ結果標識が、対応する各セクタに非分岐命令、分岐成立命令、または分岐不成立命令のいずれがあるかを示すステップと、
前記ＡＩＣ行内のすべてのＡＩＣセクタに受け取られたフェッチ命令があるか否かを検査して、選択された前記ＡＩＣ行内に処理すべきセクタが残っていないか否かを判断し、ある場合は次に使用可能なセクタを選択し、前記セクタを現行セクタにするステップと、
前記現行プログラム命令アドレスを更新する（選択された前記ＡＩＣ行内の最後にコピーされた分岐命令のターゲット・アドレスか、または前記コピーが前記行の終わりに達した場合は前記更新されたプログラム命令アドレスが前記行にコピーされた命令の数だけ増分される）ステップと、
別のセクタが存在する場合、現行プログラム命令アドレスにある命令を含む前記メモリ・ラインを見つけ、前記現行プログラム・アドレスにある前記メモリ・ラインから命令のフェッチを開始し、前記セクタ内の位置合わせ命令位置から始めて実行のためにフェッチされた前記命令の現在選択されているＡＩＣセクタ内へのコピーを開始し、分岐命令が検出されるか、ＡＩＣ行の終わりに達するか、またはメモリ・ラインの終わりに達するか、いずれか最も早いものが発生したときに前記フェッチおよびコピーを終了し、必要な場合には前記フェッチおよびコピーを進めるにつれて前記プログラム命令アドレスを更新しながら、選択された前記ＡＩＣ行のすべてのセクタの中に命令がコピーされるまで前記ＡＩＣ行内の連続したセクタ内でフェッチおよびコピーを続けるステップと、
前記ＡＩＣディレクトリ項目内の前記セクタの「セクタ先頭アドレス」に前記開始プログラム・アドレスを格納するステップと、
前記ＦＨＴ項目内の前記「セクタ配列」フィールド内の対応するセクタ・サブフィールドに次の各セクタのセクタ識別子を格納するステップと、
コピーされたいずれかの命令を受け取る次の各セクタ内に分岐命令がないか検査し、前記ＦＨＴ項目内のセクタ分岐結果フィールドの対応する各セクタ位置に、コピーされた各セクタのセクタ結果標識を格納するステップであって、各セクタ結果標識が、対応する各セクタに非分岐命令、分岐成立命令、または分岐不成立命令のいずれがあるかを示すステップと、
前記ＡＩＣ行内のすべてのＡＩＣセクタがコピーされた命令を受け取ったか否か検査して、選択された前記ＡＩＣ行にすべてのセクタがコピーされたか否かを判断し、次に、選択された前記ＦＨＴ項目内の置換フィールドを最長期間不使用状態に設定するステップと、
選択された前記ＦＨＴ項目内の「次プログラム・アドレス」フィールドを現行プログラム・アドレスに設定し、選択された前記ＦＨＴ項目内の有効フィールドを有効状態に設定するステップとをさらに含む、上記（２１）に記載のプログラムの複数の基本ブロックから入手した命令を実行のために即時に順序づけするプロセッサ方法。
（２３）前記方法を実行するプロセッサの実行パイプラインに前記命令を供給する命令順序づけバッファに出力することによって実行のための出力を行うステップをさらに含む、上記（２２）に記載のプログラムの複数の基本ブロックから入手した命令を実行のために即時に順序づけするプロセッサ方法。
（２４）ＡＩＣヒットが発生したときにＦＨＴミスが発生した場合、前記ＦＨＴセット内の無効なＦＨＴ項目を選択し、サブフィールド・インデックスＣを現行サブフィールドＣを位置指定するように０に設定し、セクタ・インデックスＳを現行セクタＳを位置指定するように０に設定し、ベクトル・ビット・インデックスＢを現行ベクトル・ビットを位置指定するように０に設定するステップと、
前記現行プログラム・アドレスを選択された前記ＦＨＴ項目内の「先頭命令フィールド」内に設定するステップと、
選択された前記ＦＨＴ項目内の置換フィールドを指示された最も最近に使用された状態に合わせて調整するステップと、
将来の使用のための前記ＦＨＴ項目のセットアップに備えて、選択された前記ＦＨＴ項目内の「セクタ配列」フィールド内のサブフィールドにＳを格納するステップと、
選択された前記ＡＩＣ行の前記セクタＳ内に含まれたすべての命令を実行のために出力するステップと、
分岐命令セクタＳがないか検査し、セクタＳ内に分岐命令が存在しない場合は、選択された前記ＦＨＴ項目のサブフィールドＣに「無命令」コードを格納し、前記プログラム命令アドレスを実行のためにセクタＳから出力された命令の数だけ増分するステップと、
セクタＳ内に分岐命令が検出された場合は、前記予測ベクトル内の現行ビットＢが成立状態か不成立状態かを検査し、成立状態が見つかった場合は、選択された前記ＦＨＴ項目内の「セクタ分岐結果」フィールドのサブフィールドＣに成立標識を格納し、前記プログラム命令アドレスをセクタＳ内で検出された前記分岐命令のターゲット・アドレスに設定するが、不成立状態が見つかった場合は、選択された前記ＦＨＴ項目内の前記「セクタ分岐結果」フィールドのサブフィールドＣに不成立標識を格納し、前記プログラム命令アドレスを実行のためにセクタＳから出力された命令の数だけ増分するステップと、
サブフィールドＣを１だけ増分して新しい現行サブフィールドＣを入手し、増分された前記値を検査して前記ＡＩＣ行内のすべてのセクタが処理されたことを示しているか否かを判断し、すべてのセクタが処理された場合は、選択された前記ＦＨＴ項目内の有効フィールドを有効状態に設定し、現行プログラム命令アドレスを選択された前記ＦＨＴ項目内の「次プログラム命令アドレス」フィールドから入手した新しい値に設定するステップと、
次に、前記プログラム命令アドレスの新しい前記値を使用して次のフェッチ・サイクルを開始するステップと、
サブフィールドＣの増分された前記値の前記検査が、すべてのＡＩＣセクタが処理されていないことを示した場合、選択された前記ＡＩＣディレクトリ項目にアクセスするステップと、
選択された前記ＡＩＣディレクトリ項目内の「セクタ先頭アドレス」フィールドを探索して現行プログラム命令アドレスと一致するフィールドがないか調べ、前記フィールドのいずれかが一致する場合はセクタ・ヒットが発生し、一致するフィールドが、処理を必要として選択されたＡＩＣセクタになる対応するＡＩＣセクタ（選択された前記ＡＩＣ行内のいずれのセクタの場所にあってもよい）を識別し、次に、新たに選択された前記ＡＩＣセクタのためにフェッチ・サイクルを開始するステップと、
サブフィールドＣがすべてのセクタが処理されたことを示す値に達するまで次の各サブフィールドＣについて前記処理を繰り返し、次に、選択された前記ＦＨＴ項目を有効状態に設定し、その置換フィールドを最長期間不使用状態を示すように設定するステップと、
前記ＡＩＣディレクトリ項目の前記探索中にセクタ・ヒットが見つからない場合は、セクタ・ミスが発生し、選択された前記ＦＨＴ項目の前記「セクタ配列」フィールドおよび「セクタ分岐結果」フィールド内の残りのサブフィールドにノー・オペレーション文字を書き込むステップと、
前記現行プログラム命令アドレスを前記現行ＡＩＣ行の前記「次プログラム命令アドレス」フィールドにある値に設定し、次のフェッチ・サイクルを開始するステップとをさらに含む、上記（２１）に記載のプログラムの複数の基本ブロックから入手した命令を実行のために即時に順序づけするプロセッサ方法。
（２５）前記方法を実行するプロセッサの実行パイプラインに前記命令を供給する命令順序づけバッファに出力することによって実行のための出力を行うステップをさらに含む、上記（２４）に記載のプログラムの複数の基本ブロックから入手した命令を実行のために即時に順序づけするプロセッサ方法。
【図面の簡単な説明】
【図１】本明細書に記載の本発明の好ましい実施形態のハードウェア構成を示す図である。
【図２】「位置合わせ命令キャッシュ」（ＡＩＣ）を表し、ＡＩＣ内の各複数セクタ行内のフィールドの例を示す図である。
【図３】「フェッチ履歴テーブル」（ＦＨＴ）内のＦＨＴ項目の例を示す図である。
【図４】ＡＩＣ行の内容と、項目を含む関連づけられたＦＨＴセット内のＦＨＴ項目との関係を示す図である。
【図５】好ましい実施形態により使用される新規な方法の流れ図であり、この方法の初期設定と基本経路を示す図である。
【図６】好ましい実施形態により使用される新規な方法の流れ図であり、この方法の初期設定と基本経路を示す図である。
【図７】好ましい実施形態により使用される新規な方法の流れ図であり、ＡＩＣミスの発生を処理する、この方法のサブプロセスを示す図である。
【図８】好ましい実施形態により使用される新規な方法の流れ図であり、ＡＩＣミスの発生を処理する、この方法のサブプロセスを示す図である。
【図９】好ましい実施形態により使用される新規な方法の流れ図であり、ＡＩＣミスの発生を処理する、この方法のサブプロセスを示す図である。
【図１０】好ましい実施形態により使用される新規な方法の流れ図であり、ＡＩＣミスの発生を処理する、この方法のサブプロセスを示す図である。
【図１１】好ましい実施形態により使用される新規な方法の流れ図であり、ＦＨＴミスの発生を処理する、この方法のサブプロセスを示す図である。
【図１２】好ましい実施形態により使用される新規な方法の流れ図であり、ＦＨＴミスの発生を処理する、この方法のサブプロセスを示す図である。
【図１３】好ましい実施形態により使用される新規な方法の流れ図であり、ＦＨＴミスの発生を処理する、この方法のサブプロセスを示す図である。
【図１４】好ましい実施形態により使用される新規な方法の流れ図であり、ＦＨＴミスの発生を処理する、この方法のサブプロセスを示す図である。
【符号の説明】
１１  位置合わせ命令キャッシュ（ＡＩＣ）
１２  ＡＩＣディレクトリ
１４  フェッチ履歴テーブル
１６  命令フェッチ・アドレス・レジスタ
１７  分岐予測ユニット
１８  命令順序づけバッファ
１９  実行不一致コントロール
２２  ＡＩＣディレクトリ項目
２４  フェッチ履歴テーブル項目
【図１】
0003542020.tif 000002
【図２】
0003542020.tif 000003
【図３】
0003542020.tif 000004
【図４】
0003542020.tif 000005
【図５】
0003542020.tif 000006
【図６】
0003542020.tif 000007
【図７】
0003542020.tif 000008
【図８】
0003542020.tif 000009
【図９】
0003542020.tif 000010
【図１０】
0003542020.tif 000011
【図１１】
0003542020.tif 000012
【図１２】
0003542020.tif 000013
【図１３】
0003542020.tif 000014
【図１４】
0003542020.tif 000015