(57)【要約】【課題】先行フローの実行結果を格納する専用のハードウェアを設けることなく、後続フローが実行されるまで破壊されないように保証する。【解決手段】命令発行部１６は予め定められた所定の命令をフェッチしてデコードした際に、先行フローと後続フローのマルチフローに命令操作を展開してインオーダーで発行し、リザベーションステーション２５に保持し、命令実行部２８がリザベーションステーション２５に保持された命令をアウトオブオーダーで実行し、更に命令の実行結果をインオーダーで確定させる。マルチフロー保証処理部２０は、レジスタ更新バッファ４６の割当レジスタに格納した先行フローの実行結果を後続フローの確定するまで保証する。この保証処理は、先行フローが確定して割当レジスタが開放されても、後続フローが確定するまで、次のレジスタ割付け先となる他の命令をデコードサイクルでストールさせることで実現する。【選択図】　　　　　図１
2004038750.tif 000002
【特許請求の範囲】
【請求項１】
予め定められた所定の命令をフェッチしてデコードした際に、先行フローと後続フローのマルチフローに命令操作を展開してインオーダーで発行する命令発行部と、
前記発行命令を保持するリザベーションステーションと、
前記リザベーションステーションに保持された命令をアウトオブオーダーで実行する命令実行部と、
前記命令実行部で実行した命令の確定を判別してインオーダーで完了させる確定部と、
前記命令実行部による先行フローの実行結果を、先行フローが確定してから後続フローが確定するまで保証するマルチフロー保証処理部と、
を備えたことを特徴とするプロセッサ。
【請求項２】
請求項１記載のプロセッサに於いて、
更に、依存関係にある複数の命令で使用するレジスタを名前替えしてレジスタ更新バッファ上に割り当て、前記確定部による実行命令の確定で前記レジスタ更新バッファ上に割り当てたレジスタを開放するリネーミング処理部を備え、
前記マルチフロー保証処理部は、依存関係にある先行フローと後続フローで使用するレジスタを、前記先行フローのデコード時に、前記リネーミング処理部により名前替えせずに前記レジスタ更新バッファ上に専用レジスタを割り当て、前記後続フローが確定するまで前記専用レジスタの開放を禁止することを特徴とするプロセッサ。
【請求項３】
請求項１記載のプロセッサに於いて、前記マルチフロー保証処理部は、
先行フローの確定から後続フローが確定するまでのあいだオンするバリッド信号Ｘを出力するバリッド生成部と、
前記レジスタ更新バッファ上の使用レジスタ数を計数するカウンタが最大値ＭＡＸからフロー数Ｎを差し引いたカウンタ値（ＭＡＸ−Ｎ）にあることを検出してオンするカウンタ判別信号Ｙを出力するカウンタ値判別部と、
前記カウンタが最大値にあることを検出してオンするバッファフル信号Ｚを出力するバッファフル検出部と、
前記バリッド信号Ｘとカウンタ判別信号Ｙとの論理積の結果に対し前記バッファフル信号Ｚと論理和をとった論理信号を生成し、前記論理信号がオンのあいだ、前記命令発行部におけるデコードサイクルをストールさせる論理演算部と、
を備えたことを特徴とするプロセッサ。
【請求項４】
請求項３記載のプロセッサに於いて、前記命令実行部は、前記先行フローの実行結果を前記レジスタ更新バッファ上に割当てた専用レジスタに格納し、後続フローの実行開始時に前記専用レジスタの値をフォーワーディングすることを特徴とするプロセッサ。
【請求項５】
命令発行部により、予め定められた所定の命令をフェッチしてデコードした際に、先行フローと後続フローのマルチフローに命令操作を展開してインオーダーで発行する命令発行ステップと、
前記発行命令をリザベーションステーションに保持する命令保持ステップと、
命令実行部により、前記リザベーションステーションに保持された命令をアウトオブオーダーで実行する命令実行ステップと、
確定部により、前記命令実行部で実行した命令の確定を判別してインオーダーで完了させる確定ステップと、
マルチフロー保証処理部により、前記命令実行ステップによる先行フローの実行結果を、先行フローが確定してから後続フローが確定するまで保証するマルチフロー保証ステップと、
を備えたことを特徴とする命令制御方法。
【請求項６】
予め定められた所定の命令をフェッチしてデコードした際に、先行フローと後続フローのマルチフローに命令操作を展開し且つ各命令フロー毎に固有の命令識別子を付してインオーダーで発行する命令発行部と、
前記発行命令を保持するリザベーションステーションと、
前記リザベーションステーションに保持された命令をアウトオブオーダーで実行する命令実行部と、
前記命令実行部で実行した命令の確定を判別してインオーダーで完了させる確定部と、
前記先行フローの命令識別子を後続フローが確定するまで保証するマルチフロー保証処理部と、
を備えたことを特徴とするプロセッサ。
【請求項７】
請求項６記載のプロセッサに於いて、前記命令発行部は、先行後続フローに割り当てた命令識別子を、先行フローと同じ命令識別子にエミュレートし、後続フローの命令操作開始時に、前記エミュレートされた命令識別子により先行フローの実行結果を参照することを特徴とするプロセッサ。
【請求項８】
請求項６記載のプロセッサに於いて、前記マルチフロー保証処理部は、
先行フローの確定から後続フローが確定するまでのあいだオンするバリッド信号Ｘを出力するバリット生成部と、
前記命令識別子の使用数を計数するカウンタが最大値ＭＡＸからフロー数Ｎを差し引いたカウンタ値（ＭＡＸ−Ｎ）にあることを検出してオンするカウンタ判別信号Ｙを出力するカウンタ値判別部と、
前記カウンタが最大値にあることを検出してオンする識別子フル信号Ｚを出力するバッファフル検出部と、
前記バリッド信号Ｘとカウンタ判別信号Ｙとの論理積の演算結果に対し前記識別子フル信号Ｚと論理和をとった論理信号を生成し、前記論理信号がオンのあいだ、前記命令発行部におけるデコードサイクルをストールさせる論理演算部と、を備えたことを特徴とするプロセッサ。
【請求項９】
請求項８記載のプロセッサに於いて、前記命令実行部は、前記先行フローの実行結果として得られた状態コードデータを先行フローの確定スタックエントリに格納し、後続フローのデコード時に前記先行フローの確定スタックエントリの状態コードデータを参照して後続フローの命令操作を選択的に実行することを特徴とするプロセッサ。
【請求項１０】
命令発行部により、予め定められた所定の命令をフェッチしてデコードした際に、先行フローと後続フローのマルチフローに命令操作を展開し且つ各命令フロー毎に固有の命令識別子を付してインオーダーで発行する命令発行ステップと、
前記発行命令をリザベーションステーションに保持する保持ステップと、
命令実行部により、前記リザベーションステーションに保持された命令をアウトオブオーダーで実行する命令実行ステップと、
確定部により、前記命令実行部で実行した命令の確定を判別してインオーダーで完了させる確定ステップと、
マルチフロー保証処理部により、前記先行フローの命令識別子を後続フローが確定するまで保証するマルチフロー保証ステップと、
を備えたことを特徴とする命令制御方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、先行命令の情報を後続命令が確定（コミット）するまで保持する命令制御を行うプロセッサ及び命令制御方法に関し、特に、命令をマルチフローに展開して先行フローの情報を後続フローにフォーワードする命令制御を行うプロセッサ及び命令制御方法に関する。
【０００２】
【従来の技術】
従来、動的パイプラインスケジュールを実行するプロセッサにあっては、プログラム順序に依存したインオーダーの命令発行部、プログラムの順番に依存しないアウトオブオーダーの命令実行部、更に、プログラム順序に依存したインオーダーの確定部（コミット）という３つに分かれて処理を実行する。
【０００３】
即ち、命令発行部は、インオーダーにより命令をフェッチしてデコードし、リザベーションステーションに命令操作（オペコード）とオペランドを保持させる。命令実行部は、リザベーションステーションに全てのオペランドが準備され、演算ユニットが利用可能となり次第、アウトオブオーダーで投機的に命令が実行され、結果を得る。確定部は、分岐予測結果などに基づき命令の確定を判別してインオーダーで命令を完了させ、実行結果をレジスタファイルまたはメモリ（ストアの場合のみ）に入れる。
【０００４】
このような動的パイプラインスケジューリングを採用したプロセッサにあっては、プログラム上頻度は少ないが、フェッチした命令のデコードサイクルで、内部的に複数の命令フローにマルチフロー展開しなければならない命令種がある。
【０００５】
例えばＳＰＡＲＣ命令アーキテクチャーにあっては、ピクセルディスタンス命令（Ｐｉｘｅｌ　Ｄｉｓｔａｎｃｅ　ｉｎｓｔｒｕｃｔｉｏｎ）が該当する。このピクセルディスタンス命令は、ソースレジスタＲ１，Ｒ２の各々に格納した６４ビットのピクセル値につき、８ビット単位に分割して両者の差分を演算した後、各差分の総和を求める命令である。
【０００６】
ピクセルディスタンス命令は、デコードサイクルで減算操作を行う先行フローと加算操作を行う後続フローとのマルチフローに展開され、リザベーションステーションに格納された後、アウトオブオーダーで先行フローの減算操作が実行され、この実行結果を後続フローの命令実行の前にフォーワードして加算操作を行い、得られた結果を確定させている。
【０００７】
ところで、先行フローの情報を後続フローにフォーワードする場合、従来は先行フローの実行情報を保持する専用のハードウェアレジスタを設けている。
【０００８】
【発明が解決しようとする課題】
しかしながら、命令頻度が少ないマルチフローにおけるフォーワード制御のために専用のハードウェアレジスタを設けることは、資源的に無駄になることから、専用ハードウェアレジスタを設けずに、リネーミングのために設けているレジスタ更新バッファＲＵＢ（Ｒｅｇｉｓｔｅｒ　Ｕｐｄａｔｅ　Ｂｕｆｆｅｒ）上のレジスタを割り当てることが考えられる。
【０００９】
アウトオブオーダーを採用するプロセッサでは、レジスタ内容がプログラム順序で更新参照される方法としてレジスタリネーミング技術が知られている。レジスタリネーミングとは、レジスタを更新する演算命令及びメモリフェッチ命令に、確定までレジスタ更新データを保持するレジスタ更新バッファ上のレジスタを割り当てることである。
【００１０】
このとき、レジスタ更新バッファの割当レジスタが更新保留中であること、及び、レジスタ更新バッファの割当アドレスをリネーミングマップに保持する。後続命令は読み出しソースとなるレジスタのアドレスで、リネーミングマップのソースレジスタに対応するレジスタ更新バッファ上のアドレスを参照し、レジスタ更新が保留中のときは更新バッファ割当アドレスによりデータフォーワードを制御する。
【００１１】
しかし、レジスタ更新バッファの割当レジスタは、命令の確定で解放されてしまうため、先行フローの確定から後続フローの実行までに時間が空いてしまったときに、その割当レジスタを後の別の命令が壊してしまう可能性があり、後続フローに対するフォーワード制御が保証されない問題がある。
【００１２】
同様な問題は、ＳＰＡＲＣ命令アーキテクチャーのコンペアアンドスワップ命令（Ｃｏｍｐａｒｅ　ａｎｄ　Ｓｗａｐ　ｉｎｓｔｒｕｃｔｉｏｎ）におけるマルチフローの命令識別子ＩＩＤについても生ずる。
【００１３】
コンペアアンドスワップ命令は、
ｃａｓ　［ｒｓ１］，ｒｓ２，ｒｄ
と記述され、ソースレジスタｒｓ１をアドレスとしてメモリの値をロードしてディストネーションレジスタｒｄに書込み、且つその値をソースレジスタｒｓ２と比較し、一致したら元のディストネーションレジスタｒｄをアドレスがｒｓ１のメモリにストアし、不一致であれば実行しないという命令操作をもつ。
【００１４】
このコンペアアンドスワップ命令は、先行フローのロード及び比較操作と後続フローのメモリへのストア操作とのマルチフローに展開される。そして先行フローに対し命令識別子ＩＩＤとして例えばＩＩＤ＝ｘを割り付けると、後続フローに対しては本来、１つ増加させた命令識別子ＩＩＤ＝ｘ＋１を割付けることになるが、これをせずに第１フローと同じ命令識別子ＩＩＤ＝ｘにエミュレートする。
【００１５】
この命令識別子ＩＩＤのエミュレートは、確定スタックエントリ（Ｃｏｍｍｉｔ　Ｓｔａｃｋ　Ｅｎｔｒｙ）にスタックしている未完了の先行フローと後続フローの別々のエントリを、命令識別子ＩＩＤ＝ｘによって同一のエントリとして参照できるようにするためである。
【００１６】
これにより後続フローの実行直前で、後続フローに割り当てられてエミュレートされた命令識別子ＩＩＤ＝ｘにより先行フローエントリに保持されている比較結果を参照し、一致であればストア操作を実行し、不一致であれば、結果を破棄する制御ができる。
【００１７】
しかし、確定スタックエントリは、命令の確定で解放されてしまうため、先行フローの確定から後続フローの実行までに時間が空いてしまったときに、先行フローの確定スタックエントリを後の別の命令が壊してしまう可能性があり、後続フローへのエミュレート制御が保証されない問題がある。
【００１８】
本発明は、先行フローの情報を後続フローが確定するまで破壊されないように保証する命令制御を行うプロセッサ及び命令制御方法を提供することを目的とする。
【００１９】
【課題を解決するための手段】
図１は本発明の原理説明図である。
（先行フロー実行情報の保証）
本発明のプロセッサは、先行フローの実行結果を格納する専用のハードウェアレジスタを設けることなく、後続フローが確定するまで先行フローの実行結果が破壊されないように保持する命令制御を行う。
【００２０】
このため本発明のプロセッサは、図１（Ａ）のように、予め定められた所定の命令をフェッチしてデコードした際に、先行フローと後続フローのマルチフローに命令操作を展開してインオーダーで発行する命令発行部１６と、発行命令を保持するリザベーションステーション２５と、リザベーションステーション２５に保持された命令をアウトオブオーダーで実行する命令実行部２８と、命令実行部２８で実行した命令の確定を判別してインオーダーで完了させる確定部１５と、命令実行部２８の先行フローの実行結果を、先行フローが確定してから後続フローが確定するまで保証するマルチフロー保証処理部２０とを設けたことを特徴とする。
【００２１】
このため先行フローの実行結果は後続フローが確定するまで保持され、先行フローの情報を後続フローヘ確実にフォーワーディングすることを保証する。
【００２２】
更に本発明のプロセッサは、依存関係にある複数の命令で使用するレジスタを名前替えしてレジスタ更新バッファ４６上に割り当て、命令による実行結果の確定でレジスタ更新バッファ４６上に割り当てたレジスタを開放するリネーミング処理部１８を備え、この場合、マルチフロー保証処理部２０は、依存関係にある先行フローと後続フローで使用するレジスタを、先行フローのデコード時に、リネーミング処理部１８で名前替えせずにレジスタ更新バッファ４６上に専用レジスタを割り当て、命令フローが確定するまで専用レジスタの開放を禁止する。
【００２３】
このようにリネーミングに使用しているレジスタ資源を活用してマルチフローの専用レジスタに割り当てるため、マルチフローのために専用のレジスタ資源を別途設ける必要がなく、プロセッサの構成を簡単にし、リソース資源を節減できる。
【００２４】
マルチフロー保証処理部２０は、具体的には、先行フローの確定から後続フローが確定するまでのあいだオンするバリッド信号Ｘを出力するバリッド生成部と、レジスタ更新バッファ上の使用レジスタ数を計数するカウンタが最大値ＭＡＸからフロー数Ｎを差し引いたカウンタ値（ＭＡＸ−Ｎ）にあることを検出してオンするカウンタ判別信号Ｙを出力するカウンタ値判別部と、カウンタが最大値にあることを検出してオンするバッファフル信号Ｚを出力するバッファフル検出部と、バリッド信号Ｘとカウンタ判別信号Ｙとの論理積（Ｘａｎｄ　Ｙ）の結果に対しバッファフル信号Ｚと論理和［（Ｘ　ａｎｄ　Ｙ）ｏｒ　Ｚ］をとった論理信号を生成し、論理信号がオンのあいだ、命令発行部１６におけるデコードサイクルをストールさせる論理演算部とを備えたことを特徴とする。
【００２５】
命令実行部１６は、先行フローの実行結果をレジスタ更新バッファ４６上に割当てた専用レジスタに格納し、後続フローの実行開始時に専用レジスタの値をフォーワーディングすることを特徴とする。
【００２６】
本発明はプロセッサの命令制御方法を提供する。この命令制御方法は、
命令発行部１６により、予め定められた所定の命令をフェッチしてデコードした際に、先行フローと後続フローのマルチフローに命令操作を展開してインオーダーで発行する命令発行ステップと、
発行命令をリザベーションステーション２５に保持する保持ステップと、
命令実行部２８により、リザベーションステーション２５に保持された命令をアウトオブオーダーで実行する命令実行ステップと、
確定部１５により、実行済みの命令の確定を判断してインオーダーで完了させる確定ステップと、
マルチフロー保証処理部２０により、命令実行ステップの実行結果を、先行フローが確定してから後続フローが確定するまで保証するマルチフロー保証ステップと、
を備えたことを特徴とする。尚、命令制御方法の詳細はプロセッサの場合と基本的に同じになる。
【００２７】
（先行フロー命令識別子の保証）
本発明のプロセッサは、専用のハードウェアレジスタを設けることなく、先行フローの命令識別子を後続フローが実行されるまで破壊されないように保持する命令制御を行う。
【００２８】
そこで本発明のプロセッサは、図１（Ｂ）のように、予め定められた所定の命令をフェッチしてデコードした際に、先行フローと後続フローのマルチフローに命令操作を展開し且つ各命令フロー毎に固有の命令識別子を付してインオーダーで発行する命令発行部１６と、発行命令を保持するリザベーションステーション２５と、リザベーションステーション２５に保持された命令をアウトオブオーダーで実行する命令実行部２８と、命令実行部で実行済みの命令の確定を判別してインオーダーで完了させる確定部１５と、先行フローの命令識別子を後続フローが確定するまで保証するマルチフロー保証処理部２０４とを設けたことを特徴とする。
【００２９】
このため先行フローの命令識別子は後続フローが確定するまで保持され、確定待ちにある先行フローの確定スタックエントリ情報を後続フローの命令操作に確実に反映してフォーワード制御を保証する。
命令発行部１６は、後続フローに割り当てた命令識別子を、先行フローと同じ命令識別子にエミュレートし、後続フローの命令操作開始時に、エミュレートされた命令識別子により先行フローの実行結果を参照可能とする。
【００３０】
マルチフロー保証処理部２０４は、先行フローの確定から後続フローが確定するまでのあいだオンするバリッド信号Ｘを出力するバリット生成部と、命令識別子の使用数を計数するカウンタが最大値ＭＡＸからフロー数Ｎを差し引いたカウンタ値（ＭＡＸ−Ｎ）にあることを検出してオンするカウンタ判別信号Ｙを出力するカウンタ値判別部と、カウンタが最大値にあることを検出してオンする識別子フル信号Ｚを出力するバッファフル検出部と、バリッド信号Ｘとカウンタ判別信号Ｙとの論理積（Ｘ　ａｎｄ　Ｙ）の結果に対し識別子フル信号Ｚと論理和［（Ｘ　ａｎｄ　Ｙ）ｏｒ　Ｚ］をとった論理信号を生成し、論理信号がオンのあいだ、命令発行部におけるデコードサイクルをストールさせる論理演算部とを備えたことを特徴とする。
【００３１】
命令実行部１６は、先行フローの実行結果として得られた状態コードデータを先行フローの確定スタックエントリに格納し、後続フローのデコード時に先行フローの確定スタックエントリの状態コードデータを参照して後続フローの命令操作を選択的に実行することを特徴とする。
【００３２】
本発明は、プロセッサの命令制御方法を提供する。この命令制御方法は、
命令発行部１６により、予め定められた所定の命令をフェッチしてデコードした際に、先行フローと後続フローのマルチフローに命令操作を展開し且つ各命令フロー毎に固有の命令識別子を付してインオーダーで発行する命令発行ステップと、
発行命令をリザベーションステーション２５に保持する保持ステップと、
命令実行部２８により、リザベーションステーション２５に保持された命令をアウトオブオーダーで実行する命令実行ステップと、
確定部１５により、命令実行部２８で実行済みの命令の確定を判別してインオーダーで完了させる確定ステップと、
マルチフロー保証処理部２０４により、先行フローの命令識別子を後続フローの実行結果が確定するまで保証するマルチフロー保証ステップと、
を備えたことを特徴とする。尚、この命令制御方法の詳細はプロセッサの場合と基本的に同じになる。
【００３３】
【発明の実施の形態】
図２は、本発明の命令発行制御を備えたプロセッサの機能構成のブロック図である。
【００３４】
図２において、プロセッサは、命令フェッチ部１０、分岐予測部１４、命令キャッシュ１２、命令発行部１６、リネーミング処理部１８、本発明により新たに設けられたマルチフロー保証処理部２０、リザベーションステーション２５−１〜２５−５を備えたリザベーションステーション処理部２４、固定小数点演算部３０−１，３０−２、浮動小数点演算部３２−１，３２−２及びロード／ストア演算部３４を備えた命令実行部２８、ストアバッファ３６、データキャッシュ３８、レジスタファイル４０及びリソースモニタ５０を備える。
【００３５】
レジスタファイル４０には、コミットスタックエントリ（確定スタックエントリ）４２、アーキテクチャレジスタファイルとして知られた汎用レジスタファイル４４、及びレジスタリネーミング処理のレジスタ割り当ての対象となるレジスタ更新バッファ４６を備えている。また命令キャッシュ１２及びデータキャッシュ３８は、ＳＰＡＲＣポートアーキテクチャに対応した図示しないインタフェースからシステムコントローラを介してメモリに接続されている。
【００３６】
図３は、図２のプロセッサの実施形態について、リネーミングを中心とした本発明による処理機能のブロック図である。
【００３７】
図３において、動的パイプラインスケジューリングを行う本発明のプロセッサの基本的な処理手順を説明すると次のようになる。命令フェッチ部１０は、命令キャッシュ１２側の待ち行列から例えば４命令分をまとめて命令語レジスタ１６−１〜１６−４にフェッチしてデコードする。デコードされた４つの命令はリザベーションステーション処理部２４に送られる。
【００３８】
リザベーションステーション処理部２４は演算用として、図２のように５つのリザベーションステーション２５−１〜２５−５を備えており、予め定めた関係にある空きのあるリザベーションステーションに対し命令を格納する。
【００３９】
ここで図２のリザベーションステーション２５−１〜２５−５は例えばそれぞれ８つのエントリを備えており、合計４０個の演算命令をリザーブすることができる。このリザベーションステーション処理部２４に対する命令の格納は、プログラムの順番に従ったインオーダーで行われている。
【００４０】
リザベーションステーション処理部２４に命令を投入すると同時に、コミットスタックエントリ４２にも命令ごとにエントリが割り当てられ、命令のコミット（確定）による開放まで保持される。この実施形態でコミットスタックエントリ４２は６４エントリを有する。
【００４１】
このため命令語レジスタ１６−１〜１６−４からは、リザベーションステーション処理部２４の対応するリザベーションステーションとコミットスタックエントリ４２及び素の命令実行に必要な資源（レジスタ更新バッファ、ストアバッファ等）に利用可能なエントリがないと命令は発行されず、デコードサイクルでストールすることになる。
【００４２】
命令エンジンとして機能する命令実行部２８は、リザベーションステーション処理部２５の対応するリザベーションステーションに命令の全てのオペランドの準備が整い且つ対応する演算部が利用可能になると、直ちに命令操作が実行されて実行結果が得られる。
【００４３】
命令実行部２８における命令の実行操作はプログラムの順序どおりとはならず、実行可能命令から逐次投機的に実行するアウトオブオーダーで行う。
【００４４】
命令実行部２８の実行結果は、分岐の成立などの判定結果を受けて命令を確定し、ストアバッファ３６に格納した後、ストア命令であればデータキャッシュ３８に格納してインオーダーで命令を完了させ、それ以外の演算命令であれば、更に汎用レジスタファイル４４の対応レジスタに格納してインオーダーで命令を完了させる。このように命令が確定すると、コミットスタックエントリ４２の割当エントリは開放される。
【００４５】
本発明のプロセッサは、命令実行部２８においてアウトオブオーダーで命令操作を実行しており、命令実行がプログラムの順序どおりでないために、命令ごとに情報を保持する専用レジスタを割り当てなければならない。図３の場合には４つの命令語レジスタ１６−１〜１６−４を用意していることから、４つの専用レジスタを割り当てることができなければ、命令を同時にリザベーションステーション処理部２４に格納することができず、専用レジスタを割り当て尽くした時点でデコードサイクルでストールしなければならない。
【００４６】
命令ごとに割り当てる専用レジスタとしてレジスタ更新バッファ４６が準備されている。この実施形態においてレジスタ更新バッファ４６は、例えば６４エントリを確保している。
【００４７】
命令ごとに専用レジスタを割り当て、レジスタ内容がプログラム順序で更新参照される方法として、レジスタリネーミングが知られている。このレジスタリネーミングを具体的に説明すると次のようになる。いま次のような命令１、命令２、命令３があったとする。
【００４８】
命令１　Ｒ１＋Ｒ２＝Ｒ３
命令２　Ｒ３＋Ｒ４＝Ｒ３
命令３　Ｒ３＋Ｒ８＝Ｒ９
この３つの命令１〜３において、命令１のディストネーションレジスタＲ３と命令２の第１オペランドレジスタＲ３は依存関係にある。また命令２のディストネーションレジスタＲ３と命令３の第１オペランドレジスタＲ３も依存関係にある。
【００４９】
このような場合に、レジスタリネーミングにあっては、命令１のディストネーションレジスタＲ３と命令２の第１オペランドレジスタＲ３を例えばリネーミングレジスタＲ３ａとして専用レジスタを割り当てる。また命令２のディストネーションレジスタＲ３と命令３の第１オペランドレジスタＲ３にリネーミングレジスタＲ３ｂを割り当てる。
【００５０】
命令のデコードの際に割り当てられたリネーミングレジスタＲ３ａは、命令１がコミットするまで使用が確保される。またリネーミングレジスタＲ３ｂは命令２がコミットするまで使用が確保される。
【００５１】
図４は、本発明における命令のデコードサイクルでレジスタ更新バッファ４６上にレジスタ割当てを行った場合のリネーミングマップ更新処理の説明図である。
【００５２】
図４において、レジスタを更新する演算命令及びフェッチ命令のデコードサイクルで命令の実行結果がコミットするまでレジスタ更新データを保持する専用レジスタをレジスタ更新バッファ４６上に割り当てる。
【００５３】
即ち命令語レジスタ１６−１〜１６−４の４つの命令について、図３のレジスタ更新バッファ４６上に４つのバッファを割り当て、この割当バッファに関する情報をリネーミングマップ５２に保持する。
【００５４】
リネーミングマップ５２はペンディングビット５３と割当アドレス５４を持っており、４つの命令に対応して割り当てた各割当レジスタごとにペンディングビット５３をセットし、且つ汎用レジスタＲＥＧと更新バッファにおける割当アドレスＵＢＡの関係を割当アドレス５４として登録している。
【００５５】
命令語レジスタ１６−１〜１６−４における４命令のデコードと同時に、例えば命令語レジスタ１６−１について示すように、リザベーションステーション２５に命令に対応した割当エントリ２６−１が確保され、またコミットスタックエントリ４２にも命令に対応した割当エントリ４５−１が確保される。
【００５６】
コミットスタックエントリ４２の割当エントリ４５−１は、バリッドビット５５、書込レジスタ割当ビット５６、レジスタ更新バッファ割当ビット５８、書込レジスタアドレス６０、更新バッファ割当アドレス６２、演算完了待ちビット６４、オペコードなどの命令操作６６、コンディションコードレジスタ書込ビット６８及びコンディションコードデータ７０のフィールドで構成されている。
【００５７】
この割当エントリ４５−１の命令に対応した割当てと同時に、命令のデコードサイクルで書込レジスタ割込ビット５６のビットセット、レジスタ更新バッファ割当ビット５８のビットセット、及び更新バッファ割当アドレス６２に対する割当アドレスの書込みが行われる。
【００５８】
一方、リザベーションステーション２５に確保された命令に対応した割当エントリ２６−１は、第１ソースレジスタ領域７２、第２ソースレジスタ領域７４に続いて、ディストネーション更新バッファ割当アドレス８６及びオペコードなどの命令操作８８を格納している。
【００５９】
第１ソースレジスタ領域７２には、第１ソースレジスタバリッドビット７６、第１ソースレジスタアドレス７８、第１ソースレジスタペンディングビット８０、第１ソースレジスタ更新バッファ割当アドレス８２及び第１ソースレジスタバイパスレディビット（フォーワードレディビット）８４が設けられる。第２ソースレジスタ領域７４についても第１ソースレジスタ領域７２と同様なフィールドが設けられるが、図示を省略している。尚、以下の説明では、第１ソースレジスタをＲ１、第２ソースレジスタをＲ２と省略した表現する。
【００６０】
図５は、図４で更新されたリネーミングマップ５２を後続命令が参照する場合の説明図である。例えば図４が前述した命令１であり、これを次の命令２の実行で参照することになる。
【００６１】
図５において、命令語レジスタ１６−１の命令を後続命令とすると、後続命令は読出ソースとなるレジスタのアドレス例えばアドレス「ＲＥＧ０」によりリネーミングマップ５２を参照し、そのペンディングビット５３及び割当アドレス５４によって、リザベーションステーション２５の割当エントリ２６−１のＲ１ペンディングビット８０及び第１ソースレジスタ更新バッファ割当アドレス８２を参照する。この先行命令の実行結果の参照により、図６のような後続命令に対するフォーワード制御を行うことができる。
【００６２】
図６の後続命令のフォーワード制御は、先行命令におけるＲ１レジスタ更新バッファ実行結果９０と図５のリネーミングマップ５２の参照で得られた割当エントリ２６−１のＲ１更新バッファ割当アドレス８０を処理９１で比較し、一致した場合には割当エントリ２６−１のＲ１バイパスレディビット８４をセットする。
【００６３】
また先行命令について、もしＲ２更新バッファ実行結果９４も得られている場合には、同じくリネーミングマップ５２を経由した参照で得られたＲ２更新バッファ割当アドレス９２と処理９５で比較し、一致した場合にＲ２バイパスレディビット９３をセットする。
【００６４】
このようにして先行命令の実行結果から後続命令に対するバイパスレディ、即ちフォーワードレディが判定されると、処理９６のように、バイパスレディビット８４，９３に基づき図３の命令実行部２８に対し実行条件の成立を通知し、先行命令の実行結果をフーォワードした後続命令が実行される。
【００６５】
図７は、本発明の制御対象となるＳＰＡＲＣ命令アーキテクチャで発行されるピクセルディスタンス命令（Ｐｉｘｅｌ　Ｄｉｓｔａｎｃｅ　ｉｎｓｔｒｕｃｔｉｏｎ）の通常の命令操作の説明図である。
【００６６】
ピクセルディスタンス命令は、第１ソースレジスタ９８と第２ソースレジスタ１００のそれぞれに６４ビットのピクセルデータを格納しており、６４ビットのピクセルデータを８ビットずつに分離して、対応する８ビットごとに減算１０２−１〜１０２−８を行い、この８つの減算結果を加算１０４で加算してディストネーションレジスタ１０６に結果を格納する命令操作を行う。
【００６７】
このようなピクセルディスタンス命令について、本発明のプロセッサにあっては、内部的に先行フローと後続フローとなる複数の命令フローに展開して順番に命令操作を実行するマルチフロー展開を行っている。
【００６８】
図８は、図７のピクセルディスタンス命令をマルチフローに展開した場合の命令操作の説明図である。マルチフロー展開されたピクセルディスタンス命令は、先行フロー１１０で第１ソースレジスタ９８と第２ソースレジスタ１００のそれぞれ６４ビットのピクセルデータを８ビット単位に分けて、対応する８ビットごとに減算１０２−１〜１０２−８を実行する命令操作を行い、先行フロー１１０の実行結果を先行フロー１１０のデコードサイクルで割り当てられた専用レジスタ１０８に格納する。
【００６９】
後続フロー１１２は専用レジスタ１０８に格納された８つの減算結果即ち先行フロー１１０の実行結果を取り出して加算１０４で加算操作し、加算結果をディストネーションレジスタ１０６に格納する。
【００７０】
このようなマルチフロー展開する命令につき、先行フロー１１０の実行結果を格納する専用レジスタ１０８として従来は専用のハードウェアレジスタを準備しているが、本発明にあってはハードウェア資源の節減を図るため、レジスタリネーミングに使用されている図３のレジスタ更新バッファ４６上のレジスタを割り当てる。
【００７１】
図９は、図８の先行フロー１１０のデコードサイクルにおける更新バッファのレジスタ割当てに伴うリネーミングマップの更新処理の説明図である。
【００７２】
図９において、命令語レジスタ１６−１で例えばピクセルディスタンス命令をデコードしたとすると、この実行結果をレジスタに書き込まない第１フローであっても、レジスタ更新バッファ４６上に後続命令にデータをフォーワード制御するために使用するバッファを割り当てる。
【００７３】
この後続命令にデータをフォーワード制御する割当バッファのデータは、汎用レジスタに書き込まれないことから、リネーミングマップ５２には登録されない。ここでリネーミングマップ５２に対する想像線は、図４の通常の命令における登録を表わしている。
【００７４】
後続命令のフォーワード制御のためのデータを格納する割当レジスタの更新バッファ割当アドレス１１８を格納する専用の手段として、ラッチ１１６を準備し、第１フローデコードサイクル１１４によってレジスタ更新バッファ４６上の更新バッファ割当アドレス１１８を例えば「ＵＢＡ」としてラッチ１１６に格納する。
【００７５】
また第１フローデコードサイクル１１４にあっては、コミットスタックエントリ４２に先行フロー割当エントリ４５−１が確保され、この先行フロー割当エントリ４５−１に対し先行フローのデコードサイクルでレジスタ更新バッファ割当ビット５８と更新バッファ割当アドレス６２が格納される。
【００７６】
同時に先行フローのデコードサイクルでリザベーションステーション２５に先行フロー割当エントリ２６−１が確保され、命令デコードサイクルでディストネーション更新バッファ割当アドレス８６が格納される。
【００７７】
図１０は、図９の先行フローのデコードサイクルで更新されたリネーミングマップ５２を後続フローのデコードサイクルで参照する処理の説明図である。命令語レジスタ１６−１で先行フローデコードサイクル１２０を行うと、リネーミングマップ５２をレジスタアドレスにより参照しても何も得られず、この場合には、ラッチ１１６の参照で先行フローの実行結果を格納しているレジスタ更新バッファ２４上の更新バッファ割当アドレス１１８を取得し、リザベーションステーション２５における先行フロー割当エントリ２６−１におけるＲ１更新バッファ割当アドレス８２を参照し、第１フローの実行結果を後続フローにフォーワード制御することができる。
【００７８】
図１１は、図１０のリネーミングマップ参照処理に基づく後続フローに対するフォーワード制御の説明図である。先行フローがコミットした際に、先行フロー実行結果１２２と図１０のリネーミングマップ参照処理で得られたリザベーションステーション２５における先行フロー割当エントリ２６−１Ｒ１バイパスレディビット８２をセットする。このマルチフローのフォーワード制御にあっては、Ｒ２更新バッファ実行結果１２６は存在しないことから、処理１２８によるバイパスレディビット９４のセットは行われない。
【００７９】
このため、処理１３０でＲ１バイパスレディビット８４のセットが行われたときに、図３の命令実行部２８に対し第１フローの実行結果をフォーワード制御して命令操作を実行させるレディ信号を出して命令操作を実行させる。
【００８０】
このように図８のピクセルディスタンス命令についてマルチフロー展開して先行フローの実行結果を後続フローにフォーワード制御する場合、先行フロー１１０の実行結果を確保する専用レジスタとしてレジスタ更新バッファ４６上のレジスタを本発明は割り当てているため、第１フローの実行結果を格納した割当レジスタのデータが、後続フローの実行結果がコミットされるまで保証できない問題がある。
【００８１】
即ち、先行フローのデコードサイクルで割り当てられたレジスタ更新バッファ２４上の割当レジスタは第１フローの実行結果のコミットで開放されてしまう。このため、先行フローから後続フローの間に時間的な空きがあった場合には、その間に実行された他の命令により先行フローの実行結果を保存している割当レジスタが使用され、先行フローの実行結果が壊されてしまう恐れがある。
【００８２】
そこで本発明にあっては、図２に設けているマルチフロー保証処理部２０によって、先行フローの実行結果が後続フローの実行結果のコミットまで割当レジスタ上に確保できることを保証する。
【００８３】
図１２は、図２のマルチフロー保証処理部２０の実施形態を示した説明図である。
【００８４】
図１２において、コミットスタックエントリ４２には先行フロー割当エントリ４５−１が確保され、またフロー数Ｎ＝１の間隔を置いて実行される後続フロー割当エントリ４５−２が確保されている。
【００８５】
このようなコミットスタックエントリ４２における先行フロー割当エントリ４５−１について、先行フローの実行結果がコミットされた場合、具体的には演算完了待ちビット６４−１が完了待ちの「１」からコミット可能の「０」となった時に、セット信号Ｅ１をバリッド信号生成部１３２に出力し、出力するバリッド信号Ｘをオン状態にセットする。
【００８６】
また、後続フローの実行結果のコミットを後続フロー割当エントリ４５−２の同じく演算完了待ちビット６４−２のビット「１」からビット「０」の変化を検出して、リセット信号Ｅ２をバリッド信号生成部１３２に出力し、オン状態にあるバリッド信号Ｘをオフとする。
【００８７】
一方、図３のソースモニタ５０に設けられている使用数カウンタ４８のカウンタ値を、カウンタ値判別部１３４及びバッファフル検出部１３６で監視する。使用数カウンタ４８は、図３のレジスタ更新バッファ４６における６４エントリの使用状態を計数している。
【００８８】
即ち、レジスタ更新バッファ４６上に命令のデコードサイクルを通じてレジスタ割当てが行われるごとに使用数カウンタ４８をカウントアップし、命令の実行結果のコミットで割当レジスタが開放されるごとに使用数カウンタ４８をカウントダウンする。これによって、使用数カウンタ４８のカウンタ値は０〜６３の範囲でレジスタの割当てと開放に伴って変化する。
【００８９】
カウンタ値判別部１３４は、使用数カウンタ４８のカウント値がレジスタ更新バッファの最大エントリ数ＭＡＸから第１フローと第２フローの間のフロー数Ｎを差し引いた値（ＭＡＸ−Ｎ）に達したとき、カウンタ判別信号Ｙを「１」とする。バッファフル検出部１３６は、使用数カウンタ４８のカウント値が最大数ＭＡＸになったときにバッファフル信号Ｚを「０」とする。
【００９０】
このようにして得られるバリッド信号Ｘ、カウンタ判別信号Ｙ及びバッファフル信号Ｚは、ＮＡＮＤゲート１３８，１４２、及びインバータ１４０の論理回路部で判別され、デコードステージストール信号Ｅ３を出力する。
【００９１】
デコードステージストール信号Ｅ３が「１」となる論理回路部による論理条件は、｛（バリッド信号Ｘａｎｄカウンタ判別信号Ｙ）ｏｒバッファフル信号Ｚ｝である。即ちデコードステージストール信号Ｅ３は、使用数カウンタ４８が最大値となってバッファフル信号Ｚが「１」のとき「１」となって、デコードステージをストールさせる。
【００９２】
またバッファフル信号Ｚが「１」となっていない状態であっても、バリッド信号Ｘが「１」で、且つカウンタ値が（ＭＡＸ−Ｎ）でカウンタ判別信号Ｙが「１」となっているとき、デコードステージストール信号Ｅ３が「１」となって、新たにレジスタ更新バッファ４６上のレジスタを割当アドレスとする命令をデコードサイクルでストールさせる。
【００９３】
図１３は、図１２のマルチフロー保証処理部による通常の命令実行におけるレジスタ更新バッファの割り当て各部信号ののタイムチャートである。ここで、左端にレジスタ更新バッファ４６の割当レジスタをＲＵＢ０，ＲＵＢ１，…ＲＵＢｍａｘ，ＲＵＢ０，ＲＵＢ１として表している。
【００９４】
最初の命令のデゴードサイクルＤにあっては処理１４４のようにレジスタＲＵＢ０の割当が行われ、使用数カウンタ４８の値は「０」である。続いてプライオリティサイクルＰでリザベーションステーションに命令が送られ、命令実行を待つ間、処理１４６のようにレジスタＲＵＢ０の使用が有効となる。この最初の命令が例えばストア命令であったとすると、書込サイクルＷの処理１４８によって命令が時刻ｔ１でコミットし、レジスタＲＵＢ０が開放される。
【００９５】
次の命令については処理１５０のデコードサイクルＤでレジスタＲＵＢ１が割当られ、処理１５２のプライオリティサイクルの間、レジスタＲＵＢ１の使用が有効となり、書込サイクルＷの処理１５４でレジスタＲＵＢ１が開放される。
【００９６】
以下同様に使用数カウンタ４８の値が「ＭＡＸ」になるまで同様な命令操作が繰り返される。使用数カウンタ４８の値が最大値「ＭＡＸ」となるデコードサイクルＤの処理１５６に続くプライオリティサイクルＰの処理１５８において、最初に割当てたレジスタＲＵＢ０の処理１４８で開放される時刻ｔ１までは、図１２のバッファフル検出部１３６からのバッファフル信号Ｚは「１」となる。
【００９７】
このためバリッド信号Ｘ及びカウンタ判別信号Ｙの状態に係らずＮＡＮＤゲート１４２からのデコードステージストール信号Ｅ３は「１」となり、レジスタＲＵＢ０を割当てた命令が時刻ｔ１でコミットするまで、次の命令のデコードサイクルＤをストールさせるため処理１６６のＲＵＢ０割当インターロックが行われる。
【００９８】
時刻ｔ１で命令がコミットしてレジスタＲＵＢ０が開放されると、使用数カウンタ４８がカウントアップされてカウンタ値が（ＭＡＸ−１）となり、デコードステージストール信号Ｅ３が「０」となってインターロックが解除され、時刻ｔ１に続くデコードサイクルの処理１６８によってレジスタＲＵＢ０が新たな命令に割り当てられる。
【００９９】
この時、次に開放されるレジスタＲＵＢ１の割当を予定している別の命令が同時にデコードされていたとすると、レジスタＲＵＢ０の割当によりバッファフル信号Ｚは「１」となるためデコードステージストール信号３は「１」となり、レジスタＲＵＢ０を割当てた命令が時刻ｔ２でコミットするまで、次の命令のデコードサイクルＤをストールさせるため処理１７１のＲＵＢ１割当インターロックが行われる。
【０１００】
図１４は、本発明のマルチフローの命令実行におけるレジスタ更新バッファの割当と図１２の各部信号のタイムチャートである。尚、左端に命令のデコードサイクルにおけるレジスタ更新バッファ上の割当レジスタをＲＵＢ０，ＲＵＢ１・・・ＲＵＢｍａｘ，ＲＵＢ０，ＲＵＢ１として表している。
【０１０１】
図１４において、処理１７５のように先行フローのデコードサイクルＤでレジスタＲＵＢ０が割当られると、次のプライオリティサイクルＰで処理１７６のようにレジスタＲＵＢ０の使用が有効となる。この第１フローの命令操作が書込サイクルＷで終了すると、処理１７８においてレジスタＲＵＢ０が命令のコミットを受けて開放される。
【０１０２】
この時刻ｔ１における先行フローのコミットにより図１２のバリッド信号生成部１３２が先行フロー割当１４５−１からセット信号Ｅ１を受けてセットされ、処理１８０のようにバリッド信Ｘが生成される。
【０１０３】
次にフロー数Ｎ＝１をおいて処理１８２で後続フローのデコードサイクルＤに入ると、後続フローに対しレジスタＲＵＢ１が割当られる。そしてプライオリティサイクルＰの処理１８４の間レジスタＲＵＢ１が使用有効となる。続いて後続フローは時刻ｔ１２で先行フローの実行結果のフォーワード制御を受けて実行操作ＥＸを行い、更新サイクルＵでレジスタ格納を行い、更に書込サイクルＷで演算結果のレジスタ格納を行う。この書込サイクルＷの処理１８６において第２フローの命令がコミットされ、時刻ｔ２でレジスタＲＵＢ１が開放される。
【０１０４】
このような先行フローと後続フローのマルチフローの命令操作に続いて、後続命令が順次処理され、レジスタＲＵＢｍａｘが処理１８８による命令のデコードサイクルＤで割当られると、この時、使用数カウンタ４８の値は最大値「ＭＡＸ」となり、時刻ｔ１で最初のレジスタＲＵＢ０が開放されるまで処理１９２のようにフル使用検出となる。
【０１０５】
このため次にレジスタＲＵＢ０及びＲＵＢ１の割当を予定した後続の２つの命令は、処理１９６，２００によるレジスタＲＵＢ０の割当インターロック及びレジスタＲＵＢ１の割当インターロックを受け、それぞれのデコードサイクルＤでストールする。
【０１０６】
この状態で時刻ｔ１で先行フローに割り当てたレジスタＲＵＢ０が処理１７８のように先行フローのコミットで開放されても、処理１８０のようにバリット信号Ｘが生成されて「１」であり、同時に図１２のカウンタ値判別部１３４でカウンタ値が「ＭＡＸ−Ｎ＝ＭＡＸ−１」であることが判別されてカウンタ値判別信号がＹが「１」となり、処理１９４のようにカウンタ値の「ＭＡＸ−１」の使用数検出が行われている。
【０１０７】
このため処理１８０と処理１９４によるバリッド信号Ｘ及びカウンタ値判別信号Ｙがともに「１」となることで、時刻ｔ１におけるバッファフル検出解除にかかわらず、処理１９６，２００のようにレジスタＲＵＢ０，ＲＵＢ１のそれぞれの割当を予定した命令は、デコードサイクルでインターロックがかかってストールされる。
【０１０８】
そして時刻ｔ２で後続フローに割り当てたレジスタＲＵＢ１が後続フローのコミットにより処理１８６のように開放されると、この時、図１２のバリッド信号生成部１３２に対しリセット信号Ｅ２が出力されてバリッド信号Ｘが「０」となり、これによってＮＡＮＤゲート１４２からのデコードステージストール信号Ｅ３が「０」となってインターロックが解除される。
【０１０９】
従って、時刻ｔ２に続く処理１９８，２０２のデコードサイクルＤで開放された先行フローのレジスタＲＵＢ０が新たな命令に対するレジスタとして割当られ、開放された後続フローのレジスタＲＵＢ１についても、次の新たな命令に対するレジスタとして割り当てられる。
【０１１０】
このような図１２のマルチフロー保証回路による処理で、先行フローの割当レジスタＲＵＢ０が時刻ｔ１のコミットで開放されても、開放されたレジスタＲＵＢ０を割当ようとする次の新たな命令についてデコードステージストール信号Ｅ３の出力によって時刻ｔ２で後続フローがコミットされるまでデコードサイクルがストールされ、これによって後続フローのコミットまで先行フローの実行結果を格納している割当レジスタＲＵＢ０にデータ格納を保証し、先行フローの実行結果のフォーワード制御により後続フローの命令操作を確実に行うことができる。
【０１１１】
また後続フローの実行中に時刻ｔ１からコミット時刻ｔ２までレジスタの保証サイクルを伸ばすことによる性能ペナルティ２０１は、先行フローと後続フローのコミットが離れており、その時のレジスタ使用数が「最大数−Ｎ」となるケースのみに生じるが、この性能ペナルティ２０１はわずか数サイクルにとどまる。
【０１１２】
このようなマルチフローの命令制御として、本発明は、先行命令の実行結果を後続命令にフォーワード制御するための専用のレジスタを複数用意することなく、レジスタリネーミングに使用しているレジスタ更新バッファ上のレジスタを流用することで、プロセッサ資源を節減し、マルチフローとなる複数の命令操作を確実に実行することができる。
【０１１３】
図１５は、本発明のプロセッサにおける命令制御の他の実施形態であり、この実施形態にあってはマルチフローの命令操作を実行する際に割り当てる命令識別子ＩＩＤについて、先行フローに割り当てた命令識別子ＩＩＤを後続フローのコミットまで保証するようにしたことを特徴とする。
【０１１４】
図１５において、命令識別子を保証制御するプロセッサにあっては、基本的には図２の実施形態と同じであるが、マルチフロー保証処理部２０４が先行フローに割り当てた命令識別子ＩＩＤを後続フローのコミットまで保証する処理を行っている。
【０１１５】
この命令識別子の保証処理に対応して、命令発行部１６にはデコードサイクルで先行フローと後続フローのそれぞれにつき、命令識別子を割り付けるための命令識別子割付部２０６が設けられる。またリソースモニタ５０には命令識別子割付部２０６で割り付ける命令識別子の使用数を計数するＩＩＤ使用数カウンタ２０８が設けられている。
【０１１６】
図１６は、図１５のプロセッサの命令制御で対象となる先行フローの命令識別子の後続フローのコミットまでの保証を必要とするＳＰＡＲＣ命令アーキテクチャーで使用しているコンペアアンドスワップ命令（Ｃｏｍｐａｒｅ　ａｎｄ　Ｓｗａｐ　ｉｎｓｔｒｕｃｔｉｏｎ）の命令操作の説明図である．。
【０１１７】
コンペアアンドスワップ命令は
ｃａｓ　［ｒｓ１］，ｒｓ２，ｒｄ
と記述されている。
【０１１８】
即ち図１６の命令識別子ＩＩＤ＝ｘとなる先行フロー２１０では、ステップＳ１でレジスタｒｓ１をアドレスとしてメモリを参照してメモリフェッチデータを取得し、ステップＳ２でレジスタｒｓ２と比較し、比較結果を内部コンディションコードＣＣとして命令識別子ＩＩＤ＝ｘに対応するコミットスタックエントリのコンデションコードデータＣＣ−ＤＡＴＡに格納する。この内部コンデションコードＣＣは、ステップＳ２で比較結果が一致した場合は「ＣＣ＝１」、不一致の場合は「ＣＣ＝０」となる値を格納する。
【０１１９】
またメモリフェッチデータはレジスタｒｄに対し入れ替えるため（スワップするため）、ステップＳ４でリネーミングレジスタに格納する。
【０１２０】
命令識別子ＩＩＤ＝ｘ＋１となる後続フロー２１２では、その内部コンディションコードＣＣによりレジスタｒｄのデータをレジスタｒｓ１によるメモリアドレスにストアするか否か判定する。即ち、比較結果が一致したＣＣ＝１の場合は、ステップＳ５で、ｒｄレジスタのデータを、先行フロー２１０のＩＩＤ＝ｘで送ったレジスタｒｓ１によるメモリアドレスに書き込む。比較結果が不一致となるＣＣ＝０の場合は、ステップＳ６で、レジスタｒｓ１によるメモリアドレスへの書き込みは行なわない。
【０１２１】
更に、ステップＳ５又Ｓ６に並行して、ステップＳ７で、ステップＳ５でリネーミングレジスタに保持されているメモリフェッチデータをレジスタｒｄに書き込んでいる。
【０１２２】
このように先行フロー２１０におけるデコードサイクルにあっては、命令識別子ＩＩＤとして例えばＩＩＤ＝ｘが割当てられる。続いて後続フロー２１２の命令操作を行うが、この後続フロー２１２のデコードサイクルで命令識別子ＩＩＤ＝ｘ＋１を割当てる。
【０１２３】
しかしながら、後続フロー２１２の命令識別子の割当処理にあっては、ステップＳ６において、割り当てた識別子ＩＩＤ＝ｘ＋１を先行フロー２１０と同じ命令識別子ＩＩＤ＝ｘに変更するエミュレートを行なう。
【０１２４】
この後続フロー２１２のデコードサイクルにあっては、コミットスタックエントリの中に後続フロー割当エントリが割当てられる。続いて後続フロー２１２がデコードサイクルからプライオリティサイクルに入り、更に命令実行操作を行う際に、命令識別子としてエミュレートとしたＩＩＤ＝ｘによりコミットスタックエントリを参照する。
【０１２５】
コミットスタックエントリには先行フロー割当エントリと後続フロー割当エントリが割当てられているが、両者について同じ命令識別子ＩＩＤ＝ｘであることから、先行フロー割当エントリ後続フロー割当エントリは同一エントリとして扱われる。
【０１２６】
このため後続フロー２１２の実行開始時に、先行フロー割当エントリのコンデションコードデータＣＣ−ＤＡＴＡを命令識別子ＩＩＤ＝ｘによって参照することができる。
【０１２７】
コンデションコードデータＣＣ−ＤＡＴＡに対する後続フロー２１２の処理はその時に次のように決まっている。
（１）比較結果が一致でコンデションコードデータが「ＣＣ＝１」の時はレジスタｒｄのデータをストアデータとして実行する（Ｓ６）。
（２）比較結果が不一致でコンデションコードデータが「ＣＣ＝０」の時はレジスタｒｄのデータをストアデータとして破棄する（Ｓ７）。
【０１２８】
このような命令識別子を割当てたマルチフローの命令制御にあっては、後続フローがコミットするまで先行フローに割当てた命令識別子ＩＩＤ＝ｘを保証しなければならない。命令識別子ＩＩＤは命令のデコードサイクルで割当てられ、命令のコミットで開放されることから、先行フロー２１０と後続フロー２１２の間に間隔があいている場合は、他の命令により先行フローの命令識別子ＩＩＤ＝ｘが割当てられ、後続命令がコミットするまで保証されない場合がある。
【０１２９】
そこで本発明にあっては、図１７の実施形態に示すマルチフロー保証処理部２０４により先行フローに割当てた命令識別子を後続フローのコミットまで保証できるようにする。
【０１３０】
図１７において、コミットスタックエントリ４２にはコンペアアンドスワップ命令のマルチフロー展開に伴うデコードサイクルに対応して、先行フロー割当エントリ２４５−１と後続フロー割当エントリ２４５−２の割当が行われている。
【０１３１】
この割当エントリの命令操作６６−１のＯＰコードからコンペアアンドスワップ命令の先行フロー（ＣＡＳ１ｓｔ）のコミットでセット信号Ｅ１０が出力され、また後続フロー割当エントリ２４５−２における命令操作６６−２のＯＰコードによるコンペアアンドスワップ命令の後続フロー（ＣＡＳ２ｎｄ）によるコミットでリセット信号Ｅ２０が出力される。
【０１３２】
バリッド信号生成部２３４は、セット信号Ｅ１０で出力するバリット信号Ｘを「１」として、リセット信号Ｅ２０でバリッド信号Ｘを「０」とする。一方、ＩＩＤ使用数カウンタ２０８が命令デコードサイクルで割当てられる命令識別子の使用数を計数しており、この計数値はカウンタ値判別部２３６とフル使用検出部２３８に与えられている。
【０１３３】
カウンタ値判別部２３６はカウンタ値が最大使用数ＭＡＸから先行フローと後続フローの間の差となるフロー数Ｎを差し引いた値（ＭＡＸ−Ｎ）の時、カウンタ値判別信号Ｙを「１」とする。またフル使用検出部２３８はＩＩＤで使用するカウンタ２０８のカウンタ値が最大値ＭＡＸの時、出力信号であるフル使用検出信号Ｚを「１」とする。
【０１３４】
バリッド信号Ｘ、カウンタ値判別信号Ｙ、フル使用検出信号ＺはＮＡＮＤゲート２４０、２４４及びインバータ２４２を備えた論理回路部で判別され、デコードステージストール信号Ｅ３０を出力する。この論理回路部によるデコードステージストール信号Ｅ３０を「１」とする条件は
［（バリット信号Ｘａｎｄカウンタ判別信号ｙ）ｏｒフル使用検出信号Ｚ］
である。
【０１３５】
即ちＩＩＤ使用数カウンタ２０８で命令識別子の使用数が最大値ＭＡＸとなった時にはデコードステージストール信号Ｅ３０が「１」となって、次に命令識別子を割当てる命令のデコードサイクルをストールする。またバリッド信号Ｘが「１」の状態で、ＩＩＤ使用数カウンタ２０８の値が「最大値ＭＡＸ−Ｎ」の時、デコードステージストール信号Ｅ３０が「１」となって、次に命令識別子の割当を予定している命令のデコートステージをストールする。
【０１３６】
図１８は、通常の命令実行における命令識別子の割当と図１７の各部の信号の生成状態のタイムチャートである。このタイムチャートにあっては、左端の縦方向に命令識別子ＩＩＤの割当を「ＩＩＤ０，ＩＩＤ１・・・ＩＩＤｍｘ，ＩＩＤ０」として示し、各命令識別子の割当に対応して横方向に命令の操作をデコードサイクルＤ、プライオリティサイクルＰ、書込サイクルＷで表している。
【０１３７】
図１８において、最初の命令におけるデコードサイクルＤで処理２４６のように命令識別子ＩＩＤ０が割当てられると、次のプライオリティサイクルＰで命令識別子ＩＩＤ０が処理２４８のように使用有効となり、処理２５０の書込サイクルＷによる命令のコミットにより、命令識別子ＩＩＤ０が開放される。
【０１３８】
次の命令について処理２５２のデコードサイクルＤで命令識別子ＩＩＤ１が割当てられ、処理２５４のプライオリティサイクルＰにおいて命令識別子ＩＩＤ１が使用有効となり、処理２５６の書込サイクルＷによる命令のコミットにより、命令識別子ＩＩＤ１が開放される。
【０１３９】
以下同様にして各命令に対しデコードサイクルで命令識別子が順次割当てられ、処理２５８のデコードサイクルＤで最大数ＭＡＸの命令識別子ＩＩＤｍｘが割当てられたとする。
【０１４０】
処理２５８に続く処理２６０のプライオリティサイクルＰにあっては、時刻ｔ１で最初に割当てられた命令識別子ＩＩＤ０が開放されるまでＩＩＤ使用数カウンタ２０８は最大値ＭＡＸとなっている。
【０１４１】
このため図１７のフル使用検出部２３８からのフル使用検出信号Ｚが「１」となり、デコードステージストール信号Ｅ３０を「１」とすることで、処理２６４のフル使用検出に基づき、次の命令識別子ＩＩＤ０の割当を予定している命令について、処理２６８のデコードサイクルインターロックにより、時刻ｔ１で命令識別子ＩＩＤ０が開放されるまで、デコードサイクルＤをストールさせる。
【０１４２】
時刻ｔ１で処理２５０による命令識別子ＩＩＤ０の開放が行われると、開放された識別子ＩＩＤ０がインターロックされていた命令に割当てられ、処理２７０のデコードサイクルＤに入る。
【０１４３】
図１９は、本発明のマルチフローの命令実行における命令識別子の割当と図１７の各部の信号の生成状態のタイムチャートである。ここで、左端の縦方向に各部に対する命令識別子ＩＩＤ割当２７１を示している。
【０１４４】
まず図１６のようなコンペアアンドスワップ命令を対象とした先行フローの処理２７２となるデコードサイクルＤにおいて、命令識別子ＩＩＤ０を割当て、次の処理２７４のプライオリティサイクルＰで命令識別子ＩＩＤ０を使用有効とする。そして処理２７２の書込サイクルＷの時刻ｔ１で先行フローがコミットして命令識別子ＩＩＤが開放される。
【０１４５】
時刻ｔ１で先行フローがコミットされると、図１７のバリッド生成部２３４に対しセット信号Ｅ１０が入力され、バリッド信号Ｘ「１」となり、図１９の処理２７８のバリッド信号生成が行われる。
【０１４６】
先行フローに続く後続フローに対する処理２８０のデコードサイクルＤにおいては命令識別子ＩＩＤ１が割当てられる。この命令識別子ＩＩＤ１はエミュレートにより先行フローと同じＩＩＤ０に変更される。続いて処理２８２のプライオリティサイクルＰで命令識別子ＩＩＤ１、即ちエミュレートされた識別子ＩＩＤ０が使用有効となり、処理２８４の書込サイクルＷによる時刻ｔ１のコミットで命令識別子ＩＩＤ１が開放される。
【０１４７】
続いて後続命令について順次、命令制御が行われ、ＩＩＤ使用数カウンタ２０８が最大数ＭＡＸとなる処理２８６のデコードサイクルＤにあっては、命令識別子ＩＩＤｍｘが割当てられ、処理２８８のプライオリティサイクルＰで使用が有効となる。
【０１４８】
この時、ＩＩＤ使用数カウンタ２０８の使用数が最大数ＭＡＸに達したことが図１７のフル使用検出部２３８で検出され、フル使用検出信号Ｚを「１」とすることで、図１９の処理２９２のフル使用検出が行われる。このため図１７のＮＡＮＤゲート２７４からのデコードステージストール信号Ｅ３０が「１」となり、図１９の命令識別子ＩＩＤ０の割当を予定している命令に対し処理２８でインターロックをかけ、デコードサイクルＤをストールさせる。
【０１４９】
時刻ｔ１で先行フローに割当てた命令識別子ＩＩＤ０が開放されると、処理２９２のフル使用検出は解除されるが、図１７のカウンタ値判別部２３６によりカウンタ値が「ＭＡＸ−Ｎ＝ＭＡＸ−１」となったことが判別されてカウンタ値判別信号Ｙが「１」となる。
【０１５０】
このため時刻ｔ１で先行フローがコミットされてから、時刻ｔ２で後続フローがコミットされるまで処理２９４のようにカウンタ値「ＭＡＸ−１」の使用検出が行われる。このとき処理２７８のバリット信号生成によりバリッド信号Ｘも「１」にあるため、図１７のＮＡＮＤゲート２４６からのデコードステージストール信号Ｅ３０は「１」となり、次に命令識別子ＩＩＤ０の割当てを予定している命令に対し、処理３００のように更にデコードサイクルにインターロックをかけ、デコードサイクルを後続フローがコミットする時刻ｔ２までストールさせる。
【０１５１】
このため時刻ｔ１で先行フローに割当てた命令識別子ＩＩＤ０が開放されても、この命令識別子ＩＩＤ１の次の割当を予定している他の命令のデコードサイクルのストールにより、命令識別子ＩＩＤ１の割当てが中止され、後続フローがコミットされる時刻ｔ２まで先行フローに割当てた命令識別子ＩＩＤ０を保証させることができる。
【０１５２】
時刻ｔ２で後続フローがコミットすると、デコードサイクルのインターロック処理３００がデコードステージストール信号Ｅ３０が「０」となることで解除され、処理３０２により、開放された先行フローに割当てた命令識別子ＩＩＤ０を新たに割当てることができる。
【０１５３】
このようなマルチフローに展開した場合の先行命令に割当てた命令識別子の後続フローのコミットまでの保証を、先行フローの命令識別子を保存する専用のレジスタを使用せず、後続のコミットまで確実に保存して後続フローへのデータアップロードを行うことができる。
【０１５４】
尚、上記の実施形態は１命令を内部的に複数のフローに展開して命令操作を行う命令として、ＳＰＡＲＣ命令アーキテクチャにおけるピクセルディスタンス命令とコンペアアンドスワップ命令を例にとるものであったが、これに限定されず適宜の命令アーキテクチャーにおいて内部的にマルチフローに展開して命令操作を実行する命令につき同様に適用することができる。
【０１５５】
また本発明はその目的と利点を損なうことのない適宜の変形を含み、更に上記の実施形態に使用した数値の限定は受けない。
【０１５６】
（付記）
（付記１）
予め定められた所定の命令をフェッチしてデコードした際に、先行フローと後続フローのマルチフローに命令操作を展開してインオーダーで発行する命令発行部と、
前記発行命令を保持するリザベーションステーションと、
前記リザベーションステーションに保持された命令をアウトオブオーダーで実行する命令実行部と、
前記命令実行部で実行した命令の確定を判別してインオーダーで完了させる確定部と、
前記命令実行部による先行フローの実行結果を、先行フローが確定してから後続フローが確定するまで保証するマルチフロー保証処理部と、
を備えたことを特徴とするプロセッサ。（１）
【０１５７】
（付記２）
付記１記載のプロセッサに於いて、
更に、依存関係にある複数の命令で使用するレジスタを名前替えしてレジスタ更新バッファ上に割り当て、前記確定部による実行命令の確定で前記レジスタ更新バッファ上に割り当てたレジスタを開放するリネーミング処理部を備え、
前記マルチフロー保証処理部は、依存関係にある先行フローと後続フローで使用するレジスタを、前記先行フローのデコード時に、前記リネーミング処理部により名前替えせずに前記レジスタ更新バッファ上に専用レジスタを割り当て、前記後続フローが確定するまで前記専用レジスタの開放を禁止することを特徴とするプロセッサ。（２）
【０１５８】
（付記３）
付記１記載のプロセッサに於いて、前記マルチフロー保証処理部は、
先行フローの確定から後続フローが確定するまでのあいだオンするバリッド信号Ｘを出力するバリッド生成部と、
前記レジスタ更新バッファ上の使用レジスタ数を計数するカウンタが最大値ＭＡＸからフロー数Ｎを差し引いたカウンタ値（ＭＡＸ−Ｎ）にあることを検出してオンするカウンタ判別信号Ｙを出力するカウンタ値判別部と、
前記カウンタが最大値にあることを検出してオンするバッファフル信号Ｚを出力するバッファフル検出部と、
前記バリッド信号Ｘとカウンタ判別信号Ｙとの論理積の結果に対し前記バッファフル信号Ｚと論理和をとった論理信号を生成し、前記論理信号がオンのあいだ、前記命令発行部におけるデコードサイクルをストールさせる論理演算部と、
を備えたことを特徴とするプロセッサ。（３）
【０１５９】
（付記４）
付記３記載のプロセッサに於いて、前記命令実行部は、前記先行フローの実行結果を前記レジスタ更新バッファ上に割当てた専用レジスタに格納し、後続フローの実行開始時に前記専用レジスタの値をフォーワーディングすることを特徴とするマルチプロセッサ。（４）
【０１６０】
（付記５）
命令発行部により、予め定められた所定の命令をフェッチしてデコードした際に、先行フローと後続フローのマルチフローに命令操作を展開してインオーダーで発行する命令発行ステップと、
前記発行命令をリザベーションステーションに保持する命令保持ステップと、
命令実行部により、前記リザベーションステーションに保持された命令をアウトオブオーダーで実行する命令実行ステップと、
確定部により、前記命令実行部で実行した命令の確定を判別してインオーダーで完了させる確定ステップと、
マルチフロー保証処理部により、前記命令実行ステップによる先行フローの実行結果を、先行フローが確定してから後続フローが確定するまで保証するマルチフロー保証ステップと、
を備えたことを特徴とする命令制御方法。（５）
【０１６１】
（付記６）
付記５記載の命令制御方法に於いて、
更に、依存関係にある複数の命令で使用するレジスタを名前替えしてレジスタ更新バッファ上に割り当て、前記確定部による実行命令の確定で前記レジスタ更新バッファ上に割り当てたレジスタを開放するリネーミング処理ステップを備え、前記マルチフロー保証ステップは、依存関係にある先行フローと後続フローで使用するレジスタを、前記先行フローのデコード時に、前記リネーミング処理ステップで名前替えせずに前記レジスタ更新バッファ上に専用レジスタを割り当て、前記後続フローが確定するまで前記専用レジスタの開放を禁止することを特徴とする命令制御方法。
【０１６２】
（付記７）
付記５記載の命令制御方法に於いて、前記マルチフロー保証ステップは、
先行フローの確定から後続フローが確定するまでのあいだオンするバリッド信号Ｘを出力するバリッド生成ステップと、
前記レジスタ更新バッファ上の使用レジスタ数を計数するカウンタが最大値ＭＡＸからフロー数Ｎを差し引いたカウンタ値（ＭＡＸ−Ｎ）にあることを検出してオンするカウンタ判別信号Ｙを出力するカウンタ値判別ステップと、
前記カウンタが最大値にあることを検出してオンするバッファフル信号Ｚを出力するバッファフル検出ステップと、
前記バリッド信号Ｘとカウンタ判別信号Ｙとの論理積の結果に対し前記バッファフル信号Ｚと論理和をとった論理信号を生成し、前記論理信号がオンのあいだ、前記命令発行部におけるデコードサイクルをストールさせる論理演算ステップと、
を備えたことを特徴とする命令制御方法。
【０１６３】
（付記８）
付記７記載の命令制御方法に於いて、前記命令実行ステップ、前記先行フローの実行結果を前記レジスタ更新バッファ上に割当てた専用レジスタに格納し、後続フローの実行開始時に前記専用レジスタの値をフォーワーディングすることを特徴とする命令制御方法。
【０１６４】
（付記９）
予め定められた所定の命令をフェッチしてデコードした際に、先行フローと後続フローのマルチフローに命令操作を展開し且つ各命令フロー毎に固有の命令識別子を付してインオーダーで発行する命令発行部と、
前記発行命令を保持するリザベーションステーションと、
前記リザベーションステーションに保持された命令をアウトオブオーダーで実行する命令実行部と、
前記命令実行部で実行した命令の確定を判別してインオーダーで完了させる確定部と、
前記先行フローの命令識別子を後続フローが確定するまで保証するマルチフロー保証処理部と、
を備えたことを特徴とするプロセッサ。（６）
【０１６５】
（付記１０）
付記９記載のプロセッサに於いて、前記命令発行部は、先行後続フローに割り当てた命令識別子を、先行フローと同じ命令識別子にエミュレートし、後続フローの命令操作開始時に、前記エミュレートされた命令識別子により先行フローの実行結果を参照することを特徴とするプロセッサ。（７）
【０１６６】
（付記１１）
付記８記載のプロセッサに於いて、前記マルチフロー保証処理部は、
先行フローの確定から後続フローが確定するまでのあいだオンするバリッド信号Ｘを出力するバリット生成部と、
前記命令識別子の使用数を計数するカウンタが最大値ＭＡＸからフロー数Ｎを差し引いたカウンタ値（ＭＡＸ−Ｎ）にあることを検出してオンするカウンタ判別信号Ｙを出力するカウンタ値判別部と、
前記カウンタが最大値にあることを検出してオンする識別子フル信号Ｚを出力するバッファフル検出部と、
前記バリッド信号Ｘとカウンタ判別信号Ｙとの論理積の演算結果に対し前記識別子フル信号Ｚと論理和をとった論理信号を生成し、前記論理信号がオンのあいだ、前記命令発行部におけるデコードサイクルをストールさせる論理演算部と、
を備えたことを特徴とするプロセッサ。（８）
【０１６７】
（付記１２）
付記１１記載のプロセッサに於いて、前記命令実行部は、前記先行フローの実行結果として得られた状態コードデータを先行フローの確定スタックエントリに格納し、後続フローのデコード時に前記先行フローの確定スタックエントリの状態コードデータを参照して後続フローの命令操作を選択的に実行することを特徴とするプロセッサ。（９）
【０１６８】
（付記１３）
命令発行部により、予め定められた所定の命令をフェッチしてデコードした際に、先行フローと後続フローのマルチフローに命令操作を展開し且つ各命令フロー毎に固有の命令識別子を付してインオーダーで発行する命令発行ステップと、前記発行命令をリザベーションステーションに保持する保持ステップと、
命令実行部により、前記リザベーションステーションに保持された命令をアウトオブオーダーで実行する命令実行ステップと、
確定部により、前記命令実行部で実行した命令の確定を判別してインオーダーで完了させる確定ステップと、
マルチフロー保証処理部により、前記先行フローの命令識別子を後続フローが確定するまで保証するマルチフロー保証ステップと、
を備えたことを特徴とする命令制御方法。（１０）
【０１６９】
（付記１４）
付記１３記載の命令制御方法に於いて、前記命令発行ステップは、先行後続フローに割り当てた命令識別子を、先行フローと同じ命令識別子にエミュレートし、後続フローの命令操作開始時に、前記エミュレートされた命令識別子により先行フローの実行結果を参照することを特徴とする命令制御方法。
【０１７０】
（付記１５）
付記１２記載の命令制御方法に於いて、前記マルチフロー保証ステップは、
先行フローの確定から後続フローが確定するまでのあいだオンするバリッド信号Ｘを出力するバリット生成ステップと、
前記命令識別子の使用数を計数するカウンタが最大値ＭＡＸからフロー数Ｎを差し引いたカウンタ値（ＭＡＸ−Ｎ）にあることを検出してオンするカウンタ判別信号Ｙを出力するカウンタ値判別ステップと、
前記カウンタが最大値にあることを検出してオンする識別子フル信号Ｚを出力するバッファフル検出ステップと、
前記バリッド信号Ｘとカウンタ判別信号Ｙとの論理積の演算結果に対し前記識別子フル信号Ｚと論理和をとった論理信号を生成し、前記論理信号がオンのあいだ、前記命令発行部におけるデコードサイクルをストールさせる論理演算ステップと、
を備えたことを特徴とする命令制御方法。
【０１７１】
（付記１６）
付記１５記載の命令制御方法に於いて、前記命令実行ステップは、前記先行フローの実行結果として得られた状態コードデータを先行フローの確定スタックエントリに格納し、後続フローのデコード時に前記先行フローの確定スタックエントリの状態コードデータを参照して後続フローの命令操作を選択的に実行することを特徴とする命令制御方法。
【０１７２】
【発明の効果】
以上説明してきたように本発明によれば、動的パイプラインスケジュールリングを行うプロセッサにおいて、先行フローと後続フローのマルチフローに内部的に展開して命令操作を実行する際に、先行フローの実行結果を後続フローにフォーワード制御するために使用する専用レジスタを設けずに、レジスタリネーミングに使用しているレジスタ更新バッファ上のレジスタを利用し、この割当レジスタは先行フローのコミットで開放されてしまうが、先行フローのコミットから後続フローのコミットまで先行フローのレジスタの割当てが予定される他の命令を強制的にストールさせることで、先行フローにコミットで開放されるレジスタ更新バッファ上のレジスタを割当てても、後続フローのコミットまでレジスタ格納データを保証し、先行フローの実行結果を後続フローへのフォーワードを確実に行うことができ、また専用レジスタを設けていない分、プロセッサの資源を節減することができる。
【０１７３】
また本発明の別の形態にあってはマルチフロー展開した際に先行フローに割当てられる命令識別子がコミットで開放されても、先行フローの命令識別子を後続命令のコミットまで保証することで、命令識別子を利用した後続フローへのフォーワード制御を確実に行うことができ、また命令識別子に専用レジスタを必要としない分、プロセッサの資源を節減することができる。
【図面の簡単な説明】
【図１】本発明の原理説明図
【図２】マルチフロー命令制御でレジスタ更新バッファ割付けを行う本発明によるプロセッサの機能構成のブロック図
【図３】図２にリネーミングを中心とした本発明による処理機能のブロック図
【図４】通常のリネーミングマップ更新処理の説明図
【図５】図４で更新したリネーミングマップに対する参照処理の説明図
【図６】先行命令がコミットした際の後続命令するフォーワード制御の説明図
【図７】マルチフローとしない場合のピクセルディスタンス命令の命令操作の説明図
【図８】マルチフローとした場合のピクセルディスタンス命令の命令操作の説明図
【図９】図７のマルチフローにおける本発明のリネーミングマップ更新処理の説明図
【図１０】図８で更新したリネーミングマップに対する参照処理の説明図
【図１１】先行フローの実行結果をコミットした際に判別する後続フローに対するフォーワード制御の説明図
【図１２】後続フローのコミットまで先行フローの実行結果を保証する図２のマルチフロー保証処理部の実施形態の説明図
【図１３】通常の命令実行におけるレジスタ更新バッファの割当てと図１２の各部の信号の生成状態のタイムチャート
【図１４】本発明のマルチフローの命令実行におけるレジスタ更新バッファの割当てと図１２の各部の信号の生成状態のタイムチャート
【図１５】マルチフロー命令制御で命令識別子の割付けを行う本発明によるプロセッサの機能構成のブロック図
【図１６】図１５の命令制御対象となるコンペアアンドスワップ命令のマルチフローによる命令操作の説明図
【図１７】後続フローのコミットまで先行フローの命令識別子を保証する図１５のマルチフロー保証部の実施形態の説明図
【図１８】通常の命令実行における命令識別子の割当てと図１７の各部の信号の生成状態のタイムチャート
【図１９】本発明のマルチフローの命令実行における命令識別子の割当てと図１７の各部の信号の生成状態のタイムチャート
【符号の説明】
１０：命令フェッチ部
１２：名入れキャッシュ
１４：分岐予測部
１５：確定部
１６：命令発行部
１６−１〜１６〜４：命令語レジスタ
１８：リネーミング処理部
２０，２０４：マルチフロー処理部
２４：リザベーションステーション処理部
２５，２５−１〜２５−５：リザベーションステーション
２６−１：割当エントリ
２８：命令実行部
３０−１，３０−２：固定小数点演算部
３２−１，３２−２：浮動小数点演算部
３４：ロード／ストア演算部
３６：ストアバッファファイル
３８：データキャッシュ
４０：レジスタファイル
４２：コミットスタックエントリ
４４：汎用レジスタファイル
４５−１，４５−２：割当エントリ
４６：レジスタ更新バッファ（ＲＵＢ）
４８：使用数カウンタ
５０：リソースモニタ
５２：リネーミングマップ
５３：ペンディングビット
５４：割当アドレス
５５：バリッドビット
５６：書込レジスタビット
５８：レジスタ更新バッファ割当ビット
６０：書込レジスタアドレス
６２：更新バッファ割当アドレス
６４：演算完了待ちビット
６６，８８：命令操作
６８：コンデションコードレジスタビット
７０：コンデションコードデータ
７２：第１ソースレジスタ領域
７４：第２ソースレジスタ領域
７６：Ｒ１バリッドビット
７８：Ｒ１アドレス
８０：Ｒ１ペンディングビット
８２：Ｒ１更新バッファ割当アドレス
８４：Ｒ１バイパスレディビット
８６：ディストネーション更新バッファ割当アドレス
９８：第１ソースレジスタ
１００：第２ソースレジスタ
１０２−１〜１０２〜８：減算操作
１０４：加算操作
１０６：ディストネーションレジスタ
１０８：専用レジスタ
１１０，２１０：先行フロー
１１２，２１２：後続フロー
１１４：第１フローデコードサイクル
１１６：ラッチ
１１８：更新バッファ割当アドレス
１２０：先行フローデコードサイクル
１３２：バリッド信号生成部
１３４：カウンタ値判別部
１３６：バッファフル検出部
１３８，１４２，２４０，２４４：ＮＡＮＤゲート
１４０，２４２：インバータ
１４４：レジスタ更新バッファ割当
２０６：命令識別子割付部
２０８：ＩＩＤ使用数カウンタ
２３４：バリッド信号生成部
２３６：カウンタ値判別部
２３８：フル使用検出部
【図１】
2004038750.tif 000003
【図２】
2004038750.tif 000004
【図３】
2004038750.tif 000005
【図４】
2004038750.tif 000006
【図５】
2004038750.tif 000007
【図６】
2004038750.tif 000008
【図７】
2004038750.tif 000009
【図８】
2004038750.tif 000010
【図９】
2004038750.tif 000011
【図１０】
2004038750.tif 000012
【図１１】
2004038750.tif 000013
【図１２】
2004038750.tif 000014
【図１３】
2004038750.tif 000015
【図１４】
2004038750.tif 000016
【図１５】
2004038750.tif 000017
【図１６】
2004038750.tif 000018
【図１７】
2004038750.tif 000019
【図１８】
2004038750.tif 000020
【図１９】
2004038750.tif 000021
【手続補正書】
【提出日】平成15年2月3日(2003.2.3)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】請求項８
【補正方法】変更
【補正の内容】
【請求項８】
請求項６記載のプロセッサに於いて、前記マルチフロー保証処理部は、
先行フローの確定から後続フローが確定するまでのあいだオンするバリッド信号Ｘを出力するバリット信号生成部と、
前記命令識別子の使用数を計数するカウンタが最大値ＭＡＸからフロー数Ｎを差し引いたカウンタ値（ＭＡＸ−Ｎ）にあることを検出してオンするカウンタ判別信号Ｙを出力するカウンタ値判別部と、
前記カウンタが最大値にあることを検出してオンする識別子フル信号Ｚを出力するバッファフル検出部と、
前記バリッド信号Ｘとカウンタ判別信号Ｙとの論理積の演算結果に対し前記識別子フル信号Ｚと論理和をとった論理信号を生成し、前記論理信号がオンのあいだ、前記命令発行部におけるデコードサイクルをストールさせる論理演算部と、を備えたことを特徴とするプロセッサ。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００２２
【補正方法】変更
【補正の内容】
【００２２】
更に本発明のプロセッサは、依存関係にある複数の命令で使用するレジスタを名前替えしてレジスタ更新バッファ４６上に割り当て、命令による実行結果の確定でレジスタ更新バッファ４６上に割り当てたレジスタを開放するリネーミング処理部１８を備え、この場合、マルチフロー保証処理部２０は、依存関係にある先行フローと後続フローで使用するレジスタを、先行フローのデコード時に、リネーミング処理部１８で名前替えせずにレジスタ更新バッファ４６上に専用レジスタを割り当て、後続フローが確定するまで専用レジスタの開放を禁止する。


