我有一个带有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)
答案 0 :(得分:5)
65480
与-56
的值相同(它们在寄存器级别都是0xffc8
) - 您只是显示它就像它是一个未签名的短片。
注意,对于没有进位/借位标志的二进制值的非饱和加法和减法,无论值是有符号还是无符号,都无关紧要 - 因此相同的指令可用于添加有符号和无符号短路 - 唯一的区别是你随后解释(或显示)结果的方式。