From d9d1656f063d1ce986e11d6b94318746951d3bc8 Mon Sep 17 00:00:00 2001 From: x Date: Sat, 6 Jan 2018 21:15:51 +0100 Subject: [PATCH] BitUtil: Delta, ZigZag, NumBits, Floating Point,... --- bitutil.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/bitutil.c b/bitutil.c index a4d6991..d06bac5 100644 --- a/bitutil.c +++ b/bitutil.c @@ -221,8 +221,8 @@ unsigned bitf32( uint32_t *in, unsigned n, uint32_t start) { return n?bsr32(in[ unsigned bitf132( uint32_t *in, unsigned n, uint32_t start) { return n?bsr32(in[n-1] - start - n):0; } //------------------- Zigzag --------------------------- -#define ZE(i,_it_) x = (_it_)_p[i]-(_it_)start; x = (x << 1) ^ (x >> (sizeof(x)*8-1)); start = _p[i] -#define BITZENC(_ut_, _it_, _p_,_n_, _act_) { _ut_ *_p;\ +#define ZE(i,_it_) _z = (_it_)_p[i]-(_it_)start; x = (_z << 1) ^ (_z >> (sizeof(_z)*8-1)); start = _p[i] +#define BITZENC(_ut_, _it_, _p_,_n_, _act_) { _ut_ *_p; _it_ _z;\ for(_p = _p_; _p != _p_+(_n_&~(4-1)); _p += 4) { ZE(0,_it_);_act_; ZE(1,_it_);_act_; ZE(2,_it_);_act_; ZE(3,_it_);_act_; }\ for(;_p != _p_+_n_; _p++) { ZE(0,_it_); _act_;}\ } @@ -252,14 +252,14 @@ unsigned bitz32(unsigned *in, unsigned n, unsigned start) { } #else uint32_t b = 0, x; - BITZENC(uint32_t, int32_t, in, n, start, b |= x); + BITZENC(uint32_t, int32_t, in, n, b |= x); #endif return bsr32(b); } -unsigned bitzenc8( uint8_t *in, unsigned n, uint8_t *out, uint8_t start, uint8_t mindelta) { uint8_t b = 0,*op = out,x; BITZENC(uint8_t, int8_t, in, n, b |= x; *op++ = x); return bsr8(b); } -unsigned bitzenc16(uint16_t *in, unsigned n, uint16_t *out, uint16_t start, uint16_t mindelta) { uint16_t b = 0,*op = out,x; BITZENC(uint16_t, int16_t,in, n, b |= x; *op++ = x); return bsr16(b); } -unsigned bitzenc64(uint64_t *in, unsigned n, uint64_t *out, uint64_t start, uint64_t mindelta) { uint64_t b = 0,*op = out,x; BITZENC(uint64_t, int64_t,in, n, b |= x; *op++ = x); return bsr32(b); } +unsigned bitzenc8( uint8_t *in, unsigned n, uint8_t *out, uint8_t start, uint8_t mindelta) { uint8_t b = 0,*op = out;uint8_t x; BITZENC(uint8_t, int8_t, in, n, b |= x; *op++ = x); return bsr8(b); } +unsigned bitzenc16(uint16_t *in, unsigned n, uint16_t *out, uint16_t start, uint16_t mindelta) { uint16_t b = 0,*op = out;uint16_t x; BITZENC(uint16_t, int16_t,in, n, b |= x; *op++ = x); return bsr16(b); } +unsigned bitzenc64(uint64_t *in, unsigned n, uint64_t *out, uint64_t start, uint64_t mindelta) { uint64_t b = 0,*op = out;uint64_t x; BITZENC(uint64_t, int64_t,in, n, b |= x; *op++ = x); return bsr32(b); } unsigned bitzenc32(unsigned *in, unsigned n, unsigned *out, unsigned start, uint32_t mindelta) { #ifdef __SSE2__ unsigned *ip,b,*op = out;