(57)【要約】【課題】  ハードウェア構成の大型化を抑えながらペナルティの発生を防止し、より高い処理効率を得ることができるデータ処理装置を提供する。【解決手段】  分岐の条件に応じて後に実行される命令が決定する分岐命令を含むデータを処理するデータ処理装置に、メモリ７０１から分岐命令によって実行され得る少なくとも命令１、命令２を多重化して生成された多重化命令を含むデータを読み出す読出部７０２、読み出されたデータから多重化命令を検出し、検出された多重化命令を、少なくとも第１命令と第２命令とに分離する復号回路７０３ａ、７０３ｂ、第１命令及び第２命令の少なくとも一方を実行するデコーダ７０６、実行部７０８、書戻部７１０を設ける。【選択図】  図６
2007140907.tif 000002
【特許請求の範囲】
【請求項１】
分岐の条件に応じて後に実行される命令を決定する分岐命令を含むデータを処理するデータ処理装置であって、
記憶装置から、分岐命令以後に実行され得る少なくとも第１命令と第２命令とを多重化して生成された多重化命令を含むデータを読み出す命令読出手段と、
前記命令読出手段によって読み出されたデータから、前記多重化命令を検出する多重化命令検出手段と、
前記多重化命令検出手段によって検出された多重化命令を、少なくとも第１命令と第２命令とに分離する多重化命令分離手段と、
前記多重化命令分離手段によって分離された第１命令及び第２命令の少なくとも一方を実行する命令実行手段と、
を備えることを特徴とするデータ処理装置。
【請求項２】
前記多重化命令分離手段は、
多重化された命令を入力し、入力された命令を、命令の多重化に使用された少なくとも２つのデータを使って逆拡散する逆拡散回路を備えることを特徴とする請求項１記載のデータ処理装置。
【請求項３】
分岐の条件に応じて後に実行される命令が決定する分岐命令によって実行され得る少なくとも第１命令と第２命令とを多重化して多重化命令を生成する多重化命令生成ステップを含むことを特徴とする多重化方法をコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ処理装置及びデータ多重化方法をコンピュータに実行させるためのプログラムに関する。
【背景技術】
【０００２】
ＣＰＵ（Central Processing Unit）は、一般的に、命令をメモリから読出し、解釈して実行、さらに実行の結果をメモリに書き戻すという４つのステージで動作する。ＣＰＵでは、このような一連の動作をより高速に行うため、複数の命令を予めプログラムにしたがって読出し、キャッシュメモリ等に保存しておくという動作をすることがある。この動作は、一般的に命令の先読みと呼ばれている。
【０００３】
ところで、プログラムを構成する命令に、分岐命令がある。命令を先読みする場合、分岐によってすでに先読みされている命令を実行することなく廃棄し、分岐先の命令を再度読み出す必要が生じる場合がある。いったん読み出された命令の破棄及び再度の読み出し処理は、ＣＰＵの動作効率を低下させる。これは分岐ペナルティとも呼ばれている。
分岐ペナルティを低減させる従来技術として、例えば、特許文献１が挙げられる。特許文献１に記載された従来技術は、分岐命令と共に分岐条件をも命令バッファに格納する。そして、分岐命令に続く命令列を条件付命令に加工し、分岐条件の成立、不成立によらず命令を再度読み出す必要をなくしている。
【特許文献１】特開平１０−１２４３１５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかしながら、上記した特許文献１では、分岐命令の他に分岐条件やフラグ、分岐距離の情報をもデコードする。さらに、デコードされた情報に基づいて分岐条件から実行条件を生成する。このような処理を実行するため、特許文献１の発明は、読み出された命令を保存しておくメモリが大型化し、また、回路等のハードウェア構成を追加する必要がある。メモリの大型化やハードウェア構成の追加は、データ処理装置を大型化すると共に製造コストをも高める。
【０００５】
本発明は、上記した点に鑑みてなされたものであって、ハードウェア構成の大型化を抑えながら分岐ペナルティの発生を防止し、より高い処理効率を得ることができるデータ処理装置及びデータ多重化をコンピュータに実行させるためのプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００６】
以上の課題を解決するため、本発明のデータ処理装置は、分岐の条件に応じて後に実行される命令を決定する分岐命令を含むデータを処理するデータ処理装置であって、記憶装置から、分岐命令以後に実行され得る少なくとも第１命令と第２命令とを多重化して生成された多重化命令を含むデータを読み出す命令読出手段と、前記命令読出手段によって読み出されたデータから、前記多重化命令を検出する多重化命令検出手段と、前記多重化命令検出手段によって検出された多重化命令を、少なくとも第１命令と第２命令とに分離する多重化命令分離手段と、前記多重化命令分離手段によって分離された第１命令及び第２命令の少なくとも一方を実行する命令実行手段と、を備えることを特徴とする。
【０００７】
このような発明によれば、分岐命令以後に実行され得る少なくとも第１命令と第２命令とを多重化して生成された多重化命令を含むデータを記憶装置から読み出す。そして、読み出されたデータから多重化命令を検出し、検出された多重化命令を少なくとも第１命令と第２命令とに分離することができる。
このため、データが分岐命令を含む場合であっても、実行され得る複数の命令を取り込むことができ、先読みされた命令が分岐によって無効になることを回避することができる。このため、分岐ペナルティを低減し、より高い処理効率を得ることができるデータ処理装置を提供することができる。
【０００８】
さらに、本発明のデータ処理装置は、命令を分離する回路等の比較的簡易な構成によって分岐ペナルティを低減できる。このため、本発明のデータ処理装置は、ハードウェア構成の大型化を抑えながらペナルティを低減、より高い処理効率を得るものといえる。
また、本発明のデータ処理装置は、前記多重化命令分離手段が、多重化された命令を入力し、入力された命令を、命令の多重化に使用された少なくとも２つのデータを使って逆拡散する逆拡散回路を備えることを特徴とする。
【０００９】
このような発明によれば、比較的簡易な構成を使って命令を分離できるので、ハードウェア構成の大型化を抑えながら分岐ペナルティを低減させることができる。
また、本発明の多重化方法をコンピュータに実行させるためのプログラムは、条件分岐後に実行され得る少なくとも第１命令と第２命令とを多重化して多重化命令を生成する多重化命令生成ステップを含むことを特徴とする。
【００１０】
このような発明によれば、条件分岐後に実行され得る少なくとも第１命令と第２命令とを多重化して多重化命令を生成することができる。多重化された命令は、一つの命令としてメモリ等の記憶装置に記憶することができる。
そして、本発明は、読出し前に予め命令を多重化しておくため、命令を読み出す装置が命令を多重化する必要がなく、装置のハードウェア構成の大型化することがない。
【発明を実施するための最良の形態】
【００１１】
以下、図を参照して本発明にかかるデータ処理装置及びデータ多重化方法をコンピュータに実行させるためのプログラムの実施の形態を説明する。なお、本実施形態では、データ処理装置の説明に先立って、先ず、データ処理装置で処理される多重化データを生成するための多重化データ生成方法をコンピュータに実行させるためのプログラムについて説明する。
【００１２】
（コンパイラ）
本実施形態の多重化データ生成方法をコンピュータに実行させるためのプログラムは、人間がプログラミング言語で記述したソフトウェアの設計図(ソースコード)を、コンピュータが実行できる形式の命令列(オブジェクトコード)に変換するソフトウェアである。このようなソフトウェアは、一般的にコンパイラと呼ばれていて、本実施形態でも以降、本実施形態の多重化データ生成方法をコンピュータに実行させるためのプログラムをコンパイラと記す。
【００１３】
図１（ａ）は、ソースコードを例示する図である。また、図１（ｂ）は、（ａ）に示したソースコードから生成された機械語の命令列を示している。本実施形態のコンパイラは、プログラムの条件分岐後に実行され得る第１命令と第２命令とを多重化して多重化命令を生成するものである。このため、ソースコードは、コンパイラに分岐命令、つまり命令の多重化箇所を示すための指示子（ディレクティブ）１の記述を含んでいる。
【００１４】
図示した指示子１は、
多重化箇所の開始箇所（／／ＭＵＬＴＩＰＬＥＸ＿ＢＥＧＩＮ）と
多重化箇所の終了箇所（／／ＭＵＬＴＩＰＬＥＸ＿ＥＮＤ）とを示している。
コンパイラは、このような指示子１にしたがって多重化された命令を命令列として生成する。（ｂ）に示した命令２は、命令２以降に記載された命令または以前に記載された命令列３が多重化コードであることを示している。
【００１５】
なお、本発明では分岐命令とは、ある分岐条件が成立する場合には例えば第１命令が実行される、成立しない場合には例えば第２命令が実行されるというように、条件によって以降の処理の流れが分岐される命令をいう。
第１命令と第２命令とを多重化した多重化命令を生成する本実施形態は、図２に示すように、分岐条件によって実行される処理のステップ数が、分岐条件が成立する場合（Ｔｒｕｅ）と成立しない場合（Ｆａｌｓｅ）とで等しいプログラムに適用することが望ましい。なお、分岐条件が成立する場合と成立しない場合とでステップ数が異なる場合、本実施形態は、ステップ数が少ない側に動作しないことを命令するｎｏｐ命令を追加するものとする。
【００１６】
図３は、コンパイラによって行われる本実施形態にかかる処理を含む処理全体を示したフローチャートである。コンパイラは、図１（ａ）に示したソースプログラムを、字句解析ルーチンを使って字句に変換する（Ｓ３０１）。ここでいう字句とは、アスキーの文字列を意味のある固まり（トークン）をいう。
次に、コンパイラは、トークンを空白なく並べてトークン列を生成する（Ｓ３０２）。トークン列は、構文解析にかけられていわゆる構文木を生成する（Ｓ３０４）。構文木は、意味解析によってプログラムを反映した形にされ（Ｓ３０５）、構文木の形に基づいて中間コードが生成される（Ｓ３０６）。中間コードは、ソースコードと機械語の中間に位置づけられるものであって、以降のコード最適化をしやすくするための形式である。
【００１７】
コンパイラは、コード最適化ルーチンにより（Ｓ３０７）、中間コードをさらに効率がよい最適化中間コードにする（Ｓ３０８）。なお、ここでいう効率とは、プログラムの小型化、高速化を指す。最適化をへた中間コードは、コード生成ルーチン（Ｓ３０９）での処理を通して、実行可能な機械語コードに構成される（Ｓ３１０）。
図４は、本実施形態のコンパイル処理のうち多重化命令生成処理をより詳細に示したフローチャートである。
【００１８】
コンパイラは、ソースプログラムから指示子の挿入箇所を検出する（Ｓ４０１）。指示子が検出された場合（Ｓ４０１：Ｙｅｓ）、以降のソースコード中で分岐命令を生成すべき箇所であるか否か判断し（Ｓ４０２）、分岐命令を生成すべき箇所である場合には（Ｓ４０２：Ｙｅｓ）、分岐命令に代えてｓｗｍ命令を生成し、命令例に記述する（Ｓ４０３）。
【００１９】
ステップ４０３のｓｗｍ命令は、図１に示した命令２であって、ｓｗｍ命令実行後は以降の命令を多重化コードと解釈することを指示する命令である。また、コンパイラは、指示子を検出していないか、あるいは指示子が検出された後であっても分岐命令の生成箇所でない場合（Ｓ４０１，Ｓ４０２：Ｎｏ）、分岐命令の生成箇所が検出されるまで通常のコンパイル処理を行う。
【００２０】
ｓｗｍ命令の生成後、コンパイラは、条件分岐を示すｉｆ文にしたがって命令を生成し、生成された命令の数をカウントする（Ｓ４０５）。そして、カウントされた命令の数を、分岐条件が成立する場合と成立しない場合とで比較し（Ｓ４０６）、命令数が少ない側へｎｏｐ命令を命令数の差分だけ追加する（Ｓ４０７）。
さらに、コンパイラは、分岐条件が成立する場合に実行される命令と、成立しない場合に実行され得る命令とを多重化する（Ｓ４０８）。多重化は、ＣＤＭ（符号分割多重：Ｃｏｄｅ  Ｄｉｖｉｓｉｏｎ  Ｍｕｌｔｉｐｌｅｘ）によって行われる。本実施形態では、分岐条件が成立する場合に実行される命令列と、成立しない場合に実行される命令列とを、各々異なる符号を使って変調し、変調された命令同士を多重化するものとする。
【００２１】
命令の多重化が終了すると、コンパイラは、ｓｗｓ命令を生成する（Ｓ４０９）。ｓｗｓ命令は、ｓｗｓ命令が実行された以降の命令を多重化されていない命令として扱うよう指示する命令である。
図５（ａ）〜（ｆ）は、図４のステップ４０８の命令多重化の処理を説明するための図であって、いずれも縦軸は信号の大きさを、横軸は時間を示す。図５（ａ）及び（ｇ）は、いずれも分岐条件に応じて実行され得る命令を示す命令信号であって、例えば（ａ）は分岐が成立する場合に実行される命令１の命令信号１を示し、（ｇ）は分岐が成立しない場合に実行される命令２の命令信号２を示すものとする。命令信号１は１０１０１０１０の信号で表され、命令信号２は１１００１１００の信号で表される（いずれも符号無し２進数の場合）。
【００２２】
なお、本実施形態のように、分岐条件に応じて２通りの命令１、命令２が実行される場合、コンパイラは、命令信号１、命令信号２の２つの命令信号を多重化する。本実施形態のコンパイラは、命令信号を２つ多重することに限定されるものでなく、分岐条件に応じて実行され得る命令の数だけ任意に多重化することができる。
また、図５（ｂ）は、命令信号１を変調（拡散）するための符号化信号１を示す。（ｈ）は、命令信号２を変調するための符号化信号２を示す。符号化信号１と符号化信号２とは、互いの相互相関が０（直交符号）または低くなるよう設定される。本実施形態の符号化信号１、符号化信号２は、いずれもＯＶＳＦ（Ｏｒｔｈｏｇｏｎａｌ  Ｖａｒｉａｂｌｅ  Ｓｐｒｅａｄｉｎｇ  Ｆａｃｔｏｒ）符号を用いた符号化信号であって、符号化信号１はＯＶＳＦ符号”１１”、符号化信号２はＯＶＳＦ符号”１０”と表される（いずれも符号無し２進数の場合）。
【００２３】
また、図５（ｃ）は命令信号１を符号化信号１で変調した結果得られる信号を示し、（ｉ）は命令信号２を符号化信号２で変調した結果得られる信号を示している。本実施形態のコンパイラは、（ｃ）に示した信号と（ｉ）に示した信号とを多重化し、（ｆ）に示した多重信号を得る。
図示するように、多重化前の信号がいずれも符号付き２進化して−１、０、１で表すことができたのに対し、多重化された命令の信号（多重化信号）は、−２，０，２の値をとり得る。このため、コンパイラによって多重化される前の信号は各桁が２ビットで表されるのに対し、多重化後は各桁を表すのに３ビットが必要になる。本実施形態のコンパイラは、命令を多重化したことによって信号のビット数が増えることを回避するため、多重化信号を正規化し、より少ないビット数で表現することもできる。
【００２４】
なお、図５の（ｄ）、（ｅ）は、（ｃ）に示した信号と（ｉ）に示した信号とを加算することを説明するため、（ｃ）に示した信号と（ｉ）に示した信号との時間軸を揃えて示したものである。したがって、（ｃ）と（ｄ）、（ｉ）と（ｅ）とは各々同じ信号を表している。
【００２５】
（データ処理装置）
次に、以上述べたコンパイラによって生成されたプログラムを実行するデータ処理装置の実施形態について説明する。図６は、本実施形態のデータ処理装置の一実施形態の構成を説明するための回路図である。本実施形態のデータ処理装置は、分岐命令を含むデータを処理するデータ処理装置であって、メモリ７０１とＣＰＵ７００とによって構成されている。
【００２６】
メモリ７０１は、先に述べた本実施形態のコンパイラで多重化された命令を含むプログラムを記憶している。ＣＰＵ７００は、メモリ７０１から、条件分岐後に実行され得る少なくとも命令１と命令２とを多重化して生成された多重化命令を含むデータを読み出し、先読みされた命令を保持する読出部７０２、読み出された命令を解釈するデコーダ７０６、検出された多重化命令を少なくとも命令１と命令２とに分離する復号回路７０３ａ、７０３ｂを備えている。
【００２７】
また、ＣＰＵ７００は、多重化されていない命令、あるいは復号回路７０３ａ、７０３ｂによって分離された命令１及び命令２の少なくとも一方を実行する実行部７０８を備えている。実行部７０８は、本実施形態の命令実行手段として機能する。なお、実行部７０８が命令を実行して得られた結果は、メモリ７０１等の記憶装置に書き戻される。このため、ＣＰＵ７００は、書戻部７１０を備えている。
【００２８】
読出部７０２は、メモリ７０１から読み出された命令を８個分（本実施形態では１個を３２ビットとする）保存しておくキュー構造を有している。デコーダ７０６は、読出部７０２に保存された命令を、キュー構造上の保存先にしたがって順に解釈する。
さらに、ＣＰＵ７００は、読出部７０２によって読み出された命令と、復号回路７０３ａまたは７０３ｂによって分離された命令を入力し、後段に入力すべき信号を切替える
マルチプレクサ（ＭＵＸ：Ｍｕｌｔｉｐｌｅｘｅｒ）７０４、ＭＵＸ７０４とデコーダ７０６とを接続するパイプラインレジスタ７０５、デコーダ７０６と実行部７０８とを接続するパイプラインレジスタ７０７、実行部７０８と書戻部７１０とを接続するパイプラインレジスタ７０９を備えている。
【００２９】
読出部７０２、デコーダ７０６、実行部７０８、書戻部７１０は、ＣＰＵの周知の構成であって、各々の詳細な説明については省く。
ＣＰＵ７００によって実行される一連の動作は、読出部７０２によって実行される命令フェッチ（ＩＦ：Ｉｎｓｔｒｕｃｔｉｏｎ  Ｆｅｔｃｈ）、デコーダ７０６によって実行される命令デコード（ＩＤ：Ｉｎｓｔｒｕｃｔｉｏｎ  Ｄｅｃｏｄｅ）、実行部７０８による命令の実行（ＥＸ：ＥＸｅｃｕｔｉｏｎ）、書戻部７１０によって実行される書き戻し（ＷＢ：Ｗｒｉｔｅ  Ｂａｃｋ）の４つのステージで構成される。復号回路７０３ａ、７０３ｂによる多重化データ分離のための動作は、命令フェッチのステージにおいて実行される。
【００３０】
図７は、例として２多重の場合の復号回路７０３ａ、７０３ｂの詳細な構成を説明するための図であって、図７は、図７に示した構成において処理される信号を示している。図７は、復号回路７０３ａ、７０３ｂのいずれか一方のみ（本実施形態では復号回路７０３ａとする）の内部構成を示している。復号回路７０３ａ、７０３ｂは、同様の構成を有していて、復号回路７０３ａの構成及び動作を説明することにより、復号回路７０３ｂの説明を一部省くものとする。
【００３１】
復号回路７０３ａは、分離回路８０１ａ、８０１ｂを備えている。分離回路８０１ａ、８０１ｂは、多重化された信号を複数の信号に分割する（ＤｅＭＵＸ：Ｄｅ−ＭＵｌｔｉｐｌｅＸｅｒ）回路である。また、復号回路７０３ａは、信号生成回路８０２を備えている。信号生成回路８０２は、分離回路８０１ａ、８０１ｂが出力した符号付き数（ｓｉｇｎｅｄ  ｄｉｇｉｔ）を入力し、符号無し２進数（ｕｎｓｉｇｎｅｄ  ｄｉｇｉｔ）を出力する回路である。
【００３２】
分離回路８０１ａ、８０１ｂは、各々２つのＡＮＤ回路８０３ａ、８０３ｂと１つのＥＸＯＲ回路８０４ａとでなる。分離回路８０１ａ、８０１ｂにおいて、ＥＸＯＲ回路８０４ａは、図８（ａ）に示した多重化信号Ａと図８（ｂ）に示した符号化信号Ｂとを入力する。入力された信号は、ＥＸＯＲ回路８０４ａ、ＡＮＤ回路８０３ａにおいて演算され、さらにＡＮＤ回路８０３ｂを経て図８（ｃ）に示す信号Ｃとなって信号生成回路８０２に入力する。
【００３３】
なお、Ａを付して示す多重化信号Ａ（Ａ＿ｋ，Ａ＿ｋ＋１…）は、図５（ｆ）に示した多重化信号と同じ信号である。また、Ｂを付して示す符号化信号Ｂ（Ｂ＿ｋ，Ｂ＿ｋ＋１…）は、図５（ｂ）に示した符号化信号１と同じ信号である。多重化信号、符号化信号のいずれにおいても、添え字は４ビットの信号の各ビットを識別するために付されている。本実施形態では、復号回路７０３ａが、符号化信号１出力するためのマスクＲＯＭを備えていて、常に一定の符号化信号１を出力するものとする。
【００３４】
分離回路８０１ａ、８０１ｂから出力された信号Ｃは、信号生成回路８０２において３つのＥＸＯＲ回路８０４ｂ、８０４ｃ、８０４ｄで演算され、信号生成回路８０２から信号Ｄとして出力される。信号Ｄは、図５（ａ）に示した命令信号１と同じ信号であって、復号回路７０３ａは、多重化された信号から命令信号１を分離して取り出すことになる。
また、同様にして、復号回路７０３ｂは、図８（ａ）に示した多重化信号と図８（ｅ）に示した符号化信号とを入力する。入力された信号は、ＥＸＯＲ回路８０４ａ、ＡＮＤ回路８０３ａにおいて演算され、さらにＡＮＤ回路８０３ｂを経て図８（ｆ）に示す信号となって信号生成回路８０２に入力する。
【００３５】
なお、復号回路７０３ｂに入力された多重化信号は、図５（ｆ）に示した多重化信号と同じ信号である。また、符号化信号は、図５（ｈ）に示した符号化信号２と同じ信号である。本実施形態では、復号回路７０３ｂが、符号化信号２を出力するためのマスクＲＯＭを備えていて、常に一定の符号化信号２を出力するものとする。
分離回路８０１ａ、８０１ｂから出力された図７（ｆ）に示した信号は、信号生成回路８０２において３つのＥＸＯＲ回路８０４ｂ、８０４ｃ、８０４ｄで演算され、信号生成回路８０２から出力される。出力された信号は、図５（ｇ）に示した命令信号２と同じ信号であって、復号回路７０３ａは、多重化された信号から命令信号２を分離して取り出すことになる。
【００３６】
本実施形態のデータ処理装置において、読出部７０２は、読み出された命令を順次ＭＵＸ７０４に送る。また、読み出された命令は、復号回路７０３ａ、７０３ｂにも送られる。そして、前記したように、多重化された命令の多重化信号から命令信号１、命令信号２を各々分離し、次ＭＵＸ７０４に送る。ＭＵＸ７０４は、デコーダ７０６でのｓｗｍ命令検出後の制御にしたがって読出部７０２から受け取った命令と分離された命令とを切替えて後段のデコーダ７０６に送る。
【００３７】
なお、図７に示した構成は、一度に多重化信号の１ビット分を分離する回路８であって、１命令が３２ビットのデータを処理する場合には回路８が３２個必要になる。回路８を３２個接続した状態を図９に示す。
図１０は、本実施形態のデータ処理装置及びデータ多重化方法をコンピュータに実行させるためのプログラムによって得られる効果を説明するための図である。図１０（ａ）は、比較のために示した従来技術の問題点を示した図であって、（ｂ）は、本実施形態のデータ処理装置及びデータ多重化方法をコンピュータに実行させるためのプログラムによって問題点が解決されることを示している。
【００３８】
図１０（ａ）における説明図１１０１では、メモリアドレスとそれに対応する命令とが記され、ｃｊｐは条件に従って分岐する命令である。＊ｃｏｎｄは分岐条件を生成する命令であり、ｂｒｆ１は＊ｃｏｎｄ命令より１つ前の命令、ａｆｔ１は分岐が成立しなかった場合の、ｃｊｐ命令の１つ後の命令である。また、ａｆｔ１’は、分岐が成立した場合に最初に実行される命令である。
【００３９】
説明図１１０２は、ＣＰＵ７００の各ステージで処理中の命令を時系列に示している。
図１０（ａ）の例では、分岐が成立して０×１００２番地にある分岐命令によって０×２０００番地へ分岐した場合、０ｘ１００３番地から０×２０００番地の手前までの命令が実行されることがない無効な命令となる。命令を先読みするだけの従来技術では、分岐によって予め先読みされていた命令が無効になり、命令を破棄することが起こり得る。説明図１１０２中に斜線を付して示した命令は、このような場合に破棄される命令を表している。
【００４０】
図１０（ｂ）における説明図１１０３においても、＊ｃｏｎｄは分岐条件を生成する命令であり、ｂｆｒ１は＊ｃｏｎｄ命令より１つ前の命令、ｍｕｘ１は多重化された命令の１つめの命令である。また、ｓｗｍ命令は、前記したように、ｓｗｍ命令の実行後の命令を多重化命令として扱う命令である。説明図１１０４は、ＣＰＵ７００の各ステージで処理中の命令を時系列に示している。
【００４１】
図１０（ｂ）の例では、０×１００２番地にｓｗｍ命令が書き込まれている。ｓｗｍ命令の実行後、以降の命令は多重化命令として復号回路７０３ａ、７０３ｂに送られる。多重化命令は、分岐成立時あるいは分岐不成立時のいずれかで実行され得る複数の命令を含んでいるから、読み出された命令が無効になることによるペナルティが発生することがない。
【００４２】
なお、ＣＰＵ７００は、ｓｗｍ命令の直後のタイミングで命令に対処することができない。このため、本実施形態では、コンパイラによってｓｗｍ命令の直後にｎｏｐ命令を挿入している。このような本実施形態は、無効となる命令がｎｏｐ命令だけであり、図１０（ａ）に示した従来技術よりも命令の読出し効率が高いことが分かる。
また、本実施形態は、図７に示したように、１ビットについて多重化信号Ａと符号化信号Ｂとを入力するためのゲートを合計４つ設けることによって多重化された命令を分離することができる。このため、本実施形態は、ハードウェア構成の大規模化を抑えながら上記した効果を得ることができる。
【図面の簡単な説明】
【００４３】
【図１】一般的なソースコード及び機械語の命令列を示した図である。
【図２】本発明の一実施形態に適したプログラムを説明するための図である。
【図３】本発明の一実施形態にかかる処理を含む処理全体を示したフローチャートである。
【図４】図３に示したコード生成の処理をより詳細に示したフローチャートである。
【図５】図４のフローチャートの命令多重化の処理を説明するための図である。
【図６】本発明の一実施形態のデータ処理装置の構成を説明するための回路図である。
【図７】図６に示した復号回路の詳細な構成を説明するための図である。
【図８】本発明の一実施形態の多重化された命令の分離の処理を説明するための図である。
【図９】図７に示した復号回路を多数接続した状態を示した図である。
【図１０】本発明の一実施形態によって得られる効果を説明するための図である。
【符号の説明】
【００４４】
８  回路、７００  ＣＰＵ、７０１  メモリ、７０２  読出部、７０３ａ，７０３ｂ  復号回路、７０４  ＭＵＸ、７０６  デコーダ、７０８  実行部、７１０  書戻部、８０１ａ、８０１ｂ  分離回路、８０２  信号生成回路
【図１】
2007140907.tif 000003
【図２】
2007140907.tif 000004
【図３】
2007140907.tif 000005
【図４】
2007140907.tif 000006
【図５】
2007140907.tif 000007
【図６】
2007140907.tif 000008
【図７】
2007140907.tif 000009
【図８】
2007140907.tif 000010
【図９】
2007140907.tif 000011
【図１０】
2007140907.tif 000012