(57)【特許請求の範囲】
【請求項１】
繰り返し処理を含む一連の処理を実行させる命令群を記憶する第１メモリと、
前記第１メモリに記憶された前記命令群のうち、前記繰り返し処理の直後の処理を実行させる複数の命令と同一の命令を記憶する第２メモリと、
前記第１メモリから、プログラムカウンタが示すアドレスに記憶された命令をフェッチするフェッチ部と、
前記フェッチ部によってフェッチされた命令を出力する第１状態と、前記第２メモリに記憶された前記複数の命令を順次出力する第２状態と、を切り替える第１切り替え部と、
前記第１切り替え部から出力された命令をデコードするデコード部と、
前記デコード部によってデコードされた命令を受けて演算を実行し、前記繰り返し処理の終了条件を満たした場合には前記繰り返し処理の終了指示を出力する演算部と、
前記プログラムカウンタに対して、前記演算部による演算結果に基づいて決定された前記第１メモリのアドレスを設定する第３状態と、前記第１メモリに記憶された前記複数の命令の先頭の命令よりも後の命令を示すアドレスを設定する第４状態と、を切り替える第２切り替え部と、
前記演算部から前記終了指示が出力された場合、前記第１切り替え部を前記第２状態にし、前記第２切り替え部を前記第４状態にした後に、前記第１切り替え部を前記第１状態にし、前記第２切り替え部を前記第３状態にする制御部と、
を有し、
前記第２切り替え部は、
さらに、前記制御部が入力する、前記先頭の命令を示す前記第１メモリの第１アドレスと、または前記繰り返し処理を実行させる第２の複数の命令のうちの一部の命令のつぎの命令を示す前記第１メモリの第２アドレスと、のうちのいずれかのアドレスを前記プログラムカウンタに対して設定する第５状態と、前記第３状態と、前記第４状態と、を切り替え、
前記制御部は、
前記繰り返し処理を開始後に、前記第１切り替え部を前記第１状態に、前記第２切り替え部を前記第３状態にしたまま、前記フェッチ部によってフェッチされた前記一部の命令を前記第２メモリに格納し、
前記第２メモリに前記一部の命令が格納された後に、前記一部の命令を示す前記第１メモリのアドレスがあらたに前記プログラムカウンタに設定された場合、前記第１切り替え部を前記第２状態にして前記第１切り替え部から前記第２メモリに記憶された前記一部の命令を順次出力させ、前記第１アドレスを入力して前記第２切り替え部を前記第５状態にし、
前記第２切り替え部を第５状態にすることによって前記先頭の命令を示すアドレスが前記プログラムカウンタに設定された後に、前記第２切り替え部を前記第３状態にし、前記フェッチ部により前記第１メモリからフェッチされた前記複数の命令を前記第２メモリに格納し、
前記複数の命令が前記第２メモリに格納された場合、前記第１切り替え部を前記第１状態にし、前記第２アドレスを入力して前記第２切り替え部を前記第５状態にした後に、前記第２切り替え部を前記第３状態にする、
ことを特徴とするプロセッサ。
【請求項２】
前記制御部は、
前記先頭の命令よりも後の命令を示すアドレスが前記プログラムカウンタに設定された後に、前記第２切り替え部を前記第３状態にし、前記フェッチ部によって前記先頭の命令よりも後の命令がフェッチされた後に、前記第１切り替え部を前記第１状態にする請求項１に記載のプロセッサ。
【請求項３】
前記先頭の命令よりも後の命令は、前記先頭の命令から前記フェッチ部によるフェッチにかかるサイクル数以上後の命令であることを特徴とする請求項１または２に記載のプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサに関する。
【背景技術】
【０００２】
従来、プログラムには、条件を満たしたか否かによって分岐先が異なる条件分岐命令を有している。たとえば、プロセッサでは、プリデコード機能により条件分岐命令を検出し、条件判断後の異なる２つの命令を命令メモリからフェッチすることにより、条件判断後の命令を直ちに実行することができる技術が知られている（たとえば、下記特許文献１，２を参照。）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００６−３０９３３７号公報
【特許文献２】特開２００４−１９２０２１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、プロセッサは、繰り返し処理を実行中には繰り返し処理を実行させる命令を順次フェッチしてデコードするが、繰り返し処理が終了条件を満たしてつぎの処理に移行する際にはフェッチ済みおよびデコード済みの命令を破棄する。そして、プロセッサは、あらたにつぎの処理を実行させる命令をフェッチしてデコードするため、繰り返し処理が終了条件を満たしてからつぎの処理を実行するまでにサイクルロスが発生する問題点がある。
【０００５】
本発明は、上述した従来技術による問題点を解消するため、サイクルロスを減少させることができるプロセッサを提供することを目的とする。
【課題を解決するための手段】
【０００６】
上述した課題を解決し、目的を達成するため、本発明の一側面によれば、繰り返し処理を含む一連の処理を実行させる命令群を記憶する第１メモリと、前記第１メモリに記憶された前記命令群のうち、前記繰り返し処理の直後の処理を実行させる複数の命令と同一の命令を記憶する第２メモリと、前記第１メモリから、プログラムカウンタが示すアドレスに記憶された命令をフェッチするフェッチ部と、前記フェッチ部によってフェッチされた命令を出力する第１状態と、前記第２メモリに記憶された前記複数の命令を順次出力する第２状態と、を切り替える第１切り替え部と、前記第１切り替え部から出力された命令をデコードするデコード部と、前記デコード部によってデコードされた命令を受けて演算を実行し、前記繰り返し処理の終了条件を満たした場合には前記繰り返し処理の終了指示を出力する演算部と、前記プログラムカウンタに対して、前記演算部による演算結果に基づいて決定された前記第１メモリのアドレスを設定する第３状態と、前記第１メモリに記憶された前記複数の命令の先頭の命令よりも後の命令を示すアドレスを設定する第４状態と、を切り替える第２切り替え部と、前記演算部から前記終了指示が出力された場合、前記第１切り替え部を前記第２状態にし、前記第２切り替え部を前記第４状態にした後に、前記第１切り替え部を前記第１状態にし、前記第２切り替え部を前記第３状態にする制御部と、を有するプロセッサが提案される。
【発明の効果】
【０００７】
本発明の一態様によれば、サイクルロスを減少させることができるという効果を奏する。
【図面の簡単な説明】
【０００８】
【図１】図１は、実施例１にかかるプロセッサの一例を示す説明図である。
【図２】図２は、命令群の一例を示す説明図である。
【図３】図３は、命令保持ＦＦ群１０７の一例を示す説明図である。
【図４】図４は、繰り返し処理前と繰り返し処理中のプロセッサの動作例を示す説明図である。
【図５】図５は、繰り返し処理終了後のプロセッサの動作例（その１）を示す説明図である。
【図６】図６は、繰り返し処理終了後のプロセッサの動作例（その２）を示す説明図である。
【図７】図７は、繰り返し処理終了後のプロセッサの動作例（その３）を示す説明図である。
【図８】図８は、従来とのサイクルロスの比較例を示す説明図である。
【図９】図９は、実施例１にかかる第２切り替え部１０６が行うＰＣ１１２の設定処理手順を示すフローチャートである。
【図１０】図１０は、実施例１にかかる制御部１０４が行う初期化処理手順の一例を示すフローチャートである。
【図１１】図１１は、実施例１にかかる制御部１０４が行う制御処理手順の一例を示すフローチャートである。
【図１２】図１２は、実施例２にかかるプロセッサの一例を示す説明図である。
【図１３】図１３は、繰り返し処理に関する一部の命令を命令保持ＦＦ群１０７に記憶させる例を示す説明図である。
【図１４】図１４は、繰り返し処理の後の複数の命令が命令保持ＦＦ群１０７に格納される例を示す説明図（その１）である。
【図１５】図１５は、繰り返し処理の後の複数の命令が命令保持ＦＦ群１０７に格納される例を示す説明図（その２）である。
【図１６】図１６は、命令保持ＦＦ群１０７の遷移例を示す説明図である。
【図１７】図１７は、第２切り替え部１０６が行うＰＣ１１２の設定処理手順を示すフローチャートである。
【図１８】図１８は、制御部１０４が行う初期化処理手順の一例を示すフローチャートである。
【図１９】図１９は、実施例２にかかる制御部１０４が行う制御処理手順の一例を示すフローチャート（その１）である。
【図２０】図２０は、実施例２にかかる制御部１０４が行う制御処理手順の一例を示すフローチャート（その２）である。
【図２１】図２１は、実施例２にかかる制御部１０４が行う制御処理手順の一例を示すフローチャート（その３）である。
【図２２】図２２は、実施例２にかかる制御部１０４が行う制御処理手順の一例を示すフローチャート（その４）である。
【発明を実施するための形態】
【０００９】
以下に添付図面を参照して、本発明にかかるプロセッサの実施の形態を詳細に説明する。
【００１０】
（実施例１）
実施例１では、繰り返し処理の直後の処理を実行させる命令を記憶するメモリを用意し、繰り返し処理の終了条件を満たした場合、フェッチされた命令に代わり該メモリ内の命令をデコードさせる。これにより、繰り返し処理の終了条件を満たしてつぎの処理に移行する際に発生するサイクルロスを減少させることができる。
【００１１】
図１は、実施例１にかかるプロセッサの一例を示す説明図である。プロセッサ１００は、たとえば、フェッチ部１０１と、第１切り替え部１０５と、デコード部（以下、「命令デコーダ」と称する。）１０２と、を有している。プロセッサ１００は、たとえば、演算部（以下、「ＥＸ（ＥＸＣＵＴＩＯＮ（実行部））／ＭＥＭ（ＭＥＭＯＲＹ）／ＷＢ（ＷＲＩＴＥ  ＢＡＣＫ）ステージ処理部」と称する。）１０３と、第２切り替え部１０６と、制御部１０４と、を有している。さらに、プロセッサ１００は、たとえば、レジスタファイル１１０と、ＦＦ１０９と、第２メモリ（以下、「命令保持ＦＦ（Ｆｌｉｐ  Ｆｌｏｐ）群」と称する。）１０７と、を有している。プロセッサ１００は、論理積回路であるＡＮＤ、否定論理回路であるＩＮＶＥＲＴＥＲ、論理和回路であるＯＲや、ラッチ回路であるＦＦなどの素子によって形成される。
【００１２】
フェッチ部１０１は、第１メモリ（以下、「命令メモリ」と称する。）１１３と、プログラムカウンタ（以下、「ＰＣ（Ｐｒｏｇｒａｍ  Ｃｏｕｎｔｅｒ）」と称する。）１１２と、決定部１１１と、命令レジスタ１１４と、を有している。
【００１３】
まず、命令メモリ１１３は、繰り返し処理を含む一連の処理を実行させる命令群を記憶する。ここで、命令群の一例を図２に示す。
【００１４】
図２は、命令群の一例を示す説明図である。命令群とは、命令コードの集合である。繰り返し処理は、Ｒｅｐｅａｔ命令が実行されることにより始まる。そして、条件分岐命令において、繰り返し処理の終了条件が満たされない場合、繰り返し処理が続行される。条件分岐命令において、繰り返し処理の終了条件が満たされた場合、繰り返し処理を抜けて、Ｂｒｅａｋ後処理に命令が遷る。図２の例では、繰り返し処理を実行させる命令は、命令Ｎ〜命令（Ｎ＋１）である。図２の例では、繰り返し処理の終了条件が満たされた後に行う処理を実行させる命令は、命令Ｐ以降の命令である。
【００１５】
図１の説明に戻って、命令保持ＦＦ群１０７は、命令メモリ１１３に記憶された命令群のうち、繰り返し処理の直後の処理を実行させる複数の命令と同一の命令を記憶する。ここで、命令保持ＦＦ群１０７の一例を図３に示す。
【００１６】
図３は、命令保持ＦＦ群１０７の一例を示す説明図である。命令保持ＦＦ群１０７は、Ｉｄｘと、ＩＭＥＭアドレスと、命令内容と、のフィールドを有している。Ｉｄｘのフィールドには、命令保持ＦＦ群１０７に記憶された命令内容に付された通し番号が設定される。ＩＭＥＭアドレスのフィールドには、各命令と同一の命令が記憶されている命令メモリ１１３のアドレスが設定される。命令内容のフィールドには、具体的な命令コードが設定される。
【００１７】
実施例１では、繰り返し処理が始まる前に、命令メモリ１１３に記憶された繰り返し処理の直後の処理を実行させる複数の命令と同一の命令が命令保持ＦＦ群１０７に記憶される。たとえば、複数の命令には、繰り返し処理の終了条件が満たされた場合のジャンプ先の命令から、少なくとも後述するフェッチ部１０１によるフェッチにかかるサイクル数より１少ない数分の命令までが含まれている。ここで、フェッチ部１０１によるフェッチにかかるサイクル数より１少ない数を「Ｍ」とする。
【００１８】
図１の説明に戻って、ＰＣ１１２は、つぎに実行されるべき命令が格納されている命令メモリ１１３のアドレスを記憶するレジスタである。
【００１９】
決定部１１１は、ＰＣ１１２に設定するアドレスを決定する。たとえば、決定部１１１は、ＥＸ／ＭＥＭ／ＷＢステージ処理部１０３によって実行された処理のつぎの処理を表す命令がジャンプ命令でなければ、ＰＣ１１２に設定中のアドレスをカウントアップしたアドレスを、ＰＣ１１２に設定するアドレスに決定する。たとえば、決定部１１１は、ＥＸ／ＭＥＭ／ＷＢステージ処理部１０３によって実行された処理のつぎの処理を表す命令がジャンプ命令であれば、つぎの処理を表す命令を示す命令メモリ１１３のアドレスを、ＰＣ１１２に設定するアドレスに決定する。
【００２０】
フェッチ部１０１は、命令メモリ１１３から、ＰＣ１１２が示すアドレスに記憶された命令をフェッチする。命令レジスタ１１４は、命令メモリ１１３から取り出されたＰＣ１１２に記憶されたアドレスが示す命令を格納する。
【００２１】
第１切り替え部１０５（ＳＥＬ）は、フェッチ部１０１によってフェッチされた命令を出力する第１状態と、命令保持ＦＦ群１０７に記憶された複数の命令を順次出力する第２状態と、を切り替える。第１切り替え部１０５は、命令レジスタ１１４に記憶された命令と、選択部１０８（ＳＥＬ）が変数ＩｄｘＲの値に基づいて命令保持ＦＦ群１０７から選択した命令と、のうち、いずれか一方を命令保持ＦＦ群使用フラグ  ＦＦの値に基づいて出力する。変数ＩｄｘＲの値と命令保持ＦＦ群使用フラグ  ＦＦの値は、制御部１０４によって設定される。
【００２２】
たとえば、命令保持ＦＦ群使用フラグ  ＦＦの値が０の場合、第１切り替え部１０５は、命令レジスタ１１４に格納された命令を選択して命令デコーダ１０２に入力する。たとえば、命令保持ＦＦ群使用フラグ  ＦＦが１の場合、第１切り替え部１０５は、ＦＦ１０９に格納された命令を選択して命令デコーダ１０２に入力する。
【００２３】
命令デコーダ１０２は、第１切り替え部１０５から出力された命令をデコードする。命令デコーダ１０２は、第１切り替え部１０５により入力された命令をデコードする。命令デコーダ１０２は、デコード結果をレジスタファイル１１０と、ＥＸ／ＭＥＭ／ＷＢステージ処理部１０３と、へ出力する。
【００２４】
ＥＸ／ＭＥＭ／ＷＢステージ処理部１０３は、命令デコーダ１０２によってデコードされた命令を受けて演算を実行する。ＥＸ／ＭＥＭ／ＷＢステージ処理部１０３は、繰り返し処理の終了条件を満たした場合には繰り返し処理の終了指示を出力する。具体的には、繰り返し処理の終了指示は、分岐フラグと、分岐アドレスと、である。分岐フラグは、繰り返し処理が終了したことを示す情報である。分岐フラグのアドレスは、繰り返し処理の直後の処理を実行させる先頭の命令を示す命令メモリ１１３のアドレスである。
【００２５】
第２切り替え部１０６は、ＰＣ１１２に対して、決定部１１１により決定された命令メモリ１１３のアドレスを設定する第３状態と、命令メモリ１１３に記憶された複数の命令の先頭の命令よりも後の命令を示すアドレスを設定する第４状態と、を切り替える。命令メモリ１１３に記憶された複数の命令の先頭の命令よりも後の命令とは、該先頭の命令からフェッチ部１０１によるフェッチにかかるサイクル数（Ｍ＋１）以上後の命令である。たとえば、命令メモリ１１３に記憶された複数の命令の先頭の命令よりも後の命令とは、先頭の命令からフェッチ部１０１によるフェッチにかかるサイクル数であれば、命令保持ＦＦ群１０７に記憶させる命令数が最少となる。そのたため、命令保持ＦＦ群１０７を縮小させることができる。たとえば、図１の例では、Ｍが１であるため、先頭の命令よりも２つ後の命令を示す命令メモリ１１３のアドレスとなる。
【００２６】
ここで、命令メモリ１１３に記憶された複数の命令の先頭の命令よりも後の命令を示すアドレスは、分岐先アドレスと称する。分岐先アドレスは、制御部１０４によって設定される。具体的には、分岐フラグの値が０の場合、第２切り替え部１０６は、ＰＣ１１２に対して、決定部１１１により決定された命令メモリ１１３のアドレスを設定する。具体的には、分岐フラグの値が１の場合、第２切り替え部１０６は、ＰＣ１１２に対して、分岐先アドレスを設定する。
【００２７】
制御部１０４は、ＥＸ／ＭＥＭ／ＷＢステージ処理部１０３から終了指示が出力された場合、第１切り替え部１０５を第２状態にし、第２切り替え部１０６を第４状態にする。その後、制御部１０４は、第１切り替え部１０５を第１状態にし、第２切り替え部１０６を第３状態にする。
【００２８】
具体的には、たとえば、制御部１０４は、先頭の命令よりも後の命令を示すアドレスがＰＣ１１２に設定された後に、第２切り替え部１０６を第３状態にする。さらに、たとえば、制御部１０４は、フェッチ部１０１によって先頭の命令よりも後の命令がフェッチされた後に、第１切り替え部１０５を第１状態にする。上述したように、先頭の命令よりも後の命令は、分岐先アドレスが示す命令メモリ１１３内の命令である。
【００２９】
より具体的には、制御部１０４は、第１切り替え部１０５の状態を切り替える命令保持ＦＦ群使用フラグ  ＦＦを有している。制御部１０４は、命令保持ＦＦ群１０７に記憶された命令を選択部１０８に順次選択させるために、ＩｄｘＲ  ＦＦを有している。選択部１０８は、ＩｄｘＲ  ＦＦに記憶された値と同一値のＩｄｘの命令内容を命令保持ＦＦ群１０７から選択してＦＦ１０９に設定する。制御部１０４は、フェッチ部１０１によって先頭の命令よりも後の命令がフェッチされたか否かを判断するために、読み出し用カウンタを有している。
【００３０】
ここで、制御部１０４がＩｄｘＲ  ＦＦと、読み出し用カウンタと、命令保持ＦＦ群使用フラグ  ＦＦを用いる場合におけるプロセッサ１００の動作例を図４〜図７に示す。
【００３１】
図４は、繰り返し処理前と繰り返し処理中のプロセッサの動作例を示す説明図である。制御部１０４は、繰り返し処理が始まる前に、命令メモリ１１３に記憶された繰り返し処理の直後の処理を実行させる複数の命令と同一の命令を命令保持ＦＦ群１０７に記憶させる。具体的には、ＥＸ／ＭＥＭ／ＷＢステージ処理部１０３は、Ｒｅｐｅａｔ命令の前に、ロードデータを制御部１０４に出力する。制御部１０４は、ＥＸ／ＭＥＭ／ＷＢステージ処理部１０３からロードデータを受け付けると、命令メモリ１１３とは異なるメモリ（たとえば、データメモリ）から命令の内容とアドレスを取得する。さらに、制御部１０４は、該複数の命令のそれぞれを示す命令メモリ１１３のアドレスを取得してもよい。制御部１０４は取得した複数の命令と、複数の命令のそれぞれの命令メモリ１１３のアドレスと、を順にＩｄｘを付しながら命令保持ＦＦ群１０７へ記憶させる。
【００３２】
さらに、制御部１０４は、命令保持ＦＦ群使用フラグ  ＦＦと、ＩｄｘＲ  ＦＦと、読み出し用カウンタと、をリセットする。
【００３３】
図４の場合、分岐フラグは０であるため、第２切り替え部１０６は、第３状態であり、決定部１１１によって決定された命令メモリ１１３のアドレスをＰＣ１１２に設定する。図４の場合、命令保持ＦＦ群使用フラグ  ＦＦの値は、０であるため、第１切り替え部１０５は、第１状態であり、命令レジスタ１１４に記憶された命令を選択して命令デコーダ１０２に出力する。
【００３４】
図５は、繰り返し処理終了後のプロセッサの動作例（その１）を示す説明図である。ＥＸ／ＭＥＭ／ＷＢステージ処理部１０３は、繰り返し処理の終了条件を満たしたと判断した場合、分岐フラグを１にする。さらに、ＥＸ／ＭＥＭ／ＷＢステージ処理部１０３は、分岐アドレスに繰り返し処理の直後の処理を実行させる命令を示す命令メモリ１１３のアドレス、または繰り返し処理の直後の処理を実行させる命令を示す命令保持ＦＦ群１０７のＩｄｘの値を設定する。
【００３５】
分岐フラグの値が１の場合、制御部１０４は、分岐アドレスに設定されたアドレスによって示される命令が命令保持ＦＦ群１０７に記憶されているか否かを判断する。たとえば、制御部１０４は、命令保持ＦＦ群１０７に記憶されているか否かを、専用のフラグ情報、または指定のメモリアドレス範囲であるか否かに基づいて判断する。
【００３６】
制御部１０４は、分岐フラグの値が１であり、分岐アドレスに設定されたアドレスによって示される命令が命令保持ＦＦ群１０７に記憶されていると判断された場合、ＩｄｘＲ  ＦＦに分岐先アドレスを設定する。ここでは、分岐先アドレスには、命令保持ＦＦ群１０７のＩｄｘの値が設定されていることとする。さらに、制御部１０４は、読み出し用カウンタにＭを設定する。図５の例では、制御部１０４は、読み出し用カウンタに１を設定する。
【００３７】
制御部１０４は、分岐先アドレスにＩｄｘＲ  ＦＦの値に対応する命令保持ＦＦ群１０７内のＩＭＥＭアドレス（図５中「命令メモリアドレス」）にＭを加えたアドレスを設定する。ＩＭＥＭアドレスにＭを加えたアドレスとは、命令メモリアドレスが示す命令メモリ１１３内の命令からＭ後の命令を示す命令メモリ１１３のアドレスである。
【００３８】
ＩｄｘＲ  ＦＦの値に基づいて選択部１０８は、命令保持ＦＦ群１０７内の命令をＦＦ１０９に設定する。命令保持ＦＦ群使用フラグ  ＦＦの値が１であるため、第１切り替え部１０５は、第２状態となり、ＦＦ１０９に設定された命令を選択して命令デコーダ１０２に出力する。ここでは、命令Ｐが命令デコーダ１０２によってデコードされる。分岐フラグが１であるため、第２切り替え部１０６は、第４状態となり、分岐先アドレスを選択してＰＣ１１２に設定する。ここでは、命令（Ｐ＋２）を示す命令メモリ１１３内のアドレスＡｄｒ２がＰＣ１１２に設定される。
【００３９】
図６は、繰り返し処理終了後のプロセッサの動作例（その２）を示す説明図である。図６は、図５のつぎのサイクルにおける動作例を示している。分岐フラグの値が０であるが、命令保持ＦＦ群使用フラグ  ＦＦの値が１であり、読み出し用カウンタの値が１である。そのため、制御部１０４は、ＩｄｘＲ  ＦＦの値を１カウントアップした値を設定し、読み出し用カウンタの値を１から０に設定する。
【００４０】
選択部１０８は、カウントアップされたＩｄｘＲ  ＦＦの値に基づいて命令保持ＦＦ群１０７から命令を選択してＦＦ１０９に設定する。第１切り替え部１０５は、命令保持ＦＦ群使用フラグ  ＦＦが１であるため、第２状態になり、ＦＦ１０９に設定された命令を選択して命令デコーダ１０２に出力する。ここでは、命令（Ｐ＋１）が命令デコーダ１０２によってデコードされる。
【００４１】
第２切り替え部１０６は、分岐フラグの値が０であるため、第１状態になり、決定部１１１に決定されたアドレスをＰＣ１１２に設定する。ここでは、命令（Ｐ＋３）を示す命令メモリ１１３のアドレスＡｄｒ３がＰＣ１１２に設定される。図６では、図５においてＰＣ１１２に設定された分岐先アドレスが示す命令メモリ１１３内の命令が命令レジスタ１１４に設定される。そして、図６では、分岐先アドレスが示す命令のつぎに実行される命令を示す命令メモリ１１３のアドレスがＰＣ１１２に設定される。
【００４２】
図７は、繰り返し処理終了後のプロセッサの動作例（その３）を示す説明図である。制御部１０４は、読み出し用カウンタの値が０であるため、命令保持ＦＦ群使用フラグ  ＦＦの値を０に設定する。
【００４３】
これにより、第１切り替え部１０５は、第１状態になり、命令レジスタ１１４に設定された命令を選択して、命令デコーダ１０２に出力する。ここでは、命令（Ｐ＋２）が命令デコーダ１０２によってデコードされる。
【００４４】
図８は、従来とのサイクルロスの比較例を示す説明図である。サイクルロスは、繰り返し処理を終了することによって無駄にしてしまうサイクル数である。図８において上が従来例であり、下が本発明例である。ボックスで示す各処理は、１サイクルを要している。Ｆがフェッチ処理を示す。ここでは、Ｆ１とＦ２とを併せて１つのフェッチ処理とする。上述したように、プロセッサ１００では、フェッチ部１０１によるフェッチにかかるサイクル数は２であるため、Ｍは１である。ボックス内のＤはデコード処理を示し、ボックス内のＥが演算処理を示し、ボックス内のＭは記憶処理を示し、ボックス内のＷはライトバック処理を示す。
【００４５】
従来例では、ループ抜けであると判断されてから、命令Ｐについてのフェッチが開始される。そのため、命令（Ｎ＋４）の実行処理が行われてから命令Ｐの実行処理が行われるまでのサイクルロスは、３サイクルである。
【００４６】
一方、本発明では、ループ抜けであると判断されてから、命令Ｐについてのデコードが開始される。そのため、命令（Ｎ＋４）の実行処理が行われてから命令Ｐの実行処理が行われるまでのサイクルロスは、１サイクルである。フェッチ部１０１によるフェッチにかかるサイクル数が２である場合、従来よりもサイクルロスを２サイクル減少させることができる。
【００４７】
実施例１によれば、繰り返し処理の終了条件を満たしてつぎの処理に移行する際に発生するサイクルロスを減少させることができる。
【００４８】
ここで、繰り返し処理によってサイクルロスが発生する例を挙げる。たとえば、動画像圧縮符号化方式のひとつであり、放送やインターネットＴＶなどに近年使用されているＡＶＣ／Ｈ．２６４規格のデコードにおける係数復号処理が挙げられる。この係数復号処理をマイクロプロセッサに実装する場合、繰り返し処理により、ひとつのＤＣＴ係数を復号すると、係数復号ごとにループ抜けによるサイクルロスが発生する。より具体的には、Ｈ．２６４符号化ではエントロピー符号化ツールにＣＡＢＡＣ符号化を採用している。ＣＡＢＡＣ符号化は算術符号化の一種であり、シンボルの発生確率の変化に追従して符号化を行うことにより、ハフマン符号化と比較してより高い比率で圧縮を行うことが可能とされている。
【００４９】
ＤＣＴ係数の復号においては、算術符号化を解いた２値のビット列に対して逆二値化を施すことにより、ＤＣＴ係数の絶対値を得られる。二値化には連結ユーナリ結合／指数ゴロム符号化が用いられ、ＤＣＴ係数の絶対値が１４までは切り詰めユーナリ符号化、それを超える絶対値については指数ゴロム符号化が用いられる。指数ゴロム符号化はＰｒｅｆｉｘ／Ｓｅｐａｒａｔｏｒ／Ｓｕｆｆｉｘの構成から成り、Ｐｒｅｆｉｘは連続する１の集合であり、Ｓｅｐａｒａｔｏｒはひとつの０データ、ＳｕｆｆｉｘはＰｒｅｆｉｘのビット長と同じビット長を有する任意のビット列である。係数復号の処理フローとしては、二値データに０が現れるまで最大１４回の算術復号を繰り返す。そして、最後まで０が現れなかった場合は指数ゴロム復号処理に移る。まず、Ｐｒｅｆｉｘの復号を行うため、０が現れるまで算術復号を繰り返す。０検出後、Ｐｒｅｆｉｘと同じビット長の算術復号を行い、Ｓｕｆｆｉｘを得る。ユーナリ復号、指数ゴロム復号のどちらの処理においても算術復号処理の繰り返しが含まれるため、算術復号処理ループから抜ける際にサイクルロスが発生してしまう。
【００５０】
Ｈ．２６４符号化データでは、ＤＣＴ係数情報が一般的に半分以上の割合を占めるため、上記ＤＣＴ係数復号ごとのサイクルロスの影響が大きい。そこで、実施例１にかかるプロセッサ１００を適用することによって、係数復号処理のように予めループ回数が決まっていない処理において、ループ抜けによるサイクルロスを削減することができる。
【００５１】
（実施例１にかかる第２切り替え部１０６が行う設定処理手順）
図９は、実施例１にかかる第２切り替え部１０６が行うＰＣ１１２の設定処理手順を示すフローチャートである。ここでは、１サイクルにおける第２切り替え部１０６が行うＰＣ１１２の設定処理手順を示す。まず、第２切り替え部１０６は、分岐フラグが１であるか否かを判断する（ステップＳ９０１）。
【００５２】
分岐フラグが１の場合（ステップＳ９０１：Ｙｅｓ）、第２切り替え部１０６は、ＰＣ１１２＝分岐先アドレスとし（ステップＳ９０２）、一連の処理を終了する。分岐フラグが０の場合（ステップＳ９０１：Ｎｏ）、第２切り替え部１０６は、ＰＣ１１２＝ＰＣ１１２＋１とし（ステップＳ９０３）、一連の処理を終了する。ステップＳ９０３では、一例として、ＰＣ１１２＝ＰＣ１１２＋１としているが、具体的には、決定部１１１によって決定されたアドレスがＰＣ１１２に設定される。
【００５３】
（実施例１にかかる制御部１０４が行う初期化処理手順）
図１０は、実施例１にかかる制御部１０４が行う初期化処理手順の一例を示すフローチャートである。制御部１０４は、命令保持ＦＦ群使用フラグ  ＦＦを初期化し（ステップＳ１００１）、ＩｄｘＲ  ＦＦを初期化し（ステップＳ１００２）、読み出し用カウンタを初期化する（ステップＳ１００３）。具体的には、制御部１０４は、初期化処理を繰り返し処理が行われる前に行う。
【００５４】
（実施例１にかかる制御部１０４が行う制御処理手順）
図１１は、実施例１にかかる制御部１０４が行う制御処理手順の一例を示すフローチャートである。ここでは、１サイクルにおける制御部１０４が行う制御処理手順を示している。制御部１０４は、ＥＸ／ＭＥＭ／ＷＢステージ処理部１０３からの分岐フラグが１であるか否かを判断する（ステップＳ１１０１）。分岐フラグが１の場合（ステップＳ１１０１：Ｙｅｓ）、制御部１０４は、ＥＸ／ＭＥＭ／ＷＢステージ処理部１０３からの分岐アドレスが命令保持ＦＦ群に記憶された命令を示すアドレスか否かを判断する（ステップＳ１１０２）。たとえば、専用のフラグ情報をＥＸ／ＭＥＭ／ＷＢステージ処理部１０３が出力し、制御部１０４は、該専用のフラグ情報に基づいて判断してもよい。または、制御部１０４は、分岐アドレスが指定のメモリアドレス範囲であるか否かによって判定してもよい。ＥＸ／ＭＥＭ／ＷＢステージ処理部１０３は、繰り返し処理を実行させる命令群のうちの最後から２命令前に応じた演算が行われると、繰り返し処理を実行させる命令群の先頭の命令を示す命令メモリ１１３のアドレスを分岐アドレスにし、分岐フラグを１にする。ここでは、分岐フラグが１になっても、命令メモリ１１３のアドレスが分岐アドレスに設定されるため、制御部１０４は、分岐アドレスを参照することにより、第２切り替え部１０６を第４状態にさせるが、第１切り替え部１０５を第１状態のままにする。
【００５５】
分岐アドレスが命令保持ＦＦ群に記憶された命令を示すアドレスの場合（ステップＳ１１０２：Ｙｅｓ）、制御部１０４は、命令保持ＦＦ群使用フラグ  ＦＦを１にする（ステップＳ１１０３）。制御部１０４は、ＩｄｘＲ  ＦＦに分岐アドレスを設定し（ステップＳ１１０４）、読み出し用カウンタ＝Ｍとする（ステップＳ１１０５）。制御部１０４は、分岐先アドレスを命令保持ＦＦ群内の命令メモリアドレス（ＩＭＥＭアドレス）＋Ｍとし（ステップＳ１１０６）、一連の処理を終了する。
【００５６】
ステップＳ１１０２において、分岐アドレスが命令保持ＦＦ群１０７に記憶された命令を示すアドレスでない場合（ステップＳ１１０２：Ｎｏ）、制御部１０４は、命令保持ＦＦ群使用フラグ  ＦＦを０にする（ステップＳ１１０７）。そして、制御部１０４は、読み出し用カウンタが０の場合（ステップＳ１１０８）、分岐先アドレスが分岐アドレスとし（ステップＳ１１０９）、一連の処理を終了する。
【００５７】
ステップＳ１１０１において、分岐フラグが１でない場合（ステップＳ１１０１：Ｎｏ）、制御部１０４は、読み出し用カウンタが０であるか否かを判断する（ステップＳ１１１０）。読み出し用カウンタが０でない場合（ステップＳ１１１０：Ｎｏ）、制御部１０４は、読み出し用カウンタ−＝１とし（ステップＳ１１１１）、ＩｄｘＲ＋＝１とし（ステップＳ１１１２）、一連の処理を終了する。ＩｄｘＲとはＩｄｘＲ  ＦＦに記憶されている値である。
【００５８】
ステップＳ１１１０において、読み出し用カウンタが０である場合（ステップＳ１１１０：Ｙｅｓ）、制御部１０４は、命令保持ＦＦ群使用フラグ  ＦＦを０とし（ステップＳ１１１３）、一連の処理を終了する。
【００５９】
（実施例２）
実施例２では、繰り返し処理を行いながら、命令メモリ１１３に記憶された繰り返し処理の直後の処理を実行させる複数の命令と同一の命令を命令保持ＦＦ群１０７に記憶させる。実施例２では、実施例１と同一の機能、構成については同一の符号を付し、詳細な説明を省略する。
【００６０】
図１２は、実施例２にかかるプロセッサの一例を示す説明図である。プロセッサ１２００は、たとえば、フェッチ部１０１と、第１切り替え部１０５と、命令デコーダ１０２と、ＥＸ／ＭＥＭ／ＷＢステージ処理部１０３と、第２切り替え部１０６と、制御部１０４と、を有している。さらに、プロセッサ１２００は、たとえば、レジスタファイル１１０と、ＦＦ１０９と、命令保持ＦＦ群１０７と、を有している。プロセッサ１２００は、論理積回路であるＡＮＤ、否定論理回路であるＩＮＶＥＲＴＥＲ、論理和回路であるＯＲや、ラッチ回路であるＦＦなどの素子によって形成される。
【００６１】
第２切り替え部１０６は、上述した第３状態と、第４状態と、さらに、第５状態と、を切り替える。第５状態では、制御部１０４によって入力された第１アドレスと第２アドレスのうちのいずれかのアドレスをＰＣ１１２に対して設定する。第１アドレスは、先頭の命令を示す命令メモリ１１３のアドレスである。第２アドレスは、繰り返し処理を実行させる複数の命令のうちの一部の命令のつぎの命令を示す命令メモリ１１３のアドレスである。繰り返し処理を実行させる複数の命令のうちの一部の命令は、たとえば、繰り返し処理を実行させる複数の命令の先頭の命令からＭ番目の命令までの命令である。一部の命令のつぎの命令とは、Ｍ番目の命令が示す処理のつぎの処理を実行させる命令である。
【００６２】
具体的には、第２切り替え部１０６は、ループ用分岐フラグの値が１であれば、ループ用分岐先アドレスを選択してＰＣ１１２に設定する。
【００６３】
制御部１０４は、繰り返し処理を開始後に、第１切り替え部１０５を第１状態に、第２切り替え部１０６を第３状態にしたまま、フェッチ部１０１によってフェッチされた一部の命令を命令保持ＦＦ群１０７に格納する。ＥＸ／ＭＥＭ／ＷＢステージ処理部１０３は、Ｒｅｐｅａｔ命令を実行したら、ループ命令フラグを１に設定する。これにより、制御部１０４は、繰り返し処理が開始されたか否かを判断することができる。たとえば、制御部１０４は、１回目の繰り返し処理を開始後に、一部の命令を命令保持ＦＦ群１０７に格納してもよい。
【００６４】
制御部１０４は、命令保持ＦＦ群１０７に一部の命令が格納された後に、一部の命令を示す命令メモリ１１３のアドレスがあらたにＰＣ１１２に設定された場合、第１切り替え部１０５を第２状態にする。これにより、制御部１０４は、第１切り替え部１０５から命令保持ＦＦ群１０７に記憶された一部の命令を順次出力させる。その後、制御部１０４は、第１アドレスを入力して第２切り替え部１０６を第５状態にする。
【００６５】
制御部１０４は、第２切り替え部１０６を第５状態にすることによって先頭の命令を示すアドレスがＰＣ１１２に設定された後に、第２切り替え部１０６を第３状態にする。そして、制御部１０４は、フェッチ部１０１により命令メモリ１１３からフェッチされた複数の命令を命令保持ＦＦ群１０７に格納する。
【００６６】
制御部１０４は、複数の命令が命令メモリ１１３に格納された場合、第１切り替え部１０５を第１状態にし、第２アドレスを入力して第２切り替え部１０６を第５状態にする。その後、制御部１０４は、第２切り替え部１０６を第３状態にする。
【００６７】
ここで、命令メモリ１１３から命令保持ＦＦ群１０７に複数の命令を記憶させるプロセッサ１２００の詳細な動作例を図１３〜図１５に示す。図１３〜図１５で示す動作例では、１周目の繰り返し処理に、繰り返し処理を実行させる命令が命令保持ＦＦ群１０７に格納される。２回目の繰り返し処理中に、制御部１０４は、命令保持ＦＦ群１０７に格納された繰り返し処理を実行させる命令を命令デコーダ１０２によってデコードさせる。デコードさせつつ、制御部１０４は、フェッチ部１０１によって繰り返し処理の後の処理を実行させる命令をフェッチさせて、該命令を命令保持ＦＦ群１０７に格納する。３周目の繰り返し処理以降に、繰り返し処理の終了条件が満たされた場合、実施例１で示したように命令保持ＦＦ群１０７に記憶された繰り返し処理の後の処理を実行させる命令を命令デコーダ１０２にデコードさせる。
【００６８】
図１３は、繰り返し処理に関する一部の命令を命令保持ＦＦ群１０７に記憶させる例を示す説明図である。ＥＸ／ＭＥＭ／ＷＢステージ処理部１０３は、繰り返し処理が開始されると、ループパラメータを制御部１０４に対して出力する。ループパラメータは、ループ命令フラグと、ループサイズと、ループ回数である。ＥＸ／ＭＥＭ／ＷＢステージ処理部１０３は、ループ命令フラグを、繰り返し処理を実行させる複数の命令の先頭の命令が実行された場合に１にする。
【００６９】
ＥＸ／ＭＥＭ／ＷＢステージ処理部１０３は、繰り返し処理が開始されると、ループサイズ（ＳＩＺＥ）として、繰り返し処理を実行させる命令の数を制御部１０４に対して出力する。ＥＸ／ＭＥＭ／ＷＢステージ処理部１０３は、繰り返し処理が開始されると、ループサイズ（ＳＩＺＥ）として、繰り返し処理を実行させる命令の数を制御部１０４に対して出力する。ＥＸ／ＭＥＭ／ＷＢステージ処理部１０３は、繰り返し処理を実行させる複数の命令の先頭の命令が実行される都度、ループ回数をカウントして、制御部１０４に対してループ回数を出力する。
【００７０】
ループ回数が１回であり、ＥＸ／ＭＥＭ／ＷＢステージ処理部１０３からのループ命令フラグが１になると、制御部１０４は、ＰＣ１１２に設定されたアドレスからＭ命令前のアドレスを特定して、ループ先頭アドレス  ＦＦに設定する。これにより、繰り返し処理を実行させる複数の命令のうちの先頭の命令を示す命令メモリ１１３のアドレスがループ先頭アドレスＦＦに設定される。制御部１０４は、ループ先頭アドレス  ＦＦに設定されたアドレス（以下、「ループ先頭アドレス」と称する。）から、繰り返し処理を実行させる複数の命令数（ＳＩＺＥ）より１少ない数後の命令のアドレス（以下、「ループ最終アドレス」と称する。）を特定して、ループ最終アドレス  ＦＦに設定する。繰り返し処理を実行させる複数の命令のうちの最後の命令を示す命令メモリ１１３のアドレスが設定される。
【００７１】
制御部１０４は、ＰＣ１１２に設定されたアドレスが、ループ先頭アドレスから、ループ先頭アドレスが示す命令よりもＭ後の命令を示す命令メモリ１１３のアドレスに含まれる場合、命令レジスタ１１４に設定された命令を命令保持ＦＦ群１０７に書き込む。命令保持ＦＦ群１０７に格納される命令ごとに付与されるＩｄｘについては、制御部１０４がＩｄｘＷ  ＦＦを用いて指定する。
【００７２】
ＥＸ／ＭＥＭ／ＷＢステージ処理部１０３は、繰り返し処理のうちの条件分岐命令が示す処理を実行すると、条件分岐命令フラグを１にして制御部１０４に出力する。ＥＸ／ＭＥＭ／ＷＢステージ処理部１０３は、繰り返し処理の終了条件が満たされた場合に実行される命令を示す命令メモリ１１３のアドレスを分岐先アドレスとして制御部１０４に出力する。
【００７３】
制御部１０４は、条件分岐命令フラグが１の場合に、分岐先アドレスを分岐先保持  ＦＦに格納する。
【００７４】
図１４および図１５は、繰り返し処理の後の複数の命令が命令保持ＦＦ群１０７に格納される例を示す説明図である。ＰＣ１１２に設定されたアドレスが、ループ最終アドレスが示す命令の１つ前の命令を示すアドレスである場合、制御部１０４は、ループ用分岐フラグを１とし、ループ用分岐先アドレスを分岐先保持  ＦＦに記憶されたアドレス（上述した第１アドレス）にする。これにより、図１４に示すように、第２切り替え部１０６は、第５状態となり、ループ用分岐先アドレスを選択してＰＣ１１２に設定する。図１５に示すように、制御部１０４は、第２切り替え部１０６を第５状態にした後に、ループ用分岐フラグを０とし、第２切り替え部１０６を第３状態にする。第２切り替え部１０６を第５状態にした後とは、第２切り替え部１０６を第５状態にしたサイクルのつぎのサイクルを示している。
【００７５】
ＰＣ１１２に設定されたアドレスがループ最終アドレスの場合、制御部１０４は、命令保持ＦＦ群使用フラグ  ＦＦを１に設定する。第１切り替え部１０５は、実施例１と同様に、命令保持ＦＦ群使用フラグ  ＦＦの値が１であるため、ＦＦ１０９に記憶された命令を選択して命令デコーダ１０２に出力する。命令保持ＦＦ群１０７に記憶されたいずれの命令をＦＦ１０９に設定するかは、制御部１０４が、ＩｄｘＲ  ＦＦの値を用いて決定する。
【００７６】
これにより、命令デコーダ１０２は、命令保持ＦＦ群１０７に記憶された繰り返し処理を実行させる命令をデコードする。フェッチ部１０１は、命令メモリ１１３から、分岐先アドレスが示す命令をフェッチする。
【００７７】
そして、制御部１０４は、フェッチされた命令を命令保持ＦＦ群１０７に格納する。フェッチされた命令に付与するＩｄｘについては、制御部１０４は、ＩｄｘＷ  ＦＦの値を用いて制御する。ＩｄｘＷ  ＦＦが利用される具体例については、図１９および図２０に示すフローチャートで詳細に説明する。
【００７８】
さらに、制御部１０４は、複数の命令を書き終えたか否かを判断するために、書き込み用カウンタにＭを設定し、フェッチされた命令を命令保持ＦＦ群１０７に格納する都度、書き込み用カウンタをカウントダウンする。
【００７９】
複数の命令が命令保持ＦＦ群１０７に格納された後、フェッチ部１０１によってフェッチされた命令を命令デコーダ１０２によってデコードさせる。そのため、制御部１０４は、書き込み用カウンタが１の場合に、ループ用分岐フラグの値を１にし、ループ用分岐先アドレスをループ先頭アドレスが示す命令のＭ後の命令を示す命令メモリ１１３のアドレス（上述した第２アドレス）にする。これにより、第２切り替え部１０６は、第５状態になり、ループ用分岐先アドレスを選択してＰＣ１１２に設定する。
【００８０】
書き込み用カウンタが０の場合に、制御部１０４は、複数の命令を書き終えたと判断し、命令保持ＦＦ群使用フラグ  ＦＦの値を０にする。これにより、第１切り替え部１０５は、第１状態にあり、命令レジスタ１１４に設定された命令を選択して命令デコーダ１０２に出力する。
【００８１】
図１６は、命令保持ＦＦ群１０７の遷移例を示す説明図である。１周目の繰り返し処理の後には、命令保持ＦＦ群１０７には、繰り返し処理を実行させる複数の命令のうちの（Ｍ＋１）ワード以上の命令が格納される。ここでは１命令が１ワードとしている。２周目の繰り返し処理の後には、命令保持ＦＦ群１０７には、繰り返し処理を実行させる複数の命令のうちの（Ｍ＋１）ワード以上の命令のつぎに、分岐先アドレスが示す命令からフェッチ部１０１によるフェッチにかかるサイクル数後の命令までが格納される。
【００８２】
また、繰り返し処理を実行させる複数の命令の後の命令が命令保持ＦＦ群１０７に格納された後に、分岐フラグが１に成った場合のプロセッサ１２００の動作は、実施例１で示した動作例と同一であるため、詳細な説明を省略する。
【００８３】
実施例２によれば、繰り返し処理の終了条件を満たした場合のつぎの処理を実行させる命令を、繰り返し処理が開始される前に命令保持ＦＦ群１０７へ格納させなくてもよいため、処理の高速化を図ることができる。
【００８４】
（第２切り替え部１０６が行う設定処理手順）
図１７は、第２切り替え部１０６が行うＰＣ１１２の設定処理手順を示すフローチャートである。ここでは、１サイクルにおける第２切り替え部１０６が行うＰＣ１１２の設定処理手順を示す。まず、第２切り替え部１０６は、ループ用分岐フラグが１であるか否かを判断する（ステップＳ１７０１）。ループ用分岐フラグが１の場合（ステップＳ１７０１：Ｙｅｓ）、第２切り替え部１０６は、分岐フラグが１であるか否かを判断する（ステップＳ１７０２）。
【００８５】
分岐フラグが１の場合（ステップＳ１７０２：Ｙｅｓ）、第２切り替え部１０６は、ＰＣ１１２＝分岐先アドレスとし（ステップＳ１７０３）、一連の処理を終了する。分岐フラグが０の場合（ステップＳ１７０２：Ｎｏ）、第２切り替え部１０６は、ＰＣ１１２＝ループ用分岐先アドレスとし（ステップＳ１７０４）、一連の処理を終了する。
【００８６】
ステップＳ１７０１において、ループ用分岐フラグが０の場合（ステップＳ１７０１：Ｎｏ）、第２切り替え部１０６は、分岐フラグが１であるか否かを判断する（ステップＳ１７０５）。分岐フラグが１の場合（ステップＳ１７０５：Ｙｅｓ）、第２切り替え部１０６は、ＰＣ１１２＝分岐先アドレスとし（ステップＳ１７０６）、一連の処理を終了する。分岐フラグが０の場合（ステップＳ１７０５：Ｎｏ）、第２切り替え部１０６は、ＰＣ１１２＝ＰＣ１１２＋１とし（ステップＳ１７０７）、一連の処理を終了する。ステップＳ１７０７では、一例として、ＰＣ１１２＝ＰＣ１１２＋１としているが、具体的には、決定部１１１によって決定されたアドレスがＰＣ１１２に設定される。
【００８７】
（制御部１０４が行う初期化処理手順）
図１８は、制御部１０４が行う初期化処理手順の一例を示すフローチャートである。制御部１０４は、命令保持ＦＦ群使用フラグ  ＦＦを初期化し（ステップＳ１８０１）、ＩｄｘＲ  ＦＦを初期化し（ステップＳ１８０２）、読み出し用カウンタを初期化する（ステップＳ１８０３）。
【００８８】
さらに、制御部１０４は、書き込み用カウンタを初期化し（ステップＳ１８０４）、ループ先頭アドレス  ＦＦを初期化する（ステップＳ１８０５）。制御部１０４は、ループ最終アドレス  ＦＦを初期化し（ステップＳ１８０６）、ＩｄｘＷ  ＦＦを初期化し（ステップＳ１８０７）、分岐先保持  ＦＦを初期化する（ステップＳ１８０８）。具体的には、制御部１０４は、初期化処理を繰り返し処理が行われる前に行う。
【００８９】
（実施例２にかかる制御部１０４が行う制御処理手順例）
図１９〜図２２は、実施例２にかかる制御部１０４が行う制御処理手順の一例を示すフローチャートである。制御部１０４は、読み出し用カウンタが０か否かを判断する（ステップＳ１９０１）。読み出し用カウンタが０の場合（ステップＳ１９０１：Ｙｅｓ）、制御部１０４は、命令保持ＦＦ群使用フラグ  ＦＦ＝０とし（ステップＳ１９０４）、ステップＳ１９０５へ移行する。
【００９０】
読み出し用カウンタが１の場合（ステップＳ１９０１：Ｎｏ）、制御部１０４は、読み出し用カウンタ−＝１とし（ステップＳ１９０２）、ＩｄｘＲ＋＝１とする（ステップＳ１９０３）。つぎに、制御部１０４は、ＥＸ／ＭＥＭ／ＷＢステージ処理部１０３からのループ命令フラグに基づいて実行中の処理を示す命令が繰り返し処理を実行させるループ命令であるか否かを判断する（ステップＳ１９０５）。
【００９１】
ループ命令である場合（ステップＳ１９０５：Ｙｅｓ）、制御部１０４は、ループ先頭アドレス＝ＰＣ１１２とし（ステップＳ１９０６）、ループ最終アドレス＝ＰＣ１１２＋Ｓｉｚｅ−１とする（ステップＳ１９０７）。上述したように、Ｓｉｚｅとは、繰り返し処理を実行させる命令数である。
【００９２】
つぎに、制御部１０４は、ループ１周目であるか否かを判断する（ステップＳ１９０８）。ループ１周目である場合（ステップＳ１９０８：Ｙｅｓ）、制御部１０４は、ＰＣ１１２≧ループ先頭アドレス、かつＰＣ１１２≦ループ先頭アドレス＋Ｍであるか否かを判断する（ステップＳ１９０９）。ＰＣ１１２≧ループ先頭アドレスでない、またはＰＣ１１２≦ループ先頭アドレス＋Ｍでない場合（ステップＳ１９０９：Ｎｏ）、ステップＳ１９１２へ移行する。ＰＣ１１２≧ループ先頭アドレス、かつＰＣ１１２≦ループ先頭アドレス＋Ｍである場合（ステップＳ１９０９：Ｙｅｓ）、制御部１０４は、命令レジスタ１１４の値を命令保持ＦＦ群１０７のＩｄｘＷに格納し（ステップＳ１９１０）、ＩｄｘＷ＋＝１とする（ステップＳ１９１１）。
【００９３】
つぎに、制御部１０４は、実行中の命令が繰り返し処理の終了を判断する条件分岐命令であるか否かを判断する（ステップＳ１９１２）。条件分岐命令でない場合（ステップＳ１９１２：Ｎｏ）、制御部１０４は、ステップＳ１９１４へ移行する。条件分岐命令である場合（ステップＳ１９１２：Ｙｅｓ）、制御部１０４は、分岐先保持  ＦＦ＝分岐先アドレスとする（ステップＳ１９１３）。
【００９４】
制御部１０４は、ＰＣ１１２が「ループ最終アドレス−１」であるか否かを判断する（ステップＳ１９１４）。ＰＣ１１２が「ループ最終アドレス−１」でない場合（ステップＳ１９１４：Ｎｏ）、ステップＳ１９１７へ移行する。ＰＣ１１２が「ループ最終アドレス−１」である場合（ステップＳ１９１４：Ｙｅｓ）、制御部１０４は、ループ用分岐フラグ＝１とし（ステップＳ１９１５）、ループ用分岐先アドレス＝分岐先保持  ＦＦとする（ステップＳ１９１６）。
【００９５】
制御部１０４は、ＰＣ１１２＝ループ最終アドレスであるか否かを判断する（ステップＳ１９１７）。ＰＣ１１２＝ループ最終アドレスでない場合（ステップＳ１９１７：Ｎｏ）、一連の処理を終了する。ＰＣ１１２＝ループ最終アドレスである場合（ステップＳ１９１７：Ｙｅｓ）、制御部１０４は、命令保持ＦＦ群使用フラグ  ＦＦ＝１とし（ステップＳ１９１８）、命令保持ＦＦ群１０７読み出しＩｄｘＲ＝０とする（ステップＳ１９１９）。そして、制御部１０４は、書き込み用カウンタ＝Ｍ、読み出し用カウンタ＝Ｍとし（ステップＳ１９２０）、一連の処理を終了する。
【００９６】
ステップＳ１９０８において、ループ１周目でない場合（ステップＳ１９０８：Ｎｏ）、制御部１０４は、ループ２周目であるか否かを判断する（ステップＳ１９２１）。ループ２周目である場合（ステップＳ１９２１：Ｙｅｓ）、制御部１０４は、書き込み用カウンタが１であるか否かを判断する（ステップＳ１９２２）。書き込み用カウンタが０の場合（ステップＳ１９２２：Ｎｏ）、ステップＳ１９２５へ移行する。書き込み用カウンタが１の場合（ステップＳ１９２２：Ｙｅｓ）、制御部１０４は、ループ用分岐フラグ＝１とし（ステップＳ１９２３）、ループ用分岐先アドレス＝ループ先頭アドレス＋Ｍとする（ステップＳ１９２４）。
【００９７】
制御部１０４は、書き込み用カウンタが０であるか否かを判断する（ステップＳ１９２５）。書き込み用カウンタが０でない場合（ステップＳ１９２５：Ｎｏ）、制御部１０４は、命令レジスタ１１４の値を命令保持ＦＦ群１０７のＩｄｘＷに格納し（ステップＳ１９２６）、ＩｄｘＷ＋＝１とし（ステップＳ１９２７）、Ｉｄｘ＋＝１とする（ステップＳ１９２８）。制御部１０４は、書き込み用カウンタ−＝１とし（ステップＳ１９２９）、ステップＳ１９３１へ移行する。
【００９８】
書き込み用カウンタが０である場合（ステップＳ１９２５：Ｙｅｓ）、制御部１０４は、命令保持ＦＦ群使用フラグ  ＦＦ＝０とし（ステップＳ１９３０）、ＰＣ１１２＝ループ最終アドレス−１であるか否かを判断する（ステップＳ１９３１）。ＰＣ１１２＝ループ最終アドレス−１でない場合（ステップＳ１９３１：Ｎｏ）、一連の処理を終了する。
【００９９】
ＰＣ１１２＝ループ最終アドレス−１である場合（ステップＳ１９３１：Ｙｅｓ）、制御部１０４は、ループ用分岐フラグ＝１とし（ステップＳ１９３２）、ループ用分岐先アドレス＝ループ先頭アドレスとし（ステップＳ１９３３）、一連の処理を終了する。
【０１００】
ステップＳ１９２１において、ループ２周目でない場合（ステップＳ１９２１：Ｎｏ）、制御部１０４は、ループ３周目であるか否かを判断する（ステップＳ１９３４）。ループ３周目である場合（ステップＳ１９３４：Ｙｅｓ）、制御部１０４は、分岐フラグ＝１であり、かつ分岐アドレス＝分岐先保持  ＦＦであるか否かを判断する（ステップＳ１９３５）。分岐フラグ＝１でない、または分岐アドレス＝分岐先保持  ＦＦでない場合（ステップＳ１９３５：Ｎｏ）、ステップＳ１９４０へ移行する。
【０１０１】
分岐フラグ＝１であり、かつ分岐アドレス＝分岐先保持  ＦＦである場合（ステップＳ１９３５：Ｙｅｓ）、制御部１０４は、命令保持ＦＦ群使用フラグ  ＦＦ＝１とし（ステップＳ１９３６）、命令保持ＦＦ群１０７読み出しＩｄｘＲ＝Ｍとする（ステップＳ１９３７）。制御部１０４は、読み出し用カウンタ＝Ｍとし（ステップＳ１９３８）、分岐先アドレス＝分岐先アドレス＋Ｍとする（ステップＳ１９３９）。
【０１０２】
つぎに、制御部１０４は、ＰＣ１１２が「ループ最終アドレス−１」であるか否かを判断する（ステップＳ１９４０）。ＰＣ１１２が「ループ最終アドレス−１」でない場合（ステップＳ１９４０：Ｎｏ）、一連の処理を終了する。ＰＣ１１２が「ループ最終アドレス−１」である場合（ステップＳ１９４０：Ｙｅｓ）、制御部１０４は、ループ用分岐フラグ＝１とし（ステップＳ１９４１）、ループ用分岐先アドレス＝ループ先頭アドレスとし（ステップＳ１９４２）、一連の処理を終了する。
【０１０３】
ステップＳ１９０５において、ループ命令でない場合（ステップＳ１９０５：Ｎｏ）、またはステップＳ１９３４において、ループ３周目以降でない場合（ステップＳ１９３４：Ｎｏ）、ステップＳ１９４３へ移行する。制御部１０４は、第２切り替え部１０６へ出力する分岐先アドレス＝ＥＸ／ＭＥＭ／ＷＢステージ処理部１０３から出力された分岐先アドレスとする（ステップＳ１９４３）。そして、制御部１０４は、第２切り替え部１０６へ出力する分岐フラグ＝ＥＸ／ＭＥＭ／ＷＢステージ処理部１０３から出力された分岐フラグとし（ステップＳ１９４４）、一連の処理を終了する。
【０１０４】
以上説明したように、プロセッサによれば、繰り返し処理の直後の処理を実行させる命令を記憶するメモリを用意し、繰り返し処理の終了条件を満たした場合、フェッチされた命令に代わり該メモリ内の命令をデコードさせる。これにより、繰り返し処理の終了条件を満たしてつぎの処理に移行する際に発生するサイクルロスを減少させることができる。さらに、本発明におけるプロセッサは、プリデコード機能を搭載したプロセッサと比較して、回路規模を縮小化することができる。
【０１０５】
また、プロセッサは、繰り返し処理の終了条件を満たした場合のつぎの処理を実行させる命令を、繰り返し処理を実行させながら命令保持ＦＦ群に格納させる。繰り返し処理の終了条件を満たした場合のつぎの処理を実行させる命令を、繰り返し処理が開始される前に命令保持ＦＦ群へ格納させなくてもよいため、処理の高速化を図ることができる。
【０１０６】
また、プロセッサでは、繰り返し処理の終了条件を満たした場合のつぎの処理を実行させる複数の命令のうちの先頭の命令よりも後の命令を示すアドレスがＰＣに設定された後に、第２切り替え部を第３状態にする。プロセッサでは、該後の命令がフェッチされた後に、第１切り替え部を第１状態にする。これにより、プロセッサでは、フェッチにかかるサイクル数に基づいて各切り替え部の状態を切り替えることができる。
【０１０７】
また、該後の命令は、該先頭の命令からフェッチにかかるサイクル数以上後の命令である。これにより、命令保持ＦＦ群に格納させる命令の数を減少させることができ、命令保持ＦＦ群のサイズを縮小化することができる。
【０１０８】
また、該後の命令が先頭の命令からフェッチにかかるサイクル数後の命令である。これにより、命令保持ＦＦ群に格納させる命令の数を最少に抑えることができ、命令保持ＦＦ群のサイズを縮小化することができる。
【符号の説明】
【０１０９】
１００  プロセッサ
１０１  フェッチ部
１０２  命令デコーダ
１０３  ＥＸ／ＭＥＭ／ＷＢステージ処理部
１０４  制御部
１０５  第１切り替え部
１０６  第２切り替え部
１０７  命令保持ＦＦ群
１１２  ＰＣ
１１３  命令メモリ
【図１】
0005915312.tif 000002
【図２】
0005915312.tif 000003
【図３】
0005915312.tif 000004
【図４】
0005915312.tif 000005
【図５】
0005915312.tif 000006
【図６】
0005915312.tif 000007
【図７】
0005915312.tif 000008
【図８】
0005915312.tif 000009
【図９】
0005915312.tif 000010
【図１０】
0005915312.tif 000011
【図１１】
0005915312.tif 000012
【図１２】
0005915312.tif 000013
【図１３】
0005915312.tif 000014
【図１４】
0005915312.tif 000015
【図１５】
0005915312.tif 000016
【図１６】
0005915312.tif 000017
【図１７】
0005915312.tif 000018
【図１８】
0005915312.tif 000019
【図１９】
0005915312.tif 000020
【図２０】
0005915312.tif 000021
【図２１】
0005915312.tif 000022
【図２２】
0005915312.tif 000023