JP5301554B2 - プロシージャリターンシーケンスを加速するための方法およびシステム - Google Patents

プロシージャリターンシーケンスを加速するための方法およびシステム Download PDF

Info

Publication number
JP5301554B2
JP5301554B2 JP2010533174A JP2010533174A JP5301554B2 JP 5301554 B2 JP5301554 B2 JP 5301554B2 JP 2010533174 A JP2010533174 A JP 2010533174A JP 2010533174 A JP2010533174 A JP 2010533174A JP 5301554 B2 JP5301554 B2 JP 5301554B2
Authority
JP
Japan
Prior art keywords
instruction
logic circuit
return
procedure
branch
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.)
Expired - Fee Related
Application number
JP2010533174A
Other languages
English (en)
Other versions
JP2011503718A (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 JP2011503718A publication Critical patent/JP2011503718A/ja
Application granted granted Critical
Publication of JP5301554B2 publication Critical patent/JP5301554B2/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
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30054Unconditional branch instructions
    • 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/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • 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/3818Decoding for concurrent execution
    • G06F9/382Pipelined decoding, e.g. using predecoding

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)
  • Executing Machine-Instructions (AREA)

Description

本発明は、一般にコンピュータシステムに関し、そしてより詳細にはプロセッサ内のポップブランチ命令シーケンスを識別することにより、リターンシーケンスを加速するための方法およびシステムに関する。
プロセッサによって実行される大部分のプログラムは、サブルーチンまたはプロシージャを含んでいる。プロシージャは、プロシージャ呼び出しシーケンスによってアクセスされるコードのモジュールである。ひとたびプロシージャが、完了された後には、命令実行は、プロシージャリターンシーケンス(procedure return sequence)の実行によって呼び出し側(caller)に戻される。
いくつかのプロセッサアーキテクチャ内において、プロシージャのコールおよびリターンのシーケンスは、一連の命令へとコンパイルされることができる。例えば、プロシージャ呼び出しシーケンスは、ブランチおよびリンクの命令によって追随されるPUSH命令から成ることができる。PUSH命令(単数または複数)は、プロシージャ内の命令によって使用されるパラメータをソフトウェアスタック(software stack)上に保存することができる。PUSH命令の後に、プロセッサは、ブランチおよびリンクの命令を実行することができる。ブランチおよびリンクの命令は、命令のフェッチおよび実行が、プロシージャの開始アドレスにおいて開始するようにさせ、そしてリターンアドレスまたはリンクアドレスとして知られている、ブランチおよびリンクの命令に続く次の逐次命令のアドレスをリンクレジスタ(link register)に保存する。リンクレジスタは、プロセッサによって使用される専用レジスタ、あるいは汎用レジスタ(general purpose registers)(GPR)のうちの1つとすることができる。プロシージャ内において、リンクレジスタ内容は、一般的にソフトウェアスタック上へとプッシュされ、その結果、その値は、別のプロシージャが、元の呼び出し側に戻る前に呼び出される場合には、上書きされないようになる。
プロシージャがそのファンクションを完了した後に、プロセッサは、リンクアドレス(プロシージャ呼び出し命令に続く次の逐次命令アドレス)において命令実行を再開するためにプロシージャリターンシーケンスを実行する。リターンアドレスは、多くの場合にソフトウェアスタック上に保存されるので、プロシージャリターンシーケンスは、最初に、フェッチされるべき次のグループの命令を決定するそのアドレスを使用するために、リターンアドレスをソフトウェアスタックから取り出す必要がある。
プロシージャリターンシーケンスは、1つまたは複数の命令から成ることができる。いくつかのプロセッサアーキテクチャにおいては、プロシージャリターンシーケンスは、次のリターンアドレスをソフトウェアスタックから読み取り、そしてプログラムカウンタ(program counter)(PC)をアップデートすることができる、POP命令やロード命令などの単一命令とすることができる。あるいは、プロセッサは、プロシージャリターンシーケンスを完了するためにその値をプログラムカウンタへと移動する前に、ソフトウェアスタックからGPRなどの中間レジスタへとリンクアドレスを読み取るためにPOP命令またはロード命令を使用することもできる。他の例示的な例においては、プロセッサは、プロシージャからのリターンが、リンクレジスタ(link register)(LR)に保存される値をPCへと移動する命令とすることができることを決定することができる。プロセッサが、プロシージャコールの後にこれらのプロシージャリターンシーケンスのうちのどれかに出合うときに、プロセッサは、ソフトウェアスタックから取り出されるリターンアドレス値を使用してプロシージャ呼び出し命令に続く次の逐次命令へと後方にジャンプする。
追加のロジックは、命令処理の効率を改善するためにプロセッサのハードウェアに追加されることができる。例えば、リンクスタックは、命令フェッチを高速化するためにプロセッサのフェッチロジックに追加されることができる。当業者は、リンクスタックが、ソフトウェアスタック上にやはり存在することもできるリターンアドレスを含むことができることを認識する。しかしながら、リンクスタックは、ソフトウェアスタックとは独立して動作する。リンクスタックに関連するハードウェアロジックは、プロシージャのコールとリターンとを識別する。プロシージャコール命令が、実行に先立って識別されるときに、関連するリターンアドレスは、リンクスタック上へとロードされる。逆に、プロシージャリターンが、識別されるときには、関連するリターンアドレスは、リンクスタックから取り出され、そして命令フェッチを再開するために使用される。実行すべき命令を待つことと、ソフトウェアスタックからのリターンアドレスを取り出すこととの代わりに、プロセッサは、リンクスタックに記憶されるアドレスを使用して推測的に(speculatively)命令をフェッチすることができる。
プロセッサが進化するにつれて、プロシージャリターンシーケンスは、変化し続けている。いくつかのプロセッサアーキテクチャにおいては、プロシージャリターンは、複数の命令から成ることができる。リンクスタックをサポートするハードウェアロジックが、これらの命令をプロシージャリターンシーケンスとして認識しない場合、リターンアドレスは、リンクスタックから取り出されなくてもよく、そして結果としてリンクスタックは、命令シーケンスと同期が合わなくなる可能性がある。リンクスタックが同期が合わなくなるときに、リンクスタックは、複数のアドレス予測ミスを引き起こし得る誤ったリターンアドレス情報を提供する可能性がある。
したがって、ある種の命令シーケンス、より詳細にはPOP(またはロード)およびブランチの命令シーケンスをプロシージャリターンシーケンスとして認識するプロセッサ回路を有する必要性が、産業界において存在している。本開示は、この必要性を認識し、そして命令パイプラインの中で早期にプロシージャリターンに対応する命令を識別する回路を有するプロセッサを開示している。プロシージャリターンを識別した後に、プロセッサは、リンクスタックからの次のリターンアドレスを使用することにより次のグループの命令をフェッチする。POPおよびブランチの命令シーケンスをプログラムリターンとして認識することにより、プロセッサは、リンクスタックから取り出される正しいアドレスに基づいて命令をフェッチすることを継続することができる。
パイプラインプロセッサにおいてプロシージャから戻るときにリンクスタックからリターンアドレスを取り出すための方法が、開示される。本方法は、リンクスタックからリターンアドレスを取り出すように動作する検索命令(retrieve instruction)を識別する。本方法は、リターンアドレスへと分岐するように動作するブランチ命令を識別する。本方法は、識別される命令とブランチ命令との両方に応じてリンクスタックからリターンアドレスを取り出す。本方法は、リターンアドレスを使用して後続の命令をフェッチする。
パイプラインプロセッサが、開示される。パイプラインプロセッサは、ラインバッファ(line buffer)を有する。ラインバッファは、命令キャッシュに結合される。プロセッサは、命令キャッシュに結合されるフェッチロジック回路も有する。フェッチロジック回路は、予測リターンアドレスを記憶するリンクスタックを有し、そこで命令は、ラインバッファから命令キャッシュへとロードされる。フェッチロジック回路は、命令キャッシュから命令を取り出す。パイプラインプロセッサは、ラインバッファと通信するプリデコードロジック回路(pre-decode logic circuitry)も有し、そこでプリデコードロジック回路は、プロシージャリターンシーケンスを識別するための検出ロジック回路を有する。プロシージャリターンシーケンスは、ソフトウェアスタックからリターンアドレスを取り出すように動作する検索命令と、取り出されたリターンアドレスへと分岐するブランチ命令として識別される。パイプラインプロセッサは、プロシージャリターンシーケンスの識別に応じてリンクスタックから予測されたリターンアドレスを取り出す。
パイプラインプロセッサが、開示される。パイプラインプロセッサは、フェッチロジック回路を有する。フェッチロジック回路は、予測されたリターンアドレスを記憶するリンクスタックを有する。フェッチロジック回路は、命令キャッシュから命令をフェッチする。パイプラインプロセッサは、フェッチロジック回路に結合されるデコードロジック回路も有し、そこでフェッチされた命令は、デコードロジック回路によって復号される。デコードロジック回路は、さらに検出ロジック回路を有し、そこで検出ロジック回路は、プロシージャリターンシーケンスを識別する。プロシージャリターンシーケンスは、ソフトウェアスタックからアドレスを取り出す検索命令と、取り出されたアドレスへと分岐するように動作するブランチ命令とである。パイプラインプロセッサは、プロシージャリターンシーケンスの識別に応じてリンクスタックから予測されたリターンアドレスを取り出す。パイプラインプロセッサは、プロシージャリターンの識別に応じてリンクスタックから予測されたリターンアドレスを取り出す。
本発明のより完全な理解、ならびに本発明のさらなる特徴および利点は、以下の詳細な説明と、添付の図面とから明らかであろう。
図1は、本発明の一実施形態を使用したプロセッサのハイレベルのロジックハードウェアブロック図を示している。 図2は、図1のプロセッサによって実行される1つの例示のグループの命令を示している。 図3は、本発明の一実施形態に従って検出ロジック回路を組み込んだ、図1のCPUの上位パイプラインと下位パイプラインとのより詳細なブロック図を示している。 図4は、図3のフェッチロジック回路のより詳細な図を示している。 図5は、検出ロジック回路を利用した上位パイプラインと下位パイプラインとの代替実施形態を示している。 図6は、プログラムリターンを認識して、そして命令をフェッチするためにリンクスタックを使用して、図1のプロセッサによって実行される命令プロセスフローを示すフローチャートを示している。 図7は、図4の上位パイプラインを使用してプロセッサによって実行される代替命令プロセスフローを示すフローチャートを示している。
詳細な説明
添付の図面に関連して以下で述べられる詳細な説明は、本発明の様々な例示の実施形態の説明として意図され、そして本発明が実行されることができる唯一の実施形態を表すように意図されてはいない。詳細な説明は、本発明の完全な理解を提供する目的のための特定の詳細を含んでいる。しかしながら、本発明が、これらの特定の詳細なしに実行されることができることは、当業者にとって明らかであろう。いくつかの例においては、よく知られている構造およびコンポーネントは、本発明の概念をあいまいにすることを回避するためにブロック図形式で示される。頭字語と、他の説明的な専門用語とは、単に便宜上、そして明快にするために使用されることができ、そして本発明の範囲を限定するように意図されてはいない。
図1は、以下に説明されるように本発明の一実施形態を利用したスーパースカラプロセッサ(superscalar processor)100のハイレベル図を示している。プロセッサ100は、制御信号104を経由して命令キャッシュ106に結合される中央演算処理装置(central processing unit)(CPU)102を有する。命令キャッシュ106はまた、ラインバッファ107に、そして汎用バス110によってメモリ108にも結合される。CPU102は、ラインバッファ107を経由してメモリ108から命令キャッシュ106への命令のローディング(loading)を制御する。CPU102は、下位パイプライン160および165に結合された上位パイプライン150を有する。下位パイプライン160および165内には、実行ステージ220および225がある。実行ステージ220内には、実行ユニット(execution units)(EU)130Aがあり、そして実行ステージ225内には、EU130Bがある。
当業者が理解するように、命令キャッシュ106は、メモリ108と、プロセッサ100との間の速度ギャップを埋めるように設計された専用メモリとすることができる。メモリ108からフェッチされる命令は、プロセッサのクロック速度で読み取られることができるより高速な命令キャッシュ106に配置される。命令が、命令キャッシュ106の中に存在しない場合、プロセッサ100は、メモリ108から命令を取り出す。命令が、メモリ108から取り出されるときに、それは、最初にラインバッファ107にロードされ、そして最終的には命令キャッシュ106へと書き込まれる。
命令キャッシュ106が、命令でロードされた後に、CPU102は、制御信号104を経由してそれらにアクセスする。命令は、命令キャッシュ106から上位パイプライン150へとロードされる。命令は、上位パイプライン150の中で処理され、次いでさらなる処理のために下位パイプライン160または165へと送られる。図3〜5の考察に関連して説明されるように、プロセッサは、特定の命令シーケンスを検出するように設計されたロジック回路を有することができる。これらの特定の命令シーケンスは、プロシージャリターンに対応することができる。プロシージャリターン命令シーケンスが識別された後に、プロセッサ100は、本発明の複数の実施形態に従ってこれらの命令に基づいてファンクションを実行することができる。
上位パイプライン150の中の命令上で実行されるいくつかの例示の処理ファンクションは、命令をフェッチすることと、命令を位置合わせすること(aligning)と、命令を復号することと、命令を下位パイプライン160または165に対して発行することなどとを含むことができる。下位パイプライン160および165内において、命令は、実行ユニット130Aおよび130Bによって実行されることができ、それらの結果が、記録される。
POPおよびブランチの命令シーケンスを使用したプロシージャリターンを有する実例のグループの命令200が、図2に示される。命令260と、命令のオペレーション270と、命令を実行するモジュール280とが、示されている。明確にする目的のために、プロシージャそれら自体による使用のためにソフトウェアスタック上でパラメータをプッシュすることになるどのような命令も、このグループの命令200から省略されている。プロシージャが実行する実際のファンクションを構成することになるどのような命令もまた、省略されている。図2に示される命令は、プロシージャを呼び出し、リターンアドレスをリンクレジスタ(この例においてはGPR R14)に保存し、リターンアドレスをソフトウェアスタック上に記憶し、ソフトウェアスタックからリターンアドレスを取り出し、そしてリターンアドレスに位置する命令を処理することを継続する命令である。グループの命令200は、それらが命令実行のトレース中にそうであるようなプログラム順序で図2に示されている。当業者は、トレースされた命令が、プロセッサがフェッチしている可能性がある実際のコードのサブセットであり、それらが実行されるべきであるように示されることを理解する。グループの命令200は、3つのネストされたプロシージャから成る。
グループの命令200内には、3つのプロシージャコールと、それらの関連するリターンとがある。最初のプロシージャコールは、命令Aであり、この命令は、プロシージャPROC1を呼び出す。命令Bは、プロシージャPROC1内の準備命令(preparatory instruction)であり、現在のリターンアドレスをソフトウェアスタック上へと保存する。命令Cは、第2のプロシージャコール命令であり、プロシージャPROC2を呼び出す。命令Dは、プロシージャPROC2内の別の準備命令であり、PROC2に関連するリターンアドレスをソフトウェアスタック上へと保存する。最後のプロシージャコール命令は、命令Eであり、この命令は、プロシージャPROC3を呼び出す。
プロシージャコール命令に対応してプロシージャリターン命令がある。最初のプロシージャリターン命令は、命令Fである。以前のプロセッサアーキテクチャにおいては、命令Fは、プロシージャリターン命令として認識される。次の2つの命令、組み合わされた命令GおよびHは、別のプロシージャリターンを表す。一般に、以前のプロセッサアーキテクチャにおいては、POP命令とブランチ命令との命令の組合せは、ハードウェアリンクスタックによる使用のためのプロシージャリターンとして適切に識別されない可能性がある。これらの以前のプロセッサにおける結果として、リンクスタック上の次のリターンアドレスは、命令GおよびHが識別されるときに取り出されない可能性がある。一実施形態を使用したプロセッサは、この可能なリンクスタック破損を軽減することができる。一実施形態においては、命令Hが、プロシージャリターン命令として識別された後に、プロセッサ100は、リンクスタックから次のアドレスを取り出し、そして命令をフェッチすることを継続するために取り出されたアドレスを使用することができる。この例においては、リンクスタック上の次のアドレスは、プロシージャPROC1を戻って指し示し、そしてより詳細には、それは命令Cに続く次の逐次命令(命令I)を指し示す。命令Hは、暗黙ブランチ命令(implicit branch instruction)と称されることもできる。
次の2つの命令、命令IおよびJはまた、プロシージャリターンシーケンスとしても解釈される。命令Jが、プロセッサ100によってプロシージャリターン命令として識別されるときに、リンクスタック上の次のアドレスは、取り出され、そして命令フェッチを継続するために使用される。命令Jは、明示ブランチ命令(explicit branch instruction)である。この例においては、リンクスタックポイントを離れた次のアドレスは、プログラム実行を主プログラムへと逆に戻す。以前のプロセッサアーキテクチャにおいては、命令IとJとの組合せは、ハードウェアリンクスタックによる使用のためのプロシージャリターンシーケンスとして適切に識別されていない可能性がある。図3〜7の考察においてもっと詳細に説明されるように、本発明の様々な実施形態は、POPとブランチとの命令の組合せをプロシージャリターンシーケンスとして識別する。
図3は、本発明の一実施形態を利用したCPU102のより詳細なブロック図を示している。CPU102内において、上位パイプライン150は、制御信号104によって命令キャッシュ106に結合された、フェッチロジック回路202を含むフェッチステージ203を有する。またCPU102の中には、検出ロジック回路250を有するプリデコードロジック回路201がある。プリデコードロジック回路201は、命令キャッシュ106に結合されたラインバッファ107に結合される。フェッチステージ203は、順に発行ステージ207に結合されたデコードステージ205に結合される。デコードステージ205に結合されて、命令についての特有の情報を復号するデコードロジック回路(説明図を簡単にするために示されず)がある。発行ステージ207内には、下位パイプライン160および165に対して発行される命令に先立って命令を保持するいくつかの命令待ち行列(図示の容易のために図示せず)があってもよい。
当業者が理解しうるように、パイプラインステージは、命令を保持するように設計されたレジスタ、または1グループのレジスタを有することができる。命令が特定のステージに入ると、プロセッサ100は、その命令をそのステージにリンクされたレジスタ、または1グループのレジスタにロードする。命令が、各ステージ内のレジスタまたは1グループのレジスタに保持されるときに、ロジック回路は、命令に応じてある種のオペレーションを実行することができる。ロジック回路が、意図されたオペレーションを実行した後に、次いで命令は、次の逐次ステージへと渡される。さらに、命令が、上位パイプライン150の中にある間、それらは、様々なロジック回路によって「処理され」る。命令を処理することは、命令をフェッチすることと、命令を復号することと、命令を位置合わせすることと、命令を発行することなどとを含むことができる。
命令は、上位パイプライン150に入り、そしてフェッチステージ203から発行ステージ207を通して移動する。命令は、フェッチステージ203中においてフェッチロジック回路202によってフェッチされる。命令がフェッチされた後に、それらは、デコードステージ205中においてデコードロジック回路によって復号される。デコードステージ205の後に、命令は、発行ステージ207の中で処理される。命令が、発行ステージ207を離れた後に、命令は、下位パイプライン160または下位パイプライン165のいずれかの中で実行される。上記に論じられるように、下位パイプライン160内には、実行ステージ220とEU130Aとがある。下位パイプライン165内には、実行ステージ225とEU130Bとがある。下位パイプライン160および165は、それぞれレジスタファイル230または235にアクセスする。
プリデコードロジック回路201は、命令が命令キャッシュ106に保存されるのに先立って命令についての情報を部分的に復号し、そして識別するためにプロセッサ100によって使用されることができる。プリデコードされた情報は、命令が命令キャッシュ106に記憶されるときに、命令と一緒に保存されることができる。プリデコードロジック回路201内において、検出ロジック回路250は、命令の間の相互依存性を識別することができる。例えば、検出ロジック回路250は、いつPOP命令とブランチ命令とが同じレジスタを利用するかを識別するように設計されることができる。図4の考察において説明されるように、検出ロジック回路250が、POP命令とブランチ命令とから成る命令シーケンスをプロシージャコールからのリターンとして識別した後に、フェッチロジック回路202は、ブランチ命令が命令キャッシュ106からフェッチされるときに、この情報を解釈する。
プリデコードされた情報を命令に関連づけることは、命令が命令キャッシュ106にロードされるときに、命令に関連する情報フィールド内の特定のロケーションの中の1ビットを設定することによって遂行されることができる。プリデコードされた情報を命令キャッシュ106に保存することはまた、命令にフラグ付けすること(flagging)と称されることもできる。例えば、命令がプロシージャリターン命令であることを決定した後に、命令がプロシージャリターン命令であることを識別する命令ヘッダの中の1つのロケーションの中で、1ビットが、設定されることができる。あるいは、プロセッサ100は、プリデコードされた情報を識別された1つまたは複数の命令についての命令ヘッダへと符号化することもできる。このようにして、プロセッサ100は、選択された、またはあらかじめ決定された判断基準に基づいて異なる命令についての異なる情報を符号化するために多ビットを使用することができる。プリデコードされた情報は、命令が命令キャッシュ106からフェッチされるときに、取り出されることができる。次いでプロセッサ100は、識別された情報に基づいてある種のファンクションを実行することができる。
図4は、本発明の一実施形態によるフェッチロジック回路202を示している。フェッチロジック回路202は、アドレス選択mux(マルチプレクサ)302を制御するアドレスセレクタロジック回路320を含んでいる。アドレスセレクタロジック回路320は、リターンセレクタロジック回路350を含んでいる。アドレス選択mux302の入力に結合されて、リンクスタック304に由来するリンクスタック出力316がある。リンクスタックロジック回路310は、アドレスセレクタロジック回路320と通信し、そしてリンクスタック304の入力と出力との両方を制御する。リンクスタック304は、プロシージャコールが識別されるときに、アドレスバスからリターンアドレスを受け取る。
リンクスタック304内に、予測リターンアドレスは、保存されることができる。リンクスタック304は、プロシージャリターンに関連するリターンアドレスに対応する命令アドレスを記憶するメモリの後入れ先出し(last in first out)(LIFO)部分とすることができる。リンクスタック304は、ソフトウェアスタックとは独立に動作する。命令が、命令パイプラインの中で早期にプロシージャリターン命令として識別されるときに、プロセッサ100は、下位パイプライン160または165の中で実行すべきプロシージャリターンを待つ代わりに、リンクスタック上に記憶されるリターンアドレスを使用して命令を先んじてフェッチすることができる。
図4に示されるように、アドレス選択mux302は、次の逐次プログラムアドレスを受け取ることができる。次の逐次プログラムアドレスは、8つのアドレスロケーションだけ増分された現在のプログラムカウンタ(PC+8)とすることができる。本実施形態においては、命令は、各命令が4バイトの長さである場合の一度に2命令を命令キャッシュ106からフェッチされる。他のプロセッサ実施形態において、次の逐次プログラムアドレスは、異なる量だけ増分されたプログラムカウンタとすることができる。上述されるように、アドレス選択mux302は、リンクスタック304から予測アドレス情報を受け取ることもできる。プロセッサ100が、プロシージャリターンが起こっていることを決定するときに、リンクスタック304の中の次のアドレスは、取り出され、そして次のグループの命令をフェッチすべき開始ロケーションとして使用される。
アドレス選択mux302は、他のソースからアドレス情報を受け取ることができる。例えば、ブランチターゲットアドレスキャッシュ(branch target address cache)(BTAC)は、命令をフェッチするために使用されるアドレスを提供することができる。あるいは、割込みアドレス(interrupt address)が、命令をフェッチするために使用されることもできる。図示を容易にするために、アドレスのこれらの他のソースは、示されていない。
アドレスセレクタロジック回路320は、その入力のうちのどれが、アドレス選択mux302を通して渡され、そして次のグループの命令をフェッチするために使用されることになるかを決定する。アドレスセレクタロジック回路320が、フェッチされるべき次のグループのアドレスが次の逐次アドレス(PC+8)であることを決定する場合、PC+8の入力が、選択される。あるいは、アドレスセレクタロジック回路320内のリターンセレクタロジック回路350が、リンクスタック304が次のフェッチアドレスを含むことを決定する場合には、リンクスタック出力316が、選択される。
リンクスタック304を利用するために、プロセッサ100は、いつプロシージャコールと対応するリターンとが、上位パイプライン150内の命令処理シーケンス中に識別されるかを決定する必要がある。リンクスタック304が、予測的に命令をフェッチするために使用されるので、プロセッサ100は、後続の命令をフェッチする前に実行すべき命令を待つことはない。その代わりに、プロセッサ100が、上位パイプライン150の中でプロシージャコール命令として識別した後に、プロセッサ100は、プロシージャコールに関連するリターンアドレスをアドレスバスを経由してリンクスタック304へとロードする。次いで、プロセッサ100は、プロシージャの命令をフェッチする。
プロシージャの終わりに、プロセッサ100は、プロシージャリターンシーケンスに出合う。プロシージャリターンシーケンスの結果として、プロセッサは、対応するリターンアドレスを取り出し、そして命令フェッチを再開するそのリターンアドレスへと分岐するように、リンクスタック304を「ポップする(pop)」ことになる。プロセッサ100は、プロシージャリターン命令を識別し、そしてリンクスタックから次のリターンアドレスを取り出す。プロシージャリターン命令は、ソフトウェアスタックを読み取り、そしてPCを書き込むPOP命令またはロード命令とすることができる。リターンセレクタロジック回路350が、特定のPOP命令がプロシージャリターンであることを識別する場合、そのときにはリターンセレクタロジック回路350は、アドレスセレクタロジック回路320に、リンクスタック出力316が、アドレス選択mux302を通して方向づけられるようにするようにさせる。次いで、リンクスタック304から取られるリターンアドレスは、次の組の命令をフェッチするために使用される。
上記に説明されたように、プロシージャリターンシーケンスは、1つまたは複数の命令から成ることができる。例えば、いくつかのARMインプリメンテーションにおいては、リンクレジスタ(R14)に記憶される値に対するブランチ命令は、プロシージャリターンとして解釈されることができる。代わりに、リンクレジスタ(R14)の値をプログラムカウンタ(R15)へと移動する移動命令は、プロシージャリターンとして解釈されることもできる。プロセッサ100が、正確にプロシージャリターンを識別することが、重要である。プロセッサ100が、正確にプロシージャリターンを識別しない場合には、リンクスタック304は、プロシージャリターン命令に関して同期が合わなくなることになる。リンクスタック304が、同期が合わなくなる場合、プロセッサ100は、ブランチ補正シーケンスへと進む必要がある可能性があり、そして実行性能は、影響を受ける可能性がある。
プロセッサ命令セットが、進化しているので、代替命令シーケンスは、プロシージャリターンシーケンスとして識別されることができる。例示の一実施形態においては、特定のレジスタに記憶される値に対するブランチ命令によって追随される特定のレジスタに対するリターンアドレスをポップするPOP命令またはロード命令(PCをアップデートしない)は、プロシージャリターンシーケンスとして解釈されることができる。ブランチ命令は、POP命令に続く次の逐次命令であってもよく、あるいはそうでなくてもよい。
POPおよびブランチの命令から成るプロシージャリターンシーケンスの識別を容易にするために、両方の命令に関連した情報が、集められる。プロシージャリターンのPOP命令は、1つまたは複数のレジスタに関与する可能性がある。POP命令が識別されるときに、POP命令のレジスタリストは、保存され、そして任意の後続の命令のレジスタターゲットと比較されることができる。レジスタリストの保存することと、比較することとは、POP命令が、識別されていることを維持することと称されることもできる。非ブランチ命令が、そのレジスタに対するブランチが出合われる前に、POP命令に関連するレジスタリストの中で識別されるレジスタを利用する場合、そのレジスタは、保存済みのレジスタリスト(saved register list)から無視される(discounted)。保存済みのレジスタリストの中のレジスタを使用しないブランチ命令が、保存済みのレジスタリストの中のレジスタを使用するブランチ命令の前に出合われる場合、以前のPOPについてのPOP−ブランチリターンシーケンスについての探索(search)は、終了される。レジスタリストの中のレジスタを使用するブランチ命令が、出合われるときに、次いでプロセッサ100は、プロシージャリターンが、処理されていることを決定することができる。結果として、次いで、リンクスタック304の最上部におけるアドレスが、取り出され、そして次のグループの命令をフェッチするために使用されることができる。
前述のように、プリデコードロジック回路201(図3)は、同じレジスタを利用するPOPおよびブランチの命令シーケンスを識別している可能性があり、そして結果として、ブランチ命令は、プロシージャリターン命令として識別される。プロセッサ100は、ブランチ命令が、命令キャッシュ106に記憶されたときに、この情報を命令ヘッダに保存している可能性がある。フェッチロジック回路202が、ブランチ命令を用いて保存されたプリデコードされた情報を取り出すときに、プロセッサ100は、ブランチ命令がプロシージャリターンであることを識別するためにリターンセレクタロジック回路350を使用する。リターンセレクタロジック回路350が、ブランチ命令がプロシージャリターンであることを決定した後に、リターンセレクタロジック回路350は、アドレス選択ロジック回路320が、アドレス選択mux302を通してリンクスタック出力316を方向づけるようにする。リターンセレクタロジック回路350はまた、リンクスタックの中の次の値が、戻されるようにするリンクスタックロジック回路310と通信する。結果として、リンクスタックアドレスは、次の組の命令をフェッチするために使用される。
図5は、POP/ブランチ命令シーケンスから成るプロシージャリターンを検出することができるデコードロジック回路を有する代替実施形態に従って、上位パイプライン151を有するCPU102を示している。より詳細には、CPU102は、検出ロジック回路450を有するデコードロジック回路406を含んでいる。命令が、デコードロジック回路406によって復号されるので、命令に関連した情報は、識別される。検出ロジック回路450は、いつプロシージャリターンが識別されるかを決定するために復号された命令を監視することができる。以上で論じられるように、プロシージャリターンシーケンスは、1つまたは複数の命令から成る。検出ロジック回路450は、POP命令と後続のブランチ命令とが復号されるときに、プロシージャリターンシーケンスが起こることを決定することができる。
検出ロジック回路450が、プロシージャリターンが識別されていることを決定するときに、検出ロジック回路450は、この情報をリターンセレクタロジック回路350に対して伝え、このリターンセレクタロジック回路は、次にこの情報をリンクスタックロジック回路310に対して伝える(図4)。次いでリターンセレクタロジック回路350は、アドレスセレクタロジック回路320が、アドレス選択mux302を通してリンクスタック出力316を方向づけるようにする。次いで、リンクスタック304から取られるリターンアドレスは、次の組の命令をフェッチするために使用される。
実施形態に関連する発明の概念は、図2の中のグループの命令200を戻って参照することにより、さらに説明されることができる。命令Aは、プロシージャPROC1のコールである。命令Aが、PROC1へと分岐するときに、プロセッサ100は、次の逐次アドレスをリンクレジスタ(R14)に記憶する。次の逐次アドレスは、主プログラムに戻ることに関連するリターンアドレスである。命令Aが、プロシージャコールとして識別されるときに、リンクスタックロジック回路310は、命令Aに関連するリターンアドレスが、リンクスタック304へとロードされるようにする。図2に示されるように、命令Aは、主プログラムの一部分である。命令Aは、PROC1へと分岐し、そして次の処理された命令は、命令Bである。
命令Bは、PROC1内の最初の命令であり、そしてプロシージャPROC2のコールのための準備命令である。命令Bは、R14の値をソフトウェアスタック上へとプッシュすることにより、現在のリターンアドレスを保存する。次に、命令Cが、処理される。命令Cは、プロシージャPROC2のコールである。命令Cが、プロシージャコールとして識別されるときに、リンクスタックロジック回路310は、命令Cに関連するリターンアドレスをリンクスタック304上へと保存する。命令Cは、プロシージャPROC2へと分岐し、そして処理される次の命令は、命令Dである。
命令Dは、プロシージャPROC2内の最初の命令であり、そしてR14の値をソフトウェアスタック上へとプッシュすることにより現在のリターンアドレスを保存する。命令Dは、別の準備命令であり、次のプロシージャコール命令(命令E)についての準備を行う。命令Eが、プロシージャコールとして識別されるときに、リンクスタックロジック回路310は、命令Eに関連するリターンアドレスが、リンクスタック304上へとロードされるようにする。命令Eは、プロシージャPROC2内の2番目の命令であり、そしてプロシージャPROC3を呼び出す。命令Eは、命令F、プロシージャPROC3内の最初の命令、に関連するアドレスへと分岐する。命令Fは、プロシージャPROC3内の唯一の命令であり、そしてリターンである。特に、命令Fは、現在、リンクレジスタ(R14)の中の値へと分岐する。一般に、既存のプロセッサアーキテクチャにおいては、命令Fは、命令リターンとして認識される。命令Fが処理されるときに、検出ロジック回路450は、命令Fがプロシージャリターンであることを決定し、そしてリンクスタック304上の次のリターンアドレスが、取り出されるようにする。プロセッサは、プロシージャPROC2へと戻すためにリターンアドレスを使用する。
プロシージャPROC2内において、処理されるべき次の命令は、ソフトウェアスタックから現在の値を「ポップ」して出し、そしてそれをレジスタR12に保存する命令Gである。説明図を簡単にするために、命令Gは、単一のレジスタを「ポップ」する。しかしながら、代替実施形態においては、POP命令は、複数のレジスタについての複数の値を戻すことができる。この代替実施形態においては、プロセッサ100は、レジスタリストの中のこれらのレジスタのうちの1つをブランチターゲットアドレスとして使用して、レジスタリストを後続のブランチ命令と比較するために、「ポップされた」レジスタのリストを保持することができる。一実施形態においては、検出ロジック回路450は、「ポップされた」レジスタのリストを記憶することができる。
命令Hは、今やR12の中にある取り出されたアドレスへと分岐する。たとえ命令Hが、明示ブランチ命令(BX)でないとしても、それは同等なブランチ命令である。当業者が理解するように、MOV、PC、Rはまた、暗黙ブランチ命令として解釈されることもできる。図6および7の命令フローチャート600および700の中で説明されるように、検出ロジック回路250、450は、「ポップされた」レジスタ(命令HのR12)に対するブランチ命令と一緒にPOP命令(命令G)が、プロシージャリターンシーケンスを構成することを決定する。結果として、プロセッサ100は、次のフェッチアドレスを提供するためにリンクスタック304を使用し、そして命令フェッチは、プロシージャPROC1へと戻る。
命令Hを処理した後に、命令フェッチは、プロシージャPROC1へと戻り、そして命令Iを識別する。命令Iは、ソフトウェアスタックからの次の値をRへとポップする。依然としてプロシージャPROC1内において、命令Jは、Rに記憶されるアドレスへと分岐する。命令Hと同様に、命令Jは、以前に「ポップされた」レジスタに記憶されるアドレスへと分岐する。結果として、検出ロジック回路250、450は、命令Jがプロシージャリターン命令であることを決定し、そしてリンクスタック304からの次の値が、次のグループの命令をフェッチするために使用される。この例においては、命令Jが処理された後に、命令Kが、フェッチされる。命令Kは、図3に示されるように、主プログラム内の任意の命令とすることができる。
一実施形態においては、プロセッサ100は、命令Fと、命令GおよびHと、IおよびJとのシーケンスが、プロシージャリターンとして解釈されるべきであることを識別するために検出ロジック回路250を使用する。結果として、1組の命令200が、検出ロジック回路250によってラインバッファ107の中で出合われるときに、命令F、H、およびJは、命令キャッシュ106に保存されるプリデコードされた情報を用いてプロシージャリターン命令であるものとしてプリデコードされる。したがって、命令F、H、およびJが、フェッチロジック回路202によって命令キャッシュ106からフェッチされるときに、リターン選択ロジック回路350は、リターンアドレスが、次のグループの命令をフェッチするために使用されるリンク304から取り出されるようにする。
代替実施形態においては、検出ロジック回路450は、命令Fと、命令GおよびHと、IおよびJとのシーケンスが、プロシージャリターンとして解釈されるべきであることを識別するように設計されることもできる。この場合には、グループの命令200が、デコードステージ205において復号されるときに、検出ロジック回路450は、命令F、H、およびJが、プロシージャリターン命令であることを識別し、そしてこれをリターンセレクタロジック回路350に伝える。次いでリターンセレクタロジック回路350は、リンクスタック304内の次のリターンアドレスが、次のフェッチアドレスを決定するために使用されるようにする。
図6は、図3のCPU102内の検出ロジック回路250を有するプロセッサ100によって実行されるステップを示す命令フロー600を示している。図示を容易にするために、フローチャート600は、CPU102内のラインバッファ107が、単一の命令幅にすぎず、そしてそれらの命令は、キャッシュラインアドレスの開始からのシーケンスの中で戻されることを仮定している。当業者は、いくつかのプロセッサが、逐次順序を外れた複数の命令を処理することができるラインバッファを有することができることを理解する。ここにおいて説明されるような発明の概念は、いずれのタイプのプロセッサにも適用されることができる。
命令フロー600は、開始ブロック602から開始される。ブロック602から、命令フローは、ブロック604へと進み、ここでラインバッファ107の中の最初の命令は、検出ロジック回路250によって処理される。次いで、命令フロー600は、決定ブロック606へと進む。決定ブロック606において、検出ロジック回路250は、命令が知られているプロシージャリターンであるかどうかを決定する。前述のように、知られているプロシージャリターンは、POP/ブランチシーケンスを除外して先に識別されたプロシージャリターンのうちのどれにすることもできる。決定ブロック606において、検出ロジック回路250が、命令が以上で知られているプロシージャリターンであることを決定する場合、命令フロー600は、ブロック626へと進み、ここで命令は、プロシージャリターンとして識別され、あるいはフラグ付けされる。決定ブロック606において、検出ロジック回路250が、命令が以上で知られているプロシージャリターンでないことを決定する場合には、命令フローは、決定ブロック610へと進む。
決定ブロック610において、検出ロジック回路250は、命令が、ポップされたレジスタリストの中にプログラムカウンタ(PC)を有さないPOP命令であるかどうかを決定する。命令が、レジスタリストの中にPCのないPOP命令でない場合、命令フロー600は、決定ブロック628へと進む。そうでなくて命令がレジスタリストの中にPCを含まないPOP命令である場合には、命令フロー600は、ブロック612へと進む。ブロック612において、検出ロジック回路250は、任意の後続の命令を分析する際に使用のためのPOP命令のレジスタリストをラインバッファ107に保存する。
ブロック612から、命令フローは、ブロック614へと進む。ブロック614において、検出ロジック回路250は、ラインバッファ107から次の命令を取り出す。プロセスフローは、ブロック614から決定ブロック616へと続く。決定ブロック616において、検出ロジック回路250は、ラインバッファ107の中の次の命令が、レジスタリストに保存されるレジスタのうちのどれかに対するブランチ命令であるかどうかを決定する。命令が、レジスタリストの中のレジスタに対するブランチである場合、命令フローは、ブロック626へと進み、ここで命令は、プロシージャリターン命令としてフラグ付けされる。決定ブロック616において、検出ロジック回路250が、命令が保存済みのレジスタリストの中のブランチ命令でないことを決定する場合、命令フロー600は、決定ブロック617へと続く。
決定ブロック617において、検出ロジック回路250は、命令が、ブランチ命令であるかどうかを決定する。命令が、ブランチ命令である場合、命令フローは、決定ブロック628へと進む。決定ブロック617において、検出ロジック回路250が、命令がブランチ命令でないことを決定する場合、命令フローは、決定ブロック618へと進む。決定ブロック618において、検出ロジック回路250は、命令が、保存済みのレジスタリストの中のレジスタのうちのどれかを上書きするかどうかを決定する。命令が、保存済みのレジスタリストの中のレジスタのうちのどれかを上書きする場合、命令フロー600は、ブロック620へと続き、ここで上書きされたレジスタは、保存済みのレジスタリストから取り除かれる。ブロック620から、命令フロー600は、決定ブロック622へと続く。
決定ブロック618において、検出ロジック回路250は、命令が、保存済みのレジスタリストの中の任意のレジスタを上書きしなかったことを決定する場合、命令フロー600は、決定ブロック622へと進む。決定ブロック622において、検出ロジック回路250は、ラインバッファ107について残っている任意の命令があるかどうかを決定する。ラインバッファについて残っている命令がない場合、命令フロー600は、ブロック624で終了する。ラインバッファ107の中に残っている命令がある場合、命令フロー600は、ブロック614へと戻って進み、ここでラインバッファ107の中の次の命令が処理される。
ブロック626において、検出ロジック回路は、リターン命令として命令にタグを付ける。前述のように、リターン命令にタグを付けることは、フェッチロジック回路202が、命令が命令キャッシュ106からフェッチされるときにリターン命令を識別することを可能にする。ブロック626から、命令フロー600は、決定ブロック628へと進む。決定ブロック628において、検出ロジック回路250は、ラインバッファ107の中に処理されるように残っている任意の命令があるかどうかを決定する。ラインバッファ107の中に処理されるように残っている命令がない場合、命令フロー600は、ブロック624において終了する。処理されるように残っている追加の命令がある場合には、命令フロー600は、ブロック604へと進み、ここで次の命令が、検出ロジック回路250によって処理される。
図7は、図4の上位パイプライン151に結合されたデコードロジック回路406の中に検出ロジック回路450を有するCPU102によって実行されるステップを示す命令フロー700を示している。図示を容易にするために、命令フロー700の中で概説される命令の処理は、デコードロジック回路406が、プロセッササイクル当たりに単一の命令を処理することを仮定している。当業者は、いくつかのプロセッサが、プロセッササイクル当たりに複数の命令を処理することができるデコードロジック回路を有することができることを理解する。ここにおいて説明される発明の概念は、いずれのタイプのプロセッサにも適用されることができる。
命令フロー700は、開始ブロック702から開始される。ブロック702から、命令フローは、ブロック704へと進み、ここで命令は、デコードロジック回路406によってデコードステージ205の中で処理される。ブロック704から、命令フローは、決定ブロック706へと続く。決定ブロック706において、検出ロジック回路450は、命令がプロシージャリターンであるかどうかを決定する。この例においては、検出ロジック回路450は、命令がPOP/ブランチシーケンス以外の前もって知られているプロシージャリターンのうちのどれかである場合に、命令がプロシージャリターンであることを決定する。検出ロジック回路450が、命令がプロシージャリターンであることを決定する場合、命令フロー700は、ブロック708へと続く。検出ロジック回路450が、命令がプロシージャリターンでないことを決定する場合には、命令フローは、決定ブロック710へと続く。
決定ブロック710において、検出ロジック回路450は、命令が、レジスタリストの中にプログラムカウンタ(PC)を有さないPOP命令であるかどうかを決定する。命令が、そのレジスタリストの中にPCのないPOP命令でない場合、プロセスフローは、ブロック704へと後方に戻る。決定ブロック710において、検出ロジック回路450が、復号された命令が、そのレジスタリストの中にPCを含まないPOP命令であることを決定する場合、命令フロー700は、ブロック712へと続く。プロセッサ100は、ソフトウェアスタックから複数のレジスタをポップすることができる可能性があるので、ブロック712において、検出ロジック回路450は、ポップされたレジスタリストを保存する。ブロック712から、命令フロー700は、ブロック714へと進む。
ブロック714において、プロセッサ100は、次の命令をデコードステージ205へとロードし、そしてデコードロジック回路406は、その命令を処理する。命令が、ブロック714においてロードされた後に、命令フロー700は、決定ブロック716へと進む。決定ブロック716において、検出ロジック回路450は、命令が、保存済みのレジスタリストの中のレジスタに対するブランチであるかどうかを決定する。検出ロジック回路450が、命令が保存済みのレジスタリストの中のレジスタに対するブランチであることを決定する場合、プロセスフローは、ブロック708へと続く。検出ロジック回路450が、命令が保存済みのレジスタリストの中のレジスタに対するブランチ命令でなかったことを決定する場合には、命令フロー700は、決定ブロック718へと進む。
決定ブロック718において、検出ロジック回路450は、命令が、ブランチ命令であるかどうかを決定する。命令が、ブランチ命令である場合、命令フローは、ブロック704へと後方に戻り、ここで次の命令は、デコードステージ205へとロードされる。命令が、決定ブロック718においてブランチ命令でない場合には、命令フロー700は、決定ブロック720へと進む。決定ブロック720において、検出ロジック回路450は、命令が、保存済みのレジスタリストの中のレジスタを上書きするかどうかを決定する。
命令が、保存済みのレジスタリストの中のレジスタを上書きしない場合、命令フロー700は、ブロック714へと戻り、ここで次の命令は、デコードステージ205へとロードされ、そしてデコードロジック回路406によって処理される。命令が、決定ブロック720において保存済みのレジスタリストの中のレジスタを上書きする場合、命令フロー700は、ブロック722へと続き、ここで上書きされたレジスタは、保存済みのレジスタリストから取り除かれる。ブロック722から、命令フロー700は、ブロック714へと戻り、ここで次の命令は、デコードステージ205へとロードされ、そしてデコードロジック回路406によって処理される。
ここにおいて開示される実施形態に関連して説明される様々な例示の論理ブロック、モジュール、回路、要素、および/またはコンポーネントは、ここにおいて説明される機能を実行するように設計された汎用プロセッサ、デジタル信号プロセッサ(digital signal processor)(DSP)、特定用途向け集積回路(application specific integrated circuit)(ASIC)、フィールドプログラマブルゲートアレイ(field programmable gate array)(FPGA)または他のプログラマブルロジックコンポーネント、ディスクリートゲート(discrete gate)またはトランジスタロジック、ディスクリートハードウェアコンポーネント(discrete hardware components)、あるいはそれらの任意の組合せを用いてインプリメントされ、または実行されることができる。汎用プロセッサは、マイクロプロセッサとすることができるが、代替案においてはプロセッサは、従来の任意のプロセッサ、コントローラ、マイクロコントローラ、または状態機械とすることもできる。プロセッサは、コンピューティングコンポーネントの組合せ、例えば、DSPとマイクロプロセッサとの組合せ、複数のマイクロプロセッサ、DSPコアと組み合わされた1つまたは複数のマイクロプロセッサ、あるいは他のそのような任意のコンフィギュレーション、としてインプリメントされることもできる。
特定の実施形態が、ここにおいて示され、そして説明されているが、当業者は、同じ目的を達成するように予測される任意の構成が、示される特定の実施形態の代わりにされることができることと、本発明が、他の環境において他のアプリケーションを有することとを理解する。本願は、本発明の任意の適応または変形をカバーするように意図される。添付の特許請求の範囲は、ここにおいて説明される特定の実施形態だけに本発明の範囲を限定するようには決して意図されない。
下記に出願時の請求項1−25に対応する記載を付記1−25として表記する。
付記1
パイプラインプロセッサの中のプロシージャから戻るときにリンクスタックからリターンアドレスを取り出すための方法であって、
ソフトウェアスタックからリターンアドレスを取り出すように動作可能な検索命令を識別することと、
前記リターンアドレスへと分岐するように動作可能なブランチ命令を識別することと、
識別される前記命令と前記ブランチ命令との両方に応じて、前記リンクスタックから前記リターンアドレスを取り出すことと、
前記リターンアドレスを使用して後続の命令をフェッチすることと、
を備える方法。
付記2
前記検索命令は、POP命令である、付記1に記載の方法。
付記3
前記検索命令は、ロード命令である、付記1に記載の方法。
付記4
前記ブランチ命令は、BX命令である、付記1に記載の方法。
付記5
前記ブランチ命令は、MOV命令である、付記1に記載の方法。
付記6
前記の前記検索命令を識別することは、前記リターンアドレスを含むレジスタを識別することをさらに備える、付記1に記載の方法。
付記7
前記検索命令を識別することは、レジスタリストを保持することをさらに備え、前記レジスタリストは、複数のレジスタを有し、前記複数のレジスタの中の少なくとも1つのレジスタは、前記リターンアドレスを含む、付記1に記載の方法。
付記8
前記レジスタリストを保持することは、前記複数のレジスタのうちのどれかが、後続の命令によって上書きされる場合に、前記レジスタリストからレジスタを取り除くことを備える、付記7に記載の方法。
付記9
前記ブランチ命令を識別することは、検出ロジック回路によって実行される、付記1に記載の方法。
付記10
前記検出ロジック回路は、プリデコードロジック回路と共に含まれる、付記9に記載の方法。
付記11
前記検出ロジック回路は、デコードロジック回路と共に含まれる、付記9に記載の方法。
付記12
前記ブランチ命令を識別することは、命令キャッシュの中の前記ブランチ命令にフラグ付けすることをさらに備える、付記1に記載の方法。
付記13
命令キャッシュに結合されたラインバッファと;
前記命令キャッシュに結合され、予測リターンアドレスを記憶するリンクスタックを有するフェッチロジック回路と、なお命令は、前記ラインバッファから前記命令キャッシュへとロードされ、前記フェッチロジック回路は、前記命令キャッシュから命令を取り出す;
前記ラインバッファと通信するプリデコードロジック回路と、なお前記プリデコードロジック回路は、プロシージャリターンシーケンスを識別するための検出ロジック回路をさらに備え、前記プロシージャリターンシーケンスは、ソフトウェアスタックからリターンアドレスを取り出すように動作可能な検索命令と前記取り出されたリターンアドレスに分岐するブランチ命令とを備え、前記パイプラインプロセッサは、前記プロシージャリターンシーケンスの前記識別に応じて前記リンクスタックから前記予測されたリターンアドレスを取り出す;
を備えるパイプラインプロセッサ。
付記14
前記検出ロジック回路は、前記ブランチ命令が、前記ラインバッファから前記命令キャッシュへとロードされるときに、前記プロシージャリターンシーケンスの前記ブランチ命令にフラグ付けする、付記13に記載のパイプラインプロセッサ。
付記15
前記フェッチロジック回路は、前記フラグ付けされた情報から前記プロシージャリターンシーケンスを識別する、付記14に記載のパイプラインプロセッサ。
付記16
前記フェッチロジック回路内のリターンセレクタロジック回路は、前記フラグ付けされた情報から前記リターンシーケンスを識別する、付記15に記載のパイプラインプロセッサ。
付記17
前記検索命令は、POP命令である、付記13に記載のパイプラインプロセッサ。
付記18
前記検索命令は、ロード命令である、付記13に記載のパイプラインプロセッサ。
付記19
前記ブランチ命令は、BX命令である、付記13に記載のパイプラインプロセッサ。
付記20
予測されたリターンアドレスを記憶するリンクスタックを有し、命令キャッシュから命令をフェッチするフェッチロジック回路と、
前記フェッチロジック回路に結合されたデコードロジック回路と、
を備え、前記フェッチされた命令は、前記デコードロジック回路によって復号され、前記デコードロジック回路は、検出ロジック回路をさらに備え、前記検出ロジック回路は、ソフトウェアスタックからアドレスを取り出すように動作可能な検索命令と、前記取り出されたアドレスに分岐するように動作可能なブランチ命令とを備えるプロシージャリターンシーケンスを識別し、パイプラインプロセッサは、前記プロシージャリターンシーケンスの前記識別に応じて前記リンクスタックから前記予測されたリターンアドレスを取り出す、パイプラインプロセッサ。
付記21
前記フェッチロジック回路は、前記取り出されたアドレスを使用して命令をフェッチする、付記20に記載のパイプラインプロセッサ。
付記22
前記検索命令は、POP命令である、付記20に記載のパイプラインプロセッサ。
付記23
前記検索命令は、ロード命令である、付記20に記載のパイプラインプロセッサ。
付記24
前記ブランチ命令は、前記検索命令によって識別されるアドレスへと分岐する、付記20に記載のパイプラインプロセッサ。
付記25
前記ブランチ命令は、MOV命令である、付記20に記載のパイプラインプロセッサ。

