|
Packit |
de3218 |
#ifndef MARISA_GRIMOIRE_INTRIN_H_
|
|
Packit |
de3218 |
#define MARISA_GRIMOIRE_INTRIN_H_
|
|
Packit |
de3218 |
|
|
Packit |
de3218 |
#include "../base.h"
|
|
Packit |
de3218 |
|
|
Packit |
de3218 |
#if defined(__x86_64__) || defined(_M_X64)
|
|
Packit |
de3218 |
#define MARISA_X64
|
|
Packit |
de3218 |
#elif defined(__i386__) || defined(_M_IX86)
|
|
Packit |
de3218 |
#define MARISA_X86
|
|
Packit |
de3218 |
#else // defined(__i386__) || defined(_M_IX86)
|
|
Packit |
de3218 |
#ifdef MARISA_USE_POPCNT
|
|
Packit |
de3218 |
#undef MARISA_USE_POPCNT
|
|
Packit |
de3218 |
#endif // MARISA_USE_POPCNT
|
|
Packit |
de3218 |
#ifdef MARISA_USE_SSE4A
|
|
Packit |
de3218 |
#undef MARISA_USE_SSE4A
|
|
Packit |
de3218 |
#endif // MARISA_USE_SSE4A
|
|
Packit |
de3218 |
#ifdef MARISA_USE_SSE4
|
|
Packit |
de3218 |
#undef MARISA_USE_SSE4
|
|
Packit |
de3218 |
#endif // MARISA_USE_SSE4
|
|
Packit |
de3218 |
#ifdef MARISA_USE_SSE4_2
|
|
Packit |
de3218 |
#undef MARISA_USE_SSE4_2
|
|
Packit |
de3218 |
#endif // MARISA_USE_SSE4_2
|
|
Packit |
de3218 |
#ifdef MARISA_USE_SSE4_1
|
|
Packit |
de3218 |
#undef MARISA_USE_SSE4_1
|
|
Packit |
de3218 |
#endif // MARISA_USE_SSE4_1
|
|
Packit |
de3218 |
#ifdef MARISA_USE_SSSE3
|
|
Packit |
de3218 |
#undef MARISA_USE_SSSE3
|
|
Packit |
de3218 |
#endif // MARISA_USE_SSSE3
|
|
Packit |
de3218 |
#ifdef MARISA_USE_SSE3
|
|
Packit |
de3218 |
#undef MARISA_USE_SSE3
|
|
Packit |
de3218 |
#endif // MARISA_USE_SSE3
|
|
Packit |
de3218 |
#ifdef MARISA_USE_SSE2
|
|
Packit |
de3218 |
#undef MARISA_USE_SSE2
|
|
Packit |
de3218 |
#endif // MARISA_USE_SSE2
|
|
Packit |
de3218 |
#endif // defined(__i386__) || defined(_M_IX86)
|
|
Packit |
de3218 |
|
|
Packit |
de3218 |
#ifdef MARISA_USE_POPCNT
|
|
Packit |
de3218 |
#ifndef MARISA_USE_SSE3
|
|
Packit |
de3218 |
#define MARISA_USE_SSE3
|
|
Packit |
de3218 |
#endif // MARISA_USE_SSE3
|
|
Packit |
de3218 |
#ifdef _MSC_VER
|
|
Packit |
de3218 |
#include <intrin.h>
|
|
Packit |
de3218 |
#else // _MSC_VER
|
|
Packit |
de3218 |
#include <popcntintrin.h>
|
|
Packit |
de3218 |
#endif // _MSC_VER
|
|
Packit |
de3218 |
#endif // MARISA_USE_POPCNT
|
|
Packit |
de3218 |
|
|
Packit |
de3218 |
#ifdef MARISA_USE_SSE4A
|
|
Packit |
de3218 |
#ifndef MARISA_USE_SSE3
|
|
Packit |
de3218 |
#define MARISA_USE_SSE3
|
|
Packit |
de3218 |
#endif // MARISA_USE_SSE3
|
|
Packit |
de3218 |
#ifndef MARISA_USE_POPCNT
|
|
Packit |
de3218 |
#define MARISA_USE_POPCNT
|
|
Packit |
de3218 |
#endif // MARISA_USE_POPCNT
|
|
Packit |
de3218 |
#endif // MARISA_USE_SSE4A
|
|
Packit |
de3218 |
|
|
Packit |
de3218 |
#ifdef MARISA_USE_SSE4
|
|
Packit |
de3218 |
#ifndef MARISA_USE_SSE4_2
|
|
Packit |
de3218 |
#define MARISA_USE_SSE4_2
|
|
Packit |
de3218 |
#endif // MARISA_USE_SSE4_2
|
|
Packit |
de3218 |
#endif // MARISA_USE_SSE4
|
|
Packit |
de3218 |
|
|
Packit |
de3218 |
#ifdef MARISA_USE_SSE4_2
|
|
Packit |
de3218 |
#ifndef MARISA_USE_SSE4_1
|
|
Packit |
de3218 |
#define MARISA_USE_SSE4_1
|
|
Packit |
de3218 |
#endif // MARISA_USE_SSE4_1
|
|
Packit |
de3218 |
#ifndef MARISA_USE_POPCNT
|
|
Packit |
de3218 |
#define MARISA_USE_POPCNT
|
|
Packit |
de3218 |
#endif // MARISA_USE_POPCNT
|
|
Packit |
de3218 |
#endif // MARISA_USE_SSE4_2
|
|
Packit |
de3218 |
|
|
Packit |
de3218 |
#ifdef MARISA_USE_SSE4_1
|
|
Packit |
de3218 |
#ifndef MARISA_USE_SSSE3
|
|
Packit |
de3218 |
#define MARISA_USE_SSSE3
|
|
Packit |
de3218 |
#endif // MARISA_USE_SSSE3
|
|
Packit |
de3218 |
#endif // MARISA_USE_SSE4_1
|
|
Packit |
de3218 |
|
|
Packit |
de3218 |
#ifdef MARISA_USE_SSSE3
|
|
Packit |
de3218 |
#ifndef MARISA_USE_SSE3
|
|
Packit |
de3218 |
#define MARISA_USE_SSE3
|
|
Packit |
de3218 |
#endif // MARISA_USE_SSE3
|
|
Packit |
de3218 |
#ifdef MARISA_X64
|
|
Packit |
de3218 |
#define MARISA_X64_SSSE3
|
|
Packit |
de3218 |
#else // MARISA_X64
|
|
Packit |
de3218 |
#define MARISA_X86_SSSE3
|
|
Packit |
de3218 |
#endif // MAIRSA_X64
|
|
Packit |
de3218 |
#include <tmmintrin.h>
|
|
Packit |
de3218 |
#endif // MARISA_USE_SSSE3
|
|
Packit |
de3218 |
|
|
Packit |
de3218 |
#ifdef MARISA_USE_SSE3
|
|
Packit |
de3218 |
#ifndef MARISA_USE_SSE2
|
|
Packit |
de3218 |
#define MARISA_USE_SSE2
|
|
Packit |
de3218 |
#endif // MARISA_USE_SSE2
|
|
Packit |
de3218 |
#endif // MARISA_USE_SSE3
|
|
Packit |
de3218 |
|
|
Packit |
de3218 |
#ifdef MARISA_USE_SSE2
|
|
Packit |
de3218 |
#ifdef MARISA_X64
|
|
Packit |
de3218 |
#define MARISA_X64_SSE2
|
|
Packit |
de3218 |
#else // MARISA_X64
|
|
Packit |
de3218 |
#define MARISA_X86_SSE2
|
|
Packit |
de3218 |
#endif // MAIRSA_X64
|
|
Packit |
de3218 |
#include <emmintrin.h>
|
|
Packit |
de3218 |
#endif // MARISA_USE_SSE2
|
|
Packit |
de3218 |
|
|
Packit |
de3218 |
#ifdef _MSC_VER
|
|
Packit |
de3218 |
#if MARISA_WORD_SIZE == 64
|
|
Packit |
de3218 |
#include <intrin.h>
|
|
Packit |
de3218 |
#pragma intrinsic(_BitScanForward64)
|
|
Packit |
de3218 |
#else // MARISA_WORD_SIZE == 64
|
|
Packit |
de3218 |
#include <intrin.h>
|
|
Packit |
de3218 |
#pragma intrinsic(_BitScanForward)
|
|
Packit |
de3218 |
#endif // MARISA_WORD_SIZE == 64
|
|
Packit |
de3218 |
#endif // _MSC_VER
|
|
Packit |
de3218 |
|
|
Packit |
de3218 |
#endif // MARISA_GRIMOIRE_INTRIN_H_
|