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

・ 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.

切り捨てを使用して、パックド単精度浮動小数点値をパックド・

ダブルワード整数に変換