Claims (25)

  1. パイプラインプロセッサの中のプロシージャから戻るときにリンクスタックからリターンアドレスを取り出すための方法であって、
    ソフトウェアスタックから情報を取り出すための検索命令を識別することと、
    前記検索命令に基づいて取り出された情報を分岐先アドレスとして用いて前記リターンアドレスへと分岐するためのブランチ命令を識別することと、
    前記検索命令と前記ブランチ命令を識別することに応じて、前記リンクスタックから前記リターンアドレスを取り出すことと、
    前記リターンアドレスを使用して第2の命令をフェッチすることと、
    を備える方法。
  2. 前記検索命令は、POP命令である、請求項1に記載の方法。
  3. 前記検索命令は、ロード命令である、請求項1に記載の方法。
  4. 前記ブランチ命令は、BX命令である、請求項1に記載の方法。
  5. 前記ブランチ命令は、MOV命令である、請求項1に記載の方法。
  6. 前記の前記検索命令を識別することは、前記情報を格納するレジスタを識別することをさらに備える、請求項1に記載の方法。
  7. レジスタリストを保持することをさらに備え、前記レジスタリストは、前記情報を格納するレジスタを識別するためのものである、請求項1に記載の方法。
  8. 前記レジスタリストを保持することは、前記レジスタリストで識別された第2のレジスタの内容が上書きされたことを決定すること、および、
    前記レジスタリストから前記第2のレジスタを取り除くこと
    を備える、請求項7に記載の方法。
  9. 前記ブランチ命令を識別することは、検出ロジック回路によって実行される、請求項1に記載の方法。
  10. 前記検出ロジック回路は、プリデコードロジック回路に含まれる、請求項9に記載の方法。
  11. 前記検出ロジック回路は、デコードロジック回路に含まれる、請求項9に記載の方法。
  12. 前記ブランチ命令を識別することは、命令キャッシュの中の前記ブランチ命令にフラグ付けすることをさらに備える、請求項1に記載の方法。
  13. 命令キャッシュに結合されたラインバッファであって、前記ラインバッファから前記命令キャッシュへ命令がロードされるものである、ラインバッファと;
    前記命令キャッシュに結合され、予測リターンアドレスを記憶するリンクスタックを有するフェッチロジック回路とであって、前記命令キャッシュから命令を取り出すためのフェッチロジック回路と
    前記ラインバッファと通信するプリデコードロジック回路とであって、前記プリデコードロジック回路は、プロシージャリターンシーケンスを識別するための検出ロジック回路をさらに備えるものであり、前記プロシージャリターンシーケンスは、ソフトウェアスタックから情報を取り出すための検索命令と、前記検索命令に基づいて取り出された情報を分岐先アドレスとして用いて分岐するためのブランチ命令とを備えるものであるプリデコードロジック回路と
    前記プロシージャリターンシーケンスの前記識別に応じて前記リンクスタックから前記予測リターンアドレスの1つの予測されたリターンアドレスを取り出す手段と;
    を備えるパイプラインプロセッサ。
  14. 前記検出ロジック回路は、前記ブランチ命令が、前記ラインバッファから前記命令キャッシュへとロードされるときに、前記プロシージャリターンシーケンスの前記ブランチ命令にフラグ付けする、請求項13に記載のパイプラインプロセッサ。
  15. 前記フェッチロジック回路は、前記ブランチ命令から前記プロシージャリターンシーケンスを識別する、請求項14に記載のパイプラインプロセッサ。
  16. 前記フェッチロジック回路内のリターンセレクタロジック回路をさらに備え前記リターンセレクタロジック回路は、前記ブランチ命令から前記プロシージャリターンシーケンスを識別する、請求項15に記載のパイプラインプロセッサ。
  17. 前記検索命令は、POP命令である、請求項13に記載のパイプラインプロセッサ。
  18. 前記検索命令は、ロード命令である、請求項13に記載のパイプラインプロセッサ。
  19. 前記ブランチ命令は、BX命令である、請求項13に記載のパイプラインプロセッサ。
  20. 予測されたリターンアドレスを記憶するリンクスタックを有し、命令キャッシュから命令をフェッチするように構成されたフェッチロジック回路と、
    前記フェッチロジック回路に結合されたデコードロジック回路と、
    を備え、前記フェッチされた命令は、前記デコードロジック回路によって復号可能であり、前記デコードロジック回路は、検出ロジック回路をさらに備え、前記検出ロジック回路は、ソフトウェアスタックから情報を取り出すための検索命令と、前記検索命令に基づいて取り出された情報を分岐先アドレスとして用いて分岐するためのブランチ命令とを備えるプロシージャリターンシーケンスを識別するように構成され、パイプラインプロセッサは、前記プロシージャリターンシーケンスの前記識別に応じて前記リンクスタックから前記予測されたリターンアドレスのうちの1つの予測されたリターンアドレスを取り出すように構成される、パイプラインプロセッサ。
  21. 前記フェッチロジック回路は、前記リンクスタックから取り出された前記予測されたリターンアドレスを使用して命令をフェッチする、請求項20に記載のパイプラインプロセッサ。
  22. 前記検索命令は、POP命令である、請求項20に記載のパイプラインプロセッサ。
  23. 前記検索命令は、ロード命令である、請求項20に記載のパイプラインプロセッサ。
  24. 前記ブランチ命令は、前記検索命令に基づいて識別されるアドレスへと分岐するためのものである、請求項20に記載のパイプラインプロセッサ。
  25. 前記ブランチ命令は、移動命令である、請求項20に記載のパイプラインプロセッサ。
