JP2010541106A - 誤りの投機的更新のリンクスタック修復 - Google Patents

誤りの投機的更新のリンクスタック修復 Download PDF

Info

Publication number
JP2010541106A
JP2010541106A JP2010528173A JP2010528173A JP2010541106A JP 2010541106 A JP2010541106 A JP 2010541106A JP 2010528173 A JP2010528173 A JP 2010528173A JP 2010528173 A JP2010528173 A JP 2010528173A JP 2010541106 A JP2010541106 A JP 2010541106A
Authority
JP
Japan
Prior art keywords
link stack
link
instruction
pipeline
stack
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2010528173A
Other languages
English (en)
Other versions
JP5313253B2 (ja
Inventor
ディーフェンダーファー、ジェームズ・ノリス
ステムペル、ブライアン・マイケル
スミス、ロドニー・ウェイン
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Qualcomm Inc
Original Assignee
Qualcomm Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Qualcomm Inc filed Critical Qualcomm Inc
Publication of JP2010541106A publication Critical patent/JP2010541106A/ja
Application granted granted Critical
Publication of JP5313253B2 publication Critical patent/JP5313253B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • G06F9/3806Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)

Abstract

リンクアドレスがリンクスタックに書き込まれるときにはいつでも、リンクスタックエントリの前の値が保存され、誤予測分岐に続いてリンクスタックプッシュオペレーションが投機的に実行された後で、リンクスタックに復元される。この状態は、パイプラインにおけるコミットされていないリンクスタック書き込み命令の合計数のカウントと、各分岐命令の前のコミットされていないリンクスタック書き込み命令の数のカウントと、を保持することによって検出される。分岐が誤予測したと評価され決定されるときには、それに関連づけられたカウントは、合計カウントと比較される。不一致は、誤予測された分岐命令の後でリンクスタック書き込み命令がパイプラインへと投機的に発行され、リンクスタック上へとリンクアドレスをプッシュされたことを示す。プライアリンクアドレスは、リンクスタック復元バッファから、リンクスタックに復元される。

Description

