saturation-arithmetic相关内容
我一直在看MMX/SSE,我想知道.对于无符号字节和字(但不是双字),有打包,饱和减法的说明. 有没有一种方法可以做我想要的事情,如果没有,为什么没有呢? 解决方案 如果有可用的SSE4.1,我认为没有比使用@harold建议的pmaxud + psubd方法更好的方法了.借助AVX2,您当然也可以使用相应的256位变体. __m128i subs_epu32_sse4(__m
..
有人可以推荐使用Intel内部函数(AVX,SSE4 ...)添加饱和的32位有符号整数的快速方法吗? 我查看了内在函数指南,发现 _mm256_adds_epi16 ,但这似乎只增加了16位整数。我看不到32位的相似之处。 解决方案 在(且仅)以下情况下,会发生签名溢出: 两个输入的符号相同, 总和的符号(加上环绕符号时) )不同于输入 使用C操作符: overflo
..
我正在寻找一些带符号的饱和64位加法使用的C代码,这些代码可使用gcc优化器编译为有效的x86-64代码.可移植的代码将是理想的选择,尽管必要时可以使用asm解决方案. static const int64 kint64max = 0x7fffffffffffffffll; static const int64 kint64min = 0x8000000000000000ll; int64
..
想象一下,我有两个无符号字节b和x.我需要将bsub计算为b - x,将badd计算为b + x.但是,我不希望在这些操作期间发生下溢/上溢.例如(伪代码): b = 3; x = 5; bsub = b - x; // bsub must be 0, not 254 和 b = 250; x = 10; badd = b + x; // badd must be 255, not
..
好的,所以我要做的赋值是将一个有符号整数乘以2并返回该值.如果该值溢出,则通过返回Tmin或Tmax使其饱和.挑战在于仅使用这些逻辑运算符(!〜& ^ | +>),而没有(if语句,循环等),并且最多只能使用20个逻辑运算符. 现在我想解决这个问题的过程首先是找到极限.因此,我将Tmin/max除以2得到边界.这就是我所拥有的: 正面 此及更高版本的作品: 1100
..