24531904_j

24531904_j 24531904_j

16.02.2013 Aufrufe

scalar 32-bit integer) 命令は、 CVTSS2SI 命令に よ く 似ているが、 変換が不正確である場合 は、 切り捨てられた値が返される。 3.6.1.6 データ転送命令 MOVAPS (Move aligned packed single-precision floating-point) 命令は、 128 ビットのパック・ データを、 メモリ とス ト リ ー ミング SIMD 拡張命令レジスタの間で転送するか、 あるいは スト リーミングSIMD 拡張命令レ ジ ス タ間で転送す る。 メ モ リ ・ ア ド レ ス は 16 バイ ト に アライメントが合っていなければならない。 アライメントが合っていない場合は、一般保 護例外が発生す る。 MOVUPS (Move unaligned packed single-precision floating-point) 命令は、 128 ビッ トのパッ ク・データを、 メモリとストリーミングSIMD 拡張命令レ ジ ス タ の間で転送するか、 あ る いはス ト リ ー ミ ング SIMD 拡張命令レ ジ ス タ間で転送す る。 こ の命令は、 デ ー タ のアラ イ メン トが合っていなくてもかまわない。 MOVHPS (Move aligned high packed single-precision floating-point) 命令は、 64 ビッ トのパッ ク・データを、メモリとストリーミングSIMD 拡張命令レ ジ ス タ の上位 2 フィールドの間 で転送する。 下位 2 フィールドはそのまま残される。 MOVLPS (Move aligned low packed single-precision floating-point) 命令は、 64 ビッ トのパッ ク・データを、メモリとストリーミングSIMD 拡張命令レ ジ ス タ の下位 2 フィールドの間 で転送する。 上位 2 フィールドはそのまま残される。 MOVMSKPS (Move mask packed single-precision floating-point) 命令は、 4 つのパ ッ ク ド 単精 度浮動小数点数の各要素の最上位ビ ッ ト を、 IA 整数レ ジ ス タ に転送する。 こ の 4 ビッ ト の値は、 分岐の実行条件 と して使用される。 MOVSS (Move scalar single-precision floating-point) 命令は、 32 ビ ッ ト 単精度浮動小数点数 を、 メモ リ と ス ト リ ー ミ ング SIMD 拡張命令レジスタの間で転送するか、 あるいはレジス タ間で転送する。 3.6.1.7 ステート管理命令 LDMXCSR (Load Streaming SIMD Extension Control and Status Register) 命令は、 ス ト リ ー ミ ング SIMD 拡張命令の制御 / ステータス ・ レジスタの内容をメモリからロー ドする。 STMXCSR (Store Streaming SIMD Extension Control and Status Register) 命令は、 ス ト リ ー ミ ング SIMD 拡張命令の制御 / ステータス ・ ワー ド をメモリ にス ト アする。 FXSAVE 命令は、 FP ステー ト、 MMX テク ノロジ ・ ステー ト、 ス ト リ ー ミ ング SIMD 拡 張命令ス テ ー ト を メ モ リ に保存す る。 FSAVE とは異なり、 FXSAVE は、 x87-FP ステー ト をクリアしない。 FXRSTOR 命令は、 FP ステー ト、 MMX テクノロジ ・ ステー ト、 スト リーミングSIMD 拡張命令ス テ ー ト を メ モ リ か ら ロ ー ド する。 3.6.1.8 追加の SIMD 整数命令 3.6.1.5 項で説明した変換命令 と 同じ よ う に、 追加の SIMD 整数命令は、 x87-FP 命令が存在 する場合、 元の MMX 命令 と 同じ動作をす る。 PAVGB/PAVGW (Average unsigned source sub-operands, without incurring a loss in precision) 命 令は、 ソース・オペランドの符号なしデータ要素をデスティネーション・レジスタの符号 なしデ ー タ要素に加算する。 加算の結果は、 それぞれ独立して、 1 ビッ トずつ右にシフト さ れる。 各要素の最上位ビ ッ ト は、 和のキ ャ リ ー ・ ビ ッ ト で埋め ら れる。 累積的な丸め誤 差を防 ぐ ために、 平均計算が実行 さ れる。 シ フ ト 前の中間結果の最下位 2 ビットのうち1 つ以上が 1 である場合は、 シ フ ト 後の各最終結果の最下位ビ ッ ト は 1 にセッ ト される。 3:854 第 3 巻 : IA-32 ストリーミング SIMD 拡張命令リファレンス

