(57)【要約】【課題】効果的にデータをシャッフルするための方法及び装置を提供すること。【解決手段】一実施例の方法は、Ｌ個のデータ要素を有する第１オペランドとＬ個の制御要素を有する第２オペランドとを受け取ることからなる。各制御要素に対して、当該制御要素により指定された第１オペランドデータ要素からのデータは、それのゼロクリアフィールドが設定されていない場合に関連付けされた結果のデータ要素位置にシャッフルされ、それのゼロクリアフィールドが設定されていない場合、関連付けされた結果のデータ要素位置にゼロが配置される。【選択図】図１Ａ
2010282649.tif 000002
【特許請求の範囲】
【請求項１】
Ｌ個のデータ要素を有する第１オペランドとＬ個の制御要素を有する第２オペランドとを受け取るステップと、
各制御要素に対して、該制御要素により指定される第１オペランドデータ要素からのデータを、それのゼロクリアフィールドが設定されていない場合、関連付けされた結果のデータ要素位置にシャッフルし、それのゼロクリアフィールドが設定されていない場合、前記関連付けされた結果のデータ要素位置にゼロを配置するステップと、
から構成されることを特徴とする方法。
【請求項２】
請求項１記載の方法であって、
前記Ｌ個の制御要素のそれぞれは、前記第２オペランドのある位置を占有し、結果の同様に配置されたデータ要素位置に関連付けされることを特徴とする方法。
【請求項３】
請求項２記載の方法であって、
前記Ｌ個のデータ要素のそれぞれは、前記第１オペランドのある位置を占有することを特徴とする方法。
【請求項４】
請求項３記載の方法であって、
前記制御要素は、データ要素位置番号により第１オペランドデータ要素を指定することを特徴とする方法。
【請求項５】
請求項４記載の方法であって、
前記制御要素のそれぞれは、
該制御要素に係るデータ要素位置がゼロの値により充填されるべきか示すゼロクリアフィールドと、
データをシャッフルする第１オペランドデータ要素を示す選択フィールドと、
から構成されることを特徴とする方法。
【請求項６】
請求項５記載の方法であって、
前記制御要素のそれぞれはさらに、ソース選択フィールドから構成されることを特徴とする方法。
【請求項７】
請求項２記載の方法であって、さらに、
前記第２オペランドの制御要素に応答して、前記第１オペランドからシャッフルされたデータを有する結果のデータブロックを出力するステップを有することを特徴とする方法。
【請求項８】
請求項１記載の方法であって、
前記データ要素のそれぞれは、１バイトのデータから構成されることを特徴とする方法。
【請求項９】
請求項８記載の方法であって、
前記制御要素のそれぞれは、１バイト長であることを特徴とする方法。
【請求項１０】
請求項９記載の方法であって、
Ｌは８であり、前記第１オペランド、前記第２オペランド及び前記結果は、それぞれ６４ビット長ｐａｃｋｅｄデータから構成されることを特徴とする方法。
【請求項１１】
請求項９記載の方法であって、
Ｌは１６であり、前記第１オペランド、前記第２オペランド及び前記結果は、それぞれ１２８ビット長ｐａｃｋｅｄデータから構成されることを特徴とする方法。
【請求項１２】
Ｌ個のデータ要素を有する第１オペランドとＬ個の制御要素を有する第２オペランドとを有するシャッフル命令を実行する実行ユニットから構成される装置であって、
前記シャッフル命令は、前記実行ユニットに、各制御要素に対して、それのゼロクリアフィールドが設定されているか判断し、真である場合には関連付けされた結果のデータ要素位置にゼロを配置し、そうでない場合には前記制御要素により指定される第１オペランドデータ要素からのデータを前記関連付けされた結果のデータ要素位置にシャッフルさせることを特徴とする装置。
【請求項１３】
請求項１２記載の装置であって、
前記Ｌ個の制御要素のそれぞれは、前記第２オペランドにおいて位置を占有し、結果における同様に配置されたデータ要素位置に関連付けされることを特徴とする装置。
【請求項１４】
請求項１３記載の装置であって、
各制御要素は、データ要素位置番号により第１オペランドデータ要素を指定することを特徴とする装置。
【請求項１５】
請求項１４記載の装置であって、
前記制御要素のそれぞれは、
該制御要素に係るデータ要素位置がゼロの値により充填されるべきか示すゼロクリアフィールドと、
データをシャッフルする第１オペランドデータ要素を示す選択フィールドと、
から構成されることを特徴とする装置。
【請求項１６】
請求項１５記載の装置であって、
前記制御要素のそれぞれはさらに、ソース選択フィールドから構成されることを特徴とする装置。
【請求項１７】
請求項１６記載の装置であって、
前記シャッフル命令はさらに、前記実行ニットに前記Ｌ個の制御要素に基づき充填されたＬ個のデータ要素位置を有する結果を生成させることを特徴とする装置。
【請求項１８】
請求項１２記載の装置であって、
前記データ要素のそれぞれは、１バイトのデータから構成され、
前記制御要素は、１バイト長である、
ことを特徴とする装置。
【請求項１９】
請求項１８記載の装置であって、
Ｌは８であり、前記第１オペランド、前記第２オペランド及び前記結果は、それぞれ６４ビット長ｐａｃｋｅｄデータから構成されることを特徴とする装置。
【請求項２０】
請求項１８記載の装置であって、
Ｌは１６であり、前記第１オペランド、前記第２オペランド及び前記結果は、それぞれ１２８ビット長ｐａｃｋｅｄデータから構成されることを特徴とする装置。
【請求項２１】
Ｌ個のデータ要素を有する第１オペランドとＬ個の制御要素を有する第２オペランドとを受け取るステップと、
各制御要素に対して、該制御要素により指定される第１オペランドデータ要素からのデータを、それのゼロクリアフィールドが設定されていない場合、関連付けされた結果のデータ要素位置にシャッフルし、それのゼロクリアフィールドが設定されていない場合、前記関連付けされた結果のデータ要素位置にゼロを配置するステップと、
から構成される所定の機能を表すデータを格納する機械可読媒体から構成される物品。
【請求項２２】
請求項２１記載の物品であって、
前記機械可読媒体により格納されるデータは、製造時に１つの命令に応答して前記所定の機能を実行する集積回路構成を表すことを特徴とする物品。
【請求項２３】
請求項２２記載の物品であって、
前記所定の機能はさらに、前記Ｌ個の制御要素に従って充填されたＬ個のデータ要素位置を有する結果を生成するステップを有することを特徴とする物品。
【請求項２４】
請求項２３記載の物品であって、
前記Ｌ個の制御要素のそれぞれは、結果において同様に配置されたデータ要素位置に関連付けされることを特徴とする物品。
【請求項２５】
請求項２４記載の物品であって、
各制御要素は、データ要素位置番号により第１オペランドデータ要素を指定することを特徴とする物品。
【請求項２６】
請求項２５記載の物品であって、
前記データ要素のそれぞれは、１バイトのデータから構成されることを特徴とする物品。
【請求項２７】
請求項２６記載の物品であって、
前記制御要素のそれぞれは、
該制御要素に係るデータ要素位置がゼロの値により充填されるべきか示すゼロクリアフィールドと、
データをシャッフルする第１オペランドデータ要素を示す選択フィールドと、
から構成されることを特徴とする物品。
【請求項２８】
請求項２７記載の物品であって、
前記制御要素のそれぞれはさらに、ソース選択フィールドから構成されることを特徴とする物品。
【請求項２９】
請求項２１記載の物品であって、
前記機械可読媒体により格納されているデータは、マシーンにより実行される場合、前記マシーンに前記所定の機能を実行させるコンピュータ命令を表すことを特徴とする物品。
【請求項３０】
Ｌ個のデータ要素を有する第１オペランドを受け取るステップと、
各マスクが前記第２オペランドにおけるある位置を占有し、結果における同様に配置されたデータ要素位置に関連付けされ、ゼロクリアフィールドを有するＬ個のマスクを有する第２オペランドを受け取るステップと、
各マスクに対して、それのゼロクリアフィールドが設定されているか判断し、真である場合には関連する結果のデータ要素位置にゼロを配置するステップと、
それのゼロクリアフィールドが設定されていない場合、前記マスクにより指定される第１オペランドデータ要素からのデータを前記関連する結果のデータ要素位置にシャッフルするステップと、
から構成されることを特徴とする方法。
【請求項３１】
請求項３０記載の方法であって、
前記Ｌ個のマスクのそれぞれは、前記第２オペランドにおけるある位置を占有し、前記結果における同様に配置されたデータ要素位置に関連付けされることを特徴とする方法。
【請求項３２】
請求項３１記載の方法であって、
前記Ｌ個のマスクのそれぞれは、
該制御要素に係るデータ要素位置がゼロの値により充填されるべきか示すゼロクリアフィールドと、
データをシャッフルする第１オペランドデータ要素を示す選択フィールドと、
から構成されることを特徴とする方法。
【請求項３３】
請求項３２記載の方法であって、
前記マスクのそれぞれはさらに、ソース選択フィールドから構成されることを特徴とする方法。
【請求項３４】
請求項３３記載の方法であって、
前記第１オペランド、前記第２オペランド及び前記結果のそれぞれは、６４ビット長ｐａｃｋｅｄデータから構成されることを特徴とする方法。
【請求項３５】
請求項３３記載の方法であって、
前記第１オペランド、前記第２オペランド及び前記結果のそれぞれは、１２８ビット長ｐａｃｋｅｄデータから構成されることを特徴とする方法。
【請求項３６】
Ｌ個のデータ要素を有する第１オペランドを受け取るステップと、
各シャッフルマスクが結果における同様に配置されたデータ要素位置に関連付けされたＬ個のシャッフルマスクを有する第２オペランドを受け取るステップと、
各シャッフルマスクに対して、それのゼロクリアフィールドが設定されているか判断し、真である場合には関連する結果のデータ要素位置にゼロを配置し、そうでない場合、前記シャッフルマスクにより指定される第１オペランドデータ要素からのデータを前記関連する結果のデータ要素位置にシャッフルするステップと、
から構成されることを特徴とする方法。
【請求項３７】
請求項３６記載の方法であって、
前記Ｌ個のシャッフルマスクのそれぞれは、
該制御要素に係るデータ要素位置がゼロの値により充填されるべきか示すゼロクリアフィールドと、
データをシャッフルする第１オペランドデータ要素を示す選択フィールドと、
から構成されることを特徴とする方法。
【請求項３８】
請求項３７記載の方法であって、
前記マスクのそれぞれはさらに、ソース選択フィールドから構成されることを特徴とする方法。
【請求項３９】
複数のソースデータ要素を格納する第１記憶位置と、
各制御要素が結果のデータ要素位置に対応し、ゼロクリアフィールドと選択フィールドとを有する複数の制御要素を格納する第２記憶位置と、
前記第２記憶位置に接続され、前記制御要素の値に応答して、複数の選択信号と複数のゼロクリア信号とを生成する制御ロジックと、
前記第１記憶位置と前記複数の選択信号とに接続され、各マルチプレクサが特定の結果のデータ要素位置に対応する選択信号に応答して、前記特定の結果のデータ要素位置に対してデータ要素をシャッフルする複数の第１マルチプレクサと、
前記複数の第１マルチプレクサと前記複数のゼロクリア信号に接続され、各マルチプレクサが特定の結果のデータ要素位置に関連付けされ、それのゼロクリア信号がアクティブである場合にはゼロを出力し、または、前記特定の結果のデータ要素位置に対してシャッフルされたデータ要素を出力する複数の第２マルチプレクサと、
から構成されることを特徴とする装置。
【請求項４０】
請求項３９記載の装置であって、
前記複数のソースデータ要素は、第１ｐａｃｋｅｄデータオペランドであることを特徴とする装置。
【請求項４１】
請求項４０記載の装置であって、
前記複数の制御要素は、第２ｐａｃｋｅｄデータオペランドであることを特徴とする装置。
【請求項４２】
請求項４０記載の装置であって、
前記第１及び第２記憶位置は、ＳＩＭＤ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ  Ｄａｔａ）レジスタであることを特徴とする装置。
【請求項４３】
請求項４２記載の装置であって、
前記第１ｐａｃｋｅｄオペランドは６４ビット長であり、前記ソースデータ要素のそれぞれは１バイト長であり、
前記第２ｐａｃｋｅｄオペランドは６４ビット長であり、前記制御要素のそれぞれは１バイト長である、
ことを特徴とする装置。
【請求項４４】
請求項４２記載の装置であって、
前記第１ｐａｃｋｅｄオペランドは１２８ビット長であり、前記ソースデータ要素のそれぞれは１バイト長であり、
前記第２ｐａｃｋｅｄオペランドは１２８ビット長であり、前記制御要素のそれぞれは１バイト長である、
ことを特徴とする装置。
【請求項４５】
各シャッフルマスクが一意的な結果のデータ要素位置に関連付けされるＬ個のシャッフルマスクを受け取り、各結果のデータ要素位置に対して、選択信号とゼロ設定信号とを提供する制御ロジックと、
前記制御ロジックに接続され、各マルチプレクサもまた一意的な結果のデータ要素位置に関連付けされ、それの関連付けされたゼロクリア信号がアクティブである場合にはゼロを出力し、それの関連付けされたゼロクリア信号が非アクティブである場合には、ぞれの関連付けされた選択信号に基づきＭ個のデータ要素からシャッフルされたデータを出力するＬ個のマルチプレクサと、
から構成されることを特徴とする装置。
【請求項４６】
請求項４５記載の装置であって、さらに、
各データ要素位置がそれの関連付けされたマルチプレクサからの出力を保持するＬ個の一意的なデータ要素位置を有するレジスタを有することを特徴とする装置。
【請求項４７】
請求項４６記載の装置であって、
Ｌは１６であり、Ｍは１６であることを特徴とする装置。
【請求項４８】
データ及び命令を格納するメモリと、
前記メモリにバスを介して接続され、シャッフル処理を実行可能なプロセッサと、
から構成されるシステムであって、
前記プロセッサは、
第１オペランドからのＬ個のデータ要素の少なくとも１つに対して、第２オペランドからのＬ個のシャッフル制御要素に基づきデータシャッフルを実行させる命令を前記メモリから受け取るバスユニットと、
前記バスユニットに接続され、前記命令を実行する実行ユニットと、
から構成され、
前記命令は前記実行ユニットに、各シャッフル制御要素に対して、それのゼロクリアフィールドが設定されていない場合には前記シャッフル制御要素により指定される第１オペランドデータ要素からのデータを関連付けされた結果のデータ要素位置にシャッフルさせ、それのゼロクリアフィールドが設定されていない場合には前記関連付けされた結果のデータ要素位置にゼロを配置させることを特徴とするシステム。
【請求項４９】
請求項４８記載のシステムであって、
各シャッフル制御要素は、
該シャッフル制御要素に係るデータ要素位置がゼロの値により充填されるべきか示すゼロクリアフィールドと、
データをシャッフルする第１オペランドデータ要素を示す選択フィールドと、
から構成されることを特徴とするシステム。
【請求項５０】
請求項４９記載のシステムであって、
各シャッフル制御要素はさらに、ソース選択フィールドから構成されることを特徴とするシステム。
【請求項５１】
請求項４８記載のシステムであって、
前記命令は、ゼロクリア機能を有するｐａｃｋｅｄバイトシャッフルであることを特徴とするシステム。
【請求項５２】
請求項４８記載のシステムであって、
各データ要素は１バイト長であり、
各シャッフルコマンド要素は１バイト長であり、
Ｌは８である、
ことを特徴とするシステム。
【請求項５３】
請求項４８記載のシステムであって、
前記第１オペランドは６４ビット長であり、
前記第２オペランドは６４ビット長である、
ことを特徴とするシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本出願は、２００１年１０月２９日に出願された米国特許出願第０９／９５２，８９１号「Ａｎ  Ａｐｐａｒａｔｕｓ  Ａｎｄ  Ｍｅｔｈｏｄ  Ｆｏｒ  Ｅｆｆｉｃｉｅｎｔ  Ｆｉｌｔｅｒｉｎｇ  Ａｎｄ  Ｃｏｎｖｏｌｕｔｉｏｎ  Ｏｆ  Ｃｏｎｔｅｎｔ  Ｄａｔａ」の一部継続出願である。
【０００２】
本出願は、２００３年６月３０日に出願された同時係属中の米国特許出願「Ｍｅｔｈｏｄ  Ａｎｄ  Ａｐｐａｒａｔｕｓ  Ｆｏｒ  Ｐａｒａｌｌｅｌ  Ｔａｂｌｅ  Ｌｏｏｋｕｐ  Ｕｓｉｎｇ  ＳＩＭＤ  Ｉｎｓｔｒｕｃｔｉｏｎ」と、２００３年６月３０日に出願された同時係属中の米国特許出願「Ｍｅｔｈｏｄ  Ａｎｄ  Ａｐｐａｒａｔｕｓ  Ｆｏｒ  Ｒｅａｒｒａｎｇｉｎｇ  Ｄａｔａ  Ｂｅｔｗｅｅｎ  Ｍｕｌｔｉｐｌｅ  Ｒｅｇｉｓｔｅｒｓ」に関連する。
【０００３】
本発明は、一般にマイクロプロセッサ及びコンピュータシステムの技術分野に関する。より詳細には、本発明は、データをシャッフルするための方法及び装置に関する。
【背景技術】
【０００４】
コンピュータシステムが、私たちの社会においてますます普及してきている。コンピュータの処理能力は、広範な分野における労働者の効率性と生産性を向上させてきた。コンピュータを購入及び主有する費用が下落し続けるに従い、ますます多くの消費者がより新しく高速のマシーンを利用することが可能となってきている。さらに、多数の人々がその自由性によりノートブックコンピュータを使用することを享有している。モバイルコンピュータは、ユーザがオフィスを離れたり、旅行に出かけたりするとき、容易にデータを移送し、作業することを可能にする。このシナリオは、マーケティングスタッフ、企業役員及び学生に大変なじみのあるものであろう。
【０００５】
プロセッサ技術の進歩に従い、より新しいソフトウェアコードがプロセッサを備えたマシーン上で実行されるため生成されている。ユーザは一般に、使用されるソフトウェアのタイプに関係なく、ユーザのコンピュータからより高いパフォーマンスを期待及び要求する。そのような問題の１つは、プロセッサ内で実際に実行される命令及び処理のタイプから生じ得るものである。あるタイプの処理は、必要とされる回路のタイプ及び／または処理の複雑さに基づき、完了するのにより多くの時間を要する。これは、特定の複合処理がプロセッサ内で実行される方法を最適化する機会を提供する。
【０００６】
メディアアプリケーションは、１０年以上の間にマイクロプロセッサの進歩の原動力となってきた。実際、近年のほとんどの計算力向上は、メディアアプリケーションにより駆動されてきた。大きな進歩が娯楽性を高めた教育及び通信のため企業レベルで見られてきたが、上記向上は消費者レベル内でも顕著に行われてきている。にもかかわらず、将来的なメディアアプリケーションは、より高い計算要求を求めるであろう。この結果、将来のパーソナルコンピュータの計算は、使いやすさと共に、オーディオビジュアル効果においてさらに充実したものとなり、より重要なことには、計算が通信と結び付くことになるであろう。
【０００７】
従って、画像の表示と共に、コンテンツと総称される音声及び映像の再生が、現在の計算装置のより一般的な用途となりつつある。フィルタリング処理と畳み込み処理は、画像、音声、映像データなどのコンテンツデータに対して実行される最も一般的な処理の一部である。このような処理は大きな計算量を要求するが、ＳＩＭＤ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ  Ｄａｔａ）レジスタなどの各種データ記憶装置を用いた効率的な実現形態を通じて利用可能なハイレベルなデータ並列化を提供する。いくつかの現在のアーキテクチャはまた、命令スループットを最小化し、算術処理にデータを指示するのに必要とされるクロックサイクルのサイクル数を大きく増大させる不必要なデータタイプの変更を求める。
【発明の概要】
【発明が解決しようとする課題】
【０００８】
本発明の課題は、上記問題点に鑑み、効果的にデータをシャッフルするための方法及び装置を提供することである。
【課題を解決するための手段】
【０００９】
上記課題を解決するため、本発明の一態様は、Ｌ個のデータ要素を有する第１オペランドとＬ個の制御要素を有する第２オペランドとを受け取るステップと、各制御要素に対して、該制御要素により指定される第１オペランドデータ要素からのデータを、それのゼロクリアフィールドが設定されていない場合、関連付けされた結果のデータ要素位置にシャッフルし、それのゼロクリアフィールドが設定されていない場合、前記関連付けされた結果のデータ要素位置にゼロを配置するステップとから構成されることを特徴とする方法に関する。
【発明の効果】
【００１０】
本発明によると、効果的にデータをシャッフルするための方法及び装置を提供することができる。
【図面の簡単な説明】
【００１１】
【図１Ａ】図１Ａは、本発明の一実施例によるデータをシャッフルするための命令を実行する実行ユニットを含むプロセッサにより構成されるコンピュータシステムのブロック図である。
【図１Ｂ】図１Ｂは、本発明の他の実施例による他の一例となるコンピュータシステムのブロック図である。
【図１Ｃ】図１Ｃは、本発明の他の実施例による他の一例となるコンピュータシステムのブロック図である。
【図２】図２は、本発明によるデータシャッフル処理を実行するロジック回路を有する一実施例のプロセッサのマイクロアーキテクチャのブロック図である。
【図３】図３Ａ、３Ｂ、３Ｃは、本発明による各種実施例によるシャッフルマスクを示す。
【図４Ａ】図４Ａは、本発明の一実施例によるマルチメディアレジスタの各種ｐａｃｋｅｄデータタイプ表現を示す。
【図４Ｂ】図４Ｂは、他の実施例によるｐａｃｋｅｄデータタイプを示す。
【図４Ｃ】図４Ｃは、シャッフル命令の処理符号化（オペコード）フォーマットの一実施例を示す。
【図４Ｄ】図４Ｄは、他の処理符号化フォーマットを示す。
【図４Ｅ】図４Ｅは、さらなる他の処理符号化フォーマットを示す。
【図５】図５は、本発明によるシャッフルマスクに基づくデータオペランドに対するシャッフル処理を実行するロジックの一実施例のブロック図である。
【図６】図６は、本発明によるデータシャッフリング処理を実行する回路の一実施例のブロック図である。
【図７】図７は、本発明の一実施例によるバイト長データ要素に対するデータシャッフルの処理を示す。
【図８】図８は、本発明の他の実施例によるワード長データ要素に対するデータシャッフル処理の処理を示す。
【図９】図９は、データをシャッフルする方法の一実施例を示すフローチャートである。
【図１０Ａ】図１０Ａは、ＳＩＭＤ命令を用いたパラレルテーブル検索アルゴリズムの処理を示す。
【図１０Ｂ】図１０Ｂは、ＳＩＭＤ命令を用いたパラレルテーブル検索アルゴリズムの処理を示す。
【図１０Ｃ】図１０Ｃは、ＳＩＭＤ命令を用いたパラレルテーブル検索アルゴリズムの処理を示す。
【図１０Ｄ】図１０Ｄは、ＳＩＭＤ命令を用いたパラレルテーブル検索アルゴリズムの処理を示す。
【図１０Ｅ】図１０Ｅは、ＳＩＭＤ命令を用いたパラレルテーブル検索アルゴリズムの処理を示す。
【図１０Ｆ】図１０Ｆは、ＳＩＭＤ命令を用いたパラレルテーブル検索アルゴリズムの処理を示す。
【図１０Ｇ】図１０Ｇは、ＳＩＭＤ命令を用いたパラレルテーブル検索アルゴリズムの処理を示す。
【図１０Ｈ】図１０Ｈは、ＳＩＭＤ命令を用いたパラレルテーブル検索アルゴリズムの処理を示す。
【図１１】図１１は、ＳＩＭＤ命令を用いたテーブル検索を実行するための方法の一実施例を示すフローチャートである。
【図１２】図１２は、テーブル検索を実行するための方法の他の実施例を示すフローチャートである。
【図１３Ａ】図１３Ａは、複数のレジスタ間においてデータを再構成するためのアルゴリズムを示す。
【図１３Ｂ】図１３Ｂは、複数のレジスタ間においてデータを再構成するためのアルゴリズムを示す。
【図１３Ｃ】図１３Ｃは、複数のレジスタ間においてデータを再構成するためのアルゴリズムを示す。
【図１４】図１４は、複数のレジスタ間においてデータを再構成するための方法の一実施例を示すフローチャートである。
【図１５Ａ】図１５Ａは、インタリーブされたデータを生成するため複数のレジスタ間におけるデータをシャッフルするためのアルゴリズムを示す。
【図１５Ｂ】図１５Ｂは、インタリーブされたデータを生成するため複数のレジスタ間におけるデータをシャッフルするためのアルゴリズムを示す。
【図１５Ｃ】図１５Ｃは、インタリーブされたデータを生成するため複数のレジスタ間におけるデータをシャッフルするためのアルゴリズムを示す。
【図１５Ｄ】図１５Ｄは、インタリーブされたデータを生成するため複数のレジスタ間におけるデータをシャッフルするためのアルゴリズムを示す。
【図１５Ｅ】図１５Ｅは、インタリーブされたデータを生成するため複数のレジスタ間におけるデータをシャッフルするためのアルゴリズムを示す。
【図１５Ｆ】図１５Ｆは、インタリーブされたデータを生成するため複数のレジスタ間におけるデータをシャッフルするためのアルゴリズムを示す。
【図１５Ｇ】図１５Ｇは、インタリーブされたデータを生成するため複数のレジスタ間におけるデータをシャッフルするためのアルゴリズムを示す。
【図１５Ｈ】図１５Ｈは、インタリーブされたデータを生成するため複数のレジスタ間におけるデータをシャッフルするためのアルゴリズムを示す。
【図１５Ｉ】図１５Ｉは、インタリーブされたデータを生成するため複数のレジスタ間におけるデータをシャッフルするためのアルゴリズムを示す。
【図１５Ｊ】図１５Ｊは、インタリーブされたデータを生成するため複数のレジスタ間におけるデータをシャッフルするためのアルゴリズムを示す。
【図１５Ｋ】図１５Ｋは、インタリーブされたデータを生成するため複数のレジスタ間におけるデータをシャッフルするためのアルゴリズムを示す。
【図１６】図１６は、インタリーブされたデータを生成するため複数のレジスタ間におけるデータをシャッフルするための方法の一実施例を示すフローチャートである。
【発明を実施するための形態】
【００１２】
データをシャッフルするための方法及び装置が開示される。ＳＩＭＤ命令を用いてパラレルなテーブル検索のための方法及び装置がまた開示される。複数のレジスタ間においてデータを再構成するための方法及び装置がまた開示される。ここで説明される実施例は、マイクロプロセッサに関して説明されるが、それに限定されるものではない。以下の実施例はプロセッサに関して説明されるが、他の実施例は、他のタイプの集積回路やロジック装置に適用可能である。本発明の同様の技術及び教示が、より大きなパイプラインスループット及びパフォーマンス向上を可能にする他のタイプの回路または半導体装置に容易に適用することができる。本発明の教示は、データ操作を実行する任意のプロセッサまたはマシーンに適用可能である。しかしながら、本発明は２５６ビット、１２８ビット、６４ビット、３２ビットあるいは１６ビットデータ処理を実行するプロセッサまたはマシーンに限定されるものではなく、データのシャッフリングが必要とされる任意のプロセッサ及びマシーンに適用可能である。
【００１３】
以下の説明では、本発明の完全なる理解を提供するため、多数の具体的詳細が与えられる。しかしながら当業者は、これらの具体的詳細が本発明を実現するために必要ではないということを理解するであろう。他の例では、周知の電気的構成及び回路は、本発明を不必要に不明りょうとしないように、詳細には与えられていない。さらに、以下の説明は具体例を与え、添付された図面は例示のための各種具体例を示す。しかしながら、これらの具体例は、本発明のすべての可能な実現形態の包括的なリストを提供するためのものではなく、単に本発明の具体例を提供するためのものであるため、限定的に解釈されるべきではない。
【００１４】
一実施例では、本発明の方法は、機械実行可能な命令により実現される。当該命令は、プログラムされる汎用または特殊用途向けプロセッサに本発明の各ステップを実行させるのに使用可能である。あるいは、本発明の各ステップは、当該ステップを実行するための配線化されたロジックを有する特殊なハードウェアコンポーネントによって、または、プログラムされたコンピュータコンポーネント及びカスタムハードウェアコンポーネントの任意の組み合わせによって実行されてもよい。
【００１５】
以下の具体例は実行ユニットやロジック回路に関して命令の処理及び配布を説明しているが、本発明の他の実施例はソフトウェアにより実現可能である。本発明は、本発明によるプロセスを実行するようコンピュータ（または他の電子装置）をプログラムするのに利用可能な命令を格納したマシーンまたはコンピュータ可読媒体を有するコンピュータプログラムプロダクツまたはソフトウェアとして提供されてもよい。そのようなソフトウェアがシステムのメモリ内に格納可能である。同様に、コードはネットワークを介して、または他のコンピュータ可読媒体を介して配布可能である。従って、機械可読媒体は、以下に限定されるものではないが、フロッピー（登録商標）ディスク、光ディスク、ＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ  Ｒｅａｄ−Ｏｎｌｙ  Ｍｅｍｏｒｙ）、光磁気ディスク、ＲＯＭ（Ｒｅａｄ−Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＥＰＲＯＭ（Ｅｒａｓａｂｌｅ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｒｅａｄ−Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＥＥＰＲＯＭ（Ｅｌｅｃｔｒｉｃａｌｌｙ  Ｅｒａｓａｂｌｅ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｒｅａｄ−Ｏｎｌｙ  Ｍｅｍｏｒｙ）、磁気または光カード、フラッシュメモリ、インターネットを介した送信、電気、光、音響または他の形態の伝搬信号（搬送波、赤外線信号、デジタル信号など）など、マシーン（コンピュータなど）により読出し可能な形態により情報を格納または送信するための任意の機構を有するかもしれない。
【００１６】
従って、コンピュータ可読媒体は、マシーン（コンピュータなど）により読出し可能な形態による電子命令または情報を格納または送信するのに適した任意のタイプの媒体／機械可読媒体を含む。さらに、本発明はまた、コンピュータプログラムプロダクツとしてダウンロードされてもよい。また、プログラムは、リモートコンピュータ（サーバなど）から要求元コンピュータ（クライアントなど）に転送されてもよい。プログラムの転送は、通信リンク（モデム、ネットワーク接続など）を介し搬送波や他の伝搬媒体に実現される電気、光、音響、または他の形態のデータ信号を介したものであってもよい。
【００１７】
さらに、本発明による集積回路設計の実施例は、テープまたは他の機械可読媒体上のデータベースとして電子形式により通信または転送可能である。例えば、一実施例によるプロセッサの電子形式による集積回路設計は、コンピュータコンポーネントを取得するため工場を介し処理または製造可能である。他の例では、電子形式による集積回路は、マシーンによりコンピュータコンポーネントをシミュレートするよう処理可能である。従って、一部の実施例によるプロセッサの設計及び／または回路レイアウトプランは、機械可読媒体を介し配布可能であり、マシーンによる処理時にプロセッサをシミュレートする集積回路のシミュレーションまたは製造のため、回路に実現可能である。機械可読媒体はまた、他の実施例において本発明による所定の機能を表すデータを格納可能である。
【００１８】
現在のプロセッサでは、いくつかの実行ユニットが各種コード及び命令を処理及び実行するのに利用される。すべての命令が等しく生成されるとは限らない。なぜなら、いくつかは素早く完了し、他のものは膨大な数のクロックサイクルを要する可能性があるためである。命令のスループットが高速化するほど、プロセッサの全体的パフォーマンスは向上する。従って、可能な限り高速かつ多数の命令を実行させることが効果的である。しかしながら、実行時間とプロセッサリソースに関して、より大きな複雑さを有し、より多くのものを必要とする命令が存在する。例えば、浮動小数点命令、ロード／ストア処理、データ移動などがあげられる。
【００１９】
ますます多くのコンピュータシステムがインターネットやマルチメディアアプリケーションに利用されると、時間の経過と共に追加的なプロセッサのサポートが導入されてきた。例えば、ＳＩＭＤ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ  Ｄａｔａ）整数／浮動小数点命令とＳＳＥ（Ｓｔｒｅａｍｉｎｇ  ＳＩＭＤ  Ｅｘｔｅｎｓｉｏｎ）は、特定のプログラムタスクを実行するのに必要とする命令の合計数を減少させる命令である。これらの命令は、複数のデータ要素に対するパラレル処理によりソフトウェアパフォーマンスをスピードアップすることが可能である。この結果、映像、音声及び画像処理を含む広範なアプリケーションにおいてパフォーマンス向上が実現可能である。マイクロプロセッサ及び同様のタイプのロジック回路におけるＳＩＭＤ命令の実現は、通常はいくつかの発行を伴う。さらに、ＳＩＭＤ処理の複雑さは、しばしばデータを正確に処理及び操作するため、追加的な回路を必要性を生じさせる。
【００２０】
本発明の実施例は、ＳＩＭＤ関連ハードウェアを利用するアルゴリズムとして、ゼロクリア（ｆｌｕｓｈ  ｔｏ  ｚｅｒｏ）機能を有するｐａｃｋｅｄバイトシャッフル命令を実現する一手法を提供する。一実施例では、当該アルゴリズムは、各データ要素位置の制御マスクの値に基づき、特定のレジスタまたはメモリ位置からのデータをシャッフリングするコンセプトに基づくものである。ｐａｃｋｅｄバイトシャッフルの実施例は、データを再構成する多数のアプリケーションにおいて必要とされる命令数を減少するのに利用可能である。ｐａｃｋｅｄバイトシャッフル命令はまた、アラインされていないロードを有する任意のアプリケーションにも利用可能である。このシャッフル命令の実施例は、効率的な乗算加算処理のためデータを構成するフィルタリングに利用可能である。同様に、ｐａｃｋｅｄシャッフル命令は、データ及び小さな検索テーブルを順序付けするため、映像及び暗号化アプリケーションにおいて利用可能である。当該命令は、２以上のレジスタからのデータを合成するのに利用可能である。従って、本発明によるゼロクリア対応アルゴリズムによるｐａｃｋｅｄシャッフルの実施例は、全体的なパフォーマンスの重大な妥協なく、効率的にＳＩＭＤ処理をサポートするためプロセッサにおいて実現可能である。
【００２１】
本発明の実施例は、任意のサイズのデータを効率的に順序付け及び構成するため、ゼロクリア機能をｐａｃｋｅｄデータシャッフル命令（ＰＳＨＵＦＢ）に提供する。一実施例では、データはバイト粒度によりレジスタにおいてシャッフルまたは再構成される。バイトシャッフル処理は、シャッフル処理中、より大きなデータの内部におけるバイトの相対位置を維持することによって、バイトより大きなデータサイズを指示する。さらに、バイトシャッフル処理は、ＳＩＭＤレジスタにおけるデータの相対位置を変更し、さらにデータを複製することが可能である。このＰＳＨＵＦＢ命令は、第２ソースレジスタのシャッフル制御バイトの内容に従って、第１ソースレジスタからのバイトをシャッフルする。上記命令はデータを並び替えるが、シャッフルマスクは本実施例のシャッフル処理中には影響を受けず、変更もされない。一実現形態のニーモニック（ｍｎｅｍｏｎｉｃ）は、「ＰＳＨＵＦＢレジスタ１，レジスタ２／メモリ」であり、第１及び第２オペランドはＳＩＭＤレジスタである。しかしながら、第２オペランドのレジスタはまた、メモリ位置に置換可能である。第１オペランドは、シャッフルのためのソースデータを含む。本実施例では、第１オペランドのレジスタは、デスティネーションレジスタである。本発明による実施例はまた、位置変更に加えて、選択されたバイトをｚｅｒｏに設定する機能を有する。
【００２２】
第２オペランドは、シャッフルパターンを指定するため、シャッフル制御マスクバイト群を有する。ソースデータ要素を選択するのに用いられるビット数は、ソースオペランドのデータ要素の個数のｌｏｇ２である。例えば、１２８ビットレジスタの実施例におけるバイト数は１６バイトである。１６のｌｏｇ２は４である。従って、４ビット、すなわち１ニブルが必要とされる。以下のコードの［３：０］インデックスは４ビットを参照する。シャッフル制御バイトの最上位ビット（ＭＳＢ）、本実施例ではビット７が設定されている場合、定数ゼロが結果のバイトに書き込まれる。第２オペランドのバイトＩの最下位ニブル、マスクセットが整数Ｊを有する場合、シャッフル命令は、第１ソースレジスタのＪ番目のバイトをデスティネーションレジスタのＩ番目のバイトにコピーさせる。以下において、１２８ビットオペランドに対するｐａｃｋｅｄバイトシャッフル処理の一実施例の例示的な擬似コードが与えられる。
【００２３】
【表１】
2010282649.tif 000003
同様に、以下は６４ビットオペランドに対するｐａｃｋｅｄバイトシャッフル処理の他の実施例の一例となる擬似コードである。
【００２４】
【表２】
2010282649.tif 000004
この６４ビットレジスタの実施例では、６４ビットレジスタに８バイトあるとき、マスクの下位３ビットが利用される。８のｌｏｇ２は３である。上記コードのビット数は３ビットを参照している。他の実施例では、マスクのビット数は、ソースデータにおいて利用可能なデータ要素の個数に適応するよう可変とされる。例えば、下位５ビットを有するマスクは、２５６ビットレジスタにおいてデータ要素を選択するのに必要とされる。
【００２５】
現在、ＳＩＭＤにおいてデータを再構成することは、困難かつ退屈なことである。いくつかのアルゴリズムは、上記処理を実行するための実際の命令数より、算術処理のためにデータを構成するのにより多くの命令を要する。本発明によりｐａｃｋｅｄバイトシャッフル命令の実施例を実現することによって、データの再構成を実現するのに必要とされる命令数は、劇的に減少させることができる。例えば、ｐａｃｋｅｄバイトシャッフル命令の一実施例は、１バイトのデータを１２８ビットレジスタのすべての位置に配信することが可能である。レジスタにおけるデータの配信は、単一のデータアイテムが多数の係数と乗算されるフィルタリングアプリケーションにおいてしばしば利用される。当該命令がない場合、データバイトはそれのソースからフィルタリングされ、最下位バイト位置にシフトされる必要があるであろう。このとき、当該単一バイトは、まず１バイトとして複製され、その後、当該２バイトがダブルワードを形成するよう再び複製され、最後に当該ダブルワードがクワドワードを形成するよう複製される必要がある。これらすべての処理は、シングルｐａｃｋｅｄシャッフル命令と置換可能である。
【００２６】
同様に、ビッグエンディアンとリトルエンディアン形式との間の変更など、１２８ビットレジスタのすべてのバイトの反転は、シングルｐａｃｋｅｄシャッフル命令により容易に実行可能である。これら極めてシンプルなパターンは、ｐａｃｋｅｄシャッフル命令が利用されなかった場合、いくつかの命令を必要とする一方、複雑またはランダムなパターンはさらに非効率な命令ルーチンを要求する。ＳＩＭＤレジスタにおいてランダムバイトをリオーダするための最も直接的な手段は、当該バイトをバッファに書き込み、その後に整数バイトリード／ライトを用いて、それらをリオーダし、ＳＩＭＤレジスタに読み戻すことである。これらすべてのデータ処理は長いコードシーケンスを必要とするが、シングルｐａｃｋｅｄシャッフル命令のみで十分である。必要とされる命令数を減少させることによって、同一の結果を生成するのに必要とされるクロックサイクル数は大きく減らされる。本発明の実施例はまた、シャッフル命令を用いてＳＩＭＤ命令によりテーブルの複数の値にアクセスする。テーブルがレジスタの２倍のサイズである場合でさえ、本発明によるアルゴリズムは、整数処理と同様に命令ごとに１つのデータ要素より速く複数のデータ要素にアクセスすることを可能にする。
【００２７】
図１Ａは、本発明の一実施例によるデータをシャッフルするための命令を実行する実行ユニットを有するプロセッサにより構成される一例となるコンピュータシステムのブロック図である。システム１００は、ここで説明される実施例などの本発明に従って、ロジック含む実行するユニットを用いてデータをシャッフルするアルゴリズムを実行するプロセッサ１０２などのコンポーネントを含む。システム１００は、他のシステム（他のマイクロプロセッサを有するＰＣ、エンジニアリングワークステーション、セットトップボックスなどを含む）もまた利用されてもよいが、カリフォルニア州サンタクララのインテルコーポレイションから入手可能なＰＥＮＴＩＵＭ（登録商標）ＩＩＩ、ＰＥＮＴＩＵＭ（登録商標）４、Ｃｅｌｅｒｏｎ（登録商標）、ＸｅｏｎＴＭ、Ｉｔａｎｉｕｍ（登録商標）、ＸＳｃａｌｅＴＭ及び／またはＳｔｒｏｎｇＡＲＭＴＭマイクロプロセッサに基づく処理システムを表す。一実施例では、サンプルシステム１００は、他のオペレーティングシステム（ＵＮＩＸ（登録商標）やＬｉｎｕｘなど）、埋め込みソフトウェア及び／またはグラフィカルユーザインタフェースもまた利用されてもよいが、ワシントン州のレッドモンドのマイクロソフトコーポレイションから入手可能なＷＩＮＤＯＷＳＴＭオペレーティングシステムの一バージョンを実行するようにしてもよい。従って、本発明は、ハードウェア回路及びソフトウェアの任意の具体的組み合わせに限定されるものではない。
【００２８】
本拡張は、コンピュータシステムに限定されるものではない。本発明の他の実施例が、携帯型装置や埋め込みアプリケーションアドの他の装置において利用可能である。携帯型装置のいくつかの例として、携帯電話、インターネットプロトコル装置、デジタルカメラ、携帯情報端末（ＰＤＡ）及び携帯型ＰＣがあげられる。埋め込みアプリケーションとして、マイクロコントローラ、デジタル信号プロセッサ（ＤＳＰ）、チップ上のシステム、ネットワークコンピュータ（ＮｅｔＰＣ）、セットトップボックス、ネットワークハブ、ワイドエリアネットワーク（ＷＡＮ）スイッチ、またはオペランドに対し整数シャッフル処理を実行する他の何れかのシステムがあげられる。さらに、いくつかのアーキテクチャは、マルチメディアアプリケーションの効率性を向上させるため、命令が複数のデータに対して同時に実行可能となるよう実現されている。データのタイプ及びデータ量が増大するに従って、コンピュータ及びそのプロセッサは、より効率的にデータを操作するよう拡張される必要がある。
【００２９】
図１Ａは、本発明によるデータシャッフルアルゴリズムを実行する１以上の実行ユニット１０８を有するプロセッサにより構成されるコンピュータシステム１００のブロック図である。本実施例は、単一プロセッサデスクトップやサーバシステムに関して説明されるが、他の実施例はマイクロプロセッサシステムに備えることが可能である。システム１００は、ハブアーキテクチャの一例である。コンピュータシステム１００は、データ信号を処理するプロセッサ１０２を有する。プロセッサ１０２は、ＣＩＳＣ（Ｃｏｍｐｌｅｘ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｓｅｔ  Ｃｏｍｐｕｔｅｒ）マイクロプロセッサ、ＲＩＳＣ（Ｒｅｄｕｃｅｄ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｓｅｔ  Ｃｏｍｐｕｔｉｎｇ）マイクロプロセッサ、ＶＬＩＷ（Ｖｅｒｙ  Ｌｏｎｇ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｗｏｒｄ）マイクロプロセッサ、命令セットの組み合わせを実現するプロセッサ、あるいはデジタル信号プロセッサなどの他の任意のプロセッサ装置とすることが可能である。プロセッサ１０２は、プロセッサ１０２とシステム１００の他のコンポーネントとの間のデータ信号を送信可能なプロセッサバス1１０に接続される。システム１００の要素は、当業者には周知のそれらの従来技術による機能を実行する。
【００３０】
一実施例では、プロセッサ１０２は、レベル１（Ｌ１）内部キャッシュメモリ１０４を有する。アーキテクチャに応じて、プロセッサ１０２は、複数レベルの内部キャッシュまたは単独の内部キャッシュを有することも可能である。あるいは他の実施例では、キャッシュメモリは、プロセッサ１０２の外部に配置することも可能である。他の実施例はまた、特定の実現形態及びニーズに応じて、内部キャッシュと外部キャッシュの両方の組み合わせを有することが可能である。レジスタファイル１０６は、整数レジスタ、浮動小数点レジスタ、状態レジスタ及び命令ポインタレジスタを含む各種レジスタに異なるタイプのデータを格納することが可能である。
【００３１】
整数及び浮動小数点処理を実行するロジックを含む実行ユニット１０８がまた、プロセッサ１０２内に配置される。プロセッサ１０２はまた、特定のマイクロ命令のためのマイクロコードを格納するマイクロコード（ｕｃｏｄｅ）ＲＯＭを有する。本実施例では、実行ユニット１０８は、ｐａｃｋｅｄ命令セット１０９を処理するロジックを有する。一実施例では、ｐａｃｋｅｄ命令セット１０９は、データを整理するためｐａｃｋｅｄシャッフル命令を有する。命令を実行する付属の回路と共に、ｐａｃｋｅｄ命令セット１０９を汎用プロセッサ１０２の命令セットに含めることによって、多数のマルチメディアアプリケーションにより用いられる処理は、汎用プロセッサ１０２のｐａｃｋｅｄデータを用いて実行されるかもしれない。従って、多くのマルチメディアプリケーションは、ｐａｃｋｅｄデータに対する処理を実行するため、プロセッサのデータバスの幅全体を用いることにより、より効率的に実行及び高速化することが可能である。これにより、１回に１つのデータ要素に対して１以上の処理を実行するため、プロセッサのデータバスを介しより小さなデータユニットを転送する必要性を解消することができる。
【００３２】
実行ユニット１０８の他の実施例がまた、マイクロコントローラ、埋め込みプロセッサ、グラフィック装置、ＤＳＰ及び他のタイプのロジック回路において利用可能である。システム１００は、メモリ１２０を有する。メモリ１２０は、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）装置、ＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）装置、フラッシュメモリ装置、または他の記憶装置とすることが可能である。メモリ１２０は、プロセッサ１０２により実行可能なデータ信号により表されるデータ及び／または命令を格納することが可能である。
【００３３】
システムロジックチップ１１６は、プロセッサバス１１０及びメモリ１２０に接続される。図示された実施例では、システムロジックチップ１１６は、ＭＣＨ（Ｍｅｍｏｒｙ  Ｃｏｎｔｒｏｌｌｅｒ  Ｈｕｂ）である。プロセッサ１０２は、プロセッサバス１１０を介しＭＣＨ１１６と通信可能である。ＭＣＨ１１６は、命令及びデータの格納のため、及びグラフィックコマンド、データ及びテクスチャの格納のため、広帯域幅メモリパス１１８をメモリ１２０に設ける。ＭＣＨ１１６は、プロセッサ１０２、メモリ１２０及びシステム１００の他のコンポーネントとの間でデータ信号を指示し、プロセッサバス１１０、メモリ１２０及びシステムＩ／Ｏ１２２との間でデータ信号をブリッジするためのものである。一部の実施例では、システムロジックチップ１１６は、グラフィックコントローラ１１２と接続するためのグラフィックポートを設けることが可能である。ＭＣＨ１１６は、メモリインタフェース１１８を介しメモリ１２０と接続される。グラフィックカード１１２は、ＡＧＰ（Ａｃｃｅｌｅｒａｔｅｄ  Ｇｒａｐｈｉｃｓ  Ｐｏｒｔ）インタコネクト１１４を介しＭＣＨ１１６と接続される。
【００３４】
システム１００は、専用のハブインタフェースバス１２２を用いて、ＭＣＨ１１６とＩ／Ｏコントローラハブ（ＩＣＨ）１３０とを接続する。ＩＣＨ１３０は、ローカルＩ／Ｏバスを介しいくつかのＩ／Ｏ装置との直接的接続を提供する。ローカルＩ／Ｏバスは、周辺装置とメモリ１２０、チップセット及びプロセッサ１０２とを接続するための高速Ｉ／Ｏバスである。いくつかの例として、音声コントローラ、ファームウェアハブ（フラッシュＢＩＯＳ）１２８、ワイヤレストランシーバ１２６、データストレージ１２４、ユーザ入力とキーボードインタフェースを含む従来のＩ／Ｏコントローラ、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）などのシリアル拡張ポート及びネットワークコントローラ１３４があげられる。データストレージ装置１２４は、ハードディスクドライブ、フロッピー（登録商標）ディスクドライブ、ＣＤ−ＲＯＭ装置、フラッシュメモリ装置、または他の大容量記憶装置から構成することが可能である。
【００３５】
システムの他の実施例では、シャッフル命令によりアルゴリズムを実行する実行ユニットが、チップ上のシステムにより利用可能である。チップ上のシステムの一実施例は、プロセッサとメモリとから構成される。そのようなシステムのメモリは、フラッシュメモリである。フラッシュメモリは、プロセッサ及び他のシステムコンポーネントと同一のダイ上に配置することが可能である。さらに、メモリコントローラやグラフィックコントローラなどの他のロジックブロックもまた、チップ上のシステムに配置することが可能である。
【００３６】
図１Ｂは、本発明の原理を実現するデータ処理システム１４０の他の実施例を示す。データ処理システム１４０の一実施例では、インテルＸＳｃａｌｅＴＭ技術を有するインテル（登録商標）ＰＣＡ（Ｐｅｒｓｏｎａｌ  Ｉｎｔｅｒｎｅｔ  Ｃｌｉｅｎｔ  Ａｒｃｈｉｔｅｃｔｕｒｅ）アプリケーションプロセッサである（ｄｅｖｅｌｏｐｅｒ．ｉｎｔｅｌ．ｃｏｍにおいてワールドワイドウェブ上に説明されるように）。ここで開示される実施例は、本発明の範囲から逸脱することなく他の処理システムにより利用可能であるということは、当業者には容易に理解されるであろう。
【００３７】
コンピュータシステム１４０は、シャッフルを含むＳＩＭＤ処理を実行可能な処理コア１５９から構成される。一実施例では、処理コア１５９は、以下に限定されるものではないが、ＣＩＳＣ、ＲＩＳＣまたはＶＬＩＷタイプアーキテクチャを含む任意のタイプのアーキテクチャの処理ユニットを表す。処理コア１５９はまた、１以上の処理技術において製造に適したものであってもよいし、十分詳細に機械可読媒体上に表すことにより、製造を容易にするのに適したものであってもよい。
【００３８】
処理コア１５９は、実行ユニット１４２、レジスタファイル群１４５及びデコーダ１４４から構成される。処理コア１５９はまた、本発明の理解に不要な追加的回路（図示せず）を有する。実行ユニット１４２は、処理コア１５９により受信された命令を実行するのに利用される。典型的なプロセッサ命令を認識するのに加えて、実行ユニット１４２は、ｐａｃｋｅｄデータ形式に対する処理を実行するため、ｐａｃｋｅｄ命令セット１４３の命令を認識することが可能である。ｐａｃｋｅｄ命令セット１４３は、シャッフル処理をサポートする命令を有し、さらに他のｐａｃｋｅｄ命令を有するようにしてもよい。実行ユニット１４２は、内部バスによりレジスタファイル１４５に接続される。レジスタファイル１４５は、データを含む情報を格納するため、処理コア１５９上の格納領域を表す。前述のように、ｐａｃｋｅｄデータを格納するのに用いられる格納領域は重要なものではないということが理解されるであろう。実行ユニット１４２は、デコーダ１４４に接続される。デコーダ１４４は、処理コア１５９により受信される命令を制御信号及び／またはマイクロコードエントリポイントに復号するのに利用される。上記制御信号及び／またはマイクロコードエントリポイントに応答して、実行ユニット１４２は、適切な処理を実行する。
【００３９】
処理コア１５９は、以下に限定されるものではないが例えば、ＳＤＲＡＭ（Ｓｙｎｃｈｒｏｎｏｕｓ  Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）制御１４６、ＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）制御１４７、バーストフラッシュメモリインタフェース１４８、ＰＣＭＣＩＡ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ  Ｍｅｍｏｒｙ  Ｃａｒｄ  Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ａｓｓｏｃｉａｔｉｏｎ）／ＣＦ（Ｃｏｍｐａｃｔ  Ｆｌａｓｈ）カード制御１４９、ＬＣＤ（Ｌｉｑｕｉｄ  Ｃｒｙｓｔａｌ  Ｄｉｓｐｌａｙ）制御１５０、ＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）コントローラ１５１及び代替バスマスタインタフェース１５２を含む他の各種システム装置と通信するためのバス１４１と接続されている。一実施例では、データ処理システム１４０はまた、各種Ｉ／Ｏ装置とＩ／Ｏバス１５３を介し通信するためのＩ／Ｏブリッジ１５４を有するようにしてもよい。そのようなＩ／Ｏ装置は、以下に限定されるものではないが例えば、ＵＡＲＴ（Ｕｎｉｖｅｒｓａｌ  Ａｓｙｎｃｈｒｏｎｏｕｓ  Ｒｅｃｅｉｖｅｒ／Ｔｒａｎｓｍｉｔｔｅｒ）１５５、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）１５６、ＢｌｕｅｔｏｏｔｈワイアレスＵＡＲＴ１５７及びＩ／Ｏ拡張インタフェース１５８を含むものであってもよい。
【００４０】
データ処理システム１４０の一実施例は、シャッフル処理を含むＳＩＭＤ処理を実行可能な処理コア１５９と、モバイル、ネットワーク及び／またはワイアレス通信を提供する。処理コア１５９は、ウォルシュ・アダマール変換、高速フーリエ変換（ＦＦＴ）、離散コサイン変換（ＤＣＴ）などの離散変換及びそれらの逆変換、色空間変換、映像符号化動き予測または映像復号化動き補償などの圧縮／解凍技術、及びＰＣＭ（Ｐｕｌｓｅ  Ｃｏｄｅｄ  Ｍｏｄｕｌａｔｉｏｎ）などの変調／復調（ＭＯＤＥＭ）機能を含む各種音声、映像、画像処理及び通信アルゴリズムによりプログラムされてもよい。
【００４１】
図１Ｃは、ＳＩＭＤシャッフル処理を実行可能なデータ処理システムのさらなる他の実施例を示す。他の実施例によると、データ処理システム１６０は、メインプロセッサ１６６、ＳＩＭＤコプロセッサ１６１、キャッシュメモリ１６７及び入出力システム１６８を有するようにしてもよい。入出力システム１６８は任意的に、ワイアレスインタフェース１６９に接続されてもよい。ＳＩＭＤコプロセッサ１６１は、データシャッフルを含むＳＩＭＤ処理を実行することが可能である。処理コア１７０は、１以上の処理技術において製造に適したものであり、十分詳細に機械可読媒体上に表すことにより、処理コア１７０を含むデータ処理システム１６０のすべてまたは一部の製造を容易にするのに適したものであってもよい。
【００４２】
一実施例では、ＳＩＭコプロセッサ１６１は、実行ユニット１６２とレジスタファイル群１６４を有する。メインプロセッサ１６５の一実施例は、実行ユニット１６２による実行のため、ＳＩＭＤシャッフル命令を含む命令セット１６３の命令を認識するためのデコーダ１６５を有する。他の実施例では、ＳＩＭＤコプロセッサ１６１はまた、命令セット１６３の命令を復号するため、デコーダ１６５Ｂの少なくとも一部を有する。処理コア１７０はまた、本発明の理解には不要なさらなる回路（図示せず）を有する。
【００４３】
処理に関して、メインプロセッサ１６６は、入出力システム１６８とキャッシュメモリ１６７とのやりとりを含む一般的なデータ処理を制御するデータ処理命令のストリームを実行する。ＳＩＭＤコプロセッサ命令は、データ処理命令のストリームに埋め込まれる。メインプロセッサ１６６のデコーダ１６５は、付属のＳＩＭＤコプロセッサ１６１により実行されるべきタイプとして、上記ＳＩＭＤコプロセッサ命令を認識する。従って、メインプロセッサ１６６は、これらのＳＩＭＤコプロセッサ命令（またはＳＩＭＤコプロセッサ命令を表す制御信号）を、それらが付属の何れかのＳＩＭＤコプロセッサにより受け取られるコプロセッサバス１６６を介し発行する。この場合、ＳＩＭＤコプロセッサ１６１は、それに対する受信したＳＩＭＤコプロセッサ命令を受付及び実行するであろう。
【００４４】
ＳＩＭＤコプロセッサ命令による処理のため、データがワイアレスインタフェース１６９を介し受信される。例えば、音声通信が、デジタル信号形式により受信され、音声通信を表すデジタル音声サンプルを再生成するようＳＩＭＤコプロセッサ命令により処理されてもよい。他の例では、圧縮された音声及び／映像が、デジタルビットストリーム形式で受信され、デジタル音声サンプル及び／または動き映像フレームを再生成するようＳＩＭＤコプロセッサ命令により処理される。処理コア１７０の一実施例では、メインプロセッサ１６６とＳＩＭＤコプロセッサ１６１が、ＳＩＭＤシャッフル命令を含む命令セット１６３の命令を認識するため、実行ユニット１６２、レジスタファイル群１６４及びデコーダ１６５からなる単一の処理コア１７０に一体化される。
【００４５】
図２は、本発明によるシャッフル処理を実行するロジック回路を有する一実施例によるプロセッサ２００のマイクロアーキテクチャのブロック図である。シャッフル処理はまた、上述の説明と同様に、ｐａｃｋｅｄデータシャッフル処理及びｐａｃｋｅｄシャッフル命令と呼ばれてもよい。シャッフル命令の一実施例では、当該命令は、あるバイト粒度によりｐａｃｋｅｄデータをシャッフルすることが可能である。この命令はまた、ＰＳＨＵＦＢまたはｐａｃｋｅｄシャッフルバイトと呼ぶことも可能である。他の実施例では、シャッフル命令はまた、ワード、ダブルワード、クアドワードなどのサイズを有するデータ要素に対して処理するよう実現可能である。インオーダフロントエンド２０１は、実行されるマクロ命令をフェッチし、プロセッサパイプラインにおける以降の利用のためそれらを用意するプロセッサ２００の一部である。本実施例のフロントエンド２０１は、複数のユニットを含む。命令プリフェッチャ２２６は、メモリからマクロ命令をフェッチし、それらを命令デコーダ２２８に供給し、次に命令デコーダ２２８がそれらをマシーンが実行方法を知っているマイクロ命令またはマイクロ処理（マイクロｏｐまたはｕｏｐとも呼ばれる）と呼ばれるプリミティブに復号する。トレースキャッシュ２３０は、復号されたｕｏｐを抽出し、それらをプログラムオーダードシーケンスに構成するか、あるいは実行のためｕｏｐキュー２３４にトレースする。トレースキャッシュ２３０が複合マクロ命令に遭遇すると、マイクロコードＲＯＭ２３２は、当該処理を完了させるのに必要なｕｏｐを提供する。
【００４６】
多数のマクロ命令が１つのマイクロｏｐに変換され、その他は完全な処理を完了させるため複数のマイクロｏｐを必要とする。本実施例では、５以上のマイクロｏｐがマクロ命令を完了させるのに必要とされる場合、デコーダ２２８は、マクロ命令を実行するのにマイクロコードＲＯＭ２３２にアクセスする。一実施例では、ｐａｃｋｅｄシャッフル命令が命令デコーダ２２８における処理のため、少数のマイクロｏｐに復号することが可能である。他の実施例では、ｐａｃｋｅｄデータシャッフルアルゴリズムの命令は、当該処理を実現するのにいくつかのマイクロｏｐが必要な場合、マイクロコードＲＯＭ２３２に格納可能である。トレースキャッシュ２３０は、マイクロコードＲＯＭ２３２のシャッフルアルゴリズムのためのマイクロコードシーケンスを読み出すため、正しいマイクロ命令ポインタを決定するためのエントリポイントＰＬＡ（Ｐｒｏｇｒａｍｍｂｌｅ  Ｌｏｇｉｃ  Ａｒｒａｙ）を参照する。マイクロコードＲＯＭ２３２が現在のマクロ命令に対するマイクロｏｐのシーケンス処理を終了した後、マシーンのフロントエンド２０１は、トレースキャッシュ２３０からマイクロｏｐのフェッチを再開する。
【００４７】
一部のＳＩＭＤ及び他のマルチメディアタイプの命令は、複合処理とみなされる。ほとんどの浮動小数点関連命令は、複合命令である。また命令デコーダ２２８が複合マクロ命令に遭遇すると、マイクロコードＲＯＭ２３２は、マクロ命令のマイクロコードシーケンスを抽出するため、適切な位置でアクセスされる。当該マクロ命令を実行するのに必要とされる各種マイクロｏｐは、適切な整数及び浮動小数点実行ユニットにおける実行のため、アウトオブオーダ実行エンジン２０３に通信される。
【００４８】
アウトオブオーダ実行エンジン２０３では、マイクロ命令が実行のため用意される。アウトオブオーダ実行ロジックは、パイプラインに進み、実行のスケジューリングがされたとき、パフォーマンスを最適化するようマイクロ命令のフローを平坦化及びリオーダするためのいくつかのバッファを有する。アロケータロジックは、各ｕｏｐが実行に要するマシーンバッファとリソースを割当てる。レジスタリネーミングロジックは、ロジックレジスタをレジスタファイルのエントリにリネームする。アロケータはまた、メモリスケジューラ、高速スケジューラ２０２、低速／汎用浮動小数点スケジューラ２０４及びシンプル浮動小数点スケジューラ２０６の命令スケジューラの前に、メモリ処理の１つと非メモリ処理の１つの２つのｕｏｐキューの１つにおける各ｕｏｐに対するエントリを割当てる。ｕｏｐスケジューラ２０２、２０４及び２０６は、それらに従属する入力レジスタオペランドソースの準備及びそれの処理を完了させるのにｕｏｐが必要とする実行リソースの利用性に基づき、ｕｏｐの実行が準備できた時点を判断する。本実施例の高速スケジューラ２０２は、メインクロックサイクルの各半分についてスケジューリング可能であり、その他のスケジューラは、メインプロセッサクロックサイクルごとに１回のみスケジューリングを行うことが可能である。スケジューラは、実行されるｕｏｐをスケジューリングするため、ディスパッチポートを調停する。
【００４９】
レジスタファイル２０８と２１０が、スケジュール２０２、２０４、２０６と実行ブロック２１１の実行ユニット２１２、２１４、２１６、２１８、２２０、２２２、２２４との間に配置される。整数処理と符号小数点処理のそれぞれに対して、独立したレジスタファイル２０８と２１０が設けられる。本実施例の各レジスタファイル２０８と２１０は、レジスタファイルにまだ書き込まれていない完了された結果を新しい従属ｕｏｐにバイパスまたは転送することが可能なバイパスネットワークを有する。整数レジスタファイル２０８と浮動小数点レジスタファイル２１０は、他方とデータを通信することが可能である。一実施例では、整数レジスタファイル２０８は、２つの独立したレジスタファイルに分割され、１つのレジスタファイルはローオーダ３２ビットデータ用であり、第２のレジスタファイルはハイオーダ３２ビットデータ用である。一実施例の浮動小数点レジスタファイル２１０は、浮動小数点命令が典型的には、６４〜１２８ビット幅のオペランドを有するため、１２８ビット長のエントリを有する。
【００５０】
実行ブロック２１１は、命令が実際に実行される実行ユニット２１２、２１４、２１６、２１８、２２０、２２２及び２２４を有する。当該セクションは、マイクロ命令が実行するのに必要とする整数及び浮動小数点データオペランドの値を格納するレジスタファイル２０８と２１０を有する。本実施例のプロセッサ２００は、ＡＧＵ（Ａｄｄｒｅｓｓ  Ｇｅｎｅｒａｔｉｏｎ  Ｕｎｉｔ）２１２と２１４、高速ＡＬＵ２１６と２１８、低速ＡＬＵ２２０、浮動小数点ＡＬＵ２２２及び浮動小数点移動ユニット２２４のいくつかの実行ユニットから構成される。本実施例では、浮動小数点実行ブロック２２２と２２４は、浮動小数点ＭＭＸ、ＳＩＭＤ及びＳＳＥ処理を実行する。本実施例の浮動小数点ＡＬＵ２２２は、除算、平方根及び剰余マイクロｏｐを実行する浮動小数点除算器を有する。本発明の実施例では、浮動少数に関する任意のアクションは、浮動小数点ハードウェアにより行われる。例えば、整数形式と浮動少数形式との間の変換は、浮動小数点レジスタファイルに関する。同様に、浮動小数点除算処理は、浮動小数点除算器において行われる。他方、非浮動小数及び整数タイプは、整数ハードウェアリソースにより処理される。シンプルで頻繁にＡＬＵ処理は、高速ＡＬＵ実行ユニット２１６と２１８で行われる。本実施例の高速ＡＬＵ２１６と２１８は、半分のクロックサイクルの効果的なレイタンシーにより高速処理を実行可能である。一実施例では、ほとんどの複合整数処理は、低速ＡＬＵ２２０で行われる。なぜなら、低速ＡＬＵ２２０は、乗算、シフト、フラグロジック、ブランチ処理などの長いレイタンシーのタイプの処理のための整数実行ハードウェアを有するためである。メモリロード／ストア処理は、ＡＧＵ２１２と２１４により実行される。本実施例では、整数ＡＬＵ２１６、２１８及び２２０は、６４ビットデータオペランドに対する整数処理を実行することに関して説明される。他の実施例では、ＡＬＵ２１６、２１８及び２２０は、１６、３２、１２８、２５６などを含む各種データビットをサポートするよう実現することが可能である。同様に、浮動小数点ユニット２２２と２２４は、各種ビット長を有するある範囲のオペランドをサポートするよう実現可能である。一実施例では、浮動小数点ユニット２２２及び２２４は、ＳＩＭＤ及びマルチメディア命令に関して１２８ビット長のｐａｃｋｅｄデータオペランドに対して実行可能である。
【００５１】
本実施例では、ｕｏｐスケジューラ２０２、２０４及び２０６は、親ロードの実行終了前に従属する処理をディスパッチする。ｕｏｐがプロセッサ２００において投機的にスケジューリング及び実行されるとき、プロセッサ２００はまた、メモリミスを処理するロジックを有する。データロードがデータキャッシュにおいてミスした場合、一時的に誤ったデータをスケジュールに残したパイプラインに従属した処理が存在し得る。リプレイ機構は、誤ったデータを利用した命令を追跡及び再実行する。従属した処理のみがリプレイされる必要があり、独立した処理は完了を許可される。プロセッサの一実施例のスケジューラ及びリプレイ機構はまた、シャッフル処理用の命令シーケンスを取得するよう構成される。
【００５２】
ここでは、「レジスタ」という用語は、オペランドを特定するためのマクロ命令の一部として用いられるオンボードプロセッサ格納位置を参照するのに用いられる。言い換えると、ここで参照されるレジスタは、プロセッサの外部から可視的なものである（プログラマーの観点から）。しかしながら、一実施例のレジスタは、特定タイプの回路を意味するものとして限定されるべきではない。むしろ、一実施例のレジスタは、データの格納及び提供、及びここで説明される機能の実行が可能でありさえすればよい。ここで説明されるレジスタは、専用の物理的レジスタ、レジスリネーム処理を用いた動的割当された物理的レジスタ、専用及び動的割当物理的レジスタの組み合わせなど各種技術を利用して、プロセッサ内の回路により実現可能である。一実施例では、整数レジスタは、３２ビット整数データを格納する。一実施例のレジスタファイルはまた、ｐａｃｋｅｄデータ用の８つのマルチメディアＳＩＭＤレジスタを有する。以下の説明のため、レジスタは、カリフォルニア州サンタクララのインテルコーポレイションのＭＭＸ技術に対応したマイクロプロセッサにおける６４ビット長ＭＭＸＴＭレジスタ（一部の例では、「ｍｍ」レジスタとも呼ばれる）などのｐａｃｋｅｄデータを保持するよう構成されたデータレジスタであると理解される。整数と浮動小数点形式の両方で利用可能なこれらのＭＭＸレジスタは、ＳＩＭＤ及びＳＳＥ命令を伴うｐａｃｋｅｄデータ要素により処理可能である。同様に、ＳＳＥ２技術に関する１２８ビット長ＸＭＭレジスタは、そのようなｐａｃｋｅｄデータオペランドを保持するのに利用可能である。本実施例では、ｐａｃｋｅｄデータ及び整数データの格納において、レジスタはこれら２つのデータタイプを区別する必要はない。
【００５３】
以下の図面の例では、いくつかのデータオペランドが説明される。簡単化のため、最初のソースデータセグメントは、Ａからアルファベット順にラベル付けされ、Ａは最下位アドレスにあり、Ｚは最上位アドレスにある。従って、Ａはまずアドレス０にあり、Ｂはアドレス１にあり、Ｃはアドレス３にあるなどされる。理論的には、一実施例によるｐａｃｋｅｄバイトシャッフルと同様に、シャッフル処理は第１オペランドからのデータセグメントのシャッフル処理と、ソースデータ要素の１以上を第２オペランドのマスク群により指定されるパターンに再構成することを伴う。従って、シャッフルは、データ要素の一部またはすべてを所望の順序に回転または完全に再構成することが可能である。さらに、特定のデータ要素またはいくつかのデータ要素は、結果において重複または配信可能である。本発明によるシャッフル命令の実施例は、ゼロクリア機能を有し、各データ要素のマスクは、当該データ要素の位置を結果においてゼロにすることが可能である。
【００５４】
図３Ａ〜Ｃは、本発明の各種実施例によるシャッフルマスクを示す。本例では、複数のデータ要素３１１、３１２、３１３及び３１４から構成されるｐａｃｋｅｄデータオペランド３１０が示される。本例のｐａｃｋｅｄオペランド３１０は、他のオペランドの対応するｐａｃｋｅｄデータ要素のシャッフルパターンを示すマスク群を含めるためのｐａｃｋｅｄデータオペランドに関して説明される。従って、ｐａｃｋｅｄオペランド３１０の各データ要素３１１、３１２、３１３及び３１４のマスクは、結果の対応するｐａｃｋｅｄデータ要素位置の内容を示す。例えば、データ要素３１１は、最左データ要素位置にある。データ要素３１１のマスクは、シャッフル処理の結果の最左データ要素位置にどのデータがシャッフルまたは配置されるべきか示すためのものである。同様に、データ要素３１２は、第２の最左データ要素位置である。データ要素３１２のマスクは、結果の第２最左データ要素位置にどのデータが配置されるべきか示すものである。本実施例では、シャッフルマスクを含むｐａｃｋｅｄオペランドの各データ要素は、ｐａｃｋｅｄ結果のデータ要素位置との１以上の対応を有する。
【００５５】
図３Ａでは、データ要素３１２は、一実施例の一例となるシャッフルマスクの内容を記述するのに利用される。一実施例によるシャッフルマスク３１８は、「ゼロ設定フラグ（ｓｅｔ  ｔｏ  ｚｅｒｏ  ｆｌａｇ）」フィールド３１５、「予約（ｒｅｓｅｒｖｅｄ）」フィールド３１６及び「選択ビット（ｓｅｌｅｃｔｉｏｎｓ  ｂｉｔｓ）」フィールド３１７の３つの部分から構成される。「ゼロ設定フラグ」フィールド３１５は、現在のマスクにより指定される結果のデータ要素位置がゼロとされるべきか、または言い換えると、「０」の値と置換されるべきか示すためのものである。一実施例では、「ゼロ設定フラグ」フィールドは優勢であり、当該フィールド３１５が設定されている場合、マスク３１８の残りのフィールドは無視され、結果のデータ要素位置には「０」が充填される。「予約」フィールド３１６は、他の実施例では利用されないかもしれず、あるいは、以降または特別な使用のため確保された１以上のビットを有する。このシャッフルマスク３１８の「選択ビット」フィールド３１７は、ｐａｃｋｅｄ結果の対応するデータ要素位置のデータソースを示すためのものである。
【００５６】
ｐａｃｋｅｄデータシャッフル命令の一実施例では、１つのオペランドは一組のマスクから構成され、他のオペランドは一組のｐａｃｋｅｄデータ要素から構成される。何れのオペランドも同じサイズを有する。オペランドのデータ要素の個数に応じて、可変数の選択ビットがｐａｃｋｅｄ結果の配置のため、第２のｐａｃｋｅｄデータオペランドから各データ要素を選択するのに必要とされる。例えば、ｐａｃｋｅｄバイトの１２８ビットソースオペランドでは、１６のバイトデータ要素が選択に利用可能であるため、少なくとも４つの選択ビットが必要とされる。マスクの選択ビットにより示される値に基づき、ソースデータオペランドからの適切なデータ要素が、当該マスクの対応するデータ要素位置に配置される。例えば、データ要素３１２のマスク３１８は、第２最左データ要素位置に対応する。マスク３１８の選択ビット３１７が「Ｘ」の値を有する場合、ソースデータオペランドのデータ要素位置「Ｘ」からのデータ要素が、結果の第２最左データ要素位置にシャッフルされる。「ゼロ設定フラグ」フィールド３１５が設定されている場合、結果の第２最左データ要素位置は「０」と置換され、選択ビット３１７の指定は無視される。
【００５７】
図３Ｂは、１２８ビット長ｐａｃｋｅｄオペランドとバイトサイズデータ要素により処理される一実施例のマスク３２８の構成を示す。本実施例では、「ゼロ設定」フィールド３２５はビット７から構成され、「選択ビット」フィールド３２７は、１６の可能なデータ要素の選択が存在するため、ビット３〜０から構成される。ビット６〜４は本実施例では利用されず、「予約」フィールド３２６に配置される。他の実施例では、「選択ビット」フィールド３２７に用いられるビット数は、ソースデータオペランドに利用可能なデータ要素の可能な選択数に適合するように、必要に応じて増減することが可能である。
【００５８】
図３Ｃは、バイトサイズデータ要素及び１２８ビット長ｐａｃｋｅｄオペランドによるが、複数のデータ要素ソースにより処理する他の実施例のマスク３３８の構成を示す。本実施例では、マスク３３８は、「ゼロ設定」フィールド３３５、「ソース（ｓｒｃ）選択」フィールド３３６及び「選択」フィールド３３７から構成される。「ゼロ設定」フィールド３３５と「選択」フィールド３３７は、上記記載と同様に機能する。本実施例の「ソース選択」フィールド３３６は、どのデータソースから選択ビットにより指定されるデータオペランドが取得されるか示すためのものである。例えば、同一のマスク群が、複数のマルチメディアレジスタなどの複数のデータソースにより利用されてもよい。各ソースマルチメディアレジスタには値が割当てられ、「ソース選択」フィールド３３６の値は、これらソースレジスタの１つに指定される。「ソース選択」フィールド３３６の内容に応じて、選択されたデータ要素が、ｐａｃｋｅｄ結果の対応するデータ要素位置の配置のため、適切なデータソースから選択される。
【００５９】
図４Ａは、本発明の一実施例によるマルチメディアレジスタの各種ｐａｃｋｅｄデータタイプ表現を示す。図４Ａは、１２８ビット長オペランドのｐａｃｋｅｄバイト４１０、ｐａｃｋｅｄワード４２０及びｐａｃｋｅｄダブルワード（ｄｗｏｒｄ）のデータタイプを示す。本例のｐａｃｋｅｄバイトフォーマット４１０は、１２８ビット長であり、１６のｐａｃｋｅｄバイトデータ要素を含む。ここでは、１バイトは８データビットとして規定される。各バイトデータ要素の情報は、バイト０に対してはビット７〜ビット０に、バイト１に対してはビット１５〜ビット８に、バイト２に対してはビット２３〜ビット１６に、最後にバイト１５に対してはビット１２０〜ビット１２７に格納される。従って、すべての利用可能なビットは、レジスタにおいて利用される。この格納構成は、プロセッサの格納効率を向上させる。また１６個のデータ要素がアクセスされる場合、１つの処理が１６個のデータ要素に対してパラレルに実行可能となる。
【００６０】
一般に、データ要素は、同じ長さの他のデータ要素を有するオペランド（単一のレジスタまたは記憶位置）に格納される個々のデータである。ＳＳＥ２技術に関するｐａｃｋｅｄデータシーケンスでは、オペランド（ＸＭＭレジスタまたは記憶位置）に格納されるデータ要素の個数は、個々のデータ要素のビットの長さにより除された１２８ビットである。同様に、ＭＭＸ及びＳＳＥ技術に関するｐａｃｋｅｄデータシーケンスでは、オペランド（ＭＭＸレジスタまたは記憶位置）に格納されているデータ要素の個数は、個々のデータ要素のビットの長さにより除された６４ビットである。本例のｐａｃｋｅｄワードフォーマット４２０は、１２８ビット長であり、８つのｐａｃｋｅｄワードデータ要素を有する。各ｐａｃｋｅｄワードは、１６ビットの情報を有する。図４Ａのｐａｃｋｅｄダブルワードフォーマット４３０は、１２８ビット長であり、４つのｐａｃｋｅｄダブルワードデータ要素を有する。各ｐａｃｋｅｄダブルワードデータ要素は、３２ビットの情報を有する。ｐａｃｋｅｄクワドワードは、１２８ビット長であり、２つのｐａｃｋｅｄクワドワードデータ要素を有する。
【００６１】
図４Ｂは、他のインレジスタデータストレージフォーマットを示す。各ｐａｃｋｅｄデータは、複数の独立したデータ要素を有することが可能である。ｐａｃｋｅｄハーフ４４２、ｐａｃｋｅｄシングル４４２及びｐａｃｋｅｄダブル４４３の３つのｐａｃｋｅｄデータフォーマットが示される。ｐａｃｋｅｄハーフ４４１、ｐａｃｋｅｄシングル４４２及びｐａｃｋｅｄダブル４４３の一実施例は、不動点データ要素を含む。他の実施例では、ｐａｃｋｅｄハーフ４４１、ｐａｃｋｅｄシングル４４２及びｐａｃｋｅｄダブル４４３の１以上が、浮動点データ要素を含むようにしてもよい。ｐａｃｋｅｄハーフ４４１の他の実施例は、８つの１６ビットデータ要素を含む１２８ビット長である。ｐａｃｋｅｄシングル４４２の一実施例は、１２８ビット長であり、４つの３２ビットデータ要素を含む。ｐａｃｋｅｄダブル４４３の一実施例は、１２８ビット長であり、２つの６４ビットデータ要素を含む。このようなｐａｃｋｅｄデータフォーマットは、９６ビット、１６０ビット、１９２ビット、２２４ビット、２５６ビット、またはそれ以上の他のレジスタ長に拡張されてもよい。
【００６２】
図４Ｃは、「ｉｎｔｅｌ．ｃｏｍ／ｄｅｓｉｇｎ／ｌｉｔｃｅｎｔｒ」のワールドワイドウェブ（ｗｗｗ）上のカリフォルニア州サンタクララのインテルコーポレイションから入手可能な「ＩＡ−３２  Ｉｎｔｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅ  Ｓｏｆｔｗａｒｅ  Ｄｅｖｅｌｏｐｅｒ’ｓ  Ｍａｎｕａｌ  Ｖｏｌｕｍｅ  ２：Ｉｎｓｔｒｕｃｔｉｏｎ  Ｓｅｔ  Ｒｅｆｅｒｅｎｃｅ」にう記載されるあるタイプのオペコードフォーマットに対応するレジスタ／メモリオペランドアドレッシングモード及び３２ビット以上を有する処理符号化（オペコード）フォーマット４６０の一実施例を示す。シャッフル処理タイプが、フィールド４６１と４６２の１以上により符号化されてもよい。２つまでのソースオペランド識別子４６４と４６５を含む命令ごとに２つまでのオペランド位置が特定されるかもしれない。シャッフル命令の一実施例では、デスティネーションオペランド識別子４６６は、ソースオペランド識別子４６４と同一である。他の実施例では、デスティネーションオペランド識別子４６６は、ソースオペランド識別子４６５と同一である。従って、シャッフル処理の実施例では、ソースオペランド識別子４６４と４６５により識別されるソースオペランドの１つは、シャッフル処理の結果により上書きされる。シャッフル命令の一実施例では、オペランド識別子４６４と４６５は、６４ビットソース及びデスティネーションオペランドを識別するのに利用されてもよい。
【００６３】
図４Ｄは、４０ビット以上を有する他の処理符号化（オペコード）フォーマット４７０を示す。オペコードフォーマット４７０は、オペコードフォーマット４６０に対応し、任意的なプリフィックスバイト４７８から構成される。シャッフル処理タイプは、フィールド４７８、４７１及び４７２の１以上により符号化されてもよい。命令ごとに２までのオペランド位置が、ソースオペランド識別子４７４と４７５及びプリフィックスバイト４７８により識別されてもよい。シャッフル命令の一実施例では、プリフィックスバイト４７８が、１２８ビットソース及びデスティネーションオペランドを識別するのに利用されてもよい。シャッフル命令の一実施例では、デスティネーションオペランド識別子４７６は、ソースオペランド識別子４７４と同一である。他の実施例では、デスティネーションオペランド識別子４７６は、ソースオペランド識別子４７５と同一である。従ってシャッフル処理の実施例では、ソースオペランド識別子４７４と４７５により特定されるソースオペランドの１つは、シャッフル処理の結果により上書きされる。オペコードフォーマット４６０と４７０は、ＭＯＤフィールド４６３と４７３により部分的に、かつ任意的なスケール・インデックス・ベース及びディスプレイスメントバイトにより指定されるレジスタ・ツー・レジスタ、メモリ・ツー・レジスタ、レジスタ・バイ・メモリ、レジスタ・バイ・レジスタ、レジスタ・バイ・イミディエート、レジスタ・ツー・メモリアドレッシングを可能にする。
【００６４】
次に図４Ｅにおいて、他の実施例では、６４ビットＳＩＭＤ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ  Ｄａｔａ）算術処理が、ＣＤＰ（Ｃｏｐｒｏｃｅｓｓｏｒ  Ｄａｔａ  Ｐｒｏｃｅｓｓｉｎｇ）命令を通じて実行されてもよい。処理符号化（オペコード）フォーマット４８０は、ＣＤＰオペコードフィールド４８２と４８９を有する当該ＣＤＰ命令を示す。シャッフル処理の他の実施例では、ＣＤＰ命令タイプは、フィールド４８３、４８４、４８７及び４８８の１以上により符号化されてもよい。２つまでのソースオペランド識別子４８５と４９０及び１つのデスティネーションオペランド識別子４８６を含む命令ごとに３つまでのオペランド位置が特定される。コプロセッサの一実施例が、８、１６、３２及び６４ビット値に対して処理される。一実施例では、シャッフル処理が不動点または整数データ要素に対して実行される。一部の実施例では、シャッフル命令は、条件フィールド４８１を用いて条件付きで実行されてもよい。いくつかのシャッフル命令では、データサイズがフィールド４８３により符号化されてもよい。シャッフル命令のいくつかの実施例では、ゼロ（Ｚ）、ネガティブ（Ｎ）、キャリー（Ｃ）及びオーバーフロー（Ｖ）検出が、ＳＩＭＤフィールドに対して実行可能である。いくつかの命令では、サチュレーションのタイプはフィールド４８４により符号化されてもよい。
【００６５】
図５は、本発明によるシャッフルマスクに基づくデータオペランドに対してシャッフル処理を実行するロジックの一実施例のブロック図である。本実施例のゼロ設定機能を有するシャッフル処理の命令（ＰＳＨＵＦＢ）は、第１（マスク）オペランド５１０と第２（データ）オペランド５２０の２つの情報から開始される。以下の説明では、ＭＡＳＫ、ＤＡＴＡ及びＲＥＳＵＬＴＡＮＴは、一般にオペランドまたはデータブロックと呼ばれ、以下に限定されないが、レジスタ、レジスタファイル及び記憶位置を含む。一実施例では、シャッフルＰＳＨＵＦＢ命令は、１つのマイクロ処理に復号される。他の実施例では、当該命令は、データオペランドに対してシャッフル処理を実行するよう様々な個数のマイクロｏｐも復号されてもよい。本例では、オペランド５１０と５２０は、バイト長データ要素を有するソースレジスタ／メモリに格納されている１２８ビット長の情報である。一実施例では、オペランド５１０と５２０は、１２８ビットＳＳＥ２  ＸＭＭレジスタなどの１２８ビット長ＳＩＭＤレジスタに保持される。しかしながら、オペランド５１０と５２０の１つまたは両方が、記憶位置からロード可能である。一実施例では、ＲＥＳＵＬＴＡＮＴ５４０はまた、ＭＭＸまたはＸＭＭデータレジスタである。さらに、ＲＥＳＵＬＴＡＮＴ５４０はまた、ソースオペランドの１つと同一のレジスタまたは記憶位置であってもよい。特定の実現形態に応じて、オペランドとレジスタは、３２、６４及び２５６ビット等の他の長さとすることも可能であり、ワード、ダブルワードまたはクワドワードサイズのデータ要素を有することも可能である。本例では、第１オペランド５１０は、０ｘ０Ｅ、０ｘ０Ａ、０ｘ０９、０ｘ８Ｆ、０ｘ０２、０ｘ０Ｅ、０ｘ０６、０ｘ０６、０ｘ０６、０ｘＦ０、０ｘ０４、０ｘ０８、０ｘ０８、０ｘ０６、０ｘ０Ｄ及び０ｘ００の１６個のマスク（１６進数形式による）から構成される。各マスクは、結果５４０の対応するデータ要素位置の内容を特定するものである。
【００６６】
第２オペランド５２０は、Ｐ、Ｏ、Ｎ、Ｍ、Ｌ、Ｋ、Ｊ、Ｉ、Ｈ、Ｇ、Ｆ、Ｅ、Ｄ、Ｃ、Ｂ及びＡの１６個のデータセグメントから構成される。第２オペランド５２０の各データセグメントはまた、１６進数形式によるデータ要素位置の値によりラベル付けされている。ここで、データセグメントとは、等しい長さを有し、それぞれは１バイト（８ビット）データから構成される。各データ要素がワード（１６ビット）、ダブルワード（３２ビット）またはクワドワード（６４ビット）である場合、１２８ビットオペランドはそれぞれ、８ワード長、４ダブルワード長または２クワドワード長データ要素を有するであろう。しかしながら、本発明の他の実施例は、他のサイズのデータオペランド及びデータセグメントにより処理可能である。本発明の実施例は、特定の長さのデータオペランド、データセグメントまたはシフトカウントに限定されず、各実現形態に適したサイズとすることが可能である。
【００６７】
オペランド５１０と５２０は、レジスタ、記憶位置、レジスタファイルまたは組み合わせにより配置することが可能である。データオペランド５１０と５２０は、シャッフル命令と共に、プロセッサの実行ユニットのシャッフルロジック５３０に送信される。シャッフル命令が実行ユニットに到達するときまでに、当該命令はプロセッサパイプラインにおいて早期に復号されるべきであった。従って、シャッフル命令はマイクロ処理（ｕｏｐ）または他の復号形式とすることが可能である。本実施例では、これら２つのオペランド５１０と５２０は、シャッフルロジック５３０において受信される。シャッフルロジック５３０は、マスクオペランド５１０の値に基づき、ソースデータオペランド５２０からデータ要素を選択し、選択されたデータ要素を結果５４０の適切な位置に整理／シャッフルする。シャッフルロジック５３０はまた、指定されるように、結果５４０の与えられたデータ要素位置をゼロにする。ここで、結果５４０は、Ｏ、Ｋ、Ｊ、「０」、Ｃ、Ｏ、Ｇ、Ｇ、Ｆ、「０」、Ｅ、Ｉ、Ｉ、Ｇ、Ｎ及びＡの１６個のデータセグメントから構成される。
【００６８】
シャッフルロジック５３０の処理が、ここではいくつかのデータ要素により説明される。マスクオペランド５１０の最左データ要素位置のシャッフルマスクは、０ｘ０Ｅである。シャッフルロジック５３０は、図３Ａ〜Ｃにおいて上述されるようにマスクの各種フィールドを解釈する。この場合、「ゼロ設定」フィールドは設定されない。下位４ビット、すなわちニブルからなる選択フィールドは、「Ｅ」の１６進数値を有する。シャッフルロジック５３０は、データオペランド５２０のデータ要素位置「０ｘ０Ｅ」のデータＯを結果５４０の最左データ要素位置にシャッフルする。同様に、マスクオペランド５１０の第２最左データ要素位置のマスクは、０ｘ０Ａである。シャッフルロジック５３０は、当該位置に対するマスクを解釈する。この選択フィールドは、「Ａ」の１６進数値を有する。シャッフルロジック５３０は、データオペランド５２０のデータ要素位置「０ｘＡ」のデータＫを結果５４０の第２最左データ要素位置にコピーする。
【００６９】
本実施例のシャッフルロジック５３０は、シャッフル命令のゼロクリア機能をサポートしている。マスクオペランド５１０の左から４番目のデータ要素位置におけるシャッフルマスクは、０ｘ８Ｆである。シャッフルロジック５１０は、「ゼロ設定」フィールドがマスクのビット８における「１」により示されるように設定されていると認識する。これに応答して、ゼロ設定指示は選択フィールドに優先し、シャッフルロジック５１０は、当該マスクの選択フィールドの１６進数「Ｆ」を無視する。「０」が、結果５４０の左から４番目の対応するデータ要素位置に配置される。本実施例では、シャッフルロジック５３０は、各マスクに対して「ゼロ設定」及び選択フィールドを評価し、予約ビットやソース選択フィールド等のマスクの当該フィールド外に存在するその他のビットについては考慮しない。シャッフルマスク及びデータシャッフルの当該処理は、マスクオペランド５１０のマスク全体に対して繰り返される。一実施例では、これらのマスクのすべては、パラレルに処理される。他の実施例では、マスク及びデータ要素の一部が、一度に一緒に処理可能である。
【００７０】
当該シャッフル命令の実施例では、オペランドのデータ要素は様々な手法により再構成可能である。さらに、あるデータ要素からのデータは、複数のデータ要素位置において繰り返すことが可能であるか、あるいは、すべての位置に配信することも可能である。例えば、第４マスクと第５マスクの両方が、０ｘ０８の１６進数値を有する。この結果、データオペランド５２０のデータ要素位置０ｘ８のデータＩは、結果５４０の右側から４番目と５番目のデータ要素位置にシャッフルされる。ゼロ設定機能により、シャッフル命令の実施例は、結果５４０のデータ要素位置の何れかを「０」にすることが可能である。
【００７１】
実現形態に応じて、各シャッフルマスクは、結果における１つのデータ要素位置の内容を指定するのに利用可能である。本例と同様に、各バイト長シャッフルマスクは、結果５４０のバイト長データ要素位置に対応する。他の実施例では、複数のマスクの組み合わせは、データ要素ブロックを一緒に指定するのに利用可能である。例えば、２バイト長マスクは、ワードワイド長データ要素を指定するのに利用可能である。シャッフルマスクは、バイト長に限定されるものではなく、実現形態に必要とされる他の任意のサイズとすることが可能である。同様に、データ要素及びデータ要素位置は、バイト以外の粒度を有することが可能である。
【００７２】
図６は、本発明によるデータシャッフル処理を実行するロジック６００の一実施例のブロック図である。本実施例の回路は、第２オペランドのシャッフルマスクの復号に基づき、第１ソースオペランドから正しい結果バイトを選択する多重構成から構成される。ここで、ソースデータオペランドは、上位のｐａｃｋｅｄデータ要素と下位のｐａｃｋｅｄデータ要素から構成される。本実施例の多重構成は、他のｐａｃｋｅｄ命令を実現するのに用いられる他の多重構成より比較的シンプルなものである。この結果、本実施例の多重構成は、新たなクリティカルなタイミングパスを導入するものではない。本実施例の回路６００は、シャッフルマスクブロック、ソースオペランドからの下位／上位ｐａｃｋｅｄデータ要素を保持するブロック、データ要素の最初の選択のための第１の複数の８：１ｍｕｘ、上位及び下位のデータ要素の選択のための他の複数の３：１ｍｕｘ、ｍｕｘ選択＆ゼロロジック及び多数の制御信号を有する。簡単化のため、図６においては、限られた個数の８：１及び３：１ｍｕｘが示され、ドットにより表される。しかしながら、それらの機能は、図示されたものと同様であり、以下の説明から理解することができる。
【００７３】
本例のシャッフル処理中、一組のｐａｃｋｅｄデータ要素を有する第１オペランドと、一組のシャッフルマスクを有する第２オペランドの２つのオペランドが当該シャッフル処理回路６００において受信される。シャッフルマスクは、シャッフルマスクブロック６０２に伝搬される。当該シャッフルマスク群は、各種選択信号（ＳＥＬＥＣＴ  Ａ６０６、ＳＥＬＥＣＴ  Ｂ６０８、ＳＥＬＥＣＴ  Ｃ６１０）及びゼロ設定信号（ＺＥＲＯ）６１１を生成するため、ｍｕｘ選択及びゼロロジックブロック６０４において復号される。これらの信号は、結果６３２を貫通するのにｍｕｘの処理を制御するのに利用される。
【００７４】
本例では、マスクオペランドとデータオペランドは共に、１２８ビット長であり、それぞれ１６バイトサイズデータセグメントによりｐａｃｋｅｄされる。各種信号に対して示されるような値Ｎは、この場合には１６である。本実施例では、データ要素は、一組の上位及び下位ｐａｃｋｅｄデータ要素に分けられ、各組は８つのデータ要素を有する。これは、１６：１ｍｕｘではなくデータ要素選択中により小さな８：１ｍｕｘの使用を可能にする。これら上位及び下位のｐａｃｋｅｄデータ要素の組は、それぞれ上位及び下位の格納領域６２２と６１２に保持される。下位データセットから始まり、８つのデータ要素のそれぞれが、ルーティングライン６１４などの一組のラインを介し第１の組の１６個の８：１ｍｕｘ６１８Ａ〜Ｄに送信される。１６個の８：１ｍｕｘ６１８Ａ〜Ｄのそれぞれは、Ｎ個のＳＥＬＥＣＴ  Ａ信号６０６の１つにより制御される。それのＳＥＬＥＣＴ  Ａ６０６の値に応じて、当該ｍｕｘは、さらなる処理のため下位の８つのデータ要素６１４の１つを出力するためのものである。下位データ要素の何れかを１６個の結果データ要素位置の何れかにシャッフルすることが可能であるため、下位ｐａｃｋｅｄデータ要素に対しては、１６個の８：１ｍｕｘが存在する。１６個の８：１ｍｕｘのそれぞれは、１６個の結果データ要素位置の１つに対するものである。同様に、１６個の８：１ｍｕｘが、上位のｐａｃｋｅｄデータ要素に対して与えられる。上位８つのデータ要素が、第２組の１６個の８：１ｍｕｘ６２４Ａ〜Ｄのそれぞれに送信される。１６個の８：１ｍｕｘ６２４Ａ〜Ｄのそれぞれは、Ｎ個のＳＥＬＥＣＴ  Ｂ信号６０８の１つにより制御される。それのＳＥＬＥＣＴ  Ｂ６０８の値に基づき、当該８：１ｍｕｘは、さらなる処理のため上位８つのデータ要素６１６の１つを出力するためのものである。
【００７５】
１６個の３：１ｍｕｘ６２８Ａ〜Ｄのそれぞれは、結果６３２のデータ要素位置に対応する。１６個の下位データｍｕｘ６１８Ａ〜Ｄからの１６個の出力６２０Ａ〜Ｄは、上位データｍｕｘ６２４Ａ〜Ｄからの出力６２６Ａ〜Ｄと同様に、１６個の３：１上位／下位選択ｍｕｘ６２８Ａ〜Ｄに送られる。これら３：１選択ｍｕｘ６２８Ａ〜Ｄのそれぞれは、ｍｕｘ選択及びゼロロジック６０４から自らのＳＥＬＥＣＴ  Ｃ６１０とＺＥＲＯ６１１の信号を受け取る。当該３：１ｍｕｘに対するＳＥＬＥＣＴ  Ｃ６１０の値は、ｍｕｘが下位のデータセットまたは上位のデータセットから選択されたデータオペランドを出力するためのものである。各３：１ｍｕｘへの制御信号ＺＥＲＯ６１１は、当該ｍｕｘがそれの出力をゼロ（「０」）にすべきであるか否かを示すためのものである。本実施例では、制御信号ＺＥＲＯ６１１は、ＳＥＬＥＣＴ  Ｃ６１０に対する選択を優先し、当該データ要素位置の出力を結果６３２において「０」にする。
【００７６】
例えば、３：１ｍｕｘ６２８Ａは、当該データ要素位置に対して、８：１ｍｕｘ６２４Ａから選択された上位データ要素６２６Ａと、８：１ｍｕｘ６１８Ａから選択された下位データ要素６２０Ａを受け取る。ＳＥＬＥＣＴ  Ｃ６１０は、それが結果６３２において管理するデータ要素位置にそれの出力６３０Ａにおけるシャッフルすべきデータ要素を制御する。しかしながら、ｍｕｘ６２８Ａへの信号ＺＥＲＯ６１１がアクティブ状態であり、当該データ要素位置に対するシャッフルマスクが「０」が所望されるということを示しているということが示されれば、ｍｕｘ出力６３０Ａは「０」であり、データ要素入力６２０Ａと６２６Ａのいずれも利用されない。シャッフル処理の結果６３２は、１６個の３：１ｍｕｘ６２８Ａ〜Ｄからの出力６３０Ａ〜Ｄから構成され、各出力は特定のデータ要素位置に対応し、データ要素または「０」の何れかとなる。本例では、各３：１ｍｕｘ出力は、１バイト長であり、結果は、１６バイトｐａｃｋｅｄデータから構成されるデータブロックとなる。
【００７７】
図７は、本発明の一実施例によるバイト長データ要素に対するデータシャッフルの処理を示す。これは、「ＰＳＨＵＦＢ  ＤＡＴＡ，ＭＡＳＫ」命令の一例である。ここで、ＭＡＳＫ７０１のバイト位置０ｘ６と０ｘＣのシャッフルマスクの最上位ビットは、当該位置の結果７４１における結果がゼロとなるように設定されることに留意されたい。本例では、ソースデータは、デスティネーションデータ記憶装置７２１に構成され、一実施例では、ソースオペランド７２１からの各データ要素がデスティネーションレジスタ７４１に格納されるアドレスを指定する一組のマスク７０１に関して、デスティネーションデータ記憶装置７２１は、ソースデータ記憶装置７２１となる。マスク７０１とデータ７２１の２つのソースオペランドは、結果７４１と同様に、本例ではそれぞれ１６個のｐａｃｋｅｄデータ要素から構成される。本実施例では、関係するデータ要素のそれぞれは、８ビット、すなわち１バイト長である。従って、マスク７０１、データ７２１、及び結果７４１のデータブロックはそれぞれ１２８ビット長である。さらに、これらのデータブロックは、メモリまたはレジスタに配置することが可能である。一実施例では、マスクの構成は、例えば、フィルタリング処理や畳み込み処理を含む所望のデータ処理に基づく。
【００７８】
図７に示されるように、マスクオペランド７０１は、「０ｘ０Ｅ」７０２、「０ｘ０Ａ」７０３、「０ｘ０９」７０４、「０ｘ８Ｆ」７０５、「０ｘ０２」７０６、「０ｘ０Ｅ」７０７、「０ｘ０６」７０８、「０ｘ０６」７０９、「０ｘ０５」７１０、「０ｘＦ０」７１１、「０ｘ０４」７１２、「０ｘ０８」７１３、「０ｘ０８」７１４、「０ｘ０６」７１５、「０ｘ０Ｄ」７１６、「０ｘ００」７１７のシャッフルマスクを有するデータ要素を有する。同様に、データオペランド７２１は、「Ｐ」７２２、「Ｏ」７２３、「Ｎ」７２４、「Ｍ」７２５、「Ｌ」７２６、「Ｋ」７２７、「Ｊ」７２８、「Ｉ」７２９、「Ｈ」７３０、「Ｇ」７３１、「Ｆ」７３２、「Ｅ」７３３、「Ｄ」７３４、「Ｃ」７３５、「Ｂ」７３６及び「Ａ」７３７のソースデータ要素を有する。図７のデータセグメントの表現では、データ要素位置は、１６進数としてのデータにおいて言及される。従って、ｐａｃｋｅｄシャッフル処理は、マスク７０１とデータ７２１により実行される。シャッフルマスク７０１を利用して、データ７２１の処理がパラレルに実行可能である。
【００７９】
各データ要素シャッフルマスクが評価されると、指定されたデータ要素または「０」からの適切なデータが、当該シャッフルマスクの対応するデータ要素位置にシャッフルされる。例えば、最右シャッフルマスク７１７は、ソースデータオペランドの位置「０ｘ０」からデータを指定するのに復号される「０ｘ００」の値を有する。これに応答して、データ位置「０ｘ０」からのデータＡは、結果７４１の最右位置にコピーされる。同様に、右から２番目のシャッフルマスク７１６は、「０ｘＤ」に復号された「０ｘ０Ｄ」の値を有する。従って、データ位置「０ｘＤ」からのデータＮは、結果７４１の右から２番目の位置にコピーされる。
【００８０】
結果７４１の左から４番目のデータ要素位置は、「０」である。これは、当該データ要素位置に対するシャッフルマスクにおける「０ｘ８Ｆ」の値により生じる。本実施例では、シャッフルマスクバイトのビット７は、「ゼロ設定」または「ゼロクリア」標識である。当該フィールドが設定されると、結果における対応するデータ要素位置は、ソースデータオペランド７２１からのデータの代わりに、「０」の値により充填される。同様に、結果７４１の右から７番目の位置は、「０」の値を有する。これは、マスク７０１の当該データ要素位置に対する「０ｘＦ０」のシャッフルマスク値によるものである。ここで、シャッフルマスクのすべてのビットが実施例において利用されるとは限らないということに留意されたい。本実施例では、シャッフルマスクの下位ニブル、すなわち下位４ビットで、ソースデータオペランド７２１の可能な１６個のデータ要素の何れかを選択するのに十分である。ビット７が「ゼロ設定」フィールドであるとき、他の３つのビットは使用されないままであり、実施例において予約または無視することが可能である。本実施例では、シャッフルマスクの下位ニブルに示されるように、「ゼロ設定」フィールドはデータ要素選択を制御及びオーバーライドする。これらの例の両方で、左から４番目のデータ要素位置と右から７番目の位置、「ゼロクリア」フラグがビット７において設定される「０ｘ８０」のシャッフルマスク値はまた、対応する結果となるデータ要素位置が「０」により充填されるのを可能にする。
【００８１】
図７に示されるように、矢印はマスク７０１のシャッフルマスクごとのデータ要素のシャッフル処理を示す。シャッフルマスクに応じて、ソースデータ要素の１以上は結果７４１に現れないかもしれない。いくつかの例では、１以上の「０」がまた、結果７４１の様々なデータ要素位置に出現し得る。シャッフルマスクが１つのデータ要素またはデータ要素群を配信するよう構成される場合、これらデータ要素のデータは、結果における選ばれたパターンとして繰り返されてもよい。本発明の実施例は、何れか特定の構成またはシャッフルパターンに限定されるものではない。
【００８２】
上述のように、ソースデータレジスタはまた、本実施例のデスティネーションデータストレージレジスタとして利用され、これにより、必要なレジスタの個数を減少させることができる。ソースデータ７２１がオーバーライドされるが、シャッフルマスク７０１は変更されず、以降の参照のため利用可能である。ソースデータストレージ装置内のオーバーライドされたデータは、メモリまたは他のレジスタからリロードすることが可能である。他の実施例では、複数のレジスタが、ソースデータストレージ装置として利用可能であり、各データは所望のようにデスティネーションデータストレージ装置内に構成される。
【００８３】
図８は、本発明の他の実施例によるワード長データ要素に対するデータシャッフル処理を示す。本例の一般的説明は、図７と同様である。本実施例では、データ要素ワードは、マスクオペランド８０１のシャッフルマスクがバイトサイズであるため、データ要素バイトのペアとして処理される。従って、シャッフルマスクバイトのペアは、各データ要素ワード位置を規定するのに利用される。しかしながら他の実施例では、シャッフルマスクは、ワード粒度を有することが可能であり、結果におけるワードサイズのデータ要素位置を記述する。
【００８４】
本例のマスクオペランド８０１は、「０ｘ０３」８０２、「０ｘ０２」８０３、「０ｘ０Ｆ」８０４、「０ｘ０Ｆ」８０４、「０ｘ０Ｅ」８０５、「０ｘ８３」８０６、「０ｘ８２」８０７、「０ｘ０Ｄ」８０８、「０ｘ０Ｃ」８０９、「０ｘ０５」８１０、「０ｘ０４」８１１、「０ｘ０Ｂ」８１２、「０ｘ０Ａ」８１３、「０ｘ０Ｄ」８１４、「０ｘ０Ｃ」８１５、「０ｘ０１」８１６及び「０ｘ００」８１７のシャッフルマスクを有するバイト長データ要素を有する。データオペランド８２１は、「Ｈ」８２２、「Ｇ」８２３、「Ｆ」８２４、「Ｅ」８３５、「Ｄ」８３６、「Ｃ」８２７、「Ｂ」８２８、「Ａ」８２９のソースデータ要素を有する。図８のデータセグメントの表示において、データ要素位置はまた、１６進数としてのデータにより表される。図８に示されるように、データオペランド８２１の各ワードサイズデータ要素は、それが２バイトサイズ位置を占有するデータ位置アドレスを有する。例えば、データ「Ｈ」８２２は、バイトサイズデータ要素位置「０ｘＦ」と「０ｘＥ」を占有する。
【００８５】
ｐａｃｋｅｄシャッフル処理は、マスク８０１とデータ８２１により実行される。図８の矢印は、マスク８０１のシャッフルマスクごとのデータ要素のシャッフル処理を示す。各データ要素シャッフルマスクが評価されるとき、データオペランド８２１または「０」の指定されたデータ要素位置からの適当なデータが、当該シャッフルマスクに対する結果８３１の対応するデータ要素位置にシャッフルされる。本実施例では、ワードサイズデータ要素を指定するため、バイトサイズシャッフルマスクがペアで処理される。例えば、マスクオペランド８０１の２つの最左シャッフルマスク「０ｘ０３」８０２と「０ｘ０２」８０３は共に、結果８３１の最左ワード長データ要素位置８３２に対応する。シャッフル処理中、これら２つのデータバイト、または本ケースではデータＢ８２８であるデータ要素バイト位置０ｘ０３と０ｘ０２における１つのデータワードは、結果８３１の２つの最左バイトサイズデータ要素位置８３２に構成される。
【００８６】
さらに、シャッフルマスクはまた、結果８３１の第３のワードサイズデータ要素位置８３４のシャッフルマスク「０ｘ８３」８０６と「０ｘ８２」８０７により示されるように、結果においてワードサイズデータ要素を「０」にするよう構成可能である。シャッフルマスク「０ｘ８３」８０６と「０ｘ８２」８０７は、それらの「ゼロ設定」フィールドセットを有する。２つのシャッフルマスクバイトが共にペアにされているが、異なるペアリングが、例えば、クワドワードとして４バイト、または、ダブルのクワドワードを形成するため８バイトを構成するよう実現可能である。同様に、当該ペアリングは、連続するシャッフルマスクまたは特定バイトに限定されるものではない。他の実施例では、ワードサイズシャッフルマスクが、ワードサイズデータ要素を指定するのに利用可能である。
【００８７】
図９は、データをシャッフルするための方法の一実施例を示すフローチャート９００である。Ｌの長さの値が、一般にデータブロック及びオペランドの幅を表すのに利用される。実施例に応じて、Ｌはデータセグメント数、ビット、」バイト、ワード等に関する長さを指定するのに利用可能である。ブロック９１０において、第１長さＬのｐａｃｋｅｄデータオペランドが、シャッフル処理による利用のため受け取られる。ブロック９２０において、シャッフルパターンを指定するＭの長さのシャッフルマスクの長さＬが受け取られる。本例では、Ｌは１２８ビットであり、Ｍは８ビット、すなわち１バイトである。他の実施例では、ＬとＭはまた、それぞれ２５６と１６などの他の値とすることも可能である。ブロック９３０において、シャッフル処理が実行され、データオペランドからのデータ要素が、シャッフルパターンに従って結果にシャッフル構成される。
【００８８】
本実施例のブロック９３０におけるシャッフルの詳細がさらに、各データ要素位置に対して行われるものに関して説明される。一実施例では、すべてのｐａｃｋｅｄ結果データ要素位置のシャッフル処理は、パラレルに処理される。他の実施例では、マスクの一部が一度に一緒に処理される。ブロック９３２において、ゼロフラグが設定されているかチェックされる。このゼロフラグは、各シャッフルマスクの「ゼロ設定」または「ゼロクリア」フィールドを参照する。ゼロフラグがブロック９３２において設定されていると判断されると、当該シャッフルマスクに対応する結果のデータ要素位置のエントリが「０」に設定される。ゼロフラグがブロック９３２において設定されていないと検出されると、シャッフルマスクにより指定されるソースデータ要素からのデータは、当該シャッフルマスクに対応する結果のデスティネーションデータ要素位置に構成される。
【００８９】
現在、整数命令を用いたテーブル検索は、多数の命令を必要とする。整数処理がＳＩＭＤ命令により実現されるアルゴリズムに対するデータへのアクセスに利用される場合、さらに多数の命令が検索ごとに必要となる。しかし、ｐａｃｋｅｄバイトシャッフル命令の実施例を利用することによって、命令数と実行時間を劇的に低減することができる。例えば、テーブルサイズが１６バイト以下である場合、１つの命令によるテーブル検索中に１６データバイトにアクセス可能である。テーブルサイズが１７〜３２バイトの範囲内にある場合、１１個のＳＩＭＤ命令がテーブルデータを検索するのに利用可能である。テーブルサイズが３３〜６４バイトの範囲内にある場合、２３個のＳＩＭＤ命令が必要となる。
【００９０】
検索テーブルの利用によるＳＩＭＤ命令により実現できないデータ並列化によるいくつかのアプリケーションがある。映像圧縮方法Ｈ．２６Ｌの量子化及びデブロッキングアルゴリズムは、１２８ビットレジスタに適合しない小さな検索テーブルを用いたアルゴリズムの一例である。いくつかのケースでは、これらのアルゴリズムにより利用される検索テーブルは、小さなものである。テーブルが１つのレジスタにおいて適合可能である場合、テーブル検索処理は、１つのｐａｃｋｅｄシャッフル命令により実現することが可能である。テーブルのメモリスペース要求が１つのレジスタのサイズを超える場合、ｐａｃｋｅｄシャッフル命令の一実施例は、異なるアルゴリズムを介して動作可能である。サイズ超過したテーブルを処理する方法の一実施例は、テーブルを各々がレジスタの要領に等しいセクションに分割し、シャッフル命令によりこれらのテーブルセクションのそれぞれにアクセスする。シャッフル命令は、同一のシャッフル制御シーケンスを用いてテーブルの各セクションにアクセスする。この結果、パラレルテーブル検索が、ｐａｃｋｅｄバイトシャッフル命令による場合に実現することが可能となり、これにより、アルゴリズムのパフォーマンスを向上させるため、ＳＩＭＤ命令の利用が可能となる。本発明の実施例は、パフォーマンスを向上させるのに利用可能であり、小さな検索テーブルを利用するあるアルゴリズムに必要なメモリアクセス数を低減することが可能となる。他の実施例は、ＳＩＭＤ命令を用いた複数の検索テーブル要素のアクセスを可能にする。本発明によるｐａｃｋｅｄバイトシャッフル命令は、小さな検索テーブルを用いたアルゴリズムのあまり効率的でない整数移入の代わりに、効率的なＳＩＭＤ命令実現形態を可能にする。本発明の実施例は、１つのレジスタより大きなメモリスペースを必要とするテーブルからのデータへのアクセス方法を明示する。本例では、レジスタはテーブルの異なるセグメントを含む。
【００９１】
図１０Ａ〜Ｈは、ＳＩＭＤ命令を用いたパラレルテーブル検索アルゴリズムの処理を示す。図１０Ａ〜Ｈに説明される例は、複数のテーブルからのデータの検索に関し、一組のマスクに指定されるような選択されたデータ要素が、これら複数のテーブルから結果データのマージされたブロックにシャッフルされる。以下の説明は、特に前述のようなｐａｃｋｅｄシャッフル命令などのｐａｃｋｅｄ処理に関して説明される。本例のシャッフル処理は、レジスタのソーステーブルデータを上書きする。テーブルが検索処理に従って再利用される場合、テーブルデータは、他のロードが必要とならないように当該処理が実行される前に、他のレジスタにコピーされる。他の実施例では、シャッフル処理は、２つのソースと１つのデスティネーションの３つの独立したレジスタまたは記憶位置を利用する。他の実施例のデスティネーションは、ソースオペランドの何れかとは異なるレジスタまたは記憶位置である。従って、ソーステーブルデータは、オーバーライドされず、再利用可能である。本例では、テーブルデータはより大きなテーブルの各部分からのものとして扱われる。例えば、ＬＯＷ  ＴＡＢＬＥ  ＤＡＴＡ１０２１は、テーブルの下位アドレス領域からのものであり、ＨＩＧＨ  ＴＡＢＬＥ  ＤＡＴＡ１０５１は、テーブルの上位アドレス領域からのものである。本発明の実施例は、テーブルデータのソースに関して限定されるものではない。データブロック１０２１と１０５１は、隣接していてもよし、離れていてもよいし、重複していてもよい。同様に、テーブルデータはまた、異なるデータテーブルまたはメモリソースからのものとすることも可能である。また、このようなテーブル検索及びデータマージ処理は、複数のテーブルからのデータに対して実行可能であると想定される。例えば、同じテーブルの異なる部分から取得される代わりに、ＬＯＷ  ＴＡＢＬＥ  ＤＡＴＡ１０２１が第１テーブルから、ＨＩＧＨ  ＴＡＢＬＥ  ＤＡＴＡ１０５１が第２テーブルからのものとすることも可能である。
【００９２】
図１０Ａは、一組のシャッフルマスクに基づくテーブルからの第１組のデータ要素のｐａｃｋｅｄデータシャッフルを示す。この第１組のデータ要素は、ＬＯＷ  ＴＡＢＬＥ  ＤＡＴＡ１０２１と称されるオペランドとしてグループ化される。ＭＡＳＫ１００１とＬＯＷ  ＴＡＢＬＥ  ＤＡＴＡ１０２１はそれぞれ、本例では１６個の要素から構成される。ＭＡＳＫ１００１とＬＯＷ  ＴＡＢＬＥ  ＤＡＴＡ１０２１のシャッフル処理は、結果としてのＴＥＭＰ  ＲＥＳＵＬＴＡＮＴ１０４１をもたらす。シャッフル制御マスクの下位部分は、レジスタのデータ要素を選択する。データ要素を選択するのに必要とされるビット数は、ｌｏｇ2でのレジスタデータ要素数である。例えば、レジスタ容量が１２８ビットであって、データタイプがバイトである場合、レジスタデータ要素の個数は１６である。この場合、データ要素を選択するのに４ビットが必要となる。図１０Ｂは、図１０Ａの同じ組のシャッフルマスクに基づくテーブルからの第２組のデータ要素のｐａｃｋｅｄデータシャッフルを示す。この第２組のデータ要素は、ＨＩＧＨ  ＴＡＢＬＥ  ＤＡＴＡと名付けられたオペランドとしてグループ化される。ＨＩＧＨ  ＴＡＢＬＥ  ＤＡＴＡ１０５１はまた、本例では１６個の要素から構成される。ＭＡＳＫ１００１とＨＩＧＨ  ＴＡＢＬＥ  ＤＡＴＡ１０５１のシャッフル処理は、結果のＴＥＭＰ  ＲＥＳＵＬＴＡＮＴ  Ｂ１０４２をもたらす。
【００９３】
同一の組のマスク１００１がＬＯＷ  ＴＡＢＬＥ  ＤＡＴＡ１０２１とＨＩＧＨ  ＴＡＢＬＥ  ＤＡＴＡ１０５１の両方で利用されたため、それぞれの結果１０４１と１０４２は、異なるソースデータから同様に配置されたデータを有するようになる。例えば、両方の結果１０４１と１０４２の最左データ位置は、それの各自のデータソース１０２１と１０５１のデータ要素「０ｘＥ」１０２３と１０５３からのデータを有する。図１０Ｃは、ＳＥＬＥＣＴ  ＦＩＬＴＥＲ１０４３とシャッフルマスクの組ＭＡＳＫに関する論理ｐａｃｋｅｄＡＮＤ処理を示す。このケースでのＳＥＬＥＣＴ  ＦＩＬＴＥＲは、ＭＡＳＫ１００１のシャッフルマスクの何れが第１テーブルデータ１０２１に関し、何れが第２テーブルデータに関するものであるか区別するためのフィルタである。本実施例のシャッフルマスクは、図３Ｃで前述されたように、ソース選択フィールド「ＳＲＣ  ＳＥＬＥＣＴ」３３６を利用する。シャッフル制御バイトの下位ビットは、レジスタのデータ要素位置を選択するのに利用され、最上位ビットを除く上位ビットは、テーブルのセグメントを選択するのに利用される。本実施例では、データを選択するのに利用されるものの直前及び隣接するビットが、テーブルの選択を選択する。ＳＥＬＥＣＴ  ＦＩＬＴＥＲ１０４３は、シャッフルマスクからのソース選択フィールドから分離されたＭＡＳＫ１００１のすべてのシャッフルマスクに「０ｘ１０」を適用する。ｐａｃｋｅｄＡＮＤ処理は、最終結果のどのデータ要素位置が、第１データ群１０２１または第２データ群１０５１からものとすべきか示すＴＡＢＬＥ  ＳＥＬＥＣＴ  ＭＡＳＫ１０４４をもたらす。
【００９４】
テーブル選択を選択するためのビット数は、ｌｏｇ２によるテーブルセクション数に等しい。例えば、１６バイトレジスタを有する１７〜３２バイトの範囲内のテーブルサイズの場合には、最下位の４ビットがデータを選択し、５番目のビットがテーブルセクションを選択する。ここで、ソース選択は、２つのデータソース１０２１と１０５１があるため、各シャッフルマスクの第２ニブルの最下位ビットであるビット４を用いてデータソースを指定する。０から１５までのインデックスを有するテーブルのセクションが、図１０Ａのｐａｃｋｅｄシャッフル命令によりアクセスされる。１６から３１までのインデックスを有するテーブルのセクションが、図１０Ｂのｐａｃｋｅｄシャッフル命令によりアクセスされる。テーブルのセクションを選択するフィールドは、図１０Ｃのシャッフル制御バイト／インデックスとは隔離されている。多数のデータソースを有する実現形態では、追加ビットは、ソース選択フィールドを必要するかもしれない。３２バイトテーブルの場合には、シャッフル制御バイト「０ｘ００」〜「０ｘ０Ｆ」は、第１テーブルセクションのテーブル要素０〜１５を選択し、シャッフル制御バイト「０ｘ１０」〜「０ｘ１Ｆ」は、第２テーブルセクションのテーブル要素１６〜３１を選択する。例えば、シャッフル制御バイトが「０ｘ１９」を指定していると考える。「０ｘ１９」のビット表現は、「０００１１００１」である。下位４ビット「１００１」は、９番目のバイト（０からカウントする）を選択し、「１」に設定されている５番目のビットは２つのテーブルの第２テーブルを選択する。「０」に等しい第５ビットは、第１テーブルを選択する。
【００９５】
インデックス０〜１５を有する第１テーブルセクションからアクセスされるデータ値を選択するマスクは、第５ビットがゼロとなるシャッフル制御バイトを選択することにより、図１０Ｄの本実施例のｐａｃｋｅｄ  ｃｏｍｐａｒｅ  ｅｑｕａｌ  ｏｐｅｒａｔｉｏｎにより計算される。図１０Ｄは、ＬＯＷ  ＦＩＬＴＥＲ１０４５とＴＡＢＬＥ  ＳＥＬＥＣＴ  ＭＡＳＫ１０４４のｐａｃｋｅｄ「ｃｏｍｐａｒｅ  ｅｑｕａｌ  ｏｐｅｒａｔｉｏｎ」を示す。第１テーブルセクションに対する図１０Ｄにおいて生成された下位テーブル選択マスクは、他のｐａｃｋｅｄシャッフル処理により第１テーブルセクションからアクセスされるデータ要素を選択する。本例のＬＯＷ  ＦＩＬＴＥＲ１０４５は、第１データセット１０２１から生じるようなシャッフルマスクにより示されるデータ要素位置をハイライトまたは抽出するためのマスクである。本実施例において、ソース選択フィールドは「０」である場合、データソースは、ＬＯＷ  ＴＡＢＬＥ  ＤＡＴＡ１０２１となる。ｃｏｍｐａｒｅ  ｅｑｕａｌ  ｏｐｅｒａｔｉｏｎは、「０」のソース選択値を有するデータ要素位置に対する「０ｘＦＦ」の値を有するＬＯＷ  ＴＡＢＬＥ  ＳＥＬＥＣＴ  ＭＡＳＫ１０４６をもたらす。
【００９６】
１６〜３１のインデックスを有する第２テーブルセクションからアクセスされるデータ値を選択するマスクは、第５ビットが１となるシャッフル制御バイトを選択することにより図１０Ｅのｐａｃｋｅｄ  ｃｏｍｐａｒｅ  ｅｑｕａｌ  ｏｐｅｒａｔｉｏｎにより計算される。図１０Ｅは、ＨＩＧＨ  ＦＩＬＴＥＲ１０４７とＴＡＢＬＥ  ＳＥＬＥＣＴ  ＭＡＳＫ１０４４に対する同様のｃｏｍｐａｒｅ  ｅｑｕａｌ  ｏｐｅｒａｔｉｏｎを示す。第２テーブルセクションに対する図１０Ｅにおいて生成される上位のテーブル選択マスクは、ｐａｃｋｅｄシャッフル処理により第２テーブルセクションからアクセスされるデータ要素を選択する。ＨＩＧＨ  ＦＩＬＴＥＲ１０４７は、第２データセット１０５１から生じるようなシャッフルマスクのソース選択フィールドにより示されるデータ要素位置を抽出するマスクである。本実施例において、ソース選択フィールドが「１」である場合、データソースは、ＨＩＧＨ  ＴＡＢＬＥ  ＤＡＴＡ１０５１となる。ｃｏｍｐａｒｅ  ｅｑｕａｌ  ｏｐｅｒａｔｉｏｎは、「１」のソース選択値を有するデータ要素位置に対して「０ｘＦＦ」の値を有するＨＩＧＨ  ＴＡＢＬＥ  ＳＥＬＥＣＴ  ＭＡＳＫ１０４８をもたらす。
【００９７】
図１０Ｆにおいて、２つのテーブルセクションから選択されたデータ要素がマージされる。図１０Ｆにおいて、ＬＯＷ  ＴＡＢＬＥ  ＳＥＬＥＣＴ  ＭＡＳＫ１０４６とＴＥＭＰ  ＲＥＳＵＬＴＡＮＴ  Ａ１０４１に対するｐａｃｋｅｄ  ＡＮＤ処理が示される。このｐａｃｋｅｄ  ＡＮＤ処理は、ソース選択フィールドに基づくマスク１０４６ごとに第１データセット１０２１から選択されたシャッフルされたデータ要素をフィルタリングする。例えば、最左データ要素位置に対するシャッフルマスク１００２のソース選択フィールドは、ＴＡＢＬＥ  ＳＥＬＥＣＴ  ＭＡＳＫ１０４４に示されるように、「０」の値を有する。従って、ＬＯＷ  ＴＡＢＬＥ  ＳＥＬＥＣＴ  ＭＡＳＫ１０４６は、当該位置に０ｘＦＦの値を有する。最左データ要素位置のデータと０ｘＦＦとの間の図１０ＦにおけるＡＮＤ処理は、データＯをＳＥＬＥＣＴＥＤ  ＬＯＷ  ＴＡＢＬＥ  ＤＡＴＡ１０４９に転送させる。他方、左から３番目のデータ要素位置に対するシャッフルマスク１００４のソース選択フィールドは、データが第１データセット１０２１以外のソースからのものであることを示す「１」の値を有する。従って、ＬＯＷ  ＴＡＢＬＥ  ＳＥＬＥＣＴ  ＭＡＳＫ１０４６は、当該位置に「０ｘ００」の値を有する。ここで、ＡＮＤ処理は、データ「Ｊ」をＳＥＬＥＣＴＥＤ  ＬＯＷ  ＴＡＢＬＥ  ＤＡＴＡ１０４９にわたさず、当該位置は「０ｘ００」としてエンプティのままにされる。
【００９８】
図１０Ｇにおいて、ＨＩＧＨ  ＴＡＢＬＥ  ＳＥＬＥＣＴ  ＭＡＳＫ１０４８及びＴＥＭＰ  ＲＥＳＵＬＴＡＮＴ  Ｂ１０４２に対する同様のｐａｃｋｅｄ  ＡＮＤ処理が示される。このｐａｃｋｅｄ  ＡＮＤ処理は、マスク１０４８ごとに第２データセット１０５１から選択されたシャッフルデータ要素をフィルタリングする。図１０Ｆにおいて説明されるｐａｃｋｅｄＡＮＤ処理とは異なり、マスク１０４８は、第２データセットからもたらされるようなソース選択フィールドにより示されるデータが、ＳＥＬＥＣＴＥＤ  ＨＩＧＨ  ＴＡＢＬＥ  ＤＡＴＡ１０５０にわたされるのを可能にし、その他のデータ要素位置がエンプティのままにされる。
【００９９】
図１０Ｈは、第１データセットと第２データセットからの選択されたデータのマージ処理を示す。本例では、パラレルテーブル検索アルゴリズムの所望の結果であるＭＥＲＧＥＤ  ＳＥＬＥＣＴＥＤ  ＴＡＢＬＥ  ＤＡＴＡ１０７０を取得するため、ＳＥＬＥＣＴＥＤ  ＬＯＷ  ＴＡＢＬＥ  ＤＡＴＡ１０４９とＳＥＬＥＣＴＥＤ  ＨＩＧＨ  ＴＡＢＬＥ  ＤＡＴＡ１０５０に対して、ｐａｃｋｅｄ論理ＯＲ処理が実行される。他の実施例では、ＳＥＬＥＣＴＥＤ  ＬＯＷ  ＴＡＢＬＥ  ＤＡＴＡ１０４９とＳＥＬＥＣＴＥＤ  ＨＩＧＨ  ＴＡＢＬＥ  ＤＡＴＡ１０５０を加算するためのｐａｃｋｅｄ加算処理が、ＭＥＲＧＥＤ  ＳＥＬＥＣＴＥＤ  ＴＡＢＬＥ  ＤＡＴＡ１０７０を生成することが可能である。図１０Ｈに示されるように、ＳＥＬＥＣＴＥＤ  ＬＯＷ  ＴＡＢＬＥ  ＤＡＴＡ１０４９またはＳＥＬＥＣＴＥＤ  ＨＩＧＨ  ＴＡＢＬＥ  ＤＡＴＡ１０５０の何れかは、本実施例では与えられたデータ位置に０ｘ００の値を有する。これは、０ｘ００を有さないその他のオペランドが適切なソースから選択された所望のテーブルデータを有するためである。ここで、結果１０７０の最左データ要素位置は、第１データセット１０２１からのシャッフルされたデータ１０４１である「Ｏ」である。同様に、結果１０７０の左から３番目のデータ要素位置は、第２データセット１０５１からのシャッフルされたデータ１０４２である「Ｚ」である。
【０１００】
本実施例のサイズ超過したテーブルを検索する方法は、一般に以下の処理によりまとめることができる。まず、テーブルデータをレジスタにコピーまたはロードする。各テーブルセクションからのテーブル値が、ｐａｃｋｅｄシャッフル処理によりアクセスされる。テーブルセクションを特定するソース選択フィールドは、シャッフルマスクから抽出される。どのテーブルセクションがシャッフルされたデータ要素の適切なソースであるか判断するためのテーブルセクション番号を有するソース選択フィールドに対するｃｏｍｐａｒｅ−ｉｆ−ｅｑｕａｌ処理が実行される。このｃｏｍｐａｒｅ−ｉｆ−ｅｑｕａｌ処理は、各テーブルセクションに対して所望のシャッフルされたデータ要素をさらにフィルタリングするためのマスクを提供する。適切なテーブル要素からの所望のデータ要素が、最終的なテーブル検索結果を形成するためマージされる。
【０１０１】
図１１は、ＳＩＭＤ命令を用いてテーブル検索を実行する方法の一実施例を示すフローチャートである。ここで説明されたフローは一般に、図１０Ａ〜Ｈの方法に従うが、これに限定されるものではない。これらの処理のいくつかは、異なる順序または様々なタイプのＳＩＭＤ命令を用いて実行可能である。ブロック１１０２において、シャッフルパターンを指定する一組のシャッフルマスクが受け取られる。これらのシャッフルマスクはまた、どのテーブルまたはソースから所望の結果を取得するためデータ要素をシャッフルすべきか示すためのソースフィールドを有する。ブロック１１０４において、テーブルまたは第１データセットの第１部分のデータ要素がロードされる。ブロック１１０６において、ブロック１１０２のシャッフルパターンに従って、第１部分データ要素がシャッフルされる。ブロック１１０８において、第２データセットまたはテーブルの第２部分のデータ要素がロードされる。ブロック１１１０において、第２部分データ要素は、ブロック１１０２のシャッフルパターンに従ってシャッフルされる。ブロック１１１２において、テーブル選択が、シャッフルマスクからフィルタリングされる。本実施例のテーブル選択は、データ要素がどこから生じるか示すソース選択フィールドに関する。ブロック１１１４において、テーブルの第１部分からシャッフルデータに対して、テーブル選択マスクが生成される。ブロック１１１６において、テーブルの第２部分からシャッフルデータに対して、テーブル選択マスクが生成される、これらのテーブル選択マスクは、適切なテーブルデータソースから特定のデータ要素位置に対する所望のシャッフルされたデータ要素をフィルタリングするためのものである。
【０１０２】
ブロック１１１８において、第１テーブル部分に対するブロック１１１４のテーブル選択マスクに従って、第１テーブル部分のシャッフルされたデータからデータ要素が選択される。ブロック１１２０において、第２テーブル部分に対するブロック１１１６のテーブル選択マスクに従って、第２テーブル部分のシャッフルされたデータからデータ要素が選択される。ブロック１１１８において第１テーブル部分及びブロック１１２０において第２テーブル部分から選択されたシャッフルされたデータ要素は、マージされたテーブルデータを取得するため、ブロック１１２２においてマージされる。一実施例のマージされたテーブルデータは、第１及び第２テーブルデータからのシャッフルされたデータ要素を含む。他の実施例では、マージされたテーブルデータは、３以上のテーブルソースまたは記憶領域から検索されたデータを有することが可能である。
【０１０３】
図１２は、テーブル検索を実行する方法の他の実施例を示すフローチャートである。ブロック１２０２において、複数のデータ要素を有するテーブルがロードされる。ブロック１２０４において、当該テーブルが１つのレジスタに適合するか判断される。テーブルが１つのレジスタに適合する場合、ブロック１２１６において、テーブル検索がシャッフル処理により実行される。データが１つのレジスタに適合しない場合、ブロック１２０６において、テーブルの関連する各部分に対して、テーブル検索がシャッフル処理により実行される。テーブル部分またはデータソースを選択するビットまたはフィールドを取得するため、論理ｐａｃｋｅｄ  ＡＮＤ処理が実行される。ブロック１２１０において、「ｃｏｍｐａｒｅ−ｉｆ−ｅｑｕａｌ」処理が、検索されるテーブルの関連する部分からテーブルデータを選択するためのマスクを生成する。ブロック１２１２において、テーブルセクションからデータアイテムを選択及び検索するため、論理ＡＮＤ処理が利用される。ブロック１２１４において、論理ＯＲ処理は、所望の検索データを取得するため、選択されたデータをマージする。
【０１０４】
ゼロクリア機能を用いて複数のレジスタ間のデータを再構成するためのアルゴリズムへのｐａｃｋｅｄシャッフル命令の一実施例が実現される。ミックス処理の目的は、結果におけるデータ位置がソースオペランドのもとの位置とは異なる選択された構成の１つのＳＩＭＤレジスタの２以上のＳＩＭＤレジスタの内容をマージするためのものである。選択されたデータ要素は、まず所望の結果位置に移動され、選択されていないデータ要素はゼロに設定される。選択されたデータ要素が１つのレジスタに対して移動された位置が、他のレジスタではゼロに設定される。この結果、結果レジスタの１つは、与えられたデータ要素位置に非ゼロのデータアイテムを含む。以下の一般的な命令シーケンスが、２つのオペランドからデータを合成するのに利用可能である。
【０１０５】
【表３】
2010282649.tif 000005
オペランドＤＡＴＡ  Ａ及びＤＡＴＡ  Ｂは、ゼロ設定のため再構成される要素を含む。オペランドＭＡＳＫ  ＡとＭＡＳＫ  Ｂは、データ要素が移動される場所及びどのデータ要素がゼロに設定されるかを指定するシャッフル制御バイトを含む。本実施例では、ＭＡＳＫ  Ａによりゼロに設定されないデスティネーション位置のデータ要素が、ＭＡＳＫ  Ｂによりゼロに設定され、ＭＡＳＫ  Ｂによりゼロに設定されないデスティネーション位置が、ＭＡＳＫ  Ａによりゼロに設定される。図１３Ａ〜Ｃは、複数のレジスタの間のデータを再構成するためのアルゴリズムを示す。本例では、２つのデータソースまたはレジスタ１３０４と１３１０からのデータ要素が、インタリーブされたデータブロック１３１４にシャッフルされる。本例のマスク１３０２と１３０８、ソースデータ１３０４と１３１０及び結果１３０６、１３１２と１３１４を含むデータブロックはそれぞれ、１２８ビット長であり、１６バイトサイズのデータ要素から構成される。しかしながら、他の実施例は、様々なサイズのデータ要素を有する他の長さのデータブロックを含むことが可能である。
【０１０６】
図１３Ａは、第１ソースデータオペランドＤＡＴＡ  Ａ１３０４に対する第１マスクＭＡＳＫ  Ａ１３０２の第１のｐａｃｋｅｄデータシャッフル処理を示す。本例では、所望のインタリーブされた結果１３１４は、第１データソース１３０４から１つのデータ要素と、第２データソース１３１０から他のデータ要素のインタリーブパターンを含む。本例では、ＤＡＴＡ  Ａ１３０４の第５バイトは、ＤＡＴＡ  Ｂ１３１０の２０番目のバイトとインタリーブされる。ＭＡＳＫ  Ａ１３０２は、本実施例では、「０ｘ８０」と「０ｘ０５」の繰り返しのパターンを含む。本実施例の「０ｘ８０」の値は、ゼロ設定フィールドを有し、関連するデータ要素位置は「０」で充填される。「０ｘ０５」の値は、当該シャッフルマスクの関連するデータ要素位置が、ＤＡＴＡ  Ａ１３０４のデータ要素０ｘ５からのデータＦ１により構成されるべきである。本来的に、ＭＡＳＫ  Ａ１３０２のシャッフルパターンは、１つおきの結果のデータ要素位置のデータＦ１を構成及び繰り返す。ここで、データＦ１は、ＤＡＴＡ  Ａ１３０４からシャッフルされる１つのデータである。他の実施例では、各個数のソースデータ要素からのデータが、シャッフル可能である。従って、実施例は特定のパターンまたは１つのデータに関するパターンに限定されるものではない。マスクパターンの構成の組み合わせは、すべてのタイプの可能にオープンである。図１３Ａの矢印は、ＭＡＳＫ  Ａ１３０２のシャッフルマスクごとのデータ要素のシャッフル処理を示す。このシャッフル処理のＲＥＳＵＬＴＡＮＴ  Ａ１３０６は、マスクパターン１３０２ごとに「０」とＦ１のパターンから構成される。
【０１０７】
図１３Ｂは、第２ソースデータオペランドＤＡＴＡ  Ｂ１３１０と共に、第２マスクＭＡＳＫ  Ｂ１３０８に関する第２のｐａｃｋｅｄデータシャッフル処理を示す。ＭＡＳＫ  Ｂ１３０８は、「０ｘ０Ｃ」と「０ｘ８０」の繰り返しのパターンを有する。「０ｘ８０」の値は、当該シャッフルマスクの関連するデータ位置に「０」を受け取らせる。「０ｘＣ０」の値は、当該シャッフルマスクに対応する結果のデータ要素位置をＤＡＴＡ  Ｂ１３１０のデータ要素０ｘＣからのデータＭ２により配置させる。ＭＡＳＫ  Ｂ１３０８のシャッフルパターンは、データＭ２を１つおきの結果のデータ要素位置に配置する。図１３Ｂの矢印は、ＭＡＳＫ  Ｂ１３０８のシャッフルマスクの組ごとのデータ要素のシャッフル処理を示す。このシャッフル処理のＲＥＳＵＬＴＡＮＴ  Ｂ１３１２は、マスクパターン１３０８ごとのＭ２と「０」のパターンから構成される。
【０１０８】
図１３Ｃは、ＩＮＴＥＲＬＥＡＶＥＤ  ＲＥＳＵＬＴＡＮＴ１３１４を実現するため、シャッフルされたデータＲＥＳＵＬＴＡＮＴ  Ａ１３０６とＲＥＳＵＬＴＡＮＴ  Ｂ１３１２のマージ処理を示す。マージ処理は、ｐａｃｋｅｄ論理ＯＲ処理により実現される。ＲＥＳＵＬＴＡＮＴ  Ａ１３０６とＲＥＳＵＬＴＡＮＴ  Ｂ１３１２の「０」の値のパターンは、Ｍ２とＦ１のデータ値１３１４のインタリーブを可能にする。例えば、最左データ要素位置では、「０」とＭ２の論理ＯＲは、結果１３１４の最左データ要素位置にＭ２をもたらす。同様に最右データ要素位置では、Ｆ１と「０」の論理ＯＲにより、結果１３１４の最右データ要素位置がＦ１になる。従って、複数のレジスタまたは記憶位置からのデータが、所望のパターンに再構成することが可能である。
【０１０９】
図１４は、複数のレジスタの間でデータを再構成する方法の一実施例を示すフローチャートである。ブロック１４０において、データは第１レジスタまたは記憶位置からロードされる。ブロック１４０４において、第１のシャッフルマスクの組に基づき、第１レジスタデータがシャッフルされる。ブロック１４０６において、第２レジスタまたは記憶位置からデータがロードされる。ブロック１４０８において、この第２レジスタデータは、第２のシャッフルマスクの組に従ってシャッフルされる。ブロック１４１０において、第１及び第２のレジスタシャッフルからのシャッフルされたデータは、第１及び第２レジスタからのデータを有するインタリーブされたデータブロックに到着するよう論理ＯＲによりブロック１４１０においてマージされる。
【０１１０】
図１５Ａ〜Ｋは、インタリーブされたデータを生成するため複数のレジスタの間でデータをシャッフルするアルゴリズムを示す。これは、平面カラーデータをインタリーブするアプリケーションの一例である。しばしば画像データは、個別のカラー平面において処理され、その後、これらの平面が表示のため以降でインタリーブされる。以下に説明されるアルゴリズムは、ビットマップ等の画像フォーマットにより利用されるような赤平面、緑平面及び青平面のインタリーブ処理を示す。多数の色空間及びインタリーブパターンが可能である。また、このアプローチは、他の色空間及びフォーマットに容易に拡張可能である、本例による実現形態は、しばしば赤（Ｒ）平面、緑（Ｇ）平面及び青（Ｂ）平面データがＲＧＢフォーマットにインタリーブされる画像処理データフォーマット処理を利用する。本例は、本発明によるゼロクリア機能がメモリアクセスを大きく減少させる方法を示す。
【０１１１】
これらのソースからのデータは、インタリーブ形式に合成される。より詳細には、当該データは画素カラーデータに関する。例えば、各画素のカラーデータは、赤（Ｒ）、緑（Ｇ）及び青（Ｂ）ソースからの情報を含むことが可能である。色情報を合成することによって、赤／緑／青（ＲＧＢ）データは、当該画素の所望の色を提供するよう評価可能である。ここで、赤データはオペランドＤＡＴＡ  Ａ１５１２に保持され、緑データはデータオペランドＤＡＴＡ  Ｂ１５１４に保持され、青データはＤＡＴＡ  Ｃ１５１６に保持される。この構成は、各色のデータがストリーミングデータと同様に個別に収集または一緒に格納されるグラフィックまたはメモリシステムに存在可能である。所望の画像を再生成または表示するのにこの情報を利用するため、画素データは、当該画素のすべてのデータがグループ化されるＲＧＢパターンに構成される必要がある。
【０１１２】
本実施例では、所定のパターンを有する一組のマスクが、ＲＧＢデータをインタリーブルするのに利用される。図１５Ａは、第１パターンを有するＭＡＳＫ  Ａ１５０２、第２パターンを有するＭＡＳＫ  Ｂ１５０４、及び第３パターンを有するＭＡＳＫ  Ｃ１５０６をマスク群として示す。各レジスタからのデータは、他の２つのレジスタからデータとインタリーブされ得るように、３バイト離れて配置される。１６進数「０ｘ８０」を有する制御バイトは、対応するバイトがｐａｃｋｅｄバイトシャッフル命令によりゼロクリアされるように、最上位ビットセットを有する。これらのマスクのそれぞれにおいて、３つおきにシャッフルマスクがシャッフル処理用のデータ要素を選択することが可能にされ、２つの介在するシャッフルマスクは０ｘ８０の値を有する。「０ｘ０８」の値は、これら対応するデータ要素位置のマスクのゼロ設定フィールドが設定されていることを示す。従って、当該マスクに係るデータ要素位置に「０」が配置される。本例では、マスクパターンは、インタリーブ処理を実現するため、各色に対してデータ要素を基本的に分離する。例えば、ＭＡＳＫ  Ａ１５０２がシャッフル処理においてデータオペランドに適用されるとき、ＭＡＳＫ  Ａ１５０２は、各データ要素間の２つのデータ要素スペースにより６つのデータ要素（０ｘ０、０ｘ１、０ｘ２、０ｘ３、０ｘ４、０ｘ５）を個別にシャッフルさせる。同様に、ＭＡＳＫ  Ｂ１５０４は、０ｘ０、０ｘ１、０ｘ２、０ｘ３、０ｘ４において個別にシャッフルする。ＭＡＳＫ  Ｃ１５０６は、０ｘ０、０ｘ１、０ｘ２、０ｘ３、０ｘ４においてデータ要素を個別にシャッフルする。
【０１１３】
ここで、本実現形態では、重複する各データ要素位置に対するシャッフルマスクは、２つのゼロ設定フィールドとデータ要素を指定する１つのシャッフルマスクを有する。例えば、３つのマスク１５０２、１５０４及び１０５６の最右データ要素位置を参照するに、シャッフルマスク値は、ＭＡＳＫ  Ａ１５０２、ＭＡＳＫ  Ｂ１５０４及びＭＡＳＫ  Ｃ１５０６に対して０ｘ００、０ｘ８０及び０ｘ８０となる。従って、ＭＡＳＫ  Ａ１５０２に対するシャッフルマスク０ｘ００のみが、当該位置に対するデータを指定する。本実施例のマスクは、シャッフルされたデータがインタリーブされたＲＧＢデータブロックを形成するのに容易にマージ可能となるようパターン処理される。
【０１１４】
図１５Ｂは、ＤＡＴＡ  Ａ１５１２、ＤＡＴＡ  Ｂ１５１４及びＤＡＴＡ  Ｃ１５１６のインタリーブされるデータブロックを示す。本実施例では、各データセットは、１６個の画素位置に対する色情報を有するデータエントリを有する。ここで、データ要素における各色レターを伴うサブスクリプトは、当該画素番号を表す。例えば、Ｒ０は画素０に対する赤色データであり、Ｇ１５は画素１５に対する緑色データである。図示される各データ要素における１６進数は、当該データ要素位置の番号である。色データ（ＤＡＴＡ  Ａ１５１２、ＤＡＴＡ  Ｂ１５１４、ＤＡＴＡ  Ｃ１５１６）は、データがシャッフル処理により上書きされず、他のロード処理なく再利用できないように、他のレジスタにコピーされてもよい。本実施例では、３つのマスク１５０２、１５０４及び１５０６を有する３つのパスが、画素データインタリーブ処理を完了させるのに必要とされる。他の実現形態及び他のデータ量では、パス及びシャッフル処理の回数は、必要に応じて可変とされる。
【０１１５】
図１５Ｃは、第１シャッフルパターンＭＡＳＫ  Ａ１５０２による赤色画素データＤＡＴＡ  Ａ１５１２に対するｐａｃｋｅｄシャッフル処理の結果のデータブロックＭＡＳＫＥＤ  ＤＡＴＡ  Ａ１５２２を示す。ＭＡＳＫ  Ａ１５０２に応答して、赤色画素データが３つおきのデータ要素位置に配置される。同様に、図１５Ｄは、第２シャッフルパターンＭＡＳＫ  Ｂ１５０４による緑色画素データＤＡＴＡ  Ｂ１５１４に対するｐａｃｋｅｄシャッフル処理に対する結果のデータブロックＭＡＳＫＥＤ  ＤＡＴＡ  Ｂ１５２４を示す。図１５Ｅは、第３シャッフルパターンＭＡＳＫ  Ｃ１５０６による青色画素データＤＡＴＡ  Ｃ１５１６に対するｐａｃｋｅｄシャッフル処理に対する結果のデータブロックＭＡＳＫＥＤ  ＤＡＴＡ  Ｃ１５２６を示す。本実施例のマスクパターンに対して、これらのシャッフル処理からの結果のデータブロックは、データ要素の１つがデータを有し、２つが「０」を有するように交互にされるデータ要素を提供する。例えば、これらの結果１５２２、１５２４及び１５２６の最左データ要素位置は、それぞれＲ５、「０」及び「０」を含む。次のデータ要素位置において、ＲＧＢカラーの他の画素データが与えられる。従って、マージされるとき、ＲＧＢタイプのグループ化が実現される。
【０１１６】
本実施例では、赤色データと緑色データの上記シャッフルされたデータが、ｐａｃｋｅｄ論理ＯＲ処理によりまずマージされる。図１５Ｆは、ＭＡＳＫＥＤ  ＤＡＴＡ  Ａ１５２２とＭＡＳＫＥＤ  ＤＡＴＡ  Ｂ１５２４のｐａｃｋｅｄ論理ＯＲ処理に対する結果のデータＩＮＴＥＲＬＥＡＶＥＤ  Ａ＆Ｂ  ＤＡＴＡ１５３０を示す。ここで、シャッフルされた青色データは、他のｐａｃｋｅｄ論理ＯＲ処理によりインタリーブされた赤色及び緑色データとマージされる。図１５Ｇは、ＭＡＳＫＥＤ  ＤＡＴＡ  Ｃ１５２６とＭＡＳＫＥＤ  ＤＡＴＡ  Ａ＆Ｂ１５３０のｐａｃｋｅｄ論理ＯＲ処理からの新たな結果であるＩＮＴＥＲＬＥＡＶＥＤ  Ａ，Ｂ＆Ｃ  ＤＡＴＡ１５３２を示す。従って、図１５Ｇの結果のデータブロックは、最初の５つの画素に対するインタリーブされたＲＧＢデータと第６画素の一部を含む。本実施例のアルゴリズムの以降の繰り返しは、残りの１６個の画素に対するインタリーブされたＲＧＢデータを生成する。
【０１１７】
この時点で、ＤＡＴＡ  Ａ１５１２、ＤＡＴＡ  Ｂ１５１４及びＤＡＴＡ  Ｃ１５１６のデータの１／３がインタリーブされたことになる。２つのアプローチが、これらのレジスタの残りのデータを処理するのに利用可能である。他の一組のシャッフル制御バイトは、インタリーブされるデータを配置するよう利用可能であり、ＤＡＴＡ  Ａ１５１２、ＤＡＴＡ  Ｂ１５１４及びＤＡＴＡ  Ｃ１５１６は、シャッフルマスク１５０２、１５０４及び１５０６が再び利用可能となるように、右にシフトすることが可能である。ここに示される実現形態では、追加のシャッフル制御バイトをロードするのに必要とされるメモリアクセスを行うことを回避するため、データはシフトされる。これらのシフト処理がない場合、９組の制御バイトが３つ（ＭＡＳＫ  Ａ１５０２、ＭＡＳＫ  Ｂ１５０４、ＭＡＳＫ  Ｃ１５０６）の代わりに本実施例において必要とされるであろう。本実施例はまた、限られた個数のレジスタが利用可能であり、メモリアクセスが長いアーキテクチャにおいて適用可能である。
【０１１８】
多数のレジスタが利用可能な他の実施例では、シフト処理が不要となるように、レジスタの多数またはすべてのマスク群を保持することが、より効率的となり得る。さらに、多数のレジスタと実行ユニットを有するアーキテクチャでは、シャッフル処理のすべてがシフト処理の実行を待機する必要なく、パラレルに実行可能である。例えば、９つのシャッフルユニットと９つのマスク群を有するアウトオブオーダプロセッサは、９つのシャッフル処理をパラレルに実行することが可能である。上記実施例では、マスクが再適用される前にデータがシフトされる必要がある。
【０１１９】
ＤＡＴＡ  Ａ１５１２、ＤＡＴＡ  Ｂ１５１４及びＤＡＴＡ  Ｃ１５１６のもとの色データのデータ要素が、当該カラーに対してすでに処理されたデータ要素数に従ってシフトされる。本例では、６つの画素のデータが赤色に対して上記処理され、これにより、緑色のデータオペランドＤＡＴＡ  Ｂ１５１４と青色のデータオペランドＤＡＴＡ  Ｃ１５１６のデータ要素が、それぞれ５つのデータ要素位置だけ右にシフトされる。同様に、５つの画素のデータは緑色と青色の両方に対して処理され、緑色のデータオペランドＤＡＴＡ  Ｂ１５１４と青色のデータオペランドＤＡＴＡ  Ｃ１５１６がそれぞれ５つのデータ要素位置だけ右にシフトされる。図１５Ｈにおいて、シフトされたソースデータは、赤色、緑色及び青色のそれぞれに対してＤＡＴＡ  Ａ’１５４６、ＤＡＴＡ  Ｂ’１５４２及びＤＡＴＡ  Ｃ’１５４４として示される。
【０１２０】
図１５Ａ〜Ｇに関して上述されたようなシャッフル及び論理ＯＲ処理が、当該シフトされたデータに対して繰り返される。３つのｐａｃｋｅｄシャッフル結果に対するｐａｃｋｅｄ論理ＯＲ処理と共に、ＭＡＳＫ  Ａ１５０２、ＭＡＳＫ  Ｂ１５０４及びＭＡＳＫ  Ｃ１５０６のそれぞれと共にＤＡＴＡ  Ｂ’１５４２、ＤＡＴＡ  Ｃ’１５４４及びＤＡＴＡ  Ａ’１５４６に対する以降のｐａｃｋｅｄシャッフル処理が、他の２つの一部及び他の４がそのインタリーブされたＲＧＢデータを提供する。この結果のデータＩＮＴＥＲＬＥＡＶＥＤ  Ａ’、Ｂ’及びＣ’  ＤＡＴＡ１５４８が、図１５Ｉに示される。ここで、最右の２つのデータ要素が、第１のインタリーブされたデータセット１５３２により配置された赤色データＲ５を既に有する６番目の画素に関するものであるということに留意されたい。未処理の画素色データが、第２パスの処理結果ごとの適切な場所数だけ再びシフトされる。ここで、追加の５つの画素に対するデータは赤色と青色に対して処理されたものであるため、赤色データオペランドＤＡＴＡ  Ａ’１５４６と青色データオペランドＤＡＴＡ  Ｃ’１５４４のデータ要素は、５つのデータ要素位置だけ右にシフトされる。６つの画素のデータが緑色に対して処理されたため、緑色のデータオペランドＤＡＴＡ  Ｂ’１５４２に対するデータ要素は６つの位置だけ右にシフトされる。図１５Ｊにおいて、この第３のパスに対するシフトされたデータが示される。上記のｐａｃｋｅｄシャッフル及び論理ＯＲ処理の繰り返しが、ＤＡＴＡ  Ｃ’’１５５２、ＤＡＴＡ  Ａ’’１５５４及びＤＡＴＡ  Ｂ’’１５５６に適用される。図１５Ｋにおいて、１６個の画素の最後に対する結果のインタリーブされたＲＧＢデータは、ＩＮＴＥＲＶＥＡＶＥＤ  Ａ’’，Ｂ’’  ＤＡＴＡ１５５８として示される。Ｂ１０を有する最右データ要素は、第２のインタリーブされたデータセット１５４８により配置されたそれの緑色データＧ１０と赤色データＲ１０を既に有する１１番目の画素に関する。従って、一組のマスクパターン及びｐａｃｋｅｄ論理ＯＲ処理によるｐａｃｋｅｄシャッフル系列により、複数のソース１５１２、１５１４及び１５１６からのデータは、これらの結果１５３２、１５４８及び１５５８と同様の処理またはさらなる利用のため、所望の手法によりマージ及び再構成可能である。
【０１２１】
図１６は、インタリーブされたデータを生成するため、複数のレジスタ間のデータをシャッフルする方法の一実施例を示すフローチャートである。例えば、本方法の実施例は、図１５Ａ〜Ｋに説明されるように、インタリーブされた画素データの生成に適用可能である。本実施例は３つのデータソースまたはデータ平面に関して説明されるが、２以上のデータ平面に関して他の実施例は処理可能である。これらのデータ平面は、１以上の画像フレームに対する色データを有することが可能である。ブロック１６０２において、第１、第２及び第３平面のフレームデータがロードされる。本例では、複数の画素のＲＧＢ色データが、異なる３つの平面からの個々の色として利用可能である。第１平面のデータは赤色に対するものであり、第２平面のデータは緑色に対するものであり、第３平面のデータは青色に対するものである。ブロック１６０４において、シャッフル制御パターンを有する一組のマスク（Ｍ１、Ｍ２及びＭ３）がロードされる。これらのシャッフル制御パターンは、色をインタリーブするため、データの配置及びシャッフルパターンを決定する。実現形態に応じて、任意数のシャッフルパターンが、所望のデータは位置を生成するため利用可能である。
【０１２２】
ブロック１６０６において、各データ平面に対して、適切な制御パターンが選択される。本実現形態では、色データが所望される順序及び現在実行中の繰り返しに基づき、シャッフルパターンが選択される。第１データセットである赤色からのフレームデータが、シャッフルされた赤色データを取得するため、ブロック１６０８において第１のシャッフル制御パターンによりシャッフルされる。第２のデータセットである緑色が、シャッフルされた緑色のデータを取得するため、第２のシャッフル制御パターンによりブロック１６１０においてシャッフルされる。ブロック１６１２において、第３のデータセットである青色が、シャッフルされた青色データを実現するため、第３シャッフル制御パターンによりシャッフルされる。これら３つのマスクと各自のシャッフル制御パターンは本実施例では互いに異なるが、各繰り返し中に複数のデータセットに対して、マスク及びそれのシャッフルパターンが利用可能である。さらに、いくつかのマスクは、他のものより頻繁に利用されてもよい。
【０１２３】
ブロック１６１４において、３つのデータセットに対するシャッフルされたデータブロック１６０８、１６１０及び１６１２が、当該パスのインタリーブされた結果を形成するためマージされる。例えば、第１パスの結果は、図１５Ｇのインタリーブされたデータ１５３２と同様のものとすることが可能であり、各画素のＲＧＢデータは一組としてグループ化される。ブロック１６１６において、シャッフリングに対してレジスタにロードされるフレームデータがさらにあるかチェックされる。ない場合には、ブロック１６２０において、インタリーブされる３つのデータ平面からのさらなるデータがないかチェックされる。ない場合には、本方法は終了する。ブロック１６２０において利用可能なさらなる平面データがあれば、当該プロセスはブロック１６０２に戻り、シャッフルリングのためのさらなるフレームデータがロードされる。
【０１２４】
ブロック１６１６における判定が真であれば、各色データ平面のフレームデータは、最後のパス中に当該色に対してデータセットに適用されたマスクパターンに対応する所定のカウントだけシフトされる。例えば、図１５Ｇからの第１パスの例を維持するのに、第１、第２及び第３平面の赤色、緑色および青色データが、それぞれ６、５及び５の位置だけシフトされる。実現形態に応じて、各色データに対して選択されたシャッフルパターンは、各パス異なるものであるか、あるいは同一のものが再利用されるようにしてもよい。一実施例の第２パス中、第１の繰り返しからの３つのマスクは、第１平面データが第３マスクとペアにされ、第２平面データが第１マスクとペアにされ、第３平面データが第３マスクとペアにされるように回転される。このマスクの回転は、図１５Ｇと１５Ｉに示されるように、１つのパスから次のパスへのインタリーブされたＲＧＢデータの適切な連続性を可能にする。シャッフル及びマージ処理は、第１パスと同様に継続される。３以上の繰り返しが所望される場合、本実施例のシャッフルマスクパターンは、さらなるインタリーブされたＲＧＢデータを生成するため、異なるデータ平面において回転され続ける。
【０１２５】
本発明によるｐａｃｋｅｄシャッフル命令を用いたアルゴリズムの実施例は、現在のハードウェアリソースによりプロセッサ及びシステムパフォーマンスを向上させることが可能である。しかしながら、技術が向上し続けるに従い、本発明の実施例はより多くかつより高速のハードウェアリソースと組み合わされるとき、より効率的なロジック回路がパフォーマンス向上に対するさらに大きな影響を与えることが可能である。従って、バイト粒度とｚｅｒｏクリアオプションを有するｐａｃｋｅｄシャッフル命令の効率的な実施例は、プロセッサの生成に対して異なるより大きな影響を有することが可能である。現在のプロセッサアーキテクチャにさらなるリソースを単に追加することだけでは、より良いパフォーマンス向上を保証することはできない。パラレルテーブル検索及びｐａｃｋｅｄシャッフル命令（ＰＳＨＵＦＢ）の一実施例と同様に、アプリケーションの効率性を維持することによって、より高いパフォーマンス向上が可能となり得る。
【０１２６】
上記例は説明を簡単化するため、１２８ビット長ハードウェア／レジスタ／オペランドに関して一般に説明されたが、ｐａｃｋｅｄシャッフル処理、パラレルテーブル検索及び複数レジスタデータ再構成を実行するため、他の実施例では６４または１２８ビット長ハードウェア／レジスタ／オペランドが利用されてもよい。さらに、本発明の実施例はＭＭＸ／ＳＳＥ／ＳＳＥ２技術などの特定のハードウェアまたは技術タイプに限定されるものではなく、他のＳＩＭＤ実現形態及び他のグラフィカルデータ操作技術により利用可能である。
【０１２７】
本明細書では、本発明はそれの特定の実施例を参照して説明された。しかしながら、添付された請求項に与えられるような本発明のより広い趣旨及び範囲から逸脱することなく、各種改良及び変更が可能であるということは明らかであろう。従って、明細書及び図面は、限定的なものではなく例示的なものとみなされるべきである。
【符号の説明】
【０１２８】
１００  システム
１０２  プロセッサ
１０４  キャッシュメモリ
１０６  レジスタファイル
１０８  実行ユニット
【図１Ａ】
2010282649.tif 000006
【図１Ｂ】
2010282649.tif 000007
【図１Ｃ】
2010282649.tif 000008
【図２】
2010282649.tif 000009
【図３】
2010282649.tif 000010
【図４Ａ】
2010282649.tif 000011
【図４Ｂ】
2010282649.tif 000012
【図４Ｃ】
2010282649.tif 000013
【図４Ｄ】
2010282649.tif 000014
【図４Ｅ】
2010282649.tif 000015
【図５】
2010282649.tif 000016
【図６】
2010282649.tif 000017
【図７】
2010282649.tif 000018
【図８】
2010282649.tif 000019
【図９】
2010282649.tif 000020
【図１０Ａ】
2010282649.tif 000021
【図１０Ｂ】
2010282649.tif 000022
【図１０Ｃ】
2010282649.tif 000023
【図１０Ｄ】
2010282649.tif 000024
【図１０Ｅ】
2010282649.tif 000025
【図１０Ｆ】
2010282649.tif 000026
【図１０Ｇ】
2010282649.tif 000027
【図１０Ｈ】
2010282649.tif 000028
【図１１】
2010282649.tif 000029
【図１２】
2010282649.tif 000030
【図１３Ａ】
2010282649.tif 000031
【図１３Ｂ】
2010282649.tif 000032
【図１３Ｃ】
2010282649.tif 000033
【図１４】
2010282649.tif 000034
【図１５Ａ】
2010282649.tif 000035
【図１５Ｂ】
2010282649.tif 000036
【図１５Ｃ】
2010282649.tif 000037
【図１５Ｄ】
2010282649.tif 000038
【図１５Ｅ】
2010282649.tif 000039
【図１５Ｆ】
2010282649.tif 000040
【図１５Ｇ】
2010282649.tif 000041
【図１５Ｈ】
2010282649.tif 000042
【図１５Ｉ】
2010282649.tif 000043
【図１５Ｊ】
2010282649.tif 000044
【図１５Ｋ】
2010282649.tif 000045
【図１６】
2010282649.tif 000046
【手続補正書】
【提出日】平成22年9月10日(2010.9.10)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
データをシャッフルするためのプロセッサユニットであって、
データを格納するための複数のレジスタを有するレジスタファイルと、
前記レジスタファイルから、ソースデータ要素とＬ個のシャッフルマスクの形式のＬ個の制御要素とを受信するよう動作する実行ユニットと、
を有し、
前記Ｌ個の制御要素のそれぞれは、結果におけるデータ要素位置に関連付けされ、複数の部分に分割され、
第１部分はゼロクリア指示を示すフラッシュフィールドであり、第２部分は前記ソースデータ要素の１つの位置を示す位置選択フィールドであり、第３部分は特別な利用のための予約フィールドであり、
前記実行ユニットはまた、
前記ゼロクリア指示が各制御要素に対して設定されているか判断し、前記ゼロクリア指示が各制御要素に対して設定されている場合、関連する結果のデータ要素位置にゼロを配置し、前記ゼロクリア指示が各制御要素に対して設定されていない場合、前記各制御要素により指定される前記ソースデータ要素のデータ要素から前記関連する結果のデータ要素位置にデータをシャッフルするよう動作するプロセッサユニット。
【請求項２】
当該プロセッサユニットは、８ビットバイトデータのシャッフルを含むＳＩＭＤ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ  Ｄａｔａ）処理を実行するＳＩＭＤプロセッサユニットからなる、請求項１記載のプロセッサユニット。
【請求項３】
前記レジスタファイルは、前記ＳＩＭＤプロセッサユニットに接続され、各レジスタが１２８ビットのデータを格納する複数のレジスタを有する、請求項２記載のプロセッサユニット。
【請求項４】
前記予約フィールドの特殊な利用は、複数のソースデータレジスタの何れかから、前記関連する結果のデータ要素位置にシャッフルするため、各制御要素の位置選択フィールドにより指定されるデータ要素を選択するため示すものである、請求項３記載のプロセッサユニット。
【請求項５】
前記ＳＩＭＤプロセッサユニットは、音声通信を表すデジタル音声サンプルを生成するため、前記ＳＩＭＤプロセッサユニットの命令により処理されるデータをデジタルストリームにより受信する、請求項２記載のプロセッサユニット。
【請求項６】
前記ＳＩＭＤプロセッサユニットは、デジタル動きビデオフレームを生成するため、前記ＳＩＭＤプロセッサユニットの命令により処理されるデータをデジタルストリームにより受信する、請求項２記載のプロセッサユニット。
【請求項７】
請求項２記載のプロセッサユニットを有するデータ処理システムであって、
前記ＳＩＭＤプロセッサユニットに接続され、汎用タイプのデータ処理演算を制御するメインプロセッサと、
前記メインプロセッサの制御の下で前記メインプロセッサとやりとりするため動作接続されるキャッシュメモリと、
入出力（Ｉ／Ｏ）システムと、
をさらに有するデータ処理システム。
【請求項８】
前記メインプロセッサと前記ＳＩＭＤプロセッサユニットとは、単一の処理コアに一体化される、請求項７記載のデータ処理システム。
【請求項９】
汎用タイプのデータ処理演算を制御するメインプロセッサと、
前記メインプロセッサと接続されるＳＩＭＤ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ  Ｄａｔａ）プロセッサユニットと、
を有するデータ処理システムであって、
前記ＳＩＭＤプロセッサユニットは、
各レジスタが１２８ビットのデータを格納する複数のレジスタを有するレジスタファイルと、
前記レジスタファイルから、８ビットバイトデータソースデータ要素とＬ個のシャッフルマスクの形式のＬ個の制御要素とを受信するよう動作する実行ユニットと、
を有し、
前記Ｌ個の制御要素のそれぞれは、結果における８ビットバイトデータ要素位置に関連付けされ、複数の部分に分割され、
第１部分はゼロクリア指示を示すフラッシュフィールドであり、第２部分は前記８ビットバイトソースデータ要素の１つの位置を示す位置選択フィールドであり、第３部分は特別な利用のための予約フィールドであり、
前記実行ユニットはまた、
前記ゼロクリア指示が各制御要素に対して設定されているか判断し、前記ゼロクリア指示が各制御要素に対して設定されている場合、関連する結果の８ビットバイトデータ要素位置にゼロを配置し、前記ゼロクリア指示が各制御要素に対して設定されていない場合、前記各制御要素により指定される前記８ビットバイトソースデータ要素のデータ要素から前記関連する結果の８ビットバイトデータ要素位置にデータをシャッフルするよう動作するデータ処理システム。
【請求項１０】
前記予約フィールドの特殊な利用は、複数のソースデータレジスタの何れかから、前記関連する結果のデータ要素位置にシャッフルするため、各制御要素の位置選択フィールドにより指定されるデータ要素を選択するため示すものである、請求項９記載のデータ処理システム。
【請求項１１】
前記ＳＩＭＤプロセッサユニットは、音声通信を表すデジタル音声サンプルを生成するため、前記ＳＩＭＤプロセッサユニットの命令により処理されるデータをデジタルストリームにより受信する、請求項９記載のデータ処理システム。
【請求項１２】
前記ＳＩＭＤプロセッサユニットは、デジタル動きビデオフレームを生成するため、前記ＳＩＭＤプロセッサユニットの命令により処理されるデータをデジタルストリームにより受信する、請求項９記載のデータ処理システム。
【請求項１３】
前記メインプロセッサの制御の下で前記メインプロセッサとやりとりするため動作接続されるキャッシュメモリと、
入出力（Ｉ／Ｏ）システムと、
をさらに有する、請求項９記載のデータ処理システム。
【請求項１４】
前記メインプロセッサと前記ＳＩＭＤプロセッサユニットとは、単一の処理コアに一体化される、請求項９記載のデータ処理システム。
【請求項１５】
制御ロジックが、各シャッフルマスクが一意的な結果のデータ要素位置に関連付けされるＬ個のシャッフルマスクを有する第１オペランドを受信し、結果の各データ要素位置について選択信号とゼロクリア信号とを提供するステップと、
前記制御ロジックに接続されるＬ個のマルチプレクサの各マルチプレクサであって、一意的な結果のデータ要素位置に関連付けされる各マルチプレクサを介して、それの関連付けされたゼロクリア信号がアクティブであるときにはゼロを出力し、それの関連付けされたゼロクリア信号が非アクティブであるときには、それの関連付けされた選択信号に基づきＬ個のデータ要素から選択されたデータを出力するステップと、
を有するデータシャッフル方法であって、
前記Ｌ個のシャッフルマスクのそれぞれは、設定されているとき前記マスクにより指定される前記結果のデータ要素位置がゼロにされるべきであることを示すゼロクリアフラグである第１部分と、前記Ｌ個のデータ要素の１つの位置を示す位置選択フィールドである第２部分と、予約又はソース選択フィールドである第３部分との３つの部分に分割されるデータシャッフル方法。
【請求項１６】
請求項１５記載の方法であって、
前記Ｌ個の制御要素のそれぞれは、前記第２オペランドに配置されることを特徴とする方法。
【請求項１７】
請求項１６記載の方法であって、
前記Ｌ個のデータ要素のそれぞれは、前記第１オペランドに配置されることを特徴とする方法。
【請求項１８】
請求項１７記載の方法であって、
前記結果のデータ要素位置のそれぞれは、それの関連付けされたマルチプレクサからの出力を保持することを特徴とする方法。
【請求項１９】
請求項１６記載の方法であって、さらに、
前記第２オペランドの制御要素に応答して、前記第１オペランドからシャッフルされたデータを有する結果のデータブロックを出力するステップを有することを特徴とする方法。
【請求項２０】
請求項１５記載の方法であって、
前記データ要素のそれぞれは、１バイトのデータから構成されることを特徴とする方法。
【請求項２１】
請求項２０記載の方法であって、
前記制御要素のそれぞれは、１バイト長であることを特徴とする方法。
【請求項２２】
請求項２１記載の方法であって、
Ｌは８であり、前記第１オペランド、前記第２オペランド及び前記結果は、それぞれ６４ビット長ｐａｃｋｅｄデータから構成されることを特徴とする方法。
【請求項２３】
請求項２１記載の方法であって、
Ｌは１６であり、前記第１オペランド、前記第２オペランド及び前記結果は、それぞれ１２８ビット長ｐａｃｋｅｄデータから構成されることを特徴とする方法。
【請求項２４】
前記第２オペランドの受信及び前記データを関連付けされた結果のデータ要素に出力することは、３ビットにより前記第１オペランドを格納する第１レジスタを指定し、３ビットにより前記第２オペランドを格納する第２レジスタを指定する１つのｐａｃｋｅｄシャッフル命令を受け取ることに応答して実行され、前記第１オペランドと前記第２オペランドとは同じサイズを有し、前記Ｌ個のデータ要素とＬ個の制御要素とのキャッシュは同じサイズを有しており、
前記Ｌ個の制御要素のそれぞれは、３つの部分に分割され、第１部分は各シャッフルマスクの最上位ビットを占有するゼロクリアフラグであり、第２部分は少なくともｌｏｇ２Ｌのビット長であって、前記Ｌ個のデータ要素の１つの位置を示す位置選択フィールドである、請求項１５記載の方法。
【請求項２５】
複数のソースデータ要素を格納する第１記憶位置と、
各制御要素が結果のデータ要素位置に対応し、ゼロクリアビットと選択フィールドとを有するＬ個のシャッフルマスクの形式による複数の制御要素を格納する第２記憶位置と、
前記第２記憶位置に接続され、前記制御要素の値に応答して、複数の選択信号と複数のゼロクリア信号とを生成する制御ロジックと、
前記第１記憶位置に接続され、前記複数の選択信号を受信する複数の第１マルチプレクサであって、各マルチプレクサが特定の結果のデータ要素位置に対応する選択信号に応答して、前記特定の結果のデータ要素位置のデータ要素をシャッフルする複数の第１マルチプレクサと、
前記複数の第１マルチプレクサに接続され、前記複数のゼロクリア信号を受信する複数の第２マルチプレクサであって、各マルチプレクサが特定の結果のデータ要素位置に関連付けされ、それのゼロクリア信号がアクティブである場合にはゼロを出力し、または、前記特定の結果のデータ要素位置に対してシャッフルされたデータ要素を出力する複数の第２マルチプレクサと、
から構成される装置であって、
設定されているとき、前記ゼロクリア信号は、前記マスクにより指定される結果のデータ要素位置がゼロにされるべきであることを示すことを特徴とする装置。
【請求項２６】
請求項２５記載の装置であって、
前記複数のソースデータ要素は、第１ｐａｃｋｅｄデータオペランドであることを特徴とする装置。
【請求項２７】
請求項２６記載の装置であって、
前記複数の制御要素は、第２ｐａｃｋｅｄデータオペランドであることを特徴とする装置。
【請求項２８】
請求項２６記載の装置であって、
前記第１及び第２記憶位置は、ＳＩＭＤ（Ｓｉｎｇｌｅ Ｉｎｓｔｒｕｃｔｉｏｎ Ｍｕｌｔｉｐｌｅ Ｄａｔａ）レジスタであることを特徴とする装置。
【請求項２９】
請求項２７記載の装置であって、
前記第１ｐａｃｋｅｄオペランドは６４ビット長であり、前記ソースデータ要素のそれぞれは１バイト長であり、
前記第２ｐａｃｋｅｄオペランドは６４ビット長であり、前記制御要素のそれぞれは１バイト長である、
ことを特徴とする装置。
【請求項３０】
請求項２７記載の装置であって、
前記第１ｐａｃｋｅｄオペランドは１２８ビット長であり、前記ソースデータ要素のそれぞれは１バイト長であり、
前記第２ｐａｃｋｅｄオペランドは１２８ビット長であり、前記制御要素のそれぞれは１バイト長である、
ことを特徴とする装置。
【請求項３１】
各シャッフルマスクが一意的な結果のデータ要素位置に関連付けされるＬ個のシャッフルマスクを受信し、各結果のデータ要素位置に対して、選択信号とゼロ設定信号とを提供する制御ロジックと、
前記制御ロジックに接続され、各マルチプレクサもまた一意的な結果のデータ要素位置に関連付けされ、それの関連付けされたゼロクリア信号がアクティブである場合にはゼロを、それの関連付けされたゼロクリア信号が非アクティブである場合には、それの関連付けされた選択信号に基づきＬ個のデータ要素から選択されたデータを出力するＬ個のマルチプレクサと、
から構成される装置であって、
設定されているとき、前記ゼロクリア信号は、前記マスクにより指定される結果のデータ要素位置がゼロにされるべきであることを示し、
前記Ｌ個のシャッフルマスクのそれぞれは、ゼロクリアビットである第１部分と、データ要素の位置を示す位置選択フィールドである第２部分と、予約フィールドである第３部分との３つの部分に分割されることを特徴とする装置。
【請求項３２】
請求項３１記載の装置であって、さらに、
各データ要素位置がそれの関連付けされたマルチプレクサからの出力を保持するＬ個の一意的なデータ要素位置を有するレジスタを有することを特徴とする装置。
【請求項３３】
請求項３２記載の装置であって、
Ｌは１６であることを特徴とする装置。
【請求項３４】
データ及び命令を格納するメモリと、
前記メモリから、プロセッサにデータシャッフル処理を実行させる命令を受信するバスと、
前記メモリに前記バスを介して接続され、前記データシャッフル処理を実行可能なプロセッサと、
から構成されるシステムであって、
前記プロセッサは、
Ｌ個のデータ要素を有する第１オペランドと、各シャッフルマスクが一意的な結果のデータ要素位置に関連付けされるＬ個のシャッフルマスクの形式によるＬ個の制御要素を有する第２オペランドとを受信し、結果の各データ要素位置について選択信号とゼロクリア信号とを提供する制御ロジックと、
各マルチプレクサが一意的な結果のデータ要素位置に関連付けされ、それの関連付けされたゼロクリア信号がアクティブである場合にはゼロを出力し、それの関連付けされたゼロクリア信号が非アクティブである場合には、それの関連付けされた選択信号に基づきＬ個のデータ要素から選択されたデータを出力する、前記制御ロジックに接続されたＬ個のマルチプレクサと、
から構成され、
設定されているとき、前記ゼロクリア信号は、前記マスクにより指定される結果のデータ要素位置がゼロにされるべきであることを示し、
前記Ｌ個のシャッフルマスクのそれぞれは、ゼロクリアビットである第１部分と、前記Ｌ個のデータ要素の１つの位置を示す位置選択フィールドである第２部分と、予約フィールドである第３部分との３つの部分に分割されることを特徴とするシステム。
【請求項３５】
請求項３４記載のシステムであって、
各シャッフル制御要素は、前記ゼロクリアビットと前記位置選択フィールドとから構成され、
前記ゼロクリアビットは、該シャッフル制御要素に係るデータ要素位置がゼロの値により充填されるべきか示し、
前記位置選択フィールドは、データをシャッフルする第１オペランドデータ要素を示す、
ことを特徴とするシステム。
【請求項３６】
請求項３５記載のシステムであって、
前記Ｌ個のデータ要素のそれぞれは、ソース選択フィールドから構成されることを特徴とするシステム。
【請求項３７】
請求項３４記載のシステムであって、
前記命令は、ゼロクリア機能を有するｐａｃｋｅｄバイトシャッフルであることを特徴とするシステム。
【請求項３８】
請求項３４記載のシステムであって、
前記Ｌ個のデータ要素のそれぞれは１バイト長であり、
各シャッフルコマンド要素は１バイト長であり、
Ｌは８である、
ことを特徴とするシステム。
【請求項３９】
請求項３４記載のシステムであって、
前記第１オペランドは６４ビット長であり、
前記第２オペランドは６４ビット長である、
ことを特徴とするシステム。