1. /* Function to reverse bits. Algorithm from:
    2. * http://graphics.stanford.edu/~seander/bithacks.html#ReverseParallel */
    3. static unsigned long rev(unsigned long v) {
    4. unsigned long s = 8 * sizeof(v); // bit size; must be power of 2
    5. unsigned long mask = ~0;
    6. while ((s >>= 1) > 0) {
    7. mask ^= (mask << s);
    8. v = ((v >> s) & mask) | ((v << s) & ~mask);
    9. }
    10. return v;
    11. }