diff options
| -rw-r--r-- | include/asm-arm/bitops.h | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/include/asm-arm/bitops.h b/include/asm-arm/bitops.h index 5c60bfc1a84d..9a1db20e032a 100644 --- a/include/asm-arm/bitops.h +++ b/include/asm-arm/bitops.h | |||
| @@ -277,9 +277,16 @@ static inline int constant_fls(int x) | |||
| 277 | * the clz instruction for much better code efficiency. | 277 | * the clz instruction for much better code efficiency. |
| 278 | */ | 278 | */ |
| 279 | 279 | ||
| 280 | #define fls(x) \ | 280 | #define __fls(x) \ |
| 281 | ( __builtin_constant_p(x) ? constant_fls(x) : \ | 281 | ( __builtin_constant_p(x) ? constant_fls(x) : \ |
| 282 | ({ int __r; asm("clz\t%0, %1" : "=r"(__r) : "r"(x) : "cc"); 32-__r; }) ) | 282 | ({ int __r; asm("clz\t%0, %1" : "=r"(__r) : "r"(x) : "cc"); 32-__r; }) ) |
| 283 | |||
| 284 | /* Implement fls() in C so that 64-bit args are suitably truncated */ | ||
| 285 | static inline int fls(int x) | ||
| 286 | { | ||
| 287 | return __fls(x); | ||
| 288 | } | ||
| 289 | |||
| 283 | #define ffs(x) ({ unsigned long __t = (x); fls(__t & -__t); }) | 290 | #define ffs(x) ({ unsigned long __t = (x); fls(__t & -__t); }) |
| 284 | #define __ffs(x) (ffs(x) - 1) | 291 | #define __ffs(x) (ffs(x) - 1) |
| 285 | #define ffz(x) __ffs( ~(x) ) | 292 | #define ffz(x) __ffs( ~(x) ) |
