#define RRR (1<<logRRR)
-
-
-
#include <stdlib.h>
-
+#ifdef __GNUC__
+#define UNUSED __attribute__((unused))
+#else
+#define UNUSED
+#endif
#ifdef HAS_NATIVE_POPCOUNT
-static inline unsigned int popcount(unsigned int n){
- asm ("popcnt %1, %0" : "=r" (n) : "0" (n));
- return n;
+static inline UNUSED unsigned int popcount(unsigned int n){
+ return __builtin_popcount(n);
}
-static inline unsigned int popcount8(unsigned int n) {
+static inline UNUSED unsigned int popcount8(unsigned int n) {
return popcount(n & 0xff);
}
#else
+#ifdef HAS_POPCOUNT_TABLE
+
+extern unsigned char popCount[256];
+
+static UNUSED unsigned int popcount8(unsigned int x)
+{
+ return (unsigned int) popCount[x & 0xff];
+}
+
+static UNUSED unsigned int popcount(unsigned int x)
+{
+ return popcount8(x) +
+ popcount8((x >> 8)) +
+ popcount8((x >> 16)) +
+ popcount8((x >> 24));
+}
+
-static unsigned int popcount8(unsigned int x)
+#else
+static UNUSED unsigned int popcount8(unsigned int x)
{
unsigned int r;
r = x;
return r;
}
-static inline unsigned int popcount(unsigned int x)
+static inline UNUSED unsigned int popcount(unsigned int x)
{
unsigned int m1 = 0x55555555;
unsigned int m2 = 0xc30c30c3;
}
#endif
+#endif
void * bp_malloc(size_t);
void bp_free(void *);
-size_t bp_alloc_stats(void);
+size_t bp_get_alloc_stats(void);
void bp_reset_alloc_states(void);