Files
labs-bird/lib/bitops.h
T

39 lines
982 B
C
Raw Normal View History

1998-05-03 16:43:39 +00:00
/*
* BIRD Library -- Generic Bit Operations
*
* (c) 1998 Martin Mares <[email protected]>
*
* Can be freely distributed and used under the terms of the GNU GPL.
*/
2013-11-26 22:37:24 +01:00
#ifndef _BIRD_BITOPTS_H_
#define _BIRD_BITOPTS_H_
2016-11-09 16:36:34 +01:00
#include "sysdep/config.h"
1998-05-03 16:43:39 +00:00
/*
* Bit mask operations:
*
* u32_mkmask Make bit mask consisting of <n> consecutive ones
* from the left and the rest filled with zeroes.
* E.g., u32_mkmask(5) = 0xf8000000.
* u32_masklen Inverse operation to u32_mkmask, -1 if not a bitmask.
*/
2015-05-19 08:53:34 +02:00
u32 u32_mkmask(uint n);
2015-11-05 12:48:52 +01:00
uint u32_masklen(u32 x);
2009-03-31 12:55:57 +02:00
u32 u32_log2(u32 v);
2013-11-26 22:37:24 +01:00
static inline u32 u32_hash(u32 v) { return v * 2902958171u; }
2016-04-28 18:01:40 +02:00
static inline u8 u32_popcount(u32 v) { return __builtin_popcount(v); }
static inline u8 u64_popcount(u64 v) { return __builtin_popcountll(v); }
2013-11-26 22:37:24 +01:00
2019-09-09 02:43:39 +02:00
static inline int u32_clz(u32 v) { return __builtin_clz(v); }
static inline int u32_ctz(u32 v) { return __builtin_ctz(v); }
static inline int uint_is_pow2(uint n) { return n && !(n & (n-1)); }
2016-04-28 18:01:40 +02:00
#endif