b9b173177cf2a781dde39c32084bdbb81a992688
[coreboot.git] / src / lib / clog2.c
1 #undef DEBUG_LOG2
2
3 #ifdef DEBUG_LOG2
4 #include <console/console.h>
5 #endif
6
7 /* Assume 8 bits per byte */
8 #define CHAR_BIT 8
9
10 unsigned long log2(unsigned long x)
11 {
12         // assume 8 bits per byte.
13         unsigned long i = 1ULL << (sizeof(x)* CHAR_BIT - 1ULL);
14         unsigned long pow = sizeof(x) * CHAR_BIT - 1ULL;
15
16         if (! x) {
17 #ifdef DEBUG_LOG2
18                 printk_warning("%s called with invalid parameter of 0\n",
19                         __func__);
20 #endif
21                 return -1;
22         }
23         for(; i > x; i >>= 1, pow--)
24                 ;
25
26         return pow;
27 }