(57)【要約】【課題】分岐命令による分岐先を制限することにより、命令圧縮効率を向上させる。【解決手段】１つのマイクロプログラムは、１６個のマイクロ命令を含む。マイクロ命令は４マイクロ命令毎のセグメントに区分される。１６個のマイクロ命令には番号が付与されており、若い番号から順に１サイクルに少なくとも１命令ずつ実行されていく。リターン命令であるＲＥＴ命令の実行によりマイクロプログラムは終了する。無条件分岐命令であるＪＰ命令の実行により、次のセグメントの先頭のマイクロ命令に分岐する。条件分岐命令であるＢＲ命令の分岐が成立した場合、２つ先のセグメントの先頭のマイクロ命令に分岐する。マイクロプログラムの後方にはＲＥＴ命令のみを含む２つのセグメントが仮想的に設けられ、この中のＲＥＴ命令の実行によりマイクロプログラムは終了する。【選択図】図１１
2011138308.tif 000002
【特許請求の範囲】
【請求項１】
オペランドを伴わない複数の命令からなる命令列を複数のセグメントに区分けして保持する命令バッファと、
前記複数の命令における処理対象となるデータを保持するデータ保持部と、
前記データ保持部に保持されるデータを参照して前記命令列の先頭の命令から順番に少なくとも１命令ずつデコードするデコーダと、
前記デコーダによるデコード結果に応じて命令を実行する命令実行部と、
前記デコーダによるデコード結果に応じて前記命令列の更新を制御する命令列更新制御部とを備え、
前記命令列更新制御部は、前記デコードされた先頭の命令が分岐命令であって分岐が発生する場合には前記複数のセグメントの何れかにおける先頭の命令が前記命令列の先頭になるように前記命令列を更新し、分岐が発生しない場合には当該分岐命令の直後の命令が先頭になるように前記命令列を更新する
プロセッサ。
【請求項２】
前記分岐命令による分岐先は、当該分岐命令の属するセグメントよりも前方のセグメントにおける先頭の命令に限定される請求項１記載のプロセッサ。
【請求項３】
前記デコーダは、命令実行のための機能に関する機能タイプ、および、命令実行後の前記命令列の更新に関する実行タイプをデコードし、
前記命令実行部は、前記機能タイプに従って命令実行を行い、
前記命令列更新制御部は、前記実行タイプに従って前記命令列の更新を制御する
請求項２記載のプロセッサ。
【請求項４】
前記デコーダは、前記データ保持部に保持されるデータを参照して前記命令列の先頭の命令から順番に複数命令ずつデコードし、
前記命令実行部は、前記機能タイプに応じた数の命令を同時に実行し、
前記命令列更新制御部は、前記実行タイプに応じた数の命令が前記命令バッファから出力されるように前記命令列の更新を制御する
請求項３記載のプロセッサ。
【請求項５】
前記命令列更新制御部は、前記複数のセグメントのうち先頭のセグメントについてのみ１命令ずつシフトする機能を備え、前記先頭のセグメントに保持される各命令について当該命令が前記先頭のセグメントにのみ保持されるか否かを示す状態フラグを保持する請求項４記載のプロセッサ。
【請求項６】
前記データ保持部に保持されるデータはスタックを含み、
前記命令列の実行終了時には前記スタックのトップに保持されるデータが出力される
請求項２記載のプロセッサ。
【請求項７】
前記スタックは所定の段数を備え、前記所定の段数を超えたデータが入力されるとボトムに保持されるデータから消滅する請求項６記載のプロセッサ。
【請求項８】
前記命令列の実行終了時に出力される前記データの形式を指定するデータ形式指定部をさらに具備する請求項６記載のプロセッサ。
【請求項９】
前記データ保持部に保持されるデータは、キューを含み、
前記命令列の実行終了時には前記キューの末尾に保持されるデータが出力される
請求項２記載のプロセッサ。
【請求項１０】
前記命令列の実行終了時に出力される前記データの形式を指定するデータ形式指定部をさらに具備する請求項９記載のプロセッサ。
【請求項１１】
オペランドを伴わない複数の命令からなる命令列を上位層プロセッサから受け取って複数のセグメントに区分けして保持する命令バッファと、
前記複数の命令における処理対象となるデータを保持するデータ保持部と、
前記データ保持部に保持されるデータを参照して前記命令列の先頭の命令から順番に少なくとも１命令ずつデコードするデコーダと、
前記デコーダによるデコード結果に応じて命令を実行する命令実行部と、
前記デコーダによるデコード結果に応じて前記命令列の更新を制御する命令列更新制御部と、
前記命令列の実行終了時に前記データ保持部に保持されるデータを前記上位層プロセッサに出力する出力部とを備え、
前記命令列更新制御部は、前記デコードされた先頭の命令が分岐命令であって分岐が発生する場合には前記複数のセグメントの何れかにおける先頭の命令が前記命令列の先頭になるように前記命令列を更新し、分岐が発生しない場合には当該分岐命令の直後の命令が先頭になるように前記命令列を更新する
コプロセッサ。
【請求項１２】
オペランドを伴わない複数の命令からなる命令列をコプロセッサに出力する上位層プロセッサと、前記命令列を前記上位層プロセッサから受け取って前記命令列の実行終了時に実行結果を前記上位層プロセッサに出力するコプロセッサとを備える情報処理システムであって、前記コプロセッサは、
オペランドを伴わない複数の命令からなる命令列を上位層プロセッサから受け取って複数のセグメントに区分けして保持する命令バッファと、
前記複数の命令における処理対象となるデータを保持するデータ保持部と、
前記データ保持部に保持されるデータを参照して前記命令列の先頭の命令から順番に少なくとも１命令ずつデコードするデコーダと、
前記デコーダによるデコード結果に応じて命令を実行する命令実行部と、
前記デコーダによるデコード結果に応じて前記命令列の更新を制御する命令列更新制御部と、
前記命令列の実行終了時に前記データ保持部に保持されるデータを前記上位層プロセッサに出力する出力部とを備え、
前記命令列更新制御部は、前記デコードされた先頭の命令が分岐命令であって分岐が発生する場合には前記複数のセグメントの何れかにおける先頭の命令が前記命令列の先頭になるように前記命令列を更新し、分岐が発生しない場合には当該分岐命令の直後の命令が先頭になるように前記命令列を更新する
情報処理システム。
【請求項１３】
オペランドを伴わない複数の命令からなる命令列を複数のセグメントに区分けして保持する命令バッファと、前記複数の命令における処理対象となるデータを保持するデータ保持部と、前記データ保持部に保持されるデータを参照して前記命令列の先頭の命令から順番に少なくとも１命令ずつデコードするデコーダと、前記デコーダによるデコード結果に応じて命令を実行する命令実行部と、前記デコーダによるデコード結果に応じて前記命令列の更新を制御する命令列更新制御部とを備えるプロセッサにおける命令列更新制御方法であって、
前記デコードされた先頭の命令が分岐命令であって分岐が発生する場合には前記複数のセグメントの何れかにおける先頭の命令が前記命令列の先頭になるように前記命令列を更新する第１の手順と、
分岐が発生しない場合には当該分岐命令の直後の命令が先頭になるように前記命令列を更新する第２の手順と
を備える命令列更新制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理システムに関し、特にオペランドを伴わない複数の命令からなる命令列を実行するプロセッサ、コプロセッサ、情報処理システムおよびそれらにおける制御方法に関する。
【背景技術】
【０００２】
マイクロプロセッサは、基本的な演算命令（基本命令）を備えており、それらの命令を複数組み合わせることによって、所望の演算を処理することができる。特定のアプリケーションに対してマイクロプロセッサの性能を向上させることを考えるとき、特定の演算命令の組み合わせを１命令で処理する命令を追加する、すなわち１命令化することにより、命令圧縮効果を奏し、性能が改善される。その性能改善の要因としては、処理サイクル数の削減および命令数の削減を挙げることができる。複数の命令であっても処理が軽い場合は１命令にしても基本命令と同じサイクル数（通常１サイクル）で処理することができるが、処理自体が重い場合は１命令化しても複数基本命令による処理サイクル数と変わらないことがある。それでも、命令数が削減されることにより、以下のように、処理サイクル数の削減につながる主に３つの好適な効果が得られる。
【０００３】
１つ目の効果は、命令キャッシュを備えたプロセッサにおいて、命令キャッシュにおける１ラインあたりに定義可能な処理の量が増えることである。１次命令キャッシュの容量は数ＫＢ程度が一般的であり、その限られた容量の中により多くの処理内容を担当する命令列がフェッチされていると、基本命令のみの場合に比べてキャッシュ容量が増えたのと同じ効果がある。これにより、キャッシュヒット率が向上し、処理サイクル数が削減される（命令キャッシュヒット率向上効果）。
【０００４】
２つ目の効果は、ループ展開をすることでループ処理用命令（分岐命令等）の削減による処理サイクル数の削減である。ループ処理では、ループ条件変数初期化、ループ条件変数更新、ループ条件変数比較、分岐の４命令程度を必要とする。例えば、４回のループ処理である場合を考える。ループ対象の処理が５つの基本命令で構成されている場合、ループ展開すると５命令×４ループで２０命令、ループ処理用の４命令が削減されて１６命令となる。一方、５つの基本命令が１命令化されている場合には、ループ対象の１命令を４つ並べた４命令のみとなる。この例ではループ展開前の５命令、すなわち、ループ処理４命令＋ループ対象１命令よりも少ない。パイプライン化されたプロセッサにおいて、分岐命令は分岐する可能性があるため、通常の命令より処理サイクル数が多くかかるように設計されている場合が多い。そのため、ループ展開前よりも命令数が増えたとしても、分岐命令の実行回数が減ることの効果により処理サイクル数が削減できることがある（ループ展開との相乗効果）。
【０００５】
３つ目の効果は、プログラムサイズが削減されるため、命令フェッチのためのバスアクセス回数が削減されることである。これにより、バスの混雑度が緩和されて、命令およびデータフェッチのアクセスレイテンシの削減や、マルチプロセッサシステムにおける他プロセッサの命令やデータのフェッチのアクセスレイテンシの削減などを実現することができる。すなわち、間接的に処理サイクル数を削減することができる（バストラフィック削減効果）。
【０００６】
このように、１命令化することのメリットは大きいのであるが、１命令化した命令を無限に追加することはできない。オペコードのビット数の制限や命令デコーダの処理速度低下などが理由である。そのため、アプリケーション毎に１命令化する命令を限定して用意することにより、アプリケーションに特化した性能改善をしたプロセッサを実現することができる。
【０００７】
一方、近年では、スタックマシンやキューマシンのようなオペランドを伴わない命令を実行するコンピュータの開発が進められている。例えば、グラフィックオブジェクト用コプロセッサ内の画素合成モジュールにおいてスタックマシンを使用した情報処理装置が提案されている（例えば、特許文献１参照。）。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００１−００５７７６号公報（図９）
【発明の概要】
【発明が解決しようとする課題】
【０００９】
上述の従来技術では、命令の１命令化およびスタックマシンやキューマシンのようなオペランドを伴わない命令を利用することにより、命令を圧縮して、処理サイクル数を削減している。
【００１０】
しかしながら、これらの手法により命令を圧縮しても、処理の分岐を実現するためには分岐命令が必要であり、そのために何らかの形で分岐先アドレスを保持または生成する必要がある。また、分岐先に制限を設けずに自由度を持たせてしまうと、命令デコード後にしか分岐先の候補を絞ることができず、分岐先のプリフェッチを効率良く行うことが困難になるという問題が生じる。
【００１１】
本発明はこのような状況に鑑みてなされたものであり、分岐命令による分岐先を制限することにより、命令圧縮効率を向上させることを目的とする。
【課題を解決するための手段】
【００１２】
本発明は、上記課題を解決するためになされたものであり、その第１の側面は、オペランドを伴わない複数の命令からなる命令列を複数のセグメントに区分けして保持する命令バッファと、上記複数の命令における処理対象となるデータを保持するデータ保持部と、上記データ保持部に保持されるデータを参照して上記命令列の先頭の命令から順番に少なくとも１命令ずつデコードするデコーダと、上記デコーダによるデコード結果に応じて命令を実行する命令実行部と、上記デコーダによるデコード結果に応じて上記命令列の更新を制御する命令列更新制御部とを備え、上記命令列更新制御部は、上記デコードされた先頭の命令が分岐命令であって分岐が発生する場合には上記複数のセグメントの何れかにおける先頭の命令が上記命令列の先頭になるように上記命令列を更新し、分岐が発生しない場合には当該分岐命令の直後の命令が先頭になるように上記命令列を更新するプロセッサである。これにより、分岐先をセグメントの先頭の命令に制限させるという作用をもたらす。
【００１３】
また、この第１の側面において、上記分岐命令による分岐先は、当該分岐命令の属するセグメントよりも前方のセグメントにおける先頭の命令に限定されるようにしてもよい。これにより、デッドロックを防止させるという作用をもたらす。
【００１４】
また、この第１の側面において、上記デコーダは、命令実行のための機能に関する機能タイプ、および、命令実行後の上記命令列の更新に関する実行タイプをデコードし、上記命令実行部は、上記機能タイプに従って命令実行を行い、上記命令列更新制御部は、上記実行タイプに従って上記命令列の更新を制御するようにしてもよい。これにより、機能タイプおよび実行タイプに従って命令列を更新させるという作用をもたらす。
【００１５】
また、この第１の側面において、上記デコーダは、上記データ保持部に保持されるデータを参照して上記命令列の先頭の命令から順番に複数命令ずつデコードし、上記命令実行部は、上記機能タイプに応じた数の命令を同時に実行し、上記命令列更新制御部は、上記実行タイプに応じた数の命令が上記命令バッファから出力されるように上記命令列の更新を制御するようにしてもよい。これにより、フォールディングによる命令実行をさせるという作用をもたらす。
【００１６】
また、この第１の側面において、上記命令列更新制御部は、上記複数のセグメントのうち先頭のセグメントについてのみ１命令ずつシフトする機能を備え、上記先頭のセグメントに保持される各命令について当該命令が上記先頭のセグメントにのみ保持されるか否かを示す状態フラグを保持するようにしてもよい。これにより、命令単位でシフトされる対象を限定させるという作用をもたらす。
【００１７】
また、この第１の側面において、上記データ保持部に保持されるデータはスタックを含み、上記命令列の実行終了時には上記スタックのトップに保持されるデータが出力されるようにしてもよい。この場合において、上記スタックは所定の段数を備え、上記所定の段数を超えたデータが入力されるとボトムに保持されるデータから消滅するように構成してもよい。これにより、スタックの段数を限定させるという作用をもたらす。
【００１８】
また、この第１の側面において、上記データ保持部に保持されるデータは、キューを含み、上記命令列の実行終了時には上記キューの末尾に保持されるデータが出力されるようにしてもよい。
【００１９】
また、この第１の側面において、上記命令列の実行終了時に出力される上記データの形式を指定するデータ形式指定部をさらに具備してもよい。
【００２０】
また、本発明の第２の側面は、オペランドを伴わない複数の命令からなる命令列を上位層プロセッサから受け取って複数のセグメントに区分けして保持する命令バッファと、上記複数の命令における処理対象となるデータを保持するデータ保持部と、上記データ保持部に保持されるデータを参照して上記命令列の先頭の命令から順番に少なくとも１命令ずつデコードするデコーダと、上記デコーダによるデコード結果に応じて命令を実行する命令実行部と、上記デコーダによるデコード結果に応じて上記命令列の更新を制御する命令列更新制御部と、上記命令列の実行終了時に上記データ保持部に保持されるデータを上記上位層プロセッサに出力する出力部とを備え、上記命令列更新制御部は、上記デコードされた先頭の命令が分岐命令であって分岐が発生する場合には上記複数のセグメントの何れかにおける先頭の命令が上記命令列の先頭になるように上記命令列を更新し、分岐が発生しない場合には当該分岐命令の直後の命令が先頭になるように上記命令列を更新するコプロセッサおよびそのコプロセッサを含む情報処理システムである。これにより、コプロセッサ内の処理における分岐先をセグメントの先頭の命令に制限させるという作用をもたらす。
【００２１】
また、本発明の第３の側面は、オペランドを伴わない複数の命令からなる命令列を複数のセグメントに区分けして保持する命令バッファと、上記複数の命令における処理対象となるデータを保持するデータ保持部と、上記データ保持部に保持されるデータを参照して上記命令列の先頭の命令から順番に少なくとも１命令ずつデコードするデコーダと、上記デコーダによるデコード結果に応じて命令を実行する命令実行部と、上記デコーダによるデコード結果に応じて上記命令列の更新を制御する命令列更新制御部とを備えるプロセッサにおける命令列更新制御方法であって、上記デコードされた先頭の命令が分岐命令であって分岐が発生する場合には上記複数のセグメントの何れかにおける先頭の命令が上記命令列の先頭になるように上記命令列を更新する第１の手順と、分岐が発生しない場合には当該分岐命令の直後の命令が先頭になるように上記命令列を更新する第２の手順とを備える命令列更新制御方法である。これにより、分岐先をセグメントの先頭の命令に制限させるという作用をもたらす。
【発明の効果】
【００２２】
本発明によれば、分岐命令による分岐先を制限することにより、命令圧縮効率を向上させることができるという優れた効果を奏し得る。
【図面の簡単な説明】
【００２３】
【図１】本発明の第１の実施の形態における情報処理システムの全体構成例を示す図である。
【図２】本発明の第１の実施の形態におけるマイクロ命令処理コプロセッサ２００の構成例を示す図である。
【図３】本発明の第１の実施の形態におけるマイクロプログラムメモリ２３０に保持される各マイクロプログラムの構造の一例を示す図である。
【図４】本発明の第１の実施の形態におけるマイクロプログラム実行部２４０の構成例を示す図である。
【図５】本発明の第１の実施の形態におけるワーキングレジスタ２４２に保持されるワーキングデータの構造の一例を示す図である。
【図６】本発明の第１の実施の形態におけるライトバック形式レジスタ２４３に保持されるライトバック形式とデータ加工の関係の一例を示す図である。
【図７】本発明の第１の実施の形態におけるマイクロ命令バッファ２４１の構成例を示す図である。
【図８】本発明の第１の実施の形態における命令バッファ６１０−０乃至３の各々の構成例を示す図である。
【図９】本発明の第１の実施の形態におけるセグメント更新セレクタ６２０の構成例を示す図である。
【図１０】本発明の第１の実施の形態による情報処理システムにおけるマイクロ命令セットの一例を示す図である。
【図１１】本発明の第１の実施の形態による情報処理システムにおける分岐命令の分岐先の例を示す図である。
【図１２】本発明の第１の実施の形態におけるマイクロ命令バッファ２４１の状態を示す図である。
【図１３】本発明の第１の実施の形態における命令バッファ状態フラグ６２１の状態遷移の一例（１サイクル当り１命令ずつ実行）を示す図である。
【図１４】本発明の第１の実施の形態における命令バッファ状態フラグ６２１の状態遷移の一例（１サイクル当り最大２命令実行）を示す図である。
【図１５】本発明の第１の実施の形態における命令バッファ状態フラグ６２１の状態遷移の一例（１サイクル当り最大３命令実行）を示す図である。
【図１６】本発明の第１の実施の形態における命令バッファ状態フラグ６２１の状態遷移の一例（１サイクル当り最大４命令実行）を示す図である。
【図１７】本発明の第１の実施の形態におけるマイクロプログラム命令デコーダ５００の第１の構成例を示す図である。
【図１８】本発明の第１の実施の形態における機能タイプ決定部５１０の第１の構成例による処理手順を示す図である。
【図１９】本発明の第１の実施の形態における実行タイプ決定部５２０の第１の構成例による処理手順を示す図である。
【図２０】本発明の第１の実施の形態におけるマイクロプログラム命令デコーダ５００の第２の構成例を示す図である。
【図２１】本発明の第１の実施の形態における機能タイプ決定部５１０の第２の構成例による処理手順（その１）を示す図である。
【図２２】本発明の第１の実施の形態における機能タイプ決定部５１０の第２の構成例による処理手順（その２）を示す図である。
【図２３】本発明の第１の実施の形態における機能タイプ決定部５１０の第２の構成例による処理手順（その３）を示す図である。
【図２４】本発明の第１の実施の形態における実行タイプ決定部５２０の第２の構成例による処理手順（その１）を示す図である。
【図２５】本発明の第１の実施の形態における実行タイプ決定部５２０の第２の構成例による処理手順（その２）を示す図である。
【図２６】本発明の第１の実施の形態によるマイクロ命令セットにおけるＮＯＰ命令のデータ操作例を示す図である。
【図２７】本発明の第１の実施の形態によるマイクロ命令セットにおけるＤＵＰ命令のデータ操作例を示す図である。
【図２８】本発明の第１の実施の形態によるマイクロ命令セットにおけるＰＯＰ命令のデータ操作例を示す図である。
【図２９】本発明の第１の実施の形態によるマイクロ命令セットにおけるＰＯＰＸ２命令のデータ操作例を示す図である。
【図３０】本発明の第１の実施の形態によるマイクロ命令セットにおけるＲＯＴ命令のデータ操作例を示す図である。
【図３１】本発明の第１の実施の形態によるマイクロ命令セットにおけるＲＯＴ４命令のデータ操作例を示す図である。
【図３２】本発明の第１の実施の形態によるマイクロ命令セットにおけるＳＷＡＰ命令のデータ操作例を示す図である。
【図３３】本発明の第１の実施の形態によるマイクロ命令セットにおけるＳＯＲＴ命令のデータ操作例を示す図である。
【図３４】本発明の第１の実施の形態によるマイクロ命令セットにおけるＮＯＴ命令等の１オペランド演算命令のデータ操作例を示す図である。
【図３５】本発明の第１の実施の形態によるマイクロ命令セットにおけるＥＱ命令等の２オペランド演算命令のデータ操作例を示す図である。
【図３６】本発明の第１の実施の形態によるマイクロ命令セットにおけるＳＥＲ命令のデータ操作例を示す図である。
【図３７】本発明の第１の実施の形態によるマイクロ命令セットにおけるＯＮＥ命令またはＺＥＲＯ命令のデータ操作例を示す図である。
【図３８】本発明の第１の実施の形態によるマイクロ命令セットにおけるＬＤ０命令のデータ操作例を示す図である。
【図３９】本発明の第１の実施の形態によるマイクロ命令セットにおけるＬＤ１命令のデータ操作例を示す図である。
【図４０】本発明の第１の実施の形態によるマイクロ命令セットにおけるＬＤ２命令のデータ操作例を示す図である。
【図４１】本発明の第１の実施の形態によるマイクロ命令セットにおけるＳＴ０命令のデータ操作例を示す図である。
【図４２】本発明の第１の実施の形態によるマイクロ命令セットにおけるＳＴ１命令のデータ操作例を示す図である。
【図４３】本発明の第１の実施の形態によるマイクロ命令セットにおけるＳＴ２命令のデータ操作例を示す図である。
【図４４】本発明の第１の実施の形態によるマイクロ命令セットにおいて利用される２オペランド演算器の構成例を示す図である。
【図４５】本発明の第１の実施の形態によるマイクロ命令セットにおいて利用されるＭＩＮ演算器の構成例を示す図である。
【図４６】本発明の第１の実施の形態によるマイクロ命令セットにおいて利用されるＭＡＸ演算器の構成例を示す図である。
【図４７】本発明の第１の実施の形態によるマイクロ命令セットにおいて利用されるＧＴ演算器の構成例を示す図である。
【図４８】本発明の第１の実施の形態によるマイクロ命令セットにおいて利用されるＧＥ演算器の構成例を示す図である。
【図４９】本発明の第１の実施の形態によるマイクロ命令セットにおいて利用されるＥＱ演算器の構成例を示す図である。
【図５０】本発明の第１の実施の形態によるマイクロ命令セットにおいて利用されるＳＥＲ演算器の構成例を示す図である。
【図５１】本発明の第１の実施の形態によるマイクロ命令セットにおいて利用されるＰＡＲ演算器の構成例を示す図である。
【図５２】本発明の第１の実施の形態によるマイクロ命令セットにおいて利用される１オペランド演算器の構成例を示す図である。
【図５３】本発明の第１の実施の形態によるマイクロ命令セットにおいて利用されるＯＲＬＵ演算器の構成例を示す図である。
【図５４】本発明の第１の実施の形態によるマイクロ命令セットにおいて利用されるＬＵ演算器の構成例を示す図である。
【図５５】本発明の第１の実施の形態におけるＤＵＰ＿ＳＴ０のフォールディングの例を示す図である。
【図５６】本発明の第１の実施の形態におけるＬＤ０＿ＥＱ＿ＳＴ１のフォールディングの例を示す図である。
【図５７】本発明の第１の実施の形態におけるＬＤ０＿ＥＱ＿ＳＷＡＰのフォールディングの例を示す図である。
【図５８】本発明の第１の実施の形態による情報処理システムにおけるマイクロプログラムの一覧の例を示す図である。
【図５９】本発明の第１の実施の形態におけるＮＵＬＬマイクロプログラムの分岐パスを示す図である。
【図６０】本発明の第１の実施の形態におけるＭＥＡＮマイクロプログラムの分岐パスを示す図である。
【図６１】本発明の第１の実施の形態におけるＭＥＤＩＡＮ３マイクロプログラムの分岐パスを示す図である。
【図６２】本発明の第１の実施の形態におけるＭＥＤＩＡＮ４マイクロプログラムの分岐パスを示す図である。
【図６３】本発明の第１の実施の形態におけるＭＥＤＣＮＤマイクロプログラムの分岐パスを示す図である。
【図６４】本発明の第１の実施の形態におけるＭＥＤ３マイクロプログラムの分岐パスを示す図である。
【図６５】本発明の第１の実施の形態におけるＳＭＯＤマイクロプログラムの分岐パスを示す図である。
【図６６】本発明の第１の実施の形態におけるＤＢＭＤ＿ＦＲＭマイクロプログラムの分岐パスを示す図である。
【図６７】本発明の第１の実施の形態におけるＤＢＭＤ＿ＦＬＤマイクロプログラムの分岐パスを示す図である。
【図６８】本発明の第１の実施の形態におけるＤＢＩＤＸマイクロプログラムの分岐パスを示す図である。
【図６９】本発明の第１の実施の形態におけるＪＰ命令を使用した第１のサンプルの分岐パスを示す図である。
【図７０】本発明の第１の実施の形態におけるＪＰ命令を使用した第２のサンプルの分岐パスを示す図である。
【図７１】本発明の第１の実施の形態における上位層プロセッサ１００のコプロセッサ命令の一覧の例を示す図である。
【図７２】本発明の第１の実施の形態における上位層プロセッサ１００の命令フォーマット例を示す図である。
【図７３】本発明の第１の実施の形態における上位層プロセッサ１００からマイクロプログラムの実行を指示するための命令群の例を示す図である。
【図７４】本発明の第２の実施の形態におけるワーキングレジスタ２４２に保持されるキューレジスタの構成例を示す図である。
【発明を実施するための形態】
【００２４】
以下、本発明を実施するための形態（以下、実施の形態と称する）について説明する。説明は以下の順序により行う。
１．第１の実施の形態（スタックマシンによる構成例）
２．第２の実施の形態（キューマシンによる構成例）
３．変形例
【００２５】
＜１．第１の実施の形態＞
［情報処理システムの構成例］
図１は、本発明の第１の実施の形態における情報処理システムの全体構成例を示す図である。この情報処理システムは、上位層プロセッサ１００と、マイクロ命令処理コプロセッサ２００と、命令キャッシュ３１０と、データキャッシュ３２０と、メモリバス３９０と、メモリ４００とを備える。
【００２６】
上位層プロセッサ１００は、マイクロ命令処理コプロセッサ２００より上位層に属するプロセッサであり、コプロセッサ命令をマイクロ命令処理コプロセッサ２００に処理させるものである。上位層プロセッサ１００は、メモリ４００に保持されるデータを用いて処理を行う。上位層プロセッサ１００とメモリ４００との間にはメモリバス３９０を介して命令キャッシュ３１０およびデータキャッシュ３２０が接続される。
【００２７】
メモリ４００は、上位層プロセッサ１００における処理に必要な命令やデータを保持するメモリである。このメモリ４００の一部のコピーが命令キャッシュ３１０およびデータキャッシュ３２０に保持される。命令キャッシュ３１０は、上位層プロセッサ１００の命令（プロセッサ命令）を保持するキャッシュメモリである。データキャッシュ３２０は、上位層プロセッサ１００の命令処理に必要なデータを保持するキャッシュメモリである。  メモリバス３９０は、メモリ４００と命令キャッシュ３１０およびデータキャッシュ３２０とを接続するバスである。
【００２８】
上位層プロセッサ１００は、プログラムカウンタ更新部１１０と、プロセッサ命令デコーダ１２０と、プロセッサ演算器パイプライン１３０と、汎用レジスタファイル１４０と、ロードストアユニット１５０とを備える。
【００２９】
プログラムカウンタ更新部１１０は、実行中のプログラムの命令（プロセッサ命令）アドレスを保持するプログラムカウンタを含み、このプログラムカウンタを更新する回路を備える。このプログラムカウンタ更新部１１０は、プロセッサ命令デコーダ１２０からの制御信号に基づいてプログラムカウンタを更新する。プログラムカウンタに保持されるアドレスは、命令フェッチアドレスとして命令キャッシュ３１０に供給される。
【００３０】
プロセッサ命令デコーダ１２０は、命令フェッチアドレスに従ってフェッチされた命令（プロセッサ命令）をデコードするものである。このプロセッサ命令デコーダ１２０によるデコードの結果、上位層プロセッサ１００の各部に制御信号が供給される。
【００３１】
プロセッサ演算器パイプライン１３０は、上位層プロセッサ１００における演算を実行する演算器である。汎用レジスタファイル１４０は、上位層プロセッサ１００における汎用レジスタ（ＧＰＲ：General Purpose Register）を保持するものである。ロードストアユニット１５０は、メモリ４００との間のデータのロードおよびストアを実行するものである。
【００３２】
マイクロ命令処理コプロセッサ２００は、上位層プロセッサ１００からの指示に従って動作するコプロセッサである。プロセッサ命令デコーダ１２０によってコプロセッサ命令が検出されると、コプロセッサ命令キュー２１０を介してマイクロ命令処理コプロセッサ２００にコプロセッサ命令の実行が指示される。マイクロ命令処理コプロセッサ２００による実行結果は、ライトバックバッファ２５０を介して汎用レジスタファイル１４０にライトバックされる。
【００３３】
図２は、本発明の第１の実施の形態におけるマイクロ命令処理コプロセッサ２００の構成例を示す図である。このマイクロ命令処理コプロセッサ２００は、コプロセッサ命令キュー２１０と、コプロセッサ命令デコーダ２２０と、マイクロプログラムメモリ２３０と、マイクロプログラム実行部２４０と、ライトバックバッファ２５０とを備えている。
【００３４】
コプロセッサ命令キュー２１０は、上位層プロセッサ１００から発行されたコプロセッサ命令を保持する先入れ先出し（ＦＩＦＯ：First-In First-Out）キューである。このコプロセッサ命令キュー２１０に保持されたコプロセッサ命令は、順番にコプロセッサ命令デコーダ２２０に供給される。なお、このコプロセッサ命令キュー２１０に保持されるコプロセッサ命令は、上位層プロセッサ１００におけるコプロセッサ命令とは必ずしも同じではなく、必要な汎用レジスタの値が埋め込まれている場合もある。
【００３５】
コプロセッサ命令デコーダ２２０は、コプロセッサ命令キュー２１０から供給されたコプロセッサ命令をデコードするデコーダである。このコプロセッサ命令デコーダ２２０によるデコードの結果、マイクロプログラムメモリ２３０におけるマイクロプログラム番号（ＭＰＩＤ）、データおよび制御信号が生成される。
【００３６】
マイクロプログラムメモリ２３０は、マイクロプログラム群を保持するメモリである。このマイクロプログラムメモリ２３０は、マイクロプログラムＲＯＭ２３１と、マイクロプログラムレジスタＡ乃至Ｄ（２３２乃至２３５）とを備える。マイクロプログラムＲＯＭ２３１は、予め設定されたマイクロプログラム群を保持するメモリであり、基本的には書き換えることはできない。一方、マイクロプログラムレジスタＡ乃至Ｄ（２３２乃至２３５）は、ユーザによって定義可能なマイクロプログラム群を保持するメモリであり、マイクロプログラム更新命令によって更新できるようになっている。マイクロプログラムメモリ２３０は、コプロセッサ命令デコーダ２２０からマイクロプログラム番号が与えられると、対応するアドレスに保持されているマイクロプログラムを、信号線２３９を介してマイクロプログラム実行部２４０に供給する。
【００３７】
マイクロプログラム実行部２４０は、マイクロプログラムメモリ２３０から供給されたマイクロプログラムを実行するものである。このマイクロプログラム実行部２４０は、その実行結果をライトバックバッファ２５０に出力する。この第１の実施の形態では、マイクロプログラム実行部２４０は、スタックマシン構成を前提としている。なお、マイクロプログラム実行部２４０は、特許請求の範囲に記載の命令実行部の一例である。このマイクロプログラム実行部２４０の詳細については後述する。
【００３８】
ライトバックバッファ２５０は、マイクロプログラム実行部２４０から出力された実行結果を保持するバッファである。このライトバックバッファ２５０を介して、マイクロ命令処理コプロセッサ２００における実行結果が上位層プロセッサ１００の汎用レジスタファイル１４０にライトバックされる。
【００３９】
図３は、本発明の第１の実施の形態におけるマイクロプログラムメモリ２３０に保持される各マイクロプログラムの構造の一例を示す図である。この例では、各マイクロプログラムは、１６個のマイクロ命令（ｍｉ０乃至１５）４１１と、ライトバック形式（ｍｗｆ）４１８と、定数（ｍｌ２）４１９とから構成される。
【００４０】
マイクロ命令４１１は、それぞれ５ビットのデータ構造を有する。このマイクロ命令４１１は、若い番号（ｍｉ０）から順番に実行されるが、後述のように、複数のマイクロ命令が同時に実行される場合もある。マイクロ命令４１１は、同図（ａ）に示すように４マイクロ命令ずつのセグメントに分割される。すなわち、マイクロ命令＃０乃至３はセグメント＃０に属し、マイクロ命令＃４乃至７はセグメント＃１に属し、マイクロ命令＃８乃至１１はセグメント＃２に属し、マイクロ命令＃１２乃至１５はセグメント＃３に属する。
【００４１】
ライトバック形式４１８は、同図（ｂ）に示すように、２ビットのデータ構造を有し、上位層プロセッサ１００にライトバックする際のデータ形式について規定する。このライトバック形式４１８の詳細については後述する。
【００４２】
定数４１９は、同図（ｃ）に示すように、３２ビットのデータ構造を有し、定数データとして各マイクロ命令から参照される。
【００４３】
この第１の実施の形態では、マイクロプログラム実行部２４０の構成としてスタックマシンを想定することにより、オペランドを不要とし、分岐先アドレス指定を不要として、５ビット固定長のマイクロ命令を定義している。また、命令語長を短くできることと、データ操作が小規模のワーキングレジスタに限定されることにより、回路を簡素に実現でき、高周波数動作が可能となっている。
【００４４】
図４は、本発明の第１の実施の形態におけるマイクロプログラム実行部２４０の構成例を示す図である。このマイクロプログラム実行部２４０は、マイクロ命令バッファ２４１と、ワーキングレジスタ２４２と、マイクロプログラム命令デコーダ５００と、ライトバック形式レジスタ２４３と、演算器２４４−１乃至Ｎと、セレクタ２４５と、実行タイプ判別部２４６と、ライトバックデータ加工部２４７とを備える。
【００４５】
マイクロ命令バッファ２４１は、マイクロプログラムメモリ２３０から供給されたマイクロプログラムのうち、１６個のマイクロ命令４１１を保持するバッファである。このマイクロ命令バッファ２４１に保持されたマイクロ命令４１１は、信号線６０９を介してマイクロプログラム命令デコーダ５００に供給される。
【００４６】
ワーキングレジスタ２４２は、マイクロプログラムの実行に必要な作業用のワーキングデータを保持するレジスタである。このワーキングデータのデータ構造例については後述する。なお、ワーキングレジスタ２４２は、特許請求の範囲に記載のデータ保持部の一例である。
【００４７】
マイクロプログラム命令デコーダ５００は、マイクロ命令バッファ２４１に保持されたマイクロ命令４１１をデコードするものである。このマイクロプログラム命令デコーダ５００におけるデコードの際には、ワーキングレジスタ２４２に保持されるワーキングデータが参照される。このデコードの結果、機能タイプおよび実行タイプが決定され、それぞれ信号線５１９および５２９を介して出力される。機能タイプは命令実行のための機能に関する種別であり、実行タイプは命令実行後のマイクロ命令バッファ２４１の更新やライトバックに関する種別である。なお、マイクロプログラム命令デコーダ５００は、特許請求の範囲に記載のデコーダの一例である。
【００４８】
ライトバック形式レジスタ２４３は、マイクロプログラムメモリ２３０から供給されたマイクロプログラムのうち、ライトバック形式４１８を保持するレジスタである。このライトバック形式レジスタ２４３に保持されたライトバック形式は、マイクロプログラムが実行完了するまで変化しない。そして、マイクロプログラムの実行完了の際にライトバックデータ加工部２４７に供給される。なお、ライトバック形式レジスタ２４３は、特許請求の範囲に記載のデータ形式指定部の一例である。
【００４９】
演算器２４４−１乃至Ｎは、並列に動作可能なＮ個のＳＩＭＤ（Single Instruction Multiple Data）型演算器である。各演算器は、それぞれ異なる機能の演算を実行するものであってもよく、また、同じ機能の演算を実行するものであってもよい。なお、以下では、演算器２４４−１乃至Ｎを演算器２４４と総称する場合がある。
【００５０】
セレクタ２４５は、Ｎ個の演算器２４４における演算結果の中から、マイクロプログラム命令デコーダ５００によるデコード結果である機能タイプによって指定されたものを選択して、ワーキングレジスタ２４２に供給する選択器である。後述するように、機能タイプによっては、複数の演算結果が選択される場合もある。
【００５１】
実行タイプ判別部２４６は、マイクロプログラム命令デコーダ５００によるデコード結果である実行タイプを判別するものである。すなわち、実行タイプがマイクロプログラムの終了を表すＲＥＴ命令を示しているか否かを判別し、ＲＥＴ命令であればライトバックデータ加工部２４７に対してライトバックデータの加工を促す。
【００５２】
ライトバックデータ加工部２４７は、実行タイプ判別部２４６から指示されたタイミングに従って、ワーキングレジスタ２４２に保持されるデータを加工して、信号線２４８にライトバックデータとして出力するものである。このライトバックデータ加工部２４７におけるデータの加工は、ライトバック形式レジスタ２４３から供給されたライトバック形式に従う。また、有効なライトバックデータが出力された際には、ライトバック有効信号が信号線２４９から出力される。
【００５３】
図５は、本発明の第１の実施の形態におけるワーキングレジスタ２４２に保持されるワーキングデータの構造の一例を示す図である。この第１の実施の形態では、マイクロプログラム実行部２４０はスタックマシンを前提としているため、ワーキングデータは、それぞれ３２ビット幅の、４段のスタックレジスタ４２１乃至４２４と、３つのローカル変数レジスタ４２５乃至４２７とを備えている。これらレジスタは、それぞれ同時にリードまたはライトできるように構成される。
【００５４】
スタックレジスタ４２１乃至４２４は、スタックレジスタ＃０乃至３（ＳＴＫ０乃至３）と称され、若い番号から新たなデータがプッシュされ、その度に全体としてデータがシフトされていく。すなわち、何もデータが保持されていない状態で１つ目のデータがプッシュされると、スタックレジスタ＃０に１つ目のデータが保持される。次に２つ目のデータがプッシュされると、スタックレジスタ＃０に２つ目のデータが保持されるとともに、１つ目のデータはスタックレジスタ＃１にシフトされる。このようにプッシュの度にデータが下方にシフトされていくが、全てのスタックレジスタ＃０乃至３にデータが保持されている状態で新たにデータがプッシュされた場合には、全体的にシフトされた結果、スタックレジスタ＃３に保持されていたデータは消滅する。
【００５５】
一方、ポップ動作の場合、スタックレジスタ＃０に保持されたデータが出力され、全体的に上方にシフトされる。スタックレジスタ＃３には以前のデータがそのまま保持されるものとする。
【００５６】
マイクロプログラムの実行終了時においてスタックレジスタ＃０（４２１）に保持されているデータは、ライトバックデータ加工部２４７に供給され、ライトバックデータの生成のために用いられる。
【００５７】
なお、スタックレジスタ４２１乃至４２４は、特許請求の範囲に記載のスタックの一例である。
【００５８】
ローカル変数レジスタ４２５乃至４２７は、単独のレジスタとして用いられる領域である。これらローカル変数レジスタ４２５乃至４２７は、ロードマイクロ命令によって値をスタックレジスタ＃０にプッシュすることができ、また、ストアマイクロ命令によってスタックレジスタ＃０からポップされた値を保持することができる。ローカル変数レジスタ４２７は、特別なレジスタであり、マイクロプログラムメモリ２３０からマイクロプログラムが供給された際、そのマイクロプログラムに含まれる定数（ｍｌ２）４１９が設定されるようになっている。これにより、マイクロ命令４１１において定数４１９を用いることができるようになる。
【００５９】
図６は、本発明の第１の実施の形態におけるライトバック形式レジスタ２４３に保持されるライトバック形式とデータ加工の関係の一例を示す図である。ここでは、ライトバック形式として２ビットを想定しているため、「０」から「３」の値を採る。このライトバック形式に応じて、スタックレジスタ＃０に保持された３２ビットデータＳＴＫ０に対して、ライトバックデータ加工部２４７において以下のようなデータ加工が行われる。
【００６０】
まず、ライトバック形式が「０」の場合、スタックレジスタ＃０に保持されたデータＳＴＫ０［３１：０］がそのままライトバックデータとして出力される。また、ライトバック形式が「１」の場合、ＳＴＫ０［３１：０］のうち第８乃至１５ビットの８ビットと、第２６乃至３１ビットの８ビットに「０」が埋め込まれた値がライトバックデータとして出力される。また、ライトバック形式が「２」の場合、ＳＴＫ０［１５：０］が下位１６ビットとされ、上位１６ビットには「０」が埋め込まれた値がライトバックデータとして出力される。また、ライトバック形式が「３」の場合、ＳＴＫ０［３１：１６］が下位１６ビットとされ、上位１６ビットには「０」が埋め込まれた値がライトバックデータとして出力される。これにより、上位層プロセッサ１００において別途演算を行うことなく、目的のデータ形式によって演算結果が得られるようになる。
【００６１】
図７は、本発明の第１の実施の形態におけるマイクロ命令バッファ２４１の構成例を示す図である。このマイクロ命令バッファ２４１は、マイクロ命令の命令列を保持する命令バッファ６１０と、マイクロ命令の命令列を更新する命令列更新制御部６０１とを備える。
【００６２】
命令バッファ６１０は、４つのセグメント＃０乃至３のそれぞれに対応して命令バッファ６１０−０乃至３を備える。各命令バッファ６１０−０乃至３は、それぞれ４つずつマイクロ命令を保持するよう構成される。この命令バッファ６１０−０乃至３のそれぞれの構成については後述する。
【００６３】
命令列更新制御部６０１は、セグメント更新セレクタ６２０と、実行タイプ判別部６３０と、セレクタ６４０−０乃至３とを備える。
【００６４】
セグメント更新セレクタ６２０は、命令バッファ６１０−０および１に保持される８つのマイクロ命令ｓｅｇ０およびｓｅｇ１の中から、次に命令バッファ６１０−０に保持される候補となる４つのマイクロ命令ｎｓｅｇ０を選択する選択器である。すなわち、セグメント更新セレクタ６２０による更新対象となるセグメントは、セグメント＃０である。このセグメント更新セレクタ６２０の構成例については後述する。
【００６５】
実行タイプ判別部６３０は、マイクロプログラム命令デコーダ５００によるデコード結果である実行タイプを判別するものである。すなわち、実行タイプが条件分岐命令であるＢＲ命令であれば「２」、無条件分岐命令であるＪＰであれば「１」、それ以外であれば「０」を選択信号ｓｅｇｓｆｔとして、各セレクタ６４０−０乃至３に供給する。
【００６６】
セレクタ６４０−０乃至３は、それぞれ対応する命令バッファ６１０−０乃至３に次に保持される４つのマイクロ命令を選択する選択器である。セレクタ６４０−２および３には、４つのＲＥＴ命令が入力されているが、これについては分岐の種類の説明の際に詳述する。
【００６７】
このマイクロ命令バッファ２４１は、セグメント＃０に対応する命令バッファ６１０−０の先頭から順番に、信号線６０９を介してマイクロ命令をマイクロプログラム命令デコーダ５００に供給する。
【００６８】
図８は、本発明の第１の実施の形態における命令バッファ６１０−０乃至３の各々の構成例を示す図である。この命令バッファ６１０−０乃至３の各々は、４つのセレクタ６１１−ａ乃至ｄおよび４つのレジスタ６１２−ａ乃至ｄを備える。
【００６９】
セレクタ６１１−ａ乃至ｄの各々は、マイクロプログラムメモリ２３０からのマイクロ命令とセレクタ６４０−０乃至３の出力との何れか一方を選択する選択器である。このセレクタ６１１−０乃至３の選択信号は、コプロセッサ命令デコーダ２２０から信号線２２８を介して供給される。
【００７０】
レジスタ６１２−ａ乃至ｄの各々は、それぞれ対応するセレクタ６１１−ａ乃至ｄによって選択された５ビットのマイクロ命令を保持するレジスタである。これらレジスタ６１２−ａ乃至ｄに保持されたマイクロ命令は、信号線６１９−０乃至３を介して出力される。
【００７１】
図９は、本発明の第１の実施の形態におけるセグメント更新セレクタ６２０の構成例を示す図である。セグメント更新セレクタ６２０は、命令バッファ６１０−０および１に保持される８つのマイクロ命令ｓｅｇ０およびｓｅｇ１の中から、次に命令バッファ６１０−０に保持される候補となる４つのマイクロ命令ｎｓｅｇ０を選択する選択器である。このセグメント更新セレクタ６２０は、命令バッファ状態フラグ６２１と、命令バッファ状態フラグ遷移決定部６２２と、セレクタ６２３とを備えている。
【００７２】
命令バッファ状態フラグ６２１は、命令バッファ６１０−０に保持される４つのマイクロ命令について、各命令が命令バッファ６１０−０にのみ保持される命令であるか否かを示すフラグである。命令バッファ６１０−０にはセグメント＃０に属するマイクロ命令が保持され、命令バッファ６１０−１にはセグメント＃１に属するマイクロ命令が保持されるのが通常であるが、後述のように、シフト動作を簡略化するために例外的な状態が生じる場合がある。そこで、命令バッファ６１０−０に保持される４つのマイクロ命令については、他の命令バッファ６１０−１乃至３に重複して保持されているか否かを判別するために、この命令バッファ状態フラグ６２１が設けられている。
【００７３】
命令バッファ状態フラグ遷移決定部６２２は、命令バッファ状態フラグ６２１の内容およびマイクロプログラム命令デコーダ５００によりデコードされた実行タイプに基づいて、命令バッファ状態フラグ６２１の更新値を決定するものである。また、この命令バッファ状態フラグ遷移決定部６２２は、セレクタ６２３におけるシフト量も決定する。ここでは、実行タイプとして、条件分岐命令であるＢＲ命令において分岐が成立したことを示すものとする。この命令バッファ状態フラグ遷移決定部６２２による遷移の詳細については後述する。
【００７４】
セレクタ６２３は、命令バッファ状態フラグ遷移決定部６２２により決定されたシフト量に従って、命令バッファ６１０−０および１に保持される８つのマイクロ命令をシフトするように選択する選択器である。このセレクタ６２３の出力が、セレクタ６４０−０の入力「０」に供給される。
【００７５】
［マイクロ命令バッファの状態遷移］
図１０は、本発明の第１の実施の形態による情報処理システムにおけるマイクロ命令セットの一例を示す図である。この例では、３２種のマイクロ命令を想定している。同図において、スタック状態は、「＝＞」の左側にマイクロ命令実行前のスタック状態、「＝＞」の右側にマイクロ命令実行後のスタック状態を示している。片方のスタック状態において、右側がスタックトップを表している。オペレーションは、マイクロ命令による処理内容を示している。機能タイプは命令実行のための機能に関する種別を示している。
【００７６】
ＲＥＴ命令（命令コード＝０）は、実行中のマイクロプログラムを終了するためのリターン命令であり、無条件分岐命令の一種である。このＲＥＴ命令の実行後は、スタック状態に変化はない。ＪＰ命令（命令コード＝１）は、実行中のセグメントの次のセグメントの先頭のマイクロ命令にジャンプするための無条件分岐命令である。このＪＰ命令の実行後は、スタック状態に変化はない。なお、ＲＥＴ命令およびＪＰ命令の機能タイプは「ＮＯＰ」であり、これはデータの操作に関しては実体的な機能を有しない命令であることを意味している。
【００７７】
ＢＲ命令（命令コード＝２）は、分岐条件成立時に、実行中のセグメントから２つ先のセグメントの先頭のマイクロ命令に分岐するための条件分岐命令である。このＢＲ命令の機能タイプは「ＰＯＰ」であり、これはデータの操作に関してはスタックレジスタからのポップが実体的な機能であることを表している。すなわち、分岐条件成立の有無を判断するために、スタックレジスタから１つのデータ（Ｎ１）がポップされる。ポップされたデータ（Ｎ１）のＬＳＢが「１」のとき分岐が発生し、「０」のとき分岐は発生しない。
【００７８】
ＮＯＴ命令（命令コード＝３）は、３２ビットデータの上位および下位の１６ビットデータのそれぞれについて論理反転を実行する論理反転命令である。スタックレジスタから１つの３２ビットデータ（Ｎ１）がポップされ、３２ビットの実行結果データ（Ｒ１）がスタックレジスタにプッシュされる。なお、このＮＯＴ命令以降の各命令の機能タイプは命令の名称と同様であり、データの操作の内容を示している。
【００７９】
ＮＥＧ命令（命令コード＝４）は、３２ビットデータの上位および下位の１６ビットデータのそれぞれについて符号反転を実行する符号反転命令である。スタックレジスタから１つの３２ビットデータ（Ｎ１）がポップされ、３２ビットの実行結果データ（Ｒ１）がスタックレジスタにプッシュされる。
【００８０】
ＡＢＳ命令（命令コード＝５）は、３２ビットデータの上位および下位の１６ビットデータのそれぞれについて絶対値を生成する絶対値生成命令である。スタックレジスタから１つの３２ビットデータ（Ｎ１）がポップされ、３２ビットの実行結果データ（Ｒ１）がスタックレジスタにプッシュされる。
【００８１】
ＭＵＬ２命令（命令コード＝６）は、３２ビットデータの上位および下位の１６ビットデータのそれぞれについて１ビット算術左シフトする２倍値生成命令である。スタックレジスタから１つの３２ビットデータ（Ｎ１）がポップされ、３２ビットの実行結果データ（Ｒ１）がスタックレジスタにプッシュされる。
【００８２】
ＤＩＶ２命令（命令コード＝７）は、３２ビットデータの上位および下位の１６ビットデータのそれぞれについて１ビット算術右シフトする半値生成命令である。スタックレジスタから１つの３２ビットデータ（Ｎ１）がポップされ、３２ビットの実行結果データ（Ｒ１）がスタックレジスタにプッシュされる。
【００８３】
ＯＲＬＵ命令（命令コード＝８）は、３２ビットデータの上位および下位の１６ビットデータ同士の論理和を生成して、その結果を３２ビットデータの上位および下位の１６ビットデータとして分配して出力する論理和分配命令である。すなわち、複数の演算器からの演算結果すべての論理和演算結果を全ての演算器の結果とするものである。スタックレジスタから１つの３２ビットデータ（Ｎ１）がポップされ、３２ビットの実行結果データ（Ｒ１）がスタックレジスタにプッシュされる。
【００８４】
ＬＵ命令（命令コード＝９）は、３２ビットデータの下位１６ビットデータを、３２ビットデータの上位および下位の１６ビットデータとして分配して出力する分配命令である。すなわち、複数の演算器からの演算結果の中から予め決められた１つの演算結果を全ての演算器の結果とするものである。スタックレジスタから１つの３２ビットデータ（Ｎ１）がポップされ、３２ビットの実行結果データ（Ｒ１）がスタックレジスタにプッシュされる。
【００８５】
ＧＴ命令（命令コード＝１０）は、２つの３２ビットデータ（Ｎ１、Ｎ２）の間で上位および下位の１６ビットデータに分けてそれぞれ算術比較を行い、Ｎ１＞Ｎ２であれば「１」、それ以外であれば「０」を出力する算術比較命令である。スタックレジスタから２つの３２ビットデータが、Ｎ２、Ｎ１の順番でポップされ、３２ビットの実行結果データ（Ｒ１）がスタックレジスタにプッシュされる。
【００８６】
ＧＥ命令（命令コード＝１１）は、２つの３２ビットデータ（Ｎ１、Ｎ２）の間で上位および下位の１６ビットデータに分けてそれぞれ算術比較を行い、Ｎ１≧Ｎ２であれば「１」、それ以外であれば「０」を出力する算術比較命令である。スタックレジスタから２つの３２ビットデータが、Ｎ２、Ｎ１の順番でポップされ、３２ビットの実行結果データ（Ｒ１）がスタックレジスタにプッシュされる。
【００８７】
ＥＱ命令（命令コード＝１２）は、２つの３２ビットデータ（Ｎ１、Ｎ２）の間で上位および下位の１６ビットデータに分けてそれぞれ算術比較を行い、Ｎ１＝Ｎ２であれば「１」、それ以外であれば「０」を出力する算術比較命令である。スタックレジスタから２つの３２ビットデータが、Ｎ２、Ｎ１の順番でポップされ、３２ビットの実行結果データ（Ｒ１）がスタックレジスタにプッシュされる。
【００８８】
ＡＮＤ命令（命令コード＝１３）は、２つの３２ビットデータ（Ｎ１、Ｎ２）の間で上位および下位の１６ビットデータに分けてそれぞれ論理積を生成する論理積生成命令である。スタックレジスタから２つの３２ビットデータが、Ｎ２、Ｎ１の順番でポップされ、３２ビットの実行結果データ（Ｒ１）がスタックレジスタにプッシュされる。
【００８９】
ＯＲ命令（命令コード＝１４）は、２つの３２ビットデータ（Ｎ１、Ｎ２）の間で上位および下位の１６ビットデータに分けてそれぞれ論理和を生成する論理和生成命令である。スタックレジスタから２つの３２ビットデータが、Ｎ２、Ｎ１の順番でポップされ、３２ビットの実行結果データ（Ｒ１）がスタックレジスタにプッシュされる。
【００９０】
ＸＯＲ命令（命令コード＝１５）は、２つの３２ビットデータ（Ｎ１、Ｎ２）の間で上位および下位の１６ビットデータに分けてそれぞれ排他的論理和を生成する排他的論理和生成命令である。スタックレジスタから２つの３２ビットデータが、Ｎ２、Ｎ１の順番でポップされ、３２ビットの実行結果データ（Ｒ１）がスタックレジスタにプッシュされる。
【００９１】
ＡＤＤ命令（命令コード＝１６）は、２つの３２ビットデータ（Ｎ１、Ｎ２）の間で上位および下位の１６ビットデータに分けてそれぞれ算術加算を実行する算術加算命令である。スタックレジスタから２つの３２ビットデータが、Ｎ２、Ｎ１の順番でポップされ、３２ビットの実行結果データ（Ｒ１）がスタックレジスタにプッシュされる。
【００９２】
ＳＵＢ命令（命令コード＝１７）は、２つの３２ビットデータ（Ｎ１、Ｎ２）の間で上位および下位の１６ビットデータに分けてそれぞれ算術減算（Ｎ１−Ｎ２）を実行する算術減算命令である。スタックレジスタから２つの３２ビットデータが、Ｎ２、Ｎ１の順番でポップされ、３２ビットの実行結果データ（Ｒ１）がスタックレジスタにプッシュされる。
【００９３】
ＰＡＲ命令（命令コード＝１８）は、２つの３２ビットデータ（Ｎ１、Ｎ２）の下位１６ビットを組み合わせて３２ビットデータとして出力するパック化命令である。スタックレジスタから２つの３２ビットデータが、Ｎ２、Ｎ１の順番でポップされ、３２ビットの実行結果データ（Ｒ１）がスタックレジスタにプッシュされる。一般的には、スタックトップから順番にポップした複数のデータの予めきめられた特定のビット位置のデータ、または、特定のスタックのデータを連結して１つのデータとしてスタックトップへプッシュするものである。
【００９４】
ＤＵＰ命令（命令コード＝１９）は、１つの３２ビットデータ（Ｎ１）をスタックレジスタからポップして、２つの３２ビットデータ（Ｒ１、Ｒ２）となるようにスタックレジスタに２回プッシュする複製命令である。
【００９５】
ＳＥＲ命令（命令コード＝２０）は、１つの３２ビットデータ（Ｎ１）の上位１６ビットを３２ビットデータ（Ｒ１）の上位および下位１６ビットとし、下位１６ビットを別の３２ビットデータ（Ｒ２）の上位および下位１６ビットとするパック化命令である。ソースとなる３２ビットデータ（Ｎ１）はスタックレジスタからポップされ、２つの３２ビットデータは、Ｒ１、Ｒ２の順番でスタックレジスタからプッシュされる。一般的には、スタックトップのデータを複数のデータに分割して、各分割データを決められた方法で加工した各データをスタックトップから順番にプッシュするものである。
【００９６】
ＲＯＴ命令（命令コード＝２１）は、３つの３２ビットデータをスタックレジスタからポップして、トップに保持されていたデータが３番目に移動するようにスタックレジスタに３回プッシュする回転命令である。
【００９７】
ＳＷＡＰ命令（命令コード＝２２）は、２つの３２ビットデータをスタックレジスタからポップして、スタックレジスタ内の保持順序が逆になるように２回プッシュする交換命令である。
【００９８】
ＳＯＲＴ命令（命令コード＝２３）は、２つの３２ビットデータ（Ｎ１、Ｎ２）の間で上位および下位１６ビットのそれぞれについて大小関係を比較して、小さい方をＲ１として、大きい方をＲ２とするソート命令である。スタックレジスタから２つの３２ビットデータがＮ２、Ｎ１の順番でポップされ、２つの３２ビットの実行結果データがＲ１、Ｒ２の順番でスタックレジスタにプッシュされる。すなわち、スタックレジスタのトップと２番目のデータをポップして、その２つのデータから１つを大小関係に従って選択する。そして、選択されなかった方のデータをプッシュし、選択したデータをプッシュする。
【００９９】
ＺＥＲＯ命令（命令コード＝２４）は、上位および下位１６ビットにそれぞれ「０」を設定した３２ビットデータを新たにスタックレジスタにプッシュするゼロプッシュ命令である。ＯＮＥ命令（命令コード＝２５）は、上位および下位１６ビットにそれぞれ「１」を設定した３２ビットデータを新たにスタックレジスタにプッシュするワンプッシュ命令である。
【０１００】
ＬＤ０命令（命令コード＝２６）は、ローカル変数レジスタ＃０（４２５）に保持される値を新たにスタックレジスタにプッシュするロード０命令である。ＬＤ１命令（命令コード＝２７）は、ローカル変数レジスタ＃１（４２６）に保持される値を新たにスタックレジスタにプッシュするロード１命令である。ＬＤ２命令（命令コード＝２８）は、ローカル変数レジスタ＃２（４２７）に保持される値を新たにスタックレジスタにプッシュするロード２命令である。
【０１０１】
ＳＴ０命令（命令コード＝２９）は、スタックレジスタからポップしたデータをローカル変数レジスタ＃０（４２５）に保持させるストア０命令である。ＳＴ１命令（命令コード＝３０）は、スタックレジスタからポップしたデータをローカル変数レジスタ＃１（４２６）に保持させるストア１命令である。ＳＴ２命令（命令コード＝３１）は、スタックレジスタからポップしたデータをローカル変数レジスタ＃２（４２７）に保持させるストア２命令である。
【０１０２】
図１１は、本発明の第１の実施の形態による情報処理システムにおける分岐命令の分岐先の例を示す図である。上述のように、マイクロプログラムは４つのセグメント、１６個のマイクロ命令から構成されるが、分岐命令の動作を統一するために、仮想的な２つのセグメントを仮定する。すなわち、それぞれ４つのＲＥＴ命令からなるセグメント＃４および＃５を仮定する。ただし、これらセグメント＃４および＃５は、マイクロプログラムメモリ２３０に保持する必要はなく、図７により説明したように、セレクタ６４０−２および３への入力を工夫すれば簡単に実現することができる。
【０１０３】
図１１（ａ）は、マイクロプログラム中にＲＥＴ命令が存在した場合の分岐先を示している。通常の命令であれば、マイクロ命令の若い番号から順に実行されるが、ＲＥＴ命令が実行されると、そのマイクロプログラムは終了する。１６番目のマイクロ命令が通常の命令であっても、仮想的なセグメント＃４の先頭のＲＥＴ命令を仮定することによって、マイクロプログラムを終了させることができる。
【０１０４】
図１１（ｂ）は、マイクロプログラム中にＪＰ命令が存在した場合の分岐先を示している。通常の命令であれば、マイクロ命令の若い番号から順に実行されるが、ＪＰ命令が実行されると、次のセグメントの先頭のマイクロ命令に分岐する。セグメント＃３の中でＪＰ命令が実行された場合であっても、仮想的なセグメント＃４の先頭のＲＥＴ命令を仮定することによって、マイクロプログラムを終了させることができる。
【０１０５】
図１１（ｃ）は、マイクロプログラム中のＢＲ命令が分岐成立した場合の分岐先を示している。通常の命令であれば、マイクロ命令の若い番号から順に実行されるが、ＢＲ命令の分岐条件が成立すると、２つ先のセグメントの先頭のマイクロ命令に分岐する。セグメント＃２または＃３の中でＢＲ命令の分岐が成立した場合であっても、仮想的なセグメント＃３または＃４の先頭のＲＥＴ命令を仮定することによって、マイクロプログラムを終了させることができる。
【０１０６】
すなわち、分岐命令によって明示的に分岐先マイクロアドレスを指定しないことで、マイクロプログラムの命令数を増やした際に分岐先アドレスのビット数に変更があっても、分岐命令の仕様を変更する必要がなくなる。したがって、１つ先のセグメントの先頭へ飛ぶか、２つ先のセグメントの先頭へ飛ぶか、といった単純なルールを変更する必要がない。このように、本発明の第１の実施の形態では、マイクロプログラムの命令数拡張に対するスケーラビリティがある。
【０１０７】
また、本発明の第１の実施の形態によれば、セグメント中の分岐命令の分岐先は３種類のみのため、プリフェッチを効率良く行うことができる。すなわち、次の命令、次のセグメントの先頭命令、２つ先のセグメントの先頭命令の３つの命令を参照できるように想定しておけばよく、回路構成も簡単化することができる。
【０１０８】
さらに、本発明の第１の実施の形態によれば、分岐命令の分岐先を前方向に制限することにより、デッドロックを防止することができる。マイクロプログラムレジスタ２３２乃至２３５にユーザ定義によるマイクロプログラムが格納可能となっているが、通常のプロセッサ命令と同じように後方向への分岐を許してしまうと、無限ループによるデッドロックが発生するおそれがある。そこで、本発明の第１の実施の形態では、そのようなデッドロックを防止するために、分岐先を常に前方向に制限している。
【０１０９】
図１２は、本発明の第１の実施の形態におけるマイクロ命令バッファ２４１の状態を示す図である。マイクロ命令実行後のマイクロ命令バッファ２４１の状態は、実行タイプによって異なる。実行タイプがｘ１、ｘ２、ｘ３、ｘ４は、それぞれ１命令実行、２命令同時実行、３命令同時実行、４命令同時実行の意味であり、分岐も起こらないことを示している。実行タイプがＲＥＴ、ＪＰ、ＢＲは、ＲＥＴ命令、ＪＰ命令、分岐条件成立時のＢＲ命令の実行であることを示している。
【０１１０】
実行タイプがｘ１、ｘ２、ｘ３、ｘ４、ＲＥＴの場合には、先頭のセグメント以外はそのままの状態を維持しており、先頭のセグメントのみが実行に合わせてシフトされていく。シフトの際、次のセグメントからマイクロ命令が先頭のセグメントにシフトインされるが、その場合でも先頭のセグメント以外に変化はない。図９により説明した命令バッファ状態フラグ６２１は、命令バッファ６１０−０に保持される４つのマイクロ命令について、各命令が命令バッファ６１０−０にのみ保持される命令であるか否かを示している。
【０１１１】
これにより、マイクロ命令バッファ２４１全体のシフトを命令実行毎に行わないようにして、セグメント単位のシフトが行われるまでは命令バッファ状態フラグ６２１によって先頭セグメントとそれ以外とを区別できるようにしている。
【０１１２】
図１３乃至１６は、本発明の第１の実施の形態における命令バッファ状態フラグ６２１の状態遷移の一例を示す図である。図中、「Ａ／Ｂ／Ｃ」の形式は、Ａが実行タイプ、Ｂがセグメント単位のシフト数、Ｃがセグメント更新セレクタ６２０におけるマイクロ命令単位のシフト数を示している。Ａについて、実行タイプの「ＢＲ１」は、ＢＲ命令において分岐が成立した場合を示している。また、Ｂについて、「０」であれば、セグメント単位のシフトはせず、「１」であれば１セグメント隣へセグメント単位でシフトするという意味である。「２」であれば２セグメント隣へシフトする。また、Ｃについて、「０」であれば、マイクロ命令単位のシフトはせず、「１」であれば１マイクロ命令分シフトするという意味である。「２」であれば２マイクロ命令分シフトする。
【０１１３】
図１３は、１サイクル当り１命令ずつ実行されることを想定したものである。図１４は、１サイクル当り最大２命令実行されることを想定したものである。図１５は、１サイクル当り最大３命令実行されることを想定したものである。図１６は、１サイクル当り最大４命令実行されることを想定したものである。マイクロ命令を最大何命令まで同時に実行できるようにするかは、回路面積と最高動作周波数とのトレードオフであり、用途に応じて決定される。図１３のように枝が少ないものほど回路はシンプルで回路面積が小さく最高動作周波数も高い。以下では、１サイクル当り１命令ずつ実行される場合と１サイクル当り最大３命令実行される場合に関して、マイクロ命令のデコードの観点から説明する。
【０１１４】
［マイクロ命令のデコード］
図１７は、本発明の第１の実施の形態におけるマイクロプログラム命令デコーダ５００の第１の構成例を示す図である。このマイクロプログラム命令デコーダ５００の第１の構成例は、１サイクル当り１命令ずつ実行されることを想定したものである。このマイクロプログラム命令デコーダ５００の第１の構成例は、機能タイプ決定部５１０と、実行タイプ決定部５２０とを備える。
【０１１５】
機能タイプ決定部５１０は、命令実行のための機能に関する種別である機能タイプを決定するものである。この第１の構成例では、機能タイプ決定部５１０は、マイクロ命令バッファ２４１の先頭の命令ｉ０（５０１）と、スタックレジスタからポップされたデータ（５０５）とから機能タイプ５１９を決定する。
【０１１６】
実行タイプ決定部５２０は、命令実行後のマイクロ命令バッファ２４１の更新やライトバックに関する種別である実行タイプを決定するものである。この第１の構成例では、実行タイプ決定部５２０は、マイクロ命令バッファ２４１の先頭の命令ｉ０（５０１）と、スタックレジスタからポップされたデータ（５０５）とから実行タイプ５２９を決定する。
【０１１７】
図１８は、本発明の第１の実施の形態における機能タイプ決定部５１０の第１の構成例による処理手順を示す図である。
【０１１８】
まず、マイクロ命令バッファ２４１の先頭の命令ｉ０（５０１）の命令コードが判定され（ステップＳ９１１）、ＲＥＴ命令またはＪＰ命令であれば、機能タイプは「ＮＯＰ」であると決定される（ステップＳ９１４）。
【０１１９】
また、ＢＲ命令であれば、スタックレジスタからポップされたデータ（５０５）のＬＳＢが「１」のとき（ステップＳ９１２）、機能タイプは「ＰＯＰ」であると決定される（ステップＳ９１３）。一方、ＢＲ命令であって、スタックレジスタからポップされたデータ（５０５）のＬＳＢが「０」のとき（ステップＳ９１２）、機能タイプは「ｉ０」であると決定される（ステップＳ９１５）。
【０１２０】
また、これら以外の命令コードであれば（ステップＳ９１１）、機能タイプは「ｉ０」であると決定される（ステップＳ９１５）。なお、機能タイプ「ｉ０」は、１サイクル当り１命令ずつデータ操作を行う機能タイプの総称である。
【０１２１】
図１９は、本発明の第１の実施の形態における実行タイプ決定部５２０の第１の構成例による処理手順を示す図である。
【０１２２】
まず、マイクロ命令バッファ２４１の先頭の命令ｉ０（５０１）の命令コードが判定され（ステップＳ９２１）、ＲＥＴ命令であれば、実行タイプは「ＲＥＴ」であると決定される（ステップＳ９２４）。また、ＪＰ命令であれば、実行タイプは「ＪＰ」であると決定される（ステップＳ９２５）。
【０１２３】
また、ＢＲ命令であれば、スタックレジスタからポップされたデータ（５０５）のＬＳＢが「１」のとき（ステップＳ９２２）、実行タイプは「ＢＲ」であると決定される（ステップＳ９２３）。一方、ＢＲ命令であって、スタックレジスタからポップされたデータ（５０５）のＬＳＢが「０」のとき（ステップＳ９２２）、実行タイプは「ｘ１」であると決定される（ステップＳ９２６）。
【０１２４】
また、これら以外の命令コードであれば（ステップＳ９２１）、実行タイプは「ｘ１」であると決定される（ステップＳ９２６）。
【０１２５】
このように、１サイクル当り１命令ずつ実行されることを想定した場合には、命令デコーダは非常にシンプルなものになる。
【０１２６】
なお、ステップＳ９２３またはＳ９２５は、特許請求の範囲に記載の第１の手順の一例である。また、ステップＳ９２６は、特許請求の範囲に記載の第２の手順の一例である。
【０１２７】
図２０は、本発明の第１の実施の形態におけるマイクロプログラム命令デコーダ５００の第２の構成例を示す図である。このマイクロプログラム命令デコーダ５００の第１の構成例は、１サイクル当り最大３命令実行されることを想定したものである。このマイクロプログラム命令デコーダ５００の第２の構成例は、機能タイプ決定部５１０と、実行タイプ決定部５２０と、演算部５３０とを備える。
【０１２８】
この第２の構成例では、機能タイプ決定部５１０は、マイクロ命令バッファ２４１の先頭から３つの命令ｉ０乃至２（５０１乃至５０３）と、先頭から９番目の命令ｉ８（５０４）とを参照する。さらに、この機能タイプ決定部５１０は、スタックレジスタから最初にポップされたデータ（５０５）と、ローカル変数レジスタ＃０に保持されるデータ（５０７）と、演算部５３０の出力とを参照する。これらを参照することにより、機能タイプ決定部５１０は、機能タイプ５１９を決定する。
【０１２９】
また、この第２の構成例では、実行タイプ決定部５２０は、マイクロ命令バッファ２４１の先頭から２番目の命令ｉ１（５０２）、３番目の命令ｉ２（５０３）および９番目の命令ｉ８（５０４）を参照する。さらに、この実行タイプ決定部５２０は、スタックレジスタから最初にポップされたデータ（５０５）と、ローカル変数レジスタ＃０に保持されるデータ（５０７）と、演算部５３０の出力とを参照する。これらを参照することにより、実行タイプ決定部５２０は、実行タイプ５２９を決定する。
【０１３０】
演算部５３０は、ＧＥ、ＯＲＬＵ、ＢＲを１サイクルで実行する際に、分岐するか否かを示す１ビットであるＧＥ＿ＯＲＬＵ［０］を演算する演算器である。具体的な式は、次式のようになる。
ＧＥ＿ＯＲＬＵ［０］＝（ＳＴＫ１［１５：０］＞＝ＳＴＫ０［１５：０］？
１  ：  ０）  ｜
（ＳＴＫ１［３１：１６］＞＝ＳＴＫ０［３１：１６］？
１  ：  ０）
このＧＥ＿ＯＲＬＵ［０］は、以下に示す図２２および図２５において、それぞれ機能タイプおよび実行タイプの決定に使用される。
【０１３１】
図２１乃至図２３は、本発明の第１の実施の形態における機能タイプ決定部５１０の第２の構成例による処理手順を示す図である。また、図２４および図２５は、本発明の第１の実施の形態における実行タイプ決定部５２０の第２の構成例による処理手順を示す図である。ここでは、各処理手順の詳細な説明は省略するが、第１の構成例と比べて複雑なものになっていることが分かる。
【０１３２】
この処理手順において下線付きで記しているのは、フォールディングを行う命令パターンであり、そのパターンがデコードされるパスに記してある。フォールディングとは、複数の命令を束ねて同時に実行することをいう。例えば、ＡＤＤ＿ＤＩＶ２＿ＲＥＴの場合は、ＡＤＤ命令、ＤＩＶ２命令、ＲＥＴ命令の順番にマイクロ命令が並んでいるときに、これらの命令が同時に１サイクルで実行される。何れの命令を同時に１サイクルで実行するかは命令の組み合わせ毎に予め決められている。
【０１３３】
分岐命令以外の複数のマイクロ命令に続くＲＥＴ命令までを同時に実行する場合、ＲＥＴ命令以外のマイクロ命令の実行後にマイクロプログラムの実行を完了する。分岐命令以外の複数のマイクロ命令に続くＢＲ命令までを同時に実行する場合、分岐条件が成立のときにはＢＲ命令の直前までの命令のみを実行して、次の命令はＢＲ命令から始める。分岐条件が不成立のときにはＢＲ命令も実行して、次の命令はＢＲ命令の直後の命令から始まる。分岐命令以外の複数のマイクロ命令に続くＪＰ命令までを実行する場合、ＪＰ命令の直前までの命令を実行して、次の命令はＪＰ命令が含まれるセグメントの次のセグメントの先頭のマイクロ命令から始まる。
【０１３４】
図２６乃至図４３は、本発明の第１の実施の形態によるマイクロ命令セットにおける各マイクロ命令のデータ操作例を示す図である。各図において、上部にはマイクロ命令の名称が示されている。また、ＳＴＫ０乃至３は命令実行前のスタックレジスタ４２１乃至４２４の値を、Ｌ０乃至２は命令実行前のローカル変数レジスタ４２５乃至４２７の値を示している。また、ｎＳＴＫ０乃至３は命令実行後のスタックレジスタ４２１乃至４２４の値を、ｎＬ０乃至２は命令実行後のローカル変数レジスタ４２５乃至４２７の値を示している。
【０１３５】
図４４乃至図５４は、本発明の第１の実施の形態によるマイクロ命令セットにおいて利用される演算器の構成例を示す図である。各演算器の入力は、スタックレジスタから最初にポップされたデータ（ＳＴＫ０）、または、次にポップされたデータ（ＳＴＫ１）である。各演算の内容については図１０について説明したものと同様であるため、ここでの説明を省略する。
【０１３６】
図５５乃至図５７は、本発明の第１の実施の形態におけるフォールディングの例を示す図である。
【０１３７】
図５５（ａ）は、ＤＵＰ＿ＳＴ０のフォールディングの例であり、図２７のＤＵＰ命令と図４１のＳＴ０命令とをつなげて書き直した形態になっている。また、図５５（ｂ）は、図５５（ａ）を変形して、データ操作をより簡易なものに最適化している。ＤＵＰ命令とＳＴ０命令とでは、プッシュ動作とポップ動作との間で動作が相殺されるため、このような変形が可能となる。これにより、１命令ずつ実行した場合には各スタック操作によって消滅してしまうはずのデータを救うことができる。
【０１３８】
図５６はＬＤ０＿ＥＱ＿ＳＴ１のフォールディングの例であり、図５７はＬＤ０＿ＥＱ＿ＳＷＡＰのフォールディングの例である。例えば、図５７（ａ）ではＳＴＫ３はＳＴＫ２によって上書きされてしまうが、図５７（ｂ）ではＳＴＫ３は保存されるため、スタックの深さが５のときに演算したのと同様のスタックの状態を得ることができる。
【０１３９】
このような最適化により、フォールディングの際、最後の命令の演算結果のみをプッシュすることにより、実際のスタックレジスタの深さよりも多くあるように見せることが可能となる。
【０１４０】
また、図５５乃至図５７の（ａ）と（ｂ）を比較すると分かるように、フォールディングを行ったとしても、データ操作が必ずしも複雑になるわけではない。図５５の例のように、単にＳＴＫ０とＬ０に上書きするだけで、フォールディング前のＤＵＰやＳＴ０よりも簡素になってしまう場合すらある。これはスタックマシンの特徴である。
【０１４１】
［マイクロプログラムの具体例］
図５８は、本発明の第１の実施の形態による情報処理システムにおけるマイクロプログラムの一覧の例を示す図である。マイクロプログラムメモリ２３０において、マイクロプログラムＲＯＭ２３１にはＭＰＩＤ「０」から「１１」の１２種類のマイクロプログラムが予め格納されていることを想定している。また、マイクロプログラムレジスタ２３２乃至２３５にはＭＰＩＤ「１２」から「１５」の４種類のマイクロプログラムをユーザが設定することができるようになっている。ここに示しているマイクロプログラムは、ＭＰＥＧ２、ＶＣ１、Ｈ．２６４などのビデオコーデックにおいて利用可能な、実用的なマイクロプログラムの例である。
【０１４２】
ＮＵＬＬマイクロプログラム（ＭＰＩＤ＝０、１、１１）は、データ操作を行わずに終了するマイクロプログラムである。マイクロプログラム実行の際には、インターフェースに従った引数を、スタックレジスタへプッシュし、または、ローカル変数レジスタへ設定しておく必要がある。マイクロプログラムの実行を指示する上位層プロセッサ１００の命令では、一度に渡せるデータは汎用レジスタのＲＴとＲＳの２つだけであると想定している。３つ以上のデータを渡すにはデータをプッシュする必要がある。そのため、プッシュするだけのマクロ命令を用意し、実行前に引数を３つ以上設定できるようにする。マイクロプログラムの実行を指示する上位層プロセッサ１００の命令の仕組みを利用して、プッシュ専用命令を実現するために、ＮＵＬＬマイクロプログラムが使用される。つまり、ＭＰＩＤを「０」または「１」としてＮＵＬＬマイクロプログラムを指定して実行することにより、データの設定だけを行うマクロ命令として使用することができる。
【０１４３】
ＭＥＡＮマイクロプログラム（ＭＰＩＤ＝２）は、２つの動きベクトルの成分毎の平均値を求めるためのマイクロプログラムである。ＭＥＤＩＡＮ３マイクロプログラム（ＭＰＩＤ＝３）は、３つの動きベクトルの成分毎の中間値を求めるためのマイクロプログラムである。ＭＥＤＩＡＮ４マイクロプログラム（ＭＰＩＤ＝４）は、４つの動きベクトルの成分毎の中間値を求めるためのマイクロプログラムである。
【０１４４】
ＭＥＤＣＮＤマイクロプログラム（ＭＰＩＤ＝５）は、ＭＥＤ３マイクロプログラム（ＭＰＩＤ＝６）の前処理として、例外処理の条件判断を行うマイクロプログラムである。ＭＥＤ３マイクロプログラムは、ＭＥＤＣＮＤマイクロプログラムの結果に従って、３つの動きベクトルの成分毎の中間値を求めるマイクロプログラムである。
【０１４５】
ＳＭＯＤマイクロプログラム（ＭＰＩＤ＝７）は、次式に相当する符号付きモジュラス計算を行うマイクロプログラムである。
ＳＭＯＤ（Ａ，ｂ）＝（（Ａ＋ｂ）＆（２ｂ−１））−ｂ
【０１４６】
ＤＢＭＤ＿ＦＲＭマイクロプログラム（ＭＰＩＤ＝８）は、Ｈ．２６４規格のフレーム処理におけるデブロッキングモードに関する計算を行うマイクロプログラムである。ＤＢＭＤ＿ＦＬＤマイクロプログラム（ＭＰＩＤ＝９）は、Ｈ．２６４規格のフィールド処理におけるデブロッキングモードに関する計算を行うマイクロプログラムである。ＤＢＩＤＸマイクロプログラム（ＭＰＩＤ＝１０）は、Ｈ．２６４規格のデブロッキングフィルタのパラメータ表のインデックス計算を行うマイクロプログラムである。
【０１４７】
図５９乃至図６８は、本発明の第１の実施の形態における図５８の各マイクロプログラムの分岐パスを示す図である。各図において、左側にはマイクロプログラムの内容が示されており、右側にはその分岐パスが示されている。分岐パスの各枝には実行タイプが記されている。また、上部にはワーキングレジスタの状態として、「＝＞」の左側にマイクロプログラム実行前の状態、「＝＞」の右側にマイクロプログラム実行後の状態を示している。片方のスタック状態において、右側がスタックトップを表している。また、括弧内にはローカル変数レジスタの設定値を示している。
【０１４８】
この例から、実用的なマイクロプログラムにおいても、最大３命令のフォールディングが利用可能であり、命令圧縮をしながら効率の良い処理が実現可能であることが理解できる。
【０１４９】
図６９は、本発明の第１の実施の形態におけるＪＰ命令を使用した第１のサンプルの分岐パスを示す図である。この第１のサンプルは、無条件分岐であるＪＰ命令が必要となる例である。分岐パスが固定的であるため、例のようにｍｉ５、ｍｉ６、ｍｉ７において処理する命令がなくても実行する必要がある場合に、ＪＰ命令によって次のセグメントに分岐させて、サイクル数を最小にしている。
【０１５０】
図７０は、本発明の第１の実施の形態におけるＪＰ命令を使用した第２のサンプルの分岐パスを示す図である。この第２のサンプルでは、ＪＰ命令を用いないでマイクロプログラムを構成している。ＪＰ命令を用いない場合には、ＮＯＰ命令を３つ並べて調整することが考えられる。しかしながら、フォールディングを考慮すると、ＮＯＰ命令を使用するよりも演算命令を割り当てる方が便利なことが多い。そこで、この例では、ＲＯＴを３回実行することによりデータが元に戻ることを利用して、ＮＯＰ命令の使用を回避している。なお、２つのＮＯＰの場合はＳＷＡＰ命令を２回実行すれば対処可能である。
【０１５１】
［上位層プロセッサとのインターフェース］
図７１は、本発明の第１の実施の形態における上位層プロセッサ１００のコプロセッサ命令の一覧の例を示す図である。ニーモニックの先頭の「ｃｏｐ＿」は、コプロセッサ命令であることを意味している。
【０１５２】
ｃｏｐ＿ｓｅｔｐｒｇ０およびｃｏｐ＿ｓｅｔｐｒｇ１は、マイクロプログラムレジスタ２３２乃至２３５を書き換えるために用いられる命令である。ｃｏｐ＿ｐｕｓｈおよびｃｏｐ＿ｐｕｓｈ２は、スタックレジスタ４２１乃至４２４に汎用レジスタをプッシュするために用いられる命令である。
【０１５３】
それ以外の「ｉｎｖｏｋｅ」をニーモニックに含む命令は、マイクロ命令処理コプロセッサ２００にマイクロプログラムの実行を指示するために用いられる命令である。ワーキングレジスタ２４２に対する設定手法の違いから複数種類の命令が用意されている。ｃｏｐ＿ｉｎｖｏｋｅ命令は、命令で指定した番号ＭＰＩＤに対応するマイクロプログラムの実行をマイクロ命令処理コプロセッサ２００に指示する命令である。ｃｏｐ＿ｒｏｔ４ｐｕｓｈ＿ｉｎｖｏｋｅ命令は、上位層プロセッサ１００のレジスタの値をプッシュした後で、スタックの一番古いデータを取り出して、先頭へプッシュして、番号ＭＰＩＤに対応するマイクロプログラムの実行を指示する命令である。ｃｏｐ＿ｉｎｖｏｋｅ＿ｒ命令は、上位層プロセッサ１００のレジスタの値から実行すべきマイクロプログラムの番号ＭＰＩＤを決定し、ＭＰＩＤに対応するマイクロプログラムの実行を指示する命令である。ｃｏｐ＿ｉｎｖｏｋｅ＿ｃ命令は、スタックトップの値をポップして、その値から実行すべきマイクロプログラムの番号ＭＰＩＤを決定し、ＭＰＩＤに対応するマイクロプログラムの実行を指示する命令である。
【０１５４】
図７２は、本発明の第１の実施の形態における上位層プロセッサ１００の命令フォーマット例を示す図である。図７２（ａ）は、通常の命令フォーマットであり、オペコード（ＯＰＣ）、リードオペランド（ＲＳ、ＲＴ）、機能（ＦＵＮＣ）、ライトオペランド（ＲＤ）、即値（ＩＭＭ５）からなる計３２ビット長のフィールド構成を有している。
【０１５５】
図７２（ｂ）は、コプロセッサ命令の命令フォーマットであり、オペコードフィールドにおいてコプロセッサ命令（ＣＯＰ）を指定し、機能フィールドにおいてコプロセッサ命令の種類（ＣＯＰ＿ＦＵＮＣ）を指定する。また、即値フィールドにおいてマイクロプログラム番号（ＭＰＩＤ）を指定することができる。
【０１５６】
図７３は、本発明の第１の実施の形態における上位層プロセッサ１００からマイクロプログラムの実行を指示するための命令群の例を示す図である。
【０１５７】
図７３（ａ）は、ＭＥＤＣＮＤマイクロプログラムとＭＥＤ３マイクロプログラムを実行するためのコプロセッサ命令である。ｃｏｐ＿ｐｕｓｈ２命令およびｃｏｐ＿ｌｄ０ｐｕｓｈ＿ｉｎｖｏｋｅ命令によりＭＥＤＣＮＤマイクロプログラムが実行される。また、ｃｏｐ＿ｐｕｓｈ２命令およびｃｏｐ＿ｒｏｔ４ｐｕｓｈ＿ｉｎｖｏｋｅ命令によりＭＥＤ３マイクロプログラムが実行される。この例では、ＭＥＤＣＮＤで条件判断をしてその結果をマイクロ命令処理コプロセッサ２００のワーキングレジスタ２４２に残しておき、そこに新たな引数をプッシュして３値から中間値を選択するメディアン処理を行っている。新たな引数をプッシュしたため、実行前にＭＥＤＣＮＤの実行結果をスタックトップへ移動するために、ｃｏｐ＿ｒｏｔ４ｐｕｓｈ＿ｉｎｖｏｋｅ命令を用いている。
【０１５８】
図７３（ｂ）は、ＭＥＡＮ２を実行するためのコプロセッサ命令である。図７３（ｃ）は、ＭＥＤＩＡＮ３を実行するためのコプロセッサ命令である。図７３（ｄ）は、ＭＥＤＩＡＮ４を実行するためのコプロセッサ命令である。
【０１５９】
また、図７３（ｅ）は、ｒｓ＿ＭＰＩＤの値によって、ＮＵＬＬ、ＭＥＡＮ２、ＭＥＤＩＡＮ３、ＭＥＤＩＡＮ４の何れかを切り替えて実行するためのコプロセッサ命令である。この切替のために、ｃｏｐ＿ｉｎｖｏｋｅ＿ｒ命令が用いられている。図５８におけるマイクロプログラムの割り当てを想定すると、ｒｓ＿ＭＰＩＤで指定された値が「０」または「１」の場合は、ＮＵＬＬマイクロプログラムであるため、スタックトップの値がライトバックされる。ｒｓ＿ＭＰＩＤで指定された値が「２」の場合にはＭＥＡＮ２を実行した結果が、「３」の場合にはＭＥＤＩＡＮ３を実行した結果が、「４」の場合にはＭＥＤＩＡＮ４を実行した結果が、それぞれライトバックされる。このような処理の切り替えを上位層プロセッサ１００で行うためには複雑な分岐処理となってしまうが、この例では僅か４命令で実現できている。なお、同様のＭＰＩＤ決定を、１つ前に実行したマイクロプログラムの実行結果であるＳＴＫ０の値を用いて行う場合には、ｃｏｐ＿ｉｎｖｏｋｅ＿ｃ命令を利用することができる。
【０１６０】
以上説明したように、本発明の第１の実施の形態によれば、分岐命令であるＪＰ命令、ＢＲ命令およびＲＥＴ命令の分岐先を制限することにより、命令圧縮効率を向上させるとともに、プリフェッチを容易にし、また、デッドロックを防止することができる。
【０１６１】
＜２．第２の実施の形態＞
上述の第１の実施の形態では、マイクロプログラム実行部２４０の構成としてスタックマシンを想定したが、これ以外の構成によっても実現可能である。以下の第２の実施の形態では、マイクロプログラム実行部２４０の構成としてキューマシンを想定して説明する。なお、情報処理システムの基本的構成は上述の第１の実施の形態と同様であるため、詳細については説明を省略する。
【０１６２】
［キューマシンの基本概念］
図７４は、本発明の第２の実施の形態におけるワーキングレジスタ２４２に保持されるキューレジスタの構成例を示す図である。キューマシンでは、ＦＩＦＯキューによるキューレジスタが利用される。この例では、４つのキューレジスタ４３１乃至４３４からなるＦＩＦＯキューを想定している。なお、キューレジスタ４３１乃至４３４は、特許請求の範囲に記載のキューの一例である。
【０１６３】
スタックマシンでは、スタックトップからポップして演算を行い、演算結果をスタックトップにプッシュするよう構成されていた。これに対し、キューマシンでは、キューのヘッド（先頭）からデータを出力して演算を行い、演算結果をキューのテール（末尾）に入力することで、処理が進行していく。マイクロプログラム実行部２４０のワーキングレジスタ２４２として実現するためには、キューのヘッドをキューレジスタ４３１に固定しておいて、キュー長をキュー長レジスタ４３５に保持しておくことにより、キューマシンとしての機能を果たすことができる。したがって、ワーキングレジスタ２４２においてキューレジスタ４３１乃至４３４を用いることにより、第１の実施の形態と同様の機能を実現することができる。
【０１６４】
すなわち、本発明の第２の実施の形態によれば、マイクロプログラム実行部２４０の構成としてキューマシンを想定することにより、第１の実施の形態と同様の効果を実現することができる。特に、キューマシンにおいては、キューの深さに合わせて最適化するため、深いほどアプリケーションの命令レベルの並列度を抽出し易いという利点がある。したがって、ＳＩＭＤなどの並列演算により向いていると考えられる。
【０１６５】
＜３．変形例＞
なお、本発明の実施の形態では、マイクロ命令の処理のためにスタックマシンやキューマシンを導入する例を説明したが、これはマイクロ命令に限定されるものではなく、通常の命令セットにも適用することができる。
【０１６６】
また、本発明の実施の形態では、コプロセッサにおける実行部にスタックマシンやキューマシンを導入する例を説明したが、これはコプロセッサに限定されるものではなく、通常のプロセッサにも適用することができる。
【０１６７】
なお、本発明の実施の形態は本発明を具現化するための一例を示したものであり、本発明の実施の形態において明示したように、本発明の実施の形態における事項と、特許請求の範囲における発明特定事項とはそれぞれ対応関係を有する。同様に、特許請求の範囲における発明特定事項と、これと同一名称を付した本発明の実施の形態における事項とはそれぞれ対応関係を有する。ただし、本発明は実施の形態に限定されるものではなく、本発明の要旨を逸脱しない範囲において実施の形態に種々の変形を施すことにより具現化することができる。
【０１６８】
また、本発明の実施の形態において説明した処理手順は、これら一連の手順を有する方法として捉えてもよく、また、これら一連の手順をコンピュータに実行させるためのプログラム乃至そのプログラムを記憶する記録媒体として捉えてもよい。この記録媒体として、例えば、ＣＤ（Compact Disc）、ＭＤ（MiniDisc）、ＤＶＤ（Digital Versatile Disk）、メモリカード、ブルーレイディスク（Blu-ray Disc（登録商標））等を用いることができる。
【符号の説明】
【０１６９】
１００  上位層プロセッサ
１１０  プログラムカウンタ更新部
１２０  プロセッサ命令デコーダ
１３０  プロセッサ演算器パイプライン
１４０  汎用レジスタファイル
１５０  ロードストアユニット
２００  マイクロ命令処理コプロセッサ
２１０  コプロセッサ命令キュー
２２０  コプロセッサ命令デコーダ
２３０  マイクロプログラムメモリ
２３１  マイクロプログラムＲＯＭ
２３２〜２３５  マイクロプログラムレジスタ
２４０  マイクロプログラム実行部
２４１  マイクロ命令バッファ
２４２  ワーキングレジスタ
２４３  ライトバック形式レジスタ
２４４  演算器
２４５  セレクタ
２４６  実行タイプ判別部
２４７  ライトバックデータ加工部
２５０  ライトバックバッファ
３１０  命令キャッシュ
３２０  データキャッシュ
３９０  メモリバス
４００  メモリ
４２１〜４２４  スタックレジスタ
４２５〜４２７  ローカル変数レジスタ
４３１〜４３４  キューレジスタ
４３５  キュー長レジスタ
５００  マイクロプログラム命令デコーダ
５１０  機能タイプ決定部
５２０  実行タイプ決定部
５３０  演算部
６０１  命令列更新制御部
６１０  命令バッファ
６１１  セレクタ
６１２  レジスタ
６２０  セグメント更新セレクタ
６２１  命令バッファ状態フラグ
６２２  命令バッファ状態フラグ遷移決定部
６２３  セレクタ
６３０  実行タイプ判別部
６４０  セレクタ
【図１】
2011138308.tif 000003
【図２】
2011138308.tif 000004
【図３】
2011138308.tif 000005
【図４】
2011138308.tif 000006
【図５】
2011138308.tif 000007
【図６】
2011138308.tif 000008
【図７】
2011138308.tif 000009
【図８】
2011138308.tif 000010
【図９】
2011138308.tif 000011
【図１０】
2011138308.tif 000012
【図１１】
2011138308.tif 000013
【図１２】
2011138308.tif 000014
【図１３】
2011138308.tif 000015
【図１４】
2011138308.tif 000016
【図１５】
2011138308.tif 000017
【図１６】
2011138308.tif 000018
【図１７】
2011138308.tif 000019
【図１８】
2011138308.tif 000020
【図１９】
2011138308.tif 000021
【図２０】
2011138308.tif 000022
【図２１】
2011138308.tif 000023
【図２２】
2011138308.tif 000024
【図２３】
2011138308.tif 000025
【図２４】
2011138308.tif 000026
【図２５】
2011138308.tif 000027
【図２６】
2011138308.tif 000028
【図２７】
2011138308.tif 000029
【図２８】
2011138308.tif 000030
【図２９】
2011138308.tif 000031
【図３０】
2011138308.tif 000032
【図３１】
2011138308.tif 000033
【図３２】
2011138308.tif 000034
【図３３】
2011138308.tif 000035
【図３４】
2011138308.tif 000036
【図３５】
2011138308.tif 000037
【図３６】
2011138308.tif 000038
【図３７】
2011138308.tif 000039
【図３８】
2011138308.tif 000040
【図３９】
2011138308.tif 000041
【図４０】
2011138308.tif 000042
【図４１】
2011138308.tif 000043
【図４２】
2011138308.tif 000044
【図４３】
2011138308.tif 000045
【図４４】
2011138308.tif 000046
【図４５】
2011138308.tif 000047
【図４６】
2011138308.tif 000048
【図４７】
2011138308.tif 000049
【図４８】
2011138308.tif 000050
【図４９】
2011138308.tif 000051
【図５０】
2011138308.tif 000052
【図５１】
2011138308.tif 000053
【図５２】
2011138308.tif 000054
【図５３】
2011138308.tif 000055
【図５４】
2011138308.tif 000056
【図５５】
2011138308.tif 000057
【図５６】
2011138308.tif 000058
【図５７】
2011138308.tif 000059
【図５８】
2011138308.tif 000060
【図５９】
2011138308.tif 000061
【図６０】
2011138308.tif 000062
【図６１】
2011138308.tif 000063
【図６２】
2011138308.tif 000064
【図６３】
2011138308.tif 000065
【図６４】
2011138308.tif 000066
【図６５】
2011138308.tif 000067
【図６６】
2011138308.tif 000068
【図６７】
2011138308.tif 000069
【図６８】
2011138308.tif 000070
【図６９】
2011138308.tif 000071
【図７０】
2011138308.tif 000072
【図７１】
2011138308.tif 000073
【図７２】
2011138308.tif 000074
【図７３】
2011138308.tif 000075
【図７４】
2011138308.tif 000076