"データをシャッフルするプロセッサであって、シャッフル命令を復号化するデコーダと、整数レジスタと浮動小数点レジスタとを含むレジスタファイルと、4つのデータ要素を有する第1オペランドを格納する第1の64ビットソースレジスタと、4つの2ビット選択フィールドのセットを有する第2ソースオペランドを格納する第2の64ビットレジスタと、64ビットデスティネーションレジスタとを有する前記レジスタファイルにおける前記レジスタをリネームするレジスタリネームロジックと、前記デコーダからのマイクロ命令を格納するキューと、前記ソースレジスタの従属オペランドの準備状況に基づき処理の実行をスケジューリングするスケジューラと、前記レジスタファイルから前記第1オペランドと前記選択フィールドのセットとを受信するよう動作する実行ユニットと、を有し、前記選択フィールドのそれぞれは、デスティネーションオペランドのデータ要素位置に関連付けられ、前記選択フィールドのそれぞれは、前記第1オペランドから前記デスティネーションオペランドにコピーされるべき前記データ要素の1つを選択するため処理可能な位置選択フィールドであり、前記実行ユニットはさらに、前記2ビット選択フィールドのそれぞれにより指定される順序に基づき前記第1オペランドのデータ要素から前記関連付けされたデスティネーションデータ要素位置にデータをコピーするよう動作するプロセッサ。前記第2ソースオペランドの各データ要素はさらに、制御要素に関連付けされるデータ要素位置がゼロ値により充填されるべきか示すゼロクリアフィールドを有する、請求項1記載のプロセッサ。前記実行ユニットはさらに、各ゼロクリアフィールドが設定されているか判断し、前記ゼロクリアフィールドが設定されている場合にはゼロを関連付けされたデスティネーションデータ要素位置に配置し、前記ゼロクリアフィールドが設定されていない場合には前記選択フィールドのそれぞれにより指定される第1オペランドデータ要素から前記関連付けされたデスティネーションデータ要素位置にデータをシャッフルする、請求項2記載のプロセッサ。各ゼロクリアフィールドは、前記デスティネーションオペランドに同様に配置されたデータ要素位置に関連付けされる、請求項2記載のプロセッサ。前記選択フィールドは、データ要素位置番号によって第1オペランドデータ要素を指定する、請求項1記載のプロセッサ。前記実行ユニットはさらに、前記第2オペランドの選択フィールドに応答して、前記第1オペランドからシャッフルされたデータを有する結果のデータブロックを出力する、請求項1記載のプロセッサ。前記第1オペランドと、前記第2オペランドと、前記デスティネーションオペランドとはそれぞれ、64ビット長のpackedデータからなる、請求項1記載のプロセッサ。前記第2オペランドの各データ要素はさらに、ソース選択フィールドを有する、請求項1記載のプロセッサ。前記シャッフル命令はさらに、前記実行ユニットに前記選択フィールドのセットに基づき充填された各データ要素位置を有する前記デスティネーションオペランドを生成させる、請求項1記載のプロセッサ。前記第1ソースレジスタと前記第2レジスタとは、SIMDSingleInstructionMultipleDataレジスタである、請求項1記載のプロセッサ。前記実行ユニットに接続されるマルチプレクサのセットをさらに有し、各マルチプレクサは、一意的なデスティネーションデータ要素位置に関連付けられ、関連付けされたゼロクリア信号がアクティブである場合にはゼロを出力し、前記関連付けされたゼロクリア信号が非アクティブである場合には関連付けされた選択フィールドに基づきデータ要素のセットからシャッフルされたデータを出力する、請求項2乃至4何れか一項記載のプロセッサ。各データ要素位置が関連付けされたマルチプレクサからの出力を保持する一意的なデータ要素位置を備えたレジスタをさらに有する、請求項11記載のプロセッサ。本発明の課題は、上記問題点に鑑み、効果的にデータをシャッフルするための方法及び装置を提供することである。上記課題を解決するため、本発明の一態様は、L個のデータ要素を有する第1オペランドとL個の制御要素を有する第2オペランドとを受け取るステップと、各制御要素に対して、該制御要素により指定される第1オペランドデータ要素からのデータを、それのゼロクリアフィールドが設定されていない場合、関連付けされた結果のデータ要素位置にシャッフルし、それのゼロクリアフィールドが設定されていない場合、前記関連付けされた結果のデータ要素位置にゼロを配置するステップとから構成されることを特徴とする方法に関する。本発明によると、効果的にデータをシャッフルするための方法及び装置を提供することができる。データをシャッフルするための方法及び装置が開示される。SIMD命令を用いてパラレルなテーブル検索のための方法及び装置がまた開示される。複数のレジスタ間においてデータを再構成するための方法及び装置がまた開示される。ここで説明される実施例は、マイクロプロセッサに関して説明されるが、それに限定されるものではない。以下の実施例はプロセッサに関して説明されるが、他の実施例は、他のタイプの集積回路やロジック装置に適用可能である。本発明の同様の技術及び教示が、より大きなパイプラインスループット及びパフォーマンス向上を可能にする他のタイプの回路または半導体装置に容易に適用することができる。本発明の教示は、データ操作を実行する任意のプロセッサまたはマシーンに適用可能である。しかしながら、本発明は256ビット、128ビット、64ビット、32ビットあるいは16ビットデータ処理を実行するプロセッサまたはマシーンに限定されるものではなく、データのシャッフリングが必要とされる任意のプロセッサ及びマシーンに適用可能である。以下の説明では、本発明の完全なる理解を提供するため、多数の具体的詳細が与えられる。しかしながら当業者は、これらの具体的詳細が本発明を実現するために必要ではないということを理解するであろう。他の例では、周知の電気的構成及び回路は、本発明を不必要に不明りょうとしないように、詳細には与えられていない。さらに、以下の説明は具体例を与え、添付された図面は例示のための各種具体例を示す。しかしながら、これらの具体例は、本発明のすべての可能な実現形態の包括的なリストを提供するためのものではなく、単に本発明の具体例を提供するためのものであるため、限定的に解釈されるべきではない。一実施例では、本発明の方法は、機械実行可能な命令により実現される。当該命令は、プログラムされる汎用または特殊用途向けプロセッサに本発明の各ステップを実行させるのに使用可能である。あるいは、本発明の各ステップは、当該ステップを実行するための配線化されたロジックを有する特殊なハードウェアコンポーネントによって、または、プログラムされたコンピュータコンポーネント及びカスタムハードウェアコンポーネントの任意の組み合わせによって実行されてもよい。以下の具体例は実行ユニットやロジック回路に関して命令の処理及び配布を説明しているが、本発明の他の実施例はソフトウェアにより実現可能である。本発明は、本発明によるプロセスを実行するようコンピュータまたは他の電子装置をプログラムするのに利用可能な命令を格納したマシーンまたはコンピュータ可読媒体を有するコンピュータプログラムプロダクツまたはソフトウェアとして提供されてもよい。そのようなソフトウェアがシステムのメモリ内に格納可能である。同様に、コードはネットワークを介して、または他のコンピュータ可読媒体を介して配布可能である。従って、機械可読媒体は、以下に限定されるものではないが、フロッピー登録商標ディスク、光ディスク、CD-ROMCompactDiscRead-OnlyMemory、光磁気ディスク、ROMRead-OnlyMemory、RAMRandomAccessMemory、EPROMErasableProgrammableRead-OnlyMemory、EEPROMElectricallyErasableProgrammableRead-OnlyMemory、磁気または光カード、フラッシュメモリ、インターネットを介した送信、電気、光、音響または他の形態の伝搬信号搬送波、赤外線信号、デジタル信号などなど、マシーンコンピュータなどにより読出し可能な形態により情報を格納または送信するための任意の機構を有するかもしれない。従って、コンピュータ可読媒体は、マシーンコンピュータなどにより読出し可能な形態による電子命令または情報を格納または送信するのに適した任意のタイプの媒体/機械可読媒体を含む。さらに、本発明はまた、コンピュータプログラムプロダクツとしてダウンロードされてもよい。また、プログラムは、リモートコンピュータサーバなどから要求元コンピュータクライアントなどに転送されてもよい。プログラムの転送は、通信リンクモデム、ネットワーク接続などを介し搬送波や他の伝搬媒体に実現される電気、光、音響、または他の形態のデータ信号を介したものであってもよい。さらに、本発明による集積回路設計の実施例は、テープまたは他の機械可読媒体上のデータベースとして電子形式により通信または転送可能である。例えば、一実施例によるプロセッサの電子形式による集積回路設計は、コンピュータコンポーネントを取得するため工場を介し処理または製造可能である。他の例では、電子形式による集積回路は、マシーンによりコンピュータコンポーネントをシミュレートするよう処理可能である。従って、一部の実施例によるプロセッサの設計及び/または回路レイアウトプランは、機械可読媒体を介し配布可能であり、マシーンによる処理時にプロセッサをシミュレートする集積回路のシミュレーションまたは製造のため、回路に実現可能である。機械可読媒体はまた、他の実施例において本発明による所定の機能を表すデータを格納可能である。現在のプロセッサでは、いくつかの実行ユニットが各種コード及び命令を処理及び実行するのに利用される。すべての命令が等しく生成されるとは限らない。なぜなら、いくつかは素早く完了し、他のものは膨大な数のクロックサイクルを要する可能性があるためである。命令のスループットが高速化するほど、プロセッサの全体的パフォーマンスは向上する。従って、可能な限り高速かつ多数の命令を実行させることが効果的である。しかしながら、実行時間とプロセッサリソースに関して、より大きな複雑さを有し、より多くのものを必要とする命令が存在する。例えば、浮動小数点命令、ロード/ストア処理、データ移動などがあげられる。ますます多くのコンピュータシステムがインターネットやマルチメディアアプリケーションに利用されると、時間の経過と共に追加的なプロセッサのサポートが導入されてきた。例えば、SIMDSingleInstructionMultipleData整数/浮動小数点命令とSSEStreamingSIMDExtensionは、特定のプログラムタスクを実行するのに必要とする命令の合計数を減少させる命令である。これらの命令は、複数のデータ要素に対するパラレル処理によりソフトウェアパフォーマンスをスピードアップすることが可能である。この結果、映像、音声及び画像処理を含む広範なアプリケーションにおいてパフォーマンス向上が実現可能である。マイクロプロセッサ及び同様のタイプのロジック回路におけるSIMD命令の実現は、通常はいくつかの発行を伴う。さらに、SIMD処理の複雑さは、しばしばデータを正確に処理及び操作するため、追加的な回路を必要性を生じさせる。本発明の実施例は、SIMD関連ハードウェアを利用するアルゴリズムとして、ゼロクリアflushtozero機能を有するpackedバイトシャッフル命令を実現する一手法を提供する。一実施例では、当該アルゴリズムは、各データ要素位置の制御マスクの値に基づき、特定のレジスタまたはメモリ位置からのデータをシャッフリングするコンセプトに基づくものである。packedバイトシャッフルの実施例は、データを再構成する多数のアプリケーションにおいて必要とされる命令数を減少するのに利用可能である。packedバイトシャッフル命令はまた、アラインされていないロードを有する任意のアプリケーションにも利用可能である。このシャッフル命令の実施例は、効率的な乗算加算処理のためデータを構成するフィルタリングに利用可能である。同様に、packedシャッフル命令は、データ及び小さな検索テーブルを順序付けするため、映像及び暗号化アプリケーションにおいて利用可能である。当該命令は、2以上のレジスタからのデータを合成するのに利用可能である。従って、本発明によるゼロクリア対応アルゴリズムによるpackedシャッフルの実施例は、全体的なパフォーマンスの重大な妥協なく、効率的にSIMD処理をサポートするためプロセッサにおいて実現可能である。本発明の実施例は、任意のサイズのデータを効率的に順序付け及び構成するため、ゼロクリア機能をpackedデータシャッフル命令PSHUFBに提供する。一実施例では、データはバイト粒度によりレジスタにおいてシャッフルまたは再構成される。バイトシャッフル処理は、シャッフル処理中、より大きなデータの内部におけるバイトの相対位置を維持することによって、バイトより大きなデータサイズを指示する。さらに、バイトシャッフル処理は、SIMDレジスタにおけるデータの相対位置を変更し、さらにデータを複製することが可能である。このPSHUFB命令は、第2ソースレジスタのシャッフル制御バイトの内容に従って、第1ソースレジスタからのバイトをシャッフルする。上記命令はデータを並び替えるが、シャッフルマスクは本実施例のシャッフル処理中には影響を受けず、変更もされない。一実現形態のニーモニックmnemonicは、PSHUFBレジスタ1,レジスタ2/メモリであり、第1及び第2オペランドはSIMDレジスタである。しかしながら、第2オペランドのレジスタはまた、メモリ位置に置換可能である。第1オペランドは、シャッフルのためのソースデータを含む。本実施例では、第1オペランドのレジスタは、デスティネーションレジスタである。本発明による実施例はまた、位置変更に加えて、選択されたバイトをzeroに設定する機能を有する。第2オペランドは、シャッフルパターンを指定するため、シャッフル制御マスクバイト群を有する。ソースデータ要素を選択するのに用いられるビット数は、ソースオペランドのデータ要素の個数のlog2である。例えば、128ビットレジスタの実施例におけるバイト数は16バイトである。16のlog2は4である。従って、4ビット、すなわち1ニブルが必要とされる。以下のコードの[3:0]インデックスは4ビットを参照する。シャッフル制御バイトの最上位ビットMSB、本実施例ではビット7が設定されている場合、定数ゼロが結果のバイトに書き込まれる。第2オペランドのバイトIの最下位ニブル、マスクセットが整数Jを有する場合、シャッフル命令は、第1ソースレジスタのJ番目のバイトをデスティネーションレジスタのI番目のバイトにコピーさせる。以下において、128ビットオペランドに対するpackedバイトシャッフル処理の一実施例の例示的な擬似コードが与えられる。同様に、以下は64ビットオペランドに対するpackedバイトシャッフル処理の他の実施例の一例となる擬似コードである。この64ビットレジスタの実施例では、64ビットレジスタに8バイトあるとき、マスクの下位3ビットが利用される。8のlog2は3である。上記コードのビット数は3ビットを参照している。他の実施例では、マスクのビット数は、ソースデータにおいて利用可能なデータ要素の個数に適応するよう可変とされる。例えば、下位5ビットを有するマスクは、256ビットレジスタにおいてデータ要素を選択するのに必要とされる。現在、SIMDにおいてデータを再構成することは、困難かつ退屈なことである。いくつかのアルゴリズムは、上記処理を実行するための実際の命令数より、算術処理のためにデータを構成するのにより多くの命令を要する。本発明によりpackedバイトシャッフル命令の実施例を実現することによって、データの再構成を実現するのに必要とされる命令数は、劇的に減少させることができる。例えば、packedバイトシャッフル命令の一実施例は、1バイトのデータを128ビットレジスタのすべての位置に配信することが可能である。レジスタにおけるデータの配信は、単一のデータアイテムが多数の係数と乗算されるフィルタリングアプリケーションにおいてしばしば利用される。当該命令がない場合、データバイトはそれのソースからフィルタリングされ、最下位バイト位置にシフトされる必要があるであろう。このとき、当該単一バイトは、まず1バイトとして複製され、その後、当該2バイトがダブルワードを形成するよう再び複製され、最後に当該ダブルワードがクワドワードを形成するよう複製される必要がある。これらすべての処理は、シングルpackedシャッフル命令と置換可能である。同様に、ビッグエンディアンとリトルエンディアン形式との間の変更など、128ビットレジスタのすべてのバイトの反転は、シングルpackedシャッフル命令により容易に実行可能である。これら極めてシンプルなパターンは、packedシャッフル命令が利用されなかった場合、いくつかの命令を必要とする一方、複雑またはランダムなパターンはさらに非効率な命令ルーチンを要求する。SIMDレジスタにおいてランダムバイトをリオーダするための最も直接的な手段は、当該バイトをバッファに書き込み、その後に整数バイトリード/ライトを用いて、それらをリオーダし、SIMDレジスタに読み戻すことである。これらすべてのデータ処理は長いコードシーケンスを必要とするが、シングルpackedシャッフル命令のみで十分である。必要とされる命令数を減少させることによって、同一の結果を生成するのに必要とされるクロックサイクル数は大きく減らされる。本発明の実施例はまた、シャッフル命令を用いてSIMD命令によりテーブルの複数の値にアクセスする。テーブルがレジスタの2倍のサイズである場合でさえ、本発明によるアルゴリズムは、整数処理と同様に命令ごとに1つのデータ要素より速く複数のデータ要素にアクセスすることを可能にする。図1Aは、本発明の一実施例によるデータをシャッフルするための命令を実行する実行ユニットを有するプロセッサにより構成される一例となるコンピュータシステムのブロック図である。システム100は、ここで説明される実施例などの本発明に従って、ロジック含む実行するユニットを用いてデータをシャッフルするアルゴリズムを実行するプロセッサ102などのコンポーネントを含む。システム100は、他のシステム他のマイクロプロセッサを有するPC、エンジニアリングワークステーション、セットトップボックスなどを含むもまた利用されてもよいが、カリフォルニア州サンタクララのインテルコーポレイションから入手可能なPENTIUM登録商標III、PENTIUM登録商標4、Celeron登録商標、XeonTM、Itanium登録商標、XScaleTM及び/またはStrongARMTMマイクロプロセッサに基づく処理システムを表す。一実施例では、サンプルシステム100は、他のオペレーティングシステムUNIX登録商標やLinuxなど、埋め込みソフトウェア及び/またはグラフィカルユーザインタフェースもまた利用されてもよいが、ワシントン州のレッドモンドのマイクロソフトコーポレイションから入手可能なWINDOWSTMオペレーティングシステムの一バージョンを実行するようにしてもよい。従って、本発明は、ハードウェア回路及びソフトウェアの任意の具体的組み合わせに限定されるものではない。本拡張は、コンピュータシステムに限定されるものではない。本発明の他の実施例が、携帯型装置や埋め込みアプリケーションアドの他の装置において利用可能である。携帯型装置のいくつかの例として、携帯電話、インターネットプロトコル装置、デジタルカメラ、携帯情報端末PDA及び携帯型PCがあげられる。埋め込みアプリケーションとして、マイクロコントローラ、デジタル信号プロセッサDSP、チップ上のシステム、ネットワークコンピュータNetPC、セットトップボックス、ネットワークハブ、ワイドエリアネットワークWANスイッチ、またはオペランドに対し整数シャッフル処理を実行する他の何れかのシステムがあげられる。さらに、いくつかのアーキテクチャは、マルチメディアアプリケーションの効率性を向上させるため、命令が複数のデータに対して同時に実行可能となるよう実現されている。データのタイプ及びデータ量が増大するに従って、コンピュータ及びそのプロセッサは、より効率的にデータを操作するよう拡張される必要がある。図1Aは、本発明によるデータシャッフルアルゴリズムを実行する1以上の実行ユニット108を有するプロセッサにより構成されるコンピュータシステム100のブロック図である。本実施例は、単一プロセッサデスクトップやサーバシステムに関して説明されるが、他の実施例はマイクロプロセッサシステムに備えることが可能である。システム100は、ハブアーキテクチャの一例である。コンピュータシステム100は、データ信号を処理するプロセッサ102を有する。プロセッサ102は、CISCComplexInstructionSetComputerマイクロプロセッサ、RISCReducedInstructionSetComputingマイクロプロセッサ、VLIWVeryLongInstructionWordマイクロプロセッサ、命令セットの組み合わせを実現するプロセッサ、あるいはデジタル信号プロセッサなどの他の任意のプロセッサ装置とすることが可能である。プロセッサ102は、プロセッサ102とシステム100の他のコンポーネントとの間のデータ信号を送信可能なプロセッサバス110に接続される。システム100の要素は、当業者には周知のそれらの従来技術による機能を実行する。一実施例では、プロセッサ102は、レベル1L1内部キャッシュメモリ104を有する。アーキテクチャに応じて、プロセッサ102は、複数レベルの内部キャッシュまたは単独の内部キャッシュを有することも可能である。あるいは他の実施例では、キャッシュメモリは、プロセッサ102の外部に配置することも可能である。他の実施例はまた、特定の実現形態及びニーズに応じて、内部キャッシュと外部キャッシュの両方の組み合わせを有することが可能である。レジスタファイル106は、整数レジスタ、浮動小数点レジスタ、状態レジスタ及び命令ポインタレジスタを含む各種レジスタに異なるタイプのデータを格納することが可能である。整数及び浮動小数点処理を実行するロジックを含む実行ユニット108がまた、プロセッサ102内に配置される。プロセッサ102はまた、特定のマイクロ命令のためのマイクロコードを格納するマイクロコードucodeROMを有する。本実施例では、実行ユニット108は、packed命令セット109を処理するロジックを有する。一実施例では、packed命令セット109は、データを整理するためpackedシャッフル命令を有する。命令を実行する付属の回路と共に、packed命令セット109を汎用プロセッサ102の命令セットに含めることによって、多数のマルチメディアアプリケーションにより用いられる処理は、汎用プロセッサ102のpackedデータを用いて実行されるかもしれない。従って、多くのマルチメディアプリケーションは、packedデータに対する処理を実行するため、プロセッサのデータバスの幅全体を用いることにより、より効率的に実行及び高速化することが可能である。これにより、1回に1つのデータ要素に対して1以上の処理を実行するため、プロセッサのデータバスを介しより小さなデータユニットを転送する必要性を解消することができる。実行ユニット108の他の実施例がまた、マイクロコントローラ、埋め込みプロセッサ、グラフィック装置、DSP及び他のタイプのロジック回路において利用可能である。システム100は、メモリ120を有する。メモリ120は、DRAMDynamicRandomAccessMemory装置、SRAMStaticRandomAccessMemory装置、フラッシュメモリ装置、または他の記憶装置とすることが可能である。メモリ120は、プロセッサ102により実行可能なデータ信号により表されるデータ及び/または命令を格納することが可能である。システムロジックチップ116は、プロセッサバス110及びメモリ120に接続される。図示された実施例では、システムロジックチップ116は、MCHMemoryControllerHubである。プロセッサ102は、プロセッサバス110を介しMCH116と通信可能である。MCH116は、命令及びデータの格納のため、及びグラフィックコマンド、データ及びテクスチャの格納のため、広帯域幅メモリパス118をメモリ120に設ける。MCH116は、プロセッサ102、メモリ120及びシステム100の他のコンポーネントとの間でデータ信号を指示し、プロセッサバス110、メモリ120及びシステムI/O122との間でデータ信号をブリッジするためのものである。一部の実施例では、システムロジックチップ116は、グラフィックコントローラ112と接続するためのグラフィックポートを設けることが可能である。MCH116は、メモリインタフェース118を介しメモリ120と接続される。グラフィックカード112は、AGPAcceleratedGraphicsPortインタコネクト114を介しMCH116と接続される。システム100は、専用のハブインタフェースバス122を用いて、MCH116とI/OコントローラハブICH130とを接続する。ICH130は、ローカルI/Oバスを介しいくつかのI/O装置との直接的接続を提供する。ローカルI/Oバスは、周辺装置とメモリ120、チップセット及びプロセッサ102とを接続するための高速I/Oバスである。いくつかの例として、音声コントローラ、ファームウェアハブフラッシュBIOS128、ワイヤレストランシーバ126、データストレージ124、ユーザ入力とキーボードインタフェースを含む従来のI/Oコントローラ、USBUniversalSerialBusなどのシリアル拡張ポート及びネットワークコントローラ134があげられる。データストレージ装置124は、ハードディスクドライブ、フロッピー登録商標ディスクドライブ、CD-ROM装置、フラッシュメモリ装置、または他の大容量記憶装置から構成することが可能である。システムの他の実施例では、シャッフル命令によりアルゴリズムを実行する実行ユニットが、チップ上のシステムにより利用可能である。チップ上のシステムの一実施例は、プロセッサとメモリとから構成される。そのようなシステムのメモリは、フラッシュメモリである。フラッシュメモリは、プロセッサ及び他のシステムコンポーネントと同一のダイ上に配置することが可能である。さらに、メモリコントローラやグラフィックコントローラなどの他のロジックブロックもまた、チップ上のシステムに配置することが可能である。図1Bは、本発明の原理を実現するデータ処理システム140の他の実施例を示す。データ処理システム140の一実施例では、インテルXScaleTM技術を有するインテル登録商標PCAPersonalInternetClientArchitectureアプリケーションプロセッサであるdeveloper.intel.comにおいてワールドワイドウェブ上に説明されるように。ここで開示される実施例は、本発明の範囲から逸脱することなく他の処理システムにより利用可能であるということは、当業者には容易に理解されるであろう。コンピュータシステム140は、シャッフルを含むSIMD処理を実行可能な処理コア159から構成される。一実施例では、処理コア159は、以下に限定されるものではないが、CISC、RISCまたはVLIWタイプアーキテクチャを含む任意のタイプのアーキテクチャの処理ユニットを表す。処理コア159はまた、1以上の処理技術において製造に適したものであってもよいし、十分詳細に機械可読媒体上に表すことにより、製造を容易にするのに適したものであってもよい。処理コア159は、実行ユニット142、レジスタファイル群145及びデコーダ144から構成される。処理コア159はまた、本発明の理解に不要な追加的回路図示せずを有する。実行ユニット142は、処理コア159により受信された命令を実行するのに利用される。典型的なプロセッサ命令を認識するのに加えて、実行ユニット142は、packedデータ形式に対する処理を実行するため、packed命令セット143の命令を認識することが可能である。packed命令セット143は、シャッフル処理をサポートする命令を有し、さらに他のpacked命令を有するようにしてもよい。実行ユニット142は、内部バスによりレジスタファイル145に接続される。レジスタファイル145は、データを含む情報を格納するため、処理コア159上の格納領域を表す。前述のように、packedデータを格納するのに用いられる格納領域は重要なものではないということが理解されるであろう。実行ユニット142は、デコーダ144に接続される。デコーダ144は、処理コア159により受信される命令を制御信号及び/またはマイクロコードエントリポイントに復号するのに利用される。上記制御信号及び/またはマイクロコードエントリポイントに応答して、実行ユニット142は、適切な処理を実行する。処理コア159は、以下に限定されるものではないが例えば、SDRAMSynchronousDynamicRandomAccessMemory制御146、SRAMStaticRandomAccessMemory制御147、バーストフラッシュメモリインタフェース148、PCMCIAPersonalComputerMemoryCardInternationalAssociation/CFCompactFlashカード制御149、LCDLiquidCrystalDisplay制御150、DMADirectMemoryAccessコントローラ151及び代替バスマスタインタフェース152を含む他の各種システム装置と通信するためのバス141と接続されている。一実施例では、データ処理システム140はまた、各種I/O装置とI/Oバス153を介し通信するためのI/Oブリッジ154を有するようにしてもよい。そのようなI/O装置は、以下に限定されるものではないが例えば、UARTUniversalAsynchronousReceiver/Transmitter155、USBUniversalSerialBus156、BluetoothワイアレスUART157及びI/O拡張インタフェース158を含むものであってもよい。データ処理システム140の一実施例は、シャッフル処理を含むSIMD処理を実行可能な処理コア159と、モバイル、ネットワーク及び/またはワイアレス通信を提供する。処理コア159は、ウォルシュアダマール変換、高速フーリエ変換FFT、離散コサイン変換DCTなどの離散変換及びそれらの逆変換、色空間変換、映像符号化動き予測または映像復号化動き補償などの圧縮/解凍技術、及びPCMPulseCodedModulationなどの変調/復調MODEM機能を含む各種音声、映像、画像処理及び通信アルゴリズムによりプログラムされてもよい。図1Cは、SIMDシャッフル処理を実行可能なデータ処理システムのさらなる他の実施例を示す。他の実施例によると、データ処理システム160は、メインプロセッサ166、SIMDコプロセッサ161、キャッシュメモリ167及び入出力システム168を有するようにしてもよい。入出力システム168は任意的に、ワイアレスインタフェース169に接続されてもよい。SIMDコプロセッサ161は、データシャッフルを含むSIMD処理を実行することが可能である。処理コア170は、1以上の処理技術において製造に適したものであり、十分詳細に機械可読媒体上に表すことにより、処理コア170を含むデータ処理システム160のすべてまたは一部の製造を容易にするのに適したものであってもよい。一実施例では、SIMコプロセッサ161は、実行ユニット162とレジスタファイル群164を有する。メインプロセッサ165の一実施例は、実行ユニット162による実行のため、SIMDシャッフル命令を含む命令セット163の命令を認識するためのデコーダ165を有する。他の実施例では、SIMDコプロセッサ161はまた、命令セット163の命令を復号するため、デコーダ165Bの少なくとも一部を有する。処理コア170はまた、本発明の理解には不要なさらなる回路図示せずを有する。処理に関して、メインプロセッサ166は、入出力システム168とキャッシュメモリ167とのやりとりを含む一般的なデータ処理を制御するデータ処理命令のストリームを実行する。SIMDコプロセッサ命令は、データ処理命令のストリームに埋め込まれる。メインプロセッサ166のデコーダ165は、付属のSIMDコプロセッサ161により実行されるべきタイプとして、上記SIMDコプロセッサ命令を認識する。従って、メインプロセッサ166は、これらのSIMDコプロセッサ命令またはSIMDコプロセッサ命令を表す制御信号を、それらが付属の何れかのSIMDコプロセッサにより受け取られるコプロセッサバス166を介し発行する。この場合、SIMDコプロセッサ161は、それに対する受信したSIMDコプロセッサ命令を受付及び実行するであろう。SIMDコプロセッサ命令による処理のため、データがワイアレスインタフェース169を介し受信される。例えば、音声通信が、デジタル信号形式により受信され、音声通信を表すデジタル音声サンプルを再生成するようSIMDコプロセッサ命令により処理されてもよい。他の例では、圧縮された音声及び/映像が、デジタルビットストリーム形式で受信され、デジタル音声サンプル及び/または動き映像フレームを再生成するようSIMDコプロセッサ命令により処理される。処理コア170の一実施例では、メインプロセッサ166とSIMDコプロセッサ161が、SIMDシャッフル命令を含む命令セット163の命令を認識するため、実行ユニット162、レジスタファイル群164及びデコーダ165からなる単一の処理コア170に一体化される。図2は、本発明によるシャッフル処理を実行するロジック回路を有する一実施例によるプロセッサ200のマイクロアーキテクチャのブロック図である。シャッフル処理はまた、上述の説明と同様に、packedデータシャッフル処理及びpackedシャッフル命令と呼ばれてもよい。シャッフル命令の一実施例では、当該命令は、あるバイト粒度によりpackedデータをシャッフルすることが可能である。この命令はまた、PSHUFBまたはpackedシャッフルバイトと呼ぶことも可能である。他の実施例では、シャッフル命令はまた、ワード、ダブルワード、クアドワードなどのサイズを有するデータ要素に対して処理するよう実現可能である。インオーダフロントエンド201は、実行されるマクロ命令をフェッチし、プロセッサパイプラインにおける以降の利用のためそれらを用意するプロセッサ200の一部である。本実施例のフロントエンド201は、複数のユニットを含む。命令プリフェッチャ226は、メモリからマクロ命令をフェッチし、それらを命令デコーダ228に供給し、次に命令デコーダ228がそれらをマシーンが実行方法を知っているマイクロ命令またはマイクロ処理マイクロopまたはuopとも呼ばれると呼ばれるプリミティブに復号する。トレースキャッシュ230は、復号されたuopを抽出し、それらをプログラムオーダードシーケンスに構成するか、あるいは実行のためuopキュー234にトレースする。トレースキャッシュ230が複合マクロ命令に遭遇すると、マイクロコードROM232は、当該処理を完了させるのに必要なuopを提供する。多数のマクロ命令が1つのマイクロopに変換され、その他は完全な処理を完了させるため複数のマイクロopを必要とする。本実施例では、5以上のマイクロopがマクロ命令を完了させるのに必要とされる場合、デコーダ228は、マクロ命令を実行するのにマイクロコードROM232にアクセスする。一実施例では、packedシャッフル命令が命令デコーダ228における処理のため、少数のマイクロopに復号することが可能である。他の実施例では、packedデータシャッフルアルゴリズムの命令は、当該処理を実現するのにいくつかのマイクロopが必要な場合、マイクロコードROM232に格納可能である。トレースキャッシュ230は、マイクロコードROM232のシャッフルアルゴリズムのためのマイクロコードシーケンスを読み出すため、正しいマイクロ命令ポインタを決定するためのエントリポイントPLAProgrammbleLogicArrayを参照する。マイクロコードROM232が現在のマクロ命令に対するマイクロopのシーケンス処理を終了した後、マシーンのフロントエンド201は、トレースキャッシュ230からマイクロopのフェッチを再開する。一部のSIMD及び他のマルチメディアタイプの命令は、複合処理とみなされる。ほとんどの浮動小数点関連命令は、複合命令である。また命令デコーダ228が複合マクロ命令に遭遇すると、マイクロコードROM232は、マクロ命令のマイクロコードシーケンスを抽出するため、適切な位置でアクセスされる。当該マクロ命令を実行するのに必要とされる各種マイクロopは、適切な整数及び浮動小数点実行ユニットにおける実行のため、アウトオブオーダ実行エンジン203に通信される。アウトオブオーダ実行エンジン203では、マイクロ命令が実行のため用意される。アウトオブオーダ実行ロジックは、パイプラインに進み、実行のスケジューリングがされたとき、パフォーマンスを最適化するようマイクロ命令のフローを平坦化及びリオーダするためのいくつかのバッファを有する。アロケータロジックは、各uopが実行に要するマシーンバッファとリソースを割当てる。レジスタリネーミングロジックは、ロジックレジスタをレジスタファイルのエントリにリネームする。アロケータはまた、メモリスケジューラ、高速スケジューラ202、低速/汎用浮動小数点スケジューラ204及びシンプル浮動小数点スケジューラ206の命令スケジューラの前に、メモリ処理の1つと非メモリ処理の1つの2つのuopキューの1つにおける各uopに対するエントリを割当てる。uopスケジューラ202、204及び206は、それらに従属する入力レジスタオペランドソースの準備及びそれの処理を完了させるのにuopが必要とする実行リソースの利用性に基づき、uopの実行が準備できた時点を判断する。本実施例の高速スケジューラ202は、メインクロックサイクルの各半分についてスケジューリング可能であり、その他のスケジューラは、メインプロセッサクロックサイクルごとに1回のみスケジューリングを行うことが可能である。スケジューラは、実行されるuopをスケジューリングするため、ディスパッチポートを調停する。レジスタファイル208と210が、スケジュール202、204、206と実行ブロック211の実行ユニット212、214、216、218、220、222、224との間に配置される。整数処理と符号小数点処理のそれぞれに対して、独立したレジスタファイル208と210が設けられる。本実施例の各レジスタファイル208と210は、レジスタファイルにまだ書き込まれていない完了された結果を新しい従属uopにバイパスまたは転送することが可能なバイパスネットワークを有する。整数レジスタファイル208と浮動小数点レジスタファイル210は、他方とデータを通信することが可能である。一実施例では、整数レジスタファイル208は、2つの独立したレジスタファイルに分割され、1つのレジスタファイルはローオーダ32ビットデータ用であり、第2のレジスタファイルはハイオーダ32ビットデータ用である。一実施例の浮動小数点レジスタファイル210は、浮動小数点命令が典型的には、64~128ビット幅のオペランドを有するため、128ビット長のエントリを有する。実行ブロック211は、命令が実際に実行される実行ユニット212、214、216、218、220、222及び224を有する。当該セクションは、マイクロ命令が実行するのに必要とする整数及び浮動小数点データオペランドの値を格納するレジスタファイル208と210を有する。本実施例のプロセッサ200は、AGUAddressGenerationUnit212と214、高速ALU216と218、低速ALU220、浮動小数点ALU222及び浮動小数点移動ユニット224のいくつかの実行ユニットから構成される。本実施例では、浮動小数点実行ブロック222と224は、浮動小数点MMX、SIMD及びSSE処理を実行する。本実施例の浮動小数点ALU222は、除算、平方根及び剰余マイクロopを実行する浮動小数点除算器を有する。本発明の実施例では、浮動少数に関する任意のアクションは、浮動小数点ハードウェアにより行われる。例えば、整数形式と浮動少数形式との間の変換は、浮動小数点レジスタファイルに関する。同様に、浮動小数点除算処理は、浮動小数点除算器において行われる。他方、非浮動小数及び整数タイプは、整数ハードウェアリソースにより処理される。シンプルで頻繁にALU処理は、高速ALU実行ユニット216と218で行われる。本実施例の高速ALU216と218は、半分のクロックサイクルの効果的なレイタンシーにより高速処理を実行可能である。一実施例では、ほとんどの複合整数処理は、低速ALU220で行われる。なぜなら、低速ALU220は、乗算、シフト、フラグロジック、ブランチ処理などの長いレイタンシーのタイプの処理のための整数実行ハードウェアを有するためである。メモリロード/ストア処理は、AGU212と214により実行される。本実施例では、整数ALU216、218及び220は、64ビットデータオペランドに対する整数処理を実行することに関して説明される。他の実施例では、ALU216、218及び220は、16、32、128、256などを含む各種データビットをサポートするよう実現することが可能である。同様に、浮動小数点ユニット222と224は、各種ビット長を有するある範囲のオペランドをサポートするよう実現可能である。一実施例では、浮動小数点ユニット222及び224は、SIMD及びマルチメディア命令に関して128ビット長のpackedデータオペランドに対して実行可能である。本実施例では、uopスケジューラ202、204及び206は、親ロードの実行終了前に従属する処理をディスパッチする。uopがプロセッサ200において投機的にスケジューリング及び実行されるとき、プロセッサ200はまた、メモリミスを処理するロジックを有する。データロードがデータキャッシュにおいてミスした場合、一時的に誤ったデータをスケジュールに残したパイプラインに従属した処理が存在し得る。リプレイ機構は、誤ったデータを利用した命令を追跡及び再実行する。従属した処理のみがリプレイされる必要があり、独立した処理は完了を許可される。プロセッサの一実施例のスケジューラ及びリプレイ機構はまた、シャッフル処理用の命令シーケンスを取得するよう構成される。ここでは、レジスタという用語は、オペランドを特定するためのマクロ命令の一部として用いられるオンボードプロセッサ格納位置を参照するのに用いられる。言い換えると、ここで参照されるレジスタは、プロセッサの外部から可視的なものであるプログラマーの観点から。しかしながら、一実施例のレジスタは、特定タイプの回路を意味するものとして限定されるべきではない。むしろ、一実施例のレジスタは、データの格納及び提供、及びここで説明される機能の実行が可能でありさえすればよい。ここで説明されるレジスタは、専用の物理的レジスタ、レジスリネーム処理を用いた動的割当された物理的レジスタ、専用及び動的割当物理的レジスタの組み合わせなど各種技術を利用して、プロセッサ内の回路により実現可能である。一実施例では、整数レジスタは、32ビット整数データを格納する。一実施例のレジスタファイルはまた、packedデータ用の8つのマルチメディアSIMDレジスタを有する。以下の説明のため、レジスタは、カリフォルニア州サンタクララのインテルコーポレイションのMMX技術に対応したマイクロプロセッサにおける64ビット長MMXTMレジスタ一部の例では、mmレジスタとも呼ばれるなどのpackedデータを保持するよう構成されたデータレジスタであると理解される。整数と浮動小数点形式の両方で利用可能なこれらのMMXレジスタは、SIMD及びSSE命令を伴うpackedデータ要素により処理可能である。同様に、SSE2技術に関する128ビット長XMMレジスタは、そのようなpackedデータオペランドを保持するのに利用可能である。本実施例では、packedデータ及び整数データの格納において、レジスタはこれら2つのデータタイプを区別する必要はない。以下の図面の例では、いくつかのデータオペランドが説明される。簡単化のため、最初のソースデータセグメントは、Aからアルファベット順にラベル付けされ、Aは最下位アドレスにあり、Zは最上位アドレスにある。従って、Aはまずアドレス0にあり、Bはアドレス1にあり、Cはアドレス3にあるなどされる。理論的には、一実施例によるpackedバイトシャッフルと同様に、シャッフル処理は第1オペランドからのデータセグメントのシャッフル処理と、ソースデータ要素の1以上を第2オペランドのマスク群により指定されるパターンに再構成することを伴う。従って、シャッフルは、データ要素の一部またはすべてを所望の順序に回転または完全に再構成することが可能である。さらに、特定のデータ要素またはいくつかのデータ要素は、結果において重複または配信可能である。本発明によるシャッフル命令の実施例は、ゼロクリア機能を有し、各データ要素のマスクは、当該データ要素の位置を結果においてゼロにすることが可能である。図3A~Cは、本発明の各種実施例によるシャッフルマスクを示す。本例では、複数のデータ要素311、312、313及び314から構成されるpackedデータオペランド310が示される。本例のpackedオペランド310は、他のオペランドの対応するpackedデータ要素のシャッフルパターンを示すマスク群を含めるためのpackedデータオペランドに関して説明される。従って、packedオペランド310の各データ要素311、312、313及び314のマスクは、結果の対応するpackedデータ要素位置の内容を示す。例えば、データ要素311は、最左データ要素位置にある。データ要素311のマスクは、シャッフル処理の結果の最左データ要素位置にどのデータがシャッフルまたは配置されるべきか示すためのものである。同様に、データ要素312は、第2の最左データ要素位置である。データ要素312のマスクは、結果の第2最左データ要素位置にどのデータが配置されるべきか示すものである。本実施例では、シャッフルマスクを含むpackedオペランドの各データ要素は、packed結果のデータ要素位置との1以上の対応を有する。図3Aでは、データ要素312は、一実施例の一例となるシャッフルマスクの内容を記述するのに利用される。一実施例によるシャッフルマスク318は、ゼロ設定フラグsettozeroflagフィールド315、予約reservedフィールド316及び選択ビットselectionsbitsフィールド317の3つの部分から構成される。ゼロ設定フラグフィールド315は、現在のマスクにより指定される結果のデータ要素位置がゼロとされるべきか、または言い換えると、0の値と置換されるべきか示すためのものである。一実施例では、ゼロ設定フラグフィールドは優勢であり、当該フィールド315が設定されている場合、マスク318の残りのフィールドは無視され、結果のデータ要素位置には0が充填される。予約フィールド316は、他の実施例では利用されないかもしれず、あるいは、以降または特別な使用のため確保された1以上のビットを有する。このシャッフルマスク318の選択ビットフィールド317は、packed結果の対応するデータ要素位置のデータソースを示すためのものである。packedデータシャッフル命令の一実施例では、1つのオペランドは一組のマスクから構成され、他のオペランドは一組のpackedデータ要素から構成される。何れのオペランドも同じサイズを有する。オペランドのデータ要素の個数に応じて、可変数の選択ビットがpacked結果の配置のため、第2のpackedデータオペランドから各データ要素を選択するのに必要とされる。例えば、packedバイトの128ビットソースオペランドでは、16のバイトデータ要素が選択に利用可能であるため、少なくとも4つの選択ビットが必要とされる。マスクの選択ビットにより示される値に基づき、ソースデータオペランドからの適切なデータ要素が、当該マスクの対応するデータ要素位置に配置される。例えば、データ要素312のマスク318は、第2最左データ要素位置に対応する。マスク318の選択ビット317がXの値を有する場合、ソースデータオペランドのデータ要素位置Xからのデータ要素が、結果の第2最左データ要素位置にシャッフルされる。ゼロ設定フラグフィールド315が設定されている場合、結果の第2最左データ要素位置は0と置換され、選択ビット317の指定は無視される。図3Bは、128ビット長packedオペランドとバイトサイズデータ要素により処理される一実施例のマスク328の構成を示す。本実施例では、ゼロ設定フィールド325はビット7から構成され、選択ビットフィールド327は、16の可能なデータ要素の選択が存在するため、ビット3~0から構成される。ビット6~4は本実施例では利用されず、予約フィールド326に配置される。他の実施例では、選択ビットフィールド327に用いられるビット数は、ソースデータオペランドに利用可能なデータ要素の可能な選択数に適合するように、必要に応じて増減することが可能である。図3Cは、バイトサイズデータ要素及び128ビット長packedオペランドによるが、複数のデータ要素ソースにより処理する他の実施例のマスク338の構成を示す。本実施例では、マスク338は、ゼロ設定フィールド335、ソースsrc選択フィールド336及び選択フィールド337から構成される。ゼロ設定フィールド335と選択フィールド337は、上記記載と同様に機能する。本実施例のソース選択フィールド336は、どのデータソースから選択ビットにより指定されるデータオペランドが取得されるか示すためのものである。例えば、同一のマスク群が、複数のマルチメディアレジスタなどの複数のデータソースにより利用されてもよい。各ソースマルチメディアレジスタには値が割当てられ、ソース選択フィールド336の値は、これらソースレジスタの1つに指定される。ソース選択フィールド336の内容に応じて、選択されたデータ要素が、packed結果の対応するデータ要素位置の配置のため、適切なデータソースから選択される。図4Aは、本発明の一実施例によるマルチメディアレジスタの各種packedデータタイプ表現を示す。図4Aは、128ビット長オペランドのpackedバイト410、packedワード420及びpackedダブルワードdwordのデータタイプを示す。本例のpackedバイトフォーマット410は、128ビット長であり、16のpackedバイトデータ要素を含む。ここでは、1バイトは8データビットとして規定される。各バイトデータ要素の情報は、バイト0に対してはビット7~ビット0に、バイト1に対してはビット15~ビット8に、バイト2に対してはビット23~ビット16に、最後にバイト15に対してはビット120~ビット127に格納される。従って、すべての利用可能なビットは、レジスタにおいて利用される。この格納構成は、プロセッサの格納効率を向上させる。また16個のデータ要素がアクセスされる場合、1つの処理が16個のデータ要素に対してパラレルに実行可能となる。一般に、データ要素は、同じ長さの他のデータ要素を有するオペランド単一のレジスタまたは記憶位置に格納される個々のデータである。SSE2技術に関するpackedデータシーケンスでは、オペランドXMMレジスタまたは記憶位置に格納されるデータ要素の個数は、個々のデータ要素のビットの長さにより除された128ビットである。同様に、MMX及びSSE技術に関するpackedデータシーケンスでは、オペランドMMXレジスタまたは記憶位置に格納されているデータ要素の個数は、個々のデータ要素のビットの長さにより除された64ビットである。本例のpackedワードフォーマット420は、128ビット長であり、8つのpackedワードデータ要素を有する。各packedワードは、16ビットの情報を有する。図4Aのpackedダブルワードフォーマット430は、128ビット長であり、4つのpackedダブルワードデータ要素を有する。各packedダブルワードデータ要素は、32ビットの情報を有する。packedクワドワードは、128ビット長であり、2つのpackedクワドワードデータ要素を有する。図4Bは、他のインレジスタデータストレージフォーマットを示す。各packedデータは、複数の独立したデータ要素を有することが可能である。packedハーフ442、packedシングル442及びpackedダブル443の3つのpackedデータフォーマットが示される。packedハーフ441、packedシングル442及びpackedダブル443の一実施例は、不動点データ要素を含む。他の実施例では、packedハーフ441、packedシングル442及びpackedダブル443の1以上が、浮動点データ要素を含むようにしてもよい。packedハーフ441の他の実施例は、8つの16ビットデータ要素を含む128ビット長である。packedシングル442の一実施例は、128ビット長であり、4つの32ビットデータ要素を含む。packedダブル443の一実施例は、128ビット長であり、2つの64ビットデータ要素を含む。このようなpackedデータフォーマットは、96ビット、160ビット、192ビット、224ビット、256ビット、またはそれ以上の他のレジスタ長に拡張されてもよい。図4Cは、intel.com/design/litcentrのワールドワイドウェブwww上のカリフォルニア州サンタクララのインテルコーポレイションから入手可能なIA-32IntelArchitectureSoftwareDeveloper’sManualVolume2:InstructionSetReferenceにう記載されるあるタイプのオペコードフォーマットに対応するレジスタ/メモリオペランドアドレッシングモード及び32ビット以上を有する処理符号化オペコードフォーマット460の一実施例を示す。シャッフル処理タイプが、フィールド461と462の1以上により符号化されてもよい。2つまでのソースオペランド識別子464と465を含む命令ごとに2つまでのオペランド位置が特定されるかもしれない。シャッフル命令の一実施例では、デスティネーションオペランド識別子466は、ソースオペランド識別子464と同一である。他の実施例では、デスティネーションオペランド識別子466は、ソースオペランド識別子465と同一である。従って、シャッフル処理の実施例では、ソースオペランド識別子464と465により識別されるソースオペランドの1つは、シャッフル処理の結果により上書きされる。シャッフル命令の一実施例では、オペランド識別子464と465は、64ビットソース及びデスティネーションオペランドを識別するのに利用されてもよい。図4Dは、40ビット以上を有する他の処理符号化オペコードフォーマット470を示す。オペコードフォーマット470は、オペコードフォーマット460に対応し、任意的なプリフィックスバイト478から構成される。シャッフル処理タイプは、フィールド478、471及び472の1以上により符号化されてもよい。命令ごとに2までのオペランド位置が、ソースオペランド識別子474と475及びプリフィックスバイト478により識別されてもよい。シャッフル命令の一実施例では、プリフィックスバイト478が、128ビットソース及びデスティネーションオペランドを識別するのに利用されてもよい。シャッフル命令の一実施例では、デスティネーションオペランド識別子476は、ソースオペランド識別子474と同一である。他の実施例では、デスティネーションオペランド識別子476は、ソースオペランド識別子475と同一である。従ってシャッフル処理の実施例では、ソースオペランド識別子474と475により特定されるソースオペランドの1つは、シャッフル処理の結果により上書きされる。オペコードフォーマット460と470は、MODフィールド463と473により部分的に、かつ任意的なスケールインデックスベース及びディスプレイスメントバイトにより指定されるレジスタツーレジスタ、メモリツーレジスタ、レジスタバイメモリ、レジスタバイレジスタ、レジスタバイイミディエート、レジスタツーメモリアドレッシングを可能にする。次に図4Eにおいて、他の実施例では、64ビットSIMDSingleInstructionMultipleData算術処理が、CDPCoprocessorDataProcessing命令を通じて実行されてもよい。処理符号化オペコードフォーマット480は、CDPオペコードフィールド482と489を有する当該CDP命令を示す。シャッフル処理の他の実施例では、CDP命令タイプは、フィールド483、484、487及び488の1以上により符号化されてもよい。2つまでのソースオペランド識別子485と490及び1つのデスティネーションオペランド識別子486を含む命令ごとに3つまでのオペランド位置が特定される。コプロセッサの一実施例が、8、16、32及び64ビット値に対して処理される。一実施例では、シャッフル処理が不動点または整数データ要素に対して実行される。一部の実施例では、シャッフル命令は、条件フィールド481を用いて条件付きで実行されてもよい。いくつかのシャッフル命令では、データサイズがフィールド483により符号化されてもよい。シャッフル命令のいくつかの実施例では、ゼロZ、ネガティブN、キャリーC及びオーバーフローV検出が、SIMDフィールドに対して実行可能である。いくつかの命令では、サチュレーションのタイプはフィールド484により符号化されてもよい。図5は、本発明によるシャッフルマスクに基づくデータオペランドに対してシャッフル処理を実行するロジックの一実施例のブロック図である。本実施例のゼロ設定機能を有するシャッフル処理の命令PSHUFBは、第1マスクオペランド510と第2データオペランド520の2つの情報から開始される。以下の説明では、MASK、DATA及びRESULTANTは、一般にオペランドまたはデータブロックと呼ばれ、以下に限定されないが、レジスタ、レジスタファイル及び記憶位置を含む。一実施例では、シャッフルPSHUFB命令は、1つのマイクロ処理に復号される。他の実施例では、当該命令は、データオペランドに対してシャッフル処理を実行するよう様々な個数のマイクロopも復号されてもよい。本例では、オペランド510と520は、バイト長データ要素を有するソースレジスタ/メモリに格納されている128ビット長の情報である。一実施例では、オペランド510と520は、128ビットSSE2XMMレジスタなどの128ビット長SIMDレジスタに保持される。しかしながら、オペランド510と520の1つまたは両方が、記憶位置からロード可能である。一実施例では、RESULTANT540はまた、MMXまたはXMMデータレジスタである。さらに、RESULTANT540はまた、ソースオペランドの1つと同一のレジスタまたは記憶位置であってもよい。特定の実現形態に応じて、オペランドとレジスタは、32、64及び256ビット等の他の長さとすることも可能であり、ワード、ダブルワードまたはクワドワードサイズのデータ要素を有することも可能である。本例では、第1オペランド510は、0x0E、0x0A、0x09、0x8F、0x02、0x0E、0x06、0x06、0x06、0xF0、0x04、0x08、0x08、0x06、0x0D及び0x00の16個のマスク16進数形式によるから構成される。各マスクは、結果540の対応するデータ要素位置の内容を特定するものである。第2オペランド520は、P、O、N、M、L、K、J、I、H、G、F、E、D、C、B及びAの16個のデータセグメントから構成される。第2オペランド520の各データセグメントはまた、16進数形式によるデータ要素位置の値によりラベル付けされている。ここで、データセグメントとは、等しい長さを有し、それぞれは1バイト8ビットデータから構成される。各データ要素がワード16ビット、ダブルワード32ビットまたはクワドワード64ビットである場合、128ビットオペランドはそれぞれ、8ワード長、4ダブルワード長または2クワドワード長データ要素を有するであろう。しかしながら、本発明の他の実施例は、他のサイズのデータオペランド及びデータセグメントにより処理可能である。本発明の実施例は、特定の長さのデータオペランド、データセグメントまたはシフトカウントに限定されず、各実現形態に適したサイズとすることが可能である。オペランド510と520は、レジスタ、記憶位置、レジスタファイルまたは組み合わせにより配置することが可能である。データオペランド510と520は、シャッフル命令と共に、プロセッサの実行ユニットのシャッフルロジック530に送信される。シャッフル命令が実行ユニットに到達するときまでに、当該命令はプロセッサパイプラインにおいて早期に復号されるべきであった。従って、シャッフル命令はマイクロ処理uopまたは他の復号形式とすることが可能である。本実施例では、これら2つのオペランド510と520は、シャッフルロジック530において受信される。シャッフルロジック530は、マスクオペランド510の値に基づき、ソースデータオペランド520からデータ要素を選択し、選択されたデータ要素を結果540の適切な位置に整理/シャッフルする。シャッフルロジック530はまた、指定されるように、結果540の与えられたデータ要素位置をゼロにする。ここで、結果540は、O、K、J、0、C、O、G、G、F、0、E、I、I、G、N及びAの16個のデータセグメントから構成される。シャッフルロジック530の処理が、ここではいくつかのデータ要素により説明される。マスクオペランド510の最左データ要素位置のシャッフルマスクは、0x0Eである。シャッフルロジック530は、図3A~Cにおいて上述されるようにマスクの各種フィールドを解釈する。この場合、ゼロ設定フィールドは設定されない。下位4ビット、すなわちニブルからなる選択フィールドは、Eの16進数値を有する。シャッフルロジック530は、データオペランド520のデータ要素位置0x0EのデータOを結果540の最左データ要素位置にシャッフルする。同様に、マスクオペランド510の第2最左データ要素位置のマスクは、0x0Aである。シャッフルロジック530は、当該位置に対するマスクを解釈する。この選択フィールドは、Aの16進数値を有する。シャッフルロジック530は、データオペランド520のデータ要素位置0xAのデータKを結果540の第2最左データ要素位置にコピーする。本実施例のシャッフルロジック530は、シャッフル命令のゼロクリア機能をサポートしている。マスクオペランド510の左から4番目のデータ要素位置におけるシャッフルマスクは、0x8Fである。シャッフルロジック510は、ゼロ設定フィールドがマスクのビット8における1により示されるように設定されていると認識する。これに応答して、ゼロ設定指示は選択フィールドに優先し、シャッフルロジック510は、当該マスクの選択フィールドの16進数Fを無視する。0が、結果540の左から4番目の対応するデータ要素位置に配置される。本実施例では、シャッフルロジック530は、各マスクに対してゼロ設定及び選択フィールドを評価し、予約ビットやソース選択フィールド等のマスクの当該フィールド外に存在するその他のビットについては考慮しない。シャッフルマスク及びデータシャッフルの当該処理は、マスクオペランド510のマスク全体に対して繰り返される。一実施例では、これらのマスクのすべては、パラレルに処理される。他の実施例では、マスク及びデータ要素の一部が、一度に一緒に処理可能である。当該シャッフル命令の実施例では、オペランドのデータ要素は様々な手法により再構成可能である。さらに、あるデータ要素からのデータは、複数のデータ要素位置において繰り返すことが可能であるか、あるいは、すべての位置に配信することも可能である。例えば、第4マスクと第5マスクの両方が、0x08の16進数値を有する。この結果、データオペランド520のデータ要素位置0x8のデータIは、結果540の右側から4番目と5番目のデータ要素位置にシャッフルされる。ゼロ設定機能により、シャッフル命令の実施例は、結果540のデータ要素位置の何れかを0にすることが可能である。実現形態に応じて、各シャッフルマスクは、結果における1つのデータ要素位置の内容を指定するのに利用可能である。本例と同様に、各バイト長シャッフルマスクは、結果540のバイト長データ要素位置に対応する。他の実施例では、複数のマスクの組み合わせは、データ要素ブロックを一緒に指定するのに利用可能である。例えば、2バイト長マスクは、ワードワイド長データ要素を指定するのに利用可能である。シャッフルマスクは、バイト長に限定されるものではなく、実現形態に必要とされる他の任意のサイズとすることが可能である。同様に、データ要素及びデータ要素位置は、バイト以外の粒度を有することが可能である。図6は、本発明によるデータシャッフル処理を実行するロジック600の一実施例のブロック図である。本実施例の回路は、第2オペランドのシャッフルマスクの復号に基づき、第1ソースオペランドから正しい結果バイトを選択する多重構成から構成される。ここで、ソースデータオペランドは、上位のpackedデータ要素と下位のpackedデータ要素から構成される。本実施例の多重構成は、他のpacked命令を実現するのに用いられる他の多重構成より比較的シンプルなものである。この結果、本実施例の多重構成は、新たなクリティカルなタイミングパスを導入するものではない。本実施例の回路600は、シャッフルマスクブロック、ソースオペランドからの下位/上位packedデータ要素を保持するブロック、データ要素の最初の選択のための第1の複数の8:1mux、上位及び下位のデータ要素の選択のための他の複数の3:1mux、mux選択ゼロロジック及び多数の制御信号を有する。簡単化のため、図6においては、限られた個数の8:1及び3:1muxが示され、ドットにより表される。しかしながら、それらの機能は、図示されたものと同様であり、以下の説明から理解することができる。本例のシャッフル処理中、一組のpackedデータ要素を有する第1オペランドと、一組のシャッフルマスクを有する第2オペランドの2つのオペランドが当該シャッフル処理回路600において受信される。シャッフルマスクは、シャッフルマスクブロック602に伝搬される。当該シャッフルマスク群は、各種選択信号SELECTA606、SELECTB608、SELECTC610及びゼロ設定信号ZERO611を生成するため、mux選択及びゼロロジックブロック604において復号される。これらの信号は、結果632を貫通するのにmuxの処理を制御するのに利用される。本例では、マスクオペランドとデータオペランドは共に、128ビット長であり、それぞれ16バイトサイズデータセグメントによりpackedされる。各種信号に対して示されるような値Nは、この場合には16である。本実施例では、データ要素は、一組の上位及び下位packedデータ要素に分けられ、各組は8つのデータ要素を有する。これは、16:1muxではなくデータ要素選択中により小さな8:1muxの使用を可能にする。これら上位及び下位のpackedデータ要素の組は、それぞれ上位及び下位の格納領域622と612に保持される。下位データセットから始まり、8つのデータ要素のそれぞれが、ルーティングライン614などの一組のラインを介し第1の組の16個の8:1mux618A~Dに送信される。16個の8:1mux618A~Dのそれぞれは、N個のSELECTA信号606の1つにより制御される。それのSELECTA606の値に応じて、当該muxは、さらなる処理のため下位の8つのデータ要素614の1つを出力するためのものである。下位データ要素の何れかを16個の結果データ要素位置の何れかにシャッフルすることが可能であるため、下位packedデータ要素に対しては、16個の8:1muxが存在する。16個の8:1muxのそれぞれは、16個の結果データ要素位置の1つに対するものである。同様に、16個の8:1muxが、上位のpackedデータ要素に対して与えられる。上位8つのデータ要素が、第2組の16個の8:1mux624A~Dのそれぞれに送信される。16個の8:1mux624A~Dのそれぞれは、N個のSELECTB信号608の1つにより制御される。それのSELECTB608の値に基づき、当該8:1muxは、さらなる処理のため上位8つのデータ要素616の1つを出力するためのものである。16個の3:1mux628A~Dのそれぞれは、結果632のデータ要素位置に対応する。16個の下位データmux618A~Dからの16個の出力620A~Dは、上位データmux624A~Dからの出力626A~Dと同様に、16個の3:1上位/下位選択mux628A~Dに送られる。これら3:1選択mux628A~Dのそれぞれは、mux選択及びゼロロジック604から自らのSELECTC610とZERO611の信号を受け取る。当該3:1muxに対するSELECTC610の値は、muxが下位のデータセットまたは上位のデータセットから選択されたデータオペランドを出力するためのものである。各3:1muxへの制御信号ZERO611は、当該muxがそれの出力をゼロ0にすべきであるか否かを示すためのものである。本実施例では、制御信号ZERO611は、SELECTC610に対する選択を優先し、当該データ要素位置の出力を結果632において0にする。例えば、3:1mux628Aは、当該データ要素位置に対して、8:1mux624Aから選択された上位データ要素626Aと、8:1mux618Aから選択された下位データ要素620Aを受け取る。SELECTC610は、それが結果632において管理するデータ要素位置にそれの出力630Aにおけるシャッフルすべきデータ要素を制御する。しかしながら、mux628Aへの信号ZERO611がアクティブ状態であり、当該データ要素位置に対するシャッフルマスクが0が所望されるということを示しているということが示されれば、mux出力630Aは0であり、データ要素入力620Aと626Aのいずれも利用されない。シャッフル処理の結果632は、16個の3:1mux628A~Dからの出力630A~Dから構成され、各出力は特定のデータ要素位置に対応し、データ要素または0の何れかとなる。本例では、各3:1mux出力は、1バイト長であり、結果は、16バイトpackedデータから構成されるデータブロックとなる。図7は、本発明の一実施例によるバイト長データ要素に対するデータシャッフルの処理を示す。これは、PSHUFBDATA,MASK命令の一例である。ここで、MASK701のバイト位置0x6と0xCのシャッフルマスクの最上位ビットは、当該位置の結果741における結果がゼロとなるように設定されることに留意されたい。本例では、ソースデータは、デスティネーションデータ記憶装置721に構成され、一実施例では、ソースオペランド721からの各データ要素がデスティネーションレジスタ741に格納されるアドレスを指定する一組のマスク701に関して、デスティネーションデータ記憶装置721は、ソースデータ記憶装置721となる。マスク701とデータ721の2つのソースオペランドは、結果741と同様に、本例ではそれぞれ16個のpackedデータ要素から構成される。本実施例では、関係するデータ要素のそれぞれは、8ビット、すなわち1バイト長である。従って、マスク701、データ721、及び結果741のデータブロックはそれぞれ128ビット長である。さらに、これらのデータブロックは、メモリまたはレジスタに配置することが可能である。一実施例では、マスクの構成は、例えば、フィルタリング処理や畳み込み処理を含む所望のデータ処理に基づく。図7に示されるように、マスクオペランド701は、0x0E702、0x0A703、0x09704、0x8F705、0x02706、0x0E707、0x06708、0x06709、0x05710、0xF0711、0x04712、0x08713、0x08714、0x06715、0x0D716、0x00717のシャッフルマスクを有するデータ要素を有する。同様に、データオペランド721は、P722、O723、N724、M725、L726、K727、J728、I729、H730、G731、F732、E733、D734、C735、B736及びA737のソースデータ要素を有する。図7のデータセグメントの表現では、データ要素位置は、16進数としてのデータにおいて言及される。従って、packedシャッフル処理は、マスク701とデータ721により実行される。シャッフルマスク701を利用して、データ721の処理がパラレルに実行可能である。各データ要素シャッフルマスクが評価されると、指定されたデータ要素または0からの適切なデータが、当該シャッフルマスクの対応するデータ要素位置にシャッフルされる。例えば、最右シャッフルマスク717は、ソースデータオペランドの位置0x0からデータを指定するのに復号される0x00の値を有する。これに応答して、データ位置0x0からのデータAは、結果741の最右位置にコピーされる。同様に、右から2番目のシャッフルマスク716は、0xDに復号された0x0Dの値を有する。従って、データ位置0xDからのデータNは、結果741の右から2番目の位置にコピーされる。結果741の左から4番目のデータ要素位置は、0である。これは、当該データ要素位置に対するシャッフルマスクにおける0x8Fの値により生じる。本実施例では、シャッフルマスクバイトのビット7は、ゼロ設定またはゼロクリア標識である。当該フィールドが設定されると、結果における対応するデータ要素位置は、ソースデータオペランド721からのデータの代わりに、0の値により充填される。同様に、結果741の右から7番目の位置は、0の値を有する。これは、マスク701の当該データ要素位置に対する0xF0のシャッフルマスク値によるものである。ここで、シャッフルマスクのすべてのビットが実施例において利用されるとは限らないということに留意されたい。本実施例では、シャッフルマスクの下位ニブル、すなわち下位4ビットで、ソースデータオペランド721の可能な16個のデータ要素の何れかを選択するのに十分である。ビット7がゼロ設定フィールドであるとき、他の3つのビットは使用されないままであり、実施例において予約または無視することが可能である。本実施例では、シャッフルマスクの下位ニブルに示されるように、ゼロ設定フィールドはデータ要素選択を制御及びオーバーライドする。これらの例の両方で、左から4番目のデータ要素位置と右から7番目の位置、ゼロクリアフラグがビット7において設定される0x80のシャッフルマスク値はまた、対応する結果となるデータ要素位置が0により充填されるのを可能にする。図7に示されるように、矢印はマスク701のシャッフルマスクごとのデータ要素のシャッフル処理を示す。シャッフルマスクに応じて、ソースデータ要素の1以上は結果741に現れないかもしれない。いくつかの例では、1以上の0がまた、結果741の様々なデータ要素位置に出現し得る。シャッフルマスクが1つのデータ要素またはデータ要素群を配信するよう構成される場合、これらデータ要素のデータは、結果における選ばれたパターンとして繰り返されてもよい。本発明の実施例は、何れか特定の構成またはシャッフルパターンに限定されるものではない。上述のように、ソースデータレジスタはまた、本実施例のデスティネーションデータストレージレジスタとして利用され、これにより、必要なレジスタの個数を減少させることができる。ソースデータ721がオーバーライドされるが、シャッフルマスク701は変更されず、以降の参照のため利用可能である。ソースデータストレージ装置内のオーバーライドされたデータは、メモリまたは他のレジスタからリロードすることが可能である。他の実施例では、複数のレジスタが、ソースデータストレージ装置として利用可能であり、各データは所望のようにデスティネーションデータストレージ装置内に構成される。図8は、本発明の他の実施例によるワード長データ要素に対するデータシャッフル処理を示す。本例の一般的説明は、図7と同様である。本実施例では、データ要素ワードは、マスクオペランド801のシャッフルマスクがバイトサイズであるため、データ要素バイトのペアとして処理される。従って、シャッフルマスクバイトのペアは、各データ要素ワード位置を規定するのに利用される。しかしながら他の実施例では、シャッフルマスクは、ワード粒度を有することが可能であり、結果におけるワードサイズのデータ要素位置を記述する。本例のマスクオペランド801は、0x03802、0x02803、0x0F804、0x0F804、0x0E805、0x83806、0x82807、0x0D808、0x0C809、0x05810、0x04811、0x0B812、0x0A813、0x0D814、0x0C815、0x01816及び0x00817のシャッフルマスクを有するバイト長データ要素を有する。データオペランド821は、H822、G823、F824、E835、D836、C827、B828、A829のソースデータ要素を有する。図8のデータセグメントの表示において、データ要素位置はまた、16進数としてのデータにより表される。図8に示されるように、データオペランド821の各ワードサイズデータ要素は、それが2バイトサイズ位置を占有するデータ位置アドレスを有する。例えば、データH822は、バイトサイズデータ要素位置0xFと0xEを占有する。packedシャッフル処理は、マスク801とデータ821により実行される。図8の矢印は、マスク801のシャッフルマスクごとのデータ要素のシャッフル処理を示す。各データ要素シャッフルマスクが評価されるとき、データオペランド821または0の指定されたデータ要素位置からの適当なデータが、当該シャッフルマスクに対する結果831の対応するデータ要素位置にシャッフルされる。本実施例では、ワードサイズデータ要素を指定するため、バイトサイズシャッフルマスクがペアで処理される。例えば、マスクオペランド801の2つの最左シャッフルマスク0x03802と0x02803は共に、結果831の最左ワード長データ要素位置832に対応する。シャッフル処理中、これら2つのデータバイト、または本ケースではデータB828であるデータ要素バイト位置0x03と0x02における1つのデータワードは、結果831の2つの最左バイトサイズデータ要素位置832に構成される。さらに、シャッフルマスクはまた、結果831の第3のワードサイズデータ要素位置834のシャッフルマスク0x83806と0x82807により示されるように、結果においてワードサイズデータ要素を0にするよう構成可能である。シャッフルマスク0x83806と0x82807は、それらのゼロ設定フィールドセットを有する。2つのシャッフルマスクバイトが共にペアにされているが、異なるペアリングが、例えば、クワドワードとして4バイト、または、ダブルのクワドワードを形成するため8バイトを構成するよう実現可能である。同様に、当該ペアリングは、連続するシャッフルマスクまたは特定バイトに限定されるものではない。他の実施例では、ワードサイズシャッフルマスクが、ワードサイズデータ要素を指定するのに利用可能である。図9は、データをシャッフルするための方法の一実施例を示すフローチャート900である。Lの長さの値が、一般にデータブロック及びオペランドの幅を表すのに利用される。実施例に応じて、Lはデータセグメント数、ビット、バイト、ワード等に関する長さを指定するのに利用可能である。ブロック910において、第1長さLのpackedデータオペランドが、シャッフル処理による利用のため受け取られる。ブロック920において、シャッフルパターンを指定するMの長さのシャッフルマスクの長さLが受け取られる。本例では、Lは128ビットであり、Mは8ビット、すなわち1バイトである。他の実施例では、LとMはまた、それぞれ256と16などの他の値とすることも可能である。ブロック930において、シャッフル処理が実行され、データオペランドからのデータ要素が、シャッフルパターンに従って結果にシャッフル構成される。本実施例のブロック930におけるシャッフルの詳細がさらに、各データ要素位置に対して行われるものに関して説明される。一実施例では、すべてのpacked結果データ要素位置のシャッフル処理は、パラレルに処理される。他の実施例では、マスクの一部が一度に一緒に処理される。ブロック932において、ゼロフラグが設定されているかチェックされる。このゼロフラグは、各シャッフルマスクのゼロ設定またはゼロクリアフィールドを参照する。ゼロフラグがブロック932において設定されていると判断されると、当該シャッフルマスクに対応する結果のデータ要素位置のエントリが0に設定される。ゼロフラグがブロック932において設定されていないと検出されると、シャッフルマスクにより指定されるソースデータ要素からのデータは、当該シャッフルマスクに対応する結果のデスティネーションデータ要素位置に構成される。現在、整数命令を用いたテーブル検索は、多数の命令を必要とする。整数処理がSIMD命令により実現されるアルゴリズムに対するデータへのアクセスに利用される場合、さらに多数の命令が検索ごとに必要となる。しかし、packedバイトシャッフル命令の実施例を利用することによって、命令数と実行時間を劇的に低減することができる。例えば、テーブルサイズが16バイト以下である場合、1つの命令によるテーブル検索中に16データバイトにアクセス可能である。テーブルサイズが17~32バイトの範囲内にある場合、11個のSIMD命令がテーブルデータを検索するのに利用可能である。テーブルサイズが33~64バイトの範囲内にある場合、23個のSIMD命令が必要となる。検索テーブルの利用によるSIMD命令により実現できないデータ並列化によるいくつかのアプリケーションがある。映像圧縮方法H.26Lの量子化及びデブロッキングアルゴリズムは、128ビットレジスタに適合しない小さな検索テーブルを用いたアルゴリズムの一例である。いくつかのケースでは、これらのアルゴリズムにより利用される検索テーブルは、小さなものである。テーブルが1つのレジスタにおいて適合可能である場合、テーブル検索処理は、1つのpackedシャッフル命令により実現することが可能である。テーブルのメモリスペース要求が1つのレジスタのサイズを超える場合、packedシャッフル命令の一実施例は、異なるアルゴリズムを介して動作可能である。サイズ超過したテーブルを処理する方法の一実施例は、テーブルを各々がレジスタの要領に等しいセクションに分割し、シャッフル命令によりこれらのテーブルセクションのそれぞれにアクセスする。シャッフル命令は、同一のシャッフル制御シーケンスを用いてテーブルの各セクションにアクセスする。この結果、パラレルテーブル検索が、packedバイトシャッフル命令による場合に実現することが可能となり、これにより、アルゴリズムのパフォーマンスを向上させるため、SIMD命令の利用が可能となる。本発明の実施例は、パフォーマンスを向上させるのに利用可能であり、小さな検索テーブルを利用するあるアルゴリズムに必要なメモリアクセス数を低減することが可能となる。他の実施例は、SIMD命令を用いた複数の検索テーブル要素のアクセスを可能にする。本発明によるpackedバイトシャッフル命令は、小さな検索テーブルを用いたアルゴリズムのあまり効率的でない整数移入の代わりに、効率的なSIMD命令実現形態を可能にする。本発明の実施例は、1つのレジスタより大きなメモリスペースを必要とするテーブルからのデータへのアクセス方法を明示する。本例では、レジスタはテーブルの異なるセグメントを含む。図10A~Hは、SIMD命令を用いたパラレルテーブル検索アルゴリズムの処理を示す。図10A~Hに説明される例は、複数のテーブルからのデータの検索に関し、一組のマスクに指定されるような選択されたデータ要素が、これら複数のテーブルから結果データのマージされたブロックにシャッフルされる。以下の説明は、特に前述のようなpackedシャッフル命令などのpacked処理に関して説明される。本例のシャッフル処理は、レジスタのソーステーブルデータを上書きする。テーブルが検索処理に従って再利用される場合、テーブルデータは、他のロードが必要とならないように当該処理が実行される前に、他のレジスタにコピーされる。他の実施例では、シャッフル処理は、2つのソースと1つのデスティネーションの3つの独立したレジスタまたは記憶位置を利用する。他の実施例のデスティネーションは、ソースオペランドの何れかとは異なるレジスタまたは記憶位置である。従って、ソーステーブルデータは、オーバーライドされず、再利用可能である。本例では、テーブルデータはより大きなテーブルの各部分からのものとして扱われる。例えば、LOWTABLEDATA1021は、テーブルの下位アドレス領域からのものであり、HIGHTABLEDATA1051は、テーブルの上位アドレス領域からのものである。本発明の実施例は、テーブルデータのソースに関して限定されるものではない。データブロック1021と1051は、隣接していてもよし、離れていてもよいし、重複していてもよい。同様に、テーブルデータはまた、異なるデータテーブルまたはメモリソースからのものとすることも可能である。また、このようなテーブル検索及びデータマージ処理は、複数のテーブルからのデータに対して実行可能であると想定される。例えば、同じテーブルの異なる部分から取得される代わりに、LOWTABLEDATA1021が第1テーブルから、HIGHTABLEDATA1051が第2テーブルからのものとすることも可能である。図10Aは、一組のシャッフルマスクに基づくテーブルからの第1組のデータ要素のpackedデータシャッフルを示す。この第1組のデータ要素は、LOWTABLEDATA1021と称されるオペランドとしてグループ化される。MASK1001とLOWTABLEDATA1021はそれぞれ、本例では16個の要素から構成される。MASK1001とLOWTABLEDATA1021のシャッフル処理は、結果としてのTEMPRESULTANT1041をもたらす。シャッフル制御マスクの下位部分は、レジスタのデータ要素を選択する。データ要素を選択するのに必要とされるビット数は、log2でのレジスタデータ要素数である。例えば、レジスタ容量が128ビットであって、データタイプがバイトである場合、レジスタデータ要素の個数は16である。この場合、データ要素を選択するのに4ビットが必要となる。図10Bは、図10Aの同じ組のシャッフルマスクに基づくテーブルからの第2組のデータ要素のpackedデータシャッフルを示す。この第2組のデータ要素は、HIGHTABLEDATAと名付けられたオペランドとしてグループ化される。HIGHTABLEDATA1051はまた、本例では16個の要素から構成される。MASK1001とHIGHTABLEDATA1051のシャッフル処理は、結果のTEMPRESULTANTB1042をもたらす。同一の組のマスク1001がLOWTABLEDATA1021とHIGHTABLEDATA1051の両方で利用されたため、それぞれの結果1041と1042は、異なるソースデータから同様に配置されたデータを有するようになる。例えば、両方の結果1041と1042の最左データ位置は、それの各自のデータソース1021と1051のデータ要素0xE1023と1053からのデータを有する。図10Cは、SELECTFILTER1043とシャッフルマスクの組MASKに関する論理packedAND処理を示す。このケースでのSELECTFILTERは、MASK1001のシャッフルマスクの何れが第1テーブルデータ1021に関し、何れが第2テーブルデータに関するものであるか区別するためのフィルタである。本実施例のシャッフルマスクは、図3Cで前述されたように、ソース選択フィールドSRCSELECT336を利用する。シャッフル制御バイトの下位ビットは、レジスタのデータ要素位置を選択するのに利用され、最上位ビットを除く上位ビットは、テーブルのセグメントを選択するのに利用される。本実施例では、データを選択するのに利用されるものの直前及び隣接するビットが、テーブルの選択を選択する。SELECTFILTER1043は、シャッフルマスクからのソース選択フィールドから分離されたMASK1001のすべてのシャッフルマスクに0x10を適用する。packedAND処理は、最終結果のどのデータ要素位置が、第1データ群1021または第2データ群1051からものとすべきか示すTABLESELECTMASK1044をもたらす。テーブル選択を選択するためのビット数は、log2によるテーブルセクション数に等しい。例えば、16バイトレジスタを有する17~32バイトの範囲内のテーブルサイズの場合には、最下位の4ビットがデータを選択し、5番目のビットがテーブルセクションを選択する。ここで、ソース選択は、2つのデータソース1021と1051があるため、各シャッフルマスクの第2ニブルの最下位ビットであるビット4を用いてデータソースを指定する。0から15までのインデックスを有するテーブルのセクションが、図10Aのpackedシャッフル命令によりアクセスされる。16から31までのインデックスを有するテーブルのセクションが、図10Bのpackedシャッフル命令によりアクセスされる。テーブルのセクションを選択するフィールドは、図10Cのシャッフル制御バイト/インデックスとは隔離されている。多数のデータソースを有する実現形態では、追加ビットは、ソース選択フィールドを必要するかもしれない。32バイトテーブルの場合には、シャッフル制御バイト0x00~0x0Fは、第1テーブルセクションのテーブル要素0~15を選択し、シャッフル制御バイト0x10~0x1Fは、第2テーブルセクションのテーブル要素16~31を選択する。例えば、シャッフル制御バイトが0x19を指定していると考える。0x19のビット表現は、00011001である。下位4ビット1001は、9番目のバイト0からカウントするを選択し、1に設定されている5番目のビットは2つのテーブルの第2テーブルを選択する。0に等しい第5ビットは、第1テーブルを選択する。インデックス0~15を有する第1テーブルセクションからアクセスされるデータ値を選択するマスクは、第5ビットがゼロとなるシャッフル制御バイトを選択することにより、図10Dの本実施例のpackedcompareequaloperationにより計算される。図10Dは、LOWFILTER1045とTABLESELECTMASK1044のpackedcompareequaloperationを示す。第1テーブルセクションに対する図10Dにおいて生成された下位テーブル選択マスクは、他のpackedシャッフル処理により第1テーブルセクションからアクセスされるデータ要素を選択する。本例のLOWFILTER1045は、第1データセット1021から生じるようなシャッフルマスクにより示されるデータ要素位置をハイライトまたは抽出するためのマスクである。本実施例において、ソース選択フィールドは0である場合、データソースは、LOWTABLEDATA1021となる。compareequaloperationは、0のソース選択値を有するデータ要素位置に対する0xFFの値を有するLOWTABLESELECTMASK1046をもたらす。16~31のインデックスを有する第2テーブルセクションからアクセスされるデータ値を選択するマスクは、第5ビットが1となるシャッフル制御バイトを選択することにより図10Eのpackedcompareequaloperationにより計算される。図10Eは、HIGHFILTER1047とTABLESELECTMASK1044に対する同様のcompareequaloperationを示す。第2テーブルセクションに対する図10Eにおいて生成される上位のテーブル選択マスクは、packedシャッフル処理により第2テーブルセクションからアクセスされるデータ要素を選択する。HIGHFILTER1047は、第2データセット1051から生じるようなシャッフルマスクのソース選択フィールドにより示されるデータ要素位置を抽出するマスクである。本実施例において、ソース選択フィールドが1である場合、データソースは、HIGHTABLEDATA1051となる。compareequaloperationは、1のソース選択値を有するデータ要素位置に対して0xFFの値を有するHIGHTABLESELECTMASK1048をもたらす。図10Fにおいて、2つのテーブルセクションから選択されたデータ要素がマージされる。図10Fにおいて、LOWTABLESELECTMASK1046とTEMPRESULTANTA1041に対するpackedAND処理が示される。このpackedAND処理は、ソース選択フィールドに基づくマスク1046ごとに第1データセット1021から選択されたシャッフルされたデータ要素をフィルタリングする。例えば、最左データ要素位置に対するシャッフルマスク1002のソース選択フィールドは、TABLESELECTMASK1044に示されるように、0の値を有する。従って、LOWTABLESELECTMASK1046は、当該位置に0xFFの値を有する。最左データ要素位置のデータと0xFFとの間の図10FにおけるAND処理は、データOをSELECTEDLOWTABLEDATA1049に転送させる。他方、左から3番目のデータ要素位置に対するシャッフルマスク1004のソース選択フィールドは、データが第1データセット1021以外のソースからのものであることを示す1の値を有する。従って、LOWTABLESELECTMASK1046は、当該位置に0x00の値を有する。ここで、AND処理は、データJをSELECTEDLOWTABLEDATA1049にわたさず、当該位置は0x00としてエンプティのままにされる。図10Gにおいて、HIGHTABLESELECTMASK1048及びTEMPRESULTANTB1042に対する同様のpackedAND処理が示される。このpackedAND処理は、マスク1048ごとに第2データセット1051から選択されたシャッフルデータ要素をフィルタリングする。図10Fにおいて説明されるpackedAND処理とは異なり、マスク1048は、第2データセットからもたらされるようなソース選択フィールドにより示されるデータが、SELECTEDHIGHTABLEDATA1050にわたされるのを可能にし、その他のデータ要素位置がエンプティのままにされる。図10Hは、第1データセットと第2データセットからの選択されたデータのマージ処理を示す。本例では、パラレルテーブル検索アルゴリズムの所望の結果であるMERGEDSELECTEDTABLEDATA1070を取得するため、SELECTEDLOWTABLEDATA1049とSELECTEDHIGHTABLEDATA1050に対して、packed論理OR処理が実行される。他の実施例では、SELECTEDLOWTABLEDATA1049とSELECTEDHIGHTABLEDATA1050を加算するためのpacked加算処理が、MERGEDSELECTEDTABLEDATA1070を生成することが可能である。図10Hに示されるように、SELECTEDLOWTABLEDATA1049またはSELECTEDHIGHTABLEDATA1050の何れかは、本実施例では与えられたデータ位置に0x00の値を有する。これは、0x00を有さないその他のオペランドが適切なソースから選択された所望のテーブルデータを有するためである。ここで、結果1070の最左データ要素位置は、第1データセット1021からのシャッフルされたデータ1041であるOである。同様に、結果1070の左から3番目のデータ要素位置は、第2データセット1051からのシャッフルされたデータ1042であるZである。本実施例のサイズ超過したテーブルを検索する方法は、一般に以下の処理によりまとめることができる。まず、テーブルデータをレジスタにコピーまたはロードする。各テーブルセクションからのテーブル値が、packedシャッフル処理によりアクセスされる。テーブルセクションを特定するソース選択フィールドは、シャッフルマスクから抽出される。どのテーブルセクションがシャッフルされたデータ要素の適切なソースであるか判断するためのテーブルセクション番号を有するソース選択フィールドに対するcompare-if-equal処理が実行される。このcompare-if-equal処理は、各テーブルセクションに対して所望のシャッフルされたデータ要素をさらにフィルタリングするためのマスクを提供する。適切なテーブル要素からの所望のデータ要素が、最終的なテーブル検索結果を形成するためマージされる。図11は、SIMD命令を用いてテーブル検索を実行する方法の一実施例を示すフローチャートである。ここで説明されたフローは一般に、図10A~Hの方法に従うが、これに限定されるものではない。これらの処理のいくつかは、異なる順序または様々なタイプのSIMD命令を用いて実行可能である。ブロック1102において、シャッフルパターンを指定する一組のシャッフルマスクが受け取られる。これらのシャッフルマスクはまた、どのテーブルまたはソースから所望の結果を取得するためデータ要素をシャッフルすべきか示すためのソースフィールドを有する。ブロック1104において、テーブルまたは第1データセットの第1部分のデータ要素がロードされる。ブロック1106において、ブロック1102のシャッフルパターンに従って、第1部分データ要素がシャッフルされる。ブロック1108において、第2データセットまたはテーブルの第2部分のデータ要素がロードされる。ブロック1110において、第2部分データ要素は、ブロック1102のシャッフルパターンに従ってシャッフルされる。ブロック1112において、テーブル選択が、シャッフルマスクからフィルタリングされる。本実施例のテーブル選択は、データ要素がどこから生じるか示すソース選択フィールドに関する。ブロック1114において、テーブルの第1部分からシャッフルデータに対して、テーブル選択マスクが生成される。ブロック1116において、テーブルの第2部分からシャッフルデータに対して、テーブル選択マスクが生成される、これらのテーブル選択マスクは、適切なテーブルデータソースから特定のデータ要素位置に対する所望のシャッフルされたデータ要素をフィルタリングするためのものである。ブロック1118において、第1テーブル部分に対するブロック1114のテーブル選択マスクに従って、第1テーブル部分のシャッフルされたデータからデータ要素が選択される。ブロック1120において、第2テーブル部分に対するブロック1116のテーブル選択マスクに従って、第2テーブル部分のシャッフルされたデータからデータ要素が選択される。ブロック1118において第1テーブル部分及びブロック1120において第2テーブル部分から選択されたシャッフルされたデータ要素は、マージされたテーブルデータを取得するため、ブロック1122においてマージされる。一実施例のマージされたテーブルデータは、第1及び第2テーブルデータからのシャッフルされたデータ要素を含む。他の実施例では、マージされたテーブルデータは、3以上のテーブルソースまたは記憶領域から検索されたデータを有することが可能である。図12は、テーブル検索を実行する方法の他の実施例を示すフローチャートである。ブロック1202において、複数のデータ要素を有するテーブルがロードされる。ブロック1204において、当該テーブルが1つのレジスタに適合するか判断される。テーブルが1つのレジスタに適合する場合、ブロック1216において、テーブル検索がシャッフル処理により実行される。データが1つのレジスタに適合しない場合、ブロック1206において、テーブルの関連する各部分に対して、テーブル検索がシャッフル処理により実行される。テーブル部分またはデータソースを選択するビットまたはフィールドを取得するため、論理packedAND処理が実行される。ブロック1210において、compare-if-equal処理が、検索されるテーブルの関連する部分からテーブルデータを選択するためのマスクを生成する。ブロック1212において、テーブルセクションからデータアイテムを選択及び検索するため、論理AND処理が利用される。ブロック1214において、論理OR処理は、所望の検索データを取得するため、選択されたデータをマージする。ゼロクリア機能を用いて複数のレジスタ間のデータを再構成するためのアルゴリズムへのpackedシャッフル命令の一実施例が実現される。ミックス処理の目的は、結果におけるデータ位置がソースオペランドのもとの位置とは異なる選択された構成の1つのSIMDレジスタの2以上のSIMDレジスタの内容をマージするためのものである。選択されたデータ要素は、まず所望の結果位置に移動され、選択されていないデータ要素はゼロに設定される。選択されたデータ要素が1つのレジスタに対して移動された位置が、他のレジスタではゼロに設定される。この結果、結果レジスタの1つは、与えられたデータ要素位置に非ゼロのデータアイテムを含む。以下の一般的な命令シーケンスが、2つのオペランドからデータを合成するのに利用可能である。オペランドDATAA及びDATABは、ゼロ設定のため再構成される要素を含む。オペランドMASKAとMASKBは、データ要素が移動される場所及びどのデータ要素がゼロに設定されるかを指定するシャッフル制御バイトを含む。本実施例では、MASKAによりゼロに設定されないデスティネーション位置のデータ要素が、MASKBによりゼロに設定され、MASKBによりゼロに設定されないデスティネーション位置が、MASKAによりゼロに設定される。図13A~Cは、複数のレジスタの間のデータを再構成するためのアルゴリズムを示す。本例では、2つのデータソースまたはレジスタ1304と1310からのデータ要素が、インタリーブされたデータブロック1314にシャッフルされる。本例のマスク1302と1308、ソースデータ1304と1310及び結果1306、1312と1314を含むデータブロックはそれぞれ、128ビット長であり、16バイトサイズのデータ要素から構成される。しかしながら、他の実施例は、様々なサイズのデータ要素を有する他の長さのデータブロックを含むことが可能である。図13Aは、第1ソースデータオペランドDATAA1304に対する第1マスクMASKA1302の第1のpackedデータシャッフル処理を示す。本例では、所望のインタリーブされた結果1314は、第1データソース1304から1つのデータ要素と、第2データソース1310から他のデータ要素のインタリーブパターンを含む。本例では、DATAA1304の第5バイトは、DATAB1310の20番目のバイトとインタリーブされる。MASKA1302は、本実施例では、0x80と0x05の繰り返しのパターンを含む。本実施例の0x80の値は、ゼロ設定フィールドを有し、関連するデータ要素位置は0で充填される。0x05の値は、当該シャッフルマスクの関連するデータ要素位置が、DATAA1304のデータ要素0x5からのデータF1により構成されるべきである。本来的に、MASKA1302のシャッフルパターンは、1つおきの結果のデータ要素位置のデータF1を構成及び繰り返す。ここで、データF1は、DATAA1304からシャッフルされる1つのデータである。他の実施例では、各個数のソースデータ要素からのデータが、シャッフル可能である。従って、実施例は特定のパターンまたは1つのデータに関するパターンに限定されるものではない。マスクパターンの構成の組み合わせは、すべてのタイプの可能にオープンである。図13Aの矢印は、MASKA1302のシャッフルマスクごとのデータ要素のシャッフル処理を示す。このシャッフル処理のRESULTANTA1306は、マスクパターン1302ごとに0とF1のパターンから構成される。図13Bは、第2ソースデータオペランドDATAB1310と共に、第2マスクMASKB1308に関する第2のpackedデータシャッフル処理を示す。MASKB1308は、0x0Cと0x80の繰り返しのパターンを有する。0x80の値は、当該シャッフルマスクの関連するデータ位置に0を受け取らせる。0xC0の値は、当該シャッフルマスクに対応する結果のデータ要素位置をDATAB1310のデータ要素0xCからのデータM2により配置させる。MASKB1308のシャッフルパターンは、データM2を1つおきの結果のデータ要素位置に配置する。図13Bの矢印は、MASKB1308のシャッフルマスクの組ごとのデータ要素のシャッフル処理を示す。このシャッフル処理のRESULTANTB1312は、マスクパターン1308ごとのM2と0のパターンから構成される。図13Cは、INTERLEAVEDRESULTANT1314を実現するため、シャッフルされたデータRESULTANTA1306とRESULTANTB1312のマージ処理を示す。マージ処理は、packed論理OR処理により実現される。RESULTANTA1306とRESULTANTB1312の0の値のパターンは、M2とF1のデータ値1314のインタリーブを可能にする。例えば、最左データ要素位置では、0とM2の論理ORは、結果1314の最左データ要素位置にM2をもたらす。同様に最右データ要素位置では、F1と0の論理ORにより、結果1314の最右データ要素位置がF1になる。従って、複数のレジスタまたは記憶位置からのデータが、所望のパターンに再構成することが可能である。図14は、複数のレジスタの間でデータを再構成する方法の一実施例を示すフローチャートである。ブロック140において、データは第1レジスタまたは記憶位置からロードされる。ブロック1404において、第1のシャッフルマスクの組に基づき、第1レジスタデータがシャッフルされる。ブロック1406において、第2レジスタまたは記憶位置からデータがロードされる。ブロック1408において、この第2レジスタデータは、第2のシャッフルマスクの組に従ってシャッフルされる。ブロック1410において、第1及び第2のレジスタシャッフルからのシャッフルされたデータは、第1及び第2レジスタからのデータを有するインタリーブされたデータブロックに到着するよう論理ORによりブロック1410においてマージされる。図15A~Kは、インタリーブされたデータを生成するため複数のレジスタの間でデータをシャッフルするアルゴリズムを示す。これは、平面カラーデータをインタリーブするアプリケーションの一例である。しばしば画像データは、個別のカラー平面において処理され、その後、これらの平面が表示のため以降でインタリーブされる。以下に説明されるアルゴリズムは、ビットマップ等の画像フォーマットにより利用されるような赤平面、緑平面及び青平面のインタリーブ処理を示す。多数の色空間及びインタリーブパターンが可能である。また、このアプローチは、他の色空間及びフォーマットに容易に拡張可能である、本例による実現形態は、しばしば赤R平面、緑G平面及び青B平面データがRGBフォーマットにインタリーブされる画像処理データフォーマット処理を利用する。本例は、本発明によるゼロクリア機能がメモリアクセスを大きく減少させる方法を示す。これらのソースからのデータは、インタリーブ形式に合成される。より詳細には、当該データは画素カラーデータに関する。例えば、各画素のカラーデータは、赤R、緑G及び青Bソースからの情報を含むことが可能である。色情報を合成することによって、赤/緑/青RGBデータは、当該画素の所望の色を提供するよう評価可能である。ここで、赤データはオペランドDATAA1512に保持され、緑データはデータオペランドDATAB1514に保持され、青データはDATAC1516に保持される。この構成は、各色のデータがストリーミングデータと同様に個別に収集または一緒に格納されるグラフィックまたはメモリシステムに存在可能である。所望の画像を再生成または表示するのにこの情報を利用するため、画素データは、当該画素のすべてのデータがグループ化されるRGBパターンに構成される必要がある。本実施例では、所定のパターンを有する一組のマスクが、RGBデータをインタリーブルするのに利用される。図15Aは、第1パターンを有するMASKA1502、第2パターンを有するMASKB1504、及び第3パターンを有するMASKC1506をマスク群として示す。各レジスタからのデータは、他の2つのレジスタからデータとインタリーブされ得るように、3バイト離れて配置される。16進数0x80を有する制御バイトは、対応するバイトがpackedバイトシャッフル命令によりゼロクリアされるように、最上位ビットセットを有する。これらのマスクのそれぞれにおいて、3つおきにシャッフルマスクがシャッフル処理用のデータ要素を選択することが可能にされ、2つの介在するシャッフルマスクは0x80の値を有する。0x08の値は、これら対応するデータ要素位置のマスクのゼロ設定フィールドが設定されていることを示す。従って、当該マスクに係るデータ要素位置に0が配置される。本例では、マスクパターンは、インタリーブ処理を実現するため、各色に対してデータ要素を基本的に分離する。例えば、MASKA1502がシャッフル処理においてデータオペランドに適用されるとき、MASKA1502は、各データ要素間の2つのデータ要素スペースにより6つのデータ要素0x0、0x1、0x2、0x3、0x4、0x5を個別にシャッフルさせる。同様に、MASKB1504は、0x0、0x1、0x2、0x3、0x4において個別にシャッフルする。MASKC1506は、0x0、0x1、0x2、0x3、0x4においてデータ要素を個別にシャッフルする。ここで、本実現形態では、重複する各データ要素位置に対するシャッフルマスクは、2つのゼロ設定フィールドとデータ要素を指定する1つのシャッフルマスクを有する。例えば、3つのマスク1502、1504及び1056の最右データ要素位置を参照するに、シャッフルマスク値は、MASKA1502、MASKB1504及びMASKC1506に対して0x00、0x80及び0x80となる。従って、MASKA1502に対するシャッフルマスク0x00のみが、当該位置に対するデータを指定する。本実施例のマスクは、シャッフルされたデータがインタリーブされたRGBデータブロックを形成するのに容易にマージ可能となるようパターン処理される。図15Bは、DATAA1512、DATAB1514及びDATAC1516のインタリーブされるデータブロックを示す。本実施例では、各データセットは、16個の画素位置に対する色情報を有するデータエントリを有する。ここで、データ要素における各色レターを伴うサブスクリプトは、当該画素番号を表す。例えば、R0は画素0に対する赤色データであり、G15は画素15に対する緑色データである。図示される各データ要素における16進数は、当該データ要素位置の番号である。色データDATAA1512、DATAB1514、DATAC1516は、データがシャッフル処理により上書きされず、他のロード処理なく再利用できないように、他のレジスタにコピーされてもよい。本実施例では、3つのマスク1502、1504及び1506を有する3つのパスが、画素データインタリーブ処理を完了させるのに必要とされる。他の実現形態及び他のデータ量では、パス及びシャッフル処理の回数は、必要に応じて可変とされる。図15Cは、第1シャッフルパターンMASKA1502による赤色画素データDATAA1512に対するpackedシャッフル処理の結果のデータブロックMASKEDDATAA1522を示す。MASKA1502に応答して、赤色画素データが3つおきのデータ要素位置に配置される。同様に、図15Dは、第2シャッフルパターンMASKB1504による緑色画素データDATAB1514に対するpackedシャッフル処理に対する結果のデータブロックMASKEDDATAB1524を示す。図15Eは、第3シャッフルパターンMASKC1506による青色画素データDATAC1516に対するpackedシャッフル処理に対する結果のデータブロックMASKEDDATAC1526を示す。本実施例のマスクパターンに対して、これらのシャッフル処理からの結果のデータブロックは、データ要素の1つがデータを有し、2つが0を有するように交互にされるデータ要素を提供する。例えば、これらの結果1522、1524及び1526の最左データ要素位置は、それぞれR5、0及び0を含む。次のデータ要素位置において、RGBカラーの他の画素データが与えられる。従って、マージされるとき、RGBタイプのグループ化が実現される。本実施例では、赤色データと緑色データの上記シャッフルされたデータが、packed論理OR処理によりまずマージされる。図15Fは、MASKEDDATAA1522とMASKEDDATAB1524のpacked論理OR処理に対する結果のデータINTERLEAVEDABDATA1530を示す。ここで、シャッフルされた青色データは、他のpacked論理OR処理によりインタリーブされた赤色及び緑色データとマージされる。図15Gは、MASKEDDATAC1526とMASKEDDATAAB1530のpacked論理OR処理からの新たな結果であるINTERLEAVEDA,BCDATA1532を示す。従って、図15Gの結果のデータブロックは、最初の5つの画素に対するインタリーブされたRGBデータと第6画素の一部を含む。本実施例のアルゴリズムの以降の繰り返しは、残りの16個の画素に対するインタリーブされたRGBデータを生成する。この時点で、DATAA1512、DATAB1514及びDATAC1516のデータの1/3がインタリーブされたことになる。2つのアプローチが、これらのレジスタの残りのデータを処理するのに利用可能である。他の一組のシャッフル制御バイトは、インタリーブされるデータを配置するよう利用可能であり、DATAA1512、DATAB1514及びDATAC1516は、シャッフルマスク1502、1504及び1506が再び利用可能となるように、右にシフトすることが可能である。ここに示される実現形態では、追加のシャッフル制御バイトをロードするのに必要とされるメモリアクセスを行うことを回避するため、データはシフトされる。これらのシフト処理がない場合、9組の制御バイトが3つMASKA1502、MASKB1504、MASKC1506の代わりに本実施例において必要とされるであろう。本実施例はまた、限られた個数のレジスタが利用可能であり、メモリアクセスが長いアーキテクチャにおいて適用可能である。多数のレジスタが利用可能な他の実施例では、シフト処理が不要となるように、レジスタの多数またはすべてのマスク群を保持することが、より効率的となり得る。さらに、多数のレジスタと実行ユニットを有するアーキテクチャでは、シャッフル処理のすべてがシフト処理の実行を待機する必要なく、パラレルに実行可能である。例えば、9つのシャッフルユニットと9つのマスク群を有するアウトオブオーダプロセッサは、9つのシャッフル処理をパラレルに実行することが可能である。上記実施例では、マスクが再適用される前にデータがシフトされる必要がある。DATAA1512、DATAB1514及びDATAC1516のもとの色データのデータ要素が、当該カラーに対してすでに処理されたデータ要素数に従ってシフトされる。本例では、6つの画素のデータが赤色に対して上記処理され、これにより、緑色のデータオペランドDATAB1514と青色のデータオペランドDATAC1516のデータ要素が、それぞれ5つのデータ要素位置だけ右にシフトされる。同様に、5つの画素のデータは緑色と青色の両方に対して処理され、緑色のデータオペランドDATAB1514と青色のデータオペランドDATAC1516がそれぞれ5つのデータ要素位置だけ右にシフトされる。図15Hにおいて、シフトされたソースデータは、赤色、緑色及び青色のそれぞれに対してDATAA’1546、DATAB’1542及びDATAC’1544として示される。図15A~Gに関して上述されたようなシャッフル及び論理OR処理が、当該シフトされたデータに対して繰り返される。3つのpackedシャッフル結果に対するpacked論理OR処理と共に、MASKA1502、MASKB1504及びMASKC1506のそれぞれと共にDATAB’1542、DATAC’1544及びDATAA’1546に対する以降のpackedシャッフル処理が、他の2つの一部及び他の4がそのインタリーブされたRGBデータを提供する。この結果のデータINTERLEAVEDA’、B’及びC’DATA1548が、図15Iに示される。ここで、最右の2つのデータ要素が、第1のインタリーブされたデータセット1532により配置された赤色データR5を既に有する6番目の画素に関するものであるということに留意されたい。未処理の画素色データが、第2パスの処理結果ごとの適切な場所数だけ再びシフトされる。ここで、追加の5つの画素に対するデータは赤色と青色に対して処理されたものであるため、赤色データオペランドDATAA’1546と青色データオペランドDATAC’1544のデータ要素は、5つのデータ要素位置だけ右にシフトされる。6つの画素のデータが緑色に対して処理されたため、緑色のデータオペランドDATAB’1542に対するデータ要素は6つの位置だけ右にシフトされる。図15Jにおいて、この第3のパスに対するシフトされたデータが示される。上記のpackedシャッフル及び論理OR処理の繰り返しが、DATAC’’1552、DATAA’’1554及びDATAB’’1556に適用される。図15Kにおいて、16個の画素の最後に対する結果のインタリーブされたRGBデータは、INTERVEAVEDA’’,B’’DATA1558として示される。B10を有する最右データ要素は、第2のインタリーブされたデータセット1548により配置されたそれの緑色データG10と赤色データR10を既に有する11番目の画素に関する。従って、一組のマスクパターン及びpacked論理OR処理によるpackedシャッフル系列により、複数のソース1512、1514及び1516からのデータは、これらの結果1532、1548及び1558と同様の処理またはさらなる利用のため、所望の手法によりマージ及び再構成可能である。図16は、インタリーブされたデータを生成するため、複数のレジスタ間のデータをシャッフルする方法の一実施例を示すフローチャートである。例えば、本方法の実施例は、図15A~Kに説明されるように、インタリーブされた画素データの生成に適用可能である。本実施例は3つのデータソースまたはデータ平面に関して説明されるが、2以上のデータ平面に関して他の実施例は処理可能である。これらのデータ平面は、1以上の画像フレームに対する色データを有することが可能である。ブロック1602において、第1、第2及び第3平面のフレームデータがロードされる。本例では、複数の画素のRGB色データが、異なる3つの平面からの個々の色として利用可能である。第1平面のデータは赤色に対するものであり、第2平面のデータは緑色に対するものであり、第3平面のデータは青色に対するものである。ブロック1604において、シャッフル制御パターンを有する一組のマスクM1、M2及びM3がロードされる。これらのシャッフル制御パターンは、色をインタリーブするため、データの配置及びシャッフルパターンを決定する。実現形態に応じて、任意数のシャッフルパターンが、所望のデータは位置を生成するため利用可能である。ブロック1606において、各データ平面に対して、適切な制御パターンが選択される。本実現形態では、色データが所望される順序及び現在実行中の繰り返しに基づき、シャッフルパターンが選択される。第1データセットである赤色からのフレームデータが、シャッフルされた赤色データを取得するため、ブロック1608において第1のシャッフル制御パターンによりシャッフルされる。第2のデータセットである緑色が、シャッフルされた緑色のデータを取得するため、第2のシャッフル制御パターンによりブロック1610においてシャッフルされる。ブロック1612において、第3のデータセットである青色が、シャッフルされた青色データを実現するため、第3シャッフル制御パターンによりシャッフルされる。これら3つのマスクと各自のシャッフル制御パターンは本実施例では互いに異なるが、各繰り返し中に複数のデータセットに対して、マスク及びそれのシャッフルパターンが利用可能である。さらに、いくつかのマスクは、他のものより頻繁に利用されてもよい。ブロック1614において、3つのデータセットに対するシャッフルされたデータブロック1608、1610及び1612が、当該パスのインタリーブされた結果を形成するためマージされる。例えば、第1パスの結果は、図15Gのインタリーブされたデータ1532と同様のものとすることが可能であり、各画素のRGBデータは一組としてグループ化される。ブロック1616において、シャッフリングに対してレジスタにロードされるフレームデータがさらにあるかチェックされる。ない場合には、ブロック1620において、インタリーブされる3つのデータ平面からのさらなるデータがないかチェックされる。ない場合には、本方法は終了する。ブロック1620において利用可能なさらなる平面データがあれば、当該プロセスはブロック1602に戻り、シャッフルリングのためのさらなるフレームデータがロードされる。ブロック1616における判定が真であれば、各色データ平面のフレームデータは、最後のパス中に当該色に対してデータセットに適用されたマスクパターンに対応する所定のカウントだけシフトされる。例えば、図15Gからの第1パスの例を維持するのに、第1、第2及び第3平面の赤色、緑色および青色データが、それぞれ6、5及び5の位置だけシフトされる。実現形態に応じて、各色データに対して選択されたシャッフルパターンは、各パス異なるものであるか、あるいは同一のものが再利用されるようにしてもよい。一実施例の第2パス中、第1の繰り返しからの3つのマスクは、第1平面データが第3マスクとペアにされ、第2平面データが第1マスクとペアにされ、第3平面データが第3マスクとペアにされるように回転される。このマスクの回転は、図15Gと15Iに示されるように、1つのパスから次のパスへのインタリーブされたRGBデータの適切な連続性を可能にする。シャッフル及びマージ処理は、第1パスと同様に継続される。3以上の繰り返しが所望される場合、本実施例のシャッフルマスクパターンは、さらなるインタリーブされたRGBデータを生成するため、異なるデータ平面において回転され続ける。本発明によるpackedシャッフル命令を用いたアルゴリズムの実施例は、現在のハードウェアリソースによりプロセッサ及びシステムパフォーマンスを向上させることが可能である。しかしながら、技術が向上し続けるに従い、本発明の実施例はより多くかつより高速のハードウェアリソースと組み合わされるとき、より効率的なロジック回路がパフォーマンス向上に対するさらに大きな影響を与えることが可能である。従って、バイト粒度とzeroクリアオプションを有するpackedシャッフル命令の効率的な実施例は、プロセッサの生成に対して異なるより大きな影響を有することが可能である。現在のプロセッサアーキテクチャにさらなるリソースを単に追加することだけでは、より良いパフォーマンス向上を保証することはできない。パラレルテーブル検索及びpackedシャッフル命令PSHUFBの一実施例と同様に、アプリケーションの効率性を維持することによって、より高いパフォーマンス向上が可能となり得る。上記例は説明を簡単化するため、128ビット長ハードウェア/レジスタ/オペランドに関して一般に説明されたが、packedシャッフル処理、パラレルテーブル検索及び複数レジスタデータ再構成を実行するため、他の実施例では64または128ビット長ハードウェア/レジスタ/オペランドが利用されてもよい。さらに、本発明の実施例はMMX/SSE/SSE2技術などの特定のハードウェアまたは技術タイプに限定されるものではなく、他のSIMD実現形態及び他のグラフィカルデータ操作技術により利用可能である。本明細書では、本発明はそれの特定の実施例を参照して説明された。しかしながら、添付された請求項に与えられるような本発明のより広い趣旨及び範囲から逸脱することなく、各種改良及び変更が可能であるということは明らかであろう。従って、明細書及び図面は、限定的なものではなく例示的なものとみなされるべきである。"