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

最佳答案

这完全取决于您所说的“类型转换”的含义,但是如果您正在寻找一种缩小操作,则可以使用_mm_packs_epi32(PACKSSDW)将两个整数向量打包为一个简短向量:

__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拆包指令时不会自动扩展符号,因此在扩展符号值时需要进行算术移位。

关于x86 - SSE2指令将整数寄存器类型转换为短寄存器,反之亦然,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16585639/

10-12 19:42