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