(57)【要約】【課題】レジスタ更新命令のデコード時に、ソースデータの更新保留中の有無に係らず論理を簡略化することで、高い動作周波数でリザベーションステーションへのデータ格納を可能とする。【解決手段】ソースデータを格納する汎用レジスタ毎に、最新のレジスタ更新データを格納する最新レジスタ更新バッファ４８を割付けて準備する。最新レジスタ更新データ処理部２２は、最新レジスタ更新バッファ４８に最新のレジスタ更新データとして、レジスタ更新命令が投機実行されていないときは汎用レジスタの値を格納し、投機実行されたときはその実行結果を上書きする。マッチング処理部９２は、命令デコード時に、最新レジスタ更新バッファ４８から最新のレジスタ更新データを読出してリザベーションステーション２６のデータ領域に格納する。【選択図】　　　　　図１
2004038752.tif 000002
【特許請求の範囲】
【請求項１】
ソースデータを格納する汎用レジスタ毎に割当られ、最新のレジスタ更新データを格納するバッファと、
前記バッファにレジスタ更新命令の投機実行の有無に応じて最新のレジスタ更新データを格納するバッファ制御部と、
命令デコード時に、前記バッファから最新のレジスタ更新データを読出してリザベーションステーションのデータ領域に格納する格納制御部と、
を備えたことを特徴とするプロセッサ。
【請求項２】
請求項１記載のプロセッサに於いて、前記バッファ制御部は、命令の投機実行により得られた最新のレジスタ更新データを前記バッファに格納することを特徴とするプロセッサ。
【請求項３】
請求項１記載のプロセッサに於いて、前記バッファ制御部は、投機実行されている命令が破棄された時に、汎用レジスタのデータを前記バッファに格納することを特徴とするプロセッサ。
【請求項４】
請求項１記載のプロセッサに於いて、前記バッファ制御部は、命令デコード時にレジスタアドレスにより前記バッファの参照で最新のレジスタ更新データを読出して前記リザベーションステーションのデータ領域に格納することを特徴とするプロセッサ。
【請求項５】
動的パイプラインスケジューリングにより命令を実行するプロセッサの命令制御方法に於いて、
バッファ制御部により、ソースデータを格納する汎用レジスタ毎に割当られたバッファにレジスタ更新命令の投機実行の有無に応じて最新のレジスタ更新データを格納するバッファ制御ステップと、
命令デコード時に、前記バッファから最新のレジスタ更新データを読出してリザベーションステーションのデータ領域に格納する格納制御ステップと、
を備えたことを特徴とする命令制御方法。
【請求項６】
コンデションコードを格納するレジスタ毎に割当られ、最新のコンデションコードレジスタ更新データを格納するバッファと、
前記バッファに、コンデションコードレジスタ更新命令の投機実行の有無に応じて最新のコンデションコードレジスタ更新データをセットするバッファ制御部と、
命令デコード時に、前記バッファから最新のコンデションコードレジスタ更新データを読出してリザベーションステーションのコンデションコードデータ領域に格納する格納制御部と、
を備えたことを特徴とするプロセッサ。
【請求項７】
請求項６記載のプロセッサに於いて、前記バッファ制御部は、命令の投機実行により得られた最新のコンデションコードレジスタ更新データを前記バッファに格納することを特徴とするプロセッサ。
【請求項８】
請求項６記載のプロセッサに於いて、前記バッファ制御部は、投機実行されている命令が破棄された時に、コンデションコードレジスタのデータを前記バッファにセットすることを特徴とするプロセッサ。
【請求項９】
請求項６記載のプロセッサに於いて、前記バッファ制御部は、命令デコード時にコンデションコードレジスタのアドレスにより前記バッファの参照で最新のコンデションコードレジスタ更新データを読出して前記リザベーションステーションのコンデションコードデータ領域に格納することを特徴とするプロセッサ。
【請求項１０】
動的パイプラインスケジューリングにより命令を実行するプロセッサの命令制御方法に於いて、
バッファ制御部により、コンデションコードを格納するレジスタ毎に割当られたバッファに、コンディションコードレジスタ更新命令の投機実行の有無に応じて最新のコンデションコードレジスタ更新データをセットするバッファ制御ステップと、
命令デコード時に、前記バッファから最新のコンデションコードレジスタ更新データを読出してリザベーションステーションのコンデションコードデータ領域に格納する格納制御ステップと、
を備えたことを特徴とする命令制御方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、動的パイプラインスケジューリングにより命令を実行するプロセッサ及び命令制御方法に関し、特に、命令デコード時にリザベーションステーションのデータ領域にレジスタ更新データを格納するためのプロセッサ及び命令制御方法に関する。
【０００２】
【従来の技術】
従来、動的パイプラインスケジュールを実行するプロセッサにあっては、プログラム順序に依存したインオーダーの命令発行部、プログラムの順番に依存しないアウトオブオーダーの命令実行部、更に、プログラム順序に依存したインオーダーの確定部（コミット）という３つに分かれて処理を実行する。
【０００３】
即ち、命令発行部は、インオーダーにより命令をフェッチしてデコードし、リザベーションステーションに命令操作（オペコード）とオペランドを保持させる。命令実行部は、リザベーションステーションに全てのオペランドが準備され、演算器が利用可能となり次第、アウトオブオーダーで投機的に命令を実行し、結果を得る。確定部は、分岐予測結果などに基づき命令の確定を判別してインオーダーで命令を完了させ、実行結果をレジスタファイルまたはメモリ（ストアの場合のみ）に入れる。
【０００４】
このような動的パイプラインスケジューリングを採用したプロセッサにあっては、命令発行部でレジスタ更新命令を解読した場合、リザベーションステーションの割当エントリにおけるデータ領域にレジスタ更新データを格納する制御を、例えば図１２のように行っている。
【０００５】
図１２において、例えば命令語レジスタ２００−１にフェッチされたレジスタ更新命令をデコードした時に、ソースデータがレジスタ更新バッファ２０４上に存在せず、リネーミングマップ２０５に登録されずに更新保留中でない場合は、汎用レジスタファイル２０２の対応する汎用レジスタ２０２−３からデータ信号２１４を読み出しリザベーションステーション２０６のデータ領域２３２に格納している。
【０００６】
即ち、レジスタアドレス信号２１２により汎用レジスタファイル２０２の対応する汎用レジスタ２０２−３からデータ信号２１４を読み出し、ペンディングビット信号２２０のオフにより切替っているセレクタ２１６からリザベーションステーション２０６の中の割当エントリ２０６−１におけるデータ領域２３２にデータ信号２１４を格納している。
【０００７】
ここで、データ領域２３２を各エントリにつき点線のようにまとめた部分を、通常、データリザベーションステーション２３４と呼んでいる。
【０００８】
一方、命令語レジスタ２００−１にフェッチされたレジスタ更新命令をデコードした時に、ソースデータがレジスタ更新バッファ２０４上に存在し、リネーミングマップ２０５に登録されて更新保留中である場合は、ソースデータのリネーミングレジスタであるレジスタ更新バッファ２０４の割当バッファ２０４−３からデータを読み出してリザベーションステーション２０６のデータ領域２３２に格納する。
【０００９】
即ち、ソースデータを格納している汎用レジスタ２０２−３のレジスタアドレス信号２２４によりリネーミングマップ２０５を参照して割当バッファアドレス２１０を取得し、割当バッファアドレス信号２２６によりレジスタ更新バッファ２０４の割当バッファ２０４−３を参照し、レジスタ更新データ２２８を読出し、このとき更新保留中を示すペンデングビット２０８によりオンしているペンディングビット信号２２０のにより切替っているセレクタ２１６からリザベーションステーション２０６の中の割当エントリ２０６−１におけるデータ領域２３２にレジスタ更新データ２２８を格納している。
【００１０】
このようなリザベーションステーションのデータ領域、即ちデータリザベーションステーションに対するレジスタ更新データの格納制御には、汎用レジスタのデータ以外に、ＳＰＡＲＣ命令アーキテクチャーを採用したプロセッサにあっては、コンデションコード（以下の説明で省略表現する場合は「ＣＣ」という）をソースデータとして更新するＣＣレジスタ更新命令がある。このコンデションコードには、ネガティブ、ゼロ、オーバーフロー、キャリーといった数値演算命令の実行結果の状態を示すコードが使用される。
【００１１】
このためＣＣレジスタ更新命令をデコードした場合にも、汎用レジスタの更新命令の場合と同様にして、データリザベーションステーションにＣＣレジスタ更新データを格納する制御を図１３のように行う。
【００１２】
図１３において、例えば命令語レジスタ３００−１にフェッチされたＣＣレジスタ更新命令をデコードした時に、ＣＣソースデータはＣＣレジスタ更新バッファ３０４上に存在せず、ＣＣリネーミングマップ３０５に登録されずに更新保留中でない場合は、ＣＣレジスタ３０２からＣＣデータ信号３１４を読み出しリザベーションステーション３０６のＣＣデータ領域３３２に格納している。
【００１３】
即ち、ＣＣレジスタアドレス信号３１２によりＣＣレジスタ３０２からＣＣデータ信号３１４を読み出し、ＣＣペンディングビット信号３２０のオフにより切替っているセレクタ３１６からリザベーションステーション３０６の中の割当エントリ３０６−１におけるＣＣデータ領域３３２にＣＣデータ信号３１４を格納している。
【００１４】
ここで、ＣＣデータ領域３３２を各エントリにつき点線のようにまとめた部分を、通常、ＣＣデータリザベーションステーション３３４と呼んでいる。
【００１５】
一方、命令語レジスタ３００−１にフェッチされたＣＣレジスタ更新命令をデコードした時に、ＣＣソースデータがＣＣレジスタ更新バッファ３０４上に存在し、ＣＣリネーミングマップ３０５に登録されて更新保留中である場合は、ＣＣソースデータのリネーミングレジスタであるＣＣレジスタ更新バッファ３０４のＣＣ割当バッファ３０４−３からＣＣデータ３２８を読み出してリザベーションステーション３０６のＣＣデータ領域３３２に格納する。
【００１６】
即ち、ＣＣソースデータを格納しているＣＣレジスタ３０２のレジスタアドレス信号３２４によりＣＣリネーミングマップ３０５を参照してＣＣ割当バッファアドレス３１０を取得し、ＣＣ割当バッファアドレス信号３２６によりＣＣレジスタ更新バッファ３０４のＣＣ割当バッファ３０４−３を参照し、ＣＣレジスタ更新データ３２８を読出し、このとき更新保留中を示すＣＣペンデングビット３０８によりオンしているＣＣペンディングビット信号３２０のにより切替っているセレクタ３１６からリザベーションステーション２０６の中のＣＣ割当エントリ３０６−１におけるＣＣデータ領域３３２にＣＣデータ３２８を格納している。
【００１７】
【発明が解決しようとする課題】
しかしながら、図１２のように命令デコード時にソースデータをリザベーションステーションに格納する従来の制御にあっては、ソースデータが更新保留中でなければ、
（１）レジスタアドレス信号２１２による汎用レジスタ２０２−３の読出し、
（２）読出したデータ信号２１４のリザベーションステーション２０６への格　納、
という２段階の処理となるが、ソースデータが更新保留中である場合は、
（１）レジスタアドレス信号２２４によるリネーミングマップ２０５の参照、
（２）割当バッファアドレス信号２２６によるレジスタ更新バッファ２０４の割当レジスタ２０４−３からの読出し、
（３）読み出したレジスタ更新データ２２８のリザベーションステーション２０６への格納、
という３段階の処理となる。
【００１８】
このようにソースデータの更新保留中有無によりリザベーションステーションへのデータ格納制御の論理が深くなるため、プロセッサの動作周波数を向上させる場合の大きな障害となっている。即ち、デコードサイクルは論理の深い３段階の制御で決まることになる。
【００１９】
この問題は、図１３のように命令デコード時にＣＣソースデータをリザベーションステーションに格納する制御についても同じである。図１３にあっては、ＣＣソースデータが更新保留中でなければ、
（１）ＣＣレジスタアドレス信号３１２によるＣＣレジスタ３０２の読出し、
（２）読出したＣＣデータ信号３１４のリザベーションステーション３０６への格納、
という２段階の処理となるが、ＣＣソースデータが更新保留中である場合は、
（１）ＣＣレジスタアドレス信号３２４によるＣＣリネーミングマップ３０５の参照、
（２）ＣＣ割当バッファアドレス信号３２６によるＣＣレジスタ更新バッファ３０４のＣＣ割当バッファ３０４−３からの読出し、
（３）読み出したＣＣデータ３２８のリザベーションステーション３０６への格納、
という３段階の処理となる。
【００２０】
このようにＣＣソースデータの更新保留中有無によりリザベーションステーションへのデータ格納制御の論理が深くなるため、プロセッサの動作周波数を向上させる場合の大きな障害となっている。
【００２１】
本発明は、レジスタ更新命令のデコード時に、ソースデータ又はＣＣソースデータの更新中の有無に係らず論理を簡略にすることで、高い動作周波数でリザベーションステーションへのデータ格納を可能とするプロセッサ及び命令制御方法を提供することを目的とする。
【００２２】
【課題を解決するための手段】
図１は本発明の原理説明図である。
（レジスタ更新データの格納）
本発明のプロセッサは、図１（Ａ）のように、ソースデータを格納する汎用レジスタ毎に割当られ、最新のレジスタ更新データを格納する最新レジスタ更新割当バッファ４８−０と、最新レジスタ更新割当バッファ４８−０にレジスタ更新命令の投機実行の有無に応じて最新のレジスタ更新データを格納するバッファ制御部としての最新レジスタ更新データ処理部２２と、命令デコード時に、最新レジスタ更新割当バッファ４８−０から最新のレジスタ更新データを読出してリザベーションステーション２６のデータ領域５８に格納する格納制御部としてのマッチング処理部９２とを備えたことを特徴とする。
【００２３】
このように本発明は、汎用レジスタ毎に最新レジスタ更新バッファを割り当てて準備し、レジスタ更新命令が投機実行されていない間は汎用レジスタのデータを最新レジスタ更新バッファに格納し、投機実行されたときは、その投機的実行結果で最新レジスタ更新バッファに上書きし、レジスタ更新命令のデコード時は、レジスタ更新データが更新保留中であっても無くても、全て最新レジスタ更新バッファから読出してリザベーションステーションのデータ領域に格納することで、選択論理を簡略化し、プロセッサの動作周波数向上を可能とする。
【００２４】
ここでバッファ制御部としての最新レジスタ更新データ処理部２２は、命令の投機実行により得られた最新のレジスタ更新データを最新レジスタ更新バッファに格納する。
【００２５】
バッファ制御部としての最新レジスタ更新データ処理部２２は、図１（Ｂ）のように、レジスタ更新割当バッファ４６−０の割当アドレスを保持するアドレスラッチ６６と、レジスタ更新データが更新保留中にあることを示すペンディングビットを保持する更新保留中ラッチ６４と、命令の投機実行による更新サイクルで、レジスタ更新データの更新アドレスがアドレスラッチ６６の割当アドレスと一致し、更新保留中ラッチ（ペンディングビットラッチ６４）にペンディングビットが保持されており、且つ更新サイクルバリッド信号が得られたことを条件に、最新のレジスタ更新データを最新レジスタ更新バッファに格納する論理制御部７０とを備えたことを特徴とする。
【００２６】
バッファ制御部としての最新レジスタ更新データ処理部２２は、投機実行されている命令が破棄された時（フラッシュ時）に、汎用レジスタ４４−１のデータを最新レジスタ更新バッファ４８−０に格納する。
【００２７】
バッファ制御部としての最新レジスタ更新データ処理部２２は、投機実行されている命令が破棄された後の１ブランクサイクルで汎用レジスタ４４−１からデータを読出して最新レジスタ更新割当バッファ４８−０に格納する。
【００２８】
バッファ制御部としての最新レジスタ更新データ処理部２２は、命令デコード時にレジスタアドレスにより最新レジスタ更新割当バッファ４８−０の参照で最新のレジスタ更新データを読出してリザベーションステーションの２６データ領域５８に格納する。
【００２９】
本発明は、動的パイプラインスケジューリングにより命令を実行するプロセッサの命令制御方法を提供する。この命令制御方法は、
バッファ制御部としての最新レジスタ更新データ処理部２２により、ソースデータを格納する汎用レジスタ毎に割当られた最新レジスタ更新割当バッファ４８−０に、レジスタ更新命令の投機実行の有無に応じて最新のレジスタ更新データを格納するバッファ制御ステップと、
命令デコード時に、最新レジスタ更新割当バッファ４８−０から最新のレジスタ更新データを読出してリザベーションステーション２６のデータ領域５８に格納する格納制御ステップと、
を備えたことを特徴とする。なお、この命令制御方法の詳細はプロセッサの場合と基本的に同じになる。
【００３０】
（ＣＣレジスタ更新データの格納）
本発明のプロセッサは、コンデションコードＣＣを格納するレジスタ毎に割当られ、最新のＣＣレジスタ更新データを格納する最新ＣＣレジスタ更新割当バッファと、最新ＣＣレジスタ更新割当バッファにＣＣレジスタ更新命令の投機実行の有無に応じて最新のＣＣレジスタ更新データをセットするバッファ制御部としてのＣＣ最新レジスタ更新データ処理部と、命令デコード時に、最新ＣＣレジスタ更新割当バッファから最新のＣＣレジスタ更新データを読出してリザベーションステーションのＣＣデータ領域に格納する格納制御部とを備えたことを特徴とする。
【００３１】
このように本発明は、ＣＣレジスタ毎に最新ＣＣレジスタ更新バッファを割り当てて準備し、ＣＣレジスタ更新命令が投機実行されていない間はＣＣレジスタのデータを最新ＣＣレジスタ更新割当バッファに格納し、投機実行されたときは、その投機的実行結果で最新ＣＣレジスタ更新割当バッファに上書きし、ＣＣレジスタ更新命令のデコード時は、ＣＣレジスタ更新データが更新保留中であっても無くても、全て最新ＣＣレジスタ更新割当バッファから読出してリザベーションステーションのＣＣデータ領域に格納することで、選択論理を簡略化し、プロセッサの動作周波数向上を可能とする。
【００３２】
ここで、バッファ制御部は、命令の投機実行により得られた最新のＣＣ更新データを最新ＣＣレジスタ更新割当バッファに格納する。
【００３３】
バッファ制御部は、ＣＣレジスタ更新割当バッファの割当アドレスを保持するアドレスラッチと、ＣＣレジスタ更新データが更新保留中にあることを示すペンディングビットを保持する更新保留中ラッチと、命令の投機実行により更新サイクルで、ＣＣレジスタ更新データの更新アドレスがアドレスラッチの割当アドレスと一致し、更新保留中ラッチにペンディングビットが保持されており、且つ更新サイクルバリッド信号が得られたことを条件に、最新のＣＣレジスタ更新データを最新ＣＣレジスタ更新バッファに格納する論理制御部と、
を備えたことを特徴とする。
【００３４】
バッファ制御部は、投機実行されている命令が破棄された時に、ＣＣレジスタのデータを最新ＣＣレジスタ更新割当バッファに格納する。
【００３５】
バッファ制御部は、投機実行されている命令が破棄された後の１ブランクサイクルで、ＣＣレジスタからデータを読出して最新ＣＣレジスタ更新割当バッファに格納する。
【００３６】
バッファ制御部は、命令デコード時にＣＣレジスタのアドレスによる最新ＣＣレジスタ更新割当バッファの参照で最新のＣＣレジスタ更新データを読出してリザベーションステーションのＣＣデータ領域に格納する。
【００３７】
本発明は、動的パイプラインスケジューリングにより命令を実行するプロセッサの命令制御方法を提供する。この命令制御方法は、
バッファ制御部としてのＣＣ最新レジスタ更新データ処理部により、コンデションコードＣＣを格納するレジスタ毎に割当られた最新ＣＣレジスタ更新割当バッファに、ＣＣレジスタ更新命令の投機実行の有無に応じて最新のＣＣレジスタ更新データをセットするバッファ制御ステップと、
命令デコード時に、最新ＣＣレジスタ更新割当バッファから最新のＣＣレジスタ更新データを読出してリザベーションステーションのＣＣデータ領域に格納する格納制御ステップと、
を備えたことを特徴とする。なお、この命令制御方法の詳細はプロセッサの場合と基本的に同じになる。
【００３８】
【発明の実施の形態】
図２は、動的パイプラインスケジューリングにより命令を実行し、且つレジスタ更新命令の投機的実行に応じて最新レジスタ更新データをリザベーションステーションに格納する本発明の命令発行制御を行うプロセッサのハードウェア構成のブロック図である。
【００３９】
図２において、プロセッサは、命令フェッチ部１０、分岐予測部１４、リザベーションステーション処理部２４、命令実行部２８、ストアバッファ３６、データキャッシュ３８、レジスタファイル４０及びリソースモニタ５０を備える。
【００４０】
命令発行部１６には４つの命令語レジスタ１８−１〜１８−４が設けられ、本発明が対象とするレジスタ更新命令を含む４命令が同時にフェッチされデコードされる。リザベーションステーション処理部２４には、リザベーションステーション２６−１〜２６−５が設けられる。命令実行部２８には、固定小数点演算部３０−１，３０−２、浮動小数点演算部３２−１，３２−２及びロード／ストア演算部３４が設けられる。
【００４１】
レジスタファイル４０には、コミットスタックエントリ４２、アーキテクチャレジスタファイルとして知られた汎用レジスタファイル４４、及びリネーミング処理部２０のレジスタ割り当ての対象となるレジスタ更新バッファ４６、更に本発明の最新のレジスタ更新データの保持に使用される最新レジスタ更新バッファ４８を備えている。
【００４２】
リネーミング処理部２０には、本発明によるリザベーションステーションへのデータ格納制御を行う最新レジスタ更新データ処理部（バッファ制御部）２２が設けられる。最新レジスタ更新データ処理部２２は、レジスタ更新命令の投機実行の有無に応じて最新レジスタ更新バッファ４８の中の割当バッファに最新レジスタ更新データを格納すると共に、レジスタ更新命令のデコード時に、最新レジスタ更新バッファ４８の割当バッファから最新レジスタ更新データを読出してリザベーションステーション２６のデータ領域に格納する。
【００４３】
また命令キャッシュ１２及びデータキャッシュ３８は、ＳＰＡＲＣポートアーキテクチャに対応した図示しないインタフェースからシステムコントローラを介してメモリに接続されている。
【００４４】
図２について、動的パイプラインスケジューリングを行う本発明のプロセッサの基本的な処理手順を説明すると次のようになる。命令フェッチ部１０は、命令キャッシュ１２側の待ち行列から例えば４命令をまとめて命令発行部１６内の４の命令語レジスタ１８−１〜１８−４にフェッチしてデコードする。デコードされた４つの命令はリザベーションステーション処理部２４に送られる。
【００４５】
リザベーションステーション処理部２４は演算用として、例えば５つのリザベーションステーション２６−１〜２６−５を備えており、予め定めた関係にある空きのあるリザベーションステーションに対し命令を格納する。
【００４６】
ここでリザベーションステーション２６−１〜２６−５は例えば８つのエントリを備えており、合計４０個の命令をリザーブすることができる。このリザベーションステーション処理部２４に対する命令の発行は、プログラムの順番に従ったインオーダーで行われている。
【００４７】
リザベーションステーション２６−１〜２６−５に命令を投入すると同時に、コミットスタックエントリ４２にも命令ごとにエントリが割り当てられ、命令のコミット（確定）による開放まで保持される。この実施形態でコミットスタックエントリ４２は６４エントリを有する。
【００４８】
このため命令発行部１６の命令語レジスタ１８−１〜１８−４からは、リザベーションステーション処理部２４の対応するリザベーションステーション２６−１〜２６−５とコミットスタックエントリ４２等の資源に利用可能なエントリがないと命令は発行されず、デコードサイクルでストールすることになる。
【００４９】
命令実行部２８は、リザベーションステーション２６−１〜２６−５のいずれかに命令の全てのオペランドの準備が整い且つ対応する演算部が対応可能となると、直ちに命令操作が実行されて実行結果が得られる。命令実行部２８における命令の実行操作はプログラムの順序どおりとはならず、実行可能命令から逐次投機的に実行するアウトオブオーダーで行う。
【００５０】
命令実行部２８の実行結果は、分岐の成立などの判定結果を受けて命令を確定し、ストアバッファ３６に格納した後、ストア命令であればデータキャッシュ３８に格納してインオーダーで命令を完了させ、それ以外の演算命令であれば、更に汎用レジスタファイル４４の対応レジスタに格納してインオーダーで命令を完了させる。このように命令が確定すると、コミットスタックエントリ４２の割当エントリは開放される。
【００５１】
また本発明のプロセッサは、命令実行部２８においてアウトオブオーダーで命令操作を実行しており、命令実行がプログラムの順序どおりでないために、命令ごとに情報を保持する専用レジスタを割り当てなければならない。
【００５２】
図２の命令発行部１６には例えば４つの命令語レジスタ１８−１〜１８−４を用意していることから、４つの専用レジスタを割り当てることができなければ、命令を同時にリザベーションステーション処理部２４に格納することができず、専用レジスタを割り当て尽くした時点でデコードサイクルでストールしなければならない。
【００５３】
この命令ごとに割り当てる専用レジスタとしてレジスタ更新バッファ４６が準備されている。この実施形態においてレジスタ更新バッファ４６は、例えば６４エントリを確保している。
【００５４】
命令ごとに専用レジスタを割り当て、レジスタ内容がプログラム順序で更新参照される方法として、レジスタリネーミングが知られている。このレジスタリネーミングを具体的に説明すると次のようになる。いま次のような命令１、命令２、命令３があったとする。
【００５５】
命令１　Ｒ１＋Ｒ２＝Ｒ３
命令２　Ｒ３＋Ｒ４＝Ｒ３
命令３　Ｒ３＋Ｒ８＝Ｒ９
この３つの命令１〜３において、命令１のディストネーションレジスタＲ３と命令２の第１オペランドレジスタＲ３は依存関係にある。また命令２のディストネーションレジスタＲ３と命令３の第１オペランドレジスタＲ３も依存関係にある。
【００５６】
このような場合に、レジスタリネーミングにあっては、命令１のディストネーションレジスタＲ３と命令２の第１オペランドレジスタＲ３を例えばリネーミングレジスタＲ３ａとして専用レジスタを割り当てる。また命令２のディストネーションレジスタＲ３と命令３の第１オペランドレジスタＲ３にリネーミングレジスタＲ３ｂを割り当てる。
【００５７】
命令のデコードの際に割り当てられたリネーミングレジスタＲ３ａは、命令１がコミットするまで使用が確保される。またリネーミングレジスタＲ３ｂは命令２がコミットするまで使用が確保される。
【００５８】
図３は、図２の最新レジスタ更新データ処理部２２の機能構成のブロック図であり、リザベーションステーションに格納する最新レジスタ更新データを最新レジスタ更新バッファ上の割当レジスタ上に準備する処理状態を表している。
【００５９】
ここで、本発明が対象とする命令は、命令のデコードサイクルでソースレジスタの値をリザベーションステーション２６のデータ領域５８に格納する。このソースレジスタの値は、レジスタ更新命令が投機実行されていなければ、即ちレジスタ更新バッファの割付けにより更新保留中でなければ、汎用レジスタの値を命令のデコードサイクルでリザベーションステーション２６のデータ領域５８に格納する。
【００６０】
これに対しレジスタ更新命令が投機実行されていれば、即ちレジスタ更新バッファ４６の割付けにより更新保留中であれば、投機実行の結果を、実行サイクルに続く更新サイクルで、リザベーションステーション２６のデータ領域５８に格納する。
【００６１】
図３において、最新レジスタ更新データ処理部２２には、汎用レジスタファイル４４において汎用レジスタ４４−０〜４４−４の５つがソースレジスタとして使用されていた場合、各汎用レジスタ４４−０〜４４−４に対応してバッファ割当エントリ６２−０〜６２−４が準備される。
【００６２】
バッファ割当エントリ６２−０〜６２−４は、バッファ割当エントリ６２−０に示すように、図２の最新レジスタ更新バッファ４８上で割り当てられた最新レジスタ更新割当バッファ４８−０が準備され、これに加えてペンディングビットラッチ６４−０と割当バッファアドレスラッチ６６−０が設けられる。この点は他のバッファ割当エントリ６２−１〜６２−４についても同じである。
【００６３】
この最新レジスタ更新データ処理部２２に対しては、レジスタ更新命令の投機実行の有無に応じた最新レジスタ更新データ書込みのため、命令のデコードステージで得られるデコードステージ割当バッファアドレス信号Ｅ１、更新保留中信号Ｅ２が与えられ、またデコードステージ後の投機的な実行ステージで得られた演算結果のレジスタ値を最新レジスタ更新データとして上書きするため、実行ステージに続く更新ステージで得られる更新ステージ割当バッファアドレス信号Ｅ３、更新サイクルバリッド信号Ｅ４及び演算結果データ信号Ｅ６が与えられている。
【００６４】
更に最新レジスタ更新データ処理部２２には、投機実行された命令が破棄されたときに分岐前の状態に戻すためのフラッシュの１サイクルレイト（１　ｃｙｃｌｅ−ｌａｔｅ）信号Ｅ５が与えられている。
【００６５】
最新レジスタ更新データ処理部２２の最新レジスタ更新割当バッファ４８−０を例にとると、命令の投機実行が行われていないときには汎用レジスタ４４−０から読み出された汎用レジスタデータ信号Ｅ７によるレジスタ値が格納されている。
【００６６】
これに対し命令の投機的実行結果のレジスタ値が得られた場合には、実行ステージに続く更新ステージのタイミングで最新レジスタ更新割当バッファ４８―０に格納している汎用レジスタ４４−０のレジスタ値を演算結果のレジスタ値で上書きする。
【００６７】
最新レジスタ更新割当バッファ４８−０に格納された最新のレジスタ更新データは、このレジスタ値をソースオペランドとして用いる命令のデコードステージで読み出され、例えばリザベーションステーション２６のリザベーションステーション割当エントリ２６−１のデータ領域５８に格納される。
【００６８】
ここでリザベーションステーション２６の各エントリは、例えばリザベーションステーション割当エントリ（以下「ＲＳ割当エントリ」という）２６−１を例にとると、バリッドビット５２、Ｒ１ペンディングビット５４、Ｒ１更新バッファアドレス５６、データ領域５８及びオペコードなどを格納した命令操作６０を含む。なお、図示のＲＳ割当エントリ２６−１は第１ソースレジスタＲ１側となる第１オペランドを例示しているが、これに続いて通常は第２ソースレジスタＲ２側となる第２オペランドを持ち、更に命令操作６０に続いてディストネーションレジスタアドレスの領域を持つが、省略している。
【００６９】
図４は、図３の最新レジスタ更新データ処理部２２の具体的な実施形態を示した機能ブロック図である。
【００７０】
図４において、汎用レジスタに対応して最新レジスタ更新割当バッファ４８−０〜４８−４が設けられ、これに加えて汎用レジスタに対応してペンディングビットラッチ６４−０〜６４−４と割当バッファアドレスラッチ６６−０〜６６−４が設けられている。
【００７１】
更に、最新レジスタ更新割当バッファ４８−０〜４８−４に対し、汎用レジスタのレジスタ値または投機的実行結果としてのレジスタ値を格納するため論理制御部７０が設けられる。この論理制御部７０は、マッチング処理部７２、ＮＡＮＤゲート７４，８０，８２，８４、インバータ７６及びＡＮＤゲート７８で構成されている。
【００７２】
次に図４の最新レジスタ更新データ処理部２２の処理動作を説明する。命令のデコードステージでレジスタ更新を行うことが判断されたとき、投機的実行による実行結果のレジスタ値を命令コミットまで格納する最新レジスタ更新割当バッファ４８−０のデコードステージ割当バッファアドレス信号Ｅ１を、割当バッファアドレスラッチ６６−０に保持する。
【００７３】
また、命令のデコードステージで最新レジスタ更新割当バッファ４８−０が更新保留中であることを示す更新保留中信号Ｅ２が得られることから、これをペンディングビットラッチ６４−０に保持する。
【００７４】
続いて、命令の投機的実行による実行結果のレジスタ値が得られ、次の更新ステージにおいて更新ステージ割当バッファアドレス信号Ｅ３及び更新バリッド信号Ｅ４が得られる。
【００７５】
更新ステージ割当バッファアドレス信号Ｅ３はマッチング処理部７２に与えられ、割当バッファアドレスラッチ６６−０に保持しているレコードステージで得られた割当バッファアドレスと比較され、両者が一致するとＮＡＮＤゲート７４に対する出力を論理レベル１とする。なお、以下の説明で論理レベルは単にレベルと言う。
【００７６】
また、このときペンディングビットラッチ６４−０には、デコードステージで既にペンディングビットが保持されていることから、ＮＡＮＤゲート７４に対する出力はレベル１となっている。更に更新バリッド信号Ｅ４によりＮＡＮＤゲート７４に対する入力もレベル１となる。
【００７７】
したがって、ＮＡＮＤゲート７４の出力はレベル０となり、このときフラッシュの１サイクルレイト信号Ｅ５は得られていないことから、インバータ７６の出力はレベル１にあり、したがってＡＮＤゲート７８出力がレベル０となり、最新レジスタ更新割当バッファ４８−０の制御端子ＩＨ（Ｉｎｈｉｂｉｔ　Ｐｉｎ）に対する書込制御を有効とする。このため投機実行の結果として得られているレジスタ値を示す演算結果データ信号Ｅ６がＮＡＮＤゲート８０，８４を介して最新レジスタ更新割当バッファ４８−０のデータ端子Ｄから書き込まれる。
【００７８】
一方、投機実行された命令が分岐失敗により破棄されると、分岐予測から実行された全ての命令を破棄するためフラッシュの１サイクルレイト信号Ｅ５が得られ、そのときの汎用レジスタのレジスタ値を示している汎用レジスタデータ信号Ｅ７を最新レジスタ更新割当バッファ４８−０に格納する。
【００７９】
即ち、フラッシュの１サイクルレイト信号Ｅ５が得られるとインバータ７６の出力はレベル０となり、これによってＡＮＤゲート７８の出力もレベル０となって、最新レジスタ更新割当バッファ４８−０の制御端子ＩＨが書込有効となる。このときフラッシュの１サイクルレイト信号Ｅ５によってＮＡＮＤゲート８２が許容状態となり、このため汎用レジスタデータ信号Ｅ７がＮＡＮＤゲート８２，８４を介して最新レジスタ更新割当バッファ４８−０のデータ端子Ｄに与えられ、汎用レジスタのレジスタ値で上書きされる。
【００８０】
図５は、図４の最新レジスタ更新データ処理部２２の処理動作に対応するパイプラインステージの説明図である。図５において、時刻ｔ１で２つの命令のデコードステージＤ１，Ｄ２が開始され、時刻ｔ２，ｔ３，ｔ４において順次、分岐予測に基づく命令のデコードステージＤ３，Ｄ４，Ｄ５が行われている。
【００８１】
時刻ｔ２の投機実行における命令のデコードステージＤ３にあっては、図４の割当バッファアドレスラッチ６６−０に対する最新レジスタ更新割当バッファ４８−０の割当バッファアドレスのラッチと、ペンディングビットラッチ６４−０に対する更新保留中信号Ｅ２によるラッチが行われる。
【００８２】
次に、デコードステージＤ３に続いて実行ステージＸ３となって命令の演算操作が行われ、演算結果としてのレジスタ値が得られる。この投機実行による演算結果としてのレジスタ値は、次の更新ステージＵ３で得られる図４の更新ステージ割当バッファアドレス信号Ｅ３、更新バリッド信号Ｅ４に基づき、最新レジスタ更新割当バッファ４８−０を書込制御状態として、このとき得られた演算結果のレジスタ値である演算結果データ信号Ｅ６を最新レジスタ更新割当バッファ４８−０格納する。
【００８３】
続いて時刻ｔ５で、分岐予測に基づく命令の投機実行について分岐ミスが判断されたとすると、時刻ｔ５で分岐ミス８５の位置以降の命令を全て破棄するためフラッシュ処理８６が行われる。
【００８４】
この時刻ｔ５〜ｔ６のフラッシュ処理８６に続いて、１サイクルブランクを経て時刻ｔ７より分岐失敗後の最初の命令のデコードステージＤ６が開始される。本発明にあっては、時刻ｔ６〜ｔ７の１サイクルブランクにおいて、図４の最新レジスタ更新データ処理部２２に対するフラッシュの１サイクルレイト信号Ｅ５により、分岐前の時刻ｔ１からの２番目の命令のデコードステージＤ２に続く書込ステージＷ２で汎用レジスタに書き込まれたレジスタ値を汎用レジスタ読出処理８８で読出し、図４の最新レジスタ更新割当バッファ４８−０に保持している更新ステージＵ３のレジスタ値に上書きする最新レジスタ更新割当バッファ格納処理９０を行う。
【００８５】
このため、分岐失敗後の時刻ｔ７からの最初の命令のデコードサイクルＤ６にあっては、最新レジスタ更新割当バッファ４８−０のレジスタ値は分岐前の投機実行でない実行結果の汎用レジスタ値となっており、デコードステージＤ６で、この分岐前の汎用レジスタレジスタ値を読み出してリザベーションステーションのデータ格納領域に格納し、分岐前に戻って命令操作を実行することができる。
【００８６】
図６は、図３の最新レジスタ更新データ処理部２２について、命令のデコードステージでバッファ割当エントリ６２−０のレジスタ値をリザベーションステーション２６に格納する処理を示している。
【００８７】
このリザベーションステーション２６に対する最新レジスタ更新データ値の格納は、最新レジスタ更新割当バッファ４８−０のレジスタ値をソースオペランドとして用いる命令のデコードステージで行われる。即ち、命令のデコードステージで得られるデコードステージ割当バッファアドレス信号Ｅ１と、リザベーションステーション２６のＲＳ割当エントリ２６−１のＲ１更新バッファアドレス５６をマッチング処理部９２でマッチングし、一致していた場合には、最新レジスタ更新割当バッファ４８−０の最新レジスタ更新データを読み出して、リザベーションステーション２６におけるＲＳ割当エントリ２６−１の中のデータ領域５８に格納する。
【００８８】
なお、ＲＳ割当エントリ２６−１のデータ領域５８は、他の割当エントリを含む点線の領域で区切ることでデータリザベーションステーション６２として定義することができる。したがって、最新レジスタ更新データ処理部２２は、このデータリザベーションステーション６２の中の割当エントリの部分に最新レジスタ更新割当バッファ４８−０のレジスタ値を読み出して格納することになる。
【００８９】
このように図２〜図６のレジスタデータのリザベーションステーションへの格納制御について、データ更新命令のデコードステージで、命令の投機実行であっても、投機実行でない場合であっても、いずれの場合も最新レジスタ更新割当バッファの割当アドレスによる読出しと読出したＣＣデータのリザベーションステーションへの格納を、２段階で実現することができる。
【００９０】
図７はコンディションＣＣのリザベーションステーションへの格納制御を行う本発明によるプロセッサのハードウェア構成のブロック図である。
【００９１】
図７において、このプロセッサの構成は、基本的に図２のプロセッサと同じであるが、リネミーング処理部２０に最新ＣＣレジスタ更新データ処理部９４を設け、またレジスタファイル４０の中にＣＣレジスタ更新バッファ９６と最新ＣＣレジスタ更新バッファ９８を設けている点が相違する。
【００９２】
もちろん実際の装置にあっては、図２の実施形態に図７における最新ＣＣレジスタ更新データ処理部９４、レジスタファイル４０におけるＣＣレジスタ更新バッファ９６及び最新ＣＣレジスタ更新バッファ９８を追加した構成をとることになる。
【００９３】
図８は、図７の最新ＣＣレジスタ更新データ処理部において更新ステージで最新レジスタ割当バッファに対し、ＣＣデータを格納する処理状態のブロック図である。
【００９４】
図８において、最新ＣＣレジスタ更新データ処理部９４には、図７の最新レジスタデータ９８上で、ＣＣレジスタ１００に対応して割当られた最新ＣＣレジスタデータ９８−０が準備されている。この最新ＣＣレジスタ更新割当バッファ９８−０に対応し、ＣＣペンディングビットラッチ１０２−０とＣＣ割当バッファアドレスラッチ１０４−０が設けられている。
【００９５】
最新ＣＣレジスタ更新データ処理部９４に対しては、命令のデコードステージにおいてデコードステージ割当バッファアドレス信号Ｅ１１と更新保留中信号Ｅ１２が与えられる。またデコードステージに続く実行ステージで実行結果としてのレジスタ値が得られた後の更新ステージおいて得られる更新ステージ割当バッファアドレス信号Ｅ１３、更新バリット信号Ｅ１４、更に演算結果ＣＣデータ信号Ｅ１６が与えられている。
【００９６】
また命令の初期実行で分岐失敗となった時の空きのためフラッシュの１サイクルレイト信号Ｅ１５が与えられる。更にＣＣレジスタ１００の読み出しによりＣＣレジスタデータ信号Ｅ１７が与えられる。
【００９７】
リザベーションステーション２６には、命令のデコードステージで、例えばＲＳ割当エントリ２６−１が確保される。このＲＳ割当エントリ２６−１はＣＣレジスタ更新バッファアドレス１１０、ＣＣデータ領域１１２及びオペコードなどの命令操作１１４を含む。
【００９８】
尚、このＲＳ割当エントリ２６−１についての第１ソースレジスタＲ１側を取り出しており、第２ソースレジスタＲ２側及びディストネーションレジスタ側は省略している。またＲＳ割当エントリ２６−１におけるＣＣデータ領域１１２には他の割当エントリを含めて点線のようにＣＣデータリザベーション１１６と呼ばれる。
【００９９】
図９は、図８の最新ＣＣレジスタ更新データ処理部９４の具体的実施形態を示した機能構成のブロック図である。
【０１００】
図９において、最新ＣＣレジスタ更新データ処理部９４には、図８のＣＣレジスタ１００に対応して、最新ＣＣレジスタ更新割当バッファ９８−０が準備される。この最新ＣＣレジスタ更新割当バッファ９８−０に対応し、ＣＣ割当バッファアドレスラッチ１０４−０とＣＣペンディングビットラッチ１０２−０が設けられる。
【０１０１】
最新ＣＣレジスタ更新割当バッファ９８−０に対するＣＣデータの書き込みは論理制御部１１８で行われる。論理制御部１１８はマッチング処理部１２０、ＮＡＮＤゲート１２２，１２８，１３０，１３２、インバータ１２４及びＡＮＤゲート１２６で構成される。
【０１０２】
図９における最新ＣＣレジスタ更新データ処理部９４の処理動作を説明すると次のようになる。
【０１０３】
ＣＣデータの更新を必要とする命令のデコードステージで図９のような構成を持つ、ＣＣレジスタに対応した割当エントリが準備される。また命令のデコードステージで準備された最新ＣＣレジスタ更新割当バッファ９８−０のデコードステージ割当バッファアドレス信号Ｅ１１が得られることから、これをＣＣ割当バッファアドレスラッチ１０４−０に保持する。同時に更新保留中信号Ｅ１２が得られることからＣＣペンディングビットラッチ１０２−０に保持する。
【０１０４】
命令のデコートステージに続いて投機実行による実行ステージで実行結果としてＣＣレジスタ値が得られると、次の更新ステージにおいて更新割当バッファアドレス信号Ｅ１３、更新サイクルバリッド信号Ｅ１４、ＣＣ演算結果データ信号Ｅ１６が得られる。
【０１０５】
そこでマッチング処理部１２０でＣＣ割当バッファアドレスラッチ１０４−０のデコードステージの割当バッファアドレスと更新ステージの割当バッファアドレスをマッチングし、一致した場合にＮＡＮＤゲート１２２に対する出力をレベル１とする。
【０１０６】
また、この時ＣＣペンディングビットラッチ１０４にＣＣペンディングビットが保持されていることからＮＡＮＤゲート１２２に対する出力はレベル１となっている。更に更新バリット信号Ｅ１４が得られることで、ＮＡＮＤゲート１２２に対する入力は１となり、全ての入力がレベル１となることでその出力はレベル０となる。
【０１０７】
この時、インバータ１２４に対するフラッシュの１サイクルレイト信号Ｅ１５は得られてないことからＡＮＤゲート１２６の入力は（０，１）となり、その出力はレベル０となり、最新ＣＣレジスタ更新割当バッファ９８−０の制御端子ＩＨ（Ｉｎｈｉｂｉｔ　Ｐｉｎ）を書込み有効とする。
【０１０８】
この更新ステージにあっては、演算結果としてＣＣ演算結果データ信号Ｅ１６がＮＡＮＤゲート１２８に対し得られており、フラッシュの１サイクルレイト信号Ｅ１５がないことからＮＡＮＤゲート１２８は許容状態となり、ＣＣ演算結果データ信号Ｅ１６はＮＡＮＤゲート１２８，１３２を介してデータ端子Ｄから最新ＣＣレジスタ更新割当バッファ９８−０に書き込まれる。
【０１０９】
一方、分岐予測より命令を投機実行している途中で分岐失敗が判断されると、分岐予測からの命令を全て破棄するためフラッシュの１サイクルレイト信号Ｅ１５が得られる。このフラッシュの１サイクルレイト信号Ｅ１５が得られるとＮＡＮＤゲート１２２の出力のいかんにかかわらず、ＡＮＤゲート１２６の出力はレベル０となって、最新ＣＣレジスタ最新割当バッファ９８−０の制御端子ＩＨを書込み有効とする。この時、フラッシュの１サイクルレイト信号Ｅ１５により許容状態となったＮＡＮＤゲート１３０に対しては、ＣＣレジスタデータ信号Ｅ１７が与えれており、ＣＣレジスタデータ信号Ｅ１７はＮＡＮＤゲート１３０，１３２を介してデータ端子Ｄより最新ＣＣレジスタ更新割当バッファ９８−０に上書きされる。
【０１１０】
図１０は、図９のＣＣ最新レジスタ更新データ処理部９４の処理動作に対応したパイプラインステージの説明図である。
【０１１１】
図１０において、時刻ｔ１より投機実行でない２つの命令を同時にフェッチしてデコードステージＤ１１，Ｄ１２を開始する。続いて分岐予測に基づき時刻ｔ２，ｔ３，ｔ４で命令の投機実行のためのデコードステージＤ１３，Ｄ１４，Ｄ１５が順次開始される。
【０１１２】
分岐予測による最初の命令のデコードステージＤ１３に続き、実行ステージＸ１３での投機実行により実行結果としてＣＣレジスタ値が得られ、次の更新ステージＵ１３において図９の論理制御部１１８の制御によって、演算結果であるＣＣ演算結果データ信号Ｅ１７が最新ＣＣレジスタ更新割当バッファ９８−０に格納される。
【０１１３】
続いて時刻ｔ５において、分岐予測の失敗が判断されると分岐ミス１３４までの命令を全て破棄するため、時刻ｔ５〜ｔ６においてフラッシュ処理１３６を行う。
【０１１４】
このフラッシュ処理１３６に伴い図９の最新ＣＣレジスタ更新データ処理部９４に対し、フラッシュの１サイクルレイト信号Ｅ１５が与えられ、論理制御部１１８による制御動作で最新ＣＣレジスタ更新割当バッファ９８−０に、この時ＣＣレジスタ１００から得られているＣＣ演算結果データ信号Ｅ１７を上書きする。
【０１１５】
続いてフラッシュ処理１３６に続く時刻ｔ６〜ｔ７の１ブランクサイクルで、ＣＣ最新レジスタ読出処理１３８により分岐前のＣＣデータを保持している図８のＣＣレジスタ１００のレジスタ値を読み出し、図９の論理制御部１１８によって最新ＣＣレジスタ更新割当バッファ９８−０に上書きする最新ＣＣレジスタ更新バッファ格納処理１４０を行う。
【０１１６】
このため分岐失敗後の１サイクルブランクを経た、時刻ｔ７からの命令のデコードステージＤ１６にあっては、分岐失敗によるフラッシュ処理１３６に伴う処理で図９の最新ＣＣレジスタ更新割当バッファ９８−０に上書きされた分岐前の、例えば時刻ｔ１から２番目の０に書き込まれた最新のＣＣデータを最新ＣＣレジスタ更新割当バッファ９８−０から読出し、リザベーションステーションに格納する。
【０１１７】
図１１は、図８の最新ＣＣレジスタ更新データ処理部９４における命令のデコードステージにおける最新ＣＣデータのリザベーションステーションに対する格納処理の説明図である。
【０１１８】
この図１１の命令のデコードステージにあっては、デコードステージ割当バッファアドレス信号Ｅ１１が得られていることから、これをマッチング処理部１４２に与えて、リザベーションステーション２６におけるＲＳ割当エントリ２６−１のＣＣレジスタ更新バッファアドレス１１０とマッチングし、一致した場合には最新ＣＣレジスタ更新割当バッファ９８−０に格納している最新ＣＣ更新データを読み出して、リザベーションステーション２６のＣＣデータ領域１１２に格納する。
【０１１９】
このように図７〜図１１のＣＣデータのリザベーションステーションへの格納制御についても、ＣＣデータ更新命令のデコードステージで、命令の投機実行であっても、投機実行でない場合であっても、いずれの場合も最新ＣＣレジスタ更新割当バッファ９８−０の割当アドレスによる読出しと読出したＣＣデータのリザベーションステーションへの格納を、２段階で実現することができる。
【０１２０】
尚、本発明は、上記の実施形態に限定されず、その目的と利点を損なうことのない適宜の変形を含む。また本発明は上記の実施形態に示した数値による限定は受けない。特に図８〜図１１のＣＣデータのリザベーションステーションへの格納制御にあっては、説明を簡単にするためコンディションコードＣＣを格納するＣＣレジスタをひとつ設けた場合を例にとっているが、実際には複数のＣＣレジスタが使用されており、各ＣＣレジスタに対応して最新ＣＣレジスタ更新データ処理部９４における最新ＣＣレジスタ更新割当バッファ９８−０、ＣＣ割当バッファアドレスラッチ１０４−０及びＣＣペンディングビットラッチ１０２−０の組み合わせからなる割当エントリが複数設けられる。
【０１２１】
（付記）
（付記１）
ソースデータを格納する汎用レジスタ毎に割当られ、最新のレジスタ更新データを格納するバッファと、
前記バッファにレジスタ更新命令の投機実行の有無に応じて最新のレジスタ更新データを格納するバッファ制御部と、
命令デコード時に、前記バッファから最新のレジスタ更新データを読出してリザベーションステーションのデータ領域に格納する格納制御部と、
を備えたことを特徴とするプロセッサ。（１）
【０１２２】
（付記２）
付記１記載のプロセッサに於いて、前記バッファ制御部は、命令の投機実行により得られた最新のレジスタ更新データを前記バッファに格納することを特徴とするプロセッサ。（２）
【０１２３】
（付記３）
付記１記載のプロセッサに於いて、前記バッファ制御部は、
レジスタ更新バッファの割当アドレスを保持するアドレスラッチと、
前記レジスタ更新データが更新保留中にあることを示すペンディングビットを保持する更新保留中ラッチと、
命令の投機実行に続く更新サイクルで、レジスタ更新データの更新アドレスが前記アドレスラッチの割当アドレスと一致し、前記更新保留中ラッチにペンディングビットが保持されており、且つ更新サイクルバリッド信号が得られたことを条件に、最新のレジスタ更新データを前記バッファに格納する論理制御部と、
を備えたことを特徴とするプロセッサ。
【０１２４】
（付記４）
付記１記載のプロセッサに於いて、前記バッファ制御部は、投機実行されている命令が破棄された時に、汎用レジスタのデータを前記バッファに格納することを特徴とするプロセッサ。（３）
【０１２５】
（付記５）
付記４記載のプロセッサに於いて、前記バッファ制御部は、投機実行されている命令が破棄された後の１ブランクサイクルで前記汎用レジスタからデータを読出して前記バッファに格納することを特徴とするプロセッサ。
【０１２６】
（付記６）
付記１記載のプロセッサに於いて、前記バッファ制御部は、命令デコード時にレジスタアドレスにより前記バッファの参照で最新のレジスタ更新データを読出して前記リザベーションステーションのデータ領域に格納することを特徴とするプロセッサ。（４）
【０１２７】
（付記７）
動的パイプラインスケジューリングにより命令を実行するプロセッサの命令制御方法に於いて、
バッファ制御部により、ソースデータを格納する汎用レジスタ毎に割当られたバッファにレジスタ更新命令の投機実行の有無に応じて最新のレジスタ更新データを格納するバッファ制御ステップと、
命令デコード時に、前記バッファから最新のレジスタ更新データを読出してリザベーションステーションのデータ領域に格納する格納制御ステップと、
を備えたことを特徴とする命令制御方法。（５）
【０１２８】
（付記８）
付記７記載の命令制御方法に於いて、前記バッファ制御ステップは、命令の投機実行により得られた最新のレジスタ更新データを前記バッファに格納することを特徴とする命令制御方法。
【０１２９】
（付記９）
付記７記載の命令制御方法に於いて、前記バッファ制御ステップは、
レジスタ更新バッファの割当アドレスをアドレスラッチに保持するステップと、前記レジスタ更新データが更新保留中にあることを示すペンディングビットを更新保留中ラッチに保持するステップと、
命令の投機実行により更新サイクルで、レジスタ更新データの更新アドレスが前記アドレスラッチの割当アドレスと一致し、前記更新保留中ラッチにペンディングビットが保持されており、且つ更新サイクルバリッド信号が得られたことを条件に、最新のレジスタ更新データを前記バッファに格納するステップと、
を備えたことを特徴とする命令制御方法。
【０１３０】
（付記１０）
付記７記載の命令制御方法に於いて、前記バッファ制御ステップは、投機実行されている命令が破棄された時に、汎用レジスタのデータを前記バッファに格納することを特徴とする命令制御方法。
【０１３１】
（付記１１）
付記１０記載の命令制御方法に於いて、前記バッファ制御ステップは、投機実行されている命令が破棄された後の１ブランクサイクルで前記汎用レジスタからデータを読出して前記バッファに格納することを特徴とする命令制御方法。
【０１３２】
（付記１２）
付記７記載の命令制御方法に於いて、前記バッファ制御ステップは、命令デコード時にレジスタアドレスにより前記バッファの参照で最新のレジスタ更新データを読出して前記リザベーションステーションのデータ領域に格納することを特徴とする命令制御方法。
【０１３３】
（付記１３）
コンデションコードを格納するレジスタ毎に割当られ、最新のコンデションコードレジスタ更新データを格納するバッファと、
前記バッファに、コンデションコードレジスタ更新命令の投機実行の有無に応じて最新のコンデションコードレジスタ更新データをセットするバッファ制御部と、
命令デコード時に、前記バッファから最新のコンデションコードレジスタ更新データを読出してリザベーションステーションのコンデションコードデータ領域に格納する格納制御部と、
を備えたことを特徴とするプロセッサ。（６）
【０１３４】
（付記１４）
付記１３記載のプロセッサに於いて、前記バッファ制御部は、命令の投機実行により得られた最新のコンデションコードレジスタ更新データを前記バッファに格納することを特徴とするプロセッサ。（７）
【０１３５】
（付記１５）
付記１４記載のプロセッサに於いて、前記バッファ制御部は、
コンディションコードレジスタ更新バッファの割当アドレスを保持するアドレスラッチと、
前記コンディションコードレジスタ更新データが更新保留中にあることを示すペンディングビットを保持する更新保留中ラッチと、
命令の投機実行により更新サイクルで、コンディションコードレジスタ更新データの更新アドレスが前記アドレスラッチの割当アドレスと一致し、前記更新保留中ラッチにペンディングビットが保持されており、且つ更新サイクルバリッド信号が得られたことを条件に、最新のコンディションコードレジスタ更新データを前記バッファに格納する論理制御部と、
を備えたことを特徴とするプロセッサ。
【０１３６】
（付記１６）
付記１３記載のプロセッサに於いて、前記バッファ制御部は、投機実行されている命令が破棄された時に、コンデションコードレジスタのデータを前記バッファにセットすることを特徴とするプロセッサ。（８）
【０１３７】
（付記１７）
付記１６記載のプロセッサに於いて、前記バッファ制御部は、投機実行されている命令が破棄された後の１ブランクサイクルで前記コンディションコードレジスタからデータを読出して前記バッファに格納することを特徴とするプロセッサ。
【０１３８】
（付記１８）
付記１３記載のプロセッサに於いて、前記バッファ制御部は、命令デコード時にコンデションコードレジスタのアドレスにより前記バッファの参照で最新のコンデションコードレジスタ更新データを読出して前記リザベーションステーションのコンデションコードデータ領域に格納することを特徴とするプロセッサ。（９）
【０１３９】
（付記１９）
動的パイプラインスケジューリングにより命令を実行するプロセッサの命令制御方法に於いて、
バッファ制御部により、コンデションコードを格納するレジスタ毎に割当られたバッファに、コンディションコードレジスタ更新命令の投機実行の有無に応じて最新のコンデションコードレジスタ更新データをセットするバッファ制御ステップと、
命令デコード時に、前記バッファから最新のコンデションコードレジスタ更新データを読出してリザベーションステーションのコンデションコードデータ領域に格納する格納制御ステップと、
を備えたことを特徴とする命令制御方法。（１０）
【０１４０】
（付記２０）
付記１９記載の命令制御方法に於いて、前記バッファ制御ステップは、命令の投機実行により得られた最新のコンデションコードレジスタ更新データを前記バッファに格納することを特徴とする命令制御方法。
【０１４１】
（付記２１）
付記２０記載の命令制御方法に於いて、前記バッファ制御ステップは、
コンディションコードレジスタ更新バッファの割当アドレスをアドレスラッチ保持するステップと、
前記コンディションコードレジスタ更新データが更新保留中にあることを示すペンディングビットを更新保留中ラッチと保持するステップと、
命令の投機実行により更新サイクルで、コンディションコードレジスタ更新データの更新アドレスが前記アドレスラッチの割当アドレスと一致し、前記更新保留中ラッチにペンディングビットが保持されており、且つ更新サイクルバリッド信号が得られたことを条件に、最新のコンディションコードレジスタ更新データを前記バッファに格納するステップと、
を備えたことを特徴とする命令制御方法。
【０１４２】
（付記２２）
付記１９記載の命令制御方法に於いて、前記バッファ制御ステップは、投機実行されている命令が破棄された時に、コンデションコードレジスタのデータを前記バッファに格納することを特徴とする命令制御方法。
【０１４３】
（付記２３）
付記２２記載の命令制御方法に於いて、前記バッファ制御ステップは、投機実行されている命令が破棄された後の１ブランクサイクルで前記コンディションコードレジスタからデータを読出して前記バッファに格納することを特徴とする命令制御方法。
【０１４４】
（付記２４）
付記１９記載の命令制御方法に於いて、前記バッファ制御ステップは、命令デコード時にコンデションコードレジスタのアドレスにより前記バッファの参照で最新のコンデションコードレジスタ更新データを読出して前記リザベーションステーションのコンデションコードデータ領域に格納することを特徴とする命令制御方法。
【０１４５】
【発明の効果】
以上説明してきたように本発明によれば、汎用レジスタごとに最新レジスタ更新バッファを割当てて準備し、レジスタを更新するための命令が投機実行されていない間は、汎用レジスタのデータを最新レジスタ更新バッファに格納し、投機実行された時は投機実行の結果として得られたレジスタ値を最新レジスタ更新バッファに上書きし、レジスタ更新命令のデコード時は、レジスタ更新データが更新保留中であってもなくても全て最新レジスタ更新バッファから読み出して、リザベーションステーションのデータ領域に格納することで、いずれの場合も同じクロックサイクルの処理でリザベーションステーションにデータを格納することができ、同じリザベーションステーションに対するデータ格納処理にかかわらず、処理クロック数が相違することによるプロセッサの動作周波数を向上する場合の高周波回路の障害の問題を起こすことなくプロセッサの動作周波数を向上することが容易にできる。
【０１４６】
またＣＣレジスタごとに最新レジスタ更新バッファを割当てて準備し、ＣＣレジスタ更新命令が投機実行されていない間は、ＣＣレジスタのデータを最新ＣＣレジスタ更新バッファに格納し、投機実行されたときはその投機実行結果のレジスタ値で最新ＣＣレジスタ更新バッファを上書きし、ＣＣレジスタ更新命令のデコード時はＣＣレジスタ更新データが更新保留中であってもなくても全て最新ＣＣレジスタ更新バッファから読み出してリザベーションステーションのＣＣデータ領域に格納することで、投機実行中すなわちＣＣレジスタ更新データが更新保留中であってもなくてもいずれの場合も同じクロックサイクルの処理でリザベーションステーションにＣＣデータを格納することができ、クロックサイクル数の相違によるプロセッサの動作周波数が向上した際の高周波回路の障害を引き起こす問題を生ずることなく、容易にプロセッサの動作周波数の向上を図ることができる。
【図面の簡単な説明】
【図１】本発明の原理説明図
【図２】レジスタデータのリザベーションステーションへの格納制御を行う本発明によるプロセッサのハードウェア構成のブロック図
【図３】更新ステージで最新レジスタ更新バッファにデータを格納する本発明による命令制御の機能ブロック図
【図４】図３の最新レジスタ更新データ処理部における機能構成のブロック図
【図５】本発明のデータ格納処理が行われるパイプラインステージの説明図
【図６】図３の最新レジスタ更新バッファのデータをデコードステージでリザベーションステーションに格納する本発明による命令制御の機能ブロック図
【図７】ＣＣレジスタデータのリザベーションステーションへの格納制御を行う本発明によるプロセッサのハードウェア構成のブロック図
【図８】更新ステージで最新レジスタ更新バッファに対しＣＣデータを格納する本発明による命令制御の機能ブロック図
【図９】図３の最新ＣＣレジスタ更新データ処理部における機能構成のブロック図
【図１０】本発明のＣＣデータ格納処理が行われるパイプラインステージの説明図
【図１１】図３の最新レジスタ更新バッファのＣＣデータをデコードステージでリザベーションステーションに格納する本発明による命令制御の機能ブロック図
【図１２】リザベーションステーションにレジスタ更新データを格納する従来の命令制御の説明図
【図１３】リザベーションステーションにＣＣレジスタ更新データを格納する従来の命令制御の説明図
【符号の説明】
１０：命令フェッチ部
１２：命令キャッシュ
１４：分岐予測部
１６：命令発行部
１８−１〜１８−４：命令語レジスタ
２０：リネーミング処理部
２２：最新レジスタ更新データ処理部
２４：リザベーションステーション処理部
２６：リザベーションステーション
２６−１〜２６−５：ＲＳ割当エントリ
２８：命令実行部
３０−１，３０−２：固定小数点演算部
３２−１，３２−２：浮動小数点演算部
３４：ロード／ストア演算部
３６：ストアバッファ
３８：データキャッシュ
４０：レジスタファイル
４２：コミットスタックエントリ
４４：汎用レジスタファイル
４４−１：汎用レジスタ
４６：レジスタ更新バッファ（ＲＵＢ）
４８：最新レジスタ更新バッファ
４８−０〜４８−４：最新レジスタ更新割当バッファ
５０：リソースモニタ
５２：バリッドビット
５４：Ｒ１ペンディングビット
５６：Ｒ１更新バッファアドレス
５８：アドレス更新データ格納領域
６０，１１４：命令操作
６２：データリザベーションステーション
６４，６４−０〜６４−４：ペンディングビットラッチ
６６−０〜６６−４：割当バッファアドレスラッチ
７２，９２，１２０，１４２：マッチング処理部
７０，１１８：論理制御部
７４，８０，８２，８４，１２２，１２８，１３０，１３２：ＮＡＮＤゲート
７６，１２４：インバータ
７８，１２６：ＡＮＤゲート
９４：最新ＣＣレジスタ更新データ処理部
９６：ＣＣレジスタ更新バッファ
９８：最新ＣＣレジスタ更新バッファ
９８−０：最新ＣＣレジスタ更新割当バッファ
１００：ＣＣレジスタ
１０２−０：ＣＣペンディングビットラッチ
１０４−０：ＣＣ割当バッファアドレスラッチ
１０６：バリッドビット
１０８：ＣＣペンディングビット
１１０：ＣＣレジスタ更新バッファアドレス
１１２：ＣＣデータ領域
１１６：ＣＣデータリザベーションステーション
【図１】
2004038752.tif 000003
【図２】
2004038752.tif 000004
【図３】
2004038752.tif 000005
【図４】
2004038752.tif 000006
【図５】
2004038752.tif 000007
【図６】
2004038752.tif 000008
【図７】
2004038752.tif 000009
【図８】
2004038752.tif 000010
【図９】
2004038752.tif 000011
【図１０】
2004038752.tif 000012
【図１１】
2004038752.tif 000013
【図１２】
2004038752.tif 000014
【図１３】
2004038752.tif 000015
【手続補正書】
【提出日】平成15年2月17日(2003.2.17)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】０００２
【補正方法】変更
【補正の内容】
【０００２】
【従来の技術】
従来、動的パイプラインスケジュールを実行するプロセッサにあっては、プログラム順序に依存したインオーダーの命令発行部、プログラムの順番に依存しないアウトオブオーダーの命令実行部、更に、プログラム順序に依存したインオーダーの確定部（コミット部）という３つに分かれて処理を実行する。


