lkml.org 
[lkml]   [2022]   [Nov]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
From
Date
SubjectRe: [PATCH v1 2/2] x86/asm/bitops: Use __builtin_clz*() to evaluate constant expressions
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.

> > +
> > + if (!x)
> > + return 0;
> > +
> > + return BITS_PER_TYPE(x) - __builtin_clzll(x);
> > +}

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