【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】００３０
【補正方法】変更
【補正の内容】
【００３０】
マルチフロー保証処理部２０４は、先行フローの確定から後続フローが確定するまでのあいだオンするバリッド信号Ｘを出力するバリット生成部と、命令識別子の使用数を計数するカウンタが最大値ＭＡＸからフロー数Ｎを差し引いたカウンタ値（ＭＡＸ−Ｎ）にあることを検出してオンするカウンタ判別信号Ｙを出力するカウンタ値判別部と、カウンタが最大値にあることを検出してオンするバッファフル信号Ｚを出力するバッファフル検出部と、バリッド信号Ｘとカウンタ判別信号Ｙとの論理積（Ｘ　ａｎｄ　Ｙ）の結果に対しバッファフル信号Ｚと論理和［（Ｘ　ａｎｄ　Ｙ）ｏｒ　Ｚ］をとった論理信号を生成し、論理信号がオンのあいだ、命令発行部におけるデコードサイクルをストールさせる論理演算部とを備えたことを特徴とする。


【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】００４１
【補正方法】変更
【補正の内容】
【００４１】
このため命令語レジスタ１６−１〜１６−４からは、リザベーションステーション処理部２４の対応するリザベーションステーションとコミットスタックエントリ４２及びその命令実行に必要な資源（レジスタ更新バッファ、ストアバッファ等）に利用可能なエントリがないと命令は発行されず、デコードサイクルでストールすることになる。


