diff options
| author | Jianting (Meco) Man <[email protected]> | 2021-11-11 10:55:44 -0500 |
|---|---|---|
| committer | GitHub <[email protected]> | 2021-11-11 10:55:44 -0500 |
| commit | b98539e3f8e437b22014043d9a2adc0ced949c9b (patch) | |
| tree | b67a5449c2a74cbaf8cdcd36304c9b97b10335f9 /src | |
| parent | da0bb7f6295450e30fc5608a0ecc89cc8bf572b8 (diff) | |
| parent | 31f0a9c2acbb32fab06285ff866077c816790124 (diff) | |
Merge branch 'master' into weak
Diffstat (limited to 'src')
| -rw-r--r-- | src/Kconfig | 4 | ||||
| -rw-r--r-- | src/kservice.c | 26 |
2 files changed, 30 insertions, 0 deletions
diff --git a/src/Kconfig b/src/Kconfig index f6db1c0cea..fc44f969fe 100644 --- a/src/Kconfig +++ b/src/Kconfig @@ -143,6 +143,10 @@ config RT_USING_ASM_MEMSET bool default n +config RT_USING_TINY_FFS + bool "Enable kservice to use tiny ffs" + default n + endmenu menuconfig RT_DEBUG diff --git a/src/kservice.c b/src/kservice.c index 79bb115c19..525aacd7fd 100644 --- a/src/kservice.c +++ b/src/kservice.c @@ -1362,6 +1362,31 @@ RTM_EXPORT(rt_free_align); #endif /* RT_USING_HEAP */ #ifndef RT_USING_CPU_FFS +#ifdef RT_USING_TINY_FFS +const rt_uint8_t __lowest_bit_bitmap[] = +{ + /* 0 - 7 */ 0, 1, 2, 27, 3, 24, 28, 32, + /* 8 - 15 */ 4, 17, 25, 31, 29, 12, 32, 14, + /* 16 - 23 */ 5, 8, 18, 32, 26, 23, 32, 16, + /* 24 - 31 */ 30, 11, 13, 7, 32, 22, 15, 10, + /* 32 - 36 */ 6, 21, 9, 20, 19 +}; + +/** + * This function finds the first bit set (beginning with the least significant bit) + * in value and return the index of that bit. + * + * Bits are numbered starting at 1 (the least significant bit). A return value of + * zero from any of these functions means that the argument was zero. + * + * @return return the index of the first bit set. If value is 0, then this function + * shall return 0. + */ +int __rt_ffs(int value) +{ + return __lowest_bit_bitmap[(rt_uint32_t)(value & (value - 1) ^ value) % 37]; +} +#else const rt_uint8_t __lowest_bit_bitmap[] = { /* 00 */ 0, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, @@ -1407,6 +1432,7 @@ int __rt_ffs(int value) return __lowest_bit_bitmap[(value & 0xff000000) >> 24] + 25; } +#endif /* RT_USING_TINY_FFS */ #endif /* RT_USING_CPU_FFS */ #ifdef RT_DEBUG |