【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】０００９
【補正方法】変更
【補正の内容】
【０００９】
即ち、ソースデータを格納している汎用レジスタ２０２−３のレジスタアドレス信号２２４によりリネーミングマップ２０５を参照して割当バッファアドレス２１０を取得し、割当バッファアドレス信号２２６によりレジスタ更新バッファ２０４の割当バッファ２０４−３を参照し、レジスタ更新データ２２８を読出し、このとき更新保留中を示すペンディングビット２０８によりオンしているペンディングビット信号２２０により切替っているセレクタ２１６からリザベーションステーション２０６の中の割当エントリ２０６−１におけるデータ領域２３２にレジスタ更新データ２２８を格納している。


【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】００１３
【補正方法】変更
【補正の内容】
【００１３】
即ち、ＣＣレジスタアドレス信号３１２によりＣＣレジスタ３０２からＣＣデータ信号３１４を読み出し、ＣＣペンディングビット信号３２０のオフにより切替っているセレクタ３１６からリザベーションステーション３０６の中のＣＣ割当エントリ３０６−１におけるＣＣデータ領域３３２にＣＣデータ信号３１４を格納している。


【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】００１５
【補正方法】変更
【補正の内容】
【００１５】
一方、命令語レジスタ３００−１にフェッチされたＣＣレジスタ更新命令をデコードした時に、ＣＣソースデータがＣＣレジスタ更新バッファ３０４上に存在し、ＣＣリネーミングマップ３０５に登録されて更新保留中である場合は、ＣＣソースデータのリネーミングレジスタであるＣＣレジスタ更新バッファ３０４のＣＣ割当バッファ３０４−３からＣＣレジスタ更新データ３２８を読み出してリザベーションステーション３０６のＣＣデータ領域３３２に格納する。


