Saturation Add
MMXがある現代においては普通、paddusb。一方が固定ならテーブルルックアップでもいい。
…とふざけただけなのにチョイ切れされちゃったー。気休めだけど、カットオフ用のマスクを0x00fefeffにしておく? 気休めだけどね。saturation addを2バイト同時に行うのにx86では最小7命令かかります。3バイトsaturation addを、(7,7,8)または(7,7,7)ビットに丸めてしまうことで、+2命令で済ます福地案で現実的には問題ないでしょう。
; 2bytes ; 3bytes(fukuchi)
=> and eax, 00fefeffh
=> and ebx, 00fefeffh
add eax, ebx => add eax, ebx
mov ebx, eax => mov ebx, eax
and ebx, 01000100h => and ebx, 01010100h
mov ecx, ebx => mov ecx, ebx
shr ecx, 8 => shr ecx, 8
sub ebx, ecx => sub ebx, ecx
or eax, ebx => or eax, ebx
(and eax, 00ff00ffh) =>(and eax, 00fefeffh)