(57)【要約】【課題】演算処理装置及び演算処理装置の制御方法において、特殊処理中にエラーが検出された場合に、特殊処理の種別に応じたリトライを可能とすることを目的とする。【解決手段】プログラマブル資源に含まれる複数の資源を更新する特殊処理を複数サイクルで実行する演算処理装置において、特殊処理中であることを記録すると共に、命令実行中にエラーを検出するとエラー通知を行う命令実行回路と、特殊処理の開始時点で特殊処理種別を記録すると共に、前記特殊処理中に前記エラー通知を受信した場合、記録されている特殊処理種別から当該特殊処理を再実行することが可能であるか否かを判断し、可能であると判断した場合には当該特殊処理を最初から再実行する特殊処理再実行を指示するリトライ制御回路と、を備え、前記命令実行回路は、前記リトライ制御回路からの前記特殊処理再実行の指示に基づき、前記特殊処理を再実行するリトライ処理を行う。【選択図】図１
2020086897.tif 000002
【特許請求の範囲】
【請求項１】
プログラマブル資源に含まれる複数の資源を更新する特殊処理を複数サイクルで実行する演算処理装置であって、
特殊処理中であることを記録すると共に、命令実行中にエラーを検出するとエラー通知を行う命令実行回路と、
特殊処理の開始時点で特殊処理種別を記録すると共に、前記特殊処理中に前記エラー通知を受信した場合、記録されている特殊処理種別から当該特殊処理を再実行することが可能であるか否かを判断し、可能であると判断した場合には当該特殊処理を最初から再実行する特殊処理再実行を指示するリトライ制御回路と、
を備え、
前記命令実行回路は、前記リトライ制御回路からの前記特殊処理再実行の指示に基づき、前記特殊処理を再実行するリトライ処理を行うことを特徴とする、演算処理装置。
【請求項２】
前記リトライ制御回路は、
前記リトライ処理が可能なタイミングであるか否かを判断するのに用いるフラグを格納し、命令完了以外のタイミングで資源更新が行われたときにリセットされ、命令完了のタイミングでセットされる第１のレジスタと、
前記リトライ処理を行うことが確定し、且つ、前記リトライ処理が完了していないことを示すフラグを格納し、前記エラーを検出したエラー検出タイミングで前記第１のレジスタがセットされており、且つ、前記第１のレジスタをリセットする条件が成立していない場合にセットされ、命令完了時と特殊処理開始のタイミングとでリセットされ、一命令再実行を前記命令実行回路に指示する第２のレジスタと、
前記特殊処理を再実行可能なタイミングであるか否かの判断に用いるフラグを格納し、前記特殊処理開始のタイミングでセットされ、特殊処理完了のタイミングでリセットされる第３のレジスタと、
前記特殊処理のリトライ処理を行うことが確定し、且つ、前記特殊処理のリトライ処理が完了していないことを示すフラグを格納し、前記エラー検出タイミングで前記第３のレジスタがセットされており、且つ、前記第３のレジスタをリセットする条件が成立していない場合にセットされ、前記特殊処理完了のタイミングでリセットされ、前記特殊処理再実行を前記命令実行回路に指示する第４のレジスタと、
前記特殊処理の開始時点で通知される前記特殊処理種別を記録する第１の記録回路とを有し、
前記第１の記録回路は、前記エラー検出タイミングで記録された特殊処理が再実行可能な処理である場合にのみ、前記第４のレジスタをセットし、前記特殊処理を再実行するときに当該特殊処理の処理種別である再実行特殊処理種別を前記命令実行回路に通知することを特徴とする、請求項１記載の演算処理装置。
【請求項３】
前記命令実行回路は、
前記特殊処理の開始時点で特殊処理開始と特殊処理種別を前記リトライ制御回路に通知し、
特殊処理完了を特殊処理以外の処理の命令と同じ命令完了で前記リトライ制御回路に通知し、
前記特殊処理再実行に応じて、前記プログラマブル資源の資源更新を行うことを特徴とする、請求項１又は２記載の演算処理装置。
【請求項４】
前記命令実行回路は、
命令をデコードする命令デコーダと、
特殊処理開始から特殊処理完了までの処理を行うための状態を制御する状態制御回路と、
前記命令デコーダから受信した命令情報が示す、デコードした命令の種別に基づき、前記特殊処理が必要な命令であるか否かを判断し、前記特殊処理が必要な種別の命令であると判断した場合、前記状態制御回路に特殊処理が必要であることを通知する判断回路と、
例外検出の通知、前記判断回路から特殊処理が必要な命令の種別、及び前記リトライ制御回路から再実行特殊処理種別を夫々受信し、特殊処理種別を特殊処理開始から特殊処理完了までの間記録する第２の記録回路と、
前記状態制御回路から特殊処理開始を通知されると、特殊処理手順番号に初期値を設定し、手順完了を通知されると特殊処理手順番号をインクリメントする手順制御回路と、
前記状態制御回路から特殊処理開始を通知されると、特殊処理を実行するのに用いる回路に特殊処理指示を、前記第２の記録回路から通知される特殊処理種別と、前記手順制御回路から通知される特殊処理手順番号に基づいて通知すると共に、特殊処理種別毎に予め決められている最後の特殊処理手順番号まで特殊処理指示を出力し終わると、特殊処理完了を前記状態制御回路と前記リトライ制御回路に通知する指示回路とを有し、
前記状態制御回路は、例外検出が通知された場合、前記判断回路が特殊処理が必要な種別の命令であると判断した場合、及び前記リトライ制御回路から特殊処理再実行の指示がある場合に、特殊処理状態に遷移し、前記特殊処理状態に遷移すると、特殊処理開始を前記手順制御回路、前記指示回路、及び前記リトライ制御回路に通知すると共に、前記指示回路から特殊処理完了の通知があると、特殊処理状態から遷移して、特殊処理以外の命令の処理状態に戻り、
前記判断回路は、前記第２の記録回路に特殊処理種別を通知し、
前記第２の記録回路は、記録されている特殊処理種別を前記指示回路と前記リトライ制御回路に通知し、
前記手順制御回路は、インクリメント後の特殊処理手順番号を前記指示回路に通知することを特徴とする、請求項１乃至３のいずれか１項記載の演算処理装置。
【請求項５】
前記命令実行回路が実行する前記特殊処理は、例外処理であり、
前記特殊処理の開始時点は、例外発生時の実行状態を前記プログラマブル資源に含まれる第１の特定記憶域に保存し、同時に前記プログラマブル資源に含まれるプログラムカウンタが示す例外の戻り先を前記プログラマブル資源に含まれる第２の特定記憶域に保存する手順が完了した時点であることを特徴とする、請求項１乃至４のいずれか１項記載の演算処理装置。
【請求項６】
前記命令実行回路が実行する前記特殊処理は、例外復帰処理であり、
前記特殊処理の開始時点は、前記プログラマブル資源に含まれる第１の特定記憶域の値を実行状態に書き込み、同時に前記プログラマブル資源に含まれる第２の特定記憶域の値を前記プログラマブル資源に含まれるプログラムカウンタに書き込む手順が完了した時点であることを特徴とする、請求項１乃至４のいずれか１項記載の演算処理装置。
【請求項７】
前記命令実行回路が実行する前記特殊処理は、前記プログラマブル資源に含まれるスタックポインタの選択値の更新処理であり、
前記特殊処理の開始時点は、命令指定の値を前記プログラマブル資源に含まれるレジスタに書き込み、同時に後続命令アドレスを前記プログラマブル資源に含まれるプログラムカウンタに書き込む手順が完了した時点であることを特徴とする、請求項１乃至４のいずれか１項記載の演算処理装置。
【請求項８】
プログラマブル資源に含まれる複数の資源を更新する特殊処理を複数サイクルで実行する演算処理装置の制御方法であって、
命令実行回路が、特殊処理中であることを記録し、
前記命令実行回路が、命令実行中にエラーを検出するとエラー通知を行い、
リトライ制御回路が、特殊処理の開始時点で特殊処理種別を記録すると共に、前記特殊処理中に前記エラー通知を受信した場合、記録されている特殊処理種別から当該特殊処理を再実行することが可能であるか否かを判断し、可能であると判断した場合には当該特殊処理を最初から再実行する特殊処理再実行を指示し、
前記命令実行回路が、前記リトライ制御回路からの前記特殊処理再実行の指示に基づき、前記特殊処理を再実行するリトライ処理を行うことを特徴とする、演算処理装置の制御方法。
【請求項９】
前記リトライ制御回路が、
第１のレジスタに、前記リトライ処理が可能なタイミングであるか否かを判断するのに用いるフラグを格納し、前記第１のレジスタを、命令完了以外のタイミングで資源更新が行われたときにリセットし、命令完了のタイミングでセットし、
第２のレジスタに、前記リトライ処理を行うことが確定し、且つ、前記リトライ処理が完了していないことを示すフラグを格納し、前記第２のレジスタを、前記エラーを検出したエラー検出タイミングで前記第１のレジスタがセットされており、且つ、前記第１のレジスタをリセットする条件が成立していない場合にセットし、命令完了時と特殊処理開始のタイミングとでリセットして、一命令再実行を前記命令実行回路に指示し、
第３のレジスタに、前記特殊処理を再実行可能なタイミングであるか否かの判断に用いるフラグを格納し、前記第３のレジスタを、前記特殊処理開始のタイミングでセットし、特殊処理完了のタイミングでリセットし、
第４のレジスタに、特殊処理のリトライ処理を行うことが確定し、且つ、前記特殊処理のリトライ処理が完了していないことを示すフラグを格納し、前記第４のレジスタに、前記エラー検出タイミングで前記第３のレジスタがセットされており、且つ、前記第３のレジスタをリセットする条件が成立していない場合にセットし、前記特殊処理完了のタイミングでリセットして、前記特殊処理再実行を前記命令実行回路に指示し、
記録回路に、前記特殊処理の開始時点で通知される前記特殊処理種別を記録し、
前記記録回路が、前記エラー検出タイミングで記録された特殊処理が再実行可能な処理である場合にのみ、前記第４のレジスタをセットし、前記特殊処理を再実行するときに当該特殊処理の処理種別である再実行特殊処理種別を前記命令実行回路に通知することを特徴とする、請求項８記載の演算処理装置の制御方法。
【請求項１０】
前記特殊処理は、例外処理、例外復帰処理、及び前記プログラマブル資源に含まれるスタックポインタの選択値の更新処理のいずれかであることを特徴とする、請求項８又は９記載の演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置及び演算処理装置の制御方法に関する。
【背景技術】
【０００２】
信頼性を重視するプロセッサ等の演算処理装置では、命令実行中に誤り（以下、「エラー」とも言う）が検出された場合、エラーが検出された時点で処理していた命令をハードウェアで再実行するリトライ処理が行われる（例えば、特許文献１参照）。
【０００３】
命令実行中に例えば以下のようなエラーが検出された場合、リトライ処理を行うことで、プログラムを異常終了させることなく、命令実行を継続することができる。
【０００４】
α線等によって、一時的にハードウェア内部の状態が変化することで発生するエラーがある。このようなエラーは、ハードウェア自体の壊れが原因ではない。このため、命令を再実行したときにこのようなエラーが再度発生する可能性が非常に低く、このようなエラーは、略確実にリトライ処理で回復することができる。
【０００５】
また、ハードウェア内部の近接配線からのノイズによって発生するエラーがある。例えば、演算処理装置内部の信号線がエレクトロマイグレーション等によって壊れかけている場合には、演算処理装置内部の信号線に近接する信号線の状態によってエラーが発生することがある。このようなエラーは、一命令のみを再実行することによって、再実行時に近接配線が変動する確率が大幅に減少するため、リトライ処理で回復できる可能性が高い。
【０００６】
しかし、従来のリトライ制御回路では、資源更新から命令完了までの間にエラー通知を受信した場合、リトライ処理は行わない構成になっている。これは、資源更新後に命令を再実行すると、同一の結果が得られる保証がないためである。
【０００７】
このようなリトライ処理が不可能な処理の一つに例外処理がある。例外処理の内容は命令セットアーキテクチャによって異なるが、一般的に複数の資源の更新が必要であり、且つ、例外発生頻度は比較的低いことから、資源更新は複数サイクルに分けて実行される。このため、例外処理を開始してから終了するまでの間、即ち、例外処理の途中にエラーが発生した場合、従来の演算処理装置では例外処理に応じたリトライ処理を行うことができない。同様に、例外復帰処理の途中にエラーが発生した場合、従来の演算処理装置では例外復帰処理に応じたリトライ処理を行うことができない。更に、スタックポインタの選択値の更新処理の途中にエラーが発生した場合にも、従来の演算処理装置ではスタックポインタの選択値の更新処理に応じたリトライ処理を行うことができない。
【０００８】
このように、例外処理、例外復帰処理、スタックポインタの選択値の更新処理等といった、特殊処理の途中にエラーが発生した場合、従来の演算処理装置では、特殊処理の種別に応じたリトライ処理を行うことができない。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】国際公開第２００８／１５５８０３号
【特許文献２】特開昭５７−１６４３４２号公報
【特許文献３】特開平１１−３２７９４０号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
従来の演算処理装置では、特殊処理中にエラーが検出された場合に、特殊処理の種別に応じたリトライを行うことはできない。
【００１１】
そこで、１つの側面では、特殊処理中にエラーが検出された場合に、特殊処理の種別に応じたリトライを可能とする演算処理装置及び演算処理装置の制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１２】
１つの案によれば、プログラマブル資源に含まれる複数の資源を更新する特殊処理を複数サイクルで実行する演算処理装置であって、特殊処理中であることを記録すると共に、命令実行中にエラーを検出するとエラー通知を行う命令実行回路と、特殊処理の開始時点で特殊処理種別を記録すると共に、前記特殊処理中に前記エラー通知を受信した場合、記録されている特殊処理種別から当該特殊処理を再実行することが可能であるか否かを判断し、可能であると判断した場合には当該特殊処理を最初から再実行する特殊処理再実行を指示するリトライ制御回路と、を備え、前記命令実行回路は、前記リトライ制御回路からの前記特殊処理再実行の指示に基づき、前記特殊処理を再実行するリトライ処理を行う演算処理装置が提供される。
【発明の効果】
【００１３】
一態様によれば、特殊処理中にエラーが検出された場合に、特殊処理の種別に応じたリトライ処理を可能とすることができる。
【図面の簡単な説明】
【００１４】
【図１】一実施例における演算処理装置の構成の一例を示すブロック図である。
【図２】一実施例におけるマルチコア構成の演算処理システムの一例を示すブロック図である。
【図３】一実施例におけるＣＰＵコアの一例を示すブロック図である。
【図４】特殊処理制御部の一例を示すブロック図である。
【図５】リトライ制御回路の一例を示す図である。
【図６】一実施例におけるリトライ処理の一例を説明するフローチャートである。
【図７】例外処理の動作の一例を説明する図である。
【図８】例外復帰処理の動作の一例を説明する図である。
【図９】spsel更新処理の動作の一例を説明する図である。
【発明を実施するための形態】
【００１５】
開示の演算処理装置及び演算処理装置の制御方法では、複数の資源を更新する特殊処理を複数サイクルで実行する。命令実行回路は、特殊処理中であることを記録し、命令実行中にエラーを検出するとエラー通知を行う。リトライ制御回路は、特殊処理の開始時点で特殊処理種別を記録し、特殊処理中にエラー通知を受信した場合、記録されている特殊処理種別から特殊処理を再実行することが可能であるか否かを判断する。リトライ制御回路は、特殊処理を再実行することが可能であると判断した場合には、特殊処理を最初から再実行する特殊処理再実行を指示する。命令実行回路は、リトライ制御回路からの特殊処理再実行の指示に基づき、特殊処理を再実行するリトライ処理を行う。
【００１６】
以下に、開示の演算処理装置及び演算処理装置の制御方法の各実施例を図面と共に説明する。
【実施例】
【００１７】
演算処理装置において、例外処理等の特殊処理の内容は、命令セットアーキテクチャに応じて異なるが、一般的には一命令で複数の資源の更新が必要である。一方、例えば例外処理の発生頻度は比較的低いので、資源更新は複数サイクルに分けて実行する。
【００１８】
例えば、ARMホールディングス（ARM  Holdings  plc）社製のARMv8-Aアーキテクチャを用いる場合の例外処理では、EL1より上位の例外レベルではspselレジスタにアクセスし、スタックポインタのフラグの値をセットして使用スタックの切り替えを行う。スタックポインタのフラグは、演算処理装置の実行状態を表すフラグの集まりである、プロセス状態（Process  State）レジスタ（以下、「PSTATEレジスタ」）に格納される。スタックポインタの選択値の更新処理は、spsel更新処理等を含む。
【００１９】
例外処理を開始して資源更新から命令完了までの間にエラーが検出された場合に、資源更新後に命令を再実行すると、同一の結果が得られる保証がないため、従来は例外処理のリトライを行わない構成になっている。
【００２０】
図１は、一実施例における演算処理装置の構成の一例を示すブロック図である。図１に示す演算処理装置１は、例外処理、例外復帰処理、スタックポインタの選択値の更新処理等の特殊処理を、複数サイクルで実行する。以下に説明するように、演算処理装置１は、特殊処理中にエラーを検出した場合、特殊処理種別から特殊処理を再実行することが可能であるか否かを判断し、可能であると判断した場合には、特殊処理を最初から再実行するリトライ処理を行う。
【００２１】
図１に示す演算処理装置１は、命令実行回路１１と、リトライ制御回路１２と、実行状態制御回路１３と、プログラマブル資源１４とを備える。
【００２２】
命令実行回路１１は、命令フェッチ、命令デコード、演算実行、命令完了、プログラマブル資源１４の資源更新等をイン・オーダ（In-Order）で指示する回路を有する。また、命令実行回路１１は、上記の特殊処理を実行する回路、命令実行中のエラーを検出する回路等を有する。命令実行回路１１が有するこれらの回路には、周知の回路を用いることができる。
【００２３】
リトライ制御回路１２は、リトライ処理が可能なタイミングであるか否かを判断する回路、リトライ処理を行うことが確定したことを示すフラグを格納する回路、命令実行回路１１に対して一命令再実行を指示する回路等を有する。リトライ制御回路１２が有するこれらの回路には、周知の回路を用いることができる。
【００２４】
実行状態制御回路１３は、命令実行回路１１からエラー通知を受信すると、命令実行回路１１に対して命令実行キャンセルを指示する回路等を有する。実行状態制御回路１３が有するこれらの回路には、周知の回路を用いることができる。
【００２５】
命令実行回路１１は、エラーを検出すると、リトライ制御回路１２及び実行状態制御回路１３にエラー通知を行う。命令実行中のエラーを検出する回路は、命令実行回路１１内の各部に必要に応じて設けられている。実行状態制御回路１３は、エラーデータを使って資源更新が行われることを避けるため、エラー通知を受信すると直ちに命令実行キャンセル状態に遷移し、命令実行回路１１に命令実行キャンセルを指示する。一方、リトライ制御回路１２は、リトライ処理が可能なタイミングでエラー通知を受信すると、リトライ処理を行うことが確定したことを示すフラグをセットし、命令実行回路１１に一命令実行を指示する。
【００２６】
命令実行回路１１は、実行状態制御回路１３から命令実行キャンセルを指示されると、プログラマブル資源１４の資源更新を中止し、命令実行回路１１内の処理を全てクリアする。命令実行回路１１は、実行状態制御回路１３からの命令実行キャンセルの指示が解除されると、リトライ制御回路１２からの一命令実行の指示に従い、一命令だけを実行する。命令実行回路１１は、一命令の実行が完了すると、命令完了をリトライ制御回路１２に通知する。リトライ制御回路１２は、命令実行回路１１から命令完了通知を受信すると、リトライ処理を行うことが確定したことを示すフラグをリセットし、命令実行回路１１への一命令実行の指示を解除する。命令実行回路１１は、一命令実行の指示が解除されると、特殊処理以外の命令の処理に戻る。
【００２７】
命令実行回路１１は、命令完了及び資源更新をリトライ制御回路１２に通知する。プログラマブル資源１４のうちの一つの資源しか更新しないような命令の場合、資源更新と命令完了を同一タイミングで通知する。リトライ制御回路１２は、このような一つの資源しか更新しないような命令を実行しているタイミングは、リトライ処理が可能なタイミングであると判断する。一方、複数サイクルに分けてプログラマブル資源１４の複数の資源を更新する命令の場合、資源更新と命令完了を異なるタイミングで通知する。従来、このような複数の資源を更新する命令の場合、資源更新後から命令完了直前までのタイミングは、リトライ処理が不可能なタイミングであると判断していた。しかし、本実施例では、リトライ制御回路１２は、このような複数の資源を更新する命令の場合、資源更新後から命令完了直前までのタイミングであっても、後述する一定の条件下ではリトライ処理が可能なタイミングであると判断する。
【００２８】
本実施例では、命令実行回路１１は更に、特殊処理中であることを記録する回路を有する。命令実行回路１１は、例外処理等の特殊処理の開始時点（以下、「特殊処理開始時点」とも言う）で特殊処理開始と特殊処理種別をリトライ制御回路１２に通知する。特殊処理種別とは、例外処理、例外復帰処理、spsel更新処理等の、特殊処理の種別である。また、命令実行回路１１は、特殊処理完了を特殊処理以外の処理の命令と同じ命令完了でリトライ制御回路１２に通知する。命令実行回路１１は、特殊処理を実行中にエラーを検出すると、リトライ制御回路１２及び実行状態制御回路１３にエラー通知を行う。更に、命令実行回路１１は、特殊処理の実行中のエラーの検出に伴う特殊処理再実行に応じて、プログラマブル資源１４の資源更新を行う。
【００２９】
本実施例では、リトライ制御回路１２は更に、特殊処理開始時点で通知された特殊処理種別を記録する回路等を有する。また、リトライ制御回路１２は、特殊処理開始から完了までの特殊処理中に命令実行回路１１からエラー通知を受信した場合、記録している特殊処理種別と特殊処理再実行を指示する回路を有する。具体的には、リトライ制御回路１２は、記録している特殊処理種別から当該特殊処理を再実行することが可能であるか否かを判断し、可能であると判断した場合には記録している特殊処理種別の特殊処理を最初から再実行するよう命令実行回路１１に指示する。命令実行回路１１は、リトライ制御回路１２からの特殊処理再実行の指示に基づき、例外処理、例外復帰処理、spsel更新処理等の特殊処理を、再実行可能な順番で実行する。
【００３０】
図５と共に後述するように、リトライ制御回路１２は、特殊処理を再実行可能なタイミングであるか否かの判断に用いるフラグを格納し、特殊処理開始のタイミングでセットされ、特殊処理完了のタイミングでリセットされるHARDOP_RETRY_POINTレジスタを有する。リトライ制御回路１２は更に、特殊処理のリトライ処理を行うことが確定し、且つ、特殊処理のリトライ処理が完了していないことを示すフラグを格納するHARDOP_RETRY_TGRレジスタを有する。HARDOP_RETRY_TGRレジスタは、エラー検出タイミングでHARDOP_RETRY_POINTレジスタがセットされており、且つ、HARDOP_RETRY_POINTレジスタをリセットする条件が成立していない場合にセットされ、前記特殊処理完了のタイミングでリセットされる。HARDOP_RETRY_TGRレジスタは、特殊処理再実行を命令実行回路１１に指示する。また、リトライ制御回路１２は、特殊処理開始時点で通知される特殊処理種別を記録する第１の記録回路を有する。この第１の記録回路は、エラー検出タイミングで記録された特殊処理が再実行可能な処理である場合にのみ、HARDOP_RETRY_TGRレジスタをセットし、特殊処理を再実行するときに当該特殊処理の処理種別である再実行特殊処理種別を命令実行回路１１に通知する。
【００３１】
これにより、例外処理、例外復帰処理、spsel更新処理等の特殊処理中にエラーを検出した場合に、特殊処理の種別に応じたリトライ処理を行うことが可能となる。また、特殊処理中にエラーを検出した場合に、再実行することが可能な特殊処理の種別であれば、プログラムを異常終了させることなく命令実行を継続することができるので、演算処理装置１の信頼性を向上することが可能となる。
【００３２】
図２は、一実施例におけるマルチコア構成の演算処理システムの一例を示すブロック図である。図２に示す演算処理システム５０は、複数のノード５１−１〜５１−Ｎを有する。ここで、Ｎは２以上の自然数である。ノード５１−２〜５１−Ｎは、ノード５１−１と同じ構成を有しても良い。このため、図２に示す例では、ノード５１−２〜５１−Ｎの構成の図示は省略する。
【００３３】
この例では、ノード５１−１は、ＣＰＵ（Central  Processing  Unit）５２、メモリの一例を形成するＤＩＭＭ（Dual  Inline  Memory  Module）５３、及び入出力（Ｉ／Ｏ：Input/Output）部５４を有する。ＣＰＵ５２は、同じ構成を有する複数のＣＰＵコア５２１−１〜５２１−Ｍ、共用の２次キャッシュメモリであるＬＬ（Last  Level）キャッシュメモリ５２２、ＭＡＣ（Memory  Access  Controller）５２３、及びインターコネクト部５２４を有する。ここで、Ｍは２以上の自然数である。この例では、ノード５１−１は、インターコネクト部５２４を介して各ノード５１−２〜５１−Ｎと接続されている。具体的には、ノード５１−１のインターコネクト部５２４と、各ノード５１−２〜５１−Ｎのインターコネクト部とが接続されている。
【００３４】
ＣＰＵ５２とＤＩＭＭ５３との間のデータのやり取りを制御するＭＡＣ５２３を設けることで、ＣＰＵ５２とＤＩＭＭ５３とが直接、データのやり取りを行うことができる。ＣＰＵ５２と他のノード５１−２〜５１−Ｎとのデータのやり取りに関しては、インターコネクト部５２４によって他のノード５１−２〜５１−Ｎとのデータのやり取りを制御する。この例では、演算処理システム５０の各ノード５１−１〜５１−Ｎを形成するＣＰＵ／メモリボードに、１個のＣＰＵ５２のみが搭載される。
【００３５】
図３は、一実施例におけるＣＰＵコアの一例を示すブロック図である。図３に示すＣＰＵコア５２１は、演算処理装置１の一例であり、図２に示す各ＣＰＵコア５２１−１〜５２１−Ｍとして使用可能である。
【００３６】
命令実行回路１１は、命令フェッチアドレス生成器３１、１次命令キャッシュメモリ３２、命令バッファ３３、命令デコーダ３４、オペランドアドレス生成器３６、１次データキャッシュメモリ３７、及び固定小数点演算器３９、及び浮動小数点演算器４０を有する。命令実行回路１１は、主記憶オペランドアドレス生成用リザベーションステーション（ＲＳＡ:Reservation  Station  for  Address  generate）３５を有する。また、命令実行回路１１は、固定小数点演算と浮動小数点演算用リザベーションステーション（ＲＳＥ:Reservation  Station  for  Execute）３８を有する。更に、命令実行回路１１は、分岐命令用リザベーションステーション（ＲＳＢＲ:Reservation  Station  for  BRanch）４１を有する。命令実行回路１１は、コミットスタックエントリ（ＣＳＥ:Commit  Stack  Entry）４２、及び特殊処理制御部４３等を更に有する。
【００３７】
プログラマブル資源１４は、固定小数点物理レジスタ１４１、浮動小数点物理レジスタ１４２、システムレジスタ１４３、及びプログラムカウンタ（ＰＣ：Program  Counter）１４４等を含む。この例では、固定小数点物理レジスタ１４１は、後述するスタックポインタ（ＳＰ：Stack  Pointer）を含む。
【００３８】
システムレジスタ１４３は、実行状態を表すフラグの集まりであるPSTATEレジスタを含む。後述するspselレジスタは、実行状態を表すフラグの一部に相当し、PSTATEレジスタに含まれる。また、システムレジスタ１４３は、第１の特定記憶域の一例である保存プロセス状態レジスタ（Saved  Process  State  Register、以下「SPSRレジスタ」）と第２の特定記憶域の一例である例外リンクレジスタ（Exception  Link  Register、以下「ELRレジスタ」）を含む。更に、システムレジスタ１４３は、ベクターベースレジスタ（Vector  Base  Address  Register、以下「VBARレジスタ」）、例外レベルEL0に対応させたＳＰ用のSP_EL0レジスタ、例外レベルEL1に対応させたＳＰ用のSP_EL1レジスタ等を含む。SPSRレジスタは、例外レベルEL1に対応させたSPSR_EL1レジスタ等を含む。SPSRレジスタは、例外発生時のPSTATEレジスタ中の実行状態を保持する。SPSR_EL1レジスタは、例外発生時のspselレジスタの値を保存するための領域を含む。ELRレジスタは、例外レベルEL1に対応させたELR_EL1レジスタ等を含む。なお、システムレジスタ１４３の構成は、例えばARMv8-Aアーキテクチャを用いる場合の上記の構成に限定されるものではない。
【００３９】
ＣＰＵコア５２１のリトライ制御回路１２及び実行状態制御回路１３と、命令実行回路１１との接続は、図１等から明らかである。このため、図３では便宜上、リトライ制御回路１２及び実行状態制御回路１３と、命令実行回路１１との接続の図示は省略する。
【００４０】
命令フェッチアドレス生成器３１は、命令をフェッチするアドレスを生成するために、ＰＣ１４４又は分岐予測機構４４から入力した命令アドレスを選択する。命令フェッチアドレス生成器３１は、選択した命令アドレスの命令フェッチリクエストを１次命令キャッシュメモリ３２に出力する。１次キャッシュメモリ３２は、命令アドレスの命令フェッチリクエストに応じた命令を命令バッファ３３に出力する。なお、１次キャッシュメモリ３２に命令が格納されていない場合は、図示を省略する２次キャッシュメモリ又は主記憶装置に格納されている命令を命令バッファ３３に出力する。命令バッファ３３は、バッファリングした命令をプログラムの順番通りに、例えば一定数ずつ命令デコーダ３４に供給する。
【００４１】
命令デコーダ３４は、プログラムの順番通りに一定数の命令を同時にデコードする。命令デコーダ３４は、デコードした命令の種別に従って、デコードの結果を命令の実行を制御するＲＳＡ３５、ＲＳＥ３８、及びＲＳＢＲ４１に出力して必要なエントリを作成する。ＲＳＡ３５、ＲＳＥ３８、及びＲＳＢＲ４１で実行に必要なソースオペランドが揃った命令から実行することで、アウト・オブ・オーダ（Out-of-Order）実行が可能となる。デコードした命令がＲＳＡ３５、ＲＳＥ３８、及びＲＳＢＲ４１にエントリを作成した場合、固定小数点物理レジスタ１４１及び浮動小数点物理レジスタ１４２に対応するリネーミングを行うことで、アウト・オブ・オーダで命令を実行することが可能となる。ＲＳＡ３５、ＲＳＥ３８、及びＲＳＢＲ４１の各々でアウト・オブ・オーダで実行された命令の完了報告は、ＣＳＥ４２に出力される。
【００４２】
また、命令デコーダ３４は、デコードした全ての命令に対して、命令の完了処理を制御する命令完了制御部を含むＣＳＥ４２にエントリを作成する。具体的には、ＣＳＥ４２は、デコードした命令を命令の実行順番通りに格納するキューと、キューの情報と命令の完了報告に基づいて命令の完了処理を行う回路を有する。従って、デコードされた命令は、ＣＳＥ４２のキューに格納され、命令の完了報告を待つ。つまり、ＣＳＥ４２において、命令の完了処理を行う回路は、プログラムの順番通りに、キューに格納された完了報告待ちの命令の中から完了報告に対応する命令の実行を完了し、プログラマブル資源１４の更新を行う。ＣＳＥ４２は、命令の完了処理で命令の実行を完了すると、手順完了を特殊処理制御部４３に出力する。
【００４３】
オペランドアドレス生成器３６は、ＲＳＡ３５のエントリに応じて、オペランドアドレスを生成し、１次データキャッシュメモリ３７に出力する。１次データキャッシュメモリ３７は、生成されたオペランドアドレスのデータを固定小数点物理レジスタ１４１及び浮動小数点物理レジスタ１４２に出力する。固定小数点演算器３９は、ＲＳＥ３８のエントリに応じて固定小数点演算を行い、演算の実行結果を固定小数点物理レジスタ１４１に格納する。浮動小数点演算器４０は、ＲＳＥ３８のエントリに応じて浮動小数点演算を行い、演算の実行結果を浮動小数点物理レジスタ１４２に格納する。
【００４４】
ＲＳＡ３５、ＲＳＥ３８、及びＲＳＢＲ４１でアウト・オブ・オーダで実行された命令は、ＣＳＥ４２の制御により、プログラムの順番通りに命令の完了処理を行う。ＣＳＥ４２は、実行が完了した命令に対してのみ、固定小数点物理レジスタ１４１、浮動小数点物理レジスタ１４２、システムレジスタ１４３、ＰＣ１４４等のプログラマブル資源１４の更新を行う。ＰＣ１４４は、現在実行する命令のアドレスを出力する。分岐予測機構４４は、ＲＳＢＲ４１の分岐命令の完了報告に応じて、分岐命令が分岐するか否かを予測する。分岐予測機構４４は、分岐命令が分岐すると予測した場合、次に実行する分岐先アドレスを命令フェッチアドレス生成器３１に出力する。
【００４５】
演算の実行結果を格納する固定小数点物理レジスタ１４１と浮動小数点物理レジスタ１４２は、例えばアーキテクチャレジスタとリネーミングレジスタを形成できる。命令デコーダ３４からの命令がＲＳＡ３５又はＲＳＥ３８にエントリを作成する場合には、固定小数点リネーミングレジスタと浮動小数点リネーミングレジスタにリネーミングレジスタを割り当てるレジスタリネーミング処理を行う。
【００４６】
演算の実行結果を命令デコード時に割り当てられた固定小数点リネーミングレジスタと浮動小数点リネーミングレジスタに格納する。また、リネーミングレジスタとアーキテクチャレジスタが混在した物理レジスタ方式を用いる場合には、演算の実行結果を格納したリネーミングレジスタとして扱っている物理レジスタのアドレスをアーキテクチャレジスタに変更すれば良い。
【００４７】
ＣＳＥ４２内の命令完了制御部は、ＣＳＥ４２のエントリの最も古い順から命令の完了処理を行うことで、プログラムの順番通りに命令の実行を完了することが可能となる。ＣＳＥ４２内の命令完了制御部は、１サイクルで同時に実行を完了することが可能な最大数の命令をＣＳＥ４２から選択する。選択したエントリを命令の実行を完了する対象のエントリとして、命令の実行の完了を制御する。命令デコーダ３４は、命令デコード時に、ＣＳＥ４２に登録するエントリ番号（IID:Instruction  ID）を出力する。命令の実行が完了したときに、IIDが示すＣＳＥ４２のエントリ番号に実行の完了報告を格納することで、実行が完了した命令を特定することが可能となる。また、固定小数点演算器３９又は浮動小数点演算器４０から周知の方法で図３中破線で示すように例外検出が通知された場合には、ＣＳＥ４２に例外検出を記録し、命令完了時に特殊処理制御部４３に例外処理開始を通知する。
【００４８】
特殊処理制御部４３は、ＣＳＥ４２から例外検出が通知された場合や、命令デコーダ３４でプログラマブル資源１４の複数のレジスタを更新するような特殊処理を伴う命令（eret命令,  spsel更新命令等）がデコードされたときに使用される。
【００４９】
図４は、特殊処理制御部の一例を示すブロック図である。図４に示す特殊処理制御部４３は、判断回路４３１、状態制御回路４３２、第２の記録回路の一例である記録回路４３３、手順制御回路４３４、及び指示回路４３５を有する。
【００５０】
判断回路４３１は、命令デコーダ３４から、デコードした命令がどのような種別の命令であるかを示す命令情報を受信する。判断回路４３１は、受信した命令情報が示す命令の種別に基づき、特殊処理が必要な命令であるか否かを判断する。判断回路４３１は、特殊処理が必要な種別の命令（例外復帰命令、spsel更新命令等）であると判断した場合、状態制御回路４３２に特殊処理が必要であることを通知し、記録回路４３３に特殊処理種別を通知する。
【００５１】
状態制御回路４３２は、特殊処理開始から特殊処理完了までの各種処理を行うための状態を制御する。状態制御回路４３２は、ＣＳＥ４２から例外検出が通知された場合、判断回路４３１が特殊処理が必要な種別の命令であると判断した場合、及びリトライ制御回路１２から特殊処理再実行の指示がある場合に、特殊処理状態に遷移する。状態制御回路４３２は、特殊処理状態に遷移すると、特殊処理開始を手順制御回路４３４、指示回路４３５、及びリトライ制御回路１２に通知する。状態制御回路４３２は、指示回路４３５から特殊処理完了の通知があると、特殊処理状態から遷移して、特殊処理以外の命令の処理状態に戻る。
【００５２】
記録回路４３３は、ＣＳＥ４２から例外検出の通知、判断回路４３１から特殊処理が必要な命令の種別、及びリトライ制御回路１２から再実行特殊処理種別を夫々受信し、特殊処理種別を特殊処理開始から特殊処理完了までの間記録する。また、記録回路４３３は、記録されている特殊処理種別を指示回路４３５とリトライ制御回路１２に通知する。
【００５３】
手順制御回路４３４は、状態制御回路４３２から特殊処理開始を通知されると、特殊処理手順番号spnに初期値を設定し、ＣＳＥ４２内の命令完了制御部から手順完了を通知されると特殊処理手順番号spnに１を加算（即ち、spn=spn+1にインクリメント）する。手順制御回路４３４は、１を加算（即ち、インクリメント）後の特殊処理手順番号spnを指示回路４３５に通知する。
【００５４】
指示回路４３５は、状態制御回路４３２から特殊処理開始を通知されると、特殊処理を実行するのに用いる回路に特殊処理指示を通知する。特殊処理を実行するのに用いる回路は、図３に示す例では、例えば命令デコーダ３４より後段に設けられた回路を含む。特殊処理指示は、記録回路４３３から通知される特殊処理種別と、手順制御回路４３４から通知される特殊処理手順番号spnに基づいて通知する。指示回路４３５は、特殊処理種別毎に予め決められている最後の特殊処理手順番号spnまで特殊処理指示を出力し終わると、特殊処理完了を状態制御回路４３２とリトライ制御回路１２に通知する。
【００５５】
図５は、リトライ制御回路の一例を示す図である。図５に示すリトライ制御回路１２は、RETRY_POINTレジスタ１２２、RETRY_TGRレジスタ１２３、HARDOP_RETRY_POINTレジスタ１２７、HARDOP_RETRY_TGRレジスタ１２８、第１の記録回路の一例である記録回路１２９、及びゲート回路を有する。レジスタ１２２，１２３，１２７，１２８は、第１、第２、第３、及び第４のレジスタの一例であり、例えばＲＳフリップフロップ回路で形成可能である。ゲート回路は、オア（ＯＲ）回路１２１Ａ，１２１Ｂ，１２１Ｃ、インバータ（Inverter）回路１２４Ａ，１２４Ｂ、ナンド（ＮＡＮＤ）回路１２５Ａ，１２５Ｂ、アンド（ＡＮＤ）回路１２６Ａ，１２６Ｂを含み、論理演算を行う。
【００５６】
命令実行回路１１からの命令完了は、オア回路１２１Ａの一方の入力端子に入力される。命令実行回路１１からの資源更新は、オア回路１２１Ｂの一方の入力端子に入力される。命令実行回路１１からの特殊処理開始は、オア回路１２１Ｂの他方の入力端子、ナンド回路１２５Ｂの一方の入力端子、HARDOP_RETRY_POINTレジスタ１２７のセット（set）端子、及び記録回路１２９に入力される。命令実行回路１１からの特殊処理完了は、オア回路１２１Ａの他方の入力端子、インバータ回路１２４Ｂ、及びHARDOP_RETRY_POINTレジスタ１２７とHARDOP_RETRY_TGRレジスタ１２８のリセット（reset）端子に入力される。命令実行回路１１からのエラー通知は、アンド回路１２６Ａ，１２６Ｂに入力される。命令実行回路１１からの特殊処理種別は、記録回路１２９に入力される。
【００５７】
なお、オア回路１２１Ａの出力は、インバータ回路１２４Ａ、RETRY_POINTレジスタ１２２のset端子、及びRETRY_TGRレジスタ１２３のreset端子に入力される。オア回路１２１Ｂの出力は、RETRY_POINTレジスタ１２２のreset端子、及びナンド回路１２５Ａに入力される。ナンド回路１２５Ａには、インバータ回路１２４Ａの出力が入力される。アンド回路１２６Ａには、ナンド回路１２５ＡとRETRY_POINTレジスタ１２２の出力も入力される。アンド回路１２６Ａの出力は、RETRY_TGRレジスタ１２３のset端子に入力される。ナンド回路１２５Ｂには、インバータ回路１２４Ｂの出力も入力される。アンド回路１２６Ｂには、HARDOP_RETRY_POINTレジスタ１２７及びナンド回路１２５Ｂにも入力される。更に、アンド回路１２６Ｂには、記録回路１２９の出力も、オア回路１２１Ｃを介して入力される。アンド回路１２６Ｂの出力は、HARDOP_RETRY_TGRレジスタ１２８のset端子に入力される。
【００５８】
RETRY_POINTレジスタ１２２は、リトライ処理が可能なタイミングであるか否かを判断するのに用いるフラグを格納する。RETRY_POINTレジスタ１２２は、命令完了以外のタイミングで資源更新が行われたときにリセットされ、命令完了のタイミングでセットされる。RETRY_TGRレジスタ１２３は、リトライ処理を行うことが確定し、且つ、リトライ処理が完了していないことを示すフラグを格納する。RETRY_TGRレジスタ１２３は、エラー検出タイミングでRETRY_POINTレジスタ１２２がセットされており、且つ、RETRY_POINTレジスタ１２２をリセットする条件が成立していない場合にセットされる。また、RETRY_TGRレジスタ１２３は、命令完了時にリセットされるが、特殊処理中のエラーで直ちにリトライ処理が開始されないように、特殊処理開始のタイミングでリセットされる。これにより、RETRY_TGRレジスタ１２３は、一命令再実行を命令実行回路１１に指示する。
【００５９】
HARDOP_RETRY_POINTレジスタ１２７は、特殊処理を再実行可能なタイミングであるか否かの判断に用いるフラグを格納する。HARDOP_RETRY_POINTレジスタ１２７は、特殊処理開始のタイミングでセットされ、特殊処理完了のタイミングでリセットされる。HARDOP_RETRY_TGRレジスタ１２８は、特殊処理のリトライ処理を行うことが確定し、且つ、特殊処理のリトライ処理が完了していないことを示すフラグを格納する。HARDOP_RETRY_TGRレジスタ１２８は、エラー検出タイミングでHARDOP_RETRY_POINTレジスタ１２７がセットされており、且つ、HARDOP_RETRY_POINTレジスタ１２７をリセットする条件が成立していない場合にセットされる。また、HARDOP_RETRY_TGRレジスタ１２８は、特殊処理完了のタイミングでリセットされる。これにより、HARDOP_RETRY_TGRレジスタ１２８は、特殊処理再実行を命令実行回路１１に指示する。
【００６０】
記録回路１２９は、特殊処理開始時点で通知される特殊処理種別を記録する。記録回路１２９は、エラー検出タイミングで記録された特殊処理が再実行可能な処理である場合にのみ、オア回路１２１Ｃ及びアンド回路１２６Ｂを介してHARDOP_RETRY_TGRレジスタ１２８をセットする。また、記録回路１２９は、特殊処理を再実行するときに当該特殊処理の処理種別である再実行特殊処理種別を命令実行回路１１に通知する。
【００６１】
従って、特殊処理中にエラーを検出した場合に、特殊処理種別から特殊処理を再実行することが可能であるか否かを判断し、可能であると判断した場合には特殊処理を最初から再実行するリトライ処理を指示する。
【００６２】
図３に示す命令実行回路１１の特殊処理制御部４３内の記録回路４３３は、特殊処理中であることを記録する第２の記録回路の一例を形成する。また、図５に示すリトライ制御回路１２の記録回路１２９は、特殊処理開始時点で特殊処理種別を記録する第１の記録回路の一例を形成する。リトライ制御回路１２のレジスタ１２７，１２８等は、特殊処理中にエラーを検出した命令実行回路１１からエラー通知を受信した場合、記録されている特殊処理種別から当該特殊処理を再実行することが可能であるか否かを判断する回路の一例を形成する。リトライ制御回路１２のこの判断する回路は、特殊処理を再実行することが可能であると判断した場合、特殊処理を最初から再実行するリトライ処理、即ち、特殊処理再実行を命令実行回路１１に指示する。命令実行回路１１の特殊処理制御部４３は、リトライ制御回路１２からの特殊処理を最初から再実行するリトライ処理、即ち、特殊処理再実行の指示に基づき、特殊処理を再実行するリトライ処理を行う回路の一例を形成する。
【００６３】
図６は、一実施例におけるリトライ処理の一例を説明するフローチャートである。図６に示すリトライ処理は、命令実行回路１１が特殊処理中にエラーを検出し、リトライ制御回路１２のアンド回路１２６Ａ，１２６Ｂがエラー通知を受信すると開始する。
【００６４】
ステップＳ１では、リトライ制御回路１２が、RETRY_POINTレジスタ１２２が格納するフラグの値が１（RETRY_POINT==1）であるか否かを判定し、判定結果がＹＥＳであると処理はステップＳ２へ進む。ステップＳ２では、リトライ制御回路１２が、アンド回路１２６Ａの出力でRETRY_TGRレジスタ１２３をセットし、ステップＳ３では、リトライ制御回路１２が、RETRY_TGRレジスタ１２３から一命令再実行を命令実行回路１１に指示する。ステップＳ４では、リトライ制御回路１２が、命令実行回路１１からオア回路１２１Ａを介して命令完了を受信したか否かを判定する。ステップＳ４の判定結果がＹＥＳになると、処理はステップＳ５へ進む。ステップＳ５では、リトライ制御回路１２が、オア回路１２１Ａの出力でRETRY_TGRレジスタ１２３をリセットし、処理は終了する。
【００６５】
一方、ステップＳ１の判定結果がＮＯであると、処理はステップＳ６へ進む。ステップＳ６では、リトライ制御回路１２が、HARDOP_RETRY_POINTレジスタ１２７が格納するフラグの値が１であるか否かを判定し、判定結果がＹＥＳであると、処理はステップＳ７へ進む。ステップＳ７では、リトライ制御回路１２が、記録回路１２９に記録されている特殊処理種別が例外処理（EXCEPTION_ENTER）であるか否かを判定し、判定結果がＹＥＳであると、処理はステップＳ８へ進む。ステップＳ８では、リトライ制御回路１２が、アンド回路１２６Ｂの出力でHARDOP_RETRY_TGRレジスタ１２８をセットする。ステップＳ９では、リトライ制御回路１２が、HARDOP_RETRY_TGRレジスタ１２８から例外処理を示す特殊処理再実行を命令実行回路１１に指示する。ステップＳ９の後、処理は後述するステップＳ１６へ進む。
【００６６】
一方、ステップＳ７の判定結果がＮＯであると、処理はステップＳ１０へ進む。ステップＳ１０では、リトライ制御回路１２が、記録回路１２９に記録されている特殊処理種別が例外復帰処理であるか否かを判定し、判定結果がＹＥＳであると、処理はステップＳ１１へ進む。ステップＳ１１では、リトライ制御回路１２が、アンド回路１２６Ｂの出力でHARDOP_RETRY_TGRレジスタ１２８をセットする。ステップＳ１２では、リトライ制御回路１２が、HARDOP_RETRY_TGRレジスタ１２８から例外復帰処理（EXCEPTION_RETURN）を示す特殊処理再実行を命令実行回路１１に指示する。ステップＳ１２の後、処理は後述するステップＳ１６へ進む。
【００６７】
ステップＳ１０の判定結果がＮＯであると、処理はステップＳ１３へ進む。ステップＳ１３では、リトライ制御回路１２が、記録回路１２９に記録されている特殊処理種別がspsel更新処理であるか否かを判定し、判定結果がＹＥＳであると、処理はステップＳ１４へ進む。ステップＳ１４では、リトライ制御回路１２が、アンド回路１２６Ｂの出力でHARDOP_RETRY_TGRレジスタ１２８をセットする。ステップＳ１５では、リトライ制御回路１２が、HARDOP_RETRY_TGRレジスタ１２８からspsel更新処理（SPSEL）を示す特殊処理再実行を命令実行回路１１に指示する。ステップＳ１５の後、処理は後述するステップＳ１６へ進む。
【００６８】
ステップＳ１６では、リトライ制御回路１２が、ステップＳ９，Ｓ１２，Ｓ１４のいずれかで出力した特殊処理再実行に対し、命令実行回路１１から特殊処理完了を受信したか否かを判定する。ステップＳ１６の判定結果がＹＥＳであると、処理はステップＳ１７へ進む。ステップＳ１７では、リトライ制御回路１２が、特殊処理完了でHARDOP_RETRY_TGRレジスタ１２８をリセットし、処理は終了する。
【００６９】
ステップＳ６の判定結果がＮＯ、或いは、ステップＳ１３の判定結果がＮＯであると、処理はステップＳ１８へ進む。ステップＳ１８では、リトライ制御回路１２が、ソフトウェアにエラー検出を通知し、処理は終了する。
【００７０】
このように、特殊処理中にエラーが検出されると、先ずRETRY_POINTレジスタ１２２のフラグの値を調べる。RETRY_POINTレジスタ１２２のフラグが１の場合は、RETRY_TGRレジスタ１２３のフラグの値を１をセットしてから一命令を再実行し、命令完了を待つ。命令完了後に、RETRY_TGRレジスタ１２３のフラグの値を０にリセットし、リトライ処理は終了する。
【００７１】
RETRY_POINTレジスタ１２２のフラグの値が０の場合は、HARDOP_RETRY_POINTレジスタ１２７のフラグの値を調べる。HARDOP_RETRY_POINTレジスタ１２７のフラグの値が１であれば、更に記録回路１２９に記録されている特殊処理種別を調べる。特殊処理種別が再実行可能なEXCEPTION_ENTER,  EXCEPTION_RETURN,  SPSELのいずれかであれば、HARDOP_RETRY_TGRレジスタ１２８のフラグに１をセットし、記録されていた特殊処理を再実行する。特殊処理完了後に、HARDOP_RETRY_TGRレジスタ１２８のフラグを０にリセットし、リトライ処理は終了する。
【００７２】
RETRY_POINTレジスタ１２２とHARDOP_RETRY_POINTレジスタ１２７のフラグの値が共に０である場合、リトライ処理が不可能であると判断してソフトウェアにエラー検出を通知し、処理は終了する。また、HARDOP_RETRY_POINTレジスタ１２７のフラグの値が１で記録回路１２９に記録されている特殊処理種別がEXCEPTION_ENTER,  EXCEPTION_RETURN,  SPSELいずれでもない場合、リトライ処理は不可能であると判断してソフトウェアにエラー検出を通知し、処理は終了する。
【００７３】
次に、特殊処理の手順を、特殊処理が例外処理の場合、例外復帰処理の場合、及びスタックポインタの選択値の更新処理の場合を例に説明する。
【００７４】
本実施例において、例えばARMv8-Aアーキテクチャを用いる場合に例外検出に伴う例外処理は、以下の手順ＳＴ１〜ＳＴ３で行われる。
【００７５】
手順ＳＴ１では、PSTATEレジスタ中の例外発生時の実行状態を、SPSRレジスタに保存する。手順ＳＴ１では、同時に、ＰＣ１４４が示す例外の戻り先をELRレジスタに保存する。なお、本実施例において、特殊処理が例外処理の場合の特殊処理開始時点とは、この手順ＳＴ１が完了した時点である。
【００７６】
手順ＳＴ２では、ＳＰの値を変更前実行状態（SPSRレジスタ中のELとspsel）に対応するSP_ELxレジスタに書き込む。
【００７７】
手順ＳＴ３では、変更後実行状態（PSTATEレジスタ中の現EL（currentEL）とspsel）に対応するSP_ELxレジスタの値をＳＰに書き込み、同時にPSTATEレジスタ中の実行状態を例外処理用の値に変更する。手順ＳＴ３では、更に同時にＰＣ１４４を例外処理用の値に変更する。例外処理用の値は、例えばVBARレジスタの値に例外種別に応じたオフセット（Offset）を加算した値である。
【００７８】
例外処理では、手順ＳＴ１の処理の完了を特殊処理開始、手順ＳＴ３の処理の完了を特殊処理完了として扱い、特殊処理中にエラーが検出された場合は手順ＳＴ２から処理を再実行する。
【００７９】
図７は、例外処理の動作の一例を説明する図である。図７は、例外が発生して例外レベルEL0からEL1へ割り込む場合の例外処理の動作例を示す。図７中、PSTATEはPSTATEレジスタ値、SPSR_EL1はSPSR_EL1レジスタ値、ＰＣはＰＣ１４４の値（以下、「ＰＣ値」とも言う）、ELR_EL1はELR_EL1レジスタ値、ＳＰはＳＰ値を夫々示す。また、SP_EL0はSP_EL0レジスタ値、SP_EL1はSP_EL1レジスタ値、HARDOP_RETRY_POINTはHARDOP_RETRY_POINTレジスタ１２７の値（HARDOP_RETRY_POINTレジスタ値）を夫々示す。
【００８０】
この例では、例外発生時の{PSTATE,  SPSR_EL1,  PC,  ELR_EL1,  SP,  SP_EL0,  SP_EL1}レジスタ値を夫々{A,B,C,D,E,F,G}で表す。具体的には、PSTATEレジスタ値がA、SPSR_EL1レジスタ値がB、ＰＣ値がC、ELR_EL1レジスタ値がD、ＳＰ値がE、SP_EL0レジスタ値がF、及びSP_EL1レジスタ値がGである。
【００８１】
従って、この例において、手順ＳＴ１では、PSTATE値AをSPSR_EL1レジスタに保存し、同時にＰＣ値CをELR_EL1レジスタに書き込む。手順ＳＴ２では、ＳＰ値EをSP_EL0レジスタに書き込む。手順ＳＴ３では、SP_EL1値GをＳＰに書き込み、同時に例外処理用実行状態値XをPSTATEレジスタに書き込み、更に同時に例外処理用の値YをＰＣに書き込む。HARDOP_RETRY_POINT値には、手順ＳＴ１の処理の完了時に１がセットされ、手順ＳＴ３の処理の完了時に０がセットされる。例外処理によるHARDOP_RETRY_POINT=1の状態でエラーが検出された場合には、手順ＳＴ２と手順ＳＴ３の処理が再実行される。本実施例の手順ＳＴ２と手順ＳＴ３は、手順ＳＴ１と手順ＳＴ２が更新する資源を参照しない処理であるため、エラー時に再実行しても同一結果が得られる。
【００８２】
本実施例において、例えばARMv8-Aアーキテクチャを用いる場合にeret命令で実行される例外復帰処理は、以下の手順ＳＴ１１〜ＳＴ１３で行われる。
【００８３】
手順ＳＴ１１では、SPSRレジスタの値をPSTATEレジスタに書き込み、同時にELRレジスタの値をＰＣ１４４に書き込む。なお、本実施例において、特殊処理が例外復帰処理の場合の特殊処理開始時点とは、この手順ＳＴ１１が完了した時点である。
【００８４】
手順ＳＴ１２では、ＳＰの値を変更前実行状態（SPSRレジスタ中のELとspsel）に対応するSP_ELxレジスタに書き込む。
【００８５】
手順ＳＴ１３では、変更後実行状態（PSTATEレジスタ中のcurrentELとspsel）に対応するSP_ELxレジスタの値をＳＰに書き込む。
【００８６】
例外復帰処理では、手順ＳＴ１１の処理の完了を特殊処理開始、手順ＳＴ１３の処理の完了を特殊処理完了として扱い、特殊処理中にエラー検出された場合は手順ＳＴ１２から処理を再実行する。
【００８７】
図８は、例外復帰処理の動作の一例を説明する図である。図８は、例外復帰命令の一例であるeret命令が実行されて例外レベルEL1からEL0へ遷移する場合の例外復帰処理手順の動作例を示す。図８中、PSTATEはPSTATEレジスタ値、SPSR_EL1はSPSR_EL1レジスタ値、ＰＣはＰＣ値、ELR_EL1はELR_EL1レジスタ値、ＳＰはＳＰ値を夫々示す。また、SP_EL0はSP_EL0レジスタ値、SP_EL1はSP_EL1レジスタ値、HARDOP_RETRY_POINTはHARDOP_RETRY_POINTレジスタ１２７の値（HARDOP_RETRY_POINTレジスタ値）を夫々示す。
【００８８】
eret命令開始時の{PSTATE,  SPSR_EL1,  PC,  ELR_EL1,  SP,  SP_EL0,  SP_EL1}レジスタ値を夫々{A,B,C,D,E,F,G}とする。具体的には、PSTATEレジスタ値がA、SPSR_EL1レジスタ値がB、ＰＣ値がC、ELR_EL1レジスタ値がD、ＳＰ値がE、SP_EL0レジスタ値がF、及びSP_EL1レジスタ値がGである。
【００８９】
従って、この例において、手順ＳＴ１１では、SPSR_EL1値BをPSTATEレジスタに書き込み、同時にELR_EL1値DをＰＣに書き込む。手順ＳＴ１２では、ＳＰ値Eを変更前実行状態に対応するSP_EL1レジスタに書き込む。手順ＳＴ１３では、変更後実行状態に対応するSP_EL0値FをＳＰに書き込む。
【００９０】
HARDOP_RETRY_POINT値には、手順ＳＴ１１の処理の完了時に１がセットされ、手順ＳＴ１３の処理の完了時に０がセットされる。例外復帰処理によるHARDOP_RETRY_POINT=1の状態でエラーが検出された場合には、手順ＳＴ１２と手順ＳＴ１３の処理が再実行される。本実施例の手順ＳＴ１２と手順ＳＴ１３は、手順ＳＴ１１と手順ＳＴ１２が更新する資源を参照しない処理であるため、エラー時に再実行しても同一結果が得られる。
【００９１】
本実施例において、例えばARMv8-Aアーキテクチャを用いる場合にspsel更新命令で実行される更新処理は、以下の手順ＳＴ２１〜ＳＴ２３で行われる。
【００９２】
手順ＳＴ２１では、命令指定の値をspselレジスタに書き込み、同時に後続命令アドレスをＰＣ１４４に書き込む。なお、本実施例において、特殊処理がspsel更新処理の場合の特殊処理開始時点とは、この手順ＳＴ２１が完了した時点である。
【００９３】
手順ＳＴ２２では、ＳＰの値を変更前spselレジスタに対応するSP_ELxレジスタに書き込む。
【００９４】
手順ＳＴ２３では、変更後spselレジスタに対応するSP_ELxレジスタの値をＳＰに書き込む。
【００９５】
spsel更新処理では、手順ＳＴ２１の完了を特殊処理開始、手順ＳＴ２３の完了を特殊処理完了として扱い、処理中にエラーした場合には手順ＳＴ２２から処理を再実行する。
【００９６】
図９は、spsel更新処理の動作の一例を説明する図である。図９は、currentEL=1且つspsel=1の状態でspsel更新命令が実行されてspsel=0に更新される場合の処理手順の動作例を示す。図９中、spselはspselレジスタ値、ＰＣはＰＣ値、ＳＰはＳＰ値、SP_EL0はSP_EL0レジスタ値、SP_EL1はSP_EL1レジスタ値、HARDOP_RETRY_POINTはHARDOP_RETRY_POINTレジスタ１２７の値（HARDOP_RETRY_POINTレジスタ値）を夫々示す。
【００９７】
spsel更新処理の開始時点での{PC,  SP,  SP_EL0,  SP_EL1}レジスタ値を夫々{A,B,C,D}とする。具体的には、ＰＣ値がA、ＳＰ値がB、SP_EL0レジスタ値がC、及びSP_EL1レジスタ値がDである。
【００９８】
従って、この例において、手順ＳＴ２１では、命令指定の値０をspselレジスタに書き込み、同時に後続命令アドレスA+4をＰＣに書き込む。手順ＳＴ２２では、ＳＰ値Bを変更前spselレジスタ値に対応するSP_EL1レジスタに書き込む。手順ＳＴ２３では、変更後spselレジスタ値に対応するSP_EL0値CをＳＰに書き込む。HARDOP_RETRY_POINT値には、手順ＳＴ２１の処理の完了時に１がセットされ、手順ＳＴ２３の処理の完了時に０がセットされる。spsel更新処理によるHARDOP_RETRY_POINT=1の状態でエラーが検出された場合には、手順ＳＴ２２と手順ＳＴ２３の処理が再実行される。本実施例の手順ＳＴ２２と手順ＳＴ２３は、手順ＳＴ２１と手順ＳＴ２２が更新する資源を参照しない処理であるため、エラー時に再実行しても同一結果が得られる。
【００９９】
上記の各実施例によれば、例外処理、例外復帰処理、spsel更新処理等の特殊処理を複数サイクルで実行する演算処理装置において、特殊処理中にエラーが検出された場合に特殊処理の種別に応じたリトライを行うことが可能となる。また、特殊処理中にエラーを検出した場合に、再実行することが可能な特殊処理の種別であれば、プログラムを異常終了させることなく命令実行を継続することができるので、演算処理装置の信頼性を向上することが可能となる。
【０１００】
以上の実施例を含む実施形態に関し、更に以下の付記を開示する。
（付記１）
プログラマブル資源に含まれる複数の資源を更新する特殊処理を複数サイクルで実行する演算処理装置であって、
特殊処理中であることを記録すると共に、命令実行中にエラーを検出するとエラー通知を行う命令実行回路と、
特殊処理の開始時点で特殊処理種別を記録すると共に、前記特殊処理中に前記エラー通知を受信した場合、記録されている特殊処理種別から当該特殊処理を再実行することが可能であるか否かを判断し、可能であると判断した場合には当該特殊処理を最初から再実行する特殊処理再実行を指示するリトライ制御回路と、
を備え、
前記命令実行回路は、前記リトライ制御回路からの前記特殊処理再実行の指示に基づき、前記特殊処理を再実行するリトライ処理を行うことを特徴とする、演算処理装置。
（付記２）
前記リトライ制御回路は、
前記リトライ処理が可能なタイミングであるか否かを判断するのに用いるフラグを格納し、命令完了以外のタイミングで資源更新が行われたときにリセットされ、命令完了のタイミングでセットされる第１のレジスタと、
前記リトライ処理を行うことが確定し、且つ、前記リトライ処理が完了していないことを示すフラグを格納し、前記エラーを検出したエラー検出タイミングで前記第１のレジスタがセットされており、且つ、前記第１のレジスタをリセットする条件が成立していない場合にセットされ、命令完了時と特殊処理開始のタイミングとでリセットされ、一命令再実行を前記命令実行回路に指示する第２のレジスタと、
前記特殊処理を再実行可能なタイミングであるか否かの判断に用いるフラグを格納し、前記特殊処理開始のタイミングでセットされ、特殊処理完了のタイミングでリセットされる第３のレジスタと、
前記特殊処理のリトライ処理を行うことが確定し、且つ、前記特殊処理のリトライ処理が完了していないことを示すフラグを格納し、前記エラー検出タイミングで前記第３のレジスタがセットされており、且つ、前記第３のレジスタをリセットする条件が成立していない場合にセットされ、前記特殊処理完了のタイミングでリセットされ、前記特殊処理再実行を前記命令実行回路に指示する第４のレジスタと、
前記特殊処理の開始時点で通知される前記特殊処理種別を記録する第１の記録回路とを有し、
前記第１の記録回路は、前記エラー検出タイミングで記録された特殊処理が再実行可能な処理である場合にのみ、前記第４のレジスタをセットし、前記特殊処理を再実行するときに当該特殊処理の処理種別である再実行特殊処理種別を前記命令実行回路に通知することを特徴とする、付記１記載の演算処理装置。
（付記３）
前記命令実行回路は、
前記特殊処理の開始時点で特殊処理開始と特殊処理種別を前記リトライ制御回路に通知し、
特殊処理完了を特殊処理以外の処理の命令と同じ命令完了で前記リトライ制御回路に通知し、
前記特殊処理再実行に応じて、前記プログラマブル資源の資源更新を行うことを特徴とする、付記１又は２記載の演算処理装置。
（付記４）
前記命令実行回路は、
命令をデコードする命令デコーダと、
特殊処理開始から特殊処理完了までの処理を行うための状態を制御する状態制御回路と、
前記命令デコーダから受信した命令情報が示す、デコードした命令の種別に基づき、前記特殊処理が必要な命令であるか否かを判断し、前記特殊処理が必要な種別の命令であると判断した場合、前記状態制御回路に特殊処理が必要であることを通知する判断回路と、
例外検出の通知、前記判断回路から特殊処理が必要な命令の種別、及び前記リトライ制御回路から再実行特殊処理種別を夫々受信し、特殊処理種別を特殊処理開始から特殊処理完了までの間記録する第２の記録回路と、
前記状態制御回路から特殊処理開始を通知されると、特殊処理手順番号に初期値を設定し、手順完了を通知されると特殊処理手順番号をインクリメントする手順制御回路と、
前記状態制御回路から特殊処理開始を通知されると、特殊処理を実行するのに用いる回路に特殊処理指示を、前記第２の記録回路から通知される特殊処理種別と、前記手順制御回路から通知される特殊処理手順番号に基づいて通知すると共に、特殊処理種別毎に予め決められている最後の特殊処理手順番号まで特殊処理指示を出力し終わると、特殊処理完了を前記状態制御回路と前記リトライ制御回路に通知する指示回路とを有し、
前記状態制御回路は、例外検出が通知された場合、前記判断回路が特殊処理が必要な種別の命令であると判断した場合、及び前記リトライ制御回路から特殊処理再実行の指示がある場合に、特殊処理状態に遷移し、前記特殊処理状態に遷移すると、特殊処理開始を前記手順制御回路、前記指示回路、及び前記リトライ制御回路に通知すると共に、前記指示回路から特殊処理完了の通知があると、特殊処理状態から遷移して、特殊処理以外の命令の処理状態に戻り、
前記判断回路は、前記第２の記録回路に特殊処理種別を通知し、
前記第２の記録回路は、記録されている特殊処理種別を前記指示回路と前記リトライ制御回路に通知し、
前記手順制御回路は、インクリメント後の特殊処理手順番号を前記指示回路に通知することを特徴とする、付記１乃至３のいずれか１項記載の演算処理装置。
（付記５）
前記命令実行回路が実行する前記特殊処理は、例外処理であり、
前記特殊処理の開始時点は、例外発生時の実行状態を前記プログラマブル資源に含まれる第１の特定記憶域に保存し、同時に前記プログラマブル資源に含まれるプログラムカウンタが示す例外の戻り先を前記プログラマブル資源に含まれる第２の特定記憶域に保存する手順が完了した時点であることを特徴とする、付記１乃至４のいずれか１項記載の演算処理装置。
（付記６）
前記命令実行回路が実行する前記特殊処理は、例外復帰処理であり、
前記特殊処理の開始時点は、前記プログラマブル資源に含まれる第１の特定記憶域の値を実行状態に書き込み、同時に前記プログラマブル資源に含まれる第２の特定記憶域の値を前記プログラマブル資源に含まれるプログラムカウンタに書き込む手順が完了した時点であることを特徴とする、付記１乃至４のいずれか１項記載の演算処理装置。
（付記７）
前記命令実行回路が実行する前記特殊処理は、前記プログラマブル資源に含まれるスタックポインタの選択値の更新処理であり、
前記特殊処理の開始時点は、命令指定の値を前記プログラマブル資源に含まれるレジスタに書き込み、同時に後続命令アドレスを前記プログラマブル資源に含まれるプログラムカウンタに書き込む手順が完了した時点であることを特徴とする、付記１乃至４のいずれか１項記載の演算処理装置。
（付記８）
プログラマブル資源に含まれる複数の資源を更新する特殊処理を複数サイクルで実行する演算処理装置の制御方法であって、
命令実行回路が、特殊処理中であることを記録し、
前記命令実行回路が、命令実行中にエラーを検出するとエラー通知を行い、
リトライ制御回路が、特殊処理の開始時点で特殊処理種別を記録すると共に、前記特殊処理中に前記エラー通知を受信した場合、記録されている特殊処理種別から当該特殊処理を再実行することが可能であるか否かを判断し、可能であると判断した場合には当該特殊処理を最初から再実行する特殊処理再実行を指示し、
前記命令実行回路が、前記リトライ制御回路からの前記特殊処理再実行の指示に基づき、前記特殊処理を再実行するリトライ処理を行うことを特徴とする、演算処理装置の制御方法。
（付記９）
前記リトライ制御回路が、
第１のレジスタに、前記リトライ処理が可能なタイミングであるか否かを判断するのに用いるフラグを格納し、前記第１のレジスタを、命令完了以外のタイミングで資源更新が行われたときにリセットし、命令完了のタイミングでセットし、
第２のレジスタに、前記リトライ処理を行うことが確定し、且つ、前記リトライ処理が完了していないことを示すフラグを格納し、前記第２のレジスタを、前記エラーを検出したエラー検出タイミングで前記第１のレジスタがセットされており、且つ、前記第１のレジスタをリセットする条件が成立していない場合にセットし、命令完了時と特殊処理開始のタイミングとでリセットして、一命令再実行を前記命令実行回路に指示し、
第３のレジスタに、前記特殊処理を再実行可能なタイミングであるか否かの判断に用いるフラグを格納し、前記第３のレジスタを、前記特殊処理開始のタイミングでセットし、特殊処理完了のタイミングでリセットし、
第４のレジスタに、特殊処理のリトライ処理を行うことが確定し、且つ、前記特殊処理のリトライ処理が完了していないことを示すフラグを格納し、前記第４のレジスタに、前記エラー検出タイミングで前記第３のレジスタがセットされており、且つ、前記第３のレジスタをリセットする条件が成立していない場合にセットし、前記特殊処理完了のタイミングでリセットして、前記特殊処理再実行を前記命令実行回路に指示し、
第１の記録回路に、前記特殊処理の開始時点で通知される前記特殊処理種別を記録し、
前記第１の記録回路が、前記エラー検出タイミングで記録された特殊処理が再実行可能な処理である場合にのみ、前記第４のレジスタをセットし、前記特殊処理を再実行するときに当該特殊処理の処理種別である再実行特殊処理種別を前記命令実行回路に通知することを特徴とする、付記８記載の演算処理装置の制御方法。
（付記１０）
前記命令実行回路が、
前記特殊処理の開始時点で特殊処理開始と特殊処理種別を前記リトライ制御回路に通知し、
特殊処理完了を特殊処理以外の処理の命令と同じ命令完了で前記リトライ制御回路に通知し、
前記特殊処理再実行に応じて、前記プログラマブル資源の資源更新を行うことを特徴とする、付記８又は９記載の演算処理装置の制御方法。
（付記１１）
前記命令実行回路が、
命令デコーダに命令をデコードさせ、
状態制御回路に特殊処理開始から特殊処理完了までの処理を行うための状態を制御させ、
判断回路に前記命令デコーダから受信した命令情報が示す、デコードした命令の種別に基づき、前記特殊処理が必要な命令であるか否かを判断し、前記特殊処理が必要な種別の命令であると判断した場合、前記状態制御回路に特殊処理が必要であることを通知させ、
第２の記録回路に例外検出の通知、前記判断回路から特殊処理が必要な命令の種別、及び前記リトライ制御回路から再実行特殊処理種別を夫々受信し、特殊処理種別を特殊処理開始から特殊処理完了までの間記録させ、
手順制御回路に前記状態制御回路から特殊処理開始を通知されると、特殊処理手順番号に初期値を設定し、手順完了を通知されると特殊処理手順番号をインクリメントさせ、
指示回路に前記状態制御回路から特殊処理開始を通知されると、特殊処理を実行するのに用いる回路に特殊処理指示を、前記第２の記録回路から通知される特殊処理種別と、前記手順制御回路から通知される特殊処理手順番号に基づいて通知すると共に、特殊処理種別毎に予め決められている最後の特殊処理手順番号まで特殊処理指示を出力し終わると、特殊処理完了を前記状態制御回路と前記リトライ制御回路に通知させ、
前記状態制御回路が、例外検出が通知された場合、前記判断回路が特殊処理が必要な種別の命令であると判断した場合、及び前記リトライ制御回路から特殊処理再実行の指示がある場合に、特殊処理状態に遷移し、前記特殊処理状態に遷移すると、特殊処理開始を前記手順制御回路、前記指示回路、及び前記リトライ制御回路に通知すると共に、前記指示回路から特殊処理完了の通知があると、特殊処理状態から遷移して、特殊処理以外の命令の処理状態に戻り、
前記判断回路が、前記第２の記録回路に特殊処理種別を通知し、
前記第２の記録回路が、記録されている特殊処理種別を前記指示回路と前記リトライ制御回路に通知し、
前記手順制御回路が、インクリメント後の特殊処理手順番号を前記指示回路に通知することを特徴とする、付記８乃至１０のいずれか１項記載の演算処理装置の制御方法。
（付記１２）
前記特殊処理は、例外処理、例外復帰処理、及び前記プログラマブル資源に含まれるスタックポインタの選択値の更新処理のいずれかであることを特徴とする、付記８乃至１１のいずれか１項記載の演算処理装置の制御方法。
（付記１３）
前記特殊処理は、例外処理であり、
前記特殊処理の開始時点は、例外発生時の実行状態を前記プログラマブル資源に含まれる第１の特定記憶域に保存し、同時に前記プログラマブル資源に含まれるプログラムカウンタが示す例外の戻り先を前記プログラマブル資源に含まれる第２の特定記憶域に保存する手順が完了した時点であることを特徴とする、付記８乃至１１のいずれか１項記載の演算処理装置の制御方法。
（付記１４）
前記特殊処理は、例外復帰処理であり、
前記特殊処理の開始時点は、前記プログラマブル資源に含まれる第１の特定記憶域の値を実行状態に書き込み、同時に前記プログラマブル資源に含まれる第２の特定記憶域の値を前記プログラマブル資源に含まれるプログラムカウンタに書き込む手順が完了した時点であることを特徴とする、付記８乃至１１のいずれか１項記載の演算処理装置の制御方法。
（付記１５）
前記特殊処理は、前記プログラマブル資源に含まれるスタックポインタの選択値の更新処理であり、
前記特殊処理の開始時点は、命令指定の値を前記プログラマブル資源に含まれるレジスタに書き込み、同時に後続命令アドレスを前記プログラマブル資源に含まれるプログラムカウンタに書き込む手順が完了した時点であることを特徴とする、付記８乃至１１のいずれか１項記載の演算処理装置の制御方法。
【０１０１】
以上、開示の演算処理装置及び演算処理装置の制御方法を実施例により説明したが、本発明は上記実施例に限定されるものではなく、本発明の範囲内で種々の変形及び改良が可能であることは言うまでもない。
【符号の説明】
【０１０２】
１      演算処理装置
１１      命令実行回路
１２      リトライ制御回路
１３      実行状態制御回路
１４      プログラマブル資源
３１      命令フェッチアドレス生成器
３２      １次命令キャッシュメモリ
３３      命令バッファ
３４      命令デコーダ
３５      ＲＳＡ
３６      オペランドアドレス生成器
３７      １次データキャッシュメモリ
３８      ＲＳＥ
３９      固定小数点演算器
４０      浮動小数点演算器
４１      ＲＳＢＲ
４２      ＣＳＥ
４３      特殊処理制御部
４４      分岐予測機構
５０      演算処理システム
５１−１〜５１−Ｎ      ノード
５２      ＣＰＵ
５３      メモリ
１２２      RETRY_POINTレジスタ
１２３      RETRY_TGRレジスタ
１２７      HARDOP_RETRY_POINTレジスタ
１２８      HARDOP_RETRY_TGRレジスタ
１２９      記録回路
１４１      固定小数点物理レジスタ
１４２      浮動小数点物理レジスタ
１４３      システムレジスタ
１４４      ＰＣ
４３１      判断回路
４３２      状態制御回路
４３３      記録回路
４３４      手順制御回路
４３５      指示回路
５２１−１〜５２１−Ｍ      ＣＰＵコア
【図１】
2020086897.tif 000003
【図２】
2020086897.tif 000004
【図３】
2020086897.tif 000005
【図４】
2020086897.tif 000006
【図５】
2020086897.tif 000007
【図６】
2020086897.tif 000008
【図７】
2020086897.tif 000009
【図８】
2020086897.tif 000010
【図９】
2020086897.tif 000011