[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 4/4] bitmaps/bitops: Clarify tests for small constant size.
>>> On 28.11.13 at 17:37, Tim Deegan <tim@xxxxxxx> wrote: > No semantic changes, just makes the control flow a bit clearer. > > I was looking at this bcause the (-!__builtin_constant_p(x) | x__) > formula is too clever for Coverity, but in fact it always takes me a > minute or two to understand it too. :) I nevertheless like things like this... Anyway - did you check the generated code is no worse with this change? > -#define find_next_bit(addr, size, off) ({ \ > - unsigned int r__ = (size); \ > - unsigned int o__ = (off); \ > - switch ( -!__builtin_constant_p(size) | r__ ) \ > - { \ > - case 0: (void)(addr); break; \ This dummy evaluation of addr ... > - case 1 ... BITS_PER_LONG: \ > - r__ = o__ + __scanbit(*(const unsigned long *)(addr) >> o__, r__); \ > - break; \ > - default: \ > - if ( __builtin_constant_p(off) && !o__ ) \ > - r__ = __find_first_bit(addr, r__); \ > - else \ > - r__ = __find_next_bit(addr, r__, o__); \ > - break; \ > - } \ > - r__; \ > +#define find_next_bit(addr, size, off) ({ \ > + unsigned int r__; \ > + unsigned int s__ = (size); \ > + unsigned int o__ = (off); \ > + if ( __builtin_constant_p(size) && s__ == 0 ) \ > + r__ = s__; \ ... is being lost here. > + else if ( __builtin_constant_p(size) && s__ <= BITS_PER_LONG ) \ > + r__ = o__ + __scanbit(*(const unsigned long *)(addr) >> o__, s__); \ > + else if ( __builtin_constant_p(off) && !o__ ) \ > + r__ = __find_first_bit(addr, s__); \ > + else \ > + r__ = __find_next_bit(addr, s__, o__); \ > + r__; \ Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |