其他分享
首页 > 其他分享> > c – SSE内在函数,用于复制寄存器中的字节

c – SSE内在函数,用于复制寄存器中的字节

作者:互联网

假设我有四个浮点数加载到寄存器(f0到f3),如下面的伪代码所示:

__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-3,c,sse,intrinsics,simd
来源: https://codeday.me/bug/20190824/1711781.html