(57)【要約】【課題】ループ処理の予測により消費電力を低減することができる演算処理装置を提供することを課題とする。【解決手段】演算処理装置は、アドレス生成部（２０１）が生成したアドレスを基に分岐先アドレス及びループ処理を予測する分岐予測部（２０５）と、アドレス生成部が生成したアドレスの命令を格納する命令バッファ部（２０３）と、命令バッファ部に格納された命令をデコードする命令デコード部（２０４）と、予測されたループ処理の命令が命令デコーダによりデコードされたデコード結果又はデコード途中結果を格納し、ループ処理に応じて格納したデコード結果又はデコード途中結果を所定回数出力するループバッファ部（２２２）と、ループバッファ部と命令デコード部の出力のいずれかを選択する選択部（２２３）を有し、ループバッファ部の出力を選択している期間、アドレス生成部、分岐予測部、命令バッファ部及び命令デコード部の動作を停止させる。【選択図】図２
2018005488.tif 000002
【特許請求の範囲】
【請求項１】
命令をフェッチするアドレスを生成するアドレス生成部と、
前記アドレス生成部が生成したアドレスを基に分岐命令の分岐先アドレスを予測し、予測した前記分岐先アドレスを前記アドレス生成部に出力し、前記アドレス生成部が生成したアドレスを基にループ処理を予測する分岐予測部と、
前記アドレス生成部が生成したアドレスに対応する命令を格納する命令バッファ部と、
前記命令バッファ部に格納された命令をデコードする第１の命令デコード部と、
予測された前記ループ処理の命令が前記第１の命令デコード部によりデコードされたデコード結果又はデコード途中結果を格納し、ループ処理に応じて格納した前記デコード結果又は前記デコード途中結果を所定回数出力するループバッファ部と、
前記ループバッファ部の出力と前記第１の命令デコード部の出力とのいずれかを選択する選択部とを有し、
前記選択部が、前記ループバッファ部の出力を選択している期間、前記ループバッファ部が、前記アドレス生成部、前記分岐予測部、前記命令バッファ部及び前記第１の命令デコード部の動作を停止させることを特徴とする演算処理装置。
【請求項２】
前記分岐予測部は、実行部により閾値回数以上のループ回数のループ処理が行われた場合には前記ループ処理を予測することを特徴とする請求項１記載の演算処理装置。
【請求項３】
前記分岐予測部は、前記予測されたループ処理のループ回数を予測し、
前記選択部は、前記予測されたループ回数のループ処理が行われている場合には、前記ループバッファ部の出力を選択し、前記予測されたループ回数のループ処理が終了した場合には、前記第１の命令デコード部の出力を選択し、
前記アドレス生成部、前記分岐予測部、前記命令バッファ部及び前記第１の命令デコード部は、前記予測されたループ回数のループ処理が終了した場合には、動作を開始することを特徴とする請求項１記載の演算処理装置。
【請求項４】
前記ループバッファ部は、前記デコードされたデコード途中結果を格納し、前記格納したデコード途中結果を所定回数出力し、
さらに、前記ループバッファ部が出力するデコード途中結果をデコードする第２の命令デコード部を有することを特徴とする請求項１〜３のいずれか１項に記載の演算処理装置。
【請求項５】
前記ループバッファ部は、前記第１の命令デコード部が出力するデコード結果又はデコード途中結果を格納することを特徴とする請求項１〜４のいずれか１項に記載の演算処理装置。
【請求項６】
前記ループバッファ部は、前記選択部が出力するデコード結果又はデコード途中結果を格納することを特徴とする請求項１〜４のいずれか１項に記載の演算処理装置。
【請求項７】
前記ループバッファ部は、１サイクル当たりに並列に出力する数が１サイクル当たりに並列に入力する数より多いことを特徴とする請求項１〜６のいずれか１項に記載の演算処理装置。
【請求項８】
前記分岐予測部による前記ループ処理の予測が外れたことが判明した場合には、前記アドレス生成部、前記分岐予測部、前記命令バッファ部及び前記第１の命令デコード部は、動作を開始し、前記選択部は、前記第１の命令デコード部の出力を選択することを特徴とする請求項１〜７のいずれか１項に記載の演算処理装置。
【請求項９】
前記選択部は、前記分岐予測部により前記ループ処理が予測され、かつ前記分岐予測部による前記ループ処理の予測が当たったことが判明した場合には、前記ループバッファ部の出力を選択することを特徴とする請求項１〜８のいずれか１項に記載の演算処理装置。
【請求項１０】
演算処理装置の制御方法であって、
前記演算処理装置が有するアドレス生成部が、命令をフェッチするアドレスを生成し、
前記演算処理装置が有する分岐予測部が、前記アドレス生成部が生成したアドレスを基に分岐命令の分岐先アドレスを予測し、予測した前記分岐先アドレスを前記アドレス生成部に出力し、前記アドレス生成部が生成したアドレスを基にループ処理を予測し、
前記演算処理装置が有する命令バッファ部が、前記アドレス生成部が生成したアドレスに対応する命令を格納し、
前記演算処理装置が有する第１の命令デコード部が、前記命令バッファ部に格納された命令をデコードし、
前記演算処理装置が有するループバッファ部が、予測された前記ループ処理の命令が前記第１の命令デコード部によりデコードされたデコード結果又はデコード途中結果を格納し、ループ処理に応じて格納した前記デコード結果又は前記デコード途中結果を所定回数出力し、
前記演算処理装置が有する選択部が、前記ループバッファ部の出力と前記第１の命令デコード部の出力とのいずれかを選択し、
前記選択部が、前記ループバッファ部の出力を選択している期間、前記ループバッファ部が、前記アドレス生成部、前記分岐予測部、前記命令バッファ部及び前記第１の命令デコード部の動作を停止させることを特徴とする演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置及び演算処理装置の制御方法に関する。
【背景技術】
【０００２】
インストラクションオペレーションを記憶するよう構成されたループバッファを備えた装置が知られている（特許文献１参照）。インストラクションオペレーションは、装置のモードがループバッファモードにあるのを検出するのに応答して、ループバッファからディスパッチされる。装置は、ループバッファに結合されたループバッファコントロールユニットを更に備える。ループバッファコントロールユニットは、複数のインストラクションを含むループ候補のスタートから、ループ候補内の各「行う分岐」への距離を追跡する。そして、ループバッファコントロールユニットは、ループ候補のスタートから各「行う分岐」への距離がループ候補の少なくとも所与の繰り返し数について不変であることを検出するのに応答してループバッファモードを開始する。
【０００３】
また、命令記憶手段から読み出された命令が命令解読手段によって解読され命令解読手段から出力された制御情報により命令実行手段が制御されるデータ処理装置が知られている（特許文献２参照）。制御手段は、第１の上限値以下の個数の一連の命令を繰り返し実行すべき内部状態の発生に応じて、繰り返し実行すべき一連の命令を解読した結果得られる制御情報を制御情報記憶手段に保持させ制御情報記憶手段から繰り返し出力させる。それと共に、制御手段は、命令記憶手段及び命令解読手段の動作を事実上停止させる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１４−１３５６５号公報
【特許文献２】特開平９−１１４６６０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
特許文献１は、ループ候補のスタートから各「行う分岐」への距離がループ候補の少なくとも所与の繰り返し数について不変であることを検出するのに応答してループバッファモードを開始する。特許文献２は、第１の上限値以下の個数の一連の命令を繰り返し実行すべき内部状態の発生に応じて、繰り返し実行すべき一連の命令を解読した結果得られる制御情報を制御情報記憶手段に保持させ制御情報記憶手段から繰り返し出力させる。特許文献１及び２は、命令をデコードした結果得られる制御情報を基にループ処理の判断を行うものである。
【０００６】
１つの側面では、本発明の目的は、ループ処理を予測することにより消費電力を低減することができる演算処理装置及び演算処理装置の制御方法を提供することである。
【課題を解決するための手段】
【０００７】
演算処理装置は、命令をフェッチするアドレスを生成するアドレス生成部と、前記アドレス生成部が生成したアドレスを基に分岐命令の分岐先アドレスを予測し、予測した前記分岐先アドレスを前記アドレス生成部に出力し、前記アドレス生成部が生成したアドレスを基にループ処理を予測する分岐予測部と、前記アドレス生成部が生成したアドレスに対応する命令を格納する命令バッファ部と、前記命令バッファ部に格納された命令をデコードする第１の命令デコード部と、予測された前記ループ処理の命令が前記第１の命令デコード部によりデコードされたデコード結果又はデコード途中結果を格納し、ループ処理に応じて格納した前記デコード結果又は前記デコード途中結果を所定回数出力するループバッファ部と、前記ループバッファ部の出力と前記第１の命令デコード部の出力とのいずれかを選択する選択部とを有し、前記選択部が、前記ループバッファ部の出力を選択している期間、前記ループバッファ部が、前記アドレス生成部、前記分岐予測部、前記命令バッファ部及び前記第１の命令デコード部の動作を停止させる。
【発明の効果】
【０００８】
１つの側面では、ループ処理を予測することにより消費電力を低減することができる。
【図面の簡単な説明】
【０００９】
【図１】図１は、第１の実施形態による情報処理装置の構成例を示す図である。
【図２】図２は、演算処理装置の構成例を示す図である。
【図３】図３は、ループキャッシュ部の登録及び読み出しを示す図である。
【図４】図４は、ループキャッシュ部の構成例を示す図である。
【図５】図５は、ループキャッシュメモリへの書き込み動作を示す図である。
【図６】図６は、ループキャッシュメモリの読み出し動作を示す図である。
【図７】図７は、ループキャッシュメモリの他の読み出し動作を示す図である。
【図８】図８は、演算処理装置の制御方法を示すフローチャートである。
【図９】図９は、第２の実施形態による演算処理装置の構成例を示す図である。
【図１０】図１０は、第３の実施形態による演算処理装置の構成例を示す図である。
【図１１】図１１は、第４の実施形態による演算処理装置の構成例を示す図である。
【発明を実施するための形態】
【００１０】
（第１の実施形態）
図１は、第１の実施形態による情報処理装置１００の構成例を示す図である。情報処理装置１００は、例えばサーバであり、複数の演算処理装置１０１、複数のメモリ１０２、及びインターコネクト制御部１０３を有する。演算処理装置１０１は、例えば中央演算処理装置（ＣＰＵ）であり、インターコネクト制御部１０３に接続される。複数の演算処理装置１０１には、それぞれ、複数のメモリ１０２が接続される。インターコネクト制御部１０３は、外部装置１０４に対して入出力制御を行う。
【００１１】
図２は、図１の演算処理装置１０１の構成例を示す図である。演算処理装置１０１は、例えば、スーパースカラプロセッサである。命令フェッチアドレス生成器２０１は、命令をフェッチするアドレスを生成するために、プログラムカウンタ（ＰＣ）２１９又は分岐予測機構２０５から入力した命令アドレスを選択し、選択された命令アドレスの命令フェッチリクエストを１次命令キャッシュメモリ２０２に出力する。分岐予測機構２０５は、分岐予測部であり、命令フェッチアドレス生成器２０１により生成されたアドレスを基に分岐命令が分岐するか否かを予測し、分岐する旨を予測した場合には分岐先アドレスを命令フェッチアドレス生成器２０１に出力する。また、分岐予測機構２０５は、命令フェッチアドレス生成器２０１により生成されたアドレスを基にループ処理を予測し、ループ処理を予測した場合にはループ処理タグＬＯＯＰ＿ＴＡＧを命令バッファ２０３に出力する。１次命令キャッシュメモリ２０２は、命令アドレスの命令フェッチリクエストに応じた命令を命令バッファ２０３に出力する。また、１次命令キャッシュメモリ２０２は、その命令が格納されていない場合には、２次キャッシュメモリ２２０又はメインメモリ２２１に格納されているその命令を命令バッファ２０３に出力する。命令バッファ２０３は、その命令をバッファリングし、プログラムの順番通りに命令デコーダ２０４に命令を供給する。なお、命令バッファ２０３は、分岐予測機構２０５からループ処理タグＬＯＯＰ＿ＴＡＧを入力した場合には、その命令にループ処理タグＬＯＯＰ＿ＴＡＧを付与してバッファリングし、命令デコーダ２０４に命令及びループ処理タグＬＯＯＰ＿ＴＡＧを供給する。命令デコーダ２０４は、第１の命令デコーダであり、命令バッファ２０３に格納されている命令をプログラムの順番通りにデコードし、デコードの結果及びループ処理タグＬＯＯＰ＿ＴＡＧを出力する。
【００１２】
ループキャッシュ部２２２は、ループバッファ部であり、ループ処理タグＬＯＯＰ＿ＴＡＧが付与されている命令を入力した場合には、命令デコーダ２０４によりデコードされた結果を格納し、ループ処理の命令発行順番に応じてその格納した結果をセレクタ２２３に繰り返し出力する。セレクタ２２３は、ループキャッシュ部２２２の出力と命令デコーダ２０４の出力とのいずれかを選択する。具体的には、セレクタ２２３は、ループ処理が予測された場合には、ループキャッシュ部２２２の出力を選択して出力し、ループ処理が予測されていない場合には、命令デコーダ２０４の出力を選択して出力する。
【００１３】
命令フェッチアドレス生成器２０１、分岐予測機構２０５、１次命令キャッシュメモリ２０２、命令バッファ２０３及び命令デコーダ２０４は、セレクタ２２３がループキャッシュ部２２２の出力を選択している期間では、ループキャッシュ部２２２の制御信号２２４に応じて、動作を停止している。命令フェッチアドレス生成器２０１、分岐予測機構２０５、１次命令キャッシュメモリ２０２、命令バッファ２０３及び命令デコーダ２０４は、クロック信号の供給が停止されることにより、動作が停止し、消費電力を低減することができる。
【００１４】
セレクタ２２３は、命令の種類に従って、命令の実行を制御する主記憶オペランドアドレス生成用リザベーションステーション（ＲＳＡ:Reservation Station for Address generate）２０６、固定小数点演算用リザベーションステーション（ＲＳＥ:Reservation Station for Execute）２０７、浮動小数点演算用リザベーションステーション（ＲＳＦ:Reservation Station for Floating）２０８、分岐命令用リザベーションステーション（ＲＳＢＲ:Reservation Station for BRanch）２０９にデコードの結果を出力してエントリを作成する。また、セレクタ２２３は、全てのデコードされた命令を、その順番通りに割り当てられた命令識別子と共に、命令の完了を制御するコミットスタックエントリ（ＣＳＥ:Commit Stack Entry）２１０に出力し、エントリを作成する。ＣＳＥ２１０は、デコードされた命令を命令の実行順番通りに格納するキュー構造のストレージと、キューの情報と各処理パイプからの完了報告を基に完了処理を行う完了処理回路を有する。デコードされた命令は、ＣＳＥ２１０のキューに格納され、命令処理完了の報告を待つ。
【００１５】
デコードされた命令がＲＳＡ２０６、ＲＳＥ２０７、ＲＳＦ２０８にエントリを作成される場合には、固定小数点更新バッファ２１５と浮動小数点更新バッファ２１７に対応するリネーミングを行うことで、アウト・オブ・オーダー実行を行うことが可能となる。各々のリザベーションステーション２０６〜２０９でアウト・オブ・オーダー実行された命令は、完了報告がＣＳＥ２１０に出力される。ＣＳＥ２１０の完了処理回路は、プログラム本来の実行順序に従って順番に、キューに格納された完了報告待ちの命令の中から完了報告に対応する命令を終了させ、資源の更新を行う。
【００１６】
複数のオペランドアドレス生成器２１１は、ＲＳＡ２０６のエントリに応じて、オペランドのアドレスを生成し、１次データキャッシュメモリ２１２に出力する。１次データキャッシュメモリ２１２は、生成されたオペランドアドレスのデータを固定小数点更新バッファ２１５又は浮動小数点更新バッファ２１７に出力する。複数の演算器２１３は、ＲＳＥ２０７のエントリに応じて固定小数点演算を行い、演算の実行結果を固定小数点更新バッファ２１５に格納する。複数の演算器２１４は、ＲＳＦ２０８のエントリに応じて浮動小数点演算を行い、演算の実行結果を浮動小数点更新バッファ２１７に格納する。リザベーションステーション２０６〜２０９から、アウト・オブ・オーダーで実行された命令は、ＣＳＥ２１０の制御によりプログラムの順番通りに命令の完了処理を行い、完了した命令に対してのみ、固定小数点レジスタ２１６や浮動小数点レジスタ２１８やプログラムカウンタ２１９などのプログラマブルな資源の更新を行う。プログラムカウンタ２１９は、現在実行する命令のアドレスを出力する。分岐予測機構２０５は、ＲＳＢＲ２０９の分岐命令完了報告に応じて、分岐命令が分岐するか否かを予測し、次に実行するアドレスを命令フェチアドレス生成器２０１に出力する。
【００１７】
図３は、ループキャッシュ部２２２の登録及び読み出しを示す図である。ループ処理は、アドレス順の命令Ａ，Ｂ，Ｃ，Ｄ，Ｅ，Ｆ，Ｇを有する。命令Ｇは、分岐命令である。分岐命令Ｇは、分岐条件を満たす場合には分岐し、分岐命令Ｇのアドレスより小さい分岐先アドレスの命令Ａに進む。この場合、演算処理装置１０１は、命令Ａ，Ｂ，Ｃ，Ｄ，Ｅ，Ｆ，Ｇを繰り返すループ処理を行う。ループ処理は、命令Ａ，Ｂ，Ｃ，Ｄ，Ｅ，Ｆ，Ｇを繰り返す処理である。また、分岐命令Ｇは、分岐条件を満たさない場合には分岐せず、分岐命令Ｇの次のアドレスの命令に進む。ループキャッシュ部２２２は、命令デコーダ２０４から最大４命令を並列に入力する。しかし、ループキャッシュ部２２２は、分岐命令Ｇの分岐予測のため、分岐命令Ｇで並列同時入力の命令が途切れる。よって、ループキャッシュ部２２２は、第１の入力サイクルでは４個の命令ＡＢＣＤを並列に入力し、第２の入力サイクルでは３個の命令ＥＦＧを並列に入力し、第３の入力サイクルでは４個の命令ＡＢＣＤを並列に入力し、第４の入力サイクルでは３個の命令ＥＦＧを並列に入力する。
【００１８】
ループキャッシュ部２２２は、デコードされた命令Ａ〜Ｇを格納（登録）する。ループキャッシュ部２２２は、供給された順番につめて、デコードされた命令Ａ〜Ｇを格納する。分岐予測機構２０５がループ処理を予測した後、ループキャッシュ部２２２は、ループキャッシュ部２２２に格納した順番でセレクタ２２３に出力し、分岐命令Ｇの後は分岐先アドレスの命令Ａに戻り、デコードされた命令Ａ〜Ｇをセレクタ２２３に繰り返し出力する。そのため、ループキャッシュ部２２２は、分岐命令Ｇの後ろに命令Ａをつめて同時並列にセレクタ２２３に出力できる。よって、ループキャッシュ部２２２は、第１の出力サイクルでは４個の命令ＡＢＣＤを並列に出力し、第２の出力サイクルでは４個の命令ＥＦＧＡを並列に出力し、第３の出力サイクルでは４個の命令ＢＣＤＥを並列に出力し、第４の出力サイクルでは４個の命令ＦＧＡＢを並列に出力する。したがって、ループキャッシュ部２２２は、１サイクル当たりに並列に出力する数が１サイクル当たりに並列に入力する数より多い。ループキャッシュ部２２２を設けることにより、１サイクル当たりに実行可能な命令数が増加し、処理を高速化することができる。
【００１９】
図４は、ループキャッシュ部２２２の構成例を示す図である。ループキャッシュ部２２２は、ループキャッシュ制御部４０３及びループキャッシュメモリ４０８を有する。ループキャッシュ制御部４０３は、生成部４０４〜４０７を有する。
【００２０】
命令フェッチアドレス生成器２０１は、命令フェッチのためのアドレスを１次キャッシュメモリ２０２及び分岐予測機構２０５に出力する。分岐予測機構２０５は、ＲＳＢＲ２０９からの分岐命令Ｇの実行完了報告及び完了した分岐命令Ｇの分岐結果を基に、命令フェッチアドレス生成器２０１が出力するアドレスの命令に対して分岐予測を行い、分岐する旨を予測した場合には分岐先アドレスを命令フェッチアドレス生成器２０１に出力する。
【００２１】
同時に、分岐予測機構２０５は、分岐命令Ｇの実行完了報告及び完了した分岐命令Ｇの分岐結果を基に、命令フェッチアドレス生成器２０１が出力するアドレスの命令がループ処理を構成する分岐命令Ｇであるか否かを予測する。分岐予測機構２０５は、例えば、分岐命令Ｇのアドレスより小さい分岐先アドレスに分岐するループバックの分岐命令Ｇのアドレスを記憶し、そのアドレスの分岐命令Ｇが分岐先アドレスに分岐した旨の実行完了報告を閾値回数以上入力した場合には、ループ処理であることの予測を行う。すなわち、分岐予測機構２０５は、リザベーションステーション２０６〜２０９以降の実行部により閾値回数以上のループ回数のループ処理が行われたことの実行完了報告をＲＳＢＲ２０９から入力した場合には、将来のループ処理を予測し、分岐命令Ｇに付与するためのループ処理タグＬＯＯＰ＿ＴＡＧを命令バッファ２０３に出力する。この時、分岐予測機構２０５は、命令バッファ２０３が分岐命令Ｇを入力するタイミングに合わせて、ループ処理タグＬＯＯＰ＿ＴＡＧを命令バッファ２０３に出力する。
【００２２】
命令バッファ２０３は、分岐予測機構２０５からループ処理タグＬＯＯＰ＿ＴＡＧを入力した場合には、１次命令キャッシュメモリ２０２から入力した分岐命令にループ処理タグＬＯＯＰ＿ＴＡＧを付与してバッファリングし、分岐命令４０１及びループ処理タグＬＯＯＰ＿ＴＡＧを命令デコーダ２０４に出力する。また、命令バッファ２０３は、分岐予測機構２０５からループ処理タグＬＯＯＰ＿ＴＡＧを入力しない場合には、１次命令キャッシュメモリ２０２から入力した命令にループ処理タグＬＯＯＰ＿ＴＡＧを付与せずにバッファリングし、命令４０１を命令デコーダ２０４に出力する。命令デコーダ２０４は、命令４０１をデコードすることによりデコードの結果４０２を生成する。そして、命令デコーダ２０４は、ループ処理タグＬＯＯＰ＿ＴＡＧを入力した場合にはデコードの結果４０２及びループ処理タグＬＯＯＰ＿ＴＡＧを出力し、ループ処理タグＬＯＯＰ＿ＴＡＧを入力しない場合にはデコードの結果４０２を出力する。
【００２３】
生成部４０４は、ループ処理タグＬＯＯＰ＿ＴＡＧを基に、ライトイネーブル信号ＷＲＩＴＥ＿ＥＮＢをループキャッシュメモリ４０８に出力する。生成部４０５は、ループ処理タグＬＯＯＰ＿ＴＡＧを基に、ループコネクト信号ＬＯＯＰ＿ＣＯＮＮＥＣＴをセレクタ２２３及び生成部４０７に出力する。生成部４０６は、ループ処理タグＬＯＯＰ＿ＴＡＧを基に、ライトポインタＩＮＰＴＲをループキャッシュメモリ４０８に出力する。生成部４０７は、ループコネクト信号ＬＯＯＰ＿ＣＯＮＮＥＣＴを基に、リードポインタＯＵＴＰＴＲをループキャッシュメモリ４０８に出力する。
【００２４】
ループ処理タグＬＯＯＰ＿ＴＡＧが入力された場合、１ループを構成する命令は、ループ処理タグＬＯＯＰ＿ＴＡＧが付与された命令Ｇの次の命令Ａから次のループ処理タグＬＯＯＰ＿ＴＡＧが付与された命令Ｇまでの命令である。よって、生成部４０４は、ループ処理タグＬＯＯＰ＿ＴＡＧを入力すると、その次の命令Ａから書き込みを開始するために、ライトイネーブル信号ＷＲＩＴＥ＿ＥＮＢをイネーブル状態にする。ループキャッシュメモリ４０８は、ライトイネーブル信号ＷＲＩＴＥ＿ＥＮＢがイネーブル状態になると、ライトポインタＩＮＰＴＲが示すアドレスに、命令デコーダ２０４が出力するデコードの結果４０２を書き込む。ライトイネーブル信号ＷＲＩＴＥ＿ＥＮＢがイネーブル状態の場合、生成部４０６は、ライトポインタＩＮＰＴＲをインクリメントし、ループキャッシュメモリ４０８は、次のデコードの結果４０２の書き込みを行う。生成部４０４は、再びループ処理タグＬＯＯＰ＿ＴＡＧを入力すると、命令Ｇまでの書き込みを終了するため、ライトイネーブル信号ＷＲＩＴＥ＿ＥＮＢをディセーブル状態にする。ループキャッシュメモリ４０８は、ライトイネーブル信号ＷＲＩＴＥ＿ＥＮＢがディセーブル状態になると、デコードの結果４０２の書き込みを終了する。これにより、１ループを構成する命令Ａ〜Ｇのデコードの結果４０２は、ループキャッシュメモリ４０８に書き込まれる。
【００２５】
次に、生成部４０５は、ループコネクト条件を満たす場合には、ループコネクト信号ＬＯＯＰ＿ＣＯＮＮＥＣＴを活性化状態にする。ループコネクト条件は、例えば、ループキャッシュメモリ４０８に１ループの命令Ａ〜Ｇがオーバーフローせずに正常に書き込まれ、かつ、分岐命令Ｇの分岐予測のとび先アドレスが命令Ａのアドレスと一致する等の条件である。
【００２６】
生成部４０７は、ループコネクト信号ＬＯＯＰ＿ＣＯＮＮＥＣＴが活性化状態になると、リードポインタＯＵＴＰＴＲを更新する。ループキャッシュメモリ４０８は、リードポインタＯＵＴＰＴＲが示すアドレスから、デコードの結果４０９を読み出してセレクタ２２３に出力する。ループコネクト信号ＬＯＯＰ＿ＣＯＮＮＥＣＴが活性化状態の期間では、生成部４０７は、リードポインタＯＵＴＰＴＲを更新し、ループキャッシュメモリ４０８は、ループ処理の命令Ａ〜Ｇのデコードの結果４０９を繰り返し出力する。
【００２７】
セレクタ２２３は、ループコネクト信号ＬＯＯＰ＿ＣＯＮＮＥＣＴが活性化状態である場合には、ループキャッシュメモリ４０８が出力するデコードの結果４０９を選択して出力する。また、セレクタ２２３は、ループコネクト信号ＬＯＯＰ＿ＣＯＮＮＥＣＴが不活性化状態である場合には、命令デコーダ２０４が出力するデコードの結果４０２を選択して出力する。
【００２８】
ループキャッシュ部２２２は、ループコネクト信号ＬＯＯＰ＿ＣＯＮＮＥＣＴが活性化状態である期間では、命令フェッチアドレス生成器２０１、分岐予測機構２０５、１次命令キャッシュメモリ２０２、命令バッファ２０３及び命令デコーダ２０４へのクロック信号の供給を停止させることにより動作を停止させ、消費電力を低減する。
【００２９】
ループキャッシュ部２２２は、分岐予測機構２０５によるループ処理の予測が外れて分岐命令Ｇが分岐先アドレスに分岐しなかったことの実行完了報告をＲＳＢＲ２０９から入力した場合には、命令フェッチアドレス生成器２０１、分岐予測機構２０５、１次命令キャッシュメモリ２０２、命令バッファ２０３及び命令デコーダ２０４の動作を開始させる。さらに、その場合、生成部４０５は、ループコネクト信号ＬＯＯＰ＿ＣＯＮＮＥＣＴを不活性化状態にし、セレクタ２２３は、命令デコーダ２０４が出力するデコードの結果４０２を選択して出力する。
【００３０】
図５は、ループキャッシュメモリ４０８への書き込み動作を示す図である。ループキャッシュメモリ４０８は、サイクル毎に、命令デコーダ２０４から４個の６０ビット書き込みデータＷＲＩＴＥ＿ＤＡＴＡ０［５９：０］、ＷＲＩＴＥ＿ＤＡＴＡ１［５９：０］、ＷＲＩＴＥ＿ＤＡＴＡ２［５９：０］及びＷＲＩＴＥ＿ＤＡＴＡ３［５９：０］を並列に入力する。４個の書き込みデータＷＲＩＴＥ＿ＤＡＴＡ０［５９：０］〜ＷＲＩＴＥ＿ＤＡＴＡ３［５９：０］は、図４のデコードの結果４０２に対応し、例えば図３の４個の命令Ａ〜Ｄのデコードの結果４０２に対応する。６ビットのライトポインタＩＮＰＴＲ［５：０］は、図４のライトポインタＩＮＰＴＲに対応する。
【００３１】
４個のライトイネーブル信号ＷＲＩＴＥ＿ＥＮＢ０〜ＷＲＩＴＥ＿ＥＮＢ３は、図４のライトイネーブル信号ＷＲＩＴＥ＿ＥＮＢに対応する。ライトイネーブル信号ＷＲＩＴＥ＿ＥＮＢ０がイネーブル状態である場合には、書き込みデータＷＲＩＴＥ＿ＤＡＴＡ０［５９：０］が有効であることを示し、書き込みデータＷＲＩＴＥ＿ＤＡＴＡ０［５９：０］はループキャッシュメモリ４０８に書き込まれる。これに対し、ライトイネーブル信号ＷＲＩＴＥ＿ＥＮＢ０がディセーブル状態である場合には、書き込みデータＷＲＩＴＥ＿ＤＡＴＡ０［５９：０］が無効であることを示し、書き込みデータＷＲＩＴＥ＿ＤＡＴＡ０［５９：０］はループキャッシュメモリ４０８に書き込まれない。
【００３２】
同様に、ライトイネーブル信号ＷＲＩＴＥ＿ＥＮＢ１がイネーブル状態である場合には、書き込みデータＷＲＩＴＥ＿ＤＡＴＡ１［５９：０］が有効であることを示し、書き込みデータＷＲＩＴＥ＿ＤＡＴＡ１［５９：０］はループキャッシュメモリ４０８に書き込まれる。これに対し、ライトイネーブル信号ＷＲＩＴＥ＿ＥＮＢ１がディセーブル状態である場合には、書き込みデータＷＲＩＴＥ＿ＤＡＴＡ１［５９：０］が無効であることを示し、書き込みデータＷＲＩＴＥ＿ＤＡＴＡ１［５９：０］はループキャッシュメモリ４０８に書き込まれない。
【００３３】
同様に、ライトイネーブル信号ＷＲＩＴＥ＿ＥＮＢ２がイネーブル状態である場合には、書き込みデータＷＲＩＴＥ＿ＤＡＴＡ２［５９：０］が有効であることを示し、書き込みデータＷＲＩＴＥ＿ＤＡＴＡ２［５９：０］はループキャッシュメモリ４０８に書き込まれる。これに対し、ライトイネーブル信号ＷＲＩＴＥ＿ＥＮＢ２がディセーブル状態である場合には、書き込みデータＷＲＩＴＥ＿ＤＡＴＡ２［５９：０］が無効であることを示し、書き込みデータＷＲＩＴＥ＿ＤＡＴＡ２［５９：０］はループキャッシュメモリ４０８に書き込まれない。
【００３４】
同様に、ライトイネーブル信号ＷＲＩＴＥ＿ＥＮＢ３がイネーブル状態である場合には、書き込みデータＷＲＩＴＥ＿ＤＡＴＡ３［５９：０］が有効であることを示し、書き込みデータＷＲＩＴＥ＿ＤＡＴＡ３［５９：０］はループキャッシュメモリ４０８に書き込まれる。これに対し、ライトイネーブル信号ＷＲＩＴＥ＿ＥＮＢ３がディセーブル状態である場合には、書き込みデータＷＲＩＴＥ＿ＤＡＴＡ３［５９：０］が無効であることを示し、書き込みデータＷＲＩＴＥ＿ＤＡＴＡ３［５９：０］はループキャッシュメモリ４０８に書き込まれない。
【００３５】
例えば、図３において、第３の入力サイクルでは、４個の書き込みデータＷＲＩＴＥ＿ＤＡＴＡ０［５９：０］〜ＷＲＩＴＥ＿ＤＡＴＡ３［５９：０］は、４個の命令Ａ〜Ｄのデコードの結果４０２であり、ループキャッシュメモリ４０８に並列に入力される。この際、４個のライトイネーブル信号ＷＲＩＴＥ＿ＥＮＢ０〜ＷＲＩＴＥ＿ＥＮＢ３はすべてイネーブル状態になる。ループキャッシュメモリ４０８は、第３の入力サイクルでは、ライトポイントＩＮＰＴＲ［５：０］が示すアドレスに、４個の書き込みデータＷＲＩＴＥ＿ＤＡＴＡ０［５９：０］〜ＷＲＩＴＥ＿ＤＡＴＡ３［５９：０］を順に書き込む。
【００３６】
次に、図３において、第４の入力サイクルでは、３個の書き込みデータＷＲＩＴＥ＿ＤＡＴＡ０［５９：０］〜ＷＲＩＴＥ＿ＤＡＴＡ２［５９：０］は、３個の命令Ｅ〜Ｇのデコードの結果４０２であり、ループキャッシュメモリ４０８に並列に入力される。この際、ライトイネーブル信号ＷＲＩＴＥ＿ＥＮＢ０〜ＷＲＩＴＥ＿ＥＮＢ２はイネーブル状態になり、ライトイネーブル信号ＷＲＩＴＥ＿ＥＮＢ３はディセーブル状態になる。ループキャッシュメモリ４０８は、第４の入力サイクルでは、ライトポイントＩＮＰＴＲ［５：０］が示すアドレスに、３個の書き込みデータＷＲＩＴＥ＿ＤＡＴＡ０［５９：０］〜ＷＲＩＴＥ＿ＤＡＴＡ２［５９：０］を順に書き込む。
【００３７】
ループキャッシュメモリ４０８は、最大６０命令のデコード結果を格納することができる。書き込みデータＷＲＩＴＥ＿ＤＡＴＡ０［５９：０］〜ＷＲＩＴＥ＿ＤＡＴＡ３［５９：０］は、それぞれ、ライトイネーブル信号ＷＲＩＴＥ＿ＥＮＢ０〜ＷＲＩＴＥ＿ＥＮＢ３がイネーブル状態である場合に、ループキャッシュメモリ４０８に書き込まれる。ループキャッシュメモリ４０８は、ライトポインタＩＮＰＴＲ［５：０］が示すアドレスから、有効な書き込みデータの数だけ書き込む。ループキャッシュメモリ４０８は、有効な書き込みデータだけ書き込み、生成部４０６はその書き込んだ数だけライトポインタＩＮＰＴＲ［５：０］をインクリメントする。生成部４０６は、ループ処理タグＬＯＯＰ＿ＴＡＧを入力すると、ライトポインタＩＮＰＴＲ［５：０］を０番地にクリアする。ループキャッシュメモリ４０８は、ライトポインタＩＮＰＴＲ［５：０］が示す０番地のアドレスからデコード結果を書き込む。ループキャッシュメモリ４０８には、１ループの命令Ａ〜Ｇのデコード結果が書き込まれる。
【００３８】
図６は、ループキャッシュメモリ４０８の読み出し動作を示す図であり、４個の連続するアドレスの命令を読み出す例を示す。ループバックポインタＬＯＯＰＢＡＣＫ＿ＰＴＲ［５：０］は、１ループの命令Ａ〜Ｇのうちの最後の命令Ｇのデコード結果が書き込まれているアドレスの次のアドレスであり、ライトポインタＩＮＰＴＲ［５：０］が示すアドレスと同じである。生成部４０７は、ループコネクト信号ＬＯＯＰ＿ＣＯＮＮＥＣＴを入力すると、ライトポインタＯＵＴＰＴＲ［５：０］を０番地にクリアする。ループキャッシュメモリ４０８は、リードポインタＯＵＴＰＴＲ［５：０］が示すアドレスから、連続する４個の６０ビット読み出しデータＲＥＡＤ＿ＤＡＴＡ０［５９：０］〜ＲＥＡＤ＿ＤＡＴＡ３［５９：０］を読み出す。読み出しデータＲＥＡＤ＿ＤＡＴＡ０［５９：０］〜ＲＥＡＤ＿ＤＡＴＡ３［５９：０］は、図４のデコードの結果４０９に対応する。生成部４０７は、読み出し毎に、リードポインタＯＵＴＰＴＲ［５：０］をインクリメントする。
【００３９】
図７は、ループキャッシュメモリ４０８の読み出し動作を示す図であり、４個の不連続のアドレスの命令を読み出す例を示す。ループキャッシュメモリ４０８は、リードポインタＯＵＴＰＴＲ［５：０］が示すアドレスから、４個の読み出しデータＲＥＡＤ＿ＤＡＴＡ０［５９：０］〜ＲＥＡＤ＿ＤＡＴＡ３［５９：０］を読み出す。例えば、読み出しデータＲＥＡＤ＿ＤＡＴＡ０［５９：０］〜ＲＥＡＤ＿ＤＡＴＡ２［５９：０］は命令Ｅ〜Ｇのデコード結果に対応し、読み出しデータＲＥＡＤ＿ＤＡＴＡ３［５９：０］は命令Ａのデコード結果に対応する。生成部４０７は、３個の読み出しデータＲＥＡＤ＿ＤＡＴＡ０［５９：０］〜ＲＥＡＤ＿ＤＡＴＡ２［５９：０］をそれぞれ読み出す毎に、リードポインタＯＵＴＰＴＲ［５：０］をインクリメントする。そして、生成部４０７は、リードポインタＯＵＴＰＴＲ［５：０］がループバックポインタＬＯＯＰＢＡＣＫ＿ＰＴＲ［５：０］と同じになった場合には、リードポインタＯＵＴＰＴＲ［５：０］を０番地にクリアする。ループキャッシュメモリ４０８の０番地には、命令Ａのデコード結果が格納されている。これより、ループキャッシュメモリ４０８は、１サイクルで、４個の命令Ｅ，Ｆ，Ｇ，Ａを読み出すことができる。
【００４０】
図８は、演算処理装置１０１の制御方法を示すフローチャートである。ステップＳ８０１では、分岐予測機構２０５は、ループ処理を予測した場合には、分岐命令に付与するためのループ処理タグＬＯＯＰ＿ＴＡＧを命令バッファ２０３に出力する。命令バッファ２０３は、分岐命令にループ処理タグＬＯＯＰ＿ＴＡＧを付与してバッファリングする。次に、ステップＳ８０２では、命令デコーダ２０４は、命令バッファ２０３が出力する命令をデコードし、デコード結果及びループ処理タグＬＯＯＰ＿ＴＡＧを出力する。
【００４１】
次に、ステップＳ８０３では、ループキャッシュ部２２２は、ループ処理タグＬＯＯＰ＿ＴＡＧが付与されているデコード結果を入力した場合には、命令デコーダ２０４が出力するデコード結果をループキャッシュメモリ４０８に登録（格納）する。
【００４２】
次に、ステップＳ８０４では、ループキャッシュ部２２２は、命令バッファ２０３から入力する次のデコード結果にループ処理タグＬＯＯＰ＿ＴＡＧが付与されているか否かを判定する。ループキャッシュ部２２２は、ループ処理タグＬＯＯＰ＿ＴＡＧが付与されていないと判定した場合には、１ループの命令Ａ〜Ｇのデコード結果の登録が完了していないので、ステップＳ８０３に処理を戻す。また、ループキャッシュ部２２２は、ループ処理タグＬＯＯＰ＿ＴＡＧが付与されていると判定した場合には、１ループの命令Ａ〜Ｇのデコード結果の登録が完了しているので、ステップＳ８０５に処理を進める。
【００４３】
ステップＳ８０５では、生成部４０５は、ループコネクト条件を満たしているか否かを判定する。ループコネクト条件は、例えば、ループキャッシュメモリ４０８に１ループの命令Ａ〜Ｇがオーバーフローせずに正常に書き込まれ、かつ、分岐命令Ｇの分岐予測のとび先アドレスが命令Ａのアドレスと一致する等の条件である。生成部４０５は、ループコネクト条件を満たしている場合には、ループコネクト信号ＬＯＯＰ＿ＣＯＮＮＥＣＴを活性化状態にし、ステップＳ８０６に処理を進める。また、生成部４０５は、ループコネクト条件を満たしていない場合には、ループコネクト信号ＬＯＯＰ＿ＣＯＮＮＥＣＴを不活性化状態にし、ステップＳ８１０に処理を進める。
【００４４】
ステップＳ８０６では、ループキャッシュ部２２２は、制御信号２２４により、命令フェッチアドレスアドレス生成器２０１、分岐予測機構２０５、１次命令キャッシュメモリ２０２、命令バッファ２０３及び命令デコード２０４の動作を停止させる。これにより、消費電力を低減することができる。
【００４５】
次に、ステップＳ８０７では、セレクタ２２３は、ループキャッシュ部２２２が出力するデコード結果を採用して出力する。すなわち、セレクタ２２３は、ループコネクト条件により、分岐予測機構２０５によりループ処理が予測され、かつ分岐予測機構２０５によるループ処理の予測が当たったことが判明した場合には、ループキャッシュ部２２２の出力を選択する。
【００４６】
次に、ステップＳ８０８では、生成部４０５は、ループコネクト解除条件を満たしているか否かを判定する。ループコネクト解除条件は、例えば、分岐予測機構２０５によるループ処理の予測が外れて分岐命令Ｇが分岐先アドレスに分岐しなかったことの実行完了報告をＲＳＢＲ２０９から入力したことの条件である。生成部４０５は、ループコネクト解除条件を満たさない場合には、ループ処理の予測が当たっており、１ループの命令Ａ〜Ｇを繰り返し出力するために、ステップＳ８０７に処理を戻す。また、生成部４０５は、ループコネクト解除条件を満たす場合には、ループ処理を終了し、分岐命令Ｇの次のアドレスの命令を実行するために、ステップＳ８０９に処理を進める。
【００４７】
ステップＳ８０９では、生成部４０５は、ループコネクト信号ＬＯＯＰ＿ＣＯＮＮＥＣＴを不活性化状態にする。ループキャッシュ部２２２は、制御信号２２４により、命令フェッチアドレス生成器２０１、分岐予測機構２０５、１次命令キャッシュメモリ２０２、命令バッファ２０３及び命令デコーダ２０４の動作を開始させる。
【００４８】
次に、ステップＳ８１０では、セレクタ２２３は、命令デコーダ２０４が出力するデコード結果を採用して出力する。以上のように、ループコネクト解除条件により、分岐予測機構２０５によるループ処理の予測が外れたことが判明した場合には、命令フェッチアドレス生成器２０１、分岐予測機構２０５、１次命令キャッシュメモリ２０２、命令バッファ２０３及び命令デコーダ２０４は、動作を開始し、セレクタ２２３は、命令デコーダ２０４の出力を選択する。
【００４９】
本実施形態によれば、ループ処理を予測した場合、セレクタ２２３は、ループキャッシュ部２２２が出力するデコード結果４０９をリザベーションステーション２０６〜２０９以降の命令実行部に出力する。命令フェッチアドレス生成器２０１、分岐予測機構２０５、１次命令キャッシュメモリ２０２、命令バッファ２０３及び命令デコーダ２０４は、セレクタ２２３がループキャッシュ部２２２が出力するデコード結果４０９を選択している期間では、動作を停止し、消費電力を低減することができる。
【００５０】
（第２の実施形態）
図９は、第２の実施形態による命令バッファ２０３、命令デコーダ２０４、セレクタ２２３、ループキャッシュ部２２２の構成例を示す図である。以下、本実施形態が第１の実施形態と異なる点を説明する。第１の実施形態では、ループキャッシュ部２２２は、命令デコーダ２０４が出力するデコード結果を格納したが、第２の実施形態では、ループキャッシュ部２２２は、セレクタ２２３が出力するデコード結果を格納する。本実施形態の動作は、第１の実施形態の動作と同様である。
【００５１】
以下、パイプラインのステージ９０１〜９０３について説明する。まず、ステージ９０１では、命令バッファ２０３は、命令デコーダ部２０４に４個の命令（ループ処理タグＬＯＯＰ＿ＴＡＧを含む）を供給する。
【００５２】
次に、ステージ９０２では、命令デコーダ２０４は、命令をデコードし、デコード結果４０２をセレクタ２２３に出力する。なお、命令セットアーキテクチャの複雑さ及び周波数向上のため、ステージ９０２のデコードは、２サイクル以上かかる。
【００５３】
次に、ステージ９０３では、セレクタ２２３は、ループコネクト信号ＬＯＯＰ＿ＣＯＮＮＥＣＴが不活性化状態である場合には、命令デコーダ２０４が出力するデコード結果４０２を、ループキャッシュ部２２２、ＲＳＡ２０６、ＲＳＥ２０７、ＲＳＦ２０８、ＲＳＢＲ２０９及びＣＳＥ２１０に出力する。また、セレクタ２２３は、ループコネクト信号ＬＯＯＰ＿ＣＯＮＮＥＣＴが活性化状態である場合には、ループキャッシュ部２２２が出力するデコード結果４０９を、ＲＳＡ２０６、ＲＳＥ２０７、ＲＳＦ２０８、ＲＳＢＲ２０９及びＣＳＥ２１０に出力する。
【００５４】
ループキャッシュ部２２２は、セレクタ２２３を介して、命令デコーダ２０４が出力するデコード結果を入力し、その入力したデコード結果をループキャッシュメモリ４０８に書き込む。そして、ループキャッシュ部２２２は、ループキャッシュメモリ４０８から読み出したデコード結果４０９をセレクタ２２３に出力する。
【００５５】
（第３の実施形態）
図１０は、第３の実施形態による命令バッファ２０３、第１の命令デコーダ２０４ａ、第２の命令デコーダ２０４ｂ、セレクタ２２３、及びループキャッシュ部２２２の構成例を示す図である。以下、本実施形態が第１及び第２の実施形態と異なる点を説明する。第１及び第２の実施形態では、ループキャッシュ部２２２は、命令デコーダ２０４のデコードの結果を格納したが、第３の実施形態では、ループキャッシュ部２２２は、デコードの途中結果を格納する。第１の命令デコーダ２０４ａ及び第２の命令デコーダ２０４ｂは、図９の命令デコーダ２０４を分割したものである。
【００５６】
第１及び第２の実施形態では、ループキャッシュ部２２２は、完全にデコード済みのデコード結果を格納した。しかし、複雑な命令のデコード結果のビット幅は大きい。また、デコードにかかるサイクル数は、数サイクルである。本実施形態では、ループキャッシュ部２２２は、完全なデコード済みのデコード結果でなく、デコードの途中結果を格納することで、デコードにかかる電力の一部を削減し、かつループキャッシュ部２２２に格納するデコードの途中結果のビット幅を小さくすることができる。第１の命令デコーダ２０４ａは、命令デコーダ２０４が行うｎサイクルのデコードＤ１〜Ｄｎのうちの前部のデコードＤ１〜Ｄｋを行う。ここで、０＜ｋ＜ｎである。第２の命令デコーダ２０４ｂは、命令デコーダ２０４が行うｎサイクルのデコードＤ１〜Ｄｎのうちの後部のデコードＤｋ＋１〜Ｄｎを行う。
【００５７】
ステージ９０２ａでは、第１の命令デコーダ２０４ａは、命令バッファ２０３が出力する命令に対して、前部のデコードＤ１〜Ｄｋを行い、デコードの途中結果４０２ａをセレクタ２２３に出力する。セレクタ２２３は、ループコネクト信号ＬＯＯＰ＿ＣＯＮＮＥＣＴが不活性化状態である場合には、第１の命令デコーダ２０４ａが出力するデコードの途中結果４０２ａをループキャッシュ部２２２及び第２の命令デコーダ２０４ｂに出力する。また、セレクタ２２３は、ループコネクト信号ＬＯＯＰ＿ＣＯＮＮＥＣＴが活性化状態である場合には、ループキャッシュ部２２２が出力するデコードの途中結果４０９ａを第２の命令デコーダ２０４ｂに出力する。
【００５８】
次に、ステージ９０２ｂでは、第２の命令デコーダ２０４ｂは、セレクタ２２３が出力するデコードの途中結果に対して、後部のデコードＤｋ＋１〜Ｄｎを行い、最終のデコード結果を生成する。
【００５９】
次に、ステージ９０３では、第２の命令デコーダ２０４ｂは、最終のデコード結果を、ＲＳＡ２０６、ＲＳＥ２０７、ＲＳＦ２０８、ＲＳＢＲ２０９及びＣＳＥ２１０に出力する。
【００６０】
ループキャッシュ部２２２は、セレクタ２２３を介して、命令デコーダ２０４が出力するデコードの途中結果４０２ａを入力し、その入力したデコードの途中結果４０２ａをループキャッシュメモリ４０８に書き込む。そして、ループキャッシュ部２２２は、ループキャッシュメモリ４０８から読み出したデコードの途中結果４０９ａをセレクタ２２３に出力する。
【００６１】
以上のように、ループキャッシュ部２２２は、デコードされた途中結果４０２ａを格納し、格納した途中結果４０９ａを繰り返し出力する。第２の命令デコーダ２０４ｂは、ループキャッシュ部２２２が出力する途中結果４０９ａをデコードする。
【００６２】
なお、本実施形態は、第１の実施形態に適用することもできる。すなわち、ループキャッシュ部２２２は、第１の実施形態と同様に、第１の命令デコーダ２０４ａが出力するデコードの途中結果４０２ａを直接入力し、そのデコードの途中結果４０２ａを格納するようにしてもよい。
【００６３】
（第４の実施形態）
図１１は、第４の実施形態による命令バッファ２０３、命令デコーダ２０４、ループキャッシュ部２２２、及びセレクタ２２３の構成例を示す図である。図１１は、図４に対して、カウント部１１０１を追加したものである。以下、本実施形態が第１の実施形態と異なる点を説明する。
【００６４】
分岐予測機構２０５は、過去の多数回の分岐の有無の実行完了報告に基づくグローバル履歴を登録する。そして、分岐予測機構２０５は、グローバル履歴を参照し、高精度の分岐予測、ループ処理の予測、予測されたループ処理のループ回数の予測を行う。分岐予測機構２０５は、第１の実施形態と同様に、ループ処理を予測した場合には、ループ処理タグＬＯＯＰ＿ＴＡＧを命令バッファ２０３に出力する。その場合、分岐予測機構２０５は、ループ処理の残りのループ回数ＬＯＯＰ＿ＣＯＵＮＴを命令バッファ２０３に出力する。命令バッファ２０３は、命令に対してループ処理タグＬＯＯＰ＿ＴＡＧ及びループ回数ＬＯＯＰ＿ＣＯＵＮＴを付与してバッファリングし、命令４０１、ループ処理タグＬＯＯＰ＿ＴＡＧ及びループ回数ＬＯＯＰ＿ＣＯＵＮＴを命令デコーダ２０４に出力する。命令デコーダ２０４は、命令４０１をデコードし、デコード結果４０２、ループ処理タグＬＯＯＰ＿ＴＡＧ及びループ回数ＬＯＯＰ＿ＣＯＵＮＴを出力する。
【００６５】
第１の実施形態では、分岐予測機構２０５は、ループコネクト信号ＬＯＯＰ＿ＣＯＮＮＥＣＴが活性化状態になると、動作を停止する。ＲＳＢＲ２０９は、ループ処理の予測が外れた場合、分岐命令が分岐先に分岐しないことの実行完了報告を出力する。その場合、ＣＳＥ２１０は、その分岐命令を完了処理し、パイプラインは、投機実行中の全ての命令をクリアし、その次の命令の命令フェッチからリスタートする。そのため、ペナルティが大きい。
【００６６】
本実施形態では、分岐予測機構２０５は、残りのループ回数ＬＯＯＰ＿ＣＯＵＮＴを予測し、そのループ回数ＬＯＯＰ＿ＣＯＵＮＴをパイプラインに伝搬させる。カウント部１１０１は、命令デコーダ２０４が出力するループ回数ＬＯＯＰ＿ＣＯＵＮＴを格納し、ループキャッシュメモリ４０８から１ループの命令Ａ〜Ｇが読み出される度に、ループ回数ＬＯＯＰ＿ＣＯＵＮＴをデクリメントする。具体的には、カウント部１１０１は、リードポインタＯＵＴＰＴＲ［５：０］がループバックポインタＬＯＯＰＢＡＣＫ＿ＰＴＲ［５：０］を通過する度に、ループ回数ＬＯＯＰ＿ＣＯＵＮＴをデクリメントする。そして、カウント部１１０１は、ループ回数ＬＯＯＰ＿ＣＯＵＮＴが閾値回数より少なくなった場合には、制御信号２２４により、命令フェッチアドレス生成器２０１、分岐予測機構２０５、１次命令キャッシュメモリ２０２、命令バッファ２０３、及び命令デコーダ２０４の動作を開始させる。これにより、命令フェッチアドレス生成器２０１は、分岐命令が分岐しないので、分岐命令の次のアドレスを出力し、１次命令キャッシュメモリ２０２は、そのアドレスの命令を命令バッファ２０３に出力する。命令バッファ２０３は、その命令をバッファリングし、命令デコーダ２０４は、その命令をデコードし、デコード結果４０２を出力する。
【００６７】
カウント部１１０１は、ループ回数ＬＯＯＰ＿ＣＯＵＮＴが０になった場合には、クリア信号を生成部４０５に出力する。生成部４０５は、クリア信号を入力した場合には、ループコネクト信号ＬＯＯＰ＿ＣＯＮＮＥＣＴを不活性化状態にする。すると、セレクタ２２３は、命令デコーダ２０４が出力するデコード結果４０２を選択して出力する。これにより、ループ処理が終了するときのペナルティを防止することができる。
【００６８】
上記の閾値回数は、命令フェッチのパイプラインの長さに応じた回数である。命令フェッチのパイプラインの命令が命令デコーダ２０４に到達し、ループ回数ＬＯＯＰ＿ＣＯＵＮＴが０になった時に、すぐに命令デコーダ２０４がデコード結果４０２を供給できるように、閾値回数を決めればよい。
【００６９】
以上のように、分岐予測機構２０５は、予測されたループ処理のループ回数ＬＯＯＰ＿ＣＯＵＮＴを予測する。セレクタ２２３は、予測されたループ回数ＬＯＯＰ＿ＣＯＵＮＴのループ処理が行われている場合には、ループキャッシュ部２２２の出力を選択し、予測されたループ回数ＬＯＯＰ＿ＣＯＵＮＴのループ処理が終了した場合には、命令デコーダ２０４の出力を選択する。命令フェッチアドレス生成器２０１、分岐予測機構２０５、１次命令キャッシュメモリ２０２、命令バッファ２０３及び命令デコーダ２０４は、予測されたループ回数ＬＯＯＰ＿ＣＯＵＮＴのループ処理が終了した場合には、動作を開始する。なお、本実施形態は、第２及び第３の実施形態にも適用することができる。
【００７０】
なお、上記実施形態は、何れも本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、又はその主要な特徴から逸脱することなく、様々な形で実施することができる。
【符号の説明】
【００７１】
２０１  命令フェッチアドレス生成器
２０２  １次命令キャッシュメモリ
２０３  命令バッファ
２０４  命令デコーダ
２０５  分岐予測機構
２０６  ＲＳＡ
２０７  ＲＳＥ
２０８  ＲＳＦ
２０９  ＲＳＢＲ
２１０  ＣＳＥ
２１１  オペランドアドレス生成器
２１２  １次データキャッシュメモリ
２１３，２１４  演算器
２１５  固定小数点更新バッファ
２１６  固定小数点バッファ
２１７  浮動小数点更新バッファ
２１８  浮動小数点レジスタ
２１９  プログラムカウンタ
２２０  ２次命令キャッシュメモリ
２２１  メインメモリ
２２２  ループキャッシュ部
２２３  セレクタ
【図１】
2018005488.tif 000003
【図２】
2018005488.tif 000004
【図３】
2018005488.tif 000005
【図４】
2018005488.tif 000006
【図５】
2018005488.tif 000007
【図６】
2018005488.tif 000008
【図７】
2018005488.tif 000009
【図８】
2018005488.tif 000010
【図９】
2018005488.tif 000011
【図１０】
2018005488.tif 000012
【図１１】
2018005488.tif 000013