(57)【特許請求の範囲】
【請求項１】
パイプライン方式プロセッサを介して単一の条件付命令を実行する方法であって、
パイプラインにおいて、前記単一の条件付命令とは異なる命令によって生成された前値を受け取ることと、
結果を生成するために、１つ又は複数のオペランド値に対し前記単一の条件付命令の演算を実行することと、
前記パイプラインの回路において、前記単一の条件付命令と関連付けられた条件に基づいて、前記結果および前記前値から前記単一の条件付命令の出力値を選択することと、
ターゲットに前記出力値を出力することであって、前記出力値は、
前記条件が満たされているとき、前記結果であり、
前記条件が満たされないとき、前記前値であることと
を具備する方法。
【請求項２】
前記前値は、前記単一の条件付命令に関連付けられた評価結果に関わりなく受け取られる、請求項１に記載の方法。
【請求項３】
前記前値は、第１のレジスタから受け取られ、前記出力値は、前記評価結果に関わりなく前記ターゲットに出力され、前記第１のレジスタは、物理レジスタであり、論理レジスタは、前記条件を評価する前に前記第１のレジスタから第２のレジスタに無条件で名前が変更される、請求項２に記載の方法。
【請求項４】
前記前値は、以前に実行された命令の出力であり、前記以前に実行された命令の出力は、レジスタから前記以前に実行された命令の出力を読み取ることを前記単一の条件付命令に要求せずに、前記単一の条件付命令にフォワードされる、請求項１に記載の方法。
【請求項５】
前記単一の条件付命令の前記１つ又は複数のオペランド値は、前記前値を含まない、請求項１に記載の方法。
【請求項６】
論理レジスタを物理レジスタへ動的にマッピングするように構成される、パイプライン方式プロセッサを介して、単一の条件付命令を実行する方法であって、
名前変更テーブルにおいて論理ターゲットレジスタ識別子に関連付けられた第１の物理レジスタから、前値を読み取ることであって、前記前値は、前記単一の条件付命令に関連付けられた条件の評価結果に関わりなく読み取られ、前記前値は、前記単一の条件付命令とは異なる命令によって生成されることと、
前記名前変更テーブルにおいて、前記論理ターゲットレジスタ識別子を第２の物理レジスタと関連付けることと、
結果値を生成するために、１つ又は複数のオペランド値に対し前記単一の条件付命令の演算を実行することと、
回路において、前記条件に基づいて前記結果値及び前記前値から前記単一の条件付命令の出力値を選択することと、
前記単一の条件付命令の出力値を出力することであって、
前記条件が満たされるとき、前記第２の物理レジスタに前記結果値を書き込むことと、
前記条件が満たされないとき、前記第２の物理レジスタに前記前値を書き込むことと
を具備する、前記出力値を出力することと
を具備する方法。
【請求項７】
単一の条件付命令を実行する方法であって、
前記単一の条件付命令に関連付けられた条件の評価に関わりなく論理ターゲットレジスタから前値を読み取ることであって、前記前値は、前記単一の条件付命令とは異なる命令によって生成されることと、
結果を生成するために、１つ又は複数のオペランド値に対し前記単一の条件付命令による演算を実行することと、
回路において、前記条件に基づいて前記結果及び前記前値から前記単一の条件付命令の出力値を選択することと、
前記単一の条件付命令から前記出力値を出力することであって、
前記条件が満たされるとき、前記論理ターゲットレジスタに前記単一の条件付命令によって実行される前記演算の前記結果を書き込むことと、
前記条件が満たされないとき、前記論理ターゲットレジスタに前記前値を書き込むことと
を具備する、前記出力値を出力することと
を具備する方法。
【請求項８】
複数の物理レジスタと、
論理レジスタ識別子を前記複数の物理レジスタと動的に関連付けるためにアクセス可能な名前変更テーブルと、
単一の条件付命令を実行するように動作可能な命令実行パイプラインであって、
前記単一の条件付命令に関連付けられた条件の評価に関わりなく、前記名前変更テーブルにおいて論理ターゲットレジスタ識別子に関連付けられた第１の物理レジスタから前値を読み取り、前記前値は、前記単一の条件付命令とは異なる命令によって生成され前記第１の物理レジスタに書き込まれ、
結果を生成するために、１つ又は複数のオペランド値に対し前記単一の条件付命令の演算を実行し、
前記命令実行パイプラインの回路において、前記条件に基づいて前記結果および前記前値から前記単一の条件付命令の値を選択し、
前記条件が満たされるとき、前記結果を提供し、
前記条件が満たされないとき、前記前値を提供する
ことによって前記値を出力する
ために前記単一の条件付命令を実行するように動作可能な命令実行パイプラインと
を具備するプロセッサ。
【請求項９】
前記命令実行パイプラインは、前記名前変更テーブルにおいて、前記値を出力する前に、前記論理ターゲットレジスタ識別子を第２の物理レジスタと関連付けるように構成され、前記値は、前記第２の物理レジスタに書き込まれる、請求項８に記載のプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般的には、プロセッサ分野に関するものである。本発明は、より具体的には、条件が満たされていない場合は出力を提供しないように構成された条件付き命令を実行するシステム及び方法に関するものである。
【背景技術】
【０００２】
マイクロプロセッサは、非常に様々な用途において計算上のタスクを実行する。マイクロプロセッサの設計における１つの共通目標は、ソフトウェアの発展を通じての動作の高速化及び／又は機能増加を考慮した性能の向上である。現代の多くのプロセッサは、各々が複数の実行ステップを有する逐次命令が実行の際にオーバーラップするパイプライン型アーキテクチャを採用している。より高い命令上のスループットを達成させるためには、命令がパイプライン内を連続的に流れるべきである。パイプライン内において命令をストールさせるいずれの状況も、命令のスループットに対して、そしてその結果としてプロセッサの性能に対して、悪影響を及ぼすことになる。
【０００３】
命令は、メモリから入手されたデータに基づいて動作し、その結果をメモリに書き込む。現代のプロセッサは、幾つかの高速かつ高価なメモリ素子、例えばレジスタ、を最高レベルにおいて具備する階層メモリ構造を利用する。メモリ階層は、それよりも低速であるが低コストであるメモリ技術、例えばキャッシュメモリ（ＳＲＡＭ）、ソリッドステート主メモリ（ＤＲＡＭ）、及びディスク（磁気又は光学媒体）、をより下位のレベルにおいて具備する。ポータブル電子デバイス等のアプリケーションに関しては、ＤＲＡＭは、しばしばメモリ階層の最低レベルである。
【０００４】
多くのプロセッサ命令セットアーキテクチャ（ＩＳＡ）は、命令間でのデータのやり取り、及びメモリとの間でのデータの受け渡しのために用いられる構成されたレジスタである一組の汎用レジスタ（ＧＰＲ）を含む。データに関する論理演算及び算術演算を行う命令は、指定されたＧＰＲからオペランドを読み取り、指定されたＧＰＲにその結果を書き込む。同様に、メモリアクセス命令は、メモリに書き込むべきデータをＧＰＲから読み取り、メモリから読み取られたデータをＧＰＲに書き込む。コンパイラは、ソース及びターゲットのＧＰＲ識別子を各命令に割り当て、さらに適切な結果が計算されるように命令に順序を付ける。すなわち、命令は、より早い命令が指定されたＧＰＲに結果を格納するように指示し、より遅い命令がさらなる処理のためにこれらのＧＰＲを読み取ってオペランドを入手するように指示することによって正確な結果を保証する「プログラム上の順序で」手配される。
【０００５】
しかしながら、多くのプロセッサは、「アウトオブオーダーで」、すなわち命令のプログラム上の順序以外の順序で命令を実行する。アウトオブオーダーでの実行が生じる事例の一例は、２つ以上の命令を異なる実行パイプラインにおいて並行して実行することができるスーパースカラー設計の場合である。命令が１つのパイプラインにおいてストールした場合は、後続する命令を直ちに実行するために空いているパイプラインに急送することができる。アウトオブオーダーでの実行は、スーパースカラー設計に限定されておらず、単命令発行（single-issue）設計においても発生する可能性がある。いずれの場合においても、アウトオブオーダーでの実行は、一定の問題を引き起こす。
【０００６】
独立した命令は、原プログラム上の順序に関わりなく実行することができる。しかしながら、多くの命令は、「ハザード」と呼ばれるその他の命令への依存性を呈する。データハザードは、命令の順序再設定（例えば、アウトオブオーダーな命令の発行に起因する命令の順序再設定）が依存性に関わっているオペランドへのアクセス順序を変えるときに発生する。該当するデータハザードは、３つの型に分類することができる。次に、プログラム上の順序でｊの前にｉが生じる２つの命令ｉ及びｊについて検討する。
【０００７】
１つの型のデータハザードは、リードアフターライト（ＲａＷ）ハザードである。このハザードは、ｉがｊに関するオペランドソースであるターゲットレジスタに書き込むときに生じる。ｉがレジスタに書き込む前にｊが該レジスタの読み取りを試みた場合は、ｊは、旧値を不適切に取り出す。ライトアフターライト（ＷａＷ）ハザードは、両方の命令ｉ及びｊが同じターゲットレジスタに書き込み、ｉによって書き込まれる前にｊがそのターゲットへの書き込みを試みるときに発生する。この場合は、これらの書き込みは誤った順序で実行され、ｊによって書き込まれた値ではなくｉによって書き込まれた値をレジスタ内に残す。ライトアフターリード（ＷａＲ）ハザードは、ｉに関するオペランドソースであるターゲットレジスタをｉが読み取る前にｊが前記レジスタに書き込んだときに発生する。このハザードは、前の命令によって書き込まれた正確な値ではなくｊによって書き込まれた新しい値を不正確にｉに取り出させる。リードアフターリード（ＲａＲ）事例はデータハザードではなく、読み取りはあらゆる順序で行えることに注目すること。
【０００８】
例えば、以下の代表的なコードフラグメントを検討すること。
【０００９】
ＡＮＤ  ｒ２，ｒ１０，ｒ１２  ｒ１０の内容とｒ１２の内容との論理ANDをとり、その結果をｒ２に入れる
ＳＴ  ｒ２，ｍｅｍ  ｒ２の内容をメモリ記憶場所ｍｅｍに格納する
ＡＤＤ  ｒ２，ｒ５，ｒ６  ｒ５及びｒ６の内容を加算し、合計をｒ２に入れる
ＳＴは、ＡＮＤに対するＲａＷ依存性を有する。このデータハザードは、これらの命令をプログラム上の順序で実行するように要求する。さらに、ＡＤＤは、ＳＴへのＲａＷ依存性を呈する。意味論的には、ＡＤＤは、ＳＴがｒ２の読み取りを完了させるまでその結果をｒ２に書き込むことができない。その他の場合は、ＳＴは、ＡＮＤの結果を書き込むべきときにＡＤＤの結果をメモリに書き込む。ＷａＲ及びＷａＷデータハザードの場合は、１つの命令から次の命令にデータが渡されていないため、真のデータ依存性ではなく名前上の依存性である（唯一の依存性は、他方の命令がこれから読み取るか又は既に書き込んでいるレジスタの内容を壊さないことである）。名前上の依存性は、レジスタ名変更と呼ばれる技術によって解決することができる。
【００１０】
レジスタ名変更システムにおいては、各々が物理レジスタ番号（ＰＲＮ）を有する大きな一組の物理レジスタが、論理レジスタ番号（ＬＲＮ）をこれらの物理レジスタに動的に割り当てることによって管理される。ＬＲＮは、例えば、論理ＧＰＲ識別子（ｒ０、ｒ１、ｒ２、．．．）を具備することができる。好ましいことに、物理レジスタ数は、ＬＲＮ数、又は構成されたＧＰＲ数よりも多い。名前変更テーブル（ＲＴ）は、ＬＲＮとＰＲＮとの間における動的マッピングを維持する。
【００１１】
パイプライン内の早期において（例えば、復号段階において又は復号段階に続いて）、命令のレジスタアクセス上の特徴が検査され、該命令と関連するＬＲＮ（例えば、ＧＰＲ識別子）がＲＴを介してＰＲＮに変換される。レジスタに書き込む命令に関しては、新しいＬＲＮ−ＰＲＮマッピングがＲＴに記入されてＬＲＮを未使用のＰＲＮにマッピングし、このため、書き込みは、関連づけられた物理レジスタに向けられる（すなわち、ＬＲＮの「名前が変更される」）。レジスタを読み取る命令は、ＲＴルックアップを介してそのＬＲＮをＰＲＮに変換する。ＰＲＮは、パイプラインにおける有効期間全体を通じてレジスタ読み取り命令と関連づけられた状態を維持する。
【００１２】
レジスタ書き込み命令は、同じＬＲＮに書き込まれている前の値を「壊さない」。（ＬＲＮは、新しいＰＲＮに名前が変更されるため）書き込みは、新しい未使用のＰＲＮが対象になる。プログラム上の順序で書き込み命令に後続する命令は、書き込まれた値を得るために同じＰＲＮに向けられる。プログラム上の順序で書き込み命令に先行する命令は、（名前変更作業前に）ＲＴによって異なる物理レジスタにマッピングされており、その物理レジスタへのアクセスを続ける。従って、所定のＬＲＮを書き込む命令は、前の値をＬＲＮ（ＷａＲ）から読み取る命令又は前の結果をＬＲＮ（ＷａＷ）に書き込む命令に先行して実行することができる。この方法により、ＷａＲ及びＷａＷの名前ハザードは回避される。
【００１３】
プロセッサが例外、誤って予測された分岐等から回復するのを可能にするため、データが書き込まれる物理レジスタを（さらなる名前変更のために）利用可能であるかどうかに対して制限が課せられる。例えば、ＬＲＮは、ＰＲＮ１に名前を変更することができ、第１の命令の結果はＬＲＮに書き込まれ、従ってＰＲＮ１に書き込むことができる。第２の命令は、ＰＲＮ２に名前が変更されたＬＲＮにデータを書き込むことができ、従って、ＰＲＮ２は、第２の命令の結果を格納する。この場合は、ＬＲＮ１は、第２の命令がコミットするまで（すなわち、該命令及び該命令に先行する全命令の完全な例外検査が実施済みであり、実行を完了させることが保証されるまで）は、他のＬＲＮの名前をＰＲＮ１に変更するために解放されない。さらに、ＬＲＮを参照する第１と第２の命令の間の全命令（すなわち、ＰＲＮ１を読み取る全命令）が、ＰＲＮ１の読み取りを完了させていなければならないか又は最終的にその値を受け取ることが保証されなければならない。その時点で初めてＰＲＮ１を解放して他のＬＲＮをその名前に変更するために利用可能になる。
【００１４】
上記のコードセグメント例に戻り、ＡＮＤ命令が復号され、ＬＲＮ  ｒ２への書き込みが検出されたときには、ＲＴにおいて物理レジスタ、例えばＰＲＮ  ｘにＬＲＮ  ｒ２が割り当てられる。ＡＮＤの結果は、物理レジスタｘに書き込まれる。ＳＴ命令が復号されるときには、ＬＮＲ  ｒ２からの読み取りが検出され、ＲＴにアクセスされる。ＬＲＮ  ｒ２はＰＲＮ  ｘにマッピングされ、このため、ＳＴ命令は、物理レジスタｘを読み取り（従って、ＡＮＤによって書き込まれた結果を入手する）。ＡＤＤ命令が復号され、ＬＲＮ  ｒ２への書き込みが検出されたときには、ＬＲＮ  ｒ２は、異なる物理レジスタ、例えばＰＲＮ  ｙに再度割り当てられる−すなわち「名前が変更される」。ＬＲＮ  ｒ２を読み取る後続の命令は、ＲＴによって物理レジスタｙに向けられる。ＡＤＤはＳＴの前に実行でき、ＳＴは依然としてＰＲＮ  ｘから正確な結果を取り出し、それによってＷＡＲハザードが解決されることに注目すること。
【００１５】
レジスタ名変更システムの１つの問題は、条件付き命令の実行から発生する。条件付き命令は、条件が満たされている場合のみに算術演算又は論理演算を行ってその結果を書き込むように構成されている命令である。条件が評価されるまでは（この評価は、パイプラインの深部においてしばしば行われる）、条件付き命令がレジスタに書き込むかどうか決定することができない。条件が満たされていない場合は、条件付き命令は、実効的に、ＧＰＲを変更しないＮＯＰ、すなわち非演算命令である。条件付き命令がレジスタに書き込むかどうか不確実であるため、後続する命令は、条件が評価されるまでは条件付き命令への依存性が存在するかどうか確認することができない。例えば、以下のコードフラグメントについて検討する。
【００１６】
ＣＭＰ  ｒ１，ｒ１２         ｒ１及びｒ１２の内容を比較する（比較結果を反映させるようにコード又はフラグを設定する）
ＡＮＤ  ｒ２，ｒ１０，ｒ１２  ｒ１０の内容をｒ１２の内容に論理ＡＮＤし、その結果をｒ２に入れる
ＳＵＢＥＱ  ｒ２，ｒ７，ｒ８  前の比較が等しい場合は、ｒ８の内容をｒ７から減じてその結果をｒ２に入れる。等しくない場合は、ｒ２は変更されない。
【００１７】
ＳＴ  ｒ２，ｍｅｍ            ｒ２の内容をメモリ記憶場所ｍｅｍに格納する
ＡＤＤ  ｒ２，ｒ５，ｒ６      ｒ５及びｒ６の内容を加算し、合計をｒ２に入れる。
【００１８】
この例においては、ＳＴは、ＥＱ条件が評価されまでは、ＳＵＢＥＱに関するデータハザードを有するかどうか確認することができない。すなわち、ＳＴは、ＡＮＤ又はＳＵＢＥＱ命令によってｒ２に書き込まれるかどうかを決定することができない。意味論的には、及び実際には、常にプログラム上の順序で命令を出すプロセッサにおいては、ＡＮＤ及びＳＵＢＥＱの両方が常に実行され、ＳＵＢＥＱは、ｒ２レジスタの値を更新できる場合とできない場合があり、ＳＴは、このことに「留意」せず、単にｒ２の内容を格納する。
【００１９】
しかしながら、アウトオブオーダーな設計においては、プロセッサは、ＳＴがＡＮＤ又はＳＵＢＥＱのいずれに依存するかを決定しなければならない。
【００２０】
特に、レジスタ名変更システムにおいては、プロセッサは、ＥＱ条件が評価されてＳＵＢＥＱが実際にｒ２に書き込むかどうかを決定することができるようになるまで、レジスタ名変更段階の早期においてパイプラインをストールさせなければならない。条件はパイプラインの深部において評価されるため、このことは望ましくないパイプラインのストールを引き起こす。代替として、ＲＴは、ＳＵＢＥＱ命令に関して推測的にｒ２の名前を新しいＰＲＮに変更することができる。この場合は、ＲＴは、ＥＱ条件が満たされない場合は名前変更を取り消す、すなわち、前に名前が付けられたＰＲＮへのＬＲＮ  ｒ２のマッピングを復元させるためのメカニズムを有していなければならない。このメカニズムが必要な理由は、条件が満たされない場合は、ＳＵＢＥＱが新しいＰＲＮを実際に書き込まず、ＲＴが定義されていないデータを含む物理レジスタへのＬＲＮ  ｒ２のマッピングを行うことになるためである。この追加の回路は、ＲＴにおける複雑さを増大させて電力消費量を増大させる。
【００２１】
当業において知られており、その出力が条件評価に依存する１つの型の命令は、条件付き選択である。条件付き選択命令は、常に（すなわち無条件で）結果を書き込むために命令セットアーキテクチャによって定義される。出力が書き込まれるどうかではなく、書き込まれた値のみが条件評価に依存する。例えば、条件付き選択ＡＤＤ命令  ＡＤＤＳＥＱ
ｒ２、ｒ３、ｒ４、ｒ５は、ＥＱ条件が満たされている場合にｒ４とｒ５の内容を加算してその結果をｒ２に入れることができる。ＥＱ条件が満たされていない場合は、前記命令は、ｒ３の内容をｒ２に入れる。この命令は、アーキテクチャ的に及び意味論的に、代替結果（この例においてはｒ３の読み取り）に関する明示の入力を有する。次に、出力は、条件評価に依存して、演算結果又は代替結果の間で選択する。
【００２２】
条件付き命令は、条件付き選択とは異なる。本明細書において用いられる「条件付き命令」は、条件が満たされている場合に演算の結果をターゲットに書き込み、条件が満たされていない場合はターゲットに書き込まないように構成されている命令である。すなわち、条件が満たされていない場合は、条件付き命令は、実効的にＮＯＰに変換し、レジスタへの書き込みを行わず、オペランドフォワーディング環境においてどのような結果もフォワードしない。条件が評価される（この評価はパイプライン内の遅い段階でしばしば生じる）までレジスタ名変更段階（一般的にはパイプラインの早い段階で生じる）においてプロセッサにパイプラインをストールさせるのは、条件付き命令が出力を提供するかどうかがまさにこのように不確実なことである。条件付き命令が事実上のＮＯＰであるかどうかがわかっているときのみに、後続する命令のデータ依存性を解決することができる。この型の条件付き命令は、現代のプロセッサＩＳＡにおいては一般的である。
【発明の概要】
【００２３】
１つ以上のオペランドを入力として受け取り、条件が満たされている場合はオペランドに関して行われた演算の結果をターゲットに出力し、条件が満たされていない場合は出力を提供しないように構成された条件付き命令が、前記ターゲットに対して無条件で出力を提供するような形で実行される。前記条件付き命令は、前記ターゲットの前の値（すなわち、前記ターゲットを更新させた前記条件付き命令に先行する直近の命令によって生成された値）を入手する。前記条件が評価される。前記条件が満たされている場合は、オペランドに関して行われた演算の結果が前記ターゲットに出力される。前記条件が満たされていない場合は、前記前値が前記ターゲットに出力される。後続する命令は、条件評価前には、（レジスタに書き込まれるか又は命令にフォワードされるかにかかわらず）オペランドソースとして前記ターゲットに依存することができる。
【００２４】
一実施形態は、パイプラインプロセッサ内における条件付き命令であって、１つ以上のオペランドを入力として受け取り、条件が満たされている場合はオペランドに関して行われた演算の結果をターゲットに出力し、条件が満たされていない場合は出力を提供しないように構成された条件付き命令、を実行する方法に関するものである。１つ以上のオペランド値及び前記ターゲットの前値が受け取られ、条件が評価される。前記条件が満たされている場合は、オペランド値に関する演算が行われて結果値が生成され、前記結果が前記ターゲットに出力される。前記条件が満たされていない場合は、前記の前ターゲット値が前記ターゲットに出力される。
【００２５】
他の実施形態は、論理レジスタを物理レジスタに動的にマッピングするレジスタ名変更システムを採用するパイプラインプロセッサにおいて、条件が満たされている場合は論理ターゲットレジスタに演算結果を書き込み、前記条件が満たされていない場合はいずれのレジスタにも書き込まないように構成された条件付き命令を実行する方法に関するものである。前記論理ターゲットレジスタと関連づけられた第１の物理レジスタから第１の値が読み取られる。前記論理ターゲットレジスタの名前が第２の物理レジスタに変更される。
【００２６】
条件が評価される。前記条件が満たされている場合は、演算が行われて結果値が生成され、前記結果値が前記第２の物理レジスタに書き込まれる。前記条件が満たされていない場合は、前記第１の値が前記第２の物理レジスタに書き込まれる。
【００２７】
他の実施形態は、条件が満たされている場合は演算の結果を論理ターゲットレジスタに書き込み、条件が満たされていない場合はいずれのレジスタにも書き込まないように構成された条件付き命令を実行する方法に関するものである。前記方法は、前記論理ターゲットレジスタと関連づけられた第１の物理レジスタから前の値を読み取ることを具備する。
【００２８】
他の実施形態は、条件が満たされている場合は演算の結果を論理ターゲットレジスタに書き込み、条件が満たされていない場合はいずれのレジスタにも書き込まないように構成された条件付き命令を実行する方法に関するものである。前記方法は、前記論理ターゲットレジスタに無条件で値を書き込むことを具備する。
【００２９】
他の実施形態は、複数の物理レジスタと、論理レジスタ識別子を動的にこれらの物理レジスタと関連づけるために動作可能な名前変更テーブルと、を含むプロセッサに関するものである。前記プロセッサは、プログラム上の順序でない順序で命令を実行するために動作可能な命令実行パイプラインも含む。前記パイプラインは、条件の評価前に、条件付き命令に関するターゲットとして及び前記条件付き命令への条件付き依存性を有する命令に関するオペランドソースとして無条件で物理レジスタを割り当てるためにさらに動作可能である。前記条件付き命令は、条件が満たされている場合は演算の結果をターゲットに書き込み、前記条件が満たされていない場合はターゲットに書き込まないように構成されている。
【図面の簡単な説明】
【００３０】
【図１】プロセッサの機能ブロック図である。
【図２】条件付き命令を実行する方法を描いた流れ図である。
【図３】条件付き命令の出力決定を描いた機能ブロック図である。
【発明を実施するための形態】
【００３１】
図１は、プロセッサ１０の機能ブロック図である。プロセッサ１０は、制御論理１４に従って命令実行パイプライン１２において命令を実行する。パイプライン１２は、１２ａ及び１２ｂ等の複数の並列パイプラインを有するスーパースカラー設計であることができる。パイプライン１２ａ、１２ｂは、パイプ段階において構成された様々なレジスタ又はラッチ１６と、１つ以上の算術論理演算装置（ＡＬＵ）１８と、を含む。名前変更レジスタファイル（ＲＲＦ）２０は、構成された汎用レジスタ（ＧＰＲ）の数を超える非常に多数の物理レジスタを提供する。ＲＲＦ２０内のレジスタは、プロセッサメモリ階層の最上層を具備し、命令に関する主オペランドソース及び行先ターゲットとして機能する。ＲＲＦ２０には、論理ＧＰＲ識別子をＲＲＦ２０内の物理レジスタと動的に関連づける名前変更テーブル（ＲＴ）２１が関連づけられている。
【００３２】
パイプライン１２ａ、１２ｂは、命令キャッシュ（Ｉ−キャッシュ）２２から命令をフェッチし、メモリのアドレッシング及び許可は、命令側変換ルックアサイドバッファ（ＩＴＬＢ）２４によって管理される。データは、データキャッシュ（ＩＤ−キャッシュ）２６からアクセスされ、メモリのアドレッシング及び許可は、主変換ルックアサイドバッファ（ＴＬＢ）２８によって管理される。様々な実施形態においては、ＩＴＬＢは、ＴＬＢの一部分のコピーを具備することができる。代替として、ＩＴＬＢ及びＴＬＢは、統合することができる。同様に、プロセッサ１０、Ｉ−キャッシュ２２及びＤ−キャッシュ２６の様々な実施形態は、統合または統一することができる。Ｉ−キャッシュ２２及び／又はＤ−キャッシュ２６におけるミスは、バス３１を介して通信するメモリインタフェース３０の制御下で、主（オフチップ）メモリ３２へのアクセスを引き起こす。
【００３３】
プロセッサ１０は、様々な周辺装置３６へのアクセスを制御する入力／出力（Ｉ／Ｏ）インタフェース３４を含むことができる。当業者は、プロセッサ１０の様々な変形が可能であることを認識するであろう。例えば、プロセッサ１０は、Ｉキャッシュ又はＤキャッシュのいずれか又は両方に関する第２レベル（Ｌ２）のキャッシュを含むことができる。
【００３４】
さらに、プロセッサ１０において描かれている機能ブロックのうちの１つ以上を特定の実施形態から省くことができる。
【００３５】
１つ以上の実施形態により、条件付き命令がレジスタに書き込むかどうか不確実であることは−この不確実性は、条件が評価されるまで解決されない−、パイプライン内におけるストールを引き起こさない。前記不確実性は、ターゲットレジスタに常に（無条件で）書き込む条件付き命令によって取り除かれる。ターゲットレジスタに書き込まれる値は、条件評価に依存する。条件付き命令は、自己のターゲットの前値（すなわち、前記ターゲットを更新させた条件付き命令に先行する直近の命令によって生成された値）を読み取り、条件評価に基づき、前記前値（条件が満たされていない場合）又は演算結果（条件が満たされている場合）をターゲットに書き込む。この方法により、条件付き命令に後続する命令は、条件が評価されるのを待たずに、自己のオペランドのソース−条件付き命令のターゲット−が保証される。特に、レジスタ名変更システムは、条件評価後における正確な値（条件付き演算の結果又は前命令又はメモリへのアクセスの結果）を含むＰＲＮに依存して条件付き命令のターゲットＬＲＮの名前をＰＲＮに変更することができる。
【００３６】
条件付き命令を実行する方法の一実施形態が、図２において流れ図の形で描かれている。条件付き命令は、ターゲットの前値を入力する（ブロック４０）。この入力は、命令に割り当てられたターゲットＬＲＮ（例えば、ＧＰＲ識別子）を読み取ることを具備することができ、このことは、レジスタ名変更が採用されている場合は、条件付き命令が復号されるときにＲＴがＬＲＮをマッピングする先であるＰＲＮを読み取ることに相当する。代替として、オペランドフォワーディング動作においては、ターゲットの前値を入力することは、前命令の出力を直接入手することを具備することができる。いずれの場合においても、前値は、前命令又はメモリアクセス動作の結果である。条件付き命令は、本発明の命令実行方法に起因して前値を読み取り、前値は、条件付き命令への構成されたオペランドではない。ターゲットの前値を読み取ることは、図２では方法における第１のステップとして描かれているが、必ずしも必要であるわけではない。ターゲットの前値は、ターゲットの論理識別子の名前変更前のあらゆる時点において、さらには、前値が（例えば、メモリアクセス動作等から）条件付き命令にフォワードされる場合は名前変更後においてさえも読み取ることができる。
【００３７】
条件付き命令に該当する条件が評価される（ブロック４２）。この評価は、実行段階等のパイプラインの深部において行うことができる。この理由により、先行技術の条件付き命令が何らかの出力を生成するかどうかは条件評価まで確認できないため、先行技術の条件付き命令は、レジスタ名変更段階においてパイプラインのストールを引き起こした。代替として、条件付き命令によって値が書き込まれることを予想してレジスタ名が変更された場合は、条件が満たされておらず書き込みが行われなかった場合は名前変更動作を取り消さなければならなかった。
【００３８】
条件が満たされている場合は、１つ以上のオペランドが条件付き命令に入力される（ブロック４４）。このことは、ＧＰＲの読み取り又はオペランドフォワーディング動作を含むことができる。オペランド入力ステップは、条件評価に先行することができ、条件が満たされていない場合はオペランドは単に捨てられることに当業者は注目するであろう。オペランドに関する算術演算又は論理演算が行われて（ブロック４６）結果が生成され、その結果が出力される（ブロック４８）。出力は、ＬＲＮ（すなわち、ＲＴを通じてＬＲＮと関連づけられているＰＲＮ）に書き込むか又は他の命令に直接結果をフォワードすることによって行うことができる。
【００３９】
条件が満たされていない場合は（ブロック４２）、条件付き命令は、（同じくターゲットＬＲＮを書き込むことによって又はオペランドフォワーディングによって）ターゲットから入力された前値を出力し（ブロック５０）、それによって、条件が満たされていない場合に確実に前値を提供する。図２に描かれている実施形態においては、条件が満たされていない場合はオペランドが読み取られず、演算も行われない。その他の実施形態においては、オペランドの読み取り、さらには演算さえも、オペランドによる条件評価前に行うことができ、生成された結果は、条件が満たされていない場合は単に捨てられる。条件評価にかかわらず条件付き命令は出力を提供することに注目すること（ブロック４８、５０）。このことは、命令を構成されているとおりに実行する−すなわち、条件が満たされている場合のみに出力を提供し、条件が満たされていない場合は出力（レジスタ書き込み又はオペランドフォワーディング）を提供しない先行技術の条件付き命令実行方法とは対照的である。
【００４０】
一実施形態による出力選択が、図３において、上記の代表的なコードフラグメント、特にＳＵＢＥＱ ｒ２、ｒ７、ｒ８命令、を用いて概略的に描かれている。ＬＲＮ ｒ２の前値が、ＲＴ ２１マッピング後にＰＲＮ  ｘから読み取られる。この値（又は少なくともＰＲＮ識別子）は、パイプラインを進行中は条件付き命令によって維持される。レジスタ名変更システムは、条件評価前にＲＴ ２１を更新し、ＬＲＮ ｒ２を新しい物理レジスタＰＲＮ ｙに変更する。オペランドがｒ７及びｒ８から読み取られ、減算演算がＡＬＵ１８において行われる。条件が評価され、評価結果は、前値又は演算結果を条件付き命令のターゲットＬＲＮｒ２（ＰＲＮ  ｙに名前が変更されている）に書き込むかどうかを決定する。図３は代表例であるにすぎず、他の実施形態においては、ｒ７及びｒ８の読み取り及び減算演算は条件が満たされている場合のみに行うことができることを当業者は認識するであろう。
【００４１】
１つ以上の実施形態による条件付き命令の実行は、出力−条件評価に依存して演算の結果又はターゲットの前値のいずれか−を無条件で提供するため、パイプラインは、多くの状況において条件評価を待つためにストールさせる必要がない。例えば、ＲＴ ２１は、条件評価を待たずに、条件付き命令のターゲットＬＲＮの名前をＲＲＦ２０内の利用可能な物理レジスタに変更することができる。このＬＲＮを読み取る後続の命令は、条件付き命令によって書き込まれた物理レジスタから適切な結果を入手することが保証される。前記物理レジスタは、演算の結果（条件が満たされている場合）又はレジスタ名変更前にＬＲＮと関連づけられていたＰＲＮからの値（条件が満たされていない場合）のうちのいずれかを含むことになる。従って、パイプラインは、条件評価を待つためにレジスタ名変更段階においてストールする必要がない。
【００４２】
一実施形態においては、オペランドフォワーディングは、条件の評価前に、命令のオペランドのうちの１つ以上を条件付き命令によって直接提供できるときに、パイプラインコントローラ１４が命令のオペランドのソースを決定するのを可能にすることによって単純化される。当業においてよく知られるように、オペランドフォワーディングは、第１の命令によるレジスタへの書き込み及び第２の命令によるレジスタ読み取りを要求せずに、１つの命令の出力が直接他の命令にフォワードされる技術である。先行技術においては、条件付き命令に後続する命令は、条件付き命令によってフォワードされるか（条件が満たされている場合）又は前命令によってフォワードされ（条件が満たされておらず、条件付き命令が出力を生成しない場合）、従って、条件評価がオペランドソースを決定するのを待たなければならない。出力を無条件で提供することによって、この実施形態の条件付き命令実行方法は、この不確実性を排除し、条件評価前にオペランドのソースに関する判断を行うことを可能にする。特に、条件付き命令実行方法は、無条件で出力をフォワードするため、パイプラインコントローラ１４は、後続する命令に関するオペランドソースとして条件付き命令を信頼できる形で割り当てることができる。前記出力は、前の命令によって条件付き命令にフォワードされた前値（条件が満たされていない場合）又は演算の結果（結果が満たされている場合）であることができる。
【００４３】
本発明は、本明細書においては、本発明の特定の特長、側面及び実施形態に関して説明されているが、数多くの変形、修正、及びその他の実施形態が本発明の広範な適用範囲内にあることが明確になり、このため、あらゆる変形、修正及び実施形態が本発明の適用範囲内にあるとみなすべきである。従って、本明細書の実施形態は、あらゆる点において例示的な実施形態であって制限するものではないと解釈すべきであり、添付される特許請求項の意味及び同等の意味の範囲内にあるすべての変更は、前記請求項内に包含されることが意図されている。
以下に、本願出願の当初の特許請求の範囲に記載された発明を付記する。
［Ｃ１］
パイプライン方式プロセッサにおいて条件付き命令を実行する方法であって、前記条件付き命令は、１つ以上のオペランドを入力として受け取り、条件が満たされている場合は前記オペランドに関する演算の結果をターゲットに出力し、前記条件が満たされていない場合は出力を提供しないように構成され、
１つ以上のオペランド値を受け取ることと、
前記ターゲットの前値を受け取ることと、
条件を評価することと、
前記条件が満たされている場合は、前記オペランド値に関する演算を行って結果値を生成し、前記結果を前記ターゲットに出力することと、
前記条件が満たされていない場合は、前記前ターゲット値を前記ターゲットに出力すること、
とを具備する、方法。
［Ｃ２］
前記ターゲットの前値を受け取ることは、前記前値を第１のレジスタから読み取ることを具備するＣ１に記載の方法。
［Ｃ３］
前記結果又は前記ターゲットの前記前値を出力することは、前記各々の値を第２のレジスタに書き込むことを具備するＣ２に記載の方法。
［Ｃ４］
前記第１及び第２のレジスタは、レジスタ名変更システムにおける物理レジスタであり、論理レジスタは、前記条件の前記評価前に前記第１のレジスタから前記第２のレジスタに無条件で名前が変更されるＣ３に記載の方法。
［Ｃ５］
前記条件付き命令に後続する命令は、前記条件の評価前にオペランドフェッチに関して無条件で前記第２のレジスタに向けられるＣ４に記載の方法。
［Ｃ６］
前記ターゲットの前記前値は、以前に実行された命令の出力であるＣ１に記載の方法。
［Ｃ７］
前記結果値又は前記ターゲットの前記前値は、前記各々の値を後続する命令にフォワーディングすることを具備するＣ１に記載の方法。
［Ｃ８］
前記条件付き命令は、前記条件の前記評価前に前記後続する命令に関するオペランドソースとして無条件で選択されるＣ７に記載の方法。
［Ｃ９］
論理レジスタを物理レジスタに動的にマッピングするレジスタ名変更システムを採用するパイプライン方式プロセッサにおいて、条件が満たされている場合は演算の結果を論理ターゲットレジスタに書き込み、前記条件が満たされていない場合はいずれのレジスタにも書き込まないように構成された条件付き命令を実行する方法であって、
前記論理ターゲットレジスタと関連づけられた第１の物理レジスタから第１の値を読み取ることと、
前記論理ターゲットレジスタの名前を第２の物理レジスタに変更することと、
条件を評価することと、
前記条件が満たされている場合は、演算を行って結果値を生成し、前記結果値を前記第２の物理レジスタに書き込むことと、
前記条件が満たされていない場合は、前記第１の値を前記第２の物理レジスタに書き込むこと、
とを具備する、方法。
［Ｃ１０］
前記条件の評価前に、前記条件付き命令に後続する命令に関するオペランドソースとして前記第２の物理レジスタを割り当てることをさらに具備するＣ９に記載の方法。
［Ｃ１１］
条件が満たされている場合は演算の結果を論理ターゲットレジスタに書き込み、前記条件が満たされていない場合はいずれのレジスタにも書き込まないように構成された条件付き命令を実行する方法であって、
前記論理ターゲットレジスタと関連づけられた第１の物理レジスタから前値を読み取ることを具備する方法。
［Ｃ１２］
前記論理ターゲットレジスタの名前を第２の物理レジスタに変更することをさらに具備するＣ１１に記載の方法。
［Ｃ１３］
条件を評価することと、
前記条件が満たされている場合は、演算を行って結果を生成して前記結果を前記第２の物理レジスタに書き込むことと、
前記条件が満たされていない場合は、前記前値を前記第２の物理レジスタに書き込むこと、
とをさらに具備するＣ１２に記載の方法。
［Ｃ１４］
条件が満たされている場合は演算の結果を論理ターゲットレジスタに書き込み、前記条件が満たされていない場合はいずれのレジスタにも書き込まないように構成された条件付き命令を実行する方法であって、
前記論理ターゲットレジスタに無条件で値を書き込むことを具備する方法。
［Ｃ１５］
前記論理ターゲットレジスタに値を書き込むことは、前記論理ターゲットレジスタと関連づけられた第２の物理レジスタに値を書き込むことを具備するＣ１４に記載の方法。
［Ｃ１６］
以前に前記論理ターゲットレジスタと関連づけられた第１の物理レジスタから前値を読み取ることと、前記論理ターゲットレジスタの名前を前記第１の物理レジスタから前記第２の物理レジスタに変更すること、とをさらに具備するＣ１４に記載の方法。
［Ｃ１７］
無条件で書き込まれた前記データは、条件が満たされている場合は前記条件付き命令によって行われた演算の結果であり、前記条件が満たされていない場合は前記前値であるＣ１６に記載の方法。
［Ｃ１８］
前記条件評価前に、前記条件付き命令に後続する命令に関するオペランドソースとして前記第２の物理レジスタを無条件で割り当てることをさらに具備するＣ１７に記載の方法。
［Ｃ１９］
複数の物理レジスタと、
論理レジスタ識別子を前記物理レジスタと動的に関連づけるために動作可能な名前変更テーブルと、
前記条件の評価前に、プログラム上の順序でない順序で命令を実行するために動作可能であり、条件付き命令に関する前記ターゲットとして及び前記条件付き命令への条件付き依存性を有する命令に関するオペランドソースとして論理レジスタ識別子を無条件で割り当てるために動作可能な命令実行パイプラインと、を具備し、前記条件付き命令は、条件が満たされている場合は演算の結果をターゲットに書き込み、前記条件が満たされていない場合は前記ターゲットに書き込まないように構成されている、プロセッサ。
［Ｃ２０］
前記条件付き命令は、前記論理レジスタ識別子と関連づけられた第１の物理レジスタから前値を読み取るために動作可能であるＣ１９に記載のプロセッサ。
［Ｃ２１］
前記名前変更テーブルは、前記論理レジスタ識別子の名前を前記第１の物理レジスタから第２の物理レジスタに変更するために動作可能であるＣ２０に記載のプロセッサ。
［Ｃ２２］
前記条件付き命令は、前記条件が満たされている場合は演算を行って前記第２の物理レジスタに結果を書き込み、前記条件が満たされていない場合は前記第２の物理レジスタに前記前値を書き込むために動作可能であるＣ２０に記載のプロセッサ。
［Ｃ２３］
前記条件付き命令に後続する命令は、前記条件評価前に前記第２の物理レジスタがオペランドソースとして無条件で割り当てられるＣ２２に記載のプロセッサ。
【図１】
0006009608.tif 000002
【図２】
0006009608.tif 000003
【図３】
0006009608.tif 000004