这完全取决于"类型转换"的含义,但是如果你正在寻找缩小操作,那么你可以使用_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);
Run Code Online (Sandbox Code Playgroud)
反向扩展(拆包)操作可以像这样实现:
vint1 = _mm_srai_epi32(_mm_unpacklo_epi16(vshort, vshort), 16); // PUNPCKLWD+PSRAD
vint2 = _mm_srai_epi32(_mm_unpackhi_epi16(vshort, vshort), 16); // PUNPCKHWD+PSRAD
Run Code Online (Sandbox Code Playgroud)
请注意,使用SSE解包指令时没有自动符号扩展,因此在加宽有符号值时需要进行算术移位.
| 归档时间: |
|
| 查看次数: |
1001 次 |
| 最近记录: |