PEXTRW (Extract 16-bit word from MMX technology register) 命令は、 即値オペラ ン ド の最下 位 2 ビッ トによって選択される MMX テクノロジ ・ レジスタ内の1 ワードを、 32 ビッ ト 整数レ ジ ス タ の下位半分に移動す る。 整数レ ジ ス タ の上位ワ ー ド は ク リ ア さ れる。 PINSRW (Insert 16-bit word into MMX technology register) 命令は、 32 ビッ ト整数レジスタ内 の下位ワ ー ド ま たは メモ リ 内の 16 ビッ ト ・ワードを、 即値オペランドの最下位2ビッ ト によって選択される、 MMX テクノロジ・レジスタ内の4 つのワー ド ・ ロケーシ ョ ンの う ち 1 つに移動す る。 PMAXUB/PMAXSW (Maximum of packed unsigned integer bytes or signed integer words) 命令 は、 パ ッ ク された要素の各ペアの最大値をデステ ィ ネーシ ョ ン ・ レ ジスタに返す。 PMINUB/PMINSW (Minimum of packed unsigned integer bytes or signed integer words) 命令は、 パ ッ ク さ れた要素の各ペアの最小値をデス テ ィ ネ ー シ ョ ン ・ レ ジ ス タ に返す。 PMOVMSKB (Move Byte Mask from MMX technology register) 命令は、 MMX テクノロジ ・ レジスタ内のソース・オペランドの各バイトの最上位ビットから作成される 8 ビッ ト・マ スクを、 IA 整数レ ジ ス タ に返す。 PMULHUW (Unsigned high packed integer word multiply in MMX technology register) 命令は、 2 つのソース MMX テ ク ノ ロ ジ ・ レ ジ ス タ の各ワ ー ド ・ フ ィ ー ル ド の符号なし乗算を実行 し、 各乗算結果の上位ワ ー ド を MMX テクノロジ ・ レジスタに返す。 PSADBW (Sum of absolute differences) 命令は、 ソ ー ス ・ サブオペラ ン ド ・ バイ ト の各ペア の差の絶対値を計算し、 8 つの差を累積して 1 つの 16 ビ ッ ト の結果を求め る。 PSHUFW (Shuffle packed integer word in MMX technology register) 命令は、8 ビッ ト即値オペ ランドを使用して、 ソース・オペランドのワー ド ・ フ ィ ールドのフル・シャ ッフルを実行 し、 その結果をデス テ ィ ネ ー シ ョ ン ・ オペラ ン ド の任意の ワ ー ド ・ フ ィ ー ル ド に格納す る。 3.6.1.9 キャッシュ制御命令 プ ロ グ ラ マが参照す る デー タ は、 時間的な局所性 ( デー タ が再び使用 さ れる ) または空間 的な局所性 ( データが隣接する位置に、 例えば同じキャ ッ シュ ・ ライン上に置かれる ) を 持つこ と がある。 3D グラフ ィ ッ クス ・ アプリケーションの表示リス トなど、 いくつかの マルチ メ デ ィ ア ・ デー タ型は、 一度参照 さ れる と 、 す ぐ に再使用 さ れる こ と はない。 こ の ようなデータ ・ タイプを、 非テンポラル・データと呼ぶ。 プログラムを作成するときは、 アプ リ ケーシ ョ ンのキャ ッ シュ されたコ ー ド とデータが、 できるだけ非テンポラル・デー タ に よ っ て上書き さ れない よ う に注意す る必要がある。 キ ャ ッ シ ュ 制御命令に よ っ て、 プ ログラマは、 非テンポラルなアクセスによるキャ ッシュ汚染を最小限に抑えるよ うに、 キャッシュ動作を制御できる。 また、実行エンジンがデータ待ちでストールしないように、実行エンジンにデータを供給 する必要がある。 ス ト リ ー ミング SIMD 拡張命令に よ っ て、 プ ロ グ ラ マは、 デー タ を実際 に使用する前に、 そのデータをプリフェッチできる。 プリフェッチ命令は、 アーキテク チ ャ上の状態を更新しないため、 ア ー キテ ク チ ャ 命令ではない。 ま た、 プ リ フ ェ ッ チ命令 は、 各プロセッサ ・ モデルに固有である。 これらの命令を利用するには、 プログラマがプ ロセッサ ・モデルに合わせてアプ リ ケーシ ョ ンを調整する必要がある。 プ リ フ ェ ッ チ命令 は、単にハードウェアにヒントを与えるものであり、 これらの命令によって例外やフォル ト は発生しない。 必要以上のプ リ フ ェ ッ チ命令の使用は、 プ ロ セ ッ サに よ っ て制限される 場合があ る。 以下の 4 つの命令は、 キャ ッ シュ階層に ヒ ン ト を与える と、 キャ ッ シュ階層の異なる レベ ルにデータをプ リ フェ ッチし、 非テンポラル・データによ るキャ ッシュ汚染を最小限に抑 えられる。 第 3 巻 : IA-32 ストリーミング SIMD 拡張命令リファレンス 3:855

PEXTRW (Extract 16-bit word from MMX technology register) 命令は、 即値オペラ ン ド の最下<br />

位 2 ビッ トによって選択される MMX テクノロジ ・ レジスタ内の1 ワードを、 32 ビッ ト<br />

整数レ ジ ス タ の下位半分に移動す る。 整数レ ジ ス タ の上位ワ ー ド は ク リ ア さ れる。<br />

