From f8c58778bd1f195cea7850f928ceb2fc591da018 Mon Sep 17 00:00:00 2001 From: Jingru Date: Mon, 25 May 2020 17:25:52 +0800 Subject: [PATCH] =?UTF-8?q?arch=EF=BC=9Aarc:=20use=20FLS=20instruction=20t?= =?UTF-8?q?o=20get=20clz?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Jingru --- arch/arc/arcem/port.h | 4 +--- arch/arc/arcem/port_config.h | 2 +- arch/arc/arcem/port_s.s | 2 +- arch/arc/common/tos_cpu.c | 4 ++++ 4 files changed, 7 insertions(+), 5 deletions(-) diff --git a/arch/arc/arcem/port.h b/arch/arc/arcem/port.h index ae55a3e0..4cf98c0f 100644 --- a/arch/arc/arcem/port.h +++ b/arch/arc/arcem/port.h @@ -23,7 +23,7 @@ #endif #if defined(TOS_CFG_CPU_LEAD_ZEROS_ASM_PRESENT) && (TOS_CFG_CPU_LEAD_ZEROS_ASM_PRESENT == 1u) -__PORT__ uint32_t port_clz(uint32_t val); +__PORT__ uint32_t port_cpu_clz(uint32_t); #endif __PORT__ void port_int_disable(void); @@ -36,8 +36,6 @@ __PORT__ void port_cpsr_restore(cpu_cpsr_t cpsr); __PORT__ void port_cpu_reset(void); -__PORT__ uint32_t port_cpu_clz(uint32_t); - __PORT__ void port_sched_start(void) __NO_RETURN__; __PORT__ void port_context_switch(void); diff --git a/arch/arc/arcem/port_config.h b/arch/arc/arcem/port_config.h index 9a8a5e2b..8f247376 100644 --- a/arch/arc/arcem/port_config.h +++ b/arch/arc/arcem/port_config.h @@ -22,6 +22,6 @@ #define TOS_CFG_CPU_DATA_SIZE CPU_WORD_SIZE_32 #define TOS_CFG_CPU_STK_GROWTH CPU_STK_GROWTH_DESCENDING #define TOS_CFG_CPU_HRTIMER_EN 0u -#define TOS_CFG_CPU_LEAD_ZEROS_ASM_PRESENT 0u +#define TOS_CFG_CPU_LEAD_ZEROS_ASM_PRESENT 1u #endif /* _PORT_CONFIG_H_ */ diff --git a/arch/arc/arcem/port_s.s b/arch/arc/arcem/port_s.s index 057dd934..4a7ff582 100644 --- a/arch/arc/arcem/port_s.s +++ b/arch/arc/arcem/port_s.s @@ -313,7 +313,7 @@ firq_return: .align 4 port_cpu_clz: breq r0, 0, cpu_clz_return - ffs r1, r0 + fls r1, r0 add r0, r1, 1 cpu_clz_return: j [blink] \ No newline at end of file diff --git a/arch/arc/common/tos_cpu.c b/arch/arc/common/tos_cpu.c index 1dd32723..aab30a81 100644 --- a/arch/arc/common/tos_cpu.c +++ b/arch/arc/common/tos_cpu.c @@ -26,6 +26,7 @@ void tos_cpu_tick_handler(void) __API__ uint32_t tos_cpu_clz(uint32_t val) { +#if defined(TOS_CFG_CPU_LEAD_ZEROS_ASM_PRESENT) && (TOS_CFG_CPU_LEAD_ZEROS_ASM_PRESENT == 0u) uint32_t nbr_lead_zeros = 0; if (!(val & 0XFFFF0000)) { @@ -57,6 +58,9 @@ __API__ uint32_t tos_cpu_clz(uint32_t val) } return (nbr_lead_zeros); +#else + return (32 - port_cpu_clz(val)); +#endif } __API__ void tos_cpu_int_disable(void)