背景
本発明は、一般にプロセッサの分野に関し、より具体的には、投機的命令実行(speculative instruction execution)によって破損されたリンクスタックを修復するためのシステム及び方法に関する。
現代のソフトウェアは、本質的にモジュラー方式(modular)であり、特定の機能がサブルーチンにおいてインプリメントされている。サブルーチン呼び出し及びリターン(subroutine calls and returns)を効率的にインプリメントするために、多くの現代のプロセッサは、リンクスタックをインプリメントする(あるいはエミュレートする)回路を利用する。リンクスタック(link stack)は、ハードウェアにのみ見え、プログラマに直接アクセス可能でない、リンクアドレスを保存するための論理構造である。分岐及びリンク命令のような、サブルーチンを呼び出す(へ分岐する)命令は、リンクスタック上へと次の命令のアドレスを「プッシュする(pushes)」。サブルーチンにおいてリターンタイプ命令(a return-type instruction)に出くわすとき、リンクスタックは、サブルーチン呼び出しを作る1つにしたがって命令のアドレスをもたらすために「ポップされる(popped)」。サブルーチンが他のサブルーチンを呼び出すとき、リンクアドレスは、リンクスタック上へと連続的にプッシュされ、サブルーチンが実行とリターンを完了するときにポップされる。
最新プロセッサは、パイプライン化されたアーキテクチャ(pipelined architecture)を利用しており、そこでは、それぞれがマルチプル実行ステップを有しているシーケンシャル命令(sequential instructions)は、実行中にオーバラップされる。最大の性能のために、命令は、パイプラインを通して連続的に流れるべきである。命令にパイプラインにおいてストールさせるいずれの状況も性能に不利益な影響を及ぼす。
実質的には、すべての実社会プログラム(real-world programs)は、条件付きの分岐命令(conditional branch instructions)を含んでおり、その実際の分岐態度(actual branching behavior)は、命令がパイプラインにおいて深く評価されるまで、知られていない。各分岐命令の実際の評価を待機することから生じるパイプラインストールを回避するために、多くの最新プロセッサは、分岐予測のいくつかの形態を利用しており、それにより、条件付き分岐命令の分岐態度は、パイプラインの初期に予測される。予測された分岐評価に基づいて、プロセッサは、予測されたアドレス−分岐ターゲットアドレス(分岐が成立と予測される場合)あるいは分岐命令の後の次のシーケンシャルアドレス(分岐が不成立と予測される場合)のいずれか−から命令を投機的にフェッチし、実行する。実際の分岐態度が決定されるときに、分岐が誤予測された場合には、投機的にフェッチされた命令は、パイプラインからフラッシュされ、新しい命令は、正しい次のアドレスからフェッチされる。誤予測された分岐は、性能と電力消費量の両方に不利な影響を与える。
誤予測された分岐の別の結果は、リンクスタックの破損(corruption of the link stack)でありうる。誤予測された分岐に続き、投機的に実行された命令がサブルーチンリターンおよび連続呼び出しを含む場合には、有効なリンクアドレスは、リンクスタックからポップされ、新しいリンクアドレスはスタック上へとプッシュされる。リンクスタックハードウェアインプリメンテーションに依存しており、スタックをポップさせることはリードポインタを単に動かすにすぎないので、リンクスタックを誤りでポップさせること自体は不利な結果を有さない可能性があり、データはリンクスタックバッファに残る。しかしながら、リンクスタック上へと新しい値を連続的に誤ってプッシュすることは、前の値(previous value)に上書きしうる。分岐誤予測が検出され、適切な命令ストリームがフェッチされ、実行されるときに、リンクスタックの破損が検出されず修復されない場合には、サブルーチンリターンは、間違った位置(wrong location)へと制御を移す(transfer)だろう。
リンクスタックの破損を回避する1つの方法は、投機的命令によってリンクスタック更新を許可しないことである。例えば、すべての条件分岐が解決されるまで、リンクスタック更新は延期されうる。このことは、分岐評価がパイプライン深くに実行パイプステージにおいて生じるので、リンクスタック更新をパイプラインへと深く効率的に動かすであろう。しかしながら、このことは、それらの、リンクスタック機能の使用を効果的に否定することによって、短いサブルーチンについての性能に不利益に影響するであろう。したがって、リンクスタックハードウェアから最大性能を得るために、リンクスタックは、復号パイプステージでのような、パイプラインの初期に好ましくは初期に更新される。
分岐誤予測に帰因するプロセッサリソース(例、レジスターリネーミングバッファ及び同様なもの)の破損を防ぐ(guarding)1つの知られたアプローチは、パラレルの、リソースの「コミットされた」コピー(a parallel, "committed" copy of the resource)を保持することである。その状態を変更する命令が実行をコミットする(commit for execution)ときのみ、コミットされたコピーは更新される。命令が実行することを完了することを妨げる危険が存在しないことが確認されるとき、命令はそれ自体の実行を確認する。例えば、算術あるいは論理オペレーションをインプリメントする命令は、そのオペランドのすべてが利用可能である(すなわち、それらが他の命令によって計算されている、あるいは、メモリから成功裡に検索されている)ときに、実行を承認することができる。命令は、パイプラインにおけるそれ及びそれの前にある全ての命令が確認されるとき、実行をコミットする。
分岐誤予測に帰因する破損を回避するために、プロセッサリソースのワーキングコピーの状態(state of a working copy of a processor resource)は、命令のルーチン実行の間に、進行中ベースで変更されるが、プロセッサリソースのコミットされたコピーの状態は、実行をコミットした命令によってのみ変更される。分岐誤予測が検出されるとき、プロセッサリソースのコミットされたコピーは、ワーキングコピーに対しコピーされ、ワーキングコピーのコンテンツと置き換える。この技術は、いずれ命令の投機的実行の前に、それが有していた状態でワーキングコピーを置く。
リンクスタック破損問題に対してこのアプローチを利用することは可能である。ワーキングリンクスタックは、サブルーチン呼び出し及びリターンをインプリメントする、パイプラインにおける命令によって更新されるだろう。コミットされたリンクスタックは、実行をコミットしたサブルーチン呼び出し及びリターン命令によってのみ、更新される。分岐誤予測を発見するとき、リンクスタックのコミットされたコピーは、ワーキングリンクスタックとなるように単にコピーされるだろう。しかしながら、このアプローチはシリコンエリア(silicon area)と電力消費の両方の点からコストが大きい(costly)。リンクスタックを複製すること(Replicating)は、リンクスタックを管理するのに必要な制御論理と共に、それをインプリメントするレジスタあるいは他のメモリ構造を複製すること(duplicating)を必要とする。余分なハードウェアは、貴重な集積回路エリアを使用し(occupies)、ワイヤリング混雑(wiring congestion)を増大させ、そして、クロック及び配電(clock and power distribution)を複雑にする。2つの完全なリンクスタックを連続的に更新することは、名目上は、1つのリンクスタックのみを実行する電力の2倍を消費する。特に、モバイル電子デバイスで展開されるプロセッサにおいて、電力消費を最小にすることは、電池寿命を節約し、熱損失(heat dissipation)を低減するのに重要である。
ここにおいて開示され特許請求された1つまたは複数の実施形態によると、リンクスタックの破損は、検出され、効率的に修復される。リンクアドレスがリンクスタックに書き込まれるときにはいつでも、リンクスタックエントリの前の値(prior value of the link stack entry)は、リンクスタック復元バッファ(link stack restore buffer)において保存される。誤りリンクスタックプッシュオペレーションが検出されるとき、この値はリンクスタックに復元される(restored)。誤りリンクスタックプッシュオペレーションは、誤予測された分岐に続いて、投機的に実行されるものである。この状態は、パイプラインにおけるコミットされていないリンクスタック書き込み命令の合計数のカウント(a count of the total number of uncommitted link stack write instructions in the pipeline)と、各分岐命令の前のコミットされていないリンクスタック書き込み命令の数のカウント(a count of the number of uncommitted link stack write instructions ahead of each branch instruction)と、を保持することによって、検出される。分岐が誤予測されたと評価され決定されるとき、それに関連づけられたカウントは、合計カウントと比較される。不一致(discrepancy)は、リンクスタック書き込み命令が誤予測された分岐命令の後でパイプラインへと投機的に発行され、リンクスタック上へとリンクアドレスをプッシュされることを示す。この場合、プライアリンクアドレスは、リンクスタック復元バッファから、リンクスタックに復元される。
一実施形態は、それぞれがリンクアドレスを保存するように動作可能である複数のエントリを備えているリンクスタックを管理する方法に関する。リンクスタックに任意の新しいリンクアドレスを書き込むとき、リンクスタックエントリの前の値が保存される。分岐命令の分岐評価が予測される。予測に応じて、命令は、投機的に実行される。分岐評価は、誤予測したと決定される。リンクスタックは、投機的に書き込まれたと決定される。その保存された値は、リンクスタックに復元される。
別の実施形態はプロセッサに関する。プロセッサは、命令実行パイプラインとそれぞれがリンクアドレスを保存するように動作可能である複数のエントリを備えているリンクスタックを含む。プロセッサは、任意のリンクスタックエントリが新しいリンクアドレスで上書きされているときにリンクスタックエントリの前の値を保存するように動作可能で、それを置き換えた(displaced)リンクスタック書き込みが投機的で誤りであったという検出のときにリンクスタックエントリに対し前の値を保存するように動作可能な、リンクスタック復元バッファをさらに含む。プロセッサはまた、リンクスタックへの、誤りの、投機的書き込み(erroneous, speculative writes to the link stack)を検出するように動作可能なリンクスタックモニタ回路を含む。
また、別の実施形態はプロセッサに関する。プロセッサは、命令実行パイプラインとリンクアドレスを保存するように動作可能である複数のエントリを備えているリンクを含む。プロセッサは、任意のリンクスタックエントリが新しいリンクアドレスで上書きされているときにリンクスタックエントリの前の値を保存するように動作可能で、それを置き換えたリンクスタック書き込みが投機的で誤りであったという検出のときにリンクスタックエントリに対し前の値を保存するように動作可能な、リンクスタック復元バッファをさらに含む。プロセッサは、リンクスタック書き込み命令を復号するときにインクリメントし、リンクスタック書き込み命令が実行にコミットするときにデクリメントすることによって、パイプラインにおけるコミットされていないリンクスタック書き込み命令のカウントを保持するように動作可能なアップ/ダウンカウンタもまた含む。プロセッサは、パイプラインにおける各コミットされていない分岐命令に関連づけられたカウンタ、をさらに含んでおり、なお、カウンタは、分岐命令を復号するときにアップ/ダウンカウンタ値に初期化し、リンクスタック書き込み命令が実行にコミットするときにデクリメントすることによって、パイプラインにおける分岐命令の前のコミットされていないスタック書き込み命令のカウントを保持するように動作可能である。プロセッサは、アップ/ダウンカウンタ値と誤予測された分岐命令に関連づけられたカウンタの値とを比較することによって、誤りの投機的なリンクスタック書き込みオペレーションを検出するように動作可能な比較器をさらに含む。
図1は、プロセッサの機能ブロックブロック図である。 図2は、プロセッサの選択された部分の機能ブロックブロック図である。 図3は、コードフロー図である。 図4は、リンクスタック管理の方法のフロー図である。
詳細な説明
図1は、分岐誤予測に帰因するリンクスタックの破損を効率的に修復する回路を含んでいるプロセッサ10の機能ブロック図を図示する。プロセッサ10は、制御論理1 1にしたがって、命令実行パイプライン12において、命令を実行する。パイプライン12は、マルチプルパラレル実行パイプライン14及び16を備えた、スーパースカラー設計(superscalar design)であってもよい。パイプライン12は、算術論理ユニット(ALU)(図示されず)のような論理的で計算の回路(logical and computational circuits)に加えて、パイプステージで組織化された、様々なレジスタあるいはラッチ(latches)18を含む。汎用レジスタ(general purpose register)(GPR)ファイル20は、メモリ階層のトップを備えているレジスタを提供する。パイプライン12をサポートしている他のプロセッサリソースは、リンクスタック22、リンクスタック復元バッファ(link stack restoration buffer)(LSRB)23、分岐予測回路24、及び分岐情報キュー(branch information queue)(BIQ)25であり、そのオペレーションは、ここにおいて詳説されている。
パイプライン12は、命令キャッシュ(I−Cacheあるいは1$)26から命令をフェッチし、メモリアドレッシング及び許可(memory addressing and permissions)は、命令−サイド変換ルックアサイドバッファ(instruction-side translation lookaside buffer)(ITLB)28によって管理される。データは、データキャッシュ(D−CacheあるいはD$)30からアクセスされ、メモリアドレッシング及び許可は、メイン変換ルックアサイドバッファ(TLB)32によって管理される。様々な実施形態において、ITLB28は、TLB32の一部分のコピーを備えることができる。あるいは、ITLB28及びTLB32は組み込まれることができる。いくつかの実施形態においては、専用データサイドTLB、すなわちDTLB(図示されず)は、ITLB28と完全に離れていてもよい。同様に、プロセッサ10の様々な実施形態においては、I−cache26およびD−cache30は、統一されてもよい。
I−cache26及び/またはD−cache30におけるミス(Misses)は、メモリインタフェース36の制御の下(他のキャッシュは、図示されていないが、プロセッサ10とメインメモリ34との間で挿入される)、メイン(オフチップ)メモリ34へのアクセスをもたらす。プロセッサ10は、インプット/アウトプット(I/O)インターフェース38を含むことができ、様々な周辺機器40、42へのアクセスを制御する。当業者は、プロセッサ10の多数の変形が可能であるということを理解するであろう。例えば、プロセッサ10は、Iキャッシュ26、Dキャッシュ30のいずれか、あるいは両方のために、第2レベル(L2)キャッシュを含むことができる。さらに、プロセッサ10で図示された機能ブロックのうちの1つまたは複数は、特定の実施形態から省略されることができる。
図2は、誤予測された分岐から生じるリンクスタック22の破損を修復する、リンクスタック復元バッファ23のオペレーションを図示している機能ブロック図である。制御回路及び信号のような低レベルの詳細は、明瞭のために、図2から省略される。図示された実施形態では、リンクスタック22は、当技術分野において知られているように、読み込み及び書き込みポインタをインクリメントしデクリメントすることによって、環状バッファとしてインプリメントされており、この場合では8つのレジスタを備えている。このインプリメンテーションは限定的ではなく、本発明の実施形態は、当技術分野において知られる、あるいはまだ発明されていない、任意のハードウェア構造を使用してインプリメントされるリンクスタック22に有利に適用されることができる。
リンクスタック復元バッファ23は、リンクスタックプッシュオペレーションによって上書きされた最後のリンクアドレスのコピーを保持する。すなわち、分岐及びリンク命令がリンクスタック22にリンクアドレスを書き込むときに、対応リンクスタックエントリにおいて保存されるプライアアドレスは、リンクスタック復元バッファ23に自動的に保存される。さらに、図示された実施形態では、リンクスタックインデクスは保存されるので、必要であれば、それが上書きされたリンクスタック22の位置に、リンクアドレスは復元されることができる。図示された実施形態では、リンクスタック復元バッファ23は、単独のレジスタを備える。しかしながら、本発明はこの実施形態に制限されていない。他の実施形態では、特に、非常に深いパイプラインを有するプロセッサにおいては、リンクスタック復元バッファ23は、マルチプルエントリを備えることができ、そして、必要とされればあるいは望まれれば、スタック、バッファ、あるいは他の論理構造として組織化されうる。
サブルーチン呼び出し(例、分岐及びリンク)命令がパイプライン12で実行されるときに、リンクアドレスは、リンクスタック22に書き込まれる。リンクアドレスは、図2で図示された実施形態にあるように、復号パイプステージのような、パイプライン12の初期に好ましくは書き込まれる。このことは、短いサブルーチンが、リンクスタック22ハードウェアを利用することを可能にする。しかしながら、他の実施形態では、特定のパイプライン12に必要とされる、あるいは望まれるときに、リンクスタック22は、任意のパイプステージにおいても書き込まれることができる。リンクスタック書き込み命令を含んでいる命令ストリームが分岐予測に応じて投機的にフェッチされる場合には、リンクスタック書き込みオペレーションが有効リンクアドレスを無効にする(override)ことができるということはありうる。したがって、プライアリンクアドレスは、新しい値がリンクスタック22に書き込まれるとき、リンクスタック復元バッファ23に保存される。分岐誤予測が検出されるとき、リンクスタック書き込みが誤っていたと決定される場合には、リンクスタック復元バッファ23において保存された前の値は、上書きされた、リンクスタック22に復元されることができる。
図3は、どのようにリンクスタック22が誤予測された分岐に応じて破損されうるかを論証する、命令の仮説シーケンスを図示する。メインプログラムシーケンス(右)は、2つのロード(LD)命令、ADD、保存(ST)、その後で、分岐及びリンク命令呼び出しサブルーチンA(BL SUB A)を実行する。これは、プログラムの流れを図示している実線の矢印で表されているような、適切なコードシーケンスである。BL SUB A命令は、リンクスタック上へと次のLD命令のアドレスをプッシュし、サブルーチンAに分岐し、そこでは、LD、ADD、比較(CMP)の命令が実行される。
パイプライン12がサブルーチンAのための命令をフェッチするときには、等しい場合には分岐する(branch if equal)(BEQ)命令が検出され、予測された分岐指示(predicted branch direction)と次のアドレスは、分岐予測回路51において公式化される。この例において、分岐は、インデクス1の分岐ターゲットを用いて、成立と誤って予測される(is erroneously predicted taken)。命令は、プログラムの流れを図示している点線の矢印で示されているように、インデクス1で始まってフェッチされ、投機的に実行される。したがって、実行ストリームは、インデクス1でLD命令に分岐し、リンクリターン命令BX LR(サブルーチンAからの第1の出口点である)へと第1の分岐を飛ばす。
LD、引き算(SUB)、及びST命令は、投機的に実行され、BX LR命令は、リンクスタック22の上でリンクアドレスに分岐し、読み取りポインタを動かすことによりリンクスタック22をポップする。図2で図示されたリンクスタックの実施形態では、リンクスタック22をポップさせることは、いずれのエントリも破損しない。すなわち、誤予測された分岐を検出するとき、リンクスタック22の読み取りポインタは、そのプライアポジションに単にリセットされることができる。
投機的プログラム実行は、メインプログラムの流れに沿って継続し、LD、SUB、およびST命令を実行する。サブルーチンBへの呼び出しは、そのあとで、投機的に実行され、サブルーチンBにおいてLD命令に分岐し、リンクスタック22上へと次のメインプログラムADD命令のアドレスをプッシュする。リンクスタック22のプッシュオペレーションは、リンクスタックエントリの前の値に上書きし、そしてそれは、初期のメインプログラムLD命令のアドレスを含む。本発明の実施形態によると、ADD命令のアドレスがリンクスタック22上へとプッシュされるとき、LD命令のアドレスは、リンクスタック復元バッファ23において保存される。投機的実行は、サブルーチンBで継続し、2つのLD命令及びADDを実行する。
この時点で、初期の、誤予測された分岐命令は、パイプライン12を通じて進行しており(progressed)、実行パイプステージにおいて評価される。分岐誤予測が検出され、パイプライン12は、誤予測された分岐命令(サブルーチンAにおいてインデクス1に対するBEQ)に従っているすべての命令がフラッシュされる(flushed)。リンクスタック22に対する誤りプッシュオペレーションはまた検出されており(ここにおいてより詳細に説明されているように)、メインプログラムLD命令のアドレスは、リンクスタック復元バッファ23からリンクスタック22における適切なエントリに書き込まれ(すなわち、リンクスタック復元バッファ23において、リンクアドレスと共に、リンクスタックインデクスが保存される)、メインプログラムADD命令の誤りアドレスに上書きする。リンクスタック22の読み取り及び書き込みポインタはまた、リセットされ、誤予測された分岐命令にしたがった命令は、フェッチされ、実行される(すなわち、インデクス1に対するBEQが続くLD、で始まる(beginning with the LD following the BEQ to index 1))。LD及びORRの命令が実行された後で、リンクリターン命令に対する分岐は、メインプログラムにおいてLD命令に分岐しており(破損されたリンクスタック22がそれを指示したであろう、ADDではない)、適切な命令実行が継続する。
図2に戻って参照すると、各予測された分岐命令について、パイプライン12におけるコミットされていないリンクスタック書き込み命令の合計数のカウントを、パイプライン12における分岐命令の前のコミットされていないリンクスタック書き込み命令の数のカウントと比較することによって、リンクスタック22への誤りの投機的な書き込みは検出される。これらの2つのカウントの不一致は、関連分岐命令の後ろで、−リンクスタック22上へとリンクアドレスをプッシュした−リンクスタック書き込み命令を示す。その分岐命令が誤予測されたと決定される場合には、プッシュオペレーションは、投機的で且つ誤りであったと知られ、リンクスタック修理バッファ23において保存されたリンクアドレスを復元することによって、修復されることができる。
分岐及びリンク構築のようなリンクスタック22に書き込む命令がパイプライン12において復号されるとき、リンクアドレスは、リンクスタック22に書き込まれ、アップ/ダウンカウンタ50はインクリメントされる。図2で図示された実施形態では、このことは、本発明がこのインプリメンテーションに限定されないにも関わらず、復号パイプステージで生じる。リンクスタック22に書き込む各命令がパイプライン12で実行をコミットするとき、アップ/ダウンカウンタ50は、デクリメントされる。したがって、アップ/ダウンカウンタ50の値は、パイプライン12における命令の順序に関わらず、パイプライン12における「フライト中(in-flight)」であるコミットされていないリンクスタック書き込み命令の数を示す。
分岐予測および投機的命令実行をサポートする多くのプロセッサは、分岐情報キュー(branch information queue)(BIQ)25を含む。BIQ25は、分岐予測、予測された分岐ターゲットアドレス、及び同様なもののようなフライト中分岐命令についての情報を保存する。BIQ25における各エントリは、固有のコミットされていない(Ae、フライト中)分岐命令に関連づけられている。本発明の1つまたは複数の実施形態によると、カウントフィールドは、各BIQ25エントリにおいて定義されており、したがって各コミットされていない分岐命令に関連づけられている。分岐命令が復号パイプステージのような初期のパイプステージを残すとき、アップ/ダウンカウンタ50の現在の値は、その分岐命令に関連づけられたBIQエントリのカウントフィールドへとコピーされる。この値は、パイプライン12におけるコミットされていないリンクスタック書き込み命令の数を表しており、したがって分岐命令の前である。BIQカウントフィールド値は、リンクスタック22に書き込む命令がパイプライン12において実行にコミットする度にデクリメントする。したがって、BIQカウントフィールド値は、パイプライン12において関連づけられた分岐命令の前のコミットされていないリンクスタック書き込み命令の数を表わす。
BIQカウントフィールドは、アップ/ダウンカウンタ50の値で初期化される。BIQカウントフィールド及びアップ/ダウンカウンタ50の両方は、コミットしているリンクスタック書き込み命令によって、デクリメントする。アップ/ダウンカウンタ50は、新しく復号されたリンクスタック書き込み命令によってインクリメントされ;BIQカウントフィールドは決してインクリメントされない。したがって、新しいリンクスタック書き込み命令が関連分岐命令の後でパイプライン12に入らない場合にのみ、2つのカウント値は互いに追跡する。逆に、2つのカウント値における不一致は、少なくとも1つの新しいリンクスタック書き込み命令が関連分岐命令の後でパイプライン12に入ったということを示す。
分岐命令がパイプライン12において評価し、誤予測したと決定されるとき、当技術分野で知られているように、誤予測された分岐命令にしたがった命令は、すべてパイプライン12からフラッシュされる。さらに、誤予測された分岐命令に関連づけられたBIQカウントフィールドは、比較器52においてアップ/ダウンカウンタ50の値と比較される。2つのカウントが同じである場合には、誤予測された分岐命令の前のコミットされていないリンクスタック書き込み命令の数は、パイプライン12におけるコミットされていないリンクスタック書き込み命令の合計数と等しく、そしてそれは、誤予測された分岐の後ろにコミットされていない(投機的に実行された)リンクスタック書き込み命令がないということを意味する。したがって、リンクスタック22の修復は必要とされない。
しかしながら、BIQカウントフィールドがアップ/ダウンカウンタ50の値と異なる場合には、少なくとも1つのリンクスタック書き込み命令は、BIQエントリが誤予測された分岐命令について作成された後で復号され、そしてそれは、リンクスタック22は分岐後予測に応じて投機的に実行される命令によって書き込まれたということを意味しており、そして、リンクスタック22に対してリンクスタック修理バッファ23のコンテンツを復元することによって修理される必要があり得る。このことは、リンクスタック修復バッファ23とパイプライン12との間の、リンクスタック22に対するインプットを多重化する比較回路52のアウトプットによって機能的に示されている。当業者は、実際のインプリメンテーションが異なるということを理解するであろう。アップ/ダウンカウンタ50、複数のBIQカウントフィールド、比較器52、及び他のインプリメンテーションロジック(示されていない)は、リンクスタックモニタ回路を備える。
図2で図示された実施形態では、リンクスタック修復バッファ23は、単一のエントリを備える。この場合には、比較器52は、縮小AND(reduction AND)と共に、単純ビットワイズXOR関数(a simple bitwise XOR function)をインプリメントすることができる。2以上のリンクアドレスがリンクスタック修復バッファ23において保存されることができる他の実施形態では、アップ/ダウンカウンタ50値とBIQカウントフィールドとの間の数値比較は、誤予測された分岐にしたがったリンクスタック書き込みオペレーションの数を示しており、そしてそれは修復される。XOR/AND関数は、2リンクスタック書き込み命令が誤予測した分岐命令に従ったイベントにおいて、破損したリンクスタック22を検出することを失敗する可能性があり、ここにおいてnは、BIQカウントフィールドの幅である(カウントフィールドに「ラップ(wrap)」させる)、ということに留意してください。n≧2の場合、パイプライン12が非常に深くないかぎり、これはありそうにない。
図2で図示されるリンクスタック22の少なくとも一実施形態(すなわち環状バッファとしてインプリメントされる)では、投機的なリンクスタック書き込み命令(プッシュ)は、リンクスタック22のエントリを、投機的なリンクスタック読み取り命令(ポップ)がそれを先行しないかぎり、破損しない。したがって、一実施形態では、投機的なリンクスタックポップオペレーションが誤りの投機的なリンクスタックプッシュを先行したということを検出される場合にのみ、リンクスタック修復バッファ23からの保存された値がリンクスタック22に復元される。別の実施形態では、リンクスタック修復バッファ23からの保存された値は、投機的なリンクスタックポップ及びプッシュオレーションの両方が検出される場合にのみ、しかしそれらの相対的な実行順序に関係なく、リンクスタック22に復元される。一実施形態では、投機的なリンクスタックポップ検出は、投機的なリンクスタックプッシュオペレーションを検出するためにここにおいて説明されたものと同様にインプリメントされることができ、−すなわち、パイプライン−ワイドな投機的リンクスタック読み取り命令のアップ/ダウンカウンタと、各分岐命令に関連づけられた投機的なリンクスタック読み取り命令カウントと、を保持し、そして、分岐が誤予測されたと決定される場合には2つの値を比較する。
図4は、リンクスタックを管理する方法60のフロー図を図示している。分岐命令の評価は予測される(ブロック62)。その分岐予測に基づいて、命令は、次のシーケンシャルアドレスあるいは予測された分岐ターゲットアドレスから投機的にフェッチされ、そして実行される(ブロック64)。命令(投機的に実行された命令を含む)がリンクスタック22を書き込む(ブロック66)ときにはいつでも、上書きされたリンクスタックエントリの前の値は、リンクスタック復元バッファ23において保存される(ブロック68)。分岐命令が実行パイプステージにおいて評価されるときに、分岐予測が正しい場合には(ブロック70)、パイプラインオペレーションは通常に継続する。分岐が誤予測された場合(ブロック70)には、投機的命令は、パイプラインからフラッシュされ、適切な命令が、分岐命令にしたがったアドレスあるいは計算されたターゲットアドレスのいずれか、からフェッチされる(ブロック72)。
投機的命令−すなわち分岐命令にしたがった命令−がリンクスタック22を書き込んだかどうかが確認される(ブロック74)。一実施形態においては、このことは、パイプラインにおいてすべてのコミットしていないリンクスタック書き込み命令の進行中カウントと、各分岐命令の前のすべてのコミットしていないリンクスタック書き込み命令のカウントと、を保持することと、そして、誤予測された分岐命令に関連づけられたカウントと合計カウントを比較することと、を備える。誤予測された分岐命令にしたがった命令がリンクスタック22を書き込まなかった場合(ブロック74)には、パイプラインオペレーションは、通常に継続する。投機的命令がリンクスタック22を書き込んだ場合、プライアリンクスタックエントリ値は、保存されたリンクスタックインデクスにおいてリンクスタック復元バッファ23から復元されることができ(ブロック76)、パイプラインオペレーションは、通常に継続する。いくつかの実施形態において、リンクスタック22の復元は、投機的な読み取り命令がまたリンクスタック22をポップさせた場合にのみ生じる。
一実施形態では、単独エントリリンクスタック修復バッファ23は、リンクアドレス用の32ビット、モードビット(a mode bit)(例、ARM/Thumbモードビット)、3ビットインデクス(8エントリリンクスタック22用)を備えている。各BIQカウントフィールドは、パイプライン12の深さに依存して、2あるいは3ビットのみを備えることができる。したがって、このアプローチのハードウェア影響は最小である。20%より大きくもたらされた単独エントリのリンクスタック修復バッファ23のシミュレーションは、リンクスタック修復メカニズムがないものよりも、リンクスタック精度において増加させる。より深いリンクスタック修復バッファのシミュレーションは、ごくわずかなさらなる精度の増加をもたらした。もちろん、これらの結果は、多数の要因に依存しており、パイプラインの深さ、コード特性、及び同様なものを含む。一般的に、当業者は、本開示の教示が与えられると、いずれの特定のプロセッサのインプリメンテーションについてのシリコンエリア及び設計の複雑さを用いて、性能及び節電のバランスをとるリンクスタック修復バッファ深さを選択することができるようになるであろう。マルチプルリンクスタック修復バッファエントリ(及びカウンタ比較の付随する複雑さ)でさえ、本発明の実施形態は、個別の「コミットされた」リンクスタックよりも、破損したリンクスタック復元に対してずっと効率的な解決方法を提供する。さらに、リンクスタック22のオペレーションは、パイプレイン12の初期に生じ、短いサブルーチンさえにもリンクスタック最適化を提供する。
ここに使用されるように、「リンクスタック書き込み命令(link stack write instruction)」は、命令が他の機能(例えばプログラムフローリダイレクション(program flow redirection))をインプリメントする場合にさえ、リンクスタック上へとリンクアドレスをプッシュする、分岐及びリンク命令のような任意の命令である。ここにおいて使用されるように、「カウンタ(counter)」は、保存された値をインクリメント及び/またはデクリメントするように動作可能なハードウェアカウンタを備えることができ、あるいは、値を読み取り、オペレーションを実行し、ビットフィールドに新しい値を書き込むことによって、値がインクリメント/デクリメントするバッファにおいてビットフィールドを備えることができる。
本発明は、特定の特徴、態様、およびそれらの実施形態に関して、ここに説明されてきたけれども、多くの変形、修正、および他の実施形態は、本発明の広い範囲内で可能であり、したがって、すべての変形、修正、および実施形態は、本発明の範囲内にあるものとしてみなされるべきであるということは、明らかであろう。したがって、本実施形態は、すべての態様において限定ではなく説明のためとして解釈されるべきであり、添付された特許請求の範囲の意味および同等な範囲(the meaning and equivalency range)の中に入るすべての変更は、そこに包含されるように意図されている。

