lkml.org 
[lkml]   [2022]   [Nov]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [PATCH v1 2/2] x86/asm/bitops: Use __builtin_clz*() to evaluate constant expressions
On Fri, Nov 11, 2022 at 10:57:17AM +0900, Vincent MAILHOL wrote:
> On Fri. 11 Nov. 2022 at 04:01, Nick Desaulniers <ndesaulniers@google.com> wrote:
> > On Sun, Nov 6, 2022 at 1:51 AM Vincent Mailhol
> > <mailhol.vincent@wanadoo.fr> wrote:
> > >
> > > #ifdef CONFIG_X86_64
> > > -static __always_inline int fls64(__u64 x)
> > > +static __always_inline int constant_fls64(u64 x)
> > > +{
> > > + BUILD_BUG_ON(sizeof(unsigned long long) != sizeof(x));
> >
> > Thanks for the patches! They LGTM; but why do we need this BUILD_BUG_ON here?
>
> There is no absolute need for sure.
>
> Call this a paranoiac check and you will be correct. My reasoning for still
> using it is that:
>
> 1/ It is a compile time check, so no runtime penalty.
> 2/ Strictly speaking, the C standard doesn't guarantee 'u64' and
> 'unsigned long long int' to be the same (and you can argue that in clang
> and gcc long long is always 64 bits on all platforms and one more time
> you will be correct).
> 3/ It serves as a documentation to say: "hey I am using the clz long long
> version on a u64 and I know what I am doing."
>
> If you want me to remove it, OK for me. Let me know.

In fact, compiler's typecheck would be more strict than your BUG().
For example, your check allows pointers, but compiler will complain.

\
 
 \ /
  Last update: 2022-11-11 04:36    [W:0.052 / U:3.712 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site