diff options
-rw-r--r-- | bits.h | 26 |
1 files changed, 25 insertions, 1 deletions
@@ -11,6 +11,30 @@ #ifndef _BITS_H_ #define _BITS_H_ -#define BIT_MASK(n) (((n) == 64) ? ~0ULL : ((1ULL << (n))-1)) +#define BIT_MASK_FILL(n) (((n) == 64) ? ~0ULL : ((1ULL << (n))-1)) +#define BIT_MASK(n) (1UL << ((n) % 32)) +#define BIT_UINT32(n) ((n) / 32) + +/** + * Sets a bit in memory. + */ +static inline void set_bit(unsigned int nr, uint32_t *addr) +{ + uint32_t mask = BIT_MASK(nr); + uint32_t *p = addr + BIT_UINT32(nr); + + *p |= mask; +} + +/** + * Clears a bit in memory. + */ +static inline void clear_bit(unsigned int nr, uint32_t *addr) +{ + uint32_t mask = BIT_MASK(nr); + uint32_t *p = addr + BIT_UINT32(nr); + + *p &= ~mask; +} #endif /* _BITS_H_ */ |