Claims (18)

  1. それぞれがリンクアドレスを保存するように動作可能である複数のエントリ、を備えているリンクスタックを管理する方法であって、
    リンクスタックエントリに任意の新しいリンクアドレスを書き込むときに、前記リンクスタックエントリの前の値を保存することと、
    分岐命令の前記分岐評価を予測することと、
    前記予測に応じて、命令を投機的に実行することと、
    前記分岐評価は誤予測されたということを検出し、前記リンクスタックは投機的に書き込まれたということを検出することと、
    前記リンクスタックに前記保存された値を復元することと、
    を備えている方法。
  2. 前記リンクスタックが投機的に書き込まれたということを検出することは、
    前記パイプラインにおいてコミットされていないリンクスタック書き込み命令の合計数のカウントを保持することと、
    各コミットされていない分岐命令に関連づけられた、前記パイプラインにおけるそれの前の前記コミットされていないリンクスタック書き込み命令のカウント、を保持することと、
    分岐が誤予測されたということを検出するとき、前記分岐命令に関連づけられたカウントと合計カウントを比較し、前記カウントが同じでない場合にはリンクスタックが投機的に書き込まれたということを検出することと、
    を備える請求項1に記載の方法。
  3. 前記パイプラインにおいてコミットされていないリンクスタック書き込み命令の合計数のカウントを保持することは、
    リンクスタック書き込み命令を復号するときにアップ/ダウンカウンタをインクリメントすることと、
    リンクスタック書き込み命令が実行をコミットするときには、前記アップ/ダウンカウンタをデクリメントすることと、
    を備えている、
    請求項2に記載の方法。
  4. 各コミットされていない分岐命令に関連づけられた、前記パイプラインにおけるそれの前の前記コミットされていないリンクスタック書き込み命令のカウント、を保持することとは、
    前記分岐命令を復号するときに前記分岐命令に関連づけられたカウンタに前記アップ/ダウンカウンタの値をコピーすることと、
    リンクスタック書き込み命令が実行をコミットするときには前記カウンタをデクリメントすることと、
    を備えている、
    請求項3に記載の方法。
  5. 前記分岐命令に関連づけられた前記カウンタは、前記分岐命令に関連づけられた分岐命令キューエントリにおけるフィールドである、請求項4に記載の方法。
  6. 前記前の値と共に新しく書き込まれたリンクスタックエントリの前記リンクスタックインデクスを保存すること、をさらに備えており、前記リンクスタックに前記保存された値を復元することは、前記保存されたリンクスタックインデクスにおいて前記リンクスタックエントリに前記値を復元することを備えている、請求項1に記載の方法。
  7. 前記リンクスタックが投機的に読み取られたということを検出すること、をさらに備えており、前記リンクスタックに前記保存された値を復元することは、前記リンクスタックが投機的に読み取られ且つ投機的に書き込まれた場合にのみ、前記リンクスタックに前記保存された値を復元することを備える、請求項1に記載の方法。
  8. 前記リンクスタックに前記保存された値を保存することは、前記リンクスタックが投機的に書き込まれる前に投機的に読み取られた場合にのみ、前記リンクスタックに前記保存された値を復元することを備えている、請求項7に記載の方法。
  9. 命令実行パイプラインと、
    それぞれがリンクアドレスを保存するように動作可能である複数のエントリ、を備えているリンクスタックと、
    任意のリンクスタックエントリが新しいリンクアドレスで上書きされているときにリンクスタックエントリの前の値を保存するように動作可能な、また、それを置き換えた前記リンクスタック書き込みが投機的で誤りであるという検出のときに、前記リンクスタックエントリに前記前の値を復元するように動作可能な、リンクスタック復元バッファと、
    前記リンクスタックへの誤りの、投機的な書き込みを検出するように動作可能なリンクスタックモニタ回路と、
    を備えるプロセッサ。
  10. 前記リンクスタックモニタ回路は、誤予測された分岐命令にしたがった前記パイプラインにおいて1つまたは複数のリンクスタック書き込み命令を検出することによって、前記リンクスタックへの誤りの、投機的な書き込みを検出するように動作可能である、請求項9に記載のプロセッサ。
  11. 前記リンクスタックモニタ回路は、前記パイプラインにおける誤予測された分岐命令の前の前記コミットされていないリンクスタック書き込み命令のカウントと、前記パイプラインにおけるコミットされていないリンクスタック書き込み命令の合計数のカウントと、を比較することによって、誤予測分岐命令にしたがった前記パイプラインにおいて1つまたは複数のリンクスタック書き込み命令を検出するように動作可能である、請求項10に記載のプロセッサ。
  12. 前記パイプラインにおいてコミットされていないリンク書き込み命令の合計数のカウントは、リンクスタック書き込み命令が復号されるときにインクリメントし、リンクスタック書き込み命令が実行をコミットするときにデクリメントする、アップ/ダウンカウンタの値である、請求項11に記載のプロセッサ。
  13. 前記パイプラインにおける誤予測された分岐命令の前の前記コミットされていないリンクスタック書き込み命令のカウントは、前記分岐命令が復号されるときには前記アップ/ダウンカウンタの前記値に初期化しリンクスタック書き込み命令が実行をコミットするときにはデクリメントする、分岐命令に関連づけられたカウンタの値であり、前記分岐命令は、誤予測されたと評価される、請求項12に記載のプロセッサ。
  14. プロセッサであって、
    命令実行パイプラインと;
    それぞれがリンクアドレスを保存するように動作可能である複数のエントリ、を備えているリンクスタックと;
    任意のリンクスタックエントリが新しいリンクアドレスで上書きされているときにリンクスタックエントリの前の値を保存するように動作可能で、それを置き換えた前記リンクスタック書き込みが投機的で誤りであったという検出のときに前記リンクスタックエントリに前記前の値を復元するように動作可能な、リンクスタック復元バッファと;
    リンクスタック書き込み命令を復号するときにインクリメントし、リンクスタック書き込み命令が実行をコミットしているときにデクリメントすることによって、前記パイプラインにおいてコミットされていないリンクスタック書き込み命令のカウントを保持するように動作可能なアップ/ダウンカウンタと;
    前記パイプラインにおいて各コミットされていない分岐命令に関連づけられたカウンタと、なお、前記カウンタは、分岐命令を復号するときに前記アップ/ダウンカウンタ値に初期化し、リンクスタック書き込み命令が実行にコミットするときにデクリメントすることによって、前記パイプラインにおける前記分岐命令の前のコミットされていないリンクスタック書き込み命令のカウントを保持するように動作可能である;
    前記アップ/ダウンカウンタ値と誤予測された分岐命令に関連づけられた前記カウンタの前記値とを比較することによって、誤りの、投機的なリンクスタック書き込みオペレーションを検出するように動作可能な比較器と;
    を備えるプロセッサ。
  15. 前記リンクスタック復元バッファは、前記上書きされたエントリの前記リンクスタックインデクスを保存するように動作可能である、請求項14に記載のプロセッサ。
  16. 前記リンクスタック復元バッファは、単独のエントリを備えている、請求項14に記載のプロセッサ。
  17. 前記比較器は、ビットワイズXOR及び縮小AND関数をインプリメントする、請求項14に記載のプロセッサ。
  18. 前記パイプラインにおいて各コミットされていない分岐命令に関連づけられた前記カウンタは、分岐命令キューにおいてカウントフィールドを備えている、請求項14に記載のプロセッサ。
