(57)【要約】【課題】ループ処理性能を維持しつつ、ループ処理に必要なスタックレジスタの回路規模を低減したループ処理制御装置を提供する。【解決手段】ループ命令検出器１０５がループ設定命令を検出した場合、命令コードから取り出した、命令アドレスのＮビットよりも小さいｍビットに制限された、ループ終端アドレスに対するループ先頭アドレスの相対アドレスを、スタックレジスタ１０３の最上位階層１０９に格納する。ループ終端検出器１０６がループ終端を検出した場合、相対アドレス加算器１０８が、プログラムカウンタ１０１のアドレスカウント値とスタックレジスタ１０３に格納されているｍビットの相対アドレスとを加算して、Ｎビットのループ先頭アドレスを生成する。【選択図】　図１
2004094824.tif 000002
【特許請求の範囲】
【請求項１】
所定のプログラムを繰り返すループ処理を制御する方法であって、
プログラム作成時に、ループ終端アドレスに対するループ先頭アドレスの相対アドレスを、２Ｎビットの命令アドレス空間よりも小さいｍビット幅で表現できる範囲に制限し、
ループ終端で発生する前記ループ先頭アドレスへの分岐処理に必要な情報として、ｍビットの前記相対アドレスのみを保持し、
ループ終端が検出された場合、そのループ終端アドレスを示すＮビットのアドレスカウント値と保持しているｍビットの前記相対アドレスとを加算することにより、Ｎビットのループ先頭アドレスを生成することを特徴とするループ処理制御方法。
【請求項２】
所定のプログラムを繰り返すループ処理を制御する方法であって、
２Ｎビットの大きさを有する命令アドレス空間を、それぞれ２ｍ（ｍ＜Ｎ）ビットの大きさを有し、命令アドレスの上位（Ｎ−ｍ）ビットがバンク番号を表す２（Ｎ−ｍ）個のバンクに分割した上で、プログラム作成時に、ループ先頭アドレスを、ループ終端アドレスのバンクを含む隣接する２（Ｎ−ｍ）個以内のバンクに限定し、
ループ終端で発生する先頭アドレスへの分岐処理に必要な情報として、ループ先頭アドレスの下位ｍビットと、ループ終端アドレスのバンク番号に対するループ先頭アドレスのバンク番号の相対値とを保持し、
ループ終端において、ループ終端アドレスを示すＮビットのアドレスカウント値のうち上位（Ｎ−ｍ）ビットと保持している前記バンク番号の相対値とを加算した結果と、ループ先頭アドレスの下位ｍビットとを連結することにより、Ｎビットのループ先頭アドレスを生成することを特徴とするループ処理制御方法。
【請求項３】
プログラム上のある所望の地点へプログラムの実行位置を移動させる分岐処理方法であって、
２Ｎビットの大きさを有する命令アドレス空間を、それぞれ２ｍ（ｍ＜Ｎ）ビットの大きさを有し、命令アドレスの上位（Ｎ−ｍ）ビットがバンク番号を表す２（Ｎ−ｍ）個のバンクに分割し、さらに各バンクを、２（ｍ−ｋ）（ｋはｍビット中の上位ビット）ビットの大きさを有し、中間ｋビットがサブバンク番号を表す２ｋ個のサブバンクに分割した上で、プログラム作成時に、分岐先アドレスを、分岐元アドレスのサブバンクを含む隣接する２ｋ個以内のサブバンクに限定し、
分岐処理の発生時に、前記分岐先アドレスの下位ｍビットのみを指定し、前記分岐元アドレスのサブバンク番号と前記分岐先アドレスのサブバンク番号とに基づいて、前記分岐元アドレスのバンク番号に対する分岐先アドレスのバンク番号の相対値を判定し、
判定した前記バンク番号の相対値に前記分岐元アドレスのバンク番号を加算し、
加算した結果と前記分岐先アドレスの下位ｍビットとを連結することにより、分岐先アドレスを生成することを特徴とする分岐処理方法。
【請求項４】
請求項３記載の分岐処理方法を用いて、所定のプログラムを繰り返すループ処理を制御する方法であって、前記分岐先アドレスであるループ先頭アドレスの範囲を、前記分岐元アドレスであるループ終端アドレスの近傍の前記サブバンクに制限することを特徴とするループ処理制御方法。
【請求項５】
所定のプログラムを繰り返すループ処理を制御する装置であって、
前記ループ処理以外の通常処理時に、アドレス値をカウントするＮビットのプログラムカウンタと、
命令コードからループ設定命令が検出された場合、前記命令コードから取り出した、命令アドレスのＮビットよりも小さいｍビットに制限された、ループ終端アドレスに対するループ先頭アドレスの相対アドレスを、最上位階層に格納するスタックレジスタと、
命令コードからループ終端が検出された場合、前記プログラムカウンタのアドレスカウント値と前記スタックレジスタに格納されているｍビットの前記相対アドレスとを加算して、Ｎビットのループ先頭アドレスを生成する相対アドレス加算器とを備えたことを特徴とするループ処理制御装置。
【請求項６】
所定のプログラムを繰り返すループ処理を制御する装置であって、
前記ループ処理以外の通常処理時に、アドレス値をカウントするＮビットのプログラムカウンタと、
命令コードからループ設定命令が検出された場合、Ｎビットのループ先頭アドレスの下位ｍビットを格納するとともに、前記命令コードから取り出した、Ｎビットのループ終端アドレスの上位（Ｎ−ｍ）ビットが示すバンク番号に対する前記ループ先頭アドレスの上位（Ｎ−ｍ）ビットが示すバンク番号の相対値とを、最上位階層に格納するスタックレジスタと、
命令コードからループ終端が検出された場合、前記プログラムカウンタのアドレスカウント値の上位（Ｎ−ｍ）ビットと前記スタックレジスタに格納されている前記バンク番号の相対値とを加算して、前記ループ先頭アドレスの上位（Ｎ−ｍ）ビットを生成するバンク相対値加算器とを備え、
前記バンク相対値加算器から出力された前記ループ先頭アドレスの上位（Ｎ−ｍ）ビットと、前記スタックレジスタに格納されている前記ループ先頭アドレスの下位ｍビットとを連結することにより、Ｎビットの前記ループ先頭アドレスが生成されることを特徴とするループ処理制御装置。
【請求項７】
所定のプログラムを繰り返すループ処理を制御する装置であって、
前記ループ処理以外の通常処理時に、アドレス値をカウントするＮビットのプログラムカウンタと、
命令コードからループ設定命令が検出された場合、Ｎビットのループ先頭アドレスの下位ｍビットを、最上位階層に格納するスタックレジスタと、
命令コードからループ終端が検出された場合、前記プログラムカウンタにおけるアドレスカウント値の下位ｍビット中の上位ｋビットと、前記スタックレジスタに格納されている前記ループ先頭アドレスの下位ｍビット中の上位ｋビットとに基いて、前記ループ終端アドレスの上位（Ｎ−ｍ）ビットが示すバンク番号に対する前記ループ先頭アドレスの上位（Ｎ−ｍ）ビットが示すバンク番号の相対値を判定するバンク相対値判定器と、
前記バンク相対値判定器により判定された前記バンク番号の相対値と、前記プログラムカウンタにおけるアドレスカウント値のうち上位（Ｎ−ｍ）ビットとを加算して、前記ループ先頭アドレスの上位（Ｎ−ｍ）ビットを生成するバンク相対値加算器とを備え、
前記バンク相対値加算器から出力された前記ループ先頭アドレスの上位（Ｎ−ｍ）ビットと、前記スタックレジスタに格納されている前記ループ先頭アドレスの下位ｍビットとを連結することにより、Ｎビットの前記ループ先頭アドレスが生成されることを特徴とするループ処理制御装置。
【請求項８】
請求項１、２または４記載のループ処理制御方法を用いたことを特徴とするコンピュータシステム。
【請求項９】
請求項５から７のいずれか一項記載のループ処理制御装置を備えたことを特徴とするコンピュータシステム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、マイクロプロセッサ等のコンピュータシステムにおける命令順序制御に関し、特に高速なループ処理を行う装置を備えたマイクロプロセッサにおいて、ループの先頭と終端の相対アドレスの相対位置をプログラム上で制限することにより、必須となるループ先頭アドレスのスタックの容量を削減する技術に関する。
【０００２】
【従来の技術】
近年、半導体技術の進歩に伴い、従来では制御や簡易な計算にのみ用いられていたマイクロプロセッサが、複雑で演算量の多い数値計算処理に用いられるようになってきた。特に信号処理を目的に作られたＤＳＰ（Ｄｉｇｉｔａｌ　Ｓｉｇｎａｌ　Ｐｒｏｃｅｓｓｏｒ）では、音声や画像の圧縮等、極めて演算量の多い数値計算が必要となってきている。その中で、音声、画像等の処理における数値計算処理においては、処理の大部分は特定のプログラムの繰り返し処理（ループ処理）が占めており、このループ処理の高速化は必須である。
【０００３】
図１５は、上記ループ処理の手順を示す基本的なフローチャートである。図１５において、まず最初に、ステップ１５０１において、繰り返し数カウンタ等、ループ開始の設定処理を行う。次に、ループ先頭処理１５０２とループ内処理１５０３を行う。次に、ループ終端処理１５０４において、繰り返し数カウンタ等を参照し、ループ内の繰り返し条件を満たす場合は、パス１５０５を通してステップ１５０２へと分岐処理を行い、条件を満たさない場合は、パス１５０６を通ってループを終了する。
【０００４】
ここで、一般的なＤＳＰでは、ループ先頭への分岐処理１５０５を高速化するため、ループの先頭１５０２のアドレスを専用の内部レジスタに保持し、これを用いて分岐処理１５０５の高速化を実現している。ループ処理は、入れ子構造の多重ループとして使用することが多く、その場合、上記の専用レジスタは階層構造をもつスタックレジスタとする必要がある。
【０００５】
図１６は、多重ループ処理の手順を示すフローチャートである。図１６において、ステップ１６０１−Ａ（ループ設定処理（Ａ））、１６０２−Ａ（ループ先頭処理（Ａ））、１６０１−Ｂ（ループ設定処理（Ｂ））、１６０２−Ｂ（ループ先頭処理（Ｂ））、１６０３（ループ内処理）、１６０４−Ｂ（ループ終端処理（Ｂ））、パス１６０６−Ｂ、ステップ１６０４−Ａ（ループ終端処理（Ａ））、およびパス１６０５−Ａというループと、破線で囲んだ、１６０１−Ｂ（ループ設定処理（Ｂ））、１６０２−Ｂ（ループ先頭処理（Ｂ））、１６０３（ループ内処理）、１６０４−Ｂ（ループ終端処理（Ｂ））、パス１６０５−Ｂというループが二重になっており、この場合、ループ先頭アドレススタックは、ループのステップ１６０２−Ａとステップ１６０２−Ｂの２つに対して必要となる。
【０００６】
図１７は、従来のループ先頭アドレススタックを用いたループ処理制御装置の構成図である。図１７において、１７０１はプログラムカウンタ（ＰＣ）、１７０２はＰＣ１７０１からのアドレスを１ずつ更新するアドレス増分器である。１７０３はループの先頭アドレスのスタックであり、ループ設定命令の検出時にＰＣ１７０１の値を保存する。また、スタック１７０３は、多重ループ時には、複数あるスタックに対して１階層ずつＦＩＬＯ（Ｆｉｒｓｔ　Ｉｎ　Ｌａｓｔ　Ｏｕｔ）形式で押し出し（プッシュし）ながら先頭アドレスを保存し、ループ終了時には、１階層ずつスタックの先頭アドレスを戻し（ポップし）ていく。なお、１７０９はスタック１７０３の最上位階層のスタックである。
【０００７】
１７０４はスタック制御器であり、スタック１７０３の階層を制御し、スタックの格納位置および読み出し位置を制御する。１７０５はループ命令検出器であり、命令コードを解析してループ処理開始命令を検出し、ループ先頭命令アドレス、カウント値等をスタックに格納する。１７０６はループ終端検出器であり、命令コードやアドレスからループ終端を検出し、ループを繰り返す場合には、ＰＣ１７０１にループ先頭アドレスをロードし、繰り返し最終回の場合には、スタック制御器１７０４に対してループ先頭アドレススタック１７０３におけるスタックを１段戻す指示を行う。１７０７はＰＣ１７０１への入力を選択するアドレス選択器であり、通常は、アドレス増分器１７０２からの出力を選択し、ループ終端時には、スタック１７０３からの出力を選択する。
【０００８】
次に、このように構成されたループ処理制御装置の動作について説明する。
【０００９】
通常時、ＰＣ１７０１は、アドレス増分器１７０２を用いて、命令実行ごとにその次命令のアドレスを格納する。その際、アドレス選択器１７０７は、ＰＣ１７０１への入力としてアドレス増分器１７０２の出力を選択する。
【００１０】
次に、ループ開始時、ループ命令検出器１７０５は、プログラム中の命令コードを解析して、ループ設定命令を検出し、スタック制御器１７０４に指示を出す。これにより、スタック制御器１７０４は、ＰＣ１７０１を用いて、ループの先頭アドレスをスタック１７０３にプッシュする。スタック１７０３はＦＩＬＯ形式のスタックであり、最新のループ先頭アドレスが最上位スタック１７０９に格納されるようになっている。その時、ＰＣ１７０１の値は通常時と同じく次命令のアドレスに更新される。
【００１１】
次に、ループ終端時には、ループ終端検出器１７０６が、命令コードなどからループ終端に来たことを検出する。ループ内のプログラムを繰り返す場合、ループ終端検出器１７０６は選択器１７０４に指示を出し、スタック１７０３上の最上位スタック１７０９を選択させることにより、プログラムの実行をループ先頭に分岐させる。ループ内のプログラムをこれ以上繰り返さない（ループの最終回）場合は、ループ終端検出器１７０６はスタック制御器１７０４に指示を出し、スタック１７０３を１段ポップさせ、ＰＣ１７０１の値は通常時と同じく次命令アドレスに更新される。
【００１２】
【発明が解決しようとする課題】
上記従来のループ処理制御装置において、ループ先頭アドレススタック１７０３は、ＰＣ１７０１の値をそのまま保持するため、必要なレジスタの大きさは、命令アドレスがＮビットの場合、１階層あたりＮビットで、階層数がＬである場合はそのＬ倍（Ｎ×Ｌビット）となる。このように、ループの先頭アドレスのスタック１７０３を使用した場合、回路規模が増大する。近年のプロセッサは、ソフトウェアのサイズの増大により、命令アドレスのビット幅が拡大し、これにより上記スタックレジスタの容量も増大し、スタックの回路規模がさらに増大する。
【００１３】
また、ＯＳ（オペレーティングシステム）のタスク切り替え等に伴う資源の退避復帰を行う際、大幅な時間ロスと退避領域の増大を発生させる。
【００１４】
本発明は、上記の問題点に鑑みてなされたものであり、その目的は、ループ処理に必要なスタックレジスタの回路規模を低減し、ＯＳのタスク切り替え等に伴う資源の退避復帰を高速に且つ余分な退避領域を必要とせず行うことが可能なループ処理制御方法および装置、分岐処理方法、それらを用いたコンピュータシステムを提供することにある。
【００１５】
【課題を解決するための手段】
前記の目的を達成するため、本発明に係る第１のループ処理制御方法は、所定のプログラムを繰り返すループ処理を制御する方法であって、プログラム作成時に、ループ終端アドレスに対するループ先頭アドレスの相対アドレスを、２Ｎビットの命令アドレス空間よりも小さいｍビット幅で表現できる範囲に制限し、ループ終端で発生するループ先頭アドレスへの分岐処理に必要な情報として、ｍビットの相対アドレスのみを保持し、ループ終端が検出された場合、そのループ終端アドレスを示すＮビットのアドレスカウント値と保持しているｍビットの相対アドレスとを加算することにより、Ｎビットのループ先頭アドレスを生成することを特徴とする。
【００１６】
前記の目的を達成するため、本発明に係る第２のループ処理制御方法は、所定のプログラムを繰り返すループ処理を制御する方法であって、２Ｎビットの大きさを有する命令アドレス空間を、それぞれ２ｍ（ｍ＜Ｎ）ビットの大きさを有し、命令アドレスの上位（Ｎ−ｍ）ビットがバンク番号を表す２（Ｎ−ｍ）個のバンクに分割した上で、プログラム作成時に、ループ先頭アドレスを、ループ終端アドレスのバンクを含む隣接する２（Ｎ−ｍ）個以内のバンクに限定し、ループ終端で発生する先頭アドレスへの分岐処理に必要な情報として、ループ先頭アドレスの下位ｍビットと、ループ終端アドレスのバンク番号に対するループ先頭アドレスのバンク番号の相対値とを保持し、ループ終端において、ループ終端アドレスを示すＮビットのアドレスカウント値のうち上位（Ｎ−ｍ）ビットと保持しているバンク番号の相対値とを加算した結果と、ループ先頭アドレスの下位ｍビットとを連結することにより、Ｎビットのループ先頭アドレスを生成することを特徴とする。
【００１７】
前記の目的を達成するため、本発明に係る分岐処理方法は、プログラム上のある所望の地点へプログラムの実行位置を移動させる分岐処理方法であって、２Ｎビットの大きさを有する命令アドレス空間を、それぞれ２ｍ（ｍ＜Ｎ）ビットの大きさを有し、命令アドレスの上位（Ｎ−ｍ）ビットがバンク番号を表す２（Ｎ−ｍ）個のバンクに分割し、さらに各バンクを、２（ｍ−ｋ）（ｋはｍビット中の上位ビット）ビットの大きさを有し、中間ｋビットがサブバンク番号を表す２ｋ個のサブバンクに分割した上で、プログラム作成時に、分岐先アドレスを、分岐元アドレスのサブバンクを含む隣接する２ｋ個以内のサブバンクに限定し、分岐処理の発生時に、分岐先アドレスの下位ｍビットのみを指定し、分岐元アドレスのサブバンク番号と分岐先アドレスのサブバンク番号とに基づいて、分岐元アドレスのバンク番号に対する分岐先アドレスのバンク番号の相対値を判定し、判定したバンク番号の相対値に分岐元アドレスのバンク番号を加算し、加算した結果と分岐先アドレスの下位ｍビットとを連結することにより、分岐先アドレスを生成することを特徴とする。
【００１８】
前記の目的を達成するため、本発明に係る第３のループ処理制御方法は、本発明に係る分岐処理方法を用いて、所定のプログラムを繰り返すループ処理を制御する方法であって、分岐先アドレスであるループ先頭アドレスの範囲を、分岐元アドレスであるループ終端アドレスの近傍のサブバンクに制限することを特徴とする。
【００１９】
前記の目的を達成するため、本発明に係る第１のループ処理制御装置は、所定のプログラムを繰り返すループ処理を制御する装置であって、ループ処理以外の通常処理時に、アドレス値をカウントするＮビットのプログラムカウンタと、命令コードからループ設定命令が検出された場合、命令コードから取り出した、命令アドレスのＮビットよりも小さいｍビットに制限された、ループ終端アドレスに対するループ先頭アドレスの相対アドレスを、最上位階層に格納するスタックレジスタと、命令コードからループ終端が検出された場合、プログラムカウンタのアドレスカウント値とスタックレジスタに格納されているｍビットの相対アドレスとを加算して、Ｎビットのループ先頭アドレスを生成する相対アドレス加算器とを備えたことを特徴とする。
【００２０】
前記の目的を達成するため、本発明に係る第２のループ処理制御装置は、所定のプログラムを繰り返すループ処理を制御する装置であって、ループ処理以外の通常処理時に、アドレス値をカウントするＮビットのプログラムカウンタと、命令コードからループ設定命令が検出された場合、Ｎビットのループ先頭アドレスの下位ｍビットを格納するとともに、命令コードから取り出した、Ｎビットのループ終端アドレスの上位（Ｎ−ｍ）ビットが示すバンク番号に対するループ先頭アドレスの上位（Ｎ−ｍ）ビットが示すバンク番号の相対値とを、最上位階層に格納するスタックレジスタと、命令コードからループ終端が検出された場合、プログラムカウンタのアドレスカウント値の上位（Ｎ−ｍ）ビットとスタックレジスタに格納されているバンク番号の相対値とを加算して、ループ先頭アドレスの上位（Ｎ−ｍ）ビットを生成するバンク相対値加算器とを備え、バンク相対値加算器から出力されたループ先頭アドレスの上位（Ｎ−ｍ）ビットと、スタックレジスタに格納されているループ先頭アドレスの下位ｍビットとを連結することにより、Ｎビットのループ先頭アドレスが生成されることを特徴とする。
【００２１】
前記の目的を達成するため、本発明に係る第３のループ処理制御装置は、所定のプログラムを繰り返すループ処理を制御する装置であって、ループ処理以外の通常処理時に、アドレス値をカウントするＮビットのプログラムカウンタと、命令コードからループ設定命令が検出された場合、Ｎビットのループ先頭アドレスの下位ｍビットを、最上位階層に格納するスタックレジスタと、命令コードからループ終端が検出された場合、プログラムカウンタにおけるアドレスカウント値の下位ｍビット中の上位ｋビット（ループ終端アドレスのサブバンク番号）と、スタックレジスタに格納されているループ先頭アドレスの下位ｍビット中の上位ｋビットとに基いて、ループ終端アドレスの上位（Ｎ−ｍ）ビットが示すバンク番号に対するループ先頭アドレスの上位（Ｎ−ｍ）ビットが示すバンク番号の相対値を判定するバンク相対値判定器と、バンク相対値判定器により判定されたバンク番号の相対値と、プログラムカウンタにおけるアドレスカウント値の上位（Ｎ−ｍ）ビットとを加算して、ループ先頭アドレスの上位（Ｎ−ｍ）ビットを生成するバンク相対値加算器とを備え、バンク相対値加算器から出力されたループ先頭アドレスの上位（Ｎ−ｍ）ビットと、スタックレジスタに格納されているループ先頭アドレスの下位ｍビットとを連結することにより、Ｎビットのループ先頭アドレスが生成されることを特徴とする。
【００２２】
前記の目的を達成するため、本発明に係る第１のコンピュータシステムは、第１から第３のループ処理制御方法のいずれかを用いたことを特徴とする。
【００２３】
前記の目的を達成するため、本発明に係る第２のコンピュータシステムは、第１から第３のループ処理制御装置を備えたことを特徴とする。
【００２４】
上記の構成によれば、ループ処理性能を維持しつつ、ループ処理に必要なスタックレジスタの回路規模を低減することができる。
【００２５】
【発明の実施の形態】
以下、本発明の好適な実施形態について、図面を参照しながら説明する。なお、以下の各実施形態におけるループ制御装置はマイクロプロセッサ等のコンピュータシステムに適用されるものとして説明する。
【００２６】
（第１の実施形態）
図１は、本発明の第１の実施形態によるループ処理制御装置の構成図である。
図１において、本実施形態が従来例と異なるのは、Ｎビットのループ先頭アドレスそのものを格納するスタック１７０３に代えて、ｍビット（ｍ＜Ｎ）の、ループの終端アドレスに対する先頭アドレスの相対アドレスを格納するスタック１０３を設け、ループ命令検出器１０５が相対アドレスを命令コードから検出する点と、相対アドレス加算器１０８を設けた点にある。
【００２７】
図２において、１０１は１７０１と同様の、Ｎビットのプログラムカウンタ（ＰＣ）、１０２は１７０２と同様のアドレス増分器である。１０３はループの相対アドレスのスタックであり、ループ設定命令検出時に、命令コードをデコードすることにより、相対アドレスを格納する。なお、１０９はスタック１０３の最上位階層のスタックである。１０４は１７０４と同様のスタック制御器である。
１０５はループ命令検出器であり、ループ処理開始命令、およびループの先頭アドレスと終端アドレスの相対アドレスを検出し、スタック１０３に格納する。１０６は１７０６と同様のループ終端検出器である。１０７はアドレス選択器であり、通常はアドレス増分器１０２からの出力を選択し、ループ終端時には相対アドレス加算器１０８からの出力を選択する。１０８は、相対アドレス加算器であり、ループ終端検出時に、ＰＣ１０１の値とスタック１０３上の相対アドレスを加算し、ループ先頭アドレスを生成する。
【００２８】
次に、このように構成されたループ処理制御装置の動作について説明する。
【００２９】
まず、通常時は、従来と同様に、アドレス増分器１０２により、ＰＣ１０１のアドレスカウント値が次命令のアドレスに更新される。
【００３０】
次に、ループ設定時には、ループ命令検出器１０５が、プログラム中の命令コードを解析し、ループ設定命令と、本実施形態の特徴であるループの先頭と終端の相対アドレスを検出する。ここで、命令コードは、本実施形態を実現するため、ループ命令コードと共に、ループの先頭と終端の相対アドレスが検出できるように定義され、プログラム作成時に相対アドレスが設定される。図１０に従来のループ設定命令の命令コードの例を、図１１に本実施形態における命令コードの例を示す。図１０に示すように、従来では、ループ設定命令を示すｐビットのフィールド１００１を具備するのに対し、本実施形態では、同様のループ設定命令を示す同様の命令フィールド１１０１に加え、ｑビットの相対アドレスフィールド１１０２を具備する。
【００３１】
本実施形態において、ループ命令検出器１０５は、命令フィールド１１０１を解析し、ループ設定命令が検出された場合は、相対アドレスフィールド１１０２内の相対アドレスコードを出力する。また、ループ命令検出時に、ループ命令検出器１０５は、スタック制御器１０４に指示を出し、スタック制御器１０４は、ループ命令検出器１０５により検出されたループの先頭と終端の相対アドレスをスタック１０３にプッシュする。スタック１０３は、ＦＩＬＯ形式のスタックであり、最新のループ先頭アドレスを最上位スタック１０９に格納する。
【００３２】
次に、ループ終端時には、ループ終端検出器１０６が命令コードなどからループ終端に来たことを検出する。ループ内のプログラムを繰り返す場合、すなわちループ先頭アドレスに分岐する場合は、ＰＣ１０１と最上位スタック１０９の値を相対アドレス加算器１０８で加算することにより、分岐先である先頭アドレスを生成し、これをアドレス選択器１０７がループ終端検出器１０６からの指示により選択し、ＰＣ１０１に出力する。一方、ループ内のプログラムをこれ以上繰り返さない（ループの最終回）場合は、従来と同様に、ループ終端検出器１０６がスタック制御器１０４に指示を出し、スタック１０３を１段ポップさせる。
【００３３】
ここで、ループ処理を行うプログラムでは、ループの先頭アドレスと終端アドレスは非常に近い位置にあり、その距離をある程度小さな範囲に限定しても実仕様上ほとんど問題にならないことを利用し、ループの先頭アドレスと終端アドレスの範囲が比較的小さなビット幅で表現できる範囲に収まるように、ループ処理のプログラムを作成することで、相対アドレスを表現するのに必要なビット幅を削減できる。ループの先頭アドレスと終端アドレスとの間の最大距離（以下、最大ループ長と称する）は、相対アドレス幅がｍビットであるので、２（ｍ−１）となる。また、ループの終端アドレスが先頭アドレスより一般的に大きいことを考慮すると、最大ループ長は２ｍに拡張可能である。
【００３４】
以上のように、本実施形態のループ相対アドレススタック１０３は、従来のループ先頭アドレススタック１７０３よりも、ビット幅が（Ｎ−ｍ）ビット削減でき、階層数がＬの場合は（（Ｎ−ｍ）×Ｌ）ビット削減でき、スタックの回路規模を削減することができる。
【００３５】
また、後述する第２および第３の実施形態と比べた場合、本実施形態によれば、１〜２ビット少ないビット幅で同等の最大ループ長を実現できる。
【００３６】
（第２の実施形態）
第１の実施形態では、ＰＣ１０１のビット幅をＮビットに設定しているため、Ｎビット幅の相対アドレス加算器１０８を用いた。これにより、相対アドレス加算器１０８の回路規模が非常に大きくなる。また、ＮビットのＰＣ１０１のアドレスカウント値は通常１命令ごとに変化することから、トグル率が高く、相対アドレス加算器１０８における消費電力が増大する。さらに、ループ設定命令に相対アドレスを示すフィールド１１０２（図１１）が必要となり、命令セット設計上不利となる。
【００３７】
本発明の第２の実施形態は、第１の実施形態の改善形態を提供するものである。そのため、まず、２Ｎビットの命令アドレス空間をそれぞれ２ｍ（ｍ＜Ｎ）ビットの大きさを有する複数（２（Ｎ−ｍ）個）のバンクに分割することで、アドレスの上位（Ｎ−ｍ）ビットをバンク番号で表す。
【００３８】
そして、ループ先頭アドレスの下位ｍビットと、ループ終端アドレスのバンク番号に対するループ先頭アドレスのバンク番号の相対値（以下、バンク相対値と称する）とをスタックに保持する。
【００３９】
さらに、ループ終端時に、そのループ終端アドレスを示す、Ｎビットのプログラムカウンタ（ＰＣ）におけるアドレスカウント値の上位（Ｎ−ｍ）ビット（終端アドレスのバンク番号）と、スタックに保持されているバンク相対値とを加算し、加算した結果と、ＰＣからの上位（Ｎ−ｍ）ビットを加算し、加算した結果と、スタックに保持されているループ先頭アドレスの下位ｍビットとを連結することで、Ｎビットのループ先頭アドレスを生成する。
【００４０】
図２は、本発明の第２の実施形態によるループ処理制御装置の構成図である。
図２において、本実施形態が第１の実施形態と異なるのは、ループの先頭と終端の相対アドレスを格納するスタック１０３に代えて、ループ先頭アドレスの下位ｍビットを格納するスタックと上記のバンク相対値を格納するスタックとを含むループ先頭アドレス生成用のスタック２０３を設け、さらにＮビットの相対アドレス加算器１０８に代えて、（Ｎ−ｍ）ビットのバンク相対値加算器２０８を設けた点にある。
【００４１】
図２において、２０１は１０１と同様の、Ｎビットのプログラムカウンタ（ＰＣ）、２０２は１０２と同様のアドレス増分器である。２０３はＮビットのループ先頭アドレスを生成するのに必要な情報を格納するスタックである。なお、ループ先頭アドレス生成用のスタック２０３のうち、２０９はループ先頭アドレスの下位ｍビットを格納するスタックの最上位階層で、２１０はバンク相対値を格納するスタックの最上位階層である。
【００４２】
２０４は１０４と同様のスタック制御器である。２０５はループ命令検出器で、命令コードからループ開始命令と、バンク相対値を検出する。２０６は１０６と同様のループ終端検出器、２０７は１０７と同様のアドレス選択器である。２０８は、Ｎビットのループ先頭アドレスのうち上位（Ｎ−ｍ）ビットを生成するバンク相対値加算器である。
【００４３】
なお、図２において、Ｎビットのアドレスのうち上位（Ｎ−ｍ）をＵ（Ｎ−ｍ）で、下位ｍビットをＬ（ｍ）で表す。
【００４４】
次に、本実施形態における命令アドレス空間について、図３を用いて説明する。
【００４５】
図３は、命令アドレス空間を示す模式図である。図３において、左側は命令アドレスの全空間を示し、右側はそのうちループ終端アドレス付近の命令アドレス空間を拡大して示している。
【００４６】
図３において、２Ｎビットの命令アドレス空間（０〜２Ｎ−１）は、それぞれ同じ２ｍビットの大きさを有する複数（２（Ｎ−ｍ）個）のバンクＢＡＮＫ０、ＢＡＮＫ１、…、ＢＡＮＫ（α−１）（３０１）、ＢＡＮＫα（３０２）、ＢＡＮＫ（α＋１）（３０３）、…に分割されている。この場合、アドレスの下位ｍビットは、各バンク内のアドレスを示し、上位（Ｎ−ｍ）ビットはバンクの番号を示すことになる。３０４はループ終端アドレスを示し、３０５−１、３０５−２、３０５−３は、本実施形態におけるループ先頭アドレスの候補を示す。
【００４７】
ここで、ループの先頭アドレスと終端アドレスとの間の距離が通常小さいことから、ループ最大長をプログラム作成時に２ｍ以内に制約すると、ループ終端アドレス３０４がＢＡＮＫα（３０２）にある場合、ループ先頭アドレスは、ＢＡＮＫα（３０２）の前後±１以内のバンク、すなわちバンク相対値が−１であるＢＡＮＫ（α−１）（３０１）、バンク相対値が０であるＢＡＮＫα（３０２）、バンク相対値が＋１であるＢＡＮＫ（α＋１）（３０３）のいずれかにあることが特定できる。
【００４８】
このため、ループ先頭アドレスのバンク内アドレスを示すｍビットと、バンク相対値（＋１、−１、０）をスタック２０３に保存しておき、ループ終端において、その終端アドレスを示すＰＣ２０１のアドレスカウント値の上位（Ｎ−ｍ）ビットと、スタック２０３から読み出したバンク相対値とを加算し、その加算した結果と、スタック２０３から読み出したループ先頭アドレスの下位ｍビットとを連結することにより、Ｎビットのループ先頭アドレスを生成することができる。
【００４９】
なお、バンク相対値には、±１／０の３通りを表現すため、最低２ビットが必要であるが、ループの先頭アドレスが終端アドレスより小さいという限定を設けると、バンク相対値は−１、０の２通りのみであるため、１ビットに削減できる。
【００５０】
次に、このように構成されたループ処理制御装置の動作について説明する。
【００５１】
まず、通常時は、従来と同様に、アドレス増分器２０２により、ＰＣ１０１のアドレスカウント値が次命令のアドレスに更新される。
【００５２】
次に、ループ設定時には、ループ命令検出器２０５が、プログラム中の命令コードを解析し、ループ設定命令を検出する。命令コードは、本実施形態を実現するため、ループ命令コードと共に、ループ終端アドレスのバンク番号に対するループ先頭アドレスのバンク番号の相対値であるバンク相対値を検出できるように定義されており、プログラム作成時にバンク相対値が設定される。図１２に本実施形態における命令コードの例を示す。図１２に示すように、命令コードは、ループ設定命令を示すｐビットのフィールド１２０１に加え、ｒビットのバンク相対値フィールド１２０２を具備する。ここで、ｒビットは最大でも２ビットであり、これは、第１の実施形態における相対アドレスフィールド１１０２（図１１）のｑ（＝ｍ）ビットに比べて少ない。
【００５３】
本実施形態において、ループ命令検出器２０５は、命令フィールド１２０１を解析し、ループ設定命令が検出された場合は、バンク相対値フィールド１２０２内のバンク相対値を出力する。また、ループ命令検出時に、スタック制御器２０４は、ループ命令検出器２０５からの指示を受けて、ループ命令検出器２０５により検出されたバンク相対値をスタック２１０に格納すると共に、ループ先頭アドレスの下位ｍビットをＰＣ２０１から取得し、スタック２０９に格納する。
【００５４】
次に、ループ終端時は、ループ終端検出器３０６が、命令コードなどからループ終端に来たことを検出する。ループを継続する場合、すなわちループ先頭アドレスに分岐する場合、バンク相対値加算器２０８が、ＰＣ２０１の上位（Ｎ−ｍ）ビット（ループ終端アドレスのバンク番号）とスタック２１０に格納されているバンク相対値とを加算し、加算した結果を、スタック２０９に格納されているループ先頭アドレスの下位ｍビットと連結することにより、Ｎビットのループ先頭アドレスを生成する。アドレス選択器２０７は、ループ終端検出器２０６からの指示を受けて、ＰＣ２０１に対して、バンク相対値加算器２０８からの出力を選択する。一方、ループしない（ループの最終回である）場合は、従来と同様に、ループ終端検出器２０６は、スタック制御器２０４に指示を出して、スタック２０３を１段ポップさせる。
【００５５】
以上のように、本実施形態によれば、１段あたりのスタックのビット幅は、従来のＮビットから、ループの先頭と終端のアドレスの大小関係を制限しない場合は、（２＋ｍ）ビットに、またループの先頭と終端のアドレスの大小関係を制限する場合は、（１＋ｍ）ビットに削減できる。
に削減できる。
【００５６】
また、本実施形態は、第１の実施形態に比べて、以下の利点を有する。
（１）第１の実施形態における相対アドレス加算器１０８がＮビットで構成されたのに対して、本実施形態におけるバンク相対値加算器２０８は（Ｎ−ｍ）ビットで済み、回路規模が削減できる。
（２）プログラムカウンタ（ＰＣ）におけるアドレスカウント値の上位ビットが下位ビットに比べ、圧倒的にトグル率が小さいことから、バンク相対値加算器２０８における消費電力が削減できる。
（３）ループ設定命令に必要なの命令コードフィールドは、第１の実施形態の場合、ループ命令フィールドのｐビットに相対アドレスフィールドのｑ（＝ｍ）ビットを加えた（ｐ＋ｑ）ビット必要であるのに対して、本実施形態の場合、ループ命令フィールドのｐビットに、相対アドレスフィールドではなく、バンク相対値フィールドのｒ（１〜２）ビットを加えた（ｐ＋１）〜（ｐ＋２）ビットに削減され、プログラムメモリを削減できる。
【００５７】
（第３の実施形態）
第１および第２の実施形態では、ループの先頭アドレスと終端アドレスとの対応関係がユーザープログラム上で静的に解析不可能である場合や、１つのループ先頭アドレスに対してループ終端アドレスが複数ある場合には対応できない。
【００５８】
図９は、ループ終端アドレスが複数ある場合におけるループ処理の手順を示すフローチャートである。図９において、９０１はループ設定処理ステップ、９０２はループ先頭処理ステップ、９０７はループ内の条件判定ステップ、９０３−１、９０３−２は条件判定ステップ９０７の条件ごとの処理ステップ、９０４−１、９０４−２はそれぞれ条件判定ステップ９０７の条件ごとの処理を実行した後のループ終端１処理ステップ、ループ終端２処理ステップである。
【００５９】
このようなフローの場合、１つのループ先頭処理ステップ９０２に対してループ終端１処理ステップ９０４−１とループ終端１処理ステップ９０４−２の２つが存在しており、ループ設定時に、相対アドレスやバンク相対値を一意に決定できない。
【００６０】
また、第１および第２の実施形態では、命令コード上に相対アドレスまたはバンク相対値の情報を埋め込む必要があり、命令コードの設計上、必ず何ビットかのビットを占有するため、命令コード設計上不利となる。
【００６１】
本発明の第３の実施形態は、第１および第２の実施形態の改善形態を提供するものである。そのため、２Ｎビットの命令アドレス空間をそれぞれ２ｍ（ｍ＜Ｎ）ビットの大きさを有する複数（２Ｎ−ｍ個）のバンクに分割することで、アドレスの上位（Ｎ−ｍ）ビットをバンク番号で表し、さらに、各バンクを２（ｍ−ｋ）（ｋはｍビット中の上位ビットを表し、Ｎビット中の中間ビットである）ビットの大きさを有する複数（２ｋ個）のサブバンクに分割することで、アドレスの中間ｋビットをサブバンク番号で表す。
【００６２】
そして、ループの先頭と終端の相対アドレス（第１の実施形態）や、Ｎビットのループ先頭アドレスの下位ｍビットとバンク相対値（第２の実施形態）ではなく、Ｎビットのループ先頭アドレスの下位ｍビットのみをスタックに保持する。
【００６３】
さらに、ループ終端時に、そのループ終端アドレスを示す、Ｎビットのプログラムカウンタ（ＰＣ）におけるアドレスカウント値の中間ｋビット（終端アドレスのサブバンク番号）と、スタックに保持されているループ先頭アドレスの下位ｍビット中の上位ｋビット（先頭アドレスのサブバンク番号）とに基づいて、ループの先頭アドレスのバンク番号と終端アドレスのバンク番号の相対値を判定し、判定したバンク相対値とＰＣからの上位（Ｎ−ｍ）ビットを加算し、加算した結果と、スタックに保持されているループ先頭アドレスの下位ｍビットとを連結することで、Ｎビットのループ先頭アドレスを生成する。
【００６４】
図４は、本発明の第３の実施形態によるループ処理制御装置の構成図である。
図４において、本実施形態が第１および第２の実施形態と異なるのは、スタック１０３、２０２に代えて、Ｎビットのループ先頭アドレスの下位ｍビットのみを格納するスタック４０３を設け、さらに、ループ終端におけるアドレスカウント値の下位ｍビット中の上位ｋビットと、スタック４０３に格納されているループ先頭アドレスの下位ｍビット中の上位ｋビットとのサブバンク相対値を判定するサブバンク相対値判定器４１０を設けた点にある。
【００６５】
図４において、４０１は１０１、２０１と同様のプログラムカウンタ（ＰＣ）である。ＰＣ４０１において、４０１−１、４０１−２はそれぞれアドレスカウント値のうち上位（Ｎ−ｍ）ビット、下位ｍビットの格納領域である。４０２は１０２、２０２と同様のアドレス増分器である。
【００６６】
４０３はＮビットのループ先頭アドレスの下位ｍビットを格納するスタックである。なお、スタック４０３において、４０９−１はＮビットのループ先頭アドレスの中間ｋビットを格納するスタックの最上位階層で、４０９−２はＮビットのループ先頭アドレスの下位（ｍ−ｋ）ビットを格納するスタックの最上位階層である。
【００６７】
４０４は１０４、２０４と同様のスタック制御器である。４０５はループ命令検出器で、ループ設定命令のみを検出する。４０６は１０６、２０６と同様のループ終端検出器、４０７は１０７、２０７と同様のアドレス選択器である。４０８は、バンク相対値とＰＣ４０１からのアドレスカウント値の上位（Ｎ−ｍ）ビットとを加算して、Ｎビットのループ先頭アドレスの上位（Ｎ−ｍ）ビットを生成するバンク相対値加算器である。４１０はＰＣ４０１からのアドレスカウント値の下位ｍビット中の上位ｋビット（ループ終端アドレスのサブバンク番号）と、スタック２０３からのループ先頭アドレスの中間ｋビット（ループ先頭アドレスのサブバンク番号）とに基づいて、バンク相対値を判定するバンク相対値判定器である。
【００６８】
なお、図４において、Ｕ（Ｎ−ｍ）、Ｍ（ｋ）、Ｌ（ｍ）、Ｌ（ｍ−ｋ）は、それぞれ、Ｎビットのアドレスのうち、上位（Ｎ−ｍ）ビット、中間ｋビット、下位ｍビット、下位（ｍ−ｋ）ビットを表す。
【００６９】
次に、本実施形態における命令アドレス空間について、図５を用いて説明する。
【００７０】
図５は、命令アドレス空間を示す模式図である。図５において、左側は命令アドレスの全空間を示し、右側はそのうちループ終端アドレス付近の命令アドレス空間を拡大して示している。
【００７１】
図５において、２Ｎビットの命令アドレス空間（０〜２Ｎ−１）は、第２の実施形態と同様に、それぞれ同じ２ｍビットの大きさを有する複数（２（Ｎ−ｍ）個）のバンクＢＡＮＫ０、ＢＡＮＫ１、…、ＢＡＮＫ（α−１）（５０１）、ＢＡＮＫα（５０２）、ＢＡＮＫ（α＋１）（５０３）、…に分割され、さらに、各バンクは、それぞれ同じ２（ｍ−ｋ）ビットの大きさを有する複数（２ｋ個）のサブバンク５０１−００、５０１−０１、５０１−１０…に分割される。この場合、アドレスの上位（Ｎ−ｍ）ビットはバンクの番号を、下位ｍビットはメインバンク内のアドレスを表す。また、その下位ｍビット中の上位ｋビットはバンク内のサブバンク番号を示す。図５では、ｋ＝２に設定している。
【００７２】
図５において、ループ終端アドレス５０９がバンクＢＡＮＫα（５０２）内のサブバンク５０２−００にあるとすると、このサブバンク番号は「００」である。ここで、ループ先頭アドレスの下位ｍビットのみ既知であるとすると、ループ先頭アドレスの候補５１０−１、５１０−２、５１０−３はそれぞれ各バンクに１つずつあり、そのバンク内のサブバンク番号は既知なｍビットのうち上位２ビットの内容から例えば「１１」であることがわかる。
【００７３】
また、ここで、ループの先頭アドレスと終端アドレスの距離の最大値が±２（ｍ−２）（サブバンクの大きさは２（ｍ−２））以内になるようにプログラム作成時に制約してあった場合、ループ先頭アドレスは、隣接するサブバンク５０１−１１、５０２−００、５０２−０１のうちから選ばれ、サブバンク番号が「１１」であることから、サブバンク５０１−１１にあることが既定でき、その際のサブバンク相対値は−１であることがわかる。
【００７４】
同様にして、ループの先頭アドレスと終端アドレスのサブバンク番号からバンク相対値が規定できる。図１３（ａ）〜図１３（ｄ）は、ループ終端アドレスが各サブバンクにあった場合のループ先頭アドレスのサブバンク番号を表す図である。
【００７５】
まず、ループ終端アドレスのサブバンク番号が「００」である（図１３（ａ）に丸で囲んで示す）場合、ループ先頭アドレスのサブバンク番号が「１１」であれば、バンク相対値は−１で、ループ先頭アドレスのサブバンク番号が「００」か「０１」であれば、バンク相対値は０となる。ループ先頭アドレスのサブバンク番号が「１０」の場合は、隣接するサブバンクは存在しないのでエラーとなる。
【００７６】
また、ループ終端アドレスのサブバンク番号が「０１」である（図１３（ｂ）に丸で囲んで示す）場合、ループ先頭アドレスのサブバンク番号が「００」、「０１」、「１０」であれば、バンク相対値は０となる。ループ先頭アドレスのサブバンク番号が「１１」の場合はエラーとなる。
【００７７】
また、ループ終端アドレスのサブバンク番号が「１０」である（図１３（ｃ）に丸で囲んで示す）場合、ループ先頭アドレスのサブバンク番号が「０１」、「１０」、「１１」であれば、バンク相対値は０となる。ループ先頭アドレスのサブバンク番号が「００」の場合はエラーとなる。
【００７８】
また、ループ終端アドレスのサブバンク番号が「１１」である（図１３（ｄ）に丸で囲んで示す）、ループ先頭アドレスのサブバンク番号が「１０」、「１１」であれば、バンク相対値は０であり、「００」であれば、バンク相対値は＋１となる。ループ先頭アドレスのサブバンク番号が「０１」の場合はエラーとなる。
【００７９】
以上の結果を図６に示す。
【００８０】
図６は、ループ終端アドレスのサブバンク番号（ＥＳＵＢ＿ＮＯ．）とループ先頭アドレスのサブバンク番号（ＴＳＵＢ＿ＮＯ．）からバンク相対値を判定するテーブルを示す図である。なお、図６において、Ｘはエラーを示す。
【００８１】
また、上記説明でエラーとしていたケースを利用し、プログラム作成時のループ先頭アドレス範囲の制約を−２×２（ｍ−２）〜＋２（ｍ−２）、つまりアドレスの小さい側に隣接する２つのサブバンクと大きい側の１つのサブバンクまで拡張することができる。この場合における、ループ終端アドレスが各サブバンクにあった場合のループ先頭アドレスのサブバンク番号を図１４（ａ）〜図１４（ｄ）に示す。
【００８２】
まず、ループ終端アドレスのサブバンク番号が「００」である（図１４（ａ）に丸で囲んで示す）場合、ループ先頭アドレスのサブバンク番号が「１０」、「１１」であれば、バンク相対値は−１で、「００」か「０１」であれば、バンク相対値は０となる。
【００８３】
また、ループ終端アドレスのサブバンク番号が「０１」である（図１４（ｂ）に丸で囲んで示す）場合、ループ先頭アドレスのサブバンク番号が「００」、「０１」、「１０」であれば、バンク相対値は０で、「１１」であれば、バンク相対値は−１となる。
【００８４】
また、ループ終端アドレスのサブバンク番号が「１０」である（図１４（ｃ）に丸で囲んで示す）場合、ループ先頭アドレスのサブバンク番号「００」、「０１」、「１０」、「１１」のすべてについて、バンク相対値は０となる。
【００８５】
また、ループ終端アドレスのサブバンク番号が「１１」である（図１４（ｄ）に丸で囲んで示す）場合、ループ先頭アドレスのサブバンク番号が「０１」、「１０」、「１１」であれば、バンク相対値は０で、「００」であれば、バンク相対値は＋１となる。
【００８６】
以上の結果を、図７に示す。
【００８７】
図７は、ループ先頭アドレス範囲を拡大した場合における、ループ終端アドレスのサブバンク番号（ＥＳＵＢ＿ＮＯ．）とループ先頭アドレスのサブバンク番号（ＴＳＵＢ＿ＮＯ．）からバンク相対値を判定するテーブルを示す図である。
【００８８】
さらに、判定する中間ｋビットを増やすこともできる。
【００８９】
たとえば、ループの先頭と終端のアドレス距離は、ｋ＝３に設定した場合、−４×２（ｍ−３）〜＋３×２（ｍ−３）となり、ｋ＝４に設定した場合、−８×２（ｍ−４）〜＋７×２（ｍ−４）の様に、規定される大きさは、２ｍ−２（ｍ−ｋ）となる。この減少分２（ｍ−ｋ）は、ループ終端アドレスがサブバンク内で決まらない分のマージンによって生じており、よって、ｋが大きい方が減少分２（ｍ−ｋ）は少なくなり、よりアドレス距離を広くとることができる。理想的にはｍ＝ｋが最も範囲が広くなるが、その場合、判定に使用するサブバンク番号（ｋ）のビット幅が大きくなり、回路規模、消費電力等が増加するため、必要とする最小限のビット幅で実装することが望ましい。
【００９０】
なお、上記の例ではすべて、相対アドレスが負の方向に大きくなるように、アドレス範囲を設定しているが、テーブルの組み合わせを変更することで、正の方向に大きくとったり、−６×２（ｍ−３）〜２（ｍ−３）（ここで、ｋ＝３）の様に、アドレス範囲を大きく片側の方向にとって、非対称にすることも可能である。
【００９１】
特に、通常、ループ先頭アドレスがループ終端アドレスよりも小さい場合が多いことを利用し、プログラム作成時にアドレスの大小関係を制限し、相対アドレスの範囲を０〜２（ｍ−１）（ｋ＝１）に制限することにより、バンク相対値は０または＋１のみとなる。この場合、バンク相対値は、ループ終端アドレスとループ先頭アドレスのサブバンク番号が同じである場合、０となり、それらのサブバンク番号が異なる場合、＋１となり、バンク相対値の判定に必要なビット数ｋは１となる。
【００９２】
図８は、上記のようにループ先頭アドレスとループ終端アドレスの大小関係を規定した場合における、ループ終端アドレスのサブバンク番号（ＥＳＵＢ＿ＮＯ．）とループ先頭アドレスのサブバンク番号（ＴＳＵＢ＿ＮＯ．）からバンク相対値を判定するテーブルを示す図である。
【００９３】
次に、このように構成されたループ処理制御装置の動作について説明する。
【００９４】
まず、通常時は、従来と同様に、アドレス増分器４０２により、ＰＣ４０１のアドレスカウント値が次命令のアドレスに更新される。
【００９５】
次に、ループ設定時には、ループ命令検出器４０５が、プログラム中の命令コードを解析し、ループ設定命令を検出する。本実施形態では、ループ設定命令であることのみが検出され、ループ先頭と終端の相対アドレスやバンク相対値は検出されない。よって、ループ設定命令の命令コードは、ループ設定命令を判定するフィールドしか必要としない。このため、必要なフィールドの総量は、第１の実施形態に比べて相対アドレスフィールドのｑ（＝ｍ）ビットだけ、第２の実施形態に比べてバンク相対値フィールドのｒビット（＝ｋ）だけ少なくて済む。
【００９６】
ループ命令検出器４０５は、スタック制御器４０４に指示を出して、スタック制御器４０４は、Ｎビットのループ先頭アドレスの下位ｍビットをスタック４０３にプッシュする。スタック４０３は、ＦＩＬＯ形式のスタックであり、ループ先頭アドレスの下位ｍビットのうち上位ｋビットを最上位階層のスタック４０９−１に、下位（ｍ−ｋ）ビットを最上位階層のスタック４０９−２に格納する。
【００９７】
次に、ループ終端時には、ループ終端検出器４０６が、命令コードなどからループ終端に来たことを検出する。ループ内のプログラムを繰り返す場合、すなわちループ先頭アドレスに分岐する場合は、バンク相対値判定器４１０が、ＰＣ４０１の下位ｍビット格納領域４０１−１から出力される下位ｍビット中のサブバンク番号を表す中間ｋビット（ループ終端アドレスのサブバンク番号）と、スタック４０３の最上位階層４０９−１に格納されているループ先頭アドレスの下位ｍビット中の上位ｋビット（ループ先頭アドレスのサブバンク番号）とを受けて、図６または図７に示すテーブルを参照して、分岐時のバンク相対値を判定する。
【００９８】
バンク相対値加算器４０８は、バンク相対値判定器４１０により判定されたバンク相対値と、ＰＣ４０１から出力されるループ終端アドレスの上位（Ｎ−ｍ）ビットを加算することにより、分岐先アドレスの上位（Ｎ−ｍ）ビット（Ｕ（Ｎ−ｍ））を生成する。バンク相対値加算器４０８からの分岐先アドレスの上位（Ｎ−ｍ）ビット（Ｕ（Ｎ−ｍ））は、スタック４０３の最上位階層４０９−１、４０９−２からそれぞれ読み出された、ループ先頭アドレスの中間ｋビット、下位（ｍ−ｋ）ビットと連結されて、Ｎビットのループ先頭アドレスが生成される。
【００９９】
ループ内のプログラムをこれ以上繰り返さない（ループの最終回）場合は、従来と同様、ループ終端器４０６がスタック制御器４０４に指示を出して、スタック４０３を１段ポップさせる。
【０１００】
以上のように、本実施形態によれば、１段あたりのスタックのビット幅は、下位アドレスを表現するｍビットに削減できる。
【０１０１】
また、本実施形態は、第１および第２の実施形態に比べて、以下の利点を有する。
（１）ループの先頭アドレスと終端アドレスの相対位置の関係を分岐発生時に動的に判断することから、プログラム中の命令コード生成時に、先頭アドレスと終端アドレスの対応関係を判断する必要がない。
（２）１つのループ先頭アドレスに対して複数のループ終端アドレスを設定することができる。
（３）ループ設定命令に必要な命令コードのフィールドが少なくてよく、命令コード設計上有利となる。
【０１０２】
【発明の効果】
以上説明したように、本発明によれば、ループ処理性能を維持しつつ、ループ処理に必要なスタックレジスタの回路規模を低減することが可能になる。
【０１０３】
【図面の簡単な説明】
【図１】本発明の第１の実施形態によるループ処理制御装置の構成図
【図２】本発明の第２の実施形態によるループ処理制御装置の構成図
【図３】第２の実施形態におけるメモリアドレス空間を示す模式図
【図４】本発明の第３の実施形態によるループ処理制御装置の構成図
【図５】第３の実施形態におけるメモリアドレス空間を示す模式図
【図６】第３の実施形態におけるバンク相対値の判定テーブルの一例を示す図
【図７】第３の実施形態におけるバンク相対値の判定テーブルの変形例を示す図
【図８】第３の実施形態におけるバンク相対値の判定テーブルの更なる変形例を示す図
【図９】１つのループ先頭処理に対して２つのループ終端処理が存在する場合のループ処理手順を示すフローチャート
【図１０】従来の命令コードのフィールドを示す模式図
【図１１】第１の実施形態における命令コードのフィールドを示す模式図
【図１２】第２の実施形態における命令コードのフィールドを示す模式図
【図１３】第３の実施形態において、最大ループ長を±２（ｍ−２）とした場合の、終端アドレスが各サブバンクにあった場合のループ先頭アドレスのサブバンク番号を表す図
【図１４】第３の実施形態において、最大ループ長を−２×２（ｍ−２）〜＋２（ｍ−２）とした場合の、終端アドレスが各サブバンクにあった場合のループ先頭アドレスのサブバンク番号を表す図
【図１５】従来の一重のループ処理手順を示すフローチャート
【図１６】従来の二重のループ処理手順を示すフローチャート
【図１７】従来のループ処理制御装置の構成図
【符号の説明】
１０１、２０１、４０１　プログラムカウンタ（ＰＣ）
１０２、２０２、４０２　アドレス増分器
１０３　相対アドレスのスタック
１０４、２０２、４０４　スタック制御器
１０５、２０５、４０５　ループ命令検出器
１０６、２０６、４０６　ループ終端検出器
１０７、２０７、４０７　アドレス選択器
１０８　相対アドレス加算器
１０９　スタック１０３の最上位階層
２０３　ループ先頭アドレスの下位ｍビットとバンク相対値のスタック
２０８、４０８　バンク相対値加算器
２０９　ループ先頭アドレスの下位ｍビットに対するスタック２０３の最上位階層
２１０　バンク相対値に対するスタック２０３の最上位階層
４０３　ループ先頭アドレスの下位ｍビットのスタック
４０９−１　ループ先頭アドレスの下位ｍビット中の上位ｋビットに対するスタック４０３の最上位階層
４０９−２　ループ先頭アドレスの下位ｍビット中の下位（ｍ−ｋ）ビットに対するスタック４０３の最上位階層
４１０　バンク相対値判定器
【図１】
2004094824.tif 000003
【図２】
2004094824.tif 000004
【図３】
2004094824.tif 000005
【図４】
2004094824.tif 000006
【図５】
2004094824.tif 000007
【図６】
2004094824.tif 000008
【図７】
2004094824.tif 000009
【図８】
2004094824.tif 000010
【図９】
2004094824.tif 000011
【図１０】
2004094824.tif 000012
【図１１】
2004094824.tif 000013
【図１２】
2004094824.tif 000014
【図１３】
2004094824.tif 000015
【図１４】
2004094824.tif 000016
【図１５】
2004094824.tif 000017
【図１６】
2004094824.tif 000018
【図１７】
2004094824.tif 000019
【手続補正書】
【提出日】平成14年9月6日(2002.9.6)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】０００６
【補正方法】変更
【補正の内容】
【０００６】
図１７は、従来のループ先頭アドレススタックを用いたループ処理制御装置の構成図である（例えば、特許文献１参照）。図１７において、１７０１はプログラムカウンタ（ＰＣ）、１７０２はＰＣ１７０１からのアドレスを１ずつ更新するアドレス増分器である。１７０３はループの先頭アドレスのスタックであり、ループ設定命令の検出時にＰＣ１７０１の値を保存する。また、スタック１７０３は、多重ループ時には、複数あるスタックに対して１階層ずつＦＩＬＯ（Ｆｉｒｓｔ　Ｉｎ　Ｌａｓｔ　Ｏｕｔ）形式で押し出し（プッシュし）ながら先頭アドレスを保存し、ループ終了時には、１階層ずつスタックの先頭アドレスを戻し（ポップし）ていく。なお、１７０９はスタック１７０３の最上位階層のスタックである。


【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００１１
【補正方法】変更
【補正の内容】
【００１１】
次に、ループ終端時には、ループ終端検出器１７０６が、命令コードなどからループ終端に来たことを検出する。ループ内のプログラムを繰り返す場合、ループ終端検出器１７０６は選択器１７０４に指示を出し、スタック１７０３上の最上位スタック１７０９を選択させることにより、プログラムの実行をループ先頭に分岐させる。ループ内のプログラムをこれ以上繰り返さない（ループの最終回）場合は、ループ終端検出器１７０６はスタック制御器１７０４に指示を出し、スタック１７０３を１段ポップさせ、ＰＣ１７０１の値は通常時と同じく次命令アドレスに更新される。
【特許文献１】
特開平０５−００２４８１号公報