(単精度) 加算/減算 | |
ADDSS VADDSS | 単一単精度の加算 [SSE] |
---|---|
ADDPS VADDPS | パック単精度の加算 [SSE] |
SUBSS VSUBSS | 単一単精度の減算 [SSE] |
SUBPS VSUBPS | パック単精度の減算 [SSE] |
HADDPS VHADDPS | パック単精度の隣接加算 [SSE3] |
HSUBPS VHSUBPS | パック単精度の隣接減算 [SSE3] |
ADDSUBPS VADDSUBPS | パック単精度の加算と減算 [SSE3] |
(単精度) 乗算/除算 | |
MULSS VMULSS | 単一単精度の乗算 [SSE] |
MULPS VMULPS | パック単精度の乗算 [SSE] |
DIVSS VDIVSS | 単一単精度の除算 (商) [SSE] |
DIVPS VDIVPS | パック単精度の除算 (商) [SSE] |
DPPS VDPPS | パック単精度のドット積 [SSE4.1] |
(単精度) ほか | |
SQRTSS VSQRTSS | 単一単精度の平方根 [SSE] |
SQRTPS VSQRTPS | パック単精度の平方根 [SSE] |
RCPSS VRCPSS | 単一単精度の逆数近似 [SSE] |
RCPPS VRCPPS | パック単精度の逆数近似 [SSE] |
RSQRTSS VRSQRTSS | 単一単精度の平方根の逆数近似 [SSE] |
RSQRTPS VRSQRTPS | パック単精度の平方根の逆数近似 [SSE] |
(倍精度) 加算/減算 | |
ADDSD VADDSD | 単一倍精度の加算 [SSE2] |
ADDPD VADDPD | パック倍精度の加算 [SSE2] |
SUBSD VSUBSD | 単一倍精度の減算 [SSE2] |
SUBPD VSUBPD | パック倍精度の減算 [SSE2] |
HADDPD VHADDPD | パック倍精度の隣接加算 [SSE3] |
HSUBPD VHSUBPD | パック倍精度の隣接減算 [SSE3] |
ADDSUBPD VADDSUBPD | パック倍精度の加算と減算 [SSE3] |
(倍精度) 乗算/除算 | |
MULSD VMULSD | 単一倍精度の乗算 [SSE2] |
MULPD VMULPD | パック倍精度の乗算 [SSE2] |
DIVSD VDIVSD | 単一倍精度の除算 (商) [SSE2] |
DIVPD VDIVPD | パック倍精度の除算 (商) [SSE2] |
DPPD VDPPD | パック倍精度ドット積 [SSE4.1] |
(倍精度) ほか | |
SQRTSD VSQRTSD | 単一倍精度の平方根 [SSE2] |
SQRTPD VSQRTPD | パック倍精度の平方根 [SSE2] |
(単精度) 加算/減算
ADDSS xmm1, xmm2/mem32 | F3 0F 58 /r | SSE VADDSS xmm1, xmm2, xmm3/mem32 | C4 RXB.00001 X.src.X.10 58 /r | AVX
第1ソースの下位 32bit の単精度値と、第2ソースの対応する値を加算し、結果を宛先の下位 32bit に書き込みます。
ADDSS: 宛先の bit 127:32 は変更されません。
VADDSS: 宛先の bit 127:32 は第1ソースからコピーされます。
ADDSS: 宛先の bit 127:32 は変更されません。
VADDSS: 宛先の bit 127:32 は第1ソースからコピーされます。
ADDPS xmm1, xmm2/mem128 | 0F 58 /r | SSE VADDPS xmm1, xmm2, xmm3/mem128 | C4 RXB.00001 X.src.0.00 58 /r | AVX VADDPS ymm1, ymm2, ymm3/mem256 | C4 RXB.00001 X.src.1.00 58 /r | AVX
第1ソースのパック単精度と、第2ソースの対応する値を加算し、各結果を、宛先の対応する位置に書き込みます。
SUBSS xmm1, xmm2/mem32 | F3 0F 5C /r | SSE VSUBSS xmm1, xmm2, xmm3/mem32 | C4 RXB.01 X.src1.X.10 5C /r | AVX
第1ソースの下位 32bit の単精度値から、第2ソースの対応する値を減算し、結果を宛先の下位 32bit に書き込みます。
SUBPS xmm1, xmm2/mem128 | 0F 5C /r | SSE VSUBPS xmm1, xmm2, xmm3/mem128 | C4 RXB.00001 X.src.0.00 5C /r | AVX VSUBPS ymm1, ymm2, ymm3/mem256 | C4 RXB.00001 X.src.1.00 5C /r | AVX
第1ソースのパック単精度値から、第2ソースの対応する値を減算し、結果を宛先の対応する位置に書き込みます。
HADDPS xmm1, xmm2/mem128 | F2 0F 7C /r | SSE3 VHADDPS xmm1, xmm2, xmm3/mem128 | C4 RXB.00001 X.src.0.11 7C /r | AVX VHADDPS ymm1, ymm2, ymm3/mem256 | C4 RXB.00001 X.src.1.11 7C /r | AVX
2つのソースオペランドのパック単精度において、それぞれで隣接する位置の値を加算し、結果をパックして宛先に格納します。
一つのオペランドの結果の 64bit を一単位として、交互に並べます。
一つのオペランドの結果の 64bit を一単位として、交互に並べます。
* HADDPS op1 |4321| op2 |8765| -> op1 |7+8|5+6|3+4|1+2| * VHADDPS src1: x0-x7, src2: y0-y7 dst |y6+y7|y4+y5|x6+x7|x4+x5|y2+y3|y0+y1|x2+x3|x0+x1|
HSUBPS xmm1, xmm2/mem128 | F2 0F 7D /r | SSE3 VHSUBPS xmm1, xmm2, xmm3/mem128 | C4 RXB.00001 X.src.0.11 7D /r | AVX VHSUBPS ymm1, ymm2, ymm3/mem256 | C4 RXB.00001 X.src.1.11 7D /r | AVX
2つのソースオペランドのパック単精度において、それぞれで隣接する位置の値から、(下位 - 上位) で減算を行い、結果をパックして宛先に格納します。
一つのオペランドの結果の 64bit を一単位として、交互に並べます。
一つのオペランドの結果の 64bit を一単位として、交互に並べます。
* HSUBPS op1 |4321| op2 |8765| -> op1 |7-8|5-6|3-4|1-2| * VHSUBPS src1: x0-x7, src2: y0-y7 dst |y6-y7|y4-y5|x6-x7|x4-x5|y2-y3|y0-y1|x2-x3|x0-x1|
ADDSUBPS xmm1, xmm2/mem128 | F2 0F D0 /r | SSE3 VADDSUBPS xmm1, xmm2, xmm3/mem128 | C4 RXB.00001 X.src.0.11 D0 /r | AVX VADDSUBPS ymm1, ymm2, ymm3/mem256 | C4 RXB.00001 X.src.1.11 D0 /r | AVX
下位から順に、パック単精度の各値の位置を 0,1,2,3... とした場合、
第1ソースの 0,2,4... の値から、第2ソースの対応する値を減算し、結果を、宛先の対応する位置に書き込みます。
第1ソースの 1,3,5... の値と、第2ソースの対応する値を加算し、結果を、宛先の対応する位置に書き込みます。
第1ソースの 0,2,4... の値から、第2ソースの対応する値を減算し、結果を、宛先の対応する位置に書き込みます。
第1ソースの 1,3,5... の値と、第2ソースの対応する値を加算し、結果を、宛先の対応する位置に書き込みます。
(単精度) 乗算/除算
MULSS xmm1, xmm2/mem32 | F3 0F 59 /r | SSE VMULSS xmm1, xmm2, xmm3/mem32 | C4 RXB.01 X.src1.X.10 59 /r | AVX
第1ソースの下位 32bit 単精度値と、第2ソースの対応する値を乗算し、結果を、宛先の下位 32bit に書き込みます。
MULPS xmm1, xmm2/mem128 | 0F 59 /r | SSE VMULPS xmm1, xmm2, xmm3/mem128 | C4 RXB.01 X.src1.0.00 59 /r | AVX VMULPS ymm1, ymm2, ymm3/mem256 | C4 RXB.01 X.src1.1.00 59 /r | AVX
第1ソースのパック単精度と、第2ソースの対応する値を乗算し、それぞれの結果を、宛先の対応する位置に書き込みます。
DIVSS xmm1, xmm2/mem32 | F3 0F 5E /r | SSE VDIVSS xmm1, xmm2, xmm3/mem32 | C4 RXB.00001 X.src.X.10 5E /r | AVX
第1ソースの下位 32bit の単精度値を、第2ソースの対応する値で除算し、その商を、宛先の下位 32bit に書き込みます。
DIVPS xmm1, xmm2/mem128 | 0F 5E /r | SSE VDIVPS xmm1, xmm2, xmm3/mem128 | C4 RXB.00001 X.src.0.00 5E /r | AVX VDIVPS ymm1, ymm2, ymm3/mem256 | C4 RXB.00001 X.src.1.00 5E /r | AVX
第1ソースのパック単精度を、第2ソースの対応する値で除算し、その商を、宛先の対応する位置に書き込みます。
DPPS xmm1, xmm2/mem128, imm8 | 66 0F 3A 40 /r ib | SSE4.1 VDPPS xmm1, xmm2, xmm3/mem128, imm8 | C4 RXB.00011 X.src.0.01 40 /r ib | AVX VDPPS ymm1, ymm2, ymm3/mem256, imm8 | C4 RXB.00011 X.src.1.01 40 /r ib | AVX
ソースオペランドのドット積を計算します。
即値オペランドは、bit 7:4 で乗算の値、bit 3:0 で書き込む値を指定します。
即値オペランドは、bit 7:4 で乗算の値、bit 3:0 で書き込む値を指定します。
if(imm8[4] == 0) tmp1 = 0; else tmp1 = src1[31:0] * src2[31:0]; if(imm8[5] == 0) tmp2 = 0; else tmp2 = src1[63:32] * src2[63:32]; if(imm8[6] == 0) tmp3 = 0; else tmp3 = src1[95:64] * src2[95:64]; if(imm8[7] == 0) tmp4 = 0; else tmp4 = src1[127:96] * src2[127:96]; tmp1 = tmp1 + tmp2 tmp3 = tmp3 + tmp4 tmp1 = tmp1 + tmp3 if(imm[0] == 1) dst[31:0] = tmp1; else dst[31:0] = 0; if(imm[1] == 1) dst[63:32] = tmp1; else dst[63:32] = 0; if(imm[2] == 1) dst[95:64] = tmp1; else dst[95:64] = 0; if(imm[3] == 1) dst[127:96] = tmp1; else dst[127:96] = 0;
(単精度) ほか
SQRTSS xmm1, xmm2/mem32 | F3 0F 51 /r | SSE VSQRTSS xmm1, xmm2, xmm3/mem64 | C4 RXB.01 X.src1.X.10 51 /r | AVX
ソースオペランドの下位 32bit の単精度値の平方根を計算し、結果を宛先の下位 32bit に書き込みます。
+∞ の平方根を実行すると、+∞ が返されます。
+∞ の平方根を実行すると、+∞ が返されます。
SQRTPS xmm1, xmm2/mem128 | 0F 51 /r | SSE VSQRTPS xmm1, xmm2/mem128 | C4 RXB.01 X.1111.0.00 51 /r | AVX VSQRTPS ymm1, ymm2/mem256 | C4 RXB.01 X.1111.1.00 51 /r | AVX
ソースオペランドのパック単精度のそれぞれの平方根を計算し、結果を宛先の対応する位置に書き込みます。
+∞ の平方根を実行すると、+∞ が返されます。
+∞ の平方根を実行すると、+∞ が返されます。
RCPSS xmm1, xmm2/mem32 | F3 0F 53 /r | SSE VRCPSS xmm1, xmm2, xmm3/mem128 | C4 RXB.01 X.src1.X.10 53 /r | AVX
ソースオペランドの下位 32bit の単精度値の逆数近似を計算し、結果を宛先の下位 32bit に書き込みます。
MXCSR.RC は結果に影響を与えません。
最大誤差は、真の逆数の 1.5 * 2^-12 倍以下です。
±0 または非正規化のソース値は、ソースと同じ符号の無限大を返します。
アンダーフローした結果は、符号付きの 0 に変更されます。
ソースが SNaN か QNaN の場合、QNaN が返されます。
MXCSR.RC は結果に影響を与えません。
最大誤差は、真の逆数の 1.5 * 2^-12 倍以下です。
±0 または非正規化のソース値は、ソースと同じ符号の無限大を返します。
アンダーフローした結果は、符号付きの 0 に変更されます。
ソースが SNaN か QNaN の場合、QNaN が返されます。
RCPPS xmm1, xmm2/mem128 | 0F 53 /r | SSE VRCPPS xmm1, xmm2/mem128 | C4 RXB.01 X.1111.0.00 53 /r | AVX VRCPPS ymm1, ymm2/mem256 | C4 RXB.01 X.1111.1.00 53 /r | AVX
ソースオペランドのパック単精度のぞれぞれの逆数近似を計算し、結果を宛先の対応する位置に書き込みます。
MXCSR.RC は結果に影響を与えません。
最大誤差は、真の逆数の 1.5 * 2^-12 倍以下です。
±0 または非正規化のソース値は、ソースと同じ符号の無限大を返します。
アンダーフローした結果は、符号付きの 0 に変更されます。
ソースが SNaN か QNaN の場合、QNaN が返されます。
MXCSR.RC は結果に影響を与えません。
最大誤差は、真の逆数の 1.5 * 2^-12 倍以下です。
±0 または非正規化のソース値は、ソースと同じ符号の無限大を返します。
アンダーフローした結果は、符号付きの 0 に変更されます。
ソースが SNaN か QNaN の場合、QNaN が返されます。
RSQRTSS xmm1, xmm2/mem32 | F3 0F 52 /r | SSE VRSQRTSS xmm1, xmm2, xmm3/mem128 | C4 RXB.01 X.src1.X.10 52 /r | AVX
ソースオペランドの下位 32bit の単精度値の平方根の逆数近似を計算し、結果を下位 32bit に書き込みます。
MXCSR.RC は結果に影響しません。
最大誤差は、真の逆数平方根の 1.5 * 2^-12 倍以下です。
±0 または非正規化のソース値は、ソースと同じ符号の無限大を返します。
-0 と -非正規化 以外の負のソース値は、QNaN を返します。
SNaN と QNaN のソース値では、QNaN が返されます。
MXCSR.RC は結果に影響しません。
最大誤差は、真の逆数平方根の 1.5 * 2^-12 倍以下です。
±0 または非正規化のソース値は、ソースと同じ符号の無限大を返します。
-0 と -非正規化 以外の負のソース値は、QNaN を返します。
SNaN と QNaN のソース値では、QNaN が返されます。
RSQRTPS xmm1, xmm2/mem128 | 0F 52 /r | SSE VRSQRTPS xmm1, xmm2/mem128 | C4 RXB.01 X.1111.0.00 52 /r | AVX VRSQRTPS ymm1, ymm2/mem256 | C4 RXB.01 X.1111.1.00 52 /r | AVX
ソースオペランドのパック単精度のそれぞれの平方根の逆数近似を計算し、結果を宛先の対応する位置に書き込みます。
MXCSR.RC は結果に影響しません。
最大誤差は、真の逆数平方根の 1.5 * 2^-12 倍以下です。
±0 または非正規化のソース値は、ソースと同じ符号の無限大を返します。
-0 と -非正規化 以外の負のソース値は、QNaN を返します。
SNaN と QNaN のソース値では、QNaN が返されます。
MXCSR.RC は結果に影響しません。
最大誤差は、真の逆数平方根の 1.5 * 2^-12 倍以下です。
±0 または非正規化のソース値は、ソースと同じ符号の無限大を返します。
-0 と -非正規化 以外の負のソース値は、QNaN を返します。
SNaN と QNaN のソース値では、QNaN が返されます。
(倍精度) 加算/減算
ADDSD xmm1, xmm2/mem64 | F2 0F 58 /r | SSE2 VADDSD xmm1, xmm2, xmm3/mem64 | C4 RXB.00001 X.src.X.11 58 /r | AVX
第1ソースの下位 64bit の倍精度値と、第2ソースの下位 64bit 値を加算し、結果を宛先の下位 64bit に書き込みます。
ADDSD: 宛先の bit 127:64 は変更されません。
VADDSD: 宛先の bit 127:64 は第1ソースからコピーされます。
ADDSD: 宛先の bit 127:64 は変更されません。
VADDSD: 宛先の bit 127:64 は第1ソースからコピーされます。
ADDPD xmm1, xmm2/mem128 | 66 0F 58 /r | SSE2 VADDPD xmm1, xmm2, xmm3/mem128 | C4 RXB.00001 X.src.0.01 58 /r | AVX VADDPD ymm1, ymm2, ymm3/mem256 | C4 RXB.00001 X.src.1.01 58 /r | AVX
第1ソースのパック倍精度と、第2ソースの対応する値を加算し、各結果を、宛先の対応する位置に書き込みます。
SUBSD xmm1, xmm2/mem64 | F2 0F 5C /r | SSE2 VSUBSD xmm1, xmm2, xmm3/mem64 | C4 RXB.01 X.src1.X.11 5C /r | AVX
第1ソースの下位 64bit の倍精度値から、第2ソースの対応する値を減算し、結果を宛先の下位 64bit に書き込みます。
SUBPD xmm1, xmm2/mem128 | 66 0F 5C /r | SSE2 VSUBPD xmm1, xmm2, xmm3/mem128 | C4 RXB.01 X.src1.0.01 5C /r | AVX VSUBPD ymm1, ymm2, ymm3/mem256 | C4 RXB.01 X.src1.1.01 5C /r | AVX
第1ソースのパック倍精度から、第2ソースの対応する値を減算し、結果を宛先の対応する位置に書き込みます。
HADDPD xmm1, xmm2/mem128 | 66 0F 7C /r | SSE3 VHADDPD xmm1, xmm2, xmm3/mem128 | C4 RXB.00001 X.src.0.01 7C /r | AVX VHADDPD ymm1, ymm2, ymm3/mem256 | C4 RXB.00001 X.src.1.01 7C /r | AVX
2つのソースオペランドのパック倍精度において、それぞれで隣接する位置の値を加算し、結果をパックして宛先に格納します。
一つのオペランドの結果の 64bit を一単位として、交互に並べます。
一つのオペランドの結果の 64bit を一単位として、交互に並べます。
* HADDPD op1 |B|A| op2 |D|C| -> op1 |C+D|A+B| * VHADDPD src1 |4321| src2 |8765| -> dst |7+8|3+4|5+6|1+2|
HSUBPD xmm1, xmm2/mem128 | 66 0F 7D /r | SSE3 VHSUBPD xmm1, xmm2, xmm3/mem128 | C4 RXB.00001 X.src.0.01 7D /r | AVX VHSUBPD ymm1, ymm2, ymm3/mem256 | C4 RXB.00001 X.src.1.01 7D /r | AVX
2つのソースオペランドのパック倍精度において、それぞれで隣接する位置の値から、(下位 - 上位) で減算を行い、結果をパックして宛先に格納します。
一つのオペランドの結果の 64bit を一単位として、交互に並べます。
一つのオペランドの結果の 64bit を一単位として、交互に並べます。
* HSUBPD op1 |B|A| op2 |D|C| -> op1 |C-D|A-B| * VHSUBPD src1 |4321| src2 |8765| -> dst |7-8|3-4|5-6|1-2|
ADDSUBPD xmm1, xmm2/mem128 | 66 0F D0 /r | SSE3 VADDSUBPD xmm1, xmm2, xmm3/mem128 | C4 RXB.00001 X.src.0.01 D0 /r | AVX VADDSUBPD ymm1, ymm2, ymm3/mem256 | C4 RXB.00001 X.src.1.01 D0 /r | AVX
下位から順に、パック倍精度の各値の位置を 0,1,2,3... とした場合、
第1ソースの 0,2,4... の値から、第2ソースの対応する値を減算し、その結果を、宛先の対応する位置に書き込みます。
第1ソースの 1,3,5... の値と、第2ソースの対応する値を加算し、その結果を、宛先の対応する位置に書き込みます。
第1ソースの 0,2,4... の値から、第2ソースの対応する値を減算し、その結果を、宛先の対応する位置に書き込みます。
第1ソースの 1,3,5... の値と、第2ソースの対応する値を加算し、その結果を、宛先の対応する位置に書き込みます。
(倍精度) 乗算/除算
MULSD xmm1, xmm2/mem64 | F2 0F 59 /r | SSE2 VMULSD xmm1, xmm2, xmm3/mem64 | C4 RXB.01 X.src1.X.11 59 /r | AVX
第1ソースの下位 64bit の倍精度値と、第2ソースの対応する値を乗算し、結果を、宛先の下位 64bit に書き込みます。
MULPD xmm1, xmm2/mem128 | 66 0F 59 /r | SSE2 VMULPD xmm1, xmm2, xmm3/mem128 | C4 RXB.01 X.src.0.01 59 /r | AVX VMULPD ymm1, ymm2, ymm3/mem256 | C4 RXB.01 X.src.1.01 59 /r | AVX
第1ソースのパック倍精度と、第2ソースの対応する値を乗算し、それぞれの結果を、宛先の対応する位置に書き込みます。
DIVSD xmm1, xmm2/mem64 | F2 0F 5E /r | SSE2 VDIVSD xmm1, xmm2, xmm3/mem64 | C4 RXB.00001 X.src.X.11 5E /r | AVX
第1ソースの下位 64bit の倍精度値を、第2ソースの対応する値で除算し、その商を、宛先の下位 64bit に書き込みます。
DIVPD xmm1, xmm2/mem128 | 66 0F 5E /r | SSE2 VDIVPD xmm1, xmm2, xmm3/mem128 | C4 RXB.00001 X.src.0.01 5E /r | AVX VDIVPD ymm1, ymm2, ymm3/mem256 | C4 RXB.00001 X.src.1.01 5E /r | AVX
第1ソースのパック倍精度を、第2ソースの対応する値で除算し、それぞれの商を、宛先の対応する位置に書き込みます。
DPPD xmm1, xmm2/mem128, imm8 | 66 0F 3A 41 /r ib | SSE4.1 VDPPD xmm1, xmm2, xmm3/mem128, imm8 | C4 RXB.00011 X.src.0.01 41 /r ib | AVX
ソースオペランドのドット積を計算します。
即値オペランドは、bit 5:4 で乗算の値、bit 1:0 で書き込む値を指定します。
即値オペランドは、bit 5:4 で乗算の値、bit 1:0 で書き込む値を指定します。
if(imm8[4] == 0) tmp1 = 0; else tmp1 = src1[63:0] * src2[63:0]; if(imm8[5] == 0) tmp2 = 0; else tmp2 = src1[127:64] * src2[127:64]; tmp1 = tmp1 + tmp2 if(imm[0] == 1) dst[63:0] = tmp1; else dst[63:0] = 0; if(imm[1] == 1) dst[127:64] = tmp1; else dst[127:64] = 0;
(倍精度) ほか