Loading...
Searching...
No Matches
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.
 
static unsigned bitarithm_lsb (unsigned v)
 Returns the number of the lowest '1' bit in a value.
 
unsigned bitarithm_bits_set (unsigned v)
 Returns the number of bits set in a value.
 
uint8_t bitarithm_bits_set_u32 (uint32_t v)
 Returns the (uint32_t version) number of bits set in a value.
 
unsigned bitarith_msb_32bit_no_native_clz (unsigned v)
 Returns the number of the highest '1' bit in a value.
 
static uint8_t bitarithm_clzb (uint8_t x)
 Returns the number of leading 0-bits in x, starting at the most significant bit position.
 
static unsigned bitarithm_test_and_clear (unsigned state, uint8_t *index)
 Used for iterating over the bits in state.
 
#define SETBIT(val, bit)   val |= (bit)
 Sets a bitmask for a bitfield.
 
#define CLRBIT(val, bit)   val &= (~(bit))
 Clears bitmask for a bitfield.
 

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

◆ ARCH_32_BIT

#define ARCH_32_BIT   (__INT_MAX__ == 2147483647)

1 for 32 bit architectures, 0 otherwise

Definition at line 98 of file bitarithm.h.

◆ BIT0

#define BIT0   0x00000001

Bit 0 set define.

Definition at line 59 of file bitarithm.h.

◆ BIT1

#define BIT1   0x00000002

Bit 1 set define.

Definition at line 60 of file bitarithm.h.

◆ BIT10

#define BIT10   0x00000400

Bit 10 set define.

Definition at line 71 of file bitarithm.h.

◆ BIT11

#define BIT11   0x00000800

Bit 11 set define.

Definition at line 72 of file bitarithm.h.

◆ BIT12

#define BIT12   0x00001000

Bit 12 set define.

Definition at line 73 of file bitarithm.h.

◆ BIT13

#define BIT13   0x00002000

Bit 13 set define.

Definition at line 74 of file bitarithm.h.

◆ BIT14

#define BIT14   0x00004000

Bit 14 set define.

Definition at line 75 of file bitarithm.h.

◆ BIT15

#define BIT15   0x00008000

Bit 15 set define.

Definition at line 76 of file bitarithm.h.

◆ BIT16

#define BIT16   0x00010000

Bit 16 set define.

Definition at line 79 of file bitarithm.h.

◆ BIT17

#define BIT17   0x00020000

Bit 17 set define.

Definition at line 80 of file bitarithm.h.

◆ BIT18

#define BIT18   0x00040000

Bit 18 set define.

Definition at line 81 of file bitarithm.h.

◆ BIT19

#define BIT19   0x00080000

Bit 19 set define.

Definition at line 82 of file bitarithm.h.

◆ BIT2

#define BIT2   0x00000004

Bit 2 set define.

Definition at line 61 of file bitarithm.h.

◆ BIT20

#define BIT20   0x00100000

Bit 20 set define.

Definition at line 83 of file bitarithm.h.

◆ BIT21

#define BIT21   0x00200000

Bit 21 set define.

Definition at line 84 of file bitarithm.h.

◆ BIT22

#define BIT22   0x00400000

Bit 22 set define.

Definition at line 85 of file bitarithm.h.

◆ BIT23

#define BIT23   0x00800000

Bit 23 set define.

Definition at line 86 of file bitarithm.h.

◆ BIT24

#define BIT24   0x01000000

Bit 24 set define.

Definition at line 87 of file bitarithm.h.

◆ BIT25

#define BIT25   0x02000000

Bit 25 set define.

Definition at line 88 of file bitarithm.h.

◆ BIT26

#define BIT26   0x04000000

Bit 26 set define.

Definition at line 89 of file bitarithm.h.

◆ BIT27

#define BIT27   0x08000000

Bit 27 set define.

Definition at line 90 of file bitarithm.h.

◆ BIT28

#define BIT28   0x10000000

Bit 28 set define.

Definition at line 91 of file bitarithm.h.

◆ BIT29

#define BIT29   0x20000000

Bit 29 set define.

Definition at line 92 of file bitarithm.h.

◆ BIT3

#define BIT3   0x00000008

Bit 3 set define.

Definition at line 62 of file bitarithm.h.

◆ BIT30

#define BIT30   0x40000000

Bit 30 set define.

Definition at line 93 of file bitarithm.h.

◆ BIT31

#define BIT31   0x80000000

Bit 31 set define.

Definition at line 94 of file bitarithm.h.

◆ BIT4

#define BIT4   0x00000010

Bit 4 set define.

Definition at line 63 of file bitarithm.h.

◆ BIT5

#define BIT5   0x00000020

Bit 5 set define.

Definition at line 64 of file bitarithm.h.

◆ BIT6

#define BIT6   0x00000040

Bit 6 set define.

Definition at line 65 of file bitarithm.h.

◆ BIT7

#define BIT7   0x00000080

Bit 7 set define.

Definition at line 66 of file bitarithm.h.

◆ BIT8

#define BIT8   0x00000100

Bit 8 set define.

Definition at line 67 of file bitarithm.h.

◆ BIT9

#define BIT9   0x00000200

Bit 9 set define.

Definition at line 68 of file bitarithm.h.

◆ 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.