SSE/AVX:変換

浮動小数点精度変換
CVTSS2SD
VCVTSS2SD
単一単精度を倍精度に変換 [SSE2]
CVTSD2SS
VCVTSD2SS
単一倍精度を単精度に変換 [SSE2]
CVTPS2PD
VCVTPS2PD
パック単精度を倍精度に変換 [SSE2]
CVTPD2PS
VCVTPD2PS
パック倍精度を単精度に変換 [SSE2]
半精度 (16bit)
VCVTPH2PSパック半精度→単精度変換 [F16C]
VCVTPS2PHパック単精度→半精度変換 [F16C]
整数→浮動小数点
CVTDQ2PS
VCVTDQ2PS
パック符号付き32bit整数を単精度に変換 [SSE2]
CVTDQ2PD
VCVTDQ2PD
パック符号付き32bit整数を倍精度に変換 [SSE2]
浮動小数点→整数
CVTPS2DQ
VCVTPS2DQ
パック単精度を符号付き32bit整数に変換 (丸め) [SSE2]
CVTTPS2DQ
VCVTTPS2DQ
パック単精度を符号付き32bit整数に変換 (切り捨て) [SSE2]
CVTPD2DQ
VCVTPD2DQ
パック倍精度を符号付き32bit整数に変換 (丸め) [SSE2]
CVTTPD2DQ
VCVTTPD2DQ
パック倍精度を符号付き32bit整数に変換 (切り捨て) [SSE2]
汎用レジスタ/メモリ
CVTSI2SS
VCVTSI2SS
汎用レジスタ/メモリの符号付き整数値を単精度に変換 [SSE]
CVTSI2SD
VCVTSI2SD
汎用レジスタ/メモリの符号付き整数値を倍精度に変換 [SSE2]
CVTSS2SI
VCVTSS2SI
単一単精度を符号付き整数に変換して汎用レジスタに (丸め) [SSE]
CVTTSS2SI
VCVTTSS2SI
単一単精度を符号付き整数に変換して汎用レジスタに (切り捨て) [SSE]
CVTSD2SI
VCVTSD2SI
単一倍精度を符号付き整数に変換して汎用レジスタに (丸め) [SSE2]
CVTTSD2SI
VCVTTSD2SI
単一倍精度を符号付き整数に変換して汎用レジスタに (切り捨て) [SSE2]
丸め
丸めの即値バイト丸めの即値バイト
ROUNDSS
VROUNDSS
単一単精度の丸め [SSE4.1]
ROUNDPS
VROUNDPS
パック単精度の丸め [SSE4.1]
ROUNDSD
VROUNDSD
単一倍精度の丸め [SSE4.1]
ROUNDPD
VROUNDPD
パック倍精度の丸め [SSE4.1]
浮動小数点精度変換
CVTSS2SD xmm1, xmm2/mem32 | F3 0F 5A /r | SSE2
VCVTSS2SD xmm1, xmm2, xmm3/mem64 | C4 RXB.00001 X.src.X.10 5A /r | AVX
下位 32bit の単精度浮動小数点値を、倍精度浮動小数点値に変換し、宛先の下位 64bit に書き込みます。

CVTSS2SD: 宛先 XMM レジスタの上位ビットは変更されません。
VCVTSS2SD: 宛先 xmm1 の上位ビットは xmm2 からコピーされます。
CVTSD2SS xmm1, xmm2/mem64 | F2 0F 5A /r | SSE2
VCVTSD2SS xmm1, xmm2, xmm3/mem64 | C4 RXB.00001 X.src.X.11 5A /r | AVX
下位 64bit の倍精度浮動小数点値を、単精度浮動小数点値に変換し、宛先の下位 32bit に書き込みます。

CVTSD2SS: 宛先 XMM レジスタの上位ビットは変更されません。
VCVTSD2SS: 宛先 xmm1 の上位ビットは xmm2 からコピーされます。

