diff --git a/lib/bitpack_.h b/lib/bitpack_.h index aa262c2..6480df8 100644 --- a/lib/bitpack_.h +++ b/lib/bitpack_.h @@ -2258,17 +2258,22 @@ BITBLK64_64(ip, 31, op, parm); IPI(ip); op += 64*4/sizeof(op[0]);\ } +#define BP(_b_,_usize_) unsigned char *out_=out+PAD8(n*_b_),*op, bout[PAD8(64*_b_)]; T3(uint,_usize_,_t) bin[64],*ip,*in_=in+n, v,x; \ + do { ip = in+32; op = out+PAD8(32*_b_); if(ip > in_) { memcpy(bin, in, (in_-in)*(_usize_/8)); in = bin; out = bout; } \ + T2(BITPACK64_,_b_)(in, out, start); in = ip; out = op; PREFETCH(in+384,0);\ + } while(inin_) { out -= PAD8(32*_b_); memcpy(out,bout,PAD8((in_-(in-32))*_b_)); } return out_ + #ifndef DELTA #define USIZE 8 -unsigned char *T2(_BITPACK_,8_0)( uint8_t *__restrict in, unsigned n, const unsigned char *__restrict out ) { return out; } -unsigned char *T2(_BITPACK_,8_1)(uint8_t *__restrict in, unsigned n, const unsigned char *__restrict out ) { unsigned char *out_=out+PAD8(n*1); uint8_t v,x;do { BITPACK64_1( in, out, start); PREFETCH(in+512,0); } while(out