This commit is contained in:
powturbo
2015-05-28 16:34:15 +02:00
parent 1fd470a09e
commit afbf45675d

View File

@ -1,7 +1,7 @@
/** /**
Copyright (C) powturbo 2013-2014 Copyright (C) powturbo 2013-2015
GPL v2 License GPL v2 License
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or the Free Software Foundation; either version 2 of the License, or
@ -16,50 +16,138 @@
with this program; if not, write to the Free Software Foundation, Inc., with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- email : powturbo [AT] gmail.com
- github : https://github.com/powturbo
- homepage : https://sites.google.com/site/powturbo/ - homepage : https://sites.google.com/site/powturbo/
- github : https://github.com/powturbo
- twitter : https://twitter.com/powturbo - twitter : https://twitter.com/powturbo
- email : powturbo [_AT_] gmail [_DOT_] com
bitunpack_.h - "Integer Compression" Binary Packing
**/ **/
// bitunpack_.h - "Integer Compression" Bit Packing
#ifndef BPI
#include "conf.h" #include "conf.h"
#include "bitunpack.h" #include "bitunpack.h"
#define PAD8(__x) (((__x)+7)/8) #define PAD8(__x) (((__x)+7)/8)
//----------------------------------------------------------------------------------------------------------------- //-----------------------------------------------------------------------------------------------------------------
#define BPI(__w, __op, __parm) __w #define BPI(__w, __op, __parm) __w
#include "bitunpack_.h" #include __FILE__
unsigned char *bitunpack32( unsigned char *__restrict in, unsigned n, unsigned b, unsigned *__restrict out) { unsigned char *ip = in+PAD8(n*b); BITUNPACK32(in, n, b, out, 0); return ip; } unsigned char *bitunpack32( unsigned char *__restrict in, unsigned n, unsigned *__restrict out , unsigned b) { unsigned char *ip = in+PAD8(n*b); BITUNPACK32(in, n, b, out, 0); return ip; }
unsigned char *bitunpack16( unsigned char *__restrict in, unsigned n, unsigned b, unsigned short *__restrict out) { unsigned char *ip = in+PAD8(n*b); BITUNPACK32(in, n, b, out, 0); return ip; } unsigned char *bitunpack16( unsigned char *__restrict in, unsigned n, unsigned short *__restrict out , unsigned b) { unsigned char *ip = in+PAD8(n*b); BITUNPACK32(in, n, b, out, 0); return ip; }
#undef BPI #undef BPI
//----------------------------------------------------------------------------------------------------------------- //-----------------------------------------------------------------------------------------------------------------
#define BPI(__w, __op, __parm) (__parm += (__w) + 1) #define BPI(__w, __op, __parm) (__parm += (__w) + 1)
#include "bitunpack_.h" #include __FILE__
unsigned char *bitdunpack32( unsigned char *__restrict in, unsigned n, unsigned b, int start, unsigned *__restrict out) { unsigned char *ip = in+PAD8(n*b); BITUNPACK32(in, n, b, out, start); return ip; } unsigned char *bitd1unpack32(unsigned char *__restrict in, unsigned n, unsigned *__restrict out, unsigned start, unsigned b) { unsigned char *ip = in+PAD8(n*b); BITUNPACK32(in, n, b, out, start); return ip; }
unsigned char *bitdunpack16( unsigned char *__restrict in, unsigned n, unsigned b, int start, unsigned short *__restrict out) { unsigned char *ip = in+PAD8(n*b); BITUNPACK32(in, n, b, out, start); return ip; } unsigned char *bitd1unpack16(unsigned char *__restrict in, unsigned n, unsigned short *__restrict out, unsigned start, unsigned b) { unsigned char *ip = in+PAD8(n*b); BITUNPACK32(in, n, b, out, start); return ip; }
#undef BPI #undef BPI
//------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------
#define BPI(__w, __op, __parm) (__parm += (__w)) #define BPI(__w, __op, __parm) (__parm += (__w))
#include "bitunpack_.h" #include __FILE__
unsigned char *bitd0unpack32( unsigned char *__restrict in, unsigned n, unsigned b, int start, unsigned *__restrict out) { unsigned char *ip = in+PAD8(n*b); BITUNPACK32(in, n, b, out, start); return ip; } unsigned char *bitdunpack32( unsigned char *__restrict in, unsigned n, unsigned *__restrict out, unsigned start, unsigned b) { unsigned char *ip = in+PAD8(n*b); BITUNPACK32(in, n, b, out, start); return ip; }
unsigned char *bitd0unpack16( unsigned char *__restrict in, unsigned n, unsigned b, int start, unsigned short *__restrict out) { unsigned char *ip = in+PAD8(n*b); BITUNPACK32(in, n, b, out, start); return ip; } unsigned char *bitdunpack16( unsigned char *__restrict in, unsigned n, unsigned short *__restrict out, unsigned start, unsigned b) { unsigned char *ip = in+PAD8(n*b); BITUNPACK32(in, n, b, out, start); return ip; }
#undef BPI #undef BPI
//------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------
#define BPI(__w, __op, __parm) (__parm + (__op+1-_op))//#define BPI(__w, __op, __parm) (__parm + (__w) + 1) #define BPI(__w, __op, __parm) (__parm + (__op+1-_op))//#define BPI(__w, __op, __parm) (__parm + (__w) + 1)
#include "bitunpack_.h" #include __FILE__
unsigned char *bitfunpack32( unsigned char *__restrict in, unsigned n, unsigned b, int start, unsigned *__restrict out) { unsigned char *ip = in+PAD8(n*b); BITUNPACK32(in, n, b, out, start); return ip; } unsigned char *bitf1unpack32(unsigned char *__restrict in, unsigned n, unsigned *__restrict out, unsigned start, unsigned b) { unsigned char *ip = in+PAD8(n*b); BITUNPACK32(in, n, b, out, start); return ip; }
unsigned char *bitfunpack16( unsigned char *__restrict in, unsigned n, unsigned b, int start, unsigned short *__restrict out) { unsigned char *ip = in+PAD8(n*b); BITUNPACK32(in, n, b, out, start); return ip; } unsigned char *bitf1unpack16(unsigned char *__restrict in, unsigned n, unsigned short *__restrict out, unsigned start, unsigned b) { unsigned char *ip = in+PAD8(n*b); BITUNPACK32(in, n, b, out, start); return ip; }
#undef BPI #undef BPI
//------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------
#define BPI(__w, __op, __parm) (__parm + (__op-_op)) #define BPI(__w, __op, __parm) (__parm + (__op-_op))
#include "bitunpack_.h" #include __FILE__
unsigned char *bitf0unpack32( unsigned char *__restrict in, unsigned n, unsigned b, int start, unsigned *__restrict out) { unsigned char *ip = in+PAD8(n*b); BITUNPACK32(in, n, b, out, start); return ip; } unsigned char *bitfunpack32( unsigned char *__restrict in, unsigned n, unsigned *__restrict out, unsigned start, unsigned b) { unsigned char *ip = in+PAD8(n*b); BITUNPACK32(in, n, b, out, start); return ip; }
unsigned char *bitf0unpack16( unsigned char *__restrict in, unsigned n, unsigned b, int start, unsigned short *__restrict out) { unsigned char *ip = in+PAD8(n*b); BITUNPACK32(in, n, b, out, start); return ip; } unsigned char *bitfunpack16( unsigned char *__restrict in, unsigned n, unsigned short *__restrict out, unsigned start, unsigned b) { unsigned char *ip = in+PAD8(n*b); BITUNPACK32(in, n, b, out, start); return ip; }
#undef BPI #undef BPI
#else
#include <stdint.h>
#define DST( __op,__x, __w, __parm) *__op++ = BPI(__w, __op, __parm) //__op[__x] = BPI(__w,__parm) //
#define DSTI(__op) //__op += 32 //
#define USE_BITUNPACK 64
#if USE_BITUNPACK == 64
#include "bitunpack64_.h"
#define BITUNPACK32(__ip, __n, __nbits, __op, __parm) { typeof(__op[0]) *__ope = __op + __n,*_op=__op;\
switch(__nbits) {\
case 0: do BITUNPACK64_0( __ip, __op, __parm) while(__op<__ope); break;\
case 1: do BITUNPACK64_1( __ip, __op, __parm) while(__op<__ope); break;\
case 2: do BITUNPACK64_2( __ip, __op, __parm) while(__op<__ope); break;\
case 3: do BITUNPACK64_3( __ip, __op, __parm) while(__op<__ope); break;\
case 4: do BITUNPACK64_4( __ip, __op, __parm) while(__op<__ope); break;\
case 5: do BITUNPACK64_5( __ip, __op, __parm) while(__op<__ope); break;\
case 6: do BITUNPACK64_6( __ip, __op, __parm) while(__op<__ope); break;\
case 7: do BITUNPACK64_7( __ip, __op, __parm) while(__op<__ope); break;\
case 8: do BITUNPACK64_8( __ip, __op, __parm) while(__op<__ope); break;\
case 9: do BITUNPACK64_9( __ip, __op, __parm) while(__op<__ope); break;\
case 10: do BITUNPACK64_10(__ip, __op, __parm) while(__op<__ope); break;\
case 11: do BITUNPACK64_11(__ip, __op, __parm) while(__op<__ope); break;\
case 12: do BITUNPACK64_12(__ip, __op, __parm) while(__op<__ope); break;\
case 13: do BITUNPACK64_13(__ip, __op, __parm) while(__op<__ope); break;\
case 14: do BITUNPACK64_14(__ip, __op, __parm) while(__op<__ope); break;\
case 15: do BITUNPACK64_15(__ip, __op, __parm) while(__op<__ope); break;\
case 16: do BITUNPACK64_16(__ip, __op, __parm) while(__op<__ope); break;\
case 17: do BITUNPACK64_17(__ip, __op, __parm) while(__op<__ope); break;\
case 18: do BITUNPACK64_18(__ip, __op, __parm) while(__op<__ope); break;\
case 19: do BITUNPACK64_19(__ip, __op, __parm) while(__op<__ope); break;\
case 20: do BITUNPACK64_20(__ip, __op, __parm) while(__op<__ope); break;\
case 21: do BITUNPACK64_21(__ip, __op, __parm) while(__op<__ope); break;\
case 22: do BITUNPACK64_22(__ip, __op, __parm) while(__op<__ope); break;\
case 23: do BITUNPACK64_23(__ip, __op, __parm) while(__op<__ope); break;\
case 24: do BITUNPACK64_24(__ip, __op, __parm) while(__op<__ope); break;\
case 25: do BITUNPACK64_25(__ip, __op, __parm) while(__op<__ope); break;\
case 26: do BITUNPACK64_26(__ip, __op, __parm) while(__op<__ope); break;\
case 27: do BITUNPACK64_27(__ip, __op, __parm) while(__op<__ope); break;\
case 28: do BITUNPACK64_28(__ip, __op, __parm) while(__op<__ope); break;\
case 29: do BITUNPACK64_29(__ip, __op, __parm) while(__op<__ope); break;\
case 30: do BITUNPACK64_30(__ip, __op, __parm) while(__op<__ope); break;\
case 31: do BITUNPACK64_31(__ip, __op, __parm) while(__op<__ope); break;\
case 32: do BITUNPACK64_32(__ip, __op, __parm) while(__op<__ope); break;\
}\
}
#elif USE_BITUNPACK == 32
#include "bitunpack32_.h" // Not included in the github package
#define BITUNPACK32(__ip, __n, __nbits, __op, __parm) { typeof(__op[0]) *__ope = __op + __n;\
switch(__nbits) {\
case 0: do BITUNPACK32_0( __ip, __op, __parm) while(__op<__ope); break;\
case 1: do BITUNPACK32_1( __ip, __op, __parm) while(__op<__ope); break;\
case 2: do BITUNPACK32_2( __ip, __op, __parm) while(__op<__ope); break;\
case 3: do BITUNPACK32_3( __ip, __op, __parm) while(__op<__ope); break;\
case 4: do BITUNPACK32_4( __ip, __op, __parm) while(__op<__ope); break;\
case 5: do BITUNPACK32_5( __ip, __op, __parm) while(__op<__ope); break;\
case 6: do BITUNPACK32_6( __ip, __op, __parm) while(__op<__ope); break;\
case 7: do BITUNPACK32_7( __ip, __op, __parm) while(__op<__ope); break;\
case 8: do BITUNPACK32_8( __ip, __op, __parm) while(__op<__ope); break;\
case 9: do BITUNPACK32_9( __ip, __op, __parm) while(__op<__ope); break;\
case 10: do BITUNPACK32_10(__ip, __op, __parm) while(__op<__ope); break;\
case 11: do BITUNPACK32_11(__ip, __op, __parm) while(__op<__ope); break;\
case 12: do BITUNPACK32_12(__ip, __op, __parm) while(__op<__ope); break;\
case 13: do BITUNPACK32_13(__ip, __op, __parm) while(__op<__ope); break;\
case 14: do BITUNPACK32_14(__ip, __op, __parm) while(__op<__ope); break;\
case 15: do BITUNPACK32_15(__ip, __op, __parm) while(__op<__ope); break;\
case 16: do BITUNPACK32_16(__ip, __op, __parm) while(__op<__ope); break;\
case 17: do BITUNPACK32_17(__ip, __op, __parm) while(__op<__ope); break;\
case 18: do BITUNPACK32_18(__ip, __op, __parm) while(__op<__ope); break;\
case 19: do BITUNPACK32_19(__ip, __op, __parm) while(__op<__ope); break;\
case 20: do BITUNPACK32_20(__ip, __op, __parm) while(__op<__ope); break;\
case 21: do BITUNPACK32_21(__ip, __op, __parm) while(__op<__ope); break;\
case 22: do BITUNPACK32_22(__ip, __op, __parm) while(__op<__ope); break;\
case 23: do BITUNPACK32_23(__ip, __op, __parm) while(__op<__ope); break;\
case 24: do BITUNPACK32_24(__ip, __op, __parm) while(__op<__ope); break;\
case 25: do BITUNPACK32_25(__ip, __op, __parm) while(__op<__ope); break;\
case 26: do BITUNPACK32_26(__ip, __op, __parm) while(__op<__ope); break;\
case 27: do BITUNPACK32_27(__ip, __op, __parm) while(__op<__ope); break;\
case 28: do BITUNPACK32_28(__ip, __op, __parm) while(__op<__ope); break;\
case 29: do BITUNPACK32_29(__ip, __op, __parm) while(__op<__ope); break;\
case 30: do BITUNPACK32_30(__ip, __op, __parm) while(__op<__ope); break;\
case 31: do BITUNPACK32_31(__ip, __op, __parm) while(__op<__ope); break;\
case 32: do BITUNPACK32_32(__ip, __op, __parm) while(__op<__ope); break;\
}\
}
#endif
#endif