OSDN Git Service

ARM: findbit: provide more efficient ARMv7 implementation
authorRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
Fri, 29 Jul 2022 15:10:49 +0000 (16:10 +0100)
committerRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
Mon, 14 Nov 2022 12:00:58 +0000 (12:00 +0000)
Provide a more efficient ARMv7 implementation to determine the first
set bit in the supplied value.

Signed-off-by: Russell King (Oracle) <rmk@armlinux.org.uk>
arch/arm/lib/findbit.S

index 4c584bc..256e095 100644 (file)
@@ -170,7 +170,11 @@ ENDPROC(_find_next_bit_be)
  * One or more bits in the LSB of r3 are assumed to be set.
  */
 .L_found:
-#if __LINUX_ARM_ARCH__ >= 5
+#if __LINUX_ARM_ARCH__ >= 7
+               rbit    r3, r3                  @ reverse bits
+               clz     r3, r3                  @ count high zero bits
+               add     r0, r2, r3              @ add offset of first set bit
+#elif __LINUX_ARM_ARCH__ >= 5
                rsb     r0, r3, #0
                and     r3, r3, r0              @ mask out lowest bit set
                clz     r3, r3                  @ count high zero bits