2012-03-03 79 views
3

如何在最少的時鐘週期數內將YMM寄存器的最低64位設置爲某個常數?我知道使用SSE指令以及AVX指令VBROADCASTSD可以做到這一點的各種方法,但我不確定哪種方法會產生最佳結果。高效地將YMM寄存器的最低64位設置爲常量

編輯:設置64位部分後,仍然需要使用完整的YMM寄存器。

感謝您的幫助!

+0

取決於您是否想在設置低64位或僅設置XMM部分後使用完整的YMM寄存器。 – hirschhornsalz 2012-03-03 12:43:47

+0

對不明確的地方 - 在設置低64位之後,我需要使用完整的YMM寄存器。 – 2012-03-03 12:49:19

+1

它也取決於常數。一些常量值可以很容易地生成,其他值必須從內存中加載) – jalf 2012-03-03 13:45:03

回答

7

如果您只需要設置最低64位並且其他YMM位不重要,請使用VMOVQ

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

AVX2允許其他替代方法:VPMASKMOVDVPBLENDD(但它尚未被任何處理器支持)。

+0

謝謝,這正是我正在尋找的! – 2012-03-03 13:57:34

+2

我也可以建議VBLENDPD(Sandy Bridge上的延遲1)而不是VANDPD + VORPD。 – 2012-03-03 14:24:35

+0

@NorbertP。 VBLENDPD絕對更好。謝謝。 – 2012-03-03 14:35:15

相關問題