PINSRW (Insert 16-bit word into MMX technology register) 命令は、 32 ビッ ト整数レジスタ内<br />

の下位ワ ー ド ま たは メモ リ 内の 16 ビッ ト ・ワードを、 即値オペランドの最下位2ビッ ト<br />

によって選択される、 MMX テクノロジ・レジスタ内の4 つのワー ド ・ ロケーシ ョ ンの う<br />

ち 1 つに移動す る。<br />

PMAXUB/PMAXSW (Maximum of packed unsigned integer bytes or signed integer words) 命令<br />

は、 パ ッ ク された要素の各ペアの最大値をデステ ィ ネーシ ョ ン ・ レ ジスタに返す。<br />

PMINUB/PMINSW (Minimum of packed unsigned integer bytes or signed integer words) 命令は、<br />

パ ッ ク さ れた要素の各ペアの最小値をデス テ ィ ネ ー シ ョ ン ・ レ ジ ス タ に返す。<br />

PMOVMSKB (Move Byte Mask from MMX technology register) 命令は、 MMX テクノロジ ・<br />

レジスタ内のソース・オペランドの各バイトの最上位ビットから作成される 8 ビッ ト・マ<br />

スクを、 IA 整数レ ジ ス タ に返す。<br />

PMULHUW (Unsigned high packed integer word multiply in MMX technology register) 命令は、<br />

2 つのソース MMX テ ク ノ ロ ジ ・ レ ジ ス タ の各ワ ー ド ・ フ ィ ー ル ド の符号なし乗算を実行<br />

し、 各乗算結果の上位ワ ー ド を MMX テクノロジ ・ レジスタに返す。<br />

PSADBW (Sum of absolute differences) 命令は、 ソ ー ス ・ サブオペラ ン ド ・ バイ ト の各ペア<br />

の差の絶対値を計算し、 8 つの差を累積して 1 つの 16 ビ ッ ト の結果を求め る。<br />

PSHUFW (Shuffle packed integer word in MMX technology register) 命令は、8 ビッ ト即値オペ<br />

ランドを使用して、 ソース・オペランドのワー ド ・ フ ィ ールドのフル・シャ ッフルを実行<br />

し、 その結果をデス テ ィ ネ ー シ ョ ン ・ オペラ ン ド の任意の ワ ー ド ・ フ ィ ー ル ド に格納す る。<br />

3.6.1.9 キャッシュ制御命令<br />

プ ロ グ ラ マが参照す る デー タ は、 時間的な局所性 ( デー タ が再び使用 さ れる ) または空間<br />

的な局所性 ( データが隣接する位置に、 例えば同じキャ ッ シュ ・ ライン上に置かれる ) を<br />

持つこ と がある。 3D グラフ ィ ッ クス ・ アプリケーションの表示リス トなど、 いくつかの<br />

マルチ メ デ ィ ア ・ デー タ型は、 一度参照 さ れる と 、 す ぐ に再使用 さ れる こ と はない。 こ の<br />

ようなデータ ・ タイプを、 非テンポラル・データと呼ぶ。 プログラムを作成するときは、<br />

アプ リ ケーシ ョ ンのキャ ッ シュ されたコ ー ド とデータが、 できるだけ非テンポラル・デー<br />

タ に よ っ て上書き さ れない よ う に注意す る必要がある。 キ ャ ッ シ ュ 制御命令に よ っ て、 プ<br />

ログラマは、 非テンポラルなアクセスによるキャ ッシュ汚染を最小限に抑えるよ うに、<br />

キャッシュ動作を制御できる。<br />

また、実行エンジンがデータ待ちでストールしないように、実行エンジンにデータを供給<br />

する必要がある。 ス ト リ ー ミング SIMD 拡張命令に よ っ て、 プ ロ グ ラ マは、 デー タ を実際<br />

に使用する前に、 そのデータをプリフェッチできる。 プリフェッチ命令は、 アーキテク<br />

チ ャ上の状態を更新しないため、 ア ー キテ ク チ ャ 命令ではない。 ま た、 プ リ フ ェ ッ チ命令<br />

は、 各プロセッサ ・ モデルに固有である。 これらの命令を利用するには、 プログラマがプ<br />

ロセッサ ・モデルに合わせてアプ リ ケーシ ョ ンを調整する必要がある。 プ リ フ ェ ッ チ命令<br />

は、単にハードウェアにヒントを与えるものであり、 これらの命令によって例外やフォル<br />

ト は発生しない。 必要以上のプ リ フ ェ ッ チ命令の使用は、 プ ロ セ ッ サに よ っ て制限される<br />

場合があ る。<br />

以下の 4 つの命令は、 キャ ッ シュ階層に ヒ ン ト を与える と、 キャ ッ シュ階層の異なる レベ<br />

ルにデータをプ リ フェ ッチし、 非テンポラル・データによ るキャ ッシュ汚染を最小限に抑<br />

えられる。<br />

第 3 巻 : IA-32 ストリーミング SIMD 拡張命令リファレンス 3:855

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!