GCC builtins

Bytes vertauschen / Endianess korrigieren

uint16_t __builtin_bswap16(uint16_t x)  // swap bytes (0xaabb -> 0xbbaa)
uint32_t __builtin_bswap32(uint32_t x)
uint64_t __builtin_bswap64(uint32_t x)

Führende Null-Bits zählen

Achtung, ist für 0 als Argument undefiniert

__builtin_clz(unsigned int x)
__builtin_clzl(unsigned long)

...

int __builtin_ffs(int x)
int __builtin_ffsl(long x)
int __builtin_ffsll(long long)

__builtin_ctz(unsigned int x)           // number of trailing 0 bits
                                        // undefined for x=0

__builtin_popcount(unsigned int x)      // number of 1-bits
__builtin_popcountl(unsigned long x)