(57)【要約】【課題】パイプラインの段数を増やした場合でも、高速かつ正確なループ処理を実行可能なデータ処理装置を提供すること。【解決手段】本発明に係るデータ処理装置は、命令メモリと、前記命令メモリに格納された命令をフェッチするフェッチ回路と、を備え、ループ処理をパイプライン処理する情報処理装置であって、前記フェッチ回路が、当該フェッチ回路から出力する命令を格納する命令キューと、前記命令メモリから取り込んだ命令を格納する退避キューと、前記命令キューから出力された命令と前記退避キューから出力された命令とからいずれかを選択するセレクタと、前記セレクタに選択された命令を格納し、前記命令キューへ出力するループキューと、を備えるものである。【選択図】図１
2010140398.tif 000002
【特許請求の範囲】
【請求項１】
命令メモリと、
前記命令メモリに格納された命令をフェッチするフェッチ回路と、を備え、ループ処理をパイプライン処理する情報処理装置であって、
前記フェッチ回路が、
当該フェッチ回路から出力する命令を格納する命令キューと、
前記命令メモリから取り込んだ命令を格納する退避キューと、
前記命令キューから出力された命令と前記退避キューから出力された命令とからいずれかを選択するセレクタと、
前記セレクタに選択された命令を格納し、前記命令キューへ出力するループキューと、を備えるデータ処理装置。
【請求項２】
パイプライン処理の前記フェッチ回路におけるフェッチフェーズの数をＮとすると、前記ループキューの個数が（Ｎ−１）個であることを特徴とする請求項１に記載のデータ処理装置。
【請求項３】
前記命令キューの数をＱとすると、前記退避キューの個数が（Ｎ−Ｑ−１）個であることを特徴とする請求項２に記載のデータ処理装置。
【請求項４】
ループ処理を構成する最小実行パケット数をＭとすると、Ｎ≦Ｑ＋Ｍ＋１であることを特徴とする請求項３に記載のデータ処理装置。
【請求項５】
ループ処理を構成する最小実行パケット数が、前記ループキューの個数よりも小さいことを特徴とする請求項１〜４のいずれか一項に記載のデータ処理装置。
【請求項６】
ループ処理を構成する最小実行パケット数が２であることを特徴とする請求項５に記載のデータ処理装置。
【請求項７】
命令メモリからフェッチした第１の命令を出力するための命令キューへ格納し、
前記命令メモリからフェッチした第２の命令を退避キューへ格納し、
前記命令キューへ格納された第１の命令と前記退避キューへ格納された第２の命令とのうちからいずれかを選択してループキューへ格納し、
前記選択により前記ループキューに格納された命令を前記命令キューへ出力するデータ処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置及び情報処理方法に関し、特に、命令をパイプライン処理する情報処理装置及び情報処理方法に関する。
【背景技術】
【０００２】
各種のプロセッサとして、命令をパイプライン処理によって実行するパイプライン方式のものが知られている。パイプラインは、命令のフェッチ、デコード、実行などの複数のフェーズ（ステージ）に分割されており、このパイプラインを複数オーバラップさせて、１つの命令の処理が終了する前に次の命令の処理を順次開始し、同時に複数の命令を処理することで高速化を図っている。パイプライン処理とは、各命令についてフェッチフェーズから実行フェーズまでパイプラインの一連のフェーズを処理することである。近年、パイプラインの段数（フェーズ数）を増やして高速クロックでの動作に対応する手法が多く用いられている。
【０００３】
他方、汎用マイクロプロセッサよりも積和演算などを高速に処理し、各種の用途に特化した機能を実現するプロセッサとしてＤＳＰ（Digital Signal Processor）が知られている。一般に、ＤＳＰでは、連続する繰り返し処理（ループ処理）を効率よく実行する必要がある。このようなＤＳＰでは、入力されてフェッチされた命令がループ命令の場合、入力順に命令を処理するのではなく、ループの先頭の命令からループの終端の命令までの処理を繰り返すように制御する。このようなループ制御に関する技術が、例えば、特許文献１及び２に記載されている。
【０００４】
特許文献１には、上記ループ処理を高速化するために、ループ高速化回路が設けられたデータ処理装置が開示されている。このループ高速化回路は、繰り返し実行されるループ処理を構成する命令群を格納するためのループキューを備えている。すなわち、当該命令群を命令メモリからフェッチすることなく、ループ処理を繰り返すことができるため、ループ処理を高速化することができる。
【０００５】
なお、特許文献２に係る発明は本発明者によるものであり、ループ命令のパイプライン処理が完了するまで、ループ終端命令のパイプライン処理を保留するインターロック発生回路が開示されている。これにより、ループエンド判定を正確に実行することができる。
【特許文献１】特開２００５−２８４８１４号公報
【特許文献２】特開２００７−２０７１４５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、特許文献１に記載のループ処理高速化技術では、パイプラインの段数を増やした場合、正しい命令が実行されない恐れがあった。一方、これを回避するには、正しい命令を命令メモリからフェッチし直す必要があるため、高速化が犠牲となる。
【課題を解決するための手段】
【０００７】
本発明に係るデータ処理装置は、
命令メモリと、
前記命令メモリに格納された命令をフェッチするフェッチ回路と、を備え、ループ処理をパイプライン処理する情報処理装置であって、
前記フェッチ回路が、
当該フェッチ回路から出力する命令を格納する命令キューと、
前記命令メモリから取り込んだ命令を格納する退避キューと、
前記命令キューから出力された命令と前記退避キューから出力された命令とからいずれかを選択するセレクタと、
前記セレクタに選択された命令を格納し、前記命令キューへ出力するループキューと、を備えるものである。
【０００８】
本発明に係るデータ処理方法は、
命令メモリからフェッチした第１の命令を出力するための命令キューへ格納し、
前記命令メモリからフェッチした第２の命令を退避キューへ格納し、
前記命令キューへ格納された第１の命令と前記退避キューへ格納された第２の命令とのうちからいずれかを選択してループキューへ格納し、
前記選択により前記ループキューに格納された命令を前記命令キューへ出力するものである。
【０００９】
このデータ処理装置及び方法によれば、ループキューに加え、退避キューを備えているため、パイプラインの段数を増やした場合でも、高速かつ正確なループ処理を実行することができる。
【発明の効果】
【００１０】
本発明によれば、パイプラインの段数を増やした場合でも、高速かつ正確なループ処理を実行可能なデータ処理装置を提供することができる。
【発明を実施するための最良の形態】
【００１１】
以下、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。ただし、本発明が以下の実施の形態に限定される訳ではない。また、説明を明確にするため、以下の記載及び図面は、適宜、簡略化されている。
【００１２】
実施の形態１
図１を用いて、本実施形態に係るプロセッサの構成について説明する。例えば、このプロセッサは、命令をパイプライン処理するプロセッサであり、ループ命令の実行が可能なＤＳＰである。図１に示されるように、プロセッサは、命令メモリ２０１、フェッチ回路１００、デコーダ２０２、演算回路２０３、プログラム制御回路２０４、ロード・ストア回路２０５、データメモリ２０６を備えている。
【００１３】
命令メモリ２０１には、実行する命令があらかじめ格納されている。この命令は、ユーザが作成したプログラムをコンパイルした結果、得られるマシン語コードである。
【００１４】
フェッチ回路１００は、４つのセレクタＳ１〜Ｓ４、２つの命令キューＱＨ、ＱＬ、３つのループキューＬＱ１〜ＬＱ３、１つの退避キューＬＱ＿ｈｏｌｄ１を備えている。フェッチ回路１００は、命令メモリ２０１から命令をフェッチする（読み出す）。詳細には後述するように、フェッチ回路１００は、パイプラインのフェッチフェーズ（ＩＦフェーズ）の処理を実行する。
【００１５】
セレクタＳ１は、命令メモリ２０１とセレクタＳ４とに接続され、いずれかから出力された命令を選択する。この選択は、プログラム制御回路２０４からの制御信号により行われる。また、セレクタＳ１から出力された命令は２つの命令キューＱＨ、ＱＬに交互に格納される。非ループ処理すなわち通常の命令の場合、原則としてセレクタ１は命令メモリ２０１からの命令を選択する。他方、ループ処理の場合、原則としてセレクタ１はループキューＬＱ１〜ＬＱ３に格納されセレクタＳ４を介して出力されるループ内命令を選択する。これにより、高速でループ処理を実行することができる。
【００１６】
命令キューＱＨ、ＱＬには、フェッチ回路１００から出力される命令が格納される。命令キューＱＨ、ＱＬに格納された命令は、セレクタＳ２を介して交互にデコーダ２０２へ出力される。
【００１７】
退避キューＬＱ＿ｈｏｌｄ１には、命令メモリ２０１からフェッチされた命令が格納される。本実施の形態では、ループ外命令が格納される。しかしながら、特にループ外命令に限定されるわけではない。一般的に、ＩＦフェーズの段数Ｎ、命令キューの数をＱとすると、（Ｎ−１）−Ｑ＝（Ｎ−Ｑ−１）個の退避キューＬＱ＿ｈｏｌｄを備えることが好ましい。本実施の形態では、ＩＦフェーズの段数Ｎ＝４、命令キューの数Ｑ＝２であるため、１つの退避キューＬＱ＿ｈｏｌｄ１を備える。
【００１８】
セレクタＳ３は、命令キューＱＨ、ＱＬに１つずつ格納された命令と、退避キューＬＱ＿ｈｏｌｄ１に格納された１つの命令との３つの命令からいずれか１つを選択する。この選択は、プログラム制御回路２０４からの制御信号により行われる。
【００１９】
ループキューＬＱ１〜ＬＱ３は、ループ先頭命令から所定数の命令が格納されるレジスタである。ループキューＬＱ１〜ＬＱ３へは、命令キューＱＨ、ＱＬ又は退避キューＬＱ＿ｈｏｌｄ１に格納された命令が格納される。ループキューへは、原則としてループ内命令が格納され、各ループ内命令のＩＦ１〜ＩＦ３を省略することにより、ループ処理を高速で繰り返すことができる。一般的に、ＩＦフェーズの段数Ｎに対し、（Ｎ−１）個のループキューＬＱを備えることが好ましい。本実施の形態では、ＩＦフェーズが４段であるため、３つのループキューＬＱ１〜ＬＱ３を備える。
【００２０】
デコーダ２０２は、フェッチ回路２０２がフェッチした命令について、命令の割り振り（ディスパッチ）、デコード、アドレスの計算などを行う。詳細には後述するように、デコーダ２０２は、パイプラインのデコードフェーズ（ＤＱ、ＤＥ、ＡＣフェーズ）の処理を実行する。
【００２１】
演算回路２０３とロード・ストア回路２０５は、デコーダ２０２のデコード結果に基づいて処理を実行する。詳細には後述するように、演算回路２０３とロード・ストア回路２０５は、パイプラインの実行フェーズ（ＥＸフェーズ）の処理を実行する。演算回路２０３は、加算等の各種演算を行う。データメモリ２０６は、演算結果などを格納するメモリであり、ロード・ストア回路２０５は、このデータメモリ２０６にアクセスし、データの書き込み／読み出しを行う。
【００２２】
プログラム制御回路２０４は、デコードされた命令に応じ、フェッチ回路１００内のセレクタＳ１及びＳ３を制御し、ループ処理と非ループ処理との切り替えを制御する。また、プログラム制御回路２０４は、特許文献２と同様にインターロック発生回路、ループカウンタ、ループエンド判定回路など（不図示）を備えている。すなわち、プログラム制御回路２０４は、インターロック制御、ループ処理のカウント、ループエンド判定なども行っている。
【００２３】
次に、本実施形態に係るプロセッサにおいて、各命令がパイプライン処理される例について説明する。図３は、プロセッサに図２（ａ）のパイプラインを適用して、図２（ｂ）のプログラムを実行した場合のパイプライン処理を示している。
【００２４】
図２（ａ）のパイプラインは、高速動作に対応するために、ＩＦ１〜４、ＤＱ、ＤＥ、ＡＣ（Address Calculation）、ＥＸ１〜４の１１フェーズに分割されている。各フェーズの動作例を説明する。ＩＦ１〜ＩＦ４フェーズでは、４サイクルで１命令をフェッチする。ＤＱフェーズでは、命令の割り振りを行う。ＤＥフェーズでは、命令のデコードを行う。ＡＣフェーズでは、データメモリにアクセスするためのアドレスを計算する。そして、ＥＸ１〜ＥＸ４では、４サイクルのいずれか、例えばＥＸ４で命令を実行する。原則として、各フェーズが１クロックで処理される。
【００２５】
図２（ｂ）は、ここで実行されるプログラムの例である。このプログラムには、「ＬＯＯＰ  ２；（ループ命令）」の次に、「ｉｎｓｔ（instruction）１；（ループ先頭命令）」、「ｉｎｓｔ２；ループ終端命令）」からなるループ内命令が記述され、続いて「ｉｎｓｔ３；（ループ外１命令）」、「ｉｎｓｔ４；（ループ外２命令）」が記述されている。
【００２６】
ループ命令のオペランドは、ループ回数を示しており、この例ではループ内命令を２回繰り返すことを意味している。ループ命令に続いて、中カッコ｛｝で囲まれた命令が、繰り返し実行されるループ内命令である。ループ内命令のうち最初に記述された命令をループ先頭命令といい、ループ内命令のうち最後に記述された命令をループ終端命令という。すなわち、このプログラムは、ループ先頭命令とループ終端命令とを２回繰り返し実行した後、ループ外１命令以降を実行する。
【００２７】
図３に示すように、図３の最上段に示したループ命令（１）から連続する各命令は１クロック違いで図１の命令メモリ２０１から命令データとしてフェッチされる。図３の「命令データ」に示すように、各命令はＩＦ４フェーズで命令データとして取り出され、所定の場所に格納される。
【００２８】
具体的には、時刻Ｔ３に、ループ命令（１）が命令データとして取り出され、命令キューＱＬへ格納される。
続いて、時刻Ｔ４に、ループ先頭命令（２）が命令データとして取り出され、命令キューＱＨへ格納される。
時刻Ｔ５に、ループ命令（１）のＤＥフェーズでループ命令（１）がデコードされると、命令キューＱＬが空くため、ループ終端命令（３）が時刻Ｔ５の終端に命令キューＱＬへ格納される。
【００２９】
ここで、時刻Ｔ５にループ命令（１）がデコードされると、時刻Ｔ６でループ命令（１）のＡＣフェーズからＥＸ４フェーズまでの間、インターロックが発生する。従って、この間は、後続の命令のパイプライン処理が保留され、ループ先頭命令（２）のＤＥフェーズが処理されない。すなわち、ＤＱフェーズが延ばされる。それに伴い、ループ外１命令（４）のＩＦ４フェーズが延ばされる。
【００３０】
ループ命令（１）の実行が完了し、インターロックが終了すると、ループ先頭命令（２）のＤＱフェーズの終端すなわち時刻Ｔ６の終端で、ループエンド判定を行い、ループバックすなわちループ終端命令からループ先頭命令への分岐を開始する。同時に、命令キューＱＨに格納されているループ先頭命令（２）がループキューＬＱ１へコピーされ、ＩＦ４フェーズで命令キューへの格納を待っているループ外１命令（４）が退避キューＬＱ＿ｈｏｌｄ１にコピーされる。
【００３１】
時刻Ｔ７では、命令キューＱＨに格納されているループ先頭命令（２）がデコードされ、一旦、命令キューＱＨが空くが、ループキューＬＱ１からループ先頭命令（２）が書き戻される。また、命令キューＱＬに格納されているループ終端命令（３）がループキューＬＱ２へコピーされる。
【００３２】
時刻Ｔ８では、命令キューＱＬに格納されているループ終端命令（３）がデコードされ、一旦、命令キューＱＬが空くが、ループキューＬＱ２からループ終端命令（３）が書き戻される。また、退避キューＬＱ＿ｈｏｌｄ１に格納されているループ外１命令（４）がループキューＬＱ３へコピーされる。
【００３３】
時刻Ｔ９では、命令キューＱＨに格納されているループ先頭命令（２）がデコードされ、命令キューＱＨが空き、ループキューＬＱ３からループ外１命令（４）が格納される。
時刻Ｔ１０では、命令キューＱＬに格納されているループ終端命令（３）がデコードされ、命令キューＱＬが空き、命令メモリから取り出されたループ外２命令（５）が格納される。
時刻Ｔ１１では、命令キューＱＨに格納されているループ外１命令（４）がデコードされる。
時刻Ｔ１２では、命令キューＱＬに格納されているループ外２命令（５）がデコードされる。
【００３４】
次に、図４を用いて、本実施の形態に係る比較例について説明する。図４は、比較例に係るプロセッサである。図１に示したプロセッサとの相違点は、退避キューＬＱ＿ｈｏｌｄ１を備えていない点である。その他の構成は図１と同様であるため、説明を省略する。
【００３５】
次に、図５を用いて、比較例に係るプロセッサにおいて、各命令がパイプライン処理される例について説明する。図５は、比較例に係るプロセッサに図２（ａ）のパイプラインを適用して、図２（ｂ）のプログラムを実行した場合のパイプライン処理を示している。
【００３６】
時刻Ｔ５までの処理は図３と同様であるため、説明を省略する。図３と同様に、時刻Ｔ６でループ命令（１）の実行が完了し、インターロックが終了すると、ループ先頭命令（２）のＤＱフェーズの終端すなわち時刻Ｔ６の終端で、ループエンド判定を行い、ループバックを開始する。同時に、命令キューＱＨに格納されているループ先頭命令（２）がループキューＬＱ１へコピーされ、ＩＦ４フェーズで命令キューへの格納を待っているループ外１命令（４）がＱＨへコピーされる。
【００３７】
時刻Ｔ７では、命令キューＱＨに格納されているループ先頭命令（２）がデコードされ、ループキューＬＱ１からループ先頭命令（２）が書き戻される。この書き戻しは、ループ先頭命令（２）をもう一度実行するために必要であるが、この際、命令キューＱＨに格納されていたループ外１命令（４）がループ先頭命令（２）に書き換えられてしまう。また、命令キューＱＬに格納されているループ終端命令（３）がループキューＬＱ２へコピーされる。
【００３８】
時刻Ｔ８では、命令キューＱＬに格納されているループ終端命令（３）がデコードされ、一旦、命令キューＱＬが空くが、ループキューＬＱ２からループ終端命令（３）が書き戻される。また、命令キューＱＨに格納されているループ先頭命令（２）がループキューＬＱ３へコピーされてしまう。
【００３９】
時刻Ｔ９では、命令キューＱＨに格納されているループ先頭命令（２）がデコードされ、命令キューＱＨが空き、ループキューＬＱ３からループ先頭命令（２）が書き戻されてしまう。
時刻Ｔ１０では、命令キューＱＬに格納されているループ終端命令（３）がデコードされ、命令キューＱＬが空き、命令メモリから取り出されたループ外２命令（５）が格納される。
時刻Ｔ１１では、目的とするループ外１命令（４）でなく、ループ先頭命令（２）がデコードされてしまう。
時刻Ｔ１２では、ループ外２命令（５）がデコードされる。
【００４０】
以上のように、比較例では、ループキューＬＱ３にループ外１命令（４）を格納することができないため、ループ処理を正しく実行することができない。一方、ループ処理を脱出した後、命令メモリ２０１からループ外１命令（４）を取り出せば、正しい処理は行えるものの、ＩＦ１フェーズからやり直すため、速度が低下してしまう。このような問題は、ループ処理を構成する命令の数が、ループキューの個数よりも小さければ、起こり得る。比較例の場合、ループ処理を構成する命令の数が２であり、ループキューの個数が３である。
【００４１】
これに対し、実施の形態１に係るプロセッサは、退避キューＬＱ＿ｈｏｌｄ１を備えており、ループ外１命令（４）を格納しておくことができる。そして、所定のタイミングで退避キューＬＱ＿ｈｏｌｄ１からループ外１命令（４）をループキューＬＱ３へコピーすることができる。そのため、高速かつ正確にループ処理を実行することができる。
【００４２】
実施の形態２
次に、図６を用いて、本発明の実施の形態２に係るプロセッサについて説明する。図１に示したプロセッサとの相違点は、退避キューＬＱ＿ｈｏｌｄの数と、ループキューＬＱの数である。その他の構成は図１と同様であるため、説明を省略する。
【００４３】
本実施の形態は、好ましい退避キューＬＱ＿ｈｏｌｄの数と、ループキューＬＱの数を一般化したものである。具体的には、命令フェッチに要するパイプライン段数すなわちＩＦフェーズの段数Ｎであり、ゼロオーバーヘッドでループバックを実現するために、（Ｎ−１）個のループキューＬＱ１、ＬＱ２、ＬＱ３、・・・、ＬＱ（Ｎ−１）を備えている。また、当該プロセッサは、Ｑ個の命令キューＱ１、Ｑ２、Ｑ３、・・・、ＱＱを備えるため、（Ｎ−Ｑ−１）個の退避キューＬＱ＿ｈｏｌｄ１、ＬＱ＿ｈｏｌｄ２、・・・、ＬＱ＿ｈｏｌｄ（Ｎ−Ｑ−１）を備えている。
【００４４】
ただし、Ｎ≦Ｑ＋Ｍ＋１の関係を満足する必要がある。ここで、Ｍはループ処理を構成する最小実行パケット数である。この式について説明する。
（１）上記の通り、（Ｎ−１）個のループキューが必要である。
（２）ここで、ループ先頭命令でループ終端判定がなされ、ループバックが開始されると仮定する。ループ終端判定の時点で、命令キューにはループ先頭命令からＱ個の命令が保持されている。さらに、命令キューの手前には命令キューへの格納待ち状態のループ先頭命令から（Ｑ＋１）番目の命令が存在する。すなわち、ループキューへ格納可能なデータが（Ｑ＋１）個存在する。
（３）ループキューが（Ｑ＋１）個以上ある場合、（Ｑ＋１）以上のデータは、ループ処理を実行しながら命令キューに格納するデータから取得する必要がある。
（４）最小実行パケット数がＭであるため、ループ終端判定後、ループバック前に、（Ｍ−１）パケット実行される。
（５）従って、｛（Ｎ−１）−（Ｑ＋１）｝個の命令データを（Ｍ−１）パケット以下で取得する必要がある。
すなわち、（Ｎ−１）−（Ｑ＋１）≦Ｍ−１
よって、Ｎ≦Ｑ＋Ｍ＋１の関係を満足する必要がある。
【００４５】
次に、本実施形態に係るプロセッサにおいて、各命令がパイプライン処理される具体例について説明する。図８は、プロセッサに図７（ａ）のパイプラインを適用して、図７（ｂ）のプログラムを実行した場合のパイプライン処理を示している。
【００４６】
図７（ａ）のパイプラインは、高速動作に対応するために、ＩＦ１〜５、ＤＱ、ＤＥ、ＡＣ（Address Calculation）、ＥＸ１〜４の１２フェーズに分割されている。すなわちＩＦフェーズの段数Ｎ＝５である。それ以外は図２（ａ）と同様である。また、実施の形態１と同様、命令キューの数Ｑ＝２である。図７（ｂ）は、ここで実行されるプログラムの例である。図２（ｂ）の最後にループ外３命令が追加されている。
【００４７】
図８の「命令データ」に示すように、各命令はＩＦ５フェーズで命令データとして取り出され、所定の場所に格納される。
具体的には、時刻Ｔ３に、ループ命令（１）が命令データとして取り出され、命令キューＱＬへ格納される。
続いて、時刻Ｔ４に、ループ先頭命令（２）が命令キューＱＨへ格納される。
時刻Ｔ５に、ループ命令（１）のＤＥフェーズでループ命令（１）がデコードされると、命令キューＱＬが空くため、ループ終端命令（３）が時刻Ｔ５の終端に命令キューＱＬへ格納される。
【００４８】
ここで、時刻Ｔ５にループ命令（１）がデコードされると、時刻Ｔ６でループ命令（１）のＡＣフェーズからＥＸ４フェーズまでの間、インターロックが発生する。従って、この間は、後続の命令のパイプライン処理が保留され、ループ先頭命令（２）のＤＥフェーズが処理されない。すなわち、ＤＱフェーズが延びる。それに伴い、ループ外１命令（４）のＩＦ５フェーズ及びループ外２命令（５）のＩＦ４フェーズが延びる。
【００４９】
ループ命令（１）の実行が完了し、インターロックが終了すると、ループ先頭命令（２）のＤＱフェーズの終端すなわち時刻Ｔ６の終端で、ループエンド判定を行い、ループバックを開始する。同時に、命令キューＱＨに格納されているループ先頭命令（２）がループキューＬＱ１へコピーされ、ＩＦ５フェーズで命令キューへの格納を待っているループ外１命令（４）が退避キューＬＱ＿ｈｏｌｄ１にコピーされる。
【００５０】
時刻Ｔ７では、命令キューＱＨに格納されているループ先頭命令（２）がデコードされ、一旦、命令キューＱＨが空くが、ループキューＬＱ１からループ先頭命令（２）が書き戻される。また、命令キューＱＬに格納されているループ終端命令（３）がループキューＬＱ２へコピーされる。さらに、命令メモリから取り出されたループ外２命令（５）が退避キューＬＱ＿ｈｏｌｄ２に格納される。
【００５１】
時刻Ｔ８では、命令キューＱＬに格納されているループ終端命令（３）がデコードされ、一旦、命令キューＱＬが空くが、ループキューＬＱ２からループ終端命令（３）が書き戻される。また、退避キューＬＱ＿ｈｏｌｄ１に格納されているループ外１命令（４）がループキューＬＱ３へコピーされる。
【００５２】
時刻Ｔ９では、命令キューＱＨに格納されているループ先頭命令（２）がデコードされ、命令キューＱＨが空き、ループキューＬＱ３からループ外１命令（４）が格納される。また、退避キューＬＱ＿ｈｏｌｄ２に格納されているループ外２命令（５）がループキューＬＱ４へコピーされる。
時刻Ｔ１０では、命令キューＱＬに格納されているループ終端命令（３）がデコードされ、命令キューＱＬが空き、ループキューＬＱ４からループ外２命令（５）が格納される。
時刻Ｔ１１では、命令キューＱＨに格納されているループ外１命令（４）がデコードされ、命令キューＱＨが空き、命令メモリから取り出されたループ外３命令（６）が格納される。
時刻Ｔ１２では、命令キューＱＬに格納されているループ外２命令（５）がデコードされる。
時刻Ｔ１３では、命令キューＱＨに格納されているループ外３命令（６）がデコードされる。
【００５３】
以上説明したとおり、本実施の形態に係るプロセッサは、退避キューＬＱ＿ｈｏｌｄを備えており、ループ外命令を格納しておくことができる。そして、所定のタイミングで退避キューＬＱ＿ｈｏｌｄからループ外命令をループキューＬＱへコピーすることができる。そのため、高速かつ正確にループ処理を実行することができる。
【図面の簡単な説明】
【００５４】
【図１】実施の形態１に係るプロセッサの構成図である。
【図２】実施の形態１に係るパイプライン構成及びプログラムの一例である。
【図３】実施の形態１に係るプロセッサによるループ命令の実行例を示す図である。
【図４】比較例に係るプロセッサの構成図である。
【図５】比較例に係るプロセッサによるループ命令の実行例を示す図である。
【図６】実施の形態２に係るプロセッサの構成図である。
【図７】実施の形態２に係るパイプライン構成及びプログラムの一例である。
【図８】実施の形態２に係るプロセッサによるループ命令の実行例を示す図である。
【符号の説明】
【００５５】
１００  フェッチ回路
２０１  命令メモリ
２０２  デコーダ
２０３  演算回路
２０４  プログラム制御回路
２０５  ロード・ストア回路
２０６  データメモリ
Ｓ１〜Ｓ４  セレクタ
ＱＨ、ＱＬ、Ｑ１・・・ＱＱ  命令キュー
ＬＱ１、ＬＱ２、ＬＱ３・・・ＬＱ（Ｎ−１）  ループキュー
ＬＱ＿ｈｏｌｄ１、ＬＱ＿ｈｏｌｄ２・・・ＬＱ＿ｈｏｌｄ（Ｎ−Ｑ−１）  退避キュー
【図１】
2010140398.tif 000003
【図２】
2010140398.tif 000004
【図３】
2010140398.tif 000005
【図４】
2010140398.tif 000006
【図５】
2010140398.tif 000007
【図６】
2010140398.tif 000008
【図７】
2010140398.tif 000009
【図８】
2010140398.tif 000010