結果が不正確な値の場合、MXCSR.RC の指定に従って丸められます。
CVTPS2PD xmm1, xmm2/mem64   | 0F 5A /r | SSE2
VCVTPS2PD xmm1, xmm2/mem64  | C4 RXB.00001 X.1111.0.00 5A /r | AVX
VCVTPS2PD ymm1, ymm2/mem128 | C4 RXB.00001 X.1111.1.00 5A /r | AVX
パック単精度浮動小数点値を、それぞれ倍精度浮動小数点値に変換し、結果をパックして宛先に書き込みます。
128bit の場合は下位の2つ、256bit の場合は下位の4つを変換します。
CVTPD2PS xmm1, xmm2/mem128  | 66 0F 5A /r | SSE2
VCVTPD2PS xmm1, xmm2/mem128 | C4 RXB.00001 X.1111.0.01 5A /r | AVX
VCVTPD2PS xmm1, ymm2/mem256 | C4 RXB.00001 X.1111.1.01 5A /r | AVX
パック倍精度浮動小数点値を、それぞれ単精度浮動小数点値に変換し、結果をパックして宛先に書き込みます。
宛先の空いた上位ビットは 0 になります。

結果が不正確な値の場合、MXCSR.RC の指定に従って丸められます。
半精度 (16bit)
VCVTPH2PS xmm1, xmm2/mem64  | C4 RXB.02 0.1111.0.01 13 /r
VCVTPH2PS ymm1, xmm2/mem128 | C4 RXB.02 0.1111.1.01 13 /r
パックされた 16bit 浮動小数点値を、単精度浮動小数点値に変換します。

非正規の値は、通常の結果として変換されます。MXCSR.DAZ は無視され、MXCSR の非正規例外は報告されません。
非正規化エンコードを含む 16bit 浮動小数点エンコードの全範囲は、単精度形式で正確に表現できるため、丸め、不正確な結果、非正規化された結果は適用されません。

CPUID: F16C
VCVTPS2PH xmm1/mem64, xmm2, imm8  | C4 RXB.03 0.1111.0.01 1D /r /imm8
VCVTPS2PH xmm1/mem128, ymm2, imm8 | C4 RXB.03 0.1111.1.01 1D /r /imm8
パックされた単精度浮動小数点値を、16bit 浮動小数点値に変換し、宛先に書き込みます。
即値オペランドにより、丸め制御を指定できます。

bit 1:0 (RC)00b: 近い方に丸め
01b: 負の無限大に近い方に丸め
10b: 正の無限大に近い方に丸め
11b: 0 に近い方に切り捨て
bit 2 (RS)0 = 即値の RC を適用
1 = MXCSR.RC を適用

CPUID: F16C
整数→浮動小数点
CVTDQ2PS xmm1, xmm2/mem128  | 0F 5B /r | SSE2
VCVTDQ2PS xmm1, xmm2/mem128 | C4 RXB.00001 X.1111.0.00 5B /r | AVX
VCVTDQ2PS ymm1, ymm2/mem256 | C4 RXB.00001 X.1111.1.00 5B /r | AVX
パックされた符号付き 32bit 整数値を、それぞれ単精度浮動小数点値に変換し、結果をパックして宛先に書き込みます。
結果が不正確な値の場合、MXCSR.RC の指定に従って丸められます。
CVTDQ2PD xmm1, xmm2/mem64   | F3 0F E6 /r | SSE2
VCVTDQ2PD xmm1, xmm2/mem64  | C4 RXB.00001 X.1111.0.10 E6 /r | AVX
VCVTDQ2PD ymm1, ymm2/mem256 | C4 RXB.00001 X.1111.1.10 E6 /r | AVX
パックされた符号付き 32bit 整数値を、それぞれ倍精度浮動小数点値に変換し、結果をパックして宛先に書き込みます。

