Re: [RFC] include/linux/make_type.h: Helpers for making u16/u32/u64 values

From: Andy Shevchenko
Date: Wed Feb 14 2024 - 12:42:56 EST


On Wed, Feb 14, 2024 at 08:39:35PM +0300, Alexey Dobriyan wrote:
> On Wed, Feb 14, 2024 at 07:32:10PM +0200, Andy Shevchenko wrote:
> > On Wed, Feb 14, 2024 at 08:20:55PM +0300, Alexey Dobriyan wrote:

..

> > > Secondly,
> > >
> > > #define make_u64(hi__, lo__) ((u64)(hi__) << 32 | (u32)(lo__))
> > >
> > > doesn't truncate hi, why?
> >
> > Because it's not needed (the whole point AFAIU is to override promotion
> > to a _signed_ type (int) and here it makes no difference)?
>
> Well,
>
> make_u64((u64)-1, 0)
>
> will return (u64)-1 unlike

How? It's shifted by 32 bits. Am I missing something?

> BTW, I'm for truncation, but it should be done everywhere.

I'm not against this.

--
With Best Regards,
Andy Shevchenko