Go to the documentation of this file.
16 #ifndef HIGHWAY_HWY_FOREACH_TARGET_H_
17 #define HIGHWAY_HWY_FOREACH_TARGET_H_
30 #ifdef HWY_TARGET_TOGGLE
31 #error "This macro must not be defined outside foreach_target.h"
34 #ifdef HWY_HIGHWAY_INCLUDED
36 #define HWY_ALREADY_INCLUDED
40 #undef HWY_SET_MACROS_PER_TARGET
46 #define HWY_ONCE (0 || HWY_IDE)
50 #if !HWY_IDE && (HWY_TARGETS != HWY_STATIC_TARGET)
52 #if !defined(HWY_TARGET_INCLUDE)
53 #error ">1 target enabled => define HWY_TARGET_INCLUDE before foreach_target.h"
56 #if (HWY_TARGETS & HWY_EMU128) && (HWY_STATIC_TARGET != HWY_EMU128)
58 #define HWY_TARGET HWY_EMU128
59 #include HWY_TARGET_INCLUDE
60 #ifdef HWY_TARGET_TOGGLE
61 #undef HWY_TARGET_TOGGLE
63 #define HWY_TARGET_TOGGLE
67 #if (HWY_TARGETS & HWY_SCALAR) && (HWY_STATIC_TARGET != HWY_SCALAR)
69 #define HWY_TARGET HWY_SCALAR
70 #include HWY_TARGET_INCLUDE
71 #ifdef HWY_TARGET_TOGGLE
72 #undef HWY_TARGET_TOGGLE
74 #define HWY_TARGET_TOGGLE
78 #if (HWY_TARGETS & HWY_NEON) && (HWY_STATIC_TARGET != HWY_NEON)
80 #define HWY_TARGET HWY_NEON
81 #include HWY_TARGET_INCLUDE
82 #ifdef HWY_TARGET_TOGGLE
83 #undef HWY_TARGET_TOGGLE
85 #define HWY_TARGET_TOGGLE
89 #if (HWY_TARGETS & HWY_RVV) && (HWY_STATIC_TARGET != HWY_RVV)
91 #define HWY_TARGET HWY_RVV
92 #include HWY_TARGET_INCLUDE
93 #ifdef HWY_TARGET_TOGGLE
94 #undef HWY_TARGET_TOGGLE
96 #define HWY_TARGET_TOGGLE
100 #if (HWY_TARGETS & HWY_SVE) && (HWY_STATIC_TARGET != HWY_SVE)
102 #define HWY_TARGET HWY_SVE
103 #include HWY_TARGET_INCLUDE
104 #ifdef HWY_TARGET_TOGGLE
105 #undef HWY_TARGET_TOGGLE
107 #define HWY_TARGET_TOGGLE
111 #if (HWY_TARGETS & HWY_SVE2) && (HWY_STATIC_TARGET != HWY_SVE2)
113 #define HWY_TARGET HWY_SVE2
114 #include HWY_TARGET_INCLUDE
115 #ifdef HWY_TARGET_TOGGLE
116 #undef HWY_TARGET_TOGGLE
118 #define HWY_TARGET_TOGGLE
122 #if (HWY_TARGETS & HWY_SVE_256) && (HWY_STATIC_TARGET != HWY_SVE_256)
124 #define HWY_TARGET HWY_SVE_256
125 #include HWY_TARGET_INCLUDE
126 #ifdef HWY_TARGET_TOGGLE
127 #undef HWY_TARGET_TOGGLE
129 #define HWY_TARGET_TOGGLE
133 #if (HWY_TARGETS & HWY_SVE2_128) && (HWY_STATIC_TARGET != HWY_SVE2_128)
135 #define HWY_TARGET HWY_SVE2_128
136 #include HWY_TARGET_INCLUDE
137 #ifdef HWY_TARGET_TOGGLE
138 #undef HWY_TARGET_TOGGLE
140 #define HWY_TARGET_TOGGLE
144 #if (HWY_TARGETS & HWY_SSSE3) && (HWY_STATIC_TARGET != HWY_SSSE3)
146 #define HWY_TARGET HWY_SSSE3
147 #include HWY_TARGET_INCLUDE
148 #ifdef HWY_TARGET_TOGGLE
149 #undef HWY_TARGET_TOGGLE
151 #define HWY_TARGET_TOGGLE
155 #if (HWY_TARGETS & HWY_SSE4) && (HWY_STATIC_TARGET != HWY_SSE4)
157 #define HWY_TARGET HWY_SSE4
158 #include HWY_TARGET_INCLUDE
159 #ifdef HWY_TARGET_TOGGLE
160 #undef HWY_TARGET_TOGGLE
162 #define HWY_TARGET_TOGGLE
166 #if (HWY_TARGETS & HWY_AVX2) && (HWY_STATIC_TARGET != HWY_AVX2)
168 #define HWY_TARGET HWY_AVX2
169 #include HWY_TARGET_INCLUDE
170 #ifdef HWY_TARGET_TOGGLE
171 #undef HWY_TARGET_TOGGLE
173 #define HWY_TARGET_TOGGLE
177 #if (HWY_TARGETS & HWY_AVX3) && (HWY_STATIC_TARGET != HWY_AVX3)
179 #define HWY_TARGET HWY_AVX3
180 #include HWY_TARGET_INCLUDE
181 #ifdef HWY_TARGET_TOGGLE
182 #undef HWY_TARGET_TOGGLE
184 #define HWY_TARGET_TOGGLE
188 #if (HWY_TARGETS & HWY_AVX3_DL) && (HWY_STATIC_TARGET != HWY_AVX3_DL)
190 #define HWY_TARGET HWY_AVX3_DL
191 #include HWY_TARGET_INCLUDE
192 #ifdef HWY_TARGET_TOGGLE
193 #undef HWY_TARGET_TOGGLE
195 #define HWY_TARGET_TOGGLE
199 #if (HWY_TARGETS & HWY_WASM_EMU256) && (HWY_STATIC_TARGET != HWY_WASM_EMU256)
201 #define HWY_TARGET HWY_WASM_EMU256
202 #include HWY_TARGET_INCLUDE
203 #ifdef HWY_TARGET_TOGGLE
204 #undef HWY_TARGET_TOGGLE
206 #define HWY_TARGET_TOGGLE
210 #if (HWY_TARGETS & HWY_WASM) && (HWY_STATIC_TARGET != HWY_WASM)
212 #define HWY_TARGET HWY_WASM
213 #include HWY_TARGET_INCLUDE
214 #ifdef HWY_TARGET_TOGGLE
215 #undef HWY_TARGET_TOGGLE
217 #define HWY_TARGET_TOGGLE
221 #if (HWY_TARGETS & HWY_PPC8) && (HWY_STATIC_TARGET != HWY_PPC8)
223 #define HWY_TARGET HWY_PPC8
224 #include HWY_TARGET_INCLUDE
225 #ifdef HWY_TARGET_TOGGLE
226 #undef HWY_TARGET_TOGGLE
228 #define HWY_TARGET_TOGGLE
243 #define HWY_TARGET HWY_STATIC_TARGET
245 #ifdef HWY_ALREADY_INCLUDED
247 #ifdef HWY_TARGET_TOGGLE
248 #undef HWY_TARGET_TOGGLE
250 #define HWY_TARGET_TOGGLE
254 #ifdef HWY_SET_MACROS_PER_TARGET
255 #undef HWY_SET_MACROS_PER_TARGET
257 #define HWY_SET_MACROS_PER_TARGET