28 size_t len,
void *udata);
31 #define H5VM_vector_eq_s(N,V1,V2) (H5VM_vector_cmp_s (N, V1, V2)==0)
32 #define H5VM_vector_lt_s(N,V1,V2) (H5VM_vector_cmp_s (N, V1, V2)<0)
33 #define H5VM_vector_gt_s(N,V1,V2) (H5VM_vector_cmp_s (N, V1, V2)>0)
34 #define H5VM_vector_le_s(N,V1,V2) (H5VM_vector_cmp_s (N, V1, V2)<=0)
35 #define H5VM_vector_ge_s(N,V1,V2) (H5VM_vector_cmp_s (N, V1, V2)>=0)
36 #define H5VM_vector_eq_u(N,V1,V2) (H5VM_vector_cmp_u (N, V1, V2)==0)
37 #define H5VM_vector_lt_u(N,V1,V2) (H5VM_vector_cmp_u (N, V1, V2)<0)
38 #define H5VM_vector_gt_u(N,V1,V2) (H5VM_vector_cmp_u (N, V1, V2)>0)
39 #define H5VM_vector_le_u(N,V1,V2) (H5VM_vector_cmp_u (N, V1, V2)<=0)
40 #define H5VM_vector_ge_u(N,V1,V2) (H5VM_vector_cmp_u (N, V1, V2)>=0)
43 #define H5VM_vector_cpy(N,DST,SRC) { \
44 HDassert(sizeof(*(DST))==sizeof(*(SRC))); \
45 if (SRC) H5MM_memcpy (DST, SRC, (N)*sizeof(*(DST))); \
46 else HDmemset (DST, 0, (N)*sizeof(*(DST))); \
49 #define H5VM_vector_zero(N,DST) HDmemset(DST,0,(N)*sizeof(*(DST)))
54 #define H5VM_swizzle_coords(TYPE,COORDS,UNLIM_DIM) { \
56 HDassert(sizeof(COORDS[0]) == sizeof(TYPE)); \
59 if(0 != (UNLIM_DIM)) { \
60 TYPE _tmp = (COORDS)[UNLIM_DIM]; \
62 HDmemmove(&(COORDS)[1], &(COORDS)[0], sizeof(TYPE) * (UNLIM_DIM)); \
71 #define H5VM_unswizzle_coords(TYPE,COORDS,UNLIM_DIM) { \
73 HDassert(sizeof(COORDS[0]) == sizeof(TYPE)); \
76 if(0 != (UNLIM_DIM)) { \
77 TYPE _tmp = (COORDS)[0]; \
79 HDmemmove(&(COORDS)[0], &(COORDS)[1], sizeof(TYPE) * (UNLIM_DIM)); \
80 (COORDS)[UNLIM_DIM] = _tmp; \
85 #define H5VM_ZERO NULL
96 const hsize_t *offset,
void *_dst,
100 const hsize_t *dst_offset,
void *_dst,
102 const hsize_t *src_offset,
const void *_src);
104 const hsize_t *stride,
void *_dst,
105 unsigned fill_value);
107 const hsize_t *dst_stride,
void *_dst,
108 const hsize_t *src_stride,
const void *_src);
110 const hssize_t *dst_stride,
void *_dst,
111 const hssize_t *src_stride,
const void *_src);
132 size_t src_max_nseq,
size_t *src_curr_seq,
size_t src_len_arr[],
136 size_t dst_max_nseq,
size_t *dst_curr_seq,
size_t dst_len_arr[],
hsize_t dst_off_arr[],
138 size_t src_max_nseq,
size_t *src_curr_seq,
size_t src_len_arr[],
hsize_t src_off_arr[]);
161 H5VM_vector_reduce_product(
unsigned n,
const hsize_t *v)
193 H5VM_vector_zerop_u(
int n, const
hsize_t *v)
228 H5VM_vector_zerop_s(
int n,
const hssize_t *v)
346 while (
n--) *v1++ += *v2++;
350 static const unsigned char LogTable256[] =
352 0, 0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3,
353 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
354 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
355 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
356 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
357 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
358 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
359 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
360 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
361 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
362 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
363 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
364 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
365 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
366 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
367 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7
394 register unsigned int t, tt, ttt;
396 if((ttt = (
unsigned)(
n >> 32)))
397 if((tt = (
unsigned)(
n >> 48)))
398 r = (t = (
unsigned)(
n >> 56)) ? 56 + (
unsigned)LogTable256[t] : 48 + (
unsigned)LogTable256[tt & 0xFF];
400 r = (t = (
unsigned)(
n >> 40)) ? 40 + (
unsigned)LogTable256[t] : 32 + (
unsigned)LogTable256[ttt & 0xFF];
402 if((tt = (
unsigned)(
n >> 16)))
403 r = (t = (
unsigned)(
n >> 24)) ? 24 + (
unsigned)LogTable256[t] : 16 + (
unsigned)LogTable256[tt & 0xFF];
413 static const unsigned MultiplyDeBruijnBitPosition[32] =
415 0, 1, 28, 2, 29, 14, 24, 3, 30, 22, 20, 15, 25, 17, 4, 8,
416 31, 27, 13, 23, 21, 19, 16, 7, 26, 12, 18, 6, 11, 5, 10, 9
444 return(MultiplyDeBruijnBitPosition[(
n * (
uint32_t)0x077CB531UL) >> 27]);
491 return (H5VM_log2_gen(limit) / 8) + 1;
494 static const unsigned char H5VM_bit_set_g[8] = {0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01};
495 static const unsigned char H5VM_bit_clear_g[8] = {0x7F, 0xBF, 0xDF, 0xEF, 0xF7, 0xFB, 0xFD, 0xFE};
518 H5VM_bit_get(
const unsigned char *buf,
size_t offset)
521 return (
hbool_t)((buf[offset / 8] & (H5VM_bit_set_g[offset % 8])) ?
TRUE :
FALSE);
545 H5VM_bit_set(
unsigned char *buf,
size_t offset,
hbool_t val)
549 buf[offset / 8] |= H5VM_bit_set_g[offset % 8];
551 buf[offset / 8] &= H5VM_bit_clear_g[offset % 8];