24531904_j
24531904_j 24531904_j
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
- Seite 816 und 817: PANDN—Logical AND NOT オペコ
- Seite 818 und 819: PCMPEQB/PCMPEQW/PCMPEQD—Packed Co
- Seite 820 und 821: PCMPEQB/PCMPEQW/PCMPEQD—Packed Co
- Seite 822 und 823: PCMPGTB/PCMPGTW/PCMPGTD—Packed Co
- Seite 824 und 825: PMADDWD—Packed Multiply and Add
- Seite 826 und 827: PMULHW—Packed Multiply High オ
- Seite 828 und 829: PMULLW—Packed Multiply Low オペ
- Seite 830 und 831: POR—Bitwise Logical OR オペコ
- Seite 832 und 833: PSLLW/PSLLD/PSLLQ—Packed Shift Le
- Seite 834 und 835: PSLLW/PSLLD/PSLLQ—Packed Shift Le
- Seite 836 und 837: PSRAW/PSRAD—Packed Shift Right Ar
- Seite 838 und 839: PSRLW/PSRLD/PSRLQ—Packed Shift Ri
- Seite 840 und 841: PSRLW/PSRLD/PSRLQ—Packed Shift Ri
- Seite 842 und 843: PSUBB/PSUBW/PSUBD—Packed Subtract
- Seite 844 und 845: PSUBSB/PSUBSW—Packed Subtract wit
- Seite 846 und 847: PSUBSB/PSUBSW—Packed Subtract wit
- Seite 848 und 849: PSUBUSB/PSUBUSW—Packed Subtract U
- Seite 850 und 851: PUNPCKHBW/PUNPCKHWD/PUNPCKHDQ—Unp
- Seite 852 und 853: PUNPCKHBW/PUNPCKHWD/PUNPCKHDQ—Unp
- Seite 854 und 855: PUNPCKLBW/PUNPCKLWD/PUNPCKLDQ—Unp
- Seite 856 und 857: PXOR—Logical Exclusive OR オペ
- Seite 858 und 859: 3:846 第 3 巻 : IA-32 MMX ® テ
- Seite 860 und 861: 令テ ク ノ ロジを組み込
- Seite 862 und 863: 図 3-3. パックド操作 図 3-4
- Seite 864 und 865: COMISS (Compare scalar single-preci
- Seite 868 und 869: MASKMOVQ (Non-temporal byte mask st
- Seite 870 und 871: 3.7.1 実数体系 図 3-8 に示
- Seite 872 und 873: て異なる。 バイアス定数
- Seite 874 und 875: 極端な場合には、 先頭の
- Seite 876 und 877: 3.8 データ・フォーマット
- Seite 878 und 879: 3.10 命令プリフィックス
- Seite 880 und 881: •xmm/m64: 128 ビット ・マル
- Seite 882 und 883: ADDPS—Packed Single-FP Add ( 続
- Seite 884 und 885: ADDSS—Scalar Single-FP Add ( 続
- Seite 886 und 887: ANDNPS—Bit-wise Logical And Not F
- Seite 888 und 889: ANDPS—Bit-wise Logical And for Si
- Seite 890 und 891: CMPPS—Packed Single-FP Compare (
- Seite 892 und 893: CMPPS—Packed Single-FP Compare (
- Seite 894 und 895: CMPSS—Scalar Single-FP Compare (
- Seite 896 und 897: CMPSS—Scalar Single-FP Compare (
- Seite 898 und 899: COMISS—Scalar Ordered Single-FP C
- Seite 900 und 901: CVTPI2PS—Packed Signed INT32 to P
- Seite 902 und 903: CVTPS2PI—Packed Single-FP to Pack
- Seite 904 und 905: CVTPS2PI—Packed Single-FP to Pack
- Seite 906 und 907: CVTSI2SS—Scalar Signed INT32 to S
- Seite 908 und 909: CVTSS2SI—Scalar Single-FP to Sign
- Seite 910 und 911: CVTTPS2PI—Packed Single-FP to Pac
- Seite 912 und 913: CVTTSS2SI—Scalar Single-FP to Sig
- Seite 914 und 915: DIVPS—Packed Single-FP Divide オ
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