6

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

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

4

1 回答 1

12

上交所2:

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}

A请注意, or没有对齐要求B。但我建议它们都对齐到 8 个字节。

于 2013-04-26T00:55:32.623 回答