(57)【要約】【課題】  通常ケースと同等の性能を有し、プログラムの使用するメモリ容量を減らすことができるマイクロプロセッサ及びプログラムのコンパイル処理方法を提供する。【解決手段】  ＣＰＵ（中央処理装置）１００は、演算及び命令実行制御装置１０８と、命令レジスタ１１６と、ダミー命令に対応する複数の命令からなる共通化命令列を格納するサブ記憶レジスタ１１４と、演算及び命令実行制御装置１０８への制御信号を作成する命令デコーダ１１２とを有する。命令デコーダ１１２は、命令レジスタ１１６にダミー命令以外の命令が取り込まれたときは命令レジスタ１１６から出力される命令のデコードを行い、命令レジスタ１１６にダミー命令が取り込まれたときはサブ記憶レジスタ１１４から出力される命令のデコードを行う。【選択図】  図１
2014056446.tif 000002
【特許請求の範囲】
【請求項１】
ダミー命令を含むアセンブラコードが格納される記憶装置と、内部バスを介して前記記憶装置に接続される中央処理装置とを備え、
前記中央処理装置は、演算及び命令実行制御を行う演算及び命令実行制御装置と、実行すべき命令を保持する命令レジスタと、前記ダミー命令に対応する複数の命令からなる共通化命令列を格納するサブ記憶レジスタと、前記命令レジスタまたは前記サブ記憶レジスタから出力される命令のデコードを行い前記演算及び命令実行制御装置への制御信号を作成する命令デコーダとを有し、
前記命令デコーダは、前記命令レジスタに前記ダミー命令以外の命令が取り込まれたときは前記命令レジスタから出力される命令のデコードを行い、前記命令レジスタに前記ダミー命令が取り込まれたときは前記サブ記憶レジスタから出力される命令のデコードを行うことを特徴とするマイクロプロセッサ。
【請求項２】
前記ダミー命令は、命令コード、前記サブ記憶レジスタの開始番号に対応する命令開始位置、および前記ダミー命令に対応する複数の命令の命令実行数から１を引いた値である命令数を含むことを特徴とする請求項１に記載のマイクロプロセッサ。
【請求項３】
前記ダミー命令中の命令数を保持するレジスタと、前記演算及び命令実行制御装置から送られる命令更新信号をトリガとするカウンタとを有し、前記レジスタと前記カウンタの一致信号が出力されると、前記ダミー命令の次の命令が前記命令レジスタに取り込まれることを特徴とする請求項２に記載のマイクロプロセッサ。
【請求項４】
前記ダミー命令の命令コードおよび命令開始位置に基づいて、前記サブ記憶レジスタに格納された対応する共通化命令列の命令が選択されることを特徴とする請求項２または３に記載のマイクロプロセッサ。
【請求項５】
前記サブ記憶レジスタにおける共通化命令列は、前記内部バスを介して読み書きされることを特徴とする請求項１から４のいずれか１項に記載のマイクロプロセッサ。
【請求項６】
請求項１から５のいずれか１項に記載のマイクロプロセッサの記憶装置に格納されるダミー命令を含むアセンブラコードを生成するためのプログラムのコンパイル処理方法であって、
第１のソースプログラム領域と第２のソースプログラム領域を有するソースプラグラムをコンパイルするためのコンパイル処理と、前記ソースプラグラムのコンパイル後、前記第１のソースプログラム領域に対応するアセンブラコードを用いて、前記第２のソースプログラム領域に対応するアセンブラコード中の冗長な命令列を共通化するための共通化処理とを含み、
前記共通化処理は、冗長な命令列を探索する処理と、ｔ回以上冗長な命令列が見つかった場合その出現回数を記録しダミー命令と対応付けする処理と、前記記録した命令列を順に配置して命令列を共通化する処理と、前記共通化された命令列を対応する前記ダミー命令に置き換え、その他の命令を再配置する処理とを有することを特徴とするプログラムのコンパイル処理方法。
【請求項７】
前記記録した命令列を順に配置する場合、前記記録した命令列を頻出順にｘ番地の弱番から配置することを特徴とする請求項６に記載のプログラムのコンパイル処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マイクロプロセッサ及びプログラムのコンパイル処理方法に関するものである。
【背景技術】
【０００２】
ＲＩＳＣ（Reduced Instruction Set Computer）型のマイクロプロセッサは個々の命令を簡略化することによりパイプライン処理（並行して複数の命令を処理する方式）の効率を高め、処理性能の向上をはかっている。また低速な記憶装置へのアクセスを極力へらすため高速なレジスタを多数備え、レジスタ間での処理をすることで、処理性能の向上をはかっている。しかし、命令を簡略化したことにより、命令実行数が増えコンパイル後のアセンブラ命令数が増大した。さらに近年プログラムの複雑化、大容量化に伴い、記憶装置の大容量化が必要となり、マイクロプロセッサのチップ面積の増大化を招いている。また低速な記憶装置をアクセスすることが多くなったことで、パイプライン中にＣＰＵがストールしなければならないことも多く、パイプラインによる処理速度の向上も難しくなってきている。
【０００３】
図６は、従来のマイクロプロセッサの一構成例を示す図である。図示のように、マイクロプロセッサ６９０は、ＣＰＵ６００、記憶装置６０１および入出力制御装置６０２を含む。ＣＰＵ６００は、記憶装置６０１および入出力制御装置６０２と内部バス６０３を介して接続され、セレクタ６０４、アドレス加算器６０５、演算及び命令実行制御装置６０８、キャッシュ装置６０９、命令デコーダ６１２および命令レジスタ６１６を備える。また、周辺装置６５０は、ＣＰＵ６００と独立に動作できる装置であり、内部バス６０３を介してＣＰＵ６００と接続することができる。たとえば計時タイマ装置等である。また装置構成上周辺装置６５０はなくても良い。クロック生成装置６５１は、クロックを生成してチップ全体へ送り出す装置である。
【０００４】
ここで、ＣＰＵ６００は、中央処理装置で命令実行制御及び演算を行う装置である。記憶装置６０１は、ＲＡＭやＲＯＭなどの低速記憶装置である。入出力制御装置６０２は、装置外部からのデータやプログラムの入出力制御を行う装置である。内部バス６０３は、ＣＰＵ６００と記憶装置６０１や入出力制御装置６０２との間でデータのやり取りを行うための内部バスである。セレクタ６０４は、アドレス選択のためのセレクタである。アドレス加算器６０５は、命令アドレスに命令長の加算を行う。命令は固定長である。キャッシュ装置６０９は、データ及び命令をキャッシュするための高速記憶装置である。命令デコーダ６１２は、命令のデコードを行い演算及び命令実行制御装置６０８の処理回路の実行制御信号を作成する。演算及び命令実行制御装置６０８は、命令実行のための初期アドレス生成、アドレス更新タイミング生成、データ取り込みタイミング生成を行うとともに、セレクタ６０４、アドレス加算器６０５、キャッシュ装置６０９、命令デコーダ６１２の制御を行い、また演算を実行する装置である。
【０００５】
上記記憶装置６０１には、ソースプログラムをコンパイル処理したアセンブラコードのプログラムが格納されている。以下、従来のコンパイル処理について述べる。
図１２は、ソースプログラムをコンパイル処理する従来の処理例を示す図である。図中の左側のソースコードを含むソースプログラム１２００をコンパイルすると、コンパイル後１２０１に示すようにアセンブラコードが配置されるが、そこには冗長な命令列が多数存在する。
【０００６】
図２は、従来のマイクロプロセッサにおけるパイプライン処理例を示す図である。
ＳＴ１（ステージ１）では、演算及び命令実行制御装置６０８が初期アドレスをセットし、命令１を命令フェッチする（ＩＦ１）。キャッシュ装置６０９が出力する命令１を命令レジスタ６１６に取り込む。
ＳＴ２（ステージ２）では、命令レジスタ６１６が出力する命令１をデコードする（ＩＤ１）。また、命令２を命令フェッチする（ＩＦ２）。キャッシュ装置６０９が出力する命令２を命令レジスタ６１６に取り込む
ＳＴ３（ステージ３）では、命令１を実行して（ＥＸ１）、命令１の処理を終了する。また、命令レジスタ６１６が出力する命令２をデコードする（ＩＤ２）。さらに、命令３を命令フェッチする（ＩＦ３）。キャッシュ装置６０９が出力する命令３を命令レジスタ６１６に取り込む。
ＳＴ４（ステージ４）では、命令２を実行して（ＥＸ２）、命令２の処理を終了する。また、命令レジスタ６１６が出力する命令３をデコードする（ＩＤ３）。さらに、命令４を命令フェッチする（ＩＦ４）。キャッシュ装置６０９が出力する命令４を命令レジスタ６１６に取り込む。
ＳＴ５（ステージ５）では、命令３を実行して（ＥＸ３）、命令３の処理を終了する。また、命令レジスタ６１６が出力する命令４をデコードする（ＩＤ４）。
ＳＴ６（ステージ６）では、命令４を実行して（ＥＸ４）、命令４の処理を終了する。
命令が続く場合は上述のステージが繰り返され命令実行が進んで行く。この場合、冗長なコードが多数あるということは、同種の命令列の各命令に対してそれぞれ命令フェッチが行われるため、例えばＲＡＭ等の記憶装置の使用効率が悪い。
【０００７】
上述のように、ＲＩＳＣ型マイクロプロセッサ（ＬＳＩ）において、プログラムの複雑化に伴い低速な記憶装置（ＲＯＭ，ＲＡＭ）が増大化傾向にあり、チップコストに大きな影響を与えている。またＲＩＳＣ型マイクロプロセッサでは１命令を単純な動作にしているため、所望の処理を実現するためには多くの命令を必要とする。このため低速なＲＯＭ、ＲＡＭにアクセスする回数がふえ、パイプライン制御にＣＰＵのストール等の影響がでるおそれがある。そこで、低速記憶装置の容量を減らし、低速記憶装置へのアクセス回数を減らすことが課題となってきた。その解決方法の１つとして、記憶装置に入れるプログラムを圧縮して容量を減らすことで低速記憶装置へのアクセスを減らし、記憶容量を減らすことが考えられる。
【０００８】
図１１は、圧縮命令に係る従来のマイクロプロセッサの一構成例を示す図である。図中のマイクロプロセッサ１１９０において、ＣＰＵ１１００、記憶装置１１０１、入出力制御装置１１０２、内部バス１１０３、セレクタ１１０４、アドレス加算器１１０５、演算及び命令実行制御装置１１０８、キャッシュ装置１１０９、命令デコーダ１１１２、命令レジスタ１１１６、周辺装置１１５０およびクロック生成装置１１５１は、上述した図６のマイクロプロセッサ６９０における同名の構成要素に対応する。
図１１のマイクロプロセッサ１１９０が、図６のマイクロプロセッサ６９０と異なる点は、圧縮命令に係る圧縮伸張器１１３０を備える点である。圧縮伸張器１１３０は、圧縮命令を読解し、命令を圧縮命令が置かれているメモリから命令フェッチするものである。
【０００９】
図１０は、圧縮命令に係る従来のマイクロプロセッサにおけるパイプライン処理例を示す図である。
ＳＴ１（ステージ１）では、演算及び命令実行制御装置１１０８が初期アドレスをセットし、命令１を命令フェッチする（ＩＦ１）。キャッシュ装置１１０９が出力する命令１を命令レジスタ１１１６に取り込む。
ＳＴ２（ステージ２）では、命令レジスタ１１１６が出力する命令１をデコードする（ＩＤ１）。圧縮命令を命令フェッチする（ＩＦ６）。
ＳＴ３（ステージ３）では、命令１を実行して（ＥＸ１）、命令１の処理を終了する。圧縮命令を圧縮伸張器１１３０で読解し（ＩＤ６）、命令２を圧縮命令が置かれているメモリから命令フェッチする（ＩＦ２）。キャッシュ装置１１０９が出力する命令２を命令レジスタ１１１６に取り込む。
ＳＴ４（ステージ４）では、命令レジスタ１１１６が出力する命令２をデコードする（ＩＤ２）。命令３を命令フェッチする（ＩＦ３）。キャッシュ装置１１０９が出力する命令３を命令レジスタ１１１６に取り込む。
ＳＴ５（ステージ５）では、命令２を実行して（ＥＸ２）、命令２の処理を終了する。命令レジスタ１１１６が出力する命令３をデコードする（ＩＤ３）。命令４を命令フェッチする（ＩＦ４）。キャッシュ装置１１０９が出力する命令４を命令レジスタ１１１６に取り込む。
ＳＴ６（ステージ６）では、命令３を実行して（ＥＸ３）、命令３の処理を終了する。命令レジスタ１１１６が出力する命令４をデコードする（ＩＤ４）。
ＳＴ７（ステージ７）では、命令４を実行して（ＥＸ４）、命令４の処理を終了する。
命令が続く場合は上述のステージが繰り返され命令実行が進んで行く。
この種の方式は、例えば特許文献１に記載されている。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開２００１−３１８７８８号公報
【発明の概要】
【発明が解決しようとする課題】
【００１１】
従来のような圧縮命令を用いる場合、圧縮命令の伸張に伴う命令フェッチ、および圧縮命令の読解によりパイプラインにペナルティがある。また、圧縮命令の伸張のための命令およびデータの格納メモリが必要となる。上記特許文献１のものは、プログラム中の命令および命令列をより短い仮命令で置き換えて記憶装置に格納し、実行時にこの仮命令を対象となる命令および命令列に置き換えて実行するものである。しかし、この場合、仮命令と命令および命令列を同じ記憶装置内に格納しておくため、命令置き換え時、仮命令デコード後に、記憶装置へのアクセスが必要で、仮命令と通常命令の切り替え時パイプラインが乱れ、性能が悪化する。また、命令置き換えには、複雑な計算（圧縮された命令を伸張する回路等）を有するため、論理回路が複雑になる等の問題がある。
【００１２】
ところで、ＲＩＳＣ型マイクロプロセッサのプログラムコンパイル後のアセンブラ命令列を小さな単位で見ると、同じ様な命令列が存在する。小さな同様の命令列を１命令で置き換えることができれば、ＲＯＭ、ＲＡＭの使用量を減らすことができ、チップサイズを小さくできる。またプログラムサイズを小さくすることは、ＲＯＭ、ＲＡＭへのアクセスが少なくなることを意味し、キャッシュにない場合のペナルティが減ることになる。ただし、小さな同様の命令列を１命令で置き換えても性能が落ちないこと、制御論理が複雑にならないことが必要である。
【００１３】
本発明の目的は、通常ケースと同等の性能を有し、プログラムの使用するメモリ容量を減らすことができるマイクロプロセッサ及びプログラムのコンパイル処理方法を提供することにある。
【課題を解決するための手段】
【００１４】
本発明は、上記目的を達成するため以下のようなマイクロプロセッサ及びプログラムのコンパイル処理方法を提供する。
（１）ダミー命令を含むアセンブラコードが格納される記憶装置と、内部バスを介して前記記憶装置に接続される中央処理装置とを備え、
前記中央処理装置は、演算及び命令実行制御を行う演算及び命令実行制御装置と、実行すべき命令を保持する命令レジスタと、前記ダミー命令に対応する複数の命令からなる共通化命令列を格納するサブ記憶レジスタと、前記命令レジスタまたは前記サブ記憶レジスタから出力される命令のデコードを行い前記演算及び命令実行制御装置への制御信号を作成する命令デコーダとを有し、
前記命令デコーダは、前記命令レジスタに前記ダミー命令以外の命令が取り込まれたときは前記命令レジスタから出力される命令のデコードを行い、前記命令レジスタに前記ダミー命令が取り込まれたときは前記サブ記憶レジスタから出力される命令のデコードを行うことを特徴とするマイクロプロセッサ。
（２）前記ダミー命令は、命令コード、前記サブ記憶レジスタの開始番号に対応する命令開始位置、および前記ダミー命令に対応する複数の命令の命令実行数から１を引いた値である命令数を含むことを特徴とする上記（１）に記載のマイクロプロセッサ。
（３）前記ダミー命令中の命令数を保持するレジスタと、前記演算及び命令実行制御装置から送られる命令更新信号をトリガとするカウンタとを有し、前記レジスタと前記カウンタの一致信号が出力されると、前記ダミー命令の次の命令が前記命令レジスタに取り込まれることを特徴とする上記（２）に記載のマイクロプロセッサ。
（４）前記ダミー命令の命令コードおよび命令開始位置に基づいて、前記サブ記憶レジスタに格納された対応する共通化命令列の命令が選択されることを特徴とする上記（２）または（３）に記載のマイクロプロセッサ。
（５）前記サブ記憶レジスタにおける共通化命令列は、前記内部バスを介して読み書きされることを特徴とする上記（１）から（４）のいずれか１項に記載のマイクロプロセッサ。
（６）上記（１）から（５）のいずれか１項に記載のマイクロプロセッサの記憶装置に格納されるダミー命令を含むアセンブラコードを生成するためのプログラムのコンパイル処理方法であって、
第１のソースプログラム領域と第２のソースプログラム領域を有するソースプラグラムをコンパイルするためのコンパイル処理と、前記ソースプラグラムのコンパイル後、前記第１のソースプログラム領域に対応するアセンブラコードを用いて、前記第２のソースプログラム領域に対応するアセンブラコード中の冗長な命令列を共通化するための共通化処理とを含み、
前記共通化処理は、冗長な命令列を探索する処理と、ｔ回以上冗長な命令列が見つかった場合その出現回数を記録しダミー命令と対応付けする処理と、前記記録した命令列を順に配置して命令列を共通化する処理と、前記共通化された命令列を対応する前記ダミー命令に置き換え、その他の命令を再配置する処理とを有することを特徴とするプログラムのコンパイル処理方法。
（７）前記記録した命令列を順に配置する場合、前記記録した命令列を頻出順にｘ番地の弱番から配置することを特徴とする上記（６）に記載のプログラムのコンパイル処理方法。
【発明の効果】
【００１５】
本発明によれば、通常ケースと同等の性能を有し、プログラムの使用するメモリ容量を減らすことができる。具体的には、ダミー命令をレジスタ内にある共通の処理に置き換える。本発明では、本来の共通化コードをそのまま実行した場合とほぼ同様の処理時間で実行する効果がある。また本発明では、共通処理をダミー命令で置き換えたことにより記憶装置のアセンブラコード量を削減する効果がある。さらに、製品全体から見ると、本発明では、小規模な論理追加・変更でチップの面積増加を抑える効果がある。また本発明では、アセンブラコード量の削減により低速な記憶装置へのアクセスを減らすことができ、結果としてスループットを向上させる効果がある。さらに、本発明により、アセンブラコード削減により記憶装置の使用量を減らすことができる。同じ処理を行う場合なら記憶装置の実装容量を減らすことができチップ面積を減らす効果がある。記憶装置の実装容量が同じであるならコードの削減効果によりより多くの処理を入れ込むことができる効果がある。
【００１６】
このような効果が得られる理由は次のとおりである。すなわち、数命令の命令列をダミー命令１命令に置き換えることによりプログラムをコンパイルした時のコード量を削減できるからである。共通化命令列をサブ記憶レジスタに記憶していることで、ダミー命令の命令フェッチが完了（命令が確定）した時点でダミー命令の命令コード（固定値）と命令開始位置から命令デコーダに送る命令の選択をキャッシュ装置側からサブ記憶レジスタ側へ切り替え、ダミー命令の次主命令アドレスを次主命令アドレスレジスタに記憶する。ダミー命令の命令コードと命令開始位置からサブ記憶レジスタ内に格納されている共通化命令列を選択し、この選択した共通化命令列をデコード装置に送り、以降セットされたアドレスに従い命令を実行してゆく。一方命令列の終了アドレスはダミー命令の命令数フィールドより作成され実行アドレスと比較器において比較される。比較器においては、アドレスが一致した場合は命令フェッチアドレスを次命令アドレスに切り替えるための信号を出力する。アドレス切り替え信号により先行命令フェッチアドレスを次主命令アドレスレジスタの値に切り替え、命令の先行フェッチを行う。これによりダミー命令から共通化命令列に切り替え、共通化命令からダミー命令の次命令への切り替えがパイプラインを乱すことなく行える。以上により共通化命令列をダミー命令で置き換えて実行してもほぼ同等の実行時間を維持でき、共通化命令列をダミー命令で置き換え記憶装置内のコード量を削減することにより、記憶装置の容量を削減しチップ面積を小さくできる。例えば、御用マイクロコンピュータのチップ面積を小さくできる。
【図面の簡単な説明】
【００１７】
【図１】本発明に係るマイクロプロセッサの一構成例を示す図である。
【図２】従来のマイクロプロセッサにおけるパイプライン処理例を示す図である。
【図３】本発明に係るマイクロプロセッサにおけるパイプライン処理例を示す図である。
【図４】本発明におけるダミー命令のフォーマットの一例を示す図である。
【図５】ソースプログラムをアセンブラコードにコンパイル処理する本発明の処理例を示す図である。
【図６】従来のマイクロプロセッサの一構成例を示す図である。
【図７】アセンブラコードのメモリ配置の一例を示す図である。
【図８】ｘ番地に格納された命令列と対応するダミー命令を示す図である。
【図９】命令共通化コンパイラ処理の一例を説明するためのフローチャートである。
【図１０】圧縮命令に係る従来のマイクロプロセッサにおけるパイプライン処理例を示す図である。
【図１１】圧縮命令に係る従来のマイクロプロセッサの一構成例を示す図である。
【図１２】ソースプログラムをコンパイル処理する従来の処理例を示す図である。
【発明を実施するための形態】
【００１８】
図１は、本発明に係るマイクロプロセッサの一構成例を示す図である。図示のように、マイクロプロセッサ１９０は、ＣＰＵ１００、記憶装置１０１および入出力制御装置１０２を含む。ＣＰＵ１００は、記憶装置１０１および入出力制御装置１０２と内部バス１０３を介して接続され、セレクタ１０４、アドレス加算器１０５、次主命令アドレスレジスタ１０７、演算及び命令実行制御装置１０８、キャッシュ装置１０９、レジスタ１１０、比較器１１１、命令デコーダ１１２、セレクタ１１３、サブ記憶レジスタ１１４、アドレス生成器１１５、命令レジスタ１１６、およびカウンタ１１７を備える。また、周辺装置１５０は、ＣＰＵ１００と独立に動作できる装置であり、内部バス１０３を介してＣＰＵ１００と接続することができる。たとえば計時タイマ装置等である。また装置構成上周辺装置１５０はなくても良い。クロック生成装置１５１は、クロックを生成してチップ全体へ送り出す装置である。
【００１９】
ここで、ＣＰＵ１００は、中央処理装置で命令実行制御及び演算を行う装置である。記憶装置１０１は、ＲＡＭやＲＯＭなどの低速記憶装置である。入出力制御装置１０２は、装置外部からのデータやプログラムの入出力制御を行う装置である。内部バス１０３は、ＣＰＵ１００と記憶装置１０１や入出力制御装置１０２との間でデータのやり取りを行うための内部バスである。セレクタ１０４は、アドレス選択のためのセレクタである。アドレス加算器１０５は、命令アドレスに命令長の加算を行う。命令は固定長である。キャッシュ装置１０９は、データ及び命令をキャッシュするための高速記憶装置である。これは、本例では記憶装置１０１から内部バス１０３を介して命令やデータを次処理装置に送るための中継装置となっているが、構成によってはキャッシュ装置を通らず次処理装置に命令及びデータを送るパスとキャッシュ装置経由で命令及びデータを送る並列なパスが存在してもよい。
【００２０】
命令デコーダ１１２は、命令のデコードを行い演算及び命令実行制御装置１０８の処理回路の実行制御信号を作成する。命令レジスタ１１６は、実行する命令を保持するレジスタである。演算及び命令実行制御装置１０８は、命令実行のための初期アドレス生成、アドレス更新タイミング生成、データ取り込みタイミング生成を行うとともに、セレクタ１０４、アドレス加算器１０５、キャッシュ装置１０９、命令デコーダ１１２の制御を行い、また演算を実行する装置である。さらにこれは実行命令を送出する。レジスタ１１０は、ダミー命令時、ダミー命令の命令数を保持するレジスタである。アドレス生成器１１５は、サブ記憶レジスタ１１４の先頭アドレス＋命令開始位置×命令長で計算されるアドレスを生成する。
【００２１】
カウンタ１１７は、演算及び命令実行制御装置１０８から送られる命令更新信号をトリガとするカウンタである。これは比較一致信号を検出するか命令レジスタ１１６から送出されるダミー命令の命令コードを検出すると初期化される。比較器１１１は、レジスタ１１０とカウンタ１１７の比較を行う比較器である。これはレジスタ１１０とカウンタ１１７が一致した場合一致信号を出力する。セレクタ１１３に出力される一致信号はセレクタ１０４に出力される信号より１サイクル遅い信号となるようフリップフロップを通した信号になっている。次主命令アドレスレジスタ１０７は、戻り先命令アドレスを格納するレジスタである。これはサブ記憶レジスタ１１４以外のアドレス時に更新され、サブ記憶レジスタ１１４のアドレス時はデータが保持される構造となっている。サブ記憶レジスタ１１４は、共通化命令列及びその共通化命令列で使用されるデータを格納するレジスタである。これは内部バス１０３を介して読み書きされる。
【００２２】
このように、本マイクロプロセッサは、ダミー命令を含むアセンブラコードが格納される記憶装置１０１と、内部バス１０３を介して記憶装置１０１に接続されるＣＰＵ（中央処理装置）１００とを備える。ここで、ＣＰＵ１００は、演算及び命令実行制御を行う演算及び命令実行制御装置１０８と、実行すべき命令を保持する命令レジスタ１１６と、ダミー命令に対応する複数の命令からなる共通化命令列を格納するサブ記憶レジスタ１１４と、命令レジスタ１１６またはサブ記憶レジスタ１１４から出力される命令のデコードを行い演算及び命令実行制御装置１０８への制御信号を作成する命令デコーダ１１２とを有する。この命令デコーダ１１２は、命令レジスタ１１６にダミー命令以外の命令が取り込まれたときは命令レジスタ１１６から出力される命令のデコードを行い、命令レジスタ１１６にダミー命令が取り込まれたときはサブ記憶レジスタ１１４から出力される命令のデコードを行う。また、ダミー命令中の命令数を保持するレジスタ１１０と、演算及び命令実行制御装置１０８から送られる命令更新信号をトリガとするカウンタ１１７とを有しており、レジスタ１１０とカウンタ１１７の一致信号が出力されると、ダミー命令の次の命令が命令レジスタ１１６に取り込まれる。
本発明と従来のものとを比較すると、従来の圧縮命令方式では命令を圧縮して実行時に伸張するのに対して、本発明では命令列自体をレジスタに格納しておく点で異なる。また本発明では伸長回路が不要である。さらに本発明では伸張のための辞書に相当するデータも不要であるためＣＰＵよりも低速な記憶装置にアクセスも発生しない。
【００２３】
上述のように記憶装置１０１には、ソースプログラムをコンパイル処理したダミー命令を含むアセンブラコードのプログラムが格納される。以下、そのコンパイル処理方法について説明する。
図５は、ソースプログラムをアセンブラコードにコンパイル処理する本発明の処理例を示す図である。図において、ソースコードを含むソースプログラム５００をコンパイルすると、コンパイル後：共通化前５１０に示すようなアセンブラコードが配置される。さらに命令列を共通化した共通化後には、コンパイル後：共通化後５５０に示すようなアセンブラコードが配置される。
【００２４】
図５において、ソースプラグラム５００は、共通化対象外にしたいソースプログラム領域を共通化除外開始コンパイラ指示５０１と共通化除外終了コンパイラ指示５０２で挟み込む。本例では共通化対象外の領域が一ヶ所であるが数ヶ所あっても構わない。ソースプラグラムをコンパイルした後のアセンブラコードのうち、共通化除外開始指示５１１，５５１と共通化除外終了指示５１２，５５２で挟まれたアセンブラコード５１３とアセンブラコード５５３は共通化対象外であり、コンパイル後：共通化前５１０とコンパイル後：共通化後５５０で両者のアセンブラコードに変化はない。ここでコンパイラ共通化除外が必要な理由は、その部分のプログラムを用いて共通化処理を実行するためである。例えば、図５の右下に記載のようなｘ番地５２０から配置されている共通化命令列５２１及びデータをサブ記憶レジスタ１１４に最初に書き込むときの処理等を実行するための処理プログラムが必要となるからである。
【００２５】
ここで、コンパイル後：共通化前５１０はコンパイル実行途中を示しており、共通化除外開始指示５１１と共通化除外終了指示５１２を有する点で従来のコンパイラ結果と異なる。以下に、コンパイル後：共通化前５１０からコンパイル後：共通化後５５０への命令共通化コンパイラ処理方法について説明する。
【００２６】
図９は、命令共通化コンパイラ処理の一例を説明するためのフローチャートである。図示のように、処理９１０にて、コンパイル後：共通化前５１０のアセンブラコード５１４に対し命令共通化コンパイルを開始する。処理９１１にて、アセンブラコード５１４の領域の探索が終了したかどうかを判定する。探索が終了していない場合、次の処理９１２を実行する。処理９１２にて、冗長な命令列を探索する。ここで冗長な命令列とは、特定の命令列（例えば命令１と命令２の命令列）が複数回出現する命令列をいう。処理９１３にて、ｔ回以上冗長な命令列が見つかった場合、その出現回数を記録し、ダミー命令と対応付けし記録する。なお出現条件ｔはコンパイル時変数指定する。以下、冗長な命令列とダミー命令との対応付けについて説明する。
【００２７】
図７は、アセンブラコードのメモリ配置の一例を示す図である。図において、配置７１０は、本例におけるアセンブラコード５１４の命令配置を表す。配置７５０は、本例におけるアセンブラコード５５４の命令配置を表す。配置７３０は、本例における共通化命令列５２１の命令配置を表す。本例では、アセンブラコード５１４の命令配置において、アセンブラコード７１１には、命令１と命令２の命令列＝ｊ個、命令１と命令２と命令７の命令列＝ｙ個、命令４と命令５の命令列＝ｚ個（ｊ＞ｙ＞ｚ＞＝ｔ）が存在し、その他の冗長命令はないものとする。本例では、図７に示すように、命令１と命令２の命令列をダミー命令１と対応付け、また命令１と命令２と命令７の命令列をダミー命令２と対応付け、さらに命令４と命令５の命令列をダミー命令３と対応付ける。
【００２８】
図９に戻って説明する。処理９１３が終了したら処理９１１に戻り、処理９１１から処理９１３を繰り返す。処理９１１にてアセンブラコード５１４の領域の探索が終了したら処理９１４に移行する。処理９１４にて、図７右下の配置７３０に示すように、記録していた命令列を頻出順にｘ番地の弱番から配置する。図７において、配置７３０は共通化命令列５２１の命令列の最終的な配置の詳細を示す。本例の場合、上述のように冗長な命令列の個数の関係が「ｊ＞ｙ＞ｚ＞＝ｔ」であることから、命令１と命令２の命令列が最も多く、次に命令１と命令２と命令７の命令列が多く、命令４と命令５の命令列は最も少ない。このため、配置７３０には、ｘ番地から命令１、命令２、命令７、命令４、命令５のように配置される。命令５以降は空である。また、命令１と命令２の命令列と命令１と命令２と命令７の命令列の重複部分（命令１と命令２）はまとめられる。このように冗長な命令列は共通化され、共通化命令列５２１が生成される。そして処理９１５にて、図７中の曲線矢印に示すように、最も長い命令列である命令１と命令２と命令７の命令列をダミー命令２に、次に命令１と命令２の命令列をダミー命令１に、命令４と命令５の命令列をダミー命令３に置き換え、その他の命令を再配置する。図７において、配置７５０はダミー命令に置き換え後、その他の命令を含め命令およびデータの再配置を行った結果である。本例では命令のみ記載してあるが、命令で使用するオペランドデータが配置７５０に混じっていてもよい。その後、処理９１６にてコンパイル処理終了となる。
【００２９】
このように、マイクロプロセッサ１９０の記憶装置１０１に格納されるダミー命令を含むアセンブラコードを生成するためのプログラムのコンパイル処理方法は、第１のソースプログラム領域と第２のソースプログラム領域を有するソースプラグラムをコンパイルするためのコンパイル処理と、ソースプラグラムのコンパイル後、第１のソースプログラム領域に対応するアセンブラコード（共通化除外部分）を用いて、第２のソースプログラム領域に対応するアセンブラコード（共通化処理部分）中の冗長な命令列を共通化するための共通化処理とを含む。この共通化処理は、冗長な命令列を探索する処理と、ｔ回以上冗長な命令列が見つかった場合その出現回数を記録しダミー命令と対応付けする処理と、記録した命令列を順に配置して命令列を共通化する処理と、共通化された命令列を対応する前記ダミー命令に置き換え、その他の命令を再配置する処理とを有する。ここで、記録した命令列を順に配置する場合、上述のように記録した命令列を頻出順にｘ番地の弱番から配置することができる。
【００３０】
図４は、本発明におけるダミー命令のフォーマットの一例を示す図である。ダミー命令は、固定長命令セットであり、命令コード、命令開始位置および命令数を含む。命令長はシステムによる。命令開始位置は、命令列の開始位置を表し、サブ記憶レジスタの開始番号に対応する。命令数は、命令列の終了条件を示し、命令実行数−１の値である。例えば命令実行数＝２のとき、命令数のフィールドには「１」が設定される。このように、ダミー命令は、命令コード、サブ記憶レジスタの開始番号に対応する命令開始位置、およびダミー命令に対応する複数の命令の命令実行数から１を引いた値である命令数を含む。
【００３１】
図８は、ｘ番地に格納された命令列と対応するダミー命令を示す図である。これは、図７の配置７５０：アセンブラコード５５４の命令配置におけるダミー命令１、ダミー命令２、およびダミー命令３を図４に示すダミー命令のフォーマットの形式で表したものである。ダミー命令１は、図７の配置７３０：共通化命令列５２１の命令配置から命令コード８１０となり、ダミー命令２は命令コード８２０となり、ダミー命令３は命令コード８３０となる。以上より、図７の配置７５０：アセンブラコード５５４の命令配置において、アセンブラコード５１４における命令１と命令２のｊ個の命令列がダミー命令１に置き換えられ、また命令１と命令２と命令７のｙ個の命令列がダミー命令２に置き換えられ、さらに命令４と命令５のｚ個の命令列がダミー命令３に置き換えられることから、各命令の命令長を２バイトとすると、（２ｊ−ｊ）×２バイト＋（３ｙ−ｙ）×２バイト＋（２ｚ−ｚ）×２バイトの領域を、命令共通化前の配置７１０：アセンブラコード５１４の命令配置に比べ少なくできる。なお本例では、命令長を２バイトの固定長にしたが命令長は２バイト以上で可変長でも構わない。
【００３２】
図３は、本発明に係るマイクロプロセッサにおけるパイプライン処理例を示す図である。マイクロプロセッサ起動後、共通化対象外のアセンブラコードまたは外部から入出力制御装置１０２の制御のもと内部バス１０３を通して共通化命令列をサブ記憶レジスタ１１４に格納しておく。本例では、命令２と命令３を共通化命令とする。
ＳＴ１（ステージ１）では、演算及び命令実行制御装置１０８が初期アドレスをセットし、命令１を命令フェッチする（ＩＦ１）。
【００３３】
ＳＴ２（ステージ２）では、命令レジスタ１１６が出力する命令１をデコードする（ＩＤ１）。命令２に関し、ダミー命令を命令フェッチする（ＩＦ５）。キャッシュ装置１０９が出力するダミー命令を命令レジスタ１１６に取り込む。アドレス生成器１１５は、キャッシュ装置１０９が出力するダミー命令の命令コード及び命令開始位置情報からサブ記憶レジスタ１１４の実行アドレスを生成する。キャッシュ装置１０９が出力するダミー命令の命令コードよりセレクタ１０４はアドレス生成器１１５が出力するアドレスを選択し出力する。セレクタ１１３は、セレクタ１０４で示される命令アドレスに従いサブ記憶レジスタ１１４内の共通化命令２を命令デコーダ１１２に送る。このようにダミー命令の命令コードおよび命令開始位置に基づいて、サブ記憶レジスタ１１４に格納された対応する共通化命令列の命令が選択される。アドレス加算器１０５は、セレクタ１０４の出力するアドレスに命令長を加算する。キャッシュ１０９が出力するダミー命令の命令コードからカウンタ１１７に初期値をセットする。キャッシュ１０９が出力するダミー命令の命令コードを検出したため、命令数（実行命令数−１の値が入っている）をレジスタ１１０にセットする。本例の場合、２つの命令の共通化命令を実行するので１がセットされる。
【００３４】
ＳＴ３（ステージ３）では、命令１を実行して（ＥＸ１）、命令１の処理を終了する。命令２に関し、サブ記憶レジスタ１１４が出力する共通化命令２をデコードする（ＩＤ２）。命令３に関し、共通化命令３を選択する（ＩＳ３）。セレクタ１１３は、セレクタ１０４で示される命令アドレスに従い、サブ記憶レジスタ１１４内の共通化命令３を命令デコーダ１１２に送る。演算及び命令実行制御装置１０８より命令実行信号が出力されカウンタ１１７に１が加算される。
【００３５】
ＳＴ４（ステージ４）では、命令２に関し、共通化命令２を実行して（ＥＸ２）、共通化命令２の処理を終了する。命令３に関し、共通化命令３をデコードする（ＩＤ３）。命令４を命令フェッチする（ＩＦ４）。比較器１１１においてレジスタ１１０が示す値とカウンタ１１７が一致し、一致信号が出力される。セレクタ１０４では、比較器１１１の一致信号から次主命令アドレスレジスタ１０７のアドレスを選択し、キャッシュ装置１０９に送出する。キャッシュ装置１０９では、セレクタ１０４の値に従いダミー命令の次命令である命令４を送出する。キャッシュ装置１０９が送出した命令４を命令レジスタ１１６に取り込む。セレクタ１０４は、命令レジスタ１１６が出力する命令４の命令コードより、アドレス加算器１０５の値を出力する。セレクタ１１３は、セレクタ１０４で示される命令アドレスに従い、命令レジスタ１１６の命令４を命令デコーダ１１２に送出する。セレクタ１０４から出力されたアドレスにアドレス加算器１０５で命令長が加算されセレクタ１０４に出力される。
【００３６】
ＳＴ５（ステージ５）では、命令３に関し、共通化命令３を実行して（ＥＸ３）、共通化命令３の処理を終了する。命令４に関し、命令レジスタ１１６が出力する命令４をデコードする（ＩＤ４）。
ＳＴ６（ステージ６）では、命令４を実行して（ＥＸ４）、命令４の処理を終了する。
以上のように本発明によれば、命令の切り替えがパイプラインを乱すことなく実行できる。なお、サブ記憶レジスタの使用方法として、大規模なループを１つだけ入れて使用する例がある。この場合、常時キャッシュインと同じ効果を生む。
【符号の説明】
【００３７】
１００  ＣＰＵ
１０１  記憶装置
１０２  入出力制御装置
１０３  内部バス
１０４  セレクタ
１０５  アドレス加算器
１０７  次主命令アドレスレジスタ
１０８  演算及び命令実行制御装置
１０９  キャッシュ装置
１１０  レジスタ
１１１  比較器
１１２  命令デコーダ
１１３  セレクタ
１１４  サブ記憶レジスタ
１１５  アドレス生成器
１１６  命令レジスタ
１１７  カウンタ
１５０  周辺装置
１５１  クロック生成装置
１９０  マイクロプロセッサ
【図１】
2014056446.tif 000003
【図２】
2014056446.tif 000004
【図３】
2014056446.tif 000005
【図４】
2014056446.tif 000006
【図５】
2014056446.tif 000007
【図６】
2014056446.tif 000008
【図７】
2014056446.tif 000009
【図８】
2014056446.tif 000010
【図９】
2014056446.tif 000011
【図１０】
2014056446.tif 000012
【図１１】
2014056446.tif 000013
【図１２】
2014056446.tif 000014