JP2010533174A 2007-11-02 2008-10-31 プロシージャリターンシーケンスを加速するための方法およびシステム Expired - Fee Related JP5301554B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US11/934,264 US8341383B2 (en) 2007-11-02 2007-11-02 Method and a system for accelerating procedure return sequences
US11/934,264 2007-11-02
PCT/US2008/081947 WO2009059100A1 (en) 2007-11-02 2008-10-31 A method and a system for accelerating procedure return sequences

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2013095916A Division JP5815596B2 (ja) 2007-11-02 2013-04-30 プロシージャリターンシーケンスを加速するための方法およびシステム

Publications (2)

Publication Number Publication Date
JP2011503718A JP2011503718A (ja) 2011-01-27
JP5301554B2 true JP5301554B2 (ja) 2013-09-25

Family

ID=40085506

Family Applications (3)

Application Number Title Priority Date Filing Date
JP2010533174A Expired - Fee Related JP5301554B2 (ja) 2007-11-02 2008-10-31 プロシージャリターンシーケンスを加速するための方法およびシステム
JP2013095916A Expired - Fee Related JP5815596B2 (ja) 2007-11-02 2013-04-30 プロシージャリターンシーケンスを加速するための方法およびシステム
JP2015027891A Pending JP2015133126A (ja) 2007-11-02 2015-02-16 プロシージャリターンシーケンスを加速するための方法およびシステム

