説明

選択演算を実行する方法および装置

【課題】パックドデータおよび非パックドデータに選択演算を実行する命令をプロセッサ内に含む方法および装置を提供する。
【解決手段】プロセッサはメモリに結合される。メモリはその中に、ソースオペランド内の第1のパックドデータと、デスティネーションオペランド内の第2のパックドデータが格納される。プロセッサは、ソースオペランドの制御ビットが「1」に設定される場合に第1のパックドデータを選択し、そのデータをデスティネーションオペランド内に格納する。制御ビットが「1」に設定されない場合、プロセッサはデスティネーションオペランド内のデータを保持する。デスティネーションオペランドの最終値がメモリ内に格納される。

【発明の詳細な説明】
【背景技術】
【0001】
一般的なコンピュータシステムでは、プロセッサは、1つの結果を生成する複数の命令を使用して多数のビット(例、64)により表される値を処理するよう実装される。たとえば、加算命令の実行は、第1の64ビット値と第2の64ビット値を足し、その結果を第3の64ビット値として保存する。マルチメディアアプリケーション(例、コンピュータ支援協力(computer supported cooperation:CSC−電話会議の様々なメディアデータ操作との統合)、2D/3Dグラフィックス、画像処理、ビデオ圧縮/解凍、認識アルゴリズム、およびオーディオ操作を対象とするアプリケーション)は、大量のデータの操作を必要とする。データは、単一の大きい値(例、64ビットまたは128ビット)により表現されうるが、少数のビット(例、8、16、または32ビット)で表現されてもよい。たとえば、グラフィカルデータは、8または16ビットで表現されえ、音データは、8または16ビットで表現されえ、整数データは、8、16、または32ビットで表現されえ、浮動小数点データは、32または64ビットで表現されうる。
【0002】
マルチメディアアプリケーション(および同様の特徴を有する他のアプリケーション)の効率を向上するために、プロセッサは、パックドデータ形式を提供しうる。パックドデータ形式は、単一値を表すよう一般的に使用されるビットが、幾つかの固定サイズのデータ要素に分割され、データ要素はそれぞれ、別個の値を表すような形式である。たとえば、128ビットレジスタは、4つの32ビット要素に分割されえ、要素はそれぞれ、別個の32ビット値を表す。このように、このようなプロセッサは、マルチメディアアプリケーションをより効率よく処理することができる。
【発明を実施するための最良の形態】
【0003】
本発明を、例示的且つ非限定的に添付図面において説明する。
【0004】
本願には、制御信号に応答して複数ビットのデータに対して選択演算を行う命令をプロセッサ内に含むための方法、システム、および回路の実施形態を開示する。選択演算に関連するデータは、パックドデータまたは非パックドデータでありうる。少なくとも1つの実施形態では、プロセッサはメモリに結合される。メモリには、その中に第1のデータおよび第2のデータが格納される。プロセッサは、命令の受信に応答して第1のデータおよび第2のデータ内のデータ要素に対して選択演算を行い、その結果を制御信号に基づいて第2のデータ内に格納する。
【0005】
本発明のこれらのおよび他の実施形態は、以下の教示内容に従って実現されうる。また、本発明の広い精神および範囲から逸脱することなく以下の教示内容において様々な修正および変更を加えうることは明らかであるべきである。したがって、明細書および図面は、限定的な意味合いではなく例示的に解釈されるべきであり、また、本発明は、請求項によってのみ判定されるべきである。
[コンピュータシステム]
【0006】
図1aは、本発明の一実施形態による例示的コンピュータシステム100を示す。コンピュータシステム100は、情報を通信するための相互接続部101を含む。相互接続部101は、マルチドロップバス、1つ以上のポイントツーポイント相互接続部、またはこれら2つの任意の組み合わせ、並びに任意の他の通信ハードウェアおよび/またはソフトウェアを含みうる。
【0007】
図1aは、相互接続部101に結合される、情報処理のためのプロセッサ109を示す。プロセッサ109は、CISCまたはRISCタイプのアーキテクチャを含む任意のタイプのアーキテクチャの中央演算処理ユニットを表す。
【0008】
コンピュータシステム100はさらに、情報およびプロセッサ109により実行される命令を格納するために相互接続部101に結合されるランダムアクセスメモリ(RAM)または他のダイナミックストレージ装置(メインメモリ104と称する)を含む。メインメモリ104はさらに、プロセッサ109による命令の実行時に一時変数または他の中間情報を格納するために使用されうる。
【0009】
コンピュータシステム100はさらに、静的情報およびプロセッサ109用の命令を格納するために相互接続部101に結合される読み出し専用メモリ(ROM)106、および/または他の静的ストレージ装置を含む。データストレージ装置107は、情報および命令を格納するために相互接続部101に結合される。
【0010】
図1aはさらに、プロセッサ109が、実行ユニット130、レジスタファイル150、キャッシュ160、デコーダ165、および内部相互接続部170を含むことを示す。当然ながら、プロセッサ109は、本発明の理解には必要ではない追加回路を含む。
【0011】
デコーダ165は、プロセッサ109により受信された命令を復号化し、実行ユニット130は、プロセッサ109により受信された命令を実行する。一般的に汎用プロセッサで実施される命令の認識に加えて、デコーダ165および実行ユニット130は、本願に説明するように、条件付きコピー演算(BLENDS)演算を行う命令を認識する。デコーダ165および実行ユニット130は、パックドデータおよび非パックドデータの両方に対してBLEND演算を行う命令を認識する。
【0012】
実行ユニット130は、内部相互接続部170によりレジスタファイル150に結合される。ここでも、内部相互接続部170は、必ずしもマルチドロップバスである必要はなく、代替実施形態では、ポイントツーポイント相互接続部または他のタイプの通信路でありうる。
【0013】
レジスタファイル150は、データを含む情報を格納するためのプロセッサ109のストレージ領域を表す。本発明の一面は、パックドデータおよび非パックドデータに対してBLEND演算を行うよう説明する命令の実施形態であることを理解するものとする。本発明のこの一面では、データを格納するために使用されるストレージ領域は重要ではない。しかし、レジスタファイル150の実施形態は、図2a−2bを参照しながら後述する。
【0014】
実行ユニット130は、キャッシュ160およびデコーダ165に結合される。キャッシュ160は、たとえば、メインメモリ104からのデータおよび/または制御信号を格納するよう使用される。デコーダ165は、プロセッサ109により受信された命令を、制御信号および/またはマイクロコードエントリポイントに復号化するよう使用される。これらの制御信号および/またはマイクロコードエントリポイントは、デコーダ165から実行ユニット130に転送されうる。これらの制御信号および/またはマイクロコードエントリポイントに応答して、実行ユニット130は、適切な演算を行う。
【0015】
デコーダ165は、任意の数のさまざまなメカニズム(例、ルックアップテーブル、ハードウェア実装、PLAなど)を使用して実施されうる。したがって、デコーダ165および実行ユニット130によるさまざまな命令の実行は、本願では、一連のif/then文により表されうるが、命令の実行には、これらのif/then文の順次処理を必要としないことを理解するものとする。むしろ、このif/then処理を論理的に実行する任意のメカニズムが本発明の範囲内であると考える。
【0016】
図1aはさらに、コンピュータシステム100に結合することのできるデータストレージ装置107(例、磁気ディスク、光ディスク、および/または他の機械可読媒体)を示す。さらに、データストレージ装置107は、プロセッサ109により実行されるコード195を含むよう示される。コード195は、BLEND命令142の1つ以上の実施形態を含むことができ、また、さまざまな目的(例、動画ビデオ圧縮/解凍、画像フィルタリング、オーディオ信号圧縮、フィルタリングまたは合成、変調/復調など)のために、プロセッサ109が、BLEND命令142にビットテストを行うよう書き込みされることができる。
【0017】
コンピュータシステム100はさらに、コンピュータユーザに情報を表示するために、相互接続部101を介して、ディスプレイ装置121に結合されうる。ディスプレイ装置121は、フレームバッファ、特殊グラフィックレンダリング装置、液晶ディスプレイ(LCD)、および/またはフラットパネルディスプレイを含むことができる。
【0018】
英数字キーおよび他のキーを含む入力装置122は、プロセッサ109に情報およびコマンド選択を通信するために相互接続部101に結合されうる。別のタイプのユーザ入力装置は、プロセッサ109に方向情報およびコマンド選択を通信し、ディスプレイ装置121上のカーソル動作を制御するマウス、トラックボール、ペン、タッチスクリーン、またはカーソル方向キーといったカーソルコントロール123である。この入力装置は、一般的に、2つの軸、すなわち、第1の軸(例、x)および第2の軸(例、y)の方向における2つの自由度を有し、これにより、入力装置が平面における位置を特定することができるようにする。しかし、本発明は、2つの自由度しかない入力装置に限定されるべきではない。
【0019】
相互接続部101に結合されうる別の装置は、紙、フィルム、または似たようなタイプの媒体といった媒体上に命令、データ、および他の情報を印刷するために使用されうるハードコピー装置124である。さらに、コンピュータシステム100は、情報を記録するためにマイクロホンに結合されるオーディオデジタイザといったような音声記録および/または再生装置125に結合されることができる。さらに、装置125は、デジタル化音声を再生するためにデジタルからアナログ(D/A)に変換する変換器に結合されるスピーカを含みうる。
【0020】
コンピュータシステム100は、コンピュータネットワーク(例、LAN)における端末でありうる。その場合、コンピュータシステム100は、コンピュータネットワークのコンピュータサブシステムでありうる。コンピュータシステム100は、任意選択的に、ビデオデジタル化装置126および/または通信装置190(例、外部装置またはネットワークとの通信を供給する、シリアル通信チップ、ワイヤレスインタフェース、イーサネット(登録商標)チップ、またはモデム)を含む。ビデオデジタル化装置126は、コンピュータネットワーク上の他の装置に伝送可能なビデオ画像を捕捉するよう使用することができる。
【0021】
少なくとも1つの実施形態では、プロセッサ109は、カリフォルニア州サンタクララのインテル社で製造される既存のプロセッサ(例、Intel(登録商標)Pentium(登録商標)プロセッサ、Intel(登録商標)Pentium(登録商標)プロプロセッサ、Intel(登録商標)Pentium(登録商標)IIプロセッサ、Intel(登録商標)Pentium(登録商標)IIIプロセッサ、Intel(登録商標)Pentium(登録商標)4プロセッサ、Intel(登録商標)Itanium(登録商標)プロセッサ、Intel(登録商標)Itanium(登録商標)2プロセッサ、またはIntel(登録商標)Core(登録商標)デュオプロセッサ)により使用される命令セットと互換性がある命令セットをサポートする。その結果、プロセッサ109は、本発明の演算に加えて既存のプロセッサの演算をサポートすることができる。プロセッサ109はさらに、1つ以上の処理技法での製造に適しており、また、機械可読媒体上に十分に詳細に表現されることにより、その製造を容易にするのに適しうる。本発明は、以下において、x86ベースの命令セットに組み込まれるように説明されるが、代替実施形態では、本発明を他の命令セットに組み込みうる。たとえば、本発明は、x86ベース命令セット以外の命令セットを使用して64ビットプロセッサに組み込まれうる。
【0022】
図1bは、本発明の原理を実施するデータ処理システム102の代替実施形態を示す。データ処理システム102の一実施形態は、Intel(登録商標)XScale(登録商標)技術を使用したアプリケーションプロセッサである。当業者には、本願に記載する実施形態は、本発明の範囲から逸脱することなく代替処理システムとともに使用することができることは容易に明らかであろう。
【0023】
コンピュータシステム102は、BLEND演算を実行することのできる処理コア110を含む。一実施形態では、処理コア110は、以下に限定されないが、CISC、RISC、またはVLIWタイプのアーキテクチャを含む任意のタイプのアーキテクチャの処理ユニットを表す。処理コア110は、1つ以上の処理技法での製造に適しており、また、機械可読媒体上に十分に詳細に表現されることにより、その製造を容易にするのに適しうる。
【0024】
処理コア110は、実行ユニット130、レジスタファイルのセット150、およびデコーダ165を含む。処理コア110はさらに、本発明の理解には必要ではない追加回路(図示せず)を含む。
【0025】
実行ユニット130は、処理コア110により受信される命令を実行するために使用される。一般的なプロセッサ命令の認識に加えて、実行ユニット130は、パックドデータおよび非パックドデータ形式に対してBLEND演算を実行する命令を認識する。デコーダ165および実行ユニット130により認識される命令セットは、BLEND演算のための1つ以上の命令を含み、また、他のパックド命令も含みうる。
【0026】
実行ユニット130は、内部バス(ここでも、マルチドロップバス、ポイントツーポイント相互接続部などを含む任意のタイプの通信路でありうる)によりレジスタファイル150に結合される。レジスタファイル150は、データを含む情報を格納するための処理コア110のストレージ領域を表す。上述したように、データを格納するために使用するストレージ領域は重要ではない。実行ユニット130は、デコーダ165に結合される。デコーダ165は、処理コア110により受信される命令を、制御信号および/またはマイクロコードエントリポイントに復号化するよう使用される。これらの制御信号および/またはマイクロコードエントリポイントに応答して。これらの制御信号および/またはマイクロコードエントリポイントは、実行ユニット130に転送されうる。実行ユニット130は、制御信号および/またはマイクロコードエントリポイントに応答して、適切な演算を実行しうる。少なくとも1つの実施形態では、たとえば、実行ユニット130は、本願に記載する論理比較を実行しうる。また、実行ユニット130はさらに、本願に記載するようなステータスフラグまたはブランチを特定のコードロケーションに対して設定するか、または、両方を設定しうる。
【0027】
処理コア110は、さまざまな他のシステム装置と通信するためにバス214に結合される。他のシステム装置は、以下に限定されないが、たとえば、同期ダイナミックランダムアクセスメモリ(SDRAM)コントロール271、スタティックランダムアクセスメモリ(SRAM)コントロール272、バーストフラッシュメモリインタフェース273、パーソナルコンピュータメモリカード国際協会(PCMCIA)/コンパクトフラッシュ(CF)(登録商標)カードコントロール274、液晶ディスプレイ(LCD)コントロール275、直接メモリアクセス(DMA)コントローラ276、および代替バスマスタインタフェース277を含みうる。
【0028】
少なくとも1つの実施形態では、データ処理システム102はさらに、I/Oバス295を介してさまざまなI/O装置と通信するためにI/Oブリッジ290を含む。I/O装置は、以下に限定されないが、たとえば、汎用非同期受信/送信器(UART)291、汎用シリアルバス(USB)292、ブルートゥース(登録商標)ワイヤレスUART293、およびI/O拡張インタフェース294を含みうる。上述した他のバスと同様に、I/Oバス295は、マルチドロップバス、ポイントツーポイント相互接続部などを含む任意のタイプの通信路でありうる。
【0029】
データ処理システム102の少なくとも1つの実施形態は、モバイル、ネットワーク、および/またはワイヤレス通信を提供し、また、処理コア110は、パックドデータおよび非パックドデータの両方にBLEND演算を実行することができる。処理コア110は、離散変換、フィルタまたは畳み込み、色空間変換といった圧縮/解凍技術、ビデオ符号動き推定またはビデオ復号動き補正、パルス符号変調(PCM)といった変調/復調(MODEM)機能を含むさまざまなオーディオ、ビデオ、イメージング、および通信アルゴリズムでプログラムされうる。
【0030】
図1cは、パックドデータおよび非パックドデータに対してBLEND演算を実行することのできるデータ処理システム103の代替実施形態を示す。1つの代替実施形態によると、データ処理システム103は、メインプロセッサ224と1つ以上のコプロセッサ226を含むチップパッケージ310を含みうる。追加コプロセッサ226の任意選択性は、図1cに破線によって示す。1つ以上のコプロセッサ226は、たとえば、SIMD命令を実行することのできるグラフィックコプロセッサでありうる。
【0031】
図1cは、データ処理システム103はさらに、ともにチップパッケージ310に結合されるキャッシュメモリ278および入力/出力システム265を含みうることを示す。入力/出力システム295は、任意選択的に、ワイヤレスインタフェース296に結合されうる。
【0032】
コプロセッサ226は、一般的な計算演算を実行することができ、またさらに、SIMD演算を実行することができる。少なくとも1つの実施形態では、コプロセッサ226は、パックドデータまたは非パックドデータに対してBLEND演算を実行することができる。
【0033】
少なくとも1つの実施形態では、コプロセッサ226は、実行ユニット130とレジスタファイル209を含む。メインプロセッサ224の少なくとも1つの実施形態は、実行ユニット130により実行されるBLEND命令を含む命令セットの命令を認識且つ復号化するデコーダ165を含む。代替実施形態では、コプロセッサ226はさらに、BLEND命令を含む命令セットの命令を復号化するデコーダの少なくとも一部166を含む。データ処理システム103はさらに、本発明の理解には必要ではない追加回路(図示せず)を含む。
【0034】
動作時には、メインプロセッサ224は、キャッシュメモリ278および入力/出力システム295とのインタラクションを含む一般タイプのデータ処理演算を制御するデータ処理命令のストリームを実行する。データ処理命令のストリームには、コプロセッサ命令が組み込まれる。メインプロセッサ224のデコーダ165は、これらのコプロセッサ命令を、付属コプロセッサ226により実行されるべきタイプであると認識する。したがって、メインプロセッサ224は、これらのコプロセッサ命令(またはコプロセッサ命令を表す制御信号)をコプロセッサ相互接続部236に発行する。これらの命令は、コプロセッサ相互接続部236から任意の付属コプロセッサにより受信される。図1cに示す単一コプロセッサ実施形態では、コプロセッサ226は、コプロセッサ226を対象とする任意の受信コプロセッサ命令を受け取りおよび実行する。コプロセッサ相互接続部は、マルチドロップバス、ポイントツーポイント相互接続部などを含む任意のタイプの通信路でありうる。
【0035】
データは、コプロセッサ命令による処理のためにワイヤレスインタフェース296を介して受信されうる。一例として、音声通信がデジタル信号形式で受信されうる。このデジタル信号は、音声通信を表すデジタルオーディオサンプルを再生するようコプロセッサ命令により処理されうる。別の例として、圧縮されたオーディオおよび/またはビデオがデジタルビットストリーム形式で受信されうる。このデジタルビットストリームは、デジタルオーディオサンプルおよび/または動画ビデオフレームを再生するようコプロセッサ命令により処理されうる。
【0036】
少なくとも1つの代替実施形態では、メインプロセッサ224およびコプロセッサ226は、実行ユニット130により実行されるBLEND命令を含む命令セットの命令を認識するよう実行ユニット130、レジスタファイル209、およびデコーダ165を含む単一処理コアに組み込まれうる。
【0037】
図2aは、本発明の一実施形態によるプロセッサのレジスタファイルを示す。レジスタファイル150は、制御/ステータス情報、整数データ、浮動小数点データ、およびパックドデータを含む情報を格納するために使用されうる。当業者は、上述の情報およびデータのリストは、すべてを網羅するリストではないことを認識するであろう。
【0038】
図2aに示す実施形態では、レジスタファイル150は、整数レジスタ201、レジスタ209、ステータスレジスタ208、および命令ポインタレジスタ211を含む。ステータスレジスタ208は、プロセッサ109のステータスを示し、また、さまざまなステータスレジスタを含みうる。命令ポインタレジスタ211は、実行されるべき次の命令のアドレスを格納する。整数レジスタ201、レジスタ209、ステータスレジスタ208、および命令ポインタレジスタ211は、すべて内部相互接続部170に結合される。追加のレジスタも、内部相互接続部170に結合されうる。内部相互接続部170は、マルチドロップバスでありうるが、必ずしもマルチドロップバスである必要はない。内部相互接続部170は、ポイントツーポイント相互接続部を含む任意の他のタイプの通信路でありうる。
【0039】
一実施形態では、レジスタ209は、パックドデータおよび浮動小数点データの両方に使用されうる。そのような一実施形態では、プロセッサ109は、いつもでレジスタ209を、スタック参照浮動小数点レジスタまたは非スタック参照パックドデータレジスタとして取り扱う。この実施形態では、プロセッサ109が、スタック参照浮動小数点レジスタおよび非スタック参照パックドデータレジスタとしてレジスタ209に対する処理を切り替えることを可能にするメカニズムが含まれる。もう1つのそのような実施形態では、プロセッサ109は、非スタック参照浮動小数点レジスタおよびパックドデータレジスタとしてレジスタ209に対して同時に処理しうる。もう1つの例として、別の実施形態では、これらの同様のレジスタは、整数データを格納するために使用されうる。
【0040】
当然ながら、代替実施形態は、より多くのレジスタセットまたはより少ないレジスタセットを含むよう実施されうる。たとえば、代替実施形態は、浮動小数点データを格納するために別個の浮動小数点レジスタのセットを含みうる。もう1つの例として、代替実施形態は、それぞれ制御/ステータス情報を格納するための第1のレジスタセットと、それぞれ整数、浮動小数点、およびパックドデータを格納することのできる第2のレジスタセットを含みうる。明確にすることを目的として、実施形態のレジスタは、特定のタイプの回路を意味すると限定すべきではない。むしろ、一実施形態のレジスタは、データを格納および供給し、また、本願に記載する機能を実行することさえできればよい。
【0041】
さまざまなレジスタセット(例、整数レジスタ201、レジスタ209)は、さまざまな数のレジスタおよび/またはさまざまなサイズのレジスタを含むよう実施されうる。たとえば、一実施形態では、整数レジスタ201は、32ビットを格納するよう実施され、一方でレジスタ209は、80ビットを格納するよう実施されうる(すべての80ビットは、浮動小数点データを格納するよう使用され、一方で、64ビットのみがパックドデータに使用される)。さらに、レジスタ209は、8個のレジスタ、R212a乃至R212hを含みうる。R212b、R212c、およびR212dは、レジスタ209における個々のレジスタの例である。レジスタ209における1つのレジスタの32ビットは、整数レジスタ201内の1つの整数レジスタに移動させることができる。同様に、整数レジスタにおける値は、レジスタ209内の1つのレジスタの32ビットに移動させることができる。別の実施形態では、整数レジスタ201はそれぞれ64ビットを含み、64ビットのデータは、整数レジスタ201とレジスタ209間で移動させられうる。別の代替実施形態では、レジスタ209はそれぞれ64ビットを含み、レジスタ209は16個のレジスタを含む。さらに別の代替実施形態では、レジスタ209は32個のレジスタを含む。
【0042】
図2bは、本発明の一代替実施形態によるプロセッサのレジスタファイルを示す。レジスタファイル150は、制御/ステータス情報、整数データ、浮動小数点データ、およびパックドデータを含む情報を格納するために使用されうる。図2bに示す実施形態では、レジスタファイル150は、整数レジスタ201、レジスタ209、ステータスレジスタ208、拡張レジスタ210、および命令ポインタレジスタ211を含む。ステータスレジスタ208、命令ポインタレジスタ211、整数レジスタ201、レジスタ209はすべて内部相互接続部170に結合される。さらに、拡張レジスタ210も内部相互接続部170に結合される。内部相互接続部170はマルチドロップバスでありうるが、必ずしもマルチドロップバスである必要はない。内部相互接続部170は、ポイントツーポイント相互接続部を含む任意の他のタイプの通信路でありうる。
【0043】
少なくとも1つの実施形態では、拡張レジスタ210は、パックされた整数データおよびパックされた浮動小数点データの両方に使用される。代替実施形態では、拡張レジスタ210は、スカラーデータ、パックドブールデータ、パックド整数データ、および/またはパックド浮動小数点データに使用されうる。当然ながら、代替実施形態は、本発明の広い範囲から逸脱することなく、より多くのまたはより少ないレジスタセット数、各セットにおいてより多くのまたはより少ないレジスタ数、または各レジスタにおいてより多くのまたはより少ないデータストレージビット数を含むよう実施されうる。
【0044】
少なくとも1つの実施形態では、整数レジスタ201は、32ビットを格納するよう実施され、レジスタ209は、80ビットを格納するよう実施され(すべての80ビットは、浮動小数点データを格納するよう使用され、一方で、64のみがパックドデータに使用される)、拡張レジスタ210は、128ビットを格納するよう実施される。さらに、拡張レジスタ210は、8個のレジスタ、XR213a乃至XR213hを含みうる。XR213a、XR213b、およびXR213cは、レジスタ210における個々のレジスタの例である。別の実施形態では、整数レジスタ201はそれぞれ64ビットを含み、拡張レジスタ210はそれぞれ64ビットを含み、拡張レジスタ210は16個のレジスタを含む。一実施形態では、拡張レジスタ210のうちの2つのレジスタは、ペアとして処理されうる。さらに別の代替実施形態では、拡張レジスタ210は32個のレジスタを含む。
【0045】
図3は、本発明の一実施形態による、データを操作するプロセス300の一実施形態のフロー図を示す。つまり、図3は、パックドデータにBLEND演算を行う、非パックドデータにBLEND演算を行う、または一部の他の演算を行う際に、たとえば、プロセッサ109(たとえば図1aを参照)により行われるプロセスを示す。プロセス300および本願に開示する他のプロセスは、汎用マシーン、特殊用途向けマシーン、またはそれらの組み合わせにより実行されることのできる専用ハードウェア、ソフトウェア、またはファームウェア演算コードを含みうる処理工程により行われる。
【0046】
図3は、この方法の処理は、「開始」で始まり、処理工程301に進むことを示す。処理工程301では、デコーダ165(たとえば図1a参照)は、キャッシュ160(たとえば図1a参照)または相互接続部101(たとえば図1a参照)から制御信号を受信する。工程301において受信された制御信号は、少なくとも1つの実施形態では、ソフトウェア「命令」と一般的に称される1つのタイプの制御信号でありうる。デコーダ165は、行われるべき演算を決定するために制御信号を復号化する。処理は、処理工程301から処理工程302に進む。
【0047】
処理工程302では、デコーダ165は、レジスタファイル150(たとえば図1a参照)か、メモリ(たとえば図1aのメインメモリ104またはキャッシュメモリ160参照)における1つのロケーションにアクセスする。レジスタファイル150におけるレジスタ、またはメモリ内のメモリロケーションは、制御信号内に指定されるレジスタアドレスに依存してアクセスされる。たとえば、1つの演算のための制御信号は、SRC1、SRC2、およびDESTレジスタアドレスを含むことができる。SRC1は、第1のソースレジスタのアドレスである。SRC2は、第2のソースレジスタのアドレスである。一部の場合では、すべての演算が2つのソースアドレスを必要とするわけではないので、SRC2アドレスはオプションである。演算にSRC2アドレスが必要ではない場合、SRC1アドレスだけが使用される。DESTは、結果データが格納されるデスティネーションレジスタのアドレスである。少なくとも1つの実施形態では、SRC1またはSRC2は、デコーダ165により認識される少なくとも1つの制御信号においてDESTとしても使用されうる。
【0048】
対応レジスタに格納されるデータは、ソース1、ソース2、および結果とそれぞれ称される。一実施形態では、これらのデータのそれぞれは、64ビット長でありうる。代替実施形態では、これらのデータのうちの1つ以上は、128ビット長といったように他の長さでありうる。
【0049】
本発明の別の実施形態では、SRC1、SRC2、およびDESTのうちいずれかまたはすべては、プロセッサ109(図1a)または処理コア110(図1b)のアドレス指定可能なメモリ空間におけるメモリロケーションを定義することができる。たとえば、SRC1は、メインメモリ104におけるメモリロケーションを特定し、一方でSRC2は、整数レジスタ201における第1のレジスタを特定し、DESTは、レジスタ209における第2のレジスタを特定しうる。本願の説明を簡単にすることを目的として、本発明は、レジスタファイル150にアクセスすることに関連して説明する。しかし、当業者は、ここに説明するアクセスは、メモリに行われてもよいことを認識するであろう。
【0050】
処理は、工程302から処理工程303に進む。処理工程303では、実行ユニット130(たとえば図1a参照)は、アクセスしたデータに対する処理を実行するよう有効にされる。
【0051】
処理は、処理工程303から処理工程304に進む。処理工程304では、結果が、制御信号の要件に応じて、レジスタファイル150またはメモリに戻されて格納される。処理は、次に、「停止」において終了する。
[データストレージ形式]
【0052】
図4は、本発明の一実施形態によるパックドデータタイプを示す。4つのパックドデータ形式と1つの非パックドデータ形式を示す。データ形式には、パックドバイト421、パックドハーフ422、パックドシングル423、パックドダブル424、および非パックドダブルクワドワード412が含まれる。
【0053】
パックドバイト形式421は、少なくとも1つの実施形態では、128ビット長で、16個のデータ要素(B0−B15)を含む。各データ要素(B0−B15)は、1バイト(例、8ビット)長である。
【0054】
パックドハーフ形式422は、少なくとも1つの実施形態では、128ビット長で、8個のデータ要素(ハーフ0乃至ハーフ7)を含む。各データ要素(ハーフ0乃至ハーフ7)は、16ビットの情報を保持しうる。各16ビットデータ要素は、あるいは、「ハーフワード」または「ショートワード」、または単に「ワード」と称されうる。
【0055】
パックドシングル形式423は、少なくとも1つの実施形態では、128ビット長で、4つの423データ要素(シングル0乃至シングル3)を保持しうる。各データ要素(シングル0乃至シングル3)は、32ビットの情報を保持しうる。各32ビットデータ要素は、あるいは、「dワード」または「ダブルワード」と称されうる。各データ要素(シングル0乃至シングル3)は、たとえば、32ビット単精度(single precision)浮動小数点値を表しうる。ここから、用語「パックドシングル(packed single)」形式としている。
【0056】
パックドダブル形式424は、少なくとも1つの実施形態では、128ビット長で、2つのデータ要素を保持しうる。パックドダブル形式424の各データ要素(ダブル0、ダブル1)は、64ビットの情報を保持しうる。各64ビットデータ要素は、あるいは、「qワード」または「クワドワード」と称されうる。各データ要素(ダブル0、ダブル1)は、たとえば、64ビット倍精度(double precision)浮動小数点値を表しうる。ここから、用語「パックドダブル(packed double)」形式としている。
【0057】
非パックドダブルクワドワード形式412は、最大128ビットのデータを保持しうる。データは必ずしもパックドデータである必要はない。少なくとも1つの実施形態では、たとえば、非パックドダブルクワドワード形式412の128ビットの情報は、文字、整数、浮動小数点値、またはバイナリビットマスク値といった単一のスカラーデータを表しうる。あるいは、非パックドダブルクワドワード形式412の128ビットは、(各ビットまたはビットセットが異なるフラグを表すステータスレジスタ値といったような)非関連のビットの集合などを表しうる。
【0058】
本発明の少なくとも1つの実施形態では、パックドシングル423形式およびパックドダブル424形式のデータ要素は、上述したようにパックド浮動小数点データ要素でありうる。本発明の代替実施形態では、パックドシングル423形式およびパックドダブル424形式のデータ要素は、パックド整数データ要素、パックドブールデータ要素、またはパックド浮動小数点データ要素でありうる。本発明の別の実施形態では、パックドバイト421形式、パックドハーフ422形式、パックドシングル423形式、およびパックドダブル424形式のデータ要素は、パックド整数データ要素、または、パックドブールデータ要素でありうる。本発明の代替実施形態では、パックドバイト421データ形式、パックドハーフ422データ形式、パックドシングル423データ形式、およびパックドダブル424データ形式のすべてが許可またはサポートされうるわけではない。
【0059】
図5および6は、本発明の少なくとも1つの実施形態による、レジスタ内のパックドデータストレージ表現を示す。
【0060】
図5は、レジスタ内の符号なしパックドバイト形式510と、レジスタ内の符号付きパックドバイト形式511をそれぞれ示す。レジスタ内符号なしパックドバイト表現510は、たとえば、128ビット拡張レジスタXR213a乃至XR213h(たとえば図2b参照)のうちの1つにおける符号なしパックドバイトデータのストレージを示す。16個のバイトデータ要素のそれぞれに対する情報は、バイト0についてはビット7からビット0に、バイト1についてはビット15からビット8に、バイト2についてはビット23からビット16に、バイト3についてはビット31からビット24に、バイト4についてはビット39からビット32に、バイト5についてはビット47からビット40に、バイト6についてはビット55からビット48に、バイト7についてはビット63からビット56に、バイト8についてはビット71からビット64に、バイト9についてはビット79からビット72に、バイト10についてはビット87からビット80に、バイト11についてはビット95からビット88に、バイト12についてはビット103からビット96に、バイト13についてはビット111からビット104に、バイト14についてはビット119からビット112に、および、バイト15についてはビット127からビット120に格納される。
【0061】
したがって、すべての利用可能なビットはレジスタ内で使用される。このストレージの配置は、プロセッサのストレージ効率を向上する。さらに、16個のデータ要素がアクセスされることによって、1つの演算が、16個のデータ要素に対して同時に行われることができるようになる。
【0062】
レジスタ内符号付きパックドバイト表現511は、符号付きパックドバイトのストレージを示す。なお、各バイトデータ要素の8番目のビット(MSB)は、符号指示子(「s」)である。
【0063】
図5はさらに、レジスタ内の符号なしパックドワード表現512と、レジスタ内の符号付きパックドワード表現513をそれぞれ示す。
【0064】
レジスタ内符号なしパックドワード表現512は、拡張レジスタ210が、8個のワード(それぞれ16ビット)データ要素を格納する方法を示す。ワード0は、レジスタのビット15からビット0に格納される。ワード1は、レジスタのビット31からビット16に格納される。ワード2は、レジスタのビット47からビット32に格納される。ワード3は、レジスタのビット63からビット48に格納される。ワード4は、レジスタのビット79からビット64に格納される。ワード5は、レジスタのビット95からビット80に格納される。ワード6は、レジスタのビット111からビット96に格納される。ワード7は、レジスタのビット127からビット112に格納される。
【0065】
レジスタ内符号付きパックドワード表現513は、レジスタ内符号なしパックドワード表現512に類似する。なお、符号ビット(「s」)は、各ワードデータ要素の16番目のビット(MSB)に格納される。
【0066】
図6は、レジスタ内の符号なしパックドダブルワード形式514と、レジスタ内の符号付きパックドダブルワード形式515をそれぞれ示す。レジスタ内符号なしパックドダブルワード表現514は、拡張レジスタ210が、4つのダブルワード(それぞれ32ビット)データ要素を格納する方法を示す。ダブルワード0は、レジスタのビット31からビット0に格納される。ダブルワード1は、レジスタのビット63からビット32に格納される。ダブルワード2は、レジスタのビット95からビット64に格納される。ダブルワード3は、レジスタのビット127からビット96に格納される。
【0067】
レジスタ内符号付きパックドダブルワード表現515は、レジスタ内符号なしパックドクワドワード表現516に類似する。なお、符号ビット(「s」)は、各ダブルワードデータ要素の32番目のビット(MSB)である。
【0068】
図6はさらに、レジスタ内の符号なしパックドクワドワード形式516と、レジスタ内の符号付きパックドクワドワード形式517をそれぞれ示す。レジスタ内符号なしパックドクワドワード表現516は、拡張レジスタ210が、2つのクワドワード(それぞれ64ビット)データ要素を格納する方法を示す。クワドワード0は、レジスタのビット63からビット0に格納される。クワドワード1は、レジスタのビット127からビット64に格納される。
【0069】
レジスタ内符号付きパックドクワドワード表現517は、レジスタ内符号なしパックドクワドワード表現516に類似する。なお、符号ビット(「s」)は、各クワドワードデータ要素の64番目のビット(MSB)である。
[BLEND演算]
【0070】
図7は、本発明の少なくとも1つの実施形態によるBLEND演算を実行する一般的な方法700を示すフローチャートである。プロセス700および本願に開示する他のプロセスは、汎用マシーン、特殊用途向けマシーン、またはそれらの組み合わせにより実行することのできる専用ハードウェア、ソフトウェア、またはファームウェア演算コードを含みうる処理工程により実行される。
【0071】
図7は、この方法は、「開始」で始まり、処理工程705に進むことを示す。処理工程705では、デコーダ165は、プロセッサ109により受信される制御信号を復号化する。したがって、デコーダ165は、BLEND命令用の演算コードを復号化する。処理は、次に、処理工程705から処理工程710に進む。
【0072】
処理工程710では、内部バス170を介して、デコーダ165は、命令内に符号化されるSRC1アドレスおよびDESTアドレスが与えられることによりレジスタファイル150内のレジスタ209にアクセスする。少なくとも1つの実施形態では、命令内に符号化されるアドレスはそれぞれ拡張レジスタ(たとえば、図2bの拡張レジスタ210を参照)を示す。このような実施形態では、工程710において、指示された拡張レジスタ210が、実行ユニット130にSRC1レジスタ(ソース1)内に格納されるデータとDESTレジスタ(Dest)内に格納されるデータを供給するようアクセスされる。少なくとも1つの実施形態では、拡張レジスタ210は、これらのデータを、内部バス170を介して実行ユニット130に通信する。
【0073】
処理は、処理工程710から処理工程715に進む。処理工程715において、デコーダ165は、命令を実行するよう実行ユニット130を有効にする。少なくとも1つの実施形態では、そのような有効化715は、所望の演算(BLEND)を指示するよう実行ユニットに1つ以上の制御信号を送ることにより行われる。
【0074】
処理は、処理工程715から処理工程720に進む。処理工程720では、命令内に格納されるデータは、所望の演算により獲得される。
【0075】
処理は、処理工程720から処理工程725に進む。処理工程725では、プロセッサは、当該のデータ要素に対して制御ビットが「1」に設定されているか否かを判断する。データ要素は、データストレージ形式に基づいて異なりうる。図4に示すように、さまざまなパックドデータタイプがある。
【0076】
パックドバイト形式421は、少なくとも1つの実施形態では、128ビット長で、16個のデータ要素(B0−B15)を含む。各データ要素(B0−B15)は、1バイト(例、8ビット)長である。
【0077】
パックドハーフ形式422は、少なくとも1つの実施形態では、128ビット長で、8個のデータ要素(ハーフ0乃至ハーフ7)を含む。各データ要素(ハーフ0乃至ハーフ7)は、16ビットの情報を保持しうる。各16ビットデータ要素は、あるいは、「ハーフワード」または「ショートワード」、または単に「ワード」と称されうる。
【0078】
パックドシングル形式423は、少なくとも1つの実施形態では、128ビット長で、4つの423データ要素(シングル0乃至シングル3)を保持しうる。各データ要素(シングル0乃至シングル3)は、32ビットの情報を保持しうる。各32ビットデータ要素は、あるいは、「dワード」または「ダブルワード」と称されうる。各データ要素(シングル0乃至シングル3)は、たとえば、32ビット単精度(single precision)浮動小数点値を表しうる。ここから、用語「パックドシングル(packed single)」形式としている。
【0079】
パックドダブル形式424は、少なくとも1つの実施形態では、128ビット長で、2つのデータ要素を保持しうる。パックドダブル形式424の各データ要素(ダブル0、ダブル1)は、64ビットの情報を保持しうる。各64ビットデータ要素は、あるいは、「qワード」または「クワドワード」と称されうる。各データ要素(ダブル0、ダブル1)は、たとえば、64ビット倍精度(double precision)浮動小数点値を表しうる。ここから、用語「パックドダブル(packed double)」形式としている。
【0080】
本発明の少なくとも1つの実施形態では、パックドシングル423形式およびパックドダブル424形式のデータ要素は、上述したようにパックド浮動小数点データ要素でありうる。本発明の代替実施形態では、パックドシングル423形式およびパックドダブル424形式のデータ要素は、パックド整数データ要素、パックドブールデータ要素、またはパックド浮動小数点データ要素でありうる。
【0081】
本発明の少なくとも1つの実施形態では、制御ビットとは、データ要素のMSBを指しうる。MSBは、符号指示子または符号ビットとも知られうる。たとえば、各バイトデータ要素の8番目のビット(MSB)は符号指示子であり、各ワードデータ要素の16番目のビット(MSB)は符号ビットであり、各ダブルワードデータ要素の32番目のビット(MSB)は符号ビットであり、各クワドワードデータ要素の64番目のビット(MSB)は符号ビットである。
【0082】
ソース1データ要素の制御ビットが「1」である場合、処理は、処理工程730に進む。処理工程730では、マルチプレクサが、制御ビット「1」を有するソース1データ要素を選択する。マルチプレクサの数は、命令の粒度に依存する。SRC1内のデータ要素は、DEST内にコピーされる。処理は、処理工程735に進む。処理工程735では、メモリが、DESTレジスタに対して選択されるデータ要素を格納する。格納後、処理は終了する。
【0083】
制御ビットが「0」である場合、処理は終了する。DEST内のデータ要素はそのままでコピーされない。
[即値BLEND演算]
【0084】
図8は、図7に示す一般的な方法700の即値選択演算800のためのプロセスの少なくとも1つの実施形態のフロー図を示す。図8に示す特定の実施形態800では、即値BLEND演算は、パックドデータであってもパックドデータでなくてもよい、128ビット長のソース1およびDestデータ値に対して行われる。さらに、当業者は、図8に示す演算は、より短いまたはより長い長さを含む他の長さのデータ値に対しても行われうることを認識する。
【0085】
即値BLEND命令は、バイト、ワード、またはダブルワードマスクではなくビットマスクを使用する。ビットマスクを使用することによって、(64または128ビットではなく)小さい即値オペランドを可能にし、それにより、より小さいコードサイズおよびより効率のよい復号化が行われる。
【0086】
方法800の処理工程805乃至820は、図7に示す方法700に関連して上述した処理工程705乃至720と本質的に同様に処理される。工程815において、デコーダ165が、命令を行うよう実行ユニット130を有効にする場合、命令は、ソース1およびDest値の各データ要素を選択するBLEND命令である。
【0087】
処理は、処理工程820から処理工程825に進む。処理工程825では、以下が行われる。
【0088】
即値BLEND命令のニーモニックは次のとおりである。すなわち、BLEND xmm1,xmm2/m128,imm8。命令は、3つのオペランドを必要とする。第1のオペランドはソースオペランドでありえ、第2のオペランドはデスティネーションオペランドでありえ、第3のオペランドは即値ビットでありうる。即値BLEND命令は、ビットマスクに基づいてソース1(xmm1)およびDest(xmm2)から値を選択する。ビットマスクは、データ要素の即値フィールドに格納されるビットでありうる。即値ビット(Ib[])は、制御目的に使用され、命令内に符号化され、また、制御ビットとして使用されうる。
【0089】
処理は、処理工程825から処理工程830に進む。処理工程830では、ソース1の即値ビットにおけるビットマスクが「1」である場合、ソース1からの入力がマルチプレクサにより選択される。上述したように、マルチプレクサの数は、命令の粒度に依存する。処理は次に処理工程835に進む。処理工程835では、選択された入力は、最終Destに格納される。したがって、ソース1の即値ビットが「1」である場合、そのデータ値は、最終Destに格納される。
【0090】
ソース1の即値ビットにおけるビットマスクが「0」である場合、処理は、処理工程825から「停止」に進み、この場合、Destにおける値には変更はない。ソース1データ値は、Dest内に格納されない。
【0091】
即値BLEND命令は、即値オペランドを使用するので、スタティックマスクパターンを使用するグラフィックアプリケーションが、パターンデータのための任意のロードを必要とすることなく符号化されることを可能にする。たとえば、パターは、パワーポイント、テクスチャマッピング、水面で光る日光、または他のアニメーション効果といったグラフィックアプリケーションの代わりとなる。
【0092】
即値BLEND命令は、複数のコンポーネントが異なるように処理される必要があり、パターンが事前に周知である結果を迅速にパッキングできるようにする。たとえば、複雑な数または赤−緑−青−アルファピクセル形式である。
【0093】
有利には、即値BLEND命令は、マスクを設定するのにロード演算または比較演算を必要としないので、命令は2倍速く処理しうる。
【0094】
図9aは、図8に示す即値選択演算800のプロセスの少なくとも1つの特定実施形態の回路図を示す。図9aに示すこの特定実施形態では、命令は、BLENDパックド倍精度浮動小数点値(BLENDPD)である。BLENDPD演算は、パックドデータであってもパックドデータでなくてもよい、128ビット長のソース1およびDestデータ値に対して行われる。さらに、当業者は、図9aに示す演算は、より短いまたはより長い長さを含む他の長さのデータ値に対しても行われうることを認識する。
【0095】
図9aを参照するに、BLENDPD演算では、xmm1 905aといったソースオペランドからの倍精度浮動小数点値は、即値オペランド915aにおけるビットに依存して、xmm2 910aといったデスティネーションオペランドに条件付きで書き込みされうる。上述したように、即値ビットが、デスティネーションオペランドにおける対応倍精度浮動小数点値はソースオペランドから選択および/またはコピーされるか否かを決定する。1ワードに対応するマスク内の即値ビットが「1」である場合、倍精度浮動小数点値は選択および/またはコピーされ、それ以外の場合、デスティネーションにおける値は変更されないままである。
【0096】
BLENDPDは、パックド倍精度浮動小数点要素の一タイプであるので、28ビット長で、各xmmレジスタに対し2つのデータ要素を保持しうる。たとえば、ソースオペランド、xmm1レジスタは、データ要素920aおよび925aを保持しえ、デスティネーションオペランド、xmm2レジスタは、データ要素930aおよび935aを保持しうる。パックドダブル形式424の各データ要素は、64ビットの情報を保持しうる。このインスタンスの即値ビットは、各データ要素のIb[]915aである。マルチプレクサ940aは、xmm1レジスタ905内の各データ要素の即値ビット915aに基づいて、デスティネーション値がxmm1レジスタ905aからコピーされるか否か選択する。
【0097】
図9aを参照するに、演算が次のとおりである場合。すなわち、BLENDPD xmm1,xmm2,01b。この演算は、即値ビットが「1」であるソースオペランドからのデータ要素を、デスティネーションレジスタに入れることを示す。Ib[0]915aはビット「1」を含むので、データ要素925aは、MUX940aにより選択され、デスティネーションレジスタ910a内に格納される。Ib[1]915aはビット「0」を含むので、データ要素930aは、デスティネーションレジスタ910a内で同じままである。演算を完了後、最終デスティネーションレジスタ910aは、データ要素930aおよび925aを含む。この値は、次に、メモリ内に格納されうる。
【0098】
図9bは、図8に示す即値選択演算800のプロセスの少なくとも1つの特定実施形態の回路図を示す。図9bに示すこの特定実施形態では、命令は、BLENDパックド単精度浮動小数点値(BLENDPS)である。BLENDPS演算は、パックドデータであってもパックドデータでなくてもよい、128ビット長のソース1およびDestデータ値に対して行われる。さらに、当業者は、図9bに示す演算は、より短いまたはより長い長さを含む他の長さのデータ値に対しても行われうることを認識する。
【0099】
図9bを参照するに、BLENDPS演算では、xmm1 905bといったソースオペランドからの単精度浮動小数点値は、即値オペランド915bにおけるビットに依存して、xmm2 910bといったデスティネーションオペランドに条件付きで書き込みされうる。上述したように、即値ビットが、デスティネーションオペランドにおける対応倍精度浮動小数点値はソースオペランドから選択および/またはコピーされるか否かを決定する。1ワードに対応するマスク内の即値ビットが「1」である場合、倍精度浮動小数点値は、MUX940bにより選択されてコピーされ、それ以外の場合、デスティネーションにおける値は変更されないままである。
【0100】
BLENDPSは、パックド単精度浮動小数点要素の一タイプであるので、28ビット長で、各xmmレジスタに対し4つの423データ要素を保持しうる。たとえば、ソースオペランド、xmm1レジスタは、データ要素920b、925b、926b、および927bを保持しうる。デスティネーションオペランド、xmm2レジスタは、データ要素930b、935b、936b、および937bを保持しうる。パックドシングル形式423の各データ要素は、32ビットの情報を保持しうる。このインスタンスの即値ビットは、各データ要素のIb[]915bである。マルチプレクサ940bは、xmm1レジスタ905b内の各データ要素の即値ビット915bに基づいて、デスティネーション値がxmm1レジスタ905bからコピーされるか否か選択する。
【0101】
図9bを参照するに、演算が次のとおりである場合。すなわち、BLENDPS xmm1,xmm2,0101b。この演算は、即値ビットが「1」であるソースオペランドからのデータ要素を、デスティネーションレジスタに入れることを示す。Ib[0]915bはビット「1」を含むので、データ要素927bは選択され、デスティネーションレジスタ910b内に格納される。Ib[1]915bはビット「0」を含むので、データ要素936bは、デスティネーションレジスタ910b内で同じままである。Ib[2]915bはビット「1」を含み、データ要素925bは選択され、デスティネーションレジスタ910b内に格納される。最後にIb[3]915bはビット「0」を含み、データ要素930bは、デスティネーションレジスタ910b内で同じままである。演算を完了後、最終デスティネーションレジスタ910bは、データ要素930b、925b、936b、および927bを含む。この値は、次に、メモリ内に格納されうる。
【0102】
図9cは、図8に示す即値選択演算800のプロセスの少なくとも1つの特定実施形態の回路図を示す。図9cに示すこの特定実施形態では、命令は、BLENDパックドワード(PBLENDDW)である。PBLENDDW演算は、パックドデータであってもパックドデータでなくてもよい、128ビット長のソース1およびDestデータ値に対して行われる。さらに、当業者は、図9cに示す演算は、より短いまたはより長い長さを含む他の長さのデータ値に対しても行われうることを認識する。
【0103】
図9cを参照するに、PBLENDDW演算では、xmm1 905cといったソースオペランドからのワード値は、即値オペランド915cにおけるビットに依存して、xmm2 910cといったデスティネーションオペランドに条件付きで書き込みされうる。上述したように、即値ビットが、デスティネーションオペランドにおける対応ワード値はソースオペランドからマルチプレクサにより選択されるか否かを決定する。1ワードに対応するマスクにおける即値ビットが「1」である場合、ワード値は選択および/またはコピーされ、それ以外の場合、デスティネーションにおける値は変更されないままである。
【0104】
PBLENDDWは、パックドワード要素の一タイプであるので、28ビット長で、各xmmレジスタに対し8つのデータ要素を保持しうる。たとえば、ソースオペランド、xmm1レジスタは、データ要素920c、925c、926c、927c、928c、929c、921c、および922cを保持しうる。デスティネーションオペランド、xmm2レジスタは、データ要素930c、935c、936c、937c、938c、939c、931c、および932cを保持しうる。パックドダブル形式422の各データ要素は、16ビットの情報を保持しうる。このインスタンスの即値ビットは、各データ要素のIb[]915cである。マルチプレクサ940cは、xmm1レジスタ905c内の各データ要素の即値ビット915cに基づいて、デスティネーション値がxmm1レジスタ905cからコピーされるか否か選択する。
【0105】
図9cを参照するに、演算が次のとおりである場合。すなわち、PBLENDDW xmm1,xmm2,00001111b。この演算は、即値ビットが「1」であるソースオペランドからのデータ要素を、デスティネーションレジスタに入れることを示す。Ib[0]915cはビット「1」を含むので、データ要素922cはMUX940cにより選択され、デスティネーションレジスタ910c内に格納される。Ib[1]915cはビット「1」を含むので、データ要素921cはMUX940cにより選択され、デスティネーションレジスタ910c内に格納される。Ib[2]915cはビット「1」を含むので、データ要素929cはMUX940cにより選択され、デスティネーションレジスタ910c内に格納される。Ib[3]915cはビット「1」を含むので、データ要素928cはMUX940cにより選択され、デスティネーションレジスタ910c内に格納される。Ib[4]915cはビット「0」を含むので、データ要素937cは、デスティネーションレジスタ910c内で変わらないままである。Ib[5]915cはビット「0」を含むので、データ要素936cは、デスティネーションレジスタ910c内で変わらないままである。Ib[6]915cはビット「0」を含むので、データ要素935cは、デスティネーションレジスタ910c内で変わらないままである。Ib[7]915cはビット「0」を含むので、データ要素930cは、デスティネーションレジスタ910c内で変わらないままである。演算を完了後、最終デスティネーションレジスタ910cは、データ要素930c、935c、936c、937c、928c、929c、921c、および922cを含む。この値は、次に、メモリ内に格納されうる。
[可変BLEND演算]
【0106】
図10は、図7に示す一般的な方法700の即値選択演算1000のためのプロセスの少なくとも1つの実施形態のフロー図を示す。図10に示す特定の実施形態1000では、可変BLEND演算が、パックドデータであってもパックドデータでなくてもよい、128ビット長のソース1およびDestデータ値に対して行われる。さらに、当業者は、図10に示す演算は、より短いまたはより長い長さを含む他の長さのデータ値に対しても行われうることを認識する。さらに、可変BLEND命令は、各データ要素につき、符号ビットまたは最上位ビット(MSB)を使用する。
【0107】
方法1000の処理工程1005乃至1020は、図7に示す方法700に関連して上述した処理工程705乃至720と本質的に同様に処理される。工程1015において、デコーダ165が、命令を行うよう実行ユニット130を有効にする場合、命令は、ソース1およびDest値の各データ要素を選択するBLEND命令である。
【0108】
処理は、処理工程1020から処理工程1025に進む。処理工程1025では、以下が行われる。
【0109】
可変BLEND命令のニーモニックは次のとおりである。すなわち、BLEND xmm1,xmm2/m128,<XMM0>。命令は、3つのオペランドを必要とする。第1のオペランドはソースオペランドでありえ、第2のオペランドはデスティネーションオペランドでありえ、第3のオペランドは制御レジスタでありうる。可変BLEND命令は、暗黙のレジスタ、xmm0における最上位ビットに基づいてソース1(xmm1)およびDest(xmm2)から値を選択する。制御は、各フィールドのMSBによる。フィールド幅は、命令タイプのフィールドに対応する。
【0110】
処理は、処理工程1025から処理工程1030に進む。処理工程1030では、ソース1のxmm0レジスタにおけるMSBが「1」である場合、ソース1からの入力がマルチプレクサにより選択される。上述したように、マルチプレクサの数は、命令の粒度に依存する。処理は次に処理工程1035に進む。処理工程1035では、選択された入力が、最終Destに格納される。したがって、ソース1のMSBが「1」である場合、そのデータ値は、最終Destに格納される。
【0111】
ソース1のMSBが「0」である場合、処理は、処理工程1025から「停止」に進み、この場合、Destにおける値には変更はない。ソース1データ値は、Dest内に格納されない。
【0112】
可変BLEND演算は、各フィールドのMSBを使用するので、任意の算術結果(浮動小数点または整数)を、マスクとして使用することを可能にする。可変BLEND演算はさらに、比較結果を使用することを可能にする(たとえば、32ビットの小数点zバッファ演算を、32ビットピクセルをマスクするよう使用することができる)。
【0113】
有利に、可変BLEND演算は、マスクが複数の目的(アニメーション効果など)のために設計されることを可能にする。最上位ビットを最初に使用し、次にマスクを左にシフトして第2の最上位ビットを使用し、次に第3の最上位ビットを使用し、以下同様に続ける。この技法を使用することにより、マスクの予め計算されるシーケンス、ロード演算、およびストレージを大幅に減らすことができる。
【0114】
図11aは、図10に示す可変選択演算1000のプロセスの少なくとも1つの特定実施形態の回路図を示す。図11aに示すこの特定実施形態では、命令は、可変BLENDパックド倍精度浮動小数点値(BLENDVPD)である。BLENDVPD演算は、パックドデータであってもパックドデータでなくてもよい、128ビット長のソース1およびDestデータ値に対して行われる。さらに、当業者は、図11aに示す演算は、より短いまたはより長い長さを含む他の長さのデータ値に対しても行われうることを認識する。
【0115】
図11aを参照するに、BLENDVPD演算では、xmm1 1105aといったソースオペランドからの倍精度浮動小数点値は、暗黙の第3のレジスタ、xmm0 1115aにおけるMSBに依存して、xmm2 1110aといったデスティネーションオペランドに条件付きで書き込みされうる。第3のオペランドのレジスタ割り当ては、アーキテクチャレジスタXMM0でありうる。上述したように、各ソース1に対する暗黙の第3のレジスタにおけるMSBが、デスティネーションオペランドにおける対応倍精度浮動小数点値はソースオペランドから選択および/またはコピーされるか否かを決定する。マスクにおけるMSBが「1」に対応する場合、倍精度浮動小数点値は選択および/またはコピーされ、それ以外の場合、デスティネーションにおける値は変更されないままである。
【0116】
BLENDVPDは、パックド倍精度浮動小数点要素の一タイプであるので、28ビット長で、各xmmレジスタに対し2つのデータ要素を保持しうる。たとえば、ソースオペランド、xmm1レジスタ1105aは、データ要素1120aと1125aを保持しえ、デスティネーションオペランド、xmm2レジスタ1110aは、データ要素1130aと1135aを保持しうる。パックドダブル形式424の各データ要素は、64ビットの情報を保持しうる。マルチプレクサ1140aは、xmm1レジスタ1105内の各データ要素のレジスタ1115aにおけるMSBに基づいて、デスティネーション値がxmm1レジスタ1105aから選択されるか否か選択する。
【0117】
図11aを参照するに、演算が次のとおりである場合。すなわち、BLENDVPD xmm1,xmm2,<XMM0>。この演算は、暗黙のレジスタXMM0におけるMSBが「1」であるソースオペランドからのデータ要素を、デスティネーションレジスタに入れることを示す。レジスタXMM0 1117aのMSBはビット「0」を含むので、データ要素1125aは、MUX1140aにより選択されない。レジスタxmm2 1110aにおけるデータ要素1135aは、デスティネーションレジスタ内に残る。しかし、レジスタXMM0 1116aのMSBはビット「1」を含み、データ要素1120aはMUX1140aにより選択され、デスティネーションレジスタ1110a内に格納される。演算を完了後、最終デスティネーションレジスタ1110aは、データ要素1120aと1135aを含む。この値は、次に、メモリ内に格納されうる。
【0118】
図11bは、図10に示す可変選択演算1000のプロセスの少なくとも1つの特定実施形態の回路図を示す。図11bに示すこの特定実施形態では、命令は、可変BLENDパックド単精度浮動小数点値(BLENDVPS)である。BLENDPS演算は、パックドデータであってもパックドデータでなくてもよい、128ビット長のソース1およびDestデータ値に対して行われる。さらに、当業者は、図11bに示す演算は、より短いまたはより長い長さを含む他の長さのデータ値に対しても行われうることを認識する。
【0119】
図11bを参照するに、BLENDVPS演算では、xmm1 1105bといったソースオペランドからの単精度浮動小数点値は、暗黙の第3のレジスタ、xmm0 1115bにおけるMSBに依存して、xmm2 1110bといったデスティネーションオペランドに条件付きで書き込みされうる。第3のオペランドのレジスタ割り当ては、アーキテクチャレジスタXMM0でありうる。上述したように、各ソース1に対する暗黙の第3のレジスタにおけるMSBが、デスティネーションオペランドにおける対応単精度浮動小数点値はソースオペランドから選択および/またはコピーされるか否かを決定する。マスクにおけるMSBが「1」に対応する場合、倍精度浮動小数点値はMUX1140bにより選択されコピーされ、それ以外の場合、デスティネーションにおける値は変更されないままである。
【0120】
BLENDVPSは、パックド単精度浮動小数点要素の一タイプであるので、28ビット長で、各xmmレジスタに対し4つの423データ要素を保持しうる。たとえば、ソースオペランド、xmm1レジスタは、データ要素1120b、1125b、1126b、および1127bを保持しうる。デスティネーションオペランド、xmm2レジスタは、データ要素1130b、1135b、1136b、および1137bを保持しうる。パックドシングル形式423の各データ要素は、32ビットの情報を保持しうる。マルチプレクサ1140bは、xmm1レジスタ1105b内の各データ要素のレジスタ1115bにおけるMSBに基づいて、デスティネーション値はxmm1レジスタ1105bから選択されるか否か選択する。
【0121】
図11bを参照するに、演算が次のとおりである場合。すなわち、BLENDVPS xmm1,xmm2,<XMM0>。この演算は、暗黙のレジスタXMM0におけるMSBが「1」であるソースオペランドからのデータ要素を、デスティネーションレジスタに入れることを示す。レジスタXMM0 1117aのMSBはビット「0」を含むので、データ要素1127bは、MUX1140bにより選択されない。デスティネーションレジスタの値1137bは変わらない。レジスタXMM0 1118bのMSBはビット「1」を含むので、データ要素1126bはMUX1140bにより選択され、デスティネーションレジスタ1110b内に格納される。デスティネーションレジスタの値1136bは、ソースオペランドにより置き換えられる。レジスタXMM0 1117bのMSBは、ビット「0」を含み、データ要素1125bは、MUX1140bにより選択されない。デスティネーションレジスタの値1135bは変わらない。最後に、レジスタXMM0 1116bのMSBはビット「1」を含み、データ要素1120bが、MUX1140bにより選択される。デスティネーションレジスタの値1130bは、ソースオペランドにより置き換えられる。演算を完了後、最終デスティネーションレジスタ1110bは、データ要素1120b、1135b、112b、および1137bを含む。この値は、次に、メモリ内に格納されうる。
【0122】
図11cは、図10に示す可変選択演算1000のプロセスの少なくとも1つの特定実施形態の回路図を示す。図11cに示すこの特定実施形態では、命令は、可変BLENDパックドバイト(PBLENDVB)である。PBLENDVB演算は、パックドデータであってもパックドデータでなくてもよい、128ビット長のソース1およびDestデータ値に対して行われる。さらに、当業者は、図11cに示す演算は、より短いまたはより長い長さを含む他の長さのデータ値に対しても行われうることを認識する。
【0123】
図11cを参照するに、PBLENDVB演算では、xmm1 1105cといったソースオペランドからのバイト値は、暗黙の第3のレジスタ、xmm0 1115cにおけるMSBに依存して、xmm2 1110cといったデスティネーションオペランドに条件付きで書き込みされうる。第3のオペランドのレジスタ割り当ては、アーキテクチャレジスタXMM0でありうる。上述したように、各ソース1に対する暗黙の第3のレジスタにおけるMSBが、デスティネーションオペランドにおける対応バイト値はソースオペランドから選択および/またはコピーされるか否かを決定する。マスクにおけるMSBが「1」に対応する場合、バイト値はMUX1140cにより選択されてコピーされ、それ以外の場合、デスティネーションにおける値は変更されないままである。
【0124】
PBLENDVBは、パックドバイト要素の一タイプであるので、28ビット長で、各xmmレジスタに対し16のデータ要素を保持しうる。たとえば、ソースオペランド、xmm1レジスタは、データ要素1120c1乃至1120c16を保持しうる。c1乃至c16は、レジスタxmm1 1105cの16個のデータ要素と、レジスタxmm2 1110cの16個のデータ要素と、16個のマルチプレクサ1140cと、16個の暗黙のレジスタXMM0 1115cを表す。
【0125】
デスティネーションオペランド、xmm2レジスタは、データ要素1130c1乃至1130c16を保持しうる。パックドバイト形式421の各データ要素は、16ビットの情報を保持しうる。マルチプレクサ1140cは、xmm1レジスタ1105c内の各データ要素のレジスタ1115cにおけるMSBに基づいて、デスティネーション値はxmm1レジスタ1105cから選択されるか否か選択する。
【0126】
図11cを参照するに、演算が次のとおりである場合。すなわち、PBLENDVB xmm1,xmm2,<XMM0>。この演算は、暗黙のレジスタXMM0におけるMSBが「1」であるソースオペランドからのデータ要素を、デスティネーションレジスタに入れることを示す。上述したように、ソースオペランド1120cは、暗黙のレジスタ1115cにおけるMSBに基づいてMUX1140cにより選択される。MSBが「1」である場合、ソースオペランドは選択され、デスティネーションレジスタ1110c内にコピーされる。MSBが「0」である場合、デスティネーションレジスタは変わらない。次に、値は、メモリ内に格納される。
【0127】
図12を参照するに、BLEND命令用の制御信号(演算コード)を符号化するために使用されうる演算コードのさまざまな実施形態を示す。図12は、本発明の一実施形態による命令形式1200を示す。命令形式1200はさまざまなフィールドを含む。これらのフィールドは、プレフィックスフィールド1210、オペコードフィールド1220、およびオペランド指定子フィールド(例、modR/M、スケール−インデックス−ベース、ディスプレースメント、即値など)を含みうる。オペランド指定子フィールドは任意選択であり、modR/Mフィールド1230、SIBフィールド1240、ディスプレースメントフィールド1250、および即値フィールド1260を含む。
【0128】
当業者は、図12に示す形式1200は例示的であり、命令コードにおける他のデータ構成を、開示する実施形態に使用しうることを認識するであろう。たとえば、フィールド1210、1220、1230、1240、1250、1260は、図示するような順番で編成される必要はなく、互いに対して他の場所となるよう再編成されえ、また、連続する必要もない。さらに、本願で説明するフィールド長さも限定的に捉えるべきではない。特定のバイトメンバとして説明されるフィールドは、代替実施形態では、より大きいまたはより小さいフィールドとして実施されうる。「バイト」という用語は、本願では、8ビットでのグループ分けを示すよう使用しているが、他の実施形態では、4ビット、16ビット、および32ビットを含む任意の他のサイズでのグループ分けとして実施されうる。
【0129】
本願に使用するように、BLEND命令といった命令の特定のインスタンスのためのオペコードは、所望の演算を示すために、命令形式200のフィールドにおいて特定の値を含みうる。このような命令は、時に、「実効命令」と称される。実効命令のビット値は、時に、本願において集合的に「命令コード」と称される。
【0130】
各命令コードに対して、対応する復号化された命令コードは、命令コードに応答して実行ユニット(たとえば、図1aの130)により実行されるべき演算を一意に表す。復号化命令コードは、1つ以上のマイクロ演算を含みうる。
【0131】
オペコードフィールド1220の内容が、演算を指定する。少なくとも1つの実施形態では、本願に説明するBLEND命令の実施形態のためのオペコードフィールド1220は、3バイト長である。オペコード1220は、1、2、または3バイトの情報を含みうる。少なくとも1つの実施形態では、オペコードフィールド1220の2バイト拡張フィールド118cにおける3バイト拡張オペコード値は、BLEND演算を指定するようオペコードフィールド1220の第3のバイト1225の内容と組み合わされる。この第3のバイト1225は、本願では、命令固有オペコードと称する。
【0132】
少なくとも1つの実施形態では、プレフィックス値0x66が、プレフィックスフィールド1210内に入れられ、また、所望の演算を定義するよう命令オペコードの一部として使用される。つまり、プレフィックス1210フィールドにおける値は、次に続くオペコードを限定するよう構成されるのではなく、オペコードの一部として復号化される。少なくとも1つの実施形態では、たとえば、プレフィックス値0x66は、BLEND命令のデスティネーションおよびソースオペランドは128ビットIntel(登録商標)SSE2 XMMレジスタ内にあることを示すよう使用されうる。他のプレフィックスも同様に使用することができる。しかし、BLEND命令の少なくとも一部の実施形態では、プレフィックスは、オペコードを高める、または、一部の演算条件下においてオペコードを限定する従来の役割で使用しうる。
【0133】
命令形式の第1の実施形態1226および第2の実施形態1228は、ともに、3バイトの拡張オペコードフィールド118cおよび命令固有のオペコードフィールド1225を含む。3バイト拡張オペコードフィールド118cは、少なくとも1つの実施形態では、2バイトの長さである。命令形式1226は、3バイト拡張オペコードと呼ばれる4つの特殊拡張オペコードのうちの1つを使用する。3バイト拡張オペコードは、2バイトの長さであり、また、命令は、命令を定義するためにオペコードフィールド1220における第3のバイトを使用することをデコーダハードウェアに示す。3バイト拡張オペコードフィールド118cは、命令オペコードの中のどこに置かれてもよく、また、必ずしも命令内の最上位フィールドまたは最下位フィールドである必要はない。
【0134】
表1は、プレフィックスおよび3バイト拡張オペコードを使用するBLEND命令の例を示す。
【0135】
【表1】

