我知道这应该是一个谷歌搜索问题,但我找不到答案。
假设我有一个__m128
变量a
,其内容为a[0]
,a[1]
,a[2]
,a[3]
。是否有一个单个函数可以将其反转为a[3]
,a[2]
,a[1]
,a[0]
?
答案 0 :(得分:13)
使用_mm_shuffle_ps()。该指令已在SSE中可用,并且可以通过组合来自两个输入向量中的每一个的两个任意32位元素,在单个向量中收集4个32位元素。
如何使用宏_MM_SHUFFLE()
前两个掩码值指定m1
中的源组件,
最后两个是m2
中的那些。
http://oi43.tinypic.com/24qn5lk.jpg
在向量中反转32位元素
__m128 input = ...;
__m128 reversed = _mm_shuffle_ps(input,input,_MM_SHUFFLE(0, 1, 2, 3));
注意:掩码是一个立即值。它不能是动态的,因为它是生成的机器指令的一部分。