【手続補正５】
【補正対象書類名】明細書
【補正対象項目名】００４２
【補正方法】変更
【補正の内容】
【００４２】
命令エンジンとして機能する命令実行部２８は、リザベーションステーション処理部２４の対応するリザベーションステーションに命令の全てのオペランドの準備が整い且つ対応する演算部が利用可能になると、直ちに命令操作が実行されて実行結果が得られる。


【手続補正６】
【補正対象書類名】明細書
【補正対象項目名】００６２
【補正方法】変更
【補正の内容】
【００６２】
図６の後続命令のフォーワード制御は、先行命令におけるＲ１レジスタ更新バッファ実行結果９０と図５のリネーミングマップ５２の参照で得られた割当エントリ２６−１のＲ１更新バッファ割当アドレス８２を処理９１で比較し、一致した場合には割当エントリ２６−１のＲ１バイパスレディビット８４をセットする。


【手続補正７】
【補正対象書類名】明細書
【補正対象項目名】００７７
【補正方法】変更
【補正の内容】
【００７７】
図１０は、図９の先行フローのデコードサイクルで更新されたリネーミングマップ５２を後続フローのデコードサイクルで参照する処理の説明図である。命令語レジスタ１６−１で先行フローデコードサイクル１２０を行うと、リネーミングマップ５２をレジスタアドレスにより参照しても何も得られず、この場合には、ラッチ１１６の参照で先行フローの実行結果を格納しているレジスタ更新バッファ４６上の更新バッファ割当アドレス１１８を取得し、リザベーションステーション２５における先行フロー割当エントリ２６−１におけるＲ１更新バッファ割当アドレス８２を参照し、第１フローの実行結果を後続フローにフォーワード制御することができる。


