(57)【要約】データ処理回路は、複数の機能ユニット（２０）を有する実行回路（１８）を備える。命令デコーダ（１７）は、第１および第２の命令モードで作動可能である。第１の命令モードにおいて、命令は各機能ユニット（２０）をそれぞれ制御するためのフィールドを有し、第２の命令モードにおいては、命令は単一の機能ユニットを制御する。モード制御回路（１２）は、命令モードの選択を制御する。一実施の形態では、命令デコーダは、実行回路（１８）によって実行される処理の選択、およびレジスタセット（１９）からの宛先レジスタの選択について、タイムステーショナリデコーディングを利用する。タイムステーショナリプロセッサに対しては、コマンドを含む命令によって機能ユニットに指示するよりも、モード切換の方が効率的に命令時間を減少させることができる。命令をスケジューリングするときは、処理選択と宛先レジスタ選択が命令モード切換の前後に行われるような処理については、制約を課すことが望ましい。一実施の形態では、このような処理を避けている。別の実施の形態では、モード切換の前後に処理選択と宛先レジスタの選択が行われるものについて、選択された処理をスケジューリングする。ジャンプを含む命令の順番となった場合、モード制御回路は、ジャンプコマンドの実行によって得られた情報に応じて、順次の命令の命令モードをセットする。
2010503107.tif 000002
【特許請求の範囲】
【請求項１】
複数の機能ユニット（２０）を有する実行回路（１８）と、
前記実行ユニット（１８）に接続され、連続して実行される命令に応じて前記実行ユニット（１８）を制御する命令デコーダ（１７）と、
前記命令デコーダ（１７）に接続されるモード制御回路（１２）とを備え、
前記命令デコーダ（１７）は、少なくとも第１および第２の命令モードで動作可能で、前記第１の命令モードで実行される命令は、各フィールドで前記機能ユニット（２０）のそれぞれを制御する命令を含み、前記第２の命令モードで実行される命令は、それぞれ、前記複数の機能ユニット（２０）のサブセットを制御する１つ以上のフィールドのみを含み、
前記モード制御回路（１２）は、ジャンプコマンドの実行によって得られた命令モード選択情報に応じた命令における、前記ジャンプコマンドに続いて実行される複数の命令のための命令モードの選択制御を行うように構成されることを特徴とするデータ処理回路。
【請求項２】
請求項１に記載のデータ処理回路において、
前記第１および第２の命令モードで実行される前記命令は、互いに異なる長さを有することを特徴とするデータ処理回路。
【請求項３】
請求項２に記載のデータ処理回路において、
プログラムカウンタレジスタ（４０）と、前記プログラムカウンタレジスタ（４０）とメモリアドレスポートとの間に接続された命令モード依存シフト回路（４００）とを有するシーケンサ（１０）をさらに備え、
前記命令モード依存シフト回路（４００）は、前記モード制御回路（１２）に接続されるシフト制御入力部を有することを特徴とするデータ処理回路。
【請求項４】
請求項２に記載のデータ処理回路において、
プログラムカウンタレジスタ（４０）と、命令モード依存プログラムカウンタインクリメント回路（４２）とを有するシーケンサ（１０）をさらに備え、
前記命令モード依存プログラムカウンタインクリメント回路（４２）は、前記モード制御回路（１２）に接続されるインクリメントサイズ制御入力部を有することを特徴とするデータ処理回路。
【請求項５】
請求項２に記載のデータ処理回路において、
前記命令デコーダ（１７）は、少なくとも第３の命令モードで動作可能であり、
前記第３の命令モードで実行される命令は、前記第２の命令モードで実行される命令の長さと同じであり、
前記命令デコーダ（１７）は、前記第２および第３の命令モードによる命令によってそれぞれ、前記機能ユニット（２０）の互いに異なる部分を制御し、および／またはレジスタ（１９）の互いに異なる範囲を選択するよう構成されていることを特徴とするデータ処理回路。
【請求項６】
請求項１に記載のデータ処理回路において、
前記機能ユニット（２０）に接続されるレジスタセット（１９）をさらに備え、
前記命令デコーダ（１７）は、処理選択のためのフィールドおよび処理結果の書き込み用の宛先レジスタの選択のためのフィールドについて、タイムステーショナリデコーディングを利用するよう構成されており、
前記第１および第２のモードにおける命令は、それぞれ異なる数の、宛先レジスタを選択するためのフィールドを有することを特徴とするデータ処理回路。
【請求項７】
複数の処理を並列に実行可能な複数の機能ユニット（２０）を用いたデータ処理方法であって、
複数の命令の１つからジャンプコマンドを実行し、
前記ジャンプコマンドの実行によって得られた情報による制御の下、第１または第２の命令モードを選択し、
前記ジャンプコマンドの実行に続く命令に、前記選択された命令モードを適用し、
前記複数の機能ユニット（２０）の各ユニットが、第１の命令モードが適用されるときに実行される同じ命令のそれぞれのフィールドを利用するように、前記複数の機能ユニット（２０）を制御し、
前記第２の命令モードが適用されるときに実行される命令から前記複数の機能ユニットのサブセットのみを制御することを特徴とするデータ処理方法。
【請求項８】
複数の異なる命令モードにおいて動作可能なプログラマブルデータプロセッサの処理スケジューリング方法であって、
処理を定義する入力プログラムを受け取り、
前記入力プログラムの各部分に命令モードを割り当て、
前記プログラムに定義された処理のうちの１つ以上の処理グループから命令を組立て、前記命令モードのうちの第１のモードが割り当てられた前記入力プログラムの部分に定義された前記処理の少なくとも一部のためのグループ毎の命令の数を、前記命令モードのうちの第２のモードが割り当てられた前記入力プログラムの一部に定義された処理を含む命令よりも多くし、
ジャンプコマンドを、モード変更コマンドが前記各部分の間の境界で実行されるように配置されたターゲットプログラムの命令の中に挿入し、
前記ジャンプが実行されるときに前記割り当てられたモードの選択を制御するように、前記割り当てられた命令モードに依存する情報を前記ジャンプコマンドに含めることを特徴とする処理スケジューリング方法。
【請求項９】
レジスタセット（１９）と、
前記レジスタセットと接続される実行回路（１８）と、
前記実行回路（１８）に接続され、前記実行回路（１８）によって実行される処理の選択、および前記実行ユニット（１８）によって結果が生成されると、前記レジスタセット（１９）からの前記処理結果の書き込み用の宛先レジスタの選択について、タイムステーショナリデコーディングを利用するよう構成された命令デコーダ（１７）と、
前記命令デコーダ（１７）に接続されるモード制御回路（１２）とを備え、
前記命令デコーダ（１７）は、少なくとも第１および第２の命令モードで動作可能であり、前記第１および第２の命令モードにおいて実行される命令は、互いに異なる数のアドレッシング可能な宛先レジスタを指定し、
前記モード制御回路（１２）は、プログラム実行中に、命令に応答して前記命令モード間での切換えを制御するよう構成されていることを特徴とするデータ処理回路。
【請求項１０】
請求項９に記載のデータ処理回路において、
前記第１および第２の命令モード間での切換を行うための切換命令を含むプログラムがプログラミングされた命令メモリ（１４）を備え、
各切換命令は、前記切換命令が実行される前および後にそれぞれ実行されるプログラムの第１および第２の部分の間で、境界を定義し、
前記プログラムの第１の部分には、対応する前記プログラムの第２の部分からの命令によって選択される宛先レジスタに結果が書き込まれる処理を選択する命令は含まれないことを特徴とするデータ処理回路。
【請求項１１】
請求項９に記載のデータ処理回路において、
前記第１の命令モードにおいて実行され、処理の選択のための第１のフィールドを含む第１の命令と、前記第２の命令モードにおいて実行され、前記第１の命令によって選択された前記処理の結果を、その結果の生成の際に書き込むための宛先レジスタを選択するための第２のフィールドを含む第２の命令とを有するプログラムがプログラミングされた命令メモリ（１４）を備えることを特徴とするデータ処理回路。
【請求項１２】
請求項１１に記載のデータ処理回路において、
前記モード制御回路は、前記プログラムのうちジャンプコマンドに続く命令について、前記ジャンプコマンドの実行によって得られた命令モード選択情報に応じて、前記命令モードの間での選択を制御するよう構成され、
前記第１および第２の命令は、それぞれ、前記プログラムにおいて前記ジャンプコマンドが実行されるポイントの前および後に、配置されることを特徴とするデータ処理回路。
【請求項１３】
請求項１２に記載のデータ処理回路において、
前記プログラムにおいて前記ジャンプコマンドのターゲットは、前記ジャンプコマンドを介して前記プログラムフローに排他的に到達できることを特徴とするデータ処理回路。
【請求項１４】
請求項９に記載のデータ処理回路において、
前記実行ユニットは、複数の機能ユニット（２０）を備え、
前記命令デコーダ（１７）は、前記第１の命令モードで実行される各命令から、各機能ユニットからの結果を前記結果の生成の際に書き込むための宛先レジスタアドレスを選択するための第１のフィールドを抽出するように構成され、
前記命令デコーダ（１７）は、前記第２の命令モードで実行される各命令から、前記各機能ユニットのサブセットのみからの結果を前記結果の生成の際に書き込むための宛先レジスタアドレスを選択するための１つ以上の第３のフィールドを抽出するように構成されることを特徴とするデータ処理回路。
【請求項１５】
請求項９に記載のデータ処理回路において、
前記命令デコーダ（１７）は、前記第１および第２の命令モードの命令から、それぞれ宛先レジスタアドレスを選択するための第１および第２のフィールドを抽出するように構成され、
前記第１および第２のフィールドは、それぞれアドレッシング可能レジスタの第１および第２の範囲をセットし、
前記第１の範囲は、前記第２の範囲に含まれないレジスタを含むことを特徴とするデータ処理回路。
【請求項１６】
複数の異なる命令モードにおいてタイムステーショナリ命令の制御の下でプログラムを実行するように動作するプログラマブルデータプロセッサのスケジューリング処理方法であって、
各命令モードは、処理の選択および結果レジスタの選択について命令のフィールドの割り当てをそれぞれ定義し、
前記方法は、
処理を定義する入力プログラムを受け取り、
前記入力プログラムの各部分に命令モードを割り当て、
前記入力プログラムから生じる前記処理について結果レジスタを割り当て、
選択された各部分からの処理が命令位置の各範囲に割り当てられるという条件で、前記入力プログラムから生じる処理を、ターゲットプログラムにおける連続した命令位置に割り当て、
異なる部分の各範囲は互いに重複することなく、
前記処理を選択するための処理選択コードの各々を、各処理の第１のフィールドに、前記処理に割り当てられた位置で挿入し、
モード変更コマンドを、前記ターゲットプログラムの命令に、前記モード変更コマンドが前記各範囲の間の境界で実行されるような配置で挿入し、
結果レジスタアドレス選択コードを、前記ターゲットプログラムの命令の第２のフィールドに、前記対応する選択コードが挿入される命令に対してオフセットして挿入し、
前記オフセットは、前記対応する選択コードによって選択される前記処理において結果を生成するために必要な命令サイクルの数に対応することを特徴とする処理スケジューリング方法。
【請求項１７】
請求項１６に記載の処理スケジューリング方法において、
前記データプロセッサは、各モード変更コマンドの実行と、前記モード変更の発生との間にそれぞれレイテンシインターバルを定義し、
前記方法は、前記結果レジスタアドレス選択コードの少なくとも１つを前記レイテンシインターバルの少なくとも１つに挿入し、
前記命令における前記レジスタアドレス選択コードは、前記レイテンシインターバル内に、前記モード変更コマンドによって発生する前記モード変更の前に適用される命令モードに対応して挿入されることを特徴とする処理スケジューリング方法。
【請求項１８】
請求項１７に記載の処理スケジューリング方法において、
前記モード変更コマンドは、ジャンプの発生後に実行される命令に適用される前記命令モードを示す情報を含むジャンプ命令であり、
前記方法は、
命令位置への処理の割り当てに際して、前記プログラムによって利用される結果を生成する処理の処理選択コードを全て、前記境界前の少なくとも所定範囲に挿入するという更なる制約条件を課し、
前記所定の範囲は、前記対応する選択コードによって選択された前記処理で結果を生成するために必要な命令サイクルの数に等しい値であることを特徴とする処理スケジューリング方法。
【請求項１９】
請求項１６に記載の処理スケジューリング方法において、
前記処理の結果を生成するために必要な前記命令サイクルの数よりも小さい前記境界からの範囲に前記命令に処理選択コードを挿入する処理を決定し、
前記処理の結果レジスタアドレス選択コードを、前記選択コードから前記境界を跨いで適用される前記命令モードに応じて、前記第２のフィールドの前記範囲のうちの次の１つに挿入することを特徴とする処理スケジューリング方法。
【請求項２０】
請求項１９に記載の処理スケジューリング方法において、
前記モード変更コマンドは、ジャンプの発生後に実行される命令に適用される命令モードを示す情報を含むジャンプコマンドを含み、
操作選択コードが、前記命令サイクルの数よりも小さい前記境界からの範囲で前記命令に挿入される前記処理の決定に際して、前記ジャンプコマンドのターゲットは、前記ジャンプコマンドによって選択的に前記プログラムフローに到達できるかを判断する処理スケジューリング方法。
【請求項２１】
請求項１９に記載の処理スケジューリング方法において、
前記モード変更コマンドは、サブルーチンコマンドからのリターンを含み、
前記命令サイクルの数よりも小さい前記境界からの距離で、前記処理選択コードを前記命令に挿入する前記処理は、サブルーチン呼出しプログラム部分で使用される前記サブルーチンの結果を生成する処理であり、
前記結果レジスタアドレス選択コードは、前記呼出しプログラム部分に挿入されることを特徴とする処理スケジューリング方法。
【請求項２２】
請求項１６に記載の処理スケジューリング方法において、
前記ターゲットプログラムを前記データプロセッサの命令メモリにプログラミングすることを特徴とする処理スケジューリング方法。
【請求項２３】
請求項１６に記載の方法を実行するよう構成されていることを特徴とするコンピュータ。
【請求項２４】
コンピュータプログラム製品であって、
プログラム可能なコンピュータによって実行されるときに、前記プログラム可能なコンピュータに請求項１６に記載の方法を実行させる命令を含むことを特徴とするコンピュータプログラム製品。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ処理回路およびデータ処理方法に関する。
【背景技術】
【０００２】
米国特許出願２００２０４２９０９号は、ＶＬＩＷデータプロセッサの複数の機能ユニットに対する異なる命令セットの異なるプログラム部分を実行するリターゲッタブルコンパイラの使用を開示している。プログラムは、実行すべき処理を示す機械命令にコンパイルされる。実行すべき処理は、例えば処理用のオペランドがロードされるソースレジスタ、および処理結果が保存される宛先レジスタの加算、シフト等である。
【０００３】
機能ユニットに対して異なるレベルの制御を行う異なる命令セットが使用される。第１の命令セットは、複数の機能ユニットによって、独立した並列処理の制御を許可する。第２の命令セットは、各命令によって単一の機能ユニットのみを処理許可する。第１と第２の命令セットを比較すると、第１の命令セットには、通常、タスクが第１の命令モードによる命令にコード化されると、タスクの実行にかかる時間が短くなるという利点がある。一方、第２の命令セットには、通常、タスクを実行するためのプログラムを保存するのに必要なメモリの容量が小さいという利点がある。
【０００４】
コンパイラは、異なる命令セットに対応するプログラムとハードウェア命令を有している。コンパイラは、例えば、内側ループを第１の命令セットに、内側ループの外側のプログラム部分を第２の命令セットに利用して、異なるプログラム部分の命令セットを選択する。次に、コンパイラは、選択した命令セットからプログラム部分を機械命令のプログラムにコンパイルする。
【０００５】
プログラムを実行するのに使用されるデータ処理回路は、複数の機能ユニットに対する異なる命令セットにそれぞれ対応する、異なる命令モードの間でスイッチングが可能に構成されている。ある命令モードで作動するとき、データ処理回路は、データ処理回路に入力された命令を、現在の命令モードに対応する命令セットからの命令として解釈する。米国特許出願２００２０４２９０９号は、命令モード間でのスイッチングがどのように行われるかを考慮していないが、ＵＳ５，９３３，６４２には、この目的のための再構成命令を利用する点が開示されている。
【０００６】
このプログラム実行方法では、実行速度とプログラムサイズの組合せの最適な組み合わせが制限されてしまう。その上、再構成命令を特別に利用することで、命令セットが拡張されてしまう。
【発明の概要】
【発明が解決しようとする課題】
【０００７】
本発明の一態様における目的は、特別な命令を利用することなく、命令モードのスイッチングを行えるようにすることである。
【０００８】
別の態様における目的は、実行速度とプログラムサイズの最適な組合せを改良することである。
【０００９】
さらなる目的は、実行速度とプログラムサイズの最適な組合せを改良できるデータ処理回路を提供することである。
【課題を解決するための手段】
【００１０】
第１の態様によると、請求項１に記載のデータ処理回路が提供される。命令におけるジャンプコマンドは、ここでは、異なる命令モードの間の切換えを行うために利用され、命令は多数のあるいは少数の機能ユニットを制御する。したがって、このために専用のモード切換命令は必要ない。モードについての情報を、ジャンプターゲットアドレスに、例えばそのアドレスの最上位ビットの数としてセットしてもよい。ジャンプターゲットアドレスは、そのままジャンプ命令において特定してもよい。別の実施の形態では、ジャンプターゲットアドレスを、ジャンプコマンドのオペランドレジスタから提供してもよい。このオペランドレジスタからの最上位ビットの数は、後続する命令のモード選択のために利用される。
【００１１】
更なる実施の形態において、異なるモードの命令は、互いに異なる長さを有する。これは、命令アドレスの異なるサイズの部分は、異なる命令モードにおいて、命令アドレスの最小の命令インクリメントより低い分解能（resolution）を備えることを意味する。一実施の形態では、プログラムカウンタ値は、モード依存シフトティングによって、例えば４バイト命令モードでは２ビットごとに、２バイト命令モードでは１ビットごとに、命令メモリアドレスに変換される。したがって、モード非依存プログラムカウンタインクリメントを使用でき、余分なアドレス分解能から命令アドレスビットがなくなることがない。別の実施の形態では、命令モード依存インクリメントが使用される。更なる実施の形態では、短い命令の命令モードにおいて、各プログラムカウンタインクリメントの後に、メモリからの新たなフェッチが必要か、あるいは、新たにアドレッシングされた命令が先の命令とともにより大きなフェッチワードにフェッチされたかを判断するために、コンパレータを利用してもよい。
【００１２】
別の態様では、異なる命令モードを、処理選択および結果レジスタアドレス選択にタイムステーショナリデコーディングを利用するデータプロセッサに使用する。タイムステーショナリ命令エンコーディングとデコーディング自体は、知られている。これは、各命令が処理の選択とその処理についての結果レジスタアドレスの選択の両方を含む通常のデータステーショナリエンコーディング／デコーディングとは対照的である。これは、処理が結果を生成するまで、結果レジスタアドレスを、例えばパイプラインに保存しておく必要がある。これに対し、タイムステーショナリ命令エンコーディング／デコーディングは、処理の選択と、その処理についての結果のアドレッシングが、処理が開始されるとき、およびデータプロセッサがその処理の結果を生成したときにそれぞれ実行される異なる命令に含まれる。したがって、タイムステーショナリ命令エンコーディングでは、各命令は、処理選択と結果レジスタアドレッシング用の複数のフィールドを含むが、これらは別々の処理に関するものである。結果レジスタアドレッシング用のフィールドは、先に実行された命令によって選択された処理の結果として、命令の実行時に機能ユニットから利用可能な結果用に利用される。
【００１３】
タイムステーショナリ命令デコーディングを使用するデータプロセッサでは、異なる命令モードを利用すると、プログラムサイズを圧縮する他の方法に比べて効率的であるという利点がある。データステーショナリＶＬＩＷプロセッサに使用される従来の圧縮法は、例えば、コマンドが命令に含まれる機能ユニットについてのインディケーションを使用する。インディケーションの数はタイムステーショナリプロセッサでは著しく増加する。異なる命令モード間での切り換えを行うことで、各命令においてアドレッシング可能なレジスタの数を示す必要がないため、このオーバヘッドを低下することができる。したがって、例えば、第１の命令モードにおいて、複数の機能ユニットの結果用の結果レジスタアドレスを、各命令に含め、第２の命令モードでは、単一の結果レジスタアドレスを含めることができる。
【００１４】
一実施の形態では、例えば、ジャンプ命令がこのために利用される場合には、モード切換コマンドがレイテンシを持つようにしてもよい。この場合、モード切換コマンドの実行開始と実際のモード切換の間に遅れがある。この遅れを、モード切換コマンドの後ろで追加結果レジスタアドレスについての命令を追加するために利用してもよい。一実施の形態では、モード切換の直前に処理が選択され、モード切換の後にデータプロセッサがその結果を生成することを避けている。したがって、例えば、同数の処理と結果レジスタ選択を提供する命令を利用して、処理選択に用いたのと同じ命令モードにおける命令の制御の下で、１つ以上の結果の書き込みが行われる。これにより、プログラム配列が簡素化される。別の実施の形態では、処理が選択される第１の命令と、結果書き込みのためのレジスタをアドレッシングする第２の命令について、異なる命令モードを使用する。これにより、命令モード間で切換付近の処理スケジューリングについての制約が小さくなるので、データプロセッサをより効率的に利用することができる。例えば、命令モード間での切換のためにジャンプ命令を利用し、ジャンプによってのみジャンプターゲットに到達できるような場合に、適用してもよい。この場合、結果のソースにあいまい性がなくなる。しかし、より複雑な実施の形態では、ターゲットに対して異なるパスが存在し、それぞれのパスについて結果を提供するために処理が選択される場合に適用してもよい。別の実施の形態では、プログラムにおいて異なるポイントから呼出し可能なサブルーチン（一連の命令のサブプログラム）の結果を書き込むために使用してもよい。したがって、サブルーチンからのすべてのリターンについて、結果用に所定のレジスタをリザーブしておく必要はない。
【００１５】
別の態様では、このタイプのデータプロセッサ用の命令をスケジューリングするスケジューリング方法を提供する。シングルモードプロセッサとデータステーショナリプロセッサのスケジューリング自体は、知られている。通常、プログラムは最初に、高水準言語プログラムからプロセッサの機械処理にコンパイルされる。スケジューリング中、プロセッサ効率を最適化するために、複数の処理を(並列に）実行するためのシーケンスが選択される。そして、処理を実行するための命令は、スケジューリングの結果に従って、命令に配置される処理選択コードとともに、命令メモリにプログラミングされる（プログラミングは、例えば、所望の命令を生成するためにマスクセットを利用した製造、または不揮発性メモリや揮発性メモリへのプログラミングを含んでもよい）。また、複数の命令モードを有するタイムステーショナリプロセッサの場合、スケジューリングは、モード変更コマンドの命令への挿入、対応する処理の選択を含む命令に対してオフセットして結果レジスタアドレスを命令に配置することも含む。結果を生成する処理の選択と同じ命令モードにおいて結果レジスタアドレスを確実に伝達できるようにするために、種々の実施の形態においてスケジューリング制約条件を課してもよい。あるいは、結果レジスタアドレスと結果を生成する処理の選択を、異なるモードで実行される命令に含めるような処理を選択してもよい。後者の場合では、スケジューリングされる処理選択の数は、命令モード切換後に宛先レジスタを選択するためのキャパシティに合わせてもよい。すなわち、キャパシティが減少する場合は、切換付近では処理選択の数を少なくするようにスケジューリングし、キャパシティが増加する場合は、数を多くしてもよい。
【００１６】
これらの目的と他の目的、および有効な態様を、図面を参照した例として以下の実施の形態により説明する。
【図面の簡単な説明】
【００１７】
【図１】図１は、データ処理回路を示す。
【図２】図２、２ａは、実行ユニットを示す。
【図３】図３は、命令デコーダを示す。
【図４】図４、４ａは、シーケンサ、およびモード制御回路を示す。
【図５】図５は、プログラミングシステムを示す。
【図６】図６は、コンパイリング処理を示すフローチャートである。
【発明を実施するための形態】
【００１８】
図１は、データ処理回路を示す。回路は、シーケンサ１０、モード制御回路１２、命令メモリ１４、命令レジスタ１６、命令デコーダ１７、実行ユニット１８、および１つ以上のレジスタファイルからなるレジスタファイルセット１９を備える。シーケンサ１０の出力部は、命令メモリ１４の入力部と接続され、プログラムカウンタアドレスを供給する。命令メモリ１４の出力部は、命令レジスタ１６と接続されている。命令レジスタ１６の出力部は、命令デコーダ１７と接続され、命令デコーダ１７の出力部は、実行ユニット１８およびレジスタファイルセット１９と接続されている。実行ユニット１８のオペランド入力部と結果出力部は、レジスタファイルセット１９の読出ポートと書込ポートにそれぞれ接続され、ジャンプ制御出力部は、シーケンサ１０に接続されている。モード制御回路１２の出力部は、命令デコーダ１７の制御入力部と接続されている。
【００１９】
作動中、シーケンサ１０は、通常、連続する命令サイクルにおいてプログラムカウンタ値をインクリメントし、また、ジャンプ命令が実行ユニット１８で実行されると、成功したジャンプ命令に応じてプログラムカウンタ値を変更しながら、プログラムカウンタ値を維持する。シーケンサ１０は、命令モード選択を制御するためにモード制御回路１２に信号を供給する。
【００２０】
プログラムカウンタ値の少なくとも一部は、命令メモリ１４の命令をアドレス指定するために使用される。命令メモリ１４は、アドレス指定された命令を読出して命令レジスタ１６に供給する。命令は、実行制御のために命令レジスタに保存される。命令メモリ１４を、単純なメモリから構成することも可能であるが、命令メモリ１４を階層メモリ回路として、利用されると予測される命令を蓄えておくための複数レベルのキャッシュを有するように構成してもよい。
【００２１】
命令レジスタ１６は、命令デコーダ１７に命令を連続的に供給する。モード制御回路１２は、モード制御信号を命令デコーダ１７に供給する。命令デコーダ１７は、実行ユニット１８とレジスタファイルセット１９のための実行制御信号を生成する。
【００２２】
図２は実行ユニット１８の一実施の形態を示している。この実施の形態では、実行ユニット１８は、それぞれ少なくとも１つの機能ユニットを備える複数の機能ユニットグループ群２０と、１つ以上のレジスタファイル（不図示）の読出ポートに接続されたオペランド入力部２２と、入力部が機能ユニットグループ２０に接続された結果レジスタ２４と、１つ以上のレジスタファイル（不図示）の書込ポートに接続された出力部２６とを備える回路である。機能ユニットグループ２０はそれぞれ、命令デコーダ(不図示）に接続された制御入力部２８を有する。更なる実施の形態では、機能ユニットグループに、実行回路に接続された内部レジスタ(不図示）を設け、ある機能ユニットの結果を、命令コードの制御の下で、オペランドとして内部的に別の機能ユニットに送るように構成してもよい。
【００２３】
図２ａは、実行ユニット１８の一実施の形態を示す。実行ユニット１８には、レジスタファイル（不図示）の読出ポートからのオペランドと、実行ユニット１８の（任意で選択可能な）内部結果レジスタ２４のオペランドとの間で選択するマルチプレクサ２９を備えている。マルチプレクサ２９は、命令デコーダによって制御される。これによって、中間結果をレジスタファイルに保存することなく、連続処理を可能とすることができる。
【００２４】
また、一実施の形態では、機能ユニットグループ２０の入力部にオペランドレジスタを設け、レジスタファイルおよび／または結果レジスタからのオペランドを一時的に蓄えておくこともできる。これにより、異なる命令サイクルにおけるオペランドのロードや、これらのオペランドを用いた処理の実行が可能となる。
【００２５】
一実施の形態では、命令レジスタ１６からの命令は、それぞれ１つ以上のビット位置を有する複数のフィールドを備えている。フィールドの一部の内容は、実行ユニット１８によって実行される処理を示すものであり、フィールドの別の部分の内容は、レジスタファイルセット１９において、オペランドデータを読出ポートへ供給するレジスタアドレス、または書込ポートからの結果を保存するレジスタアドレスを示すものである。この実施の形態では、モード制御信号は、命令のどの部分が処理を示すフィールドとして機能するか、また、命令のどの部分がレジスタアドレスおよび／またはこれらの部分のサイズを示すかを判断するために用いられる。
【００２６】
図３は、命令デコーダ１７の一実施の形態を示している。この実施の形態では、命令デコーダ１７は、命令レジスタ１６と接続されたマルチビット入力部を有する命令選択回路３１と、命令選択回路３１の出力部の異なる部分にそれぞれ接続される入力部を有する複数のマルチプレクサ３０とを備える。さらに、マルチプレクサ３０の選択された入力部に、デフォルト信号供給コンダクタを接続してもよい。第１のマルチプレクサ３０は、機能ユニットグループ（不図示）の制御入力部に接続される第１の出力部３２を備えている。第２のマルチプレクサ３０は、レジスタファイルセット（不図示）の読出ポートの読出しアドレス入力部に接続される第２の出力部３４を備えている。第３のマルチプレクサ３０は、レジスタファイルセット（不図示）の書込ポートの書込アドレス入力部に接続される第３の出力部３６を備えている。
【００２７】
命令選択回路３１は、シーケンサ１０とモード制御回路１２に接続される制御入力部を備える。モード制御回路１２によって選択された命令モードが、命令が命令レジスタの全範囲を満たさないことを示す場合、命令選択回路３１は、命令を供給するための命令レジスタの位置を選択するために、シーケンサから送られるプログラムカウンタ値の複数ビットを使用する。例えば、命令モードが、ハーフサイズの命令を使用することを示す場合、プログラムカウンタ値のビットは、命令レジスタのコンテンツの前半部分が供給されるのか、後半部分が供給されるのかをコントロールする。別の形態として、命令モードが、４分の１サイズの命令を使用することを示す場合、プログラムカウンタ値のビットは、命令レジスタのコンテンツの４分の１番目、４分の２番目、４分の３番目、または４分の４番目のいずれが供給されるのかをコントロールする。
【００２８】
マルチプレクサ３０は、モード制御回路１２と接続される制御入力部を備える。モード制御回路１２によって選択された命令モードに応じて、マルチプレクサ３０は、命令における異なる位置からのビット、および／またはデフォルトビットを、第１、第２、および第３の出力部に供給する。
【００２９】
一実施の形態では、モード制御信号によってモード制御回路１２から選択された命令モードに応じて、命令デコーダ１７は、命令の複数のフィールドの複数のビットを実行ユニット１８およびレジスタファイルセット１９に送る。なお、レジスタアドレスを示す複数のフィールドは、結果を生成する処理を示す複数のフィールドとは別に送られる。したがって、現在の命令における結果を書き込む書き込みアドレスを示す一つのフィールドは、前回の命令によって示された処理の実行結果を書き込むためのレジスタをアドレス指定するために利用される。現在の命令が実行されているとき、すなわち現在の命令によって選択された１つ以上の処理が実行されているときに、前回の命令で得られた結果を取得することができる。
【００３０】
したがって、処理選択コードおよびこれらの処理の結果を書き込むレジスタアドレスは、異なる命令サイクルにおいて異なる命令から供給される。一実施の形態では、現在の命令で指示される複数の処理は、現在の命令のフィールドの制御の下でアドレス指定されたレジスタからフェッチされたオペランドに適用される。しかし、代わりに、処理を、前回の命令におけるフィールドの制御の下でアドレス指定されたレジスタからフェッチされたオペランドに適用してもよい。また、この場合、処理選択コードおよびこれらの処理のためにオペランドをフェッチするためのレジスタアドレスは、異なる命令サイクルの異なる命令から供給される。
【００３１】
実行ユニットが機能ユニットから結果を受け取る内部レジスタを含む実施の形態では、処理コードは、機能ユニットによって内部レジスタのコンテンツに適用される処理を指示するようにしてもよい。したがって、複合処理の連続するステージを実行する処理選択コードを、異なる命令サイクルの異なる命令から供給するようにしてもよい。
【００３２】
命令デコーダ１７は、第１の命令モードをサポートするようにしてもよい。第１の命令モードは、例えば、命令の複数のフィールドが、実行ユニット１８の複数の異なる機能ユニット（不図示）によって並列に実行される複数の処理を示すものである。第１の命令モードにおいても、命令の別の複数のフィールドが、命令用のオペランドを供給するためのレジスタアドレスを示すようにしてもよい。命令のさらなる複数のフィールドは、以前の単一または複数の命令による処理の結果を書き込むためのレジスタアドレスを示すようにしてもよい。第１の命令モードに加えて、命令デコーダ１７は、第２の命令モードをサポートするようにしてもよい。第２の命令モードは、１つの処理（または複数の処理の所定の１つの組み合わせ）を選択するために１つのフィールドを定義し、オペランドをフェッチするためのレジスタアドレスを示すために２つのフィールドを定義し、結果を書き込むためのアドレスを示すために１つのフィールドを定義するものである。さらに、または、その代わりに、別の命令モードを備えるようにしてもよい。すなわち、複数のフィールドが、２つ以上の処理であって、第１のモードよりも少ない数の処理を指示し、オペランドをフェッチするための３つ以上のレジスタアドレスを指示し、結果を書き込むための２つ以上のレジスタアドレスを指示するモードを備えるようにしてもよい。
【００３３】
また、異なる命令モードでは、命令の異なるフィールドにおけるビット数が異なるようにしてもよい。例えば、ある命令モードでは、レジスタアドレスを選択するためのフィールドのビット数が、別の命令モードにおいてレジスタアドレスを選択するためのフィールドのビット数よりも大きくなるようにしてもよい。したがって、前者のモードでは、後者の命令モードよりも、数多くのレジスタをアドレス指定することができる。例えば、前者のモードではアドレス指定できるものでも、後者のモードでは、サブセットのみにアドレス指定できる。別の実施例では、前者のモードおよび後者のモードにおいて、別々の異なるレジスタセット、または部分的にオーバーラップしたセットに、アドレス指定できるようにしてもよい。
【００３４】
同様に、ある命令モードにおいて処理を選択するためのフィールドのビット数を、別の命令モードで処理を選択するためのフィールドのビット数よりも大きくなるようにしてもよい。したがって、前者のモードでは、後者のモードよりも多数の処理を選択することができる。例えば、前者のモードでは選択できる処理でも、後者のモードではサブセットのみを選択することができる。別の実施例では、前者のモードおよび後者のモードにおいて、別々の異なる処理セット、または部分的にオーバーラップしたセットを、選択可能としてもよい。
【００３５】
なお、命令レジスタ１６の全てのビットを、処理、オペランドレジスタアドレス、および結果レジスタアドレスを指示するために使用する必要はない。命令レジスタ１６のビットの一部を、少なくとも一部の命令モードでは使用しないようにしておくこともできる。したがって、これらの命令モードでは、より短い命令を使用できる。
【００３６】
図４はシーケンサ１０とモード制御回路１２の一実施の形態を示している。この実施の形態では、シーケンサ１０は、プログラムカウンタレジスタ４０、インクリメンタ４２、マルチプレクサ４４、およびコンパレータ４６を備えている。プログラムカウンタレジスタ４０は、プログラムメモリ（不図示）のアドレス入力部と、インクリメンタ４２とに接続される出力部を有する。インクリメンタ４２は、モード制御回路１２に接続される制御入力部を有する。マルチプレクサ４４は、インクリメンタ４２の出力部と、実行ユニット（不図示）のジャンプアドレス出力部と、スタートアドレスソース（不図示）とに接続される入力部を有する。さらに、あるいは代わりに、マルチプレクサ４４は、サブルーチンからリターンするためのリターンアドレスソース（不図示）と接続される入力部を有してもよい。マルチプレクサ４４は、実行ユニット（不図示）に接続される制御入力部を有する。マルチプレクサ４４は、プログラムカウンタレジスタ４０の入力部と接続される出力部を有する。コンパレータ４６は、マルチプレクサ４４とプログラムカウンタレジスタ４０の出力部に接続される入力部、および、命令メモリ（不図示）のイネーブル入力部に接続される出力部を有する。
【００３７】
モード制御回路１２は、モードレジスタ４８とモードマルチプレクサ４９を有する。モードマルチプレクサ４９は、出力モードレジスタ４８、実行ユニット（不図示）のジャンプアドレス出力部に付属するモード部分出力部、およびスタートモードソース（不図示）に接続する入力部を有する。モードマルチプレクサ４９は、実行ユニット（不図示）に接続される制御入力部を有する。モードマルチプレクサ４４は、モードレジスタ４８の入力部と接続する出力部を有する。
【００３８】
作動中、プログラムカウンタレジスタ４０は、マルチプレクサ４４から各実行サイクルにおいてアドレスをロードする。実行ユニットはアドレスソースを制御する。最初に、スタートアドレスがロードされる。次に、通常は、前のプログラムカウンタ値をインクリメントした結果がロードされる。しかし、実行ユニットが、分岐命令が成功したことを示すと、実行ユニットから分岐ターゲットアドレスをロードする。この実施の形態では、プログラムカウンタの選択されたモードに応じてインクリメントされる。例えば、フルサイズ、ハーフサイズ、および４分の１サイズの命令モードが使用される場合、フルサイズ、ハーフサイズ、または４分の１サイズの命令モードが指示されると、プログラムカウンタ値はそれぞれ４、２、または１つインクリメントされる。命令メモリはフルサイズの命令をロードできることが望ましい。この場合、プフルサイズ未満の命令を区別するプログラムカウンタ値の最下位ビットは、命令メモリにアドレス指定するために必要ではない。コンパレータ４６はオプションであるが、命令メモリにアドレス指定するのに必要な現在および将来のプログラムカウンタ値の部分を比較し、両者が異なる場合にはリードイネーブル信号を出力する。
【００３９】
図４ａは、命令モードに依存しない固定インクリメント（例えば１のインクリメント）を使用する別の実施の形態に示している。この実施の形態には、シフト回路４００が設けられており、プログラムカウンタ値を、命令メモリに適用する前にモード依存量だけシフトする。これに応じて、コンパレータ４６は、現在のモードにおける命令メモリをアドレス指定するために用いられるアドレス部分のみを比較するように構成されている。なお、この実施の形態では、あるモードでは最下位ビットも所定の値を有するので、これらの最下位ビットは不要ではなく、プログラムカウンタビットをより効率的に利用することができる。
【００４０】
モード制御回路１２の処理は、シーケンサ１０のものと同様である。モード値は各命令サイクルにおいてモードレジスタ４８にロードされる。実行ユニットはアドレスソースを制御する。
最初に、スタートモードがロードされる。次に、通常、モード値は変化しない（例えば、モードレジスタ４８からロードされる）が、実行ユニットが分岐命令の成功を示すと、実行ユニットから供給されたジャンプターゲットアドレスを伴うモード値がロードされる。好ましくは、ジャンプターゲットモード値は、ジャンプ命令において、ジャンプターゲットアドレスと組み合わせて（絶対アドレスか相対アドレスの形で）、例えば、命令の一部を形成するリテラルデータとして特定される。
【００４１】
そのため、一実施の形態では、所定数のジャンプターゲットアドレスの最上位ビットの位置を利用し、ジャンプターゲットアドレスの最上位ビットをモードビットとしてもよい。絶対アドレスによるジャンプ命令では、これらの最上位ビットは、ジャンプ命令の実行の際にモードレジスタ４８にコピーされる。回路が相対アドレス（すなわち、プログラムカウンタアドレスに対するオフセット）によってジャンプ命令（分岐命令とも呼ばれる）をサポートする一実施の形態では、成功したジャンプ命令の相対アドレスの下位ビットが、新しいプログラムカウンタアドレスを取得するために、プログラムカウンタアドレスに加算される。また、最上位ビットは、モードレジスタ４８にロードするように独立して取り扱ってもよい。下位ビットからモードビットへのオーバーフローは、無効とされる。
【００４２】
一実施の形態では、シーケンサ１０は、「サブルーチンへのジャンプ」命令と「サブルーチンからのリターン」命令の実行、および／またはレジスタベースのジャンプターゲットのアドレッシングをする。サブルーチンへのジャンプの際、ジャンプが実行されると、現在のインクリメントされたプログラムカウンタ値はセーブされる。その後、「サブルーチンからのリターン」命令が実行されるとき、このプログラムカウンタ値はプログラムカウンタレジスタにロードされる。この実施の形態では、モード制御値は、サブルーチンへのジャンプ命令に応じて保存され、サブルーチンからのリターン命令に応じてリストアされる。同様に、レジスタからジャンプターゲットアドレスが提供された場合、レジスタからモードビットもロードするようにしてもよい。
【００４３】
なお、この方法により選択可能な種々のモードの数は、このために用いるモードビット数に依存する。異なるモードは、異なる長さの命令を提供するようにしてもよい。しかし、一実施の形態では、複数の異なるモードで同じ長さの命令を提供し、ジャンプターゲットアドレスの最上位ビットを用いてこれらのモードを選択するようにしてもよい。
【００４４】
なお、異なる命令モード間で切り換えを行うためのジャンプ命令の利用を、処理選択コード、結果レジスタアドレス、および処理のオペランドレジスタアドレスがそれぞれ同じ命令に含まれるようなプロセッサに適用してもよい（すなわち、異なる命令サイクルにおいて命令のこれらの部分を利用できるようにパイプライン方式が必要となる）。このようなプロセッサでは、通常、各命令において、どの機能ユニットグループに命令情報が含まれているか、という指示を含め、他の機能ユニットのグループについて自動的にＮＯＰｓ（ノーオペレーション命令）を生成することで、命令サイズをより効果的に減少させることができる。しかし、そのような指示の利用は、オペレーション選択コード、結果レジスタアドレス、および処理用オペランドレジスタアドレスの少なくとも２つがそれぞれ異なる命令に含まれるようなプロセッサには、ほとんど効果がない。
【００４５】
なお、モード選択に別のメカニズムを利用してもよい。例えば、モード選択ビットを、各命令の一部、または、例えば次の１つの命令または複数の命令の命令モードを示す命令の一部としてもよい。この場合、これらのビットは、モード制御回路に供給される。これは、モードに対して詳細な制御を行えるという利点があるが、命令サイズが大きくなり、メモリ利用の効率を下げてしまうという難点がある。別の実施の形態では、フルサイズ命令語用のスペースの最後の命令のみが、常に、モード選択ビットを含むようにする（例えば、２つのハーフサイズ命令のうちの第２の命令のみ）。これは、よりメモリ効率がよい。モード選択のためにジャンプ命令を利用することによって、コードサイズが減少するという利点がある。
【００４６】
別の実施例として、特別なモード変更命令を使用してもよい。すなわち、実行ユニットが、これらのモード変更命令からの情報の制御の下で、モード制御回路にモード値をロードさせるように制御する。モード変更命令は、例えば、新たなモードを示すデータを含んでもよい。または、命令モードの所定のシーケンスを定義して、モード変更命令が、所定のシーケンスにおける現在の命令に続く命令モードへのステップを指示するようにしてもよい。モード変更命令の使用は、大きなジャンプ命令に比べてコードサイズを小さくできるかもしれないが、モード変更が頻繁にジャンプを伴う場合は、結果として、ジャンプ命令の方がコードサイズを小さくすることができる。
【００４７】
なお、上述したデータ処理回路は、１つの命令において、異なる処理の処理ステージを指定できる命令を利用することが分かる。したがって、例えば、第１の処理の処理選択コードは、同じ命令内において、処理選択コードが前回の命令において供給された第２の処理のライトバックステージの書込レジスタアドレスを伴うようにしてもよい。また、異なる機能ユニットの複数の処理選択コードを、同じ命令、および／または、以前の１つまたは複数の命令において処理選択コードが供給された異なる処理の複数の書込みレジスタアドレスに、供給してもよい。さらに、オペランドレジスタアドレスを、ある命令および／または以前の複数の命令において選択された１つの処理または複数の処理の命令に供給してもよい。また、命令において選択された１つあるいは複数の処理の命令に、リテラルデータを供給するようにしてもよい。
【００４８】
一実施の形態では、１つの命令において特定される処理の数および／またはレジスタアドレスの数は、選択された命令モードに依存する。一実施の形態では、ある命令に供給されるレジスタアドレスの数は処理の数に比例している。したがって、例えば、書込みレジスタアドレスの数は処理選択コードの数と等しい、および／または、オペランドレジスタアドレスの数は（命令モードに依存して）処理選択コードの数の２倍と等しくなるようにしてもよい。
【００４９】
あるいはまた、このような比例関係のない命令モードを定義してもよい。例えば、１つ以上の命令モードでは、書込みレジスタアドレスの数を、処理選択コードの数より大きくしてもよい。例えば、レイテンシが異なる種々の処理を行う場合に、処理結果を吐き出す命令サイクルにおいて書き込みアドレスを指定する能力の不足に起因して、それらの処理をスケジューリングできなくなることがある。上述した、書込みレジスタアドレスの数を、処理選択コードの数より大きく設定することは、このような事態を避けるために利用してもよい。さらに、広い命令モードにおいて開始された処理の結果を取り扱うために、回路が広い命令モードと狭い命令モードとの間で切り換え可能な移行モードを定義するために用いてもよい。
【００５０】
別の実施例として、書込みレジスタアドレスの数は、１つ以上の命令モードによる処理選択コードの数より少なくしてもよい。これは、例えば、異なる処理が異なるレイテンシを持つ場合に、異なる命令サイクルにおいて結果がライトバックされる複数の処理を並列に開始できるようにするために、使用してもよい。別の実施例として、さらに、異なる複数の処理が、中間結果をレジスタファイルのレジスタに書き込むことなく連結されるプログラム部分に使用してもよい。この場合、中間結果を生成する処理に対して、書き込みアドレスを設定する必要がない。したがって、このような実行をサポートする命令モードにおいて、書き込みアドレスの数の少ない命令を利用することができる。さらなる実施例として、広い命令モードにおいて結果を書き込む多くの処理を開始できるようにするために、回路が狭い命令モードと広い命令モードの間で切り換え可能な移行モードにおいて、少ない数の書込みアドレスを利用してもよい。
【００５１】
異なる数の書込みレジスタアドレスおよび／またはオペランドレジスタアドレスの指定を可能とするほかに、異なる命令モードが異なるサイズのレジスタアドレスを指定するようにしてもよい。したがって、例えば、第１の命令モードでは、命令において、それぞれが１６レジスタのうちの１つを指定する４ビットレジスタアドレスを用い、第２の命令モードでは、それぞれが６４レジスタのうちの１つを指定する６ビットレジスタアドレスを用いるようにしてもよい。一実施の形態では、第１の命令モードは、第２の命令モードでアドレッシングができるレジスタのサブセットのアドレッシングのみを許容する。
【００５２】
一実施の形態では、回路用のプログラムが、あるモードにおいて作動しているときに何らかの処理を開始させること、および別のモードにおいて作動しているときに処理結果を書き込むことを回避する。すなわち、プログラムのコンパイルの間、分岐が起こるポイントよりも後で結果が生成されるような処理のスケジューリングを避ける（分岐は、プログラムカウンタアドレスが変化するときに行われるといえる。通常は、分岐命令が実行ユニットに適用される命令サイクルよりも１つ以上後のサイクルで起こる）。このタイプの実施の形態では、同様に、別のモードでオペランドを読み出すようにアドレッシングされたレジスタからのオペランドを利用して、あるモードで作動しているときに、回路用のプログラムが何らかの処理を開始することを回避する。
【００５３】
しかし、別の実施の形態では、そのような制限を設けなくてもよい。例えば、ある処理の結果レジスタアドレスの範囲を、その処理を選択する命令において可能な範囲よりも広くするように、モード移行を利用してもよい。この場合、プログラムは、処理のための処理選択コードを含む第１の命令と、処理の結果レジスタアドレスを含む第２の命令と、命令モードを変更する命令とを有し、第１の命令を第１の命令モードで実行し、第２の命令を第２の命令モードで実行するようにする。第２の命令モードは、第１の命令モードではアドレッシングできないレジスタのアドレッシングを許容する。
【００５４】
別の実施の形態では、異なるモードでは異なる特別処理セットから選択ができるようにするが、異なる命令モードにおいて処理選択および／またはレジスタ選択の数を必ずしも異ならせる必要はない。一実施の形態では、例えば、画像圧縮、画像解凍、オーディオ圧縮、オーディオ解凍、およびコンピュータグラフィック処理の１つ以上のための異なる命令モードを設けてもよい。一般に、専用のハードウェアでサポートされる特別処理は、これらのモードのそれぞれについて定義される。例えば、画像圧縮のブロックマッチング処理、画像の圧縮および伸張のＤＣＴ変換命令、コンピュータグラフィック処理のためのテクスチャマッピングまたはビットブリッティング（bit blitting）処理、可変長圧縮／伸張処理等である。異なる命令モードでは、これらの処理のそれぞれについての異なるサブセットからの処理の選択が行われる。  図５はプログラム開発システムを示している。システムは、コンパイラプログラムを実行するようプログラムされたプロセッサ５０、ソースコードストレージデバイス５２、およびコンパイル済みコードを命令メモリにプログラミングするプログラミングシステム５４を備える。プログラム可能な不揮発性メモリ（例えばフラッシュメモリ）が命令メモリもしくはその一部に使用されている場合、プログラミングシステム５４は不揮発性メモリプログラミング回路を利用してもよい。そのような回路は、複数の命令メモリをプログラミングするためにオフラインで使用してもよい。しかし、例えば集積回路のマスクプログラミングなど、別のプログラミング方式を利用してもよい。
【００５５】
図６は、コンパイラの処理を説明する図である。第１ステップ６１では、コンパイラは、例えばＣまたはＣ＋＋といった高水準言語、あるいは、中水準言語のソースコードを受け取る。第２ステップ６２では、コンパイラはプログラムの各部分のための命令モードを選択する。これは、例えば、明確にプログラムされたモード選択に基づいて、または、暫定的にコンパイルされたプログラムを実行することによって得られたプロファイルデータに基づいて、行ってもよい。頻繁に実行されるプログラムの部分は、広い命令の命令モードが割り当てられ、、それほど頻繁には実行されないプログラムの部分は、狭い命令の命令モードが割り当てられる。別の実施の形態では、異なる命令モードが異なるタイプのタスク（例えば、画像圧縮、画像回答、コンピュータグラフィック、オーディオ圧縮、オーディオ解凍等）をサポートする。この場合、ある部分で実行されるタスクに応じて、プログラム部分ごとに異なる命令モードを割り当ててもよい。
【００５６】
次に、コンパイラは、ソースコードのプログラム部分をコンパイルする。基本的に、各部分は、プログラム部分に割り当てられた命令モードによって定義される種々の概念プロセッサ（notional processor）をターゲットとしてコンパイルされる。第３ステップ６３では、コンパイラは、プログラム部分に割り当てられた命令モードにおいて利用可能な命令から、プログラム部分においてソースコードを実行するための処理を選択する。第４ステップ６４では、処理およびレジスタの処理用の読出しと書き込み動作のスケジューリングを行う。すなわち、命令サイクルを、処理の実行、およびレジスタの処理用の読出しと書き込み動作に割り当てる。スケジューリング方法自体は知られている。一実施の形態では、後続する命令にステップし、各命令において、データ依存の観点からその命令にスケジューリングできる処理をサーチし、後から他の処理においてオペランドとして利用するために結果を保存するレジスタを割り当てることによって、スケジューリングを行う。結果を書き込む命令における時間の可用性の制約、およびレジスタの可用性の制約が満たせない場合は、バックトラックを利用してもよい。実行時間を最小にするスケジューリングを選択してもよい。
【００５７】
第５ステップ６５でコンパイラは、命令における処理を選択するための命令コードをセットする。第６ステップ６６でコンパイラは、命令において結果をレジスタに書き込むためのレジスタのアドレッシング用コードをセットする。通常、レジスタアドレッシング用のコードがセットされる命令は、処理コードが実行される命令に依存して、その命令を実行するために必要な遅れを加算することによって、選択される。第７ステップ６７でコンパイラは、命令においてレジスタからオペランドを読み出すためのレジスタのアドレッシング用コードをセットする。一実施の形態では、これらのコードは処理選択コードがセットされるのと同じ命令にセットされる。オペランドデータのバッファリングをサポートしたり、または、処理コードの発行前にオペランドのアドレス指定が必要な別の実施の形態においては、これらのオペランド選択コードおよび処理選択コードを、互いに異なる命令にセットしてもよい。任意で、レジスタアドレッシングコードをセットするための命令を、命令における時間の可用性に応じて選択する。
【００５８】
第８ステップ６８でコンパイラは、命令モード変更命令（例えばジャンプ命令）を、異なる命令セットで実行される複数のプログラム部分の間のトランジションで、あるプログラム部分から別のプログラム部分へのジャンプ命令に挿入する。第９ステップ６９でコンパイラは、すべてのプログラム部分がコンパイルされたかをテストし、全てがコンパイルされていない場合は、別のプログラム部分のために第３ステップ６３まで戻る。
【００５９】
一実施の形態では、コンパイラは、ジャンプ（分岐）命令に対して、スケジューリング処理に制約条件を課す。具体的には、処理結果がジャンプ（分岐）後に得られる場合には、ジャンプ（分岐）前にはいずれの処理もスケジューリングできないような制約条件とする。同様に、処理用のオペランドアドレッシングとその処理のための処理コード選択が、異なる命令に含まれる場合には、ジャンプ(分岐）のすぐ後にはいずれの処理もスケジューリングできないようにし、処理のオペランドはジャンプ(分岐）前にアドレス指定されるようにする。これにより、処理がいったん処理選択のモードにアサインされると、従来のシングルモードスケジューリングを利用することができる。オペランドのロードと、処理結果の書き込みは、全て選択されたモードで実行される。
【００６０】
表Ｉは、このように取得されたプログラムの一部の例示である。
表Ｉ
【表１】
2010503107.tif 000003
【００６１】
各横列は、異なる命令を示し、異なる縦列は命令における異なるフィールドを示している。
連続した横列の命令は、連続的に実行される。ＯＰ１、ＯＰ２、ＯＰ３、ＯＰ４、およびＪＭＰはオペレーションレジスタ選択コードである。Ａ１１、Ａ１２、Ａ１３、Ａ１４、Ａ２３、Ａ２４、Ａ３１、Ａ４１はオペランド選択コードである。Ｒ１１、Ｒ１２、Ｒ２２、およびＲ３２は結果レジスタ選択コードである。この例では、選択された処理は一周期レイテンシを有すると仮定する。Ｒ２１はＯＰ１によって選択された処理のための結果レジスタを選択し、Ｒ２２はＯＰ２によって選択された処理のための結果レジスタを選択し、Ｒ３２はＯＰ３によって選択された処理のための結果レジスタを選択する。Ｒ１１とＲ１２は以前に選択された処理（不図示）のための結果レジスタを選択する。
【００６２】
第２の命令におけるジャンプ処理選択ＪＭＰは、命令モード切換を制御するものであり、１命令レイテンシで実行、すなわち第４の命令から開始するように制御する。モード切換前の第１の命令モードは、８フィールド命令を有し、モード切換後の第２の命令モードは、４フィールド命令を有する（見やすくするためにフィールドは縦列に示しているが、実際には、第１および第２のモードのフィールドは、互いに異なるサイズとしてもよい）。なお、ジャンプ命令は、ジャンプアドレス用のフィールドとして、レジスタを特定するためのフィールドサイズの複数分のサイズのフィールドを利用する。これらのフィールドは、ジャンプを処理するためにシーケンサに送られる。
【００６３】
この例では、選択された処理は一周期レイテンシを有すると仮定している。したがって、モード変更が行われる前の最後の命令において、ノーオペレーション選択（ＮＯＰｓ）がスケジューリングされる。この命令は、ジャンプコマンドの後ろに処理ＯＰ３のための結果レジスタ選択のみをを含む。したがって、結果書き込み用のフィールドを設けるためにジャンプディレイが利用される。
【００６４】
処理レジスタ選択コードＡ１１、Ａ１２、Ａ１３、Ａ１４、Ａ２３、Ａ２４、Ａ３１、Ａ４１は、これらの選択コードが含まれているのと同じ命令で選択された処理のために機能すると仮定する。しかし、別の実施の形態においては、それらの選択コードをより早い段階の命令にセットするようにしてもよい。長いレイテンシ処理がある実施の形態では、後の段階の命令に含めてもよい。各処理が一周期レイテンシを有する実施例について説明したが、実際には、異なるレイテンシを利用したり、異なる処理が互いに異なるレイテンシを持つようにしてもよい。この場合、結果レジスタ選択コードは、対応するオフセット命令にセットされる。場合によっては、書き込みをディレイするために機能ユニットのバッファリングを利用して、結果レジスタ選択コードを、結果が最初に生成される命令よりも後にセットしてもよい。
【００６５】
別の実施の形態において、コンパイラは少なくとも処理の一部においては、「シングルモード」の制約条件を課すことはない。したがって、例えば、処理を選択するコードを、あるモードで実行される命令に含め、その処理の結果を書き込むためのレジスタのアドレッシングをするコードを、別のモードで実行される命令に含め、および／または、その処理のオペランドを読み出すためのレジスタのアドレッシングをするコードを、別のモードで実行される命令に含めるようにしてもよい。表ＩＩは、このようにして生成されるプログラムの一部を例示している。
表ＩＩ
【表２】
2010503107.tif 000004
【００６６】
ここで、第１から第２の命令モードへの命令モード変更（ＪＭＰ命令によって発生）は、第４の命令（第４横列）で実行され、第４横列の命令は、第２の命令モードで実行されるものと仮定する。第３の命令は、第１の命令モードがまだ適用されているときに実行されるが、処理選択ＯＰ４を含む。ＯＰ４は、第４の命令が実行されているときに書き込み可能な結果を生成するようにした処理を示す。この第４の命令は、したがって、ＯＰ４によって選択された処理の結果のための宛先レジスタを選択する選択コードＲ４１のフィールドを含む。
【００６７】
これは例えば、モード間の切り換えを制御するジャンプ命令が、モード切換のためだけに含まれている場合（すなわち、プログラムがジャンプターゲットに到達する一方向のみしか提供しない場合）に行われる。この場合、どの処理がジャンプ命令の前に開始されたかが一意的にわかり、ジャンプターゲットの後の命令において、これらの処理のための結果レジスタアドレスを含むスケジューリングをすることに問題はない。この場合、コンパイラをそのような制約条件なしで作動するように構成してもよい。これによって、実行速度やコードサイズを低下させる制約条件が取り除かれる。さらに、この場合、モード切換を、ジャンプ発生前に適用されていたモードでは利用できなかった結果レジスタへの書き込みを実現するために利用してもよい。ジャンプ命令の後ろで選択された処理コードについての処理のオペランドレジスタアドレスを含むスケジューリングについても同様である。
【００６８】
一実施の形態では、コンパイラは、プログラム部分の処理を実行する命令の後に、まだ結果が書き込みされていないものについて、処理結果のリストを生成する。これらの結果が利用可能になる命令サイクルのしるしを、このリストに追加してもよい。このリストは第３ステップ６３に送られ、コンパイラが、異なる命令モード用にコンパイルされた次のプログラム部分のための命令に、これらの結果の宛先アドレスを含めることができようにする。スケジューリングステップ（第４ステップ６４）を実行する際に、コンパイラはリスト上の結果のための命令を選択する。
【００６９】
一実施の形態では、命令モード変更が起こるプログラムの移行ポイントの直前および直後の命令について特に注目する。この実施の形態における第３ステップ６３では、コンパイラは、第１の命令モードにおいて命令への配置用の処理コードのサーチを、移行ポイントの前の所定の距離内に制限する。移行ポイントの後に適用される第２の命令モードのための、命令における利用可能スペースまたはアドレッシング可能な「フリー」レジスタの利用可能性によって、選択が制限される。したがって、例えば、第２の命令モードが、より多くの結果レジスタアドレスもしくはより多数のアドレッシング可能なレジスタを有する場合は、コンパイラは移行ポイント前の所定の距離内において命令に対する上記制限を緩める。別の例では、第２の命令モードが、より少ない結果レジスタアドレスもしくはより少数のアドレッシング可能なレジスタを有する場合は、コンパイラは移行ポイント前の所定の距離内において命令に対する上記制限を厳しくする。
【００７０】
別の例では、ジャンプ命令の前に処理を開始する標準的な手法を利用することで、シングルモードの制約条件を緩めることができる。サブルーチンからのリターンの場合は、例えば、標準的な手法として、サブルーチン結果につながる処理を、サブルーチンからのリターンに対応するブランチに対して所定のオフセットを設けて開始させてもよい。この場合、制御がリターンする呼出コードは、サブルーチン結果のための結果レジスタのアドレスの選択を含んでもよい。これにより、標準サブルーチン結果レジスタを確保しておく必要がないので、レジスタの利用効率が向上する。より一般的に、プログラムの別々の部分からジャンプターゲットに到達できる場合、これらの全ての部分が、分岐が起こる命令サイクルに対して同じ命令サイクルにおいて結果を生成する処理を開始するという手法を利用してもよい。この場合、プログラムのターゲット部分は、結果レジスタアドレスを選択する命令を含んでもよい。従って、スケジューリングに対する制約をより小さくするようにコンパイラを構成することができる。さらに、これにより、異なるモードにおける結果レジスタのアドレッシングと処理コード選択が許容される。サブルーチンへのジャンプ発生後に処理コードが選択された処理についてのオペランドレジスタアドレスを含むスケジューリングについても同様である。これにより、引数レジスタをリザーブすることなく、サブルーチン引数を渡すことができる。
【００７１】
一実施の形態では、コンパイラは、関連サブルーチン命令からのリターンに対して第１の所定位置で、サブルーチン結果を生成する処理の選択をスケジュールし、当該サブルーチン命令へのジャンプに対して第２の所定位置で、結果レジスタアドレスのアドレッシングをスケジュールするように構成される。第１および第２の位置は、処理結果が、アドレス指定された結果レジスタで利用可能となるように選択される。コンパイラは、異なるサブルーチンにおいて上記所定位置セットが異なるように構成してもよい。同様の所定位置セットを、サブルーチン命令へのジャンプ発生前にオペランドレジスタのアドレッシングをするために、また、サブルーチンにおける処理の選択のために利用してもよい。
【００７２】
別の実施の形態では、コンパイラは、中間結果をレジスタファイルに書き込んだり読み出したりする必要なく、結果を一方から他方へ渡す連結処理をスケジューリングするように構成される。この場合、コンパイラは、連結命令の間に別の命令がスケジューリングされて連結を妨げてしまわないように、追加の制約を課す。この場合、レジスタアドレッシングのスケジューリングが少なくてすみ、不要な結果の書き込みが必要なくなる。
【図１】
2010503107.tif 000005
【図２】
2010503107.tif 000006
【図２ａ】
2010503107.tif 000007
【図３】
2010503107.tif 000008
【図４】
2010503107.tif 000009
【図４ａ】
2010503107.tif 000010
【図５】
2010503107.tif 000011
【図６】
2010503107.tif 000012
【国際調査報告】
2010503107.tif 000013
2010503107.tif 000014
2010503107.tif 000015
2010503107.tif 000016
2010503107.tif 000017