On 28.02.2013 18:25, Alexey Dokuchaev wrote:
> On Thu, Feb 28, 2013 at 11:27:02AM +0000, Davide Italiano wrote:
>> New Revision: 247460
>> URL: http://svnweb.freebsd.org/changeset/base/247460
>>
>> Log:
>>   MFcalloutng (r247427 by mav):
>>   We don't need any precision here. Let it be fast and dirty shift then
>>   slow and excessively precise 64-bit division.
>>
>> -    if (sbt >= 0 && us > sbt / SBT_1US)
>> -    us = sbt / SBT_1US;
>> +    if (sbt >= 0 && us > (sbt >> 12))
>> +    us = (sbt >> 12);
> 
> Does this really buy us anything?  Modern compilers should be smart enough to
> generate correct code.  Do you have evidence that this is not the case here?
> Not to mention that it obfuscates the code by using some magic constant.

SBT_1US is 4294 (0x10c6). The best that compiler may do is replace
division with multiplication. In fact, Clang even does this on amd64.
But on i386 it calls __divdi3(), doing 64bit division in software. Shift
is definitely cheaper and 5% precision is fine here.

-- 
Alexander Motin
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to