_mm_add_epi16()
考虑到 16 位无符号加法 ( ) 会溢出,有什么方法可以将 C >= (A + B) 与 SSE2/4.1 指令进行比较?
代码片段看起来像 -
#define _mm_cmpge_epu16(a, b) _mm_cmpeq_epi16(_mm_max_epu16(a, b), a)
__m128i *a = (__m128i *)&ptr1;
__m128i *b = (__m128i *)&ptr2;
__m128i *c = (__m128i *)&ptr3;
_m128i xa = _mm_lddqu_si128(a);
_m128i xb = _mm_lddqu_si128(b);
_m128i xc = _mm_lddqu_si128(c);
_m128i res = _mm_add_epi16(xa, xb);
_m128i xmm3 = _mm_cmpge_epu16(xc, res);
问题是当 16 位加法溢出(回绕)时,大于比较会导致误报。我不能出于我的目的使用饱和添加。我在SSE2 整数溢出检查中查看了检测无符号加法溢出的机制。但是如果大于比较,我该如何使用。