Skip to content

Commit

Permalink
x86: Use REP BSF unconditionally
Browse files Browse the repository at this point in the history
Make "REP BSF" unconditional, as per the suggestion of hpa
and Linus, this removes the insane BSF_PREFIX conditional
and simplifies the logic.

Suggested-by: "H. Peter Anvin" <hpa@zytor.com>
Suggested-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Jan Beulich <jbeulich@suse.com>
Link: http://lkml.kernel.org/r/5058741E020000780009C014@nat28.tlf.novell.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
  • Loading branch information
Jan Beulich authored and Ingo Molnar committed Sep 19, 2012
1 parent 5870661 commit e26a44a
Showing 1 changed file with 2 additions and 17 deletions.
19 changes: 2 additions & 17 deletions arch/x86/include/asm/bitops.h
Original file line number Diff line number Diff line change
Expand Up @@ -347,19 +347,6 @@ static int test_bit(int nr, const volatile unsigned long *addr);
? constant_test_bit((nr), (addr)) \
: variable_test_bit((nr), (addr)))

#if (defined(CONFIG_X86_GENERIC) || defined(CONFIG_GENERIC_CPU)) \
&& !defined(CONFIG_CC_OPTIMIZE_FOR_SIZE)
/*
* Since BSF and TZCNT have sufficiently similar semantics for the purposes
* for which we use them here, BMI-capable hardware will decode the prefixed
* variant as 'tzcnt ...' and may execute that faster than 'bsf ...', while
* older hardware will ignore the REP prefix and decode it as 'bsf ...'.
*/
# define BSF_PREFIX "rep;"
#else
# define BSF_PREFIX
#endif

/**
* __ffs - find first set bit in word
* @word: The word to search
Expand All @@ -368,7 +355,7 @@ static int test_bit(int nr, const volatile unsigned long *addr);
*/
static inline unsigned long __ffs(unsigned long word)
{
asm(BSF_PREFIX "bsf %1,%0"
asm("rep; bsf %1,%0"
: "=r" (word)
: "rm" (word));
return word;
Expand All @@ -382,14 +369,12 @@ static inline unsigned long __ffs(unsigned long word)
*/
static inline unsigned long ffz(unsigned long word)
{
asm(BSF_PREFIX "bsf %1,%0"
asm("rep; bsf %1,%0"
: "=r" (word)
: "r" (~word));
return word;
}

#undef BSF_PREFIX

/*
* __fls: find last set bit in word
* @word: The word to search
Expand Down

0 comments on commit e26a44a

Please sign in to comment.