您知道使用 MMX/SSE 汇编程序指令添加饱和 32 位有符号字的方法吗?我可以找到 8/16 位版本,但找不到 32 位版本。
最佳答案
您可以通过执行以下步骤来模拟饱和签名添加:
int saturated_add(int a, int b)
{
int sum = a + (unsigned)b; // avoid signed-overflow UB
if (a >= 0 && b >= 0)
return sum > 0 ? sum : INT32_MAX; // catch positive wraparound
else if (a < 0 && b < 0)
return sum > 0 ? INT32_MIN : sum; // catch negative wraparound
else
return sum; // sum of pos + neg always fits
}
Unsigned,更简单,见this stackoverflow posting
在 SSE2 中,以上内容映射到一系列并行比较和 AND/ANDN 操作。不幸的是,硬件中没有可用的单一操作。
关于assembly - 添加具有饱和度的 32 位字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7133149/