【手続補正５】
【補正対象書類名】明細書
【補正対象項目名】００１６
【補正方法】変更
【補正の内容】
【００１６】
即ち、ＣＣソースデータを格納しているＣＣレジスタ３０２のＣＣレジスタアドレス信号３２４によりＣＣリネーミングマップ３０５を参照してＣＣ割当バッファアドレス３１０を取得し、ＣＣ割当バッファアドレス信号３２６によりＣＣレジスタ更新バッファ３０４のＣＣ割当バッファ３０４−３を参照し、ＣＣレジスタ更新データ３２８を読出し、このとき更新保留中を示すＣＣペンデングビット３０８によりオンしているＣＣペンディングビット信号３２０により切替っているセレクタ３１６からリザベーションステーション３０６の中のＣＣ割当エントリ３０６−１におけるＣＣデータ領域３３２にＣＣデータ３２８を格納している。


【手続補正６】
【補正対象書類名】明細書
【補正対象項目名】００３９
【補正方法】変更
【補正の内容】
【００３９】
図２において、プロセッサは、命令フェッチ部１０、命令キャッシュ部１２、分岐予測部１４、リザベーションステーション処理部２４、命令実行部２８、ストアバッファ３６、データキャッシュ３８、レジスタファイル４０及びリソースモニタ５０を備える。


