簡體   English   中英

將8位sse寄存器轉換為16位短路

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM