我正在优化瓶颈代码:
int sum = ........
sum = (sum >> _bitShift);
if (sum > 32000)
sum = 32000; //if we get an overflow, saturate output
else if (sum < -32000)
sum = -32000; //if we get an underflow, saturate output
short result = static_cast<short>(sum);
我想将饱和条件写为一个“如果条件”,或者甚至更好地写成“如果条件”,以使此代码更快。我不需要精确地将饱和度设置为32000,可以接受任何类似的值,例如32768。
根据此页面,ARM中有一个饱和指令。x86 / x64中有类似的东西吗?
您确定可以在此击败编译器吗?
这是启用最大尺寸优化的x64零售。Visual Studio v15.7.5。
ecx包含此块开始处的初始值。完成后,eax将充满饱和值。
return (x > 32767) ? 32767 : ((x < -32768) ? -32768 : x);
mov edx,0FFFF8000h
movzx eax,cx
cmp ecx,edx
cmovl eax,edx
mov edx,7FFFh
cmp ecx,edx
movzx eax,ax
cmovg eax,edx
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句