From fea3e5a8afa763201ada93cd27b975bb6f9916b5 Mon Sep 17 00:00:00 2001 From: powturbo Date: Thu, 11 Jun 2015 20:52:23 +0200 Subject: [PATCH] BitPack --- bitpack.c | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 74 insertions(+), 2 deletions(-) diff --git a/bitpack.c b/bitpack.c index c38f3dc..d122015 100644 --- a/bitpack.c +++ b/bitpack.c @@ -35,8 +35,9 @@ #define SRC1(__ip,__x) (*(__ip)) #include __FILE__ -unsigned char *bitpack32(unsigned *__restrict in, unsigned n, unsigned char *__restrict out, unsigned nb) { unsigned char *pout = out+PAD8(n*nb); BITPACK32(in, n, nb, out, 0); return pout; } -unsigned char *bitpack16(unsigned short *__restrict in, unsigned n, unsigned char *__restrict out, unsigned nb) { unsigned char *pout = out+PAD8(n*nb); BITPACK32(in, n, nb, out, 0); return pout; } +unsigned char *bitpack32(unsigned *__restrict in, unsigned n, unsigned char *__restrict out, unsigned nb) { unsigned char *pout = out+PAD8(n*nb); BITPACK32(in, n, nb, out, 0); return pout; } +unsigned char *bitpack16(unsigned short *__restrict in, unsigned n, unsigned char *__restrict out, unsigned nb) { unsigned char *pout = out+PAD8(n*nb); BITPACK32(in, n, nb, out, 0); return pout; } +unsigned char *bitpack64(uint64_t *__restrict in, unsigned n, unsigned char *__restrict out, unsigned nb) { unsigned char *pout = out+PAD8(n*nb); BITPACK64(in, n, nb, out, 0); return pout; } #undef IPPB #undef SRC #undef SRC1 @@ -100,6 +101,77 @@ unsigned char *bitd1pack32(unsigned *__restrict in, unsigned n, unsigned c case 32:do BITPACK64_32(__ip, __op, __parm) while(__ip < _ipe);\ }\ } + +#define BITPACK64(__ip, __n, __nbits, __op, __parm) { typeof(__ip[0]) *_ipe=(__ip)+(__n);/*((__n+31)&0xffffffe0u)*/;\ + switch(__nbits) {\ + case 0:__ip = _ipe; break;\ + case 1:do BITPACK64_1( __ip, __op, __parm) while(__ip < _ipe); break;\ + case 2:do BITPACK64_2( __ip, __op, __parm) while(__ip < _ipe); break;\ + case 3:do BITPACK64_3( __ip, __op, __parm) while(__ip < _ipe); break;\ + case 4:do BITPACK64_4( __ip, __op, __parm) while(__ip < _ipe); break;\ + case 5:do BITPACK64_5( __ip, __op, __parm) while(__ip < _ipe); break;\ + case 6:do BITPACK64_6( __ip, __op, __parm) while(__ip < _ipe); break;\ + case 7:do BITPACK64_7( __ip, __op, __parm) while(__ip < _ipe); break;\ + case 8:do BITPACK64_8( __ip, __op, __parm) while(__ip < _ipe); break;\ + case 9:do BITPACK64_9( __ip, __op, __parm) while(__ip < _ipe); break;\ + case 10:do BITPACK64_10(__ip, __op, __parm) while(__ip < _ipe); break;\ + case 11:do BITPACK64_11(__ip, __op, __parm) while(__ip < _ipe); break;\ + case 12:do BITPACK64_12(__ip, __op, __parm) while(__ip < _ipe); break;\ + case 13:do BITPACK64_13(__ip, __op, __parm) while(__ip < _ipe); break;\ + case 14:do BITPACK64_14(__ip, __op, __parm) while(__ip < _ipe); break;\ + case 15:do BITPACK64_15(__ip, __op, __parm) while(__ip < _ipe); break;\ + case 16:do BITPACK64_16(__ip, __op, __parm) while(__ip < _ipe); break;\ + case 17:do BITPACK64_17(__ip, __op, __parm) while(__ip < _ipe); break;\ + case 18:do BITPACK64_18(__ip, __op, __parm) while(__ip < _ipe); break;\ + case 19:do BITPACK64_19(__ip, __op, __parm) while(__ip < _ipe); break;\ + case 20:do BITPACK64_20(__ip, __op, __parm) while(__ip < _ipe); break;\ + case 21:do BITPACK64_21(__ip, __op, __parm) while(__ip < _ipe); break;\ + case 22:do BITPACK64_22(__ip, __op, __parm) while(__ip < _ipe); break;\ + case 23:do BITPACK64_23(__ip, __op, __parm) while(__ip < _ipe); break;\ + case 24:do BITPACK64_24(__ip, __op, __parm) while(__ip < _ipe); break;\ + case 25:do BITPACK64_25(__ip, __op, __parm) while(__ip < _ipe); break;\ + case 26:do BITPACK64_26(__ip, __op, __parm) while(__ip < _ipe); break;\ + case 27:do BITPACK64_27(__ip, __op, __parm) while(__ip < _ipe); break;\ + case 28:do BITPACK64_28(__ip, __op, __parm) while(__ip < _ipe); break;\ + case 29:do BITPACK64_29(__ip, __op, __parm) while(__ip < _ipe); break;\ + case 30:do BITPACK64_30(__ip, __op, __parm) while(__ip < _ipe); break;\ + case 31:do BITPACK64_31(__ip, __op, __parm) while(__ip < _ipe); break;\ + case 32:do BITPACK64_32(__ip, __op, __parm) while(__ip < _ipe); break;\ + case 33:do BITPACK64_33(__ip, __op, __parm) while(__ip < _ipe); break;\ + case 34:do BITPACK64_34(__ip, __op, __parm) while(__ip < _ipe); break;\ + case 35:do BITPACK64_35(__ip, __op, __parm) while(__ip < _ipe); break;\ + case 36:do BITPACK64_36(__ip, __op, __parm) while(__ip < _ipe); break;\ + case 37:do BITPACK64_37(__ip, __op, __parm) while(__ip < _ipe); break;\ + case 38:do BITPACK64_38(__ip, __op, __parm) while(__ip < _ipe); break;\ + case 39:do BITPACK64_39(__ip, __op, __parm) while(__ip < _ipe); break;\ + case 40:do BITPACK64_40(__ip, __op, __parm) while(__ip < _ipe); break;\ + case 41:do BITPACK64_41(__ip, __op, __parm) while(__ip < _ipe); break;\ + case 42:do BITPACK64_42(__ip, __op, __parm) while(__ip < _ipe); break;\ + case 43:do BITPACK64_43(__ip, __op, __parm) while(__ip < _ipe); break;\ + case 44:do BITPACK64_44(__ip, __op, __parm) while(__ip < _ipe); break;\ + case 45:do BITPACK64_45(__ip, __op, __parm) while(__ip < _ipe); break;\ + case 46:do BITPACK64_46(__ip, __op, __parm) while(__ip < _ipe); break;\ + case 47:do BITPACK64_47(__ip, __op, __parm) while(__ip < _ipe); break;\ + case 48:do BITPACK64_48(__ip, __op, __parm) while(__ip < _ipe); break;\ + case 49:do BITPACK64_49(__ip, __op, __parm) while(__ip < _ipe); break;\ + case 50:do BITPACK64_50(__ip, __op, __parm) while(__ip < _ipe); break;\ + case 51:do BITPACK64_51(__ip, __op, __parm) while(__ip < _ipe); break;\ + case 52:do BITPACK64_52(__ip, __op, __parm) while(__ip < _ipe); break;\ + case 53:do BITPACK64_53(__ip, __op, __parm) while(__ip < _ipe); break;\ + case 54:do BITPACK64_54(__ip, __op, __parm) while(__ip < _ipe); break;\ + case 55:do BITPACK64_55(__ip, __op, __parm) while(__ip < _ipe); break;\ + case 56:do BITPACK64_56(__ip, __op, __parm) while(__ip < _ipe); break;\ + case 57:do BITPACK64_57(__ip, __op, __parm) while(__ip < _ipe); break;\ + case 58:do BITPACK64_58(__ip, __op, __parm) while(__ip < _ipe); break;\ + case 59:do BITPACK64_59(__ip, __op, __parm) while(__ip < _ipe); break;\ + case 60:do BITPACK64_60(__ip, __op, __parm) while(__ip < _ipe); break;\ + case 61:do BITPACK64_61(__ip, __op, __parm) while(__ip < _ipe); break;\ + case 62:do BITPACK64_62(__ip, __op, __parm) while(__ip < _ipe); break;\ + case 63:do BITPACK64_63(__ip, __op, __parm) while(__ip < _ipe); break;\ + case 64:do BITPACK64_64(__ip, __op, __parm) while(__ip < _ipe);\ + }\ +} + #else #include "bitpack32_.h" // Not included in the github package #define BITPACK32(__ip, __n, __nbits, __op, __parm) do { typeof(__ip[0]) *_ipe=(__ip)+(__n);/*((__n+31)&0xffffffe0u)*/;\