这是一个很有趣的指令,也很难懂。
Shuffle是英语洗牌的意思。在SSE的指令里面也和这个意思差不多。
shufps的语法为:
shufps xmm1, xmm2/m128, imm8
这个指令的作用就是把两个128位的浮点数组(float[4])“洗牌”到一个xmm的寄存器里面去。而imm8 是一个字节的立即数,控制这个洗牌的方法。
具体的洗牌方法是这样的:
把imm8这个8位数换算成4进制:A3A2A1A0
如果
dest = {x0, x1, x2, x3}
src = {y0, y1, y2, y3}
那么
dest = {xA0, xA1, yA2, yA3}
下面是一个例子:
shufps xmm0, xmm0, 93h
十六进制的93换算为四进制就是2103,经过这么一个洗牌的指令
xmm0 = {x0, x1, x2, x3}就变成了xmm0={x3, x0, x1, x2}。