Family Applications After (2)

Application Number Title Priority Date Filing Date
JP2013095916A Expired - Fee Related JP5815596B2 (ja) 2007-11-02 2013-04-30 プロシージャリターンシーケンスを加速するための方法およびシステム
JP2015027891A Pending JP2015133126A (ja) 2007-11-02 2015-02-16 プロシージャリターンシーケンスを加速するための方法およびシステム

Country Status (6)

Country Link
US (1) US8341383B2 (ja)
EP (1) EP2220556B1 (ja)
JP (3) JP5301554B2 (ja)
KR (1) KR101254067B1 (ja)
CN (1) CN101884025B (ja)
WO (1) WO2009059100A1 (ja)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7587580B2 (en) * 2005-02-03 2009-09-08 Qualcomm Corporated Power efficient instruction prefetch mechanism
US8341383B2 (en) * 2007-11-02 2012-12-25 Qualcomm Incorporated Method and a system for accelerating procedure return sequences
US9411590B2 (en) * 2013-03-15 2016-08-09 Qualcomm Incorporated Method to improve speed of executing return branch instructions in a processor
US9703948B2 (en) 2014-03-28 2017-07-11 Intel Corporation Return-target restrictive return from procedure instructions, processors, methods, and systems
GB2542831B (en) * 2015-09-30 2018-05-30 Imagination Tech Ltd Fetch unit for predicting target for subroutine return instructions
GB2551548B (en) 2016-06-22 2019-05-08 Advanced Risc Mach Ltd Register restoring branch instruction
US11055098B2 (en) * 2018-07-24 2021-07-06 Advanced Micro Devices, Inc. Branch target buffer with early return prediction
WO2021141760A1 (en) * 2020-01-06 2021-07-15 Quadric. Io, Inc Systems and methods for optimizing nested loop instructions in pipeline processing stages
US11586440B2 (en) * 2021-06-01 2023-02-21 International Business Machines Corporation Link stack based instruction prefetch augmentation

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
ATE174700T1 (de) * 1989-09-13 1999-01-15 Digital Equipment Corp Prozedurzustandsdeskriptorsystem für digitale datenprozessoren
JPH06131250A (ja) * 1992-10-20 1994-05-13 Toshiba Corp データ処理装置
JPH07239782A (ja) * 1994-02-28 1995-09-12 Toshiba Corp 演算処理装置
JPH07281892A (ja) * 1994-04-06 1995-10-27 Hitachi Ltd 情報処理装置
JP2735523B2 (ja) * 1995-11-29 1998-04-02 日本電気アイシーマイコンシステム株式会社 プロシージャ・ステップ処理方法
US5812813A (en) * 1996-07-29 1998-09-22 Integrated Device Technology, Inc. Apparatus and method for of register changes during execution of a micro instruction tracking sequence
US6151671A (en) * 1998-02-20 2000-11-21 Intel Corporation System and method of maintaining and utilizing multiple return stack buffers
US6094716A (en) 1998-07-14 2000-07-25 Advanced Micro Devices, Inc. Register renaming in which moves are accomplished by swapping rename tags
US6363473B1 (en) * 1999-04-01 2002-03-26 Compaq Information Technologies Group, L.P. Simulated memory stack in a stackless environment
JP3723019B2 (ja) * 1999-09-29 2005-12-07 富士通株式会社 サブルーチンリターン相当の命令の分岐予測を行う装置および方法
GB2358261B (en) * 2000-01-17 2004-06-09 Advanced Risc Mach Ltd Data processing with native and interpreted program instruction words
US6848044B2 (en) * 2001-03-08 2005-01-25 International Business Machines Corporation Circuits and methods for recovering link stack data upon branch instruction mis-speculation
US6898699B2 (en) 2001-12-21 2005-05-24 Intel Corporation Return address stack including speculative return address buffer with back pointers
US7017030B2 (en) * 2002-02-20 2006-03-21 Arm Limited Prediction of instructions in a data processing apparatus
US7996659B2 (en) * 2005-06-06 2011-08-09 Atmel Corporation Microprocessor instruction that allows system routine calls and returns from all contexts
US7478228B2 (en) * 2006-08-31 2009-01-13 Qualcomm Incorporated Apparatus for generating return address predictions for implicit and explicit subroutine calls
US8341383B2 (en) * 2007-11-02 2012-12-25 Qualcomm Incorporated Method and a system for accelerating procedure return sequences

