#ifndef UTIL_ARCH_X86_H_
#define UTIL_ARCH_X86_H_
#if defined(__SSE2__) || defined(_M_X64) || (_M_IX86_FP >= 2)
#define HAVE_SSE2
#define HAVE_SIMD_128_BITS
#endif
#if defined(__SSE4_1__) || defined(__AVX__)
#define HAVE_SSE41
#define HAVE_SIMD_128_BITS
#endif
#if defined(__SSE4_2__) || defined(__AVX__)
#define HAVE_SSE42
#define HAVE_SIMD_128_BITS
#endif
#if defined(__AVX__) && defined(BUILD_AVX2)
#define HAVE_AVX
#define HAVE_SIMD_256_BITS
#endif
#if defined(__AVX2__) && defined(BUILD_AVX2)
#define HAVE_AVX2
#define HAVE_SIMD_256_BITS
#endif
#if defined(__AVX512BW__) && defined(BUILD_AVX512)
#define HAVE_AVX512
#define HAVE_SIMD_512_BITS
#endif
#if defined(__AVX512VBMI__) && defined(BUILD_AVX512VBMI)
#define HAVE_AVX512VBMI
#endif
#if defined(HAVE_SIMD_512_BITS)
#define CHUNKSIZE 512
#define VECTORSIZE 64
#elif defined(HAVE_SIMD_256_BITS)
#define CHUNKSIZE 256
#define VECTORSIZE 32
#elif defined(HAVE_SIMD_128_BITS)
#define CHUNKSIZE 128
#define VECTORSIZE 16
#endif
#if defined(__POPCNT__)
#define HAVE_POPCOUNT_INSTR
#endif
#if defined(__BMI__)
#define HAVE_BMI
#endif
#if defined(__BMI2__)
#define HAVE_BMI2
#endif
#endif