如何反转__m128类型变量?

时间:2013-11-18 15:40:21

标签: c++ c x86 sse simd

我知道这应该是一个谷歌搜索问题,但我找不到答案。

假设我有一个__m128变量a,其内容为a[0]a[1]a[2]a[3]。是否有一个单个函数可以将其反转为a[3]a[2]a[1]a[0]

1 个答案:

答案 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));

注意:掩码是一个立即值。它不能是动态的,因为它是生成的机器指令的一部分。