mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 10:11:27 +01:00
x86/bitops: adjust partial first word handling in __find_next{,_zero}_bit()
There's no need to subtract "bit" in what is passed to __scanbit(), as the
other bits are zero anyway after the shift (in __find_next_bit()) or can
be made so (in __find_next_zero_bit()) by flipping negation and shift. (We
actually leverage the same facts in find_next{,_zero}_bit() as well.) This
way in __scanbit() the TZCNT alternative can be engaged.
Signed-off-by: Jan Beulich <jbeulich@suse.com>
Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>
This commit is contained in:
1 parent
0c79dde780
commit
0e6f9fbb8a
1 file changed
+4
-4
@@ -35,8 +35,8 @@ unsigned int __find_next_bit(
|
||||
if ( bit != 0 )
|
||||
{
|
||||
/* Look for a bit in the first word. */
|
||||
set = __scanbit(*p >> bit, BITS_PER_LONG - bit);
|
||||
if ( set < (BITS_PER_LONG - bit) )
|
||||
set = __scanbit(*p >> bit, BITS_PER_LONG);
|
||||
if ( set < BITS_PER_LONG )
|
||||
return (offset + set);
|
||||
offset += BITS_PER_LONG - bit;
|
||||
p++;
|
||||
@@ -85,8 +85,8 @@ unsigned int __find_next_zero_bit(
|
||||
if ( bit != 0 )
|
||||
{
|
||||
/* Look for zero in the first word. */
|
||||
set = __scanbit(~(*p >> bit), BITS_PER_LONG - bit);
|
||||
if ( set < (BITS_PER_LONG - bit) )
|
||||
set = __scanbit(~*p >> bit, BITS_PER_LONG);
|
||||
if ( set < BITS_PER_LONG )
|
||||
return (offset + set);
|
||||
offset += BITS_PER_LONG - bit;
|
||||
p++;
|
||||
|
||||