【手続補正７】
【補正対象書類名】明細書
【補正対象項目名】００４２
【補正方法】変更
【補正の内容】
【００４２】
リネーミング処理部２０には、本発明によるリザベーションステーションへのデータ格納制御を行う最新レジスタ更新データ処理部（バッファ制御部）２２が設けられる。最新レジスタ更新データ処理部２２は、レジスタ更新命令の投機実行の有無に応じて最新レジスタ更新バッファ４８の中の割当バッファに最新レジスタ更新データを格納すると共に、レジスタ更新命令のデコード時に、最新レジスタ更新バッファ４８の割当バッファから最新レジスタ更新データを読出してリザベーションステーション２６−１〜２６−５のデータ領域に格納する。


【手続補正８】
【補正対象書類名】明細書
【補正対象項目名】００５６
【補正方法】変更
【補正の内容】
【００５６】
このような場合に、レジスタリネーミングにあっては、命令１のディストネーションレジスタＲ３と命令２の第１オペランドレジスタＲ３に例えばリネーミングレジスタＲ３ａとして専用レジスタを割り当てる。また命令２のディストネーションレジスタＲ３と命令３の第１オペランドレジスタＲ３にリネーミングレジスタＲ３ｂを割り当てる。


【手続補正９】
【補正対象書類名】明細書
【補正対象項目名】００６７
【補正方法】変更
【補正の内容】
【００６７】
最新レジスタ更新割当バッファ４８−０に格納された最新のレジスタ更新データは、このレジスタ値をソースオペランドとして用いる命令のデコードステージで読み出され、例えばリザベーションステーション２６のリザベーションステーション割当エントリ２６−１１のデータ領域５８に格納される。


