(57)【特許請求の範囲】
【請求項１】
トラック・テーブルに格納されたトラック・アドレスを介して命令を提供する命令メモリ装置をアドレス指定するように構成されたトラックキャッシュと、
実行可能命令の1つまたは複数の命令を実行するように構成された中央処理装置（CPU）と
を備える命令処理システムであって、
前記トラックキャッシュにおいて、実行可能命令を格納するように構成された複数のメモリ装置は、少なくとも遅いスピードのメモリと速いスピードのメモリとを含み、
各メモリ装置は、固有のタイプのトラック・アドレスによってアドレス指定されるように構成され、
命令ブロックが遅いスピードの命令メモリ装置から速いスピードの命令メモリ装置に移動されるとき、前記トラック・テーブルにおいて、前記遅いスピードのメモリ内の命令を索引付けするトラック・アドレスのタイプは、前記速いスピードのメモリ内の命令を索引付けするトラック・アドレスのタイプによって置き換えられる、
命令処理システム。
【請求項２】
最もアクセススピードの遅いメモリに記憶された命令のブロックアドレスと、
そして最もアクセススピードの遅いメモリに記憶された命令が他のm-1個のメモリ装置に記憶されているときの、他のm-1個のメモリ装置のトラック・アドレスと、を記憶するように設定されたアクティブ・リスト
をさらに含むことを特徴とする請求項１に記載のシステム。
【請求項３】
分岐命令のターゲット命令のトラック・アドレスが行番号と列番号を含み、
分岐命令のターゲット命令のブロック・アドレスに対するアクティブ・リストにおけるマッチング操作の後に、トラック・アドレスの行番号が得られ、
命令ブロックにおける分岐命令のターゲット命令のオフセットがトラック・アドレスの列（コラム）番号である、
ことを特徴とする請求項２に記載のシステム。
【請求項４】
命令制御ユニットはさらにトラッカーを含む：
トラック・テーブルに記憶された分岐命令のターゲット命令のトラック・アドレスにもとづいて、トラッカーは先行して、分岐命令の第１層にポイントし、トラック・テーブルから分岐命令の第１層のターゲット命令のトラック・アドレスを読み出す；
トラッカーがターゲット命令のトラック・アドレスが最も速いメモリに該当することを見つけたとき、最も速いメモリがCPUに命令を提供する；
そしてトラッカーがターゲット命令のトラック・アドレスが、最も速いメモリ以外のm-1個のメモリ装置の中の少なくとも１つのメモリに該当することを見つけたとき、m-1個のメモリ装置の中の少なくとも１つのメモリがCPUそして最も速いメモリに対してあらかじめ命令を提供する、
これらのことを特徴とする請求項３に記載のシステム。
【請求項５】
分岐命令の第１層に対応するトラック・アドレスを含むように設計されたレジスタ（このトラック・アドレスはターゲット命令に該当するトラック・アドレスをトラック・テーブルにおけるアドレス指定操作によって読み出すために使われる）；
分岐命令セグメントの第１層の次の分岐命令のトラック・アドレスを得るように設計されたインクリメンタ；
そして分岐命令の第１層のターゲット命令のターゲットアドレスと分岐命令セグメントの第１層の次の分岐命令のトラック・アドレスのうち１つを選択し、選択したトラック・アドレスをレジスタに記憶するように設計されたセレクタ；
これらを含むトラッカーを特徴とする請求項４に記載のシステム。
【請求項６】
命令制御ユニットはさらにプレディクタを含み、プレディクタはトラッカーによってポイントされた分岐命令セグメントの後の分岐命令セグメントを取得するように設計されることを特徴とする請求項４に記載のシステム。
【請求項７】
プレディクタはさらに以下のように設定される：
分岐命令セグメントの第１層の後の分岐命令セグメントのn層目を取得する（nは２以上の自然数）；
そして最も遅いスピードのメモリを制御して、速いスピードのメモリに記憶されていない分岐命令セグメントのn層目を、速いスピードのメモリに供給する、
これらのことを特徴とする請求項６に記載のシステム。
【請求項８】
プレディクタは以下を含む：
分岐命令セグメントのn層目の分岐命令のトラック・アドレスを取得するように設計されたインクリメンタ；
それぞれ分岐命令セグメントのn層目の分岐命令のトラック・アドレスを記憶するように設計された2n個のレジスタ；
そしてトラック・テーブルにて分岐命令のターゲット命令のトラック・アドレスを得るためにアドレス指定操作を行い、分岐命令のトラック・アドレスを選ぶように設計されたセレクタ、
これらのことを特徴とする請求項７に記載のシステム。
【請求項９】
プレディクタは予測深度を調節するために、分岐命令のL層分のトラック・アドレスを記録するためにレジスタの一部を使う（Lはmよりも小さな自然数）；
そしてプレディクタはプレディクタの機能をストップさせるようにはレジスタを使用しない、
これらのことを特徴とする請求項８に記載のシステム。
【請求項１０】
命令制御ユニットはさらに、
分岐命令セグメントの第１層の後の分岐命令セグメントの第n層を取得するように設計され、
遅いスピードのメモリを制御して、速いスピードのメモリに記憶されていない分岐命令のn層目を、速いスピードのメモリに供給するプレディクション・トラッカー（ここでnは２以上の自然数）を含むことを特徴とする請求項２に記載のシステム。
【請求項１１】
プレディクション・トラッカーは以下を含む：
分岐命令セグメントの第n層の分岐命令のトラック・アドレスを取得するように設計されたインクリメンタ；
分岐命令セグメントの第１層から第n層までの分岐命令のトラック・アドレスそれぞれを記憶するように設計された2n+1-2  個のレジスタ；
そして順番に実行されない分岐命令セグメントに対応するトラック・アドレスを、分岐命令の分岐が取られたか否かの情報にもとづいて、クリップするように設計されたn+1層のセレクタ、さらに
トラック・アドレスをクリップした後、出力されたトラック・アドレスは分岐命令の第１層にポイントする；
トラック・アドレスにもとづいて、分岐命令の第１層のターゲット命令のトラック・アドレスをトラック・テーブルから読み出す；
そしてターゲット命令のターゲット・アドレスにもとづいて、最も速いスピードのメモリからの命令がCPUに供給される、
これらのことを特徴とする請求項１０に記載のシステム。
【請求項１２】
メモリから提供される分岐命令のターゲット命令のブロックアドレスを計算し、
該当するトラック・アドレスを得るためのマッチング操作を行なうために、分岐命令のターゲット命令のブロックアドレスをアクティブ・リストに送る、
このように設計されたスキャナを含むことを特徴とする請求項１に記載のシステム。
【請求項１３】
マッチング結果が分岐命令のターゲット命令が速いスピードのメモリに記憶されていないことを示したとき、アクティブ・リストが遅いスピードのメモリを制御して分岐命令のターゲット命令を供給することを特徴とする請求項１２に記載のシステム。
【請求項１４】
命令制御ユニットがさらにトラッカーを含み、トラッカーは以下のように設計される：
リード・ポインタをトラック・アドレスとして使い、トラック・テーブルと最速スピードのメモリにおけるアドレス指定操作を行なう；
トラック・ポイントの中身を読み出しリード・ポインタの値を更新する；
そして同時にCPUで実行するための命令を読み出す、
これらのことを特徴とする請求項１に記載のシステム。
【請求項１５】
命令制御ユニットによってトラック・テーブルのトラック・ポイントから読み出された命令タイプが間接分岐命令であるとき、CPUは命令を実行し分岐ターゲット・アドレスを生成し、そして分岐ターゲット・アドレスはトラック・アドレスに変換される、
これらのことを特徴とする請求項１に記載のシステム。
【請求項１６】
CPUによって生成された間接分岐ターゲット・アドレスがアクティブ・リストによってトラック・アドレスに変換され、対応するトラック・テーブルのトラック・ポイントに記憶される；
そしてトラッカーのリード・ポインタがトラック・ポイントを再びポイントしたとき、アドレスは直接分岐ポイントとして投機的実行を行なうために用いられ、CPUによって現在生成された分岐ターゲット・アドレスはトラック・ポイントのトラック・アドレスに対応する命令アドレスと比較され、
ここで、CPUによって現在生成された分岐ターゲット・アドレスがトラック・ポイントのトラック・アドレスに対応する命令アドレスに等しいとき、投機的実行は正しく、後続するオペレーションが実行される；
そしてCPUによって現在生成された分岐ターゲット・アドレスがトラック・ポイントのトラック・アドレスに対応する命令アドレスに等しくないとき、
投機的実行は正しくなく、CPUによって生成された分岐ターゲット・アドレスはトラック・アドレスに変換され、そして後続するオペレーションが実行される、
これらのことを特徴とする請求項１５に記載のシステム。
【請求項１７】
分岐ターゲット命令とデータが置かれているメモリの異なるレベルに応じて、異なるタイプのトラック・アドレスがトラック・テーブルのトラック・ポイントに記憶される；
異なるタイプのトラック・アドレスは異なるレベルのメモリに対応している；
そしてアクティブ・リストに記憶されている情報にもとづいて、異なるレベルのキャッシュ・メモリのトラック・アドレスが変換される、
これらのことを特徴とする請求項２に記載のシステム。
【請求項１８】
命令制御ユニットによってトラック・テーブルのトラック・ポイントから読み出されたアドレスが、遅いスピードのメモリに対応するトラック・アドレスであったとき、トラック・アドレスはより速いスピードのメモリに対応するトラック・アドレスに変換されるためにアクティブ・リストに送られ、そしてトラック・テーブルのトラック・ポイントに充填され、同時に遅いスピードのメモリからの対応する命令ブロックもしくはデータブロックがより速いスピードのメモリに記憶される、
これらのことを特徴とする請求項１７に記載のシステム。
【請求項１９】
最も遅いスピードのメモリの１つのメモリ・ブロックに対応するアドレスの前のメモリ・ブロックもしくは次のメモリ・ブロックが最も遅いスピードのメモリに記憶されているとき、アクティブ・リストも最も遅いスピードのメモリのメモリ・ブロックに対応するアドレスの前のメモリ・ブロックもしくは次のメモリ・ブロックのメモリ位置情報を記憶する、
これらのことを特徴とする請求項２に記載のシステム。
【請求項２０】
スキャナは分岐ターゲット命令アドレスが境界の外か否かを判断する；
そして判断結果に応じて、異なる場所に置かれている分岐ターゲット命令に対して異なるフォーマットのアドレスが与えられる；
命令処理システムは、データアクセス命令の次データアドレスが境界の外か否かを判断するように設計されたデータエンジンを含む；
そして判断結果に応じて、異なる場所に置かれている次データには異なるフォーマットのアドレスが与えられる、
これらのことを特徴とする請求項１２に記載のシステム。
【請求項２１】
分岐ターゲット命令アドレスが、１つ以上のレベルのメモリにおいて、分岐ソース命令を含む同じメモリ・ブロック内にあるとき、より高レベルのメモリ内の分岐ターゲット命
令のトラック・アドレスが分岐ターゲット命令のトラック・アドレスとして用いられる；
分岐ソース命令のトラック・アドレスのブロック番号（BNX)が分岐ターゲット命令のトラック・アドレスのBNXとして用いられる；
そしてそのレベルのメモリに対応する分岐ターゲット命令アドレスのブロック・オフセット番号(BNY)部分が分岐ターゲット命令のトラック・アドレスのBNYとして用いられる；
分岐ターゲット命令アドレスがある１つのレベルのメモリの中の分岐ソース命令を含むメモリ・ブロックの前もしくは次のメモリ・ブロックに置かれているとき、当該レベルのメモリにおける分岐ターゲット命令のトラック・アドレスが分岐ターゲット命令のトラック・アドレスとして用いられる；
分岐ソース命令を含むメモリ・ブロックの前もしくは次のメモリ・ブロックのBNXが分岐ターゲット命令のトラック・アドレスのBNXとして用いられる；
そしてそのレベルのメモリに対応する分岐ターゲット命令アドレスのBNY部分が分岐ターゲット命令のトラック・アドレスのBNYとして用いられる、
これらのことを特徴とする請求項２０に記載のシステム。
【請求項２２】
次データアドレスが、１つ以上のレベルのメモリにおいて、現時点のデータを含む同じメモリ・ブロックの中にあるとき、より高レベルのメモリ内の次データのトラック・アドレスが次データのトラック・アドレスとして用いられる；
現時点のデータのトラック・アドレスのデータ・ブロック番号（DBNX)が次データのトラック・アドレスのDBNXとして用いられる；
そして当該レベルのメモリに対応する次データのデータ・ブロック・オフセット番号(DBNY)が次データのトラック・アドレスのDBNYとして用いられる、
これらのことを特徴とする請求項２０に記載のシステム。
【請求項２３】
各レベルのデータメモリがデータ・トラック・アドレス変換モジュールに対応する；
データ・トラック・アドレス変換モジュールの行とあるレベルのデータメモリのデータ・ブロックとの間には一対一の対応関係がある；
各行はデータ・ブロック番号と、低いレベルのデータメモリにおける対応するサブ・ブロック番号とを記憶し、従ってデータメモリのあるレベルのデータ・トラック・アドレスのブロック番号が、データメモリの低いレベルのデータ・トラック・アドレスのデータ・ブロック番号に変換される；
そしてサブ・ブロック番号とデータ・メモリのそのレベルのデータ・トラック・アドレスのブロック・オフセットが融合されてデータメモリの低いレベルのデータ・トラック・アドレスのデータ・ブロック・オフセットを形成する、
これらのことを特徴とする請求項３に記載のシステム。
【請求項２４】
命令とデータが遅いアクセススピードのメモリを共有する；
そして最も遅いアクセススピードのメモリにおける命令ブロックとデータ・ブロックのブロック・アドレスがアクティブ・リストに記憶される、
これらのことを特徴とする請求項３に記載のシステム。
【請求項２５】
物理アドレスにもとづいて、アクティブ・リストと高レベルのメモリ装置に対応するメモリにおいてアドレス指定操作が行なわれる；
そして仮想ー物理変換モジュールがアクティブ・リスト、スキャナもしくはデータエンジン、そしてCPUとの間のパス上に置かれる；
スキャナもしくはデータエンジンから生成された仮想アドレスが仮想ー物理変換モジュールによって物理アドレスに変換されたあと、物理アドレスはアクティブ・リストへ送られ、トラック・アドレスに変換される；
CPUによって生成された間接分岐命令アドレスもしくはデータアドレスが仮想ー物理変換モジュールによって物理アドレスに変換されたあと、物理アドレスはアクティブ・リス
トへ送られ、トラック・アドレスに変換される；
そしてトラック・アドレスによってメモリから得られた該当する命令もしくはデータがCPUで使われるために供給され、最高レベルのメモリに充填される、
これらのことを特徴とする請求項２に記載のシステム。
【請求項２６】
物理アドレスにもとづいて、アクティブ・リストと高レベルのメモリ装置に対応するメモリにおいてアドレス指定操作が行なわれる；
アクティブ・リストはアンチエイリアシング・テーブルを含む、
アンチエイリアシング・テーブルの各行は仮想ページ番号と、アクティブ・リスト本体における仮想ページ番号に対応する物理アドレスページ番号のブロック番号を記憶する；
そしてアクティブ・リストにおける命令ブロックもしくはデータブロックの物理アドレスに対応する仮想アドレスの総数が１より多いとき、アクティブ・リスト本体は命令ブロックもしくはデータブロックの物理アドレスと物理アドレスに対応する仮想アドレスを記憶し、他の仮想アドレスの仮想ページと対応するブロック番号はアンチエイリアシング・テーブルに記憶される；
CPUとスキャナもしくはデータエンジンによって出力された仮想アドレスが、アクティブ・リストの本体とアンチエイリアシング・テーブルの仮想アドレスとがマッチングされたとき、仮想アドレスのマッチング結果と仮想ページ番号が出力される；
ここでマッチング結果は以下の結果のうちの１つを示す：
仮想アドレスとマッチする；
仮想アドレスとマッチせず、仮想アドレスページ番号とマッチする；
そして仮想アドレスページ番号とマッチしない；
そしてCPUとスキャナもしくはデータエンジンによって出力された物理アドレスが、アクティブ・リストの本体の中の物理アドレスとマッチングされるとき、物理アドレスのマッチング結果と物理アドレスページ番号が出力される、
ここでマッチング結果は以下の結果のうちの１つを示す：
物理アドレスとマッチする；
物理アドレスとマッチせず、物理アドレスページ番号とマッチする；
そして物理アドレスページ番号とマッチしない、
これらのことを特徴とする請求項２０に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
[1] この発明は一般にコンピューター・アーキテクチャに関連し、そして特に命令処理のためのシステムと方法とに関連する。
【背景技術】
【０００２】
[2] 今日のコンピューター・アーキテクチャにおいて、プロセッサ（CPUとして知られている）は中心的な装置である。プロセッサは汎用プロセッサ、中央処理装置（CPU)、マイクロプログラム制御ユニット（MCU）、デジタル信号プロセッサ（DSP）、グラフィック処理ユニット（GPU）、システム・オン・チップ（SOC)、特定用途向け集積回路（ASIC）、などである。一般的に、プロセッサはコンピュータ内のハードウェアであり、コンピュータープログラムの複数の命令を、システムの基本的な算術的、論理的そして入出力オペレーションを実行することによって、遂行する。従って、メモリは処理のためにデータと命令を記憶する必要がある。
【０００３】
[3] 現在の命令処理システムは一般的にプロセッサとマルチレベルメモリシステムを含む。マルチレベルメモリ階層は一般的に複数のアクセススピードの異なるメモリ装置を含む。例えば、２レベルメモリシステムは一般的に第１レベルメモリと第２レベルメモリを含む。第１レベルメモリは第２レベルメモリよりも速い。しかし第１レベルメモリのメモリのスペース／領域／容量のサイズは、第２レベルメモリのメモリのスペース／領域／容量のサイズよりも小さい。つまり、第１レベルメモリは第２レベルメモリと比べて一般的にスピードにおいて速いが、サイズ／容量において小さい。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
[4] CPUが命令を実行するには、最初に、CPUは命令およびまたはデータを第１レベルメモリより読み出す必要がある。CPUはより速いスピードの第１レベルメモリと結合していることができる。しかし、第１レベルメモリの容量は第２レベルメモリよりも小さいため、第１レベルメモリはCPUから要求された命令を記憶していないかもしれない。このとき、２レベルメモリシステムにおいては、要求された命令は第２レベルメモリに記憶されている。しかし第２レベルメモリは第１レベルメモリよりもスピードが遅く、よって命令アクセス処理がCPUの実行スピードを遅くさせる結果になる、
【０００５】
[5] 一般的に、命令は分岐命令と非分岐命令を含む。非分岐命令の後続の命令は常に順番の次の命令である。従って、後続する命令は前もって第１レベルメモリに、時間的そして空間的局所性に沿って、記憶しておくことができる。しかし、分岐命令は、順序不同の分岐／ジャンプがおこるために、第１レベルメモリに前もって記憶させておくことができない。
【０００６】
[6] いま見られたように、現在の命令処理システムにおいては、第１レベルメモリは要求された命令をCPUに時間内に提供することができない。特に分岐命令を処理しているとき、従来型のプロセッサは多くの場合、分岐命令のあと次の命令をどこから取ってくるかを知らず、分岐命令が終わるのを待たなければならない。よって、分岐が成功裏にとられたシナリオにおいては、コンピューターシステムはパフォーマンスの大幅な低下を被る。
【課題を解決するための手段】
【０００７】
[7] 開示されるシステムと方法は、上記で打ち出された課題とその他の課題を解決することに向けられている。
【０００８】
[8] 本開示の１つの態様はn命令処理システムを含む。システムは中央処理装置（CPU)、m個のメモリ装置そして命令制御ユニットを含む。CPUはm個のメモリ装置と結合することが可能である。さらに、CPUは１つもしくは複数の実行可能命令を実行するように設計されている。異なるアクセススピードを持つm個（mは１より大きな自然数）のメモリ装置は命令を記憶するように設計されている。命令制御ユニットは、トラック・テーブルに記憶されている分岐命令のターゲット命令のトラックアドレスにもとづいて、より遅いスピードのメモリを制御してより速いメモリへ命令を提供するように設計される。
【０００９】
[9] 本開示の別の１つの態様はn命令処理方法を含む。その方法は、メモリから提供された命令の分岐命令のターゲット命令のブロックアドレスを計算する方法を含む。その方法はさらに、分岐命令のターゲット命令のブロックアドレスの上で行なうマッチング操作の後に、ターゲット命令に対応するトラックアドレスの行番号を取得する方法も含む。さらにその方法は、命令ブロックの中のターゲット命令のオフセットによって、ターゲット命令に対応するトラックアドレスの列（コラム）番号を得る方法も含む。その方法は、トラック・テーブルに記憶された分岐命令のターゲット命令のトラックアドレスにもとづいて、より遅いスピードのメモリを制御してより速いスピードのメモリへ命令を供給する方法を含む。
【００１０】
[10]本開示の他の態様は、この分野に精通した者にとっては、本開示の詳細な説明、クレーム、そして図面を通して理解されうる。
【発明の効果】
【００１１】
[11] ここに開示されたシステムと方法は、デジタルシステムによって用いられるキャッシュ構造に対して根本的な解決を提供する。キャッシュミスの後にキャッシュを充填する伝統的なキャッシュシステムと異なり、開示されたシステムと方法は命令の実行の前に命令キャッシュをメモリに充填し、よって初期化ミス(Compulsory Miss)を回避もしくは充分に隠蔽することができる。さらに、開示されたシステムと方法は、本質的にフル・アソシアアティブ・キャッシュ構造を提供し、インデックス衝突ミス (Conflict Miss)と容量ミス(Capacity Miss)を回避もしくは隠蔽する。加えて、開示されたシステムと方法は、タグ・マッチングによるキャッシュ・リードのクリティカルパスの遅れを防ぎ、よってより高いクロック周波数で稼働することができる。従って、マッチング操作とミス率が削減され、そして消費電力は大幅に下げられる。本発明のその他の利点と応用はこの分野の専門家には明らかである。
【００１２】
[12] 開示されたシステムと方法は様々なプロセッサ関連アプリケーションにおいて開示されたシステムと方法はまた、様々なプロセッサ関連アプリケーション、例えば汎用プロセッサ、専用プロセッサ、システム・オン・チップ（SOC）アプリケーション、特定用途向け集積回路（ASIC）アプリケーション、そして他のコンピューティング・システムにて用いることができる。例えば、開示された装置と方法は高性能プロセッサにおいて、システム全体の効率をあげるために用いることができる。
【図面の簡単な説明】
【００１３】
【図１】[13] 図１は開示された実施形態と整合する例示的な命令処理システムの構造概略図を示す。
【図２】[14]図２は開示された実施形態と整合する例示的な命令処理システムのもう１つの構造概略図を示す。
【図３】[15]図３は開示された実施形態と整合する例示的なプレディクタの構造概略図を示す。
【図４Ａ】[16] 図４Ａは開示された実施形態と整合する、分岐命令と分岐命令セグメントのツリー構造概略図を示す。
【図４Ｂ】図４Ｂは開示された実施形態と整合する、分岐命令と分岐命令セグメントのツリー構造概略図を示す。
【図４Ｃ】図４Ｃは開示された実施形態と整合する、分岐命令と分岐命令セグメントのツリー構造概略図を示す。
【図４Ｄ】図４Ｄは開示された実施形態と整合する、分岐命令と分岐命令セグメントのツリー構造概略図を示す。
【図４Ｅ】[17]図４Eは開示された実施形態と整合する、例示的なプレディクタの4つのレジスタの変化状況の概略図を示す。
【図５】[18] 図５は開示された実施形態と整合する例示的なプレディクション・トラッカーの構造概略図を示す。
【図６】[19] 図６は開示された実施形態と整合する例示的なバッファーの構造概略図を示す。
【図７】[20] 図７は開示された実施形態と整合する例示的な一時記憶付きのバッファーの構造概略図を示す。
【図８】[21] 図８は開示された実施形態と整合する例示的な命令処理システムのもう１つの構造概略図を示す。
【図９】[22] 図９は開示された実施形態と整合する分岐命令の計算と検索の構造概略図を示す。
【図１０Ａ】[23]図１０Aは開示された実施形態と整合する例示的なアクティブ・リストのエントリーの構造概略図を示す。
【図１０Ｂ】[24] 図１０Bは開示された実施形態と整合する例示的なトラック・テーブルのエントリーの内容概略図を示す
【図１１】[25] 図１１は開示された実施形態と整合する例示的な分岐命令アドレスと例示的な分岐ターゲット命令アドレスの概略図を示す。
【図１２】[26] 図１２は開示された実施形態と整合するスキャナによって計算される例示的な分岐ターゲットの構造概略図を示す。
【図１３】[27] 図１３は開示された実施形態と整合する例示的な、データアクセス命令のために前もってデータを備える方法の概略図を示す。
【図１４】[28] 図１４は開示された実施形態と整合する例示的なCPUとアクティブ・リストの間のトランスレーション・ルックアサイド・バッファ（TLB）の構造概略図を示す。
【図１５】[29] 図１５は開示された実施形態と整合する例示的な仮想アドレスから物理アドレスへの変換の構造概略図を示す。
【図１６】[30] 図１６は開示された実施形態と整合する例示的な仮想アドレスから物理アドレスへの変換の別の構造概略図を示す。
【図１７】[31] 図１７は開示された実施形態と整合する分岐ターゲットアドレスの計算のもう１つの構造概略図を示す。
【図１８】[32] 図１８は開示された実施形態と整合する例示的な仮想アドレスから物理アドレスへの変換のもう１つの構造概略図を示す。
【図１９】[33] 図１９は開示された実施形態と整合する例示的な命令タイプの概略図を示す。
【図２０】[34] 図２０は開示された実施形態と整合する例示的な命令処理システムの構造概略図を示す。
【発明を実施するための形態】
【００１４】
[35] 図８は例示的な望ましい実施形態を示す。
【００１５】
[36] 発明の例示的実施形態の詳細について、添付の製図と共にこれから言及する。製図の中で使われている同じ参照番号は、同等のまたは類似のパーツを言及している。
【００１６】
[37] 図１で描かれているのは、開示された実施形態に整合する例示的な命令処理システムの構造概略図である。図１で示されているように、命令処理システムは以下のものを含む：CPU10, アクティブ・リスト11, スキャナ12, トラック・テーブル13,
コリレーション・テーブル14, トラッカー15, レべル１キャッシュ16 (すなわち第１次メモリ、最もアクセス・スピードの早いメモリ）、レべル２キャッシュ17 (すなわち第２次メモリ、最もアクセス・スピードの遅いメモリ）。これらの構成部品はあくまでイラストの目的でここにリストアップおり、実際には他の部品も含まれうるし、またある種の部品は統合ないしは省略されうる。さらに、これらの様々な構成部品は複数のシステムに分散されうるし、また物理的あるいは仮想的な構成部品でありうる。そしてハードウェア（例えば集積回路）の中で実装されうるし、或はソフトウェアないしソフトウェアとハードウェアの組み合わせとしても実装されうる。
【００１７】
[38] この文書においてメモリのレベルとは、カップリングにおけるCPU10との近さのことを示す。CPU10に近いほど、メモリのレベルが高い。さらに、高いレベルのメモリ（すなわちレべル１キャッシュ16)は低いレベルのメモリ（すなわちレべル２キャッシュ17）より一般的にスピードが速く、そしてサイズが小さい。一般的にCPUに最も近いメモリは最もスピードが速い (レべル１キャッシュ16のように）。それに加えて、全てのレベルのメモリの間には包含関係が成立する。つまり低いレベルのメモリは高いレベルのメモリの記憶内容のすべてを記憶する。
【００１８】
[39] 分岐命令または分岐ポイントとは、この文書においては、CPU10に実行フローの変更をおこさせる（例えばシーケンスから外れた命令を実行する）全ての適切な命令のことを示す。分岐ソースとは分岐動作（すなわち分岐命令）を実行するのに使われた命令のことを示し、そして分岐ソース・アドレスとは分岐命令自身のアドレスのことを示す。分岐ターゲットとは、分岐命令が実行された時の分岐先のターゲット命令のことを示す。そして分岐ターゲット・アドレスとは分岐が成功裏に実行されたときに辿り着くアドレス、すなわち分岐ターゲット命令の命令アドレスのことである。現時点の命令とは現時点でCPU10によって実行または取り込まれている命令のことを示すとする。現時点の命令ブロックとは現在CPU10によって実行されている命令を含む命令ブロックのことである。フォールスルー命令とは分岐が取られなかった、或は成功しなかった場合における、分岐命令の次の命令のことを示す。
【００１９】
[40] トラック・テーブル13の行とL1キャッシュ16のキャッシュ・ブロックは一対一に対応する。トラック・テーブル13は複数のトラック・ポイントを含む。トラック・ポイントとはトラック・テーブル13の１つのエントリーのことであり、少なくとも１つの命令に関する情報（例えば命令タイプ情報、分岐ターゲットアドレスなど）を含んでいる。
【００２０】
[41] ここにいう、トラック・ポイントのトラック・アドレスとはトラック・ポイントのトラック・テーブル・アドレスのことであり、そしてトラック・アドレスは行番号と列番号から構成される。トラック・ポイントのトラック・アドレスは、トラック・ポイントによって表現されている命令の命令アドレスに対応している。分岐命令のトラック・ポイント（すなわち分岐ポイント）は分岐命令の分岐ターゲット命令のトラック・テーブルにおけるトラック・アドレスを含んでいる。そしてそのトラック・アドレスは分岐ターゲット命令の命令アドレスに対応している。
【００２１】
[42] 説明のため、BNはトラック・アドレスを表すものとする。BNXはトラック・アドレスの行番号、またはブロック・アドレスを表し、BNYはトラック・アドレスの列番号、またはブロック・オフセット・アドレスを表すとする。従ってトラック・テーブル13はX行Y列からなる２次元テーブルとして構成することができる。そして各行はBNXでアドレス指定され１つのメモリ・ブロックまたはメモリ・ラインに対応する。各列はBNYでアドレス指定され、メモリ・ブロック内の該当する命令のオフセットに対応している。それに応じてBNXとBNYからなる各BNは、トラック・テーブル13のトラック・ポイントとも対応している。つまり対応するトラック・ポイントはトラック・テーブル13の中において、１つのBNによって特定されうる。さらに、BN1は対応するL1キャッシュにおけるトラック・アドレスを表し、BN2は対応するL2キャッシュにおけるトラック・アドレスを表すものとする。
【００２２】
[43] トラック・ポイントに対応する命令が分岐命令であるとき（つまりトラック・ポイントの命令タイプ情報が、該当する命令は分岐命令であることを示しているとき）、トラック・ポイントは、分岐命令の分岐ターゲット命令の、メモリ（L1キャッシュまたはL2キャッシュ)における、トラック・アドレスによって指定される位置情報をも記憶する。トラック・アドレスにもとづいて、分岐ターゲット命令に対応するトラック・ポイントの位置がトラック・テーブル13の中に見いだされる。トラック・テーブル13の分岐ポイントにおいては、トラック・テーブル・アドレスは分岐ソース・アドレスに対応するトラック・アドレスであり、トラック・テーブルの内容は分岐ターゲット・アドレスに対応するトラック・アドレスを含む。
【００２３】
[44] ある種の実施形態においては、アクティブ・リスト11の全エントリー数はL2キャッシュ17の全キャッシュ・ブロック数と等しく、アクティブ・リスト11のエントリーとL2キャッシュ17のキャッシュ・ブロックとの間に一対一の対応を付ける事が可能である。アクティブ・リスト11の各エントリーは１つのBN2Xと対応しており、それはアクティブ・リスト11の行に対応しているL2キャッシュ17内のキャッシュ・ブロックを示しており、従ってBN2XとL2キャッシュ17のキャッシュ・ブロックとの間には一対一の関係をつけることができる。アクティブ・リスト11の各エントリーはL2キャッシュ・ブロックのブロック・アドレスを記憶している。さらに、アクティブ・リスト11の各エントリーは、L2キャッシュのキャッシュ・ブロックの全てあるいは一部がL1キャッシュ16に記憶されているか否かについての情報をも含んでいる。L2キャッシュのキャッシュ・ブロックの全てあるいは一部がL1キャッシュ16に記憶されているとき、L2キャッシュのキャッシュ・ブロックに対応するアクティブ・リスト11の各エントリーは、対応するL1キャッシュ・ブロックのブロック・ナンバー（すなわちBN1のBN1X)を記憶する。従ってアクティブ・リスト11におけるマッチング操作において命令アドレスが使われるとき、マッチしたエントリーに記憶されたBN1X、マッチしたエントリーに対応するBN2X、もしくはマッチングが成功しなかったという結果情報が得られることになる。
【００２４】
[45]  スキャナ12はL2キャッシュ17からL1キャッシュ16に送られる全ての命令を吟味する。もし スキャナ12が分岐命令を見つけた場合には、分岐命令の分岐ターゲット・アドレスが計算される。例えば、分岐ターゲット・アドレスは分岐命令を含む命令ブロックのブロック・アドレス、分岐命令を含む命令ブロックのブロック・オフセット、そして分岐オフセットの合計として計算される。
【００２５】
[46] スキャナ12によって計算された分岐ターゲット命令アドレスはアクティブ・リスト11に記憶されているメモリ・ブロックの行アドレスとマッチングされる。もしマッチが存在し、対応するBN1Xが見つかった場合（つまり分岐ターゲット命令がL1キャッシュ16に記憶されている）、アクティブ・リスト11はトラック・テーブル13にBN1Xを出力する。もしマッチが存在し、しかし対応するBN1Xが見つからない場合（つまり分岐ターゲット命令がL2キャッシュ17に記憶されているがL1キャッシュ16には無い）、アクティブ・リスト11はBN2Xをトラック・テーブル13に出力する。もしマッチが存在しない場合（すなわち分岐ターゲット命令がL1キャッシュ16にもL2キャッシュ17にも記憶されていない）、分岐ターゲット命令アドレスがバス18を経て外部メモリへと送られる。それと同時に、アクティブ・リスト11の１つのエントリーが割当られ、当該ブロック・アドレスを記憶する。そしてBN2Xがトラック・テーブル13に出力される。外部メモリから送られてくる、当該命令ブロックはこのBN2Xに対応するL2キャッシュ17のキャッシュ・ブロックに充填される。
【００２６】
[47]  L2キャッシュ17から出力された命令ブロックがL1キャッシュ16のキャッシュ・ブロックに書き込まれる時、対応するトラックがトラック・テーブル13の該当する行に作られる。命令ブロック内の分岐命令の分岐ターゲット命令アドレスは、アクティブ・リスト11内でマッチング操作が行なわれた後で、BN1XまたはBN2Xを出力する。命令ブロック内における分岐ターゲット命令の位置は（すなわち、分岐ターゲット命令アドレスのオフセット）は対応するBN1YまたはBN2Yである。従って分岐ターゲット命令に対応するトラック・アドレス（すなわちBN1またはBN2)が得られる。またトラック・ポイントの内容となるトラック・アドレスが分岐命令に対応するトラック・ポイントに記憶される。
【００２７】
[48] 従って命令ブロックと対応したトラックが確立される。トラック・テーブル13のトラック・ポイントの内容に含まれるトラック・アドレスはBN1またはBN2である。BN1とBN2はそれぞれL1キャッシュ16とL2キャッシュ17に記憶されている命令ブロックに対応している。
【００２８】
[49] トラッカー15はレジスタ21、インクリメンタ22してセレクタ23を含む。レジスタ21はトラック・アドレスを記憶する。レジスタ21のアウトプットはトラッカー15のリード・ポインタ19である。リード・ポインタ19はトラック・テーブル13内のトラック・ポイントをポイントする。リード・ポインタ19によってトラック・テーブル13から読み取られた命令タイプが非分岐命令タイプである場合、レジスタ21のトラック・アドレスのBNX部分は変更されないが、トラック・アドレスのBNY部分はインクリメンター22によって１を追加され、そしてセレクタ23へ送られる。この時、分岐が取られたかを表すTAKENシグナル20は無効であるため、セレクタ23はデフォルトのインプットを選択する。つまり、１が追加されたBNYがレジスタ21に書き込まれ、リード・ポインタ19が移動して次のトラック・ポイントをポイントする。
【００２９】
[50] リード・ポインタ19は分岐命令にポイントするまで移動する。つまりリード・ポインタ19の値が分岐ソース命令のトラック・アドレスになる。分岐ソース命令の分岐ターゲット命令のトラック・アドレスはトラック・テーブル13から読み取られ、セレクタ23へ送られる。セレクタ23のもう１つのインプットは依然としてトラック・アドレスに１を加えた、リード・ポインタ19によって出力されたものである（つまりリード・ポインタ19は分岐ポイントの後のトラック・ポイントのトラック・アドレスをポイントする）。
【００３０】
[51] よって、トラッカー15のリード・ポインタ19は、現在CPUによって実行されている命令に対応するトラック・ポイントに先行して、トラック・ポイントの後の最初の分岐ポイントまで移動する。トラック・テーブル13のトラック・ポイントの内容に含まれているトラック・アドレスは、対応するターゲット命令のメモリ内の位置に依ってBN1あるいはBN2であるため、ターゲット命令はターゲット命令のトラック・アドレスにもとづいてキャッシュ・メモリ（L1キャッシュまたはL2キャッシュ）の中に見つけられる。
【００３１】
[52] トラッカー15のリード・ポインタ19によってポイントされたトラック・ポイントの内容がBN2である場合、BN2がバス30を経てL2キャッシュ17へ送られる。そして対応する命令ブロックが見つけられL1キャッシュ16に充填される。それと同時に、この命令ブロックに対応するトラックがトラック・テーブル11の中に作られ、トラッカー15のリード・ポインタ19によってポイントされたトラック・ポイントの内容が、元々のBN2の代わりに対応するBN1に取って代わられる。
【００３２】
[53] CPU10が分岐命令を実行するとき、TAKENシグナル20が生成される。もしTAKENシグナル20が分岐が取られなかったことを表している場合、セレクタ23はリード・ポインタ19によって１を加えられたトラック・アドレスを選択する。そしてそのトラック・アドレスはレジスタ21に書き込まれる。リード・ポインタ19は現在のトラックを次の分岐ポイントまで移動し続ける。さらに、リード・ポインタ19によってポイントされた後続の命令をL1キャッシュ16のキャッシュ・ブロックから読み出すために、CPU10は命令アドレスのオフセットを出力する。
【００３３】
[54] TAKENシグナル20が分岐が取られた事を示している場合、セレクタ23はトラック・テーブル13によって出力された分岐ターゲット命令のトラック・アドレスを選択し、トラック・アドレスはレジスタ21に書き込まれる。リード・ポインタ19は、トラック・テーブル13の分岐ターゲット命令に対応するトラック・ポイントとL1キャッシュ16の分岐ターゲット命令にポイントする。そしてリード・ポインタ19によって出力されたトラック・アドレスBN1を元に、分岐ターゲット命令はL1キャッシュ16から直接見つけられる。よって、分岐ターゲット命令がCPU10で実行されるべく、出力される。前述の方法に従って、リード・ポインタ19は新しい現行トラックを次の分岐ポイントまで移動し続ける。さらに、リード・ポインタ19によってポイントされた該当する後続命令をL1キャッシュ16のキャッシュ・ブロックから読み出すために、CPU10は命令アドレスのオフセットを出力する。
【００３４】
[55] 従ってCPU10が命令を取りに行く必要があるとき、該当する命令は既にL1キャッシュ16に記憶されているか、或はL1キャッシュ16に充填されている最中である。それゆえ、キャッシュミスによる待ち時間の全てあるいは一部が隠蔽されることになり、命令処理システムの性能を改善する。
【００３５】
[56] ここでトラック・テーブル13の各トラックの最後のトラックポイントの後ろに、エンド・トラック・ポイントが追加される点に留意したい。エンド・トラック・ポイントのタイプは取られるに違いない分岐である。エンド・ポイントの中身のBNXは、トラック・テーブル13のトラックに対応する命令ブロックの、次の命令ブロックの行番号（BNX)である。エンド・ポイントの中身のBNYは’０’である。よってトラッカー15がトラックの最後の分岐ポイントから移動し始めると、ポインタはエンド・トラック・ポイントをポイントし、そして次の命令ブロックに移動する。BNXとBNYは命令およびまたはデータに対しても使用されうる。しかし、データの場合はデータ行番号またはデータ・ブロック番号(DBNX)、そしてデータ列番号またはデータ・ブロック・オフセット番号(DBNY)が使われる。
【００３６】
[57] コリレーション・テーブル14はトラック・テーブル13のトラック間にある相関関係、例えば異なる行間の分岐関係、を表すために作られる。分岐ターゲットのないトラックは、トラック・テーブル13の中で選ばれそして交換される。また、トラック・テーブル13内の１つのトラックが交換される必要が有る場合、当該分岐ソースの中身（すなわち分岐ターゲット・トラック・アドレス）が更新されて、エラーが発生するのを防ぐ（例えば分岐ソースのトラック・ポイントの中身が間違った分岐ターゲットのトラック・ポイントにポイントするのを防ぐ）。
【００３７】
[58] 加えて、この構造はm階層のメモリ（キャッシュ）をもった命令処理システムに拡張することができる。ここでmは２以上の自然数である；図１においてはmは２である。
【００３８】
[59]  もしL2キャッシュ17からL1キャッシュ16へ命令ブロックを充填する時間が非常に長いと、より多くの層の分岐命令のターゲット命令のターゲット・アドレスが先に見つけ出され、これらターゲット命令が早めにL2キャッシュ17からL1キャッシュ16へ移される。
従ってCPU10が当該命令を読み込む必要があるとき、これらの命令は既にL1キャッシュ16に記憶されており、それ故キャッシュミスによる待ち時間をより良く隠蔽することになる。
【００３９】
[60] 命令処理システムはプレディクタも含む。プレディクタはトラッカーによって指示された分岐命令セグメントの後ろの分岐命令セグメントを得るために構成される。つまりプレディクタは分岐セグメントの第１層の後のn層目の分岐命令セグメントを取得するために構成され、そしてそれは遅いスピードのメモリ装置を制御して、現在速いメモリ装置に記憶されていないn層目の分岐命令セグメントに対して、速いスピードのメモリ装置を提供する。nは自然数である。
【００４０】
[61] 図２は開示された実施形態と整合する例示的な命令処理システムのもう１つの構造概略図を示す。図２に示されるように、命令処理システムはCPU10、アクティブ・リスト11、スキャナ12、トラック・テーブル13、コリレーション・テーブル14、トラッカー15、レベル１キャッシュ(L1キャッシュ）16、レベル２キャッシュ(L2キャッシュ）17、プレディクタ24、そしてバッファー25を含む。
【００４１】
[62] トラック・テーブル13は二つのトラック・アドレスにもとづいて同時に二つの対応するトラック・ポイントの中身を出力する。１つのトラック・アドレスはトラッカー15のリード・ポインタ19から来る。もう１つのトラック・アドレスはプレディクタ24から出力されてバス26から来る。
【００４２】
[63] プレディクタ24は分岐命令セグメントの第１層の後のn層目の分岐命令セグメントを得るように設定される。そして分岐命令セグメントの第１層の後のn層目の分岐命令セグメントのトラック・アドレスをバス26を経てトラック・テーブル13に出力する。もしトラック・アドレスがBN2のである場合、対応する命令ブロックがL2キャッシュ17からBN2に応じて先行して読み出され、そして一時的にバッファー25に記憶される。もしトラック・アドレスがBN1ならば、追加的な操作は必要とされない。さらに、バファー25に記憶されている全ての命令セグメントに対応するBN値もバッファー25に記憶される。ここでは、各命令セグメントは唯１つの分岐命令を持つとする。特に、各分岐命令と、直前の分岐命令の前に位置する全ての命令（直前の分岐命令は含まない）は１つの命令セグメントに属するものとする。トラッカーまたはプレディクタのアウトプット・ポインタは分岐命令のところで止まるため、’命令セグメントのトラック・アドレス’は’命令セグメントの中の分岐命令のトラック・アドレス’と等しい。’分岐命令セグメント’、’次の命令セグメント’、そして’ターゲット命令セグメント’はここで定義された’命令セグメント’に属する。
【００４３】
[64]  従って、トラッカー15のリード・ポインタ19によってポイントされた分岐命令の後の、n層の分岐命令の分岐ターゲット命令ブロックは、プレディクタ24を用いて、L１キャッシュ16またはバッファー25に先行して記憶されることになる。リード・ポインタ19によってポイントされた分岐命令のCPU10による実行結果にもとづいて、いくつかのバッファー25の命令ブロックはL１キャッシュ16に充填される。
【００４４】
[65] 図3で描かれているのは、開示された実施形態に整合する例示的なプレディクタの構造概略図である。図3に示されるように、プレディクタ24は分岐命令セグメントの第１層の後の第２層目の分岐命令セグメントのトラック・アドレスを取得するように設計されている。ここでnは２に等しい。
【００４５】
[66] プレディクタ24はインクリメンタ27、セレクタ28、コントロール・ロジック29そして４つのレジスタを含む。コントロール・ロジック29はCPU10から送られたTAKENシグナル20 と、CPU10で実行された命令が分岐命令であるか否かを示すBRANCHシグナル40(すなわち、BRANCHシグナル40はTAKENシグナル20が有効か否かを示す)を受け取る。そしてレジスタ並びにセレクタ28の書き込み操作を制御するコントロール・シグナルを生成する。レジスタ101とレジスタ102のインプットはインクリメンタ27から来る。レジスタ103とレジスタ104のインプットはトラック・テーブル13から来る。4つのレジスタからのアウトプットはセレクタ28に送られる。セレクタ28は第１層の分岐命令セグメントの最初の層の分岐命令セグメントのトラック・アドレスを出力する。
【００４６】
[67]具体的には、レジスタ101とレジスタ102は、現時点の分岐命令の次の命令セグメントの次の命令セグメント・アドレス、並びに現時点の分岐命令のターゲット命令セグメントの次の命令セグメント・アドレスとを記憶するように設計される。レジスタ103とレジスタ104は、現時点の分岐命令の次の命令セグメントのターゲット命令セグメント・アドレス、並びに現時点の分岐命令のターゲット命令セグメントのターゲット命令セグメント・アドレスとを記憶するように設計される。
【００４７】
[68] 図４A〜４Dは開示された実施形態と整合する、分岐命令と分岐命令セグメントのツリー構造概略図を示す。図４A~４Dに示されているように、ノード’A’は命令セグメント；’A’の左の子ノード’B’は’A’の次の命令セグメント；そしてA’の右の子ノード’C’は’A’のターゲット命令セグメントである。同様に’B’の左の子ノード’D’は’B’の次の命令セグメント；’B’の右の子ノード’E’は’B’のターゲット命令セグメントである。’C’の左の子ノード’F’は’C’の次の命令セグメント；’C’の右の子ノード’G’は’C’のターゲット命令セグメントである。’D’の左の子ノード’H’は’D’の次の命令セグメント；’D’の右の子ノード’I’は’D’のターゲット命令セグメントである。
’E’の左の子ノード’J’は’E’の次の命令セグメント；’E’の右の子ノード’K’は’E’のターゲット命令セグメントである。‘J’の左の子ノード’Q’は’J’の次の命令セグメント；’J’の右の子ノード’R’は’J’のターゲット命令セグメントである。
‘K’の左の子ノード’S’は’K’の次の命令セグメント；’K’の右の子ノード’T’は’K’のターゲット命令セグメントである。
【００４８】
[69] 加えて図４A~４Dにおいて、三角ラベルはプレディクタ24のレジスタに対応する。
三角ラベルはレジスタに記憶されている命令セグメントに対応するトラック・アドレスを表している。図４Eは開示された実施形態と整合する例示的なプレディクタの、４つのレジスタの変化状況を示す概略図である。図４Eに示されるように、各列（カラム）はプレディクタ24のレジスタの１つに対応している。つまり、最初の列（カラム）はレジスタ101；２番目の列（カラム）はレジスタ102；３番目の列（カラム）はレジスタ103；４番目の列（カラム）はレジスタ104にそれぞれ対応している。各行はそれぞれ図４A~４Dにおけるアップデートに対応している。
【００４９】
[70] 先ず、命令は現在の命令セグメント’A’から実行され始める。この時、図４Eの最初の行に示されるように、’A’のトラック・アドレスがレジスタ101に記憶される。
【００５０】
[71] それから、図４Aと図４Eの第２行目に示されるように、レジスタ101に記憶された’A’ のトラック・アドレスにもとづいて、’A’のターゲット命令セグメント’C’のトラック・アドレスがトラック・テーブル13から読み出され、レジスタ103に記憶される。同時に’A’のトラック・アドレスが、’A’の次の命令セグメント’B’のトラック・アドレスを得るために、インクリメンタ27と合算され、得られたトラック・アドレスがレジスタ101に記憶される。
【００５１】
[72] さらに、図４Bと図４Eの第3行目に示されるように、レジスタ103に記憶されている’C’のトラック・アドレスにもとづいて、’C’のターゲット命令セグメント’G’のトラック・アドレスがトラック・テーブル13から読み出され、レジスタ104に記憶される。同時に、’C’のトラック・アドレスが、’C’の次の命令セグメント’F’のトラック・アドレスを得るために、インクリメンタ27と合算され、得られたトラックアドレスがレジスタ102に記憶される。レジスタ101に記憶されている’B’のトラック・アドレスにもとづいて、’B’のターゲット命令セグメント’E’のトラック・アドレスもトラック・テーブル13から読み出され、レジスタ103に記憶される。同時に、’B’のトラック・アドレスが、’B’の次の命令セグメント’D’のトラック・アドレスを得るために、インクリメンタ27と合算され、得られたトラックアドレスがレジスタ101に記憶される。
【００５２】
[73] このようにして、プレディクタ24の４つのレジスタの値が生成される。これらの４つのレジスタの値はそれぞれ’A’の分岐命令の後の第２層目の分岐命令セグメントの各トラック・アドレスに対応している。
【００５３】
[74] 図３に戻り、CPU10が’A’の分岐命令を実行しTAKENシグナル(20)を生成した時、TAKENシグナル20の値にもとづいて、コントロール・ロジック29はそれぞれ対応する制御シグナルを生成して４つのレジスタ値を更新する。TAKENシグナル20が分岐が取られなかった事を示すとき、コントロール・ロジック29はセレクタ28を制御してレジスタ101とレジスタ103のトラック・アドレスをアウトプットとして選び、後続する命令セグメントのトラック・アドレスを生成する。そしてレジスタ102 とレジスタ104に記憶されている’F’と’G’に対応するトラック・アドレスを破棄する。
【００５４】
[75] 具体的には、図４Cと図４Eの第4行目に示されるように、レジスタ103に記憶されている’E’のトラック・アドレスにもとづいて、’E’のターゲット命令セグメント’K’のトラック・アドレスがトラック・テーブル13から読み出され、レジスタ104に記憶される。同時に、’E’のトラック・アドレスが、’E’の次の命令セグメント’J’のトラック・アドレスを得るために、インクリメンタ27と合算され、得られたトラック・アドレスがレジスタ102に記憶される。レジスタ101に記憶された’D’のトラック・アドレスにもとづいて、’D’のターゲット命令セグメント’I’のトラック・アドレスがトラック・テーブル13から読み出され、レジスタ103に記憶される。同時に、’D’のトラック・アドレスが、’D’の次の命令セグメント’H’のトラック・アドレスを得るために、インクリメンタ27と合算され、得られたトラック・アドレスがレジスタ101に記憶される。従って、’A’の分岐命令の実行結果にもとづいて、プレディクタ24の４つのレジスタの値が更新される。すなわち、これらの４つのレジスタの値はそれぞれ’B’の分岐命令の後の第２層目の分岐命令セグメントの各トラック・アドレスに対応している。
【００５５】
[76] さて、CPU10が’B’の分岐命令を実行してTAKENシグナル20を生成した時、もしTAKENシグナル20が分岐が成功裏に取られたことを示すならば、コントロール・ロジック29はセレクタ28を制御して、レジスタ102とレジスタ104のトラック・アドレスをアウトプットとして選び、後続する命令セグメントのトラック・アドレスを生成する。そしてレジスタ101とレジスタ103に記憶されている’H’と’I’に対応するトラック・アドレスを破棄する。
【００５６】
[77]  具体的には、図４Dと図４Eの第５行目に示されるように、レジスタ102に記憶されている’J’のトラック・アドレスにもとづいて、’J’のターゲット命令セグメント’R’のトラック・アドレスがトラック・テーブル13から読み出され、レジスタ103に記憶される。同時に、’J’のトラック・アドレスが、’J’の次の命令セグメント’Q’のトラック・アドレスを得るために、インクリメンタ27と合算され、得られたトラック・アドレスがレジスタ101に記憶される。レジスタ104に記憶された’K’のトラック・アドレスにもとづいて、’K’のターゲット命令セグメント’T’のトラック・アドレスがトラック・テーブル13から読み出され、レジスタ104に記憶される。同時に、’K’のトラック・アドレスが、’K’の次の命令セグメント’S’のトラック・アドレスを得るために、インクリメンター27と合算され、得られたトラック・アドレスがレジスタ102に記憶される。従って、’B’の分岐命令の実行結果にもとづいて、プレディクタ24の４つのレジスタ値が更新される。すなわち、これらの４つのレジスタの値はそれぞれ’E’の分岐命令の後の第二層目の分岐命令セグメントの各トラック・アドレスに対応している。
【００５７】
[78]これらの操作の間、プレディクタ24はトラッカー15より２レベル先の命令セグメントにポイントする。プレディクタ24がこの命令セグメントのトラック・アドレスがBN2である事を察知するやいなや、該当する命令がバス30を経てL２キャッシュ17から読み出され、バッファー25に記憶される。TAKENシグナル20にもとづいて、バッファー25はL1キャッシュ16に充填する命令ブロックを選び、そしてトラック・テーブル13内の分岐ポイントの中身のBN2がBN1に取って代わられる。従ってトラッカー15のリード・ポインタが分岐ポイントをポイントするとき、読み出されるターゲット命令のトラック・アドレスはBN1である。
よって、もし命令セグメントがL2キャッシュ17からバッファー25へ充填され、そしてバッファー25からL1キャッシュ16へと充填される間の時間が、充填操作の開始時点とCPUが命令セグメントへ到達する時点との間の時間よりも長くならないならば、CPUによって要求された命令セグメント(次の命令セグメントとターゲット命令セグメント)は既にL1キャッシュ16に記憶されている。CPU10によって実行された分岐ポイントに対応する分岐命令の分岐が取られたか否かに関わらず、次の命令はL1キャッシュ16から読み出され、キャッシュミスを回避する。あるいは、CPUによって要求された命令セグメントがL1キャッシュ16にまだ記憶されていなくても、命令セグメントは既に充填プロセスの途中であり、キャッシュミスによる待ち時間を一部隠蔽することになる。
【００５８】
[79] プレディクション・トラッカーもトラッカー15とプレディクタ24の機能を果たすために用いることができる。図５は開示された実施形態と整合する例示的なプレディクション・トラッカーの構造概略図である。図５に示されるように、プレディクション・トラッカー31 はプレディクション・セクション32とクリップ・セクション33を含む。トラック・テーブル13はトラック・アドレスにもとづいて、該当するトラック・ポイントの中身をアウトプットするだけで良い。つまり、トラック・テーブル13は読み取り専用ポートだけ必要とする。クリップ・セクション33はリード・ポインタ19を出力しトラッカー15の機能を果たす。プレディクション・セクション32は第一層の分岐命令セグメントの後の第二層分岐命令セグメント（つまりnは2である）のトラック・アドレスを取得し、プレディクタ24の機能を果たす。プレディクション・セクション32の構造と処理プロセスは前述されたプレディクタ24のそれと同様であり、ここでは繰り返さない。
【００５９】
[80] クリップ・セクション33はレジスタ105、レジスタ106、セレクタ34、セレクタ35、セレクタ36そしてセレクタ37を含む。セレクタ34とセレクタ35は、プレディクション・セクション32の４つのレジスタに記憶されている、第一層の分岐命令セグメントの後の第二層分岐命令セグメントのトラック・アドレスをそれぞれ受け取る。TAKENシグナル20 にもとづいて、トラック・アドレスは半分にクリップされる。クリッピングの後、残りのトラック・アドレスはレジスタ105とレジスタ106にそれぞれ記憶される。分岐命令セグメントの次の命令セグメントと分岐命令セグメントのトラック・アドレスのBNXは同じである（すなわちBN1X)。そのため、ターゲット命令セグメントのトラック・アドレスに現れたBN2XのみBN1Xに取り代えられる必要がある。バッファー25に記憶された命令セグメント（すなわちBN2に対応する命令セグメント）がL1キャッシュ16に充填されるとき、特定の取替方策に従って、BN1が命令セグメントを記憶するように割り当てられる。従って、セレクタ35によって出力されたトラック・アドレスがBN2である場合、セレクタ37は新しく割り当てられたBN1をバス44から選び、そのアウトプットとする；セレクタ35によって出力されたトラック・アドレスがBN1である場合、セレクタ37はレジスタ106に一時的に記憶されたトラック・アドレスをそのアウトプットとする。TAKENシグナル20にもとづいて、セレクタ36はセレクタ37によって出力されたトラック・アドレスとレジスタ105に記憶されたトラック・アドレスの中から１つを選び、リード・ポインタ19とする。選ばれたトラック・アドレスは、CPU10のために該当する命令ブロックを見つけるために、L1キャッシュ16に送られる。
【００６０】
[81] 図4A〜4Eに描かれた状況において、図４Bと図４Eの第3行目に示されるように、プレディクション・セクション32の４つのレジスタの値は前述の方法で生成される。この時、クリップ・セクション33の４つのインプットは、左から右へそれぞれ’D’、’F’、’E’そして’G’のトラック・アドレスである。’B’のトラック・アドレスはクリップ・セクション33のレジスタ105に記憶される;
’C’のトラック・アドレスはクリップ・セクション33のレジスタ106に記憶される;
リード・ポインタ19の値は’A’のトラック・アドレスである。
【００６１】
[82] CPU10によって実行された分岐命令’A’によって生成されたTAKENシグナル20が、分岐が取られなかったことを示した時、セレクタ36はレジスタ105のインプット’B’を選んでリード・ポインタ19の値とする。リード・ポインタ19の値はCPU10のために該当する命令ブロックを見つけるために、L1キャッシュ16に送られ、そして’C’のトラック・アドレスはクリップされ破棄される。同時に、クリップ・セクション33のセレクタ34はレジスタ101からインプット’D’を選び、インプット’D’をレジスタ105に書き込む。セレクタ35 はレジスタ103からインプット’E’を選び、インプット’E’をレジスタ106に書き込む。よって、’B’の後続の命令セグメントのトラック・アドレスはそのまま保存され、’C’の後続の命令セグメントのトラック・アドレスはクリップされ破棄される。図４Cと図４Eの第4行目に示されるように、プレディクション・セクション32は上記の方法によって４つのレジスタ値を更新する。この時、クリップ・セクション33の４つのインプットは、左から右へそれぞれ’H’、’J’、’I’そして’K’のトラック・アドレスである。
【００６２】
[83] CPU10によって実行された分岐命令’B’によって生成されたTAKENシグナル20が、分岐が成功裏に取られたことを示した時、クリップ・セクション33のセレクタ34はレジスタ102からインプット’J’を選び、インプット’J’をレジスタ105へ書き込む。
セレクタ35はレジスタ104からインプット’K’を選び、インプット’K’をレジスタ106へ書き込む。よって、’E’の後続の命令セグメントのトラック・アドレスはそのまま保存され、’D’の後続の命令セグメントのトラック・アドレスはクリップされ破棄される。同時にセレクタ36はレジスタ106からインプット’E’をリード・ポインタ19の値として選ぶ。リード・ポインタ19の値はCPU10のために該当する命令ブロックを見つけるために、L1キャッシュ16に送られ、そして’C’のトラック・アドレスはクリップされ破棄される。図４Dと図４Eの第5行目に示されるように、プレディクション・セクション32は上記の方法によって４つのレジスタ値を更新する。
【００６３】
[84] プレディクション・トラッカー31はトラッカー15とプレディクタ24の機能を実装する事ができる。
【００６４】
[85] 図６は開示された実施形態と整合する例示的なバッファーの構造概略図である。
図６に示されるように、バッファー25 はレジスタ202、レジスタ203、レジスタ204、レジスタ205、レジスタ206、セレクタ38そしてセレクタ39を含む。バッファー25の構造はプレディクション・トラッカー31と似ており、バッファー25の幾つかのモジュールは省くことができる。
【００６５】
[86] レジスタ202、レジスタ203、レジスタ204、レジスタ205、レジスタ206は命令ブロックを記憶するように設計される。レジスタ202は、プレディクション・セクション32のレジスタ102に対応する命令セグメントを含む命令ブロックを記憶する；
レジスタ203は、プレディクション・セクション32のレジスタ103に対応する命令セグメントを含む命令ブロックを記憶する；
レジスタ204は、プレディクション・セクション32のレジスタ104に対応する命令セグメントを含む命令ブロックを記憶する；
レジスタ205は、プレディクション・セクション32のレジスタ105に対応する命令セグメントを含む命令ブロックを記憶する；
レジスタ206は、プレディクション・セクション32のレジスタ106に対応する命令セグメントを含む命令ブロックを記憶する；
プレディクション・セクション32のレジスタ101のトラック・アドレスに対応する命令セグメントはCPU10によって実行されている命令セグメントであり、命令はL1キャッシュ16に記憶されている。従ってバッファー25は、レジスタ101のトラック・アドレスに対応する命令セグメントを記憶するために用いられるレジスタを含む必要がない。同様に、CPU10がTAKENシグナル20を生成する限り、分岐が取られたか否かに関わらず、レジスタ202の命令ブロックはレジスタ205に書き込まれる。
【００６６】
[87] セレクタ38の機能はクリップ・セクション33のセレクタ35の機能と同様であり、セレクタ38もTAKENシグナル20によって制御されている。セレクタ35がレジスタ103からトラック・アドレスを選ぶとき、セレクタ38はレジスタ203から命令ブロックを選ぶ；
セレクタ35がレジスタ104からトラック・アドレスを選ぶとき、セレクタ38はレジスタ204から命令ブロックを選ぶ。
【００６７】
[88] セレクタ39の機能はクリップ・セクション33のセレクタ36の機能と同様であり、セレクタ39もTAKENシグナル20によって制御されている。セレクタ36 がレジスタ105からトラック・アドレスを選ぶとき、セレクタ39はレジスタ205から命令ブロックを選ぶ；
セレクタ36 がレジスタ106からトラック・アドレスを選ぶとき、セレクタ39はレジスタ206から命令ブロックを選ぶ。
【００６８】
[89] 従って、バッファー25に記憶された命令ブロックはCPU10による様々な分岐命令の分岐決定に応じて、順次クリップされる。クリップされた後に残った命令ブロックはCPU10によって実行される命令ブロックで、その命令ブロックはL1キャッシュ16に充填される。
【００６９】
[90] なお、バッファー25は必要なコンポーネントではない。命令処理システムがバッファー25を含まない場合、バス30を経てプレディクタによって出力されたBN2にもとづいて、L2キャッシュ17の該当する命令ブロックがL1キャッシュ16に直接充填される。そしてトラック・テーブル13における対応する分岐ポイントのBN2の中身がBN1に取って代わられる。命令処理システムがバッファー25を含む場合、やはり同じ量の命令ブロックがL2キャッシュ17から読み取られる必要があるが、実行されるべき命令ブロックのみがバッファー25からL1キャッシュに充填され、よってL1キャッシュ16の交換回数を削減する。従って、データ汚染（つまり、使われない命令ブロックがL1キャッシュ16のキャッシュ・ブロックを占めてしまうこと）が減少し、それに応じて命令処理システムのパフォーマンスも向上する。
【００７０】
[91] 加えて、バッファー25のクリップされ破棄された命令ブロックは、一時的に他のバッファーに記憶される事もできる。そうする事で、次に必要になった時に、クリップされ破棄された命令ブロックをより速く取り出すことができる。図７は開示された実施形態と整合する例示的な、一時ストレージ付きのバッファーの構造概略図である。バッファー25の構造と機能は図６におけるバッファー25の構造と機能と同様であり、ここでは繰り返さない。しかし、バッファー25のクリップされ破棄された命令ブロックは他のバッファー41に送られる。バッファー41は一時的にクリップされ破棄された命令ブロックを記憶する。
バッファー41はより小さい容量をもち、バッファー25の近くに位置する。従ってクリップされ破棄された命令ブロックが再びバッファー25に充填される必要があるとき、先ずバッファー41の中でマッチング操作が行なわれる。もしマッチがあった場合、命令ブロックは直接に読み出され、バス42を経てバッファー25に送られ、L2キャッシュ17から命令ブロックが読み出される際の長い遅延を避けることができる。さらにL2キャッシュにアクセスする回数も削減される。バッファー41 の構造はどんな適切な構造でもよく、例えば先入先出(FIFO)バッファー、フルアソシアティブ構造、セットアソシアティブ構造などでも良い。
【００７１】
[92] ここで記載された技術的解決に従って、上記の実施形態において記載された構造は、もっと多レベルのメモリ（キャッシュ）をもった命令処理システムに拡張することができる。図８は開示された実施形態と整合する例示的な命令処理システムのもう１つの構造概略図である。ここではmはレベル数を表し、３に等しいとする。mが他の値（すなわちmが３より大きい自然数）の場合、命令処理システムの構造は図８に示されている命令処理システムの構造と同様である。
【００７２】
[93] 図８に示されるように、命令処理システムはCPU10、アクティブ・リスト11、スキャナ12、トラック・テーブル13、コリレーション・テーブル14、プレディクション・トラッカー31、L1キャッシュ16、L2キャッシュ17、レベル３キャッシュ(L3キャッシュ)45、そして２番目のスキャナ46を含む。
【００７３】
[94] プレディクション・トラッカー31は図２のトラッカー15とプレディクタ24に取り替えられうる。L1キャッシュ16、L2キャッシュ17、L3キャッシュ45が一体となって3レベル記憶システムを構成する (つまり、mは３に等しい）。
【００７４】
[95] アクティブ・リスト11 は最も外側のキャッシュ(つまりL3キャッシュ）に対応している。つまり、アクティブ・リスト11のエントリーとL3キャッシュのキャッシュ・ブロックの間には一対一の関係が成立する。各エントリーは１つのBN3Xに対応し、アクティブ・リスト11の行に対応する、L3キャッシュに記憶されたL3キャッシュ・ブロックの位置を示す。よって、BN3XとL3キャッシュのキャッシュ・ブロックとの間に一対一の関係が成立する。アクティブ・リスト11の各エントリーはL3キャッシュ・ブロックのブロック・アドレスを記憶する。
【００７５】
[96] さらに、アクティブ・リスト11の各エントリーは、L3キャッシュ・ブロックの全て或は一部がL1キャッシュ16そしてL2キャッシュ17に記憶されているかに関する情報をも含んでいる。L3キャッシュ・ブロックの全て或は一部がL1キャッシュ16に記憶されている場合、L3キャッシュの命令ブロックに対応するアクティブ・リスト11のエントリーは、対応するL1キャッシュ・ブロックのブロック番号(すなわち、BN1のBN1X)を記憶する。同様に、L3キャッシュ・ブロックの全て或は一部がL2キャッシュ17に記憶されている場合、L3キャッシュの命令ブロックに対応するアクティブ・リスト11のエントリーは、対応するL2キャッシュ・ブロックのブロック番号(すなわち、BN2のBN2X)を記憶する。
【００７６】
[97] 従って、命令アドレスがアクティブ・リスト11においてマッチング操作を行なうために用いられるとき、マッチしたエントリーに記憶されているBN1XまたはBN2X、マッチしたエントリーに対応するBN3X、またはマッチングが成功しなかった事を示す結果のいずれかが得られる。
【００７７】
[98] スキャナ46はL3キャッシュ45からL2キャッシュ17へ送られる全ての命令を吟味する。もしスキャナ46が、ある命令が分岐命令であることを見つけたならば、分岐命令の分岐ターゲット・アドレスが計算される。分岐ターゲット命令アドレスはアクティブ・リスト11に記憶されているメモリ・ブロックの行アドレスとマッチングされる。もしマッチが存在し、対応するBN2Xが見つかった場合、それは分岐ターゲット命令がL2キャッシュ17に記憶されている事を示し、追加的な操作は行なわれない。もしマッチが存在し、対応するBN2Xが見つらなかった場合、それは分岐ターゲット命令がL3キャッシュ45に記憶されている、しかしL2キャッシュ17に記憶されていないことを示す。そして、アクティブ・リスト11はバス47を経てL3キャッシュ47へBN3Xを出力し、分岐ターゲット命令を含む命令ブロックがL3キャッシュ47からL2キャッシュ17へ充填される。もしマッチが存在しない場合、それは分岐ターゲット命令がL2キャッシュ17にもL3キャッシュ45にも記憶されていない事を示し、分岐ターゲット命令アドレスが外部メモリへバス18を経て送られる。同時にアクティブ・リスト11は該当するブロック・アドレスを記憶するために１つのエントリーを割り当てる。BN3Xが出力されトラック・テーブル13へ送られる。外部メモリから送られた該当する命令ブロックが、L3キャッシュ45のBN3Xに対応するキャッシュ・ブロックに充填され、そしてL2キャッシュ17に充填される。従って、マッチング結果に関わらず、L3キャッシュ45からL2キャッシュ17に充填された命令ブロックの分岐命令の分岐ターゲット命令を含む全ての命令ブロックは、L2キャッシュ17に充填される。
【００７８】
[99] スキャナ12はL2キャッシュ17からL1キャッシュ16へ送られる全ての命令を上記方法によって吟味する。もしスキャナ12がある命令が分岐命令であることを見つけたならば、分岐命令の分岐ターゲット・アドレスが計算される。分岐ターゲット命令アドレスはアクティブ・リスト11に記憶されているメモリ・ブロックの行アドレスとマッチングされる。
【００７９】
[100] L2キャッシュ17の命令ブロックの分岐命令の分岐ターゲット命令を含む命令ブロックは、L2キャッシュ17に充填されため、マッチング操作は成功するはずである。この時、もし対応するBN1Xが見つかる場合（つまり、分岐ターゲット命令がL1キャッシュ16に記憶されている）、アクティブ・リスト11はBN1Xをトラック・テーブル13に出力し、該当する分岐ポイントの中身の行番号とする。この命令ブロックの中での分岐ターゲット命令のオフセットは、該当する分岐ポイントの中身の列（コラム）番号とする。もしもし対応するBN1Xが見つからない場合（つまり分岐ターゲット命令がL2キャッシュ17に記憶されているがL1キャッシュ16には記憶されていない）、アクティブ・リスト11はBN2Xをトラック・テーブル13に出力し、該当する分岐ポイントの中身の行番号とする。この命令ブロックの中での分岐ターゲット命令のオフセットは、該当する分岐ポイントの中身の列（コラム）番号とする。従って、充填されている命令ブロックに対応するトラックが上記方法によって確立する。
【００８０】
[101] トラック・テーブル13のトラック・ポイントの中身のトラック・アドレスはBN1かBN2である。BN1とBN2はそれぞれL1キャッシュ16とL2キャッシュ17に記憶されている命令ブロックに対応している。トラック・テーブル13によって読み出された中身に応じて、プレディクション・トラッカー31がCPU10に命令を提供するためにキャッシュ・システムを制御するプロセスは、前実施形態において記載されたプロセスと同じであり、ここでは繰り返さない。
【００８１】
[102] 前実施形態と比べて、スキャナ46はL3キャッシュ45からL2キャッシュ17へ充填される命令ブロックの分岐命令を早く見つけ出す事ができる。そして該当する分岐ターゲット命令をL2キャッシュ17に充填し、L3キャッシュ45からL2キャッシュ17へ命令ブロックを充填する際の時間遅延を隠蔽することができる。同じ方法がもっと多くのレベルのキャッシュを持つ命令処理システムにも拡張でき、最も外側のメモリ（キャッシュ）から内側へのメモリ（キャッシュ）へ命令ブロックを充填する際の時間遅延を隠蔽し、命令処理システムのパフォーマンスを向上させる。他の利点と応用はこの分野に熟練した者にとっては自明である。
【００８２】
[103] アドレス変更の幅によって、異なるキャッシュ・メモリ・アドレス指定法と、仮想アドレスから物理アドレスへの変換法が選ばれる。例えば、二つの連続したアドレス命令のアドレス変更の幅は’1’に等しい。しかし分岐命令（あるいは’分岐ソース命令’とも呼ばれる)と分岐ターゲット命令の間のアドレス変更の幅は、分岐ジャンプの距離に等しい。L1キャッシュにおいては、L1キャッシュの同じ命令ブロック内の命令のブロック・アドレスは同じである。キャッシュ・トラック・アドレスのBN1Xは同じである。従って、もし前の命令のトラック・アドレスBN1Xが知られていれば、次の命令のトラック・アドレスBN1Xは直接に取得することができる（次の命令のトラック・アドレスBN1Xはアクティブ・リストとのマッチング操作を行なわなくてよい）。そうでなければ、アクティブ・リストとのマッチング操作が必要になる可能性がある。
【００８３】
[104] 同様に、同一ページの命令に対応する仮想アドレスは同一であり、同一ページの命令に対応する物理アドレスも同一である。従って、前の命令の物理アドレスが知られているとき、次の命令の物理アドレスも直接に取得されうる（仮想アドレスから物理アドレスへの変換モジュールあるいはTLBとのマッチング操作は行なわれる必要がない）。
そうでなければ、TBLとのマッチング操作が必要になる可能性がある。
【００８４】
[105] 記載の簡略化のため、２レベル・キャッシュ階層（L1キャッシュとL2キャッシュ）を持つメモリシステムが以下の実施形態において用いられる。この技術的解決は２レベル以上のキャッシュ階層（例えば３レベル・キャッシュ階層）を持ったメモリシステムにも応用できる。方法の詳細は図８の具体化から参照されるべく、ここでは繰り返さない。
【００８５】
[106] 図９は開示された実施形態と整合する分岐命令の計算と検索の構造概略図を示す。図９に示されるように、スキャナがターゲット命令アドレスを計算・取得し、そしてターゲット命令アドレスの場所を判断する。それから関連した情報が、CPUが命令を実行する時に使うためにトラック・テーブルへ書き込まれる。
【００８６】
[107] 仮想アドレスを物理アドレスに変換する変換索引バッファー（Translation Lookaside Buffer = TBL）はL2キャッシュ17とより下位レベル・メモリ（例えばL3キャッシュ45)との間に位置する。ここでは、本実施形態においての全てのアドレスは仮想アドレスであるとする。仮想アドレス変換とは、どの物理アドレスがどの仮想アドレスにマップするかを探し出すプロセスとする。
【００８７】
[108] この構造はCPU10、アクティブ・リスト91、スキャナ12、トラック・テーブル13、コリレーション・テーブル14、トラッカー15、レベル１キャッシュ16（すなわち、第一レベルメモリ、つまり最も速いアクセススピードを持つメモリ）、そしてレベル２キャッシュ17（すなわち、第２レベル・メモリ、つまり最も遅いアクセススピードを持つメモリ）を含む。この構造はまた、マルチプレクサ911、マルチプレクサ912そしてメモリ902を含む。様々なコンポーネントはあくまで例示目的で記載されているものとし、他のコンポーネントも含まれうるし、また幾つかのコンポーネントは融合ないしは省略されうる。さらに、様々なコンポーネントは複数のシステムに分散しうるし、物理的なあるいは仮想コンポーネントでありうる。またハードウェア（例えば集積回路）によって、あるいはソフトウェアによって、あるいはハードウェアとソフトウェアの組み合わせによって実装されうる。
【００８８】
[109] トラッカー15は図２のプレディクタ24によって交換されうる。ここにおいては、メモリ902は独立モジュールとして、アクティブ・リスト・マッチング以外のアドレス指定法を使うことができる。このとき、メモリ902とアクティブ・リスト91は一緒になって、前述の実施形態におけるアクティブ・リスト（例えば図１のアクティブ・リスト11)の機能を実現する。以下の実施形態において、メモリ902は独立モジュールとしても使用されうる。
【００８９】
[110] アクティブ・リスト91のエントリーとメモリ902のエントリーはL2キャッシュ17のメモリ・ブロックと一対一に対応している。すなわち、各エントリーはBN2Xに対応し、L2キャッシュ17に記憶されているアクティブ・リスト91の行に対応するメモリ・ブロックの位置を示す。従って、BN2XとL2キャッシュ17のメモリブロックとの間に対応関係が形成される。具体的には、図１０Aを参照すると、図１０Aは開示された実施形態と整合する、例示的なアクティブ・リストのエントリーの構造概略図である。図１０Aに示されるように、アクティブ・リスト91の各エントリーはL2キャッシュのメモリブロックのブロック・アドレス77とその有効ビットを記憶する。異なるプログラムは同じ仮想アドレスを持ちうるから、アクティブ・リスト91の各エントリーは仮想アドレスに対応するスレッドID（TID）をも含む。
【００９０】
[111] メモリ902の各エントリーは、L2キャッシュのキャッシュ・ブロックの全てあるいは一部がL1キャッシュ16に記憶されているか否かの情報を含む。L2キャッシュ17の１行の命令ブロックは、L1キャッシュの４つの命令ブロックに対応する。従って、アクティブ・リスト91の各エントリーは、L1キャッシュ・ブロック番号BN1X（例えば、メモリ領域 60、61、62、63）を記憶するメモリ領域をも含む。各メモリ領域は有効ビットを含む。有効ビットはそのメモリ・ブロックに記憶されているL1キャッシュ・ブロック番号BN1Xが有効であるか否かを示す。加えて、各エントリーのメモリ領域64は、現在のL2命令ブロックの前のL2命令ブロックのBN2X情報を含む。各エントリーのメモリ領域65は、現在のL2命令ブロックの次のL2命令ブロックのBN2X情報を含む。これら二つの各メモリ・ブロックは、メモリ領域に記憶されているL2キャッシュ・ブロック番号BN2Xが有効であるかを示す有効ビットを含む。
【００９１】
[112] 図９に戻って、トラッカー15はレジスタ21、インクリメンター22そしてセレクタ23を含む。レジスタ21はトラック・アドレスを記憶する。リード・ポインタ19(すなわち、レジスタ21のアウトプット）は、トラック・テーブル13の、現在CPUによって実行されている命令の後の最初の分岐ポイントをポイントし、そしてトラック・ポイントの内容を読み出す。
【００９２】
[113] 図１０Bは開示された実施形態と整合する、例示的なトラック・テーブルのエントリーの内容概略図である。図１０Bに示されるように、トラック・テーブル13 のエントリー・フォーマットは686と688である。エントリー・フォーマット686はTYPE、BN2X（L2キャッシュブロック番号）そしてBN2Y（L2キャッシュブロックにおけるオフセット）を含む。TYPEは非分岐命令、直接分岐命令、間接分岐命令の命令タイプ・アドレスを含む。TYPEはまたアドレス・タイプも含む。エントリー・フォーマット686のアドレス・タイプはL2キャッシュアドレスBN2である。エントリー・フォーマット688はTYPE、BN1X（L1キャッシュブロック番号）そしてBN1Y（L1キャッシュブロックにおけるオフセット）を含む。エントリー・フォーマット688の命令タイプはエントリー・フォーマット688の命令タイプと同じであるが、エントリー・フォーマット688のアドレス・タイプはL1キャッシュアドレスBN1である。
【００９３】
[114] トラッカー15のリード・ポインタ19のBN1はトラック・ポイントの内容を読み出すために、トラック・テーブル13におけるアドレス操作に用いられる。BN1はさらに、L1キャッシュにおけるアドレス操作によって、CPUで実行するための該当する命令を読み出すためのにも用いられる。特に、トラッカー15のリード・ポインタ19によってポイントされたトラック・ポイントの内容が読み出され、バス30を経てセレクタ23へ送られる。
【００９４】
[115] トラック・ポイントの内容に含まれる命令タイプが命令が分岐命令でないことを示している時、レジスタ21によって出力されたBN1Yにインクリメンター22によって１が加算される。TAKENシグナル20の制御の下（この時、値は０）、セレクタ23はレジスタ21からBN1Xを選び、BN1Yをインクリメンター22から受け取り、新しいBN1とする。新しいBN1はレジスタ21に書き込まれ、リード・ポインタ19は移動して次のトラック・ポイントをポイントする。すなわち、レジスタ21の値が更新されて次のサイクルのレジスタ21の値は１が加算されたものになる。リード・ポインタ19は分岐ポイントに達するまで移動する。レジスタ21の更新はCPUのステータスによっても制御される。パイプラインがCPU10によって止められた時は、レジスタ21は更新されない。
【００９５】
[116] トラック・ポイントの内容に含まれる命令タイプが、命令は条件付き分岐命令であることを示しているとき、分岐が取られたかを示すTAKENシグナル20にもとづいて、セレクタ23は選択操作を行なう。BRANCHシグナル40の値が’1’である時、レジスタ21の値が更新される。すなわち、CPUが分岐ソース命令を実行するとき、TAKENシグナル20は有効である。この時、もしTAKENシグナル20の値が’１’ならば（分岐が取られたことを示す）、セレクタ23はトラック・テーブル13によって出力されたBN1を選び、レジスタ21 を更新する。すなわち、リード・ポインタ19は分岐ターゲット命令に対応するトラック・ポイントをポイントする。もしTAKENシグナル20の値が’０’ならば（分岐が取られなかったことを示す）、セレクタ23はレジスタ21からBN1Xを選び、インクリメンター22からBN1Yを受け、新しいBN1としてレジスタ21を更新する。すなわち、リード・ポインタ19は次のトラック・ポイントをポイントする。
【００９６】
[117] トラッカー15のリード・ポインタがトラック・テーブル13のエントリーにポイントする時、分岐ソース命令のタイプが決定される（直接分岐命令か間接分岐命令か）。
【００９７】
[118] ここの実施形態では、分岐ソース命令は直接分岐命令とする。１つのL2命令ブロックは４つのL1命令ブロックを含む。BN2Yの最も重要な２ビットはサブ・ブロック番号である。各L2命令ブロックの１つのサブ・ブロックは１つのL1命令ブロックと等しい。つまり、各L2命令ブロックの１つのサブ・ブロック番号はつのL1命令ブロックに対応している。例えば、サブ・ブロック番号’００’はメモリ領域60に対応する；
サブ・ブロック番号’０１’はメモリ領域61に対応する; などなど。
【００９８】
[119]  トラッカー15のリード・ポインタ19がトラック・テーブル13のエントリーにポイントしている時、エントリーに記憶されている値はバス30を経て読み出される。もしエントリーに記憶されている値がL2キャッシュのトラック・アドレス（すなわち、BN2XとBN2Y）であれば、BN2XとBN2Yがそれぞれ行アドレスと列アドレスとして用いられ、バス(30)とマルチプレクサ(901)を経てメモリ902の中の該当するエントリーが探索される。そしてエントリーに記憶されているBN1Xが有効であるか、つまり将来分岐ソース命令の分岐ターゲット命令アドレスを計算する際に使用できるか、を照合する。もしメモリ902の該当するエントリーに記憶されているBN1Xが有効である（それは対応する分岐ターゲット命令がL1キャッシュ16に記憶されている事を示す）ならば、メモリ902の該当するエントリーに記憶されたBN1Xは、 トラッカー15のリード・ポインタ19によってポイントされたトラック・テーブル13のエントリーへ、バス910とマルチプレクサ911を経て書き込まれる。同時にトラック・テーブル13に記憶されている当該エントリーのBN2Yの値はBN1Yの値によって更新される（すなわち、サブ・ブロック番号がBN2Yから取り除かれる）。
【００９９】
[120]  従って、CPU10が分岐ソース命令を実行するとき、トラック・テーブル13の該当するエントリーに記憶されたBN1にもとづいて、CPU10で実行するためにL1キャッシュ16から命令が直接読み出される。もしメモリ902の該当するエントリーに記憶されているBN1Xが無効であるならば（対応する分岐ターゲット命令がL1キャッシュ16に含まれていないことを示す）、バス30のBN2XとBN2Yにもとづいて、分岐ターゲット命令を含むL2命令サブ・ブロックが、L2キャッシュ17から交換ロジックによって生成されたBN1Xに従って、L1キャッシュ16に充填される。CPUが命令を実行する時、命令はCPU10で実行されるためにL1キャッシュ16から直接読み出される。同時に、交換ロジックによって生成されたBN1Xの値とBN1Yの値（サブ・ブロック番号はバス30のBN2Yからは取り除かれる）は一緒に、トラッカー15のリード・ポインタ19によってポイントされるトラック・テーブル13のエントリーに書き込まれる。メモリ902の対応するエントリーのBN1Xの値は有効と設定される。
【０１００】
[121] 同時に、バス30のBN2Xにもとづいて、アクティブ・リスト91に記憶されている対応するタグが読み出され、将来分岐ソース命令の分岐ターゲット命令アドレスを計算するために、スキャナ12のレジスタに送られる。交換ロジックによって生成されたBN1Xはスキャナ12のレジスタに記憶される。よって、取得されたL2命令サブ・ブロックの分岐ターゲット・アドレスがトラック・テーブルに書き込まれるとき、BN1Xが分岐ソース・アドレスによってポイントされたトラック・テーブル13の１つの行として使われる。
【０１０１】
[122] トラッカー15のリード・ポインタがトラック・テーブル13のエントリーにポイントしている時、エントリーに記憶された値がバス30を経て読み出される。分岐ソース命令が間接分岐命令である場合、分岐ターゲット命令アドレスがCPU10によって計算される。そして、分岐ターゲット命令アドレスが、マッチング操作のために、バス908とマルチプレクサ912を経てアクティブ・リスト91に送られる。もしマッチング操作が成功であれば（分岐ターゲット命令がL2キャッシュ17に記憶されている事を示す）、成功裏にマッチされたBN2Xが、該当する行を見つけるために、バス903とマルチプレクサ901を経てメモリ902に送られる。そして計算によって得られた分岐ターゲット命令のBN2Yが、対応する列（コラム）を見つけるために、バス905とマルチプレクサ901を経てメモリ902に送られる。もしメモリ902の該当するエントリーに記憶されたBN1Xが有効である場合、 前述の実施形態の該当するオペレーションと同様のオペレーションがなされる。違いは、L1キャッシュ16に記憶された命令が、BN1Xと計算された分岐ターゲット命令のBN1Yとによってすぐに取得され、CPU10に送られる点である。もしメモリ902の該当するエントリーに記憶されたBN1Xが有効でない場合、前述の実施形態の該当するオペレーションと同様のオペレーションがなされる。違いは、L2キャッシュ17に記憶されている分岐ターゲット命令を含むL2命令サブ・ブロックが、BN2値によって、交換ポリシーによって決定されたL1キャッシュ16にすぐに充填される点である。同時に、計算によって得られた分岐ターゲット命令のBN1XとBN1Yが、間接分岐命令に対応するトラック・テーブル13のエントリーにすぐに書き込まれ、分岐ターゲット命令がCPU10で実行されるために送られる。
【０１０２】
[123] もしマッチング操作が不成功であれば（分岐ターゲット命令がL2キャッシュ17に記憶されていない事を示す）、計算によって得られた分岐ターゲット・アドレスが、より低いレベルのメモリからとられ、交換ポリシーによって決定されたL2キャッシュに充填される。後続するオペレーションは前述の実施形態と同様である。
【０１０３】
[124] 以下の実施形態において、すべての分岐ソース命令は直接分岐命令であるとする。
【０１０４】
[125] L2キャッシュ17のL2命令サブ・ブロックがL1キャッシュ16に充填されるとき、スキャナ12は、 L2キャッシュ17からL1キャッシュ16に送られるL2命令サブ・ブロックを吟味する。L2命令サブ・ブロックの１つの命令が分岐命令である時、分岐ソース命令の分岐ターゲットアドレスが計算される。
【０１０５】
[126]  パワー濫費を減らすため（すなわち、アクティブ・リスト91にアクセスする回数を減らす）、分岐ターゲット命令の場所が、L1命令ブロック境界、L2命令ブロック境界そしてL2命令ブロックの次のレベルの命令ブロック境界の外にあるかを判断する事により、アクティブ・リスト91にアクセスする頻度が削減される。
【０１０６】
[127] スキャナ12が分岐ターゲット命令アドレスを計算する時、分岐ターゲットの場所は以下の状況を含む。
【０１０７】
[128] 状況１：分岐ターゲット・アドレスと分岐ソース・アドレスが同じL1命令ブロック内にある場合（つまり、分岐ターゲット命令と分岐ソース命令が同じBN1Xを持つ）、スキャナに記憶されたBN1Xと計算によって得られたBX1YがBN1に合成される。そのBN1が、スキャナ12によって一時的に記憶されバス922を経たBN1X、さらにバス907とマルチプレクサ911を経たスキャナ12の分岐ソース命令のBN1Y、とによってポイントされたトラック・テーブル13のエントリーに書き込まれる。分岐ソース命令が実行されるとき、CPU10は直接に命令をL1キャッシュ16から実行のために読み出す。
【０１０８】
[129] 状況２：分岐ターゲット・アドレスと分岐ソースアドレスが同じL2命令ブロック内にある場合（つまり、分岐ターゲット命令と分岐ソース命令が同じBN2Xを持つ）、スキャナに記憶されているBN2Xと計算によって得られたBN2YがBN2に合成される。BN2が用いられて、バス905とマルチプレクサ901を経て、メモリ902に記憶された該当するエントリーが探し出される。もしメモリ902の該当するエントリーに記憶されているBN1X値が有効ならば、BN1XとBN1Y（すなわち、計算によって得られたBN2Yからサブ・ブロック番号は取り除かれる）はBN1に合成される。そのBN1が、スキャナ12によって一時的に記憶されバス922を経たBN1X、さらにバス910とマルチプレクサ911を経たスキャナ12の分岐ソース命令のBN1Yと、とによってポイントされたトラック・テーブル13のエントリーに書き込まれる。分岐ソース命令が実行されるとき、CPU10は直接に命令をL1キャッシュ16から実行のために読み出す。もしメモリ902の該当するエントリーに記憶されたBN1X値が無効であるならば、BN2が、スキャナ12によって一時的に記憶されバス922を経たBN1X、さらにバス910とマルチプレクサ911を経たスキャナ12の分岐ソース命令のBN1Y、とによってポイントされたトラック・テーブル13のエントリーに書き込まれる。後続するオペレーションは前述の実施形態における対応するオペレーションと同様である。
【０１０９】
[130]  状況３：分岐ターゲットアドレスが、分岐ソースアドレスの前のL2命令ブロックもしくは次のL2命令ブロックにある場合、BN2がバス905マルチプレクサ901を経てメモリ902とへ送られ、該当するエントリーの前のL2命令ブロックもしくは次のL2命令ブロックのBN2Xを探す。バス910を経て読み出されたBN2Xと計算によって得られたBN2Yが一緒にメモリ902の他のエントリーをポイントする。もしメモリ902のエントリーに記憶されているBN1X値が有効であるならば、BN1XとBN1Y（すなわち、計算によって得られたBN2Yからサブ・ブロック番号は取り除かれる）はBN1に合成される。そのBN1が、スキャナ12によって一時的に記憶されバス922を経たBN1X、さらにバス910とマルチプレクサ911を経たスキャナ12の分岐ソース命令のBN1Y、とによってポイントされたトラック・テーブル13のエントリーに書き込まれる。もしメモリ902の該当するエントリーに記憶されたBN1X値が無効であるならば、該当するエントリーのBN2Xと計算によって得られた分岐ターゲット命令BN2YはBN2として一緒に接合される。このBN2が、スキャナ12によって一時的に記憶されバス922を経たBN1X、さらにバス910とマルチプレクサ911を経たスキャナ12の分岐ソース命令のBN1Y、とによってポイントされたトラック・テーブル13のエントリーに書き込まれる。後続するオペレーションは前述の実施形態における対応するオペレーションと同様である。
【０１１０】
[131]  状況４：分岐ターゲットアドレスが、分岐ソースアドレスの前のL2命令ブロックもしくは次のL2命令ブロックの外にある場合、計算によって得られた分岐ターゲット命令アドレスは、マッチング操作を行なうため、バス907とマルチプレクサ912を経てアクティブ・リスト91とへ送られる。もしマッチング操作が成功であれば、後続するオペレーションは前述の実施形態における対応するオペレーションと同様である。もしマッチング操作が不成功であれば、計算によって得られた分岐ターゲットアドレスにもとづいて、該当する命令ブロックが下位レベルメモリから取ってこられ、交換ロジックによって決定されたL2キャッシュブロックへ充填される。後続するオペレーションは前述の実施形態における対応するオペレーションと同様である。
【０１１１】
[132]  ここでは、命令アドレスは４つの部分に分割されているとする。図１１は開示された実施形態と整合する、例示的な命令アドレスと分岐距離を表した概略図である。図１１に示されるように、命令アドレスの下位ビット（すなわち、命令アドレスのオフセット50)はL1命令ブロックにおける命令の位置を表していて、それはすなわちBN1Yである。命令アドレスの中間セグメント（すなわち、命令アドレスのサブ・ブロック番号51)は、L2命令ブロックの中におけるL1命令ブロックの位置を表す。従って、サブ・ブロック番号51とオフセット50は一緒にBN2Y54を構成する。サブ・ブロック番号51の高位ビット52は、分岐ターゲットアドレスが分岐ソースアドレスの次のL2命令ブロックの場所の外にあるか、を判断するのに使われる。命令アドレスの高位ビット53は、マッチング情報を得るために、アクティブ・リスト91の該当するタグとマッチングするために使われる。３つの境界が、命令アドレスの４つの部分の接合部に作られる。それに応じて、分岐ターゲット・アドレスは３つの部分に分割される；低位ビット51はBN1Yに対応、中間セグメント56はサブ・ブロック番号に対応、高位ビット57は命令アドレスの高位ビット53に対応する。
【０１１２】
[133]  命令ターゲットアドレスは分岐ソース命令アドレスに分岐距離を加える事で得られる。加算操作の最中、加法器は上記３つの境界に対応する３つのキャリー信号を持つ。もし上記のどこか境界において分岐距離が’０’で、境界における加法器のキャリーが’０’であるならば、それは分岐ターゲットアドレスが該当する境界内にあることを示す；そうでなけれ、それは分岐ターゲットアドレスが境界の外にあることを示す。もし上記のどこか境界において分岐距離が’１’で、境界における加法器のキャリーが’１’であるならば、それは分岐ターゲットアドレスが該当する境界内にあることを示す；そうでなけれ、それは分岐ターゲットアドレスが境界の外にあることを示す。
【０１１３】
[134] 図１２は開示された実施形態と整合する、例示的な、スキャナによって計算された分岐ターゲットアドレスを表した構造概略図である。図１２に示されるように、構造概略図は第１レジスタ1201、第２レジスタ1202、第３レジスタ1203、第４レジスタ1204、第５レジスタ1205、インクリメンター1206、そして複数キャリー出力をもつ加法器1207を含む。
【０１１４】
[135] バス907は分岐ターゲットアドレスをキャッシュ・システムの他のモジュールへ送るために用いられる。バス907はアドレス・フォーマットを区別するために用いられる制御シグナルも含む。
【０１１５】
[136] 上記方法にもとづいて、３つのノン・オーバーフロー（境界内の）シグナルを得る。３つのシグナルはプライオリティ選択ロジックによって処理され、最小の有効なノン・オーバーフロー・シグナルが勝ち残り、大きな境界に対応するノン・オーバーフロー・シグナルを無効にする。この最小の境界に対応する有効なノン・オーバーフロー・シグナルがバス907に置かれ、アドレス・フォーマットを示す。
【０１１６】
[137] 上記方法にもとづいて、もし分岐ターゲットアドレスが、分岐ソース命令を含むL1命令ブロック内にあると判別されたとき、スキャナ12に記憶されたBN1Xがバス1214を経て、計算によって得られたBN1Yがバス1212を経て、BN1として接合される。このBN1がバス907を経て、スキャナ12によって一時的に記憶されバス922を経たBN1X、さらにバス907を経たスキャナ12の分岐ソース命令のBN1Y、とによってポイントされたトラック・テーブル13のエントリーに書き込まれる。分岐ソース命令が実行されるとき、CPU10は、直接に命令をL1キャッシュ16から実行のために読み出す。
【０１１７】
[138] もし分岐ターゲット命令が現在の分岐ソース命令を含むL2命令ブロック内にあるならば、バス1213、バス1211、そしてバス1212はBN2アドレスとして接合される。BN2アドレスはバス907を経てメモリ902に送られ、後続するオペレーションは図９における上記実施形態と同質である。
【０１１８】
[139] もし分岐ターゲット命令が現在の分岐ソース命令を含むL2命令ブロックの次のL2命令ブロック内にあるならば、バス1213、バス1211、そしてバス1212はBN2アドレスとして接合される。BN2アドレスは、次のL2命令ブロック情報を探すために、バス907を経てメモリ902に送られ、そして後続するオペレーションは図９における上記実施形態と同質である。
【０１１９】
[140] もし分岐ターゲット命令が、現在の分岐ソース命令を含むL2命令ブロックの次のL2命令ブロックの外にあるならば、バス1210、バス1211、そしてバス1212は分岐ターゲットアドレスとして接合される。分岐ターゲット・アドレスはバス907を経てアクティブ・リスト91へ送られ、後続するオペレーションは図９における上記実施形態と同質である。加えて、分岐距離のサイン・ビットに応じて、分岐ターゲット・アドレスが現在の分岐ソース命令の前か後かが決定される。
【０１２０】
[141] 上記の技術的解決は、データ・キャッシュに対しても適用することができる。図１３は開示された実施形態と整合する、例示的な、 データアクセス命令に先んじてデータを準備する仕組みの概略図である。データに関する部分が図１３に描かれている。命令に関する部分は図１３から省かれている。
【０１２１】
[142] CPU10、アクティブ・リスト91、コリレーション・テーブル14、トラッカー15、２番目のマルチプレクサ912、そしてメモリ902は図９のそれらと同じである。L1キャッシュとL2キャッシュはデータキャッシュ、すなわち、L1データキャッシュ116とL2データキャッシュ117である。加えて、データエンジン112のデータキャッシュに対する役割は、スキャナ12の命令キャッシュに対する役割と同等であり、そして３ユニット・マルチプレクサ1101は最初の４インプット・マルチプレクサ901を取り替えたものである。
【０１２２】
[143] L1データキャッシュ116のキャッシュ・ブロック（すなわちL1データ・ブロック）はDBN1Xでポイントされる。L2データキャッシュ117のキャッシュ・ブロック（すなわちL2データ・ブロック）はアクティブ・リスト91のエントリーに対応しており、同じDBN2Xでポイントされる。
【０１２３】
[144] 図９の実施形態と同様に、L2データキャッシュ117はL1データキャッシュ116の全てのデータを含んでいる。１つのL2データキャッシュ・ブロックは幾つかのL1データキャッシュ・ブロックに対応することができる。具体的には、ここでの実施形態においては、１つのL2データキャッシュ・ブロックは４のL1データキャッシュ・ブロックに対応することができる。L1データブロックのDBN1XとL2データブロックのDBN2Xとの対応関係はメモリ902に記憶されてる。従って、DBN2Yによって、対応するDBN1X が、メモリ902内でDBN2Xによりポイントされている行から見つけ出される。DBN1XとDBN2Yの下部（すなわちDBN1Y）は一緒にDBN1を構成し、よってDBN2がDBN1に翻訳される。加えて、この構造はメモリ1102をも含む。メモリ1102の行はL1データキャッシュ116のL1データブロックに対応し、各行は、対応するL1データキャッシュ・ブロックのL2データブロック番号と、該当するBN2Xの中のBN1Xのサブ・ブロック番号とを記憶する。従って、DBN1XはDBN2Xに翻訳される。サブ・ブロック番号とバス30を経て送られたDBN1YはDBN2Yに融合される。
【０１２４】
[145] トラック・テーブル13のトラック・ポイントの命令タイプも、分岐命令（分岐ポイントに対応する）に加えて、データアクセス命令（データポイントに対応する）をも含む。分岐ポイントと同様に、データ・ポイント・フォーマット1188は４つの部分を含む: TYPE、L1データ・ブロック番号（DBN1X）、L1ブロック・オフセット（DBN1Y）そしてストライドである。データアクセス命令タイプはさらにロード命令と記憶命令に分類される。
ストライドとは、CPU10が連続的に同じデータアクセス命令を２回実行するときの、対応するデータアドレスの差異である。
【０１２５】
[146] データエンジン112はストライド計算モデュールを含む。ストライド計算モデュールは、CPU10が連続的に同じデータアクセス命令を２回実行するときの対応するデータアドレスの値に対して減法操作を行なう。取得された差異がストライドである。ストライドにもとづいて、CPU10が同じデータ・アクセス命令を再び将来実行する際に、可能な予測データアドレスが予測される。
【０１２６】
[147] この実施形態において、予測データアドレスに対応するL1データ・ブロックはL1データキャッシュ116にあらかじめ充填されている。ロード命令においては、予測データアドレスに対応するデータはさらに読み出され、そしてバス125に置かれる。CPU10がデータアクセス命令を実行する時、L1データキャッシュ116はアクセスされる必要がなく、データは直接バス125から取得される。記憶命令においては、CPU10が命令を実行するとき、出力されたデータは一時的に書き込みバッファー（図１３には示されていない）に記憶され、そしてL1データキャッシュ116が休んでいる時に該当する場所に書き込まれる。例示目的のために、ここではロード命令を用いる。
【０１２７】
[148] トラッカー15のリード・ポインタ19がデータ・ポイントをポイントしている場合、バス30から読み出されたデータ・ポイントの中身のDBN1（つまり、DBN1XとDBN1Y）にもとづいて、該当するデータがL1データキャッシュ116から直接読み出され、CPU10で実行されるためにバス125に置かれる。同時にバス30のDBN1とストライドがデータエンジン112へ送られる。データエンジン112 は予測データアドレスと現在のデータアドレスとの位置関係を、上記実施形態において分岐ターゲットアドレスが同じL1/L2命令ブロック内にあるか否かを調べる際に使った予測方法と同様の方法で、決定する。具体的には、現在のデータアドレスに対応するBN1Yがストライドに加算され、合計がキャリーを持つか否かに従って、データエンジン112が位置関係を決定する。ここではストライドは正の数であると仮定する。他の状況に関しては、図９に置ける実施形態を参照することとし、ここでは繰り返さない。
【０１２８】
[149] データエンジン112は、図１２の実施形態と同様に加法器を含む。加法器は、DBN1YまたはDBN2Yとストライドの対応する部分との合計を計算し、ストライドの該当する高位ビットセグメントが’０’であるか、そして加法器の結果が境界の外になるか、を決定するように設計される。具体的には、DBN1Yを越えたストライドの高位ビットセグメントの各ビットが’０’であり、DBN1Yに対応する加法がキャリー出力を持たず（それは予測データアドレスとデータアドレスが同じL1データ・ブロックに置かれている事を示す）、この時、現在のデーターアドレスに対応するDBN1Xと加法器によって計算されたDBN1Yが一緒になってDBN1を構成する。DBN1は、トラック・テーブル13のデータポイントへ、バス1107と最初のマルチプレクサ911を経て、元々の中身を書き換えるために充填される。
【０１２９】
[150] DBNY1に対する加算がキャリー出力を持つ場合（それは予測データアドレスと現在のデータアドレスがL1キャッシュの異なるデータブロックに位置する事を示す）、データエンジン112はデータアドレスのDBN1Xをバス1121を経てメモリ1102へ送り、対応するDBN2Xとサブ・ブロック番号を読み出す。対応するDBN2Xとサブ・ブロック番号はバス1123を経てデータエンジン112 へ送られる。サブ・ブロック番号とバス30を経て送られたDBN1Yは一緒にDBN2Yを構成する。DBN2Yはストライドに加算される。もしストライドのDBN2Yを越えた高位ビットセグメントの各ビットが’０’で、DBN2Yに対する加算がキャリー出力を持たなければ（それは予測データアドレスとデータアドレスが同じL2データブロックに置かれていることを示す）、現在のデータアドレスに対応するバス1123を経て送られたDBN2Xと加法器によって計算されたDBN2Yが、一緒にDBN2を構成する。データエンジン112 はDBN2をバス1107に置く。DBN2はマルチプレクサ1101を経てメモリ902へ送られ、DBN1へと翻訳される。
DBN1は、トラック・テーブル13のデータポイントへ、バス1107と最初のマルチプレクサ911を経て、元々の中身を書き換えるために充填される。
【０１３０】
[151] もしストライドのDBN1Yを越えた高位ビットセグメントの各ビットが’０’で、DBN2Yに対する加算がキャリー出力を持つがしかし高位ビットがキャリー出力を持たないならば（それは予測データアドレスが、現在のデータアドレスを含むL2データブロックの次のL2データブロックの中に置かれている事を示す）、データエンジン112はバス1123を経て送られたDBN2Xをバス1107に置く。DBN2Xはマルチプレクサ1101を経てメモリ902へ送られる。次のL2データブロックのDBN2は上記方法によって読み出される。DBN2はバス906を経てメモリ902と最初のマルチプレクサ911へ送り返され、DBN1へと翻訳される。DBN1は、トラック・テーブル13のデータポイントへ、バス910と最初のマルチプレクサ911を経て、元々の中身を書き換えるために充填される。
【０１３１】
[152] もしDBN2Yに対する加算の高位ビットもキャリー出力を持つ場合（それは予測データアドレスが、データアドレスに対応するL2データブロックの次のL2データブロックの外に置かれている事を示す）、データエンジン112は、バス1123を経て送られたデータアドレスに対応するDBN2Xを、L2データ・ブロック・アドレスを読み出すために、アクティブ・リスト91にバス1107を経て送る。データ・ブロック・アドレスはバス920を経て、データエンジン112へ送り返される。データ・ブロック・アドレスと、バス1123を経て送られたサブ・ブロック番号とバス30を経て送られたDBN1Yを含むDBN2Y、これらが一緒になりこのときデータアドレスを構成する。それから、データアドレスをストライドに加えることにより、予測データアドレスが得られる、予測データアドレスは、マッチング操作のために、バス1107と２番目のマルチプレクサ912を経てアクティブ・リスト91とへ送り返される。マッチング操作が成功した場合、成功したマッチング結果に対応するDBN2Xが得られる。後続するオペレーションは上記実施形態における該当するオペレーションと同様である。最後に、DBN1は、トラック・テーブル13のデータポイントへ、元々の中身を書き換えるために充填される。マッチング操作が不成功である場合、予測データアドレスが、対応するデータブロックを得るために、バス18を経て低位メモリへ出力される。後続するオペレーションは上記実施形態における該当するオペレーションと同様である。最後に、DBN1は、トラック・テーブル13のデータポイントへ、元々の中身を書き換えるために充填される。
【０１３２】
[153] 従って、トラッカー15のリード・ポインタ19がデータ・ポイントを再びポイントする時、バス30に読み出されるデータ・ポイントの内容はDBN1を含む。DBN1にもとづいて、該当するデータは、L1データキャッシュにアクセスすることで直接読み出され、CPU10で実行されるためバス125に置かれる。CPU10がデータアクセス命令を実行しデータアドレスを生成した時、データアドレスはバス908を経てデータエンジン112へ送られ、予測データアドレスと比較される。もし比較結果がイコールであれば、CPU10は前もって用意されたデータを直接読み出す。もし比較結果がイコールでなければ（それは予測データアドレスが間違いであったことを示す）、この時マッチング操作を行なうために、データアドレスがバス908を経てアクティブ・リスト91へ送られる。後続するオペレーションは上記実施形態における該当するオペレーションと同様である。最後に、正しいデータがCPU10で実行されるために提供される。
【０１３３】
[154] 上記プロセスは繰り返される。CPU10がデータアクセス命令を実行する前に、データアドレスが予測される。該当するデータがL1データキャッシュ116へ前もって充填され、よってデータキャッシュ・ミスを減らす。CPU10がデータアクセス命令を再び実行する時、該当するデータがすでにバス125に置かれており、従ってデータキャッシュ・ヒットのアクセス時間をさらに削減する。
【０１３４】
[155] 図１４は開示された実施形態と整合する、例示的な、CPUとアクティブ・リストの間の変換索引バッファー（Translation Lookaside Buffer = TBL）の構造概略図である。図１４に示されているように、構造はCPU10、アクティブ・リスト91、スキャナ12、トラック・テーブル13、コリレーション・テーブル14、トラッカー15、レベル１キャッシュ16(第１レベルメモリ、すなわち、最も速いアクセススピードをもつメモリ）、レベル２キャッシュ17(第２レベルメモリ、すなわち、最もアクセススピードの遅いメモリ）、マルチプレクサ911、メモリ902そしてTLB1301を含む。
【０１３５】
[156] TBL1301はCPU10とアクティブ・リスト91の間に置かれている。従って、アクティブ・リスト91に記憶されているL2命令ブロックアドレスは物理アドレスである。L2キャッシュ17とL1キャッシュ16のアドレスは全て物理アドレスである。CPU10によって計算されたアドレスは仮想アドレスである。仮想アドレスはTLB1301によって物理アドレスに翻訳される。
【０１３６】
[157] トラッカー15のリード・ポインタ19がトラック・テーブル13のエントリーをポイントする時、エントリーの内容がバス30から読み出される。もし命令が間接分岐命令であり命令フォーマットがBN2であるなら、トラッカー15はエントリーに留り、CPU10が分岐ターゲットアドレスを計算するのを待つ。BRANCH-シグナル20がCPU10によって送られ、バス908にあるアドレスは有効な仮想分岐ターゲット・アドレスであることを、システムに知らせる。アドレスが、対応する物理アドレスにマップするために、TLB30に送られた後、該当する物理アドレスがアクティブ・リスト18に送られる。アクティブ・リスト18がアドレスを対応するBN2にマップした後、BN2はバス903とマルチプレクサ901を経てメモリ902へと送られ、対応するBN1と整合される。もしBN1が無効である場合、L2キャッシュの対応するサブ・キャッシュ・ブロックが、BN2のブロック・アドレスBN2XによってL2キャッシュ17から取り出され、L1キャッシュへ充填される。充填されたL1キャッシュのブロック番号BN1はそれに対応したメモリ902へ充填される。
【０１３７】
[158] もし物理アドレスがアクティブ・リスト18の中でマッチングされない場合、物理アドレスを使って下位レベルメモリから読み込まれた命令ブロックが、L2交換ロジックによってポイントされたL2キャッシュブロックへ充填され、そしてL1交換ロジックによってポイントされたL1キャッシュブロックへ充填される。同時にBN1が、メモリ902のBN2XによってポイントされているエントリーのL2キャッシュのサブ・ブロック番号によってポイントされたL1ブロック番号領域（すなわち、物理アドレスにおけるBN2Yに等しい高位ビットセグメント）へ充填される。もし上記仮想アドレスがTLB1301の中でマッチングされない場合、オペレーティング・システムに対応するようリクエストするために、TLBミス・シグナルが生成される。
【０１３８】
[159] BN2によってポイントされたBN1Xと物理アドレスの低位ビットBN1Yはメモリ902においてBN1として接合される。BN1はトラック・テーブル13のリード・ポインタ19によってポイントされたエントリーに（このエントリーは元々間接分岐ターゲットBN2アドレスのテーブル・エントリーを記憶している）記憶される。テーブル・エントリーはバス30を経て読み出され、フォーマットがBN1であることを決定される。もし分岐タイプが無条件分岐であるか、あるいは分岐タイプが条件分岐でかつCPU10によって出力されたBRANCHシグナル40が’分岐を取っている’というものであれば、BN1はレジスタ21に記憶され、バス19に置かれ、L1キャッシュを制御し、CPU10が実行するための対応する分岐ターゲット命令を読み出す。もし分岐タイプが条件分岐で、しかしCPU10によって出力されたBRANCHシグナル40が’非分岐’というものであれば、インクリメンター22のアウトプットがレジスタ21に記憶され、バス19に置かれ、L1キャッシュを制御し、CPU10が実行するための分岐ソース命令の次の命令を読み出す。
【０１３９】
[160] 同じ間接分岐命令が次回実行されるとき、バス30の命令タイプは間接分岐命令であるが、しかしアドレス・フォーマットはBN1である。この時、もし分岐が分岐タイプまたはCPU10の分岐判断にもとづいて取られるならば、BN1がバス19に置かれ、L1キャッシュを制御し、CPU10で投機的に実行されるために対応する分岐ターゲット命令を読み出す。そして、分岐ターゲット命令の命令タイプにもとづいて、命令は引続き投機的に実行される。CPU10によってマッピング・プロセスの際に生成された分岐ターゲット仮想アドレスによって生成された正確なBN1は、トラック・テーブルから読み出された 投機的BN1と比較される。もし比較結果が同等ということであれば、命令は続行される；もし比較結果が同等でないということであれば、CPU10による 投機的な実行結果と中間結果はクリアされる。マッピング・プロセスによって得られた正確なBN1は分岐ソースエントリーに記憶され、トラッカーは分岐ソースエントリーに記憶された正確なBN1からの命令を実行し始める。
【０１４０】
[161] トラッカー15のリード・ポインタ19がトラック・テーブル13のエントリーをポイントしている時、エントリーの内容がバス30から読み出される。もし命令が直接分岐命令である場合（すなわち、分岐ターゲット命令アドレスBN2またはBN1が正しいアドレスである）、後続するオペレーションは前述実施形態における該当するオペレーションと同様である。
【０１４１】
[162] L2キャッシュ・サブ・ブロックがL1キャッシュに充填された時、L2キャッシュ・サブ・ブロックの命令は、L1キャッシュ・ブロックに対応するトラック・テーブル13のトラックに充填するための情報を抽出するために、スキャナ12によって吟味される。分岐命令の分岐ターゲットはスキャナ12によって計算される。アクティブ・リスト91から読み出されるブロック・アドレスは物理アドレスであるため、スキャナ12が分岐ターゲットアドレスを計算するとき、スキャナ12はアドレスがTLBページの外にあるか（分岐ターゲットと分岐ソースが同じページに無い）を決定する必要がある。アドレスは、ページ・サイズによって、高位ビットの外部ページ部分と低位ビットの内部ページ部分とに分類できる。分岐ターゲット命令が計算されるとき、ページ外の分岐オフセットの全てのビットが’0’または’1’であるか、そしてページ境界の加法器のキャリー、にもとづいて、該当するオペレーションが、分岐ターゲットがページの外にあるかを判断するために、実行される。
分岐ターゲットと分岐ソースが同じページ内にある時、オペレーションは図９の実施形態におけるオペレーションと同様であり、ここでは繰り返さない。もし分岐ターゲットアドレスがページ外にある時、バス907を経てスキャナ12から送られたPCアドレスは、物理アドレスのページ番号は必ずしも連続していないので、誤りかもしれない。それゆえ、分岐ターゲットがページ外にある場合、エラーを防止する仕組みが必要である。以下の方法は上記のエラーを防止することができる。
【０１４２】
[163] 最初の方法は図１４を参照する。スキャナ12が直接分岐命令の分岐ターゲットを計算し、分岐ターゲットがページ外であることを発見したとき、スキャナ12は分岐命令のタイプを間接分岐命令として変換しアドレス・フォーマットをBN2に設定する。変換された分岐命令は、アドレスをBN1に変換するメモリ902を探す代わりに、トラック・テーブル13の該当する直接分岐命令のエントリーに、直接書き込まれる。バス30からテーブル・エントリーが読み出された時、命令は間接分岐命令として取り扱われる。分岐アドレスはCPU10によって計算される。得られた仮想アドレスはTBL1301において物理メモリにマップされる。最後に、アドレスはメモリ902においてBN1にマップされる。そしてBN1はトラック・テーブル13のテーブル・エントリーへ書き込まれる。後続するオペレーションは前述実施形態における該当するオペレーションと同様である。すなわち、テーブル・エントリーのBN1のアドレスにもとづいて、分岐は投機的に実行され、CPU10によって生成された正確な分岐ターゲットアドレスによって確認される。
【０１４３】
[164] さらに、トラック・テーブル13の該当するテーブル・エントリーの直接分岐命令が間接分岐としてマークされている状況を表すために、新しい命令タイプDirect-Marked-As-Indirect（DMAI）を定義する。DMAI BN2がバス30から読み出された時、分岐は投機的に実行され、CPU10によって生成された正確な分岐ターゲットアドレスによって確認される。
よって、分岐ターゲット・アドレスがBN1タイプに変換された後、DMAI BN1がバス30から読み出された時、システムはアドレス確認操作をしない。その代わりに、テーブル・エントリーが実行される直接分岐タイプとみなされる。
【０１４４】
[165] ２番目の方法は図１５を参照する。物理アドレスとスレッド番号(TID)に対応する余分な仮想アドレスがアクティブ・リスト18の全てのテーブル・エントリーに追加される。図１５は開示された実施形態と整合する、もう１つの例示的な、仮想アドレスから物理アドレスへの変換装置の構造概略図である。図１５に示されるように、アクティブ・リスト91は、物理アドレス(PA)を記憶するメモリ・ブロック1501、仮想アドレス(VA)を記憶するメモリ・ブロック1502、そしてスレッド番号(TID)を記憶するメモリ・ブロック1503を含む。TLB1301は物理アドレス(PA)と仮想アドレス(VA)を記憶するように設計される。さらに、TLB1301は、TLBにおけるPAの前ページ番号の指標アドレスを記憶するためのメモリ・ブロック1510、そしてTLBにおけるPAの次ページ番号の指標アドレスを記憶するためのメモリ・ブロック1511をも含む。他の必須の構造は図１４に示された構造と同じである。加えて、前述と同様の方法が、分岐ターゲット・アドレスが現在のページ内にあるかを決定するために用いられる。
【０１４５】
[166]  アクティブ・リスト91のためのアドレス指定操作がバス30のBN2Xを経て行なわれるとき、メモリ・ブロック1501とメモリ・ブロック1502に記憶されているPAとVAが読み出され、それぞれバス1505とバス1504を経て、スキャナ12へ送られる。つまり、スキャナ12は分岐ターゲット物理アドレスを直接計算するだけでなく、仮想アドレスにもとづいて分岐ターゲット仮想アドレスをも計算する。スキャナ12によって計算された分岐ターゲットアドレスが現在のページ内であるとき、計算によって得られた分岐ターゲット・アドレスが、バス1506とマルチプレクサ1508とバス1509を経てマッチング操作を行なうために、アクティブ・リスト91のメモリ・ブロック1501へ送られる。後続するオペレーションは上記実施形態と一致する。
【０１４６】
[167] スキャナ12によって計算された分岐ターゲットアドレスが現在のページに隣接するページの中にあるとき、計算によって得られた分岐ターゲット・アドレスが、マッチング操作を行なうために、バス1506とマルチプレクサ1508とバス1509を経て、アクティブ・リスト91のメモリ・ブロック1501へ送られる。アドレス・タイプは図１２に示された方法によって、次または前のページ内にあると、マークされる。テーブル・エントリーのマッチングされたメモリ・ブロック1510またはメモリ・ブロック1511が読み出される。そして、メモリ・ブロック1510またはメモリ・ブロック1511の値に応じて、TLB1301の該当する行が見つけられる。後続するオペレーションは上記実施形態と同様である。
【０１４７】
[168] スキャナ12によって計算された分岐ターゲットアドレスが現在のページの中にないとき、計算によって得られた分岐ターゲット仮想アドレスが、バス1512を経て、マッチング操作を行なうために、TLB1301へ送られる。もしマッチング操作が成功であれば、該当する分岐ターゲット物理アドレスが、マッチング操作を行なうために、バス1507とマルチプレクサ1508とバス1509を経て、アクティブ・リスト91へ送られ、後続するオペレーションは上記実施形態と一致する。もしTLB1301またはメモリ・ブロック1501でのマッチング操作が成功でなければ、後続するオペレーションは上記実施形態と一致する。
【０１４８】
[169] ３番目の方法は図１６を参照する。図１６は開示された実施形態と整合する、もう１つの例示的な、仮想アドレスから物理アドレスへの変換の構造概略図である。図１６に示されるように、アクティブ・リスト91は、物理アドレス(PA)を記憶するメモリ・ブロック1601、TLB内の対応する行をポイントするポインタ(PT)を記憶するメモリ・ブロック1602を含む。仮想アドレス(VA)を記憶するメモリ・ブロックは図１６には含まれていない。他の必須の構造は図１５に示されている構造と同様である。
【０１４９】
[170] バス30のBN2Xがアクティブ・リスト91に対してアドレス指定操作を行なうとき、メモリ・ブロック1601に記憶されている該当する物理アドレスが、バス1505を経てスキャナ12に送られる。計算によって得られた分岐ターゲットアドレスが現在のページ内にある場合、後続するオペレーションは上記実施形態と一致する。計算によって得られた分岐ターゲットアドレスが現在のページ外にある場合、バス30のBN2X値にもとづいて、メモリ・ブロック1602に記憶されたポインタにバス1605を経てポイントされたTLB1301の該当する行が読み出される。そして、TLB1301に記憶された該当する行の仮想アドレスが読み出され、分岐ターゲットアドレスを計算するために、バス1604を経てスキャナ12へ送られる。取得された分岐ターゲット仮想アドレスはバス1512を経てTLB1301へ送られ、後続するオペレーションは上記実施形態と一致する。
【０１５０】
[171] ４番目の方法は図１７を参照する。図１７は開示された実施形態と整合する、分岐ターゲットアドレスを計算する仕組みの１つの構造概略図である。図１７に示されるように、アクティブ・リスト91は、仮想アドレス(VA)を記憶するメモリ・ブロック1701、物理アドレス(PA)を記憶するメモリ・ブロック1702を含む。メモリ・ブロック1701は仮想アドレスと該当するスレッド番号(TID)をも記憶するように設計される。メモリ・ブロック1702の構造は、ダイレクト・マップ・メモリ、セット・アソシアティブ・メモリ、そしてフル・アソシアティブ・メモリのいずれでも良い。図１７においてはTLBはもう必須ではなく、仮想アドレスから物理アドレスへの変換はアクティブ・リスト91の中で完了する。
【０１５１】
[172] バス30のBN2Xがアクティブ・リスト91に対してアドレス指定操作を行なうとき、メモリ・ブロック1701とメモリ・ブロック1702に記憶されている仮想アドレスと物理アドレスが読み出され、分岐ターゲット仮想アドレスと分岐ターゲット物理アドレスを計算するために、それぞれバス1705とバス1703を経てスキャナ12に送られる。
【０１５２】
[173] 分岐ターゲット物理アドレスが現在のページ内にあるとき、計算によって得られた分岐ターゲット物理アドレスが、マッチング操作のために、バス1708を経てメモリ・ブロック1702へ送られ、後続するオペレーションは上記実施形態と一致する。分岐ターゲット物理アドレスが現在のページ外にあるとき、分岐ターゲット仮想アドレスが、マッチング操作を行なうために、バス1506とマルチプレクサ1508とバス1509を経て、メモリ・ブロック1701へ送られる。もしメモリ・ブロック1701またはメモリ・ブロック1702におけるマッチング操作が不成功であれば、プロセスは上記実施形態と同様である。従って、該当する分岐ターゲットBN2が得られ、後続するオペレーションは上記実施形態と一致する。
【０１５３】
[174] ５番目の方法は図１８を参照する。図１８は開示された実施形態と整合する、もう１つの例示的な、仮想アドレスから物理アドレスへの変換の構造概略図である。
この構造概略図は図９の構造概略図と類似している。違いは、アクティブ・リスト91の各テーブル・エントリーが、L2命令キャッシュ17のL2命令ブロックに対応する、仮想アドレスと物理アドレスのタグ部分を記憶する点で、各各テーブル・エントリーは有効ビットを持つ。記憶された仮想アドレスはスレッド番号(TID)も含む。アクティブ・リスト91の構造は、ダイレクト・マップ・アクティブ・リスト、セット・アソシアティブ・アクティブ・リスト、そしてフル・アソシアティブ・アクティブ・リストのいずれでも良い。加えて、分岐ターゲットアドレスを計算するために、アクティブ・リスト91の物理ページ番号はバス1801を経てスキャナ12に送られる。アクティブ・リスト91の仮想ページ番号とタグ部分の低位ビットは、分岐ターゲットアドレスを計算するために、バス1803を経てスキャナ12へ送られる。アクティブ・リスト91のマッチング操作によって得られた物理ページ番号はバス907を経てスキャナ12へ直接送られる。仮想アドレスはバス1807を経て送られる。バス1807は二つのソースを持つ：スキャナ12のバス907とCPU10のバス908である。
【０１５４】
[175] アクティブ・リスト91の役割は伝統的キャッシュ・システムのタグ・ユニットとTLBの役割と同等である。図１９は開示された実施形態と整合する、例示的な、アドレス・フォーマット1900の概略図である。ここでアクティブ・リスト91はダイレクト・マップ・アクティブ・リストとする。セット・アソシアティブ・アクティブ・リストとフル・アソシアティブ・アクティブ・リストのアドレス・フォーマットは、ダイレクト・マップ・アクティブ・リストのアドレス・フォーマットと同様である。アドレス・フォーマット1900は、高位ビットから低位ビットまで（左から右へ）幾つかのセグメントに分割される。セグメント1988はスレッド番号；セグメント1987はページ番号（仮想アドレス・ページ番号もしくは物理アドレス・ページ番号）；セグメント1986はタグの低位ビット；セグメント1987とセグメント1986はアドレス・タグとして接合；セグメント1985は指標ビット；セグメント1984はL2キャッシュ・サブ・ブロック番号（すなわち、BN2Yの高位ビットセグメント）；そしてセグメント1983はL1キャッシュ・ブロックのオフセットBN1Yである。セグメント1986、セグメント1985、セグメント1984、そしてL1キャッシュ・ブロック・オフセットBN1Yは、仮想アドレスか物理アドレスであるかに関わらず同じであり、従ってこれらのセグメントは共有されうる。スレッド番号1988は、仮想アドレス指定操作が行なわれるときに、異なるスレッドの同じ仮想アドレスを区別するために用いられる。
【０１５５】
[176] アクティブ・リスト91はアクティブ・リスト・メモリ1960を含む。アクティブ・リスト・メモリ1960は複数のテーブル・エントリーによって構成されている。テーブル・エントリーはL2キャッシュに記憶されているキャッシュ・ブロックに１つずつ対応している。テーブル・エントリーの読み取りはバス1939（BN2Xアドレス・フォーマット）によってアドレス指定され、テーブル・エントリーの書き込みはレベル２キャッシュ交換アルゴリズム（例えばLRU）によってアドレス指定される。テーブル・エントリーの記憶アドレスは、Least Recently Used (LRU) のような交換ロジックにもとづいた、L2の交換ロジックによって与えられる。各エントリーにおいて、セグメント1908は仮想アドレスのスレッド番号；セグメント1906は仮想アドレスのページ番号；セグメント1902は物理アドレスのページ番号；そしてセグメント1904は、仮想アドレスと物理アドレスの共通のタグ部分である、タグの低位ビット部分である。セグメント1908、セグメント1906、そしてセグメント1904は接合によって一緒に仮想アドレスラベルを構成する。セグメント1902とセグメント1904 は接合によって物理タグアドレスを構成する。
【０１５６】
[177] アクティブ・リスト91の内容と比較される仮想アドレスはバス1807に置かれる。アクティブ・リスト91の内容と比較される物理ページ番号はバス907に置かれる。バス1807のアドレスはスレッド番号1988、仮想ページ番号1987、タグ1986の低位ビット、そして指標ビット1985、指標ビットはアクティブ・リスト91のエントリーに対してダイレクト・マップ方式またはセット・アソシエティブ方式によるアドレス指定操作を行なうのに用いられる、を含む。指標ビットはさらにメモリ1960の内容とフルアソシアティブ方式によって比較されるために用いられる。バス1807の内容はバス907から来るため、バス907 は仮想ページ番号、物理ページ番号、L2キャッシュのサブ・ブロック番号1984、そしてBN1Y1983を含むアドレスの全セグメントを含む。
【０１５７】
[178] 加えて、アクティブ・リスト91はアンチエイリアシング・テーブル1950をも含む。アンチエイリアシング・テーブル1950は複数のテーブル・エントリーから構成される。各テーブル・エントリーはセグメント1910を含み、それはスレッド番号と仮想ページ番号とBNX2の値を含むセグメント1912を記憶する。
【０１５８】
[179] BNX2はL2キャッシュ17に記憶されている仮想ページ中のL2キャッシュ・ブロック番号である。アンチエイリアシング・テーブル1950のロードアドレスはバス1939によって提供される。アンチエイリアシング・テーブル1950の記憶アドレスは交換アルゴリズム（例えばLRU)にもとづいてカスタマイズされた交換ロジックによって提供される。
【０１５９】
[180] アンチエイリアシング・テーブルの機能は通常のTLBの機能とは異なる。アンチエイリアシング・テーブルは、対応する同じ物理ページ番号が実行されているときに、仮想ページ番号の２回目の発生と次の仮想ページ番号しか記憶しない。加えて、アンチエイリアシング・テーブルは、コンパレーター1922、1924、1926そして1928；レジスタ1918、1919；マルチプレクサ1932、1934、1936、1938そして1940をも含む。マルチプレクサ1932はコンパレーター1924のアウトプットと、コンパレーター1924のアウトプットがレジスタ1919で記憶されたの後のアウトプットとを選択する。マルチプレクサ1934はアクティブ・リスト1960の物理ページ番号のセグメント1902とバス1909のアウトプットとを選択する。マルチプレクサ1936はレジスタ1918のアウトプットとバス907のインプットを選択する。マルチプレクサ1938は、バス1807から指標ビット1985と、アンチエイリアシング・テーブルのセグメント1912に記憶されている指標ビットとを選択し、バス1939を生成する。マルチプレクサ1940はレジスタ1918のアウトプットもしくはバス1909のインプットを選び、バス18に選ばれた結果を置く。
【０１６０】
[181] アドレス指定操作はバス1807の指標ビット1985によって行なわれ、トラック・テーブル91のメモリ1960からの指標ビット・アドレスに対応するテーブル・エントリーを読み出す。セグメント1908、1906、1904そして1902はそれぞれコンパレーター1922、1924、1926へ送られ、バス1807の他のセグメントとバス907の物理ページ番号とに比較される。
【０１６１】
[182] コンパレーター1922は、セグメント1908とセグメント1906から読み出されたスレッド番号と仮想アドレスページ番号と、バス1807から送られたスレッド番号1988と仮想アドレスページ番号1987とを比較するように設計される。比較結果はシグナル1901として送り出される。もし比較結果が’同等’であれば、それはTLBヒットの仮想アドレスを示す。
【０１６２】
[183] コンパレーター1924は、セグメント1904から読み出されたタグの低位ビット部分と、バス1807から送られた仮想アドレスのタグの低位ビット部分1986とを比較するように設計される。比較結果とレジスタ1911が’AND’操作を行なった後、操作結果がシグナル1903によって送られる。もし結果が’1’であれば。それはキャッシュ・ヒットの仮想アドレスを示す。
【０１６３】
[184] 同様にコンパレーター1926は、セグメント1902から読み出されマルチプレクサ1934によって選ばれた物理ページ番号と、バス907にありマルチプレクサ1936によって選ばれた物理ページ番号部分1987とを比較するように設計される。比較結果はシグナル1907から送り出される。もし比較結果が’同等’であれば、それはTLBヒットの物理アドレスを示す。仮想アドレスのタグと物理アドレスのタグの低位ビット1986は同じであるから、マルチプレクサ1932によって選ばれたコンパレーター1924の比較結果とシグナル1907は’AND’操作を行なう。操作結果がシグナル1905から送られる。もし結果が’1’であれば、それはキャッシュ・ヒットの物理アドレスを示す。
【０１６４】
[185] 図１８と図１９において実施形態の操作が図示される。１つのL2キャッシュ・サブ・ブロックがL1キャッシュに充填されるとき、サブ・ブロックの命令がスキャナ12によって吟味される。吟味された命令のタイプが、トラック・テーブル13の命令に対応するテーブル・エントリーに充填される。もし吟味された命令が分岐命令であれば、スキャナ12は分岐ターゲットアドレスを計算する。もし分岐ターゲット命令と分岐ソース命令が隣り合うL2キャッシュ・ブロックの内側にあるならば、分岐ターゲットアドレスが前述実施形態と同じように計算される。もし分岐ターゲットが境界の外ならば、スキャナ12は物理アドレスもしくは仮想アドレスをバス907を経てアクティブ・リスト91に送り、対応するBN2アドレスを生成するためにマッチング操作を行なう。対応するBN2アドレスは、マッチング操作を行いBN1を得るために、メモリ902に送られる。BN1はトラック・テーブル13に記憶される。
【０１６５】
[186] 加えて、アクティブ・リスト91の内部ストレージの状態と、バス907とバス1807のインプットに応じて、アクティブ・リスト91はL2キャッシュとアクティブ・リスト自身に対する操作を決定する。スキャナ12によってアウトプットされたバス907は仮想アドレスと物理アドレスのページ番号を比較のために同時に提供できる。物理アドレスのページ番号はトラック・テーブル91に直接送られ、トラック・テーブル91の物理アドレスのページ番号とのマッチング操作が行なわれる。マルチプレクサ1806によって仮想アドレス部分が選ばれた後、選ばれた結果はバス1807を経てトラック・テーブルへ送られ、トラック・テーブル91の仮想アドレスとのマッチング操作が行なわれる。マルチプレクサ1806のもう１つのインプットは、CPU10からバス908を経て送られた分岐ターゲット仮想アドレスである。
【０１６６】
[187] まず最初に、スキャナ12はアドレスがページ外にあるかを判定する。判定方式に関しては前述の実施形態を参照されたい。もしアドレスがページ外でなければ、スキャナ12は物理アドレス・ブロック番号1987、タグの低位ビット1986、指標ビット1985をバス907に置き、それらをマッチング操作のためにアクティブ・リスト91に送る。加えて、L2キャッシュ・サブ・ブロック番号1984とL1キャッシュ・ブロック・オフセット1983も、将来CPUで実行されるめに、マルチプレクサ1806を経てバス907に置かれる。指標ビット1985(BNX2)はマルチプレクサ1938によって選ばれ、バス1939に置かれる。バス1939のBN2Xは、バス907とバス1807のアドレスとを整合するために、メモリ1960からテーブル・エントリーを読み出すためのアドレスとして用いられる。
【０１６７】
[188] マルチプレクサ1936によって選ばれたバス907の物理ページ番号1987と、マルチプレクサ1934によって選ばれたテーブル・エントリーのセグメント1902の物理ページ番号はコンパレーター1926において比較される。比較結果は1907である。バス1807のタグの低位ビット1986がマルチプレクサ1806によって選択された後、バス1807に置かれた選択結果とテーブル・エントリーのセグメント1904の低位ビットがコンパレーター1924において比較される。マルチプレクサ1932によって選ばれた比較結果と結果1907は’AND’操作にかけられる。’AND’操作結果1905が’1’の場合（それは分岐ターゲット命令がL2キャッシュ17に記憶されていることを示す）、この時、バス1939の指標ビット(すなわちBN2X)と、バス1807のL2キャッシュ・サブ・ブロック1984は接合され、バス903を経てメモリ902とマルチプレクサ901へ送られ、該当するBN1Xをマップする。バス907の取得されたBN1XとBN1Y1983は一緒に、トラック・テーブル13の分岐ソース命令に対応するエントリーへ書き込まれる。
【０１６８】
[189] もしメモリ902が対応するBN1Xを持たなければ、バス1807のBN2XとBN2Y（1984、1983）がBN2として接合される。BN2はトラック・テーブル13の分岐ソースに対応するテーブル・エントリーに書き込まれる。トラック・テーブル13のエントリーは、スキャナ12に一時的に記憶されているL1キャッシュのL1キャッシュ・ブロックへ書き込まれているBN1Xと、バス922を経て分岐ソースに対応するBN1Y、とによってポイントされている。このシナリオをシナリオ１と呼ぶことにする。
【０１６９】
[190] マッチング結果1905が’0’でマッチング結果1907が’1’のとき、それは分岐ターゲット命令はまだL2キャッシュ17に記憶されていないが、TLBの物理ページ番号はヒットしていることを示す。つまり、物理ページ番号は知られている。このとき、マルチプレクサ1936とマルチプレクサ1940によって選ばれたバス907の物理ページ番号、バス1807のタグの低位ビット1986、そして指標ビット1985が、物理アドレスとして一緒に接合される。接合された物理アドレスが、対応する命令ブロックを読むために、低レベルメモリに送られた後、命令ブロックはL2キャッシュ交換ロジックによって特定されたL2キャッシュ17のL2キャッシュ・ブロックに記憶される。BN2はL2キャッシュ・ブロック番号BN2Xによって生成され、トラック・テーブル13の分岐ソース命令に対応するテーブル・エントリーに書き込まれる。このとき、バス907とバス1807のアドレスはBN2Xによってポイントされたアクティブ・リスト・メモリ160の対応するセグメントに書き込まれる。このシナリオをシナリオ２と呼ぶことにする。
【０１７０】
[191] もしスキャナ12が分岐ターゲットアドレスがページ外にあると判定した場合、スキャナ12はスレッド番号1988、仮想アドレスブロック番号1987、タグの低位ビット1986そして指標ビット1985をバス907に置く。バス907のスレッド1988、仮想アドレス・ブロック番号1987、タグの低位ビット1986そして指標ビット1985はマルチプレクサ1806によって選ばれ、バス1807を経てマッチングするためにアクティブ・リスト91に送らる。加えてL2キャッシュ・サブ・ブロック番号1984とL1キャッシュ・ブロック・オフセット1983もバス907に置かれ、マルチプレクサ1806によって選択される。選択された結果は、CPU10が将来使うために、バス1807に置かれる。マッチング結果1903が’1’のとき、それは分岐ターゲット命令がL2キャッシュ17に記憶されている事を示す。バス1939のBN2Xとバス1807のL2キャッシュ・サブ・ブロック番号1984はメモリ902における該当するBN1Xにマップされる。BN1またはBN2（マッピングは無効）はトラック・テーブル13のテーブル・エントリーに記憶される。このシナリオをシナリオ３と呼ぶ。
【０１７１】
[192] マッチング結果1903が’0’でマッチング結果1901が’1’のとき、それは分岐ターゲット命令はまだL2キャッシュ17に記憶されていないがTLBの仮想ページ番号はヒットしていることを示す。つまり、仮想ページ番号は知られている。ヒットしたテーブル・エントリーの物理ページ番号セグメント1902は正しい物理ページ番号を記憶する。このとき、マルチプレクサ1934とマルチプレクサ1940によって選ばれたヒットしたテーブル・エントリーの物理ページ番号セグメント1902、バス1807のタグの低位ビット1986、そして指標ビット1985は物理アドレスとして一緒に接合される。接合された物理アドレスが、対応する命令ブロックを読むために、バス18を経て低レベルメモリに送られた後、命令ブロックはL2キャッシュ交換ロジックによって特定されたL2キャッシュ17のL2キャッシュ・ブロックに記憶される。BN2はL2キャッシュ・ブロック番号BN2Xによって生成され、トラック・テーブル13の分岐ソース命令に対応するテーブル・エントリーに書き込まれる。このとき、バス907とバス1807のアドレスはBN2Xによってポイントされたアクティブ・リスト・メモリ160の対応するセグメントに書き込まれる。このシナリオをシナリオ４と呼ぶことにする。
【０１７２】
[193] マッチング結果1903が’0’でマッチング結果1901が’0’のとき、それは分岐ターゲット命令はまだL2キャッシュ17に記憶されていない、そしてアクティブ・リスト・メモリ1960は対応する仮想ページ番号を持たないことを示す。この時、コンパレーター1924の比較結果(タグの低位ビットと比べる)は一時的にレジスタ1919に記憶され、そしてバス18で読み出されたテーブル・エントリーの物理ページ番号はCPU10で将来用いられるためにレジスタ1918に一時的に記憶される。該当するテーブル・エントリーはアンチエイリアシング・テーブル1950の中からバス1939を経て読み出される。スレッド番号とテーブル・エントリーの仮想ページ番号セグメント1910は、バス1807のスレッド番号1988と仮想ページ番号1987に対してコンパレーター1928によて比較される。比較結果がヒットであれば、テーブル・エントリーのL2キャッシュ・ブロック番号(BN2X)のセグメント1912がバス1911を経て、マルチプレクサー1938に送られ、アクティブ・リスト・メモリ1960をポイントする新しい指標値1939として選ばれる。新しい指標値によって、マルチプレクサ1934によって選ばれたアクティブ・リスト・メモリ1960のテーブル・エントリーから読み出された物理ページ番号セグメント1902が、マルチプレクサ1936によって選ばれレジスタ1918に一時的に記憶された物理ページ番号と、比較される。比較結果1907と、マルチプレクサ1932によって選ばれレジスタ1919に一時的に記憶された比較結果が、’AND’操作を行なう。もし結果1905が’1’ならば、それはアンチエイリアシング・テーブル1950から読み出された仮想ページ番号が、アクティブ・リスト・メモリ1960に記憶された対応する物理ページ番号を持つことを示す。物理ページ番号の同じテーブル・エントリーの中のタグの低位ビット1904と、マッチングされるべきアドレスの中のタグの低位ビット1904は同じであるので、それは命令ブロックがL2キャッシュの中にあることを示す。この時点で、バス1939のBN2Xがバス903を経てメモリ902へBN1Xとマッチングするために送られ、そして記憶されるべくトラック・テーブル13へ送られる。従ってエイリアシングとキャッシュ汚染を回避する。このシナリオをシナリオ５と呼ぶ。
【０１７３】
[194] 比較結果1905が’0’であるとき、それはバス1807から送られた分岐ターゲット仮想アドレスに対応する命令を含む命令ブロックがまだL2キャッシュ17に記憶されていないことを示す。これをキャッシュミスと呼ぶ。このシナリオをシナリオ６と呼ぶ。このとき、マルチプレクサ1936とマルチプレクサ1940によって選ばれ一時的にレジスタ1918に記録された物理ページ番号、バス1807のタグの低位ビット1986と指標ビット1985が一緒に物理アドレスとして接合される。接合された物理アドレスが該当する命令ブロックを読むために低レベルメモリに送られた後、命令ブロックは、L2キャッシュ交換ロジックによって特定されたL2キャッシュ17のL2キャッシュ・ブロックに記憶される。
【０１７４】
[195] 同時に、スレッド番号1988、仮想ページ番号1987、バス1807のタグの低位ビット1986、そしてマルチプレクサ1934とマルチプレクサ1940によって選ばれ一時的にレジスタ1918に記憶された物理ページ番号が、アクティブ・リスト・メモリ1960のL2メモリ・ブロックに対応するテーブル・エントリーのセグメント1908、1906、1904、1902にそれぞれ書き込まれる。それと同時に、L2メモリ・ブロック・アドレスBN2Xはバス903に置かれ、BN1Xにマッチングするためにメモリ902に送られる。結果BN1かBN2はトラック・テーブル13に送られ、トラック・テーブル13に記憶される。
【０１７５】
[196] あるいは、アンチエイリアシング・テーブルの中身が、バス1807の仮想ページ番号とコンパレーター1928において比較される。もし比較結果がミスであれば、それはバス1807の仮想ページ番号に対応する物理ページ番号がアクティブ・リスト・メモリ1960に記憶されていないことを示す。それは伝統的なキャッシュ・システムのTLBミスと同等である。
このシナリオをシナリオ７と呼ぶ。このとき、CPUはTLBミス例外を生成する。オペレーティング・システムは現行テクノロジーにもとづいて例外を取り扱う。オペレーティング・システムはバス1807の仮想アドレスに対応する物理ページ番号を探し、TLB充填操作を行なう。バス1909からの物理ページ番号はアクティブ・リスト91へ送られ、マルチプレクサ1934によって選択される。選ばれた結果は、マルチプレクサ1936によって選ばれ一時的にレジスタ1918に記憶された物理ページ番号と比較される。比較結果1907と、マルチプレクサ1932によって選ばれレジスタ1919に一時的に記録された比較結果（タグの低位ビットと比べる）は’AND’操作を行い、比較結果1905を生成する。もし結果が’1’であれば、それは複数のスレッド番号と仮想ページ番号が同じ物理ページ番号にマップされること（すなわち、エイリアシング・シナリオ）を示す。これをシナリオ７と呼ぶ。このとき、バス1807のスレッド番号1988と仮想ページ番号1987は、アンチエイリアシング・テーブル1950で交換ロジックによって特定されたテーブル・エントリーのセグメント1910に書き込まれる。
マルチプレクサ1938によって選ばれたバス1807の指標セグメントBNX2は、アンチエイリアシング・テーブル1950のセグメント1912にバス1939を経て書き込まれる。同時にバス1939の指標セグメント1985(BNX2)とバス1807のL2キャッシュ・サブ・ブロック番号1984は一緒に接合され、バス903を経てメモリ902へ送られる。前述の実施形態を参考に、BN1Xとのマッチングの後、結果がトラック・テーブル13に書き込まれる。
【０１７６】
[197] 比較結果1905が’0’であるとき、それはエイリアシングが無いこと、しかしバス1807から送られた分岐ターゲット仮想アドレスに対応する命令を含む命令ブロックが、まだL2キャッシュ17に記憶されていないことを示す。それはキャッシュ・ミスと同様である。このシナリオをシナリオ８と呼ぶ。このとき、バス1909を経たマルチプレクサ1934とマルチプレクサ1940によって選ばれた物理ページ番号、バス1807のタグの低位ビット1986そして指標ビット1985は一緒に物理アドレスとして接合される。接合された物理アドレスが該当する命令ブロックを読むために低レベルメモリへ送られた後、命令ブロックは、L2キャッシュ交換ロジックによって特定されたL2キャッシュ17のL2キャッシュ・ブロックに記憶される。同時に、スレッド番号1988、仮想ページ番号1987、バス1807のタグの低位ビット1986、そしてマルチプレクサ1934とマルチプレクサ1940によって選ばれたバス1919の物理ページ番号が、アクティブ・リスト・メモリ1960のL2メモリ・ブロックに対応するテーブル・エントリーのセグメント1908、1906、1904、1902にそれぞれ書き込まれる。それと同時に、L2メモリ・ブロック・アドレスBN2Xとバス1807のL2キャッシュ・サブ・ブロック番号1984は接合され、接合結果はバス903に置かれ、BN1Xとマッチングするためにメモリ902へ送られる。結果はトラック・テーブル13に送られ、トラック・テーブル13に記憶される。
【０１７７】
[198] 上記８つのシナリオは、分岐ターゲットアドレスと分岐ソースが隣接するL2キャッシュ・ブロックに無いときに、分岐ターゲットアドレスを生成するために、スキャナ12がL1キャッシュに充填された命令をスキャンするシナリオを示している。シナリオ１−２は物理アドレス・マッチングのシナリオであり、そしてシナリオ３−８は仮想アドレス・マッチングのシナリオである。
【０１７８】
[199] トラッカー15のリード・ポインタ19はトラック・テーブル13のリードポートを制御して、バス30の１つのテーブル・エントリーの内容を読み出す。テーブル・エントリーが間接分岐タイプであるとき、リード・ポインタ19はそのテーブル・エントリーに留まって待つ。このとき、CPU10によって生成されバス908とマルチプレクサ1806を経た分岐ターゲット仮想アドレスがバス1807に置かれ、マッチング操作のためにアクティブ・リスト91へ送られる。マッチング操作は上記シナリオ３−８と同様である。違いは該当する分岐ターゲット命令がまさに実行されようとしている点である。もしアクティブ・リスト91のマッチング操作で得られたBN2がメモリ902にてマッチング操作によって有効なBN1X分岐ターゲットを得られなければ（すなわち、分岐ターゲット命令がL1キャッシュに記憶されていない）、分岐ターゲットを含むL2キャッシュ・ブロックはすぐにL1キャッシュに充填され、対応するL1キャッシュ・ブロック・アドレスがCPU10で実行されるためにトラック・テーブル13に充填される。BN1Xはまた、後続するマッチング操作のために、BN2によってポイントされたメモリ902のテーブル・エントリーに記憶される。L2キャッシュのキャッシュ・サブ・ブロックがL1キャッシュに充填されるときのプロセスは上記プロセスと同様である。仮想ページ番号、タグの低位ビット、L2キャッシュ・サブ・ブロックに対応する物理ページ番号が、BN2によってポイントされたアクティブ・リスト1960のテーブル・エントリーによって、スキャナ12にバス1801とバス1803を経て提供される。他のセグメント（例えば、指標ビット）はバス908によってスキャナ12に直接提供される（図１８には示されていない）。
【０１７９】
[200] バス30によって読み出されたトラック・テーブル13の命令が直接分岐タイプであるとき（アドレス・フォーマットはBN2）、該当する命令は少なくともL2キャッシュに記憶されている。従って、BN2はバス30とマルチプレクサ901を経て直接メモリ902へ送られる（アクティブ・リスト91を抜きにして）。このプロセスは上記実施形態のBN1マッチング操作を参照する。もしアクティブ・リスト91におけるマッチングによって得られたBN2が、マッチング操作によってメモリ902にて有効なBN1X 分岐ターゲットを得られないならば（すなわち、分岐ターゲット命令がL1キャッシュに記憶されていない）、分岐ターゲットを含むL2キャッシュ・ブロックがL1キャッシュに即座に充填される。L2キャッシュ・ブロックを充填するプロセスは上記プロセスと同様である。仮想ページ番号、タグの低位ビット、L2キャッシュ・サブ・ブロックに対応する物理ページ番号が、BN2によってポイントされたアクティブ・リスト1960のテーブル・エントリーによって、スキャナ12にバス1801とバス1803を経て提供される。他のセグメント（例えば、指標ビット）はバス908によってスキャナ12に直接提供される（図１８には示されていない）。
【０１８０】
[201] 命令キャッシュは図１８と図１９に示されている。上記技術的解決とアクティブ・リスト91はデータキャッシュに対しても適用することができる。主な違いはスキャナ12がデータキャッシュのデータエンジンに取って代わられる点である。トラック・テーブルからデータキャッシュ・アドレスDBN1が読み出されたとき、アドレスはCPU10にデータを提供するためにL1データキャッシュを制御し、DBN1がデータエンジンに送られる。投機的アドレスがDBN1をストライド（読み出されたエントリーはストライドを含む）に加えることにより得られる。投機的ロード・アドレスまたは記憶アドレスが境界外であるとき、データエンジンは対応する物理アドレスもしくは／それと仮想アドレスを、マッチング操作を行なうために、アクティブ・リスト91に送る。図１８と図１９における実施形態と同じオペレーションがアクティブ・リストで行なわれDBN2を生成する。生成されたDBN2はDBN1とマッチングするためにメモリ902へ送られる。
それから、DBN1あるいはDBN2がトラック・テーブルに送られ、読み出されたエントリーの中に記憶される。同様のプロセスはここでは繰り返さない。
【０１８１】
[202] 図２０は開示された実施形態と整合する例示的な命令プロセスシステムの構造概略図である。図２０に示されるように、命令プロセスシステムはCPU10、アクティブ・リスト91、スキャナ12、コリレーション・テーブル14、トラッカー15、メモリ902、レベル１命令キャッシュ16、レベル１データキャッシュ116、そしてデータエンジン112を含む。なお、L2キャッシュ217は命令とデータのための共有L2キャッシュである。共有L2キャッシュは命令もしくはデータを記憶する。それに応じて、アクティブ・リスト91はL2キャッシュ217のL2キャッシュ・ブロックに対応するブロック・アドレスを記憶し、テーブル・エントリーは同じBN2XによってポイントされるL2キャッシュ217のL2キャッシュ・ブロックに一対一に対応する。スキャナ12によって出力された分岐ターゲットアドレスとデータエンジン112によって出力された予測データアドレスはマッチング操作のためにアクティブ・リスト91に送られる可能性があるため、３インプット・マルチプレクサ1112が２番目のマルチプレクサ912に取って代わる。スキャナ12によって出力されたBNとデータエンジン112によって出力されたDBNはメモリ902もしくはトラック・テーブル13に送られる可能性があるため、５インプット・マルチプレクサ1105が４インプット・マルチプレクサ901に取って代わり、３インプット・マルチプレクサ1111が一番目の２インプット・マルチプレクサ911に取って代わる。
【０１８２】
[203] アクティブ・リスト91は図１８と図１９で記された実施形態のアクティブ・リスト91と同じである。アクティブ・リスト91は仮想アドレスを物理アドレスに変換するTLBの機能を含む。なお、図１８と図１９で記された実施形態におけるTLBの実装がここで用いられるが、前述実施形態のどのTLB実装でも、構造を調整し用ることができる。加えて、表記の簡便にため、図２０のバス1120は図１８のバス1801とバス1803を表す。
【０１８３】
[204] この実施形態において、CPU10が不正確な予測データアドレスとともに間接分岐命令とデータアクセス命令を実行するとき、分岐ターゲットアドレスもしくはデータアドレスが、マッチング操作を行なうために、バス908とマルチプレクサ1112を経てアクティブ・リスト91に送られ、後続するオペレーションは上記実施形態と同様である。しかし、バス907を経てスキャナ12より送られたBN2X、もしくはバス1107を経てデータエンジン112から送られたDBN2Xにもとづいて、アクティブ・リスト91は該当するL2命令ブロックアドレスまたはL2データブロックアドレスをスキャナ12もしくはデータエンジン112にバス1120を経て出力する。これに加えて、命令に関わる全てのオペレーションは図１８と図１９におけるオペレーションと同様であり、全てのデータに関わるオペレーションは図１３、図１８または図１９のオペレーションと同様である。特に、データエンジン112には決定ロジックが含まれている。決定ロジックはアドレスがページ外にあるかを決定する。予測データアドレスが現在のデータアドレスの同じL2データブロックの中にあるとき、もしくは現在のデータアドレスのL2データブロックの前のデータブロックまたは次のデータブロックの中にあるとき、プロセスは図１３のプロセスと同様である。予測データアドレスが上記の範囲外であるとき、データエンジン112 は、対応する仮想アドレス／物理アドレスを読み出すために、データアドレスに対応するDBN2Xをバス1107を経てアクティブ・リスト91へ出力する。該当する仮想アドレス／物理アドレスはデータエンジン112にバス1120を経て送り返され、後続するオペレーションは図１９の実施形態と同様である。プロセスは図１９に参照でき、ここでは繰り返さない。
【０１８４】
[205] 加えて、トラック・テーブル13の全てのデータポイントはDBN1を含む。しかし、トラック・テーブル13のデータ・ポイントは図２０の構造を調整することによりDBN1もしくはDBN2を含む。例えば、予測データアドレスに対応するデータがL2データキャッシュに記憶されていて、しかし予測データアドレスに対応するデータがL1データキャッシュに記憶されていないとき、該当するDBN2がトラック・ポイントの中身としてデータポイントに書き込まれる。トラッカー15のリード・ポインタ19がデータポイントをポイントしているとき、L2データキャッシュ’から読み出された該当するデータブロックがL1データキャッシュに充填され、該当するデータがバイパスによってCPU10に送られる。プロセスの詳細は前述実施形態に参照でき、ここでは繰り返さない。
【０１８５】
[206] 分岐ターゲット命令アドレス（もしくは次のデータアドレス）が、分岐ソース命令（もしくは現在のデータ）を含むメモリ・ブロックに置かれているか否かを決定する方法は沢山ある。基本的に、図１２に示されるように、分岐距離のBN2Yに対応する部分に分岐ソース命令のBN2Yを加えた加算結果を得る。そして得られた加算結果のBN2Yに対応する部分と他の部分の境界をCH1と呼ぶ。分岐距離が正であるとき、もしBN2Yに対応する部分の外側の全てのビットが分岐距離において’0’であり、加算からのキャリーがCH1において’1’ならば、分岐ターゲット命令は分岐ソースを含むL2命令ブロックの次のL2命令ブロックの中にある。
【０１８６】
[207] しかしながら、もしBN2Yに対応する部分の外側の分岐距離の最低ビットが’1’ なら、分岐ターゲット命令は、分岐ソースを含むL2命令ブロックの次のL2命令ブロックの中にある可能性がある。例えば、BN2Yに対応する部分の外側の分岐距離の最低ビットが’1’で全ての他のビットが’0’、そしてCH1においてキャリーが無いとき、分岐ターゲット命令はまた分岐ソースを含むL2命令ブロックの次のL2命令ブロックの中にある。従って、CH1におけるキャリー出力とBN2Yに対応する部分の外側の分岐距離の最低ビットは一緒に、分岐ターゲット命令が分岐ソースを含むL2命令ブロックの次のL2命令ブロックの中にあるか否かを決定する。この方法は負の分岐距離の場合にも適用できる。
【０１８７】
[208] さらに、この方法はもっと階層的なキャッシュシステムに対しても拡張できる。
あるレベルのキャッシュ（例えばBN1Y、BN2Y..）の分岐ソース命令に対応するキャッシュ・ブロック・オフセットの外側の最低ビットと、分岐距離の該当するビットの合計が、分岐ターゲット命令が、分岐ソース命令を含むレベル（例えばL2）命令ブロックの次もしくは前の命令ブロックの中にあるか否かを決定する。同様に、あるレベルのキャッシュ（例えばDBN1Y、DBN2Y..）のデータ自身に対応するキャッシュ・ブロック・オフセットの外側の最低ビットとストライドの合計が、次のデータが、現在のデータを含むレベル（例えばL2）データブロックの次もしくは前のデータ・ブロックに中にあるか否かを決定する。
【０１８８】
[209] スキャナは高レベルキャッシュに充填された命令から命令タイプを抜き出し、分岐命令の分岐ターゲットアドレスを計算する。つまり、コントロール・フロー情報がプログラムから抜き出される。抽出された該当するコントロール・フロー情報は少なくとも命令タイプを含む。分岐命令においては、抽出されたコントロール・フロー情報は分岐ターゲット命令アドレスをも含む。分岐ターゲット命令アドレスはアクティブ・リストのトラック・アドレス（キャッシュ・アドレス）にマップされる。コントロール・フロー情報はトラック・テーブルにタイプとトラック・アドレス・モードによって記憶される。トラック・テーブルの分岐ポイントは分岐ソース命令のトラック・アドレスに対応する。分岐ポイントは分岐ターゲット命令のトラック・アドレスを記憶する。さらに、分岐ソース命令の次の命令の場所はトラック・テーブルの組織構造の中に暗に含まれている。従って、分岐ソース命令の後続命令の二つの可能な分かれ目が構成される。
【０１８９】
[210] トラッカーのリード・ポインタによってポイントされたトラック・ポイントの命令タイプが非分岐命令であるとき、リード・ポインタは順次次のトラック・ポイントに移動する；
トラッカーのリード・ポインタによってポイントされたトラック・ポイントの命令タイプが無条件分岐命令であるとき、リード・ポインタは分岐ターゲット・トラック・ポイントへ移動する；
トラッカーのリード・ポインタによってポイントされたトラック・ポイントの命令タイプが条件付き分岐命令であるとき、CPUによって生成されたTAKENシグナルにもとづいて、リード・ポインタは次のトラック・ポイントまたは分岐ターゲット・トラック・ポイントへ移動する。トラッカーのリード・ポインタはどの分岐ポイントからでもスタートできる。トラック・ポイント・タイプおよびまたはCPUによって実行された分岐ポイントの実行状況にもとづいて、リード・ポインタは、次の連続した命令の最初の分岐ポイント、もしくは分岐ターゲット命令と後続する命令の最初の分岐ポイント、へ到達する。従ってトラック・テーブルでのコントロール・フロー情報は二分木の形で存在し、各分岐ポイントが分岐命令に対応する。二分木は完全二分木であり、隣接する分岐ポイント間の径路情報を含み、各分岐ポイントから後続の分岐ポイントまでその２つの又を経て到達できる。
【０１９０】
[211] 加えて、図１３のメモリ902は図９のメモリ902と同様であり、メモリ902の各行はL1データブロックのDBN1XとL2データブロックのDBN2Xとの間の対応関係を含んでいる。メモリ902の各行はまた、各DBN2Xの前のL2データブロックもしくは次のL2データブロックのアクティブ・リスト91における位置情報を含む。よって、次のデータアドレスが、現在のデータアドレスに対応するL2データブロックの前のデータブロックもしくは次のデータブロックの中にあるとき、現在のデータアドレスに対応するL2データブロックのブロック番号が、メモリ902でアドレス指定操作を行なうためにアドレス指定アドレスとして用いられ、メモリ902に記憶されている前のもしくは次のデータブロック番号を読み出す。これによって、アクティブ・リストにおけるマッチング操作の数を削減する。
【０１９１】
[212]  さらに、アクティブ・リストが、前のメモリ・ブロック（命令ブロックもしくはデータブロック）そして連続したアドレスの次のメモリ・ブロックの位置情報を記憶しているとき、位置情報にもとづいて、前のメモリ・ブロック（命令ブロックもしくはデータブロック）内の分岐ターゲット命令もしくは次のデータ、そして分岐ソース命令もしくは現在のデータを含むメモリ・ブロックの次のメモリ・ブロックが見つけられる。分岐ターゲット命令または、さらに遠くの場所に位置している次のデータを見つけるために、同様の方法が何回か繰り返される。これによって、アクティブ・リストにおけるマッチング操作の数を削減する。
【０１９２】
[213] 例えば、図９に示されるように、分岐ターゲット命令が分岐ソース命令を含む命令ブロックの後続する２番目の命令ブロックの中にあるということを、加算器の計算結果にもとづいて見い出した場合（キャリー出力の場合）、スキャナはアクティブ・リストにてアドレス指定操作を行なうために分岐ソース命令に対応するBN2Xを出力し、そして次の命令ブロックに対応するBN2Xを読み出す。
【０１９３】
[214] それから、次の命令ブロックに対応するBN2Xにもとづいてアドレス指定操作がアクティブ・リストにて行なわれ、次の命令ブロックの次の命令ブロックに対応するBN2Xが読み出される。すなわち、分岐ソース命令を含む命令ブロックの後続する２番目の命令ブロックに対応するBN2Xが読み出される。したがって、アクティブ・リストにおけるマッチング操作が、アドレス指定操作を２回行うことによって回避される。分岐ターゲットが分岐ソースよりもずっと離れているとき、各命令ブロックの前の命令ブロックもしくは次の命令ブロックの場所情報が存在しかつ有効である限り、分岐ターゲット命令に対応するBN2Xはアドレス指定操作を複数回行なうことでアクティブ・リストより見つけられる。
【０１９４】
[215] より多くの階層のキャッシュもしくはデータキャッシュにおいて、同様の方法を用いることができ、ここでは繰り返さない。加えて、TLBモジュールあるいは仮想アドレスから物理アドレスへの変換を含むアクティブ・リストに関しても、遠くのページ（例えば、前の前のページ、もしくは次の次のページ）を見つけるために同じ方法を用いることができる。具体的なオペレーションはここでは繰り返さない。
【０１９５】
[216] 間接分岐命令において、分岐ターゲット命令アドレスはCPUが間接分岐命令を実行する時に生成される。そして、分岐ターゲット命令アドレスはアクティブ・リストに送られ、アクティブ・リストにおいてトラック・アドレスに変換される。もしくは、分岐ターゲット命令アドレスはTLBによって変換され、そしてアクティブ・リストにおいてトラック・アドレスに変換される。異なるフォーマットのトラック・アドレスは異なるレベルのキャッシュと対応している、そしてBNXは該当するレベルキャッシュにおけるメモリ・ブロックに対応し、BNYはメモリ・ブロックにおけるメモリ・セルに対応しているから、トラック・アドレスはキャッシュアドレスである。つまり、トラック・アドレスに応じて、該当する命令が該当するレベルのメモリから直接見いだされ、タグマッチングを回避する。しかしながら、別の特別モジュールがシステムに追加されうる。特別モジュールは間接分岐ターゲット命令アドレスを生成する。
【０１９６】
[217] 例えば、もし間接分岐ターゲットアドレスがレジスタ値と即値によって生成されるなら、特別モジュールは該当するレジスタファイルのレジスタ値をCPUから取得し、スキャナは抽出された間接分岐命令の即値を特別モジュールに送る。特別モジュールは間接分岐ターゲットアドレスを、即値にレジスタ値を加えることにより、得る。あるいは、特別モジュールはレジスタファイルのコピーを含む。CPUの中のレジスタファイルのレジスタが更新されたとき、レジスタファイルのコピーの中の対応するレジスタも同時に更新される。従って、もしスキャナが抽出された間接分岐命令の即値を特別モジュールに送るなら、間接分岐ターゲットアドレスが計算される。よって、全ての分岐命令の分岐ターゲットアドレスはCPUによって生成されない。
【０１９７】
[218] 分岐ターゲット命令または次のデータが置かれているキャッシュの場所のレベルの違いに応じて、トラック・テーブルのトラック・ポイントの中身に含まれているトラックアドレスが異なる。分岐ポイントを例にとると、分岐ターゲット命令がL1キャッシュにあるとき、分岐ポイントに含まれるトラックアドレスはBN1である；
分岐ターゲット命令がL2キャッシュにあるとき、分岐ポイントに含まれるトラックアドレスはBN2である；
分岐ターゲット命令が他のレベルのキャッシュにあるとき、トラックアドレスは同じパターンをたどる；
データポイントのトラックアドレスも分岐ポイントのトラックアドレスと同様である。
【０１９８】
[219] 加えて、分岐ターゲット命令または次のデータは、少なくとも最下位レベルのキャッシュには前もって充填されている。従って、トラックポイントはキャッシュに直接宛てられるトラックアドレスのみを含み、しかしメイン・メモリ・アドレス（例えば命令アドレスPCまたはデータアドレス）を含まない。スキャナによって出力されたアドレスはトラックアドレスもしくは命令アドレスでありうる、そしてデータエンジンによって出力されたアドレスもトラックアドレスもしくは命令アドレスでありうる。図９で示されたように、スキャナ12によって出力されたアドレスはバス907を経たBN1、BN2または分岐ターゲット命令アドレスである。
【０１９９】
[220] 具体的には、分岐ターゲット命令と分岐ソース命令が同じL1命令ブロックにあるとき、スキャナ12は直接、分岐ターゲット命令に対応するBN1をバス907を経て出力し、BN1はトラック・テーブル13に書き込まれる。分岐ターゲット命令と分岐ソース命令が同じL2命令ブロックの異なるL1命令ブロックにあるとき、スキャナ12はバス907を経てBN2を出力する。BN2はメモリ902にて分岐ターゲット命令に対応するBN1に変換され、BN1はトラック・テーブル13に書き込まれる。分岐ターゲット命令が分岐ソース命令を含むL2命令ブロックの前のL2命令ブロックもしくは次のL2命令ブロックにあるとき、スキャナ12はバス907を経てBN2を出力する。前のL2命令ブロックもしくは次のL2命令ブロックのBN2Xはアクティブ・リスト91のBN2を用いて読み出される。そして、分岐ターゲット命令に対応するBN1が取得され、上記方法によりトラック・テーブル13に書き込まれる。他の状況においては、スキャナ12は計算によって取得された分岐ターゲット命令アドレスを、マッチング操作を行なうために、アクティブ・リスト91にバス907を経て出力する。そして、分岐ターゲット命令に対応するBN1が取得され、上記方法によりトラック・テーブル13に書き込まれる。
【０２００】
[221] 従って、スキャナ12が分岐ターゲット命令の場所を決定した後、スキャナ12はアドレスタイプ番号を生成できる。アドレスタイプ番号はバス907のアドレスのアドレスタイプを表すことに用いられ、それによって該当するモジュールが後続するオペレーションを行なうのを制御する。例えば、上記４つの状況は２桁のアドレスタイプ番号で表現できる。バス907がトラック・アドレスもしくは分岐ターゲット・アドレスを出力するとき、バス907はアドレスタイプ番号もトラック・テーブル13、アクティブ・リスト91、メモリ902そして関係するモジュールに出力する。よって、異なるタイプのアドレスが同じバス907を経て送信され、バスの総数を削減することができる。
【０２０１】
[222] もっとビット数の多いアドレスタイプ番号はもっと多くの状況を表現できる。
例えば、図１７に示されるように、BN1とBN2以外にも（３つの状況を含む: 同じL2命令ブロック内、前のL2命令ブロック内、次のL2命令ブロック内）、バス1506のアドレス・フォーマットは仮想アドレスまたは物理アドレスでありうる。従って、全部で６つの状況がある。３ビットのアドレスタイプ番号は６つの状況を表現できる。より多くのビットのアドレスタイプ番号はより多くの階層のキャッシュ（すなわち、より多くのトラック・アドレス）、データ・エンジンによって出力されたアドレス、などなどに適用できる。詳細はここでは繰り返さない。
【０２０２】
[223]  加えて、分岐ターゲット命令アドレスもしくは次のデータのアドレスが、分岐ソース命令アドレスもしくは現在のデータのアドレスに対応する同じページ内にあるとき、TLB変換を実装するためにもっと柔軟な方法を用いることができる。図１５に示されるように、アクティブ・リスト91は分岐ソース命令の物理アドレスと仮想アドレスをバス1505とバス1504を経てスキャナ12へそれぞれ出力する。それからスキャナ12は、分岐ターゲット命令の仮想アドレスと物理アドレスを、出力された分岐ソースアドレスの物理アドレスと仮想アドレスを用いて、計算する。
【０２０３】
[224] スキャナ12が分岐ターゲットアドレスの物理アドレスを計算するとき、もしスキャナ12が分岐ターゲット命令アドレスと分岐ソースアドレスが同じページ内にあることを見つけた場合、スキャナ12は分岐ターゲット命令の物理アドレスをバス1506を経て出力する。マルチプレクサ1508とバス1509を経た分岐ターゲット命令の物理アドレスはアクティブ・リスト91へ送られ、アクティブ・リスト91において記憶された物理アドレスとマッチングされる。後続するオペレーションは上記実施形態と一致する。
【０２０４】
[225] もしスキャナ12が、分岐ターゲット命令アドレスが分岐ソースアドレスに対応するページの前もしくは次のページ内にあることを見つけた場合、スキャナ12は、アクティブ・リスト91から送られた分岐ターゲット命令の物理アドレスの物理アドレスページ番号をバス1512を経て出力する。物理アドレスページ番号が選ばれた後、選ばれたページ番号はTLB1301へ送られ、TLB1301に記憶された物理アドレスページ番号とマッチングされる。
【０２０５】
[226] もしマッチングが成功の場合、メモリ1510もしくはメモリ1511に記憶されている、マッチしたページの前もしくは後のページを含む行番号はアドレス指定アドレスであり、前もしくは次のページを含む行はTLB1301におけるアドレスによって見つけられる。物理アドレスページ番号は行から読み取られ、バス1507を経て送り出される。物理アドレスページ番号がマルチプレクサ1508によって選ばれた後、選ばれた物理アドレスページ番号とバス1506を経てスキャナ12によって出力されたタグの低位ビットは融合される。融合された結果は物理アドレスを構成する。物理アドレスはバス1509を経てアクティブ・リスト91へ送られ、アクティブ・リスト91に記憶された物理アドレスとマッチングされ、そして後続するオペレーションは上記実施形態と一致する。もしマッチングが不成功の場合、後続するオペレーション（例えば、充填操作）は上記実施形態と一致する。
【０２０６】
[227] もしスキャナ12が、分岐ターゲット命令アドレスは分岐ソースアドレスに対応するページ内に無い、そして分岐ソースアドレスに対応するページの前もしくは次のページ内にも無い、ということを発見したとき、スキャナ12は計算によって得た分岐ターゲット命令の仮想アドレスの仮想ページ番号を、バス1512を経てTLB1301に出力する。分岐ターゲット命令の取得された仮想アドレスの選ばれた仮想ページ番号は、TLB1301に記憶された仮想ページ番号とマッチングする。後続するオペレーションは上記実施形態と一致する。
【０２０７】
[228] 図１９に示されるように、アンチエイジング・テーブル1950のセグメント1910は仮想ページ番号を記憶する。仮想ページ番号と、セグメント1912のBN2Xにポイントされたアクティブ・リストの行の物理アドレスページ番号は併せて仮想と物理アドレスのペアを構成し（仮想ページ番号とアクティブ・リストの行の物理アドレスページ番号も、併せて仮想と物理アドレスのペアを構成し、よって複数の仮想アドレスが１つの物理アドレスページに対応する）、よってアンチエイジング・テーブル1950を含むアクティブ・リスト91はTLBの役割を果たすことができる。さらに、セグメント1910は対応するタグの低位ビット（セグメント1904の該当するタグの低位ビットに対応する）をも記憶し、L2メモリブロックの仮想アドレスを構成する。一度マッチングがアンチエイジング・テーブル1950にて成功ならば、該当するL2命令ブロックは直接発見され、図１９で示されたいくつかの操作、例えば物理アドレスページ番号を読み出し、L2命令ブロックの物理アドレスを構成し、そしてマッチングする、などを省くことができる。
【０２０８】
[229] 図２０で示されるように、L2キャッシュ21は命令とデータによって共有されることができ、それぞれが個別のL1キャッシュ（L1命令キャッシュ116とL1データキャッシュ16）を持つ。このとき、アクティブ・リスト91は、L2キャッシュの様々なメモリブロックに含まれている命令キャッシュ・ブロックあるいはデータキャッシュ・ブロックのブロック・アドレスを記憶する。L2キャッシュ217において、命令とデータは共にBN2フォーマットのトラック・アドレスを用いる。メモリ902は、BN2のL1キャッシュ・トラック・アドレス（BN1もしくはDBN1）への変換関係を記憶するから、トラック・テーブル13のトラック・ポイントに含まれるアドレスはBN1、DBN1もしくはBN2である。BN2は前述の方法によってBN1もしくはDBN1へ変換される。もっと多くの階層のキャッシュに関しても、どれだけ多くのレベルの低レベル・キャッシュが命令とデータのための共有キャッシュであるかに関わらず、同じ方法がトラック・アドレスを決定するのに用いられ、低レベルキャッシュ・トラック・アドレスが対応する高レベルキャッシュ・トラック・アドレスに変換されうる。
【０２０９】
[230]  開示されたシステムと方法は様々なプロセッサ関連アプリケーション、例えば汎用プロセッサ、専用プロセッサ、システム・オン・チップ（SOC）アプリケーション、特定用途向け集積回路（ASIC）アプリケーション、そして他のコンピューティング・システムにて用いることができる。例えば、開示された装置と方法は高性能プロセッサにおいてシステム全体の効率をあげるために用いることができる。
【０２１０】
[231] ここで開示された実施形態はあくまで例示的であり、この開示の範囲を限定しない。この発明の精神と範囲から離れることなく、開示された実施形態に対する他の修正、等価な置き換え、あるいは改善はこの分野に精通した者には自明であり、ここの開示の範囲に含まれることが意図されている。
【０２１１】
[232] すべてのクレームまた仕様の範囲を制限することなく、開示された実施形態の産業上の利用可能性と一定の効果の例が、例示目的でここに記載される。
開示された実施形態の技術的解決法に対する様々な代替、修正、または等価な置き換えはこの分野に精通した者には自明であり、この開示に含むことができる。
【０２１２】
[233] 開示されたシステムと方法は、パイプライン・プロセッサの分岐命令処理に対して根本的解決を提供する。開示されたシステムと方法は、分岐ターゲット命令のアドレスを、対応する分岐ポイントの実行に先立って取得し、そして様々な分岐決定ロジックによる計らいによって、不正確に予測された分岐決定による効率損失を取り除く。
【０２１３】
[234] 開示された装置と方法はまた、様々なプロセッサ関連アプリケーション、例えば汎用プロセッサ、専用プロセッサ、システム・オン・チップ（SOC）アプリケーション、特定用途向け集積回路（ASIC）アプリケーション、そして他のコンピューティング・システムにて用いることができる。例えば、開示された装置と方法は高性能プロセッサにおいて、パイプラインの効率およびシステム全体の効率をあげるために用いることができる。
【図１】
0006467605.tif 000002
【図２】
0006467605.tif 000003
【図３】
0006467605.tif 000004
【図４Ａ】
0006467605.tif 000005
【図４Ｂ】
0006467605.tif 000006
【図４Ｃ】
0006467605.tif 000007
【図４Ｄ】
0006467605.tif 000008
【図４Ｅ】
0006467605.tif 000009
【図５】
0006467605.tif 000010
【図６】
0006467605.tif 000011
【図７】
0006467605.tif 000012
【図８】
0006467605.tif 000013
【図９】
0006467605.tif 000014
【図１０Ａ】
0006467605.tif 000015
【図１０Ｂ】
0006467605.tif 000016
【図１１】
0006467605.tif 000017
【図１２】
0006467605.tif 000018
【図１３】
0006467605.tif 000019
【図１４】
0006467605.tif 000020
【図１５】
0006467605.tif 000021
【図１６】
0006467605.tif 000022
【図１７】
0006467605.tif 000023
【図１８】
0006467605.tif 000024
【図１９】
0006467605.tif 000025
【図２０】
0006467605.tif 000026