34#ifdef HAVE__BUILTIN_CLZ
37 return 31 - __builtin_clz(word);
43 while ((word >> shift) == 0)
57#ifdef HAVE__BUILTIN_CLZ
60#if defined(HAVE_LONG_INT_64)
61 return 63 - __builtin_clzl(word);
62#elif defined(HAVE_LONG_LONG_INT_64)
63 return 63 - __builtin_clzll(word);
65#error must have a working 64-bit integer datatype
72 while ((word >> shift) == 0)
87#ifdef HAVE__BUILTIN_CTZ
90 return __builtin_ctz(word);
96 while ((word & 255) == 0)
113#ifdef HAVE__BUILTIN_CTZ
116#if defined(HAVE_LONG_INT_64)
117 return __builtin_ctzl(word);
118#elif defined(HAVE_LONG_LONG_INT_64)
119 return __builtin_ctzll(word);
121#error must have a working 64-bit integer datatype
128 while ((word & 255) == 0)
155 if ((num & (num - 1)) == 0)
178 if ((num & (num - 1)) == 0)
188#if SIZEOF_SIZE_T == 4
189#define pg_nextpower2_size_t(num) pg_nextpower2_32(num)
191#define pg_nextpower2_size_t(num) pg_nextpower2_64(num)
224#if SIZEOF_SIZE_T == 4
225#define pg_prevpower2_size_t(num) pg_prevpower2_32(num)
227#define pg_prevpower2_size_t(num) pg_prevpower2_64(num)
269 return (word >> n) | (word << (
sizeof(word) *
BITS_PER_BYTE - n));
#define PGDLLIMPORT
Definition: c.h:1321
#define PG_UINT32_MAX
Definition: c.h:530
#define Assert(condition)
Definition: c.h:811
#define PG_UINT64_MAX
Definition: c.h:533
int(* pg_popcount64)(uint64 word)
Definition: pg_bitutils.c:133
PGDLLIMPORT const uint8 pg_number_of_ones[256]
Definition: pg_bitutils.c:87
static int pg_rightmost_one_pos64(uint64 word)
Definition: pg_bitutils.h:111
static uint32 pg_nextpower2_32(uint32 num)
Definition: pg_bitutils.h:146
static uint64 pg_ceil_log2_64(uint64 num)
Definition: pg_bitutils.h:248
static uint32 pg_rotate_right32(uint32 word, int n)
Definition: pg_bitutils.h:267
static int pg_rightmost_one_pos32(uint32 word)
Definition: pg_bitutils.h:85
static uint64 pg_nextpower2_64(uint64 num)
Definition: pg_bitutils.h:169
static int pg_leftmost_one_pos32(uint32 word)
Definition: pg_bitutils.h:32
PGDLLIMPORT const uint8 pg_rightmost_one_pos[256]
Definition: pg_bitutils.c:62
static uint32 pg_ceil_log2_32(uint32 num)
Definition: pg_bitutils.h:235
static uint32 pg_prevpower2_32(uint32 num)
Definition: pg_bitutils.h:202
static uint64 pg_prevpower2_64(uint64 num)
Definition: pg_bitutils.h:215
int(* pg_popcount32)(uint32 word)
Definition: pg_bitutils.c:132
uint64 pg_popcount(const char *buf, int bytes)
Definition: pg_bitutils.c:282
PGDLLIMPORT const uint8 pg_leftmost_one_pos[256]
Definition: pg_bitutils.c:34
static int pg_leftmost_one_pos64(uint64 word)
Definition: pg_bitutils.h:55
#define BITS_PER_BYTE
Definition: pg_config_manual.h:132
unsigned int uint32
Definition: pg_ext_defs.in.h:13
unsigned char uint8
Definition: pg_ext_defs.in.h:11
unsigned long int uint64
Definition: pg_ext_defs.in.h:14