128bit の場合は下位の2つ、256bit の場合は下位の4つを変換します。
浮動小数点→整数
CVTPS2DQ xmm1, xmm2/mem128  | 66 0F 5B /r | SSE2
VCVTPS2DQ xmm1, xmm2/mem128 | C4 RXB.00001 X.1111.0.01 5B /r | AVX
VCVTPS2DQ ymm1, ymm2/mem256 | C4 RXB.00001 X.1111.1.01 5B /r | AVX
パック単精度浮動小数点値を、それぞれ符号付き 32bit 整数値に変換し、結果をパックして宛先に書き込みます。

結果が不正確な値の場合、MXCSR.RC の指定に従って丸められます。
操作例外 (IE) がマスクされており、浮動小数点値が NaN か 無限大、または、変換結果が符号付き 32bit 整数の範囲より大きい場合、32bit の不定整数値 (8000_0000h) を返します。
CVTTPS2DQ xmm1, xmm2/mem128  | F3 0F 5B /r | SSE2
VCVTTPS2DQ xmm1, xmm2/mem128 | C4 RXB.00001 X.1111.0.10 5B /r | AVX
VCVTTPS2DQ ymm1, ymm2/mem256 | C4 RXB.00001 X.1111.1.10 5B /r | AVX
パック単精度浮動小数点値を、それぞれ符号付き 32bit 整数値に変換し、結果をパックして宛先に書き込みます。
結果が不正確な値である場合、値は切り捨てられます (ゼロ方向に丸められます)。

操作例外 (IE) がマスクされており、浮動小数点値が NaN か 無限大、または、変換結果が符号付き 32bit 整数の範囲より大きい場合、32bit の不定整数値 (8000_0000h) を返します。
CVTPD2DQ xmm1, xmm2/mem128  | F2 0F E6 /r | SSE2
VCVTPD2DQ xmm1, xmm2/mem128 | C4 RXB.00001 X.1111.0.11 E6 /r | AVX
VCVTPD2DQ xmm1, ymm2/mem256 | C4 RXB.00001 X.1111.1.11 E6 /r | AVX
パック倍精度浮動小数点値を、それぞれ符号付き 32bit 整数に変換し、結果をパックして宛先に書き込みます。
宛先の空いた上位ビットは 0 になります。

結果が不正確な値の場合、MXCSR.RC の指定に従って丸められます。
操作例外 (IE) がマスクされており、浮動小数点値が NaN か 無限大、または、変換結果が符号付き 32bit 整数の範囲より大きい場合、32bit の不定整数値 (8000_0000h) を返します。
CVTTPD2DQ xmm1, xmm2/mem128  | 66 0F E6 /r | SSE2
VCVTTPD2DQ xmm1, xmm2/mem128 | C4 RXB.00001 X.1111.0.01 E6 /r | AVX
VCVTTPD2DQ xmm1, ymm2/mem256 | C4 RXB.00001 X.1111.1.01 E6 /r | AVX
パック倍精度浮動小数点値を、それぞれ符号付き 32bit 整数値に変換し、結果をパックして宛先に書き込みます。
結果が不正確な値の場合、切り捨てられます (ゼロに向かって丸められます)。

操作例外 (IE) がマスクされており、浮動小数点値が NaN か 無限大、または、変換結果が符号付き 32bit 整数の範囲より大きい場合、32bit の不定整数値 (8000_0000h) を返します。
汎用レジスタ/メモリ
CVTSI2SS xmm1, reg32/mem32 | F3 (W0) 0F 2A /r | SSE
CVTSI2SS xmm1, reg64/mem64 | F3 (W1) 0F 2A /r | SSE
VCVTSI2SS xmm1, xmm2, reg32/mem32 | C4 RXB.00001 0.src.X.10 2A /r | AVX
VCVTSI2SS xmm1, xmm2, reg64/mem64 | C4 RXB.00001 1.src.X.10 2A /r | AVX
汎用レジスタ/メモリの符号付き整数値を、単精度浮動小数点値に変換し、値を XMM レジスタに書き込みます。

CVTSI2SS: 宛先 XMM レジスタの上位ビットは変更されません。
VCVTSI2SS: 宛先 xmm1 の上位ビットは、xmm2 からコピーされます。

