arch:arc: use FLS instruction to get clz
Signed-off-by: Jingru <jingru@synopsys.com>
This commit is contained in:
@@ -23,7 +23,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(TOS_CFG_CPU_LEAD_ZEROS_ASM_PRESENT) && (TOS_CFG_CPU_LEAD_ZEROS_ASM_PRESENT == 1u)
|
#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
|
#endif
|
||||||
|
|
||||||
__PORT__ void port_int_disable(void);
|
__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__ void port_cpu_reset(void);
|
||||||
|
|
||||||
__PORT__ uint32_t port_cpu_clz(uint32_t);
|
|
||||||
|
|
||||||
__PORT__ void port_sched_start(void) __NO_RETURN__;
|
__PORT__ void port_sched_start(void) __NO_RETURN__;
|
||||||
|
|
||||||
__PORT__ void port_context_switch(void);
|
__PORT__ void port_context_switch(void);
|
||||||
|
@@ -22,6 +22,6 @@
|
|||||||
#define TOS_CFG_CPU_DATA_SIZE CPU_WORD_SIZE_32
|
#define TOS_CFG_CPU_DATA_SIZE CPU_WORD_SIZE_32
|
||||||
#define TOS_CFG_CPU_STK_GROWTH CPU_STK_GROWTH_DESCENDING
|
#define TOS_CFG_CPU_STK_GROWTH CPU_STK_GROWTH_DESCENDING
|
||||||
#define TOS_CFG_CPU_HRTIMER_EN 0u
|
#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_ */
|
#endif /* _PORT_CONFIG_H_ */
|
||||||
|
@@ -313,7 +313,7 @@ firq_return:
|
|||||||
.align 4
|
.align 4
|
||||||
port_cpu_clz:
|
port_cpu_clz:
|
||||||
breq r0, 0, cpu_clz_return
|
breq r0, 0, cpu_clz_return
|
||||||
ffs r1, r0
|
fls r1, r0
|
||||||
add r0, r1, 1
|
add r0, r1, 1
|
||||||
cpu_clz_return:
|
cpu_clz_return:
|
||||||
j [blink]
|
j [blink]
|
@@ -26,6 +26,7 @@ void tos_cpu_tick_handler(void)
|
|||||||
|
|
||||||
__API__ uint32_t tos_cpu_clz(uint32_t val)
|
__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;
|
uint32_t nbr_lead_zeros = 0;
|
||||||
|
|
||||||
if (!(val & 0XFFFF0000)) {
|
if (!(val & 0XFFFF0000)) {
|
||||||
@@ -57,6 +58,9 @@ __API__ uint32_t tos_cpu_clz(uint32_t val)
|
|||||||
}
|
}
|
||||||
|
|
||||||
return (nbr_lead_zeros);
|
return (nbr_lead_zeros);
|
||||||
|
#else
|
||||||
|
return (32 - port_cpu_clz(val));
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
__API__ void tos_cpu_int_disable(void)
|
__API__ void tos_cpu_int_disable(void)
|
||||||
|
Reference in New Issue
Block a user