【0136】
図7−11に関連して上述したパックドBLEND命令の少なくとも一部の実施形態の等価物を行うには、演算にマシンサイクル待ち時間を追加する追加の命令が必要である。たとえば、以下の表2に示す疑似コードは、このことを、BLEND命令を使用して説明する。
【0137】
【表2】

【0138】
表2に示す疑似コードは、BLEND命令の説明した実施形態をソフトウェアコードのパフォーマンスを向上させるよう使用することができることを説明するのに役に立つ。その結果、BLEND命令は、以前に行われていたよりも大きい数のアルゴリズムのパフォーマンスを向上するよう汎用プロセッサにおいて使用することができる。
[代替実施形態]
【0139】
上述した実施形態は、MSBを使用して、パックド実施形態のさまざまなサイズのデータ要素に対してBLEND命令を知らせるが、代替実施形態は、異なるサイズの入力、異なるサイズのデータ要素、および/または異なるビットの比較(たとえば、データ要素のLSB)を使用しうる。さらに、一部の説明した実施形態では、ソース1およびDestはそれぞれ128ビットのデータを含むが、代替実施形態は、より多くのまたはより少ないデータを有するパックドデータを処理しうる。たとえば、1つの代替実施形態は、64ビットのデータを有するパックドデータを処理する。
【0140】
本発明を幾つかの実施形態に関して説明したが、当業者は、本発明はこれらの説明した実施形態に限定されないことを認識するであろう。本発明の方法および装置は、請求項の精神および範囲内の修正および変更を加えて実施することができる。したがって、説明は、本発明を限定するのではなく例示するものであるとみなすべきである。
【0141】
上述した説明は、本発明の好適な実施形態を説明することを目的とする。また、上述の説明から、成長が速く、更なる発展を容易に予測することができないこのような技術分野において、本発明は、請求項の範囲内の本発明の原理から逸脱することなく当業者によって構成および細部が変更されうることは明らかであるべきである。
【図面の簡単な説明】
【0142】
【図1a】本発明の代替実施形態による例示的コンピュータシステムを示す図である。
【0143】
【図1b】本発明の代替実施形態による例示的コンピュータシステムを示す図である。
【0144】
【図1c】本発明の代替実施形態による例示的コンピュータシステムを示す図である。
【0145】
【図2a】本発明の代替実施形態によるプロセッサのレジスタファイルを示す図である。
【0146】
【図2b】本発明の代替実施形態によるプロセッサのレジスタファイルを示す図である。
【0147】
【図3】データを操作するようプロセッサにより行われるプロセスの少なくとも1つの実施形態を示すフロー図である。
【0148】
【図4】本発明の代替実施形態によるパックドデータタイプを示す図である。
【0149】
【図5】本発明の少なくとも1つの実施形態による、レジスタ内のパックドバイトデータ表現およびレジスタ内のパックドワードデータ表現を示す図である。
【0150】
【図6】本発明の少なくとも1つの実施形態による、レジスタ内のパックドダブルワードデータ表現およびレジスタ内のパックドクワドワードデータ表現を示す図である。
【0151】
【図7】選択演算を行うプロセスの一実施形態を示すフロー図である。
【0152】
【図8】即値選択演算を行うプロセスの一実施形態を示すフロー図である。
【0153】
【図9a】即値選択演算を行うための回路のさまざまな実施形態を示す図である。
【0154】
【図9b】即値選択演算を行うための回路のさまざまな実施形態を示す図である。
【0155】
【図9c】即値選択演算を行うための回路のさまざまな実施形態を示す図である。
【0156】
【図10】可変選択演算を行うプロセスの一実施形態を示すフロー図である。
【0157】
【図11a】可変選択演算を行うための回路のさまざまな実施形態を示す図である。
【0158】
【図11b】可変選択演算を行うための回路のさまざまな実施形態を示す図である。
【0159】
【図11c】可変選択演算を行うための回路のさまざまな実施形態を示す図である。
【0160】
【図12】プロセッサ命令のための演算コード形式のさまざまな実施形態を示すブロック図である。
【符号の説明】
【0161】
100 コンピュータシステム
101 相互接続部
102 データ処理システム
104 メインメモリ
106 ROM
107 データストレージ装置
109 プロセッサ
110 処理コア
118c 3バイト拡張コード
121 ディスプレイ装置
1210 プレフィックス
122 入力装置
1220 オペコード
1226 オペコード
123 カーソルコントロール
1230 MOD R/M
124 ハードコピー装置
1240 SIB
125 音声記録/再生装置
1250 ディスプレースメント
126 ビデオ
1260 即値
130 実行ユニット
142 BLEND命令
150 レジスタファイル
160 キャッシュ
165 デコーダ
170 内部相互接続部
190 通信装置
201 整数レジスタ
207 制御信号
208 ステータスレジスタ
209 レジスタ
210 拡張レジスタ
211 命令ポインタレジスタ
214 バス
224 メインプロセッサ
226 コプロセッサ
271 SDRAMコントロール
272 SRAMコントロール
273 バーストフラッシュインタフェース
274 PCMCIA/CFカードコントロール
275 LCDコントロール
276 DMAコントロール
277 代替バスマスタインタフェース
278 キャッシュ
290 I/Oブリッジ
291 UART
292 UBS
293 ブルートゥースUART
294 I/O拡張インタフェース
295 I/Oシステム
296 ワイヤレスインタフェース
412 ダブルクワドワード−128ビット
510 レジスタ内の符号なしパックドバイト表現
511 レジスタ内の符号付きパックドバイト表現
512 レジスタ内の符号なしパックドワード表現
513 レジスタ内の符号付きパックドワード表現
514 レジスタ内の符号なしパックドダブルワード表現
515 レジスタ内の符号付きパックドダブルワード表現
516 レジスタ内の符号なしパックドクワドワード表現
517 レジスタ内の符号付きパックドクワドワード表現