【手続補正８】
【補正対象書類名】明細書
【補正対象項目名】００７８
【補正方法】変更
【補正の内容】
【００７８】
図１１は、図１０のリネーミングマップ参照処理に基づく後続フローに対するフォーワード制御の説明図である。先行フローがコミットした際に、先行フロー実行結果１２２と図１０のリネーミングマップ参照処理で得られたリザベーションステーション２５における先行フロー割当エントリ２６−１のＲ１バイパスレディビット８２をセットする。このマルチフローのフォーワード制御にあっては、Ｒ２更新バッファ実行結果１２６は存在しないことから、処理１２８によるバイパスレディビット９３のセットは行われない。


【手続補正９】
【補正対象書類名】明細書
【補正対象項目名】００８１
【補正方法】変更
【補正の内容】
【００８１】
即ち、先行フローのデコードサイクルで割り当てられたレジスタ更新バッファ４６上の割当レジスタは第１フローの実行結果のコミットで開放されてしまう。このため、先行フローから後続フローの間に時間的な空きがあった場合には、その間に実行された他の命令により先行フローの実行結果を保存している割当レジスタが使用され、先行フローの実行結果が壊されてしまう恐れがある。


【手続補正１０】
【補正対象書類名】明細書
【補正対象項目名】００８６
【補正方法】変更
【補正の内容】
【００８６】
また、後続フローの実行結果がコミットされた場合、後続フロー割当エントリ４５−２の同じく演算完了待ちビット６４−２のビット「１」からビット「０」の変化を検出して、リセット信号Ｅ２をバリッド信号生成部１３２に出力し、オン状態にあるバリッド信号Ｘをオフとする。


