Optimization 有效地将YMM寄存器的最低64位设置为常量
如何在最少的时钟周期内将YMM寄存器的最低64位设置为常数?我知道使用SSE指令以及AVX指令Optimization 有效地将YMM寄存器的最低64位设置为常量,optimization,assembly,sse,vectorization,avx,Optimization,Assembly,Sse,Vectorization,Avx,如何在最少的时钟周期内将YMM寄存器的最低64位设置为常数?我知道使用SSE指令以及AVX指令VBROADCASTSD可以实现这一点的各种方法,但我不确定哪种方法会产生最佳结果 编辑:设置64位部分后,我仍然需要使用完整的YMM寄存器 谢谢你的帮助 如果您只需要设置最低64位,而其他YMM位无关紧要,请使用VMOVQ 如果需要在YMM寄存器中保留其他位,最有效的方法是使用VBLENDPD。或者,您可以使用VANDPD清除最低64位,然后使用VORPD加载常量 AVX2允许其他替代方法来执行此操作
VBROADCASTSD
可以实现这一点的各种方法,但我不确定哪种方法会产生最佳结果
编辑:设置64位部分后,我仍然需要使用完整的YMM寄存器
谢谢你的帮助 如果您只需要设置最低64位,而其他YMM位无关紧要,请使用
VMOVQ
如果需要在YMM寄存器中保留其他位,最有效的方法是使用VBLENDPD
。或者,您可以使用VANDPD
清除最低64位,然后使用VORPD
加载常量
AVX2允许其他替代方法来执行此操作:
VPMASKMOVD
或VPBLENDD
(但尚未得到任何处理器的支持).取决于您是要在设置低64位后使用完整的YMM寄存器,还是只使用XMM部分。很抱歉,不明确--我需要在设置低64位后使用完整的YMM寄存器。这还取决于常量。一些常量值可以很容易地生成,另一些则必须从内存中加载)这绝对正确。这样一个看似简单的问题需要很多规范!我试图加载的常量没有容易复制的模式(至少通过使用少量的按位、算术、广播或置换操作)。谢谢,这正是我想要的!我也可以建议使用VBLENDPD(Sandy Bridge上的延迟1),而不是VANDPD+VORPD。@NorbertP。VBLENDPD肯定更好。谢谢