为什么 avx sqrt(非压缩)指令有三个操作数?

vsqrtsd xmm1, xmm2, xmm3

这是否意味着类似于 xmm1=xmm2=sqrt(xmm3)

编辑: 下面的详细答案,但简而言之,流水线意味着:
xmm1.low  = sqrt(xmm3.low);
xmm1.high = xmm2.high;

最佳答案

英特尔® 64 位和 IA-32 架构软件开发人员手册,第 2B 卷,第 4-407 页,“SQRTSD — 计算标量 double 浮点的平方根 -
点值”:



该指令只是遵循其他二进制 V___SDV___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 节“压缩和标量 double 浮点指令”。对于 VSQRTSD,我们只定义 f(x, y) = √y,忽略第一个操作数。

*:注意:Intel手册在这里写了“xmm2”,这是一个错误。

关于assembly - avx sqrt 的三个操作数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10735652/

10-10 22:41