(57)【特許請求の範囲】
【請求項１】
直後の命令には実行結果が反映されず前記直後の命令の後続命令に実行結果が反映される命令である遅延命令をパイプライン処理する情報処理装置において、
前記情報処理装置は、命令を実行することによって設定の可能な少なくとも一つのフラグレジスタを有し、
前記フラグレジスタの状態に状態によらず直後の割り込みを無効とする第１の遅延命令と、
前記フラグレジスタに格納されたフラグによって直後の割り込みの有効または無効を切り替え可能な第２の遅延命令と、を実行することを特徴とする情報処理装置における割り込み処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、遅延スロットを持つ命令を処理するパイプライン方式の情報処理装置における割り込み処理の方法に関する。
【背景技術】
【０００２】
計算機などの情報処理装置（以下、ＣＰＵという）では、デバッグ作業のために、命令のシングルステップ実行が行われる。
【０００３】
シングルステップ実行を実現するため、ＣＰＵがハードウエアでシングルステップ割り込みをサポートする方法が一般的である。これは、ＣＰＵがシングルステップ実行を行う動作モードを用意し、このモードでは１命令を実行する毎に割り込みを発生させることで実現している。
【０００４】
しかしながら、遅延分岐命令など遅延スロットを設けてパイプライン処理している場合など、１命令毎の割り込みが不可能な場合が存在する。この場合については、２通りの解決策が考えられている。
【０００５】
第１の方法は、遅延命令と遅延スロットの間に割り込みが入っても矛盾を起こさないように、また完全な形で復帰できるようハードウエアによるサポートを行う手段である。すなわち、復帰時に遅延スロット内の命令から実行することができるようにすることである。この方法は、プログラムされる命令になんら制限がなく、シングルステップ実行によるデバッグとしては、理想的であるが、この機能を実現するためのハードウエアコストの増大は不可避であり、場合によっては動作周波数の低下、動作時消費電力の増大なども考えられる。
【０００６】
第２の方法は、遅延命令の直後には割り込みを受け付けないようにする方法である。この方法だと、ハードウエアコストもわずかであり、遅延命令のみがシングルステップとならないが、遅延命令の頻度が高くないならば、ほとんどデバッグの障害にならない。
【発明の開示】
【発明が解決しようとする課題】
【０００７】
しかしながら、上記第１の方法では、前述のようにハードウエアコストが問題となる。コストが最重視されるシステムでは採用は困難であるとともに、動作周波数の低下や消費電力の増大などのマイナス面も考えられる。
【０００８】
上記第２の方法では、遅延命令の出現頻度が高い場合は、デバッグ作業に支障がある。たとえば、遅延命令がいくつか連続してしまうと、その命令群を処理する間、割り込みが禁止され、シングルステップ実行ができない。したがって、その間のデバッグしやすさが著しく低下する。
【０００９】
また、上記の第２の方法が、ハードウエアコストの点から見ても有望であるが、問題となるのは、遅延命令が連続して出現するとき、１命令毎であるべきシングルステップ実行モードで、数命令実行の間の情報が途絶えデバッグに支障をきたすという点である。
【００１０】
この発明は、上述した従来の問題点に鑑みなされたものにして、遅延スロットを持つ命令を処理するパイプライン方式のＣＰＵにおいて、遅延直後に割り込みを受け付けた場合に、簡易な方法で問題発生をなくす割り込み処理方法を提供する。
【課題を解決するための手段】
【００１１】
この発明の割り込み処理方法は、直後の命令には実行結果が反映されず前記直後の命令の後続命令に実行結果が反映される命令である遅延命令をパイプライン処理する情報処理装置において、前記情報処理装置は、命令を実行することによって設定の可能な少なくとも一つのフラグレジスタを有し、前記フラグレジスタの状態に状態によらず直後の割り込みを無効とする第１の遅延命令と、前記フラグレジスタに格納されたフラグによって直後の割り込みの有効または無効を切り替え可能な第２の遅延命令と、を実行することを特徴とする。
【発明の効果】
【００１５】
この発明によれば、情報処理装置は、フラグレジスタの状態に状態によらず直後の割り込みを無効とする第１の遅延命令と、フラグレジスタに格納されたフラグによって直後の割り込みの有効または無効を切り替え可能な第２の遅延命令とを実行する。
【発明を実施するための最良の形態】
【００１７】
以下、この発明の実施の形態につき図面を参照して説明する。図５にこの発明の一実施形態に係わる遅延命令のパイプライン処理の動作タイミング図を示す。ここでは、説明を簡単にするため、単純なパイプライン構造としている。
【００１８】
このＣＰＵでは、「フェッチ」「実行」「メモリアクセス」の３段のパイプライン構造を持つ。「フェッチ」では命令を格納しているメモリから順に命令を読み込む工程である。「実行」は命令に従って演算などの処理を行い、結果を所望のレジスタに格納する工程である。「メモリアクセス」は、ロードやストアなどのメモリにアクセスする命令のみに存在する工程で、ロードの場合は所望のアドレスからデータを読み出し、所望のレジスタへ格納することを実行する。
【００１９】
図５は、以下に示すプログラムを実行したときの各工程の動作を示している。ここで、「命令Ａ」は、「ＬＤ  （ｍｅｍ），Ｒ１」のロード命令であり、メモリ上の（ｍｅｍ）番地にあるデータを読み込み、レジスタＲ１へ格納する。「命令Ｂ」は、「ＡＤＤ  Ｒ１，Ｒ２」の加算命令であり、レジスタＲ１とレジスタＲ２の内容を加算し、結果をレジスタＲ２へ格納する。「命令Ｃ」は、「ＡＤＤ  Ｒ１，Ｒ３」の加算命令であり、レジスタＲ１とレジスタＲ３の内容を加算し、結果をレジスタＲ３へ格納する。
【００２０】
ここでは、「命令Ｂ」の扱うレジスタＲ１の内容と、「命令Ｃ」の扱うレジスタＲ１の内容が異なる。それは図５に示す通り、「命令Ａ」によるレジスタＲ１の更新が、「命令Ｂ」では反映されないが、「命令Ｃ」では反映されるためである。すなわち、「命令Ｂ」では「命令Ａ」実行以前のレジスタＲ１の内容を使用するのに対し、「命令Ｃ」では「命令Ａ」で読み出した内容、すなわちメモリ上の（ｍｅｍ）番地に格納している内容を使用することになる。
【００２１】
これはＣＰＵのアーキテクチャ上の特徴であり、プログラマはそのことを理解した上でプログラムすることになる。
【００２２】
これをシングルステップ実行によりデバッグする場合を図６に示す。シングルステップ実行では、命令ごとに単独で実行されるため、「命令Ａ」と「命令Ｂ」の間にも図６に示すように数サイクルの無関係なサイクルが存在する。すると、「命令Ｂ」の実行時には、「命令Ａ」でレジスタＲ１の内容が更新されている。したがって、本来の実行時と異なる内容について演算することになり、デバッグの意味がない。
【００２３】
そこで、このような問題（一般的にハザードと呼ぶ）が発生する可能性のある場合、シングルステップ実行はできない。この例の場合だと、「命令Ａ」が遅延命令に相当するため、「命令Ａ」と「命令Ｂ」の間にはシングルステップなどの割り込みを受け付けてはいけない。
【００２４】
受付可能とするならば、上記の問題が起きないように、特殊なハードウェアを用いた処理で命令処理途中のレジスタの内容を保持・復帰するなどの工夫が必要となる。これらはすでに従来の技術として確立している。
【００２５】
ところが、遅延命令の直後に割り込みを受け付けると、必ず問題（ハザード）が発生するわけではない。図５の例の場合、「命令Ｂ」がレジスタＲ１を使用しない命令であった場合、「命令Ａ」と「命令Ｂ」には関連性がなく、「命令Ａ」と「命令Ｂ」間に割り込みが入ってもハザードは発生しない。割り込みが入って、ハザードが起きるかどうかは命令で指定するオペランド（一般的にはレジスタの場合が多い）によって決まるため、プログラマがプログラムする段階で把握できるものである。
【００２６】
この発明は、上記した点を考慮してなされたものであり、この発明では、遅延命令直後に割り込みを受け付けた場合、発生し得る問題に応じて２通りの展開を用意する。
【００２７】
上記２通りのうちの第１は、遅延命令直後に割り込みを受け付けるとＣＰＵのコントロール上障害となる場合である。これは、遅延命令が分岐命令などの命令であり、特殊なハードウエアを抜きにしては、遅延スロットの直前（遅延命令の直後）に割り込みできない場合である。この場合に相当する遅延命令の直後には割り込みを受け付けないように制御する。
【００２８】
上記２通りのうちの第２は、ＣＰＵのコントロールに影響のない場合である。すなわち、これはデータハザードを起こす可能性のある命令を意味している。この種の遅延命令でデータハザードとなる場合は、通常命令そのものによるのではなく、データの格納されたオペランドを前後の命令で指定するために発生するハザードである。したがって、この発明においては、この第２の場合においては、遅延命令といって一律に直後の割り込みの受付を禁止する必要がないことに注目し、この種の遅延命令では、オペランドの前後関係が確保されているならば、割り込みを受付可能とするモードを設ける。このことで遅延命令のオペランドさえ注意深く配置するなら、シングルステップを行っても問題となるハザードが発生しないでデバッグ作業を実行できる。
【００２９】
次に、この発明の具体的な処理につき図面を参照して説明する。
図１は、この発明の割り込み処理方法を適用するブロックの概略図である。図において、１は、命令を解読する命令デコーダ（ＤＥＣ）であり、２は、命令によって操作可能なフラグレジスタ（ＦＬＡＧ）である。命令デコーダ１から遅延命令が出されると信号ライン１０に、遅延命令が検出された場合を示す信号（ＬＯＣ）が出力される。また、フラグレジスタ２からは信号ライン２０にフラグレジスタ２のＢフラグの内容が出力される。このＢフラグは割り込みが入るとハザードが生じるとき、すなわち割り込みを無効する場合に、フラグレジスタ２にＢフラグをセットする。
【００３０】
信号ライン１０及び２０は論理積ゲート５に接続され、ＬＯＣ信号、Ｂフラグ信号は論理積ゲート５与えられる。この論理積ゲート５は両信号に応じて、出力信号ライン３０に出力信号を出力する。論理積ゲート５にＬＯＣ信号、Ｂフラグ信号が与えられると、割り込み禁止信号（ＮＳＳ）を生成し、出力する。
【００３１】
上記したように、この発明の第１の処理方法では、命令デコーダ１により遅延命令が検出されてＬＯＣ信号が出力され、かつ、フラグレジスタ２のＢフラグがセット状態のときには、論理積ゲート５から割り込み禁止信号（ＮＳＳ）が生成され、直後の割り込みを無効とする。
【００３２】
また、命令デコーダ１により遅延命令が検出されてＬＯＣ信号が出力され、かつ、フラグレジスタ２のＢフラグがリセット状態のときには、論理積ゲート５からは割り込み禁止信号（ＮＳＳ）が生成されず、直後の割り込みを有効とする。
【００３３】
さらに、命令デコーダ１により遅延命令が検出されず、かつ、フラグレジスタのＢフラグがセット状態のときにも、論理積ゲート５からは割り込み禁止信号（ＮＳＳ）が生成されず、直後の割り込みを有効とする。
【００３４】
また、命令デコーダ１により遅延命令が検出されず、かつ、フラグレジスタ２のＢフラグがリセット状態のときには、論理積ゲート５からは割り込み禁止信号（３０ＮＳＳ）が生成されず、直後の割り込みを有効とする。
【００３５】
このように、この発明の第１の処理方法では、プログラマは、フラグレジスタ２のＢフラグの内容を操作することで、遅延命令直後の割り込みの有効・無効の選択できる。
【００３６】
図２は、この発明の第２の割り込み処理方法を適用するブロックの概略図である。
なお、図１と同じ構成については同じ符号を付す。
【００３７】
命令デコーダ１が第１のタイプの遅延命令を検出すると、信号ライン１１に、第１のタイプの遅延命令が検出された場合を示す信号（ＬＯＣＡ）が出力される。また、命令デコーダ１が第２のタイプの遅延命令を検出すると、信号ライン１２に、第２のタイプの遅延命令が検出された場合を示す信号（ＬＯＣＢ）が出力される。
【００３８】
また、フラグレジスタ（ＦＬＡＧ）２からは信号ライン２０にフラグレジスタ２のＢフラグの内容が出力される。このＢフラグは割り込みが入るとハザードが生じるときにフラグレジスタ２にＢフラグがセットされている。
【００３９】
信号ライン１２及び２０は論理ゲート６に接続され、ＬＯＣＢ信号、Ｂフラグ信号は論理積ゲート６与えられる。この論理積ゲート６から両信号に応じた中間信号が生成される。
【００４０】
論理積ゲート６は、ＬＯＣＢ信号とＢフラグが与えられたときに、直後の割り込みを無効にするための中間信号を出力する。この信号が信号ライン１３から論理和ゲート７に与えられる。
【００４１】
論理和ゲート７は、論理積ゲート６からの中間信号または命令デコーダ１から与えられる第１のタイプの遅延命令を検出したＬＯＣＡ信号により、割り込み禁止信号（ＮＳＳ）を生成し、出力信号ライン３０に出力する。
【００４２】
ここで、命令デコーダ１が検出する第１のタイプの遅延命令とは、Ｂフラグの状態にかかわらず、直後の割り込みを無効にする命令である。また、命令デコーダ１が検出する第２のタイプの遅延命令とは、Ｂフラグの状態によって、直後の割り込みを有効・無効を選択する命令である。
【００４３】
この発明の第２の処理方法では、命令デコーダ１により第１のタイプの遅延命令が検出され、ＬＯＣＡ信号が出力された場合、フラグレジスタ２のＢフラグの状態に無関係に論理和ゲート７より割り込み禁止信号（ＮＳＳ）が生成され、直後の割り込みを無効とする。
【００４４】
また、命令デコーダ１により第１のタイプの遅延命令が検出されない場合で、命令デコーダ１により第２のタイプの遅延命令が検出され、ＬＯＣＢが信号ライン１２に与えられ、かつ、フラグレジスタ２のＢフラグがセット状態のときには、論理和ゲート７から割り込み禁止信号（ＮＳＳ）が生成され、直後の割り込みを無効とする。
【００４５】
さらに、命令デコーダ１により第１のタイプの遅延命令が検出されない場合で、命令デコーダ１により第２のタイプの遅延命令が検出され、ＬＯＣＢが信号ライン１２に与えられ、かつ、フラグレジスタ２のＢフラグがリセット状態のときには、論理和ゲート７から割り込み禁止信号（ＮＳＳ）が生成されず、直後の割り込みを有効とする。
【００４６】
また、命令デコーダ１により第１のタイプの遅延命令が検出されない場合で、命令デコーダ１により第２のタイプの遅延命令が検出されず、かつ、フラグレジスタ２のＢフラグがセット状態のときには、論理和ゲート７から割り込み禁止信号（ＮＳＳ）が生成されず、直後の割り込みを有効とする。
【００４７】
また、命令デコーダ１により第１のタイプの遅延命令が検出されない場合で、命令デコーダ１により第２のタイプの遅延命令が検出されず、かつ、フラグレジスタ２のＢフラグがリセット状態のときには、論理和ゲート７から割り込み禁止信号（ＮＳＳ）が生成されず、直後の割り込みを有効とする。
【００４８】
上記した第１の処理方法では、遅延命令直後の割り込みを有効にする場合と、無効にする場合の両方の実現手段を備えなければならず、ハードウエアコストが問題となる。コストが最重視されるシステムでは採用は困難であるし、動作周波数の低下や消費電力の増大などのマイナス面も考えられる。しかし、この第２の処理方法では、Ｂフラグの状態によらず直後の割り込みを無効とする第１のタイプの遅延命令とＢフラグによって直後の割り込みの有効・無効を切り替え可能な第２のタイプの遅延命令の２通りの遅延命令を用意する。そして、遅延直後の割り込みの実現にハードウエアの著しい負担を強いるような遅延命令、たとえば遅延分岐命令のように分岐先アドレスと復帰アドレスが異なるため特殊なレジスタを設けるなど、特殊な処理になるような命令については、フラグ状態によらず直後の割り込み受付を禁止する分類とし、ハードウエアコストがかからない遅延命令は、フラグの状態によって直後の割り込みの有効・無効を切り替えが可能とする分類とする。このように構成することで、ハードウエアの増大を招くことなく、従来シングルステップ実行できなかった命令の一部においても、シングルステップ実行できるようになり、デバッグのし易さを向上できる。
【００４９】
図３は、この発明の第３の割り込み処理方法を適用するブロックの概略図である。図において、１は、命令を解読する命令デコーダ（ＤＥＣ）であり、３は、プリデコーダ（ＰＤＥＣ）である。プリデコーダ（ＰＤＥＣ）３は、命令デコーダ１で扱っている直後の命令を取り扱うものである。すなわち、次のステージで命令デコーダ１へ送られる命令を取り扱うものとする。
【００５０】
命令デコーダ１は、第１のタイプの遅延命令を検出すると、信号ライン１１にＬＯＣＡ信号を出力し、第２のタイプの遅延命令を検出すると、信号ライン１２にＬＯＣＢ信号を出力する。
【００５１】
プリデコーダ３は、第２のタイプの遅延命令の直後に実行するとハザードを起こす可能性がある命令を検出した結果を信号ライン２１にＩＮＳＴ信号を出力する。
【００５２】
信号ライン１２及び２１は論理積ゲート６１に接続され、論理積ゲート６１にＬＯＣＢ信号、ＩＮＳＴ信号が与えられ、論理積ゲート６１により、中間信号を生成する。この中間信号は信号ライン１４から論理和ゲート７へ与えられる。この論理和ゲート７には命令デコーダ１からのＬＯＣＡ信号が与えられる。
【００５３】
上記した中間信号は、ＬＯＣＡ信号と論理和ゲート７により、割り込み禁止信号（ＮＳＳ）を生成し、出力信号ライン３０に出力する。ＬＯＣＢ信号、ＩＮＳＴ信号、および論理積ゲート６１は、第２の命令の種類だけ組み合わせが必要となるため、複数となることがある。この図３の例では、２個の例を示している。
【００５４】
ここで、命令デコーダ１が検出する第１のタイプの遅延命令とは、後続命令にかかわらず、直後の割り込みを無効にする命令であり、命令デコーダ１が検出する第２のタイプの遅延命令とは、後続命令の種類によって、直後の割り込みを有効・無効を切り替える命令である。
【００５５】
この第３の処理方法では、命令デコーダ１により第１のタイプの遅延命令が検出された場合、後続命令の種類に無関係に論理和ゲート７より割り込み禁止信号（ＮＳＳ）が生成され、直後の割り込みを無効とする。
【００５６】
また、命令デコーダ１により第１のタイプの遅延命令が検出されない場合で、命令デコーダ１により第２のタイプの遅延命令が検出され、かつ、命令デコーダ１で検出された命令の直後に割り込みがあると、ハザードになる可能性のある後続命令がプリデコーダ３で検出されたときには、論理和ゲート７より割り込み禁止信号（ＮＳＳ）が生成され、直後の割り込みを無効とする。
【００５７】
さらに、命令デコーダ１により第１のタイプの遅延命令が検出されない場合で、命令デコーダ１により第２のタイプの遅延命令が検出されないとき、論理和ゲート７より割り込み禁止信号（ＮＳＳ）が生成されず、直後の割り込みを有効とする。
【００５８】
また、命令デコーダ１により第１のタイプの遅延命令が検出されない場合で、命令デコーダ１により第２のタイプの遅延命令が検出され、かつ、命令デコーダ１で検出された命令の直後に割り込みがあると、ハザードになる可能性のある後続命令がプリデコーダ３で検出されないときには、論理和ゲート７より割り込み禁止信号（ＮＳＳ）が生成されず、直後の割り込みを有効とする。
【００５９】
上記のように構成することで、割り込みを許可して良いのか否かの判断を自動的に行えるため、プログラマに知識と手間を要求しない。また、ハザードが発生する可能性のある場合とない場合が混在するようなプログラムであっても、一律に割り込み禁止にしなくてもいいため、デバッグの精度が向上する。
【００６０】
図４は、この発明の第４の割り込み処理方法を適用するブロックの概略図である。図において、１は、命令を解読する命令デコーダ（ＤＥＣ）であり、３は、プリデコーダ（ＰＤＥＣ）である。プリデコーダ（ＰＤＥＣ）３は、命令デコーダ１で扱っている直後の命令を取り扱うものである。すなわち、次のステージで命令デコーダ１へ送られる命令を取り扱うものとする。
【００６１】
命令デコーダ１は、第１のタイプの遅延命令を検出すると、信号ライン１１にＬＯＣＡ信号を出力し、第２のタイプの遅延命令を検出すると、信号ライン１２にＬＯＣＢ信号を出力する。
【００６２】
さらに、命令デコーダ１は、第２のタイプの遅延命令の中で指定されるハザードを起こす可能性のあるオペランド情報を検出すると、信号ライン２２にＯＰＡ信号を出力する。プリデコーダ３は、検出される後続命令の中で指定されるハザードを起こす可能性
のあるオペランド情報を検出すると、信号ライン２３にＯＰＢ信号を出力する。ＯＰＡ信号とＯＰＢ信号は比較器８に与えられる。このＯＰＡ信号とＯＰＢ信号が一致していると、図５で示した例と同様に、遅延命令直後の割り込みによってハザードが発生することを知る。そこで、比較器８でＯＰＡ信号とＯＰＢ信号が一致しているかどうかを検査し、その結果を信号ライン１４に中間信号として出力し、論理積ゲート６２与える。この論理積ゲート６２には命令デコーダ１からのＬＯＣＢ信号が与えられる。
【００６３】
この論理積ゲート６２によりＬＯＣＢ信号と中間信号との論理積により、中間信号を生成し、信号ライン１５から論理和ゲート７へ与える。この中間信号は、命令デコーダ１からのＬＯＣＡと論理和ゲート７により、論理和がとられ、割り込み禁止信号（ＮＳＳ）を生成し、信号ライン３０に出力する。
【００６４】
この発明の第４の処理方法では、命令デコーダ１により第１のタイプの遅延命令が検出された場合、後続命令のオペランドに無関係に割り込み禁止信号（ＮＳＳ）が生成され、直後の割り込みを無効とする。
【００６５】
また、命令デコーダ１により第１のタイプの遅延命令が検出されない場合で、命令デコーダ１により第２のタイプの遅延命令が検出され、かつ、命令デコーダ１で検出された遅延命令のオペランド（ＯＰＡ）と、プレデコーダ３で検出された後続命令のオペランド（ＯＰＢ）が一致していたときには、割り込み禁止信号（ＮＳＳ）が生成され、直後の割り込みを無効とする。
【００６６】
さらに、命令デコーダ１により第１のタイプの遅延命令が検出されない場合で、命令デコーダ１により第２のタイプの遅延命令が検出されないとき、割り込み禁止信号（ＮＳＳ）が生成されず、直後の割り込みを有効とする。
【００６７】
また、命令デコーダ１により第１のタイプの遅延命令が検出されない場合で、命令デコーダ１により第２のタイプの遅延命令が検出され、かつ、命令デコーダ１で検出された遅延命令のオペランド（ＯＰＡ）と、プレデコーダ３で検出された後続命令のオペランド（ＯＰＢ）が一致していないときには、割り込み禁止信号（ＮＳＳ）が生成されず、直後の割り込みを有効とする。
【００６８】
上記した方法によれば、ハザードが発生する可能性をオペランドレベルで検査するため、ハザードが発生する可能性のある遅延命令と後続命令の組み合わせにおいても、オペランドの不一致によりハザードが発生せず、割り込みを禁止する必要がなくなる場合もあるため、よりデバッグの精度が向上する。
【図面の簡単な説明】
【００６９】
【図１】この発明の第１の割り込み処理方法を適用するブロックの概略図である。
【図２】この発明の第２の割り込み処理方法を適用するブロックの概略図である。
【図３】この発明の第３の割り込み処理方法を適用するブロックの概略図である。
【図４】この発明の第４の割り込み処理方法を適用するブロックの概略図である。
【図５】この発明の一実施形態に係わる遅延命令のパイプライン処理の動作タイミング図である。
【図６】シングルステップ実行によりデバッグする場合の動作タイミング図である。
【符号の説明】
【００７０】
１  命令デコーダ
２  フラグレジスタ
３  プレデコーダ
５  論理積ゲート
７  論理和ゲート
８  比較器
６１  論理積ゲート
６２  論理積ゲート
【図１】
0004564025.tif 000002
【図２】
0004564025.tif 000003
【図３】
0004564025.tif 000004
【図４】
0004564025.tif 000005
【図５】
0004564025.tif 000006
【図６】
0004564025.tif 000007