【手続補正１１】
【補正対象書類名】明細書
【補正対象項目名】００８７
【補正方法】変更
【補正の内容】
【００８７】
一方、図３のリソースモニタ５０に設けられている使用数カウンタ４８のカウンタ値を、カウンタ値判別部１３４及びバッファフル検出部１３６で監視する。使用数カウンタ４８は、図３のレジスタ更新バッファ４６における６４エントリの使用状態を計数している。


【手続補正１２】
【補正対象書類名】明細書
【補正対象項目名】００９３
【補正方法】変更
【補正の内容】
【００９３】
図１３は、図１２のマルチフロー保証処理部による通常の命令実行におけるレジスタ更新バッファの割り当てにおける各部信号のタイムチャートである。ここで、左端にレジスタ更新バッファ４６の割当レジスタをＲＵＢ０，ＲＵＢ１，…ＲＵＢｍａｘ，ＲＵＢ０，ＲＵＢ１として表している。


【手続補正１３】
【補正対象書類名】明細書
【補正対象項目名】００９６
【補正方法】変更
【補正の内容】
【００９６】
以下同様に使用数カウンタ４８の値が「ＭＡＸ」になるまで同様な命令操作が繰り返される。使用数カウンタ４８の値が最大値「ＭＡＸ」となるデコードサイクルＤの処理１５６に続くプライオリティサイクルＰの処理１５８において、最初に割当てたレジスタＲＵＢ０が処理１４８で開放される時刻ｔ１までは、図１２のバッファフル検出部１３６からのバッファフル信号Ｚは「１」となる。


