(57)【特許請求の範囲】
【請求項１】
４つの固定長命令を同時にフェッチする命令フェッチ部と、
前記４つの固定長命令のうち第２番目と第４番目の固定長命令における共通する特定のビット位置に設けられる特定フィールドをプリデコードする命令プリデコーダと、
前記プリデコード結果に従ってプログラムカウンタの増分値が前記固定長命令の１命令分、２命令分または４命令分の何れかになるように制御するプログラムカウンタ管理部と
を具備するプロセッサ。
【請求項２】
複数の固定長命令を同時にフェッチする命令フェッチ部と、
前記複数の固定長命令のうちオペコードフィールドにより指定された特定の命令を逐次実行する逐次実行部と、
前記複数の固定長命令のうちオペコードフィールドにより指定された特定の命令を特定フィールドに示された情報に基づく並列度により実行する並列実行部と、
前記複数の固定長命令のうち前記並列実行部による実行対象となる固定長命令における前記特定フィールドをプリデコードする命令プリデコーダと、
前記プリデコード結果に従ってプログラムカウンタの増分を制御するプログラムカウンタ管理部と
を具備するプロセッサ。
【請求項３】
前記特定フィールドは、前記並列実行部による実行対象となる固定長命令において共通する特定のビット位置に設けられる請求項２記載のプロセッサ。
【請求項４】
前記特定フィールドは、前記複数の固定長命令における同時発行可能な命令数を示す同時発行命令数フィールドを含む請求項３記載のプロセッサ。
【請求項５】
４つの固定長命令を同時にフェッチする命令フェッチ部と、
前記４つの固定長命令のうちオペコードフィールドにより指定された特定の命令を逐次実行する逐次実行部と、
前記４つの固定長命令のうちオペコードフィールドにより指定された特定の命令を特定フィールドに示された情報に基づく並列度により実行する並列実行部と、
前記４つの固定長命令のうち前記並列実行部による実行対象となる第２番目と第４番目の固定長命令における共通する特定のビット位置に設けられる前記特定フィールドをプリデコードする命令プリデコーダと、
前記プリデコード結果に従ってプログラムカウンタの増分値が前記固定長命令の１命令分、２命令分または４命令分の何れかになるように制御するプログラムカウンタ管理部と
を具備するプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサに関し、特にＶＬＩＷ（Very Long Instruction Word）型などの並列実行部を想定したプロセッサに関する。
【背景技術】
【０００２】
ＲＩＳＣプロセッサ等の逐次実行プロセッサは、汎用的な制御処理に向いている。一方、ＶＬＩＷプロセッサ等の並列実行プロセッサは、特定用途向けの単純かつ多くの並列演算処理を得意としている。通常、この２つのプロセッサはそれぞれが独立に命令キャッシュまたはＲＡＭを備え、それぞれ独立に動作（命令発行および実行）している。つまり、ＲＩＳＣ側の処理とＶＬＩＷプロセッサ側の処理は入り混じることなく、上位階層の共有しているメモリ上でのみ情報交換できる構造となっており、両者の処理を細かい単位で融合することは困難である。
【０００３】
そこで、従来、ＲＩＳＣプロセッサ命令のサブルーチン命令コードによってＶＬＩＷ制御ユニットを動作させるプロセッサが提案されている（例えば、特許文献１参照。）。この従来技術では、サブルーチン命令コードによってプログラム番号を指定し、ＶＬＩＷ制御ユニットにおけるプログラムの実行を起動している。これにより、ＶＬＩＷ制御ユニットにおける並列実行を可能としている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００２−０３２２１８号公報（図１）
【発明の概要】
【発明が解決しようとする課題】
【０００５】
上述の従来技術によれば、ＲＩＳＣプロセッサ命令からＶＬＩＷ制御ユニットの並列実行を起動することができる。しかしながら、この従来技術では予めサブルーチンプログラムを準備して、その中からプログラム番号によって指定しなければならない。これは、一般的に３２ビット幅のＲＩＳＣプロセッサ命令によって、全てのＶＬＩＷ制御ユニットを並列動作させることに起因するものである。また、この場合、サブルーチンプログラムの終了を待って、次のＲＩＳＣプロセッサ命令を実行することになるため、ＲＩＳＣプロセッサの処理とＶＬＩＷ制御ユニットの処理とを排他的に動作させることになる。したがって、両者の処理を細かい単位で融合することは困難であり、また、モードを頻繁に切替える必要があるため、処理効率の悪化を招く。
【０００６】
一方、ＲＩＳＣ命令セットとＶＬＩＷ命令を完全に融合した新しいＲＩＳＣ命令セットを定義しようとした場合は、過去のＲＩＳＣ命令セットによるソフトウェア資産およびソフトウェア開発環境に対する互換性を保つことが困難である。
【０００７】
本発明はこのような状況に鑑みてなされたものであり、逐次実行部（ＲＩＳＣプロセッサ）の処理と並列実行部（ＶＬＩＷ制御ユニット）の処理とを効率良く融合させることを目的とする。
【課題を解決するための手段】
【０００８】
本発明は、上記課題を解決するためになされたものであり、その第１の側面は、プログラムカウンタに従って複数の固定長命令を同時にフェッチする命令フェッチ部と、上記複数の固定長命令のうち一部の固定長命令における特定フィールドをプリデコードする命令プリデコーダと、上記プリデコード結果に従って上記プログラムカウンタの増分を制御するプログラムカウンタ管理部とを具備するプロセッサである。これにより、命令デコードより前にプログラムカウンタの増分値を確定させて制御を容易にするという作用をもたらす。
【０００９】
また、この第１の側面において、上記特定フィールドは、上記一部の固定長命令において共通する特定のビット位置に設けられてもよい。また、上記特定フィールドは、上記複数の固定長命令における同時発行可能な命令数を示す同時発行命令数フィールドを含んでもよい。
【００１０】
また、本発明の第２の側面は、プログラムカウンタに従って４つの固定長命令を同時にフェッチする命令フェッチ部と、上記４つの固定長命令のうち第２番目と第４番目の固定長命令における共通する特定のビット位置に設けられる特定フィールドをプリデコードする命令プリデコーダと、上記プリデコード結果に従って上記プログラムカウンタの増分値が上記固定長命令の１命令分、２命令分または４命令分の何れかになるように制御するプログラムカウンタ管理部とを具備するプロセッサである。これにより、４つの固定長命令をフェッチした後、命令デコードより前にプログラムカウンタの増分値を１命令分、２命令分または４命令分の何れかに確定させて制御を容易にするという作用をもたらす。
【００１１】
また、本発明の第３の側面は、プログラムカウンタに従って複数の固定長命令を同時にフェッチする命令フェッチ部と、上記複数の固定長命令のうちオペコードフィールドにより指定された特定の命令を逐次実行する逐次実行部と、上記複数の固定長命令のうちオペコードフィールドにより指定された特定の命令を特定フィールドに示された情報に基づく並列度により実行する並列実行部と、上記複数の固定長命令のうち上記並列実行部による実行対象となる固定長命令における上記特定フィールドをプリデコードする命令プリデコーダと、上記プリデコード結果に従って上記プログラムカウンタの増分を制御するプログラムカウンタ管理部とを具備するプロセッサである。これにより、命令デコードより前にプログラムカウンタの増分値を確定させるとともに、特定フィールドに示された情報に基づく並列度により並列実行させるという作用をもたらす。
【００１２】
また、この第３の側面において、上記特定フィールドは、上記並列実行部による実行対象となる固定長命令において共通する特定のビット位置に設けられてもよい。また、上記特定フィールドは、上記複数の固定長命令における同時発行可能な命令数を示す同時発行命令数フィールドを含んでもよい。
【００１３】
また、本発明の第４の側面は、プログラムカウンタに従って４つの固定長命令を同時にフェッチする命令フェッチ部と、上記４つの固定長命令のうちオペコードフィールドにより指定された特定の命令を逐次実行する逐次実行部と、上記４つの固定長命令のうちオペコードフィールドにより指定された特定の命令を特定フィールドに示された情報に基づく並列度により実行する並列実行部と、上記４つの固定長命令のうち上記並列実行部による実行対象となる第２番目と第４番目の固定長命令における共通する特定のビット位置に設けられる上記特定フィールドをプリデコードする命令プリデコーダと、上記プリデコード結果に従って上記プログラムカウンタの増分値が上記固定長命令の１命令分、２命令分または４命令分の何れかになるように制御するプログラムカウンタ管理部とを具備するプロセッサである。これにより、４つの固定長命令をフェッチした後、命令デコードより前にプログラムカウンタの増分値を１命令分、２命令分または４命令分の何れかに確定させるとともに、特定フィールドに示された情報に基づく並列度により並列実行させるという作用をもたらす。
【発明の効果】
【００１４】
本発明によれば、ＲＩＳＣプロセッサ等の逐次実行部の処理とＶＬＩＷ制御ユニット等の並列実行部の処理とを効率良く融合させることができるという優れた効果を奏し得る。
【図面の簡単な説明】
【００１５】
【図１】本発明の実施の形態におけるプロセッサシステムの構成例を示す図である。
【図２】本発明の実施の形態におけるＲＩＳＣプロセッサ１００の命令発行機構の概要構成例を示す図である。
【図３】本発明の実施の形態におけるＲＩＳＣプロセッサ１００の命令発行機構の詳細構成例を示す図である。
【図４】本発明の実施の形態における命令フォーマットの例を示す図である。
【図５】本発明の実施の形態における命令発行タイミングの例を示す図である。
【図６】本発明の実施の形態における命令発行タイミングに応じた同時発行命令数フィールドの値の例を示す図である。
【図７】本発明の実施の形態におけるプログラムカウンタの増分制御の例を示す図である。
【図８】本発明の実施の形態におけるインラインアセンブラマクロ命令の例を示す図である。
【図９】本発明の実施の形態におけるインラインアセンブラマクロ命令と同時発行命令数の関係例を示す図である。
【図１０】本発明の実施の形態におけるアセンブラマクロ命令によるプログラム例を示す図である。
【発明を実施するための形態】
【００１６】
以下、本発明を実施するための形態（以下、実施の形態と称する）について説明する。説明は以下の順序により行う。
１．第１の実施の形態（プログラムカウンタ増分制御）
２．第２の実施の形態（アセンブラマクロ命令による同時発行命令数設定）
３．まとめ
【００１７】
＜１．第１の実施の形態＞
［プロセッサシステムの構成］
図１は、本発明の実施の形態におけるプロセッサシステムの構成例を示す図である。このプロセッサシステムは、ＲＩＳＣプロセッサ１００と、ＶＬＩＷコプロセッサ２００と、通常コプロセッサ３００と、メインメモリ４００とを備える。この実施の形態では、１サイクルで３２ビット長の命令を最大４命令ずつフェッチして、ＶＬＩＷコプロセッサ２００により並列に実行し、または、ＲＩＳＣプロセッサ１００とＶＬＩＷコプロセッサ２００の組合せにより並列に実行することを想定する。なお、命令フォーマットの具体例については後述する。
【００１８】
ＲＩＳＣプロセッサ１００は、プロセッサシステムの主となるプロセッサであり、一例としてＲＩＳＣ（Reduced Instruction Set Computer）アーキテクチャを採用する。このＲＩＳＣプロセッサ１００は、メモリバス４０９を介してメインメモリ４００に接続しており、メインメモリ４００から必要な命令やデータを取得して命令の実行処理を行う。このＲＩＳＣプロセッサ１００は、命令キャッシュ１０１と、命令セレクタ１０２と、命令デコーダ１０３と、逐次実行部１０４と、レジスタファイル１０５、データキャッシュ１０６とを備える。
【００１９】
命令キャッシュ１０１は、メインメモリ４００から読み出された命令を一時的に保持するキャッシュメモリである。メインメモリ４００から命令キャッシュ１０１へのデータ供給は１サイクルで最大４命令ずつを想定する。また、命令キャッシュ１０１から各部への命令供給も１サイクルで最大４命令ずつを想定する。このとき、４つの命令のうち先頭の命令以外、すなわち第２番目、第３番目および第４番目の３つの命令は、命令長９６ビット幅の拡張命令パス１９１を介してＶＬＩＷコプロセッサ２００に供給される。なお、命令キャッシュ１０１は、特許請求の範囲に記載の命令フェッチ部の一例である。
【００２０】
命令セレクタ１０２は、命令キャッシュ１０１から供給された４つの命令の中から１つの命令を選択して出力するものである。この命令セレクタ１０２によって選択された命令は、ＲＩＳＣプロセッサ１００内の逐次実行部１０４、ＶＬＩＷコプロセッサ２００または通常コプロセッサ３００の何れかにおける処理対象となる。命令セレクタ１０２によって選択された命令が、外部のＶＬＩＷコプロセッサ２００または通常コプロセッサ３００へ供給される際には、命令長３２ビット幅の通常命令パス１９２が用いられる。
【００２１】
命令デコーダ１０３は、命令セレクタ１０２によって選択された命令をデコード（解読）するデコーダである。この命令デコーダ１０３のデコード結果によって、ＲＩＳＣプロセッサ１００の処理対象命令であることが判明すると、その命令は逐次実行部１０４に供給される。
【００２２】
逐次実行部１０４は、ＲＩＳＣプロセッサ１００における命令実行部である。この逐次実行部１０４は、命令デコーダ１０３によるデコード結果に従って、レジスタファイル１０５に保持されたオペランドデータを用いた処理を行う。そして、必要に応じてその実行結果をレジスタファイル１０５に書き戻す。また、この逐次実行部１０４は、命令デコーダ１０３によるデコード結果に従って、メインメモリ４００またはデータキャッシュ１０６からデータを読み出してレジスタファイル１０５にオペランドデータをロードする。また、この逐次実行部１０４は、命令デコーダ１０３によるデコード結果に従って、レジスタファイル１０５に保持されたデータをメインメモリ４００にストアする。その際、データキャッシュ１０６がコピーバック方式を採用する場合には、メインメモリ４００にライトスルーせずに、データキャッシュ１０６のみに保持される。この逐次実行部１０４では、１サイクルあたり１命令ずつ処理されることが原則である。ただし、パイプライン処理による命令間のオーバラップ実行についてはこの限りではなく、見かけ上、複数の命令が同時に処理されているように観測される場合がある。
【００２３】
レジスタファイル１０５は、逐次実行部１０４による命令実行に必要なオペランドデータを保持するゼネラルレジスタである。このレジスタファイル１０５に保持されたオペランドデータは、逐次実行部１０４によるリードまたはライトの対象となる。また、このレジスタファイル１０５は、メインメモリ４００からのロードまたはメインメモリ４００へのストアの対象となる。また、このレジスタファイル１０５は、他のコプロセッサのレジスタファイルとの間でレジスタ間転送を行う。このレジスタ間転送は、パス１９５により行われる。
【００２４】
データキャッシュ１０６は、メインメモリ４００から読み出されたデータを一時的に保持するキャッシュメモリである。このデータキャッシュ１０６は、コピーバック方式を採用する場合には、メインメモリ４００との間で見かけ上の不一致が生じることがあるが、論理的には内容の整合性（コンシステンシ）は維持されるように制御される。また、このデータキャッシュ１０６は、ＶＬＩＷコプロセッサ２００や通常コプロセッサ３００によっても利用され、それぞれのデータを一時的に保持する。データキャッシュ１０６からレジスタファイル１０５または通常コプロセッサ３００へのデータ供給は、１サイクルで１データ（３２ビット）ずつを想定する。一方、データキャッシュ１０６からＶＬＩＷコプロセッサ２００へのデータ供給は、１サイクルで４データ（１２８ビット）ずつを想定する。
【００２５】
ＶＬＩＷコプロセッサ２００は、ＲＩＳＣプロセッサ１００のコプロセッサとしてＶＬＩＷ制御による並列実行を行うものである。このＶＬＩＷコプロセッサ２００は、並列命令デコーダ２０３と、並列実行部２０４と、レジスタファイル２０５とを備えている。
【００２６】
並列命令デコーダ２０３は、ＲＩＳＣプロセッサ１００から供給された命令をデコードするデコーダである。ＲＩＳＣプロセッサ１００からは通常命令パス１９２の１命令分の信号に加えて、拡張命令パス１９１による３命令分の信号が供給され得る。すなわち、この並列命令デコーダ２０３には１サイクルあたり最大４命令分の信号が供給される。そして、この並列命令デコーダ２０３も１サイクルあたり最大４命令分をデコードする能力を有している。
【００２７】
並列実行部２０４は、ＶＬＩＷコプロセッサ２００における命令実行部である。この並列実行部２０４は、１サイクルあたり最大４命令分を同時に並列に実行する能力を有している。この並列実行部２０４は、後述するように、オペコードフィールドがＶＬＩＷコプロセッサ命令を示している場合に、同時発行命令数フィールドに示された情報に基づく並列度によりＶＬＩＷコプロセッサ命令を実行する。
【００２８】
レジスタファイル２０５は、並列実行部２０４による命令実行に必要なオペランドデータを保持するレジスタである。このレジスタファイル２０５には、パス１９６を介してデータキャッシュ１０６から１サイクル最大４命令（１２８ビット）が供給され得る。このレジスタファイル２０５に保持されたオペランドデータは、並列実行部２０４よるリードまたはライトの対象となる。また、このレジスタファイル２０５は、ＲＩＳＣプロセッサ１００または通常コプロセッサ３００のレジスタファイルとの間でレジスタ間転送を行う。このレジスタ間転送は、パス１９５により行われる。
【００２９】
通常コプロセッサ３００は、ＲＩＳＣプロセッサ１００のコプロセッサとして他の処理を行うものである。この通常コプロセッサ３００としては、例えば浮動小数点コプロセッサが想定される。この通常コプロセッサ３００は、命令デコーダ３０３およびレジスタファイル３０５等を備える。
【００３０】
命令デコーダ３０３は、ＲＩＳＣプロセッサ１００から供給された命令をデコードするデコーダである。ＲＩＳＣプロセッサ１００からは通常命令パス１９２を介して１命令分の信号が供給される。
【００３１】
レジスタファイル３０５は、通常コプロセッサ３００内の（図示しない）実行部による命令実行に必要なオペランドデータを保持するレジスタである。このレジスタファイル３０５には、パス１９６の一部であるパス１９７を介して、データキャッシュ１０６から１サイクル１命令（３２ビット）が供給され得る。
【００３２】
［命令発行機構の構成］
図２は、本発明の実施の形態におけるＲＩＳＣプロセッサ１００の命令発行機構の概要構成例を示す図である。このＲＩＳＣプロセッサ１００は、図１に示した命令キャッシュ１０１と命令デコーダ１０３の間に２つの命令プリデコーダ１７０を備えている。また、このＲＩＳＣプロセッサ１００は、プログラム実行のためのプログラムカウンタを管理するプログラムカウンタ管理部１１０を備えている。
【００３３】
命令プリデコーダ１７０は、命令キャッシュ１０１から同時に読み出された（フェッチされた）４つの命令のうち、第２番目と第４番目の命令における特定フィールド７０１をプリデコードするものである。第１番目と第３番目の命令においては特定フィールド７０１を設けてもよいが、それらをプリデコードする必要はない。ここで、プリデコードとは、命令デコーダ１０３による命令デコードよりも前に行われるデコードである。
【００３４】
プリデコードの対象となる特定フィールド７０１は、オペコードフィールドおよび同時発行命令数フィールドを含む。オペコードフィールドは命令種別を示すフィールドであり、その命令種別にはＶＬＩＷコプロセッサ命令が含まれる。ＶＬＩＷコプロセッサ命令は、その命令がＶＬＩＷコプロセッサ２００において処理される命令であることを示す。同時発行命令数フィールドは、ＶＬＩＷコプロセッサ命令の場合、ＶＬＩＷコプロセッサ２００に対して同時発行可能な命令数を示すフィールドである。この同時発行命令数フィールドに従って、プログラムカウンタ管理部１１０におけるプログラムカウンタ制御や、ＶＬＩＷコプロセッサ２００の並列実行部２０４における並列実行制御が行われる。命令プリデコーダ１７０によるプリデコード結果は、信号線１７９を介してプログラムカウンタ管理部１１０に供給される。
【００３５】
命令キャッシュ１０１から同時に読み出された４つの命令は、４つの命令スロット＃０乃至３として管理される。すなわち、第１番目の命令が命令スロット＃０、第２番目の命令が命令スロット＃１、第３番目の命令が命令スロット＃２、第４番目の命令が命令スロット＃３となる。これらの命令は命令スロットレジスタに一旦保持されるものとしてもよく、また、そのようなレジスタを設けることなく管理されてもよい。命令スロット＃１乃至３の３つの命令は拡張命令パス１９１を介してＶＬＩＷコプロセッサ２００に供給される。また、命令スロット＃０乃至３の４つの命令は命令セレクタ１０２によって何れか１つの命令が選択され、通常命令パス１９２を介してＲＩＳＣプロセッサ１００自身、ＶＬＩＷコプロセッサ２００または通常コプロセッサ３００の命令デコーダに供給される。
【００３６】
プログラムカウンタ管理部１１０は、命令プリデコーダ１７０によるプリデコード結果に従ってＲＩＳＣプロセッサ１００のプログラムカウンタの増分を制御するものである。オペコードフィールドがＶＬＩＷコプロセッサ命令以外の通常の命令を示している場合には、プログラムカウンタの増分は１命令分となる。オペコードフィールドがＶＬＩＷコプロセッサ命令を示している場合には、命令スロット＃１および＃３の同時発行命令数フィールドに従ってプログラムカウンタの増分値が決定される。このプログラムカウンタ管理部１１０によって管理されるプログラムカウンタの値は命令キャッシュ１０１に供給され、このプログラムカウンタが示すアドレスを先頭とする４つの命令の命令フェッチが行われる。
【００３７】
また、このプログラムカウンタ管理部１１０は、プリデコード結果に従って命令セレクタ１０２における選択制御を行う。プログラムカウンタの増分制御と同様に、オペコードフィールドがＶＬＩＷコプロセッサ命令以外の通常の命令を示している場合には、命令スロット＃０から順番に１つずつ命令を選択させる。オペコードフィールドがＶＬＩＷコプロセッサ命令を示している場合には、命令スロット＃１および＃３の同時発行命令数フィールドに従って何れかの命令を選択させる。
【００３８】
図３は、本発明の実施の形態におけるＲＩＳＣプロセッサ１００の命令発行機構の詳細構成例を示す図である。ここでは、ＲＩＳＣプロセッサ１００の命令パイプラインのうち命令キャッシュステージ、命令フェッチステージ、レジスタファイルステージを示している。命令キャッシュステージは、プログラムカウンタに従って命令キャッシュのメモリ部にアクセスするステージである。命令フェッチステージは、メモリ部から読み出された命令を選択するステージである。レジスタファイルステージは、フェッチされた命令をデコードして、オペランドデータを取得するステージである。命令キャッシュ１０１およびプログラムカウンタ管理部１１０は、命令キャッシュステージおよび命令フェッチステージに跨る。命令プリデコーダ１７０は命令フェッチステージに属する。一方、命令デコーダ１０３はレジスタファイルステージに属する。
【００３９】
なお、この構成例では、同時発行する命令グループの命令アドレスはソフトウェア開発時にアラインされていることを想定する。すなわち、２命令同時発行の際には２ワード境界、４命令同時発行の際には４ワード境界にアラインされているものとする。したがって、この構成例では、異なるサイクルにおいてフェッチされた命令同士を同時に発行することはできない。
【００４０】
プログラムカウンタ管理部１１０は、プログラムカウンタラッチ１１４、１１５、１２１乃至１２３および１３３と、加算器１１１乃至１１３と、プログラムカウンタマルチプレクサ１１６および１２４と、論理積ゲート１３２とを備えている。
【００４１】
加算器１１１は、現在のプログラムカウンタに１命令分の増分を表す値「１」を加算するものである。加算器１１２は、現在のプログラムカウンタに２命令分の増分を表す値「２」を加算するものである。加算器１１３は、現在のプログラムカウンタに４命令分の増分を表す値「４」を加算するものである。
【００４２】
プログラムカウンタラッチ１１４は、加算器１１１の出力または分岐先アドレスもしくは例外処理プログラムアドレス等を選択的に保持するラッチである。プログラムカウンタラッチ１１５は、加算器１１３の出力を保持するラッチである。プログラムカウンタラッチ１２１は、プログラムカウンタラッチ１１４の値を命令キャッシュステージのラッチとして保持するものである。プログラムカウンタラッチ１２２は、加算器１１２の出力を命令キャッシュステージのラッチとして保持するものである。プログラムカウンタラッチ１２３は、プログラムカウンタラッチ１１５の値を命令キャッシュステージのラッチとして保持するものである。プログラムカウンタラッチ１３３は、プログラムカウンタマルチプレクサ１２４の出力を命令フェッチステージのラッチとして保持するものである。
【００４３】
論理積ゲート１３２は、命令プリデコーダ１７０のプリデコード結果（信号線１７９）をｍａｓｋ信号によりマスクするものである。この論理積ゲート１３２の出力はプログラムカウンタマルチプレクサ１２４の選択信号入力に供給される。プログラムカウンタマルチプレクサ１２４は、プログラムカウンタラッチ１２１乃至１２３の何れかの値を選択信号入力に従って選択して、現在のプログラムカウンタの値として出力するものである。プログラムカウンタマルチプレクサ１１６は、命令種別に従ってプログラムカウンタラッチ１１４または１１５の何れかの出力を選択して、命令キャッシュ１０１に供給するものである。
【００４４】
命令キャッシュ１０１は、命令キャッシュタグメモリ１４１と、命令キャッシュウェイメモリ１４２および１４３と、バスインターフェース１４４と、マルチプレクサ１４５および１４６とを備えている。また、この命令キャッシュ１０１は、キャッシュタグラッチ１５１と、キャッシュデータラッチ１５２および１５３と、比較器１５４および１５５と、マルチプレクサ１６１乃至１６４とを備えている。
【００４５】
命令キャッシュタグメモリ１４１は、命令キャッシュ１０１のキャッシュタグであり、命令アドレスのタグ部分を保持するメモリである。この命令キャッシュタグメモリ１４１は、プログラムカウンタマルチプレクサ１１６から供給されたプログラムカウンタに従って該当するエントリを出力する。命令キャッシュウェイメモリ１４２および１４３は、メインメモリ４００からの命令を保持するメモリであり、ここでは２ウェイセットアソシアティブメモリを想定している。命令キャッシュウェイメモリ１４２および１４３がメインメモリ４００からの命令を記憶する際には、命令キャッシュタグメモリ１４１は対応するエントリにタグ部分を記憶する。
【００４６】
バスインターフェース１４４は、メモリバス４０９に接続してメインメモリ４００からの命令を取得するものである。このバスインターフェース１４４は、命令キャッシュミス時に命令キャッシュウェイメモリ１４２または１４３へ命令をフィルする際、その命令を命令パイプラインへ伝達するために用いられる。また、マルチプレクサ１４５はタグ部分を選択し、マルチプレクサ１４６は命令を選択するために用いられる。
【００４７】
キャッシュタグラッチ１５１は、マルチプレクサ１４５の出力を保持するラッチである。キャッシュデータラッチ１５２は、命令キャッシュウェイメモリ１４２の出力を保持するラッチである。キャッシュデータラッチ１５３は、マルチプレクサ１４６の出力を保持するラッチである。
【００４８】
比較器１５４および１５５は、命令キャッシュタグメモリ１４１に保持されたタグ部分とプログラムカウンタとを比較する比較器である。これら比較器１５４および１５５の何れかにおいて一致が検出されればキャッシュヒットの可能性があり、何れにおいても不一致であればキャッシュミスヒットとなる。
【００４９】
マルチプレクサ１６１および１６２は、それぞれキャッシュデータラッチ１５２および１５３に保持された４命令（１２８ビット）から１命令（３２ビット）を選択するものである。これらマルチプレクサ１６１および１６２は、図１および図２における命令セレクタ１０２に相当する。
【００５０】
マルチプレクサ１６３は、マルチプレクサ１６１または１６２の何れか一方の出力を、比較器１５４および１５５による比較結果に応じて選択するものである。マルチプレクサ１６４は、キャッシュデータラッチ１５２または１５３の出力の後方９６ビットの何れか一方を、比較器１５４および１５５による比較結果に応じて選択するものである。すなわち、これらマルチプレクサ１６３および１６４は、２ウェイ命令キャッシュの一方のウェイを選択するものである。マルチプレクサ１６３は１命令分（３２ビット）を選択し、マルチプレクサ１６４は３命令分（９６ビット）を選択する。
【００５１】
命令プリデコーダ１７０は、上述のとおり、４つの命令のうち第２番目と第４番目の命令における特定フィールド７０１をプリデコードする。この特定フィールド７０１は、マルチプレクサ１６４の出力に含まれる。命令プリデコーダ１７０は、プリデコード結果としてプログラムカウンタの増分値（ｓｅｌ＿ＰＣ）をプログラムカウンタ管理部１１０に信号線１７９を介して供給する。また、命令プリデコーダ１７０は、ＶＬＩＷコプロセッサ命令を検出した場合には、ＶＬＩＷコプロセッサ２００への命令発行を有効にする信号（ｅｎａｂｌｅ）を出力する。論理積ゲート１６６は、命令プリデコーダ１７０からのｅｎａｂｌｅ信号によってマルチプレクサ１６４の出力（３つの命令）をマスクするものである。すなわち、ＶＬＩＷコプロセッサ命令が検出された場合には３つの命令がそのまま出力され、ＶＬＩＷコプロセッサ命令以外が検出された場合には３つの命令はマスクされる。
【００５２】
ラッチ１８１は、フェッチされた４命令のうち後方３命令を保持するラッチである。ラッチ１８２は、フェッチされた４命令のうち先頭１命令を保持するラッチである。ラッチ１８３は、プログラムカウンタを保持するラッチである。ラッチ１８１の出力は拡張命令パス１９１に接続され、ラッチ１８２の出力は通常命令パス１９２に接続される。また、ラッチ１８２の出力は命令デコーダ１０３にも供給される。すなわち、上述の命令プリデコーダ１７０は、命令デコーダ１０３よりも手前に配置されることになる。
【００５３】
［命令フォーマット］
図４は、本発明の実施の形態における命令フォーマットの例を示す図である。図４（ａ）に示すように、この実施の形態では３２ビット長の命令を想定する。第３１ビット目から第２５ビット目の７ビットは、オペコードを示すフィールドである。ここでは、ＶＬＩＷコプロセッサ命令（コプロセッサ２命令）が指定された様子を示している。すなわち、ＶＬＩＷコプロセッサ２００はＲＩＳＣプロセッサ１００が元来接続可能な２番目のコプロセッサとして位置付けられ、そのためのコプロセッサ２命令をＶＬＩＷコプロセッサ命令として定義することで実行制御が行われる。なお、ＶＬＩＷコプロセッサ命令の本体（第２４ビット目から第０ビット目の２５ビット）は、原則としてコプロセッサ２、すなわちＶＬＩＷコプロセッサ２００のみによって解釈される。ただし、以下に示すように、この実施の形態では、第２４ビット目および第２３ビット目の２ビットも、ＲＩＳＣプロセッサ１００において参照される。また、ここでは、ＶＬＩＷコプロセッサ２００を２番目のコプロセッサとして定義したが、これは一例に過ぎない。
【００５４】
第２４ビット目および第２３ビット目の２ビットｆｍｔは、同時発行命令数を示すフィールドである。すなわち、この同時発行命令数フィールドが「００」であれば１命令の単独発行、「０１」であれば２命令同時発行、「１０」であれば４命令同時発行されることを示している。この同時発行命令数フィールドの値に基づいて、プログラムカウンタ管理部１１０におけるプログラムカウンタの増分制御が行われ、また、ＶＬＩＷコプロセッサ２００における実行の並列度が決定される。ＶＬＩＷコプロセッサ命令のみが同時発行される場合には同時発行命令数フィールドの値がＶＬＩＷコプロセッサ２００における実行の並列度と等しくなる。一方、ＲＩＳＣ命令と同時にＶＬＩＷコプロセッサ命令が発行される場合には同時発行命令数フィールドの値から「１」減じた値がＶＬＩＷコプロセッサ２００における実行の並列度になる。命令を同時発行する命令グループ中のＶＬＩＷコプロセッサ命令は、同時発行命令数フィールドにおいて同じ値を示す。ただし、後述するように、命令グループ中の一部の命令の値から他の命令の値を推定することができるため、必ずしもそれら全てを参照する必要はない。なお、以下の説明では簡単のために、１命令を示す「００」を「１」、２命令を示す「０１」を「２」、４命令を示す「１０」を「４」と表現することがある。
【００５５】
第２２ビット目の１ビットｃｆは条件フラグであり、先行比較命令の結果に応じて当該命令を実行するか否かを指定するためのものである。例えば、当該命令のｃｆビットが「１」の場合、先行比較命令の結果が「真」であったならば当該命令は実行され、先行命令の結果が「偽」であったならば当該命令は実行されずＮＯＰとなる。ｃｆビットが「０」の場合、当該命令は必ず実行される。第２１ビット目の１ビットｉｍｍは、第９ビット目から第５ビット目が即値であるか第２ソースオペランドｒｔであるかを示すものであり、ｉｍｍが「１」の場合、５ビットの即値であることを示す。
【００５６】
第２０ビット目および第１９ビット目の２ビットｏｐｃは、ＶＬＩＷコプロセッサ命令の演算種別の大分類を示すものである。例えば、ｏｐｃが「００」または「０１」であればＡＬＵ演算（ＡＬＵ＿Ｘ，Ｙ）を表す。また、ｏｐｃが「１０」であれば、ビットシフト演算（ＢＳＦ）、移動（ＭＯＶ）、パック演算（ＰＡＣＫ）などを表す。また、ｏｐｃが「１１」であれば、乗算（ＭＰＹ）、比較（ＣＭＰ＿Ｘ）を表す。例えば、このｏｐｃが「１１」の場合、図４（ａ）のように第４ビット目が命令小分類を示すことになる。
【００５７】
第１８ビット目から第１５ビット目の４ビットｆｕｎｃｔは、機能を示すものである。このｆｕｎｃｔの扱いは演算種別によって異なる。
【００５８】
第１４ビット目から第１０ビット目の５ビットは、第１ソースオペランドｒｓを示すものである。第９ビット目から第５ビット目の５ビットは、第２ソースオペランドｒｔまたは即値ｉｍｍを示すものである。第４ビット目から第０ビット目の５ビットは、デスティネーションオペランドｒｄを示すものである。
【００５９】
これらのビットフィールドのうち、命令プリデコーダ１７０によるプリデコード対象となるのは、第３１ビット目から第２３ビット目の９ビット分である。すなわち、命令プリデコーダ１７０は、各命令において共通する特定のビット位置に設けられるオペコードフィールドと同時発行命令数フィールドをプリデコード対象とする。これ以外のフィールドはＶＬＩＷコプロセッサ２００においてデコードされるフィールドであり、ＲＩＳＣプロセッサ１００は関与しないフィールドである。
【００６０】
［命令発行タイミング］
図５は、本発明の実施の形態における命令発行タイミングの例を示す図である。図５（ａ）は４命令同時発行の３パターンを示し、図５（ｂ）は２命令同時発行の３パターンを示し、図５（ｃ）は１命令発行の３パターンを示している。
【００６１】
４命令同時発行となるのは、まず、４つの命令スロット全てがＶＬＩＷコプロセッサ命令のパターンである。このとき、通常命令パス１９２により先頭の１命令が発行され、拡張命令パス１９１により残る３つの命令が発行される。これにより、ＶＬＩＷコプロセッサ２００において４命令が並列に実行される。
【００６２】
他に４命令同時発行となるのは、先頭スロットのみがＲＩＳＣ命令で後方３スロットがＶＬＩＷコプロセッサ命令のパターンである。このとき、拡張命令パス１９１によりＶＬＩＷコプロセッサ２００に後方３命令が発行される。そして、ＲＩＳＣプロセッサ１００において１つの命令が実行されるのと同時に、ＶＬＩＷコプロセッサ２００において残る３つの命令が並列に実行される。
【００６３】
４命令同時発行の変形パターンとして、先頭スロットのみがＲＩＳＣ−ＶＬＩＷ間転送命令で後方３スロットがＶＬＩＷコプロセッサ命令のパターンも考えられる。このとき、ＲＩＳＣプロセッサ１００においてＲＩＳＣ−ＶＬＩＷ間転送命令が実行されるのと同時に、ＶＬＩＷコプロセッサ２００において残る３つの命令が並列に実行される。
【００６４】
２命令同時発行となるのは、まず、前方の２つの命令スロットがＶＬＩＷコプロセッサ命令のパターンである。このとき、通常命令パス１９２により先頭の１命令が発行され、拡張命令パス１９１により後続の１命令が発行される。これにより、ＶＬＩＷコプロセッサ２００において２命令が並列に実行される。
【００６５】
他に２命令同時発行となるのは、先頭スロットがＲＩＳＣ命令で後続の１スロットがＶＬＩＷコプロセッサ命令のパターンである。このとき、拡張命令パス１９１によりＶＬＩＷコプロセッサ２００に後続の１命令が発行される。そして、ＲＩＳＣプロセッサ１００において１つの命令が実行されるのと同時に、ＶＬＩＷコプロセッサ２００において残る１つの命令が実行される。
【００６６】
２命令同時発行の変形パターンとして、先頭スロットがＲＩＳＣ−ＶＬＩＷ間転送命令で後続１スロットがＶＬＩＷコプロセッサ命令のパターンも考えられる。このとき、ＲＩＳＣプロセッサ１００においてＲＩＳＣ−ＶＬＩＷ間転送命令が実行されるのと同時に、ＶＬＩＷコプロセッサ２００において１つの命令が実行される。
【００６７】
１命令発行となるのは、まず、先頭の命令スロットが単独実行されるＶＬＩＷコプロセッサ命令のパターンである。このとき、通常命令パス１９２により先頭の１命令が発行される。これにより、ＶＬＩＷコプロセッサ２００において１命令が実行される。
【００６８】
他に１命令発行となるのは、先頭スロットがＲＩＳＣ命令であって、かつ、後続スロットの命令が同時に実行できないパターンである。この場合、後続の命令は次のサイクルにおいて実行対象となる。１命令発行の変形パターンとして、ＲＩＳＣ−ＶＬＩＷ間転送命令の場合も同様である。
【００６９】
これらから理解されるように、本発明の実施の形態においては、ＲＩＳＣ命令とＶＬＩＷ命令とを同時発行する場合には、ＲＩＳＣ命令は命令スロット＃０に配置されていることが前提となる。このような前提を設けることにより、命令プリデコーダ１７０の構成を簡略化することができる。
【００７０】
図６は、本発明の実施の形態における命令発行タイミングに応じた同時発行命令数フィールドの値の例を示す図である。
【００７１】
フェッチされた４命令を全て同時に発行する場合、図６（ａ）に示すように、命令スロット＃１および＃３の両者の同時発行命令数フィールドの値が「４」となる。この場合、命令スロット＃１の同時発行命令数フィールドを参照するだけで十分であり、命令スロット＃３の同時発行命令数フィールドは特に参照する必要はない。また、命令スロット＃０および＃２の両者の同時発行命令数フィールドの値も「４」となっていると推定されるが、これらについても特に参照する必要はない。
【００７２】
フェッチされた４命令のうち、前半２命令を同時に発行し、続いて後半２命令を同時に発行する場合、図６（ｂ）に示すように、命令スロット＃１および＃３の両者の同時発行命令数フィールドの値が「２」となる。命令スロット＃１の同時発行命令数フィールドは前半２命令が同時に発行されることを示し、命令スロット＃３の同時発行命令数フィールドは後半２命令が同時に発行されることを示している。なお、命令スロット＃０および＃２の両者の同時発行命令数フィールドの値も「２」となっていると推定されるが、これらについては特に参照する必要はない。
【００７３】
フェッチされた４命令のうち、前半２命令を同時に発行し、続く２命令を逐次に発行する場合、図６（ｃ）に示すように、命令スロット＃１の同時発行命令数フィールドの値は「２」となり、命令スロット＃３の同時発行命令数フィールドの値は「１」となる。命令スロット＃１の同時発行命令数フィールドは前半２命令が同時に発行されることを示し、命令スロット＃３の同時発行命令数フィールドは後半２命令が逐次発行されることを示している。なお、命令スロット＃０の同時発行命令数フィールドの値は「２」、命令スロット＃２の同時発行命令数フィールドの値は「１」となっていると推定されるが、これらについては特に参照する必要はない。
【００７４】
フェッチされた４命令のうち、前半２命令を逐次に発行し、後半２命令を同時に発行する場合、図６（ｄ）に示すように、命令スロット＃１の同時発行命令数フィールドの値は「１」となり、命令スロット＃３の同時発行命令数フィールドの値は「２」となる。命令スロット＃１の同時発行命令数フィールドは前半２命令が逐次発行されることを示し、命令スロット＃３の同時発行命令数フィールドは後半２命令が同時に発行されることを示している。なお、命令スロット＃０の同時発行命令数フィールドの値は「１」、命令スロット＃２の同時発行命令数フィールドの値は「２」となっていると推定されるが、これらについては特に参照する必要はない。
【００７５】
［プログラムカウンタの増分制御］
図７は、本発明の実施の形態におけるプログラムカウンタの増分制御の例を示す図である。
【００７６】
命令スロット＃１または＃３の同時発行命令数フィールドの値が「４」を示す場合、プログラムカウンタの増分値は４命令分である。これにより、次の４命令が同時にフェッチされることになる。なお、命令スロット＃１または＃３の同時発行命令数フィールドの何れか一方の値が「４」を示しているときには、他方も必ず「４」を示す。したがって、この場合、何れか一方のみを検知すれば十分である。
【００７７】
命令スロット＃１および＃３の同時発行命令数フィールドの値がともに「２」を示す場合、プログラムカウンタの増分値は、最初のサイクルで２命令分、次のサイクルで２命令分となる。これに続いて、次の４命令が同時にフェッチされることになる。
【００７８】
命令スロット＃１の同時発行命令数フィールドの値が「２」を示し、命令スロット＃３の同時発行命令数フィールドの値が「１」を示す場合、プログラムカウンタの増分値は、最初のサイクルで２命令分、次のサイクルで１命令分、次のサイクルで１命令分となる。これに続いて、次の４命令が同時にフェッチされることになる。
【００７９】
命令スロット＃１の同時発行命令数フィールドの値が「１」を示し、命令スロット＃３の同時発行命令数フィールドの値が「２」を示す場合、プログラムカウンタの増分値は、最初のサイクルで１命令分、次のサイクルで１命令分、次のサイクルで２命令分となる。これに続いて、次の４命令が同時にフェッチされることになる。
【００８０】
命令スロット＃１および＃３の同時発行命令数フィールドの値がともに「１」を示す場合、４つの命令が１命令ずつ発行されるため、プログラムカウンタの増分値は１命令分を４サイクル繰り返す。そして、これに続いて、次の４命令が同時にフェッチされることになる。
【００８１】
このように、本発明の第１の実施の形態によれば、命令プリデコーダ１７０によってＶＬＩＷコプロセッサ命令の同時発行命令数フィールドをプリデコードすることにより、プログラムカウンタの増分を容易に制御することができる。これにより、ＲＩＳＣ命令とＶＬＩＷコプロセッサ命令をサイクル単位で複数同時発行することができ、ＲＩＳＣプロセッサ１００とＶＬＩＷコプロセッサ２００を同時に実行させることができる。
【００８２】
＜２．第２の実施の形態＞
上述の第１の実施の形態では同時発行命令数フィールドをプリデコードすることによってプログラムカウンタの増分を制御する手法を示したが、以下の第２の実施の形態ではアセンブラマクロ命令を利用して同時発行命令数フィールドを設定する手法について説明する。なお、ハードウェア構成や機械語レベルの命令セットについては第１の実施の形態と共通である。また、このアセンブラマクロ命令を利用した機械語コード生成方法はあくまで一例にすぎない。例えば、純粋なＣプログラム等から、Ｃコンパイラ等により並列演算可能な部分を自動抽出してＶＬＩＷ命令に自動マッピングし、上記同時発行命令数フィールドを含んだ機械語コードを自動生成することも可能である。
【００８３】
［インラインアセンブラマクロ命令］
図８は、本発明の実施の形態におけるインラインアセンブラマクロ命令の例を示す図である。ここでは本発明の実施の形態に利用される代表的なインラインアセンブラマクロ命令を挙げており、これら以外にも様々なインラインアセンブラマクロ命令を想定し得る。
【００８４】
ＶｌｉｗＡｌｉｇｎ４インラインアセンブラマクロ命令は、４ワードアライメントのためのインラインアセンブラマクロである。このインラインアセンブラマクロにより、後続のアセンブラ命令が４ワード境界にアラインされる。その際、コンパイラは必要に応じてＮＯＰ（No OPeration）命令を挿入する。
【００８５】
ＶｌｉｗＡｌｉｇｎ２インラインアセンブラマクロ命令は、２ワードアライメントのためのインラインアセンブラマクロである。このインラインアセンブラマクロにより、後続のアセンブラ命令が２ワード境界にアラインされる。ＶｌｉｗＡｌｉｇｎ４インラインアセンブラマクロ命令と同様に、コンパイラは必要に応じてＮＯＰ命令を挿入する。
【００８６】
ＶｌｉｗＱ４インラインアセンブラマクロ命令は、ＶＬＩＷコプロセッサ命令を４命令同時に発行するためのＶＬＩＷコプロセッサ命令マクロである。このＶＬＩＷコプロセッサ命令マクロにより、指定された４つのＶＬＩＷコプロセッサ命令の同時発行命令数フィールドには４命令を示す「１０」が設定される。
【００８７】
ＶｌｉｗＱ３インラインアセンブラマクロ命令は、１つのＲＩＳＣ命令と３つのＶＬＩＷコプロセッサ命令の計４命令を同時に発行するためのＶＬＩＷコプロセッサ命令マクロである。このＶＬＩＷコプロセッサ命令マクロにより、指定された３つのＶＬＩＷコプロセッサ命令の同時発行命令数フィールドには４命令を示す「１０」が設定される。なお、ＲＩＳＣ命令に代えてＲＩＳＣ−ＶＬＩＷ間通信インラインアセンブラマクロ命令を同時に発行してもよい。
【００８８】
ＶｌｉｗＤ２インラインアセンブラマクロ命令は、ＶＬＩＷコプロセッサ命令を２命令同時に発行するためのＶＬＩＷコプロセッサ命令マクロである。このＶＬＩＷコプロセッサ命令マクロにより、指定された２つのＶＬＩＷコプロセッサ命令の同時発行命令数フィールドには２命令を示す「０１」が設定される。
【００８９】
ＶｌｉｗＤ１インラインアセンブラマクロ命令は、１つのＲＩＳＣ命令と１つのＶＬＩＷコプロセッサ命令の計２命令を同時に発行するためのＶＬＩＷコプロセッサ命令マクロである。このＶＬＩＷコプロセッサ命令マクロにより、指定された１つのＶＬＩＷコプロセッサ命令の同時発行命令数フィールドには２命令を示す「０１」が設定される。なお、ＲＩＳＣ命令に代えてＲＩＳＣ−ＶＬＩＷ間通信インラインアセンブラマクロ命令を同時に発行してもよい。
【００９０】
Ｖｌｉｗインラインアセンブラマクロ命令は、１つのＶＬＩＷコプロセッサ命令を単独で発行するためのＶＬＩＷコプロセッサ命令マクロである。このＶＬＩＷコプロセッサ命令マクロにより、指定された１つのＶＬＩＷコプロセッサ命令の同時発行命令数フィールドには１命令を示す「００」が設定される。
【００９１】
ＲＩＳＣ−ＶＬＩＷ間通信インラインアセンブラマクロ命令には、例えば、Ｖｌｉｗ＿ＬＤ、Ｖｌｉｗ＿ＳＴ、Ｖｌｉｗ＿ＭＴ、Ｖｌｉｗ＿ＭＦなどのインラインアセンブラマクロ命令がある。Ｖｌｉｗ＿ＬＤインラインアセンブラマクロ命令は、ＲＩＳＣのデータキャッシュからＶｌｉｗコプロセッサレジスタへデータを直接ロードする１命令に置き換えられる。Ｖｌｉｗ＿ＳＴインラインアセンブラマクロ命令は、ＲＩＳＣのデータキャッシュへＶｌｉｗコプロセッサレジスタからデータを直接ストアする１命令に置き換えられる。Ｖｌｉｗ＿ＭＴインラインアセンブラマクロ命令は、ＲＩＳＣのレジスタファイルからＶｌｉｗコプロセッサレジスタへデータを移動する１命令に置き換えられる。Ｖｌｉｗ＿ＭＦインラインアセンブラマクロ命令は、ＲＩＳＣのレジスタファイルへＶｌｉｗコプロセッサレジスタからデータを移動する１命令に置き換えられる。このＲＩＳＣ−ＶＬＩＷ間通信インラインアセンブラマクロ命令により、ＲＩＳＣプロセッサ１００とＶＬＩＷコプロセッサ２００との間でデータ通信が行われる。
【００９２】
＿＿ａｄｄｕ＿＿インラインアセンブラマクロ命令は、加算演算を指示する１つのＲＩＳＣ命令のインラインアセンブラマクロである。この＿＿ａｄｄｕ＿＿インラインアセンブラマクロ命令は、ＲＩＳＣ命令のインラインアセンブラマクロの一つとして例示したものであり、これ以外にも様々なＲＩＳＣ命令のインラインアセンブラマクロを想定し得る。
【００９３】
［インラインアセンブラマクロ命令と同時発行命令数］
図９は、本発明の実施の形態におけるインラインアセンブラマクロ命令と同時発行命令数の関係例を示す図である。なお、ここでは全ての命令スロット＃０乃至３の同時発行命令数を設定しているが、実際に参照されるのは命令スロット＃１および＃３である。
【００９４】
ＶｌｉｗＱ４インラインアセンブラマクロ命令の場合、命令スロット＃０乃至＃３の同時発行命令数には４命令を示す「１０」が設定される。また、ＲＩＳＣ命令とＶｌｉｗＱ３インラインアセンブラマクロ命令との組合せの場合、命令スロット＃１乃至＃３の同時発行命令数には４命令を示す「１０」が設定される。ただし、命令スロット＃０のＲＩＳＣ命令には該当するフィールドが存在しないため何も設定されない。
【００９５】
ＶｌｉｗＤ２インラインアセンブラマクロ命令の場合、命令スロット＃０および＃１の同時発行命令数には２命令を示す「０１」が設定される。また、ＲＩＳＣ命令とＶｌｉｗＤ１インラインアセンブラマクロ命令との組合せの場合、命令スロット＃１の同時発行命令数には２命令を示す「０１」が設定されるが、命令スロット＃０のＲＩＳＣ命令には該当するフィールドが存在しないため何も設定されない。これらの場合において、命令スロット＃２および＃３の同時発行命令数には、後続の命令に従って２命令を示す「０１」または１命令を示す「００」が設定される。すなわち、後続の命令がＶｌｉｗＤ２インラインアセンブラマクロ命令であれば２命令を示す「０１」が設定され、Ｖｌｉｗインラインアセンブラマクロ命令であれば１命令を示す「００」が設定される。
【００９６】
Ｖｌｉｗインラインアセンブラマクロ命令の場合、命令スロット＃０および＃１の同時発行命令数には１命令を示す「００」が設定される。命令スロット＃２および＃３の同時発行命令数には、後続の命令に従って２命令を示す「０１」または１命令を示す「００」が設定される。すなわち、後続の命令がＶｌｉｗＤ２インラインアセンブラマクロ命令であれば２命令を示す「０１」が設定され、Ｖｌｉｗインラインアセンブラマクロ命令であれば１命令を示す「００」が設定される。
【００９７】
［インラインアセンブラマクロ命令によるプログラム］
図１０は、本発明の実施の形態におけるインラインアセンブラマクロ命令によるプログラム例を示す図である。このプログラム例は、Ｃ言語の形式によりインラインアセンブラマクロ命令を記述したものである。冒頭のｉｎｃｌｕｄｅ文はインラインアセンブラマクロの定義ファイルを呼び出すためのものである。これに続いてサンプルコードが記述されている。ここでは、ｆｏｒ文による繰り返しループの本体について１行ずつ説明する。
【００９８】
ループ本体の第１行目はＶｌｉｗＡｌｉｇｎ４インラインアセンブラマクロ命令であり、これにより第２行目の命令が４ワード境界にアラインされる。第２行目はＲＩＳＣ命令（＿＿ａｄｄｕ＿＿インラインアセンブラマクロ命令）とＶｌｉｗＱ３インラインアセンブラマクロ命令である。ＶｌｉｗＱ３インラインアセンブラマクロ命令では、ＶＬＩＷコプロセッサ命令として、Ｖｌｉｗ＿ＳＵＢ命令、Ｖｌｉｗ＿ＡＤＤ命令、Ｖｌｉｗ＿ｎｏｐ命令の３命令が指定されている。これにより、１つのＲＩＳＣ命令と３つのＶＬＩＷコプロセッサ命令が同時に発行される。
【００９９】
第３行目はＶｌｉｗＱ４インラインアセンブラマクロ命令であり、ＶＬＩＷコプロセッサ命令として、Ｖｌｉｗ＿ＡＤＤ命令、Ｖｌｉｗ＿ＳＵＢ命令、Ｖｌｉｗ＿ｎｏｐ命令、Ｖｌｉｗ＿ｎｏｐ命令の４命令が指定されている。これにより、４つのＶＬＩＷコプロセッサ命令が同時に発行される。
【０１００】
第４行目はＶｌｉｗ＿ＳＴインラインアセンブラマクロ命令とＶｌｉｗＱ３インラインアセンブラマクロ命令である。ＶｌｉｗＱ３インラインアセンブラマクロ命令では、ＶＬＩＷコプロセッサ命令として、Ｖｌｉｗ＿ＳＵＢ命令、Ｖｌｉｗ＿ＡＤＤ命令、Ｖｌｉｗ＿ｎｏｐ命令の３命令が指定されている。これにより、１つのＲＩＳＣ−ＶＬＩＷ間通信命令と３つのＶＬＩＷコプロセッサ命令が同時に発行される。
【０１０１】
第５行目はＣ言語による加算処理であり、ＣコンパイラによってＲＩＳＣの加算命令に自動マッピングされることが予想され、この加算命令はＲＩＳＣプロセッサ１００内の逐次実行部１０４により実行される。
【０１０２】
第６および７行はＶｌｉｗインラインアセンブラマクロ命令である。これらＶｌｉｗインラインアセンブラマクロ命令はそれぞれ単独でＶＬＩＷコプロセッサ２００に発行される。
【０１０３】
第８行目はＶｌｉｗＡｌｉｇｎ２インラインアセンブラマクロ命令であり、これにより第９行目の命令が２ワード境界にアラインされる。第９行目はＶｌｉｗＤ２インラインアセンブラマクロ命令であり、ＶＬＩＷコプロセッサ命令として、Ｖｌｉｗ＿ｖｓｒａｍｉ命令およびＶｌｉｗ＿ＭＵＬ命令の２命令が指定されている。これにより、２つのＶＬＩＷコプロセッサ命令が同時に発行される。
【０１０４】
第１０行目はＲＩＳＣ命令（＿＿ａｄｄｕ＿＿インラインアセンブラマクロ命令）とＶｌｉｗＤ１インラインアセンブラマクロ命令である。ＶｌｉｗＤ１インラインアセンブラマクロ命令では、ＶＬＩＷコプロセッサ命令として、Ｖｌｉｗ＿ＭＵＬ命令が指定されている。これにより、１つのＲＩＳＣ命令と１つのＶＬＩＷコプロセッサ命令が同時に発行される。
【０１０５】
このように、本発明の第２の実施の形態によれば、インラインアセンブラマクロ命令を用いて命令の配置（アライン）や同時発行される命令群を明示することにより、ＶＬＩＷコプロセッサ命令の同時発行命令数フィールドの値の設定を容易にすることができる。
【０１０６】
＜３．まとめ＞
以上説明したように、本発明の実施の形態によれば、命令プリデコーダ１７０におけるプリデコードにより、プログラムカウンタの増分を容易に制御することができる。これにより、ＲＩＳＣ命令とＶＬＩＷコプロセッサ命令をサイクル単位で複数同時発行することができるため、ＲＩＳＣプロセッサ１００とＶＬＩＷコプロセッサ２００のそれぞれの得意な処理を同時に実行させることができる。例えば、ＶＬＩＷコプロセッサ２００において並列データ演算をしながら、ＲＩＳＣプロセッサ１００において次のＶＬＩＷ演算に必要なデータのメモリアドレス（ポインタ）の計算をすることができる。また、ＲＩＳＣに転送済のＶＬＩＷ演算結果を加工もしくは判断し、または、全く別の処理を行うことができる。
【０１０７】
さらに、ＲＩＳＣ−ＶＬＩＷ間通信命令とＶＬＩＷコプロセッサ命令とをサイクル単位で複数同時発行することができる。そのため、当該サイクルのＶＬＩＷコプロセッサ演算と、後続のＶＬＩＷコプロセッサ演算が必要とするデータの供給（ＲＩＳＣのデータキャッシュやＲＩＳＣのレジスタファイルから）とを、同時に実行することができる。これにより、ＶＬＩＷコプロセッサはＲＩＳＣからのデータの供給を待つことなく演算を毎サイクル連続して実行し続け得る。
【０１０８】
ただし、実際には、１個のＲＩＳＣ命令（またはＲＩＳＣ−ＶＬＩＷ間通信命令）と最大３個のＶＬＩＷ命令という比率では、ＶＬＩＷコプロセッサを「全く止めることなく」動かすことは容易ではない。その意味では、本発明の発展形として、ＲＩＳＣ命令Ｎ個とＶＬＩＷ命令Ｎ個の同時発行というのもさらに有効な方法となり得る。
【０１０９】
また、本発明の実施の形態では、同時に発行可能なＶＬＩＷコプロセッサ命令の数が１命令、２命令または４命令の可変長であるため、固定長ＶＬＩＷプロセッサよりも空きスロットを削減することができ、命令密度を向上させることができる。
【０１１０】
また、本発明の実施の形態によれば、同時発行命令数フィールドをＶＬＩＷコプロセッサ命令の本体において指定することにより、ＲＩＳＣ命令のみを使用した過去のソフトウェア資産との互換性を維持することができる。
【０１１１】
また、本発明の実施の形態によれば、同時発行命令数フィールドを利用することによりプログラムカウンタの増分制御が簡素化されるため、命令プリデコーダ１７０を新たに設けた状態において動作周波数の低下を招くことがなく、高速動作が可能である。
【０１１２】
なお、本発明の実施の形態は本発明を具現化するための一例を示したものであり、本発明の実施の形態において明示したように、本発明の実施の形態における事項と、特許請求の範囲における発明特定事項とはそれぞれ対応関係を有する。同様に、特許請求の範囲における発明特定事項と、これと同一名称を付した本発明の実施の形態における事項とはそれぞれ対応関係を有する。ただし、本発明は実施の形態に限定されるものではなく、本発明の要旨を逸脱しない範囲において実施の形態に種々の変形を施すことにより具現化することができる。
【０１１３】
また、本発明の実施の形態において説明した処理手順は、これら一連の手順を有する方法として捉えてもよく、また、これら一連の手順をコンピュータに実行させるためのプログラム乃至そのプログラムを記憶する記録媒体として捉えてもよい。この記録媒体として、例えば、ＣＤ（Compact Disc）、ＭＤ（MiniDisc）、ＤＶＤ（Digital Versatile Disk）、メモリカード、ブルーレイディスク（Blu-ray Disc（登録商標））等を用いることができる。
【符号の説明】
【０１１４】
１００  ＲＩＳＣプロセッサ
１０１  命令キャッシュ
１０２  命令セレクタ
１０３  命令デコーダ
１０４  逐次実行部
１０５  レジスタファイル
１０６  データキャッシュ
１１０  プログラムカウンタ管理部
１４１  命令キャッシュタグメモリ
１４２、１４３  命令キャッシュウェイメモリ
１７０  命令プリデコーダ
１７９  信号線（ｓｅｌ＿ｐｃ）
１９１  拡張命令パス
１９２  通常命令パス
２００  ＶＬＩＷコプロセッサ
２０３  並列命令デコーダ
２０４  並列実行部
２０５  レジスタファイル
３００  通常コプロセッサ
３０３  命令デコーダ
３０５  レジスタファイル
４００  メインメモリ
７０１  特定フィールド
【図１】
0005565228.tif 000002
【図２】
0005565228.tif 000003
【図３】
0005565228.tif 000004
【図４】
0005565228.tif 000005
【図５】
0005565228.tif 000006
【図６】
0005565228.tif 000007
【図７】
0005565228.tif 000008
【図８】
0005565228.tif 000009
【図９】
0005565228.tif 000010
【図１０】
0005565228.tif 000011