#if defined(_MSC_VER)
#ifndef __RUCC_INTRIN_H
#define __RUCC_INTRIN_H
#include <x86intrin.h>
unsigned char _BitScanForward(unsigned long *_Index, unsigned long _Mask);
unsigned char _BitScanForward64(unsigned long *_Index, unsigned long long _Mask);
unsigned char _BitScanReverse(unsigned long *_Index, unsigned long _Mask);
unsigned char _BitScanReverse64(unsigned long *_Index, unsigned long long _Mask);
typedef long long __m256i __attribute__((__vector_size__(32), __may_alias__));
typedef short __rucc_v16hi __attribute__((__vector_size__(32)));
typedef unsigned char __rucc_v32qu __attribute__((__vector_size__(32)));
static __inline__ __m256i __attribute__((__always_inline__))
_mm256_loadu_si256(__m256i const *__p)
{
__rucc_v32qu __to;
const unsigned char *__from = (const unsigned char *)__p;
int __i;
for (__i = 0; __i < 32; __i++)
__to[__i] = __from[__i];
return (__m256i)__to;
}
static __inline__ __m256i __attribute__((__always_inline__))
_mm256_broadcastw_epi16(__m128i __a)
{
short __low = ((__v8hi)__a)[0];
__rucc_v16hi __to;
int __i;
for (__i = 0; __i < 16; __i++)
__to[__i] = __low;
return (__m256i)__to;
}
static __inline__ __m256i __attribute__((__always_inline__))
_mm256_cmpeq_epi16(__m256i __a, __m256i __b)
{
return (__m256i)((__rucc_v16hi)__a == (__rucc_v16hi)__b);
}
static __inline__ int __attribute__((__always_inline__)) _mm256_movemask_epi8(__m256i __a)
{
__rucc_v32qu __from = (__rucc_v32qu)__a;
unsigned int __answer = 0;
int __i;
for (__i = 0; __i < 32; __i++)
__answer |= (unsigned int)(__from[__i] >> 7) << __i;
return (int)__answer;
}
#endif
#else
#include_next <intrin.h>
#endif