(57)【特許請求の範囲】
【請求項１】
演算結果を格納する手段を有するパイプライン方式のプロセッサにおける分岐予測装置であって、
分岐命令の分岐予測に関連する予測情報を、ある分岐命令より前にフェッチされる命令のフェッチと同じタイミングで供給するための予測情報供給手段と、
前記予測情報供給手段により供給された予測情報に従って、必要であれば前記演算結果を格納する手段から分岐予測に必要な情報を読出し、遅くとも前記ある分岐命令のフェッチサイクルの完了までに前記ある分岐命令の分岐予測を行なって、分岐予測信号を出力するための分岐予測手段とを含み、
命令体系を、分岐の予測情報を含み得るように構成し、
前記予測情報供給手段は、命令から予測情報を取出して供給する手段を含む、分岐予測装置。
【請求項２】
命令に、通常の命令フィールドと、次に実行する分岐命令の予測情報を保持するための予測情報フィールドとを設け、
前記予測情報供給手段は、通常の命令フィールドの内容をパイプラインに投入するとともに、命令の予測情報フィールドから予測情報を取出して前記分岐予測手段に供給する、請求項１に記載の分岐予測装置。
【請求項３】
前記予測情報供給手段は、連続する２つ以上の命令を一度にフェッチして、フェッチした最後の命令が分岐予測命令であることに応答して、フェッチした前記２つ以上の命令から分岐予測情報を得て、前記分岐予測手段に与えるための手段を含む、請求項１に記載の分岐予測装置。
【請求項４】
前記命令体系に、分岐予測情報を保持するための分岐予測情報保持命令を設け、
前記予測情報供給手段は、前記分岐予測情報保持命令から分岐予測情報を取出して供給するための手段を含む、請求項１に記載の分岐予測装置。
【請求項５】
演算結果を格納する手段を有するパイプライン方式のプロセッサにおける分岐予測装置であって、
分岐命令の分岐予測に関連する予測情報を、ある分岐命令より前にフェッチされる命令のフェッチと同じタイミングで供給するための予測情報供給手段と、
前記予測情報供給手段により供給された予測情報に従って、必要であれば前記演算結果を格納する手段から分岐予測に必要な情報を読出し、遅くとも前記ある分岐命令のフェッチサイクルの完了までに前記ある分岐命令の分岐予測を行なって、分岐予測信号を出力するための分岐予測手段とを含み、
静的な分岐予測機構をさらに含み、
各命令は、次に実行される分岐命令に対して行なわれる分岐の予測方式を特定するための予測方式特定情報を含み、
前記予測情報供給手段は、フェッチされた命令から、予測方式特定情報を取出して供給し、
さらに、前記分岐予測手段の出力と、前記静的な分岐予測機構の出力とのいずれか一方を、前記予測方式特定情報に応答して選択するための方式選択手段とを含む、分岐予測装置。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
この発明はプロセッサにおける分岐予測装置に関し、特に、パイプライン方式のプロセッサにおいて、分岐によるパイプラインの乱れを小さくするための分岐予測装置に関する。
【０００２】
【従来の技術】
フェッチ命令の実行を複数のステージに分割し、各命令の１ステージの処理（これはサイクルと呼ぶ）が終了するごとにその命令の次のステージの処理を開始し、同時に次の命令のそのステージの処理を開始することにより、同時に複数の命令を実行していく方式のプロセッサをパイプライン方式のプロセッサと呼ぶ。パイプライン方式を用いた場合、１命令を実行するための時間ごとではなく、それをステージ数で分割した、１ステージの実行に必要な時間ごとに１命令の処理が完了する。したがって、単純に考えれば、パイプライン方式のプロセッサの命令実行能力は、分割のステージ数だけ倍増される。
【０００３】
しかし実際のパイプライン方式のプロセッサでは、そのような速度の向上は得られない。その主たる原因は分岐命令である。パイプラインで実行される命令中に分岐命令がある場合、分岐先によっては、既にパイプラインに投入されていた命令をすべて消去し、分岐先のアドレスの命令から実行を再開させる必要が生ずることがある。これをパイプラインの分断と呼ぶ。分岐命令によるパイプラインの分断が生ずると、分岐処理が行なわれるまでにパイプラインに投入された命令が無駄となるために、処理の効率が低下する。
【０００４】
そこでパイプライン方式のプロセッサでは、分岐命令によるパイプラインの分断を防ぐために、何らかの予測を行ない、それに従って命令流をパイプラインに連続供給する。この予測の精度が高いほど、分岐によるパイプラインの分断の発生の確率は小さく、パイプラインの乱れは小さくなり性能の低下を抑えることができる。したがって分岐予測の精度はできるだけ高くする必要がある。
【０００５】
分岐予測の主な方式として次のようなものがある。
▲１▼  ディレイド・ブランチ方式による静的分岐予測
▲２▼  ブランチターゲットバッファ（ＢＴＢ、Ｂｒａｎｃｈ  Ｔａｒｇｅｔ  Ｂｕｆｆｅｒ）を用いた動的分岐予測
これについてはたとえば、エス・マクファリングおよびジェイ・エル・ヘネシーによる「リデューシング  ザ  コスト  オブ  ブランチーズ」（第１３回コンピュータアーキテクチャシンポジウムプロシーディングス、１９８６年６月、Ｓ．  ＭｃＦａｒｌｉｎｇ，  Ｊ．Ｌ．  Ｈｅｎｎｅｓｓｙ，“Ｒｅｄｕｃｉｎｇ  ｔｈｅ  ｃｏｓｔ  ｏｆ  ｂｒａｎｃｈｅｓ，”ｉｎ  Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  １３ｔｈ  Ａｎｎｕａｌ  Ｓｙｍｐｏｓｉｕｍ  ｏｎ  Ｃｏｍｐｕｔｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ）の第３９６頁〜４０３頁に説明がある。これらの方式は、分岐命令にはその分岐方向に偏りがあること（分岐の偏り）を利用して、過去の実行結果から得られる情報に従って予測を行なっている。
【０００６】
ディレイド・ブランチ方式は、分岐確率が高い方のパス（ライクリーパス）上の命令をコンパイラがディレイ・スロットに移動させて分岐ペナルティを抑える。ディレイ・スロットとは、分岐命令のフェッチから、分岐命令の分岐先命令のフェッチまでの間にパイプラインに投入される命令をいう。この間に複数の命令が投入される場合、分岐命令の直後に投入される命令を第１スロット、次に投入される命令を第２スロット、などと呼ぶ。ディレイド・ブランチ方式で使用される分岐確率は、コンパイルまでに、サンプルプログラムなどを実行することにより得られた分岐の実行結果に基づいて決定される。つまり、プログラムの実行履歴をもとに分岐命令の分岐予測を行なっている。
【０００７】
ディレイド・ブランチ方式の予測ヒット率、つまり、ディレイ・スロットが有効な命令で埋められる確率として、第１スロットの場合約７０％、第２のスロットの場合は２５％以下となるデータがある。
【０００８】
ＢＴＢ方式は、分岐命令の実行時の結果に基づいて分岐予測を行なう。ＢＴＢ方式による予測手順の概要を図を参照して説明する。
【０００９】
図３５を参照してＢＴＢ方式の分岐予測装置は、プロセッサの命令パイプライン３２２と命令キャッシュ３２０とに接続され、ＢＴＢ３２４と分岐予測機構３２６とを含む。命令キャッシュ３２０は、図示されない主メモリなどに接続されており、分岐予測機構３２６から与えられるフェッチアドレスの命令を命令パイプライン３２２に与える。命令キャッシュ３２０に、与えられたフェッチアドレスの命令が存在しない場合には、命令キャッシュ３２０はメインメモリから該当アドレスの命令を読出し、格納すると同時に命令パイプライン３２２に供給する。
【００１０】
ＢＴＢ３２４は、分岐命令の過去の履歴や、分岐先情報からなる分岐予測情報を格納する。ＢＴＢ３２４には、分岐予測機構３２６からフェッチアドレスが、命令パイプライン３２２から予測ミス情報などが与えられる。
【００１１】
分岐予測機構３２６は、命令のフェッチと同時にＢＴＢ３２４のアクセスを行ない、分岐予測情報を読出し、得られた履歴情報をある予測アルゴリズムに当てはめて予測を行ない、その結果がｔａｋｅｎ  予測（分岐成立方向に予測）であれば分岐先情報から生成した分岐先アドレスを次サイクルのフェッチアドレスとして命令キャッシュ３２０に供給する。
【００１２】
ＢＴＢ方式による分岐予測の流れを図３６に示す。図３６を参照して、サイクルｎで命令ｉをフェッチし、同時にＢＴＢリードを行なう。サイクルｎの後半で分岐予測を行ない、サイクルｎ＋１で命令ｉ＋１のフェッチとＢＴＢリードを行なう。サイクルｎ＋１で命令ｉの分岐が解決され、予測ミスであればサイクルｎ＋２で命令ｉ＋２がフェッチされかつＢＴＢが更新される。
【００１３】
図３７を参照して、分岐予測機構３２６は、ＢＴＢ３２４（図３５）からの履歴情報により分岐がｔａｋｅｎ  分岐か否かを予測するための予測回路３３０と、予測回路３３０の予測結果と、命令パイプラインから与えられる予測ミス情報（予測ミス時の再フェッチアドレスなど）と、ＢＴＢ３２４（図３５）からの分岐先アドレスと、直前に自己が出力したフェッチアドレスとに基づいて、次命令のフェッチアドレスを選択するためのフェッチアドレス選択回路３３２とを含む。
【００１４】
予測回路３３０は、前述のとおり履歴情報をある予測アルゴリズムに当てはめて分岐予測を行ない、その結果がｔａｋｅｎ  予測かどうかを示す予測信号を出力する。フェッチアドレス選択回路３２２は基本的には、予測信号がｔａｋｅｎ  予測であれば分岐先アドレスを選択し、さもなければ直前に出力したフェッチアドレスの次のフェッチアドレスを選択する。
【００１５】
以上のＢＴＢ方式は、過去数回の履歴をもとに分岐予測を行なう。何回の履歴をもとにするかは、ＢＴＢが保持する履歴情報のビット数による。
【００１６】
ＢＴＢ方式の予測ヒット率は、２ビット履歴、２５６エントリ（ＢＴＢ内のエントリ数）の場合で、７７％というシミュレート結果が得られている。この場合予測の正確さが８３％、ＢＴＢのヒット率が９３％というシミュレート結果であり、予測ヒット率はその積である。
【００１７】
【発明が解決しようとする課題】
このように従来の２方式はそれほど高い予測ヒット率を有していない。したがって、より高い予測ヒット率を得られる分岐予測方式が望ましい。この場合、ループを形成する条件分岐命令である後方分岐（ｂａｃｋｗａｒｄ  ｂｒａｎｃｈ  ）は、約９０％が分岐する（たとえばジェイ・エル・ヘネシー、ディ・エイ・パターソンによる「コンピュータアーキテクチャ：定量的アプローチ」（Ｊ．  Ｌ．  Ｈｅｎｎｅｓｙ，  Ｄ．  Ａ．  Ｐａｔｔｅｒｓｏｎ，  “Ｃｏｍｐｕｔｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ：  Ａ  Ｑｕａｎｔｉｔａｔｉｖｅ  Ａｐｐｒｏａｃｈ，  ”の第１０８頁）ので、過去の実行結果に基づいた履歴による予測は有効である。しかし、前方分岐（ｆｏｒｗａｒｄ  ｂｒａｎｃｈ）では、分岐する確率は約４０％と、偏りがない。
【００１８】
一般的にプログラムではループを形成する条件分岐命令で処理を繰り返し行なうことが多いので、後方分岐命令を有効に予測できればある程度の効果があると考えられている。しかし、実際にはそのループ内での条件文を前方分岐が形成していることが多い。そうした条件文は、ループが実行される回数と同じ回数だけ実行されるので、ループを形成する条件分岐命令と少なくとも同じ回数だけ実行される。したがって、パイプラインの動作効率を高めるためには、後方分岐のみを有効に予測するだけでは足りず、前方分岐についても有効な予測を行なう必要がある。こうした前方分岐では、前述のように分岐する確率に偏りがないので、履歴による分岐予測は有効ではない。
【００１９】
したがって、前方分岐のように分岐に偏りがない場合でも有効に分岐予測を行なうことができる分岐予測方式が求められている。
【００２０】
この点につき特開昭６３−２３１６２７号公報には、アドレス計算が不要でかつコンディションコードを設定する命令を実行する際に、使用されていないアドレス計算回路で、その命令の実行と同時に演算を行なってコンディションコードの予測値を求め、そのコンディションコードを用いて処理すべき内容を決定する後続の命令に対して、アドレス計算回路で計算したコンディションコードの予測値を渡すことにより、処理すべき内容の決定を早期に実行させる先行制御方式が開示されている。このような方式では、コンディションコードを設定する命令が使用するデータと同じデータを用いて並列にコンディションコードの予測値を求めるので、過去の履歴のみに基づく場合と比べ、コンディションコードが正しく求められる確率が高くなると思われる。
【００２１】
しかし、この特開昭６３−２３１６２７号公報の方式は、単にコンディションコードの予測値を求めるのみであり、これを分岐予測に適用するとすれば、得られたコンディションコードの予測値を用いて、後続の命令により分岐予測を行なうことになる。この場合次のような問題が生ずる。
【００２２】
図３８を参照して、この特開昭６３−２３１６２７号公報に開示された先行技術制御方式を予測分岐方式に用いた場合、まずサイクル１でコンディションコードを設定するセット命令がフェッチされ、サイクル２でこのセット命令がデコードされる。同時にサイクル２で後続の分岐命令がフェッチされる。サイクル３でセット命令が実行されると同時にコンディションコードの予測値の計算も行なわれ、サイクル３の途中で後続の分岐命令に渡される。
【００２３】
ところが、サイクル３では、分岐命令の後続する命令のフェッチが行なわれる。そのため、サイクル３の途中で分岐命令にコンディションコードが渡されたとしても、そのコンディションコードを用いて分岐予測をしても、分岐命令の直後にフェッチする命令のアドレスを予測することはできない。したがって、分岐予測の結果は、さらにその後に後続する命令をフェッチするときに使用される。このフェッチはサイクル４で行なわれる。
【００２４】
しかし、図３８に示されるような命令実行サイクルを有するパイプライン方式では、分岐命令の分岐の実行はサイクル４の前半に終了するので、サイクル４でフェッチする命令は、実際の分岐結果に基づいてフェッチできる。サイクル３で予測した結果を使用することはなく、分岐予測そのものが無駄である。したがってこの特開昭６３−２３１６２７号公報の先行制御方式をそのままで分岐予測に使用することはできない。
【００２５】
以上から、過去の実行結果と相関がない分岐命令に対しても有効な分岐予測を行なうことができる新規な分岐予測装置を提供することが望まれている。その場合、過大なハードウェアを追加する必要がない方が好ましい。たとえば、既存の資源を利用できればそれを利用すべきである。また分岐予測の計算も、できるだけ多様な方法で行なえる方がよいし、また、高速に分岐予測を実行できた方が好ましい。分岐予測を高速で行なうために、分岐予測の正確性をある程度犠牲にしてもよいと思われるが、もちろんできるだけ正確に行なえる方がより好ましい。
【００２６】
また、分岐命令の分岐の条件を設定するための命令の位置は、それらが使用する資源にもあまり影響されずに分岐予測を行なえればより好ましい。たとえば、分岐命令の直前に実行される命令によって分岐の条件が設定される場合であって、かつその設定にパイプラインの演算結果を保持する、レジスタなどの手段が使用されるために、分岐の条件を分岐命令のフェッチに先立って入手できない場合などである。
【００２７】
また、プログラムカウンタ相対やレジスタ参照による分岐先アドレスの決定をする分岐命令を含む多くの種類の分岐命令に対してそうした分岐予測を行なえた方がよい。たとえば、分岐命令の分岐の傾向が過去の実行結果と相関がある、なしにかかわらず、また分岐命令の最初の実行時も含めて有効な分岐予測を行なうことができる方がよい。また、分岐予測の正確性を上げるために既存の命令セットを変更してもよいが、変更することなく、または少しの変更のみで、有効な分岐予測が行なえればより好ましく、また命令のスケジューリングの制限もできるだけない方がよい。
【００３９】
それゆえに、請求項１に記載の発明の目的は、過大なハードウェアを追加することなく、過去の実行結果と相関がない分岐命令に対しても有効な分岐予測を行なうことができる分岐予測装置を提供することである。
【００４０】
請求項２に記載の発明の目的は、過大なハードウェアを追加することなく、既存の資源を有効に利用して、過去の実行結果と相関がない分岐命令に対しても、有効な分岐予測を行なうこができる分岐予測装置を提供することである。
【００４１】
請求項３に記載の発明の目的は、過大なハードウェアを追加することなく、かつ既存の命令セットを変更することなく、過去の実行結果と相関がない分岐命令に対しても有効な分岐予測を行なうことができる分岐予測装置を提供することである。
【００４２】
請求項４に記載の発明の目的は、過大なハードウェアを追加することなく、かつ既存の命令セットを生かして、過去の実行結果と相関がない分岐命令に対しても有効な分岐予測を行なうことができる分岐予測装置を提供することである。
【００４３】
請求項５に記載の発明の目的は、過大なハードウェアを追加することなく、分岐命令の最初の実行時も含めて、過去の実行結果と相関がない分岐命令に対しても有効な分岐予測を行なうことができる分岐予測装置を提供することである。
【００４９】
【課題を解決するための手段】
請求項１に記載の発明に係る分岐予測装置は、演算結果を格納する手段を有するパイプライン方式のプロセッサにおける分岐予測装置であって、分岐命令の分岐予測に関連する予測情報を、ある分岐命令より前にフェッチされる命令のフェッチと同じタイミングで供給するための予測情報供給手段と、予測情報供給手段により供給された予測情報に従って、必要であれば演算結果を格納する手段から分岐予測に必要な情報を読出し、遅くともある分岐命令のフェッチサイクルの完了までにある分岐命令の分岐予測を行なって、分岐予測信号を出力するための分岐予測手段とを含み、命令体系を、分岐の予測情報を含み得るように構成し、予測情報供給手段は、命令から予測情報を取出して供給する手段を含む。
【００６２】
請求項２に記載の発明に係る分岐予測装置は、請求項１に記載の分岐予測装置であって、命令に、通常の命令フィールドと、次に実行する分岐命令の予測情報を保持するための予測情報フィールドとを設け、予測情報供給手段は、通常の命令フィールドの内容をパイプラインに投入するとともに、命令の予測情報フィールドから予測情報を取出して分岐予測手段に供給する。
【００６３】
請求項３に記載の発明に係る分岐予測装置は、請求項１に記載の分岐予測装置であって、予測情報供給手段は、連続する２つ以上の命令を一度にフェッチして、フェッチした最後の命令が分岐予測命令であることに応答して、フェッチした２つ以上の命令から分岐予測情報を得て、分岐予測手段に与えるための手段を含む。
【００６４】
請求項４に記載の発明に係る分岐予測装置は、請求項１に記載の分岐予測装置であって、命令体系に、分岐予測情報を保持するための分岐予測情報保持命令を設け、予測情報供給手段は、分岐予測情報保持命令から分岐予測情報を取出して供給するための手段を含む。
【００６５】
請求項５に記載の発明に係る分岐予測装置は、演算結果を格納する手段を有するパイプライン方式のプロセッサにおける分岐予測装置であって、分岐命令の分岐予測に関連する予測情報を、ある分岐命令より前にフェッチされる命令のフェッチと同じタイミングで供給するための予測情報供給手段と、予測情報供給手段により供給された予測情報に従って、必要であれば演算結果を格納する手段から分岐予測に必要な情報を読出し、遅くともある分岐命令のフェッチサイクルの完了までにある分岐命令の分岐予測を行なって、分岐予測信号を出力するための分岐予測手段とを含み、静的な分岐予測機構をさらに含む。各命令は、次に実行される分岐命令に対して行なわれる分岐の予測方式を特定するための予測方式特定情報を含む。予測情報供給手段は、フェッチされた命令から、予測方式特定情報を取出して供給する。分岐予測装置はさらに、分岐予測手段の出力と、静的な分岐予測機構の出力とのいずれか一方を、予測方式特定情報に応答して選択するための方式選択手段とを含む。
【００７１】
【作用】
請求項１に記載の分岐予測装置によれば、分岐命令の分岐予測に関連する予測情報を、ある分岐命令より前にフェッチされる命令のフェッチと同じタイミングで供給し、その予測情報に従って分岐予測が行なわれる。予測のための時間に余裕があるので、必要であれば演算結果を格納する手段から分岐予測に必要な情報、たとえば実際に分岐命令が分岐を行なう際に参照する情報を読出して分岐予測に用いることができる。
また、予測情報供給手段は、命令から予測情報を取出すことができる。予測情報を格納しておくためのハードウェアを準備する必要がない。また分岐予測をより的確にするために、格納しておく予測情報の量を増加させる必要もない。
【００８４】
請求項２に記載の分岐予測装置では、請求項１に記載の分岐予測装置の作用に加え、予測情報供給手段は、命令中に含まれる通常の命令フィールドの内容をパイプラインに投入するとともに、命令の予測情報フィールドから予測情報を取出して分岐予測手段に供給する。予測情報を格納しておくためのハードウェアを準備する必要がない。また、分岐予測に必要な情報が、必要なときは常に命令から間違いなく供給されるため、分岐予測は的確なものになる。
【００８５】
請求項３に記載の分岐予測装置は、請求項１に記載の分岐予測装置の作用に加え、連続する２つ以上の命令を一度にフェッチして、フェッチした最後の命令が分岐予測命令である場合、フェッチした２つ以上の命令から分岐予測情報を得て、分岐予測が行なわれる。命令中に、分岐予測のための特別なフィールドを設けたり、新たな命令を設けたり、命令長を増加したりすることが不要で、命令体系を変更することなく、的確な分岐予測を行なえる。
【００８６】
請求項４に記載の分岐予測装置では、請求項１に記載の分岐予測装置の作用に加え、命令体系に、分岐予測情報を保持するための分岐予測情報保持命令を設け、この分岐予測情報を取出して分岐予測に用いる。既存の命令を変更することなく、新たな命令を追加することのみで、余分なハードウェアを追加することもなく的確な分岐予測が行なえる。
【００８７】
請求項５に記載の分岐予測装置によれば、分岐命令の分岐予測に関連する予測情報を、ある分岐命令より前にフェッチされる命令のフェッチと同じタイミングで供給し、その予測情報に従って分岐予測が行なわれる。予測のための時間に余裕があるので、必要であれば演算結果を格納する手段から分岐予測に必要な情報、たとえば実際に分岐命令が分岐を行なう際に参照する情報を読出して分岐予測に用いることができる。
また、分岐予測手段の出力と、静的な分岐予測機構の出力とのいずれか一方が予測方式特定情報に応答して選択される。分岐命令の種類により、より適した予測方式を使用して分岐予測を行なえるので、分岐予測がより的確になる。
【００９３】
【実施例】
以下この発明のいくつかの実施例を図面を参照して説明する。なお以下の実施例の各図面においては図示されていないが、命令キャッシュは主メモリに接続されており、命令の一部を常に保持しており、フェッチアドレスに該当する命令がない場合には主メモリから読出してくるものとする。これは従来の技術における命令キャッシュと同様である。
【００９４】
［第１の実施例］
図１〜図１４は、本発明の第１の実施例に係る分岐予測装置に関する図面である。
【００９５】
図１を参照して、この分岐予測装置は、命令キャッシュ６０と、命令パイプライン５０と、命令パイプライン５０の演算結果を格納するレジスタファイル５２とに接続されている。分岐予測装置は、命令パイプライン５０からの情報から予測情報を生成するための予測情報生成機構５４と、分岐予測装置から出力されるフェッチアドレスと予測情報生成機構５４からの予測情報とを一時格納するための予測情報バッファ５６と、予測情報バッファ５６からの予測情報と、レジスタファイル５２に格納されている演算結果と、命令パイプライン５０からの予測ミス情報とに基づき、分岐予測を行なうための分岐予測機構５８とを含む。なお、図１には示されていないが、命令パイプライン５０は、予測情報バッファ５６の読出／書込制御信号を出力し、予測情報バッファ５６に与えている。
【００９６】
予測情報とは、分岐を決定するコンディションあるいはそのもとになるデータを保持するレジスタ番号、分岐条件などの分岐情報、分岐先情報などをいう。
【００９７】
図１に示される命令パイプライン５０は、図２に示されるような命令パイプライン処理を行なうものである。もちろん本発明はこのような命令パイプライン処理を行なうプロセッサのみに限定的に適用可能なわけではなく、他のパイプライン処理を行なうものについても、必要な修正を行なうことにより適用できる。
【００９８】
図２に示されるように、ある命令はＩＦステージと、Ｄステージと、ＥＸＣステージと、ＭＥＭステージと、ＷＢステージとに分割される。ＩＦステージの後半およびＤステージの前半で命令フェッチが、Ｄステージの後半でデコード、オペランドフェッチが、ＥＸＣステージで演算実行が、ＭＥＭステージでメモリアクセスが、Ｗステージでレジスタ書込がそれぞれ行なわれる。分岐命令の場合にはＥＸＣステージの前半で分岐実行処理が行なわれる。
【００９９】
このパイプライン方式では、図３に示されるように、各命令を１ステージずつずらせて実行し、１ステージに要するサイクルタイムごとに１つの命令の実行が終了するようになっている。
【０１００】
本実施例では、図３に示されるように、命令ｉ−１がフェッチされる間（ＩＦステージ後半からＩＤステージ前半）に、分岐命令ｉに対する予測情報を予測情報バッファ５６（図１参照）から読出して分岐予測機構５８（図１参照）に与える。分岐予測機構はレジスタファイル５２に読出要求を行ない、ＩＤステージの後半でレジスタファイルに格納されていたコンディションコードあるいはそのもとになるデータを読出す。そしてＥＸＣステージ前半で所定の分岐予測計算を行ない、分岐する（ｔａｋｅｎ  ）／分岐しない（ｎｏｔ−ｔａｋｅｎ  ）の予測を決定する。これは図３のＥＸＣステージ前半の「ＢＰ」の部分に相当する。
【０１０１】
ｔａｋｅｎ  予測の場合には、この予測と並行して生成された分岐先アドレスを、分岐命令の次のサイクルにフェッチすべき命令（命令ｎ＋１）のフェッチアドレスとして命令キャッシュに与える。ｎｏｔ−ｔａｋｅｎ  予測の場合には、Ｆａｌｌ−ｔｈｒｏｕｇｈ命令のアドレスをフェッチアドレスとする。Ｆａｌｌ−ｔｈｒｏｕｇｈ命令とは、分岐不成立の場合に実行する命令のことであり、通常は静的に分岐命令の次に位置する命令を指す。
【０１０２】
すなわち命令ｉの分岐命令の前の命令ｉ−１で命令ｉの分岐予測情報を読出して分岐予測を行ない、命令ｉ＋１のフェッチアドレスを生成するので、分岐予測に時間的余裕がある。
【０１０３】
予測情報バッファ５６の構成を図１２に示す。予測情報バッファ５６は、従来技術におけるＢＴＢのようなバッファである。図１２を参照して予測情報バッファ５６には、複数個のエントリ０〜ｎ−１がある。各エントリ１３０は、有効フラグ１３２と、検索アドレス１３４と、予測情報１３６と、分岐先情報１３８とからなる。予測情報バッファ５６は一種の連想メモリであり、検索アドレス１３４としては、分岐命令の１サイクル前にフェッチされる命令（図３における命令ｉ−１）のアドレスを登録する。なお、検索アドレスとして他のアドレスを使用することも考えられる。そうした実施例は後述の第９の実施例に示す。有効フラグ１３２は、エントリ１３０に格納されている予測情報、分岐先情報が有効かどうかを示すフラグである。
【０１０４】
予測情報１３６および分岐先情報１３８は次のようにして予測情報バッファに登録される。分岐命令が実行されると、分岐命令と比較命令（必要な場合）のオペレーション、オペランドに基づいて分岐予測機構で予測を行なうのに必要な予測情報を予測情報生成機構５４が生成する。この予測情報は図１２のエントリ１３０の予測情報１３６として予測情報バッファに登録される。このとき分岐先アドレスも分岐先情報１３８として登録される。
【０１０５】
参照時には予測情報バッファ５６は、フェッチアドレスで命令キャッシュと同時にアクセスされる。予測情報バッファの各エントリの検索アドレスとフェッチアドレスとの比較を行ない、一致するエントリがあればその予測情報と分岐先アドレスとを分岐予測機構５８に与える。
【０１０６】
ところで、条件分岐は▲１▼コンディション生成、▲２▼条件判定、▲３▼分岐先アドレス生成、▲４▼分岐先設定、という４つの一連の動作を行なう必要がある。ただしこの場合分岐先アドレス生成処理は▲１▼および▲２▼と並行して実行することが可能である。条件分岐の処理量はそのため、ＡＬＵ演算などに比べて多い。しかも、分岐命令のフェッチから、分岐先命令のフェッチまでを短くすることにより分岐ディレイを抑えてミスフェッチ時のペナルティを少なくするためには、他の命令よりも早いステージで条件分岐を終了する必要がある。
【０１０７】
図３に示される命令パイプラインで条件分岐を１命令で処理するためには、ＥＸＣステージの前半で▲１▼▲２▼および▲４▼の処理を行なう必要がある。▲１▼のコンディション生成は大小比較を行なうので、３２ビットアーキテクチャの場合には３２ビットの減算が要求される。３２ビット減算という演算は、ＡＬＵが１サイクルかけて行なう処理である。このような処理をたとえば半サイクルで行なうことにすると、バランスがとれたパイプラインを構成できない。
【０１０８】
そこで通常のＲＩＳＣ（Ｒｅｄｕｃｅｄ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｓｅｔ  Ｃｏｍｐｕｔｅｒ）プロセッサでは条件分岐処理を比較命令と分岐命令との２つに分割する。比較命令では▲１▼の処理を、分岐命令では▲２▼▲３▼▲４▼の処理を行なう。たとえば既存のあるシステムでは、すべての条件分岐を比較命令と分岐命令とに分割して処理する。一方で、コンディション生成を簡単に行なえる場合に限って▲１▼▲２▼▲３▼▲４▼を処理する分岐命令を用意しているので、比較命令＋分岐命令で処理する場合と、分岐命令だけで処理する場合との２つの場合が存在するシステムもある。
【０１０９】
図５８に示される分岐予測機構５８は、後者の場合すなわち比較命令＋分岐命令で処理する場合と、分岐命令だけで処理する場合との両方に対処できる。もちろんこの実施例は一例であって、比較命令＋分岐命令のみを用いて処理するシステムを構成することも容易に行なえる。
【０１１０】
図４を参照して分岐予測機構５８は、予測情報デコーダ７０と分岐予測回路７２と分岐先生成回路７４とフェッチアドレス生成回路７６とを含む。
【０１１１】
予測情報デコーダ７０は予測情報を予測情報バッファ５６から受取り、分岐予測オペレーション、定数などを分岐予測回路７２に、分岐先情報を分岐先生成回路７４に与え、アクセスすべきレジスタのレジスタ番号をレジスタファイル５２に対して出力することによりアクセス要求を行なう。
【０１１２】
分岐予測回路７２の詳細については図９を参照して後述するが、予測情報デコーダ７０により指定されたレジスタ番号のレジスタからのデータ（レジスタ１）と、予測情報デコーダ７０から与えられる分岐予測オペレーションおよび定数に従い、分岐方向を予測して分岐予測信号を出力するためのものである。
【０１１３】
分岐先生成回路７４は、予測情報デコーダ７０からの分岐先情報と、レジスタから与えられる分岐先アドレスと、フェッチアドレス生成回路７６の出力するフェッチアドレスとからｔａｋｅｎ  予測時の分岐先アドレスを生成するためのものである。
【０１１４】
フェッチアドレス生成回路７６は、分岐予測回路７２からの分岐予測信号に応答し、分岐先生成回路７４からの分岐先アドレスと、パイプライン５０からの予測ミス情報と、直前のフェッチアドレスとから、次にフェッチすべきであると予測される命令のアドレスを生成するためのものである。
【０１１５】
以下では、分岐処理に関する命令として以下の処理を行なうコードを考える。ただし以下の説明において＄ａはａで指定されるレジスタの値を、Ｌａｂｅｌは分岐先アドレスを示すものとする。またたとえば＄０は値０を保持する特定のレジスタの値、すなわち値０を指すものとする。
【０１１６】
たとえば比較命令ｓｌｔと、４つの分岐命令ｂｅｑ、ｂｌｅ、ｂｇｅｚ、ｂｌｔｚを次のように定める。
【０１１７】
【表１】
0003599409.tif 000002
【０１１８】
この命令コードの場合、条件分岐と処理は以下のように実現できる。
【０１１９】
【表２】
0003599409.tif 000003
【０１２０】
本実施例の分岐予測装置は、分岐処理の命令コードによって、分岐予測回路７２（図４）のフェッチするレジスタ値に対して、次のような分岐予測オペレーションを行なって分岐予測を行なう。
【０１２１】
（１）  分岐処理の命令コードが比較命令＋分岐命令の場合（図５）
（ｉ）  比較命令と分岐命令との間が１サイクル以上離れている場合（図５（ａ））
図１０を参照して、比較命令（命令ｎ−ｍ）と、分岐命令（命令ｎ）との間が１サイクル以上離れている場合には、分岐予測機構が比較命令ｓｌｔの実行結果を参照できる。したがって、比較命令ｓｌｔで生成されたコンディション＄ｄをそのまま分岐予測に用いることができる。予測フェッチに用いるデータをｓｒｃ１、ｓｒｃ２、…とすると予測フェッチデータとしてはｓｒｃ１＝＄ｄ、ｓｒｃ２＝＄０、分岐予測オペレーションは「一致比較結果の反転を出力する。」となる。分岐命令がｂｎｅではなくｂｅｑであれば分岐予測オペレーションは「一致比較結果を出力する。」となる。
【０１２２】
（ｉｉ）  比較命令が分岐命令の直前にある場合（図５（ｂ））
図５（ｂ）に示されるように、比較命令ｓｌｔ（命令ｎ−１）が分岐命令ｂｎｅ（命令ｎ）の直前にある場合、比較命令ｓｌｔのソースオペランド（＄ａ、＄ｂ）を分岐予測に用いる。すなわち、予測フェッチデータｓｒｃ１＝＄ａ、ｓｒｃ２＝＄ｂである。このときの分岐予測オペレーションは「大小比較結果を出力する。」となる。ただしこれは分岐命令がｂｎｅの場合であって、分岐命令がｂｅｑであれば分岐予測オペレーションは「大小比較結果の反転を出力する。」となる。
【０１２３】
（２）  分岐命令１つで処理する場合（図６）
（ｉ）  分岐命令とそのオペランドを生成する命令の間が１サイクル以上離れている場合（図６（ａ））
図６（ａ）を参照して、分岐命令ｂｅｑ（命令ｎ）が参照するオペランド（＄ｄ，＄ｃ）を分岐予測にも用いることができる。したがって予測フェッチデータｓｒｃ１＝＄ｄ、ｓｒｃ２＝＄ｃとなり、分岐予測オペレーションは「一致比較結果を出力」となる。この分岐予測オペレーションは分岐命令がｂｅｑの場合であり、分岐命令がｂｎｅであれば分岐予測オペレーションは「一致比較結果の反転を出力」となる。
【０１２４】
（ｉｉ）  分岐のオペランドを生成する命令が即値を用いた計算を行なうものであり、かつ分岐命令の直前にあり、分岐命令で使用される比較値が定数の場合（図６（ｂ））
図６（ｂ）を参照して、命令ｎ−１でオペランド＄ａから即値Ｃ１を引いた値をａで指定されるレジスタに格納する。そして命令ｎではこの＄ａと分岐の比較値＄ｃ（定数Ｃ）との一致を判定している。この場合、＄ａの内容が命令ｎ−１の処理により書換えられるため、命令ｎ−１の段階で＄ａをフェッチしてそれに基づいて分岐予測を行なっても正しい予測は得られない。そこで次のようにする。
【０１２５】
分岐の比較値＄ｃ（定数Ｃ２）から命令ｎ−１の即値Ｃ１を引いた値（Ｃ２−Ｃ１）を分岐予測情報の予測定数として分岐予測情報に登録しておく。そして分岐予測では、この予測定数と分岐命令のソースオペランド（＄ａ）とを比較する。よって予測フェッチデータｓｒｃ１は＄ａ、ｓｒｃ２は予測定数（Ｃ２−Ｃ１）となり、分岐予測オペレーションは「一致比較結果を出力」となる。この分岐予測オペレーションは分岐命令が「ｂｅｑ」の場合であり、分岐命令が「ｂｌｅ」であれば分岐予測オペレーションは「一致比較結果の反転を出力」となる。
【０１２６】
なお、無条件分岐の場合には予測フェッチデータとしてｓｒｃ１＝＄０、ｓｒｃ２＝＄０とし、分岐予測オペレーションは「一致比較結果を出力」とする。これにより常にｔａｋｅｎ  予測となり無条件に分岐する。
【０１２７】
さらに、次のような場合について考える。０との大小比較を行なう分岐命令としてｂｇｅｚおよびｂｌｔｚの２つが用意されていることについては既に述べた。この命令について図７を参照して問題点を述べる。
【０１２８】
図７を参照して、０との大小比較を行なう分岐命令、たとえば命令ｂｇｅｚ（命令ｎ）が、対応する比較命令を持たず、かつその直前にこの分岐命令の分岐のオペランドを生成する命令があり、かつそのオペランドを生成する命令がレジスタ値を用いる計算を行なう場合には、命令ｎ−１がフェッチされるタイミングで＄ａを得て分岐予測を行なうことができない。
【０１２９】
この場合、次のようにすれば命令ｎ−１がフェッチされる時点から分岐予測を開始することが可能である。すなわち図７に示される例の場合、命令ｎ−１で＄ａ＝＄ｂ＋＄ｃを計算し、命令ｎで＄ａと０との大小関係を比較している。そこで、＄ａが生成されるのを待たず、命令ｎ−１がフェッチされるのと同じタイミングで＄ｂおよび＄ｃを得て、＄ｂ＋＄ｃを計算してそれと０との大小比較を行なうことにより、命令ｎでの分岐命令の分岐予測を行なうことができる。本実施例では、このような分岐予測も行なうことができる構成となっている。
【０１３０】
あるいは図８を参照して、対となる比較命令を有さない条件分岐命令ｂｅｑ（命令ｎ）において、分岐のオペランドを生成する命令が分岐命令の直前（命令ｎ−１）にあり、この命令がレジスタ値を用いると、図７の場合と同様に分岐命令の分岐予測を行なうことができない。この問題は次のようにすれば解決できる。
【０１３１】
図８を参照して、命令ｎ−１で＄ｂと＄ｃとの和を計算して＄ａとし、命令ｎでこの＄ａと＄ｄとの一致を判定している。そこで、命令ｎ−１のフェッチ時に＄ｂと＄ｃとを得て、この和と＄ｄとを比較すれば、命令ｎ−１により＄ａを計算されるのを待たず、命令ｎの分岐予測を行なうことができる。本実施例の装置はこのような予測も可能な構成となっている。
【０１３２】
図９は、以上説明した問題を解決するような構成となっている分岐予測回路７２のブロック図である。図９を参照して、分岐予測回路７２は、大小比較回路８０と、一致比較回路８２と、マルチプレクサ８４、８６および９２と、反転回路８８および９０とを含む。
【０１３３】
大小比較回路８０の２つの入力Ｓ１およびＳ２にはそれぞれ、ソースオペランドｓｒｃ１およびｓｒｃ２が与えられる。マルチプレクサ８４の２つの入力にはソースオペランドｓｒｃ１と、大小比較回路８０の出力とが与えられる。マルチプレクサ８４は、図４に示す予測情報デコーダ７０から与えられる分岐予測オペレーションに従って入力の一方を選択して出力する。
【０１３４】
マルチプレクサ８６は３入力である。１つの入力にはソースオペランドｓｒｃ２が与えられる。他の１つの入力には図４に示す予測情報デコーダ７０からの定数データが与えられる。残りの入力にはソースオペランドｓｒｃ３が与えられる。マルチプレクサ８６は予測情報デコーダ７０からの分岐予測オペレーションに応答して、３つの入力のうちのいずれか１つを選択して出力する。
【０１３５】
一致比較回路８２は２つの入力Ｓ１およびＳ２を有する。入力Ｓ１はマルチプレクサ８４の出力に接続されている。入力Ｓ２はマルチプレクサ８６の出力に接続されている。一致比較回路８２は、入力Ｓ１およびＳ２が一致しているか否かを示す信号を出力するためのものである。
【０１３６】
反転回路８８および９０の入力はそれぞれ大小比較回路８０および一致比較回路８２の出力に接続されている。
【０１３７】
マルチプレクサ９２は４つの入力を有し、その入力はそれぞれ反転回路８８の出力と、大小比較回路８０の出力と、一致比較回路８２の出力と、反転回路９０の出力とに接続されている。マルチプレクサ９２は分岐予測オペレーションに応答して、４つの入力のうち１つを選択して出力する。この出力が予測信号であり、０の場合にｎｏｔ−ｔａｋｅｎ  、１の場合にｔａｋｅｎ  を示す。
【０１３８】
なお大小比較回路８０は基本的には２つの入力Ｓ１およびＳ２の大小を比較してその符号ビットを出力するためのものであるが、分岐予測オペレーションによって、２つの入力Ｓ１およびＳ２の値を加算して結果を出力するようにも動作できる。その詳細については後述する。大小比較回路８０は、もともと減算回路を含むので、このような加算処理も可能となる。なお大小比較回路８０の出力として、符号ビットのほかに加算または減算結果の絶対値のデータも含まれるが、それらはマルチプレクサ８４に符号ビットとともに与えられる。
【０１３９】
図１０を参照して、大小比較回路８０は、加算器１００と、反転回路１０２と、マルチプレクサ１０４と、０または１の定数データを発生する定数発生回路１０８と、マルチプレクサ１０４の出力のＬＳＢ（最下位ビット）に定数発生回路１０８の出力を加算するためのＬＳＢ加算器１０６とを含む。
【０１４０】
もともと大小比較回路８０は、ｓｒｃ２の２の補数の最下位ビットに１を加算したものをｓｒｃ１に加算することにより、ｓｒｃ１−ｓｒｃ２を計算している。この「反転して最下位ビットに１を加算する」処理を行なわなければ、ｓｒｃ１とｓｒｃ２との加算が行なえる。大小比較回路８０はそのような機能を含ませることにより、２つの入力ｓｒｃ１およびｓｒｃ２の間の大小比較のみならず加算処理も行なえるようにしたものである。
【０１４１】
反転回路１０２の入力にはｓｒｃ２が与えられる。マルチプレクサ１０４の一方入力には反転回路１０２の出力が、他方入力にはｓｒｃ２がそのまま与えられる。マルチプレクサ１０４は分岐予測オペレーションに応答して２つの入力のいずれか一方を選択して出力する。
【０１４２】
定数発生回路１０８は、分岐予測オペレーションに応答して動作し、大小比較を行なう場合には１を、加算処理を行なう場合には０をそれぞれ出力する。
【０１４３】
ＬＳＢ加算器１０６は、マルチプレクサ１０４の出力する値の最下位ビットに、定数発生回路１０８の出力を加算するためのものである。
【０１４４】
加算器１００の一方の入力にはｓｒｃ１が、他方入力にはＬＳＢ加算器１０６の出力がそれぞれ与えられている。加算器１００はこれら２つの入力を加算して少なくとも符号ビットを出力する。前述のように加算器１００により符号ビットのみならず他の演算結果も得られる。符号ビットを調べることにより、ｓｒｃ１−ｓｒｃ２≧０またはｓｒｃ１＋ｓｒｃ２≧０の判定も行なうことができる。
【０１４５】
図９および図１０に示される分岐予測回路７２を用いることにより、図５〜図８に示すような各ケースについて、分岐予測を次のようにして行なうことができる。
【０１４６】
たとえば図５（ａ）に示されるケースを考える。ｓｒｃ１として＄ｄを、ｓｒｃ２として＄０をそれぞれ入力する。マルチプレクサ８４はｓｒｃ１を選択して一致比較回路の入力Ｓ１に与える。マルチプレクサ８６はｓｒｃ２を選択して一致比較回路８２の入力Ｓ２に与える。一致比較回路８２は２つの入力の一致比較結果をマルチプレクサ９２および反転回路９０に与える。マルチプレクサ９２は、分岐予測オペレーションにより反転回路９０の出力を選択する。これにより上述の（１）（ｉ）のケースの分岐予測が行なえる。なおこの場合大小比較回路８０は使用されない。
【０１４７】
図５（ｂ）に示されるケースでは次のような動作を行なう。ｓｒｃ１としては＄ａを、ｓｒｃ２としては＄ｂをそれぞれ与える。図１０を参照して、定数発生回路１０８は１をＬＳＢ加算器１０６に与える。マルチプレクサ１０４は反転回路１０２の出力を選択してＬＳＢ加算器１０６に与える。ＬＳＢ加算器１０６はマルチプレクサ１０４の出力の最下位ビットに１を加算して加算器１００に与える。加算器１００はｓｒｃ１とＬＳＢ加算器１０６の出力とを加算してその符号ビットを図９に示されるマルチプレクサ９２および反転回路８８の入力に与える。マルチプレクサ９２は、分岐予測オペレーションに従って大小比較回路８０の出力を選択して予測信号として出力する。これにより上述の（１）（ｉｉ）の動作を行なうことができる。なお分岐比較命令がｂｅｑの場合には、マルチプレクサ９２により反転回路８８の出力を選択させるようにすればよい。
【０１４８】
図６（ａ）のケースに対処するためには次のようにする。予測フェッチデータとしてｓｒｃ１は＄ｄを、ｓｒｃ２は＄ｃをそれぞれ与える。マルチプレクサ８４はｓｒｃ１、マルチプレクサ８６はｓｒｃ２を選択する。一致比較回路８２の出力をマルチプレクサ９２により選択して予測信号とする。これにより図６（ａ）の分岐予測を行なうことができる。なお、分岐命令がｂｎｅであれば反転回路９０の出力を選択すればよい。これにより、上述の（２）（ｉ）の処理を行なうことができる。
【０１４９】
図６（ｂ）のケースは次のように対処する。予測フェッチデータとしてｓｒｃ１は＄ａを、ｓｒｃ２は予測定数（Ｃ２−Ｃ１）を選択する。ただしこの場合ｓｒｃ２は予測情報バッファ５６（図１参照）からの定数データとして与えられるものとする。図９を参照して、マルチプレクサ８４はｓｒｃ１を選択する。マルチプレクサ８６は定数データを選択する。マルチプレクサ９２は一致比較回路８２の出力を選択する。もしも分岐命令がｂｎｅであれば、マルチプレクサ９２には反転回路９０の出力を選択させる。これにより上述の（２）（ｉｉ）の動作を行なうことができる。
【０１５０】
無条件分岐の場合には、図９に示されるｓｒｃ１とｓｒｃ２にはそれぞれ＄０を与え、マルチプレクサ８４はｓｒｃ１を、マルチプレクサ８６はｓｒｃ２をそれぞれ選択するようにする。マルチプレクサ９２は一致比較回路８２の出力を選択する。一致比較回路８２の２つの入力が常に一致するので、予測信号は常にｔａｋｅｎ  予測となる。
【０１５１】
図７に示されるケースには次のように対処する。ｓｒｃ１として＄ｂを、ｓｒｃ２として＄ｃを与える。図１０を参照して、大小比較回路８０のマルチプレクサ１０４はｓｒｃ２を選択してＬＳＢ加算器１０６に与える。定数発生回路１０８は０を発生してＬＳＢ加算器１０６に与える。ＬＳＢ加算器１０６はマルチプレクサ１０４の出力の最下位ビットに定数０を加算して加算器１００に与える。すなわちＬＳＢ加算器１０６の出力はｓｒｃ２そのものとなる。加算器１００はｓｒｃ１とｓｒｃ２とを加算して符号ビットと絶対値とを出力する。加算器１００の出力する符号ビットを調べることにより、ｓｒｃ１＋ｓｒｃ２≧０の判定を行なうことができる。これにより、図７に示されるようなケースでも、命令ｎ−１の完了を待たずに分岐命令ｎの分岐予測を行なうことができる。すなわち、分岐のオペランドを生成する命令が分岐命令の直前にありレジスタ値を用いた計算を行なう場合でも、分岐命令が０との大小比較であれば予測を行なうことができる。
【０１５２】
さらに図８に示されるケースについては次のように対処する。図８のケースでは、＄ｂ＋＄ｃ＝＄ｄの判定を行なう必要がある。この場合、図１０を参照して、マルチプレクサ１０４はｓｒｃ２を選択し、定数発生回路１０８は０を発生するようにする。すると上述のように加算器１００はｓｒｃ１とｓｒｃ２との加算結果を出力する。すなわちｓｒｃ１として＄ｂを、ｓｒｃ２として＄ｃを与えれば、加算器１００の出力に＄ｂ＋＄ｃが得られる。
【０１５３】
図９を参照して、マルチプレクサ８４は大小比較回路８０の出力（＄ｂ＋＄ｃ）を選択する。ｓｒｃ３として＄ｄを与え、マルチプレクサ８６がｓｒｃ３を選択するようにする。これにより一致比較回路８２で＄ｂ＋＄ｃ＝＄ｄの判定を行なうことができる。マルチプレクサ９２により一致比較回路８２の出力を選択すれば分岐命令ｂｅｑの分岐予測を行なうことができ、マルチプレクサ９２により反転回路９０の出力を選択するようにすれば、分岐命令ｂｎｅの分岐予測を行なえる。
【０１５４】
したがって分岐のオペランドを生成する命令が分岐命令の直前にあり、レジスタ値を用いた計算を行なう場合でも、あらゆる分岐命令に対して予測を行なうことができる。すなわち定数または変数と一致、定数または変数との大小比較による分岐命令に対して予測を行なうことができる。
【０１５５】
なお、図１０は、多くの機能を可能とするための構成であり、一部の機能のみを実現するために他の不要な部分を省略可能であることは、当業者には明らかである。
【０１５６】
ところで、図１および図１２に示される予測情報バッファ５６の分岐先情報１３８として、分岐先アドレスそのものを格納させてもよい。しかし、たとえば３２ビットアーキテクチャのプロセッサでは分岐先アドレスのビット数は３０ビット程度とかなり大きい。予測ヒット率を向上させるためには予測情報バッファ５６のエントリ数を増加させればよいと考えられるが、予測情報バッファに保持させる分岐先アドレスのビット長が大きいとバッファの面積が非常に大きくなってしまうという問題がある。そこで次のようにしてバッファの面積の増加を抑えるようにしている。
【０１５７】
図１１を参照して、分岐先情報として分岐先がＰＣ（プログラムカウンタ）相対で指定されるかレジスタ値で指定されるかを選択する情報と、ＰＣ相対のときの加算値となる即値またはレジスタ番号を保持させるようになっている。そして分岐先生成回路７０は、フェッチアドレスと、分岐先情報に含まれる即値とを加算するための３０ビットの加算器１２０と、分岐先情報に格納されていたレジスタ番号から読出されたレジスタ値が与えられる入力と、加算器１２０の出力が与えられる入力とを有し、ＰＣ相対／レジスタ値選択情報に応答して２つの入力の一方を選択して分岐先アドレスとして出力するマルチプレクサ１２２とを含む。
【０１５８】
選択情報がＰＣ相対を指定しているときには、マルチプレクサ１２２は加算器１２０の出力を選択する。一方選択情報がレジスタ値を選択している場合には、マルチプレクサ１２２はレジスタ値を選択する。なおこのレジスタ値は、図１２に示される分岐先情報１３８に格納されていたレジスタ番号により指定されたレジスタから読出された値である。
【０１５９】
ＢＴＢを用いた分岐予測では、ＢＴＢ読出と予測分岐先設定とを１サイクル内で行なわなければならないので、加算を行ない分岐先を生成する時間はない。したがってＢＴＢ方式では分岐先アドレスをＢＴＢにそのまま保持していた。しかし本発明のような分岐予測方式では、予測情報を得てから予測分岐先設定までに１サイクルの時間があるので、３０ビット程度の加算は十分に行なうことができる。またレジスタフェッチもできるため、レジスタ指定の分岐命令の場合でも、その分岐先アドレスをレジスタを参照して生成できる。
【０１６０】
ＰＣ相対のオフセットにせよレジスタ番号にせよ即値として十数ビットで済む。分岐先情報１３８（図１２）が、分岐先アドレスをそのまま保持した場合の３０ビットから、即値とオペレーションとを合せた十数ビットに抑えることができるので、バッファの各エントリを小さくすることができる。その結果予測情報バッファ５６（図１参照）のハードウェア量を減らすことができる。あるいは、予測ヒット率を上げるためにエントリ数を増加しても、ハードウェアの増加量を小さく抑えることができる。
【０１６１】
以上のように本実施例の分岐予測方式では、過去の履歴情報を予測に用いるのではなく、これから実行する分岐命令が参照するコンディション、あるいはそのコンディションを生成するためのもとになるデータを予測に用いる。本方式ではこのように、分岐方向決定に実際に使用するデータに基づいて予測を行なうため、過去の実行結果と相関がなく、ランダムに分岐方向が変わる分岐命令についても有効に予測を行なうことができる。
【０１６２】
本方式を従来の履歴に基づいた方式と区別して、データ参照分岐予測方式と呼ぶ。
【０１６３】
データ参照分岐予測方式の利点は少なくとも２つある。今述べたように、予測においては、分岐命令が実際に使用するデータに基づいた予測処理が行なわれる。したがって過去の実行結果とは相関がない分岐命令に対しても有効な予測を行なうことができる。もう１つのポイントは、あくまで分岐予測であるため、分岐方向を予測するための条件判定に用いる比較は、分岐命令が参照するデータの完全な比較を行なう必要はなく、その一部でよいということである。つまり、図９に示される大小比較回路８０や一致比較回路８２などは、データのすべての比較を行なう必要はない。たとえばサイクルタイムを延ばさない範囲で比較できるビット数のみを比較すればよい。たとえば符号ビットと下位７ビットのみを比較することが考えられる。これにより、比較時間が短くなるだけではなく、分岐予測のためにデータを供給する専用レジスタファイルも８ビットで済み、その面積を小さく抑えることができる。
【０１６４】
マクファーリング（ＭｃＦａｒｌｉｎｇ  ）らによると、完全な比較が必要なのは全比較回数の８％程度であり、これに対して０と比較すればよい処理は５６％に上る。０との比較であれば、符号ビットと下位７ビットとを利用した比較のみで十分である。多くのビットを比較しなければ正確な予測が行なえない場合は少ないと考えられるため、データの一部のみを比較しても、かなり有効な予測が行なえることが期待できる。
【０１６５】
このように符号ビットと下位の複数ビットのみを使用して比較すれば、サイクルタイムを延ばすことなくかなり有効に予測を行なうことが期待できる。しかし、この方式では、上位ビットが予測結果に全く反映されないという問題点もある。上位ビットも何らかの形で比較に反映できれば、より有効な予測が行なえるだろうと考えられる。しかしこの場合にも、サイクルタイムを延ばさないようにする必要がある。
【０１６６】
そこで本実施例装置では、分岐予測機構が参照し比較に用いる値を、次のような方式で圧縮して比較に用いる。
【０１６７】
たとえば１０進数で２５６と１６とを計算機で比較する場合を考える。これら値は２進表示では「１００００００００」と「００００１００００」となる。仮に前述のように符号ビットとたとえば下位７ビットのみを比較すると、２５６は「００００００００」、１６は「０００１００００」となり、２５６＜１６となる。ただし符号ビット０が正を表わす。その結果比較結果が誤ることになり、正しい予測結果を得ることができない。
【０１６８】
そこで本実施例では、図１３に示されるように、レジスタファイル５２に書込まれるデータを圧縮するための圧縮部１５６を設け、併せてレジスタ５２の中に、本来のレジスタファイルである第１のレジスタファイル１５２と、圧縮されたデータを格納するための専用のレジスタファイルである第２のレジスタファイル１５４とを設け、圧縮部１５６により圧縮されたデータをレジスタファイル１５４に格納することにした。
【０１６９】
図１３を参照して、レジスタファイル１５２および１５４にはデコーダ１５０が接続され、併せて制御信号が与えられる。デコーダ１５０は、レジスタ番号が与えられると、レジスタファイル１５２および１５４の該当するレジスタ行をデータ線１５８に接続する。データ線１５８は、ｓｒｃ１用の３２本のデータ線と、ｓｒｃ２用の３２本のデータ線と、ｓｒｃ３用の３２本のデータ線とからなる。これらデータ線は分岐して圧縮部入力１６０となり、圧縮部１５６への入力となっている。圧縮部１５６からは圧縮部出力１６２が出ており、レジスタファイル１５４の入力に接続されている。レジスタファイル１５４からの出力は、データ線１５８の一部のデータ線に出力データ線１６４を介して接続されている。
【０１７０】
図１３に示されるレジスタファイルは次のように動作する。レジスタファイル１５２への書込は次のとおりである。デコーダ１５０にレジスタ番号が与えられる。制御信号により、レジスタファイルの各レジスタセルを、ｓｒｃ１、ｓｒｃ２、ｓｒｃ３のどのデータ線と接続するか、およびデータの入出力のいずれが選択されるかの情報がレジスタファイル１５２に与えられる。レジスタファイル１５２の、デコーダ１５０により選択されたレジスタセル行の各レジスタが、対応のデータ線に接続され、データの入出力が行なわれる。
【０１７１】
レジスタファイル１５４へのデータの書込は次のように行なわれる。データ線１５８上のｓｒｃ１、ｓｒｃ２、またはｓｒｃ３のためのデータ線に、書込のためのデータが出力される。圧縮部１５６はこのデータを圧縮し、レジスタファイル１５４に与える。レジスタファイル１５４の、デコーダ１５０によって選択されたレジスタセル行の各レジスタセルは、制御信号に従ってｓｒｃ１、ｓｒｃ２、またはｓｃｒ３のデータ線に接続され、データを格納する。
【０１７２】
データの読出では逆に、レジスタファイル１５４のあるレジスタ行をデコーダ１５０によって選択し、データ線１６４を介してデータ線１５８上に出力する。この場合レジスタファイル１５４に格納されているデータが圧縮済みのデータであるので、データ線１５８上に出力されるのも圧縮されたデータである。
【０１７３】
仮に、予測情報のためのデータを圧縮せずに一部のみをレジスタファイル１５４に格納するのであれば、圧縮部１５６は不要である。その場合はたとえばデータの符号ビットと下位７ビットとをレジスタファイル１５４に導き、レジスタファイル１５４の出力は同じくデータ線１５８の符号ビットと下位７ビットのデータ線に導けばよい。もちろん使用されるビットは符号ビットと下位７ビットとには限定されず、他のビットを用いてもよい。
【０１７４】
この実施例では、レジスタファイル１５４に格納する前にデータの圧縮を行なっている。これは、分岐予測機構の負荷を軽くし、また分岐予測のために必要なレジスタファイルの容量も減らすためである。もちろん、レジスタファイルには圧縮前のデータをすべて書込み、読出後に圧縮してもよい。その場合には専用のレジスタファイル１５４を設ける必要はなく、レジスタファイル１５２に書込めばよいが、分岐予測機構の負荷が重くなるという欠点がある。
【０１７５】
圧縮の方法としては、図１４に示されるような方法が考えられる。図４（ａ）に示される例では、最上位ビット（ビット３１）はそのまま使用し、ビット３０〜ビット８については、８ビットごとに論理和をとって１ビットとする。最下位のビット７〜０についてはそのまま使用する。これにより、符号の１ビット＋圧縮後の３ビット＋最下位８ビットの合計１２ビットにデータを圧縮できる。これにより２５６と１６との比較も、２５６＝「０００１００００００００」、１６＝「０００００００１００００」となり、２５６＞１６という正しい結果を得ることができる。
【０１７６】
このほかにも様々なビット数のまとめ方が存在する。図１４（ｂ）〜（ｄ）にその例を示す。いずれの場合も、符号ビット（ビット３１）と下位の複数ビットとはそのまま使用し、間のビットについて何ビットかの単位で論理和をとることにより比較結果に反映させる。
【０１７７】
このようにすることにより、比較するビット数をあまり増やさずに、かつ上位ビットの値もある程度比較結果に反映させることができるので、より高い分岐予測のヒット率を得ることができる。
【０１７８】
このようなデータ参照予測方式では、レジスタ番号などのハードウェアを指定する情報を分岐予測機構に供給し、分岐予測機構がその情報をもとに実行結果を読出して分岐予測を行なう。この場合予測に必要なハードウェア指定情報を命令によって供給することもできるが、そうした場合には情報を供給する命令の位置を分岐命令に対して固定しなければならない。すなわちスケジューリングに制限を与えてしまう。あるいは、命令に新たなフィールドを設ける必要がある。
【０１７９】
そこで本実施例では、分岐予測に使用する情報はレジスタファイルなどのハードウェアが保持し、参照すべきデータを保持するそのハードウェアを指定する情報（レジスタ番号など）をバッファが保持することとしている。この方式を間接方式と呼ぶ。これにより、命令の位置を固定したり、命令に新たなフィールドを設けることなく、分岐予測機構に対してハードウェアを指定する情報を供給することができる。
【０１８０】
こうした問題は履歴による分岐予測を行なう場合でもあり得る。すなわち、分岐先をレジスタ値により設定するレジスタ相対分岐命令の場合、分岐先が変化する。そのため分岐方向の予測が一致していたとしても、分岐予測がミスヒットになってしまう可能性がある。その場合でも、分岐先アドレスをあるハードウェアに格納しておき、そのハードウェアを指定する情報を分岐予測機構に供給することで、分岐先アドレスが変化しても正しい分岐先アドレスを得ることができる。すなわち、このようにハードウェアを指定する情報を分岐予測機構に与えるという考えは、データ参照予測方式のみに適用可能なだけではなく、履歴による分岐予測とも組合わせて使用することができる。
【０１８１】
［第２の実施例］
第１の実施例に示したデータ参照分岐予測方式は、分岐命令が実際に用いるデータを、分岐命令の前にフェッチされる命令と同じタイミングで得て、そのデータに基づいて分岐予測を行なうので、過去の実行履歴と相関のない分岐命令についても有効な予測を行なうことができる。しかし、予測に用いるデータが予測を行なう時点に間に合わないような条件分岐命令もあり得る。そうした場合にはデータ参照分岐予測方式では有効な予測を行なうこができない。
【０１８２】
そこでこの第２の実施例では、上述したような命令に対しては、データ参照予測情報の代わりに履歴情報を保持させ、さらに分岐予測機構に履歴による予測を行なうハードウェアを用意して、履歴による予測も行なえるようにしている。
【０１８３】
図１５は、この第２の実施例の分岐予測装置の概略のブロック図である。図１５を参照してこの装置は、予測情報バッファ１７０と、データ参照による分岐予測機構５８と、レジスタファイル５２と、履歴による分岐予測機構１７２と、マルチプレクサ１７４とを含む。データ参照による分岐予測機構５８およびレジスタファイル５２は、図１に示す第１の実施例の分岐予測機構およびレジスタファイル５８および５２と同様のものである。
【０１８４】
履歴による分岐予測機構１７２は、従来の技術で説明したディレイドスロット方式またはＢＴＢ方式による分岐予測機構である。ＢＴＢを予測情報バッファ１７０の中に設けてもよいし、別個に設けてもよい。
【０１８５】
予測情報バッファ１７０の各エントリの構成を図１６に示す。図１６を参照してエントリ１８０は、図１２に示した、第１の実施例の予測情報バッファエントリ１３０と同様であるが、予測方式ビット１８２を新たに含む。予測方式ビットは、予測方式を指定するビットである。図１５に示されるように、予測情報バッファ１７０はこの予測方式ビットをマルチプレクサ１７４に与えることにより、履歴による分岐予測機構１７２の出力する予測と、データ参照による分岐予測機構５８の出力する予測とのいずれか一方を選択する。
【０１８６】
予測情報バッファ１７０への登録は次のようにして行なわれる。分岐命令が実行されると、その予測を履歴によるまたはデータ参照による分岐予測機構のいずれで行なうかを決定し、決定結果に従って予測情報バッファの予測情報フィールドに情報の登録を行なう。データ参照予測方式が適用できない場合には予測情報フィールドの予測方式ビットを履歴予測にセットし、分岐の実行結果（履歴情報）を予測情報に登録し、更新する。データ参照予測方式が適用できる場合には、予測方式ビットをデータ参照予測方式にセットし、予測フェッチデータのレジスタ番号、分岐予測オペレーションその他を予測情報として登録、更新する。
【０１８７】
予測は、次のように行なわれる。命令フェッチの際のアドレスに基づいて予測情報バッファ１７０から予測情報が読出されると、履歴による分岐予測機構１７２およびデータ参照による分岐予測機構５８がそれぞれ予測を行ない、予測結果をマルチプレクサ１７４に与える。マルチプレクサ１７４は予測情報バッファ１７０から出力される予測方式ビットに従って、いずれかの予測結果を選択する。
【０１８８】
予測方式ビットと、予測情報バッファとの関係を示したものが図１７である。
このようにデータ参照予測方式で対応できない条件分岐に対して、履歴を用いた予測を行なうことによって、分岐予測のヒット率を上げることができる。
【０１８９】
［第３の実施例］
以上の実施例では、予測情報をバッファにより供給していた。そのため、情報を保持するための専用のハードウェアが必要となる。高い予測ヒット率を得るためには、バッファのヒット率を上げることが有効であるが、そのためにはバッファ内に多数のエントリを準備する必要が生ずる。そのために、予測情報バッファのハードウェア量は多くなる。こうしたハードウェアはできるだけ増加させない方が望ましい。この第３の実施例は、予測情報バッファを用いず予測情報を供給することにより、ハードウェアの増加を回避している点に特徴がある。そのためにこの第３の実施例では、命令中に、通常の命令のほかにその命令の次に実行する分岐命令の予測情報を格納するためのフィールドを設け、それに基づいて分岐予測を行なっている。
【０１９０】
図１８を参照して、この第３の実施例の分岐予測装置は、分岐予測機構５８と、レジスタファイル５２と、命令キャッシュ１８４と、命令パイプライン５０とを含む。分岐予測機構５８と、レジスタファイル５２と、命令パイプライン５０とは、第１の実施例における対応の参照符号を有する要素と同様のものである。命令キャッシュ１８４は、命令の中から通常の命令コードのみを命令パイプライン５０に与え、命令中の予測情報のフィールド内の情報を予測情報として分岐予測機構５８に与えるようになっている。
【０１９１】
図１９を参照して、命令１９０は、通常の命令フィールド１９２と予測情報のフィールド１９４とを含む。
【０１９２】
予測情報のフィールド１９４は、予測ビット１９６と、分岐情報１９８と、分岐先情報２００とからなる。
【０１９３】
予測ビット１９６は分岐予測を行なうどうかを示す。分岐情報１９８は前述したような予測オペレーションの内容、使用するレジスタのレジスタ番号などを示す。分岐先情報２００は分岐先アドレスを示す。あるいは分岐先情報２００は、ＰＣ相対分岐時のオフセットなどの即値を格納していてもよい。
【０１９４】
予測情報のフィールド１９４の内容は、プログラムのコンパイル時にコンパイラによって設定される。分岐命令の前の命令（これを「予測を行なう命令」と呼ぶ）に対しては、その予測ビット１９６をセットし、分岐の処理に従って分岐情報１９８および分岐先情報２００を設定する。予測を行なわない場合には予測ビット１９６をリセットする。
【０１９５】
分岐予測機構５８では、予測情報内の予測ビット１９６を参照して、セットされていれば分岐情報に従って予測を行なう。
【０１９６】
この例では、予測情報のフィールドはすべての命令に設けているものと想定している。しかし本発明はこれには限定されず、予測情報のフィールドを一部の命令に限定して設けてもよい。たとえば比較命令や加算命令の一部などである。その代わりにスケジューリングに制限を与え、分岐命令の前の予測を行なう位置には、それら予測情報のフィールドを設けた命令を配置するようにすることも考えられる。
【０１９７】
この第３の実施例によれば、分岐予測情報を供給するための余分なハードウェアを設ける必要がないという効果がある。また、予測情報バッファを設けた場合と異なり、予測情報は必ず命令から供給される。したがって、予測情報バッファを用いた実施例において、予測情報バッファのヒット率が１００％の場合と同じ的確性で分岐予測を行なうことができるという効果がある。
【０１９８】
［第４の実施例］
予測情報を予測情報バッファにより供給する方式は、情報を保持するための専用のハードウェアが必要となる。また第３の実施例のように命令内に予測情報のフィールドを設ける場合には、命令セット自体を変える必要がある。また命令のビット幅が多くなる可能性がある。こうしたことはできるだけ避ける方が望ましい。そこでこの第４の実施例では、フェッチアドレスで示される命令のフェッチと同時に次の命令をフェッチし、２番目の命令が分岐命令である場合には、フェッチした２つの命令から分岐予測情報を得て分岐予測を行なうこととしている。フェッチした１番目の命令は通常どおりパイプラインに投入される。
【０１９９】
図２０を参照してこの第４の実施例に係る分岐予測装置は、分岐予測機構２１２と、レジスタファイル５２と、命令パイプライン５０と、命令キャッシュ２１０とを含む。命令パイプライン５０およびレジスタファイル５２は、第１の実施例における命令パイプライン５０とレジスタファイル５２と同様のものである。
【０２００】
図２１を参照して、図２０の分岐予測機構２１２は、命令キャッシュ２１０から２つの命令を得て、２番目の命令が分岐命令である場合には、フェッチした２つの命令から分岐予測オペレーションと、定数と、分岐先情報となどを生成して出力するための分岐予測情報生成回路２２２と、分岐予測情報生成回路２２２の出力に基づき、必要であればレジスタファイル５２を参照するためのレジスタ番号を出力し、レジスタファイル５２からレジスタ値を得て、さらに命令パイプライン５０から予測ミス情報を得て分岐予測を行なうための分岐予測回路部２２０とを含む。
【０２０１】
この第４の実施例の分岐予測装置は次のように動作する。各サイクルでフェッチアドレスで示される命令とその次の命令との２つを命令キャッシュ２１０からフェッチする。最初の命令（命令ｉ）は命令パイプライン５０に投入して通常の処理を行なうとともに、分岐予測機構２１２にも与える。２番目の命令ｉ＋１は、命令パイプライン５０には投入せずに分岐予測機構２１２にだけ与える。
【０２０２】
分岐予測機構２１２の分岐予測情報生成回路２２２は、２番目の命令が分岐命令かどうかの判定を行なう。分岐命令であればその分岐の種類、分岐のオペランドと１番目の命令の種類、オペランドの情報などから分岐予測オペレーション、定数データ、分岐先情報などを生成して分岐予測回路部２２０に与える。分岐予測回路部２２０は、既に述べた分岐予測回路部と同様の方式で分岐予測を行なう。
【０２０３】
たとえば図２２に示されるような命令コードを実行する場合を考える。サイクルｎ−２では命令ｉ−２と命令ｉ−１とをフェッチして、命令ｉ−２を命令パイプラインに、命令ｉ−２と命令ｉ−１とを分岐予測機構に投入する。命令ｉ−１が分岐命令ではないので、このサイクルでは予測は行なわない。
【０２０４】
続いてサイクルｎ−１では命令ｉ−１と命令ｉとをフェッチする。命令ｉ−１は命令パイプラインに、命令ｉ−１と命令ｉとは分岐予測機構に投入される。分岐予測機構内の分岐予測情報生成回路２２２は、命令ｉが分岐命令であることを認識し、以下のような予測情報を生成する。なおこの予測情報は、図２２に示されるような命令およびオペランドに基づいて生成されるものである。
【０２０５】
予測フェッチデータとしてはｓｒｃ１＝＄ｂ、ｓｒｃ２としては＄ｃが選ばれる。分岐予測オペレーションは「大小比較結果を出力」となる。分岐予測回路部２２０はこの予測情報に基づいて予測を行なう。
【０２０６】
この第４の実施例では、予測情報を通常のコードから実行時に生成する。予測情報を保持するための予測情報バッファなど特別のハードウェアを用意する必要がなく、命令コードも従来のものが使用できるという効果がある。
【０２０７】
［第５の実施例］
第４の実施例では、分岐予測情報を２つの命令から実行時に生成する。しかし、こうした情報は命令のコンパイル時に既に得られるものである。したがって、分岐予測情報を保持する命令を新たに用意して、コンパイル時にその命令を命令コード中の適切な位置に配置することが考えられる。この第５の実施例はそのような方式を用いて分岐予測情報を命令から得て分岐予測を行なう。
【０２０８】
図２３を参照して、分岐予測命令２３０を新たに設け、オペコード２３２と、分岐情報２３４と、分岐先情報２３６とを含ませる。オペコード２３２は分岐予測命令を示すコードである。分岐情報２３４は予測オペレーションやレジスタ番号などを示す。分岐先情報２３６は分岐先アドレスなどである。
【０２０９】
コンパイラは、分岐の処理に従ってこの分岐予測命令の予測情報を設定し、予測を行なう位置に分岐予測命令をスケジューリングする。
【０２１０】
実行時に命令キャッシュから読出された命令は、命令パイプラインと分岐予測機構とに同時に投入される。分岐予測機構では、分岐予測命令を認識すると、その分岐情報に従って予測を行なう。
【０２１１】
この場合、第４の実施例の図２１に示される分岐予測情報生成回路２２２に代えて、１つの命令から分岐情報および分岐先情報を抽出して分岐予測回路部２２０に与える回路を設ければよい。
【０２１２】
この実施例では、命令セット中の従来の命令については変更する必要がなく、新たな命令を追加するだけでよい。命令のビット幅が多くなることもない。また、分岐予測情報を供給する余分なハードウェアを用意する必要もないという効果がある。
【０２１３】
なお、以上の実施例では分岐予測は命令パイプライン５０とは独立した命令予測機構の中で行なわれていた。しかし分岐予測機構の中での演算は、命令パイプライン５０を利用しても使用できる。そこでたとえば、複数個の演算処理装置によって並列に演算処理を行なう命令パイプラインであれば、そのうちの使用されていない演算処理装置を利用して分岐予測処理を行なうこともできる。この場合、分岐命令の前にフェッチする命令と、その命令のアドレスで予測情報バッファから得られた予測情報とを同時に命令パイプラインに投入してそれぞれ別個の演算処理装置で演算処理させればよい。
【０２１４】
［第６の実施例］
予測情報バッファへの登録は分岐命令の実行によりなされる。したがってすべての分岐は、最初にそれらが実行されるときには予測を行なうことはできない。また、予測情報バッファのエントリ数が十分用意されていない場合には、登録されていた分岐の情報が別の分岐の実行によりエントリ置換され、再度分岐が実行されるときに情報が登録されていない事態が生ずる可能性がある。その場合には予測が行なえない。また、分岐命令によっては、予測のために参照するデータが間に合わず、データ参照予測方式では対応できない場合もあると考えられる。
【０２１５】
この第６の実施例の分岐予測装置では、そうした問題を解決するために、データ参照分岐予測を静的分岐予測と組合わせて用いる。従来、データ参照による分岐予測機構を用いた分岐予測装置は存在しておらず、したがって、このように静的分岐予測機構とデータ参照による分岐予測方式とを組合わせて用いるものについても文献には記載がない。
【０２１６】
図２４を参照して、この第６の実施例の分岐予測装置は、予測情報バッファ２４０と、静的分岐予測機構２４２と、データ参照による分岐予測機構５８と、レジスタファイル５２と、マルチプレクサ１７４とを含む。データ参照による分岐予測機構５８およびレジスタファイル５２は、第１の実施例で述べた分岐予測機構５８およびレジスタファイル５２と同様である。
【０２１７】
静的分岐予測機構２４２は、たとえば前述の第３〜第５の実施例で説明した予測方式のいずれかを用いればよい。マルチプレクサ１７４は、以下に述べるように命令中に準備される予測方式ビットに応答して、静的分岐予測機構２４２またはデータ参照による分岐予測機構５８による予測を選択する。
【０２１８】
図２５を参照して、この第６の実施例で用いられる命令２５０は、命令フィールド２５２と予測情報フィールド１９４とを有する。予測情報フィールド１９４には、静的予測を行なう場合の予測情報が、予めコンパイラにより設定されている。
【０２１９】
命令フィールド２５２は、通常の命令フィールド２５４と、予測方式選択ビット２５６と、静的予測ビット２５８とを含む。
【０２２０】
予測方式選択ビット２５６は、静的予測とデータ参照予測とのどちらを行なうかを選択するための情報である。静的予測ビット２５０は、静的分岐予測を行なうときの情報である。なお、静的予測時の予測分岐先を求めるための分岐先情報は、上述の第３の実施例〜第５の実施例のいずれの方式を用いてもよい。
【０２２１】
コンパイラが分岐すると予測した分岐命令に対しては、その分岐命令に対するバッファが参照されるタイミングと同時にフェッチされる命令の静的予測ビットに、静的分岐予測を行なうときの情報を設定する。さらに、静的予測をデータ参照予測よりも優先して行なう場合には、その予測方式選択ビットをセットする。
【０２２２】
この第６の実施例の装置は次のように動作する。
（１）フェッチした命令の予測方式参照ビットがセットされている場合、静的予測ビットに基づいて予測を行なう。
【０２２３】
（２）  予測方式ビットがリセットされている場合には、バッファに予測情報が登録されているか否かに従って次のような動作を行なう。
【０２２４】
（ｉ）  バッファに予測情報が登録されている場合、データ参照予測方式を用いて分岐予測を行なう。
【０２２５】
（ｉｉ）  バッファに予測情報が登録されていない場合、静的予測ビットを参照して、それに基づいて分岐予測を行なう。
【０２２６】
この第６の実施例の静的分岐予測において、第３の実施例のような予測方式を用いた場合、図１９に示される予測情報のフィールド１９４内の、分岐方向を予測するために使用する分岐情報１９８（予測オペレーション、レジスタ番号）を、命令からではなく、予測情報バッファを用いたデータ参照方式より得ることができる。したがって、図１９の分岐情報１９８を省略できる。
【０２２７】
しかしこのためには、これらの情報を分岐命令の実行後に予測情報バッファに登録しておく必要がある。この登録は分岐命令の実行ごとに次のような処理により行なわれる。
【０２２８】
（１）  予測方式参照ビットがセットされている場合、予測情報バッファへの登録は行なわない。
【０２２９】
（２）  予測方式参照ビットがリセットされている場合、予測情報を予測情報バッファに登録する。
【０２３０】
この実施例では、すべての分岐につき、最初に実行されるときも含めて予測を行なうことができる。また、バッファのエントリ数が十分用意されておらず、登録していた分岐の情報がバッファから失われている場合にも、静的予測によりある程度有効な予測ができる。また、データ参照予測方式では対応できないような分岐命令に対する分岐予測もある程度有効に行なえる。その結果、分岐予測のヒット率を向上させることが期待できる。
【０２３１】
［第７の実施例］
ＰＣ（プログラムカウンタ）相対の分岐命令とは、分岐先をＰＣ＋即値で計算する分岐命令である。通常の分岐先アドレスは、３２ビットアーキテクチャでは３０ビット程度である。しかし即値では十数ビットであり、したがってこの即値を使用して分岐予測を行なうことができれば、予測情報バッファの各エントリを小さくすることができ、そのハードウェア量を減らすことができると考えられる。この第７の実施例はそのような分岐先の予測を行なうためのものである。なお、分岐予測は、分岐方向の予測と、分岐先の予測との２つに分けることができ、それぞれの項目は独立している。既に述べたように分岐方向の予測には、履歴方式とデータ参照方式とがある。そのいずれともこの第７の実施例に示される分岐先の予測方式を組合わせて使用することが可能であることに注意されたい。
【０２３２】
図２６を参照して、この分岐予測装置は、予測情報バッファ２８０と、分岐方向予測機構２７８と、ラッチ回路２８０と、マルチプレクサ２８６と、プログラムカウンタ（ＰＣ）２８８と、インクリメンタ２９０と、予測分岐先計算器２８２と、マルチプレクサ２８４とを含む。
【０２３３】
予測情報バッファは複数の予測情報エントリ２７２を含む。各エントリ２７２は、分岐方向予測情報２７４と分岐予測情報（即値からなる）２７６とを含む。
【０２３４】
マルチプレクサ２８６には、再フェッチアドレスとマルチプレクサ２８４の出力である予測フェッチアドレスとが与えられる。マルチプレクサ２８６は、分岐予測ヒット判定情報に応答して再フェッチアドレスと予測フェッチアドレスとのいずれか一方を選択してＰＣ２８８に設定する。
【０２３５】
インクリメンタ２９０は、ＰＣ２８８の値に通常の命令のビット幅を加算することによりフォールスルーアドレスを計算してマルチプレクサ２８４に与える。
【０２３６】
分岐方向予測機構２７８は、前述のように履歴によるものでも、データ参照によるものでもどちらでもよいが、分岐方向予測情報２７４に従って分岐方向の予測を行なう。予測方向はマルチプレクサ２８４の制御入力に与えられる。
【０２３７】
予測分岐先計算機２８２は、一旦ラッチ回路２８０にラッチされた分岐予測情報２７６の即値とＰＣ２８８の内容とを加算して予測分岐先アドレスを生成し、マルチプレクサ２８４の他方の入力に与える。
【０２３８】
マルチプレクサ２８４は、与えられた予測方向に従って、分岐する場合には予測分岐先アドレスを、分岐しない場合にはフォールスルーアドレスをそれぞれ選択して予測フェッチアドレスとして出力する。この出力は再びマルチプレクサ２８６に与えられる。
【０２３９】
分岐予測情報の即値は、分岐先をＰＣ＋即値で計算するＰＣ相対の分岐命令が実行された場合に、登録される。
【０２４０】
バッファの登録と予測分岐先アドレスの計算方法であるが、予測情報バッファ２７０を読出すタイミングにより次のような場合に分けられる。
【０２４１】
（１）  バッファ読出と予測分岐先計算が１サイクルで行なえる場合（図２７）
この場合、分岐命令と同じタイミングでフェッチされるアドレスを用いてバッファに分岐予測情報の即値を登録する。予測時には、バッファの読出を行なったアドレスは、分岐命令のアドレスと一致している。したがって、バッファ読出後、読出された即値をオフセットとして、ＰＣ＋オフセットで予測分岐先を求め次の命令をフェッチする。この状態が図２７のサイクル２の矢印で示されている。
【０２４２】
（２）  バッファ読出と予測分岐先計算を別のサイクルで行なう必要がある場合（図２８）
バッファの読出および予測分岐先生成の加算に時間がかかり、１サイクルで終えることができない場合もある。この場合、予測分岐先アドレスを生成する時間を考慮して、分岐命令よりも１サイクル前にバッファの読出を行なう必要がある。このバッファの読出を図２８のサイクル▲１▼に示す。このとき一緒にフェッチされる命令は分岐命令の１つ前（ＰＣ−１）のアドレスである。
【０２４３】
すなわちバッファを読出したアドレスは、分岐命令の前の命令のアドレスである。そしてバッファ読出がサイクル▲２▼の半ばで終了し、このとき分岐命令のフェッチが行なわれる。したがって、サイクル▲２▼の後半で、分岐命令のアドレス（ＰＣ）を得て、これに対してバッファから読出された即値を加算して予測分岐先を計算する。この予測分岐先アドレスに従って、サイクル▲３▼の半ばで予測分岐先の命令をフェッチする。
【０２４４】
上述の場合、プログラムカウンタが変化することを考慮して、分岐計算のタイミングを定めている。しかし別の方法として、予測情報バッファへの即値の登録時に、分岐命令のアドレスとの差を予め即値に加えておいて登録を行なう方法も考えられる。
【０２４５】
なお、データ参照予測を行なう場合にも、予測情報バッファは分岐命令がフェッチされるよりも早いサイクルで読出される。したがって、データ参照予測を行なう場合には、こうした読出タイミングのずれを考慮して予測分岐先の計算を行なう必要がある。
【０２４６】
この第７の実施例では、予測情報バッファが保持する分岐先情報が、プログラムカウンタ相対の分岐先計算に使用される即値となる。即値は十数ビットのビット幅であり、通常の３２ビットアーキテクチャの分岐先アドレスの３０ビット程度と比較してかなり小さくなる。したがって、予測情報バッファの各エントリを小さくすることができ、予測情報バッファ全体のハードウェア量を減らすことができる。あるいは、予測情報バッファのハードウェア量を減らさない場合には、分岐予測のヒット率を高めることが期待できる。
【０２４７】
［第８の実施例］
第７の実施例に述べたＰＣ相対分岐命令に加え、レジスタから読出したデータを予測分岐先とすることができれば、前に述べた間接方式と同様により便利である。この第８の実施例はＰＣ＋即値またはレジスタから読出したデータによって予測分岐先を求めることができる。
【０２４８】
図２９に、予測情報バッファのエントリ３００の構成を示す。図２９を参照して、各エントリ３００は、分岐方向予測情報３０２と、分岐オペレーションビット３０４と、即値またはハードウェア指定値（レジスタ番号など）３０６とを含む。分岐方向予測情報３０２は、既に述べたとおり分岐方向を予測するための予測オペレーション、レジスタ番号などである。分岐オペレーションビット（１ビット）は、予測分岐先アドレスを計算する際の計算方法を特定するための情報である。この実施例の場合にはＰＣ相対とレジスタ参照との２つの方式であるので、このビットは１ビットでよい。即値またはハードウェア指定値３０６は、ＰＣ相対の分岐命令の場合には即値であり、レジスタ参照の分岐命令の場合には、分岐先アドレスを格納したレジスタ番号である。もちろん分岐先アドレスを格納したハードウェアとしてはレジスタファイル内のレジスタに限らず、ＡＬＵ内のレジスタなどであってもよい。
【０２４９】
図３０を参照して、この実施例の分岐予測装置は、予測分岐先計算器３１４とマルチプレクサ３１６とを含む。予測分岐先計算器３１４は、プログラムカウンタ３１０の内容と、即値／ハードウェア指定値３０６の内容とを加算してマルチプレクサ３１６に与える。即値／ハードウェア指定値３０６がハードウェア指定値（レジスタ番号）の場合には、レジスタファイルまたはＡＬＵ３１２から、対応するレジスタのレジスタ値がマルチプレクサ３１６の他方の入力に与えられる。マルチプレクサ３１６は、分岐オペレーションビット３０４に応答して予測分岐先計算器３１４の出力またはレジスタファイルもしくはＡＬＵ３１２のレジスタからの出力のいずれか一方を選択して予測分岐先アドレスとして出力する。
【０２５０】
予測情報バッファへの登録は、分岐命令の実行によって行なわれる。分岐命令がＰＣ相対である場合、分岐先情報として即値を登録し、分岐先オペレーションビットをセットする。分岐命令がレジスタ参照によるものである場合には、分岐先情報としてはレジスタ番号を登録し、分岐先オペレーションビットをリセットする。
【０２５１】
予測時には、バッファを読出し、図３０に示されるように分岐先オペレーションビットがセットされていればＰＣ＋即値により、リセットされていればハードウェア指定値３０６により指定されるレジスタから読出したアドレスを予測分岐先アドレスとする。
【０２５２】
この第８の実施例によれば、ＰＣ＋即値によるＰＣ相対の分岐命令だけでなく、レジスタ参照による分岐命令に対しても、分岐先アドレスの予測を行なうことができるという効果がある。
【０２５３】
［第９の実施例］
以上述べた実施例のうち、分岐先情報として変位を保持する方式における予測情報のバッファ（ＢＴＢ）のエントリの登録は次のように行なわれている。図３１を参照して、たとえば命令キャッシュのアドレスｔ−１に命令ｔ−１が、アドレスｔに分岐命令ｂが、それぞれ格納されているものとする。分岐命令ｂの分岐予測に必要な情報は、分岐予測に必要な情報が１サイクルで済むのであれば、分岐命令ｂのアドレスの１つ前、すなわちアドレスｔ−１に格納されている。つまり、ＢＴＢのアドレスｔ−１に分岐命令ｂの分岐予測情報が格納されている。
【０２５４】
このようにして分岐予測情報がＢＴＢに登録されているので、分岐予測を次のように行なうことができる。命令キャッシュから命令ｔ−１がフェッチされるときに、そのアドレスｔ−１によってＢＴＢをアドレス指定することにより分岐命令ｂの情報が読出される。そして分岐命令ｂの次の命令のフェッチまでに分岐命令ｂの分岐予測を行なう。
【０２５５】
もちろん図３１に示されるのは、分岐予測に必要な処理が１サイクルで済む場合である。分岐予測に必要な処理が２サイクルかかるのであれば、分岐命令ｂ（アドレスｔ）の分岐予測情報はＢＴＢのアドレスｔ−２となる。ところが、このように分岐命令のための分岐予測情報が、その分岐命令のアドレスよりも所定数前のＢＴＢアドレスに静的に登録されている場合、次のような問題が生ずる。
【０２５６】
図３２を参照して、アドレスｎに分岐命令ａが存在する場合を考える。この分岐命令ａの実行の結果制御が分岐命令ｂに移行するものとする。この場合、分岐命令ｂの１サイクル前にフェッチされる命令は、命令ｔ−１ではなく分岐命令ａである。したがって分岐命令ｂの１サイクル前に命令がフェッチされるときのＢＴＢアドレスはｎとなる。ＢＴＢのアドレスｎに格納されているのは、上述の方法に従えば、命令キャッシュのアドレスｎ＋１に格納された命令ｎ＋１のための分岐予測情報である。この分岐予測情報に従って分岐命令ｂの分岐予測を行なったとしても、正しい予測結果を得ることはできない。このように、ある分岐命令の分岐先にさらに他の分岐命令がある場合、上述の方法では、２番目の分岐に対する予測情報を得ることができず、その結果正しい分岐予測が行なえないという問題点が生ずる。
【０２５７】
第９の実施例は、このような問題点を解消するためのものである。
図３３を参照して、この第９の実施例の分岐予測装置は、命令パイプライン５０と、レジスタファイル５２と、予測情報バッファ５６と、分岐予測機構５８と、命令キャッシュ６０とに加え、分岐予測機構から出力される命令フェッチのアドレスを、一時的に、かつ３サイクル分だけ順次記憶して先入れ先出し方式に従って出力するＦＩＦＯメモリからなるＢＴＢ登録アドレス用レジスタ３４０と、命令フェッチアドレスと、ＢＴＢ登録アドレス用レジスタ３４０との２つが与えられ、命令パイプライン５０から与えられる書込／読出制御信号（ＢＴＢ読出／書込）が予測情報バッファ５６の更新要求を示す値になったことに応答して、ＢＴＢ登録アドレス用レジスタ３４０の出力を予測情報バッファ５６に与え、そうでない場合には現在の命令フェッチのアドレスを予測情報バッファ５６に与えるためのセレクタ３４２とを含む。
【０２５８】
命令パイプライン５０、レジスタファイル５２、予測情報バッファ５６、分岐予測機構５８および命令キャッシュ６０は、図１に示す第１の実施例の分岐予測装置に示すものと同様である。したがってここでは、それらについての詳細は繰返さない。図３３に示す各ブロックが図１に示すブロックと異なるのは、命令パイプライン５０から出力される予測情報が直接予測情報バッファ５６に与えられることである。またセレクタ３４２に与えられる読出／書込制御信号は、命令パイプライン５０から予測情報バッファ５６に与えられるものと同様である。
【０２５９】
ＢＴＢ登録アドレス用レジスタ３４０の段数は、分岐予測に必要な処理によって異なってくる。たとえば本実施例の場合には、アドレスｉにおける分岐命令のフェッチ開始から２サイクルの終りに、その分岐先と予測のヒットまたはミスが判明する。したがってＢＴＢ登録アドレス用レジスタ３４０は３段である。
【０２６０】
図３３に示される分岐予測装置は、次のように動作する。通常の分岐予測ではセレクタ３４２はフェッチアドレスを選択して予測情報バッファ５６に与える。予測情報バッファ５６は、与えられたアドレスから予測情報を分岐予測機構５８に対して出力する。
【０２６１】
分岐予測がはずれた場合、セレクタ３４２はＢＴＢ登録アドレス用レジスタ３４０の出力を選択して予測情報バッファ５６に与える。予測情報バッファ５６は、命令パイプライン５０から与えられる予測情報を、セレクタ３４２から与えられるアドレスに格納する。ＢＴＢ登録アドレス用レジスタ３４０は、分岐予測が行なわれ、かつその分岐予測のヒットまたはミスが判明した分岐命令のアドレスの１つ前にフェッチされた命令のアドレスを出力している。したがって予測情報バッファ５６に格納される予測情報のアドレスは、分岐命令の１つ前にフェッチされたアドレスである。すなわち、予測情報バッファ５６に格納される予測情報のアドレスは、当該分岐命令の静的に１つ前のアドレスではなく、１つ前に実行された命令のアドレスという意味で動的に１つ前のアドレスとなる。
【０２６２】
図３４を参照してこの場合、次のような効果が生ずる。アドレスｎの分岐命令ａがフェッチされると同時に、ＢＴＢのアドレスｎの予測情報もフェッチされる。フェッチされるＢＴＢの内容が、当初は分岐命令ｂの予測情報とは無関係な情報であるとする。
【０２６３】
この場合分岐命令ａの実行の結果制御が分岐命令ｂに移行したものとする。分岐命令ｂの実行の結果、その分岐先がわかる。一方でＢＴＢから読出された予測情報による予測結果のヒットまたはミスも判明する。今述べたような状況では分岐命令ｂの分岐予測はミスとなる。したがってこの場合、ＢＴＢのアドレスｎに分岐命令ｂのための予測情報が書込まれることになる。
【０２６４】
次に分岐命令ａがフェッチされた場合、ＢＴＢから同時にフェッチされる情報は、分岐命令ｂのための予測情報である。分岐命令ａの実行の結果制御が分岐命令ｂに分岐した場合、ＢＴＢから読出された予測情報により予測された分岐先がヒットする確率は、分岐命令ｂの静的に１つ前のアドレスから分岐命令ｂの予測情報を読出した場合と同様に高くなる。その結果、分岐命令ａの分岐先にさらに分岐命令ｂが存在した場合でも、以後の分岐命令ｂの分岐予測がヒットする可能性は高くなる。またミスヒットが生ずる度に、分岐命令の動的に１つ前にフェッチされた命令のアドレスにその分岐命令の予測情報が書込まれるので、一旦ミスが生じた後は、当該分岐命令の分岐予測がヒットする確率は上述の実施例に比べて高くなる。特に、動的に１つ前にフェッチされる命令アドレスに従ってＢＴＢ登録を行なうため、ある分岐命令の分岐方向に偏りがあり、同じ命令コードが繰返しフェッチされる場合、その分岐先に存在する分岐命令に対しても正しい予測情報を得ることができる。
【０２６５】
以上この発明を実施例に基づいて説明したが、本発明はこれらの実施例に限定されるわけではなく、特許請求の範囲で規定される範囲内で、種々の変形を行なって実施することが可能である。特に、以上の実施例では１度に１つの命令を実行できるコンピュータにおける分岐予測処理について説明した。しかし本発明はそのようなコンピュータのみに限定される訳ではなく、１度に複数の命令をフェッチできるいわゆるスーパースカラコンピュータでの分岐予測処理にも適用できることは、当業者には自明である。
【０２６６】
【発明の効果】
以上のように請求項１に記載の発明によれば、分岐命令の分岐予測に関連する予測情報を、ある分岐命令より前にフェッチされる命令のフェッチと同じタイミングで供給し、その予測情報に従って分岐予測が行なわれる。予測のための時間に余裕があるので、必要であれば演算結果を格納する手段から分岐予測に必要な情報、たとえば実際に分岐命令が分岐を行なう際に参照する情報を読出し、または分岐のためのコンディションを設定する命令がその計算に使用する情報を読出して分岐予測に用いることができる。その結果、過去の実行結果と相関がない分岐命令に対しても有効な分岐予測を行なうことができる分岐予測装置を提供することができる。
また、予測情報供給手段は、命令から予測情報を取出すことができるので、予測情報を格納しておくためのハードウェアを準備する必要がない。また分岐予測をより的確にするために、格納しておく予測情報の量を増加させる必要もない。その結果、過大なハードウェアを追加することなく、過去の実行結果と相関がない分岐命令に対しても有効な分岐予測を行なうことができる分岐予測装置を提供することができる。
【０２７９】
請求項２に記載の発明では、請求項１に記載の発明の効果に加え、予測情報を格納しておくためのハードウェアを準備する必要がない。また、分岐予測に必要な情報が、必要なときには常に命令から間違いなく供給されるため、分岐予測が的確なものになる。その結果、過大なハードウェアを追加することなく、既存の資源を有効に利用して、過去の実行結果と相関がない分岐命令に対しても有効な分岐予測を行なうことができる分岐予測装置を提供することができる。
【０２８０】
請求項３に記載の発明では、請求項１に記載の発明の効果に加え、命令中に、分岐予測のための特別なフィールドを設けたり、新たな命令を設けたり、命令情報を増加したりすることが不要で、命令体系を変更することなく、的確な分岐予測を行なえる。その結果、過大なハードウェアを追加することなく、かつ既存の命令セットを変更することなく、過去の実行結果と相関がない分岐命令に対しても有効な分岐予測を行なうことができる分岐予測装置を提供することができる。
【０２８１】
請求項４に記載の発明では、請求項１に記載の発明の効果に加え、既存の命令を変更することなく、新たな命令を追加することのみで、余分なハードウェアを追加することもなく的確な分岐予測が行なえる。その結果、過大なハードウェアを追加することなく、かつ既存の命令セットを生かして、過去の実行結果と相関がない分岐命令に対しても有効な分岐予測を行なうことができる分岐予測装置を提供することができる。
【０２８２】
請求項５に記載の発明によれば、分岐命令の分岐予測に関連する予測情報を、ある分岐命令より前にフェッチされる命令のフェッチと同じタイミングで供給し、その予測情報に従って分岐予測が行なわれる。予測のための時間に余裕があるので、必要であれば演算結果を格納する手段から分岐予測に必要な情報、たとえば実際に分岐命令が分岐を行なう際に参照する情報を読出し、または分岐のためのコンディションを設定する命令がその計算に使用する情報を読出して分岐予測に用いることができる。その結果、過去の実行結果と相関がない分岐命令に対しても有効な分岐予測を行なうことができる分岐予測装置を提供することができる。
また、分岐命令の種類により、より適した予測方式を使用して分岐予測を行なえるので、分岐予測がより的確になる。その結果、過大なハードウェアを追加することなく、分岐命令の最初の実行時も含めて、過去の実行結果と相関がない分岐命令に対しても有効な分岐予測を行なうことができる分岐予測装置を提供することができる。
【図面の簡単な説明】
【図１】本発明の第１の実施例に係る分岐予測装置およびその周辺の回路のブロック図である。
【図２】第１の実施例のメモリ実行ステージを模式的に示す図である。
【図３】第１の実施例におけるパイプライン処理を模式的に示す図である。
【図４】第１の実施例の分岐予測機構のブロック図である。
【図５】第１の実施例における命令コードの一例を模式的に示す図である。
【図６】第１の実施例における命令コードを模式的に示す図である。
【図７】第１の実施例における命令コードを模式的に示す図である。
【図８】第１の実施例における命令コードを模式的に示す図である。
【図９】第１の実施例の分岐予測回路のブロック図である。
【図１０】第１の実施例の大小比較回路のブロック図である。
【図１１】第１の実施例の分岐先生成回路のブロック図である。
【図１２】第１の実施例の予測情報バッファ５６の構成を示す模式図である。
【図１３】第１の実施例のレジスタファイルのブロック図である。
【図１４】第１の実施例のレジスタファイルに格納されるデータの圧縮の態様を示す模式図である。
【図１５】本発明の第２の実施例の分岐予測装置のブロック図である。
【図１６】第２の実施例の予測情報バッファのエントリを模式的に示す図である。
【図１７】第２の実施例における予測方式ビットと予測情報との関係を模式的に示す図である。
【図１８】本発明の第３の実施例の分岐予測装置および周辺回路のブロック図である。
【図１９】本発明の第３の実施例における命令の構成を模式的に示す図である。
【図２０】本発明の第４の実施例の分岐予測機構および周辺回路のブロック図である。
【図２１】本発明の第４の実施例の分岐予測機構のブロック図である。
【図２２】第４の実施例における命令コードの一例を示す模式図である。
【図２３】本発明の第５の実施例の命令の構成を模式的に示す図である。
【図２４】本発明の第６の実施例の分岐予測装置のブロック図である。
【図２５】第６の実施例の命令の構成を模式的に示す図である。
【図２６】本発明の第７の実施例の分岐予測装置のブロック図である。
【図２７】第７の実施例におけるパイプライン処理を模式的に示す図である。
【図２８】第７の実施例における他のパイプライン処理を模式的に示す図である。
【図２９】本発明の第８の実施例の予測情報バッファのエントリを模式的に示す図である。
【図３０】第８の実施例の分岐予測装置の模式的ブロック図である。
【図３１】分岐命令の静的に１つ前のアドレスに分岐予測情報を格納した場合の、命令キャッシュおよびＢＴＢの内容を示す模式図である。
【図３２】図３１において、分岐命令の分岐先に分岐命令がある場合の分岐予測情報のフェッチアドレスを示すための模式図である。
【図３３】本発明の第９の実施例の分岐予測装置のブロック図である。
【図３４】第９の実施例におけるＢＴＢバッファの予測情報の登録の概要を模式的に示す図である。
【図３５】従来のＢＴＢ方式を用いた分岐予測装置およびその周辺回路のブロック図である。
【図３６】ＢＴＢ方式による分岐予測の流れを模式的に示す図である。
【図３７】図３５に示す装置の分岐予測機構のブロック図である。
【図３８】従来技術において、コンディションコードを先行して計算する方式の処理の流れを模式的に示す図である。
【符号の説明】
５０は命令パイプライン、５２はレジスタファイル、５４は予測情報生成機構、５６、１７０、２４０、２７０は予測情報バッファ、５８、２１２は分岐予測機構、６０、１８４、２１０は命令キャッシュ、７２は分岐予測回路、７４は分岐先生成回路、７６はフェッチアドレス生成回路、８０は大小比較回路、８２は一致比較回路、１５０はデコーダ、１５６は圧縮部、１７２は履歴による分岐予測機構、２４２は静的分岐予測機構、２７８は分岐方向予測機構、２８２は予測分岐先計算機、２８８、３１０はプログラムカウンタ、３１４は予測分岐先計算機。
【図１】
0003599409.tif 000004
【図２】
0003599409.tif 000005
【図３】
0003599409.tif 000006
【図４】
0003599409.tif 000007
【図５】
0003599409.tif 000008
【図６】
0003599409.tif 000009
【図７】
0003599409.tif 000010
【図８】
0003599409.tif 000011
【図９】
0003599409.tif 000012
【図１０】
0003599409.tif 000013
【図１１】
0003599409.tif 000014
【図１２】
0003599409.tif 000015
【図１３】
0003599409.tif 000016
【図１４】
0003599409.tif 000017
【図１５】
0003599409.tif 000018
【図１６】
0003599409.tif 000019
【図１７】
0003599409.tif 000020
【図１８】
0003599409.tif 000021
【図１９】
0003599409.tif 000022
【図２０】
0003599409.tif 000023
【図２１】
0003599409.tif 000024
【図２２】
0003599409.tif 000025
【図２３】
0003599409.tif 000026
【図２４】
0003599409.tif 000027
【図２５】
0003599409.tif 000028
【図２６】
0003599409.tif 000029
【図２７】
0003599409.tif 000030
【図２８】
0003599409.tif 000031
【図２９】
0003599409.tif 000032
【図３０】
0003599409.tif 000033
【図３１】
0003599409.tif 000034
【図３２】
0003599409.tif 000035
【図３３】
0003599409.tif 000036
【図３４】
0003599409.tif 000037
【図３５】
0003599409.tif 000038
【図３６】
0003599409.tif 000039
【図３７】
0003599409.tif 000040
【図３８】
0003599409.tif 000041