【特許請求の範囲】
【請求項1】
一の第1の複数ビットオペランドを示す一の第1のフィールドと、一の第2の複数ビットオペランドを示す一の第2のフィールドとを含む一の命令形式である一の命令コードを受信する工程と、
前記第1のオペランドに関連付けられる一の符号ビットが前記第1のオペランドにおける1つ以上のデータ要素に対して非ゼロである場合に、前記符号ビットに応答して前記第2のオペランドを変更する工程と、
を含む方法。
【請求項2】
前記符号ビットがゼロである場合に、前記第2のオペランドのデータ要素を変更しない工程をさらに含む請求項1に記載の方法。
【請求項3】
前記第1のオペランドはさらに、それぞれNビットの長さを有する、データ要素として少なくともA1およびA2を含む第1の複数のデータ要素を含み、
前記第2のオペランドはさらに、それぞれNビットの長さを有する少なくともB1およびB2を含む第2の複数データ要素を含む、請求項2に記載の方法。
【請求項4】
前記符号ビットは、前記第1のオペランドの前記データ要素の即値フィールドに格納される一の即値ビットである請求項3に記載の方法。
【請求項5】
前記符号ビットは、前記第1のオペランドに関連付けられる一の第3のオペランドにおける最上位ビットである請求項3に記載の方法。
【請求項6】
前記第3のオペランドは、一の暗黙のレジスタである請求項5に記載の方法。
【請求項7】
前記符号ビットは、前記第1のオペランドと前記第2のオペランド間のデータの流れを制御する請求項1に記載の方法。
【請求項8】
前記符号ビットが非ゼロである場合に、前記第1のオペランドからの第1のデータ要素を前記第2のオペランドに格納する工程をさらに含む請求項2に記載の方法。
【請求項9】
前記第1のオペランドおよび前記第2のオペランドはそれぞれ128ビットを含む請求項1に記載の方法。
【請求項10】
前記Nは、64である請求項3に記載の方法。
【請求項11】
前記1つ以上のデータ要素は、パックドバイトとして処理される請求項1に記載の方法。
【請求項12】
前記1つ以上のデータ要素は、パックドワードとして処理される請求項1に記載の方法。
【請求項13】
前記1つ以上のデータ要素は、ダブルワードとして処理される請求項1に記載の方法。
【請求項14】
前記1つ以上のデータ要素は、クワドワードとして処理される請求項1に記載の方法。
【請求項15】
一の実行ユニットと、
データを含む一のマシンアクセス可能媒体と、
を含み、
前記データは、前記実行ユニットによりアクセスされると、前記実行ユニットに請求項1に記載の方法を実行させる、請求項1に記載の方法を実行する装置。
【請求項16】
一の第1のデータを受信する一の第1の入力と、
前記第1のデータと同じビット数を含む一の第2のデータを受信する一の第2の入力と、
一の第1のプロセッサ命令に応答して、一の制御ビットに基づいて一の第1のオペランドから一の第1のデータ要素を選択する一の回路と、
を含み、
前記制御ビットは、前記制御ビットが非ゼロである場合に、前記第1のデータ要素を選択する、装置。
【請求項17】
前記選択された第1のデータ要素は、一の第2のオペランドにコピーされる請求項16に記載の装置。
【請求項18】
前記制御ビットは、一の符号ビットである請求項16に記載の装置。
【請求項19】
前記制御ビットは、前記第1のオペランドの前記第1のデータ要素の即値フィールドに格納される一の即値ビットである請求項17に記載の装置。
【請求項20】
前記符号ビットは、前記第1のオペランドに関連付けられる一の第3のオペランドにおける最上位ビットである請求項17に記載の装置。
【請求項21】
前記第3のオペランドは、一の暗黙のレジスタである請求項20に記載の装置。
【請求項22】
前記第1のデータおよび前記第2のデータはそれぞれ少なくとも128ビットのデータを含む請求項16に記載の装置。
【請求項23】
前記第1のデータはさらに、少なくとも2つのデータ要素を含む請求項16に記載の装置。
【請求項24】
前記データ要素はそれぞれ64ビットを含む請求項23に記載の装置。
【請求項25】
前記第1のデータはさらに、少なくとも4つのデータ要素を含む請求項16に記載の装置。
【請求項26】
前記データ要素はそれぞれ32ビットを含む請求項25に記載の装置。
【請求項27】
前記第1のデータはさらに、少なくとも8つのデータ要素を含む請求項16に記載の装置。
【請求項28】
前記データ要素はそれぞれ16ビットを含む請求項27に記載の装置。
【請求項29】
前記第1のデータはさらに、少なくとも16のデータ要素を含む請求項16に記載の装置。
【請求項30】
前記データ要素はそれぞれ8ビットを含む請求項29に記載の装置。
【請求項31】
データを格納するようアドレス指定可能な一のメモリと、
一の制御ビットを格納するよう構造的に可視である一のストレージ領域を含む一のプロセッサと、
一のNビットソースオペランドを指定する一の第1のフィールドと、一のNビットデスティネーションオペランドを指定する一の第2のフィールドとを有する一の命令を復号化する一のデコーダと、
前記デコーダによる前記命令の復号化に応答して、一の制御ビットに基づいて前記ソースオペランドから一の第1のデータ要素を選択する一の実行ユニットと、
を含み、
前記制御ビットは、前記制御ビットが非ゼロである場合に、前記第1のデータ要素を選択する、コンピュータシステム。
【請求項32】
前記Nは、128である請求項31に記載のコンピュータシステム。
【請求項33】
前記プロセッサは、前記デスティネーションオペランドに前記第1のデータ要素を格納する請求項31に記載のコンピュータシステム。
【請求項34】
前記制御ビットは、前記第1のデータ要素における一の即値ビットである請求項31に記載のコンピュータシステム。
【請求項35】
前記制御ビットは、一の第3のオペランドにおける最上位ビットである請求項31に記載のコンピュータシステム。
【請求項36】
前記第3のオペランドは、一の暗黙のレジスタである請求項35に記載のコンピュータシステム。

【図1a】
image rotate

【図1b】
image rotate

【図1c】
image rotate

【図2a】
image rotate

【図2b】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9a】
image rotate

【図9b】
image rotate

【図9c】
image rotate

【図10】
image rotate

【図11a】
image rotate

【図11b】
image rotate

【図11c】
image rotate

【図12】
image rotate


【公開番号】特開2012−119009(P2012−119009A)
【公開日】平成24年6月21日(2012.6.21)
【国際特許分類】
【外国語出願】
【出願番号】特願2012−15834(P2012−15834)
【出願日】平成24年1月27日(2012.1.27)
【分割の表示】特願2007−245615(P2007−245615)の分割
【原出願日】平成19年9月21日(2007.9.21)
【出願人】(591003943)インテル・コーポレーション (1,101)
【Fターム(参考)】