(57)【特許請求の範囲】
【請求項１】
複数の命令を含み少なくとも一個の命令バンチは少なくとも一個の条件付き分岐命令を含み、各条件付き分岐命令は第１および第２の状態から選択しうる実際に行使された状態を有する、複数の命令バンチの内の一個の命令バンチの条件付き分岐履歴を維持するために、それぞれが第１の値と第２の値を有する複数のビットを備える履歴レジスタを更新するための方法であって：
前記第１の状態の実際に行使された状態を有する前記命令バンチ中に条件付き分岐命令の少なくとも一個の存在を決定し；
前記第１の状態の実際に行使された状態を有する前記命令バンチ中に条件付き分岐命令の少なくとも一個が存在することに応答して、前記第１の値を前記履歴レジスタ中にシフトインし；
前記第１の状態の実際に行使された状態を有する前記命令バンチ中に条件付き分岐命令の少なくとも一個が存在しないことに応答して、前記第２の値を前記履歴レジスタ中にシフトインし、さらに、
前記履歴レジスタの内容に基づいて前記命令バンチ中の全ての条件付き分岐命令に対して分岐予測を行う、各ステップを含む、履歴レジスタを更新するための方法。
【請求項２】
前記バンチ中の少なくとも一個の命令に対して、
条件付き分岐命令が実際に行使されたか否かを決定し；
実際に行使された条件付き分岐命令に応答して、第１の状態の実際に行使された状態を選択し；さらに
実際に行使されなかった条件付き分岐命令に応答して、第２の状態の前記分岐の実際に行使された状態を選択する；
各ステップを含む、第１項に記載の方法。
【請求項３】
複数の命令を含む複数の命令バンチの内の一個の条件付き分岐の履歴を維持するために第１の値と第２の値を有する複数のビットを備える履歴レジスタを更新する方法であって、前記複数の命令バンチの少なくとも一個の命令バンチは、それぞれが第１の状態と第２の状態から選択しうる実際に行使された状態を有する複数の条件付き分岐命令を含むものにおいて、前記方法は：
前記命令バンチ中の条件付き分岐命令の存在を決定し；さらに
前記命令バンチ中の条件付き分岐命令の存在に応答して：
第１の状態の実際に行使された状態を有する前記命令バンチ中に一個の条件付き分岐命令の存在を決定し；
第１の状態の実際に行使された状態を有する前記命令バンチ中に少なくとも一個の条件付き分岐命令が存在することに応答して、前記第１の値を前記履歴レジスタ中にシフトインし；
第１の状態の実際に行使された状態を有する前記命令バンチ中に少なくとも一個の条件付き分岐命令が存在しないことに応答して、前記第２の値を前記履歴レジスタ中にシフトインし；さらに
前記履歴レジスタの内容に基づいて前記命令バンチ中の全ての条件付き分岐命令に対して分岐予測を行う、各ステップを含む履歴レジスタを更新するための方法。
【請求項４】
前記バンチ中の少なくとも一個の命令に対して、条件付き分岐命令が実際に行使されたか否かを決定し；
実際に行使された前記条件付き分岐命令に応答して、第１の状態の前記実際に行使された状態を選択し；さらに
実際に行使されなかった前記条件付き分岐命令に応答して、第２の状態の前記分岐の実際に行使された状態を選択する、各ステップをさらに含む、第３項に記載の方法。
【請求項５】
少なくとも一個の条件基準を有する複数の条件付き分岐命令のバンチ中の少なくとも一個の条件付き分岐命令と、複数の命令バンチ中の非条件付き分岐命令との方向を予測するための、命令バンチに対して一個の履歴レジスタを使用する装置であって、各命令バンチは固有の識別子を有し、前記装置は予測された方向を指示するための出力を有するものにおいて、
出力を有し、前記命令バンチに対する固有識別子の少なくとも一部分を記憶するための、フェッチプログラムカウンタラッチと；
前記フェッチプログラムカウンタラッチに接続された第１の入力と一個の出力とを有する連結器であって、前記履歴レジスタはシフトレジスタを含みかつ前記シフトレジスタの最も最近にシフトインされたビットと前記シフトレジスタの少なくとも一個の追加ビットとを含む１個の出力を有し、前記連結器はさらに前記履歴レジスタの出力に結合された第２の入力を含む連結器と；
データ入力と、前記連結器出力に接続されたアドレス入力と、当該装置の出力に接続されたデータ出力を備え、少なくとも一個のアドレス可能な記憶位置に少なくとも一個の予測インジケータを含む、アドレス可能な記憶器と；
少なくとも一個のレジスタユニットであって、該レジスタユニットは、一個の出力と前記命令バンチ中の少なくとも一個の命令を受け取るように接続された一個の入力を有し、さらに実行ユニットと少なくとも一個の結果比較器を有し、前記結果比較器は前記実行ユニットに結合され、かつ前記レジスタユニット出力に接続された出力を有し、さらに条件付き分岐命令に先行する前記命令に応答しかつ前記条件付き分岐命令の少なくとも一個の分岐基準を有する第１の状態と、条件付き分岐命令に先行しない前記命令に応答しまたは前記命令に続く条件付き分岐命令の少なくとも一個の分岐基準を有さない第２の状態とから状態選択が可能である、少なくとも一個のレジスタユニットと；
前記一個の履歴レジスタに結合され前記一個の履歴レジスタに状態値を提供するための結果比較器ラッチであって、さらに少なくとも一個のレジスタユニット出力に接続された少なくとも一個の入力と、第１の状態にある少なくとも一個の前記結果比較器ラッチ入力に応答する第１の状態と、第１の状態にある前記結果比較器ラッチ入力の何れにも応答しない第２の状態とから状態選択が可能である出力とを有する、結果比較ラッチと；および
一個の更新ユニットであって、前記結果比較器ラッチ出力に接続された第１の入力と、少なくとも一個のアドレス可能な記憶器のデータ出力に接続された第２の入力と、前記アドレス可能な記憶器のデータ入力に接続され前記第１の入力と前記第２の入力に応答する複数の選択可能な状態を有する一個の出力とを有する、一個の更新ユニット；
を備える、命令バンチに対して一個の履歴レジスタを使用する装置。
【請求項６】
前記連結器出力は、複数のフェッチプログラムカウンタラッチビットと、最も最近にシフトインされた履歴レジスタ出力ビットと、前記履歴レジスタ出力の少なくとも一個の追加ビットとを備える、第５項に記載の装置。
【請求項７】
前記フェッチプログラムカウンタラッチのビット数は８個であり、前記連結器出力は、前記履歴レジスタ出力の３個の追加ビットを含む、第６項に記載の装置。
【請求項８】
前記連結器出力は、前記第２の連結器入力と排他的論理和処理された第１の連結器入力を備える、第５項に記載の装置。
【請求項９】
前記バンチ中の各命令は記憶アドレスを有し、各命令バンチの前記固有識別子は前記バンチ中の少なくとも一個の命令の記憶アドレスを備える、第５項に記載の装置。
【請求項１０】
前記命令バンチのための前記固有識別子に対応する前記命令は非条件付き分岐命令である、第９項に記載の装置。
【請求項１１】
前記更新ユニットの出力は第１の状態、第２の状態、第３の状態および第４の状態から状態選択が可能であり；さらに
前記更新ユニットの第２の入力に接続された前記アドレス可能な記憶器出力は、第１の状態、第２の状態、第３の状態および第４の状態を有するものである、第５項に記載の装置。
【請求項１２】
第１の状態の前記結果比較器ラッチに応答して前記更新ユニットは、該更新ユニットの出力を：
第１の状態または第２の状態の前記更新ユニットに応答する第１の状態と；
前記更新ユニットの第３の状態に応答する第２の状態と；および
前記更新ユニットの第４の状態に応答する第３の状態；に選択し、
第２の状態の前記結果比較器ラッチに応答して前記更新ユニットは、該更新ユニットの出力を：
前記更新ユニットの第１の状態に応答する第２の状態と；
前記更新ユニットの第２の状態に応答する第３の状態と；
前記更新ユニットの第３の状態または第４の状態に応答する第４の状態；
に選択する、第11項に記載の装置。
【請求項１３】
前記結果比較器ラッチの第２の状態に対応して、前記更新ユニットは、該更新ユニットの出力を：
前記更新ユニットの第１の状態または第２の状態に応答する第１の状態と；
前記更新ユニットの第３の状態に応答する第２の状態と；
前記更新ユニットの第４の状態に応答する第３の状態；に選択し、さらに
前記結果比較ラッチの第１の状態に応答して、前記更新ユニットは、該更新ユニットの出力を：
前記更新ユニットの第１の状態に応答する第２の状態と；
前記更新ユニットの第２の状態に応答する第３の状態と；および
前記更新ユニットの第３の状態または第４の状態に応答する第４の状態；
に選択する、第11項に記載の装置。
【請求項１４】
命令バンチ中の複数の分岐命令の方向を示す分岐予測ビットセットを分岐履歴テーブル中に配置するための方法であって、前記各命令は少なくとも一個の固有識別子を有するものにおいて、前記方法は、
前記分岐履歴テーブルをアクセスする為にフェッチアドレスと履歴レジスタ中のビットからなるアドレスを組み立てるステップであって、前記アドレスは前記フェッチアドレスの対応する下位ビットの複製である下位ビットと前記履歴レジスタ中のビットによってハッシュされた上位ビットを有し；
前記フェッチアドレスを用いて前記命令バンチをアクセスし、
構成されたアドレスを使用して前記分岐履歴テーブルから分岐予測ビットセットにアクセスするステップであって、前記分岐予測ビットセットは前記命令バンチ中の前記複数の分岐命令に対応し；
前記アクセスした命令バンチを処理し、さらに
前記アクセスした命令バンチ中の第１の分岐命令グループを次の命令バンチ中の第２の分岐命令グループと相互に関係させるために、前記アクセスした分岐予測ビットセットと前記処理した命令バンチとに基づいて前記履歴レジスタおよび前記分岐履歴テーブルを更新する、各ステップを含む方法。
【請求項１５】
前記アクセスされた命令バンチ中の各命令は少なくとも１バイトを有し、かつ前記アクセスされた命令バンチの各命令に対応する前記記憶アドレスは前記各命令の１バイトの記憶アドレスである、第14項に記載の方法。
【請求項１６】
前記アクセスした命令バンチ中の各分岐命令と前記分岐予測ビットセット間の相関関係は、１対１の関係を有するものである、第14項に記載の方法。
【請求項１７】
さらに、前記分岐予測ビットセットの少なくとも一個の予測ビットを使用してアクセスした命令バンチの一個の分岐命令に対する予測を行うステップを含む、第14項に記載の方法。
【請求項１８】
行使されおよび行使されないグループの少なくとも一個である前記アクセスした命令バンチ中の複数の分岐命令を予測するために、前記アクセスした命令バンチ中の前記分岐命令に対応する少なくとも一個の予測ビットを使用する、第17項に記載の方法。
【発明の詳細な説明】
技術分野
本発明は、マイクロプロセッサに関し、さらに特定するとスーパースカラマイクロプロセッサにおける分岐予測に関する。
背景技術
スーパースカラまたは、多重パイプラインアーキテクチャを使用しない従来のマイクロプロセッサは、直列の命令ストリームから命令を受け取り、これらの命令を、ジャンプまたは分岐を許可する論理的順序で順次処理する。条件付き分岐命令に遭遇した場合、マイクロプロセッサは、このマイクロプロセッサによって既に実行された命令によってセットされた特定のフラグをテストし、直列命令ストリーム中のこの条件付き分岐命令に続く命令の実行を続けるか、または条件付き分岐命令によって記載される位置に記憶された命令の実行を続けるかの何れかを実行する。
スーパースカラマイクロプロセッサは直列命令ストリームを受け入れる事が可能であり、非スーパースカラマイクロプロセッサと同じ結果を形成する。しかしながら、スーパースカラマイクロプロセッサは多数の命令を同時に内部処理し、そのため、命令の最初の作り手によって意図された順序、即ちそられの論理的順序とは異なった順序で命令が処理される事態を生じる場合もある。
図１を参照すると、通常のスーパースカラマイクロプロセッサ102とメモリ104が示されている。フェッチ回路106はメモリ104に命令して、フェッチプログラムカウンタ108中に含まれるメモリアドレスから始まる命令のブロック110、112を、一度に一ブロック、メモリ領域114に転送させ、実行ユニット116、118、120によって同時に処理させる。図１に示すブロック110、112およびメモリ領域114のサイズは４ワードであり、図１に示す実行ユニット116、118、120の数は３であるが、通常のスーパースカラマイクロプロセッサは、どのようなサイズのブロック110、112と記憶領域114をも持つことが可能で、かつ実行ユニット116、118、120の数もどの様なものであっても良い。
通常の非スーパースカラマイクロプロセッサによって形成される結果と同一の結果を、スーパースカラマイクロプロセッサによって形成するために、スーパースカラマイクロプロセッサはある問題を生じる。スーパースカラマイクロプロセッサの設計によって生じる一つの問題は、条件付き分岐命令の処理において発生する。スーパースカラマイクロプロセッサにおいてフラグをセットする命令は、分岐命令がスーパースカラマイクロプロセッサによって実行される用意が出来た時点では処理されていない場合があるため、条件付き命令に論理的に先行する全ての命令の実行を待つことなく、非スーパースカラマイクロプロセッサが条件付き分岐命令の実行の後でどの命令を実行するべきかを、確実に決めることは不可能である。このような先行する全ての命令の実行を待つことは、望ましくない遅延を生じる。
このような遅延を防ぐための一つの方法として、論理的に先行する命令の実行を待つことなく条件付き分岐命令の結果を予測し、その予測が正確であるかのようにして命令の処理を続行する試みがなされている。条件付き分岐に論理的に先行する命令の実行が全て完了した時、その予測が正確であったかどうかがテストされる。もし分岐予測が正確であった場合は、処理は続行され、望ましくない遅延は防止される。分岐予測が正確でない場合、処理は停止し、そして条件付き分岐の後に実行されるべきであった命令から処理を再開する。この場合の遅延は、処理が条件付き分岐命令に論理的に先行する命令の実行を待つために延期された場合よりも短い。
どの分岐方向を行使すべきかを予測するために、既に種々の方法が存在する。一つの方法は、常に、分岐命令中に示された分岐を行使すると予測することである。このような予測は多くの場合その回数の50％以上が正しい。これは、多くのプログラムが、行使された分岐命令中に記載された分岐を結果として生じるループ命令を、そうでない場合よりもより頻繁に含んでいるためである。例えば、PASCAL命令：
0003602542.tif 000002
は、分岐命令中に記載された分岐をその回数の99％において行使する。勿論、if..then、while..do、repeat..until、のような他の命令は、予測において同じような正確性を与えないが、しかしその構成は実行するには比較的単純で、スーパースカラマイクロプロセッサ102の価値ある領域を節約する。
条件付き分岐命令中に記載された命令が条件付き分岐命令に続いて実行される場合、この動作は、「分岐を行使する（taking the branch）」として記載され、この結果その分岐または分岐の「方向」が「行使される」。条件付き分岐命令の条件が満たされない（not true）ために分岐命令に物理的に続く命令が実行された場合、この動作は「分岐を行使しない（not taking the branch）」と記載され、分岐または分岐の「方向」は「行使されない」として記載される。
分岐予測の正確度を向上するための一つの考えは、「バイモデル」分岐予測として知られており、２ビット飽和カウンタを分岐を行使すべきかどうかを示す予測カウンタとして使用すことを含んでいる。２ビット飽和カウンタは、分岐を群を成して行使すべきである言う仮定を利用しており、そのため分岐または分岐グループのどちらを行使すべきかは、すぐ前の一個の分岐または複数の分岐のどちらが行使されたかを参照して予測される。さて、図2Aおよび2Bを参照すると、２ビット飽和カウンタの状態テーブルが示されている。状態210は分岐を行使すべきではないとの強い指示を示している。状態212は分岐を行使すべきではないとの弱い指示を示している。状態214は分岐を行使すべきであるとの弱い指示を示している。状態216は分岐を行使すべきであるとの強い指示を示している。予測の状態は、全ての状態210、212、214、216によって開始される。現在の予測状態の最上位ビットが状態214および216のように「１」の値を有する場合、分岐を行使すると予測し、現在の予測状態の最上位ビットが状態210、212のように「０」の値を有する場合、分岐は行使されない。分岐に論理的に先行する命令が実行された後で予測がテストされる場合、予測の状態はテーブル218に従って変更される。コラム220は、現在の状態を示し、コラム222は新しい状態を示し、さらにコラム224は実際の分岐動作、即ち分岐が実際に行使されたことを意味する行使、または分岐が実際には行使されなかったことを示す不行使、を示す。強い指示から、分岐予測を変化させるためには、その指示とは反対の２個の実際の分岐が必要である。２ビット以上のカウンタを含む他の構造のカウンタを使用して、予測の変更を要する強い指示に反対する実際の分岐の数を変更することも可能である。
図2Aの状態は、示されたものとは反対の値、即ちそれぞれの状態210、212、214、216に対して、強い行使、弱い行使、弱い非行使および強い非行使を持つことができる。この場合、値「１」を有する最上位ビットは、その分岐が非行使として予測されるべきであることを示し、「０」はその分岐が行使されるものと予想されるべきであること示している。図2Bのテーブル218は、コラム224の実際の動作とは反対の動作を伴なって、上述したように使用される。
バイモデル分岐予測の正確度は、行使された実際の分岐動作の履歴を記録する履歴レジスタを用いることによってより向上する。履歴レジスタの使用は、条件付き分岐が繰り返しパターンに基づいて行使されることを仮定している。例えば、次のPASCALプログラムにおいて、
0003602542.tif 000003
内部分岐は２回行使されるが、その分岐を行使する外部分岐に続く第３の、外部分岐に基づいて98回繰り返されるであろう行動は、行使されない。内部および外部分岐の両者の、直前の４個の分岐動作に関する知識によって、次の分岐動作をバイモデル分岐予測よりもより高度な正確度で予測することが可能である。シフトレジスタを履歴レジスタとして用いて、遭遇した各分岐に対してビットを単一の方向（右または左）に一ポジションシフトすることによって分岐動作の追跡を維持する。即ち、実際に行使された各分岐に対して、「１」をシフトインし、実際に行使されなかった各分岐に対して「０」をシフトインする。例えば、左シフトレジスタは、外部分岐が行使された後1101を読みだし、下位２番目の位置における０によって内部ループの最終に達したことを示す。次の分岐は其れが内部ループの次の繰返の最初の分岐であるため、行使と予想されるべきである。
履歴レジスタを、履歴テーブルとバイモデル分岐予測の２ビット飽和カウンタと共に使用して、予測を完成する。さて図３を参照すると、上述したように履歴レジスタ308の内容が、履歴テーブル312へのインデックスとして使用される。履歴レジスタ308と同じインデックスを有するポインタ316は、２ビット飽和カウンタ318、320、322、324、326をポイントする。これらのカウンタは、図2Aを参照して既に述べたように状態テーブルを有し、これは上述したように分岐予測を決定するために使用される。履歴レジスタ308全体が、テーブル312へのインデックスとして使用され、あるいは履歴レジスタ308において最も最近シフトインされたビットとこれに隣接するある個数のビットが、テーブル312へのインデックスとして使用される。
他の方法は、条件付き分岐命令のアドレスの全てのアドレスまたは幾つかの低位ビットが、履歴レジスタ308の代わりにテーブル312へのインデックスとして使用される点を除けば、上述した履歴テーブル方法と類似している。
さらに他の方法は、通常の条件付き分岐命令のアドレスの低位ビットと幾つかまたは全ての分岐履歴を例えば連結または排他的論理和結合し、履歴レジスタ308のみの代わりにテーブル312へのインデックスを形成する。
再び図１を参照すると、もし条件付き分岐命令のアドレスがインデックスを形成するために使用されると、そのアドレスはフェッチプログラムカウンタレジスタ108とメモリ114中の条件付き分岐命令の位置から計算される必要があり、マイクロプロセッサ102により一層の複雑性と計算遅延をもたらす。もしその履歴がインデックスを形成するために使用されると、このインデックスは、実行された各条件付き分岐命令に対して更新される必要があり、その結果マイクロプロセッサ102の設計にさらなる複雑性をもたらす。
発明の要約
本方法および装置は、メモリブロックから検索された命令バンチ（bunch、グループ）中の各条件付き分岐命令を行使するか否かを、２ビット飽和カウンタアレイへのポインタテーブルを使用して予測する。命令バンチ中の各条件付き分岐命令に対して、テーブルへのインデックスは、履歴レジスタに添付されあるいは結合されたブロック中の同じ一個のバイトのアドレスの最下位ビットから得られる。この履歴レジスタは、そのバンチ中の何れかの分岐が実際に行使された場合「１」にそれ以外は「０」にシフトインすることによって、その命令バンチを一回更新する。インデックスは各条件付き分岐命令の正確なメモリ位置の計算を必要としないので、インデックスを決定するために必要な時間と複雑性は減少する。履歴テーブルは、バンチ中の各条件付き分岐命令に対して一回ではなく、バンチに対して一回のみ更新されるので、複雑性はさらに減少する。
【図面の簡単な説明】
図１は、従来の、スーパースカラマイクロプロセッサとメモリの概略ブロック図である。
図2Aは、従来の２ビット飽和カウンタの状態図である。
図2Bは、図2Aに示す従来の２ビット飽和カウンタの動作を説明する状態テーブルである。
図３は、テーブルを用いた従来の分岐予測の概略ブロック図である。
図4Aは、本発明の一実施例にかかる条件付き分岐の予測方法を説明するフローチャートである。
図4Bは、本発明の一実施例にかかる予測インジケータの更新方法を説明するためのフローチャートである。
図4Cは、本発明の一実施例にかかる履歴レジスタの更新方法を説明するためのフローチャートである。
図５は、本発明の一実施例にかかるスーパースカラマイクロプロセッサにおける条件付き分岐予測回路の概略ブロック図である。
実施例
図4Aに、本発明に基づいた、数個のメモリのバンチにおける条件付き分岐命令の予測方法を説明するフローチャートを示す。バンチ中の一個の命令に対する記憶アドレスの一部または全てが同一であると確認される（410）。一実施例において、このアドレスは、命令バンチの内の第１命令の第１バイトのメモリアドレスである。その他の実施例では、バンチ中の第１または他の命令の他のバイトのアドレス、またはそのバンチに特有の識別子を使用する。
幾つかあるいは全ての履歴レジスタが以下に示すように使用されるために、検索される（412）。履歴レジスタは、記憶アドレスの検索（410）後、それ以前または実質的に同時に、検索される（412）。この履歴レジスタは、例えば全て０のように、如何なる値にも初期化することが可能で、図4Bに示すように更新される。
予測テーブルアドレスは、履歴レジスタとバンチ中の一個の命令の記憶アドレスを使用して計算される（414）。一実施例では、テーブルアドレスは、履歴レジスタ全体を最上位または最下位のテーブルアドレスビット位置に配置しかつバンチ中の一個の命令の記憶アドレスのある数の下位ビットを残りのテーブルアドレスビット位置に配置する事によって形成された、連結体である。その他の実施例では、テーブルアドレスは、最上位または最下位のテーブルアドレスビット位置におけるある数の履歴レジスタビットと、残りのテーブルアドレスビット位置におけるバンチ中の一個の命令の記憶アドレスのある数の下位ビットとの連結体である。一実施例では、履歴レジスタは、この履歴レジスタの最下位ビット位置へ一ビットシフトインすることによって更新され、この履歴レジスタの下位４ビットはテーブルアドレスビット位置の上位４ビットに配置され、さらに命令バンチ中の第１の命令のアドレスの下位８ビットはテーブルアドレスの残りの下位８ビット中に配置されて、12ビットテーブルアドレスを形成する。
上述の一実施例では、連結されるべきバンチ中の命令の一バイトのアドレスのビットは、アドレスの最下位ビットであり、連結すべき履歴レジスタのビットは最も最近にシフトインされた履歴レジスタビットとこれに隣接する履歴レジスタビットである。
他の実施例では、履歴レジスタは、テーブルアドレスを計算するために、バンチ中の命令の１バイトのアドレス無しに、使用される。その他の実施例では、バンチ中のメモリの１バイトのアドレスが、履歴レジスタを用いずにテーブルアドレスを計算するために、使用される。
テーブルアドレスは、同様に、履歴レジスタとバンチ中の命令の一個のバイトのアドレスとを用いて、連結以外の方法によって計算される。その他の実施例では、履歴レジスタの数個あるいは全てのビットとバンチ中の命令の一個のバイトの数個または全てのアドレスビットとの、排他的論理和を取ることによって、履歴テーブルを形成する。一実施例では、排他的論理和を取るべきバンチ中の命令の一個のバイトのアドレスビットは、アドレスの最下位ビットであり、排他的論理和を取るべき履歴レジスタのビットは、最も最近にシフトインされた履歴レジスタビットとこれに隣接する履歴レジスタビットである。
テーブルアドレスはその後、予測インジケータの一部あるいは全てを検索する（416）ために使用される。一実施例では、この予測インジケータは、予測インジケータのテーブル中におけるテーブルアドレスに配置される。その他の実施例では、ポインタを介してテーブルアドレスに配置される。予測は、検索された予測インジケータに基づいて成される。一実施例では、各予測インジケータは、図2Aに示す状態テーブルを有する上述した２ビット飽和カウンタのような２ビットカウンタとして動作し、テーブルアドレスに対応する２ビット飽和カウンタの最上位ビットが例えば「１」（214、216）である一個の値を有する場合、条件付き分岐を行使すると予測し、テーブルアドレスに対応する２ビット飽和カウンタの最上位ビットが反対の値、例えば「０」（210、212）を有する場合、行使しないと予測する。この方法を用いて引き出された単一の予測は、一回実施され、バンチ中の全ての条件付き分岐に対して使用される。
任意に、例えば上記図2Bを用いて示した方法を用いて、バンチ中の何れかの分岐が実際に行使されたかどうかに基づき、予測インジケータを更新することができる。図4Bおよび2Bを参照すると、バンチ中の何れかの分岐が実際に行使された場合、予測インジケータの状態は、テーブル213の下部228を用いて更新される。バンチ中の何れの分岐も実際に行使されない場合、予測インジケータはテーブル218の上部上部226を用いて更新される。
一実施例では、バンチ中の分岐命令に対する全ての予測が実施された後、履歴レジスタは命令の各バンチに対して一回更新される。一実施例では、履歴レジスタは図4Cに示すように更新される。もし、バンチ中の何れかの分岐が実際に行使される（430）と、例えば「１」が、履歴レジスタ中にシフトインされ（432）、バンチ中の分岐が実際に行使されない場合、反対の値、例えば「０」が履歴レジスタ中にシフトインされる（434）。シフトの方向が多くのバンチ中で一致している限り、ビットは履歴レジスタ中にいずれの方向からシフトインされても良い。
一実施例では、履歴レジスタは、バンチ中に条件付き分岐命令が存在する場合（436）にのみ、更新される。この実施例は、ある一定の大きさの履歴レジスタが、上述したように条件付き分岐命令を含まないバンチに対しても更新される履歴レジスタよりも、より長い履歴を追跡することを可能とする。
図５を参照すると、本発明に基づいて条件付き分岐命令を予測するために使用される装置の一実施例が示されている。フェッチプログラムカウンタ508は、メモリのような記憶装置に記憶された命令バンチの第１命令の記憶アドレスを保持する。このメモリは、図５には示されていないが、しかし図１のメモリ104と類似の物である。検索器504は、アドレスバス506を介してこのような記憶装置をアドレスし、メモリ510へのデータバス509を介してこのような記憶装置からある数の命令バイトを検索する。実行ユニットローダ502は、メモリ510中に記憶された命令を実行ユニット512中にロードする。ネクスト命令デコーダ516は、メモリ510中に記憶されかつ実行ユニット512中にロードされた命令に続く命令が条件付き分岐命令である場合、タグ記憶装置518中にタグを添付する。タグ記憶装置518中に記憶されたタグは多くのビットから構成され、各ビットは、各実行ユニット512中の命令に続くメモリ510中に記憶された条件付き分岐命令が、この分岐を行使するために合致すべき条件あるいは複数の条件に対応している。一個またはそれ以上の実行ユニット512はそれぞれ、実行ユニット512によって形成された結果に基づいてフラグレジスタ514中に条件フラグビットをセットする、フラグレジスタ514を含んでいる。フラグレジスタ514中の各ビットは、「結果＝０」、「結果＞０」または「結果＜０」のような条件に対応する。結果比較器520はフラグレジスタ514中のフラグビットをタグ記憶器518中に記憶されたタグビットと比較する。もし、タグ記憶器518中のタグビットの全てがフラグレジスタ514中の対応するセットフラグビットと一致する場合、結果比較器520は履歴ラッチ521にトルー（真実）を出力し、分岐を行使するためのバンチ中の一個の条件付き分岐に対する条件が実際に発生したことを示す。履歴ラッチ521は、バンチ中の条件付き分岐命令に先行する全ての命令が、実行ユニット512によって行使されてしまった後、履歴レジスタ522中にシフトインされる。
FPCラッチ511は、フェッチプログラムカウンタ508内に含まれる全てまたは一部のビットの値を保存するために、フェッチプログラムカウンタ508に接続される。履歴レジスタ522は、上述した組み合わせまたは方法で上述したように２ビット飽和カウンタを含むアドレステーブルRAM526に達する連結器524を介してFPCラッチ511に連結される。一実施例では、連結器524は履歴レジスタ522のビットとFPCラッチ511中に含まれるバンチアドレスを連結する。その他の実施例では、連結器524は上述したようにビットに対して排他的論理和を実行する。テーブルRAM526の２ビット飽和カウンタの最上位ビットは出力ライン528上に分岐実行ユニット532に向かって出力され、分岐実行ユニット532に対して上述したようにメモリ510中にロードされるバンチ中の何れかの分岐を行使するか否かを指示する。
更新ユニット530は履歴ラッチ521とテーブルRAM出力529に結合され、連結器524によってアドレスされる２ビット飽和カウンタ中に記憶された両ビットを受け取る。更新ユニット530は、図2Bに示された値を用いて、テーブルRAM526中の２ビット飽和カウンタを更新する。更新ユニット530は、FPCラッチ511中に記憶されたビットに対応するフェッチプログラムカウンタ508によってロードされた命令に対応するメモリ510中に記憶された全ての非分岐命令の後で、テーブルRAMを更新する。この事は、更新ユニット530が、命令がメモリ510中にロードされる毎に一回連結器524によって、テーブルRAMアドレス出力に対応するテーブルRAM526の単一のアドレスを更新することを意味している。メモリ510をロードするための他の構造が可能である。例えば２重バッファ構造では、ポインタはメモリ510に対応するように使用され、一個のポインタは、メモリ510中の命令をロードすべき次の位置を指摘し、他のポインタは、命令をそこから実行ユニット512に転送すべき、メモリ510中の次の位置を指摘する。このような構造において、更新ユニット530は、テーブルRAM526中の２ビットカウンタを、ある時点でメモリ510中に在った全ての命令が実行される度に一回、連結器524の出力のアドレスに対応して、更新する。
【図１】
0003602542.tif 000004
【図２Ａ】
0003602542.tif 000005
【図２Ｂ】
0003602542.tif 000006
【図３】
0003602542.tif 000007
【図４Ａ】
0003602542.tif 000008
【図４Ｂ】
0003602542.tif 000009
【図４Ｃ】
0003602542.tif 000010
【図５】
0003602542.tif 000011