假设我有四个浮点数加载到寄存器中( f0f3 ),如以下伪代码所示:

__m128 xmm1 = < f0, f1, f2, f3 >

现在我想将第一个元素复制到其他位置,以便我得到一个如下所示的寄存器:
__m128 xmm2 = < f0, f0, f0, f0 >

( f0 仅在该 SSE 寄存器中可用)

我怎样才能尽可能有效地存档?我知道有一个简单的天真的解决方案(卸载第一个元素,然后使用 _mm_set_ps1 ),但我想知道这是否可以更有效地完成。

最佳答案

你可以用 _mm_shuffle_ps (SHUFPS) 做到这一点:

#include "xmmintrin.h"   // SSE

xmm2 = _mm_shuffle_ps(xmm1, xmm1, _MM_SHUFFLE(0, 0, 0, 0));

注意:根据您对上面示例中元素的排序方式,它可能需要改为:
xmm2 = _mm_shuffle_ps(xmm1, xmm1, _MM_SHUFFLE(3, 3, 3, 3));

关于c++ - 用于在寄存器内复制字节的 SSE 内在函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28308890/

10-11 22:00