(57)【要約】【課題】遅延分岐処理を実行するために、オブジェクトプログラム中に不要な命令を出力する必要がないＲＩＳＣ型ＣＰＵを提供する。【解決手段】ＣＰＵは、分岐命令における、遅延オプションの設定に応じてプログラム分岐を行なうか否かを決定するので、分岐命令等をデコードした段階で、当該命令については遅延分岐を行なわないことを判別でき、そのようなケースでは、当該分岐命令の次にｎｏｐ命令を配置する必要はなくなるので、オブジェクトコードサイズを小さくすることが可能となる。【選択図】図１６
2007287186.tif 000002
【特許請求の範囲】
【請求項１】
その次に記述されている命令を実行するか否かを判別するための遅延分岐オプションを有する分岐命令を有し、前記遅延分岐オプションの設定に応じてプログラム分岐を行なうか否かを決定するように構成されていることを特徴とするＲＩＳＣ型ＣＰＵ。
【請求項２】
ソースプログラムにおいて、分岐命令よりも前に記述されている命令が当該分岐命令の遅延スロットにて実行可能か否かを判定し、
実行可能である場合は「遅延処理あり」を示す遅延分岐オプションを当該分岐命令中に設定すると共に実行可能な命令を当該分岐命令の次に配置し、
実行不能である場合は「遅延処理なし」を示す遅延分岐オプションを当該分岐命令中に設定するように請求項１記載のＲＩＳＣ型ＣＰＵによって実行されるオブジェクトコードを生成することを特徴とするコンパイラ。
【請求項３】
請求項１記載のＲＩＳＣ型ＣＰＵと、
請求項２記載のコンパイラによって生成されたオブジェクトプログラムが記憶されるプログラムメモリとを備えたことを特徴とするマイクロコンピュータ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＲＩＳＣ型ＣＰＵ，そのＣＰＵによって実行されるオブジェクトプログラムを生成するためのコンパイラ，前記ＣＰＵを備えてなるマイクロコンピュータに関する。
に関する。
【背景技術】
【０００２】
（１）現在、プログラム開発は、例えばＣ，Ｃ＋＋などの高級言語によってソースプログラムを記述することで行い、そのソースプログラムをコンパイラによってコンパイルすることでＣＰＵが実行可能な形式のオブジェクトプログラムを生成することが一般的である。
ところで、ＣＰＵは、割り込みが発生した場合に割り込み処理を実行する。ここで、図２７（ａ）には、割り込み処理のシーケンスを示し、図２７（ｂ）には。割り込み処理プログラムのオブジェクトコードの一例をニモニックで示す。
【０００３】
即ち、割り込み処理は、先ず、使用するスタック領域を確保し（ステップＡ１）、確保したスタック領域にレジスタのデータや戻りアドレスを退避させてから（ステップＡ２）、割り込みの種類に応じた処理を実行する（ステップＡ３）。そして、スタック領域に退避させたデータをレジスタに復帰させると（ステップＡ４）、ステップＡ１で確保したスタック領域を開放する（ステップＡ５，［ａｄｄ．ｂ  ＃３６，ｓｐ］）。それから、戻りアドレスをプログラムカウンタにセットすることで割り込み処理から通常の処理に復帰する（ステップＡ６，［ｒｔ１３］）。
【０００４】
（２）ＲＩＳＣ(Reduced Instruction Set Computer)型のＣＰＵでは、プログラムの分岐命令を遅延処理付きの命令（遅延分岐命令）として備えているものが多い。即ち、ＲＩＳＣ型ＣＰＵ特有のパイプライン処理において分岐命令が実行されると、パイプライン処理に「空き」が発生して効率が低下してしまう。そこで、遅延分岐命令は、パイプラインの「空き」の部分に別の命令の処理を割り当てることで、分岐命令の実行と並行して他の命令も実行できるようにするものである（図２８（ａ）参照）。
【０００５】
（３）ＲＩＳＣ型ＣＰＵでは、パイプライン処理による効率化を図るため命令数が少なくなっている。そのため、乗算，除算，剰余算などの演算を行なう場合には、補助演算装置（コプロセッサ）を用いる場合がある。しかしながら、補助演算装置を使用する場合、ＣＰＵとの間を専用バスで接続することになると配線量が増大してしまう。配線量の増加を抑制するためには、ＲＯＭ，ＲＡＭなどのその他の周辺回路と共通に接続される汎用バスによって両者の間を接続する構成もある。
尚、これらの従来技術は、何れも、例えば特許文献１に記載されているものである。
【特許文献１】特開平１０−２８９１２０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、分岐命令と並行して実行可能な命令には、命令の種類（例えば、分岐命令）やプログラムにおける処理手順などから一定の制限がある。そして、コンパイラによるコンパイル処理では、遅延分岐命令をコンパイルする際には並行して実行するための命令を必ず出力しなければならない。その場合、並行して実行可能な命令が存在しなければ、図２８（ｂ）に示すように、何も処理しない命令であるｎｏｐ(No OPeration)命令を出力するようになっている。従って、オブジェクトプログラム中には、本来不要であるｎｏｐ命令がコードとして出力されることになり、プログラムメモリの容量を増加させていた。
【０００７】
本発明は上記事情に鑑みてなされたものであり、その目的は、遅延分岐処理を実行するために、オブジェクトプログラム中に不要な命令を出力する必要がないＲＩＳＣ型ＣＰＵ、また、オブジェクトプログラム中に不要な命令を出力しないコンパイラ，及び前記ＣＰＵを備えてなるマイクロコンピュータを提供することにある。
【課題を解決するための手段】
【０００８】
請求項１記載のＲＩＳＣ型ＣＰＵによれば、分岐命令における、遅延分岐オプションの設定に応じてプログラム分岐を行なうか否かを決定する。斯様に構成すれば、ＣＰＵは、分岐命令をデコードした段階で、当該命令については遅延分岐を行なわないことを判別できる。従って、そのようなケースでは、当該分岐命令の次にｎｏｐ命令を配置する必要はなくなるので、オブジェクトコードサイズを小さくすることが可能となる。
【０００９】
請求項２記載のコンパイラによれば、分岐命令よりも前に記述されている命令が当該分岐命令の遅延スロットにて実行可能か否かを判定し、その実行可否に応じて遅延分岐オプションを設定すると共に、実行可能である場合は実行可能な命令を当該分岐命令の次に配置する。従って、請求項１記載のＲＩＳＣ型ＣＰＵが実行可能なオブジェクトプログラムを生成することができる。
【００１０】
請求項３記載のマイクロコンピュータによれば、請求項１記載のＲＩＳＣ型ＣＰＵと、請求項２記載のコンパイラによって生成されたオブジェクトプログラムが記憶されるプログラムメモリとを備える。
【発明を実施するための最良の形態】
【００１１】
（第１実施例）
以下、本発明の第１実施例について図１乃至図８を参照して説明する。図６は、プログラム変換装置の構成を示す図である。プログラム変換装置たるパーソナルコンピュータ（パソコン，若しくはワークステーション）１には、コンパイラ２がインストールされている。具体的には、パソコン１の本体１ａに内蔵されているハードディスク等の記憶装置（記憶手段）にコンパイラ２のプログラムファイルが記憶されている。
【００１２】
本体１ａ内蔵の記憶装置には、図７に示すように、ユーザが例えばＣ言語などの高級言語によって記述したソースコードファイル３も記憶されている。そして、ユーザは、コンパイラ２のプログラムをパソコン１上で起動することで、ソースコードファイル３からオブジェクトコードファイル４を変換生成させる。コンパイラ２は、ソースコードファイル３に記述されているＣ言語のソースコードを読み出してその内容を解釈すると、ＣＰＵ等が固有の命令によって対応する処理を最も効率的に実行できるようなオブジェクトコードを生成するようにコンパイルを行う。
【００１３】
パソコン１の本体１ａにはＲＯＭライタ５が接続されており、両者は、例えばＲＳ−２３２Ｃ等のシリアル通信プロトコルによって通信が可能となっている。コンパイラ２よって生成されたオブジェクトコードファイル４はＲＯＭライタ５に転送されると、ＲＯＭライタ５にセットされたマイクロコンピュータ（マイコン）６に内蔵されているＲＯＭ７（プログラムメモリ，図８参照）にバイナリデータのプログラム１００として書き込まれるようになっている。
【００１４】
図８は、ワンチップマイコン６の電気的構成を示す機能ブロック図である。マイコン６は、ＲＩＳＣ型のＣＰＵ８を中心として構成されている。そのＣＰＵ８は、ＥＥＰＲＯＭやフラッシュＲＯＭなどからなるＲＯＭ７と、バス制御部１０，並びに第１アドレスバス１１及び第１データバス１２を介して接続されている。また、バス制御部１０からは、第２アドレスバス１３及び第２データバス１４が分岐しており、それらのバス１３，１４には、補助演算装置１５，ＲＡＭ１６，タイマやＡ／Ｄ変換などその他の周辺回路１７が接続されている。
【００１５】
ＣＰＵ８の内部には、演算等を行うための演算部（ＡＬＵ(Arithmetic Logical Unit) ）１８，演算部１８が演算等を行う場合に使用される複数のレジスタが配置されているレジスタ部１９，及びレジスタ部１９等にロード／ストア等の制御を行うための制御部２０などが配置されている。
【００１６】
図１は、コンパイラ２によるコンパイル処理の内容を、本実施例にかかる部分のみ示すフローチャートである。コンパイラ２は、ソースコードファイル３中における割り込み処理部分において、スタック領域を使用しているか否かを判定する（ステップＳ１）。そして、スタック領域を使用していれば（「有り」）復帰命令［ｒｔｍ３］のオペランド部に、スタック開放サイズに応じた指定値を４の倍数で設定する（ステップＳ３）。
一方、ステップＳ１で、割り込み処理部分においてスタック領域を使用していない場合は（「無し」）復帰命令［ｒｔｍ３］のオペランド部に「０」を設定する（ステップＳ２）。
【００１７】
図２は図２７相当図であり、（ａ）は、コンパイラ２によってコンパイルされたプログラム１００における通常割り込み処理のフローチャート、（ｂ）は、そのプログラム１００のニモニック表現である。図２（ａ）に示すフローチャートでは、図２７（ａ）のフローチャートにおけるステップＡ５が省略されており、ステップＡ６に代えて、「割り込み復帰（スタック開放）」のステップＡ７が配置されている。
【００１８】
そして、図２（ｂ）においてステップＡ７の処理に対応する命令は、
ｒｔ１３      ＃３６                                ・・・（１）
である（ｍ＝１）。即ち、従来は、
ステップＡ５    ：    ａｄｄ．ｂ      ＃３６，ｓｐ  ・・・（２）
でスタック領域を開放し、
ステップＡ６    ：    ｒｔ１３                      ・・・（３）
で割り込み復帰（及び戻りアドレス分のスタック開放）を行なっていたが、本実施例では、上記（１）の１行の命令によってそれらを同時に行うようにコーディングされている。
【００１９】
ここで、図３には、（１）の復帰命令２１のビット構成を示す。復帰命令［ｒｔｍ３］は、７ビットの命令部２２，１ビットの割り込み種別選択部（ｍ）２３、２ビットのフラグ復帰選択部２４、６ビットのオペランド部２５によって構成されている。（１）で表現される復帰命令のオペランドは［＃３６］であるが、機械語レベルでは、オペランド部には、即値３６を４で除した［９］がセットされるようになっている。
【００２０】
図４には、（１）の復帰命令（ステップＡ７）をＣＰＵ８が実行する場合のパイプライン処理を示す。尚、パイプラインには５つのステージがあり、各ステージは以下のように設定されている。
ＩＦ：インストラクションフェッチ
ＤＥＣ：デコード
ＥＸＥ：命令実行
ＭＥＭ：メモリ（外部デバイス）アクセス
ＷＢ：ライトバック（レジスタ書込み）
【００２１】
パイプライン［１］では、［ｒｔ１３］のＤＥＣにおいてスタックポインタＳＰの値が読み込まれ、ＥＸＥで次のＭＥＭにおけるアクセスアドレスａｄｒが（４）式で計算される。
ａｄｒ＝ｓｐ＋（オペランド＊４）                ・・・（４）
次のＭＥＭでは、スタック上の戻りアドレスと状態フラグがリードされ、ＷＢにおいて、戻りアドレスをプログラムカウンタＰＣに、状態フラグがステータスレジスタＰＳＲにセットされる。そして、パイプライン［２］のＥＸＥにおいて、スタック領域の開放が一括して行なわれる。即ち、スタックポインタＳＰを（５）式のようにセットする。
ｓｐ＝ｓｐ＋（オペランド＊４）＋４              ・・・（５）
【００２２】
ここで、図５には、従来のコンパイル処理によるオブジェクトプログラムに基づいて復帰命令が実行される場合のパイプライン処理を示す。従来は、パイプライン［１］で［ａｄｄ．ｂ  ＃３６，ｓｐ］が実行され、ＥＸＥにおいて割り込み処理で確保されたスタック領域の開放が（６）式で行なわれる。
ｓｐ＝ｓｐ＋（オペランド＊４）                  ・・・（６）
そして、パイプライン［２］で［ｒｔ１３］が実行され、パイプライン［３］のＥＸＥにおいて、戻りアドレス及び状態フラグの退避に使用された領域が（７）式の実行により開放される。
ｓｐ＝ｓｐ＋４                                  ・・・（７）
即ち、従来のプログラムによる復帰処理では、スタック領域の開放処理を（６），（７）の２段階で行なっていた。これに対して、本実施例の方式によれば、（６），（７）の処理を（５）で一括して行なうことが可能となり、復帰処理に要する時間が短縮されている。
【００２３】
以上のように本実施例によれば、ＣＰＵ８が備える復帰命令［ｒｔｍ３］によれば、スタック領域の開放サイズが復帰命令のオペランドにて指定可能であるから、従来は２段階で行なっていた開放処理を１段階で実行することができる。従って、割り込み処理からの復帰に要する時間を短縮することが可能となる。
【００２４】
そして、コンパイラ２は、割り込み処理から復帰する際にスタック領域を開放する必要がある場合、その開放サイズを復帰命令［ｒｔｍ３］のオペランドにて指定するようにオブジェクトコードファイル４を生成するので、ＣＰＵ８が実行可能なプログラム１００を生成することができる。加えて、そのオブジェクトコードファイル４のサイズを小さくすることができる。
また、マイコン６は、コンパイラ２によって生成されたオブジェクトプログラムが記憶されるＲＯＭ７を備えるので、ＣＰＵ８は、そのオブジェクトプログラムを実行して高速に処理を行なうことができる。
【００２５】
（第２実施例）
図９乃至図１２は本発明の第２実施例を示すものであり、第１実施例と同一部分には同一符号を付して説明を省略し、以下異なる部分についてのみ説明する。図９は、コンパイラ２によるコンパイル処理の内容を、第２実施例にかかる部分のみ示すフローチャートである。
【００２６】
第２実施例では、ユーザが、ソースコードファイル３中で割り込み処理のプログラムを記述する場合、それが、例外割り込み処理であるか、通常割り込み処理であるかをコンパイラ２に判別させるための記述を行なうようにする。ここで、例外割り込みとは、何らかのエラーが発生した場合にＣＰＵ８の内部で発生する割り込みであり、通常割り込みは、それ以外の優先順位が低い割り込みである。ＣＰＵ８では、例外割り込み処理中に通常割り込みが発生してもマスクされるように構成されている。
【００２７】
図１０（ａ）に示す例外割り込み処理は、アドレスアクセスエラーが発行された場合の処理であり、そのプログラムの冒頭において、
＃ｐｒａｇｍａ  ｉｎｔｅｒｒｕｐｔ（ｍｏｎ＝０）
と記述されている。この内、最後の（ｍｏｎ＝０）が例外割り込み処理を示す記述である。一方、図１１（ａ）に示す通常割り込み処理は、タイマ割り込み処理であり、そのプログラムの冒頭において、
＃ｐｒａｇｍａ  ｉｎｔｅｒｒｕｐｔ（ｍｏｎ＝１）
と記述されている。この内、最後の（ｍｏｎ＝１）が通常割り込み処理を示す記述である。
【００２８】
ここで、図１２には、ＣＰＵ８の内部レジスタであるシステムレジスタ２６のビット構成を示す。システムレジスタ２６のビット１は、モニター中フラグＭＯＮとなっている。このフラグＭＯＮは、ＣＰＵ８がユーザプログラムの実行中である場合は「０」にリセットされており、例外割り込み処理中である場合は、ＣＰＵ８のハードウエアによって「１」にセットされる。
フラグＭＯＮが「１」にセットされた場合、ＣＰＵ８は、他の例外割り込み，通常割り込みの受付を禁止するようになっている。そして、従来のユーザプログラムでは、例外割り込み処理の実行が完了した場合は、フラグＭＯＮを「０」にリセットするように記述する必要があった。
【００２９】
そこで、第２実施例では、フラグＭＯＮを「０」にリセットする処理に代えて、例外割り込み処理の冒頭に（ｍｏｎ＝０）を記述するように設定している。即ち、（ｍｏｎ＝０，１）の記述によって、コンパイラ２は、その割り込み処理が例外割り込み，通常割り込みの何れに対応するものかを判別可能となっている。
【００３０】
図９において、コンパイラ２は、ソースコードファイル３における割り込み処理プログラムの冒頭の記述が（ｍｏｎ＝０）か、（ｍｏｎ＝１）かを判定する（ステップＳ４）。（ｍｏｎ＝０）であれば、例外割り込み処理であるから（ステップＳ５）、それに応じて復帰命令［ｒｔ０３］を生成する（ステップＳ６）。  一方、ステップＳ４において、冒頭の記述が（ｍｏｎ＝１）であれば、通常割り込み処理であるから（ステップＳ７）、それに応じて復帰命令［ｒｔ１３］を生成する（ステップＳ８）。
その結果、コンパイルされたオブジェクトコードファイル４は、図１０（ｂ），図１１（ｂ）に示すように生成される。そして、ＣＰＵ８は、復帰命令が［ｒｔ０３］である場合は、フラグＭＯＮを「０」にリセットする処理をハードウエアで実行する。復帰命令が［ｒｔ１３］である場合は、第１実施例と同様の復帰処理を行なう。
【００３１】
以上のように第２実施例によれば、ＣＰＵ８が有する例外割り込み処理，通常割り込み処理から復帰するための復帰命令を異なるものに設定し、復帰命令が例外割り込み処理［ｒｔ０３］である場合は、システムレジスタ２６のフラグＭＯＮを「０」にリセットする処理をハードウエアで実行する。従って、ユーザは、ソースコードファイル３中でフラグＭＯＮを「０」にリセットするための処理を記述する必要がなくなり、ユーザプログラム側の負担を軽減することが可能となる。
【００３２】
また、コンパイラ２は、ソースコードファイル３中の（ｍｏｎ＝０，１）の記述によって割り込み処理が、例外割り込み，通常割り込みの何れに対応するものかを判別し、夫々の割り込み処理からの復帰命令を異なるオブジェクトコード［ｒｔ０３］，［ｒｔ１３］として生成する。従って、ＣＰＵ８が異なる復帰命令を実行し分けることが可能なオブジェクトプログラムを生成することができる。そして、ユーザは、割り込み処理のプログラムを簡略化することが可能となる。
【００３３】
（第３実施例）
図１３乃至図１６は本発明の第３実施例を示すものであり、第１実施例と同一部分には同一符号を付して説明を省略し、以下異なる部分についてのみ説明する。図１５は、第３実施例のコンパイラ２によって生成される遅延分岐命令のビット構成を示すものである。ＣＰＵ８の遅延分岐命令は、（ａ），（ｂ），（ｃ）の３タイプがある。
【００３４】
図１５（ａ）は１ワード（１６ビット）の遅延分岐命令３１であり、７ビットの命令部３２と、１ビットの遅延処理選択部３３と、８ビットのアドレス部３４とで構成されている。図１５（ｂ）は２ワードの遅延分岐命令３５であり、７ビットの命令部３６と、１ビットの遅延処理選択部３７と、２４ビットのアドレス部３８とで構成されている。図１５（ｃ）は１ワードの遅延分岐命令３９であり、８ビットの命令部４０と、２ビットの遅延処理選択部４１と、２ビットのフラグ復帰選択部４２と、４ビットのアドレス部４３とで構成されている。
第３実施例では、これらの遅延分岐命令３１，３５，３９に、遅延処理選択部３３，３７，４１が設けられていることが特徴である。ＣＰＵ８は、この遅延処理選択部のビットの状態に応じて遅延分岐の流れを制御するように構成されている。
【００３５】
図１３は、コンパイラ２によるコンパイル処理の内容を、第３実施例にかかる部分のみ示すフローチャートであり、ソースコードファイル３中における分岐命令のコンパイル処理に関するものである。コンパイラ２は、オブジェクトとして生成しようとする命令が分岐命令であるか否かを判断し（ステップＳ１１）、分岐命令で無ければ(「ＮＯ」)処理を終了する。一方、分岐命令である場合は(「ＹＥＳ」)、その分岐命令について遅延処理可能なワード数を判定する（ステップＳ１２）。そのワード数が「０」であれば、処理を終了する。
【００３６】
前記ワード数が「１」であれば、コンパイラ２は、当該分岐命令の直前の命令が１ワード命令であるか否かを判定し（ステップＳ１３）、１ワード命令であれば(「ＹＥＳ」)、その直前の命令が、プログラムの流れで遅延処理が可能か否かを判定する（ステップＳ１４）。遅延処理が可能である場合(「ＹＥＳ」)、直前の命令と分岐命令とを入れ替えると共に、分岐命令の遅延オプション（遅延分岐オプション）として遅延処理選択部３３，３７の何れかに「１」を設定する（ステップＳ１５）。
即ち、ＣＰＵ８は、例えば、遅延分岐命令３１をデコードした場合に遅延オプション「１」が設定されていると、その次には遅延処理可能な１ワード命令が配置されていることを判定する。この場合、オブジェクトコードファイル４中における命令の配置は、図１４（ａ）に示すようになる。
【００３７】
一方、直前の命令が１ワード命令でない場合、または、直前の命令が遅延処理不能であり、ステップＳ１３，Ｓ１４の何れかにおいてコンパイラ２が「ＮＯ」と判断すると、分岐命令の遅延オプションとして遅延処理選択部３３等に「０」を設定する（ステップＳ１６）。そして、ＣＰＵ８は、デコードした場合に遅延オプション「０」が設定されていると、その次には遅延処理可能な命令が配置されていないことを判定する。この場合、オブジェクトコードファイル４中における命令の配置は、図１４（ｂ）に示すようになる。また、この場合の処理において分岐命令の次にｎｏｐ命令を配置しないことが、第３実施例が従来技術と異なる大きな特徴の１つである。
【００３８】
また、ステップＳ１２において、遅延処理可能なワード数が「２」であった場合、コンパイラ２は、当該分岐命令の直前の命令が２ワード命令であるか否かを判定し（ステップＳ１７）、２ワード命令であれば(「ＹＥＳ」)ステップＳ１４と同様に、その直前の命令が、プログラムの流れで遅延処理が可能か否かを判定する（ステップＳ１８）。遅延処理が可能である場合(「ＹＥＳ」)、直前の命令と分岐命令とを入れ替えると共に、分岐命令の遅延オプションとして遅延処理選択部４１に「２」を設定する（ステップＳ１９）。
【００３９】
即ち、ＣＰＵ８は、遅延分岐命令３９をデコードした場合に遅延オプション「２」が設定されていると、その次には遅延処理可能な２ワード命令が配置されていることを判定する。この場合、オブジェクトコードファイル４中における命令の配置は、図１４（ｃ）に示すようになる。
一方、直前の命令が遅延処理不能であり、ステップＳ１８においてコンパイラ２が「ＮＯ」と判断すると、分岐命令の遅延オプションとして遅延処理選択部４１に「０」を設定する（ステップＳ２０）。
【００４０】
また、直前の命令が２ワード命令でなく、ステップＳ１７においてコンパイラ２が「ＮＯ」と判断すると、ステップＳ２１に移行する。ステップＳ２１〜Ｓ２３，Ｓ２７の処理は、基本的にステップＳ１３〜Ｓ１６の処理と同様であるが、遅延オプション１，０が設定されるのは遅延処理選択部４１である。
更に、コンパイラ２は、ステップＳ２３を実行すると、再度ステップＳ２１，Ｓ２２と同様の判定を行なう（ステップＳ２４，Ｓ２５）。そして、何れも「ＹＥＳ」と判定すると、ステップＳ１９と同様の処理を行なう（ステップＳ２６）。また、何れも「ＮＯ」と判定すると処理を終了する。
【００４１】
図１６は、各分岐命令３１，３５，３９について遅延オプション０〜２が設定された場合におけるＣＰＵ８のパイプライン処理状態を示すものである。（ａ）は、１ワード分岐命令３１または３９について遅延オプション＝０が設定された場合であり、遅延スロットは使用されず、パイプライン［２］は、ＩＦで停止する。（ｂ）は、１ワード分岐命令３１または３９について遅延オプション＝１が設定された場合であり、遅延スロットが使用されて、パイプライン［２］は、分岐命令３１または３９の次に配置された１ワード命令を実行する。
【００４２】
（ｃ）は、１ワード分岐命令３９について遅延オプション＝２が設定された場合であり、遅延スロットが使用されて、パイプライン［２］，［３］は、分岐命令３９の次に配置された２ワード命令、若しくは２つの１ワード命令を実行する。（ｄ）は、２ワード分岐命令３５について遅延オプション＝０が設定された場合であり、遅延スロットは使用されず、パイプライン［３］は停止する。（ｅ）は、２ワード分岐命令３５について遅延オプション＝１が設定された場合であり、遅延スロットが使用されて、パイプライン［３］は、分岐命令３５の次に配置された１ワード命令を実行する。
【００４３】
以上のように第３実施例によれば、ＣＰＵ８は、分岐命令３１，３５，３９における、遅延オプションの設定に応じてプログラム分岐を行なうか否かを決定するので、分岐命令３１等をデコードした段階で、当該命令については遅延分岐を行なわないことを判別できる。従って、そのようなケースでは、当該分岐命令の次にｎｏｐ命令を配置する必要はなくなるので、オブジェクトコードサイズを小さくすることが可能となる。
【００４４】
また、コンパイラ２は、分岐命令よりも前に記述されている命令が当該分岐命令の遅延スロットにて実行可能か否かを判定し、その実行可否に応じて遅延分岐オプションを設定すると共に、実行可能である場合は実行可能な命令を当該分岐命令の次に配置するので、ＣＰＵ８が上記のように遅延分岐処理を実行可能なオブジェクトプログラムを生成することができる。
【００４５】
（第４実施例）
図１７乃至図２３は本発明の第４実施例を示すものであり、第１実施例と同一部分には同一符号を付して説明を省略し、以下異なる部分についてのみ説明する。図１７は、補助演算装置１５の内部構成を示す機能ブロック図である。レジスタ部５１は、第２データバス（汎用バス）１４上に出力されるデータを、必要に応じてマルチプレクサ５２を介して取り込むようになっている。レジスタ部５１は、図１８に示す複数のデータレジスタＣ０〜Ｃ２９の集合として構成されている。これらのデータレジスタＣ０〜Ｃ２９は、使用される組み合わせに応じて行なわれる演算の種類が決定されている。
【００４６】
そして、命令デコーダ５３は、ＣＰＵ８によって第２アドレスバス（汎用バス）１３に出力されるアドレス（即ち、補助演算装置１５の内部レジスタを指定するアドレス）をデコードすることで、ＣＰＵ８により指定された演算命令をデコードするようになっている。そして、そのデコード結果に応じて、レジスタ制御ユニット５４に制御指令を出力し、レジスタ部５１を制御する。また、命令デコーダ５３は、演算部５５の制御を行うシーケンサ５６にも制御指令を出力するようになっている。
【００４７】
演算部５５は、レジスタ部５１を介して与えられるデータについて演算を行なうようになっており、その演算結果は、マルチプレクサ５２を介してレジスタ部５１にフィードバックされる。また、レジスタ部５１からの出力データは、第２データバス１４に対しても出力可能となっている。
また、命令デコーダ５３は、ＣＰＵ８によって専用命令信号ＣＯＰが与えられている場合にのみ、デコード動作を行うように構成されている。また、シーケンサ５６は、演算部５５が演算実行中の状態でＣＰＵ８によるアクセスが行われた場合に、ウェイト信号ＣＷＴをＣＰＵ８に対して出力するようになっている。
【００４８】
図１９は、ＣＰＵ８が備えている補助演算装置１５に対する転送命令５７のビット構成を示すものである。転送命令５７は、６ビットの命令部５８と、４ビットの第１オペランド部５９と、６ビットの第２オペランド部６０とで構成されている。そして、ＣＰＵ８は、この転送命令５７をデコードした場合は（即ち、パイプラインのステージＤＥＣにおいて）、割り込み処理の受付を禁止するように構成されている。
【００４９】
また、図２０は、ＣＰＵ８の内部構成を概略的に示すものである。ＣＰＵ８は、制御部２０、演算部１８、レジスタ部１９、信号出力部６１で構成されている。制御部２０の内部には、デコーダ６２と割り込み制御部６３とが配置されている。デコーダ６２は、命令のデコード結果に応じて信号出力部６１と割り込み制御部６３を制御するようになっている。また、デコーダ６２は、補助演算装置１５によってウェイト信号ＣＷＴが出力されると、パイプライン処理を一時停止させるように構成されている。そして、信号出力部６１は、補助演算装置１５に専用命令信号ＣＯＰを出力する。
【００５０】
次に、第４実施例の作用について図２１乃至図２３をも参照して説明する。図２１は、制御部２０のデコーダ６２が行うデコード処理の内容を、第４実施例に係る部分だけ示すフローチャートである。デコーダ６２は、デコード結果が補助演算装置１５への転送命令か否かを判断し（ステップＳ３１）、当該転送命令である場合は(「ＹＥＳ」) 割り込み制御部６３に割り込み禁止信号を出力する（ステップＳ３２）。また、パイプラインのステージがＭＥＭに移行すると、信号出力部６１によって専用命令信号ＣＯＰを出力させる（ステップＳ３３）。
【００５１】
図２２は、ＣＰＵ８が補助演算装置１５を用いた演算を行う場合に、コンパイラ２によって生成されたオブジェクトコードの一例である。［ｃｍｏｖ］が、補助演算装置１５に演算を行わせる場合に使用する専用命令である。即ち、［１］ＣＰＵ８のレジスタｒ１のデータを補助演算装置１５のレジスタＣ０に転送し、［２］レジスタｒ２のデータをレジスタＣ８に転送する。この場合の演算は符号付き８ビット乗算であり、その演算結果は、レジスタＣ０に格納される（図１８参照）。従って、［３］レジスタＣ０の内容をレジスタｒ１に読み出す。
【００５２】
図２３は、図２２のオブジェクトコードを実行する場合におけるパイプライン処理と、各信号の出力状態を示すものである。（ａ）に示すパイプライン［１］〜［３］は、図２２のコードに対応している。パイプライン［１］のステージがＭＥＭに移行すると、信号出力部６１は専用命令信号ＣＯＰを出力する。そして、ＣＰＵ８においては、ステージＤＥＣがパイプライン［１］〜［３］まで連続するようになり、デコーダ６２によって割り込み受付が禁止される。
【００５３】
また、上記割り込み禁止期間が終了するとパイプライン［２］の外部アクセスＭＥＭが行われ、その転送が終了すると補助演算装置１５は乗算を開始する。そして、ＣＰＵ８は、パイプライン［３］のステージＥＸＥの次に、レジスタＣ０の内容をレジスタｒ１に読み出すためのステージＭＥＭに移行するが、補助演算装置１５のシーケンサ５６は、命令デコーダ５３を介してそのアクセスを認識する。
【００５４】
この時、補助演算装置１５は未だ演算を終了していないので、シーケンサ５６は、ＣＰＵ８に対してウェイト信号ＣＷＴをアクティブにする。すると、パイプライン［３］のステージはＭＥＭに留まり一時停止状態となる。そして、補助演算装置１５が演算を終了すると、ウェイト信号ＣＷＴはインアクティブとなり、パイプライン［３］のステージＭＥＭが実行されて演算結果が読み出される。尚、ＣＰＵ８に対する割り込みはパイプライン［３］のステージＥＸＥから受付可能となるが、そのパイプライン［３］の処理が完了するまで割り込み処理は実行されない。
【００５５】
以上のように第４実施例によれば、ＣＰＵ８は、補助演算装置１５だけがデコード可能となる専用命令［ｃｍｏｖ］を備える。そして、その専用命令をデコードしている期間は割り込みの受付が禁止される。従って、ＣＰＵ８に、その他の周辺回路などのデバイスが接続されている場合でも、補助演算装置１５が、その他のデバイスによってアクセスされてしまうことを防止できる。
また、デコーダ６２によるデコード結果に基づいて、ＣＰＵ８の割り込み制御部６３が自動的に割り込み受付を禁止するので、ユーザが割り込み制御に関与する必要がなく、補助演算装置１５側より割り込み禁止信号を出力する必要もない。従って、ＣＰＵ８が補助演算装置１５にアクセスする場合に、より簡単に割り込み受付を禁止させることができる。
【００５６】
そして、コンパイラ２は、補助演算装置１５に実行させるオブジェクトコードを生成する際に、補助演算装置１５に対するアクセス命令が連続するように配置し、ＣＰＵ８が補助演算装置１５より演算結果を取得するまでの期間は割り込み処理が発生しないようにコンパイル処理する。従って、ＣＰＵ８は、補助演算装置１５を用いた演算処理を連続的に実行することができる。
【００５７】
また、マイコン６は、ＣＰＵ８と補助演算装置１５とを汎用バス１３，１４を介して接続して構成した。そして、ＣＰＵ８は、専用命令をデコードすると補助演算装置１５に対して専用命令信号ＣＯＰを出力し、補助演算装置１５は、専用命令信号が出力されている場合に、ＣＰＵ８によって与えられた演算命令をデコードする。従って、補助演算装置１５は、その他のデバイスによって不用意にアクセスが行われることを確実に排除することができる。
【００５８】
また、補助演算装置１５は、演算実行中にＣＰＵ８によるアクセスが発生すると、ＣＰＵ８が行なっている処理を一時停止させるためのウェイト信号ＣＷＴを出力し、ＣＰＵ８は、ウェイト信号ＣＷＴが出力されている期間はパイプライン処理を停止する。従って、ＣＰＵ８の割り込み処理の受付は、補助演算装置１５の演算が終了するまで禁止され続けるようになる。
【００５９】
（第５実施例）
図２４乃至図２６は、本発明の第５実施例を示すものである。図２４は、コンパイラ２の第５実施例にかかる部分の処理内容を示すフローチャートである。第５実施例では、コンパイラ２は、コンパイル処理を行なう場合のユーザの設定に応じて、演算を第４実施例のように補助演算装置１５を用いて行わせるか、或いは、図２６に示すように、ＲＯＭ７Ａの内部に用意されたライブラリ６４を使用して行なわせるかを選択することができるようになっている。
【００６０】
図２４は、乗算処理（例えば、ａ＝ｂ＊ｃ）を行う場合の例である。コンパイラ２は、乗算処理に対するユーザの指定を判定する（ステップＳ４１）。ライブラリ６４が指定された場合、コンパイラ２は、変数ｂの値をＣＰＵ８の汎用レジスタｒ４に転送するコードを生成し（ステップＳ４２）、続いて、変数ｃの値を汎用レジスタｒ５に転送するコードを生成する（ステップＳ４３）それから、ライブラリ６４を呼び出すコードを生成する（ステップＳ４４）。
図２５は、上述のようにして生成されたオブジェクトコードである。ＣＰＵ８によってライブラリ６４が呼び出されると、ライブラリ６４によって乗算処理（ａ＝ｂ＊ｃ）が実行され、積ａは、汎用レジスタｒ１にセットされる。従って、続くステップＳ４５では、汎用レジスタｒ１の値を変数ａに転送するようにコード生成する。
【００６１】
一方、ユーザによって補助演算装置１５を使用することが指定されると、第４実施例で図２２に示したコードを生成するためのコンパイル処理がステップＳ４６〜Ｓ５１で行なわれる。即ち、変数ｂの値をＣＰＵ８の任意の汎用レジスタｒｘに転送するコードを生成し（ステップＳ４６）、続いて、変数ｃの値を任意の汎用レジスタｒｙに転送するコードを生成する（ステップＳ４７）。それから、汎用レジスタｒｘの内容を、補助演算装置１５のレジスタｃ０に転送するコードを生成し（ステップＳ４８）、汎用レジスタｒｙの内容を、レジスタｃ８に転送するコードを生成する（ステップＳ４９）。そして、補助演算装置１５のレジスタｃ０の内容を、任意の汎用レジスタｒｚに転送するコードを生成する（ステップＳ５０）。最後に、汎用レジスタｒｚの内容を変数ａに転送するようにコード生成する（ステップＳ５１）。
【００６２】
以上のように第５実施例によれば、コンパイラ２は、オブジェクトコードにおける演算処理を補助演算装置１５に実行させるか、或いは、ライブラリ６４によって行なわせるかを、ユーザの設定に応じてソースコードファイル３単位で選択可能であるから、ユーザは、演算を高速に処理したい場合は補助演算装置１５を選択し、高速に処理する要請がない場合は、ライブラリ６４を選択するようにコンパイル処理させることが可能となる。
【００６３】
本発明は上記し且つ図面に記載した実施例にのみ限定されるものではなく、以下のような変形または拡張が可能である。
第２実施例において、通常割り込み処理で例外割り込み処理とは異なる独自の処理を行なう場合も、復帰命令の相違に応じてＣＰＵ８が実行するように構成しても良い。
第４実施例において、ＣＰＵが割り込みの受付を禁止する期間は、ＣＰＵの構成によってはパイプラインのステージＥＸＥであっても良い。
【図面の簡単な説明】
【００６４】
【図１】本発明の第１実施例であり、コンパイラによるコンパイル処理の内容を、本実施例にかかる部分のみ示すフローチャート
【図２】（ａ）はコンパイラによってコンパイルされたプログラムにおける通常割り込み処理のフローチャート、（ｂ）はそのプログラムをニモニック表現で示す図
【図３】割り込み復帰命令のビット構成を示す図
【図４】割り込み復帰命令をＣＰＵが実行する場合のパイプライン処理を示す図
【図５】従来のコンパイル処理によるオブジェクトプログラムに基づいて復帰命令が実行される場合のパイプライン処理を示す図
【図６】プログラム変換装置の構成を示す図
【図７】コンパイラによるコンパイル処理を概念的示す図
【図８】ワンチップマイコンの電気的構成を示す機能ブロック図
【図９】本発明の第２実施例であり、コンパイラによるコンパイル処理の内容を、第２実施例にかかる部分のみ示すフローチャート
【図１０】（ａ）は、例外割り込み処理のソースコードプログラム、（ｂ）はそのオブジェクトコードプログラムを示す図
【図１１】通常割り込み処理に関する図１０相当図
【図１２】ＣＰＵの内部レジスタであるシステムレジスタのビット構成を示す図
【図１３】本発明の第３実施例であり、コンパイラによるコンパイル処理の内容を、第３実施例にかかる部分のみ示すフローチャート
【図１４】図１３の処理結果例を示す図
【図１５】コンパイラによって生成される３タイプの遅延分岐命令のビット構成を示す図
【図１６】各分岐命令について遅延オプション０〜２が設定された場合におけるＣＰＵのパイプライン処理状態を示す図
【図１７】本発明の第４実施例であり、補助演算装置の内部構成を示す機能ブロック図
【図１８】補助演算装置によって実行される演算の種類と、その種類に応じたレジスタ設定の対応を示す図
【図１９】ＣＰＵが備えている補助演算装置に対する転送命令のビット構成を示す図
【図２０】ＣＰＵの内部構成を概略的に示す機能ブロック図
【図２１】ＣＰＵの制御部におけるデコーダが行うデコード処理の内容を、第４実施例に係る部分だけ示すフローチャート
【図２２】ＣＰＵが補助演算装置を用いた演算を行う場合に、コンパイラによって生成されたオブジェクトコードの一例を示す図
【図２３】図２２のオブジェクトコードを実行する場合におけるパイプライン処理と、各信号の出力状態を示す図
【図２４】本発明の第５実施例であり、コンパイラの第５実施例にかかる部分の処理内容を示すフローチャート
【図２５】図２４の処理によって生成されたオブジェクトコードを示す図
【図２６】図８相当図
【図２７】従来技術を示す図２相当図
【図２８】図１４相当図
【符号の説明】
【００６５】
１はパーソナルコンピュータ、２はコンパイラ、３はソースコードファイル、４はオブジェクトコードファイル、６はマイクロコンピュータ、７，７ＡはＲＯＭ（プログラムメモリ）、８はＲＩＳＣ型ＣＰＵ、１３は第２アドレスバス（汎用バス）、１４は第２データバス（汎用バス）、１５は補助演算装置、６４はライブラリ、１００はプログラムを示す。
【図１】
2007287186.tif 000003
【図２】
2007287186.tif 000004
【図３】
2007287186.tif 000005
【図４】
2007287186.tif 000006
【図５】
2007287186.tif 000007
【図６】
2007287186.tif 000008
【図７】
2007287186.tif 000009
【図８】
2007287186.tif 000010
【図９】
2007287186.tif 000011
【図１０】
2007287186.tif 000012
【図１１】
2007287186.tif 000013
【図１２】
2007287186.tif 000014
【図１３】
2007287186.tif 000015
【図１４】
2007287186.tif 000016
【図１５】
2007287186.tif 000017
【図１６】
2007287186.tif 000018
【図１７】
2007287186.tif 000019
【図１８】
2007287186.tif 000020
【図１９】
2007287186.tif 000021
【図２０】
2007287186.tif 000022
【図２１】
2007287186.tif 000023
【図２２】
2007287186.tif 000024
【図２３】
2007287186.tif 000025
【図２４】
2007287186.tif 000026
【図２５】
2007287186.tif 000027
【図２６】
2007287186.tif 000028
【図２７】
2007287186.tif 000029
【図２８】
2007287186.tif 000030