(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-04-25
(45)【発行日】2023-05-08
(54)【発明の名称】早期リターン予測を有する分岐ターゲットバッファ
(51)【国際特許分類】
G06F 9/32 20180101AFI20230426BHJP
G06F 9/38 20180101ALI20230426BHJP
【FI】
G06F9/32 383A
G06F9/38 330B
(21)【出願番号】P 2021503748
(86)(22)【出願日】2019-07-17
(86)【国際出願番号】 US2019042176
(87)【国際公開番号】W WO2020023263
(87)【国際公開日】2020-01-30
【審査請求日】2022-07-15
(32)【優先日】2018-07-24
(33)【優先権主張国・地域又は機関】US
【早期審査対象出願】
(73)【特許権者】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(74)【代理人】
【識別番号】100108833
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】アパルナ シャガラジャン
(72)【発明者】
【氏名】マリウス エバース
(72)【発明者】
【氏名】アルナーチャラム アンナマライ
【審査官】田中 幸雄
(56)【参考文献】
【文献】米国特許第5604877(US,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/32
G06F 9/38
(57)【特許請求の範囲】
【請求項1】
第1の分岐命令に応じて、プロセッサの分岐ターゲットバッファ(BTB)の第1のエントリに基づいて、第1の分岐リターン命令の予測を識別することであって、前記第1の分岐リターン命令は前記第1の分岐命令と異なる、ことと、
前記第1の分岐リターン命令の予測を識別したことに応じて、前記プロセッサの分岐リターンアドレスのスタックへのアクセスを開始して、前記プロセッサの命令フェッチステージに提供するためのアドレスを取得することと、を含む、
方法。
【請求項2】
前記第1のエントリは、
前記第1の分岐リターン命令の予測を示す第1のリターンフィールドと、
第1の予測分岐アドレスを示す第1の分岐フィールドと、を含む、
請求項1の方法。
【請求項3】
前記第1の分岐リターン命令の予測は、前記第1の予測分岐アドレスがリターン命令に対応するという予測を含む、
請求項2の方法。
【請求項4】
前記第1の分岐リターン命令が誤って予測されたことを識別したことに応じて、前記第1のエントリを、リターン予測がないことを示すように設定することをさらに含む、
請求項3の方法。
【請求項5】
前記第1のエントリがリターン命令の予測を示していることを判別したことに応じて、前記BTBへの後続のアクセスを抑制することをさらに含む、
請求項1の方法。
【請求項6】
前記BTBの第2のエントリに基づいて、第2の分岐リターン命令の予測を識別することと、
前記第2の分岐リターン命令の予測を識別したことに応じて、前記分岐リターンアドレスのスタックへのアクセスを開始することと、をさらに含む、
請求項1の方法。
【請求項7】
第1の分岐命令に対応する第1のプログラムカウンタ値に基づいて、分岐ターゲットバッファ(BTB)の第1のエントリにアクセスすることと、
前記BTBの前記第1のエントリの第1の分岐アドレスフィールドに基づいて、第1の命令アドレスに分岐することと、
前記BTBの前記第1のエントリの第1のリターンフィールドが、前記第1の命令アドレスが前記第1の分岐命令と異なるリターン命令に対応することを示していることに応じて、分岐リターンアドレスのスタックへのアクセスを開始して、プロセッサの命令フェッチステージに提供するためのアドレスを取得することと、を含む、
方法。
【請求項8】
前記第1の命令アドレスが前記リターン命令に対応することを判別したことに応じて、リターンの指標を前記第1のリターンフィールドに記憶することをさらに含む、
請求項7の方法。
【請求項9】
前記分岐リターンアドレスのスタックへのアクセスを開始することは、前記第1の命令アドレスへの分岐と同時に、前記分岐リターンアドレスのスタックから命令アドレスを返すことを含む、
請求項7の方法。
【請求項10】
前記第1のリターンフィールドが、前記第1の命令アドレスが前記リターン命令に対応することを示していることに応じて、前記BTBへの後続のアクセスを抑制することをさらに含む、
請求項7の方法。
【請求項11】
前記後続のアクセスを抑制することは、予測リターン命令に対してBTBヒットをもたらすと予想される前記BTBへのアクセスを抑制することを含む、
請求項10の方法。
【請求項12】
第2のプログラムカウンタ値に基づいて、前記BTBの第2のエントリにアクセスすることと、
前記BTBの前記第1のエントリの第2の分岐アドレスフィールドに基づいて、第2の命令アドレスに分岐することと、
前記BTBの前記第2のエントリの第2のリターンフィールドが、前記第2の命令アドレスがリターン命令に対応することを示していることに応じて、前記分岐リターンアドレスのスタックへのアクセスを開始することと、をさらに含む、
請求項7の方法。
【請求項13】
前記リターン
命令が誤って予測されたことを識別したことに応じて、前記第1のエントリを、リターン予測がないことを示すように設定することをさらに含む、
請求項7の方法。
【請求項14】
プロセッサであって、
第1の分岐リターン命令の予測を識別する第1のエントリを含む分岐ターゲットバッファ(BTB)であって、前記第1のエントリは、前記第1の分岐リターン命令と異なる第1の分岐命令に関連している、BTBと、
分岐リターンアドレスのスタックと、
前記BTBの前記第1のエントリが、前記第1の分岐リターン命令の予測を示していることに応じて、前記分岐リターンアドレスのスタックへのアクセスを開始して、前記プロセッサの命令フェッチステージに提供するためのアドレスを取得するように構成されたプロセッサコアと、を備える、
プロセッサ。
【請求項15】
前記BTBの前記第1のエントリは、
前記第1の分岐リターン命令の予測を示す第1のリターンフィールドと、
第1の予測分岐アドレスを示す第1の分岐フィールドと、を含む、
請求項14のプロセッサ。
【請求項16】
前記第1の分岐リターン命令の予測は、前記第1の予測分岐アドレスがリターン命令に対応するという予測を含む、
請求項15のプロセッサ。
【請求項17】
前記プロセッサコアは、
前記第1の分岐リターン命令が誤って予測されたことを識別したことに応じて、前記第1のエントリを、リターン予測がないことを示すように設定するように構成されている、
請求項15のプロセッサ。
【請求項18】
前記プロセッサコアは、
前記第1のエントリがリターン命令を示していることを判別したことに応じて、前記BTBへの後続のアクセスを抑制するように構成されている、
請求項14のプロセッサ。
【請求項19】
前記プロセッサコアは、
前記第1のエントリがリターン命令を示していることを判別したことに応じて、前記第1の分岐リターン命令にアクセスすることが予想される前記BTBへの後続のアクセスを抑制するように構成されている、
請求項14のプロセッサ。
【請求項20】
前記BTBは、第2の分岐リターン命令の予測を示す第2のエントリを含み、
前記プロセッサコアは、前記第2の分岐リターン命令の予測を識別したことに応じて、前記分岐リターンアドレスのスタックへのアクセスを開始するように構成されている、
請求項14のプロセッサ。
【発明の詳細な説明】
【背景技術】
【0001】
プロセッサは、処理効率を高めるために、1つ以上の予測処理技術を採用することができる。予測処理技術の一種として分岐予測と呼ばれるものがあり、これにより、プロセッサは、分岐命令の結果を予測して、処理装置が分岐命令を評価する前に、予測した分岐に従って後続の命令を投機的に実行し始めることができる。プロセッサは、処理効率をさらに高めるために、分岐ターゲットバッファ(BTB)と呼ばれる分岐ターゲット構造を採用する。BTBは、予測した分岐のアドレス情報を記憶する。しかし、従来のBTB構造は、様々なタイプのプログラム分岐を効率的に実行することをサポートしていない。
【0002】
本開示は、添付の図面を参照することによってより良く理解することができ、当業者にはその多数の特徴及び利点が明らかになる。異なる図面で同じ符号を使用する場合は、類似又は同一の要素であることを意味する。
【図面の簡単な説明】
【0003】
【
図1】いくつかの実施形態による、分岐命令の対象となる命令ブロックがリターン命令を含むかどうかを予測するためのリターン予測情報を含む分岐ターゲットバッファ(BTB)を採用するプロセッサのブロック図である。
【
図2】いくつかの実施形態による、分岐命令の対象となる命令ブロックがリターン命令を含むことをBTBが示すことに応じて、
図1のプロセッサがリターンアドレスのスタックへのアクセスを開始する一例を示す図である。
【
図3】いくつかの実施形態による、分岐命令の対象となる命令ブロックがリターン命令を含むことをBTBが示すことに応じて、プロセッサがリターンアドレスのスタックへのアクセスを開始する方法のフローチャートである。
【発明を実施するための形態】
【0004】
図1~
図3は、プロセッサでのリターン命令に対するリターンアドレスを識別する際の遅延を低減するための技術を示す。プロセッサは、複数のエントリを有する分岐ターゲットバッファ(BTB)を含み、各エントリは、分岐命令であると予測される関連する命令ポインタ値に対応する。各BTBエントリは、分岐命令に対する予測分岐ターゲットアドレスを記憶し、さらに、予測分岐ターゲットアドレスに関連する命令のブロック内の次の分岐がリターン命令であると予測されるかどうかを示す情報を記憶する。次の分岐がリターン命令であると予測されることをBTBが示すことに応じて、プロセッサは、予測リターン命令に対するリターンアドレスを記憶するリターンスタックへのアクセスを開始する。プロセッサは、BTBに記憶されたリターン予測に応じてリターンスタックへのアクセスを開始することによって、リターンアドレスを識別する際の遅延を減らし、これにより、処理効率を向上させる。
【0005】
本明細書に記載された技術とは対照的に、従来のプロセッサは、予測されたリターン情報を記憶しない。したがって、従来のプロセッサは、プロセッサのフェッチステージが、現在の命令ポインタ値がリターン命令に対応することを識別するまで、リターンスタックへのアクセスを開始しない。リターンスタックからリターンアドレスを取得するには多数のクロックサイクルを必要とするので、プロセッサでの動作が遅れる可能性がある。本明細書に記載された技術を用いると、プロセッサは、リターンスタックへのアクセスを早期に開始し、その結果、命令ポインタ値がリターン命令に到達した場合に、リターンアドレスがスタックから取得され、プロセッサにおいて使用可能になる。したがって、予測リターン情報を記憶することで、リターンアドレスへのアクセスの高速化をサポートし、結果として処理効率が向上する。
【0006】
図1は、いくつかの実施形態による、分岐命令の対象となる命令ブロックがリターン命令を含むかどうかを予測するためのリターン予測情報を含む分岐ターゲットバッファ(BTB)を採用するプロセッサ100を示す図である。プロセッサは、命令セット(コンピュータプログラム等)を実行して、電子デバイスに代わって特定のタスクを実行する。いくつかの実施形態では、プロセッサ100は、デスクトップ又はラップトップコンピュータ、サーバ、ゲームコンソール、スマートフォン、タブレット等の様々な電子デバイスのうち何れかに組み込まれている。
【0007】
命令の実行をサポートするために、プロセッサ100は、命令フェッチステージ102及び付加的なパイプラインステージ104を有する命令パイプラインを含む。付加的なパイプラインステージ104は、フェッチされた命令をオペレーションのセットにデコードするステージと、デコードされたオペレーションを実行する実行ステージと、実行された命令をリタイアするリタイアステージと、を含む。いくつかの実施形態では、プロセッサ100は、1つ以上のメモリコントローラ、入出力コントローラ、メモリ構造(例えば、1つ以上のキャッシュ)等を含む、命令の実行をサポートするための付加的なモジュールを含むことが理解されるであろう。さらに、いくつかの実施形態では、プロセッサ100は、付加的な命令パイプラインを含むことが理解されるであろう。例えば、いくつかの実施形態では、プロセッサ100は、複数のプロセッサコアを含み、各プロセッサコアは、命令セットを実行するための少なくとも1つの命令パイプラインを有する。さらに、いくつかの実施形態では、プロセッサ100は、例えば、描画、表示等のグラフィックス処理に関連するオペレーションを実行するための1つ以上のグラフィックス処理装置(GPU)等のように、特別なタスクに関連するオペレーションを実行するように特別に設計された付加的な処理装置を含む。
【0008】
図1に示す実施形態に戻ると、命令フェッチステージ102は、一般に、命令ポインタ101に基づいて、命令キャッシュ103から命令を取得(フェッチ)するように構成されている。当業者に理解されるように、命令ポインタ101は、フェッチされる現在の命令を示すアドレス値であり、実行される命令のプログラムフローを変更するオペレーションを実行することによって変更可能である。例えば、いくつかの実施形態では、分岐命令は、例えば、分岐命令又は関連する命令によって指定されたデータの評価に基づいて、命令ポインタ101を変更する。
【0009】
分岐命令の効率的な実行をサポートするために、プロセッサ100は、リターンスタック115と、分岐ターゲットバッファ(BTB)110と、を含む。リターンスタック115は、プロセッサ100で実行されるリターン命令のリターンアドレスを記憶するスタックメモリ構造である。動作中、フェッチステージ102は、コールタイプである分岐命令を識別することに応じて、指定された命令ポインタ値をリターンアドレスとして生成する。いくつかの実施形態では、命令フェッチステージ102は、指定された値を命令ポインタ101に追加することによってリターンアドレスを生成し、この指定された値は、命令パイプラインで実行される命令のサイズ(例えば、幅)に対応する。命令フェッチステージは、リターンスタック115上のリターンアドレスをプッシュする。リターン命令の場合、フェッチステージ102は、本明細書でさらに説明するように、リターンスタック115の最上位からリターンアドレスを取得(ポップ)し、リターンアドレスを命令ポインタ101の値として記憶することによって、リターンアドレスを識別する。
【0010】
BTB110は、複数のエントリ(例えば、エントリ111)を含み、各エントリは、分岐命令に関連する異なる命令ポインタ値に対応する。命令フェッチステージ102は、命令サイクル毎に、命令ポインタ101をBTB110に提供する。BTB110は、受信した命令ポインタ値にエントリが対応すること(BTBヒットと呼ばれる)を識別したことに応じて、識別したエントリのBTAフィールド(例えば、エントリ111のBTAフィールド112)から分岐ターゲットアドレス(BTA)を取得し、そのBTAを命令フェッチステージ102に提供する。このように、BTB110は、プロセッサ100が分岐ターゲットアドレスを迅速に識別するための効率的な方法を提供する。
【0011】
いくつかの実施形態では、プロセッサは、非投機的及び投機的の両方で、新規エントリの割り当て及びBTAの変更を含めてBTB110のエントリを変更することができる。非投機的な更新は、パイプラインステージ104によって実行される。例えば、命令を分岐命令として識別したことに応じて、デコードステージは、分岐命令のための命令ポインタ値をBTB110に提供する。これに応じて、BTB110は、受信した命令ポインタ値にエントリが確実に割り当てられるようにする。さらに、実行ユニットは、分岐命令について計算されたBTAをBTB110に提供し、BTB110は、BTAを、対応するエントリのBTAフィールドに記憶する。
【0012】
分岐予測をさらにサポートするために、プロセッサ100は、条件付き予測器108を含む。条件付き予測器108は、プロセッサ100の命令パイプラインで実行される分岐命令の履歴(分岐履歴109として示されている)を監視し、1つ以上の既知の分岐予測技術に従って分岐履歴109のパターンを識別する。条件付き予測器108は、識別されたパターンと各分岐の実際の方向とに基づいて、各分岐命令が実行されるか否か(分岐命令の方向と呼ばれることもある)を予測する。
【0013】
BTB110に戻ると、各エントリは、記憶されたBTAに加えて、対応するBTAに関連する命令のブロック内の次の分岐命令がリターン命令であると予測されるかどうかを示すリターン予測フィールド(例えば、リターン予測フィールド113)を含む。説明を容易にするために、本明細書では、このようなシーケンスを「分岐リターン」シーケンスと呼び、このシーケンスを開始する分岐命令を分岐リターンシーケンスの「ソース(source)」分岐と呼ぶ。このようなシーケンスの例を以下に示す。
JMP ADDRESS A (ソース分岐命令)
LDX, DATA1 (レジスタXに値をロードする)
ADD X,Y (レジスタXとレジスタYとに値を追加する)
RETURN
対照的に、以下は、リターン命令が、所定の分岐命令に続く次の分岐命令ではない(したがって、分岐リターンシーケンスではない)シーケンスの例である。
JMP ADDRESS A (分岐命令)
LDX, DATA1 (レジスタXに値をロードする)
ADD X,Y (レジスタXとレジスタYとに値を追加する)
JMP ADDRESS B (分岐リターンシーケンスではない分岐命令)
【0014】
BTB110は、閾値回数の分岐リターンシーケンスを識別したことに応じて、予測リターンを示すリターン予測フィールドを設定する。BTB110は、上述したように、命令フェッチステージ102から命令ポインタ値を受信したことに応じて、受信した命令ポインタ値がBTBヒットとなるかどうかを判別する。BTB110は、BTBヒットに応じて、BTBヒットを引き起こしたエントリのBTAフィールドにおけるBTAを命令フェッチステージ102に提供する。さらに、BTB110は、対応するリターン予測フィールドが予測リターンを示しているかどうかを判別する。予測リターンを示している場合、BTB110は、リターンスタック115でポップオペレーションを開始する。したがって、予測リターン命令に到達したときに、リターンアドレスが迅速なアクセスのために利用可能である。
【0015】
プログラムフロー内の次の分岐命令がリターン命令でない場合には、パイプラインステージ104の1つ以上は、誤って予測されたリターンをBTB110に示す。いくつかの実施形態では、誤って予測されたリターンに応じて、BTB110は、分岐リターンシーケンスのソース分岐命令に対応するエントリのリターン予測フィールドをクリアする。他の実施形態では、BTB110は、誤って予測されたリターンが閾値回数発生したことに応じて、リターン予測フィールドをクリアする。
【0016】
いくつかの実施形態では、プロセッサ100は、リターンスタック115へのアクセスを開始することに加えて、予測リターンに応じて追加のアクションを実行する。例えば、いくつかの実施形態では、プロセッサ100は、予測リターンに応じて、予測リターン命令自体にBTBヒットをもたらすと予想されるBTB110への後続のアクセスを抑制する。このアクセスを抑制することによって、プロセッサ100は、電力等のシステムリソースを節約する。
【0017】
図2は、いくつかの実施形態による、分岐命令の対象となる命令ブロックがリターン命令を含むことをBTB110が示すことに応じて、プロセッサ100がリターンスタック115へのアクセスを開始する一例200を示す図である。例200では、エントリ111は、エントリ111に対応する分岐命令のBTAを記憶するためのBTAフィールド112を含む。さらに、エントリ111のリターン予測フィールド113は、分岐命令が分岐リターンシーケンスの分岐元であると予測されることを示す値(図示した例では「Y」として示されている)に設定される。すなわち、リターン予測フィールド113は、エントリ111に対応する分岐命令に関連する命令のブロック内の次の分岐命令がリターン命令であると予測されることを示す状態にある。説明を簡単にするために、本明細書では、この状態を、予測リターンを示すリターン予測フィールドと呼ぶ。
【0018】
例200では、命令フェッチステージ102は、命令ポインタ101をBTB110に提供する。命令ポインタ101の提供によって、エントリ111でBTBヒットが発生する。すなわち、BTB110は、エントリ111が、命令ポインタ101に対応するメモリアドレスに関連付けられていることを識別する。BTBヒットに応じて、BTB110は、BTAフィールド112に記憶されたBTAを命令フェッチステージ102に提供する。さらに、リターン予測フィールド113が予測リターンを示すことに応じて、BTB110は、命令フェッチステージ102に提供するために、リターンスタック115へのアクセスを開始して、スタックの最上位にあるアドレスを取得(ポップ)する。
【0019】
図3は、いくつかの実施形態による、分岐命令の対象となる命令ブロックがリターン命令を含むことをBTBが示すことに応じて、プロセッサがリターンアドレスのスタックへのアクセスを開始する方法300のフローチャートである。ブロック302において、BTBは、プロセッサのフェッチステージから命令ポインタ値を受信する。ブロック304において、BTBは、受信した命令ポインタに対応するエントリを識別する。ブロック306において、BTBは、識別したエントリのリターン予測フィールドが予測リターンを示すかどうかを識別する。示さない場合、方法フローはブロック310に進み、BTBは、識別したBTBエントリにおけるBTAをフェッチステージに提供する。
【0020】
ブロック306において、BTBが、識別したエントリのリターン予測フィールドが予測リターンを示すことを識別した場合、方法フローはブロック308に進み、BTBは、リターンスタックの最上位からのリターンアドレスの取得を開始する。方法フローはブロック310に進み、BTBは、識別したBTBエントリにおけるBTAをフェッチステージに提供する。
【0021】
本明細書に開示されるように、いくつかの実施形態では、方法は、プロセッサの分岐ターゲットバッファ(BTB)の第1のエントリに基づいて、第1の分岐リターン命令の予測を識別することと、第1の分岐リターン命令の予測を識別したことに応じて、プロセッサの分岐リターンアドレスのスタックへのアクセスを開始することと、を含む。一態様では、第1のエントリは、第1の分岐リターン命令の予測を示す第1のリターンフィールドと、第1の予測分岐アドレスを示す第1の分岐フィールドと、を含む。別の態様では、第1の分岐リターン命令の予測は、第1の予測分岐アドレスがリターン命令に対応するという予測を含む。さらに別の態様では、方法は、第1の分岐リターン命令が誤って予測されたことを識別したことに応じて、第1のエントリを、リターン予測がないことを示すように設定することを含む。
【0022】
一態様では、方法は、第1のエントリがリターン命令の予測を示していることを判別したことに応じて、BTBへの後続のアクセスを抑制することを含む。さらに別の態様では、方法は、BTBの第2のエントリに基づいて、第2の分岐リターン命令の予測を識別することと、第2の分岐リターン命令の予測を識別したことに応じて、分岐リターンアドレスのスタックへのアクセスを開始することと、を含む。
【0023】
本明細書に開示されるように、いくつかの実施形態では、方法は、第1のプログラムカウンタ値に基づいて、分岐ターゲットバッファ(BTB)の第1のエントリにアクセスすることと、BTBの第1のエントリの第1の分岐アドレスフィールドに基づいて、第1の命令アドレスに分岐することと、BTBの第1のエントリの第1のリターンフィールドが、第1の命令アドレスがリターン命令に対応することを示していることに応じて、分岐リターンアドレスのスタックへのアクセスを開始することと、を含む。一態様では、方法は、第1の命令アドレスがリターン命令に対応することを判別したことに応じて、リターンの指標を第1のリターンフィールドに記憶することを含む。さらに別の態様では、分岐リターンアドレスのスタックへのアクセスを開始することは、第1の命令アドレスへの分岐と同時に、分岐リターンアドレスのスタックから命令アドレスを返すことを含む。さらに別の態様では、方法は、第1のリターンフィールドが、第1の命令アドレスがリターン命令に対応することを示していることに応じて、BTBへの後続のアクセスを抑制することを含む。
【0024】
一態様では、後続のアクセスを抑制することは、予測リターン命令に対してBTBヒットをもたらすと予想されるBTBへのアクセスを抑制することを含む。別の態様では、方法は、第2のプログラムカウンタ値に基づいて、BTBの第2のエントリにアクセスすることと、BTBの第1のエントリの第2の分岐アドレスフィールドに基づいて、第2の命令アドレスに分岐することと、BTBの第2のエントリの第2のリターンフィールドが、第2の命令アドレスがリターン命令に対応することを示していることに応じて、分岐リターンアドレスのスタックへのアクセスを開始することと、を含む。さらに別の態様では、方法は、リターンが誤って予測されたことを識別したことに応じて、第1のエントリを、リターン予測がないことを示すように設定することを含む。
【0025】
本明細書に開示されるように、いくつかの実施形態では、プロセッサは、第1の分岐リターン命令の予測を識別する第1のエントリを含む分岐ターゲットバッファ(BTB)と、分岐リターンアドレスのスタックと、BTBの第1のエントリが、第1の分岐リターン命令の予測を示していることに応じて、分岐リターンアドレスのスタックへのアクセスを開始するように構成されたプロセッサコアと、を備える。一態様では、BTBの第1のエントリは、第1の分岐リターン命令の予測を示す第1のリターンフィールドと、第1の予測分岐アドレスを示す第1の分岐フィールドと、を含む。別の態様では、第1の分岐リターン命令の予測は、第1の予測分岐アドレスがリターン命令に対応するという予測を含む。
【0026】
一態様では、プロセッサコアは、第1の分岐リターン命令が誤って予測されたことを識別したことに応じて、第1のエントリを、リターン予測がないことを示すように設定するように構成されている。別の態様では、プロセッサコアは、第1のエントリがリターン命令を示していると判別したことに応じて、BTBへの後続のアクセスを抑制するように構成されている。さらに別の態様では、プロセッサコアは、第1のエントリがリターン命令を示していると判別したことに応じて、第1の分岐リターン命令にアクセスすることが予想されるBTBへの後続のアクセスを抑制するように構成されている。さらに別の態様では、BTBは、第2の分岐リターン命令の予測を示す第2のエントリを含む。プロセッサコアは、第2の分岐リターン命令の予測を識別したことに応じて、分岐リターンアドレスのスタックへのアクセスを開始するように構成されている。
【0027】
コンピュータ可読記憶媒体は、命令及び/又はデータをコンピュータシステムに提供するために、使用中にコンピュータシステムによってアクセス可能な任意の非一時的な記憶媒体、又は、非一時的な記憶媒体の組み合わせを含むことができる。このような記憶媒体としては、光学媒体(例えば、コンパクトディスク(CD)、デジタル多用途ディスク(DVD)、ブルーレイ(登録商標)ディスク)、磁気媒体(例えば、フロッピー(登録商標)ディスク、磁気テープ若しくは磁気ハードドライブ)、揮発性メモリ(例えば、ランダムアクセスメモリ(RAM)若しくはキャッシュ)、不揮発性メモリ(例えば、リードオンリーメモリ(ROM)若しくはフラッシュメモリ)、又は、微小電気機械システム(MEMS)ベースの記憶媒体が挙げられるが、これらに限定されない。コンピュータ可読記憶媒体は、コンピューティングシステムに組み込まれてもよく(例えば、システムRAM、ROM等)、コンピューティングシステムに固定的に取り付けられてもよく(例えば、磁気ハードドライブ等)、コンピューティングシステムに取り外し可能に取り付けられてもよく(例えば、光学ディスク、ユニバーサルシリアルバス(USB)ベースのフラッシュメモリ等)、有線又は無線ネットワークを介してコンピュータシステムに接続されてもよい(例えば、ネットワークアクセスストレージ(NAS)等)。
【0028】
いくつかの実施形態では、上記の技術の特定の態様は、ソフトウェアを実行する処理システムの1つ以上のプロセッサによって実施されてもよい。ソフトウェアは、非一時的なコンピュータ可読記憶媒体に記憶され、又は、非一時的なコンピュータ可読記憶媒体上に他の形態で具体化された実行可能命令の1つ以上のセットを含む。ソフトウェアは、1つ以上のプロセッサによって実行される場合に、上記の技術の1つ以上の態様を実施するように1つ以上のプロセッサを操作する命令及び特定のデータを含むことができる。非一時的なコンピュータ可読記憶媒体は、例えば、磁気ディスク若しくは光ディスク記憶デバイス、フラッシュメモリ、キャッシュ、ランダムアクセスメモリ(RAM)等のソリッドステート記憶デバイス、又は、他の1つ以上の不揮発性メモリデバイス等を含むことができる。非一時的なコンピュータ可読記憶媒体に記憶される実行可能命令は、ソースコード、アセンブリ言語コード、オブジェクトコード、又は、1つ以上のプロセッサによって解釈されるか、別の方法で実行可能な他の命令フォーマットであってもよい。
【0029】
概要説明において上述したアクティビティ又は要素の全てが必須でないこと、特定のアクティビティ又はデバイスの一部が必要とされない場合があること、及び、1つ以上の追加のアクティビティを実行してもよいし、要素を含めてもよいことに留意されたい。さらに、アクティビティがリストされる順序は、必ずしもそれらが実行される順序ではない。また、これらの概念は、特定の実施形態を参照して説明されている。しかしながら、当業者は、以下の特許請求の範囲に記載された本発明の範囲から逸脱することなく、様々な修正及び変更を行うことができることを理解するであろう。したがって、本明細書及び図面は、限定的な意味ではなく、例示的な意味としてみなされるべきであり、そのような全ての修正が本発明の範囲内に含まれることが意図されている。
【0030】
特定の実施形態に関して、利益、他の利点、及び、問題に対する解決策が上述されている。ただし、利益、利点、問題に対する解決策、及び、任意の利益、利点、解決策を生じさせるか、より顕著になる可能性のある任意の特徴(複数可)は、何れか又は全ての請求項の重要な、必須の、又は、本質的な特徴として解釈されるべきではない。さらに、開示された発明は、本明細書の教示の恩恵を受ける当業者には明らかな方法であって、異なっているが同等の方法で修正され、実施されてもよい。このため、上記に開示された特定の実施形態は、例示的なものに過ぎない。以下の特許請求の範囲に記載されている以外に、本明細書に示されている構造又は設計の詳細については、如何なる限定も意図されていない。したがって、上記に開示された特定の実施形態は変更又は修正されてもよく、このような全ての変形は開示された発明の範囲内であると考えられることが明らかである。したがって、本明細書において求められる保護は、以下の特許請求の範囲に記載されている通りである。