(57)【要約】【課題】  複合命令を実行する演算処理装置の性能を向上する。【解決手段】  演算処理装置は、命令をデコードするデコード部と、デコード部がデコードした命令を保持し、保持した命令を実行可能な順に出力する実行制御部と、実行制御部が出力する命令を順次転送する命令転送部と、命令転送部が転送する命令が複数の個別命令を組み合わせた複合命令である場合、複合命令から生成した個別命令を命令転送部に出力する命令生成部と、命令転送部が転送した個別命令を実行する演算実行部を有する。【選択図】    図１
2018045370.tif 000002
【特許請求の範囲】
【請求項１】
命令をデコードするデコード部と、
前記デコード部がデコードした命令を保持し、保持した命令を実行可能な順に出力する実行制御部と、
前記実行制御部が出力する命令を順次転送する命令転送部と、
前記命令転送部が転送する命令が複数の個別命令を組み合わせた複合命令である場合、前記複合命令から生成した個別命令を前記命令転送部に出力する命令生成部と、
前記命令転送部が転送した個別命令を実行する演算実行部を有することを特徴とする演算処理装置。
【請求項２】
前記命令生成部が前記複合命令に含まれる個別命令を前記命令転送部に出力する場合、前記実行制御部に命令の出力を抑止させる抑止情報を出力する抑止制御部を有することを特徴とする請求項１記載の演算処理装置。
【請求項３】
前記実行制御部が出力する前記複合命令は、前記複合命令であることを識別する識別情報を含み、
前記抑止制御部は、前記実行制御部が出力する前記識別情報に基づいて、前記抑止情報を出力することを特徴とする請求項２記載の演算処理装置。
【請求項４】
前記命令転送部は、前記抑止制御部が前記抑止情報を出力しない場合、前記実行制御部が出力する前記識別情報を選択し、前記抑止制御部が前記抑止情報を出力する場合、命令が前記複合命令でないことを示す識別情報を選択する第１の選択部を有し、前記第１の選択部で選択した識別情報を転送することを特徴とする請求項３記載の演算処理装置。
【請求項５】
前記命令転送部は、前記抑止制御部が前記抑止情報を出力しない場合、前記実行制御部が出力する命令を選択し、前記抑止制御部が前記抑止情報を出力する場合、前記命令生成部が出力する個別命令を選択する第２の選択部を有し、前記第２の選択部で選択した命令を転送することを特徴とする請求項２ないし請求項４のいずれか１項記載の演算処理装置。
【請求項６】
前記実行制御部が出力する命令は、命令が有効であることを示す有効情報を含み、
前記命令転送部は、前記実行制御部が出力する有効情報または前記抑止情報を有効情報として前記演算実行部に転送する論理和部を有することを特徴とする請求項２ないし請求項５のいずれか１項記載の演算処理装置。
【請求項７】
前記命令生成部は、前記実行制御部が前記複合命令を出力する場合、前記複数の個別命令のうち、前記演算実行部による実行順が２番目以降の個別命令を生成し、
前記命令転送部は、前記実行制御部が前記複合命令を出力する場合、前記複合命令の転送に続いて、前記命令生成部が生成する実行順が２番目以降の個別命令を転送し、
前記演算実行部は、前記複合命令を受信した場合、前記複数の命令のうち実行順が最初の命令を実行することを特徴とする請求項１ないし請求項６のいずれか１項記載の演算処理装置。
【請求項８】
前記命令転送部は、
前記実行制御部が出力する命令を受信する第１のステージと、
前記第１のステージから転送される命令を前記演算実行部に出力する第２のステージを有し、
前記命令生成部は、前記第２のステージに転送される命令が前記複合命令の場合、前記実行順が２番目以降の個別命令を前記第１のステージに出力することを特徴とする請求項７記載の演算処理装置。
【請求項９】
前記実行制御部が順次出力する先行命令および後続命令が、前記先行命令の演算結果を前記後続命令で使用する所定の組み合わせの特定命令であることを検出する依存検出部を有し、
前記命令転送部は、前記実行制御部が出力する命令が前記複合命令の場合、または、前記依存検出部が前記特定命令を検出した場合、前記実行制御部の出力の選択を停止し、前記命令生成部の出力を選択する選択部を有し、
前記命令生成部は、前記実行制御部が出力する命令が前記複合命令の場合、前記複合命令に含まれる個別命令を前記命令転送部に出力し、前記実行制御部が出力する命令が前記複合命令でない場合、前記命令転送部で転送された命令を前記命令転送部に出力することを特徴とする請求項１記載の演算処理装置。
【請求項１０】
前記命令生成部が前記複合命令に含まれる個別命令を前記命令転送部に出力する場合、または前記依存検出部が前記特定命令を検出した場合、前記実行制御部に命令の出力を抑止させる抑止情報を出力する抑止制御部を有し、
前記選択部は、前記抑止制御部が前記抑止情報を出力しない場合、前記実行制御部が出力する命令を選択し、前記抑止制御部が前記抑止情報を出力する場合、前記命令生成部が出力する命令を選択することを特徴とする請求項９記載の演算処理装置。
【請求項１１】
前記実行制御部が出力する命令は、命令が有効であることを示す有効情報を含み、
前記命令転送部は、前記依存検出部が前記特定命令を検出した場合、前記実行制御部が出力した前記後続命令に含まれる有効情報を無効状態に設定する無効設定部を有することを特徴とする請求項９または請求項１０記載の演算処理装置。
【請求項１２】
演算処理装置の制御方法において、
前記演算処理装置が有するデコード部が、命令をデコードし、
前記演算処理装置が有する実行制御部が、前記デコード部がデコードした命令を保持し、保持した命令を実行可能な順に出力し、
前記演算処理装置が有する命令転送部が、前記実行制御部が出力する命令を順次転送し、
前記命令転送部が転送する命令が複数の個別命令を組み合わせた複合命令である場合、前記演算処理装置が有する命令生成部が、前記複合命令から生成した個別命令を前記命令転送部に出力し、
前記演算処理装置が有する演算実行部が、前記命令転送部が転送した個別命令を実行することを特徴とする演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置および演算処理装置の制御方法に関する。
【背景技術】
【０００２】
プロセッサ等の演算処理装置は、デコード部がデコードした命令をリザベーションステーションに保持し、演算実行部で実行する命令の順序をデータの依存関係に応じて入れ換えるアウトオブオーダ処理を実行する。実行可能な順に命令を実行することで、デコードされた順に命令を実行する場合に比べて、命令の実行効率は向上する。ところで、乗算、減算に加えて加算、減算が実行可能な乗算器に命令を投入する第１のリザベーションステーションと、加算、減算のみが実行可能な加算器に命令を投入する第２のリザベーションステーションとを有する演算処理装置が提案されている。演算処理装置は、第１および第２のリザベーションステーションのそれぞれに対応して、デコードした命令をリザベーションステーションに投入する前に保持する第１のレジスタと第２のレジスタとを有する。
【０００３】
第１および第２のレジスタのいずれかから出力される乗算命令または除算命令は、専用のレジスタに格納する先行フローと、専用のレジスタに格納された乗算命令または除算命令を第１のリザベーションステーションに投入する後続フローとに展開される。これにより、第１および第２のレジスタに加算命令または減算命令のみが保持される場合、デコードサイクルでのリザベーションステーションへの命令の投入に掛かる時間は、命令を複数のフローに展開しない場合に比べて短縮される（例えば、特許文献１参照）。
【０００４】
また、デコードした命令に対応するマイクロプログラムの制御情報を、フロー毎に保持する制御リザベーションステーションを設けることで、アウトオブオーダで実行される命令は、マイクロプログラムにより制御可能になる（例えば、特許文献２参照）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００４−３８７５１号公報
【特許文献２】特開２０００−１８１７０２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
命令をデコードするデコード部が、複数の個別命令を組み合わせた複合命令を複数の個別命令に分解する機能を有する場合、分解された複数の個別命令は、リザベーションステーションに投入される。この場合、リザベーションステーションの使用率は、複合命令をリザベーションステーションに投入する場合に比べて上昇し、アウトオブオーダの効率は低下する。
【０００７】
１つの側面では、本発明は、複合命令を実行する演算処理装置の性能を向上することを目的とする。
【課題を解決するための手段】
【０００８】
一つの観点によれば、演算処理装置は、命令をデコードするデコード部と、デコード部がデコードした命令を保持し、保持した命令を実行可能な順に出力する実行制御部と、実行制御部が出力する命令を順次転送する命令転送部と、命令転送部が転送する命令が複数の個別命令を組み合わせた複合命令である場合、複合命令から生成した個別命令を命令転送部に出力する命令生成部と、命令転送部が転送した個別命令を実行する演算実行部を有する。
【０００９】
別の観点によれば、演算処理装置の制御方法は、演算処理装置が有するデコード部が、命令をデコードし、演算処理装置が有する実行制御部が、デコード部がデコードした命令を保持し、保持した命令を実行可能な順に出力し、演算処理装置が有する命令転送部が、実行制御部が出力する命令を順次転送し、命令転送部が転送する命令が複数の個別命令を組み合わせた複合命令である場合、演算処理装置が有する命令生成部が、複合命令から生成した個別命令を命令転送部に出力し、演算処理装置が有する演算実行部が、命令転送部が転送した個別命令を実行する。
【発明の効果】
【００１０】
複合命令を実行する演算処理装置の性能を向上することができる。
【図面の簡単な説明】
【００１１】
【図１】演算処理装置および演算処理装置の制御方法の一実施形態を示す図である。
【図２】図１に示す演算処理装置の動作の一例を示す図である。
【図３】演算処理装置および演算処理装置の制御方法の別の実施形態を示す図である。
【図４】図３に示すレジスタ管理部およびレジスタ部の一例を示す図である。
【図５】図３に示す演算処理装置における固定小数点演算器に対応する命令パイプラインの概要を示す図である。
【図６】図５に示す命令パイプラインにおいて、ステージＰからステージＸまでに関連する回路要素の一例を示す図である。
【図７】図５および図６に示す命令パイプラインにおいて、オペランドデータをバイパスさせるタイミングの一例を示す図である。
【図８】図３に示す演算処理装置の動作の一例を示す図である。
【図９】図３に示す演算処理装置の動作の別の例を示す図である。
【図１０】図６に示す命令パイプラインにおけるＰサイクルおよびＰＴサイクルでの動作フローの一例を示す図である。
【図１１】演算処理装置および演算処理装置の制御方法の別の実施形態において、リザベーションステーションから固定小数点演算器までの命令パイプラインの一例を示す図である。
【図１２】図１１に示す命令パイプラインを有する演算処理装置の動作の一例を示す図である。
【図１３】図１１に示す命令パイプラインを有する演算処理装置の動作の別の例を示す図である。
【図１４】図１１に示す命令パイプラインを有する演算処理装置の動作の別の例である。
【図１５】図１１に示す命令パイプラインにおけるＰサイクルおよびＰＴサイクルでの動作フローの一例を示す図である。
【発明を実施するための形態】
【００１２】
以下、図面を用いて実施形態を説明する。
【００１３】
図１は、演算処理装置および演算処理装置の制御方法の一実施形態を示す。図１に示す演算処理装置１００は、ＣＰＵ（Central Processing Unit）等のプロセッサであり、デコード部１、実行制御部２、命令転送部３、演算実行部４、命令生成部５および抑止制御部６を有する。
【００１４】
デコード部１は、命令キャッシュ等から出力される命令ＩＮＳをデコードし、デコードにより得られた命令コードＩＣＤおよびレジスタ番号等を実行制御部２に出力する。以下の説明では、デコードにより得られた命令コードＩＣＤおよびレジスタ番号等の情報は、命令ＩＣＤとも称される。実行制御部２は、デコード部１から出力される命令ＩＣＤを保持する複数のエントリＥＮＴを有し、エントリＥＮＴに保持した命令ＩＣＤを実行可能な順に出力するアウトオブオーダ処理を実行する。但し、実行制御部２は、抑止情報ＩＮＨを受けている間、命令ＩＣＤの出力を抑止する。
【００１５】
命令転送部３は、実行制御部２が出力する命令ＩＣＤを順次転送し、演算実行部４に出力する。例えば、命令転送部３は、クロックに同期して命令ＩＣＤを保持するフリップフロップＦＦを挟んで、ステージＰの処理部とステージＰＴの処理部とを有し、命令パイプラインの一部として機能する。以下の説明では、ステージＰの処理部とステージＰＴの処理部とは、ステージＰ、ステージＰＴとも称される。ステージＰは、実行制御部２から出力される命令ＩＣＤを受信してフリップフロップＦＦに出力する。ステージＰＴは、フリップフロップＦＦに命令を保持し、保持した命令ＩＣＤを演算実行部４に出力する。
【００１６】
命令生成部５は、命令転送部３で転送される命令ＩＣＤが複数の個別命令ＩＣＤ−Ｂ、ＩＣＤ−Ｃを組み合わせた複合命令ＩＣＤ−ＢＣであることを検出した場合、複合命令ＩＣＤ−ＢＣに含まれる個別命令ＩＣＤ−Ｃを生成する。個別命令ＩＣＤ−Ｃは、複合命令ＩＣＤ−ＢＣに含まれる個別命令ＩＣＤ−Ｂ、ＩＣＤ−Ｃのうち、演算実行部４による実行順が２番目の命令である。命令生成部５は、生成した個別命令ＩＣＤ−Ｃを命令転送部３に出力する。例えば、命令生成部５は、ステージＰＴで転送される複合命令ＩＣＤ−ＢＣを検出した場合、複合命令ＩＣＤ−ＢＣに含まれる個別命令ＩＣＤ−Ｃを生成し、生成した個別命令ＩＣＤ−ＣをステージＰに出力する。なお、デコード部１は、複合命令ＩＮＳを複数の個別命令ＩＣＢ−Ｂ、ＩＣＢ−Ｃに分解する機能を持たないため、複合命令ＩＮＳを受信した場合、複合命令ＩＮＳを示す命令コードＩＣＤを生成して実行制御部２に出力する。
【００１７】
演算実行部４は、命令転送部３から転送される命令ＩＣＤが示す演算を実行し、演算結果ＲＳＬＴを出力する。但し、演算実行部４は、複合命令ＩＣＤ−ＢＣを受信した場合、複合命令ＩＣＤ−ＢＣに含まれる複数の個別命令ＩＣＤ−Ｂ、ＩＣＤ−Ｃのうち実行順が最初の個別命令ＩＣＤ−Ｂを実行する。なお、図１では、演算結果ＲＳＬＴを格納するレジスタと、演算結果ＲＳＬＴをレジスタに格納する前に演算実行部４内の演算器にバイパスする経路とは省略される。
【００１８】
抑止制御部６は、命令転送部３のステージＰＴで転送される命令ＩＣＤが複合命令ＩＣＤ−ＢＣであることを検出した場合、実行制御部２に命令の出力を抑止させる抑止情報ＩＮＨを、実行制御部２に出力する。すなわち、抑止制御部６は、命令生成部５が複合命令ＩＣＤ−ＢＣに含まれる個別命令ＩＣＤ−Ｃを命令転送部３に出力する場合、抑止情報ＩＮＨを出力する。
【００１９】
なお、命令生成部５は、ステージＰにおける命令ＩＣＤが複合命令ＩＣＤ−ＢＣであることを検出した場合、複合命令ＩＣＤ−ＢＣに含まれる個別命令ＩＣＤ−Ｂと個別命令ＩＣＤ−ＣとをステージＰに順次出力してもよい。この場合、抑止制御部６は、命令転送部３のステージＰで転送される命令ＩＣＤが複合命令ＩＣＤ−ＢＣであることを検出した場合、抑止情報ＩＮＨを２クロックサイクルにわたり出力する。また、命令転送部３のステージＰは、抑止情報ＩＮＨの出力中、実行制御部２からの命令ＩＣＤの受信を停止し、命令生成部５からの個別命令ＩＣＤ−Ｂ、ＩＣＤ−Ｃを選択してフリップフロップＦＦに出力する選択部を有する。これにより、演算実行部４は、複合命令ＩＣＤ−ＢＣを命令ＩＣＤ−Ｂとして解釈することなく、受信した個別命令ＩＣＤ−Ｂ、ＩＣＤ−Ｃの演算を順次実行することができる。
【００２０】
図２は、図１に示す演算処理装置１００の動作の一例を示す。すなわち、図２は、演算処理装置１００の制御方法の一例を示す。図２に示す例では、複合命令でない通常の単一の命令ＩＮＳ−Ａ、複合命令ＩＮＳ−ＢＣおよび通常の単一の命令ＩＮＳ−Ｄ、ＩＮＳ−Ｅが、デコード部１に順次供給される（図２（ａ））。デコード部１は、受信した命令ＩＮＳ−Ａ、ＩＮＳ−ＢＣ、ＩＮＳ−Ｄ、ＩＮＳ−Ｅを順次デコードする。そして、デコード部１は、デコードにより得られた命令ＩＣＤ−Ａ、ＩＣＤ−ＢＣ、ＩＣＤ−Ｄ、ＩＣＤ−Ｅ（命令コードＩＣＤおよびレジスタ番号等の情報）を実行制御部２に順次出力する（図２（ｂ））。
【００２１】
実行制御部２は、デコード部１から受信した命令ＩＣＤ−Ａ、ＩＣＤ−ＢＣ、ＩＣＤ−Ｄ、ＩＣＤ−Ｅを空いているエントリＥＮＴに保持し、エントリＥＮＴに保持した命令ＩＣＤを実行可能な順に出力する（図２（ｃ））。図２に示す例では、説明を分かりやすくするため、実行制御部２は、エントリＥＮＴに保持した順に命令ＩＣＤを出力する。実行制御部２は、複合命令ＩＣＤ−ＢＣを分解した個別命令ＩＣＤ−Ｂ、ＩＣＤ−Ｃではなく、複合命令ＩＣＤ−ＢＣをエントリＥＮＴに保持する。このため、デコード部１で分解された個別命令ＩＣＤ−Ｂ、ＩＣＤ−Ｃを実行制御部２に保持する場合に比べて、エントリＥＮＴの使用効率を向上することができ、アウトオブオーダの効率を向上することができ、演算処理装置１００Ａの性能を向上することができる。また、エントリＥＮＴの使用効率を向上できるため、エントリＥＮＴの数を抑制することができ、実行制御部２の回路規模の増大を抑制することができる。
【００２２】
命令転送部３は、実行制御部２から受信する命令ＩＣＤ−Ａ、ＩＣＤ−ＢＣを、ステージＰ、ＰＴに順次転送し、ステージＰＴは、命令ＩＣＤ−Ａ、ＩＣＤ−ＢＣを演算実行部４に出力する（図２（ｄ））。命令生成部５は、命令転送部３のステージＰＴで転送される複合命令ＩＣＤ−ＢＣを検出し、複合命令ＩＣＤ−ＢＣに含まれる実行順が２番目の個別命令ＩＣＤ−Ｃを生成し、生成した個別命令ＩＣＤ−Ｃを命令転送部３のステージＰに出力する（図２（ｅ））。
【００２３】
抑止制御部６は、命令転送部３のステージＰＴで転送される命令ＩＣＤが複合命令ＩＣＤ−ＢＣであることを検出した場合、抑止情報ＩＮＨを実行制御部２に出力する（図２（ｆ））。実行制御部２は、抑止情報ＩＮＨの受信に基づいて、命令ＩＣＤの出力を停止する（図２（ｇ））。図２に示す例では、実行制御部２は、命令ＩＣＤ−Ｄを出力中に抑止情報ＩＮＨを受信し、命令ＩＣＤ−Ｄの出力を停止する。抑止制御部６により抑止情報ＩＮＨを出力することで、命令生成部５が出力する命令と実行制御部２が出力する命令とが衝突することを抑止することができ、演算処理装置１００の誤動作を抑止することができる。
【００２４】
命令転送部３のステージＰは、実行制御部２からの命令ＩＣＤ−Ｄの代わりに、命令転送部３からの個別命令ＩＣＤ−Ｃを受信し、受信した個別命令ＩＣＤ−ＣをステージＰＴに転送する（図２（ｈ））。そして、個別命令ＩＣＤ−Ｃは、演算実行部４に出力される。抑止制御部６は、ステージＰＴに個別命令ＩＣＤ−Ｃが転送され、ステージＰＴから複合命令ＩＣＤ−ＢＣが追い出されたことに基づいて、抑止情報ＩＮＨの出力を停止する。これにより、実行制御部２は、出力を停止していた命令ＩＣＤ−Ｄ、ＩＣＤ−Ｅを順次出力する（図２（ｉ））。
【００２５】
演算実行部４は、命令ＩＣＤ−Ａを受信し、演算を実行し、演算結果ＲＳＬＴ−Ａを出力する（図２（ｊ））。演算実行部４は、複合命令ＩＣＤ−ＢＣを受信した場合、複合命令ＩＣＤ−ＢＣに含まれる複数の個別命令ＩＣＤ−Ｂ、ＩＣＤ−Ｃのうち実行順が最初の個別命令ＩＣＤ−Ｂを実行する（図２（ｋ））。例えば、複合命令ＩＣＤ−ＢＣの命令コードと個別命令ＩＣＤ−Ｂの命令コードとは、ビット列の一部が共通である。演算実行部４は、複合命令ＩＣＤ−ＢＣの命令コードに含まれる共通のビット列に基づいて、復号命令ＩＣＤ−ＢＣを個別命令ＩＣＤ−Ｂと解釈して実行する。これにより、演算実行部４は、複合命令ＩＣＤ−ＢＣの受信に基づいて、複合命令ＩＣＤ−ＢＣに含まれる実行順が最初の個別命令ＩＣＤ−Ｂを実行することができる。換言すれば、命令生成部５により個別命令ＩＣＤ−Ｂを生成することなく、個別命令ＩＣＤ−Ｂを実行することができる。なお、上述したように、命令生成部５により、複合命令ＩＣＤ−ＢＣに含まれる個別命令ＩＣＤ−Ｂと個別命令ＩＣＤ−ＣとをステージＰに順次生成してもよい。
【００２６】
この後、演算実行部４は、命令ＩＣＤ−Ｃ、ＩＣＤ−Ｄ、ＩＣＤ−Ｅを順次に受信し、それぞれの演算を実行し、演算結果ＲＳＬＴ−Ｃ、ＲＳＬＴ−Ｄ、ＲＳＬＴ−Ｅを出力する（図２（ｌ））。このように、複合命令ＩＣＤ−ＢＣは、２つの個別命令ＩＣＤ−Ｂ、ＩＣＤ−Ｃに分解されて実行される。
【００２７】
以上、図１に示す実施形態では、デコード部１で分解された個別命令ＩＣＤ−Ｂ、ＩＣＤ−Ｃを実行制御部２に保持する場合に比べて、エントリＥＮＴの使用効率を向上することができ、アウトオブオーダの効率を向上することができる。この結果、デコード部１で分解された個別命令ＩＣＤ−Ｂ、ＩＣＤ−Ｃを実行制御部２に保持する場合に比べて、複合命令ＩＣＤ−ＢＣを実行する演算処理装置１００の性能を向上することができる。
【００２８】
抑止制御部６により抑止情報ＩＮＨを出力することで、命令生成部５が出力する個別命令と実行制御部２が出力する命令とが衝突することを抑止することができ、演算処理装置１００の誤動作を抑止することができる。演算実行部４は、複合命令ＩＣＤ−ＢＣの受信に基づいて個別命令ＩＣＤ−Ｂを実行するため、命令生成部５により個別命令ＩＣＤ−Ｂを生成することなく、個別命令ＩＣＤ−Ｂを実行することができる。
【００２９】
ステージＰＴで検出した複合命令ＩＣＤ−ＢＣに基づいて、２番目に実行される個別命令ＩＣＤ−ＣをステージＰに出力することで、複合命令ＩＣＤ−ＢＣと複合命令ＩＣＤ−ＢＣに含まれる個別命令ＩＣＤ−Ｃとを演算実行部４に連続して転送することができる。複合命令ＩＣＤ−ＢＣと個別命令ＩＣＤ−Ｃとを不可分に演算実行部４に転送できるため、演算実行部４は、複合命令ＩＣＤ−ＢＣに含まれる個別命令ＩＣＤ−Ｂ、ＩＣＤ−Ｃを、クロックサイクルを空けることなく連続して実行できる。例えば、個別命令ＩＣＤ−Ｂの演算結果を個別命令ＩＣＤ−Ｃによる演算で使用する場合、演算結果を演算実行部４に転送する複数のバイパス経路のうち、最短のバイパス経路を使用することができる。この結果、個別命令ＩＣＤ−Ｂ、ＩＣＤ−Ｃが連続して実行されず、最短のバイパス経路が使用されない場合に比べて、演算処理装置１００の性能を向上することができる。
【００３０】
複合命令ＩＣＤ−ＢＣを個別命令ＩＣＤ−Ｂ、ＩＣＤ−Ｃに分解し、演算実行部４で順次実行することで、複合命令ＩＣＤ−ＢＣを実行する専用の演算器を演算実行部４に設けることなく、複合命令ＩＣＤ−ＢＣを実行することができる。これにより、複合命令ＩＣＤ−ＢＣを実行する専用の演算器を演算実行部４に設ける場合に比べて、演算実行部４および演算処理装置１００の回路規模を削減することができる。
【００３１】
これに対して、複合命令がデコード部１により分解され、分解された個別命令が実行制御部２に投入される場合、実行制御部２は、分解した複数の個別命令を発行する間に他の命令を発行する場合がある。分解した個別命令間に他の命令が挿入され、かつ、分解した個別命令間にデータの依存性がある場合、分解した個別命令間でのデータが受け渡しは、レジスタ等を介して実行される。このため、分解した個別命令を不可分に実行する場合に比べて、レジスタ等の使用率が高くなり、アウトオブオーダ用に割り当て可能なレジスタが減るため、アウトオブオーダの効率は低下する。さらに、デコード部１により分解された個別命令を不可分に実行する場合、他の命令の発行を止めて、分解した複数の個別命令を連続して発行する機能が、実行制御部２に追加されるため、実行制御部２の回路規模が増大する。換言すれば、実行制御部２から発行される複合命令を分解する機能を命令転送部３に対応して設けることで、デコード部１により複合命令を分解する場合に比べて、実行制御部２の回路規模の増大を抑止することができる。
【００３２】
図３は、演算処理装置および演算処理装置の制御方法の別の実施形態を示す。図１に示す実施形態で説明した要素と同一または同様の要素については、同一の符号を付し、これ等については、詳細な説明は省略する。
【００３３】
図３に示す演算処理装置１００Ａは、命令キャッシュ１０、命令バッファ１２、デコード部１４、レジスタ管理部１６、リザベーションステーション部１８、バイパス制御部２０、演算実行部２２およびデータキャッシュ２４を有する。演算処理装置１００Ａは、ＣＰＵ等のプロセッサであり、図２では、プロセッサに搭載されるプロセッサコアの一部が示される。なお、演算処理装置１００Ａは、命令ＩＮＳを複数のステージに分けて実行する命令パイプラインを有する。命令パイプラインの例は、図５および図６に示される。
【００３４】
命令キャッシュ１０は、二次キャッシュまたはメインメモリ等から転送される命令ＩＮＳを格納する一次命令キャッシュである。命令バッファ１２は、命令キャッシュ１０から転送される命令ＩＮＳを順次保持し、保持した命令ＩＮＳをデコード部１４に順次出力する。
【００３５】
デコード部１４は、命令バッファ１２から転送される命令ＩＮＳを解読し、解読した命令ＩＮＳに含まれる命令コードＩＣＤ、レジスタ番号ＧＰＲＮおよびバリッドフラグＶをリザベーションステーション部１８に投入する。レジスタ番号ＧＲＰＮは、オペランドデータの格納用のレジスタＧＰＲを示す。デコード部１４は、固定小数点の演算命令をリザベーションステーションＲＳＥ（Reservation Station for Execution）に投入する。デコード部１４は、メモリアクセス命令（ロード命令またはストア命令）をリザベーションステーションＲＳＡ（Reservation Station for Address）に投入する。
【００３６】
さらに、デコード部１４は、解読した命令ＩＮＳが複数の演算命令を組み合わせた複合命令の場合、複合命令の命令コードＩＣＤとともにセカンドフローフラグ２ＦＬの値をリザベーションステーションＲＳＥに投入する。複合命令が、加算命令ａｄｄと減算命令ｓｕｂとを組み合わせた加減算命令ａｄｄｓｕｂの場合、加減算命令ａｄｄｓｕｂを示す命令コードＩＣＤに基づいて、加算命令ａｄｄが固定小数点演算器２８により実行される。そして、固定小数点演算器２８は、図６に示す命令コード操作部ＩＣＤＯＰが加減算命令ａｄｄｓｕｂに基づいて生成する減算命令ｓｕｂを、例えば、加算命令ａｄｄの演算結果を用いて実行する。このように、複合命令は、固定小数点演算器２８を複数回使用する命令である。加減算命令ａｄｄｓｕｂに含まれる加算命令ａｄｄおよび減算命令ｓｕｂは、個別命令の一例である。
【００３７】
デコード部１４は、複合命令を複数の演算命令に分解することなくリザベーションステーションＲＳＥに投入する。これにより、デコード部１４で分解した複数の演算命令をリザベーションステーションＲＳＥに投入する場合に比べて、リザベーションステーションＲＳＥの使用効率を向上することができる。すなわち、デコード部１４で分解した複数の演算命令をリザベーションステーションＲＳＥに投入する場合に比べて、アウトオブオーダの効率を向上することができ、演算処理装置１００Ａの性能を向上することができる。また、リザベーションステーションＲＳＥの使用効率を向上するため、リザベーションステーションＲＳＥの回路規模の増大を抑制することができる。
【００３８】
レジスタ管理部１６は、命令ＩＮＳの実行により得られる演算結果等を格納するレジスタＧＰＲと、演算結果等を一時的に格納するレジスタＧＵＢ（GPR Update Buffer）との対応関係を保持するテーブルＧＰＲＴ(GPR Pending Register Table)を有する。レジスタ管理部１６は、デコード部１４からのレジスタ番号ＧＰＲＮに基づいてテーブルＧＰＲＴを参照し、未使用のレジスタＧＵＢのいずれかをレジスタＧＰＲに対応して割り当てる。
【００３９】
そして、レジスタ管理部１６は、割り当てたレジスタＧＵＢとレジスタＧＰＲとの対応関係を示す情報をテーブルＧＰＲＴに記録し、割り当てたレジスタＧＵＢを示すレジスタアドレスＵＢＡ（Update Buffer Address）を出力する。テーブルＧＰＲＴに記録されるレジスタＧＵＢとレジスタＧＰＲとの対応関係を示す情報は、命令ＩＮＳの実行が完了したことに基づいて破棄される。テーブルＧＰＲＴの例は、図４に示される。なお、演算実行部２２が浮動小数点演算器と、浮動小数点演算に使用するレジスタを有する場合、レジスタ管理部１６は、浮動小数点演算に使用するレジスタに対応してテーブルＧＰＲＴと同様のテーブルを有する。
【００４０】
リザベーションステーション部１８は、固定小数点の演算命令を保持するリザベーションステーションＲＳＥと、ロード命令およびストア命令を保持するリザベーションステーションＲＳＡとを有する。なお、演算実行部２２が浮動小数点演算器を有する場合、リザベーションステーション部１８は、浮動小数点の演算命令が保持されるリザベーションステーションを有する。リザベーションステーションＲＳＥは、デコード部１４から出力される固定小数点データの演算命令用の情報を保持する複数のエントリ（例えば、６４エントリ）を有する。リザベーションステーションＲＳＥは、デコード部１４がデコードした演算命令を保持し、保持した命令を実行可能な順に出力することで、アウトオブオーダ実行を制御する実行制御部の一例である。リザベーションステーションＲＳＡは、デコード部１４から出力されるメモリアクセス命令（ストア命令またはロード命令）用の情報を保持する複数のエントリ（例えば、６４エントリ）を有する。
【００４１】
例えば、リザベーションステーションＲＳＥ、ＲＳＡは、デコード部１４から出力されるバリッドフラグＶの値、命令コードＩＣＤおよびレジスタ番号ＧＰＲＮと、レジスタ管理部１６から出力されるレジスタアドレスＵＢＡとをエントリに保持する。さらに、リザベーションステーションＲＳＥは、セカンドフローフラグ２ＦＬの値をエントリに保持する。
【００４２】
リザベーションステーションＲＳＥは、レジスタ管理部１６から出力されるレジスタアドレスＵＢＡおよびバイパス制御部２０から出力されるバイパスイネーブル信号ＢＰＥＮに基づいて、エントリに保持した演算命令の依存関係を判定する。そして、リザベーションステーションＲＳＥは、エントリに保持した演算命令の中から実行可能な演算命令を選択し、選択した演算命令の情報を演算実行部２２に投入する。演算実行部２２に投入される情報は、命令コードＩＣＤ、バリッドフラグＶの値、レジスタアドレスＲＡＤおよびセカンドフローフラグ２ＦＬの値を含む。レジスタアドレスＲＡＤは、データを読み出すレジスタＧＰＲを示すアドレスと、データを読み出すレジスタＧＵＢを示すアドレスと、データを書き込むレジスタＧＵＢを示すアドレスとを含む。以下の説明では、バリッドフラグＶは、バリッド信号Ｖとも称され、セカンドフローフラグ２ＦＬは、セカンドフロー信号２ＦＬとも称される。
【００４３】
同様に、リザベーションステーションＲＳＡは、レジスタ管理部１６から出力されるレジスタアドレスＵＢＡおよびバイパス制御部２０から出力されるバイパスイネーブル信号ＢＰＥＮに基づいて、エントリに保持したメモリアクセス命令の依存関係を判定する。そして、リザベーションステーションＲＳＡは、エントリに保持したメモリアクセス命令の中から実行可能なロード命令またはストア命令を選択し、選択したストア命令の情報を演算実行部２２に投入する。演算実行部２２に投入される情報は、命令コードＩＣＤ、バリッド信号ＶおよびレジスタアドレスＲＡＤを含む。
【００４４】
バイパス制御部２０は、バイパス管理テーブルＢＰＴＢＬを有する。バイパス管理テーブルＢＰＴＢＬは、各レジスタＧＵＢに対応するバイパスフラグを有する。バイパス制御部２０は、リザベーションステーションＲＳＥ（またはＲＳＡ）から出力されるレジスタ番号ＧＵＢＮに対応するバイパスフラグをセットする。そして、バイパス制御部２０は、セットしたバイパスフラグに対応するバイパスイネーブル信号ＢＰＥＮを、レジスタ番号ＧＵＢＮを出力したリザベーションステーションＲＳＥ（またはＲＳＡ）に出力する。リザベーションステーションＲＳＥ（またはＲＳＡ）は、バイパスイネーブル信号ＢＰＥＮの受信に基づいて、先行の命令の実行により得られるデータを後続の命令にバイパスさせることが可能であると判断し、後続の命令を発行する。
【００４５】
演算実行部２２は、固定小数点演算器２８、アドレス計算演算器３０およびレジスタ部３２を有する。なお、演算実行部２２は、論理演算器を有してもよい。固定小数点演算器２８は、加算または減算を実行する加算器ＡＤＤと、乗算または除算を実行する乗算器ＭＵＬとを有する。加算器ＡＤＤおよび乗算器ＭＵＬは、リザベーションステーションＲＳＥから投入される演算命令に基づいて、レジスタＧＰＲに保持されたデータＤＡＴを用いて演算を実行し、演算結果ＲＳＬＴを次のクロックサイクルでレジスタＧＵＢに格納する。レジスタＧＵＢに格納された演算結果ＲＳＬＴは、演算命令の完了時にレジスタＧＰＲに格納される。
【００４６】
アドレス計算演算器３０は、リザベーションステーションＲＳＡから投入されるメモリアクセス命令に基づいて、レジスタＧＰＲに保持されたデータＤＡＴを用いてアクセスアドレスを計算し、計算したアクセスアドレスをデータキャッシュ２４に出力する。アドレス計算演算器３０は、ロード命令では、データキャッシュ２４から出力されるデータ（ロードデータ）をレジスタＧＵＢに格納する。アドレス計算演算器３０は、ストア命令では、レジスタＧＰＲから出力されるデータ（ストアデータ）を、アクセスアドレスとともにデータキャッシュ２４に出力する。データキャッシュ２４は、二次キャッシュまたはメインメモリ等に保持されるデータを一時的に保持する一次データキャッシュである。
【００４７】
レジスタ部３２は、命令ＩＮＳで指定される複数のレジスタＧＰＲ（General-Purpose Register）と、演算結果等を一時的に格納する複数のレジスタＧＵＢ（GPR Update Buffer）とを有する。各レジスタＧＰＲ、ＧＵＢには、固定小数点データが格納される。例えば、レジスタＧＰＲおよびレジスタＧＵＢの数は、それぞれ６４個であり、レジスタＧＵＢを識別するレジスタアドレスＵＢＡは、６ビットである。
【００４８】
図４は、図３に示すレジスタ管理部１６およびレジスタ部３２の一例を示す。レジスタ管理部１６のテーブルＧＰＲＴは、６４個のレジスタＧＰＲにそれぞれ対応する６４個のエントリＧＰ（ＧＰ０−ＧＰ６３）を有する。各エントリＧＰは、フラグＧＰＲ−ＶおよびレジスタアドレスＵＢＡを格納する領域を有する。各フラグＧＰＲ−Ｖは、レジスタＧＰＲへのレジスタＧＵＢの割り当て時に”０”に設定され、レジスタＧＰＲを指定した命令の実行の完了時に”１”に設定される。レジスタＧＰＲへのレジスタＧＵＢの割り当ては、テーブルＧＰＲＴにレジスタアドレスＵＢＡを格納することにより実行される。
【００４９】
図４に示す例では、レジスタＧＰＲ０に対応するエントリＧＰ０に２進数で”００１１”のレジスタアドレスＵＢＡが格納され、レジスタアドレスＵＢＡ＝”００１１”に対応するレジスタＧＵＢ３がレジスタＧＰＲ０に割り当てられる。レジスタＧＰＲ２に対応するエントリＧＰ２に２進数で”０００１”のレジスタアドレスＵＢＡが格納され、レジスタアドレスＵＢＡ＝”０００１”に対応するレジスタＧＵＢ１がレジスタＧＰＲ２に割り当てられる。レジスタＧＰＲ３に対応するエントリＧＰ３に２進数で”００１０”のレジスタアドレスＵＢＡが格納され、レジスタアドレスＵＢＡ＝”００１０”に対応するレジスタＧＵＢ２がレジスタＧＰＲ３に割り当てられる。
【００５０】
レジスタ管理部１６は、レジスタアドレスＵＢＡをテーブルＧＰＲＴに格納したクロックサイクルで、格納したレジスタアドレスＵＢＡをリザベーションステーションＲＳＥ（またはＲＳＡ）に出力する。各リザベーションステーションＲＳＥ、ＲＳＡは、デコード部１４から出力されるレジスタ番号ＧＰＲＮと、テーブルＧＰＲＴから出力されるレジスタアドレスＵＢＡとに基づいて、図４に一点鎖線で示すレジスタＧＰＲ、ＧＵＢの対応付けを検出する。
【００５１】
図５は、図３に示す演算処理装置１００Ａにおける固定小数点演算器２８に対応する命令パイプラインの概要を示す。命令パイプラインは、命令が順次転送される複数のステージＤ、ＤＴ、Ｐ、ＰＴ、Ｂ１、Ｂ２、Ｘを有する。リザベーションステーションＲＳＥは、ステージＤＴとステージＰの間に設けられ、フリップフロップＦＦの機能を有する。ステージＸは、固定小数点演算器２８を含む。ステージＰ、ＰＴは、リザベーションステーションＲＳＥが出力する命令を順次転送する命令転送部の一例である。
【００５２】
固定小数点の演算命令を実行する命令パイプラインのステージは以下の通りである。なお、以下では、命令パイプラインの各ステージは、サイクルとも称される。
（ａ）ステージＤ(Decode)：デコード部１４が命令をデコードし、デコードした命令コードＩＣＤおよびレジスタ番号ＧＰＲＮ等を出力する。また、デコード部１４からレジスタ番号ＧＰＲＮを受信したレジスタ管理部１６が、レジスタＧＰＲにレジスタＧＵＢを割り当て、割り当てたレジスタＧＵＢを示すレジスタアドレスＵＢＡを出力する。
（ｂ）ステージＤＴ(Decode Transfer)：Ｄサイクルの実行により得られた命令コードＩＣＤ、レジスタ番号ＧＰＲＮおよびレジスタアドレスＵＢＡ等をリザベーションステーションＲＳＥに格納する。リザベーションステーションＲＳＥは、空いているエントリＥＮＴ（ＥＮＴ０、ＥＮＴ１、ＥＮＴ２、...）をセレクタＳＥＬ０により選択し、選択したエントリＥＮＴに、受信した命令コードＩＣＤ、レジスタ番号ＧＰＲＮおよびレジスタアドレスＵＢＡ等を格納する。以下の説明では、命令コードＩＣＤ、レジスタ番号ＧＰＲＮおよびレジスタアドレスＵＢＡ等は、命令とも称される。
（ｃ）ステージＰ(Priority)：リザベーションステーションＲＳＥから演算実行部２２に投入する命令を決定する。リザベーションステーションＲＳＥは、エントリＥＮＴに保持された命令の中から実行可能な命令をセレクタＳＥＬ１により選択し、選択した命令を出力する。
（ｄ）ステージＰＴ(Priority Transfer)：Ｐサイクルで投入を決定した命令を演算実行部２２に投入する。
（ｅ）ステージＢ１、Ｂ２(Buffer)：演算の実行に必要なデータを決定し、レジスタＧＰＲからデータを読み出す。
（ｆ）ステージＸ(Execute)：固定小数点演算器２８で命令を実行し、演算結果を得る。
【００５３】
図６は、図５に示す命令パイプラインにおいて、ステージＰからステージＸまでに関連する回路要素の一例を示す。図５に示すフリップフロップＦＦは、図６においても斜線の矩形で示される。リザベーションステーションＲＳＥのエントリＥＮＴおよびレジスタＧＰＲ、ＧＵＢは、ラッチの機能を有するため、フリップフロップＦＦと同様に斜線の矩形で示される。なお、レジスタＧＵＢからレジスタＧＰＲにオペランドデータを転送する経路は、破線の矢印で示される。また、各ステージＰ、ＰＴ、Ｂ１、Ｂ２、Ｘ内で伝送される信号は、各信号の前にステージＰ、ＰＴ、Ｂ１、Ｂ２、Ｘを示す符号”Ｐ−”、”ＰＴ−”、”Ｂ１−”、”Ｂ２−”、”Ｘ−”が付けられる。
【００５４】
命令パイプラインは、命令コード操作部ＩＣＤＯＰと、ステージＰに設けられるリザベーションステーションＲＳＥのセレクタＳＥＬ１、オアゲートＯＲ１およびセレクタＳＥＬ２、ＳＥＬ３とを有する。なお、命令コード操作部ＩＣＤＯＰは、ステージＰ内に設けられてもよい。また、命令パイプラインは、ステージＰＴに設けられるアンドゲートＡＮＤ１、セレクタＳＥＬ４および比較器ＣＭＰ１、ＣＭＰ２、ＣＭＰ３を有する。さらに、命令パイプラインは、ステージＢ１に設けられるセレクタＳＥＬ５、ＳＥＬ６、ＳＥＬ７と、ステージＢ２に設けられるセレクタＳＥＬ８と、ステージＸに設けられる固定小数点演算器２８とを有する。
【００５５】
ステージＰにおいて、リザベーションステーションＲＳＥのセレクタＳＥＬ１は、リザベーションステーションＲＳＥのエントリＥＮＴに保持された実行可能な命令のいずれかを選択し、選択した命令を出力する。セレクタＳＥＬ１から出力される命令は、バリッド信号Ｐ−Ｖ、セカンドフロー信号Ｐ−２ＦＬ、命令コードＰ−ＩＣＤおよびレジスタアドレスＰ−ＲＡＤを含む。
【００５６】
バリッド信号Ｐ−Ｖ等のバリッド信号Ｖは、論理１の場合、命令（セカンドフロー信号２ＦＬ、命令コードＩＣＤおよびレジスタアドレスＲＡＤ）が有効であることを示す。バリッド信号Ｖは、命令が有効であることを示す有効情報の一例である。論理１のセカンドフロー信号ＰＴ−２ＦＬは、リザベーションステーションＲＳＥから複合命令が出力されたことを示し、論理０のセカンドフロー信号ＰＴ−２ＦＬは、リザベーションステーションＲＳＥから複合命令以外の命令が出力されたことを示す。図３に示すデコード部１４によりセカンドフロー信号２ＦＬを生成し、リザベーションステーションＲＳＥから出力することで、ＰサイクルまたはＰＴサイクルにおいて複合命令を検出する回路を設けることなく、複合命令を検出することができる。セカンドフロー信号２ＦＬは、複数の命令を組み合わせた複合命令を識別する識別情報の一例である。レジスタアドレスＰ−ＲＡＤは、レジスタＧＰＲを示すレジスタ番号ＧＰＲＮ、オペランドデータを書き込むレジスタＧＵＢを示すレジスタアドレスＷＵＢＡおよびオペランドデータを読み出すレジスタＧＵＢを示すレジスタアドレスＲＵＢＡを含む。
【００５７】
アンドゲートＡＮＤ１は、バリッド信号ＰＴ−Ｖとセカンドフロー信号ＰＴ−２ＦＬとがともに論理１の場合、抑止信号ＩＮＨを論理１（有効レベル）に設定する。すなわち、アンドゲートＡＮＤ１は、リザベーションステーションＲＳＥのセレクタＳＥＬ１から複合命令が出力された場合、複合命令のＰＴサイクルで論理１の抑止信号ＩＮＨを出力する。アンドゲートＡＮＤ１は、バリッド信号ＰＴ−Ｖとセカンドフロー信号ＰＴ−２ＦＬとのいずれかが論理０の場合、抑止信号ＩＮＨを論理０（無効レベル）に設定する。アンドゲートＡＮＤ１は、命令コード操作部ＩＣＤＯＰが複合命令に含まれる命令を示す命令コードＰ−ＩＣＤ２を出力する場合、リザベーションステーションＲＳＥに命令の出力を抑止させる抑止信号ＩＮＨを出力する抑止制御部の一例である。抑止信号ＩＮＨは、抑止情報の一例である。
【００５８】
命令コード操作部ＩＣＤＯＰは、ステージＰＴの命令コードＰＴ−ＩＣＤが複合命令を示す場合、２番目に実行される命令を示す命令コードＰ−ＩＣＤ２と、２番目に実行される命令に使用されるレジスタアドレスＰ−ＲＡＤ２とを生成する。命令コード操作部ＩＣＤＯＰは、複合命令に含まれる命令を生成し、生成した命令をステージＰに出力する命令生成部の一例である。
【００５９】
複合命令が加算と減算とを順次実行する加減算命令ａｄｄｓｕｂの場合、最初に実行される命令は加算命令ａｄｄであり、２番目に実行される命令は減算命令ｓｕｂである。複合命令が２つの加算を順次実行するａｄｄａｄｄ命令の場合、最初に実行される命令と２番目に実行される命令は、加算命令ａｄｄである。
【００６０】
なお、命令コード操作部ＩＣＤＯＰは、ステージＰＴにおける命令コードＰ−ＩＣＤが複合命令であることを検出した場合、複合命令に含まれる複数の命令の命令コードＰＴ−ＩＣＤをステージＰに順次出力してもよい。この場合、複合命令に含まれる命令の数に対応するクロックサイクルの期間に抑止信号ＩＮＨを生成する信号生成部が、アンドゲートＡＮＤ１の出力に設けられる。これにより、固定小数点演算器２８は、複合命令を１番目に実行される命令として解釈することなく、受信した命令を実行することができる。
【００６１】
例えば、式（１）に示す加減算命令ａｄｄｓｕｂを実行する場合、加減算命令ａｄｄｓｕｂは、式（２）に示すａｄｄ命令と式（３）に示すｓｕｂ命令とに分解される。そして、式（２）に示すａｄｄ命令が実行された後、式（３）に示すｓｕｂ命令が実行される。式（１）から式（３）において、符号ｇは、レジスタＧＰＲを示す。式（１）は、（ｇ１＋ｇ２）−ｇ３の演算結果をｇ０に格納することを示す。式（２）は、ｇ１＋ｇ２の演算結果をｇ０に格納することを示す。式（３）は、ｇ０−ｇ３の演算結果をｇ０に格納することを示す。
ａｄｄｓｕｂ  ｇ０，ｇ１，ｇ２，ｇ３  ‥‥（１）
ａｄｄ  ｇ０，ｇ１，ｇ２  ‥‥（２）
ｓｕｂ  ｇ０，ｇ０，ｇ３  ‥‥（３）
複合命令を分解した複数の命令において、命令パイプライン内に転送される最初に実行される命令はファーストフローと称され、命令パイプライン内に転送される２番目に実行される命令は、セカンドフローと称される。
【００６２】
式（３）に示すように、命令コード操作部ＩＣＤＯＰは、減算命令ｓｕｂの演算結果を格納するレジスタｇ０に対応するレジスタアドレスＷＵＢＡを、元の複合命令ａｄｄｓｕｂの演算結果を格納するレジスタｇ０に対応するレジスタアドレスＷＵＢＡに設定する。また、命令コード操作部ＩＣＤＯＰは、減算命令ｓｕｂの被減数（ｇ０）に対応するレジスタアドレスＲＵＢＡを、加算命令ａｄｄのレジスタアドレスＷＵＢＡ（ｇ０）と同じ値に設定する。これにより、ファーストフローとして実行される加算命令ａｄｄの演算結果を、セカンドフローとして実行される減算命令ｓｕｂに最短のバイパス経路を使って引き継ぐことができる。
【００６３】
オアゲートＯＲ１は、バリッド信号Ｐ−Ｖまたは抑止信号ＩＮＨを、フリップフロップＦＦを介してバリッド信号ＰＴ−Ｖとして出力する。オアゲートＯＲ１により、複合命令のＰＴサイクルの次のクロックサイクルにおけるバリッド信号ＰＴ−Ｖは、バリッド信号Ｐ−Ｖの論理に拘わりなく論理１（有効レベル）に設定される。これにより、リザベーションステーションＲＳＥから出力されない減算命令ｓｕｂ（セカンドフロー）を命令パイプライン処理により実行することができる。オアゲートＯＲ１は、リザベーションステーションＲＳＥが出力する論理１のバリッド信号ＰＴ−Ｖまたは論理１の抑止信号ＩＮＨをバリッド信号ＰＴ−Ｖとして演算実行部２２に転送する論理和部の一例である。
【００６４】
セレクタＳＥＬ２は、抑止信号ＩＮＨが無効レベル（論理０）を示す場合、リザベーションステーションＲＳＥからのセカンドフロー信号Ｐ−２ＦＬを、フリップフロップＦＦを介してセカンドフロー信号ＰＴ−２ＦＬとして出力する。セレクタＳＥＬ２は、抑止信号ＩＮＨが有効レベル（論理１）を示す場合、論理０を、フリップフロップＦＦを介してセカンドフロー信号ＰＴ−２ＦＬとして出力する。これにより、複合命令に基づいてバリッド信号ＰＴ−Ｖが２クロックサイクルの期間に論理１に設定される場合にも、アンドゲートＡＮＤ１が抑止信号ＩＮＨを論理１に設定し続けることを抑止することができる。この結果、論理１の抑止信号ＩＮＨにより誤った命令がセレクタＳＥＬ２、ＳＥＬ３から出力されることを抑止することができ、演算処理装置１００Ａの誤動作を抑止することができる。セレクタＳＥＬ２は、抑止信号ＩＮＨの論理に基づいて、リザベーションステーションＲＳＥから出力されるセカンドフロー信号ＰＴ−２ＦＬ、または命令が複合命令でないことを示す論理０を選択する第１の選択部の一例である。
【００６５】
セレクタＳＥＬ３は、抑止信号ＩＮＨが無効レベル（論理０）を示す場合、命令コードＰ−ＩＣＤおよびレジスタアドレスＰ−ＲＡＤを、フリップフロップＦＦを介して命令コードＰＴ−ＩＣＤおよびレジスタアドレスＰＴ−ＲＡＤとして出力する。セレクタＳＥＬ３は、抑止信号ＩＮＨが有効レベル（論理１）を示す場合、命令コードＰＴ−ＩＣＤ２およびレジスタアドレスＰＴ−ＲＡＤ２を、フリップフロップＦＦを介して命令コードＰＴ−ＩＣＤおよびレジスタアドレスＰＴ−ＲＡＤとして出力する。すなわち、複合命令を示すセカンドフロー信号ＰＴ−２ＦＬにより論理１の抑止信号ＩＮＨが生成された場合、命令コード操作部ＩＣＤＯＰが生成する命令がＰサイクルに投入される。セレクタＳＥＬ３により、リザベーションステーションＲＳＥが出力する命令と、命令コード操作部ＩＣＤＯＰが出力する命令とが衝突することを抑止することができ、演算処理装置１００Ａの誤動作を抑止することができる。セレクタＳＥＬ３は、抑止信号ＩＮＨに基づいて、リザベーションステーションＲＳＥから出力される命令または命令コード操作部ＩＣＤＯＰから出力される命令を選択する第２の選択部の一例である。
【００６６】
なお、リザベーションステーションＲＳＥのセレクタＳＥＬ１は、論理１の抑止信号ＩＮＨを受けている間、命令の出力を停止し、バリッド信号Ｐ−Ｖを論理０に設定する。したがって、論理１の抑止信号ＩＮＨによりセレクタＳＥＬ３が命令コード操作部ＩＣＤＯＰの出力を選択している期間に、リザベーションステーションＲＳＥから命令コードＰ−ＩＣＤおよびレジスタアドレスＰ−ＲＡＤが出力されることを抑止することができる。これにより、命令コードＰ−ＩＣＤおよびレジスタアドレスＰ−ＲＡＤがリザベーションステーションＲＳＥから消失されることを抑止することができ、演算処理装置１００Ａの誤動作を抑止することができる。
【００６７】
比較器ＣＭＰ１、ＣＭＰ２、ＣＭＰ３は、オペランドデータを選択するためのオペランド選択信号ＰＴ−ＯＰＳＥＬを生成する。比較器ＣＭＰ１は、先行する命令のＢ１サイクルのレジスタアドレスＢ１−ＷＵＢＡと、後続の命令のＰＴサイクルのレジスタアドレスＰＴ−ＲＵＢＡとを比較する。比較器ＣＭＰ２は、先行する命令のＢ２サイクルのレジスタアドレスＢ２−ＷＵＢＡと、後続の命令のＰＴサイクルのレジスタアドレスＰＴ−ＲＵＢＡとを比較する。比較器ＣＭＰ３は、先行する命令のＸサイクルのレジスタアドレスＸ−ＷＵＢＡと、後続の命令のＰＴサイクルのレジスタアドレスＰＴ−ＲＵＢＡとを比較する。
【００６８】
そして、各比較器ＣＭＰ１−ＣＭＰ３は、レジスタアドレスＷＵＢＡ、ＲＵＢＡの一致を検出した場合、先行の命令の演算結果（オペランドデータ）を、後続の命令を実行する固定小数点演算器２８にバイパスさせるオペランド選択信号ＰＴ−ＯＰＳＥＬを出力する。なお、各比較器ＣＭＰ１−ＣＭＰ３は、レジスタアドレスＰＴ−ＲＵＢＡとともに、図４に示すフラグＧＰＲ−Ｖの値を受信し、フラグＧＰＲ−Ｖの値が論理１の場合に、上述したオペランド選択信号ＰＴ−ＯＰＳＥＬを出力する。フラグＧＰＲ−Ｖの値が論理１の場合、命令の実行が完了し、レジスタＧＵＢ２に保持されたデータはレジスタＧＰＲ３に移動済みであり、レジスタＧＵＢ２の割り当ては解除されている。この場合、比較器ＣＭＰ１−ＣＭＰ３のいずれかは、セレクタＳＥＬ６の出力をセレクタＳＥＬ７に選択させるオペランド選択信号ＰＴ−ＯＰＳＥＬと、セレクタＳＥＬ７の出力をセレクタＳＥＬ８に選択させるオペランド選択信号ＰＴ−ＯＰＳＥＬとを生成する。
【００６９】
Ｘサイクルの次のクロックサイクルで演算結果はレジスタＧＵＢに書き込まれるため、バイパス処理は実行されない。このため、命令パイプラインは、先行の命令のＸサイクル以降のレジスタアドレスＷＵＢＡと後続の命令のＰＴサイクルのレジスタアドレスＰＴ−ＲＵＢＡとを比較する比較器を持たない。比較器ＣＭＰ１−ＣＭＰ３によるオペランドデータをバイパスさせる制御の例は、図７に示される。
【００７０】
セレクタＳＥＬ４は、レジスタアドレスＸ−ＷＵＢＡを１クロックサイクル遅らせたレジスタアドレスＸ−ＷＵＢＡ２が示すレジスタＧＵＢのいずれかに、固定小数点演算器２８による演算結果ＲＳＬＴを格納する。セレクタＳＥＬ５は、レジスタアドレスＰＴ−ＵＢＡが示すレジスタＧＵＢのいずれかから演算に使用するオペランドデータを読み出す。なお、セレクタＳＥＬ５が読み出すオペランドデータの数は、命令のオペランドの数に依存する。
【００７１】
セレクタＳＥＬ７は、オペランド選択信号Ｂ１−ＯＰＳＥＬに基づいて選択したオペランドデータを、フリップフロップＦＦを介してオペランドデータＢ２−ＯＰとしてセレクタＳＥＬ８に出力する。セレクタＳＥＬ８は、オペランド選択信号Ｂ２−ＯＰＳＥＬに基づいて選択したオペランドデータを、フリップフロップＦＦを介してオペランドデータＸ−ＯＰとして固定小数点演算器２８に出力する。
【００７２】
なお、図６では省略されるが、セレクタＳＥＬ７、ＳＥＬ８は、演算に使用する即値を選択する機能と、固定小数点演算器２８以外の演算器からバイパスされるデータを選択する機能を有する。また、セレクタＳＥＬ７、ＳＥＬ８は、ロード命令により読み出されるデータを選択する機能を有する。
【００７３】
図７は、図５および図６に示す命令パイプラインにおいて、オペランドデータをバイパスさせるタイミングの一例を示す。クロックサイクルは、命令パイプラインを動作させるクロックのサイクルを示す。図７に示すタイミング（ａ）、（ｂ）、（ｃ）、（ｄ）は、先行の命令が加算命令”ａｄｄ  ｇ３，４，ｇ１”であり、後続の命令が加算命令”ａｄｄ  ｇ５，４，ｇ３”である。先行の加算命令ａｄｄは、即値（＝４）とレジスタＧＰＲ１（ｇ１）が保持する値とを加算し、加算結果をレジスタＧＰＲ３（ｇ３）に書き込む命令である。後続の加算命令ａｄｄは、即値（＝４）とレジスタＧＰＲ３（ｇ１）が保持する値とを加算し、加算結果をレジスタＧＰＲ５（ｇ５）に書き込む命令である。
【００７４】
先行の加算命令ａｄｄの加算結果が書き込まれるレジスタＧＰＲ３と、後続の加算命令ａｄｄで加算に使用するレジスタＧＰＲ３とは同じであり、データの依存性がある。先行の加算命令ａｄｄおよび後続の加算命令ａｄｄで使用するレジスタＧＲＲ３には、共通のレジスタＧＵＢ（例えば、ＧＵＢ２）が割り当てられる。なお、図７では、各加算命令ａｄｄにおいて、ＤＴサイクルとＰサイクルとが連続して実行されるが、ＤＴサイクルでリザベーションステーションＲＳＥに投入された命令が、次のクロックサイクルでリザベーションステーションＲＳＥから発行されるとは限らない。
【００７５】
タイミング（ａ）では、図６に示す比較器ＣＭＰ１は、クロックサイクル５において、先行の加算命令ａｄｄのレジスタアドレスＢ１−ＷＵＢＡ（ＧＵＢ２）と後続の加算命令ａｄｄのレジスタアドレスＰＴ−ＲＵＢＡ（ＧＵＢ２）との一致を検出する。そして、比較器ＣＭＰ１は、固定小数点演算器２８の出力をセレクタＳＥＬ８に選択させるオペランド選択信号ＰＴ−ＯＰＳＥＬを生成する。オペランド選択信号ＰＴ−ＯＰＳＥＬは、オペランド選択信号Ｂ１−ＯＰＳＥＬ、Ｂ２−ＯＰＳＥＬとして順次伝達される。セレクタＳＥＬ８は、後続の加算命令ａｄｄのＢ２サイクルにおいて、固定小数点演算器２８の出力を選択することで、先行の加算命令ａｄｄの加算結果（オペランドデータ）を後続の加算命令ａｄｄにバイパスさせる。これにより、先行の加算命令ａｄｄの実行が完了した次のクロックサイクルで、先行の加算命令ａｄｄの実行結果を用いて後続の加算命令ａｄｄを実行することができる。
【００７６】
タイミング（ｂ）では、図６に示す比較器ＣＭＰ２は、クロックサイクル６において、先行の加算命令ａｄｄのレジスタアドレスＢ２−ＷＵＢＡ（ＧＵＢ２）と、後続の加算命令ａｄｄのレジスタアドレスＰＴ−ＲＵＢＡ（ＧＵＢ２）との一致を検出する。そして、比較器ＣＭＰ２は、固定小数点演算器２８の出力をフリップフロップＦＦで１クロックサイクル遅らせた加算結果をセレクタＳＥＬ８に選択させるオペランド選択信号ＰＴ−ＯＰＳＥＬを生成する。セレクタＳＥＬ８は、後続の加算命令ａｄｄのＢ２サイクルにおいて、固定小数点演算器２８の出力に接続されたフリップフロップＦＦの出力を選択することで、先行の加算命令ａｄｄの加算結果を後続の加算命令ａｄｄにバイパスさせる。これにより、先行の加算命令ａｄｄの実行が完了した２クロックサイクル後に、先行の加算命令ａｄｄの実行結果を用いて後続の加算命令ａｄｄを実行することができる。
【００７７】
タイミング（ｃ）では、図６に示す比較器ＣＭＰ３は、クロックサイクル７において、先行の加算命令ａｄｄのレジスタアドレスＸ−ＷＵＢＡ（ＧＵＢ２）と、後続の加算命令ａｄｄのレジスタアドレスＰＴ−ＲＵＢＡ（ＧＵＢ２）との一致を検出する。そして、比較器ＣＭＰ３は、固定小数点演算器２８の出力をフリップフロップＦＦで１クロックサイクル遅らせた加算結果をＢ１サイクルでセレクタＳＥＬ７に選択させるオペランド選択信号ＰＴ−ＯＰＳＥＬを生成する。また、比較器ＣＭＰ３は、セレクタＳＥＬ７が選択した加算結果をＢ２サイクルでセレクタＳＥＬ８に選択させるオペランド選択信号ＰＴ−ＯＰＳＥＬを生成する。セレクタＳＥＬ７、ＳＥＬ８は、後続の加算命令ａｄｄのＢ１、Ｂ２サイクルにおいて、固定小数点演算器２８の出力に接続されたフリップフロップＦＦの出力を順次選択することで、先行の加算命令ａｄｄの加算結果を後続の加算命令ａｄｄにバイパスさせる。これにより、先行の加算命令ａｄｄの実行が完了した３クロックサイクル後に、先行の加算命令ａｄｄの実行結果を用いて後続の加算命令ａｄｄを実行することができる。
【００７８】
タイミング（ｄ）では、各比較器ＣＭＰ１−ＣＭＰ３は、いずれのクロックサイクルにおいても先行の加算命令ａｄｄのレジスタアドレスＰＴ−ＲＵＢＡ（ＧＵＢ２）と、後続の加算命令ａｄｄのレジスタアドレスＷＵＢＡとの一致を検出しない。この場合、後続の加算命令ａｄｄの加算結果をレジスタＧＵＢに格納する前にバイパスさせる動作は実行されず、後続の加算命令ａｄｄに使用する先行の加算命令ａｄｄの加算結果は、レジスタＧＵＢから読み出される。タイミング（ｄ）では、比較器ＣＭＰ１−ＣＭＰ３のいずれかは、セレクタＳＥＬ５の出力（すなわち、レジスタＧＵＢ２に格納された加算結果）をセレクタＳＥＬ７に選択させるオペランド選択信号ＰＴ−ＯＰＳＥＬを生成する。また、比較器ＣＭＰ１−ＣＭＰ３のいずれかは、セレクタＳＥＬ７が選択したオペランドデータをＢ２サイクルでセレクタＳＥＬ８に選択させるオペランド選択信号ＰＴ−ＯＰＳＥＬを生成する。そして、セレクタＳＥＬ７、ＳＥＬ８は、後続の加算命令ａｄｄのＢ１、Ｂ２サイクルにおいて、レジスタＧＵＢ２に格納された先行の加算命令ａｄｄの加算結果を順次選択する。
【００７９】
セレクタＳＥＬ７によるレジスタＧＵＢ２の出力の選択は、テーブルＧＰＲＴ（図４）においてレジスタＧＵＢ２を割り当てたレジスタＧＰＲ３に対応するエントリＧＰ３のフラグＧＰＲ−Ｖが論理０であり、かつ、比較器ＣＭＰ１−ＣＭＰ３のいずれの比較結果も一致しない場合に実行される。テーブルＧＰＲＴのレジスタＧＰＲ３に対応するエントリＧＰ３のフラグＧＰＲ−Ｖが論理１の場合、命令の実行が完了し、レジスタＧＵＢ２に保持されたデータはレジスタＧＰＲ３に移動済みであり、レジスタＧＵＢ２の割り当ては解除されている。この場合、比較器ＣＭＰ１−ＣＭＰ３の比較結果に拘わらず、セレクタＳＥＬ６、ＳＥＬ７、ＳＥＬ８により、レジスタＧＰＲ３に格納されたオペランドデータが選択される。
【００８０】
図８は、図３に示す演算処理装置１００Ａの動作の一例を示す。すなわち、図８は、演算処理装置１００Ａの制御方法の一例を示す。図８では、式（１）に示す加減算命令” ａｄｄｓｕｂ  ｇ０，ｇ１，ｇ２，ｇ３”が実行される。命令パイプラインは、加減算命令ａｄｄｓｕｂを、加算命令ａｄｄを実行するファーストフロー１ｓｔと、減算命令ｓｕｂを実行するセカンドフロー２ｎｄとに分解して処理する。図８では、説明を分かりやすくするために、レジスタアドレスＲＡＤは、レジスタＧＰＲの番号が示され、レジスタアドレスＵＢＡ（レジスタＧＵＢの番号）の記載は省略される。なお、図８ではＤＴサイクルとＰサイクルとが連続して実行されるが、図７と同様に、ＤＴサイクルでリザベーションステーションＲＳＥに投入された命令が、次のクロックサイクルでリザベーションステーションＲＳＥから発行されるとは限らない。
【００８１】
クロックサイクル３にリザベーションステーションＲＳＥから加減算命令ａｄｄｓｕｂが発行され、加減算命令ａｄｄｓｕｂのＰサイクルが実行される（図８（ａ））。バリッド信号Ｐ−Ｖはおよびセカンドフロー信号Ｐ−２ＦＬは、論理１に設定され、命令コードＰ−ＩＣＤは、”ａｄｄｓｕｂ”に設定される。演算に使用するオペランドデータを読み出すレジスタＧＰＲを示すリード用のレジスタアドレスＰ−ＲＡＤ（Ｒ）は、レジスタＧＰＲ１、ＧＰＲ２、ＧＰＲ３を示す。演算結果を格納するレジスタＧＰＲを示すライト用のレジスタアドレスＰ−ＲＡＤ（Ｗ）は、レジスタＧＰＲ０を示す。
【００８２】
クロックサイクル４において、図示は省略されるが、命令コード操作部ＩＣＤＯＰは、ＰＴサイクルの加減算命令ａｄｄｓｕｂに基づき、命令コードＰ−ＩＣＤ２（ｓｕｂ）と、レジスタアドレスＰ−ＲＡＤ２（Ｐ−ＲＡＤ（Ｒ）、Ｐ−ＲＡＤ（Ｗ））とを生成する。ここで、命令コード操作部ＩＣＤＯＰは、リード用のＰ−ＲＡＤ（Ｒ）を（１，２）から（０，３）に変更するが、ライト用のレジスタアドレスＰ−ＲＡＤ（Ｗ）は”０”のままにする。
【００８３】
クロックサイクル４のＰＴサイクルでは、クロックサイクル３のＰサイクルの情報がそのまま転送される。クロックサイクル４では、リザベーションステーションＲＳＥから命令が発行されないため、バリッド信号Ｐ−Ｖは論理０に設定される（図８（ｂ））。バリッド信号ＰＴ−Ｖおよびセカンドフロー信号ＰＴ−２ＦＬは、ともに論理１のため、図６に示すアンドゲートＡＮＤ１は、抑止信号ＩＮＨを論理１に設定する（図８（ｃ））。これにより、図６に示すオアゲートＯＲ１の出力は論理１に設定され、次のクロックサイクル５のバリッド信号ＰＴ−Ｖは論理１に設定される（図８（ｄ））。リザベーションステーションＲＳＥのセレクタＳＥＬ１は、論理１の抑止信号ＩＮＨを受けている間、Ｐサイクルの命令の出力を停止する。
【００８４】
論理１の抑止信号ＩＮＨにより、セレクタＳＥＬ２は論理０を選択するため、次のクロックサイクル５のセカンドフロー信号ＰＴ−２ＦＬおよび抑止信号ＩＮＨは論理０に設定される（図８（ｅ）、（ｆ））。論理０の抑止信号ＩＮＨにより、リザベーションステーションＲＳＥのセレクタＳＥＬ１は、停止していたＰサイクルの命令の出力を再開する。但し、図８に示す例では、リザベーションステーションＲＳＥから出力される後続の命令の記載は省略される。
【００８５】
図６に示すセレクタＳＥＬ３は、論理１の抑止信号ＩＮＨに基づいて、命令コード操作部ＩＣＤＯＰが生成した命令コードＰ−ＩＣＤ２とレジスタアドレスＰ−ＲＡＤ２とを選択する。これにより、セカンドフローとして実行される減算命令ｓｕｂの情報が、クロックサイクル５のＰＴサイクルに転送され、減算命令ｓｕｂは、ＰＴサイクルから開始される（図８（ｇ））。この後、ファーストフローとして実行される加減算命令ａｄｄｓｕｂ中の加算命令ａｄｄおよびセカンドフローとして実行される減算命令ｓｕｂは、クロックサイクル毎に後段のステージに順次転送される。
【００８６】
クロックサイクル５において、図６に示す比較器ＣＭＰ１は、Ｂ１サイクルのレジスタアドレスＢ１−ＲＡＤ（Ｗ）＝”０”が、ＰＴサイクルのレジスタアドレスＰＴ−ＲＡＤ（Ｒ）＝”０”に一致することを検出する。そして、比較器ＣＭＰ１は、固定小数点演算器２８の出力をセレクタＳＥＬ８に選択させるオペランド選択信号ＰＴ−ＯＰＳＥＬを生成する。
【００８７】
クロックサイクル７において、固定小数点演算器２８は、図示しない命令コードＸ−ＩＣＤ（ａｄｄｓｕｂ）と、レジスタアドレスＸ−ＲＡＤ（Ｒ）＝（１，２，３）とレジスタアドレスＸ−ＲＡＤ（Ｗ）＝”０”とを受ける。固定小数点演算器２８の加算器ＡＤＤは、図１に示す演算実行部４と同様に、複合命令”ａｄｄｓｕｂ  ｇ０，ｇ１，ｇ２，ｇ３”を加算命令”ａｄｄ  ｇ０，ｇ１，ｇ２”と解釈する機能を有する。すなわち、加算器ＡＤＤは、レジスタアドレスＸ−ＲＡＤ（Ｒ）＝（１，２，３）の最初の２つ（１，２）を、加算に使用するレジスタ番号と解釈する。そして、加算器ＡＤＤは、加算命令”ａｄｄ  ｇ０，ｇ１，ｇ２”を実行し、加算結果をレジスタＧＰＲ０に対応するレジスタＧＵＢに格納する（図８（ｈ））。
【００８８】
クロックサイクル５に比較器ＣＭＰ１が生成したオペランド選択信号ＰＴ−ＯＰＳＥＬに基づいて、加算命令ａｄｄによる加算結果は、クロックサイクル８で固定小数点演算器２８にバイパスされる（図８（ｉ））。そして、固定小数点演算器２８は、加算命令ａｄｄによる加算結果を使用して、セカンドフローとして実行される減算命令ｓｕｂを実行し、リザベーションステーションＲＳＥから投入された加減算命令ａｄｄｓｕｂの実行が完了する。
【００８９】
なお、複合命令は、３以上の命令を含んでもよい。この場合、命令コード操作部ＩＣＤＯＰは、２番目以降に実行される命令を示す命令コードＰ−ＩＣＤ２およびレジスタアドレスＰ−ＲＡＤ２を順次に生成する。また、複合命令に含まれる２番目以降に実行される命令の数に対応するクロックサイクルの期間に抑止信号ＩＮＨを生成する信号生成部が、アンドゲートＡＮＤ１の出力に設けられる。
【００９０】
また、複合命令に含まれる１番目に実行される命令が、演算サイクル（Ｘサイクル）をＸ１サイクルとＸ２サイクルとにより実行する命令であるとする。この場合、命令コード操作部ＩＣＤＯＰは、複合命令を検出した次のクロックサイクルで命令コードＰ−ＩＣＤ２とレジスタアドレスＰ−ＲＡＤ２とをＰサイクルに投入する。また、命令パイプラインは、抑止信号ＩＮＨを図８に対して１クロックサイクル遅れて生成する制御回路を有する。
【００９１】
図９は、図３に示す演算処理装置１００Ａの動作の別の例を示す。すなわち、図９は、演算処理装置１００Ａの制御方法の一例を示す。図８と同一または同様の動作については、詳細な説明は省略する。図９は、図７に示すタイミング（ａ）に示す命令の実行時における命令パイプライン内の状態を示す。
【００９２】
クロックサイクル３でリザベーションステーションＲＳＥから加算命令ａｄｄが発行され、Ｐサイクルが実行され、クロックサイクル４でリザベーションステーションＲＳＥから減算命令ｓｕｂが発行され、Ｐサイクルが実行される（図９（ａ）、（ｂ））。クロックサイクル３およびクロックサイクル４において、バリッド信号Ｐ−Ｖは論理１に設定される。加算命令ａｄｄおよび減算命令ｓｕｂは、複合命令ではないため、クロックサイクル３およびクロックサイクル４において、セカンドフロー信号Ｐ−２ＦＬは論理０に設定される（図９（ｃ））。
【００９３】
クロックサイクル４のＰＴサイクルでは、クロックサイクル３のＰサイクルの情報がそのまま転送され、クロックサイクル５のＰＴサイクルでは、クロックサイクル４のＰサイクルの情報がそのまま転送される（図９（ｄ）、（ｅ））。クロックサイクル４およびクロックサイクル５において、命令コード操作部ＩＣＤＯＰは、命令コードＰＴ−ＩＣＤが複合命令でないため、命令コードＰ−ＩＣＤ２およびレジスタアドレスＰＴ−ＲＡＤ２を生成しない。クロックサイクル３およびクロックサイクル４において、セカンドフロー信号ＰＴ−２ＦＬは論理０であるため、抑止信号ＩＮＨは論理０に維持される（図９（ｆ））。これにより、図６に示すセレクタＳＥＬ２は、リザベーションステーションＲＳＥからのセカンドフロー信号Ｐ−２ＦＬを選択し続ける。セレクタＳＥＬ３は、リザベーションステーションＲＳＥからの命令コードＰ−ＩＣＤおよびレジスタアドレスＰ−ＲＡＤを選択し続ける。
【００９４】
クロックサイクル５において、図８と同様に、比較器ＣＭＰ１は、Ｂ１サイクルのレジスタアドレスＢ１−ＲＡＤ（Ｗ）＝”３”が、ＰＴサイクルのレジスタアドレスＰＴ−ＲＡＤ（Ｒ）＝”３”に一致することを検出する。そして、比較器ＣＭＰ１は、固定小数点演算器２８の出力をセレクタＳＥＬ８に選択させるオペランド選択信号ＰＴ−ＯＰＳＥＬを生成する。
【００９５】
クロックサイクル７において、固定小数点演算器２８は、加算命令”ａｄｄ  ｇ３，４，ｇ１”を実行し、加算結果をレジスタＧＰＲ３に対応するレジスタＧＵＢに向けて出力する（図９（ｇ））。クロックサイクル５に比較器ＣＭＰ１が生成したオペランド選択信号ＰＴ−ＯＰＳＥＬに基づいて、加算命令ａｄｄによる加算結果は、クロックサイクル８で固定小数点演算器２８にバイパスされる（図９（ｈ））。減算命令ｓｕｂは、バイパスされた加算結果を用いて実行される。そして、リザベーションステーションＲＳＥから投入された加算命令ａｄｄと減算命令ｓｕｂの実行が完了する。
【００９６】
図１０は、図６に示す命令パイプラインにおけるＰサイクルおよびＰＴサイクルでの動作フローの一例を示す。すなわち、図１０は、演算処理装置１００Ａの制御方法の一例を示す。
【００９７】
まず、ステップＳ１００において、命令パイプラインは、バリッド信号ＰＴ−Ｖが論理１の場合、演算実行部２２に対する命令が発行されたため、処理をステップＳ１１０に移行する。命令パイプラインは、バリッド信号ＰＴ−Ｖが論理０の場合、演算実行部２２に対する命令が発行されていないため、処理を終了する。
【００９８】
ステップＳ１１０において、命令パイプラインは、セカンドフロー信号ＰＴ−２ＦＬが論理１の場合、加減算命令ａｄｄｓｕｂ等の複合命令が発行されたと判定し、複合命令を２つのフローに分解して実行するために、処理をステップＳ１２０に移行する。命令パイプラインは、セカンドフロー信号ＰＴ−２ＦＬが論理０の場合、複合命令以外の通常の命令が発行されたと判定し、処理をステップＳ１５０に移行する。
【００９９】
ステップＳ１２０において、命令パイプラインの命令コード操作部ＩＣＤＯＰは、複合命令を分解することで実行順が２番目の命令（図８では減算命令ｓｕｂ）を生成し、生成した命令を命令コードＰ−ＩＣＤ２およびレジスタアドレスＰ−ＲＡＤ２に設定する。次に、ステップＳ１４０において、命令パイプラインは、抑止信号ＩＮＨを論理０に設定する。そして、命令パイプラインは、次のＰＴサイクルのバリッド信号ＰＴ−Ｖとセカンドフロー信号ＰＴ−２ＦＬとを論理１、論理０にそれぞれ設定し、リザベーションステーションＲＳＥに命令の発行を抑止させる。次に、ステップＳ１５０において、命令パイプラインは、リザベーションステーションＲＳＥが発行した命令を実行し、処理を終了する。
【０１００】
以上、図３から図１０に示す実施形態においても、図１および図２に示す実施形態と同様の効果を得ることができる。例えば、複合命令を複数の個別命令に分解してリザベーションステーションＲＳＥに投入する場合に比べて、エントリＥＮＴの使用効率を向上することができ、アウトオブオーダの効率を向上することができる。この結果、複合命令を分解した複数の個別命令をリザベーションステーションＲＳＥに投入する場合に比べて、複合命令を実行する演算処理装置１００Ａの性能を向上することができる。加算器ＡＤＤは、複合命令ａｄｄｓｕｂを加算命令ａｄｄと解釈するため、最初に実行する加算命令ａｄｄを命令コード操作部ＩＣＤＯＰ等により生成することなく、加算命令ａｄｄを実行することができる。
【０１０１】
複合命令を複数の個別命令に分解することで、複合命令を実行する専用の演算器を演算実行部２２に設けることなく、複合命令を実行することができる。これにより、複合命令を実行する専用の演算器を演算実行部２２に設ける場合に比べて、演算実行部２２および演算処理装置１００Ａの回路規模を削減することができる。また、複合命令を分解した複数の個別命令をリザベーションステーションＲＳＥに保持しないため、複合命令に含まれる複数の個別命令を不可分で実行するための制御機能は、リザベーションステーションＲＳＥに搭載されない。これにより、リザベーションステーションＲＳＥの回路規模の増大を抑止することができる。
【０１０２】
ＰＴサイクルで検出した複合命令に基づいて、２番目に実行される個別命令をステージＰに出力することで、複合命令に含まれる複数の個別命令を連続して実行することができる。このため、分解した個別命令間にデータの依存性がある場合にも、バイパス経路を使用してデータを受け渡すことができる。したがって、分解した個別命令間に他の命令が挿入される場合に比べて、先行の個別命令から後続の個別命令の受け渡すデータがレジスタＧＵＢに保持される期間を短縮することでレジスタＧＵＢの使用率を下げることができ、アウトオブオーダの効率を向上することができる。
【０１０３】
さらに、図３から図１０に示す実施形態では、以下に示す効果を得ることができる。すなわち、図３に示すデコード部１４によりセカンドフロー信号２ＦＬを生成し、リザベーションステーションＲＳＥから出力することで、ＰサイクルまたはＰＴサイクルにおいて複合命令を検出する回路を設けることなく、複合命令を検出することができる。複合命令に基づいてバリッド信号ＰＴ−Ｖが２クロックサイクルの期間に論理１に設定される場合にも、セレクタＳＥＬ２により、アンドゲートＡＮＤ１が抑止信号ＩＮＨを論理１に設定し続けることを抑止することができる。この結果、誤った命令がセレクタＳＥＬ２、ＳＥＬ３から出力されることを抑止することができ、演算処理装置１００Ａの誤動作を抑止することができる。
【０１０４】
セレクタＳＥＬ３により、リザベーションステーションＲＳＥが出力する命令と、命令コード操作部ＩＣＤＯＰが出力する命令とが衝突することを抑止することができ、演算処理装置１００Ａの誤動作を抑止することができる。オアゲートＯＲ１により、論理１の抑止信号ＩＮＨをバリッド信号ＰＴ−Ｖとして転送することで、命令コード操作部ＩＣＤＯＰが出力する命令コードＰ−ＩＣＤ２に対応するバリッド信号ＰＴ−Ｖを生成することができる。これにより、リザベーションステーションＲＳＥから出力されない２番目に実行される個別命令をパイプライン処理により実行することができる。
【０１０５】
なお、図３から図１１に示す実施形態は、固定小数点演算器２８が実行する複合命令をファーストフロー１ｓｔとセカンドフロー２ｎｄとに分解する命令パイプラインに適用する例について説明される。しかしながら、図３から図１０に示す実施形態は、固定小数点演算器２８と論理演算器とにより実行される複合命令をファーストフロー１ｓｔとセカンドフロー２ｎｄとに分解する命令パイプラインに適用されてもよい。また、図３から図１１に示す実施形態は、浮動小数点演算器が実行する複合命令をファーストフロー１ｓｔとセカンドフロー２ｎｄとに分解する命令パイプラインに適用されてもよい。
【０１０６】
図１１は、演算処理装置および演算処理装置の制御方法の別の実施形態において、リザベーションステーションＲＳＥから固定小数点演算器２８までの命令パイプラインの一例を示す。図３から図６と同一または同様の要素については、同じ符号を付し、詳細な説明は省略する。
【０１０７】
図１１に示す演算処理装置１００Ｂの命令パイプラインは、オアゲートＯＲ２、インバータＩＶ１、アンドゲートＡＮＤ２および命令依存チェック部ＩＣＤＣＫが追加されたことを除き、図６に示す構成と同様である。オアゲートＯＲ２、インバータＩＶ１およびアンドゲートＡＮＤ２は、ステージＰＴに設けられる。命令依存チェック部ＩＣＤＣＫは、ステージＰＴの外に設けられるが、ステージＰＴ内に設けられてもよい。演算処理装置１００Ｂのその他の構成は、図３から図５に示す構成と同様である。
【０１０８】
なお、命令コード操作部ＩＣＤＯＰは、図６で説明した機能に加えて、命令コードＰＴ−ＩＣＤおよびレジスタアドレスＰＴ−ＲＡＤを、命令コードＰ−ＩＣＤ２およびレジスタアドレスＰ−ＲＡＤ２として出力する機能を有する。すなわち、命令コード操作部ＩＣＤＯＰは、リザベーションステーションＲＳＥが出力する命令が複合命令でない場合、ステージＰＴで転送された命令をステージＰに出力する機能を有する。
【０１０９】
ところで、図３に示す加算器ＡＤＤから乗算器ＭＵＬへのデータの転送時間は、加算器ＡＤＤと乗算器ＭＵＬとの物理的な距離の増加に依存して長くなる。ここで、物理的な距離は、加算器ＡＤＤの出力から乗算器ＭＵＬの入力まで配線長に対応する。この実施形態では、加算器ＡＤＤと乗算器ＭＵＬとの物理的な距離が、所定の制限値を超える。例えば、加算器ＡＤＤでの加算結果を、固定小数点演算器２８内の加算器ＡＤＤの出力からセレクタＳＥＬおよびフリップフロップＦＦを介して固定小数点演算器２８内の乗算器ＭＵＬにバイパスするために掛かる時間は、１クロックサイクルを超える。このため、加算命令ａｄｄと乗算命令ｍｕｌとが連続して実行され、かつ、データの依存性がある場合、乗算器ＭＵＬによる乗算命令ｍｕｌの演算を１クロックサイクル後ろにずらす制御が命令パイプラインで実行される。固定小数点演算器２８の出力からセレクタＳＥＬおよびフリップフロップＦＦを介して固定小数点演算器２８にバイパス経路は、最短のバイパス経路である。最短のバイパス経路以外のバイパス経路では、乗算器ＭＵＬによる乗算命令ｍｕｌの演算を１クロックサイクル後ろにずらす制御を実行することなく、加算結果は正常にバイパスされる。
【０１１０】
命令依存チェック部ＩＣＤＣＫは、例えば、ＰＴサイクルの命令とＢ１サイクルの命令との依存性のチェックを実行し、所定の依存関係を検出した場合、依存検出信号ＤＥＴを論理１に設定する。所定の依存関係は、先行の加算命令ａｄｄのＢ１サイクルと後続の乗算命令ｍｕｌのＰＴサイクルとが同じクロックサイクルで実行され、かつ、加算命令ａｄｄの演算結果を乗算命令ｍｕｌで使用する場合（データの依存性がある場合）に検出される。上記の所定の依存関係を有する一対の命令は、特定命令と称される。換言すれば、特定命令は、先行命令を実行する演算実行部２２内の演算器が演算結果を出力してから、後続命令を実行する演算実行部２２内の他の演算器に演算結果がバイパスされるまでの時間が、１クロックサイクルを超える組み合わせの命令である。命令依存チェック部ＩＣＤＣＫは、リザベーションステーションＲＳＥが順次出力する先行命令および後続命令が所定の組み合わせ（ａｄｄとｍｕｌ）であり、かつ、先行命令の演算結果を後続命令で使用する特定命令であることを検出する依存検出部の一例である。
【０１１１】
オアゲートＯＲ２は、セカンドフロー信号ＰＴ−２ＦＬまたは依存検出信号ＤＥＴが論理１の場合、論理１をアンドゲートＡＮＤ１に出力する。すなわち、アンドゲートＡＮＤ１は、バリッド信号ＰＴ−Ｖが論理１でリザベーションステーションＲＳＥから複合命令が出力された場合、または命令依存チェック部ＩＣＤＣＫが特定命令を検出した場合、論理１の抑止信号ＩＮＨを出力する。オアゲートＯＲ２およびアンドゲートＡＮＤ１は、命令コード操作部ＩＣＤＯＰが複合命令に含まれる命令を出力する場合、または命令依存チェック部ＩＣＤＣＫが特定命令を検出した場合、抑止信号ＩＮＨを出力する抑止制御部の一例である。
【０１１２】
セレクタＳＥＬ２は、図６と同様に、抑止信号ＩＮＨが論理０の場合、リザベーションステーションＲＳＥから出力されるセカンドフロー信号Ｐ−２ＦＬを選択し、抑止信号ＩＮＨが論理１の場合、論理０を選択する。セレクタＳＥＬ３は、図６と同様に、抑止信号ＩＮＨが論理０の場合、リザベーションステーションＲＳＥから出力される命令を選択し、抑止信号ＩＮＨが論理１の場合、命令コード操作部ＩＣＤＯＰから出力される命令を選択する。但し、論理１の抑止信号ＩＮＨは、命令コード操作部ＩＣＤＯＰが複合命令に含まれる個別命令を出力する場合、または命令依存チェック部ＩＣＤＣＫが特定命令を検出した場合に出力される。
【０１１３】
インバータＩＶ１は、依存検出信号ＤＥＴの論理を反転し、反転した論理をアンドゲートＡＮＤ２に出力する。アンドゲートＡＮＤ２は、依存検出信号ＤＥＴが論理０の場合、バリッド信号ＰＴ−Ｖを、フリップフロップＦＦを介してステージＢ１に転送し、依存検出信号ＤＥＴが論理１の場合、バリッド信号ＰＴ−ＶのステージＢ１への転送を遮断する。すなわち、命令依存チェック部ＩＣＤＣＫにより特定命令が検出された次のクロックサイクルのバリッド信号Ｂ１−Ｖは、論理０に設定される。インバータＩＶ１およびアンドゲートＡＮＤ２は、命令依存チェック部ＩＣＤＣＫが特定命令を検出した場合、リザベーションステーションＲＳＥが出力した後続命令に含まれるバリッド信号Ｂ１−Ｖを無効状態に設定する無効設定部の一例である。
【０１１４】
図１２は、図１１に示す命令パイプラインを有する演算処理装置１００Ｂの動作の一例を示す。すなわち、図１２は、図１１に示す命令パイプラインを有する演算処理装置１００Ｂの制御方法の一例を示す。図８と同一または同様の動作については、詳細な説明は省略する。図１２では、加算命令”ａｄｄ  ｇ０，ｇ１，ｇ２”と乗算命令”ｍｕｌ  ｇ２，ｇ０，３”とが、リザベーションステーションＲＳＥから命令パイプラインのＰサイクルに連続して投入される。なお、リザベーションステーションＲＳＥから命令パイプラインに複合命令が投入される場合の動作は、図８と同じである。また、図７および図９に示す動作は、図１１に示す演算処理装置１００Ｂでも実行される。
【０１１５】
加算命令ａｄｄは、レジスタＧＰＲ１（ｇ１）が保持する値とレジスタＧＰＲ２（ｇ２）が保持する値とを加算し、加算結果をレジスタＧＰＲ０（ｇ０）に書き込む命令である。乗算命令ｍｕｌは、レジスタＧＰＲ０（ｇ０）が保持する値と即値（＝３）とを乗算し、乗算結果をレジスタＧＰＲ２（ｇ２）に書き込む命令である。乗算命令ｍｕｌは、加算命令ａｄｄの演算結果（ｇ０）を用いて乗算を実行するため、加算命令ａｄｄと乗算命令ｍｕｌとの間にはデータの依存性がある。
【０１１６】
演算処理装置１００Ｂの性能を向上するため、データの依存性がある場合、演算結果を、レジスタＧＵＢに書きこむ前に固定小数点演算器２８に転送するバイパス制御が実行される。しかしながら、加算命令ａｄｄを実行する加算器ＡＤＤと乗算命令ｍｕｌを実行する乗算器ＭＵＬとが物理的に離れているため、加算命令ａｄｄと乗算命令ｍｕｌとの間でのデータのバイパスは、２クロックサイクルを用いて実行される。この実施形態では、演算結果のバイパスのクロックサイクル数を増加する制御は、リザベーションステーションＲＳＥによる命令の発行制御ではなく、命令パイプライン内で実行される。
【０１１７】
クロックサイクル３でリザベーションステーションＲＳＥから加算命令ａｄｄが発行され、加算命令ａｄｄのＰサイクルが実行される（図１２（ａ））。バリッド信号Ｐ−Ｖは論理１に設定される。加算命令ａｄｄは、複合命令ではないため、セカンドフロー信号Ｐ−２ＦＬは論理０に設定される。命令コードＰ−ＩＣＤは”ａｄｄ”に設定される。リード用のレジスタアドレスＰ−ＲＡＤ（Ｒ）は、レジスタＧＰＲ１、ＧＰＲ２を示し、ライト用のレジスタアドレスＰ−ＲＡＤ（Ｗ）は、レジスタＧＰＲ０を示す。この後、図９に示す加算命令ａｄｄと同様に、クロックサイクル３のＰサイクルの情報が、クロックサイクル毎に次のサイクルに転送される。
【０１１８】
クロックサイクル４でリザベーションステーションＲＳＥから乗算命令ｍｕｌが発行され、乗算命令ｍｕｌのＰサイクルが実行される（図１２（ｂ））。バリッド信号Ｐ−Ｖは論理１に設定される。乗算命令ｍｕｌは、複合命令ではないため、セカンドフロー信号Ｐ−２ＦＬが論理０に設定される。命令コードＰ−ＩＣＤは”ｍｕｌ”に設定される。リード用のレジスタアドレスＰ−ＲＡＤ（Ｒ）は、レジスタＧＰＲ０を示し、ライト用のレジスタアドレスＰ−ＲＡＤ（Ｗ）は、レジスタＧＰＲ２を示す。なお、命令パイプラインは、即値（＝”３”）も保持する。クロックサイクル４のＰサイクルの情報は、次のクロックサイクル５でＰＴサイクルに転送される。
【０１１９】
クロックサイクル５において、図１１に示す命令依存チェック部ＩＣＤＣＫは、命令コードＢ１−ＩＣＤの”ａｄｄ”と、命令コードＰＴ−ＩＣＤの”ｍｕｌ”とを検出する。また、命令依存チェック部ＩＣＤＣＫは、レジスタアドレスＢ１−ＲＡＤ（Ｗ）の”０”と、レジスタアドレスＰＴ−ＲＡＤ（Ｒ）の”０”との一致を検出する。命令依存チェック部ＩＣＤＣＫは、検出結果に基づいて、加算命令ａｄｄと乗算命令ｍｕｌとが、所定の依存関係を有する特定命令であると判定し、依存検出信号ＤＥＴを論理１に設定する（図１２（ｃ））。
【０１２０】
クロックサイクル５において、比較器ＣＭＰ１は、加算命令ａｄｄのレジスタアドレスＢ１−ＲＡＤ（Ｗ）の”０”と後続の加算命令ａｄｄのレジスタアドレスＰＴ−ＲＡＤ（Ｒ）の”０”との一致を検出する。そして、比較器ＣＭＰ１は、固定小数点演算器２８の出力をセレクタＳＥＬ８に選択させるオペランド選択信号ＰＴ−ＯＰＳＥＬを生成する。
【０１２１】
クロックサイクル５において、オアゲートＯＲ２は、論理１の依存検出信号ＤＥＴに基づいて論理１を出力する。アンドゲートＡＮＤ１は、オアゲートＯＲ２の出力とバリッド信号ＰＴ−Ｖとがともに論理１であるため、抑止信号ＩＮＨを論理１に設定する（図１２（ｄ））。アンドゲートＡＮＤ２は、インバータＩＶ１の出力が論理０であるため、バリッド信号ＰＴ−Ｖの論理１に拘わらず、論理０を出力する。すなわち、アンドゲートＡＮＤ２は、論理１の依存検出信号ＤＥＴに基づいて、バリッド信号ＰＴ−Ｖの論理１の出力をマスクする。これにより、クロックサイクル６において、バリッド信号Ｂ１−Ｖは、論理０に設定される（図１１（ｅ））。論理０のバリッド信号Ｂ１−Ｖは、クロックサイクル毎に順次転送されるため、リザベーションステーションＲＳＥから投入された乗算命令ｍｕｌのファーストフロー（１ｓｔ）は、Ｂ１、Ｂ２、Ｘサイクルを実行することなく終了する（図１２（ｆ））。
【０１２２】
オアゲートＯＲ１は、論理１の抑止信号ＩＮＨに基づいて論理１を出力するため、クロックサイクル６のバリッド信号ＰＴ−Ｖは論理１に設定される（図１２（ｇ））。命令コード操作部ＩＣＤＯＰは、クロックサイクル５で受信した命令コードＰＴ−ＩＣＤおよびレジスタアドレスＰＴ−ＲＡＤを、そのまま命令コードＰ−ＩＣＤ２およびレジスタアドレスＰ−ＲＡＤ２として出力する。このため、ＰＴサイクルのクロックサイクル６では、クロックサイクル５と同じ命令コードＰＴ−ＩＣＤおよびレジスタアドレスＰＴ−ＲＡＤが出力される（図１２（ｈ））。すなわち、乗算命令ｍｕｌのファーストフロー１ｓｔを１クロックサイクル後ろにずらしたセカンドフロー２ｎｄがＰＴサイクルから開始される（図１２（ｉ））。
【０１２３】
クロックサイクル６において、命令依存チェック部ＩＣＤＣＫは、命令の依存関係を検出しないため、依存検出信号ＤＥＴを論理０に設定する（図１２（ｊ））。アンドゲートＡＮＤ１は、論理０の依存検出信号ＤＥＴに基づいて、抑止信号ＩＮＨを論理０に設定する（図１２（ｋ））。アンドゲートＡＮＤ２は、論理１のバリッド信号ＰＴ−Ｖと、論理０の依存検出信号ＤＥＴをインバータＩＶ１で反転させた論理とに基づいて、論理１を出力する。これにより、クロックサイクル７において、バリッド信号Ｂ１−Ｖは、論理１に設定される（図１２（ｌ））。この後、加算命令ａｄｄおよびセカンドフロー２ｎｄとして実行される乗算命令ｍｕｌは、クロックサイクル毎に次のステージに順次転送される。
【０１２４】
クロックサイクル７において、固定小数点演算器２８の加算器ＡＤＤは、図示しない命令コードＸ−ＩＣＤ（ａｄｄ）と、レジスタアドレスＸ−ＲＡＤとを受けて演算を実行し、演算結果を出力する（図１２（ｍ））。演算結果は、セレクタＳＥＬ８により選択され、２クロックサイクル後のクロックサイクル９に乗算器ＭＵＬにバイパスされる（図１２（ｎ））。そして、クロックサイクル９において、乗算器ＭＵＬは、バイパスされた演算結果を用いてセカンドフロー２ｎｄの乗算命令ｍｕｌを実行する（図１２（ｏ））。
【０１２５】
図１３は、図１１に示す命令パイプラインを有する演算処理装置１００Ｂの動作の別の例を示す。すなわち、図１３は、図１１に示す命令パイプラインを有する演算処理装置１００Ｂの制御方法の一例を示す。図８および図１２と同一または同様の動作については、詳細な説明は省略する。図１３では、加算命令”ａｄｄ  ｇ０，ｇ１，ｇ２”と乗算命令”ｍｕｌ  ｇ２，ｇ０，３”とが、１クロックサイクルの間隔を空けて、リザベーションステーションＲＳＥから命令パイプラインのステージＰに投入される。図１２と同様に、乗算命令ｍｕｌは、加算命令ａｄｄの演算結果（ｇ０）を用いて乗算を実行するため、加算命令ａｄｄと乗算命令ｍｕｌとの間にはデータの依存性がある。
【０１２６】
加算命令ａｄｄは、クロックサイクル３にリザベーションステーションＲＳＥから発行され、乗算命令ｍｕｌは、クロックサイクル５にリザベーションステーションＲＳＥから発行される（図１３（ａ）、（ｂ））。命令依存チェック部ＩＣＤＣＫは、乗算命令ｍｕｌのＰＴサイクル（クロックサイクル６）において、所定の依存関係を検出しないため、依存検出信号ＤＥＴを論理０に維持する（図１３（ｃ））。オアゲートＯＲ２は、セカンドフロー信号ＰＴ−２ＦＬと依存検出信号ＤＥＴとがともに論理０であるため、論理０をアンドゲートＡＮＤ１に出力する。アンドゲートＡＮＤ１は、オアゲートＯＲ２の出力が論理０であるため、抑止信号ＩＮＨを論理０に維持する（図１３（ｄ））。
【０１２７】
クロックサイクル６において、図１１に示す比較器ＣＭＰ２は、図示しないＢ２サイクルのレジスタアドレスＢ２−ＲＡＤ（Ｗ）＝”０”が、ＰＴサイクルのレジスタアドレスＰＴ−ＲＡＤ（Ｒ）＝”０”に一致することを検出する。そして、比較器ＣＭＰ２は、固定小数点演算器２８の出力をフリップフロップＦＦで１クロックサイクル遅らせた加算結果をセレクタＳＥＬ８に選択させるオペランド選択信号ＰＴ−ＯＰＳＥＬを生成する。この後、加算命令ａｄｄおよび乗算命令ｍｕｌは、クロックサイクル毎に次のステージに順次転送される。
【０１２８】
クロックサイクル７において、固定小数点演算器２８の加算器ＡＤＤは、図示しない命令コードＸ−ＩＣＤ（ａｄｄ）と、レジスタアドレスＸ−ＲＡＤとを受けて演算を実行し、演算結果を出力する（図１３（ｅ））。セレクタＳＥＬ８は、比較器ＣＭＰ２が生成したオペランド選択信号ＰＴ−ＯＰＳＥＬに基づいて、フリップフロップＦＦにより１クロックサイクル遅らせた演算結果を選択することで、演算結果をバイパスする（図１３（ｆ））。そして、クロックサイクル９において、乗算器ＭＵＬは、バイパスされた加算命令ａｄｄの演算結果を用いて乗算命令ｍｕｌを実行する（図１３（ｇ））。
【０１２９】
図１４は、図１１に示す命令パイプラインを有する演算処理装置１００Ｂの動作の別の例を示す。すなわち、図１４は、図１１に示す命令パイプラインを有する演算処理装置１００Ｂの制御方法の一例を示す。図８、図１２および図１３と同一または同様の動作については、詳細な説明は省略する。図１４では、加算命令”ａｄｄ  ｇ０，ｇ１，ｇ２”と減算命令”ｓｕｂ  ｇ２，ｇ０，３”とが、リザベーションステーションＲＳＥから命令パイプラインのステージＰに連続して投入される。減算命令ｓｕｂは、加算命令ａｄｄの演算結果（ｇ０）を用いて減算を実行するため、加算命令ａｄｄと減算命令ｓｕｂとの間にはデータの依存性がある。
【０１３０】
加算命令ａｄｄは、クロックサイクル３にリザベーションステーションＲＳＥから発行され、減算命令ｓｕｂは、クロックサイクル４にリザベーションステーションＲＳＥから発行される（図１４（ａ）、（ｂ））。図１２と同様に、命令依存チェック部ＩＣＤＣＫは、ＰＴサイクルにおいて、所定の依存関係を検出しないため、依存検出信号ＤＥＴを論理０に維持する（図１４（ｃ））。これにより、抑止信号ＩＮＨは、論理０に維持される（図１４（ｄ））。
【０１３１】
クロックサイクル５において、図１１に示す比較器ＣＭＰ１は、Ｂ１サイクルのレジスタアドレスＢ１−ＲＡＤ（Ｗ）＝”０”が、ＰＴサイクルのレジスタアドレスＰＴ−ＲＡＤ（Ｒ）＝”０”に一致することを検出する。そして、比較器ＣＭＰ１は、固定小数点演算器２８の出力をセレクタＳＥＬ８に選択させるオペランド選択信号ＰＴ−ＯＰＳＥＬを生成する。この後、加算命令ａｄｄおよび減算命令ｓｕｂは、クロックサイクル毎に次のステージに順次転送される。
【０１３２】
クロックサイクル７において、固定小数点演算器２８の加算器ＡＤＤは、加算命令ａｄｄを実行し、演算結果を出力する（図１４（ｅ））。セレクタＳＥＬ８は、比較器ＣＭＰ１が生成したオペランド選択信号ＰＴ−ＯＰＳＥＬに基づいて、固定小数点演算器２８から出力された演算結果を選択することで、演算結果をバイパスする（図１４（ｆ））。そして、クロックサイクル８において、加算器ＡＤＤは、バイパスされた演算結果を用いて減算命令ｓｕｂを実行する（図１４（ｇ））。
【０１３３】
図１５は、図１１に示す命令パイプラインにおけるＰサイクルおよびＰＴサイクルでの動作フローの一例を示す。すなわち、図１５は、図１１に示す命令パイプラインを有する演算処理装置１００Ｂの制御方法の一例を示す。図１０と同じ処理については、詳細な説明は省略する。図１５は、ステップＳ１１０で否定判定（Ｎｏ）された場合、ステップＳ１２２、Ｓ１２４、Ｓ１２６、Ｓ１２８、Ｓ１３０が実行されることを除き、図１０の処理と同様である。すなわち、ステップＳ１１０において、セカンドフロー信号ＰＴ−２ＦＬが論理１の場合の処理は、図１０と同じである。
【０１３４】
ステップＳ１１０において、セカンドフロー信号ＰＴ−２ＦＬが論理０の場合、処理はステップＳ１２２に移行される。ステップＳ１２２、Ｓ１２４、Ｓ１２６では、連続する２つの命令間に所定の依存関係があるか否か（すなわち、特定命令であるか否か）が検出される。例えば、加算命令ａｄｄのＢ１サイクルと乗算命令ｍｕｌのＰＴサイクルとが同じクロックサイクルで実行され、かつ、加算命令ａｄｄと乗算命令ｍｕｌとの間にデータの依存性があるか否かが検出される。
【０１３５】
ステップＳ１２２において、命令パイプラインは、乗算命令ｍｕｌのＰＴサイクルの場合、処理をステップＳ１２４に移行し、乗算命令ｍｕｌのＰＴサイクルでない場合、処理をステップＳ１５０に移行する。ステップＳ１２４において、命令パイプラインは、Ｂ１サイクルのレジスタアドレスＢ１−ＷＵＢＡとＰＴサイクルのレジスタアドレスＰＴ−ＲＵＢＡとが一致する場合、処理をステップＳ１２６に移行する。一方、命令パイプラインは、Ｂ１サイクルのレジスタアドレスＢ１−ＷＵＢＡとＰＴサイクルのレジスタアドレスＰＴ−ＲＵＢＡとが一致しない場合、処理をステップＳ１５０に移行する。
【０１３６】
ステップＳ１２６において、命令パイプラインは、バリッド信号Ｂ１−Ｖ１が論理１で、サイクルＢ１の命令コードＢ−ＩＣＤが加算命令ａｄｄである場合、特定命令を検出したため、処理をステップＳ１２８に移行する。命令パイプラインは、バリッド信号Ｂ１−Ｖ１が論理０、または、サイクルＢ１の命令コードＢ−ＩＣＤが加算命令ａｄｄでない場合、処理をステップＳ１５０に移行する。
【０１３７】
ステップＳ１２８において、命令パイプラインは、命令コード操作部ＩＣＤＯＰにより、命令コードＰＴ−ＩＣＤおよびレジスタアドレスＰＴ−ＲＡＤを、命令コードＰ−ＩＣＤ２およびレジスタアドレスＰ−ＲＡＤ２に設定する。次に、ステップＳ１３０において、命令パイプラインは、次のクロックサイクルのバリッド信号Ｂ１−Ｖを論理０に設定し、処理をステップＳ１４０に移行する。この後、ステップＳ１４０、Ｓ１５０では、図１０と同じ処理が実行される。
【０１３８】
以上、図１１から図１５に示す実施形態においても、図１から図１０に示す実施形態と同様の効果を得ることができる。例えば、複合命令を命令パイプライン内で複数の個別命令に分解することで、分解された複数の個別命令をリザベーションステーションＲＳＥに投入する場合に比べて、エントリＥＮＴの使用効率を向上することができ、アウトオブオーダの効率を向上することができる。この結果、分解された複数の個別命令をリザベーションステーションＲＳＥに投入する場合に比べて、複合命令を実行する演算処理装置１００Ｂの性能を向上することができる。複合命令に含まれる複数の個別命令を不可分で実行するための制御機能をリザベーションステーションＲＳＥから省くことができるため、リザベーションステーションＲＳＥの回路規模の増大を抑止することができる。アンドゲートＡＮＤ１、オアゲートＯＲ１およびセレクタＳＥＬ２、ＳＥＬ３により、命令パイプライン内に誤った命令が転送されることを抑止することができ、演算処理装置１００Ｂの誤動作を抑止することができる。
【０１３９】
さらに、図１１から図１５に示す実施形態では、以下に示す効果を得ることができる。すなわち、命令パイプライン内に命令依存チェック部ＩＣＤＣＫを設けることで、特定命令を検出する機能をリザベーションステーションＲＳＥに設けることなく、特定命令を検出することができる。例えば、命令依存チェック部ＩＣＤＣＫは、Ｂ１、ＰＴサイクルで転送される命令コードＢ１−ＩＣＤ、ＰＴ−ＩＣＤを比較し、Ｂ１、ＰＴサイクルでそれぞれ転送されるレジスタアドレスＵＢＡを比較することで、特定命令を検出することができる。
【０１４０】
また、命令パイプライン内に命令依存チェック部ＩＣＤＣＫを設けることで、特定命令を検出する機能をリザベーションステーションＲＳＥに設ける場合に比べて、演算処理装置１００Ｂの回路規模の増大を抑止することができる。例えば、リザベーションステーションＲＳＥにより特定命令を検出する場合、全てのエントリＥＮＴに保持された命令コードＩＣＤを相互にチェックする機能が、リザベーションステーションＲＳＥに設けられる。また、特定命令を検出した場合、特定命令のうち後続の命令を先行の命令に対して所定のクロックサイクルを空けて命令パイプライン内に投入する機能が、リザベーションステーションＲＳＥに設けられる。このため、特定命令を検出する機能を有するリザベーションステーションＲＳＥの回路規模は、図１１に示すリザベーションステーションＲＳＥの回路規模に比べて増大する。
【０１４１】
複合命令において２番目に実行される個別命令を生成する命令コード操作部ＩＣＤＯＰを利用して、特定命令における２番目に実行される命令を１クロックサイクルずらす制御を実行することができる。このため、特定命令における２番目に実行される命令を１クロックサイクルずらす制御を実行する回路を新たに設ける場合に比べて、命令パイプラインの回路規模の増大を抑制することができる。
【０１４２】
オアゲートＯＲ２により、複合命令の投入時と特定命令の検出時に抑止信号ＩＮＨを論理１に設定することで、セカンドフロー２ｎｄの命令と、リザベーションステーションＲＳＥから投入される命令とが衝突することを抑止することができる。これにより、命令パイプライン内に誤った命令が転送されることを抑止することができ、演算処理装置１００Ｂの誤動作を抑止することができる。
【０１４３】
インバータＩＶ１とアンドゲートＡＮＤ２とにより、特定命令が検出された次のクロックサイクルのバリッド信号Ｂ１−Ｖを無効にすることで、乗算命令ｍｕｌのファーストフロー１ｓｔのＢ１サイクル以降を無効にすることができる。これにより、命令コード操作部ＩＣＤＯＰが生成する１クロックサイクル遅らせた乗算命令ｍｕｌのセカンドフロー２ｎｄを乗算命令ｍｕｌのファーストフロー１ｓｔと衝突させることなく実行することができる。したがって、加算命令ａｄｄの演算結果を、乗算命令ｍｕｌのセカンドフロー２ｎｄを実行する乗算器ＭＵＬにバイパスすることができる。
【０１４４】
なお、図１１から図１５に示す実施形態は、固定小数点演算器２８が実行する複合命令および特定命令をファーストフロー１ｓｔとセカンドフロー２ｎｄとに分解する命令パイプラインに適用する例について説明される。しかしながら、図１１から図１５に示す実施形態は、固定小数点演算器２８と論理演算器とにより実行される複合命令および特定命令をファーストフロー１ｓｔとセカンドフロー２ｎｄとに分解する命令パイプラインに適用されてもよい。また、図１１から図１５に示す実施形態は、浮動小数点演算器が実行する複合命令および特定命令をファーストフロー１ｓｔとセカンドフロー２ｎｄとに分解する命令パイプラインに適用されてもよい。
【０１４５】
以上の実施形態において説明した発明を整理して、付記として以下の通り開示する。
（付記１）
命令をデコードするデコード部と、
前記デコード部がデコードした命令を保持し、保持した命令を実行可能な順に出力する実行制御部と、
前記実行制御部が出力する命令を順次転送する命令転送部と、
前記命令転送部が転送する命令が複数の個別命令を組み合わせた複合命令である場合、前記複合命令から生成した個別命令を前記命令転送部に出力する命令生成部と、
前記命令転送部が転送した個別命令を実行する演算実行部を有することを特徴とする演算処理装置。
（付記２）
前記命令生成部が前記複合命令に含まれる個別命令を前記命令転送部に出力する場合、前記実行制御部に命令の出力を抑止させる抑止情報を出力する抑止制御部を有することを特徴とする付記１記載の演算処理装置。
（付記３）
前記実行制御部が出力する前記複合命令は、前記複合命令であることを識別する識別情報を含み、
前記抑止制御部は、前記実行制御部が出力する前記識別情報に基づいて、前記抑止情報を出力することを特徴とする付記２記載の演算処理装置。
（付記４）
前記命令転送部は、前記抑止制御部が前記抑止情報を出力しない場合、前記実行制御部が出力する前記識別情報を選択し、前記抑止制御部が前記抑止情報を出力する場合、命令が前記複合命令でないことを示す識別情報を選択する第１の選択部を有し、前記第１の選択部で選択した識別情報を転送することを特徴とする付記３記載の演算処理装置。
（付記５）
前記命令転送部は、前記抑止制御部が前記抑止情報を出力しない場合、前記実行制御部が出力する命令を選択し、前記抑止制御部が前記抑止情報を出力する場合、前記命令生成部が出力する個別命令を選択する第２の選択部を有し、前記第２の選択部で選択した命令を転送することを特徴とする付記２ないし付記４のいずれか１項記載の演算処理装置。
（付記６）
前記実行制御部が出力する命令は、命令が有効であることを示す有効情報を含み、
前記命令転送部は、前記実行制御部が出力する有効情報または前記抑止情報を有効情報として前記演算実行部に転送する論理和部を有することを特徴とする付記２ないし付記５のいずれか１項記載の演算処理装置。
（付記７）
前記命令生成部は、前記実行制御部が前記複合命令を出力する場合、前記複数の個別命令のうち、前記演算実行部による実行順が２番目以降の個別命令を生成し、
前記命令転送部は、前記実行制御部が前記複合命令を出力する場合、前記複合命令の転送に続いて、前記命令生成部が生成する実行順が２番目以降の個別命令を転送し、
前記演算実行部は、前記複合命令を受信した場合、前記複数の命令のうち実行順が最初の命令を実行することを特徴とする付記１ないし付記６のいずれか１項記載の演算処理装置。
（付記８）
前記命令転送部は、
前記実行制御部が出力する命令を受信する第１のステージと、
前記第１のステージから転送される命令を前記演算実行部に出力する第２のステージを有し、
前記命令生成部は、前記第２のステージに転送される命令が前記複合命令の場合、前記実行順が２番目以降の個別命令を前記第１のステージに出力することを特徴とする付記７記載の演算処理装置。
（付記９）
前記実行制御部が順次出力する先行命令および後続命令が、前記先行命令の演算結果を前記後続命令で使用する所定の組み合わせの特定命令であることを検出する依存検出部を有し、
前記命令転送部は、前記実行制御部が出力する命令が前記複合命令の場合、または、前記依存検出部が前記特定命令を検出した場合、前記実行制御部の出力の選択を停止し、前記命令生成部の出力を選択する選択部を有し、
前記命令生成部は、前記実行制御部が出力する命令が前記複合命令の場合、前記複合命令に含まれる個別命令を前記命令転送部に出力し、前記実行制御部が出力する命令が前記複合命令でない場合、前記命令転送部で転送された命令を前記命令転送部に出力することを特徴とする付記１記載の演算処理装置。
（付記１０）
前記命令生成部が前記複合命令に含まれる個別命令を前記命令転送部に出力する場合、または前記依存検出部が前記特定命令を検出した場合、前記実行制御部に命令の出力を抑止させる抑止情報を出力する抑止制御部を有し、
前記選択部は、前記抑止制御部が前記抑止情報を出力しない場合、前記実行制御部が出力する命令を選択し、前記抑止制御部が前記抑止情報を出力する場合、前記命令生成部が出力する命令を選択することを特徴とする付記９記載の演算処理装置。
（付記１１）
前記実行制御部が出力する命令は、命令が有効であることを示す有効情報を含み、
前記命令転送部は、前記依存検出部が前記特定命令を検出した場合、前記実行制御部が出力した前記後続命令に含まれる有効情報を無効状態に設定する無効設定部を有することを特徴とする付記９または付記１０記載の演算処理装置。
（付記１２）
前記特定命令は、前記先行命令を演算する前記演算実行部内の演算器が演算結果を出力してから、前記後続命令を演算する前記演算実行部内の他の演算器に前記演算結果がバイパスされるまでの時間が、１クロックサイクルを超える組み合わせの命令であることを特徴とする付記９ないし付記１１のいずれか１項記載の演算処理装置。
（付記１３）
演算処理装置の制御方法において、
前記演算処理装置が有するデコード部が、命令をデコードし、
前記演算処理装置が有する実行制御部が、前記デコード部がデコードした命令を保持し、保持した命令を実行可能な順に出力し、
前記演算処理装置が有する命令転送部が、前記実行制御部が出力する命令を順次転送し、
前記命令転送部が転送する命令が複数の個別命令を組み合わせた複合命令である場合、前記演算処理装置が有する命令生成部が、前記複合命令から生成した個別命令を前記命令転送部に出力し、
前記演算処理装置が有する演算実行部が、前記命令転送部が転送した個別命令を実行することを特徴とする演算処理装置の制御方法。
（付記１４）
前記演算処理装置が有する抑止制御部が、前記命令生成部が前記複合命令に含まれる命令を前記命令転送部に出力する場合、前記実行制御部に命令の出力を抑止させる抑止情報を出力することを特徴とする付記１３記載の演算処理装置の制御方法。
（付記１５）
前記実行制御部が出力する前記複合命令は、前記複合命令であることを識別する識別情報を含み、
前記抑止制御部は、前記実行制御部が出力する前記識別情報に基づいて、前記抑止情報を出力することを特徴とする付記１４記載の演算処理装置の制御方法。
（付記１６）
前記演算処理装置が有する依存検出部が、前記実行制御部が順次出力する先行命令および後続命令が、前記先行命令の演算結果を前記後続命令で使用する所定の組み合わせの特定命令であることを検出し、
前記命令転送部は、前記実行制御部が出力する命令が前記複合命令の場合、または、前記依存検出部が前記特定命令を検出した場合、前記実行制御部の出力の選択を停止し、前記命令生成部の出力を選択する選択部を有し、
前記命令生成部は、前記実行制御部が出力する命令が前記複合命令の場合、前記複合命令に含まれる命令を前記命令転送部に出力し、前記実行制御部が出力する命令が前記複合命令でない場合、前記命令転送部で転送された命令を前記命令転送部に出力することを特徴とする付記１３記載の演算処理装置の制御方法。
（付記１７）
前記演算処理装置が有する抑止制御部が、前記命令生成部が前記複合命令に含まれる命令を前記命令転送部に出力する場合、または前記依存検出部が前記特定命令を検出した場合、前記実行制御部に命令の出力を抑止させる抑止情報を出力し、
前記選択部は、前記抑止制御部が前記抑止情報を出力しない場合、前記実行制御部が出力する命令を選択し、前記抑止制御部が前記抑止情報を出力する場合、前記命令生成部が出力する命令を選択することを特徴とする付記１６記載の演算処理装置の制御方法。
（付記１８）
前記実行制御部が出力する命令は、命令が有効であることを示す有効情報を含み、
前記命令転送部の無効設定部が、前記依存検出部が前記特定命令を検出した場合、前記実行制御部が出力した前記後続命令に含まれる有効情報を無効状態に設定することを特徴とする付記１６または付記１７記載の演算処理装置の制御方法。
【０１４６】
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずである。したがって、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。
【符号の説明】
【０１４７】
１…デコード部；２…実行制御部；２ＦＬ…セカンドフローフラグ、セカンドフロー信号；３…命令転送部；４…演算実行部；５…命令生成部；６…抑止制御部；１０…命令キャッシュ；１２…命令バッファ；１４…デコード部；１６…レジスタ管理部；１８…リザベーションステーション部；２０…バイパス制御部；２２…演算実行部；２４…データキャッシュ；２８…固定小数点演算器；３０…アドレス計算演算器；３２…レジスタ部；１００、１００Ａ、１００Ｂ…演算処理装置；ＡＮＤ１、ＡＮＤ２…アンドゲート；Ｂ１、Ｂ２…ステージ；ＢＰＴＢＬ…バイパス管理テーブル；ＣＭＰ１、ＣＭＰ２、ＣＭＰ３…比較器；Ｄ…ステージ；ＤＡＴ…データ；ＤＴ…ステージ；ＥＮＴ…エントリ；ＦＦ…フリップフロップ；ＧＰ…エントリ；ＧＰＲ…レジスタ；ＧＰＲＮ…レジスタ番号；ＧＰＲＴ…テーブル；ＧＰＲ−Ｖ…フラグ；ＧＵＢ…レジスタ；ＧＵＢＮ…レジスタ番号；ＩＣＤ…命令コード；ＩＣＤ−ＢＣ…複合命令；ＩＣＤＣＫ…命令依存チェック部；ＩＣＤＯＰ…命令コード操作部；ＩＮＨ…抑止情報、抑止信号；ＩＮＳ…命令；ＩＶ１…インバータ；ＯＰＳＥＬ…オペランド選択信号；ＯＲ１、ＯＲ２…オアゲート；Ｐ、ＰＴ…ステージ；ＲＡＤ…レジスタアドレス；ＲＳＡ、ＲＳＥ…リザベーションステーション；ＲＳＬＴ…演算結果；ＲＵＢＡ…レジスタアドレス；ＳＥＬ１、ＳＥＬ２、ＳＥＬ３、ＳＥＬ４、ＳＥＬ５、ＳＥＬ６、ＳＥＬ７、ＳＥＬ８…セレクタ；ＵＢＡ…レジスタアドレス；Ｖ…バリッドフラグ、バリッド信号；ＷＵＢＡ…レジスタアドレス；Ｘ…ステージ
【図１】
2018045370.tif 000003
【図２】
2018045370.tif 000004
【図３】
2018045370.tif 000005
【図４】
2018045370.tif 000006
【図５】
2018045370.tif 000007
【図６】
2018045370.tif 000008
【図７】
2018045370.tif 000009
【図８】
2018045370.tif 000010
【図９】
2018045370.tif 000011
【図１０】
2018045370.tif 000012
【図１１】
2018045370.tif 000013
【図１２】
2018045370.tif 000014
【図１３】
2018045370.tif 000015
【図１４】
2018045370.tif 000016
【図１５】
2018045370.tif 000017