[funini.com] -> [kei@sodan] -> Kernel Reading

root/include/asm-generic/bitops/__fls.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. __fls

#ifndef _ASM_GENERIC_BITOPS___FLS_H_
#define _ASM_GENERIC_BITOPS___FLS_H_

#include <asm/types.h>

/**
 * __fls - find last (most-significant) set bit in a long word
 * @word: the word to search
 *
 * Undefined if no set bit exists, so code should check against 0 first.
 */
static inline unsigned long __fls(unsigned long word)
{
        int num = BITS_PER_LONG - 1;

#if BITS_PER_LONG == 64
        if (!(word & (~0ul << 32))) {
                num -= 32;
                word <<= 32;
        }
#endif
        if (!(word & (~0ul << (BITS_PER_LONG-16)))) {
                num -= 16;
                word <<= 16;
        }
        if (!(word & (~0ul << (BITS_PER_LONG-8)))) {
                num -= 8;
                word <<= 8;
        }
        if (!(word & (~0ul << (BITS_PER_LONG-4)))) {
                num -= 4;
                word <<= 4;
        }
        if (!(word & (~0ul << (BITS_PER_LONG-2)))) {
                num -= 2;
                word <<= 2;
        }
        if (!(word & (~0ul << (BITS_PER_LONG-1))))
                num -= 1;
        return num;
}

#endif /* _ASM_GENERIC_BITOPS___FLS_H_ */

/* [<][>][^][v][top][bottom][index][help] */

[funini.com] -> [kei@sodan] -> Kernel Reading