sval: introduce sval_bits_used()
authorDan Carpenter <dan.carpenter@oracle.com>
Sat, 17 Nov 2012 13:38:10 +0000 (17 16:38 +0300)
committerDan Carpenter <dan.carpenter@oracle.com>
Sat, 17 Nov 2012 13:38:10 +0000 (17 16:38 +0300)
It basically returns fls(sval.uvalued);

Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
smatch.h
smatch_sval.c

index ed1eaff..ba9df4d 100644 (file)
--- a/smatch.h
+++ b/smatch.h
@@ -521,6 +521,7 @@ int sval_unsigned(sval_t sval);
 int sval_signed(sval_t sval);
 int sval_bits(sval_t sval);
 int sval_positive_bits(sval_t sval);
+int sval_bits_used(sval_t sval);
 int sval_is_min(sval_t sval);
 int sval_is_max(sval_t sval);
 int sval_is_a_min(sval_t sval);
index 3881a9f..0077468 100644 (file)
@@ -98,6 +98,17 @@ int sval_positive_bits(sval_t sval)
        return sval.type->bit_size;
 }
 
+int sval_bits_used(sval_t sval)
+{
+       int i;
+
+       for (i = 64; i >= 1; i--) {
+               if (sval.uvalue & (1ULL << (i - 1)))
+                       return i;
+       }
+       return 0;
+}
+
 int sval_is_min(sval_t sval)
 {
        sval_t min = sval_type_min(sval.type);