(57)【要約】      （修正有）【課題】  プロセッサの高性能化を図るためには、命令の解読より前の段階で何らかの先行処理を行う必要があるが、組み込み等でよく使われる可変長命令体系のプロセッサの場合には、命令の先頭位置を決定する必要があり、その為には前回の命令フェッチの状態を保存する命令フェッチ状態保存器が必要となり、かつ、その状態は分岐発生時にリセット制御する必要があるなど、ハードウェアが増加したりクリティカルパスが発生するという問題があるだけでなく、制御的にも複雑でバグ発生の要因にも成り得るという問題がある。【解決手段】  可変命令語長の命令列を実行するプロセッサであって、前記命令列に含まれ、操作を記述する命令語を解読する命令解読器と、前記命令語とは排他的に、かつ一定間隔毎に前記命令列に含まれる、命令の位置情報を取り出す命令位置取得手段とを備えることを特徴とする。【選択図】  図２
2007004821.tif 000002
【特許請求の範囲】
【請求項１】
複数の固定長のユニットからなる命令を可変長命令として並列実行するプロセッサであって、
前記命令中には前記命令がどの命令セットに属するかを示す命令セット選択情報が配置されており、前記情報に基づいて命令セットを切り換えることを特徴とするプロセッサ。
【請求項２】
複数の命令セットからなる命令列を生成するプログラム生成装置であって、入力されたプログラムから一定の長さの命令語を抽出する命令抽出手段と、前記命令抽出手段により抽出された前記命令語がどの前記命令セットに属するかを規定する命令セット選択情報を生成する命令セット選択情報生成手段と、前記命令抽出手段により抽出された前記命令語と、前記命令セット選択情報生成手段により生成された前記命令セット選択情報とを合成して前記命令列を生成する命令列生成手段とを備えることを特徴とするプログラム生成装置。
【請求項３】
複数の固定長のユニットからなる命令を可変長命令として並列実行するプロセッサであって、
前記命令中には前記キャッシュに対するライトアクセスがミスであった場合に
主記憶装置のみを書き換えるかまたはキャッシュメモリのみを書き換えるかの情報が配置されており、この情報に基づいてキャッシュに対するライトアクセスがミスであった場合主記憶装置のみを書き換えるかまたはキャッシュメモリのみを書き換えるかの切り換えを行うことを特徴とするプロセッサ。
【請求項４】
命令列を生成するプログラム生成装置であって、入力されたプログラムから一定の長さの命令語を抽出する命令抽出手段と、前記命令抽出手段により抽出された前記命令語に対するキャッシュ制御を規定するキャッシュ制御情報を生成するキャッシュ制御情報生成手段と、前記命令抽出手段により抽出された前記命令語と、前記キャッシュ制御情報生成手段により生成された前記キャッシュ制御情報とを合成して前記命令列を生成する命令列生成手段とを備えることを特徴とするプログラム生成装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、命令の解読処理を軽減するプロセッサ、プログラム生成装置および記録媒体に関するものである。
【背景技術】
【０００２】
近年、電子技術及び情報処理技術の発展によりマイクロプロセッサの性能が向上し、あらゆる機器に組み込まれ広く利用されている。その様なプロセッサでは、パイプライン処理により高い性能を達成している。パイプライン処理とは命令の処理を複数に分割し、それらを時間的にずらして別の命令を並列に処理するものである。特に組み込み用途の場合には、コードサイズの増加を抑制する目的で可変命令語長の命令体系を採用する必要があるが、可変命令語長の命令は命令解読が複雑となるために、命令解読を複数のパイプラインに分割して行う事が多い。
【０００３】
図１６は第１の従来技術における命令のフォーマットである。
【０００４】
従来技術の命令は、２１ビットを単位として（以下ユニットと表現する）同図
（ａ）に示す１ユニットで構成される命令と同図（ｂ）に示す２ユニットで構成される命令の２種類の命令を持ち、２つの命令はそれぞれの命令の先頭の０ビット目の命令フォーマット情報１０１の値で区別されており、０ビット目が０の時には１ユニット命令を、０ビット目が１の時には２ユニット命令を示す。またこれらの命令は、メモリ上では（ｃ）に示すように、１回のフェッチ幅である６４ビットの中に３ユニット入れた形で格納されている。
【０００５】
図１７は第１の従来技術におけるプロセッサのブロック図である。
【０００６】
本プロセッサは、サイクル毎に２命令を同時実行するプロセッサであり、分岐先は必ず命令フェッチ単位の先頭であるとする。
【０００７】
メモリシステム２１０から供給される命令列３２１は、命令供給発行部１６２０に入力される。
【０００８】
命令供給発行部１６２０では、固定長命令変換器１６２２によって可変命令語長命令から解読の容易な固定長命令へ変換される。変換された固定長命令は命令バッファ２２３によって一時的に蓄えられ、命令解読部２３０からの要求に従って２命令ずつ命令レジスタ２２４に供給される。命令レジスタ２２４に格納された２つの命令は、命令解読部２３０へ供給される。命令解読部２３０では、２つの命令解読器２３３、２３４が命令を解読する。命令実行部２４０では、２つの演算器２４３、２４４により演算が行われる。
【０００９】
図１８は固定長命令変換器１６２２の詳細図である。
【００１０】
命令フェッチ状態保存器１６３１は、通常は前回の命令フェッチと今回の命令フェッチを命令が跨いでいるかどうかの状態を保存している。命令が跨いでいない場合には今回の命令フェッチの先頭と命令の先頭が一致している事を、跨いでいる場合には今回の命令フェッチの先頭は２ユニットで構成される命令の後半１ユニットであることを示している。また、分岐が発生した場合には、命令実行部２１内のＰＣ制御部２４２から命令フェッチ制御部１６２１経由で命令フェッチ
に同期して命令フェッチ状態保存器１６３１へ分岐が発生したことが伝えられる。この場合には、命令フェッチ状態保存器１６３１の値は、命令が跨いでいない状態に初期化され、命令フェッチの先頭が命令の先頭となることを示す。第２先頭検出器３２２ｂは命令フェッチ状態保存器１６３１、および、先頭のユニット３２１ａの先頭ビットの情報から２つ目のユニット３２１ｂが命令の先頭かどうかを判断する。同様に、第３先頭検出器３２２ｃは第２先頭検出器３２２ｂ、および、２つ目のユニット３２１ｂの先頭ビットの情報から３つ目のユニット３２１ｃが命令の先頭かどうかを判断する。最後に次状態発生器１６２２ｄは第３先頭検出器３２２ｃ、および、３つ目のユニット３２１ｃの先頭ビットの情報から３２１ｃから始まる命令が今回の命令フェッチで終わるかどうかを判断し、結果を命令フェッチ状態保存器１６３１に保存すると共に、命令フェッチで終わらない場合には一時保存レジスタ３２３へ３つ目のユニット３２１ｃを保存する。
【００１１】
ＭＩＸａ３２４ａは、今回の命令フェッチが命令の途中から始まっていた場合には、一時保存レジスタ３２３に格納した命令の前半部分と命令の後半部分である３２１ａの値を連結したものを、３２１ａが命令の先頭で１ユニットで終わる命令であった場合には、図４（ａ）の様に、３２１ａの値と１ユニット分の意味の無いデータを出力したものを、３２１ａが命令の先頭で２ユニットで終わる命令であった場合には、図４（ｂ）の様に、３２１ａの値と３２１ｂの値を連結したものを命令バッファ２２３に出力し、それ以外の場合には何も出力しない。
【００１２】
同様に、ＭＩＸｂ３２４ｂは、３２１ｂが命令の先頭で１ユニットで終わる命令であった場合には、３２１ｂの値と１ユニット分の意味の無いデータを連結したものを、３２１ｂが命令の先頭で２ユニットで終わる命令であった場合には、３２１ｂの値と３２１ｃの値を連結したものを命令バッファ２２３に出力し、それ以外の場合には何も出力しない。
【００１３】
同様に、ＭＩＸｃ３２４ｃは、３２１ｃが命令の先頭で１ユニットで終わる命令であった場合には、３２１ｃの値と１ユニット分の意味の無いデータを連結し
たものを命令バッファ２２３へ出力し、それ以外の場合には何も出力しない。
【００１４】
また、次状態発生器１６２２ｄは、今回の命令フェッチと次回の命令フェッチを命令が跨いでいるかどうかの情報を命令フェッチ状態保存器１６３１に出力するとともに、跨いでいる場合には一時保存レジスタ３２３に命令の先頭を保存させる。
【００１５】
固定長命令変換器１６２２から命令バッファ２２３へは、最大６ユニットの命令３２５が供給される。
【００１６】
命令列変換器３３２は、命令バッファ２２３に毎回供給される最大６ユニットの命令３２５を、４ユニットずつ、ＦＩＦＯ部３３３に入力する。
【００１７】
ＦＩＦＯ部３３３は、命令解読部２３０の要求に従って４ユニットの命令を命令レジスタ２２４へ出力する。
【発明の開示】
【発明が解決しようとする課題】
【００１８】
この様に、プロセッサの高性能化を図るためには、命令の解読より前の段階で何らかの先行処理を行う必要があるが、組み込み等でよく使われる可変命令語長の命令体系のプロセッサの場合には、命令の先頭位置を決定する必要があり、その為には前回の命令フェッチの状態を保存する命令フェッチ状態保存器１６３１が必要となり、かつ、その状態は分岐発生時にリセット制御する必要があるなど、ハードウェアが増加したりクリティカルパスが発生するという問題があるだけでなく、制御的にも複雑でバグ発生の要因にも成り得るという問題がある。
【課題を解決するための手段】
【００１９】
上記課題を解決するための第１の発明は、命令中に配置された情報を元に命令セットを切り換えるプロセッサである。これにより、命令セットを切り換える命令を使用しなくても済むため、コードサイズが小さくできる。
【００２０】
さらに、上記課題を解決するための第２の発明は、命令中に配置された情報を元にキャッシュに対するライトアクセスがミスであった場合に主記憶装置のみを書き換えるかまたはキャッシュメモリのみを書き換えるかを切り換えるプロセッサである。これにより、より効率的なキャッシュ制御ができる。
【発明の効果】
【００２１】
以上の説明から明らかなように、本発明は、命令中に付加情報を配置し、この情報に基づいて制御することによりプロセッサの構造を簡単にするものである。
【発明を実施するための最良の形態】
【００２２】
以下、本発明に係るプロセッサ、プログラム生成装置、及び記録媒体の実施の形態について、図面を用いて詳細に説明する。
【００２３】
（第１の実施の形態）
（命令フォーマット）
図１は、本発明の第１の実施の形態におけるプロセッサの命令フォーマットである。
【００２４】
本プロセッサは、２１ビットを単位として（以下ユニットと表現する）、同図（ａ）に示す１ユニットで構成される命令と同図（ｂ）に示す２ユニットで構成される２種類の命令を持ち、２つの命令はそれぞれの命令の先頭である０ビット目にある命令フォーマット情報ビット１０１の値で区別されており、０ビット目が０の時には１ユニット命令を、０ビット目が１の時には２ユニット命令を示す。またこれらの命令は、メモリ上では同図（ｃ）、（ｄ）に示すように、１回のフェッチ幅である６４ビットの中に３ユニットの命令と、フェッチ単位内の最初のユニットが命令の先頭かどうかを示す命令の先頭情報１０２を格納したことになっている。
【００２５】
同図（ｃ）の様に命令の先頭情報１０２が１の時には命令の先頭が最初のユニットに存在することを、同図（ｄ）に示す様に０の時には命令の後半が最初のユニットに存在することを示している。
【００２６】
（プロセッサのハードウェア構成）
図２は本発明の第１の実施の形態におけるプロセッサのブロック図である。
【００２７】
本プロセッサは、２命令が同時実行可能なプロセッサであり、分岐先は必ず命令フェッチ単位の先頭であるとする。
【００２８】
２１０は命令列を格納しているメモリシステム、２２０は命令フェッチから固定長命令への変換までを担当する命令供給発行部、２２１は命令フェッチを制御する命令フェッチ制御部、２２２は命令フェッチした可変長命令を固定長命令に変換する固定長命令変換器、２２３は固定長命令をバッファリングする命令バッファ、２２４は解読する命令を格納する命令レジスタ、２３０は命令解読全般を行う命令解読部、２３１は命令解読を制御する命令発行制御部、２３２は命令を解読する命令解読器、２３３は命令を解読する第１命令解読器、２３４は命令を解読する第２命令解読器、２４０は解読結果に従って命令を実行する命令実行部、２４１は命令実行を制御する命令実行制御部、２４２は分岐関係を担当するＰＣ制御部、２４３は第１演算器、２４４は第２演算器、２４５はレジスタを格納するレジスタファイルである。
【００２９】
図３は、命令供給発行部２２０の詳細ブロック図である。
【００３０】
３２１はメモリシステムから供給される６４ビットの命令フェッチデータ、３２１ａは命令フェッチデータ３２１中の１つ目のユニットのデータ、３２１ｂは命令フェッチデータ３２１中の２つ目のユニットのデータ、３２１ｃは命令フェッチデータ３２１中の３つ目のユニットのデータ、３２１ｄは命令フェッチデータ３２１中の命令の位置情報ビット、３２２ｂは２つ目のユニットのデータ３２１ｂが命令の先頭かどうかを判断する第２先頭検出器、３２２ｃは３つ目のユニ
ットのデータ３２１ｃが命令の先頭かどうかを判断する第３先頭検出器、３２２ｄは次の命令フェッチの１つ目のユニットのデータ３２１ａが命令の先頭かどうかを判断する次状態発生器、３２３は今回の命令フェッチ内にある命令の後半が次回の命令フェッチに存在する場合に命令の前半を格納する一時保存レジスタ、３２４ａは１つ目のユニットが末尾、あるいは、先頭の時に２ユニットの固定長命令３２５ａを出力するＭＩＸａ、３２４ｂは２つ目のユニットが先頭の時に２ユニットの固定長命令３２５ｂを出力するＭＩＸｂ、３２４ｃは３つ目のユニットが１ユニット命令の先頭の時に２ユニットの固定長命令３２５ｃを出力するＭＩＸｃ、３３１は命令バッファを制御する命令バッファ制御部、３３２は固定長命令変換器２２２の出力する６ユニットの命令を２ユニット命令の連続に変換する命令列変換器、３３３は命令をためるＦＩＦＯである。
【００３１】
以上の様に構成された本発明の第１の実施の形態のプロセッサについて、以下、その動作を説明する。
【００３２】
メモリシステム２１０から供給される命令列３２１は、命令供給発行部２２０に入力される。命令供給発行部内では、固定長命令変換器２２２によって可変長命令から解読の容易な固定長命令へ変換される。変換された固定長命令は命令バッファ２２３によって一時的に蓄えられ、命令解読部２３０からの要求に従って２命令ずつ命令レジスタ２２４に供給される。命令レジスタ２２４に格納された２つの命令列は、命令解読部２３０へ供給される。命令解読部２３０では、２つの命令解読器２３３、２３４が命令を解読する。命令実行部２４０では、２つの演算器２４３、２４４により演算が行われる。
【００３３】
（固定長命令変換器の詳細な構成）
以下に固定長命令への変換器の詳細を述べる。
【００３４】
命令フェッチデータ３２１中の命令位置情報ビット３２１ｄは、前回の命令フェッチと今回の命令フェッチで命令が跨いでいたかどうかの状態を保存している
。命令が跨いでいない場合には今回の命令フェッチの先頭と命令の先頭が一致している事を、跨いでいる場合には今回の命令フェッチの先頭は２ユニットで構成される命令の後半１ユニットであることを示している。
【００３５】
第２先頭検出器３２２ｂは命令フェッチデータ３２１中の命令位置情報ビット３２１ｄ、および、先頭のユニット３２１ａの先頭ビットの情報から２つ目のユニット３２１ｂが命令の先頭かどうかを判断する。
【００３６】
同様に、第３先頭検出器３２２ｃは第２先頭検出器３２２ｂ、および、２つ目のユニット３２１ｂの先頭ビットの情報から３つ目のユニット３２１ｃが命令の先頭かどうかを判断する。最後に次状態発生器３２２ｄは第３先頭検出器３２２ｃ、および、３つ目のユニット３２１ｃの先頭ビットの情報から３２１ｃから始まる命令が今回の命令フェッチで終わるかどうかを判断し、命令フェッチで終わらない場合には一時保存レジスタ３２３へ３つ目のユニット３２１ｃを保存する。
【００３７】
ＭＩＸａ３２４ａは、今回の命令フェッチが命令の途中から始まっていた場合には、一時保存レジスタ３２３に格納した命令の前半部分と命令の後半部分である３２１ａの値を連結したものを、３２１ａが命令の先頭で１ユニットで終わる命令であった場合には、図４（ａ）の様に、３２１ａの値と１ユニット分の意味の無いデータを連結したものを、３２１ａが命令の先頭で２ユニットで終わる命令であった場合には、図４（ｂ）の様に、３２１ａの値と３２１ｂの値を連結したものを命令バッファ２２３に出力し、それ以外の場合には何も出力しない。
【００３８】
同様に、ＭＩＸｂ３２４ｂは、３２１ｂが命令の先頭で１ユニットで終わる命令であった場合には、３２１ｂの値と１ユニット分の意味の無いデータを連結したものを、３２１ｂが命令の先頭で２ユニットで終わる命令であった場合には、３２１ｂの値と３２１ｃの値を連結したものを命令バッファへ２２３に出力し、それ以外の場合には何も出力しない。
【００３９】
同様に、ＭＩＸｃ３２４ｃは、３２１ｃが命令の先頭で１ユニットで終わる命令であった場合には、３２１ｃの値と１ユニット分の意味の無いデータを連結したものを命令バッファ２２３へ出力し、それ以外の場合には何も出力しない。
【００４０】
（命令列変換器、ＦＩＦＯの詳細な構成）
図７は命令列変換器の動作を説明する表である。
【００４１】
命令列変換器３３２内部には常時０ユニット、あるいは、２ユニットの命令列が存在している。
【００４２】
命令列変換器３３２は、固定長命令変換器から２ユニット、あるいは４ユニット、あるいは６ユニットの命令を受け取る。
【００４３】
命令を受け取った結果、４ユニット以上の命令が用意された時には命令列変換器３３２は、ＦＩＦＯ３３３へ４ユニットの命令を出力する。４ユニット未満の命令が存在する時には、ＦＩＦＯ３３３へは出力せずに命令列変換器３３２に保存する。
【００４４】
ＦＩＦＯ３３３は、内部に用意された命令を、命令解読部２３０からの要求に従って４ユニットずつ命令レジスタ２２４へ出力する。
【００４５】
（プロセッサの動作）
次に具体的な命令を解読実行した場合の本プロセッサの動作について説明する。
【００４６】
図５（ｃ）は本発明の第１の実施の形態におけるプログラムの例である。
【００４７】
本プログラム例では、０ｘ１０００番地（”０ｘ”は１６進数を表す。以下同様。）から１ユニットで構成されたａｄｄ  ｒ０，ｒ１命令、２ユニットで構成
されたａｄｄ  ０ｘ１２３４，ｒ２命令、ａｄｄ  ０ｘ２３４５，ｒ３命令、ｓｕｂ  ０ｘ３４５６，ｒ４命令、１ユニットで構成されたｎｏｐ命令、ｃｍｐ  ｒ１，ｒ２命令、ｓｕｂ  ｒ３，ｒ４命令、ｓｕｂ  ｒ５，ｒ６命令、ｓｕｂ  ｒ６，ｒ７命令が続くとする。この命令列中で、０ｘ１００４番地の命令フェッチは次の命令フェッチに命令が続いているので、命令の位置情報ビット１０２は０に、それ以外は１になる（本来、バイナリの機械語命令だが、ここではニモニック表記している）。
【００４８】
０ｘ１０００番地への分岐命令を検出すると、命令実行制御部２４１はＰＣ制御部２４２に分岐の指令を出力する。ＰＣ制御部２４２は命令フェッチ制御部２２１へ分岐命令を出力し、ＩＡバス２１１へ分岐アドレスを出力する。メモリシステム２１０はＩＡバス２１１に対応した命令列６４ビットをＩＤバス２１２へ出力し、命令供給発行部２２０内の固定長命令変換器２２２が受け取る。
【００４９】
固定長命令変換器２２２では、まず、命令フェッチデータ中の命令の先頭情報ビット１０２が１であることから、１つ目のユニットのデータ３２１ａが命令の先頭であることがわかる。また、第２先頭検出器３２２ｂでは、３２１ａが命令の先頭であることと、１つ目のユニット３２１ａの先頭ビットが０であることから、２つ目のユニットも命令の先頭であることがわかる。同じ様にして、第３先頭検出器３２２ｃでは、３２１ｂが命令の先頭であることと、２つ目のユニット３２１ｂの先頭ビットが１であることから、３つ目のユニットは２つ目のユニットを先頭とする命令の後半である事がわかる。最後に、次状態発生器３２２ｄでは、３２１ｃが命令の末尾である事から３つ目のユニット３２１ｃの先頭ビットを見るまでもなく、３つ目のユニットで命令が終っている事が分かるので、一時保存レジスタ３２３には３つ目のユニットのデータ３２１ｃを保存する必要はない事がわかる。
【００５０】
また、ＭＩＸａ３２４ａは、１つ目のユニットのデータ３２１ａが命令の先頭であり、かつ１ユニット命令である事から、命令データ３２１ａと意味の無いデ
ータ２１ビットを連結したものを命令バッファ２２３に出力する。同様に、ＭＩＸｂ３２４ｂは、２つ目のデータ３２１ｂが命令の先頭であり、２ユニット命令の先頭であることから、命令データ３２１ｂと３２１ｃを連結したものを命令バッファ２２３へ出力する。同様にＭＩＸｃ３２４ｃは、３つ目のデータ３２１ｃが２ユニット命令の後半である事から、何も出力しない。
【００５１】
これにより、０ｘ１０００番地の命令フェッチにより命令バッファへは、図６（ａ１）及び図６（ｂ１）及び図６（ｃ１）の様に４ユニットの命令が命令バッファ２２３に出力される。
【００５２】
次に、０ｘ１００４番地の命令フェッチを行う。
【００５３】
同様の処理を行うことによって、ＭＩＸａ３２４ａは、２ユニット命令の先頭であるので、１つ目のユニットのデータ３２１ａと２つ目のユニットのデータ３２１ｂを連結して命令バッファ２２３へ出力する。ＭＩＸｂ３２４ｂは、２ユニット命令の後半であるので、何も出力しない。ＭＩＸｃ３２４ｃは、２ユニット命令の前半であるので、何も出力しない。次状態発生器３２２ｄは、３２１ｃが次命令の前半であるので、３２１ｃのデータを一時保存レジスタ３２３へ保存する。
【００５４】
これによって、０ｘ１００４番地の命令フェッチにより命令バッファへは、図６（ａ２）及び図６（ｂ２）及び図６（ｃ２）の様に２ユニットの命令が命令バッファ２２３に出力される。
【００５５】
次に、０ｘ１００８番地の命令フェッチを行う。
【００５６】
同様の処理を行うことによって、ＭＩＸａ３２４ａは、２ユニット命令の後半であるので、一時保存レジスタ３２３に保存した前半の命令と１つ目のユニットのデータ３２１ａを連結して命令バッファ２２３へ出力する。ＭＩＸｂ３２４ｂは、１ユニット命令なので、２ユニット目のデータ３２１ｂと２１ビットの意味のないデータを連結して命令バッファ２２３へ出力する。ＭＩＸｃ３２４ｃは、
３つ目のユニットが１ユニット命令であるので、３ユニット目のデータ３２１ｃと２１ビットの意味のないデータを連結して命令バッファ２２３へ出力する。
【００５７】
これによって、０ｘ１００８番地の命令フェッチにより命令バッファへは、図６（ａ３）及び図６（ｂ３）及び図６（ｃ３）の様に６ユニットの命令が命令バッファ２２３に出力される。
【００５８】
同様の処理によって、０ｘ１００ｃ番地の命令フェッチにより命令バッファへは、図６（ａ４）及び図６（ｂ４）及び図６（ｃ４）の様に６ユニットの命令が命令バッファ２２３に出力される。
【００５９】
命令解読部２３０では、固定長命令変換器２２２によって固定長命令に変換された命令を命令バッファ２２３や命令レジスタ２２４を経由して２命令ずつ解読を行う。
【００６０】
（プログラム生成装置の構成）
図１４は本発明の第１の実施の形態におけるプログラム生成装置のブロック図である。
【００６１】
１４１０は命令の位置情報を付加する前のソースプログラム格納手段、１４２０は３ユニット毎のグループに分ける命令抽出手段、１４３０は命令がグループを跨いでいるかどうかを判別する先頭位置情報生成手段、１４４０はグループ化された命令列と先頭位置情報を合成する命令列生成手段、１４５０は生成した命令列を格納する命令列格納手段である。
【００６２】
以上の様に構成された本発明の第１の実施の形態のプログラム生成装置について、以下、その動作を説明する。
【００６３】
ソースプログラム格納手段１４１０には、１ユニットあるいは、２ユニットで
構成されるソースプログラムが格納されている。命令抽出手段１４２０は、ソースプログラムをソースプログラム格納手段１４１０から取得し、それぞれ３ユニットで構成されるグループに分割する。先頭位置情報生成手段１４３０は、命令抽出手段１４２０が出力するグループに分割された命令を取得し、グループの先頭が命令の先頭と一致しているかどうかを判断し、一致している場合には１を、一致していないときには０の値を出力する。命令列生成手段１４４０は命令抽出手段１４２０の出力と先頭位置情報生成手段１４３０の出力を合成して位置情報を付加した命令列を出力する。
【００６４】
（プログラム生成装置の動作）
次に具体的な命令を解読実行した場合の本命令列生成装置の動作について説明する。
【００６５】
図５（ａ）および（ｂ）は本発明の第１の実施の形態におけるプログラム生成装置の入力プログラムと出力されるプログラムの例である。
【００６６】
ソースプログラム格納手段１４１０には、同図（ａ）に示す、１ユニットで構成されたａｄｄ  ｒ０，ｒ１命令、２ユニットで構成されたａｄｄ  ０ｘ１２３４，ｒ２命令、ａｄｄ  ０ｘ１２３４５，ｒ３命令、ｓｕｂ  ０ｘ３４５６，ｒ４命令、１ユニットで構成されたｎｏｐ命令、ｃｍｐ  ｒ１，ｒ２命令、ｓｕｂ
ｒ３，ｒ４命令と、ｓｕｂ  ｒ５，ｒ６命令、ｓｕｂ  ｒ６，ｒ７命令が格納されている。
【００６７】
命令抽出手段１４２０は、ソースプログラム格納手段１４１０に格納されたソースプログラムから図５（ｂ１）の様に３ユニットの命令ａｄｄ  ｒ０，ｒ１命令と２ユニットで構成されたａｄｄ  ０ｘ１２３４，ｒ２命令を抽出し、先頭位置情報生成手段１４３０及び命令列生成手段１４４０に出力する。
【００６８】
先頭位置情報生成手段１４３０では、命令抽出手段１４２０から３ユニットの
命令を受け取ると、その先頭のユニットが命令の先頭であるかどうかを判断する。ａｄｄ  ｒ０，ｒ１命令は命令の先頭であるので１を出力する。
【００６９】
命令列生成手段１４４０は、命令抽出手段１４２０が出力する３ユニットの命令及び先頭位置情報生成手段１４３０が出力する１ビットの値１を合成して、６４ビットの命令列を出力する。
【００７０】
次に、同様にして、命令抽出手段１４２０は、図５（ｂ２）の様にａｄｄ  ０ｘ２３４５，ｒ３命令と、ｓｕｂ  ０ｘ３４５６，ｒ４命令の前半の３ユニットを出力し、先頭のユニットはａｄｄ  ０ｘ２３４５，ｒ３命令命令の先頭であるので、先頭位置情報生成手段１４３０は１を出力する。
【００７１】
次に、同様にして、命令抽出手段１４２０は、図５（ｂ３）の様にｓｕｂ  ０ｘ３４５６，ｒ４命令の後半と、１ユニットで構成されたｎｏｐ命令の３ユニットを出力し、先頭のユニットはｓｕｂ  ０ｘ３４５６，ｒ４命令の後半であるので、先頭位置情報生成手段１４３０は０を出力する。
【００７２】
以上の処理を繰り返すことによって、命令列生成手段１４４０は命令位置情報を付加した命令列を出力する。
【００７３】
図５（ｃ）は、図５（ｂ）の命令列に命令位置情報を付加した命令列である。
【００７４】
（第２の実施の形態）
（命令フォーマット）
図８は、本発明の第２の実施の形態におけるプロセッサの命令フォーマットである。
【００７５】
本プロセッサは、２つの命令セットを有している。
【００７６】
同図（ａ）は２１ビット固定長命令で構成される第１の命令セットであり、同図（ｂ）は６３ビット固定長命令で構成される第２の命令セットである。
【００７７】
２つの命令セットは、６４ビットの命令フェッチ毎単位内に存在する命令セット選択情報で選択される。
【００７８】
同図（ｃ）は、１ビットの命令セット選択情報ＦＭが０の場合の、３個の第１の命令セットで構成される３命令列であり、同図（ｄ）は、１ビットの命令セット選択ビットＦＭが１の場合の、１個の第２の命令セットで構成される命令列である。
【００７９】
図９は、本発明の第２の実施の形態におけるプロセッサの構成図である。
【００８０】
９１０は命令列を格納しているメモリシステム、９２０は命令フェッチした命令を命令レジスタに格納する命令供給発行部、９２１は命令フェッチを制御する命令フェッチ制御部、９２４は解読する命令を格納する命令レジスタ、９３０は命令解読全般を行う命令解読部、９３１は命令解読を制御する命令発行制御部、９３２は命令を解読する命令解読器、９３３ａは２１ビットの命令３つで構成される命令列を解読する第１命令解読器、９３３ｂは６３ビットの命令１つで構成される命令列を解読する第２命令解読器、９３５はいずれかの命令解読器の解読結果を選択するＭＵＸ、９３６は命令セットを決定する命令セット選択器、９４０は解読結果に従って命令を実行する命令実行部、９４１は命令実行を制御する命令実行制御部、９４２は分岐関係を担当するＰＣ制御部、９４３は演算器、９４５はレジスタを格納するレジスタファイルである。
【００８１】
以上の様に構成された本発明の第２の実施の形態のプロセッサについて、以下、その動作を説明する。
【００８２】
メモリシステム９１０から供給される命令列は、命令供給発行部９２０に入力される。命令供給発行部内では、命令解読部９３０からの要求に従って６４ビットずつ命令レジスタ９２４に供給される。命令レジスタ９２４に格納された命令列は、命令解読部９３０へ供給される。命令解読部９３０では、６４ビットの命
令を２種類の命令列として、第１命令解読器９３３ａと第２命令解読器９３３ｂによって解読を行う。命令セット選択器９３６は２つの解読結果のうちどちらかを決定し、その情報によりＭＵＸ９３５は２つの解読結果のうちの１つを選択する。命令実行部９４０では、演算器９４３により演算が行われる。
【００８３】
（命令解読器の詳細な構成）
以下に命令解読器の詳細を述べる。
【００８４】
命令供給発行部９２０から供給された６４ビットの命令列は、第１命令解読器９３３ａ及び第２命令解読器９３３ｂによって解読される。
【００８５】
第１命令解読器９３３ａでは、６４ビットの命令列の内の最初の２１ビットを解読しマイクロ命令９３４ａを出力する。
【００８６】
第２命令解読器９３３ｂでは、６４ビットの命令列の内の６３ビットを解読しマイクロ命令９３４ｂを出力する。
【００８７】
命令セット選択器９３６では、６４ビットの命令列の内の１ビットの命令セット選択情報を用いて命令セットの選択を行う。命令セット選択情報が０の時には、現在命令レジスタ９２４に格納されている命令は第１の命令セットの命令３つで構成されていることを、命令セット選択情報が１の時には、現在命令レジスタ９２４に格納されている命令は第２の命令セットの命令１つで構成されていることを示す。ＭＵＸ９３５は、命令セット選択器９３６が選択した命令セット情報を用いて、第１命令解読器９３３ａの出力するマイクロ命令９３４ａあるいは、第２命令解読器９３３ｂの出力するマイクロ命令９３４ｂのどちらかを選択する。これによって命令解読器９３２は、命令レジスタ９２４に格納された命令列を正しい命令として解読し、命令実行部９４０へ演算命令を発行する。
【００８８】
また、命令セット選択器９３６が第１の命令セットを選択した場合、第１命令
解読器９３３ａは続けて命令レジスタ９２４に格納されている、残りの２つの第１の命令セットの命令の解読を行ない、命令実行部へマイクロ命令９３４ａを出力する。
【００８９】
（プロセッサの動作）
次に具体的な命令を解読実行した場合の本プロセッサの動作について説明する。
【００９０】
図１０（ｃ１）および（ｃ２）は本発明の第２の実施の形態におけるプログラムの例である。
【００９１】
０ｘ１０００番地から第１の命令セットの命令である、ａｄｄ１  ｒ０，ｒ０命令、ｓｕｂ１  ｒ２，ｒ１命令、ｃｍｐ１  ｒ４，ｒ１命令が続き、０ｘ１００４番地から第２の命令セットの命令である、ａｄｄ２  ｒ５，ｒ６命令、ｓｕｂ２  ｒ７，ｒ６命令、ｃｍｐ２  ｒ９，ｒ６命令、ｊｍｐ２  ０ｘ２０００命令が続き、離れて０ｘ２０００番地からは第１の命令セットの命令である、ｍｕｌ１  ｒ０，ｒ１命令、ｄｉｖ１  ｒ２，ｒ３命令、ｓｕｂ１  ｒ１，ｒ２命令が続くとする。この命令列中で、０ｘ１０００、及び０ｘ２０００番地の命令フェッチは第１の命令セットの命令が格納されているので命令セット選択情報は０に、それ以外は第２の命令セットの命令が格納されているので１になる（本来バイナリの機械語命令だが、ここではニモニックで表記している。また、ａｄｄ１命令とｓｕｂ２命令の機械語が同じであるという様に、命令セットが異なると同一の機械語に異なる命令が割り当てられる事もあるし、ａｄｄ１命令とａｄｄ２命令が同じ機械語であるという様に、命令セットが異なっても同一の命令は同一の機械語に割り当てられることもある。）。
【００９２】
０ｘ１０００番地への分岐命令を検出すると、命令実行制御部９４１はＰＣ制御部９４２に分岐の指令を出力する。ＰＣ制御部９４２は命令フェッチ制御部９２１へ分岐命令を出力し、ＩＡバス９１１へ分岐アドレスを出力する。メモリシ
ステム９１０はＩＡバス９１１に対応した０ｘ１０００番地から始まる命令列６４ビットをＩＤバス９１２へ出力し、命令供給発行部９２０内の命令レジスタ９２４が受け取る。
【００９３】
命令解読器９３２内の第１命令解読器９３３ａは、命令レジスタ９２４の先頭２１ビット９２５ａを参照してａｄｄ１  ｒ０，ｒ０命令を解読、第２命令解読器９３３ｂは、命令レジスタ９２４の先頭６３ビット９２５ａ、９２５ｂ、９２５ｃを参照して解読を行い、それぞれマイクロ命令９３４ａ及びマイクロ命令９３４ｂを出力する。同時に、命令セット選択器９３６は命令レジスタ９２４を参照し、命令セット選択情報が０である事から命令セットが第１の命令セットであることを決定する。ＭＵＸ９３５は、第１命令解読器９３３ａの出力するマイクロ命令９３４ａを選択するので、命令実行部９４０ではａｄｄ１  ｒ０，ｒ０命令が実行される。
【００９４】
続いて、第１の命令セットを選択しているので、第１命令解読器９３３ａは続けて命令レジスタ９２４に格納されている、残りの２つの第１の命令セットの命令の解読を行ない、命令実行部９４０へマイクロ命令９３４ａを出力する。これによって、ｓｕｂ１  ｒ２，ｒ１命令、ｃｍｐ１  ｒ４，ｒ１命令が実行される。
【００９５】
次に、０ｘ１００４番地の命令を実行する。命令レジスタ９２４に格納される０ｘ１００４番地の命令フェッチデータの命令セット選択情報は１であるので、第２の命令セットとして、ａｄｄ２  ｒ５，ｒ６命令が解読され、命令実行部９４０で実行される。
【００９６】
同様にして、０ｘ１００８番地は、第２の命令セットであるｓｕｂ２  ｒ７，ｒ６命令が、０ｘ１００ｃ番地は第２の命令セットであるｃｍｐ２  ｒ９，ｒ６命令が、０ｘ１０１０番地は第２の命令セットであるｊｍｐ２  ０ｘ２０００命令が、分岐先の０ｘ２０００番地は、第１の命令セットであるｍｕｌ１  ｒ０，
ｒ１命令、ｄｉｖ１  ｒ２，ｒ３命令、ｓｕｂ１  ｒ１，ｒ２命令が実行される。
【００９７】
（プログラム生成装置の構成）
図１５は本発明の第２の実施の形態におけるプログラム生成装置のブロック図である。
【００９８】
１６１０は命令の位置情報を付加する前のソースプログラム格納手段、１６２０は３ユニット毎のグループに分ける命令抽出手段、１６３０は命令がどちらの命令セットに属しているかの情報を生成する命令セット選択情報生成手段、１６４０はグループ化された命令列と命令セット選択情報を合成する命令列生成手段、１６５０は生成した命令列を格納する命令列格納手段である。
【００９９】
以上の様に構成された本発明の第２の実施の形態のプログラム生成装置について、以下、その動作を説明する。
【０１００】
ソースプログラム格納手段１６１０には、１ユニットで構成される第１の命令セットに属する命令、及び、３ユニットで構成される第２の命令セットに属する命令のソースプログラムが格納されている。命令抽出手段１６２０は、ソースプログラムをソースプログラム格納手段１６１０から取得し、それぞれ３ユニットで構成されるグループに分割する。命令セット選択情報生成手段１６３０は、命令抽出手段１６２０が出力するグループに分割された命令を取得し、グループ内の命令がどちらの命令セットに属しているかを判断し、第１の命令セットに属している時には０を、第２の命令セットに属しているときには１の値を出力する。命令列生成手段１６４０は命令抽出手段１６２０の出力と命令セット選択情報生成手段１６３０の出力を合成して命令セット選択情報を付加した命令列を出力する。
【０１０１】
（プログラム生成装置の動作）
次に具体的な命令を解読実行した場合の本命令列生成装置の動作について説明する。
【０１０２】
図１０（ａ）および（ｂ）は本発明の第２の実施の形態におけるプログラム生成装置の入力プログラムと出力されるプログラムの例である。
【０１０３】
ソースプログラム格納手段１６１０には、同図（ａ）に示す、第１の命令セットの命令である、ａｄｄ１  ｒ０，ｒ０命令、ｓｕｂ１  ｒ２，ｒ１命令、ｃｍｐ１  ｒ４，ｒ１命令が続いて、第２の命令セットの命令である、ａｄｄ２  ｒ５，ｒ６命令、ｓｕｂ２  ｒ７，ｒ６命令、ｃｍｐ２  ｒ９，ｒ６命令、ｊｍｐ２  ０ｘ２０００命令が続くとする。
【０１０４】
命令抽出手段１６２０は、ソースプログラム格納手段１６１０に格納されたソースプログラムから図１０（ｂ１）の様に３ユニット分の命令である、第１の命令セットの命令である、ａｄｄ１  ｒ０，ｒ０命令、ｓｕｂ１  ｒ２，ｒ１命令、ｃｍｐ１  ｒ４，ｒ１命令を抽出し、命令セット選択情報生成手段１６３０及び命令列生成手段１６４０に出力する。
【０１０５】
命令セット選択情報生成手段１６３０では、命令抽出手段１６２０から３ユニットの命令を受け取ると、命令列がどちらの命令セットに属するかを判断する。これら３ユニットの命令は第１の命令セットであるので０を出力する。
【０１０６】
命令列生成手段１６４０は、命令抽出手段１６２０が出力する３ユニットの命令及び命令セット選択情報生成手段１６３０が出力する１ビットの値０を合成して、６４ビットの命令列を出力する。
【０１０７】
次に、同様にして、命令抽出手段１６２０は、図１０（ｂ２）の様に第２の命令セットの命令である、ａｄｄ２  ｒ５，ｒ６命令の３ユニットを出力し、該当ユニットは第２の命令セットに属する命令であるので、命令セット選択情報生成
手段１６３０は１を出力する。
【０１０８】
以上の処理を繰り返すことによって、命令列生成手段１６４０は命令セット選択情報を付加した命令列を出力する。
【０１０９】
図１０（ｃ１）は、図１０（ｂ）の命令列に命令セット選択情報を付加した命令列である。
【０１１０】
（従来の命令セット選択方式の課題）
この様に従来の命令セット選択方式では、プログラムカウンタ１８３０に実装されたＴビットによって命令セットの選択を行うが、１バイト単位の命令を持つプロセッサではこの方式は使用できないという問題がある。また、命令セットの選択は実行時のプログラムカウンタ１８３０の値によってのみ決まり、実際に動作させないと命令セットは決定できないため、例えば０ｘ１０００番地の命令列を見た時にそれがどちらの命令セットなのかを判断することができず、機械語レベルでのデバッグに困難があったり、例えば０ｘ１００１に分岐命令を記述するなど、プログラマの間違いで第１の命令セットで記述されたプログラムに、最下位ビットが１の分岐アドレスで分岐した場合に動作の保証ができないという問題がある。
【０１１１】
また、公開特許公報特開平８−４４５５７号に従来例として記載されているＶＡＸ１１コンピューターの様に、プロセッサステータスレジスタに実装した命令セット切り替えレジスタへの書込によって命令セットを選択する方式では、プロセッサステータスレジスタに書き込む命令が必要となるので、プログラムが余分に必要とされ、プログラム領域が肥大したり、書込処理によりプロセッサの性能が低下してしまうという問題がある。また通常のレジスタ書込は、例えばライトバックステージの様な、命令の解読よりも後のパイプラインステージで行われるために、プロセッサステータスレジスタへの書き込み命令の解読と、プロセッサステータスレジスタへの実際の書き込みの間に時間差が発生してしまうため、命
令セットの切替えが高速に行えないという問題もある。
【０１１２】
（第３の実施の形態）
（命令フォーマット）
図１１は、本発明の第３の実施の形態におけるプロセッサの命令フォーマットである。
【０１１３】
本プロセッサは、同図（ａ）に示すように、２１ビットを単位とした固定長命令形式となっている。６４ビットの命令フェッチ単位は、２１ビットの３つの命令と１ビットの命令キャッシュ制御情報で構成される。命令キャッシュ制御情報が０の時は、その命令フェッチ単位に含まれる命令をキャッシュに登録しない事を、１の時は、その命令フェッチ単位に含まれる命令をキャッシュに登録する制御を示す。同図（ｂ）は、命令キャッシュ制御情報が０の場合で、命令フェッチ単位に含まれる３つの命令は命令キャッシュに登録しない事を示す。同図（ｃ）は、命令キャッシュ制御情報が１の場合で、命令フェッチ単位に含まれる３つの命令は命令キャッシュに登録する事を示す。
【０１１４】
（プロセッサのハードウェア構成）
図１２は本発明の第３の実施の形態におけるプロセッサのブロック図である。
【０１１５】
１２１０は命令列を格納しているメモリシステム、１２５０は命令列に対するキャッシュを制御する命令キャッシュ装置、１２５２は命令列を命令キャッシュ装置１２５０に登録するかどうかを判断する命令キャッシュ制御解読器、１２５３は命令キャッシュ、１２２０はメモリシステム１２１０或いは命令キャッシュ装置１２５０から命令を得る命令供給発行部、１２２１は命令フェッチを制御する命令フェッチ制御部、１２２４は解読する命令を格納する命令レジスタ、１２３０は命令解読全般を行う命令解読部、１２３１は命令解読を制御する命令発行制御部、１２３２は命令を解読する命令解読器、１２４０は解読結果に従って命令を実行する命令実行部、１２４１は命令実行を制御する命令実行制御部、１２
４２は分岐関係を担当するＰＣ制御部、１２４３は演算器、１２４５はレジスタを格納するレジスタファイルである。
【０１１６】
以上の様に構成された本発明の第３の実施の形態のプロセッサについて、以下、その動作を説明する。
【０１１７】
命令フェッチ制御部１２２１から命令フェッチアドレスが発行されると、命令キャッシュ装置１２５０は該当する命令が命令キャッシュ１２５３に格納されているかを確認し、命令キャッシュ１２５３に格納されていない場合には、メモリシステム１２１０へＩＡバス１２１１を通じて命令フェッチアドレスを出力する。
【０１１８】
メモリシステム１２１０はＩＤバス１２１２を通じて命令列を命令キャッシュ装置１２５０へ供給する。
【０１１９】
命令キャッシュ装置１２５０では、命令キャッシュ制御解読器１２５２は命令列の内の命令キャッシュ制御情報を解読し、命令キャッシュ制御情報が１の時には命令キャッシュ１２５３への登録を行い、命令キャッシュ情報が０の時には命令キャッシュ１２５３への登録を行わない。
【０１２０】
命令キャッシュ装置１２５０はメモリシステム１２１０或いは命令キャッシュ１２５３のいずれかに格納された命令列をＣＤバス１２５５を介して命令供給発行部１２２０に供給する。
【０１２１】
命令供給発行部１２２０では、命令解読部１２３０からの要求に従って６４ビットずつ命令レジスタ１２２４に命令列を供給する。命令レジスタ１２２４に格納された命令列は、命令解読部１２３０へ供給される。命令解読部１２３０では、６４ビットの命令を３つの２１ビット命令として、命令解読器１２３２によって解読を行う。
【０１２２】
命令実行部１２４０では、演算器１２４３により演算が行われる。
【０１２３】
（プロセッサの動作）
次に具体的な命令を解読実行した場合の本プロセッサの動作について説明する。
【０１２４】
図１３は本発明の第３の実施の形態におけるプログラムの例である。
【０１２５】
このプログラムは、割り込み処理プログラムの様な通常プログラムの流れとは異なり、本プログラムに分岐して来た時、命令キャッシュには本プログラムは格納されていない状況を想定している。
【０１２６】
本プログラム例では、０ｘ１０００番地からｃｌｒ  ｒ１命令、  ｍｏｖ  ｉｍｍ，ｒ４命令、ｍｏｖ  ｒ５，ｒ０命令、ｍｏｖ  （ｒ０），ｒ３命令、ｍｕｌ  ｒ３，ｒ４命令、ａｄｄ  ｒ４，ｒ１命令、ｓｕｂ  ｉｍｍ，ｒ０命令、ｃｍｐ  ｒ１，ｒ０命令、ｂｎｅ  ０ｘ１００４命令、ｒｔｉ命令が配置されており、この命令列中、０ｘ１００４番地及び０ｘ１００８番地に格納されている６つの命令は内部で繰り返して実行されるのに対して、ほかの命令は１度しか実行されない。この為、０ｘ１００４番地及び０ｘ１００８番地に格納されている命令は命令キャッシュに登録した方が効率が高いので命令キャッシュ制御情報は１に、それ以外の命令キャッシュ情報は０に設定されている。
【０１２７】
割り込み等の要因により、０ｘ１０００番地への分岐命令を検出すると、命令実行制御部１２４１はＰＣ制御部１２４２に分岐の指令を出力する。ＰＣ制御部１２４２は命令フェッチ制御部１２２１へ分岐命令を出力し、ＣＡバス１２５４へ分岐アドレスを出力する。
【０１２８】
命令キャッシュ１２５３にはこれらのプログラムは格納されていないので、命令キャッシュ装置１２５０はＩＡバス１２１１を通じてメモリシステム１２１０から命令列を要求する。メモリシステム１２１０は命令列をＩＤバス１２１２を
通じて命令キャッシュ装置１２５０へ供給する。
【０１２９】
命令キャッシュ装置１２５０は、命令列をＣＤバス１２５５を介して命令供給発行部１２２０内の命令レジスタ１２２４へ供給する。また、キャッシュ制御解読器１２５２は命令列の内の命令キャッシュ制御情報を解読し、命令キャッシュ制御情報が０であることから、命令キャッシュ１２５３への登録を行わない。
【０１３０】
命令解読器１２３２は、命令レジスタ１２２４の命令を２１ビットずつ、ｃｌｒ  ｒ１命令、  ｍｏｖ  ｉｍｍ，ｒ４命令、ｍｏｖ  ｒ５，ｒ０命令として解読し、命令実行部１２４０は演算を行う。
【０１３１】
同様にして、０ｘ１００４番地及び０ｘ１００８番地の６つの命令の実行を行う。これらの命令列は命令キャッシュ制御情報が１に設定されているので、メモリシステム１２１０から命令フェッチすると同時に、命令キャッシュ装置１２５０では命令キャッシュ１２５３への登録が行われる。これによってｍｏｖ  （ｒ０），ｒ３命令、ｍｕｌ  ｒ３，ｒ４命令、ａｄｄ  ｒ４，ｒ１命令、ｓｕｂ  ｉｍｍ，ｒ０命令、ｃｍｐ  ｒ１，ｒ０命令、ｂｎｅ  ０ｘ１００４命令が解読、実行されると同時に、命令キャッシュ１２５３への登録が行われる。
【０１３２】
次に、再度０ｘ１００４番地及び０ｘ１００８番地の６つの命令を実行する場合、これらの命令列は命令キャッシュ１２５３に既に格納されているので、メモリシステム１２１０にアクセスすることなく、高速に実行される。
【０１３３】
最後に、０ｘ１００ｃ番地のｒｔｉ命令を実行する場合には、０ｘ１０００番地の命令を実行する場合と同じく、メモリシステム１２１０から命令列を獲得して実行するが、命令キャッシュ１２５３への登録は行わない。
【０１３４】
（従来のキャッシュ制御方式の課題）
公開特許公報特開平８−４４５５７号に従来例として記載されているＶＡＸ１
１コンピューターの様に、プロセッサステータスレジスタに実装したキャッシュ制御レジスタへの書込によってキャッシュの登録や参照などの動作を制御する方式では、プロセッサステータスレジスタに書き込む命令が必要となるので、プログラムが余分に必要とされ、プログラム領域が肥大したり、書込処理によりプロセッサの性能が低下してしまうという問題がある。また通常のレジスタ書込は、例えばライトバックステージの様な、解読ステージよりも後のパイプラインステージで行われるために、プロセッサステータスレジスタへの書き込み命令の解読と、プロセッサステータスレジスタへの実際の書き込みの間に時間差が発生してしまうため、キャッシュの制御が高速に行えないという問題もある。
【０１３５】
以上で添付図面を参照して本発明の図示した実施の形態について説明したが、本発明はこれら実施の形態のみに限定されるものではなく、当業者であれば特許請求の範囲に記載した発明の要旨から逸脱することなく、種々の変形及び変更が可能であると理解すべきである。
【０１３６】
第１の実施の形態に関して、本実施の形態では命令フェッチ幅や命令長を規定したがそれらを特に限定するものではない。
【０１３７】
また、命令位置情報を、格納する単位を命令フェッチ幅としたが、この単位は、一定間隔、あるいは分岐先の命令毎であれば特に限定しない、例えば、命令フェッチ幅や、命令フェッチ幅の整数倍や、命令フェッチ幅の整数分の１であっても構わない。
【０１３８】
また、命令位置情報は、前記単位に必ず存在する必要は無く、例えば、分岐先を含む単位のみに存在していたり、分岐先を含む単位の次の単位のみに存在していたり、分岐命令を含む単位や、メモリアクセス命令を含む単位にのみ存在していたりしても構わない。
【０１３９】
また、命令の位置情報を、単位の中で最低位の番地に位置する命令の位置情報
としたが、この位置情報は、単位の中で最低位の番地の命令が命令のどの部分であるかという情報でも構わないし、また、単位内に含まれる全ての命令の位置情報であっても構わない。
【０１４０】
また、命令の位置情報を、可変語長命令から固定長への変換に用いたが、この情報を何に利用するかは特に限定しない。例えば、解読時の処理の負荷分散を目的とした前解読処理であっても構わないし、分岐命令の分岐先を予測する分岐予測や、先行投機実行の為に使用しても構わない。
【０１４１】
また、ソースプログラム格納手段が扱うデータは、ニモニックであっても機械語であっても構わないし、Ｃ言語の様な高級言語であっても構わない。
【０１４２】
また、命令抽出手段は、３ユニット毎の固定長を抽出したが、固定長の長さは何でも構わないし、また、分岐先の命令語の間隔に対応した長さの命令を抽出する機能であっても構わない。
【０１４３】
また、命令列格納手段は、具体的に何であるかは限定しない。例えば、フロッピー（登録商標）ディスクやハードディスクや、光ディスクなどの媒体であっても構わない。
【０１４４】
第２の実施の形態に関して、本実施の形態では命令フェッチ幅や命令長を規定したがそれらを特に限定するものではない。
【０１４５】
また、命令セット選択情報を、格納する単位を命令フェッチ幅としたが、この単位は、一定間隔あるいは分岐先の命令毎であれば特に限定しない、例えば、命令フェッチ幅や、命令フェッチ幅の整数倍や、命令フェッチ幅の整数分の１であっても構わない。
【０１４６】
また、命令セット選択情報は、前記単位に必ず存在する必要は無く、例えば、分岐先を含む単位のみに存在していたり、分岐先を含む単位の次の単位のみに存
在していたり、分岐命令を含む単位や、メモリアクセス命令を含む単位にのみ存在していたりしても構わない。
【０１４７】
また、命令セット選択情報を、解読器の出力するマイクロ命令の無効化に用いたが、この情報を何に利用するかは特に限定しない。例えば、解読器に入力する命令列の無効化処理に使っても構わないし、解読器の動作状態の制御に使用しても構わない。
【０１４８】
また、命令セットを固定長命令としたが、それらを限定するものではない。例えば、全て可変長命令であっても構わないし、混在であっても構わない。また、可変長命令の場合には、命令の先頭あるいは末尾が格納されている単位の命令セット選択情報であっても構わない。
【０１４９】
また、ソースプログラム格納手段が扱うデータは、ニモニックであっても機械語であっても構わないし、Ｃ言語の様な高級言語であっても構わない。
【０１５０】
また、命令抽出手段は、３ユニット毎の固定長の命令列を抽出したが、固定長の長さは何でも構わないし、また、分岐先の命令語の間隔に対応した可変の長さの命令列を抽出する機能であっても構わない。
【０１５１】
また、命令列格納手段は、具体的に何であるかは限定しない。例えば、フロッピー（登録商標）ディスクやハードディスクや、光ディスクなどの媒体であっても構わない。
【０１５２】
第３の実施の形態に関して、本実施の形態では命令フェッチ幅や命令長を規定したがそれらを特に限定するものではない。
【０１５３】
また、キャッシュ制御情報を、格納する単位を命令フェッチ幅としたが、この単位は、一定間隔あるいは分岐先の命令毎であれば特に限定しない、例えば、命令フェッチ幅や、命令フェッチ幅の整数倍や、命令フェッチ幅の整数分の１であ
っても構わない。
【０１５４】
また、キャッシュ制御情報は、前記単位に必ず存在する必要は無く、例えば、分岐先を含む単位のみに存在していたり、分岐先を含む単位の次の単位のみに存在していたり、分岐命令を含む単位や、メモリアクセス命令を含む単位にのみ存在していたりしても構わない。
【０１５５】
また、キャッシュ制御情報を、命令列の命令キャッシュへの登録制御に用いたが、命令キャッシュへのアクセス制御であっても構わないし、データキャッシュへの登録制御やアクセス制御であっても構わない。
【０１５６】
また、命令セットを固定長命令としたが、それらを限定するものではない。例えば、全て可変長命令であっても構わないし、混在であっても構わない。また、可変長命令の場合には、命令の先頭あるいは末尾が格納されている単位の命令セット選択情報であっても構わない。
【０１５７】
また、制御情報は、キャッシュ制御情報に限定しない。具体的には、先行命令フェッチ制御であったり、割り込み制御であったり、ＭＭＵに対する制御情報であったりしても構わない。先行命令フェッチの場合には、先行命令フェッチの一時禁止情報であったり、命令フェッチした命令列を一時的に格納する命令バッファの格納バイト数をソフトウェア的に制御するものであったり、先行命令フェッチのフェッチバス幅であったりしても構わない。割り込み制御情報の場合には、割り込み禁止情報であったり、割り込み禁止レベル情報であったりしても構わない。また、単一の制御情報ではなく、複数の制御情報を混在させても構わない。混在するときには、同一単位内に混在させても構わないし、単位毎に異なる制御情報を組み込む形式にしても構わない。
【０１５８】
また、制御情報は、現在の単位に対する制御情報であっても構わないし、次の単位に対する制御情報であっても構わない。
【図面の簡単な説明】
【０１５９】
【図１】本発明の第１の実施の形態におけるプロセッサの命令フォーマットおよび、命令フェッチ時の命令列の並びを示す図
【図２】本発明の第１の実施の形態におけるプロセッサのブロック構成図
【図３】本発明の第１の実施の形態における命令供給発行部のブロック構成図
【図４】本発明の第１の実施の形態における固定長命令変換器の出力フォーマットを示す図
【図５】本発明の第１の実施の形態におけるプログラムを示す図
【図６】本発明の第１の実施の形態におけるプログラムを変換した固定長命令を示す図
【図７】本発明の第１の実施の形態における命令列変換器の動作の説明図
【図８】本発明の第２の実施の形態におけるプロセッサの命令フォーマットおよび、命令フェッチ時の命令列の並びを示す図
【図９】本発明の第２の実施の形態におけるプロセッサのブロック構成図
【図１０】本発明の第２の実施の形態におけるプログラムを示す図
【図１１】本発明の第３の実施の形態におけるプロセッサの命令フォーマットおよび、命令フェッチ時の命令列の並びを示す図
【図１２】本発明の第３の実施の形態におけるプロセッサのブロック構成図
【図１３】本発明の第３の実施の形態におけるプログラムを示す図
【図１４】本発明の第１の実施の形態におけるプログラム生成装置のブロック構成図
【図１５】本発明の第２の実施の形態におけるプログラム生成装置のブロック構成図
【図１６】従来のプロセッサの命令フォーマットおよび、命令フェッチ時の命令列の並びを示す図
【図１７】従来のプロセッサのブロック構成図
【図１８】従来のプロセッサにおける命令供給発行部のブロック構成図
【図１９】従来におけるプログラムを示す図
【符号の説明】
【０１６０】
１０１  命令フォーマット情報
１０２  命令の先頭情報
２１０  メモリシステム
２２０  命令供給発行部
２２１  命令フェッチ制御部
２２２  固定長命令変換器
２２３  命令バッファ
２２４  命令レジスタ
２３０  命令解読部
２３１  命令発行制御部
２３２  命令解読器
２３３  第１命令解読器
２３４  第２命令解読器
２４０  命令実行部
２４１  命令実行制御部
２４２  ＰＣ制御部
２４３  第１演算器
２４４  第２演算器
２４５  レジスタファイル
９１０  命令列を格納しているメモリシステム
９２０  命令フェッチした命令を命令レジスタに格納する命令供給発行部
９２１  命令フェッチを制御する命令フェッチ制御部
９２４  解読する命令を格納する命令レジスタ
９３０  命令解読全般を行う命令解読部
９３１  命令解読を制御する命令発行制御部
９３２  命令を解読する命令解読器
９３３ａ  ２１ビットの命令３つで構成される命令列を解読する第１命令解読器
９３３ｂ  ６３ビットの命令１つで構成される命令列を解読する第２命令解読器
９３５  いずれかの命令解読器の解読結果を選択するＭＵＸ
９３６  命令セットを決定する命令セット選択器
９４０  解読結果にしたがって命令を実行する命令実行部
９４１  命令実行を制御する命令実行制御部
９４２  分岐関係を担当するＰＣ制御部
９４３  演算器
９４５  レジスタを格納するレジスタファイル
１２１０  命令列を格納しているメモリシステム
１２２０  メモリシステム１２１０或いは命令キャッシュ装置１２５０から命令を得る命令供給発行部
１２２１  命令フェッチを制御する命令フェッチ制御部
１２２４  解読する命令を格納する命令レジスタ
１２３０  命令解読全般を行う命令解読部
１２３１  命令解読を制御する命令発行制御部
１２３２  命令を解読する命令解読器
１２４０  解読結果にしたがって命令を実行する命令実行部
１２４１  命令実行を制御する命令実行制御部
１２４２  分岐関係を担当するＰＣ制御部
１２４３  演算器
１２４５  レジスタを格納するレジスタファイル
１２５０  命令列に対するキャッシュを制御する命令キャッシュ装置
１２５２  命令列を命令キャッシュ装置１２５０に登録するかどうかを判断するキャッシュ制御解読器
１２５３  命令キャッシュ
【図１】
2007004821.tif 000003
【図２】
2007004821.tif 000004
【図３】
2007004821.tif 000005
【図４】
2007004821.tif 000006
【図５】
2007004821.tif 000007
【図６】
2007004821.tif 000008
【図７】
2007004821.tif 000009
【図８】
2007004821.tif 000010
【図９】
2007004821.tif 000011
【図１０】
2007004821.tif 000012
【図１１】
2007004821.tif 000013
【図１２】
2007004821.tif 000014
【図１３】
2007004821.tif 000015
【図１４】
2007004821.tif 000016
【図１５】
2007004821.tif 000017
【図１６】
2007004821.tif 000018
【図１７】
2007004821.tif 000019
【図１８】
2007004821.tif 000020
【図１９】
2007004821.tif 000021