native 0.0.1
Vectors, masks and wide register packs for C++26
Loading...
Searching...
No Matches
for_each_backend.h
1// Repeated source inclusion. Every function receives its family target.
2#define NATIVE_BACKEND scalar_backend
3#define NATIVE_BACKEND_NAMESPACE native::detail::NATIVE_BACKEND
4#define NATIVE_RAW_TARGET (::native::abi_lookup<::native::scalar,::native::detail::raw_kernel_policies>::index)
5#define NATIVE_ARCH_REQUIRES(A) (::native::abi_lookup<A,::native::detail::raw_kernel_policies>::index == NATIVE_RAW_TARGET)
6#define NATIVE_DEFAULT_ARCH ::native::scalar
7#define NATIVE_HAS_AVX2 0
8#define NATIVE_HAS_AVX512F 0
9#define NATIVE_HAS_AVX512DQ 0
10#define NATIVE_HAS_AVX512BW 0
11#define NATIVE_HAS_AVX512VL 0
12#define NATIVE_HAS_ARM_NEON 0
14static_assert(NATIVE_DEFAULT_ARCH==::native::target_features(NATIVE_KERNEL_TARGET_0));
15#define NATIVE_COMMON_ARCH(...) (::native::abi_lookup<__VA_ARGS__,::native::detail::raw_kernel_policies>::index == NATIVE_RAW_TARGET)
16#include NATIVE_BACKEND_BODY
17#undef NATIVE_COMMON_ARCH
18#undef NATIVE_BACKEND
19#undef NATIVE_BACKEND_NAMESPACE
20#undef NATIVE_ARCH_REQUIRES
21#undef NATIVE_RAW_TARGET
22#undef NATIVE_DEFAULT_ARCH
23#undef NATIVE_HAS_AVX2
24#undef NATIVE_HAS_AVX512F
25#undef NATIVE_HAS_AVX512DQ
26#undef NATIVE_HAS_AVX512BW
27#undef NATIVE_HAS_AVX512VL
28#undef NATIVE_HAS_ARM_NEON
29
30#if NATIVE_HOST_X86 && (!defined(NATIVE_PROFILE) || NATIVE_PROFILE != 0)
31#define NATIVE_BACKEND avx2_backend
32#define NATIVE_BACKEND_NAMESPACE native::detail::NATIVE_BACKEND
33#define NATIVE_RAW_TARGET 4
34#define NATIVE_ARCH_REQUIRES(A) (::native::abi_lookup<A,::native::detail::raw_kernel_policies>::index == 4)
35#define NATIVE_DEFAULT_ARCH ::native::avx2
36#define NATIVE_HAS_AVX2 1
37#define NATIVE_HAS_AVX512F 0
38#define NATIVE_HAS_AVX512DQ 0
39#define NATIVE_HAS_AVX512BW 0
40#define NATIVE_HAS_AVX512VL 0
41#define NATIVE_HAS_ARM_NEON 0
42#pragma clang attribute push(__attribute__((target(NATIVE_KERNEL_TARGET_1))), apply_to=function)
44static_assert(NATIVE_DEFAULT_ARCH==::native::target_features(NATIVE_KERNEL_TARGET_1));
45#define NATIVE_COMMON_ARCH(...) (::native::abi_lookup<__VA_ARGS__,::native::detail::raw_kernel_policies>::index == NATIVE_RAW_TARGET)
46#include NATIVE_BACKEND_BODY
47#undef NATIVE_COMMON_ARCH
48#pragma clang attribute pop
49#undef NATIVE_BACKEND
50#undef NATIVE_BACKEND_NAMESPACE
51#undef NATIVE_ARCH_REQUIRES
52#undef NATIVE_RAW_TARGET
53#undef NATIVE_DEFAULT_ARCH
54#undef NATIVE_HAS_AVX2
55#undef NATIVE_HAS_AVX512F
56#undef NATIVE_HAS_AVX512DQ
57#undef NATIVE_HAS_AVX512BW
58#undef NATIVE_HAS_AVX512VL
59#undef NATIVE_HAS_ARM_NEON
60#endif
61
62#if NATIVE_HOST_X86 && (!defined(NATIVE_PROFILE) || NATIVE_PROFILE != 0)
63#define NATIVE_BACKEND avx512_nobw_novl_backend
64#define NATIVE_BACKEND_NAMESPACE native::detail::NATIVE_BACKEND
65#define NATIVE_RAW_TARGET 3
66#define NATIVE_ARCH_REQUIRES(A) (::native::abi_lookup<A,::native::detail::raw_kernel_policies>::index == 3)
67#define NATIVE_DEFAULT_ARCH ::native::detail::kernel_base
68#define NATIVE_HAS_AVX2 1
69#define NATIVE_HAS_AVX512F 1
70#define NATIVE_HAS_AVX512DQ 1
71#define NATIVE_HAS_AVX512BW 0
72#define NATIVE_HAS_AVX512VL 0
73#define NATIVE_HAS_ARM_NEON 0
74#pragma clang attribute push(__attribute__((target(NATIVE_KERNEL_TARGET_2))), apply_to=function)
76static_assert(NATIVE_DEFAULT_ARCH==::native::target_features(NATIVE_KERNEL_TARGET_2));
77#define NATIVE_COMMON_ARCH(...) (::native::abi_lookup<__VA_ARGS__,::native::detail::raw_kernel_policies>::index == NATIVE_RAW_TARGET)
78#include NATIVE_BACKEND_BODY
79#undef NATIVE_COMMON_ARCH
80#pragma clang attribute pop
81#undef NATIVE_BACKEND
82#undef NATIVE_BACKEND_NAMESPACE
83#undef NATIVE_ARCH_REQUIRES
84#undef NATIVE_RAW_TARGET
85#undef NATIVE_DEFAULT_ARCH
86#undef NATIVE_HAS_AVX2
87#undef NATIVE_HAS_AVX512F
88#undef NATIVE_HAS_AVX512DQ
89#undef NATIVE_HAS_AVX512BW
90#undef NATIVE_HAS_AVX512VL
91#undef NATIVE_HAS_ARM_NEON
92#endif
93
94#if NATIVE_HOST_X86 && (!defined(NATIVE_PROFILE) || NATIVE_PROFILE != 0)
95#define NATIVE_BACKEND avx512_bw_novl_backend
96#define NATIVE_BACKEND_NAMESPACE native::detail::NATIVE_BACKEND
97#define NATIVE_RAW_TARGET 1
98#define NATIVE_ARCH_REQUIRES(A) (::native::abi_lookup<A,::native::detail::raw_kernel_policies>::index == 1)
99#define NATIVE_DEFAULT_ARCH ::native::detail::kernel_bw
100#define NATIVE_HAS_AVX2 1
101#define NATIVE_HAS_AVX512F 1
102#define NATIVE_HAS_AVX512DQ 1
103#define NATIVE_HAS_AVX512BW 1
104#define NATIVE_HAS_AVX512VL 0
105#define NATIVE_HAS_ARM_NEON 0
106#pragma clang attribute push(__attribute__((target(NATIVE_KERNEL_TARGET_3))), apply_to=function)
108static_assert(NATIVE_DEFAULT_ARCH==::native::target_features(NATIVE_KERNEL_TARGET_3));
109#define NATIVE_COMMON_ARCH(...) (::native::abi_lookup<__VA_ARGS__,::native::detail::raw_kernel_policies>::index == NATIVE_RAW_TARGET)
110#include NATIVE_BACKEND_BODY
111#undef NATIVE_COMMON_ARCH
112#pragma clang attribute pop
113#undef NATIVE_BACKEND
114#undef NATIVE_BACKEND_NAMESPACE
115#undef NATIVE_ARCH_REQUIRES
116#undef NATIVE_RAW_TARGET
117#undef NATIVE_DEFAULT_ARCH
118#undef NATIVE_HAS_AVX2
119#undef NATIVE_HAS_AVX512F
120#undef NATIVE_HAS_AVX512DQ
121#undef NATIVE_HAS_AVX512BW
122#undef NATIVE_HAS_AVX512VL
123#undef NATIVE_HAS_ARM_NEON
124#endif
125
126#if NATIVE_HOST_X86 && (!defined(NATIVE_PROFILE) || NATIVE_PROFILE != 0)
127#define NATIVE_BACKEND avx512_nobw_vl_backend
128#define NATIVE_BACKEND_NAMESPACE native::detail::NATIVE_BACKEND
129#define NATIVE_RAW_TARGET 2
130#define NATIVE_ARCH_REQUIRES(A) (::native::abi_lookup<A,::native::detail::raw_kernel_policies>::index == 2)
131#define NATIVE_DEFAULT_ARCH ::native::detail::kernel_vl
132#define NATIVE_HAS_AVX2 1
133#define NATIVE_HAS_AVX512F 1
134#define NATIVE_HAS_AVX512DQ 1
135#define NATIVE_HAS_AVX512BW 0
136#define NATIVE_HAS_AVX512VL 1
137#define NATIVE_HAS_ARM_NEON 0
138#pragma clang attribute push(__attribute__((target(NATIVE_KERNEL_TARGET_4))), apply_to=function)
140static_assert(NATIVE_DEFAULT_ARCH==::native::target_features(NATIVE_KERNEL_TARGET_4));
141#define NATIVE_COMMON_ARCH(...) (::native::abi_lookup<__VA_ARGS__,::native::detail::raw_kernel_policies>::index == NATIVE_RAW_TARGET)
142#include NATIVE_BACKEND_BODY
143#undef NATIVE_COMMON_ARCH
144#pragma clang attribute pop
145#undef NATIVE_BACKEND
146#undef NATIVE_BACKEND_NAMESPACE
147#undef NATIVE_ARCH_REQUIRES
148#undef NATIVE_RAW_TARGET
149#undef NATIVE_DEFAULT_ARCH
150#undef NATIVE_HAS_AVX2
151#undef NATIVE_HAS_AVX512F
152#undef NATIVE_HAS_AVX512DQ
153#undef NATIVE_HAS_AVX512BW
154#undef NATIVE_HAS_AVX512VL
155#undef NATIVE_HAS_ARM_NEON
156#endif
157
158#if NATIVE_HOST_X86 && (!defined(NATIVE_PROFILE) || NATIVE_PROFILE != 0)
159#define NATIVE_BACKEND avx512_backend
160#define NATIVE_BACKEND_NAMESPACE native::detail::NATIVE_BACKEND
161#define NATIVE_RAW_TARGET 0
162#define NATIVE_ARCH_REQUIRES(A) (::native::abi_lookup<A,::native::detail::raw_kernel_policies>::index == 0)
163#define NATIVE_DEFAULT_ARCH ::native::avx512
164#define NATIVE_HAS_AVX2 1
165#define NATIVE_HAS_AVX512F 1
166#define NATIVE_HAS_AVX512DQ 1
167#define NATIVE_HAS_AVX512BW 1
168#define NATIVE_HAS_AVX512VL 1
169#define NATIVE_HAS_ARM_NEON 0
170#pragma clang attribute push(__attribute__((target(NATIVE_KERNEL_TARGET_5))), apply_to=function)
172static_assert(NATIVE_DEFAULT_ARCH==::native::target_features(NATIVE_KERNEL_TARGET_5));
173#define NATIVE_COMMON_ARCH(...) (::native::abi_lookup<__VA_ARGS__,::native::detail::memory_kernel_policies>::index == 3)
174#include NATIVE_BACKEND_BODY
175#undef NATIVE_COMMON_ARCH
176#pragma clang attribute pop
177#undef NATIVE_BACKEND
178#undef NATIVE_BACKEND_NAMESPACE
179#undef NATIVE_ARCH_REQUIRES
180#undef NATIVE_RAW_TARGET
181#undef NATIVE_DEFAULT_ARCH
182#undef NATIVE_HAS_AVX2
183#undef NATIVE_HAS_AVX512F
184#undef NATIVE_HAS_AVX512DQ
185#undef NATIVE_HAS_AVX512BW
186#undef NATIVE_HAS_AVX512VL
187#undef NATIVE_HAS_ARM_NEON
188#endif
189
190#if NATIVE_HOST_NEON && (!defined(NATIVE_PROFILE) || NATIVE_PROFILE != 0)
191#define NATIVE_BACKEND neon_backend
192#define NATIVE_BACKEND_NAMESPACE native::detail::NATIVE_BACKEND
193#define NATIVE_RAW_TARGET 0
194#define NATIVE_ARCH_REQUIRES(A) (::native::abi_lookup<A,::native::detail::raw_kernel_policies>::index == 0)
195#define NATIVE_DEFAULT_ARCH ::native::neon
196#define NATIVE_HAS_AVX2 0
197#define NATIVE_HAS_AVX512F 0
198#define NATIVE_HAS_AVX512DQ 0
199#define NATIVE_HAS_AVX512BW 0
200#define NATIVE_HAS_AVX512VL 0
201#define NATIVE_HAS_ARM_NEON 1
202#pragma clang attribute push(__attribute__((target(NATIVE_KERNEL_TARGET_20))), apply_to=function)
204static_assert(NATIVE_DEFAULT_ARCH==::native::target_features(NATIVE_KERNEL_TARGET_20));
205#define NATIVE_COMMON_ARCH(...) (::native::abi_lookup<__VA_ARGS__,::native::detail::memory_kernel_policies>::index == 3)
206#include NATIVE_BACKEND_BODY
207#undef NATIVE_COMMON_ARCH
208#pragma clang attribute pop
209#undef NATIVE_BACKEND
210#undef NATIVE_BACKEND_NAMESPACE
211#undef NATIVE_ARCH_REQUIRES
212#undef NATIVE_RAW_TARGET
213#undef NATIVE_DEFAULT_ARCH
214#undef NATIVE_HAS_AVX2
215#undef NATIVE_HAS_AVX512F
216#undef NATIVE_HAS_AVX512DQ
217#undef NATIVE_HAS_AVX512BW
218#undef NATIVE_HAS_AVX512VL
219#undef NATIVE_HAS_ARM_NEON
220#endif
221
222#if NATIVE_HOST_WASM && (!defined(NATIVE_PROFILE) || NATIVE_PROFILE != 0)
223#define NATIVE_BACKEND wasm_backend
224#define NATIVE_BACKEND_NAMESPACE native::detail::NATIVE_BACKEND
225#define NATIVE_RAW_TARGET 0
226#define NATIVE_ARCH_REQUIRES(A) (::native::abi_lookup<A,::native::detail::raw_kernel_policies>::index == 0)
227#define NATIVE_DEFAULT_ARCH (::native::feature_closure(::native::wasm_feature::simd128))
228#define NATIVE_HAS_AVX2 0
229#define NATIVE_HAS_AVX512F 0
230#define NATIVE_HAS_AVX512DQ 0
231#define NATIVE_HAS_AVX512BW 0
232#define NATIVE_HAS_AVX512VL 0
233#define NATIVE_HAS_ARM_NEON 0
234#define NATIVE_HAS_WASM_SIMD128 1
235#pragma clang attribute push(__attribute__((target("simd128"))), apply_to=function)
236#define NATIVE_COMMON_ARCH(...) (::native::abi_lookup<__VA_ARGS__,::native::detail::raw_kernel_policies>::index == 0)
237#include NATIVE_BACKEND_BODY
238#undef NATIVE_COMMON_ARCH
239#pragma clang attribute pop
240#undef NATIVE_BACKEND
241#undef NATIVE_BACKEND_NAMESPACE
242#undef NATIVE_ARCH_REQUIRES
243#undef NATIVE_RAW_TARGET
244#undef NATIVE_DEFAULT_ARCH
245#undef NATIVE_HAS_AVX2
246#undef NATIVE_HAS_AVX512F
247#undef NATIVE_HAS_AVX512DQ
248#undef NATIVE_HAS_AVX512BW
249#undef NATIVE_HAS_AVX512VL
250#undef NATIVE_HAS_ARM_NEON
251#undef NATIVE_HAS_WASM_SIMD128
252#endif
constexpr isa< Family > target_features(std::string_view text) noexcept
Definition isa.h:561