JP2016517092A - プロセッサにおいてリターン分岐命令を実行する速度を向上させる方法 - Google Patents

プロセッサにおいてリターン分岐命令を実行する速度を向上させる方法 Download PDF

Info

Publication number
JP2016517092A
JP2016517092A JP2016503221A JP2016503221A JP2016517092A JP 2016517092 A JP2016517092 A JP 2016517092A JP 2016503221 A JP2016503221 A JP 2016503221A JP 2016503221 A JP2016503221 A JP 2016503221A JP 2016517092 A JP2016517092 A JP 2016517092A
Authority
JP
Japan
Prior art keywords
branch instruction
processor
instruction
counter
constant
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
JP2016503221A
Other languages
English (en)
Other versions
JP6257745B2 (ja
JP2016517092A5 (ja
Inventor
ロドニー・ウェイン・スミス
ジェフェリー・エム・ショットミラー
マイケル・スコット・マッキルヴェイン
ブライアン・マイケル・ステンペル
メリンダ・ジェイ・ブラウン
ダレン・ユージン・ストリート
Original Assignee
クアルコム,インコーポレイテッド
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 クアルコム,インコーポレイテッド filed Critical クアルコム,インコーポレイテッド
Publication of JP2016517092A publication Critical patent/JP2016517092A/ja
Publication of JP2016517092A5 publication Critical patent/JP2016517092A5/ja
Application granted granted Critical
Publication of JP6257745B2 publication Critical patent/JP6257745B2/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/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30058Conditional 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/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/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

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

リンクレジスタスタックを利用することによって、プロセッサにおいてコール分岐命令およびリターン分岐命令を実行するための装置および方法。プロセッサは、ゼロに初期化される、およびプロセッサがコール分岐命令以外のリンクレジスタ操作命令をデコードするたびにゼロに設定される分岐カウンタを含む。分岐カウンタは、コール分岐命令がデコードされ、アドレスがリンクレジスタスタック上にプッシュされるたびに、1だけインクリメントされる。リターン分岐命令をデコードすることに応じて、および分岐カウンタがゼロではないならば、デコードされたリターン分岐命令のためのターゲットアドレスが、リンクレジスタスタックからポップされ、分岐カウンタがデクリメントされ、ターゲットアドレスの正当性がチェックされる必要はない。

Description

本発明の諸実施形態は、マイクロプロセッサを対象とする。
コール分岐命令により、プログラム制御が、サブルーチン(関数)を実行するコードのセクションに分岐できるようになる。たとえば、コール分岐命令が実行されるとき、プログラムカウンタ中のアドレスはインクリメントされ、後に再び呼び出されるようにリンクレジスタにロードされ、プログラム制御が、呼び出されるサブルーチンを表すコードのセクションに分岐するように、呼び出されるサブルーチンのコードの最初の行のアドレスは、プログラムカウンタにロードされる。コードのセクションの終わりのリターン分岐命令により、プログラム制御はリンクレジスタに記憶されたアドレスに戻り、それによってサブルーチンを呼び出したコール分岐命令後のプログラム順で次の命令に戻る。
入れ子型または再帰的サブルーチン(関数)を実行するには、すなわち、サブルーチンが別のサブルーチン(それ自体であってもよい)を呼び出すには、ソフトウェアがメモリでスタックを利用することができる。たとえば、第1のサブルーチンコールによりアドレスがリンクレジスタにロードされていた場合、また第2のサブルーチンが、第1のサブルーチンを表すコード内で呼び出される場合、第1のサブルーチンが呼び出されたときリンクレジスタにロードされたアドレスは、ソフトウェアの規則によってメモリでスタックの最上部にプッシュされ、第2の分岐命令後のプログラム順で次の命令を表すアドレスが、リンクレジスタにロードされる。第2の呼び出されたサブルーチンに対するリターン分岐命令が実行されるとき、リンクレジスタに記憶されたアドレスは、プログラムカウンタにロードされ、スタックの最上部のアドレスは次にポップされ、リンクレジスタにロードされて、第1のサブルーチンが完了すると、プログラム制御が第1の分岐命令の(プログラム順で)直後の命令に戻ることができるようにする。
本発明の諸実施形態は、リンクレジスタスタックを使用してリターン分岐命令を実行するためのプロセッササイクルの数を減少させるシステムおよび方法を対象とする。
一実施形態では、方法は、プロセッサがコール分岐命令以外のリンクレジスタ操作命令をデコードすることに応じて、状態機械を初期状態に設定するステップと、コール分岐命令またはリターン分岐命令をデコードすることに応じて状態機械を、プロセッサがコール分岐命令以外のリンクレジスタ操作命令をデコードして以来、プロセッサによってデコードされたコール分岐命令の、それに対してプロセッサは対応するリターン分岐命令をデコードしていない、数を示す状態に変更するステップとを含む。この方法はさらに、状態機械の状態が、プロセッサがコール分岐命令以外のリンクレジスタ操作命令をデコードして以来、少なくとも1つのコール分岐命令がデコードされたことを示し、およびそれに対して対応するリターン分岐命令がデコードされていないならば、プロセッサがリターン分岐命令をフェッチし、デコードすることに応じて、リンクレジスタスタックからターゲットアドレスをポップし、このターゲットアドレスを次の命令をフェッチするアドレスとして使用するステップと、ターゲットアドレスの正当性をチェックすることなくリターン分岐命令の実行を完了するステップとを含む。
別の態様では、方法は、プロセッサがコール分岐命令以外のリンクレジスタ操作命令をデコードすることに応じて、カウンタを初期値に設定するステップと、プロセッサがコール分岐命令をデコードすることに応じて、第1の定数だけカウンタをインクリメントするステップと、プロセッサがリターン分岐命令をデコードすることに応じて、第2の定数だけカウンタをインクリメントするステップとを含む。この方法はさらに、プロセッサがカウンタの値は初期値に等しくないと判定することに応じて、およびプロセッサがリターン分岐命令をデコードすることに応じて、リターン分岐命令のためのターゲットアドレスをリンクレジスタスタックからポップするステップと、ターゲットアドレスの正当性をチェックすることなくリターン分岐命令の実行を完了するステップとを含む。
別の実施形態では、装置が、リンクレジスタと、分岐カウンタと、リンクレジスタに書き込むコール分岐命令以外の命令をデコードすることに応じて分岐カウンタを初期値に設定し、コール分岐命令をデコードすることに応じて第1の定数だけ分岐カウンタをインクリメントし、リターン分岐命令をデコードすることに応じて第2の定数だけ分岐カウンタをインクリメントするためのプロセッサとを含む。この装置はさらにリンクレジスタスタックを含み、プロセッサが、カウンタの値は初期値に等しくないと判定することに応じて、およびリターン分岐命令をデコードすることに応じて、リターン分岐命令のためのターゲットアドレスをリンクレジスタスタックからポップし、ターゲットアドレスの正当性をチェックすることなく、実行を完了し、リターン分岐命令を回収する(retire)。
別の実施形態では、プロセッサが、分岐カウンタと、リンクレジスタスタックと、カウンタを設定するための手段であって、プロセッサがコール分岐命令以外のリンクレジスタ操作命令をデコードすることに応じて、分岐カウンタを初期値に設定する、カウンタを設定するための手段と、カウンタをインクリメントするための手段であって、プロセッサがコール分岐命令をデコードすることに応じて第1の定数だけ分岐カウンタをインクリメントするように、およびプロセッサがリターン分岐命令をデコードすることに応じて第2の定数だけ分岐カウンタをインクリメントするように、カウンタをインクリメントするための手段とを含む。プロセッサはさらに、リンクレジスタスタックをポップするための手段であって、プロセッサが分岐カウンタの値は初期値に等しくないと判定することに応じて、およびプロセッサがリターン分岐命令をデコードすることに応じて、リターン分岐命令のためのターゲットアドレスをリンクレジスタスタックからポップする、リンクレジスタスタックをポップするための手段と、ターゲットアドレスの正当性をチェックすることなく、実行を完了し、リターン分岐命令を回収するプロセッサとを含む。
別の実施形態では、記憶媒体が、プロセッサによって実行可能な命令を記憶し、プロセッサは、命令を実行するとき方法を実行し、方法は、プロセッサがコール分岐命令以外のリンクレジスタ操作命令をデコードすることに応じて、カウンタを初期値に設定するステップと、プロセッサがコール分岐命令をデコードすることに応じて、第1の定数だけカウンタをインクリメントするステップと、プロセッサがリターン分岐命令をデコードすることに応じて、第2の定数だけカウンタをインクリメントするステップとを含む。この方法はさらに、プロセッサがカウンタの値は初期値に等しくないと判定することに応じて、およびプロセッサがリターン分岐命令をデコードすることに応じて、リターン分岐命令のためのターゲットアドレスをリンクレジスタスタックからポップするステップと、ターゲットアドレスの正当性をチェックすることなくリターン分岐命令の実行を完了するステップとを含む。
添付の図面は、本発明の諸実施形態の説明に役立つように提示し、単に諸実施形態の例示のために提供するものであり、これを限定するものではない。
一実施形態によるマイクロプロセッサを抽象化した図である。 一実施形態による命令フローを示す図である。 一実施形態によるフロー図である。 一実施形態を含むワイヤレス通信システムの図である。
本発明の特定の実施形態に向けた次の説明および関連図面において、本発明の諸態様を開示する。本発明の範囲を逸脱することなく、代替実施形態を考案することができる。さらに、本発明の関連する詳細をあいまいにしないために、本発明の周知の要素については詳しく説明しない、または省略する。
「例示的」という用語は、本明細書では「一例、事例、または実例として役立つ」ことを意味するように使用される。「例示的」として本明細書で説明する実施形態が、必ずしも他の実施形態よりも好ましいまたは有利であると解釈されるべきではない。同様に、「本発明の諸実施形態」という用語は、本発明のすべての実施形態が、述べられる特徴、利点、または動作モードを含むことを求めない。
本明細書で使用される用語は、単に特定の実施形態を説明するためであって、本発明の実施形態を限定するものであることを意図されていない。本明細書で使用される単数形、「a」、「an」、および「the」は、文脈上明らかに他の意味を示す場合を除いて、複数形も含むものとする。「備える」、「備えている」、「含む」、および/または「含んでいる」という用語は、本明細書で使用されるとき、述べられる特徴、完全体、ステップ、動作、要素、および/または構成要素の存在を明記するが、1つまたは複数の他の特徴、完全体、ステップ、動作、要素、構成要素、および/またはその集まりの存在または追加を排除しないことはさらに理解されよう。
さらに、多くの実施形態について、たとえばコンピュータデバイスの要素によって実行される一連の動作の観点から説明する。本明細書に記載する様々な動作は、特定の回路(たとえば、特定用途向け集積回路(ASIC))で、1つまたは複数のプロセッサによって実行されるプログラム命令で、または両方の組合せで行うことができることは認識されよう。さらに、本明細書に記載するこれらの一連の動作は、実行されると関連するプロセッサに本明細書に記載する機能を行わせる、対応するコンピュータ命令のセットを記憶したいかなる形態の非一時的コンピュータ可読記憶媒体内でも完全に具体化されるとみなすことができる。このように、本発明の様々な態様は、いくつかの異なる形態で具体化されることが可能であり、そのすべてが請求される対象の範囲内であると考えられている。また、本明細書に記載する実施形態のそれぞれについては、このようないかなる実施形態の対応する形態も、本明細書ではたとえば、記載する動作を行う「ように構成された論理」として記載されることがある。
本明細書ではリンクレジスタスタックと呼ばれるハードウェア構造を使用することによって、ソフトウェアスタックを使用するとき、諸実施形態が改善されると期待される。リンクレジスタスタックは、適切な環境の下で、リターン分岐命令のためのターゲットアドレスが、ターゲットアドレスの正当性を確認することなく、リンクレジスタスタックからパイプラインに転送されることが可能であるように、リンクレジスタ値(アドレス)を記憶するために使用される。
図1は、一実施形態に従ったマイクロプロセッサ100の簡略化された抽象概念である。パイプライン102が、データキャッシュ104からのデータ、および命令キャッシュ106からの命令を受信する。コントローラ108が、パイプライン102内の様々なステージおよび実行ユニット(フェッチステージ、デコードステージなど)を制御して、命令をデコードし、実行する。完了すると実行された命令からの結果を、レジスタファイル110に、データキャッシュ104に、およびメモリ112で表される他のバッファもしくはメモリユニットに、記憶することができる。メモリ112は、メモリ階層を表すことができる。背景技術において述べたように、ソフトウェアスタックは抽象的なメモリタイプであり、113と表示される。
レジスタファイル110は、図1に示す3つ、すなわちプログラムカウンタレジスタ114と、リンクレジスタ116と、ソフトウェアスタック113の最上部へのポインタを記憶するためのスタックポインタレジスタ118とを有する、複数のレジスタを含む。
リンクレジスタスタックは、120と表示されたハードウェアメモリ構造として、図1に示されている。リンクレジスタスタック120は、マイクロプロセッサ100と同じダイ(チップ)上に位置するレジスタファイルであってもよく、レジスタファイル110とは別個の構造として示されている。実際には、リンクレジスタスタック120は、レジスタファイル110の一部とすることができるが、マイクロプロセッサ100の設計済みレジスタ(architected register)の一部ではない可能性があることを示すために、別個の構造として示されている。リンクレジスタスタック120は、124と表示された分岐カウンタを含む。分岐カウンタ124の役割については、後で説明する。
一実施形態については、コントローラ108は、パイプライン102がコール分岐命令をデコードするとき、(プログラム順で)次の命令のアドレスがリンクレジスタスタック120上にプッシュされるように構成される。(背景技術において説明したように、このアドレスはまた、値としてリンクレジスタ116に記憶され、リンクレジスタ116に記憶された前の値は、ソフトウェアスタック113上にプッシュされ、スタックポインタレジスタ118に記憶されたアドレスによってポイントされる。)
サブルーチン(関数)が呼び出されるソフトウェアプログラム中の各コール分岐命令については、サブルーチンの終わりにリターン分岐命令がある。このような各コール分岐命令およびリターン分岐命令を、分岐命令のペアとみなすことができる。すなわち、リターン分岐命令は、コール分岐命令とペアになっている。これを考慮して、分岐カウンタ124は、パイプライン102がデコードされたコール分岐命令とペアになったリターン分岐命令をデコードしていない、およびパイプライン102がリンクレジスタ操作命令に遭遇していない、デコードされたコール分岐命令の数の記録をとる構造として説明されてもよい。リンクレジスタ操作命令が、コール分岐命令以外の、リンクレジスタ116に書き込むいかなる命令も指す。
分岐カウンタ124は、ゼロに初期化され、パイプライン102がリンクレジスタ操作命令をデコードするたびにゼロに設定される。コール分岐命令がデコードされ、命令アドレスがリンクレジスタスタック120上にプッシュされるたびに、分岐カウンタ124の値は1だけインクリメントされ、リターン分岐命令がデコードされ、命令アドレスがリンクレジスタスタック120からポップされるたびに、分岐カウンタ124の値は1だけデクリメントされる。
リンクレジスタスタック120上に最初の命令アドレスがプッシュされて以来、リンクレジスタ操作命令がない限り、リンクレジスタスタック120に記憶された値(アドレス)は、リンクレジスタ116に書き込まれた値(アドレス)の正しい履歴を表す。したがって、分岐カウンタ124の値がゼロより大きい限り、リンクレジスタスタック120の状態は、リンクレジスタ116の正しい履歴を表す。
一実施形態については、コントローラ108は、パイプライン102がリターン分岐命令をデコードするとき、および分岐カウンタ124に記憶された値がゼロより大きいならば、リンクレジスタスタック120の最上部のアドレスが、デコードされたリターン分岐命令のためのターゲットアドレスとしてパイプライン102に転送されるように構成される。分岐カウンタ124に記憶された値はゼロより大きいので、リンクレジスタスタック120からポップされたアドレスは、正しいターゲットアドレスであり、ゆえにデコードされたリターン分岐命令が実行を完了し、回収するために正当性のチェックが行われる必要はない。
しかしながら、パイプライン102がリターン分岐命令をデコードするとき、分岐カウンタ124の値がゼロである場合、リンクレジスタスタック120の状態が、リンクレジスタ116の正しい履歴を表しているという保証はなく、この場合コントローラ108は、パイプライン102を従来の方法で処理し、それによってソフトウェアスタック113は、背景技術で説明したように使用されて、予測ターゲットアドレスを提供し、正当性のチェックが行われた後に、デコードされたリターン分岐命令は実行を完了し、回収することができる。
分岐カウンタ124を使用することによって、諸実施形態は、入れ子型サブルーチンの場合、ターゲットアドレスのためにリンクレジスタスタック120を使用することができ、リンクレジスタ116を操作する(リンクレジスタ116に書き込む)介入リンクレジスタ操作命令がない限り、呼び出されたサブルーチンが別のサブルーチンを呼び出す。
このような実施形態によるプロセッサが、プロセッササイクルを節約すると期待され、それによって電力および時間を節約する。
図2は、コードのセグメント中の命令フローを考慮することによって一実施形態を示す。文字Aから文字Lは、コードセグメント中の命令を表す。図2の実施形態を説明するために、変数xは、分岐カウンタ124の値を示す。コードセグメントを実行する前に、分岐カウンタ124の値は、表示200で示されるように、ゼロに設定される。
図2に示すコードセグメント中の第1の命令は、命令A、すなわち、図2の命令Dである、L1と表示された命令へのコール分岐命令である。コール分岐命令Aをデコードし、実行すると、命令Bのためのアドレスは、リンクレジスタ116に書き込まれ、またリンクレジスタスタック120上にプッシュされる。分岐カウンタ124は、図2の表示201で示すように、1だけインクリメントされる。分岐カウンタ124の値は、現在1である。
プログラムカウンタレジスタ114は、現在、命令Dのアドレスに設定され、パイプライン102の命令フローは、202と表示される矢印で示されるように、命令Aから命令Dに進む。命令フローは次いで、図2の204、206、および208と表示される矢印で示されるように、命令Dから命令Eに、命令Eから命令Fに、および命令Fから命令Gに進む。
命令Gは、図2の命令Jである、L2と表示される命令へのコール分岐命令である。命令Jのアドレスは、プログラムカウンタレジスタ114にロードされ、210と表示される矢印で示すように、制御は命令Jに導かれる。命令Hのためのアドレスは、リンクレジスタスタック120上にプッシュされ、リンクレジスタ116に書き込まれる。分岐カウンタ124は、表示212で示すように、1だけインクリメントされる。分岐カウンタ124の値は、現在2に等しい。
プログラムカウンタレジスタ114は命令Jのアドレスに設定されていたので、パイプライン102の命令フローは、214および216と表示される矢印で示されるように、命令Jから命令Kに、次いで命令Kから命令Lに進む。
命令Lは、リターン分岐命令であり、分岐カウンタ124の値(図2のx)がゼロより大きいので、リンクレジスタスタック120の状態は正しいことがわかり、したがってリンクレジスタスタック120の最上部からポップされるターゲットアドレスは正しい。ゆえに、命令Lが実行され、完了するとき、ポップされたアドレスの正当性をチェックする必要はない。このポップされたアドレスは、命令Hのためのアドレスである。分岐カウンタ124は、表示218で示すように、命令Lをデコードし、実行すると、1だけデクリメントされる。分岐カウンタ124の値は、現在1である。
図2に示す例を続けると、命令Lのターゲットは命令Hのアドレスであり、命令Hはプログラム順でコール分岐命令G直後の命令であるので、プログラム制御は、220と表示される矢印で示す命令Hに導かれる。
命令Hは、リターン分岐命令としてデコードされ、分岐カウンタ124の値がゼロより大きいので、リンクレジスタスタック120の状態が正しいことがわかり、ゆえにリンクレジスタスタック120からポップされたターゲットアドレスは、正しいターゲットアドレスである。このターゲットアドレスは、命令Bのための命令アドレスであり、命令Hが実行され、完了するとき、正当性をチェックされる必要はない。命令Hを実行すると、分岐カウンタ124は、表示222で示すように1だけデクリメントされ、制御は224と表示する矢印で示すように、命令Bに導かれる。分岐カウンタ124の値は、現在ゼロである。
前述のように、コントローラ108は、リンクレジスタ操作命令、すなわちリンクレジスタ116に書き込むコール分岐命令以外の命令をデコードし、実行すると、分岐カウンタ124の値がゼロに設定されるように構成される。リターン分岐命令がデコードされ、その分岐カウンタ124の値がゼロである実行を開始する場合、リンクレジスタスタック120の状態が正しいという保証はない。したがって、予測ターゲットアドレスが、ソフトウェアスタック113からポップされる場合、リターン分岐命令が実行を完了して、回収する前に、予測ターゲットアドレスの正当性をチェックされるべきである。
図3は、一実施形態によるフロー図を示す。302と表示されるステップから始まって、命令が命令キャッシュ106からフェッチされ、デコードされるとき、図3の決定フローは、デコードされる命令がコール分岐命令、リターン分岐命令、またはリンクレジスタ操作命令であるかどうかに応じて決まる。一般性を失うことなく、これらの3つの命令のどれがデコードされる命令であるかを判定する順序は、表示304、306、および308で図3に示されている。しかしながら、他の実施形態については、これらの判定は、図3に示す順序ではない可能性があることは理解されよう。
ステップ304を参照すると、命令がコール分岐命令であるかどうかについて判定が行われる。そうである場合、(プログラム順で)次の命令のアドレスは、ステップ310に示すようにリンクレジスタスタック120上にプッシュされ、分岐カウンタ124の値は、ステップ312に示されるように1だけインクリメントされる(x←x+1)。図3は、ステップ312の動作を実行した後にステップ302に戻るフロー図を示している。ステップ312からステップ302へのデータフローは、ステップ312の後に実際の実施形態のパイプラインでとられる次の動作が必ず命令フェッチであることを暗示するものではないが、データフローは、一実施形態によってとられる動作を説明するために、単に便宜上そのようなものとして示されている。
ステップ306を参照すると、命令がリターン分岐命令であるかどうかについて判定が行われる。命令がリターン分岐命令であり、分岐カウンタ124の値がゼロより大きい場合(ステップ314)、ターゲットアドレスは、リンクレジスタスタック120からポップされて(ステップ316)、パイプライン102に転送され、プログラムカウンタレジスタ114に書き込まれ、分岐カウンタ124は1だけデクリメントされ(ステップ318)、命令が実行され、完了するとき、ターゲットアドレスの正当性をチェックする必要はない、ステップ320。
しかしながら、ステップ314において、分岐カウンタ124の値がゼロであると判定される場合、マイクロプロセッサ100は従来の方法で進行し、それによって予測ターゲットアドレスが使用される場合、その正当性をチェックすべきである(ステップ322)。
図3は、ステップ320またはステップ322の動作を実行した後にステップ302に戻るフロー図を示すが、上述のように、このようなプロセスフローは、単に便宜上紹介する。
ステップ308を参照すると、命令がリンクレジスタ116を操作する(たとえば、これに書き込む)(コール分岐命令以外の)いずれかの命令であるかどうかについて判定が行われる。そうである場合、分岐カウンタ124の値は、ステップ324に示すように、ゼロにリセットされる(x←0)。そうではない場合、制御はステップ302に戻される。やはり、ステップ308およびステップ324の動作を実行した後にステップ302に戻るフロー図は、単に便宜上紹介する。
分岐カウンタ124はゼロを超えてデクリメントされないという規則を想定する。すなわち、パイプライン102がリターン分岐命令をデコードすることが起こり得るが、パイプライン102はコール分岐命令以外のリンクレジスタ操作命令をデコードしたので、分岐カウンタ124はすでにゼロに設定されている。この場合、分岐カウンタ124はゼロのままである。
一般に、状態機械は、分岐カウンタ124の動作を実行することができ、状態は、介入リンクレジスタ操作命令をデコードして以来、プロセッサ100によってデコードされたコール分岐命令の、それに対してデコードされたコール分岐命令とペアになったリターン分岐命令がまだデコードされていない、数の記録をとることは理解されよう。
たとえば、カウンタは、コール分岐命令がデコードされるたびに1だけインクリメントされる、リターン分岐命令がデコードされるたびに1だけデクリメントされる、またはリンクレジスタ操作命令がデコードされるたびにゼロにリセットされることは必要ではない。特定の例として、カウンタの方向は、逆にされてもよく、カウンタは、その最大値に初期化され、コール分岐命令がデコードされるたびにデクリメントされ、リターン分岐命令がデコードされるたびにインクリメントされる。図3によって表されるフロー図は、この特定の例に基づいて調整されることが可能である。
図3に関して説明した動作は、コントローラ108で実現されるハードウェアで実行されてもよい。いくつかの実施形態については、図3に示した動作の一部または全部が、ファームウェアまたはソフトウェアとみなされる命令など、コントローラ108で実行される命令によって実現されてもよく、このような命令がメモリ112に記憶されてもよい。
図4は、諸実施形態が適用されることが可能であるワイヤレス通信システムを示す。図4は、基地局404Aと、基地局404Bと、基地局404Cとを含んだワイヤレス通信ネットワーク402を示す。図4は、406と表示された通信デバイスを示し、これはいわゆるスマートフォン、タブレット、またはセルラー電話ネットワークに適した他の種類の通信デバイス、たとえばコンピュータなど、モバイルセルラー通信デバイスであってもよい。通信デバイス406は、モバイルである必要はない。図4の特定の例では、通信デバイス406は、基地局404Cと関連付けられるセル内に位置している。矢印408および矢印410は、それぞれアップリンクチャネルおよびダウンリンクチャネルを図示しており、これにより通信デバイス406は基地局404Cと通信する。
たとえば、通信デバイス406と関連付けられるデータ処理システム、または基地局404Cと関連付けられるデータ処理システム、または両方において、諸実施形態が使用され得る。図4は、本明細書に記載する諸実施形態が使用され得る多くの応用の中から単に1つの応用を示す。
情報および信号は、多種多様な技術および技法のいずれかを用いて表され得ることを、当業者は理解するであろう。たとえば、上記の説明全体にわたって参照することができるデータ、命令、コマンド、情報、信号、ビット、シンボル、およびチップは、電圧、電流、電磁波、磁界もしくは磁性粒子、光場もしくは光粒子、またはその組合せによって表すことができる。
さらに、本明細書で開示した実施形態と関連して説明した様々な説明的な論理ブロック、モジュール、回路、およびアルゴリズムのステップは、電子ハードウェア、コンピュータソフトウェア、または両方の組合せとして実装されることが可能であることを、当業者は理解するであろう。ハードウェアとソフトウェアのこのような互換性をわかりやすく説明するために、様々な例示的構成要素、ブロック、モジュール、回路、およびステップは、概してその機能性に関して上述した。このような機能性がハードウェアとして実装されるか、またはソフトウェアとして実装されるかは、特定の応用およびシステム全体に課される設計の制約によって決まる。当業者は、各特定の応用に対して様々な方法で記載した機能を実行することができるが、このような実行の決定は、本発明の範囲からの逸脱をもたらすと解釈されるべきではない。
本明細書に開示した実施形態と関連して記載した方法、シーケンス、および/またはアルゴリズムは、直接ハードウェアで、プロセッサによって実行されるソフトウェアモジュールで、またはこの2つの組合せで、具体化されることが可能である。ソフトウェアモジュールは、RAMメモリ、フラッシュメモリ、ROMメモリ、EPROMメモリ、EEPROMメモリ、レジスタ、ハードディスク、リムーバブルディスク、CD-ROM、または当技術分野で知られているその他の形態の記憶媒体に、常駐することができる。図1の特定の例では、1つまたは複数のソフトウェアモジュールは、メモリ112に記憶されてもよい。例示的な記憶媒体をプロセッサに結合し、プロセッサがこの記憶媒体から情報を読み取ること、およびこの記憶媒体に情報を書き込むことができるようにする。代替的には記憶媒体は、プロセッサと一体化することができる。
したがって、本発明の一実施形態が、リターン分岐命令を実行する速度を向上させる方法を具体化する非一時的コンピュータ可読媒体を含むことができる。したがって、本発明は、図示した例に限定されず、本明細書に記載する機能を実行するためのいかなる手段も、本発明の諸実施形態に含まれる。
上述の開示は、本発明の例示的実施形態を示すが、様々な変更形態および修正形態が、添付の特許請求の範囲によって定義される本発明の範囲から逸脱することなく本明細書において作成可能であることに注意すべきである。本明細書に記載する本発明の実施形態に従った方法の請求項の機能、ステップ、および/または動作は、特定の順序で行われる必要はない。さらに、本発明の要素は、単数で記載または請求される場合があるが、単数に限定することが明示的に表明されていない場合、複数が検討される。
100 マイクロプロセッサ
102 パイプライン
104 データキャッシュ
106 命令キャッシュ
108 コントローラ
110 レジスタファイル
112 メモリ
113 ソフトウェアスタック
114 プログラムカウンタ
116 リンクレジスタ
118 スタックポインタ
120 リンクレジスタスタック
124 分岐カウンタ
404 基地局
406 通信デバイス

Claims (19)

  1. プロセッサにおいて、コール分岐命令およびリターン分岐命令を実行するための方法であって、
    前記プロセッサがコール分岐命令以外のリンクレジスタ操作命令をデコードすることに応じて、状態機械を初期状態に設定するステップと、
    コール分岐命令またはリターン分岐命令をデコードすることに応じて、前記プロセッサがコール分岐命令以外のリンクレジスタ操作命令をデコードして以来、前記プロセッサによってデコードされたコール分岐命令の、それに対して前記プロセッサが、前記デコードされたコール分岐命令とペアになったリターン分岐命令をデコードしていない、数を示す状態に、状態機械を変更するステップと
    を含む、方法。
  2. 前記状態機械の状態が、前記プロセッサがコール分岐命令以外のリンクレジスタ操作命令をデコードして以来、少なくとも1つのコール分岐命令がデコードされ、それに対して前記少なくとも1つのデコードされたコール分岐命令とペアになった少なくとも1つのリターン分岐命令がデコードされていないことを示すならば、前記プロセッサがリターン分岐命令をフェッチし、デコードすることに応じて、リンクレジスタスタックからターゲットアドレスをポップし、前記ターゲットアドレスを次の命令をフェッチするアドレスとして使用するステップと、
    前記ターゲットアドレスの正当性をチェックすることなく、前記リターン分岐命令の実行を完了するステップと
    をさらに含む、請求項1に記載の方法。
  3. プロセッサにおいて、コール分岐命令およびリターン分岐命令を実行するための方法であって、
    前記プロセッサがコール分岐命令以外のリンクレジスタ操作命令をデコードすることに応じて、カウンタを初期値に設定するステップと、
    前記プロセッサがコール分岐命令をデコードすることに応じて、第1の定数だけ前記カウンタをインクリメントするステップと、
    前記プロセッサがリターン分岐命令をデコードすることに応じて、第2の定数だけ前記カウンタをインクリメントするステップと
    を含む、方法。
  4. 前記プロセッサが前記カウンタの値は前記初期値に等しくないと判定することに応じて、および前記プロセッサが前記リターン分岐命令をデコードすることに応じて、前記リターン分岐命令のためのターゲットアドレスをリンクレジスタスタックからポップするステップと、
    前記ターゲットアドレスの正当性をチェックすることなく前記リターン分岐命令の実行を完了するステップと
    をさらに含む、請求項3に記載の方法。
  5. 前記初期値がゼロであり、
    前記第1の定数が1に等しく、
    前記第2の定数がマイナス1に等しい、
    請求項4に記載の方法。
  6. 前記初期値がゼロであり、
    前記第1の定数が1に等しく、
    前記第2の定数がマイナス1に等しい、
    請求項3に記載の方法。
  7. リンクレジスタと、
    分岐カウンタと、
    前記リンクレジスタに書き込むコール分岐命令以外の命令をデコードすることに応じて、前記分岐カウンタを初期値に設定し、
    コール分岐命令をデコードすることに応じて、第1の定数だけ前記分岐カウンタをインクリメントし、
    リターン分岐命令をデコードすることに応じて、第2の定数だけ前記分岐カウンタをインクリメントする
    プロセッサと
    を備える装置。
  8. リンクレジスタスタックと、
    前記カウンタの値は前記初期値に等しくないと判定することに応じて、および前記リターン分岐命令をデコードすることに応じて、前記リターン分岐命令のためのターゲットアドレスを前記リンクレジスタスタックからポップし、
    前記ターゲットアドレスの正当性をチェックすることなく前記リターン分岐命令の実行を完了する
    前記プロセッサと
    をさらに備える、請求項7に記載の装置。
  9. 前記初期値がゼロであり、
    前記第1の定数が1に等しく、
    前記第2の定数がマイナス1に等しい、
    請求項8に記載の装置。
  10. 前記初期値がゼロであり、
    前記第1の定数が1に等しく、
    前記第2の定数がマイナス1に等しい、
    請求項7に記載の装置。
  11. 前記装置が、セルラー電話と、基地局とからなる集合から選択される、請求項7に記載の装置。
  12. 分岐カウンタと、
    リンクレジスタスタックと、
    カウンタを設定するための手段であって、プロセッサがコール分岐命令以外のリンクレジスタ操作命令をデコードすることに応じて前記分岐カウンタを初期値に設定する、カウンタを設定するための手段と、
    カウンタをインクリメントするための手段であって、前記プロセッサがコール分岐命令をデコードすることに応じて第1の定数だけ前記分岐カウンタをインクリメントし、前記プロセッサがリターン分岐命令をデコードすることに応じて第2の定数だけ前記分岐カウンタをインクリメントする、カウンタをインクリメントするための手段と
    を備えるプロセッサ。
  13. リンクレジスタスタックをポップするための手段であって、前記プロセッサが前記分岐カウンタの前記値は前記初期値に等しくないと判定することに応じて、および前記プロセッサが前記リターン分岐命令をデコードすることに応じて、前記リターン分岐命令のためのターゲットアドレスを前記リンクレジスタスタックからポップする、リンクレジスタスタックをポップするための手段と、
    前記ターゲットアドレスの正当性をチェックすることなく前記リターン分岐命令の実行を完了する前記プロセッサと
    をさらに備える、請求項12に記載のプロセッサ。
  14. 前記初期値がゼロであり、
    前記第1の定数が1に等しく、
    前記第2の定数がマイナス1に等しい、
    請求項13に記載のプロセッサ。
  15. 前記初期値がゼロであり、
    前記第1の定数が1に等しく、
    前記第2の定数がマイナス1に等しい、
    請求項12に記載のプロセッサ。
  16. プロセッサによって実行可能な記憶された命令を有する非一時的コンピュータ可読媒体であって、前記プロセッサが、前記命令を実行するとき方法を行い、前記方法が、
    前記プロセッサがコール分岐命令以外のリンクレジスタ操作命令をデコードすることに応じて、カウンタを初期値に設定するステップと、
    前記プロセッサがコール分岐命令をデコードすることに応じて、第1の定数だけ前記カウンタをインクリメントするステップと、
    前記プロセッサがリターン分岐命令をデコードすることに応じて、第2の定数だけ前記カウンタをインクリメントするステップと
    を含む、非一時的コンピュータ可読媒体。
  17. 前記方法が、
    前記プロセッサが前記カウンタの値は前記初期値に等しくないと判定することに応じて、および前記プロセッサが前記リターン分岐命令をデコードすることに応じて、前記リターン分岐命令のためのターゲットアドレスをリンクレジスタスタックからポップするステップと、
    前記ターゲットアドレスの正当性をチェックすることなく前記リターン分岐命令の実行を完了するステップと
    をさらに含む、請求項16に記載の非一時的コンピュータ可読媒体。
  18. 前記初期値がゼロであり、
    前記第1の定数が1に等しく、
    前記第2の定数がマイナス1に等しい、
    請求項17に記載の非一時的コンピュータ可読媒体。
  19. 前記初期値がゼロであり、
    前記第1の定数が1に等しく、
    前記第2の定数がマイナス1に等しい、
    請求項16に記載の非一時的コンピュータ可読媒体。
JP2016503221A 2013-03-15 2014-03-14 プロセッサにおいてリターン分岐命令を実行する速度を向上させる方法 Expired - Fee Related JP6257745B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/833,844 US9411590B2 (en) 2013-03-15 2013-03-15 Method to improve speed of executing return branch instructions in a processor
US13/833,844 2013-03-15
PCT/US2014/029778 WO2014145101A1 (en) 2013-03-15 2014-03-14 Method to improve speed of executing return branch instructions in a processor

Publications (3)

Publication Number Publication Date
JP2016517092A true JP2016517092A (ja) 2016-06-09
JP2016517092A5 JP2016517092A5 (ja) 2017-04-20
JP6257745B2 JP6257745B2 (ja) 2018-01-10

Family

ID=50629003

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016503221A Expired - Fee Related JP6257745B2 (ja) 2013-03-15 2014-03-14 プロセッサにおいてリターン分岐命令を実行する速度を向上させる方法

Country Status (6)

Country Link
US (1) US9411590B2 (ja)
EP (1) EP2972789B8 (ja)
JP (1) JP6257745B2 (ja)
KR (1) KR20150130513A (ja)
CN (1) CN105144084B (ja)
WO (1) WO2014145101A1 (ja)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9934831B2 (en) * 2014-04-07 2018-04-03 Micron Technology, Inc. Apparatuses and methods for storing and writing multiple parameter codes for memory operating parameters
US10120688B2 (en) * 2016-11-15 2018-11-06 Andes Technology Corporation Data processing system and method for executing block call and block return instructions
US20180203703A1 (en) * 2017-01-13 2018-07-19 Optimum Semiconductor Technologies, Inc. Implementation of register renaming, call-return prediction and prefetch
GB2571996B (en) * 2018-03-16 2020-09-09 Advanced Risc Mach Ltd Branch target variant of branch-with-link instruction
US10831884B1 (en) * 2019-09-16 2020-11-10 International Business Machines Corporation Nested function pointer calls

Citations (3)

* 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
US6550003B1 (en) * 1999-01-11 2003-04-15 Telefonaktiebolaget Lm Ericsson Not reported jump buffer
JP2010541106A (ja) * 2007-10-05 2010-12-24 クゥアルコム・インコーポレイテッド 誤りの投機的更新のリンクスタック修復

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4164037A (en) * 1976-10-27 1979-08-07 Texas Instruments Incorporated Electronic calculator or microprocessor system having combined data and flag bit storage system
US4112495A (en) * 1977-02-09 1978-09-05 Texas Instruments Incorporated Electronic calculator or microprocessor having a selectively loadable instruction register
US5193205A (en) * 1988-03-01 1993-03-09 Mitsubishi Denki Kabushiki Kaisha Pipeline processor, with return address stack storing only pre-return processed address for judging validity and correction of unprocessed address
US5179673A (en) * 1989-12-18 1993-01-12 Digital Equipment Corporation Subroutine return prediction mechanism using ring buffer and comparing predicated address with actual address to validate or flush the pipeline
US5623614A (en) 1993-09-17 1997-04-22 Advanced Micro Devices, Inc. Branch prediction cache with multiple entries for returns having multiple callers
US6157999A (en) * 1997-06-03 2000-12-05 Motorola Inc. Data processing system having a synchronizing link stack and method thereof
US6092188A (en) 1997-12-23 2000-07-18 Intel Corporation Processor and instruction set with predict instructions
US6170054B1 (en) 1998-11-16 2001-01-02 Intel Corporation Method and apparatus for predicting target addresses for return from subroutine instructions utilizing a return address cache
US7024537B2 (en) * 2003-01-21 2006-04-04 Advanced Micro Devices, Inc. Data speculation based on addressing patterns identifying dual-purpose register
US20080040576A1 (en) 2006-08-09 2008-02-14 Brian Michael Stempel Associate Cached Branch Information with the Last Granularity of Branch instruction in Variable Length instruction Set
US7478228B2 (en) * 2006-08-31 2009-01-13 Qualcomm Incorporated Apparatus for generating return address predictions for implicit and explicit subroutine calls
US7617387B2 (en) 2006-09-27 2009-11-10 Qualcomm Incorporated Methods and system for resolving simultaneous predicted branch instructions
GB2448149B (en) * 2007-04-03 2011-05-18 Advanced Risc Mach Ltd Protected function calling
US8438372B2 (en) * 2007-10-05 2013-05-07 Qualcomm Incorporated Link stack repair of erroneous speculative update
US8341383B2 (en) * 2007-11-02 2012-12-25 Qualcomm Incorporated Method and a system for accelerating procedure return sequences
US10042776B2 (en) 2012-11-20 2018-08-07 Arm Limited Prefetching based upon return addresses

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6550003B1 (en) * 1999-01-11 2003-04-15 Telefonaktiebolaget Lm Ericsson Not reported jump buffer
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
JP2010541106A (ja) * 2007-10-05 2010-12-24 クゥアルコム・インコーポレイテッド 誤りの投機的更新のリンクスタック修復

Also Published As

Publication number Publication date
CN105144084A (zh) 2015-12-09
EP2972789B1 (en) 2019-11-20
US20140281394A1 (en) 2014-09-18
KR20150130513A (ko) 2015-11-23
US9411590B2 (en) 2016-08-09
EP2972789A1 (en) 2016-01-20
JP6257745B2 (ja) 2018-01-10
CN105144084B (zh) 2018-03-20
EP2972789B8 (en) 2020-03-04
WO2014145101A1 (en) 2014-09-18

Similar Documents

Publication Publication Date Title
JP6257745B2 (ja) プロセッサにおいてリターン分岐命令を実行する速度を向上させる方法
KR101827747B1 (ko) 동일한 데이터 조건에 의존하는 인접 명령의 실행 제어
US9195466B2 (en) Fusing conditional write instructions having opposite conditions in instruction processing circuits, and related processor systems, methods, and computer-readable media
TW201224919A (en) Execute at commit state update instructions, apparatus, methods, and systems
JP2004516546A (ja) パイプライン方式のプロセッサにおける例外処理
US8677102B2 (en) Instruction fusion calculation device and method for instruction fusion calculation
JP5815596B2 (ja) プロシージャリターンシーケンスを加速するための方法およびシステム
US20200293317A1 (en) Data processing device data processing method and recording medium
JP6352386B2 (ja) 定数キャッシュを使用してより効率的にリテラル生成データを従属命令に転送するための方法および装置
CN107589960B (zh) 一种基于寄存器访问冲突检测的dsp指令模拟方法
KR100986375B1 (ko) 피연산자의 빠른 조건부 선택
KR20180039077A (ko) 전력 효율적 페치 적응
WO2014025815A1 (en) Fusing flag-producing and flag-consuming instructions in instruction processing circuits, and related processor systems, methods, and computer-readable media
EP3198400B1 (en) Dependency-prediction of instructions
US9146741B2 (en) Eliminating redundant masking operations instruction processing circuits, and related processor systems, methods, and computer-readable media
CN112740175A (zh) 基于加载路径历史的分支预测
US20190361810A1 (en) Prefetching data based on register-activity patterns
US20140013312A1 (en) Source level debugging apparatus and method for a reconfigurable processor
US20230393853A1 (en) Selectively updating branch predictors for loops executed from loop buffers in a processor
JP2004516572A (ja) スペキュレーティブ・レジスタの調整
US20140281368A1 (en) Cycle sliced vectors and slot execution on a shared datapath
CN117311816A (zh) 处理指令的方法、处理器、电子装置及存储介质
JP2012053690A (ja) プロセッサ

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170314

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20170314

A871 Explanation of circumstances concerning accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A871

Effective date: 20170316

A975 Report on accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A971005

Effective date: 20170519

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20170612

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170907

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20171205

R150 Certificate of patent or registration of utility model

Ref document number: 6257745

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees