summaryrefslogtreecommitdiff
path: root/include/linux
diff options
context:
space:
mode:
authorYury Norov <ynorov@nvidia.com>2026-04-27 18:57:05 -0400
committerYury Norov <ynorov@nvidia.com>2026-05-20 11:18:27 -0400
commit09472f591aa0b72c2dd6c693f48b2d6fea66c7ba (patch)
tree4adce8ab4ef77de5fcb9021a406bf04059a757fd /include/linux
parent8a51b2e874f47a6094353b59ecae421f0968fe3a (diff)
bitfield: wire __bf_shf to __builtin_ctzll
__bf_shf() is currently based on built-in ffsll. It's more straightforward to wire it to __builtin_ctzll, which makes it a pure rename. Worth to notice that __builtin_ffsll() is buggy on GCC before 14.1: int main() { sizeof(struct { int t : !(__builtin_ffsll(~0ULL) + 1 < 0); }); } test.c: In function 'main': test.c:3:21: error: bit-field 't' width not an integer constant 3 | int t : !(__builtin_ffsll(~0ULL) + 1 < 0); | ^ Link: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=124699 Reported-by: Matt Coster <matt.coster@imgtec.com> Closes: https://lore.kernel.org/oe-kbuild-all/202603222211.A2XiR1YU-lkp@intel.com/ Signed-off-by: Yury Norov <ynorov@nvidia.com>
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/bitfield.h2
1 files changed, 1 insertions, 1 deletions
diff --git a/include/linux/bitfield.h b/include/linux/bitfield.h
index 989c214ec8a5..14f86e455a67 100644
--- a/include/linux/bitfield.h
+++ b/include/linux/bitfield.h
@@ -44,7 +44,7 @@
* FIELD_MODIFY(REG_FIELD_C, &reg, c);
*/
-#define __bf_shf(x) (__builtin_ffsll(x) - 1)
+#define __bf_shf __builtin_ctzll
#define __scalar_type_to_unsigned_cases(type) \
unsigned type: (unsigned type)0, \