2

我有一个具有 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 Vector 是由以下指令创建的:

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

1 回答 1

5

65480-56与(它们都在寄存器级别)相同的值0xffc8-您只是将其显示为无符号短。

请注意,对于没有进位/借位标志的二进制值的非饱和加法和减法,这些值是有符号还是无符号确实无关紧要 - 因此可以使用相同的指令来添加有符号和无符号的短裤 - 唯一的区别是你如何随后解释(或显示)结果。

于 2012-10-31T12:18:25.683 回答