16#ifndef HIGHWAY_HWY_TARGETS_H_
17#define HIGHWAY_HWY_TARGETS_H_
32#if !HWY_ARCH_RVV && !defined(HWY_NO_LIBCXX)
46#if (HWY_TARGETS & (HWY_TARGETS - 1)) == 0
47#define HWY_SUPPORTED_TARGETS HWY_TARGETS
49#define HWY_SUPPORTED_TARGETS hwy::SupportedTargets()
74 std::vector<int64_t> ret;
76 targets = targets & (targets - 1)) {
77 int64_t current_target = targets & ~(targets - 1);
78 ret.push_back(current_target);
122 return "WASM_EMU256";
160#define HWY_CHOSEN_TARGET_MASK_SCALAR (1LL << (HWY_MAX_DYNAMIC_TARGETS + 1))
164#define HWY_CHOSEN_TARGET_SHIFT(X) \
165 ((((X) >> (HWY_HIGHEST_TARGET_BIT + 1 - HWY_MAX_DYNAMIC_TARGETS)) & \
166 ((1LL << HWY_MAX_DYNAMIC_TARGETS) - 1)) \
170#define HWY_CHOSEN_TARGET_MASK_TARGETS \
171 (HWY_CHOSEN_TARGET_SHIFT(HWY_TARGETS) | HWY_CHOSEN_TARGET_MASK_SCALAR | 1LL)
176#define HWY_MAX_DYNAMIC_TARGETS 15
177#define HWY_HIGHEST_TARGET_BIT HWY_HIGHEST_TARGET_BIT_X86
183#define HWY_CHOOSE_TARGET_LIST(func_name) \
191 HWY_CHOOSE_AVX3_DL(func_name), \
192 HWY_CHOOSE_AVX3(func_name), \
193 HWY_CHOOSE_AVX2(func_name), \
195 HWY_CHOOSE_SSE4(func_name), \
196 HWY_CHOOSE_SSSE3(func_name), \
202#define HWY_MAX_DYNAMIC_TARGETS 15
203#define HWY_HIGHEST_TARGET_BIT HWY_HIGHEST_TARGET_BIT_ARM
204#define HWY_CHOOSE_TARGET_LIST(func_name) \
214 HWY_CHOOSE_SVE2_128(func_name), \
215 HWY_CHOOSE_SVE_256(func_name), \
216 HWY_CHOOSE_SVE2(func_name), \
217 HWY_CHOOSE_SVE(func_name), \
218 HWY_CHOOSE_NEON(func_name), \
223#define HWY_MAX_DYNAMIC_TARGETS 9
224#define HWY_HIGHEST_TARGET_BIT HWY_HIGHEST_TARGET_BIT_RVV
225#define HWY_CHOOSE_TARGET_LIST(func_name) \
233 HWY_CHOOSE_RVV(func_name), \
238#define HWY_MAX_DYNAMIC_TARGETS 9
239#define HWY_HIGHEST_TARGET_BIT HWY_HIGHEST_TARGET_BIT_PPC
240#define HWY_CHOOSE_TARGET_LIST(func_name) \
247 HWY_CHOOSE_PPC8(func_name), \
253#define HWY_MAX_DYNAMIC_TARGETS 9
254#define HWY_HIGHEST_TARGET_BIT HWY_HIGHEST_TARGET_BIT_WASM
255#define HWY_CHOOSE_TARGET_LIST(func_name) \
262 HWY_CHOOSE_WASM_EMU256(func_name), \
263 HWY_CHOOSE_WASM(func_name), \
269#define HWY_MAX_DYNAMIC_TARGETS 1
270#define HWY_HIGHEST_TARGET_BIT HWY_HIGHEST_TARGET_BIT_SCALAR
308#if HWY_ARCH_RVV || defined(HWY_NO_LIBCXX)
#define HWY_INLINE
Definition base.h:70
#define HWY_MAYBE_UNUSED
Definition base.h:82
#define HWY_WASM_EMU256
Definition detect_targets.h:106
#define HWY_AVX3_DL
Definition detect_targets.h:65
#define HWY_NEON
Definition detect_targets.h:84
#define HWY_EMU128
Definition detect_targets.h:113
#define HWY_PPC8
Definition detect_targets.h:100
#define HWY_SVE2
Definition detect_targets.h:82
#define HWY_AVX3
Definition detect_targets.h:66
#define HWY_AVX2
Definition detect_targets.h:67
#define HWY_SCALAR
Definition detect_targets.h:115
#define HWY_SVE_256
Definition detect_targets.h:81
#define HWY_SVE2_128
Definition detect_targets.h:80
#define HWY_WASM
Definition detect_targets.h:107
#define HWY_SVE
Definition detect_targets.h:83
#define HWY_RVV
Definition detect_targets.h:90
#define HWY_TARGETS
Definition detect_targets.h:467
#define HWY_SSE4
Definition detect_targets.h:69
#define HWY_SSSE3
Definition detect_targets.h:70
#define HWY_DLLEXPORT
Definition highway_export.h:13
Definition aligned_allocator.h:27
HWY_API size_t Num0BitsBelowLS1Bit_Nonzero64(const uint64_t x)
Definition base.h:806
static HWY_MAYBE_UNUSED const char * TargetName(int64_t target)
Definition targets.h:85
HWY_DLLEXPORT ChosenTarget & GetChosenTarget()
HWY_DLLEXPORT void DisableTargets(int64_t disabled_targets)
HWY_INLINE std::vector< int64_t > SupportedAndGeneratedTargets()
Definition targets.h:73
HWY_DLLEXPORT int64_t SupportedTargets()
HWY_DLLEXPORT void SetSupportedTargetsForTest(int64_t targets)
bool IsInitialized() const
Definition targets.h:294
void StoreMask(int64_t mask)
Definition targets.h:315
size_t HWY_INLINE GetIndex() const
Definition targets.h:301
void DeInit()
Definition targets.h:290
void Update(int64_t targets)
Definition targets.h:282
int64_t LoadMask() const
Definition targets.h:314
std::atomic< int64_t > mask_
Definition targets.h:317
#define HWY_CHOSEN_TARGET_MASK_TARGETS
Definition targets.h:170
#define HWY_CHOSEN_TARGET_SHIFT(X)
Definition targets.h:164
#define HWY_CHOSEN_TARGET_MASK_SCALAR
Definition targets.h:160