X86 可以从一个源中获取3个元素的_mm_shuffle_ps的替代方案?

X86 可以从一个源中获取3个元素的_mm_shuffle_ps的替代方案?,x86,sse,simd,X86,Sse,Simd,可以从a复制2个浮点数,从b复制2个浮点数,对吗?有没有简单的方法可以从a获得3个浮点值,从b获得1个浮点值?我还注意到,\u mm\u move\u ss可以完成部分工作,但不能完成轮班 参考: \uuuum128\umm\ushuffle\ups(\uuuum128 a,\uuuum128 b,unsigned int imm8) 如果您有SSE4,则使用,其本质是: \uuuum128\umm\uBlend\uPS(\uuuum128 v1,\uuuum128 v2,常数整数掩码); 如果

可以从
a
复制2个浮点数,从
b
复制2个浮点数,对吗?有没有简单的方法可以从
a
获得3个浮点值,从
b
获得1个浮点值?我还注意到,
\u mm\u move\u ss
可以完成部分工作,但不能完成轮班

参考:

\uuuum128\umm\ushuffle\ups(\uuuum128 a,\uuuum128 b,unsigned int imm8)
如果您有SSE4,则使用,其本质是:

\uuuum128\umm\uBlend\uPS(\uuuum128 v1,\uuuum128 v2,常数整数掩码);
如果您有SSE4,则使用,其本质是:

\uuuum128\umm\uBlend\uPS(\uuuum128 v1,\uuuum128 v2,常数整数掩码);

不幸的是,仅有的两种源代码混洗是
movss
movsd
shufps
unpckl/hps/d
movhlps
,以及类似的非灵活指令

,即使在FP指令之间使用int-shuffle时存在旁路延迟,但前提是数据移动需要符合其模式

AVX512为各种元素大小添加了2源全混洗(车道交叉,带有矢量选择器)。和
vpermt2b

正如Paul所指出的,混合是一种灵活的方式,可以在不洗牌的情况下组合来自2个reg的数据



有关按数据移动类型组织的指令表,请参阅。另请参见标记wiki。

不幸的是,仅有的两种源代码混洗是
movss
movsd
shufps
unpckl/hps/d
movhlps
,以及类似的非灵活指令

,即使在FP指令之间使用int-shuffle时存在旁路延迟,但前提是数据移动需要符合其模式

AVX512为各种元素大小添加了2源全混洗(车道交叉,带有矢量选择器)。和
vpermt2b

正如Paul所指出的,混合是一种灵活的方式,可以在不洗牌的情况下组合来自2个reg的数据



有关按数据移动类型组织的指令表,请参阅。另请参见标签wiki。

这取决于您是否可以假设最低SSE版本,例如SSSE3或SSE4?我可以使用SSE3和SSE4。这取决于您是否可以假设最低SSE版本,例如SSSE3或SSE4?我可以使用SSE3和SSE4。洗牌的美妙之处在于它可以进行某种轮班工作,但是“混合”不能。@echo:如果这是您需要的,那么您可能应该编辑您的问题以包含该要求。“洗牌”的美妙之处在于它可以做一些轮班工作,但“混合”不能。@echo:如果您需要的是这样,那么您可能应该编辑您的问题以包含该要求