【手続補正１４】
【補正対象書類名】明細書
【補正対象項目名】００９９
【補正方法】変更
【補正の内容】
【００９９】
この時、次に開放されるレジスタＲＵＢ１の割当を予定している別の命令が同時にデコードされていたとすると、レジスタＲＵＢ０の割当によりバッファフル信号Ｚは「１」となるためデコードステージストール信号Ｅ３は「１」となり、レジスタＲＵＢ０を割当てた命令が時刻ｔ２でコミットするまで、次の命令のデコードサイクルＤをストールさせるため処理１７２のＲＵＢ１割当インターロックが行われる。


【手続補正１５】
【補正対象書類名】明細書
【補正対象項目名】０１０３
【補正方法】変更
【補正の内容】
【０１０３】
次にフロー数Ｎ＝１をおいて処理１８４で後続フローのデコードサイクルＤに入ると、後続フローに対しレジスタＲＵＢ１が割当られる。そしてプライオリティサイクルＰの処理１８４の間レジスタＲＵＢ１が使用有効となる。続いて後続フローは時刻ｔ１２で先行フローの実行結果のフォーワード制御を受けて実行操作ＥＸを行い、更新サイクルＵでレジスタ格納を行い、更に書込サイクルＷで演算結果のレジスタ格納を行う。この書込サイクルＷの処理１８６において第２フローの命令がコミットされ、時刻ｔ２でレジスタＲＵＢ１が開放される。


