[vlc-devel] commit: clz: count leading zeroes ( Rémi Denis-Courmont )

git version control git at videolan.org
Sun Feb 7 10:41:55 CET 2010


vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Sun Feb  7 11:39:46 2010 +0200| [3c6a0755e70b35b5fc1fe7b931f7eaa350a72ab3] | committer: Rémi Denis-Courmont 

clz: count leading zeroes

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=3c6a0755e70b35b5fc1fe7b931f7eaa350a72ab3
---

 include/vlc_common.h |   23 +++++++++++++++++++++++
 1 files changed, 23 insertions(+), 0 deletions(-)

diff --git a/include/vlc_common.h b/include/vlc_common.h
index 4ec66cc..29055a7 100644
--- a/include/vlc_common.h
+++ b/include/vlc_common.h
@@ -621,6 +621,29 @@ static inline uint8_t clip_uint8_vlc( int32_t a )
     else           return a;
 }
 
+/* Count leading zeroes */
+LIBVLC_USED
+static inline unsigned clz (unsigned x)
+{
+#ifdef __GNUC_
+    return __builtin_clz (x);
+#else
+    unsigned i = sizeof (x) * 8;
+
+    while (x)
+    {
+        x = x >> 1;
+        i--;
+    }
+    return i;
+#endif
+}
+
+#define clz8( x ) (clz(x) - ((sizeof(unsigned) - sizeof (uint8_t)) * 8))
+#define clz16( x ) (clz(x) - ((sizeof(unsigned) - sizeof (uint16_t)) * 8))
+/* XXX: this assumes that int is 32-bits or more */
+#define clz32( x ) (clz(x) - ((sizeof(unsigned) - sizeof (uint32_t)) * 8))
+
 /* Free and set set the variable to NULL */
 #define FREENULL(a) do { free( a ); a = NULL; } while(0)
 




More information about the vlc-devel mailing list