chiark / gitweb /
journal: u64log2 can be expressed just as __builtin_clzll(n) ^ 63U
[elogind.git] / src / shared / util.h
index 69a47653aa4507023e45e5694b0a1b63c2589b4d..7c3da08dd8856787a8937a882d79aba17e6eae6d 100644 (file)
@@ -635,3 +635,7 @@ static inline void _reset_umask_(struct umask_struct *s) {
         for (__attribute__((cleanup(_reset_umask_))) struct umask_struct _saved_umask_ = { umask(mask), false }; \
              !_saved_umask_.quit ;                                      \
              _saved_umask_.quit = true)
+
+static inline unsigned u64log2(uint64_t n) {
+        return (n > 1) ? __builtin_clzll(n) ^ 63U : 0;
+}