21 lines
386 B
C
21 lines
386 B
C
#ifdef __GNUC__
|
|
#define HAVE_BUILTINS
|
|
#endif
|
|
|
|
|
|
#ifdef HAVE_BUILTINS
|
|
#define count_num __builtin_popcount
|
|
#define prefetch __builtin_prefetch
|
|
#else
|
|
|
|
static inline int count_num(int x)
|
|
{
|
|
x = x - ((x >> 1) & 0x55555555);
|
|
x = (x & 0x33333333) + ((x >> 2) & 0x33333333);
|
|
return ((x + (x >> 4) & 0x0f0f0f0f) * 0x01010101) >> 24;
|
|
}
|
|
|
|
static inline void prefetch(void *x) {}
|
|
|
|
#endif
|