我刚刚开始使用 Visual C++ 2012 使用 SSE 内在函数,我需要一些指针(不是双关语)。
我有两个数组,每个数组包含 4signed short
个(因此每个数组都是 64 位,总共 128 个)。我想将一个加载到 XMM 寄存器的高位,另一个加载到低位。我可以使用 SSE 内在函数有效地完成此任务吗?如果是这样,怎么做?
我刚刚开始使用 Visual C++ 2012 使用 SSE 内在函数,我需要一些指针(不是双关语)。
我有两个数组,每个数组包含 4signed short
个(因此每个数组都是 64 位,总共 128 个)。我想将一个加载到 XMM 寄存器的高位,另一个加载到低位。我可以使用 SSE 内在函数有效地完成此任务吗?如果是这样,怎么做?
上交所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 个字节。