(57)【特許請求の範囲】
【請求項１】
第１のソースデータ要素及び第２のソースデータ要素を含む第１の複数ビットオペランドと、前記第１のソースデータ要素に対応する第１の制御データ要素及び前記第２のソースデータ要素に対応する第２の制御データ要素を含む制御レジスタに対応する第２のオペランドとを有する命令形式である命令コードを受信する工程と、
前記第１の制御データ要素の第１の符号ビットが第１の論理値である場合に、第１のデスティネーションレジスタに前記第１のソースデータ要素を格納し、前記第１の制御データ要素の第１の符号ビットが第２の論理値である場合に、前記第１のデスティネーションレジスタに前記第１のソースデータ要素を格納しない第１のデスティネーションレジスタ制御工程と、
前記第２の制御データ要素の第２の符号ビットが第１の論理値である場合に、第２のデスティネーションレジスタに前記第２のソースデータ要素を格納し、前記第２の制御データ要素の第２の符号ビットが第２の論理値である場合に、前記第２のデスティネーションレジスタに前記第２のソースデータ要素を格納しない第２のデスティネーションレジスタ制御工程と、
前記制御レジスタにおける前記第１の制御データ要素及び前記第２の制御データ要素を順次ビットシフトするビットシフト工程と
を備え、
前記ビットシフトするごとに順次、前記第１の制御データ要素及び前記第２の制御データ要素の前記符号ビットを使用して前記第１のデスティネーションレジスタ制御工程及び前記第２のデスティネーションレジスタ制御工程を実行する方法。
【請求項２】
前記第１のデスティネーションレジスタ制御工程においては、前記第１の符号ビットがゼロである場合に、前記第１のデスティネーションレジスタを変更しないで、
前記第２のデスティネーションレジスタ制御工程においては、前記第２の符号ビットがゼロである場合に、前記第２のデスティネーションレジスタを変更しない請求項１に記載の方法。
【請求項３】
前記第１の符号ビットは、前記第１の複数ビットオペランドに関連付けられる前記第１の制御データ要素の最上位ビットである請求項２に記載の方法。
【請求項４】
前記第１の制御データ要素は、一の暗黙のレジスタに格納されている請求項２または３に記載の方法。
【請求項５】
前記第１の符号ビット及び前記第２の符号ビットは、前記第１のソースデータ要素及び前記第２のソースデータ要素の前記第１のデスティネーションレジスタ及び前記第２のデスティネーションレジスタへのデータの流れを制御する請求項２から４のいずれか一項に記載の方法。
【請求項６】
前記第１の符号ビットが非ゼロである場合に、前記第１の複数ビットオペランドからの第１のソースデータ要素を前記第１のデスティネーションレジスタに格納する工程をさらに含む請求項２から５のいずれか一項に記載の方法。
【請求項７】
前記第１の複数ビットオペランドは１２８ビットを含む請求項１から６のいずれか一項に記載の方法。
【請求項８】
前記第１のソースデータ要素及び前記第２のソースデータ要素は、それぞれ６４ビットであり、前記第１のデスティネーションレジスタ及び前記第２のデスティネーションレジスタは、それぞれ６４ビットである請求項７に記載の方法。
【請求項９】
前記第１のソースデータ要素及び前記第２のソースデータ要素は、パックドバイトとして処理される請求項１から８のいずれか一項に記載の方法。
【請求項１０】
前記第１のソースデータ要素及び前記第２のソースデータ要素は、パックドワードとして処理される請求項１から８のいずれか一項に記載の方法。
【請求項１１】
前記第１のソースデータ要素及び前記第２のソースデータ要素は、ダブルワードとして処理される請求項１から８のいずれか一項に記載の方法。
【請求項１２】
前記第１のソースデータ要素及び前記第２のソースデータ要素は、クワドワードとして処理される請求項１から８のいずれか一項に記載の方法。
【請求項１３】
コンピュータに、
第１のソースデータ要素及び第２のソースデータ要素を含む第１の複数ビットオペランドと、前記第１のソースデータ要素に対応する第１の制御データ要素及び前記第２のソースデータ要素に対応する第２の制御データ要素を含む制御レジスタに対応する第２のオペランドとを有する命令形式である命令コードを受信させ、
前記第１の制御データ要素の第１の符号ビットが第１の論理値である場合に、第１のデスティネーションレジスタに前記第１のソースデータ要素を格納し、前記第１の制御データ要素の第１の符号ビットが第２の論理値である場合に、前記第１のデスティネーションレジスタに前記第１のソースデータ要素を格納しないように第１のデスティネーションレジスタを制御させ、
前記第２の制御データ要素の第２の符号ビットが第１の論理値である場合に、第２のデスティネーションレジスタに前記第２のソースデータ要素を格納し、前記第２の制御データ要素の第２の符号ビットが第２の論理値である場合に、前記第２のデスティネーションレジスタに前記第２のソースデータ要素を格納しないように第２のデスティネーションレジスタを制御させ、
前記制御レジスタにおける前記第１の制御データ要素及び前記第２の制御データ要素を順次ビットシフトさせ、
前記ビットシフトするごとに順次、前記第１の制御データ要素及び前記第２の制御データ要素の前記符号ビットを使用して前記第１のデスティネーションレジスタ及び前記第２のデスティネーションレジスタを制御させるためのプログラム。
【請求項１４】
第１のソースデータ要素及び第２のソースデータ要素を含む第１の複数ビットオペランドと、前記第１のソースデータ要素に対応する第１の制御データ要素及び前記第２のソースデータ要素に対応する第２の制御データ要素を含む制御レジスタに対応する第２のオペランドとを有する命令形式である命令コードを受信する回路と、
前記第１の制御データ要素の第１の符号ビットが第１の論理値である場合に、第１のデスティネーションレジスタに前記第１のソースデータ要素を格納し、前記第１の制御データ要素の第１の符号ビットが第２の論理値である場合に、前記第１のデスティネーションレジスタに前記第１のソースデータ要素を格納しない第１のデスティネーションレジスタを制御する回路と、
前記第２の制御データ要素の第２の符号ビットが第１の論理値である場合に、第２のデスティネーションレジスタに前記第２のソースデータ要素を格納し、前記第２の制御データ要素の第２の符号ビットが第２の論理値である場合に、前記第２のデスティネーションレジスタに前記第２のソースデータ要素を格納しない第２のデスティネーションレジスタを制御する回路と、
前記制御レジスタにおける前記第１の制御データ要素及び前記第２の制御データ要素を順次ビットシフトするビットシフト回路と
を備え、
前記第１のデスティネーションレジスタを制御する回路及び前記第２のデスティネーションレジスタを制御する回路は、前記ビットシフト回路が前記ビットシフトをするごとに順次、前記第１の制御データ要素及び前記第２の制御データ要素の前記符号ビットを使用して第１のデスティネーションレジスタ及び前記第２のデスティネーションレジスタを制御する装置。
【請求項１５】
前記第１の符号ビットは、前記第１の複数ビットオペランドに関連付けられる前記第２のオペランドにおける最上位ビットである請求項１４に記載の装置。
【請求項１６】
前記制御レジスタは、一の暗黙のレジスタである請求項１４または１５に記載の装置。
【請求項１７】
前記第１の複数ビットオペランドは少なくとも１２８ビットのデータを含む請求項１４から１６のいずれか一項に記載の装置。
【請求項１８】
前記第１のソースデータ要素及び前記第２のソースデータ要素はそれぞれ６４ビットを含む請求項１７に記載の装置。
【請求項１９】
前記第１の複数ビットオペランドは、少なくとも４つのソースデータ要素を含む請求項１４から１７のいずれか一項に記載の装置。
【請求項２０】
前記少なくとも４つのソースデータ要素はそれぞれ３２ビットを含む請求項１９に記載の装置。
【請求項２１】
前記第１の複数ビットオペランドは、少なくとも８つのデータ要素を含む請求項１４から１７のいずれか一項に記載の装置。
【請求項２２】
前記少なくとも８つのソースデータ要素はそれぞれ１６ビットを含む請求項２１に記載の装置。
【請求項２３】
前記第１の複数ビットオペランドは、少なくとも１６のデータ要素を含む請求項１４から１７のいずれか一項に記載の装置。
【請求項２４】
前記少なくとも１６のソースデータ要素はそれぞれ８ビットを含む請求項２３に記載の装置。
【請求項２５】
データを格納するようアドレス指定可能な一のメモリと、
一の制御ビットを格納するよう構造的に可視である一のストレージ領域を含むプロセッサであって、
第１のソースデータ要素及び第２のソースデータ要素を含む第１の複数ビットオペランドと、前記第１のソースデータ要素に対応する第１の制御データ要素及び前記第２のソースデータ要素に対応する第２の制御データ要素を含む制御レジスタに対応する第２のオペランドとを有する命令形式である命令コードを復号化するデコーダと、
前記デコーダによる前記命令の復号化に応答して、前記第１の制御データ要素の第１の符号ビットが第１の論理値である場合に、第１のデスティネーションレジスタに前記第１のソースデータ要素を格納し、前記第１の制御データ要素の第１の符号ビットが第２の論理値である場合に、前記第１のデスティネーションレジスタに前記第１のソースデータ要素を格納しないように第１のデスティネーションレジスタを制御する回路と、
前記デコーダによる前記命令の復号化に応答して、前記第２の制御データ要素の第２の符号ビットが第１の論理値である場合に、第２のデスティネーションレジスタに前記第２のソースデータ要素を格納し、前記第２の制御データ要素の第２の符号ビットが第２の論理値である場合に、前記第２のデスティネーションレジスタに前記第２のソースデータ要素を格納しないように第２のデスティネーションレジスタを制御する回路と、
前記制御レジスタにおける前記第１の制御データ要素及び前記第２の制御データ要素を順次ビットシフトするビットシフト回路と
を有する前記プロセッサと
を備え、
前記第１のデスティネーションレジスタを制御する回路及び前記第２のデスティネーションレジスタを制御する回路は、前記ビットシフト回路が前記ビットシフトをするごとに順次、前記第１の制御データ要素及び前記第２の制御データ要素の前記符号ビットを使用して第１のデスティネーションレジスタ及び前記第２のデスティネーションレジスタを制御するコンピュータシステム。
【請求項２６】
前記第１の複数ビットオペランドは、１２８ビットである請求項２５に記載のコンピュータシステム。
【請求項２７】
前記第１の制御データ要素の前記第１の符号ビットは、一の第２のオペランドにおける最上位ビットである請求項２５または２６に記載のコンピュータシステム。
【請求項２８】
前記制御レジスタは、一の暗黙のレジスタである請求項２５から２７のいずれか一項に記載のコンピュータシステム。
【発明の詳細な説明】
【背景技術】
【０００１】
一般的なコンピュータシステムでは、プロセッサは、１つの結果を生成する複数の命令を使用して多数のビット（例、６４）により表される値を処理するよう実装される。たとえば、加算命令の実行は、第１の６４ビット値と第２の６４ビット値を足し、その結果を第３の６４ビット値として保存する。マルチメディアアプリケーション（例、コンピュータ支援協力（computer supported cooperation：ＣＳＣ−電話会議の様々なメディアデータ操作との統合）、２Ｄ／３Ｄグラフィックス、画像処理、ビデオ圧縮／解凍、認識アルゴリズム、およびオーディオ操作を対象とするアプリケーション）は、大量のデータの操作を必要とする。データは、単一の大きい値（例、６４ビットまたは１２８ビット）により表現されうるが、少数のビット（例、８、１６、または３２ビット）で表現されてもよい。たとえば、グラフィカルデータは、８または１６ビットで表現されえ、音データは、８または１６ビットで表現されえ、整数データは、８、１６、または３２ビットで表現されえ、浮動小数点データは、３２または６４ビットで表現されうる。
【０００２】
マルチメディアアプリケーション（および同様の特徴を有する他のアプリケーション）の効率を向上するために、プロセッサは、パックドデータ形式を提供しうる。パックドデータ形式は、単一値を表すよう一般的に使用されるビットが、幾つかの固定サイズのデータ要素に分割され、データ要素はそれぞれ、別個の値を表すような形式である。たとえば、１２８ビットレジスタは、４つの３２ビット要素に分割されえ、要素はそれぞれ、別個の３２ビット値を表す。このように、このようなプロセッサは、マルチメディアアプリケーションをより効率よく処理することができる。
【発明を実施するための最良の形態】
【０００３】
本発明を、例示的且つ非限定的に添付図面において説明する。
【０００４】
本願には、制御信号に応答して複数ビットのデータに対して選択演算を行う命令をプロセッサ内に含むための方法、システム、および回路の実施形態を開示する。選択演算に関連するデータは、パックドデータまたは非パックドデータでありうる。少なくとも１つの実施形態では、プロセッサはメモリに結合される。メモリには、その中に第１のデータおよび第２のデータが格納される。プロセッサは、命令の受信に応答して第１のデータおよび第２のデータ内のデータ要素に対して選択演算を行い、その結果を制御信号に基づいて第２のデータ内に格納する。
【０００５】
本発明のこれらのおよび他の実施形態は、以下の教示内容に従って実現されうる。また、本発明の広い精神および範囲から逸脱することなく以下の教示内容において様々な修正および変更を加えうることは明らかであるべきである。したがって、明細書および図面は、限定的な意味合いではなく例示的に解釈されるべきであり、また、本発明は、請求項によってのみ判定されるべきである。
［コンピュータシステム］
【０００６】
図１ａは、本発明の一実施形態による例示的コンピュータシステム１００を示す。コンピュータシステム１００は、情報を通信するための相互接続部１０１を含む。相互接続部１０１は、マルチドロップバス、１つ以上のポイントツーポイント相互接続部、またはこれら２つの任意の組み合わせ、並びに任意の他の通信ハードウェアおよび／またはソフトウェアを含みうる。
【０００７】
図１ａは、相互接続部１０１に結合される、情報処理のためのプロセッサ１０９を示す。プロセッサ１０９は、ＣＩＳＣまたはＲＩＳＣタイプのアーキテクチャを含む任意のタイプのアーキテクチャの中央演算処理ユニットを表す。
【０００８】
コンピュータシステム１００はさらに、情報およびプロセッサ１０９により実行される命令を格納するために相互接続部１０１に結合されるランダムアクセスメモリ（ＲＡＭ）または他のダイナミックストレージ装置（メインメモリ１０４と称する）を含む。メインメモリ１０４はさらに、プロセッサ１０９による命令の実行時に一時変数または他の中間情報を格納するために使用されうる。
【０００９】
コンピュータシステム１００はさらに、静的情報およびプロセッサ１０９用の命令を格納するために相互接続部１０１に結合される読み出し専用メモリ（ＲＯＭ）１０６、および／または他の静的ストレージ装置を含む。データストレージ装置１０７は、情報および命令を格納するために相互接続部１０１に結合される。
【００１０】
図１ａはさらに、プロセッサ１０９が、実行ユニット１３０、レジスタファイル１５０、キャッシュ１６０、デコーダ１６５、および内部相互接続部１７０を含むことを示す。当然ながら、プロセッサ１０９は、本発明の理解には必要ではない追加回路を含む。
【００１１】
デコーダ１６５は、プロセッサ１０９により受信された命令を復号化し、実行ユニット１３０は、プロセッサ１０９により受信された命令を実行する。一般的に汎用プロセッサで実施される命令の認識に加えて、デコーダ１６５および実行ユニット１３０は、本願に説明するように、条件付きコピー演算（ＢＬＥＮＤＳ）演算を行う命令を認識する。デコーダ１６５および実行ユニット１３０は、パックドデータおよび非パックドデータの両方に対してＢＬＥＮＤ演算を行う命令を認識する。
【００１２】
実行ユニット１３０は、内部相互接続部１７０によりレジスタファイル１５０に結合される。ここでも、内部相互接続部１７０は、必ずしもマルチドロップバスである必要はなく、代替実施形態では、ポイントツーポイント相互接続部または他のタイプの通信路でありうる。
【００１３】
レジスタファイル１５０は、データを含む情報を格納するためのプロセッサ１０９のストレージ領域を表す。本発明の一面は、パックドデータおよび非パックドデータに対してＢＬＥＮＤ演算を行うよう説明する命令の実施形態であることを理解するものとする。本発明のこの一面では、データを格納するために使用されるストレージ領域は重要ではない。しかし、レジスタファイル１５０の実施形態は、図２ａ−２ｂを参照しながら後述する。
【００１４】
実行ユニット１３０は、キャッシュ１６０およびデコーダ１６５に結合される。キャッシュ１６０は、たとえば、メインメモリ１０４からのデータおよび／または制御信号を格納するよう使用される。デコーダ１６５は、プロセッサ１０９により受信された命令を、制御信号および／またはマイクロコードエントリポイントに復号化するよう使用される。これらの制御信号および／またはマイクロコードエントリポイントは、デコーダ１６５から実行ユニット１３０に転送されうる。これらの制御信号および／またはマイクロコードエントリポイントに応答して、実行ユニット１３０は、適切な演算を行う。
【００１５】
デコーダ１６５は、任意の数のさまざまなメカニズム（例、ルックアップテーブル、ハードウェア実装、ＰＬＡなど）を使用して実施されうる。したがって、デコーダ１６５および実行ユニット１３０によるさまざまな命令の実行は、本願では、一連のｉｆ／ｔｈｅｎ文により表されうるが、命令の実行には、これらのｉｆ／ｔｈｅｎ文の順次処理を必要としないことを理解するものとする。むしろ、このｉｆ／ｔｈｅｎ処理を論理的に実行する任意のメカニズムが本発明の範囲内であると考える。
【００１６】
図１ａはさらに、コンピュータシステム１００に結合することのできるデータストレージ装置１０７（例、磁気ディスク、光ディスク、および／または他の機械可読媒体）を示す。さらに、データストレージ装置１０７は、プロセッサ１０９により実行されるコード１９５を含むよう示される。コード１９５は、ＢＬＥＮＤ命令１４２の１つ以上の実施形態を含むことができ、また、さまざまな目的（例、動画ビデオ圧縮／解凍、画像フィルタリング、オーディオ信号圧縮、フィルタリングまたは合成、変調／復調など）のために、プロセッサ１０９が、ＢＬＥＮＤ命令１４２にビットテストを行うよう書き込みされることができる。
【００１７】
コンピュータシステム１００はさらに、コンピュータユーザに情報を表示するために、相互接続部１０１を介して、ディスプレイ装置１２１に結合されうる。ディスプレイ装置１２１は、フレームバッファ、特殊グラフィックレンダリング装置、液晶ディスプレイ（ＬＣＤ）、および／またはフラットパネルディスプレイを含むことができる。
【００１８】
英数字キーおよび他のキーを含む入力装置１２２は、プロセッサ１０９に情報およびコマンド選択を通信するために相互接続部１０１に結合されうる。別のタイプのユーザ入力装置は、プロセッサ１０９に方向情報およびコマンド選択を通信し、ディスプレイ装置１２１上のカーソル動作を制御するマウス、トラックボール、ペン、タッチスクリーン、またはカーソル方向キーといったカーソルコントロール１２３である。この入力装置は、一般的に、２つの軸、すなわち、第１の軸（例、ｘ）および第２の軸（例、ｙ）の方向における２つの自由度を有し、これにより、入力装置が平面における位置を特定することができるようにする。しかし、本発明は、２つの自由度しかない入力装置に限定されるべきではない。
【００１９】
相互接続部１０１に結合されうる別の装置は、紙、フィルム、または似たようなタイプの媒体といった媒体上に命令、データ、および他の情報を印刷するために使用されうるハードコピー装置１２４である。さらに、コンピュータシステム１００は、情報を記録するためにマイクロホンに結合されるオーディオデジタイザといったような音声記録および／または再生装置１２５に結合されることができる。さらに、装置１２５は、デジタル化音声を再生するためにデジタルからアナログ（Ｄ／Ａ）に変換する変換器に結合されるスピーカを含みうる。
【００２０】
コンピュータシステム１００は、コンピュータネットワーク（例、ＬＡＮ）における端末でありうる。その場合、コンピュータシステム１００は、コンピュータネットワークのコンピュータサブシステムでありうる。コンピュータシステム１００は、任意選択的に、ビデオデジタル化装置１２６および／または通信装置１９０（例、外部装置またはネットワークとの通信を供給する、シリアル通信チップ、ワイヤレスインタフェース、イーサネット（登録商標）チップ、またはモデム）を含む。ビデオデジタル化装置１２６は、コンピュータネットワーク上の他の装置に伝送可能なビデオ画像を捕捉するよう使用することができる。
【００２１】
少なくとも１つの実施形態では、プロセッサ１０９は、カリフォルニア州サンタクララのインテル社で製造される既存のプロセッサ（例、Ｉｎｔｅｌ（登録商標）Ｐｅｎｔｉｕｍ（登録商標）プロセッサ、Ｉｎｔｅｌ（登録商標）Ｐｅｎｔｉｕｍ（登録商標）プロプロセッサ、Ｉｎｔｅｌ（登録商標）Ｐｅｎｔｉｕｍ（登録商標）ＩＩプロセッサ、Ｉｎｔｅｌ（登録商標）Ｐｅｎｔｉｕｍ（登録商標）ＩＩＩプロセッサ、Ｉｎｔｅｌ（登録商標）Ｐｅｎｔｉｕｍ（登録商標）４プロセッサ、Ｉｎｔｅｌ（登録商標）Ｉｔａｎｉｕｍ（登録商標）プロセッサ、Ｉｎｔｅｌ（登録商標）Ｉｔａｎｉｕｍ（登録商標）２プロセッサ、またはＩｎｔｅｌ（登録商標）Ｃｏｒｅ（登録商標）デュオプロセッサ）により使用される命令セットと互換性がある命令セットをサポートする。その結果、プロセッサ１０９は、本発明の演算に加えて既存のプロセッサの演算をサポートすることができる。プロセッサ１０９はさらに、１つ以上の処理技法での製造に適しており、また、機械可読媒体上に十分に詳細に表現されることにより、その製造を容易にするのに適しうる。本発明は、以下において、ｘ８６ベースの命令セットに組み込まれるように説明されるが、代替実施形態では、本発明を他の命令セットに組み込みうる。たとえば、本発明は、ｘ８６ベース命令セット以外の命令セットを使用して６４ビットプロセッサに組み込まれうる。
【００２２】
図１ｂは、本発明の原理を実施するデータ処理システム１０２の代替実施形態を示す。データ処理システム１０２の一実施形態は、Ｉｎｔｅｌ（登録商標）ＸＳｃａｌｅ（登録商標）技術を使用したアプリケーションプロセッサである。当業者には、本願に記載する実施形態は、本発明の範囲から逸脱することなく代替処理システムとともに使用することができることは容易に明らかであろう。
【００２３】
コンピュータシステム１０２は、ＢＬＥＮＤ演算を実行することのできる処理コア１１０を含む。一実施形態では、処理コア１１０は、以下に限定されないが、ＣＩＳＣ、ＲＩＳＣ、またはＶＬＩＷタイプのアーキテクチャを含む任意のタイプのアーキテクチャの処理ユニットを表す。処理コア１１０は、１つ以上の処理技法での製造に適しており、また、機械可読媒体上に十分に詳細に表現されることにより、その製造を容易にするのに適しうる。
【００２４】
処理コア１１０は、実行ユニット１３０、レジスタファイルのセット１５０、およびデコーダ１６５を含む。処理コア１１０はさらに、本発明の理解には必要ではない追加回路（図示せず）を含む。
【００２５】
実行ユニット１３０は、処理コア１１０により受信される命令を実行するために使用される。一般的なプロセッサ命令の認識に加えて、実行ユニット１３０は、パックドデータおよび非パックドデータ形式に対してＢＬＥＮＤ演算を実行する命令を認識する。デコーダ１６５および実行ユニット１３０により認識される命令セットは、ＢＬＥＮＤ演算のための１つ以上の命令を含み、また、他のパックド命令も含みうる。
【００２６】
実行ユニット１３０は、内部バス（ここでも、マルチドロップバス、ポイントツーポイント相互接続部などを含む任意のタイプの通信路でありうる）によりレジスタファイル１５０に結合される。レジスタファイル１５０は、データを含む情報を格納するための処理コア１１０のストレージ領域を表す。上述したように、データを格納するために使用するストレージ領域は重要ではない。実行ユニット１３０は、デコーダ１６５に結合される。デコーダ１６５は、処理コア１１０により受信される命令を、制御信号および／またはマイクロコードエントリポイントに復号化するよう使用される。これらの制御信号および／またはマイクロコードエントリポイントに応答して。これらの制御信号および／またはマイクロコードエントリポイントは、実行ユニット１３０に転送されうる。実行ユニット１３０は、制御信号および／またはマイクロコードエントリポイントに応答して、適切な演算を実行しうる。少なくとも１つの実施形態では、たとえば、実行ユニット１３０は、本願に記載する論理比較を実行しうる。また、実行ユニット１３０はさらに、本願に記載するようなステータスフラグまたはブランチを特定のコードロケーションに対して設定するか、または、両方を設定しうる。
【００２７】
処理コア１１０は、さまざまな他のシステム装置と通信するためにバス２１４に結合される。他のシステム装置は、以下に限定されないが、たとえば、同期ダイナミックランダムアクセスメモリ（ＳＤＲＡＭ）コントロール２７１、スタティックランダムアクセスメモリ（ＳＲＡＭ）コントロール２７２、バーストフラッシュメモリインタフェース２７３、パーソナルコンピュータメモリカード国際協会（ＰＣＭＣＩＡ）／コンパクトフラッシュ（ＣＦ）（登録商標）カードコントロール２７４、液晶ディスプレイ（ＬＣＤ）コントロール２７５、直接メモリアクセス（ＤＭＡ）コントローラ２７６、および代替バスマスタインタフェース２７７を含みうる。
【００２８】
少なくとも１つの実施形態では、データ処理システム１０２はさらに、Ｉ／Ｏバス２９５を介してさまざまなＩ／Ｏ装置と通信するためにＩ／Ｏブリッジ２９０を含む。Ｉ／Ｏ装置は、以下に限定されないが、たとえば、汎用非同期受信／送信器（ＵＡＲＴ）２９１、汎用シリアルバス（ＵＳＢ）２９２、ブルートゥース（登録商標）ワイヤレスＵＡＲＴ２９３、およびＩ／Ｏ拡張インタフェース２９４を含みうる。上述した他のバスと同様に、Ｉ／Ｏバス２９５は、マルチドロップバス、ポイントツーポイント相互接続部などを含む任意のタイプの通信路でありうる。
【００２９】
データ処理システム１０２の少なくとも１つの実施形態は、モバイル、ネットワーク、および／またはワイヤレス通信を提供し、また、処理コア１１０は、パックドデータおよび非パックドデータの両方にＢＬＥＮＤ演算を実行することができる。処理コア１１０は、離散変換、フィルタまたは畳み込み、色空間変換といった圧縮／解凍技術、ビデオ符号動き推定またはビデオ復号動き補正、パルス符号変調（ＰＣＭ）といった変調／復調（ＭＯＤＥＭ）機能を含むさまざまなオーディオ、ビデオ、イメージング、および通信アルゴリズムでプログラムされうる。
【００３０】
図１ｃは、パックドデータおよび非パックドデータに対してＢＬＥＮＤ演算を実行することのできるデータ処理システム１０３の代替実施形態を示す。１つの代替実施形態によると、データ処理システム１０３は、メインプロセッサ２２４と１つ以上のコプロセッサ２２６を含むチップパッケージ３１０を含みうる。追加コプロセッサ２２６の任意選択性は、図１ｃに破線によって示す。１つ以上のコプロセッサ２２６は、たとえば、ＳＩＭＤ命令を実行することのできるグラフィックコプロセッサでありうる。
【００３１】
図１ｃは、データ処理システム１０３はさらに、ともにチップパッケージ３１０に結合されるキャッシュメモリ２７８および入力／出力システム２６５を含みうることを示す。入力／出力システム２９５は、任意選択的に、ワイヤレスインタフェース２９６に結合されうる。
【００３２】
コプロセッサ２２６は、一般的な計算演算を実行することができ、またさらに、ＳＩＭＤ演算を実行することができる。少なくとも１つの実施形態では、コプロセッサ２２６は、パックドデータまたは非パックドデータに対してＢＬＥＮＤ演算を実行することができる。
【００３３】
少なくとも１つの実施形態では、コプロセッサ２２６は、実行ユニット１３０とレジスタファイル２０９を含む。メインプロセッサ２２４の少なくとも１つの実施形態は、実行ユニット１３０により実行されるＢＬＥＮＤ命令を含む命令セットの命令を認識且つ復号化するデコーダ１６５を含む。代替実施形態では、コプロセッサ２２６はさらに、ＢＬＥＮＤ命令を含む命令セットの命令を復号化するデコーダの少なくとも一部１６６を含む。データ処理システム１０３はさらに、本発明の理解には必要ではない追加回路（図示せず）を含む。
【００３４】
動作時には、メインプロセッサ２２４は、キャッシュメモリ２７８および入力／出力システム２９５とのインタラクションを含む一般タイプのデータ処理演算を制御するデータ処理命令のストリームを実行する。データ処理命令のストリームには、コプロセッサ命令が組み込まれる。メインプロセッサ２２４のデコーダ１６５は、これらのコプロセッサ命令を、付属コプロセッサ２２６により実行されるべきタイプであると認識する。したがって、メインプロセッサ２２４は、これらのコプロセッサ命令（またはコプロセッサ命令を表す制御信号）をコプロセッサ相互接続部２３６に発行する。これらの命令は、コプロセッサ相互接続部２３６から任意の付属コプロセッサにより受信される。図１ｃに示す単一コプロセッサ実施形態では、コプロセッサ２２６は、コプロセッサ２２６を対象とする任意の受信コプロセッサ命令を受け取りおよび実行する。コプロセッサ相互接続部は、マルチドロップバス、ポイントツーポイント相互接続部などを含む任意のタイプの通信路でありうる。
【００３５】
データは、コプロセッサ命令による処理のためにワイヤレスインタフェース２９６を介して受信されうる。一例として、音声通信がデジタル信号形式で受信されうる。このデジタル信号は、音声通信を表すデジタルオーディオサンプルを再生するようコプロセッサ命令により処理されうる。別の例として、圧縮されたオーディオおよび／またはビデオがデジタルビットストリーム形式で受信されうる。このデジタルビットストリームは、デジタルオーディオサンプルおよび／または動画ビデオフレームを再生するようコプロセッサ命令により処理されうる。
【００３６】
少なくとも１つの代替実施形態では、メインプロセッサ２２４およびコプロセッサ２２６は、実行ユニット１３０により実行されるＢＬＥＮＤ命令を含む命令セットの命令を認識するよう実行ユニット１３０、レジスタファイル２０９、およびデコーダ１６５を含む単一処理コアに組み込まれうる。
【００３７】
図２ａは、本発明の一実施形態によるプロセッサのレジスタファイルを示す。レジスタファイル１５０は、制御／ステータス情報、整数データ、浮動小数点データ、およびパックドデータを含む情報を格納するために使用されうる。当業者は、上述の情報およびデータのリストは、すべてを網羅するリストではないことを認識するであろう。
【００３８】
図２ａに示す実施形態では、レジスタファイル１５０は、整数レジスタ２０１、レジスタ２０９、ステータスレジスタ２０８、および命令ポインタレジスタ２１１を含む。ステータスレジスタ２０８は、プロセッサ１０９のステータスを示し、また、さまざまなステータスレジスタを含みうる。命令ポインタレジスタ２１１は、実行されるべき次の命令のアドレスを格納する。整数レジスタ２０１、レジスタ２０９、ステータスレジスタ２０８、および命令ポインタレジスタ２１１は、すべて内部相互接続部１７０に結合される。追加のレジスタも、内部相互接続部１７０に結合されうる。内部相互接続部１７０は、マルチドロップバスでありうるが、必ずしもマルチドロップバスである必要はない。内部相互接続部１７０は、ポイントツーポイント相互接続部を含む任意の他のタイプの通信路でありうる。
【００３９】
一実施形態では、レジスタ２０９は、パックドデータおよび浮動小数点データの両方に使用されうる。そのような一実施形態では、プロセッサ１０９は、いつもでレジスタ２０９を、スタック参照浮動小数点レジスタまたは非スタック参照パックドデータレジスタとして取り扱う。この実施形態では、プロセッサ１０９が、スタック参照浮動小数点レジスタおよび非スタック参照パックドデータレジスタとしてレジスタ２０９に対する処理を切り替えることを可能にするメカニズムが含まれる。もう１つのそのような実施形態では、プロセッサ１０９は、非スタック参照浮動小数点レジスタおよびパックドデータレジスタとしてレジスタ２０９に対して同時に処理しうる。もう１つの例として、別の実施形態では、これらの同様のレジスタは、整数データを格納するために使用されうる。
【００４０】
当然ながら、代替実施形態は、より多くのレジスタセットまたはより少ないレジスタセットを含むよう実施されうる。たとえば、代替実施形態は、浮動小数点データを格納するために別個の浮動小数点レジスタのセットを含みうる。もう１つの例として、代替実施形態は、それぞれ制御／ステータス情報を格納するための第１のレジスタセットと、それぞれ整数、浮動小数点、およびパックドデータを格納することのできる第２のレジスタセットを含みうる。明確にすることを目的として、実施形態のレジスタは、特定のタイプの回路を意味すると限定すべきではない。むしろ、一実施形態のレジスタは、データを格納および供給し、また、本願に記載する機能を実行することさえできればよい。
【００４１】
さまざまなレジスタセット（例、整数レジスタ２０１、レジスタ２０９）は、さまざまな数のレジスタおよび／またはさまざまなサイズのレジスタを含むよう実施されうる。たとえば、一実施形態では、整数レジスタ２０１は、３２ビットを格納するよう実施され、一方でレジスタ２０９は、８０ビットを格納するよう実施されうる（すべての８０ビットは、浮動小数点データを格納するよう使用され、一方で、６４ビットのみがパックドデータに使用される）。さらに、レジスタ２０９は、８個のレジスタ、Ｒ０２１２ａ乃至Ｒ７２１２ｈを含みうる。Ｒ１２１２ｂ、Ｒ２２１２ｃ、およびＲ３２１２ｄは、レジスタ２０９における個々のレジスタの例である。レジスタ２０９における１つのレジスタの３２ビットは、整数レジスタ２０１内の１つの整数レジスタに移動させることができる。同様に、整数レジスタにおける値は、レジスタ２０９内の１つのレジスタの３２ビットに移動させることができる。別の実施形態では、整数レジスタ２０１はそれぞれ６４ビットを含み、６４ビットのデータは、整数レジスタ２０１とレジスタ２０９間で移動させられうる。別の代替実施形態では、レジスタ２０９はそれぞれ６４ビットを含み、レジスタ２０９は１６個のレジスタを含む。さらに別の代替実施形態では、レジスタ２０９は３２個のレジスタを含む。
【００４２】
図２ｂは、本発明の一代替実施形態によるプロセッサのレジスタファイルを示す。レジスタファイル１５０は、制御／ステータス情報、整数データ、浮動小数点データ、およびパックドデータを含む情報を格納するために使用されうる。図２ｂに示す実施形態では、レジスタファイル１５０は、整数レジスタ２０１、レジスタ２０９、ステータスレジスタ２０８、拡張レジスタ２１０、および命令ポインタレジスタ２１１を含む。ステータスレジスタ２０８、命令ポインタレジスタ２１１、整数レジスタ２０１、レジスタ２０９はすべて内部相互接続部１７０に結合される。さらに、拡張レジスタ２１０も内部相互接続部１７０に結合される。内部相互接続部１７０はマルチドロップバスでありうるが、必ずしもマルチドロップバスである必要はない。内部相互接続部１７０は、ポイントツーポイント相互接続部を含む任意の他のタイプの通信路でありうる。
【００４３】
少なくとも１つの実施形態では、拡張レジスタ２１０は、パックされた整数データおよびパックされた浮動小数点データの両方に使用される。代替実施形態では、拡張レジスタ２１０は、スカラーデータ、パックドブールデータ、パックド整数データ、および／またはパックド浮動小数点データに使用されうる。当然ながら、代替実施形態は、本発明の広い範囲から逸脱することなく、より多くのまたはより少ないレジスタセット数、各セットにおいてより多くのまたはより少ないレジスタ数、または各レジスタにおいてより多くのまたはより少ないデータストレージビット数を含むよう実施されうる。
【００４４】
少なくとも１つの実施形態では、整数レジスタ２０１は、３２ビットを格納するよう実施され、レジスタ２０９は、８０ビットを格納するよう実施され（すべての８０ビットは、浮動小数点データを格納するよう使用され、一方で、６４のみがパックドデータに使用される）、拡張レジスタ２１０は、１２８ビットを格納するよう実施される。さらに、拡張レジスタ２１０は、８個のレジスタ、ＸＲ０２１３ａ乃至ＸＲ７２１３ｈを含みうる。ＸＲ０２１３ａ、ＸＲ１２１３ｂ、およびＸＲ２２１３ｃは、レジスタ２１０における個々のレジスタの例である。別の実施形態では、整数レジスタ２０１はそれぞれ６４ビットを含み、拡張レジスタ２１０はそれぞれ６４ビットを含み、拡張レジスタ２１０は１６個のレジスタを含む。一実施形態では、拡張レジスタ２１０のうちの２つのレジスタは、ペアとして処理されうる。さらに別の代替実施形態では、拡張レジスタ２１０は３２個のレジスタを含む。
【００４５】
図３は、本発明の一実施形態による、データを操作するプロセス３００の一実施形態のフロー図を示す。つまり、図３は、パックドデータにＢＬＥＮＤ演算を行う、非パックドデータにＢＬＥＮＤ演算を行う、または一部の他の演算を行う際に、たとえば、プロセッサ１０９（たとえば図１ａを参照）により行われるプロセスを示す。プロセス３００および本願に開示する他のプロセスは、汎用マシーン、特殊用途向けマシーン、またはそれらの組み合わせにより実行されることのできる専用ハードウェア、ソフトウェア、またはファームウェア演算コードを含みうる処理工程により行われる。
【００４６】
図３は、この方法の処理は、「開始」で始まり、処理工程３０１に進むことを示す。処理工程３０１では、デコーダ１６５（たとえば図１ａ参照）は、キャッシュ１６０（たとえば図１ａ参照）または相互接続部１０１（たとえば図１ａ参照）から制御信号を受信する。工程３０１において受信された制御信号は、少なくとも１つの実施形態では、ソフトウェア「命令」と一般的に称される１つのタイプの制御信号でありうる。デコーダ１６５は、行われるべき演算を決定するために制御信号を復号化する。処理は、処理工程３０１から処理工程３０２に進む。
【００４７】
処理工程３０２では、デコーダ１６５は、レジスタファイル１５０（たとえば図１ａ参照）か、メモリ（たとえば図１ａのメインメモリ１０４またはキャッシュメモリ１６０参照）における１つのロケーションにアクセスする。レジスタファイル１５０におけるレジスタ、またはメモリ内のメモリロケーションは、制御信号内に指定されるレジスタアドレスに依存してアクセスされる。たとえば、１つの演算のための制御信号は、ＳＲＣ１、ＳＲＣ２、およびＤＥＳＴレジスタアドレスを含むことができる。ＳＲＣ１は、第１のソースレジスタのアドレスである。ＳＲＣ２は、第２のソースレジスタのアドレスである。一部の場合では、すべての演算が２つのソースアドレスを必要とするわけではないので、ＳＲＣ２アドレスはオプションである。演算にＳＲＣ２アドレスが必要ではない場合、ＳＲＣ１アドレスだけが使用される。ＤＥＳＴは、結果データが格納されるデスティネーションレジスタのアドレスである。少なくとも１つの実施形態では、ＳＲＣ１またはＳＲＣ２は、デコーダ１６５により認識される少なくとも１つの制御信号においてＤＥＳＴとしても使用されうる。
【００４８】
対応レジスタに格納されるデータは、ソース１、ソース２、および結果とそれぞれ称される。一実施形態では、これらのデータのそれぞれは、６４ビット長でありうる。代替実施形態では、これらのデータのうちの１つ以上は、１２８ビット長といったように他の長さでありうる。
【００４９】
本発明の別の実施形態では、ＳＲＣ１、ＳＲＣ２、およびＤＥＳＴのうちいずれかまたはすべては、プロセッサ１０９（図１ａ）または処理コア１１０（図１ｂ）のアドレス指定可能なメモリ空間におけるメモリロケーションを定義することができる。たとえば、ＳＲＣ１は、メインメモリ１０４におけるメモリロケーションを特定し、一方でＳＲＣ２は、整数レジスタ２０１における第１のレジスタを特定し、ＤＥＳＴは、レジスタ２０９における第２のレジスタを特定しうる。本願の説明を簡単にすることを目的として、本発明は、レジスタファイル１５０にアクセスすることに関連して説明する。しかし、当業者は、ここに説明するアクセスは、メモリに行われてもよいことを認識するであろう。
【００５０】
処理は、工程３０２から処理工程３０３に進む。処理工程３０３では、実行ユニット１３０（たとえば図１ａ参照）は、アクセスしたデータに対する処理を実行するよう有効にされる。
【００５１】
処理は、処理工程３０３から処理工程３０４に進む。処理工程３０４では、結果が、制御信号の要件に応じて、レジスタファイル１５０またはメモリに戻されて格納される。処理は、次に、「停止」において終了する。
［データストレージ形式］
【００５２】
図４は、本発明の一実施形態によるパックドデータタイプを示す。４つのパックドデータ形式と１つの非パックドデータ形式を示す。データ形式には、パックドバイト４２１、パックドハーフ４２２、パックドシングル４２３、パックドダブル４２４、および非パックドダブルクワドワード４１２が含まれる。
【００５３】
パックドバイト形式４２１は、少なくとも１つの実施形態では、１２８ビット長で、１６個のデータ要素（Ｂ０−Ｂ１５）を含む。各データ要素（Ｂ０−Ｂ１５）は、１バイト（例、８ビット）長である。
【００５４】
パックドハーフ形式４２２は、少なくとも１つの実施形態では、１２８ビット長で、８個のデータ要素（ハーフ０乃至ハーフ７）を含む。各データ要素（ハーフ０乃至ハーフ７）は、１６ビットの情報を保持しうる。各１６ビットデータ要素は、あるいは、「ハーフワード」または「ショートワード」、または単に「ワード」と称されうる。
【００５５】
パックドシングル形式４２３は、少なくとも１つの実施形態では、１２８ビット長で、４つの４２３データ要素（シングル０乃至シングル３）を保持しうる。各データ要素（シングル０乃至シングル３）は、３２ビットの情報を保持しうる。各３２ビットデータ要素は、あるいは、「ｄワード」または「ダブルワード」と称されうる。各データ要素（シングル０乃至シングル３）は、たとえば、３２ビット単精度（single precision）浮動小数点値を表しうる。ここから、用語「パックドシングル（packed single）」形式としている。
【００５６】
パックドダブル形式４２４は、少なくとも１つの実施形態では、１２８ビット長で、２つのデータ要素を保持しうる。パックドダブル形式４２４の各データ要素（ダブル０、ダブル１）は、６４ビットの情報を保持しうる。各６４ビットデータ要素は、あるいは、「ｑワード」または「クワドワード」と称されうる。各データ要素（ダブル０、ダブル１）は、たとえば、６４ビット倍精度（double precision）浮動小数点値を表しうる。ここから、用語「パックドダブル（packed double）」形式としている。
【００５７】
非パックドダブルクワドワード形式４１２は、最大１２８ビットのデータを保持しうる。データは必ずしもパックドデータである必要はない。少なくとも１つの実施形態では、たとえば、非パックドダブルクワドワード形式４１２の１２８ビットの情報は、文字、整数、浮動小数点値、またはバイナリビットマスク値といった単一のスカラーデータを表しうる。あるいは、非パックドダブルクワドワード形式４１２の１２８ビットは、（各ビットまたはビットセットが異なるフラグを表すステータスレジスタ値といったような）非関連のビットの集合などを表しうる。
【００５８】
本発明の少なくとも１つの実施形態では、パックドシングル４２３形式およびパックドダブル４２４形式のデータ要素は、上述したようにパックド浮動小数点データ要素でありうる。本発明の代替実施形態では、パックドシングル４２３形式およびパックドダブル４２４形式のデータ要素は、パックド整数データ要素、パックドブールデータ要素、またはパックド浮動小数点データ要素でありうる。本発明の別の実施形態では、パックドバイト４２１形式、パックドハーフ４２２形式、パックドシングル４２３形式、およびパックドダブル４２４形式のデータ要素は、パックド整数データ要素、または、パックドブールデータ要素でありうる。本発明の代替実施形態では、パックドバイト４２１データ形式、パックドハーフ４２２データ形式、パックドシングル４２３データ形式、およびパックドダブル４２４データ形式のすべてが許可またはサポートされうるわけではない。
【００５９】
図５および６は、本発明の少なくとも１つの実施形態による、レジスタ内のパックドデータストレージ表現を示す。
【００６０】
図５は、レジスタ内の符号なしパックドバイト形式５１０と、レジスタ内の符号付きパックドバイト形式５１１をそれぞれ示す。レジスタ内符号なしパックドバイト表現５１０は、たとえば、１２８ビット拡張レジスタＸＲ０２１３ａ乃至ＸＲ７２１３ｈ（たとえば図２ｂ参照）のうちの１つにおける符号なしパックドバイトデータのストレージを示す。１６個のバイトデータ要素のそれぞれに対する情報は、バイト０についてはビット７からビット０に、バイト１についてはビット１５からビット８に、バイト２についてはビット２３からビット１６に、バイト３についてはビット３１からビット２４に、バイト４についてはビット３９からビット３２に、バイト５についてはビット４７からビット４０に、バイト６についてはビット５５からビット４８に、バイト７についてはビット６３からビット５６に、バイト８についてはビット７１からビット６４に、バイト９についてはビット７９からビット７２に、バイト１０についてはビット８７からビット８０に、バイト１１についてはビット９５からビット８８に、バイト１２についてはビット１０３からビット９６に、バイト１３についてはビット１１１からビット１０４に、バイト１４についてはビット１１９からビット１１２に、および、バイト１５についてはビット１２７からビット１２０に格納される。
【００６１】
したがって、すべての利用可能なビットはレジスタ内で使用される。このストレージの配置は、プロセッサのストレージ効率を向上する。さらに、１６個のデータ要素がアクセスされることによって、１つの演算が、１６個のデータ要素に対して同時に行われることができるようになる。
【００６２】
レジスタ内符号付きパックドバイト表現５１１は、符号付きパックドバイトのストレージを示す。なお、各バイトデータ要素の８番目のビット（ＭＳＢ）は、符号指示子（「ｓ」）である。
【００６３】
図５はさらに、レジスタ内の符号なしパックドワード表現５１２と、レジスタ内の符号付きパックドワード表現５１３をそれぞれ示す。
【００６４】
レジスタ内符号なしパックドワード表現５１２は、拡張レジスタ２１０が、８個のワード（それぞれ１６ビット）データ要素を格納する方法を示す。ワード０は、レジスタのビット１５からビット０に格納される。ワード１は、レジスタのビット３１からビット１６に格納される。ワード２は、レジスタのビット４７からビット３２に格納される。ワード３は、レジスタのビット６３からビット４８に格納される。ワード４は、レジスタのビット７９からビット６４に格納される。ワード５は、レジスタのビット９５からビット８０に格納される。ワード６は、レジスタのビット１１１からビット９６に格納される。ワード７は、レジスタのビット１２７からビット１１２に格納される。
【００６５】
レジスタ内符号付きパックドワード表現５１３は、レジスタ内符号なしパックドワード表現５１２に類似する。なお、符号ビット（「ｓ」）は、各ワードデータ要素の１６番目のビット（ＭＳＢ）に格納される。
【００６６】
図６は、レジスタ内の符号なしパックドダブルワード形式５１４と、レジスタ内の符号付きパックドダブルワード形式５１５をそれぞれ示す。レジスタ内符号なしパックドダブルワード表現５１４は、拡張レジスタ２１０が、４つのダブルワード（それぞれ３２ビット）データ要素を格納する方法を示す。ダブルワード０は、レジスタのビット３１からビット０に格納される。ダブルワード１は、レジスタのビット６３からビット３２に格納される。ダブルワード２は、レジスタのビット９５からビット６４に格納される。ダブルワード３は、レジスタのビット１２７からビット９６に格納される。
【００６７】
レジスタ内符号付きパックドダブルワード表現５１５は、レジスタ内符号なしパックドクワドワード表現５１６に類似する。なお、符号ビット（「ｓ」）は、各ダブルワードデータ要素の３２番目のビット（ＭＳＢ）である。
【００６８】
図６はさらに、レジスタ内の符号なしパックドクワドワード形式５１６と、レジスタ内の符号付きパックドクワドワード形式５１７をそれぞれ示す。レジスタ内符号なしパックドクワドワード表現５１６は、拡張レジスタ２１０が、２つのクワドワード（それぞれ６４ビット）データ要素を格納する方法を示す。クワドワード０は、レジスタのビット６３からビット０に格納される。クワドワード１は、レジスタのビット１２７からビット６４に格納される。
【００６９】
レジスタ内符号付きパックドクワドワード表現５１７は、レジスタ内符号なしパックドクワドワード表現５１６に類似する。なお、符号ビット（「ｓ」）は、各クワドワードデータ要素の６４番目のビット（ＭＳＢ）である。
［ＢＬＥＮＤ演算］
【００７０】
図７は、本発明の少なくとも１つの実施形態によるＢＬＥＮＤ演算を実行する一般的な方法７００を示すフローチャートである。プロセス７００および本願に開示する他のプロセスは、汎用マシーン、特殊用途向けマシーン、またはそれらの組み合わせにより実行することのできる専用ハードウェア、ソフトウェア、またはファームウェア演算コードを含みうる処理工程により実行される。
【００７１】
図７は、この方法は、「開始」で始まり、処理工程７０５に進むことを示す。処理工程７０５では、デコーダ１６５は、プロセッサ１０９により受信される制御信号を復号化する。したがって、デコーダ１６５は、ＢＬＥＮＤ命令用の演算コードを復号化する。処理は、次に、処理工程７０５から処理工程７１０に進む。
【００７２】
処理工程７１０では、内部バス１７０を介して、デコーダ１６５は、命令内に符号化されるＳＲＣ１アドレスおよびＤＥＳＴアドレスが与えられることによりレジスタファイル１５０内のレジスタ２０９にアクセスする。少なくとも１つの実施形態では、命令内に符号化されるアドレスはそれぞれ拡張レジスタ（たとえば、図２ｂの拡張レジスタ２１０を参照）を示す。このような実施形態では、工程７１０において、指示された拡張レジスタ２１０が、実行ユニット１３０にＳＲＣ１レジスタ（ソース１）内に格納されるデータとＤＥＳＴレジスタ（Ｄｅｓｔ）内に格納されるデータを供給するようアクセスされる。少なくとも１つの実施形態では、拡張レジスタ２１０は、これらのデータを、内部バス１７０を介して実行ユニット１３０に通信する。
【００７３】
処理は、処理工程７１０から処理工程７１５に進む。処理工程７１５において、デコーダ１６５は、命令を実行するよう実行ユニット１３０を有効にする。少なくとも１つの実施形態では、そのような有効化７１５は、所望の演算（ＢＬＥＮＤ）を指示するよう実行ユニットに１つ以上の制御信号を送ることにより行われる。
【００７４】
処理は、処理工程７１５から処理工程７２０に進む。処理工程７２０では、命令内に格納されるデータは、所望の演算により獲得される。
【００７５】
処理は、処理工程７２０から処理工程７２５に進む。処理工程７２５では、プロセッサは、当該のデータ要素に対して制御ビットが「１」に設定されているか否かを判断する。データ要素は、データストレージ形式に基づいて異なりうる。図４に示すように、さまざまなパックドデータタイプがある。
【００７６】
パックドバイト形式４２１は、少なくとも１つの実施形態では、１２８ビット長で、１６個のデータ要素（Ｂ０−Ｂ１５）を含む。各データ要素（Ｂ０−Ｂ１５）は、１バイト（例、８ビット）長である。
【００７７】
パックドハーフ形式４２２は、少なくとも１つの実施形態では、１２８ビット長で、８個のデータ要素（ハーフ０乃至ハーフ７）を含む。各データ要素（ハーフ０乃至ハーフ７）は、１６ビットの情報を保持しうる。各１６ビットデータ要素は、あるいは、「ハーフワード」または「ショートワード」、または単に「ワード」と称されうる。
【００７８】
パックドシングル形式４２３は、少なくとも１つの実施形態では、１２８ビット長で、４つの４２３データ要素（シングル０乃至シングル３）を保持しうる。各データ要素（シングル０乃至シングル３）は、３２ビットの情報を保持しうる。各３２ビットデータ要素は、あるいは、「ｄワード」または「ダブルワード」と称されうる。各データ要素（シングル０乃至シングル３）は、たとえば、３２ビット単精度（single precision）浮動小数点値を表しうる。ここから、用語「パックドシングル（packed single）」形式としている。
【００７９】
パックドダブル形式４２４は、少なくとも１つの実施形態では、１２８ビット長で、２つのデータ要素を保持しうる。パックドダブル形式４２４の各データ要素（ダブル０、ダブル１）は、６４ビットの情報を保持しうる。各６４ビットデータ要素は、あるいは、「ｑワード」または「クワドワード」と称されうる。各データ要素（ダブル０、ダブル１）は、たとえば、６４ビット倍精度（double precision）浮動小数点値を表しうる。ここから、用語「パックドダブル（packed double）」形式としている。
【００８０】
本発明の少なくとも１つの実施形態では、パックドシングル４２３形式およびパックドダブル４２４形式のデータ要素は、上述したようにパックド浮動小数点データ要素でありうる。本発明の代替実施形態では、パックドシングル４２３形式およびパックドダブル４２４形式のデータ要素は、パックド整数データ要素、パックドブールデータ要素、またはパックド浮動小数点データ要素でありうる。
【００８１】
本発明の少なくとも１つの実施形態では、制御ビットとは、データ要素のＭＳＢを指しうる。ＭＳＢは、符号指示子または符号ビットとも知られうる。たとえば、各バイトデータ要素の８番目のビット（ＭＳＢ）は符号指示子であり、各ワードデータ要素の１６番目のビット（ＭＳＢ）は符号ビットであり、各ダブルワードデータ要素の３２番目のビット（ＭＳＢ）は符号ビットであり、各クワドワードデータ要素の６４番目のビット（ＭＳＢ）は符号ビットである。
【００８２】
ソース１データ要素の制御ビットが「１」である場合、処理は、処理工程７３０に進む。処理工程７３０では、マルチプレクサが、制御ビット「１」を有するソース１データ要素を選択する。マルチプレクサの数は、命令の粒度に依存する。ＳＲＣ１内のデータ要素は、ＤＥＳＴ内にコピーされる。処理は、処理工程７３５に進む。処理工程７３５では、メモリが、ＤＥＳＴレジスタに対して選択されるデータ要素を格納する。格納後、処理は終了する。
【００８３】
制御ビットが「０」である場合、処理は終了する。ＤＥＳＴ内のデータ要素はそのままでコピーされない。
［即値ＢＬＥＮＤ演算］
【００８４】
図８は、図７に示す一般的な方法７００の即値選択演算８００のためのプロセスの少なくとも１つの実施形態のフロー図を示す。図８に示す特定の実施形態８００では、即値ＢＬＥＮＤ演算は、パックドデータであってもパックドデータでなくてもよい、１２８ビット長のソース１およびＤｅｓｔデータ値に対して行われる。さらに、当業者は、図８に示す演算は、より短いまたはより長い長さを含む他の長さのデータ値に対しても行われうることを認識する。
【００８５】
即値ＢＬＥＮＤ命令は、バイト、ワード、またはダブルワードマスクではなくビットマスクを使用する。ビットマスクを使用することによって、（６４または１２８ビットではなく）小さい即値オペランドを可能にし、それにより、より小さいコードサイズおよびより効率のよい復号化が行われる。
【００８６】
方法８００の処理工程８０５乃至８２０は、図７に示す方法７００に関連して上述した処理工程７０５乃至７２０と本質的に同様に処理される。工程８１５において、デコーダ１６５が、命令を行うよう実行ユニット１３０を有効にする場合、命令は、ソース１およびＤｅｓｔ値の各データ要素を選択するＢＬＥＮＤ命令である。
【００８７】
処理は、処理工程８２０から処理工程８２５に進む。処理工程８２５では、以下が行われる。
【００８８】
即値ＢＬＥＮＤ命令のニーモニックは次のとおりである。すなわち、ＢＬＥＮＤ  ｘｍｍ１，ｘｍｍ２／ｍ１２８，ｉｍｍ８。命令は、３つのオペランドを必要とする。第１のオペランドはソースオペランドでありえ、第２のオペランドはデスティネーションオペランドでありえ、第３のオペランドは即値ビットでありうる。即値ＢＬＥＮＤ命令は、ビットマスクに基づいてソース１（ｘｍｍ１）およびＤｅｓｔ（ｘｍｍ２）から値を選択する。ビットマスクは、データ要素の即値フィールドに格納されるビットでありうる。即値ビット（Ｉｂ［］）は、制御目的に使用され、命令内に符号化され、また、制御ビットとして使用されうる。
【００８９】
処理は、処理工程８２５から処理工程８３０に進む。処理工程８３０では、ソース１の即値ビットにおけるビットマスクが「１」である場合、ソース１からの入力がマルチプレクサにより選択される。上述したように、マルチプレクサの数は、命令の粒度に依存する。処理は次に処理工程８３５に進む。処理工程８３５では、選択された入力は、最終Ｄｅｓｔに格納される。したがって、ソース１の即値ビットが「１」である場合、そのデータ値は、最終Ｄｅｓｔに格納される。
【００９０】
ソース１の即値ビットにおけるビットマスクが「０」である場合、処理は、処理工程８２５から「停止」に進み、この場合、Ｄｅｓｔにおける値には変更はない。ソース１データ値は、Ｄｅｓｔ内に格納されない。
【００９１】
即値ＢＬＥＮＤ命令は、即値オペランドを使用するので、スタティックマスクパターンを使用するグラフィックアプリケーションが、パターンデータのための任意のロードを必要とすることなく符号化されることを可能にする。たとえば、パターは、パワーポイント、テクスチャマッピング、水面で光る日光、または他のアニメーション効果といったグラフィックアプリケーションの代わりとなる。
【００９２】
即値ＢＬＥＮＤ命令は、複数のコンポーネントが異なるように処理される必要があり、パターンが事前に周知である結果を迅速にパッキングできるようにする。たとえば、複雑な数または赤−緑−青−アルファピクセル形式である。
【００９３】
有利には、即値ＢＬＥＮＤ命令は、マスクを設定するのにロード演算または比較演算を必要としないので、命令は２倍速く処理しうる。
【００９４】
図９ａは、図８に示す即値選択演算８００のプロセスの少なくとも１つの特定実施形態の回路図を示す。図９ａに示すこの特定実施形態では、命令は、ＢＬＥＮＤパックド倍精度浮動小数点値（ＢＬＥＮＤＰＤ）である。ＢＬＥＮＤＰＤ演算は、パックドデータであってもパックドデータでなくてもよい、１２８ビット長のソース１およびＤｅｓｔデータ値に対して行われる。さらに、当業者は、図９ａに示す演算は、より短いまたはより長い長さを含む他の長さのデータ値に対しても行われうることを認識する。
【００９５】
図９ａを参照するに、ＢＬＥＮＤＰＤ演算では、ｘｍｍ１  ９０５ａといったソースオペランドからの倍精度浮動小数点値は、即値オペランド９１５ａにおけるビットに依存して、ｘｍｍ２  ９１０ａといったデスティネーションオペランドに条件付きで書き込みされうる。上述したように、即値ビットが、デスティネーションオペランドにおける対応倍精度浮動小数点値はソースオペランドから選択および／またはコピーされるか否かを決定する。１ワードに対応するマスク内の即値ビットが「１」である場合、倍精度浮動小数点値は選択および／またはコピーされ、それ以外の場合、デスティネーションにおける値は変更されないままである。
【００９６】
ＢＬＥＮＤＰＤは、パックド倍精度浮動小数点要素の一タイプであるので、２８ビット長で、各ｘｍｍレジスタに対し２つのデータ要素を保持しうる。たとえば、ソースオペランド、ｘｍｍ１レジスタは、データ要素９２０ａおよび９２５ａを保持しえ、デスティネーションオペランド、ｘｍｍ２レジスタは、データ要素９３０ａおよび９３５ａを保持しうる。パックドダブル形式４２４の各データ要素は、６４ビットの情報を保持しうる。このインスタンスの即値ビットは、各データ要素のＩｂ［］９１５ａである。マルチプレクサ９４０ａは、ｘｍｍ１レジスタ９０５内の各データ要素の即値ビット９１５ａに基づいて、デスティネーション値がｘｍｍ１レジスタ９０５ａからコピーされるか否か選択する。
【００９７】
図９ａを参照するに、演算が次のとおりである場合。すなわち、ＢＬＥＮＤＰＤ  ｘｍｍ１，ｘｍｍ２，０１ｂ。この演算は、即値ビットが「１」であるソースオペランドからのデータ要素を、デスティネーションレジスタに入れることを示す。Ｉｂ［０］９１５ａはビット「１」を含むので、データ要素９２５ａは、ＭＵＸ９４０ａにより選択され、デスティネーションレジスタ９１０ａ内に格納される。Ｉｂ［１］９１５ａはビット「０」を含むので、データ要素９３０ａは、デスティネーションレジスタ９１０ａ内で同じままである。演算を完了後、最終デスティネーションレジスタ９１０ａは、データ要素９３０ａおよび９２５ａを含む。この値は、次に、メモリ内に格納されうる。
【００９８】
図９ｂは、図８に示す即値選択演算８００のプロセスの少なくとも１つの特定実施形態の回路図を示す。図９ｂに示すこの特定実施形態では、命令は、ＢＬＥＮＤパックド単精度浮動小数点値（ＢＬＥＮＤＰＳ）である。ＢＬＥＮＤＰＳ演算は、パックドデータであってもパックドデータでなくてもよい、１２８ビット長のソース１およびＤｅｓｔデータ値に対して行われる。さらに、当業者は、図９ｂに示す演算は、より短いまたはより長い長さを含む他の長さのデータ値に対しても行われうることを認識する。
【００９９】
図９ｂを参照するに、ＢＬＥＮＤＰＳ演算では、ｘｍｍ１  ９０５ｂといったソースオペランドからの単精度浮動小数点値は、即値オペランド９１５ｂにおけるビットに依存して、ｘｍｍ２  ９１０ｂといったデスティネーションオペランドに条件付きで書き込みされうる。上述したように、即値ビットが、デスティネーションオペランドにおける対応倍精度浮動小数点値はソースオペランドから選択および／またはコピーされるか否かを決定する。１ワードに対応するマスク内の即値ビットが「１」である場合、倍精度浮動小数点値は、ＭＵＸ９４０ｂにより選択されてコピーされ、それ以外の場合、デスティネーションにおける値は変更されないままである。
【０１００】
ＢＬＥＮＤＰＳは、パックド単精度浮動小数点要素の一タイプであるので、２８ビット長で、各ｘｍｍレジスタに対し４つの４２３データ要素を保持しうる。たとえば、ソースオペランド、ｘｍｍ１レジスタは、データ要素９２０ｂ、９２５ｂ、９２６ｂ、および９２７ｂを保持しうる。デスティネーションオペランド、ｘｍｍ２レジスタは、データ要素９３０ｂ、９３５ｂ、９３６ｂ、および９３７ｂを保持しうる。パックドシングル形式４２３の各データ要素は、３２ビットの情報を保持しうる。このインスタンスの即値ビットは、各データ要素のＩｂ[]９１５ｂである。マルチプレクサ９４０ｂは、ｘｍｍ１レジスタ９０５ｂ内の各データ要素の即値ビット９１５ｂに基づいて、デスティネーション値がｘｍｍ１レジスタ９０５ｂからコピーされるか否か選択する。
【０１０１】
図９ｂを参照するに、演算が次のとおりである場合。すなわち、ＢＬＥＮＤＰＳ  ｘｍｍ１，ｘｍｍ２，０１０１ｂ。この演算は、即値ビットが「１」であるソースオペランドからのデータ要素を、デスティネーションレジスタに入れることを示す。Ｉｂ［０］９１５ｂはビット「１」を含むので、データ要素９２７ｂは選択され、デスティネーションレジスタ９１０ｂ内に格納される。Ｉｂ［１］９１５ｂはビット「０」を含むので、データ要素９３６ｂは、デスティネーションレジスタ９１０ｂ内で同じままである。Ｉｂ［２］９１５ｂはビット「１」を含み、データ要素９２５ｂは選択され、デスティネーションレジスタ９１０ｂ内に格納される。最後にＩｂ［３］９１５ｂはビット「０」を含み、データ要素９３０ｂは、デスティネーションレジスタ９１０ｂ内で同じままである。演算を完了後、最終デスティネーションレジスタ９１０ｂは、データ要素９３０ｂ、９２５ｂ、９３６ｂ、および９２７ｂを含む。この値は、次に、メモリ内に格納されうる。
【０１０２】
図９ｃは、図８に示す即値選択演算８００のプロセスの少なくとも１つの特定実施形態の回路図を示す。図９ｃに示すこの特定実施形態では、命令は、ＢＬＥＮＤパックドワード（ＰＢＬＥＮＤＤＷ）である。ＰＢＬＥＮＤＤＷ演算は、パックドデータであってもパックドデータでなくてもよい、１２８ビット長のソース１およびＤｅｓｔデータ値に対して行われる。さらに、当業者は、図９ｃに示す演算は、より短いまたはより長い長さを含む他の長さのデータ値に対しても行われうることを認識する。
【０１０３】
図９ｃを参照するに、ＰＢＬＥＮＤＤＷ演算では、ｘｍｍ１  ９０５ｃといったソースオペランドからのワード値は、即値オペランド９１５ｃにおけるビットに依存して、ｘｍｍ２  ９１０ｃといったデスティネーションオペランドに条件付きで書き込みされうる。上述したように、即値ビットが、デスティネーションオペランドにおける対応ワード値はソースオペランドからマルチプレクサにより選択されるか否かを決定する。１ワードに対応するマスクにおける即値ビットが「１」である場合、ワード値は選択および／またはコピーされ、それ以外の場合、デスティネーションにおける値は変更されないままである。
【０１０４】
ＰＢＬＥＮＤＤＷは、パックドワード要素の一タイプであるので、２８ビット長で、各ｘｍｍレジスタに対し８つのデータ要素を保持しうる。たとえば、ソースオペランド、ｘｍｍ１レジスタは、データ要素９２０ｃ、９２５ｃ、９２６ｃ、９２７ｃ、９２８ｃ、９２９ｃ、９２１ｃ、および９２２ｃを保持しうる。デスティネーションオペランド、ｘｍｍ２レジスタは、データ要素９３０ｃ、９３５ｃ、９３６ｃ、９３７ｃ、９３８ｃ、９３９ｃ、９３１ｃ、および９３２ｃを保持しうる。パックドダブル形式４２２の各データ要素は、１６ビットの情報を保持しうる。このインスタンスの即値ビットは、各データ要素のＩｂ［］９１５ｃである。マルチプレクサ９４０ｃは、ｘｍｍ１レジスタ９０５ｃ内の各データ要素の即値ビット９１５ｃに基づいて、デスティネーション値がｘｍｍ１レジスタ９０５ｃからコピーされるか否か選択する。
【０１０５】
図９ｃを参照するに、演算が次のとおりである場合。すなわち、ＰＢＬＥＮＤＤＷ  ｘｍｍ１，ｘｍｍ２，００００１１１１ｂ。この演算は、即値ビットが「１」であるソースオペランドからのデータ要素を、デスティネーションレジスタに入れることを示す。Ｉｂ［０］９１５ｃはビット「１」を含むので、データ要素９２２ｃはＭＵＸ９４０ｃにより選択され、デスティネーションレジスタ９１０ｃ内に格納される。Ｉｂ［１］９１５ｃはビット「１」を含むので、データ要素９２１ｃはＭＵＸ９４０ｃにより選択され、デスティネーションレジスタ９１０ｃ内に格納される。Ｉｂ［２］９１５ｃはビット「１」を含むので、データ要素９２９ｃはＭＵＸ９４０ｃにより選択され、デスティネーションレジスタ９１０ｃ内に格納される。Ｉｂ［３］９１５ｃはビット「１」を含むので、データ要素９２８ｃはＭＵＸ９４０ｃにより選択され、デスティネーションレジスタ９１０ｃ内に格納される。Ｉｂ［４］９１５ｃはビット「０」を含むので、データ要素９３７ｃは、デスティネーションレジスタ９１０ｃ内で変わらないままである。Ｉｂ［５］９１５ｃはビット「０」を含むので、データ要素９３６ｃは、デスティネーションレジスタ９１０ｃ内で変わらないままである。Ｉｂ［６］９１５ｃはビット「０」を含むので、データ要素９３５ｃは、デスティネーションレジスタ９１０ｃ内で変わらないままである。Ｉｂ［７］９１５ｃはビット「０」を含むので、データ要素９３０ｃは、デスティネーションレジスタ９１０ｃ内で変わらないままである。演算を完了後、最終デスティネーションレジスタ９１０ｃは、データ要素９３０ｃ、９３５ｃ、９３６ｃ、９３７ｃ、９２８ｃ、９２９ｃ、９２１ｃ、および９２２ｃを含む。この値は、次に、メモリ内に格納されうる。
［可変ＢＬＥＮＤ演算］
【０１０６】
図１０は、図７に示す一般的な方法７００の即値選択演算１０００のためのプロセスの少なくとも１つの実施形態のフロー図を示す。図１０に示す特定の実施形態１０００では、可変ＢＬＥＮＤ演算が、パックドデータであってもパックドデータでなくてもよい、１２８ビット長のソース１およびＤｅｓｔデータ値に対して行われる。さらに、当業者は、図１０に示す演算は、より短いまたはより長い長さを含む他の長さのデータ値に対しても行われうることを認識する。さらに、可変ＢＬＥＮＤ命令は、各データ要素につき、符号ビットまたは最上位ビット（ＭＳＢ）を使用する。
【０１０７】
方法１０００の処理工程１００５乃至１０２０は、図７に示す方法７００に関連して上述した処理工程７０５乃至７２０と本質的に同様に処理される。工程１０１５において、デコーダ１６５が、命令を行うよう実行ユニット１３０を有効にする場合、命令は、ソース１およびＤｅｓｔ値の各データ要素を選択するＢＬＥＮＤ命令である。
【０１０８】
処理は、処理工程１０２０から処理工程１０２５に進む。処理工程１０２５では、以下が行われる。
【０１０９】
可変ＢＬＥＮＤ命令のニーモニックは次のとおりである。すなわち、ＢＬＥＮＤ  ｘｍｍ１，ｘｍｍ２／ｍ１２８，＜ＸＭＭ０＞。命令は、３つのオペランドを必要とする。第１のオペランドはソースオペランドでありえ、第２のオペランドはデスティネーションオペランドでありえ、第３のオペランドは制御レジスタでありうる。可変ＢＬＥＮＤ命令は、暗黙のレジスタ、ｘｍｍ０における最上位ビットに基づいてソース１（ｘｍｍ１）およびＤｅｓｔ（ｘｍｍ２）から値を選択する。制御は、各フィールドのＭＳＢによる。フィールド幅は、命令タイプのフィールドに対応する。
【０１１０】
処理は、処理工程１０２５から処理工程１０３０に進む。処理工程１０３０では、ソース１のｘｍｍ０レジスタにおけるＭＳＢが「１」である場合、ソース１からの入力がマルチプレクサにより選択される。上述したように、マルチプレクサの数は、命令の粒度に依存する。処理は次に処理工程１０３５に進む。処理工程１０３５では、選択された入力が、最終Ｄｅｓｔに格納される。したがって、ソース１のＭＳＢが「１」である場合、そのデータ値は、最終Ｄｅｓｔに格納される。
【０１１１】
ソース１のＭＳＢが「０」である場合、処理は、処理工程１０２５から「停止」に進み、この場合、Ｄｅｓｔにおける値には変更はない。ソース１データ値は、Ｄｅｓｔ内に格納されない。
【０１１２】
可変ＢＬＥＮＤ演算は、各フィールドのＭＳＢを使用するので、任意の算術結果（浮動小数点または整数）を、マスクとして使用することを可能にする。可変ＢＬＥＮＤ演算はさらに、比較結果を使用することを可能にする（たとえば、３２ビットの小数点ｚバッファ演算を、３２ビットピクセルをマスクするよう使用することができる）。
【０１１３】
有利に、可変ＢＬＥＮＤ演算は、マスクが複数の目的（アニメーション効果など）のために設計されることを可能にする。最上位ビットを最初に使用し、次にマスクを左にシフトして第２の最上位ビットを使用し、次に第３の最上位ビットを使用し、以下同様に続ける。この技法を使用することにより、マスクの予め計算されるシーケンス、ロード演算、およびストレージを大幅に減らすことができる。
【０１１４】
図１１ａは、図１０に示す可変選択演算１０００のプロセスの少なくとも１つの特定実施形態の回路図を示す。図１１ａに示すこの特定実施形態では、命令は、可変ＢＬＥＮＤパックド倍精度浮動小数点値（ＢＬＥＮＤＶＰＤ）である。ＢＬＥＮＤＶＰＤ演算は、パックドデータであってもパックドデータでなくてもよい、１２８ビット長のソース１およびＤｅｓｔデータ値に対して行われる。さらに、当業者は、図１１ａに示す演算は、より短いまたはより長い長さを含む他の長さのデータ値に対しても行われうることを認識する。
【０１１５】
図１１ａを参照するに、ＢＬＥＮＤＶＰＤ演算では、ｘｍｍ１  １１０５ａといったソースオペランドからの倍精度浮動小数点値は、暗黙の第３のレジスタ、ｘｍｍ０  １１１５ａにおけるＭＳＢに依存して、ｘｍｍ２  １１１０ａといったデスティネーションオペランドに条件付きで書き込みされうる。第３のオペランドのレジスタ割り当ては、アーキテクチャレジスタＸＭＭ０でありうる。上述したように、各ソース１に対する暗黙の第３のレジスタにおけるＭＳＢが、デスティネーションオペランドにおける対応倍精度浮動小数点値はソースオペランドから選択および／またはコピーされるか否かを決定する。マスクにおけるＭＳＢが「１」に対応する場合、倍精度浮動小数点値は選択および／またはコピーされ、それ以外の場合、デスティネーションにおける値は変更されないままである。
【０１１６】
ＢＬＥＮＤＶＰＤは、パックド倍精度浮動小数点要素の一タイプであるので、２８ビット長で、各ｘｍｍレジスタに対し２つのデータ要素を保持しうる。たとえば、ソースオペランド、ｘｍｍ１レジスタ１１０５ａは、データ要素１１２０ａと１１２５ａを保持しえ、デスティネーションオペランド、ｘｍｍ２レジスタ１１１０ａは、データ要素１１３０ａと１１３５ａを保持しうる。パックドダブル形式４２４の各データ要素は、６４ビットの情報を保持しうる。マルチプレクサ１１４０ａは、ｘｍｍ１レジスタ１１０５内の各データ要素のレジスタ１１１５ａにおけるＭＳＢに基づいて、デスティネーション値がｘｍｍ１レジスタ１１０５ａから選択されるか否か選択する。
【０１１７】
図１１ａを参照するに、演算が次のとおりである場合。すなわち、ＢＬＥＮＤＶＰＤ  ｘｍｍ１，ｘｍｍ２，＜ＸＭＭ０＞。この演算は、暗黙のレジスタＸＭＭ０におけるＭＳＢが「１」であるソースオペランドからのデータ要素を、デスティネーションレジスタに入れることを示す。レジスタＸＭＭ０  １１１７ａのＭＳＢはビット「０」を含むので、データ要素１１２５ａは、ＭＵＸ１１４０ａにより選択されない。レジスタｘｍｍ２  １１１０ａにおけるデータ要素１１３５ａは、デスティネーションレジスタ内に残る。しかし、レジスタＸＭＭ０  １１１６ａのＭＳＢはビット「１」を含み、データ要素１１２０ａはＭＵＸ１１４０ａにより選択され、デスティネーションレジスタ１１１０ａ内に格納される。演算を完了後、最終デスティネーションレジスタ１１１０ａは、データ要素１１２０ａと１１３５ａを含む。この値は、次に、メモリ内に格納されうる。
【０１１８】
図１１ｂは、図１０に示す可変選択演算１０００のプロセスの少なくとも１つの特定実施形態の回路図を示す。図１１ｂに示すこの特定実施形態では、命令は、可変ＢＬＥＮＤパックド単精度浮動小数点値（ＢＬＥＮＤＶＰＳ）である。ＢＬＥＮＤＰＳ演算は、パックドデータであってもパックドデータでなくてもよい、１２８ビット長のソース１およびＤｅｓｔデータ値に対して行われる。さらに、当業者は、図１１ｂに示す演算は、より短いまたはより長い長さを含む他の長さのデータ値に対しても行われうることを認識する。
【０１１９】
図１１ｂを参照するに、ＢＬＥＮＤＶＰＳ演算では、ｘｍｍ１  １１０５ｂといったソースオペランドからの単精度浮動小数点値は、暗黙の第３のレジスタ、ｘｍｍ０  １１１５ｂにおけるＭＳＢに依存して、ｘｍｍ２  １１１０ｂといったデスティネーションオペランドに条件付きで書き込みされうる。第３のオペランドのレジスタ割り当ては、アーキテクチャレジスタＸＭＭ０でありうる。上述したように、各ソース１に対する暗黙の第３のレジスタにおけるＭＳＢが、デスティネーションオペランドにおける対応単精度浮動小数点値はソースオペランドから選択および／またはコピーされるか否かを決定する。マスクにおけるＭＳＢが「１」に対応する場合、倍精度浮動小数点値はＭＵＸ１１４０ｂにより選択されコピーされ、それ以外の場合、デスティネーションにおける値は変更されないままである。
【０１２０】
ＢＬＥＮＤＶＰＳは、パックド単精度浮動小数点要素の一タイプであるので、２８ビット長で、各ｘｍｍレジスタに対し４つの４２３データ要素を保持しうる。たとえば、ソースオペランド、ｘｍｍ１レジスタは、データ要素１１２０ｂ、１１２５ｂ、１１２６ｂ、および１１２７ｂを保持しうる。デスティネーションオペランド、ｘｍｍ２レジスタは、データ要素１１３０ｂ、１１３５ｂ、１１３６ｂ、および１１３７ｂを保持しうる。パックドシングル形式４２３の各データ要素は、３２ビットの情報を保持しうる。マルチプレクサ１１４０ｂは、ｘｍｍ１レジスタ１１０５ｂ内の各データ要素のレジスタ１１１５ｂにおけるＭＳＢに基づいて、デスティネーション値はｘｍｍ１レジスタ１１０５ｂから選択されるか否か選択する。
【０１２１】
図１１ｂを参照するに、演算が次のとおりである場合。すなわち、ＢＬＥＮＤＶＰＳ  ｘｍｍ１，ｘｍｍ２，＜ＸＭＭ０＞。この演算は、暗黙のレジスタＸＭＭ０におけるＭＳＢが「１」であるソースオペランドからのデータ要素を、デスティネーションレジスタに入れることを示す。レジスタＸＭＭ０  １１１７ａのＭＳＢはビット「０」を含むので、データ要素１１２７ｂは、ＭＵＸ１１４０ｂにより選択されない。デスティネーションレジスタの値１１３７ｂは変わらない。レジスタＸＭＭ０  １１１８ｂのＭＳＢはビット「１」を含むので、データ要素１１２６ｂはＭＵＸ１１４０ｂにより選択され、デスティネーションレジスタ１１１０ｂ内に格納される。デスティネーションレジスタの値１１３６ｂは、ソースオペランドにより置き換えられる。レジスタＸＭＭ０  １１１７ｂのＭＳＢは、ビット「０」を含み、データ要素１１２５ｂは、ＭＵＸ１１４０ｂにより選択されない。デスティネーションレジスタの値１１３５ｂは変わらない。最後に、レジスタＸＭＭ０  １１１６ｂのＭＳＢはビット「１」を含み、データ要素１１２０ｂが、ＭＵＸ１１４０ｂにより選択される。デスティネーションレジスタの値１１３０ｂは、ソースオペランドにより置き換えられる。演算を完了後、最終デスティネーションレジスタ１１１０ｂは、データ要素１１２０ｂ、１１３５ｂ、１１２ｂ、および１１３７ｂを含む。この値は、次に、メモリ内に格納されうる。
【０１２２】
図１１ｃは、図１０に示す可変選択演算１０００のプロセスの少なくとも１つの特定実施形態の回路図を示す。図１１ｃに示すこの特定実施形態では、命令は、可変ＢＬＥＮＤパックドバイト（ＰＢＬＥＮＤＶＢ）である。ＰＢＬＥＮＤＶＢ演算は、パックドデータであってもパックドデータでなくてもよい、１２８ビット長のソース１およびＤｅｓｔデータ値に対して行われる。さらに、当業者は、図１１ｃに示す演算は、より短いまたはより長い長さを含む他の長さのデータ値に対しても行われうることを認識する。
【０１２３】
図１１ｃを参照するに、ＰＢＬＥＮＤＶＢ演算では、ｘｍｍ１  １１０５ｃといったソースオペランドからのバイト値は、暗黙の第３のレジスタ、ｘｍｍ０  １１１５ｃにおけるＭＳＢに依存して、ｘｍｍ２  １１１０ｃといったデスティネーションオペランドに条件付きで書き込みされうる。第３のオペランドのレジスタ割り当ては、アーキテクチャレジスタＸＭＭ０でありうる。上述したように、各ソース１に対する暗黙の第３のレジスタにおけるＭＳＢが、デスティネーションオペランドにおける対応バイト値はソースオペランドから選択および／またはコピーされるか否かを決定する。マスクにおけるＭＳＢが「１」に対応する場合、バイト値はＭＵＸ１１４０ｃにより選択されてコピーされ、それ以外の場合、デスティネーションにおける値は変更されないままである。
【０１２４】
ＰＢＬＥＮＤＶＢは、パックドバイト要素の一タイプであるので、２８ビット長で、各ｘｍｍレジスタに対し１６のデータ要素を保持しうる。たとえば、ソースオペランド、ｘｍｍ１レジスタは、データ要素１１２０ｃ１乃至１１２０ｃ１６を保持しうる。ｃ１乃至ｃ１６は、レジスタｘｍｍ１  １１０５ｃの１６個のデータ要素と、レジスタｘｍｍ２  １１１０ｃの１６個のデータ要素と、１６個のマルチプレクサ１１４０ｃと、１６個の暗黙のレジスタＸＭＭ０  １１１５ｃを表す。
【０１２５】
デスティネーションオペランド、ｘｍｍ２レジスタは、データ要素１１３０ｃ１乃至１１３０ｃ１６を保持しうる。パックドバイト形式４２１の各データ要素は、１６ビットの情報を保持しうる。マルチプレクサ１１４０ｃは、ｘｍｍ１レジスタ１１０５ｃ内の各データ要素のレジスタ１１１５ｃにおけるＭＳＢに基づいて、デスティネーション値はｘｍｍ１レジスタ１１０５ｃから選択されるか否か選択する。
【０１２６】
図１１ｃを参照するに、演算が次のとおりである場合。すなわち、ＰＢＬＥＮＤＶＢ  ｘｍｍ１，ｘｍｍ２，＜ＸＭＭ０＞。この演算は、暗黙のレジスタＸＭＭ０におけるＭＳＢが「１」であるソースオペランドからのデータ要素を、デスティネーションレジスタに入れることを示す。上述したように、ソースオペランド１１２０ｃは、暗黙のレジスタ１１１５ｃにおけるＭＳＢに基づいてＭＵＸ１１４０ｃにより選択される。ＭＳＢが「１」である場合、ソースオペランドは選択され、デスティネーションレジスタ１１１０ｃ内にコピーされる。ＭＳＢが「０」である場合、デスティネーションレジスタは変わらない。次に、値は、メモリ内に格納される。
【０１２７】
図１２を参照するに、ＢＬＥＮＤ命令用の制御信号（演算コード）を符号化するために使用されうる演算コードのさまざまな実施形態を示す。図１２は、本発明の一実施形態による命令形式１２００を示す。命令形式１２００はさまざまなフィールドを含む。これらのフィールドは、プレフィックスフィールド１２１０、オペコードフィールド１２２０、およびオペランド指定子フィールド（例、ｍｏｄＲ／Ｍ、スケール−インデックス−ベース、ディスプレースメント、即値など）を含みうる。オペランド指定子フィールドは任意選択であり、ｍｏｄＲ／Ｍフィールド１２３０、ＳＩＢフィールド１２４０、ディスプレースメントフィールド１２５０、および即値フィールド１２６０を含む。
【０１２８】
当業者は、図１２に示す形式１２００は例示的であり、命令コードにおける他のデータ構成を、開示する実施形態に使用しうることを認識するであろう。たとえば、フィールド１２１０、１２２０、１２３０、１２４０、１２５０、１２６０は、図示するような順番で編成される必要はなく、互いに対して他の場所となるよう再編成されえ、また、連続する必要もない。さらに、本願で説明するフィールド長さも限定的に捉えるべきではない。特定のバイトメンバとして説明されるフィールドは、代替実施形態では、より大きいまたはより小さいフィールドとして実施されうる。「バイト」という用語は、本願では、８ビットでのグループ分けを示すよう使用しているが、他の実施形態では、４ビット、１６ビット、および３２ビットを含む任意の他のサイズでのグループ分けとして実施されうる。
【０１２９】
本願に使用するように、ＢＬＥＮＤ命令といった命令の特定のインスタンスのためのオペコードは、所望の演算を示すために、命令形式２００のフィールドにおいて特定の値を含みうる。このような命令は、時に、「実効命令」と称される。実効命令のビット値は、時に、本願において集合的に「命令コード」と称される。
【０１３０】
各命令コードに対して、対応する復号化された命令コードは、命令コードに応答して実行ユニット（たとえば、図１ａの１３０）により実行されるべき演算を一意に表す。復号化命令コードは、１つ以上のマイクロ演算を含みうる。
【０１３１】
オペコードフィールド１２２０の内容が、演算を指定する。少なくとも１つの実施形態では、本願に説明するＢＬＥＮＤ命令の実施形態のためのオペコードフィールド１２２０は、３バイト長である。オペコード１２２０は、１、２、または３バイトの情報を含みうる。少なくとも１つの実施形態では、オペコードフィールド１２２０の２バイト拡張フィールド１１８ｃにおける３バイト拡張オペコード値は、ＢＬＥＮＤ演算を指定するようオペコードフィールド１２２０の第３のバイト１２２５の内容と組み合わされる。この第３のバイト１２２５は、本願では、命令固有オペコードと称する。
【０１３２】
少なくとも１つの実施形態では、プレフィックス値０ｘ６６が、プレフィックスフィールド１２１０内に入れられ、また、所望の演算を定義するよう命令オペコードの一部として使用される。つまり、プレフィックス１２１０フィールドにおける値は、次に続くオペコードを限定するよう構成されるのではなく、オペコードの一部として復号化される。少なくとも１つの実施形態では、たとえば、プレフィックス値０ｘ６６は、ＢＬＥＮＤ命令のデスティネーションおよびソースオペランドは１２８ビットＩｎｔｅｌ（登録商標）ＳＳＥ２  ＸＭＭレジスタ内にあることを示すよう使用されうる。他のプレフィックスも同様に使用することができる。しかし、ＢＬＥＮＤ命令の少なくとも一部の実施形態では、プレフィックスは、オペコードを高める、または、一部の演算条件下においてオペコードを限定する従来の役割で使用しうる。
【０１３３】
命令形式の第１の実施形態１２２６および第２の実施形態１２２８は、ともに、３バイトの拡張オペコードフィールド１１８ｃおよび命令固有のオペコードフィールド１２２５を含む。３バイト拡張オペコードフィールド１１８ｃは、少なくとも１つの実施形態では、２バイトの長さである。命令形式１２２６は、３バイト拡張オペコードと呼ばれる４つの特殊拡張オペコードのうちの１つを使用する。３バイト拡張オペコードは、２バイトの長さであり、また、命令は、命令を定義するためにオペコードフィールド１２２０における第３のバイトを使用することをデコーダハードウェアに示す。３バイト拡張オペコードフィールド１１８ｃは、命令オペコードの中のどこに置かれてもよく、また、必ずしも命令内の最上位フィールドまたは最下位フィールドである必要はない。
【０１３４】
表１は、プレフィックスおよび３バイト拡張オペコードを使用するＢＬＥＮＤ命令の例を示す。
【０１３５】
【表１】
0005383021.tif 000002
【０１３６】
図７−１１に関連して上述したパックドＢＬＥＮＤ命令の少なくとも一部の実施形態の等価物を行うには、演算にマシンサイクル待ち時間を追加する追加の命令が必要である。たとえば、以下の表２に示す疑似コードは、このことを、ＢＬＥＮＤ命令を使用して説明する。
【０１３７】
【表２】
0005383021.tif 000003
【０１３８】
表２に示す疑似コードは、ＢＬＥＮＤ命令の説明した実施形態をソフトウェアコードのパフォーマンスを向上させるよう使用することができることを説明するのに役に立つ。その結果、ＢＬＥＮＤ命令は、以前に行われていたよりも大きい数のアルゴリズムのパフォーマンスを向上するよう汎用プロセッサにおいて使用することができる。
［代替実施形態］
【０１３９】
上述した実施形態は、ＭＳＢを使用して、パックド実施形態のさまざまなサイズのデータ要素に対してＢＬＥＮＤ命令を知らせるが、代替実施形態は、異なるサイズの入力、異なるサイズのデータ要素、および／または異なるビットの比較（たとえば、データ要素のＬＳＢ）を使用しうる。さらに、一部の説明した実施形態では、ソース１およびＤｅｓｔはそれぞれ１２８ビットのデータを含むが、代替実施形態は、より多くのまたはより少ないデータを有するパックドデータを処理しうる。たとえば、１つの代替実施形態は、６４ビットのデータを有するパックドデータを処理する。
【０１４０】
本発明を幾つかの実施形態に関して説明したが、当業者は、本発明はこれらの説明した実施形態に限定されないことを認識するであろう。本発明の方法および装置は、請求項の精神および範囲内の修正および変更を加えて実施することができる。したがって、説明は、本発明を限定するのではなく例示するものであるとみなすべきである。
【０１４１】
上述した説明は、本発明の好適な実施形態を説明することを目的とする。また、上述の説明から、成長が速く、更なる発展を容易に予測することができないこのような技術分野において、本発明は、請求項の範囲内の本発明の原理から逸脱することなく当業者によって構成および細部が変更されうることは明らかであるべきである。
【図面の簡単な説明】
【０１４２】
【図１ａ】本発明の代替実施形態による例示的コンピュータシステムを示す図である。
【０１４３】
【図１ｂ】本発明の代替実施形態による例示的コンピュータシステムを示す図である。
【０１４４】
【図１ｃ】本発明の代替実施形態による例示的コンピュータシステムを示す図である。
【０１４５】
【図２ａ】本発明の代替実施形態によるプロセッサのレジスタファイルを示す図である。
【０１４６】
【図２ｂ】本発明の代替実施形態によるプロセッサのレジスタファイルを示す図である。
【０１４７】
【図３】データを操作するようプロセッサにより行われるプロセスの少なくとも１つの実施形態を示すフロー図である。
【０１４８】
【図４】本発明の代替実施形態によるパックドデータタイプを示す図である。
【０１４９】
【図５】本発明の少なくとも１つの実施形態による、レジスタ内のパックドバイトデータ表現およびレジスタ内のパックドワードデータ表現を示す図である。
【０１５０】
【図６】本発明の少なくとも１つの実施形態による、レジスタ内のパックドダブルワードデータ表現およびレジスタ内のパックドクワドワードデータ表現を示す図である。
【０１５１】
【図７】選択演算を行うプロセスの一実施形態を示すフロー図である。
【０１５２】
【図８】即値選択演算を行うプロセスの一実施形態を示すフロー図である。
【０１５３】
【図９ａ】即値選択演算を行うための回路のさまざまな実施形態を示す図である。
【０１５４】
【図９ｂ】即値選択演算を行うための回路のさまざまな実施形態を示す図である。
【０１５５】
【図９ｃ】即値選択演算を行うための回路のさまざまな実施形態を示す図である。
【０１５６】
【図１０】可変選択演算を行うプロセスの一実施形態を示すフロー図である。
【０１５７】
【図１１ａ】可変選択演算を行うための回路のさまざまな実施形態を示す図である。
【０１５８】
【図１１ｂ】可変選択演算を行うための回路のさまざまな実施形態を示す図である。
【０１５９】
【図１１ｃ】可変選択演算を行うための回路のさまざまな実施形態を示す図である。
【０１６０】
【図１２】プロセッサ命令のための演算コード形式のさまざまな実施形態を示すブロック図である。
【符号の説明】
【０１６１】
１００  コンピュータシステム
１０１  相互接続部
１０２  データ処理システム
１０４  メインメモリ
１０６  ＲＯＭ
１０７  データストレージ装置
１０９  プロセッサ
１１０  処理コア
１１８ｃ  ３バイト拡張コード
１２１  ディスプレイ装置
１２１０  プレフィックス
１２２  入力装置
１２２０  オペコード
１２２６  オペコード
１２３  カーソルコントロール
１２３０  ＭＯＤ  Ｒ／Ｍ
１２４  ハードコピー装置
１２４０  ＳＩＢ
１２５  音声記録／再生装置
１２５０  ディスプレースメント
１２６  ビデオ
１２６０  即値
１３０  実行ユニット
１４２  ＢＬＥＮＤ命令
１５０  レジスタファイル
１６０  キャッシュ
１６５  デコーダ
１７０  内部相互接続部
１９０  通信装置
２０１  整数レジスタ
２０７  制御信号
２０８  ステータスレジスタ
２０９  レジスタ
２１０  拡張レジスタ
２１１  命令ポインタレジスタ
２１４  バス
２２４  メインプロセッサ
２２６  コプロセッサ
２７１  ＳＤＲＡＭコントロール
２７２  ＳＲＡＭコントロール
２７３  バーストフラッシュインタフェース
２７４  ＰＣＭＣＩＡ／ＣＦカードコントロール
２７５  ＬＣＤコントロール
２７６  ＤＭＡコントロール
２７７  代替バスマスタインタフェース
２７８  キャッシュ
２９０  Ｉ／Ｏブリッジ
２９１  ＵＡＲＴ
２９２  ＵＢＳ
２９３  ブルートゥースＵＡＲＴ
２９４  Ｉ／Ｏ拡張インタフェース
２９５  Ｉ／Ｏシステム
２９６  ワイヤレスインタフェース
４１２  ダブルクワドワード−１２８ビット
５１０  レジスタ内の符号なしパックドバイト表現
５１１  レジスタ内の符号付きパックドバイト表現
５１２  レジスタ内の符号なしパックドワード表現
５１３  レジスタ内の符号付きパックドワード表現
５１４  レジスタ内の符号なしパックドダブルワード表現
５１５  レジスタ内の符号付きパックドダブルワード表現
５１６  レジスタ内の符号なしパックドクワドワード表現
５１７  レジスタ内の符号付きパックドクワドワード表現
【図１ａ】
0005383021.tif 000004
【図１ｂ】
0005383021.tif 000005
【図１ｃ】
0005383021.tif 000006
【図２ａ】
0005383021.tif 000007
【図２ｂ】
0005383021.tif 000008
【図３】
0005383021.tif 000009
【図４】
0005383021.tif 000010
【図５】
0005383021.tif 000011
【図６】
0005383021.tif 000012
【図７】
0005383021.tif 000013
【図８】
0005383021.tif 000014
【図９ａ】
0005383021.tif 000015
【図９ｂ】
0005383021.tif 000016
【図９ｃ】
0005383021.tif 000017
【図１０】
0005383021.tif 000018
【図１１ａ】
0005383021.tif 000019
【図１１ｂ】
0005383021.tif 000020
【図１１ｃ】
0005383021.tif 000021
【図１２】
0005383021.tif 000022