(57)【要約】【課題】並べ替えのパターンデータを記憶するための記憶領域を有効活用可能とする。【解決手段】複数の汎用レジスタを含む汎用レジスタファイル１７は、並列演算用のデータを格納する。複数のパターンレジスタ２２は、データの並べ替えを示す複数のパターンデータをバイト単位、ハーフワード単位、ワード単位、又はこれらの組合せにより記憶する。データ選択回路２１は、命令に含まれる指示データに従って複数のパターンレジスタ２２に記憶されたパターンデータのうちの１つを選択する。並べ替え回路２０は、データ選択回路２１により選択されたパターンデータに従って並列演算用のデータを並べ替える。【選択図】      図１
2008108220.tif 000002
【特許請求の範囲】
【請求項１】
並列演算用のデータを格納する複数の汎用レジスタと、
前記データの並べ替えを示す複数のパターンデータを、最小のビット幅の単位、最小のビット幅の２倍のビット幅の単位、最小単位のｎ倍（但し、ｎは２のべき乗の数字）のビット幅の単位のうちの１つ、又はこれらの組み合わせにより記憶する複数のパターンレジスタと、
命令に含まれる指示データに従って前記複数のパターンレジスタに記憶された複数のパターンデータのうちの１つを選択する選択回路と、
前記選択回路により選択されたパターンデータに従って前記並列演算用のデータを並べ替える並べ替え回路と
を具備することを特徴とする演算装置。
【請求項２】
前記選択回路は、前記並列演算用データの並べ替えを行う最小のビット幅の単位で並べ替える場合はパターンレジスタ全体を選択し、最小単位の２倍のビット幅の単位で並べ替える場合はパターンレジスタを２分割したいずれかの領域を選択し、最小単位のｎ倍（但し、ｎは２のべき乗の数字）のビット幅の単位で並べ替える場合はパターンレジスタをｎ分割又はｎ以上の領域に分割したいずれかの領域を選択することを特徴とする請求項１記載の演算装置。
【請求項３】
前記複数の汎用レジスタは、前記パターンレジスタとして使用されることを特徴とする請求項１記載の演算装置。
【請求項４】
前記並べ替え回路の前段に配置された並列演算器をさらに具備し、１つの命令で前記並列演算器によるデータの並列演算と、前記並べ替え回路による演算結果の並べ替えを行うこと、又は、前記並べ替え回路の後段に配置された並列演算器をさらに具備し、１つの命令で前記並べ替え回路によるデータの並べ替えと、前記並列演算器による並べ替えられたデータの並列演算を行うことを特徴とする請求項１記載の演算装置。
【請求項５】
前記並べ替え回路は、並べ替えられたデータを処理する処理回路を含むことを特徴とする請求項１又は４に記載の演算装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算装置に係り、特に、ＳＩＭＤ（Single-Instruction/Multiple-Data）演算を行うことが可能な演算装置に関する。
【背景技術】
【０００２】
１つの命令で複数のデータを並列に演算することが可能なＳＩＭＤ演算を行う場合、メモリから読み出したデータを並列に演算可能となるよう、データの並べ替えという手順を必要とする。このデータの並べ替えに複数サイクルを費やしてしまうと、ＳＩＭＤ演算器が演算を行っていない時間が増加し、ＳＩＭＤ演算器が本来持っている性能を十分発揮することができない。
【０００３】
ＳＩＭＤ演算を行うことが可能なプロセッサは、演算命令だけでなく、データを並べ替える命令も同時に実装されていることが多い。しかし、予め用意されている命令は、命令数の制限から単純なパターンに限定されてしまう。このため、そのパターンに当てはまらない複雑な並べ換えを行う場合、多くのサイクル数を費やすことになってしまう。
【０００４】
例えば６４ビット（８バイト）の汎用レジスタ＄１、＄２に、それぞれ次に示すようにデータが記憶されている場合において、これら２つのレジスタのデータを交互にマージして、汎用レジスタ＄０に示すように記憶させる動作を実行する場合、プログラム（１）に示すように、例えば１２個の命令を実行する必要がある。
【０００５】
＄１：Ｄ１０、Ｄ１１、Ｄ１２、Ｄ１３
＄２：Ｄ２０、Ｄ２１、Ｄ２２、Ｄ２３
＄０：Ｄ１０、Ｄ２０、Ｄ１１、Ｄ２１
命令           // 汎用レジスタの内容
1  SRL.H $3,$1,3   // $3={  0,   0,   0, D10}   $1を3HW右論理シフト、$3に格納
2  SLL.H $3,$3,3   // $3={D10,   0,   0,   0}   $3を3HW左論理シフト、$3に格納
3  SLL.H $4,$1,1   // $4={D11, D12, D13,   0}   $1を1HW左論理シフト、$4に格納
4  SRL.H $4,$4,3   // $4={  0,   0,   0, D11}   $4を3HW右論理シフト、$4に格納
5  SLL.H $4,$4,1   // $4={  0,   0, D11,   0}   $4を1HW左論理シフト、$4に格納
6  SRL.H $5,$2,3   // $5={  0,   0,   0, D21}   $2を3HW右論理シフト、$5に格納
7  SLL.H $5,$5,2   // $5={  0, D20,   0,   0}   $5を2HW左論理シフト、$5に格納
8  SLL.H $6,$2,1   // $6={D21, D22, D23,   0}   $2を1HW左論理シフト、$6に格納
9  SRL.H $6,$6,3   // $6={  0,   0,   0, D21}   $6を3HW右論理シフト、$6に格納
10  OR.H  $0,$3,$4  // $0={D10,   0, D11,   0}   $3,$4のORを、$0に格納
11  OR.H  $0,$0,$5  // $0={D10, D20, D11,   0}   $0,$5のORを、$0に格納
12  OR.H  $0,$0,$6  // $0={D10, D20, D11, D21}   $0,$6のORを、$0に格納
…（１）
上記並べ替え結果を用いてＳＩＭＤ演算を行うとすると、１３命令に一度しかＳＩＭＤ演算を行うことができない。したがって、ＳＩＭＤ演算による並列度の向上が十分に生かされない。
【０００６】
このため、複数の並べ替え命令を実装するということも考えられる（例えば特許文献１参照）。しかし、複数の並べ替え命令を実装した場合、命令をデコードするデコード回路の面積が増大し、実行タイミングのマージンが小さくなる。したがって、制御が厳しくなる。
【０００７】
一方、複雑な並べ替えパターンをリコンフィギャラブルアレイで実装するという技術もある。しかし、リコンフィギャラブルアレイは小規模の回路に適用する場合、チップに対する占有面積が大きいため、コストパフォーマンスが低いという問題がある。
【０００８】
また、複数の制御レジスタに並べ替えパラメータを記憶し、これらパラメータを制御ブロックで選択して並べ替え論理ブロック１２０に供給し、この並べ替えブロック１２０で、ベクトル・レジスタ・ファイル１１０のデータを並び替える技術が開発されている（例えば特許文献２参照）。
【０００９】
しかし、データの並べ替えの単位が大きくなった場合、並べ替えのパターンデータを記憶するレジスタの記憶領域が小さくなる。このように記憶領域が小さくなった場合、レジスタ内に未使用部分が発生し、レジスタの記憶領域を有効活用することができなかった。
【特許文献１】特開２００１−３４４０９９号公報
【特許文献２】特表２００６−５０４１６５号公報
【発明の開示】
【発明が解決しようとする課題】
【００１０】
本発明は、並べ替えのパターンデータを記憶するための記憶領域を有効活用することが可能な演算装置を提供しようとするものである。
【課題を解決するための手段】
【００１１】
本発明の演算装置の態様は、並列演算用のデータを格納する複数の汎用レジスタと、前記データの並べ替えを示す複数のパターンデータを、最小のビット幅の単位、最小のビット幅の２倍のビット幅の単位、最小単位のｎ倍（但し、ｎは２のべき乗の数字）のビット幅の単位のうちの１つ、又はこれらの組み合わせにより記憶する複数のパターンレジスタと、命令に含まれる指示データに従って前記複数のパターンレジスタに記憶された複数のパターンデータのうちの１つを選択する選択回路と、前記選択回路により選択されたパターンデータに従って前記並列演算用のデータを並べ替える並べ替え回路とを具備することを特徴とする。
【発明の効果】
【００１２】
本発明によれば、並べ替えのパターンデータを記憶するための記憶領域を有効活用することが可能な演算装置を提供できる。
【発明を実施するための最良の形態】
【００１３】
以下、図面を参照して本発明の実施の形態について説明する。
【００１４】
（第１の実施形態）
図１は、第１の実施形態に係るプロセッサ１１を示している。このプロセッサ１１は、例えば命令メモリ１２、命令フェッチユニット１３、命令デコードユニット１４を含むベースとなるプロセッサパイプライン１５と、ＳＩＭＤ演算器１６と、複数の汎用レジスタを含む汎用レジスタファイル１７と、メモリアクセスユニット１８と、データメモリ１９と、並べ替え回路２０と、パターン選択回路２１と、複数のパターンレジスタ２２と、セレクタ２３、２４を具備している。
【００１５】
前記命令メモリ１２は、複数の命令を記憶している。この命令は、後述するように、処理内容を示すオペランドコード、汎用レジスタを指示するためのソースレジスタ番号、デスティネーションレジスタ番号、及びパターンレジスタ番号等を含んでいる。命令フェッチユニット１３は、命令メモリ１２に接続され、図示せぬプログラムカウンタから出力されるアドレスに従って、命令メモリ１２から実行すべき命令を取り出す。命令デコードユニット１４は、命令フェッチユニット１３と、ＳＩＭＤ演算器１６と、汎用レジスタファイル１７と、メモリアクセスユニット１８と、並べ替え回路２０と、パターン選択回路２１と、複数のパターンレジスタ２２に接続されている。命令デコードユニット１４は、命令フェッチユニット１３から供給される命令をデコードし、デコード結果として処理内容を示すデータと、レジスタ番号と、並べ方のパターン番号を出力する。命令デコードユニット１４から出力される処理内容を示すデータは、ＳＩＭＤ演算器１６と、メモリアクセスユニット１８と、並べ替え回路２０に供給される。また、レジスタ番号は汎用レジスタファイル１７に供給され、パターン番号（レジスタ番号）はパターン選択回路２１、パターンレジスタ２２に供給される。
【００１６】
汎用レジスタファイル１７は、例えば６４ビット長（８バイト／４ハーフワード／２ワード）を有する例えば３２個の汎用レジスタにより構成され、並列演算用のデータや並べ替え用のパターンデータなどを格納する。汎用レジスタファイル１７は、ＳＩＭＤ演算器１６と、メモリアクセスユニット１８と、並べ替え回路２０に接続されている。汎用レジスタファイル１７は、命令デコードユニット１４からレジスタ番号が供給されると、レジスタ番号に対応するレジスタに格納されたデータをＳＩＭＤ演算器１６と、メモリアクセスユニット１８と、並べ替え回路２０に供給する。
【００１７】
メモリアクセスユニット１８は、データメモリ１９に接続され、前記処理内容を示すデータに従ってデータメモリ１９からデータを読み出したり、データメモリ１９にデータを書き込んだりする。データメモリ１９は、演算に必要なデータや後述するデータの並べ替えパターンを示すパターンデータ等が格納される。
【００１８】
パターンレジスタ２２は、例えば４個の３２ビット長のレジスタにより構成されている。パターンレジスタ２２は、複数のパターンデータを保持する。パターンレジスタ２２は、パターン選択回路２１に接続されている。パターン選択回路２１は、命令デコードユニット１４から供給されるパターン番号に従ってパターンレジスタ２１に保持されている並べ替えパターンデータを選択し、並べ替え回路２０に供給する。
【００１９】
並べ替え回路２０は、供給されたパターンデータに従って、汎用レジスタファイル１７から供給されたデータを並べ替える。並べ変え回路２０は、セレクタ２３の一方入力端に接続されている。このセレクタ２３の他方入力端は、ＳＩＭＤ演算器１６の出力端に接続されている。セレクタ２３の出力端は、セレクタ２４の一方入力端に接続されている。セレクタ２４の他方入力端は、メモリアクセスユニット１８の出力端に接続されている。セレクタ２４の出力端は汎用レジスタファイル１７に接続されている。前記ＳＩＭＤ演算器１６、メモリアクセスユニット１８、並べ変え回路２０の動作結果は、セレクタ２３、２４を介して汎用レジスタファイル１７に供給される。
【００２０】
図２（ａ）（ｂ）（ｃ）は、図１に示すプロセッサで実行されるデータ並べ替え命令のフォーマットを示している。各命令は、例えばオペレーションコード（ＯＰＣＯＤＥ）と、２つのソースレジスタ番号（ＳＲＣ１，ＳＲＣ２）と、１つのデスティネーションレジスタ番号（ＤＥＳＴ）と、パターンレジスタの番号（ＰＴ）５つのビットフィールドにより構成されている。
【００２１】
各命令において、ＭＡＳ．ｘ（ｘ＝Ｂ、又はＨ、又はＷ）は、並べ替え（ＭＡＳ：merge and sort）命令であることを示すオペレーションコードであり、Ｂはバイト単位、Ｈはハーフワード単位、Ｗはワード単位の並べ替えを示している。ＳＲＣ１、ＳＲＣ２は、２つのソースレジスタ番号であり、具体的には、汎用レジスタ番号である。ＤＥＳＴは、１つのデスティネーションレジスタ番号であり、具体的には、汎用レジスタ番号である。ＰＴは、並べ替えのパターンデータ指示する番号である。具体的には、並べ替えの最小単位であるバイト単位の場合、ＰＴはパターンレジスタの番号であり、最小単位の２倍のビット幅の単位であるハーフワード単位の場合、ＰＴはパターンレジスタを２分割した領域の番号である。さらに、最小単位のｎ倍（但し、ｎは２のべき乗の数字）のビット幅の単位であるワード単位の場合、ＰＴはパターンレジスタをｎ分割又はｎ以上の領域に分割したいずれかの領域の番号である。
【００２２】
図２（ａ）に示すバイト単位の並べ替えの場合、ＰＴは２ビットにより構成され、図２（ｂ）に示すハーフワード単位の並べ替えの場合、ＰＴは３ビットにより構成され、図２（ｃ）に示すワード単位の並べ替えの場合、ＰＴは５ビットにより構成されている。
【００２３】
図３（ａ）（ｂ）（ｃ）（ｄ）は、パターンレジスタ２２の構成と、パターンレジスタに登録されるパターンデータの形態を示している。パターンレジスタ２２には、予め図３（ａ）（ｂ）（ｃ）（ｄ）に示すような並べ替えパターンが登録される。パターンレジスタ２２に登録すべきパターンデータは、前述したようにデータメモリ１９に記憶されており、このデータメモリ１９に登録されたパターンデータが汎用レジスタファイル１７を介してパターンレジスタ２２に格納される。
【００２４】
図３（ａ）は、バイト単位での並べ替え（ＭＡＳ．Ｂ）の場合を示している。この場合、１個のデスティネーションレジスタ中の８バイトのそれぞれに、２個のソースレジスタのデータを並べ替えてコピーする必要がある。すなわち、１６バイトのデータから８バイトのデータを選択するため、４ビットを必要とする。したがって、合計８×４＝３２ビット、１つのパターンレジスタ分のビット数を必要とする。各１バイト（４ビット）のデータが対応するソースレジスタのデータに対応される。このため、バイト単位での並べ替えの場合、３２ビット×４個のパターンレジスタに最大４種類までパターンデータを登録することができる。この４種類のパターンデータは、図２（ａ）に示す２ビットのパターンレジスタ番号ＰＴにより選択される。
【００２５】
図３（ｂ）は、ハーフワード単位での並べ替え（ＭＡＳ．Ｈ）の場合を示している。この場合、１個のデスティネーションレジスタ中の４ハーフワードのそれぞれに、２個のソースレジスタのデータを並べ替えてコピーする必要がある。すなわち、８ハーフワードのデータから４ハーフワードのデータを選択するため、選択に３ビットを必要とする。したがって、合計４×３＝１２ビットを必要とする。図３（ｂ）に示すＨＷ０〜ＨＷ３は３ビットであり、各ＨＷ０〜ＨＷ３に未使用の１ビットが付加されている。このため、合計１６ビットであり、１つのパターンレジスタの２分の１の領域に対応する。したがって、データの区切りを考慮すると、図３（ｂ）に示すように、ハーフワード単位での並べ替えの場合、パターンデータは、最大８種類まで登録することが可能である。この８種類のパターンデータは、図２（ｂ）に示す３ビットのパターンレジスタ番号ＰＴにより選択される。
【００２６】
図３（ｃ）は、ワード単位での並べ替え（ＭＡＳ．Ｗ）の場合を示している。この場合、１個のデスティネーションレジスタ中の２ワードのそれぞれに、２個のソースレジスタのデータをコピーする必要がある。すなわち、４ワードデータから２ワードのデータを選択するため、選択に２ビットを必要とする。したがって、２×２＝４ビットを必要とする。このため、１つのパターンレジスタの８分の１の領域に対応する。したがって、データの区切りを考慮すると、図３（ｃ）に示すように、ワード単位での並べ替えの場合、パターンデータは、最大３２種類まで登録することが可能である。この３２種類のパターンデータは、図２（ｃ）に示す５ビットのパターンレジスタ番号ＰＴにより選択される。
【００２７】
また、図３（ｄ）は、上記バイト単位、ハーフワード単位、ワード単位の並べ替えパターンを混在させた場合を示している。このような構成とすることも可能である。
【００２８】
パターンレジスタ２２に対するパターンデータの登録は、例えば次のようにして行なわれる。データメモリ１９は、データの並べ替えに必要な複数のパターンデータを記憶している。このパターンデータは、上記のように、バイト単位、ハーフワード単位、及びワード単位で構成されている。データメモリ１９に記憶されたパターンデータは、例えば下記の命令１、命令２に従って読み出され、汎用レジスタファイル１７に転送され、パターンレジスタ２２に格納される。
【００２９】
命令１：ｌｗ  ＄１，（＄２）
命令２：ｍｖ  ＰＴ０，＄１
すなわち、先ず、命令フェッチユニット１３はアドレスを指定して命令メモリ１２内の命令１（ロードワード命令）を読み出す。この読み出された命令１は、命令デコードユニット１４によりデコードされる。このデコード結果は、メモリアクセスユニット１８、汎用レジスタファイル１７、パターンレジスタ２２に供給される。汎用レジスタファイル１７は、デコード結果に従って、汎用レジスタ＄２のデータを読み出し、メモリアクセスユニット１８に送る。メモリアクセスユニット１８は、汎用レジスタ＄２のデータをアドレスとしてデータメモリ１９からパターンデータを読み出す。この読み出されたパターンデータは、セレクタ２４を介して汎用レジスタファイル１７の指定された汎用レジスタ＄１に格納される。
【００３０】
次に、命令フェッチユニット１３はアドレスを指定して命令メモリ１２から命令２（ムーブ命令）を読み出す。命令デコードユニット１４は、この読み出された命令２をデコードする。汎用レジスタファイル１７は、デコード結果に従って、汎用レジスタ＄１のデータを読み出し、ＳＩＭＤ演算器１６に送る。ＳＩＭＤ演算器１２は何も行わず、ＳＩＭＤ演算器１２をスルーしたデータは、セレクタ２３を介して指定されたパターンレジスタＰＴ０に書き込まれる。
【００３１】
上記のような命令１、命令２を繰り返すことにより、パターンレジスタＰＴ０〜ＰＴ３にパターンデータが格納される。
【００３２】
尚、パターンレジスタ２２へのパターンデータの格納方法は、上記例に限定されるものではなく、変形可能である。
【００３３】
図４は、並び替え命令の一例と、この命令に対応した並べ替え処理の例を示している。図４において、並び替え命令  ＭＡＳ．Ｈ  ＄０，＄１，＄２，ＰＴ０は、ハーフワード単位で、４つのパターンレジスタのうちの０番（ＰＴ０）に保持されたパターンデータに従って、汎用レジスタ＄１と＄２のデータを並べ替えて汎用レジスタ＄０に格納するという命令である。
【００３４】
上記並び替え命令ＭＡＳ．Ｈが発行されると、データ並べ替え回路２０は、汎用レジスタファイル１７の２つの汎用レジスタ＄１、＄２からデータを読み出す。さらに、命令中のパターンレジスタの番号ＰＴ０により指定されたパターンレジスタＰＴ０から並べ替えパターンを示すパターンデータを読み出す。この後、パターンデータに従って汎用レジスタ＄１、＄２から読み出されたデータを並べ替える。この並べ替えられたデータは、セレクタ２３、２４を介して汎用レジスタ１７に転送され格納される。この後、ＳＩＭＤ演算命令が発行されると、前記並び替えられたデータが汎用レジスタファイル１７から読み出され、ＳＩＭＤ演算器１６により演算される。この演算結果は、セレクタ２３，２４を介して選択された汎用レジスタに格納される。このようにして、データの並べ替え、及びＳＩＭＤ演算が実行される。
【００３５】
上記第１の実施形態によれば、パターンレジスタ２２は予め並べ替えパターンを示すパターンデータを登録し、パターン選択回路２１は、並べ替え命令に含まれるパターンレジスタ番号ＰＴに従って並べ替えパターンを選択し、並べ替え回路２０は、選択された並べ替えパターンに従って汎用レジスタの内容を並べ替えている。このため、第１の実施形態によれば、前記プログラム（１）に示した１２命令で行っていた並べ替え処理を、図４に示す１命令により、完了することができる。したがって、データの並び替えに要する時間を大幅に短縮することができ、ＳＩＭＤ演算回路１６の演算速度を向上させることができる。
【００３６】
また、複数のパターンレジスタ２２に複数のパターンデータを記憶させることにより、並べ替え命令の増加を抑制して、所要のパターンにデータを並べ替えることができる。
【００３７】
しかも、並べ替えがバイト単位、ハーフワード単位、ワード単位の場合のように、複数の単位がある場合において、各単位に応じてパターンレジスタ２２に記憶されるパターンデータの数を変えている。このため、パターンレジスタ２２の記憶領域を有効に活用することが可能である。
【００３８】
尚、図３（ｂ）に示すようにパターンレジスタ内に未使用の領域が生じた場合、その未使用の領域に例えばオプション機能を設定することも可能である。
【００３９】
（第２の実施形態）
図５は、第２の実施形態に係るプロセッサを示している。以下の各実施形態において、図１と同一部分には、同一符号を付し、異なる部分についてのみ説明する。
【００４０】
上記第１の実施形態において、ＳＩＭＤ演算器１６と並べ替え回路２０は並列に配置され、並べ替え回路２０は、ＳＩＭＤ演算器１６から独立してデータの並べ替え処理を行なった。
【００４１】
これに対して、第２の実施形態のプロセッサは、図５に示すように、ＳＩＭＤ演算器１６と並べ替え回路２０が直列に配置されている。ＳＩＭＤ演算器１６と並べ替え回路２０は、並べ替え命令を含む１つのＳＩＭＤ演算命令により動作される。すなわち、１つの命令に従ってＳＩＭＤ演算器１６は、汎用レジスタのデータをＳＩＭＤ演算し、並べ替え回路２０は、ＳＩＭＤ演算器１６の出力データを並べ替える。並べ替え回路２０の出力データは、ＳＩＭＤ演算命令の結果として汎用レジスタファイル１７の指定された汎用レジスタに格納される。
【００４２】
図６（ａ）（ｂ）（ｃ）は、図５に示すプロセッサで実行されるデータ並べ替え命令を含むＳＩＭＤ命令のフォーマットの例を示している。
【００４３】
各命令は、オペレーションコード（ＯＰＣＯＤＥ）と、パターンレジスタ番号（ＰＴ）、又はパターン番号（ＩＰＴ）と、２個のソースレジスタ番号（ＳＲＣ１、ＳＲＣ２）と、デスティネーションレジスタ番号（ＤＥＳＴ）の５つのビットフィールドにより構成されている。
【００４４】
すなわち、図６（ａ）（ｂ）（ｃ）において、演算内容を示すオペレーションコードＡＤＤＳＲＴ．ｘ（ｘ＝Ｂ、又はＨ、又はＷ）は、ＳＩＭＤの加算演算と並べ替えを行い、演算結果をデスティネーションレジスタに格納する命令を示しており、Ｂはバイト単位、Ｈはハーフワード単位、Ｗはワード単位であることを示している。図６（ａ）（ｂ）に示すパターンレジスタ番号ＰＴは、バイト単位及びハーフワード単位の演算結果を並べ替える際に使用するパターンレジスタ番号を示している。図６（ｃ）に示すパターン番号ＩＰＴは、ワード単位の演算結果を並べ替えるための後述する４種類のパターンのうちのいずれかを指定する番号である。ＳＲＣ１、ＳＲＣ２は、処理に必要な２個のソースレジスタ番号、すなわち、汎用レジスタの番号を示し、ＤＥＳＴは、演算結果が格納されるデスティネーションレジスタ番号、すなわち、汎用レジスタの番号を示している。
【００４５】
尚、ソースレジスタの個数は、２個に限定されるものではなく、命令のビット幅に収まれば２個以上であってもよい。
【００４６】
図７（ａ）（ｂ）（ｄ）は、パターンレジスタ２２の構成と並べ替えパターンの例を示している。
【００４７】
図７（ａ）は、バイト単位での並び替え（ＡＤＤＳＲＴ．Ｂ）の例を示している。この場合、ＳＩＭＤ演算器１６の演算結果は、図示せぬレジスタに記憶されている。このため、１個のデスティネーションレジスタ中の８バイトそれぞれに、ＳＩＭＤ演算器１６の１個のレジスタの８バイトのデータをコピーする必要がある。すなわち、８バイトのデータを選択するため、３ビットを必要とする。したがって、合計８×３＝２４ビットを必要とする。データの区切りを考慮すると、この場合、最大４種類までパターンデータを登録することが可能である。この４種類のパターンデータは、図６（ａ）に示す２ビットのパターンレジスタ番号ＰＴにより選択される。
【００４８】
図７（ｂ）は、ハーフワード単位での並び替え（ＡＤＤＳＲＴ．Ｈ）の例を示している。この場合、１個のデスティネーションレジスタ中の４ハーフワードそれぞれに、ＳＩＭＤ演算器１６の１個のレジスタの４ハーフワードデータをコピーする必要がある。すなわち、４ハーフワードのデータを選択するために２ビットを必要とする。したがって、合計４×２＝８ビットを必要とする。この場合、図７（ｂ）に示すように、最大１６種類のパターンデータを登録することが可能である。この１６種類のパターンデータは、図６（ｂ）に示す４ビットパターンレジスタ番号ＰＴにより選択される。
【００４９】
図７（ｃ）は、ワード単位での並び替え（ＡＤＤＳＲＴ．Ｈ）の例を示している。この場合、パターンデータは図７（ｃ）に示す４通りしか存在しない。すなわち、ＳＩＭＤ演算器１６の演算結果｛Ｗｏｒｄ０，Ｗｏｒｄ１｝を並べ替えるパターンは、４種類しかない。このため、パターンデータを選択するために６ビットのパターンレジスタ番号ＰＴのフィールドを用意する代わりに、図６（ｃ）に示すように、直接パターンを指定する専用の２ビットのフィールドＩＰＴを用意している。
【００５０】
また、図７（ｄ）は、上記バイト単位、ハーフワード単位、ワード単位の並べ替えパターンを混在させた場合を示している。このような構成とすることも可能である。
【００５１】
上記構成において、図８に示すように、例えばＡＤＤＳＲＴ．Ｈ命令及びＡＤＤ．Ｈ命令が順次発行された場合の動作について説明する。先ず、ＡＤＤＳＲＴ．Ｈ命令が発行されると、ＳＩＭＤ演算器１６は、汎用レジスタファイル１７から指定された汎用レジスタ＄１、＄２のデータを読み出し、加算する。並べ替え回路２０は、加算結果を並べ替えてデスティネーションレジスタ＄４に格納する。すなわち、並べ替え回路２０は、命令中で指定されたパターンレジスタ番号ＰＴ０に対応するパターンレジスタのデータを読み出して加算結果を並べ替える。
【００５２】
この後、ＡＤＤ．Ｈ命令が発行されると、ＳＩＭＤ演算器１６は、汎用レジスタファイル１７から指定された汎用レジスタ＄３、＄４のデータを読み出し、加算する。このとき、並べ替え回路２０は、何ら処理せずにスルーし、加算結果は、デスティネーションレジスタ＄０に格納される。
【００５３】
上記第２の実施形態によれば、予め複数のパターンレジスタ２２に複数のパターンデータを記憶し、又は命令内にパターン番号ＩＰＴを設定している。このため、データの並べ替えに要する命令数を削減して、所要の並べ替えを実行することができる。
【００５４】
しかも、ＳＩＭＤ演算器１６と並べ替え回路２０を直列に配置し、ＳＩＭＤ演算器１６による演算の後に、予め記憶されたパターンレジスタ２２にパターンデータ、又は命令内のパターン番号ＩＰＴに基づき、並べ替え回路２０で並べ替えを実行している。このため、ＳＩＭＤ演算とデータの並べ替えを１つの命令により実行することができる。したがって、図９に示すような、従来１０命令を必要とした処理を２命令で完了することができ、演算速度を向上することができる。
【００５５】
（第３の実施形態）
図１０は、第３の実施形態に係るプロセッサを示している。第２の実施形態は、ＳＩＭＤ演算後、データの並べ替えを行った。これに対して、第３の実施形態は、ＳＩＭＤ演算前に、２個のソースレジスタのデータをそれぞれ並べ替える構成とされている。
【００５６】
すなわち、２個の並べ替え回路２０ａ，２０ｂの入力端は、汎用レジスタファイル１７に接続されている。これら並べ替え回路２０ａ，２０ｂの出力端は、ＳＩＭＤ演算器１６に接続されている。パターン選択回路２１の出力端は、並べ替え回路２０ａ，２０ｂに接続されている。
【００５７】
図１１（ａ）（ｂ）（ｃ）は、第３の実施形態の命令フォーマットの一例を示している。図１１（ａ）（ｂ）（ｃ）に示す命令は、オペレーションコード（ＯＰＣＯＤＥ）、パターンレジスタ番号（ＰＴ１、ＰＴ２）、ワード単位用パターン番号（ＩＰＴ１、ＩＰＴ２）、ソースレジスタ番号（ＳＲＣ１、ＳＲＣ２）、デスティネーションレジスタ番号ＤＥＳＴを含む６個のビットフィールドを有している。
【００５８】
オペレーションコードＳＲＴＡＤＤ．ｘ（ｘ＝Ｂ、又はＨ、又はＷ）は、並べ替え後、ＳＩＭＤの加算演算を行うことを示している。２ビット又は４ビットのパターンレジスタ番号ＰＴ１、ＰＴ２は、それぞれソースレジスタＳＲＣ１、ＳＲＣ２に対応したパターンレジスタを指定する。ワード単位用パターン番号ＩＰＴ１、ＩＰＴ２は、それぞれソースレジスタＳＲＣ１、ＳＲＣ２に対応したパターンレジスタを指定する。ＳＲＣ１、ＳＲＣ２は、処理に必要な２個のソースレジスタ番号、すなわち、汎用レジスタの番号を示し、ＤＥＳＴは、演算結果が格納されるデスティネーションレジスタ番号、すなわち、汎用レジスタの番号を示している。
【００５９】
次に、具体的な命令の一例を示す。
【００６０】
ＳＲＴＡＤＤ．Ｈ  ＄０，＄１，＄２，ＰＴ１，ＰＴ２
上記命令を実行する場合、並べ替え回路２０ａ，２０ｂは、ソースレジスタ＄１、＄２から読み出したデータを、パターンレジスタＰＴ１、ＰＴ２に記憶されたパターンデータに従ってそれぞれ並べ替える。この後、ＳＩＭＤ演算器１６は、並べ替え回路２０ａ，２０ｂにより並べ替えられた両データを加算してデスティネーションレジスタ＄０に格納する。
【００６１】
上記第３の実施形態によれば、ＳＩＭＤ演算器１６の前段に並べ替え回路２０ａ，２０ｂを設け、これら並べ替え回路２０ａ，２０ｂにより２つのソースレジスタから読み出されたデータをパターンレジスタ２２に記憶されたパターンデータに従って並べ替え、この後、ＳＩＭＤ演算を実行している。このため、第３の実施形態によっても第２の実施形態と同様に、データの並べ替えに要する命令数を削減して、所要の並べ替えを実行することが可能である。
【００６２】
しかも、データの並べ替えとＳＩＭＤ演算を１つの命令により実行することができるため、演算速度を向上することが可能である。
【００６３】
（第４の実施形態）
図１２は、第４の実施形態に係るプロセッサを示している。第４の実施形態は、第１の実施形態を変形したものである。第１の実施形態は、専用のパターンレジスタ２２を設けていた。これに対して、第４の実施形態は、専用のパターンレジスタを設けず、図１２に示すように、汎用レジスタファイル１７に並べ替えパターンを登録し、ソースレジスタと同様にパターンデータを読み出して使用するという構成である。すなわち、汎用レジスタファイル１７がパターンレジスタを兼用している。このため、パターン選択回路２１は、汎用レジスタファイル１７に接続されている。
【００６４】
図１３（ａ）（ｂ）（ｃ）は、この構成のプロセッサで実行される命令フォーマットの一例を示している。各命令は、オペレーションコード（ＯＰＣＯＤＥ）と、２つのソースレジスタ番号（ＳＲＣ１，ＳＲＣ２）と、１つのデスティネーションレジスタ番号（ＤＥＳＴ）と、パターンレジスタの番号（ＰＴ）と、パターンレジスタのどの部分を使用するかを示すビットフィールド（ＰＬ）という６つのビットフィールドにより構成されている。
【００６５】
第４の実施形態によれば、第１の実施形態に比べて命令において、パターンを選択するために必要とするビット数が多くなり、命令長が長くなる。しかし、パターンレジスタを必要としないため回路構成を簡単化できる。
【００６６】
また、汎用レジスタファイル１７を用いることにより、４つのレジスタからなるパターンレジスタを用いる場合に比べて、より多くのパターンデータを格納することができ、多くのパターンデータを使用することができる。
【００６７】
尚、第４の実施形態を、第２、第３の実施形態と組み合わせて構成することも可能である。
【００６８】
（第５の実施形態）
図１４は、第５の実施形態に係るプロセッサを示している。第５の実施形態は、第１乃至第４の実施形態と異なり、並べ替え回路が並べ替え以外にビット反転を行う機能を有している。
【００６９】
すなわち、図１４において、例えばＳＩＭＤ演算器１６に並列に並べ替え及び反転回路３０が配置されている。この並べ替え及び反転回路３０は、例えばハーフワード単位、及びワード単位で並べ替えを行う際、パターンレジスタのパターンデータ以外のビットを用いて指定された反転指示に基づき、ビット反転を実行する。すなわち、例えば後述する図１５（ｂ）に示すハーフワード単位の場合、未使用の１ビットが反転指示ビットとして使用される。
【００７０】
図１５（ａ）（ｂ）（ｃ）（ｄ）は、パターンレジスタの構成とパターンデータの登録の形態を示している。
【００７１】
図１５（ａ）に示すＭＡＳ．Ｂ、及び図１５（ｄ）に示すパターンデータを混在して登録する例は、第１の実施形態と同様である。
【００７２】
図１５（ｂ）に示すＭＡＳ．Ｈの場合、１ハーフワードにつき１ビットの未使用ビットが存在する。このため、この１ビットを反転指定ビットとして利用している。この反転指定ビットが例えば“１”に設定されている場合、ビット反転動作が実行される。
【００７３】
図１５（ｃ）に示すＭＡＳ．Ｗの場合、第１の実施形態と同様の形態にすることも可能であるが、図１５（ｃ）では、登録できるパターンデータの種類を１６種類に削減し、余ったビットを反転指定ビットとして利用している。この反転指定ビットが例えば“１”に設定されている場合、ビット反転動作が実行される。
【００７４】
図１６（ａ）（ｂ）（ｃ）は、第５の実施形態に係る命令フォーマットの一例を示している。図１６（ａ）（ｂ）（ｃ）に示す命令は、オペレーションコード（ＯＰＣＯＤＥ）、パターンレジスタ番号（ＰＴ）、ソースレジスタ番号（ＳＲＣ１、ＳＲＣ２）、デスティネーションレジスタ番号ＤＥＳＴを含む５個のビットフィールドを有している。
【００７５】
オペレーションコードＭＡＳＩ．ｘ（ｘ＝Ｂ、又はＨ、又はＷ）は、並べ替え及びビット反転を行うことを示している。２ビット乃至４ビットのパターンレジスタ番号ＰＴは、パターンレジスタを指定する。それぞれソースレジスタＳＲＣ１、ＳＲＣ２に対応したパターンレジスタを指定する。ＳＲＣ１、ＳＲＣ２は、処理に必要な２個のソースレジスタ番号、すなわち、汎用レジスタの番号を示し、ＤＥＳＴは、演算結果が格納されるデスティネーションレジスタ番号、すなわち、汎用レジスタの番号を示している。
【００７６】
上記構成において、ＭＡＳ．ｘ（Ｈ、又はＷ）命令が発行されると、並べ替え及び反転回路３０は、汎用レジスタファイルから２個のソースレジスタのデータを読み出し、命令中のパターンレジスタ番号ＰＴで指定されたパターンレジスタからパターンデータを読み出してデータの並べ替えを行う。その際、パターンデータの反転指示ビットが“１”に設定されている場合、この反転指示ビットが設定されたデータのみ、並べ替えと同時にビットが反転される。このように、並べ替え及びビット反転後のデータは、指定されたデスティネーションレジスタに格納される。
【００７７】
上記第５の実施形態によれば、並べ替え及び反転回路３０は、データの並べ替えとビット反転機能を有し、パターンデータに含まれる反転指示データにより、並べ替えられたデータのビットを反転する。このため、データの並べ替えとビット反転を１命令で実行することができるため、命令数を削減することが可能である。したがって、演算速度を高速化することができる。
【００７８】
尚、第５の実施形態は、並べ替えと反転動作を行ったが、これに限定されるものではなく、並べ替えに加えて、反転動作以外のオプション処理を設定することも可能である。
【００７９】
また、第５の実施形態の並べ替え及び反転回路３０（反転に限定されない）を、第２、第３、第４の実施形態のような構成に適用することも可能である。
【００８０】
その他、本発明は、上記各実施形態に限定されるものではなく、発明の要旨を変えない範囲において、種々変形実施可能なことは勿論である。
【図面の簡単な説明】
【００８１】
【図１】第１の実施形態に係るプロセッサを示す構成図。
【図２】図２（ａ）（ｂ）（ｃ）は、図１に示すプロセッサで実行されるデータの並べ替え命令のフォーマットを示す図。
【図３】図３（ａ）（ｂ）（ｃ）（ｄ）は、パターンレジスタの構成とパターンレジスタに登録されるパターンデータの形態を示す図。
【図４】並び替え命令の一例と、この命令に対応した並べ替え処理の例を示す図。
【図５】第２の実施形態に係るプロセッサを示す構成図。
【図６】図６（ａ）（ｂ）（ｃ）は、図５に示すプロセッサで実行されるデータ並べ替え命令を含むＳＩＭＤ命令のフォーマットの例を示す図。
【図７】図７（ａ）（ｂ）（ｃ）（ｄ）は、パターンレジスタの構成とワード単位の並べ替えパターンを示す図。
【図８】第２の実施形態の動作を説明するための図。
【図９】従来の命令の一例を示す図。
【図１０】第３の実施形態に係るプロセッサを示す構成図。
【図１１】図１１（ａ）（ｂ）（ｃ）は、第３の実施形態の命令フォーマットの一例を示す図。
【図１２】第４の実施形態に係るプロセッサを示す構成図。
【図１３】図１３（ａ）（ｂ）（ｃ）は、第４の実施形態の命令フォーマットの一例を示す図。
【図１４】第５の実施形態に係るプロセッサを示す構成図。
【図１５】図１５（ａ）（ｂ）（ｃ）（ｄ）は、第５の実施形態に係るパターンレジスタの構成とパターンデータの登録の形態を示す図。
【図１６】図１６（ａ）（ｂ）（ｃ）は、第５の実施形態の命令フォーマットの一例を示す図。
【符号の説明】
【００８２】
１６…ＳＩＭＤ演算器、１７…汎用レジスタファイル、２０、２０ａ、２０ｂ…並べ替え回路、２１…パターン選択回路、２２…パターンレジスタ、３０…並べ替え及び反転回路。
【図１】
2008108220.tif 000003
【図２】
2008108220.tif 000004
【図３】
2008108220.tif 000005
【図４】
2008108220.tif 000006
【図５】
2008108220.tif 000007
【図６】
2008108220.tif 000008
【図７】
2008108220.tif 000009
【図８】
2008108220.tif 000010
【図９】
2008108220.tif 000011
【図１０】
2008108220.tif 000012
【図１１】
2008108220.tif 000013
【図１２】
2008108220.tif 000014
【図１３】
2008108220.tif 000015
【図１４】
2008108220.tif 000016
【図１５】
2008108220.tif 000017
【図１６】
2008108220.tif 000018