#include "bitshuffle_core.h"
#include "bitshuffle_internals.h"
#include <stdio.h>
#include <string.h>
Defines | |
#define | CHECK_MULT_EIGHT(n) if (n % 8) return -80; |
#define | MAX(X, Y) ((X) > (Y) ? (X) : (Y)) |
#define | TRANS_BIT_8X8(x, t) |
#define | TRANS_BIT_8X8_BE(x, t) |
#define | TRANS_ELEM_TYPE(in, out, lda, ldb, type_t) |
Functions | |
int | bshuf_using_SSE2 (void) |
int | bshuf_using_AVX2 (void) |
int64_t | bshuf_copy (const void *in, void *out, const size_t size, const size_t elem_size) |
int64_t | bshuf_trans_byte_elem_remainder (const void *in, void *out, const size_t size, const size_t elem_size, const size_t start) |
int64_t | bshuf_trans_byte_elem_scal (const void *in, void *out, const size_t size, const size_t elem_size) |
int64_t | bshuf_trans_bit_byte_remainder (const void *in, void *out, const size_t size, const size_t elem_size, const size_t start_byte) |
int64_t | bshuf_trans_bit_byte_scal (const void *in, void *out, const size_t size, const size_t elem_size) |
int64_t | bshuf_trans_elem (const void *in, void *out, const size_t lda, const size_t ldb, const size_t elem_size) |
int64_t | bshuf_trans_bitrow_eight (const void *in, void *out, const size_t size, const size_t elem_size) |
int64_t | bshuf_trans_bit_elem_scal (const void *in, void *out, const size_t size, const size_t elem_size) |
int64_t | bshuf_trans_byte_bitrow_scal (const void *in, void *out, const size_t size, const size_t elem_size) |
int64_t | bshuf_shuffle_bit_eightelem_scal (const void *in, void *out, const size_t size, const size_t elem_size) |
int64_t | bshuf_untrans_bit_elem_scal (const void *in, void *out, const size_t size, const size_t elem_size) |
int64_t | bshuf_untrans_bit_elem_SSE (const void *in, void *out, const size_t size, const size_t elem_size) |
int64_t | bshuf_trans_bit_elem_SSE (const void *in, void *out, const size_t size, const size_t elem_size) |
int64_t | bshuf_trans_byte_bitrow_SSE (const void *in, void *out, const size_t size, const size_t elem_size) |
int64_t | bshuf_trans_bit_byte_SSE (const void *in, void *out, const size_t size, const size_t elem_size) |
int64_t | bshuf_trans_byte_elem_SSE (const void *in, void *out, const size_t size, const size_t elem_size) |
int64_t | bshuf_trans_byte_elem_SSE_64 (const void *in, void *out, const size_t size) |
int64_t | bshuf_trans_byte_elem_SSE_32 (const void *in, void *out, const size_t size) |
int64_t | bshuf_trans_byte_elem_SSE_16 (const void *in, void *out, const size_t size) |
int64_t | bshuf_shuffle_bit_eightelem_SSE (const void *in, void *out, const size_t size, const size_t elem_size) |
int64_t | bshuf_trans_bit_byte_AVX (const void *in, void *out, const size_t size, const size_t elem_size) |
int64_t | bshuf_trans_bit_elem_AVX (const void *in, void *out, const size_t size, const size_t elem_size) |
int64_t | bshuf_trans_byte_bitrow_AVX (const void *in, void *out, const size_t size, const size_t elem_size) |
int64_t | bshuf_shuffle_bit_eightelem_AVX (const void *in, void *out, const size_t size, const size_t elem_size) |
int64_t | bshuf_untrans_bit_elem_AVX (const void *in, void *out, const size_t size, const size_t elem_size) |
int64_t | bshuf_trans_bit_elem (const void *in, void *out, const size_t size, const size_t elem_size) |
int64_t | bshuf_untrans_bit_elem (const void *in, void *out, const size_t size, const size_t elem_size) |
int64_t | bshuf_blocked_wrap_fun (bshufBlockFunDef fun, const void *in, void *out, const size_t size, const size_t elem_size, size_t block_size) |
int64_t | bshuf_bitshuffle_block (ioc_chain *C_ptr, const size_t size, const size_t elem_size) |
int64_t | bshuf_bitunshuffle_block (ioc_chain *C_ptr, const size_t size, const size_t elem_size) |
void | bshuf_write_uint64_BE (void *buf, uint64_t num) |
uint64_t | bshuf_read_uint64_BE (void *buf) |
void | bshuf_write_uint32_BE (void *buf, uint32_t num) |
uint32_t | bshuf_read_uint32_BE (const void *buf) |
size_t | bshuf_default_block_size (const size_t elem_size) |
int64_t | bshuf_bitshuffle (const void *in, void *out, const size_t size, const size_t elem_size, size_t block_size) |
int64_t | bshuf_bitunshuffle (const void *in, void *out, const size_t size, const size_t elem_size, size_t block_size) |
#define CHECK_MULT_EIGHT | ( | n | ) | if (n % 8) return -80; |
#define MAX | ( | X, | |||
Y | ) | ((X) > (Y) ? (X) : (Y)) |
Referenced by bshuf_default_block_size().
#define TRANS_BIT_8X8 | ( | x, | |||
t | ) |
{ \ t = (x ^ (x >> 7)) & 0x00AA00AA00AA00AALL; \ x = x ^ t ^ (t << 7); \ t = (x ^ (x >> 14)) & 0x0000CCCC0000CCCCLL; \ x = x ^ t ^ (t << 14); \ t = (x ^ (x >> 28)) & 0x00000000F0F0F0F0LL; \ x = x ^ t ^ (t << 28); \ }
Referenced by bshuf_shuffle_bit_eightelem_scal(), and bshuf_trans_bit_byte_remainder().
#define TRANS_BIT_8X8_BE | ( | x, | |||
t | ) |
{ \ t = (x ^ (x >> 9)) & 0x0055005500550055LL; \ x = x ^ t ^ (t << 9); \ t = (x ^ (x >> 18)) & 0x0000333300003333LL; \ x = x ^ t ^ (t << 18); \ t = (x ^ (x >> 36)) & 0x000000000F0F0F0FLL; \ x = x ^ t ^ (t << 36); \ }
Referenced by bshuf_shuffle_bit_eightelem_scal(), and bshuf_trans_bit_byte_remainder().
#define TRANS_ELEM_TYPE | ( | in, | |||
out, | |||||
lda, | |||||
ldb, | |||||
type_t | ) |
{ \ size_t ii, jj, kk; \ const type_t* in_type = (const type_t*) in; \ type_t* out_type = (type_t*) out; \ for(ii = 0; ii + 7 < lda; ii += 8) { \ for(jj = 0; jj < ldb; jj++) { \ for(kk = 0; kk < 8; kk++) { \ out_type[jj*lda + ii + kk] = \ in_type[ii*ldb + kk * ldb + jj]; \ } \ } \ } \ for(ii = lda - lda % 8; ii < lda; ii ++) { \ for(jj = 0; jj < ldb; jj++) { \ out_type[jj*lda + ii] = in_type[ii*ldb + jj]; \ } \ } \ }
int64_t bshuf_bitshuffle | ( | const void * | in, | |
void * | out, | |||
const size_t | size, | |||
const size_t | elem_size, | |||
size_t | block_size | |||
) |
References bshuf_bitshuffle_block(), and bshuf_blocked_wrap_fun().
Referenced by bshuf_h5_filter().
References bshuf_trans_bit_elem(), ioc_get_in(), ioc_get_out(), ioc_set_next_in(), and ioc_set_next_out().
Referenced by bshuf_bitshuffle().
int64_t bshuf_bitunshuffle | ( | const void * | in, | |
void * | out, | |||
const size_t | size, | |||
const size_t | elem_size, | |||
size_t | block_size | |||
) |
References bshuf_bitunshuffle_block(), and bshuf_blocked_wrap_fun().
Referenced by bshuf_h5_filter().
References bshuf_untrans_bit_elem(), ioc_get_in(), ioc_get_out(), ioc_set_next_in(), and ioc_set_next_out().
Referenced by bshuf_bitunshuffle().
int64_t bshuf_blocked_wrap_fun | ( | bshufBlockFunDef | fun, | |
const void * | in, | |||
void * | out, | |||
const size_t | size, | |||
const size_t | elem_size, | |||
size_t | block_size | |||
) |
References BSHUF_BLOCKED_MULT, bshuf_default_block_size(), ioc_destroy(), ioc_get_in(), ioc_get_out(), ioc_init(), ioc_set_next_in(), and ioc_set_next_out().
Referenced by bshuf_bitshuffle(), bshuf_bitunshuffle(), bshuf_compress_lz4(), and bshuf_decompress_lz4().
int64_t bshuf_copy | ( | const void * | in, | |
void * | out, | |||
const size_t | size, | |||
const size_t | elem_size | |||
) |
size_t bshuf_default_block_size | ( | const size_t | elem_size | ) |
References BSHUF_BLOCKED_MULT, BSHUF_MIN_RECOMMEND_BLOCK, BSHUF_TARGET_BLOCK_SIZE_B, and MAX.
Referenced by bshuf_blocked_wrap_fun(), bshuf_compress_lz4_bound(), and bshuf_h5_filter().
uint32_t bshuf_read_uint32_BE | ( | const void * | buf | ) |
Referenced by bshuf_decompress_lz4_block(), and bshuf_h5_filter().
uint64_t bshuf_read_uint64_BE | ( | void * | buf | ) |
Referenced by bshuf_h5_filter().
int64_t bshuf_shuffle_bit_eightelem_AVX | ( | const void * | in, | |
void * | out, | |||
const size_t | size, | |||
const size_t | elem_size | |||
) |
int64_t bshuf_shuffle_bit_eightelem_scal | ( | const void * | in, | |
void * | out, | |||
const size_t | size, | |||
const size_t | elem_size | |||
) |
References CHECK_MULT_EIGHT, TRANS_BIT_8X8, and TRANS_BIT_8X8_BE.
Referenced by bshuf_untrans_bit_elem_scal().
int64_t bshuf_shuffle_bit_eightelem_SSE | ( | const void * | in, | |
void * | out, | |||
const size_t | size, | |||
const size_t | elem_size | |||
) |
int64_t bshuf_trans_bit_byte_AVX | ( | const void * | in, | |
void * | out, | |||
const size_t | size, | |||
const size_t | elem_size | |||
) |
int64_t bshuf_trans_bit_byte_remainder | ( | const void * | in, | |
void * | out, | |||
const size_t | size, | |||
const size_t | elem_size, | |||
const size_t | start_byte | |||
) |
References CHECK_MULT_EIGHT, TRANS_BIT_8X8, and TRANS_BIT_8X8_BE.
Referenced by bshuf_trans_bit_byte_scal().
int64_t bshuf_trans_bit_byte_scal | ( | const void * | in, | |
void * | out, | |||
const size_t | size, | |||
const size_t | elem_size | |||
) |
References bshuf_trans_bit_byte_remainder().
Referenced by bshuf_trans_bit_elem_scal().
int64_t bshuf_trans_bit_byte_SSE | ( | const void * | in, | |
void * | out, | |||
const size_t | size, | |||
const size_t | elem_size | |||
) |
int64_t bshuf_trans_bit_elem | ( | const void * | in, | |
void * | out, | |||
const size_t | size, | |||
const size_t | elem_size | |||
) |
References bshuf_trans_bit_elem_AVX(), bshuf_trans_bit_elem_scal(), and bshuf_trans_bit_elem_SSE().
Referenced by bshuf_bitshuffle_block(), and bshuf_compress_lz4_block().
int64_t bshuf_trans_bit_elem_AVX | ( | const void * | in, | |
void * | out, | |||
const size_t | size, | |||
const size_t | elem_size | |||
) |
Referenced by bshuf_trans_bit_elem().
int64_t bshuf_trans_bit_elem_scal | ( | const void * | in, | |
void * | out, | |||
const size_t | size, | |||
const size_t | elem_size | |||
) |
References bshuf_trans_bit_byte_scal(), bshuf_trans_bitrow_eight(), bshuf_trans_byte_elem_scal(), CHECK_ERR_FREE, and CHECK_MULT_EIGHT.
Referenced by bshuf_trans_bit_elem().
int64_t bshuf_trans_bit_elem_SSE | ( | const void * | in, | |
void * | out, | |||
const size_t | size, | |||
const size_t | elem_size | |||
) |
Referenced by bshuf_trans_bit_elem().
int64_t bshuf_trans_bitrow_eight | ( | const void * | in, | |
void * | out, | |||
const size_t | size, | |||
const size_t | elem_size | |||
) |
References bshuf_trans_elem(), and CHECK_MULT_EIGHT.
Referenced by bshuf_trans_bit_elem_scal().
int64_t bshuf_trans_byte_bitrow_AVX | ( | const void * | in, | |
void * | out, | |||
const size_t | size, | |||
const size_t | elem_size | |||
) |
int64_t bshuf_trans_byte_bitrow_scal | ( | const void * | in, | |
void * | out, | |||
const size_t | size, | |||
const size_t | elem_size | |||
) |
References CHECK_MULT_EIGHT.
Referenced by bshuf_untrans_bit_elem_scal().
int64_t bshuf_trans_byte_bitrow_SSE | ( | const void * | in, | |
void * | out, | |||
const size_t | size, | |||
const size_t | elem_size | |||
) |
int64_t bshuf_trans_byte_elem_remainder | ( | const void * | in, | |
void * | out, | |||
const size_t | size, | |||
const size_t | elem_size, | |||
const size_t | start | |||
) |
References CHECK_MULT_EIGHT.
Referenced by bshuf_trans_byte_elem_scal().
int64_t bshuf_trans_byte_elem_scal | ( | const void * | in, | |
void * | out, | |||
const size_t | size, | |||
const size_t | elem_size | |||
) |
References bshuf_trans_byte_elem_remainder().
Referenced by bshuf_trans_bit_elem_scal().
int64_t bshuf_trans_byte_elem_SSE | ( | const void * | in, | |
void * | out, | |||
const size_t | size, | |||
const size_t | elem_size | |||
) |
int64_t bshuf_trans_byte_elem_SSE_16 | ( | const void * | in, | |
void * | out, | |||
const size_t | size | |||
) |
int64_t bshuf_trans_byte_elem_SSE_32 | ( | const void * | in, | |
void * | out, | |||
const size_t | size | |||
) |
int64_t bshuf_trans_byte_elem_SSE_64 | ( | const void * | in, | |
void * | out, | |||
const size_t | size | |||
) |
int64_t bshuf_trans_elem | ( | const void * | in, | |
void * | out, | |||
const size_t | lda, | |||
const size_t | ldb, | |||
const size_t | elem_size | |||
) |
Referenced by bshuf_trans_bitrow_eight().
int64_t bshuf_untrans_bit_elem | ( | const void * | in, | |
void * | out, | |||
const size_t | size, | |||
const size_t | elem_size | |||
) |
References bshuf_untrans_bit_elem_AVX(), bshuf_untrans_bit_elem_scal(), and bshuf_untrans_bit_elem_SSE().
Referenced by bshuf_bitunshuffle_block(), and bshuf_decompress_lz4_block().
int64_t bshuf_untrans_bit_elem_AVX | ( | const void * | in, | |
void * | out, | |||
const size_t | size, | |||
const size_t | elem_size | |||
) |
Referenced by bshuf_untrans_bit_elem().
int64_t bshuf_untrans_bit_elem_scal | ( | const void * | in, | |
void * | out, | |||
const size_t | size, | |||
const size_t | elem_size | |||
) |
References bshuf_shuffle_bit_eightelem_scal(), bshuf_trans_byte_bitrow_scal(), CHECK_ERR_FREE, and CHECK_MULT_EIGHT.
Referenced by bshuf_untrans_bit_elem().
int64_t bshuf_untrans_bit_elem_SSE | ( | const void * | in, | |
void * | out, | |||
const size_t | size, | |||
const size_t | elem_size | |||
) |
Referenced by bshuf_untrans_bit_elem().
int bshuf_using_AVX2 | ( | void | ) |
int bshuf_using_SSE2 | ( | void | ) |
void bshuf_write_uint32_BE | ( | void * | buf, | |
uint32_t | num | |||
) |
Referenced by bshuf_compress_lz4_block(), and bshuf_h5_filter().
void bshuf_write_uint64_BE | ( | void * | buf, | |
uint64_t | num | |||
) |
Referenced by bshuf_h5_filter().