Files
TurboPFor-Integer-Compression/ext/beplug_.h
2017-10-14 16:24:39 +02:00

144 lines
4.5 KiB
C

#ifndef __SSSE3__
#define C_VINTG8IU 0
#define C_MASKEDVBYTE 0
#endif
#if C_FASTPFOR
#include "FastPFor/headers/variablebyte.h"
#include "FastPFor/headers/simple16.h"
#include "FastPFor/headers/simple8b_rle.h"
#include "FastPFor/headers/fastpfor.h"
#include "FastPFor/headers/simdfastpfor.h"
#include "FastPFor/headers/optpfor.h"
#include "FastPFor/headers/simdoptpfor.h"
#ifndef min
#define min(x,y) (((x)<(y)) ? (x) : (y))
#endif
#define _mm_store_si128 _mm_storeu_si128
#define _mm_load_si128 _mm_loadu_si128
#include "FastPFor/headers/simdgroupsimple.h"
#undef min
#endif
#if C_SIMPLE8B
#include "simple8b.h" // optimized simple-8b by powturbo
#endif
#if C_C_BLOSC
#include "c-blosc/blosc/shuffle.h"
#include "c-blosc/blosc/blosc.h"
#endif
#if C_LIBFOR
#include "libfor/for.h"
unsigned char *for_selectx( unsigned char *__restrict in, unsigned n, unsigned *__restrict out) { unsigned b = in[4], i; for(i = 0; i < n; i++) out[i] = for_select(in, i); return in + 5 + for_compressed_size_bits(n, b); }
#endif
#if C_LZ4
#include "lz4/lib/lz4.h"
#include "lz4/lib/lz4hc.h"
#endif
// #if C_SIMDCOMPLIB
//#include "ext/SIMDCompressionAndIntersection/include/bitpacking.h"
// #endif
#if C_POLYCOM
#include "vas16c.h" // Simple 16
#include "vas16d.h"
#include "rc.h"
#include "polycom/optpfd.h"
#include "polycom/polyvbyte.h"
#endif
#if C_QMX
#include "JASSv2/source/compress_integer_qmx_improved.h"
#endif
#if C_ZLIB
#include <zlib.h>
#endif
#ifdef __cplusplus
extern "C" {
#endif
#if C_STREAMVBYTE
#include "streamvbyte/include/streamvbyte.h"
#include "streamvbyte/include/streamvbytedelta.h"
#undef VARINTDECODE_H_
#endif
#if C_MASKEDVBYTE
#include "MaskedVByte/include/varintencode.h"
#undef VARINTDECODE_H_
#include "MaskedVByte/include/varintdecode.h"
#endif
#if C_VARINTG8IU
#include "varintg8iu.h" // SIMD Varint G8IU
#endif
#if C_LITTLEPACK
#include "LittleIntPacker/include/bitpacking.h"
#include "LittleIntPacker/include/util.h"
#endif
#include "simdcomp/include/simdbitpacking.h"
#ifdef __cplusplus
}
#endif
#if C_SIMDCOMP
#undef SIMDBITPACKING_H_
#include "vabyte.h" // Standard Variable Byte
#include "simdcomp/include/simdcomp.h"
unsigned char *simdpackwithoutmaskd1n(uint32_t *in, uint32_t n, uint32_t *out, uint32_t start, uint32_t b) {//checkifdivisibleby(n, 128); const uint32_t * const initout(out); //while(needPaddingTo128Bits(out)) *out++ = 123456;
uint32_t *ip;
for(ip = in; ip != in+(n&~(128-1)); ip += 128,out += 4 * b)
simdpackwithoutmaskd1(start, ip, (__m128i *)out, b);
return (unsigned char *)out;
}
unsigned char *simdunpackd1n(uint32_t *in, uint32_t n, uint32_t *out, uint32_t start, uint32_t b) {
uint32_t k, *op;
for(op = out; op != out+(n&~(128-1)); op += 128,in += 4 * b)
simdunpackd1(start, (__m128i *)in, out, b);
return (unsigned char *)in;
}
unsigned char *simdfor_selectx( unsigned char *__restrict in, unsigned n, unsigned *__restrict out, unsigned start, unsigned b) {
unsigned i;
for(i=0; i < n;i++) out[i] = simdselectFOR(start, (const __m128i *)in, b, i); return in + simdpackFOR_compressedbytes(n, b);
}
#ifdef __AVX2__
unsigned char *avxpackwithoutmaskn(uint32_t *in, uint32_t n, uint32_t *out, uint32_t b) {
uint32_t *ip;
for(ip = in; ip != in+(n&~(256-1)); ip += 256,out += 8 * b)
avxpackwithoutmask(ip, (__m256i *)out, b);
return (unsigned char *)simdpack_shortlength(ip, n & (256-1), (__m128i *)out, b);
}
unsigned char *avxunpackn(uint32_t *in, uint32_t n, uint32_t *out, uint32_t b) {
uint32_t k, *op;
for(op = out; op != out+(n&~(256-1)); op += 256,in += 8 * b)
avxunpack((__m256i *)in, op, b);
return (unsigned char *)simdunpack_shortlength((__m128i *)in, n & (256-1), op, b);
}
#endif
#endif
#if C_BITSHUFFLE
#define __STDC_VERSION__ 199901L
#include "bitshuffle/src/bitshuffle.h"
#endif
#if C_C_BLOSC
#define BITSHUFFLE(in,n,out,esize) bitshuffle( esize, (n)/esize, (unsigned char *)in, out, NULL) //crash
#define BITUNSHUFFLE(in,n,out,esize) bitunshuffle( esize, (n)/esize, (unsigned char *)in, (unsigned char *)out, NULL)
#else
#define BITSHUFFLE(in,n,out,esize) bshuf_bitshuffle( in, out, (n)/esize, esize, 0); memcpy((char *)out+((n)&(~(8*esize-1))),(char *)in+((n)&(~(8*esize-1))),(n)&(8*esize-1))
#define BITUNSHUFFLE(in,n,out,esize) bshuf_bitunshuffle(in, out, (n)/esize, esize, 0); memcpy((char *)out+((n)&(~(8*esize-1))),(char *)in+((n)&(~(8*esize-1))),(n)&(8*esize-1))
#endif