Blame lib/marisa/grimoire/intrin.h

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_