如何将两组4条短路装入XMM寄存器?

时间:2013-04-26 00:40:46

标签: c++ x86 sse simd intrinsics

我刚刚开始使用Visual C ++ 2012的SSE内在函数,我需要一些指针(没有双关语)。

我有两个数组,每个数组包含4个signed short(每个数组因此是64位,总共128个)。我想将一个加载到XMM寄存器的高位,另一个加载到低位。我可以使用SSE内在函数有效地实现这一目标吗?如果是这样,怎么样?

1 个答案:

答案 0 :(得分:12)

<强> SSE2:

short A[] = {0,1,2,3};
short B[] = {4,5,6,7};

__m128i a,b,v;
a = _mm_loadl_epi64((const __m128i*)A);
b = _mm_loadl_epi64((const __m128i*)B);
v = _mm_unpacklo_epi64(a,b);

// v = {0,1,2,3,4,5,6,7}

SSE4.1 + x64:

short A[] = {0,1,2,3};
short B[] = {4,5,6,7};

__m128i v;
v = _mm_loadl_epi64((const __m128i*)A);
v = _mm_insert_epi64(v,*(const long long*)B,1);

// v = {0,1,2,3,4,5,6,7}

请注意,AB没有对齐要求。但我建议他们两者都对齐到8个字节。