[英]Convert 8 bit sse register to 16 bit shorts
我有一個帶有8位值的__m128i
寄存器,內容如下:
{-4,10,10,10,10,10,10,-4,-4,10,10,10,10,10,10,-4}
現在我想將它轉換為_m128i
寄存器中的8個16位值。 它應該看起來像:
{-4,10,10,10,10,10,10,-4}
盡可能使用最少量的指令,這怎么可能? 我想最多使用SSSE3。
假設您只想要16個中的前8個值並且忽略其他8個(您給出的示例數據有點模糊)那么您可以使用SSE2這樣做:
v = _mm_srai_epi16(_mm_unpacklo_epi8(v, v), 8);
你可以用一條SSE2指令這樣做(忽略初始化)
__m128i const zero = _mm_setzero_si128(); // (if you're in a loop pull this out)
__m128i v;
v = _mm_unpacklo_epi8(v, zero);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.