如何使用Intel内在函数重新排序128位向量?

时间:2017-06-25 14:37:14

标签: c x86 sse simd intrinsics

我有一个已计算的4个浮点数的128位向量,我想改变这个向量的顺序如下:

Vector A before reordering
+---+---+---+---+
| a | b | c | d |
+---+---+---+---+

Vector A after reordering
+---+---+---+---+
| b | a | c | d |
+---+---+---+---+

正如我所说,矢量已经通过早期的计算计算出来,所以无法使用_mm_set_ps() ......任何人都知道如何做到这一点?

1 个答案:

答案 0 :(得分:6)

您正在寻找SHUFPS instruction(随机播放的单精度浮标) 相应的内在因素是_mm_shuffle_ps

__m128 _mm_shuffle_ps(__m128 a, __m128 b, unsigned int imm8);

第三个参数,一个8位立即数,是排列。这表示您希望如何对值进行洗牌。要以可读方式创建此内容,您需要使用_MM_SHUFFLE宏。以下是有关_MM_SHUFFLE工作原理的有用图形说明,摘自some old Microsoft documentation