Насыщенное беззнаковое вычитание легко, потому что для `a - = b 'мы можем сделать
asm (
"pmaxud %1, %0\n\t" // a = max (a,b)
"psubd %1, %0" // a -= b
: "+x" (a)
: "xm" (b)
);
с SSE.
Я искал дополнение без знака, но, возможно, единственный способ - преобразовать в насыщенное вычитание без знака, выполнить его и преобразовать обратно.То же самое для подписанных вариантов.
РЕДАКТИРОВАТЬ: с добавлением без знака, вы получите min (a, ~b) + b
, что, конечно, работает.С подписанным сложением и вычитанием у вас есть две границы насыщения, что усложняет ситуацию.