変換結果が不正確な値の場合、値は MXCSR.RC の指定に従って丸められます。
CVTSI2SD xmm1, reg32/mem32 | F2 (W0) 0F 2A /r | SSE2
CVTSI2SD xmm1, reg64/mem64 | F2 (W1) 0F 2A /r | SSE2
VCVTSI2SD xmm1, xmm2, reg32/mem32 | C4 RXB.00001 0.src.X.11 2A /r | AVX
VCVTSI2SD xmm1, xmm2, reg64/mem64 | C4 RXB.00001 1.src.X.11 2A /r | AVX
汎用レジスタ/メモリの符号付き 32bit or 64bit 整数値を、倍精度浮動小数点値に変換し、宛先レジスタに書き込みます。

CVTSI2SD: 宛先 XMM レジスタの上位ビットは変更されません。
VCVTSI2SD: 宛先 xmm1 の上位ビットは、xmm2 からコピーされます。

変換結果が不正確な値の場合、値は MXCSR.RC の指定に従って丸められます。
CVTSS2SI reg32, xmm1/mem32  | F3 (W0) 0F 2D /r | SSE
CVTSS2SI reg64, xmm1/mem64  | F3 (W1) 0F 2D /r | SSE
VCVTSS2SI reg32, xmm1/mem32 | C4 RXB.00001 0.1111.X.10 2D /r | AVX
VCVTSS2SI reg64, xmm1/mem64 | C4 RXB.00001 1.1111.X.10 2D /r | AVX
下位 32bit の単精度浮動小数点値を、32bit または 64bit の符号付き整数値に変換し、値を汎用レジスタに書き込みます。

変換結果が不正確な値の場合、値は MXCSR.RC の指定に従って丸められます。

操作例外 (IE) がマスクされており、浮動小数点値が NaN か 無限大、または、変換結果が対象の符号付き整数の範囲より大きい場合、不定整数値を返します。
(32bit 整数の場合は 8000_0000h、64bit 整数の場合は 8000_0000_0000_0000h)。
CVTTSS2SI reg32, xmm1/mem32  | F3 (W0) 0F 2C /r | SSE
CVTTSS2SI reg64, xmm1/mem64  | F3 (W1) 0F 2C /r | SSE
VCVTTSS2SI reg32, xmm1/mem32 | C4 RXB.00001 0.1111.X.10 2C /r | AVX
VCVTTSS2SI reg64, xmm1/mem64 | C4 RXB.00001 1.1111.X.10 2C /r | AVX
下位 32bit の単精度浮動小数点値を、32bit または 64bit の符号付き整数値に変換し、値を汎用レジスタに書き込みます。
変換の結果が不正確な値である場合、値は切り捨てられます (ゼロ方向に丸められます)。

操作例外 (IE) がマスクされており、浮動小数点値が NaN か 無限大、または、変換結果が対象の符号付き整数の範囲より大きい場合、不定整数値を返します。
(32bit 整数の場合は 8000_0000h、64bit 整数の場合は 8000_0000_0000_0000h)。
CVTSD2SI reg32, xmm1/mem64  | F2 (W0) 0F 2D /r | SSE2
CVTSD2SI reg64, xmm1/mem64  | F2 (W1) 0F 2D /r | SSE2
VCVTSD2SI reg32, xmm2/mem64 | C4 RXB.00001 0.1111.X.11 2D /r | AVX
VCVTSD2SI reg64, xmm2/mem64 | C4 RXB.00001 1.1111.X.11 2D /r | AVX
下位 64bit の倍精度浮動小数点値を、32bit または 64bit の符号付き整数値に変換し、値を汎用レジスタに書き込みます。

結果が不正確な値の場合、MXCSR.RC の指定に従って丸められます。

