AVX指令集引入了VPERMILPS,它似乎是SHUFPS的简化版本(对于两个输入寄存器相同的情况).
例如,以下说明:
c5 f0 c6 c1 00 vshufps xmm0,xmm1,xmm1,0x0
Run Code Online (Sandbox Code Playgroud)
可以替换为:
c4 e3 79 04 c1 00 vpermilps xmm0,xmm1,0x0
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,VPERMILPS版本需要额外增加一个字节并执行相同的操作.根据指令表,两条指令占用1个CPU周期并具有相同的吞吐量.
引入这种指令有什么意义?我错过了什么吗?
编辑: 有是这两个指令的区别之一.VPERMILPS将上部通道设置为零,而SHUFPS使它们不受影响.