svn commit: r275468 - head/sys/dev/usb/controller
Hans Petter Selasky
hps at selasky.org
Thu Dec 4 20:36:58 UTC 2014
On 12/04/14 18:50, John-Mark Gurney wrote:
> Hans Petter Selasky wrote this message on Thu, Dec 04, 2014 at 08:21 +0100:
>> On 12/04/14 01:54, John-Mark Gurney wrote:
>>> Hans Petter Selasky wrote this message on Wed, Dec 03, 2014 at 21:55 +0000:
>>>> Author: hselasky
>>>> Date: Wed Dec 3 21:55:44 2014
>>>> New Revision: 275468
>>>> URL: https://svnweb.freebsd.org/changeset/base/275468
>>>>
>>>> Log:
>>>> Optimise the bit searching loops, by quickly skipping the 16 first set
>>>> bits if all the 16 first bits are set. This way the worst case
>>>> searching time is reduced from 32 to 16 cycles.
>>>
>>> You could use ffs instead:
>>> x = ffs(~map);
>>> if (x) {
>>> x--;
>>> /* normal code */
>>> }
>>>
>>> This has the benefit of using a single instruction on platforms that
>>> support it (bsfl on i386), though apparently, we haven't optimized this
>>> for all platforms... arm has a version for int, but their ffsl does
>>> the same linear search instead of just calling ffs, or at least
>>> detecting if sizeof(long) == sizeof(int) and calling ffs...
>>>
>>
>> Yes, I'm aware about that, but like you say it is not optimised for all
>> platforms yet. So I'm not sure if it will give any benefit for the
>> platform the driver is running on ....
>>
>> I'll see if I can change the logic inside the C-version of ffs() and the
>> do the swap like you suggest.
>
> Did you see the comment about usig __builtin_ffs{,l,ll} instead? this
> seems to be a better route...
>
Hi,
I see. Who can update the cpufunc.h header file to use the builtins? Are
these also available with GCC?
--HPS
More information about the svn-src-head
mailing list