X-Git-Url: http://git.nguyen.vg/gitweb/?p=SXSI%2Flibbp.git;a=blobdiff_plain;f=bp-darray.c;h=eecaccbe7a9ab8431c266090150f2240c3356e99;hp=800ebb14a0e5cc0e3d2951ff3ed2be51440c5e01;hb=HEAD;hpb=9614bef67d59eaa2413e2b06e5587c6caec57840 diff --git a/bp-darray.c b/bp-darray.c index 800ebb1..eecaccb 100644 --- a/bp-darray.c +++ b/bp-darray.c @@ -56,13 +56,32 @@ static int getpattern(pb *B, int i, int k, pb pat) return x; } -static int selecttbl[8*256]; +int selecttbl[8*256]; static int selecttbl_init = 0; +static void prbin(unsigned int x) +{ + int i; + // for(i = 31; i >= 0; i--){ + for (i = 0 ; i < 32; i ++) { + fprintf(stderr,"%.1u", (x >> i)&1); + if (i % 4 == 3) + fprintf(stderr, " "); + } + +} +int clz(unsigned int x) +{ + if (x == 0) + return -1; + else + __builtin_clz(x); +} static void make_selecttbl(void) { int i,x,r; pb buf[1]; + unsigned int mask; if (selecttbl_init) return; selecttbl_init = 1; @@ -73,11 +92,21 @@ static void make_selecttbl(void) r = 0; for (i=0; i<8; i++) { if (bp_getbit(buf,i)) { + // fprintf(stderr, "Init: setting %i to %i (r= %i, x = %i)\n", (r<<8)+x, i, r, x); selecttbl[(r<<8)+x] = i; r++; } } } + /* + fprintf(stderr, "Select table:\n"); + for (i = 0; i < 8 * 256; i++){ + mask = i / 256 + 1; + x = __builtin_clz((i + (i << 8))); + prbin(i); + fprintf(stderr, " (%.4i): %08i, %08i\n", i, selecttbl[i], x); + }; + */ }