From cda0a63ab56d9b46577a58958cb01418e2d668f2 Mon Sep 17 00:00:00 2001 From: wdfk-prog <1425075683@qq.com> Date: Mon, 9 Mar 2026 09:25:01 +0800 Subject: refactor(core): Move __rt_fls to kservice --- src/kservice.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) (limited to 'src') diff --git a/src/kservice.c b/src/kservice.c index 29c9022c89..60806ce82a 100644 --- a/src/kservice.c +++ b/src/kservice.c @@ -1103,6 +1103,50 @@ rt_weak void rt_free_align(void *ptr) RTM_EXPORT(rt_free_align); #endif /* RT_USING_HEAP */ +/** + * fls - find last (most-significant) bit set + * @x: the word to search + * + * This is defined the same way as ffs. + * Note fls(0) = 0, fls(1) = 1, fls(0x80000000) = 32. + */ + +int __rt_fls(int val) +{ + int bit = 32; + + if (!val) + { + return 0; + } + if (!(val & 0xffff0000u)) + { + val <<= 16; + bit -= 16; + } + if (!(val & 0xff000000u)) + { + val <<= 8; + bit -= 8; + } + if (!(val & 0xf0000000u)) + { + val <<= 4; + bit -= 4; + } + if (!(val & 0xc0000000u)) + { + val <<= 2; + bit -= 2; + } + if (!(val & 0x80000000u)) + { + bit -= 1; + } + + return bit; +} + #ifndef RT_USING_CPU_FFS #ifdef RT_USING_TINY_FFS const rt_uint8_t __lowest_bit_bitmap[] = -- cgit v1.3.1