]> git.sesse.net Git - plocate/blobdiff - turbopfor-encode.h
Add an alternative for __builtin_clz.
[plocate] / turbopfor-encode.h
index 9341efc0b7f4c23552f29dbd115bac508eb6cc1d..d149ae75ce85dd6b4a08392d652e991c488d22d0 100644 (file)
@@ -94,11 +94,20 @@ unsigned char *write_vb(Docid val, unsigned char *out)
 template<class Docid>
 inline unsigned num_bits(Docid x)
 {
+#ifdef __GNUC__
        if (x == 0) {
                return 0;
        } else {
                return sizeof(Docid) * CHAR_BIT - __builtin_clz(x);
        }
+#else
+       for (int i = sizeof(Docid) * CHAR_BIT; i-- > 0; ) {
+               if (x & (Docid{1} << i)) {
+                       return i;
+               }
+       }
+       return 0;
+#endif
 }
 
 struct BitWriter {