(57)【要約】【課題】  レジスタのビット幅に対して半端なデータサイズのデータが連続する際に、レジスタを有効に使用する。【解決手段】  プロセッサは、入力されたデータに対する演算を実行する演算部と、データが格納される複数の第１レジスタと、入力データ抽出部とを有している。例えば、入力データ抽出部は、演算対象のデータを含む入力ビット列が格納された第１レジスタから入力ビット列を読み出す。そして、入力データ抽出部は、予め設定された第１位置情報に基づいて、読み出した入力ビット列から演算対象のデータを抽出し、抽出した演算対象のデータを演算部のビット幅に拡張する。【選択図】    図１
2010165245.tif 000002
【特許請求の範囲】
【請求項１】
入力されたデータに対する演算を実行する演算部と、
データが格納される複数の第１レジスタと、
演算対象のデータを含む入力ビット列が格納された前記第１レジスタから前記入力ビット列を読み出し、予め設定された第１位置情報に基づいて、読み出した前記入力ビット列から前記演算対象のデータを抽出し、抽出した前記演算対象のデータを前記演算部のビット幅に拡張して前記演算部に入力する入力データ抽出部とを備えていることを特徴とするプロセッサ。
【請求項２】
請求項１記載のプロセッサにおいて、
予め設定された第２位置情報に基づいて算出された配置位置に、前記演算部の演算結果のデータが位置する出力ビット列を生成する出力データ生成部を備えていることを特徴とするプロセッサ。
【請求項３】
請求項２記載のプロセッサにおいて、
前記出力ビット列が前記第１レジスタに格納される度に、前記出力ビット列が格納される第１バッファを備え、
前記出力データ生成部は、前記第１バッファから読み出されたデータの前記配置位置に、前記演算結果のデータを配置することにより、前記第１レジスタおよび前記第１バッファに格納する前記出力ビット列を生成することを特徴とするプロセッサ。
【請求項４】
請求項２記載のプロセッサにおいて、
前記第１レジスタ毎に対応して設けられ、前記第１レジスタのアクセス対象のビット位置を示すオフセット情報を含む制御レジスタと、
前記第１レジスタへのアクセスに応じて、前記制御レジスタの前記オフセット情報を更新する制御部とを備え
前記第１位置情報は、前記入力ビット列が格納された前記第１レジスタに対応する前記制御レジスタの前記オフセット情報であり、
前記第２位置情報は、前記演算結果のデータが格納される前記第１レジスタに対応する前記制御レジスタの前記オフセット情報であることを特徴とするプロセッサ。
【請求項５】
請求項１記載のプロセッサにおいて、
前記第１レジスタ毎に対応して設けられ、前記第１レジスタのアクセス対象のビット位置を示すオフセット情報を含む制御レジスタと、
前記第１レジスタへのアクセスに応じて、前記制御レジスタの前記オフセット情報を更新する制御部とを備え
前記第１位置情報は、前記入力ビット列が格納された前記第１レジスタに対応する前記制御レジスタの前記オフセット情報であることを特徴とするプロセッサ。
【請求項６】
入力されたデータに対する演算を実行する演算部と、
データが格納される複数の第１レジスタと、
２つの前記第１レジスタにより構成される第１レジスタ群毎に対応して設けられ、前記第１レジスタ群のうちのアクセスされる前記第１レジスタを示すレジスタ情報と、前記第１レジスタのアクセス対象のビット位置を示すオフセット情報とを含む制御レジスタと、
演算対象のデータを含む入力ビット列が格納された前記第１レジスタ群から前記入力ビット列を読み出し、前記入力ビット列が格納された前記第１レジスタ群に対応する前記制御レジスタの前記オフセット情報に基づいて、読み出した前記入力ビット列から前記演算対象のデータを抽出し、抽出した前記演算対象のデータを前記演算部のビット幅に拡張する入力データ抽出部と、
前記演算部の演算結果のデータが格納される前記第１レジスタ群に対応する前記制御レジスタの前記オフセット情報に基づいて配置位置を算出し、前記配置位置に前記演算結果のデータが位置する出力ビット列を生成する出力データ生成部と、
前記第１レジスタ群へのアクセスに応じて、前記制御レジスタの前記オフセット情報を更新する制御部と、
前記演算結果のデータの少なくとも一部が格納される第１バッファと
前記入力データ抽出部に読み出された前記入力ビット列が格納される第２バッファとを備え、
前記入力データ抽出部は、前記演算対象のデータが前記第１レジスタ群の２つの前記第１レジスタにまたいで格納されている場合、前記第２バッファを用いて、２つの前記第１レジスタから前記演算対象のデータを読み出し、
前記出力データ生成部は、前記演算結果のデータが前記第１レジスタ群の２つの前記第１レジスタにまたいで格納される場合、前記第１バッファを用いて、一方の前記第１レジスタに格納される前記出力ビット列に、前記演算結果のデータの一部である部分データを配置し、他方の前記第１レジスタに格納される前記出力ビット列に、前記部分データを除く前記演算結果のデータを配置することを特徴とするプロセッサ。
【請求項７】
請求項６記載のプロセッサにおいて、
前記制御部は、前記第１レジスタ群へのアクセスに応じて、前記制御レジスタの前記レジスタ情報および前記オフセット情報を更新することを特徴とするプロセッサ。
【請求項８】
請求項７記載のプロセッサにおいて、
前記制御レジスタは、前記レジスタ情報と、前記オフセット情報と、前記レジスタ群の２つの前記第１レジスタのいずれにも転送すべきデータが格納されていないことを示すエンプティ情報と、前記レジスタ群の２つの前記第１レジスタの両方に転送すべきデータが格納されていることを示すフル情報とを有し、
前記制御部は、前記第１レジスタ群へのアクセスに応じて、前記制御レジスタの前記レジスタ情報、前記オフセット情報、前記エンプティ情報および前記フル情報を更新することを特徴とするプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサに関する。
【背景技術】
【０００２】
プロセッサは、四則演算や論理演算等を行う算術論理演算ユニット（以下、ＡＬＵ（Arithmetic Logic Unit）とも称する）と、レジスタとを有している。一般的に、レジスタのビット長（ビット幅）は、３２ビットあるいは６４ビット等である。例えば、３２ビット長のレジスタを有するプロセッサでは、データサイズ（ビット幅）が３２ビット未満のデータをレジスタに格納する場合、レジスタの上位ビットは、“０”あるいは符号拡張で埋められる。したがって、データサイズが小さい場合等、レジスタは、有効に使用されない。なお、８の倍数のデータサイズ（８ビットあるいは１６ビット等）のデータを連続して並べてレジスタに格納し、連続するデータをそれぞれ処理するプロセッサが提案されている。
【０００３】
また、可変ビット長データを扱う装置では、複数の可変ビット長データからなるビット列をデータメモリから読み出し、読み出したビット列をバレルシフタで任意のビット数だけ論理シフトして演算器に入力する構成が提案されている（例えば、特許文献１参照）。なお、特許文献１の構成では、データメモリから読み出されるビット列のビット幅は、可変ビット長データの最大ビット長（例えば、１６ビット）の２倍以上（例えば、３２ビット）である。また、バレルシフタによりシフトするビット数は、演算器により算出される。
【０００４】
なお、複数の演算器により構成されるＡＬＵを任意のビット幅で分割し、分割したＡＬＵの演算器で複数組のデータをそれぞれ演算する構成が提案されている（例えば、特許文献２参照）。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
８の倍数のデータサイズ（８ビットあるいは１６ビット等）のデータを連続して並べてレジスタに格納し、連続するデータをそれぞれ処理するプロセッサでは、７ビットや９ビット等の半端なデータサイズを有するデータは、８の倍数のデータサイズに拡張される。この場合、拡張されたデータの上位ビットは、“０”あるいは符号拡張で埋められている。したがって、８の倍数以外の半端なデータサイズのデータが連続する場合等、レジスタは、有効に使用されない。
【０００６】
本発明の目的は、レジスタのビット幅に対して半端なデータサイズのデータが連続する際に、レジスタを有効に使用することである。
【課題を解決するための手段】
【０００７】
プロセッサは、入力されたデータに対する演算を実行する演算部と、データが格納される複数の第１レジスタと、入力データ抽出部とを有している。例えば、入力データ抽出部は、演算対象のデータを含む入力ビット列が格納された第１レジスタから入力ビット列を読み出す。そして、入力データ抽出部は、予め設定された第１位置情報に基づいて、読み出した入力ビット列から演算対象のデータを抽出し、抽出した演算対象のデータを演算部のビット幅に拡張する。
【発明の効果】
【０００８】
レジスタのビット幅に対して半端なデータサイズのデータが連続する際に、レジスタを有効に使用できる。
【図面の簡単な説明】
【０００９】
【図１】一実施形態におけるプロセッサの概要を示す図である。
【図２】図１に示した制御部の一例を示す図である。
【図３】図２に示した更新部の動作の一例を示す図である。
【図４】図１に示したレジスタに格納されるデータの一例を示す図である。
【図５】図１に示した入力データ抽出部の概要を示す図である。
【図６】図１に示した出力データ生成部の概要を示す図である。
【図７】別の実施形態におけるプロセッサの概要を示す図である。
【図８】図７に示した制御部の一例を示す図である。
【図９】図７に示した更新部の動作の一例を示す図である。
【図１０】図９に示した動作の続きを示す図である。
【図１１】図７示した変換部の動作の一例を示す図である。
【図１２】図７に示した入力データ抽出部の概要を示す図である。
【図１３】図７に示した出力データ生成部の概要を示す図である。
【図１４】ロード命令とレジスタの状態との関係の一例を示す図である。
【図１５】図７に示したレジスタに格納されるデータの一例を示す図である。
【図１６】図１２に示した入力データ抽出部の動作の一例を示す図である。
【図１７】図１６に示した動作の続きを示す図である。
【図１８】図１３に示した出力データ生成部の動作の一例を示す図である。
【図１９】図１８に示した動作の続きを示す図である。
【図２０】図１９に示した動作の続きを示す図である。
【発明を実施するための形態】
【００１０】
以下、本発明の実施形態を図面を用いて説明する。
【００１１】
図１は、本発明の一実施形態を示している。プロセッサ１０は、実行ユニット２０、レジスタファイル３０、制御レジスタ４０、４１、４２および制御部５０を有している。例えば、プロセッサ１０は、３２ビットプロセッサであり、３２ビット幅の汎用レジスタＲ（Ｒ０−Ｒ９）をレジスタファイル３０内に有している。なお、図中の破線で囲んだ汎用レジスタＲ４、Ｒ６、Ｒ８は、データが格納されるレジスタであり、制御レジスタ４０、４１、４２は、汎用レジスタＲ４、Ｒ６、Ｒ８にそれぞれ対応して設けられている。以下、汎用レジスタＲ（Ｒ０−Ｒ９）をレジスタＲ（Ｒ０−Ｒ９）とも称する。
【００１２】
実行ユニット２０は、レジスタファイル３０からデータを読み出し、データを命令実行部２４に出力する２つの入力データ抽出部２２と、命令を実行する命令実行部２４と、令実行部２４からデータを受け、レジスタファイル３０にデータを書き込む出力データ生成部２８とを有している。例えば、命令実行部２４は、四則演算や論理演算等を実行する算術論理演算ユニット（以下、ＡＬＵ（Arithmetic Logic Unit）とも称する）２５と、ロード／ストア命令を実行するロード／ストアユニット２６とを有している。なお、実行ユニット２０は、図に示した入力データ抽出部２２を１つにまとめた入力データ抽出部を有してもよい。
【００１３】
制御レジスタ４０、４１、４２は、例えば、命令によりレジスタＲ４、Ｒ６、Ｒ８がアクセスされる場合、制御部５０によりそれぞれ参照される。例えば、制御レジスタ４０は、制御レジスタ４０を有効にするか否を示すイネーブルＥＮ、レジスタＲ４に格納されるアクセス対象のデータのビット長を示すビット長ＬＮ、アクセス対象のデータのレジスタＲ４内でのオフセット値（データ位置）を示すオフセットＯＦを有している。例えば、制御レジスタ４０を有効にする場合、イネーブルＥＮは、“１”に設定される。また、オフセットＯＦは、後述する図３に示すように、次に使用するデータ位置を示すために、動作中に更新される。
【００１４】
同様に、例えば、制御レジスタ４１は、制御レジスタ４１を有効にするか否を示すイネーブルＥＮ、レジスタＲ６に格納されるアクセス対象のデータのビット長を示すビット長ＬＮ、アクセス対象のデータのレジスタＲ６内でのオフセット値を示すオフセットＯＦを有している。また、例えば、制御レジスタ４２は、制御レジスタ４１を有効にするか否を示すイネーブルＥＮ、レジスタＲ６に格納されるアクセス対象のデータのビット長を示すビット長ＬＮ、アクセス対象のデータのレジスタＲ６内でのオフセット値を示すオフセットＯＦを有している。すなわち、制御レジスタ４１、４２は、対応するレジスタＲ（Ｒ６、Ｒ８）を除いて、制御レジスタ４０と同じである。
【００１５】
制御部５０は、例えば、命令によりアクセスされるレジスタＲを示すレジスタ番号ＲＮ１および命令の種類を示す命令種別ＴＰをデコーダ（図示せず）から受け、制御レジスタ４０、４１、４２のオフセットＯＦを更新する。ここで、この実施形態では、レジスタ番号ＲＮ１のレジスタＲＳ１、ＲＴ１は、ソースのレジスタＲを示し、レジスタ番号ＲＮ１のレジスタＲＤ１は、ディスティネーションのレジスタＲを示している。また、命令種別ＴＰは、実行する命令の種類（ロード命令等）を示している。
【００１６】
また、例えば、制御部５０は、レジスタ番号ＲＮ１と、制御レジスタ４０、４１、４２から読み出した制御情報ＲＩＮＦ１０、２０、３０とを実行ユニット２０に出力する。例えば、各制御情報ＲＩＮＦ１０、２０、３０は、各制御レジスタ４０、４１、４２のイネーブルＥＮ、ビット長ＬＮおよびオフセットＯＦを含む情報である。なお、図１では、制御レジスタ４０、４１、４２の初期値等を設定するための制御信号（例えば、後述する図２に示す初期値ＩＮＴ１）の記載を省略している。
【００１７】
図２は、図１に示した制御部５０の一例を示している。制御部５０（図中の破線で囲んだ部分）は、更新部５１およびセレクタ５２Ａを有している。なお、図２は、制御レジスタ４０のオフセットＯＦを更新するための更新部５１およびセレクタ５２Ａを示し、制御レジスタ４１、４２のオフセットＯＦを更新するための更新部５１およびセレクタ５２Ａの記載を省略している。例えば、制御レジスタ４１、４２のオフセットＯＦを更新するための更新部５１およびセレクタ５２Ａは、制御する制御レジスタ４１、４２を除いて、図２と同じである。
【００１８】
制御部５０は、例えば、初期値ＩＮＴ１を受け、制御レジスタ４０のイネーブルＥＮ、ビット長ＬＮおよびオフセットＯＦの値を初期値ＩＮＴ１に設定する。この場合、セレクタ５２Ａは、初期値ＩＮＴ１の値（より詳細には、オフセットＯＦの初期値）を制御レジスタ４０に設定する値として選択する。ここで、例えば、制御レジスタ４０、４１、４２は、アドレスマップ上に割り当てられている。これにより、ロード命令やストア命令で、制御レジスタ４０、４１、４２の値（初期値等）を設定できる。また、図の例では、制御レジスタ４０、４１、４２は、フリップフロップ（以下、ＦＦとも称する）により構成されている。
【００１９】
更新部５１は、例えば、レジスタ番号ＲＮ１および命令種別ＴＰに基づいて、オフセットＯＦを更新する。例えば、レジスタＲ４がアクセスされる命令が実行された場合、更新部５１は、次に使用されるデータのレジスタＲ４におけるビット位置を算出し、オフセットＯＦを更新する。なお、更新部５１の動作の詳細は、後述する図３で説明する。セレクタ５２Ａは、オフセットＯＦを更新する場合、更新部５１から受ける値を制御レジスタ４０に設定する値として選択する。
【００２０】
図３は、図２に示した更新部５１の動作の一例を示している。なお、図３は、制御レジスタ４０のオフセットＯＦを更新するための更新部５１（制御レジスタ４０用の更新部５１）の動作を示している。すなわち、図３では、制御レジスタ４０用の更新部５１の動作を説明する。制御レジスタ４１、４２のオフセットＯＦを更新するための更新部５１（制御レジスタ４１、４２用の更新部５１）のそれぞれの動作は、レジスタＲ４をレジスタＲ６、Ｒ８にそれぞれ読み替えることで説明される。なお、上述した図２に示したセレクタ５２Ａは、更新部５１から受ける値を制御レジスタ４０に設定するする値として選択している。
【００２１】
先ず、処理６０では、更新部５１は、レジスタ番号ＲＮ１に基づいて、レジスタＲ４へのアクセスが発生するか否かを判定する。レジスタＲ４がアクセスされる場合（処理６０のＹｅｓ）、更新部５１の動作は、処理６１に移り、レジスタＲ４がアクセスされない場合（処理６０のＮｏ）、更新部５１は、オフセットＯＦを更新せずに処理を終了する。なお、制御レジスタ４１、４２用の更新部５１では、処理６０において、レジスタＲ６、Ｒ８へのアクセスがそれぞれ発生するか否かを判定する。
【００２２】
処理６１では、更新部５１は、イネーブルＥＮが“１”に設定されているか否かを判定する。すなわち、更新対象の制御レジスタ（図の例では、制御レジスタ４０）が有効か否かを判定する。イネーブルＥＮが“１”の場合（処理６１のＹｅｓ）、更新部５１の動作は、処理６２に移り、イネーブルＥＮが“１”でない場合（処理６１のＮｏ）、更新部５１は、オフセットＯＦを更新せずに処理を終了する。
【００２３】
処理６２では、更新部５１は、命令種別ＴＰに基づいて、命令がロード命令か否かを判定する。ロード命令でない場合（処理６２のＮｏ）、更新部５１の動作は、処理６３に移り、ロード命令の場合（処理６２のＹｅｓ）、更新部５１は、オフセットＯＦを更新せずに処理を終了する。
【００２４】
処理６３では、更新部５１は、命令種別ＴＰに基づいて、命令がストア命令か否かを判定する。ストア命令でない場合（処理６３のＮｏ）、更新部５１の動作は、処理６４に移り、ストア命令の場合（処理６３のＹｅｓ）、更新部５１は、オフセットＯＦを更新せずに処理を終了する。
【００２５】
処理６４では、更新部５１は、ビット長ＬＮを２倍した値とオフセットＯＦとの加算結果がレジスタＲのビット幅（この実施形態では、３２）以上か否かを判定する。加算結果が３２以上の場合（処理６４のＹｅｓ）、更新部５１の動作は、処理６５に移り、加算結果が３１以下の場合（処理６４のＮｏ）、更新部５１の動作は、処理６６に移る。
【００２６】
処理６５では、更新部５１は、オフセットＯＦを０に設定する。処理６６では、更新部５１は、現状のオフセットＯＦにビット長ＬＮを加算した値に、オフセットＯＦを更新する。これにより、オフセットＯＦは、次に使用するデータの位置に順次更新される。
【００２７】
なお、ロード命令およびストア命令が実行された後では、オフセットＯＦが“０”に設定されるように構成してもよい。この場合、例えば、処理６２のＹｅｓおよび処理６３のＹｅｓにおいて、更新部５１の動作は、処理６５（オフセットＯＦを“０”に設定）に移る。
【００２８】
図４は、レジスタＲ４、Ｒ６、Ｒ８に格納されるデータの一例を示す図である。なお、図４（ａ）は、連続するデータＤＳ０、ＤＳ１、ＤＳ２と連続するデータＤＴ０、ＤＴ１、ＤＴ２とをそれぞれ加算するプログラムの一例を示している。また、図４（ｂ）は、図４（ａ）のプログラムが実行された際のレジスタＲ４、Ｒ６、Ｒ８の状態の概要を示している。図４（ａ）のアドレスａｄｒ１、ａｄｒ２、ａｄｒ３は、メモリ（図示せず）のアドレスを示し、図４（ｂ）の網掛け部分は、有効なデータが格納されていない領域を示している。図のレジスタＲ４、Ｒ６、Ｒ８は、右側が下位ビットである。
【００２９】
なお、データＤＳ０、ＤＳ１、ＤＳ２、ＤＴ０、ＤＴ１、ＤＴ２のビット長は、９ビットであり、データＤＤ０、ＤＤ１、ＤＤ２のビット長は、１０ビットである。したがって、上述した図１に示した制御レジスタ４０、４１、４２のビット長ＬＮは、“９”、“９”、“１０”にそれぞれ設定されている。また、制御レジスタ４０、４１、４２のオフセットＯＦの初期値は、“０”に設定されている。
【００３０】
図４（ａ）のプログラムでは、先ず、プロセッサ１０は、アドレスａｄｒ１に連続して格納されているデータＤＳ０、ＤＳ１、ＤＳ２をレジスタＲ４にロードする（図４（ａ１）、（ｂ１））。次に、プロセッサ１０は、アドレスａｄｒ２に連続して格納されているデータＤＴ０、ＤＴ１、ＤＴ２をレジスタＲ６にロードする（図４（ａ２）、（ｂ１））。図の例では、レジスタＲ４、Ｒ６の有効に使用されない領域は、５ビットであり、データＤＳ０、ＤＳ１、ＤＳ２、ＤＴ０、ＤＴ１、ＤＴ２毎に１つのレジスタＲに格納する構成に比べて、レジスタＲを有効に使用できる。さらに、この実施形態では、演算対象のデータを抽出するために、上述した図１に示したＡＬＵ２５がシフト演算等を実行する必要がないため、連続するデータの演算を高速に処理できる。
【００３１】
そして、プロセッサ１０は、レジスタＲ４に格納されているデータＤＳ０とレジスタＲ６に格納されているデータＤＴ０とを加算し、加算結果であるデータＤＤ０をレジスタＲ８に格納する（図４（ａ３）、（ｂ２））。この際、制御レジスタ４０、４１、４２のオフセットＯＦは、上述した図３に示した動作により、“９”、“９”、“１０”にそれぞれ更新される。次に、プロセッサ１０は、レジスタＲ４に格納されているデータＤＳ１とレジスタＲ６に格納されているデータＤＴ１とを加算し、加算結果であるデータＤＤ１をレジスタＲ８に格納する（図４（ａ４）、（ｂ３））。この際、制御レジスタ４０、４１、４２のオフセットＯＦは、図３に示した動作により、“１８”、“１８”、“２０”にそれぞれ更新される。その後、プロセッサ１０は、レジスタＲ４に格納されているデータＤＳ２とレジスタＲ６に格納されているデータＤＴ２とを加算し、加算結果であるデータＤＤ２をレジスタＲ８に格納する（図４（ａ５）、（ｂ４））。
【００３２】
このように、レジスタＲ８の有効に使用されない領域は、２ビットであり、データＤＤ０、ＤＤ１、ＤＤ２毎に１つのレジスタＲに格納する構成に比べて、レジスタＲを有効に使用できる。さらに、この実施形態では、複数の演算結果のデータを連続して並べるために、ＡＬＵ２５がシフト演算等を実行する必要がないため、連続するデータの演算を高速に処理できる。最後に、プロセッサ１０は、レジスタＲ８に格納されているデータＤＤ０、ＤＤ１、ＤＤ２をアドレスａｄｒ３にストアする（図４（ａ６））。このように、この実施形態では、データＤＳ０、ＤＳ１、ＤＳ２、ＤＴ０、ＤＴ１、ＤＴ２、ＤＤ０、ＤＤ１、ＤＤ２を３２ビット幅に拡張してメモリに格納する必要がないため、メモリを有効に使用できる。
【００３３】
図５は、図１に示した入力データ抽出部２２の概要を示している。図中の網掛け部分は、有効なデータでない部分を示している。なお、図のデータＤＳ０、ＤＳ１、ＤＳ２の状態は、上述した図４（ａ４）の命令が実行されるときの状態に対応している。また、図のデータＤＳ０、ＤＳ１、ＤＳ２は、右側が下位ビットである。入力データ抽出部２２は、左論理シフト部２２０、右算術シフト部２２１、セレクタ２２２を有している。
【００３４】
左論理シフト部２２０は、レジスタＲから読み出されたデータＲＤＡＴＡをシフト量ＬＳＬ分だけ左論理シフトする。図の例では、データＲＤＡＴＡは、有効でないデータ（図の網掛け部分）、データＤＳ２、ＤＳ１、ＤＳ０を含むデータである。また、シフト量ＬＳＬは、読み出したレジスタＲに対応する制御レジスタ（例えば、制御レジスタ４０）のビット長ＬＮおよびオフセットＯＦの加算値をレジスタＲのビット幅である３２から引いた値である。左論理シフト部２２０により、例えば、演算対象のデータＤＳ１は、３２ビット幅のデータの一番左側にシフトされる。
【００３５】
右算術シフト部２２１は、左論理シフト部２２０の出力データ（３２ビット幅のデータ）をシフト量ＡＳＲ分だけ右算術シフトする。すなわち、３２ビット幅のデータの左側の空いたビットは、符号拡張ＳＥで埋められる。これにより、入力データ抽出部２２は、符号付きのデータを扱うことができる。なお、シフト量ＡＳＲは、読み出したレジスタＲに対応する制御レジスタ（例えば、制御レジスタ４０）のビット長ＬＮをレジスタＲのビット幅である３２から引いた値である。右算術シフト部２２１により、例えば、演算対象のデータＤＳ１は、３２ビット幅のデータの一番右側にシフトされる。
【００３６】
セレクタ２２２は、選択信号ＳＥＬに基づいて、データＳ１、Ｓ２の一方をデータＩＤＡＴＡとして上述した図１に示した命令実行部２４に出力する。例えば、セレクタ２２２は、レジスタＲ４、Ｒ６、Ｒ８のいずれかからデータＲＤＡＴＡが読み出される場合、データＲＤＡＴＡが読み出されるレジスタＲ４、Ｒ６、Ｒ８に対応する制御レジスタ４０、４１、４２のイネーブルＥＮが“１”（制御レジスタが有効）のときに、データＳ２（右算術シフト部２２１の出力データ）をデータＩＤＡＴＡとして命令実行部２４に出力する。その他の条件では、セレクタ２２２は、レジスタＲから読み出したデータＲＤＡＴＡ（データＳ１）をデータＩＤＡＴＡとして命令実行部２４に出力する。
【００３７】
例えば、セレクタ２２２は、レジスタＲ４、Ｒ６、Ｒ８以外のレジスタＲからデータＲＤＡＴＡが読み出される場合、レジスタＲから読み出したデータＲＤＡＴＡ（データＳ１）をデータＩＤＡＴＡとして命令実行部２４に出力する。すなわち、この実施形態では、選択信号ＳＥＬは、例えば、データＲＤＡＴＡが読み出されるレジスタＲを示すレジスタ番号ＲＮ１と、制御レジスタ４０、４１、４２のイネーブルＥＮとにより生成される。
【００３８】
図６は、図１に示した出力データ生成部２８の概要を示している。なお、図のデータＤＤ０、ＤＤ１の状態は、上述した図４（ａ４）の命令が実行されるときの状態に対応している。また、図のデータＤＤ０、ＤＤ１は、右側が下位ビットである。出力データ生成部２８は、左論理シフト部２８０、右論理シフト部２８１、ＦＦ２８２、オア回路（以下、ＯＲとも称する）２８３およびセレクタ２８４を有している。
【００３９】
左論理シフト部２８０は、上述した図１に示した命令実行部２４から受けたデータ（例えば、ＡＬＵ２５の演算結果）ＥＤＡＴＡをシフト量ＬＳＬ分だけ左論理シフトする。図の例では、データＥＤＡＴＡは、符号拡張ＳＥおよびデータＤＤ１から構成される３２ビット幅のデータである。また、シフト量ＬＳＬは、演算結果を格納するレジスタＲに対応する制御レジスタ（例えば、制御レジスタ４２）のビット長ＬＮをレジスタＲのビット幅である３２から引いた値である。左論理シフト部２８０により、例えば、演算結果のデータＤＤ１は、３２ビット幅のデータの一番左側にシフトされる。
【００４０】
右論理シフト部２８１は、左論理シフト部２８０の出力データ（３２ビット幅のデータ）をシフト量ＬＳＲ分だけ右論理シフトする。なお、３２ビット幅のデータの空いたビットは、“０”で埋められる。また、シフト量ＬＳＲは、演算結果を格納するレジスタＲに対応する制御レジスタ（例えば、制御レジスタ４２）のビット長ＬＮおよびオフセットＯＦの加算値をレジスタＲのビット幅である３２から引いた値である。右論理シフト部２８１により、例えば、演算結果のデータＤＤ１は、データＤＤ１の最下位ビットと３２ビット幅のデータにおけるオフセットＯＦの位置とが一致する位置にシフトされる。
【００４１】
オア回路２８３は、右論理シフト部２８１の出力データとＦＦ２８から読み出されるデータとのオアをセレクタ２８４およびＦＦ２８２に出力する。なお、ＦＦ２８２には、前回の演算命令（例えば、図４（ａ３））が実行された際のオア回路２８３の出力データ（図の例では、下位ビットから順にデータＤＤ０および“０”が配置された３２ビット幅のデータ）が格納されている。そして、今回の演算命令（例えば、図４（ａ４））により、ＦＦ２８２には、下位ビットから順に、データＤＤ０、データＤＤ１、“０”が配置された３２ビット幅のデータが格納される。
【００４２】
セレクタ２８４は、選択信号ＳＥＬに基づいて、データＳ１、Ｓ２の一方をデータＯＤＡＴＡとして、レジスタ番号ＲＮ１が示すレジスタＲに出力する。例えば、セレクタ２８４は、レジスタＲ４、Ｒ６、Ｒ８のいずれかにデータＯＤＡＴＡを格納する場合、データＯＤＡＴＡが格納されるレジスタＲ４、Ｒ６、Ｒ８に対応する制御レジスタ４０、４１、４２のイネーブルＥＮが“１”（制御レジスタが有効）のときに、データＳ２（オア回路２８３の出力データ）をデータＯＤＡＴＡとしてレジスタＲに出力する。その他の条件では、セレクタ２２２は、命令実行部２４から受けたデータＥＤＡＴＡ（データＳ１）をデータＯＤＡＴＡとして、レジスタ番号ＲＮ１が示すレジスタＲに出力する。
【００４３】
例えば、セレクタ２８４は、レジスタＲ４、Ｒ６、Ｒ８以外のレジスタＲにデータＯＤＡＴＡを格納する場合、命令実行部２４から受けたデータＥＤＡＴＡ（データＳ１）をデータＯＤＡＴＡとしてレジスタＲに出力する。すなわち、この実施形態では、選択信号ＳＥＬは、例えば、データＯＤＡＴＡが格納されるレジスタＲを示すレジスタ番号ＲＮ１と、制御レジスタ４０、４１、４２のイネーブルＥＮとにより生成される。
【００４４】
以上、この実施形態では、入力データ抽出部２２は、制御レジスタ４０、４１、４２に基づいて、レジスタＲ４、Ｒ６、Ｒ８の１つから連続する任意のビット長のデータを順次読み出す。さらに、この実施形態では、出力データ生成部２８は、制御レジスタ４０、４１、４２に基づいて、レジスタＲ４、Ｒ６、Ｒ８の１つに任意のビット長の複数のデータを順次格納する。したがって、この実施形態では、データ毎に１つのレジスタＲに格納する構成に比べて、レジスタＲを有効に使用できる。すなわち、この実施形態では、レジスタのビット幅に対して半端なデータサイズ（例えば、８の倍数以外のデータサイズ）のデータが連続する場合でも、レジスタを有効に使用できる。
【００４５】
図７は、別の実施形態におけるプロセッサの概要を示している。この実施形態のプロセッサ１１は、上述した図１に示した実行ユニット２０、制御レジスタ４０、４１、４２および制御部５０の代わりに、実行ユニット２１、制御レジスタ４３、４４、４５および制御部５４がそれぞれ設けられている。その他の構成は、図１−図６で説明した示したプロセッサ１０と同じである。図１−図６で説明した要素と同一の要素については、同一の符号を付し、これ等については、詳細な説明を省略する。
【００４６】
例えば、プロセッサ１１は、３２ビットプロセッサであり、実行ユニット２１、レジスタファイル３０、制御レジスタ４３、４４、４５および制御部５４を有している。なお、図中の破線で囲んだレジスタＲの組（Ｒ４とＲ５、Ｒ６とＲ７、Ｒ８とＲ９）には、制御レジスタ４３、４４、４５がそれぞれ対応して設けられている。すなわち、制御レジスタ４３、４４、４５は、図中の破線で囲んだレジスタＲの組（Ｒ４とＲ５、Ｒ６とＲ７、Ｒ８とＲ９）にそれぞれ対応して設けられている。
【００４７】
実行ユニット２１は、図１に示した入力データ抽出部２２および出力データ生成部２８の代わりに、入力データ抽出部２３および出力データ生成部２９がそれぞれ設けられている。入力データ抽出部２３は、レジスタＲの組（例えば、Ｒ４とＲ５、Ｒ６とＲ７、Ｒ８とＲ９）の両方のレジスタをまたいで格納されたデータを読み出せるように構成されている。例えば、レジスタＲ４、Ｒ５から構成されるレジスタ群からデータを読み出す場合、入力データ抽出部２３は、レジスタＲ４、Ｒ５をまたいで格納されたデータを読み出せる。なお、入力データ抽出部２３の詳細は、後述する図１４で説明する。
【００４８】
出力データ生成部２９は、レジスタＲの組（例えば、Ｒ４とＲ５、Ｒ６とＲ７、Ｒ８とＲ９）の両方のレジスタにまたいでデータを格納できるように構成されている。例えば、レジスタＲ４、Ｒ５から構成されるレジスタ群に２０ビット長のデータを２つ格納する場合、出力データ生成部２９は、２つめのデータの下位１２ビットをレジスタＲ４に格納し、２つめのデータの上位８ビットをレジスタＲ５に格納する。なお、出力データ生成部２９の詳細は、後述する図１５で説明する。
【００４９】
制御レジスタ４３は、レジスタＲ４、Ｒ５から構成されるレジスタ群に対応して設けられ、例えば、命令によりレジスタＲ４、Ｒ５がアクセスされる場合、制御部５４により参照される。例えば、制御レジスタ４３は、イネーブルＥＮ、ビット長ＬＮ、オフセットＯＦ、レジスタ番号ＲＰＴ、ＷＰＴ、エンプティＥＭＰおよびフルＦＵＬを有している。イネーブルＥＮ、ビット長ＬＮ、オフセットＯＦは、図１で説明したイネーブルＥＮ、ビット長ＬＮ、オフセットＯＦと同じである。例えば、制御レジスタ４３を有効にする場合、イネーブルＥＮは、“１”に設定される。なお、オフセットＯＦには、レジスタＲ４にアクセスする場合、アクセス対象のデータのレジスタＲ４内でのオフセット値（データ位置）が設定され、レジスタＲ５にアクセスする場合、アクセス対象のデータのレジスタＲ５内でのオフセット値が設定される。
【００５０】
レジスタ番号ＲＰＴには、データが読み出されるレジスタＲを示すレジスタ番号が設定され、レジスタ番号ＷＰＴには、データが書き込まれるレジスタＲを示すレジスタ番号が設定される。エンプティＥＭＰは、レジスタＲ４、Ｒ５のいずれにも有効なデータが格納されていない状態（レジスタＲ４、Ｒ５の両方が空の状態）を示している。例えば、レジスタＲ４、Ｒ５のいずれにも有効なデータが格納されていない状態では、エンプティＥＭＰは、“１”に設定される。また、フルＦＵＬは、レジスタＲ４、Ｒ５の両方に有効なデータが格納されている状態を示している。例えば、レジスタＲ４、Ｒ５の両方に有効なデータが格納されている状態では、フルＦＵＬは、“１”に設定される。制御レジスタ４４、４５は、対応するレジスタ群（Ｒ６とＲ７、Ｒ８とＲ９）を除いて、制御レジスタ４３と同じである。
【００５１】
制御部５４は、レジスタ番号ＲＮ１および命令種別ＴＰをデコーダ（図示せず）から受け、制御情報ＲＩＮＦ１０、１１、２０、２１、３０、３１を制御レジスタ４３、４４、４５から読み出し、制御レジスタ４３、４４、４５のオフセットＯＦ等を更新する。ここで、例えば、各制御情報ＲＩＮＦ１１、２１、３１は、各制御レジスタ４３、４４、４５のレジスタ番号ＲＰＴ、ＷＰＴ、エンプティＥＭＰおよびフルＦＵＬを含む情報である。
【００５２】
また、例えば、制御部５４は、制御レジスタ４３、４４、４５から読み出した制御情報ＲＩＮＦ１０、２０、３０を実行ユニット２１に出力し、レジスタ番号ＲＮ１の代わりにレジスタ番号ＲＮ２を実行ユニット２１に出力する。なお、この実施形態では、レジスタ番号ＲＮ２のレジスタＲＳ２、ＲＴ２は、ソースのレジスタＲを示し、レジスタ番号ＲＮ２のレジスタＲＤ２は、ディスティネーションのレジスタＲを示している。また、図７では、制御レジスタ４３、４４、４５の初期値等を設定するための制御信号（例えば、後述する図８に示す初期値ＩＮＴ２）の記載を省略している。
【００５３】
図８は、図７に示した制御部５４の一例を示している。制御部５４（図中の破線で囲んだ部分）は、セレクタ５２（５２Ａ、５２Ｂ、５２Ｃ、５２Ｄ、５２Ｅ）、更新部５５および変換部５６を有している。なお、図８は、制御レジスタ４３用のセレクタ５２および更新部を示し、制御レジスタ４４、４５用のセレクタ５２および更新部５５の記載を省略している。例えば、制御レジスタ４４、４５用のセレクタ５２および更新部５５は、制御する制御レジスタ４４、４５を除いて、図８と同じである。また、図８では、制御レジスタ４４、４５の記載を省略している。
【００５４】
制御部５４は、例えば、初期値ＩＮＴ２を受け、制御レジスタ４３の各値（イネーブルＥＮ等）を初期値ＩＮＴ２に設定する。この場合、セレクタ５２は、初期値ＩＮＴ２の値を制御レジスタ４３に設定する値として選択する。ここで、例えば、制御レジスタ４３、４４、４５は、アドレスマップ上に割り当てられている。これにより、ロード命令やストア命令で、制御レジスタ４３、４４、４５の値（初期値等）を設定できる。また、図の例では、制御レジスタ４３、４４、４５は、フリップフロップにより構成されている。
【００５５】
更新部５５は、例えば、レジスタ番号ＲＮ１および命令種別ＴＰを受け、制御情報ＲＩＮＦ１０、１１を制御レジスタ４３から読み出し、オフセットＯＦ、レジスタ番号ＲＰＴ、ＷＰＴ、エンプティＥＭＰおよびフルＦＵＬを更新する。なお、更新部５５の動作の詳細は、後述する図９、図１１で説明する。セレクタ５２は、制御レジスタ４３の値を更新する場合、更新部５５から受ける値を制御レジスタ４３に設定する値として選択する。
【００５６】
変換部５６は、例えば、レジスタ番号ＲＮ１および命令種別ＴＰを受け、レジスタ番号ＲＮ１が示すレジスタＲに対応する制御レジスタ４３、４４、４５からレジスタ番号ＲＰＴ、ＷＰＴ、イネーブルＥＮを読み出し、レジスタ番号ＲＮ２を設定する。なお、レジスタ番号ＲＮ１により指定されるレジスタＲが制御レジスタ４３、４４、４５に対応していないレジスタＲの場合、変換部５６は、レジスタ番号ＲＰＴ、ＷＰＴ、イネーブルＥＮを、制御レジスタ４３、４４、４５から読み出さなくてもよい。そして、変換部５６は、レジスタ番号ＲＮ１の代わりにレジスタ番号ＲＮ２を上述した図７に示した実行ユニット２１に出力する。なお、変換部５６の動作の詳細は、後述する図１１で説明する。
【００５７】
図９、図１０は、図８示した更新部５５の動作の一例を示している。なお、図９、図１０は、制御レジスタ４３のオフセットＯＦ、レジスタ番号ＲＰＴ、ＷＰＴ、エンプティＥＭＰおよびフルＦＵＬを更新するための更新部５５の動作を示している。すなわち、図９、１０では、制御レジスタ４３用の更新部５５の動作を説明する。制御レジスタ４４用の更新部５５の動作は、レジスタＲ４、Ｒ５をレジスタＲ６、Ｒ７に読み替えることで説明され、制御レジスタ４５用の更新部５５の動作は、レジスタＲ４、Ｒ５をレジスタＲ８、Ｒ９に読み替えることで説明される。また、上述した図８に示したセレクタ５２は、更新部５５から受ける値を制御レジスタ４３に設定するする値として選択している。なお、図１０の符号％は、剰余演算子を示している。
【００５８】
先ず、図９に示すように、処理７０では、更新部５５は、レジスタ番号ＲＮ１に基づいて、レジスタＲ４、Ｒ５のいずれかへのアクセスが発生するか否かを判定する。レジスタＲ４、Ｒ５のいずれかがアクセスされる場合（処理７０のＹｅｓ）、更新部５５の動作は、処理７２に移り、レジスタＲ４、Ｒ５のいずれもアクセスされない場合（処理７０のＮｏ）、更新部５５は、制御レジスタ４３を更新せずに処理を終了する。
【００５９】
処理７２では、更新部５５は、イネーブルＥＮが“１”に設定されているか否かを判定する。すなわち、制御レジスタ４３が有効か否かを判定する。イネーブルＥＮが“１”の場合（処理７２のＹｅｓ）、更新部５５の動作は、処理７４に移り、イネーブルＥＮが“１”でない場合（処理７２のＮｏ）、更新部５５は、制御レジスタ４３を更新せずに処理を終了する。例えば、レジスタＲ４、Ｒ５を上述した図７に示したレジスタＲ０−Ｒ３と同じように扱う場合、更新部５５は、制御レジスタ４３を更新せずに処理を終了する。すなわち、レジスタＲ４およびレジスタＲ５を、レジスタＲ４、Ｒ５から構成されるレジスタ群として使用しない場合、更新部５５は、制御レジスタ４３を更新せずに処理を終了する。
【００６０】
処理７４では、更新部５５は、命令種別ＴＰに基づいて、命令がロード命令か否かを判定する。ロード命令の場合（処理７４のＹｅｓ）、更新部５５の動作は、処理７６に移り、ロード命令でない場合（処理７４のＮｏ）、更新部５５の動作は、処理８４に移る。
【００６１】
処理７６では、更新部５５は、レジスタ番号ＷＰＴを更新する。例えば、更新前のレジスタ番号ＷＰＴがレジスタＲ４を示すとき、更新部５５は、レジスタＲ５を示すレジスタ番号に、レジスタ番号ＷＰＴを更新する。また、例えば、更新前のレジスタ番号ＷＰＴがレジスタＲ５を示すとき、更新部５５は、レジスタＲ４を示すレジスタ番号に、レジスタ番号ＷＰＴを更新する。例えば、更新後のレジスタ番号ＷＰＴは、定数番号を４（レジスタＲ４を示す値）とした場合、更新前のレジスタ番号ＷＰＴから定数番号を引いた値に１を加算した結果を被除数とし、被除数を２で割ったときの剰余を定数番号に加算することにより算出される。なお、定数番号を５（レジスタＲ５を示す値）とした場合、更新後のレジスタ番号ＷＰＴは、定数番号から更新前のレジスタ番号ＷＰＴを引いた値に１を加算した結果を被除数とし、被除数を２で割ったときの剰余を定数番号から減算することにより算出される。
【００６２】
処理７８では、更新部５５は、処理７６で更新されたレジスタ番号ＷＰＴがレジスタ番号ＲＰＴと同じか否かを判定する。レジスタ番号ＷＰＴ、ＲＰＴが互いに同じ場合（処理７８のＹｅｓ）、更新部５５は、処理８０において、フルＦＵＬを“１”（レジスタＲ４、Ｒ５の両方に有効なデータが格納されている状態を示す情報）に設定する。一方、レジスタ番号ＷＰＴ、ＲＰＴが互いに異なる場合（処理７８のＮｏ）、更新部５５の動作は、処理８２に移る。処理８２では、更新部５５は、エンプティＥＭＰを“０”（レジスタＲ４、Ｒ５の少なくとも一方に有効なデータが格納されている状態を示す情報）に設定する。
【００６３】
処理８４（処理７４において、ロード命令でないと判定された場合）では、更新部５５は、命令種別ＴＰに基づいて、命令がストア命令か否かを判定する。ストア命令の場合（処理８４のＹｅｓ）、更新部５５の動作は、処理８６に移り、ストア命令でない場合（処理８４のＮｏ）、更新部５５の動作は、図１０に示す処理Ａに移る。
【００６４】
処理８６では、更新部５５は、レジスタ番号ＲＰＴを更新する。例えば、更新前のレジスタ番号ＲＰＴがレジスタＲ４を示すとき、更新部５５は、レジスタＲ５を示すレジスタ番号に、レジスタ番号ＲＰＴを更新する。また、例えば、更新前のレジスタ番号ＲＰＴがレジスタＲ５を示すとき、更新部５５は、レジスタＲ４を示すレジスタ番号に、レジスタ番号ＲＰＴを更新する。例えば、更新後のレジスタ番号ＲＰＴは、処理７６のレジスタ番号ＷＰＴの更新と同様の演算により算出される。
【００６５】
処理８８では、更新部５５は、レジスタ番号ＷＰＴが処理８６で更新されたレジスタ番号ＲＰＴと同じか否かを判定する。レジスタ番号ＷＰＴ、ＲＰＴが互いに同じ場合（処理８８のＹｅｓ）、更新部５５は、処理９０において、エンプティＥＭＰを“１”（レジスタＲ４、Ｒ５のいずれにも有効なデータが格納されていない状態を示す情報）に設定する。一方、レジスタ番号ＷＰＴ、ＲＰＴが互いに異なる場合（処理８８のＮｏ）、更新部５５の動作は、処理９２に移る。処理９２では、更新部５５は、フルＦＵＬを“０”（レジスタＲ４、Ｒ５の少なくとも一方は空の状態を示す情報）に設定する。
【００６６】
図１０に示すように、処理９４（図９の処理８４において、ストア命令でないと判定された場合）では、更新部５５は、レジスタ番号ＲＮ１に基づいて、レジスタＲ４、Ｒ５から構成されるレジスタ群へのアクセスがディスティネーションか否かを判定する。例えば、レジスタ番号ＲＮ１のレジスタＲＤ１がレジスタＲ４の場合、レジスタＲ４、Ｒ５から構成されるレジスタ群へのアクセスは、ディスティネーションである。レジスタ群へのアクセスがディスティネーションの場合（処理９４のＹｅｓ）、更新部５５の動作は、処理９６に移り、レジスタ群へのアクセスがソースの場合（処理９４のＮｏ）、更新部５５の動作は、処理１０８に移る。
【００６７】
処理９６では、更新部５５は、オフセットＯＦとビット長ＬＮとの加算結果がレジスタＲのビット幅（この実施形態では、３２）以上か否かを判定する。加算結果が３２以上の場合（処理９６のＹｅｓ）、更新部５５の動作は、処理９８に移る。処理９８、１００、１０２、１０４は、処理７６、７８、８０、８２と同じである。処理９６、９８により、上述した図７に示した出力データ生成部２９は、レジスタＲ４、Ｒ５にまたいでデータを格納できる。一方、加算結果が３１以下の場合（処理９６のＮｏ）、更新部５５の動作は、処理１０４に移る。
【００６８】
処理１０６では、更新部５５は、オフセットＯＦを更新する。例えば、更新後のオフセットＯＦは、更新前のオフセットＯＦにビット長ＬＮを加算した結果を被除数とし、被除数をレジスタＲのビット幅（この実施形態では、３２）で割ったときの剰余により算出される。
【００６９】
処理１０８（処理９４において、レジスタ群へのアクセスがソースと判定された場合）では、更新部５５は、オフセットＯＦを更新する。例えば、更新後のオフセットＯＦは、処理１０６のオフセットＯＦの更新と同様の演算により算出される。
【００７０】
処理１０９では、更新部５５は、処理１０８で更新されたオフセットＯＦが０か否かを判定する。オフセットＯＦが０の場合（処理１０９のＹｅｓ）、更新部５５の動作は、処理１１２に移り、オフセットＯＦが０でない場合（処理１０９のＮｏ）、更新部５５の動作は、処理１１０に移る。
【００７１】
処理１１０では、更新部５５は、オフセットＯＦとビット長ＬＮとの加算結果がレジスタＲのビット幅（この実施形態では、３２）より大きいか否かを判定する。加算結果が３２より大きい場合（処理１１０のＹｅｓ）、更新部５５は、処理１１２において、レジスタ番号ＲＰＴを更新し、加算結果が３２以下の場合（処理１１０のＮｏ）、更新部５５は、レジスタ番号ＲＰＴを更新しない。処理１１２、１１４、１１６、１１８は、処理８６、８８、９０、９２と同じである。処理１０８、１０９、１１０、１１２により、図７に示した入力データ抽出部２３は、レジスタＲ４、Ｒ５をまたいで格納されたデータを読み出せる。
【００７２】
図１１は、図８示した変換部５６の動作の一例を示している。なお、図１１は、レジスタ番号ＲＮ２の１つ（レジスタＲＤ２、ＲＳ２、ＲＴ２の１つ）を設定する際の変換部５６の動作を示している。レジスタ番号ＲＮ１により指定されるレジスタＲが複数の場合（すなわち、レジスタ番号ＲＮ２に設定されるレジスタＲが複数の場合）、アクセスが発生する各レジスタＲに対して、図１１の処理が実施される。
【００７３】
先ず、処理１２０では、変換部５６は、レジスタ番号ＲＮ１に基づいて、レジスタＲ４−Ｒ９のいずれかへのアクセスが発生するか否かを判定する。レジスタＲ４−Ｒ９のいずれかがアクセスされる場合（処理１２０のＹｅｓ）、変換部５６の動作は、処理１２２に移り、レジスタＲ４−Ｒ９がアクセスされない場合（処理１２０のＮｏ）、変換部５６は、処理１３８において、レジスタ番号ＲＮ２のレジスタ（ＲＤ２、ＲＳ２、ＲＴ２）をレジスタ番号ＲＮ１のレジスタ（ＲＤ１、ＲＳ１、ＲＴ１）に設定する。
【００７４】
例えば、レジスタ番号ＲＮ１のレジスタＲＤ１、ＲＳ１、ＲＴ１がレジスタＲ３、Ｒ４、Ｒ６の場合、変換部５６は、処理１３８において、レジスタ番号ＲＮ２のレジスタＲＤ２をレジスタＲ３に設定し、レジスタ番号ＲＮ２のレジスタＲＳ２、ＲＴ２を設定するために処理１２２を実施する。
【００７５】
処理１２２では、変換部５６は、レジスタ番号ＲＮ１により指定されるレジスタＲに対応する制御レジスタ４３、４４、４５のイネーブルＥＮが“１”に設定されているか否かを判定する。すなわち、レジスタ番号ＲＮ１により指定されるレジスタＲに対応する制御レジスタ４３、４４、４５が有効か否かを判定する。処理１２２により、レジスタ番号ＲＮ１により指定されるレジスタＲを、２つのレジスタＲから構成されるレジスタ群として使用するか、上述した図７に示したレジスタＲ０−Ｒ３と同じように単独のレジスタＲとして使用するかが判定される。
【００７６】
イネーブルＥＮが“１”の場合（処理１２２のＹｅｓ）、変換部５６の動作は、処理１２４に移り、イネーブルＥＮが“１”でない場合（処理１２２のＮｏ）、変換部５６は、処理１３８において、レジスタ番号ＲＮ２のレジスタ（ＲＤ２、ＲＳ２、ＲＴ２）をレジスタ番号ＲＮ１のレジスタ（ＲＤ１、ＲＳ１、ＲＴ１）に設定する。例えば、レジスタ番号ＲＮ１のレジスタＲＤ１、ＲＳ１、ＲＴ１がレジスタＲ８、Ｒ４、Ｒ６であり、かつ、制御レジスタ４３、４４、４５のイネーブルＥＮが“１”、“１”、“０”にそれぞれ設定されている場合、変換部５６は、レジスタ番号ＲＮ２のレジスタＲＳ２、ＲＴ２を設定するために処理１２４を実施する。さらに、変換部５６は、処理１３８において、レジスタ番号ＲＮ２のレジスタＲＤ２を、レジスタ番号ＲＮ１のレジスタＲＤ１（レジスタＲ８）に設定する。
【００７７】
処理１２４では、変換部５６は、命令種別ＴＰに基づいて、命令がロード命令か否かを判定する。ロード命令の場合（処理１２４のＹｅｓ）、変換部５６は、処理１２６において、レジスタ番号ＲＮ２のレジスタＲＴ２をレジスタ番号ＷＰＴが示すレジスタＲに設定する。一方、ロード命令でない場合（処理１２４のＮｏ）、変換部５６の動作は、処理１２８に移る。
【００７８】
処理１２８では、変換部５６は、命令種別ＴＰに基づいて、命令がストア命令か否かを判定する。ストア命令の場合（処理１２８のＹｅｓ）、変換部５６は、処理１３０において、レジスタ番号ＲＮ２のレジスタＲＴ２をレジスタ番号ＲＰＴが示すレジスタＲに設定する。一方、ストア命令でない場合（処理１２８のＮｏ）、変換部５６の動作は、処理１３２に移る。
【００７９】
処理１３２では、変換部５６は、レジスタ番号ＲＮ１に基づいて、レジスタ番号ＲＮ１により指定されるレジスタＲを含むレジスタ群へのアクセスがディスティネーションか否かを判定する。レジスタ群へのアクセスがディスティネーションの場合（処理１３２のＹｅｓ）、変換部５６は、処理１３４において、レジスタ番号ＲＮ２のレジスタＲＤ２をレジスタ番号ＷＰＴが示すレジスタＲに設定する。一方、レジスタ群へのアクセスがソースの場合（処理１３２のＮｏ）、変換部５６は、処理１３６において、レジスタ番号ＲＮ２のレジスタ（例えば、レジスタＲＳ２、ＲＴ２）をレジスタ番号ＲＰＴが示すレジスタＲに設定する。
【００８０】
例えば、処理１３６では、レジスタ番号ＲＮ１のレジスタＲＳ１がレジスタＲ４、Ｒ５のいずれかの場合、変換部５６は、レジスタ番号ＲＮ２のレジスタＲＳ２を制御レジスタ４３のレジスタ番号ＲＰＴが示すレジスタＲ（Ｒ４あるいはＲ５）に設定する。また、例えば、レジスタ番号ＲＮ１のレジスタＲＴ１がレジスタＲ４、Ｒ５のいずれかの場合、変換部５６は、処理１３６において、レジスタ番号ＲＮ２のレジスタＲＴ２を制御レジスタ４３のレジスタ番号ＲＰＴが示すレジスタＲ（Ｒ４あるいはＲ５）に設定する。
【００８１】
図１２は、図７に示した入力データ抽出部２３の概要を示している。図中の網掛け部分は、上述した図５に示した入力データ抽出部２２と相違する部分を示している。また、図１２の符号％は、剰余演算子を示している。入力データ抽出部２３は、ＦＦ２２４、左論理シフト部２２６、右算術シフト部２２１、セレクタ２２２を有している。
【００８２】
ＦＦ２２４は、例えば、ライトイネーブルＷＥが“１”のときに、レジスタＲから読み出されたデータＲＤＡＴＡを格納する。例えば、ライトイネーブルＷＥは、読み出したレジスタＲに対応する制御レジスタ（制御レジスタ４３等）のビット長ＬＮおよびオフセットＯＦに基づいて生成され、入力データ抽出部２３により生成されてもよいし、上述した図７に示した制御部５４により生成されてもよい。この実施形態では、ライトイネーブルＷＥは、ビット長ＬＮを２倍した値とオフセットＯＦとの加算結果がレジスタＲのビット幅（この実施形態では、３２）より大きい場合、“１”であり、加算結果が３２以下の場合、“０”である。
【００８３】
すなわち、ＦＦ２２４には、２つのレジスタＲをまたいで格納されているデータを使用する命令が実行される前に、２つのレジスタＲをまたいで格納されているデータの一部を含むデータＲＤＡＴＡが格納される。なお、ＦＦ２２４は、ライトイネーブルＷＥを使用せずに、レジスタＲからデータＲＤＡＴＡが読み出される度に、データＲＤＡＴＡを格納してもよい。
【００８４】
左論理シフト部２２６は、レジスタＲのビット幅の２倍のビット幅（この実施形態では、６４）のデータを受け、受けたデータをシフト量ＬＳＬ分だけ左論理シフトする。なお、左論理シフト部２２６が受ける６４ビット幅のデータは、上位３２ビット側がレジスタＲから読み出されたデータＲＤＡＴＡであり、下位３２ビット側がＦＦ２２４から読み出されたデータである。また、シフト量ＬＳＬは、読み出したレジスタＲに対応する制御レジスタ（例えば、制御レジスタ４３）のビット長ＬＮおよびオフセットＯＦの加算値を６４（レジスタＲのビット幅の２倍）から引いた値を被除数とし、被除数を３２（レジスタＲのビット幅）で割ったときの剰余である。これにより、例えば、演算対象のデータは、６４ビット幅のデータの一番左側にシフトされる。
【００８５】
右算術シフト部２２１は、左論理シフト部２２６の出力データ（６４ビット幅のデータ）の上位３２ビットのデータを受け、受けたデータを（３２ビット幅のデータ）をシフト量ＡＳＲ分だけ右算術シフトする。なお、シフト量ＡＳＲは、読み出したレジスタＲに対応する制御レジスタ（例えば、制御レジスタ４３）のビット長ＬＮを３２（レジスタＲのビット幅）から引いた値である。右算術シフト部２２１により、例えば、演算対象のデータは、３２ビット幅のデータの一番右側にシフトされる。
【００８６】
セレクタ２２２は、選択信号ＳＥＬに基づいて、データＳ１、Ｓ２の一方をデータＩＤＡＴＡとして上述した図７に示した命令実行部２４に出力する。例えば、セレクタ２２２は、レジスタＲ４−Ｒ９のいずれかからデータＲＤＡＴＡが読み出される場合、データＲＤＡＴＡが読み出されるレジスタＲに対応する制御レジスタ４３、４４、４５のイネーブルＥＮが“１”のときに、データＳ２をデータＩＤＡＴＡとして命令実行部２４に出力する。その他の条件では、セレクタ２２２は、データＳ１（レジスタＲから読み出したデータＲＤＡＴＡ）をデータＩＤＡＴＡとして命令実行部２４に出力する。
【００８７】
例えば、セレクタ２２２は、レジスタＲ４−Ｒ８以外のレジスタＲからデータＲＤＡＴＡが読み出される場合、レジスタＲから読み出したデータＲＤＡＴＡ（データＳ１）をデータＩＤＡＴＡとして命令実行部２４に出力する。すなわち、この実施形態では、選択信号ＳＥＬは、例えば、データＲＤＡＴＡが読み出されるレジスタＲを示すレジスタ番号ＲＮ２と、制御レジスタ４３、４４、４５のイネーブルＥＮとにより生成される。
【００８８】
図１３は、図７に示した出力データ生成部２９の概要を示している。図中の網掛け部分は、上述した図６に示した出力データ生成部２８と相違する部分を示している。図６で説明した左論理シフト部２８０、ＦＦ２８２、オア回路２８３およびセレクタ２８４については、詳細な説明を省略する。出力データ生成部２９は、左論理シフト部２８０、右論理シフト部２８５、セレクタ２８６、ＦＦ２８２、オア回路２８３およびセレクタ２８４を有している。
【００８９】
右論理シフト部２８５は、レジスタＲのビット幅の２倍のビット幅（この実施形態では、６４）のデータを受け、受けたデータをシフト量ＬＳＲ分だけ右論理シフトする。なお、右論理シフト部２８５が受ける６４ビット幅のデータは、上位３２ビット側が左論理シフト部２８０の出力データ（３２ビット幅のデータ）であり、下位３２ビットは、“０”で埋められている。また、シフト量ＬＳＲは、演算結果を格納するレジスタＲに対応する制御レジスタ（例えば、制御レジスタ４３）のビット長ＬＮおよびオフセットＯＦの加算値を６４（レジスタＲのビット幅の２倍）から引いた値である。これにより、例えば、演算結果のデータは、演算結果のデータの最下位ビットと３２ビット幅のデータにおけるオフセットＯＦの位置とが一致する位置にシフトされる。
【００９０】
セレクタ２８６は、選択信号ＳＥＬ２に基づいて、データＳ３、Ｓ４の一方をＦＦ２８２に出力する。例えば、セレクタ２８６は、演算結果を格納するレジスタＲに対応する制御レジスタ（制御レジスタ４３等）のビット長ＬＮとオフセットＯＦとの加算結果が３２（レジスタＲのビット幅）以上の場合、データＳ３をＦＦ２８２に出力する。その他の条件（加算結果が３２より小さい場合）では、セレクタ２８６は、データＳ４をＦＦ２８２に出力する。ここで、データＳ３は、右論理シフト部２８５の出力データ（６４ビット幅のデータ）の上位３２ビットのデータであり、データＳ４は、オア回路２８３の出力データ（３２ビット幅のデータ）である。これにより、レジスタＲの組（例えば、Ｒ４とＲ５、Ｒ６とＲ７、Ｒ８とＲ９）の両方のレジスタにまたいで演算結果のデータを格納する場合、演算結果の一部をレジスタＲの組の一方に格納した際に、演算結果の残りをＦＦ２８２に格納できる。
【００９１】
オア回路２８３は、右論理シフト部２８５の出力データ（６４ビット幅のデータ）の下位３２ビットのデータＩＮ２とＦＦ２８２から読み出されるデータＩＮ１とのオアの結果をセレクタ２８４およびセレクタ２８６に出力する。
【００９２】
セレクタ２８４は、選択信号ＳＥＬに基づいて、データＳ１、Ｓ２の一方をデータＯＤＡＴＡとして、レジスタ番号ＲＮ２が示すレジスタＲに出力する。この実施形態では、選択信号ＳＥＬは、例えば、データＯＤＡＴＡが格納されるレジスタＲを示すレジスタ番号ＲＮ２と、制御レジスタ４３、４４、４５のイネーブルＥＮとにより生成される。なお、セレクタ２８４の選択動作は、上述した図１２に示したセレクタ２２２の選択動作において、データＲＤＡＴＡが読み出されるレジスタＲをデータＯＤＡＴＡが格納されるレジスタＲに読み替えることで説明される。
【００９３】
図１４は、ロード命令とレジスタの状態との関係の一例を示している。なお、図１４は、メモリＭＥＭからレジスタＲ４、Ｒ５に９ビット長のデータＤＳを連続してロードした際のレジスタＲ４、Ｒ５の状態の一例を示している。また、図１４（ａ）は、アドレスａｄｒ１のデータをレジスタＲ４に連続してロードするプログラムの一例を示し、図１４（ｂ）は、図１４（ａ）のプログラムが実行された際のレジスタＲ４、Ｒ６の状態を示している。なお、図のメモリＭＥＭ、レジスタＲ４、Ｒ５は、右側が下位ビットである。また、この実施形態では、アドレスａｄｒ１は自動でインクリメント（例えば、＋４）される。
【００９４】
１回目のロード命令（図１４（ａ１））では、プロセッサ１１は、メモリＭＥＭのアドレス“０ｘ００００”に格納されているデータＤＳ（データＤＳ０、ＤＳ１、ＤＳ２、データＤＳ３の下位５ビット）をレジスタＲ４にロードする（図１４（ｂ２））。２回目のロード命令（図１４（ａ２））では、上述した図９−１１に示した処理によりロード先のレジスタがレジスタＲ４からレジスタＲ５に変換され、プロセッサ１１は、アドレス“０ｘ０００４”に格納されているデータＤＳをレジスタＲ５にロードする（図１４（ｂ３））。
【００９５】
３回目のロード命令（図１４（ａ３））では、図９−１１に示した処理によりロード先のレジスタがレジスタＲ４に設定され、プロセッサ１１は、アドレス“０ｘ０００８”に格納されているデータＤＳをレジスタＲ４にロードする（図１４（ｂ４））。４回目のロード命令（図１４（ａ４））では、上述した図９−１１に示した処理によりロード先のレジスタがレジスタＲ４からレジスタＲ５に変換され、プロセッサ１１は、アドレス“０ｘ０００Ｃ”に格納されているデータＤＳをレジスタＲ５にロードする（図１４（ｂ５））。このように、レジスタＲ４、Ｒ５から構成されるレジスタ群にメモリＭＥＭからデータを連続してロードした場合、ロードされたデータは、レジスタＲ４、Ｒ５に交互に格納される。
【００９６】
図１５は、レジスタＲ４−Ｒ９に格納されるデータの一例を示す図である。なお、図１５（ａ）は、連続する９ビット長の複数のデータＤＳと連続する９ビット長の複数のデータＤＴとをそれぞれ加算するプログラムの一例を示している。また、図１５（ｂ）は、図１５（ａ）のプログラムのループが２回繰り返された際のレジスタＲ４−Ｒ９の状態の一例を示している。なお、図４（ｂ）の網掛け部分は、有効なデータが格納されていない領域を示している。図のレジスタＲ４−Ｒ９は、右側が下位ビットである。図１５（ａ）のアドレスａｄｒ１、ａｄｒ２、ａｄｒ３は、メモリ（例えば、上述した図１４に示したメモリＭＥＭ）のアドレスであり、自動でインクリメント（例えば、＋４）される。
【００９７】
命令ＢＲＥＱ＿ｆｕｌｌは、アドレスＡ（例えば、アドレスＡ４、Ａ５）に割り当てられた制御レジスタ（例えば、制御レジスタ４３、４４）のフルＦＵＬが“１”のときに、指定されたラベル（例えば、ラベルＬａｂｌｅ１）に分岐する命令である。また、命令ＢＲＥＱ＿ｅｍｐは、アドレスＡ（例えば、アドレスＡ８）に割り当てられた制御レジスタ（例えば、制御レジスタ４５）のエンプティＥＭＰが“１”のときに、指定されたラベル（例えば、ラベルＬａｂｌｅ３）に分岐する命令である。
【００９８】
すなわち、図１５（ａ）のプログラムでは、プロセッサ１１は、レジスタＲ４、Ｒ５の少なくとも一方に有効なデータが格納されていない場合、有効なデータが格納されていないレジスタＲ（Ｒ４、Ｒ５の一方）に、アドレスａｄｒ１に格納されているデータＤＳをロードする（図１５（ａ２）、（ａ３））。次に、プロセッサ１１は、レジスタＲ６、Ｒ７の少なくとも一方に有効なデータが格納されていない場合、有効なデータが格納されていないレジスタＲ（Ｒ６、Ｒ７の一方）に、アドレスａｄｒ２に格納されているデータＤＴをロードする（図１５（ａ５）、（ａ６））。
【００９９】
そして、プロセッサ１１は、レジスタＲ４、Ｒ５に格納されている複数のデータＤＳの１つと、レジスタＲ６、Ｒ７に格納されている複数のデータＤＴの１つとを加算し、加算結果のデータＤＤを、レジスタＲ８、Ｒ９のいずれかに格納する（図１５（ａ８））。さらに、プロセッサ１１は、図１５（ａ８）と同様の加算処理を２回実施する（図１５（ａ９）、（ａ１０））。そして、プロセッサ１１は、レジスタＲ８、Ｒ９の少なくとも一方に有効なデータが格納されている場合、レジスタＲ８、Ｒ９のいずれかに格納されているデータＤＤを、アドレスａｄｒ３にストアする（図１５（ａ１１）、（ａ１２））。なお、プロセッサ１１の動作は、レジスタＲ８、Ｒ９のいずれにも有効なデータが格納されていない場合、ループ処理の先頭に戻る（図１５（ａ１１）、（ａ１３）、（ａ１４））。
【０１００】
図１５（ａ）のプログラムのループが２回繰り返された場合、９ビット長の複数のデータＤＳ（例えば、データＤＳ０−ＤＳ６）が、レジスタＲ４、Ｒ５に格納され、９ビット長の複数のデータＤＴ（例えば、データＤＴ０−ＤＴ６）がレジスタＲ６、Ｒ７に格納される（図１５（ｂ１）。そして、複数のデータＤＳ（例えば、データＤＳ０−ＤＳ６）と、複数のデータＤＴ（例えば、データＤＴ０−ＤＴ６）とをそれぞれ加算した結果である１０ビット長の複数のデータＤＤ（例えば、データＤＤ０−ＤＤ６）が、レジスタＲ８、Ｒ９に格納される（図１５（ｂ２））。
【０１０１】
このように、この実施形態では、２つのレジスタＲをまたいで格納されたデータを扱え、２つのレジスタＲをまたいでデータを格納できる。これにより、この実施形態では、レジスタＲおよびメモリ（例えば、図１４に示したメモリＭＥＭ）をさらに有効に使用できる。また、この実施形態では、上述した図７に示したＡＬＵ２５がシフト演算等を実行する必要がないため、連続するデータの演算を高速に処理できる。
【０１０２】
図１６、図１７は、図１２に示した入力データ抽出部２３の動作の一例を示している。なお、図１６、図１７は、図１５に示したプログラムが実施されたときの入力データ抽出部２３の一方の動作の一例を示している。入力データ抽出部２３の他方の動作は、データＤＳ、レジスタＲＳ２、レジスタＲ４、Ｒ５および制御レジスタ４３を、データＤＴ、レジスタＲＴ２、レジスタＲ６、Ｒ７および制御レジスタ４４にそれぞれ読み替えることで説明される。
【０１０３】
図中の網掛け部分は、有効なデータでない部分を示し、符号ＳＥは、符号拡張を示している。なお、図の例では、右側が下位ビットである。また、図中の破線で囲んだ部分は、命令が実行される際の制御レジスタ４３の値（ＯＦ、ＲＰＴ、ＷＰＴ、ＥＭＰおよびＦＵＬの値）、レジスタ番号ＲＮ２のレジスタＲＳ２が示すレジスタＲ、ライトイネーブルＷＥの値、シフト量ＬＳＬ、ＡＳＲの値を示している。図中の括弧内のレジスタ番号ＲＰＴ、ＷＰＴ等は、命令が実行される際に更新された制御レジスタ４３の値等を示している。
【０１０４】
なお、制御レジスタ４３のイネーブルＥＮ、ビット長ＬＮ、オフセットＯＦ、レジスタ番号ＲＰＴ、ＷＰＴ、エンプティＥＭＰ、フルＦＵＬの初期値は、図１５に示したプログラムが実施される前に、それぞれ“１”、“９”、“０”、“レジスタＲ４を示す値（以下、単にＲ４とも称する）”、“Ｒ４”、“０”、“１”に設定されている。そして、レジスタ番号ＷＰＴ、エンプティＥＭＰは、アドレスａｄｒ１のデータをレジスタＲ４にロードした際（図１５（ａ３））に、上述した図９に示した動作により、“Ｒ４”、“１”から“レジスタＲ５を示す値（以下、単にＲ５とも称する）”、“０”にそれぞれ更新されている。
【０１０５】
図１６に示すように、先ず、１回目の加算命令（図１５（ａ８））では、入力データ抽出部２３は、レジスタＲ４（レジスタ番号ＲＰＴが示すレジスタＲ）に格納されているＲＤＡＴＡを読み出し、データＤＳ０を抽出する（図１６（ａ））。例えば、左論理シフト部２２６は、６４ビット幅のデータ（上位３２ビット側がデータＲＤＡＴＡ、下位３２ビット側がＦＦ２２４のデータ）を受け（図１６（ａ１））、受けたデータをシフト量ＬＳＬ（２３ビット）分だけ左論理シフトする。そして、右算術シフト部２２１は、左論理シフト部２２６の出力データの上位３２ビットのデータを受け（図１６（ａ２））、受けたデータをシフト量ＡＳＲ（２３ビット）分だけ右算術シフトする。なお、オフセットＯＦは、上述した図９、図１０に示した動作により、“０”から“９”に更新される。
【０１０６】
２回目の加算命令（図１５（ａ９））では、入力データ抽出部２３は、レジスタＲ４に格納されているＲＤＡＴＡを読み出し、オフセットＯＦ（ＯＦ＝９）に基づいて、データＤＳ１を抽出する（図１６（ｂ））。入力データ抽出部２３の動作は、左論理シフト部２２６のシフト量ＬＳＬ（１４ビット）を除いて、１回目の加算命令のとき（図１６（ａ））と同じである。なお、オフセットＯＦは、図９、図１０に示した動作により、“９”から“１８”に更新される。
【０１０７】
３回目の加算命令（図１５（ａ１０））では、入力データ抽出部２３は、レジスタＲ４に格納されているＲＤＡＴＡを読み出し、オフセットＯＦ（ＯＦ＝１８）に基づいて、データＤＳ２を抽出する（図１６（ｂ））。入力データ抽出部２３の動作は、ＦＦ２２４へデータＲＤＡＴＡを書き込むことと左論理シフト部２２６のシフト量ＬＳＬ（５ビット）とを除いて、１回目の加算命令のとき（図１６（ａ））と同じである。例えば、ビット長ＬＮを２倍した値とオフセットＯＦとの加算結果が３２より大きい（ＷＥ＝１）ため、データＤＳ３ａを含むデータＲＤＡＴＡは、ＦＦ２２４に格納される。なお、データＤＳ３ａは、データＤＳ３の下位５ビットのデータである。
【０１０８】
また、オフセットＯＦ、レジスタ番号ＲＰＴ、エンプティＥＭＰは、図９、図１０に示した動作により、“１８”、“Ｒ４”、“０”から“２７”、“Ｒ５”、“１”にそれぞれ更新される。エンプティＥＭＰが“１”に更新されたため、２回目のループでは、プロセッサ１１は、レジスタ番号ＷＰＴで示されるレジスタＲ５に、アドレスａｄｒ１に格納されているデータＤＳをロードする（図１５（ａ２）、（ａ３））。この際、レジスタ番号ＷＰＴ、エンプティＥＭＰは、上述した図９に示した動作により、“Ｒ５”、“１”から“Ｒ４”、“０”にそれぞれ更新される。
【０１０９】
図１７に示すように、２回目のループ中の１回目の加算命令（図１５（ａ８））では、入力データ抽出部２３は、レジスタＲ５（レジスタ番号ＲＰＴが示すレジスタＲ）に格納されているＲＤＡＴＡを読み出し、データＤＳ３を抽出する（図１７（ｄ））。例えば、左論理シフト部２２６は、６４ビット幅のデータ（上位３２ビット側がデータＲＤＡＴＡ、下位３２ビット側がＦＦ２２４のデータ）を受け（図１７（ｄ１））、受けたデータをシフト量ＬＳＬ（２８ビット）分だけ左論理シフトする。データＲＤＡＴＡの下位４ビットはデータＤＳ３ｂであり、ＦＦ２２４のデータの上位５ビットは、データＤＳ３ａである。なお、データＤＳ３ｂは、データＤＳ３の上位４ビットのデータである。
【０１１０】
すなわち、左論理シフト部２２６が受ける６４ビット幅のデータは、データＤＳ３を含んで構成される。そして、右算術シフト部２２１は、左論理シフト部２２６の出力データの上位３２ビットのデータを受け（図１７（ｄ２））、受けたデータをシフト量ＡＳＲ（２３ビット）分だけ右算術シフトする。このように、入力データ抽出部２３は、レジスタＲ４、Ｒ５をまたいで格納されたデータＤＳ３を抽出することができる。また、この場合、例えば、ビット長ＬＮを２倍した値とオフセットＯＦとの加算結果が３２より大きい（ＷＥ＝１）ため、レジスタＲ５から読み出したデータＲＤＡＴＡは、ＦＦ２２４に格納される。なお、オフセットＯＦは、上述した図９、図１０に示した動作により、“２７”から“４”に更新される。
【０１１１】
２回目のループ中の２回目の加算命令（図１５（ａ９））では、入力データ抽出部２３は、レジスタＲ５に格納されているＲＤＡＴＡを読み出し、オフセットＯＦ（ＯＦ＝４）に基づいて、データＤＳ４を抽出する（図１６（ｅ））。入力データ抽出部２３の動作は、ＦＦ２２４へデータＲＤＡＴＡを書き込まないことと左論理シフト部２２６のシフト量ＬＳＬ（１９ビット）とを除いて、２回目のループ中の１回目の加算命令のとき（図１７（ｄ））と同じである。なお、オフセットＯＦは、図９、図１０に示した動作により、“４”から“１３”に更新される。
【０１１２】
２回目のループ中の３回目の加算命令（図１５（ａ１０））では、入力データ抽出部２３は、レジスタＲ５に格納されているＲＤＡＴＡを読み出し、オフセットＯＦ（ＯＦ＝１３）に基づいて、データＤＳ５を抽出する（図１７（ｆ））。入力データ抽出部２３の動作は、左論理シフト部２２６のシフト量ＬＳＬ（１０ビット）を除いて、２回目のループ中の２回目の加算命令のとき（図１７（ｅ））と同じである。このように、この実施形態では、連続する任意のビット長のデータを順次読み出すことができる。
【０１１３】
図１８、図１９、図２０は、図１３に示した出力データ生成部２９の動作の一例を示している。なお、図１８−２０は、図１５に示したプログラムが実施されたときの出力データ生成部２９の動作の一例を示している。図の例では、右側が下位ビットであり、符号ＳＥは、符号拡張を示している。また、図中の破線で囲んだ部分は、命令が実行される際の制御レジスタ４５の値（ＯＦ、ＲＰＴ、ＷＰＴ、ＥＭＰおよびＦＵＬの値）、レジスタ番号ＲＮ２のレジスタＲＤ２が示すレジスタＲ、シフト量ＬＳＬ、ＬＳＲの値、上述した図１３に示したセレクタ２８６で選択されるデータＳ（Ｓ３、Ｓ４）を示している。図中の括弧内のレジスタ番号ＲＰＴ、ＷＰＴ等は、命令が実行される際に更新された制御レジスタ４５の値等を示している。
【０１１４】
制御レジスタ４５のイネーブルＥＮ、ビット長ＬＮ、オフセットＯＦ、レジスタ番号ＲＰＴ、ＷＰＴ、エンプティＥＭＰ、フルＦＵＬの初期値は、図１５に示したプログラムが実施される前に、それぞれ“１”、“１０”、“０”、“レジスタＲ８を示す値（以下、単にＲ８とも称する）”、“Ｒ８”、“０”、“１”に設定されている。また、ＦＦ２８２には、初期値として“０”が格納されている。
【０１１５】
図１８に示すように、１回目の加算命令（図１５（ａ８））では、出力データ生成部２９は、上述した図１に示した命令実行部２４からデータ（例えば、ＡＬＵ２５の演算結果）ＥＤＡＴＡを受け、データＥＤＡＴＡ内の有効データＤＤ０を、レジスタＲ８（レジスタ番号ＷＰＴが示すレジスタＲ）に格納する（図１８（ａ））。例えば、左論理シフト部２８０は、データＥＤＡＴＡを受け（図１８（ａ１））、データＤＤ０をシフト量ＬＳＬ（２２ビット）分だけ左論理シフトする。そして、右論理シフト部２８５は、６４ビット幅のデータ（上位３２ビット側が左論理シフト部２８０の出力、下位３２ビット側が“０”で埋められたデータ）を受け（図１８（ａ２））、受けたデータをシフト量ＬＳＲ（５４ビット）分だけ右論理シフトする（図１８（ａ３））。
【０１１６】
オア回路２８３は、右論理シフト部２８５の出力データ（６４ビット幅のデータ）の下位３２ビットのデータＩＮ２とＦＦ２８２から読み出されるデータＩＮ１とを受け（図１８（ａ４））、データＩＮ１、ＩＮ２のオアの結果をセレクタ２８４およびセレクタ２８６に出力する（図１８（ａ５））。
【０１１７】
セレクタ２８６は、右論理シフト部２８５の出力データの上位３２ビットのデータＳ３とオア回路２８３の出力データＳ４（Ｓ２）とを受け、オア回路２８３の出力データＳ４（Ｓ２）をＦＦ２８２に格納する（図１８（ａ６））。例えば、ビット長ＬＮとオフセットＯＦとの加算結果が３２より小さいため、データＳ４がＦＦ２８２に出力される。また、セレクタ２８４は、データＤＤ０を含むデータＳ２をデータＯＤＡＴＡとして、レジスタＲ８に出力する（図１８（ａ６））。なお、オフセットＯＦは、上述した図９、図１０に示した動作により、“０”から“１０”に更新される。
【０１１８】
２回目の加算命令（図１５（ａ９））では、出力データ生成部２９は、命令実行部２４からデータＥＤＡＴＡを受け、データＥＤＡＴＡ内のデータＤＤ１をオフセットＯＦ（ＯＦ＝１０）に基づいてレジスタＲ８に格納する（図１８（ｂ））。出力データ生成部２９の動作は、右論理シフト部２８５のシフト量ＬＳＲ（４４ビット）を除いて、１回目の加算命令のとき（図１８（ａ））と同じである。
【０１１９】
ここで、ＦＦ２８２から読み出されるデータＩＮ１は、１回目の加算命令の際のオア回路２８３の出力データであるため、データＤＤ０を含むデータである（図１８（ｂ４））。また、右論理シフト部２８５の出力データの下位３２ビットのデータＩＮ２は、データＤＤ１を含むデータである（図１８（ｂ４））。このため、オア回路２８３の出力データＳ２は、データＤＤ０、ＤＤ１を含むデータである（図１８（ｂ５））。すなわち、レジスタＲ８には、データＤＤ０、ＤＤ１を含むデータＯＤＡＴＡが格納される（図１８（ｂ６））。なお、オフセットＯＦは、図９、図１０に示した動作により、“１０”から“２０”に更新される。
【０１２０】
図１９に示すように、３回目の加算命令（図１５（ａ１０））では、出力データ生成部２９は、命令実行部２４からデータＥＤＡＴＡを受け、データＥＤＡＴＡ内のデータＤＤ２をオフセットＯＦ（ＯＦ＝２０）に基づいてレジスタＲ８に格納する（図１９（ｃ））。出力データ生成部２９の動作は、右論理シフト部２８５のシフト量ＬＳＲ（３４ビット）を除いて、１回目の加算命令のとき（図１８（ａ））と同じである。なお、ＦＦ２８２から読み出されるデータＩＮ１がデータＤＤ０、ＤＤ１を含むデータであるため（図１９（ｃ４））、オア回路２８３の出力データＳ２およびデータＯＤＡＴＡは、データＤＤ０、ＤＤ１、ＤＤ２を含むデータである（図１９（ｃ５）、（ｃ６））。また、オフセットＯＦは、図９、図１０に示した動作により、“２０”から“３０”に更新される。
【０１２１】
２回目のループ中の１回目の加算命令（図１５（ａ８））では、出力データ生成部２９は、命令実行部２４からデータＥＤＡＴＡを受け、データＥＤＡＴＡ内のデータＤＤ３ａをオフセットＯＦ（ＯＦ＝３０）に基づいてレジスタＲ８に格納し、データＥＤＡＴＡ内のデータＤＤ３ｂをＦＦ２８２に格納する（図１９（ｄ））。なお、データＤＤ３ａは、データＤＤ３の下位２ビットのデータであり、データＤＤ３ｂは、データＤＤ３の上位８ビットのデータである。
【０１２２】
出力データ生成部２９の動作は、セレクタ２８６の動作と右論理シフト部２８５のシフト量ＬＳＲ（３４ビット）とを除いて、１回目の加算命令のとき（図１８（ａ））と同じである。なお、ＦＦ２８２から読み出されるデータＩＮ１は、データＤＤ０、ＤＤ１、ＤＤ２を含むデータであり、右論理シフト部２８５の出力データの下位３２ビットのデータＩＮ２は、データＤＤ３ａを含むデータである（図１９（ｄ４））。このため、オア回路２８３の出力データＳ２およびデータＯＤＡＴＡは、データＤＤ０、ＤＤ１、ＤＤ２、ＤＤ３ａを含むデータである（図１９（ｄ５）、（ｄ６））。
【０１２３】
また、セレクタ２８６は、右論理シフト部２８５の出力データの上位３２ビットのデータＳ３とオア回路２８３の出力データＳ４（Ｓ２）とを受け、データＤＤ３ｂを含むデータＳ３をＦＦ２８２に格納する（図１８（ｄ３）、（ｄ６））。例えば、ビット長ＬＮとオフセットＯＦとの加算結果が３２以上であるため、データＳ３がＦＦ２８２に出力される。なお、オフセットＯＦ、レジスタ番号ＷＰＴ、エンプティＥＭＰは、図９、図１０に示した動作により、“３０”、“Ｒ８”、“１”から“８”、“レジスタＲ９を示す値（以下、単にＲ９とも称する）”、“０”にそれぞれ更新される。
【０１２４】
図２０に示すように、２回目のループ中の２回目の加算命令（図１５（ａ９））では、出力データ生成部２９は、命令実行部２４からデータＥＤＡＴＡを受け、データＥＤＡＴＡ内のデータＤＤ４をオフセットＯＦ（ＯＦ＝８）に基づいてレジスタＲ９（レジスタ番号ＷＰＴが示すレジスタＲ）に格納する（図２０（ｅ））。出力データ生成部２９の動作は、データＯＤＡＴＡを格納するレジスタＲ９と右論理シフト部２８５のシフト量ＬＳＲ（４６ビット）とを除いて、１回目の加算命令のとき（図１８（ａ））と同じである。なお、オフセットＯＦは、図９、図１０に示した動作により、“８”から“１８”に更新される。
【０１２５】
ここで、ＦＦ２８２から読み出されるデータＩＮ１は、データＤＤ３ｂ（レジスタＲ８に格納されたデータＤＤ３ａを除くデータＤＤ３）を含むデータであり、右論理シフト部２８５の出力データの下位３２ビットのデータＩＮ２は、データＤＤ４を含むデータである（図２０（ｅ４））。このため、オア回路２８３の出力データＳ２およびデータＯＤＡＴＡは、データＤＤ３ｂ、ＤＤ４を含むデータである（図２０（ｅ５）、（ｅ６））。このように、この実施形態では、連続する任意のビット長（例えば、１０ビット）のデータＤＤのデータＤＤ３を２つのレジスタＲ８、Ｒ９にまたいで格納することができる。
【０１２６】
２回目のループ中の３回目の加算命令（図１５（ａ１０））では、出力データ生成部２９は、命令実行部２４からデータＥＤＡＴＡを受け、データＥＤＡＴＡ内のデータＤＤ５をオフセットＯＦ（ＯＦ＝１８）に基づいてレジスタＲ９に格納する（図２０（ｆ））。出力データ生成部２９の動作は、右論理シフト部２８５のシフト量ＬＳＲ（３６ビット）を除いて、２回目のループ中の２回目の加算命令のとき（図２０（ｅ））と同じである。
【０１２７】
なお、ＦＦ２８２から読み出されるデータＩＮ１は、データＤＤ３ｂ、ＤＤ４を含むデータであり、右論理シフト部２８５の出力データの下位３２ビットのデータＩＮ２は、データＤＤ５を含むデータである（図２０（ｆ４））。このため、オア回路２８３の出力データＳ２およびデータＯＤＡＴＡは、データＤＤ３ｂ、ＤＤ４、ＤＤ５を含むデータである（図２０（ｆ５）、（ｆ６））。また、オフセットＯＦは、図９、図１０に示した動作により、“１８”から“２８”に更新される。
【０１２８】
２回目のループでは、１回目の加算命令の際に、エンプティＥＭＰが“０”に更新されたため、プロセッサ１１は、レジスタ番号ＲＰＴで示されるレジスタＲ８のデータＤＤ０、ＤＤ１、ＤＤ２、ＤＤ３ａを、アドレスａｄｒ３にストアする（図１５（ａ１１）、（ａ１２））。この際、レジスタ番号ＲＰＴ、エンプティＥＭＰは、上述した図９に示した動作により、“Ｒ８”、“０”から“Ｒ９”、“１”にそれぞれ更新される。
【０１２９】
以上、この実施形態においても、上述した図１−図６で説明した実施形態と同様の効果を得ることができる。さらに、この実施形態では、２つのレジスタＲをまたいで格納されたデータを扱え、かつ、２つのレジスタＲをまたいでデータを格納できる。この結果、この実施形態では、レジスタＲをさらに有効に使用できる。また、この実施形態では、レジスタ番号ＲＮ２を上述した図９−図１１に示した動作により変化させているため、２つのレジスタから構成されるレジスタ群（例えば、Ｒ４とＲ５、Ｒ６とＲ７、Ｒ８とＲ９）をＦＩＦＯ（First-In First-Out）のように制御できる。さらに、この実施形態では、エンプティＥＭＰおよびフルＦＵＬを利用することにより、条件実行命令（ロード命令、ストア命令等）の実行を制御できる。
【０１３０】
なお、上述した実施形態では、本発明を、３２ビットのプロセッサ１０、１１に適用する例について述べた。本発明は、かかる実施形態に限定されるものではない。例えば、本発明を、６４ビットプロセッサに適用してもよい。この場合、例えば、レジスタファイル３０は、６４ビット幅の汎用レジスタＲ（Ｒ０−Ｒ９）を有する。また、本発明を、例えば、同時に複数の命令、データを処理可能なプロセッサ（ＳＩＭＤ（Single Instruction Multiple Data）プロセッサ、スーパースカラープロセッサ等）に適用してもよい。この場合にも、上述した実施形態と同様の効果を得ることができる。
【０１３１】
上述した実施形態では、入力データ抽出部２２、２３、命令実行部２４、出力データ生成部２８、２９が単サイクルで動作する例について述べた。本発明は、かかる実施形態に限定されるものではない。例えば、入力データ抽出部２２、２３、命令実行部２４、出力データ生成部２８、２９は、パイプラインステージを分割し、マルチサイクルで動作してもよい。すなわち、入力データ抽出部２２、２３、命令実行部２４、出力データ生成部２８、２９を、パイプライン処理で動作する構成にしてもよい。この場合にも、上述した実施形態と同様の効果を得ることができる。
【０１３２】
上述した図７−図２０で説明した実施形態では、レジスタＲ４−Ｒ９がレジスタ群として使用される例について述べた。本発明は、かかる実施形態に限定されるものではない。例えば、レジスタＲ４−Ｒ９は、レジスタ群として使用されない場合、上述した図４に示したレジスタＲ４、Ｒ６、Ｒ８のように使用されてもよい。この場合、例えば、制御レジスタ４３、４４、４５のイネーブルＥＮを２ビットで構成することにより、レジスタＲ４−Ｒ９の使用の仕方を制御できる。例えば、レジスタＲ４、Ｒ５は、イネーブルＥＮが“０１”のときに、図４に示したレジスタＲ４、図１に示したレジスタＲ０のようにそれぞれ使用され、イネーブルＥＮが“１０”のときに、図１に示したレジスタＲ０、図４に示したレジスタＲ４のようにそれぞれ使用される。また、例えば、レジスタＲ４、Ｒ５は、イネーブルＥＮが“１１”のときに、上述した図１２に示したレジスタＲ４、Ｒ５のように使用され、イネーブルＥＮが“００”のときに、図１に示したレジスタＲ０のように使用される。この場合にも、上述した実施形態と同様の効果を得ることができる。
【０１３３】
上述した図７−図２０で説明した実施形態では、制御レジスタ４３、４４、４５がエンプティＥＭＰおよびフルＦＵＬを有する例について述べた。本発明は、かかる実施形態に限定されるものではない。例えば、制御レジスタ４３、４４、４５は、エンプティＥＭＰおよびフルＦＵＬが省かれて構成されてもよい。この場合にも、条件実行命令の制御を除いて、上述した実施形態と同様の効果を得ることができる。さらに、制御レジスタ４３、４４、４５は、レジスタ番号ＷＰＴ、ＲＰＴ、エンプティＥＭＰおよびフルＦＵＬが省かれて構成されてもよい。この場合にも、ＦＩＦＯのように制御することと条件実行命令の制御とを除いて、上述した実施形態と同様の効果を得ることができる。
【０１３４】
以上、本発明について詳細に説明してきたが、上記の実施形態およびその変形例は発明の一例に過ぎず、本発明はこれに限定されるものではない。本発明を逸脱しない範囲で変形可能であることは明らかである。
【符号の説明】
【０１３５】
１０、１１‥プロセッサ；２０、２１‥実行ユニット；２２、２３‥入力データ抽出部；２４‥命令実行部；２５‥ＡＬＵ；２６‥ロード／ストアユニット；２８、２９‥出力データ生成部；３０‥レジスタファイル；４０−４５‥制御レジスタ；５０、５４‥制御部
【先行技術文献】
【特許文献】
【０１３６】
【特許文献１】特開平１１−６８５７９号公報
【特許文献２】特開平６−１９６８３号公報
【図１】
2010165245.tif 000003
【図２】
2010165245.tif 000004
【図３】
2010165245.tif 000005
【図４】
2010165245.tif 000006
【図５】
2010165245.tif 000007
【図６】
2010165245.tif 000008
【図７】
2010165245.tif 000009
【図８】
2010165245.tif 000010
【図９】
2010165245.tif 000011
【図１０】
2010165245.tif 000012
【図１１】
2010165245.tif 000013
【図１２】
2010165245.tif 000014
【図１３】
2010165245.tif 000015
【図１４】
2010165245.tif 000016
【図１５】
2010165245.tif 000017
【図１６】
2010165245.tif 000018
【図１７】
2010165245.tif 000019
【図１８】
2010165245.tif 000020
【図１９】
2010165245.tif 000021
【図２０】
2010165245.tif 000022