A.n*_*chi 2 c x86 sse simd intrinsics
我有一个已计算的4个浮点数的128位向量,我想改变这个向量的顺序,如下所示:
Vector A before reordering
+---+---+---+---+
| a | b | c | d |
+---+---+---+---+
Vector A after reordering
+---+---+---+---+
| b | a | c | d |
+---+---+---+---+
Run Code Online (Sandbox Code Playgroud)
正如我所说,矢量已经通过早期计算计算出来,所以没有办法使用_mm_set_ps()......任何人都知道如何做到这一点?
你正在寻找SHUFPS指令(shuffle packed单精度浮点数).
相应的内在是_mm_shuffle_ps:
__m128 _mm_shuffle_ps(__m128 a, __m128 b, unsigned int imm8);
Run Code Online (Sandbox Code Playgroud)
第三个参数是8位立即数,是排列.这表示您希望如何对值进行洗牌.要可读地创建它,您将需要使用_MM_SHUFFLE宏.这是一个有用的图形描述,如何_MM_SHUFFLE工作,取自一些旧的Microsoft文档:
