(57)【要約】      （修正有）【課題】演算例外の検出が抑止されている場合に、演算器が演算演算完了情報を出力してから命令完了処理を実行するまでの時間を短縮する。【解決手段】命令を完了させる命令完了処理をデコードされた順に実行する完了制御部ＣＣＴＬは、デコードされた命令がデコードされた順に登録され、演算の完了を示す演算完了情報を受信した場合、演算完了情報が示す命令の状態情報を、演算の完了を示す情報に更新する保持部ＣＳＥと、命令完了処理の対象となる命令を、デコードされた順に保持部ＣＳＥから読み出す選択部ＳＥＬ１０と、例外の検出が抑止され、かつ、演算部から出力された演算完了情報が示す命令と命令完了処理の対象となる命令とが一致している場合、演算の完了を示すバイパス情報を生成するバイパス部ＢＹＰと、バイパス情報が生成された命令に対してはバイパス情報に基づいて命令完了処理を実行する完了処理部ＣＯＭＰＵとを有する。【選択図】図１
2015203914.tif 000002
【特許請求の範囲】
【請求項１】
命令をデコードするデコード部と、デコードされた前記命令に基づく演算を実行する演算部と、前記命令を完了させる命令完了処理をデコードされた順に実行する完了制御部とを有し、
前記完了制御部は、
デコードされた前記命令がデコードされた順に登録され、登録された前記命令に基づく演算が完了したか否か示す状態情報を保持し、前記演算部による演算の完了を示す演算完了情報を受信した場合、前記演算完了情報が示す前記命令の前記状態情報を、演算の完了を示す情報に更新する保持部と、
前記命令完了処理の対象となる前記命令を、デコードされた順に前記保持部から読み出す選択部と、
演算処理により発生する例外の検出が抑止され、かつ、前記演算部から出力された前記演算完了情報が示す前記命令と前記命令完了処理の対象となる前記命令とが一致している場合、演算の完了を示すバイパス情報を生成するバイパス部と、
演算の完了を示す前記バイパス情報が生成された前記命令に対しては前記バイパス情報に基づいて前記命令完了処理を実行し、演算の完了を示す前記バイパス情報が生成されていない前記命令に対しては前記保持部から読み出した前記命令の前記状態情報に基づいて前記命令完了処理を実行する完了処理部とを有することを特徴とする演算処理装置。
【請求項２】
請求項１に記載の演算処理装置において、
前記バイパス部は、前記例外の検出が抑止されていない状態では、前記例外が検出されず、かつ、前記演算部から出力された前記演算完了情報が示す前記命令と前記命令完了処理の対象となる前記命令とが一致している場合、演算の完了を示す前記バイパス情報を生成する
ことを特徴とする演算処理装置。
【請求項３】
命令をデコードするデコード部と、デコードされた前記命令に基づく演算を実行する演算部と、デコードされた前記命令がデコードされた順に登録される保持部に、前記命令に基づく演算が完了したか否か示す状態情報を前記命令に対応させて格納し、前記命令を完了させる命令完了処理をデコードされた順に実行する完了制御部とを有する演算処理装置の制御方法において、
前記完了制御部は、前記命令完了処理の対象となる前記命令を、デコードされた順に前記保持部から読み出し、
前記完了制御部は、前記演算部による演算の完了を示す演算完了情報を受信した場合、前記保持部に保持された前記状態情報のうち、前記演算完了情報が示す前記命令の前記状態情報を、演算の完了を示す情報に更新し、
前記完了制御部は、演算処理により発生する例外の検出が抑止され、かつ、前記演算部から出力された前記演算完了情報が示す前記命令と前記命令完了処理の対象となる前記命令とが一致している場合、演算の完了を示すバイパス情報を生成し、
前記完了制御部は、演算の完了を示す前記バイパス情報が生成された前記命令に対しては前記バイパス情報に基づいて前記命令完了処理を実行し、演算の完了を示す前記バイパス情報が生成されていない前記命令に対しては前記保持部から読み出した前記命令の前記状態情報に基づいて前記命令完了処理を実行する
ことを特徴とする演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置および演算処理装置の制御方法に関する。
【背景技術】
【０００２】
プロセッサ等の演算処理装置は、例えば、命令デコーダと、演算を実行する演算器と、コミットスタックエントリ（ＣＳＥ：Commit Stack Entry）と、リザベーションステーション（ＲＳ：Reservation Station）とを有する（例えば、特許文献１参照）。例えば、命令デコーダは、命令キャッシュメモリから受信した命令をインオーダでデコードする。
【０００３】
コミットスタックエントリは、例えば、命令を完了させるための命令完了処理に用いられるバッファである。命令完了処理は、例えば、命令の実行結果をレジスタ等に反映する制御である。また、リザベーションステーションは、例えば、固定小数点演算命令、浮動小数点演算命令等の命令種別毎に設けられ、アウトオブオーダ実行を制御する。例えば、アウトオブオーダ実行では、プログラム順に拘わらず実行可能な命令から実行される。
【０００４】
例えば、演算処理装置は、命令デコーダでデコードした全ての命令を、命令順にインオーダでコミットスタックエントリに登録するとともに、各リザベーションステーションに登録する。各リザベーションステーションは、実行可能な状態の命令をアウトオブオーダで選択する。そして、例えば、演算器は、リザベーションステーションで選択された命令を実行する。
【０００５】
ここで、浮動小数点演算等の演算処理では、オーバーフロー等の例外が発生する場合がある。このため、演算結果に基づいて検出されるオーバーフロー等を表示するフラグを検査して例外処理が必要か否かを判定する浮動小数点演算装置が提案されている（例えば、特許文献２参照）。以下、演算処理により発生する例外を演算例外とも称する。
【０００６】
例えば、演算例外の検出が抑止されている場合、コミットスタックエントリは、演算器による演算の完了を示す演算完了情報を受信したとき、演算完了情報に対応する命令に関する情報を演算の完了を示す情報に更新する。例えば、演算処理装置が所定のクロックのサイクルで動作している場合、演算の完了を示す情報に更新された命令の情報は、情報を更新したサイクルの次のサイクル以降に、インオーダでコミットスタックエントリから読み出される。例えば、コミットスタックエントリから読み出された命令の情報に基づいて、命令完了処理がインオーダで実行される。
【０００７】
なお、遅延スロットを持つ命令を処理するパイプライン方式の情報処理装置では、フラグレジスタの状態により、遅延命令の直後の割り込みを有効または無効に切り替える割り込み処理方法が提案されている（例えば、特許文献３参照）。フラグレジスタの状態は、例えば、ソフトウエアで設定可能である。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２０１１−８７３２号公報
【特許文献２】特開平５−１４３３２０号公報
【特許文献３】特開２００７−１８８５２７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
演算器が演算完了情報を出力したサイクルで、コミットスタックエントリに登録されている命令の情報が読み出された場合、読み出された命令の情報には、演算完了情報の内容（演算の完了）は、反映されていない。このため、命令完了処理の実行は、演算例外の検出が抑止されている場合でも、コミットスタックエントリに登録されている命令の情報が演算の完了を示す情報に更新されるまで待たされる。
【００１０】
１つの側面では、本件開示の演算処理装置および演算処理装置の制御方法は、演算例外の検出が抑止されている場合に、演算器が演算完了情報を出力してから命令完了処理を実行するまでの時間を短縮することである。
【課題を解決するための手段】
【００１１】
一観点によれば、演算処理装置は、命令をデコードするデコード部と、デコードされた命令に基づく演算を実行する演算部と、命令を完了させる命令完了処理をデコードされた順に実行する完了制御部とを有し、完了制御部は、デコードされた命令がデコードされた順に登録され、登録された命令に基づく演算が完了したか否か示す状態情報を保持し、演算部による演算の完了を示す演算完了情報を受信した場合、演算完了情報が示す命令の状態情報を、演算の完了を示す情報に更新する保持部と、命令完了処理の対象となる命令を、デコードされた順に保持部から読み出す選択部と、演算処理により発生する例外の検出が抑止され、かつ、演算部から出力された演算完了情報が示す命令と命令完了処理の対象となる命令とが一致している場合、演算の完了を示すバイパス情報を生成するバイパス部と、演算の完了を示すバイパス情報が生成された命令に対してはバイパス情報に基づいて命令完了処理を実行し、演算の完了を示すバイパス情報が生成されていない命令に対しては保持部から読み出した命令の状態情報に基づいて命令完了処理を実行する完了処理部とを有する。
【００１２】
別の観点によれば、命令をデコードするデコード部と、デコードされた命令に基づく演算を実行する演算部と、デコードされた命令がデコードされた順に登録される保持部に、命令に基づく演算が完了したか否か示す状態情報を命令に対応させて格納し、命令を完了させる命令完了処理をデコードされた順に実行する完了制御部とを有する演算処理装置の制御方法では、完了制御部は、命令完了処理の対象となる命令を、デコードされた順に保持部から読み出し、完了制御部は、演算部による演算の完了を示す演算完了情報を受信した場合、保持部に保持された状態情報のうち、演算完了情報が示す命令の状態情報を、演算の完了を示す情報に更新し、完了制御部は、演算処理により発生する例外の検出が抑止され、かつ、演算部から出力された演算完了情報が示す命令と命令完了処理の対象となる命令とが一致している場合、演算の完了を示すバイパス情報を生成し、完了制御部は、演算の完了を示すバイパス情報が生成された命令に対してはバイパス情報に基づいて命令完了処理を実行し、演算の完了を示すバイパス情報が生成されていない命令に対しては保持部から読み出した命令の状態情報に基づいて命令完了処理を実行する。
【発明の効果】
【００１３】
本件開示の演算処理装置および演算処理装置の制御方法は、演算例外の検出が抑止されている場合に、演算器が演算完了情報を出力してから命令完了処理を実行するまでの時間を短縮できる。
【図面の簡単な説明】
【００１４】
【図１】演算処理装置および演算処理装置の制御方法の一実施形態を示す図である。
【図２】図１に示した演算処理装置の動作フローの一例を示す図である。
【図３】図１に示した演算処理装置の動作フローの別の例を示す図である。
【図４】演算処理装置および演算処理装置の制御方法の別の実施形態を示す図である。
【図５】図４に示した命令完了制御部の一例を示す図である。
【図６】図４に示した演算処理装置のパイプライン処理の一例を示す図である。
【図７】スーパースカラ方式によるアウトオブオーダ実行の一例を示す図である。
【図８】図５に示した命令完了制御部の動作の一例を示す図である。
【図９】図５に示した命令完了制御部の動作の別の例を示す図である。
【図１０】図５に示した命令完了制御部の動作の別の例を示す図である。
【図１１】図５に示した命令完了制御部の動作の別の例を示す図である。
【図１２】図５に示した命令完了制御部の動作の比較例を示す図である。
【図１３】図４に示した命令完了制御部の別の例を示す図である。
【図１４】図１３に示した命令完了制御部の動作フローの一例を示す図である。
【図１５】図１３に示した命令完了制御部の動作の一例を示す図である。
【発明を実施するための形態】
【００１５】
以下、実施形態を図面を用いて説明する。
【００１６】
図１は、演算処理装置および演算処理装置の制御方法の一実施形態を示す。この実施形態の演算処理装置ＰＵは、例えば、所定のクロックのサイクルで動作するＣＰＵ（Central Processing Unit）等のプロセッサである。なお、演算処理装置ＰＵは、命令を実行する複数の回路を有するスーパースカラ方式のプロセッサでもよいし、スーパースカラ方式以外のプロセッサでもよい。
【００１７】
演算処理装置ＰＵは、命令をデコードする命令デコーダＤＥＣと、デコードされた命令に基づく演算を実行する演算部ＯＰと、命令を完了させる命令完了処理（以下、コミット処理とも称する）をデコードされた順に実行する命令完了制御部ＣＣＴＬとを有する。コミット処理は、例えば、命令の実行結果をレジスタ等に反映する制御である。
【００１８】
命令デコーダＤＥＣは、命令をデコードするデコード部の一例である。例えば、命令デコーダＤＥＣは、命令キャッシュから命令を読み出し、読み出した命令をデコードする。そして、命令デコーダＤＥＣは、デコードした命令をリザベーションステーションＲＳおよび命令完了制御部ＣＣＴＬに出力する。そしてリザベーションステーションＲＳから演算部ＯＰに命令が出力される。
【００１９】
演算部ＯＰは、デコードされた命令に基づく演算を実行する演算部の一例である。例えば、演算部ＯＰは、浮動小数点演算を実行する演算器、固定小数点演算を実行する演算器等を有する。演算部ＯＰは、命令デコーダＤＥＣでデコードされた命令がセットされたリザベーションステーションＲＳからの命令を受信する。そして、演算部ＯＰは、受信した命令のデコード結果に基づいて、浮動小数点演算、固定小数点演算等をアウトオブオーダで実行する。例えば、アウトオブオーダ実行では、プログラム順に拘わらずリザベーションステーションＲＳに登録された命令で実行可能な命令から実行される。
【００２０】
また、演算部ＯＰは、命令に基づく演算が完了した場合、演算の完了を示す演算完了情報を命令完了制御部ＣＣＴＬに出力する。また、例えば、演算部ＯＰは、オーバーフロー、アンダーフロー、ゼロ除算等の例外が演算処理により発生した場合、例外が発生したことを示す例外情報を命令完了制御部ＣＣＴＬに出力してもよい。以下、演算処理により発生する例外を演算例外とも称する。
【００２１】
命令完了制御部ＣＣＴＬは、命令を完了させる命令完了処理をデコードされた順に実行する完了制御部の一例である。例えば、命令完了制御部ＣＣＴＬは、命令完了処理を１サイクル中に最大４個の命令に対して実行する。この場合、命令完了処理が実行されていない命令のうち、最も古い命令（先頭の命令）から４番目の命令までの４個の命令が、命令完了処理の対象の命令に対応する。
【００２２】
なお、命令完了処理が実行される命令の１サイクル中の最大数は、４個に限定されない。また、命令完了制御部ＣＣＴＬは、例えば、命令完了処理の対象である４個の命令の中に、演算が完了していない命令が含まれる場合、先頭の命令から演算が完了していない命令の前の命令までを対象に、命令完了処理を実行する。
【００２３】
命令完了制御部ＣＣＴＬは、例えば、コミットスタックエントリＣＳＥ、選択部ＳＥＬ１０、バイパス部ＢＹＰおよび完了処理部ＣＯＭＰＵを有する。
【００２４】
コミットスタックエントリＣＳＥは、デコードされた命令がデコードされた順に登録される保持部の一例である。コミットスタックエントリＣＳＥは、例えば、命令完了処理に用いられるバッファである。例えば、コミットスタックエントリＣＳＥには、命令を識別するための命令識別子（以下、ＩＩＤ（Instruction IDentification）とも称する）、命令種別、状態情報、命令結果が格納されるレジスタ番号等を含むエントリ情報が命令毎に登録される。状態情報は、例えば、命令の実行待ち、命令の実行中、命令の終了等の命令の状態を示す情報である。したがって、状態情報は、登録された命令に基づく演算が完了したか否か示す情報に対応する。
【００２５】
例えば、コミットスタックエントリＣＳＥは、命令デコーダＤＥＣでデコードされた命令を受信し、受信した命令に関するエントリ情報をデコードされた順に並ぶように保持する。これにより、命令デコーダＤＥＣでデコードされた命令がデコードされた順にコミットスタックエントリＣＳＥに登録される。
【００２６】
また、コミットスタックエントリＣＳＥは、演算部ＯＰによる演算の完了を示す演算完了情報を受信した場合、演算完了情報が示す命令の状態情報を、演算の完了を示す情報に更新する。
【００２７】
選択部ＳＥＬ１０は、命令完了処理の対象となる命令を、デコードされた順に保持部（例えば、コミットスタックエントリＣＳＥ）から読み出す選択部の一例である。例えば、選択部ＳＥＬ１０は、コミットスタックエントリＣＳＥに登録されている有効な命令（命令完了処理が実行されていない命令）のうち、最も古い命令から順にコミットスタックエントリＣＳＥから読み出す。デコードされた順に命令完了処理が実行されるため、コミットスタックエントリＣＳＥに登録されている有効な命令のうちの最も古い命令は、命令完了処理の対象となる先頭の命令に対応する。
【００２８】
選択部ＳＥＬ１０によりコミットスタックエントリＣＳＥから読み出された命令は、例えば、完了処理部ＣＯＭＰＵおよびバイパス部ＢＹＰに転送される。例えば、選択部ＳＥＬ１０は、コミットスタックエントリＣＳＥから読み出した命令の状態情報をバイパス部ＢＹＰに出力し、コミットスタックエントリＣＳＥから読み出した命令の状態情報以外の情報（ＩＩＤ、命令種別等）を完了処理部ＣＯＭＰＵに出力する。
【００２９】
バイパス部ＢＹＰは、演算の完了を示すバイパス情報を生成するバイパス部の一例である。バイパス部ＢＹＰは、例えば、演算処理により発生する例外の検出が抑止されている場合に、演算部ＯＰによる演算の完了を示す演算完了情報に基づいて、演算の完了を示すバイパス情報を生成する。
【００３０】
ここで、例えば、演算処理装置ＰＵは、浮動小数点演算等の演算処理により発生する例外の検出を抑止することを示すＦＥＤ（Floating-point Exception Disable mode）フラグを有する。例えば、ＦＥＤフラグが”１”に設定された場合、演算例外の検出が抑止される。また、例えば、ＦＥＤフラグが”０”に設定された場合、演算例外の検出は抑止されない。ＦＥＤフラグは、例えば、プログラムの動作中に命令により任意に書き換え可能である。なお、ＦＥＤフラグにより検出が抑止される演算例外は、浮動小数点演算により発生する例外に限定されない。例えば、固定小数点演算により発生する例外の検出も、ＦＥＤフラグにより抑止されてもよい。
【００３１】
例えば、バイパス部ＢＹＰは、演算部ＯＰによる演算の完了を示す演算完了情報を受信する。そして、バイパス部ＢＹＰは、演算処理により発生する例外の検出が抑止され、かつ、演算部ＯＰから出力された演算完了情報が示す命令と命令完了処理の対象となる命令とが一致している場合、演算の完了を示すバイパス情報を生成する。すなわち、バイパス部ＢＹＰは、命令完了処理の対象となる命令の演算完了情報が演算部ＯＰから出力された場合、演算完了情報の内容（演算の完了）を反映したバイパス情報を生成する。
【００３２】
また、例えば、バイパス部ＢＹＰは、選択部ＳＥＬ１０から受信した命令の状態情報を完了処理部ＣＯＭＰＵに転送する。なお、バイパス部ＢＹＰは、演算の完了を示すバイパス情報を生成した場合、バイパス情報に対応する命令の状態情報の代わりに、演算の完了を示すバイパス情報を完了処理部ＣＯＭＰＵに出力する。この場合、演算完了情報の内容が反映される前にコミットスタックエントリＣＳＥから読み出された命令の状態情報の代わりに、演算完了情報の内容（演算の完了）を反映したバイパス情報が完了処理部ＣＯＭＰＵに転送される。
【００３３】
このように、バイパス部ＢＹＰは、演算例外の検出が抑止されている場合に、演算部ＯＰが演算完了情報を出力してから演算完了情報の内容を完了処理部ＣＯＭＰＵに通知するまでの時間を短縮できる。これにより、演算処理装置ＰＵは、演算例外の検出が抑止されている場合に、演算部ＯＰが演算完了情報を出力してから命令完了処理を実行するまでの時間を短縮できる。
【００３４】
完了処理部ＣＯＭＰＵは、バイパス情報が生成された命令に対してはバイパス情報に基づいて命令完了処理を実行し、バイパス情報が生成されていない命令に対しては保持部から読み出した状態情報に基づいて命令完了処理を実行する完了処理部の一例である。例えば、完了処理部ＣＯＭＰＵは、バイパス部ＢＹＰから受信した情報（バイパス情報あるいは命令の状態情報）に基づいて、演算が完了したか否かを命令毎に判定する。
【００３５】
例えば、完了処理部ＣＯＭＰＵは、演算の完了を示すバイパス情報が生成された命令に対しては、演算が完了したと判定する。また、例えば、完了処理部ＣＯＭＰＵは、演算の完了を示すバイパス情報が生成されていない命令に対しては、コミットスタックエントリＣＳＥから読み出された命令の状態情報に基づいて、演算が完了したか否かを判定する。
【００３６】
そして、完了処理部ＣＯＭＰＵは、演算が完了したか否かの判定結果に基づいて、命令完了処理の対象の命令に対する命令完了処理をデコードされた順に実行する。例えば、完了処理部ＣＯＭＰＵは、命令完了処理の対象としてコミットスタックエントリＣＳＥから読み出された命令のうち、先頭の命令から演算が完了していない命令の前の命令までを対象に、命令完了処理をデコードされた順に実行する。なお、完了処理部ＣＯＭＰＵは、例えば、命令完了処理の対象としてコミットスタックエントリＣＳＥから読み出された全ての命令で演算が完了している場合、命令完了処理の対象の全ての命令に対して、命令完了処理をデコードされた順に実行する。
【００３７】
なお、演算処理装置ＰＵの構成は、この例に限定されない。例えば、命令完了制御部ＣＣＴＬは、演算完了情報以外の完了情報（例えば、分岐命令に対する分岐予測の判定結果等を示す分岐判定完了情報）を受信し、受信した完了情報に基づいて命令完了処理を実行してもよい。
【００３８】
また、例えば、選択部ＳＥＬ１０は、コミットスタックエントリＣＳＥから読み出した命令の状態情報を、バイパス部ＢＹＰに出力せずに、完了処理部ＣＯＭＰＵに出力してもよい。この場合、完了処理部ＣＯＭＰＵは、バイパス情報および選択部ＳＥＬ１０によりコミットスタックエントリＣＳＥから読み出された命令の状態情報に基づいて、命令完了処理を実行するか否かを決定する。例えば、完了処理部ＣＯＭＰＵは、演算の完了を示すバイパス情報が生成された命令に対しては、命令完了処理を実行するか否かをバイパス情報に基づいて決定する。また、完了処理部ＣＯＭＰＵは、演算の完了を示すバイパス情報が生成されていない命令に対しては、命令完了処理を実行するか否かを、コミットスタックエントリＣＳＥから読み出された命令の状態情報に基づいて決定する。
【００３９】
図２は、図１に示した演算処理装置ＰＵの動作フローの一例を示す。すなわち、図２は、演算処理装置の制御方法の一形態を示す。なお、図２は、演算例外の検出が抑止された場合の命令完了制御部ＣＣＴＬの動作の一例を示す。図２の動作は、ハードウエアのみで実現されてもよく、ハードウエアをソフトウエアにより制御することにより実現されてもよい。
【００４０】
また、図２には示していないが、命令デコーダＤＥＣでデコードされた命令は、デコードされた順にコミットスタックエントリＣＳＥに登録される。例えば、命令完了制御部ＣＣＴＬは、デコードされた命令がデコードされた順に登録されるコミットスタックエントリＣＳＥに、命令に基づく演算が完了したか否か示す状態情報を命令に対応させて格納する。
【００４１】
例えば、ステップＳ１２０は、ステップＳ１３０−Ｓ１４０と並列に実行される。この場合、ステップＳ１２０−Ｓ１４０は、例えば、同一サイクルに実行される。また、例えば、ステップＳ１５０は、ステップＳ１２０−Ｓ１４０が実行されたサイクルの後のサイクルに実行される。
【００４２】
ステップＳ１００では、選択部ＳＥＬ１０は、命令完了処理の対象となる命令を、デコードされた順にコミットスタックエントリＣＳＥから読み出す。例えば、命令完了処理が実行される命令の１サイクル中の最大数が４個の場合、選択部ＳＥＬ１０は、コミットスタックエントリＣＳＥに登録されている有効な命令のうち、最も古い命令から順に４個の命令をコミットスタックエントリＣＳＥから読み出す。
【００４３】
ステップＳ１１０では、命令完了制御部ＣＣＴＬは、演算部ＯＰによる演算の完了を示す演算完了情報を受信したか否かを判定する。演算完了情報を受信した場合（ステップＳ１１０のＹｅｓ）、命令完了制御部ＣＣＴＬの動作は、ステップＳ１２０に移る。一方、演算完了情報を受信していない場合（ステップＳ１１０のＮｏ）、命令完了制御部ＣＣＴＬの動作は、ステップＳ１５０に移る。
【００４４】
ステップＳ１２０では、命令完了制御部ＣＣＴＬは、コミットスタックエントリＣＳＥに保持された状態情報のうち、演算完了情報が示す命令の状態情報を、演算の完了を示す情報に更新する。すなわち、コミットスタックエントリＣＳＥは、演算部ＯＰによる演算の完了を示す演算完了情報を受信した場合、演算完了情報が示す命令の状態情報を、演算の完了を示す情報に更新する。
【００４５】
ステップＳ１３０では、命令完了制御部ＣＣＴＬは、ステップＳ１１０で受信した演算完了情報の命令がステップＳ１００で読み出した命令完了処理の対象となる命令か否かを判定する。なお、演算完了情報の命令は、演算完了情報が示す命令（演算が完了した命令）である。演算完了情報の命令が命令完了処理の対象である場合（ステップＳ１３０のＹｅｓ）、命令完了制御部ＣＣＴＬの動作は、ステップＳ１４０に移る。一方、演算完了情報の命令が命令完了処理の対象でない場合（ステップＳ１３０のＮｏ）、命令完了制御部ＣＣＴＬの動作は、ステップＳ１５０に移る。
【００４６】
ステップＳ１４０では、バイパス部ＢＹＰは、演算完了情報に基づいて、演算（演算完了情報が示す命令の演算）の完了を示すバイパス情報を生成する。例えば、バイパス部ＢＹＰは、演算完了情報が示す命令に対して、演算の完了を示すバイパス情報を生成する。このように、バイパス部ＢＹＰは、演算処理により発生する例外の検出が抑止され、かつ、演算部ＯＰから出力された演算完了情報が示す命令と命令完了処理の対象となる命令とが一致している場合、演算の完了を示すバイパス情報を生成する。
【００４７】
ステップＳ１５０では、命令完了制御部ＣＣＴＬは、バイパス情報およびコミットスタックエントリＣＳＥから読み出した命令の状態情報に基づいて、命令完了処理を実行する。例えば、完了処理部ＣＯＭＰＵは、ステップＳ１４０で生成されたバイパス情報およびステップＳ１００でコミットスタックエントリＣＳＥから読み出した命令の状態情報に基づいて、命令完了処理を実行する。
【００４８】
例えば、完了処理部ＣＯＭＰＵは、ステップＳ１４０で生成されたバイパス情報およびステップＳ１００でコミットスタックエントリＣＳＥから読み出された命令の状態情報のいずれかが演算の完了を示す場合に、演算が完了したと判定する。そして、完了処理部ＣＯＭＰＵは、例えば、ステップＳ１００でコミットスタックエントリＣＳＥから読み出された命令のうち、先頭の命令から演算が完了していない命令の前の命令までを対象に、命令完了処理をデコードされた順に実行する。
【００４９】
なお、完了処理部ＣＯＭＰＵは、例えば、ステップＳ１００でコミットスタックエントリＣＳＥから読み出された全ての命令で演算が完了している場合、命令完了処理の対象の全ての命令に対して、命令完了処理をデコードされた順に実行する。命令完了処理が実行されることにより、命令完了処理の対象が更新される。
【００５０】
また、完了処理部ＣＯＭＰＵは、例えば、ステップＳ１００でコミットスタックエントリＣＳＥから読み出された全ての命令で演算が完了していない場合、コミットスタックエントリＣＳＥから読み出された全ての命令に対して、命令完了処理を実行しない。この場合、命令完了処理の対象は更新されない。
【００５１】
このように、例えば、演算完了情報の内容は、コミットスタックエントリＣＳＥが演算完了情報を受信したサイクル中に、コミットスタックエントリＣＳＥに設定され、演算完了情報が示す命令の状態情報として保持される。このため、ステップＳ１５０で参照される状態情報には、ステップＳ１１０で受信した演算完了情報の内容は反映されていない。例えば、演算完了情報の内容は、コミットスタックエントリＣＳＥが演算完了情報を受信したサイクルより後のサイクルでコミットスタックエントリＣＳＥから読み出された命令の状態情報に反映される。
【００５２】
これに対し、例えば、ステップＳ１１０で受信した演算完了情報の命令が命令完了処理の対象である場合、演算完了情報の内容は、コミットスタックエントリＣＳＥが演算完了情報を受信したサイクル中に、ステップＳ１５０で参照されるバイパス情報に反映される。すなわち、演算処理装置ＰＵは、演算部ＯＰが演算完了情報を出力してから演算完了情報の内容が反映された情報を完了処理部ＣＯＭＰＵが受信するまでの時間を短縮できる。
【００５３】
これにより、演算処理装置ＰＵは、演算例外の検出が抑止されている場合に、演算部ＯＰが演算完了情報を出力してから命令完了処理を実行するまでの時間を短縮できる。例えば、演算処理装置ＰＵは、ステップＳ１２０に要するサイクル数が１サイクルの場合、演算部ＯＰが演算完了情報を出力してから命令完了処理を実行するまでの時間を、バイパス部ＢＹＰが省かれた構成に比べて、１サイクル短縮できる。なお、演算処理装置ＰＵの動作は、この例に限定されない。
【００５４】
図３は、図１に示した演算処理装置ＰＵの動作フローの別の例を示す。なお、図３は、演算例外の検出が抑止されていない場合の命令完了制御部ＣＣＴＬの動作の一例を示す。図３の動作は、ハードウエアのみで実現されてもよく、ハードウエアをソフトウエアにより制御することにより実現されてもよい。また、図３には示していないが、命令デコーダＤＥＣでデコードされた命令は、デコードされた順にコミットスタックエントリＣＳＥに登録される。なお、図２の動作と同一または同様な動作については、詳細な説明を省略する。
【００５５】
ステップＳ２００では、選択部ＳＥＬ１０は、命令完了処理の対象となる命令を、デコードされた順にコミットスタックエントリＣＳＥから読み出す。
【００５６】
ステップＳ２１０では、命令完了制御部ＣＣＴＬは、演算部ＯＰによる演算の完了を示す演算完了情報を受信したか否かを判定する。演算完了情報を受信した場合（ステップＳ２１０のＹｅｓ）、命令完了制御部ＣＣＴＬの動作は、ステップＳ２２０に移る。一方、演算完了情報を受信していない場合（ステップＳ２１０のＮｏ）、命令完了制御部ＣＣＴＬの動作は、ステップＳ２５０に移る。
【００５７】
ステップＳ２２０では、命令完了制御部ＣＣＴＬは、コミットスタックエントリＣＳＥに保持された状態情報のうち、演算完了情報が示す命令の状態情報を、演算の完了を示す情報に更新する。
【００５８】
ステップＳ２３０では、命令完了制御部ＣＣＴＬは、例外が検出されたか否かを判定する。例えば、命令完了制御部ＣＣＴＬは、オーバーフロー、アンダーフロー、ゼロ除算等の例外が発生したことを示す例外情報を演算部ＯＰから受信したか否かを判定する。例外が検出された場合（ステップＳ２３０のＹｅｓ）、命令完了制御部ＣＣＴＬの動作は、ステップＳ２４０に移る。一方、例外が検出されていない場合（ステップＳ２３０のＮｏ）、命令完了制御部ＣＣＴＬの動作は、ステップＳ２５０に移る。
【００５９】
ステップＳ２４０では、命令完了制御部ＣＣＴＬは、コミットスタックエントリＣＳＥに保持された状態情報のうち、演算完了情報が示す命令の状態情報を、例外の発生を示す情報に更新する。
【００６０】
ステップＳ２５０では、命令完了制御部ＣＣＴＬは、コミットスタックエントリＣＳＥから読み出した命令の状態情報に基づいて、命令完了処理を実行する。例えば、完了処理部ＣＯＭＰＵは、ステップＳ１００でコミットスタックエントリＣＳＥから読み出した命令の状態情報が例外の発生を示している場合、例外処理を実行する。例外処理では、例えば、例外が発生した命令の後続の命令は、キャンセルされる。
【００６１】
なお、演算処理装置ＰＵの動作は、この例に限定されない。例えば、バイパス部ＢＹＰは、図１４に示すように、例外が検出されず、かつ、演算部ＯＰから出力された演算完了情報が示す命令と命令完了処理の対象となる命令とが一致している場合、演算の完了を示すバイパス情報を生成してもよい。この場合、例えば、命令完了制御部ＣＣＴＬは、ステップＳ２５０において、バイパス情報およびコミットスタックエントリＣＳＥから読み出した命令の状態情報に基づいて、命令完了処理を実行する。
【００６２】
以上、図１から図３に示した実施形態の演算処理装置および演算処理装置の制御方法では、命令完了制御部ＣＣＴＬは、バイパス情報およびコミットスタックエントリＣＳＥから読み出した命令の状態情報に基づいて、命令完了処理を実行する。例えば、命令完了制御部ＣＣＴＬは、演算処理により発生する例外の検出が抑止され、かつ、演算部ＯＰから出力された演算完了情報が示す命令と命令完了処理の対象となる命令とが一致している場合、演算の完了を示すバイパス情報を生成する。
【００６３】
すなわち、バイパス部ＢＹＰは、命令完了処理の対象となる命令の演算完了情報が演算部ＯＰから出力された場合、演算完了情報の内容（演算の完了）を反映したバイパス情報を生成する。そして、バイパス部ＢＹＰは、例えば、演算の完了を示すバイパス情報を生成した場合、バイパス情報に対応する命令の状態情報の代わりに、演算の完了を示すバイパス情報を完了処理部ＣＯＭＰＵに出力する。
【００６４】
これにより、この実施形態では、演算例外の検出が抑止されている場合に、演算部ＯＰが演算完了情報を出力してから演算完了情報の内容を完了処理部ＣＯＭＰＵに通知するまでの時間を短縮できる。この結果、この実施形態では、演算例外の検出が抑止されている場合に、演算部ＯＰが演算完了情報を出力してから命令完了処理を実行するまでの時間を短縮できる。
【００６５】
図４は、演算処理装置および演算処理装置の制御方法の別の実施形態を示す。図１から図３で説明した要素と同一または同様の要素については、同一または同様の符号を付し、これ等については、詳細な説明を省略する。なお、図４に示した命令完了制御部ＣＣＴＬでは、図を見やすくするために、コミットスタックエントリＣＳＥ以外の記載を省略している。
【００６６】
演算処理装置ＰＵは、例えば、所定のクロックのサイクルで動作するＣＰＵ等のプロセッサである。例えば、演算処理装置ＰＵは、命令を実行する複数の回路（演算器ＥＸＵ、ＦＰＵ等）を有するスーパースカラ方式のプロセッサである。演算処理装置ＰＵは、例えば、状態制御部ＭＣＴＬ、分岐予測機構ＢＲＰＲＥ、命令フェッチアドレス生成器ＦＡＧＥＮ、命令キャッシュＣＣＭ、命令デコーダＤＥＣ、演算部ＯＰ、データキャッシュＤＣＭ、分岐制御部ＢＣＴＬおよび命令完了制御部ＣＣＴＬを有する。
【００６７】
状態制御部ＭＣＴＬは、例えば、プログラムカウンタＰＣおよびネクストプログラムカウンタＮＰＣを有する。プログラムカウンタＰＣは、例えば、演算処理装置ＰＵが実行する命令のアドレスを示す値（以下、ＰＣ値とも称する）を、命令フェッチアドレス生成器ＦＡＧＥＮに出力する。ネクストプログラムカウンタＮＰＣは、次のＰＣ値を保持する。例えば、プログラムカウンタＰＣの値（ＰＣ値）およびネクストプログラムカウンタＮＰＣの値（次のＰＣ値）は、命令完了処理が実行される度に、増加する。
【００６８】
また、状態制御部ＭＣＴＬは、演算例外の検出を抑止することを示すＦＥＤフラグを有する。例えば、ＦＥＤフラグは、演算処理装置ＰＵの動作モードを設定するための命令により任意に書き換え可能である。例えば、状態制御部ＭＣＴＬは、演算例外の検出を抑止する場合、ＦＥＤフラグを”１”に設定し、演算例外の検出を抑止しない場合、ＦＥＤフラグを”０”に設定する。そして、状態制御部ＭＣＴＬは、ＦＥＤフラグの設定値を命令完了制御部ＣＣＴＬに出力する。
【００６９】
分岐予測機構ＢＲＰＲＥは、分岐命令の結果を予測する。命令フェッチアドレス生成器ＦＡＧＥＮは、プログラムカウンタＰＣの値（ＰＣ値）、分岐予測機構ＢＲＰＲＥによる分岐予測の結果、分岐制御部ＢＣＴＬからの情報（例えば、分岐予測が成功したか否かを示す情報）等に基づいて、命令フェッチアドレスを生成する。命令キャッシュＣＣＭには、例えば、プログラムを実行するための複数の命令が格納される。例えば、命令キャッシュＣＣＭは、命令フェッチアドレス生成器ＦＡＧＥＮで生成された命令フェッチアドレスが示す命令を、命令デコーダＤＥＣに出力する。
【００７０】
命令デコーダＤＥＣは、図１に示した命令デコーダＤＥＣと同一または同様である。すなわち、命令デコーダＤＥＣは、命令をデコードするデコード部の一例である。例えば、命令デコーダＤＥＣは、命令フェッチアドレス生成器ＦＡＧＥＮで生成された命令フェッチアドレスが示す命令を、命令キャッシュＣＣＭから読み出す。そして、命令デコーダＤＥＣは、命令キャッシュＣＣＭから読み出した命令をデコードし、デコードした命令を命令完了制御部ＣＣＴＬに出力する。これにより、命令デコーダＤＥＣでデコードされた命令は、命令完了制御部ＣＣＴＬのコミットスタックエントリＣＳＥに、命令順にインオーダで登録される。
【００７１】
また、命令デコーダＤＥＣは、デコードした命令を、演算部ＯＰのリザベーションステーションＲＳＡ、ＲＳＥ、ＲＳＦおよび分岐制御部ＢＣＴＬのリザベーションステーションＲＳＢＲに出力する。これにより、命令デコーダＤＥＣでデコードされた命令は、リザベーションステーションＲＳＡ、ＲＳＥ、ＲＳＦ、ＲＳＢＲのいずれかに登録される。なお、リザベーションステーションＲＳＡ、ＲＳＥ、ＲＳＦ、ＲＳＢＲは、例えば、ロード／ストア命令、固定小数点演算命令、浮動小数点演算命令、分岐命令等の命令種別毎に設けられ、アウトオブオーダ実行を制御する。
【００７２】
演算部ＯＰは、図１に示した演算部ＯＰと同一または同様である。すなわち、演算部ＯＰは、デコードされた命令に基づく演算を実行する演算部の一例である。例えば、演算部ＯＰは、リザベーションステーションＲＳＡ、ＲＳＥ、ＲＳＦ、オペランドアドレス生成器ＯＡＧＥＮ、演算器ＥＸＵ、ＦＰＵ、固定小数点更新バッファＥＸＢＵＦ、浮動小数点更新バッファＦＰＢＵＦ、固定小数点レジスタＥＸＲＥＧおよび浮動小数点レジスタＦＰＲＥＧを有する。
【００７３】
以下、固定小数点更新バッファＥＸＢＵＦおよび固定小数点レジスタＥＸＲＥＧを、それぞれ更新バッファＥＸＢＵＦおよびレジスタＥＸＲＥＧとも称する。また、浮動小数点更新バッファＦＰＢＵＦおよび浮動小数点レジスタＦＰＲＥＧを、それぞれ更新バッファＦＰＢＵＦおよびレジスタＦＰＲＥＧとも称する。
【００７４】
リザベーションステーションＲＳＡは、ロード／ストア命令用のリザベーションステーション（ＲＳＡ：Reservation  Station  for  Address）である。例えば、リザベーションステーションＲＳＡは、命令デコーダＤＥＣでデコードされたロード／ストア命令を受信する。これにより、リザベーションステーションＲＳＡには、ロード／ストア命令が登録される。そして、リザベーションステーションＲＳＡは、実行可能な状態のロード／ストア命令をアウトオブオーダで選択する。オペランドアドレス生成器ＯＡＧＥＮは、リザベーションステーションＲＳＡで選択された命令のオペランドのアドレスを生成する。
【００７５】
データキャッシュＤＣＭは、例えば、ロード命令の場合、オペランドアドレス生成器ＯＡＧＥＮで生成されたアドレスのデータを更新バッファＥＸＢＵＦ、ＦＰＢＵＦ等に転送する。また、例えば、データキャッシュＤＣＭは、ストア命令の場合、オペランドアドレス生成器ＯＡＧＥＮで生成されたアドレスに、レジスタ等から受信したデータを書き込む。また、データキャッシュＤＣＭは、更新バッファＥＸＢＵＦ、ＦＰＢＵＦ等へのデータ転送が完了した場合、データ転送が完了したことを示すデータ転送完了情報を命令完了制御部ＣＣＴＬに出力する。
【００７６】
リザベーションステーションＲＳＥは、固定小数点演算命令用のリザベーションステーション（ＲＳＥ：Reservation  Station  for  Execution）である。例えば、リザベーションステーションＲＳＥは、命令デコーダＤＥＣでデコードされた固定小数点演算命令を受信する。これにより、リザベーションステーションＲＳＥには、固定小数点演算命令が登録される。そして、リザベーションステーションＲＳＥは、実行可能な状態の固定小数点演算命令をアウトオブオーダで選択する。
【００７７】
演算器ＥＸＵは、固定小数点演算を実行する演算器である。例えば、演算器ＥＸＵは、リザベーションステーションＲＳＥで選択された固定小数点演算命令に基づいて、更新バッファＥＸＢＵＦ、レジスタＥＸＲＥＧ等からデータを受信し、固定小数点演算を実行する。演算結果は、例えば、更新バッファＥＸＢＵＦに転送される。例えば、演算器ＥＸＵは、演算結果を更新バッファＥＸＢＵＦに転送した場合、演算の完了を示す演算完了情報を命令完了制御部ＣＣＴＬに出力する。また、例えば、演算器ＥＸＵは、演算例外が発生した場合、演算例外が発生したことを示す例外情報を命令完了制御部ＣＣＴＬに出力する。
【００７８】
固定小数点更新バッファＥＸＢＵＦは、演算器ＥＸＵから受信した演算結果を記憶する。そして、固定小数点更新バッファＥＸＢＵＦは、記憶した演算結果を、命令完了制御部ＣＣＴＬからの制御に応じて、固定小数点レジスタＥＸＲＥＧに出力する。これにより、演算器ＥＸＵによる演算の結果が固定小数点レジスタＥＸＲＥＧに格納される。
【００７９】
リザベーションステーションＲＳＦは、浮動小数点演算命令用のリザベーションステーション（ＲＳＦ：Reservation  Station  for  Floating  point）である。例えば、リザベーションステーションＲＳＦは、命令デコーダＤＥＣでデコードされた浮動小数点演算命令を受信する。これにより、リザベーションステーションＲＳＦには、浮動小数点演算命令が登録される。そして、リザベーションステーションＲＳＦは、実行可能な状態の浮動小数点演算命令をアウトオブオーダで選択する。
【００８０】
演算器ＦＰＵは、浮動小数点演算を実行する演算器である。例えば、演算器ＦＰＵは、リザベーションステーションＲＳＦで選択された浮動小数点演算命令に基づいて、更新バッファＦＰＢＵＦ、レジスタＦＰＲＥＧ等からデータを受信し、浮動小数点演算を実行する。演算結果は、例えば、更新バッファＦＰＢＵＦに転送される。例えば、演算器ＦＰＵは、演算結果を更新バッファＦＰＢＵＦに転送した場合、演算の完了を示す演算完了情報を命令完了制御部ＣＣＴＬに出力する。また、例えば、演算器ＦＰＵは、演算例外が発生した場合、演算例外が発生したことを示す例外情報を命令完了制御部ＣＣＴＬに出力する。
【００８１】
浮動小数点更新バッファＦＰＢＵＦは、演算器ＦＰＵから受信した演算結果を記憶する。そして、浮動小数点更新バッファＦＰＢＵＦは、記憶した演算結果を、命令完了制御部ＣＣＴＬからの制御に応じて、浮動小数点レジスタＦＰＲＥＧに出力する。これにより、演算器ＦＰＵによる演算の結果が浮動小数点レジスタＦＰＲＥＧに格納される。
【００８２】
分岐制御部ＢＣＴＬは、例えば、リザベーションステーションＲＳＢＲを有する。リザベーションステーションＲＳＢＲは、分岐命令用のリザベーションステーション（ＲＳＢＲ：Reservation  Station  for  BRanch）である。例えば、リザベーションステーションＲＳＢＲは、命令デコーダＤＥＣでデコードされた分岐命令を受信する。これにより、リザベーションステーションＲＳＢＲには、分岐命令が登録される。そして、リザベーションステーションＲＳＢＲは、実行可能な状態の分岐命令をアウトオブオーダで選択する。
【００８３】
例えば、分岐制御部ＢＣＴＬは、リザベーションステーションＲＳＢＲで選択された分岐命令に対する分岐予測機構ＢＲＰＲＥの分岐予測が成功したか否かを判定する。そして、分岐制御部ＢＣＴＬは、分岐予測機構ＢＲＰＲＥの分岐予測が成功したか否かの判定結果に基づいて、ネクストプログラムカウンタＮＰＣの値（次のＰＣ値）等を更新する。また、分岐制御部ＢＣＴＬは、例えば、分岐予測機構ＢＲＰＲＥの分岐予測が成功したか否かの判定が完了した場合、分岐予測機構ＢＲＰＲＥの分岐予測に対する判定が完了したことを示す分岐判定完了情報を命令完了制御部ＣＣＴＬに出力する。
【００８４】
このように、演算部ＯＰおよび分岐制御部ＢＣＴＬは、データ転送、浮動小数点演算、固定小数点演算、分岐処理等をアウトオブオーダで実行する。
【００８５】
命令完了制御部ＣＣＴＬは、図１に示した命令完了制御部ＣＣＴＬと同一または同様である。すなわち、命令完了制御部ＣＣＴＬは、命令を完了させる命令完了処理をデコードされた順に実行する完了制御部の一例である。例えば、命令完了制御部ＣＣＴＬは、図５に示すように、コミットスタックエントリＣＳＥ等を有する。
【００８６】
コミットスタックエントリＣＳＥは、図１に示したコミットスタックエントリＣＳＥと同一または同様である。すなわち、コミットスタックエントリＣＳＥは、デコードされた命令がデコードされた順に登録される保持部の一例である。コミットスタックエントリＣＳＥは、例えば、命令デコーダＤＥＣでデコードされた命令の命令種別、命令の状態（実行待ち、実行中、実行終了等）を示す状態情報、命令結果が格納されるレジスタ番号等を含むエントリ情報を命令識別子毎に保持する。例えば、コミットスタックエントリＣＳＥは、命令のエントリ情報を保持する複数（例えば、６４個）のラッチを有し、エントリ情報を命令識別子毎に保持する。命令完了制御部ＣＣＴＬの詳細は、図５で説明する。
【００８７】
なお、演算処理装置ＰＵの構成は、この例に限定されない。例えば、演算部ＯＰは、複数のオペランドアドレス生成器ＯＡＧＥＮと、複数の演算器ＥＸＵと、複数の演算器ＦＰＵとを有してもよい。また、演算処理装置ＰＵの動作は、例えば、図２および図３に示した動作と同一または同様である。
【００８８】
図５は、図４に示した命令完了制御部ＣＣＴＬの一例を示す。なお、図５では、図を見やすくするために、データキャッシュＤＣＭからのデータ転送完了情報、分岐制御部ＢＣＴＬからの分岐判定完了情報、演算器ＥＸＵからの演算完了情報、例外情報等を受信するモジュールの記載を省略している。例えば、バイパス部ＢＹＰの比較部ＣＭＰ２０および論理積部ＡＮＤ３は、完了情報を出力する各モジュール（データキャッシュＤＣＭ、分岐制御部ＢＣＴＬ、演算器ＥＸＵ、ＦＰＵ等の各モジュール）に対応して設けられる。この場合、論理和部ＯＲ１は、各モジュールに対応して設けられた論理積部ＡＮＤ３の出力と選択部ＳＥＬ１０の出力との論理和結果を出力する。また、例えば、選択部ＳＥＬ２０、ラッチＬＡＴ１０、ＬＡＴ１２、ＬＡＴ２０、ＬＡＴ４０、インバータＩＮＶ１、論理積部ＡＮＤ１、ＡＮＤ２、比較部ＣＭＰ１０は、完了情報および例外情報を出力する各演算器ＥＸＵ、ＦＰＵに対応して設けられる。
【００８９】
図５の例では、命令完了制御部ＣＣＴＬは、命令完了処理を１サイクル中に最大４個の命令に対して実行する。なお、命令完了処理が実行される命令の１サイクル中の最大数は、４個に限定されない。
【００９０】
命令完了制御部ＣＣＴＬは、ポインタ部ＰＴ、加算部ＡＤＤ、ラッチＬＡＴ１０、ＬＡＴ１２、ＬＡＴ２０、ＬＡＴ３０、ＬＡＴ４０、インバータＩＮＶ１、論理積部ＡＮＤ１、ＡＮＤ２、選択部ＳＥＬ１０、ＳＥＬ２０、コミットスタックエントリＣＳＥ、バイパス部ＢＹＰ、比較部ＣＭＰ１０、命令完了処理部ＣＯＭＰＵ１および命令完了部ＣＯＭＰＵ２を有する。また、バイパス部ＢＹＰは、比較部ＣＭＰ２０、論理積部ＡＮＤ３および論理和部ＯＲ１を有する。
【００９１】
命令完了制御部ＣＣＴＬは、ＦＥＤフラグの設定値を示す信号ＦＥＤを状態制御部ＭＣＴＬから受信する。また、命令完了制御部ＣＣＴＬは、演算の完了を示す演算完了信号ＥＣＯＭＰと命令を識別するための命令識別子ＥＩＩＤとを、演算完了情報として演算器ＦＰＵから受信する。例えば、コミットスタックエントリＣＳＥに登録可能な命令数が６４個の場合、命令識別子ＥＩＩＤは、６ビットの信号である。
【００９２】
さらに、命令完了制御部ＣＣＴＬは、オーバーフロー等の例外が演算器ＦＰＵの演算処理により発生した場合、演算例外が発生したことを示す例外情報ＥＸＳＩＧを、演算完了信号ＥＣＯＭＰを受信した次のサイクルで、演算器ＦＰＵから受信する。以下、演算完了信号ＥＣＯＭＰ、命令識別子ＥＩＩＤ、例外情報ＥＸＳＩＧを、信号ＥＣＯＭＰ、ＥＩＩＤ、ＥＸＳＩＧとも称する。
【００９３】
ラッチＬＡＴ１０、ＬＡＴ１２、ＬＡＴ２０、ＬＡＴ３０、ＬＡＴ４０は、受信したデータを保持する。そして、ラッチＬＡＴ１０、ＬＡＴ１２、ＬＡＴ２０、ＬＡＴ３０、ＬＡＴ４０は、保持したデータを、データを受信した次のサイクルで出力する。
【００９４】
例えば、ラッチＬＡＴ１０は、演算完了信号ＥＣＯＭＰおよび命令識別子ＥＩＩＤを演算器ＦＰＵから受信し、演算完了信号ＥＣＯＭＰおよび命令識別子ＥＩＩＤを保持する。そして、ラッチＬＡＴ１０は、信号ＥＣＯＭＰ、ＥＩＩＤを受信した次のサイクルで、信号ＥＣＯＭＰ、ＥＩＩＤを演算完了信号ＥＣＯＭＰ＿ＬＣＨおよび命令識別子ＥＩＩＤ＿ＬＣＨとしてラッチＬＡＴ１２および選択部ＳＥＬ２０に出力する。以下、演算完了信号ＥＣＯＭＰ＿ＬＣＨおよび命令識別子ＥＩＩＤ＿ＬＣＨを信号ＥＣＯＭＰ＿ＬＣＨ、ＥＩＩＤ＿ＬＣＨとも称する。
【００９５】
また、例えば、ラッチＬＡＴ１２は、ラッチＬＡＴ１０から受信した信号ＥＣＯＭＰ＿ＬＣＨ、ＥＩＩＤ＿ＬＣＨを、信号ＥＣＯＭＰ＿ＬＣＨ、ＥＩＩＤ＿ＬＣＨを受信した次のサイクルで、演算完了信号ＥＣＯＭＰ＿ＬＬおよび命令識別子ＥＩＩＤ＿ＬＬとして出力する。例えば、ラッチＬＡＴ１２は、演算完了信号ＥＣＯＭＰ＿ＬＬを論理積部ＡＮＤ２に出力し、命令識別子ＥＩＩＤ＿ＬＬを比較部ＣＭＰ１０およびコミットスタックエントリＣＳＥに出力する。
【００９６】
選択部ＳＥＬ２０は、演算完了信号ＥＣＯＭＰおよび命令識別子ＥＩＩＤを演算器ＦＰＵから受信し、演算完了信号ＥＣＯＭＰ＿ＬＣＨおよび命令識別子ＥＩＩＤ＿ＬＣＨをラッチＬＡＴ１０から受信する。さらに、選択部ＳＥＬ２０は、信号ＦＥＤを状態制御部ＭＣＴＬから受信する。そして、選択部ＳＥＬ２０は、信号ＥＣＯＭＰ、ＥＩＩＤの組と信号ＥＣＯＭＰ＿ＬＣＨ、ＥＩＩＤ＿ＬＣＨの組とのいずれかを信号ＦＥＤに基づいて選択し、選択した信号を信号ＥＣＯＭＰａ、ＥＩＩＤａとして、コミットスタックエントリＣＳＥに出力する。
【００９７】
例えば、選択部ＳＥＬ２０は、信号ＦＥＤが論理値”１”の場合、演算器ＦＰＵから受信した演算完了信号ＥＣＯＭＰおよび命令識別子ＥＩＩＤを、信号ＥＣＯＭＰａ、ＥＩＩＤａとしてコミットスタックエントリＣＳＥに出力する。また、例えば、選択部ＳＥＬ２０は、信号ＦＥＤが論理値”０”の場合、ラッチＬＡＴ１０から受信した演算完了信号ＥＣＯＭＰ＿ＬＣＨおよび命令識別子ＥＩＩＤ＿ＬＣＨを、信号ＥＣＯＭＰａ、ＥＩＩＤａとしてコミットスタックエントリＣＳＥに出力する。以下、信号ＥＣＯＭＰａを演算完了信号ＥＣＯＭＰａとも称し、信号ＥＩＩＤａを命令識別子ＥＩＩＤａとも称する。
【００９８】
コミットスタックエントリＣＳＥは、選択部ＳＥＬ２０から受信した演算完了信号ＥＣＯＭＰａおよび命令識別子ＥＩＩＤａに基づいて、命令識別子ＥＩＩＤａに対応する命令のエントリ情報を更新する。例えば、コミットスタックエントリＣＳＥは、命令識別子ＥＩＩＤａに対応する命令のエントリ情報のうちの状態情報を、演算完了信号ＥＣＯＭＰａの情報（演算の完了）に設定する。
【００９９】
また、コミットスタックエントリＣＳＥは、例外情報ＥＸＳＩＧ＿ＬＣＨおよび命令識別子ＥＩＩＤ＿ＬＬをラッチＬＡＴ２０、ＬＡＴ１２からそれぞれ受信した場合、命令識別子ＥＩＩＤ＿ＬＬに対応する命令のエントリ情報を更新する。例えば、コミットスタックエントリＣＳＥは、命令識別子ＥＩＩＤ＿ＬＬに対応する命令のエントリ情報のうちの状態情報を、例外情報ＥＸＳＩＧ＿ＬＣＨの内容（演算例外の発生）に設定する。
【０１００】
例外情報ＥＸＳＩＧ＿ＬＣＨは、演算器ＦＰＵから論理積部ＡＮＤ１、ラッチＬＡＴ２０を介してコミットスタックエントリＣＳＥに転送された例外情報ＥＸＳＩＧに対応する。なお、信号ＦＥＤが論理値”１”の場合、例外情報ＥＸＳＩＧ＿ＬＣＨは、論理積部ＡＮＤ１が例外情報ＥＸＳＩＧを受信したか否かに拘わらず、論理値”０”である。
【０１０１】
例えば、インバータＩＮＶ１は、信号ＦＥＤを状態制御部ＭＣＴＬから受信し、信号ＦＥＤの反転信号を論理積部ＡＮＤ１に出力する。論理積部ＡＮＤ１は、例外情報ＥＸＳＩＧを演算器ＦＰＵから受信し、信号ＦＥＤの反転信号をインバータＩＮＶ１から受信する。そして、論理積部ＡＮＤ１は、例外情報ＥＸＳＩＧと信号ＦＥＤの反転信号との論理積結果をラッチＬＡＴ２０に出力する。
【０１０２】
ラッチＬＡＴ２０は、論理積部ＡＮＤ１から受信した論理積結果（例外情報ＥＸＳＩＧと信号ＦＥＤの反転信号との論理積結果）を、論理積結果を受信した次のサイクルで、例外情報ＥＸＳＩＧ＿ＬＣＨとして出力する。例えば、ラッチＬＡＴ２０は、例外情報ＥＸＳＩＧ＿ＬＣＨをコミットスタックエントリＣＳＥおよび論理積部ＡＮＤ２に出力する。
【０１０３】
ここで、演算器ＦＰＵは、例えば、演算例外が発生した場合、演算完了信号ＥＣＯＭＰおよび命令識別子ＥＩＩＤを出力した次のサイクルに、演算例外が発生したことを示す例外情報ＥＸＳＩＧを命令完了制御部ＣＣＴＬに出力する。このため、コミットスタックエントリＣＳＥは、演算例外が発生した場合、例外情報ＥＸＳＩＧ＿ＬＣＨを、命令識別子ＥＩＩＤ＿ＬＬを受信したサイクルと同じサイクルに受信する。
【０１０４】
コミットスタックエントリＣＳＥに登録された命令のエントリ情報は、ポインタＰＴＲ１、ＰＴＲ２、ＰＴＲ３、ＰＴＲ４に基づいて、読み出される。なお、ポインタＰＴＲ１、ＰＴＲ２、ＰＴＲ３、ＰＴＲ４は、ポインタＰＴＲｍ１、ＰＴＲｍ２、ＰＴＲｍ３、ＰＴＲｍ４に基づいて生成される。
【０１０５】
ポインタＰＴＲｍ１は、コミットスタックエントリＣＳＥに登録されている有効な命令（命令完了処理が実行されていない命令）の中で最も古い命令識別子の番号を示すポインタ信号である。すなわち、ポインタＰＴＲｍ１は、キューの先頭（ＴＯＱ：Top Of Queue）を示すポインタ信号である。ポインタＰＴＲｍ２、ＰＴＲｍ３、ＰＴＲｍ４は、コミットスタックエントリＣＳＥに登録されている有効な命令の中で、それぞれ２番目、３番目、４番目に古い命令識別子の番号を示すポインタ信号である。
【０１０６】
例えば、コミットスタックエントリＣＳＥに登録可能な命令数が６４個の場合、各ポインタＰＴＲｍ（ＰＴＲｍ１−ＰＴＲｍ４）、ＰＴＲ（ＰＴＲ１−ＰＴＲ４）は、６ビットの信号である。各ポインタＰＴＲｍは、例えば、命令完了処理が実行される度にカウントアップする。
【０１０７】
例えば、ポインタ部ＰＴは、ポインタＰＴＲｍ１−ＰＴＲｍ４を保持し、保持したポインタＰＴＲｍ１−ＰＴＲｍ４を加算部ＡＤＤに出力する。
【０１０８】
加算部ＡＤＤは、ポインタＰＴＲｍ１−ＰＴＲｍ４をポインタ部ＰＴから受信し、信号ＣＯＭＭＩＴ１、ＣＯＭＭＩＴ２、ＣＯＭＭＩＴ３、ＣＯＭＭＩＴ４を命令完了処理部ＣＯＭＰＵ１から受信する。そして、加算部ＡＤＤは、ポインタ部ＰＴから受信したポインタＰＴＲｍ１−ＰＴＲｍ４を、命令完了処理部ＣＯＭＰＵ１から受信した信号ＣＯＭＭＩＴ１−ＣＯＭＭＩＴ４に応じてカウントアップする。なお、信号ＣＯＭＭＩＴ１−ＣＯＭＭＩＴ４は、例えば、命令完了部ＣＯＭＰＵ２に命令完了処理を実行させるための信号である。
【０１０９】
例えば、加算部ＡＤＤは、信号ＣＯＭＭＩＴ１のみが論理値”１”の場合、１個の命令が完了するため、ポインタ部ＰＴから受信したポインタＰＴＲｍ１−ＰＴＲｍ４の値に１をそれぞれ加算する。また、例えば、加算部ＡＤＤは、信号ＣＯＭＭＩＴ１−ＣＯＭＭＩＴ４の全てが論理値”１”の場合、４個の命令が完了するため、ポインタ部ＰＴから受信したポインタＰＴＲｍ１−ＰＴＲｍ４の値に４をそれぞれ加算する。
【０１１０】
そして、加算部ＡＤＤは、信号ＣＯＭＭＩＴ１−ＣＯＭＭＩＴ４に応じてカウントアップしたポインタＰＴＲｍ１−ＰＴＲｍ４を、ポインタＰＴＲ１−ＰＴＲ４として、ポインタ部ＰＴ、選択部ＳＥＬ１０、比較部ＣＭＰ１０、ＣＭＰ２０に出力する。例えば、ポインタ部ＰＴは、加算部ＡＤＤから受信したポインタＰＴＲ１−ＰＴＲ４を、ポインタＰＴＲｍ１−ＰＴＲｍ４として保持する。
【０１１１】
なお、コミットスタックエントリＣＳＥに登録可能な命令数が６４個の場合、例えば、ポインタＰＴＲｍ１−ＰＴＲｍ４、ＰＴＲ１−ＰＴＲ４に設定される数値の上限は、６３である。このため、加算部ＡＤＤは、加算後のポインタＰＴＲ１−ＰＴＲ４の値が６３を超える場合、０に戻って計算する。例えば、ポインタＰＴＲｍ１の値が６２で、信号ＣＯＭＭＩＴ１のみが論理値”１”の場合、ポインタＰＴＲ１、ＰＴＲ２、ＰＴＲ３、ＰＴＲ４の値は、それぞれ６３、０、１、２である。
【０１１２】
選択部ＳＥＬ１０は、図１に示した選択部ＳＥＬ１０と同一または同様である。すなわち、選択部ＳＥＬ１０は、命令完了処理の対象となる命令を、デコードされた順に保持部（例えば、コミットスタックエントリＣＳＥ）から読み出す選択部の一例である。例えば、選択部ＳＥＬ１０は、コミットスタックエントリＣＳＥからエントリ情報を読み出す際の読み出しポインタとして、ポインタＰＴＲ１−ＰＴＲ４を加算部ＡＤＤから受信する。そして、選択部ＳＥＬ１０は、コミットスタックエントリＣＳＥに命令識別子毎に登録されているエントリ情報から、ポインタＰＴＲ１−ＰＴＲ４が示す番号の命令識別子のエントリ情報を読み出す。
【０１１３】
例えば、選択部ＳＥＬ１０は、コミットスタックエントリＣＳＥから読み出したエントリ情報のうちの信号ＥＣＯＭＰｃ１、ＥＣＯＭＰｃ２、ＥＣＯＭＰｃ３、ＥＣＯＭＰｃ４を、バイパス部ＢＹＰの論理和部ＯＲ１に出力する。なお、信号ＥＣＯＭＰｃ１−ＥＣＯＭＰｃ４は、ポインタＰＴＲ１−ＰＴＲ４が示す命令のエントリ情報のうちの状態情報に設定された演算完了信号ＥＣＯＭＰの情報を示す信号である。
【０１１４】
また、例えば、選択部ＳＥＬ１０は、コミットスタックエントリＣＳＥから読み出したエントリ情報のうちの信号ＴＲＡＰｓ１、ＴＲＡＰｓ２、ＴＲＡＰｓ３、ＴＲＡＰｓ４をラッチＬＡＴ３０に出力する。なお、信号ＴＲＡＰｓ１−ＴＲＡＰｓ４は、ポインタＰＴＲ１−ＰＴＲ４が示す命令のエントリ情報のうちの状態情報に設定された例外情報ＥＸＳＩＧ＿ＬＣＨの内容を示す信号である。これにより、ポインタＰＴＲ１−ＰＴＲ４が示す命令の例外情報ＥＸＳＩＧ＿ＬＣＨの内容（信号ＴＲＡＰｓ１−ＴＲＡＰｓ４）がラッチＬＡＴ３０に設定される。
【０１１５】
ここで、バイパス部ＢＹＰについて説明する。バイパス部ＢＹＰは、図１に示したバイパス部ＢＹＰと同一または同様である。すなわち、バイパス部ＢＹＰは、演算の完了を示すバイパス情報を生成するバイパス部の一例である。例えば、バイパス部ＢＹＰの比較部ＣＭＰ２０は、命令識別子ＥＩＩＤを演算器ＦＰＵから受信し、ポインタＰＴＲ１−ＰＴＲ４を加算部ＡＤＤから受信する。そして、比較部ＣＭＰ２０は、命令識別子ＥＩＩＤと各ポインタＰＴＲ１−ＰＴＲ４とを比較し、比較結果を論理積部ＡＮＤ３に出力する。
【０１１６】
例えば、比較部ＣＭＰ２０は、命令識別子ＥＩＩＤとポインタＰＴＲ１とが一致している場合、命令識別子ＥＩＩＤとポインタＰＴＲ１とが一致していることを示す比較結果（論理値”１”の信号）を論理積部ＡＮＤ３に出力する。さらに、比較部ＣＭＰ２０は、命令識別子ＥＩＩＤと各ポインタＰＴＲ２−ＰＴＲ３とが一致していないことを示す比較結果（論理値”０”の信号）を論理積部ＡＮＤ３に出力する。
【０１１７】
論理積部ＡＮＤ３は、命令識別子ＥＩＩＤと各ポインタＰＴＲ１−ＰＴＲ４との比較結果、演算完了信号ＥＣＯＭＰおよび信号ＦＥＤを、比較部ＣＭＰ２０、演算器ＦＰＵおよび状態制御部ＭＣＴＬからそれぞれ受信する。そして、論理積部ＡＮＤ３は、受信した信号の論理積結果を、バイパス情報ＥＣＯＭＰｗ１、ＥＣＯＭＰｗ２、ＥＣＯＭＰｗ３、ＥＣＯＭＰｗ４として論理和部ＯＲ１に出力する。
【０１１８】
例えば、論理積部ＡＮＤ３は、命令識別子ＥＩＩＤとポインタＰＴＲ１との比較結果、演算完了信号ＥＣＯＭＰおよび信号ＦＥＤの３つの信号の論理積結果を、バイパス情報ＥＣＯＭＰｗ１として論理和部ＯＲ１に出力する。また、例えば、論理積部ＡＮＤ３は、命令識別子ＥＩＩＤとポインタＰＴＲ２との比較結果、演算完了信号ＥＣＯＭＰおよび信号ＦＥＤの３つの信号の論理積結果を、バイパス情報ＥＣＯＭＰｗ２として論理和部ＯＲ１に出力する。
【０１１９】
また、例えば、論理積部ＡＮＤ３は、命令識別子ＥＩＩＤとポインタＰＴＲ３との比較結果、演算完了信号ＥＣＯＭＰおよび信号ＦＥＤの３つの信号の論理積結果を、バイパス情報ＥＣＯＭＰｗ３として論理和部ＯＲ１に出力する。また、例えば、論理積部ＡＮＤ３は、命令識別子ＥＩＩＤとポインタＰＴＲ４との比較結果、演算完了信号ＥＣＯＭＰおよび信号ＦＥＤの３つの信号の論理積結果を、バイパス情報ＥＣＯＭＰｗ４として論理和部ＯＲ１に出力する。
【０１２０】
このように、演算の完了を示すバイパス情報ＥＣＯＭＰｗ（例えば、論理値”１”の信号）は、演算完了信号ＥＣＯＭＰに対応する命令識別子ＥＩＩＤとポインタＰＴＲとが一致し、かつ、信号ＦＥＤが論理値”１”の場合、生成される。すなわち、バイパス部ＢＹＰは、演算処理により発生する例外の検出が抑止され、かつ、演算器ＦＰＵから出力された演算完了情報が示す命令と命令完了処理の対象となる命令とが一致している場合、演算の完了を示すバイパス情報ＥＣＯＭＰｗを生成する。以下、バイパス情報ＥＣＯＭＰｗ１−ＥＣＯＭＰｗ４を信号ＥＣＯＭＰｗ１−ＥＣＯＭＰｗ４とも称する。
【０１２１】
論理和部ＯＲ１は、信号ＥＣＯＭＰｗ１−ＥＣＯＭＰｗ４を論理積部ＡＮＤ３から受信し、信号ＥＣＯＭＰｃ１−ＥＣＯＭＰｃ４を選択部ＳＥＬ１０から受信する。そして、論理和部ＯＲ１は、信号ＥＣＯＭＰｗ１−ＥＣＯＭＰｗ４と信号ＥＣＯＭＰｃ１−ＥＣＯＭＰｃ４とのそれぞれの論理和結果を、信号ＥＣＯＭＰｓ１、ＥＣＯＭＰｓ２、ＥＣＯＭＰｓ３、ＥＣＯＭＰｓ４としてラッチＬＡＴ３０に出力する。
【０１２２】
これにより、ポインタＰＴＲ１−ＰＴＲ４が示す命令の状態に関する情報（信号ＥＣＯＭＰｓ１−ＥＣＯＭＰｓ４）がラッチＬＡＴ３０に設定される。以下、信号ＥＣＯＭＰｓ１−ＥＣＯＭＰｓ４を演算完了信号ＥＣＯＭＰｓ１−ＥＣＯＭＰｓ４とも称する。
【０１２３】
なお、例えば、信号ＥＣＯＭＰｓ１は、信号ＥＣＯＭＰｗ１、ＥＣＯＭＰｃ１の論理和結果であり、信号ＥＣＯＭＰｓ２は、信号ＥＣＯＭＰｗ２、ＥＣＯＭＰｃ２の論理和結果である。また、例えば、信号ＥＣＯＭＰｓ３は、信号ＥＣＯＭＰｗ３、ＥＣＯＭＰｃ３の論理和結果であり、信号ＥＣＯＭＰｓ４は、信号ＥＣＯＭＰｗ４、ＥＣＯＭＰｃ４の論理和結果である。
【０１２４】
このように、演算例外の検出が抑止され、かつ、命令識別子ＥＩＩＤがポインタＰＴＲ１−ＰＴＲ４のいずれかに一致している場合、命令識別子ＥＩＩＤが示す命令の演算完了信号ＥＣＯＭＰｓとして、演算完了信号ＥＣＯＭＰがラッチＬＡＴ３０に転送される。すなわち、命令完了処理の対象の命令に関する演算完了信号ＥＣＯＭＰがコミットスタックエントリＣＳＥを介さずにラッチＬＡＴ３０に転送される。このため、命令完了制御部ＣＣＴＬは、命令完了処理の対象の命令に関する演算完了信号ＥＣＯＭＰを受信してから演算完了信号ＥＣＯＭＰの情報をラッチＬＡＴ３０に設定するまでの時間を短縮できる。
【０１２５】
例えば、ラッチＬＡＴ３０は、バイパス部ＢＹＰの論理和部ＯＲ１から受信した信号ＥＣＯＭＰｓ１−ＥＣＯＭＰｓ４を保持する。そして、ラッチＬＡＴ３０は、保持した信号ＥＣＯＭＰｓ１−ＥＣＯＭＰｓ４を、信号ＥＣＯＭＰｓ１−ＥＣＯＭＰｓ４を受信した次のサイクルで、信号ＥＣＯＭＰｓｌ１、ＥＣＯＭＰｓｌ２、ＥＣＯＭＰｓｌ３、ＥＣＯＭＰｓｌ４として命令完了部ＣＯＭＰＵ１に出力する。
【０１２６】
また、例えば、ラッチＬＡＴ３０は、選択部ＳＥＬ１０から受信した信号ＴＲＡＰｓ１−ＴＲＡＰｓ４を保持する。そして、ラッチＬＡＴ３０は、保持した信号ＴＲＡＰｓ１−ＴＲＡＰｓ４を、信号ＴＲＡＰｓ１−ＴＲＡＰｓ４を受信した次のサイクルで、信号ＴＲＡＰｓｌ１、ＴＲＡＰｓｌ２、ＴＲＡＰｓｌ３、ＴＲＡＰｓｌ４として命令完了部ＣＯＭＰＵ２に出力する。
【０１２７】
なお、命令完了部ＣＯＭＰＵ１は、ラッチＬＡＴ３０から出力された信号ＥＣＯＭＰｓｌ１−ＥＣＯＭＰｓｌ４の他に、命令完了処理の実行を抑止する信号ＩＮＨをラッチＬＡＴ４０から受信する。信号ＩＮＨは、例えば、演算例外の検出が抑止されず、かつ、命令完了処理の対象となる命令のいずれかで演算例外が発生した場合に生成される。
【０１２８】
例えば、比較部ＣＭＰ１０は、命令識別子ＥＩＩＤ＿ＬＬおよびポインタＰＴＲ１−ＰＴＲ４をラッチＬＡＴ１２および加算部ＡＤＤから受信し、命令識別子ＥＩＩＤ＿ＬＬと各ポインタＰＴＲ１−ＰＴＲ４とを比較する。そして、比較部ＣＭＰ１０は、例えば、命令識別子ＥＩＩＤ＿ＬＬがポインタＰＴＲ１−ＰＴＲ４のいずれかと一致している場合、比較結果として、論理値”１”の信号を論理積部ＡＮＤ２に出力する。また、例えば、比較部ＣＭＰ１０は、命令識別子ＥＩＩＤ＿ＬＬがポインタＰＴＲ１−ＰＴＲ４のいずれにも一致していない場合、比較結果として、論理値”０”の信号を論理積部ＡＮＤ２に出力する。
【０１２９】
論理積部ＡＮＤ２は、例えば、比較部ＣＭＰ１０による比較結果、ラッチＬＡＴ１２に保持された演算完了信号ＥＣＯＭＰ＿ＬＬおよびラッチＬＡＴ２０に保持された例外情報ＥＸＳＩＧ＿ＬＣＨを受信する。そして、論理積部ＡＮＤ２は、比較部ＣＭＰ１０による比較結果、演算完了信号ＥＣＯＭＰ＿ＬＬおよび例外情報ＥＸＳＩＧ＿ＬＣＨの３つの信号の論理積結果を、ラッチＬＡＴ４０に出力する。ラッチＬＡＴ４０は、論理積部ＡＮＤ２による論理積結果を、論理積結果を受信した次のサイクルで、信号ＩＮＨとして命令完了処理部ＣＯＭＰＵ１に出力する。
【０１３０】
命令完了処理部ＣＯＭＰＵ１および命令完了部ＣＯＭＰＵ２は、完了処理部の一例である。例えば、命令完了処理部ＣＯＭＰＵ１は、信号ＥＣＯＭＰｓｌ１−ＥＣＯＭＰｓｌ４をラッチＬＡＴ３０から受信し、命令完了処理の実行を抑止する信号ＩＮＨをラッチＬＡＴ４０から受信する。
【０１３１】
そして、命令完了処理部ＣＯＭＰＵ１は、信号ＥＣＯＭＰｓｌ１−ＥＣＯＭＰｓｌ４、ＩＮＨに基づいて、信号ＣＯＭＭＩＴ１−ＣＯＭＭＩＴ４を生成する。例えば、命令完了処理部ＣＯＭＰＵ１は、命令完了処理の実行を抑止する信号ＩＮＨを受信した場合やパイプラインフラッシュが実行された場合、命令完了処理を実行させるための信号ＣＯＭＭＩＴ１−ＣＯＭＭＩＴ４の生成を抑止する。
【０１３２】
例えば、信号ＩＮＨが論理値”０”のサイクルでは、命令完了処理部ＣＯＭＰＵ１は、命令完了処理を実行させるための信号ＣＯＭＭＩＴ１−ＣＯＭＭＩＴ４（例えば、論理値”１”の信号）を命令完了部ＣＯＭＰＵ２に出力することを抑止する。
【０１３３】
例えば、論理値”１”の信号ＣＯＭＭＩＴが命令完了処理の実行を指示している場合、命令完了処理部ＣＯＭＰＵ１は、信号ＩＮＨが論理値”１”のサイクルでは、信号ＣＯＭＭＩＴ１−ＣＯＭＭＩＴ４を論理値”０”に設定する。また、例えば、信号ＩＮＨが論理値”０”のサイクルでは、命令完了処理部ＣＯＭＰＵ１は、論理値”１”の信号ＣＯＭＭＩＴ１−ＣＯＭＭＩＴ４を、論理値”１”の信号ＥＣＯＭＰｓｌ１−ＥＣＯＭＰｓｌ４の受信に応じて、命令完了部ＣＯＭＰＵ２に出力する。
【０１３４】
なお、例えば、信号ＩＮＨが論理値”０”のサイクルにおいて、信号ＣＯＭＭＩＴ１が論理値”１”に設定される条件は、信号ＥＣＯＭＰｓｌ１が論理値”１”の場合である。また、信号ＣＯＭＭＩＴ２が論理値”１”に設定される条件は、信号ＣＯＭＭＩＴ１および信号ＥＣＯＭＰｓｌ２が論理値”１”の場合である。信号ＣＯＭＭＩＴ３が論理値”１”に設定される条件は、信号ＣＯＭＭＩＴ２および信号ＥＣＯＭＰｓｌ３が論理値”１”の場合である。信号ＣＯＭＭＩＴ４が論理値”１”に設定される条件は、信号ＣＯＭＭＩＴ３および信号ＥＣＯＭＰｓｌ４が論理値”１”の場合である。以下、各信号ＣＯＭＭＩＴ１−ＣＯＭＭＩＴ４が論理値”１”に設定される条件を完了条件とも称する。
【０１３５】
命令完了部ＣＯＭＰＵ２は、信号ＣＯＭＭＩＴ１−ＣＯＭＭＩＴ４を命令完了処理部ＣＯＭＰＵ１から受信し、信号ＴＲＡＰｓｌ１−ＴＲＡＰｓｌ４をラッチＬＡＴ３０から受信する。そして、命令完了部ＣＯＭＰＵ２は、信号ＣＯＭＭＩＴ１−ＣＯＭＭＩＴ４や信号ＴＲＡＰｓｌ１−ＴＲＡＰｓｌ４に基づいて、命令完了処理や例外処理を実行する。
【０１３６】
例えば、命令完了部ＣＯＭＰＵ２は、論理値”１”の信号ＣＯＭＭＩＴ１−ＣＯＭＭＩＴ４を受信した場合、浮動小数点レジスタＦＰＲＥＧへの演算結果の書き込みを実行させる制御信号を、浮動小数点更新バッファＦＰＢＵＦ等に出力する。また、例えば、命令完了部ＣＯＭＰＵ２は、論理値”１”の信号ＣＯＭＭＩＴ１−ＣＯＭＭＩＴ４を受信した場合、ＰＣ値および次のＰＣ値の更新等を実行させる制御信号を、状態制御部ＭＣＴＬに出力する。
【０１３７】
このように、命令完了部ＣＯＭＰＵ２は、バイパス情報ＥＣＯＭＰｗ１−ＥＣＯＭＰｗ４、信号ＥＣＯＭＰｃ１−ＥＣＯＭＰｃ４等に基づいて生成される信号ＣＯＭＭＩＴ１−ＣＯＭＭＩＴ４に基づいて、命令完了処理を実行する。すなわち、命令完了部ＣＯＭＰＵ２は、バイパス情報ＥＣＯＭＰｗおよび選択部ＳＥＬ１０によりコミットスタックエントリＣＳＥから読み出された命令の状態情報（信号ＥＣＯＭＰｃ）に基づいて、命令完了処理を実行する。
【０１３８】
例えば、演算の完了を示すバイパス情報ＥＣＯＭＰｗ１が生成された場合、信号ＣＯＭＭＩＴ１は、演算の完了を示すバイパス情報ＥＣＯＭＰｗ１に対応する信号である。また、例えば、演算の完了を示すバイパス情報ＥＣＯＭＰｗ１が生成されていない場合、信号ＣＯＭＭＩＴ１は、信号ＥＣＯＭＰｃ１に対応する信号である。
【０１３９】
したがって、命令完了部ＣＯＭＰＵ２は、例えば、演算の完了を示すバイパス情報ＥＣＯＭＰｗ１が生成された命令に対してはバイパス情報ＥＣＯＭＰｗ１に基づいて命令完了処理を実行する。また、例えば、命令完了部ＣＯＭＰＵ２は、演算の完了を示すバイパス情報ＥＣＯＭＰｗ１が生成されていない命令に対してはコミットスタックエントリＣＳＥから読み出された信号ＥＣＯＭＰｃ１に基づいて命令完了処理を実行する。
【０１４０】
なお、例えば、図１に示した完了処理部ＣＯＭＰＵは、ラッチＬＡＴ３０、命令完了処理部ＣＯＭＰＵ１、命令完了部ＣＯＭＰＵ２等を含むモジュールに対応する。また、命令完了制御部ＣＣＴＬの構成は、この例に限定されない。
【０１４１】
図６は、図４に示した演算処理装置ＰＵのパイプライン処理の一例を示す。例えば、演算処理装置ＰＵは、デコードステージＤ、プライオリティステージＰ、バッファステージＢ、演算実行ステージＸ、レジスタ更新ステージＵおよびレジスタ書き込みステージＷを含むパイプライン処理を実行する。
【０１４２】
デコードステージＤでは、命令デコーダＤＥＣは、命令キャシュＣＣＭから受信した命令を、インオーダでデコードする。そして、命令デコーダＤＥＣは、デコードした命令を命令識別子とともに、命令完了制御部ＣＣＴＬのコミットスタックエントリＣＳＥに命令順にインオーダで登録する。さらに、命令デコーダＤＥＣは、デコードした命令を、命令種別に基づいて、リザベーションステーションＲＳＡ、ＲＳＥ、ＲＳＦ、ＲＳＢＲに登録する。
【０１４３】
プライオリティステージＰでは、各リザベーションステーションＲＳＡ、ＲＳＥ、ＲＳＦ、ＲＳＢＲは、実行可能な状態の命令を選択する。バッファステージＢでは、演算器ＥＸＵ、ＦＰＵ等のモジュールは、プライオリティステージＰで選択された命令で使用するデータ等をレジスタ(例えば、レジスタＥＸＲＥＧ、ＦＰＲＥＧ等）から読み出す。
【０１４４】
演算実行ステージＸでは、演算器ＥＸＵ、ＦＰＵ等のモジュールは、バッファステージＢでレジスタから読み出したデータ等を用いて、プライオリティステージＰで選択された命令を実行する。
【０１４５】
レジスタ更新ステージＵでは、演算器ＥＸＵ、ＦＰＵ等のモジュールは、演算結果を更新バッファ（例えば、更新バッファＥＸＢＵＦ、ＦＰＢＵＦ等）に格納する。また、演算器ＥＸＵ、ＦＰＵは、演算の完了を示す演算完了情報（例えば、演算完了信号ＥＣＯＭＰ、命令識別子ＥＩＩＤ）を命令完了制御部ＣＣＴＬに出力する。なお、例えば、演算例外が発生した場合、演算器ＥＸＵ、ＦＰＵは、演算例外が発生したことを示す例外情報ＥＸＳＩＧを命令完了制御部ＣＣＴＬに出力する。
【０１４６】
また、例えば、データキャッシュＤＣＭは、データ転送が完了したことを示すデータ転送完了情報を命令完了制御部ＣＣＴＬに出力する。また、例えば、分岐制御部ＢＣＴＬは、分岐予測機構ＢＲＰＲＥの分岐予測に対する判定が完了したことを示す分岐判定完了情報を命令完了制御部ＣＣＴＬに出力する。そして、命令完了制御部ＣＣＴＬは、演算完了信号ＥＣＯＭＰ等の各完了情報に基づいて、インオーダで命令完了処理を実行する。
【０１４７】
レジスタ書き込みステージＷでは、更新バッファ（例えば、更新バッファＥＸＢＵＦ、ＦＰＢＵＦ等）は、演算結果等をレジスタ(例えば、レジスタＥＸＲＥＧ、ＦＰＲＥＧ等）に書き込む。また、状態制御部ＭＣＴＬは、ＰＣ値、次のＰＣ値等を更新する。なお、演算処理装置ＰＵのパイプライン処理は、この例に限定されない。
【０１４８】
図７は、スーパースカラ方式によるアウトオブオーダ実行の一例を示す。なお、図７の例では、演算処理装置ＰＵは、最大４個の命令を並列に実行する。例えば、命令デコーダＤＥＣは、命令キャッシュＣＣＭから複数の命令をインオーダーで取得（フェッチ）し、取得した複数の命令をインオーダでデコードする。そして、演算部ＯＰや分岐制御部ＢＣＴＬは、命令デコーダＤＥＣでデコードされた複数の命令をアウトオブオーダで実行する。最後に、命令完了制御部ＣＣＴＬ等は、演算等が完了した命令に対するコミット処理（命令完了処理）をインオーダで実行する。コミット処理がインオーダで実行されるため、アウトオブオーダで実行された命令は、コミット処理が実行されるまで、待たされる場合がある（図７のコミット待ち）。このように、演算処理装置ＰＵは、複数の命令をアウトオブオーダで実行した場合にも、コミット処理をインオーダで実行する。
【０１４９】
図８は、図５に示した命令完了制御部ＣＣＴＬの動作の一例を示す。なお、図８は、演算例外の検出が抑止され（ＦＥＤ＝１）、かつ、演算例外が発生した場合の命令完了制御部ＣＣＴＬの動作の一例を示す。なお、図８の動作では、信号ＦＥＤが論理値”１”であるため、論理値”１”の例外情報ＥＸＳＩＧを命令完了制御部ＣＣＴＬがサイクル５で受信した場合でも、例外情報ＥＸＳＩＧ＿ＬＣＨは、論理値”０”に維持される。このため、信号ＩＮＨは、論理値”０”に維持される。
【０１５０】
図のＦＡＤＤ（ＩＩＤ＝１２）は、値”１２”の命令識別子（ＩＩＤ＝１２）に対応する命令に基づく浮動小数点加算のパイプラインステージを示す。例えば、サイクル４は、浮動小数点加算の最後の演算実行ステージＸに対応する。
【０１５１】
サイクル４では、命令完了制御部ＣＣＴＬは、論理値”１”の演算完了信号ＥＣＯＭＰおよび値”１２”の命令識別子ＥＩＩＤを演算器ＦＰＵから受信する。なお、値”１２”の命令識別子ＥＩＩＤは、演算完了信号ＥＣＯＭＰに対応する命令の識別子である。信号ＦＥＤが論理値”１”で、かつ、ポインタＰＴＲ１の値と命令識別子ＥＩＩＤの値とがともに１２であるため、信号ＥＣＯＭＰｗ１は、演算完了信号ＥＣＯＭＰの論理値”１”と同じ論理値”１”に変化する。そして、信号ＥＣＯＭＰｗ１が論理値”１”に変化したことにより、信号ＥＣＯＭＰｓ１が論理値”１”に変化する。
【０１５２】
これにより、論理値”１”の信号ＥＣＯＭＰｓ１がラッチＬＡＴ３０に保持される。また、サイクル４では、コミットスタックエントリＣＳＥに登録されている命令のうち、値”１２”の命令識別子ＥＩＩＤに対応する命令の状態情報に、演算完了信号ＥＣＯＭＰの情報（演算の完了）が設定される。
【０１５３】
サイクル５では、サイクル４で論理値”１”の信号ＥＣＯＭＰｓ１がラッチＬＡＴ３０に保持されたため、ラッチＬＡＴ３０の出力信号である信号ＥＣＯＭＰｓｌ１が論理値”１”に変化する。信号ＥＣＯＭＰｓｌ１が論理値”１”で、信号ＩＮＨが論理値”０”であるため、信号ＣＯＭＭＩＴ１が論理値”１”に変化する。
【０１５４】
また、例えば、信号ＣＯＭＭＩＴ２−ＣＯＭＩＴ４は、図５で説明したそれぞれの完了条件を満たしている場合、論理値”１”に変化する。例えば、サイクル４で論理値”１”の信号ＥＣＯＭＰｃ２−ＥＣＯＭＰｃ４がコミットスタックエントリＣＳＥから読み出された場合、信号ＣＯＭＭＩＴ２−ＣＯＭＩＴ４もサイクル５で論理値”１”に変化する。信号ＣＯＭＭＩＴ１−ＣＯＭＩＴ４が論理値”１”に変化するため、ポインタＰＴＲ１の値は１６（＝１２＋４）に変化する。これにより、値”１６”のポインタＰＴＲ１が、ポインタ部ＰＴに保持される。
【０１５５】
サイクル６では、ポインタＰＴＲ１ｍの値は、サイクル５でポインタ部ＰＴに保持されたポインタＰＴＲ１の値である１６に変化する。
【０１５６】
このように、命令完了制御部ＣＣＴＬは、例えば、信号ＦＥＤが論理値”１”で、かつ、命令識別子ＥＩＩＤの値がポインタＰＴＲ１の値と同じ場合、レジスタ更新ステージＵを１サイクルで実行できる。これに対し、例えば、バイパス情報ＥＣＯＭＰｗ１−ＥＣＯＭＰｗ４が生成されない構成では、図１２に示すように、レジスタ更新ステージＵを２サイクルで実行する。
【０１５７】
すなわち、図８の動作では、バイパス情報ＥＣＯＭＰｗ１−ＥＣＯＭＰｗ４が生成されない構成の動作（例えば、図１２の動作）に比べて、命令完了処理を１サイクル早く開始できる。このため、演算処理装置ＰＵの性能が向上する。例えば、信号ＣＯＭＭＩＴ２−ＣＯＭＩＴ４の完了条件が満たされている場合、演算処理装置ＰＵは、ポインタＰＴＲ２−ＰＴＲ４が示す命令（ポインタＰＴＲ１が示す命令の後続の命令）も、ポインタＰＴＲ１が示す命令と同じサイクルで命令完了処理を開始できる。すなわち、演算処理装置ＰＵは、バイパス情報ＥＣＯＭＰｗ１−ＥＣＯＭＰｗ４が生成されない構成の動作（例えば、図１２の動作）に比べて、後続の命令に対する命令完了処理も１サイクル早く開始できる。
【０１５８】
図９は、図５に示した命令完了制御部ＣＣＴＬの動作の別の例を示す。なお、図９は、演算例外の検出が抑止され（ＦＥＤ＝１）、かつ、演算例外が発生しない場合の命令完了制御部ＣＣＴＬの動作の一例を示す。図８で説明した動作と同一または同様な動作については、詳細な説明を省略する。図のＦＡＤＤ（ＩＩＤ＝１２）は、値”１２”の命令識別子（ＩＩＤ＝１２）に対応する命令に基づく浮動小数点加算のパイプラインステージを示す。
【０１５９】
図９の動作は、演算器ＦＰＵからの例外情報ＥＸＳＩＧが論理値”０”に維持されている点を除いて、図８の動作と同一または同様である。したがって、図９の動作においても、バイパス情報ＥＣＯＭＰｗ１−ＥＣＯＭＰｗ４が生成されない構成の動作（例えば、図１２）に比べて、命令完了処理を１サイクル早く開始できる。
【０１６０】
図１０は、図５に示した命令完了制御部ＣＣＴＬの動作の別の例を示す。なお、図１０は、演算例外の検出が抑止されていない状態（ＦＥＤ＝０）で、演算例外が発生した場合の命令完了制御部ＣＣＴＬの動作の一例を示す。図８から図９で説明した動作と同一または同様な動作については、詳細な説明を省略する。図のＦＡＤＤ（ＩＩＤ＝１２）は、値”１２”の命令識別子（ＩＩＤ＝１２）に対応する命令に基づく浮動小数点加算のパイプラインステージを示す。例えば、サイクル４は、浮動小数点加算の最後の演算実行ステージＸに対応する。
【０１６１】
サイクル４では、命令完了制御部ＣＣＴＬは、論理値”１”の演算完了信号ＥＣＯＭＰおよび値”１２”の命令識別子ＥＩＩＤを演算器ＦＰＵから受信する。これにより、論理値”１”の演算完了信号ＥＣＯＭＰおよび値”１２”の命令識別子ＥＩＩＤがラッチＬＡＴ１０に保持される。なお、信号ＦＥＤが論理値”０”であるため、サイクル４では、演算完了信号ＥＣＯＭの情報は、コミットスタックエントリＣＳＥに登録されない。また、信号ＦＥＤが論理値”０”であるため、信号ＥＣＯＭＰｗ１は論理値”０”に維持される。
【０１６２】
サイクル５では、命令完了制御部ＣＣＴＬは、論理値”１”の例外情報ＥＸＳＩＧを演算器ＦＰＵから受信する。これにより、論理値”１”の例外情報ＥＸＳＩＧがラッチＬＡＴ２０に保持される。また、演算完了信号ＥＣＯＭＰ＿ＬＣＨおよび命令識別子ＥＩＩＤ＿ＬＣＨは、論理値”１”および値”１２”にそれぞれ変化する。
【０１６３】
信号ＦＥＤが論理値”０”であるため、コミットスタックエントリＣＳＥに登録されている命令のうち、値”１２”の命令識別子ＥＩＩＤ＿ＬＣＨに対応する命令の状態情報に、演算完了信号ＥＣＯＭＰ＿ＬＣＨの情報（演算の完了）が設定される。また、論理値”１”の演算完了信号ＥＣＯＭＰ＿ＬＣＨおよび値”１２”の命令識別子ＥＩＩＤ＿ＬＣＨは、ラッチＬＡＴ１２に保持される。
【０１６４】
サイクル６では、ポインタＰＴＲ１の値が１２であるため、コミットスタックエントリＣＳＥに登録されている命令のうち、値”１２”の命令識別子に対応する命令の状態情報（例えば、演算完了信号ＥＣＯＭＰ＿ＬＣＨの情報）が読み出される。これにより、信号ＥＣＯＭＰｃ１が論理値”１”に変化する。そして、信号ＥＣＯＭＰｃ１が論理値”１”に変化したことにより、信号ＥＣＯＭＰｓ１が論理値”１”に変化する。これにより、論理値”１”の信号ＥＣＯＭＰｓ１がラッチＬＡＴ３０に保持される。
【０１６５】
また、演算完了信号ＥＣＯＭＰ＿ＬＬおよび命令識別子ＥＩＩＤ＿ＬＬは、論理値”１”および値”１２”にそれぞれ変化する。例外情報ＥＸＳＩＧ＿ＬＣＨは、論理値”１”に変化する。これにより、コミットスタックエントリＣＳＥに登録されている命令のうち、値”１２”の命令識別子ＥＩＩＤ＿ＬＬに対応する命令の状態情報に、例外情報ＥＸＳＩＧ＿ＬＣＨの内容（例外発生）が設定される。なお、信号ＴＲＡＰｓ１は、サイクル５までに例外情報ＥＸＳＩＧ＿ＬＣＨの内容がコミットスタックエントリＣＳＥに設定されていないため、サイクル６では、論理値”０”に維持される。
【０１６６】
例外情報ＥＸＳＩＧ＿ＬＣＨおよび演算完了信号ＥＣＯＭＰ＿ＬＬの両方が論理値”１”で、かつ、ポインタＰＴＲ１の値と命令識別子ＥＩＩＤ＿ＬＬの値とが一致するため、論理積部ＡＮＤ２の出力は、論理値”１”に変化する。これにより、論理値”１”の信号がラッチＬＡＴ４０に保持される。
【０１６７】
サイクル７では、サイクル６で論理値”１”の信号がラッチＬＡＴ４０に保持されたため、ラッチＬＡＴ４０の出力信号である信号ＩＮＨが論理値”１”に変化する。また、信号ＥＣＯＭＰｓｌ１は、論理値”１”に変化する。なお、信号ＩＮＨが論理値”１”であるため、信号ＥＣＯＭＰｓｌ１が論理値”１”に変化した場合でも、信号ＣＯＭＭＩＴ１は、論理値”０”に維持される。このため、信号ＣＯＭＭＩＴ２−ＣＯＭＭＩＴ４は、例えば、サイクル６で論理値”１”の信号ＥＣＯＭＰｃ２−ＥＣＯＭＰｃ４がコミットスタックエントリＣＳＥから読み出された場合でも、論理値”０”に維持される。
【０１６８】
また、信号ＣＯＭＭＩＴ１−ＣＯＭＭＩＴ４が論理値”０”に維持されているため、ポインタＰＴＲ１の値も、１２に維持される。ポインタＰＴＲ１の値が１２であるため、コミットスタックエントリＣＳＥに登録されている命令のうち、値”１２”の命令識別子に対応する命令の状態情報（例えば、演算完了信号ＥＣＯＭＰ＿ＬＣＨの情報、例外情報ＥＸＳＩＧ＿ＬＣＨの情報）が読み出される。
【０１６９】
これにより、信号ＥＣＯＭＰｃ１、ＥＣＯＭＰｓ１は、論理値”１”に維持され、信号ＴＲＡＰｓ１は、論理値”１”に変化する。この結果、論理値”１”の信号ＥＣＯＭＰｓ１、ＴＲＡＰｓ１がラッチＬＡＴ３０に保持される。また、論理積部ＡＮＤ２の出力は、例外情報ＥＸＳＩＧ＿ＬＣＨ等が論理値”０”であるため、論理値”０”に変化する。これにより、論理値”０”の信号がラッチＬＡＴ４０に保持される。
【０１７０】
サイクル８では、サイクル７で論理値”０”の信号がラッチＬＡＴ４０に保持されたため、ラッチＬＡＴ４０の出力信号である信号ＩＮＨが論理値”０”に変化する。また、信号ＥＣＯＭＰｓｌ１は、論理値”１”に維持される。信号ＥＣＯＭＰｓｌ１が論理値”１”で、信号ＩＮＨが論理値”０”であるため、信号ＣＯＭＭＩＴ１が論理値”１”に変化する。
【０１７１】
また、信号ＴＲＡＰｓｌ１は、論理値”１”に変化する。これにより、例外が検出される。信号ＴＲＡＰｓｌ１が論理値”１”であるため、信号ＣＯＭＭＩＴ２−ＣＯＭＭＩＴ４は、論理値”０”に維持される。信号ＣＯＭＭＩＴ１が論理値”１”で、信号ＣＯＭＭＩＴ２−ＣＯＭＭＩＴ４が論理値”０”であるため、ポインタＰＴＲ１の値は１３（＝１２＋１）に変化する。これにより、値”１３”のポインタＰＴＲ１が、ポインタ部ＰＴに保持される。
【０１７２】
サイクル９では、ポインタＰＴＲ１ｍの値は、サイクル８でポインタ部ＰＴに保持されたポインタＰＴＲ１の値である１３に変化する。サイクル８で信号ＴＲＡＰｓｌ１が論理値”１”に変化したため、例外処理が実行される。例えば、例外が発生した命令の後続の命令は、全てキャンセルされ、コミットスタックエントリＣＳＥの登録から消去される。これにより、ポインタＰＴＲ１の値は、０に設定される。そして、発生した例外に応じた例外処理が実行される。
【０１７３】
図１１は、図５に示した命令完了制御部ＣＣＴＬの動作の別の例を示す。なお、図１１は、演算例外の検出が抑止されていない状態（ＦＥＤ＝０）で、演算例外が発生しない場合の命令完了制御部ＣＣＴＬの動作の一例を示す。図８から図１０で説明した動作と同一または同様な動作については、詳細な説明を省略する。図のＦＡＤＤ（ＩＩＤ＝１２）は、値”１２”の命令識別子（ＩＩＤ＝１２）に対応する命令に基づく浮動小数点加算のパイプラインステージを示す。例えば、サイクル４は、浮動小数点加算の最後の演算実行ステージＸに対応する。
【０１７４】
サイクル４では、命令完了制御部ＣＣＴＬは、論理値”１”の演算完了信号ＥＣＯＭＰおよび値”１２”の命令識別子ＥＩＩＤを演算器ＦＰＵから受信する。なお、信号ＦＥＤが論理値”０”であるため、サイクル４では、演算完了信号ＥＣＯＭの情報は、コミットスタックエントリＣＳＥに登録されない。また、信号ＦＥＤが論理値”０”であるため、信号ＥＣＯＭＰｗ１は論理値”０”に維持される。
【０１７５】
サイクル５では、演算完了信号ＥＣＯＭＰ＿ＬＣＨおよび命令識別子ＥＩＩＤ＿ＬＣＨは、論理値”１”および値”１２”にそれぞれ変化する。信号ＦＥＤが論理値”０”であるため、コミットスタックエントリＣＳＥに登録されている命令のうち、値”１２”の命令識別子ＥＩＩＤ＿ＬＣＨに対応する命令の状態情報に、演算完了信号ＥＣＯＭＰ＿ＬＣＨの情報（演算の完了）が設定される。なお、例外情報ＥＸＳＩＧが論理値”０”に維持されるため、ラッチＬＡＴ２０に保持される値も０に維持される。
【０１７６】
サイクル６では、ポインタＰＴＲ１の値が１２であるため、コミットスタックエントリＣＳＥに登録されている命令のうち、値”１２”の命令識別子に対応する命令の状態情報（例えば、演算完了信号ＥＣＯＭＰ＿ＬＣＨの情報）が読み出される。これにより、信号ＥＣＯＭＰｃ１が論理値”１”に変化する。そして、信号ＥＣＯＭＰｃ１が論理値”１”に変化したことにより、信号ＥＣＯＭＰｓ１が論理値”１”に変化する。
【０１７７】
また、演算完了信号ＥＣＯＭＰ＿ＬＬおよび命令識別子ＥＩＩＤ＿ＬＬは、論理値”１”および値”１２”にそれぞれ変化する。例外情報ＥＸＳＩＧ＿ＬＣＨは、論理値”０”に維持される。例外情報ＥＸＳＩＧ＿ＬＣＨが論理値”０”であるため、コミットスタックエントリＣＳＥは、値”１２”の命令識別子ＥＩＩＤ＿ＬＬの状態情報を更新しない。また、例外情報ＥＸＳＩＧ＿ＬＣＨが論理値”０”であるため、論理積部ＡＮＤ２の出力は、論理値”０”に維持される。したがって、ラッチＬＡＴ４０に保持される値も０に維持される。
【０１７８】
サイクル７では、信号ＥＣＯＭＰｓｌ１が論理値”１”に変化し、ラッチＬＡＴ４０の出力信号である信号ＩＮＨは、論理値”０”に維持される。信号ＥＣＯＭＰｓｌ１が論理値”１”で、信号ＩＮＨが論理値”０”であるため、信号ＣＯＭＭＩＴ１が論理値”１”に変化する。また、例えば、信号ＣＯＭＭＩＴ２−ＣＯＭＩＴ４は、図５で説明したそれぞれの完了条件を満たしている場合、論理値”１”に変化する。信号ＣＯＭＭＩＴ１−ＣＯＭＩＴ４が論理値”１”に変化するため、ポインタＰＴＲ１の値は１６（＝１２＋４）に変化する。これにより、値”１６”のポインタＰＴＲ１が、ポインタ部ＰＴに保持される。
【０１７９】
サイクル８では、ポインタＰＴＲ１ｍの値は、サイクル７でポインタ部ＰＴに保持されたポインタＰＴＲ１の値である１６に変化する。
【０１８０】
図１２は、図５に示した命令完了制御部ＣＣＴＬの動作の比較例を示す。図８から図１１で説明した動作と同一または同様な動作については、詳細な説明を省略する。なお、図１２は、図５に示したバイパス部ＢＹＰが省かれた命令完了制御部ＣＣＴＬの動作の一例を示す。図１２の動作は、図８の動作に対応している。例えば、図１２の動作では、演算例外の検出は抑止され、演算例外は発生する。なお、図１２の動作では、信号ＦＥＤが論理値”１”であるため、論理値”１”の例外情報ＥＸＳＩＧを命令完了制御部ＣＣＴＬがサイクル５で受信した場合でも、例外情報ＥＸＳＩＧ＿ＬＣＨは、論理値”０”に維持される。このため、信号ＩＮＨは、論理値”０”に維持される。
【０１８１】
また、図１２の括弧内の信号ＥＣＯＭＰｗ１、信号ＥＣＯＭＰｃ１は、バイパス部ＢＹＰが省かれたことにより、図８の動作から省かれた信号を示している。したがって、図１２の動作では、ラッチＬＡＴ３０が受信する信号ＥＣＯＭＰｓ１は、コミットスタックエントリＣＳＥから読み出された信号である。なお、図のＦＡＤＤ（ＩＩＤ＝１２）は、値”１２”の命令識別子（ＩＩＤ＝１２）に対応する命令に基づく浮動小数点加算のパイプラインステージを示す。例えば、サイクル４は、浮動小数点加算の最後の演算実行ステージＸに対応する。
【０１８２】
サイクル４では、命令完了制御部ＣＣＴＬは、論理値”１”の演算完了信号ＥＣＯＭＰおよび値”１２”の命令識別子ＥＩＩＤを演算器ＦＰＵから受信する。信号ＦＥＤが論理値”１”であるため、コミットスタックエントリＣＳＥに登録されている命令のうち、値”１２”の命令識別子ＥＩＩＤに対応する命令の状態情報に、演算完了信号ＥＣＯＭＰの情報（演算の完了）が設定される。
【０１８３】
サイクル５では、ポインタＰＴＲ１の値が１２であるため、コミットスタックエントリＣＳＥに登録されている命令のうち、値”１２”の命令識別子に対応する命令の状態情報（例えば、演算完了信号ＥＣＯＭＰの情報）が読み出される。これにより、信号ＥＣＯＭＰｓ１が論理値”１”に変化する。
【０１８４】
サイクル６では、信号ＥＣＯＭＰｓｌ１が論理値”１”に変化する。信号ＥＣＯＭＰｓｌ１が論理値”１”で、信号ＩＮＨが論理値”０”であるため、信号ＣＯＭＭＩＴ１が論理値”１”に変化する。また、例えば、信号ＣＯＭＭＩＴ２−ＣＯＭＩＴ４は、図５で説明したそれぞれの完了条件を満たしている場合、論理値”１”に変化する。信号ＣＯＭＭＩＴ１−ＣＯＭＩＴ４が論理値”１”に変化するため、ポインタＰＴＲ１の値は１６（＝１２＋４）に変化する。これにより、値”１６”のポインタＰＴＲ１が、ポインタ部ＰＴに保持される。
【０１８５】
サイクル７では、ポインタＰＴＲ１ｍの値は、サイクル５でポインタ部ＰＴに保持されたポインタＰＴＲ１の値である１６に変化する。
【０１８６】
このように、バイパス部ＢＹＰが省かれた比較例では、レジスタ更新ステージＵを２サイクルで実行する。これに対し、バイパス部ＢＹＰを含む命令完了制御部ＣＣＴＬは、レジスタ更新ステージＵを１サイクルで実行できる。すなわち、演算処理装置ＰＵは、図１２の比較例の動作に比べて、命令完了処理を１サイクル早く開始できる。したがって、演算処理装置ＰＵは、演算例外の検出が抑止されている場合に、演算器ＦＰＵ等の演算器が演算完了信号ＥＣＯＭＰを出力してから命令完了処理を実行するまでの時間を短縮できる。
【０１８７】
以上、図４から図１１に示した実施形態の演算処理装置および演算処理装置の制御方法においても、図１から図３に示した実施形態の演算処理装置および演算処理装置の制御方法と同様の効果を得ることができる。例えば、バイパス部ＢＹＰは、演算処理により発生する例外の検出が抑止され、かつ、演算部ＯＰから出力された演算完了情報が示す命令と命令完了処理の対象となる命令とが一致している場合、演算の完了を示すバイパス情報ＥＣＯＭＰｗを生成する。これにより、この実施形態においても、演算例外の検出が抑止されている場合に、演算部ＯＰが演算完了情報を出力してから命令完了処理を実行するまでの時間を短縮できる。
【０１８８】
例えば、バイパス部ＢＹＰは、信号ＦＥＤが論理値”１”で、かつ、ポインタＰＴＲ１の値と命令識別子ＥＩＩＤの値とが一致する場合、論理値”１”の演算完了信号ＥＣＯＭＰに基づいて、論理値”１”のバイパス情報ＥＣＯＭＰｗ１を生成する。この場合、命令完了処理の対象の命令に関する演算完了信号ＥＣＯＭＰの情報（例えば、演算完了信号ＥＣＯＭＰｓｌ１）は、コミットスタックエントリＣＳＥを介さずにラッチＬＡＴ３０に転送される。
【０１８９】
このため、この実施形態では、演算例外の検出が抑止されている場合に、演算部ＯＰが演算完了信号ＥＣＯＭＰを出力してから演算完了信号ＥＣＯＭＰの情報を命令完了部ＣＯＭＰＵ２等に通知するまでの時間を短縮できる。この結果、この実施形態では、演算例外の検出が抑止されている場合に、演算部ＯＰが演算完了情報を出力してから命令完了処理を実行するまでの時間を短縮できる。
【０１９０】
図１３は、図４に示した命令完了制御部ＣＣＴＬの別の例を示す。なお、図１３の命令完了制御部ＣＣＴＬを有する演算処理装置ＰＵは、図５に示した命令完了制御部ＣＣＴＬの代わりに図１３の命令完了制御部ＣＣＴＬを有することを除いて、図４に示した演算処理装置ＰＵと同様である。図１３の命令完了制御部ＣＣＴＬを有する演算処理装置ＰＵも、演算処理装置の一態様である。
【０１９１】
図１３の命令完了制御部ＣＣＴＬは、図５に示したバイパス部ＢＹＰの代わりにバイパス部ＢＹＰ２を有する。図１３の命令完了制御部ＣＣＴＬのその他の構成は、図５に示した命令完了制御部ＣＣＴＬと同様である。図１から図１２で説明した要素と同様の要素については、同様の符号を付し、これ等については、詳細な説明を省略する。なお、図１３においても、図５と同様に、データキャッシュＤＣＭからのデータ転送完了情報、分岐制御部ＢＣＴＬからの分岐判定完了情報、演算器ＥＸＵからの演算完了情報、例外情報等を受信するモジュールの記載を省略している。
【０１９２】
命令完了制御部ＣＣＴＬは、ポインタ部ＰＴ、加算部ＡＤＤ、ラッチＬＡＴ１０、ＬＡＴ１２、ＬＡＴ２０、ＬＡＴ３０、ＬＡＴ４０、インバータＩＮＶ１、論理積部ＡＮＤ１、ＡＮＤ２、選択部ＳＥＬ１０、ＳＥＬ２０、コミットスタックエントリＣＳＥ、バイパス部ＢＹＰ２、比較部ＣＭＰ１０、命令完了処理部ＣＯＭＰＵ１および命令完了部ＣＯＭＰＵ２を有する。命令完了制御部ＣＣＴＬに含まれる各モジュールは、バイパス部ＢＹＰ２を除いて、図５に示した命令完了制御部ＣＣＴＬに含まれる各モジュールと同一または同様である。
【０１９３】
例えば、ポインタ部ＰＴ、加算部ＡＤＤ、ラッチＬＡＴ１０−ＬＡＴ４０、インバータＩＮＶ１は、図５に示したポインタ部ＰＴ、加算部ＡＤＤ、ラッチＬＡＴ１０−ＬＡＴ４０、インバータＩＮＶ１と同一または同様である。また、論理積部ＡＮＤ１、ＡＮＤ２、選択部ＳＥＬ１０、ＳＥＬ２０、コミットスタックエントリＣＳＥは、図５に示した論理積部ＡＮＤ１、ＡＮＤ２、選択部ＳＥＬ１０、ＳＥＬ２０、コミットスタックエントリＣＳＥと同一または同様である。また、比較部ＣＭＰ１０、命令完了処理部ＣＯＭＰＵ１および命令完了部ＣＯＭＰＵ２は、図５に示した比較部ＣＭＰ１０、命令完了処理部ＣＯＭＰＵ１および命令完了部ＣＯＭＰＵ２と同一または同様である。
【０１９４】
バイパス部ＢＹＰ２は、演算の完了を示すバイパス情報を生成するバイパス部の一例である。例えば、バイパス部ＢＹＰ２は、演算例外の検出が抑止され、かつ、演算部ＯＰから出力された演算完了情報が示す命令と命令完了処理の対象となる命令とが一致している場合、演算の完了を示すバイパス情報ＥＣＯＭＰｗを生成する。また、バイパス部ＢＹＰ２は、演算例外の検出が抑止されていない状態では、演算例外が検出されず、かつ、演算部ＯＰから出力された演算完了情報が示す命令と命令完了処理の対象となる命令とが一致している場合、演算の完了を示すバイパス情報ＥＣＯＭＰｗを生成する。
【０１９５】
例えば、バイパス部ＢＹＰ２は、ポインタＰＴＲ１−ＰＴＲ４、信号ＦＥＤ、例外情報ＥＸＳＩＧ、信号ＥＣＯＭＰａ、ＥＩＩＤａおよび信号ＥＣＯＭＰｃ１−ＥＣＯＭＰｃ４を受信する。そして、バイパス部ＢＹＰ２は、ポインタＰＴＲ１−ＰＴＲ４、信号ＦＥＤ、例外情報ＥＸＳＩＧ、信号ＥＣＯＭＰａ、ＥＩＩＤａに基づいて、信号ＥＣＯＭＰｗ１−ＥＣＯＭＰｗ４を生成する。また、バイパス部ＢＹＰ２は、信号ＥＣＯＭＰｗ１−ＥＣＯＭＰｗ４と信号ＥＣＯＭＰｃ１−ＥＣＯＭＰｃ４とのそれぞれの論理和結果を、信号ＥＣＯＭＰｓ１−ＥＣＯＭＰｓ４としてラッチＬＡＴ３０に出力する。
【０１９６】
なお、図５で説明したように、信号ＦＥＤが論理値”１”の場合、信号ＥＣＯＭＰａ、ＥＩＩＤａは、それぞれ演算完了信号ＥＣＯＭＰおよび命令識別子ＥＩＩＤと同一または同様である。また、信号ＦＥＤが論理値”０”の場合、信号ＥＣＯＭＰａ、ＥＩＩＤａは、それぞれ演算完了信号ＥＣＯＭＰ＿ＬＣＨおよび命令識別子ＥＩＩＤ＿ＬＣＨと同一または同様である。
【０１９７】
例えば、バイパス部ＢＹＰ２は、比較部ＣＭＰ２０、論理積部ＡＮＤ３、論理和部ＯＲ１、ＯＲ２およびインバータＩＮＶ２を有する。比較部ＣＭＰ２０は、信号ＥＩＩＤａを命令識別子ＥＩＩＤの代わりに受信することを除いて、図５に示した比較部ＣＭＰ２０と同一または同様である。例えば、比較部ＣＭＰ２０は、信号ＥＩＩＤａを選択部ＳＥＬ２０から受信し、ポインタＰＴＲ１−ＰＴＲ４を加算部ＡＤＤから受信する。そして、比較部ＣＭＰ２０は、信号ＥＩＩＤａと各ポインタＰＴＲ１−ＰＴＲ４とを比較し、比較結果を論理積部ＡＮＤ３に出力する。
【０１９８】
例えば、比較部ＣＭＰ２０は、信号ＥＩＩＤａとポインタＰＴＲ１とが一致している場合、信号ＥＩＩＤａとポインタＰＴＲ１とが一致していることを示す比較結果（論理値”１”の信号）を論理積部ＡＮＤ３に出力する。さらに、比較部ＣＭＰ２０は、信号ＥＩＩＤａと各ポインタＰＴＲ２−ＰＴＲ３とが一致していないことを示す比較結果（論理値”０”の信号）を論理積部ＡＮＤ３に出力する。
【０１９９】
インバータＩＮＶ２は、例外情報ＥＸＳＩＧを状態制御部ＭＣＴＬから受信し、例外情報ＥＸＳＩＧの反転信号を論理和部ＯＲ２に出力する。論理和部ＯＲ２は、例外情報ＥＸＳＩＧの反転信号をインバータＩＮＶ２から受信し、信号ＦＥＤを状態制御部ＭＣＴＬから受信する。そして、論理和部ＯＲ２は、例外情報ＥＸＳＩＧの反転信号と信号ＦＥＤとの論理和結果を、信号ＦＥＸとして論理積部ＡＮＤ３に出力する。
【０２００】
論理積部ＡＮＤ３は、信号ＥＩＩＤａと各ポインタＰＴＲ１−ＰＴＲ４との比較結果、信号ＥＣＯＭＰａおよび信号ＦＥＸを、比較部ＣＭＰ２０、選択部ＳＥＬ２０および論理和部ＯＲ２からそれぞれ受信する。そして、論理積部ＡＮＤ３は、受信した信号の論理積結果を、バイパス情報ＥＣＯＭＰｗ１−ＥＣＯＭＰｗ４として論理和部ＯＲ１に出力する。
【０２０１】
例えば、論理積部ＡＮＤ３は、信号ＥＩＩＤａとポインタＰＴＲ１との比較結果、信号ＥＣＯＭＰａおよび信号ＦＥＸの３つの信号の論理積結果を、バイパス情報ＥＣＯＭＰｗ１として論理和部ＯＲ１に出力する。また、例えば、論理積部ＡＮＤ３は、信号ＥＩＩＤａとポインタＰＴＲ２との比較結果、信号ＥＣＯＭＰａおよび信号ＦＥＸの３つの信号の論理積結果を、バイパス情報ＥＣＯＭＰｗ２として論理和部ＯＲ１に出力する。
【０２０２】
また、例えば、論理積部ＡＮＤ３は、信号ＥＩＩＤａとポインタＰＴＲ３との比較結果、信号ＥＣＯＭＰａおよび信号ＦＥＸの３つの信号の論理積結果を、バイパス情報ＥＣＯＭＰｗ３として論理和部ＯＲ１に出力する。また、例えば、論理積部ＡＮＤ３は、信号ＥＩＩＤａとポインタＰＴＲ４との比較結果、信号ＥＣＯＭＰａおよび信号ＦＥＸの３つの信号の論理積結果を、バイパス情報ＥＣＯＭＰｗ４として論理和部ＯＲ１に出力する。
【０２０３】
論理和部ＯＲ１は、信号ＥＣＯＭＰｗ１−ＥＣＯＭＰｗ４を論理積部ＡＮＤ３から受信し、信号ＥＣＯＭＰｃ１−ＥＣＯＭＰｃ４を選択部ＳＥＬ１０から受信する。そして、論理和部ＯＲ１は、信号ＥＣＯＭＰｗ１−ＥＣＯＭＰｗ４と信号ＥＣＯＭＰｃ１−ＥＣＯＭＰｃ４とのそれぞれの論理和結果を、信号ＥＣＯＭＰｓ１−ＥＣＯＭＰｓ４としてラッチＬＡＴ３０に出力する。
【０２０４】
なお、バイパス部ＢＹＰ２の構成は、この例に限定されない。ここで、信号ＦＥＤが論理値”１”の場合、信号ＥＣＯＭＰａ、ＥＩＩＤａは、それぞれ演算完了信号ＥＣＯＭＰおよび命令識別子ＥＩＩＤと同一または同様である。したがって、信号ＦＥＤが論理値”１”の場合、論理積部ＡＮＤ３の入力信号は、図５に示したバイパス部ＢＹＰの論理積部ＡＮＤ３の入力信号と同一または同様である。すなわち、信号ＦＥＤが論理値”１”の場合、バイパス部ＢＹＰ２の動作は、バイパス部ＢＹＰの動作と同一または同様である。
【０２０５】
このため、信号ＦＥＤが論理値”１”の場合、命令完了制御部ＣＣＴＬの動作は、図５に示した命令完了制御部ＣＣＴＬの動作と同一または同様である。したがって、命令完了制御部ＣＣＴＬは、演算例外の検出が抑止されている場合に、演算部ＯＰが演算完了信号ＥＣＯＭＰを出力してから演算完了信号ＥＣＯＭＰの情報を命令完了部ＣＯＭＰＵ２等に通知するまでの時間を短縮できる。
【０２０６】
この結果、命令完了制御部ＣＣＴＬは、演算例外の検出が抑止されている場合に、演算部ＯＰが演算完了信号ＥＣＯＭＰを出力してから命令完了処理を実行するまでの時間を短縮できる。なお、信号ＦＥＤが論理値”０”の場合の命令完了制御部ＣＣＴＬの動作は、図１４および図１５で説明する。
【０２０７】
図１４は、図１３に示した命令完了制御部ＣＣＴＬの動作フローの一例を示す。すなわち、図１４は、演算処理装置の制御方法の一態様を示す。なお、図１４は、演算例外の検出が抑止されていない場合の命令完了制御部ＣＣＴＬの動作の一例を示す。図１４の動作では、ステップＳ２３２、Ｓ２３４が図３に示した動作に追加され、ステップＳ２５０の代わりにステップＳ２５０ａが実行される。図１４のその他の動作は、図３の動作と同一または同様である。
【０２０８】
図１４の動作は、ハードウエアのみで実現されてもよく、ハードウエアをソフトウエアにより制御することにより実現されてもよい。図２および図３の動作と同一または同様な動作については、詳細な説明を省略する。例えば、図１４には示していないが、命令デコーダＤＥＣでデコードされた命令は、デコードされた順にコミットスタックエントリＣＳＥに登録される。
【０２０９】
ステップＳ２００では、選択部ＳＥＬ１０は、命令完了処理の対象となる命令を、デコードされた順にコミットスタックエントリＣＳＥから読み出す。
【０２１０】
ステップＳ２１０では、命令完了制御部ＣＣＴＬは、演算完了情報（例えば、演算完了信号ＥＣＯＭＰ、命令識別子ＥＩＩＤ）を受信したか否かを判定する。演算完了情報を受信した場合（ステップＳ２１０のＹｅｓ）、命令完了制御部ＣＣＴＬの動作は、ステップＳ２２０に移る。一方、演算完了情報を受信していない場合（ステップＳ２１０のＮｏ）、命令完了制御部ＣＣＴＬの動作は、ステップＳ２５０に移る。
【０２１１】
ステップＳ２２０では、命令完了制御部ＣＣＴＬは、コミットスタックエントリＣＳＥに保持された状態情報のうち、命令識別子ＥＩＩＤ＿ＬＣＨ（信号ＥＩＩＤａ）が示す命令の状態情報を、演算の完了を示す情報に更新する。例えば、コミットスタックエントリＣＳＥは、命令識別子ＥＩＩＤ＿ＬＣＨ（信号ＥＩＩＤａ）が示す命令の状態情報を、演算完了信号ＥＣＯＭＰ＿ＬＣＨ（信号ＥＣＯＰＭａ）の情報に更新する。
【０２１２】
ステップＳ２３０では、命令完了制御部ＣＣＴＬは、例外が検出されたか否かを判定する。例えば、命令完了制御部ＣＣＴＬは、演算例外が発生したことを示す例外情報ＥＸＳＩＧを演算部ＯＰから受信したか否かを判定する。例外が検出された場合（ステップＳ２３０のＹｅｓ）、命令完了制御部ＣＣＴＬの動作は、ステップＳ２４０に移る。一方、例外が検出されていない場合（ステップＳ２３０のＮｏ）、命令完了制御部ＣＣＴＬの動作は、ステップＳ２３２に移る。
【０２１３】
ステップＳ２３２では、命令完了制御部ＣＣＴＬは、例えば、演算完了信号ＥＣＯＭＰ＿ＬＣＨ（信号ＥＣＯＰＭａ）の命令がステップＳ２００で読み出した命令完了処理の対象となる命令か否かを判定する。例えば、命令完了制御部ＣＣＴＬは、命令識別子ＥＩＩＤ＿ＬＣＨ（信号ＥＩＩＤａ）がポインタＰＴＲ１−ＰＴＲ４に一致するか否かを判定する。演算完了信号ＥＣＯＭＰ＿ＬＣＨ（信号ＥＣＯＰＭａ）の命令が命令完了処理の対象である場合（ステップＳ２３２のＹｅｓ）、命令完了制御部ＣＣＴＬの動作は、ステップＳ２３４に移る。一方、演算完了信号ＥＣＯＭＰ＿ＬＣＨ（信号ＥＣＯＰＭａ）の命令が命令完了処理の対象でない場合（ステップＳ２３２のＮｏ）、命令完了制御部ＣＣＴＬの動作は、ステップＳ２５０ａに移る。
【０２１４】
ステップＳ２３４では、バイパス部ＢＹＰ２は、演算完了信号ＥＣＯＭＰ＿ＬＣＨ（信号ＥＣＯＰＭａ）に基づいて、演算の完了を示すバイパス情報ＥＣＯＭＰｗを生成する。例えば、バイパス部ＢＹＰ２は、命令識別子ＥＩＩＤ＿ＬＣＨ（信号ＥＩＩＤａ）が示す命令に対して、演算の完了を示すバイパス情報ＥＣＯＭＰｗを生成する。このように、バイパス部ＢＹＰ２は、例外の検出が抑止されていない状態では、例外が検出されず、演算部ＯＰから出力された演算完了情報が示す命令と命令完了処理の対象となる命令とが一致している場合、演算の完了を示すバイパス情報ＥＣＯＭＰｗを生成する。
【０２１５】
ステップＳ２４０では、命令完了制御部ＣＣＴＬは、コミットスタックエントリＣＳＥに保持された状態情報のうち、命令識別子ＥＩＩＤ＿ＬＬが示す命令の状態情報を、例外の発生を示す情報に更新する。例えば、コミットスタックエントリＣＳＥは、命令識別子ＥＩＩＤ＿ＬＬが示す命令の状態情報を、例外情報ＥＸＳＩＧ＿ＬＣＨの内容に更新する。
【０２１６】
ステップＳ２５０ａでは、命令完了制御部ＣＣＴＬは、バイパス情報ＥＣＯＭＰｗおよびコミットスタックエントリＣＳＥから読み出した命令の状態情報（信号ＥＣＯＭＰｃ）に基づいて、命令完了処理を実行する。例えば、命令完了処理部ＣＯＭＰＵ１は、信号ＥＣＯＭＰｗ１−ＥＣＯＭＰｗ４と信号ＥＣＯＭＰｃ１−ＥＣＯＭＰｃ４とのそれぞれの論理和結果である信号ＥＣＯＭＰｓｌ１−ＥＣＯＭＰｓｌ４に基づいて、信号ＣＯＭＭＩＴ１−ＣＯＭＭＩＴ４を生成する。そして、命令完了部ＣＯＭＰＵ２は、信号ＣＯＭＭＩＴ１−ＣＯＭＭＩＴ４に基づいて、命令完了処理を実行する。
【０２１７】
なお、演算処理装置ＰＵの動作は、この例に限定されない。また、演算例外の検出が抑止されている場合（ＦＥＤフラグ＝１）の演算処理装置ＰＵの動作は、図２に示した動作と同一または同様である。
【０２１８】
図１５は、図１３に示した命令完了制御部ＣＣＴＬの動作の一例を示す。なお、図１５は、演算例外の検出が抑止されていない状態（ＦＥＤ＝０）で、演算例外が発生しない場合の命令完了制御部ＣＣＴＬの動作の一例を示す。すなわち、図１５の動作は、図１１の動作に対応している。図８から図１１で説明した動作と同一または同様な動作については、詳細な説明を省略する。図のＦＡＤＤ（ＩＩＤ＝１２）は、値”１２”の命令識別子（ＩＩＤ＝１２）に対応する命令に基づく浮動小数点加算のパイプラインステージを示す。例えば、サイクル４は、浮動小数点加算の最後の演算実行ステージＸに対応する。
【０２１９】
なお、図１５の動作では、例外が発生しないため、例外情報ＥＸＳＩＧ、ＥＸＳＩＧ＿ＬＣＨは、論理値”０”に維持される。このため、信号ＩＮＨは、論理値”０”に維持される。また、例外情報ＥＸＳＩＧの反転信号は、論理値”１”に維持される。
【０２２０】
サイクル４では、命令完了制御部ＣＣＴＬは、論理値”１”の演算完了信号ＥＣＯＭＰおよび値”１２”の命令識別子ＥＩＩＤを演算器ＦＰＵから受信する。なお、信号ＦＥＤが論理値”０”であるため、サイクル４では、演算完了信号ＥＣＯＭの情報は、コミットスタックエントリＣＳＥに登録されない。
【０２２１】
サイクル５では、演算完了信号ＥＣＯＭＰ＿ＬＣＨおよび命令識別子ＥＩＩＤ＿ＬＣＨは、論理値”１”および値”１２”にそれぞれ変化する。信号ＦＥＤが論理値”０”であるため、信号ＥＩＩＤａとして命令識別子ＥＩＩＤ＿ＬＣＨが選択され、信号ＥＣＯＭＰａとして、演算完了信号ＥＣＯＭＰ＿ＬＣＨが選択される。このため、コミットスタックエントリＣＳＥに登録されている命令のうち、値”１２”の命令識別子ＥＩＩＤ＿ＬＣＨ（信号ＥＩＩＤａ）に対応する命令の状態情報に、演算完了信号ＥＣＯＭＰ＿ＬＣＨ（信号ＥＣＯＭＰａ）の情報（演算の完了）が設定される。
【０２２２】
また、例外情報ＥＸＳＩＧの反転信号は、論理値”１”であり、ポインタＰＴＲ１の値と命令識別子ＥＩＩＤ＿ＬＣＨ（信号ＥＩＩＤａ）の値とは、ともに１２である。このため、信号ＥＣＯＭＰｗ１は、演算完了信号ＥＣＯＭＰ＿ＬＣＨの論理値”１”と同じ論理値”１”に変化する。そして、信号ＥＣＯＭＰｗ１が論理値”１”に変化したことにより、信号ＥＣＯＭＰｓ１が論理値”１”に変化する。これにより、論理値”１”の信号ＥＣＯＭＰｓ１がラッチＬＡＴ３０に保持される。
【０２２３】
サイクル６では、サイクル５で論理値”１”の信号ＥＣＯＭＰｓ１がラッチＬＡＴ３０に保持されたため、ラッチＬＡＴ３０の出力信号である信号ＥＣＯＭＰｓｌ１が論理値”１”に変化する。信号ＥＣＯＭＰｓｌ１が論理値”１”で、信号ＩＮＨが論理値”０”であるため、信号ＣＯＭＭＩＴ１が論理値”１”に変化する。
【０２２４】
また、例えば、信号ＣＯＭＭＩＴ２−ＣＯＭＩＴ４は、図５で説明したそれぞれの完了条件を満たしている場合、論理値”１”に変化する。例えば、サイクル５で論理値”１”の信号ＥＣＯＭＰｃ２−ＥＣＯＭＰｃ４がコミットスタックエントリＣＳＥから読み出された場合、信号ＣＯＭＭＩＴ２−ＣＯＭＩＴ４もサイクル６で論理値”１”に変化する。信号ＣＯＭＭＩＴ１−ＣＯＭＩＴ４が論理値”１”に変化するため、ポインタＰＴＲ１の値は１６（＝１２＋４）に変化する。これにより、値”１６”のポインタＰＴＲ１が、ポインタ部ＰＴに保持される。
【０２２５】
サイクル７では、ポインタＰＴＲ１ｍの値は、サイクル６でポインタ部ＰＴに保持されたポインタＰＴＲ１の値である１６に変化する。
【０２２６】
このように、命令完了制御部ＣＣＴＬは、例えば、例外の検出が抑止されていない状態でも、例外が検出されず、かつ、命令識別子ＥＩＩＤ＿ＩＩＤの値がポインタＰＴＲ１の値と同じ場合、レジスタ更新ステージＵを２サイクルで実行できる。これに対し、例えば、例外の検出が抑止されていない場合にバイパス情報ＥＣＯＭＰｗ１−ＥＣＯＭＰｗ４が生成されない構成の動作（例えば、図１１の動作）では、レジスタ更新ステージＵを３サイクルで実行する。
【０２２７】
すなわち、図１５の動作では、例外の検出が抑止されていない場合にバイパス情報ＥＣＯＭＰｗ１−ＥＣＯＭＰｗ４が生成されない構成の動作（例えば、図１１の動作）に比べて、命令完了処理を１サイクル早く開始できる。このため、演算処理装置ＰＵの性能が向上する。例えば、信号ＣＯＭＭＩＴ２−ＣＯＭＩＴ４の完了条件が満たされている場合、演算処理装置ＰＵは、ポインタＰＴＲ２−ＰＴＲ４が示す命令（ポインタＰＴＲ１が示す命令の後続の命令）も、ポインタＰＴＲ１が示す命令と同じサイクルで命令完了処理を開始できる。すなわち、演算処理装置ＰＵは、例外の検出が抑止されていない場合にバイパス情報ＥＣＯＭＰｗ１−ＥＣＯＭＰｗ４が生成されない構成の動作（例えば、図１１の動作）に比べて、後続の命令に対する命令完了処理も１サイクル早く開始できる。
【０２２８】
なお、演算例外の検出が抑止されていない状態（ＦＥＤフラグ＝０）で、演算例外が発生した場合の命令完了制御部ＣＣＴＬの動作は、図１０に示した動作と同一または同様である。また、演算例外の検出が抑止されている場合（ＦＥＤフラグ＝１）の命令完了制御部ＣＣＴＬの動作は、図８および図９に示した動作と同一または同様である。
【０２２９】
以上、図１３から図１５に示した実施形態の演算処理装置および演算処理装置の制御方法においても、図１から図１２に示した実施形態の演算処理装置および演算処理装置の制御方法と同様の効果を得ることができる。例えば、バイパス部ＢＹＰ２は、演算処理により発生する例外の検出が抑止され、かつ、演算部ＯＰから出力された演算完了情報が示す命令と命令完了処理の対象となる命令とが一致している場合、演算の完了を示すバイパス情報ＥＣＯＭＰｗを生成する。これにより、この実施形態においても、演算例外の検出が抑止されている場合に、演算部ＯＰが演算完了情報を出力してから命令完了処理を実行するまでの時間を短縮できる。
【０２３０】
さらに、この実施形態では、演算例外の検出が抑止されていない状態でも、演算例外が検出されない場合に、演算部ＯＰが演算完了情報を出力してから命令完了処理を実行するまでの時間を短縮できる。例えば、バイパス部ＢＹＰ２は、演算例外の検出が抑止されていない状態で、演算例外が検出されず、演算部ＯＰから出力された演算完了情報が示す命令と命令完了処理の対象となる命令とが一致している場合、演算の完了を示すバイパス情報ＥＣＯＭＰｗを生成する。
【０２３１】
このため、この実施形態では、演算例外の検出が抑止されていない状態でも、演算例外が検出されない場合に、演算部ＯＰが演算完了信号ＥＣＯＭＰを出力してから演算完了信号ＥＣＯＭＰの情報を命令完了部ＣＯＭＰＵ２等に通知するまでの時間を短縮できる。この結果、この実施形態では、演算例外の検出が抑止されていない状態でも、演算例外が検出されない場合に、演算部ＯＰが演算完了情報を出力してから命令完了処理を実行するまでの時間を短縮できる。
【０２３２】
以上の実施形態において説明した発明を整理して、付記として開示する。
（付記１）
命令をデコードするデコード部と、デコードされた前記命令に基づく演算を実行する演算部と、前記命令を完了させる命令完了処理をデコードされた順に実行する完了制御部とを有し、
前記完了制御部は、
デコードされた前記命令がデコードされた順に登録され、登録された前記命令に基づく演算が完了したか否か示す状態情報を保持し、前記演算部による演算の完了を示す演算完了情報を受信した場合、前記演算完了情報が示す前記命令の前記状態情報を、演算の完了を示す情報に更新する保持部と、
前記命令完了処理の対象となる前記命令を、デコードされた順に前記保持部から読み出す選択部と、
演算処理により発生する例外の検出が抑止され、かつ、前記演算部から出力された前記演算完了情報が示す前記命令と前記命令完了処理の対象となる前記命令とが一致している場合、演算の完了を示すバイパス情報を生成するバイパス部と、
演算の完了を示す前記バイパス情報が生成された前記命令に対しては前記バイパス情報に基づいて前記命令完了処理を実行し、演算の完了を示す前記バイパス情報が生成されていない前記命令に対しては前記保持部から読み出した前記命令の前記状態情報に基づいて前記命令完了処理を実行する完了処理部とを有することを特徴とする演算処理装置。
（付記２）
付記１に記載の演算処理装置において、
前記バイパス部は、前記例外の検出が抑止されていない状態では、前記例外が検出されず、かつ、前記演算部から出力された前記演算完了情報が示す前記命令と前記命令完了処理の対象となる前記命令とが一致している場合、演算の完了を示す前記バイパス情報を生成する
ことを特徴とする演算処理装置。
（付記３）
命令をデコードするデコード部と、デコードされた前記命令に基づく演算を実行する演算部と、デコードされた前記命令がデコードされた順に登録される保持部に、前記命令に基づく演算が完了したか否か示す状態情報を前記命令に対応させて格納し、前記命令を完了させる命令完了処理をデコードされた順に実行する完了制御部とを有する演算処理装置の制御方法において、
前記完了制御部は、前記命令完了処理の対象となる前記命令を、デコードされた順に前記保持部から読み出し、
前記完了制御部は、前記演算部による演算の完了を示す演算完了情報を受信した場合、前記保持部に保持された前記状態情報のうち、前記演算完了情報が示す前記命令の前記状態情報を、演算の完了を示す情報に更新し、
前記完了制御部は、演算処理により発生する例外の検出が抑止され、かつ、前記演算部から出力された前記演算完了情報が示す前記命令と前記命令完了処理の対象となる前記命令とが一致している場合、演算の完了を示すバイパス情報を生成し、
前記完了制御部は、演算の完了を示す前記バイパス情報が生成された前記命令に対しては前記バイパス情報に基づいて前記命令完了処理を実行し、演算の完了を示す前記バイパス情報が生成されていない前記命令に対しては前記保持部から読み出した前記命令の前記状態情報に基づいて前記命令完了処理を実行する
ことを特徴とする演算処理装置の制御方法。
（付記４）
付記３に記載の演算処理装置の制御方法において、
前記完了制御部は、前記例外の検出が抑止されていない状態では、前記例外が検出されず、かつ、前記演算部から出力された前記演算完了情報が示す前記命令と前記命令完了処理の対象となる前記命令とが一致している場合、演算の完了を示す前記バイパス情報を生成する
ことを特徴とする演算処理装置の制御方法。
【０２３３】
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずである。したがって、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。
【符号の説明】
【０２３４】
ＡＤＤ‥加算部；ＡＮＤ１、ＡＮＤ２、ＡＮＤ３‥論理積部；ＢＣＴＬ‥分岐制御部；ＢＲＰＲＥ‥分岐予測機構；ＢＹＰ、ＢＹＰ２‥バイパス部；ＣＣＭ‥命令キャッシュ；ＣＣＴＬ‥命令完了制御部；ＣＭＰ１０、ＣＭＰ２０‥比較部；ＣＯＭＰＵ‥完了処理部；ＣＯＭＰＵ１‥命令完了処理部；ＣＯＭＰＵ２‥命令完了部；ＣＳＥ‥コミットスタックエントリ；ＤＣＭ‥データキャッシュ；ＤＥＣ‥命令デコーダ；ＥＸＢＵＦ‥固定小数点更新バッファ；ＥＸＲＥＧ‥固定小数点レジスタ；ＥＸＵ、ＦＰＵ‥演算器；ＦＡＧＥＮ‥命令フェッチアドレス生成器；ＦＰＢＵＦ‥浮動小数点更新バッファ；ＦＰＲＥＧ‥浮動小数点レジスタ；ＩＮＶ１、ＩＮＶ２‥インバータ；ＬＡＴ１０、ＬＡＴ１２、ＬＡＴ２０、ＬＡＴ３０、ＬＡＴ４０‥ラッチ；ＭＣＴＬ‥状態制御部；ＮＰＣ‥ネクストプログラムカウンタ；ＯＡＧＥＮ‥オペランドアドレス生成器；ＯＰ‥演算部；ＯＲ１、ＯＲ２‥論理和部；ＰＣ‥プログラムカウンタ；ＰＴ‥ポインタ部；ＰＵ‥演算処理装置；ＲＳ、ＲＳＡ、ＲＳＥ、ＲＳＦ、ＲＳＢＲ‥リザベーションステーション；ＳＥＬ１０、ＳＥＬ２０‥選択部
【図１】
2015203914.tif 000003
【図２】
2015203914.tif 000004
【図３】
2015203914.tif 000005
【図４】
2015203914.tif 000006
【図５】
2015203914.tif 000007
【図６】
2015203914.tif 000008
【図７】
2015203914.tif 000009
【図８】
2015203914.tif 000010
【図９】
2015203914.tif 000011
【図１０】
2015203914.tif 000012
【図１１】
2015203914.tif 000013
【図１２】
2015203914.tif 000014
【図１３】
2015203914.tif 000015
【図１４】
2015203914.tif 000016
【図１５】
2015203914.tif 000017