Remove platform specific macros
This commit is contained in:
parent
1075c12078
commit
b3b41d0f6d
@ -7,10 +7,6 @@
|
|||||||
* of patent rights can be found in the PATENTS file in the same directory.
|
* of patent rights can be found in the PATENTS file in the same directory.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#if defined (__cplusplus)
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef ZSTD_H_235446
|
#ifndef ZSTD_H_235446
|
||||||
#define ZSTD_H_235446
|
#define ZSTD_H_235446
|
||||||
|
|
||||||
@ -19,18 +15,7 @@ extern "C" {
|
|||||||
|
|
||||||
|
|
||||||
/* ===== ZSTDLIB_API : control library symbols visibility ===== */
|
/* ===== ZSTDLIB_API : control library symbols visibility ===== */
|
||||||
#if defined(__GNUC__) && (__GNUC__ >= 4)
|
#define ZSTDLIB_API
|
||||||
# define ZSTDLIB_VISIBILITY __attribute__ ((visibility ("default")))
|
|
||||||
#else
|
|
||||||
# define ZSTDLIB_VISIBILITY
|
|
||||||
#endif
|
|
||||||
#if defined(ZSTD_DLL_EXPORT) && (ZSTD_DLL_EXPORT==1)
|
|
||||||
# define ZSTDLIB_API __declspec(dllexport) ZSTDLIB_VISIBILITY
|
|
||||||
#elif defined(ZSTD_DLL_IMPORT) && (ZSTD_DLL_IMPORT==1)
|
|
||||||
# define ZSTDLIB_API __declspec(dllimport) ZSTDLIB_VISIBILITY /* It isn't required but allows to generate better code, saving a function pointer load from the IAT and an indirect jump.*/
|
|
||||||
#else
|
|
||||||
# define ZSTDLIB_API ZSTDLIB_VISIBILITY
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/*******************************************************************************************************
|
/*******************************************************************************************************
|
||||||
@ -769,7 +754,3 @@ ZSTDLIB_API size_t ZSTD_insertBlock(ZSTD_DCtx* dctx, const void* blockStart, siz
|
|||||||
|
|
||||||
|
|
||||||
#endif /* ZSTD_H_ZSTD_STATIC_LINKING_ONLY */
|
#endif /* ZSTD_H_ZSTD_STATIC_LINKING_ONLY */
|
||||||
|
|
||||||
#if defined (__cplusplus)
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
@ -35,11 +35,6 @@
|
|||||||
#ifndef BITSTREAM_H_MODULE
|
#ifndef BITSTREAM_H_MODULE
|
||||||
#define BITSTREAM_H_MODULE
|
#define BITSTREAM_H_MODULE
|
||||||
|
|
||||||
#if defined (__cplusplus)
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This API consists of small unitary functions, which must be inlined for best performance.
|
* This API consists of small unitary functions, which must be inlined for best performance.
|
||||||
* Since link-time-optimization is not available for all compilers,
|
* Since link-time-optimization is not available for all compilers,
|
||||||
@ -56,10 +51,6 @@ extern "C" {
|
|||||||
/*=========================================
|
/*=========================================
|
||||||
* Target specific
|
* Target specific
|
||||||
=========================================*/
|
=========================================*/
|
||||||
#if defined(__BMI__) && defined(__GNUC__)
|
|
||||||
# include <immintrin.h> /* support for bextr (experimental) */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define STREAM_ACCUMULATOR_MIN_32 25
|
#define STREAM_ACCUMULATOR_MIN_32 25
|
||||||
#define STREAM_ACCUMULATOR_MIN_64 57
|
#define STREAM_ACCUMULATOR_MIN_64 57
|
||||||
#define STREAM_ACCUMULATOR_MIN ((U32)(MEM_32bits() ? STREAM_ACCUMULATOR_MIN_32 : STREAM_ACCUMULATOR_MIN_64))
|
#define STREAM_ACCUMULATOR_MIN ((U32)(MEM_32bits() ? STREAM_ACCUMULATOR_MIN_32 : STREAM_ACCUMULATOR_MIN_64))
|
||||||
@ -301,16 +292,7 @@ MEM_STATIC size_t BIT_getUpperBits(size_t bitContainer, U32 const start)
|
|||||||
|
|
||||||
MEM_STATIC size_t BIT_getMiddleBits(size_t bitContainer, U32 const start, U32 const nbBits)
|
MEM_STATIC size_t BIT_getMiddleBits(size_t bitContainer, U32 const start, U32 const nbBits)
|
||||||
{
|
{
|
||||||
#if defined(__BMI__) && defined(__GNUC__) && __GNUC__*1000+__GNUC_MINOR__ >= 4008 /* experimental */
|
|
||||||
# if defined(__x86_64__)
|
|
||||||
if (sizeof(bitContainer)==8)
|
|
||||||
return _bextr_u64(bitContainer, start, nbBits);
|
|
||||||
else
|
|
||||||
# endif
|
|
||||||
return _bextr_u32(bitContainer, start, nbBits);
|
|
||||||
#else
|
|
||||||
return (bitContainer >> start) & BIT_mask[nbBits];
|
return (bitContainer >> start) & BIT_mask[nbBits];
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
MEM_STATIC size_t BIT_getLowerBits(size_t bitContainer, U32 const nbBits)
|
MEM_STATIC size_t BIT_getLowerBits(size_t bitContainer, U32 const nbBits)
|
||||||
@ -327,12 +309,8 @@ MEM_STATIC size_t BIT_getLowerBits(size_t bitContainer, U32 const nbBits)
|
|||||||
*/
|
*/
|
||||||
MEM_STATIC size_t BIT_lookBits(const BIT_DStream_t* bitD, U32 nbBits)
|
MEM_STATIC size_t BIT_lookBits(const BIT_DStream_t* bitD, U32 nbBits)
|
||||||
{
|
{
|
||||||
#if defined(__BMI__) && defined(__GNUC__) /* experimental; fails if bitD->bitsConsumed + nbBits > sizeof(bitD->bitContainer)*8 */
|
|
||||||
return BIT_getMiddleBits(bitD->bitContainer, (sizeof(bitD->bitContainer)*8) - bitD->bitsConsumed - nbBits, nbBits);
|
|
||||||
#else
|
|
||||||
U32 const bitMask = sizeof(bitD->bitContainer)*8 - 1;
|
U32 const bitMask = sizeof(bitD->bitContainer)*8 - 1;
|
||||||
return ((bitD->bitContainer << (bitD->bitsConsumed & bitMask)) >> 1) >> ((bitMask-nbBits) & bitMask);
|
return ((bitD->bitContainer << (bitD->bitsConsumed & bitMask)) >> 1) >> ((bitMask-nbBits) & bitMask);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*! BIT_lookBitsFast() :
|
/*! BIT_lookBitsFast() :
|
||||||
@ -410,8 +388,4 @@ MEM_STATIC unsigned BIT_endOfDStream(const BIT_DStream_t* DStream)
|
|||||||
return ((DStream->ptr == DStream->start) && (DStream->bitsConsumed == sizeof(DStream->bitContainer)*8));
|
return ((DStream->ptr == DStream->start) && (DStream->bitsConsumed == sizeof(DStream->bitContainer)*8));
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined (__cplusplus)
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* BITSTREAM_H_MODULE */
|
#endif /* BITSTREAM_H_MODULE */
|
||||||
|
@ -12,11 +12,6 @@
|
|||||||
#ifndef ERROR_H_MODULE
|
#ifndef ERROR_H_MODULE
|
||||||
#define ERROR_H_MODULE
|
#define ERROR_H_MODULE
|
||||||
|
|
||||||
#if defined (__cplusplus)
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/* ****************************************
|
/* ****************************************
|
||||||
* Dependencies
|
* Dependencies
|
||||||
******************************************/
|
******************************************/
|
||||||
@ -27,15 +22,7 @@ extern "C" {
|
|||||||
/* ****************************************
|
/* ****************************************
|
||||||
* Compiler-specific
|
* Compiler-specific
|
||||||
******************************************/
|
******************************************/
|
||||||
#if defined(__GNUC__)
|
#define ERR_STATIC static __attribute__((unused))
|
||||||
# define ERR_STATIC static __attribute__((unused))
|
|
||||||
#elif defined (__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */)
|
|
||||||
# define ERR_STATIC static inline
|
|
||||||
#elif defined(_MSC_VER)
|
|
||||||
# define ERR_STATIC static __inline
|
|
||||||
#else
|
|
||||||
# define ERR_STATIC static /* this version may generate warnings for unused static functions; disable the relevant warning */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/*-****************************************
|
/*-****************************************
|
||||||
@ -48,9 +35,6 @@ typedef ZSTD_ErrorCode ERR_enum;
|
|||||||
/*-****************************************
|
/*-****************************************
|
||||||
* Error codes handling
|
* Error codes handling
|
||||||
******************************************/
|
******************************************/
|
||||||
#ifdef ERROR
|
|
||||||
# undef ERROR /* reported already defined on VS 2015 (Rich Geldreich) */
|
|
||||||
#endif
|
|
||||||
#define ERROR(name) ((size_t)-PREFIX(name))
|
#define ERROR(name) ((size_t)-PREFIX(name))
|
||||||
|
|
||||||
ERR_STATIC unsigned ERR_isError(size_t code) { return (code > ERROR(maxCode)); }
|
ERR_STATIC unsigned ERR_isError(size_t code) { return (code > ERROR(maxCode)); }
|
||||||
@ -69,8 +53,4 @@ ERR_STATIC const char* ERR_getErrorName(size_t code)
|
|||||||
return ERR_getErrorString(ERR_getErrorCode(code));
|
return ERR_getErrorString(ERR_getErrorCode(code));
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined (__cplusplus)
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* ERROR_H_MODULE */
|
#endif /* ERROR_H_MODULE */
|
||||||
|
@ -34,10 +34,6 @@
|
|||||||
#ifndef FSE_H
|
#ifndef FSE_H
|
||||||
#define FSE_H
|
#define FSE_H
|
||||||
|
|
||||||
#if defined (__cplusplus)
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/*-*****************************************
|
/*-*****************************************
|
||||||
* Dependencies
|
* Dependencies
|
||||||
@ -48,15 +44,7 @@ extern "C" {
|
|||||||
/*-*****************************************
|
/*-*****************************************
|
||||||
* FSE_PUBLIC_API : control library symbols visibility
|
* FSE_PUBLIC_API : control library symbols visibility
|
||||||
******************************************/
|
******************************************/
|
||||||
#if defined(FSE_DLL_EXPORT) && (FSE_DLL_EXPORT==1) && defined(__GNUC__) && (__GNUC__ >= 4)
|
#define FSE_PUBLIC_API
|
||||||
# define FSE_PUBLIC_API __attribute__ ((visibility ("default")))
|
|
||||||
#elif defined(FSE_DLL_EXPORT) && (FSE_DLL_EXPORT==1) /* Visual expected */
|
|
||||||
# define FSE_PUBLIC_API __declspec(dllexport)
|
|
||||||
#elif defined(FSE_DLL_IMPORT) && (FSE_DLL_IMPORT==1)
|
|
||||||
# define FSE_PUBLIC_API __declspec(dllimport) /* It isn't required but allows to generate better code, saving a function pointer load from the IAT and an indirect jump.*/
|
|
||||||
#else
|
|
||||||
# define FSE_PUBLIC_API
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*------ Version ------*/
|
/*------ Version ------*/
|
||||||
#define FSE_VERSION_MAJOR 0
|
#define FSE_VERSION_MAJOR 0
|
||||||
@ -687,8 +675,4 @@ MEM_STATIC unsigned FSE_endOfDState(const FSE_DState_t* DStatePtr)
|
|||||||
#endif /* FSE_STATIC_LINKING_ONLY */
|
#endif /* FSE_STATIC_LINKING_ONLY */
|
||||||
|
|
||||||
|
|
||||||
#if defined (__cplusplus)
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* FSE_H */
|
#endif /* FSE_H */
|
||||||
|
@ -35,22 +35,7 @@
|
|||||||
/* **************************************************************
|
/* **************************************************************
|
||||||
* Compiler specifics
|
* Compiler specifics
|
||||||
****************************************************************/
|
****************************************************************/
|
||||||
#ifdef _MSC_VER /* Visual Studio */
|
#define FORCE_INLINE static __attribute__((always_inline))
|
||||||
# define FORCE_INLINE static __forceinline
|
|
||||||
# include <intrin.h> /* For Visual 2005 */
|
|
||||||
# pragma warning(disable : 4127) /* disable: C4127: conditional expression is constant */
|
|
||||||
# pragma warning(disable : 4214) /* disable: C4214: non-int bitfields */
|
|
||||||
#else
|
|
||||||
# if defined (__cplusplus) || defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 */
|
|
||||||
# ifdef __GNUC__
|
|
||||||
# define FORCE_INLINE static inline __attribute__((always_inline))
|
|
||||||
# else
|
|
||||||
# define FORCE_INLINE static inline
|
|
||||||
# endif
|
|
||||||
# else
|
|
||||||
# define FORCE_INLINE static
|
|
||||||
# endif /* __STDC_VERSION__ */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/* **************************************************************
|
/* **************************************************************
|
||||||
|
@ -36,22 +36,7 @@
|
|||||||
/* **************************************************************
|
/* **************************************************************
|
||||||
* Compiler specifics
|
* Compiler specifics
|
||||||
****************************************************************/
|
****************************************************************/
|
||||||
#ifdef _MSC_VER /* Visual Studio */
|
#define FORCE_INLINE static __attribute__((always_inline))
|
||||||
# define FORCE_INLINE static __forceinline
|
|
||||||
# include <intrin.h> /* For Visual 2005 */
|
|
||||||
# pragma warning(disable : 4127) /* disable: C4127: conditional expression is constant */
|
|
||||||
# pragma warning(disable : 4214) /* disable: C4214: non-int bitfields */
|
|
||||||
#else
|
|
||||||
# if defined (__cplusplus) || defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 */
|
|
||||||
# ifdef __GNUC__
|
|
||||||
# define FORCE_INLINE static inline __attribute__((always_inline))
|
|
||||||
# else
|
|
||||||
# define FORCE_INLINE static inline
|
|
||||||
# endif
|
|
||||||
# else
|
|
||||||
# define FORCE_INLINE static
|
|
||||||
# endif /* __STDC_VERSION__ */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/* **************************************************************
|
/* **************************************************************
|
||||||
|
@ -34,10 +34,6 @@
|
|||||||
#ifndef HUF_H_298734234
|
#ifndef HUF_H_298734234
|
||||||
#define HUF_H_298734234
|
#define HUF_H_298734234
|
||||||
|
|
||||||
#if defined (__cplusplus)
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/* *** Dependencies *** */
|
/* *** Dependencies *** */
|
||||||
#include <stddef.h> /* size_t */
|
#include <stddef.h> /* size_t */
|
||||||
@ -252,9 +248,4 @@ size_t HUF_decompress1X4_usingDTable(void* dst, size_t maxDstSize, const void* c
|
|||||||
|
|
||||||
#endif /* HUF_STATIC_LINKING_ONLY */
|
#endif /* HUF_STATIC_LINKING_ONLY */
|
||||||
|
|
||||||
|
|
||||||
#if defined (__cplusplus)
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* HUF_H_298734234 */
|
#endif /* HUF_H_298734234 */
|
||||||
|
@ -32,13 +32,6 @@
|
|||||||
- Public forum : https://groups.google.com/forum/#!forum/lz4c
|
- Public forum : https://groups.google.com/forum/#!forum/lz4c
|
||||||
****************************************************************** */
|
****************************************************************** */
|
||||||
|
|
||||||
/* **************************************************************
|
|
||||||
* Compiler specifics
|
|
||||||
****************************************************************/
|
|
||||||
#ifdef _MSC_VER /* Visual Studio */
|
|
||||||
# pragma warning(disable : 4127) /* disable: C4127: conditional expression is constant */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/* **************************************************************
|
/* **************************************************************
|
||||||
* Includes
|
* Includes
|
||||||
|
@ -35,26 +35,13 @@
|
|||||||
/* **************************************************************
|
/* **************************************************************
|
||||||
* Compiler specifics
|
* Compiler specifics
|
||||||
****************************************************************/
|
****************************************************************/
|
||||||
#ifdef _MSC_VER /* Visual Studio */
|
#define FORCE_INLINE static __attribute__((always_inline))
|
||||||
# define FORCE_INLINE static __forceinline
|
|
||||||
# pragma warning(disable : 4127) /* disable: C4127: conditional expression is constant */
|
|
||||||
#else
|
|
||||||
# if defined (__cplusplus) || defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 */
|
|
||||||
# ifdef __GNUC__
|
|
||||||
# define FORCE_INLINE static inline __attribute__((always_inline))
|
|
||||||
# else
|
|
||||||
# define FORCE_INLINE static inline
|
|
||||||
# endif
|
|
||||||
# else
|
|
||||||
# define FORCE_INLINE static
|
|
||||||
# endif /* __STDC_VERSION__ */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/* **************************************************************
|
/* **************************************************************
|
||||||
* Dependencies
|
* Dependencies
|
||||||
****************************************************************/
|
****************************************************************/
|
||||||
#include <string.h> /* memcpy, memset */
|
#include <linux/string.h> /* memcpy, memset */
|
||||||
#include "bitstream.h" /* BIT_* */
|
#include "bitstream.h" /* BIT_* */
|
||||||
#include "fse.h" /* header compression */
|
#include "fse.h" /* header compression */
|
||||||
#define HUF_STATIC_LINKING_ONLY
|
#define HUF_STATIC_LINKING_ONLY
|
||||||
|
@ -10,10 +10,6 @@
|
|||||||
#ifndef MEM_H_MODULE
|
#ifndef MEM_H_MODULE
|
||||||
#define MEM_H_MODULE
|
#define MEM_H_MODULE
|
||||||
|
|
||||||
#if defined (__cplusplus)
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*-****************************************
|
/*-****************************************
|
||||||
* Dependencies
|
* Dependencies
|
||||||
******************************************/
|
******************************************/
|
||||||
@ -24,19 +20,7 @@ extern "C" {
|
|||||||
/*-****************************************
|
/*-****************************************
|
||||||
* Compiler specifics
|
* Compiler specifics
|
||||||
******************************************/
|
******************************************/
|
||||||
#if defined(_MSC_VER) /* Visual Studio */
|
#define MEM_STATIC static __inline __attribute__((unused))
|
||||||
# include <stdlib.h> /* _byteswap_ulong */
|
|
||||||
# include <intrin.h> /* _byteswap_* */
|
|
||||||
#endif
|
|
||||||
#if defined(__GNUC__)
|
|
||||||
# define MEM_STATIC static __inline __attribute__((unused))
|
|
||||||
#elif defined (__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */)
|
|
||||||
# define MEM_STATIC static inline
|
|
||||||
#elif defined(_MSC_VER)
|
|
||||||
# define MEM_STATIC static __inline
|
|
||||||
#else
|
|
||||||
# define MEM_STATIC static /* this version may generate warnings for unused static functions; disable the relevant warning */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* code only tested on 32 and 64 bits systems */
|
/* code only tested on 32 and 64 bits systems */
|
||||||
#define MEM_STATIC_ASSERT(c) { enum { MEM_static_assert = 1/(int)(!!(c)) }; }
|
#define MEM_STATIC_ASSERT(c) { enum { MEM_static_assert = 1/(int)(!!(c)) }; }
|
||||||
@ -46,55 +30,21 @@ MEM_STATIC void MEM_check(void) { MEM_STATIC_ASSERT((sizeof(size_t)==4) || (size
|
|||||||
/*-**************************************************************
|
/*-**************************************************************
|
||||||
* Basic Types
|
* Basic Types
|
||||||
*****************************************************************/
|
*****************************************************************/
|
||||||
#if !defined (__VMS) && (defined (__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) )
|
#include <stdint.h>
|
||||||
# include <stdint.h>
|
typedef uint8_t BYTE;
|
||||||
typedef uint8_t BYTE;
|
typedef uint16_t U16;
|
||||||
typedef uint16_t U16;
|
typedef int16_t S16;
|
||||||
typedef int16_t S16;
|
typedef uint32_t U32;
|
||||||
typedef uint32_t U32;
|
typedef int32_t S32;
|
||||||
typedef int32_t S32;
|
typedef uint64_t U64;
|
||||||
typedef uint64_t U64;
|
typedef int64_t S64;
|
||||||
typedef int64_t S64;
|
typedef intptr_t iPtrDiff;
|
||||||
typedef intptr_t iPtrDiff;
|
typedef uintptr_t uPtrDiff;
|
||||||
typedef uintptr_t uPtrDiff;
|
|
||||||
#else
|
|
||||||
typedef unsigned char BYTE;
|
|
||||||
typedef unsigned short U16;
|
|
||||||
typedef signed short S16;
|
|
||||||
typedef unsigned int U32;
|
|
||||||
typedef signed int S32;
|
|
||||||
typedef unsigned long long U64;
|
|
||||||
typedef signed long long S64;
|
|
||||||
typedef ptrdiff_t iPtrDiff;
|
|
||||||
typedef size_t uPtrDiff;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/*-**************************************************************
|
/*-**************************************************************
|
||||||
* Memory I/O
|
* Memory I/O
|
||||||
*****************************************************************/
|
*****************************************************************/
|
||||||
/* MEM_FORCE_MEMORY_ACCESS :
|
|
||||||
* By default, access to unaligned memory is controlled by `memcpy()`, which is safe and portable.
|
|
||||||
* Unfortunately, on some target/compiler combinations, the generated assembly is sub-optimal.
|
|
||||||
* The below switch allow to select different access method for improved performance.
|
|
||||||
* Method 0 (default) : use `memcpy()`. Safe and portable.
|
|
||||||
* Method 1 : `__packed` statement. It depends on compiler extension (i.e., not portable).
|
|
||||||
* This method is safe if your compiler supports it, and *generally* as fast or faster than `memcpy`.
|
|
||||||
* Method 2 : direct access. This method is portable but violate C standard.
|
|
||||||
* It can generate buggy code on targets depending on alignment.
|
|
||||||
* In some circumstances, it's the only known way to get the most performance (i.e. GCC + ARMv6)
|
|
||||||
* See http://fastcompression.blogspot.fr/2015/08/accessing-unaligned-memory.html for details.
|
|
||||||
* Prefer these methods in priority order (0 > 1 > 2)
|
|
||||||
*/
|
|
||||||
#ifndef MEM_FORCE_MEMORY_ACCESS /* can be defined externally, on command line for example */
|
|
||||||
# if defined(__GNUC__) && ( defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__) || defined(__ARM_ARCH_6T2__) )
|
|
||||||
# define MEM_FORCE_MEMORY_ACCESS 2
|
|
||||||
# elif defined(__INTEL_COMPILER) /*|| defined(_MSC_VER)*/ || \
|
|
||||||
(defined(__GNUC__) && ( defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7S__) ))
|
|
||||||
# define MEM_FORCE_MEMORY_ACCESS 1
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
MEM_STATIC unsigned MEM_32bits(void) { return sizeof(size_t)==4; }
|
MEM_STATIC unsigned MEM_32bits(void) { return sizeof(size_t)==4; }
|
||||||
MEM_STATIC unsigned MEM_64bits(void) { return sizeof(size_t)==8; }
|
MEM_STATIC unsigned MEM_64bits(void) { return sizeof(size_t)==8; }
|
||||||
|
|
||||||
@ -104,45 +54,6 @@ MEM_STATIC unsigned MEM_isLittleEndian(void)
|
|||||||
return one.c[0];
|
return one.c[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(MEM_FORCE_MEMORY_ACCESS) && (MEM_FORCE_MEMORY_ACCESS==2)
|
|
||||||
|
|
||||||
/* violates C standard, by lying on structure alignment.
|
|
||||||
Only use if no other choice to achieve best performance on target platform */
|
|
||||||
MEM_STATIC U16 MEM_read16(const void* memPtr) { return *(const U16*) memPtr; }
|
|
||||||
MEM_STATIC U32 MEM_read32(const void* memPtr) { return *(const U32*) memPtr; }
|
|
||||||
MEM_STATIC U64 MEM_read64(const void* memPtr) { return *(const U64*) memPtr; }
|
|
||||||
MEM_STATIC U64 MEM_readST(const void* memPtr) { return *(const size_t*) memPtr; }
|
|
||||||
|
|
||||||
MEM_STATIC void MEM_write16(void* memPtr, U16 value) { *(U16*)memPtr = value; }
|
|
||||||
MEM_STATIC void MEM_write32(void* memPtr, U32 value) { *(U32*)memPtr = value; }
|
|
||||||
MEM_STATIC void MEM_write64(void* memPtr, U64 value) { *(U64*)memPtr = value; }
|
|
||||||
|
|
||||||
#elif defined(MEM_FORCE_MEMORY_ACCESS) && (MEM_FORCE_MEMORY_ACCESS==1)
|
|
||||||
|
|
||||||
/* __pack instructions are safer, but compiler specific, hence potentially problematic for some compilers */
|
|
||||||
/* currently only defined for gcc and icc */
|
|
||||||
#if defined(_MSC_VER) || (defined(__INTEL_COMPILER) && defined(WIN32))
|
|
||||||
__pragma( pack(push, 1) )
|
|
||||||
typedef union { U16 u16; U32 u32; U64 u64; size_t st; } unalign;
|
|
||||||
__pragma( pack(pop) )
|
|
||||||
#else
|
|
||||||
typedef union { U16 u16; U32 u32; U64 u64; size_t st; } __attribute__((packed)) unalign;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
MEM_STATIC U16 MEM_read16(const void* ptr) { return ((const unalign*)ptr)->u16; }
|
|
||||||
MEM_STATIC U32 MEM_read32(const void* ptr) { return ((const unalign*)ptr)->u32; }
|
|
||||||
MEM_STATIC U64 MEM_read64(const void* ptr) { return ((const unalign*)ptr)->u64; }
|
|
||||||
MEM_STATIC U64 MEM_readST(const void* ptr) { return ((const unalign*)ptr)->st; }
|
|
||||||
|
|
||||||
MEM_STATIC void MEM_write16(void* memPtr, U16 value) { ((unalign*)memPtr)->u16 = value; }
|
|
||||||
MEM_STATIC void MEM_write32(void* memPtr, U32 value) { ((unalign*)memPtr)->u32 = value; }
|
|
||||||
MEM_STATIC void MEM_write64(void* memPtr, U64 value) { ((unalign*)memPtr)->u64 = value; }
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
/* default method, safe and standard.
|
|
||||||
can sometimes prove slower */
|
|
||||||
|
|
||||||
MEM_STATIC U16 MEM_read16(const void* memPtr)
|
MEM_STATIC U16 MEM_read16(const void* memPtr)
|
||||||
{
|
{
|
||||||
U16 val; memcpy(&val, memPtr, sizeof(val)); return val;
|
U16 val; memcpy(&val, memPtr, sizeof(val)); return val;
|
||||||
@ -178,13 +89,9 @@ MEM_STATIC void MEM_write64(void* memPtr, U64 value)
|
|||||||
memcpy(memPtr, &value, sizeof(value));
|
memcpy(memPtr, &value, sizeof(value));
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* MEM_FORCE_MEMORY_ACCESS */
|
|
||||||
|
|
||||||
MEM_STATIC U32 MEM_swap32(U32 in)
|
MEM_STATIC U32 MEM_swap32(U32 in)
|
||||||
{
|
{
|
||||||
#if defined(_MSC_VER) /* Visual Studio */
|
#if defined (__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__ >= 403)
|
||||||
return _byteswap_ulong(in);
|
|
||||||
#elif defined (__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__ >= 403)
|
|
||||||
return __builtin_bswap32(in);
|
return __builtin_bswap32(in);
|
||||||
#else
|
#else
|
||||||
return ((in << 24) & 0xff000000 ) |
|
return ((in << 24) & 0xff000000 ) |
|
||||||
@ -196,9 +103,7 @@ MEM_STATIC U32 MEM_swap32(U32 in)
|
|||||||
|
|
||||||
MEM_STATIC U64 MEM_swap64(U64 in)
|
MEM_STATIC U64 MEM_swap64(U64 in)
|
||||||
{
|
{
|
||||||
#if defined(_MSC_VER) /* Visual Studio */
|
#if defined (__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__ >= 403)
|
||||||
return _byteswap_uint64(in);
|
|
||||||
#elif defined (__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__ >= 403)
|
|
||||||
return __builtin_bswap64(in);
|
return __builtin_bswap64(in);
|
||||||
#else
|
#else
|
||||||
return ((in << 56) & 0xff00000000000000ULL) |
|
return ((in << 56) & 0xff00000000000000ULL) |
|
||||||
@ -367,8 +272,4 @@ MEM_STATIC U32 MEM_readMINMATCH(const void* memPtr, U32 length)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined (__cplusplus)
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* MEM_H_MODULE */
|
#endif /* MEM_H_MODULE */
|
||||||
|
@ -36,28 +36,6 @@
|
|||||||
/* *************************************
|
/* *************************************
|
||||||
* Tuning parameters
|
* Tuning parameters
|
||||||
***************************************/
|
***************************************/
|
||||||
/*!XXH_FORCE_MEMORY_ACCESS :
|
|
||||||
* By default, access to unaligned memory is controlled by `memcpy()`, which is safe and portable.
|
|
||||||
* Unfortunately, on some target/compiler combinations, the generated assembly is sub-optimal.
|
|
||||||
* The below switch allow to select different access method for improved performance.
|
|
||||||
* Method 0 (default) : use `memcpy()`. Safe and portable.
|
|
||||||
* Method 1 : `__packed` statement. It depends on compiler extension (ie, not portable).
|
|
||||||
* This method is safe if your compiler supports it, and *generally* as fast or faster than `memcpy`.
|
|
||||||
* Method 2 : direct access. This method doesn't depend on compiler but violate C standard.
|
|
||||||
* It can generate buggy code on targets which do not support unaligned memory accesses.
|
|
||||||
* But in some circumstances, it's the only known way to get the most performance (ie GCC + ARMv6)
|
|
||||||
* See http://stackoverflow.com/a/32095106/646947 for details.
|
|
||||||
* Prefer these methods in priority order (0 > 1 > 2)
|
|
||||||
*/
|
|
||||||
#ifndef XXH_FORCE_MEMORY_ACCESS /* can be defined externally, on command line for example */
|
|
||||||
# if defined(__GNUC__) && ( defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__) || defined(__ARM_ARCH_6T2__) )
|
|
||||||
# define XXH_FORCE_MEMORY_ACCESS 2
|
|
||||||
# elif (defined(__INTEL_COMPILER) && !defined(WIN32)) || \
|
|
||||||
(defined(__GNUC__) && ( defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7S__) ))
|
|
||||||
# define XXH_FORCE_MEMORY_ACCESS 1
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*!XXH_ACCEPT_NULL_INPUT_POINTER :
|
/*!XXH_ACCEPT_NULL_INPUT_POINTER :
|
||||||
* If the input pointer is a null pointer, xxHash default behavior is to trigger a memory access error, since it is a bad pointer.
|
* If the input pointer is a null pointer, xxHash default behavior is to trigger a memory access error, since it is a bad pointer.
|
||||||
* When this option is enabled, xxHash output for null input pointers will be the same as a null-length input.
|
* When this option is enabled, xxHash output for null input pointers will be the same as a null-length input.
|
||||||
@ -73,9 +51,7 @@
|
|||||||
* to improve speed for Big-endian CPU.
|
* to improve speed for Big-endian CPU.
|
||||||
* This option has no impact on Little_Endian CPU.
|
* This option has no impact on Little_Endian CPU.
|
||||||
*/
|
*/
|
||||||
#ifndef XXH_FORCE_NATIVE_FORMAT /* can be defined externally */
|
#define XXH_FORCE_NATIVE_FORMAT 0
|
||||||
# define XXH_FORCE_NATIVE_FORMAT 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*!XXH_FORCE_ALIGN_CHECK :
|
/*!XXH_FORCE_ALIGN_CHECK :
|
||||||
* This is a minor performance trick, only useful with lots of very small keys.
|
* This is a minor performance trick, only useful with lots of very small keys.
|
||||||
@ -83,13 +59,7 @@
|
|||||||
* The check costs one initial branch per hash; set to 0 when the input data
|
* The check costs one initial branch per hash; set to 0 when the input data
|
||||||
* is guaranteed to be aligned.
|
* is guaranteed to be aligned.
|
||||||
*/
|
*/
|
||||||
#ifndef XXH_FORCE_ALIGN_CHECK /* can be defined externally */
|
#define XXH_FORCE_ALIGN_CHECK 0
|
||||||
# if defined(__i386) || defined(_M_IX86) || defined(__x86_64__) || defined(_M_X64)
|
|
||||||
# define XXH_FORCE_ALIGN_CHECK 0
|
|
||||||
# else
|
|
||||||
# define XXH_FORCE_ALIGN_CHECK 1
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/* *************************************
|
/* *************************************
|
||||||
@ -108,127 +78,40 @@ static void* XXH_memcpy(void* dest, const void* src, size_t size) { return memcp
|
|||||||
# define XXH_STATIC_LINKING_ONLY
|
# define XXH_STATIC_LINKING_ONLY
|
||||||
#endif
|
#endif
|
||||||
#include "xxhash.h"
|
#include "xxhash.h"
|
||||||
|
#include "mem.h"
|
||||||
|
|
||||||
|
|
||||||
/* *************************************
|
/* *************************************
|
||||||
* Compiler Specific Options
|
* Compiler Specific Options
|
||||||
***************************************/
|
***************************************/
|
||||||
#ifdef _MSC_VER /* Visual Studio */
|
#define FORCE_INLINE static __attribute__((always_inline))
|
||||||
# pragma warning(disable : 4127) /* disable: C4127: conditional expression is constant */
|
|
||||||
# define FORCE_INLINE static __forceinline
|
|
||||||
#else
|
|
||||||
# if defined (__cplusplus) || defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 */
|
|
||||||
# ifdef __GNUC__
|
|
||||||
# define FORCE_INLINE static inline __attribute__((always_inline))
|
|
||||||
# else
|
|
||||||
# define FORCE_INLINE static inline
|
|
||||||
# endif
|
|
||||||
# else
|
|
||||||
# define FORCE_INLINE static
|
|
||||||
# endif /* __STDC_VERSION__ */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/* *************************************
|
|
||||||
* Basic Types
|
|
||||||
***************************************/
|
|
||||||
#ifndef MEM_MODULE
|
|
||||||
# define MEM_MODULE
|
|
||||||
# if !defined (__VMS) && (defined (__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) )
|
|
||||||
# include <stdint.h>
|
|
||||||
typedef uint8_t BYTE;
|
|
||||||
typedef uint16_t U16;
|
|
||||||
typedef uint32_t U32;
|
|
||||||
typedef int32_t S32;
|
|
||||||
typedef uint64_t U64;
|
|
||||||
# else
|
|
||||||
typedef unsigned char BYTE;
|
|
||||||
typedef unsigned short U16;
|
|
||||||
typedef unsigned int U32;
|
|
||||||
typedef signed int S32;
|
|
||||||
typedef unsigned long long U64; /* if your compiler doesn't support unsigned long long, replace by another 64-bit type here. Note that xxhash.h will also need to be updated. */
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#if (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS==2))
|
|
||||||
|
|
||||||
/* Force direct memory access. Only works on CPU which support unaligned memory access in hardware */
|
|
||||||
static U32 XXH_read32(const void* memPtr) { return *(const U32*) memPtr; }
|
|
||||||
static U64 XXH_read64(const void* memPtr) { return *(const U64*) memPtr; }
|
|
||||||
|
|
||||||
#elif (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS==1))
|
|
||||||
|
|
||||||
/* __pack instructions are safer, but compiler specific, hence potentially problematic for some compilers */
|
|
||||||
/* currently only defined for gcc and icc */
|
|
||||||
typedef union { U32 u32; U64 u64; } __attribute__((packed)) unalign;
|
|
||||||
|
|
||||||
static U32 XXH_read32(const void* ptr) { return ((const unalign*)ptr)->u32; }
|
|
||||||
static U64 XXH_read64(const void* ptr) { return ((const unalign*)ptr)->u64; }
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
/* portable and safe solution. Generally efficient.
|
|
||||||
* see : http://stackoverflow.com/a/32095106/646947
|
|
||||||
*/
|
|
||||||
|
|
||||||
static U32 XXH_read32(const void* memPtr)
|
static U32 XXH_read32(const void* memPtr)
|
||||||
{
|
{
|
||||||
U32 val;
|
return MEM_read32(memPtr);
|
||||||
memcpy(&val, memPtr, sizeof(val));
|
|
||||||
return val;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static U64 XXH_read64(const void* memPtr)
|
static U64 XXH_read64(const void* memPtr)
|
||||||
{
|
{
|
||||||
U64 val;
|
return MEM_read64(memPtr);
|
||||||
memcpy(&val, memPtr, sizeof(val));
|
|
||||||
return val;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* XXH_FORCE_DIRECT_MEMORY_ACCESS */
|
|
||||||
|
|
||||||
|
|
||||||
/* ****************************************
|
/* ****************************************
|
||||||
* Compiler-specific Functions and Macros
|
* Compiler-specific Functions and Macros
|
||||||
******************************************/
|
******************************************/
|
||||||
#define GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__)
|
#define XXH_rotl32(x,r) ((x << r) | (x >> (32 - r)))
|
||||||
|
#define XXH_rotl64(x,r) ((x << r) | (x >> (64 - r)))
|
||||||
|
|
||||||
/* Note : although _rotl exists for minGW (GCC under windows), performance seems poor */
|
|
||||||
#if defined(_MSC_VER)
|
|
||||||
# define XXH_rotl32(x,r) _rotl(x,r)
|
|
||||||
# define XXH_rotl64(x,r) _rotl64(x,r)
|
|
||||||
#else
|
|
||||||
# define XXH_rotl32(x,r) ((x << r) | (x >> (32 - r)))
|
|
||||||
# define XXH_rotl64(x,r) ((x << r) | (x >> (64 - r)))
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(_MSC_VER) /* Visual Studio */
|
|
||||||
# define XXH_swap32 _byteswap_ulong
|
|
||||||
# define XXH_swap64 _byteswap_uint64
|
|
||||||
#elif GCC_VERSION >= 403
|
|
||||||
# define XXH_swap32 __builtin_bswap32
|
|
||||||
# define XXH_swap64 __builtin_bswap64
|
|
||||||
#else
|
|
||||||
static U32 XXH_swap32 (U32 x)
|
static U32 XXH_swap32 (U32 x)
|
||||||
{
|
{
|
||||||
return ((x << 24) & 0xff000000 ) |
|
return MEM_swap32(x);
|
||||||
((x << 8) & 0x00ff0000 ) |
|
|
||||||
((x >> 8) & 0x0000ff00 ) |
|
|
||||||
((x >> 24) & 0x000000ff );
|
|
||||||
}
|
}
|
||||||
static U64 XXH_swap64 (U64 x)
|
static U64 XXH_swap64 (U64 x)
|
||||||
{
|
{
|
||||||
return ((x << 56) & 0xff00000000000000ULL) |
|
return MEM_swap64(x);
|
||||||
((x << 40) & 0x00ff000000000000ULL) |
|
|
||||||
((x << 24) & 0x0000ff0000000000ULL) |
|
|
||||||
((x << 8) & 0x000000ff00000000ULL) |
|
|
||||||
((x >> 8) & 0x00000000ff000000ULL) |
|
|
||||||
((x >> 24) & 0x0000000000ff0000ULL) |
|
|
||||||
((x >> 40) & 0x000000000000ff00ULL) |
|
|
||||||
((x >> 56) & 0x00000000000000ffULL);
|
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/* *************************************
|
/* *************************************
|
||||||
|
@ -64,10 +64,6 @@ XXH64 13.8 GB/s 1.9 GB/s
|
|||||||
XXH32 6.8 GB/s 6.0 GB/s
|
XXH32 6.8 GB/s 6.0 GB/s
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#if defined (__cplusplus)
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef XXHASH_H_5627135585666179
|
#ifndef XXHASH_H_5627135585666179
|
||||||
#define XXHASH_H_5627135585666179 1
|
#define XXHASH_H_5627135585666179 1
|
||||||
|
|
||||||
@ -91,22 +87,7 @@ typedef enum { XXH_OK=0, XXH_ERROR } XXH_errorcode;
|
|||||||
* `xxhash.c` is automatically included.
|
* `xxhash.c` is automatically included.
|
||||||
* It's not useful to compile and link it as a separate module anymore.
|
* It's not useful to compile and link it as a separate module anymore.
|
||||||
*/
|
*/
|
||||||
#ifdef XXH_PRIVATE_API
|
#define XXH_PUBLIC_API /* do nothing */
|
||||||
# ifndef XXH_STATIC_LINKING_ONLY
|
|
||||||
# define XXH_STATIC_LINKING_ONLY
|
|
||||||
# endif
|
|
||||||
# if defined(__GNUC__)
|
|
||||||
# define XXH_PUBLIC_API static __inline __attribute__((unused))
|
|
||||||
# elif defined (__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */)
|
|
||||||
# define XXH_PUBLIC_API static inline
|
|
||||||
# elif defined(_MSC_VER)
|
|
||||||
# define XXH_PUBLIC_API static __inline
|
|
||||||
# else
|
|
||||||
# define XXH_PUBLIC_API static /* this version may generate warnings for unused static functions; disable the relevant warning */
|
|
||||||
# endif
|
|
||||||
#else
|
|
||||||
# define XXH_PUBLIC_API /* do nothing */
|
|
||||||
#endif /* XXH_PRIVATE_API */
|
|
||||||
|
|
||||||
/*!XXH_NAMESPACE, aka Namespace Emulation :
|
/*!XXH_NAMESPACE, aka Namespace Emulation :
|
||||||
|
|
||||||
@ -119,29 +100,6 @@ with the value of XXH_NAMESPACE (so avoid to keep it NULL and avoid numeric valu
|
|||||||
Note that no change is required within the calling program as long as it includes `xxhash.h` :
|
Note that no change is required within the calling program as long as it includes `xxhash.h` :
|
||||||
regular symbol name will be automatically translated by this header.
|
regular symbol name will be automatically translated by this header.
|
||||||
*/
|
*/
|
||||||
#ifdef XXH_NAMESPACE
|
|
||||||
# define XXH_CAT(A,B) A##B
|
|
||||||
# define XXH_NAME2(A,B) XXH_CAT(A,B)
|
|
||||||
# define XXH32 XXH_NAME2(XXH_NAMESPACE, XXH32)
|
|
||||||
# define XXH64 XXH_NAME2(XXH_NAMESPACE, XXH64)
|
|
||||||
# define XXH_versionNumber XXH_NAME2(XXH_NAMESPACE, XXH_versionNumber)
|
|
||||||
# define XXH32_createState XXH_NAME2(XXH_NAMESPACE, XXH32_createState)
|
|
||||||
# define XXH64_createState XXH_NAME2(XXH_NAMESPACE, XXH64_createState)
|
|
||||||
# define XXH32_freeState XXH_NAME2(XXH_NAMESPACE, XXH32_freeState)
|
|
||||||
# define XXH64_freeState XXH_NAME2(XXH_NAMESPACE, XXH64_freeState)
|
|
||||||
# define XXH32_reset XXH_NAME2(XXH_NAMESPACE, XXH32_reset)
|
|
||||||
# define XXH64_reset XXH_NAME2(XXH_NAMESPACE, XXH64_reset)
|
|
||||||
# define XXH32_update XXH_NAME2(XXH_NAMESPACE, XXH32_update)
|
|
||||||
# define XXH64_update XXH_NAME2(XXH_NAMESPACE, XXH64_update)
|
|
||||||
# define XXH32_digest XXH_NAME2(XXH_NAMESPACE, XXH32_digest)
|
|
||||||
# define XXH64_digest XXH_NAME2(XXH_NAMESPACE, XXH64_digest)
|
|
||||||
# define XXH32_copyState XXH_NAME2(XXH_NAMESPACE, XXH32_copyState)
|
|
||||||
# define XXH64_copyState XXH_NAME2(XXH_NAMESPACE, XXH64_copyState)
|
|
||||||
# define XXH32_canonicalFromHash XXH_NAME2(XXH_NAMESPACE, XXH32_canonicalFromHash)
|
|
||||||
# define XXH64_canonicalFromHash XXH_NAME2(XXH_NAMESPACE, XXH64_canonicalFromHash)
|
|
||||||
# define XXH32_hashFromCanonical XXH_NAME2(XXH_NAMESPACE, XXH32_hashFromCanonical)
|
|
||||||
# define XXH64_hashFromCanonical XXH_NAME2(XXH_NAMESPACE, XXH64_hashFromCanonical)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/* *************************************
|
/* *************************************
|
||||||
@ -227,10 +185,6 @@ When done, free XXH state space if it was allocated dynamically.
|
|||||||
/* **************************
|
/* **************************
|
||||||
* Utils
|
* Utils
|
||||||
****************************/
|
****************************/
|
||||||
#if !(defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) /* ! C99 */
|
|
||||||
# define restrict /* disable restrict */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
XXH_PUBLIC_API void XXH32_copyState(XXH32_state_t* restrict dst_state, const XXH32_state_t* restrict src_state);
|
XXH_PUBLIC_API void XXH32_copyState(XXH32_state_t* restrict dst_state, const XXH32_state_t* restrict src_state);
|
||||||
XXH_PUBLIC_API void XXH64_copyState(XXH64_state_t* restrict dst_state, const XXH64_state_t* restrict src_state);
|
XXH_PUBLIC_API void XXH64_copyState(XXH64_state_t* restrict dst_state, const XXH64_state_t* restrict src_state);
|
||||||
|
|
||||||
@ -292,14 +246,4 @@ XXH_PUBLIC_API XXH64_hash_t XXH64_hashFromCanonical(const XXH64_canonical_t* src
|
|||||||
unsigned reserved[2]; /* never read nor write, will be removed in a future version */
|
unsigned reserved[2]; /* never read nor write, will be removed in a future version */
|
||||||
}; /* typedef'd to XXH64_state_t */
|
}; /* typedef'd to XXH64_state_t */
|
||||||
|
|
||||||
|
|
||||||
# ifdef XXH_PRIVATE_API
|
|
||||||
# include "xxhash.c" /* include xxhash functions as `static`, for inlining */
|
|
||||||
# endif
|
|
||||||
|
|
||||||
#endif /* XXH_STATIC_LINKING_ONLY && XXH_STATIC_H_3543687687345 */
|
#endif /* XXH_STATIC_LINKING_ONLY && XXH_STATIC_H_3543687687345 */
|
||||||
|
|
||||||
|
|
||||||
#if defined (__cplusplus)
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
@ -11,23 +11,6 @@
|
|||||||
/* ***************************************************************
|
/* ***************************************************************
|
||||||
* Tuning parameters
|
* Tuning parameters
|
||||||
*****************************************************************/
|
*****************************************************************/
|
||||||
/*!
|
|
||||||
* HEAPMODE :
|
|
||||||
* Select how default decompression function ZSTD_decompress() will allocate memory,
|
|
||||||
* in memory stack (0), or in memory heap (1, requires malloc())
|
|
||||||
*/
|
|
||||||
#ifndef ZSTD_HEAPMODE
|
|
||||||
# define ZSTD_HEAPMODE 1
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* LEGACY_SUPPORT :
|
|
||||||
* if set to 1, ZSTD_decompress() can decode older formats (v0.1+)
|
|
||||||
*/
|
|
||||||
#ifndef ZSTD_LEGACY_SUPPORT
|
|
||||||
# define ZSTD_LEGACY_SUPPORT 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* MAXWINDOWSIZE_DEFAULT :
|
* MAXWINDOWSIZE_DEFAULT :
|
||||||
* maximum window size accepted by DStream, by default.
|
* maximum window size accepted by DStream, by default.
|
||||||
@ -49,19 +32,7 @@
|
|||||||
#include "huf.h"
|
#include "huf.h"
|
||||||
#include "zstd_internal.h"
|
#include "zstd_internal.h"
|
||||||
|
|
||||||
#if defined(ZSTD_LEGACY_SUPPORT) && (ZSTD_LEGACY_SUPPORT>=1)
|
#define ZSTD_PREFETCH(ptr) __builtin_prefetch(ptr, 0, 0)
|
||||||
# include "zstd_legacy.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#if defined(_MSC_VER)
|
|
||||||
# include <mmintrin.h> /* https://msdn.microsoft.com/fr-fr/library/84szxsww(v=vs.90).aspx */
|
|
||||||
# define ZSTD_PREFETCH(ptr) _mm_prefetch((const char*)ptr, _MM_HINT_T0)
|
|
||||||
#elif defined(__GNUC__)
|
|
||||||
# define ZSTD_PREFETCH(ptr) __builtin_prefetch(ptr, 0, 0)
|
|
||||||
#else
|
|
||||||
# define ZSTD_PREFETCH(ptr) /* disabled */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*-*************************************
|
/*-*************************************
|
||||||
* Macros
|
* Macros
|
||||||
@ -220,9 +191,6 @@ unsigned ZSTD_isFrame(const void* buffer, size_t size)
|
|||||||
if (magic == ZSTD_MAGICNUMBER) return 1;
|
if (magic == ZSTD_MAGICNUMBER) return 1;
|
||||||
if ((magic & 0xFFFFFFF0U) == ZSTD_MAGIC_SKIPPABLE_START) return 1;
|
if ((magic & 0xFFFFFFF0U) == ZSTD_MAGIC_SKIPPABLE_START) return 1;
|
||||||
}
|
}
|
||||||
#if defined(ZSTD_LEGACY_SUPPORT) && (ZSTD_LEGACY_SUPPORT >= 1)
|
|
||||||
if (ZSTD_isLegacy(buffer, size)) return 1;
|
|
||||||
#endif
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -320,12 +288,6 @@ size_t ZSTD_getFrameParams(ZSTD_frameParams* fparamsPtr, const void* src, size_t
|
|||||||
* - ZSTD_CONTENTSIZE_ERROR if an error occurred (e.g. invalid magic number, srcSize too small) */
|
* - ZSTD_CONTENTSIZE_ERROR if an error occurred (e.g. invalid magic number, srcSize too small) */
|
||||||
unsigned long long ZSTD_getFrameContentSize(const void *src, size_t srcSize)
|
unsigned long long ZSTD_getFrameContentSize(const void *src, size_t srcSize)
|
||||||
{
|
{
|
||||||
#if defined(ZSTD_LEGACY_SUPPORT) && (ZSTD_LEGACY_SUPPORT >= 1)
|
|
||||||
if (ZSTD_isLegacy(src, srcSize)) {
|
|
||||||
unsigned long long const ret = ZSTD_getDecompressedSize_legacy(src, srcSize);
|
|
||||||
return ret == 0 ? ZSTD_CONTENTSIZE_UNKNOWN : ret;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
ZSTD_frameParams fParams;
|
ZSTD_frameParams fParams;
|
||||||
if (ZSTD_getFrameParams(&fParams, src, srcSize) != 0) return ZSTD_CONTENTSIZE_ERROR;
|
if (ZSTD_getFrameParams(&fParams, src, srcSize) != 0) return ZSTD_CONTENTSIZE_ERROR;
|
||||||
@ -1472,9 +1434,6 @@ size_t ZSTD_generateNxBytes(void* dst, size_t dstCapacity, BYTE byte, size_t len
|
|||||||
* @return : the compressed size of the frame starting at `src` */
|
* @return : the compressed size of the frame starting at `src` */
|
||||||
size_t ZSTD_findFrameCompressedSize(const void *src, size_t srcSize)
|
size_t ZSTD_findFrameCompressedSize(const void *src, size_t srcSize)
|
||||||
{
|
{
|
||||||
#if defined(ZSTD_LEGACY_SUPPORT) && (ZSTD_LEGACY_SUPPORT >= 1)
|
|
||||||
if (ZSTD_isLegacy(src, srcSize)) return ZSTD_findFrameCompressedSizeLegacy(src, srcSize);
|
|
||||||
#endif
|
|
||||||
if (srcSize >= ZSTD_skippableHeaderSize &&
|
if (srcSize >= ZSTD_skippableHeaderSize &&
|
||||||
(MEM_readLE32(src) & 0xFFFFFFF0U) == ZSTD_MAGIC_SKIPPABLE_START) {
|
(MEM_readLE32(src) & 0xFFFFFFF0U) == ZSTD_MAGIC_SKIPPABLE_START) {
|
||||||
return ZSTD_skippableHeaderSize + MEM_readLE32((const BYTE*)src + 4);
|
return ZSTD_skippableHeaderSize + MEM_readLE32((const BYTE*)src + 4);
|
||||||
@ -1618,24 +1577,6 @@ static size_t ZSTD_decompressMultiFrame(ZSTD_DCtx* dctx,
|
|||||||
while (srcSize >= ZSTD_frameHeaderSize_prefix) {
|
while (srcSize >= ZSTD_frameHeaderSize_prefix) {
|
||||||
U32 magicNumber;
|
U32 magicNumber;
|
||||||
|
|
||||||
#if defined(ZSTD_LEGACY_SUPPORT) && (ZSTD_LEGACY_SUPPORT >= 1)
|
|
||||||
if (ZSTD_isLegacy(src, srcSize)) {
|
|
||||||
size_t decodedSize;
|
|
||||||
size_t const frameSize = ZSTD_findFrameCompressedSizeLegacy(src, srcSize);
|
|
||||||
if (ZSTD_isError(frameSize)) return frameSize;
|
|
||||||
|
|
||||||
decodedSize = ZSTD_decompressLegacy(dst, dstCapacity, src, frameSize, dict, dictSize);
|
|
||||||
|
|
||||||
dst = (BYTE*)dst + decodedSize;
|
|
||||||
dstCapacity -= decodedSize;
|
|
||||||
|
|
||||||
src = (const BYTE*)src + frameSize;
|
|
||||||
srcSize -= frameSize;
|
|
||||||
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
magicNumber = MEM_readLE32(src);
|
magicNumber = MEM_readLE32(src);
|
||||||
if (magicNumber != ZSTD_MAGICNUMBER) {
|
if (magicNumber != ZSTD_MAGICNUMBER) {
|
||||||
if ((magicNumber & 0xFFFFFFF0U) == ZSTD_MAGIC_SKIPPABLE_START) {
|
if ((magicNumber & 0xFFFFFFF0U) == ZSTD_MAGIC_SKIPPABLE_START) {
|
||||||
@ -1698,17 +1639,8 @@ size_t ZSTD_decompressDCtx(ZSTD_DCtx* dctx, void* dst, size_t dstCapacity, const
|
|||||||
|
|
||||||
size_t ZSTD_decompress(void* dst, size_t dstCapacity, const void* src, size_t srcSize)
|
size_t ZSTD_decompress(void* dst, size_t dstCapacity, const void* src, size_t srcSize)
|
||||||
{
|
{
|
||||||
#if defined(ZSTD_HEAPMODE) && (ZSTD_HEAPMODE==1)
|
|
||||||
size_t regenSize;
|
|
||||||
ZSTD_DCtx* const dctx = ZSTD_createDCtx();
|
|
||||||
if (dctx==NULL) return ERROR(memory_allocation);
|
|
||||||
regenSize = ZSTD_decompressDCtx(dctx, dst, dstCapacity, src, srcSize);
|
|
||||||
ZSTD_freeDCtx(dctx);
|
|
||||||
return regenSize;
|
|
||||||
#else /* stack mode */
|
|
||||||
ZSTD_DCtx dctx;
|
ZSTD_DCtx dctx;
|
||||||
return ZSTD_decompressDCtx(&dctx, dst, dstCapacity, src, srcSize);
|
return ZSTD_decompressDCtx(&dctx, dst, dstCapacity, src, srcSize);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -2216,10 +2148,6 @@ size_t ZSTD_freeDStream(ZSTD_DStream* zds)
|
|||||||
zds->inBuff = NULL;
|
zds->inBuff = NULL;
|
||||||
ZSTD_free(zds->outBuff, cMem);
|
ZSTD_free(zds->outBuff, cMem);
|
||||||
zds->outBuff = NULL;
|
zds->outBuff = NULL;
|
||||||
#if defined(ZSTD_LEGACY_SUPPORT) && (ZSTD_LEGACY_SUPPORT >= 1)
|
|
||||||
if (zds->legacyContext)
|
|
||||||
ZSTD_freeLegacyStreamContext(zds->legacyContext, zds->previousLegacyVersion);
|
|
||||||
#endif
|
|
||||||
ZSTD_free(zds, cMem);
|
ZSTD_free(zds, cMem);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -2306,11 +2234,6 @@ size_t ZSTD_decompressStream(ZSTD_DStream* zds, ZSTD_outBuffer* output, ZSTD_inB
|
|||||||
char* op = ostart;
|
char* op = ostart;
|
||||||
U32 someMoreWork = 1;
|
U32 someMoreWork = 1;
|
||||||
|
|
||||||
#if defined(ZSTD_LEGACY_SUPPORT) && (ZSTD_LEGACY_SUPPORT>=1)
|
|
||||||
if (zds->legacyVersion)
|
|
||||||
return ZSTD_decompressLegacyStream(zds->legacyContext, zds->legacyVersion, output, input);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
while (someMoreWork) {
|
while (someMoreWork) {
|
||||||
switch(zds->stage)
|
switch(zds->stage)
|
||||||
{
|
{
|
||||||
@ -2321,21 +2244,7 @@ size_t ZSTD_decompressStream(ZSTD_DStream* zds, ZSTD_outBuffer* output, ZSTD_inB
|
|||||||
case zdss_loadHeader :
|
case zdss_loadHeader :
|
||||||
{ size_t const hSize = ZSTD_getFrameParams(&zds->fParams, zds->headerBuffer, zds->lhSize);
|
{ size_t const hSize = ZSTD_getFrameParams(&zds->fParams, zds->headerBuffer, zds->lhSize);
|
||||||
if (ZSTD_isError(hSize))
|
if (ZSTD_isError(hSize))
|
||||||
#if defined(ZSTD_LEGACY_SUPPORT) && (ZSTD_LEGACY_SUPPORT>=1)
|
|
||||||
{ U32 const legacyVersion = ZSTD_isLegacy(istart, iend-istart);
|
|
||||||
if (legacyVersion) {
|
|
||||||
const void* const dict = zds->ddict ? zds->ddict->dictContent : NULL;
|
|
||||||
size_t const dictSize = zds->ddict ? zds->ddict->dictSize : 0;
|
|
||||||
CHECK_F(ZSTD_initLegacyStream(&zds->legacyContext, zds->previousLegacyVersion, legacyVersion,
|
|
||||||
dict, dictSize));
|
|
||||||
zds->legacyVersion = zds->previousLegacyVersion = legacyVersion;
|
|
||||||
return ZSTD_decompressLegacyStream(zds->legacyContext, zds->legacyVersion, output, input);
|
|
||||||
} else {
|
|
||||||
return hSize; /* error */
|
|
||||||
} }
|
|
||||||
#else
|
|
||||||
return hSize;
|
return hSize;
|
||||||
#endif
|
|
||||||
if (hSize != 0) { /* need more input */
|
if (hSize != 0) { /* need more input */
|
||||||
size_t const toLoad = hSize - zds->lhSize; /* if hSize!=0, hSize > zds->lhSize */
|
size_t const toLoad = hSize - zds->lhSize; /* if hSize!=0, hSize > zds->lhSize */
|
||||||
if (toLoad > (size_t)(iend-ip)) { /* not enough input to load full header */
|
if (toLoad > (size_t)(iend-ip)) { /* not enough input to load full header */
|
||||||
|
@ -10,27 +10,12 @@
|
|||||||
#ifndef ZSTD_ERRORS_H_398273423
|
#ifndef ZSTD_ERRORS_H_398273423
|
||||||
#define ZSTD_ERRORS_H_398273423
|
#define ZSTD_ERRORS_H_398273423
|
||||||
|
|
||||||
#if defined (__cplusplus)
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*===== dependency =====*/
|
/*===== dependency =====*/
|
||||||
#include <stddef.h> /* size_t */
|
#include <stddef.h> /* size_t */
|
||||||
|
|
||||||
|
|
||||||
/* ===== ZSTDERRORLIB_API : control library symbols visibility ===== */
|
/* ===== ZSTDERRORLIB_API : control library symbols visibility ===== */
|
||||||
#if defined(__GNUC__) && (__GNUC__ >= 4)
|
#define ZSTDERRORLIB_API
|
||||||
# define ZSTDERRORLIB_VISIBILITY __attribute__ ((visibility ("default")))
|
|
||||||
#else
|
|
||||||
# define ZSTDERRORLIB_VISIBILITY
|
|
||||||
#endif
|
|
||||||
#if defined(ZSTD_DLL_EXPORT) && (ZSTD_DLL_EXPORT==1)
|
|
||||||
# define ZSTDERRORLIB_API __declspec(dllexport) ZSTDERRORLIB_VISIBILITY
|
|
||||||
#elif defined(ZSTD_DLL_IMPORT) && (ZSTD_DLL_IMPORT==1)
|
|
||||||
# define ZSTDERRORLIB_API __declspec(dllimport) ZSTDERRORLIB_VISIBILITY /* It isn't required but allows to generate better code, saving a function pointer load from the IAT and an indirect jump.*/
|
|
||||||
#else
|
|
||||||
# define ZSTDERRORLIB_API ZSTDERRORLIB_VISIBILITY
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*-****************************************
|
/*-****************************************
|
||||||
* error codes list
|
* error codes list
|
||||||
@ -67,9 +52,4 @@ typedef enum {
|
|||||||
ZSTDERRORLIB_API ZSTD_ErrorCode ZSTD_getErrorCode(size_t functionResult);
|
ZSTDERRORLIB_API ZSTD_ErrorCode ZSTD_getErrorCode(size_t functionResult);
|
||||||
ZSTDERRORLIB_API const char* ZSTD_getErrorString(ZSTD_ErrorCode code);
|
ZSTDERRORLIB_API const char* ZSTD_getErrorString(ZSTD_ErrorCode code);
|
||||||
|
|
||||||
|
|
||||||
#if defined (__cplusplus)
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* ZSTD_ERRORS_H_398273423 */
|
#endif /* ZSTD_ERRORS_H_398273423 */
|
||||||
|
@ -13,33 +13,8 @@
|
|||||||
/*-*******************************************************
|
/*-*******************************************************
|
||||||
* Compiler specifics
|
* Compiler specifics
|
||||||
*********************************************************/
|
*********************************************************/
|
||||||
#ifdef _MSC_VER /* Visual Studio */
|
#define FORCE_INLINE static __attribute__((always_inline))
|
||||||
# define FORCE_INLINE static __forceinline
|
#define FORCE_NOINLINE static __attribute__((__noinline__))
|
||||||
# include <intrin.h> /* For Visual 2005 */
|
|
||||||
# pragma warning(disable : 4127) /* disable: C4127: conditional expression is constant */
|
|
||||||
# pragma warning(disable : 4324) /* disable: C4324: padded structure */
|
|
||||||
# pragma warning(disable : 4100) /* disable: C4100: unreferenced formal parameter */
|
|
||||||
#else
|
|
||||||
# if defined (__cplusplus) || defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 */
|
|
||||||
# ifdef __GNUC__
|
|
||||||
# define FORCE_INLINE static inline __attribute__((always_inline))
|
|
||||||
# else
|
|
||||||
# define FORCE_INLINE static inline
|
|
||||||
# endif
|
|
||||||
# else
|
|
||||||
# define FORCE_INLINE static
|
|
||||||
# endif /* __STDC_VERSION__ */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
|
||||||
# define FORCE_NOINLINE static __declspec(noinline)
|
|
||||||
#else
|
|
||||||
# ifdef __GNUC__
|
|
||||||
# define FORCE_NOINLINE static __attribute__((__noinline__))
|
|
||||||
# else
|
|
||||||
# define FORCE_NOINLINE static
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/*-*************************************
|
/*-*************************************
|
||||||
|
Loading…
Reference in New Issue
Block a user