avx sqrt(パックされていない)命令に3つのオペランドがあるのはなぜですか?
vsqrtsd xmm1, xmm2, xmm3
これは次のような意味xmm1=xmm2=sqrt(xmm3)
ですか?
編集:以下の詳細な回答ですが、要するに組立ラインは次のことを意味します:
xmm1.low = sqrt(xmm3.low);
xmm1.high = xmm2.high;
avx sqrt(パックされていない)命令に3つのオペランドがあるのはなぜですか?
vsqrtsd xmm1, xmm2, xmm3
これは次のような意味xmm1=xmm2=sqrt(xmm3)
ですか?
編集:以下の詳細な回答ですが、要するに組立ラインは次のことを意味します:
xmm1.low = sqrt(xmm3.low);
xmm1.high = xmm2.high;
インテル®64およびIA-32アーキテクチャー・ソフトウェア開発者マニュアル、第2B巻、4-407ページ、「SQRTSD-スカラー倍精度浮動小数点値の計算平方根」:
VSQRTSD xmm1、xmm2、xmm3 / m64
xmm3 / m64の低倍精度浮動小数点値の平方根を計算し、結果をxmm1*に格納します。また、xmm2の上位倍精度浮動小数点値(bits [127:64])がxmm1 [127:64]にコピーされます。
手術
DEST[63:0] ← SQRT(SRC2[63:0]) DEST[127:64] ← SRC1[127:64] DEST[VLMAX-1:128] ← 0
命令は、他のバイナリ のパターンと、を実行するV___SD
などのV___SS
操作に従うだけです。VSUBSD
DEST[63:0] ← SRC1[63:0] - SRC2[63:0]
DEST[127:64] ← SRC1[127:64]
DEST[VLMAX-1:128] ← 0
のようVRCPSS xmm1, xmm2, xmm3/32
に、
DEST[31:0] ← APPROXIMATE(1/SRC2[31:0])
DEST[127:32] ← SRC1[127:32]
DEST[VLMAX-1:128] ← 0
一般的な形式は次のようなものです
xmm1.low = f(xmm2.low, xmm3.low);
xmm1.high = xmm2.high,
インテル®64およびIA-32アーキテクチャー・ソフトウェア開発者マニュアル、第1巻、§11.4.1「パックドおよびスカラー倍精度浮動小数点命令」で説明されているように。VSQRTSDの場合、最初のオペランドを無視して、f(x、y)=√yを定義するだけです。
*:注:Intelのマニュアルにはここに「xmm2」と書かれていますが、これはエラーです。