provide optimized a_ctz_32 for arm
authorAndre McCurdy <armccurdy@gmail.com>
Thu, 19 Apr 2018 00:41:00 +0000 (17:41 -0700)
committerRich Felker <dalias@aerifal.cx>
Thu, 19 Apr 2018 16:27:16 +0000 (12:27 -0400)
Provide an ARM specific a_ctz_32 helper function for architecture
versions for which it can be implemented efficiently via the "rbit"
instruction (ie all Thumb-2 capable versions of ARM v6 and above).

arch/arm/atomic_arch.h

index c5c56f81214930bbec8cc59d8adb82eb4feee259..72fcddb4613425593ba4e6ac9af6ca90f7e1d2cd 100644 (file)
@@ -91,4 +91,16 @@ static inline int a_clz_32(uint32_t x)
        return x;
 }
 
+#if __ARM_ARCH_6T2__ || __ARM_ARCH_7A__ || __ARM_ARCH_7R__ || __ARM_ARCH >= 7
+
+#define a_ctz_32 a_ctz_32
+static inline int a_ctz_32(uint32_t x)
+{
+       uint32_t xr;
+       __asm__ ("rbit %0, %1" : "=r"(xr) : "r"(x));
+       return a_clz_32(xr);
+}
+
+#endif
+
 #endif