X-Git-Url: http://git.nguyen.vg/gitweb/?p=SXSI%2Flibbp.git;a=blobdiff_plain;f=bp-darray.c;fp=bp-darray.c;h=866ce6f72f41c531e8b5dd176d654abe0f316a1f;hp=800ebb14a0e5cc0e3d2951ff3ed2be51440c5e01;hb=5382b5fde5add82ebd492e97a458a824503fbd8d;hpb=35d38c5681c54a22125452a2e43dc4b8305c588f diff --git a/bp-darray.c b/bp-darray.c index 800ebb1..866ce6f 100644 --- a/bp-darray.c +++ b/bp-darray.c @@ -58,11 +58,30 @@ static int getpattern(pb *B, int i, int k, pb pat) static 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); + }; + */ }