2011-05-02 64 views
0

_mm_shuffle_ps可以复制从a 2辆花车和2从b,对不对?有没有简单的方法来从b得到a和1 3辆花车?我也注意到_mm_move_ss可以完成这项工作的一部分,但它不会转移。更好_mm_shuffle_ps可以从一个来源获取3个元素?

编号:

__m128 _mm_shuffle_ps(__m128 a, __m128 b, unsigned int imm8) 
+0

这取决于你是否能承担最小的SSE版本,例如SSSE3或SSE4? – 2011-05-02 20:10:51

+0

我可以使用SSE3和SSE4。 – echo 2011-05-03 18:20:12

回答

2

如果你有SSE4然后用BLENDPS,对于其内在是:

__m128 _mm_blend_ps (__m128 v1, __m128 v2, const int mask); 
+0

_mm_shuffle_ps的优点是它可以做一些轮班工作,但_mm_blend_ps不能。 – echo 2011-05-03 19:07:44

+3

@echo:如果这就是你需要的,那么你应该编辑你的问题来包含那个需求 – 2011-05-03 19:45:50

1

不幸的是,只有2源洗牌是movssmovsdshufpsunpckl/hps/dmovhlps以及类似的非灵活指令。

palignr might be useful,即使使用FP指令之间的int洗牌,如果你的数据移动需求,符合其模式旁路延迟。

AVX512添加2-源充分混洗(泳道交叉,与矢量选择器),用于各种元件的尺寸。东西如vpermi2wvpermt2b

正如Paul指出的,混合是组合数据的灵活方式,无需混洗。


查看Agner Fog's Optimizing Assembly guide了解按数据移动类型组织的指令表。另请参阅标记wiki。