hashtable

Log

Files

Refs

LICENSE

hashtable.c (465B)

     1 
     2 #include "libsheepyObject.h"
     3 
     4 u32 ilog2Hashtable(u32 value);
     5 
     6 u32 ilog2Hashtable(u32 value) {
     7   //u32 n = (__builtin_clz(value) ^ 31) + 1;
     8   if (!value) return 4;
     9   // compute log2 of value
    10   u32 n;
    11   asm ("bsrl %1, %0" : "=r" (n) : "r" (value));
    12   n++;
    13   // keep size at 16 for values under 17
    14   if (n <= 4) n = 4;
    15   // if value is a power of 2, keep the size down
    16   else if ((value & (value-1)) == 0) n--;
    17   /*else if (value == (1<<(n-1))) n--;*/
    18   return n;
    19 }
    20