・ SSE3
5.6. SSE2
SSE2
は、MMX®テクノロジと SSE で導入された SIMD 実行モデルを拡張したもので
ある。SSE2は、XMM レジスタ内の、パックド倍精度浮動小数点オペランドと、パッ クドバイト、パックドワード、パックド・ダブルワード、パックド・クワッドワード・オペランドを操作する。SSE2についての詳細は、第11章「ストリーミング SIM D拡
張命令
2(SSE2)によるプログラミング」を参照のこと。
SSE2
は、SSE2
をサポートするIA-32
プロセッサ上でのみ実行できる。プロセッサがSSE2
をサポートしているかどうかは、CPUID
命令によって検出できる(『IA-32
インテル®アーキテクチャ・ソフトウェア・デベロッパーズ・マニュアル、中巻A
』 の第3
章「命令セット・リファレンスA-M
」のCPUID
命令の説明を参照)。これらの命令は、以下の
4
つのサブグループに分けられる(最初のサブグループは下 位のサブグループを持つことに注意)。・
パックドおよびスカラ倍精度浮動小数点命令・
パックド単精度浮動小数点変換命令・ 128
ビットSIMD
整数命令命令セットの要約
5
・
キャッシュ制御命令と命令順序付け命令以下の各項では、各グループの命令の概要について説明する。
5.6.1. SSE2
パックドおよびスカラ倍精度浮動小数点命令SSE2
パックドおよびスカラ倍精度浮動小数点命令は、倍精度浮動小数点オペランドの データ転送、算術演算、比較演算、変換、論理演算、シャッフルの下位のサブグルー プに分けられる。これらの命令については、以下の各項で説明する。5.6.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.
アライメントの合った 2 つのパックド倍精度浮動小数点値を XMM レジスタ同士の間、または XMM レジスタとメモリとの間 で転送
MOVUPD Move two unaligned packed double-precision floating-point values between XMM registers or between and XMM register and memory.
アライメントの合っていない2つのパックド倍精度浮動小数点値
を XMM レジスタ同士の間、または XMM レジスタとメモリとの
間で転送
MOVHPD Move high packed double-precision floating-point value to an from the high quadword of an XMM register and memory.
上位パックド倍精度浮動小数点値を XMM レジスタの上位クワッ ドワードとメモリとの間で転送
MOVLPD Move low packed single-precision floating-point value to an from the low quadword of an XMM register and memory.
下位パックド倍精度浮動小数点値を XMM レジスタの下位クワッ ドワードとメモリとの間で転送
MOVMSKPD Extract sign mask from two packed double-precision floating-point values.
2つのパックド倍精度浮動小数点値から符号マスクを抽出 MOVSD Move scalar double-precision floating-point value between XMM registers
or between an XMM register and memory.
スカラ倍精度浮動小数点値を XMM レジスタ同士の間、または XMM レジスタとメモリとの間で転送
IA-32 インテル® アーキテクチャ・ソフトウェア・デベロッパーズ・マニュアル 上巻:基本アーキテクチャ
5-32
5.6.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
5.6.1.3. SSE2論理演算命令
SSE2
論理演算命令は、パックド倍精度浮動小数点値のAND
、AND NOT
、OR
、XOR
演算を実行する。ANDPD Perform bitwise logical AND of packed double-precision floating-point values.
パックド倍精度浮動小数点値のビットごとの AND(論理積)演算 を実行
ANDNPD Perform bitwise logical AND NOT of packed double-precision floating-point values.
パックド倍精度浮動小数点値のビットごとの AND NOT(否定論 理積)演算を実行
ORPD Perform bitwise logical OR of packed double-precision floating-point values.
パックド倍精度浮動小数点値のビットごとの OR(論理和)演算 を実行
XORPD Perform bitwise logical XOR of packed double-precision floating-point values.
パックド倍精度浮動小数点値のビットごとの XOR(排他的論理 和)演算を実行
5.6.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.
スカラ倍精度浮動小数点値を順序付きで比較し、EFLAGS レジス タにフラグをセット
UCOMISD Perform unordered comparison of scalar double-precision floating-point values and set flags in EFLAGS register.
スカラ倍精度浮動小数点値を順序付けなしで比較し、EFLAGS レ ジスタにフラグをセット
IA-32 インテル® アーキテクチャ・ソフトウェア・デベロッパーズ・マニュアル 上巻:基本アーキテクチャ
5-34
5.6.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.
2 つのパックド倍精度浮動小数点オペランドから上位の値をアン パックしてインターリーブ
UNPCKLPD Unpacks and interleaves the low values from two packed double-precision floating-point operands.
2 つのパックド倍精度浮動小数点オペランドから下位の値をアン パックしてインターリーブ
5.6.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.
パックド・ダブルワード整数をパックド倍精度浮動小数点値に変 換
命令セットの要約
5
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.
ダブルワード整数をスカラ倍精度浮動小数点値に変換
5.6.2. SSE2
パックド単精度浮動小数点命令SSE2
パックド単精度浮動小数点命令は、単精度浮動小数点オペランドと整数オペラン ドの変換操作を実行する。これらの命令は、SSEの単精度浮動小数点命令を拡張した ものである。CVTDQ2PS Convert packed doubleword integers to packed single-precision floating-point values.
パックド・ダブルワード整数をパックド単精度浮動小数点値に変 換
CVTPS2DQ Convert packed single-precision floating-point values to packed signed doubleword integers.
パックド単精度浮動小数点値をパックド符号付きダブルワード 整数に変換
CVTTPS2DQ Convert with truncation packed single-precision floating-point values to packed doubleword integers.
切り捨てを使用して、パックド単精度浮動小数点値をパックド・
ダブルワード整数に変換