Explorar o código

[libcpu][cm33] 修复不同优化等级,函数行为不一致的问题

tangyuxin %!s(int64=4) %!d(string=hai) anos
pai
achega
360d7e48ab
Modificáronse 1 ficheiros con 2 adicións e 6 borrados
  1. 2 6
      libcpu/arm/cortex-m33/cpuport.c

+ 2 - 6
libcpu/arm/cortex-m33/cpuport.c

@@ -473,17 +473,13 @@ exit
 #elif defined(__CLANG_ARM)
 int __rt_ffs(int value)
 {
-    __asm volatile(
-        "CMP     r0, #0x00            \n"
-        "BEQ     1f                   \n"
+    if (value == 0) return value;
 
+    __asm volatile(
         "RBIT    r0, r0               \n"
         "CLZ     r0, r0               \n"
         "ADDS    r0, r0, #0x01        \n"
 
-        "1:                           \n"
-        "BX      lr                   \n"
-
         : "=r"(value)
         : "r"(value)
     );