xref: /aosp_15_r20/external/marisa-trie/lib/marisa/grimoire/intrin.h (revision ab8db090fce404b23716c4c9194221ee27efe31c)
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