(57)【特許請求の範囲】
【請求項１】
プロセッサにおける分岐予測方法であって、
分岐命令の予測される分岐宛先を記憶するステップと、
第１の分岐命令を実行する第１のインスタンスに応答して、記憶された宛先が予測誤りであったか否かを判断するステップと、
予測された分岐宛先が、分岐命令を実行する前記第１のインスタンスにおいて予測誤りであったか否かに関わらず、前記記憶された宛先を保持するステップと、
第２の分岐命令を実行する第２のインスタンスに応答して、記憶された宛先が予測誤りであったか否かを判断するステップと、
分岐命令を実行する前記第１及び第２の両方のインスタンスにおいて、前記記憶された宛先が連続して予測誤りであったことに応答して、前記記憶された宛先を実際に分岐された宛先に変更するステップと
を含む、方法。
【請求項２】
前記プロセッサが、
実行ユニットを含んだ、前記プロセッサ上で処理を行う複数のユニットと、
リネーム・マッピング構造を使用した解読ユニットと、
を備えたスーパスカラ・プロセッサである請求項１の分岐予測方法。
【請求項３】
前記予測された分岐宛先を、前記分岐命令に関連付けられるキャッシュ内の複数のエントリの１つに記憶するステップを含む、請求項２記載の方法。
【請求項４】
前記キャッシュの前記複数のエントリの各々を、連続する予測誤りを判断するために使用される複数の確認ビットの異なる１つに関連付けるステップを含む、請求項３記載の方法。
【請求項５】
前記分岐命令を実行する前に、前記分岐命令に関連付けられる前記複数のエントリの前記１つを読出すステップを含む、請求項４記載の方法。
【請求項６】
前記記憶された宛先が予測誤りであることに応答して、前記複数の確認ビットの前記１つが１にセットされているか否かを判断するステップと、
前記複数の確認ビットの前記１つが１にセットされていることに応答して、前記複数の確認ビットの前記１つをゼロにリセットするステップと
を含む、請求項５記載の方法。
【請求項７】
前記複数の確認ビットの前記１つがゼロにセットされていることに応答して、実際の宛先を前記キャッシュの前記複数のエントリの前記１つに記憶することにより、前記複数のエントリの前記１つを更新するステップと、
前記確認ビットの前記１つを１にセットするステップと
を含む、請求項６記載の方法。
【請求項８】
前記記憶された宛先が正しい予測であることに応答して、前記複数の確認ビットの前記１つがゼロにセットされているか否かを判断するステップと、
前記複数の確認ビットの前記１つがゼロにセットされていることに応答して、前記確認ビットの前記１つを１にセットするステップと
を含む、請求項７記載の方法。
【請求項９】
プロセッサにおける分岐予測方法であって、
少なくとも第１及び第２の分岐命令を含む分岐命令セットをエイリアシングするステップと、
前記分岐命令セットの１つに対する分岐宛先を予測し、予測された分岐宛先を前記分岐命令セットの１つの予測として記憶するステップと、
前記分岐命令セットから命令を実行するインスタンスに応答して、記憶された宛先がそれぞれのインスタンスにおいて予測誤りであったか否かを判断するステップと、
前記分岐命令セットからの命令に関して、予測誤りが連続することに応答して、前記記憶された宛先を実際に分岐された宛先に変更するステップと、
前記分岐命令セットからの命令の１つを実行する前記第１のインスタンスにおいて、前記記憶された宛先を実際に分岐された宛先に変更しないステップと、
を含む、分岐予測方法。
【請求項１０】
前記記憶された宛先を実際に分岐された宛先に変更しないステップが、前記分岐命令セットから命令を実行する連続するインスタンスの間に、他の分岐命令に加えてエイリアス・セットの命令が介在することを問わない、請求項９記載の方法。
【請求項１１】
前記記憶された宛先を実際に分岐された宛先に変更しないステップが、前記第１のインスタンスの後、特定のインスタンスに応答するステップを含み、前記記憶された宛先を実際に分岐された宛先に変更するステップが、前記分岐命令セットからの命令に関して、予測誤りが少なくとも２度の連続シーケンスであることに応答して変更するステップを含む、請求項１０記載の方法。
【請求項１２】
前記予測された分岐宛先を、前記分岐命令に関連付けられるキャッシュ内の複数のエントリの１つに記憶するステップを含む、請求項１１記載の方法。
【請求項１３】
前記キャッシュの前記複数のエントリの各々を、連続する予測誤りを判断するために使用される複数の確認ビットの異なる１つに関連付けるステップを含む、請求項１２記載の方法。
【請求項１４】
前記分岐命令セットからの命令の１つを実行する前に、当該命令に関連付けられる前記複数のエントリの１つを読出すステップを含む、請求項１３記載の方法。
【請求項１５】
前記記憶された宛先が予測誤りであることに応答して、前記複数の確認ビットの前記１つが１にセットされているか否かを判断するステップと、
前記複数の確認ビットの前記１つが１にセットされていることに応答して、前記確認ビットの前記１つをゼロにリセットするステップと
を含む、請求項１４記載の方法。
【請求項１６】
前記複数の確認ビットの前記１つがゼロにセットされていることに応答して、実際の宛先を前記キャッシュの前記複数のエントリの前記１つに記憶することにより、前記複数のエントリの前記１つを更新するステップと、
前記確認ビットの前記１つを１にセットするステップと
を含む、請求項１５記載の方法。
【請求項１７】
前記記憶された宛先が正しい予測であることに応答して、前記複数の確認ビットの前記１つがゼロにセットされているか否かを判断するステップと、
前記複数の確認ビットの前記１つがゼロにセットされていることに応答して、前記確認ビットの前記１つを１にセットするステップと
を含む、請求項１６記載の方法。
【請求項１８】
プロセッサに含まれるキャッシュを用いて、複数の分岐命令の１つの宛先の予測の精度を向上させる前記プロセッサにおける方法であって、前記キャッシュが複数のエントリを含み、前記複数の分岐命令の各々が、前記キャッシュの前記複数のエントリの１つに関連付けられるものにおいて、
前記複数の分岐命令の１つの予測される分岐宛先を、当該分岐命令に関連付けられる前記キャッシュの前記複数のエントリの１つに記憶するステップと、
前記キャッシュの前記複数のエントリの前記１つを用いて行われる、前記複数の分岐命令の前記１つの宛先の２度の連続する予測誤りに応答して、前記キャッシュの前記複数のエントリの前記１つに記憶される前記予測される分岐宛先を実際に分岐された宛先に変更することで更新するステップと
を含む、方法。
【請求項１９】
前記キャッシュの前記複数のエントリの各々を、連続する予測誤りを決定するために使用される複数の確認ビットの異なる１つに関連付けるステップを含む、請求項１８記載の方法。
【請求項２０】
実行の間に実際の宛先に分岐する、前記複数の分岐命令の前記１つを実行するステップを含む、請求項１９記載の方法。
【請求項２１】
前記実際の宛先と前記予測された分岐宛先とを比較するステップと、
前記実際の宛先が前記予測された分岐宛先と異なることに応答して、前記予測された分岐宛先の前に行われた先行予測が不正であったか否かを判断するステップと、
前記先行予測が不正であったことに応答して、前記実際の宛先を前記複数のエントリの前記１つに記憶することにより、前記複数のエントリの前記１つに記憶される前記予測される分岐宛先を更新するステップと
を含む、請求項２０記載の方法。
【請求項２２】
前記複数の分岐命令の前記１つを実行するステップの前に、前記複数の分岐命令の前記１つに関連付けられる前記複数のエントリの前記１つを読出すステップを含む、請求項２１記載の方法。
【請求項２３】
前記複数のエントリの前記１つに関連付けられる前記複数の確認ビットの前記１つを読出すステップと、
前記実際の宛先が前記予測された分岐宛先と異なることに応答して、前記複数の確認ビットの前記１つが１にセットされているか否かを判断するステップと、前記複数の確認ビットの前記１つが１にセットされていることに応答して、前記複数の確認ビットの前記１つをゼロにリセットするステップと
を含む、請求項２２記載の方法。
【請求項２４】
前記複数の確認ビットの前記１つがゼロにセットされていることに応答して、前記実際の宛先を前記キャッシュの前記複数のエントリの前記１つに記憶することにより、前記複数のエントリの前記１つを更新するステップと、
前記確認ビットの前記１つを１にセットするステップと
を含む、請求項２３記載の方法。
【請求項２５】
前記実際の宛先が前記予測された宛先に等しいことに応答して、前記複数の確認ビットの前記１つがゼロにセットされているか否かを判断するステップと、
前記複数の確認ビットの前記１つがゼロにセットされていることに応答して、前記確認ビットの前記１つを１にセットするステップと
を含む、請求項２４記載の方法。
【請求項２６】
前記キャッシュの前記複数のエントリの各々を、複数の確認ビットの１つと関連付けるステップにおいて、前記複数の確認ビットの各々が１ビットである、請求項２５記載の方法。
【請求項２７】
前記キャッシュの前記複数のエントリの各々を、複数の確認ビットの１つと関連付けるステップにおいて、前記複数の確認ビットの各々が２ビット以上である、請求項２５記載の方法。
【請求項２８】
分岐命令予測の精度を向上させるプロセッサであって、
分岐命令の予測される分岐宛先を記憶する手段と、
第１の分岐命令を実行する第１のインスタンスに応答して、記憶された宛先が予測誤りであったか否かを判断する手段と、
予測された分岐宛先が、分岐命令を実行する前記第１のインスタンスにおいて予測誤りであったか否かに関わらず、前記記憶された宛先を保持する手段と、
第２の分岐命令を実行する第２のインスタンスに応答して、記憶された宛先が予測誤りであったか否かを判断する手段と、
分岐命令を実行する前記第１及び第２の両方のインスタンスにおいて、前記記憶された宛先が連続して予測誤りであったことに応答して、前記記憶された宛先を実際に分岐された宛先に変更する手段と、
を含む、プロセッサ。
【請求項２９】
前記変更する手段が、第１の分岐命令を実行する前記第１及び第２のインスタンスが連続して発生することに応答して変更する手段を含む、請求項２８記載のプロセッサ。
【請求項３０】
前記予測された分岐宛先を、前記分岐命令に関連付けられるキャッシュ内の複数のエントリの１つに記憶する手段を含む、請求項２９記載のプロセッサ。
【請求項３１】
前記キャッシュの前記複数のエントリの各々を、連続する予測誤りを判断するために使用される複数の確認ビットの異なる１つに関連付ける手段を含む、請求項３０記載のプロセッサ。
【請求項３２】
前記分岐命令を実行する前に、前記分岐命令に関連付けられる前記複数のエントリの前記１つを読出す手段を含む、請求項３１記載のプロセッサ。
【請求項３３】
前記記憶された宛先が予測誤りであることに応答して、前記複数の確認ビットの前記１つが１にセットされているか否かを判断する手段と、
前記複数の確認ビットの前記１つが１にセットされていることに応答して、前記複数の確認ビットの前記１つをゼロにリセットする手段と
を含む、請求項３２記載のプロセッサ。
【請求項３４】
前記複数の確認ビットの前記１つがゼロにセットされていることに応答して、実際の宛先を前記キャッシュの前記複数のエントリの前記１つに記憶することにより、前記複数のエントリの前記１つを更新する手段と、
前記確認ビットの前記１つを１にセットする手段と
を含む、請求項３３記載のプロセッサ。
【請求項３５】
前記記憶された宛先が正しい予測であることに応答して、前記複数の確認ビットの前記１つがゼロにセットされているか否かを判断する手段と、
前記複数の確認ビットの前記１つがゼロにセットされていることに応答して、前記確認ビットの前記１つを１にセットする手段と
を含む、請求項３４記載のプロセッサ。
【請求項３６】
分岐予測を向上させるプロセッサであって、
少なくとも第１及び第２の分岐命令を含む分岐命令セットをエイリアシングする手段と、
前記分岐命令セットの１つに対する分岐宛先を予測し、予測された分岐宛先を前記分岐命令セットの１つの予測として記憶する手段と、
前記分岐命令セットから命令を実行するインスタンスに応答して、記憶された宛先がそれぞれのインスタンスにおいて予測誤りであったか否かを判断する手段と、
前記分岐命令セットからの命令に関して、予測誤りが連続することに応答して、前記記憶された宛先を実際に分岐された宛先に変更する手段と、
前記第１の分岐命令セットからの命令の１つを実行する第１のインスタンスにおいて、前記記憶された宛先を実際に分岐された宛先に変更しない手段と、
を含む、プロセッサ。
【請求項３７】
前記記憶された宛先を実際に分岐された宛先に変更しない手段が、前記分岐命令セットから命令を実行する連続するインスタンスの間に、他の分岐命令に加えてエイリアス・セットの命令が介在することを問わない、請求項３６記載のプロセッサ。
【請求項３８】
前記記憶された宛先を実際に分岐された宛先に変更しない手段が、前記第１のインスタンスの後、特定のインスタンスに応答する手段を含み、前記記憶された宛先を実際に分岐された宛先に変更する手段が、前記分岐命令セットからの命令に関して、予測誤りが少なくとも２度の連続シーケンスであることに応答して変更する手段を含む、請求項３７記載のプロセッサ。
【請求項３９】
前記予測された分岐宛先を、前記分岐命令に関連付けられるキャッシュ内の複数のエントリの１つに記憶する手段を含む、請求項３８記載のプロセッサ。
【請求項４０】
前記キャッシュの前記複数のエントリの各々を、連続する予測誤りを判断するために使用される複数の確認ビットの異なる１つに関連付ける手段を含む、請求項３９記載のプロセッサ。
【請求項４１】
前記分岐命令セットからの命令の１つを実行する前に、当該命令に関連付けられる前記複数のエントリの１つを読出す手段を含む、請求項４０記載のプロセッサ。
【請求項４２】
前記記憶された宛先が予測誤りであることに応答して、前記複数の確認ビットの前記１つが１にセットされているか否かを判断する手段と、
前記複数の確認ビットの前記１つが１にセットされていることに応答して、前記確認ビットの前記１つをゼロにリセットする手段と
を含む、請求項４１記載のプロセッサ。
【請求項４３】
前記複数の確認ビットの前記１つがゼロにセットされていることに応答して、実際の宛先を前記キャッシュの前記複数のエントリの前記１つに記憶することにより、前記複数のエントリの前記１つを更新する手段と、
前記確認ビットの前記１つを１にセットする手段と
を含む、請求項４２記載のプロセッサ。
【請求項４４】
前記記憶された宛先が正しい予測であることに応答して、前記複数の確認ビットの前記１つがゼロにセットされているか否かを判断する手段と、
前記複数の確認ビットの前記１つがゼロにセットされていることに応答して、前記確認ビットの前記１つを１にセットする手段と
を含む、請求項４３記載のプロセッサ。
【請求項４５】
プロセッサに含まれるキャッシュを用いて、複数の分岐命令の１つの宛先の予測の精度を向上させるプロセッサであって、前記キャッシュが複数のエントリを含み、前記複数の分岐命令の各々が、前記キャッシュの前記複数のエントリの１つに関連付けられるものにおいて、
前記複数の分岐命令の１つの予測される分岐宛先を、当該分岐命令に関連付けられる前記キャッシュの前記複数のエントリの１つに記憶する手段と、
前記キャッシュの前記複数のエントリの前記１つを用いて行われる、前記複数の分岐命令の前記１つの宛先の２度の連続する予測誤りに応答して、前記キャッシュの前記複数のエントリの前記１つに記憶される前記予測される分岐宛先を実際に分岐された宛先に変更することで更新する手段と、
を含む、プロセッサ。
【請求項４６】
前記キャッシュの前記複数のエントリの各々を、連続する予測誤りを決定するために使用される複数の確認ビットの異なる１つに関連付ける手段を含む、請求項４５記載のプロセッサ。
【請求項４７】
実行の間に実際の宛先に分岐する、前記複数の分岐命令の前記１つを実行する手段を含む、請求項４６記載のプロセッサ。
【請求項４８】
前記実際の宛先と前記予測された分岐宛先とを比較する手段と、
前記実際の宛先が前記予測された分岐宛先と異なることに応答して、前記予測された分岐宛先の前に行われた先行予測が不正であったか否かを判断する手段と、
前記先行予測が不正であったことに応答して、前記実際の宛先を前記複数のエントリの前記１つに記憶することにより、前記複数のエントリの前記１つに記憶される前記予測される分岐宛先を更新する手段と
を含む、請求項４７記載のプロセッサ。
【請求項４９】
前記複数の分岐命令の前記１つを実行する手段の前に、前記複数の分岐命令の前記１つに関連付けられる前記複数のエントリの前記１つを読出す手段を含む、請求項４８記載のプロセッサ。
【請求項５０】
前記複数のエントリの前記１つに関連付けられる前記複数の確認ビットの前記１つを読出す手段と、
前記実際の宛先が前記予測される分岐宛先と異なることに応答して、前記複数の確認ビットの前記１つが１にセットされているか否かを判断する手段と、
前記複数の確認ビットの前記１つが１にセットされていることに応答して、前記複数の確認ビットの前記１つをゼロにリセットする手段と
を含む、請求項４９記載のプロセッサ。
【請求項５１】
前記複数の確認ビットの前記１つがゼロにセットされていることに応答して、前記実際の宛先を前記キャッシュの前記複数のエントリの前記１つに記憶することにより、前記複数のエントリの前記１つを更新する手段と、
前記確認ビットの前記１つを１にセットする手段と
を含む、請求項５０記載のプロセッサ。
【請求項５２】
前記実際の宛先が前記予測された宛先に等しいことに応答して、前記複数の確認ビットの前記１つがゼロにセットされているか否かを判断する手段と、
前記複数の確認ビットの前記１つがゼロにセットされていることに応答して、前記確認ビットの前記１つを１にセットする手段と
を含む、請求項５１記載のプロセッサ。
【請求項５３】
前記キャッシュの前記複数のエントリの各々を、複数の確認ビットの１つと関連付ける手段において、前記複数の確認ビットの各々が１ビットである、請求項５２記載のプロセッサ。
【請求項５４】
前記キャッシュの前記複数のエントリの各々を、複数の確認ビットの１つと関連付ける手段において、前記複数の確認ビットの各々が２ビット以上である、請求項５２記載のプロセッサ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は一般にデータ処理システムに関し、特にスーパスカラ・プロセッサに関する。より詳細には、本発明は、確認ビットを含むキャッシュを用いて、分岐命令宛先の予測の精度を向上させるスーパスカラ・プロセッサ及び方法に関する。
【０００２】
【従来の技術】
ほとんどのアーキテクチャは、そのターゲットが分岐のアドレス及び命令自身から計算され得ない分岐命令を含む。ターゲット・アドレスが別のレジスタに記憶されて、命令のアドレス及び命令自身から計算され得ない分岐（条件付きまたは無条件）を、ここではアドレス予測可能分岐命令と呼ぶことにする。例えば、ＰｏｗｅｒＰＣ（商標）アーキテクチャでは、”リンク・レジスタ条件付き分岐（ＢＣＬＲ）”命令または”リンク・レジスタ及びリンク条件付き分岐（ＢＣＬＲＬ）”命令のターゲット・アドレスは、リンク・レジスタ（ＬＲ）内で見いだされ、”カウント・レジスタ条件付き分岐（ＢＣＣＴＲ）”命令または”カウント・レジスタ及びリンク条件付き分岐（ＢＣＣＴＲＬ）”命令のターゲット・アドレスは、カウント・レジスタ（ＣＴＲ）内で見いだされる。リンク・レジスタ及びカウント・レジスタは、ＰｏｗｅｒＰＣアーキテクチャにおける特殊目的レジスタであって、これらの命令のアドレスを格納するために使用される。
【０００３】
アーキテクチャは、アドレス予測可能分岐の直前の命令が完了するとき、これらの特殊目的レジスタがアドレス予測可能分岐の必要ターゲット・アドレスを含むことを保証する。完了ユニットから完了信号が受信されるとき、命令は完了する。深いパイプライン式マイクロプロセッサでは、命令は通常、その実行及び続く完了よりも何サイクルも先行してフェッチされる。この前の命令の完了は、通常、アドレス予測可能分岐に続く命令のフェッチよりも何サイクルも遅れるので、こうした分岐のターゲットを高精度で予測できることが必要である。
【０００４】
少量メモリのキャッシュがプロセッサ内に設けられ、こうしたアドレス予測可能分岐の予測ターゲット・アドレスを記憶する。
【０００５】
プログラマは特定のシーケンスでコードを作成する。コードは様々な分岐命令またはジャンプ命令を含み得る。分岐命令は命令の実行の間に、命令の本来の順序からの逸脱を生じさせる。命令の実行のスピードを速める１つの方法は、分岐命令の実行の起こりそうな結果を予測することである。予測はこの分岐命令が次回実行されるときに、分岐が発生するか否かに関して行われる。
【０００６】
キャッシュはプロセッサ内に保持される少量のメモリであり、特定のタイプの分岐命令の予測される宛先を含む。この特定のタイプの分岐命令はアドレス予測可能分岐命令であり、そのターゲット・アドレスは前述のキャッシュなどの別のレジスタに記憶され、またターゲット・アドレスは命令自身からは計算され得ない。
【０００７】
キャッシュは複数のエントリを含み、各分岐命令はエントリの１つに関連付けられる。分岐命令がフェッチされるとき、この分岐命令に関連付けられるキャッシュのエントリが読出され、この分岐命令の予測される宛先が決定される。
【０００８】
一般に、分岐命令が実行された後に、実際の分岐宛先が予測された分岐宛先と異なった場合、キャッシュの適切なエントリが実際の宛先を含むように更新される。しかしながら、より一般的な宛先と一般的でない宛先との間で、分岐命令が連続的に分岐し続ける場合に、問題が生じ得る。例えば、分岐命令が最初に宛先”Ａ”に分岐し、次に宛先”Ｂ”に、そして次に再度宛先”Ａ”に分岐し、このパターンを継続する場合、キャッシュが常に不正な予測を含むことは明らかである。”Ｂ”への分岐後、キャッシュのエントリは、”Ｂ”を予測される宛先として含むように更新される。その後、”Ａ”への次の分岐の後、キャッシュは再度”Ａ”を宛先として予測するように更新される。この例では、キャッシュは常に、この分岐命令の宛先を誤って予測することになる。
【０００９】
【発明が解決しようとする課題】
従って、キャッシュを用いて、特定のタイプのアドレス予測可能分岐命令の宛先の予測の精度を向上させるデータ処理システム及び方法が待望される。
【００１０】
【課題を解決するための手段】
キャッシュを用いて、分岐命令の宛先の予測の精度を向上させるスーパスカラ・プロセッサ及び方法が開示される。キャッシュが複数のエントリを含んで確立される。複数の分岐命令の各々は、キャッシュのエントリの１つに関連付けられる。キャッシュのエントリの１つは、キャッシュのこのエントリに関連付けられる分岐命令の予測される宛先を記憶する。予測された宛先は、分岐命令の実行に際して、その分岐命令が分岐すると予測される宛先である。予測されて記憶される宛先は、分岐命令の宛先の２度の連続する予測誤りに応答してのみ、キャッシュのエントリの１つ内で更新される。ここで２度の連続する予測誤りは、キャッシュのエントリの１つを用いて行われる。
【００１１】
本発明の前述の目的、及びその他の目的、特徴及び利点が、以下の詳細から明らかになろう。
【００１２】
【発明の実施の形態】
本発明の新規の特徴が、付随する特許請求の範囲で述べられる。しかしながら、本発明並びにその好適な使用モード、更に目的及び利点は、添付の図面を参照しながら後述する好適な実施例を参照することにより、最もよく理解できるであろう。
【００１３】
本発明は一般にスーパスカラ・プロセッサに関し、特に、こうしたプロセッサの全体スループットを向上させるシステム及び方法に関する。以下の説明は、当業者が本発明を利用することを可能にするために、また特許出願及びその要件というからみで述べられる。当業者であれば、好適な実施例の様々な変更が容易に明らかであろう。ここでの一般的な原理は、他の実施例にも適用可能である。従って、本発明はここで示される実施例に限られるものではなく、本発明の原理及び特徴に矛盾しない最も広い範囲において、許容されるものである。
【００１４】
本発明はスーパスカラ・プロセッサにおいて、キャッシュを用いることにより、特定タイプのアドレス予測可能分岐命令の宛先の予測の精度を向上させるシステム及び方法である。ここで命令はアドレス予測可能な分岐命令であり、そのターゲット・アドレスは別のレジスタに記憶される。このタイプのアドレス予測可能分岐命令のターゲット・アドレスは、命令自身から計算することができない。
【００１５】
キャッシュは複数のエントリを含む。各アドレス予測可能分岐命令は、エントリの１つに関連付けられる。アドレス予測可能分岐命令に関連付けられるエントリは、アドレス予測可能分岐命令が次に実行される際に分岐すると予測される宛先を記憶する。
【００１６】
本発明の重要な特徴によれば、各キャッシュ・エントリがそれに関連付けられる確認ビットを含む。確認ビットは、特定のアドレス予測可能分岐命令の連続する予測誤りを追跡するために使用される。好適には、確認ビットは単一ビットである。しかしながら、当業者であれば、複数のビットが使用され得ることが理解できよう。例えば、確認ビットは２ビット乃至３ビットを用いて実現される。
【００１７】
アドレス予測可能分岐命令がフェッチされるとき、アドレス予測可能分岐命令に関連付けられるキャッシュのエントリが読出されて、分岐の予測される宛先が決定される。更に、このエントリに関連付けられる確認ビットも読出される。次にアドレス予測可能分岐命令が実行されて、実際の宛先が決定される。
【００１８】
アドレス予測可能分岐命令が分岐した実際の宛先が、キャッシュ・エントリから読出された予測された宛先と同一の場合、確認ビットは１にセットされる。
【００１９】
確認ビットが１にセットされると、確認ビットは最後の予測が正しかったか、或いは、キャッシュ・エントリがアドレス予測可能分岐命令の最後の実行に対して正しい予測を含むように更新されたことを示す。
【００２０】
アドレス予測可能分岐命令が分岐した実際の宛先が、キャッシュ・エントリから読出された予測された宛先と異なる場合、確認ビットの設定が決定される。予測を行う際に確認ビットが１にセットされ、最後の予測が正しかったことを示す場合、確認ビットはゼロにリセットされる。このように、このアドレス予測可能分岐命令の次の実行のために、確認ビットはこの予測が不正であったことを示す。
【００２１】
予測を行う際に確認ビットが既にゼロにセットされ、最後の予測が不正であったことを示す場合、キャッシュ・エントリは実際の宛先をエントリに記憶することにより更新される。確認ビットもまた１にセットされる。このように、このアドレス予測可能分岐命令の次の実行のために、確認ビットは、キャッシュ・エントリに記憶される予測が、分岐が最後に実行されたときの実際の宛先であったことを示す。
【００２２】
１例として、連続実行中に次の分岐パターンに従う、すなわち、最初に位置”Ａ”に分岐し、次に”Ｂ”、”Ａ”、”Ｃ”の順に分岐し、再度”Ａ”に分岐する特定のアドレス予測可能分岐命令について考えてみよう。このアドレス予測可能分岐命令は位置”Ａ”に最も頻繁に分岐することは明らかである。従って、キャッシュのエントリは、エントリが宛先”Ａ”を含むならば、最も頻繁に正しいことになる。
【００２３】
分岐が最初に実行されるとき、キャッシュのエントリが値”Ａ”を有さないと仮定して、確認ビットが読出される。確認ビットの現行値がゼロにセットされており、この分岐が最後に実行されたとき、キャッシュが不正な予測を含んだことを示すと仮定すると、確認ビットは１にセットされ、エントリは宛先”Ａ”を記憶するように更新される。
【００２４】
更に説明を続けると、実際の宛先”Ｂ”への次の実行に対して、キャッシュは不正な予測”Ａ”、及び確認ビットとして”１”を含む。従って、この実行では、キャッシュに記憶される予測は更新されない。しかしながら、確認ビットはゼロにリセットされる。実際の宛先”Ａ”への次の実行に対して、キャッシュは正しい予測”Ａ”及び確認ビットとしてゼロを含む。従って、この実行に際してキャッシュに記憶される予測は更新されない。しかしながら、確認ビットは１にセットされる。実際の宛先”Ｃ”への次の実行に対してキャッシュは不正な予測”Ａ”、及び確認ビットとして”１”を含む。従って、この実行では、キャッシュに記憶される予測は更新されないが、確認ビットはゼロにリセットされる。この例から容易に明らかなように、キャッシュ値は２度の連続する予測誤りが発生しない限り、同一のまま維持され、このことは同一のキャッシュ・エントリを用いて決定される。
【００２５】
１つのキャッシュ・エントリを用いて決定される最初の予測は、異なるキャッシュ・エントリを用いて決定される第２の予測に連続しない。２つの予測が連続するには、予測は同一のキャッシュ・エントリを用いて決定されなければならない。
【００２６】
別の例として、複数のアドレス予測可能分岐命令が同一のキャッシュ・エントリをエイリアスすなわち別名で使用する。エイリアシングは２つ以上の命令が同一のキャッシュ・エントリにマップされるとき発生する。エントリがエイリアスされるとき、エントリはそのキャッシュ・エントリにマップされる命令の１つだけのための予測を含む。例えば、命令のセットＡ、Ｂ、Ｃ及びＤが全て同一のキャッシュ・エントリにエイリアスされると仮定する。この例では、第１の命令Ａが位置ａに分岐し、第２の命令Ｂが位置ｂに分岐し、第３の命令Ｃが位置ｃに分岐し、第４の命令Ｄが位置ｄに分岐する。これらの４つの命令が１つのキャッシュ・エントリにマップされる場合、エントリはこれらの命令の１つだけの予測を含む。
【００２７】
また、命令の実行順序が次のようであると仮定する。すなわち、Ａ、Ａ、Ｂ、Ａ、Ｃ、Ａ、Ａ、Ｄ、Ａ。関連付けられる確認ビットの開始値がゼロとすると、このキャッシュ・エントリに記憶される予測は、このエントリを利用するに当たり、２度の連続する予測誤りが発生するときだけ変化する。本発明を使用すると、キャッシュが５度正確に正しいターゲット宛先を予測する。本発明を使用しない場合には、キャッシュは正しいターゲット宛先を２度しか予測しない。
【００２８】
スーパスカラ・プロセッサは次のように、プロセッサ・パイプライン内で多数のステージを含む。各ステージは１つ以上のパイプラインを含む。命令フェッチ・ステージと呼ばれる典型的な第１ステージでは、命令がメモリ階層からフェッチされる。次に、解読ステージでは、命令が異なる制御ビットに解読され、これらは一般に（１）命令により指定される演算を実行する機能ユニットのタイプ、（２）演算のソース・オペランド、及び（３）演算の結果の宛先を指定する。
【００２９】
ディスパッチ・ステージでは、解読された命令が制御ビットに従い、実行ステージを有するユニットへ、またはことによると介在する予約ステーションにディスパッチされ、これらが最終的に、命令を関連付けられる実行ステージ（実行ユニットとも呼ばれる）へ発行する。
【００３０】
実行ステージは命令により指定される演算を処理する。命令により指定される演算の実行は、１つ以上のオペランドの受諾、及び１つ以上の結果の使用可能オペランド順序での生成を含む。
【００３１】
完了ステージは、並行実行から生じるプログラム順序の問題、すなわち、複数の並行して実行される命令が、結果を１つのレジスタに預ける問題を取り扱う。これはまた、中断された命令に続いて、結果を宛先レジスタに預ける命令に起因する回復問題を扱う。
【００３２】
図１は、本発明に従うスーパスカラ・プロセッサ１００のブロック図である。プロセッサは命令フェッチ・ユニット（ＩＦＵ）１０６を含み、これは信号を解読ユニット１０４に提供する。解読ユニット１０４はリネーム・マッピング構造１０２を使用する。リネーム・マッピング構造１０２は、情報を直接発行キュー１１１乃至１１７に提供する。発行キュー１１１、１１３、１１５及び１１７は次に、実行ユニット１１０、１１２ａ及び１１２ｂ、１１４ａ及び１１４ｂ、及び１１６ａ及び１１６ｂに供給する。
【００３３】
命令キャッシュ１０８は、ＩＦＵ１０６から受信される命令を記憶する。データ・キャッシュ１３０は、データを実行ユニット１１０乃至１１６から受信する。レベル２（Ｌ２）キャッシュ１２０は、データ・キャッシュ１３０及び命令キャッシュ１０８からデータ及び命令を記憶するために使用される。プロセッサ１００はバス・インタフェース・ユニット（ＢＩＵ）１３５を含み、これは情報をＬ２キャッシュ１２０と周辺装置インタフェース１２５との間で渡す。
【００３４】
この実施例では、分岐発行キュー１１１が情報を条件レジスタ（ＣＲ）論理または分岐ユニット１１０に提供する。浮動小数点発行キュー（ＦＩＱ）１１３は、情報を２つの浮動小数点ユニット（ＦＰＵ）１１２ａ及び１１２ｂに提供する。発行キュー（ＩＱ）１１５は、情報を固定小数点ユニット（ＦＸＵ）１１４ａ及びロード／ストア・ユニット（ＬＳＵ）１１６に提供する。ＩＱ１１７は、情報をＦＸＵ１１４ｂ及びＬＳＵ１１６ｂに提供する。発行キューは前述のように構成されるが、当業者であれば、発行キューが本発明の範囲内において異なって構成され得ることが容易に理解できよう。
【００３５】
条件レジスタ１１８は、ＣＲバス１０１との間で情報をやり取りする。浮動小数点体系レジスタ（ＦＰＲ）１２０は、ＦＰＲバス１０５との間で情報をやり取りする。汎用レジスタ（ＧＰＲ）１２４及び１２６は、ＧＰＲバス１０３との間で情報をやり取りする。完了ユニット１０７は、完了バス１０９を介して、リネーム・マッピング１０２に情報を提供する。
【００３６】
分岐ユニット１１０は、条件レジスタ０乃至７（ＣＲ０乃至ＣＲ７）を用いて、ＣＲバス１０１を介して情報をやり取りする。ＦＰＵ１１２ａ及びＦＰＵ１１２ｂは、条件レジスタ１を用いて、ＣＲバス１０１を介してＣＲ１１８に情報を提供する。ＦＰＵ１１２ａ及び１１２ｂもまたＦＰＲバス１０５を介して、ＦＰＲプール１２０との間で情報をやり取りする。ＦＸＵ１１４ａ、ＦＸＵ１１４ｂ、ＬＳＵ１１６ａ、及びＬＳＵ１１６ｂは、条件レジスタ０を用いて、結果をＣＲバス１０１を介してＣＲ１１８に出力する。ＦＸＵ１１４ａ、ＦＸＵ１１４ｂ、ＬＳＵ１１６ａ、及びＬＳＵ１１６ｂはまた、ＧＰＲバス１０３を介して、ＧＰＲプール１２２との間で情報をやり取りする。ＧＰＲプール１２２はシャドーＧＰＲ構成を用いて実現され、そこには２つのＧＰＲすなわちＧＰＲ１２４及びＧＰＲ１２６が含まれる。全ての実行ユニット１１０乃至１１６は、完了バス１０９を介して、結果を完了ユニット１０７に提供する。
【００３７】
図２は、本発明の方法及びシステムに従い、キャッシュの各エントリに関連付けられる確認ビットを含むキャッシュを示す図である。キャッシュ２００は複数のエントリ２０２を含むように示される。また複数の確認ビット２０４が、キャッシュ２００内に含まれる。各エントリは、関連付けられる確認ビットを有する。各キャッシュ・エントリは、エントリに関連付けられるアドレス予測可能分岐命令の宛先の予測を含む。例えば、エントリ２０６に関連付けられるアドレス予測可能分岐命令では、予測がフィールド２０８に記憶され、確認ビットの値がフィールド２１０に記憶される。
【００３８】
図３は、本発明の方法及びシステムに従い、各エントリが確認ビットを関連付けられて有する、複数のエントリを有するキャッシュを確立する様子を示すハイレベル・フローチャートである。プロセスはブロック３００で開始し、その後ブロック３０２に移行して、複数のエントリを含むキャッシュを確立する。次に、ブロック３０４で、異なる確認ビットを確立し、キャッシュの各エントリに関連付ける。プロセスは次にブロック３０６に移行し、各アドレス予測可能分岐命令をキャッシュのエントリの１つに関連付ける。プロセスは次にブロック３０８で終了する。
【００３９】
好適な実施例では、アドレス予測可能分岐命令をキャッシュの特定のエントリに関連付けるために、ハッシング機構が利用される。アドレス予測可能分岐命令は、そのアドレス予測可能分岐命令のアドレスを用いて、キャッシュのエントリに関連付けられる。アドレス予測可能分岐命令のアドレス部分が、その命令のために使用するキャッシュのエントリを決定するために使用される。例えば、６４ビットＲＩＳＣアーキテクチャでは、ビット５２乃至５８がキャッシュ内のエントリを選択するために使用される。当業者であれば、他の関連付け機構も使用され得ることが理解できよう。
【００４０】
図４は、本発明の方法及びシステムに従い、キャッシュ内のエントリに関連付けられる確認ビットを用いて、アドレス予測可能分岐命令の宛先の予測を向上させるハイレベル・フローチャートである。プロセスはブロック４００で開始し、その後ブロック４０２に移行して、次の命令をフェッチする。次に、ブロック４０４で、次の命令がアドレス予測可能分岐命令であるか否かが判断される。命令は無条件アドレス予測可能分岐命令、または条件付きアドレス予測可能分岐命令のいずれかであるかもしれない。次の命令がアドレス予測可能分岐命令でないと判断される場合、プロセスはブロック４０２に戻る。
【００４１】
ブロック４０４を再度参照して、次の命令がアドレス予測可能分岐命令であると判断されると、プロセスはブロック４０７に移行し、どのキャッシュ・エントリがこの特定のアドレス予測可能分岐命令に関連付けられるかを判断する。アドレス予測可能分岐命令のアドレス部分が、ターゲット・アドレスを予測するために使用されるべきキャッシュのエントリを決定するために使用される。例えば、６４ビットＲＩＳＣアーキテクチャでは、アドレス予測可能分岐命令のアドレスのビット５２乃至５８が、好適な実施例の１２８エントリ・キャッシュを指標付けするために使用され得る。当業者であれば、同じ結果を得るために、他の関連付け機構も使用され得ることが理解できよう。
【００４２】
その後、ブロック４０８で、このアドレス予測可能分岐命令において、無条件分岐または条件付き分岐の発生が予測されるかが判断される。このアドレス予測可能分岐命令において、無条件分岐または条件付き分岐の発生が予測される場合、プロセスはブロック４１０に移行する。再度ブロック４０８を参照して、このアドレス予測可能分岐命令において、無条件分岐または条件付き分岐のいずれの発生も予測されない場合には、プロセスはブロック４０９に移行する。ブロック４０９では、順次アドレスから次の命令をフェッチする。プロセスは次にブロック４１２に移行する。
【００４３】
ブロック４１０を参照すると、ブロック４１０では、ブロック４０７で決定されたキャッシュのエントリを読出し、このアドレス予測可能分岐命令の予測される宛先を決定する。次に、ブロック４１１で、予測された宛先から命令をフェッチする。次にブロック４１２で、キャッシュのこのエントリに関連付けられる確認ビットを読出す。プロセスは次にブロック４１４に移行し、このアドレス予測可能分岐命令を実行し、実行されたアドレス予測可能分岐命令の実際の宛先を決定する。
【００４４】
次にブロック４１６で、このアドレス予測可能命令において、無条件分岐または条件付き分岐が発生したか否かを判断する。アドレス予測可能命令において、無条件分岐命令も条件付き分岐命令も発生しなかった場合、プロセスはブロック４０２に戻る。再度ブロック４１６を参照して、アドレス予測可能命令において、無条件分岐または条件付き分岐が発生した場合、プロセスはブロック４１８に移行する。
【００４５】
ブロック４１８では、アドレス予測可能分岐命令が予測された宛先に分岐したか、すなわち、予測された宛先が実際の宛先に等しいか否かが判断される。アドレス予測可能分岐命令が予測された宛先に分岐したと判断されると、プロセスはブロック４２０に移行し、このアドレス予測可能分岐命令に対して、キャッシュのエントリに関連付けられる確認ビットが”１”に等しいか否かが判断される。このアドレス予測可能分岐命令に対して、キャッシュのエントリに関連付けられる確認ビットが”１”に等しい場合、プロセスはブロック４０２に移行する。再度ブロック４２０を参照して、このアドレス予測可能分岐命令に対して、キャッシュのエントリに関連付けられる確認ビットが”１”に等しくない、すなわち、”０”と判断されると、プロセスはブロック４２１に移行し、このアドレス予測可能分岐命令に対するエントリに関連付けられる確認ビットを、”１”にセットする。プロセスは次にブロック４０２に移行する。
【００４６】
再度ブロック４１８を参照して、アドレス予測可能分岐命令が予測された宛先に分岐しなかったと判断されると、プロセスはブロック４２２に移行し、この分岐命令の後に、フェッチされた全ての命令をフラッシュする。次にブロック４２４で、正しいアドレスから命令をフェッチする。その後ブロック４２６で、このアドレス予測可能分岐命令に対して、キャッシュのエントリに関連付けられる確認ビットが”１”か否かが判断される。このアドレス予測可能分岐命令に対して、キャッシュのエントリに関連付けられる確認ビットが”１”に等しいと判断されると、プロセスはブロック４２８に移行し、キャッシュのこのエントリの確認ビットを”０”にセットする。プロセスは次にブロック４０２に移行する。
【００４７】
再度ブロック４２６を参照して、このアドレス予測可能分岐命令に対して、キャッシュのエントリに関連付けられる確認ビットが”１”に等しくない、すなわち”０”と判断されると、プロセスはブロック４３０に移行し、アドレス予測可能分岐命令が分岐した実際の宛先を、このアドレス予測可能分岐命令に関連付けられるキャッシュのエントリに書込む。その後、ブロック４３２はキャッシュのこのエントリの確認ビットを”１”にセットする。プロセスは次にブロック４０２に移行する。
【００４８】
以上、好適な実施例について述べてきたが、当業者であれば、本発明の趣旨及び範囲内において、形態及び詳細における様々な変化が可能であることが理解できよう。
【００４９】
まとめとして、本発明の構成に関して以下の事項を開示する。
【００５０】
（１）プロセッサにおける分岐予測方法であって、
分岐命令の予測される分岐宛先を記憶するステップと、
第１の分岐命令を実行する第１のインスタンスに応答して、記憶された宛先が予測誤りであったか否かを判断するステップと、
予測された分岐宛先が、分岐命令を実行する前記第１のインスタンスにおいて予測誤りであったか否かに関わらず、前記記憶された宛先を保持するステップと、
分岐命令を実行する第２のインスタンスに応答して、記憶された宛先が予測誤りであったか否かを判断するステップと、
分岐命令を実行する前記第１及び第２の両方のインスタンスにおいて、前記記憶された宛先が予測誤りであったことに応答して、前記記憶された宛先を変更するステップと
を含む、方法。
（２）前記変更するステップが、第１の分岐命令を実行する前記第１及び第２のインスタンスが連続して発生することに応答して行われる、前記（１）記載の方法。
（３）前記予測された分岐宛先を、前記分岐命令に関連付けられるキャッシュ内の複数のエントリの１つに記憶するステップを含む、前記（２）記載の方法。
（４）前記キャッシュの前記複数のエントリの各々を、連続する予測誤りを判断するために使用される複数の確認ビットの異なる１つに関連付けるステップを含む、前記（３）記載の方法。
（５）前記分岐命令を実行する前に、前記分岐命令に関連付けられる前記複数のエントリの前記１つを読出すステップを含む、前記（４）記載の方法。
（６）前記記憶された宛先が予測誤りであることに応答して、前記複数の確認ビットの前記１つが１にセットされているか否かを判断するステップと、
前記複数の確認ビットの前記１つが１にセットされていることに応答して、前記複数の確認ビットの前記１つをゼロにリセットするステップと
を含む、前記（５）記載の方法。
（７）前記複数の確認ビットの前記１つがゼロにセットされていることに応答して、実際の宛先を前記キャッシュの前記複数のエントリの前記１つに記憶することにより、前記複数のエントリの前記１つを更新するステップと、
前記確認ビットの前記１つを１にセットするステップと
を含む、前記（６）記載の方法。
（８）前記記憶された宛先が正しい予測であることに応答して、前記複数の確認ビットの前記１つがゼロにセットされているか否かを判断するステップと、
前記複数の確認ビットの前記１つがゼロにセットされていることに応答して、前記確認ビットの前記１つを１にセットするステップと
を含む、前記（７）記載の方法。
（９）プロセッサにおける分岐予測方法であって、
少なくとも第１及び第２の分岐命令を含む分岐命令セットをエイリアシングするステップと、
前記分岐命令セットの１つに対する分岐宛先を予測し、予測された分岐宛先を前記分岐命令セットの１つの予測として記憶するステップと、
前記分岐命令セットから命令を実行するインスタンスに応答して、記憶された宛先がそれぞれのインスタンスにおいて予測誤りであったか否かを判断するステップと、
前記分岐命令セットからの命令に関して、予測誤りが連続することに応答して、前記記憶された宛先を変更するステップと、
記憶された宛先を変更して後、前記分岐命令セットからの命令の１つを実行する第１のインスタンスにおいて、前記記憶された宛先を変更無しに保持するステップと
を含む、分岐予測方法。
（１０）前記記憶された宛先を変更無しに保持するステップが、前記分岐命令セットから命令を実行する連続するインスタンスの間に、他の分岐命令に加えてエイリアス・セットの命令が介在することを問わない、前記（９）記載の方法。
（１１）前記記憶された宛先を変更無しに保持するステップが、前記第１のインスタンスの後、特定のインスタンスに応答して、前記記憶された宛先を変更無しに保持するステップを含み、前記記憶された宛先を変更するステップが、前記分岐命令セットからの命令に関して、予測誤りが少なくとも２度の連続シーケンスであることに応答して変更するステップを含む、前記（１０）記載の方法。
（１２）前記予測された分岐宛先を、前記分岐命令に関連付けられるキャッシュ内の複数のエントリの１つに記憶するステップを含む、前記（１１）記載の方法。
（１３）前記キャッシュの前記複数のエントリの各々を、連続する予測誤りを判断するために使用される複数の確認ビットの異なる１つに関連付けるステップを含む、前記（１２）記載の方法。
（１４）前記分岐命令セットからの命令の１つを実行する前に、当該命令に関連付けられる前記複数のエントリの１つを読出すステップを含む、前記（１３）記載の方法。
（１５）前記記憶された宛先が予測誤りであることに応答して、前記複数の確認ビットの前記１つが１にセットされているか否かを判断するステップと、
前記複数の確認ビットの前記１つが１にセットされていることに応答して、前記確認ビットの前記１つをゼロにリセットするステップと
を含む、前記（１４）記載の方法。
（１６）前記複数の確認ビットの前記１つがゼロにセットされていることに応答して、実際の宛先を前記キャッシュの前記複数のエントリの前記１つに記憶することにより、前記複数のエントリの前記１つを更新するステップと、
前記確認ビットの前記１つを１にセットするステップと
を含む、前記（１５）記載の方法。
（１７）前記記憶された宛先が正しい予測であることに応答して、前記複数の確認ビットの前記１つがゼロにセットされているか否かを判断するステップと、前記複数の確認ビットの前記１つがゼロにセットされていることに応答して、前記確認ビットの前記１つを１にセットするステップと
を含む、前記（１６）記載の方法。
（１８）プロセッサに含まれるキャッシュを用いて、複数の分岐命令の１つの宛先の予測の精度を向上させる前記プロセッサにおける方法であって、前記キャッシュが複数のエントリを含み、前記複数の分岐命令の各々が、前記キャッシュの前記複数のエントリの１つに関連付けられるものにおいて、
前記複数の分岐命令の１つの予測される分岐宛先を、当該分岐命令に関連付けられる前記キャッシュの前記複数のエントリの１つに記憶するステップと、
前記キャッシュの前記複数のエントリの前記１つを用いて行われる、前記複数の分岐命令の前記１つの宛先の２度の連続する予測誤りに応答して、前記キャッシュの前記複数のエントリの前記１つに記憶される前記予測される分岐宛先を更新するステップと
を含む、方法。
（１９）前記キャッシュの前記複数のエントリの各々を、連続する予測誤りを決定するために使用される複数の確認ビットの異なる１つに関連付けるステップを含む、前記（１８）記載の方法。
（２０）実行の間に実際の宛先に分岐する、前記複数の分岐命令の前記１つを実行するステップを含む、前記（１９）記載の方法。
（２１）前記実際の宛先と前記予測された分岐宛先とを比較するステップと、前記実際の宛先が前記予測された分岐宛先と異なることに応答して、前記予測された分岐宛先の前に行われた先行予測が不正であったか否かを判断するステップと、
前記先行予測が不正であったことに応答して、前記実際の宛先を前記複数のエントリの前記１つに記憶することにより、前記複数のエントリの前記１つに記憶される前記予測される分岐宛先を更新するステップと
を含む、前記（２０）記載の方法。
（２２）前記複数の分岐命令の前記１つを実行するステップの前に、前記複数の分岐命令の前記１つに関連付けられる前記複数のエントリの前記１つを読出すステップを含む、前記（２１）記載の方法。
（２３）前記複数のエントリの前記１つに関連付けられる前記複数の確認ビットの前記１つを読出すステップと、
前記実際の宛先が前記予測された分岐宛先と異なることに応答して、前記複数の確認ビットの前記１つが１にセットされているか否かを判断するステップと、前記複数の確認ビットの前記１つが１にセットされていることに応答して、前記複数の確認ビットの前記１つをゼロにリセットするステップと
を含む、前記（２２）記載の方法。
（２４）前記複数の確認ビットの前記１つがゼロにセットされていることに応答して、前記実際の宛先を前記キャッシュの前記複数のエントリの前記１つに記憶することにより、前記複数のエントリの前記１つを更新するステップと、
前記確認ビットの前記１つを１にセットするステップと
を含む、前記（２３）記載の方法。
（２５）前記実際の宛先が前記予測された宛先に等しいことに応答して、前記複数の確認ビットの前記１つがゼロにセットされているか否かを判断するステップと、
前記複数の確認ビットの前記１つがゼロにセットされていることに応答して、前記確認ビットの前記１つを１にセットするステップと
を含む、前記（２４）記載の方法。
（２６）前記キャッシュの前記複数のエントリの各々を、複数の確認ビットの異なる１つに関連付けるステップにおいて、前記複数の確認ビットの各々が１ビットを含む、前記（２５）記載の方法。
（２７）前記キャッシュの前記複数のエントリの各々を、複数の確認ビットの異なる１つに関連付けるステップにおいて、前記複数の確認ビットの各々が２ビットを含む、前記（２６）記載の方法。
（２８）分岐命令予測の精度を向上させるプロセッサであって、
分岐命令の予測される分岐宛先を記憶する手段と、
第１の分岐命令を実行する第１のインスタンスに応答して、記憶された宛先が予測誤りであったか否かを判断する手段と、
予測された分岐宛先が、分岐命令を実行する前記第１のインスタンスにおいて予測誤りであったか否かに関わらず、前記記憶された宛先を保持する手段と、
分岐命令を実行する第２のインスタンスに応答して、記憶された宛先が予測誤りであったか否かを判断する手段と、
分岐命令を実行する前記第１及び第２の両方のインスタンスにおいて、前記記憶された宛先が予測誤りであったことに応答して、前記記憶された宛先を変更する手段と
を含む、プロセッサ。
（２９）前記変更する手段が、第１の分岐命令を実行する前記第１及び第２のインスタンスが連続して発生することに応答して変更する手段を含む、前記（２８）記載のプロセッサ。
（３０）前記予測された分岐宛先を、前記分岐命令に関連付けられるキャッシュ内の複数のエントリの１つに記憶する手段を含む、前記（２９）記載のプロセッサ。
（３１）前記キャッシュの前記複数のエントリの各々を、連続する予測誤りを判断するために使用される複数の確認ビットの異なる１つに関連付ける手段を含む、前記（３０）記載のプロセッサ。
（３２）前記分岐命令を実行する前に、前記分岐命令に関連付けられる前記複数のエントリの前記１つを読出す手段を含む、前記（３１）記載のプロセッサ。
（３３）前記記憶された宛先が予測誤りであることに応答して、前記複数の確認ビットの前記１つが１にセットされているか否かを判断する手段と、
前記複数の確認ビットの前記１つが１にセットされていることに応答して、前記複数の確認ビットの前記１つをゼロにリセットする手段と
を含む、前記（３２）記載のプロセッサ。
（３４）前記複数の確認ビットの前記１つがゼロにセットされていることに応答して、実際の宛先を前記キャッシュの前記複数のエントリの前記１つに記憶することにより、前記複数のエントリの前記１つを更新する手段と、
前記確認ビットの前記１つを１にセットする手段と
を含む、前記（３３）記載のプロセッサ。
（３５）前記記憶された宛先が正しい予測であることに応答して、前記複数の確認ビットの前記１つがゼロにセットされているか否かを判断する手段と、
前記複数の確認ビットの前記１つがゼロにセットされていることに応答して、前記確認ビットの前記１つを１にセットする手段と
を含む、前記（３４）記載のプロセッサ。
（３６）分岐予測を向上させるプロセッサであって、
少なくとも第１及び第２の分岐命令を含む分岐命令セットをエイリアシングする手段と、
前記分岐命令セットの１つに対する分岐宛先を予測し、予測された分岐宛先を前記分岐命令セットの１つの予測として記憶する手段と、
前記分岐命令セットから命令を実行するインスタンスに応答して、記憶された宛先がそれぞれのインスタンスにおいて予測誤りであったか否かを判断する手段と、
前記分岐命令セットからの命令に関して、予測誤りが連続することに応答して、前記記憶された宛先を変更する手段と、
記憶された宛先を変更して以来、前記分岐命令セットからの命令の１つを実行する第１のインスタンスにおいて、前記記憶された宛先を変更無しに保持する手段と
を含む、プロセッサ。
（３７）前記記憶された宛先を変更無しに保持する手段が、前記分岐命令セットから命令を実行する連続するインスタンスの間に、他の分岐命令に加えてエイリアス・セットの命令が介在することを問わない、前記（３６）記載のプロセッサ。
（３８）前記記憶された宛先を変更無しに保持する手段が、前記第１のインスタンスの後、特定のインスタンスに応答して、前記記憶された宛先を変更無しに保持する手段を含み、前記記憶された宛先を変更する手段が、前記分岐命令セットからの命令に関して、予測誤りが少なくとも２度の連続シーケンスであることに応答して変更する手段を含む、前記（３７）記載のプロセッサ。
（３９）前記予測された分岐宛先を、前記分岐命令に関連付けられるキャッシュ内の複数のエントリの１つに記憶する手段を含む、前記（３８）記載のプロセッサ。
（４０）前記キャッシュの前記複数のエントリの各々を、連続する予測誤りを判断するために使用される複数の確認ビットの異なる１つに関連付ける手段を含む、前記（３９）記載のプロセッサ。
（４１）前記分岐命令セットからの命令の１つを実行する前に、当該命令に関連付けられる前記複数のエントリの１つを読出す手段を含む、前記（４０）記載のプロセッサ。
（４２）前記記憶された宛先が予測誤りであることに応答して、前記複数の確認ビットの前記１つが１にセットされているか否かを判断する手段と、
前記複数の確認ビットの前記１つが１にセットされていることに応答して、前記確認ビットの前記１つをゼロにリセットする手段と
を含む、前記（４１）記載のプロセッサ。
（４３）前記複数の確認ビットの前記１つがゼロにセットされていることに応答して、実際の宛先を前記キャッシュの前記複数のエントリの前記１つに記憶することにより、前記複数のエントリの前記１つを更新する手段と、
前記確認ビットの前記１つを１にセットする手段と
を含む、前記（４２）記載のプロセッサ。
（４４）前記記憶された宛先が正しい予測であることに応答して、前記複数の確認ビットの前記１つがゼロにセットされているか否かを判断する手段と、
前記複数の確認ビットの前記１つがゼロにセットされていることに応答して、前記確認ビットの前記１つを１にセットする手段と
を含む、前記（４３）記載のプロセッサ。
（４５）プロセッサに含まれるキャッシュを用いて、複数の分岐命令の１つの宛先の予測の精度を向上させるプロセッサであって、前記キャッシュが複数のエントリを含み、前記複数の分岐命令の各々が、前記キャッシュの前記複数のエントリの１つに関連付けられるものにおいて、
前記複数の分岐命令の１つの予測される分岐宛先を、当該分岐命令に関連付けられる前記キャッシュの前記複数のエントリの１つに記憶する手段と、
前記キャッシュの前記複数のエントリの前記１つを用いて行われる、前記複数の分岐命令の前記１つの宛先の２度の連続する予測誤りに応答して、前記キャッシュの前記複数のエントリの前記１つに記憶される前記予測される分岐宛先を更新する手段と
を含む、プロセッサ。
（４６）前記キャッシュの前記複数のエントリの各々を、連続する予測誤りを決定するために使用される複数の確認ビットの異なる１つに関連付ける手段を含む、前記（４５）記載のプロセッサ。
（４７）実行の間に実際の宛先に分岐する、前記複数の分岐命令の前記１つを実行する手段を含む、前記（４６）記載のプロセッサ。
（４８）前記実際の宛先と前記予測された分岐宛先とを比較する手段と、
前記実際の宛先が前記予測された分岐宛先と異なることに応答して、前記予測された分岐宛先の前に行われた先行予測が不正であったか否かを判断する手段と、
前記先行予測が不正であったことに応答して、前記実際の宛先を前記複数のエントリの前記１つに記憶することにより、前記複数のエントリの前記１つに記憶される前記予測される分岐宛先を更新する手段と
を含む、前記（４７）記載のプロセッサ。
（４９）前記複数の分岐命令の前記１つを実行する手段の前に、前記複数の分岐命令の前記１つに関連付けられる前記複数のエントリの前記１つを読出す手段を含む、前記（４８）記載のプロセッサ。
（５０）前記複数のエントリの前記１つに関連付けられる前記複数の確認ビットの前記１つを読出す手段と、
前記実際の宛先が前記予測される分岐宛先と異なることに応答して、前記複数の確認ビットの前記１つが１にセットされているか否かを判断する手段と、
前記複数の確認ビットの前記１つが１にセットされていることに応答して、前記複数の確認ビットの前記１つをゼロにリセットする手段と
を含む、前記（４９）記載のプロセッサ。
（５１）前記複数の確認ビットの前記１つがゼロにセットされていることに応答して、前記実際の宛先を前記キャッシュの前記複数のエントリの前記１つに記憶することにより、前記複数のエントリの前記１つを更新する手段と、
前記確認ビットの前記１つを１にセットする手段と
を含む、前記（５０）記載のプロセッサ。
（５２）前記実際の宛先が前記予測された宛先に等しいことに応答して、前記複数の確認ビットの前記１つがゼロにセットされているか否かを判断する手段と、
前記複数の確認ビットの前記１つがゼロにセットされていることに応答して、前記確認ビットの前記１つを１にセットする手段と
を含む、前記（５１）記載のプロセッサ。
（５３）前記キャッシュの前記複数のエントリの各々を、複数の確認ビットの異なる１つに関連付ける手段において、前記複数の確認ビットの各々が１ビットを含む、前記（５２）記載のプロセッサ。
（５４）前記キャッシュの前記複数のエントリの各々を、複数の確認ビットの異なる１つに関連付ける手段において、前記複数の確認ビットの各々が２ビットを含む、前記（５３）記載のプロセッサ。
【図面の簡単な説明】
【図１】本発明によるスーパスカラ・プロセッサのブロック図である。
【図２】本発明の方法及びシステムによる、キャッシュの各エントリに関連付けられる確認ビットを含むキャッシュを示す図である。
【図３】本発明の方法及びシステムにより、各エントリが確認ビットを関連付けられて有する、複数のエントリを有するキャッシュを確立する様子を示すハイレベル・フローチャートである。
【図４】本発明の方法及びシステムにより、キャッシュ内のエントリに関連付けられる確認ビットを用いて、分岐命令の宛先の予測を向上させるハイレベル・フローチャートである。
【符号の説明】
１００  スーパスカラ・プロセッサ
１０１  ＣＲバス
１０２  リネーム・マッピング構造
１０４  解読ユニット
１０５  ＦＰＲバス
１０６  命令フェッチ・ユニット（ＩＦＵ）
１０７  完了ユニット
１０８  命令キャッシュ
１０９  完了バス
１１０、１１２ａ、１１２ｂ、１１４ａ、１１４ｂ、１１６ａ、１１６ｂ  実行ユニット
１１１、１１３、１１５、１１７  直接発行キュー
１１８  条件レジスタ
１２０  レベル２（Ｌ２）キャッシュ
１２２  汎用レジスタ（ＧＰＲ）プール
１２４、１２６  汎用レジスタ（ＧＰＲ）
１２５  周辺装置インタフェース
１３０  データ・キャッシュ
１３５  バス・インタフェース・ユニット（ＢＩＵ）
２０２、２０６、２１２  エントリ
２０４  確認ビット
２０８、２１０  フィールド
２００  キャッシュ
【図１】
0003565504.tif 000002
【図２】
0003565504.tif 000003
【図３】
0003565504.tif 000004
【図４】
0003565504.tif 000005