【手続補正１６】
【補正対象書類名】明細書
【補正対象項目名】０１０６
【補正方法】変更
【補正の内容】
【０１０６】
この状態で時刻ｔ１で先行フローに割り当てたレジスタＲＵＢ０が処理１７８のように先行フローのコミットで開放されても、処理１８０のようにバリット信号Ｘが生成されて「１」であり、同時に図１２のカウンタ値判別部１３４でカウンタ値が「ＭＡＸ−Ｎ＝ＭＡＸ−１」であることが判別されてカウンタ値判別信号Ｙが「１」となり、処理１９４のようにカウンタ値の「ＭＡＸ−１」の使用数検出が行われている。


【手続補正１７】
【補正対象書類名】明細書
【補正対象項目名】０１１０
【補正方法】変更
【補正の内容】
【０１１０】
このような図１２のマルチフロー保証処理部による処理で、先行フローの割当レジスタＲＵＢ０が時刻ｔ１のコミットで開放されても、開放されたレジスタＲＵＢ０を割当ようとする次の新たな命令についてデコードステージストール信号Ｅ３の出力によって時刻ｔ２で後続フローがコミットされるまでデコードサイクルがストールされ、これによって後続フローのコミットまで先行フローの実行結果を格納している割当レジスタＲＵＢ０にデータ格納を保証し、先行フローの実行結果のフォーワード制御により後続フローの命令操作を確実に行うことができる。


【手続補正１８】
【補正対象書類名】明細書
【補正対象項目名】０１２０
【補正方法】変更
【補正の内容】
【０１２０】
命令識別子ＩＩＤ＝ｘ＋１となる後続フロー２１２では、その内部コンディションコードＣＣによりレジスタｒｄのデータをレジスタｒｓ１によるメモリアドレスにストアするか否か判定する。即ち、比較結果が一致したＣＣ＝１の場合は、ステップＳ５で、レジスタｒｄのデータを、先行フロー２１０のＩＩＤ＝ｘで送ったレジスタｒｓ１によるメモリアドレスに書き込む。比較結果が不一致となるＣＣ＝０の場合は、ステップＳ６で、レジスタｒｓ１によるメモリアドレスへの書き込みは行なわない。


【手続補正１９】
【補正対象書類名】明細書
【補正対象項目名】０１２３
【補正方法】変更
【補正の内容】
【０１２３】
しかしながら、後続フロー２１２の命令識別子の割当処理にあっては、ステップＳ５において、割り当てた識別子ＩＩＤ＝ｘ＋１を先行フロー２１０と同じ命令識別子ＩＩＤ＝ｘに変更するエミュレートを行なう。


