【发布时间】:2013-05-11 05:46:07
【问题描述】:
是否有任何 SSE2 指令将整数寄存器类型转换为短寄存器,反之亦然?请提出建议。
【问题讨论】:
是否有任何 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 解包指令时没有自动符号扩展,因此在扩展有符号值时需要进行算术移位。
【讨论】: