Intel 64/x86_64/IA-32/x86处理器 - SIMD指令集 - SSE扩展(7) - 混洗指令 & 解组合指令
SSE Shuffle and Unpack Instructions
SSE的混洗指令与解组合指令混洗shuffle或交错interleave单精度浮点操作数,并将结果保存到目标操作数。
指令 |
描述 |
SHUFPS |
格式:xmm1, xmm3/m128, imm8 按照imm8的指示,从xmm1与xmm2/m128中选取单精度浮点数据元素,把选取结果保存到xmm1。源操作数与目的操作数可以是同一个寄存器。
指令操作:
Select4(SRC, control) {
imm8的第0~1两个比特位决定选取源操作数的第几个数据元素并放置到目标操作数的第1个数据元素位置;第2~3两个比特位决定选取源操作数的第几个数据元素并放置到第2个数据元素位置,以此类推,一直枚举完imm8的最高第6~7比特位。参看下面的操作伪代码。这个操作相当于按imm8的指示,重新洗牌了源操作数中的数据元素顺序,结果保存在目标操作数中。
DEST[31:0] ßSelect4(SRC1[127:0], imm8[1:0]);
Intel C/C++ Compiler Intrinsic Equivalent
|
UNPCKHPS |
格式:UNPCKHPS xmm1, xmm2/m128 从xmm1与xmm2/m128中选取高两个单精度浮点数据元素,放置到目标寄存器xmm1中。
指令操作: DEST[31:0] ßSRC1[95:64](xmm1第三个数据元素)
|
UNPCKLPS |
格式:UNPCKLPS xmm1, xmm2/m128 从xmm1与xmm2/m128中选取低两个单精度浮点数据元素,放置到目标寄存器xmm1中。
指令操作: DEST[31:0] ßSRC1[31:0] (xmm1的第一个数据元素)
|