bitarithm.h File Reference

Helper functions for bit arithmetic. More...

Detailed Description

Helper functions for bit arithmetic.

Author
Kaspar Schleiser kaspa.nosp@m.r@sc.nosp@m.hleis.nosp@m.er.d.nosp@m.e
Martine Lenders mlend.nosp@m.ers@.nosp@m.inf.f.nosp@m.u-be.nosp@m.rlin..nosp@m.de

Definition in file bitarithm.h.

#include <stdint.h>
#include "cpu_conf.h"
+ Include dependency graph for bitarithm.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define ARCH_32_BIT   (__INT_MAX__ == 2147483647)
 1 for 32 bit architectures, 0 otherwise
 

Functions

unsigned bitarithm_msb (unsigned v)
 Returns the number of the highest '1' bit in a value. More...
 
static unsigned bitarithm_lsb (unsigned v)
 Returns the number of the lowest '1' bit in a value. More...
 
unsigned bitarithm_bits_set (unsigned v)
 Returns the number of bits set in a value. More...
 
uint8_t bitarithm_bits_set_u32 (uint32_t v)
 Returns the (uint32_t version) number of bits set in a value. More...
 
static unsigned bitarithm_test_and_clear (unsigned state, uint8_t *index)
 Used for iterating over the bits in state. More...
 
#define SETBIT(val, bit)   val |= (bit)
 Sets a bitmask for a bitfield. More...
 
#define CLRBIT(val, bit)   val &= (~(bit))
 Clears bitmask for a bitfield. More...
 

Single Bit Defines

#define BIT0   0x00000001
 
#define BIT1   0x00000002
 
#define BIT2   0x00000004
 
#define BIT3   0x00000008
 
#define BIT4   0x00000010
 
#define BIT5   0x00000020
 
#define BIT6   0x00000040
 
#define BIT7   0x00000080
 
#define BIT8   0x00000100
 
#define BIT9   0x00000200
 
#define BIT10   0x00000400
 
#define BIT11   0x00000800
 
#define BIT12   0x00001000
 
#define BIT13   0x00002000
 
#define BIT14   0x00004000
 
#define BIT15   0x00008000
 
#define BIT16   0x00010000
 
#define BIT17   0x00020000
 
#define BIT18   0x00040000
 
#define BIT19   0x00080000
 
#define BIT20   0x00100000
 
#define BIT21   0x00200000
 
#define BIT22   0x00400000
 
#define BIT23   0x00800000
 
#define BIT24   0x01000000
 
#define BIT25   0x02000000
 
#define BIT26   0x04000000
 
#define BIT27   0x08000000
 
#define BIT28   0x10000000
 
#define BIT29   0x20000000
 
#define BIT30   0x40000000
 
#define BIT31   0x80000000
 

Macro Definition Documentation

◆ CLRBIT

#define CLRBIT (   val,
  bit 
)    val &= (~(bit))

Clears bitmask for a bitfield.

Parameters
[in]valThe bitfield
[in]bitSpecifies the bits to be cleared
Returns
The modified bitfield

Definition at line 52 of file bitarithm.h.

◆ SETBIT

#define SETBIT (   val,
  bit 
)    val |= (bit)

Sets a bitmask for a bitfield.

Parameters
[in]valThe bitfield
[in]bitSpecifies the bits to be set
Returns
The modified bitfield

Definition at line 41 of file bitarithm.h.

Function Documentation

◆ bitarithm_bits_set()

unsigned bitarithm_bits_set ( unsigned  v)

Returns the number of bits set in a value.

Parameters
[in]vInput value with platform-dependent word size
Returns
Number of set bits

◆ bitarithm_bits_set_u32()

uint8_t bitarithm_bits_set_u32 ( uint32_t  v)

Returns the (uint32_t version) number of bits set in a value.

Parameters
[in]vInput value with 32 bit size
Returns
Number of set bits

◆ bitarithm_lsb()

static unsigned bitarithm_lsb ( unsigned  v)
inlinestatic

Returns the number of the lowest '1' bit in a value.

Parameters
[in]vInput value - must be unequal to '0', otherwise the function will produce an infinite loop
Returns
Bit Number

Definition at line 141 of file bitarithm.h.

◆ bitarithm_msb()

unsigned bitarithm_msb ( unsigned  v)

Returns the number of the highest '1' bit in a value.

Parameters
[in]vInput value
Returns
Bit Number

Source: http://graphics.stanford.edu/~seander/bithacks.html#IntegerLogObvious

◆ bitarithm_test_and_clear()

static unsigned bitarithm_test_and_clear ( unsigned  state,
uint8_t *  index 
)
inlinestatic

Used for iterating over the bits in state.

Returns the index of a set bit in state, returns state with that bit cleared.

Warning
This is a low-level helper function, arguments are not checked. It is intended to iterate over a bit map until all bits are cleared. Whether it starts with the highest or lowest bit will depend on what is fastest on the given hardware.
state must not be zero.
Parameters
[in]stateBit Map with at least one bit set
[out]indexIndex of the first set bit. Must be initialized with 0 before the first call to this function, must not be modified between subsequent calls.
Returns
new state value - must be treated as opaque value

Definition at line 186 of file bitarithm.h.