(57)【要約】  １６ビット固定長命令セットなどの既存の命令セットとの互換性を維持して、命令コード空間が拡張されたデータプロセッサを提供する。  特定の複数命令の組合せを禁止しているデータプロセッサにおいて、その禁止組合せパターンを別の命令として追加定義した命令セットを採用する。別の命令として追加定義した前記禁止組合せパターンの命令に対して、例えば、追加定義前の命令セット用の命令ディスパッチ機構をそのまま使えるように定義するために、追加定義前の命令セットがプレフィックスコードを含む命令セットの場合に、前記禁止組合せパターンによって追加定義する命令を、その命令の後半コードのみで定義される命令と同じ命令タイプに限定する。
2012144374.tif 000002
【特許請求の範囲】
【請求項１】
複数の命令パイプラインを有するデータプロセッサであって、
並列的にフェッチされた複数の命令コードを順次蓄積するグローバル命令キューと、
前記グローバル命令キューから出力された複数の命令コードに対して命令コードタイプ毎に探索を行い、探索結果に基づいて命令コードを命令パイプライン毎に振り分けるディスパッチ回路とを有し、
個々の命令コードの本来の処理が禁止されることになる特定の複数の命令コードの組合せによる禁止組合せパターンを別の命令として追加定義した命令セットを有する、データプロセッサ。
【請求項２】
前記特定の複数の命令コードの禁止組み合わせパターンによって追加定義される命令は、当該組み合わせパターンの後半の命令コードパターンのみで定義される命令コードと同じ命令タイプに限定される、請求項１記載のデータプロセッサ。
【請求項３】
前記特定の複数の命令コードの禁止組み合わせパターンにおける前半及び後半のそれぞれの命令コードパターンは異なる命令コードである、請求項２記載のデータプロセッサ。
【請求項４】
前記ディスパッチ回路は、探索対象とする複数の命令コードの探索単位の中で目的とする命令コードタイプの命令コードを検出したときは当該検出した命令コードを有効として出力すると共にその直前の命令コードをプレフィックスコード候補として出力し、前記探索単位の先頭で目的とする命令コードタイプの命令コードを検出したときは当該先頭の命令コードを有効として出力し、前記探索単位の後端まで目的とする命令コードタイプの命令コードを検出できなかったときは当該後端の命令コードをプレフィックスコード候補として出力する、請求項３記載のデータプロセッサ。
【請求項５】
前記命令パイプラインは、プレフィックスコード候補として供給された命令コードが前記特定の複数の命令コードの組み合わせを構成するときは当該特定の複数の命令コードの組み合わせを、追加定義された命令として処理し、プレフィックスコード候補として供給された命令コードが前記特定の複数の命令コードの組み合わせを構成するものでないときないときはこれを無視する、請求項４記載のデータプロセッサ。
【請求項６】
前記命令パイプラインは、プレフィックスコード候補として供給された前記後端の命令コードを、その直後の命令コード探索において先頭で検出されて供給された命令コードに対して前記特定の複数の命令コードの組み合わせを構成するためのプレフィックスコード候補として用いる、請求項５記載のデータプロセッサ。
【請求項７】
前記特定の複数の命令コードの禁止組み合わせパターンによって追加定義される命令は分岐命令に専用化され、当該禁止組み合わせパターンの後半の命令コードパターンには分岐命令の命令コードが使用される、請求項２記載のデータプロセッサ。
【請求項８】
前記組み合わせによって別定義される前記特定の複数の命令コードの禁止組み合わせパターンにおける前半の命令コードパターンは遅延スロット付き分岐命令であり、後半の命令コードパターンは遅延スロットに置けない遅延スロット付き分岐命令以外の分岐命令である、請求項７記載のデータプロセッサ。
【請求項９】
前記ディスパッチ回路は、探索対象とする複数の命令コードの探索単位の中の最後以外で目的とする命令コードタイプの命令コードを検出したときは当該検出した命令コードを有効として出力すると共にその直後の命令コードをポストフィックスコード候補として出力し、前記探索単位の中の最後で目的とする命令コードタイプの命令コードを検出したときは当該最後の命令コードを有効として出力する、請求項７記載のデータプロセッサ。
【請求項１０】
前記命令パイプラインは、ポストフィックスコード候補として供給された命令コードが前記特定の複数の命令コードの組み合わせを構成するときは当該特定の複数の命令コードの組み合わせを追加定義された命令として処理し、ポストフィックスコード候補として供給された命令コードが前記特定の複数の命令コードの組み合わせを構成するものでないときないときはこれを無視する、請求項９記載のデータプロセッサ。
【請求項１１】
前記命令パイプラインは、前記ディスパッチ回路から供給された前記最後の命令コードに対して、その直後の命令コード探索において先頭で検出されて供給された命令コードを前記特定の複数の命令コードの組み合わせを構成するためのポストフィックスコード候補として用いる、請求項１０記載のデータプロセッサ。
【請求項１２】
前記特定の複数の命令コードの禁止組み合わせパターンにおける後半の命令コードパターンには前半の命令コードパターンとは異なる命令コードパターンが使用され、
前記ディスパッチ回路はその前段にプリデコーダを有し、
前記プリデコーダは、命令コードの命令コードタイプを判別すると共に、隣接する命令コード間で命令コードタイプの情報を交換して、命令コードが前記禁止組み合わせパターンを構成する命令タイプであるかを確定するための情報を前記ディスパッチ回路に供給し、
前記ディスパッチ回路は、前記確定するための情報を用いることにより（前記禁止組み合わせパターンによる別定義された命令の命令タイプが当該禁止組み合わせパターンの後半の命令コードパターンによる命令タイプと異なる場合にも）前記禁止組み合わせパターンによる命令を供給する命令パイプラインを決定する、請求項１記載のデータプロセッサ。
【請求項１３】
前記命令セットに含まれる命令コードは基本長とそれに対する２倍長の命令コードが混在する混在命令コードであり、
前記ディスパッチ回路は基本長の命令コードに対しては基本長単位で対応する命令パイプラインに供給し、２倍長の命令コードに対しては２倍長単位で対応する命令パイプラインに供給し、
前記禁止組合せパターンの命令コードは２倍長命令コードとして定義される、請求項１記載のデータプロセッサ。
【請求項１４】
複数の命令パイプラインを有するデータプロセッサであって、
並列的にフェッチされた複数の命令コードを順次蓄積するグローバル命令キューと、
前記グローバル命令キューから出力された複数の命令コードに対して命令コードタイプ毎に探索を行い、探索結果に基づいて命令コードを命令パイプライン毎に振り分けるディスパッチ回路とを有し、
本来組み合わせが禁止されていないが意味のない複数の命令コードの組み合わせによる禁止組合せパターンを別の命令として追加定義した命令セットを有する、データプロセッサ。
【請求項１５】
複数の命令パイプラインを有するデータプロセッサであって、
並列的にフェッチされた複数の命令コードを順次蓄積するグローバル命令キューと、
前記グローバル命令キューから出力された複数の命令コードに対して命令コードタイプ毎に探索を行い、探索結果に基づいて命令コードを命令パイプライン毎に振り分けるディスパッチ回路とを有し、
前記命令パイプラインは更に、個々の命令コードの本来の処理が禁止されることになる特定の複数の命令コードの組み合わせに対して、単一の別の命令コードとして処理を行い、
前記ディスパッチ回路は、前記特定の複数の命令コードの組み合わせを探索して対応する命令パイプラインに供給する、データプロセッサ。
【請求項１６】
前記特定の複数の命令コードの禁止組み合わせパターンによって追加定義される命令は、当該組み合わせパターンの後半の命令コードパターンのみで定義される命令コードと同じ命令タイプに限定される、請求項１５記載のデータプロセッサ。
【請求項１７】
前記特定の複数の命令コードの禁止組み合わせパターンにおける前半及び後半のそれぞれの命令コードパターンは異なる命令コードである、請求項１６記載のデータプロセッサ。
【請求項１８】
前記特定の複数の命令コードの禁止組み合わせパターンによって追加定義される命令は分岐命令に専用化され、当該禁止組み合わせパターンの後半の命令コードパターンには分岐命令の命令コードが使用される、請求項１６記載のデータプロセッサ。
【請求項１９】
前記組み合わせによって別定義される前記特定の複数の命令コードの禁止組み合わせパターンにおける前半の命令コードパターンは遅延スロット付き分岐命令であり、後半の命令コードパターンは遅延スロットに置けない遅延スロット付き分岐命令以外の分岐命令である、請求項１８記載のデータプロセッサ。
【請求項２０】
前記組み合わせによって別定義される前記特定の複数の命令コードの禁止組み合わせパターンにおける後半の命令コードパターンには前半の命令コードパターンとは異なる命令コードパターンが使用され、
前記ディスパッチ回路はその前段にプリデコーダを有し、
前記プリデコーダは、命令コードの命令コードタイプを判別すると共に、隣接する命令コード間で命令コードタイプの情報を交換して、命令コードが前記禁止組み合わせパターンを構成する命令タイプであるかを確定するための情報を前記ディスパッチ回路に供給し、
前記ディスパッチ回路は、確定するための情報を用いることにより（前記禁止組み合わせパターンによる別定義された命令の命令タイプが当該禁止組み合わせパターンの後半の命令コードパターンによる命令タイプと異なる場合にも）前記禁止組み合わせパターンによる命令を供給する命令パイプラインを決定する、請求項１５記載のデータプロセッサ。
【請求項２１】
前記命令セットに含まれる命令コードは基本長とそれに対する２倍長の命令コードが混在する混在命令コードであり、
前記ディスパッチ回路は基本長の命令コードに対しては基本長単位で対応する命令パイプラインに供給し、２倍長の命令コードに対しては２倍長単位で対応する命令パイプラインに供給し、
前記禁止組合せパターンの命令コードは２倍長命令コードとして定義される、請求項１５記載のデータプロセッサ。
【請求項２２】
複数の命令パイプラインを有するデータプロセッサであって、
並列的にフェッチされた複数の命令コードを順次蓄積するグローバル命令キューと、
前記グローバル命令キューから出力された複数の命令コードに対して命令コードタイプ毎に探索を行い、探索結果に基づいて命令コードを命令パイプライン毎に振り分けるディスパッチ回路とを有し、
前記命令パイプラインは更に、本来組み合わせが禁止されていないが意味のない特定の複数の命令コードの組み合わせに対して、単一の別の命令コードとして処理を行い、
前記ディスパッチ回路は、前記特定の複数の命令コードの組み合わせを探索して対応する命令パイプラインに供給する、データプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、命令コードの基本長に対して多倍長の新たな命令コードを命令セットに追加するための技術に関し、例えば、１６ビット固定長命令セットまたは１６／３２ビット長混在命令セットのプロセッサのうち、ディレイスロット命令を持ち、スロット不当例外の発生するプロセッサに適用して有効な技術に関するものである。
【背景技術】
【０００２】
高効率が求められる機器組み込み用途のデータプロセッサ（組込プロセッサ）では、高コード効率の実現可能な１６ビット固定長命令セットのＲＩＳＣ（Ｒeduced Ｉnstruction Ｓet Ｃomputer）型の組込プロセッサが普及している。高コード効率は、メモリの大容量化が進んだ現在においても、オンチップのキャッシュ、ＲＡＭやＲＯＭの有効活用には欠かせないものである。しかしながら、１６ビット固定長命令セットでは、プログラムサイズを小さく出来る反面、命令数が増加する。特に、オペランド指定の制約から、レジスタ間転送、即値転送命令の命令数が増加する。命令数の増加は、性能低下や電力増加の原因となる。【０００３】
こうした問題は１６ビット固定長命令セットの命令コード空間が２１６＝６４ｋパターンと、３２ビット固定長命令セットの命令コード空間２３２＝４Ｇパターンに比べて非常に小さいことに起因する。このため、例えば、１６ビット固定長命令と３２ビット固定長命令を混在させて命令コード空間を広げたデータプロセッサが提供されている。一方、特許文献１および特許文献２のプロセッサでは、１６ビット固定長命令セットに１６ビットプレフィックスを追加することにより命令コード空間を広げている。特許文献３では更に１６ビットプレフィックスを含む命令セットにおけるスーパースカラ実行方式の実現方法を開示している。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０００−２８４９６２号公報
【特許文献２】特開２００４−０３００１５号公報
【特許文献３】特開２０１０−６６８９３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
前述のように、１６ビット固定長命令コードの命令コード空間の小ささを補うための命令コード空間拡張方式として、１６／３２ビット長混在命令セット方式と、１６ビットプレフィックス追加方式とがある。しかしながら、既存の１６ビット固定長命令セットとの互換性を維持したまま命令を追加するには十分な空き命令コード空間を必要とするが、通例、そのような余裕は少ない。【０００６】
従来１６ビット固定長命令セットと３２ビット固定長命令セットという２つの命令セットがモード切替えによって使い分けられていたてものを、１６／３２ビット長混在命令セットに統合した命令セットとするために、例えば１６ビット長命令セットの空きパターンのうち、先頭５ビットが１１１０１, １１１１０,  および１１１１１の場合を３２ビット長命令に割り当てることによって、３x２（３２−５）＝３８４Ｍ（メガ）パターンを確保することができるようになる。しかしながら、３２ビットコード空間で定義されていた従来の３２ビット固定長命令セットを、バイナリ互換を維持したまま、上記空間に割り当てることはできず、更に、バイナリ互換を維持しなくてもよいとしても、全ての命令を上記空間に収めることもできない。【０００７】
また、１６／３２ビット長混在命令セットとして、１６ビットコード空間のパターンのうち、８ビットオペランドの４コードを３２ビット長命令に割り当てることによって互換性を維持しようとするものがある。この混在命令セットにおいて、その４コードの内の２コードは、３２ビット化によって加えた１６ビットを全てオペランドフィールドにして、２４ビットオペランドフィールドの２命令に割り当て、残りの２コードは、加えた１６ビットのうち４ビットをコードフィールドに、１２ビットをオペランドフィールドにして、２０ビットオペランドフィールドの３２命令に割り当てることにより、拡張可能なコード空間は、２x２２４＋３２x２２０＝２２６＝６４Ｍパターンとされる。しかしながら命令の拡張規模は小さくなる。【０００８】
特許文献１，２に記載のプレフィックスを用いる場合も同様にプレフィックスコードに割り当て可能なパターンが限定されると、上記同様に命令の拡張規模を大きくすることは難しい。【０００９】
また、拡張された命令コード空間で定義された命令に対しても高速な命令発行を保証できなければ逆に性能低下を引き起こすことになる。スーパースカラによる命令実行に対しては命令コードタイプを高速かつ並列に判定して、各命令パイプラインに効率的に命令を発行できるようにすることの重要性が本発明者によって見出された。【００１０】
この点に関し、１６／３２ビット長混在命令セット方式において、３２ビット長命令の後半１６ビットを拡張部と呼ぶことにすると、命令コードか拡張部かどうかでコードの解釈が変わる。そして、拡張部かどうかは先行する命令コードに依存するため、逐次デコードが必要になり、このままでは命令コードタイプを高速かつ並列に判定することは困難である。【００１１】
一方、プレフィックスコードを用いた拡張方式では、１６ビットコード単位の並列デコードが可能であり、命令コードタイプを高速かつ並列に判定できる。例えば、特許文献３ではプレフィックス方式における効率的なスーパースカラ命令発行方式を開示している。しかしながら、特許文献３などに代表されるプレフィックス方式であっても、割り当て可能なプレフィックスコードそれ自体が少なければ、更なる優位性を獲得することはできない。【００１２】
本発明の目的は、１６ビット固定長命令セットなどの既存の命令セットとの互換性を維持して、命令コード空間が拡張されたデータプロセッサを提供することにある。【００１３】
本発明の別の目的は、拡張された命令コード空間の命令に対しても複数の命令パイプラインに対する命令供給を効率的に行うことができるデータプロセッサを提供することにある。【００１４】
本発明の前記並びにその他の目的と新規な特徴は本明細書の記述及び添付図面から明らかになるであろう。
【課題を解決するための手段】
【００１５】
本願において開示される発明のうち代表的なものの概要を簡単に説明すれば下記の通りである。【００１６】
すなわち、特定の複数命令の組合せを禁止しているデータプロセッサにおいて、その禁止組合せパターンを別の命令として追加定義した命令セットを採用する。【００１７】
別の命令として追加定義した前記禁止組合せパターンの命令に対して、例えば、追加定義前の命令セット用の命令ディスパッチ機構をそのまま使えるように、定義する。例えば、追加定義前の命令セットがプレフィックスコードを含む命令セットの場合に、前記禁止組合せパターンによって追加定義する命令を、その命令の後半コードのみで定義される命令と同じ命令タイプに限定する。【００１８】
また、追加定義前の命令セットがプレフィックスコードを含む命令セットであるとき、前記禁止組合せパターンを分岐命令専用とし、その後半パターンとして分岐命令を使用する。【００１９】
また、追加定義前の命令セットがプレフィックスコードを含む命令セットであるとき、前記禁止組合せパターンの後半に、前半に使用しないパターンのみ使用し、隣接コード間で命令コードタイプ情報を交換することにより、前記禁止組合せパターンの命令タイプを確定させる。【００２０】
また、追加定義前の命令セットが基本長と２倍長の混在命令コードである場合に、前記禁止組合せパターンを２倍長命令コードとして処理するようにする。【００２１】
一方、禁止されていないが意味のない２命令の組み合わせを禁止して、その禁止組合せパターンを別の命令として追加定義する命令セットを採用してデータプロセッサを構成することも可能である。
【発明の効果】
【００２２】
本願において開示される発明のうち代表的なものによって得られる効果を簡単に説明すれば下記のとおりである。【００２３】
すなわち、１６ビット固定長命令セットなどの既存の命令セットとの互換性を維持して、命令コード空間が拡張されたデータプロセッサを実現することができる。また、拡張された命令コード空間の命令に対しても複数の命令パイプラインに対する命令供給を効率的に行うことができる。
【図面の簡単な説明】
【００２４】
【図１】図１は「スロット不当例外パターン」を構成する「遅延スロット付分岐命令」を例示する説明図である。
【図２】図２は図１の命令の他に「遅延スロットに置けない命令」として利用される命令を更に例示する説明図である。
【図３】図１と図２の命令の組み合わせによる「スロット不当例外パターン」をオペランドフィールドのビット数に応じて分類して例示した説明図である。
【図４】図4は命令の種類ＴＹＰＥに対する命令コードの上位４ビットＣＯＤＥの割当を分類した説明図である。
【図５】図５には本実施の形態に係るデータプロセッサを例示するブロック図である。
【図６】図６はプロセッサコアの構成を例示するブロック図である。
【図７】図７はロセッサコアのパイプライン構成を例示する説明図である。
【図８】図８は本実施の形態に係るデータプロセッサのグローバル命令キューＧＩＱの構成を例示するブロック図である。
【図９】図９は図８のグローバル命令キューＧＩＱの分岐命令探索ディスパッチ回路ＢＲ−ＩＳＤの構成を例示するブロック図である。
【図１０】図１０は実施の形態３におけるプリデコーダの構成を提示するブロック図である。
【図１１】図１１は同一レジスタへの連続ロードのような無意味な２命令の組み合わせによってコード空間を拡張する実施の形態５で着目する命令として挙げたオペランドを１２ビット持つ命令で実行結果をレジスタに格納する命令を例示する説明図である。
【図１２】図１２は実施の形態１においてグローバル命令キューＧＩＱの作用を説明するためのフローチャートである。
【図１３】図１３は実施の形態２においてグローバル命令キューＧＩＱの作用を説明するための図１２に対応されるフローチャートである。
【図１４Ａ】図１４Ａは分岐命令バッファを１段有する分岐制御部ＢＲＣのデコーダ構成を例示するブロック図である。
【図１４Ｂ】図１４Ｂは分岐命令バッファを複数段有する分岐制御部ＢＲＣのデコーダ構成を例示するブロック図である。
【図１５Ａ】図１５Ａは実施の形態４において最大３２ビットの命令コードを供給し、１６ビットコードの２命令スーパースカラ実行と、３２ビットコードのスカラ実行を可能とするデコーダの構成を例示するブロック図である。
【図１５Ｂ】図１５Ｂは実施の形態４において最大４８ビットの命令コードを供給し、先行命令が１６ビットコードの２命令スーパースカラ実行と、３２ビットコードのスカラ実行を可能とするデコーダの構成を例示するブロック図である。
【図１６】図１６はスロット不当例外パターンを全て新規３２ビット命令定義に使用している実施の形態４を、実施の形態３の方式に近い形で実装した場合に、実施の形態３における図１０の命令プリデコーダを実施の形態に対応させたときの構成を例示するブロック図である。
【図１７】図１７は実施の形態５を実施の形態３の方式に近い形で実装した場合に実施の形態３では図１０のとおりであった命令プリデコーダを実施の形態５向けに構成した例を示すブロック図である。
【図１８】図１８は実施の形態５を実施の形態４の図１６の方式に近い形で実装した場合に実施の形態４では図１６のとおりであった命令プリデコーダを実施の形態５向けに構成した例を示すブロック図である。
【発明を実施するための形態】
【００２５】
１．実施の形態の概要
先ず、本願において開示される発明の代表的な実施の形態について概要を説明する。代表的な実施の形態についての概要説明で括弧を付して参照する図面中の参照符号はそれが付された構成要素の概念に含まれるものを例示するに過ぎない。
【００２６】
〔１〕＜特定の複数の命令コードの禁止組合せパターンを別命令として追加定義＞
本発明の代表的な実施の形態に係るデータプロセッサ（ＭＰＵ）は、複数の命令パイプライン（ＥＸＰＬ，ＬＳＰＬ，ＢＲＰＬ）と、並列的にフェッチされた複数の命令コードを順次蓄積するグローバル命令キュー（ＧＩＱ）と、前記グローバル命令キューから出力された複数の命令コードに対して命令コードタイプ毎に探索を行い、探索結果に基づいて命令コードを命令パイプライン毎に振り分けるディスパッチ回路（ＥＸ−ＩＳＤ，ＬＳ−ＩＳＤ，ＢＲ−ＩＳＤ）とを有する。このデータプロセッサは、個々の命令コードの本来の処理が禁止されることになる特定の複数の命令コードの組合せによる禁止組合せパターンを別の命令として追加定義した命令セットを有する。
【００２７】
１６ビット固定長命令セットに含まれるような遅延スロットは、分岐命令の後続命令を入れるスロットであり、このスロットにある命令（遅延スロット命令）は、分岐先の命令の前に実行される。通常このスロットは１命令分である。また、分岐命令と遅延スロット命令の間で例外や割込が起きると、遅延スロット命令から処理を再開することになり、分岐命令が正しく処理されないため、両者を不可分に実行する方式が一般的である。更に、分岐命令がＰＣ（プログラムカウンタ）を変更するため、遅延スロット命令はＰＣを参照したり変更したりする命令を禁止することが一般的である。この結果、分岐命令と遅延スロット命令のペアは３２ビット長命令のように扱われ、禁止された組み合わせパターンは、スロット不当例外として扱われ活用されていない。この実施の形態では、「遅延スロット付分岐命令と遅延スロットに置けない命令のペアによる３２ピットパターン」のような禁止パターンを活用して、新たな命令を命令セットに追加定義する。これにより、１６ビット固定長命令セットなどの既存の命令セットとの互換性を維持して、命令コード空間が拡張されたデータプロセッサを実現することができる。
【００２８】
ここで、本明細書において禁止された組み合わせパターンとは次のような意義を有するものとしても把握することができる。即ち、第１の処理を実行する第１命令コードと第２の処理を実行する第２命令コードとを組み合わせることによって第１処理及び／又は第２処理に例えばエラー又は誤動作を生ずる虞のある当該第１命令コードと第２命令コードとの組み合わせパターンを意味する。従って、禁止された組み合わせパターンか否かは命令セットの組み合わせに対して組み合わせ禁止が明示されていることを要せず、例えば事実上エラー又は誤動作を生ずる虞がある組み合わせパターンであれば良い。
【００２９】
〔２〕＜追加定義の命令コードタイプは禁止組み合わせパターンの後の命令コードタイプに一致（実施の形態１）＞
項１のデータプロセッサにおいて、前記特定の複数の命令コードの禁止組み合わせパターンによって追加定義される命令は、当該組み合わせパターンの後半の命令コードパターンのみで定義される命令コードと同じ命令タイプに限定される。
【００３０】
これにより、前記禁止組み合わせパターンの前半を後半のプレフィックスとして扱うことが可能になる。
【００３１】
〔３〕＜前後異なる命令コードによる禁止組み合わせパターン＞
項２のデータプロセッサにおいて、前記特定の複数の命令コードの禁止組み合わせパターンにおける前半及び後半のそれぞれの命令コードパターンは異なる命令コードである。
【００３２】
前記禁止組み合わせパターンとしての「スロット不当例外パターン」において、遅延スロット付分岐命令が遅延スロットに置けない命令でもあるため、遅延スロット付分岐命令はパターンの前半にも後半にもなり得る。そうすると、遅延スロット付分岐命令が連続すると奇数番目が前半、偶数番目が後半なので、その区別には逐次デコードが必要であり、複数の命令パイプラインへの命令割り振り処理の効率が低下する虞がある。上記手段によれば、遅延スロットに置けない命令には遅延スロット付分岐命令が除外されることになり、複数の命令パイプラインへの命令割り振り処理の効率化に資することができる。
【００３３】
〔４〕＜ディスパッチ回路によるプレフィックス候補の振り分け＞
項３のデータプロセッサにおいて、前記ディスパッチ回路は、探索対象とする複数の命令コードの探索単位の中で目的とする命令コードタイプの命令コードを検出したときは当該検出した命令コードを有効として出力すると共にその直前の命令コードをプレフィックスコード候補として出力し、前記探索単位の先頭で目的とする命令コードタイプの命令コードを検出したときは当該先頭の命令コードを有効として出力し、前記探索単位の後端まで目的とする命令コードタイプの命令コードを検出できなかったときは当該後端の命令コードをプレフィックスコード候補として出力する。
【００３４】
上記より、ディスパッチ回路は、入力した命令がサーチスコープ内にあれば、その命令を対応する命令パイプラインに発行すると共に、その命令の直前のコードをプレフィックスとみなして、その命令に付加して当該命令パイプライン（実行パイプライン）にディスパッチし、各実行パイプラインのデコーダが命令に付加されたコードがプレフィックスかどうかをチェックして、プレフィックスならばそれも使用して命令デコードすることにより、プレフィックス付き命令に対してもスーパースカラ発行することができる。例えば、遅延スロット付分岐命令がある場合でも、遅延スロット命令をその命令用の命令パイプラインにディスパッチし、遅延スロット付分岐命令を当該命令パイプラインにディスパッチすればよい。これにより、拡張された命令コード空間の命令に対しても複数の命令パイプラインに対する命令供給を効率的に行うことができる。
【００３５】
〔５〕＜命令パイプラインによるプレフィックスコード候補の扱い＞
項４のデータプロセッサにおいて、前記命令パイプラインは、プレフィックスコード候補として供給された命令コードが前記特定の複数の命令コードの組み合わせを構成するときは当該特定の複数の命令コードの組み合わせを、追加定義された命令として処理し、プレフィックスコード候補として供給された命令コードが前記特定の複数の命令コードの組み合わせを構成するものでないときないときはこれを無視する。
【００３６】
上記より、命令パイプラインはディスパッチされた命令コードの解読に際して特別に複雑な処理を行わずに、禁止組み合わせパターンの新たな命令に対する実行処理を行うことができる。
【００３７】
〔６〕＜後の探索による命令コードに対する前の探索によるプレフィックスコード候補の扱い＞
項５のデータプロセッサにおいて、前記命令パイプラインは、プレフィックスコード候補として供給された前記後端の命令コードを、その直後の命令コード探索において先頭で検出されて供給された命令コードに対して前記特定の複数の命令コードの組み合わせを構成するためのプレフィックスコード候補として用いる。
【００３８】
単独で供給されたプレフィックスコードに対して容易に対処することができる。
【００３９】
〔７〕＜追加定義の命令コードタイプ及びを禁止組み合わせパターンの命令コードを全てが分岐命令（実施の形態２）＞
項２のデータプロセッサにおいて、前記特定の複数の命令コードの禁止組み合わせパターンによって追加定義される命令は分岐命令に専用化され、当該禁止組み合わせパターンの後半の命令コードパターンには分岐命令の命令コードが使用される。
【００４０】
項２のデータプロセッサは、第１に、命令コードが「スロット不当例外パターン」の場合、パターン前半の遅延スロット付分岐命令が分岐命令として分岐パイプラインにディスパッチされたとき、パターン後半が付いて来ないため、実行できない場合があり、無駄なディスパッチが発生することになる。第２に、パターン後半が命令と見なされてディスパッチされ、パターン前半がそのプレフィックス候補として付加されるため、パターン後半と「スロット不当例外パターン」が同じ実行パイプラインで実行される命令のコードでなければならないという制約を受ける。項７の技術的手段はその解消に寄与する。
【００４１】
〔８〕＜遅延スロット付き分岐命令と遅延スロットに置けない他の分岐命令＞
項７のデータプロセッサにおいて、前記組み合わせによって別定義される前記特定の複数の命令コードの禁止組み合わせパターンにおける前半の命令コードパターンは遅延スロット付き分岐命令であり、後半の命令コードパターンは遅延スロットに置けない遅延スロット付き分岐命令以外の分岐命令である。
【００４２】
遅延スロット付き分岐命令とその遅延スロットに配置される分岐命令とを用いることによって前記禁止組み合わせパターンに対するパターン種を容易に制限する事ができる。
【００４３】
〔９〕＜ディスパッチ回路によるポストフィックス候補の振り分け＞
項７のデータプロセッサにおいて、前記ディスパッチ回路は、探索対象とする複数の命令コードの探索単位の中の最後以外で目的とする命令コードタイプの命令コードを検出したときは当該検出した命令コードを有効として出力すると共にその直後の命令コードをポストフィックスコード候補として出力し、前記探索単位の中の最後で目的とする命令コードタイプの命令コードを検出したときは当該最後の命令コードを有効として出力する。
【００４４】
項７では「スロット不当例外パターン」を分岐命令専用とし、その後半パターンとして分岐命令を使用し、プレフィックスは分岐命令には使用しないものとしたが、このとき項８では更に、分岐命令をディスパッチする際はその命令の直前のコードではなく直後のコードを付加し、分岐パイプラインのデコーダが、命令が「スロット不当例外パターン」であれば付加したコードも使用することにより、「スロット不当例外パターン」の適切なデコードが可能となり、項7で説明した前記第１の点を回避できる。このとき、「スロット不当例外パターン」の後半パターンが分岐命令であるため、第２の点についても発生しない。
【００４５】
〔１０〕＜命令パイプラインによるポストフィックスコード候補の扱い＞
項９のデータプロセッサにおいて、前記命令パイプラインは、ポストフィックスコード候補として供給された命令コードが前記特定の複数の命令コードの組み合わせを構成するときは当該特定の複数の命令コードの組み合わせを追加定義された命令として処理し、ポストフィックスコード候補として供給された命令コードが前記特定の複数の命令コードの組み合わせを構成するものでないときないときはこれを無視する。
【００４６】
上記より、命令パイプラインはディスパッチされた命令コードの解読に際して特別に複雑な処理を行わずに、禁止組み合わせパターンの新たな命令に対する実行処理を行うことができる。
【００４７】
〔１１〕＜後の探索による命令コードに対する前の探索によるポストフィックスコード候補の扱い＞
項１０のデータプロセッサにおいて、前記命令パイプラインは、前記ディスパッチ回路から供給された前記最後の命令コードに対して、その直後の命令コード探索において先頭で検出されて供給された命令コードを前記特定の複数の命令コードの組み合わせを構成するためのポストフィックスコード候補として用いる。
【００４８】
単独で供給された命令コードとその直後の探索で供給されたプレフィックスコードに対して容易に対処することができる。
【００４９】
〔１２〕＜禁止組み合わせパターンの隣接コード間で命令コードタイプ情報を交換して当該禁止組合せパターンの命令タイプを予め確定（実施の形態３）＞
項１のデータプロセッサにおいて、前記特定の複数の命令コードの禁止組み合わせパターンにおける後半の命令コードパターンには前半の命令コードパターンとは異なる命令コードパターンが使用され、前記ディスパッチ回路はその前段にプリデコーダを有する。前記プリデコーダは、命令コードの命令コードタイプを判別すると共に、隣接する命令コード間で命令コードタイプの情報を交換して、命令コードが前記禁止組み合わせパターンを構成する命令タイプであるかを確定するための情報を前記ディスパッチ回路に供給する。前記ディスパッチ回路は、前記確定するための情報を用いることにより（前記禁止組み合わせパターンによる別定義された命令の命令タイプが当該禁止組み合わせパターンの後半の命令コードパターンによる命令タイプと異なる場合にも）前記禁止組み合わせパターンによる命令を供給する命令パイプラインを決定する。
【００５０】
禁止組み合わせパターンを分岐命令専用とせず、任意の命令タイプの命令として活用するにはそのための命令コード判定機構が必要である。１６ビット単位のような命令コードの基本長単位で命令コードを判定するだけでは、任意に命令タイプの禁止組み合わせパターンを検出することができないが、命令コードの基本長単位の命令コード判定結果を隣接コード間で情報交換することによって、禁止組み合わせパターンを検出する事ができる。そして、パターン前半をプレフィックスと同様に扱い、パターン後半を分岐命令、ロードストア命令、および演算命令などの何れかの命令と同様に扱うことにより、禁止組み合わせパターンに対して命令タイプ若しくは命令による処理機能を自由に割り当てることが可能となる。
【００５１】
〔１３〕＜基本長と２倍長の混在命令コードを命令セットに持つ場合に禁止組合せパターンを２倍長命令コードとする（実施の形態４）＞
項１のデータプロセッサにおいて、前記命令セットに含まれる命令コードは基本長とそれに対する２倍長の命令コードが混在する混在命令コードである。前記ディスパッチ回路は基本長の命令コードに対しては基本長単位で対応する命令パイプラインに供給し、２倍長の命令コードに対しては２倍長単位で対応する命令パイプラインに供給する。このとき、前記禁止組合せパターンの命令コードは２倍長命令コードとして定義される。
【００５２】
基本長と２倍長の混在命令コード体系の命令セットを持つ場合に、禁止組み合わせパターンを３２ビット命令として扱うことにより、混在命令コードに対して逐次デコードするプリデコード機能などを有効に利用して、禁止組み合わせパターンを用いた命令の拡張を容易に行うことができる。この場合には、全ての禁止組み合わせパターンに対して何れの命令パターンであっても割り当て可能に活用することが得策である。
【００５３】
〔１４〕＜禁止されていないが意味のない複数命令の組み合わせパターンを別命令として追加定義（実施の形態５）＞
本発明のさらに別の実施の形態に係るデータプロセッサ（ＭＰＵ）は、複数の命令パイプライン（ＥＸＰＬ，ＬＳＰＬ，ＢＲＰＬ）と、並列的にフェッチされた複数の命令コードを順次蓄積するグローバル命令キュー（ＧＩＱ）と、前記グローバル命令キューから出力された複数の命令コードに対して命令コードタイプ毎に探索を行い、探索結果に基づいて命令コードを命令パイプライン毎に振り分けるディスパッチ回路（ＥＸ−ＩＳＤ，ＬＳ−ＩＳＤ，ＢＲ−ＩＳＤ）とを有する。このデータプロセッサは、本来組み合わせが禁止されていないが意味のない複数の命令コードの組み合わせによる禁止組合せパターンを別の命令として追加定義した命令セットを有する。
【００５４】
前記禁止組み合わせパターンのように例外を発生するパターン以外に、プログラム上で意味のない複数命令の組み合わせにも本発明の概念を適用することができる。例えば、同一レジスタへの連続ロードの場合、１回目のロードのロード先のレジスタが２回目のロードのソースオペランドでなければ、１回目のロードは実行する必要がない。このような同一レジスタへの連続ロードは禁止されていないが、このような２命令の組み合わせを禁止して本発明を適用すればコード空間を拡張することができる。
【００５５】
〔１５〕＜特定の複数の命令コードの禁止組合せパターンを別命令として追加定義＞
本発明のさらに別の実施の形態に係るデータプロセッサ（ＭＰＵ）は、複数の命令パイプライン（ＥＸＰＬ，ＬＳＰＬ，ＢＲＰＬ）と、並列的にフェッチされた複数の命令コードを順次蓄積するグローバル命令キュー（ＧＩＱ）と、前記グローバル命令キューから出力された複数の命令コードに対して命令コードタイプ毎に探索を行い、探索結果に基づいて命令コードを命令パイプライン毎に振り分けるディスパッチ回路（ＥＸ−ＩＳＤ，ＬＳ−ＩＳＤ，ＢＲ−ＩＳＤ）とを有する。前記命令パイプラインは更に、個々の命令コードの本来の処理が禁止されることになる特定の複数の命令コードの組み合わせに対して、単一の別の命令コードとして処理を行う。前記ディスパッチ回路は、前記特定の複数の命令コードの組み合わせを探索して対応する命令パイプラインに供給する。
【００５６】
項１と同様に作用する。
【００５７】
〔１６〕＜追加定義の命令コードタイプは禁止組み合わせパターンの後の命令コードタイプに一致（実施の形態１）＞
項１５のデータプロセッサにおいて、前記特定の複数の命令コードの禁止組み合わせパターンによって追加定義される命令は、当該組み合わせパターンの後半の命令コードパターンのみで定義される命令コードと同じ命令タイプに限定される。
【００５８】
項２と同様に作用する。
【００５９】
〔１７〕＜前後異なる命令コードによる禁止組み合わせパターン＞
項１６のデータプロセッサにおいて、前記特定の複数の命令コードの禁止組み合わせパターンにおける前半及び後半のそれぞれの命令コードパターンは異なる命令コードである。
【００６０】
項３と同様に作用する。
【００６１】
〔１８〕＜追加定義の命令コードタイプ及びを禁止組み合わせパターンの命令コードを全てが分岐命令（実施の形態２）＞
項１６のデータプロセッサにおいて、前記特定の複数の命令コードの禁止組み合わせパターンによって追加定義される命令は分岐命令に専用化され、当該禁止組み合わせパターンの後半の命令コードパターンには分岐命令の命令コードが使用される。
【００６２】
項７と同様に作用する。
【００６３】
〔１９〕＜遅延スロット付き分岐命令と遅延スロットに置けない他の分岐命令＞
項１８のデータプロセッサにおいて、前記組み合わせによって別定義される前記特定の複数の命令コードの禁止組み合わせパターンにおける前半の命令コードパターンは遅延スロット付き分岐命令であり、後半の命令コードパターンは遅延スロットに置けない遅延スロット付き分岐命令以外の分岐命令である。
【００６４】
項８と同様に作用する。
【００６５】
〔２０〕＜禁止組み合わせパターンの隣接コード間で命令コードタイプ情報を交換して当該禁止組合せパターンの命令タイプを予め確定（実施の形態３）＞
項１５のデータプロセッサにおいて、前記組み合わせによって別定義される前記特定の複数の命令コードの禁止組み合わせパターンにおける後半の命令コードパターンには前半の命令コードパターンとは異なる命令コードパターンが使用される。前記ディスパッチ回路はその前段にプリデコーダを有する。前記プリデコーダは、命令コードの命令コードタイプを判別すると共に、隣接する命令コード間で命令コードタイプの情報を交換して、命令コードが前記禁止組み合わせパターンを構成する命令タイプであるかを確定するための情報を前記ディスパッチ回路に供給する。前記ディスパッチ回路は、確定するための情報を用いることにより（前記禁止組み合わせパターンによる別定義された命令の命令タイプが当該禁止組み合わせパターンの後半の命令コードパターンによる命令タイプと異なる場合にも）前記禁止組み合わせパターンによる命令を供給する命令パイプラインを決定する。
【００６６】
項１２と同様に作用する。
【００６７】
〔２１〕＜基本長と２倍長の混在命令コードを命令セットに持つ場合に禁止組合せパターンを２倍長命令コードとする（実施の形態４）＞
項１５のデータプロセッサにおいて、前記命令セットに含まれる命令コードは基本長とそれに対する２倍長の命令コードが混在する混在命令コードである。前記ディスパッチ回路は基本長の命令コードに対しては基本長単位で対応する命令パイプラインに供給し、２倍長の命令コードに対しては２倍長単位で対応する命令パイプラインに供給する。前記禁止組合せパターンの命令コードは２倍長命令コードとして定義される。
【００６８】
項１３と同様に作用する。
【００６９】
〔２２〕＜禁止されていないが意味のない複数命令の組み合わせを別命令として追加定義する（実施の形態５）＞
本発明の更に別の実施の形態に係るデータプロセッサ（ＭＰＵ）は、複数の命令パイプライン（ＥＸＰＬ，ＬＳＰＬ，ＢＲＰＬ）と、並列的にフェッチされた複数の命令コードを順次蓄積するグローバル命令キュー（ＧＩＱ）と、前記グローバル命令キューから出力された複数の命令コードに対して命令コードタイプ毎に探索を行い、探索結果に基づいて命令コードを命令パイプライン毎に振り分けるディスパッチ回路（ＥＸ−ＩＳＤ，ＬＳ−ＩＳＤ，ＢＲ−ＩＳＤ）とを有する。前記命令パイプラインは更に、本来組み合わせが禁止されていないが意味のない特定の複数の命令コードの組み合わせに対して、単一の別の命令コードとして処理を行い、前記ディスパッチ回路は、前記特定の複数の命令コードの組み合わせを探索して対応する命令パイプラインに供給する。
【００７０】
項１４と同様に作用する。
【００７１】
２．実施の形態の詳細
実施の形態について更に詳述する。
【００７２】
《実施の形態１》
「スロット不当例外パターン」を構成する「遅延スロット付分岐命令」として図１の４命令を、「遅延スロットに置けない命令」として図１および図２の８命令を含む例を考える。図１の命令（１）はディレイスロット付プログラムカウンタ（以下ＰＣとする）相対無条件分岐命令、命令（２）はディレイスロット付ＰＣ相対サブルーチンコール命令、そして命令（３）（４）はディレイスロット付ＰＣ相対条件分岐命令で、それぞれ条件フラグが成立および不成立の場合に分岐する。また、図２の命令（５）（６）はＰＣ相対ロード命令で、それぞれ１６ビットおよび３２ビットデータをロードする。そして、命令（７）（８）はＰＣ相対条件分岐命令で、それぞれ条件フラグが成立および不成立の場合に分岐する。オペランドフィールドは命令（１）（２）（５）（６）が１２ビット、命令（３）（４）（７）（８）が８ビットである。図１及び図２において「ｄｉｓｐ８」は８ビットのディスプレースメント、「ｄｉｓｐ１２」は１２ビットのディスプレースメント、ＰＣはプログラムカウンタ値、Ｒｎは番号＃ｎの汎用レジスタ、をそれぞれ意味する。
【００７３】
これらの命令の組み合わせによる「スロット不当例外パターン」はオペランドフィールドのビット数に応じて図３のように４パターンがある。そして、組み合わせる命令のオペランドフィールドが新たに定義する命令のコードまたはオペランドフィールドとなる。そこで、１２ビットのフィールドをｃｏｄｅ１２、８ビットのフィールドをｃｏｄｅ８と呼ぶことにする。
【００７４】
パターン（９）はパターン前半および後半に共にｃｏｄｅ１２がある。パターン前半のコードＡ１には命令（１）（２）のコードである１０１０または１０１１が入る。パターン後半のコードＢ１には命令（５）（６）のコードである１０１０または１０１１が入り、コードＣ１には命令（１）（２）のコードである１０１０または１０１１が入る。
【００７５】
パターン（１０）はパターン前半にｃｏｄｅ１２、パターン後半にｃｏｄｅ８がある。コードＡ１はパターン（９）と同一、パターン後半のコードＢ２には命令（７）（８）のコードである１０００１００１または１０００１０１１が入り、コードＣ２には命令（３）（４）のコードである１０００１１０１または１０００１１１１が入る。
【００７６】
パターン（１１）はパターン前半にｃｏｄｅ８、パターン後半にｃｏｄｅ１２がある。パターン前半のコードＡ２には命令（３）（４）のコードである１０００１１０１または１０００１１１１が入り、コードＢ１およびＣ１はパターン（９）と同一である。
【００７７】
パターン（１２）はパターン前半および後半に共にｃｏｄｅ８がある。そして、コードＡ２はパターン（１１）と同一、コードＢ２およびＣ２はパターン（１０）と同一である。
【００７８】
コードＣ１またはＣ２を使用する場合、即ち、前半にコードＡ１を使用する場合に後半にコードＣ１を使用し、又は前半にコードＡ２を使用する場合に広範にコードＣ２を使用する場合、パターンのバリエーションが増える反面、パターンの前半と後半に同じコードを使うため、命令ディスパッチの際に逐次デコードが必要となる。本実施の形態は、コードＣ１またはＣ２を使用しない逐次デコードが不要な場合を想定するから、この場合、パターン前半、後半それぞれが２×２１２＋２×２８＝約８.５ｋパターンなので、「スロット不当例外パターン」として約７２.２５Ｍパターンが得られる。
【００７９】
次に、図３の４パターンを効率的に発行するための、命令発行部について説明する。本実施の形態のスーパースカラプロセッサは、命令コードを、プレフィックスＰＸ、遅延スロット付分岐命令ＢＲＤ、分岐命令ＢＲ、ロードストア命令ＬＳ、遅延スロットに置けないロードストア命令ＬＳＸ、および演算命令ＥＸに分類し、その命令セットを実行するパイプラインとして、分岐パイプラインＢＲＰ、ロードストアパイプラインＬＳＰ、および演算パイプラインＥＸＰの３種類を持つ。命令の種類ＴＹＰＥに対する命令コードの上位４ビットＣＯＤＥの割当は図４とする。尚、図中の命令の種類ＴＹＰＥ−ＤＳは後述する実施の形態４で用いるので、ここでは説明しない。図１および図２で挙げた８命令以外の命令も、命令コードの上位４ビットのコード（ＣＯＤＥ）によって分類している。本発明はどんな命令エンコーディングにも対応可能であるが、具体例を使えば説明が容易である。ＣＯＤＥ１０００は遅延スロット付分岐命令ＢＲＤ、分岐命令ＢＲ、及びプレフィックスＰＸで兼用している。図１のパターン（３）（４）が遅延スロット付分岐命令ＢＲＤ、図２のパターン（７）（８）が分岐命令ＢＲ、それ以外がプレフィックスＰＸである。
【００８０】
次に、図３で代表的に説明した「スロット不当例外パターン」を用いて空き命令コード空間を作ったプロセッサの構成について説明する。ここでは特許文献３のプロセッサ構成をベースにこれに改良を施したものとする。
【００８１】
図５には本実施の形態に係るデータプロセッサＭＰＵが例示される。データプロセッサＭＰＵはプロセッサコアＣＰＵを中心に、これに内部バスＩＢＵＳで接続されたメモリＭＥＭ、外部インタフェース回路ＥＩＦ、および内蔵周辺モジュールＰＥＲ等を一個または複数個備える。データプロセッサＭＰＵは、特に制限されないが、ＣＭＯＳ集積回路製造技術などによって単結晶シリコンのような1個の半導体基板に形成される。
【００８２】
図６にはプロセッサコアＣＰＵのブロック構成が例示される。命令キャッシュＩＣ近傍には、命令フェッチユニットＩＦＵが配置され、その中には、プリデコーダＰＤ、グローバル命令キューＧＩＱ、および分岐制御部ＢＲＣが含まれる。また、データキャッシュＤＣ近傍には、ロードストアユニットＬＳＵが配置され、その中には、ロードストア命令を保持するロードストア命令キューＬＳＩＱ、ロードストア命令デコーダＬＳＩＤ、およびロードストア命令実行部ＬＳＥが含まれる。更に、演算命令実行ユニットＥＸＵには、演算命令を保持する実行命令キューＥＸＩＱ、演算命令デコーダＥＸＩＤ、および演算命令実行部ＥＸＥが含まれる。バスインタフェースユニットＢＩＵはプロセッサコアＣＰＵとコア外のバスＩＢＵＳとのインタフェース回路である。
【００８３】
図７にはプロセッサコアＣＰＵのパイプライン構成が例示される。まず、全命令共通の命令キャッシュアクセスＩＣ１およびＩＣ２、並びに、グローバル命令バッファＧＩＢステージがあり、演算命令用パイプラインＥＸＰＬには、ローカル命令バッファＥＸＩＢ、ローカルレジスタリードＥＸＲＲ、演算ＥＸ、並びにレジスタライトバックＷＢの各ステージがある。また、ロードストア命令用パイプラインＬＳＰＬには、ローカル命令バッファＬＳＩＢ、ローカルレジスタリードＬＳＲＲ、アドレス計算ＬＳＡ、データキャッシュアクセスＤＣ１およびＤＣ２、並びにレジスタライトバックＷＢの各ステージがある。更に、分岐命令用パイプラインＢＲＰＬには分岐ＢＲステージがある。
【００８４】
命令キャッシュアクセスＩＣ１およびＩＣ２ステージでは、命令フェッチユニットＩＦＵが命令キャッシュＩＣから命令コードをフェッチしてプリデコーダＰＤでプリデコードした後、続くグローバル命令バッファＧＩＢステージのグローバル命令キューＧＩＱに格納する。グローバル命令バッファＧＩＢステージでは、ロードストア、演算、並びに、分岐の各カテゴリの命令を埔里でコード結果などを用いて１命令ずつ抽出してディスパッチし、それぞれローカル命令バッファＬＳＩＢおよびＥＸＩＢ、並びに、分岐ＢＲステージで、それぞれロードストアユニットＬＳＵの命令キューＬＳＩＱ、演算命令実行ユニットＥＸＵの命令キューＥＸＩＱ、並びに、命令フェッチユニットＩＦＵの分岐制御部ＢＲＣに格納する。そして、分岐ＢＲステージでは、分岐命令を受取った場合には直ちに分岐処理が開始される。
【００８５】
演算命令用パイプラインＥＸＰＬでは、演算命令実行ユニットＥＸＵがローカル命令バッファＥＸＩＢステージで演算命令を１サイクルに最大１命令ずつ命令キューＥＸＩＱに受け取って、演算命令デコーダＥＸＩＤで最大１命令ずつデコードし、次のローカルレジスタリードＥＸＲＲステージでレジスタリードを行い、演算ＥＸステージで演算命令実行部ＥＸＥを用いて演算を行い、レジスタライトバックＷＢステージでレジスタライトのある命令であれば処理結果をレジスタに格納する。
【００８６】
ロードストア命令用パイプラインＬＳＰＬでは、ロードストアユニットＬＳＵがローカル命令バッファＬＳＩＢステージでロードストア命令を１サイクルに最大１命令ずつ命令キューＬＳＩＱに受け取って、ロードストア命令デコーダＬＳＩＤで最大１命令ずつデコードし、次のローカルレジスタリードＬＳＲＲステージでレジスタリードを行い、アドレス計算ＬＳＡステージでロードストアアドレスを計算し、データキャッシュアクセスＤＣ１およびＤＣ２ステージでロードストア処理を行い、レジスタライトバックＷＢステージでレジスタライトのある命令であれば処理結果をレジスタに格納する。
【００８７】
図８には本実施の形態に係るデータプロセッサＭＰＵのグローバル命令キューＧＩＱの構成が例示される。図８の例では、グローバル命令キューＧＩＱは、１６命令分の命令キューエントリＧＩＱ０〜ＧＩＱ１５、書込み位置を指定するグローバル命令キューポインタＧＩＱＰ、グローバル命令キューポインタＧＩＱＰをデコードするグローバル命令キューポインタデコーダＧＩＱＰ−ＤＥＣ、演算、ロードストア、および分岐の各カテゴリの命令の進捗に合せて進められ、読出し位置を指定する演算命令ポインタＥＸＰ、ロードストア命令ポインタＬＳＰ、分岐命令ポインタＢＲＰ、およびそれぞれのポインタに従って、それぞれ演算命令、ロードストア命令、分岐命令を探索してディスパッチする演算命令探索ディスパッチ回路ＥＸ−ＩＳＤ、ロードストア命令探索ディスパッチ回路ＬＳ−ＩＳＤ、分岐命令探索ディスパッチ回路ＢＲ−ＩＳＤ、命令フェッチ要求生成部ＩＲＥＱ−ＧＥＮから成る。
【００８８】
次に、図１２のフローチャートを用いてグローバル命令キューＧＩＱの作用を説明する。（ａ）命令キャッシュ出力有効信号ＩＣＯＶがアサートされると、（ｂ）グローバル命令キューポインタデコーダＧＩＱＰ−ＤＥＣは、グローバル命令キュー更新信号ＧＩＱＵ０〜３のうち、グローバル命令キューポインタＧＩＱＰの指している命令キューエントリグループの更新信号をアサートする。（ｃ）そして、グローバル命令キューＧＩＱは、グローバル命令キューエントリグループＧＩＱ０〜ＧＩＱ３、ＧＩＱ４〜ＧＩＱ７、ＧＩＱ８〜ＧＩＱ１１、またはＧＩＱ１２〜ＧＩＱ１５のうち、対応するグローバル命令キュー更新信号ＧＩＱＵ０〜ＧＩＱ３がアサートされているグループに、命令フェッチユニットＩＦＵで命令キャッシュＩＣからフェッチしてプリデコーダＰＤでプリデコードした４命令コードＩＣＰＤＯ０〜ＩＣＰＤ３をラッチし、ラッチしたグループを有効にする。特に制限されないが、命令コードＩＣＰＤＯ０〜ＩＣＰＤ３にはプリデコード結果として命令タイプを示す情報が付加される。更に、（ｄ）あらかじめグローバル命令キューポインタＧＩＱＰに１を加算した値を新グローバル命令キューポインタＧＩＱＰ−ＮＥＷとして出力しておき、この値でグローバル命令キューポインタＧＩＱＰを更新する。
【００８９】
分岐命令探索ディスパッチ回路ＢＲ−ＩＳＤは、（ｅ）グローバル命令キューエントリＧＩＱ０〜ＧＩＱ１５のそれぞれから出力されるグローバル命令キュー出力ＧＩＱＯ０〜ＧＩＱ１５から、分岐命令ポインタＢＲＰの指す命令コードを先頭とする４命令コードを探索し、（ｆ）分岐命令コードがあった場合は分岐命令コード有効信号ＢＲ−ＩＶをアサートし、最初の分岐命令コードおよびその直前の命令コードを分岐命令ＢＲ−ＩＮＳＴとして出力する。直前の命令コードを選択すると、それがプレフィックスであった時にプレフィックスが修飾する命令コードと共に出力することができる。また、（ｇ）出力した命令コードの次の命令コードを分岐命令ポインタＢＲＰが指すように新分岐命令ポインタＢＲＰ−ＮＥＷを出力する。（ｈ）先頭以外で分岐命令コードが発見された場合は分岐プレフィックス候補有効信号ＢＲ−ＰＶをアサートし、（ｏ）これによって分岐制御部ＢＲＣは分岐命令コードと共に分岐プレフィックス候補としての直前命令コードの双方を有効な入力として判定する。（ｉ）先頭で分岐命令コードが発見された場合は分岐プレフィックス候補有効信号ＢＲ−ＰＶをネゲートし、（ｐ）これによって分岐制御部ＢＲＣは分岐命令コードのみ有効な入力として判定する。
【００９０】
（ｊ）探索範囲に有効な分岐命令コードがなかった場合は分岐命令コード有効信号ＢＲ−ＩＶをネゲートし、次回の分岐命令探索時に先頭で分岐命令コードが発見された際の分岐プレフィックス候補である、今回の探索範囲の最後の有効な命令コードが、分岐命令コードの直前の命令コードとして選択されるように、最後の有効な命令コードの次のコードを分岐命令コードとみなしてその直前の命令コードと共に分岐命令ＢＲ−ＩＮＳＴとして出力する。分岐命令コードとみなしたコードは出力しても分岐制御部ＢＲＣでは実質的に無意味となるが、有効な分岐命令コードがあった場合の出力制御の制御内容と整合させて制御ロジックを簡素化し易くするためである。また、（ｋ）最後の有効な命令コードの次のコードを分岐命令ポインタＢＲＰが指すように新分岐命令ポインタＢＲＰ−ＮＥＷを出力する。（ｌ）探索対象に有効な命令がある場合は分岐プレフィックス候補有効信号ＢＲ−ＰＶをアサートし、（ｎ）これによって分岐制御部ＢＲＣは分岐プレフィックス候補としての直前命令のみ有効な入力として判定する。（ｍ）探索対象に有効な命令がない場合は、分岐プレフィックス候補有効信号ＢＲ−ＰＶをネゲートし、これによって、分岐制御部ＢＲＣは命令コード及び分岐プレフィックス候補直前命令の双方を無効と判定する。尚、探索対象の４命令に無効な命令が含まれるのは、グローバル命令キューエントリグループＧＩＱ０〜３、ＧＩＱ４〜７、ＧＩＱ８〜１１、またはＧＩＱ１２〜１５のうち、無効な命令コードのグループを含む範囲が探索対象となった場合である。探索動作の詳細は後で図９を用いて説明する。
【００９１】
以上の制御の結果、分岐命令コード有効信号ＢＲ−ＩＶおよび分岐プレフィックス候補有効信号ＢＲ−ＰＶが、（ｏ）共にアサートされれば分岐プレフィックス候補は分岐命令コードと同時に出力され、（ｎ）それぞれネゲートおよびアサートであれば分岐プレフィックス候補のみが先行的に出力され、（ｐ）それぞれアサートおよびネゲートであれば分岐命令コードだけが出力されて先行的に出力された分岐プレフィックス候補と共に使用され、（ｑ）共にネゲートされれば有効なコードは何も出力されない。尚、分岐プレフィックス候補としてデコードされたコードが分岐プレフィックスではない場合は、分岐命令コードのみを使用して命令が実行される。
【００９２】
同様に、ロードストア命令探索ディスパッチ回路ＬＳ−ＩＳＤも、グローバル命令キュー出力ＧＩＱＯ０〜１５から、ロードストア命令ポインタＬＳＰに従って、ロードストア命令コード有効信号ＬＳ−ＩＶ、ロードストア命令ＬＳ−ＩＮＳＴ、ロードストアプレフィックス候補有効信号ＬＳ−ＰＶ、及び新ロードストア命令ポインタＬＳＰ−ＮＥＷを出力する。また、演算命令探索ディスパッチ回路ＥＸ−ＩＳＤも、グローバル命令キュー出力ＧＩＱＯ０〜１５から、演算命令ポインタＥＸＰに従って、演算命令コード有効信号ＥＸ−ＩＶ、演算命令ＥＸ−ＩＮＳＴ、演算プレフィックス候補有効信号ＥＸ−ＰＶ、及び新演算命令ポインタＥＸＰ−ＮＥＷを出力する。
【００９３】
命令フェッチ要求生成部ＩＲＥＱ−ＧＥＮは、各ポインタＧＩＱＰ、ＥＸＰ、ＬＳＰ、およびＢＲＰの値から、グローバル命令キューエントリグループＧＩＱ０〜３、ＧＩＱ４〜７、ＧＩＱ８〜１１、またはＧＩＱ１２〜１５のいずれかに１エントリグループ以上の空きがあるかどうかを判断し、空きがあれば命令フェッチ要求信号ＩＲＥＱをアサートする。空きがない状態は、グローバル命令キューポインタＧＩＱＰの指している、次にフェッチした命令コードＩＣＯ０〜３をラッチするグローバル命令キューエントリグループを、各ポインタＥＸＰ、ＬＳＰ、およびＢＲＰの何れも指していない状態である。尚、各ポインタの代わりに各新ポインタＧＩＱＰ−ＮＥＷ、ＥＸＰ−ＮＥＷ、ＬＳＰ−ＮＥＷ、およびＢＲＰ−ＮＥＷ、グローバル命令キューポインタＧＩＱＰの更新信号でもある命令キャッシュ出力有効信号ＩＣＯＶ、および各ポインタの更新制御信号ＥＸ−ＯＫ、ＬＳ−ＯＫ、およびＢＲ−ＯＫとから命令フェッチ要求信号ＩＲＥＱを生成すれば、１サイクル早く命令フェッチ要求信号ＩＲＥＱを生成することが可能である。尚、命令フェッチ要求信号ＩＲＥＱを受ける命令キャッシュＩＣとの信号タイミング次第で、ポインタから作る方式、新ポインタから作る方式、作った後にラッチしてから命令キャッシュＩＣに送る方式等、種々のタイミングの方式が考えられる。
【００９４】
図９には図８のグローバル命令キューＧＩＱの分岐命令探索ディスパッチ回路ＢＲ−ＩＳＤの構成が例示される。ポインタデコーダＰ−ＤＥＣ、命令コードマルチプレクサＭ０〜Ｍ３、プライオリティエンコーダＰＥ、出力命令コードマルチプレクサＭＯＵＴ、ポインタ更新回路Ｐ−ＡＤＶから成る。ポインタデコーダＰ−ＤＥＣは、分岐命令ポインタＢＲＰをデコードし、分岐命令ポインタＢＲＰの指す命令コードを先頭とする４命令コードが選択されるように、命令コードマルチプレクサＭ０〜Ｍ３の制御信号Ｍ０−ＣＮＴＬ〜Ｍ３−ＣＮＴＬを生成する。命令コードマルチプレクサＭ０〜Ｍ３はそれぞれ制御信号Ｍ０−ＣＮＴＬ〜Ｍ３−ＣＮＴＬに従い、それぞれＧＩＱＯ０、４、８、および１２、ＧＩＱＯ１、５、９、および１３、ＧＩＱＯ２、６、１０、および１４、ＧＩＱＯ３、７、１１、および１５から１命令コードを選択し、それぞれ探索対象命令コードＣ０〜Ｃ３として出力する。この結果、探索対象命令コードＣ０〜Ｃ３には固定の順序が与えられず、先頭命令コードからサイクリックに命令順序が付く。プライオリティエンコーダＰＥは、プライオリティエンコーディングによって探索対象命令コードＣ０〜Ｃ３を分岐命令ポインタＢＲＰの指す先頭命令コードから探索を開始し、最初の分岐命令コードを探索する。そして、分岐命令を発見した場合はその命令コードを、発見しなかった場合に無効な命令コードがあればその最初の命令コードを、発見しなかった場合に無効な命令コードがなければ先頭の命令コードを選択すると共に、選択した命令コードの直前の命令コードを選択するように、出力命令コードマルチプレクサ制御信号ＭＯＵＴ−ＣＮＴＬを出力する。尚、分岐命令コードとして先頭の命令コードを選択場合にはその直前の命令コードは今回の探索対象ではないため選択できず、探索対象命令コードＣ０〜Ｃ３の順序はサイクリックであるため、直前の命令コードとして探索対象の最後のコードが選択される。その後、１、２、３、４番目の命令コードで発見した場合には命令ポインタＢＲＰにそれぞれ１、２、３、４を加算し、発見されなかった場合には探索した有効命令コード数を加算した値を新分岐命令ポインタＢＲＰ−ＮＥＷとして出力する。
【００９５】
探索対象命令コードＣ０〜Ｃ３の順序はサイクリックであるため、分岐命令コードを発見しなかった場合、次回の分岐命令探索時に先頭で分岐命令コードが発見された際の、直前の命令コードとして、最後の有効な命令コードが選択され、これが分岐命令のプレフィックスであっても適切に選択されて出力される。即ち、新たに分岐命令の探索を行ったとき、探索対象の先頭命令コードが分岐命令であった場合は、分岐プレフィックス候補有効信号ＢＲ−ＰＶをネゲートし、分岐命令コードＢＲ−ＩＮＳＴの一部として同時に出力される分岐プレフィックス候補は使用せずに、分分岐制御部ＢＲＣが既に保持している分岐プレフィックス候補を使用するように指示する。更に、分岐命令コードを発見した場合と発見しなかった場合の何れにおいても分岐命令コードＢＲ−ＩＮＳＴとして出力されるコードは命令コードとその直前の命令コードのペアとされ、何れの場合においても、分岐命令コードＢＲ−ＩＮＳＴの出力制御論理に部分的な共通性を持たせることが容易になり、その論理規模の簡素化に資することができる。
【００９６】
ロードストア命令探索ディスパッチ回路ＬＳ−ＩＳＤおよび演算命令探索ディスパッチ回路ＥＸ−ＩＳＤも上記分岐命令探索ディスパッチ回路ＢＲ−ＩＳＤと同様な構造である。
【００９７】
以上の制御により、命令タイプ毎に、プレフィクス付の命令もプレフィックスなしの命令も毎サイクル発行することが可能となり、プレフィックス付の命令を含む命令セットにおける効率的なスーパースカラ命令発行が可能となる。また、発見した命令コードに付加する直前の命令コードを１個から複数に変えれば、複数個のプレフィックスコードを許す命令セットアーキテクチャに対しても、上記制御方式を適用することが可能となり、効率的なスーパースカラ命令に発行に資することができる。
【００９８】
ここまでの構成は本発明者による特許文献３のプロセッサ構成に準拠するものであるここまでの構成を基本として、遅延スロット付分岐命令と遅延スロット命令のペアを処理しようとする場合について説明する。この場合、パターン前半の遅延スロット付分岐命令は図８の分岐命令探索ディスパッチ回路ＢＲ−ＩＳＤによって選択されて、分岐命令ＢＲ−ＩＮＳＴとして出力される。しかし、遅延スロット付分岐命令とペアをなすパターンの後半が付いて来ないため、例え分岐命令であっても実行しないようにデコーダが構成される。すなわち、その場合の分岐命令探索ディスパッチ回路ＢＲ−ＩＳＤによるディスパッチは無駄なディスパッチとなるが、スロット不当例外は発生させず、それを単にキャンセルするだけとする。要するに、そのような機能が命令デコーダに付加される。
【００９９】
一方、パターン後半の遅延スロット命令は命令タイプに応じて演算命令探索ディスパッチ回路ＥＸ−ＩＳＤ、ロードストア命令探索ディスパッチ回路ＬＳ−ＩＳＤまたは分岐命令探索ディスパッチ回路ＢＲ−ＩＳＤによって選択されて、遅延スロット付分岐命令がプレフィックスとして付加され、演算命令ＥＸ−ＩＮＳＴ、ロードストア命令ＬＳ−ＩＮＳＴまたは分岐命令ＢＲ−ＩＮＳＴとして出力される。即ち、遅延スロット付分岐命令と遅延スロット命令のペアが出力される。そして、このペアが「スロット不当例外パターン」であった場合は例外処理に移行する。
【０１００】
本実施の形態では「スロット不当例外パターン」のうち、図３で定義したパターン（９）（１０）（１１）（１２）を３２ビット命令として実行し、スロット不当例外は発生させない。図３で定義したパターンの後半１６ビットは図１および図２の（１）〜（８）のいずれかであり、前述の図８の命令ディスパッチ方式により、（５）（６）であればロードストア命令ＬＳ−ＩＮＳＴとして、それ以外は分岐命令ＢＲ−ＩＮＳＴとして扱われる。したがって、命令定義には、上記パターン後半と同じ実行パイプラインで実行される命令の定義が含まれることになる。
【０１０１】
図６の分岐制御部ＢＲＣは、分岐命令分岐命令コードおよびその直前の命令コードから成る分岐命令ＢＲ−ＩＮＳＴをデコードして、命令フェッチユニットＩＦＵを制御して、命令フローを管理する。図１２のフローチャートを用いて説明したように、分岐命令コード有効信号ＢＲ−ＩＶおよび分岐プレフィックス候補有効信号ＢＲ−ＰＶの値に応じて、分岐命令ＢＲ−ＩＮＳＴには４通りの状態（ｏ），（ｐ），（ｎ），（ｑ）がある。それぞれの場合について、分岐制御部ＢＲＣのデコード動作を図１４Ａ及び図１４Ｂに基づいて説明する。
【０１０２】
図１４Ａは分岐命令バッファが１段の例で、分岐プレフィックスラッチＢＲ−ＰＸおよび分岐命令ラッチＢＲ−Ｉから成る。一方、図１４Ｂは分岐命令バッファが複数段の例で、１段以上の分岐命令バッファＢＲ−ＢＵＦを持ち、分岐プレフィックスマルチプレクサＢＲ−ＭＰＸおよび分岐命令マルチプレクサＢＲ−ＭＰＩを制御して、適宜、分岐プレフィックスラッチＢＲ−ＰＸおよび分岐命令ラッチＢＲ−Ｉにラッチする命令コードを選択する。本発明に限らずバッファを複数段持つと命令発行がストールした場合などに命令供給側を止めに行く際にタイミングに余裕が持てる。また、アウトオブオーダ発行の際の他のパイプラインとの命令フロー実行のサイクルずれを吸収するのにも役立つ。以下の説明は、図１４Ａに基づいて行うが、図１４Ｂの分岐命令バッファが複数段の場合への拡張は、本技術分野の通常のスキルを有する技術者であれば容易に可能であるから、ここでは図１４Ｂに基づく説明は省略する。また、図示していないが、バッファ容量の制約で供給された分岐命令ＢＲ−ＩＮＳＴをラッチ出来ない場合、バッファが満杯であることを示す信号を命令供給側に送り、命令供給を止めることが行われる。
【０１０３】
まず、図１２の（ｏ）の分岐プレフィックス候補が分岐命令コードと同時に有効されている場合、分岐命令入力制御回路ＢＲＩ−ＣＴＬは、分岐命令コード有効信号ＢＲ−ＩＶおよび分岐プレフィックス候補有効信号ＢＲ−ＰＶから、この状態であると判断し、分岐プレフィックスラッチＢＲ−ＰＸおよび分岐命令ラッチＢＲ−Ｉを制御して、分岐命令ＢＲ−ＩＮＳＴを分岐プレフィックス候補および分岐命令として分岐命令デコーダＢＲ−ＤＥＣに供給する。分岐命令デコーダＢＲ−ＤＥＣは分岐プレフィックス候補が実際にプレフィックスであった場合はプレフィックス付分岐命令として、プレフィックスではなかった場合は通常の分岐命令としてデコードし、制御信号ＢＲ−ＤＥＣＯを生成して分岐処理を進める。
【０１０４】
次に、図１２の（ｎ）の分岐プレフィックス候補のみが先行的に有効にされている場合は、（ｏ）の場合と同様に、この状態であると判断し、分岐プレフィックスラッチＢＲ−ＰＸを制御して、分岐命令ＢＲ−ＩＮＳＴの前半部分を分岐プレフィックス候補として分岐命令デコーダＢＲ−ＤＥＣに供給する。そして、分岐命令コードが到着するのを待つ。
【０１０５】
また、図１２の（ｐ）の分岐命令コードだけが有効にさた場合は、（ｏ）の場合と同様に、この状態であると判断し、分岐命令ラッチＢＲ−Ｉを制御して、分岐命令ＢＲ−ＩＮＳＴの後半部分を分岐命令として分岐命令デコーダＢＲ−ＤＥＣに供給する。そして、先行的に供給された分岐プレフィックス候補が有効ならば、共に使用して前記（ｏ）と同様に処理する。一方、分岐直後等で先行的に分岐プレフィックス候補が供給されていなければ、通常の分岐命令として処理する。
【０１０６】
そして、図１２の（ｑ）の有効なコードが何もない場合は、有効なコードが来るのを待つ。
【０１０７】
実施の形態１によれば以下の作用効果を得る。１６ビット固定長命令セットには遅延スロット付分岐命令を含んでいるものがある。遅延スロットは、分岐命令の後続命令を入れるスロットであり、このスロットにある命令（遅延スロット命令）は、分岐先の命令の前に実行される。通常このスロットは１命令分である。また、分岐命令と遅延スロット命令の間で例外や割込が起きると、遅延スロット命令から処理を再開することになり、分岐命令が正しく処理されないため、両者を不可分に実行する方式が一般的である。更に、分岐命令がＰＣを変更するため、遅延スロット命令はＰＣを参照したり変更したりする命令を禁止することが一般的である。この結果、分岐命令と遅延スロット命令のペアは３２ビット長命令のように扱われ、禁止された組み合わせパターンは、スロット不当例外として扱われ活用されていなかった。実施の形態では、この禁止パターン、即ち「遅延スロット付分岐命令と遅延スロットに置けない命令のペアによる３２ピットパターン」を活用して、３２ビット命令セットを定義することにより、命令コード空間を拡張することができる。以下、このパターンを「スロット不当例外パターン」と呼ぶ。例えば、代表的な遅延スロット付分岐命令４命令のコード空間は２１３＋２９＝８.５ｋパターンである。一方、遅延スロットに置けない代表的な８命令のコード空間は２１４＋２１０＝１７ｋパターンである。従って、例外として扱われる代表的な組み合わせパターンは、これらの積となり約１４４.５Ｍパターンである。
【０１０８】
前記「スロット不当例外パターン」では、遅延スロット付分岐命令が遅延スロットに置けない命令でもあるため、遅延スロット付分岐命令はパターンの前半にも後半にもなり得る。そして、遅延スロット付分岐命令が連続すると奇数番目が前半、偶数番目が後半なので、その区別には逐次デコードが必要であり、高速化が困難である。この問題を回避するには、別の実施の形態で説明するように、遅延スロットに置けない代表的な８命令のうち、遅延スロット付分岐命令以外の命令を活用すればよい。代表的な遅延スロット付分岐命令４命令も残りの４命令も、そのコード空間は２１３＋２９＝８.５ｋパターンである。したがって、効率的なスーパースカラ命令発行可能なパターンは、「スロット不当例外パターン」の半分の約７２.２５Ｍパターンである。
【０１０９】
命令コードを、プレフィックス、遅延スロット付分岐命令、分岐命令、ロードストア命令、および演算命令に分類し、実行パイプラインとして、分岐、ロードストア、および演算パイプラインの３種類を持つスーパースカラプロセッサを考える。このプロセッサを、例えば、更に浮動小数点演算命令を別分類として持ち、実行パイプラインとして更に浮動小数点演算用を持つプロセッサなどに拡張することは、通常のスキルを持つ技術者であれば可能である。
【０１１０】
まず、遅延スロット付分岐命令がない場合は、分岐命令、ロードストア命令、および演算命令の各命令を毎サイクルサーチして、各命令がサーチスコープ内にあれば、その命令を発行すると共に、その命令の直前のコードをプレフィックスとみなして、その命令に付加して各実行パイプラインにディスパッチし、各実行パイプラインのデコーダが命令に付加されたコードがプレフィックスかどうかをチェックして、プレフィックスならばそれも使用して命令デコードすることにより、プレフィックス付き命令もスーパースカラ発行することができる。遅延スロット付分岐命令がある場合でも、ディスパッチ以降は特別な処理は不要で、遅延スロット付分岐命令を分岐パイプライン、遅延スロット命令をその命令用の実行パイプラインにディスパッチすれば良い。そして、命令フェッチおよびディスパッチのフローの切り替えを通常の分岐命令より１命令遅らせる。スロット不当例外等が発生する場合には高速処理は不要であるため、適宜例外処理に移行すれば良い。
【０１１１】
実施の形態１で説明したように、「スロット不当例外パターン」を活用することにより、約１４４.５Ｍパターンの新規３２ビット命令を定義することが可能となり、命令拡張による性能や効率の向上が可能となる。また、「スロット不当例外パターン」を活用しない方式に比べて命令フェッチ及び命令デコード制御形態が最も変化の少ない方式である。
【０１１２】
《実施の形態２》
実施の形態１で説明した「スロット不当例外パターン」を活用する命令制御形態はディスパッチ機構を変えずに済むが、考慮すべき点がある。すなわち、命令コードが「スロット不当例外パターン」の場合、パターン前半の遅延スロット付分岐命令は分岐命令として分岐パイプラインにディスパッチされるが、パターン後半が付いて来ないため、例え分岐命令であっても実行できず、無駄なディスパッチが発生することである。すなわち、パターン後半が命令と見なされてディスパッチされ、パターン前半がそのプレフィックス候補として付加されるため、パターン後半と「スロット不当例外パターン」が同じ実行パイプラインで実行される命令のコードでなければならないという制約が必要なことである。
【０１１３】
実施の形態２ではそれを回避するために、「スロット不当例外パターン」による命令定義を分岐命令専用とし、その後半パターンとして分岐命令を使用する。即ち、図３で定義したパターンの後半１６ビットとして、図１および図２の（１）〜（４）と（７）（８）の６パターンのみを使用する。そして、プレフィックスは分岐命令には使用しないものとする。
【０１１４】
本実施の形態２では、図８のグローバル命令キューＧＩＱの分岐命令探索ディスパッチ回路ＢＲ−ＩＳＤで、選択した命令コードと共に、「スロット不当例外パターン」によって定義された分岐命令である場合に備えて、選択した命令コードの直後の命令コードも出力する。実施の形態１ではプレフィックスがある場合に備えて選択した命令コードの直前の命令コードを同時に出力したが、本実施の形態２ではプレフィックスは分岐命令には使用しないので、直前の命令コードは不要である。要するに、実施の形態１では禁止パターンの前半をプレフィックスして把握することにより、選択した命令コードの直前の命令コードも一緒に出力するようにしたが、実施の形態２では禁止パターンの後半をポストフィックスとして把握することにより、選択した命令コードの直後の命令コードも一緒に出力するようにする。したがって、本実施の形態２では、図８のＢＲ−ＰＶはポストフィックス候補有効信号とする。そして、図９の探索対象命令コードＣ０〜Ｃ３の最後の有効な命令コードで発見した場合はポストフィックス候補有効信号ＢＲ−ＰＶをネゲートする。そして、ポストフィックス候補有効信号ＢＲ−ＰＶがアサートされた場合は実施の形態１と同様に出力した命令コードの次の命令コードを分岐命令ポインタＢＲＰが指すように新分岐命令ポインタＢＲＰ−ＮＥＷを出力し、ネゲートされた場合は実施の形態１より１少なく進める。また、プレフィックスがないため、実施の形態１で考慮した探索対象の有効な命令コードの最後のコードがプレフィックスである場合の考慮は不要になる。
【０１１５】
実施の形態１からの以上の変更により、図１２のフローチャートは図１３のようになる。以下、図１３に基づいて図１２との違いを説明する。図１３において図１２との主な変更箇所には下線を付している。
【０１１６】
まず、（ａ）〜（ｅ）は同一である。（ｆ）では直前の命令コードではなく直後の命令コードを出力するように変更する。（ｆ）の後、無条件に（ｇ）に進んでいたものを「最後の有効な命令以外で発見」したら（ｇ）に進むように変更し、（ｇ）に進まなかった場合は（ｋ）に進むように変更する。（ｇ）から「先頭で発見」の場合に進んでいた（ｉ）は削除して、無条件で（ｈ）に進むように変更し、（ｈ）の分岐プレフィックスをポストフィックスに変更する。次に、探索対象の有効な命令コードの最後のコードがプレフィックスである場合の考慮が不要となったので、（ｊ）では任意の命令コードおよびその直後の命令コードを出力するように変更し、（ｋ）から「有効命令コードあり」の場合に進んでいた（ｌ）（ｏ）は削除して、無条件で（ｍ）に進むように変更し、（ｍ）の分岐プレフィックスをポストフィックスに変更する。
【０１１７】
分岐命令ＢＲ−ＩＮＳＴの前半部分が「遅延スロット付分岐命令」である図１の４命令（１）〜（４）であって、ポストフィックス候補有効信号ＢＲ−ＰＶがネゲートされていた場合、後半部分がないため、通常の「遅延スロット付分岐命令」か「スロット不当例外パターン」かの区別ができず、図６の命令フェッチユニットＩＦＵの分岐制御部ＢＲＣは受け取った命令を処理できない。しかし、「スロット不当例外パターン」の後半部分として分岐命令のみを使用しているので、次に分岐命令の探索に成功した際に、当該「スロット不当例外パターン」の後半部分が、当該次に探索が成功された分岐命令ＢＲ−ＩＮＳＴの前半部分として出力される。これを、その「スロット不当例外パターン」の後半部分として用いることによって処理が可能となる。
【０１１８】
また、分岐命令ＢＲ−ＩＮＳＴの後半部分が、前半部分と同時に使用されず、かつ、分岐命令であった場合は、先行する分岐命令の処理に続いて処理するように、次の前半部分として使用する。このとき、更に次の分岐命令ＢＲ−ＩＮＳＴの前半部分が到着していれば、「遅延スロット付分岐命令」であっても、前述のポストフィックス候補有効信号ＢＲ−ＰＶがネゲートされていた場合と同様に処理することが出来る。到着していない場合は、到着を待って処理を開始する。
【０１１９】
また、「遅延スロット付分岐命令」でなければ、到着の有無に関係なく処理を開始する。このとき、次の分岐命令ＢＲ−ＩＮＳＴの前半部分が到着していると、分岐命令ＢＲ−ＩＮＳＴの供給に対して、分岐制御部ＢＲＣの処理が遅れることになるため、分岐命令ＢＲ−ＩＮＳＴをバッファリングすると共にグローバル命令キューＧＩＱに供給のストールを要求する。処理の下流側から、処理が間に合わない際にストール要求を出すことは、プロセッサにおいては一般的な方式である。
【０１２０】
実施の形態２によれば以下の作用効果を得る。
【０１２１】
「スロット不当例外パターン」を分岐命令専用とし、その後半パターンとして分岐命令を使用し、プレフィックスは分岐命令には使用しないものとし、この場合、分岐命令をディスパッチする際はその命令の直前のコードではなく直後のコードを付加し、分岐パイプラインのデコーダが、命令が「スロット不当例外パターン」であれば付加したコードも使用することにより、「スロット不当例外パターン」の適切なデコードが可能となる。したがって、無駄なディスパッチの発生を回避することができる。そして、実施の形態１よりも少なくなるが、約７６.５Ｍパターンの新規３２ビット分岐命令を定義することが可能となり、命令拡張による性能や効率の向上に資することができる。
【０１２２】
《実施の形態３》
実施の形態２では「スロット不当例外パターン」による命令定義は分岐命令専用という制限があった。本実施の形態では「スロット不当例外パターン」を分岐命令以外にも活用するために、命令コードタイプ判定機構を変更し、命令コードタイプ判定時に１６ビット単位の命令コードタイプ判定結果と隣接コード間での情報交換によって「スロット不当例外パターン」を検出できるようにする。即ち、「スロット不当例外パターン」の前半部分と後半部分に同じコードを使用しないようにする。具体的には、前半部分には遅延スロット付分岐命令、後半部分には遅延スロット付分岐命令以外の遅延スロットに置けない命令を使用する。そして、パターン前半をプレフィックスと同様に扱い、パターン後半を分岐命令、ロードストア命令、および演算命令のいずれかの命令と同様に扱う。図４の分類において、「スロット不当例外パターン」の後半部分としての命令タイプＴＹＰＥ−ＤＳで分類する。この結果、「スロット不当例外パターン」に命令を自由に割り当て、プレフィックス付命令と同様に扱うことが可能となる。このときのディスパッチ回路ＥＸ−ＩＳＤ，ＬＳ−ＩＳＤ，ＢＲ−ＩＳＤによる命令コードの分配機能は図１２と同様でよい。
【０１２３】
具体的な実装は、実施の形態１で図５乃至図９を用いて説明したプロセッサ構成において、図６の命令フェッチユニットＩＦＵのプリデコーダＰＤにおける命令コードタイプ判定を変更することにより可能となる。尚、命令コードタイプ判定はプリデコーダＰＤ以外に、図９の分岐命令探索ディスパッチ回路ＢＲ−ＩＳＤの探索対象命令コードＣ０〜Ｃ３に対して行うなど、命令フェッチから命令探索までのどこかで行えばよい。但し、探索対象命令コードＣ０〜Ｃ３に対して行う場合は、順序関係が一定でないため回路は複雑になる。
【０１２４】
図１０は本実施の形態における図６のプリデコーダＰＤの一例である。まず、命令フェッチユニットＩＦＵで命令キャッシュＩＣからフェッチした４命令の命令コードＩＣＯ０〜ＩＣＯ３を各命令コードのプリデコーダＰＤ０〜ＰＤ３によってプリデコードし、図４の通常の６種類の命令タイプＴＹＰＥのうち、遅延スロット付分岐命令ＢＲＤであるかどうかと、遅延スロット付分岐命令ＢＲＤ以外の遅延スロットに置けない命令、即ち、分岐命令ＢＲ、遅延スロットに置けないロードストア命令ＬＳＸ、またはプレフィックスＰＸであるかどうかを判定し、それぞれの判定結果に従って遅延スロット付分岐信号ＢＲＤ−ＰＤ０〜ＢＲＤ−ＰＤ３及び遅延スロット不可信号ＤＳＮＧ−ＰＤ０〜ＤＳＮＧ−ＰＤ３を出力する。尚、遅延スロットに３２ビット命令があると命令発行機構が複雑になるためプレフィックスＰＸも遅延スロットに置けない命令コードに分類し、後半部分として使用する。また、命令タイプＴＹＰＥ判定結果ＴＹＰ−ＰＤ０〜ＴＹＰ−ＰＤ３を出力する。
【０１２５】
そして、命令タイプ調整回路ＴＹＰ０〜ＴＹＰ３は、隣接する先行命令からの遅延スロット付分岐信号ＢＲＤ−ＰＤ０〜ＢＲＤ−ＰＤ３がアサートされた場合は、命令タイプとして「スロット不当例外パターン」の場合の命令タイプＴＹＰＥ−ＤＳを、ネゲートされた場合はＴＹＰ−ＰＤ０〜ＴＹＰ−ＰＤ３をそのまま出力する。尚、命令タイプ調整回路ＴＹＰ０は隣接する先行命令が、前回のプリデコード結果の遅延スロット付分岐信号ＢＲＤ−ＰＤ３であるか、分岐先の先頭命令コードであるために存在しないかのいずれかであるため、前者であればラッチＢＲＤＬにラッチしておき、後者であればラッチＢＲＤＬの値をクリアしておき、いずれの場合もラッチＢＲＤＬ出力を使用する。また、命令タイプ調整回路ＴＹＰ０〜ＴＹＰ２は、命令タイプが遅延スロット付分岐命令ＢＲＤである場合に、それぞれ隣接する後行命令からの遅延スロット不可信号ＤＳＮＧ−ＰＤ１〜ＤＳＮＧ−ＰＤ３がアサートされた場合は、命令タイプをプレフィックスＰＸに変更する。そして、命令タイプ調整回路ＴＹＰ０〜ＴＹＰ３出力を命令コードＩＣＯ０〜ＩＣＯ３に付加して、プリデコーダ出力ＩＣＰＤＯ０〜ＩＣＰＤＯ３とする。
【０１２６】
命令タイプ調整回路ＴＹＰ３は、隣接する後行命令からの信号がないため、命令タイプが遅延スロット付分岐命令ＢＲＤであると命令タイプを確定できない。このため、遅延スロット付分岐命令ＢＲＤであると見なして命令タイプとし、命令コードＩＣＯ３に付加して、プリデコーダ出力ＩＣＰＤＯ３とする。後で「スロット不当例外パターン」と判明した場合は、後述するプレフィックス化信号ＰＸ−ＰＤ３によって、命令タイプをプレフィックスＰＸに変更する。尚、プリデコーダ出力ＩＣＰＤＯ３は、図８のグローバル命令キューＧＩＱにラッチされているので、プレフィックス化信号ＰＸ−ＰＤ３によって、ラッチした値を更新できるようにしておく。
【０１２７】
プレフィックス化信号ＰＸ−ＰＤ３は、命令タイプ調整回路ＴＹＰＸで生成され、ラッチＢＲＤＬにラッチしておいた遅延スロット付分岐信号ＢＲＤ−ＰＤ３とプリデコーダＰＤ０からの遅延スロット不可信号ＤＳＮＧ−ＰＤ０が共にアサートされたときにアサートする。
【０１２８】
実施の形態３によれば以下の作用効果をえる。
【０１２９】
「スロット不当例外パターン」を分岐命令専用とせずに活用するには、命令コード判定機構の変更が必要である。１６ビット単位の命令コード判定では、「スロット不当例外パターン」を検出できないため、１６ビット単位の命令コード判定結果を隣接コード間で情報交換し、「スロット不当例外パターン」を検出できるようにする。そして、パターン前半をプレフィックスと同様に扱い、パターン後半を分岐命令、ロードストア命令、および演算命令のいずれかの命令と同様に扱う。この結果、「スロット不当例外パターン」に命令を自由に割り当てることが可能となる。要するに、プリデコーダＰＤの出力を隣接コード間の情報交換によって変更することにより、「スロット不当例外パターン」をプレフィックス付命令と同様に扱うことが可能となる。そして、実施の形態２よりも多い、約８０.７５Ｍパターンの新規３２ビット命令を定義することが可能となり、命令拡張による性能や効率の向上に資することができる。
【０１３０】
《実施の形態４》
実施例３では実装の容易さを優先して１６ビット単位の命令コードタイプ判定結果と隣接コード間での情報交換によって「スロット不当例外パターン」を検出できるように命令のエンコーディングを制限した。しかし、既に１６／３２ビット長混在命令セットを実装しているプロセッサでは、上記制限をしてもメリットがない。したがって、制限を設けずに「スロット不当例外パターン」約１４４.５Ｍパターンを全て新規３２ビット命令定義に使用すべきである。
【０１３１】
１６／３２ビット長混在命令セットでは、３２ビット長命令の後半部分が１６又は３２ビット長命令の前半部分と同一コードである場合があり、あるコードが３２ビット長命令の後半部分かどうかは、そのコードに先行する全ての命令の命令タイプを逐次解析して、初めて判定することが出来る。このため、命令フェッチ後のプリデコード時に判定する場合は、一度にフェッチする命令コード数分の逐次解析を命令フェッチサイクル以内に行う必要がある。毎サイクルフェッチする場合は１サイクル以内が最低条件であり、プリデコードに１サイクルかけない場合はその時間以内に逐次解析を終える必要がある。したがって、命令フェッチ幅が広い場合は逐次解析がネックとなる可能性が高くなる反面、命令フェッチ幅が狭ければ、重大な問題は発生しない。また、プリデコードは命令探索や命令発行前に行う方式もあり、それぞれ命令探索や命令発行の幅が狭ければ問題は少ない。
【０１３２】
通常の３２ビット長命令と「スロット不当例外パターン」の違いは、前者が前半部分で１６又は３２ビット長のいずれであるかが判明するのに対し、後者は後半部分も見ないとどちらであるかが判明しない点である。そして、「スロット不当例外パターン」を活用しない場合は、遅延スロット命令がフェッチされていなくても遅延スロット付分岐命令が処理可能であるのに対し、活用する場合は、フェッチされてから処理するか、「スロット不当例外パターン」ではないと仮定して実行開始し、違っていたらキャンセルするかのいずれかの処理が必要である。しかし、遅延スロット命令がフェッチされていなくて、かつ、遅延スロット付分岐命令が処理可能であるという状況は確率的に低いため、フェッチされてから処理しても性能への影響は軽微である。また、遅延スロット付分岐命令処理も遅延スロット命令フェッチもどちらも命令フェッチであるため、同時進行を許すと、競合が発生したり、フェッチ順序が逆転したり、命令キューで分岐前と分岐後のフローの同時管理が必要になったりと、論理が複雑になる割に性能に貢献しないということになる。したがって、遅延スロット命令の到着を待って処理する方式は、分岐性能にほとんど影響を与えることなく「スロット不当例外パターン」の命令発行を可能にする。
【０１３３】
図１５Ａ及び図１５Ｂに、本実施の形態の命令発行部の構成例を示す。通常の１６／３２ビット混在命令セットの命令発行部と特に違う部分はなく、新規に定義した「スロット不当例外パターン」を活用する命令を新たな３２ビット命令とみなしてデコードする機能を追加したものになる。図１５Ａは最大３２ビットの命令コードを供給し、１６ビットコードの２命令スーパースカラ実行と、３２ビットコードのスカラ実行が可能である。図１５Ｂは最大４８ビットの命令コードを供給し、先行命令が１６ビットコードの２命令スーパースカラ実行と、３２ビットコードのスカラ実行が可能である。
【０１３４】
図１５Ａの例では、命令キャッシュ出力ＩＣＯを命令キューアライナＩＱ−ＡＬＮがバッファリングして先頭の３２ビットコードを出力し、命令コードラッチＯＰ０およびＯＰ１にラッチする。命令コードラッチＯＰ０出力は先行１６ビットコードまたは３２ビットコードの前半１６ビットであり、命令コードラッチＯＰ１出力は後行１６ビットコードまたは３２ビットコードの後半１６ビットである。
【０１３５】
命令デコーダＤＥＣ０は、命令コードラッチＯＰ０およびＯＰ１の出力を入力とし、先行１６ビットコードまたは３２ビットコードをデコードし、制御信号ＤＥＣＯ０および命令デコーダＤＥＣ１の出力の無効化信号ＩＮＶ−ＤＥＣＯ１を出力する。無効化は命令デコーダＤＥＣ０がデコードした命令が３２ビットコードの場合に行う。
【０１３６】
一方、命令デコーダＤＥＣ１は、命令コードラッチＯＰ１の出力を入力とし、後行１６ビットをデコードする。命令コードラッチＯＰ１の出力が３２ビットコードの前半であった場合はデコードせず、次のサイクルで命令デコーダＤＥＣ０に命令コードラッチＯＰ０の出力として供給されるように、命令キューアライナＩＱ−ＡＬＮを制御する。
【０１３７】
命令キューアライナＩＱ−ＡＬＮは、命令デコーダＤＥＣ０およびＤＥＣ１がデコードに成功しかつ発行した命令分だけ、０、１６、または３２ビットポインタを進め、次の命令コードを出力する。
【０１３８】
図１５Ｂの例では、命令キャッシュ出力ＩＣＯを命令キューアライナＩＱ−ＡＬＮがバッファリングして先頭の４８ビットコードを出力し、命令コードラッチＯＰ０、ＯＰ１、およびＯＰＸにラッチする。命令コードラッチＯＰ０出力は先行１６ビットコードまたは先行３２ビットコードの前半１６ビットであり、命令コードラッチＯＰ１出力は後行１６ビットコード、後行３２ビットコードの前半または先行３２ビットコードの後半１６ビット、命令コードラッチＯＰＸ出力は後行３２ビットコードの後半１６ビットである。
【０１３９】
命令デコーダＤＥＣ０は、図１５Ａの例と同じである。一方、命令デコーダＤＥＣ１は、命令コードラッチＯＰ１およびＯＰＸの出力を入力とし、後行１６ビットまたは後行３２ビットをデコードする。
【０１４０】
命令キューアライナＩＱ−ＡＬＮは、命令デコーダＤＥＣ０およびＤＥＣ１がデコードに成功しかつ発行した命令分だけ、０、１６、３２または４８ビットポインタを進め、次の命令コードを出力する。
【０１４１】
図１６は制限を設けずに「スロット不当例外パターン」を全て新規３２ビット命令定義に使用している本実施の形態を、実施の形態３の方式に近い形で実装した場合に、実施の形態３では図１０のとおりであった命令プリデコーダが本実施の形態４の場合にどうなるかを例示する。
【０１４２】
まず、命令フェッチユニットＩＦＵで命令キャッシュＩＣからフェッチした４命令コードＩＣＯ０〜ＩＣＯ３を各命令コードのプリデコーダＰＤ０〜ＰＤ３によってプリデコードし、図４の通常の６種類の命令タイプＴＹＰＥのうち、遅延スロットに置けない命令、即ち、分岐命令ＢＲ、遅延スロット付分岐命令ＢＲＤ、遅延スロットに置けないロードストア命令ＬＳＸ、またはプレフィックスＰＸであるかどうかを判定し、遅延スロット不可信号ＤＳＮＧ−ＰＤ０〜ＤＳＮＧ−ＰＤ３を出力する。
【０１４３】
また、命令タイプＴＹＰＥ判定結果ＴＹＰ−ＰＤ０〜ＴＹＰ−ＰＤ３を出力する。本実施の形態では図４にはない３２ビットコードの前半１６ビットというタイプを追加する必要があるため、３２ビット演算命令前半ＥＸＦＨ、３２ビットロードストア命令前半ＬＳＦＨ、３２ビット分岐命令前半ＢＲＦＨを追加し、上記命令タイプＴＹＰＥ判定結果ＴＹＰ−ＰＤ０〜ＴＹＰ−ＰＤ３として出力する。
【０１４４】
命令タイプ前半ＴＹＰ−ＦＨ０〜ＴＹＰ−ＦＨ３、Ｘとしては、３２ビット演算命令前半ＥＸＦＨ、３２ビットロードストア命令前半ＬＳＦＨ、３２ビット分岐命令前半ＢＲＦＨ、遅延スロット付分岐命令ＢＲＤ、およびその他ＥＴＣを定義する。その他ＥＴＣとしては、３２ビットコード後半、遅延スロットに置けない命令、および１６ビット単独コードがある。
【０１４５】
まず、命令タイプ調整回路ＴＹＰ０〜ＴＹＰ２は、上記命令タイプＴＹＰＥ判定結果ＴＹＰ−ＰＤ０〜ＴＹＰ−ＰＤ２、隣接する先行命令コードの命令タイプ調整回路ＴＹＰ０〜ＴＹＰ１、Ｘからの命令タイプ前半ＴＹＰ−ＦＨ０〜ＴＹＰ−ＦＨ１、Ｘ、および遅延スロット不可信号ＤＳＮＧ−ＰＤ１〜ＤＳＮＧ−ＰＤ３から、隣接する後続命令コードの命令タイプ調整回路ＴＹＰ１〜ＴＹＰ３に送る命令タイプ前半ＴＹＰ−ＦＨ１〜ＴＹＰ−ＦＨ３および命令コードＩＣＯ０〜ＩＣＯ２に付加する命令タイプを生成する。
【０１４６】
隣接する先行命令コードの命令タイプ調整回路ＴＹＰ０〜ＴＹＰ１、Ｘからの出力がその他ＥＴＣで、命令タイプＴＹＰＥ判定結果ＴＹＰ−ＰＤ０〜ＴＹＰ−ＰＤ２が３２ビット演算命令前半ＥＸＦＨ、３２ビットロードストア命令前半ＬＳＦＨ、３２ビット分岐命令前半ＢＲＦＨ、または遅延スロット付分岐命令ＢＲＤであれば、命令タイプＴＹＰＥ判定結果ＴＹＰ−ＰＤ０〜ＴＹＰ−ＰＤ３をそのまま使用し、他の場合はその他ＥＴＣを命令タイプ前半ＴＹＰ−ＦＨ０〜ＴＹＰ−ＦＨ２として生成する。
【０１４７】
一方、命令コードＩＣＯ０〜ＩＣＯ２に付加する命令タイプとしては、隣接する先行命令コードの命令タイプ調整回路からの命令タイプ前半ＴＹＰ−ＦＨ０〜ＴＹＰ−ＦＨ１、Ｘが３２ビット演算命令前半ＥＸＦＨであれば演算命令ＥＸを出力し、３２ビットロードストア命令前半ＬＳＦＨであればロードストア命令ＬＳを出力し、３２ビット分岐命令前半ＢＲＦＨであれば分岐命令ＢＲを出力し、遅延スロット付分岐命令ＢＲＤであれば命令タイプＴＹＰＥ判定結果ＴＹＰ−ＰＤ０〜ＴＹＰ−ＰＤ２を図４に従ってＴＹＰをＴＹＰ−ＤＳに変換して出力し、その他ＥＴＣの場合は以下を出力する。命令タイプＴＹＰＥ判定結果ＴＹＰ−ＰＤ０〜ＴＹＰ−ＰＤ２が遅延スロット付分岐命令ＢＲＤならば、さらに隣接後続命令からの遅延スロット不可信号ＤＳＮＧ−ＰＤ１〜ＤＳＮＧ−ＰＤ３がアサートされば「スロット不当例外パターン」なので、プレフィックスコードＰＸを、アサートされなければ分岐命令ＢＲを出力し、遅延スロットに置けないロードストア命令ＬＳＸならばロードストア命令ＬＳを出力し、他の場合はそのまま命令タイプＴＹＰＥ判定結果ＴＹＰ−ＰＤ０〜ＴＹＰ−ＰＤ２を出力する。
【０１４８】
一方、命令タイプ調整回路ＴＹＰ３の場合は、上記命令タイプ調整回路ＴＹＰ０〜ＴＹＰ２に対して、隣接後続命令からの遅延スロット不可信号ＤＳＮＧ−ＰＤ１〜ＤＳＮＧ−ＰＤ３に相当する信号を受けない点が異なるため、命令コードＩＣＯ３に付加する命令タイプとして、隣接する先行命令コードの命令タイプ調整回路からの命令タイプ前半ＴＹＰ−ＦＨ２がその他ＥＴＣで命令タイプＴＹＰＥ判定結果ＴＹＰ−ＰＤ０〜ＴＹＰ−ＰＤ２が遅延スロット付分岐命令ＢＲＤの場合は常に分岐命令ＢＲを出力する。他の場合は、上記命令タイプ調整回路ＴＹＰ０〜ＴＹＰ２と同様な動作をする。
【０１４９】
更に、命令タイプ調整回路ＴＹＰ３が出力した命令タイプ前半ＴＹＰ−ＦＨ３をラッチＴＹＰＬがラッチして出力し、命令タイプ調整回路ＴＹＰＸがこれを受けて、まず、命令タイプ前半ＴＹＰ−ＦＨＸとしてはラッチＴＹＰＬ出力をそのまま出力する。そして、上記命令タイプ調整回路ＴＹＰ３が隣接後続命令からの遅延スロット不可信号ＤＳＮＧ−ＰＤ１〜ＤＳＮＧ−ＰＤ３に相当する信号を受けないためにできなかった処理を引き継いで行う。ラッチＴＹＰＬ出力が遅延スロット付分岐命令ＢＲＤかつ隣接後続命令からの遅延スロット不可信号ＤＳＮＧ−ＰＤ０がアサートさればプレフィックス化信号コードＰＸ−ＰＤ３をアサートし、他の場合はネゲートする。
【０１５０】
以上のように、本実施例では、命令タイプ調整回路ＴＹＰ０〜ＴＹＰ３、Ｘはシリアルに接続されるため、実施例３に比べると低速な反面、「スロット不当例外パターン」を全て使用することができる。なお、一般に段数を最適化すればシリアルなＮ段接続はＬｏｇＮ段まで段数のオーダーを下げることができる。
【０１５１】
実施の形態４によれば以下の作用効果を得る。
【０１５２】
「スロット不当例外パターン」を３２ビット命令として扱う場合は、前記方式で「スロット不当例外パターン」検出して、１６／３２ビット長混在命令セット方式と同様にディスパッチすれば良い。既に１６／３２ビット長混在命令セット方式に命令セットを拡張していて、命令の逐次デコードが必要になっている場合はこの方式が適している。この場合、「スロット不当例外パターン」を前述の効率的なスーパースカラ命令発行可能なパターンに制限するメリットはないため、「スロット不当例外パターン」を全て有効活用すべきである。したがって、この実施の形態によれば、既に１６／３２ビット長混在命令セットを実装しているプロセッサにおいて、分岐性能にほとんど影響を与えることなく「スロット不当例外パターン」約１４４.５Ｍパターンを全て新規３２ビット命令定義に使用することができる。
【０１５３】
《実施の形態５》
以上の実施の各実施の形態で活用した「スロット不当例外パターン」のような例外を発生するパターンだけでなく、その他に、プログラム上で意味のない２命令の組み合わせ（特定組み合わせパターン）にも本発明の概念を適用することができる。例えば、同一レジスタへの連続ロードの場合、１回目のロードのロード先のレジスタが２回目のロードのソースオペランドでなければ、１回目のロードは実行する必要がない。このような同一レジスタへの連続ロードは禁止されていないが、このような２命令の組み合わせを禁止して本発明を適用すればコード空間を拡張することができる。
【０１５４】
例えば図１１に例示されるように、オペランドを１２ビット持つ命令で実行結果をレジスタに格納する命令が５命令あるとする。これらの任意の２命令を組み合わせて実行結果を格納するレジスタが同一となるパターンを作る。このとき、ＡＤＤ命令は後行命令の場合には意味があり、ＭＯＶ.Ｌ @（Ｒm,disp４）,Ｒn命令は後行命令の場合で先行命令が実行結果を格納するレジスタがＲmの場合には意味がある。パターンの検出を容易にするために、これら２命令を先行命令専用にすると、先行命令に５命令、後行命令に３命令使用して３２ビットパターンを作ることができる。この結果、先行命令が５x２１２＝２０ｋパターン、後行命令が３x２１２＝１２ｋパターンあり、レジスタ番号が一致する確率が１／１６なので、活用可能な３２ビットパターンは１５Ｍパターンとなる。「スロット不当例外パターン」に比べて実行結果を格納するレジスタが同一であることをチェックする手間が増えるが、新たに得られるパターンは多い。こうして得られたパターンは、実施の形態４と同様に逐次デコードすれば検出可能である。
【０１５５】
一方、実施の形態３のように先行命令と後行命令が異なる必要がある実現方式に合わせるには、５命令を２命令と３命令に分ければよい。例えば、後行の３命令は変えずに、先行命令を後行に使用しない２命令に限定すればよい。この結果得られるパターンは、６Ｍパターンとなる。
【０１５６】
図１７は、本実施の形態を実施の形態３の方式に近い形で実装した場合に、実施の形態３では図１０のとおりであった命令プリデコーダを本実施の形態向けに構成した例である。
【０１５７】
実施の形態３では「スロット不当例外パターン」を使用し、前半が遅延スロット付分岐命令、後半が遅延スロットに置けない命令であったが、本実施の形態では「プログラム上で意味のない２命令の組み合わせ」を使用するので、これに対応して、遅延スロット付分岐信号ＢＲＤ−ＰＤ０〜ＢＲＤ−ＰＤ３及び遅延スロット不可信号ＤＳＮＧ−ＰＤ０〜ＤＳＮＧ−ＰＤ３の代わりに、前半部分候補信号ＦＨ−ＰＤ０〜ＦＨ−ＰＤ３および後半部分候補信号ＬＨ−ＰＤ０〜ＬＨ−ＰＤ３を使用する。また、比較回路ＣＭＰ０１、ＣＭＰ１２、ＣＭＰ２３、ＣＭＰ３０によって、隣接コード間で結果格納先レジスタ番号の一致検出をしている。この結果を、先行命令コードから後行命令コードへは前半部分候補信号ＦＨ−ＰＤ０〜ＦＨ−ＰＤ３に付加し、後行命令コードから先行命令コードへは後半部分候補信号ＬＨ−ＰＤ０〜ＬＨ−ＰＤ３に付加して送る。そして、命令タイプ調整回路ＴＹＰ０〜ＴＹＰ３、Ｘはこれらの信号から、本実施例の２命令の組み合わせを検出し、命令コードタイプを前半部分であればプレフィックスＰＸに、後半部分であれば「プログラム上で意味のない２命令の組み合わせ」としてのタイプに変換して、命令コードＩＣＯ０〜ＩＣＯ３に付加する。
【０１５８】
図１８は、本実施の形態を実施の形態４の図１６の方式に近い形で実装した場合に、実施の形態４では図１６のとおりであった命令プリデコーダを本実施の形態向けに構成した例である。
【０１５９】
図１７と同様に遅延スロット不可信号ＤＳＮＧ−ＰＤ０〜ＤＳＮＧ−ＰＤ３の代わりに、後半部分候補信号ＬＨ−ＰＤ０〜ＬＨ−ＰＤ３を使用し、比較回路ＣＭＰ０１、ＣＭＰ１２、ＣＭＰ２３、ＣＭＰ３０、によって、隣接コード間で結果格納先レジスタ番号の一致検出をし、この結果を後半部分候補信号ＬＨ−ＰＤ０〜ＬＨ−ＰＤ３に付加して送る。そして、命令タイプ調整回路ＴＹＰ０〜ＴＹＰ３、Ｘはこれらの信号から、実施例４と同様に、命令タイプ前半ＴＹＰ−ＦＨ０〜ＴＹＰ−ＦＨ３、Ｘを生成し、命令コードタイプを命令コードＩＣＯ０〜ＩＣＯ３に付加する。特に、本実施の形態の２命令の組み合わせを検出した場合に、命令コードタイプを前半部分であればプレフィックスＰＸに、後半部分であれば「プログラム上で意味のない２命令の組み合わせ」としてのタイプに変換して、命令コードＩＣＯ０〜ＩＣＯ３に付加する。このときのディスパッチ回路ＥＸ−ＩＳＤ，ＬＳ−ＩＳＤ，ＢＲ−ＩＳＤによる明レコードの分配機能は図１２と同様でよい。
【０１６０】
更に、本実施の形態を、例えば、同一レジスタへの３連続ロードのような意味のない３命令以上の組み合わせにも拡張することは、本技術分野の通常のスキルを有するエンジニアであれば容易であるから、其の詳細な説明は省略する。
【０１６１】
実施の形態５によれば以下能作用効果を得る。
【０１６２】
上記「スロット不当例外パターン」のように例外を発生するパターン以外に、プログラム上で意味のない２命令などの複数命令の組み合わせにも本発明の概念を適用することができる。例えば、同一レジスタへの連続ロードの場合、１回目のロードのロード先のレジスタが２回目のロードのソースオペランドでなければ、１回目のロードは実行する必要がない。このような同一レジスタへの連続ロードは禁止されていないが、このような２命令の組み合わせを禁止して本発明を適用すればコード空間を拡張することができる。更に、例えば、同一レジスタへの３連続ロードのような意味のない３命令以上の組み合わせにも拡張することができる。これにより、既に１６／３２ビット長混在命令セットを実装しているプロセッサにおいて、逐次でコードが必要な実施の形態４と同様な実装によって１５Ｍパターン、並列デコード可能な実施の形態３と同様な実装で６Ｍパターンを全て新規３２ビット命令定義に使用することができるようになり、命令拡張による性能や効率の向上に資することができる。
【０１６３】
以上本発明者によってなされた発明を実施形態に基づいて具体的に説明したが、本発明はそれに限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。
【０１６４】
例えば、１６ビット固定長命令セットまたは１６／３２ビット長混在命令セットのプロセッサのうち、ディレイスロット命令を持ち、スロット不当例外の発生するプロセッサに適用した場合について説明したが、本発明はそれに限定されず、３２ビット固定長命令セットまたは３２／６４ビット長混在命令セットのプロセッサなどにも適用可能である。
【産業上の利用可能性】
【０１６５】
本発明は、命令コードの基本長に対して多倍長の新たな命令コードを命令セットに追加するための技術に関し、例えば、１６ビット固定長命令セットまたは１６／３２ビット長混在命令セットのプロセッサのうち、ディレイスロット命令を持ち、スロット不当例外の発生するプロセッサに広く適用することができる。
【符号の説明】
【０１６６】
ＭＰＵ  データプロセッサ
ＣＰＵ  プロセッサコア
ＩＢＵＳ  内部バス
ＥＩＦ  外部インタフェース回路
ＰＥＲ  内蔵周辺モジュール
ＩＣ  命令キャッシュ
ＩＦＵ  命令フェッチユニット
ＰＤ  プリデコーダ
ＧＩＱ  グローバル命令キュー
ＢＲＣ  分岐制御部
ＤＣ  データキャッシュ
ＬＳＵ  ロードストアユニット
ＬＳＩＱ  ロードストア命令キュー
ＬＳＩＤ  ロードストア命令デコーダ
ＬＳＥ  ロードストア命令実行部
ＥＸＩＱ  実行命令キュー
ＥＸＩＤ  演算命令デコーダ
ＥＸＥ  演算命令実行部
ＢＩＵ  バスインタフェースユニット
ＩＣ１、ＩＣ２  命令キャッシュアクセス
ＧＩＢ  グローバル命令バッファＧＩＢ
ＥＸＰＬ  演算命令用パイプライン
ＥＸＩＢ  ローカル命令バッファ
ＥＸＲＲ  ローカルレジスタリード
ＥＸ  演算
ＷＢ  レジスタライトバック
ＬＳＰＬ  ロードストア命令用パイプライン
ＬＳＩＢ  ローカル命令バッファ
ＬＳＲＲ  ローカルレジスタリード
ＬＳＡ  アドレス計算
ＤＣ１、ＤＣ２  データキャッシュアクセス
ＢＲＰＬ  分岐命令用パイプライン
ＢＲ  分岐
ＩＦＵ  命令フェッチユニット
ＧＩＱ０〜１５  １６命令分の命令キューエントリ
ＧＩＱＰ  グローバル命令キューポインタ
ＧＩＱＰ−ＤＥＣ  グローバル命令キューポインタデコーダ
ＥＸＰ  演算命令ポインタ
ＬＳＰ  ロードストア命令ポインタ
ＢＲＰ  分岐命令ポインタ
ＥＸ−ＩＳＤ  演算命令探索ディスパッチ回路
ＬＳ−ＩＳＤ  ロードストア命令探索ディスパッチ回路
ＢＲ−ＩＳＤ  分岐命令探索ディスパッチ回路
ＩＲＥＱ−ＧＥＮ  命令フェッチ要求生成部
ＩＣＯＶ  命令キャッシュ出力有効信号
ＧＩＱＵ０〜３  グローバル命令キュー更新信号
ＧＩＱ０〜３、ＧＩＱ４〜７、ＧＩＱ８〜１１、ＧＩＱ１２〜１５  グローバル命令キューエントリグループ
ＧＩＱＯ０〜１５  グローバル命令キュー出力
ＢＲ−ＩＶ  分岐命令コード有効信号
ＢＲ−ＩＮＳＴ  分岐命令
ＢＲ−ＰＶ  分岐プレフィックス候補有効信号
ＢＲ−ＩＶ  分岐命令コード有効信号
【図１】
2012144374.tif 000003
【図２】
2012144374.tif 000004
【図３】
2012144374.tif 000005
【図４】
2012144374.tif 000006
【図５】
2012144374.tif 000007
【図６】
2012144374.tif 000008
【図７】
2012144374.tif 000009
【図８】
2012144374.tif 000010
【図９】
2012144374.tif 000011
【図１０】
2012144374.tif 000012
【図１１】
2012144374.tif 000013
【図１２】
2012144374.tif 000014
【図１３】
2012144374.tif 000015
【図１４Ａ】
2012144374.tif 000016
【図１４Ｂ】
2012144374.tif 000017
【図１５Ａ】
2012144374.tif 000018
【図１５Ｂ】
2012144374.tif 000019
【図１６】
2012144374.tif 000020
【図１７】
2012144374.tif 000021
【図１８】
2012144374.tif 000022
【手続補正書】
【提出日】平成25年10月4日(2013.10.4)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】００２４
【補正方法】変更
【補正の内容】
【００２４】
【図１】図１は「スロット不当例外パターン」を構成する「遅延スロット付分岐命令」を例示する説明図である。
【図２】図２は図１の命令の他に「遅延スロットに置けない命令」として利用される命令を更に例示する説明図である。
【図３】図１と図２の命令の組み合わせによる「スロット不当例外パターン」をオペランドフィールドのビット数に応じて分類して例示した説明図である。
【図４】図4は命令の種類ＴＹＰＥに対する命令コードの上位４ビットＣＯＤＥの割当を分類した説明図である。
【図５】図５には本実施の形態に係るデータプロセッサを例示するブロック図である。
【図６】図６はプロセッサコアの構成を例示するブロック図である。
【図７】図７はプロセッサコアのパイプライン構成を例示する説明図である。
【図８】図８は本実施の形態に係るデータプロセッサのグローバル命令キューＧＩＱの構成を例示するブロック図である。
【図９】図９は図８のグローバル命令キューＧＩＱの分岐命令探索ディスパッチ回路ＢＲ−ＩＳＤの構成を例示するブロック図である。
【図１０】図１０は実施の形態３におけるプリデコーダの構成を例示するブロック図である。
【図１１】図１１は同一レジスタへの連続ロードのような無意味な２命令の組み合わせによってコード空間を拡張する実施の形態５で着目する命令として挙げたオペランドを１２ビット持つ命令で実行結果をレジスタに格納する命令を例示する説明図である。
【図１２】図１２は実施の形態１においてグローバル命令キューＧＩＱの作用を説明するためのフローチャートである。
【図１３】図１３は実施の形態２においてグローバル命令キューＧＩＱの作用を説明するための図１２に対応されるフローチャートである。
【図１４Ａ】図１４Ａは分岐命令バッファを１段有する分岐制御部ＢＲＣのデコーダ構成を例示するブロック図である。
【図１４Ｂ】図１４Ｂは分岐命令バッファを複数段有する分岐制御部ＢＲＣのデコーダ構成を例示するブロック図である。
【図１５Ａ】図１５Ａは実施の形態４において最大３２ビットの命令コードを供給し、１６ビットコードの２命令スーパースカラ実行と、３２ビットコードのスカラ実行を可能とするデコーダの構成を例示するブロック図である。
【図１５Ｂ】図１５Ｂは実施の形態４において最大４８ビットの命令コードを供給し、先行命令が１６ビットコードの２命令スーパースカラ実行と、３２ビットコードのスカラ実行を可能とするデコーダの構成を例示するブロック図である。
【図１６】図１６はスロット不当例外パターンを全て新規３２ビット命令定義に使用している実施の形態４を、実施の形態３の方式に近い形で実装した場合に、実施の形態３における図１０の命令プリデコーダを実施の形態に対応させたときの構成を例示するブロック図である。
【図１７】図１７は実施の形態５を実施の形態３の方式に近い形で実装した場合に実施の形態３では図１０のとおりであった命令プリデコーダを実施の形態５向けに構成した例を示すブロック図である。
【図１８】図１８は実施の形態５を実施の形態４の図１６の方式に近い形で実装した場合に実施の形態４では図１６のとおりであった命令プリデコーダを実施の形態５向けに構成した例を示すブロック図である。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００８４
【補正方法】変更
【補正の内容】
【００８４】
命令キャッシュアクセスＩＣ１およびＩＣ２ステージでは、命令フェッチユニットＩＦＵが命令キャッシュＩＣから命令コードをフェッチしてプリデコーダＰＤでプリデコードした後、続くグローバル命令バッファＧＩＢステージのグローバル命令キューＧＩＱに格納する。グローバル命令バッファＧＩＢステージでは、ロードストア、演算、並びに、分岐の各カテゴリの命令をプリデコード結果などを用いて１命令ずつ抽出してディスパッチし、それぞれローカル命令バッファＬＳＩＢおよびＥＸＩＢ、並びに、分岐ＢＲステージで、それぞれロードストアユニットＬＳＵの命令キューＬＳＩＱ、演算命令実行ユニットＥＸＵの命令キューＥＸＩＱ、並びに、命令フェッチユニットＩＦＵの分岐制御部ＢＲＣに格納する。そして、分岐ＢＲステージでは、分岐命令を受取った場合には直ちに分岐処理が開始される。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】００８８
【補正方法】変更
【補正の内容】
【００８８】
次に、図１２のフローチャートを用いてグローバル命令キューＧＩＱの作用を説明する。（ａ）命令キャッシュ出力有効信号ＩＣＯＶがアサートされると、（ｂ）グローバル命令キューポインタデコーダＧＩＱＰ−ＤＥＣは、グローバル命令キュー更新信号ＧＩＱＵ０〜３のうち、グローバル命令キューポインタＧＩＱＰの指している命令キューエントリグループの更新信号をアサートする。（ｃ）そして、グローバル命令キューＧＩＱは、グローバル命令キューエントリグループＧＩＱ０〜ＧＩＱ３、ＧＩＱ４〜ＧＩＱ７、ＧＩＱ８〜ＧＩＱ１１、またはＧＩＱ１２〜ＧＩＱ１５のうち、対応するグローバル命令キュー更新信号ＧＩＱＵ０〜ＧＩＱＵ３がアサートされているグループに、命令フェッチユニットＩＦＵで命令キャッシュＩＣからフェッチしてプリデコーダＰＤでプリデコードした４命令コードＩＣＰＤＯ０〜ＩＣＰＤＯ３をラッチし、ラッチしたグループを有効にする。特に制限されないが、命令コードＩＣＰＤＯ０〜ＩＣＰＤＯ３にはプリデコード結果として命令タイプを示す情報が付加される。更に、（ｄ）あらかじめグローバル命令キューポインタＧＩＱＰに１を加算した値を新グローバル命令キューポインタＧＩＱＰ−ＮＥＷとして出力しておき、この値でグローバル命令キューポインタＧＩＱＰを更新する。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】０１０１
【補正方法】変更
【補正の内容】
【０１０１】
図６の分岐制御部ＢＲＣは、分岐命令コードおよびその直前の命令コードから成る分岐命令ＢＲ−ＩＮＳＴをデコードして、命令フェッチユニットＩＦＵを制御して、命令フローを管理する。図１２のフローチャートを用いて説明したように、分岐命令コード有効信号ＢＲ−ＩＶおよび分岐プレフィックス候補有効信号ＢＲ−ＰＶの値に応じて、分岐命令ＢＲ−ＩＮＳＴには４通りの状態（ｏ），（ｐ），（ｎ），（ｑ）がある。それぞれの場合について、分岐制御部ＢＲＣのデコード動作を図１４Ａ及び図１４Ｂに基づいて説明する。
【手続補正５】
【補正対象書類名】明細書
【補正対象項目名】０１０５
【補正方法】変更
【補正の内容】
【０１０５】
また、図１２の（ｐ）の分岐命令コードだけが有効にされた場合は、（ｏ）の場合と同様に、この状態であると判断し、分岐命令ラッチＢＲ−Ｉを制御して、分岐命令ＢＲ−ＩＮＳＴの後半部分を分岐命令として分岐命令デコーダＢＲ−ＤＥＣに供給する。そして、先行的に供給された分岐プレフィックス候補が有効ならば、共に使用して前記（ｏ）と同様に処理する。一方、分岐直後等で先行的に分岐プレフィックス候補が供給されていなければ、通常の分岐命令として処理する。
【手続補正６】
【補正対象書類名】明細書
【補正対象項目名】０１１６
【補正方法】変更
【補正の内容】
【０１１６】
まず、（ａ）〜（ｅ）は同一である。（ｆ）では直前の命令コードではなく直後の命令コードを出力するように変更する。（ｆ）の後、無条件に（ｇ）に進んでいたものを「最後の有効な命令以外で発見」したら（ｇ）に進むように変更し、（ｇ）に進まなかった場合は（ｋ）に進むように変更する。（ｇ）から「先頭で発見」の場合に進んでいた（ｉ）は削除して、無条件で（ｈ）に進むように変更し、（ｈ）の分岐プレフィックスをポストフィックスに変更する。次に、探索対象の有効な命令コードの最後のコードがプレフィックスである場合の考慮が不要となったので、（ｊ）では任意の命令コードおよびその直後の命令コードを出力するように変更し、（ｋ）から「有効命令コードあり」の場合に進んでいた（ｌ）は削除して、無条件で（ｍ）に進むように変更し、（ｍ）の分岐プレフィックスをポストフィックスに変更する。
【手続補正７】
【補正対象書類名】明細書
【補正対象項目名】０１５９
【補正方法】変更
【補正の内容】
【０１５９】
図１７と同様に遅延スロット不可信号ＤＳＮＧ−ＰＤ０〜ＤＳＮＧ−ＰＤ３の代わりに、後半部分候補信号ＬＨ−ＰＤ０〜ＬＨ−ＰＤ３を使用し、比較回路ＣＭＰ０１、ＣＭＰ１２、ＣＭＰ２３、ＣＭＰ３０、によって、隣接コード間で結果格納先レジスタ番号の一致検出をし、この結果を後半部分候補信号ＬＨ−ＰＤ０〜ＬＨ−ＰＤ３に付加して送る。そして、命令タイプ調整回路ＴＹＰ０〜ＴＹＰ３、Ｘはこれらの信号から、実施例４と同様に、命令タイプ前半ＴＹＰ−ＦＨ０〜ＴＹＰ−ＦＨ３、Ｘを生成し、命令コードタイプを命令コードＩＣＯ０〜ＩＣＯ３に付加する。特に、本実施の形態の２命令の組み合わせを検出した場合に、命令コードタイプを前半部分であればプレフィックスＰＸに、後半部分であれば「プログラム上で意味のない２命令の組み合わせ」としてのタイプに変換して、命令コードＩＣＯ０〜ＩＣＯ３に付加する。このときのディスパッチ回路ＥＸ−ＩＳＤ，ＬＳ−ＩＳＤ，ＢＲ−ＩＳＤによる命令コードの分配機能は図１２と同様でよい。
【国際調査報告】
2012144374.tif 000023
2012144374.tif 000024