(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】5965262
(24)【登録日】2016年7月8日
(45)【発行日】2016年8月3日
(54)【発明の名称】マイクロプロセッサ及びプログラムのコンパイル処理方法
(51)【国際特許分類】
G06F 9/318 20060101AFI20160721BHJP
G06F 9/45 20060101ALI20160721BHJP
【FI】
G06F9/30 320C
G06F9/44 322F
【請求項の数】4
【全頁数】15
(21)【出願番号】特願2012-201009(P2012-201009)
(22)【出願日】2012年9月12日
(65)【公開番号】特開2014-56446(P2014-56446A)
(43)【公開日】2014年3月27日
【審査請求日】2015年7月3日
(73)【特許権者】
【識別番号】000233295
【氏名又は名称】株式会社日立情報通信エンジニアリング
(74)【代理人】
【識別番号】100090583
【弁理士】
【氏名又は名称】田中 清
(74)【代理人】
【識別番号】100098110
【弁理士】
【氏名又は名称】村山 みどり
(72)【発明者】
【氏名】池浦 秀明
【審査官】
清木 泰
(56)【参考文献】
【文献】
特開2002−318686(JP,A)
【文献】
特開平04−075138(JP,A)
【文献】
特開2000−267848(JP,A)
【文献】
特開昭62−162143(JP,A)
【文献】
特開2011−243134(JP,A)
【文献】
特開2008−129851(JP,A)
【文献】
特開2003−022180(JP,A)
【文献】
特開平04−370832(JP,A)
【文献】
中西恒夫,中野猛,福田晃,辞書式コード圧縮支援機構の遺伝的アルゴリズムによる最適化,情報処理学会研究報告,日本,社団法人情報処理学会,2001年 5月11日,第2001巻,第39号,(2001-ARC-143),Pages:31〜36
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/30− 9/355
G06F 9/40− 9/42
G06F 9/45
G06F 9/38
(57)【特許請求の範囲】
【請求項1】
ダミー命令を含むアセンブラコードが格納される記憶装置と、内部バスを介して前記記憶装置に接続される中央処理装置とを備え、
前記中央処理装置は、演算及び命令実行制御を行う演算及び命令実行制御装置と、実行すべき命令を保持する命令レジスタと、前記ダミー命令に対応する複数の命令からなる共通化命令列を格納するサブ記憶レジスタと、前記命令レジスタまたは前記サブ記憶レジスタから出力される命令のデコードを行い前記演算及び命令実行制御装置への制御信号を作成する命令デコーダとを有し、
前記命令デコーダは、前記命令レジスタに前記ダミー命令以外の命令が取り込まれたときは前記命令レジスタから出力される命令のデコードを行い、前記命令レジスタに前記ダミー命令が取り込まれたときは前記サブ記憶レジスタから出力される命令のデコードを行うこと、および
前記ダミー命令は、命令コード、前記サブ記憶レジスタの開始番号に対応する命令開始位置、および前記ダミー命令に対応する複数の命令の命令実行数から1を引いた値である命令数を含むことを特徴とするマイクロプロセッサ。
【請求項2】
前記ダミー命令中の命令数を保持するレジスタと、前記演算及び命令実行制御装置から送られる命令更新信号をトリガとするカウンタとを有し、前記レジスタと前記カウンタの一致信号が出力されると、前記ダミー命令の次の命令が前記命令レジスタに取り込まれることを特徴とする請求項1に記載のマイクロプロセッサ。
【請求項3】
前記ダミー命令の命令コードおよび命令開始位置に基づいて、前記サブ記憶レジスタに格納された対応する共通化命令列の命令が選択されることを特徴とする請求項1または2に記載のマイクロプロセッサ。
【請求項4】
前記サブ記憶レジスタにおける共通化命令列は、前記内部バスを介して読み書きされることを特徴とする請求項1から3のいずれか1項に記載のマイクロプロセッサ。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、マイクロプロセッサ及びプログラムのコンパイル処理方法に関するものである。
【背景技術】
【0002】
RISC(Reduced Instruction Set Computer)型のマイクロプロセッサは個々の命令を簡略化することによりパイプライン処理(並行して複数の命令を処理する方式)の効率を高め、処理性能の向上をはかっている。また低速な記憶装置へのアクセスを極力へらすため高速なレジスタを多数備え、レジスタ間での処理をすることで、処理性能の向上をはかっている。しかし、命令を簡略化したことにより、命令実行数が増えコンパイル後のアセンブラ命令数が増大した。さらに近年プログラムの複雑化、大容量化に伴い、記憶装置の大容量化が必要となり、マイクロプロセッサのチップ面積の増大化を招いている。また低速な記憶装置をアクセスすることが多くなったことで、パイプライン中にCPUがストールしなければならないことも多く、パイプラインによる処理速度の向上も難しくなってきている。
【0003】
図6は、従来のマイクロプロセッサの一構成例を示す図である。図示のように、マイクロプロセッサ690は、CPU600、記憶装置601および入出力制御装置602を含む。CPU600は、記憶装置601および入出力制御装置602と内部バス603を介して接続され、セレクタ604、アドレス加算器605、演算及び命令実行制御装置608、キャッシュ装置609、命令デコーダ612および命令レジスタ616を備える。また、周辺装置650は、CPU600と独立に動作できる装置であり、内部バス603を介してCPU600と接続することができる。たとえば計時タイマ装置等である。また装置構成上周辺装置650はなくても良い。クロック生成装置651は、クロックを生成してチップ全体へ送り出す装置である。
【0004】
ここで、CPU600は、中央処理装置で命令実行制御及び演算を行う装置である。記憶装置601は、RAMやROMなどの低速記憶装置である。入出力制御装置602は、装置外部からのデータやプログラムの入出力制御を行う装置である。内部バス603は、CPU600と記憶装置601や入出力制御装置602との間でデータのやり取りを行うための内部バスである。セレクタ604は、アドレス選択のためのセレクタである。アドレス加算器605は、命令アドレスに命令長の加算を行う。命令は固定長である。キャッシュ装置609は、データ及び命令をキャッシュするための高速記憶装置である。命令デコーダ612は、命令のデコードを行い演算及び命令実行制御装置608の処理回路の実行制御信号を作成する。演算及び命令実行制御装置608は、命令実行のための初期アドレス生成、アドレス更新タイミング生成、データ取り込みタイミング生成を行うとともに、セレクタ604、アドレス加算器605、キャッシュ装置609、命令デコーダ612の制御を行い、また演算を実行する装置である。
【0005】
上記記憶装置601には、ソースプログラムをコンパイル処理したアセンブラコードのプログラムが格納されている。以下、従来のコンパイル処理について述べる。
図12は、ソースプログラムをコンパイル処理する従来の処理例を示す図である。図中の左側のソースコードを含むソースプログラム1200をコンパイルすると、コンパイル後1201に示すようにアセンブラコードが配置されるが、そこには冗長な命令列が多数存在する。
【0006】
図2は、従来のマイクロプロセッサにおけるパイプライン処理例を示す図である。
ST1(ステージ1)では、演算及び命令実行制御装置608が初期アドレスをセットし、命令1を命令フェッチする(IF1)。キャッシュ装置609が出力する命令1を命令レジスタ616に取り込む。
ST2(ステージ2)では、命令レジスタ616が出力する命令1をデコードする(ID1)。また、命令2を命令フェッチする(IF2)。キャッシュ装置609が出力する命令2を命令レジスタ616に取り込む
ST3(ステージ3)では、命令1を実行して(EX1)、命令1の処理を終了する。また、命令レジスタ616が出力する命令2をデコードする(ID2)。さらに、命令3を命令フェッチする(IF3)。キャッシュ装置609が出力する命令3を命令レジスタ616に取り込む。
ST4(ステージ4)では、命令2を実行して(EX2)、命令2の処理を終了する。また、命令レジスタ616が出力する命令3をデコードする(ID3)。さらに、命令4を命令フェッチする(IF4)。キャッシュ装置609が出力する命令4を命令レジスタ616に取り込む。
ST5(ステージ5)では、命令3を実行して(EX3)、命令3の処理を終了する。また、命令レジスタ616が出力する命令4をデコードする(ID4)。
ST6(ステージ6)では、命令4を実行して(EX4)、命令4の処理を終了する。
命令が続く場合は上述のステージが繰り返され命令実行が進んで行く。この場合、冗長なコードが多数あるということは、同種の命令列の各命令に対してそれぞれ命令フェッチが行われるため、例えばRAM等の記憶装置の使用効率が悪い。
【0007】
上述のように、RISC型マイクロプロセッサ(LSI)において、プログラムの複雑化に伴い低速な記憶装置(ROM,RAM)が増大化傾向にあり、チップコストに大きな影響を与えている。またRISC型マイクロプロセッサでは1命令を単純な動作にしているため、所望の処理を実現するためには多くの命令を必要とする。このため低速なROM、RAMにアクセスする回数がふえ、パイプライン制御にCPUのストール等の影響がでるおそれがある。そこで、低速記憶装置の容量を減らし、低速記憶装置へのアクセス回数を減らすことが課題となってきた。その解決方法の1つとして、記憶装置に入れるプログラムを圧縮して容量を減らすことで低速記憶装置へのアクセスを減らし、記憶容量を減らすことが考えられる。
【0008】
図11は、圧縮命令に係る従来のマイクロプロセッサの一構成例を示す図である。図中のマイクロプロセッサ1190において、CPU1100、記憶装置1101、入出力制御装置1102、内部バス1103、セレクタ1104、アドレス加算器1105、演算及び命令実行制御装置1108、キャッシュ装置1109、命令デコーダ1112、命令レジスタ1116、周辺装置1150およびクロック生成装置1151は、上述した
図6のマイクロプロセッサ690における同名の構成要素に対応する。
図11のマイクロプロセッサ1190が、
図6のマイクロプロセッサ690と異なる点は、圧縮命令に係る圧縮伸張器1130を備える点である。圧縮伸張器1130は、圧縮命令を読解し、命令を圧縮命令が置かれているメモリから命令フェッチするものである。
【0009】
図10は、圧縮命令に係る従来のマイクロプロセッサにおけるパイプライン処理例を示す図である。
ST1(ステージ1)では、演算及び命令実行制御装置1108が初期アドレスをセットし、命令1を命令フェッチする(IF1)。キャッシュ装置1109が出力する命令1を命令レジスタ1116に取り込む。
ST2(ステージ2)では、命令レジスタ1116が出力する命令1をデコードする(ID1)。圧縮命令を命令フェッチする(IF6)。
ST3(ステージ3)では、命令1を実行して(EX1)、命令1の処理を終了する。圧縮命令を圧縮伸張器1130で読解し(ID6)、命令2を圧縮命令が置かれているメモリから命令フェッチする(IF2)。キャッシュ装置1109が出力する命令2を命令レジスタ1116に取り込む。
ST4(ステージ4)では、命令レジスタ1116が出力する命令2をデコードする(ID2)。命令3を命令フェッチする(IF3)。キャッシュ装置1109が出力する命令3を命令レジスタ1116に取り込む。
ST5(ステージ5)では、命令2を実行して(EX2)、命令2の処理を終了する。命令レジスタ1116が出力する命令3をデコードする(ID3)。命令4を命令フェッチする(IF4)。キャッシュ装置1109が出力する命令4を命令レジスタ1116に取り込む。
ST6(ステージ6)では、命令3を実行して(EX3)、命令3の処理を終了する。命令レジスタ1116が出力する命令4をデコードする(ID4)。
ST7(ステージ7)では、命令4を実行して(EX4)、命令4の処理を終了する。
命令が続く場合は上述のステージが繰り返され命令実行が進んで行く。
この種の方式は、例えば特許文献1に記載されている。
【先行技術文献】
【特許文献】
【0010】
【特許文献1】特開2001−318788号公報
【発明の概要】
【発明が解決しようとする課題】
【0011】
従来のような圧縮命令を用いる場合、圧縮命令の伸張に伴う命令フェッチ、および圧縮命令の読解によりパイプラインにペナルティがある。また、圧縮命令の伸張のための命令およびデータの格納メモリが必要となる。上記特許文献1のものは、プログラム中の命令および命令列をより短い仮命令で置き換えて記憶装置に格納し、実行時にこの仮命令を対象となる命令および命令列に置き換えて実行するものである。しかし、この場合、仮命令と命令および命令列を同じ記憶装置内に格納しておくため、命令置き換え時、仮命令デコード後に、記憶装置へのアクセスが必要で、仮命令と通常命令の切り替え時パイプラインが乱れ、性能が悪化する。また、命令置き換えには、複雑な計算(圧縮された命令を伸張する回路等)を有するため、論理回路が複雑になる等の問題がある。
【0012】
ところで、RISC型マイクロプロセッサのプログラムコンパイル後のアセンブラ命令列を小さな単位で見ると、同じ様な命令列が存在する。小さな同様の命令列を1命令で置き換えることができれば、ROM、RAMの使用量を減らすことができ、チップサイズを小さくできる。またプログラムサイズを小さくすることは、ROM、RAMへのアクセスが少なくなることを意味し、キャッシュにない場合のペナルティが減ることになる。ただし、小さな同様の命令列を1命令で置き換えても性能が落ちないこと、制御論理が複雑にならないことが必要である。
【0013】
本発明の目的は、通常ケースと同等の性能を有し、プログラムの使用するメモリ容量を減らすことができるマイクロプロセッサ及びプログラムのコンパイル処理方法を提供することにある。
【課題を解決するための手段】
【0014】
本発明は、上記目的を達成するため以下のようなマイクロプロセッサ及びプログラムのコンパイル処理方法を提供する。
(1)ダミー命令を含むアセンブラコードが格納される記憶装置と、内部バスを介して前記記憶装置に接続される中央処理装置とを備え、
前記中央処理装置は、演算及び命令実行制御を行う演算及び命令実行制御装置と、実行すべき命令を保持する命令レジスタと、前記ダミー命令に対応する複数の命令からなる共通化命令列を格納するサブ記憶レジスタと、前記命令レジスタまたは前記サブ記憶レジスタから出力される命令のデコードを行い前記演算及び命令実行制御装置への制御信号を作成する命令デコーダとを有し、
前記命令デコーダは、前記命令レジスタに前記ダミー命令以外の命令が取り込まれたときは前記命令レジスタから出力される命令のデコードを行い、前記命令レジスタに前記ダミー命令が取り込まれたときは前記サブ記憶レジスタから出力される命令のデコードを行うことを特徴とするマイクロプロセッサ。
(2)前記ダミー命令は、命令コード、前記サブ記憶レジスタの開始番号に対応する命令開始位置、および前記ダミー命令に対応する複数の命令の命令実行数から1を引いた値である命令数を含むことを特徴とする上記(1)に記載のマイクロプロセッサ。
(3)前記ダミー命令中の命令数を保持するレジスタと、前記演算及び命令実行制御装置から送られる命令更新信号をトリガとするカウンタとを有し、前記レジスタと前記カウンタの一致信号が出力されると、前記ダミー命令の次の命令が前記命令レジスタに取り込まれることを特徴とする上記(2)に記載のマイクロプロセッサ。
(4)前記ダミー命令の命令コードおよび命令開始位置に基づいて、前記サブ記憶レジスタに格納された対応する共通化命令列の命令が選択されることを特徴とする上記(2)または(3)に記載のマイクロプロセッサ。
(5)前記サブ記憶レジスタにおける共通化命令列は、前記内部バスを介して読み書きされることを特徴とする上記(1)から(4)のいずれか1項に記載のマイクロプロセッサ。
(6)上記(1)から(5)のいずれか1項に記載のマイクロプロセッサの記憶装置に格納されるダミー命令を含むアセンブラコードを生成するためのプログラムのコンパイル処理方法であって、
第1のソースプログラム領域と第2のソースプログラム領域を有するソースプラグラムをコンパイルするためのコンパイル処理と、前記ソースプラグラムのコンパイル後、前記第1のソースプログラム領域に対応するアセンブラコードを用いて、前記第2のソースプログラム領域に対応するアセンブラコード中の冗長な命令列を共通化するための共通化処理とを含み、
前記共通化処理は、冗長な命令列を探索する処理と、t回以上冗長な命令列が見つかった場合その出現回数を記録しダミー命令と対応付けする処理と、前記記録した命令列を順に配置して命令列を共通化する処理と、前記共通化された命令列を対応する前記ダミー命令に置き換え、その他の命令を再配置する処理とを有することを特徴とするプログラムのコンパイル処理方法。
(7)前記記録した命令列を順に配置する場合、前記記録した命令列を頻出順にx番地の弱番から配置することを特徴とする上記(6)に記載のプログラムのコンパイル処理方法。
【発明の効果】
【0015】
本発明によれば、通常ケースと同等の性能を有し、プログラムの使用するメモリ容量を減らすことができる。具体的には、ダミー命令をレジスタ内にある共通の処理に置き換える。本発明では、本来の共通化コードをそのまま実行した場合とほぼ同様の処理時間で実行する効果がある。また本発明では、共通処理をダミー命令で置き換えたことにより記憶装置のアセンブラコード量を削減する効果がある。さらに、製品全体から見ると、本発明では、小規模な論理追加・変更でチップの面積増加を抑える効果がある。また本発明では、アセンブラコード量の削減により低速な記憶装置へのアクセスを減らすことができ、結果としてスループットを向上させる効果がある。さらに、本発明により、アセンブラコード削減により記憶装置の使用量を減らすことができる。同じ処理を行う場合なら記憶装置の実装容量を減らすことができチップ面積を減らす効果がある。記憶装置の実装容量が同じであるならコードの削減効果によりより多くの処理を入れ込むことができる効果がある。
【0016】
このような効果が得られる理由は次のとおりである。すなわち、数命令の命令列をダミー命令1命令に置き換えることによりプログラムをコンパイルした時のコード量を削減できるからである。共通化命令列をサブ記憶レジスタに記憶していることで、ダミー命令の命令フェッチが完了(命令が確定)した時点でダミー命令の命令コード(固定値)と命令開始位置から命令デコーダに送る命令の選択をキャッシュ装置側からサブ記憶レジスタ側へ切り替え、ダミー命令の次主命令アドレスを次主命令アドレスレジスタに記憶する。ダミー命令の命令コードと命令開始位置からサブ記憶レジスタ内に格納されている共通化命令列を選択し、この選択した共通化命令列をデコード装置に送り、以降セットされたアドレスに従い命令を実行してゆく。一方命令列の終了アドレスはダミー命令の命令数フィールドより作成され実行アドレスと比較器において比較される。比較器においては、アドレスが一致した場合は命令フェッチアドレスを次命令アドレスに切り替えるための信号を出力する。アドレス切り替え信号により先行命令フェッチアドレスを次主命令アドレスレジスタの値に切り替え、命令の先行フェッチを行う。これによりダミー命令から共通化命令列に切り替え、共通化命令からダミー命令の次命令への切り替えがパイプラインを乱すことなく行える。以上により共通化命令列をダミー命令で置き換えて実行してもほぼ同等の実行時間を維持でき、共通化命令列をダミー命令で置き換え記憶装置内のコード量を削減することにより、記憶装置の容量を削減しチップ面積を小さくできる。例えば、御用マイクロコンピュータのチップ面積を小さくできる。
【図面の簡単な説明】
【0017】
【
図1】本発明に係るマイクロプロセッサの一構成例を示す図である。
【
図2】従来のマイクロプロセッサにおけるパイプライン処理例を示す図である。
【
図3】本発明に係るマイクロプロセッサにおけるパイプライン処理例を示す図である。
【
図4】本発明におけるダミー命令のフォーマットの一例を示す図である。
【
図5】ソースプログラムをアセンブラコードにコンパイル処理する本発明の処理例を示す図である。
【
図6】従来のマイクロプロセッサの一構成例を示す図である。
【
図7】アセンブラコードのメモリ配置の一例を示す図である。
【
図8】x番地に格納された命令列と対応するダミー命令を示す図である。
【
図9】命令共通化コンパイラ処理の一例を説明するためのフローチャートである。
【
図10】圧縮命令に係る従来のマイクロプロセッサにおけるパイプライン処理例を示す図である。
【
図11】圧縮命令に係る従来のマイクロプロセッサの一構成例を示す図である。
【
図12】ソースプログラムをコンパイル処理する従来の処理例を示す図である。
【発明を実施するための形態】
【0018】
図1は、本発明に係るマイクロプロセッサの一構成例を示す図である。図示のように、マイクロプロセッサ190は、CPU100、記憶装置101および入出力制御装置102を含む。CPU100は、記憶装置101および入出力制御装置102と内部バス103を介して接続され、セレクタ104、アドレス加算器105、次主命令アドレスレジスタ107、演算及び命令実行制御装置108、キャッシュ装置109、レジスタ110、比較器111、命令デコーダ112、セレクタ113、サブ記憶レジスタ114、アドレス生成器115、命令レジスタ116、およびカウンタ117を備える。また、周辺装置150は、CPU100と独立に動作できる装置であり、内部バス103を介してCPU100と接続することができる。たとえば計時タイマ装置等である。また装置構成上周辺装置150はなくても良い。クロック生成装置151は、クロックを生成してチップ全体へ送り出す装置である。
【0019】
ここで、CPU100は、中央処理装置で命令実行制御及び演算を行う装置である。記憶装置101は、RAMやROMなどの低速記憶装置である。入出力制御装置102は、装置外部からのデータやプログラムの入出力制御を行う装置である。内部バス103は、CPU100と記憶装置101や入出力制御装置102との間でデータのやり取りを行うための内部バスである。セレクタ104は、アドレス選択のためのセレクタである。アドレス加算器105は、命令アドレスに命令長の加算を行う。命令は固定長である。キャッシュ装置109は、データ及び命令をキャッシュするための高速記憶装置である。これは、本例では記憶装置101から内部バス103を介して命令やデータを次処理装置に送るための中継装置となっているが、構成によってはキャッシュ装置を通らず次処理装置に命令及びデータを送るパスとキャッシュ装置経由で命令及びデータを送る並列なパスが存在してもよい。
【0020】
命令デコーダ112は、命令のデコードを行い演算及び命令実行制御装置108の処理回路の実行制御信号を作成する。命令レジスタ116は、実行する命令を保持するレジスタである。演算及び命令実行制御装置108は、命令実行のための初期アドレス生成、アドレス更新タイミング生成、データ取り込みタイミング生成を行うとともに、セレクタ104、アドレス加算器105、キャッシュ装置109、命令デコーダ112の制御を行い、また演算を実行する装置である。さらにこれは実行命令を送出する。レジスタ110は、ダミー命令時、ダミー命令の命令数を保持するレジスタである。アドレス生成器115は、サブ記憶レジスタ114の先頭アドレス+命令開始位置×命令長で計算されるアドレスを生成する。
【0021】
カウンタ117は、演算及び命令実行制御装置108から送られる命令更新信号をトリガとするカウンタである。これは比較一致信号を検出するか命令レジスタ116から送出されるダミー命令の命令コードを検出すると初期化される。比較器111は、レジスタ110とカウンタ117の比較を行う比較器である。これはレジスタ110とカウンタ117が一致した場合一致信号を出力する。セレクタ113に出力される一致信号はセレクタ104に出力される信号より1サイクル遅い信号となるようフリップフロップを通した信号になっている。次主命令アドレスレジスタ107は、戻り先命令アドレスを格納するレジスタである。これはサブ記憶レジスタ114以外のアドレス時に更新され、サブ記憶レジスタ114のアドレス時はデータが保持される構造となっている。サブ記憶レジスタ114は、共通化命令列及びその共通化命令列で使用されるデータを格納するレジスタである。これは内部バス103を介して読み書きされる。
【0022】
このように、本マイクロプロセッサは、ダミー命令を含むアセンブラコードが格納される記憶装置101と、内部バス103を介して記憶装置101に接続されるCPU(中央処理装置)100とを備える。ここで、CPU100は、演算及び命令実行制御を行う演算及び命令実行制御装置108と、実行すべき命令を保持する命令レジスタ116と、ダミー命令に対応する複数の命令からなる共通化命令列を格納するサブ記憶レジスタ114と、命令レジスタ116またはサブ記憶レジスタ114から出力される命令のデコードを行い演算及び命令実行制御装置108への制御信号を作成する命令デコーダ112とを有する。この命令デコーダ112は、命令レジスタ116にダミー命令以外の命令が取り込まれたときは命令レジスタ116から出力される命令のデコードを行い、命令レジスタ116にダミー命令が取り込まれたときはサブ記憶レジスタ114から出力される命令のデコードを行う。また、ダミー命令中の命令数を保持するレジスタ110と、演算及び命令実行制御装置108から送られる命令更新信号をトリガとするカウンタ117とを有しており、レジスタ110とカウンタ117の一致信号が出力されると、ダミー命令の次の命令が命令レジスタ116に取り込まれる。
本発明と従来のものとを比較すると、従来の圧縮命令方式では命令を圧縮して実行時に伸張するのに対して、本発明では命令列自体をレジスタに格納しておく点で異なる。また本発明では伸長回路が不要である。さらに本発明では伸張のための辞書に相当するデータも不要であるためCPUよりも低速な記憶装置にアクセスも発生しない。
【0023】
上述のように記憶装置101には、ソースプログラムをコンパイル処理したダミー命令を含むアセンブラコードのプログラムが格納される。以下、そのコンパイル処理方法について説明する。
図5は、ソースプログラムをアセンブラコードにコンパイル処理する本発明の処理例を示す図である。図において、ソースコードを含むソースプログラム500をコンパイルすると、コンパイル後:共通化前510に示すようなアセンブラコードが配置される。さらに命令列を共通化した共通化後には、コンパイル後:共通化後550に示すようなアセンブラコードが配置される。
【0024】
図5において、ソースプラグラム500は、共通化対象外にしたいソースプログラム領域を共通化除外開始コンパイラ指示501と共通化除外終了コンパイラ指示502で挟み込む。本例では共通化対象外の領域が一ヶ所であるが数ヶ所あっても構わない。ソースプラグラムをコンパイルした後のアセンブラコードのうち、共通化除外開始指示511,551と共通化除外終了指示512,552で挟まれたアセンブラコード513とアセンブラコード553は共通化対象外であり、コンパイル後:共通化前510とコンパイル後:共通化後550で両者のアセンブラコードに変化はない。ここでコンパイラ共通化除外が必要な理由は、その部分のプログラムを用いて共通化処理を実行するためである。例えば、
図5の右下に記載のようなx番地520から配置されている共通化命令列521及びデータをサブ記憶レジスタ114に最初に書き込むときの処理等を実行するための処理プログラムが必要となるからである。
【0025】
ここで、コンパイル後:共通化前510はコンパイル実行途中を示しており、共通化除外開始指示511と共通化除外終了指示512を有する点で従来のコンパイラ結果と異なる。以下に、コンパイル後:共通化前510からコンパイル後:共通化後550への命令共通化コンパイラ処理方法について説明する。
【0026】
図9は、命令共通化コンパイラ処理の一例を説明するためのフローチャートである。図示のように、処理910にて、コンパイル後:共通化前510のアセンブラコード514に対し命令共通化コンパイルを開始する。処理911にて、アセンブラコード514の領域の探索が終了したかどうかを判定する。探索が終了していない場合、次の処理912を実行する。処理912にて、冗長な命令列を探索する。ここで冗長な命令列とは、特定の命令列(例えば命令1と命令2の命令列)が複数回出現する命令列をいう。処理913にて、t回以上冗長な命令列が見つかった場合、その出現回数を記録し、ダミー命令と対応付けし記録する。なお出現条件tはコンパイル時変数指定する。以下、冗長な命令列とダミー命令との対応付けについて説明する。
【0027】
図7は、アセンブラコードのメモリ配置の一例を示す図である。図において、配置710は、本例におけるアセンブラコード514の命令配置を表す。配置750は、本例におけるアセンブラコード554の命令配置を表す。配置730は、本例における共通化命令列521の命令配置を表す。本例では、アセンブラコード514の命令配置において、アセンブラコード711には、命令1と命令2の命令列=j個、命令1と命令2と命令7の命令列=y個、命令4と命令5の命令列=z個(j>y>z>=t)が存在し、その他の冗長命令はないものとする。本例では、
図7に示すように、命令1と命令2の命令列をダミー命令1と対応付け、また命令1と命令2と命令7の命令列をダミー命令2と対応付け、さらに命令4と命令5の命令列をダミー命令3と対応付ける。
【0028】
図9に戻って説明する。処理913が終了したら処理911に戻り、処理911から処理913を繰り返す。処理911にてアセンブラコード514の領域の探索が終了したら処理914に移行する。処理914にて、
図7右下の配置730に示すように、記録していた命令列を頻出順にx番地の弱番から配置する。
図7において、配置730は共通化命令列521の命令列の最終的な配置の詳細を示す。本例の場合、上述のように冗長な命令列の個数の関係が「j>y>z>=t」であることから、命令1と命令2の命令列が最も多く、次に命令1と命令2と命令7の命令列が多く、命令4と命令5の命令列は最も少ない。このため、配置730には、x番地から命令1、命令2、命令7、命令4、命令5のように配置される。命令5以降は空である。また、命令1と命令2の命令列と命令1と命令2と命令7の命令列の重複部分(命令1と命令2)はまとめられる。このように冗長な命令列は共通化され、共通化命令列521が生成される。そして処理915にて、
図7中の曲線矢印に示すように、最も長い命令列である命令1と命令2と命令7の命令列をダミー命令2に、次に命令1と命令2の命令列をダミー命令1に、命令4と命令5の命令列をダミー命令3に置き換え、その他の命令を再配置する。
図7において、配置750はダミー命令に置き換え後、その他の命令を含め命令およびデータの再配置を行った結果である。本例では命令のみ記載してあるが、命令で使用するオペランドデータが配置750に混じっていてもよい。その後、処理916にてコンパイル処理終了となる。
【0029】
このように、マイクロプロセッサ190の記憶装置101に格納されるダミー命令を含むアセンブラコードを生成するためのプログラムのコンパイル処理方法は、第1のソースプログラム領域と第2のソースプログラム領域を有するソースプラグラムをコンパイルするためのコンパイル処理と、ソースプラグラムのコンパイル後、第1のソースプログラム領域に対応するアセンブラコード(共通化除外部分)を用いて、第2のソースプログラム領域に対応するアセンブラコード(共通化処理部分)中の冗長な命令列を共通化するための共通化処理とを含む。この共通化処理は、冗長な命令列を探索する処理と、t回以上冗長な命令列が見つかった場合その出現回数を記録しダミー命令と対応付けする処理と、記録した命令列を順に配置して命令列を共通化する処理と、共通化された命令列を対応する前記ダミー命令に置き換え、その他の命令を再配置する処理とを有する。ここで、記録した命令列を順に配置する場合、上述のように記録した命令列を頻出順にx番地の弱番から配置することができる。
【0030】
図4は、本発明におけるダミー命令のフォーマットの一例を示す図である。ダミー命令は、固定長命令セットであり、命令コード、命令開始位置および命令数を含む。命令長はシステムによる。命令開始位置は、命令列の開始位置を表し、サブ記憶レジスタの開始番号に対応する。命令数は、命令列の終了条件を示し、命令実行数−1の値である。例えば命令実行数=2のとき、命令数のフィールドには「1」が設定される。このように、ダミー命令は、命令コード、サブ記憶レジスタの開始番号に対応する命令開始位置、およびダミー命令に対応する複数の命令の命令実行数から1を引いた値である命令数を含む。
【0031】
図8は、x番地に格納された命令列と対応するダミー命令を示す図である。これは、
図7の配置750:アセンブラコード554の命令配置におけるダミー命令1、ダミー命令2、およびダミー命令3を
図4に示すダミー命令のフォーマットの形式で表したものである。ダミー命令1は、
図7の配置730:共通化命令列521の命令配置から命令コード810となり、ダミー命令2は命令コード820となり、ダミー命令3は命令コード830となる。以上より、
図7の配置750:アセンブラコード554の命令配置において、アセンブラコード514における命令1と命令2のj個の命令列がダミー命令1に置き換えられ、また命令1と命令2と命令7のy個の命令列がダミー命令2に置き換えられ、さらに命令4と命令5のz個の命令列がダミー命令3に置き換えられることから、各命令の命令長を2バイトとすると、(2j−j)×2バイト+(3y−y)×2バイト+(2z−z)×2バイトの領域を、命令共通化前の配置710:アセンブラコード514の命令配置に比べ少なくできる。なお本例では、命令長を2バイトの固定長にしたが命令長は2バイト以上で可変長でも構わない。
【0032】
図3は、本発明に係るマイクロプロセッサにおけるパイプライン処理例を示す図である。マイクロプロセッサ起動後、共通化対象外のアセンブラコードまたは外部から入出力制御装置102の制御のもと内部バス103を通して共通化命令列をサブ記憶レジスタ114に格納しておく。本例では、命令2と命令3を共通化命令とする。
ST1(ステージ1)では、演算及び命令実行制御装置108が初期アドレスをセットし、命令1を命令フェッチする(IF1)。
【0033】
ST2(ステージ2)では、命令レジスタ116が出力する命令1をデコードする(ID1)。命令2に関し、ダミー命令を命令フェッチする(IF5)。キャッシュ装置109が出力するダミー命令を命令レジスタ116に取り込む。アドレス生成器115は、キャッシュ装置109が出力するダミー命令の命令コード及び命令開始位置情報からサブ記憶レジスタ114の実行アドレスを生成する。キャッシュ装置109が出力するダミー命令の命令コードよりセレクタ104はアドレス生成器115が出力するアドレスを選択し出力する。セレクタ113は、セレクタ104で示される命令アドレスに従いサブ記憶レジスタ114内の共通化命令2を命令デコーダ112に送る。このようにダミー命令の命令コードおよび命令開始位置に基づいて、サブ記憶レジスタ114に格納された対応する共通化命令列の命令が選択される。アドレス加算器105は、セレクタ104の出力するアドレスに命令長を加算する。キャッシュ109が出力するダミー命令の命令コードからカウンタ117に初期値をセットする。キャッシュ109が出力するダミー命令の命令コードを検出したため、命令数(実行命令数−1の値が入っている)をレジスタ110にセットする。本例の場合、2つの命令の共通化命令を実行するので1がセットされる。
【0034】
ST3(ステージ3)では、命令1を実行して(EX1)、命令1の処理を終了する。命令2に関し、サブ記憶レジスタ114が出力する共通化命令2をデコードする(ID2)。命令3に関し、共通化命令3を選択する(IS3)。セレクタ113は、セレクタ104で示される命令アドレスに従い、サブ記憶レジスタ114内の共通化命令3を命令デコーダ112に送る。演算及び命令実行制御装置108より命令実行信号が出力されカウンタ117に1が加算される。
【0035】
ST4(ステージ4)では、命令2に関し、共通化命令2を実行して(EX2)、共通化命令2の処理を終了する。命令3に関し、共通化命令3をデコードする(ID3)。命令4を命令フェッチする(IF4)。比較器111においてレジスタ110が示す値とカウンタ117が一致し、一致信号が出力される。セレクタ104では、比較器111の一致信号から次主命令アドレスレジスタ107のアドレスを選択し、キャッシュ装置109に送出する。キャッシュ装置109では、セレクタ104の値に従いダミー命令の次命令である命令4を送出する。キャッシュ装置109が送出した命令4を命令レジスタ116に取り込む。セレクタ104は、命令レジスタ116が出力する命令4の命令コードより、アドレス加算器105の値を出力する。セレクタ113は、セレクタ104で示される命令アドレスに従い、命令レジスタ116の命令4を命令デコーダ112に送出する。セレクタ104から出力されたアドレスにアドレス加算器105で命令長が加算されセレクタ104に出力される。
【0036】
ST5(ステージ5)では、命令3に関し、共通化命令3を実行して(EX3)、共通化命令3の処理を終了する。命令4に関し、命令レジスタ116が出力する命令4をデコードする(ID4)。
ST6(ステージ6)では、命令4を実行して(EX4)、命令4の処理を終了する。
以上のように本発明によれば、命令の切り替えがパイプラインを乱すことなく実行できる。なお、サブ記憶レジスタの使用方法として、大規模なループを1つだけ入れて使用する例がある。この場合、常時キャッシュインと同じ効果を生む。
【符号の説明】
【0037】
100 CPU
101 記憶装置
102 入出力制御装置
103 内部バス
104 セレクタ
105 アドレス加算器
107 次主命令アドレスレジスタ
108 演算及び命令実行制御装置
109 キャッシュ装置
110 レジスタ
111 比較器
112 命令デコーダ
113 セレクタ
114 サブ記憶レジスタ
115 アドレス生成器
116 命令レジスタ
117 カウンタ
150 周辺装置
151 クロック生成装置
190 マイクロプロセッサ