Also Published As

Publication number Publication date
CN101884025B (zh) 2014-04-09
EP2220556A1 (en) 2010-08-25
JP2013211023A (ja) 2013-10-10
CN101884025A (zh) 2010-11-10
JP2015133126A (ja) 2015-07-23
US8341383B2 (en) 2012-12-25
JP5815596B2 (ja) 2015-11-17
EP2220556B1 (en) 2019-03-06
KR101254067B1 (ko) 2013-04-12
KR20100087357A (ko) 2010-08-04
US20090119486A1 (en) 2009-05-07
JP2011503718A (ja) 2011-01-27
WO2009059100A1 (en) 2009-05-07

Similar Documents

Publication Publication Date Title
JP5815596B2 (ja) プロシージャリターンシーケンスを加速するための方法およびシステム
RU2417407C2 (ru) Способы и устройство для моделирования поведения предсказания переходов явного вызова подпрограммы
US7278012B2 (en) Method and apparatus for efficiently accessing first and second branch history tables to predict branch instructions
JP5209633B2 (ja) ワーキング・グローバル・ヒストリ・レジスタを備えるシステム及び方法
US7444501B2 (en) Methods and apparatus for recognizing a subroutine call
KR20070108936A (ko) 조건부 명령어가 실행되지 않을 경우 소스 오퍼랜드를대기하는 것을 중지하는 방법
US20080065870A1 (en) Information processing apparatus
JP5209390B2 (ja) 情報処理装置及び命令フェッチ制御方法
US20090070569A1 (en) Branch prediction device,branch prediction method, and microprocessor
JP5696210B2 (ja) プロセッサ及びその命令処理方法
JP4728877B2 (ja) マイクロプロセッサおよびパイプライン制御方法
CN113703842B (zh) 一种基于分支预测的值预测方法、装置及介质
US20220308888A1 (en) Method for reducing lost cycles after branch misprediction in a multi-thread microprocessor
US20220308887A1 (en) Mitigation of branch misprediction penalty in a hardware multi-thread microprocessor
US6948055B1 (en) Accuracy of multiple branch prediction schemes
US20060259752A1 (en) Stateless Branch Prediction Scheme for VLIW Processor

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20121121

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20121127

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20130227

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20130306

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20130326

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20130402

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130430

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: 20130521

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130619

R150 Certificate of patent or registration of utility model

Ref document number: 5301554

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

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