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"
58#if (HWY_TARGETS & HWY_SSE2) && (HWY_STATIC_TARGET != HWY_SSE2)
60#define HWY_TARGET HWY_SSE2
61#include HWY_TARGET_INCLUDE
62#ifdef HWY_TARGET_TOGGLE
63#undef HWY_TARGET_TOGGLE
65#define HWY_TARGET_TOGGLE
69#if (HWY_TARGETS & HWY_SSSE3) && (HWY_STATIC_TARGET != HWY_SSSE3)
71#define HWY_TARGET HWY_SSSE3
72#include HWY_TARGET_INCLUDE
73#ifdef HWY_TARGET_TOGGLE
74#undef HWY_TARGET_TOGGLE
76#define HWY_TARGET_TOGGLE
80#if (HWY_TARGETS & HWY_SSE4) && (HWY_STATIC_TARGET != HWY_SSE4)
82#define HWY_TARGET HWY_SSE4
83#include HWY_TARGET_INCLUDE
84#ifdef HWY_TARGET_TOGGLE
85#undef HWY_TARGET_TOGGLE
87#define HWY_TARGET_TOGGLE
91#if (HWY_TARGETS & HWY_AVX2) && (HWY_STATIC_TARGET != HWY_AVX2)
93#define HWY_TARGET HWY_AVX2
94#include HWY_TARGET_INCLUDE
95#ifdef HWY_TARGET_TOGGLE
96#undef HWY_TARGET_TOGGLE
98#define HWY_TARGET_TOGGLE
102#if (HWY_TARGETS & HWY_AVX3) && (HWY_STATIC_TARGET != HWY_AVX3)
104#define HWY_TARGET HWY_AVX3
105#include HWY_TARGET_INCLUDE
106#ifdef HWY_TARGET_TOGGLE
107#undef HWY_TARGET_TOGGLE
109#define HWY_TARGET_TOGGLE
113#if (HWY_TARGETS & HWY_AVX3_DL) && (HWY_STATIC_TARGET != HWY_AVX3_DL)
115#define HWY_TARGET HWY_AVX3_DL
116#include HWY_TARGET_INCLUDE
117#ifdef HWY_TARGET_TOGGLE
118#undef HWY_TARGET_TOGGLE
120#define HWY_TARGET_TOGGLE
124#if (HWY_TARGETS & HWY_AVX3_ZEN4) && (HWY_STATIC_TARGET != HWY_AVX3_ZEN4)
126#define HWY_TARGET HWY_AVX3_ZEN4
127#include HWY_TARGET_INCLUDE
128#ifdef HWY_TARGET_TOGGLE
129#undef HWY_TARGET_TOGGLE
131#define HWY_TARGET_TOGGLE
135#if (HWY_TARGETS & HWY_AVX3_SPR) && (HWY_STATIC_TARGET != HWY_AVX3_SPR)
137#define HWY_TARGET HWY_AVX3_SPR
138#include HWY_TARGET_INCLUDE
139#ifdef HWY_TARGET_TOGGLE
140#undef HWY_TARGET_TOGGLE
142#define HWY_TARGET_TOGGLE
148#if (HWY_TARGETS & HWY_NEON_WITHOUT_AES) && \
149 (HWY_STATIC_TARGET != HWY_NEON_WITHOUT_AES)
151#define HWY_TARGET HWY_NEON_WITHOUT_AES
152#include HWY_TARGET_INCLUDE
153#ifdef HWY_TARGET_TOGGLE
154#undef HWY_TARGET_TOGGLE
156#define HWY_TARGET_TOGGLE
160#if (HWY_TARGETS & HWY_NEON) && (HWY_STATIC_TARGET != HWY_NEON)
162#define HWY_TARGET HWY_NEON
163#include HWY_TARGET_INCLUDE
164#ifdef HWY_TARGET_TOGGLE
165#undef HWY_TARGET_TOGGLE
167#define HWY_TARGET_TOGGLE
171#if (HWY_TARGETS & HWY_SVE) && (HWY_STATIC_TARGET != HWY_SVE)
173#define HWY_TARGET HWY_SVE
174#include HWY_TARGET_INCLUDE
175#ifdef HWY_TARGET_TOGGLE
176#undef HWY_TARGET_TOGGLE
178#define HWY_TARGET_TOGGLE
182#if (HWY_TARGETS & HWY_SVE2) && (HWY_STATIC_TARGET != HWY_SVE2)
184#define HWY_TARGET HWY_SVE2
185#include HWY_TARGET_INCLUDE
186#ifdef HWY_TARGET_TOGGLE
187#undef HWY_TARGET_TOGGLE
189#define HWY_TARGET_TOGGLE
193#if (HWY_TARGETS & HWY_SVE_256) && (HWY_STATIC_TARGET != HWY_SVE_256)
195#define HWY_TARGET HWY_SVE_256
196#include HWY_TARGET_INCLUDE
197#ifdef HWY_TARGET_TOGGLE
198#undef HWY_TARGET_TOGGLE
200#define HWY_TARGET_TOGGLE
204#if (HWY_TARGETS & HWY_SVE2_128) && (HWY_STATIC_TARGET != HWY_SVE2_128)
206#define HWY_TARGET HWY_SVE2_128
207#include HWY_TARGET_INCLUDE
208#ifdef HWY_TARGET_TOGGLE
209#undef HWY_TARGET_TOGGLE
211#define HWY_TARGET_TOGGLE
217#if (HWY_TARGETS & HWY_WASM_EMU256) && (HWY_STATIC_TARGET != HWY_WASM_EMU256)
219#define HWY_TARGET HWY_WASM_EMU256
220#include HWY_TARGET_INCLUDE
221#ifdef HWY_TARGET_TOGGLE
222#undef HWY_TARGET_TOGGLE
224#define HWY_TARGET_TOGGLE
228#if (HWY_TARGETS & HWY_WASM) && (HWY_STATIC_TARGET != HWY_WASM)
230#define HWY_TARGET HWY_WASM
231#include HWY_TARGET_INCLUDE
232#ifdef HWY_TARGET_TOGGLE
233#undef HWY_TARGET_TOGGLE
235#define HWY_TARGET_TOGGLE
241#if (HWY_TARGETS & HWY_PPC8) && (HWY_STATIC_TARGET != HWY_PPC8)
243#define HWY_TARGET HWY_PPC8
244#include HWY_TARGET_INCLUDE
245#ifdef HWY_TARGET_TOGGLE
246#undef HWY_TARGET_TOGGLE
248#define HWY_TARGET_TOGGLE
252#if (HWY_TARGETS & HWY_PPC9) && (HWY_STATIC_TARGET != HWY_PPC9)
254#define HWY_TARGET HWY_PPC9
255#include HWY_TARGET_INCLUDE
256#ifdef HWY_TARGET_TOGGLE
257#undef HWY_TARGET_TOGGLE
259#define HWY_TARGET_TOGGLE
263#if (HWY_TARGETS & HWY_PPC10) && (HWY_STATIC_TARGET != HWY_PPC10)
265#define HWY_TARGET HWY_PPC10
266#include HWY_TARGET_INCLUDE
267#ifdef HWY_TARGET_TOGGLE
268#undef HWY_TARGET_TOGGLE
270#define HWY_TARGET_TOGGLE
276#if (HWY_TARGETS & HWY_Z14) && (HWY_STATIC_TARGET != HWY_Z14)
278#define HWY_TARGET HWY_Z14
279#include HWY_TARGET_INCLUDE
280#ifdef HWY_TARGET_TOGGLE
281#undef HWY_TARGET_TOGGLE
283#define HWY_TARGET_TOGGLE
287#if (HWY_TARGETS & HWY_Z15) && (HWY_STATIC_TARGET != HWY_Z15)
289#define HWY_TARGET HWY_Z15
290#include HWY_TARGET_INCLUDE
291#ifdef HWY_TARGET_TOGGLE
292#undef HWY_TARGET_TOGGLE
294#define HWY_TARGET_TOGGLE
300#if (HWY_TARGETS & HWY_RVV) && (HWY_STATIC_TARGET != HWY_RVV)
302#define HWY_TARGET HWY_RVV
303#include HWY_TARGET_INCLUDE
304#ifdef HWY_TARGET_TOGGLE
305#undef HWY_TARGET_TOGGLE
307#define HWY_TARGET_TOGGLE
313#if (HWY_TARGETS & HWY_EMU128) && (HWY_STATIC_TARGET != HWY_EMU128)
315#define HWY_TARGET HWY_EMU128
316#include HWY_TARGET_INCLUDE
317#ifdef HWY_TARGET_TOGGLE
318#undef HWY_TARGET_TOGGLE
320#define HWY_TARGET_TOGGLE
324#if (HWY_TARGETS & HWY_SCALAR) && (HWY_STATIC_TARGET != HWY_SCALAR)
326#define HWY_TARGET HWY_SCALAR
327#include HWY_TARGET_INCLUDE
328#ifdef HWY_TARGET_TOGGLE
329#undef HWY_TARGET_TOGGLE
331#define HWY_TARGET_TOGGLE
346#define HWY_TARGET HWY_STATIC_TARGET
348#ifdef HWY_ALREADY_INCLUDED
350#ifdef HWY_TARGET_TOGGLE
351#undef HWY_TARGET_TOGGLE
353#define HWY_TARGET_TOGGLE
357#ifdef HWY_SET_MACROS_PER_TARGET
358#undef HWY_SET_MACROS_PER_TARGET
360#define HWY_SET_MACROS_PER_TARGET