【手続補正２０】
【補正対象書類名】明細書
【補正対象項目名】０１２５
【補正方法】変更
【補正の内容】
【０１２５】
コミットスタックエントリには先行フロー割当エントリと後続フロー割当エントリが割当てられているが、両者について同じ命令識別子ＩＩＤ＝ｘであることから、先行フロー割当エントリと後続フロー割当エントリは同一エントリとして扱われる。


【手続補正２１】
【補正対象書類名】明細書
【補正対象項目名】０１３１
【補正方法】変更
【補正の内容】
【０１３１】
この先行フロー割当エントリ２４５−１の命令操作６６−１のＯＰコードからコンペアアンドスワップ命令の先行フロー（ＣＡＳ１ｓｔ）のコミットでセット信号Ｅ１０が出力され、また後続フロー割当エントリ２４５−２における命令操作６６−２のＯＰコードからコンペアアンドスワップ命令の後続フロー（ＣＡＳ２ｎｄ）によるコミットでリセット信号Ｅ２０が出力される。


【手続補正２２】
【補正対象書類名】明細書
【補正対象項目名】０１３６
【補正方法】変更
【補正の内容】
【０１３６】
図１８は、通常の命令実行における命令識別子の割当と図１７の各部の信号の生成状態のタイムチャートである。このタイムチャートにあっては、左端の縦方向に命令識別子ＩＩＤの割当を「ＩＩＤ０，ＩＩＤ１・・・ＩＩＤｍａｘ，ＩＩＤ０」として示し、各命令識別子の割当に対応して横方向に命令の操作をデコードサイクルＤ、プライオリティサイクルＰ、書込サイクルＷで表している。


【手続補正２３】
【補正対象書類名】明細書
【補正対象項目名】０１３９
【補正方法】変更
【補正の内容】
【０１３９】
以下同様にして各命令に対しデコードサイクルで命令識別子が順次割当てられ、処理２５８のデコードサイクルＤで最大数ＭＡＸの命令識別子ＩＩＤｍａｘが割当てられたとする。


【手続補正２４】
【補正対象書類名】明細書
【補正対象項目名】０１４４
【補正方法】変更
【補正の内容】
【０１４４】
まず図１６のようなコンペアアンドスワップ命令を対象とした先行フローの処理２７２となるデコードサイクルＤにおいて、命令識別子ＩＩＤ０を割当て、次の処理２７４のプライオリティサイクルＰで命令識別子ＩＩＤ０を使用有効とする。そして処理２７６の書込サイクルＷの時刻ｔ１で先行フローがコミットして命令識別子ＩＩＤが開放される。


【手続補正２５】
【補正対象書類名】明細書
【補正対象項目名】０１４５
【補正方法】変更
【補正の内容】
【０１４５】
時刻ｔ１で先行フローがコミットされると、図１７のバリッド信号生成部２３４に対しセット信号Ｅ１０が入力され、バリッド信号Ｘ「１」となり、図１９の処理２７８のバリッド信号生成が行われる。


【手続補正２６】
【補正対象書類名】明細書
【補正対象項目名】０１４７
【補正方法】変更
【補正の内容】
【０１４７】
続いて後続命令について順次、命令制御が行われ、ＩＩＤ使用数カウンタ２０８が最大数ＭＡＸとなる処理２８６のデコードサイクルＤにあっては、命令識別子ＩＩＤｍａｘが割当てられ、処理２８８のプライオリティサイクルＰで使用が有効となる。


【手続補正２７】
【補正対象書類名】明細書
【補正対象項目名】０１４８
【補正方法】変更
【補正の内容】
【０１４８】
この時、ＩＩＤ使用数カウンタ２０８の使用数が最大数ＭＡＸに達したことが図１７のフル使用検出部２３８で検出され、フル使用検出信号Ｚを「１」とすることで、図１９の処理２９２のフル使用検出が行われる。このため図１７のＮＡＮＤゲート２４４からのデコードステージストール信号Ｅ３０が「１」となり、図１９の命令識別子ＩＩＤ０の割当を予定している命令に対し処理２９８でインターロックをかけ、デコードサイクルＤをストールさせる。


【手続補正２８】
【補正対象書類名】明細書
【補正対象項目名】０１５０
【補正方法】変更
【補正の内容】
【０１５０】
このため時刻ｔ１で先行フローがコミットされてから、時刻ｔ２で後続フローがコミットされるまで処理２９４のようにカウンタ値「ＭＡＸ−１」の使用検出が行われる。このとき処理２７８のバリット信号生成によりバリッド信号Ｘも「１」にあるため、図１７のＮＡＮＤゲート２４４からのデコードステージストール信号Ｅ３０は「１」となり、次に命令識別子ＩＩＤ０の割当てを予定している命令に対し、処理３００のように更にデコードサイクルにインターロックをかけ、デコードサイクルを後続フローがコミットする時刻ｔ２までストールさせる。


【手続補正２９】
【補正対象書類名】明細書
【補正対象項目名】０１５１
【補正方法】変更
【補正の内容】
【０１５１】
このため時刻ｔ１で先行フローに割当てた命令識別子ＩＩＤ０が開放されても、この命令識別子ＩＩＤ０の次の割当を予定している他の命令のデコードサイクルのストールにより、命令識別子ＩＩＤ０の割当てが中止され、後続フローがコミットされる時刻ｔ２まで先行フローに割当てた命令識別子ＩＩＤ０を保証させることができる。


【手続補正３０】
【補正対象書類名】明細書
【補正対象項目名】０１５３
【補正方法】変更
【補正の内容】
【０１５３】
このようなマルチフローに展開した場合の先行命令に割当てた命令識別子の後続フローを、先行フローの命令識別子を保存する専用のレジスタを使用せず、後続フローのコミットまで確実に保存して後続フローへのデータアップロードを保証することができる。


【手続補正３１】
【補正対象書類名】明細書
【補正対象項目名】０１６１
【補正方法】変更
【補正の内容】
【０１６１】
（付記６）
付記５記載の命令制御方法に於いて、
更に、依存関係にある複数の命令で使用するレジスタを名前替えしてレジスタ更新バッファ上に割り当て、前記確定ステップによる実行命令の確定で前記レジスタ更新バッファ上に去り当てたレジスタを開放するリネーミング処理ステップを備え、前記マルチフロー保証ステップは、依存関係にある先行フローと後続フローで使用するレジスタを、前記先行フローのデコード時に、前記リネーミング処理ステップで名前替えせずに前記レジスタ更新バッファ上に専用レジスタを割り当て、前記後続フローが確定するまで前記専用レジスタの開放を禁止することを特徴とする命令制御方法。


【手続補正３２】
【補正対象書類名】明細書
【補正対象項目名】０１６２
【補正方法】変更
【補正の内容】
【０１６２】
（付記７）
付記５記載の命令制御方法に於いて、前記マルチフロー保証ステップは、
先行フローの確定から後続フローが確定するまでのあいだオンするバリッド信号Ｘを出力するバリッド信号生成ステップと、
前記レジスタ更新バッファ上の使用レジスタ数を計数するカウンタが最大値ＭＡＸからフロー数Ｎを差し引いたカウンタ値（ＭＡＸ−Ｎ）にあることを検出してオンするカウンタ判別信号Ｙを出力するカウンタ値判別ステップと、
前記カウンタが最大値にあることを検出してオンするバッファフル信号Ｚを出力するバッファフル検出ステップと、
前記バリッド信号Ｘとカウンタ判別信号Ｙとの論理積の結果に対し前記バッファフル信号Ｚと論理和をとった論理信号を生成し、前記論理信号がオンのあいだ、前記命令発行ステップにおけるデコードサイクルをストールさせる論理演算ステップと、
を備えたことを特徴とする命令制御方法。


【手続補正３３】
【補正対象書類名】明細書
【補正対象項目名】０１６３
【補正方法】変更
【補正の内容】
【０１６３】
（付記８）
付記７記載の命令制御方法に於いて、前記命令実行ステップは、前記先行フローの実行結果を前記レジスタ更新バッファ上に割当てた専用レジスタに格納し、後続フローの実行開始時に前記専用レジスタの値をフォーワーディングすることを特徴とする命令制御方法。


【手続補正３４】
【補正対象書類名】明細書
【補正対象項目名】０１６５
【補正方法】変更
【補正の内容】
【０１６５】
（付記１０）
付記９記載のプロセッサに於いて、前記命令発行部は、後続フローに割り当てた命令識別子を、先行フローと同じ命令識別子にエミュレートし、後続フローの命令操作開始時に、前記エミュレートされた命令識別子により先行フローの実行結果を参照することを特徴とするプロセッサ。（７）


【手続補正３５】
【補正対象書類名】明細書
【補正対象項目名】０１６６
【補正方法】変更
【補正の内容】
【０１６６】
（付記１１）
付記９記載のプロセッサに於いて、前記マルチフロー保証処理部は、
先行フローの確定から後続フローが確定するまでのあいだオンするバリッド信号Ｘを出力するバリット信号生成部と、
前記命令識別子の使用数を計数するカウンタが最大値ＭＡＸからフロー数Ｎを差し引いたカウンタ値（ＭＡＸ−Ｎ）にあることを検出してオンするカウンタ判別信号Ｙを出力するカウンタ値判別部と、
前記カウンタが最大値にあることを検出してオンする識別子フル信号Ｚを出力するバッファフル検出部と、
前記バリッド信号Ｘとカウンタ判別信号Ｙとの論理積の演算結果に対し前記識別子フル信号Ｚと論理和をとった論理信号を生成し、前記論理信号がオンのあいだ、前記命令発行部におけるデコードサイクルをストールさせる論理演算部と、
を備えたことを特徴とするプロセッサ。（８）


【手続補正３６】
【補正対象書類名】明細書
【補正対象項目名】０１６９
【補正方法】変更
【補正の内容】
【０１６９】
（付記１４）
付記１３記載の命令制御方法に於いて、前記命令発行ステップは、後続フローに割り当てた命令識別子を、先行フローと同じ命令識別子にエミュレートし、後続フローの命令操作開始時に、前記エミュレートされた命令識別子により先行フローの実行結果を参照することを特徴とする命令制御方法。


【手続補正３７】
【補正対象書類名】明細書
【補正対象項目名】０１７０
【補正方法】変更
【補正の内容】
【０１７０】
（付記１５）
付記１３記載の命令制御方法に於いて、前記マルチフロー保証ステップは、
先行フローの確定から後続フローが確定するまでのあいだオンするバリッド信号Ｘを出力するバリット信号生成ステップと、
前記命令識別子の使用数を計数するカウンタが最大値ＭＡＸからフロー数Ｎを差し引いたカウンタ値（ＭＡＸ−Ｎ）にあることを検出してオンするカウンタ判別信号Ｙを出力するカウンタ値判別ステップと、
前記カウンタが最大値にあることを検出してオンする識別子フル信号Ｚを出力するバッファフル検出ステップと、
前記バリッド信号Ｘとカウンタ判別信号Ｙとの論理積の演算結果に対し前記識別子フル信号Ｚと論理和をとった論理信号を生成し、前記論理信号がオンのあいだ、前記命令発行部におけるデコードサイクルをストールさせる論理演算ステップと、
を備えたことを特徴とする命令制御方法。


【手続補正３８】
【補正対象書類名】明細書
【補正対象項目名】図面の簡単な説明
【補正方法】変更
【補正の内容】
【図面の簡単な説明】
【図１】本発明の原理説明図
【図２】マルチフロー命令制御でレジスタ更新バッファ割付けを行う本発明によるプロセッサの機能構成のブロック図
【図３】図２にリネーミングを中心とした本発明による処理機能のブロック図
【図４】通常のリネーミングマップ更新処理の説明図
【図５】図４で更新したリネーミングマップに対する参照処理の説明図
【図６】先行命令がコミットした際の後続命令を実行するフォーワード制御の説明図
【図７】マルチフローとしない場合のピクセルディスタンス命令の命令操作の説明図
【図８】マルチフローとした場合のピクセルディスタンス命令の命令操作の説明図
【図９】図８のマルチフローにおける本発明のリネーミングマップ更新処理の説明図
【図１０】図９で更新したリネーミングマップに対する参照処理の説明図
【図１１】先行フローの実行結果をコミットした際に判別する後続フローに対するフォーワード制御の説明図
【図１２】後続フローのコミットまで先行フローの実行結果を保証する図２のマルチフロー保証処理部の実施形態の説明図
【図１３】通常の命令実行におけるレジスタ更新バッファの割当てと図１２の各部の信号の生成状態のタイムチャート
【図１４】本発明のマルチフローの命令実行におけるレジスタ更新バッファの割当てと図１２の各部の信号の生成状態のタイムチャート
【図１５】マルチフロー命令制御で命令識別子の割付けを行う本発明によるプロセッサの機能構成のブロック図
【図１６】図１５の命令制御対象となるコンペアアンドスワップ命令のマルチフローによる命令操作の説明図
【図１７】後続フローのコミットまで先行フローの命令識別子を保証する図１５のマルチフロー保証処理部の実施形態の説明図
【図１８】通常の命令実行における命令識別子の割当てと図１７の各部の信号の生成状態のタイムチャート
【図１９】本発明のマルチフローの命令実行における命令識別子の割当てと図１７の各部の信号の生成状態のタイムチャート