(57)【要約】情報が分岐先バッファ（ＢＴＢ）（３１）を有するデータ処理システムで処理される。一形式において、命令は受け取られてデコードされる。論理演算、算術演算、もしくは別の命令の実行または該命令の実行の比較結果の１つによって設定される条件コード値（３３）に基づいて、その命令が成立分岐命令であるかどうかの判断がなされる。成立分岐命令の分岐先を格納する分岐先バッファのエントリを割り当てるかどうかを判断するために、成立分岐命令と関連付けられている命令指定子（５０）が使用される。一形態において、命令指定子は命令のフィールドである。分岐先バッファ割当指定子の値によっては、命令フェッチユニット（３０）は無条件分岐命令に対して分岐先バッファにエントリを割り当てない。
2010500653.tif 000002
【特許請求の範囲】
【請求項１】
分岐命令が実行されるデータ処理システムにおける情報処理方法であって、
命令を受け取ってデコードすることと、
前記命令が、別の命令の実行または前記命令の実行の比較結果によって設定される条件コード値に基づく成立分岐命令であると判断することと、
前記成立分岐命令と関連付けられている命令指定子を使用して、前記成立分岐命令の分岐先を格納する分岐先バッファのエントリを割り当てるかどうかを判断することと、
を備える、方法。
【請求項２】
前記命令を、比較および分岐命令としてデコードすることをさらに備える、請求項１に記載の方法。
【請求項３】
別の命令の実行または前記命令の実行の比較結果によって設定される前記条件コード値は、２つのオペランドが等しいか否かを比較して前記比較結果を提供することをさらに備える、請求項１に記載の方法。
【請求項４】
別の命令のまたは前記命令の比較結果によって設定される前記条件コード値は、２つの値を比較することをさらに備える、請求項１に記載の方法。
【請求項５】
前記命令指定子を前記命令の所定のフィールドとして実装することをさらに備える、請求項１に記載の方法。
【請求項６】
前記条件コード値は、桁上げ値、ゼロ値、負値、またはオーバーフロー値の１つを表わす、請求項１に記載の方法。
【請求項７】
条件付き分岐または無条件分岐のいずれかであり、第１の分岐先バッファ割当指定子を有する第１の分岐命令を受け取ってデコードすることと、
前記第１の分岐命令と関連付けられている分岐が成立する場合に、前記第１の分岐先バッファ割当指定子に基づく前記第１の分岐命令の分岐先を格納する第１の分岐先バッファエントリを割り当てることと、
前記第１の分岐命令の実行を終了することと、
条件付き分岐または無条件分岐のいずれかであり、第２の分岐先バッファ割当指定子を有する第２の分岐命令を受け取ってデコードすることと、
前記第２の分岐命令と関連付けられている分岐が成立する場合に、前記第２の分岐先バッファ割当指定子に基づく前記第２の分岐命令の分岐先を格納する第２の分岐先バッファエントリを割り当てないと判断することと、
前記第２の分岐命令の実行を終了することと、
を備える、方法。
【請求項８】
前記第２の分岐命令を無条件分岐命令としてデコードすることをさらに備える、請求項７に記載の方法。
【請求項９】
前記第１の分岐先バッファ割当指定子および前記第２の分岐先バッファ割当指定子を、それぞれ、前記第１の分岐命令および前記第２の分岐命令の一部分として実装することをさらに備える、請求項７に記載の方法。
【請求項１０】
命令実行中に条件コードレジスタの条件コード値に基づいて分岐が成立する条件付き分岐命令を備える、前記第１の分岐命令または前記第２の分岐命令の少なくとも１つをさらに備える、請求項７に記載の方法。
【請求項１１】
比較結果を提供するために２つオペランドが等しいか否かを比較することによって、前記第１の分岐命令、前記第２の分岐命令、または別の分岐命令の１つの実行の前記比較結果から前記条件コード値を判断することをさらに備える、請求項１０に記載の方法。
【請求項１２】
論理演算、算術演算、または比較演算を行う追加命令に基づいて前記条件コード値を判断することをさらに備える、請求項１０に記載の方法。
【請求項１３】
桁上げ値、ゼロ値、負値、またはオーバーフロー値の１つとして前記条件コード値を実装することをさらに備える、請求項１０に記載の方法。
【請求項１４】
通信バスと、
前記通信バスに結合された処理ユニットと、
を備えるデータ処理システムであって、
前記処理ユニットは、
命令を受け取ってデコードする命令デコーダと、
前記命令デコーダに結合された実行ユニットと、
前記命令デコーダに結合され、分岐命令の分岐先を格納する分岐先バッファを備える、命令フェッチユニットと、
条件コードレジスタと、
前記命令デコーダおよび前記命令フェッチユニットに結合された制御回路と、
を備え、
前記命令フェッチユニットは、受け取られた分岐命令と関連付けられている分岐先バッファ割当指定子を使用して前記受け取られた分岐命令の分岐先を格納する前記分岐先バッファのエントリを割り当てるかどうかを判断する、
データ処理システム。
【請求項１５】
前記通信バスに結合されたメモリと、
前記通信バスに結合された１つ以上のシステムモジュールと、
をさらに備える、請求項１４に記載のデータ処理システム。
【請求項１６】
前記受け取られた分岐命令は別の命令または前記受け取られた分岐命令の実行の比較結果によって設定される１つ以上の条件コード値に基づいて成立分岐命令であると判断される、請求項１４に記載のデータ処理システム。
【請求項１７】
前記受け取られた分岐命令は無条件分岐であり、前記命令フェッチユニットは前記分岐先バッファ割当指定子に応じて前記分岐先バッファにエントリを割り当てない、請求項１４に記載のデータ処理システム。
【請求項１８】
前記命令フェッチユニットは、第１の分岐命令を受け取り、前記第１の分岐命令が成立すると判断されて前記分岐先バッファにおいてミスヒットとなるとき、前記第１の分岐命令に対する分岐先バッファ割当指定子に応じて前記第１の分岐命令に対する分岐先バッファエントリを割り当てることを決定し、前記命令フェッチユニットは、後続の第２の分岐命令を受け取り、前記第２の分岐命令が成立すると判断されて前記分岐先バッファにおいてミスヒットとなるとき、前記第２の分岐命令に対する分岐先バッファ割当指定子に応じて前記第２の分岐命令に対する分岐先バッファエントリを割り当てない、請求項１４に記載のデータ処理システム。
【請求項１９】
前記条件コードレジスタで指定される同じ条件に対して、前記命令フェッチユニットは、第１の分岐命令が成立して前記分岐先バッファにおいてミスヒットとなるときに前記第１の分岐命令に対して分岐先バッファエントリを割り当て、第２の分岐命令が成立して前記分岐先バッファにおいてミスヒットとなるときに前記第２の分岐命令に対して分岐先バッファエントリを割り当てない、請求項１４に記載のデータ処理システム。
【請求項２０】
前記条件コードレジスタは、論理演算、算術演算、または比較演算の１つを行う命令に基づいて値を格納する、請求項１４に記載のデータ処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般にデータ処理システムに関し、さらに具体的には、データ処理システムにおける選択的分岐先バッファ（ＢＴＢ）割当に関する。
【背景技術】
【０００２】
今日の多くのデータ処理システムは、分岐先バッファ（ＢＴＢ）を利用して、分岐命令の実行に費やされるサイクル数を低減することによってプロセッサ性能を向上させている。ＢＴＢは、最新の分岐キャッシュとして働き、分岐先アドレス（分岐の目的地のアドレス）か、または分岐命令の実行前に分岐先における１つ以上の命令かのいずれかを提供することによって分岐を促進することができるとともに、分岐命令によって、プロセッサは分岐先アドレスにおける命令の実行をより迅速に開始することができる。通常、成立するあらゆる実行分岐命令に対して、ＢＴＢエントリが割り当てられる。これは、多数のエントリを有するＢＴＢなど一部のＢＴＢにとっては妥当なこともあるが、たとえば、コストと速度がＢＴＢのサイズを制限するような他の用途では、このソリューションが十分な性能向上を達成しないこともある。
【発明を実施するための最良の形態】
【０００３】
本発明は、例として示され、添付図によって限定されるものではなく、添付図では同様の参照符号は同様の要素を示す。
図内の要素は簡単かつ明確にするために示されており、必ずしも一定の縮尺で描かれていないことを当業者は理解する。たとえば、図内の要素の一部の寸法は、本発明の実施形態を理解しやすくするために他の要素と比較して拡大されている場合もある。
【０００４】
本明細書で使用される用語「バス」は、データ、アドレス、制御、ステータスなど、１つ以上の各種情報を転送するために使用されてもよい複数の信号または導体を指して使用される。本明細書に記載される導体は、単一導体、複数導体、単方向導体、または双方向導体であることに関連して図示または説明される場合がある。しかし、実施形態に応じて導体の実装が変ってもよい。たとえば、個別の単方向導体が双方向導体の代わりに使用されてもよく、その逆も同様である。また、複数の導体が複数の信号を連続して、または時分割方式で転送する単一導体で置き換えられてもよい。同様に、複数信号を伝送する単一導体は、これらの信号の部分集合を伝送する数各種導体に分離されてもよい。したがって、信号の転送については多くのオプションが存在する。
【０００５】
信号、ステータスビット、あるいは同様の装置を論理的に真または偽の状態にすることに言及するときには、用語「アサートする」または「設定する」および「否定する」（「アサート解除する」または「クリアする」）がそれぞれ使用される。論理的に真の状態は論理レベル１であり、論理的に偽の状態は論理レベル０である。また、論理的に真の状態が論理レベル０であれば、論理的に偽の状態は論理レベル１である。
【０００６】
一実施形態では、各分岐命令（ここでは、これらの分岐命令は条件付き分岐命令または無条件分岐命令でありうる）と関連付けられているＢＴＢ割当指定子に基づいてＢＴＢエントリを選択的に割り当てる機能を提供することによって分岐先バッファ（ＢＴＢ）の性能を改善することができる。このＢＴＢ割当指定子に基づいて特定の分岐命令が成立するときにエントリがＢＴＢに割り当てられるかどうかは分からない。たとえば、一部の用途においては、まれにしか実行されなかったり、再利用されるほど長時間ＢＴＢに残っていたりすることがないため、分岐先がキャッシュに格納されるときにはＢＴＢの性能が低下している多数の分岐命令（条件付き分岐命令および無条件分岐命令の両方を含む）があるかもしれない。したがって、これらの種の分岐命令に対してエントリの割当を回避できるようにすると、プロセッサの性能が改善される可能性がある。さらに、多くの低コストの用途では、ＢＴＢのサイズが最小化される必要があるため、限られた数のＢＴＢエントリをいずれも無駄にしないようにＢＴＢ割当の制御を改善することが望ましい。
【０００７】
図１を参照すると、一実施形態では、データ処理システム１０は、集積回路１２、システムメモリ１４、および１つ以上の他のシステムモジュール１６を含む。集積回路１２、システムメモリ１４、および１つ以上の他のシステムモジュール１６は、複数の導体バス１８を介して接続される。集積回路１２内には、複数導体の内部バス２６（通信バスと呼ばれることもある）に結合されたプロセッサ２０がある。内部バス２６には、他の内部モジュール２４およびバスインタフェースユニット２８も接続されている。バスインタフェースユニット２８は、内部バス２６に接続された第１の複数の導体入力／出力端子と、システムバス１８に接続された第２の複数の導体入力／出力端子とを備える。データ処理システム１０は例示的であることを理解されたい。他の実施形態は、単一集積回路またはその変形型で図示された要素のすべてを含む。他の実施形態において、プロセッサ２０のみが存在してもよい。さらに、他の実施形態において、データ処理システム１０は、任意数の集積回路を使用して実装されてもよい。
【０００８】
動作時、集積回路１２は、プロセッサ２０が条件付き分岐命令および無条件分岐命令を含むプロセッサ命令を実行する場合、所定のデータ処理機能を実行し、命令の実行には他の図示された要素を利用する。以下でさらに詳しく説明されるように、プロセッサ２０は、エントリがＢＴＢ割当指定子に基づいて選択的に割り当てられるＢＴＢを含む。
【０００９】
図２は、本発明の一実施形態によるプロセッサ２０の一部分を示す。プロセッサ２０（演算装置と呼ばれることもある）は、命令デコーダ３２、条件コードレジスタ（ＣＣＲ）３３、命令デコーダ３２に結合された実行ユニット３４、命令デコーダ３２に結合されたフェッチユニット２９、ならびにＣＣＲ３３、フェッチユニット２９、命令デコーダ３２、および実行ユニット３４に結合された制御回路３６を含む。フェッチユニット２９は、フェッチアドレス（ａｄｄｒ）生成ユニット２７、命令レジスタ（ＩＲ）２５、命令バッファ２３、ＢＴＢ３１、ＢＴＢ制御回路４４、ならびにフェッチおよび分岐回路２１を含む。フェッチアドレス生成ユニット２７は、フェッチアドレスを内部バス２６に提供し、フェッチおよび分岐制御回路２１とＢＴＢ制御回路４４とに結合される。命令バッファ２３は、フェッチされた命令を内部バス２６から受け取るように結合され、命令をＩＲ２５に提供するように結合される。命令バッファ２３とＩＲ２５はフェッチおよび分岐制御回路２１に結合され、ＩＲ２５は命令を命令デコーダ３２に提供する。フェッチおよび分岐回路２１は、命令デコーダ３２にも結合される。ＢＴＢ制御回路４４はフェッチおよび分岐回路２１ならびにＢＴＢ３１に結合され、ＢＴＢ制御回路４４はＢＴＢ割当制御信号２２を受け取るように結合され、ＢＴＢ割当制御信号２２は、一実施形態において、命令デコーダ３２によって提供される。
【００１０】
制御回路３６は、必要に応じて、フェッチング、デコーディング、および命令の実行を調整し、ＣＣＲ３３を読み取って更新するための回路を含む。典型的に、ＣＣＲ３３は論理関数、算術関数、または比較関数の結果を格納する。たとえば、ＣＣＲ３３は、命令の実行中の比較結果がゼロであるか負であるか、オーバーフローとなるか、または桁上げとなるかといった条件コード値を格納する従来の条件コードレジスタであってもよい。あるいは、ＣＣＲ３３は、２つの値（すなわち、２つのオペランド）を比較させる命令によって設定される条件コード値を格納する従来の条件コードレジスタであってもよく、この場合、条件コード値は２つの値が等しいか等しくないかを示してもよく、一方の値が他方の値よりも大きいか小さいかを示してもよい。
【００１１】
フェッチユニット２９は、システムメモリ１４などのメモリにフェッチアドレスを提供し、次にフェッチ命令などのデータを受け取る。このデータは命令バッファ２３に格納されてからＩＲ２５に提供されてもよい。この後、ＩＲ２５は命令をデコードするために命令デコーダ３２に提供する。デコーディングの後、各命令は実行ユニット３４によって相応に実行される。妥当な場合、ＣＣＲ３３の条件コード値の一部または全部が、実行された各々の命令の比較結果に応じて制御回路３６経由で実行ユニット３４によって設定される。命令の中には、実行してもＣＣＲ３３の条件コード値のいずれにも影響を与えないものがあるが、実行するとＣＣＲ３３の条件コード値の一部または全部に影響を与えるものもある。実行ユニット３４の動作とＣＣＲ３３の更新は、当技術分野において知られているため、本明細書ではさらに説明しない。また、フェッチアドレス生成ユニット２７、命令バッファ２３、ＩＲ２５、ならびにフェッチおよび分岐制御回路２１の動作も当技術分野において知られている。さらに、フェッチユニット２９、命令デコーダ３２、実行ユニット３４、制御回路３６、およびＣＣＲ３３の各々を実装するために、いかなるタイプの構成または実装が使用されてもよい。
【００１２】
また、ＢＴＢヒット／ミスヒットの検出、分岐予測の実施および提供、分岐先アドレスの提供に関するＢＴＢ３１とＢＴＢ制御回路４４の動作も知られており、本明細書では実施形態の説明に役立つ程度の説明に留められることに留意されたい。一実施形態において、ＢＴＢ３１は、分岐命令アドレス、対応する分岐先、および対応する分岐予測指標（ｂｒａｎｃｈ  ｐｒｅｄｉｃｔｉｏｎ  ｉｎｄｉｃａｔｏｒｓ）を格納してもよい。一実施形態において、分岐先は分岐先アドレスを示してもよい。また、分岐先は、分岐先アドレスにある次の命令を示してもよい。分岐予測指標は、対応する分岐命令アドレスにおける分岐命令が成立か不成立かの予測を示す予測値を提供してもよい。一実施形態において、この分岐予測指標は、強い成立予測を示すためにより高い値にインクリメントされるか、あるいは弱い成立予測を示すかまたは不成立予測を示すためにより低い値にデクリメントされる２ビットカウント値であってもよい。他の分岐予測指標が実装されてもよい。他の実施形態において、たとえば、ＢＴＢ４４にヒットする分岐は必ず成立すると予測してもよい場合、分岐予測指標は存在しなくてもよい。
【００１３】
一実施形態において、フェッチアドレス生成ユニット２７によって生成される各フェッチアドレスは、ＢＴＢ制御回路４４によってＢＴＢ３１のエントリと比較され、フェッチアドレスがＢＴＢ３１でヒットしたか、それともミスヒットしたかを判断する。比較結果がヒットであれば、フェッチアドレスがフェッチされるべき分岐命令に対応しているものとみなされてもよい。この場合、分岐が成立すると予測すれば、分岐先アドレスにある命令をフェッチできるように、ＢＴＢ３１はＢＴＢ制御回路４４を経由して対応する分岐先をフェッチアドレス生成ユニット２７に提供する。比較結果がミスヒットであれば、ＢＴＢ３１を使用して予測分岐先を迅速に提供することはできない。一実施形態において、たとえ比較結果がミスヒットであっても、分岐予測を提供することはできるが、分岐先はＢＴＢ３１によって提供されるように迅速には提供されない。最終的に、分岐命令は（たとえば、命令デコーダ３２または実行ユニット３４によって）実際に解決されて分岐命令の後で処理される次の命令を決定する。解決されたときに分岐命令が予測を誤っていたことが判明すると、予測誤りに対処するために既知の処理方法を使用することができる。
【００１４】
命令デコーダ３２を参照すると、一実施形態では、命令デコーダ３２が分岐命令をデコードしている場合、命令デコーダ３２はＢＴＢ割当制御信号２２をＢＴＢ制御回路４４に提供し、現在デコードされた分岐命令がＢＴＢミスヒット時にＢＴＢ３１に格納されるべきか否かの判断を支援するためにＢＴＢ制御回路４４が使用される。すなわち、制御信号２２を使用して、ＢＴＢ３１におけるエントリが分岐命令に割り当てられるかどうかの判断を支援する。一実施形態において、デコードされている分岐命令は、命令デコーダ３２がＢＴＢ割当制御信号２２を生成するために使用するＢＴＢ割当指定子を含む。たとえば、ＢＴＢ割当指定子は分岐命令の１ビットフィールドであってもよく、この１ビットフィールドは、第１の値に設定されたとき分岐命令が成立すると判断されるならばＢＴＢ３１のエントリがＢＴＢミスヒット時に割り当てられなければならず、第２の値に設定されたときたとえ分岐命令が成立すると判断されてもＢＴＢ３１のエントリがＢＴＢミスヒット時に割り当てられてはならないことを示す。すなわち、第２の値はＢＴＢ割当が行なわれないことを示すことになる。ＢＴＢ割当制御信号２２は相応に生成されうるもので、たとえば、信号２２が第１の値に設定されたとき対応する分岐命令が成立すると判断される場合にＢＴＢ３１のエントリがＢＴＢミスヒット時に割り当てられる必要があることをＢＴＢ制御回路４４に示し、第２の値に設定されたとき分岐命令に対してＢＴＢ割当が行なわれないことを示す１ビット信号であってもよい。したがって、コードセグメント内の個々の分岐命令は、命令ごとに、ＢＴＢに割り当てられるようにも、ＢＴＢに割り当てられないようにも設定することができる。
【００１５】
たとえば、図３を参照すると、命令コード４２（任意のタイプの条件付き分岐または無条件分岐を指す）、条件指定子４８（たとえば、条件コードを指定するなどしてどの条件で分岐が成立するべきかを指示する）、ＢＴＢ割当指定子５０（前述のように、分岐命令が成立する場合にＢＴＢミスヒット時にＢＴＢ割当が行なわれるか否かを指示する）、および偏位５２（分岐先アドレスを生成するために使用される）を含む、サンプル分岐命令が提供される。偏位５２は、分岐先アドレスを提供するためにプログラムカウンタに加算され、正値であっても負値であってもよい。他の実施形態において、他の分岐命令形式が使用されてもよい。たとえば、偏位やオフセットでなく宛先アドレスを提供するために即値フィールドが使用されてもよい。あるいは、分岐タイプをさらに規定するためにさらにサブ命令コードが存在してもよい。条件指定子は、条件指定子が満たされるとき分岐命令が真である（したがって、成立分岐である）と評価されるように１つ以上の条件コードあるいは条件コードの組合せを示す１ビット以上を含んでもよい。分岐命令を評価し、条件指定子が満たされるかどうかを判断するために使用されるＣＣＲ３３の条件値は、たとえば、論理演算、算術演算、または比較演算を実行してもよい別の命令（たとえば、分岐命令の以前の命令）によって設定されてもよく、あるいは分岐命令そのもの（たとえば、命令コード４２が「比較および分岐」命令を指定する場合など）によって設定されてもよい。また、命令コード４２は、常に成立する無条件分岐を指示してもよいため、条件指定子４８は存在しなくてもよく、あるいは「常時分岐」を指示するように設定されてもよい。さらに別の代替実施形態において、ＢＴＢ割当指定子５０は、分岐命令コード４２の一部として含まれても、エンコードされてもよい。たとえば、割当の有無を指示するように設定することのできる特定命令コードとＢＴＢ割当指定子を有する特定の分岐命令（たとえば、ゼロに等しいとき分岐）を有するのではなく、割当ありの分岐（たとえば、ＢＴＢ割当を有するゼロに等しいとき分岐）を割当なしの分岐（たとえば、ＢＴＢ割当なしのゼロに等しいとき分岐）と区別するために２つの個別分岐命令（すなわち、２つの個別命令コード）が使用されうる。
【００１６】
さらに別の実施形態において、ＢＴＢ割当指定子５０は分岐命令そのものの一部として含まれなくてもよい。たとえば、一実施形態において、分岐命令に対応する割当指定子の別表が提供されてもよい。この表、すなわち、ビットマップは、システムメモリ１４、またはデータプロセッサ１２によって提供されるローカルメモリなどのメモリからの各分岐命令に対して、たとえば、ＢＴＢ制御回路４４によって読み取られる。この場合、ＢＴＢ割当制御信号２２は、命令デコーダ３２によって提供されなくてもよく、その代わりに、ＢＴＢ制御回路４４によって黙示的または明示的に生成されてＢＴＢ３１にエントリを割り当てるか否かを決定してもよい。したがって、ＢＴＢ割当指定子は、要求どおりに各分岐命令に対して様々な異なる方法で提供されうるうえに、分岐命令そのものの一部として含まれることに限定されずに、データ処理システム１０の中にいかなるタイプのデータ構造として常駐してもよい。
【００１７】
ＢＴＢ割当指定子、ＢＴＢ制御回路４４、およびＢＴＢ３１の動作は、図４のフロー６０を参照してさらに詳しく説明される。フロー６０は開始６１で始まってブロック６２に進み、ここで、ＢＴＢ割当指定子を有する分岐命令がデコードされる。（前述のように、ＢＴＢ割当指定子は、図３におけるように命令の一部として含まれうるもので、この場合、命令コードの一部としてエンコードされてもよく、メモリ内の表によって個別に提供されてもよいことに留意されたい。また、分岐命令は、条件付き分岐または無条件分岐のいずれであってもよく、この場合、無条件分岐は常時成立分岐である。）フローはブロック６４に進み、ここで、割当制御信号（ＢＴＢ割当制御信号２２など）がＢＴＢ割当指定子に基づいて生成される。フローは判断菱形６６に進み、ここで、分岐命令がＢＴＢミスヒットを発生するかどうかが判断される。ＢＴＢミスヒットが発生しなければ、フローはブロック６８に進み、ここで、前述のように、ＢＴＢ３１ヒットに応じてＢＴＢ３１は分岐先をフェッチアドレス生成ユニット２７に提供し、場合によっては分岐予測も提供する。すなわち、ＢＴＢヒットに応じてＢＴＢ３１によって提供される情報は、この後、当技術分野において知られているように分岐命令を処理するために使用される。この後、フローは終了８０において終了する。
【００１８】
しかし、もしも判断菱形６６において分岐命令が実際にミスヒットを発生すると（すなわち、分岐命令またはその命令アドレスがＢＴＢ３１に存在しなければ）、フローは判断菱形７０に進み、ここで、この後、分岐命令が成立したか否かが判断される。この判断は、分岐の状態を解明して行なわれ、分岐が成立分岐であるか否かを判断する。この分岐解決は、当技術分野で知られるように実施されてもよい。分岐が成立しない場合、フローは終了８０に進み、ここで、分岐命令から逐次命令処理が続いてもよい。しかし、分岐が成立する場合、フローは判断菱形７２に進み、ここで、割当制御信号を使用してＢＴＢ割当が行なわれたか否かが判断される。割当制御信号が割当を示す場合、ＢＴＢエントリはブロック７４の分岐命令に割り当てられる。すなわち、たとえば、ＢＴＢ制御回路４４は、分岐命令のアドレス、分岐命令の分岐先、また、一実施形態において、分岐命令の分岐予測子を格納するためにＢＴＢ３１にエントリを割り当てる。その際に、ＢＴＢ制御回路４４は、分岐命令と分岐先のアドレス値を受け取る必要があることに留意されたい。これらは、プロセッサ２０の回路とパイプラインとの実装方法に応じて、プロセッサの種々の部分によって提供されてもよい。一例において、フェッチユニット２９内（たとえば、フェッチおよび分岐制御回路２１内）の回路は、各分岐命令のアドレスと分岐先アドレスとを追跡する。あるいは、フェッチユニット２９またはプロセッサ２０内の他の場所にある他の回路（たとえば、パイプラインのような回路など）が、ＢＴＢ３１にＢＴＢエントリを割り当てるときに必要とされるこの更新情報を保持してもよい。
【００１９】
ＢＴＢエントリがブロック７４で割り当てられた後、フローはブロック７６に進み、ここで、分岐命令は当技術分野において知られているように処理される。判断菱形７２において、割当制御信号が割当なしを示した場合、フローはブロック７８に進み、ここでは、ＢＴＢエントリの割当が行なわれない。すなわち、（判断菱形７０において）分岐命令が成立すると判断されたとしても、ＢＴＢ割当指定子が使用されてＢＴＢ３１のエントリがこの分岐命令に対してこの時点で割り当てられないことを示す。したがって、フローはブロック７６に進み、ここで、分岐命令は、当技術分野において知られているように処理されるが、ＢＴＢ３１には格納されていない。この後、フローは終了８０において終了する。
【００２０】
図５は、第１および第２の分岐命令に関する選択的ＢＴＢ割当の方法を示し、第１および第２の分岐命令の各々は本発明の一実施形態に従ってＢＴＢ割当指定子を有する。すなわち、図５の方法は、ＢＴＢエントリを割り当てるか否かを決定するために分岐命令に関するＢＴＢ割当指定子の使用可能な方法を命令ごとに示す。フローは開始８２で始まってブロック８４に進み、ここで、第１の分岐命令が（命令デコーダ３２などによって）デコードされ、ここでは、第１の分岐命令は条件コードレジスタ（ＣＣＲ３３など）における１つ以上の条件値によって表わされる所定の条件を有する。たとえば、所定の条件は、図３に関して記述された条件指定子４８など、第１の命令内の条件指定子によって指定されうる。所定の条件は、どのような条件（ＣＣＲ内の条件値によって表わされる）の下で第１の分岐命令が成立するべきかを示す。また、第１の分岐命令は、ＢＴＢ割当を示すように設定される、対応するＢＴＢ割当指定子（これは、前述のように、第１の分岐命令そのものの一部として黙示的または明示的に提供されうるか、あるいは表または他の回路によって提供されうる）を有する。
【００２１】
この後、フローはブロック８６に進み、ここで、第１の分岐が（所定の条件の評価に基づいて）成立すると判断されるとＢＴＢエントリがＢＴＢミスヒット時にＢＴＢに割り当てられる（前述のように、この第１の分岐命令に対応するＢＴＢ割当指定子はＢＴＢ割当を指示するため）。フローはブロック８８に進み、ここで、第１の分岐命令の実行が終了する。
【００２２】
この後、フローはブロック９０に進み、ここで、第２の分岐命令が（命令デコーダ３２などによって）デコードされ、ここでも、第２の分岐命令は、条件コードレジスタにおける１つ以上の条件値によって表わされる所定の条件を有する。第１および第２の分岐命令が参照する所定の条件は同じであっても違っていてもよいことに留意されたい。しかし、第２の命令に対応するＢＴＢ割当指定子は、ＢＴＢ割当を指示しないように設定される。したがって、一実施形態において、第１および第２の分岐命令は同じタイプの分岐命令であることもありうる（これらの分岐命令は、命令コードフィールド４２などと同じ命令コードを有するという点において）が、ＢＴＢ割当指定子（ＢＴＢ割当指定子５０など）は異なる。あるいは、第１の分岐命令が割当のある分岐命令（ｂｒａｎｃｈ−ｗｉｔｈ−ａｌｌｏｃａｔｅ  ｉｎｓｔｒｕｃｔｉｏｎ）に対応し、第２の分岐命令が割当のない分岐命令（ｂｒａｎｃｈ−ｗｉｔｈｏｕｔ−ａｌｌｏｃａｔｅ  ｉｎｓｔｒｕｃｔｉｏｎ）に対応する場合には、第１の分岐命令と第２の分岐命令は異なるタイプの分岐命令であってもよい。
【００２３】
この後、フローはブロック９２に進み、ここで、第２の分岐が（所定の条件の評価に基づいて）成立すると判断されると、ＢＴＢにおけるＢＴＢエントリはＢＴＢミスヒット時に割り当てられない（前述のように、この第２の分岐命令に対応するＢＴＢ割当指定子はＢＴＢ割当を指示するため）。この後、フローはブロック９４に進み、ここで、第２の命令の実行が終了する。この後、フローは終了９６において終了する。
【００２４】
図６〜９は、ＢＴＢ割当に対して分岐命令をマークまたはエンコードする方法を示す。すなわち、図６〜９に関して記載される実施形態では、どの分岐命令をＢＴＢに割り当てるべきか、またどの分岐命令をＢＴＢに割り当てるべきでないかを判断することができる。これが判断されると、各分岐命令に対するＢＴＢ割当指定子は相応に設定できることになり、この場合、このＢＴＢ割当指定子は前述のようになる。たとえば、ＢＴＢ割当指定子は、分岐命令内の黙示的フィールドでありうるし、命令内では明示的にエンコードされうるし、メモリから読み取られる別表に格納されうるし、割当／割当なしの選定などを可能とするすべての命令に対してビットマップ形式で提供されうる。したがって、ＢＴＢ割当またはＢＴＢ割当なしのいずれかとなると判断されたこれらの分岐命令をデコードまたは実行すると、適切なＢＴＢ割当制御信号（たとえば、前述のＢＴＢ割当信号２２など）が生成されうる。他の実施形態において、特定分岐命令が割当または割当なしタイプの分岐命令としてマークされると、この割当／割当なし情報を格納するためにいかなるメカニズムが使用されてもよく、コード実行中に必要に応じて適切にこの情報を提供するためにいかなるメカニズムが使用されてもよい。
【００２５】
コードまたはコードセグメントに関する情報を得るためにコードプロファイリングが使用されてもよい。この後、この情報は、たとえば、最終用途において使用されるコードをより効率的に構築しコンパイルするために使用されうる。一実施形態において、コードプロファイリングは、成立分岐に対するＢＴＢエントリの割当ポリシーを制御するために使用される（たとえば、特定分岐命令に対する割当の有無を適切に指定するためにＢＴＢ割当指定子を設定することによって）。一実施形態において、分岐を割り当てる最適に近い割当ポリシーを見つけるために特定要素がヒューリスティックに結合される。１つの因数は分岐が成立する絶対回数（たとえば、どのくらいの頻度で分岐が成立する可能性があるか）であってもよく、他の因数は分岐が後続の分岐のしきい値（Ｔｔｈｒｅｓｈ）数内で成立されない回数の相対パーセンテージであってもよい（たとえば、この因数は、特定分岐がＢＴＢに残っている可能性のある時間を表わしてもよい）。一実施形態において、Ｔｔｈｒｅｓｈの値は、下端（ｌｏｗ  ｅｎｄ）がＢＴＢエントリ数で制限され、上端（ｈｉｇｈ  ｅｎｄ）がＢＴＢエントリ数の２倍で制限される、ヒューリスティックに導出された値である。一実施形態において、Ｔｔｈｒｅｓｈの値は、条件付き割当が実施されるときにＢＴＢの容量を概算するために使用される。すべての成立分岐が必ずしもＢＴＢミスヒット時にＢＴＢにエントリを割り当てるわけではないので、ＢＴＢの「有効」容量は、実際のＢＴＢエントリの数よりも大きい。ＢＴＢのエントリの実数の２倍の値が５０％の割当率を示唆する。実際には、この上限がさらに高くなると多くの分岐は性能を低下させることのある割当を行なわないことを示唆しているので、通常この上限で十分すぎるほどである。一部の具体的なプロファイリング例では、１．２〜１．５の値が最適に近い結果となる。ただし、他のプロファイリング例は、別の値を用いる方が良好に機能することもある。
【００２６】
一実施形態において、分岐が成立しても分岐が成立する絶対回数のしきい値を満たさない場合、あるいは分岐が成立したあるパーセンテージよりも大きいしきい値Ｔｔｈｒｅｓｈを超える場合、分岐命令はＢＴＢエントリを割り当てないようにマークされる。
【００２７】
コードプロファイリングを実行して割当ポリシーを制御するために、一実施形態では、解析されるコードのセクションにおいて各分岐命令に対して４個のカウンタをセットアップする。これらのカウンタは図６に示される。たとえば、図６では、コードセグメント１００において各分岐命令に対して４個１組のカウンタが示される。たとえば、カウンタ１０１〜１０４は分岐＿Ａ命令に対応し、カウンタ１０５〜１０８は分岐＿Ｂ命令に対応し、カウンタ１０９〜１１２は分岐＿Ｃ命令に対応する。コードセグメント１００は、プロファイルされなくてはならないコードのセグメントを示す（これは、ドットによって示されるように、ＩＮＳＴ１の前または分岐＿Ｃ命令の後にさらに多くの命令を含んでもよい）。このセグメントは望み通り小さくても大きくてもよく、その場合、プロファイリングされる各分岐命令は対応する４個のカウンタを含む。４個のカウンタは、分岐＿Ａ命令およびカウンタ１０１〜１０４に関連して説明されることになる。カウンタ１０１は、コードセグメント１００の実行中（たとえば、特定時間内）に分岐＿Ａが実行される絶対回数を数え続ける分岐＿Ａ実行カウンタである。カウンタ１０２は、（たとえば、特定時間内に）分岐＿Ａ命令が成立する回数を数え続ける分岐＿Ａ成立カウンタである。カウンタ１０３は、分岐＿Ａ命令の成立発生事例（ｔａｋｅｎ  ｏｃｃｕｒｒｅｎｃｅ）と命令との間に生じる他の成立分岐の数を数え続ける「他の成立分岐カウンタ」である。カウンタ１０４は、分岐＿Ａが成立するたびに更新され、カウンタ１０３が所定のしきい値を超えたどうかを追跡するしきい値超えのカウンタである。これらのカウンタの動作は、図８のフローに関連してさらに詳しく説明される。さらに、カウンタ１０１〜１０４の説明はそれぞれカウンタ１０５〜１０８と１０９〜１１２にも適用されるが、これらはそれぞれ分岐＿Ｂ命令と分岐＿Ｃ命令に関する。
【００２８】
図７は、ＢＴＢをシミュレーションするために動作する最後のＮ個の成立分岐のリストを示す。一実施形態において、最後のＮ個の成立分岐のリストは、ＦＩＦＯ（先入れ先出し待ち行列）として動作し、ここで、ＮはＢＴＢのエントリ数以上であってもよい。図７は、様々な時点で成立した最後のＮ個の成立分岐のリストの４つのスナップショットを示す。リスト１２０は、ＦＩＦＯが現在Ｎ個の分岐、分岐０〜Ｎ−１で満たされているものと仮定しており、ここでＦＩＦＯにおける最新の成立分岐が大きい矢印で示される。プロファイリングコードセグメント１００において、分岐＿Ａが成立し、最後のＮ個の成立分岐のリストはリスト１２２で示されるように更新されているものと判断され、ここで、分岐＿Ａは最古の分岐エントリに取って代わる（この例では、リストはＦＩＦＯとして動作するため）。したがって、リスト１２２において、最新の成立分岐は、大きい矢印で示されるように分岐＿Ａである。このとき、分岐＿Ｂが成立しているものと判断されると、最後のＮ個の成立分岐のリストはリスト１２４で示されるように更新され、ここで、分岐＿Ｂはその時点で最古の分岐エントリ、すなわち、分岐１エントリに取って代わる。したがって、リスト１２４では、最新の成立分岐は大きい矢印で示されるように分岐＿Ｂである。同様に、このとき、分岐＿Ｃが成立しているものと判断されると、最後のＮ個の成立分岐のリストはリスト１２６で示されるように更新され、ここで、分岐＿Ｃはその時点で最古の分岐エントリ、すなわち、分岐２エントリに取って代わる。したがって、リスト１２６では、最新の成立分岐は大きい矢印で示されるように分岐＿Ｃである。また、最後のＮ個の成立分岐のリストの更新は、図８のフローに関連してさらに詳しく説明される。
【００２９】
一実施形態において、カウンタ１０１〜１１２と最後のＮ個の成立分岐のリストとは、コードプロファイラーのソフトウェア成分として実装することができる。あるいは、これらはハードウェアまたはファームウェア、あるいは、ハードウェア、ファームウェア、およびソフトウェアの任意の組合せで実現することもできる。
【００３０】
図８のフローは、図６に関連して前述したカウンタの更新方法を示す。フローは開始１３０で始まってブロック１３２に進み、ここで、プロファイルされるコードのセグメントに対するデータ構造が初期化される。たとえば、プロファイルされるコードのセグメントは、コードセグメント１００を指してもよく、データ構造は、たとえば、カウンタ、しきい値など、あるいは、図８のフローを実行するのに必要な他のデータ構造を含んでもよい。たとえば、カウンタはクリア（すなわち、ゼロに初期化）されてもよく、一方、しきい値値は所定の値に設定されてもよい。この後、フローは判断菱形に１３４に進み、ここで、コードセグメントに実行すべき命令が多く残っているかどうかが判断される。残っていなければ、フローは終了１３６において終了する。残っていれば、フローはブロック１３８に進み、ここで、次の命令が現在の命令として実行される。
【００３１】
この後、フローは判断菱形１４０に進み、ここで、現在の命令が分岐命令（たとえば、分岐＿Ａなど）であるかどうかが判断される。分岐命令でなければ、フローは判断菱形１３４に戻る。分岐命令であれば、フローはブロック１４２に進み、ここで、分岐実行カウンタ（たとえば、カウンタ１０１など）が現在の分岐命令に合わせてインクリメントされる。フローは判断菱形１４４に進み、ここで、現在の分岐命令が成立しているかどうかが判断される。成立していなければ、フローは判断菱形１３４に戻る（他のカウンタが更新されていない場合）。成立していれば、フローはブロック１４６に進み、ここで、分岐成立カウンタ（たとえば、カウンタ１０２など）が現在の分岐命令に合わせてインクリメントされる。
【００３２】
この後、フローはブロック１４８に進み、ここで、現在の分岐命令が最後のＮ個の成立分岐のリスト（図７に関連して記載されたリストなど）になければ、現在の分岐命令（カウンタ１０７および１１１など）以外のコードのセグメントにおける分岐命令の他の成立した分岐カウンタがインクリメントされ、この後、現在の分岐命令は最後のＮ個の成立分岐のリストに入れられる。したがって、現在の分岐命令に対する他の成立分岐カウンタ（たとえば、カウンタ１０３など）は現在の分岐命令が実行されているときには更新されないが、コードセグメント内の別の分岐命令が現在の分岐命令として実行されているときには更新されてもよい。
【００３３】
この後、フローは判断菱形１５０に進み、ここで、現在の分岐命令に対する他の成立分岐カウンタ（たとえば、カウンタ１０３など）がカウント更新しきい値（Ｔｔｈｒｅｓｈ、これも前述されている）よりも大きいかどうかが判断される。大きければ、フローはブロック１５２に進み、ここで、現在の分岐命令に対するしきい値を超えたカウンタ（たとえば、カウンタ１０４など）がインクリメントされる。この後、フローはブロック１５４に進む。同様に、判断菱形１５０の結果が大きくなければ、（現在の分岐命令に対してしきい値を超えるカウンタをインクリメントせずに）フローはブロック１５４に進む。ブロック１５４において、現在の分岐命令に対する他の成立分岐カウンタ（たとえば、カウンタ１０３など）はクリア（ゼロに設定）される。この後、フローは判断菱形１３４に戻り、コードセグメントに実行すべき多くの命令があるかどうかが判断される。
【００３４】
図８のフローに沿ってカウンタ（たとえば、カウンタ１０１〜１１２）によって収集される情報は、この後、ＢＴＢ割当を行うべき分岐命令とＢＴＢ割当を行うべきでない分岐命令をマークするために使用されうる。たとえば、図９は、各分岐命令を解析するために使用されうるフローを示し、この場合、各分岐命令の対応カウンタのカウント値はその分岐命令に対応するＢＴＢ割当指定子がＢＴＢ割当またはＢＴＢ割当なしを指示すべきか否かを決定するために使用されうる。
【００３５】
図９のフローは、開始１５９で始まって判断菱形１６０に進み、ここで、解析すべき分岐命令がさらに存在するか否かが判断される。分岐命令がなければ、フローは終了１７１において終了する。分岐命令があれば、フローは判断菱形１６２に進み、ここで、次の分岐命令が現在の分岐命令（たとえば、現在の分岐命令は分岐＿Ａ命令であってもよい）として選択される。この後、フローは判断菱形１６４に進み、ここで、現在の分岐命令に対する分岐成立カウンタ（たとえば、カウンタ１０２の最終値）が分岐成立しきい値（これは、コードを実行する必要のあるシステムの性能ニーズに応じてコードプロファイリングを行うユーザによって設定される所定のしきい値であってもよい）よりも小さいかどうかが判断される。この判断が行なわれると、フローはブロック１６６に進み、ここで、現在の分岐命令に対応するＢＴＢ割当指定子がＢＴＢミスヒット時にＢＴＢ割当なしを指示すべきであると判断される。すなわち、分岐は十分な回数成立する可能性が低いので、幾度も成立する分岐命令と同じ値をＢＴＢに提供することにはならないため、分岐はＢＴＢのエントリを占有する必要がない。分岐成立しきい値は、プロファイルされているコードの個々のインスタンスに対して実験的すなわちヒューリスティックに決定されてもよい。あるコードプロファイル例では、分岐成立しきい値に対する１つまたは２つの値が最適に近い割当ポリシーになることがある。ただし、他のプロファイリングの例では、別の値を用いる方が良好に機能することもある。
【００３６】
判断菱形１６４において、分岐成立カウンタが分岐成立しきい値よりも大きいか、またはそれに等しい場合、フローは判断菱形１６８に進み、ここで、現在の分岐命令に対するしきい値を超えるカウンタ（たとえば、カウンタ１０４の最終値、あるいは、分岐が成立したときにしきい値を超える回数の相対パーセンテージを表わす分岐成立カウンタ（カウンタ１０２値）で割られるカウンタ１０４の最終値）がＢＴＢ容量しきい値よりも大きいかどうかが判断される。ＢＴＢ容量しきい値よりも大きければ、フローはブロック１６６に進み、ここで、現在の分岐命令に対応するＢＴＢ割当指定子がＢＴＢミスヒット時にＢＴＢ割当なしを指示すべきであるとさらに判断される。すなわち、この場合、現在の分岐命令は、この分岐が成立している各インスタンス間に実行される他の成立分岐によるＢＴＢ割当によって置き換えられるため、価値があると言えるほどＢＴＢに長く存在する可能性は低いので、分岐命令にはエントリを割り当てずに比較的有用なエントリをできる限り除外する方がよい。
【００３７】
判断菱形１６８において、分岐成立カウンタがＢＴＢ容量しきい値よりも小さいか、またはそれに等しい場合、フローはブロック１７０に進み、ここで、現在の分岐命令に対応するＢＴＢ割当指定子はＢＴＢミスヒット時にＢＴＢ割当を行うよう指示すべきであると判断される。すなわち、現在の分岐命令は十分な回数だけ成立する可能性が高く、さらに、再使用できるだけの時間ＢＴＢに残っている可能性も高いので、現在の分岐命令が成立してＢＴＢミスヒットが発生したときにＢＴＢエントリを実際に割り当てるようにマークされる。ブロック１６６および１７０の後、フローは判断菱形１６０に戻り、ここで、多くの命令が存在していれば次の命令が解析される。
【００３８】
判断菱形１６８のＢＴＢ容量しきい値は、一般に、しきい値カウンタを超える許容回数を表わす小さい値に設定され、あるいは、相対パーセンテージが評価基準として使用されるときはしきい値カウンタを超えた回数の最大許容パーセンテージを表わす小さいパーセンテージに設定され、この場合、一実施形態において、値は１０％〜３０％の範囲にあるが、このパラメータの最適値は、望まれるプロファイリングに対応する各コードセグメントについて実験的に決定されてもよい。一実施形態において、カウンタ１０２および１０４、図７に示されるような最後のＮ個の成立分岐のリスト、ならびにＢＴＢ容量しきい値を使用することによってＢＴＢ動作のモデル化が可能になり、この場合、たとえ現在の分岐がＢＴＢエントリを割り当てても現在の分岐が再び成立する前に他の分岐によるエントリの割当によって置き換えられていることになるよう、エントリの新規割当が現在の分岐が、成立する間に十分に行なわれる可能性がある。この状況において、現在の分岐が次に成立するときはいずれにしてもＢＴＢミスヒットは起こる可能性が高いので、現在の分岐に対してエントリを全く割り当てない方が有利であるかもしれない。これは、判断菱形１６８によって行なわれる決定プロセスであり、この場合、この決定プロセスは後続の分岐のしきい値数（たとえば、Ｔｔｈｒｅｓｈ）内で分岐が成立しない回数の相対パーセンテージに関する情報を提供する。
【００３９】
各分岐命令が解析され、解析された各分岐命令に対してＢＴＢ割当ポリシーが設定されると、得られたコードセグメントはそれに応じて構築またはコンパイルされうる。これによって、得られるコードセグメントを実行するプロセッサ内のＢＴＢの性能と使用率との向上が可能になる。たとえば、コードセグメント１００は、いったん相応にプロファイルされてコンパイルされるとプロセッサ２０によって実行されうることになり、特にＢＴＢ空間が限られるときは、（前述のような）ＢＴＢ割当ポリシー指定子を使用することで実行を改善し、ＢＴＢ３１の利用を改善することになる。
【００４０】
これらのカウンタの使用は、分岐命令がＢＴＢ割当を行うべきか否かを判断するためのヒューリスティックを提供するものにすぎないことに留意されたい。すなわち、上記のしきい値を満たす命令や満たさない命令が、前述のプロセッサ２０によるコードセグメントの実行などその最終用途において、コードセグメント（たとえばコードセグメント１００）の実行中にＢＴＢで役立つか否かは確かでない。ただし、分岐はどのくらいの頻度で実行される可能性が高いのか、および分岐命令はどのくらいの期間ＢＴＢに留まってから置き換えられる可能性が高いのかといった要因をモニタして、分岐命令が次に実行されて成立すると判断されたときにＢＴＢヒットが発生する可能性を表わす方法は知ることができ、改善された割当ポリシーを、ＢＴＢ割当指定子などを利用して命令ごとに決定および設定することは可能である。
【００４１】
上記フローチャートの実行は用途に応じて異なっていてもよい。さらに、フローチャートのプロセスの多くは結合されて同時に実行されてもよく、あるいはさらに多くのプロセスに拡張されてもよい。したがって、本明細書に記載されるフローチャートは例示にすぎない。たとえば、図９の判断菱形１６４において、現在の分岐が成立する回数の絶対カウンタを使用せずに、分岐が成立する回数のパーセンテージが使用されてもよく、この値は、分岐成立カウンタの値（たとえば、カウンタ１０２、１０６、または１１０）を、対応する分岐命令（たとえば、それぞれ、分岐＿Ａ、分岐＿Ｂ、または分岐＿Ｃ）に対する分岐実行カウンタの値（たとえば、それぞれ、カウンタ１０１、１０５、または１０９）で割ることによって計算されてもよい。さらに別の実施形態において、分岐が成立しない回数のパーセンテージが使用されてもよく、この場合、対応する分岐命令が成立しない回数を追跡するためにカウンタ（カウンタ１０２、１０６、または１１０と同様の）が使用されてもよい。また、フローのプロセスの他の拡張も本発明の範囲に包含されるものである。
【００４２】
一実施形態において、分岐命令が実行されるデータ処理システムにおける情報の処理方法は、命令を受け取ることおよびデコードすること、命令が別の命令の実行または当該命令の実行の比較結果によって設定される条件コード値に基づく成立分岐命令であると判断すること、ならびに成立分岐命令の分岐先を格納する分岐先バッファのエントリを割り当てるかどうかを判断するための成立分岐命令と関連付けられている命令指定子を使用することを含む。
【００４３】
さらなる実施形態において、方法は、命令を比較および分岐命令としてデコードすることを含む。
さらに別の実施形態において、別の命令の実行または上記命令の実行の比較結果によって設定される条件コード値は、比較結果を提供するための２つのオペランドが等しいか否かを比較することをさらに含む。
【００４４】
さらに別の実施形態において、別の命令または上記命令の比較結果によって設定される条件コード値は、２つの値を比較することをさらに含む。
さらに別の実施形態において、方法は、命令指定子を命令の所定フィールドとして実装することを含む。
【００４５】
さらに別の実施形態において、条件コード値は、桁上げ値、ゼロ値、負値、またはオーバーフロー値の１つを表わす。
別の実施形態において、方法は、条件付き分岐または無条件分岐のいずれかである第１の分岐命令を受け取ることおよびデコードすることを含み、第１の分岐命令は第１の分岐先バッファ割当指定子を有し、第１の分岐命令と関連付けられている分岐が成立する場合は、第１の分岐先バッファ割当指定子に基づいて第１の分岐命令の分岐先を格納する第１の分岐先バッファエントリを割り当てること、第１の分岐命令の実行を終了すること、条件付き分岐または無条件分岐のいずれかである第２の分岐命令を受け取ること、およびデコードすることを含み、第２の分岐命令は第２の分岐先バッファ割当指定子を有し、第２の分岐命令と関連付けられている分岐が成立する場合は、第２の分岐先バッファ割当指定子に基づいて第２の分岐命令の分岐先を格納する第２の分岐先バッファエントリを割り当てないと判断すること、ならびに第２の分岐命令の実行を終了することを含む。
【００４６】
別の実施形態のさらなる実施形態において、方法は、第２の分岐命令を無条件分岐命令としてデコードすることを含む。
別の実施形態のさらに別の実施形態において、方法は、第１の分岐先バッファ割当指定子と第２の分岐先バッファ割当指定子を、それぞれ、第１の分岐命令と第２の分岐命令との一部分として実装することを含む。
【００４７】
別の実施形態のさらに別の実施形態において、方法は、分岐が命令実行中に条件コードレジスタの条件コード値に基づいて成立する条件付き分岐命令を含む、第１の分岐命令または第２の分岐命令の少なくとも１つを含む。さらにさらなる実施形態において、方法は、比較結果を提供するために、２つのオペランドが等しいか否かを比較することによって、第１の分岐命令、第２の分岐命令、または別の命令の１つの実行の比較結果から条件コード値を決定することを含む。別のさらにさらなる実施形態において、方法は、論理演算、算術演算、または比較演算を行う追加命令に基づいて条件コード値を決定することを含む。別のさらにさらなる実施形態において、方法は、条件コード値を桁上げ値、ゼロ値、負値、またはオーバーフロー値の１つとして実装することを含む。
【００４８】
一実施形態において、データ処理システムは、通信バスと、通信バスに結合された処理ユニットとを含む。処理ユニットは、命令を受け取ってデコードする命令デコーダ、命令デコーダに結合された実行ユニット、命令デコーダに結合されて分岐命令の分岐先を格納する分岐先バッファを備える命令フェッチユニット、条件コードレジスタ、ならびに命令デコーダおよび命令フェッチユニットに結合された制御回路を含み、命令フェッチユニットは、受け取られた分岐命令と関連付けられている分岐先バッファ割当指定子を使用して受け取られた分岐命令の分岐先を格納する分岐先バッファのエントリを割り当てるかどうかを判断する。
【００４９】
さらなる実施形態において、データ処理システムは、通信バスに結合されたメモリと通信バスに結合された１つ以上のシステムモジュールとを含む。
さらに別の実施形態において、受け取られた分岐命令は、別の命令または受け取られた分岐命令の実行の比較結果によって設定される１つ以上の条件コード値に基づいて成立分岐命令であると判断される。
【００５０】
さらに別の実施形態において、受け取られた分岐命令は無条件分岐であり、命令フェッチユニットは分岐先バッファ割当指定子に応じて分岐先バッファにエントリを割り当てない。
【００５１】
さらに別の実施形態において、命令フェッチユニットは、第１の分岐命令を受け取り、第１の分岐命令が成立すると判断されて分岐先バッファにおいてミスヒットとなるとき、第１の分岐命令に対する分岐先バッファ割当指定子に応じて第１の分岐命令に対する分岐先バッファエントリを割り当てると判断する。命令フェッチユニットは、後続の第２の分岐命令を受け取り、第２の分岐命令が成立すると判断されて分岐先バッファにおいてミスヒットとなるとき、第２の分岐命令に対する分岐先バッファ割当指定子に応じて第２の分岐命令に対する分岐先バッファエントリを割り当てない。
【００５２】
さらに別の実施形態において、条件コードレジスタで指定される同じ条件に対して、命令フェッチユニットは、第１の分岐命令が成立して分岐先バッファにおいてミスヒットとなるときに第１の分岐命令に対して分岐先バッファエントリを割り当て、第２の分岐命令が成立して分岐先バッファにおいてミスヒットとなるときに第２の分岐命令に対して分岐先バッファエントリを割り当てない。
【００５３】
さらに別の実施形態において、条件コードレジスタは、命令に基づいて値を格納し、命令は論理演算、算術演算、または比較演算の１つを行う。
前述の明細において、本発明を具体的な実施形態を参照して説明してきた。しかし、様々な修正および変更を特許請求の範囲に記載の本発明の範囲から逸脱することなく成し得ることが当業者には理解される。たとえば、ブロック図は、図示されたものとは異なるブロックを含んでもよく、かつブロックが多くても少なくてもよく、あるいは配置が異なっていてもよい。また、フローチャートは、配置が異なっていてもよく、ステップが多くても少なくてもよく、あるいは複数のステップに分けられうるステップ、または互いに同時に実行されうるステップを有してもよい。また、本明細書に記載されるすべての回路は、シリコンなどの半導体材料、あるいはシリコンなどの半導体材料ソフトウェアコード表現のいずれで実施されてもよいことを理解されたい。したがって、明細と図は、限定的でなく例示的であると考えられるものであり、すべてのこのような修正は本発明の範囲に含まれるものとする。
【００５４】
具体的な実施形態に関連して、効果、他の利点、および課題解決を説明した。ただし、かかる効果、利点、課題解決、およびすべての効果、利点、課題解決を生じさせ得るか顕著にし得る任意要素は、いずれかまたはすべての請求項の重要、必要または不可欠な特徴または要素とみなされるべきではない。本明細書で使用される用語「備える」またはその他の変形体は、要素の列挙を含むプロセス、方法、物品、または装置がこれらの要素のみを含むのではなく、明示的に列挙されていない他の要素、あるいはかかるプロセス、方法、物品、または装置に固有の他の要素を含んでもよいように非限定的な包含をその範囲としてカバーするものとする。
【図面の簡単な説明】
【００５５】
【図１】本発明の一実施形態によるデータ処理システムを、ブロック図で示す。
【図２】本発明の一実施形態による図１のプロセッサの一部分を、ブロック図で示す。
【図３】本発明の一実施形態による図２のプロセッサによって実行される分岐命令を示す。
【図４】本発明の一実施形態による選択的ＢＴＢ割当の方法を、フローチャート形式で示す。
【図５】本発明の一実施形態による第１および第２の分岐命令に関する選択的ＢＴＢ割当を、フローチャート形式で示す。
【図６】本発明の一実施形態によるコードのセグメント内の各分岐命令と関連付けられている複数のカウンタを示す。
【図７】本発明の一実施形態によるコードセグメントの最後のＮ個の成立分岐のリストの様々なタイムスナップショットを示す。
【図８】本発明の一実施形態による、図６のカウンタを更新する方法と図７の最後のＮ個の成立分岐のリストとを、フローチャートで示す。
【図９】本発明の一実施形態による、図８のフローの結果として決定される、得られたカウント値を使って分岐命令を解析する方法を、フローチャートで示す。
【図１】
2010500653.tif 000003
【図２】
2010500653.tif 000004
【図３】
2010500653.tif 000005
【図４】
2010500653.tif 000006
【図５】
2010500653.tif 000007
【図６】
2010500653.tif 000008
【図７】
2010500653.tif 000009
【図８】
2010500653.tif 000010
【図９】
2010500653.tif 000011
【国際調査報告】
2010500653.tif 000012
2010500653.tif 000013
2010500653.tif 000014