13#ifndef LZMA_MEMCMPLEN_H
14#define LZMA_MEMCMPLEN_H
18#ifdef HAVE_IMMINTRIN_H
19# include <immintrin.h>
49#if defined(TUKLIB_FAST_UNALIGNED_ACCESS) \
50 && ((TUKLIB_GNUC_REQ(3, 4) && defined(__x86_64__)) \
51 || (defined(__INTEL_COMPILER) && defined(__x86_64__)) \
52 || (defined(__INTEL_COMPILER) && defined(_M_X64)) \
53 || (defined(_MSC_VER) && defined(_M_X64)))
58#define LZMA_MEMCMPLEN_EXTRA 8
64 _BitScanForward64(&tmp, x);
65 len += (uint32_t)tmp >> 3;
67 len += (uint32_t)__builtin_ctzll(x) >> 3;
77#elif defined(TUKLIB_FAST_UNALIGNED_ACCESS) \
78 && defined(HAVE__MM_MOVEMASK_EPI8) \
79 && (defined(__SSE2__) \
80 || (defined(_MSC_VER) && defined(_M_IX86_FP) \
90# define LZMA_MEMCMPLEN_EXTRA 16
92 const uint32_t x = 0xFFFF ^ _mm_movemask_epi8(_mm_cmpeq_epi8(
93 _mm_loadu_si128((
const __m128i *)(buf1 +
len)),
94 _mm_loadu_si128((
const __m128i *)(
buf2 +
len))));
106#elif defined(TUKLIB_FAST_UNALIGNED_ACCESS) && !defined(WORDS_BIGENDIAN)
108# define LZMA_MEMCMPLEN_EXTRA 4
112 if ((x & 0xFFFF) == 0) {
128#elif defined(TUKLIB_FAST_UNALIGNED_ACCESS) && defined(WORDS_BIGENDIAN)
130# define LZMA_MEMCMPLEN_EXTRA 4
134 if ((x & 0xFFFF0000) == 0) {
139 if ((x & 0xFF000000) == 0)
152# define LZMA_MEMCMPLEN_EXTRA 0
#define assert(condition)
Definition lz4.c:273
#define const
Definition zconf.h:230
Definitions common to the whole liblzma library.
#define lzma_attribute(attr)
Definition lzma.h:259
#define UINT32_MAX
Definition lzma.h:158
#define my_min(x, y)
Definition sysdefs.h:185
static uint32_t const uint8_t uint32_t len
Definition memcmplen.h:44
static uint32_t const uint8_t * buf2
Definition memcmplen.h:43
static uint32_t const uint8_t uint32_t uint32_t limit
Definition memcmplen.h:45
#define read32ne
Definition tuklib_integer.h:467
#define read64ne
Definition tuklib_integer.h:468