sse快速加载数组的前半部分

sse fast load first half of an array

本文关键字:前半部 数组 加载 sse      更新时间:2023-10-16

假设我有一个大小为8的数组,用无符号整数填充。

unsigned int t[8]

现在我想将每个元素的前16位加载到128位寄存器中:

__m128i to_fill

有快速的方法吗?而不是使用循环并屏蔽每个元素?

您需要加载两个4 x 32位int的向量,屏蔽每个元素的高16位,然后将它们打包为一个8 x 16位int的单个向量。

__m128i v_lo = _mm_loadu_si128((__m128i *)&t[0]);
__m128i v_hi = _mm_loadu_si128((__m128i *)&t[4]);
v_lo = _mm_and_si128(v_lo, _mm_set1_epi32(0xffff));
v_hi = _mm_and_si128(v_hi, _mm_set1_epi32(0xffff));
__m128i v = _mm_packs_epi32(v_lo, v_hi);