Go to the documentation of this file.
15 #ifndef HIGHWAY_HWY_FOREACH_TARGET_H_
16 #define HIGHWAY_HWY_FOREACH_TARGET_H_
29 #ifdef HWY_TARGET_TOGGLE
30 #error "This macro must not be defined outside foreach_target.h"
33 #ifdef HWY_HIGHWAY_INCLUDED
35 #define HWY_ALREADY_INCLUDED
39 #undef HWY_SET_MACROS_PER_TARGET
45 #define HWY_ONCE (0 || HWY_IDE)
49 #if !HWY_IDE && (HWY_TARGETS != HWY_STATIC_TARGET)
51 #if !defined(HWY_TARGET_INCLUDE)
52 #error ">1 target enabled => define HWY_TARGET_INCLUDE before foreach_target.h"
55 #if (HWY_TARGETS & HWY_SCALAR) && (HWY_STATIC_TARGET != HWY_SCALAR)
57 #define HWY_TARGET HWY_SCALAR
58 #include HWY_TARGET_INCLUDE
59 #ifdef HWY_TARGET_TOGGLE
60 #undef HWY_TARGET_TOGGLE
62 #define HWY_TARGET_TOGGLE
66 #if (HWY_TARGETS & HWY_NEON) && (HWY_STATIC_TARGET != HWY_NEON)
68 #define HWY_TARGET HWY_NEON
69 #include HWY_TARGET_INCLUDE
70 #ifdef HWY_TARGET_TOGGLE
71 #undef HWY_TARGET_TOGGLE
73 #define HWY_TARGET_TOGGLE
77 #if (HWY_TARGETS & HWY_SSSE3) && (HWY_STATIC_TARGET != HWY_SSSE3)
79 #define HWY_TARGET HWY_SSSE3
80 #include HWY_TARGET_INCLUDE
81 #ifdef HWY_TARGET_TOGGLE
82 #undef HWY_TARGET_TOGGLE
84 #define HWY_TARGET_TOGGLE
88 #if (HWY_TARGETS & HWY_SSE4) && (HWY_STATIC_TARGET != HWY_SSE4)
90 #define HWY_TARGET HWY_SSE4
91 #include HWY_TARGET_INCLUDE
92 #ifdef HWY_TARGET_TOGGLE
93 #undef HWY_TARGET_TOGGLE
95 #define HWY_TARGET_TOGGLE
99 #if (HWY_TARGETS & HWY_AVX2) && (HWY_STATIC_TARGET != HWY_AVX2)
101 #define HWY_TARGET HWY_AVX2
102 #include HWY_TARGET_INCLUDE
103 #ifdef HWY_TARGET_TOGGLE
104 #undef HWY_TARGET_TOGGLE
106 #define HWY_TARGET_TOGGLE
110 #if (HWY_TARGETS & HWY_AVX3) && (HWY_STATIC_TARGET != HWY_AVX3)
112 #define HWY_TARGET HWY_AVX3
113 #include HWY_TARGET_INCLUDE
114 #ifdef HWY_TARGET_TOGGLE
115 #undef HWY_TARGET_TOGGLE
117 #define HWY_TARGET_TOGGLE
121 #if (HWY_TARGETS & HWY_AVX3_DL) && (HWY_STATIC_TARGET != HWY_AVX3_DL)
123 #define HWY_TARGET HWY_AVX3_DL
124 #include HWY_TARGET_INCLUDE
125 #ifdef HWY_TARGET_TOGGLE
126 #undef HWY_TARGET_TOGGLE
128 #define HWY_TARGET_TOGGLE
132 #if (HWY_TARGETS & HWY_WASM) && (HWY_STATIC_TARGET != HWY_WASM)
134 #define HWY_TARGET HWY_WASM
135 #include HWY_TARGET_INCLUDE
136 #ifdef HWY_TARGET_TOGGLE
137 #undef HWY_TARGET_TOGGLE
139 #define HWY_TARGET_TOGGLE
143 #if (HWY_TARGETS & HWY_PPC8) && (HWY_STATIC_TARGET != HWY_PPC8)
145 #define HWY_TARGET HWY_PPC8
146 #include HWY_TARGET_INCLUDE
147 #ifdef HWY_TARGET_TOGGLE
148 #undef HWY_TARGET_TOGGLE
150 #define HWY_TARGET_TOGGLE
165 #define HWY_TARGET HWY_STATIC_TARGET
167 #ifdef HWY_ALREADY_INCLUDED
169 #ifdef HWY_TARGET_TOGGLE
170 #undef HWY_TARGET_TOGGLE
172 #define HWY_TARGET_TOGGLE
176 #ifdef HWY_SET_MACROS_PER_TARGET
177 #undef HWY_SET_MACROS_PER_TARGET
179 #define HWY_SET_MACROS_PER_TARGET