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