43 #if defined(__ARM_FEATURE_UNALIGNED) || defined(__i386) || defined(_M_IX86) || defined(__x86_64__) || defined(_M_X64)
44 # define XXH_USE_UNALIGNED_ACCESS 1
62 #define XXH_FORCE_NATIVE_FORMAT 0
69 # pragma warning(disable : 4127)
70 # define FORCE_INLINE static __forceinline
72 # if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
74 # define FORCE_INLINE static inline __attribute__((always_inline))
76 # define FORCE_INLINE static inline
79 # define FORCE_INLINE static
95 static void*
XXH_memcpy(
void*
dest,
const void* src,
size_t size) {
return memcpy(
dest,src,size); }
101 #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
103 typedef uint8_t
BYTE;
104 typedef uint16_t
U16;
105 typedef uint32_t
U32;
107 typedef uint64_t
U64;
110 typedef unsigned short U16;
113 typedef unsigned long long U64;
119 memcpy(&val32, memPtr, 4);
126 memcpy(&val64, memPtr, 8);
135 #define GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__)
138 #if defined(_MSC_VER)
139 # define XXH_rotl32(x,r) _rotl(x,r)
140 # define XXH_rotl64(x,r) _rotl64(x,r)
142 # define XXH_rotl32(x,r) ((x << r) | (x >> (32 - r)))
143 # define XXH_rotl64(x,r) ((x << r) | (x >> (64 - r)))
146 #if defined(_MSC_VER)
147 # define XXH_swap32 _byteswap_ulong
148 # define XXH_swap64 _byteswap_uint64
149 #elif GCC_VERSION >= 403
150 # define XXH_swap32 __builtin_bswap32
151 # define XXH_swap64 __builtin_bswap64
155 return ((x << 24) & 0xff000000 ) |
156 ((x << 8) & 0x00ff0000 ) |
157 ((x >> 8) & 0x0000ff00 ) |
158 ((x >> 24) & 0x000000ff );
162 return ((x << 56) & 0xff00000000000000ULL) |
163 ((x << 40) & 0x00ff000000000000ULL) |
164 ((x << 24) & 0x0000ff0000000000ULL) |
165 ((x << 8) & 0x000000ff00000000ULL) |
166 ((x >> 8) & 0x00000000ff000000ULL) |
167 ((x >> 24) & 0x0000000000ff0000ULL) |
168 ((x >> 40) & 0x000000000000ff00ULL) |
169 ((x >> 56) & 0x00000000000000ffULL);
178 #ifndef XXH_CPU_LITTLE_ENDIAN
180 # define XXH_CPU_LITTLE_ENDIAN (*(const char*)(&one))
219 #define XXH_STATIC_ASSERT(c) { enum { XXH_static_assert = 1/(!!(c)) }; }
225 #define PRIME32_1 2654435761U
226 #define PRIME32_2 2246822519U
227 #define PRIME32_3 3266489917U
228 #define PRIME32_4 668265263U
229 #define PRIME32_5 374761393U
231 #define PRIME64_1 11400714785074694791ULL
232 #define PRIME64_2 14029467366897019727ULL
233 #define PRIME64_3 1609587929392839161ULL
234 #define PRIME64_4 9650029242287828579ULL
235 #define PRIME64_5 2870177450012600261ULL
244 const BYTE* bEnd = p + len;
246 #define XXH_get32bits(p) XXH_readLE32_align(p, endian, align)
248 #ifdef XXH_ACCEPT_NULL_INPUT_POINTER
252 bEnd=p=(
const BYTE*)(
size_t)16;
258 const BYTE*
const limit = bEnd - 16;
318 unsigned XXH32 (
const void* input,
size_t len,
unsigned seed)
329 # if !defined(XXH_USE_UNALIGNED_ACCESS)
330 if ((((
size_t)input) & 3) == 0)
349 const BYTE* bEnd = p + len;
351 #define XXH_get64bits(p) XXH_readLE64_align(p, endian, align)
353 #ifdef XXH_ACCEPT_NULL_INPUT_POINTER
357 bEnd=p=(
const BYTE*)(
size_t)32;
363 const BYTE*
const limit = bEnd - 32;
458 unsigned long long XXH64 (
const void* input,
size_t len,
unsigned long long seed)
469 # if !defined(XXH_USE_UNALIGNED_ACCESS)
470 if ((((
size_t)input) & 7)==0)
547 state->
v3 = seed + 0;
560 state->
v3 = seed + 0;
572 const BYTE*
const bEnd = p + len;
574 #ifdef XXH_ACCEPT_NULL_INPUT_POINTER
615 const BYTE*
const limit = bEnd - 16;
651 state->
memsize = (int)(bEnd-p);
726 const BYTE*
const bEnd = p + len;
728 #ifdef XXH_ACCEPT_NULL_INPUT_POINTER
769 const BYTE*
const limit = bEnd - 32;
805 state->
memsize = (int)(bEnd-p);
static U64 XXH_read64(const void *memPtr)
XXH32_state_t * XXH32_createState(void)
FORCE_INLINE U32 XXH32_endian_align(const void *input, size_t len, U32 seed, XXH_endianess endian, XXH_alignment align)
XXH64_state_t * XXH64_createState(void)
U32 XXH32_digest(const XXH32_state_t *state_in)
FORCE_INLINE U64 XXH_readLE64(const void *ptr, XXH_endianess endian)
#define XXH_STATIC_ASSERT(c)
XXH_errorcode XXH32_reset(XXH32_state_t *state_in, U32 seed)
#define XXH_CPU_LITTLE_ENDIAN
FORCE_INLINE U64 XXH_readLE64_align(const void *ptr, XXH_endianess endian, XXH_alignment align)
static void * XXH_malloc(size_t s)
XXH_errorcode XXH32_update(XXH32_state_t *state_in, const void *input, size_t len)
FORCE_INLINE XXH_errorcode XXH64_update_endian(XXH64_state_t *state_in, const void *input, size_t len, XXH_endianess endian)
static U64 XXH_swap64(U64 x)
FORCE_INLINE U64 XXH64_digest_endian(const XXH64_state_t *state_in, XXH_endianess endian)
FORCE_INLINE U32 XXH_readLE32(const void *ptr, XXH_endianess endian)
static void XXH_free(void *p)
static U32 XXH_swap32(U32 x)
FORCE_INLINE XXH_errorcode XXH32_update_endian(XXH32_state_t *state_in, const void *input, size_t len, XXH_endianess endian)
XXH_errorcode XXH32_freeState(XXH32_state_t *statePtr)
unsigned long long XXH64_digest(const XXH64_state_t *state_in)
FORCE_INLINE U32 XXH_readLE32_align(const void *ptr, XXH_endianess endian, XXH_alignment align)
unsigned long long XXH64(const void *input, size_t len, unsigned long long seed)
XXH_errorcode XXH64_reset(XXH64_state_t *state_in, unsigned long long seed)
XXH_errorcode XXH64_freeState(XXH64_state_t *statePtr)
static U32 XXH_read32(const void *memPtr)
FORCE_INLINE U64 XXH64_endian_align(const void *input, size_t len, U64 seed, XXH_endianess endian, XXH_alignment align)
FORCE_INLINE U32 XXH32_digest_endian(const XXH32_state_t *state_in, XXH_endianess endian)
static void * XXH_memcpy(void *dest, const void *src, size_t size)
unsigned XXH32(const void *input, size_t len, unsigned seed)
#define XXH_FORCE_NATIVE_FORMAT
XXH_errorcode XXH64_update(XXH64_state_t *state_in, const void *input, size_t len)