]> wimlib.net Git - wimlib/blobdiff - include/wimlib/bitops.h
mount_image.c: add fallback definitions of RENAME_* constants
[wimlib] / include / wimlib / bitops.h
index 7cca2f22debb0cff8bd4aa096df2a6ba2e8e6c64..e5c4872e40b4035cd987ad70bcc8e0026be73fbf 100644 (file)
 static forceinline unsigned
 bsr32(u32 v)
 {
-#ifdef compiler_bsr32
-       return compiler_bsr32(v);
-#else
-       unsigned bit = 0;
-       while ((v >>= 1) != 0)
-               bit++;
-       return bit;
-#endif
+       return 31 - __builtin_clz(v);
 }
 
 static forceinline unsigned
 bsr64(u64 v)
 {
-#ifdef compiler_bsr64
-       return compiler_bsr64(v);
-#else
-       unsigned bit = 0;
-       while ((v >>= 1) != 0)
-               bit++;
-       return bit;
-#endif
+       return 63 - __builtin_clzll(v);
 }
 
 static forceinline unsigned
@@ -82,27 +68,13 @@ bsrw(machine_word_t v)
 static forceinline unsigned
 bsf32(u32 v)
 {
-#ifdef compiler_bsf32
-       return compiler_bsf32(v);
-#else
-       unsigned bit;
-       for (bit = 0; !(v & 1); bit++, v >>= 1)
-               ;
-       return bit;
-#endif
+       return __builtin_ctz(v);
 }
 
 static forceinline unsigned
 bsf64(u64 v)
 {
-#ifdef compiler_bsf64
-       return compiler_bsf64(v);
-#else
-       unsigned bit;
-       for (bit = 0; !(v & 1); bit++, v >>= 1)
-               ;
-       return bit;
-#endif
+       return __builtin_ctzll(v);
 }
 
 static forceinline unsigned