SSE2指令将整数寄存器强制转换为短寄存器,反之亦然

时间:2013-05-16 10:58:01

标签: x86 sse simd sse2

是否有任何SSE2指令将整数寄存器强制转换为短寄存器,反之亦然?请建议。

1 个答案:

答案 0 :(得分:5)

这完全取决于“类型转换”的含义,但是如果您正在寻找缩小操作,那么您可以使用_mm_packs_epi32PACKSSDW)将两个整数向量打包到一个短向量:

__m128i vint1, vint2;  // 2 vectors of 4 x 32 bit ints
__m128i vshort;        // 1 vector of 8 x 16 bit ints

vshort = _mm_packs_epi32 (vint1, vint2);

反向扩展(拆包)操作可以这样实现:

 vint1 = _mm_srai_epi32(_mm_unpacklo_epi16(vshort, vshort), 16); // PUNPCKLWD+PSRAD
 vint2 = _mm_srai_epi32(_mm_unpackhi_epi16(vshort, vshort), 16); // PUNPCKHWD+PSRAD

请注意,使用SSE解包指令时没有自动符号扩展,因此需要在有符号值加宽时进行算术移位。