From 105d2c8f1436a91867ce352144baae5c390a32e1 Mon Sep 17 00:00:00 2001 From: Tobias Klauser Date: Thu, 18 Nov 2010 13:54:22 +0100 Subject: Add bit set/clear functions, differentiate bit mask macros --- bits.h | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/bits.h b/bits.h index 8374527..82eb153 100644 --- a/bits.h +++ b/bits.h @@ -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_ */ -- cgit v1.2.3-54-g00ecf