有效地将YMM的最低64位设置为常量

voi*_*ter 3 optimization assembly sse vectorization avx

如何在最少的时钟周期内将YMM寄存器的最低64位设置为某个常量?我知道使用SSE指令以及AVX指令可以实现的各种方法VBROADCASTSD,但我不确定哪种方法会产生最佳结果.

编辑:设置64位部分后,我仍然需要使用完整的YMM寄存器.

谢谢你的帮助!

Evg*_*uev 7

如果您只需要设置最低64位而其他YMM位无关紧要,请使用VMOVQ.

如果需要保留YMM寄存器中的其他位,最有效的方法是使用VBLENDPD.或者,您可以清除最低64位VANDPD,然后加载常量VORPD.

AVX2允许其他替代方案:VPMASKMOVDVPBLENDD(但任何处理器尚不支持).

  • 我还可以建议VBLENDPD(Sandy Bridge上的延迟1)而不是VANDPD + VORPD. (2认同)