On 16 June 2016 at 18:12, Dr. David Alan Gilbert (git)
<dgilb...@redhat.com> wrote:
> From: "Dr. David Alan Gilbert" <dgilb...@redhat.com>
>
> e.g. BIT_RANGE(15, 0) gives 0xff00
>
> Suggested by: Paolo Bonzini <pbonz...@redhat.com>
> Signed-off-by: Dr. David Alan Gilbert <dgilb...@redhat.com>
> ---
>  include/qemu/bitops.h | 3 +++
>  1 file changed, 3 insertions(+)
>
> diff --git a/include/qemu/bitops.h b/include/qemu/bitops.h
> index 755fdd1..e411688 100644
> --- a/include/qemu/bitops.h
> +++ b/include/qemu/bitops.h
> @@ -23,6 +23,9 @@
>  #define BIT_MASK(nr)            (1UL << ((nr) % BITS_PER_LONG))
>  #define BIT_WORD(nr)            ((nr) / BITS_PER_LONG)
>  #define BITS_TO_LONGS(nr)       DIV_ROUND_UP(nr, BITS_PER_BYTE * 
> sizeof(long))
> +/* e.g. BIT_RANGE(15, 0) -> 0xff00 */
> +#define BIT_RANGE(hb, lb)     ((2ull << (hb)) - (1ull << (lb)))

Isn't this undefined behaviour if the hb is 63?

Also there is semantic overlap with the MAKE_64BIT_MASK macro
proposed in https://lists.gnu.org/archive/html/qemu-devel/2016-05/msg02154.html
(which also has ub, but see
https://lists.gnu.org/archive/html/qemu-devel/2016-06/msg02614.html
for the version which doesn't).

I prefer a "start, length" macro to "position, position",
because this matches what we already have for the deposit
and extract functions in this header.

thanks
-- PMM

Reply via email to