【手続補正１０】
【補正対象書類名】明細書
【補正対象項目名】００６８
【補正方法】変更
【補正の内容】
【００６８】
ここでリザベーションステーション２６の各エントリは、例えばリザベーションステーション割当エントリ（以下「ＲＳ割当エントリ」という）２６−１１を例にとると、バリッドビット５２、Ｒ１ペンディングビット５４、Ｒ１更新バッファアドレス５６、データ領域５８及びオペコードなどを格納した命令操作６０を含む。なお、図示のＲＳ割当エントリ２６−１１は第１ソースレジスタＲ１側となる第１オペランドを例示しているが、これに続いて通常は第２ソースレジスタＲ２側となる第２オペランドを持ち、更に命令操作６０に続いてディストネーションレジスタアドレスの領域を持つが、省略している。


【手続補正１１】
【補正対象書類名】明細書
【補正対象項目名】００７４
【補正方法】変更
【補正の内容】
【００７４】
続いて、命令の投機的実行による実行結果のレジスタ値が得られ、次の更新ステージにおいて更新ステージ割当バッファアドレス信号Ｅ３及び更新サイクルバリッド信号Ｅ４が得られる。


【手続補正１２】
【補正対象書類名】明細書
【補正対象項目名】００７６
【補正方法】変更
【補正の内容】
【００７６】
また、このときペンディングビットラッチ６４−０には、デコードステージで既にペンディングビットが保持されていることから、ＮＡＮＤゲート７４に対する出力はレベル１となっている。更に更新サイクルバリッド信号Ｅ４によりＮＡＮＤゲート７４に対する入力もレベル１となる。


【手続補正１３】
【補正対象書類名】明細書
【補正対象項目名】００７７
【補正方法】変更
【補正の内容】
【００７７】
したがって、ＮＡＮＤゲート７４の出力はレベル０となり、このときフラッシュの１サイクルレイト信号Ｅ５は得られていないことから、インバータ７６の出力はレベル１にあり、したがってＡＮＤゲート７８の出力がレベル０となり、最新レジスタ更新割当バッファ４８−０の制御端子ＩＨ（Ｉｎｈｉｂｉｔ　Ｐｉｎ）に対する書込制御を有効とする。このため投機実行の結果として得られているレジスタ値を示す演算結果データ信号Ｅ６がＮＡＮＤゲート８０，８４を介して最新レジスタ更新割当バッファ４８−０のデータ端子Ｄから書き込まれる。


【手続補正１４】
【補正対象書類名】明細書
【補正対象項目名】００８２
【補正方法】変更
【補正の内容】
【００８２】
次に、デコードステージＤ３に続いて実行ステージＸ３となって命令の演算操作が行われ、演算結果としてのレジスタ値が得られる。この投機実行による演算結果としてのレジスタ値は、次の更新ステージＵ３で得られる図４の更新ステージ割当バッファアドレス信号Ｅ３、更新サイクルバリッド信号Ｅ４に基づき、最新レジスタ更新割当バッファ４８−０を書込制御状態として、このとき得られた演算結果のレジスタ値である演算結果データ信号Ｅ６を最新レジスタ更新割当バッファ４８−０格納する。


