(57)【要約】プロセッサ［１００］は、複数のエントリ［１１１］を有する分岐ターゲットバッファ（ＢＴＢ）［１１０］を含み、各エントリは、分岐命令であると予測される関連する命令ポインタ［１０１］値に対応する。各ＢＴＢエントリは、分岐命令の予測分岐ターゲットアドレスを記憶し、さらに、予測分岐ターゲットアドレスに関連する命令のブロック内の次の分岐がリターン命令であると予測されるかどうかを示す情報を記憶する。次の分岐がリターン命令であると予測されることをＢＴＢが示していることに応じて、プロセッサは、この予測リターン命令に対するリターンアドレスを記憶するリターンスタック［１１５］へのアクセスを開始する。プロセッサは、ＢＴＢに記憶されたリターン予測に応じてリターンスタックへのアクセスを開始することによって、リターンアドレスを識別する際の遅延を低減し、それによって、処理効率を向上させる。【選択図】図１
2021532471.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサ［１００］の分岐ターゲットバッファ（ＢＴＢ）［１１０］の第１のエントリ［１１１］に基づいて、第１の分岐リターン命令の予測を識別することと、
前記第１の分岐リターン命令の予測を識別したことに応じて、前記プロセッサの分岐リターンアドレスのスタック［１１５］へのアクセスを開始することと、を含む、
方法。
【請求項２】
前記第１のエントリは、
前記第１の分岐リターン命令の予測を示す第１のリターンフィールド［１１３］と、
第１の予測分岐アドレスを示す第１の分岐フィールド［１１２］と、を含む、
請求項１の方法。
【請求項３】
前記第１の分岐リターン命令の予測は、前記第１の予測分岐アドレスがリターン命令に対応するという予測を含む、
請求項２の方法。
【請求項４】
前記第１の分岐リターン命令が誤って予測されたことを識別したことに応じて、前記第１のエントリを、リターン予測がないことを示すように設定することをさらに含む、
請求項３の方法。
【請求項５】
前記第１のエントリがリターン命令の予測を示していることを判別したことに応じて、前記ＢＴＢへの後続のアクセスを抑制することをさらに含む、
請求項１の方法。
【請求項６】
前記ＢＴＢの第２のエントリに基づいて、第２の分岐リターン命令の予測を識別することと、
前記第２の分岐リターン命令の予測を識別したことに応じて、前記分岐リターンアドレスのスタックへのアクセスを開始することと、をさらに含む、
請求項１の方法。
【請求項７】
第１のプログラムカウンタ値［１０１］に基づいて、分岐ターゲットバッファ（ＢＴＢ）［１１０］の第１のエントリにアクセスすることと、
前記ＢＴＢの前記第１のエントリの第１の分岐アドレスフィールド［１１２］に基づいて、第１の命令アドレスに分岐することと、
前記ＢＴＢの前記第１のエントリの第１のリターンフィールド［１１３］が、前記第１の命令アドレスがリターン命令に対応することを示していることに応じて、分岐リターンアドレスのスタック［１１５］へのアクセスを開始することと、を含む、
方法。
【請求項８】
前記第１の命令アドレスが前記リターン命令に対応することを判別したことに応じて、リターンの指標を前記第１のリターンフィールドに記憶することをさらに含む、
請求項７の方法。
【請求項９】
前記分岐リターンアドレスのスタックへのアクセスを開始することは、前記第１の命令アドレスへの分岐と同時に、前記分岐リターンアドレスのスタックから命令アドレスを返すことを含む、
請求項７の方法。
【請求項１０】
前記第１のリターンフィールドが、前記第１の命令アドレスが前記リターン命令に対応することを示していることに応じて、前記ＢＴＢへの後続のアクセスを抑制することをさらに含む、
請求項７の方法。
【請求項１１】
前記後続のアクセスを抑制することは、予測リターン命令に対してＢＴＢヒットをもたらすと予想される前記ＢＴＢへのアクセスを抑制することを含む、
請求項１０の方法。
【請求項１２】
第２のプログラムカウンタ値に基づいて、前記ＢＴＢの第２のエントリにアクセスすることと、
前記ＢＴＢの前記第１のエントリの第２の分岐アドレスフィールドに基づいて、第２の命令アドレスに分岐することと、
前記ＢＴＢの前記第２のエントリの第２のリターンフィールドが、前記第２の命令アドレスがリターン命令に対応することを示していることに応じて、前記分岐リターンアドレスのスタックへのアクセスを開始することと、をさらに含む、
請求項７の方法。
【請求項１３】
前記リターンが誤って予測されたことを識別したことに応じて、前記第１のエントリを、リターン予測がないことを示すように設定することをさらに含む、
請求項７の方法。
【請求項１４】
プロセッサ［１００］であって、
第１の分岐リターン命令の予測を識別する第１のエントリ［１１１］を含む分岐ターゲットバッファ（ＢＴＢ）［１１０］と、
分岐リターンアドレスのスタック［１１５］と、
前記ＢＴＢの前記第１のエントリが、前記第１の分岐リターン命令の予測を示していることに応じて、前記分岐リターンアドレスのスタックへのアクセスを開始するように構成されたプロセッサコアと、を備える、
プロセッサ。
【請求項１５】
前記ＢＴＢの前記第１のエントリは、
前記第１の分岐リターン命令の予測を示す第１のリターンフィールド［１１３］と、
第１の予測分岐アドレスを示す第１の分岐フィールド［１１２］と、を含む、
請求項１４のプロセッサ。
【請求項１６】
前記第１の分岐リターン命令の予測は、前記第１の予測分岐アドレスがリターン命令に対応するという予測を含む、
請求項１５のプロセッサ。
【請求項１７】
前記プロセッサコアは、
前記第１の分岐リターン命令が誤って予測されたことを識別したことに応じて、前記第１のエントリを、リターン予測がないことを示すように設定するように構成されている、
請求項１５のプロセッサ。
【請求項１８】
前記プロセッサコアは、
前記第１のエントリがリターン命令を示していることを判別したことに応じて、前記ＢＴＢへの後続のアクセスを抑制するように構成されている、
請求項１４のプロセッサ。
【請求項１９】
前記プロセッサコアは、
前記第１のエントリがリターン命令を示していることを判別したことに応じて、前記第１の分岐リターン命令にアクセスすることが予想される前記ＢＴＢへの後続のアクセスを抑制するように構成されている、
請求項１４のプロセッサ。
【請求項２０】
前記ＢＴＢは、第２の分岐リターン命令の予測を示す第２のエントリを含み、
前記プロセッサコアは、前記第２の分岐リターン命令の予測を識別したことに応じて、前記分岐リターンアドレスのスタックへのアクセスを開始するように構成されている、
請求項１４のプロセッサ。
【発明の詳細な説明】
【背景技術】
【０００１】
プロセッサは、処理効率を高めるために、１つ以上の予測処理技術を採用することができる。予測処理技術の一種として分岐予測と呼ばれるものがあり、これにより、プロセッサは、分岐命令の結果を予測して、処理装置が分岐命令を評価する前に、予測した分岐に従って後続の命令を投機的に実行し始めることができる。プロセッサは、処理効率をさらに高めるために、分岐ターゲットバッファ（ＢＴＢ）と呼ばれる分岐ターゲット構造を採用する。ＢＴＢは、予測した分岐のアドレス情報を記憶する。しかし、従来のＢＴＢ構造は、様々なタイプのプログラム分岐を効率的に実行することをサポートしていない。
【０００２】
本開示は、添付の図面を参照することによってより良く理解することができ、当業者にはその多数の特徴及び利点が明らかになる。異なる図面で同じ符号を使用する場合は、類似又は同一の要素であることを意味する。
【図面の簡単な説明】
【０００３】
【図１】いくつかの実施形態による、分岐命令の対象となる命令ブロックがリターン命令を含むかどうかを予測するためのリターン予測情報を含む分岐ターゲットバッファ（ＢＴＢ）を採用するプロセッサのブロック図である。
【図２】いくつかの実施形態による、分岐命令の対象となる命令ブロックがリターン命令を含むことをＢＴＢが示すことに応じて、図１のプロセッサがリターンアドレスのスタックへのアクセスを開始する一例を示す図である。
【図３】いくつかの実施形態による、分岐命令の対象となる命令ブロックがリターン命令を含むことをＢＴＢが示すことに応じて、プロセッサがリターンアドレスのスタックへのアクセスを開始する方法のフローチャートである。
【発明を実施するための形態】
【０００４】
図１〜図３は、プロセッサでのリターン命令に対するリターンアドレスを識別する際の遅延を低減するための技術を示す。プロセッサは、複数のエントリを有する分岐ターゲットバッファ（ＢＴＢ）を含み、各エントリは、分岐命令であると予測される関連する命令ポインタ値に対応する。各ＢＴＢエントリは、分岐命令に対する予測分岐ターゲットアドレスを記憶し、さらに、予測分岐ターゲットアドレスに関連する命令のブロック内の次の分岐がリターン命令であると予測されるかどうかを示す情報を記憶する。次の分岐がリターン命令であると予測されることをＢＴＢが示すことに応じて、プロセッサは、予測リターン命令に対するリターンアドレスを記憶するリターンスタックへのアクセスを開始する。プロセッサは、ＢＴＢに記憶されたリターン予測に応じてリターンスタックへのアクセスを開始することによって、リターンアドレスを識別する際の遅延を減らし、これにより、処理効率を向上させる。
【０００５】
本明細書に記載された技術とは対照的に、従来のプロセッサは、予測されたリターン情報を記憶しない。したがって、従来のプロセッサは、プロセッサのフェッチステージが、現在の命令ポインタ値がリターン命令に対応することを識別するまで、リターンスタックへのアクセスを開始しない。リターンスタックからリターンアドレスを取得するには多数のクロックサイクルを必要とするので、プロセッサでの動作が遅れる可能性がある。本明細書に記載された技術を用いると、プロセッサは、リターンスタックへのアクセスを早期に開始し、その結果、命令ポインタ値がリターン命令に到達した場合に、リターンアドレスがスタックから取得され、プロセッサにおいて使用可能になる。したがって、予測リターン情報を記憶することで、リターンアドレスへのアクセスの高速化をサポートし、結果として処理効率が向上する。
【０００６】
図１は、いくつかの実施形態による、分岐命令の対象となる命令ブロックがリターン命令を含むかどうかを予測するためのリターン予測情報を含む分岐ターゲットバッファ（ＢＴＢ）を採用するプロセッサ１００を示す図である。プロセッサは、命令セット（コンピュータプログラム等）を実行して、電子デバイスに代わって特定のタスクを実行する。いくつかの実施形態では、プロセッサ１００は、デスクトップ又はラップトップコンピュータ、サーバ、ゲームコンソール、スマートフォン、タブレット等の様々な電子デバイスのうち何れかに組み込まれている。
【０００７】
命令の実行をサポートするために、プロセッサ１００は、命令フェッチステージ１０２及び付加的なパイプラインステージ１０４を有する命令パイプラインを含む。付加的なパイプラインステージ１０４は、フェッチされた命令をオペレーションのセットにデコードするステージと、デコードされたオペレーションを実行する実行ステージと、実行された命令をリタイアするリタイアステージと、を含む。いくつかの実施形態では、プロセッサ１００は、１つ以上のメモリコントローラ、入出力コントローラ、メモリ構造（例えば、１つ以上のキャッシュ）等を含む、命令の実行をサポートするための付加的なモジュールを含むことが理解されるであろう。さらに、いくつかの実施形態では、プロセッサ１００は、付加的な命令パイプラインを含むことが理解されるであろう。例えば、いくつかの実施形態では、プロセッサ１００は、複数のプロセッサコアを含み、各プロセッサコアは、命令セットを実行するための少なくとも１つの命令パイプラインを有する。さらに、いくつかの実施形態では、プロセッサ１００は、例えば、描画、表示等のグラフィックス処理に関連するオペレーションを実行するための１つ以上のグラフィックス処理装置（ＧＰＵ）等のように、特別なタスクに関連するオペレーションを実行するように特別に設計された付加的な処理装置を含む。
【０００８】
図１に示す実施形態に戻ると、命令フェッチステージ１０２は、一般に、命令ポインタ１０１に基づいて、命令キャッシュ１０３から命令を取得（フェッチ）するように構成されている。当業者に理解されるように、命令ポインタ１０１は、フェッチされる現在の命令を示すアドレス値であり、実行される命令のプログラムフローを変更するオペレーションを実行することによって変更可能である。例えば、いくつかの実施形態では、分岐命令は、例えば、分岐命令又は関連する命令によって指定されたデータの評価に基づいて、命令ポインタ１０１を変更する。
【０００９】
分岐命令の効率的な実行をサポートするために、プロセッサ１００は、リターンスタック１１５と、分岐ターゲットバッファ（ＢＴＢ）１１０と、を含む。リターンスタック１１５は、プロセッサ１００で実行されるリターン命令のリターンアドレスを記憶するスタックメモリ構造である。動作中、フェッチステージ１０２は、コールタイプである分岐命令を識別することに応じて、指定された命令ポインタ値をリターンアドレスとして生成する。いくつかの実施形態では、命令フェッチステージ１０２は、指定された値を命令ポインタ１０１に追加することによってリターンアドレスを生成し、この指定された値は、命令パイプラインで実行される命令のサイズ（例えば、幅）に対応する。命令フェッチステージは、リターンスタック１１５上のリターンアドレスをプッシュする。リターン命令の場合、フェッチステージ１０２は、本明細書でさらに説明するように、リターンスタック１１５の最上位からリターンアドレスを取得（ポップ）し、リターンアドレスを命令ポインタ１０１の値として記憶することによって、リターンアドレスを識別する。
【００１０】
ＢＴＢ１１０は、複数のエントリ（例えば、エントリ１１１）を含み、各エントリは、分岐命令に関連する異なる命令ポインタ値に対応する。命令フェッチステージ１０２は、命令サイクル毎に、命令ポインタ１０１をＢＴＢ１１０に提供する。ＢＴＢ１１０は、受信した命令ポインタ値にエントリが対応すること（ＢＴＢヒットと呼ばれる）を識別したことに応じて、識別したエントリのＢＴＡフィールド（例えば、エントリ１１１のＢＴＡフィールド１１２）から分岐ターゲットアドレス（ＢＴＡ）を取得し、そのＢＴＡを命令フェッチステージ１０２に提供する。このように、ＢＴＢ１１０は、プロセッサ１００が分岐ターゲットアドレスを迅速に識別するための効率的な方法を提供する。
【００１１】
いくつかの実施形態では、プロセッサは、非投機的及び投機的の両方で、新規エントリの割り当て及びＢＴＡの変更を含めてＢＴＢ１１０のエントリを変更することができる。非投機的な更新は、パイプラインステージ１０４によって実行される。例えば、命令を分岐命令として識別したことに応じて、デコードステージは、分岐命令のための命令ポインタ値をＢＴＢ１１０に提供する。これに応じて、ＢＴＢ１１０は、受信した命令ポインタ値にエントリが確実に割り当てられるようにする。さらに、実行ユニットは、分岐命令について計算されたＢＴＡをＢＴＢ１１０に提供し、ＢＴＢ１１０は、ＢＴＡを、対応するエントリのＢＴＡフィールドに記憶する。
【００１２】
分岐予測をさらにサポートするために、プロセッサ１００は、条件付き予測器１０８を含む。条件付き予測器１０８は、プロセッサ１００の命令パイプラインで実行される分岐命令の履歴（分岐履歴１０９として示されている）を監視し、１つ以上の既知の分岐予測技術に従って分岐履歴１０９のパターンを識別する。条件付き予測器１０８は、識別されたパターンと各分岐の実際の方向とに基づいて、各分岐命令が実行されるか否か（分岐命令の方向と呼ばれることもある）を予測する。
【００１３】
ＢＴＢ１１０に戻ると、各エントリは、記憶されたＢＴＡに加えて、対応するＢＴＡに関連する命令のブロック内の次の分岐命令がリターン命令であると予測されるかどうかを示すリターン予測フィールド（例えば、リターン予測フィールド１１３）を含む。説明を容易にするために、本明細書では、このようなシーケンスを「分岐リターン」シーケンスと呼び、このシーケンスを開始する分岐命令を分岐リターンシーケンスの「ソース（source）」分岐と呼ぶ。このようなシーケンスの例を以下に示す。
ＪＭＰ  ＡＤＤＲＥＳＳ  Ａ  （ソース分岐命令）
ＬＤＸ，  ＤＡＴＡ１        （レジスタＸに値をロードする）
ＡＤＤ  Ｘ，Ｙ              （レジスタＸとレジスタＹとに値を追加する）
ＲＥＴＵＲＮ
対照的に、以下は、リターン命令が、所定の分岐命令に続く次の分岐命令ではない（したがって、分岐リターンシーケンスではない）シーケンスの例である。
ＪＭＰ  ＡＤＤＲＥＳＳ  Ａ  （分岐命令）
ＬＤＸ，  ＤＡＴＡ１        （レジスタＸに値をロードする）
ＡＤＤ  Ｘ，Ｙ              （レジスタＸとレジスタＹとに値を追加する）
ＪＭＰ  ＡＤＤＲＥＳＳ  Ｂ  （分岐リターンシーケンスではない分岐命令）
【００１４】
ＢＴＢ１１０は、閾値回数の分岐リターンシーケンスを識別したことに応じて、予測リターンを示すリターン予測フィールドを設定する。ＢＴＢ１１０は、上述したように、命令フェッチステージ１０２から命令ポインタ値を受信したことに応じて、受信した命令ポインタ値がＢＴＢヒットとなるかどうかを判別する。ＢＴＢ１１０は、ＢＴＢヒットに応じて、ＢＴＢヒットを引き起こしたエントリのＢＴＡフィールドにおけるＢＴＡを命令フェッチステージ１０２に提供する。さらに、ＢＴＢ１１０は、対応するリターン予測フィールドが予測リターンを示しているかどうかを判別する。予測リターンを示している場合、ＢＴＢ１１０は、リターンスタック１１５でポップオペレーションを開始する。したがって、予測リターン命令に到達したときに、リターンアドレスが迅速なアクセスのために利用可能である。
【００１５】
プログラムフロー内の次の分岐命令がリターン命令でない場合には、パイプラインステージ１０４の１つ以上は、誤って予測されたリターンをＢＴＢ１１０に示す。いくつかの実施形態では、誤って予測されたリターンに応じて、ＢＴＢ１１０は、分岐リターンシーケンスのソース分岐命令に対応するエントリのリターン予測フィールドをクリアする。他の実施形態では、ＢＴＢ１１０は、誤って予測されたリターンが閾値回数発生したことに応じて、リターン予測フィールドをクリアする。
【００１６】
いくつかの実施形態では、プロセッサ１００は、リターンスタック１１５へのアクセスを開始することに加えて、予測リターンに応じて追加のアクションを実行する。例えば、いくつかの実施形態では、プロセッサ１００は、予測リターンに応じて、予測リターン命令自体にＢＴＢヒットをもたらすと予想されるＢＴＢ１１０への後続のアクセスを抑制する。このアクセスを抑制することによって、プロセッサ１００は、電力等のシステムリソースを節約する。
【００１７】
図２は、いくつかの実施形態による、分岐命令の対象となる命令ブロックがリターン命令を含むことをＢＴＢ１１０が示すことに応じて、プロセッサ１００がリターンスタック１１５へのアクセスを開始する一例２００を示す図である。例２００では、エントリ１１１は、エントリ１１１に対応する分岐命令のＢＴＡを記憶するためのＢＴＡフィールド１１２を含む。さらに、エントリ１１１のリターン予測フィールド１１３は、分岐命令が分岐リターンシーケンスの分岐元であると予測されることを示す値（図示した例では「Ｙ」として示されている）に設定される。すなわち、リターン予測フィールド１１３は、エントリ１１１に対応する分岐命令に関連する命令のブロック内の次の分岐命令がリターン命令であると予測されることを示す状態にある。説明を簡単にするために、本明細書では、この状態を、予測リターンを示すリターン予測フィールドと呼ぶ。
【００１８】
例２００では、命令フェッチステージ１０２は、命令ポインタ１０１をＢＴＢ１１０に提供する。命令ポインタ１０１の提供によって、エントリ１１１でＢＴＢヒットが発生する。すなわち、ＢＴＢ１１０は、エントリ１１１が、命令ポインタ１０１に対応するメモリアドレスに関連付けられていることを識別する。ＢＴＢヒットに応じて、ＢＴＢ１１０は、ＢＴＡフィールド１１２に記憶されたＢＴＡを命令フェッチステージ１０２に提供する。さらに、リターン予測フィールド１１３が予測リターンを示すことに応じて、ＢＴＢ１１０は、命令フェッチステージ１０２に提供するために、リターンスタック１１５へのアクセスを開始して、スタックの最上位にあるアドレスを取得（ポップ）する。
【００１９】
図３は、いくつかの実施形態による、分岐命令の対象となる命令ブロックがリターン命令を含むことをＢＴＢが示すことに応じて、プロセッサがリターンアドレスのスタックへのアクセスを開始する方法３００のフローチャートである。ブロック３０２において、ＢＴＢは、プロセッサのフェッチステージから命令ポインタ値を受信する。ブロック３０４において、ＢＴＢは、受信した命令ポインタに対応するエントリを識別する。ブロック３０６において、ＢＴＢは、識別したエントリのリターン予測フィールドが予測リターンを示すかどうかを識別する。示さない場合、方法フローはブロック３１０に進み、ＢＴＢは、識別したＢＴＢエントリにおけるＢＴＡをフェッチステージに提供する。
【００２０】
ブロック３０６において、ＢＴＢが、識別したエントリのリターン予測フィールドが予測リターンを示すことを識別した場合、方法フローはブロック３０８に進み、ＢＴＢは、リターンスタックの最上位からのリターンアドレスの取得を開始する。方法フローはブロック３１０に進み、ＢＴＢは、識別したＢＴＢエントリにおけるＢＴＡをフェッチステージに提供する。
【００２１】
本明細書に開示されるように、いくつかの実施形態では、方法は、プロセッサの分岐ターゲットバッファ（ＢＴＢ）の第１のエントリに基づいて、第１の分岐リターン命令の予測を識別することと、第１の分岐リターン命令の予測を識別したことに応じて、プロセッサの分岐リターンアドレスのスタックへのアクセスを開始することと、を含む。一態様では、第１のエントリは、第１の分岐リターン命令の予測を示す第１のリターンフィールドと、第１の予測分岐アドレスを示す第１の分岐フィールドと、を含む。別の態様では、第１の分岐リターン命令の予測は、第１の予測分岐アドレスがリターン命令に対応するという予測を含む。さらに別の態様では、方法は、第１の分岐リターン命令が誤って予測されたことを識別したことに応じて、第１のエントリを、リターン予測がないことを示すように設定することを含む。
【００２２】
一態様では、方法は、第１のエントリがリターン命令の予測を示していることを判別したことに応じて、ＢＴＢへの後続のアクセスを抑制することを含む。さらに別の態様では、方法は、ＢＴＢの第２のエントリに基づいて、第２の分岐リターン命令の予測を識別することと、第２の分岐リターン命令の予測を識別したことに応じて、分岐リターンアドレスのスタックへのアクセスを開始することと、を含む。
【００２３】
本明細書に開示されるように、いくつかの実施形態では、方法は、第１のプログラムカウンタ値に基づいて、分岐ターゲットバッファ（ＢＴＢ）の第１のエントリにアクセスすることと、ＢＴＢの第１のエントリの第１の分岐アドレスフィールドに基づいて、第１の命令アドレスに分岐することと、ＢＴＢの第１のエントリの第１のリターンフィールドが、第１の命令アドレスがリターン命令に対応することを示していることに応じて、分岐リターンアドレスのスタックへのアクセスを開始することと、を含む。一態様では、方法は、第１の命令アドレスがリターン命令に対応することを判別したことに応じて、リターンの指標を第１のリターンフィールドに記憶することを含む。さらに別の態様では、分岐リターンアドレスのスタックへのアクセスを開始することは、第１の命令アドレスへの分岐と同時に、分岐リターンアドレスのスタックから命令アドレスを返すことを含む。さらに別の態様では、方法は、第１のリターンフィールドが、第１の命令アドレスがリターン命令に対応することを示していることに応じて、ＢＴＢへの後続のアクセスを抑制することを含む。
【００２４】
一態様では、後続のアクセスを抑制することは、予測リターン命令に対してＢＴＢヒットをもたらすと予想されるＢＴＢへのアクセスを抑制することを含む。別の態様では、方法は、第２のプログラムカウンタ値に基づいて、ＢＴＢの第２のエントリにアクセスすることと、ＢＴＢの第１のエントリの第２の分岐アドレスフィールドに基づいて、第２の命令アドレスに分岐することと、ＢＴＢの第２のエントリの第２のリターンフィールドが、第２の命令アドレスがリターン命令に対応することを示していることに応じて、分岐リターンアドレスのスタックへのアクセスを開始することと、を含む。さらに別の態様では、方法は、リターンが誤って予測されたことを識別したことに応じて、第１のエントリを、リターン予測がないことを示すように設定することを含む。
【００２５】
本明細書に開示されるように、いくつかの実施形態では、プロセッサは、第１の分岐リターン命令の予測を識別する第１のエントリを含む分岐ターゲットバッファ（ＢＴＢ）と、分岐リターンアドレスのスタックと、ＢＴＢの第１のエントリが、第１の分岐リターン命令の予測を示していることに応じて、分岐リターンアドレスのスタックへのアクセスを開始するように構成されたプロセッサコアと、を備える。一態様では、ＢＴＢの第１のエントリは、第１の分岐リターン命令の予測を示す第１のリターンフィールドと、第１の予測分岐アドレスを示す第１の分岐フィールドと、を含む。別の態様では、第１の分岐リターン命令の予測は、第１の予測分岐アドレスがリターン命令に対応するという予測を含む。
【００２６】
一態様では、プロセッサコアは、第１の分岐リターン命令が誤って予測されたことを識別したことに応じて、第１のエントリを、リターン予測がないことを示すように設定するように構成されている。別の態様では、プロセッサコアは、第１のエントリがリターン命令を示していると判別したことに応じて、ＢＴＢへの後続のアクセスを抑制するように構成されている。さらに別の態様では、プロセッサコアは、第１のエントリがリターン命令を示していると判別したことに応じて、第１の分岐リターン命令にアクセスすることが予想されるＢＴＢへの後続のアクセスを抑制するように構成されている。さらに別の態様では、ＢＴＢは、第２の分岐リターン命令の予測を示す第２のエントリを含む。プロセッサコアは、第２の分岐リターン命令の予測を識別したことに応じて、分岐リターンアドレスのスタックへのアクセスを開始するように構成されている。
【００２７】
コンピュータ可読記憶媒体は、命令及び／又はデータをコンピュータシステムに提供するために、使用中にコンピュータシステムによってアクセス可能な任意の非一時的な記憶媒体、又は、非一時的な記憶媒体の組み合わせを含むことができる。このような記憶媒体としては、光学媒体（例えば、コンパクトディスク（ＣＤ）、デジタル多用途ディスク（ＤＶＤ）、ブルーレイ（登録商標）ディスク）、磁気媒体（例えば、フロッピー（登録商標）ディスク、磁気テープ若しくは磁気ハードドライブ）、揮発性メモリ（例えば、ランダムアクセスメモリ（ＲＡＭ）若しくはキャッシュ）、不揮発性メモリ（例えば、リードオンリーメモリ（ＲＯＭ）若しくはフラッシュメモリ）、又は、微小電気機械システム（ＭＥＭＳ）ベースの記憶媒体が挙げられるが、これらに限定されない。コンピュータ可読記憶媒体は、コンピューティングシステムに組み込まれてもよく（例えば、システムＲＡＭ、ＲＯＭ等）、コンピューティングシステムに固定的に取り付けられてもよく（例えば、磁気ハードドライブ等）、コンピューティングシステムに取り外し可能に取り付けられてもよく（例えば、光学ディスク、ユニバーサルシリアルバス（ＵＳＢ）ベースのフラッシュメモリ等）、有線又は無線ネットワークを介してコンピュータシステムに接続されてもよい（例えば、ネットワークアクセスストレージ（ＮＡＳ）等）。
【００２８】
いくつかの実施形態では、上記の技術の特定の態様は、ソフトウェアを実行する処理システムの１つ以上のプロセッサによって実施されてもよい。ソフトウェアは、非一時的なコンピュータ可読記憶媒体に記憶され、又は、非一時的なコンピュータ可読記憶媒体上に他の形態で具体化された実行可能命令の１つ以上のセットを含む。ソフトウェアは、１つ以上のプロセッサによって実行される場合に、上記の技術の１つ以上の態様を実施するように１つ以上のプロセッサを操作する命令及び特定のデータを含むことができる。非一時的なコンピュータ可読記憶媒体は、例えば、磁気ディスク若しくは光ディスク記憶デバイス、フラッシュメモリ、キャッシュ、ランダムアクセスメモリ（ＲＡＭ）等のソリッドステート記憶デバイス、又は、他の１つ以上の不揮発性メモリデバイス等を含むことができる。非一時的なコンピュータ可読記憶媒体に記憶される実行可能命令は、ソースコード、アセンブリ言語コード、オブジェクトコード、又は、１つ以上のプロセッサによって解釈されるか、別の方法で実行可能な他の命令フォーマットであってもよい。
【００２９】
概要説明において上述したアクティビティ又は要素の全てが必須でないこと、特定のアクティビティ又はデバイスの一部が必要とされない場合があること、及び、１つ以上の追加のアクティビティを実行してもよいし、要素を含めてもよいことに留意されたい。さらに、アクティビティがリストされる順序は、必ずしもそれらが実行される順序ではない。また、これらの概念は、特定の実施形態を参照して説明されている。しかしながら、当業者は、以下の特許請求の範囲に記載された本発明の範囲から逸脱することなく、様々な修正及び変更を行うことができることを理解するであろう。したがって、本明細書及び図面は、限定的な意味ではなく、例示的な意味としてみなされるべきであり、そのような全ての修正が本発明の範囲内に含まれることが意図されている。
【００３０】
特定の実施形態に関して、利益、他の利点、及び、問題に対する解決策が上述されている。ただし、利益、利点、問題に対する解決策、及び、任意の利益、利点、解決策を生じさせるか、より顕著になる可能性のある任意の特徴（複数可）は、何れか又は全ての請求項の重要な、必須の、又は、本質的な特徴として解釈されるべきではない。さらに、開示された発明は、本明細書の教示の恩恵を受ける当業者には明らかな方法であって、異なっているが同等の方法で修正され、実施されてもよい。このため、上記に開示された特定の実施形態は、例示的なものに過ぎない。以下の特許請求の範囲に記載されている以外に、本明細書に示されている構造又は設計の詳細については、如何なる限定も意図されていない。したがって、上記に開示された特定の実施形態は変更又は修正されてもよく、このような全ての変形は開示された発明の範囲内であると考えられることが明らかである。したがって、本明細書において求められる保護は、以下の特許請求の範囲に記載されている通りである。
【図１】
2021532471.tif 000003
【図２】
2021532471.tif 000004
【図３】
2021532471.tif 000005
【手続補正書】
【提出日】令和3年3月23日(2021.3.23)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
プロセッサ［１００］の分岐ターゲットバッファ（ＢＴＢ）［１１０］の第１のエントリ［１１１］に基づいて、第１の分岐リターン命令の予測を識別することと、
前記第１の分岐リターン命令の予測を識別したことに応じて、前記プロセッサの分岐リターンアドレスのスタック［１１５］へのアクセスを開始することと、を含む、
方法。
【請求項２】
前記第１のエントリは、
前記第１の分岐リターン命令の予測を示す第１のリターンフィールド［１１３］と、
第１の予測分岐アドレスを示す第１の分岐フィールド［１１２］と、を含む、
請求項１の方法。
【請求項３】
前記第１の分岐リターン命令の予測は、前記第１の予測分岐アドレスがリターン命令に対応するという予測を含む、
請求項２の方法。
【請求項４】
前記第１の分岐リターン命令が誤って予測されたことを識別したことに応じて、前記第１のエントリを、リターン予測がないことを示すように設定することをさらに含む、
請求項３の方法。
【請求項５】
前記第１のエントリがリターン命令の予測を示していることを判別したことに応じて、前記ＢＴＢへの後続のアクセスを抑制することをさらに含む、
請求項１〜４の何れかの方法。
【請求項６】
前記ＢＴＢの第２のエントリに基づいて、第２の分岐リターン命令の予測を識別することと、
前記第２の分岐リターン命令の予測を識別したことに応じて、前記分岐リターンアドレスのスタックへのアクセスを開始することと、をさらに含む、
請求項１〜５の何れかの方法。
【請求項７】
第１のプログラムカウンタ値［１０１］に基づいて、分岐ターゲットバッファ（ＢＴＢ）［１１０］の第１のエントリにアクセスすることと、
前記ＢＴＢの前記第１のエントリの第１の分岐アドレスフィールド［１１２］に基づいて、第１の命令アドレスに分岐することと、
前記ＢＴＢの前記第１のエントリの第１のリターンフィールド［１１３］が、前記第１の命令アドレスがリターン命令に対応することを示していることに応じて、分岐リターンアドレスのスタック［１１５］へのアクセスを開始することと、を含む、
方法。
【請求項８】
前記第１の命令アドレスが前記リターン命令に対応することを判別したことに応じて、リターンの指標を前記第１のリターンフィールドに記憶することをさらに含む、
請求項７の方法。
【請求項９】
プロセッサ［１００］であって、
第１の分岐リターン命令の予測を識別する第１のエントリ［１１１］を含む分岐ターゲットバッファ（ＢＴＢ）［１１０］と、
分岐リターンアドレスのスタック［１１５］と、
前記ＢＴＢの前記第１のエントリが、前記第１の分岐リターン命令の予測を示していることに応じて、前記分岐リターンアドレスのスタックへのアクセスを開始するように構成されたプロセッサコアと、を備える、
プロセッサ。
【請求項１０】
前記ＢＴＢの前記第１のエントリは、
前記第１の分岐リターン命令の予測を示す第１のリターンフィールド［１１３］と、
第１の予測分岐アドレスを示す第１の分岐フィールド［１１２］と、を含む、
請求項９のプロセッサ。
【請求項１１】
前記第１の分岐リターン命令の予測は、前記第１の予測分岐アドレスがリターン命令に対応するという予測を含む、
請求項１０のプロセッサ。
【請求項１２】
前記プロセッサコアは、
前記第１の分岐リターン命令が誤って予測されたことを識別したことに応じて、前記第１のエントリを、リターン予測がないことを示すように設定するように構成されている、
請求項１０のプロセッサ。
【請求項１３】
前記プロセッサコアは、
前記第１のエントリがリターン命令を示していることを判別したことに応じて、前記ＢＴＢへの後続のアクセスを抑制するように構成されている、
請求項９〜１２の何れかのプロセッサ。
【請求項１４】
前記プロセッサコアは、
前記第１のエントリがリターン命令を示していることを判別したことに応じて、前記第１の分岐リターン命令にアクセスすることが予想される前記ＢＴＢへの後続のアクセスを抑制するように構成されている、
請求項９〜１３の何れかのプロセッサ。
【請求項１５】
前記ＢＴＢは、第２の分岐リターン命令の予測を示す第２のエントリを含み、
前記プロセッサコアは、前記第２の分岐リターン命令の予測を識別したことに応じて、前記分岐リターンアドレスのスタックへのアクセスを開始するように構成されている、
請求項９〜１４の何れかのプロセッサ。
【国際調査報告】
2021532471.tif 000006
2021532471.tif 000007