1*ab8db090SAndroid Build Coastguard Worker #ifndef MARISA_GRIMOIRE_INTRIN_H_ 2*ab8db090SAndroid Build Coastguard Worker #define MARISA_GRIMOIRE_INTRIN_H_ 3*ab8db090SAndroid Build Coastguard Worker 4*ab8db090SAndroid Build Coastguard Worker #include "marisa/base.h" 5*ab8db090SAndroid Build Coastguard Worker 6*ab8db090SAndroid Build Coastguard Worker #if defined(__x86_64__) || defined(_M_X64) 7*ab8db090SAndroid Build Coastguard Worker #define MARISA_X64 8*ab8db090SAndroid Build Coastguard Worker #elif defined(__i386__) || defined(_M_IX86) 9*ab8db090SAndroid Build Coastguard Worker #define MARISA_X86 10*ab8db090SAndroid Build Coastguard Worker #else // defined(__i386__) || defined(_M_IX86) 11*ab8db090SAndroid Build Coastguard Worker #ifdef MARISA_USE_BMI2 12*ab8db090SAndroid Build Coastguard Worker #undef MARISA_USE_BMI2 13*ab8db090SAndroid Build Coastguard Worker #endif // MARISA_USE_BMI2 14*ab8db090SAndroid Build Coastguard Worker #ifdef MARISA_USE_BMI 15*ab8db090SAndroid Build Coastguard Worker #undef MARISA_USE_BMI 16*ab8db090SAndroid Build Coastguard Worker #endif // MARISA_USE_BMI 17*ab8db090SAndroid Build Coastguard Worker #ifdef MARISA_USE_POPCNT 18*ab8db090SAndroid Build Coastguard Worker #undef MARISA_USE_POPCNT 19*ab8db090SAndroid Build Coastguard Worker #endif // MARISA_USE_POPCNT 20*ab8db090SAndroid Build Coastguard Worker #ifdef MARISA_USE_SSE4A 21*ab8db090SAndroid Build Coastguard Worker #undef MARISA_USE_SSE4A 22*ab8db090SAndroid Build Coastguard Worker #endif // MARISA_USE_SSE4A 23*ab8db090SAndroid Build Coastguard Worker #ifdef MARISA_USE_SSE4 24*ab8db090SAndroid Build Coastguard Worker #undef MARISA_USE_SSE4 25*ab8db090SAndroid Build Coastguard Worker #endif // MARISA_USE_SSE4 26*ab8db090SAndroid Build Coastguard Worker #ifdef MARISA_USE_SSE4_2 27*ab8db090SAndroid Build Coastguard Worker #undef MARISA_USE_SSE4_2 28*ab8db090SAndroid Build Coastguard Worker #endif // MARISA_USE_SSE4_2 29*ab8db090SAndroid Build Coastguard Worker #ifdef MARISA_USE_SSE4_1 30*ab8db090SAndroid Build Coastguard Worker #undef MARISA_USE_SSE4_1 31*ab8db090SAndroid Build Coastguard Worker #endif // MARISA_USE_SSE4_1 32*ab8db090SAndroid Build Coastguard Worker #ifdef MARISA_USE_SSSE3 33*ab8db090SAndroid Build Coastguard Worker #undef MARISA_USE_SSSE3 34*ab8db090SAndroid Build Coastguard Worker #endif // MARISA_USE_SSSE3 35*ab8db090SAndroid Build Coastguard Worker #ifdef MARISA_USE_SSE3 36*ab8db090SAndroid Build Coastguard Worker #undef MARISA_USE_SSE3 37*ab8db090SAndroid Build Coastguard Worker #endif // MARISA_USE_SSE3 38*ab8db090SAndroid Build Coastguard Worker #ifdef MARISA_USE_SSE2 39*ab8db090SAndroid Build Coastguard Worker #undef MARISA_USE_SSE2 40*ab8db090SAndroid Build Coastguard Worker #endif // MARISA_USE_SSE2 41*ab8db090SAndroid Build Coastguard Worker #endif // defined(__i386__) || defined(_M_IX86) 42*ab8db090SAndroid Build Coastguard Worker 43*ab8db090SAndroid Build Coastguard Worker #ifdef MARISA_USE_BMI2 44*ab8db090SAndroid Build Coastguard Worker #ifndef MARISA_USE_BMI 45*ab8db090SAndroid Build Coastguard Worker #define MARISA_USE_BMI 46*ab8db090SAndroid Build Coastguard Worker #endif // MARISA_USE_BMI 47*ab8db090SAndroid Build Coastguard Worker #ifdef _MSC_VER 48*ab8db090SAndroid Build Coastguard Worker #include <immintrin.h> 49*ab8db090SAndroid Build Coastguard Worker #else // _MSC_VER 50*ab8db090SAndroid Build Coastguard Worker #include <x86intrin.h> 51*ab8db090SAndroid Build Coastguard Worker #endif // _MSC_VER 52*ab8db090SAndroid Build Coastguard Worker #endif // MARISA_USE_BMI2 53*ab8db090SAndroid Build Coastguard Worker 54*ab8db090SAndroid Build Coastguard Worker #ifdef MARISA_USE_BMI 55*ab8db090SAndroid Build Coastguard Worker #ifndef MARISA_USE_SSE4 56*ab8db090SAndroid Build Coastguard Worker #define MARISA_USE_SSE4 57*ab8db090SAndroid Build Coastguard Worker #endif // MARISA_USE_SSE4 58*ab8db090SAndroid Build Coastguard Worker #endif // MARISA_USE_BMI 59*ab8db090SAndroid Build Coastguard Worker 60*ab8db090SAndroid Build Coastguard Worker #ifdef MARISA_USE_SSE4A 61*ab8db090SAndroid Build Coastguard Worker #ifndef MARISA_USE_SSE3 62*ab8db090SAndroid Build Coastguard Worker #define MARISA_USE_SSE3 63*ab8db090SAndroid Build Coastguard Worker #endif // MARISA_USE_SSE3 64*ab8db090SAndroid Build Coastguard Worker #ifndef MARISA_USE_POPCNT 65*ab8db090SAndroid Build Coastguard Worker #define MARISA_USE_POPCNT 66*ab8db090SAndroid Build Coastguard Worker #endif // MARISA_USE_POPCNT 67*ab8db090SAndroid Build Coastguard Worker #endif // MARISA_USE_SSE4A 68*ab8db090SAndroid Build Coastguard Worker 69*ab8db090SAndroid Build Coastguard Worker #ifdef MARISA_USE_SSE4 70*ab8db090SAndroid Build Coastguard Worker #ifndef MARISA_USE_SSE4_2 71*ab8db090SAndroid Build Coastguard Worker #define MARISA_USE_SSE4_2 72*ab8db090SAndroid Build Coastguard Worker #endif // MARISA_USE_SSE4_2 73*ab8db090SAndroid Build Coastguard Worker #endif // MARISA_USE_SSE4 74*ab8db090SAndroid Build Coastguard Worker 75*ab8db090SAndroid Build Coastguard Worker #ifdef MARISA_USE_SSE4_2 76*ab8db090SAndroid Build Coastguard Worker #ifndef MARISA_USE_SSE4_1 77*ab8db090SAndroid Build Coastguard Worker #define MARISA_USE_SSE4_1 78*ab8db090SAndroid Build Coastguard Worker #endif // MARISA_USE_SSE4_1 79*ab8db090SAndroid Build Coastguard Worker #ifndef MARISA_USE_POPCNT 80*ab8db090SAndroid Build Coastguard Worker #define MARISA_USE_POPCNT 81*ab8db090SAndroid Build Coastguard Worker #endif // MARISA_USE_POPCNT 82*ab8db090SAndroid Build Coastguard Worker #endif // MARISA_USE_SSE4_2 83*ab8db090SAndroid Build Coastguard Worker 84*ab8db090SAndroid Build Coastguard Worker #ifdef MARISA_USE_SSE4_1 85*ab8db090SAndroid Build Coastguard Worker #ifndef MARISA_USE_SSSE3 86*ab8db090SAndroid Build Coastguard Worker #define MARISA_USE_SSSE3 87*ab8db090SAndroid Build Coastguard Worker #endif // MARISA_USE_SSSE3 88*ab8db090SAndroid Build Coastguard Worker #endif // MARISA_USE_SSE4_1 89*ab8db090SAndroid Build Coastguard Worker 90*ab8db090SAndroid Build Coastguard Worker #ifdef MARISA_USE_POPCNT 91*ab8db090SAndroid Build Coastguard Worker #ifndef MARISA_USE_SSE3 92*ab8db090SAndroid Build Coastguard Worker #define MARISA_USE_SSE3 93*ab8db090SAndroid Build Coastguard Worker #endif // MARISA_USE_SSE3 94*ab8db090SAndroid Build Coastguard Worker #ifdef _MSC_VER 95*ab8db090SAndroid Build Coastguard Worker #include <intrin.h> 96*ab8db090SAndroid Build Coastguard Worker #else // _MSC_VER 97*ab8db090SAndroid Build Coastguard Worker #include <popcntintrin.h> 98*ab8db090SAndroid Build Coastguard Worker #endif // _MSC_VER 99*ab8db090SAndroid Build Coastguard Worker #endif // MARISA_USE_POPCNT 100*ab8db090SAndroid Build Coastguard Worker 101*ab8db090SAndroid Build Coastguard Worker #ifdef MARISA_USE_SSSE3 102*ab8db090SAndroid Build Coastguard Worker #ifndef MARISA_USE_SSE3 103*ab8db090SAndroid Build Coastguard Worker #define MARISA_USE_SSE3 104*ab8db090SAndroid Build Coastguard Worker #endif // MARISA_USE_SSE3 105*ab8db090SAndroid Build Coastguard Worker #ifdef MARISA_X64 106*ab8db090SAndroid Build Coastguard Worker #define MARISA_X64_SSSE3 107*ab8db090SAndroid Build Coastguard Worker #else // MARISA_X64 108*ab8db090SAndroid Build Coastguard Worker #define MARISA_X86_SSSE3 109*ab8db090SAndroid Build Coastguard Worker #endif // MAIRSA_X64 110*ab8db090SAndroid Build Coastguard Worker #include <tmmintrin.h> 111*ab8db090SAndroid Build Coastguard Worker #endif // MARISA_USE_SSSE3 112*ab8db090SAndroid Build Coastguard Worker 113*ab8db090SAndroid Build Coastguard Worker #ifdef MARISA_USE_SSE3 114*ab8db090SAndroid Build Coastguard Worker #ifndef MARISA_USE_SSE2 115*ab8db090SAndroid Build Coastguard Worker #define MARISA_USE_SSE2 116*ab8db090SAndroid Build Coastguard Worker #endif // MARISA_USE_SSE2 117*ab8db090SAndroid Build Coastguard Worker #endif // MARISA_USE_SSE3 118*ab8db090SAndroid Build Coastguard Worker 119*ab8db090SAndroid Build Coastguard Worker #ifdef MARISA_USE_SSE2 120*ab8db090SAndroid Build Coastguard Worker #ifdef MARISA_X64 121*ab8db090SAndroid Build Coastguard Worker #define MARISA_X64_SSE2 122*ab8db090SAndroid Build Coastguard Worker #else // MARISA_X64 123*ab8db090SAndroid Build Coastguard Worker #define MARISA_X86_SSE2 124*ab8db090SAndroid Build Coastguard Worker #endif // MAIRSA_X64 125*ab8db090SAndroid Build Coastguard Worker #include <emmintrin.h> 126*ab8db090SAndroid Build Coastguard Worker #endif // MARISA_USE_SSE2 127*ab8db090SAndroid Build Coastguard Worker 128*ab8db090SAndroid Build Coastguard Worker #ifdef _MSC_VER 129*ab8db090SAndroid Build Coastguard Worker #if MARISA_WORD_SIZE == 64 130*ab8db090SAndroid Build Coastguard Worker #include <intrin.h> 131*ab8db090SAndroid Build Coastguard Worker #pragma intrinsic(_BitScanForward64) 132*ab8db090SAndroid Build Coastguard Worker #else // MARISA_WORD_SIZE == 64 133*ab8db090SAndroid Build Coastguard Worker #include <intrin.h> 134*ab8db090SAndroid Build Coastguard Worker #pragma intrinsic(_BitScanForward) 135*ab8db090SAndroid Build Coastguard Worker #endif // MARISA_WORD_SIZE == 64 136*ab8db090SAndroid Build Coastguard Worker #endif // _MSC_VER 137*ab8db090SAndroid Build Coastguard Worker 138*ab8db090SAndroid Build Coastguard Worker #endif // MARISA_GRIMOIRE_INTRIN_H_ 139