(57)【特許請求の範囲】
【請求項１】
複数個のインデックスからなるインデックス列を入力とし、ビット数および複製の個数を示す信号を受け付けて、各インデックスを前記信号に示されるビット数だけ左ビットシフトし、かつ、各インデックスを前記信号に示される複製の個数ずつに複製した、インデックス列を出力するシフト複製部と、
前記シフト複製部から出力されたインデックス列を入力とし、各インデックスへの加算値を示す信号を受け付けて、前記各インデックスに前記信号に示される加算値を加算する加算部と
を備えることを特徴とするシャッフルパターン生成回路。
【請求項２】
前記信号に示される加算値は、複製元が同一の各インデックス間では相異なる値である
ことを特徴とする請求項１に記載のシャッフルパターン生成回路。
【請求項３】
前記複製の個数はＮ個（Ｎは２以上の整数）であって、
前記複製元が同一の各インデックスでは、１個のインデックスの加算値は０であり、残りのＮ−１個のインデックスの加算値は、それぞれ、１、２、・・・、Ｎ−１である
ことを特徴とする請求項２に記載のシャッフルパターン生成回路。
【請求項４】
各インデックスに対するビット幅を示す信号を受け付けて、前記信号に示されるビット幅へと各インデックスのビット幅を変更するビット幅変更部を備える
ことを特徴とする請求項１に記載のシャッフルパターン生成回路。
【請求項５】
前記シフト複製部は、
前記各インデックスの左ビットシフト後に各インデックスの複製を行う、または、前記各インデックスの複製後に各インデックスの左ビットシフトを行う
ことを特徴とする請求項１に記載のシャッフルパターン生成回路。
【請求項６】
s個のインデックスのそれぞれに対して、ｍ個（ただし、ｍは２以上の整数）のｋビットのインデックスを対応づけたｍ×ｋインデックステーブルと、
t個のインデックスのそれぞれに対して、ｎ個（ただし、ｎはｍと異なる２以上の整数であり、かつｓ×ｍとｔ×ｎとは等しい）のkビットのインデックスを対応づけたｎ×kインデックステーブルと、
s個又はｔ個のインデックスからなるシャッフルパターンと、いずれのインデックステーブルを参照するかを示す信号を受け付けて、前記信号に示されるインデックステーブルを参照して、ｓ×ｍ個またはｔ×ｎ個（ただしｓ×ｍとｔ×ｎとは等しい）のインデックスからなるシャッフルパターンを出力する参照部と
を備えることを特徴とするシャッフルパターン生成回路。
【請求項７】
請求項１または６に記載のシャッフルパターン生成回路を含むプロセッサであって、
入力された命令をデコードし、前記命令に合わせて制御信号を生成する命令デコード部と、
前記制御信号に基づいて、前記シャッフルパターン生成回路へのデータ供給および前記シャッフルパターン生成回路からのデータの格納を行うレジスタファイルとを備え、
前記シャッフルパターン生成回路が受け付ける信号とは、前記制御信号である
ことを特徴とするプロセッサ。
【請求項８】
複数個のインデックスからなるインデックス列を入力とし、ビット数および複製の個数を示す信号を受け付けて、各インデックスを前記信号に示されるビット数だけ左ビットシフトし、かつ、各インデックスを前記信号に示される複製の個数ずつに複製した、インデックス列を出力するシフト複製ステップと、
前記シフト複製ステップにて出力されたインデックス列を入力とし、各インデックスへの加算値を示す信号を受け付けて、前記インデックスに前記信号に示される加算値を加算する加算ステップと
を含むことを特徴とするシャッフルパターン生成方法。
【請求項９】
前記シフト複製ステップは、
前記各インデックスの左ビットシフト後に各インデックスの複製を行う、または、前記各インデックスの複製後に各インデックスの左ビットシフトを行う
ことを特徴とする請求項８に記載のシャッフルパターン生成方法。
【請求項１０】
複数個のインデックスからなるインデックス列、かつ、ビット数および複製の個数および各インデックスへの加算値を示す制御データを入力とし、
各インデックスを前記制御データに示されるビット数だけ左ビットシフトし、かつ、
各インデックスを前記制御データに示される複製の個数ずつに複製し、かつ、
各インデックスに前記制御データに示される加算値を加算した結果を出力する制御をコンピュータに実行させるためのプログラム。
【請求項１１】
前記制御データにより示される加算値は、複製元が同一の各インデックス間では相異なる値である
ことを特徴とする請求項１０に記載のプログラム。
【請求項１２】
前記複製の個数はＮ個（Ｎは２以上の整数）であって、
前記複製元が同一の各インデックスでは、１個のインデックスの加算値は０であり、残りのＮ−１個のインデックスの加算値は、それぞれ、１、２、・・・、Ｎ−１である
ことを特徴とする請求項１１に記載のプログラム。
【請求項１３】
前記制御データは各インデックスに対するビット幅を示し、
当該制御データに示されるビット幅へと各インデックスのビット幅を変更し、前記結果として出力する
ことを特徴とする請求項１０に記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、シャッフル命令に用いるシャッフルパターンを生成するシャッフルパターン生成回路に関する。
【背景技術】
【０００２】
複数のデータ要素がパッキングされたものが１つのデータとして入力されるプロセッサ（例えば、ＳＩＭＤ（Single Instruction Multiple Data）プロセッサ）においては、この１つのデータ内でのデータ要素の並び替えが必要となる場合がある。このような場合のために、データ要素を並び替えるシャッフル命令という命令がある。【０００３】
シャッフル命令の一例として、非特許文献１記載のＰＳＨＵＦＢ命令の動作例を説明する。【０００４】
図１に示すように、ＰＳＨＵＦＢ命令は、シャッフルパターン１０１と、入力パックデータ１０２とを入力データとして、出力パックデータ１０３を出力する命令である。【０００５】
シャッフルパターン１０１のインデックスの個数は８個で、各インデックスのビット幅は８ビットである。また、入力パックデータ１０２および出力パックデータ１０３は、データ要素の個数は８個で、各データ要素のビット幅は８ビットである。【０００６】
入力パックデータ１０２の各データ要素位置の番号は、右端から左端へとかけてそれぞれ０、１、２、．．．、７と表される。この番号は、対応するデータ要素が、シャッフルパターン１０１のどのインデックスにシャッフルされるかを示すものである。【０００７】
ＰＳＨＵＦＢ命令を実行すると、例えば、入力パックデータ１０２のデータ要素位置の左端の「Ａ」のデータ要素には「７」というインデックスが対応しているので、シャッフルパターン１０１の右から２番目の「７」のインデックスの位置へとシャッフルされる。また、入力パックデータ１０２のデータ要素位置の右から２番目の「Ｇ」のデータ要素には「１」というインデックスが対応しているので、シャッフルパターン１０１の左から３番目と４番目の「１」のインデックスの位置へとシャッフルされる。
【先行技術文献】
【非特許文献】
【０００８】
【非特許文献１】Intel Corporation:"Intel(R) 64 and IA-32 Architectures Software Developers's Manual Volume 2:Instruction Set Reference, A-Z",4-212
【発明の概要】
【発明が解決しようとする課題】
【０００９】
ＰＳＨＵＦＢ命令で用いられるシャッフルパターンの生成方法については、非特許文献１で開示されていない。【００１０】
シャッフルパターンを生成するに際しては、高速化や低消費電力のためにもなるべく簡易な処理で実現できるようにすることが好ましい。【００１１】
本発明は、このような背景の下になされたものであって、簡易な処理でシャッフルパターンを生成することができるシャッフルパターン生成回路を提供することを目的とする。
【課題を解決するための手段】
【００１２】
本発明に係るシャッフルパターン生成回路は、複数個のインデックスからなるインデックス列を入力とし、ビット数および複製の個数を示す信号を受け付けて、各インデックスを前記信号に示されるビット数だけ左ビットシフトし、かつ、各インデックスを前記信号に示される複製の個数ずつに複製した、インデックス列を出力するシフト複製部と、前記シフト複製部から出力されたインデックス列を入力とし、各インデックスに対する加算値を示す信号を受け付けて、前記各インデックスに対して前記信号に示される加算値を加算する加算部とを備えることを特徴としている。
【発明の効果】
【００１３】
本発明のシャッフルパターン生成回路によれば、左ビットシフト、複製および加算といった簡易な処理でもってシャッフルパターンを生成することができる。
【図面の簡単な説明】
【００１４】
【図１】ＰＳＨＵＦＢ命令の動作例を説明するための図
【図２】４×１６シャッフルパターンを基にしたシャッフルを示す図
【図３】実施の形態１のシャッフルパターン生成回路を示す図
【図４】４×１６シャッフルパターンから８×８シャッフルパターンを生成する流れを示す図
【図５】４×８シャッフルパターンを基にしたシャッフルを示す図
【図６】４×８シャッフルパターンから８×８シャッフルパターンを生成する流れを示す図
【図７】実施の形態２のシャッフルパターン生成回路を示す図
【図８】ビット単位信号の値と、各ブロックが行う処理内容の対応関係を表すテーブルを示す図
【図９】４×８シャッフルパターンから８×８シャッフルパターンを生成する流れを示す図
【図１０】２×１６シャッフルパターンから４×１６シャッフルパターンを生成する流れを示す図
【図１１】４×８シャッフルパターンから８×８シャッフルパターンを生成する流れを示す図
【図１２】実施の形態２の変形例に係るシャッフルパターン生成回路を示す図
【図１３】実施の形態２の変形例に係る４×８シャッフルパターンから８×８シャッフルパターンを生成する流れを示す図
【図１４】（ａ）変形例に係るシャッフルパターン生成回路を示す図、（ｂ）ビット単位信号Ａ、Ｂの各値と、各ブロックが行う処理内容の対応関係を表すテーブルを示す図
【図１５】実施の形態３のシャッフルパターン生成回路を示す図
【図１６】４×１６シャッフルパターンから８×８シャッフルパターンを生成する流れを示す図
【図１７】２×３２シャッフルパターンから４×１６シャッフルパターンを生成する流れを示す図
【図１８】２×３２シャッフルパターンから８×８シャッフルパターンを生成する流れを示す図
【図１９】実施の形態４のシャッフルパターン生成回路を示す図
【図２０】２×８インデックステーブルを示す図
【図２１】４×８インデックステーブルを示す図
【図２２】実施の形態５のプロセッサを示す図
【図２３】シャッフルパターン生成命令のフォーマットを示す図
【図２４】シャッフルパターン生成命令のビットマップを示す図
【図２５】シャッフルパターン生成方法の処理の流れ図
【図２６】（ａ）シャッフルパターン生成命令のフォーマットを示す図（ｂ）シャッフルパターン生成命令のビットマップを示す図
【発明を実施するための形態】
【００１５】
以下、本発明の実施の形態について、図面を参照しながら説明する。
【００１６】
（実施の形態１）
上述したＰＳＨＵＦＢ命令は、それぞれビット幅が８ビットの８個のデータ要素に対するシャッフル命令であるところ、入力パックデータのデータ要素の各ビット幅や個数がＰＳＨＵＦＢ命令の仕様と異なる場合には、上記ＰＳＨＵＦＢ命令をそのまま実行しにくいことがある。
【００１７】
この場合、シャッフルパターンのインデックスの各ビット幅や個数を、ＰＳＨＵＦＢ命令の仕様に合わせて生成し直す必要がある。なお、ビット幅や個数が異なってもシャッフルできるように、多種類のシャッフル命令を持たせるようにする対応もあり得るが、このような対応を実現できるかどうかはプロセッサの仕様に大きく依存するので、本実施の形態では採用しないこととしている。
【００１８】
このようなシャッフルパターンの生成が求められる場面の例を図２に示す。
【００１９】
図２の例では、それぞれビット幅１６ビットの４個のインデックスからなる入力シャッフルパターン２０２から、それぞれビット幅８ビットの８個のインデックスからなる出力シャッフルパターン２０３を生成している。このようにしてＰＳＨＵＦＢ命令の仕様に合ったシャッフルパターンを生成している。
【００２０】
そして、生成した出力シャッフルパターン２０３を用いて、実際は４個のビット幅１６ビットの入力パックデータ２０４を、８個のビット幅８ビットのパックデータとみなしてシャッフルを行い、出力パックデータ２０５を得ている。
【００２１】
本実施の形態１では、入力シャッフルパターン２０２から出力シャッフルパターン２０３を生成するというように、あるシャッフルパターンから、ＰＳＨＵＦＢ命令の仕様に沿ったインデックスの個数やビット幅を有するシャッフルパターンを生成する構成について説明する。
【００２２】
図３に示すように、本実施の形態１のシャッフルパターン生成回路３０１は、入力シャッフルパターン２０２とビット単位信号３０４を入力とし、出力シャッフルパターン２０３を出力とする。
【００２３】
ビット単位信号３０４は、左ビットシフトのビット数、ビット幅の拡張または縮小の数、および各インデックスに加算する値など、シャッフルパターン生成回路３０１内の各ブロックの挙動を制御する信号である。
【００２４】
ビット単位信号３０４にしたがって、シフタ３０５は左ビットシフトを行い、ビット変更器３０６はビット幅の拡張または縮小を行い、加算器３０７は各インデックスに値を加算し、インターリーバー３０８はインデックスのインターリーブを行う。
【００２５】
図４に、シャッフルパターン生成回路３０１にて、４×１６シャッフルパターン２０２から８×８シャッフルパターン２０３を生成する例を示す。なお、「Ａ×Ｂシャッフルパターン」とは、インデックスの個数がＡ、各インデックスのビット幅がＢであるシャッフルパターンを示す。
【００２６】
はじめに、シフタ３０５は、４×１６シャッフルパターン２０２を１ビット左ビットシフトしたインデックス列４０１を生成する。
【００２７】
続いて、加算器３０７は、インデックス列４０１の各インデックスを１加算することでインデックス列４０２を生成する。
【００２８】
そして、ビット変更器３０６は、インデックス列４０１とインデックス列４０２のビット幅を１６ビットから８ビットへと半分に縮小し、それぞれインデックス列４０４とインデックス列４０３を生成する。
【００２９】
最後に、インターリーバー３０８は、インデックス列４０３とインデックス列４０４のデータ要素をインターリーブ（交互に配置）し、８×８シャッフルパターン２０３を生成する。
【００３０】
シャッフルパターン生成が必要な他の例を、図５を用いて説明する。図５は、４×８シャッフルパターン２０２から生成した８×８シャッフルパターン２０３を用いて、４個の１６ビットのデータ要素からなる入力パックデータ５０２をシャッフルし、４個の１６ビットのデータ要素からなる出力パックデータ５０３を出力する例である。
【００３１】
このように、４×８シャッフルパターン２０２の総ビット幅（３２ビット）と、入力パックデータ５０２のデータ要素の総ビット幅（６４ビット）が異なるのは、４個の８ビットデータに対してＳＩＭＤ演算を行った結果、演算結果の必要ビット数が増加し、データ要素のビット幅を拡張する必要がある場合などに起こる。ここで、上記ＰＳＨＵＦＢ命令のような、８個の８ビットデータ要素に対するシャッフル命令しかない場合、４個の１６ビットデータ要素からなる入力パックデータ４０２を、８個の８ビットデータ要素からなるパックデータとみなしてシャッフルしなくてはならない。そこで、４×８シャッフルパターン２０２から８×８シャッフルパターン２０３を生成し、生成した８×８シャッフルパターン２０３を用いて入力パックデータ５０２を出力パックデータ５０３へとシャッフルしている。
【００３２】
図６に、シャッフルパターン生成回路３０１にて、４×８シャッフルパターン２０２から８×８シャッフルパターン２０３を生成する例を示す。
【００３３】
はじめに、シフタ３０５は、４×８シャッフルパターン２０２を１ビット左ビットシフトしたインデックス列６０１を生成する。
【００３４】
続いて、加算器３０７は、インデックス列６０１に１加算したインデックス列６０２を生成する。
【００３５】
そして、ビット変更器３０６は、インデックス列６０１とインデックス列６０２をそのままインターリーバー３０８に渡す。
【００３６】
最後に、インターリーバー３０８は、インデックス列６０１とインデックス列６０２のデータ要素をインターリーブ（交互に配置）し、８×８シャッフルパターン２０３を生成する。
【００３７】
以上、説明したように、本実施の形態によれば、シャッフルパターンのインデックスの各ビット幅や個数を、ＰＳＨＵＦＢ命令などシャッフル命令の仕様に合わせて生成することができる。これにより適切なシャッフルを実現することができる。
【００３８】
（実施の形態２）
実施の形態２は、より簡易な手法でシャッフルパターンを生成する。
【００３９】
図７は、実施の形態２におけるシャッフルパターン生成回路の機能ブロック図である。
【００４０】
シャッフルパターン生成回路７０１は、入力シャッフルパターン７０２とビット単位信号７０４を入力とし、出力シャッフルパターン７０３を出力とし、シフト複製部７０５（シフタ７０６および複製器７０７を含む。）と加算器７０８を備える。
【００４１】
ビット単位信号７０４は、左ビットシフトのビット数、各インデックスの複製の個数、および各インデックスに加算する値などを制御する信号である。
【００４２】
シフタ７０６、複製器７０７および加算器７０８は、このビット単位信号７０４を受け付けて、それぞれ左ビットシフト、各インデックスの複製および各インデックスへの値の加算を行う。ビット単位信号７０４の値と、各ブロックの挙動との対応を図８のテーブルに示す。
【００４３】
テーブル８０１は、「ビット単位信号」８０２の項目に対応して、シフタ７０６が行うべき「左ビットシフトのビット数」８０３、複製器７０７が行うべき「複製の個数」８０４、加算器７０８が加算を行うべき「各インデックスに加算する値」８０５を示す。シフタ７０６、複製器７０７および加算器７０８には、このようにビット単位信号の値に応じて行うべき処理が設定されている。
【００４４】
ビット単位信号０、２は、４×８シャッフルパターンから８×８シャッフルパターンの生成する場合、ビット単位信号１は、２×１６シャッフルパターンから４×１６シャッフルパターンの生成する場合に対応している。
【００４５】
このようなビット単位信号を複数用意しておくことで、シャッフル命令の仕様に合わせたシャッフルパターンを生成することができる。ビット単位信号の値ごとのシャッフルパターン生成回路７０１が行う処理の流れについて以下説明する。
【００４６】
＜ビット単位信号０の場合＞
図９は、４×８シャッフルパターン７０２から８×８シャッフルパターン７０３を生成する流れを示す。
【００４７】
まず、シフタ７０６は、４×８シャッフルパターン７０２の各インデックスを１ビット左ビットシフトして下位８ビットを抽出することで、インデックス列９０１を生成する。
【００４８】
続いて、複製器７０７は、シフタ７０６でシフトされたインデックス列９０１の各インデックスを２個ずつ複製し、インデックス列９０２を生成する。
【００４９】
最後に、加算器７０８は、複製器７０７で複製後のインデックス列９０２を受け取り、インデックス列９０２に左端から１、０、１、０、１、０、１、０を加算することで、８×８シャッフルパターン７０３を生成する。
【００５０】
＜ビット単位信号１の場合＞
図１０は、２×１６シャッフルパターン７０２から４×１６シャッフルパターン７０３を生成する流れを示す。
【００５１】
まず、シフタ７０６は、２×１６シャッフルパターン７０２の各インデックスを１ビット左ビットシフトして下位１６ビットを抽出することで、インデックス列１００１を生成する。
【００５２】
続いて、複製器７０７は、シフタ７０６でシフトされたインデックス列１００１の各インデックスを２個ずつ複製し、インデックス列１００２を生成する。
【００５３】
最後に、加算器７０８は、複製器７０７で複製後のインデックス列１００２を受け取り、各インデックスに左端から１、０、１、０を加算することで、４×１６シャッフルパターン７０３を生成する。
【００５４】
＜ビット単位信号２の場合＞
図９の例では、４個のインデックスから８個のインデックスを持つシャッフルパターンの生成を示したが、例えば２個の有効インデックスから８個のインデックスを持つシャッフルパターンの生成することもできる。この例をビット単位信号２の場合として説明する。
【００５５】
図１１は、４×８シャッフルパターン７０２から８×８シャッフルパターン７０３を生成する流れを示す。
【００５６】
４×８シャッフルパターン７０２は、それぞれ８ビットの４個のインデックスからなる。
【００５７】
シフタ７０６は、ビット単位信号２という信号を受け付けると、入力されるシャッフルパターンのうちで、左から２番目のインデックスＡ０と左から４番目のインデックスＡ１とを有効なインデックスとして扱う旨が予め設定されている。
【００５８】
このシフタ７０６は、４×８シャッフルパターン７０２の有効なインデックスＡ０とＡ１を２ビット左ビットシフトして下位８ビットを抽出することで、インデックス列１１０１を生成する。
【００５９】
続いて、複製器７０７は、シフタ７０６でシフトされたインデックス列１１０１の各インデックスを４個ずつ複製し、インデックス列１１０２を生成する。
【００６０】
そして、加算器７０８は、複製器７０７で複製後のインデックス列１１０２を受け取り、各インデックスに左端から３、２、１、０、３、２、１、０を加算することで、８×８シャッフルパターン７０３を生成する。
【００６１】
以上説明したように、本実施の形態によれば、直列に接続したシフタ７０６、複製器７０７、加算器７０８によりシャッフルパターンを生成することにより、高速な生成が可能となる。また、左ビットシフト、複製、加算といった簡単な処理の組み合わせで足りるので、実施の形態１と比べて命令のサイクル数の削減や動作周波数の向上ができる。
【００６２】
また、ビット単位信号７０４で各ブロックの挙動を制御することによって、同一の回路構成でありながら、インデックスの個数や各インデックスのビット幅が相異なる多様なシャッフルパターン生成が可能となる。
【００６３】
なお、本実施の形態において、シフタ７０６、複製器７０７、加算器７０８の順に接続して処理を行っているが、例えば、複製器７０７でインデックスを複製した後にシフタ７０６でシフトするなど、処理の順序が異なってもよい。一例として、図１２に示すシャッフルパターン生成回路７０１ａは、複製器７０７で複製した後にシフタ７０６で左ビットシフトするシフト複製部７０５ａを備える。
【００６４】
このようなシャッフルパターン生成回路７０１ａにおいて、図９同様に、４×８シャッフルパターン７０２から８×８シャッフルパターン７０３を生成する流れを図１３に示す。
【００６５】
図１３では、まず、複製器７０７は、４×８シャッフルパターン７０２の各インデックスを２個ずつ複製し、インデックス列１３０１を生成する。
【００６６】
そして、シフタ７０６は、インデックス列１３０１を１ビット左ビットシフトして下位８ビットを抽出することで、インデックス列１３０２を生成する。
【００６７】
最後に、加算器７０８は、インデックス列１３０２を受け取り、インデックス列１３０２に左端から１、０、１、０、１、０、１、０を加算することで、８×８シャッフルパターン７０３を生成する。
【００６８】
また、本実施の形態において、ビット単位信号７０４を単一の信号としたが、シフタ７０６、複製器７０７、加算器７０８に対して個別または一部個別の信号を入力としてもよい。
【００６９】
また、ビット単位信号７０４を、入力シャッフルパターンを示すビット単位信号Ａ、出力シャッフルパターンを示すビット単位信号Ｂと分けて実装してもよい。
【００７０】
このような実装の例を、図１４を用いて説明する。
【００７１】
図１４（ａ）に示すように、シフト複製部１４０５と加算器１４０８とを備えるシャッフルパターン生成回路１４１１は、ビット単位信号Ａ１４０４ａとビット単位信号Ｂ１４０４ｂとを入力とする。
【００７２】
図１４（ｂ）に示すように、ビット単位信号Ａ１４０４ａとビット単位信号Ｂ１４０４ｂは、それぞれ入力シャッフルパターンまたは出力シャッフルパターンの、インデックスの個数および各インデックスのビット幅を示す。
【００７３】
このビット単位信号Ａ１４０４ａとビット単位信号Ｂ１４０４ｂとの値の組み合わせに対応して、シフト複製部１４０５が行うべき「左ビットシフトのビット数」８０３や「複製の個数」８０４、加算器１４０８が加算を行うべき「各インデックスに加算する値」８０５が設定されている。
【００７４】
なお、本実施の形態で説明した、入力シャッフルパターンや出力シャッフルパターンのインデックスの個数や各インデックスのビット幅は一例であり、これに限られない。ビット幅を拡張したり、各ブロック（シフタ７０６、複製器７０７、加算器７０８）で処理するインデックスの個数を増やしたりすることもあり得る。あるいは、入力シャッフルパターンや出力シャッフルパターンのビット幅を縮小し、各ブロック（シフタ７０６、複製器７０７、加算器７０８）で処理するインデックスの個数を減らすこともあり得る。このようにビット幅やインデックスの個数を調整することにより多様なシャッフルパターンを生成することができる。
【００７５】
なお、本実施の形態においては、左ビットシフトによるあふれ（オーバーフロー）などを考慮して、シフタ７０６において結果の下位ビットを抽出するとしているが、シフタ７０６に限らず、複製器７０７や加算器７０８においても下位ビット抽出処理を行ってもよいし、それぞれで行わずに例えば加算の後などに一括して下位ビット抽出を行ってもよい。
【００７６】
また、下位ビット抽出に代えて、またはこれと組み合わせて飽和処理（ある値が指定されたビット幅の範囲の最大値または最小値を超えた場合に、ある値を最大値または最小値に置き換える処理）を行うようにしてもよい。
【００７７】
なお、図８の例では、ビット単位信号７０４のビット数は複数ビットであり、３種類以上のシャッフルパターン生成に対応していたが、ビット単位信号７０４のビット数はこれに限られない。例えば、１ビットとしてもよい。
【００７８】
また、本実施の形態において、シフタ７０６、複製器７０７、加算器７０８を専用の回路としているが、他の演算回路とすべてまたは一部を共用してもよい。
【００７９】
なお、本実施の形態において、加算器７０８において各インデックスに右端から０、１、２、…と加算する処理を、左端から０、１、２、…と加算する処理に変更することで、データ内のデータ要素のインデックスを左端から０、１、２、…とするシャッフルパターンの生成にも容易に対応できる。
【００８０】
（実施の形態３）
実施の形態３は、実施の形態２のシャッフルパターン生成回路に対して、ビット幅の縮小または拡張を行うビット変更器をさらに備えることで、ビット幅の縮小や拡張にも対応したシャッフルパターンの生成を図るものである。
【００８１】
図１５に示すように、シャッフルパターン生成回路１５０１は、入力シャッフルパターン１５０２とビット単位信号１５０４を入力とし、出力シャッフルパターン１５０３を出力とし、シフト複製部１５０５（シフタ１５０６および複製器１５０７を含む。）と加算器１５０８とビット変更器１５０９を備える。
【００８２】
ビット単位信号１５０４は、左ビットシフトのビット数、各インデックスの複製の個数、および各インデックスに加算する値、ビット幅の縮小（拡張）の幅などを制御する信号である。
【００８３】
シフタ１５０６、複製器１５０７、加算器１５０８およびビット変更器１５０９は、このビット単位信号１５０４を受け付けて、それぞれ左ビットシフト、各インデックスの複製、各インデックスへの値の加算およびビット幅の変更を行う。
【００８４】
＜ビット単位信号０の場合＞
ビット単位信号１５０４が０の場合の動作を説明する。
【００８５】
図１６は、４×１６シャッフルパターン１５０２から８×８シャッフルパターン１５０３を生成する流れを示す。
【００８６】
まず、シフタ１５０６は、４×１６シャッフルパターン１５０２の各インデックスを１ビット左ビットシフトして下位１６ビットを抽出することで、インデックス列１６０１を生成する。
【００８７】
続いて、複製器１５０７は、インデックス列１６０１の各インデックスを２個ずつ複製し、インデックス列１６０２を生成する。
【００８８】
そして、加算器１５０８は、インデックス列１６０２に対して、各インデックスに左端から１、０、１、０、１、０、１、０を加算する。
【００８９】
最後に、ビット変更器１５０９は、加算により得られたインデックス列１６０３に対して、各インデックスの１６ビットのうちの下位８ビットを抽出し、８×８シャッフルパターン１５０３を生成する。
【００９０】
＜ビット単位信号１の場合＞
ビット単位信号１５０４が１の場合の動作を説明する。
【００９１】
図１７は、２×３２シャッフルパターン１５０２から４×１６シャッフルパターン１５０３を生成する流れを示す。
【００９２】
まず、シフタ１５０６は、２×３２シャッフルパターン１５０２の各インデックスを１ビット左ビットシフトして下位３２ビットを抽出することで、インデックス列１７０１を生成する。
【００９３】
続いて、複製器１５０７は、インデックス列１７０１の各インデックスを２個ずつ複製し、インデックス列１７０２を生成する。
【００９４】
そして、加算器１５０８は、インデックス列１７０２に対して、各インデックスに左端から１、０、１、０、を加算する。
【００９５】
最後に、ビット変更器１５０９は、加算により得られたインデックス列１７０３に対して、各インデックスの３２ビットのうち下位１６ビットを抽出し、４×１６シャッフルパターン１５０３を生成する。
【００９６】
＜ビット単位信号２の場合＞
図１６、図１７のような例に限らず、２×３２シャッフルパターンから８×８シャッフルパターンの生成も可能である。この例をビット単位信号２の場合として説明する。
【００９７】
図１８は、２×３２シャッフルパターン１５０２から８×８シャッフルパターン１５０３を生成する流れを示す。
【００９８】
まず、シフタ１５０６は、２×３２シャッフルパターン１５０２の各インデックスを２ビット左ビットシフトして下位３２ビットを抽出することで、インデックス列１８０１を生成する。
【００９９】
続いて、複製器１５０７は、インデックス列１８０１の各インデックスを４個ずつ複製し、インデックス列１８０２を生成する。
【０１００】
そして、加算器１５０８は、インデックス列１８０２に対して、各インデックスに左端から３、２、１、０、３、２、１、０を加算する。
【０１０１】
最後に、ビット変更器１５０９は、加算により得られたインデックス列１８０３に対して、各インデックスの３２ビットのうち下位８ビットを抽出し、８×８シャッフルパターン１５０３を生成する。
【０１０２】
以上説明したように、本実施の形態によれば、直列に接続したシフタ１５０６、複製器１５０７、加算器１５０８、ビット変更器１５０９によりシャッフルパターンを生成することにより、高速な生成が可能となる。
【０１０３】
また、特に、ビット変更器１５０９を備えるので、入力シャッフルパターンと出力シャッフルパターンのビット幅が同じである場合も高速なシャッフルパターン生成が可能となる。
【０１０４】
また、ビット単位信号１５０４で各ブロックの挙動を制御することによって、同一の回路構成でありながら、インデックスの個数や各インデックスのビット幅が相異なる多様なシャッフルパターン生成が可能となる。
【０１０５】
なお、本実施の形態で説明した、入力シャッフルパターンや出力シャッフルパターンのインデックスの個数や各インデックスのビット幅は一例であり、これに限られない。ビット幅を拡張したり、各ブロック（シフタ１５０６、複製器１５０７、加算器１５０８、ビット変更器１５０９）で処理するインデックスの個数を増やしたりすることもあり得る。あるいは、入力シャッフルパターンや出力シャッフルパターンのビット幅を縮小し、各ブロック（シフタ１５０６、複製器１５０７、加算器１５０８、ビット変更器１５０９）で処理するインデックスの個数を減らすこともあり得る。
【０１０６】
なお、本実施の形態において、シフタ１５０６、複製器１５０７、加算器１５０８、ビット変更器１５０９の順で処理を行っているが、処理の順番はこれに限られない。実施の形態２の図１２のように、複製器１５０７とシフタ１５０６の処理の順番を反転させてもよい。また、ビット変更器１５０９はシフタ１５０６の前段または後段、複製器１５０７の前段または後段、加算器１５０８の前段または後段のどの位置にも挿入され得る。
【０１０７】
なお、本実施の形態において、ビット単位信号１５０４を複数ビットの信号としたが、ビット数はこれに限られない。例えば、０か１かを示す１ビットのビット単位信号としてもよい。
【０１０８】
なお、本実施の形態において、ビット単位信号１５０４を単一の信号としたが、シフタ１５０６、複製器１５０７、加算器１５０８、ビット変更器１５０９に対して個別または一部個別の信号を入力としてもよい。また、図１４のように入力シャッフルパターンを示すビット単位信号Ａと、出力シャッフルパターンを示すビット単位信号Ｂとを用いても構わない。
【０１０９】
なお、本実施の形態において、シフタ１５０６、複製器１５０７、加算器１５０８、ビット変更器１５０９を専用の回路としているが、他の演算回路とすべてまたは一部を共用してもよい。
【０１１０】
その他、実施の形態２の後半で述べた様々な構成を本実施の形態に組み合わせてもよい。
【０１１１】
（実施の形態４）
図１９は、実施の形態４におけるシャッフルパターン生成回路の図である。
【０１１２】
図１９において、シャッフルパターン生成回路１９０１は、３２ビットの入力シャッフルパターン１９０２から６４ビットの出力シャッフルパターン１９０３を生成する。シャッフルパターン生成回路１９０１は、２×８インデックステーブル１９０５、４×８インデックステーブル１９０６、インデックステーブル参照器１９０７から構成される。
【０１１３】
２×８インデックステーブル１９０５は、４個の８ビットインデックスを入力とし、入力インデックスそれぞれに対して、２個の８ビットインデックスを出力する。
【０１１４】
図２０に２×８インデックステーブル１９０５が保持するデータを示す。２×８インデックステーブル１９０５は、例えば入力された８ビットインデックスが０の場合、１と０の２個の８ビットインデックスを出力する。
【０１１５】
４×８インデックステーブル１９０６は、２個の１６ビットインデックスを入力とし、入力インデックスそれぞれに対して、４個の８ビットインデックスを出力する。図２１に４×８インデックステーブル１９０６が保持するデータを示す。４×８インデックステーブル１９０６は、例えば入力された１６ビットインデックスが０の場合、３、２、１、０の４個の８ビットインデックスを出力する。
【０１１６】
インデックステーブル参照器１９０７は、入力されたビット単位信号１９０４を受け付けて、このビット単位信号１９０４が示すテーブルへとインデックスを渡す。そして、渡したインデックスに応じたインデックスをテーブルから受け取り、受け取ったインデックスを基にシャッフルパターンを生成する。
【０１１７】
本実施の形態では、インデックステーブル参照器１９０７は、ビット単位信号１９０４が０の場合は２×８インデックステーブル１９０５へとインデックスを渡し、ビット単位信号１９０４が１の場合は４×８インデックステーブル１９０６へとインデックスを渡すものとする。以下、ビット単位信号１９０４が０の場合と１の場合それぞれの動作について説明する。
【０１１８】
＜ビット単位信号０の場合＞
ビット単位信号１９０４が０の場合の動作を説明する。
【０１１９】
入力シャッフルパターン１９０２は４個の８ビットのインデックスからなり、出力シャッフルパターン１９０３は８個の８ビットのインデックスからなる。インテックステーブル参照器１９０７は、シャッフルパターン１９０２の各インデックスを２×８インデックステーブル１９０５に渡す。
【０１２０】
２×８インデックステーブル１９０５は、入力された１個のインデックスにつき２個のインデックスを出力し、インデックステーブル参照器１９０７に渡す。インデックステーブル参照器１９０７は、入力シャッフルパターンの左端のインデックスに対応するインデックス、その右隣のインデックスに対応するインデックス、と順に連結して、出力シャッフルパターン１９０３を生成する。
【０１２１】
一例として、４個の８ビットのインデックスが、「０、１、２、３」とすると、
２×８インデックステーブル１９０５は、
「０」の入力インデックスから「１、０」、
「１」の入力インデックスから「３、２」、
「２」の入力インデックスから「５、４」、
「３」の入力インデックスから「７、６」、
の出力インデックスを出力する。
【０１２２】
そして、インデックステーブル参照器１９０７は、これら４組の出力インデックスを左から順に連結して「１、０、３、２、５、４、７、６」というシャッフルパターンを生成する。
【０１２３】
＜ビット単位信号１の場合＞
続いて、ビット単位信号１９０４が１の場合の動作を説明する。入力シャッフルパターン１９０２は２個の１６ビットのインデックスからなり、出力シャッフルパターン１９０３は８個の８ビットのインデックスからなる。インテックステーブル参照器１９０７は、シャッフルパターン１９０２の各インデックスを４×８インデックステーブル１９０６に渡す。
【０１２４】
４×８インデックステーブル１９０６は、入力された１個のインデックスにつき４個のインデックスを抽出し、インデックステーブル参照器１９０７に渡す。インデックステーブル参照器１９０７は、入力シャッフルパターンの左端のインデックスに対応するインデックス、その右隣のインデックスに対応するインデックス、と順に連結して、出力シャッフルパターン１９０３を生成する。
【０１２５】
一例として、２個の１６ビットのインデックスが、「０、１」とすると、
４×８インデックステーブル１９０６は、
「０」の入力インデックスから「３、２、１、０」、
「１」の入力インデックスから「７、６、５、４」、
の出力インデックスを出力する。
【０１２６】
そして、インデックステーブル参照器１９０７は、これら２組の出力インデックスを左から順に連結して「３、２、１、０、７、６、５、４」というシャッフルパターンを生成する。
【０１２７】
以上説明した実施の形態４に係る構成によれば、ビット単位信号１９０４によってインデックステーブルを切り替えることによって、複数のインデックスビット幅の組み合わせに対応したシャッフルパターン生成が可能となる。
【０１２８】
なお、本実施の形態において、インデックステーブルに格納するインデックスの値やビット幅、１個のインデックスに対して出力されるインデックスの個数などは上で述べた値と異なってもよい。
【０１２９】
なお、本実施の形態において、インデックステーブルの入力を複数個としたが、１個の入力だけを受け付けるインデックステーブルを複数持ってもよいし、テーブルではなく例えば多入力１出力セレクタなどの論理回路で構成してもよい。
【０１３０】
なお、本実施の形態において、２×８インデックステーブル１９０５、４×８インデックステーブル１９０６、インデックステーブル参照器１９０７を専用の回路としているが、他の演算回路とすべてまたは一部を共用してもよい。
【０１３１】
（実施の形態５）
図２２は、実施の形態５のシャッフルパターン生成回路を含むプロセッサの図である。
【０１３２】
図２２において、プロセッサ２２０１は、３２ビットの命令ビット列２２０２に対応する処理を行う。プロセッサ２２０１は、命令デコーダ２２０３、ＳＩＭＤレジスタファイル２２０４、シャッフルパターン生成回路２２０５および２２０６、ＡＬＵ２２０７、乗算器２２０８から構成される。シャッフルパターン生成回路２２０５は実施の形態２のシャッフルパターン生成回路７０１、シャッフルパターン生成回路２２０６は実施の形態３のシャッフルパターン生成回路１５０１と同じ構成である。
【０１３３】
実施の形態２および３のシャッフルパターン生成回路７０１および１５０１における、入力シャッフルパターン７０２および１５０２がＳＩＭＤレジスタファイル２２０４から渡される入力シャッフルパターンに対応する。また、出力シャッフルパターン７０３および１５０３がＳＩＭＤレジスタファイル２２０４に渡す出力シャッフルパターン、ビット単位信号７０４および１５０４がビット単位信号２２１１および２２１２に対応する。
【０１３４】
ＳＩＭＤレジスタファイル２２０４は、３２個の６４ビットのＳＩＭＤレジスタを持ち、各ＳＩＭＤレジスタはＲ０からＲ３１で表す。
【０１３５】
図２３に、シャッフルパターン生成回路２２０５および２２０６を使用するシャッフルパターン生成命令の命令フォーマットを示す。
【０１３６】
ｇｅｎｓｆｌｐｔｎｌ．８．８命令は、８×８シャッフルパターンから１６×８シャッフルパターンを生成する命令である。８個の８ビットインデックスからなる入力シャッフルパターンをＳＩＭＤレジスタＲａから取得し、１６個の８ビットインデックスからなる出力シャッフルパターンを生成し、出力シャッフルパターンの上位６４ビットをＳＩＭＤレジスタＲｂ、下位６４ビットをＲｂの次のレジスタ（Ｒｂ＋１と表記）に格納する。
【０１３７】
ｇｅｎｓｆｌｐｔｎｌ．１６．１６命令、ｇｅｎｓｆｌｐｔｎｌ．１６．８命令も同様に、それぞれ、４×１６シャッフルパターンから８×１６シャッフルパターンを、４×１６シャッフルパターンから１６×８シャッフルパターンを生成する命令である。
【０１３８】
ｇｅｎｓｆｌｐｔｎ．１６．８命令は、４×１６シャッフルパターンから８×８シャッフルパターンを生成する命令である。４個の１６ビットインデックスからなる入力シャッフルパターンをＳＩＭＤレジスタＲａから取得し、８個の８ビットインデックスからなる出力シャッフルパターンを生成し、ＳＩＭＤレジスタＲｂに格納する。
【０１３９】
ｇｅｎｓｆｌｐｔｎ．３２．１６命令、ｇｅｎｓｆｌｐｔｎ．３２．８命令も同様に、それぞれ、２×３２シャッフルパターンから４×１６シャッフルパターンを、２×３２シャッフルパターンから８×８シャッフルパターンを生成する命令である。
【０１４０】
ｇｅｎｓｆｌｐｔｎｌ．８命令、ｇｅｎｓｆｌｐｔｎｌ命令は、ｇｅｎｓｆｌｐｔｎｌ．８．８命令の別名である。また、ｇｅｎｓｆｌｐｔｎｌ．１６命令はｇｅｎｓｆｌｐｔｎｌ．１６．１６命令の別名である。同様に、ｇｅｎｓｆｌｐｔｎ．１６命令及びｇｅｎｓｆｌｐｔｎ命令はｇｅｎｓｆｌｐｔｎ．１６．８命令の別名であり、ｇｅｎｓｆｌｐｔｎ．３２命令はｇｅｎｓｆｌｐｔｎ．３２．１６命令の別名である。
【０１４１】
図２４に、図２３に示した命令フォーマットのビットマップを示す。ビットマップは、２０ビットの命令識別コード、５ビットのＲａ領域、５ビットのＲｂ領域、１ビットのＩｃ領域、１ビットのＩｄ領域から構成される。
【０１４２】
命令識別コードはｇｅｎｓｆｌｐｔｎｌ命令またはｇｅｎｓｆｌｐｔｎ命令であることを示し、ｇｅｎｓｆｌｐｔｎｌ命令であれば０、ｇｅｎｓｆｌｐｔｎ命令であれば１である。Ｒａ領域は入力シャッフルパターンの格納レジスタを、Ｒｂ領域は出力シャッフルパターンの格納レジスタを示す。Ｉｃ領域は入力シャッフルパターンのインデックスのビット幅を示し、入力シャッフルパターンのインデックスのビット幅が１６ならば０であり、３２ならば１である。Ｉｄ領域は出力シャッフルパターンのインデックスのビット幅を示し、出力シャッフルパターンのインデックスのビット幅が８ならば０であり、１６ならば１である。
【０１４３】
例として、プロセッサ２２０１におけるｇｅｎｓｆｌｐｔｎｌ．８．８  Ｒ０：Ｒ１，Ｒ４命令の動作を説明する。命令デコーダ２２０３は、命令ビット列２２０２を取得し、命令識別コードからｇｅｎｓｆｌｐｔｎｌ命令であることを検知する。そして、ＳＩＭＤレジスタファイル２２０４に入力レジスタ番号信号２２０９、出力レジスタ番号信号２２１０を介して、入力および出力シャッフルパターンの格納ＳＩＭＤレジスタがそれぞれＲ４およびＲ０であることを通知する。また、ｇｅｎｓｆｌｐｔｎｌ命令の場合はシャッフルパターン生成回路２２０５が駆動されるため、シャッフルパターン生成回路２２０５に、ビット単位信号２２１１を介して、入力および出力シャッフルパターンのインデックスのビット幅が８ビットであることを通知する。シャッフルパターン生成回路２２０６のビット単位信号２２１２には何も通知しない。ＳＩＭＤレジスタファイル２２０４は、入力レジスタ番号信号２２０９に合わせてＳＩＭＤレジスタＲ４から６４ビットのシャッフルパターンを取得し、シャッフルパターン生成回路２２０５に渡す。シャッフルパターン生成回路２２０５は、命令デコーダ２２０３からのビット単位信号２２１１に基づきシャッフルパターンを生成する。
【０１４４】
シャッフルパターン生成回路２２０５は、実施の形態２のシャッフルパターン生成回路７０１と同じ動作をし、８×８シャッフルパターンから、１６×８シャッフルパターンを生成する。ＳＩＭＤレジスタファイルは、出力レジスタ番号信号２２１０に合わせて、シャッフルパターン生成回路２２０５から取得したシャッフルパターンの上位６４ビットをＳＩＭＤレジスタＲ０に、下位６４ビットをＳＩＭＤレジスタＲ１に格納する。
【０１４５】
もう一つの例として、プロセッサ２２０１におけるｇｅｎｓｆｌｐｔｎ．１６．８  Ｒ０，Ｒ４命令の動作を説明する。命令デコーダ２２０３は、命令ビット列２２０２を取得し、命令識別コードからｇｅｎｓｆｌｐｔｎ命令であることを検知する。そして、ＳＩＭＤレジスタファイル２２０４に入力レジスタ番号信号２２０９、出力レジスタ番号信号２２１０を介して、入力および出力シャッフルパターンの格納ＳＩＭＤレジスタがそれぞれＲ４およびＲ０であることを通知する。また、ｇｅｎｓｆｌｐｔｎ命令の場合はシャッフルパターン生成回路２２０６が駆動されるため、シャッフルパターン生成回路２２０６に、ビット単位信号２２１２を介して、入力および出力シャッフルパターンのインデックスのビット幅がそれぞれ１６ビット、８ビットであることを通知する。シャッフルパターン生成回路２２０５のビット単位信号２２１１には何も通知しない。ＳＩＭＤレジスタファイル２２０４は、入力レジスタ番号信号２２０９に合わせてＳＩＭＤレジスタＲ４から６４ビットのシャッフルパターンを取得し、シャッフルパターン生成回路２２０６に渡す。シャッフルパターン生成回路２２０６は、命令デコーダ２２０３からのビット単位信号２２１２に基づきシャッフルパターンを生成する。シャッフルパターン生成回路２２０６は、実施の形態３のシャッフルパターン生成回路１５０１と同じ動作をし、４×１６シャッフルパターンから、８×８シャッフルパターンを生成する。ＳＩＭＤレジスタファイルは、出力レジスタ番号信号２２１０に合わせて、シャッフルパターン生成回路２２０６から取得したシャッフルパターンをＳＩＭＤレジスタＲ０に格納する。
【０１４６】
かかる構成によれば、シャッフルパターン生成を１命令で実行可能なプロセッサの実現が可能となる。
【０１４７】
なお、本実施の形態において、シャッフルパターン生成回路２２０５はシャッフルパターン生成回路７０１と同じ構成、シャッフルパターン生成回路２２０６はシャッフルパターン生成回路１５０１と同じ構成であるとして説明したが、少なくともどちらか一方が実施の形態４で示すシャッフルパターン生成回路１９０１（図１９）で構成されていてもよい。また、実施の形態２、３、４のいずれかのシャッフルパターン生成回路のみで構成されていてもよい。
【０１４８】
なお、本実施の形態において、シャッフルパターン生成回路２２０５および２２０６、ＡＬＵ２２０７、乗算器２２０８を持つとしたが、それぞれを複数持ってもよいし、他の演算器を持ってもよい。
【０１４９】
また、ビット単位信号２２１１および２２１２を入力シャッフルパターンビット単位信号、出力シャッフルパターンビット単位信号などと分けて実装してもよい。また、例えばシャッフルパターン生成回路内のシフタのシフタ量などを直接指定する信号を持ってもよい。
【０１５０】
なお、本実施の形態において、シャッフルパターン生成回路２２０５および２２０６を専用の回路としているが、ＡＬＵ２２０７、乗算器２２０８や他の演算回路とすべてまたは一部を共用してもよい。
【０１５１】
なお、本実施の形態において、ＳＩＭＤレジスタファイル２２０４を持つとしたが、他の特殊なレジスタを持ってもよい。
【０１５２】
なお、本実施の形態において、６種類の命令を持つとしたが、一部の命令を持ってもよいし、他のインデックスビット幅に対応したシャッフル命令を持ってもよい。
【０１５３】
なお、本実施の形態において、一部の命令を別名として定義したが、記載のとおりに別名が対応しなくてもよいし、別名がなくてもよいし、別名とした命令のみを持つようにしてもよい。
【０１５４】
なお、本実施の形態において、シャッフル命令のビットマップを、ＩｃおよびＩｄに１ビットずつ割り当てたが、それぞれを複数ビットで示してもよい。
【０１５５】
なお、本実施の形態において、ビットマップのＩｃおよびＩｄを別々のビット領域として示したが、１つの領域で示してもよい。また、例えば０の場合は８×８シャッフルパターンから１６×８シャッフルパターン生成、１の場合は４×１６シャッフルパターンから１６×８シャッフルパターンの生成など、入力シャッフルパターンと出力シャッフルパターンのインデックスビット幅を組み合わせて指定する形式でもよい。
【０１５６】
なお、本実施の形態において、ビットマップのＩｃおよびＩｄを命令識別コードと別のビットとして示したが、命令識別コードに含めてもよい。
【０１５７】
なお、本実施の形態において、命令ビット列２２０２は３２ビットとしたが、３２以外のビット幅でもよい。
【０１５８】
なお、本実施の形態において、ＳＩＭＤレジスタファイル２２０４は３２個の６４ビットのレジスタを持つとしたが、３２以外の個数、６４以外のビット幅でもよい。
【０１５９】
なお、図２４に示すステップを含むシャッフルパターン方法として提供することも考えられる。
【０１６０】
（実施の形態６）
本実施の形態では、実施の形態５の図２３などで説明したシャッフルパターン生成に係る命令についてさらに詳しく説明する。
【０１６１】
図２６（ａ）は、シャッフルパターン生成命令のフォーマットを示す。
【０１６２】
ｇｅｎｓｆｌｐｔｎｌ命令は、入力シャッフルパターンをＳＩＭＤレジスタＲａから取得し、Ｒｂの値に応じて規定される入出力のシャッフルパターンにしたがって出力シャッフルパターンを生成し、生成した出力シャッフルパターンの上位の所定数ビットをＳＩＭＤレジスタＲｃに下位の所定数ビットをＲｃの次のレジスタ（Ｒｃ＋１と表記）に格納する。
【０１６３】
ｇｅｎｓｆｌｐｔｎ命令は、入力シャッフルパターンをＳＩＭＤレジスタＲａから取得し、Ｒｂの値に応じて規定される入出力のシャッフルパターンにしたがって出力シャッフルパターンを生成し、生成した出力シャッフルパターンをＳＩＭＤレジスタＲｃに格納する。
【０１６４】
以下、命令の具体的な仕様について説明する。
【０１６５】
（命令１）ｇｅｎｓｆｌｐｔｎｌ．８．８  Ｒｂ：Ｒｂ＋１，Ｒａ
（別名：ｇｅｎｓｆｌｐｔｎｌ．８、ｇｅｎｓｆｌｐｔｎｌ）
この命令は、Ｒａの８ｘ８シャッフルパターンから１６ｘ８シャッフルパターンを生成し、ＲｂおよびＲｂ+１に格納する。
【０１６６】
本命令によれば、Ｒａの８ｘ８シャッフルパターンは、１ビット左シフトされ２個ずつ複製されて、１または０が選択加算されることにより、１６ｘ８シャッフルパターンが生成される。これは、シャッフルパターンの入力が８ｘ８で出力が１６ｘ８であり、これは、図９で説明した入力が４×８で出力が８×８の処理と似ているため、入力・出力シャッフルパターンのイメージは図９を参照されたい。
【０１６７】
なお、下記において、[Ｂ:Ａ]は、Ａ番目からＢ番目までのビット位置を示す。例えば、[６３:５６]は５６番目から６３番目までのビット位置を示す。また「<< １」は、１ビット左ビットシフトを示す。
Ｒｂ[６３:５６] = ( Ｒａ[６３:５６] << １ ) + １ ;
Ｒｂ[５５:４８] = ( Ｒａ[６３:５６] << １ ) + ０ ;
Ｒｂ[４７:４０] = ( Ｒａ[５５:４８] << １ ) + １ ;
Ｒｂ[３９:３２] = ( Ｒａ[５５:４８] << １ ) + ０ ;
Ｒｂ[３１:２４] = ( Ｒａ[４７:４０] << １ ) + １ ;
Ｒｂ[２３:１６] = ( Ｒａ[４７:４０] << １ ) + ０ ;
Ｒｂ[１５: ８] = ( Ｒａ[３９:３２] << １ ) + １ ;
Ｒｂ[ ７: ０] = ( Ｒａ[３９:３２] << １ ) + ０ ;
Ｒｂ+１[６３:５６] = ( Ｒａ[３１:２４] << １ ) + １ ;
Ｒｂ+１[５５:４８] = ( Ｒａ[３１:２４] << １ ) + ０ ;
Ｒｂ+１[４７:４０] = ( Ｒａ[２３:１６] << １ ) + １ ;
Ｒｂ+１[３９:３２] = ( Ｒａ[２３:１６] << １ ) + ０ ;
Ｒｂ+１[３１:２４] = ( Ｒａ[１５: ８] << １ ) + １ ;
Ｒｂ+１[２３:１６] = ( Ｒａ[１５: ８] << １ ) + ０ ;
Ｒｂ+１[１５: ８] = ( Ｒａ[ ７: ０] << １ ) + １ ;
Ｒｂ+１[ ７: ０] = ( Ｒａ[ ７: ０] << １ ) + ０ ;
---------------------------------------------
（命令２）ｇｅｎｓｆｌｐｔｎｌ.１６.１６ Ｒｂ:Ｒｂ+１,Ｒａ
(別名：ｇｅｎｓｆｌｐｔｎｌ.１６)
この命令は、Ｒａの４ｘ１６シャッフルパターンから８ｘ１６シャッフルパターンを生成し、ＲｂおよびＲｂ+１に格納する。
Ｒｂ[６３:４８] = ( Ｒａ[６３:４８] << １ ) + １ ;
Ｒｂ[４７:３２] = ( Ｒａ[６３:４８] << １ ) + ０ ;
Ｒｂ[３１:１６] = ( Ｒａ[４７:３２] << １ ) + １ ;
Ｒｂ[１５: ０] = ( Ｒａ[４７:３２] << １ ) + ０ ;
Ｒｂ+１[６３:４８] = ( Ｒａ[３１:１６] << １ ) + １ ;
Ｒｂ+１[４７:３２] = ( Ｒａ[３１:１６] << １ ) + ０ ;
Ｒｂ+１[３１:１６] = ( Ｒａ[１５: ０] << １ ) + １ ;
Ｒｂ+１[１５: ０] = ( Ｒａ[１５: ０] << １ ) + ０ ;
---------------------------------------------
（命令３）ｇｅｎｓｆｌｐｔｎｌ.１６.８ Ｒｂ:Ｒｂ+１,Ｒａ
(別名：ｇｅｎｓｆｌｐｔｎ.１６,ｇｅｎｓｆｌｐｔｎ)
この命令は、Ｒａの４ｘ１６シャッフルパターンから１６ｘ８シャッフルパターンを生成し、ＲｂおよびＲｂ+１に格納する。
Ｒｂ[６３:５６] = ( Ｒａ[６３:４８] << １ ) + ３ ;
Ｒｂ[５５:４８] = ( Ｒａ[６３:４８] << １ ) + ２ ;
Ｒｂ[４７:４０] = ( Ｒａ[６３:４８] << １ ) + １ ;
Ｒｂ[３９:３２] = ( Ｒａ[６３:４８] << １ ) + ０ ;
Ｒｂ[３１:２４] = ( Ｒａ[４７:３２] << １ ) + ３ ;
Ｒｂ[２３:１６] = ( Ｒａ[４７:３２] << １ ) + ２ ;
Ｒｂ[１５: ８] = ( Ｒａ[４７:３２] << １ ) + １ ;
Ｒｂ[ ７: ０] = ( Ｒａ[４７:３２] << １ ) + ０ ;
Ｒｂ+１[６３:５６] = ( Ｒａ[３１:１６] << １ ) + ３ ;
Ｒｂ+１[５５:４８] = ( Ｒａ[３１:１６] << １ ) + ２ ;
Ｒｂ+１[４７:４０] = ( Ｒａ[３１:１６] << １ ) + １ ;
Ｒｂ+１[３９:３２] = ( Ｒａ[３１:１６] << １ ) + ０ ;
Ｒｂ+１[３１:２４] = ( Ｒａ[１５: ０] << １ ) + ３ ;
Ｒｂ+１[２３:１６] = ( Ｒａ[１５: ０] << １ ) + ２ ;
Ｒｂ+１[１５: ８] = ( Ｒａ[１５: ０] << １ ) + １ ;
Ｒｂ+１[ ７: ０] = ( Ｒａ[１５: ０] << １ ) + ０ ;
---------------------------------------------
（命令４）ｇｅｎｓｆｌｐｔｎ.１６.８ Ｒｂ,Ｒａ
この命令は、Ｒａの４ｘ１６シャッフルパターンから８ｘ８シャッフルパターンを生成し、Ｒｂに格納する。
Ｒｂ[６３:５６] = ( Ｒａ[６３:４８] << １ ) + １ ;
Ｒｂ[５５:４８] = ( Ｒａ[６３:４８] << １ ) + ０ ;
Ｒｂ[４７:４０] = ( Ｒａ[４７:３２] << １ ) + １ ;
Ｒｂ[３９:３２] = ( Ｒａ[４７:３２] << １ ) + ０ ;
Ｒｂ[３１:２４] = ( Ｒａ[３１:１６] << １ ) + １ ;
Ｒｂ[２３:１６] = ( Ｒａ[３１:１６] << １ ) + ０ ;
Ｒｂ[１５: ８] = ( Ｒａ[１５: ０] << １ ) + １ ;
Ｒｂ[ ７: ０] = ( Ｒａ[１５: ０] << １ ) + ０ ;
---------------------------------------------
（命令５）ｇｅｎｓｆｌｐｔｎ.３２.１６ Ｒｂ,Ｒａ
(別名：ｇｅｎｓｆｌｐｔｎ.３２)
この命令は、Ｒａの２ｘ３２シャッフルパターンから４ｘ１６シャッフルパターンを生成し、Ｒｂに格納する。
Ｒｂ[６３:４８] = ( Ｒａ[６３:３２] << １ ) + １ ;
Ｒｂ[４７:３２] = ( Ｒａ[６３:３２] << １ ) + ０ ;
Ｒｂ[３１:１６] = ( Ｒａ[３１: ０] << １ ) + １ ;
Ｒｂ[１５: ０] = ( Ｒａ[３１: ０] << １ ) + ０ ;
---------------------------------------------
（命令６）ｇｅｎｓｆｌｐｔｎ.３２.８ Ｒｂ,Ｒａ
この命令は、Ｒａの２ｘ３２シャッフルパターンから８ｘ８シャッフルパターンを生成し、Ｒｂに格納する。
Ｒｂ[６３:５６] = ( Ｒａ[６３:３２] << １ ) + ３ ;
Ｒｂ[５５:４８] = ( Ｒａ[６３:３２] << １ ) + ２ ;
Ｒｂ[４７:４０] = ( Ｒａ[６３:３２] << １ ) + １ ;
Ｒｂ[３９:３２] = ( Ｒａ[６３:３２] << １ ) + ０ ;
Ｒｂ[３１:２４] = ( Ｒａ[３１: ０] << １ ) + ３ ;
Ｒｂ[２３:１６] = ( Ｒａ[３１: ０] << １ ) + ２ ;
Ｒｂ[１５: ８] = ( Ｒａ[３１: ０] << １ ) + １ ;
Ｒｂ[ ７: ０] = ( Ｒａ[３１: ０] << １ ) + ０ ;
---------------------------------------------
（命令７）ｇｅｎｓｆｌｐｔｎｌ Ｒｃ:Ｒｃ+１,Ｒａ,Ｒｂ
この命令は、Ｒｂの値に応じて、Ｒａからシャッフルパターンを生成し、ＲｃおよびＲｃ＋１に格納する。Ｒｂ[１:０]の値により条件が分岐するIF ELSE文となっている。なお、Ｒｂ[１:０]が０、１、２以外の場合の処理は不定である。
ｉｆ ( Ｒｂ[１:０]=０ ) [
Ｒｃ[６３:５６] = ( Ｒａ[６３:５６] << １ ) + １ ;
Ｒｃ[５５:４８] = ( Ｒａ[６３:５６] << １ ) + ０ ;
Ｒｃ[４７:４０] = ( Ｒａ[５５:４８] << １ ) + １ ;
Ｒｃ[３９:３２] = ( Ｒａ[５５:４８] << １ ) + ０ ;
Ｒｃ[３１:２４] = ( Ｒａ[４７:４０] << １ ) + １ ;
Ｒｃ[２３:１６] = ( Ｒａ[４７:４０] << １ ) + ０ ;
Ｒｃ[１５: ８] = ( Ｒａ[３９:３２] << １ ) + １ ;
Ｒｃ[ ７: ０] = ( Ｒａ[３９:３２] << １ ) + ０ ;
Ｒｃ+１[６３:５６] = ( Ｒａ[３１:２４] << １ ) + １ ;
Ｒｃ+１[５５:４８] = ( Ｒａ[３１:２４] << １ ) + ０ ;
Ｒｃ+１[４７:４０] = ( Ｒａ[２３:１６] << １ ) + １ ;
Ｒｃ+１[３９:３２] = ( Ｒａ[２３:１６] << １ ) + ０ ;
Ｒｃ+１[３１:２４] = ( Ｒａ[１５: ８] << １ ) + １ ;
Ｒｃ+１[２３:１６] = ( Ｒａ[１５: ８] << １ ) + ０ ;
Ｒｃ+１[１５: ８] = ( Ｒａ[ ７: ０] << １ ) + １ ;
Ｒｃ+１[ ７: ０] = ( Ｒａ[ ７: ０] << １ ) + ０ ;
] ｅｌｓｅ ｉｆ ( Ｒｂ[１:０]=１ ) [
Ｒｃ[６３:４８] = ( Ｒａ[６３:４８] << １ ) + １ ;
Ｒｃ[４７:３２] = ( Ｒａ[６３:４８] << １ ) + ０ ;
Ｒｃ[３１:１６] = ( Ｒａ[４７:３２] << １ ) + １ ;
Ｒｃ[１５: ０] = ( Ｒａ[４７:３２] << １ ) + ０ ;
Ｒｃ+１[６３:４８] = ( Ｒａ[３１:１６] << １ ) + １ ;
Ｒｃ+１[４７:３２] = ( Ｒａ[３１:１６] << １ ) + ０ ;
Ｒｃ+１[３１:１６] = ( Ｒａ[１５: ０] << １ ) + １ ;
Ｒｃ+１[１５: ０] = ( Ｒａ[１５: ０] << １ ) + ０ ;
] ｅｌｓｅ ｉｆ ( Ｒｂ[１:０]=２ ) [
Ｒｃ[６３:５６] = ( Ｒａ[６３:４８] << １ ) + ３ ;
Ｒｃ[５５:４８] = ( Ｒａ[６３:４８] << １ ) + ２ ;
Ｒｃ[４７:４０] = ( Ｒａ[６３:４８] << １ ) + １ ;
Ｒｃ[３９:３２] = ( Ｒａ[６３:４８] << １ ) + ０ ;
Ｒｃ[３１:２４] = ( Ｒａ[４７:３２] << １ ) + ３ ;
Ｒｃ[２３:１６] = ( Ｒａ[４７:３２] << １ ) + ２ ;
Ｒｃ[１５: ８] = ( Ｒａ[４７:３２] << １ ) + １ ;
Ｒｃ[ ７: ０] = ( Ｒａ[４７:３２] << １ ) + ０ ;
Ｒｃ+１[６３:５６] = ( Ｒａ[３１:１６] << １ ) + ３ ;
Ｒｃ+１[５５:４８] = ( Ｒａ[３１:１６] << １ ) + ２ ;
Ｒｃ+１[４７:４０] = ( Ｒａ[３１:１６] << １ ) + １ ;
Ｒｃ+１[３９:３２] = ( Ｒａ[３１:１６] << １ ) + ０ ;
Ｒｃ+１[３１:２４] = ( Ｒａ[１５: ０] << １ ) + ３ ;
Ｒｃ+１[２３:１６] = ( Ｒａ[１５: ０] << １ ) + ２ ;
Ｒｃ+１[１５: ８] = ( Ｒａ[１５: ０] << １ ) + １ ;
Ｒｃ+１[ ７: ０] = ( Ｒａ[１５: ０] << １ ) + ０ ;
]
---------------------------------------------
なお、上で示した、Ｒｂの値やＲｂの参照するビットの位置はあくまでも一例であり、これに限られるものではない。また、Ｒｂ［１：０］が０、１、２の場合のみ記載しているが、それ以外の値が定義されていてもよいし、Ｒｂ［１：０］が０、１、２以外の場合の処理が不定ではなく、固定（例えば０と同じ、など）でもよい。これらは次の命令８についても同様である。
（命令８）ｇｅｎｓｆｌｐｔｎ Ｒｃ,Ｒａ,Ｒｂ
この命令は、Ｒｂの値に応じて、Ｒａからシャッフルパターンを生成し、Ｒｃに格納する。Ｒｂ[１:０]が０、１、２以外の場合の処理は不定である。
ｉｆ ( Ｒｂ[１:０]=０ ) [
Ｒｃ[６３:５６] = ( Ｒａ[６３:４８] << １ ) + １ ;
Ｒｃ[５５:４８] = ( Ｒａ[６３:４８] << １ ) + ０ ;
Ｒｃ[４７:４０] = ( Ｒａ[４７:３２] << １ ) + １ ;
Ｒｃ[３９:３２] = ( Ｒａ[４７:３２] << １ ) + ０ ;
Ｒｃ[３１:２４] = ( Ｒａ[３１:１６] << １ ) + １ ;
Ｒｃ[２３:１６] = ( Ｒａ[３１:１６] << １ ) + ０ ;
Ｒｃ[１５: ８] = ( Ｒａ[１５: ０] << １ ) + １ ;
Ｒｃ[ ７: ０] = ( Ｒａ[１５: ０] << １ ) + ０ ;
] ｅｌｓｅ ｉｆ ( Ｒｂ[１:０]=１ ) [
Ｒｃ[６３:４８] = ( Ｒａ[６３:３２] << １ ) + １ ;
Ｒｃ[４７:３２] = ( Ｒａ[６３:３２] << １ ) + ０ ;
Ｒｃ[３１:１６] = ( Ｒａ[３１: ０] << １ ) + １ ;
Ｒｃ[１５: ０] = ( Ｒａ[３１: ０] << １ ) + ０ ;
] ｅｌｓｅ ｉｆ ( Ｒｂ[１:０]=２ ) [
Ｒｃ[６３:５６] = ( Ｒａ[６３:３２] << １ ) + ３ ;
Ｒｃ[５５:４８] = ( Ｒａ[６３:３２] << １ ) + ２ ;
Ｒｃ[４７:４０] = ( Ｒａ[６３:３２] << １ ) + １ ;
Ｒｃ[３９:３２] = ( Ｒａ[６３:３２] << １ ) + ０ ;
Ｒｃ[３１:２４] = ( Ｒａ[３１: ０] << １ ) + ３ ;
Ｒｃ[２３:１６] = ( Ｒａ[３１: ０] << １ ) + ２ ;
Ｒｃ[１５: ８] = ( Ｒａ[３１: ０] << １ ) + １ ;
Ｒｃ[ ７: ０] = ( Ｒａ[３１: ０] << １ ) + ０ ;
]
---------------------------------------------
＜補足１＞
（１）各実施の形態に係るシャッフルパターン生成回路は、シャッフルパターンを生成する方法として実施することもできる。図２５に実施の形態２に対応する方法の流れを示す。この方法では、複数個のインデックスからなるインデックス列を取得（Ｓ２５０１）し、各インデックスをビット単位信号に示されるビット数だけ左ビットシフトし、かつ、各インデックスをビット単位信号に示される複製の個数ずつに複製し（Ｓ２５０２）、各インデックスに対してビット単位信号に示される加算値を加算する（Ｓ２５０３）という手順になっている。
【０１６８】
（２）各実施の形態では、シャッフルパターン生成回路７０１に対して入力する情報を「入力シャッフルパターン」、シャッフルパターン生成回路７０１が生成する情報を「出力シャッフルパターン」と呼んだが、シャッフルパターン生成回路７０１における材料（入力）と生成物（出力）との区別を明確にするために、入力する情報を「インデックス列」と呼び、生成する情報を単に「シャッフルパターン」と呼んでも構わない。
【０１６９】
（３）実施の形態５，６で説明した命令は、各種情報処理装置のプロセッサ、及びそのプロセッサに接続された各種回路に実行させることができる。
【０１７０】
＜補足２＞
本実施の形態は、次の態様を含むものである。
【０１７１】
（１）実施の形態に係るシャッフルパターン生成回路は、複数個のインデックスからなるインデックス列を入力とし、ビット数および複製の個数を示す信号を受け付けて、各インデックスを前記信号に示されるビット数だけ左ビットシフトし、かつ、各インデックスを前記信号に示される複製の個数ずつに複製した、インデックス列を出力するシフト複製部と、前記シフト複製部から出力されたインデックス列を入力とし、各インデックスに対する加算値を示す信号を受け付けて、前記各インデックスに対して前記信号に示される加算値を加算する加算部とを備える。
【０１７２】
（２）また、前記信号に示される加算値は、複製元が同一の各インデックス間では相異なる値であるとしても構わない。
【０１７３】
加算値を、複製元が同一の各インデックス間では相異なる値とすることで、重複や欠落のないシャッフルパターンの生成に貢献できる。
【０１７４】
（３）前記複製の個数はＮ個（Ｎは２以上の整数）であって、前記複製元が同一の各インデックスでは、１個のインデックスの加算値は０であり、残りのＮ−１個のインデックスの加算値は、それぞれ、１、２、・・・、Ｎ−１であるとしても構わない。
【０１７５】
この構成によれば、１個のインデックスの加算値を０とすることで、処理負荷を軽減できる。
【０１７６】
（４）各インデックスに対するビット幅を示す信号を受け付けて、前記信号に示されるビット幅へと各インデックスのビット幅を変更するビット幅変更部を備えるとしても構わない。
【０１７７】
この構成によれば、生成するシャッフルパターンのビット幅を調整することができる。
【０１７８】
（５）前記シフト複製部は、前記各インデックスの左ビットシフト後に各インデックスの複製を行う、または、前記各インデックスの複製後に各インデックスの左ビットシフトを行うとしても構わない。
【０１７９】
（６）実施の形態に係るシャッフルパターン生成回路は、ｊ個のインデックスのそれぞれに対して、ｍ個（ただし、ｍは２以上の整数）のｋビットのインデックスを対応づけたｍ×ｋインデックステーブルと、インデックスのそれぞれに対して、ｎ個（ただし、ｎはｍと異なる２以上の整数）のｌビットのインデックスを対応づけたｎ×ｌインデックステーブルと、ｊ個のインデックスからなるシャッフルパターンと、いずれのインデックステーブルを参照するかを示す信号を受け付けて、前記信号に示されるインデックステーブルを参照して、ｊ×ｍ個またはｊ×ｎ個のインデックスからなるシャッフルパターンを出力する参照部とを備える。
【０１８０】
（７）上記シャッフルパターン生成回路を含むプロセッサであって、入力された命令をデコードし、前記命令に合わせて制御信号を生成する命令デコード部と、前記制御信号に基づいて、前記シャッフルパターン生成回路へのデータ供給および前記シャッフルパターン生成回路からのデータの格納を行うレジスタファイルとを備え、前記シャッフルパターン生成回路が受け付ける信号とは、前記制御信号であるプロセッサとしても構わない。
【０１８１】
（８）実施の形態に係るシャッフルパターン生成方法は、複数個のインデックスからなるインデックス列を入力とし、ビット数および複製の個数を示す信号を受け付けて、各インデックスを前記信号に示されるビット数だけ左ビットシフトし、かつ、各インデックスを前記信号に示される複製の個数ずつに複製した、インデックス列を出力するシフト複製ステップと、前記シフト複製ステップにて出力されたインデックス列を入力とし、各インデックスに対する加算値を示す信号を受け付けて、前記信号に示される加算値を加算する加算ステップとを含む。
【０１８２】
（９）前記シフト複製ステップは、前記各インデックスの左ビットシフト後に各インデックスの複製を行う、または、前記各インデックスの複製後に各インデックスの左ビットシフトを行うとしても構わない。
【０１８３】
（１０）実施の形態に係る命令は、複数個のインデックスからなるインデックス列、かつ、ビット数および複製の個数および各インデックスに対する加算値を示す制御データを入力とし、各インデックスを前記制御データに示されるビット数だけ左ビットシフトし、かつ、各インデックスを前記制御データに示される複製の個数ずつに複製し、かつ、各インデックスに前記制御データに示される加算値を加算した結果を出力する。
【０１８４】
（１１）（１０）において、前記制御データにより示される加算値は、複製元が同一の各インデックス間では相異なる値であるとしても構わない。
【０１８５】
（１２）（１１）において、前記複製の個数はＮ個（Ｎは２以上の整数）であって、前記複製元が同一の各インデックスでは、１個のインデックスの加算値は０であり、残りのＮ−１個のインデックスの加算値は、それぞれ、１、２、・・・、Ｎ−１であるとしても構わない。
【０１８６】
（１３）（１０）において、前記制御データは各インデックスに対するビット幅を示し、
当該制御データに示されるビット幅へと各インデックスのビット幅を変更し、前記結果として出力するとしても構わない。
【産業上の利用可能性】
【０１８７】
本発明にかかるシャッフルパターン生成回路によれば、シャッフルパターン生成命令を持つＳＩＭＤプロセッサなどの用途に有用である。
【符号の説明】
【０１８８】
１０１  シャッフルパターン
２０２、７０２、１５０２、１９０２  入力シャッフルパターン（インデックス列）
２０３、７０３、１５０３、１９０３  出力シャッフルパターン
３０１、７０１、７０１ａ、１４１１、１５０１、１９０１、２２０５、２２０６  シャッフルパターン生成回路
３０４、７０４、８０２、１５０４、１９０４、２２１１、２２１２  ビット単位信号
３０５、７０６、１５０６  シフタ
３０６、１５０９  ビット変更器
３０７、７０８、１４０８、１５０８  加算器
４０１、４０２、４０３、４０４、６０１、６０２、９０１、９０２、１００１、１００２、１１０１、１１０２、１３０１、１３０２、１６０１、１６０２、１６０３、１７０１、１７０２、１７０３、１８０１、１８０２、１８０３  インデックス列
７０５、７０５ａ、１４０５、１５０５  シフト複製部
７０７、１５０７  複製器
１４０４ａ  ビット単位信号Ａ
１４０４ｂ  ビット単位信号Ｂ
１９０５  ２×８インデックステーブル
１９０６  ４×８インデックステーブル
１９０７  インデックステーブル参照器
２２０１  プロセッサ
２２０３  命令デコーダ
２２０４  ＳＩＭＤレジスタファイル
【図１】
0005988222.tif 000002
【図２】
0005988222.tif 000003
【図３】
0005988222.tif 000004
【図４】
0005988222.tif 000005
【図５】
0005988222.tif 000006
【図６】
0005988222.tif 000007
【図７】
0005988222.tif 000008
【図８】
0005988222.tif 000009
【図９】
0005988222.tif 000010
【図１０】
0005988222.tif 000011
【図１１】
0005988222.tif 000012
【図１２】
0005988222.tif 000013
【図１３】
0005988222.tif 000014
【図１４】
0005988222.tif 000015
【図１５】
0005988222.tif 000016
【図１６】
0005988222.tif 000017
【図１７】
0005988222.tif 000018
【図１８】
0005988222.tif 000019
【図１９】
0005988222.tif 000020
【図２０】
0005988222.tif 000021
【図２１】
0005988222.tif 000022
【図２２】
0005988222.tif 000023
【図２３】
0005988222.tif 000024
【図２４】
0005988222.tif 000025
【図２５】
0005988222.tif 000026
【図２６】
0005988222.tif 000027