diff options
Diffstat (limited to 'arch/mips/include/asm/bitops.h')
| -rw-r--r-- | arch/mips/include/asm/bitops.h | 7 | 
1 files changed, 4 insertions, 3 deletions
diff --git a/arch/mips/include/asm/bitops.h b/arch/mips/include/asm/bitops.h index 9f935f6aa996..0cf29bd5dc5c 100644 --- a/arch/mips/include/asm/bitops.h +++ b/arch/mips/include/asm/bitops.h @@ -481,7 +481,7 @@ static inline unsigned long __fls(unsigned long word)  {  	int num; -	if (BITS_PER_LONG == 32 && +	if (BITS_PER_LONG == 32 && !__builtin_constant_p(word) &&  	    __builtin_constant_p(cpu_has_clo_clz) && cpu_has_clo_clz) {  		__asm__(  		"	.set	push					\n" @@ -494,7 +494,7 @@ static inline unsigned long __fls(unsigned long word)  		return 31 - num;  	} -	if (BITS_PER_LONG == 64 && +	if (BITS_PER_LONG == 64 && !__builtin_constant_p(word) &&  	    __builtin_constant_p(cpu_has_mips64) && cpu_has_mips64) {  		__asm__(  		"	.set	push					\n" @@ -559,7 +559,8 @@ static inline int fls(int x)  {  	int r; -	if (__builtin_constant_p(cpu_has_clo_clz) && cpu_has_clo_clz) { +	if (!__builtin_constant_p(x) && +	    __builtin_constant_p(cpu_has_clo_clz) && cpu_has_clo_clz) {  		__asm__(  		"	.set	push					\n"  		"	.set	"MIPS_ISA_LEVEL"			\n"  |