(57)【特許請求の範囲】
【請求項１】
命令をデコードする命令デコード部と、
前記命令デコード部によりデコードされた命令に対応する処理を実行する命令実行部と、
データメモリからのロードデータを格納可能であり、前記命令実行部に対して入力データを供給するレジスタファイルとを備え、
前記レジスタファイルは、各々が複数ビットのデータを保持可能な複数のレジスタを有し、前記レジスタファイルは前記複数のレジスタから選択された少なくとも３つの隣接したレジスタ間が直接的かつ電気的に接続できるように構成され、前記少なくとも３つの隣接したレジスタの保持データを前記少なくとも３つの隣接したレジスタの間でシフトさせることで前記少なくとも３つの隣接したレジスタの保持データを更新可能である、プロセッサ。
【請求項２】
前記レジスタファイルは、前記複数のレジスタのうちでデータシフトの対象となる１つ以上の対象レジスタとこれらに隣接するレジスタとの間で選択的にデータシフト動作を行うことにより、前記対象レジスタの保持データを選択的に更新する請求項１に記載のプロセッサ。
【請求項３】
前記レジスタファイルのデータシフト動作の実行を指示するシフト命令が前記命令デコード部によってデコードされた場合に、前記レジスタファイルに対してデータシフト動作の実行を指示する制御信号を出力する制御部をさらに備える請求項１又は２に記載のプロセッサ。
【請求項４】
前記制御信号は、前記複数のレジスタのうちでデータシフトの対象となる１つ以上のレジスタの指定、データシフト方向の指定、及びデータシフト量の指定を含む請求項３に記載のプロセッサ。
【請求項５】
前記シフト命令のオペランド部には、前記複数のレジスタのうちでデータシフトの対象となるレジスタの指定が含まれる請求項３又は４に記載のプロセッサ。
【請求項６】
前記複数のレジスタの各々は、隣接する２つのレジスタのうち少なくとも一方の保持データと自身の保持データとを結合した結合データに対してシフト処理を行うシフト回路を有し、シフト処理後の結合データを用いて自身の保持データを更新可能である請求項１乃至５のいずれか１項に記載のプロセッサ。
【請求項７】
請求項１に記載のプロセッサに接続されたデータメモリから、前記複数のレジスタの各々のレジスタ長の２倍以上のデータ長であって、かつ、データ境界が前記データメモリのワード境界と一致していない非整列データ・ブロックを前記レジスタファイルへ読み出すデータ読み出し方法であって、
整列データの読み出しを指示する整列ロード命令を繰り返し実行することで、前記非整列データ・ブロックを含む範囲の複数の整列データを前記データメモリから前記レジスタファイルに転送し、
前記レジスタファイルのデータシフト動作の実行を指示するシフト命令を実行することで、前記複数の整列データを保持しているレジスタの間で保持データをシフトさせ、前記非整列データ・ブロックを前記複数のレジスタに整列化された状態で格納する、データ読み出し方法。
【請求項８】
前記レジスタファイルのデータシフトは、前記複数のレジスタのうちで前記非整列データ・ブロックを保持しているレジスタの間で選択的に行われる、請求項７に記載のデータ読み出し方法。
【請求項９】
前記シフト命令のオペランド部には、前記複数のレジスタのうちでデータシフトの対象となる両端の２つのレジスタの指定が含まれ、前記レジスタファイルのデータシフトは、前記オペランド部に指定された２つのレジスタに挟まれているレジスタを選択的に連結して行われる、請求項７又は８に記載のデータ読み出し方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マイクロプロセッサ、ＤＳＰ（Digital Signal Processor）等のプロセッサに関し、特に、プロセッサに接続されたデータメモリからプロセッサが有するレジスタファイルに、非整列データ・ブロックを読み出すデータ読み出し技術に関する。
【背景技術】
【０００２】
マイクロプロセッサ、ＤＳＰ（Digital Signal Processor）等のプロセッサは、所定のデータ長を単位としてデータを取り扱うこととしている。現在のプロセッサは、この取り扱い単位を３２ビット（４バイト）単位又は６４ビット（８バイト）単位としていることが多い。また、この取り扱い単位は「ワード」と呼ばれる。なお、プロセッサのデータ取り扱い単位が６４ビット単位とされている場合、歴史的な慣例に従って、３２ビット単位を「ワード」、６４ビット単位を「ダブルワード」と呼ぶ場合もある。プロセッサ内に設けられるレジスタのレジスタ長は、１ワード又はその整数倍のデータを格納できるサイズとされている。
【０００３】
プロセッサに接続されるデータメモリなどの周辺装置もプロセッサのデータ取り扱い単位に則ってデータ長を統一することにより、高速処理が可能となる。例えば、プロセッサに接続されるキャッシュメモリ（データメモリ）のライン幅は、プロセッサのデータ取り扱い単位にあわせて１ワード又はその整数倍として構成される。これにより、１回のキャッシュアクセスによって、効率よく１ワード又はその整数倍のデータをプロセッサ内のレジスタにロードすることができる。
【０００４】
なお、１ワード未満のデータ及び１ワード単位のデータを連続してデータメモリに格納すると、１ワード単位の境界（ワード境界）あるいはデータメモリのライン境界（キャッシュライン境界）を跨いでデータが格納される場合が生じる。本明細書では、ワード境界を跨いで格納されている１ワードのデータを「非整列データ」と呼ぶ。さらに、本明細書では、プロセッサのレジスタ長の２倍以上、つまり２ワード以上のデータ長を有し、かつ、そのデータ境界がデータメモリのワード境界と一致していない非整列データを、「非整列データ・ブロック」と呼ぶ。
【０００５】
上述した非整列データをプロセッサ内のレジスタに整列化してロードするために、例えば、代表的な命令セットであるＭＩＰＳ（登録商標）命令セットは、ＬＷＬ（Load Word Left）命令、ＬＷＲ（Load Word Right）命令、ＬＤＬ（Load Double-word Left）命令、ＬＤＲ（Load Double-word Right）命令を備えている。これらの命令を組み合わせて実行することによって、非整列データのロードが２回のメモリアクセスで実行可能である（非特許文献１を参照）。
【０００６】
一例として、ＬＤＬ命令及びＬＤＲ命令を用いた非整列データのロード処理について、図９を用いて説明する。図９に示すデータメモリ５１は、ライン幅が６４ビットとされており、各々が１６ビット長であるデータＸ０〜Ｘ１５が2つのラインに格納されている。以下では、１ワードが６４ビットである６４ビット・プロセッサが、４つのデータＸ１〜Ｘ４を図９のデータメモリ５１から読み出して、レジスタＲ８に格納する場合を考える。図９に示すように、これらの４つのデータＸ１〜４の境界は、データメモリ５１のライン境界と一致していない。なお、図９の例では、データメモリ５１のライン幅は、プロセッサのワード単位と同じ６４ビットであるから、ライン境界はワード境界に等しい。
【０００７】
ＭＩＰＳ（登録商標）命令セットを利用するプロセッサは、ＬＤＲ命令によって、００００ｈ番地のラインからＸ３、Ｘ２、Ｘ１を読み出し、これらをレジスタＲ８に右詰めで格納することができる。また、ＬＤＬ命令によって、０００４ｈ番地のラインからＸ４を読み出し、これをレジスタＲ８に左詰めで格納することができる。
【非特許文献１】MIPS64(R) Architecture For Programmers Volume II: The MIPS64(R) Instruction Set、[online]、2005年7月1日、205〜209及び222〜228頁、MIPS Technologies Inc.、[2007年7月20日検索]、インターネット＜URL: http://www.mips.com/content/Documentation/MIPSDocumentation/ProcessorArchitecture/doclibrary＞
【発明の開示】
【発明が解決しようとする課題】
【０００８】
上述したように、ＬＤＬ命令及びＬＤＲ命令のような非整列データの読み出し命令（以下では、非整列ロード命令と呼ぶ）を用いる場合、データ長がワード単位に等しい１つの非整列データ（Ｘ１〜Ｘ４等）をプロセッサにロードするために、合計２命令を実行する必要がある。したがって、例えば、図１０に示すように、データメモリ５１に格納されているデータ長が４ワードである非整列データ・ブロックＸ１〜Ｘ１６をレジスタファイル内のレジスタＲ０〜Ｒ３にロードするためには、少なくとも合計８命令、具体的には４つのＬＤＬ命令及び４つのＬＤＲ命令を実行する必要がある。一般化すると、データ長がＮワードである非整列データ・ブロックをプロセッサのレジスタファイルにロードするためには、非整列データの読み出し命令を２Ｎ回実行する必要がある。
【０００９】
このように、非整列データ・ブロックをプロセッサ内のレジスタファイルにロードするためには、多くの命令を実行する必要があるという問題がある。この問題は、非整列データ・ブロックを用いた演算処理が多く含まれるデジタルフィルタ処理等をプロセッサで実行する場合に、実行時間の増大を招く原因となる。
【課題を解決するための手段】
【００１０】
本発明の第１の態様にかかるプロセッサは、命令をデコードする命令デコード部と、前記命令デコード部によりデコードされた命令に対応する処理を実行する命令実行部と、データメモリからのロードデータを格納可能であり、前記命令実行部に対して入力データを供給するレジスタファイルとを有する。さらに、前記レジスタファイルは、各々が複数ビットのデータを保持可能な複数のレジスタを有し、前記複数のレジスタの保持データを前記複数のレジスタの間でシフトさせることで前記複数のレジスタの保持データを更新可能である。
【００１１】
上述したように、本発明の第１の態様にかかるプロセッサは、前記命令実行部に対して入力データを供給する前記レジスタファイル内の複数のレジスタに保持されたデータを、前記複数のレジスタの間でシフトさせることができる。このように構成された前記プロセッサによれば、以下に示すような簡潔な手順によって、データメモリに格納された非整列データ・ブロックを前記レジスタファイルにロードすることができる。
【００１２】
具体的には、まず、データメモリのワード境界にしたがって整列されたデータ（以下では、整列データと呼ぶ）をロードするための命令（以下では、整列ロード命令と呼ぶ）を繰り返し実行することで、前記非整列データ・ブロックを含む範囲の複数の整列データを前記データメモリから前記レジスタファイルに転送する。そして、前記レジスタファイルのデータシフト動作の実行を指示するシフト命令を実行することで、前記複数の整列データを保持しているレジスタの間で保持データをシフトさせ、前記非整列データ・ブロックを前記複数のレジスタに整列化された状態で格納すればよい。
【００１３】
上述の手順によれば、Ｎ＋１回の整列ロード命令と１回のシフト命令の実行によって、Ｎワード長の非整列データ・ブロックをレジスタファイルにロードすることができる。つまり、前記本発明の第１の態様にかかるプロセッサは、非整列データの読み出し命令を２Ｎ回実行する必要がある背景技術に示した手順に比べて、より少ない命令数で非整列データ・ブロックの整列ロード処理を実行することができる。
【発明の効果】
【００１４】
本発明により、非整列データ・ブロックをプロセッサ内のレジスタファイルにロードする際に要する命令数を削減することが可能なプロセッサ及びプロセッサによるデータ読み出し方法を提供できる。
【発明を実施するための最良の形態】
【００１５】
以下では、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。各図面において、同一要素には同一の符号が付されており、説明の明確化のため、必要に応じて重複説明は省略される。
【００１６】
本発明の実施の形態にかかるプロセッサ１を図１に示す。図１は、プロセッサ１の全体構成を示すブロック図である。図１において、命令バッファ１０は、命令メモリ５０からフェッチされた命令を格納する一時記憶領域である。命令デコード部１１は、命令バッファ１０に格納された命令を読み出し、当該命令の命令種別を判定し、命令オペランドを取得する。制御部１２は、命令デコードによって得られた命令種別と命令オペランドに応じて、後述するレジスタファイル１３及び命令実行部１４に対してデータ若しくは制御信号又はこれら両方を出力する。
【００１７】
レジスタファイル１３は、複数のレジスタの集合である。本実施の形態では、レジスタファイル１３が３２本のレジスタＲ０〜Ｒ３１を有するものとして説明する。また、レジスタＲ０〜Ｒ３１のレジスタ長は、それぞれ６４ビットとする。なお、ここでのレジスタファイル１３が有するレジスタ数及びこれらのレジスタ長が一例にすぎないことはもちろんである。レジスタＲ０〜Ｒ３１は、命令実行部１４の入力データ及び出力データを格納するアキュムレータ、あるいはデータメモリ５１へアクセスする時のアドレス指定を行うためのアドレスレジスタなど、様々な用途に使用可能なレジスタである。また、レジスタＲ０〜Ｒ３１は、演算処理のためにデータメモリ５１からプロセッサ１にロードされるデータの格納先である。
【００１８】
さらに、レジスタファイル１３は、レジスタＲ０〜Ｒ３１の中から選択された複数のレジスタの間で、保持データをシフトさせることができる。レジスタ間でのデータシフトを可能とするレジスタファイル１３の構成例については後述する。
【００１９】
命令実行部１４は、命令デコード部１１においてデコードされる命令に応じた処理を実行する。具体的には、命令実行部１４は、複数の実行ユニットを有し、制御部１２の制御に従って、デコードされた命令を各命令に適した実行ユニットにて実行する。例えば、加算命令、積和演算命令等の演算処理の実行を指示する命令がデコードされた場合、命令実行部１４は、レジスタファイル１３から供給されるデータを用いて指定された演算処理を実行する。また、例えば、ロード命令又はストア命令がデコードされた場合、命令実行部１４は、データメモリ５１のアクセス先アドレスを生成してデータメモリ５１にアクセスする。命令実行部１４は、浮動小数点演算ユニット、整数演算ユニット、ロード／ストアユニット等のほか、例えば、デジタルフィルタ処理などの特定の演算処理に特化した専用の実行ユニットを有してもよい。
【００２０】
なお、図１では、論理的な構成単位である命令メモリ５０及びデータメモリ５１を示しているが、これらはそれぞれ、ＲＯＭ（Read Only Memory）、ＳＲＡＭ（Static Random Access Memory）、ＤＲＡＭ（Dynamic Random Access Memory）若しくはフラッシュメモリ、又はこれらの組合せ等により構成される。
【００２１】
続いて以下では、レジスタファイル１３の具体的な構成及び動作を、図２〜６を用いて説明する。図２は、レジスタファイル１３の全体構成を示している。始めに、図２に示された各端子に供給される信号について説明する。
【００２２】
ＷＲ１ＤＡＴＡ［６３：０］は、命令実行部１４からレジスタファイル１３に入力される６４ビットデータである。ＷＲ２ＤＡＴＡ［６３：０］は、データメモリ５１からレジスタファイル１３に入力される６４ビットデータである。ＷＲ１ＷＡ［４：０］及びＷＲ２ＷＡ［４：０］は、レジスタファイル１３の書き込みアドレスである。ＷＲ１ＷＢＲＱ及びＷＲ２ＷＢＲＱは、レジスタファイル１３へのライトバック要求の有無を示す１ビット論理信号である。
【００２３】
ＲＤ１［６３：０］〜ＲＤ３［６３：０］は、レジスタＲ０〜Ｒ３１から読み出されたデータである。ＲＡ１［４：０］〜ＲＡ３［４：０］は、レジスタファイル１３の読み出しアドレスである。なお、図１及び図２では、レジスタファイル１３が、命令実行部１４に対して、３つのデータを同時に供給可能であるものとしているが、このような構成は一例である。
【００２４】
ＳＦＴＲＱは、レジスタファイル１３に対するシフト動作の実行要求の有無を示す１ビット論理信号である。ＳＦＴＴＲＧ［３１：０］は、レジスタＲ０〜Ｒ３１の中でシフト動作の対象となるレジスタを指定する信号である。ＳＦＴＤＩＲは、データシフトの方向を指定する１ビット信号である。最後に、ＳＦＴＶＡＬ［１：０］は、データシフト量を指定する信号である。
【００２５】
書き込みコマンド生成回路１３０は、レジスタファイル１３へのライトバック要求ＷＲ１ＷＢＲＱ又はＷＲ２ＷＢＲＱと、書き込みアドレスＷＲ１ＷＡ［４：０］又はＷＲ２ＷＡ［４：０］を入力する。そして、書き込みコマンド生成回路１３０は、ＷＲ１ＷＢＲＱ＝１であるときに、書き込みアドレスＷＲ１ＷＡ［４：０］に対応するレジスタにＷＲ１ＴＲＧ信号を出力する。また、書き込みコマンド生成回路１３０は、ＷＲ２ＷＢＲＱ＝１であるときに、書き込みアドレスＷＲ２ＷＡ［４：０］に対応するレジスタにＷＲ２ＴＲＧ信号を出力する。ＷＲ１ＴＲＧ信号及びＷＲ２ＴＲＧ信号は、レジスタＲ０〜Ｒ３１に対して、ＷＲ１ＤＡＴＡ［６３：０］又はＷＲ２ＤＡＴＡ［６３：０］の取り込みを指示するトリガ信号である。
【００２６】
読み出しデータ選択回路１３１は、読み出しアドレスＲＡ１［４：０］を入力し、レジスタＲ０〜Ｒ３１の中からＲＡ１［４：０］に対応するレジスタを選択し、選択したレジスタの格納値を読み出しデータＲＤ１［６３：０］として出力する。同様に、読み出しデータ選択回路１３１は、読み出しアドレスＲＡ２［４：０］及びＲＡ３［４：０］を入力し、これらのアドレスに対応するレジスタの格納値を、それぞれＲＤ２［６３：０］及びＲＤ３［６３：０］として出力する。
【００２７】
ＡＮＤ回路１３２は、１ビット信号ＳＦＴＲＱと、３２ビット信号ＳＦＴＴＲＧ［３１：０］の各ビットとの論理積を演算し、演算結果を３２ビットデータとして出力する。図２の構成例では、ＳＦＴＲＱ信号が"１"であることは、シフト動作の実行要求有りを表している。また、ＳＦＴＴＲＧ［３１：０］の各ビットがレジスタＲ０〜Ｒ３１の各々と一対一に対応している。つまり、ＳＦＴＴＲＧ［３１：０］のあるビットが"１"であることは、当該ビットに対応するレジスタがシフト動作の対象であることを示している。
【００２８】
レジスタＲ０〜Ｒ３１は、各々が６４ビット長のデータを保持可能であるほか、隣接するレジスタの間を選択的に連結し、連結されたレジスタ間でデータシフト動作を行えるように構成されている。図２では、このようなデータシフト機能を有するレジスタＲ０〜Ｒ３１をレジスタエレメントＲＥ＿＃０〜ＲＥ＿＃３１と表記している。
【００２９】
図２のレジスタエレメントＲＥ＿＃０〜ＲＥ＿＃３１の各端子に入出力される信号を図３に示す。図３において、ＳＦＴＴＲＧＸは、上述したＡＮＤ回路１３２から出力される３２ビット信号のうちの１ビット信号を意味する。例えば、レジスタＲ１に対応するレジスタエレメントＲＥ＿＃１に入力されるＳＦＴＴＲＧＸは、ＳＦＴＴＲＧ［１］とＳＦＴＲＱとの論理積である。レジスタエレメントＲＥ＿＃０〜ＲＥ＿＃３１は、入力されるＳＦＴＴＲＧが"１"であるときに、データシフト動作を実行する。
【００３０】
ＷＤＯ［６３：０］出力端子は、レジスタエレメントに保持されている６４ビットデータを出力する。ＬＤＡＴＡ［６３：０］には、下位側のレジスタに保持されている６４ビットデータが入力される。また、ＵＤＡＴＡ［６３：０］には、上位側のレジスタに保持されている６４ビットデータが入力される。例えば、レジスタＲ１（ＲＥ＿＃１）に入力されるＬＤＡＴＡ［６３：０］は、レジスタＲ０に保持されている６４ビットデータである。一方、レジスタＲ１（ＲＥ＿＃１）に入力されるＵＤＡＴＡ［６３：０］は、レジスタＲ２に保持されている６４ビットデータである。
【００３１】
図２の構成では、最下位のレジスタＲ０（ＲＥ＿＃０）のＬＤＡＴＡ［６３：０］入力端子及び最上位のレジスタＲ３１（ＲＥ＿＃３１）のＵＤＡＴＡ［６３：０］入力端子には、ゼロが入力される。しかしながら、当該構成は一例であり、例えば、これら２つの入力端子に供給されるビットを全て１としてもよい。また、レジスタＲ０（ＲＥ＿＃０）のＬＤＡＴＡ［６３：０］入力端子をレジスタＲ３１（ＲＥ＿＃３１）のＷＤＯ［６３：０］出力端子と接続し、レジスタＲ３１（ＲＥ＿＃３１）のＵＤＡＴＡ［６３：０］入力端子をレジスタＲ０（ＲＥ＿＃０）のＷＤＯ［６３：０］出力端子と接続してもよい。
【００３２】
レジスタエレメントＲＥ＿＃０〜ＲＥ＿＃３１の構成の一例を図４に示す。図４は、１つのレジスタエレメントの構成例を示すブロック図である。図４のレジスタ４０は、レジスタ長が６４ビットであり、６４ビットデータを保持可能である。
【００３３】
シフト回路４１は、自身のレジスタ４０に保持されている６４ビットデータ、下位側のレジスタエレメントに保持されている６４ビットデータ（ＬＤＡＴＡ［６３：０］）、及び上位側のレジスタエレメントに保持されている６４ビットデータ（ＵＤＡＴＡ［６３：０］）を入力し、これらを連結した１９２ビットデータのシフト演算を実行する。シフト回路４１のシフト演算におけるデータシフト方向及びデータシフト量は、シフト回路４１に入力されるＳＦＴＤＩＲ信号及びＳＦＴＶＡＬ［１：０］に応じて決定される。ＳＦＴＤＩＲ及びＳＦＴＶＡＬ［１：０］の組合せとシフト回路４１による演算内容との対応関係の具体例を図５に示す。なお、図５では、データシフト量を８ビット、１６ビット、３２ビット及び６４ビットの４種類としているがこれは一例である。つまり、データシフト量は、データメモリ５１のワード長、レジスタＲ０〜Ｒ３１のレジスタ長、及び命令実行部１４のデータ処理内容等に応じて適宜設計すれば良い。
【００３４】
セレクタ４２は、ＷＲ１ＤＡＴＡ［６３：０］及びＷＲ２ＤＡＴＡ［６３：０］を入力し、書き込みコマンド生成回路１３０から供給されるＷＲ１ＴＲＧが"１"であるときにＷＲ１ＤＡＴＡ［６３：０］を選択して出力し、ＷＲ１ＴＲＧが"０"であるときにＷＲ２ＤＡＴＡ［６３：０］を選択して出力する。
【００３５】
セレクタ４３は、シフト回路４１の出力データ及びセレクタ４２の出力データを入力し、ＡＮＤ回路１３２から供給されるＳＦＴＴＲＧＸが"１"であるときにシフト回路４１から供給されるデータを選択して出力し、ＳＦＴＴＲＧＸが"０"であるときにセレクタ４２から供給されるデータを選択して出力する。
【００３６】
セレクタ４４は、自身のレジスタ４０に保持されているデータ及びセレクタ４３の出力データを入力し、ＯＲ回路４５から供給される１ビット論理信号が"０"であるときにレジスタ４０に保持されているデータを選択して出力する。図４に示すように、セレクタ４４の出力データはレジスタ４０に取り込まれるから、ＯＲ回路４５から供給される１ビット論理信号が"０"であるときは、レジスタ４０の格納値が更新されずに過去の値のまま維持される。一方、ＯＲ回路４５から供給される１ビット論理信号が"１"であるとき、セレクタ４４は、セレクタ４３の出力データを選択し、これをレジスタ４０に供給する。
【００３７】
ＯＲ回路４５は、レジスタ４０への書き込み実行を指示するトリガ信号であるＷＲ１ＴＲＧ及びＷＲ２ＴＲＧ、並びにデータシフト動作の実行を指示するトリガ信号であるＳＦＴＴＲＧＸの論理和を演算し、演算結果をセレクタ４４の制御端子（不図示）に供給する。
【００３８】
続いて、レジスタファイル１３のデータシフト動作の具体例を説明する。図６（ａ）は、右方向へのデータシフトの実行を指示する右シフト命令（ＶＲＥＧＳＨＲ．Ｈ命令）に応じたデータシフトを実行する前後におけるレジスタＲ０〜Ｒ４の格納値を示したものである。ＶＲＥＧＳＨＲ．Ｈ命令が命令デコード部１１によりデコードされると、制御部１２は、上述したＳＦＴＲＱ、ＳＦＴＴＲＦ［３１：０］、ＳＦＴＤＩＲ及びＳＦＴＶＡＬ［１：０］の各信号をレジスタファイル１３に供給する。そして、これらの信号に応じて、レジスタファイル内のレジスタエレメントＲＥ＿＃０〜ＲＥ＿＃３１の間でデータシフト動作が実行される。
【００３９】
図６（ａ）のニーモニック"VREGSHR.H R0, R3"で表される右シフト命令は、第１オペランドに指定されたレジスタＲ０から第２オペランドに指定されたレジスタＲ３までの４つのレジスタ間における１６ビットの右データシフトの実行を指示する命令である。当該命令に応じてレジスタファイル１３の右データシフトが行われることにより、レジスタファイル１３の格納値は、図６（ａ）の左側に示すデータシフト前の状態から図６（ａ）の右側に示すデータシフト後の状態に変化する。当該命令によって、非整列データ・ブロックＸ１〜Ｘ１６が、レジスタＲ０〜Ｒ３に整列された状態で格納される。なお、レジスタファイル１３のデータシフトは、右シフト命令（ＶＲＥＧＳＨＲ．Ｈ命令）のオペランドに指定されたレジスタの間で選択的に実行される。このため、図６（ａ）において、データシフトの対象でないレジスタＲ４の格納値は変化しない。
【００４０】
一方、図６（ｂ）は、左方向へのデータシフトの実行を指示する左シフト命令（ＶＲＥＧＳＨＬ．Ｈ命令）に応じたデータシフトの実行前後のレジスタＲ０〜Ｒ４の格納値を示したものである。図６（ｂ）のニーモニック"VREGSHL.H R1, R4"で表される右シフト命令は、第１オペランドに指定されたレジスタＲ１から第２オペランドに指定されたレジスタＲ４までの４つのレジスタ間における１６ビットの左データシフトの実行を指示する命令である。当該命令に応じてレジスタファイル１３の左データシフトが行われることにより、レジスタファイル１３の格納値は、図６（ｂ）の左側に示すデータシフト前の状態から図６（ｂ）の右側に示すデータシフト後の状態に変化する。当該命令によって、非整列データ・ブロックＸ３〜Ｘ１８が、レジスタＲ１〜Ｒ４に整列された状態で格納される。なお、レジスタファイル１３のデータシフトは、左シフト命令（ＶＲＥＧＳＨＬ．Ｈ命令）のオペランドに指定されたレジスタの間で選択的に実行される。このため、図６（ｂ）において、データシフトの対象でないレジスタＲ１の格納値は変化しない。
【００４１】
上述したように、本実施の形態にかかるプロセッサ１は、命令実行部１４に対するデータ供給元であり、かつ、データメモリ５１からロードされるデータの格納先であるレジスタファイル１３に含まれるレジスタＲ０〜Ｒ３１の間で選択的にデータシフトを行うことができる。このように構成されたプロセッサ１における非整列データ・ブロックのロード処理を効率行う手順を以下に説明する。
【００４２】
図７は、データ長がＮワードである非整列データ・ブロックのロード処理の概略手順を示すフローチャートである。まず、ステップＳ１１において、データメモリ５１から整列データをロードする整列ロード命令をＮ＋１繰り返し実行することで、Ｎワードの非整列データ・ブロックを含む範囲のＮ＋１個の整列データをデータメモリ５１からレジスタファイル１３に転送する。そして、ステップＳ１２において、１つのシフト命令を実行することで、Ｎ＋１個の整列データを保持しているＮ＋１個のレジスタの間でデータシフトを行う。
【００４３】
理解を容易にするため、非整列データ・ブロックのロード処理の具体例を図８（ａ）〜（ｃ）を用いて説明する。図８（ａ）〜（ｃ）は、データ長が４ワードである非整列データ・ブロックＸ１〜Ｘ１６が、データメモリ５１から読み出されてレジスタＲ０〜Ｒ３に整列化された状態で格納されるまでの過程を示している。
【００４４】
図８（ａ）は、データメモリ５１の００００ｈ番地から００１３ｈ番地に保持された５ワード分のデータＸ０〜Ｘ１９を示している。ステップＳ１１に示したように、整列データをロードするためのＬＤ命令を５回実行することで、データ長が４ワードである非整列データ・ブロックＸ１〜Ｘ１６を含む５ワードの整列データがレジスタＲ０〜Ｒ４に転送される。図８（ｂ）は、ステップＳ１１完了後のレジスタＲ０〜Ｒ４の格納値を示している。図８（ｂ）の状態では、非整列データ・ブロックＸ１〜Ｘ１６のデータ境界は、レジスタＲ０〜Ｒ３の境界に一致していない。次に、ステップＳ１２に示したようにレジスタファイル１３の１６ビット右データシフト実行を指示するシフト命令（ＶＲＥＧＳＨＲ．Ｈ命令）を１回実行することで、非整列データ・ブロックＸ１〜Ｘ１６が、レジスタＲ０〜Ｒ３に整列化された状態で格納される。
【００４５】
図７及び図８を用いて説明した本実施の形態のプロセッサ１におけるデータ読み出し方法によれば、Ｎ＋１回の整列ロード命令と１回のシフト命令、つまりＮ＋２個の命令によって非整列データ・ブロックの整列ロード処理を実行することができる。つまり、非整列データの読み出し命令を２Ｎ回実行する必要がある背景技術に示した手順に比べて、より少ない命令数で非整列データ・ブロックの整列ロード処理を実行することができる。本実施の形態にかかるプロセッサ１は、非整列データ・ブロックのロード処理に要する実行時間の増大を抑制できるため、非整列データ・ブロックを用いた演算処理が多く含まれる、つまり非整列データ・ブロックのロード処理が多発するデジタルフィルタ処理等に好適である。
【００４６】
なお、図１では、プロセッサ１の外部に命令メモリ５０及びデータメモリ５１が存在する構成を示した。しかしながら、例えば、命令メモリ５０若しくはデータメモリ５１又はこれら両方を含めて１チップに集積されたマイクロプロセッサなど、命令メモリ５０又はデータメモリ５１がプロセッサ１の内部に存在する構成としてもよい。つまり、本発明は、図１に示した具体的な実装に限られず、様々な実装形態のプロセッサに適用可能である。
【００４７】
さらに、本発明は上述した実施の形態のみに限定されるものではなく、既に述べた本発明の要旨を逸脱しない範囲において種々の変更が可能であることは勿論である。
【図面の簡単な説明】
【００４８】
【図１】実施の形態１にかかるプロセッサのブロック図である。
【図２】実施の形態１にかかるレジスタファイルのブロック図である。
【図３】実施の形態１にかかるレジスタファイルに含まれるレジスタエレメントの入出力ポートを示す図である。
【図４】実施の形態１にかかるレジスタファイルに含まれるレジスタエレメントのブロック図である。
【図５】レジスタエレメントのシフト動作に関する動作論理表である。
【図６】レジスタシフト命令の一例を示す図である。
【図７】実施の形態１における非整列データ・ブロックの読み出し処理を示すフローチャートである。
【図８】本発明の実施の形態における非整列データ・ブロックの読み出し処理と従来の処理とを対比するための図である。
【図９】従来の非整列データのロード命令を説明するための図である。
【図１０】従来の非整列データ・ブロックのロード処理を説明するための図である。
【符号の説明】
【００４９】
１  プロセッサ
１０  命令バッファ
１１  命令デコード部
１２  制御部
１３  レジスタファイル
１４  命令実行部
４０  レジスタ
４１  シフト回路
４２〜４４  セレクタ
４５  ＯＲ回路
５０  命令メモリ
５１  データメモリ
１３０  書き込みコマンド生成回路
１３１  読み出しデータ選択回路
１３２  ＡＮＤ回路
ＲＥ＿＃０〜ＲＥ＿＃３１  レジスタエレメント
【図１】
0005068597.tif 000002
【図２】
0005068597.tif 000003
【図３】
0005068597.tif 000004
【図４】
0005068597.tif 000005
【図５】
0005068597.tif 000006
【図６】
0005068597.tif 000007
【図７】
0005068597.tif 000008
【図８】
0005068597.tif 000009
【図９】
0005068597.tif 000010
【図１０】
0005068597.tif 000011