JP5431308B2 - システムおよびパイプラインプロセッサにおける条件命令実行の加速のためのローカル条件コードレジスタの使用方法 - Google Patents

システムおよびパイプラインプロセッサにおける条件命令実行の加速のためのローカル条件コードレジスタの使用方法 Download PDF

Info

Publication number
JP5431308B2
JP5431308B2 JP2010507584A JP2010507584A JP5431308B2 JP 5431308 B2 JP5431308 B2 JP 5431308B2 JP 2010507584 A JP2010507584 A JP 2010507584A JP 2010507584 A JP2010507584 A JP 2010507584A JP 5431308 B2 JP5431308 B2 JP 5431308B2
Authority
JP
Japan
Prior art keywords
condition code
register
pipeline
instruction
value
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
JP2010507584A
Other languages
English (en)
Other versions
JP2010526392A (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 JP2010526392A publication Critical patent/JP2010526392A/ja
Application granted granted Critical
Publication of JP5431308B2 publication Critical patent/JP5431308B2/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, 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/30094Condition code generation, e.g. Carry, Zero flag
    • 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/30072Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards
    • 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
    • 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, look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline, look ahead using instruction pipelines
    • 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/46Multiprogramming arrangements

Description

本発明は、コンピュータシステム、特に、条件命令実行を加速するためにローカル条件コードレジスタを使用する方法およびシステムに概して関係する。
プロセッサパイプラインは、それぞれのステージが命令と関係する特定の機能を実行する多くのステージから構成されている。それぞれのステージは、パイプステージまたはパイプセグメントと称される。ステージは、パイプラインを形成するために互いに接続される。命令は、パイプラインの1つの終端から入り、他の終端から出る。命令は、パイプラインステージを経てストリームの中を順次に流れる。ステージは、いくつかのステージがいくつかの命令を同時に処理することができるように配置される。異なるパイプラインステージで複数の命令を同時に処理することは、プロセッサが、一時に1つの命令を処理することよりも速く命令を処理することを可能にし、従って、プロセッサの命令実行時間が向上する。
プロセッサ内では、複数のパイプライン処理命令が存在し得る。個々のパイプラインは、独自のプロセッサ機能を実行し得る。例えば、プロセッサは、整数命令を実行するための1つのパイプラインおよび浮動小数点またはベクトル命令を実行するための別のパイプラインを持ち得る。命令の機能性に基づいたパイプラインの分離によって、プロセッサは、命令を実行する場合、そのリソースをより効率的に利用し得る。
個々のパイプラインの中で処理され得るいくつかの典型的な命令は、条件命令であり得る。当業者が認識する限りでは、条件命令は、条件が満たされるか満たされないかによって実行するか実行しない命令である。条件命令を実行するために、条件コードレジスタは、その後の条件命令の処理の中で使用され得る、最も最近の条件コード値を保存するために使用される。条件命令は、プロセッサ内のパイプラインの中のいずれによっても実行され得る。
一般に、以前のARM(Advanced RISC Machine)プロセッサでは、複数のパイプラインを支援するために使用される条件コード値を含む、ただ1つのアクセス可能または読み出し可能な条件コードレジスタだけが存在した。この条件コードレジスタは、他のパイプラインに連結されているがただ1つのパイプラインに物理的に設置されていた。ただ1つの読み出しアクセス可能な条件コードレジスタを持つことは、他の遠隔的に配置されたパイプラインの中の条件命令を実行する場合に、プロセッサの実行に特に影響を与えた。効率影響は、条件命令がローカル条件コードレジスタを持たないパイプラインの中で実行される場合に明らかにされる。条件コードレジスタで保存された条件コード値は、条件命令が実行を試みるときにローカル条件コードレジスタを持たないパイプラインの中の要求する条件命令に送られる。しかしながら、条件命令が条件コード値を要求するとき、条件コード値は、前の命令から更新されている可能性がある。新しい条件コード値が条件コードレジスタに書き込まれている間、要求する条件命令は、新しい条件コード値が利用できるまで停止し得る。条件コードレジスタの更新が完成した後、新しい条件コード値は読み出され、ローカル条件コードレジスタを持たないパイプラインの中の要求する条件命令に送り返される。その結果、ローカル条件コードレジスタを持たないパイプラインの中の条件コード値の回復処理は、完了するためにいくつかのプロセッササイクルを取り得る。条件コード値を受け取る際の遅延は、条件コード値を変更する命令がローカル条件コードレジスタを持たないパイプラインの中で実行され、後の条件命令が同じパイプラインの中で実行する場合に合成され得る。この場合、後の条件命令は、それが読み出されてそのパイプラインに送り返されることが可能となる前に、新しい条件コード値の更新を待たなければならない可能性がある。
それ故に、パイプラインのそれぞれで使用される条件コードレジスタのローカルコピーを作成することによってプロセッサ内の複数のパイプラインの中の条件命令の実行を加速する方法についての必要性が産業界に存在する。条件コードレジスタのローカルコピーを複数のパイプラインに供給することは、パイプラインの中の条件命令の実行を加速し、プロセッサがより効率的そのリソースを利用することを可能にし、これによって、プロセッサの効率を増加させる。この開示は、この必要性を認識して、そのようなプロセッサを開示する。
複数のパイプラインを持つパイプラインプロセッサであって、第1のパイプラインに関連づけられた第1の条件コードレジスタと第2のパイプラインに関連づけられた第2の条件コードレジスタとを持つプロセッサで条件命令を実行する方法が開示される。この方法は、最も最近の条件コード値を第1の条件コードレジスタまたは第2の条件コードレジスタのいずれかに記録する。この方法は、さらに、第2の条件コードレジスタが最も最近の条件コード値を持っているか否かを示すインジケータを設定し、このインジケータに基づき、第1または第2の条件コードレジスタのいずれかから最も最近の条件コード値を取り出す。この方法は、取り出された最も最近の条件コード値に応じて条件命令が実行されるべきかどうかを判定する。
複数のパイプラインを持つパイプラインプロセッサであって、第1のパイプラインに関連づけられた第1の条件コードレジスタと第2のパイプラインに関連づけられた第2の条件コードレジスタとを持つパイプラインプロセッサで条件命令を実行するさらなる方法が開示される。この方法は、最も最近の条件コード値を第1の条件コードレジスタまたは第2の条件コードレジスタのいずれかに記録する。この方法は、パイプラインプロセッサ内の発行ステージの中で処理された場合、条件コードをセットする命令に応じてインジケータをさらに設定する。この条件コードインジケータは、第2のパイプラインが第2の条件コードレジスタに保存された最も最近の条件コード値を持つかどうかを示す。この方法は、このインジケータに基づき、第1または第2の条件コードレジスタのいずれかから最も最近の条件コード値を取り出し、取り出された最も最近の条件コード値に応じて条件命令が実行されるべきかどうかを判定する。
命令を実行するための複数のパイプラインを持つパイプラインプロセッサが示される。パイプラインプロセッサは、最も最近の条件コード値を受け入れるように構成された第1の条件コードレジスタを持ち、第1の条件コードレジスタは第1のパイプラインに関連づけられる。パイプラインプロセッサは、また、最も最近の条件コード値を受け入れるように構成された第2の条件コードレジスタを持つ。第2の条件コードレジスタは、第2のパイプラインに関連づけられる。パイプラインプロセッサは、第2の条件コードレジスタが最も最近の条件コード値を持つかどうかを示すように構成されたインジケータを持つ。パイプラインプロセッサは、このインジケータに基づき、最も最近の条件コード値を取り出し、取り出された最も最近の条件コード値に応じて条件命令を実行するかどうかを判定する。
本発明のさらなる特徴および利点のみならず、本発明のより完全な理解は、以下の詳細な記述および添付の図面から明白になるであろう。
図1は、本発明の実施形態に用いるプロセッサのハイレベルのロジックハードウェアブロックダイヤグラムを示す。 図2は、図1のCPUの上位のパイプラインのより詳細なブロックダイヤグラムを示す。 図3は、図1のCPUの下位パイプラインのより詳細なブロックダイヤグラムを示す。 図4は、図1のプロセッサによって実行された命令の典型的なグループを示す。 図5は、図1のプロセッサの様々なステージを通って実行される、図4の命令の典型的なグループのタイミングダイヤグラムを示す。 図6は、図1のプロセッサの上位および下位のパイプラインを通る典型的な命令フローを示すフローチャートを示す。
添付された図面に関して以下に説明される詳細な記載は、本発明の様々な実施形態の記載として意図され、本発明が実行され得るただ一つの実施形態を示すことは意図されない。この詳細な記載は、本発明の完全な理解を提供する目的のために特定の詳細を含む。しかしながら、本発明がこれらの特定の詳細なしで実行され得ることは当業者にとって明白であろう。いくつかの例では、周知の構造および要素は、本発明の概念を不明瞭にすることを避けるためにブロックダイヤグラムの形で示される。頭字語および他の記述的な専門用語は、ただ便利さと明瞭さとのために使用され得るものであり、発明の範囲を制限することは意図されない。
図1は、以下に記載されるような本発明の1つの実施形態を用いるスーパースカラプロセッサ100のハイレベルの図を示す。プロセッサ100は、特定の高速バス104を介して命令キャッシュ106と繋がれる中央処理装置(CPU)102を持つ。命令キャッシュ106も、汎用のバス110を介してメモリ10と繋がれる。CPU102は、下位パイプライン160および165と繋がれる上位パイプライン150を持つ。CPU102は、メモリ108から命令キャッシュ106への命令のローディングを制御する。命令キャッシュ106に命令がロードされれば、CPU102は、高速バス104を介してそれらにアクセスすることができる。命令は、命令キャッシュ106から上位パイプライン150へフェッチされる。命令が上位パイプライン150で処理された後、それらは、さらなる処理のために下位パイプライン160または165に送られる。1つの典型的な実施形態では、下位パイプライン160は整数パイプラインであり得るし、下位パイプライン165は浮動小数点/ベクトルパイプラインであり得る。
命令は、逐次プログラム順に上位パイプライン150から離れる。上位パイプライン150から離れた後、命令は、より効率的な処理のために下位パイプライン160または165に再配置され得る。上位パイプライン150の中の命令上で実行されるいくつかの典型的な処理機能は、命令を取り込むこと、命令を整列させること、命令を解読すること、下位パイプライン160または165に対して命令を発行することなどを含む。下位パイプライン160および165内では、命令処理は、命令を追跡すること、命令を実行すること、命令の結果を記録することなどを含み得る。
下位パイプライン160および165は、算術論理演算ユニット、浮動小数点ユニット、格納ユニット、ロードユニットなどの様々な実行ユニット(EU)130を含み得る。例えば、EU130は、整数加算、整数減算、整数乗算、ビット単位の論理演算(例えばAND,NOT,OR,XOR)、ビットシフトなどの、広範囲の演算機能を実行するための論理演算ユニットを持ち得る。あるいは、EU130は、浮動小数点比較、浮動小数点コピーなどの浮動小数点処理を行なうための実行ユニットを持ち得る。プロセッサ100の効率を増加させるために、下位パイプライン160および165は、特定の機能を実行するために組織され得る。例えば、下位パイプライン160は、整数命令を実行するEU130を含み得るし、それと同時に、下位パイプライン165は、浮動小数点命令を実行するEU130を含み得る。特定の命令の機能性を別々の下位パイプライン160または165に分離することによって、重複したEU130は必要とされないかもしれない。ここに示されるような本発明の概念は、2つまたはそれ以上の下位パイプラインを備えたプロセッサに適用され得る。
下位パイプライン160および165内では、条件コードレジスタが、プロセッサによって決定される、最も最近のコードの軌跡を保持し得る。プロセッサ100は、これらの条件コードレジスタに関連したインジケータを更新することにより、これらの条件コードレジスタのうちのいくつかのステータスを追跡する。条件コードレジスタのみならずインジケータも、図2−5の論考の中でさらに記載される。
当業者が理解し得るように、パイプラインステージは、命令を保持するように設計されたレジスタまたはレジスタのグループから構成され得る。命令が特別のステージに入る場合、プロセッサは、そのステージに関連づけられたレジスタまたはレジスタのグループにその命令をロードする。それぞれのステージ内では、論理回路が、その命令に依存して、ある処理を実行し得る。論理回路が意図した処理を実行した後、その命令は、それから、次に連続するステージに渡される。
図2は、CPU102の上位パイプライン150のより詳細なブロックダイヤグラムを示す。上位パイプライン150は、高速バス104によって命令キャッシュ106に繋がれたフェッチ論理回路202を持つ。フェッチ論理回路202は、また、発行ステージ207に繋がれた解読ステージ205に繋がれた命令フェッチステージ203に繋がれる。解読ステージ205は、また、解読論理回路204に繋がれ、そして、発行ステージ207は、最も最近の条件コードを追跡するインジケータ208と通信する発行論理回路206に繋がれる。図2に示される実施形態では、インジケータ208は、下位パイプライン160または165の内の1つに関連づけられた(例えば、物理的に位置づけられた、または、プロセッサが条件コード値を要求する命令を処理するときにパイプライン内においてプロセッサによって向けられた)条件コードレジスタと関連づけられ得る。インジケータ208は、関連づけられたパイプラインの中の条件コードレジスタが最も最近の条件コード値を含むか否かを示す値を含み得る。最も最近の条件コード値は、上位パイプライン150内においてプロセッサ100が処理する命令として変化し得る。
命令は、命令フェッチステージ203から解読ステージ205および発行ステージ207を通って流れる。発行ステージ207からの命令は、下位パイプライン160および165に送られる。上位パイプライン150内では、フェッチ論理回路202が、決定し、続いて、命令キャッシュ106から命令をフェッチする。命令キャッシュ106では、命令は、キャッシュラインとして知られているセクションにグループ化される。それぞれのキャッシュラインは、複数の命令を含み得る。その結果、命令は、一時にいくつかの命令が命令キャッシュ106からフェッチされて解読され得る。命令がフェッチ論理回路202によってフェッチされた後、その命令は、解読ステージ205に送られる。
解読ステージ205では、命令の正体を断定するために、命令は、解読論理回路204によって解読される。解読論理回路204によって解読ステージ205の期間に取り出され、または、確認された情報は、下位パイプライン160または165のどちらがさらなる処理のために命令を受けるかをプロセッサ100が決定することを可能にする。発行ステージ207、より具体的には、発行論理回路206は、下位パイプライン160または165のいずれが命令を受けるかを決定する。下位パイプライン160は、整数命令を実行するために設計され得るし、それと同時に、下位パイプライン165は、浮動小数点命令を実行するために設計され得る。発行論理回路206は、実行のために適切な下位パイプライン160または165に命令を送る。発行論理回路206が適切な下位パイプライン160または165に命令を送る場合、発行論理回路206は、また、インジケータ208を更新し得る。インジケータ208は、関連づけられたパイプラインの中のローカル条件コードレジスタが特定の命令を実行した後の最も最近の条件コードを含むであろうことを反映するために更新される。
1つの実施形態では、インジケータ208は、命令が発行ステージ207内で処理される場合に、下位パイプライン165の中のローカル条件コードレジスタが最も最近の条件コードを含むかを確認するためにプロセッサ100によって用いられる。最も最近の条件コード値は、条件命令を実行し得るか実行し得ないかを判断するためにプロセッサ100によって用いられる。当業者が理解するように、ARMプロセッサ内の条件コード値は、NZCV状態ビット(N=ネガティブ(Negative),Z=ゼロ(Zero),C=キャリー(Carry),V=オーバーフロー(Overflow))に相当し得る。条件コード値またはNZCVビットは、また、条件フラグと呼ばれ得る。本実施形態では、インジケータ208は、下位パイプライン165の中のローカル条件コードレジスタが最も最近の条件コード値を持ち得ることをインジケータ208の中の”1”が示し得るレジスタに保持された単一の状態ビットである。対応して、インジケータ208の中の”0”は、下位パイプライン165の中のローカル条件コードレジスタが最も最近の条件コード値を含まず、初期設定により下位パイプライン160の中のグローバル条件コードレジスタが最も最近の条件コード値を含み得ることを示し得る。それぞれのパイプラインの中の条件コードレジスタのみならずインジケータ208も、図3−5の論考の中でさらに記載される。
図3は、本発明の1つの実施形態に用いる下位パイプライン160および165のより詳細な図を示す。以前に記載された具体例を用いて、下位パイプライン160は、整数命令を実行し得るし、下位パイプライン165は、浮動小数点命令を実行し得る。下位パイプライン160は、予約ステージ310A、実行ステージ320Aおよびグローバル条件コードレジスタ(GCCR:Global Condition Code Register)330を持つ。GCCR330は、また、この技術内において、CPSR(Central Processing Status Register)と呼ばれ得るし、下位パイプライン160および165の両方に条件コード値を供給し得る。下位パイプライン165は、予約ステージ310B、実行ステージ320B、ローカル条件コードレジスタ(LCCR:Local Condition Code Register)370および浮動小数点条件コードレジスタ(FCCR:Floating Condition Code Register)を持つ。FCCR380は、また、この業界内において、FPSCR(Floating Point Status Control Register)と呼ばれ得る。
命令が発行ステージ207を離れる場合、整数命令は、下位パイプライン160に送られ、浮動小数点命令は、下位パイプライン165に送られる。両方の下位パイプライン160および165の中の予約ステージ310A−310Bおよび実行ステージ320A−320Bは、以下に記載されるような同様な機能を実行し得る。
命令が下位パイプライン160または165に入ると、それらは、まず、予約論理(説明の簡単化のために示されない)によって予約ステージ310A−310Bの中で処理される。もし、命令が、実行のために追加の情報を必要とするならば、その命令は、1つまたはそれ以上のプロセッササイクルのための予約ステージ310A−310Bの中で保持され得る。例えば、条件命令が予約ステージ310Aまたは310Bのいずれかにロードされた場合、プロセッサ100は、条件命令を実行するか否かを判断するために最も最近の条件コード値が必要となり得ると識別し得る。最も最近の条件コード値が取り出されるまで、条件命令は予約ステージ310Aまたは310Bの中に保持される。最も最近の条件コード値が取り出された後、条件命令は、予約ステージ310Aまたは310Bから実行ステージ320Aまたは320Bにディスパッチされる。命令を実行した後、その命令実行による結果は、プロセッサ100によって保持され、ある後続の命令によって用いるためにレジスタファイル(説明の簡単化のために示されない)に書かれる。
GCCR330に保持された条件コード値は、プロセッサ100が正の整数の比較(CMP)、負の整数の比較(CMN)、関連する更新命令を備えた浮動小数点の比較(FCMP)などのようなある命令を実行した後に変化し得る。同様に、LCCR370に保持された条件コード値は、浮動小数点比較命令(FCMP)および関連する浮動小数点更新命令が下位パイプライン165の中で実行された場合に変化し得る。当業者が理解するように、浮動小数点パイプラインの中で実行される1つの典型的な浮動小数点更新命令は、FMSTAT命令である。図3に示された実施形態では、LCCR370は、LCCR370が最も最近の条件コード値を含み、条件付きの浮動小数点命令が関連するパイプライン165の中で実行される場合に、その関連するパイプライン(つまり下位パイプライン165)によって使用され得る。図4および5の論考の中でより詳細に説明されるように、GCCR330は、最終的には同期が取られるであろうし、LCCR370の中に保持保存され得るものと同じ条件コード値を含む。もし、プロセッサ100が他の下位パイプライン(説明の簡単化のために示されない)を持つならば、GCCR330の中に保持される値は、条件命令がこれらの下位パイプラインで実行され、関連するローカル条件コードレジスタが最も最近の条件コード値を含んでいない場合に使用され得る。
従来のプロセッサは、条件命令を処理するためにGCCRの中に保持された条件コード値を用いることをすべてのパイプラインに要求した。これらの従来のプロセッサでは、GCCRは、整数パイプラインのような1つのパイプラインの中に物理的に配置され、その結果、浮動小数点パイプラインのような他のパイプラインの中で実行されるどのような条件命令も、それが実行できる前にGCCRから最も最近の条件コード値を取り出さなければならなかった。その結果、従来のプロセッサは、GCCRが物理的に配置されないパイプラインの中で条件命令を実行する場合、遅延を起し得る。
[0032] 背景背景で記載されたるような潜在的な遅延を軽減するために、1つの実施形態は、その関連する条件付きの浮動小数点命令のためのパイプラインの中の最も最近の条件コード値を供給するためにLCCR370を用いる。LCCR370を用いて、プロセッサ100は、GCCRの更新を待機することと条件付きの浮動小数点命令を実行する前に完了する取り出し機能とを不要にし得る。この実施形態では、プロセッサ100は、LCCR370が最も最近の条件コード値を含んでいるかを確認するためにインジケータ208を用いる。もし、インジケータ208が、LCCR370が最も最近の条件コード値を含むことを示すならば、最も最近の条件コード値は、LCCR370から取り出され、それが下位パイプライン165の中の予約ステージ310にある間に条件付きの浮動小数点命令に送られる。もし、インジケータ208が、LCCR370が最も最近の条件コード値を含まないこと(つまりGCCR330が最も最近の条件コード値を含む)を示すならば、条件付きの浮動小数点命令が実行される場合、GCCR330の中の値が取り出され、続いて、下位パイプライン165の予約ステージ310Bに送られる。
条件付きの浮動小数点命令が発行ステージ207で処理される場合、インジケータ208の中の値はキャプチャされる。1つの実施形態では、インジケータ208の中の値は、下位パイプライン165で処理されるということで条件付きの浮動小数点命令に従う。この実施形態では、条件付きの浮動小数点命令が下位パイプライン165の実行ステージ320Bの中で実行する場合に、LCCR370の中の条件コード値を用いる決定は、プロセッサ100によって下される。別の実施形態では、条件付きの浮動小数点命令が発行ステージ207の中で処理される場合に、プロセッサ100が、インジケータ208の中の値を読み、LCCR370の中に保持された条件コード値を用いるか否かを決定する。
特定の条件付きの浮動小数点命令が発行ステージ207で処理される場合、インジケータ208の中の値は、LCCR370の状態を反映する。従って、プロセッサ100は、命令の下位パイプライン165への入力に先立ってLCCR370が最も最近の条件コード値を含むかを判断する。この決定に基づき、プロセッサ100は、インジケータ208が”1”である場合、LCCR370に保持された値を用いる。もし、条件付きの浮動小数点命令が発行ステージ207で処理された場合に、インジケータが”0”ならば、GCCR330の中の最も最近の条件コード値が取り出され、条件付きの浮動小数点命令が下位パイプライン165で実行される場合に用いられる。
処理能率を増加させるために、プロセッサ100がLCCR370を更新する場合、GCCR330は、最も最近の条件コード値で更新され得る。1つの実施形態では、浮動小数点更新命令(FMSTAT)が実行される場合、プロセッサ100は、LCCD370およびGCCR330の両方を更新する。GCCR330を更新することは、LCCR370が浮動小数点パイプライン内に配置され、GCCR330が別のパイプライン(つまり整数パイプライン)内に配置されるということに起因して、LCCR370を更新することよりも長くかかり得る。GCCRの更新は、また、WAW(write after write)、RAW(read after write)およびWAR(write after read)などのデータ危機(データハザード)を更新が引き起こさないことを保証するためのさらなる処理ステップを必要とし得る。これらのデータ危機は、その値が未解決の条件付きの整数命令を実行するために用いられる前に、更新がGCCR330の値を上書きする場合に存在し得る。GCCR330が最も最近の条件コード値で更新された後、プロセッサ100は、どのような後続の条件命令を実行するためでもGCCR330内の最も最近の条件コード値を用いることができる。
プロセッサ100がGCCR330およびLCCR370の両方を最も最近の条件コード値に更新する1つの方法は、FCCR380を利用することである。FCCR380は、読み出しアクセス可能ではない書き込み専用のレジスタ(つまり、条件コード値はFCCR380から読み出されて条件命令の条件を判断するために使用されるものではないものであり得る)であり得る。FCCR380の中に保持された条件コード値は、LCCR370およびGCCR330を更新するために用いられる。
この実施形態では、浮動小数点比較命令が実行を終了する場合、FCCR380の中の条件コード値が更新される。LCCR370は、浮動小数点更新命令(FMSTAT)が実行された後、FCCR380の中に保持された値で更新される。GCCR330の更新は、FMSTAT命令によって開始されるが、FMSTAT命令が浮動小数点パイプラインの中で実行した後のいくつかのプロセッササイクルまで物理的に更新されないかもしれない。LCCR370からFCCR380を分けることによって、2つのレジスタが互いに独立して動作することを可能にする。独立して動作することは、LCCR370が、GCCR330が物理的に更新されている間に後続の条件付きの浮動小数点命令を処理するために用いられることを可能にする。
図4は、図1のプロセッサによって実行される命令400の典型的なグループを示す。命令400のグループは、浮動小数点パイプライン(つまり下位パイプライン165)の中で実行され得る。命令400のグループは、様々な浮動小数点レジスタの中に保持された浮動小数点値を比較し、最も小さな値を特定する。最も小さな値が決定されると、プロセッサ100は、その最も小さな値に基づいた特定の処置を取り得る。
命令400のグループの中の命令Aは、レジスタF0の中に保持された値を取る浮動小数点比較命令であり、それをレジスタF1の中に保持された値と比較する。命令Aの実行結果は、FCCR380の中の条件コード値を変更し得る。命令Bは、浮動小数点更新命令であり、GCCR330およびFCCR380の中に保持された新しい条件コード値を備えたLCCR370を更新する。命令Cは、特に、F1の中に保持された値がF0未満であった場合にF0の結果をF1にコピーする、条件付きの浮動小数点命令である。命令Dは、レジスタF2の中に保持された値をF1の中に保持された可能な新しい値と比較する、別の浮動小数点比較命令である。命令Dが実行した後、FCCR380の中の条件コード値は変化し得る。命令Eは、GCCR330およびLCCR370が命令Dによって決定された新たな条件コード値に更新する、別の浮動小数点更新命令である。命令Fは、特に、F2の中に保持された値がF0未満であった場合にF2の結果をF0にコピーする、条件付きの浮動小数点命令である。
図5は、それらが発行ステージ207から送られ、下位パイプライン165の中で実行されるとした際の命令400のグループのタイミング図500を示す。タイミング図500では、プロセッササイクル502は、ステージ(発行ステージ207、予約ステージ310Bおよび実行ステージ320)間のY軸に沿って示され、プロセッサ100内のインジケータ208は、X軸506に沿って識別されている。説明の簡単化の目的のために、このタイミング図は、各プロセッササイクル中のプロセッサ100によって処理される1つの命令を示す。しかしながら、プロセッサ100は、1つのプロセッササイクル当たり複数の命令を処理し得る。ここでの教示は、単一の命令発行または複数の命令発行のプロセッサに適用され得る。さらに、インジケータ208の値は、プロセッササイクル1に先立って初期的に”0”である。
図5に示されるように、命令Aは、プロセッササイクル1で発行論理回路206によって発行ステージ207で処理される。命令Aは浮動小数点比較命令であるので、プロセッサ100は、命令Aを浮動小数点パイプライン(この例では下位パイプライン165)に導く。図5に示されるように、インジケータ208は、プロセッササイクル1では”0”である。”0”は、整数パイプラインの中のGCCR330が最も最近の条件コード値を含むことを示し、また、初期設定により、LCCR370は最も最近の条件コード値を含んでいない。インジケータ208は、比較命令のような整数命令が整数パイプライン(下位パイプライン160)で実行される場合は常に”0”に設定され、そして、その結果、GCCR330は、最も最近の条件コードレジスタを含む。
プロセッササイクル2では、命令Aは予約ステージ310Bの中で処理され、命令Bは発行ステージ207で処理される。命令Aは、予約ステージ310Bの中に命令Aを維持する条件には直面せず、そして、その結果、命令Aは、次のプロセッササイクル中に実行ステージ320Bにディスパッチされる。命令Bが発行ステージ207で処理されている間に、発行論理回路206は、命令Bが浮動小数点更新命令であると断定する。その結果、発行論理回路206は、命令Bが実行する時、命令BがLCCR370を最も最近の条件コード値で更新するであろうことを反映するためにプロセッササイクル2中のインジケータ208を変更する。インジケータ208の新たな値は、命令Bが実行すればLCCR370が最も最近の条件コード値を持つであろうことを示す”1”である。
命令Bは浮動小数点更新命令(FMSTAT)であるので、命令Bは、発行論理回路206によって複製され得るし、この複製の命令は、整数パイプライン(下位パイプライン160)に送られる。複製の命令は、また、整数パイプライン内では実行されないが、その代わりにFCCR380からGCCR330への更新を調整するためのマーカとして用いられるシャドー(shadow)命令として参照される。複製の命令は、GCCR330の更新が追加の行動および浮動小数点パイプライン(下位パイプライン165)と整数パイプライン(下位パイプライン160)との間の調整を要求し得るという理由で必要とされ得る。シャドー(shadow)命令Bが整数パイプライン(下位パイプライン160)の実行ステージ320Aにある場合、FCCR380の値が読まれ、GCCR330の更新が行われる。説明の簡単化のために、整数パイプラインを経る命令Bの進行は示されない。
プロセッササイクル3では、実行ステージ320Bの中にいる状態で命令Aは実行し、命令Bは予約ステージ310Bの中で処理され、そして、命令C発行ステージ207の中で処理される。命令Aが実行を終了した後、プロセッサ100は、FCCRを新たな条件コード値で更新する。命令Bは引き止め(stalling)条件には直面しないので、命令Bは、プロセッササイクル3の終わりに実行ステージ320Bにディスパッチされる。命令Cは、プロセッササイクル3中に、発行ステージ207の発行論理回路206によって処理される。発行論理回路206は、命令Cが最も最近の条件コード値を要求する条件付きの浮動小数点命令であると認定する。プロセッサ100は、インジケータ208にアクセスし、インジケータ208が”1”であり、従って、命令Bが実行した後、LCCR370が最も最近の条件コード値を含むであろうと断定する。命令Cは、実行のために、浮動小数点パイプライン(下位パイプライン165)に送られる。
プロセッササイクル4では、命令Dが発行論理回路206によって発行ステージ207で処理され、命令Cは予約ステージ310Bに入り、命令Bは実行ステージ320Bの中で実行される。命令Dは浮動小数点比較命令であるので、それはプロセッササイクル4の終わりに浮動小数点パイプライン(下位パイプライン165)に送られる。命令Cは、1つのプロセッササイクル用の予約ステージ310Bの中で処理される。インジケータ208の値は、命令Cが実行する時、LCCR370が最も最近の条件コード値を持つであろうと認識される。最も最近の条件コード値は命令Bが実行すれば(プロセッササイクル4の終わり)利用可能であるので、命令Cは、1つのプロセッササイクル用の予約ステージ310Bの中で止まるであろう。条件コード値が利用可能になるとき、それは、予約ステージ310の中の状態の命令Cに送られ、命令Cは、次のプロセッササイクル(プロセッササイクル5)の初めの実行ステージ320Bに放たれる。
命令Bがプロセッササイクル4で実行するとき、FCCR380は、更新された条件コード値をLCCR370に書き込む。プロセッサ100は、GCCR330を更新するためにFCCR380の中の条件コード値を整数パイプラインに送る前に、シャドー(shadow)命令Bが整数パイプライン(下位パイプライン160)の中の実行ステージ320Aに達するのを待つ。前述のように、この更新は、LCCR370が更新された後、いくつかのプロセッササイクルまで生じないことがあり得る。
プロセッササイクル5では、命令Eは、それが発行ステージ207にある間に発行論理回路206によって処理される。発行論理回路206は、命令Eが実行した後、LCCR370が最も最近の条件コード値を含むであろうことを示すためにインジケータ208を更新する。ここで説明する例では、介入する整数比較命令がなかったので、インジケータ208の値は同じままである。命令Eは浮動小数点更新命令(FMSTAT)であるので、命令Eは、発行論理回路206によって複製され得るし、この複製の命令は、命令Bと同様に、整数パイプラインに送られ得る。前述のように、複製の命令は、整数パイプラインによって実行されないが、シャドー(shadow)命令Eが整数パイプラインの中の実行ステージ320Aに達したときに、FCCR380からGCCR330への更新を調整するためのマーカとして用いられる”シャドー(shadow)”命令である。プロセッササイクル5中において、命令Cは、命令Dが予約ステージ310Bにロードされている一方で、実行ステージ320Bにディスパッチされる。命令Dは、それを予約ステージ310B中に止まらせ、次のプロセッササイクル中の実行ステージ320Bにディスパッチするであろう条件と直面しない。
プロセッササイクル6では、命令Dは、実行ステージ320Bにディスパッチされる。命令Dが実行した後、FCCR380は、命令Dによって決定されたとして新たな条件コード値に更新され得る。また、プロセッササイクル6では、命令Eは予約ステージ310Bに入り、命令Fは発行論理回路206によって発行ステージ207で処理される。命令Fは条件付きの浮動小数点命令であるので、実行するために最も最近の条件コード値を必要とする。インジケータ208の値によって認識されて、最も最近の条件コード値は、命令Fが実行するとき、LCCR370に含まれるであろう。この例では、最も最近の条件コード値は、命令Eが実行した後(プロセッササイクル7の終わり)、LCCR370の中で変わり得る。
命令Eがプロセッササイクル7で実行するとき、FCCR380は、更新された条件コード値をLCCR370に書き込む。プロセッサ100は、FCCR380の値を整数パイプラインの中のGCCR330に送る前に、シャドー(shadow)命令Eが整数パイプラインの中の実行ステージ320Aに達するのを待つ。前述のように、このGCCR330の更新は、LCCR370が更新された後、いくつかのプロセッササイクルまで生じないことがあり得る。
最も最近の条件コード値は、命令Eが実行して(プロセッササイクル7の終わり)、LCCR370が更新されれば、命令Fによって利用可能である。その結果、命令Fは、1つのプロセッササイクル用の予約ステージ310Bの中で止まるであろう。プロセッササイクル8では、命令Fは、実行ステージ320にロードされて実行される。
もし、命令400の同一グループが、LCCR370のない浮動小数点パイプラインの中で実行されれば、プロセッサ100は、条件付きの浮動小数点命令が実行される毎に、GCCRの中の条件コード値を取り出さなければならないだろう。前述したように、GCCR330の更新は、命令Bが浮動小数点パイプライン(下位パイプライン165)の中で実行した後に更新することをいくつかの追加的なプロセッササイクルに要求し得る。シャドー(shadow)命令Bは、リソースハザードに直面し、命令Cの実行の中の遅れとその次の命令Fとを合成したいくつかのプロセッササイクルについて整数パイプラインの中の予約ステージ310の中で止まり得る。命令CおよびFは、最も最近の条件コード値が、まず、GCCR330に書き込まれ、それから、GCCR330から取り出されるまで、浮動小数点パイプライン(下位パイプライン165)の中の予約ステージ310Bの中で止まるであろう。LCCR370の利用によって、命令CおよびFのような条件付きの浮動小数点命令は、GCCR330から最も最近の条件コードを検索することにより引き起こされる遅れに悩むことなく、従って、命令の実行を加速し、プロセッサ100の効率を増加させて、実行し得る。
図6は、本発明の1つの実施形態によって実行される方法600を示すフローチャートである。命令が発行ステージ207に入るとき、方法600は開始ブロック602で始まる。ブロック604では、プロセッサ100は、命令を処理するために発行論理回路206を用いる。ブロック604で命令を処理した後、方法600は、判定ブロック606に移る。
判定ブロック606では、プロセッサ100は、命令が条件命令かどうかを判断する。命令が条件命令である場合、最も最近の条件コード値が、条件命令を実行するために必要であり、方法600は判定ブロック608進む。命令が条件命令でない場合、方法600はブロック616に進む。判定ブロック608では、プロセッサ100は、命令が条件付きの整数命令かを判断する。命令が条件付きの整数命令である場合、方法600は、ブロック614に進み、GCCR330に保持された条件コード値が取り出される。条件命令が条件命令でない場合(つまりそれは浮動小数点命令である)、方法600は、判定ブロック608から判定ブロック610に進む。
判定ブロック610では、プロセッサ100は、インジケータ208が”1”かを判断する。インジケータ208が”1”である場合、条件命令が発行ステージ207で処理されたとき、LCCR370は最も最近の条件コード値を含む。その結果、方法600はブロック612を続ける。ブロック612では、プロセッサ100は、LCCR370に保持された条件コード値を取り出し、その条件命令が実行されるべきか否かを判定するために、取り出した条件コード値を使用する。ブロック612からは、方法はブロック624で終了する。
判定ブロック610において、プロセッサ100が、インジケータ208は”1”ではない(つまり、それは”0”である)と断定した場合、初期設定により、最も最近の条件コード値はGCCR330の中にある。プロセッサ100は、条件命令が発行ステージ207中に処理されるとき、インジケータ208の値は”0”であると認識する。インジケータが”1”でない場合、方法600はブロック614に進む。ブロック614は、プロセッサ100はGCCR330から最も最近の条件コード値を取り出し、その取り出された条件コード値は、その条件命令が実行されるべきかどうか判断するために使用される。ブロック614からは、方法600はブロック624で終了する。
判定ブロック616では、プロセッサ100は、発行論理回路206によって発行ステージで処理された命令が条件コード(CC)値を変更するかを判断する。前述のように、FMSTAT命令に加え、整数比較命令および浮動小数点比較命令は、条件コード値を変更し得る命令のちょうど2つの例である。命令が条件コード値を変更する場合、方法600は判定ブロック618を続ける。命令が条件コード値を変更しない場合、方法600はブロック624で終了する。
判定ブロック618では、プロセッサ100は、ローカル条件コードレジスタ(LCCR)370の中の条件コード値が変更されるかを判断する。前述の説明例を参照し直すと、FMSTAT命令は、LCCR370の中の条件コード値を変更する。それに対して、整数比較命令は、GCCR330の中の条件コード値を変更し、LCCR370の中の条件コード値は変更しない。命令が整数比較命令である場合、方法600は、ブロック620に進み、”0”がインジケータ208に書かれる。あるいは、判定ブロック618において、プロセッサ100が、命令はFMSTAT命令であると断定した場合、方法600はブロック622に進む。ブロック622では、プロセッサ100は、FMSTAT命令が実行するとき、LCCR370が最も最近の条件コード値を含むことを示すために、インジケータ208に”1”を書き込む。ブロック620および622からは、方法600はブロック624で終了する。
ここで開示した本実施形態に関連して示された様々な例示的論理ブロック、モジュール、回路、要素、および/または部品は、汎用プロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールド・プログラマブル・ゲート・アレイ(FPGA)あるいはその他のプログラマブル論理デバイス、ディスクリート・ゲートあるいはトランジスタ・ロジック、ディスクリート・ハードウェア部品、又はここで開示した機能を実行するために設計された上記何れかの組み合わせを用いて実現又は実行され得る。汎用プロセッサとしてマイクロプロセッサを用いることが可能であるが、代わりに、従来技術によるプロセッサ、コントローラ、マイクロコントローラ、又は状態機器を用いることも可能である。プロセッサは、例えばDSPとマイクロプロセッサとの組み合わせ、複数のマイクロプロセッサ、DSPコアに接続された1つ又は複数のマイクロプロセッサ、又はこのような任意の構成である計算部品の組み合わせとして実現することも可能である。
特定の実施形態がここで図解され記述されたが、当業者は、同じ目的を達成するために計算されたどの処置もこの特定の実施形態を代用し得るし、この発明が他の環境において他の応用を持つことを理解する。この応用は、どのような順応または本発明の変化もカバーするように意図される。続く請求項は、発明の範囲をここで記述された特定の実施形態に制限するように意図するものでは全くない。
以下に、本願出願の当初の特許請求の範囲に記載された発明を付記する。
[1]複数のパイプラインを持つパイプラインプロセッサであって、第1のパイプラインに関連づけられた第1の条件コードレジスタと第2のパイプラインに関連づけられた第2の条件コードレジスタとを持つパイプラインプロセッサで条件命令を実行する方法において、
最も最近の条件コード値を前記第1の条件コードレジスタまたは前記第2の条件コードレジスタのいずれかに記録すること、
前記第2の条件コードレジスタが前記最も最近の条件コード値を持つか否かを示すインジケータを設定すること、
前記インジケータに基づき、前記第1または第2の条件コードレジスタのいずれかから前記最も最近の条件コード値を取り出すこと、
前記取り出された最も最近の条件コード値に応じて前記条件命令が実行されるべきか否かを判定すること、
を具備する方法。
[2]前記第1のパイプラインは、整数命令を実行する[1]の方法。
[3]前記第2のパイプラインは、浮動小数点命令を実行する[1]の方法。
[4]前記第1の条件コードレジスタは、グローバル条件コードレジスタである[1]の方法。
[5]前記第2の条件コードレジスタは、ローカル条件コードレジスタである[1]の方法。
[6]前記条件コード値は、ネガティブ(Negative),ゼロ(Zero),キャリー(Carry)およびオーバーフロー(Overflow)の状態ビットを含む[1]の方法。
[7]前記インジケータは、単一の状態ビットである[1]の方法。
[8]複数のパイプラインを持つパイプラインプロセッサであって、第1のパイプラインに関連づけられた第1の条件コードレジスタと第2のパイプラインに関連づけられた第2の条件コードレジスタとを持つパイプラインプロセッサで条件命令を実行する方法において、
最も最近の条件コード値を前記第1の条件コードレジスタまたは前記第2の条件コードレジスタのいずれかに記録すること、
前記プロセッサ内の発行ステージで処理されるときに条件コードを設定する命令に応じて前記第2の条件コードレジスタが前記最も最近の条件コード値を持つかを示すインジケータを設定すること、
前記インジケータに基づき、前記第1または第2の条件コードレジスタのいずれかから前記最も最近の条件コード値を取り出すこと、
前記取り出された最も最近の条件コード値に応じて前記条件命令が実行されるべきか否かを判定すること、
を具備する方法。
[9]前記第1のパイプラインは、整数命令を実行する[8]の方法。
[10]前記第2のパイプラインは、浮動小数点命令を実行する[8]の方法。
[11]前記第1の条件コードレジスタは、グローバル条件コードレジスタである[8]の方法。
[12]前記第2の条件コードレジスタは、ローカル条件コードレジスタである[8]の方法。
[13]前記条件コード値は、NZCV(ネガティブ(Negative),ゼロ(Zero),キャリー(Carry),オーバーフロー(Overflow))状態ビットを含む[8]の方法。
[14]前記インジケータは、単一の状態ビットである[8]の方法。
[15]パイプラインプロセッサにおいて、
命令を実行するための複数のパイプラインと、
最も最近の条件コードを受け入れるように構成された、第1のパイプラインに関連づけられた第1の条件コードレジスタと、
最も最近の条件コードを受け入れるように構成された、第2のパイプラインに関連づけられた第2の条件コードレジスタと、
前記第2の条件コードレジスタが前記最も最近の条件コード値を含むか否かを示すように構成されたインジケータと、
を具備し、
前記プロセッサは、前記インジケータに基づき、前記最も最近の条件コード値を取り出し、前記取り出された最も最近の条件コード値に応じて条件命令を実行するか否かを判定するように構成された、
パイプラインプロセッサ。
[16]前記第2のパイプラインは、浮動小数点命令を実行する[15]のパイプラインプロセッサ。
[17]前記第1の条件コードレジスタは、グローバル条件コードレジスタである[15]のパイプラインプロセッサ。
[18]前記第2の条件コードレジスタは、ローカル条件コードレジスタである[15]のパイプラインプロセッサ。
[19]前記条件コード値は、NZCV(ネガティブ(Negative),ゼロ(Zero),キャリー(Carry),オーバーフロー(Overflow))状態ビットを含む[15]のパイプラインプロセッサ。
[20]前記インジケータは、単一の状態ビットである[15]のパイプラインプロセッサ。

Claims (24)

  1. 複数のパイプラインを持つパイプラインプロセッサであって、第1のパイプラインに関連づけられた第1の条件コードレジスタと第2のパイプラインに関連づけられた第2の条件コードレジスタとを持つパイプラインプロセッサで条件命令を実行する方法において、
    最も最近の条件コード値が前記第2の条件コードレジスタに記録されるべきときに、前記最も最近の条件コード値を前記第1の条件コードレジスタに記録し、および、前記最も最近の条件コード値を前記第2の条件コードレジスタに記録すること、
    処理されるときに前記最も最近の条件コード値を設定する命令に応じて第1の値または第2の値を持つ条件コードインジケータを設定すること、ここで、前記条件コードインジケータの前記第1の値は前記第2の条件コードレジスタが前記最も最近の条件コード値を持つことを示し、前記条件コードインジケータの前記第2の値は前記第2の条件コードレジスタが前記最も最近の条件コード値とは異なる条件コード値を持つことを示す、
    前記条件コードインジケータに基づき、前記第1の条件コードレジスタまたは前記第2の条件コードレジスタの1つから前記最も最近の条件コード値を取り出すこと、
    前記取り出された最も最近の条件コード値に応じて前記条件命令が実行されるべきか否かを判定すること、
    を具備する方法。
  2. 前記第1の条件コードレジスタは、グローバルレジスタであり、前記第2の条件コードレジスタは、前記第2のパイプラインに局部的なローカルレジスタであり、前記グローバルレジスタおよび前記ローカルレジスタが前記最も最近の条件コード値を持ち、前記条件コードインジケータが前記ローカルレジスタが前記最も最近の条件コード値を持つことを示す前記第1の値を持つとき、
    前記第1のパイプラインによって用いられるために、前記グローバルレジスタの更新無しに、前記グローバルレジスタから前記最も最近の条件コード値が取り出され、
    前記第2のパイプラインによって用いられるために、前記ローカルレジスタから前記最も最近の条件コード値が取り出される
    請求項1記載の方法。
  3. 前記第2のパイプラインは、浮動小数点命令を実行し、浮動小数点更新命令の実行に応じて前記第1の条件コードレジスタおよび前記第2の条件コードレジスタに前記最も最近の条件コード値が自動的に記録される請求項1記載の方法。
  4. 前記第1の条件コードレジスタは、グローバル条件コードレジスタである請求項1記載の方法。
  5. 前記第2の条件コードレジスタは、ローカル条件コードレジスタである請求項1記載の方法。
  6. 前記第1の条件コードレジスタは、ネガティブ(Negative),ゼロ(Zero),キャリー(Carry)およびオーバーフロー(Overflow)の状態ビットの第1のセットを含み、前記第2の条件コードレジスタは、ネガティブ,ゼロ,キャリーおよびオーバーフローの状態ビットの第2のセットを含む請求項1記載の方法。
  7. 前記条件コードインジケータは、単一の状態ビットである請求項1の記載の方法。
  8. 発行ステージが発行論理回路を介して前記条件コードインジケータを設定する請求項1記載の方法。
  9. 前記発行論理回路は、実行ユニットによって実行される複数の下位パイプラインの1つに前記発行ステージから解読された命令を送るように構成される請求項8記載の方法。
  10. 発行ステージが前記パイプラインプロセッサの解読ステージから解読された命令を受け取るように構成される請求項1記載の方法。
  11. パイプラインプロセッサにおいて、
    命令を実行する複数のパイプラインと、
    第1のパイプラインに関連づけられた第1の条件コードレジスタと、
    第2のパイプラインに関連づけられた第2の条件コードレジスタと、
    前記第2のパイプラインの実行ステージ論理回路から条件コード値を受け取るように構成される第3の条件コードレジスタと、ここで、前記第1の条件コードレジスタおよび前記第2の条件コードレジスタは前記第3の条件コードレジスタからの条件コード値で更新される、
    前記第2の条件コードレジスタが最も最近の条件コード値を含むか否かを示すように構成される条件コードインジケータと、ここで、前記パイプラインプロセッサは、浮動小数点更新命令が実行されるときに前記第1の条件コードレジスタの前記最も最近の条件コード値および前記第2の条件コードレジスタの前記最も最近の条件コード値を更新するように構成され、および、前記パイプラインプロセッサは、前記条件コードインジケータに基づいて前記第1の条件コードレジスタおよび前記第2の条件コードレジスタの1つから前記最も最近の条件コード値を取り出し、前記取り出された最も最近の条件コード値に応じて条件命令を実行するか否かを判定するように構成される、
    を具備するパイプラインプロセッサ。
  12. 前記第2のパイプラインは、浮動小数点命令を実行する請求項11記載のパイプラインプロセッサ。
  13. 前記第1の条件コードレジスタは、グローバル条件コードレジスタである請求項11記載のパイプラインプロセッサ。
  14. 前記第2の条件コードレジスタは、ローカル条件コードレジスタである請求項11記載のパイプラインプロセッサ。
  15. 前記第1のパイプラインは、前記条件コードインジケータから独立した前記第1の条件コードレジスタから前記最も最近の条件コード値を取り出すように構成される請求項11記載のパイプラインプロセッサ。
  16. 前記第3の条件コードレジスタは、前記最も最近の条件コード値を変更する命令を実行する前記第2のパイプラインに応じて更新される請求項11記載のパイプラインプロセッサ。
  17. パイプラインプロセッサにおいて、
    最も最近の条件コード値が第2の条件コードレジスタに記録されるべきときに前記最も最近の条件コード値を第1の条件コードレジスタおよび前記第2の条件コードレジスタに記録する手段と、
    処理されるときに前記最も最近の条件コード値を設定する命令に応じて条件コードインジケータを設定する手段と、ここで、前記条件コードインジケータの第1の値は前記第2の条件コードレジスタが前記最も最近の条件コード値を持つことを示し、前記条件コードインジケータの第2の値は前記第2の条件コードレジスタが前記最も最近の条件コード値とは異なる条件コード値を持つことを示す、
    前記条件コードインジケータに基づき、前記第1の条件コードレジスタまたは前記第2の条件コードレジスタの1つから前記最も最近の条件コード値を取り出す手段と、
    前記取り出された最も最近の条件コード値に応じて条件命令が実行されるべきか否かを判定する手段と、
    を具備するパイプラインプロセッサ。
  18. 整数命令を実行するパイプライン手段をさらに具備する請求項17記載のパイプラインプロセッサ。
  19. 浮動小数点命令を実行するパイプライン手段をさらに具備する請求項17記載のパイプラインプロセッサ。
  20. 前記第1の条件コードレジスタは、グローバル条件コードレジスタである請求項17記載のパイプラインプロセッサ。
  21. 前記第2の条件コードレジスタは、ローカル条件コードレジスタである請求項17記載のパイプラインプロセッサ。
  22. 前記最も最近の条件コード値は、ネガティブ,ゼロ,キャリーおよびオーバーフローの状態ビットを含む請求項17記載のパイプラインプロセッサ。
  23. プロセッサによって実行されたときに、前記プロセッサに、
    最も最近の条件コード値が第2の条件コードレジスタに記録されるべきときに、前記最も最近の条件コード値を第1の条件コードレジスタに記録させ、および、前記最も最近の条件コード値を前記第2の条件コードレジスタに記録させ、ここで、前記第1の条件コードレジスタは第1のパイプラインに関連づけられ、前記第2の条件コードレジスタは第2のパイプラインに関連づけられている、
    前記最も最近の条件コード値を設定する命令に応じて第1の値または第2の値を持つ条件コードインジケータを設定させ、ここで、前記条件コードインジケータの前記第1の値は前記第2の条件コードレジスタが前記最も最近の条件コード値を持つことを示し、前記条件コードインジケータの前記第2の値は前記第2の条件コードレジスタが前記最も最近の条件コード値とは異なる条件コード値を持つことを示す、
    前記条件コードインジケータに基づき、前記第1の条件コードレジスタまたは前記第2の条件コードレジスタの1つから前記最も最近の条件コード値を取り出させ、
    前記取り出された最も最近の条件コード値に応じて条件命令が実行されるべきか否かを判定させる、
    プログラムコードを含む不揮発性のコンピュータ読み取り可能な記録媒体。
  24. 前記第2のパイプラインは、浮動小数点命令を実行するように構成され、前記最も最近の条件コード値は、前記第2のパイプラインによる浮動小数点更新命令の実行に応じて前記第1の条件コードレジスタおよび前記第2の条件コードレジスタに自動的に記録される請求項23記載の不揮発性のコンピュータ読み取り可能な記録媒体。
JP2010507584A 2007-05-03 2008-05-05 システムおよびパイプラインプロセッサにおける条件命令実行の加速のためのローカル条件コードレジスタの使用方法 Expired - Fee Related JP5431308B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US11/743,698 2007-05-03
US11/743,698 US8555039B2 (en) 2007-05-03 2007-05-03 System and method for using a local condition code register for accelerating conditional instruction execution in a pipeline processor
PCT/US2008/062652 WO2008137842A1 (en) 2007-05-03 2008-05-05 A system and method for using a local condition code register for accelerating conditional instruction execution in a pipeline processor

Publications (2)

Publication Number Publication Date
JP2010526392A JP2010526392A (ja) 2010-07-29
JP5431308B2 true JP5431308B2 (ja) 2014-03-05

Family

ID=39529441

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010507584A Expired - Fee Related JP5431308B2 (ja) 2007-05-03 2008-05-05 システムおよびパイプラインプロセッサにおける条件命令実行の加速のためのローカル条件コードレジスタの使用方法

Country Status (6)

Country Link
US (1) US8555039B2 (ja)
EP (1) EP2153316A1 (ja)
JP (1) JP5431308B2 (ja)
KR (1) KR101148495B1 (ja)
CN (1) CN101681259B (ja)
WO (1) WO2008137842A1 (ja)

Families Citing this family (60)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2011018B1 (en) 2006-04-12 2016-07-13 Soft Machines, Inc. Apparatus and method for processing an instruction matrix specifying parallel and dependent operations
EP2122461A4 (en) 2006-11-14 2010-03-24 Soft Machines Inc DEVICE AND METHOD FOR PROCESSING COMMUNICATIONS IN A MULTITHREAD ARCHITECTURE WITH CONTEXT CHANGES
CN103250131B (zh) 2010-09-17 2015-12-16 索夫特机械公司 包括用于早期远分支预测的影子缓存的单周期多分支预测
US9274793B2 (en) 2011-03-25 2016-03-01 Soft Machines, Inc. Memory fragments for supporting code block execution by using virtual cores instantiated by partitionable engines
CN103562866B (zh) 2011-03-25 2018-03-30 英特尔公司 用于通过使用由可分割引擎实例化的虚拟核来支持代码块执行的寄存器文件段
US9766893B2 (en) 2011-03-25 2017-09-19 Intel Corporation Executing instruction sequence code blocks by using virtual cores instantiated by partitionable engines
US9032189B2 (en) 2011-04-07 2015-05-12 Via Technologies, Inc. Efficient conditional ALU instruction in read-port limited register file microprocessor
EP2624126B1 (en) * 2011-04-07 2016-11-02 VIA Technologies, Inc. Efficient conditional ALU instruction in read-port limited register file microprocessor
US9043580B2 (en) 2011-04-07 2015-05-26 Via Technologies, Inc. Accessing model specific registers (MSR) with different sets of distinct microinstructions for instructions of different instruction set architecture (ISA)
US9898291B2 (en) 2011-04-07 2018-02-20 Via Technologies, Inc. Microprocessor with arm and X86 instruction length decoders
US9378019B2 (en) 2011-04-07 2016-06-28 Via Technologies, Inc. Conditional load instructions in an out-of-order execution microprocessor
US9336180B2 (en) 2011-04-07 2016-05-10 Via Technologies, Inc. Microprocessor that makes 64-bit general purpose registers available in MSR address space while operating in non-64-bit mode
US9645822B2 (en) 2011-04-07 2017-05-09 Via Technologies, Inc Conditional store instructions in an out-of-order execution microprocessor
US9128701B2 (en) 2011-04-07 2015-09-08 Via Technologies, Inc. Generating constant for microinstructions from modified immediate field during instruction translation
US9146742B2 (en) 2011-04-07 2015-09-29 Via Technologies, Inc. Heterogeneous ISA microprocessor that preserves non-ISA-specific configuration state when reset to different ISA
US9317288B2 (en) 2011-04-07 2016-04-19 Via Technologies, Inc. Multi-core microprocessor that performs x86 ISA and ARM ISA machine language program instructions by hardware translation into microinstructions executed by common execution pipeline
US8880851B2 (en) 2011-04-07 2014-11-04 Via Technologies, Inc. Microprocessor that performs X86 ISA and arm ISA machine language program instructions by hardware translation into microinstructions executed by common execution pipeline
US8924695B2 (en) 2011-04-07 2014-12-30 Via Technologies, Inc. Conditional ALU instruction condition satisfaction propagation between microinstructions in read-port limited register file microprocessor
US8880857B2 (en) 2011-04-07 2014-11-04 Via Technologies, Inc. Conditional ALU instruction pre-shift-generated carry flag propagation between microinstructions in read-port limited register file microprocessor
US9141389B2 (en) 2011-04-07 2015-09-22 Via Technologies, Inc. Heterogeneous ISA microprocessor with shared hardware ISA registers
US9176733B2 (en) 2011-04-07 2015-11-03 Via Technologies, Inc. Load multiple and store multiple instructions in a microprocessor that emulates banked registers
US9292470B2 (en) 2011-04-07 2016-03-22 Via Technologies, Inc. Microprocessor that enables ARM ISA program to access 64-bit general purpose registers written by x86 ISA program
US9274795B2 (en) 2011-04-07 2016-03-01 Via Technologies, Inc. Conditional non-branch instruction prediction
US9244686B2 (en) 2011-04-07 2016-01-26 Via Technologies, Inc. Microprocessor that translates conditional load/store instructions into variable number of microinstructions
KR101639853B1 (ko) 2011-05-20 2016-07-14 소프트 머신즈, 인크. 복수의 엔진에 의해 명령어 시퀀스들의 실행을 지원하기 위한 자원들 및 상호접속 구조들의 비집중 할당
TWI548994B (zh) 2011-05-20 2016-09-11 軟體機器公司 以複數個引擎支援指令序列的執行之互連結構
US10191746B2 (en) 2011-11-22 2019-01-29 Intel Corporation Accelerated code optimizer for a multiengine microprocessor
EP2783281B1 (en) 2011-11-22 2020-05-13 Intel Corporation A microprocessor accelerated code optimizer
WO2013077872A1 (en) * 2011-11-22 2013-05-30 Soft Machines, Inc. A microprocessor accelerated code optimizer and dependency reordering method
WO2014150806A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for populating register view data structure by using register template snapshots
WO2014151043A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for emulating a guest centralized flag architecture by using a native distributed flag architecture
WO2014150991A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for implementing a reduced size register view data structure in a microprocessor
US9904625B2 (en) 2013-03-15 2018-02-27 Intel Corporation Methods, systems and apparatus for predicting the way of a set associative cache
US10140138B2 (en) 2013-03-15 2018-11-27 Intel Corporation Methods, systems and apparatus for supporting wide and efficient front-end operation with guest-architecture emulation
US10275255B2 (en) 2013-03-15 2019-04-30 Intel Corporation Method for dependency broadcasting through a source organized source view data structure
US9886279B2 (en) 2013-03-15 2018-02-06 Intel Corporation Method for populating and instruction view data structure by using register template snapshots
US9891924B2 (en) 2013-03-15 2018-02-13 Intel Corporation Method for implementing a reduced size register view data structure in a microprocessor
WO2014150971A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for dependency broadcasting through a block organized source view data structure
US9569216B2 (en) 2013-03-15 2017-02-14 Soft Machines, Inc. Method for populating a source view data structure by using register template snapshots
US9811342B2 (en) 2013-03-15 2017-11-07 Intel Corporation Method for performing dual dispatch of blocks and half blocks
EP2972845B1 (en) 2013-03-15 2021-07-07 Intel Corporation A method for executing multithreaded instructions grouped onto blocks
US9665372B2 (en) 2014-05-12 2017-05-30 International Business Machines Corporation Parallel slice processor with dynamic instruction stream mapping
US9672043B2 (en) 2014-05-12 2017-06-06 International Business Machines Corporation Processing of multiple instruction streams in a parallel slice processor
US9760375B2 (en) * 2014-09-09 2017-09-12 International Business Machines Corporation Register files for storing data operated on by instructions of multiple widths
US9720696B2 (en) 2014-09-30 2017-08-01 International Business Machines Corporation Independent mapping of threads
US9977678B2 (en) 2015-01-12 2018-05-22 International Business Machines Corporation Reconfigurable parallel execution and load-store slice processor
US10133581B2 (en) 2015-01-13 2018-11-20 International Business Machines Corporation Linkable issue queue parallel execution slice for a processor
US10133576B2 (en) 2015-01-13 2018-11-20 International Business Machines Corporation Parallel slice processor having a recirculating load-store queue for fast deallocation of issue queue entries
US9983875B2 (en) 2016-03-04 2018-05-29 International Business Machines Corporation Operation of a multi-slice processor preventing early dependent instruction wakeup
US10037211B2 (en) 2016-03-22 2018-07-31 International Business Machines Corporation Operation of a multi-slice processor with an expanded merge fetching queue
US10346174B2 (en) 2016-03-24 2019-07-09 International Business Machines Corporation Operation of a multi-slice processor with dynamic canceling of partial loads
US10761854B2 (en) 2016-04-19 2020-09-01 International Business Machines Corporation Preventing hazard flushes in an instruction sequencing unit of a multi-slice processor
US10037229B2 (en) 2016-05-11 2018-07-31 International Business Machines Corporation Operation of a multi-slice processor implementing a load/store unit maintaining rejected instructions
US9934033B2 (en) 2016-06-13 2018-04-03 International Business Machines Corporation Operation of a multi-slice processor implementing simultaneous two-target loads and stores
US10042647B2 (en) 2016-06-27 2018-08-07 International Business Machines Corporation Managing a divided load reorder queue
US10318419B2 (en) 2016-08-08 2019-06-11 International Business Machines Corporation Flush avoidance in a load store unit
GB2572665B (en) * 2018-04-05 2020-07-08 Imagination Tech Ltd Verification of hardware design for data transformation pipeline
US11487506B2 (en) 2019-08-09 2022-11-01 International Business Machines Corporation Condition code anticipator for hexadecimal floating point
US11314512B2 (en) 2019-08-09 2022-04-26 International Business Machines Corporation Efficient checking of a condition code anticipator for a floating point processor and/or unit
US11080059B1 (en) 2020-03-30 2021-08-03 Sandisk Technologies Llc Reducing firmware size and increasing firmware performance

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US465785A (en) * 1891-12-22 Brick-truck
JPS6043751A (ja) * 1983-08-18 1985-03-08 Hitachi Ltd 情報処理装置
JPH0643751A (ja) 1992-07-24 1994-02-18 Toshiba Corp 電子写真装置における容器
US5537538A (en) * 1993-12-15 1996-07-16 Silicon Graphics, Inc. Debug mode for a superscalar RISC processor
US6085305A (en) 1997-06-25 2000-07-04 Sun Microsystems, Inc. Apparatus for precise architectural update in an out-of-order processor
US6629235B1 (en) * 2000-05-05 2003-09-30 International Business Machines Corporation Condition code register architecture for supporting multiple execution units
US6697064B1 (en) * 2001-06-08 2004-02-24 Nvidia Corporation System, method and computer program product for matrix tracking during vertex processing in a graphics pipeline
US6981131B2 (en) * 2002-09-04 2005-12-27 Arm Limited Early condition code evaluation at pipeline stages generating pass signals for controlling coprocessor pipeline executing same conditional instruction
KR100628573B1 (ko) * 2004-09-08 2006-09-26 삼성전자주식회사 조건부실행명령어의 비순차적 수행이 가능한 하드웨어장치 및 그 수행방법

Also Published As

Publication number Publication date
US8555039B2 (en) 2013-10-08
WO2008137842A1 (en) 2008-11-13
CN101681259B (zh) 2014-05-14
CN101681259A (zh) 2010-03-24
KR101148495B1 (ko) 2012-05-21
JP2010526392A (ja) 2010-07-29
EP2153316A1 (en) 2010-02-17
KR20100003309A (ko) 2010-01-07
US20080276072A1 (en) 2008-11-06

Similar Documents

Publication Publication Date Title
JP5431308B2 (ja) システムおよびパイプラインプロセッサにおける条件命令実行の加速のためのローカル条件コードレジスタの使用方法
US7793079B2 (en) Method and system for expanding a conditional instruction into a unconditional instruction and a select instruction
US10235219B2 (en) Backward compatibility by algorithm matching, disabling features, or throttling performance
US6115808A (en) Method and apparatus for performing predicate hazard detection
US11403099B2 (en) Backward compatibility by restriction of hardware resources
US20080148282A1 (en) Mechanism and method to track oldest processor event
US6959367B2 (en) System having read-modify-write unit
JP5209933B2 (ja) データ処理装置
JP2002522841A (ja) 異なる待ち時間を伴う命令のスケジューリング
JP2003523573A (ja) プロセッサにおける書き込みトラヒックを減少するシステム及び方法
US11693661B2 (en) Mechanism for interrupting and resuming execution on an unprotected pipeline processor
JP2620511B2 (ja) データ・プロセッサ
US20220113966A1 (en) Variable latency instructions
US20240036876A1 (en) Pipeline protection for cpus with save and restore of intermediate results
US8127114B2 (en) System and method for executing instructions prior to an execution stage in a processor
US7234043B2 (en) Decoding predication instructions within a superscaler data processing system
JP2904624B2 (ja) 並列演算処理装置
US10552156B2 (en) Processing operation issue control
JP2021166010A (ja) 演算処理装置
US20130046961A1 (en) Speculative memory write in a pipelined processor
US7490226B2 (en) Method using vector component comprising first and second bits to regulate movement of dependent instructions in a microprocessor
JPH07219771A (ja) 命令プロセッサ

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120821

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20121121

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20121129

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20121211

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130129

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20130425

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20130507

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130509

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130618

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20130918

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20130926

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20131017

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20131204

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

Ref document number: 5431308

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

LAPS Cancellation because of no payment of annual fees