相关疑难解决方法(0)

SSE2内在函数 - 比较无符号整数

我有兴趣在添加无符号8位整数时识别溢出值,并将结果饱和到0xFF:

__m128i m1 = _mm_loadu_si128(/* 16 8-bit unsigned integers */);
__m128i m2 = _mm_loadu_si128(/* 16 8-bit unsigned integers */);

__m128i m3 = _mm_adds_epu8(m1, m2);
Run Code Online (Sandbox Code Playgroud)

我会感兴趣的是执行比这些无符号整数更少的比较,类似于_mm_cmplt_epi8签名:

__m128i mask = _mm_cmplt_epi8 (m3, m1);
m1 = _mm_or_si128(m3, mask);
Run Code Online (Sandbox Code Playgroud)

如果"epu8"等效可用,mask必须0xFF在那里m3[i] < m1[i](溢出!) 0x00 otherwise,我们将能够饱和m1使用"或",所以m1将持有另外的结果,其中有效的,0xFF它溢出.

问题是,_mm_cmplt_epi8执行符号比较,因此,例如,如果m1[i] = 0x70m2[i] = 0x10,然后m3[i] = 0x80mask[i] = 0xFF,这显然不是我的要求.

使用VS2012.

我希望采用另一种方法来执行此操作.谢谢!

c++ x86 sse simd intrinsics

3
推荐指数
2
解决办法
3380
查看次数

标签 统计

c++ ×1

intrinsics ×1

simd ×1

sse ×1

x86 ×1