ifeq ($(DEBUG), true)
OPT_FLAGS=-O0 -g $(POPCOUNT_FLAG) -static
else
- OPT_FLAGS=-O3 $(POPCOUNT_FLAG) -static -flto
+ OPT_FLAGS=-O3 $(POPCOUNT_FLAG) -static
endif
#define MBid(i) ((i)>>logMB)
#define MBfirst(i) ((i) & (~(MB-1)))
#define MBlast(i) ((i) | (MB-1))
-#define max(a,b) \
- ({ __typeof__ (a) _a = (a); \
- __typeof__ (b) _b = (b); \
- _a > _b ? _a : _b; })
+static int min(int a, int b)
+{
+ return (a <= b) ? a : b;
+}
-#define min(a,b) \
- ({ __typeof__ (a) _a = (a); \
- __typeof__ (b) _b = (b); \
- _a <= _b ? _a : _b; })
-
+static int max(int a, int b)
+{
+ return (a >= b) ? a : b;
+}
pb getpat_preorder(pb *b)
{
pb *p,x,w;
n = b->n;
- il = min((SBid(i) + 1) << logSB,n);
+ il = min((SBid(i) + 1) << logSB, n);
p = &b->B[i>>logD];
while (i<il) {
x = *p++;
}
}
r = min(j,ETW);
- rel -= 2*popcount(w)-r;
+ rel -= (popcount(w) << 1)-r;
x <<= r;
i += r;
j -= r;
return x;\r
}\r
\r
-static int selecttbl[8*256];\r
+int selecttbl[8*256];\r
static int selecttbl_init = 0;\r
static void prbin(unsigned int x)\r
{\r
int bp_darray_select(darray *da, int i,int f);
-static int bp_darray_rank(darray *da, int i)
+static inline int bp_darray_rank(darray *da, int i)
{
int r,j,i_rr, i_rrr;
+ int offset;
pb *p;
+ byte *buff;
i_rr = i >> logRR;
i_rrr = i >> logRRR;
r = da->rl[i>>logR] + da->rm[i_rr];
j = (i_rrr) & (RR/RRR-1);
+ offset = i_rr << (logRR-logRRR);
+ buff = &(da->rs[offset-1]);
while (j > 0) {
- r += da->rs[((i_rr)<<(logRR-logRRR))+j-1];
+ r += buff[j];
j--;
}
#ifdef HAS_NATIVE_POPCOUNT
static inline UNUSED unsigned int popcount(unsigned int n){
- asm ("popcnt %1, %0" : "=r" (n) : "0" (n));
- return n;
+ return __builtin_popcount(n);
}
static inline UNUSED unsigned int popcount8(unsigned int n) {