16 #ifndef HIGHWAY_HWY_TARGETS_H_
17 #define HIGHWAY_HWY_TARGETS_H_
41 #if (HWY_TARGETS & (HWY_TARGETS - 1)) == 0
42 #define HWY_SUPPORTED_TARGETS HWY_TARGETS
44 #define HWY_SUPPORTED_TARGETS hwy::SupportedTargets()
71 std::vector<uint32_t> ret;
73 targets = targets & (targets - 1)) {
74 uint32_t current_target = targets & ~(targets - 1);
75 ret.push_back(current_target);
147 #define HWY_CHOSEN_TARGET_MASK_SCALAR (1u << (HWY_MAX_DYNAMIC_TARGETS + 1))
151 #define HWY_CHOSEN_TARGET_SHIFT(X) \
152 ((((X) >> (HWY_HIGHEST_TARGET_BIT + 1 - HWY_MAX_DYNAMIC_TARGETS)) & \
153 ((1u << HWY_MAX_DYNAMIC_TARGETS) - 1)) \
157 #define HWY_CHOSEN_TARGET_MASK_TARGETS \
158 (HWY_CHOSEN_TARGET_SHIFT(HWY_TARGETS) | HWY_CHOSEN_TARGET_MASK_SCALAR | 1u)
163 #define HWY_MAX_DYNAMIC_TARGETS 10
164 #define HWY_HIGHEST_TARGET_BIT HWY_HIGHEST_TARGET_BIT_X86
170 #define HWY_CHOOSE_TARGET_LIST(func_name) \
173 HWY_CHOOSE_AVX3_DL(func_name), \
174 HWY_CHOOSE_AVX3(func_name), \
175 HWY_CHOOSE_AVX2(func_name), \
177 HWY_CHOOSE_SSE4(func_name), \
178 HWY_CHOOSE_SSSE3(func_name), \
184 #define HWY_MAX_DYNAMIC_TARGETS 4
185 #define HWY_HIGHEST_TARGET_BIT HWY_HIGHEST_TARGET_BIT_ARM
186 #define HWY_CHOOSE_TARGET_LIST(func_name) \
187 HWY_CHOOSE_SVE2(func_name), \
188 HWY_CHOOSE_SVE(func_name), \
190 HWY_CHOOSE_NEON(func_name)
194 #define HWY_MAX_DYNAMIC_TARGETS 5
195 #define HWY_HIGHEST_TARGET_BIT HWY_HIGHEST_TARGET_BIT_PPC
196 #define HWY_CHOOSE_TARGET_LIST(func_name) \
199 HWY_CHOOSE_PPC8(func_name), \
205 #define HWY_MAX_DYNAMIC_TARGETS 4
206 #define HWY_HIGHEST_TARGET_BIT HWY_HIGHEST_TARGET_BIT_WASM
207 #define HWY_CHOOSE_TARGET_LIST(func_name) \
210 HWY_CHOOSE_WASM2(func_name), \
211 HWY_CHOOSE_WASM(func_name)
215 #define HWY_MAX_DYNAMIC_TARGETS 4
216 #define HWY_HIGHEST_TARGET_BIT HWY_HIGHEST_TARGET_BIT_RVV
217 #define HWY_CHOOSE_TARGET_LIST(func_name) \
221 HWY_CHOOSE_RVV(func_name)
226 #define HWY_MAX_DYNAMIC_TARGETS 1
227 #define HWY_HIGHEST_TARGET_BIT HWY_HIGHEST_TARGET_BIT_SCALAR
#define HWY_INLINE
Definition: base.h:64
#define HWY_MAYBE_UNUSED
Definition: base.h:75
#define HWY_AVX3_DL
Definition: detect_targets.h:58
#define HWY_NEON
Definition: detect_targets.h:75
#define HWY_PPC8
Definition: detect_targets.h:80
#define HWY_SVE2
Definition: detect_targets.h:72
#define HWY_AVX3
Definition: detect_targets.h:59
#define HWY_AVX2
Definition: detect_targets.h:60
#define HWY_SCALAR
Definition: detect_targets.h:98
#define HWY_WASM
Definition: detect_targets.h:86
#define HWY_SVE
Definition: detect_targets.h:73
#define HWY_RVV
Definition: detect_targets.h:92
#define HWY_TARGETS
Definition: detect_targets.h:375
#define HWY_SSE4
Definition: detect_targets.h:62
#define HWY_SSSE3
Definition: detect_targets.h:63
#define HWY_DLLEXPORT
Definition: highway_export.h:18
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:598
static HWY_MAYBE_UNUSED const char * TargetName(uint32_t target)
Definition: targets.h:80
HWY_DLLEXPORT uint32_t SupportedTargets()
HWY_INLINE std::vector< uint32_t > SupportedAndGeneratedTargets()
Definition: targets.h:70
HWY_DLLEXPORT void DisableTargets(uint32_t disabled_targets)
HWY_DLLEXPORT bool SupportedTargetsCalledForTest()
Definition: targets.h:230
uint32_t LoadMask() const
Definition: targets.h:261
void StoreMask(uint32_t mask)
Definition: targets.h:262
bool IsInitialized() const
Definition: targets.h:241
HWY_DLLEXPORT void Update()
size_t HWY_INLINE GetIndex() const
Definition: targets.h:248
void DeInit()
Definition: targets.h:237
std::atomic< uint32_t > mask_
Definition: targets.h:264
#define HWY_CHOSEN_TARGET_MASK_TARGETS
Definition: targets.h:157