(57)【要約】      （修正有）【課題】繰り返し命令の途中で割り込みが発生した場合に、割り込み復帰時に途中から再開可能なプロセッサを提供する。【解決手段】１つの繰り返し命令に基づいて、回数分繰り返し命令を生成して実行するプロセッサにおいて、命令を実行すると共に主ＰＣの値をインクリメントし主、副ＰＣの値を出力する実行ユニットと、主ＰＣの値に基づいて命令メモリから命令を取得して実行ユニットに出力する命令フェッチユニットとを有し、命令フェッチユニットは、繰り返し命令のときに、回数分の展開繰り返し命令を生成して出力すると共に、初回時に実行ユニットの主ＰＣに所定値、副ＰＣに繰り返し命令に対応する命令メモリアドレスを記憶させ、最終回時に実行ユニットの主ＰＣに繰り返し命令に対応する命令メモリアドレスを記憶させ副ＰＣをリセットし、繰り返し命令実行中の割り込み復帰時、実行済み回数分の展開繰り返し命令に代えて無処理命令を出力する。【選択図】図５
2013161453.tif 000002
【特許請求の範囲】
【請求項１】
１つの繰り返し命令に基づいて、繰り返し回数分、当該繰り返し命令を生成して実行するプロセッサにおいて、
主プログラムカウンタ（以下、ＰＣ）と、副ＰＣと、入力された命令を実行すると共に前記主ＰＣの値をインクリメントし前記主ＰＣの値と前記副ＰＣの値とを出力する命令実行部と、を有する実行ユニットと、
前記入力された主ＰＣの値に基づいて命令メモリから前記命令を取得して前記実行ユニットに出力する命令フェッチユニットとを有し、
前記命令フェッチユニットは、前記取得した命令が繰り返し命令のときに、前記繰り返し命令に基づいて、前記繰り返し回数分の展開繰り返し命令を生成して出力すると共に、繰り返し初回時に前記実行ユニットの前記主ＰＣに所定値、前記副ＰＣに当該繰り返し命令に対応する前記命令メモリのアドレスを記憶させ、繰り返し最終回時に前記実行ユニットの主ＰＣに当該繰り返し命令に対応する前記命令メモリのアドレスを記憶させ前記副ＰＣをリセットし、前記繰り返し命令実行中に発生した割り込みからの復帰時、当該割り込みの発生時に実行済みの繰り返し回数分、前記展開繰り返し命令に代えて無処理命令を出力するプロセッサ。
【請求項２】
請求項１において、
前記繰り返し命令実行中に発生した割り込みであることは、前記割り込みの発生時における前記副ＰＣの値が有効であることに基づいて判定され、前記実行済みの繰り返し回数は、前記割り込みの発生時における前記主ＰＣの値に基づいて検知されるプロセッサ。
【請求項３】
請求項２において、
前記命令フェッチユニットは、前記繰り返し命令実行中に発生した第１の割り込みからの復帰時、さらに第２の割り込みが発生し当該第２の割り込みから復帰するとき、前記実行済みの繰り返し回数は前記第１の割り込みの発生時における主ＰＣの値に基づいて検知されるプロセッサ。
【請求項４】
請求項１乃至３のいずれかにおいて、
前記命令は、オペランドとオペコードとを有し、
前記命令フェッチユニットは、前記命令が繰り返し命令のとき、繰り返しごとに異なるオペランドを生成するプロセッサ。
【請求項５】
請求項１乃至４のいずれかにおいて、
前記繰り返し初回時に前記実行ユニットの主ＰＣに記憶される前記所定値は、前記繰り返し命令に対応する前記命令メモリのアドレスであるプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサに関する。
【背景技術】
【０００２】
無線通信等における演算処理では、異なる配列同士の足し算や乗算の演算処理を繰り返し行う必要がある。このような演算処理では、繰り返し処理を実現する命令列において、繰り返し対象の命令に加えて、繰り返し対象の命令に復帰するための分岐命令や、繰り返し回数をカウントするための演算命令を有する。しかし、これらの命令がオーバーヘッドとなり、性能劣化の要因となっていた。
【０００３】
そこで、性能劣化を回避するために、繰り返し対象の命令を、予め、繰り返し回数分に展開した展開済み繰り返し命令（以下、展開繰り返し命令）の命令列を命令メモリに保持させるループアンローリングの手法がある。しかしながら、ループアンローリングの手法によると命令列が増大し、命令メモリを圧迫してしまう。
【０００４】
そのため、専用の繰り返し命令を設け、命令メモリから繰り返し命令を読み出したときに、繰り返し回数分の展開繰り返し命令に展開して生成するプロセッサが提案される（例えば、特許文献１）。プロセッサは、例えば、繰り返しごとに、命令のオペコードは同一だが、オペランドが異なる展開繰り返し命令を生成する。
【０００５】
また、プロセッサでは割り込みが発生する。プロセッサは、割り込みが発生すると、例えば、実行中の命令列を示すプログラムカウンタ（以下、ＰＣ）を退避し、割り込み処理から復帰したときに、退避したＰＣから処理を再開する。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０００−１８７５８３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、繰り返しごとにオペランドが異なる展開繰り返し命令の実行中に割り込みが発生すると、プロセッサは、割り込み復帰時、退避したＰＣに基づいて繰り返し命令自体については取得できるものの、割り込み発生時の展開繰り返し命令のオペコードを再現することができない。このため、プロセッサは、繰り返し命令の途中で割り込みが発生した場合、割り込み復帰時に、繰り返し命令を途中から再開することができなかった。
【０００８】
そこで、このようなプロセッサでは、繰り返し命令に基づく一連の展開繰り返し命令の実行が完了するまで、割り込みをブロックしていた。しかし、優先度の高い割り込みの場合、割り込みは即座に受け付けられることが望ましい。
【０００９】
そこで、本発明は、繰り返し命令の途中で割り込みが発生した場合に、割り込み復帰時に、繰り返し命令を途中から再開可能なプロセッサを提供することにある。
【課題を解決するための手段】
【００１０】
第１の側面は、１つの繰り返し命令に基づいて、繰り返し回数分、当該繰り返し命令を生成して実行するプロセッサにおいて、
主プログラムカウンタ（以下、ＰＣ）と、副ＰＣと、入力された命令を実行すると共に前記主ＰＣの値をインクリメントし前記主ＰＣの値と前記副ＰＣの値とを出力する命令実行部と、を有する実行ユニットと、
前記入力された主ＰＣの値に基づいて命令メモリから前記命令を取得して前記実行ユニットに出力する命令フェッチユニットとを有し、
前記命令フェッチユニットは、前記取得した命令が繰り返し命令のときに、前記繰り返し命令に基づいて、前記繰り返し回数分の展開繰り返し命令を生成して出力すると共に、繰り返し初回時に前記実行ユニットの前記主ＰＣに所定値、前記副ＰＣに当該繰り返し命令に対応する前記命令メモリのアドレスを記憶させ、繰り返し最終回時に前記実行ユニットの主ＰＣに当該繰り返し命令に対応する前記命令メモリのアドレスを記憶させ前記副ＰＣをリセットし、前記繰り返し命令実行中に発生した割り込みからの復帰時、当該割り込みの発生時に実行済みの繰り返し回数分、前記展開繰り返し命令に代えて無処理命令を出力する。
【発明の効果】
【００１１】
第１の側面によれば、繰り返し命令の途中で割り込みが発生した場合に、割り込み復帰時に、繰り返し命令を途中から再開可能にする。
【図面の簡単な説明】
【００１２】
【図１】本実施の形態例におけるプロセッサの構成の一例を表す図である。
【図２】本実施の形態例における命令メモリに記憶される命令列の一例を表す図である。
【図３】通常の命令、及び、繰り返し命令を実行する場合における主ＰＣ及び副ＰＣの遷移を説明する図である。
【図４】図３における主ＰＣ及び副ＰＣの値と、命令との対応関係を表す例図である。
【図５】割り込み復帰処理における繰り返し命令の再開処理の流れを説明するフローチャート図である。
【図６】通常の命令及び繰り返し命令の実行中に割り込みが発生した場合における主ＰＣ及び副ＰＣの遷移を説明する図である。
【図７】図６における主ＰＣ及び副ＰＣの値と、命令との対応関係を表す例図である。
【図８】本実施の形態例における命令フェッチユニットの構成の一例を表す図である。
【図９】命令フェッチユニットのＰＣ値判定装置の詳細な構成を表す例図である。
【図１０】命令フェッチユニットのＰＣ値変換装置の詳細な構成を表す例図である。
【図１１】命令フェッチユニットの命令生成装置の詳細な構成を表す例図である。
【図１２】図１１の命令生成装置における信号遷移を表す例図である。
【図１３】割り込み無処理判定部の詳細な構成を表す例図である。
【図１４】図１３の割込み無処理判定部における信号遷移を表す例図である。
【図１５】繰り返し命令の実行中に発生した第１の割り込みからの復帰処理が完了していない間に、第２の割り込みが発生した場合の処理の流れを示すフローチャート図である。
【図１６】図１５のフローチャート図における主ＰＣ及び副ＰＣの値と、命令との対応関係を表す例図である。
【発明を実施するための形態】
【００１３】
図１は、本実施の形態例におけるプロセッサの構成の一例を表す図である。同図のプロセッサは、例えば、実行ユニット１０と、命令フェッチユニット２０、命令メモリ３０、データメモリ４０を有する。命令メモリ３０には、プロセッサの実行対象の命令列がアドレスに対応して記憶される。データメモリ４０には、実行ユニット１０が実行する命令の処理対象となるデータがアドレスに対応して記憶される。
【００１４】
図１の本実施の形態例における実行ユニット１０は、通常のプログラムカウンタ（以下、ＰＣと呼ぶ）である主ＰＣｐｘに加えて、副ＰＣｐｙを有する。副ＰＣｐｙは、繰り返し命令を実行するときに使用される。命令フェッチユニット２０は、実行ユニット１０から出力された主ＰＣｐｘまたは副ＰＣｐｙの値に基づいて（ｚ１、ｚ２）、命令メモリ３０からＰＣに対応するアドレスに記憶された命令（ｚ３）を取得し、実行ユニット１０に出力する（ｚ４）。また、命令フェッチユニット２０は、主ＰＣｐｘ及び副ＰＣｐｙの値（ｚ１）を、適宜変更して実行ユニット１０に出力する（ｚ５）。
【００１５】
実行ユニット１０は、命令フェッチユニット２０から取得した命令ｚ４を実行すると共に、主ＰＣｐｘ及び副ＰＣｐｙ（ｚ５）のうち主ＰＣｐｘをインクリメントする。実行ユニット１０は、命令フェッチユニット２０に対して、繰り返し命令を実行する場合の最大繰り返し回数ｚ６、割り込み処理から復帰したときの割り込み復帰信号ｚ７等を出力する。また、実行ユニット１０は、例えば、データメモリ４０に対してアドレスｚ８を出力し、データメモリ４０の当該アドレスに記憶されるデータｚ９を取得する。
【００１６】
本実施の形態例におけるプロセッサは、命令メモリ３０から取得した１つの繰り返し命令に基づいて、繰り返し回数分、展開繰り返し命令を生成して実行する。このとき、命令フェッチユニット２０は、取得した命令が繰り返し命令の場合、繰り返しごとに、展開繰り返し命令を生成すると共に、主ＰＣｐｘ及び副ＰＣｐｙの値を繰り返し命令実行中の状態に制御する。このため、命令メモリ３０には、通常の命令に加えて繰り返し命令が記憶される。
【００１７】
図２は、本実施の形態例における命令メモリ３０に記憶される命令列ＣＬ１の一例を表す図である。同図左の命令列ＣＬ１は命令メモリ３０に記憶される命令列の一例であり、右の命令列ＣＬ２は、左の命令列ＣＬ１に基づいて図１のプロセッサによって生成される命令列の一例である。この例において、命令メモリ３０に記憶される命令列ＣＬ１は、繰り返し命令「ＣＡｄｄ ｒ０，ｒ２０，ｒ１２」を有する。図１のプロセッサは、主ＰＣの値０ｘ１０ｂに基づいて繰り返し命令「ＣＡｄｄ ｒ０，ｒ２０，ｒ１２」を取得すると、繰り返し回数分の展開繰り返し命令ｃｍに展開する。
【００１８】
図２の右の命令列ＣＬ２は、繰り返し命令に基づいて展開された各展開繰り返し命令「ＣＡｄｄ ｒ０，ｒ２０，ｒ１２、ＣＡｄｄ ｒ１，ｒ２１，ｒ１２、…、ＣＡｄｄ ｒ７，ｒ２７，ｒ１２」ｃｍを有する。このように、一般的に、展開繰り返し命令のオペコード（ＣＡｄｄ）は、繰り返しごとに共通であるものの、オペランド（ｒ０，ｒ２０，ｒ１２等）は異なっている。また、この例において、繰り返し命令「ＣＡｄｄ ｒ０，ｒ２０，ｒ１２」の繰り返し回数は８である。繰り返し回数は、例えば、繰り返し命令のオペランド等に指定される。
【００１９】
このように、本実施の形態例におけるプロセッサは、１つの繰り返し命令に基づいて、繰り返し回数分の展開繰り返し命令を生成するため、命令メモリ３０には１つの繰り返し命令を記憶しておけばよい。このため、命令メモリ３０に記憶される命令数が抑制される。
【００２０】
ところで、割り込みが発生すると、一般的に、プロセッサは、その時点のＰＣの値を退避しておき、割り込みから復帰したときに退避したＰＣの値に基づいて処理を再開する。本実施の形態例におけるプロセッサにおいて、繰り返し命令の実行中に割り込みが発生した場合は、主ＰＣｐｘ及び副ＰＣｐｙが退避される。そして、本実施の形態例におけるプロセッサは、割り込みから復帰したときに、退避した主ＰＣｐｘ及び副ＰＣｐｙの値に基づいて繰り返し命令を初回から生成し直すと共に、既に実行した繰り返し回数分は命令に代えて無処理命令を出力する。
【００２１】
以下、本実施の形態例のプロセッサにおける繰り返し命令の実行に係る処理、及び、繰り返し命令実行中に発生した割り込みからの復帰処理について、順次、説明していく。まず、本実施の形態例のプロセッサが、通常の命令及び、繰り返し命令を実行する場合における主ＰＣｐｘ及び副ＰＣｐｙに係る処理の概要について説明する。
【００２２】
図１で前述したとおり、本実施の形態例のプロセッサにおける実行ユニット１０は、命令を実行する毎にインクリメントする主ＰＣｐｘに加えて、繰り返し命令を実行する場合に利用する副ＰＣｐｙを有する。
【００２３】
図３は、通常の命令、及び、繰り返し命令を実行する場合における主ＰＣｐｘ及び副ＰＣｐｙの遷移を説明する図である。同図における矢印ｔは時間の流れを表しており、通常の命令を実行する一連の流れＮＣと、繰り返し命令を実行する一連の流れＲＣが説明される。初めに、通常の命令を実行する一連の流れＮＣについて説明する。通常の命令の実行時、副ＰＣｐｙには、常に、無効であることを示す値（この例では、０ｘ０）が記憶される。
【００２４】
［通常の命令を実行する一連の流れ］
図３において、初め、実行ユニット１０は主ＰＣｐｘに値０ｘ１００を、副ＰＣｐｙに無効な値０ｘ０を有している。実行ユニット１０は、主ＰＣｐｘ及び副ＰＣｐｙの値を命令フェッチユニット２０に出力する（ｓ１）。続いて、命令フェッチユニット２０は、副ＰＣｐｙの値が有効か否かに基づいて、繰り返し命令の実行中であるか否かを判定する。副ＰＣｐｙからの値が有効である場合（０ｘ０以外）、繰り返し命令の実行中であることを意味し、当該値は繰り返し命令に対応する命令メモリ３０のアドレスを示す。一方、副ＰＣｐｙからの値が無効である場合（０ｘ０）、通常の命令であることを意味する。
【００２５】
信号ｓ１に基づくと、副ＰＣｐｙからの値は無効であり通常の命令に該当するため、命令フェッチユニット２０は、主ＰＣｐｘからの値０ｘ１００に基づいて、命令メモリ３０から命令「Ｓｔｏｒｅ ｒ１１，ｒ２９」を取得する。このとき、命令フェッチユニット２０は、取得した命令が繰り返し命令であるか否かを判定する。この例において、命令Ｓｔｏｒｅは繰り返し命令ではない。そのため、命令フェッチユニット２０は、主ＰＣｐｘ及び副ＰＣｐｙの値を変更することなく、取得した命令を実行ユニット１０に出力する（ｓ２）。
【００２６】
続いて、実行ユニット１０は、取得した命令「Ｓｔｏｒｅ ｒ１１，ｒ２９」を実行すると共に、主ＰＣｐｘの値０ｘ１００を値０ｘ１０４にインクリメントする。そして、実行ユニット１０は、主ＰＣｐｘの値０ｘ１０４、及び、副ＰＣｐｙの値０ｘ０を命令フェッチユニット２０に出力する（ｓ３）。同様にして、命令フェッチユニット２０は、主ＰＣｐｘからの値０ｘ１０４に基づいて命令メモリ３０から命令「Ｓｔｏｒｅ ｒ１１，ｒ３０」を取得し、実行ユニット１０に出力する（ｓ４）。このように、通常の命令が取得され、実行される。
【００２７】
［繰り返し命令を実行する一連の流れ］
続いて、繰り返し命令を実行する一連の流れＲＣについて説明する。図３において、続いて、実行ユニット１０は、主ＰＣｐｘの値０ｘ１０ｂ、及び、副ＰＣｐｙの値０ｘ０を命令フェッチユニット２０に出力する（ｓ５）。命令フェッチユニット２０は、副ＰＣｐｙからの値が無効であるため、同様にして、主ＰＣｐｘからの値０ｘ１０ｂに基づいて、命令メモリ３０から命令「ＣＡｄｄ ｒ０，ｒ２０，ｒ１２」を取得する。この例において、命令ＣＡｄｄは繰り返し命令である。そのため、命令フェッチユニット２０は、繰り返し命令と判定し、取得した命令に基づいて展開繰り返し命令を生成し実行ユニット１０に出力する（ｓ６）。そして、命令フェッチユニット２０は、繰り返し初回のとき、実行ユニット１０の副ＰＣｐｙに繰り返し命令に対応する命令メモリ３０のアドレス値（ＰＣ値）０ｘ１０ｂを記憶させる。
【００２８】
実行ユニット１０は、取得した命令「ＣＡｄｄ ｒ０，ｒ２０，ｒ１２」を実行すると共に、主ＰＣｐｘの値０ｘ１０ｂを値０ｘ１１０にインクリメントする。そして、実行ユニット１０は、主ＰＣｐｘの値０ｘ１１０、及び、副ＰＣｐｙの値０ｘ１０ｂを命令フェッチユニット２０に出力する（ｓ７）。このとき、命令フェッチユニット２０は、副ＰＣｐｙからの値０ｘ１０ｂが有効であるため繰り返し命令と判定し、２回目の展開繰り返し命令「ＣＡｄｄ ｒ１，ｒ２１，ｒ１２」を生成し、実行ユニット１０に出力する（ｓ８）。この例において、２回目以降の展開繰り返し命令のオペランドは、例えば、前回の展開繰り返し命令のオペランドとレジスタが保持する値とに基づいて生成される。
【００２９】
実行ユニット１０は、取得した命令「ＣＡｄｄ ｒ１，ｒ２１，ｒ１２」を実行すると共に、主ＰＣｐｘの値０ｘ１１０を値０ｘ１１４にインクリメントし、主ＰＣｐｘの値０ｘ１１４、及び、副ＰＣｐｙの値０ｘ１０ｂを命令フェッチユニット２０に出力する（ｓ９）。同様にして、命令フェッチユニット２０は、副ＰＣｐｙからの値０ｘ１０ｂが有効であるため繰り返し命令と判定し、次の展開繰り返し命令「ＣＡｄｄ ｒ２，ｒ２２，ｒ１２」を生成し、実行ユニット１０に出力する（ｓ９）。
【００３０】
そして、繰り返し回数が最大繰り返し回数（この例では８回）に達すると、命令フェッチユニット２０は、主ＰＣｐｘの値０ｘ１２８、及び、副ＰＣｐｙの値０ｘ１０ｂに基づいて（ｓ１１）繰り返し命令と判定し、展開繰り返し命令「ＣＡｄｄ ｒ７，ｒ２７，ｒ１２」を生成する。繰り返し最終回のとき、命令フェッチユニット２０は、実行ユニット１０の副ＰＣｐｙを無効値にリセットすると共に、主ＰＣｐｘに繰り返し命令に対応する命令メモリ３０のアドレス（ＰＣ値）０ｘ１０ｂをセットし直す。そして、命令フェッチユニット２０は、生成した命令を実行ユニット１０に出力する（ｓ１２）。
【００３１】
実行ユニット１０は、取得した命令「ＣＡｄｄ ｒ７，ｒ２７，ｒ１２」を実行すると共に、主ＰＣｐｘの値０ｘ１０ｂを値０ｘ１１０にインクリメントする。続いて、実行ユニット１０は、主ＰＣｐｘの値０ｘ１１０、及び、リセットされた副ＰＣｐｙの値０ｘ０を命令フェッチユニット２０に出力する（ｓ１３）。副ＰＣｐｙからの値が無効であるため、命令フェッチユニット２０は、主ＰＣｐｘからの値０ｘ１１０に基づいて、命令「Ａｄｄ ｒ８，ｒ０，ｒ１」を取得し、実行ユニット１０に出力する（ｓ１４）。このように、実行ユニット１０の主ＰＣｐｘ、及び、副ＰＣｐｙに基づいて、繰り返し命令が生成され実行される。
【００３２】
図４は、図３における主ＰＣｐｘ及び副ＰＣｐｙの値と、命令との対応関係を表す例図である。同図における、通常の命令を実行する一連の流れＮＣと、繰り返し命令を実行する一連の流れＲＣは、図３における流れに対応する。
【００３３】
図４のように、通常の命令を実行する一連の流れＮＣにおいて、主ＰＣｐｘにのみ値が記憶される。実行ユニット１０は、命令を実行する度に、主ＰＣｐｘの値をインクリメントして命令フェッチユニット２０に出力する。そして、主ＰＣｐｘの値に基づいて、命令フェッチユニット２０によって実行対象の命令が取得される。
【００３４】
また、図４の繰り返し命令を実行する一連の流れＲＣにおいて、繰り返し命令と判定されると、実行ユニット１０の副ＰＣｐｙに、繰り返し命令に対応する命令メモリ３０のアドレス（この例では、０ｘ１０ｂ）が記憶される。また、実行ユニット１０の主ＰＣｐｘには、所定値としてこの例では、繰り返し命令に対応する命令メモリ３０のアドレスが記憶され、繰り返しごとにインクリメントされる。主ＰＣｐｘの値は、所定値０ｘ１０ｂから繰り返しごとに０ｘ１２８までインクリメントされ、繰り返し最終回に、命令フェッチユニット２０によって、繰り返し命令に対応する命令メモリ３０のアドレス（０ｘ１０ｂ）に戻される。そして、主ＰＣｐｘの値は、０ｘ１０ｂから０ｘ１１０にインクリメントされ、次の命令が取得される。
【００３５】
これは、繰り返し命令が実行される間、副ＰＣｐｙには繰り返し命令に対応する命令メモリ３０のアドレスが、主ＰＣｐｘには繰り返し命令開始からのインクリメント回数を示す値、即ち、実行済みの繰り返し回数を示す値が記憶されることを意味する。つまり、プロセッサは、繰り返し命令を実行する間、実行ユニット１０の副ＰＣｐｙを繰り返し命令であるか否かの判定用に、主ＰＣｐｘを実行済み繰り返し回数カウンタとして使用する。これにより、本実施の形態例におけるプロセッサは、繰り返し命令の実行中に割り込みが発生し当該割り込みから復帰したとき、未実行の展開繰り返し命令から、繰り返し命令を再開することができる。
【００３６】
続いて、本実施の形態例のプロセッサにおける割り込み復帰処理について、順次、説明していく。
【００３７】
［割り込み復帰処理の説明］
本実施の形態例におけるプロセッサは、割り込みが発生すると、割り込み発生時の主ＰＣｐｘ及び、副ＰＣｐｙの値を退避する。このため、繰り返し命令の実行中に割り込みが発生した場合、退避された副ＰＣｐｙは割り込み命令に対応する命令メモリ３０のアドレス値を有し、退避された主ＰＣｐｘは、繰り返し初回からインクリメントされた所定値を有する。
【００３８】
割り込みからの復帰時、プロセッサは、退避された副ＰＣｐｙに基づいて割り込み命令実行中の割り込みであるか否かを判定し、割り込み命令のとき、副ＰＣｐｙの値に基づいて繰り返し命令を取得し、繰り返し初回から展開繰り返し命令を再生成する。また、プロセッサは、退避された主ＰＣｐｘに基づいて実行済みの繰り返し回数を検知し、実行済みの繰り返し回数分については、展開繰り返し命令に代えて無処理命令を実行する。
【００３９】
ここで、本実施の形態例におけるプロセッサの割り込み復帰処理の流れをフローチャート図に基づいて説明する。
【００４０】
図５は、割り込み復帰処理における繰り返し命令の再開処理の流れを説明するフローチャート図である。同図において、命令フェッチユニット２０は、割り込み復帰時、割り込み発生時に退避された退避主ＰＣｐｘ及び退避副ＰＣｐｙの値を取得する。そして、命令フェッチユニット２０は、退避副ＰＣｐｙの値に基づいて、繰り返し命令の実行中に発生した割り込みであるか否かを判定する（Ｓ１０）。具体的に、命令フェッチユニット２０は、退避副ＰＣｐｙの値が有効な場合、繰り返し命令の実行中における割り込みと判定し（Ｓ１０のＹＥＳ）、有効な値でない場合に通常の命令の実行時における割り込みと判定する（Ｓ１０のＮＯ）。
【００４１】
通常命令の実行時における割り込みの場合（Ｓ１０のＮＯ）、命令フェッチユニット２０は、退避主ＰＣｐｘの値に基づいて命令メモリ３０から命令を取得し、実行ユニット１０に出力して実行させる（Ｓ１１）。一方、繰り返し命令実行中における割り込みの場合（Ｓ１０のＹＥＳ）、命令フェッチユニット２０は、退避副ＰＣｐｙの値に基づいて命令メモリ３０から繰り返し命令を取得する。そして、命令フェッチユニット２０は、取得した繰り返し命令に基づいて繰り返し初回から展開繰り返し命令を生成するが、このとき、退避主ＰＣｐｘの値に基づく割り込み発生時に実行済みの繰り返し回数に、繰り返し回数が達したか否かを判定する（Ｓ１２）。
【００４２】
割り込み発生時に実行済みの繰り返し回数に達していない場合は（Ｓ１２のＮＯ）、命令フェッチユニット２０は、生成した展開繰り返し命令に代えて無処理命令を実行ユニット１０に出力する（Ｓ１３）。一方、割り込み発生時に実行済みの繰り返し回数に達している場合（Ｓ１２のＹＥＳ）、命令フェッチユニット２０は、生成した展開繰り返し命令を実行ユニット１０に出力する（Ｓ１４）。
【００４３】
続いて、図５のフローチャート図の処理を、実行ユニット１０の主ＰＣｐｘ及び副ＰＣｐｙの値の遷移に対応して説明する。
【００４４】
図６は、通常の命令及び繰り返し命令の実行中に割り込みが発生した場合における主ＰＣｐｘ及び副ＰＣｐｙの遷移を説明する図である。図３と同様にして、矢印ｔは時間の流れを表す。また、同図では、通常の命令の実行時に割り込みが発生した場合の一連の流れＮＣ２と、繰り返し命令の実行時に割り込みが発生した場合の一連の流れＲＣ２を説明する。
【００４５】
［通常の命令実行時に発生した割り込みからの復帰処理］
初めに、通常の命令の実行時に割り込みが発生した場合の一連の流れＮＣ２について説明する。図３で説明したとおり、例えば、実行ユニット１０は、主ＰＣｐｘの値０ｘ１０４と副ＰＣｐｙの値０ｘ０を命令フェッチユニット２０に出力する（ｓ３）。そして、命令フェッチユニット２０は、主ＰＣｐｘからの値０ｘ１０４に基づいて、命令メモリ３０から命令「Ｓｔｏｒｅ ｒ１１，ｒ３０」を取得する。続いて、命令フェッチユニット２０は、取得した命令を実行ユニット１０に出力する（ｓ４）。命令「Ｓｔｏｒｅ ｒ１１，ｒ２９」を取得すると、実行ユニット１０は命令を実行すると共に、主ＰＣｐｘの値０ｘ１０４を値０ｘ１０８にインクリメントする。ここまでは、図３の処理と同様である。
【００４６】
この例において、このとき、割り込みＥ１が発生する。割り込みＥ１が発生すると、実行ユニット１０は、主ＰＣｐｘの値０ｘ１０８と副ＰＣｐｙの値０ｘ０とを退避ＰＣｐ１として退避し、割り込み命令を実行する。割り込み命令が完了すると、実行ユニット１０は、退避ＰＣｐ１を命令フェッチユニット２０に出力する（ｓ２１）。
【００４７】
この場合、退避ＰＣｐ１の副ＰＣｐｙが無効（値０ｘ０）であり、通常の命令時の割り込みであるため（図５のＳ１０のＮＯ）、命令フェッチユニット２０は、退避ＰＣｐ１の主ＰＣｐｘの値０ｘ１０８に基づいて、命令メモリ３０から命令「Ｌｏａｄ ｒ１１，ｒ１２」を取得する（図５のＳ１１）。続いて、命令フェッチユニット２０は、取得した命令を実行ユニット１０に出力すると共に（ｓ２２）、実行ユニット１０の主ＰＣｐｘに退避ＰＣｐ１の主ＰＣｐｘの値０ｘ１０８をセットする。そして、実行ユニット１０は、取得した命令「Ｌｏａｄ ｒ１１，ｒ１２」を実行すると共に、主ＰＣｐｘの値０ｘ１０８を値０ｘ１０ｂにインクリメントする。
【００４８】
［繰り返し命令実行時に発生した割り込みからの復帰処理］
続いて、繰り返し命令の実行中に割り込みが発生した場合の一連の流れＮＣ２を説明する。図３で説明したとおり、命令フェッチユニット２０は、取得した命令「ＣＡｄｄ ｒ０，ｒ２０，ｒ１２」が繰り返し命令であると判定すると、繰り返し初回のとき、実行ユニット１０の副ＰＣｐｙに繰り返し命令に対応する命令メモリ３０のアドレス値０ｘ１０ｂをセットする。そして、実行ユニット１０は命令を実行すると共に、主ＰＣｐｘの値を０ｘ１０ｂから０ｘ１１０にインクリメントして、命令フェッチユニット２０に出力する（ｓ７）。
【００４９】
繰り返し２回目のとき、命令フェッチユニット２０は、副ＰＣｐｙに基づいて繰り返し命令と判定すると、展開繰り返し命令「ＣＡｄｄ ｒ１，ｒ２１，ｒ１２」を生成して、実行ユニット１０に出力する（ｓ８）。実行ユニット１０は命令を実行すると共に、主ＰＣｐｘの値０ｘ１１０を値０ｘ１１４にインクリメントする。このように、繰り返し２回目までの繰り返し処理までは、図３の処理と同様である。
【００５０】
この例において、繰り返し２回目の命令の実行後に割り込みＥ２が発生する。割り込みＥ２が発生すると、実行ユニット１０は、主ＰＣｐｘの値０ｘ１１４と副ＰＣｐｙの値０ｘ１０ｂとを退避ＰＣｐ２として退避し、割り込み命令を実行する。割り込み命令が完了すると、実行ユニット１０は、退避ＰＣｐ２を命令フェッチユニット２０に出力する（ｓ２３）。
【００５１】
このとき、命令フェッチユニット２０は、退避ＰＣｐ２の副ＰＣｐｙが有効な値０ｘ１０ｂであるため、繰り返し命令中の割り込みと判定し（図５のＳ１０のＹＥＳ）、退避ＰＣｐ２の副ＰＣｐｙの値０ｘ１０ｂに基づいて、命令メモリ３０から命令「ＣＡｄｄ ｒ０，ｒ２０，ｒ１２」を取得する。そして、命令フェッチユニット２０は、繰り返し命令に対応する命令メモリ３０のアドレス０ｘ１０ｂを、繰り返し初回時と同様に副ＰＣｐｙにセットし、さらに、主ＰＣｐｘに対してもセットする。この結果、実行ユニット１０の主ＰＣｐｘ及び副ＰＣｐｙが値０ｘ１０ｂに制御される。
【００５２】
つまり、繰り返し命令の実行中に発生した割り込みからの復帰時、命令フェッチユニット２０は、実行ユニット１０の主ＰＣｐｘ及び副ＰＣｐｙを、繰り返し初回時における実行ユニット１０のインクリメント前の主ＰＣｐｘと、副ＰＣｐｙの状態に制御する。
【００５３】
そして、命令フェッチユニット２０は、実行ユニット１０の主ＰＣｐｘと退避ＰＣｐ２の主ＰＣｐｘと値を比較し（図５のＳ１２）、一致しない場合は（図５のＳ１２のＮＯ）、展開繰り返し命令に代えて無処理命令（この例では、ｓｎｏｐ）を出力する（図５のＳ１３）。この例では、命令フェッチユニット２０は、実行ユニット１０の主ＰＣｐｘの値０ｘ１０ｂと退避ＰＣｐ２の主ＰＣｐｘの値０ｘ１１４とを比較するが、一致しないため（図５のＳ１２のＮＯ）、無処理命令を出力する（ｓ２４（図５のＳ１３））。
【００５４】
無処理命令を取得すると、実行ユニット１０は、主ＰＣｐｘの値０ｘ１０ｂを０ｘ１１０にインクリメントし、主ＰＣｐｘの値０ｘ１１０、及び、副ＰＣｐｙの値０ｘ１０ｂを命令フェッチユニット２０に出力する（ｓ２５）。そして、命令フェッチユニット２０は、副ＰＣｐｙからの値０ｘ１０ｂに基づいて繰り返し命令と判定すると、前回の命令「ＣＡｄｄ ｒ０，ｒ２０，ｒ１２」に基づいて命令「ＣＡｄｄ ｒ１，ｒ２１，ｒ１２」を生成する。ただし、実行ユニット１０の主ＰＣｐｘの値０ｘ１１０と、退避ＰＣｐ２の主ＰＣｐｘの値０ｘ１１４とが一致しないため（図５のＳ１２のＮＯ）、命令フェッチユニット２０は、命令「ＣＡｄｄ ｒ１，ｒ２１，ｒ１２」に代えて無処理命令を実行ユニット１０に出力する（ｓ２６（図５のＳ１３））。
【００５５】
続いて、実行ユニット１０が主ＰＣｐｘの値をインクリメントして、主ＰＣｐｘの値０ｘ１１４、及び、副ＰＣｐｙの値０ｘ１０ｂを命令フェッチユニット２０に出力すると（ｓ２７）、命令フェッチユニット２０は、前回の展開繰り返し命令に基づいて展開繰り返し命令「ＣＡｄｄ ｒ２，ｒ２２，ｒ１２」を生成する。このとき、実行ユニット１０の主ＰＣｐｘの値０ｘ１１４と、退避ＰＣｐ２の主ＰＣｐｘの値０ｘ１１４は一致するため（図５のＳ１２のＹＥＳ）、命令フェッチユニット２０は、無処理命令ではなく、展開繰り返し命令「ＣＡｄｄ ｒ２，ｒ２２，ｒ１２」を実行ユニット１０に出力する（ｓ２８（図５のＳ１４））。
【００５６】
図７は、図６における主ＰＣｐｘ及び副ＰＣｐｙの値と、命令との対応関係を表す例図である。同図における、繰り返し命令を実行する一連の流れＲＣ２は、図６に対応する。
【００５７】
図７において、繰り返し２回目の命令実行後に割り込みＥ２が発生すると、インクリメント後の主ＰＣｐｘの値０ｘ１１４、及び、副ＰＣｐｙの値０ｘ１０ｂが退避ＰＣｐ２として退避される。そして、割り込みＥ２における割り込み命令（Ｓｔｏｒｅ ｒ７，ｒ４〜ｒｅｔ）が実行される（ＥＣ２）。
【００５８】
割り込み処理の命令が終了して復帰すると、実行ユニット１０の各ＰＣは、退避ＰＣｐ２の副ＰＣｐｙに基づいて、繰り返し初回時におけるインクリメント前の主ＰＣｐｘの値０ｘ１０ｂと、副ＰＣｐｙの値０ｘ１０ｂに制御される。そして、繰り返し命令が繰り返し初回から再開され、繰り返しごとに、カウンタを示す実行ユニット１０の主ＰＣｐｘがインクリメントされる。また、実行ユニット１０の主ＰＣｐｘの値が退避ＰＣｐ２の主ＰＣｐｘの値０ｘ１１４に達するまでの間ＸＣ、即ち、繰り返し初回からインクリメントし直された主ＰＣｐｘが割り込み発生時の主ＰＣｐｘの値に達するまでの間ＸＣは、展開繰り返し命令に代えて無処理命令ｓｎｏｐが出力される。
【００５９】
そして、主ＰＣｐｘの値が割り込み発生時の主ＰＣｐｘの値に達すると、生成した展開繰り返し命令が出力される。続いて、繰り返し回数が最大繰り返し回数８に達すると、実行ユニット１０の副ＰＣｐｙがリセットされ、主ＰＣｐｘに繰り返し命令に対応する命令メモリ３０のアドレス値がセットされる。これにより、繰り返し命令の処理が完了する。
【００６０】
以上のようにして、繰り返し命令実行中に発生した割り込みからの復帰時、退避ＰＣｐ２における副ＰＣｐｙに基づいて、繰り返し命令実行中に発生した割り込みであることが判定可能となる。また、退避ＰＣｐ２における主ＰＣｐｘに基づいて、繰り返し初回時からのインクリメント値、即ち、割り込み発生時の実行済みの繰り返し回数が検知可能となる。
【００６１】
本実施の形態例のように、１つの繰り返し命令に基づいて、同一のオペコードで繰り返しごとにオペランドが異なる展開繰り返し命令を生成し実行するプロセッサでは、繰り返しごとの展開繰り返し命令のオペランドは、例えば、前回の展開繰り返し命令のオペランドとレジスタの保持された値とに基づいて生成される。このため、繰り返し命令中に発生した割り込みから復帰したとき、繰り返し途中の未実行の展開繰り返し命令を再生成することが難しい。
【００６２】
そこで、命令フェッチユニット２０は、退避ＰＣｐ２に基づいて、繰り返し命令を繰り返し初回から再開することで、展開繰り返し命令のオペランドを生成できる。ただし、命令フェッチユニット２０は、実行済み繰り返し回数に達するまでは、展開繰り返し命令に代えて無処理命令を出力することで、割り込み復帰時の展開繰り返し命令のオペランド生成を可能にしながら、実行済みの展開繰り返し命令が重複して実行されることを回避する。
【００６３】
また、命令フェッチユニット２０は、実行ユニット１０の主ＰＣｐｘを実行済み繰り返し回数のカウンタとして利用する。つまり、命令フェッチユニット２０は、割り込み復帰時にセットされた所定値から繰り返しごとにインクリメントされ直した主ＰＣｐｘの値が退避ＰＣｐ２の主ＰＣｐｘの値に達すると、割り込み発生時における実行済み繰り返し回数に達したものと判定する。
【００６４】
以下、本実施の形態例における命令フェッチユニット２０の構成の詳細について、順次説明する。
【００６５】
［命令フェッチユニット２０の構成の詳細］
図８は、本実施の形態例における命令フェッチユニット２０の構成の一例を表す図である。命令フェッチユニット２０は、例えば、ＰＣ値変換装置２１、命令生成装置２２、命令判定装置２４、ＰＣ値判定装置２３、ＦＦ２５、２６を有する。
【００６６】
まず、実行ユニットから出力された主ＰＣｐｘ、副ＰＣｐｙの値ｚ１が入力されると、ＦＦ２５に保持される。また、ＰＣ値判定装置２３は、入力された副ＰＣｐｙの値に基づいて、命令メモリ３０から命令を取得するＰＣを、主ＰＣｐｘまたは副ＰＣｐｙから選択する。そして、ＰＣ値判定装置２３から出力されたＰＣ値ｚ２に基づいて、命令メモリ３０から命令ｚ３が取得される。命令メモリ３０から取得された命令ｚ３は、命令判定装置２４、及び、命令生成装置２２に入力される。ＰＣ値判定装置２３の処理の詳細については後述する。
【００６７】
続いて、命令判定装置２４は、命令メモリ３０から取得された命令に基づいて、当該命令が繰り返し命令であるか否かを判定する。そして、繰り返し命令であるか否かの情報をＰＣ値変換装置２１、及び、命令生成装置２２に出力する。
【００６８】
ＰＣ値変換装置２１は、命令判定装置２４からの情報に基づいて、取得された命令が繰り返し命令ではない場合は、入力された主ＰＣｐｘ、副ＰＣｐｙの値ｚ１を変更することなく実行ユニット１０に出力する（ｚ５）。一方、繰り返し命令の場合、ＰＣ値変換装置２１は、入力された主ＰＣｐｘ、副ＰＣｐｙの値ｚ１を適宜変更し、実行ユニット１０に出力する（ｚ５）。
【００６９】
また、ＰＣ値変換装置２１は、ＦＦ２６に保持された割り込み復帰信号ｚ７等に基づいて、繰り返し命令実行中に発生した割り込みから復帰時と判定した場合にも、入力された主ＰＣｐｘ、副ＰＣｐｙの値ｚ１を適宜変更し、実行ユニット１０に出力する（ｚ５）。ＰＣ値変換装置２１についても、処理の詳細については後述する。
【００７０】
また、命令生成装置２２は、命令判定装置２４からの出力情報に基づいて、取得された命令ｚ３が繰り返し命令ではない場合は、命令を変更することなく実行ユニット１０に出力する（ｚ４）。一方、繰り返し命令の場合、命令生成装置２２は、展開繰り返し命令を生成し実行ユニット１０に出力する（ｚ４）。また、命令生成装置２２は、繰り返し命令実行中に発生した割り込みからの復帰時であって、実行済み繰り返し回数に達していないと判定したとき、展開繰り返し命令に代えて無処理命令を実行ユニット１０に出力する（ｚ４）。命令生成装置２２の処理の詳細についても、後述する。
【００７１】
このように、本実施の形態例における命令フェッチユニット２０は、実行ユニット１０から出力された主ＰＣｐｘ及び副ＰＣｐｙの値ｚ１、及び割り込み復帰信号ｚ７等に基づいて、ＰＣ値変更装置２１からは主ＰＣｐｘ及び副ＰＣｐｙの値ｚ５を、命令生成装置２２からは命令ｚ４を出力する。
【００７２】
［ＰＣ値判定装置２３の構成］
図９は、命令フェッチユニット２０におけるＰＣ値判定装置２３の詳細な構成を表す例図である。本実施の形態例において、主ＰＣｐｘと副ＰＣｐｙはそれぞれ３２ｂｉｔであり、上位３２ｂｉｔに副ＰＣｐｙ、下位３２ｂｉｔに主ＰＣｐｘの値を有する６４ｂｉｔの１つのＰＣとして構成される。ただし、主ＰＣｐｘと副ＰＣｐｙは、必ずしも１つのＰＣとして構成される必要はなく、ビット幅も３２ｂｉｔに限定されるものではない。
【００７３】
図９において、ＰＣ値判定装置２３は、実行ユニット１０から出力された主ＰＣｐｘ及び副ＰＣｐｙを含む６４ｂｉｔのＰＣｚ１に基づいて、上位３２ｂｉｔの副ＰＣｐｙの値と、下位３２ｂｉｔの主ＰＣｐｘの値とを抽出する（３１、３２）。ＯＲ回路Ｒ１は、抽出した副ＰＣｐｙの各ビットに対してＯＲを取った値を比較器Ｃ１に出力する。そして、比較器Ｃ１は、副ＰＣｐｙ（上位３２ｂｉｔ）の各ビットに対してＯＲを取った値が０のときＨレベルの選択信号を、０ではないときＬレベルの選択信号を出力する。セレクタＳ１は、選択信号がＨレベルの場合に主ＰＣｐｘ（下位３２ｂｉｔ）の値ｚ２を、Ｌレベルの場合に副ＰＣｐｙ（上位３２ｂｉｔ）の値ｚ２を命令メモリ３０に出力する。
【００７４】
つまり、ＰＣ値判定装置２３は、実行ユニット１０から出力された副ＰＣｐｙ（上位３２ｂｉｔ）が有効な場合は繰り返し命令であることにより副ＰＣｐｙの値を、無効な場合は主ＰＣｐｘ（下位３２ｂｉｔ）の値を出力する。これにより、繰り返し命令ではないときは主ＰＣｐｘ、繰り返し命令のときは繰り返し命令に対応する命令メモリ３０のアドレスを示す副ＰＣｐｙの値ｚ２に基づいて命令メモリ３０から命令が取得される。
【００７５】
［ＰＣ値変換装置２１の構成］
図１０は、命令フェッチユニット２０におけるＰＣ値変換装置２１の詳細な構成を表す例図である。同図において、上部のブロック２１ａは繰り返し最終回、中部のブロック２１ｂは繰り返し初回、下部のブロック２１ｃは割り込み復帰時の処理の構成を示す。ＰＣ値変換装置２１には、例えば、割り込み復帰信号ｚ７、実行ユニット１０から出力された主ＰＣｐｘ、副ＰＣｐｙの値ｚ１、繰り返し命令の場合にＨレベルとなる命令判定装置２４からの信号、繰り返し最大回数ｚ６等が入力される。
【００７６】
まず、図１０の中部の繰り返し初回の処理の構成を示すブロック２１ｂについて説明する。中部ブロック２１ｂにおいて、繰り返し初回時、カウンタＣＮＴに保持された値が、値１と一致するため、比較器Ｃ３はＨレベルの信号を出力する。そして、ＡＮＤ回路Ａ２は、命令判定装置２４から繰り返し命令であることを示すＨレベルの信号、比較器Ｃ３から繰り返し初回を示すＨレベルの信号が出力されるとき、Ｈレベルの選択信号を出力する。一方、繰り返し命令ではない場合、または、繰り返し初回ではない場合、ＡＮＤ回路Ａ２はＬレベルの選択信号を出力する。
【００７７】
続いて、セレクタＳ３は、ＡＮＤ回路Ａ２からＬレベルの選択信号が出力されたとき、セレクタＳ２から出力された主ＰＣｐｘ、副ＰＣｐｙの値ｚ１を変更することなく、セレクタＳ５に出力する。一方、セレクタＳ３は、ＡＮＤ回路Ａ２からＨレベルの選択信号が出力されたとき、実行ユニット１０から出力された主ＰＣｐｘ（下位３２ｂｉｔ）の値が（５１）、上位３２ｂｉｔ及び下位３２ｂｉｔにセットされたＰＣを実行ユニット１０に出力する（５０）。即ち、繰り返し命令の初回時、実行ユニット１０から出力された主ＰＣｐｘが、副ＰＣｐｙにセットされたＰＣｚ５が実行ユニット１０に出力される。
【００７８】
次に、図１０の上部の繰り返し最終回の処理の構成を示すブロック２１ａについて説明する。カウンタＣＮＴの値が繰り返し最大回数と一致すると、比較器Ｃ２はＨレベルの信号を出力する。命令判定装置２４から繰り返し命令であることを示すＨレベルの信号、比較器Ｃ２から繰り返し最終回を示すＨレベルの信号が出力されるとき、ＡＮＤ回路Ａ１はＨレベルの選択信号を出力する。一方、繰り返し命令ではない場合、または、繰り返し最終回ではない場合、ＡＮＤ回路Ａ１はＬレベルの選択信号を出力する。
【００７９】
そして、セレクタＳ２は、ＡＮＤ回路Ａ１からＬレベルの選択信号が出力されたとき、実行ユニット１０から出力された主ＰＣｐｘ、副ＰＣｐｙの値ｚ１を変更することなく、セレクタＳ３に出力する。一方、セレクタＳ２は、ＡＮＤ回路Ａ１からＨレベルの選択信号が出力されたとき、値０が上位３２ｂｉｔに、実行ユニット１０から出力された副ＰＣｐｙ（上位３２ｂｉｔ）の値が下位３２ｂｉｔにセットされたＰＣｚ５を実行ユニット１０に出力する（４５）。即ち、繰り返し命令の最終回時、実行ユニット１０から出力された副ＰＣｐｙの値が主ＰＣｐｘに、値０が副ＰＣｐｙにセットされたＰＣｚ５が実行ユニット１０に出力される。
【００８０】
なお、カウンタＣＮＴは、Ｈレベルの割り込み復帰信号ｚ７が入力されたとき、または、カウンタＣＮＴの値が繰り返し最大回数と一致したことを示す信号が比較器Ｃ２から出力されたときにリセットされる。
【００８１】
そして、図１０の下部の割り込み復帰時の処理の構成を示すブロック２１ｃについて説明する。命令判定装置２４から繰り返し命令であることを示すＨレベルの信号が出力され、Ｈレベルの割り込み復帰信号ｚ７が入力されたとき、ＡＮＤ回路Ａ３はＨレベルの選択信号を出力する。一方、繰り返し命令ではない場合、または、割り込み復帰信号ｚ７がＬレベルのとき、ＡＮＤ回路Ａ３はＬレベルの選択信号を出力する。
【００８２】
ＡＮＤ回路Ａ３からＨレベルの選択信号が出力されるとき、繰り返し命令実行中に発生した割り込みからの復帰信号であることを意味し、このとき、実行ユニット１０から出力されるＰＣｚ１は退避ＰＣを示す。比較器Ｃ４は、退避ＰＣの副ＰＣｐｙが有効なときＬレベルの選択信号を、無効なときＨレベルの選択信号をセレクタＳ４に出力する。
【００８３】
セレクタＳ５は、ＡＮＤ回路Ａ３からＨレベルの選択信号が出力され、かつ、退避ＰＣの副ＰＣｐｙ（上位３２ｂｉｔ）が有効である場合（セレクタＳ４の選択信号がＬレベル）、当該副ＰＣｐｙの値が上位３２ｂｉｔ及び下位３２ｂｉｔにセットされたＰＣを実行ユニット１０に出力する。即ち、セレクタＳ５は、繰り返し命令実行中に発生した割り込みからの復帰時、退避ＰＣの副ＰＣｐｙに基づいて生成された繰り返し初回時のＰＣｚ５を実行ユニット１０に出力する。
【００８４】
一方、ＡＮＤ回路Ａ３からＨレベルの信号が出力され、かつ、退避ＰＣの副ＰＣｐｙ（上位３２ｂｉｔ）が無効の場合（セレクタＳ４の選択信号がＨレベル）、セレクタＳ５は、退避ＰＣの主ＰＣｐｘ（下位３２ｂｉｔ）の値が、上位３２ｂｉｔ及び下位３２ｂｉｔにセットされたＰＣを実行ユニット１０に出力する。この場合、退避ＰＣの副ＰＣｐｙは、繰り返し命令実行中に発生した割り込みからの復帰時であるにも関わらず無効な値を有する。これは、繰り返し命令の初回直前に割り込みが発生したことを意味する。そこで、セレクタＳ５は、退避ＰＣの主ＰＣｐｘに基づいて、繰り返し初回時のＰＣｚ５を生成し実行ユニット１０に出力する。
【００８５】
このように、ブロック２１ｂにおいて、繰り返し初回時、実行ユニット１０から出力された主ＰＣｐｘの値が、主ＰＣｐｘ及び副ＰＣｐｙにセットされたＰＣが実行ユニット１０に出力される。また、ブロック２１ａにおいて、繰り返し最終回時、副ＰＣｐｙに０が、主ＰＣｐｘに実行ユニット１０から出力された副ＰＣｐｙの値がセットされたＰＣが実行ユニット１０に出力される。また、繰り返し命令の２回目から最終回に達するまでは、入力されたＰＣは変更されることなく、実行ユニット１０に出力される。
【００８６】
そして、ブロック２１ｃにおいて、繰り返し命令実行中の割り込みからの復帰時、退避ＰＣの主ＰＣｐｘまたは副ＰＣｐｙの値に基づいて、繰り返し初回時のＰＣが生成され、実行ユニット１０に出力される。
【００８７】
［命令生成装置２２の構成］
次に、命令フェッチユニット２０における命令生成装置２２について説明する。
【００８８】
図１１は、命令フェッチユニット２０における命令生成装置２２の詳細な構成を表す例図である。同図において、命令展開部７０は、繰り返し命令のとき、繰り返しごとの展開繰り返し命令を生成する。また、割り込み無処理判定部６０は、無処理命令を出力するか否かを判定し、無処理命令を出力する場合にＨレベルの選択信号ａ１１を出力する。
【００８９】
図１１において、カウンタＣＮＴ２に基づいて、比較器Ｃ５は繰り返し初回時、比較器Ｃ６は繰り返し最大回時、Ｈレベルの信号ａ５、ａ６をそれぞれ出力する。また、比較器Ｃ７は、カウンタＣＮＴ２に基づいて、繰り返し回数が繰り返し最大回数以下のとき、Ｈレベルの信号を出力する。なお、ＯＲ回路Ｒ３は、繰り返し最大回数に達したとき（信号ａ６がＨレベル）、または、Ｈレベルの割り込み復帰信号ａ０が入力されたとき、カウンタＣＮＴ２をリセットする。
【００９０】
ＡＮＤ回路Ａ４は、命令判定装置２４から繰り返し命令であることを示すＨレベルの信号ａ３が出力され、かつ、繰り返し初回時（信号ａ５がＨレベル）、Ｈレベルの信号ａ７を出力する。そして、セレクタＳ６は、ＡＮＤ回路Ａ４からの出力信号ａ７がＨレベルのとき、即ち、繰り返し命令の初回時、命令メモリ３０から取得した命令ａ２を選択して命令展開部７０に出力する。一方、ＡＮＤ回路Ａ４からの出力信号がＬレベルのとき、即ち、繰り返し命令ではない、または、繰り返し初回時ではない場合、セレクタＳ６は、ＦＦ６９から出力された前回の命令ａ９を選択して命令展開部７０に出力する。
【００９１】
また、下部のＡＮＤ回路Ａ５は、命令判定装置２４から繰り返し命令であることを示すＨレベルの信号ａ３が出力され、かつ、比較器Ｃ７からＨレベルの信号が出力されたとき、即ち、繰り返し回数が最大回数以下のとき、Ｈレベルの信号ａ８を出力する。
【００９２】
これにより、命令展開部７０には、繰り返し初回時には、命令メモリ３０からの命令ａ２が、それ以外の場合は、ＦＦ６９に保持された前回の命令ａ９が入力される。さらに、命令展開部７０には、ＡＮＤ回路Ａ４からの繰り返し初回時か否かを示す信号ａ７、ＡＮＤ回路Ａ５からの繰り返し最大回数以下か否かを示す信号ａ８が入力される。これらの情報に基づいて、命令展開部７０は、繰り返し命令のとき、前回の展開繰り返し命令に基づいて繰り返しごとの展開繰り返し命令を生成しセレクタＳ７に出力する。
【００９３】
そして、セレクタＳ７は、ＡＮＤ回路Ａ５からＨレベルの信号ａ８が出力されたとき、即ち、繰り返し回数が最大回数以下のとき、命令展開部７０から出力された命令をセレクタＳ８に出力する。一方、ＡＮＤ回路Ａ５からＬレベルの信号ａ８が出力されたとき、即ち、繰り返し命令ではないとき、セレクタＳ７は、命令メモリ３０から取得された命令ａ２を選択してセレクタＳ８に出力する。そして、セレクタＳ８は、割り込み無処理判定部６０からＨレベルの信号ａ１１が出力されたときは無処理命令ｓｎｏｐを、Ｌレベルの選択信号ａ１１が出力されたときは、セレクタＳ７によって選択された命令を実行ユニット１０に出力する（ａ１０）。
【００９４】
ここで、命令生成装置２２における各信号の遷移について具体的に説明する。
【００９５】
図１２は、図１１の命令生成装置２２における信号遷移を表す例図である。同図における信号ａ０〜ａ１１は、図１１に対応する。同図では、割り込み処理区間ｔａ、割り込み復帰区間ｔｂにおける各信号の遷移を表す。この例では、図６、７の例と同様にして、繰り返し命令ＣＡｄｄの繰り返し２回目後に割り込みが発生したことを前提としており、退避ＰＣの主ＰＣｐｘは値０ｘ１１４、副ＰＣｐｙは値０ｘ１０ｂである。
【００９６】
まず、割り込み処理区間ｔａにおいて、割り込み発生後の割り込み命令ｅｃが実行される。この例において、割り込み命令ｅｃは、繰り返し命令に該当しない。そのため、図１１のセレクタＳ７は、繰り返し命令に該当しないことを示すＡＮＤ回路Ａ５のＬレベルの選択信号ａ８に基づいて、命令メモリから取得された割り込み命令ａ２（ｅｃ）を実行ユニット１０に出力する（ａ１０）。割り込み命令ｅｃが終了すると、Ｈレベルの割り込み復帰信号ａ０が出力される。
【００９７】
続いて、割り込み復帰区間ｔｂについて説明する。Ｈレベルの割り込復帰信号ａ０が入力されたとき、実行ユニットから割り込み発生時に退避された退避ＰＣ（０ｘ１０ｂ、０ｘ１１４）が入力される（ａ１）。退避ＰＣ（ａ１）の副ＰＣｐｙの値０ｘ１０ｂは有効であるため、命令判定装置２４から繰り返し命令であることを示すＨレベルの信号ａ３が出力されると共に、カウンタＣＮＴ２のインクリメントが開始する（ａ４）。
【００９８】
そして、繰り返し初回時、初回の繰り返し命令であることを示すＨレベルの信号ａ７が出力され、退避ＰＣの副ＰＣｐｙに基づいて、命令メモリ３０から出力された命令「ＣＡｄｄ ｒ０，ｒ２０，ｒ１２」（ａ２）が入力される。このとき、繰り返し命令であることを示す信号ａ８はＨレベルであるため、セレクタＳ７によって命令展開部７０から出力された命令が選択される。ただし、割り込み無処理判定部６０から信号ａ１１がＨレベルであるため、セレクタＳ８によって無処理命令ｓｎｏｐが選択され、実行ユニット１０に出力される（ａ１０）。
【００９９】
そして、繰り返し２回目から最終回まで、命令展開部７０は、前回の展開繰り返し命令ａ９に基づいて、オペランドを変更した展開繰り返し命令を生成する。これらの場合も同様にして、Ｈレベルの信号ａ８に基づいてセレクタＳ７によって命令展開部７０から出力された命令が選択されるが、信号ａ１１がＨレベルである間は無処理命令ｓｎｏｐが選択され出力される（ａ１０）。そして、信号ａ１１がＬレベルになると、命令展開部７０から出力された命令が実行ユニット１０に出力される（ａ１０）。
【０１００】
そして、カウンタＣＮＴ２の値ａ４が最大繰り返し回数８に達すると、次のタイミングでカウンタＣＮＴ２がリセットされると共に、繰り返し命令であることを示す信号ａ８がＬレベルに制御される。これにより、次のタイミングでは、繰り返し命令に該当しないことを示すＬレベルの信号ａ８に基づいて、命令メモリ３０から取得された命令「Ａｄｄ ｒ８，ｒ０，ｒ１」（ａ２）が選択され、実行ユニット１０に出力される。
【０１０１】
続いて、命令生成装置２２における割り込み無処理判定部６０について説明する。
【０１０２】
［命令生成装置２２における割り込み無処理判定部６０の構成］
図１３は、命令生成装置２２における割り込み無処理判定部６０の詳細な構成を表す例図である。同図において、割り込み無処理判定部６０に入力される割り込み復帰信号ｂ０は図１１の信号ａ０、ＰＣｂ１は図１１の信号ａ１に、出力される選択信号ｂ１０は図１１の信号ａ１１に対応する。
【０１０３】
この例において、Ｈレベルの割り込み復帰信号ｂ０が入力されたとき、実行ユニット１０から出力されるＰＣｂ１は退避ＰＣを示す。Ｈレベルの割り込み復帰信号ｂ０が入力されると、セレクタＳ１１、Ｓ１２によって、次のタイミングで実行ユニット１０から出力された退避ＰＣｂ１がＦＦ８０に保持される。なお、ＦＦ８０は、信号ｂ５がＨレベルのとき（割り込み復帰処理が完了したとき）、値０にリセットされる。
【０１０４】
比較器Ｃ８は、入力されたＰＣｂ１の上位３２ｂｉｔ（副ＰＣｐｙ）が有効か否かに基づいて、繰り返し命令であるか否かを判定し、繰り返し命令ではないときにＨレベル、繰り返し命令のときにＬレベルの信号ｂ４を出力する。また、比較器Ｃ９は、ＦＦ８０に保持される退避ＰＣｂ２と新たに入力されたＰＣｂ１とを比較し、一致する場合にＨレベル、一致しない場合にＬレベルの信号ｂ３を出力する。
【０１０５】
そして、比較器Ｃ８から繰り返し命令であることを示すＬレベルの信号ｂ４が出力され、かつ、入力されたＰＣｂ１と退避ＰＣｂ２との不一致を示すＬレベルの信号ｂ３が出力される間、ＯＲ回路Ｒ４はＬレベルの信号ｂ５を出力する。そして、ＯＲ回路Ｒ４から出力されたＬレベルの信号ｂ５は、ＮＯＴ回路Ｎ１によってＨレベルの信号ｂ８に反転され、セレクタＳ９に出力される。一方、比較器Ｃ８から繰り返し命令に該当しないことを示すＨレベルの信号が出力、または、入力されたＰＣｂ１と退避ＰＣｂ２とが一致した場合、Ｈレベルの信号がＯＲ回路Ｒ４から出力され、ＮＯＴ回路Ｎ１によって反転されＬレベルの信号ｂ８として出力される。
【０１０６】
セレクタＳ９の選択信号ｂ９は、退避ＰＣが入力されＦＦ８０に保持されている間（割込みの復帰処理の間）、Ｌレベルに制御される。このため、セレクタＳ９は、割込みの復帰処理が完了するまで、Ｌレベルの選択信号ｂ９に基づいてＮＯＴ回路Ｎ１からの信号ｂ８を選択して出力する（ｂ１０）。つまり、信号ｂ１０は、割込みの復帰処理の間、入力されたＰＣｂ１が繰り返し命令を示し、かつ、ＰＣｂ１と退避ＰＣｂ２とが一致しない間、無処理命令の出力を指示するＨレベルに制御される。もしくは、信号ｂ１０は、割込みの復帰処理の間、入力されたＰＣｂ１が繰り返し命令に該当しない、または、ＰＣｂ１と退避ＰＣｂ２とが一致した場合、無処理命令の出力を指示しないＬレベルに制御される。
【０１０７】
一方、割り込み復帰処理中ではない場合は、比較器Ｃ１０からＨレベルの選択信号が出力され、信号ｂ１０は無処理命令の出力を指示しないＬレベルに制御される。
【０１０８】
このように、割り込み無処理判定部６０は、繰り返し命令実行時の割り込みからの復帰処理の場合であって、退避ＰＣと、実行ユニット１０から出力された現在のＰＣとが一致しない間は、無処理命令の出力を指示するＨレベルの信号ａ１１を出力する。
【０１０９】
図１４は、図１３の割込み無処理判定部６０における信号遷移を表す例図である。同図における信号ｂ０〜ｂ１０は、図１３に対応する。また、割り込み処理区間ｔａ、割り込み復帰区間ｔｂは、図１２の同区間に対応する。図１２と同様にして、退避ＰＣの主ＰＣｐｘは値０ｘ１１４、副ＰＣｐｙは値０ｘ１０ｂである。
【０１１０】
まず、割り込み処理区間ｔａにおいて、割込み復帰信号ｂ０はＬレベルに制御される。このとき、ＦＦ８０には初期値０ｘ０、０ｘ０が保持される。これにより、比較器Ｃ１０によってＨレベルの選択信号ｂ９が出力され、セレクタＳ９は、無処理命令の出力を指示しないＬレベルの信号ｂ１０を出力する。
【０１１１】
続いて、割り込み復帰区間ｔｂについて説明する。Ｈレベルの割り込復帰信号ｂ０が入力されたとき、実行ユニットからは割り込み発生時に退避された退避ＰＣ（０ｘ１０ｂ、０ｘ１１４）ｂ１が入力される（ｂ１）。そして、次のタイミングで、退避ＰＣｂ１がＦＦ８０に保持される。ＦＦ８０には割込みからの復帰処理が完了するまで退避ＰＣが保持されるため、その間、比較器Ｃ１０はＬレベルの選択信号ｂ９を出力する。
【０１１２】
そして、入力されたＰＣｂ１の副ＰＣｐｙが繰り返し命令を示し（信号ｂ４がＬレベル）、かつ、入力されたＰＣの値ｂ１とＦＦ８０に入力される値ｂ２とが一致しない間は（信号ｂ３がＬレベル）、ＮＯＴ回路Ｎ１は、Ｈレベルの信号ｂ８を出力する。そして、Ｌレベルの選択信号ｂ９に基づいて信号ｂ８が選択され、無処理命令の出力を指示するＨレベルの信号ｂ１０が出力される。
【０１１３】
一方、ＰＣの値ｂ１とＦＦ８０に保持される値ｂ２とが一致すると（信号ｂ３がＨレベル）、ＮＯＴ回路Ｎ１はＬレベルの信号ｂ８を出力する。そして、Ｌレベルの選択信号ｂ９に基づいて信号ｂ８が選択され、無処理命令の出力を指示しないＬレベルの信号ｂ１０が出力される。このとき、Ｈレベルの信号ｂ５に基づいてＦＦ８０がリセットされる。これにより、次回以降のタイミングでは、信号ｂ２が０ｘ０、０ｘ０に遷移し選択信号ｂ９がＨレベルとなる。このため、常に、無処理命令の出力を指示しないＬレベルの信号ｂ１０が出力される。
【０１１４】
このようにして、本実施の形態例におけるプロセッサは、繰り返し命令中に発生した割り込みから復帰したとき、繰り返し命令を繰り返し初回から再開し、実行済みの繰り返し回数までは、繰り返し命令に代えて無処理命令を出力する。これにより、プロセッサは、繰り返し初回から展開繰り返し命令を生成し直すため、未実行の展開繰り返し命令のオペランドを再生成し実行することができる。
【０１１５】
具体的に、プロセッサは、主ＰＣｐｘに加えて副ＰＣｐｙを有し、取得した命令が繰り返し命令のとき、繰り返し初回時には実行ユニット１０の主ＰＣｐｘに所定値、副ＰＣｐｙに繰り返し命令に対応する命令メモリ３０のアドレスを記憶させ、繰り返し最終回時には実行ユニット１０の主ＰＣｐｘに繰り返し命令に対応する命令メモリ３０のアドレスを記憶させ副ＰＣｐｙをリセットする。これにより、プロセッサは、割り込みからの復帰時、退避ＰＣにおける副ＰＣｐｙに基づいて繰り返し命令実行中に発生した割り込みであることを検知できと共に、命令メモリ３０から繰り返し命令を取得できる。また、プロセッサは、退避ＰＣにおける主ＰＣｐｘに基づいて、実行済みの繰り返し回数を検知できる。
【０１１６】
これにより、本実施の形態例におけるプロセッサは、繰り返し命令の実行中に発生した割り込みからの復帰時に、繰り返し途中の展開繰り返し命令から、繰り返し処理を再開することができる。これは、本実施の形態例のように、１つの繰り返し命令に基づいて、繰り返し回数分、展開繰り返し命令を生成し実行するプロセッサにおいて、繰り返し命令の実行中に割り込みを受け付けることを可能にする。
【０１１７】
なお、本実施の形態例におけるプロセッサは、繰り返し初回時、実行ユニットの主ＰＣｐｘに所定値として、繰り返し命令に対応する命令メモリ３０のアドレスを記憶させるが、この例に限定されるものではない。繰り返し命令実行中の主ＰＣｐｘは、繰り返し命令の実行繰り返し回数を示す値を保持すればよいため、所定値として、例えば値０が記憶されてもよい。この場合、繰り返し命令の初回時、実行ユニット１０の主ＰＣｐｘに値０がセットされ、繰り返しごとにインクリメントされる。そして、繰り返し命令の実行中に発生した割込みからの復帰時、同様にして、主ＰＣｐｘには値０がセットされ、退避ＰＣの主ＰＣｐｘの値と一致するまでの間、無処理命令が出力される。
【０１１８】
さらに、本実施の形態例におけるプロセッサは、主ＰＣｐｘに基づいて実行済み繰り返し回数を検知しているが、この例に限定されるものではない。例えば、プロセッサは、主ＰＣのみを有し、割り込み発生時に主ＰＣの値と実行済み繰り返し回数とを退避しておく。そして、プロセッサは、割り込み復帰処理時、退避された主ＰＣの値に基づいて繰り返し命令を初回から再生成し、退避した実行繰り返し回数に基づく実行済み繰り返し回数に達するまでは、無処理命令を出力する。
【０１１９】
＜第２の実施の形態例＞
第１の実施の形態例では、繰り返し命令の実行中に発生した割り込みから復帰するときの処理について説明した。第２の実施の形態例では、繰り返し命令実行中に発生した割り込み（第１の割り込み）からの復帰が完了していない間に、さらに、別の割り込み（第２の割り込み）が発生した場合について説明する。繰り返し命令実行中に発生した第１の割り込みからの復帰が完了していない間に第２の割り込みが発生した場合、実行ユニット１０は、第２の割り込みからの復帰時、第１の割り込み発生時の退避ＰＣに基づいて復帰処理を行う。
【０１２０】
この処理について、フローチャート図に基づいて具体的に述べる。
【０１２１】
図１５は、繰り返し命令の実行中に発生した第１の割り込みからの復帰処理が完了していない間に、第２の割り込みが発生した場合の処理の流れを示すフローチャート図である。
【０１２２】
繰り返し命令中に発生した第１の割り込みからの復帰処理中、さらに、第２の割り込みが検知されると、実行ユニット１０は、第２の割り込みの優先度が高いか否かを判定する（Ｓ２０）。第２の割り込みの優先度が低い場合（Ｓ２０のＮＯ）、実行ユニット１０は、第１の割り込みに係る復帰処理が完了してから、第２の割り込みについて判定を行う（Ｓ２１）。
【０１２３】
一方、第２の割り込みの優先度が高い場合（Ｓ２０のＹＥＳ）、第１の割り込みからの復帰処理を中断して、第２の割り込み処理を実行する。このとき、実行ユニット１０は、第１の割り込みからの復帰中か否かを判定する（Ｓ２２）。例えば、無処理命令ｓｎｏｐを実行している場合、第１の割り込みからの復帰中であることを示す（Ｓ２２のＹＥＳ）。この場合、実行ユニット１０は、第２の割り込みからの復帰時に、第１の割り込み発生時の退避ＰＣに基づいて復帰処理を行う。このため、実行ユニット１０は、既に退避している第１の割り込み発生時における退避ＰＣを更新しない（Ｓ２４）。
【０１２４】
一方、第１の割り込みの復帰処理が完了している場合は（Ｓ２２のＮＯ）、実行ユニット１０は、第２の割り込みからの復帰時、第２の割り込み発生時の退避ＰＣに基づいて復帰処理を行う。このため、実行ユニット１０は、第２の割り込み発生時の各ＰＣを退避ＰＣとして退避する（Ｓ２３）。
【０１２５】
このように、繰り返し命令実行中に発生した第１の割り込みからの復帰処理が完了していない間に、第２の割り込みが発生した場合は、プロセッサは、第２の割り込みからの復帰時、第１の割り込み発生時に退避したＰＣに基づいて復帰処理を行う。即ち、この場合、第１の割込み発生時の展開繰り返し命令まで復帰していない間に第２の割込みが発生したことにより、プロセッサは、第１の割り込み発生時の展開繰り返し命令に復帰することで、第１、第２の割込みから復帰する。
【０１２６】
図１６は、図１５のフローチャート図における主ＰＣｐｘ及び副ＰＣｐｙの値と、命令との対応関係を表す例図である。この例において、割り込みＥ３は第１の割り込みを示し、割り込みＥ４は第２の割り込みを示す。第１の割り込みＥ３は繰り返し命令ＣＡｄｄの実行中に発生し、第２の割り込みＥ４は第１の割り込みＥ３からの復帰処理中に発生する。区間ＲＣ３は、繰り返し命令ＣＡｄｄの開始から終了までを示す。
【０１２７】
繰り返し命令の３回目後に割り込みＥ３が発生すると、インクリメント後の主ＰＣｐｘの値０ｘ１１８、及び、副ＰＣｐｙの値０ｘ１０ｂが退避ＰＣｐ３として退避される。そして、割り込みＥ３における割り込み処理の命令（Ｓｔｏｒｅ ｒ７，ｒ４〜ｒｅｔ）が実行される（ＥＣ３）。
【０１２８】
割り込みＥ３の割込み処理からの復帰時、実行ユニット１０の各ＰＣは、退避ＰＣｐ３の副ＰＣｐｙの値０ｘ１０ｂに基づいて、繰り返し初回時におけるインクリメント前の主ＰＣｐｘの値０ｘ１０ｂ、副ＰＣｐｙの値０ｘ１０ｂに制御される。そして、繰り返し初回から繰り返し命令が再開され、繰り返しごとに主ＰＣｐｘの値がインクリメントされ、退避ＰＣｐ３の主ＰＣｐｘの値０ｘ１１８に達するまでの間ＸＣａ、展開繰り返し命令に代えて無処理命令ｓｎｏｐが出力される。
【０１２９】
ただし、このとき、第１の割り込みＥ３からの復帰処理が完了する前に、第２の割り込みＥ４が発生する。割り込みＥ４の優先度が高い場合（Ｓ２０のＹＥＳ）、実行ユニット１０は割り込みＥ４を受け付ける。ただし、このとき、第１の割り込みＥ３からの割り込み復帰処理が完了していないため（Ｓ２２のＹＥＳ）、実行ユニット１０は、割り込みＥ４発生時のＰＣ（０ｘ１０ｂ、０ｘ１１４）を退避ＰＣとして更新しない（Ｓ２４）。このため、退避ＰＣは、割り込みＥ３発生時の退避ＰＣｐ３のまま維持される。
【０１３０】
続いて、割り込みＥ４における割り込み処理の命令（Ｓｔｏｒｅ ｒ１５，ｒ３１、ｒｅｔ）が実行される（ＥＣ４）。割り込みＥ４の割り込み処理から復帰すると、実行ユニット１０の各ＰＣは、退避ＰＣｐ３の副ＰＣｐｙに基づいて、主ＰＣｐｘの値０ｘ１０ｂ、副ＰＣｐｙの値０ｘ１０ｂに制御される。そして、主ＰＣｐｘの値が、退避ＰＣｐ３の主ＰＣｐｘの値０ｘ１１８に達するまでの間ＸＣｂ、展開繰り返し命令に代えて無処理命令ｓｎｏｐが出力される。
【０１３１】
そして、主ＰＣｐｘの値が値０ｘ１１８と一致すると復帰処理が完了し、未実行の展開繰り返し命令「ＣＡｄｄ ｒ３，ｒ２３，ｒ１２」から、繰り返し命令が再開される。
【０１３２】
このようにして、本実施の形態例におけるプロセッサは、繰り返し命令の実行中に発生した第１の割り込みからの復帰が完了していない間に第２の割り込みが発生した場合、第１の割り込み発生時に実行済みの繰り返し回数分、命令に代えて無処理命令を出力する。この場合、本実施の形態例におけるプロセッサは、第１の割込み発生時の主ＰＣｐｘ及び副ＰＣｐｙに基づいて復帰処理を行うことにより、第１、２の割り込みから復帰できる。
【０１３３】
以上のようにして、１つの繰り返し命令に基づいて、繰り返し回数分、展開繰り返し命令を生成して実行するプロセッサにおいて、繰り返し命令の実行中に発生した割り込みからの復帰中に、さらに別の割り込みを受け付けることを可能にする。
【０１３４】
なお、本実施の形態例においても、プロセッサは、割り込み発生時に主ＰＣの値と実行済み繰り返し回数とを退避しておき、割り込み復帰時に退避した主ＰＣに基づいて展開繰り返し命令を初回から再生成し、退避した実行繰り返し回数に達するまで展開繰り返し命令に代えて無処理命令を実行してもよい。本実施の形態例では、第１の割込みからの復帰処理が完了していない間に第２の割込みが発生した場合は、第１の割込み発生時に退避した実行済み繰り返し回数に基づいて、復帰処理を行う。
【０１３５】
以上の実施の形態をまとめると、次の付記のとおりである。
【０１３６】
（付記１）
１つの繰り返し命令に基づいて、繰り返し回数分、当該繰り返し命令を生成して実行するプロセッサにおいて、
主プログラムカウンタ（以下、ＰＣ）と、副ＰＣと、入力された命令を実行すると共に前記主ＰＣの値をインクリメントし前記主ＰＣの値と前記副ＰＣの値とを出力する命令実行部と、を有する実行ユニットと、
前記入力された主ＰＣの値に基づいて命令メモリから前記命令を取得して前記実行ユニットに出力する命令フェッチユニットとを有し、
前記命令フェッチユニットは、前記取得した命令が繰り返し命令のときに、前記繰り返し命令に基づいて、前記繰り返し回数分の展開繰り返し命令を生成して出力すると共に、繰り返し初回時に前記実行ユニットの前記主ＰＣに所定値、前記副ＰＣに当該繰り返し命令に対応する前記命令メモリのアドレスを記憶させ、繰り返し最終回時に前記実行ユニットの主ＰＣに当該繰り返し命令に対応する前記命令メモリのアドレスを記憶させ前記副ＰＣをリセットし、前記繰り返し命令実行中に発生した割り込みからの復帰時、当該割り込みの発生時に実行済みの繰り返し回数分、前記展開繰り返し命令に代えて無処理命令を出力するプロセッサ。
【０１３７】
（付記２）
付記１において、
前記繰り返し命令実行中に発生した割り込みであることは、前記割り込みの発生時における前記副ＰＣの値が有効であることに基づいて判定され、前記実行済みの繰り返し回数は、前記割り込みの発生時における前記主ＰＣの値に基づいて検知されるプロセッサ。
【０１３８】
（付記３）
付記２において、
前記命令フェッチユニットは、前記繰り返し命令実行中に発生した第１の割り込みからの復帰時、さらに第２の割り込みが発生し当該第２の割り込みから復帰するとき、前記実行済みの繰り返し回数は前記第１の割り込みの発生時における主ＰＣの値に基づいて検知されるプロセッサ。
【０１３９】
（付記４）
付記１乃至３のいずれかにおいて、
前記命令は、オペランドとオペコードとを有し、
前記命令フェッチユニットは、前記命令が繰り返し命令のとき、繰り返しごとに異なるオペランドを生成するプロセッサ。
【０１４０】
（付記５）
付記１乃至４のいずれかにおいて、
前記繰り返し初回時に前記実行ユニットの主ＰＣに記憶される前記所定値は、前記繰り返し命令に対応する前記命令メモリのアドレスであるプロセッサ。
【０１４１】
（付記６）
付記１乃至５のいずれかにおいて、
前記実行ユニットは、前記主ＰＣと前記副ＰＣとを１つのＰＣとして有し、
前記１つのＰＣの下位所定ビットは前記主ＰＣ、上位所定ビットは前記副ＰＣとして構成されるプロセッサ。
【０１４２】
（付記７）
付記１乃至６のいずれかにおいて、
前記プロセッサは、さらに、前記命令メモリを有するプロセッサ。
【符号の説明】
【０１４３】
１０：実行ユニット、２０：命令フェッチユニット、３０：命令メモリ、４０：データメモリ、２１：ＰＣ値変換装置、２２：命令生成装置、２３：ＰＣ値判定装置、２４：命令判定装置２４、２５：フリップフロップ、２６：フリップフロップ
【図１】
2013161453.tif 000003
【図２】
2013161453.tif 000004
【図３】
2013161453.tif 000005
【図４】
2013161453.tif 000006
【図５】
2013161453.tif 000007
【図６】
2013161453.tif 000008
【図７】
2013161453.tif 000009
【図８】
2013161453.tif 000010
【図９】
2013161453.tif 000011
【図１０】
2013161453.tif 000012
【図１１】
2013161453.tif 000013
【図１２】
2013161453.tif 000014
【図１３】
2013161453.tif 000015
【図１４】
2013161453.tif 000016
【図１５】
2013161453.tif 000017
【図１６】
2013161453.tif 000018