操作例外 (IE) がマスクされており、浮動小数点値が NaN か 無限大、または、変換結果が対象の符号付き整数の範囲より大きい場合、不定整数値を返します。
(32bit 整数の場合は 8000_0000h、64bit 整数の場合は 8000_0000_0000_0000h)。
CVTTSD2SI reg32, xmm1/mem64 | F2 (W0) 0F 2C /r | SSE2
CVTTSD2SI reg64, xmm1/mem64 | F2 (W1) 0F 2C /r | SSE2
VCVTTSD2SI reg32, xmm2/mem64 | C4 RXB.00001 0.1111.X.11 2C /r | AVX
VCVTTSD2SI reg64, xmm2/mem64 | C4 RXB.00001 1.1111.X.11 2C /r | AVX
下位 64bit の倍精度浮動小数点値を、32bit または 64bit の符号付き整数値に変換し、値を汎用レジスタに書き込みます。
結果が不正確な値である場合、値は切り捨てられます (ゼロ方向に丸められます)。

操作例外 (IE) がマスクされており、浮動小数点値が NaN か 無限大、または、変換結果が対象の符号付き整数の範囲より大きい場合、不定整数値を返します。
(32bit 整数の場合は 8000_0000h、64bit 整数の場合は 8000_0000_0000_0000h)。
丸め
|7 4|3|2|1 0| bit
|---|P|O| RC|
丸めの即値バイト
bit 1-0 (RC)
丸め制御。

00b: 近い方に丸め
01b: 負の無限大方向に丸め
10b: 正の無限大方向に丸め
11b: 0 の方向に切り捨て
bit 2 (O)
丸め制御のソース。
0 : 丸め制御は即値の RC から
1 : 丸め制御は MXCSR の RC から
bit 3 (P)
精度例外。
0 : 通常の精度例外
1 : MXCSR の PE は変更されない。マスクを解除しても、精度例外は発生しません。
ROUNDSS xmm1, xmm2/mem64, imm8 | 66 0F 3A 0A /r ib | SSE4.1
VROUNDSS xmm1, xmm2, xmm3/mem64, imm8 | C4 RXB.03 X.src1.X.01 0A /r ib | AVX
下位 32bit の単精度の値を、即値バイトの指定に従って整数に丸め、結果を宛先の下位 32bit に、単精度値として書き込みます。

SNaN は QNaN に変換されます。
DAZ = 1 の場合、非正規化値は丸め前に 0 に変換されます。
ROUNDPS xmm1, xmm2/mem128, imm8  | 66 0F 3A 08 /r ib | SSE4.1
VROUNDPS xmm1, xmm2/mem128, imm8 | C4 RXB.03 X.1111.0.01 08 /r ib | AVX
VROUNDPS ymm1, xmm2/mem256, imm8 | C4 RXB.03 X.1111.1.01 08 /r ib | AVX
パック単精度の各値を、即値バイトの指定に従って整数に丸め、結果を宛先の対応する位置に、単精度値として書き込みます。

SNaN は QNaN に変換されます。
DAZ = 1 の場合、非正規化値は丸め前に 0 に変換されます。
ROUNDSD xmm1, xmm2/mem64, imm8 | 66 0F 3A 0B /r ib | SSE4.1
VROUNDSD xmm1, xmm2, xmm3/mem64, imm8 | C4 RXB.03 X.src1.X.01 0B /r ib | AVX
下位 64bit の倍精度の値を、即値バイトの指定に従って整数に丸め、結果を宛先の下位 64bit に、倍精度値として書き込みます。

SNaN は QNaN に変換されます。
DAZ = 1 の場合、非正規化値は丸め前に 0 に変換されます。
ROUNDPD xmm1, xmm2/mem128, imm8  | 66 0F 3A 09 /r ib | SSE4.1
VROUNDPD xmm1, xmm2/mem128, imm8 | C4 RXB.03 X.1111.0.01 09 /r ib | AVX
VROUNDPD ymm1, xmm2/mem256, imm8 | C4 RXB.03 X.1111.1.01 09 /r ib | AVX
パック倍精度の各値を、即値バイトの指定に従って整数に丸め、結果を宛先の対応する位置に、倍精度値として書き込みます。

SNaN は QNaN に変換されます。
DAZ = 1 の場合、非正規化値は丸め前に 0 に変換されます。