(57)【要約】データ処理装置及びレジスタ・ファイルとメモリとの間でデータ値を転送する方法が提供される。データ処理装置は、データ値に対してデータ処理演算を実行するように働くデータ処理ユニットと、データ処理ユニットによってアクセスするデータ値をストアするように働く複数のレジスタを有するレジスタ・ファイルとを含む。データ処理ユニットは、単一転送命令に応答して、レジスタ・ファイルのレジスタの対応する複数のものとメモリ中の連続したデータ値アドレスとの間で複数のデータ値の転送を実行する。単一転送命令は、そこから連続したデータ値アドレスを取り出すアドレス識別子を提供し、データ値の転送の各々に対して、複数のレジスタのうちのそのデータ値の転送の対象であるレジスタを指定するレジスタ識別子を提供する。更に、データ値の転送の各々に関するレジスタ識別子は、データ値の転送の他のものに関して指定されるレジスタ識別子とは独立して指定可能であり、従って、この単一転送命令の使用に大幅な柔軟性を付与する。
2006527436.tif 000002
【特許請求の範囲】
【請求項１】
データ処理装置であって、
データ値に対してデータ処理演算を実行するように働くデータ処理ユニットと、
前記データ処理ユニットによるアクセスのために前記データ値をストアするように働く複数のレジスタを有するレジスタ・ファイルと、
を含み、
該データ処理ユニットは、前記レジスタ・ファイルの前記レジスタの対応する複数のものとメモリ中の連続したデータ値アドレスとの間で複数のデータ値の転送を実行する単一転送命令に応答して、該単一転送命令はそこから前記連続したデータ値アドレスを取り出すアドレス識別子を提供し、更に前記データ値の転送の各々に対して前記複数のレジスタ中でそのデータ値の転送の対象となるレジスタを指定するレジスタ識別子を提供し、前記データ値の転送の各々に関する前記レジスタ識別子は前記データ値の転送の他のものに関して指定されるレジスタ識別子とは独立的に指定可能である、前記データ処理装置。
【請求項２】
請求項１に記載のデータ処理装置であって、前記単一転送命令はロード命令であり、データ処理ユニットは、ロード命令に応答して前記メモリ中の連続したデータ値アドレスから前記レジスタ・ファイルの前記レジスタの前記対応する複数のものに前記複数のデータ値の転送を実行する、前記データ処理装置。
【請求項３】
請求項１に記載のデータ処理装置であって、前記単一転送命令はストア命令であり、データ処理ユニットは、ストア命令に応答して前記レジスタ・ファイルの前記レジスタの前記対応する複数のものから前記メモリ中の連続したデータ値アドレスに前記複数のデータ値の転送を実行する、前記データ処理装置。
【請求項４】
請求項１から３のいずれかに記載のデータ処理装置であって、アドレス識別子はベース・アドレスとオフセット値とを含んでいる、前記データ処理装置。
【請求項５】
請求項４に記載のデータ処理装置であって、該ベース・アドレスは、前記複数のレジスタのうちのベース・アドレスをストアするようにアレンジされた１つを指定するベース・アドレス識別子によって単一転送命令内で指定される、前記データ処理装置。
【請求項６】
請求項４または請求項５に記載のデータ処理装置であって、該オフセット値は、前記複数のレジスタのうちのオフセット値をストアするようにアレンジされた１つを指定するオフセット・レジスタ識別子によって単一転送命令内で指定される、前記データ処理装置。
【請求項７】
請求項４または請求項５に記載のデータ処理装置であって、該オフセット値は、単一転送命令内で与えられる直接的な値によって指定される、前記データ処理装置。
【請求項８】
請求項１から７のいずれかに記載のデータ処理装置であって、該データ処理装置は、該単一転送命令に応答して２つのデータ値の転送を実行する、前記データ処理装置。
【請求項９】
請求項１から８のいずれかに記載のデータ処理装置であって、前記データ値の各々は３２ビットのデータ・ワードを含み、前記連続したデータ値アドレスは、メモリ中で隣接する一連の３２ビット・ワードに関するアドレスを指定する、前記データ処理装置。
【請求項１０】
請求項１から９のいずれかに記載のデータ処理装置であって、更に、前記複数のデータ値の並列的な転送を容易にするインタフェースを前記レジスタ・ファイルと前記メモリとの間の含む、前記データ処理装置。
【請求項１１】
データ処理装置を稼動させて、レジスタ・ファイルとメモリとの間でデータ値の転送を行わせる方法であって、レジスタ・ファイルは、前記データ値に対してデータ処理演算を実行するように働くデータ処理ユニットによってアクセスするために前記データ値をストアするように働く複数のレジスタを有しており、前記方法は、
単一転送命令に応答して、前記レジスタ・ファイルの前記レジスタの対応する複数のものとメモリ中の連続したデータ値アドレスとの間で複数のデータ値の転送を実行する工程と、
単一転送命令によって提供されるアドレス識別子から前記連続したデータ値アドレスを取り出す工程と、
前記データ値の転送の各々について、前記単一転送命令によって提供される対応するレジスタ識別子を参照しながら、前記複数のレジスタ中のそのデータ値の転送の対象であるレジスタを決定する工程であって、ここで、前記データ値の転送の各々に関するレジスタ識別子は、前記データ値の転送の他のものに関して指定されるレジスタ識別子とは独立的に指定可能である前記工程と、及び
複数のデータ値の転送を実行する工程と、
によって実行する前記方法。
【請求項１２】
請求項１１に記載の方法であって、前記単一転送命令はロード命令であり、該ロード命令に応答して、前記方法は、前記メモリ中の連続したデータ値アドレスから前記レジスタ・ファイルの前記レジスタの前記対応する複数のものに前記複数のデータ値の転送を実行する前記方法。
【請求項１３】
請求項１１に記載の方法であって、前記単一転送命令はストア命令であり、ストア命令に応答して、前記方法は、前記レジスタ・ファイルの前記レジスタの前記対応する複数のものから前記メモリ中の連続したデータ値アドレスに前記複数のデータ値の転送を実行する前記方法。
【請求項１４】
請求項１１から１３のいずれかに記載の方法であって、該アドレス識別子は、ベース・アドレスとオフセット値とを含んでいる前記方法。
【請求項１５】
請求項１４に記載の方法であって、該ベース・アドレスは、前記複数のレジスタのうちのベース・アドレスをストアするようにアレンジされた１つを指定するベース・アドレス識別子によって単一転送命令内で指定される前記方法。
【請求項１６】
請求項１４または請求項１５に記載の方法であって、該オフセット値は、前記複数のレジスタのうちのオフセット値をストアするようにアレンジされた１つを指定するオフセット・レジスタ識別子によって単一転送命令内で指定される前記方法。
【請求項１７】
請求項１４または請求項１５に記載の方法であって、該オフセット値は、該単一転送命令内で与えられる直接的な値によって指定される前記方法。
【請求項１８】
請求項１１から１７のいずれかに記載の方法であって、該単一転送命令に応答して、前記方法は２つのデータ値の転送を実行する前記方法。
【請求項１９】
請求項１１から１８のいずれかに記載の方法であって、前記データ値の各々は、３２ビットのデータ・ワードを含み、また、前記連続したデータ値アドレスは、メモリ中で隣接する一連の３２ビット・ワードに関するアドレスを指定する前記方法。
【請求項２０】
請求項１１から１９のいずれかに記載の方法であって、前記レジスタ・ファイルと前記メモリとの間の前記複数のデータ値の転送は、並列的に実行される前記方法。
【請求項２１】
データ値に対してデータ処理演算を実行するように働くデータ処理ユニットと、データ処理ユニットによってアクセスする前記データ値をストアするように働く複数のレジスタを有するレジスタ・ファイルとを有するデータ処理装置上で実行可能なコンピュータ・プログラムを有するコンピュータ・プログラム製品であって、該コンピュータ・プログラムは、単一転送命令であって、データ処理装置上で実行されたときに、
該単一転送命令によって提供されるアドレス識別子から前記連続したデータ値アドレスを取り出す工程と、
前記単一転送命令によって提供される対応するレジスタ識別子を参照することによって前記データ値の転送の各々に関して複数のレジスタ中のそのデータ値の転送の対象となるレジスタを決定する工程であって、ここで前記データ値の転送の各々に関するレジスタ識別子は、前記データ値の転送の他のものに関して指定されるレジスタ識別子とは独立的に指定できるようになっている工程と、及び
複数のデータ値の転送を実行する工程と、
によって、前記レジスタ・ファイルの前記レジスタの対応する複数のものとメモリ中の連続したデータ値アドレスとの間で複数のデータ値の転送を生じるように働く前記単一転送命令を含んでいる前記コンピュータ・プログラム製品。
【請求項２２】
請求項２１に記載のコンピュータ・プログラム製品であって、前記単一転送命令はロード命令であり、それは、データ処理装置上で実行されたとき、前記メモリ中の連続したデータ値アドレスから前記レジスタ・ファイルの前記レジスタの前記対応する複数のものに前記複数のデータ値の転送を実行させるように働く前記コンピュータ・プログラム製品。
【請求項２３】
請求項２１に記載のコンピュータ・プログラム製品であって、前記単一転送命令はストア命令であり、それは、データ処理装置上で実行されたとき、前記レジスタ・ファイルの前記レジスタの前記対応する複数のものから前記メモリ中の連続したデータ値アドレスに前記複数のデータ値の転送を実行させるように働く前記コンピュータ・プログラム製品。
【請求項２４】
請求項２１から２３のいずれかに記載のコンピュータ・プログラム製品であって、該アドレス識別子は、ベース・アドレスとオフセット値とを含んでいる前記コンピュータ・プログラム製品。
【請求項２５】
請求項２４に記載のコンピュータ・プログラム製品であって、該ベース・アドレスは、前記複数のレジスタのうちのベース・アドレスをストアするようにアレンジされた１つを指定するベース・アドレス識別子によって該単一転送命令内で指定される前記コンピュータ・プログラム製品。
【請求項２６】
請求項２４または請求項２５に記載のコンピュータ・プログラム製品であって、該オフセット値は、前記複数のレジスタのうちのオフセット値をストアするようにアレンジされた１つを指定するオフセット・レジスタ識別子によって該単一転送命令内で指定される前記コンピュータ・プログラム製品。
【請求項２７】
請求項２４または請求項２５に記載のコンピュータ・プログラム製品であって、該オフセット値は、該単一転送命令内で与えられる直接的な値によって指定される前記コンピュータ・プログラム製品。
【請求項２８】
請求項２１から２７のいずれかに記載のコンピュータ・プログラム製品であって、該単一転送命令がデータ処理装置上で実行されるとき、２つのデータ値の転送が実行される前記コンピュータ・プログラム製品。
【請求項２９】
請求項２１から２８のいずれかに記載のコンピュータ・プログラム製品であって、前記データ値の各々は３２ビットのデータ・ワードを含み、また、前記連続したデータ値アドレスは、該メモリ中で隣接する一連の３２ビット・ワードに関するアドレスを指定する前記コンピュータ・プログラム製品。
【請求項３０】
請求項２１から２９のいずれかに記載のコンピュータ・プログラム製品であって、前記レジスタ・ファイルと前記メモリとの間の前記複数のデータ値の転送は、並列的に実行される前記コンピュータ・プログラム製品。
【請求項３１】
データ処理装置を請求項１１から２０のいずれかに記載の方法を実行するように構成するように働くコンピュータ・プログラム。
【請求項３２】
請求項３１に記載のコンピュータ・プログラムを含むキャリア・メディア。
【発明の詳細な説明】
【技術分野】
【０００１】
（発明の分野）
本発明は、データ処理装置と、レジスタ・ファイルとメモリとの間でデータ値を転送する方法とに関する。
【背景技術】
【０００２】
（発明の背景）
データ処理装置は、一般的に、データ値に対してデータ処理演算を実行するように働くデータ処理ユニットを有する。データ処理ユニットは、それらのデータ処理演算を実行する間にデータ処理ユニットによって要求されるデータ値をストアするように働く複数のレジスタを有するレジスタ・ファイルにアクセスする。従って、それらのデータ処理演算を実行するためにデータ処理ユニットによって実行される命令は、一般に、それらのデータ処理演算のオペランドとして使用されるデータ値を含むレジスタ・ファイル内のレジスタを指定する。
【０００３】
レジスタ・ファイルは、データ処理ユニットに対してデータ値への迅速なアクセスを提供するが、しかし比較的小型であるため、データ処理ユニットによって必要とされるデータ値のすべてを保持することができない。このことから、一般に、データ値をより長期間蓄えるためにメモリ・システムが設けられ、データ値は、レジスタ・ファイルとメモリ・システムとの間で必要に応じて転送されるようになっている。この方式により、データ処理ユニットによって最早必要とされないデータ値をレジスタ・ファイルからメモリにストアすることができるし、必要なときにメモリからレジスタ・ファイルにロードすべきデータ値については、そうすることでデータ処理ユニットが利用できるようになる。データ値をレジスタ・ファイルにロードする典型的なロード命令は、次のように表される。
【０００４】
ＬＤＲ  ＲＸ，［ＲＺ，＃ＯＦＦＳＥＴ］
【０００５】
レジスタＲＺは、ベース・アドレスを含み、そのベース・アドレスに対してオフセット値が加算されて必要なデータ値を含むメモリ・アドレスが生成されるようにアレンジされている。ロード命令が実行されると、そのアドレスにあるデータ値は、メモリから取り出されて、レジスタ・ファイルのレジスタＲＸに書き込まれる。
【０００６】
典型的なストア命令は、次のように表される。
【０００７】
ＳＴＲ  ＲＸ，［ＲＺ，＃ＯＦＦＳＥＴ］
【０００８】
前と同じように、関連するメモリ・アドレスは、レジスタＲＺに記憶されているデータ値にオフセット値を加えることで与えられるが、この場合には、レジスタＲＸに記憶されているデータ値は、メモリ中のそのメモリ・アドレスに書き込まれる。
【０００９】
データ処理装置上で実行される典型的なプログラムにおいて、そのようなロード及びストア命令の数は、非常に多いこと、そして、事実、例えば、３２ビットのロードまたはストアを用いて６４ビットの「長、長」または「２倍長」精度のデータ型にアクセスする場合や、隣接する構造フィールドにアクセスする場合のように、そのようなロードまたはストア命令の複数のものがコード・シーケンスの中で連続して現れ、隣接する記憶場所にアクセスしようとすることが普通に起こることが理解されよう。例えば、次のような２つのロード命令のシーケンスが発生する。
【００１０】
ＬＤＲ  ＲＸ，［ＲＺ，＃ＯＦＦＳＥＴ］
ＬＤＲ  ＲＹ，［ＲＺ，＃ＯＦＦＳＥＴ±ＩＮＣＲ］
【００１１】
両ロード命令で、同じベース・アドレスが使用されるが、２番目のロード命令では、オフセット値は、各々のデータ値のバイト数に等しいバイト数だけ増分または減分される。例えば、データ値が３２ビットのデータ値、すなわち４バイト長であれば、１番目のロード命令に関するオフセットは０であるが、２番目のロード命令に関するオフセットは、この場合、＋／−４となる。
【００１２】
処理速度を改善するために、データ処理装置の最近のアーキテクチャは、各クロック・サイクルにおいて２つ以上のレジスタへのアクセスを許容するために、レジスタ・ファイルに対して複数の読み出し及び／または複数の書き込みポートを設けるようになっている。これを活用するために、特定の状況で、２つ以上の逐次的なロードまたはストア命令を単一の命令で置き換えることを許容する新しい命令が開発された。１つの例は、ＡＲＭ社によって設計されたマイクロ・プロセッサで利用できる多重ロード命令であり、それは、次のように表される。
【００１３】
ＬＤＭＩＡ  ＲＺ，｛ＲＸ，ＲＹ｝
制約：  １）ＲＹ＞ＲＸ
２）ベース・オフセットは、０から始まる
【００１４】
上の例は、先に記述した２つのロード命令を単一の多重ロード命令で置き換えようとするものである。この命令は、レジスタＲＸに対してレジスタＲＺの内容によって指定される記憶場所にあるデータ値を書き込ませ、次に、レジスタＲＹに対してレジスタＲＺの内容にデータ値のサイズに等しい増分値を加えた値で指定される記憶場所に記憶されているデータ値を書き込ませる。これによって、連続したメモリ・アドレスからの２つのデータ値がレジスタＲＸとレジスタＲＹにストアされる。
【００１５】
ＬＤＭＩＡ命令は、ここで説明したような２つのロード演算の実行に限られない。ロード演算の目的レジスタは、ビット・マスクによって指定され、それによって、例えば、レジスタ・ファイルが１６個のレジスタを含んでいれば、ビット・マスクは、１６ビット・フィールドの命令として提供することができ、ビット・マスクの各ビットを対応するレジスタに関連付けることができる。レジスタＲＸがレジスタ０で、レジスタＲＹがレジスタ２であると仮定すると、ＬＤＭＩＡ命令の上の例に関するビット・マスクは、次のようになる。
【００１６】
2006527436.tif 000003
【００１７】
この例で、値「１」は、データ値をロードすべきレジスタを指定し、値「０」は、データ値をロードすべきでないレジスタを指定すると想定している。
【００１８】
このＬＤＭＩＡ命令は、単一命令の結果として複数のレジスタにロードを行う可能性を持つが、それの使用に関しては、多くの制限も存在する。第一に、ビット・マスクは、使用されるレジスタ番号の順序を問題にする。第１のアドレスにあるデータ値は、ビット・マスクによって目的レジスタとして指定された第１のレジスタにロードされ、次に続くアドレスからのデータ値は、ビット・マスクによって目的レジスタとして指定された次のレジスタにロードされる、等々となる。従って、この単一命令は、ともに増加するアドレスと増加する目的レジスタを指定する場合にメモリ・アクセスを結合させるためにしか使用できない。従って、２つのＬＤＲ命令についての先の例を取り上げると、レジスタＲＸがレジスタ０でレジスタＲＹがレジスタ２であれば、この命令は、オフセットが増加するものであれば利用できる可能性を有する。しかし、レジスタＲＸがレジスタ２で、レジスタＲＹがレジスタ０であれば、この命令は使用できない。
【００１９】
更に、ビット・マスクは、命令を記述するために利用できるビット空間のかなりの量を消費するため、命令内部にオフセットを指定するために利用できる十分な空きがなくなり、従って、このこともＬＤＭＩＡ命令が使用できるケースの数を制限する。従って、２つのＬＤＲ命令シーケンスの先に述べた例を取り上げると、第１のＬＤＲ命令に関するオフセットがゼロであれば、ＬＤＭＩＡ命令は、使用可能であるが、第１のオフセットがゼロでなければ、ＬＤＭＩＡ命令は、一般には使用できない。
【００２０】
ＬＤＭＩＡ命令に加えて、レジスタ・ファイルからメモリへ複数のデータ値をストアするための対応するＳＴＭＩＡ命令が用意されている。しかし、全く同じ制約が課される。ＬＤＭＩＡ及びＳＴＭＩＡ命令に付随する制約のいくつかを緩和するために、ＡＲＭ社によって設計されたマイクロ・プロセッサで使用できるロード及びストア・レジスタ・ペア命令が開発された。レジスタ・ペア・ロード命令は、次のように表される。
【００２１】
ＬＤＲＤ  ＲＸ，［ＲＺ，＃ＯＦＦＳＥＴ］
制約：  １）ＲＸ、ＲＸ＋１のロードのみ可能、すなわちＹ＝Ｘ＋１（そしてＲＸは、偶数番号）
２）ベース＋オフセットは、８バイト整列しなければならない。
【００２２】
この命令は、データ値を２つのレジスタにロードすることができ、先に述べた単一レジスタ・ロード（ＬＤＲ）命令と同様のオフセット・フィールドを有する。この命令は、レジスタＲＺの内容にオフセットを加えることによって与えられるアドレスにあるメモリ中のデータ値をレジスタＲＸにロードする。それは、次に、隣接する、すなわち、引き続くデータ値アドレスにあるデータ値をレジスタＲＸ＋１にロードする。更に、この命令は、２つの別々の単一データ・ワードまたは１つの倍長データ・ワードをストアできるように、レジスタ・ファイルが対構成のレジスタを含むようなシステムで使用するために設計されたため、それは、レジスタＲＸが偶数番号レジスタ、すなわち、レジスタ０、レジスタ２、レジスタ４、等である場合にだけ使用することができ、ベース・アドレスをオフセットに加えることによって与えられるアドレス値は、メモリ中で８バイト境界に整列するように調整される必要がある。
【００２３】
このＬＤＲＤ命令は、ハードウエアが適切にアレンジされることを想定したハードウエアでは、良好な性能を発揮するが、上で述べた制約のせいで、そのような命令を常に活用できるソフトウエアを書くことは、容易でない。
【００２４】
ＳＴＲＤ命令と呼ばれる同様のレジスタ・ペア・ストア命令も提供できるが、これもＬＤＲＤ命令と全く同じ制約を受ける。
【発明の開示】
【発明が解決しようとする課題】
【００２５】
以上の議論から、複数のロードまたはストアを単一の命令で指定できるようにする上述の２つの方法は、各々の転送に対して指定されるべき厳しい制約をレジスタに対して与えることが明らかとなった。特に、最初の転送に対するレジスタの選択が、後続の転送に関する利用可能な選択肢を制限する。例えば、ＬＤＭＩＡ命令について考えると、ビット・マスクに指定された第１のレジスタがレジスタ４であるとき、次の転送は、レジスタＲ０からＲ４のいずれにも実行できず、その代わりに、より高位のレジスタ番号を有するレジスタに対して行われなければならない。更に、ＬＤＲＤについて考えると、第１のレジスタには、どのレジスタを指定しても構わないが、次の転送に使用するレジスタは、偶数／奇数番号レジスタ対のうちの隣接レジスタである。
【００２６】
従って、本発明の１つの目的は、既知の方法に付随する制約のいくつかを緩和しつつ、レジスタ・ファイルとメモリとの間で多重転送を実行する単一命令に対してデータ処理装置を応答させる方法を提供することである。
【課題を解決するための手段】
【００２７】
（発明の概要）
第１の態様から眺めれば、本発明は、データ値に対してデータ処理演算を実行するように働くデータ処理ユニットと、データ処理ユニットによってアクセスするために前記データ値をストアするように働く複数のレジスタを有するレジスタ・ファイルとを含むデータ処理装置であって、データ処理ユニットは、前記レジスタ・ファイルの前記レジスタの対応する複数のものと、メモリ中の連続したデータ値アドレスとの間で複数のデータ値の転送を実行させる単一転送命令に応答するようになっており、単一転送命令は、そこから前記連続したデータ値アドレスを取り出すアドレス識別子を提供し、更に、前記データ値の転送の各々に対して前記複数のレジスタ中でそのデータ値の転送の対象となるレジスタを指定するレジスタ識別子を提供するようになっており、前記データ値の転送の各々に関する前記レジスタ識別子は、前記データ値の転送の他のものに関して指定されるレジスタ識別子とは独立的に指定可能である、データ処理装置を提供することである。
【００２８】
本発明に従えば、単一転送命令が定義され、それは、データ処理ユニット上で実行されるとき、レジスタ・ファイルのレジスタの複数のものとメモリ中の連続したデータ値アドレスとの間で複数のデータ値の転送を実行させる。単一転送命令は、そこから連続したデータ値アドレスが取り出されるアドレス識別子を提供する。典型的には、アドレス識別子は、そこからデータ値アドレスの１つ、例えば、第１の転送に付随するデータ値アドレスを取り出す情報を提供し、連続するデータ値アドレスの任意のものは、そのアドレスをデータ値のサイズまたはそれの倍数だけ増分または減分することによってそのデータ値アドレスから導出することができる。
【００２９】
単一転送命令は、更に、データ値の転送の各々に対して、複数のレジスタ中でそのデータ値の転送の対象となるレジスタを指定するレジスタ識別子を提供する。更に、データ値の転送の各々に対するレジスタ識別子は、データ値の転送の他のものに対して指定されるレジスタ識別子とは独立して指定可能である。このことは、単一転送命令の使用に関して大きな柔軟性を付与し、それに伴って、各々が１つのデータ値を転送するために使用される個別的命令の生成の多くのものをこの新しい単一転送命令で置き換えることを可能とする。
【００３０】
特に、この新しい単一転送命令を先に述べたＬＤＭＩＡ命令と比較するとき、レジスタ番号が引き続いて実行される転送の各々について増大しなければならないという制限は、ここでは存在しないことが分かる。更に、先に述べたＬＤＲＤ命令と比較するとき、転送が２つの隣接するレジスタに対して発生する必要もなく、第１のレジスタが偶数番号のレジスタでなければならないということもない。結果として、各々が単一のデータ値を転送する一連の命令をこの新しい単一転送命令の１つまたは複数のもので置き換えることに関して非常に広い適用の場が存在することが明らかである。
【００３１】
転送は、レジスタからメモリへまたはメモリからレジスタへのいずれかで発生することは明らかであろう。従って、１つの実施の形態では、単一転送命令は、ロード命令であり、データ処理ユニットは、ロード命令に応答して、前記メモリの連続したデータ値アドレスから前記レジスタ・ファイルの前記レジスタの前記対応する複数のものへの前記複数のデータ値の転送を実行する。この方式によって、メモリからレジスタへの複数のデータ値のロードは、単一のロード命令によって起動することができ、それにより、コード・サイズが改善され、ハードウエアが複数のデータ値を並列的にレジスタにロードすることを許容していると仮定した場合、ハードウエアの性能を改善できる。
【００３２】
１つの実施の形態では、レジスタからメモリへの転送を実行するために、この単一転送命令は、ストア命令であり、データ処理ユニットは、このストア命令に応答して、前記レジスタ・ファイルの前記レジスタの前記対応する複数のものから前記メモリ中の連続したデータ値アドレスへの前記複数のデータ値の転送を実行する。従って、このことは、レジスタからメモリへの複数のデータ値の転送を単一のストア命令によって指定することを可能とし、従って、ここでも、ハードウエアが２つ以上のデータ値をレジスタ・ファイルからメモリに並列的に出力することを許容すると仮定して、ハードウエアの性能向上を容易にするとともに、コード・サイズを縮小する。
【００３３】
アドレス識別子は、多様な形態を取ることができることは理解されよう。しかし、１つの実施の形態では、アドレス識別子は、ベース・アドレスとオフセット値とを含む。オフセット値の提供を許すことによって、先に述べたビット・マスクによって占有される命令内部の利用可能空間のせいで、オフセットの指定ができないＬＤＭＩＡ命令よりも、この単一転送命令が大幅に増えた柔軟性を提供することが理解されよう。従って、先のＬＤＭＩＡ命令とは、対照的に、シーケンス中の第１の転送のために必要とされるアドレスを直接的に指定するためにベース・アドレスを使用する必要はなくなる。ベース・アドレスは、典型的には、レジスタのうちの１つレジスタの内容によって提供されるため、このことは、多重転送を実行できる前に、そのレジスタの内容を更新する必要性を減ずることになる。更に、先に述べたＬＤＲＤ命令とは対照的に、アドレスを８バイトに調整する必要もない。実際に、本発明の１つの実施の形態では、この新しい単一転送命令から決まるアドレスは、データ値のサイズの任意の倍数でよく、従って、データ値のサイズが３２ビットであれば、アドレスは４バイトの任意の倍数でよい。
【００３４】
１つの実施の形態では、ベース・アドレスは、単一転送命令の中で、前記複数のレジスタのうちそのベース・アドレスをストアするようにアレンジされた１つを指定するベース・アドレス・レジスタ識別子によって指定される。典型的には、命令自身の中には、ベース・アドレスを直接的に指定する十分な空間はなく、従って、この方式は、ベース・アドレスを指定するために、命令内部に必要とされる空間量を減ずる。
【００３５】
１つの実施の形態では、オフセット値は、単一転送命令の中で、前記複数のレジスタのうちそのオフセット値をストアするようにアレンジされた１つを指定するオフセット・レジスタ識別子によって指定される。しかし、オフセット値は、一般に、ベース・アドレスよりもずっと小さい値であるため、命令自身の中にオフセットを直接的に指定するために十分な空間が見出せることがしばしばあり、そのため、代替の実施の形態では、オフセット値は、単一転送命令内部に提供される直接的な値によって指定される。オフセット値を直接的な値で提供することによって、オフセット値を決めるためのレジスタ検索の必要性が回避されることで、命令実行の効率を改善することができる。更に、オフセット値をレジスタにロードする付加的な命令が不要となることからコード・サイズは、縮小する。
【００３６】
単一転送命令によって実行される複数のデータ値の転送の数は、その命令内部において各転送のレジスタ識別子を指定するのに利用できる空間に依存することは理解されよう。１つの実施の形態では、データ処理ユニットは、単一転送命令に応答して２つのデータ値の転送を実行する。１つの特別な例では、単一転送命令は、３２ビット命令であり、そのような状況では、２つのレジスタ識別子を指定し、従って、単一転送命令中に２つの転送を定義できる十分な空間が利用できることが見出される。しかし、命令を指定するために利用できるビット数が増大するにつれて、命令内部で指定されるレジスタ識別子の数は増え、従って、単一転送命令によって非常に多数の複数のデータ値の転送を定義することが可能となることは理解されよう。別のやり方として、または、これに加えて、ビット数が増えればより大きいオフセット値を指定できる。
【００３７】
データ値は、任意の予め決められたサイズのものでよいことは理解されよう。典型的には、各々のデータ値は、レジスタ・ファイル中の各レジスタと同じサイズでよく、従って、例えば、各レジスタが３２ビット長であれば、データ値は、典型的には、３２ビットのデータ値となろう。しかし、データ値は、必要ならば、レジスタのサイズよりも実際には、短くすることもできることが理解されよう。１つの実施の形態では、各データ値は、３２ビットのデータ・ワードを含み、前記連続したデータ値アドレスは、メモリ中の隣接する３２ビットのデータ・ワード列に対するアドレスを指定する。
【００３８】
単一転送命令を使用することで、ソフトウエアのコード・サイズを直接的に縮小できる一方で、複数のデータ値を並列的に転送できるハードウエアを仮定すれば、ハードウエア上でそのソフトウエアを実行するとき、必要な転送演算の実行性能も改善できる。従って、１つの実施の形態では、データ処理装置は、更に、前記レジスタ・ファイルと前記メモリとの間に前記複数のデータ値の並列的な転送の実行を促進するインタフェースを含む。
【００３９】
当業者には、明らかなように、「インタフェース」は、一般に、データ処理装置内部に他の論理ユニットが存在することや、メモリが、一般に、１つまたは複数のキャッシュ層、ランダム・アクセス・メモリ（ＲＡＭ）層等を含む多重レベルのメモリ・システムであるという事実のせいで、レジスタ・ファイルとメモリとの間の単一の接続経路よりもずっと複雑である。しかし、レジスタ・ファイルとメモリとの間で、レジスタ・ファイルとメモリとをつなぐ各種の相互接続経路を介して２つ以上のデータ値を並列的に転送できるのであれば、これは、顕著な性能上の利益達成につながる。例えば、レジスタ・ファイル用に２つの書き込みポートと２つの読み出しポートとを備えたハードウエア構成によって、このことは、２つのデータ値をレジスタ・ファイルにロードすることまたは２つのデータ値をレジスタ・ファイルからメモリにストアすることを、さもなければ単にデータ値１つをロードまたはストアするために必要とされるのと同じクロック・サイクル数で可能とする能力を有する。典型的には、メモリとしてキャッシュを使用すれば、このことは１サイクルを要する。
【００４０】
第２の態様から眺めた場合、本発明は、データ処理装置を稼動させて、レジスタ・ファイルとメモリとの間でデータ値の転送を行わせる方法を提供する。ここで、レジスタ・ファイルは、前記データ値に対してデータ処理演算を実行するように働くデータ処理ユニットによってアクセスするための前記データ値をストアするように働く複数のレジスタを有する。本方法は、単一転送命令に応答して、前記レジスタ・ファイルの前記レジスタの対応する複数のものとメモリ中の連続したデータ値アドレスとの間で複数のデータ値の転送を、単一転送命令によって提供されるアドレス識別子から前記連続したデータ値アドレスを取り出す工程と、前記データ値の転送の各々について、前記単一転送命令によって提供される対応するレジスタ識別子を参照しながら、前記複数のレジスタ中のそのデータ値の転送の対象であるレジスタを決定する工程であって、ここで、前記データ値の転送の各々に対するレジスタ識別子は、前記データ値の転送の他のものに対して指定されるレジスタ識別子とは、独立的に指定可能である工程と、及び複数のデータ値の転送を実行する工程とによって実行する。
【００４１】
上述の方法の工程の各々によって定義される処理の一定部分は、並列的に実行できることから、例えば、各々のデータ値の転送の対象レジスタが決まる前に、そしてデータ値の転送のいずれかが開始される前に、連続したデータ値アドレスのすべてを取り出す必要はないことが理解されよう。その代わり、例えば、次の転送のデータ値アドレス及びレジスタを決めている間に第１のデータ値の転送を実行できる。
【００４２】
第３の態様から眺めた場合、本発明は、データ値に対してデータ処理演算を実行するように働くデータ処理ユニットと、データ処理ユニットによってアクセスするための前記データ値をストアするように働く複数のレジスタを有するレジスタ・ファイルとを有するデータ処理装置上で実行可能なコンピュータ・プログラムを有するコンピュータ・プログラム製品を提供する。このコンピュータ・プログラムは、単一転送命令であって、データ処理装置上で実行されたときに、単一転送命令によって提供されるアドレス識別子から前記連続したデータ値アドレスを取り出す工程と、前記単一転送命令によって提供される対応するレジスタ識別子を参照することによって前記データ値の転送の各々に関して複数のレジスタ中のそのデータ値の転送の対象となるレジスタを決定する工程であって、前記データ値の転送の各々に対するレジスタ識別子は、前記データ値の転送の他のものに対して指定されるレジスタ識別子とは、独立的に指定できるようになった前記工程と、及び複数のデータ値の転送を実行する工程とによって、前記レジスタ・ファイルの前記レジスタの対応する複数のものとメモリ中の連続したデータ値アドレスとの間で複数のデータ値の転送を行わせるように働く単一転送命令を含んでいる。
【００４３】
本発明は、これ以降、一例として、添付図面に図示された好適な実施の形態を参照しながら説明することにする。
【実施例】
【００４４】
（好適な実施の形態の説明）
図１は、本発明に従うデータ処理装置の模式的ブロック図である。この例で、データ処理装置は、その中にデータ処理ユニット２０とレジスタ・ファイル４０とを含むプロセッサ・コア１０の形をしている。レジスタ・ファイルは、複数のレジスタ５０のほかに、書き込み及び読み出しポートなどそれらのレジスタにアクセスするために必要な各種のその他の論理回路を含む。当業者には理解されるように、データ処理ユニットは、その中に複数の機能的論理ユニット、例えば、演算論理ユニット（ＡＬＵ）、浮動小数点ユニット（ＦＰＵ）、ロード・ストア・ユニット（ＬＳＵ）３０等々を含むのが一般的である。ＬＳＵ３０は、レジスタ・ファイル４０のレジスタ５０とデータ・メモリ６０との間でのデータ値の転送制御を担当する、データ処理ユニット２０の一部であり、従って、本発明の好適な実施の形態の単一転送命令を実行するようにアレンジされるものは、このＬＳＵ３０である。
【００４５】
データ処理ユニット２０が命令を実行するとき、それは、典型的には、経路２４を介してレジスタ５０からデータ値を取り出し、また、経路２２を介してレジスタ５０にデータ値を書き戻す。本発明の１つの実施の形態では、レジスタは、３２ビットのレジスタで、データ値は、３２ビットのデータ値であり、これは、ここでは、３２ビットのデータ・ワードとも呼ばれる。
【００４６】
ＬＳＵ３０が単一転送命令を実行するとき、それは、経路２４を介してレジスタ５０から特定のデータ、例えば、ベース・アドレスを取り出して、次に、典型的には、１つまたは複数のアドレスを経路３２を介してデータ・メモリ６０に出力し、転送操作に含まれるメモリ・アドレスを指定する。後にもっと詳細に説明するが、各種の転送操作の対象となるレジスタを指定する各種の制御信号もＬＳＵ３０からレジスタ・ファイル４０に送られるのが普通である。単一転送命令がロード命令である場合、それは、データ・メモリ６０から経路３４を介してレジスタ・ファイル４０の関連するレジスタ５０へのデータ転送をもたらすが、他方、単一転送命令がストア命令のときは、それは、レジスタ・ファイル４０の関連するレジスタ５０から経路３６を介してデータ・メモリ６０へのデータ転送をもたらす。
【００４７】
図２は、レジスタ・ファイル４０に対して１つの書き込みポートと１つの読み出しポートとを備えた例示的なハードウエア構成において、図１に関して説明した各種要素間の信号の流れを示すブロック図である。２つのロード転送を実行させるために使用される、本発明の好適な実施の形態の単一ロード命令は、次のように表される。
【００４８】
ＬＤＲＤＮＥＷ  ＲＸ，ＲＹ，［ＲＺ，＃ＯＦＦＳＥＴ］
【００４９】
この命令を図２の装置に対して実行することについて、ここで図４を参照しながら説明する。
【００５０】
図２に示されたように、命令７０は、ＬＳＵ３０に送られ、それは、工程２００において、復号されて、各種のレジスタ値ＲＸ、ＲＹ、ＲＺ及び、この実施の形態では、ＬＤＲＤＮＥＷ命令の中に直接的な値として提供されるオフセット値を指定する。次に、工程２０５で、制御信号が経路１００を介してレジスタ・ファイル４０に送られ、レジスタＲＺに対するレジスタ・ファイルからの読み出しを実行させる。この結果、ベース・アドレスが経路１１０を介してＬＳＵ３０に戻される。
【００５１】
その後、工程２１０では、レジスタＲＺの内容、すなわち、ベース・アドレスがオフセット値に加えられて、第１の転送のアドレスが生成される。第１の転送のアドレスを指定するためのベース・アドレスとオフセットとの組合せが本質的なことではないことは理解されよう。それは、これらのアドレスの一方が一旦決まれば、他方のアドレスは、そのアドレスからワード・サイズを増分または減分することで簡単に指定できるからである。しかし、第１の転送のアドレスを指定するためにベース・アドレスとオフセットとを組み合わせることは、より効率的であると考えられている。
【００５２】
工程２１０で、一旦、アドレスが計算されれば、処理は、工程２１５に進み、そこで、アドレスは、経路１２０を介してデータ・メモリ６０に出力され、更に、制御信号も経路１３０を介してメモリ６０に出力されて、メモリに対して、提供されたアドレスからデータ値を読み出すことがメモリに要求されていることを指示する。
【００５３】
メモリは、読み出し処理を完了するのに複数のサイクルを費やし、そのあとで、（その記憶場所に有効なデータ値が存在したと仮定して）、そのデータ値は、経路１４０を介してレジスタ・ファイル４０にアサートされる。その後、工程２２０では、メモリが読み出し処理を完了したかどうかが判断され、そうであれば、処理は工程２２５に進んで、そこでは、ＬＳＵ３０は、レジスタ・ファイルに対してメモリから経路１４０を介して受信したデータ・ワードをレジスタＲＸに書き込ませる制御信号を経路１００を介してレジスタ・ファイルに出力するようにアレンジされている。経路１４０及び実際には、対応する書き込み経路１５０は、データ・メモリ６０とレジスタ・ファイル４０との間の単一の相互接続ラインとして示されているが、当業者には、明らかなように、データ・メモリ６０とレジスタ・ファイル４０との間の相互接続は、データ処理装置内部にその他の論理ユニットが存在することや、メモリが一般に多重レベルのメモリ・システムであることから、典型的には、単一の接続経路よりもずっと複雑である。図２の単一の経路１４０は、単に、データ・メモリ６０からレジスタ・ファイル４０へ、特別な１つのクロック・サイクルの間に１つのデータ値が転送できることを示すことを意図しており、同様に、図２の単一の書き込み経路１５０は、レジスタ・ファイル４０からデータ・メモリ６０へ、特別な１つのクロック・サイクルの間に１つのデータ値が書き込みできることを示すことを意図している。
【００５４】
受信したデータ値が一旦レジスタＲＸに書き込まれてしまえば、処理は工程２３０に進んで、そこでは、連続したデータ値アドレス、すなわち、第１の転送のために使用されたものに隣接するデータ値アドレスを生成するためにアドレスがワード・サイズだけ増分される。先に述べたように、この段階でアドレスを増分するように命令を符号化することは、本質的なことではなく、別の実施の形態では、その代わりに、次のアドレスを指定するために、工程２３０でアドレスをワード・サイズだけ増分するようにアレンジしてもよい。
【００５５】
工程２３０で、ＬＳＵ３０によって、一旦、新しいアドレスが決定されれば、そのアドレスは、次に、工程２３５で、経路１３０を介して送られる読み出し制御信号と一緒に経路１２０を介してデータ・メモリ６０に出力され、それによってデータ・メモリに対して指定された記憶場所からデータ値を読み出させる。次に、工程２４０で、メモリが読み出し処理を完了したと判断されれば、ＬＳＵ３０は、次に、工程２４５で、経路１００を介してレジスタ・ファイルに制御信号を出力して、レジスタ・ファイルに対して経路１４０を介してメモリから受信したデータ・ワードをレジスタＲＹに書き込ませるようにアレンジされている。このあと、処理は工程２５０で終了する。
【００５６】
図６を参照しながらここで説明するように、本発明の好適な実施の形態の、次のように表される単一ストア命令についても同様な処理が実行できる。
【００５７】
ＳＴＲＤＮＥＷ  ＲＸ，ＲＹ，［ＲＺ，＃ＯＦＦＳＥＴ］
【００５８】
図６と図４の比較から分かるように、図６の工程４００から４１０は、図４の工程２００から２１０に対応する。工程４１５では、アドレスが経路１２０を介してデータ・メモリ６０に出力され、書き込み制御信号も経路１３０を介して出力される。更に、工程４２０では、ＬＳＵ３０は、レジスタ・ファイルに対して制御信号を出力して、レジスタ・ファイル４０に対してレジスタＲＸ中のデータ・ワードを経路１５０を介してメモリに出力させるようにアレンジされている。工程４１５から４２０は、並列的に実行できることは理解されよう。工程４２５で、メモリが書き込み処理を完了したかどうか（すなわち、レジスタ・ファイル４０から受信したデータ値を、ＬＳＵ３０によって指定される記憶場所に書き込んだかどうか）が判断される。このことは、典型的には、メモリ６０から制御経路１３０を介してＬＳＵ３０に戻される信号によって示される。メモリが書き込み処理を完了したときは、処理は工程４３０に進み、そこで、ＬＳＵ３０は、アドレスをワード・サイズだけ増分するようにアレンジされている。そのあと、工程４３５では、アドレスは経路１２０を介して出力され、それと一緒に、対応する書き込み制御信号も経路１３０を介して出力される。更に、工程４４０で、ＬＳＵ３０は経路１００を介してレジスタ・ファイル４０に制御信号を出力して、レジスタ・ファイルに対してレジスタＲＹ中のデータ・ワードを経路１５０を介してメモリに出力させる。そのあと、工程４４５で、メモリが書き込み処理を完了したかどうかが判断され、そのあとで、処理は工程４５０で終了する。
【００５９】
図４及び６に関する上の議論から明らかなように、ＬＤＲＤＮＥＷ、ＳＴＲＤＮＥＷ命令を使用することは、先に議論したように、単一転送命令を介して多重転送を実行しようと努める先に述べた従来技術の方法のどれよりもより頻繁に利用できるため、そうでなければ必要であったコード・サイズの縮小という点で利益をもたらす一方で、それが図２に示された装置に実施されたときは、図２の装置がレジスタ・ファイル４０とメモリ６０との間の並列的な多重転送をサポートしていないために性能の点で顕著な利益をもたらしそうもない。ＬＳＵ３０はパイプライン方式にアレンジすることもでき、そうすれば２つのロードまたはストア演算は、一般に、２サイクルで発生し、１つのデータ転送は、一般に、レジスタ・ファイルとキャッシュとの間で発生する場合には、１サイクルで行われることになろう。
【００６０】
しかし、図３の装置を使用すれば、顕著な付加的利益が実現できる。図３と図２との比較から明らかなように、装置は、基本的には、同じであるが、２つの読み出し経路１４０、１４５が備えられ、２つの書き込み経路１５０、１５５が備えられている点が異なる。このことから、図３の例では、レジスタ・ファイル４０は、２つの読み出しポートと２つの書き込みポートとを備えることで、２つのレジスタに２つのデータ値を並列的にロードすることが可能となり、また、レジスタ・ファイル４０の２つのレジスタ中にあるデータ値を並列的にメモリに出力できることになる。
【００６１】
図５は、図３の装置に対してＬＤＲＤＮＥＷ命令を実行するときに、ＬＳＵ３０によって実行される処理を示すフロー図である。図５を図４と比べると、図５の工程３００から３１０が図４の工程２００から２１０に対応することが分かる。しかし、工程３１０のあと、処理は工程３１５に進んで、そこで、アドレスが経路１２０を介してデータ・メモリ６０に出力され、それとともに、メモリに対して、ここでは、データ・ワードとも呼ばれる２つの連続したデータ値を読み出すように命令する読み出し制御信号が経路１３０を介して送り出される。好適な実施の形態では、メモリにとっては、与えられたアドレスから第１のデータ・ワードを、また、増分させたアドレスから第２のデータ・ワードを読み出すべきであることは明白である。
【００６２】
次に、処理は工程３２０に進み、そこで、メモリが両ワードに関する読み出しを完了したかどうかが判断される。このことは、データ・メモリ６０からＬＳＵ３０に経路１３０を介して戻される制御信号によって示される。両ワードに関する読み出しを完了していれば、次に、処理は工程３５５に進み、そこにおいて、ＬＳＵ３０は経路１００を介してレジスタ・ファイルに２つの制御信号を出力して、レジスタ・ファイルに対してメモリから第１の書き込みポートにおいて受信したデータ・ワードをレジスタＲＸに書き込ませ、メモリから第２の書き込みポートにおいて受信したデータ・ワードをレジスタＲＹに書き込ませる。その後、処理は工程３６０で終了する。この方式によって、顕著な性能上の利益が得られる。すなわち、そうでなければ１つのロード命令のために必要であった時間内に２つのロード演算が実行されることになるからである。
【００６３】
しかし、例えば、アドレスが８バイト整合しているときにだけ１クロック・サイクルの間に２つのワードを読み出せるという理由や、または、その特別なクロック・サイクルの間に両方のデータ・ワードを読み出す時間がないという理由で、メモリが特別な１クロック・サイクルの間に２つのワードを読み出せないこともある。従って、両ワードを読み出せなかった場合についても考慮しておく必要がある。
【００６４】
すなわち、工程３２０でメモリが両ワードの読み出しを完了していないと判断されれば、工程３２２ではメモリが第１のデータ・ワードの読み出しを完了しているかどうかが判断される。ここでも、このことはデータ・メモリ６０から経路１３０を介してＬＳＵ３０に戻される制御信号によって示される。
【００６５】
工程３２２で、メモリが第１のデータ・ワードの読み出しを完了していると判断されれば、処理は工程３２５に進んで、ＬＳＵ３０は経路１００を介してレジスタ・ファイル４０に制御信号を出力して、レジスタ・ファイルに対してメモリから受信したデータ・ワードをレジスタＲＸに書き込ませる。そのあと、工程３３０から３５０は、図４の工程２３０から２５０と類似しており、その結果、第２のデータ・ワードがレジスタＲＹにロードされる。
【００６６】
図４と図５との比較から明らかなように、図３の装置に対してＬＤＲＤＮＥＷ命令が実行されるときは、メモリが同じクロック・サイクルの間に両ワードの読み出しを完了できる場合は、常に、動作性能の向上が得られ、それによって、両ワードは、工程３５５において並列的にレジスタにロードできる（すなわち、２サイクルから１サイクルへ短縮できる）。更に、工程３２２から３４５を提供することによって、メモリが同じクロック・サイクルの間に両ワードの読み出しを完了できない状況についても対応できる。
【００６７】
図７は、図６のフロー図と似ているが、図３の装置に対してＳＴＲＤＮＥＷ命令を実行した状況に対するものである。図７の工程５００から５１０は、図６の工程４００から４１０と類似している。しかし、工程５１５では、ＬＳＵ３０によって、第１のデータ・ワードを指定されたアドレスに、第２のデータ・ワードを第１のアドレスにデータ・ワード・サイズを加算することで決まる増分されたアドレスにというように２つの連続したデータ・ワードをメモリに書き込むように命令する制御信号と一緒にアドレスがメモリ６０に出力される。
【００６８】
更に、工程５２０で、ＬＳＵ３０は経路１００を介してレジスタ・ファイル４０に２つの制御信号を出力して、レジスタ・ファイルに対してレジスタＲＸ中のデータ・ワードを第１の読み出しポートから出力させ、レジスタＲＹ中のデータ・ワードを第２の読み出しポートから出力させるようにアレンジされている。この結果、２つのデータ・ワードは、それぞれ、経路１５０、１５５を介してデータ・メモリ６０に出力される。工程５１５および５２０を並列的に実行できることは理解されよう。
【００６９】
工程５２５では、メモリが両ワードの書き込みを完了したかどうかが判断され、このことは、経路１３０を介してＬＳＵ３０に戻される制御信号によって示される。そうであれば、次に、処理は直接工程５５５に進んで、処理は終了する。そうでなければ、工程５３０で、メモリが第１のワードの書き込みを完了したかどうかが判断され、そうでなければ、処理は工程５２５に戻る。
【００７０】
しかし、工程５３０で、メモリが第１のワードの書き込みは完了したが、第２のワードについては、そうでないと判断されれば、処理は工程５３５に進み、そこでＬＳＵはアドレスをワード・サイズだけ増分するようにアレンジされている。そのあと、工程５４０から５５５は、図６の工程４３５から４５０に類似して、その結果、第２のデータ・ワードがメモリに書き込まれる。
【００７１】
図７と図６の比較から明らかなように、図３のものと同じような装置に対してＳＴＲＤＮＥＷ命令が実行されるとき、メモリが同じクロック・サイクルの間に両ワードの書き込みを完了できる状況では、顕著な動作性能の向上が実現する（すなわち、典型的には、メモリとしてキャッシュが使用された場合に、２サイクルから１サイクルへの短縮）。
【００７２】
図８Ａから図８Ｅは、単一ロード命令を置換する候補となる、各々が１つのデータ・ワードの転送を引き起こす２つの別々のロード命令の例を示しており、特に、先に説明した既知のＬＤＭＩＡ及びＬＤＲＤ命令と比べた場合の、好適な実施の形態のＬＤＲＤＮＥＷ命令によって得られる付加的な柔軟性について示している。
【００７３】
図８Ａから分かるように、図８Ａに示した２つのＬＤＲ命令は、１つのＬＤＭＩＡ命令、１つのＬＤＲＤ命令または本発明の好適な実施の形態に従う１つのＬＤＲＤＮＥＷ命令で置き換えることができる。ＬＤＭＩＡ命令については、２つのロード動作に関してレジスタ番号が増加し、元のオフセットがゼロの場合にのみこのことが可能である。ＬＤＲＤ命令については、２つのロード命令が偶数−奇数番号対のレジスタに対して行われる場合のみ可能である。
【００７４】
図８Ｂから分かるように、２つのＬＤＲ命令のこのシーケンスは、ＬＤＭＩＡ命令では表現できない。それは、元のオフセットがゼロでなく、ＬＤＭＩＡ命令がゼロでないオフセットを指定できないからである。しかし、それでもＬＤＲＤ命令は、使用できる。これは、２つのＬＤＲ命令が偶数−奇数番号対のレジスタに対して行われるからである。これに加えて、ＬＤＲＤＮＥＷ命令も使用できる。
【００７５】
図８Ｃに示すように、ＬＤＭＩＡ命令が使用できるのは、各転送に関してレジスタ番号が増加し、元のオフセットがゼロである場合である。しかし、ＬＤＲＤ命令は、転送が偶数−奇数番号対のレジスタに対してではないため使用できない。しかし、ＬＤＲＤＮＥＷ命令は、それがＬＤＲＤ命令に課された制約の対象ではないため使用できる。
【００７６】
図８Ｄに示されたように、ＬＤＲ命令のこの特別な対をＬＤＭＩＡ命令によって表すことはできない。それは、ロード間でレジスタ番号が増加しないことと、元のオフセットがゼロでないことのためである。更に、ＬＤＲＤ命令は、レジスタが偶数−奇数番号レジスタ対に関連するものではないため使用できない。しかし、それでも、ＬＤＲＤＮＥＷ命令は、それがＬＤＭＩＡやＬＤＲＤ命令に課された制約の対象ではないため使用できる。
【００７７】
図８Ｅに示されたように、ここでも２つのＬＤＲ命令のこの特別なシーケンスを表すことができるのは、ＬＤＲＤＮＥＷ命令のみである。ＬＤＭＩＡ命令は、元のオフセットがゼロでないため使用できないし、それに加えて、ＬＤＲＤ命令は、ベース・アドレスをオフセットに加算して得られるアドレスがＬＤＲＤ命令に必要な８バイト整列という条件を満たしていないため使用できない。しかし、ＬＤＲＤＮＥＷ命令は、好適な実施の形態では、この命令はアドレスが４バイトの倍数であることだけを要求することから使用できる。
【００７８】
従って、図８Ａから図８Ｅから明らかなように、本発明の好適な実施の形態のＬＤＲＤＮＥＷ命令は、既知の従来技術の多重転送命令よりもはるかに柔軟性に富んでおり、従って、任意の与えられたコード片においてコード密度及び性能上の利益をより頻繁に実現できることが理解されよう。ストア命令についても、ＳＴＲＤＮＥＷ命令が既知のＳＴＭＩＡまたはＳＴＲＤ命令よりもより柔軟であることを示す同様な例の組を提供できることが理解されよう。
【００７９】
先に述べたように、本発明の１つの実施の形態では、ＬＤＲＤＮＥＷ命令及びＳＴＲＤＮＥＷ命令は、オフセット値を８ビット長に制限している。１つの実施の形態において、アドレスも４バイトの倍数であることが要求される場合には、このことはオフセット値に４を乗ずることを意味し、従って、実効的に１０ビットのオフセットを与えることになる。
【００８０】
図９は、１つの特別な実施の形態において、３２ビット命令であるＬＤＲＤＮＥＷ、ＳＴＲＤＮＥＷ命令の符号化形式を示す。左側（１１−１５）の最初の５ビットは上位デコード・ビットであり、続く３ビット（第１のハーフ・ワードの１０、９及び６ビット）は命令がＬＤＲＤ／ＳＴＲＤであることを示し、ＰＵＷＬビットは、ベース・アドレスでスタートするかまたはベース・アドレスにオフセットを加えるか（Ｐ）、オフセットをベース・アドレスに加えるかまたは減ずるか（Ｕ）、それは、ロードであるかまたはストアであるか（Ｌ）、及び、修正したアドレスを元のレジスタに書き戻すかどうか（Ｗ）を指定する。明らかに、残りの２０ビットは、ベース・アドレスを含むレジスタ（Ｒｂａｓｅ）、オフセット値（ｉｍｍ８）及び転送に関係する２つのレジスタ（Ｒｘｆ、Ｒｘｆ２）を指定するために使用される。
【００８１】
以上の説明から分かるように、本発明の好適な実施の形態のＬＤＲＤＮＥＷ及びＳＴＲＤＮＥＷ命令は、既知の多重転送命令に比べて優れた利益を提供する。これらは、新しい命令の優れた柔軟性のために、既知の従来技術で一般に可能であったよりも、より頻繁に利用することができ、既知の従来技術の命令で可能であったものよりも優れたコード密度及び性能の向上を可能とする。
【００８２】
特別な実施の形態について説明してきたが、本発明がそれらに限定されないこと及びそれらに対して多くの修正や追加が本発明の範囲内で可能であることが理解されよう。例えば、本発明のスコープから外れることなく、独立項の特徴と特許請求の範囲の特徴との各種組合せを実施することができる。
【図面の簡単な説明】
【００８３】
【図１】本発明の１つの実施の形態に使用されるデータ処理装置の関連部品を模式的に示すブロック図。
【図２】本発明の１つの実施の形態に従うデータ処理装置の部品間での信号の流れを示すブロック図。
【図３】本発明の別の実施の形態に従うデータ処理装置の部品間での信号の流れを模式的に示すブロック図。
【図４】図２の装置に対する、本発明の１つの実施の形態のロード命令の実行を示すフロー図。
【図５】図３の装置に対する、本発明の１つの実施の形態のロード命令の実行を示すフロー図。
【図６】図２の装置に対する、本発明の１つの実施の形態のストア命令の実行を示すフロー図。
【図７】図３の装置に対する、本発明の１つの実施の形態のストア命令の実行を示すフロー図。
【図８】ＡからＥは、２つの標準的なロード命令の例示的シーケンスであって、それらのロード命令を本発明の実施の形態の単一ロード命令によってどのように置き換えられるかを示して、それらが既知の従来技術のロード命令によって置き換えられるかどうかを示す図。
【図９】本発明の１つの実施の形態の単一ロードまたはストア命令のエンコーディングを模式的に示す図。
【図１】
2006527436.tif 000004
【図２】
2006527436.tif 000005
【図３】
2006527436.tif 000006
【図４】
2006527436.tif 000007
【図５】
2006527436.tif 000008
【図６】
2006527436.tif 000009
【図７】
2006527436.tif 000010
【図８】
2006527436.tif 000011
【図９】
2006527436.tif 000012
【手続補正書】
【提出日】平成18年8月8日(2006.8.8)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
データ処理装置であって、
データ値に対してデータ処理演算を実行するように働くデータ処理ユニットと、
前記データ処理ユニットによるアクセスのために前記データ値をストアするように働く複数のレジスタを有するレジスタ・ファイルと、
を含み、
該データ処理ユニットは、前記レジスタ・ファイルの前記レジスタの対応する複数のものとメモリ中の連続したデータ値アドレスとの間で複数のデータ値の転送を実行する単一転送命令に応答して、該単一転送命令はそこから前記連続したデータ値アドレスを取り出すアドレス識別子を提供し、更に前記データ値の転送の各々に対して前記複数のレジスタ中でそのデータ値の転送の対象となるレジスタを指定するレジスタ識別子を提供し、前記データ値の転送の各々に関する前記レジスタ識別子は前記データ値の転送の他のものに関して指定されるレジスタ識別子とは独立的に指定可能である、前記データ処理装置。
【請求項２】
請求項１に記載のデータ処理装置であって、前記単一転送命令はロード命令であり、データ処理ユニットは、ロード命令に応答して前記メモリ中の連続したデータ値アドレスから前記レジスタ・ファイルの前記レジスタの前記対応する複数のものに前記複数のデータ値の転送を実行する、前記データ処理装置。
【請求項３】
請求項１に記載のデータ処理装置であって、前記単一転送命令はストア命令であり、データ処理ユニットは、ストア命令に応答して前記レジスタ・ファイルの前記レジスタの前記対応する複数のものから前記メモリ中の連続したデータ値アドレスに前記複数のデータ値の転送を実行する、前記データ処理装置。
【請求項４】
請求項１から３のいずれかに記載のデータ処理装置であって、アドレス識別子はベース・アドレスとオフセット値とを含んでいる、前記データ処理装置。
【請求項５】
請求項４に記載のデータ処理装置であって、該ベース・アドレスは、前記複数のレジスタのうちのベース・アドレスをストアするようにアレンジされた１つを指定するベース・アドレス識別子によって単一転送命令内で指定される、前記データ処理装置。
【請求項６】
請求項４または請求項５に記載のデータ処理装置であって、該オフセット値は、前記複数のレジスタのうちのオフセット値をストアするようにアレンジされた１つを指定するオフセット・レジスタ識別子によって単一転送命令内で指定される、前記データ処理装置。
【請求項７】
請求項４または請求項５に記載のデータ処理装置であって、該オフセット値は、単一転送命令内で与えられる直接的な値によって指定される、前記データ処理装置。
【請求項８】
請求項１から７のいずれかに記載のデータ処理装置であって、該データ処理装置は、該単一転送命令に応答して２つのデータ値の転送を実行する、前記データ処理装置。
【請求項９】
請求項１から８のいずれかに記載のデータ処理装置であって、前記データ値の各々は３２ビットのデータ・ワードを含み、前記連続したデータ値アドレスは、メモリ中で隣接する一連の３２ビット・ワードに関するアドレスを指定する、前記データ処理装置。
【請求項１０】
請求項１から９のいずれかに記載のデータ処理装置であって、更に、前記複数のデータ値の並列的な転送を容易にするインタフェースを前記レジスタ・ファイルと前記メモリとの間に含む、前記データ処理装置。
【請求項１１】
データ処理装置を稼動させて、レジスタ・ファイルとメモリとの間でデータ値の転送を行わせる方法であって、レジスタ・ファイルは、前記データ値に対してデータ処理演算を実行するように働くデータ処理ユニットによってアクセスするために前記データ値をストアするように働く複数のレジスタを有しており、前記方法は、
単一転送命令に応答して、前記レジスタ・ファイルの前記レジスタの対応する複数のものとメモリ中の連続したデータ値アドレスとの間で複数のデータ値の転送を実行する工程を、
単一転送命令によって提供されるアドレス識別子から前記連続したデータ値アドレスを取り出す工程と、
前記データ値の転送の各々について、前記単一転送命令によって提供される対応するレジスタ識別子を参照しながら、前記複数のレジスタ中のそのデータ値の転送の対象であるレジスタを決定する工程であって、ここで、前記データ値の転送の各々に関するレジスタ識別子は、前記データ値の転送の他のものに関して指定されるレジスタ識別子とは独立的に指定可能である前記工程と、
複数のデータ値の転送を実行する工程と
によって実行する前記方法。
【請求項１２】
請求項１１に記載の方法であって、前記単一転送命令はロード命令であり、該ロード命令に応答して、前記方法は、前記メモリ中の連続したデータ値アドレスから前記レジスタ・ファイルの前記レジスタの前記対応する複数のものに前記複数のデータ値の転送を実行する前記方法。
【請求項１３】
請求項１１に記載の方法であって、前記単一転送命令はストア命令であり、ストア命令に応答して、前記方法は、前記レジスタ・ファイルの前記レジスタの前記対応する複数のものから前記メモリ中の連続したデータ値アドレスに前記複数のデータ値の転送を実行する前記方法。
【請求項１４】
請求項１１から１３のいずれかに記載の方法であって、該アドレス識別子は、ベース・アドレスとオフセット値とを含んでいる前記方法。
【請求項１５】
請求項１４に記載の方法であって、該ベース・アドレスは、前記複数のレジスタのうちのベース・アドレスをストアするようにアレンジされた１つを指定するベース・アドレス識別子によって単一転送命令内で指定される前記方法。
【請求項１６】
請求項１４または請求項１５に記載の方法であって、該オフセット値は、前記複数のレジスタのうちのオフセット値をストアするようにアレンジされた１つを指定するオフセット・レジスタ識別子によって単一転送命令内で指定される前記方法。
【請求項１７】
請求項１４または請求項１５に記載の方法であって、該オフセット値は、該単一転送命令内で与えられる直接的な値によって指定される前記方法。
【請求項１８】
請求項１１から１７のいずれかに記載の方法であって、該単一転送命令に応答して、前記方法は２つのデータ値の転送を実行する前記方法。
【請求項１９】
請求項１１から１８のいずれかに記載の方法であって、前記データ値の各々は、３２ビットのデータ・ワードを含み、また、前記連続したデータ値アドレスは、メモリ中で隣接する一連の３２ビット・ワードに関するアドレスを指定する前記方法。
【請求項２０】
請求項１１から１９のいずれかに記載の方法であって、前記レジスタ・ファイルと前記メモリとの間の前記複数のデータ値の転送は、並列的に実行される前記方法。
【請求項２１】
データ値に対してデータ処理演算を実行するように働くデータ処理ユニットと、データ処理ユニットによってアクセスする前記データ値をストアするように働く複数のレジスタを有するレジスタ・ファイルとを有するデータ処理装置上で実行可能なコンピュータ・プログラムを有するコンピュータ・プログラム製品であって、該コンピュータ・プログラムは、単一転送命令であって、データ処理装置上で実行されたときに、
該単一転送命令によって提供されるアドレス識別子から前記連続したデータ値アドレスを取り出す工程と、
前記単一転送命令によって提供される対応するレジスタ識別子を参照することによって前記データ値の転送の各々に関して複数のレジスタ中のそのデータ値の転送の対象となるレジスタを決定する工程であって、ここで前記データ値の転送の各々に関するレジスタ識別子は、前記データ値の転送の他のものに関して指定されるレジスタ識別子とは独立的に指定できるようになっている工程と、
複数のデータ値の転送を実行する工程と
によって、前記レジスタ・ファイルの前記レジスタの対応する複数のものとメモリ中の連続したデータ値アドレスとの間で複数のデータ値の転送を生じるように働く前記単一転送命令を含んでいる前記コンピュータ・プログラム製品。
【請求項２２】
請求項２１に記載のコンピュータ・プログラム製品であって、前記単一転送命令はロード命令であり、それは、データ処理装置上で実行されたとき、前記メモリ中の連続したデータ値アドレスから前記レジスタ・ファイルの前記レジスタの前記対応する複数のものに前記複数のデータ値の転送を実行させるように働く前記コンピュータ・プログラム製品。
【請求項２３】
請求項２１に記載のコンピュータ・プログラム製品であって、前記単一転送命令はストア命令であり、それは、データ処理装置上で実行されたとき、前記レジスタ・ファイルの前記レジスタの前記対応する複数のものから前記メモリ中の連続したデータ値アドレスに前記複数のデータ値の転送を実行させるように働く前記コンピュータ・プログラム製品。
【請求項２４】
請求項２１から２３のいずれかに記載のコンピュータ・プログラム製品であって、該アドレス識別子は、ベース・アドレスとオフセット値とを含んでいる前記コンピュータ・プログラム製品。
【請求項２５】
請求項２４に記載のコンピュータ・プログラム製品であって、該ベース・アドレスは、前記複数のレジスタのうちのベース・アドレスをストアするようにアレンジされた１つを指定するベース・アドレス識別子によって該単一転送命令内で指定される前記コンピュータ・プログラム製品。
【請求項２６】
請求項２４または請求項２５に記載のコンピュータ・プログラム製品であって、該オフセット値は、前記複数のレジスタのうちのオフセット値をストアするようにアレンジされた１つを指定するオフセット・レジスタ識別子によって該単一転送命令内で指定される前記コンピュータ・プログラム製品。
【請求項２７】
請求項２４または請求項２５に記載のコンピュータ・プログラム製品であって、該オフセット値は、該単一転送命令内で与えられる直接的な値によって指定される前記コンピュータ・プログラム製品。
【請求項２８】
請求項２１から２７のいずれかに記載のコンピュータ・プログラム製品であって、該単一転送命令がデータ処理装置上で実行されるとき、２つのデータ値の転送が実行される前記コンピュータ・プログラム製品。
【請求項２９】
請求項２１から２８のいずれかに記載のコンピュータ・プログラム製品であって、前記データ値の各々は３２ビットのデータ・ワードを含み、また、前記連続したデータ値アドレスは、該メモリ中で隣接する一連の３２ビット・ワードに関するアドレスを指定する前記コンピュータ・プログラム製品。
【請求項３０】
請求項２１から２９のいずれかに記載のコンピュータ・プログラム製品であって、前記レジスタ・ファイルと前記メモリとの間の前記複数のデータ値の転送は、並列的に実行される前記コンピュータ・プログラム製品。
【請求項３１】
データ処理装置を請求項１１から２０のいずれかに記載の方法を実行するように構成するように働くコンピュータ・プログラム。
【請求項３２】
請求項３１に記載のコンピュータ・プログラムを含むキャリア・メディア。
【国際調査報告】
2006527436.tif 000013
2006527436.tif 000014