diff --git a/components/lwp/arch/arm/cortex-a/lwp_arch.h b/components/lwp/arch/arm/cortex-a/lwp_arch.h index 6132ce46d9e8c2310fbea3619df47d46769f10c0..d627632493f529e28b31a500028cce134c88caca 100644 --- a/components/lwp/arch/arm/cortex-a/lwp_arch.h +++ b/components/lwp/arch/arm/cortex-a/lwp_arch.h @@ -30,7 +30,7 @@ extern "C" { rt_inline unsigned long rt_hw_ffz(unsigned long x) { - return __builtin_ffsll(~x) - 1; + return __builtin_ffsl(~x) - 1; } rt_inline void icache_invalid_all(void) diff --git a/components/lwp/arch/risc-v/rv64/lwp_arch.h b/components/lwp/arch/risc-v/rv64/lwp_arch.h index cb7d8831358974f15bc52878170586a8a3162fc4..9e12aa5ba70463413941b4c0e7db9f12de8c420e 100644 --- a/components/lwp/arch/risc-v/rv64/lwp_arch.h +++ b/components/lwp/arch/risc-v/rv64/lwp_arch.h @@ -53,7 +53,7 @@ rt_mmu_info* arch_kernel_get_mmu_info(void); rt_inline unsigned long rt_hw_ffz(unsigned long x) { - return __builtin_ffsll(~x) - 1; + return __builtin_ffsl(~x) - 1; } rt_inline void icache_invalid_all(void) diff --git a/components/lwp/arch/x86/i386/lwp_arch.h b/components/lwp/arch/x86/i386/lwp_arch.h index 6d15aebcd1be5f61a8333f546514c386bdd5c03b..f9a56ca3f5f52ee716e829a945492a7991c3ffb3 100644 --- a/components/lwp/arch/x86/i386/lwp_arch.h +++ b/components/lwp/arch/x86/i386/lwp_arch.h @@ -37,7 +37,7 @@ void lwp_signal_do_return(rt_hw_stack_frame_t *frame); rt_inline unsigned long rt_hw_ffz(unsigned long x) { - return __builtin_ffsll(~x) - 1; + return __builtin_ffsl(~x) - 1; } #ifdef __cplusplus diff --git a/libcpu/aarch64/common/cpu_gcc.S b/libcpu/aarch64/common/cpu_gcc.S index a1029906bf362be58f1c164dfbfe170f092045f9..445c104dcea7a50697a5de4514d75d7783814999 100644 --- a/libcpu/aarch64/common/cpu_gcc.S +++ b/libcpu/aarch64/common/cpu_gcc.S @@ -86,6 +86,9 @@ rt_cpu_vector_set_base: RET +/** + * unsigned long rt_hw_ffz(unsigned long x) + */ .global rt_hw_ffz rt_hw_ffz: mvn x1, x0