(57)【要約】【課題】  条件付き命令を非順次的に実行することによって、ハードウェア装置の性能を改善することが可能なハードウェア装置を提供する。【解決手段】  ハードウェア装置１００は、条件生成命令、条件付き命令または条件使用命令をフェッチし、条件付き命令について、目的オペランドの元のレジスタを別のレジスタにリネームすることにより、フェッチされた命令を非順次的に発行する解読／発行部１１０と、発行された命令を実行する実行ユニットを有する実行部１３０と、条件付き命令のリネーム情報、条件及び実行結果を記憶するリネームされたレジスタを有し、条件生成命令の実行結果に基づいて条件が満たされている有効条件付き命令を読み出すことにより、記憶された条件付き命令の実行結果を出力する条件処理部１５０と、条件処理部１５０により出力された条件付き命令の実行結果を元のレジスタに記憶するレジスタファイル１７０と、を備えている。【選択図】      図１
2006079623.tif 000002
【特許請求の範囲】
【請求項１】
条件を生成する条件生成命令、前記条件生成命令の実行結果に基づいて実行するか否かが決定される条件付き命令、または前記条件付き命令の実行結果を使用する条件使用命令をフェッチし、前記条件付き命令について、目的オペランドの元のレジスタを別のレジスタにリネームすることにより、フェッチされた命令を非順次的に発行する解読／発行部と、
発行された前記命令を実行する少なくとも一つの実行ユニットを有する実行部と、
前記条件付き命令のリネーム情報、条件及び実行結果を記憶するリネームされたレジスタを有し、前記条件生成命令の実行結果に基づいて条件が満たされている有効条件付き命令を読み出すことにより、記憶された前記条件付き命令の実行結果を出力する条件処理部と、
前記条件処理部により出力された前記条件付き命令の実行結果を前記元のレジスタに記憶するレジスタファイルと、
を備えていることを特徴とするハードウェア装置。
【請求項２】
前記解読／発行部は、
命令をフェッチし、フェッチされた前記命令が条件付き命令である場合には、前記目的オペランドの元のレジスタを別のレジスタにリネームしてフェッチされた前記命令を出力し、フェッチされた前記命令が条件使用命令である場合には、前記有効条件付き命令の実行結果が前記元のレジスタに記憶されるまで待機した後でフェッチされた前記命令を出力する解読部と、
前記解読部から出力された前記命令を発行キューエントリーに割り当て、割り当てられた前記命令を実行するために使用可能な実行ユニットが前記実行部にある場合に、割り当てられた前記命令を前記実行部に発行する命令発行キューと、
を備えていることを特徴とする請求項１に記載のハードウェア装置。
【請求項３】
前記条件処理部は、
前記命令発行キューにより前記条件生成命令に割り当てられたエントリーを指示する条件生成ポインタと、
前記解読部から受信したリネームされたレジスタ情報及び元のレジスタ情報であるリネーム情報、条件及び前記条件生成ポインタにより指示されたエントリーを記憶するバッファエントリーを少なくとも一つの前記条件付き命令に割り当てる条件付き実行バッファと、
前記条件生成命令の実行結果が前記実行部から受信された場合に、前記条件生成命令の実行結果に基づいて実行するか否かが決定される前記条件付き命令の条件を前記条件付き実行バッファに要請し、前記条件生成命令の実行結果と比較して条件を満たす条件付き命令を選択する条件チェック部と、
前記実行部から前記条件付き命令の実行結果を受信し、前記条件付き命令の実行結果をリネームされたレジスタに一時記憶する条件付き実行レジスタファイルと、
を備えていることを特徴とする請求項２に記載のハードウェア装置。
【請求項４】
前記条件付き実行バッファは、前記条件チェック部での条件チェックに基づく条件を満たす有効条件付き命令であるか否かを示すバッファをバッファエントリーごとに備えていることを特徴とする請求項３に記載のハードウェア装置。
【請求項５】
前記条件付き実行バッファは、前記条件付き命令に割り当てられたバッファエントリーが使用されているか否かを示すバッファをバッファエントリーごとに備え、
前記解読部が新たにフェッチされた条件付き命令のためにリネームする場合に、前記バッファエントリーが使用される
ことを特徴とする請求項３に記載のハードウェア装置。
【請求項６】
前記条件付き実行レジスタファイルは、リネームされた前記レジスタが使用されているか否かを前記レジスタと共に表示し、前記解読部が新たな条件付き命令のためにレジスタをリネームする場合に、前記レジスタを使用可能にすることを特徴とする請求項３に記載のハードウェア装置。
【請求項７】
前記解読部は、フェッチされた前記命令が前記条件付き実行バッファに記憶された元のレジスタをソースオペランドとして使用する場合に、前記命令が条件使用命令語であると判定することを特徴とする請求項３に記載のハードウェア装置。
【請求項８】
請求項１から請求項７のいずれか一項に記載のハードウェア装置を用いて条件付き命令を非順次的に実行することを特徴とするコンピュータシステム。
【請求項９】
条件を生成する条件生成命令、前記条件生成命令語の実行結果に基づいて実行するか否かが決定される条件付き命令、または前記条件付き命令の実行結果を使用する条件使用命令をフェッチするステップと、
前記条件付き命令について、目的オペランドの元のレジスタを別のレジスタにリネームすることにより、フェッチされた命令を実行のために発行する際に、フェッチされた前記命令を非順次的に発行するステップと、
前記条件付き命令のリネーム情報及び条件を個別に記憶するステップと、
発行された前記命令を実行し、前記条件付き命令の実行結果をリネームされたレジスタに記憶するステップと、
記憶された前記リネーム情報及び前記条件を利用して、前記条件生成命令の実行が完了した場合に、その結果に基づいて条件が満たされている有効条件付き命令を選択するステップと、
前記有効条件付き命令の実行結果を記憶したリネームされたレジスタの内容を前記元のレジスタに記憶するステップと、
を含むことを特徴とするハードウェア装置における命令の非順次的実行方法。
【請求項１０】
前記命令を非順次的に発行するステップにおいて、
フェッチされた前記命令が条件使用命令である場合には、前記有効条件付き命令の実行結果が前記元のレジスタに記憶されるまで待機した後でフェッチされた前記命令を発行することを特徴とする請求項９に記載のハードウェア装置における命令の非順次的実行方法。
【請求項１１】
メモリから条件生成命令をフェッチし、フェッチされた前記条件生成命令を命令発行キューに伝送するステップと、
前記命令発行キューが前記条件生成命令を受信して発行キューエントリーを割り当てた場合に、前記発行キューエントリーに記憶された命令を非順次的に発行するステップと、
発行された前記命令を実行し、実行結果をレジスタ及び条件チェック部に伝送するステップと、
受信された前記実行結果を前記レジスタに記憶するステップと、
前記実行結果を受信した場合に、条件付き命令の条件が満たされているか否かをチェックするステップと、
を含むことを特徴とするハードウェア装置における条件生成命令処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、条件付き命令を支援するハードウェア装置、コンピュータシステム、並びにハードウェア装置における命令の非順次的実行方法及び条件生成命令処理方法に関する。
【背景技術】
【０００２】
近年、プロセッサなどのハードウェア装置は、命令実行の速度がより速くなるように改善されており、一サイクルで同時に（並列的に）複数の命令（instruction）を発行して（issue）実行することが可能になった。
【０００３】
しかしながら、分岐命令（branch instruction）が、プロセッサの性能向上の障害となっており、発行可能な命令を制限している。プロセッサは、分岐命令の分岐予測（branch prediction）のためのハードウェア構造を必要としており、分岐予測を間違えた場合には、分岐命令以降に実行した命令の実行結果を全て消去する必要がある。これらの結果、プロセッサの性能が低下してしまう。
【０００４】
この点につき、一部のプロセッサは、条件付き命令（conditional instruction）を導入し、分岐命令の使用を減らしている。条件付き命令は、特定の条件下でのみ実行される命令である。表１は、分岐命令及び条件付き命令の例を示す表である。
【０００５】
【表１】
2006079623.tif 000003
【０００６】
表１の分岐命令に関して言えば、二つのオペランド（operand）ａと０とを比較する命令ＣＭＰ（instruction CMP）が実行されている。二つのオペランドが同一であるという結果が出た場合には、Ｌ１段階を実行する分岐命令ＢＲＥＱが発行される。
【０００７】
すなわち、条件の実行結果として、命令が順次実行されず、分岐してそれぞれ別の命令を実行するようになっている。
一方、前記比較において二つのオペランドが同一でないという結果が出た場合には、ａに１０を足す命令ＡＤＤ（instruction ADD）を順次実行する。
【０００８】
表１の条件付き命令に関して言えば、全体としては分岐命令と同じ結果を得ることができる。一方、命令ＣＭＰを実行した後に、二つのオペランドが同一であるという結果が出た場合には、ａに１を足す条件付き命令ＡＤＤＥＱが実行される。また、二つのオペランドが同一でないという結果が出た場合には、ａに１０を足す条件付き命令ＡＤＤＮＥが実行される。
【０００９】
このように、条件付き命令は、分岐命令の数を減少させる効果があり、分岐予測の失敗による性能低下を防ぐことができる。分岐命令の数を減少させると、基本プロセッサにより一度に実行可能な命令の大きさを示すブロックサイズを大きくすることができる。
【００１０】
単一サイクルで複数の命令を発行して実行するスーパースケーラプロセッサ（superscalar processor）やＶＬＩＷ（Very Long Instruction Word）プロセッサは、一度に多くの命令を発行することができる。ところが、条件付き命令は、直前の命令の実行から生成された条件によって決まるので、条件付き命令を非順次的に（out of order）実行することは困難であった。
【００１１】
「非順次的に実行する」とは、プロセッサが命令を処理する際にプログラムに従って順次に処理せず、順序に関係なく実行可能な命令を先に処理することを意味する。
【００１２】
そもそも、プロセッサはプログラムの命令を順次（in order）実行するものである。そのため、初期のプロセッサはプログラムを順次実行し、そのようなシステムにおいてレジスタを有するプロセッサの状態は、プログラムにより指定された順番で進むようになっている。
【００１３】
しかし、論理的に判断すれば、先行命令の実行結果に依存するデータ依存性の影響を受けない場合や、命令処理中にリソース衝突（resource conflict）が生じない場合には、ある命令をスキップし、代わりに次の命令を発行して処理した方が良いこともある。このように、命令を非順次的に実行することにより、プロセッサの性能を大きく改善することができる。
【００１４】
条件付き命令を支援する従来のプロセッサとしては、インテル（登録商標）社の「Alpha 21264 マイクロプロセッサ」、「IA-64」や、ＡＲＭ（登録商標）（Advanced RISC Machines）社の「ARM マイクロプロセッサ」などがある。しかし、従来のプロセッサには、条件付き命令を使用している間は、非順次的実行を支援しないという問題がある。これは、直前の命令の実行結果から生成された状態（status）を使用すると、データ依存性が生じるため、非順次実行を支援することが困難になるためである。
【００１５】
条件付き命令の条件が任意のレジスタに記憶されている場合には、レジスタファイルに加えてリードポート（read port）が必要である。また、ソフトウェアを利用して条件付き命令を処理する場合、ＩＳＡ（Instruction Set Architecture：命令セット構造）が変更になり、既存ソフトウェアとの互換性が失われるという問題がある。したがって、プロセッサには、条件付き命令を使用している間に命令を非順次的に実行することが望まれている。
【発明の開示】
【発明が解決しようとする課題】
【００１６】
本発明は、前記した従来の問題点を解決するために創案されたものであり、条件付き命令を非順次的に実行することによって、ハードウェア装置の性能を改善することが可能なハードウェア装置、コンピュータシステム、並びにハードウェア装置における命令の非順次的実行方法及び条件生成命令処理方法を提供することを課題とする。
【課題を解決するための手段】
【００１７】
前記した課題を解決するため、本発明のハードウェア装置は、条件を生成する条件生成命令、前記条件生成命令の実行結果に基づいて実行するか否かが決定される条件付き命令、または前記条件付き命令の実行結果を使用する条件使用命令をフェッチし、前記条件付き命令について、目的オペランドの元のレジスタを別のレジスタにリネームすることにより、フェッチされた命令を非順次的に発行する解読／発行部と、発行された前記命令を実行する少なくとも一つの実行ユニットを有する実行部と、前記条件付き命令のリネーム情報、条件及び実行結果を記憶するリネームされたレジスタを有し、前記条件生成命令の実行結果に基づいて条件が満たされている有効条件付き命令を読み出すことにより、記憶された前記条件付き命令の実行結果を出力する条件処理部と、前記条件処理部により出力された前記条件付き命令の実行結果を前記元のレジスタに記憶するレジスタファイルと、を備えていることを特徴とする。
【００１８】
前記解読／発行部は、命令をフェッチし、フェッチされた前記命令が条件付き命令である場合には、前記目的オペランドの元のレジスタを別のレジスタにリネームしてフェッチされた前記命令を出力し、フェッチされた前記命令が条件使用命令である場合には、前記有効条件付き命令の実行結果が前記元のレジスタに記憶されるまで待機した後でフェッチされた前記命令を出力する解読部と、前記解読部から出力された前記命令を発行キューエントリーに割り当て、割り当てられた前記命令を実行するために使用可能な実行ユニットが前記実行部にある場合に、割り当てられた前記命令を前記実行部に発行する命令発行キューと、を備えていることが望ましい。
【００１９】
前記条件処理部は、前記命令発行キューにより前記条件生成命令に割り当てられたエントリーを指示する条件生成ポインタと、前記解読部から受信したリネームされたレジスタ情報及び元のレジスタ情報であるリネーム情報、条件及び前記条件生成ポインタにより指示されたエントリーを記憶するバッファエントリーを少なくとも一つの前記条件付き命令に割り当てる条件付き実行バッファと、前記条件生成命令の実行結果が前記実行部から受信された場合に、前記条件生成命令の実行結果に基づいて実行するか否かが決定される前記条件付き命令の条件を前記条件付き実行バッファに要請し、前記条件生成命令の実行結果と比較して条件を満たす条件付き命令を選択する条件チェック部と、前記実行部から前記条件付き命令の実行結果を受信し、前記条件付き命令の実行結果をリネームされたレジスタに一時記憶する条件付き実行レジスタファイルと、を備えていることが望ましい。
【００２０】
前記条件付き実行バッファは、前記条件チェック部での条件チェックに基づく条件を満たす有効条件付き命令であるか否かを示すバッファをバッファエントリーごとに備えていることが望ましい。
【００２１】
また、前記条件付き実行バッファは、前記条件付き命令に割り当てられたバッファエントリーが使用されているか否かを示すバッファをバッファエントリーごとに備え、前記解読部が新たにフェッチされた条件付き命令のためにリネームする場合に、前記バッファエントリーが使用されることが望ましい。
【００２２】
前記条件付き実行レジスタファイルは、リネームされた前記レジスタが使用されているか否かを前記レジスタと共に表示し、前記解読部が新たな条件付き命令のためにレジスタをリネームする場合に、前記レジスタを使用可能にすることが望ましい。
【００２３】
前記解読部は、フェッチされた前記命令が前記条件付き実行バッファに記憶された元のレジスタをソースオペランドとして使用する場合に、前記命令が条件使用命令語であると判定することが望ましい。
【００２４】
また、本発明のコンピュータシステムは、前記したハードウェア装置を用いて条件付き命令を非順次的に実行することを特徴とする。
【００２５】
また、本発明のハードウェア装置における命令の非順次的実行方法は、条件を生成する条件生成命令、前記条件生成命令語の実行結果に基づいて実行するか否かが決定される条件付き命令、または前記条件付き命令の実行結果を使用する条件使用命令をフェッチするステップと、前記条件付き命令について、目的オペランドの元のレジスタを別のレジスタにリネームすることにより、フェッチされた命令を実行のために発行する際に、フェッチされた前記命令を非順次的に発行するステップと、前記条件付き命令のリネーム情報及び条件を個別に記憶するステップと、発行された前記命令を実行し、前記条件付き命令の実行結果をリネームされたレジスタに記憶するステップと、記憶された前記リネーム情報及び前記条件を利用して、前記条件生成命令の実行が完了した場合に、その結果に基づいて条件が満たされている有効条件付き命令を選択するステップと、前記有効条件付き命令の実行結果を記憶したリネームされたレジスタの内容を前記元のレジスタに記憶するステップと、を含むことを特徴とする。
【００２６】
また、前記命令を非順次的に発行するステップにおいて、フェッチされた前記命令が条件使用命令である場合には、前記有効条件付き命令の実行結果が前記元のレジスタに記憶されるまで待機した後でフェッチされた前記命令を発行することが望ましい。
【００２７】
また、本発明のハードウェア装置における条件生成命令処理方法は、メモリから条件生成命令をフェッチし、フェッチされた前記条件生成命令を命令発行キューに伝送するステップと、前記命令発行キューが前記条件生成命令を受信して発行キューエントリーを割り当てた場合に、前記発行キューエントリーに記憶された命令を非順次的に発行するステップと、発行された前記命令を実行し、実行結果をレジスタ及び条件チェック部に伝送するステップと、受信された前記実行結果を前記レジスタに記憶するステップと、前記実行結果を受信した場合に、条件付き命令の条件が満たされているか否かをチェックするステップと、を含むことを特徴とする。
【発明の効果】
【００２８】
本発明によれば、条件付き命令を非順次的に実行することができる。また、レジスタをリネームすることにより、条件付き命令のデータ依存性を除去している。実行部の数が十分な場合には、条件生成命令及び条件付き命令を一サイクルで実行し、実行結果を選択することができる。さらに、システム全体の実行速度も向上する。
【００２９】
また、ハードウェアである条件付き実行バッファが非順次的実行を処理するので、余計な命令を追加する必要がない。
【００３０】
また、レジスタをリネームしたにも関わらず、条件付き命令が事項条件を満たさないために実行済みの条件付き命令が無効になったとしても、条件付き実行バッファのエントリーを消去して復旧することができ、レジスタを個別に復旧する必要がない。
【００３１】
既存のプログラムを使用する場合であっても、ハードウェアにおける従来のＩＳＡ（Instruction Set Architecture）を変更しなくて済む。
【発明を実施するための最良の形態】
【００３２】
以下、図面に基づいて、本発明の実施形態について詳細に説明する。参照図面において、同一の構成には同一の符号を付している。
【００３３】
図１は、本発明の実施形態に係るハードウェア装置のブロック図である。
【００３４】
本発明のハードウェア装置は、マイクロプロセッサ、コンピュータシステムなどに適用可能である。ハードウェア装置は、電気的に記憶された命令（instruction）に基づいて動作を実行する。
【００３５】
本発明のハードウェア装置は、条件付き命令（conditional instruction）を実行することができる。また、本発明の実施形態に係るハードウェア装置は、一部または全ての実行可能な命令に対して条件付き命令を支援することができる。
【００３６】
本発明のハードウェア装置は、条件付き命令の非順次的実行（out-of-order instruction）を支援するために提案されたものである。そのために、複数の物理的な目的レジスタ（physical destination register）を条件付き命令に関する目的オペランド（destination operand）のレジスタに割り当てるリネーム（rename）という手法が使用されている。以下、図２を参照してリネームについて説明する。
【００３７】
図２は、条件付き命令のリネームを説明するための図である。図２に示すように、命令セット（instruction set）Ａはリネームされる前の命令セットであり、命令セットＢは、命令セットＡの一部がリネームされた命令セットである。
【００３８】
命令セットＡに関して言えば、命令ＣＭＰは、レジスタｒ１の内容が０と同一であるか否かを比較するものである。レジスタｒ１の内容が０と同一である場合には、レジスタｒ１の内容に１を足して目的オペランド（destination operand）であるレジスタｒ２に結果を記憶する命令ＡＤＤＥＱが発行される。一方、レジスタｒ１の内容が０と異なる場合には、レジスタｒ１の内容に１０を足してレジスタｒ２に結果を記憶する命令ＡＤＤＮＥが発行される。
続いて、レジスタｒ２に記憶された結果に１００を足して目的オペランドであるレジスタｒ３に得られた結果を記憶する命令ＡＤＤが発行される。
【００３９】
命令ＣＭＰの条件を実行すると、次の命令ＡＤＤＥＱ，ＡＤＤＮＥのどちらを実行するかを判定することができるようになる。以下、命令ＣＭＰなど、どの条件付き命令を実行するかを決定する命令を「条件生成命令（condition setter instruction）」と称す。
【００４０】
条件生成命令の実行結果によりある条件が満たされた場合にのみ、対応する命令を実行することができる条件付き命令がある。例えば、命令ＡＤＤＥＱ，ＡＤＤＮＥなどが条件付き命令である。
【００４１】
条件使用命令（condition user instruction）は、条件付き命令の実行結果を使用する命令である。命令セットＡにおいて、命令ＡＤＤは、条件付き命令ＡＤＤＥＱ，ＡＤＤＮＥから有効な条件付き命令が選択され、その実行結果がレジスタｒ２に記憶された場合にのみ実行される。したがって、条件生成命令及び条件付き命令が同時に実行可能であっても、条件使用命令は、的確な条件が決定されるまで実行されない。
【００４２】
命令セットＡの命令ＡＤＤＥＱは、命令ＣＭＰの実行結果に基づいて以降処理すべきものを予定し、命令ＣＭＰの実行結果が得られる前に実行し、レジスタｒ２に記憶することが可能である。しかし、命令ＡＤＤＮＥが既にレジスタｒ２を使用しており、命令ＣＭＰの実行結果が得られていないので、命令ＡＤＤＮＥは、命令ＣＭＰや命令ＡＤＤＥＱと同時に（並列的に）実行することができない。そのため、各命令は、順次実行しなければならない。
【００４３】
命令セットＢは、条件付き命令の目的オペランドから互いに異なるレジスタにリネームされた命令を含んでおり、点線で示すＡ’のレジスタｒ２が、点線で示すＢ’のＣ＿ｒ０，Ｃ＿ｒ１のそれぞれに再び割り当てられている。したがって、命令ＡＤＤＥＱ，ＡＤＤＮＥは、命令ＣＭＰの実行結果を待つ必要がなく、命令ＣＭＰと同時に（並列的に）実行することができ、これらの結果がそれぞれＣ＿ｒ０，Ｃ＿ｒ１に記憶される。命令ＣＭＰの実行結果が得られた場合には、これらの実行結果の中から条件を満たす条件付き命令の実行結果のみが取得され、それ以外は捨てられる。結果として、命令セットＢにおける条件使用命令である命令ＡＤＤは、他の命令と同時に実行することができない。
【００４４】
ただし、本発明の他の実施形態では、複数の命令を同時に（並列的に）実行するために、一部または全ての命令をリネームしてもよい。この場合において、命令セットＡは、並列処理のため既にリネームされたものであり、非順次的実行のためのリネームに関与する命令セットＡのＡ’に対しても並列処理のためのリネームを先に行うことができる。
【００４５】
図１に戻り、図２の命令セットが実行された場合におけるハードウェア装置について詳細に説明する。
【００４６】
本発明のハードウェア装置１００は、コンピュータシステム内に備えることができる。そして、ハードウェア装置１００は、コンピュータシステム内に備えられたメモリ（図示せず）、キャッシュ（図示せず）、入出力インターフェース（図示せず）及びバス構造（図示せず）に接続されている。また、ハードウェア装置１００は、バス構造を利用することにより、ハードディスクドライブ（図示せず）などの記憶装置、及び、モニター、キーボード、モデムなどのコンピュータシステムの周辺機器に接続するためのインターフェースに接続されている。
【００４７】
また、本発明のハードウェア装置１００は、キャッシュ（図示せず）、入出力インターフェース（図示せず）及びバス構造（図示せず）を備えたプロセッサ内に備えることができる。
【００４８】
本発明のハードウェア装置１００は、メモリ（図示せず）に記憶されたプログラムの命令をキャッシュ（図示せず）を介して読み取って実行する。このようにすることで、ハードウェア装置１００は、プログラムが所望する処理及び動作を実行する。
【００４９】
図１に示すように、本発明のハードウェア装置１００は、解読／発行部（decode and issue section）１１０と、実行部（execution section）１３０と、条件処理部（condition processing section）１５０と、レジスタファイル（register file）１７０と、を備えている。
【００５０】
命令発行キュー（instruction issue queue）１０３及び実行部１３０は、命令バス（instruction bus）１１１を介して接続されている。実行部１０３、レジスタファイル１７０、条件チェック部（condition checker）１５５及び条件付き実行レジスタファイル（conditional execution register file）１５７は、結果バス（result bus）１１３を介して接続されている。レジスタファイル１７０は、オペランドバス（operand bus）１１５を介して実行部１３０に接続されている。
【００５１】
解読／発行部１１０は、解読部（decoder：デコーダ部ともいう）１０１と、命令発行キュー１０３と、を備えている。解読／発行部１１０は、メモリ（図示せず）から命令をフェッチし（fetch）、条件付き命令をリネームし、実行のために実行部１３０に非順次的に発行する。
【００５２】
解読部１０１は、メモリ（図示せず）に記憶されたプログラムから実行すべき命令をフェッチし、フェッチされた命令を命令発行キュー１０３に伝送する。ハードウェア装置１００がスーパースケーラ構造を支援する場合には、解読部１０１は、一サイクルで同時に複数の命令をフェッチすることができる。
【００５３】
条件付き命令は、目的オペランドのレジスタをリネームするために解読され、命令発行キュー１０３及び条件付き実行バッファ（conditional execution buffer）１５３に伝送される。解読部１０１は、リネームされたレジスタに関する情報を条件付き実行レジスタファイル（conditional execution register file）１５７に伝送する。
【００５４】
フェッチされた命令が条件使用命令であると判定された場合には、有効条件付き命令（valid conditional instruction）が選択され、有効条件付き命令がレジスタファイル１７０の対応するファイルに記憶されてから、命令が命令発行キュー１０３に伝送される。
【００５５】
命令発行キュー１０３は、最上位ポインタ（top pointer：トップポインタともいう）及び最下位ポインタ（bottom pointer：ボトムポインタともいう）を使用してキューのエントリーの割り当て及び除去を繰り返しながら、最上位ポインタと最下位ポインタとの間の有効な命令を非循環的に実行部１３０に発行する。最上位ポインタは、新たに入力される命令を記憶するエントリーを指し、最下位ポインタは、命令発行キューのエントリーのうち最も古いエントリーを指す。命令が非順次的に発行されるので、先行するエントリーより次のエントリーが先に発行されることがある。
【００５６】
エントリー内の命令に対し、ソースレジスタ（source register）及びソース条件レジスタ（source condition register）のデータが用意され、実行部１３０に利用可能な実行ユニット（executor）がある場合には、命令発行キュー１０３は、各命令を実行部１３０に発行する。
【００５７】
実行部１３０は、命令の実質的な実行に関与している。実行部１３０は、少なくとも一つの実行ユニットを備えている。実行部１３０は、命令バス（instruction bus）１１１を介して命令発行キュー１０３から命令を受信し、オペランドバス１１５を介してレジスタファイル１７０から命令実行のためのオペランド値を読み取る。実行部１３０で実行された命令の結果は、結果バス１１３を介してレジスタファイル１７０、条件チェック部１５５及び条件付き実行レジスタファイル１５７に伝送される。
【００５８】
条件処理部（condition processing section）１５０は、最新条件生成ポインタ（ＬＣＳＰ：Latest condition Setting Pointer）１５１と、条件付き実行バッフア１５３と、条件チェック部１５５と、条件付き実行レジスタファイル１５７と、を備えている。
ＬＣＳＰ１５１が、特許請求の範囲における「条件生成ポインタ」の一例である。
【００５９】
条件付き命令が解読部１０１から命令発行キュー１０３に伝送されると、ＬＣＳＰ１５１は、命令発行キュー１０３から割り当てられたエントリー（以下、発行キューエントリー（issue queue entry）という）であるエントリー９０００を指定し、対応する発行キューのエントリー情報を条件付き実行バッファに伝送する。
【００６０】
条件付き実行バッフア１５３は、本発明の実施形態に係る条件付き命令の非順次的実行のためのリネームを支援する。条件付き命令が命令発行キュー１０３に伝送されると、条件付き実行バッファ１５３は、リネームされた条件付き命令のために一つのエントリー（以下、実行バッファエントリー（execution buffer entry）という）を割り当てる。表２に示すように、各エントリーは、条件生成ポインタ（ＣＳＰ：Condition Setting Pointer）と、実行条件（ＣＯＮＤ：execution CONDition）と、元のレジスタ（ＯＲ：Original Register）と、リネームされたレジスタ（ＲＲ：Renamed Register）と、条件の有効さ（ＣＶ：Condition Valid）と、有効さ（Ｖ：Valid）と、を備えている。
条件付き実行バッファ１５３は、有効条件付き命令であるか否かを示すバッファをバッファエントリーごとに備えており、条件付き命令に割り当てられたバッファエントリーが使用されているか否かを示すバッファをバッファエントリーごとに備えている。
【００６１】
表２は、条件付き命令ＡＤＤＥＱ，ＡＤＤＮＥを処理するために割り当てられ、設定された条件付き実行バッファのエントリーを示す表である。
【００６２】
【表２】
2006079623.tif 000004
【００６３】
表２では、二つのエントリーが二つの条件付き命令に割り当てられている。
【００６４】
ＣＳＰは、ＬＣＳＰ１５１により指示された条件生成命令の発行キューエントリーを記憶している。条件生成命令の実行結果が得られた場合には、その結果を使用する条件付き命令は、条件付き実行バッファ１５３から確認できるようにする。
【００６５】
ＣＯＮＤは、各条件付き命令の条件を記憶している。図２に示す命令セットＢに関して言えば、足し算をするための条件である条件ＥＱ（同一な場合を表示）と、条件ＮＥ（同一でない場合を表示）とが記憶されている。
【００６６】
ＯＲは、条件付き命令の元の目的オペランドのレジスタを記憶している。ＲＲは、リネームされた目的オペランドのレジスタを記憶している。
【００６７】
ＣＶは、対応するＣＯＮＤの条件を満たした有効条件付き実行命令であるか否かを示している。
好ましくは、有効なエントリーであれば、ＣＶを１に設定し、条件を満たさない無効なエントリーであれば、ＣＶを０に設定する。条件生成命令の実行結果が出るまでは、ＣＶを全て０に設定することができる。
【００６８】
Ｖは、エントリーの管理のためのバッファである。対応するエントリーが無効なエントリーであると判定された場合には、対応するエントリー全体をクリアする代わりにＶを０に設定することによって、対応するエントリーを次の条件付き命令に対してエントリーを割り当てるために使用することができる。
【００６９】
条件チェック部１５５から条件生成命令の発生キューエントリーと同じ実行バッファエントリーのＣＯＮＤを伝送することの要請（request）を受信すると、条件付き実行バッファ１５３は、ＣＳＰを読み出し、条件生成命令の発行キューエントリー９０００と同じ実行バッファエントリーのＣＯＮＤを条件チェック部１５５に伝送する。
【００７０】
結果バス１１３を介して実行部１３０から条件生成命令の実行結果及び対応する発行キューエントリー９０００を受信すると、条件チェック部１５５は、対応する条件生成命令の発行キューエントリー９０００と同じＣＳＰを有する実行バッファエントリーのＣＯＮＤデータを条件付き実行バッファ１５３に要請する。続いて、条件チェック部１５５は、受信したＣＯＮＤを条件生成命令の実行結果と比較する。条件付き実行バッファ１５３のエントリーのうち、条件を満たすエントリーのＣＶを１に設定する。
【００７１】
条件付き実行レジスタファイル１５７は、データバッファ（data buffer：図１の「Data」の列）と、有効バッファ（valid buffer：図１の「Valid」の列）と、を備えている。条件付き実行レジスタファイル１５７は、解読部１０１から条件付き命令のリネームされたレジスタに関する情報を受信して有効バッファを設定する。
【００７２】
結果バス１１３を介して、実行部１３０で実行された条件付き命令の実行結果がリネームされた目的オペランドのレジスタアドレス（register address）と共に伝送されると、条件付き実行レジスタファイル１５７は、対応する実行結果を対応するレジスタのデータバッファに記憶する。例えば、図２に示す命令セットＢに関して言えば、命令ＡＤＤＥＱの実行結果がＣ＿ｒ０に記憶され、命令ＡＤＤＮＥの実行結果がＣ＿ｒ１に記憶される。
【００７３】
条件チェック部１５５での条件チェックに基づき有効条件付き命令が選択されると、条件付き実行バッファ１５３のＲＲにより指定されたレジスタに記憶された対応する値は、最終的には、条件付き実行バッファ１５３のＯＲにより指定されたレジスタファイル１７０に記憶される。
【００７４】
レジスタファイル１７０は、命令実行に必要なソースオペランドのレジスタ値を実行部１３０に伝送し、実行部１３０から命令の実行結果を受信して、対応する目的オペランドのレジスタに実行結果を記憶する。さらに、レジスタファイル１７０は、条件付き実行レジスタファイル１５７から有効条件付き命令の実行結果を受信し、ＯＲにより指定されたレジスタに実行結果を記憶する。
【００７５】
以下、図３ないし図５を参照して、図２の命令セットに基づく命令の実行過程をタイプごとに説明する。図３ないし図５では、命令の実行過程をタイプごとに個別に説明しているが、命令のうち、条件生成命令及び条件付き命令が並列処理及び非順次実行処理可能であることを前提としている。
【００７６】
図３は、本発明の実施形態に係るハードウェア装置が条件生成命令を処理する過程を説明するためのフローチャートである。
【００７７】
図１及び図３に示すように、メモリ（図示せず）から条件生成命令ＣＭＰがフェッチされると、解読部１０１は、フェッチされた条件生成命令ＣＭＰを命令発行キュー１０３に伝送する。ハードウェア装置１００がスーパースケーラ構造を支援している場合には、解読部１０１は、単一サイクルで同時に複数の異なる命令をフェッチすることができる（ステップＳ３０１）。
【００７８】
命令発行キュー１０３が条件生成命令を受信し、エントリー９０００を割り当てると、ＬＣＳＰ１５１は、割り当てられたエントリー（発行キューエントリー）９０００を指示する。命令発行キュー１０３は、発行キューのエントリーに記憶された命令を非順次的に発行しつつ、条件生成命令を対応する実行部１３０に発行する（ステップＳ３０３）。
【００７９】
実行部１３０は、オペランドバス１１５を介してレジスタファイル１７０から、命令ＣＭＰに対するソースオペランドｒ１のレジスタに記憶された対応する命令を受信し、実行する。実行部１３０は、実行結果をレジスタファイル１７０及び条件チェック部１５５に伝送する（ステップ３０５）。
【００８０】
レジスタファイル１７０は、実行部１３０から受信した実行結果を対応する目的オペランドのレジスタに記憶する。ただし、目的オペランドを有さない命令ＣＭＰは、レジスタファイル１７０に記憶されない（ステップＳ３０７）。
【００８１】
ステップＳ３０５において、条件生成命令の実行結果を受信すると、条件チェック部１５５は、条件付き命令の条件が満たされているか否かに関わらず、条件付き命令の実行結果が条件付き実行レジスタファイル１５７に記憶されているか否かをチェックする。
【００８２】
より詳細には、対応する条件生成命令に関する条件付き命令を読み出すために、条件チェック部１５５は、条件生成命令の発行キューエントリーと同じＣＳＰを有する実行バッファエントリーのＣＯＮＤ値を要請する。条件付き実行バッファ１５３は、ＣＳＰに９０００として記憶された実行バッファを読み出し、条件ＥＱ，ＮＥを条件チェック部１５５に伝送する。
【００８３】
条件チェック部１５５は、ＣＯＮＤの条件を用いて条件を満たす条件付き命令を読み出し、ＣＶを１に設定する。ＣＭＰの実行結果において、ｒ１に記憶された値が０と同一で、条件ＥＱを満たす場合には、命令ＡＤＤＥＱが有効条件付き命令になり、命令ＡＤＤＮＥが無効条件付命令になる。したがって、表２に示すように、第１エントリー（表２の２行目）のＣＶを１に設定し、第２エントリー（表２の３行目）のＣＶを０に設定する（ステップＳ３０９）。
【００８４】
このようにして、条件生成命令の処理が完了する。ただし、図４に示す条件付き命令の実行が完了するためには、条件生成命令の実行結果が必要である。
【００８５】
図４は、本発明の実施形態に係るハードウェア装置が条件付き命令を非順次的に実行する過程を説明するためのフローチャートである。
【００８６】
図１及び図４に示すように、メモリ（図示せず）から条件付き命令ＡＤＤＥＱ，ＡＤＤＮＥがフェッチされると（ステップＳ４０１）、解読部１０１は、命令発行キュー１０３に伝送する前に、これらをリネームする（ステップＳ４０３）。そのために、解読部１０１は、条件付き実行レジスタファイル１５７の有効バッファをチェックすることにより、使用可能なレジスタに目的オペランドのレジスタをリネームする。解読部１０１は、リネームされた条件付き命令を命令発行キュー１０３に伝送し、それと同時にリネームされたレジスタ情報Ｃ＿ｒ０，Ｃ＿ｒ１を条件付き実行レジスタファイル１５７に伝送する。
【００８７】
命令発行キュー１０３が条件付き命令を受信してエントリーを割り当てると、条件付き実行バッファ１５３も、条件付き命令のための実行バッファエントリーを割り当てる。
【００８８】
命令ＡＤＤＥＱに関して言えば、ステップＳ３０３において、条件付き実行バッファ１５３は、表２に示す第１エントリーのように、ＬＣＳＰ１５１により指示された条件生成命令の発行キューエントリー９０００をＣＳＰに記憶し、条件ＥＱをＣＯＮＤに記憶する。条件付き実行バッファ１５３は、元のレジスタｒ２をＯＲに記憶し、リネームされたレジスタＣ＿ｒ０をＲＲに記憶し、ＣＶを０に設定し、Ｖを１に設定する。
【００８９】
命令発行キュー１０３は、発行キューのエントリーに記憶された命令を非順次的に発行しつつ、条件付き命令を対応する実行部１３０に発行する。かかる命令は、ステップＳ３０３における条件生成命令である命令ＣＭＰの発行と同時に発行可能である。すなわち、命令が非順次的に発行される（ステップＳ４０５）。
【００９０】
実行部１３０は、オペランドバス１１５を介してレジスタファイル１７０から、対応する命令ＡＤＤＥＱに対するソースオペランドのレジスタｒ１に記憶されたオペランドを受信し、対応する命令を実行する（ステップＳ４０７）。
【００９１】
実行部１３０は、命令の実行結果を条件付き実行レジスタファイル１５７のリネームされたレジスタに伝送して記憶させる（ステップＳ４０９）。例えば、図２に示す命令ＡＤＤＥＱは、レジスタＣ＿ｒ０に伝送される。
【００９２】
条件のチェックが完了し、有効条件付き命令が選択され、対応する実行バッファエントリーにＣＶが設定されると、条件付き実行レジスタファイル１５７は、対応する実行バッファエントリーのＲＲにより指定されたレジスタの値を読み出し、ＯＲにより指定されたレジスタファイル１７０の元のレジスタに記憶させる（ステップＳ４１１）。
【００９３】
このようにして、条件付き命令が実行される。
【００９４】
図５は、本発明の実施形態に係るハードウェア装置が条件使用命令を処理する過程を説明するためのフローチャートである。
【００９５】
図１及び図５に示すように、命令をフェッチした後（ステップＳ５０１）、フェッチされた命令が条件生成命令や条件付き命令ではない一般的な命令である場合には、解読部１０１は、ソースオペランドのレジスタｒ２が条件付き実行バッファ１５３のＯＲで指定されているか否かをチェックすることにより、フェッチされた命令が条件生成命令であるか否かを判定する。図２に示す命令ＡＤＤは、条件付き命令の目的オペランドｒ２をソースオペランドとして使用する。表２では、ステップＳ４０５の実行結果として、ｒ２がＯＲとして割り当てられているので、命令ＡＤＤが条件使用命令となる。
【００９６】
条件使用命令であると判定すると、解読部１０１は、ステップＳ４１１の実行結果に基づいて、有効条件付き命令が選択されているか否かを判定する（ステップＳ５０３）。有効条件付き命令が選択されている場合には（ステップＳ５０３でＹｅｓ）、解読部１０１は、条件使用命令を命令発行キュー１０３に伝送する。
【００９７】
命令発行キュー１０３は、エントリーを条件使用命令に割り当て、命令を実行部１３０に非順次に発行する（ステップＳ５０５）。実行部１３０が条件使用命令を実行すれば（ステップＳ５０７）、実行結果がレジスタファイル１７０に記憶される（ステップＳ５０９）。
【００９８】
このようにして、各種の命令が実行される。図３ないし図５において各種の命令を個別に説明したが、これらは同時に（並列的に）実行されることを前提としている。
【００９９】
ステップＳ３０３，３０５における条件生成命令の実行と、ステップＳ４０５，Ｓ４０７における条件付き命令の実行とは、リネームされたレジスタを使用することにより互いのデータ依存性を有さないので、条件生成命令及び条件付き命令は、命令発行キュー１０３により同時に（並列的に）実行され、また非順次的に実行される。
【０１００】
したがって、ハードウェア装置１００は、条件付き命令を非順次的に実行することができる。
【０１０１】
以上、本発明の好適な実施形態について図面を参照して説明したが、本発明は、前記した実施形態に限定されるものではなく、特許請求の範囲で請求している本発明の要旨を逸脱することなく当該発明の属する技術分野における通常の知識を有する者であれば誰でも種々の変形実施が可能であることはもとより、そのような変更は、本発明の特許請求の範囲に含まれることは自明である。
【図面の簡単な説明】
【０１０２】
【図１】本発明の実施形態に係るハードウェア装置のブロック図である。
【図２】条件付き命令のリネームを説明するための図である。
【図３】本発明の実施形態に係るハードウェア装置が条件生成命令を処理する過程を説明するためのフローチャートである。
【図４】本発明の実施形態に係るハードウェア装置が条件付き命令を非順次的に実行する過程を説明するためのフローチャートである。
【図５】本発明の実施形態に係るハードウェア装置が条件使用命令を処理する過程を説明するためのフローチャートである。
【符号の説明】
【０１０３】
１００  ハードウェア装置
１１０  解読／実行部
１３０  実行部
１５０  条件処理部
１７０  レジスタファイル
【図１】
2006079623.tif 000005
【図２】
2006079623.tif 000006
【図３】
2006079623.tif 000007
【図４】
2006079623.tif 000008
【図５】
2006079623.tif 000009