JP2010528173A 2007-10-05 2008-10-03 誤りの投機的更新のリンクスタック修復 Expired - Fee Related JP5313253B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US11/867,727 US7971044B2 (en) 2007-10-05 2007-10-05 Link stack repair of erroneous speculative update
US11/867,727 2007-10-05
PCT/US2008/078789 WO2009046326A1 (en) 2007-10-05 2008-10-03 Link stack repair of erroneous speculative update

Publications (2)

Publication Number Publication Date
JP2010541106A true JP2010541106A (ja) 2010-12-24
JP5313253B2 JP5313253B2 (ja) 2013-10-09

Family

ID=39951564

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010528173A Expired - Fee Related JP5313253B2 (ja) 2007-10-05 2008-10-03 誤りの投機的更新のリンクスタック修復

Country Status (6)

Country Link
US (2) US7971044B2 (ja)
EP (1) EP2195735A1 (ja)
JP (1) JP5313253B2 (ja)
KR (1) KR101174560B1 (ja)
CN (2) CN103353833B (ja)
WO (1) WO2009046326A1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2016517092A (ja) * 2013-03-15 2016-06-09 クアルコム,インコーポレイテッド プロセッサにおいてリターン分岐命令を実行する速度を向上させる方法

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8510596B1 (en) 2006-02-09 2013-08-13 Virsec Systems, Inc. System and methods for run time detection and correction of memory corruption
US7971044B2 (en) * 2007-10-05 2011-06-28 Qualcomm Incorporated Link stack repair of erroneous speculative update
US8438372B2 (en) 2007-10-05 2013-05-07 Qualcomm Incorporated Link stack repair of erroneous speculative update
US8943299B2 (en) * 2010-06-17 2015-01-27 International Business Machines Corporation Operating a stack of information in an information handling system
WO2012103359A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Hardware acceleration components for translating guest instructions to native instructions
WO2014151652A1 (en) 2013-03-15 2014-09-25 Soft Machines Inc Method and apparatus to allow early dependency resolution and data forwarding in a microprocessor
CN109358948B (zh) * 2013-03-15 2022-03-25 英特尔公司 用于支持推测的访客返回地址栈仿真的方法和装置
AU2014318585B2 (en) 2013-09-12 2018-01-04 Virsec Systems, Inc. Automated runtime detection of malware
GB2516999B (en) 2014-01-31 2015-07-22 Imagination Tech Ltd An improved return stack buffer
AU2015279923B9 (en) 2014-06-24 2018-01-25 Virsec Systems, Inc. System and methods for automated detection of input and output validation and resource management vulnerability
AU2015279920B2 (en) 2014-06-24 2018-03-29 Virsec Systems, Inc. Automated root cause analysis of single or N-TIERED applications
US20160139933A1 (en) * 2014-11-18 2016-05-19 Qualcomm Incorporated Providing loop-invariant value prediction using a predicted values table, and related apparatuses, methods, and computer-readable media
US11409870B2 (en) 2016-06-16 2022-08-09 Virsec Systems, Inc. Systems and methods for remediating memory corruption in a computer application
CN106527335B (zh) * 2016-12-08 2019-03-19 湖南戈人自动化科技有限公司 一种支持协程功能的plc控制器
GB2573119A (en) * 2018-04-24 2019-10-30 Advanced Risc Mach Ltd Maintaining state of speculation
US11995443B2 (en) 2022-10-04 2024-05-28 Microsoft Technology Licensing, Llc Reuse of branch information queue entries for multiple instances of predicted control instructions in captured loops in a processor

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020129226A1 (en) * 2001-03-08 2002-09-12 International Business Machines Corporation Circuits and methods for recovering link stack data upon branch instruction mis-speculation
US6560696B1 (en) * 1999-12-29 2003-05-06 Intel Corporation Return register stack target predictor

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5563594A (en) * 1994-08-31 1996-10-08 Motorola Circuit and method of timing data transfers
US5964868A (en) * 1996-05-15 1999-10-12 Intel Corporation Method and apparatus for implementing a speculative return stack buffer
US6151671A (en) * 1998-02-20 2000-11-21 Intel Corporation System and method of maintaining and utilizing multiple return stack buffers
US6910124B1 (en) * 2000-05-02 2005-06-21 International Business Machines Corporation Apparatus and method for recovering a link stack from mis-speculation
CN1326037C (zh) * 2004-02-06 2007-07-11 智慧第一公司 用于更正微处理器中的内部调用或返回堆栈的方法与装置
US20070204142A1 (en) * 2006-02-27 2007-08-30 Dieffenderfer James N Method and apparatus for repairing a link stack
US7971044B2 (en) 2007-10-05 2011-06-28 Qualcomm Incorporated Link stack repair of erroneous speculative update
US8438372B2 (en) 2007-10-05 2013-05-07 Qualcomm Incorporated Link stack repair of erroneous speculative update

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6560696B1 (en) * 1999-12-29 2003-05-06 Intel Corporation Return register stack target predictor
US20020129226A1 (en) * 2001-03-08 2002-09-12 International Business Machines Corporation Circuits and methods for recovering link stack data upon branch instruction mis-speculation

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
JPN6012043957; Kevin Skadran et al.: 'Improving Prediction for Procedure Returns with Return-Address-Stack Repair Mechanisms' Proceedings of 31st Annual ACM/IEEE International Symposium on Microarchitecture , 19981130, Pages:259-271, IEEE *
JPN6012043959; Guan-Ying Chiu et al.: 'Mechanism for Return Stack and Branch History Corrections under Misprediction in Deep Pipeline Desig' Proceedings of 13th Asia-Pacific Computer Systems Architecture Conference(ACSAC 2008) , 20080804, Pages:1-8, IEEE *

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2016517092A (ja) * 2013-03-15 2016-06-09 クアルコム,インコーポレイテッド プロセッサにおいてリターン分岐命令を実行する速度を向上させる方法

