From 78f318aa8f506891002b58eeb45e8d18623cde15 Mon Sep 17 00:00:00 2001 From: GuEe-GUI <2991707448@qq.com> Date: Thu, 12 Dec 2024 13:52:49 +0800 Subject: [PATCH] [FIXUP] __rt_clz loss in aarch64 Signed-off-by: GuEe-GUI <2991707448@qq.com> --- include/rtthread.h | 1 + libcpu/aarch64/common/cpuport.c | 15 +++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/include/rtthread.h b/include/rtthread.h index 272847bf06..69dcdff8e0 100644 --- a/include/rtthread.h +++ b/include/rtthread.h @@ -794,6 +794,7 @@ rt_device_t rt_console_get_device(void); int __rt_ffs(int value); unsigned long __rt_ffsl(unsigned long value); +unsigned long __rt_clz(unsigned long value); void rt_show_version(void); diff --git a/libcpu/aarch64/common/cpuport.c b/libcpu/aarch64/common/cpuport.c index b2592c854d..ed619990d7 100644 --- a/libcpu/aarch64/common/cpuport.c +++ b/libcpu/aarch64/common/cpuport.c @@ -56,4 +56,19 @@ unsigned long __rt_ffsl(unsigned long value) #endif } +unsigned long __rt_clz(unsigned long value) +{ +#ifdef __GNUC__ + return __builtin_clz(value); +#else + unsigned long val; + + __asm__ volatile ("clz %0, %1" + :"=r"(val) + :"r"(value)); + + return val; +#endif +} + #endif /* RT_USING_CPU_FFS */