【手続補正１５】
【補正対象書類名】明細書
【補正対象項目名】００８４
【補正方法】変更
【補正の内容】
【００８４】
この時刻ｔ５〜ｔ６のフラッシュ処理８６に続いて、１サイクルブランクを経て時刻ｔ７より分岐失敗後の最初の命令のデコードステージＤ６が開始される。本発明にあっては、時刻ｔ６〜ｔ７の１サイクルブランクにおいて、図４の最新レジスタ更新データ処理部２２に対するフラッシュの１サイクルレイト信号Ｅ５により、分岐前の時刻ｔ１からの２番目の命令のデコードステージＤ２に続く書込ステージＷ２で汎用レジスタに書き込まれたレジスタ値を汎用レジスタ読出処理８８で読出し、図４の最新レジスタ更新バッファ４８−０に保持している更新ステージＵ３のレジスタ値に上書きする最新レジスタ更新割当バッファ格納処理９０を行う。


【手続補正１６】
【補正対象書類名】明細書
【補正対象項目名】００８５
【補正方法】変更
【補正の内容】
【００８５】
このため、分岐失敗後の時刻ｔ７からの最初の命令のデコードステージＤ６にあっては、最新レジスタ更新割当バッファ４８−０のレジスタ値は分岐前の投機実行でない実行結果の汎用レジスタ値となっており、デコードステージＤ６で、この分岐前の汎用レジスタ値を読み出してリザベーションステーションのデータ格納領域に格納し、分岐前に戻って命令操作を実行することができる。


【手続補正１７】
【補正対象書類名】明細書
【補正対象項目名】００８７
【補正方法】変更
【補正の内容】
【００８７】
このリザベーションステーション２６に対する最新レジスタ更新データ値の格納は、最新レジスタ更新割当バッファ４８−０のレジスタ値をソースオペランドとして用いる命令のデコードステージで行われる。即ち、命令のデコードステージで得られるデコードステージ割当バッファアドレス信号Ｅ１と、リザベーションステーション２６のＲＳ割当エントリ２６−１１のＲ１更新バッファアドレス５６をマッチング処理部９２でマッチングし、一致していた場合には、最新レジスタ更新割当バッファ４８−０の最新レジスタ更新データを読み出して、リザベーションステーション２６におけるＲＳ割当エントリ２６−１１の中のデータ領域５８に格納する。


【手続補正１８】
【補正対象書類名】明細書
【補正対象項目名】００８８
【補正方法】変更
【補正の内容】
【００８８】
なお、ＲＳ割当エントリ２６−１１のデータ領域５８は、他の割当エントリを含む点線の領域で区切ることでデータリザベーションステーション６２として定義することができる。したがって、最新レジスタ更新データ処理部２２は、このデータリザベーションステーション６２の中の割当エントリの部分に最新レジスタ更新割当バッファ４８−０のレジスタ値を読み出して格納することになる。


【手続補正１９】
【補正対象書類名】明細書
【補正対象項目名】００９０
【補正方法】変更
【補正の内容】
【００９０】
図７はコンディションコードＣＣのリザベーションステーションへの格納制御を行う本発明によるプロセッサのハードウェア構成のブロック図である。


【手続補正２０】
【補正対象書類名】明細書
【補正対象項目名】００９３
【補正方法】変更
【補正の内容】
【００９３】
図８は、図７の最新ＣＣレジスタ更新データ処理部において更新ステージで最新ＣＣレジスタ更新バッファに対し、ＣＣデータを格納する処理状態のブロック図である。


