diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/asm-generic/bitops/builtin-__ffs.h | 15 | ||||
-rw-r--r-- | include/asm-generic/bitops/builtin-__fls.h | 15 | ||||
-rw-r--r-- | include/asm-generic/bitops/builtin-ffs.h | 17 | ||||
-rw-r--r-- | include/asm-generic/bitops/builtin-fls.h | 16 |
4 files changed, 63 insertions, 0 deletions
diff --git a/include/asm-generic/bitops/builtin-__ffs.h b/include/asm-generic/bitops/builtin-__ffs.h new file mode 100644 index 000000000000..90041e3a41f0 --- /dev/null +++ b/include/asm-generic/bitops/builtin-__ffs.h | |||
@@ -0,0 +1,15 @@ | |||
1 | #ifndef _ASM_GENERIC_BITOPS_BUILTIN___FFS_H_ | ||
2 | #define _ASM_GENERIC_BITOPS_BUILTIN___FFS_H_ | ||
3 | |||
4 | /** | ||
5 | * __ffs - find first bit in word. | ||
6 | * @word: The word to search | ||
7 | * | ||
8 | * Undefined if no bit exists, so code should check against 0 first. | ||
9 | */ | ||
10 | static __always_inline unsigned long __ffs(unsigned long word) | ||
11 | { | ||
12 | return __builtin_ctzl(word); | ||
13 | } | ||
14 | |||
15 | #endif | ||
diff --git a/include/asm-generic/bitops/builtin-__fls.h b/include/asm-generic/bitops/builtin-__fls.h new file mode 100644 index 000000000000..0248f386635f --- /dev/null +++ b/include/asm-generic/bitops/builtin-__fls.h | |||
@@ -0,0 +1,15 @@ | |||
1 | #ifndef _ASM_GENERIC_BITOPS_BUILTIN___FLS_H_ | ||
2 | #define _ASM_GENERIC_BITOPS_BUILTIN___FLS_H_ | ||
3 | |||
4 | /** | ||
5 | * __fls - find last (most-significant) set bit in a long word | ||
6 | * @word: the word to search | ||
7 | * | ||
8 | * Undefined if no set bit exists, so code should check against 0 first. | ||
9 | */ | ||
10 | static __always_inline unsigned long __fls(unsigned long word) | ||
11 | { | ||
12 | return (sizeof(word) * 8) - 1 - __builtin_clzl(word); | ||
13 | } | ||
14 | |||
15 | #endif | ||
diff --git a/include/asm-generic/bitops/builtin-ffs.h b/include/asm-generic/bitops/builtin-ffs.h new file mode 100644 index 000000000000..064825829e1c --- /dev/null +++ b/include/asm-generic/bitops/builtin-ffs.h | |||
@@ -0,0 +1,17 @@ | |||
1 | #ifndef _ASM_GENERIC_BITOPS_BUILTIN_FFS_H_ | ||
2 | #define _ASM_GENERIC_BITOPS_BUILTIN_FFS_H_ | ||
3 | |||
4 | /** | ||
5 | * ffs - find first bit set | ||
6 | * @x: the word to search | ||
7 | * | ||
8 | * This is defined the same way as | ||
9 | * the libc and compiler builtin ffs routines, therefore | ||
10 | * differs in spirit from the above ffz (man ffs). | ||
11 | */ | ||
12 | static __always_inline int ffs(int x) | ||
13 | { | ||
14 | return __builtin_ffs(x); | ||
15 | } | ||
16 | |||
17 | #endif | ||
diff --git a/include/asm-generic/bitops/builtin-fls.h b/include/asm-generic/bitops/builtin-fls.h new file mode 100644 index 000000000000..eda652d0ac7f --- /dev/null +++ b/include/asm-generic/bitops/builtin-fls.h | |||
@@ -0,0 +1,16 @@ | |||
1 | #ifndef _ASM_GENERIC_BITOPS_BUILTIN_FLS_H_ | ||
2 | #define _ASM_GENERIC_BITOPS_BUILTIN_FLS_H_ | ||
3 | |||
4 | /** | ||
5 | * fls - find last (most-significant) bit set | ||
6 | * @x: the word to search | ||
7 | * | ||
8 | * This is defined the same way as ffs. | ||
9 | * Note fls(0) = 0, fls(1) = 1, fls(0x80000000) = 32. | ||
10 | */ | ||
11 | static __always_inline int fls(int x) | ||
12 | { | ||
13 | return x ? sizeof(x) * 8 - __builtin_clz(x) : 0; | ||
14 | } | ||
15 | |||
16 | #endif | ||