_mm_shuffle_ps只能复制a
的2个浮点数和b
的2个浮点数,对吗?有没有简单的方法可以从a
获得3个浮点数,从b
获得1个浮点数?我还注意到_mm_move_ss
可以完成部分工作,但它不会转移。
价:
__m128 _mm_shuffle_ps(__m128 a, __m128 b, unsigned int imm8)
答案 0 :(得分:2)
如果你有SSE4,那么使用BLENDPS,内在的是:
__m128 _mm_blend_ps (__m128 v1, __m128 v2, const int mask);
答案 1 :(得分:1)
不幸的是,唯一的2源shuffle是movss
,movsd
,shufps
,unpckl/hps/d
,movhlps
以及类似的非灵活指令。
palignr
might be useful,即使在FP指令之间使用int shuffle的旁路延迟,如果您的数据移动需要符合其模式。
AVX512为各种元素大小添加了2源完全混洗(交叉路口,带有矢量选择器)。像vpermi2w
和vpermt2b
正如保罗指出的那样,混合是灵活的方式来组合来自2个regs的数据而不会改组。
有关按数据移动类型组织的说明表,请参阅Agner Fog's Optimizing Assembly guide。另请参阅sse标记wiki。