(57)【特許請求の範囲】
【請求項１】
命令シーケンスを記憶した命令記憶手段と、
上記命令記憶手段から読み出して実行した命令で例外が発生したときに、その例外起因命令の命令語を保持する例外命令語保持手段と、
上記命令記憶手段から読み出される命令語と、上記例外命令語保持手段から読み出される命令語との何れかを選択する選択手段と、
上記例外起因命令の再実行命令が供給されたときには、上記例外命令語保持手段から読み出される上記例外起因命令の命令語を選択するように上記選択手段を制御する制御手段とを備えたことを特徴とする情報処理装置。
【請求項２】
命令シーケンスを記憶した命令記憶手段と、
上記命令記憶手段から読み出して実行した命令で例外が発生したときに、その例外起因命令の命令アドレスを保持する例外命令アドレス保持手段と、
上記命令記憶手段から命令語を読み出すための命令アドレスとして、プログラム・カウンタから読み出される命令アドレスと、上記例外命令アドレス保持手段から読み出される命令アドレスとの何れかを選択する選択手段と、
上記例外起因命令の再実行命令が供給されたときには、上記例外命令アドレス保持手段から読み出される上記例外起因命令の命令アドレスを選択するように上記選択手段を制御する制御手段とを備えたことを特徴とする情報処理装置。
【請求項３】
命令記憶手段に記憶された例外回復処理のための命令シーケンス中に例外起因命令の再実行命令を持たせておき、
上記命令記憶手段から読み出して実行した命令で例外が発生したときに、その例外起因命令の命令語を保持するステップと、
上記例外起因命令の再実行命令が上記命令記憶手段から供給されたときに、実行する命令語として、上記例外の発生時に保持しておいた上記例外起因命令の命令語を選択するステップとを有することを特徴とする例外回復処理方法。
【請求項４】
命令記憶手段に記憶された例外回復処理のための命令シーケンス中に例外起因命令の再実行命令を持たせておき、
上記命令記憶手段から読み出して実行した命令で例外が発生したときに、その例外起因命令の命令アドレスを保持するステップと、
上記例外起因命令の再実行命令が上記命令記憶手段から供給されたときに、上記命令記憶手段から命令語を読み出すための命令アドレスとして、上記例外の発生時に保持しておいた上記例外起因命令の命令アドレスを選択するステップとを有することを特徴とする例外回復処理方法。
【請求項５】
命令シーケンスを記憶した命令記憶手段から読み出して実行した命令で例外が発生したときに、その例外起因命令の命令語をレジスタに保存する例外命令語保存手段と、
上記命令記憶手段から読み出される命令語と、上記レジスタから読み出される命令語との何れかを選択する選択手段と、
上記例外起因命令の再実行命令が供給されたときには、上記レジスタから読み出される上記例外起因命令の命令語を選択するように上記選択手段を制御する制御手段として計算機を機能させるためのプログラムを記録したことを特徴とする計算機読み取り可能な記録媒体。
【請求項６】
命令シーケンスを記憶した命令記憶手段から読み出して実行した命令で例外が発生したときに、その例外起因命令の命令アドレスをレジスタに保存する例外命令アドレス保存手段と、
上記命令記憶手段から命令語を読み出すための命令アドレスとして、プログラム・カウンタから読み出される命令アドレスと、上記レジスタから読み出される命令アドレスとの何れかを選択する選択手段と、
上記例外起因命令の再実行命令が供給されたときには、上記レジスタから読み出される上記例外起因命令の命令アドレスを選択するように上記選択手段を制御する制御手段として計算機を機能させるためのプログラムを記録したことを特徴とする計算機読み取り可能な記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は情報処理装置、例外回復処理方法および記録媒体に関し、特に、通常の処理の最中に発生した誤りや例外的な条件に対処するための例外回復処理の動作を制御する装置および方法に用いて好適なものである。
【０００２】
【従来の技術】
現在の計算機システムには、プログラムを実行する上で何らかの誤りが発生した場合、あるいは例外的な条件に合致したような場合、本来のプログラムとは別の処理を行い、発生した問題を解消してから本来のプログラムに戻って処理を続行するという機能が備えられている。一般に、誤りが発生したこと等を例外が発生したと言い、問題解消のための処理を例外回復処理と言う。
【０００３】
通常の処理の最中に例外が発生すると、本来のプログラムとは別の例外ハンドラと呼ばれる処理プログラムにプロセッサの制御が移る。例外ハンドラの中では、例外の原因となった問題を処理して解消し、その後本来のプログラムを再開するというような例外回復の処理を行う。
【０００４】
図７は、従来の例外ハンドラの動作を示すフローチャートである。通常の処理の最中に例外が発生すると、プロセッサは、例外発生時のプログラムカウンタの値、プロセッサの状態、発生した例外の要因等の情報をレジスタに書き込むことにより、例外発生前のプロセッサの動作情報を退避させる。そして、プロセッサはユーザ状態からスーパバイザ状態（特権状態）に遷移し、通常のアプリケーション・プログラムから図７のような例外ハンドラに処理を移行する。
【０００５】
図７において、ステップＳ２１では、例外発生時にレジスタに記憶した例外発生の要因等の情報をもとに、例外要因を解消する処理を行う。そして、例外要因の解消が完了すると、ステップＳ２２に進み、例外発生時にレジスタに退避しておいたプログラムカウンタの値をもとに、通常のアプリケーション・プログラム上で例外が発生した元の命令（例外起因命令）に復帰する。
【０００６】
例えば、図８に示すプログラム中のロード命令（2: ld ）でＭＭＵ（Memory Management Unit）のメモリアクセスに関する例外が発生したとする。この場合は、このプログラム中のロード命令（2: ld ）から例外ハンドラの処理プログラムに移って図７のような処理を行う。そして、例外発生の要因となった問題を解消したら、例外起因命令である元のロード命令（2: ld ）に戻って元のプログラムの処理を再開することにより、例外からの回復を実現する。
【０００７】
また、近年におけるプロセッサのマイクロアーキテクチャでは、プロセッサの処理性能の向上を図るために、時間方向の並列化（例えばパイプライン方式）や、空間方向の並列化（例えばスーパースカラプロセッサ）といった手法を採用することが行われる。図９に、上記図８のプログラムをパイプライン動作させた場合の処理の様子を示す。
【０００８】
上記パイプライン動作を表す図９の例において、D は命令デコードのステージ、E は演算実行のステージ、C はメモリアクセスのステージ、W はレジスタへの書き込みのステージを意味する。上記図９の例では、１つの命令のデコード処理が終了した時点で次の命令のデコード処理を直ちに開始することにより、パイプライン動作を実現している。
【０００９】
【発明が解決しようとする課題】
プロセッサがパイプライン動作を行っている場合、１つの命令を実行してその結果をレジスタに書き込むまでの時間が各命令ごとに異なっていると、命令の完了順序がプログラム順となるように保証することは難しくなる。すなわち、図９の例では、２行目のロード命令（2: ld ）はその処理に DECCWの５ステージ必要であるのに対し、３行目の減算命令（3: sub）は DEWの３ステージで処理が終了し、ロード命令の方が長い処理時間を必要とする。そのため、２行目のロード命令よりも３行目の減算命令の方が早く処理が完了することとなる。
【００１０】
このようなパイプライン動作をしている際に、例えば２行目のロード命令（2: ld ）中の書き込みステージで例外が発生したとする。この場合、例外起因命令であるロード命令の次の減算命令（3: sub）については、例外が発生する前の時点でレジスタへの書き込みが終わっており、当該減算命令の実行が既に完了している。この場合に、図７に示したフローに従って例外回復処理を行うと、例外回復処理から復帰したロード命令（2: ld ）の処理後に、既に完了している減算命令（3: sub）を再び実行してしまうことになる。
【００１１】
このような不都合を解消するために、パイプライン動作を行っていてもプログラム上の完了順序を保証するような機構をハードウェアで実現することが考えられる。例えば、処理の結果が早く出てくる命令については実行開始のタイミングを遅らせるなどの手法を採用することにより、命令完了順序がプログラム順となることを保証することが可能となり、例外回復処理からの復帰時に既に実行済の命令を再実行してしまう不都合を防止することができる。
【００１２】
しかしながら、このような手法では、命令の実行サイクル数を増やすことになるため、プロセッサの性能面でペナルティとなる。また、命令の完了順序を保証するためにハードウェア的な機構を設けると、例外回復のための機構が複雑になり、回路規模の増大を招いてしまう。一般に例外の発生頻度は低いため、例外回復機構に過剰なハードウェア資源を投入するのは不経済である。したがって、高性能が求められる現在のプロセッサでは、各命令の完了順序をハードウェアで保証することは行わないことが多い。
【００１３】
これに対し、例外回復処理からの復帰時に既に実行済の命令を再実行してしまう不都合をソフトウェアの機能により防止するようにしたものが提案されている。これは、上記図９の例で言えば、例外回復処理から正しく復帰するために、例外が発生した２行目のロード命令（2: ld ）に関して例外の要因を除去した後、元のプログラムに復帰してロード命令（2: ld ）を実行し、その後、既に実行済である３行目の減算命令（3: sub）は飛ばして４行目の加算命令（4: add）から処理を再開させるものである。
【００１４】
図１０は、プログラム順に命令が完了しない場合の例外ハンドラの動作を示すフローチャートである。この場合は、通常の処理の最中に例外が発生すると、プロセッサは、例外発生時のプログラムカウンタの値、例外起因命令より後で最初にくる実行未完了の命令（図９の例では、４行目の加算命令（4: add））のアドレス、プロセッサの状態、発生した例外の要因等の情報をレジスタに書き込むことにより、例外発生前のプロセッサの動作情報を退避させる。そして、プロセッサはユーザ状態からスーパバイザ状態に遷移し、通常のアプリケーション・プログラムから図１０のような例外ハンドラに処理を移行する。
【００１５】
図１０において、ステップＳ３１では、例外発生時にレジスタに記憶した例外発生の要因等の情報をもとに、例外要因を解消する処理を行う。そして、例外要因の解消が完了すると、ステップＳ３２に進み、例外発生時にレジスタに退避しておいたプログラムカウンタの値をもとに、例外起因命令をメモリ上から読み出して実行する。その後、ステップＳ３３に進み、例外発生時にレジスタに退避しておいた実行未完了命令のアドレスをもとに、未完了の命令から元のアプリケーション・プログラムの処理に復帰する。
【００１６】
このように、例外回復処理から復帰する際には、例外の要因を除去した後に、元のプログラムの処理を再開する前に何らかの方法で例外起因命令だけを実行させる処理を行う必要がある。従来、これを実現するために、以下のような方法を採用してきた。
(1) 実行する例外起因命令を解析し、あらかじめ用意した複数の命令列により命令をエミュレーションする方法。
(2) 例外ハンドラの命令シーケンスの中に命令を差し替えるための領域を用意しておき、そこに実行したい例外起因命令をコピーし、コピーした命令を実行することによって例外起因命令を実行するという自己改変コードによる方法。
【００１７】
図１１は、命令のエミュレーションにより単一の例外起因命令を再実行させる処理を示すフローチャートである。図１１において、ステップＳ４１では、例外発生時に退避しておいたプログラムカウンタの値をもとに、例外起因命令をメモリ上から取得する。そして、ステップＳ４２で、その取得した例外起因命令を解析し、その解析結果に応じてステップＳ４３-1〜Ｓ４３-nの何れかのエミュレーションの処理を実行する。
【００１８】
例えば、ステップＳ４３-1の処理は、メモリ上からレジスタにデータを１バイト読み込む処理を示す。また、ステップＳ４３-2の処理は、メモリ上からレジスタにデータを２バイト読み込む処理を示し、ステップＳ４３-3の処理は、メモリ上からレジスタにデータを４バイト読み込む処理を示す。なお、この図１１では、各命令別のエミュレーションの例として、データのロード命令およびストア命令のみを示しているが、実際には加減算、乗除算などの演算命令なども用意されており、命令語の解析結果に応じて適切なものが選ばれて実行される。
【００１９】
図１２は、自己改変コードにより単一の例外起因命令を再実行させる処理を示すフローチャートである。図１２において、ステップＳ５１では、例外発生時に退避しておいたプログラムカウンタの値をもとに、例外起因命令をメモリ上から取得する。そして、ステップＳ５２で、その取得した例外起因命令を、メモリ上に例外ハンドラとは別にあらかじめ用意された記憶領域にロード・ストア命令を使ってコピーする。
【００２０】
次に、ステップＳ５３では、キャッシュメモリのフラッシュおよび無効化の処理を行う。キャッシュのフラッシュとは、データ用キャッシュメモリに格納されているデータをメインメモリ上に反映する処理を言い、キャッシュの無効化とは、命令用キャッシュメモリに格納されている命令を無効にする処理を言う。
【００２１】
このようなキャッシュのフラッシュおよび無効化の処理を行うことにより、メインメモリ上の記憶領域にコピーを行う前の命令がキャッシュメモリから読み出されて実行されることを防ぎ、コピーした例外起因命令を上記メインメモリの記憶領域から読み出して実行することが可能となる。
【００２２】
上記ステップＳ５３の処理後のステップＳ５４では、例外起因命令のコピー先の記憶領域に処理を移し、ステップＳ５５でその例外起因命令を実行する。上記コピー先の記憶領域においては、この例外起因命令の直後には復帰命令が記憶されており、例外起因命令の実行後には、ステップＳ５６で元の例外ハンドラの処理に直ちに戻る。これにより、図１０のステップＳ３３へと処理が進み、既に実行済の命令は飛ばして実行未完了の命令から処理が再開する。
【００２３】
しかしながら、命令をエミュレーションする方法では、命令を解析してエミュレーションするためには多くの命令が必要であり、そのため例外回復の実行時間が長くなってしてしまうとともに、コードサイズが大きくなってしまうという問題があった。また、例外を発生する全ての命令をエミュレーションできるようにしなければならないため、例外ハンドラのコードサイズが膨大になってしまうという問題もあった。
【００２４】
また、自己改変コードを用いる方法では、現在の計算機システムの多くはキャッシュメモリを用いているため、自己改変コードを用いるためにはキャッシュのフラッシュおよび無効化の操作が必要となる。しかし、これらの処理には多くの実行時間を必要とするため、例外回復の処理速度が低下してしまうという問題があった。また、キャッシュの無効化を行うと、元のプログラムシーケンスでキャッシュされている命令も無効にされてしまうため、元のプログラムを実行する際のキャッシュ性能が低下してしまい、全体としての処理速度も低下してしまうという問題があった。
【００２５】
本発明は、パイプライン動作を行うプロセッサを用いた計算機システムにおいて、特に各命令の完了がプログラムの実行順序とは異なる場合に、正しい例外回復の処理をハードウェアで実現しようとすると回路規模の増大や動作周波数向上の阻害要因を招き、ソフトウェアで実現しようとすると処理速度が低下するという従来の問題を解決するために成されたものであり、少ないハードウェアで例外回復の処理速度の向上を図ることを目的とする。
【００２６】
【課題を解決するための手段】
本発明の情報処理装置は、例外が発生したときに、その例外起因命令の命令語および例外が発生したことにより実行が途中で中断された実行未完了命令の少なくとも一方の命令語あるいは命令アドレスを保持する手段を備える。さらに、例外回復処理から通常の処理に復帰する際の処理として、例外起因命令や実行未完了命令の再実行が必要になったときに、再実行命令を実行することにより、例外発生時に保持しておいた命令語、あるいは保持しておいた命令アドレスに存在する命令語に従って処理を実行する手段を備える。
また、上記再実行命令は、例外回復処理のための命令シーケンス中に含まれるようにしても良い。
【００２７】
本発明は上記技術手段より成るので、例外回復処理から通常の処理に復帰する際に必要な再実行のための処理を、１つの再実行命令を実行するだけで実現することが可能となり、各命令別のエミュレーションをあらかじめ用意しておき、命令語を解釈して何れかのエミュレーションを選択的に実行したり、キャッシュのフラッシュおよび無効化の操作を実行したりするなどの複雑な処理は必要がなくなる。
【００２８】
また、本発明の他の特徴によれば、例外起因命令を再実行するにあたって、例外回復処理の命令シーケンス通りに命令を順次処理し、その中に書かれた再実行命令を単に実行すれば良いので、再実行する例外起因命令が格納された別の記憶領域のアドレス値にプログラム・カウンタの値を書き換える必要がなく、また、当該別領域へのアクセスを行うことなく例外起因命令を再実行することが可能となる。
【００２９】
【発明の実施の形態】
以下に、本発明の一実施形態を図面に基づいて説明する。
（第１の実施形態）
図１は、第１の実施形態による例外回復処理方法を適用したプロセッサ（情報処理装置）の一構成例を示すブロック図である。
図１において、１０はメモリであり、アプリケーション・プログラムや例外ハンドラ等のプログラムを格納している。２０は命令フェッチ部、３０は命令解析実行制御部、４０はＡＬＵ（演算論理装置）等の命令実行部、５０はレジスタ部である。
【００３０】
上記命令フェッチ部２０は、プログラム・カウンタ２１と、命令レジスタ２２と、セレクタ２３とを備える。この命令フェッチ部２０は、例外が発生していない通常処理および例外回復処理の実行中では、プログラム・カウンタ２１が示す命令アドレスに基づいてメモリ１０から命令語を１つずつ読み出し、それをセレクタ２３を介して命令レジスタ２２に一旦格納した後、命令解析実行制御部３０に供給する。一方、例外回復処理から元の通常処理に復帰する際には、レジスタ部５０から供給される例外起因命令の命令語をセレクタ２３で選択し、それを命令レジスタ２２を解して命令解析実行制御部３０に供給する。
【００３１】
命令フェッチ部２０は、命令解析実行制御部３０より分岐先の命令アドレスが供給されたとき、あるいは例外発生に対応して例外ハンドラの先頭アドレスが供給されたときには、その供給された命令アドレスをプログラム・カウンタ２１に書き込む。それ以外の場合は、次の命令語を順次読み出すべくプログラム・カウンタ２１の値をインクリメントする。
【００３２】
命令解析実行制御部３０は、命令フェッチ部２０から供給された命令語の解析を行うデコーダ３１と、命令語の解析結果に応じて例外回復処理を制御する例外処理制御部３２と、同じく命令語の解析結果に応じて命令実行部４０を制御する実行制御部３３とを備える。このうち、実行制御部３３は、命令フェッチ部２０から供給されデコーダ３１で解析された命令語の指示に従って命令実行部４０を制御し、演算、分岐、データのロード／ストア等の各種処理を実行する。
【００３３】
例えば、供給された命令語が演算命令であったときは、命令実行部４０は実行制御部３３からの制御に基づき、指定されたアドレスに従ってメモリ１０から読み出したデータ値、あるいはレジスタ部５０内の図示しない汎用レジスタから読み出したデータ値に基づいて演算を実行する。また、供給された命令語が分岐命令であって、分岐条件が成立したときには、実行制御部３３は、分岐先の命令アドレスを命令フェッチ部２０に供給する。
【００３４】
また、供給された命令語がロード命令あるいはストア命令であったときには、実行制御部３３は命令実行部４０を制御し、メモリ１０上の指定されたアドレスに対応した記憶領域に対して、データの読み出し、あるいはデータ（レジスタ部５０内の図示しない汎用レジスタのデータ等）の書き込みを行う。
【００３５】
また、例外処理制御部３２は、上記命令実行部４０での演算実行の過程で何らかの問題等（例えば、ゼロによる除算、データオーバーフロー等のエラー）が発生すると、その通知を受けて命令フェッチ部２０、命令実行部４０、レジスタ５０を制御し、例外回復処理を実行する。
【００３６】
すなわち、例外処理制御部３２は、例外発生を検出すると、検出した例外の内容に対応する例外ハンドラの先頭アドレスを命令フェッチ部２０に供給し、そのアドレスをプログラム・カウンタ２１にセットする。また、命令キャンセル等の指示を命令実行部４０に発行するとともに、レジスタ部５０内の各レジスタ５１〜５４に以下に述べる情報を書き込む処理を行う。その後、プロセッサはユーザ状態からスーパバイザ状態に遷移し、プログラム・カウンタ２１にセットされた例外ハンドラの命令アドレスに従って例外回復処理を実行する。
【００３７】
上記レジスタ部５０は、命令実行部４０の演算などに使用するデータを保持する図示しない汎用レジスタと、以下に述べる例外回復処理に使用するデータを保持するレジスタ５１〜５４とを含み、命令フェッチ部２０、命令解析実行制御部３０、命令実行部４０からこれらのレジスタに対してデータの読み出しあるいは書き込みが行われる。なお、命令実行部４０とレジスタ部５０との間のデータのやり取りは一般的なものであるため、ここでは図示を省略している。以下に、例外回復処理用のレジスタ５１〜５４について説明する。
【００３８】
例外命令語レジスタ５１は、例外が発生したときに、その例外起因命令の命令語を保持するためのレジスタである。状態レジスタ５２は、例外発生前のプロセッサの状態（ユーザ状態、スーパバイザ状態など）を保持するレジスタである。要因レジスタ５３は、発生した例外の要因を保持するレジスタである。また、復帰アドレスレジスタ５４は、例外回復処理から復帰する元のプログラム中の命令アドレスを保持するレジスタであり、例外起因命令より後で最初にくる実行未完了命令のアドレスがここに格納される。これらのレジスタ５１〜５４の値は何れも例外発生時に設定される。
【００３９】
また、上記例外処理制御部３２は、例外回復処理の実行中は、順次インクリメントされるプログラム・カウンタ２１に従ってメモリ１０から読み出され、デコーダ３１で解釈された例外ハンドラの命令が、例外ハンドラの途中（例外の回復処理が終了する部分）に組み込まれた本実施形態に特有の命令再実行命令（以下では、これをＲＥＩ命令と称する）かどうかを判断する。
【００４０】
そして、メモリ１０から読み出された命令がＲＥＩ命令であると判断したときは、命令フェッチ部２０内のセレクタ２３の選択状態をＡ側に切り替えることにより、例外命令語レジスタ５１から読み出した例外起因命令を選択するように制御する。この例外起因命令を実行した後は、セレクタ２３の選択状態をＢ側に戻すことにより、例外ハンドラの残りの処理（元のプログラムへの復帰処理）を実行する。
【００４１】
すなわち、上記例外起因命令を実行した後に例外処理制御部３２は、状態レジスタ５２の値に基づいてプロセッサの状態を元のユーザ状態に遷移させるとともに、例外回復処理から復帰する元のプログラム中の命令アドレスを復帰アドレスレジスタ５４から読み出し、命令フェッチ部２０のプログラム・カウンタ２１にセットする。これにより命令フェッチ部２０は、プログラム・カウンタ２１にセットされた命令アドレスに基づいて、元のプログラムの命令語をメモリ１０から順次読み出し、命令解析実行制御部３０で実行することになる。
【００４２】
次に、図１に示すプロセッサの動作を、図９に示すようにプログラムをパイプライン動作させた場合を例にとって説明する。
例外が発生していないユーザ状態にあるとき、命令フェッチ部２０は、プログラム・カウンタ２１により示される命令アドレスに基づき、メモリ１０からプログラムの命令語を読み出し、読み出した命令語をセレクタ２３および命令レジスタ２２を介して命令解析実行制御部３０に供給する。
【００４３】
命令解析実行制御部３０は、供給された命令語をデコーダ３１で解釈し、その命令の指示に従って実行制御部３３が命令実行部４０を制御することによって、プログラムの処理を実行する。このユーザ状態で例外が発生しなければ、プロセッサは以上の動作をパイプライン処理により繰り返し行う。しかし、命令解析実行制御部３０が例外の発生を検出すると、命令解析実行制御部３０内の例外処理制御部３２は、命令フェッチ部２０およびレジスタ部５０を制御して以下のような例外回復処理を行う。
【００４４】
まず、例外処理制御部３２は、例外が発生したときの例外起因命令を例外命令語レジスタ５１に格納する。図９の例では、２行目のロード命令（2: ld ）で例外が発生しているため、このロード命令の命令語を例外起因命令として例外命令語レジスタ５１に格納する。また、例外処理制御部３２は、例外発生前のプロセッサの状態を状態レジスタ５２に格納するとともに、発生した例外の要因を要因レジスタ５３に格納する。
【００４５】
さらに、例外処理制御部３２は、例外回復処理から復帰する元のプログラム中の命令アドレスとして、例外起因命令より後で最初にくる実行未完了命令のアドレスを復帰アドレスレジスタ５４に格納する。図９の例では、２行目のロード命令（2: ld ）の書き込みステージで例外が発生したときに、次の３行目の減算命令（3: sub）は既に実行が完了しており、更にその次の４行目の加算命令（4: add）はまだ処理を完了していない。したがって、この４行目の加算命令のアドレスを復帰アドレスレジスタ５４に格納する。
【００４６】
次に、例外処理制御部３２は、発生した例外に対応する例外ハンドラの先頭アドレスを命令フェッチ部２０に供給し、その値をプログラム・カウンタ２１にセットする。以上の処理を経て、プロセッサはユーザ状態からスーパバイザ状態に遷移する。スーパバイザ状態に遷移したプロセッサは、プログラム・カウンタ２１にセットされた例外ハンドラの先頭アドレスに従って、当該例外ハンドラの命令語を命令フェッチ部２０に読み出し、読み出した命令語をセレクタ２３および命令レジスタ２２を介して命令解析実行制御部３０に供給する。
【００４７】
命令解析実行制御部３０は、例外ハンドラの処理途中でＲＥＩ命令が発生しない限り、例外ハンドラの最終アドレスに向かって順次供給される命令語を実行するという動作を繰り返す。しかし、この例外ハンドラの動作中に、例外要因の解消が終わってメモリ１０からＲＥＩ命令が読み出されると、例外処理制御部３２はそのＲＥＩ命令を実行するように制御する。
【００４８】
すなわち、例外処理制御部３２は、セレクタ２３の選択状態をＢ側からＡ側に切り替えることにより、例外発生時に例外命令語レジスタ５１に保持しておいた例外起因命令（ロード命令（2: ld ））をセレクタ２３で選択し、それを命令レジスタ２２を介して命令解析実行制御部３０に供給するようにする。これにより、命令実行部４０は、供給された例外起因命令を命令解析実行制御部３０の制御に基づき実行する。
【００４９】
そして、このようにＲＥＩ命令に基づき例外起因命令を実行した後は、例外処理制御部３２は、セレクタ２３の選択状態をＢ側に戻すことにより、例外ハンドラの残りの処理（ユーザ状態への復帰処理）を実行するようにする。つまり、上記例外起因命令の処理が完了すると、命令解析実行制御部３０は、メモリ１０から読み出される例外ハンドラの例外復帰命令を実行する。
【００５０】
このとき命令解析実行制御部３０は、例外回復処理から復帰する元のプログラム中の命令アドレス（加算命令（4: add））を復帰アドレスレジスタ５４から読み出し、それをプログラム・カウンタ２１にセットする。命令フェッチ部２０は、プログラム・カウンタ２１にセットされた命令アドレスに基づいて、通常動作時の命令語をメモリ１０から読み出し、命令解析実行制御部３０に供給する。これにより、プロセッサはスーパバイザ状態からユーザ状態に遷移し、命令実行部４０が通常動作に対応したプログラムの残りの処理を実行することになる。
【００５１】
このような動作により、例外の発生に対応して例外ハンドラで例外の回復を行った後に、１つの例外起因命令（ロード命令（2: ld ））だけを実行し、既に実行済の減算命令（3: sub）は飛ばして次の未実行の加算命令（4: add）から処理を再開することができるようになる。すなわち、図１０に示したフローチャートのように、ステップＳ３１で例外要因を解消した後、ステップＳ３２で例外起因命令だけを実行し、ステップＳ３３で未完了の命令から元のプログラムの処理に復帰することが可能となる。
【００５２】
図２は、上記ステップＳ３２で単一の例外起因命令を再実行させる本実施形態の処理を示すフローチャートである。図２に示すように、本実施形態では、例外ハンドラの先頭アドレスから順次インクリメントされるプログラム・カウンタ２１の値に従ってＲＥＩ命令がメモリ１０から読み出されたときに、そのＲＥＩ命令をステップＳ１で実行するだけで良い。
【００５３】
以上詳しく説明したように、本実施形態によれば、例外ハンドラから元のプログラムの処理に復帰する際に例外起因命令だけを実行するための処理を、例外ハンドラの中に組み込んだ１つのＲＥＩ命令を実行するだけで実現することができる。これにより、図１１に示したように各命令別のエミュレーションをあらかじめ用意しておき、命令語を解釈して何れかのエミュレーションを選択的に実行したり、図１２に示したようにキャッシュのフラッシュおよび無効化の操作を実行したりする必要がなくなる。
【００５４】
また、本実施形態では、例外起因命令を再実行するにあたって、例外ハンドラのシーケンス通りに命令を順次処理し、その中に書かれたＲＥＩ命令を単に実行すれば良いので、図１２のフローチャートのように、再実行する例外起因命令をコピーしたメモリ１０上の別領域のアドレス値にプログラム・カウンタ２１の値を書き換える必要がなく、また、当該別領域へのアクセスを行うことなく例外起因命令を再実行することができる。
【００５５】
これにより、従来に比べて極めて簡単な処理で例外起因命令の再実行を実現することができ、例外回復の処理速度を向上させることができるとともに、例外ハンドラのコードサイズを小さくすることができる。
【００５６】
さらに、プログラム・カウンタ２１の値を再実行する命令のアドレスに書き換えていないため、ＲＥＩ命令に基づき例外起因命令の動作が完了した後は、そのＲＥＩ命令の次に記述された命令を続いて行えば良く、元のプログラムの実行の継続性を維持することができる。また、キャッシュの無効化も不要であるため、元のプログラムを実行する際のキャッシュ性能の低下を防止することもできる。
【００５７】
また、本実施形態によれば、上記ＲＥＩ命令に基づき例外起因命令だけを実行する機能は、例外命令語レジスタ５１およびセレクタ２３という少ないハードウェア資源を追加するだけで実現することができる。また、制御的にも、例外発生時における上記例外命令語レジスタ５１への例外起因命令の書き込み、ＲＥＩ命令実行時における上記例外命令語レジスタ５１からの例外起因命令の読み出しおよび命令フェッチ部２０への転送という少ない手順を追加するだけで良い。
【００５８】
（第２の実施形態）
図３は、第２の実施形態による例外回復処理方法を適用したプロセッサ（情報処理装置）の一構成例を示すブロック図である。なお、図３において、図１に示した符号と同一の符号を付したものは、同一の機能を有するものであるので、これについての詳細な説明は省略する。
【００５９】
図３に示すように、第２の実施形態では、図１に示す第１の実施形態で用いていた例外命令語レジスタ５１の代わりに、例外が発生した例外起因命令の命令アドレスを保持するための例外命令アドレスレジスタ５５を設ける。また、命令語の選択を行うセレクタ２３の代わりに、命令アドレスの選択を行うセレクタ２４を設ける。セレクタ２４は、例外ハンドラの中でＲＥＩ命令が実行されるとき以外はＢ側を選択し、ＲＥＩ命令の実行時にはＡ側を選択する。
【００６０】
本実施形態において、命令解析実行制御部３０により例外の発生が検出されたときは、例外処理制御部３２からの通知に基づいて、命令フェッチ部２０が例外起因命令の命令アドレス（例外発生時にプログラム・カウンタ２１にセットされていた値）を例外命令アドレスレジスタ５５に格納する。その後、例外処理制御部３２から供給され、プログラム・カウンタ２１に新たにセットされた例外ハンドラの命令アドレスに従い、例外処理制御部３２が例外回復処理を実行する。
【００６１】
また、本実施形態において、例外ハンドラの動作中に、例外要因の解消が終わってメモリ１０からＲＥＩ命令が読み出されると、例外処理制御部３２は、セレクタ２４の選択状態をＢ側からＡ側に切り替える。これにより、例外発生時に例外命令アドレスレジスタ５５に保持しておいた例外起因命令の命令アドレスをメモリ１０に供給し、対応するアドレスから例外起因命令の命令語を読み出して命令フェッチ部２０に供給するようにする。
【００６２】
そして、命令フェッチ部２０は、メモリ１０から読み出された例外起因命令の命令語を命令解析実行制御部３０に供給する。これにより、命令解析実行制御部３０は、命令実行部４０を制御して上記供給された例外起因命令を実行する。そして、この例外起因命令を実行した後は、例外処理制御部３２は、セレクタ２４の選択状態をＢ側に戻すことにより、例外ハンドラの残りの処理（ユーザ状態への復帰処理）を実行するようにする。
【００６３】
このように構成した第２の実施形態においても、第１の実施形態と同様の効果を得ることができる。
【００６４】
（第３の実施形態）
図４は、第３の実施形態による例外回復処理方法を適用したプロセッサの一構成例を示すブロック図である。なお、図４において、図１に示した符号と同一の符号を付したものは、同一の機能を有するものであるので、これについての詳細な説明は省略する。
【００６５】
図４に示すように、第３の実施形態では、図１に示す第１の実施形態で用いていた例外命令語レジスタ５１の代わりに、例外が発生した例外起因命令の命令語に加え、例外が発生したことにより実行が最後まで完了しなかった実行未完了命令の命令語を保持するための命令語レジスタ５６を設ける。
【００６６】
このように構成した第３の実施形態は、例えば、図５に示すようにパイプライン動作を行っている場合に有効である。すなわち、近年のプロセッサでは、処理の更なる高速化を図るために、図５のように複数の命令を同時に実行することが多い。この図５の例では、２つの命令を同時に実行している。
【００６７】
このようなパイプライン動作を行った場合、１つの命令を実行してその結果が出るまでの時間が各命令ごとに異なっていると、例外が発生したときに、実行が完了していない命令と実行が完了した命令の順序がまだら状になる場合がある。図５の例では、３行目のロード命令（3: ld ）の書き込みステージで例外が発生したときに、４行目の減算命令（4: sub）と６行目の加算命令（6: add）は実行を完了しているが、その間の５行目の除算命令（5: div）は実行がまだ完了していない状態となっている。
【００６８】
このような場合は、例外回復処理からの復帰の際に、例外起因命令であるロード命令（3: ld ）の再実行に加えて、実行が未完了の除算命令（5: div）の再実行を行った後、７行目の加算命令（7: add）から元のプログラムの実行を再開するという手順が必要である。そのために、本実施形態では、例外が発生したときに、例外起因命令の命令語だけでなく、実行未完了命令の命令語も命令語レジスタ５６に格納しておくようにする。
【００６９】
本実施形態における例外ハンドラの処理フローは、図６に示すようになる。図６において、ステップＳ１１では、例外要因を解消する処理を行う。そして、例外要因が解消され、ＲＥＩ命令がメモリ１０から読み出されると、ステップＳ１２で、例外発生時に命令語レジスタ５６に格納しておいた例外起因命令の命令語をセレクタ２３で選択し、この例外起因命令を実行する。
【００７０】
さらに、例外起因命令の実行後にはステップＳ１３に進み、例外発生時に上記命令語レジスタ５６に格納しておいた実行未完了命令の命令語を上記例外起因命令に続けてセレクタ２３で選択し、この実行未完了命令を実行する。そして、ステップＳ１４で、上記命令語レジスタ５６内にまだ処理していない実行未完了命令の命令語が存在するか否かを判断し、存在する場合はステップＳ１３に戻って同様の処理を繰り返す。上記ステップＳ１２の処理を開始してからステップＳ１３、Ｓ１４のループを抜けるまでは、命令フェッチ部２０のセレクタ２３は、Ａ側を選択する。
【００７１】
その後、上記命令語レジスタ５６内に格納されている実行未完了命令の命令語を全て処理した場合は、ステップＳ１５に進み、例外発生時に復帰アドレスレジスタ５４に退避しておいた命令アドレスをもとに、実行未完了の命令から元のプログラムの処理に復帰する。このとき、セレクタ２３は、選択状態をＢ側に切り替える。
【００７２】
以上説明したように、第３の実施形態によれば、第１の実施形態で説明した効果に加えて、例外が発生したときに、実行が完了していない実行未完了命令と、実行が完了した実行完了命令の順序がまだら状になる場合であっても、例外回復処理からの復帰時に再実行が必要な命令だけを簡単な処理で実行することが可能となるというメリットを有する。
【００７３】
なお、この第３の実施形態では、命令語レジスタ５６に例外起因命令の命令語と実行未完了命令の命令語とを格納するようにしているが、実行未完了命令の命令語のみを格納するようにしても良い。例えば、浮動小数点データを処理する機能を持たないプロセッサで浮動小数点に関する演算命令を実行した場合には例外が発生するが、その例外回復処理を行った後に例外起因命令に戻っても、また同じ例外が発生することになる。このような場合に、命令語レジスタ５６に実行未完了命令の命令語のみを格納しておけば、例外起因命令も飛ばして次の実行未完了命令から処理に復帰することが可能となる。
【００７４】
また、上記第３の実施形態では、命令語レジスタ５６に例外起因命令の命令語と実行未完了命令の命令語とを格納するようにしているが、第２の実施形態のように、例外起因命令の命令アドレスと実行未完了命令の命令アドレスとを格納する命令アドレスレジスタを命令語レジスタ５６の代わりに設けるようにしても良い。この場合は、命令語の選択を行うセレクタ２３の代わりに、命令アドレスの選択を行うセレクタ２４を設ける。
【００７５】
また、上記第３の実施形態において、ＲＥＩ命令に基づき例外起因命令あるいは実行未完了命令を再実行しているときに、再実行している命令において再び例外が発生した場合は、ＲＥＩ命令の例外ではなく、ＲＥＩ命令により再実行している命令の例外を検出して発生させる。この場合に、再実行している命令において例外が発生したことを示す情報を格納するためのレジスタを設けても良い。
【００７６】
なお、以上に説明した本実施形態の情報処理装置は、計算機のＣＰＵあるいはＭＰＵ、ＲＡＭ、ＲＯＭなどで構成されるものであり、ＲＡＭやＲＯＭに記憶されたプログラムが動作することによって実現できる。したがって、計算機が上記機能を果たすように動作させるプログラムを、例えばＣＤ−ＲＯＭのような記録媒体に記録し、計算機に読み込ませることによって実現できるものである。上記プログラムを記録する記録媒体としては、ＣＤ−ＲＯＭ以外に、フロッピーディスク、ハードディスク、磁気テープ、光磁気ディスク、不揮発性メモリカード等を用いることができる。
【００７７】
また、計算機が供給されたプログラムを実行することにより上述の実施形態の機能が実現されるだけでなく、そのプログラムが計算機において稼働しているＯＳ（オペレーティングシステム）あるいは他のアプリケーションソフト等と共同して上述の実施形態の機能が実現される場合や、供給されたプログラムの処理の全てあるいは一部が計算機の機能拡張ボードや機能拡張ユニットにより行われて上述の実施形態の機能が実現される場合も、かかるプログラムは本発明の実施形態に含まれる。
【００７８】
さらに、以上説明した各実施形態は、何れも本発明を実施するにあたっての具体化の一例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその精神、またはその主要な特徴から逸脱することなく、様々な形で実施することができる。
【００７９】
本発明の様々な形態をまとめると、以下のようになる。
（１）命令シーケンスを記憶した命令記憶手段と、
上記命令記憶手段から読み出して実行した命令で例外が発生したときに、その例外起因命令の命令語を保持する例外命令語保持手段と、
上記命令記憶手段から読み出される命令語と、上記例外命令語保持手段から読み出される命令語との何れかを選択する選択手段と、
上記例外起因命令の再実行命令が供給されたときには、上記例外命令語保持手段から読み出される上記例外起因命令の命令語を選択するように上記選択手段を制御する制御手段とを備えたことを特徴とする情報処理装置。
（２）上記制御手段は、上記例外起因命令の再実行命令が供給されたとき以外は、上記命令記憶手段から読み出される命令語を選択するように上記選択手段を制御することを特徴とする上記（１）に記載の情報処理装置。
（３）上記例外起因命令の再実行命令は、上記命令記憶手段に記憶された例外回復処理のための命令シーケンス中に含まれることを特徴とする上記（１）に記載の情報処理装置。
【００８０】
（４）命令シーケンスを記憶した命令記憶手段と、
上記命令記憶手段から読み出して実行した命令で例外が発生したときに、その例外起因命令またはその例外が発生したことにより実行が中断された実行未完了命令の命令語を保持する命令語保持手段と、
上記命令記憶手段から読み出される命令語と、上記命令語保持手段から読み出される命令語との何れかを選択する選択手段と、
上記例外起因命令の再実行命令が供給されたときには、上記命令語保持手段から読み出される上記例外起因命令または上記実行未完了命令の命令語を選択するように上記選択手段を制御する制御手段とを備えたことを特徴とする情報処理装置。
（５）上記制御手段は、上記例外起因命令の再実行命令が供給されたとき以外は、上記命令記憶手段から読み出される命令語を選択するように上記選択手段を制御することを特徴とする上記（４）に記載の情報処理装置。
【００８１】
（６）命令シーケンスを記憶した命令記憶手段と、
上記命令記憶手段から読み出して実行した命令で例外が発生したときに、その例外が発生したことにより実行が中断された実行未完了命令の命令語を保持する命令語保持手段と、
上記命令記憶手段から読み出される命令語と、上記命令語保持手段から読み出される命令語との何れかを選択する選択手段と、
例外起因命令の再実行命令が供給されたときには、上記命令語保持手段から読み出される上記実行未完了命令の命令語を選択するように上記選択手段を制御する制御手段とを備えたことを特徴とする情報処理装置。
（７）上記制御手段は、上記例外起因命令の再実行命令が供給されたとき以外は、上記命令記憶手段から読み出される命令語を選択するように上記選択手段を制御することを特徴とする上記（６）に記載の情報処理装置。
【００８２】
（８）命令シーケンスを記憶した命令記憶手段と、
上記命令記憶手段から読み出して実行した命令で例外が発生したときに、その例外起因命令の命令アドレスを保持する例外命令アドレス保持手段と、
上記命令記憶手段から命令語を読み出すための命令アドレスとして、プログラム・カウンタから読み出される命令アドレスと、上記例外命令アドレス保持手段から読み出される命令アドレスとの何れかを選択する選択手段と、
上記例外起因命令の再実行命令が供給されたときには、上記例外命令アドレス保持手段から読み出される上記例外起因命令の命令アドレスを選択するように上記選択手段を制御する制御手段とを備えたことを特徴とする情報処理装置。
（９）上記制御手段は、上記例外起因命令の再実行命令が供給されたとき以外は、上記プログラム・カウンタから読み出される命令アドレスを選択するように上記選択手段を制御することを特徴とする上記（８）に記載の情報処理装置。
（１０）上記例外起因命令の再実行命令は、上記命令記憶手段に記憶された例外回復処理のための命令シーケンス中に含まれることを特徴とする上記（８）に記載の情報処理装置。
【００８３】
（１１）命令シーケンスを記憶した命令記憶手段と、
上記命令記憶手段から読み出して実行した命令で例外が発生したときに、その例外起因命令またはその例外が発生したことにより実行が中断された実行未完了命令の命令アドレスを保持する命令アドレス保持手段と、
上記命令記憶手段から命令語を読み出すための命令アドレスとして、プログラム・カウンタから読み出される命令アドレスと、上記命令アドレス保持手段から読み出される命令アドレスとの何れかを選択する選択手段と、
上記例外起因命令の再実行命令が供給されたときには、上記命令アドレス保持手段から読み出される上記例外起因命令または上記実行未完了命令の命令アドレスを選択するように上記選択手段を制御する制御手段とを備えたことを特徴とする情報処理装置。
（１２）上記制御手段は、上記例外起因命令の再実行命令が供給されたとき以外は、上記プログラム・カウンタから読み出される命令アドレスを選択するように上記選択手段を制御することを特徴とする上記（１１）に記載の情報処理装置。
【００８４】
（１３）命令シーケンスを記憶した命令記憶手段と、
上記命令記憶手段から読み出して実行した命令で例外が発生したときに、その例外が発生したことにより実行が中断された実行未完了命令の命令アドレスを保持する命令アドレス保持手段と、
上記命令記憶手段から命令語を読み出すための命令アドレスとして、プログラム・カウンタから読み出される命令アドレスと、上記命令アドレス保持手段から読み出される命令アドレスとの何れかを選択する選択手段と、
例外起因命令の再実行命令が供給されたときには、上記命令アドレス保持手段から読み出される上記実行未完了命令の命令アドレスを選択するように上記選択手段を制御する制御手段とを備えたことを特徴とする情報処理装置。
（１４）上記制御手段は、上記例外起因命令の再実行命令が供給されたとき以外は、上記プログラム・カウンタから読み出される命令アドレスを選択するように上記選択手段を制御することを特徴とする上記（１３）に記載の情報処理装置。
【００８５】
（１５）命令記憶手段に記憶された例外回復処理のための命令シーケンス中に例外起因命令の再実行命令を持たせておき、
上記命令記憶手段から読み出して実行した命令で例外が発生したときに、その例外起因命令の命令語を保持するステップと、
上記例外起因命令の再実行命令が上記命令記憶手段から供給されたときに、実行する命令語として、上記例外の発生時に保持しておいた上記例外起因命令の命令語を選択するステップとを有することを特徴とする例外回復処理方法。
【００８６】
（１６）命令記憶手段に記憶された例外回復処理のための命令シーケンス中に例外起因命令の再実行命令を持たせておき、
上記命令記憶手段から読み出して実行した命令で例外が発生したときに、その例外起因命令の命令アドレスを保持するステップと、
上記例外起因命令の再実行命令が上記命令記憶手段から供給されたときに、上記命令記憶手段から命令語を読み出すための命令アドレスとして、上記例外の発生時に保持しておいた上記例外起因命令の命令アドレスを選択するステップとを有することを特徴とする例外回復処理方法。
【００８７】
（１７）命令シーケンスを記憶した命令記憶手段から読み出して実行した命令で例外が発生したときに、その例外起因命令の命令語をレジスタに保存する例外命令語保存手段と、
上記命令記憶手段から読み出される命令語と、上記レジスタから読み出される命令語との何れかを選択する選択手段と、
上記例外起因命令の再実行命令が供給されたときには、上記レジスタから読み出される上記例外起因命令の命令語を選択するように上記選択手段を制御する制御手段として計算機を機能させるためのプログラムを記録したことを特徴とする計算機読み取り可能な記録媒体。
（１８）上記制御手段は、上記例外起因命令の再実行命令が供給されたとき以外は、上記命令記憶手段から読み出される命令語を選択するように上記選択手段を制御することを特徴とする上記（１７）に記載の計算機読み取り可能な記録媒体。
【００８８】
（１９）命令シーケンスを記憶した命令記憶手段から読み出して実行した命令で例外が発生したときに、その例外起因命令の命令アドレスをレジスタに保存する例外命令アドレス保存手段と、
上記命令記憶手段から命令語を読み出すための命令アドレスとして、プログラム・カウンタから読み出される命令アドレスと、上記レジスタから読み出される命令アドレスとの何れかを選択する選択手段と、
上記例外起因命令の再実行命令が供給されたときには、上記レジスタから読み出される上記例外起因命令の命令アドレスを選択するように上記選択手段を制御する制御手段として計算機を機能させるためのプログラムを記録したことを特徴とする計算機読み取り可能な記録媒体。
（２０）上記制御手段は、上記例外起因命令の再実行命令が供給されたとき以外は、上記プログラム・カウンタから読み出される命令アドレスを選択するように上記選択手段を制御することを特徴とする上記（１９）に記載の計算機読み取り可能な記録媒体。
【００８９】
【発明の効果】
上記のように構成した本発明によれば、例外回復処理から元の通常の処理に復帰する際に必要な命令再実行のための処理を、１つの再実行命令を実行するだけで実現することが可能となる。これにより、従来、命令の再実行を行うために必要であったソフトウェアでのエミュレーションや自己改変コードによる実行などの複雑な処理は行わなくて済み、例外回復処理を簡単に行うことができる。
【００９０】
また、本発明によれば、上述の例外回復処理は、例外起因命令や実行未完了命令の命令語あるいは命令アドレスを保持する保持手段と、再実行命令の実行時にこれらの保持しておいた命令語や命令アドレスを選択するための選択手段という少ないハードウェア資源を追加するだけで実現することができる。
【００９１】
このように、本発明によれば、少しのハードウェア資源を付け加えるだけで、例外回復のための命令シーケンスを大幅に削減することができ、例外からの回復を容易に行うことができるようになる。これにより、例外回復にかかる実行時間の削減（例外応答性の向上）を図ることができるとともに、例外ハンドラのコードサイズの縮小を図ることができる。
【００９２】
また、本発明の他の特徴によれば、例外起因命令を再実行するにあたって、例外回復処理のシーケンス通りに命令を順次処理し、その中に書かれた再実行命令を単に実行すれば良いので、再実行する例外起因命令が格納された別の記憶領域のアドレス値にプログラム・カウンタの値を書き換える必要がなく、また、当該別領域へのアクセスを行うことなく例外起因命令を再実行することが可能となる。よって、例外回復処理を高速に行うことができるとともに、元のプログラムを実行する際のキャッシュ性能の低下を防止することもできる。
【図面の簡単な説明】
【図１】第１の実施形態による例外回復処理方法を適用したプロセッサ（情報処理装置）の構成例を示すブロック図である。
【図２】本実施形態による例外起因命令の再実行の方法を説明するフローチャートである。
【図３】第２の実施形態による例外回復処理方法を適用したプロセッサ（情報処理装置）の構成例を示すブロック図である。
【図４】第３の実施形態による例外回復処理方法を適用したプロセッサ（情報処理装置）の構成例を示すブロック図である。
【図５】第３の実施形態に適用可能なパイプライン動作の例を示す図である。
【図６】プログラム順に命令が完了しない場合の第３の実施形態による例外ハンドラの動作を示すフローチャートである。
【図７】従来の例外ハンドラの動作を示すフローチャートである。
【図８】命令シーケンスの例を示す図である。
【図９】図８の命令シーケンスをパイプライン動作させた場合の例を示す図である。
【図１０】プログラム順に命令が完了しない場合の例外ハンドラの動作を示すフローチャートである。
【図１１】命令のエミュレーションにより単一の例外起因命令を再実行させる従来の処理を示すフローチャートである。
【図１２】自己改変コードにより単一の例外起因命令を再実行させる従来の処理を示すフローチャートである。
【符号の説明】
１０  メモリ
２０  命令フェッチ部
２１  プログラム・カウンタ
２２  命令レジスタ
２３，２４  セレクタ
３０  命令解析実行制御部
３１  デコーダ
３２  例外処理制御部
３３  実行制御部
４０  命令実行部（ＡＬＵ）
５０  レジスタ部
５１  例外命令語レジスタ
５２  状態レジスタ
５３  要因レジスタ
５４  復帰アドレスレジスタ
５５  例外命令アドレスレジスタ
５６  命令語レジスタ
【図１】
0003766772.tif 000002
【図２】
0003766772.tif 000003
【図３】
0003766772.tif 000004
【図４】
0003766772.tif 000005
【図５】
0003766772.tif 000006
【図６】
0003766772.tif 000007
【図７】
0003766772.tif 000008
【図８】
0003766772.tif 000009
【図９】
0003766772.tif 000010
【図１０】
0003766772.tif 000011
【図１１】
0003766772.tif 000012
【図１２】
0003766772.tif 000013