SSE 将 unsigned char 加载为 short

SSE load unsigned char to short

有没有更好的方法使用 SSE 将 unsigned char 数组加载到 short?喜欢

unsigned char foo1[16];

__m128i foo2 = _mm_loadu_si128((__m128i*)foo1);

我希望 foo2short int 数据类型存储元素。

不是很清楚你想要什么。

但是如果您希望 SSE 寄存器的每个输入字节都有一个短值,那么您可能需要这个(未经测试):

__declspec( align( 16 ) ) unsigned char foo1[ 16 ];
// Fill your array with data

const __m128i src = _mm_load_si128( ( __m128i* )foo1 );
const __m128i zero = _mm_setzero_si128();
const __m128i lower = _mm_unpacklo_epi8( src, zero );   // First 8 short values
const __m128i higher = _mm_unpackhi_epi8( src, zero );  // Last 8 short values