|
[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 |