• 検索結果がありません。

IA-32 インテル ®

5.6.3. SSE 64 ビット SIMD 整数命令

5.6.1.6. SSE変換命令

SSE変換命令は、パックドまたは個々のダブルワード整数を、パックドまたはスカラ単精度浮動小 数点値に変換する。あるいは、その逆方向の変換を行う。

CVTPI2PS Convert packed doubleword integers to packed single-precision floating-point values.

CVTSI2SS Convert doubleword integer to scalar single-precision floating-point value.

CVTPS2PI Convert packed single-precision floating-point values to packed doubleword integers.

CVTTPS2PI Convert with truncation packed single-precision floating-point values to packed doubleword integers.

CVTSS2SI Convert scalar single-precision floating-point value to a doubleword integer.

CVTTSS2SI Convert with truncation scalar single-precision floating-point value to scalar doubleword integer.

5.6.2. MXCSR ステート管理命令

MXCSRステート管理命令は、MXCSR制御およびステータス・レジスタのステートのセーブとリス

トアを実行する。

LDMXCSR Load MXCSR register.

STMXCSR Save MXCSR register state.

PMAXSW Maximum of packed signed word integers.

PMINUB Minimum of packed unsigned byte integers.

PMINSW Minimum of packed signed word integers.

PMOVMSKB Move Byte Mask.

PMULHUW Multiply packed unsigned integers and store high result.

PSADBW Compute Sum of absolute differences.

PSHUFW Shuffle packed integer word in MMX register.

5.6.4. SSE キャッシュ制御命令、プリフェッチ命令、および命令順序付

け命令

キャッシュ制御命令は、MMXテクノロジ・レジスタおよびXMMレジスタからメモリにデータをス トアするときの非テンポラル・データのキャッシュ処理を制御する。PREFETCh命令は、選択され たキャッシュ・レベルにデータをプリフェッチする。SFENCE命令は、ストア操作時の命令の順序 を制御する。

MASKMOVQ Non-temporal store of selected bytes from an MMX register into memory.

MOVNTQ Non-temporal store of quadword from an MMX register into memory.

MOVNTPS Non-temporal store of four packed single-precision floating-point values from an XMM register into memory.

PREFETCHh Load 32 or more of bytes from memory to a selected level of the processor’s cache hierarchy.

SFENCE Serializes store operations.

5 .7 . S S E 2

SSE2は、Pentium 4プロセッサでIA-32アーキテクチャに導入された。SSE2は、XMMレジスタ内の、

パックド倍精度浮動小数点オペランドと、パックド・バイト、パックド・ワード、パックド・ダブ ルワード、およびパックド・クワッドワード・オペランドを操作する。

SSE2は、SSE2をサポートするIA-32プロセッサ上でのみ実行できる。プロセッサがSSE2をサポー トしているかどうかは、CPUID命令によって検出できる(『IA-32 インテル®アーキテクチャ・ソフ トウェア・デベロッパーズ・マニュアル、中巻』の第3章「命令セット・リファレンス」のCPUID 命令の説明を参照)。

SSE2は、以下の4つの機能グループに分けられる。

パックドおよびスカラ倍精度浮動小数点命令

パックド単精度浮動小数点変換命令

128ビットSIMD整数命令

キャッシュ制御命令と命令順序付け命令

以下の各項では、各グループの命令の概要について説明する。

5.7.1. SSE2 パックドおよびスカラ倍精度浮動小数点命令

SSE2パックドおよびスカラ倍精度浮動小数点命令は、倍精度浮動小数点オペランドのデータ転送、

算術演算、比較演算、変換、論理演算、およびシャッフル操作を実行する。

5.7.1.1. SSE2データ転送命令

SSE2データ転送命令は、XMMレジスタ同士およびXMMレジスタとメモリの間で、倍精度浮動小数 点データを転送する。

MOVAPD Move two aligned packed double-precision floating-point values between XMM registers or between and XMM register and memory.

MOVUPD Move two unaligned packed double-precision floating-point values between XMM registers or between and XMM register and memory.

MOVHPD Move high packed double-precision floating-point value to an from the high quadword of an XMM register and memory.

MOVLPD Move low packed single-precision floating-point value to an from the low quadword of an XMM register and memory.

MOVMSKPD Extract sign mask from two packed double-precision floating-point values.

MOVSD Move scalar double-precision floating-point value between XMM registers or between an XMM register and memory.

5.7.1.2. SSE2パックド算術命令

SSE2パックド算術命令は、パックド/スカラ倍精度浮動小数点オペランドに対する、加算、減算、乗

算、除算、平方根、および最大値/最小値演算を実行する。

ADDPD Add packed double-precision floating-point values.

ADDSD Add scalar double precision floating-point values.

SUBPD Subtract scalar double-precision floating-point values.

SUBSD Subtract scalar double-precision floating-point values.

MULPD Multiply packed double-precision floating-point values.

MULSD Multiply scalar double-precision floating-point values.

DIVPD Divide packed double-precision floating-point values.

DIVSD Divide scalar double-precision floating-point values.

SQRTPD Compute packed square roots of packed double-precision floating-point values.

SQRTSD Compute scalar square root of scalar double-precision floating-point value.

MAXPD Return maximum packed double-precision floating-point values.

MAXSD Return maximum scalar double-precision floating-point value.

MINPD Return minimum packed double-precision floating-point values.

MINSD Return minimum scalar double-precision floating-point value.

5.7.1.3. SSE2論理演算命令

SSE2論理演算命令は、パックド倍精度浮動小数点値のAND、AND NOT、OR、およびXOR演算を 実行する。

ANDPD Perform bitwise logical AND of packed double-precision floating-point values.

ANDNPD Perform bitwise logical AND NOT of packed double-precision floating-point values.

ORPD Perform bitwise logical OR of packed double-precision floating-point values.

XORPD Perform bitwise logical XOR of packed double-precision floating-point values.

5.7.1.4. SSE2比較命令

SSE2比較命令は、パックド/スカラ倍精度浮動小数点値の比較を実行し、比較の結果をデスティネー ション・オペランドまたはEFLAGSレジスタに返す。

CMPPD Compare packed double-precision floating-point values.

CMPSD Compare scalar double-precision floating-point values.

COMISD Perform ordered comparison of scalar double-precision floating-point values and set flags in EFLAGS register.

UCOMISD Perform unordered comparison of scalar double-precision floating-point values and set flags in EFLAGS register.

5.7.1.5. SSE2シャッフル命令とアンパック命令

SSE2シャッフル命令とアンパック命令は、パックド倍精度浮動小数点オペランド内の倍精度浮動小 数点値のシャッフルまたはインターリーブを実行する。

SHUFPD Shuffles values in packed double-precision floating-point operands.

UNPCKHPD Unpacks and interleaves the high values from two packed double-precision floating-point operands.

UNPCKLPD Unpacks and interleaves the low values from two packed double-precision floating-point operands.

5.7.1.6. SSE2変換命令

SSE2変換命令は、パックドまたは個々のダブルワード整数を、パックドまたはスカラ倍精度浮動小 数点値に変換する。あるいは、その逆方向の変換を行う。また、変換命令は、パックドまたはスカ ラ形式の単精度浮動小数点値と倍精度浮動小数点値の間の変換も実行する。

CVTPD2PI Convert packed double-precision floating-point values to packed doubleword integers.

CVTTPD2PI Convert with truncation packed double-precision floating-point values to packed doubleword integers.

CVTPI2PD Convert packed doubleword integers to packed double-precision floating-point values.

CVTPD2DQ Convert packed double-precision floating-point values to packed doubleword integers.

CVTTPD2DQ Convert with truncation packed double-precision floating-point values to packed doubleword integers.

CVTDQ2PD Convert packed doubleword integers to packed double-precision floating-point values.

CVTPS2PD Convert packed single-precision floating-point values to packed double-precision floating-point values.

CVTPD2PS Convert packed double-precision floating-point values to packed single-precision floating-point values.

CVTSS2SD Convert scalar single-precision floating-point values to scalar double-precision floating-point values.

CVTSD2SS Convert scalar double-precision floating-point values to scalar single-precision floating-point values.

CVTSD2SI Convert scalar double-precision floating-point values to a doubleword integer.

CVTTSD2SI Convert with truncation scalar double-precision floating-point values to scalar doubleword integers.

CVTSI2SD Convert doubleword integer to scalar double-precision floating-point value.