簡體   English   中英

SSE 16位寄存器的無符號/有符號減法

[英]SSE unsigned/signed subtraction of 16 bit register

我有一個帶有內容的16位值的__m128i寄存器(向量A):

{100,26,26,26,26,26,26,100} // A Vector

現在我減去向量

{82,82,82,82,82,82,82,82}

與指示

_mm_sub_epi16(a_vec,_mm_set1_epi16(82)) 

預期結果應為以下向量

{18,-56,-56,-56,-56,-56,-56,18}

但是我明白了

{18,65480,65480,65480,65480,65480,65480,18}

如何解決將向量視為帶符號的向量?

A向量是通過以下指令創建的:

__m128i a_vec = _mm_srli_epi16(_mm_unpacklo_epi8(score_vec_8bit, score_vec_8bit), 8)

65480-56相同(在寄存器級別上均為0xffc8 )-您只是在顯示它,就好像它是無符號的short一樣。

請注意,對於不帶進位/借位標志的二進制值進行非飽和加減運算,實際上是無關緊要的,即值是帶符號的還是無符號的-因此,同一條指令可用於同時添加帶符號的和無符號的短褲-唯一的區別是隨后解釋(或顯示)結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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