mirror of
https://github.com/RT-Thread/rt-thread.git
synced 2026-05-23 12:17:20 +08:00
[libcpu/arm]add __rt_ffs() for armclang in CORTEX M3/4/7
This commit is contained in:
@@ -11,6 +11,7 @@
|
||||
* 2012-12-23 aozima stack addr align to 8byte.
|
||||
* 2012-12-29 Bernard Add exception hook.
|
||||
* 2013-07-09 aozima enhancement hard fault exception handler.
|
||||
* 2019-07-03 yangjie add __rt_ffs() for armclang.
|
||||
*/
|
||||
|
||||
#include <rtthread.h>
|
||||
@@ -382,6 +383,25 @@ __asm int __rt_ffs(int value)
|
||||
exit
|
||||
BX lr
|
||||
}
|
||||
#elif defined(__CLANG_ARM)
|
||||
int __rt_ffs(int value)
|
||||
{
|
||||
__asm volatile(
|
||||
"CMP r0, #0x00 \n"
|
||||
"BEQ exit \n"
|
||||
|
||||
"RBIT r0, r0 \n"
|
||||
"CLZ r0, r0 \n"
|
||||
"ADDS r0, r0, #0x01 \n"
|
||||
|
||||
"exit: \n"
|
||||
"BX lr \n"
|
||||
|
||||
: "=r"(value)
|
||||
: "r"(value)
|
||||
);
|
||||
return value;
|
||||
}
|
||||
#elif defined(__IAR_SYSTEMS_ICC__)
|
||||
int __rt_ffs(int value)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user