linux/include/linux/bitops.h
<<
>>
Prefs
   1#ifndef _LINUX_BITOPS_H
   2#define _LINUX_BITOPS_H
   3#include <asm/types.h>
   4
   5/*
   6 * Include this here because some architectures need generic_ffs/fls in
   7 * scope
   8 */
   9#include <asm/bitops.h>
  10
  11static __inline__ int get_bitmask_order(unsigned int count)
  12{
  13        int order;
  14        
  15        order = fls(count);
  16        return order;   /* We could be slightly more clever with -1 here... */
  17}
  18
  19static __inline__ int get_count_order(unsigned int count)
  20{
  21        int order;
  22        
  23        order = fls(count) - 1;
  24        if (count & (count - 1))
  25                order++;
  26        return order;
  27}
  28
  29static inline unsigned long hweight_long(unsigned long w)
  30{
  31        return sizeof(w) == 4 ? hweight32(w) : hweight64(w);
  32}
  33
  34/*
  35 * rol32 - rotate a 32-bit value left
  36 *
  37 * @word: value to rotate
  38 * @shift: bits to roll
  39 */
  40static inline __u32 rol32(__u32 word, unsigned int shift)
  41{
  42        return (word << shift) | (word >> (32 - shift));
  43}
  44
  45/*
  46 * ror32 - rotate a 32-bit value right
  47 *
  48 * @word: value to rotate
  49 * @shift: bits to roll
  50 */
  51static inline __u32 ror32(__u32 word, unsigned int shift)
  52{
  53        return (word >> shift) | (word << (32 - shift));
  54}
  55
  56static inline unsigned fls_long(unsigned long l)
  57{
  58        if (sizeof(l) == 4)
  59                return fls(l);
  60        return fls64(l);
  61}
  62
  63#endif
  64
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.