16 #ifndef HIGHWAY_HWY_TARGETS_H_
17 #define HIGHWAY_HWY_TARGETS_H_
42 #if (HWY_TARGETS & (HWY_TARGETS - 1)) == 0
43 #define HWY_SUPPORTED_TARGETS HWY_TARGETS
45 #define HWY_SUPPORTED_TARGETS hwy::SupportedTargets()
68 std::vector<uint32_t> ret;
70 targets = targets & (targets - 1)) {
71 uint32_t current_target = targets & ~(targets - 1);
72 ret.push_back(current_target);
152 #define HWY_CHOSEN_TARGET_MASK_SCALAR (1u << (HWY_MAX_DYNAMIC_TARGETS + 1))
156 #define HWY_CHOSEN_TARGET_SHIFT(X) \
157 ((((X) >> (HWY_HIGHEST_TARGET_BIT + 1 - HWY_MAX_DYNAMIC_TARGETS)) & \
158 ((1u << HWY_MAX_DYNAMIC_TARGETS) - 1)) \
162 #define HWY_CHOSEN_TARGET_MASK_TARGETS \
163 (HWY_CHOSEN_TARGET_SHIFT(HWY_TARGETS) | HWY_CHOSEN_TARGET_MASK_SCALAR | 1u)
168 #define HWY_MAX_DYNAMIC_TARGETS 10
169 #define HWY_HIGHEST_TARGET_BIT HWY_HIGHEST_TARGET_BIT_X86
175 #define HWY_CHOOSE_TARGET_LIST(func_name) \
179 HWY_CHOOSE_AVX3_DL(func_name), \
180 HWY_CHOOSE_AVX3(func_name), \
181 HWY_CHOOSE_AVX2(func_name), \
183 HWY_CHOOSE_SSE4(func_name), \
184 HWY_CHOOSE_SSSE3(func_name), \
189 #define HWY_MAX_DYNAMIC_TARGETS 8
190 #define HWY_HIGHEST_TARGET_BIT HWY_HIGHEST_TARGET_BIT_ARM
191 #define HWY_CHOOSE_TARGET_LIST(func_name) \
194 HWY_CHOOSE_SVE2_128(func_name), \
195 HWY_CHOOSE_SVE_256(func_name), \
196 HWY_CHOOSE_SVE2(func_name), \
197 HWY_CHOOSE_SVE(func_name), \
199 HWY_CHOOSE_NEON(func_name)
203 #define HWY_MAX_DYNAMIC_TARGETS 3
204 #define HWY_HIGHEST_TARGET_BIT HWY_HIGHEST_TARGET_BIT_PPC
205 #define HWY_CHOOSE_TARGET_LIST(func_name) \
207 HWY_CHOOSE_PPC8(func_name), \
212 #define HWY_MAX_DYNAMIC_TARGETS 4
213 #define HWY_HIGHEST_TARGET_BIT HWY_HIGHEST_TARGET_BIT_WASM
214 #define HWY_CHOOSE_TARGET_LIST(func_name) \
217 HWY_CHOOSE_WASM2(func_name), \
218 HWY_CHOOSE_WASM(func_name)
222 #define HWY_MAX_DYNAMIC_TARGETS 4
223 #define HWY_HIGHEST_TARGET_BIT HWY_HIGHEST_TARGET_BIT_RVV
224 #define HWY_CHOOSE_TARGET_LIST(func_name) \
228 HWY_CHOOSE_RVV(func_name)
233 #define HWY_MAX_DYNAMIC_TARGETS 1
234 #define HWY_HIGHEST_TARGET_BIT HWY_HIGHEST_TARGET_BIT_SCALAR
#define HWY_INLINE
Definition: base.h:62
#define HWY_MAYBE_UNUSED
Definition: base.h:73
#define HWY_WASM_EMU256
Definition: detect_targets.h:93
#define HWY_AVX3_DL
Definition: detect_targets.h:62
#define HWY_NEON
Definition: detect_targets.h:82
#define HWY_EMU128
Definition: detect_targets.h:103
#define HWY_PPC8
Definition: detect_targets.h:87
#define HWY_SVE2
Definition: detect_targets.h:79
#define HWY_AVX3
Definition: detect_targets.h:63
#define HWY_AVX2
Definition: detect_targets.h:64
#define HWY_SCALAR
Definition: detect_targets.h:104
#define HWY_SVE_256
Definition: detect_targets.h:78
#define HWY_SVE2_128
Definition: detect_targets.h:77
#define HWY_WASM
Definition: detect_targets.h:94
#define HWY_SVE
Definition: detect_targets.h:80
#define HWY_RVV
Definition: detect_targets.h:99
#define HWY_TARGETS
Definition: detect_targets.h:401
#define HWY_SSE4
Definition: detect_targets.h:66
#define HWY_SSSE3
Definition: detect_targets.h:67
#define HWY_DLLEXPORT
Definition: highway_export.h:13
Definition: aligned_allocator.h:27
HWY_DLLEXPORT void SetSupportedTargetsForTest(uint32_t targets)
HWY_DLLEXPORT ChosenTarget & GetChosenTarget()
HWY_API size_t Num0BitsBelowLS1Bit_Nonzero32(const uint32_t x)
Definition: base.h:674
static HWY_MAYBE_UNUSED const char * TargetName(uint32_t target)
Definition: targets.h:77
HWY_DLLEXPORT uint32_t SupportedTargets()
HWY_INLINE std::vector< uint32_t > SupportedAndGeneratedTargets()
Definition: targets.h:67
HWY_DLLEXPORT void DisableTargets(uint32_t disabled_targets)
Definition: targets.h:242
uint32_t LoadMask() const
Definition: targets.h:278
void StoreMask(uint32_t mask)
Definition: targets.h:279
bool IsInitialized() const
Definition: targets.h:258
size_t HWY_INLINE GetIndex() const
Definition: targets.h:265
void DeInit()
Definition: targets.h:254
void Update(uint32_t targets)
Definition: targets.h:246
std::atomic< uint32_t > mask_
Definition: targets.h:281
#define HWY_CHOSEN_TARGET_MASK_TARGETS
Definition: targets.h:162
#define HWY_CHOSEN_TARGET_SHIFT(X)
Definition: targets.h:156
#define HWY_CHOSEN_TARGET_MASK_SCALAR
Definition: targets.h:152