[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20250211223045.5c2b92a4@pumpkin>
Date: Tue, 11 Feb 2025 22:30:45 +0000
From: David Laight <david.laight.linux@...il.com>
To: I Hsin Cheng <richard120310@...il.com>
Cc: yury.norov@...il.com, anshuman.khandual@....com, arnd@...db.de,
linux-kernel@...r.kernel.org, jserv@...s.ncku.edu.tw,
skhan@...uxfoundation.org
Subject: Re: [PATCH 2/2] uapi: Refactor __GENMASK_ULL() for speed-up
On Wed, 12 Feb 2025 00:24:12 +0800
I Hsin Cheng <richard120310@...il.com> wrote:
> The calculation of "((~_ULL(0)) - (_ULL(1) << (l)) + 1)" is to generate
> a bitmask with "l" trailing zeroes, which is equivalent to
> "(~_ULL(0) << (l))".
Yes, and if you look through the commit history you'll see it was changed
to avoid a compiler warning about the shift losing significant bits.
So you are just reverting that change and the compiler warnings will
reappear.
For non-constants I suspect that (2ul << hi) - (1ul << lo) is the
best answer.
But the compiler (clang with some options?) will still complain
for constants when trying to set the high bit.
That version also doesn't need BITS_PER_[U]LONG.
While that is valid for C, the _ULL() are there for the assembler
(when they are no-ops) so there is no way asm copies can be right
for both GENMASK() ans GENMASK_ULL().
David
Powered by blists - more mailing lists