Also Published As

Publication number Publication date
CN101815984A (zh) 2010-08-25
WO2009046326A1 (en) 2009-04-09
US20090094444A1 (en) 2009-04-09
US20110219220A1 (en) 2011-09-08
KR101174560B1 (ko) 2012-08-17
CN103353833A (zh) 2013-10-16
US8438371B2 (en) 2013-05-07
KR20100075607A (ko) 2010-07-02
US7971044B2 (en) 2011-06-28
CN103353833B (zh) 2016-04-13
EP2195735A1 (en) 2010-06-16
CN101815984B (zh) 2013-05-29
JP5313253B2 (ja) 2013-10-09

Similar Documents

Publication Publication Date Title
JP5313253B2 (ja) 誤りの投機的更新のリンクスタック修復
US8438372B2 (en) Link stack repair of erroneous speculative update
JP6370829B2 (ja) 誤予測された分岐のためにフラッシュするセグメント化パイプライン
JP4856100B2 (ja) 非アラインドメモリアクセス予測
JP3565504B2 (ja) プロセッサにおける分岐予測方法及びプロセッサ
US10289415B2 (en) Method and apparatus for execution of threads on processing slices using a history buffer for recording architected register data
EP2024820B1 (en) Sliding-window, block-based branch target address cache
US20180121203A1 (en) Shortcut path for a branch target buffer
EP1562107B1 (en) Apparatus and method for performing early correction of conditional branch instruction mispredictions
US10073699B2 (en) Processing instructions in parallel with waw hazards and via a distributed history buffer in a microprocessor having a multi-execution slice architecture
US5740393A (en) Instruction pointer limits in processor that performs speculative out-of-order instruction execution
US7185182B2 (en) Pipelined microprocessor, apparatus, and method for generating early instruction results
US9535744B2 (en) Method and apparatus for continued retirement during commit of a speculative region of code
US20170109167A1 (en) Method and apparatus for restoring data to a register file of a processing unit
JPH096612A (ja) カウント・レジスタおよびリンク・レジスタへの書込みを行う多重分岐命令を処理するための方法と装置
KR100305487B1 (ko) 특정유형의인스트럭션을동시에처리할수있는방법및데이터프로세싱시스템
US6871275B1 (en) Microprocessor having a branch predictor using speculative branch registers
IE940854A1 (en) Data processor with branch prediction and method of¹operation
US6718460B1 (en) Mechanism for error handling in a computer system
US7100024B2 (en) Pipelined microprocessor, apparatus, and method for generating early status flags

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120828

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20121126

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20121203

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130128

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130219

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130520

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20130604

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130703

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

Ref document number: 5313253

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees