15 #ifndef HIGHWAY_HWY_TARGETS_H_
16 #define HIGHWAY_HWY_TARGETS_H_
35 #if (HWY_TARGETS & (HWY_TARGETS - 1)) == 0
36 #define HWY_SUPPORTED_TARGETS HWY_TARGETS
38 #define HWY_SUPPORTED_TARGETS hwy::SupportedTargets()
65 std::vector<uint32_t> ret;
67 targets = targets & (targets - 1)) {
68 uint32_t current_target = targets & ~(targets - 1);
69 ret.push_back(current_target);
141 #define HWY_CHOSEN_TARGET_MASK_SCALAR (1u << (HWY_MAX_DYNAMIC_TARGETS + 1))
145 #define HWY_CHOSEN_TARGET_SHIFT(X) \
146 ((((X) >> (HWY_HIGHEST_TARGET_BIT + 1 - HWY_MAX_DYNAMIC_TARGETS)) & \
147 ((1u << HWY_MAX_DYNAMIC_TARGETS) - 1)) \
151 #define HWY_CHOSEN_TARGET_MASK_TARGETS \
152 (HWY_CHOSEN_TARGET_SHIFT(HWY_TARGETS) | HWY_CHOSEN_TARGET_MASK_SCALAR | 1u)
157 #define HWY_MAX_DYNAMIC_TARGETS 10
158 #define HWY_HIGHEST_TARGET_BIT HWY_HIGHEST_TARGET_BIT_X86
164 #define HWY_CHOOSE_TARGET_LIST(func_name) \
167 HWY_CHOOSE_AVX3_DL(func_name), \
168 HWY_CHOOSE_AVX3(func_name), \
169 HWY_CHOOSE_AVX2(func_name), \
171 HWY_CHOOSE_SSE4(func_name), \
172 HWY_CHOOSE_SSSE3(func_name), \
178 #define HWY_MAX_DYNAMIC_TARGETS 4
179 #define HWY_HIGHEST_TARGET_BIT HWY_HIGHEST_TARGET_BIT_ARM
180 #define HWY_CHOOSE_TARGET_LIST(func_name) \
181 HWY_CHOOSE_SVE2(func_name), \
182 HWY_CHOOSE_SVE(func_name), \
184 HWY_CHOOSE_NEON(func_name)
188 #define HWY_MAX_DYNAMIC_TARGETS 5
189 #define HWY_HIGHEST_TARGET_BIT HWY_HIGHEST_TARGET_BIT_PPC
190 #define HWY_CHOOSE_TARGET_LIST(func_name) \
193 HWY_CHOOSE_PPC8(func_name), \
199 #define HWY_MAX_DYNAMIC_TARGETS 4
200 #define HWY_HIGHEST_TARGET_BIT HWY_HIGHEST_TARGET_BIT_WASM
201 #define HWY_CHOOSE_TARGET_LIST(func_name) \
205 HWY_CHOOSE_WASM(func_name)
209 #define HWY_MAX_DYNAMIC_TARGETS 4
210 #define HWY_HIGHEST_TARGET_BIT HWY_HIGHEST_TARGET_BIT_RVV
211 #define HWY_CHOOSE_TARGET_LIST(func_name) \
215 HWY_CHOOSE_RVV(func_name)
220 #define HWY_MAX_DYNAMIC_TARGETS 1
221 #define HWY_HIGHEST_TARGET_BIT HWY_HIGHEST_TARGET_BIT_SCALAR
#define HWY_INLINE
Definition: base.h:59
#define HWY_MAYBE_UNUSED
Definition: base.h:70
#define HWY_AVX3_DL
Definition: detect_targets.h:57
#define HWY_NEON
Definition: detect_targets.h:74
#define HWY_PPC8
Definition: detect_targets.h:79
#define HWY_SVE2
Definition: detect_targets.h:71
#define HWY_AVX3
Definition: detect_targets.h:58
#define HWY_AVX2
Definition: detect_targets.h:59
#define HWY_SCALAR
Definition: detect_targets.h:97
#define HWY_WASM
Definition: detect_targets.h:85
#define HWY_SVE
Definition: detect_targets.h:72
#define HWY_RVV
Definition: detect_targets.h:91
#define HWY_TARGETS
Definition: detect_targets.h:377
#define HWY_SSE4
Definition: detect_targets.h:61
#define HWY_SSSE3
Definition: detect_targets.h:62
Definition: aligned_allocator.h:23
uint32_t SupportedTargets()
void SetSupportedTargetsForTest(uint32_t targets)
HWY_API size_t Num0BitsBelowLS1Bit_Nonzero32(const uint32_t x)
Definition: base.h:555
static HWY_MAYBE_UNUSED const char * TargetName(uint32_t target)
Definition: targets.h:74
HWY_INLINE std::vector< uint32_t > SupportedAndGeneratedTargets()
Definition: targets.h:64
bool SupportedTargetsCalledForTest()
ChosenTarget chosen_target
void DisableTargets(uint32_t disabled_targets)
Definition: targets.h:224
bool IsInitialized() const
Definition: targets.h:235
size_t HWY_INLINE GetIndex() const
Definition: targets.h:242
void DeInit()
Definition: targets.h:231
std::atomic< uint32_t > mask_
Definition: targets.h:249
#define HWY_CHOSEN_TARGET_MASK_TARGETS
Definition: targets.h:151