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

static 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...
 
unsigned bitarith_msb_32bit_no_native_clz (unsigned v)
 Returns the number of the highest '1' bit in a value. More...
 
static uint8_t bitarithm_clzb (uint8_t x)
 Returns the number of leading 0-bits in x, starting at the most significant bit position. 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
 Bit 0 set define.
 
#define BIT1   0x00000002
 Bit 1 set define.
 
#define BIT2   0x00000004
 Bit 2 set define.
 
#define BIT3   0x00000008
 Bit 3 set define.
 
#define BIT4   0x00000010
 Bit 4 set define.
 
#define BIT5   0x00000020
 Bit 5 set define.
 
#define BIT6   0x00000040
 Bit 6 set define.
 
#define BIT7   0x00000080
 Bit 7 set define.
 
#define BIT8   0x00000100
 Bit 8 set define.
 
#define BIT9   0x00000200
 Bit 9 set define.
 
#define BIT10   0x00000400
 Bit 10 set define.
 
#define BIT11   0x00000800
 Bit 11 set define.
 
#define BIT12   0x00001000
 Bit 12 set define.
 
#define BIT13   0x00002000
 Bit 13 set define.
 
#define BIT14   0x00004000
 Bit 14 set define.
 
#define BIT15   0x00008000
 Bit 15 set define.
 
#define BIT16   0x00010000
 Bit 16 set define.
 
#define BIT17   0x00020000
 Bit 17 set define.
 
#define BIT18   0x00040000
 Bit 18 set define.
 
#define BIT19   0x00080000
 Bit 19 set define.
 
#define BIT20   0x00100000
 Bit 20 set define.
 
#define BIT21   0x00200000
 Bit 21 set define.
 
#define BIT22   0x00400000
 Bit 22 set define.
 
#define BIT23   0x00800000
 Bit 23 set define.
 
#define BIT24   0x01000000
 Bit 24 set define.
 
#define BIT25   0x02000000
 Bit 25 set define.
 
#define BIT26   0x04000000
 Bit 26 set define.
 
#define BIT27   0x08000000
 Bit 27 set define.
 
#define BIT28   0x10000000
 Bit 28 set define.
 
#define BIT29   0x20000000
 Bit 29 set define.
 
#define BIT30   0x40000000
 Bit 30 set define.
 
#define BIT31   0x80000000
 Bit 31 set define.
 

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

◆ bitarith_msb_32bit_no_native_clz()

unsigned bitarith_msb_32bit_no_native_clz ( unsigned  v)

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

     Internal software implementation for 32 bit platforms,
     use @see bitarithm_msb in application code.
Parameters
[in]vInput value
Returns
Bit Number

◆ 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_clzb()

static uint8_t bitarithm_clzb ( uint8_t  x)
inlinestatic

Returns the number of leading 0-bits in x, starting at the most significant bit position.

If x is 0, the result is undefined.

Parameters
[in]xInput value
Returns
Number of leading zero bits

Definition at line 176 of file bitarithm.h.

◆ 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 206 of file bitarithm.h.

◆ bitarithm_msb()

static unsigned bitarithm_msb ( unsigned  v)
inlinestatic

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

Definition at line 153 of file bitarithm.h.

◆ 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 254 of file bitarithm.h.