x64浮点混合

时间:2015-01-03 23:38:18

标签: assembly x86 sse

描述: 来自第二个源操作数(第三个操作数)的双精度浮点值与第一个源操作数(第二个操作数)中的值有条件地合并,并写入目标操作数(第一个操作数)。立即位[3:0]确定是否从第二个源或第一个源复制目标中相应的双精度浮点值。如果掩码中对应于一个字的位为“1”,则复制第二个源操作数中的双精度浮点值,否则复制第一个源操作数中的值。

8位立即值中的哪一位重要?其他位是否重要?

1 个答案:

答案 0 :(得分:2)

正如你的引言所说,相关位是[3:0],即低4位。每个控制操作对应的单词。由于SSE寄存器中有4个字(浮点数),因此您有4个控制位。前4位被忽略。请注意,operation部分具有明确描述erm操作的伪代码:

BLENDPS (128-bit Legacy SSE version)
IF (IMM8[0] = 0) THEN DEST[31:0] <- DEST[31:0]
        ELSE DEST [31:0] <- SRC[31:0] FI
IF (IMM8[1] = 0) THEN DEST[63:32] <- DEST[63:32]
        ELSE DEST [63:32] <- SRC[63:32] FI
IF (IMM8[2] = 0) THEN DEST[95:64] <- DEST[95:64]
        ELSE DEST [95:64] <- SRC[95:64] FI
IF (IMM8[3] = 0) THEN DEST[127:96] <- DEST[127:96]
        ELSE DEST [127:96] <- SRC[127:96] FI

嗯,这是单精度BLENDPS。你提到4位的双精度,所以这必须意味着BLENDPD。使用SSE寄存器,只使用2位,因为您只能将2个双精度放入128位。 AVX版本确实使用4位。逻辑与上面相同。