【手続補正２１】
【補正対象書類名】明細書
【補正対象項目名】００９４
【補正方法】変更
【補正の内容】
【００９４】
図８において、最新ＣＣレジスタ更新データ処理部９４には、図７の最新ＣＣレジスタ更新バッファ９８上で、ＣＣレジスタ１００に対応して割当られた最新ＣＣレジスタ更新バッファ９８−０が準備されている。この最新ＣＣレジスタ更新割当バッファ９８−０に対応し、ＣＣペンディングビットラッチ１０２−０とＣＣ割当バッファアドレスラッチ１０４−０が設けられている。


【手続補正２２】
【補正対象書類名】明細書
【補正対象項目名】００９５
【補正方法】変更
【補正の内容】
【００９５】
最新ＣＣレジスタ更新データ処理部９４に対しては、命令のデコードステージにおいてデコードステージ割当バッファアドレス信号Ｅ１１と更新保留中信号Ｅ１２が与えられる。またデコードステージに続く実行ステージで実行結果としてのレジスタ値が得られた後の更新ステージおいて得られる更新ステージ割当バッファアドレス信号Ｅ１３、更新サイクルバリット信号Ｅ１４、更に演算結果ＣＣデータ信号Ｅ１６が与えられている。


【手続補正２３】
【補正対象書類名】明細書
【補正対象項目名】００９７
【補正方法】変更
【補正の内容】
【００９７】
リザベーションステーション２６には、命令のデコードステージで、例えばＲＳ割当エントリ２６−１１が確保される。このＲＳ割当エントリ２６−１はＣＣレジスタ更新バッファアドレス１１０、ＣＣデータ領域１１２及びオペコードなどの命令操作１１４を含む。


【手続補正２４】
【補正対象書類名】明細書
【補正対象項目名】００９８
【補正方法】変更
【補正の内容】
【００９８】
尚、このＲＳ割当エントリ２６−１１についての第１ソースレジスタＲ１側を取り出しており、第２ソースレジスタＲ２側及びディストネーションレジスタ側は省略している。またＲＳ割当エントリ２６−１１におけるＣＣデータ領域１１２は他の割当エントリを含めて点線のようにＣＣデータリザベーションステーション１１６と呼ばれる。


【手続補正２５】
【補正対象書類名】明細書
【補正対象項目名】０１０４
【補正方法】変更
【補正の内容】
【０１０４】
命令のデコートステージに続いて投機実行による実行ステージで実行結果としてＣＣレジスタ値が得られると、次の更新ステージにおいて更新ステージ割当バッファアドレス信号Ｅ１３、更新サイクルバリッド信号Ｅ１４、演算結果ＣＣデータ信号Ｅ１６が得られる。


【手続補正２６】
【補正対象書類名】明細書
【補正対象項目名】０１０５
【補正方法】変更
【補正の内容】
【０１０５】
そこでマッチング処理部１２０でＣＣ割当バッファアドレスラッチ１０２−０のデコードステージの割当バッファアドレスと更新ステージの割当バッファアドレスをマッチングし、一致した場合にＮＡＮＤゲート１２２に対する出力をレベル１とする。


【手続補正２７】
【補正対象書類名】明細書
【補正対象項目名】０１０６
【補正方法】変更
【補正の内容】
【０１０６】
また、この時ＣＣペンディングビットラッチ１０４にＣＣペンディングビットが保持されていることからＮＡＮＤゲート１２２に対する出力はレベル１となっている。更に更新サイクルバリット信号Ｅ１４が得られることで、ＮＡＮＤゲート１２２に対する入力は１となり、全ての入力がレベル１となることでその出力はレベル０となる。


【手続補正２８】
【補正対象書類名】明細書
【補正対象項目名】０１０８
【補正方法】変更
【補正の内容】
【０１０８】
この更新ステージにあっては、演算結果として演算結果ＣＣデータ信号Ｅ１６がＮＡＮＤゲート１２８に対し得られており、フラッシュの１サイクルレイト信号Ｅ１５がないことからＮＡＮＤゲート１２８は許容状態となり、演算結果ＣＣデータ信号Ｅ１６はＮＡＮＤゲート１２８，１３２を介してデータ端子Ｄから最新ＣＣレジスタ更新割当バッファ９８−０に書き込まれる。


【手続補正２９】
【補正対象書類名】明細書
【補正対象項目名】０１１２
【補正方法】変更
【補正の内容】
【０１１２】
分岐予測による最初の命令のデコードステージＤ１３に続き、実行ステージＸ１３での投機実行により実行結果としてＣＣレジスタ値が得られ、次の更新ステージＵ１３において図９の論理制御部１１８の制御によって、演算結果であるＣＣレジスタデータ信号Ｅ１７が最新ＣＣレジスタ更新割当バッファ９８−０に格納される。


【手続補正３０】
【補正対象書類名】明細書
【補正対象項目名】０１１４
【補正方法】変更
【補正の内容】
【０１１４】
このフラッシュ処理１３６に伴い図９の最新ＣＣレジスタ更新データ処理部９４に対し、フラッシュの１サイクルレイト信号Ｅ１５が与えられ、論理制御部１１８による制御動作で最新ＣＣレジスタ更新割当バッファ９８−０に、この時ＣＣレジスタ１００から得られているＣＣレジスタデータ信号Ｅ１７を上書きする。


【手続補正３１】
【補正対象書類名】明細書
【補正対象項目名】０１１５
【補正方法】変更
【補正の内容】
【０１１５】
続いてフラッシュ処理１３６に続く時刻ｔ６〜ｔ７の１サイクルブランクで、ＣＣ汎用レジスタ読出処理１３８により分岐前のＣＣデータを保持している図８のＣＣレジスタ１００のレジスタ値を読み出し、図９の論理制御部１１８によって最新ＣＣレジスタ更新割当バッファ９８−０に上書きする最新ＣＣレジスタ更新バッファ格納処理１４０を行う。


【手続補正３２】
【補正対象書類名】明細書
【補正対象項目名】０１１６
【補正方法】変更
【補正の内容】
【０１１６】
このため分岐失敗後の１サイクルブランクを経た、時刻ｔ７からの命令のデコードステージＤ１６にあっては、分岐失敗によるフラッシュ処理１３６に伴う処理で図９の最新ＣＣレジスタ更新割当バッファ９８−０に上書きされた分岐前の、例えば時刻ｔ１から２番目の命令の書込ステージＷ１２で書き込まれた最新のＣＣデータを最新ＣＣレジスタ更新割当バッファ９８−０から読出し、リザベーションステーションに格納する。


【手続補正３３】
【補正対象書類名】明細書
【補正対象項目名】０１１８
【補正方法】変更
【補正の内容】
【０１１８】
この図１１の命令のデコードステージにあっては、デコードステージ割当バッファアドレス信号Ｅ１１が得られていることから、これをマッチング処理部１４２に与えて、リザベーションステーション２６におけるＲＳ割当エントリ２６−１１のＣＣレジスタ更新バッファアドレス１１０とマッチングし、一致した場合には最新ＣＣレジスタ更新割当バッファ９８−０に格納している最新ＣＣ更新データを読み出して、リザベーションステーション２６のＣＣデータ領域１１２に格納する。


【手続補正３４】
【補正対象書類名】明細書
【補正対象項目名】０１２３
【補正方法】変更
【補正の内容】
【０１２３】
（付記３）
付記１記載のプロセッサに於いて、前記バッファ制御部は、
前記バッファの割当アドレスを保持するアドレスラッチと、
前記レジスタ更新データが更新保留中にあることを示すペンディングビットを保持する更新保留中ラッチと、
命令の投機実行に続く更新サイクルで、レジスタ更新データの更新アドレスが前記アドレスラッチの割当アドレスと一致し、前記更新保留中ラッチにペンディングビットが保持されており、且つ更新サイクルバリッド信号が得られたことを条件に、最新のレジスタ更新データを前記バッファに格納する論理制御部と、
を備えたことを特徴とするプロセッサ。


【手続補正３５】
【補正対象書類名】明細書
【補正対象項目名】０１３５
【補正方法】変更
【補正の内容】
【０１３５】
（付記１５）
付記１４記載のプロセッサに於いて、前記バッファ制御部は、
前記バッファの割当アドレスを保持するアドレスラッチと、
前記コンディションコードレジスタ更新データが更新保留中にあることを示すペンディングビットを保持する更新保留中ラッチと、
命令の投機実行により更新サイクルで、コンディションコードレジスタ更新データの更新アドレスが前記アドレスラッチの割当アドレスと一致し、前記更新保留中ラッチにペンディングビットが保持されており、且つ更新サイクルバリッド信号が得られたことを条件に、最新のコンディションコードレジスタ更新データを前記バッファに格納する論理制御部と、
を備えたことを特徴とするプロセッサ。


【手続補正３６】
【補正対象書類名】明細書
【補正対象項目名】０１４１
【補正方法】変更
【補正の内容】
【０１４１】
（付記２１）
付記２０記載の命令制御方法に於いて、前記バッファ制御ステップは、
前記バッファの割当アドレスをアドレスラッチに保持するステップと、
前記コンディションコードレジスタ更新データが更新保留中にあることを示すペンディングビットを更新保留中ラッチに保持するステップと、
命令の投機実行により更新サイクルで、コンディションコードレジスタ更新データの更新アドレスが前記アドレスラッチの割当アドレスと一致し、前記更新保留中ラッチにペンディングビットが保持されており、且つ更新サイクルバリッド信号が得られたことを条件に、最新のコンディションコードレジスタ更新データを前記バッファに格納するステップと、
を備えたことを特徴とする命令制御方法。


【手続補正３７】
【補正対象書類名】明細書
【補正対象項目名】図面の簡単な説明
【補正方法】変更
【補正の内容】
【図面の簡単な説明】
【図１】本発明の原理説明図
【図２】レジスタデータのリザベーションステーションへの格納制御を行う本発明によるプロセッサのハードウェア構成のブロック図
【図３】更新ステージで最新レジスタ更新バッファにデータを格納する本発明による命令制御の機能ブロック図
【図４】図３の最新レジスタ更新データ処理部における機能構成のブロック図
【図５】本発明のデータ格納処理が行われるパイプラインステージの説明図
【図６】図３の最新レジスタ更新バッファのデータをデコードステージでリザベーションステーションに格納する本発明による命令制御の機能ブロック図
【図７】ＣＣレジスタデータのリザベーションステーションへの格納制御を行う本発明によるプロセッサのハードウェア構成のブロック図
【図８】更新ステージで最新レジスタ更新バッファに対しＣＣデータを格納する本発明による命令制御の機能ブロック図
【図９】図３の最新ＣＣレジスタ更新データ処理部における機能構成のブロック図
【図１０】本発明のＣＣデータ格納処理が行われるパイプラインステージの説明図
【図１１】図３の最新ＣＣレジスタ更新バッファのＣＣデータをデコードステージでリザベーションステーションに格納する本発明による命令制御の機能ブロック図
【図１２】リザベーションステーションにレジスタ更新データを格納する従来の命令制御の説明図
【図１３】リザベーションステーションにＣＣレジスタ更新データを格納する従来の命令制御の説明図