2#include "arm_simd/shared/vfpv3_int.hpp"
4#include "arm_simd/shared/vfpv3_float.hpp"
17#if defined(__clang__) || defined(SIMDE_VERSION)
18#define ARGON_HAS_QUADWORD_STRUCTURE_LOADS
34#if defined(SIMDE_VERSION)
35#define ARGON_HAS_QUADWORD_BYTE_LANE_LOADS
41template <
typename T> nce T convert(float32x2_t a);
42template <
typename T> nce T convert(int32x2_t a);
43template <
typename T> nce T convert(uint32x2_t a);
44template <
typename T> nce T reinterpret(int8x8_t a);
45template <
typename T> nce T reinterpret(int16x4_t a);
46template <
typename T> nce T reinterpret(int32x2_t a);
47template <
typename T> nce T reinterpret(float32x2_t a);
48template <
typename T> nce T reinterpret(uint8x8_t a);
49template <
typename T> nce T reinterpret(uint16x4_t a);
50template <
typename T> nce T reinterpret(uint32x2_t a);
51template <
typename T> nce T reinterpret(poly8x8_t a);
52template <
typename T> nce T reinterpret(poly16x4_t a);
53template <
typename T> nce T reinterpret(uint64x1_t a);
54template <
typename T> nce T reinterpret(int64x1_t a);
55template <
typename T> nce T reinterpret(poly8x16_t a);
56template <
typename T> nce T reinterpret(poly16x8_t a);
57template <
typename T> nce T create(uint64_t a);
58template <
typename T> nce T duplicate(int8_t value);
59template <
typename T> nce T duplicate(int16_t value);
60template <
typename T> nce T duplicate(int32_t value);
61template <
typename T> nce T duplicate(int64_t value);
62template <
typename T> nce T duplicate(uint8_t value);
63template <
typename T> nce T duplicate(uint16_t value);
64template <
typename T> nce T duplicate(uint32_t value);
65template <
typename T> nce T duplicate(uint64_t value);
66template <
typename T> nce T duplicate(float32_t value);
67template <
typename T> nce T duplicate(poly8_t value);
68template <
typename T> nce T duplicate(poly16_t value);
69template <
typename T> nce T load1(int8_t
const *ptr);
70template <
typename T> nce T load1(int16_t
const *ptr);
71template <
typename T> nce T load1(int32_t
const *ptr);
72template <
typename T> nce T load1(int64_t
const *ptr);
73template <
typename T> nce T load1(uint8_t
const *ptr);
74template <
typename T> nce T load1(uint16_t
const *ptr);
75template <
typename T> nce T load1(uint32_t
const *ptr);
76template <
typename T> nce T load1(uint64_t
const *ptr);
77template <
typename T> nce T load1(float32_t
const *ptr);
78template <
typename T> nce T load1(poly8_t
const *ptr);
79template <
typename T> nce T load1(poly16_t
const *ptr);
80template <
typename T> nce T load1_duplicate(int8_t
const *ptr);
81template <
typename T> nce T load1_duplicate(int16_t
const *ptr);
82template <
typename T> nce T load1_duplicate(int32_t
const *ptr);
83template <
typename T> nce T load1_duplicate(int64_t
const *ptr);
84template <
typename T> nce T load1_duplicate(uint8_t
const *ptr);
85template <
typename T> nce T load1_duplicate(uint16_t
const *ptr);
86template <
typename T> nce T load1_duplicate(uint32_t
const *ptr);
87template <
typename T> nce T load1_duplicate(uint64_t
const *ptr);
88template <
typename T> nce T load1_duplicate(float32_t
const *ptr);
89template <
typename T> nce T load1_duplicate(poly8_t
const *ptr);
90template <
typename T> nce T load1_duplicate(poly16_t
const *ptr);
91template <
typename T> nce T load2(int8_t
const *ptr);
92template <
typename T> nce T load2(int16_t
const *ptr);
93template <
typename T> nce T load2(int32_t
const *ptr);
94template <
typename T> nce T load2(uint8_t
const *ptr);
95template <
typename T> nce T load2(uint16_t
const *ptr);
96template <
typename T> nce T load2(uint32_t
const *ptr);
97template <
typename T> nce T load2(float32_t
const *ptr);
98template <
typename T> nce T load2(poly8_t
const *ptr);
99template <
typename T> nce T load2(poly16_t
const *ptr);
100template <
typename T> nce T load3(int8_t
const *ptr);
101template <
typename T> nce T load3(int16_t
const *ptr);
102template <
typename T> nce T load3(int32_t
const *ptr);
103template <
typename T> nce T load3(uint8_t
const *ptr);
104template <
typename T> nce T load3(uint16_t
const *ptr);
105template <
typename T> nce T load3(uint32_t
const *ptr);
106template <
typename T> nce T load3(float32_t
const *ptr);
107template <
typename T> nce T load3(poly8_t
const *ptr);
108template <
typename T> nce T load3(poly16_t
const *ptr);
109template <
typename T> nce T load4(int8_t
const *ptr);
110template <
typename T> nce T load4(int16_t
const *ptr);
111template <
typename T> nce T load4(int32_t
const *ptr);
112template <
typename T> nce T load4(uint8_t
const *ptr);
113template <
typename T> nce T load4(uint16_t
const *ptr);
114template <
typename T> nce T load4(uint32_t
const *ptr);
115template <
typename T> nce T load4(float32_t
const *ptr);
116template <
typename T> nce T load4(poly8_t
const *ptr);
117template <
typename T> nce T load4(poly16_t
const *ptr);
118template <
typename T> nce T load2_duplicate(int8_t
const *ptr);
119template <
typename T> nce T load2_duplicate(int16_t
const *ptr);
120template <
typename T> nce T load2_duplicate(int32_t
const *ptr);
121template <
typename T> nce T load2_duplicate(uint8_t
const *ptr);
122template <
typename T> nce T load2_duplicate(uint16_t
const *ptr);
123template <
typename T> nce T load2_duplicate(uint32_t
const *ptr);
124template <
typename T> nce T load2_duplicate(float32_t
const *ptr);
125template <
typename T> nce T load2_duplicate(poly8_t
const *ptr);
126template <
typename T> nce T load2_duplicate(poly16_t
const *ptr);
127template <
typename T> nce T load3_duplicate(int8_t
const *ptr);
128template <
typename T> nce T load3_duplicate(int16_t
const *ptr);
129template <
typename T> nce T load3_duplicate(int32_t
const *ptr);
130template <
typename T> nce T load3_duplicate(uint8_t
const *ptr);
131template <
typename T> nce T load3_duplicate(uint16_t
const *ptr);
132template <
typename T> nce T load3_duplicate(uint32_t
const *ptr);
133template <
typename T> nce T load3_duplicate(float32_t
const *ptr);
134template <
typename T> nce T load3_duplicate(poly8_t
const *ptr);
135template <
typename T> nce T load3_duplicate(poly16_t
const *ptr);
136template <
typename T> nce T load4_duplicate(int8_t
const *ptr);
137template <
typename T> nce T load4_duplicate(int16_t
const *ptr);
138template <
typename T> nce T load4_duplicate(int32_t
const *ptr);
139template <
typename T> nce T load4_duplicate(uint8_t
const *ptr);
140template <
typename T> nce T load4_duplicate(uint16_t
const *ptr);
141template <
typename T> nce T load4_duplicate(uint32_t
const *ptr);
142template <
typename T> nce T load4_duplicate(float32_t
const *ptr);
143template <
typename T> nce T load4_duplicate(poly8_t
const *ptr);
144template <
typename T> nce T load4_duplicate(poly16_t
const *ptr);
145#if defined(__clang__) || (__GNUC__ > 13)
146template <
typename T> nce T load1_x2(int8_t
const *ptr);
147template <
typename T> nce T load1_x2(int16_t
const *ptr);
148template <
typename T> nce T load1_x2(int32_t
const *ptr);
149template <
typename T> nce T load1_x2(uint8_t
const *ptr);
150template <
typename T> nce T load1_x2(uint16_t
const *ptr);
151template <
typename T> nce T load1_x2(uint32_t
const *ptr);
152template <
typename T> nce T load1_x2(float32_t
const *ptr);
153template <
typename T> nce T load1_x2(poly8_t
const *ptr);
154template <
typename T> nce T load1_x2(poly16_t
const *ptr);
155template <
typename T> nce T load1_x2(int64_t
const *ptr);
156template <
typename T> nce T load1_x2(uint64_t
const *ptr);
157template <
typename T> nce T load1_x3(int8_t
const *ptr);
158template <
typename T> nce T load1_x3(int16_t
const *ptr);
159template <
typename T> nce T load1_x3(int32_t
const *ptr);
160template <
typename T> nce T load1_x3(uint8_t
const *ptr);
161template <
typename T> nce T load1_x3(uint16_t
const *ptr);
162template <
typename T> nce T load1_x3(uint32_t
const *ptr);
163template <
typename T> nce T load1_x3(float32_t
const *ptr);
164template <
typename T> nce T load1_x3(poly8_t
const *ptr);
165template <
typename T> nce T load1_x3(poly16_t
const *ptr);
166template <
typename T> nce T load1_x3(int64_t
const *ptr);
167template <
typename T> nce T load1_x3(uint64_t
const *ptr);
168template <
typename T> nce T load1_x4(int8_t
const *ptr);
169template <
typename T> nce T load1_x4(int16_t
const *ptr);
170template <
typename T> nce T load1_x4(int32_t
const *ptr);
171template <
typename T> nce T load1_x4(uint8_t
const *ptr);
172template <
typename T> nce T load1_x4(uint16_t
const *ptr);
173template <
typename T> nce T load1_x4(uint32_t
const *ptr);
174template <
typename T> nce T load1_x4(float32_t
const *ptr);
175template <
typename T> nce T load1_x4(poly8_t
const *ptr);
176template <
typename T> nce T load1_x4(poly16_t
const *ptr);
177template <
typename T> nce T load1_x4(int64_t
const *ptr);
178template <
typename T> nce T load1_x4(uint64_t
const *ptr);
180template <
typename T> nce T load2(int64_t
const *ptr);
181template <
typename T> nce T load2(uint64_t
const *ptr);
182template <
typename T> nce T load3(int64_t
const *ptr);
183template <
typename T> nce T load3(uint64_t
const *ptr);
184template <
typename T> nce T load4(int64_t
const *ptr);
185template <
typename T> nce T load4(uint64_t
const *ptr);
186template <
typename T> nce T load2_duplicate(int64_t
const *ptr);
187template <
typename T> nce T load2_duplicate(uint64_t
const *ptr);
188template <
typename T> nce T load3_duplicate(int64_t
const *ptr);
189template <
typename T> nce T load3_duplicate(uint64_t
const *ptr);
190template <
typename T> nce T load4_duplicate(int64_t
const *ptr);
191template <
typename T> nce T load4_duplicate(uint64_t
const *ptr);
193inline void store1(int8_t *ptr, int8x8_t val);
194inline void store1(int8_t *ptr, int8x16_t val);
195inline void store1(int16_t *ptr, int16x4_t val);
196inline void store1(int16_t *ptr, int16x8_t val);
197inline void store1(int32_t *ptr, int32x2_t val);
198inline void store1(int32_t *ptr, int32x4_t val);
199inline void store1(int64_t *ptr, int64x1_t val);
200inline void store1(int64_t *ptr, int64x2_t val);
201inline void store1(uint8_t *ptr, uint8x8_t val);
202inline void store1(uint8_t *ptr, uint8x16_t val);
203inline void store1(uint16_t *ptr, uint16x4_t val);
204inline void store1(uint16_t *ptr, uint16x8_t val);
205inline void store1(uint32_t *ptr, uint32x2_t val);
206inline void store1(uint32_t *ptr, uint32x4_t val);
207inline void store1(uint64_t *ptr, uint64x1_t val);
208inline void store1(uint64_t *ptr, uint64x2_t val);
209inline void store1(float32_t *ptr, float32x2_t val);
210inline void store1(float32_t *ptr, float32x4_t val);
211inline void store1(poly8_t *ptr, poly8x8_t val);
212inline void store1(poly8_t *ptr, poly8x16_t val);
213inline void store1(poly16_t *ptr, poly16x4_t val);
214inline void store1(poly16_t *ptr, poly16x8_t val);
215inline void store2(int8_t *ptr, int8x8x2_t val);
216inline void store2(int16_t *ptr, int16x4x2_t val);
217inline void store2(int16_t *ptr, int16x8x2_t val);
218inline void store2(int32_t *ptr, int32x2x2_t val);
219inline void store2(int32_t *ptr, int32x4x2_t val);
220inline void store2(uint8_t *ptr, uint8x8x2_t val);
221inline void store2(uint16_t *ptr, uint16x4x2_t val);
222inline void store2(uint16_t *ptr, uint16x8x2_t val);
223inline void store2(uint32_t *ptr, uint32x2x2_t val);
224inline void store2(uint32_t *ptr, uint32x4x2_t val);
225inline void store2(float32_t *ptr, float32x2x2_t val);
226inline void store2(float32_t *ptr, float32x4x2_t val);
227inline void store2(poly8_t *ptr, poly8x8x2_t val);
228inline void store2(poly16_t *ptr, poly16x4x2_t val);
229inline void store2(poly16_t *ptr, poly16x8x2_t val);
230inline void store3(int8_t *ptr, int8x8x3_t val);
231inline void store3(int8_t *ptr, int8x16x3_t val);
232inline void store3(int16_t *ptr, int16x4x3_t val);
233inline void store3(int16_t *ptr, int16x8x3_t val);
234inline void store3(int32_t *ptr, int32x2x3_t val);
235inline void store3(int32_t *ptr, int32x4x3_t val);
236inline void store3(uint8_t *ptr, uint8x8x3_t val);
237inline void store3(uint8_t *ptr, uint8x16x3_t val);
238inline void store3(uint16_t *ptr, uint16x4x3_t val);
239inline void store3(uint16_t *ptr, uint16x8x3_t val);
240inline void store3(uint32_t *ptr, uint32x2x3_t val);
241inline void store3(uint32_t *ptr, uint32x4x3_t val);
242inline void store3(float32_t *ptr, float32x2x3_t val);
243inline void store3(float32_t *ptr, float32x4x3_t val);
244inline void store3(poly8_t *ptr, poly8x8x3_t val);
245inline void store3(poly8_t *ptr, poly8x16x3_t val);
246inline void store3(poly16_t *ptr, poly16x4x3_t val);
247inline void store3(poly16_t *ptr, poly16x8x3_t val);
248inline void store4(int8_t *ptr, int8x8x4_t val);
249inline void store4(int16_t *ptr, int16x4x4_t val);
250inline void store4(int16_t *ptr, int16x8x4_t val);
251inline void store4(int32_t *ptr, int32x2x4_t val);
252inline void store4(int32_t *ptr, int32x4x4_t val);
253inline void store4(uint8_t *ptr, uint8x8x4_t val);
254inline void store4(uint16_t *ptr, uint16x4x4_t val);
255inline void store4(uint16_t *ptr, uint16x8x4_t val);
256inline void store4(uint32_t *ptr, uint32x2x4_t val);
257inline void store4(uint32_t *ptr, uint32x4x4_t val);
258inline void store4(float32_t *ptr, float32x2x4_t val);
259inline void store4(float32_t *ptr, float32x4x4_t val);
260inline void store4(poly8_t *ptr, poly8x8x4_t val);
261inline void store4(poly16_t *ptr, poly16x4x4_t val);
262inline void store4(poly16_t *ptr, poly16x8x4_t val);
263[[gnu::always_inline]] nce uint8x8_t add(uint8x8_t a, uint8x8_t b) {
return vadd_u8(a, b); }
264[[gnu::always_inline]] nce uint16x8_t add_long(uint8x8_t a, uint8x8_t b) {
return vaddl_u8(a, b); }
265[[gnu::always_inline]] nce uint8x8_t add_halve(uint8x8_t a, uint8x8_t b) {
return vhadd_u8(a, b); }
266[[gnu::always_inline]] nce uint8x8_t add_halve_round(uint8x8_t a, uint8x8_t b) {
return vrhadd_u8(a, b); }
267[[gnu::always_inline]] nce uint8x8_t add_saturate(uint8x8_t a, uint8x8_t b) {
return vqadd_u8(a, b); }
268[[gnu::always_inline]] nce uint8x8_t multiply(uint8x8_t a, uint8x8_t b) {
return vmul_u8(a, b); }
269[[gnu::always_inline]] nce uint8x8_t multiply_add(uint8x8_t a, uint8x8_t b, uint8x8_t c) {
return vmla_u8(a, b, c); }
270[[gnu::always_inline]] nce uint8x8_t multiply_subtract(uint8x8_t a, uint8x8_t b, uint8x8_t c) {
return vmls_u8(a, b, c); }
271[[gnu::always_inline]] nce uint16x8_t multiply_long(uint8x8_t a, uint8x8_t b) {
return vmull_u8(a, b); }
272[[gnu::always_inline]] nce uint8x8_t subtract(uint8x8_t a, uint8x8_t b) {
return vsub_u8(a, b); }
273[[gnu::always_inline]] nce uint16x8_t subtract_long(uint8x8_t a, uint8x8_t b) {
return vsubl_u8(a, b); }
274[[gnu::always_inline]] nce uint8x8_t subtract_halve(uint8x8_t a, uint8x8_t b) {
return vhsub_u8(a, b); }
275[[gnu::always_inline]] nce uint8x8_t subtract_saturate(uint8x8_t a, uint8x8_t b) {
return vqsub_u8(a, b); }
276[[gnu::always_inline]] nce uint8x8_t subtract_absolute(uint8x8_t a, uint8x8_t b) {
return vabd_u8(a, b); }
277[[gnu::always_inline]] nce uint16x8_t subtract_absolute_long(uint8x8_t a, uint8x8_t b) {
return vabdl_u8(a, b); }
278[[gnu::always_inline]] nce uint8x8_t subtract_absolute_add(uint8x8_t a, uint8x8_t b, uint8x8_t c) {
return vaba_u8(a, b, c); }
279[[gnu::always_inline]] nce uint8x8_t max(uint8x8_t a, uint8x8_t b) {
return vmax_u8(a, b); }
280[[gnu::always_inline]] nce uint8x8_t min(uint8x8_t a, uint8x8_t b) {
return vmin_u8(a, b); }
281[[gnu::always_inline]] nce uint8x8_t pairwise_add(uint8x8_t a, uint8x8_t b) {
return vpadd_u8(a, b); }
282[[gnu::always_inline]] nce uint16x4_t pairwise_add_long(uint8x8_t a) {
return vpaddl_u8(a); }
283[[gnu::always_inline]] nce uint8x8_t pairwise_max(uint8x8_t a, uint8x8_t b) {
return vpmax_u8(a, b); }
284[[gnu::always_inline]] nce uint8x8_t pairwise_min(uint8x8_t a, uint8x8_t b) {
return vpmin_u8(a, b); }
285[[gnu::always_inline]] nce uint8x8_t equal(uint8x8_t a, uint8x8_t b) {
return vceq_u8(a, b); }
286[[gnu::always_inline]] nce uint8x8_t greater_than_or_equal(uint8x8_t a, uint8x8_t b) {
return vcge_u8(a, b); }
287[[gnu::always_inline]] nce uint8x8_t less_than_or_equal(uint8x8_t a, uint8x8_t b) {
return vcle_u8(a, b); }
288[[gnu::always_inline]] nce uint8x8_t greater_than(uint8x8_t a, uint8x8_t b) {
return vcgt_u8(a, b); }
289[[gnu::always_inline]] nce uint8x8_t less_than(uint8x8_t a, uint8x8_t b) {
return vclt_u8(a, b); }
290[[gnu::always_inline]] nce uint8x8_t compare_test_nonzero(uint8x8_t a, uint8x8_t b) {
return vtst_u8(a, b); }
291[[gnu::always_inline]] nce uint8x8_t shift_left(uint8x8_t a, int8x8_t b) {
return vshl_u8(a, b); }
292template <
int n>[[gnu::always_inline]] nce uint8x8_t shift_left(uint8x8_t a) {
return vshl_n_u8(a, n); }
293[[gnu::always_inline]] nce uint8x8_t shift_left_saturate(uint8x8_t a, int8x8_t b) {
return vqshl_u8(a, b); }
294template <
int n>[[gnu::always_inline]] nce uint8x8_t shift_left_saturate(uint8x8_t a) {
return vqshl_n_u8(a, n); }
295[[gnu::always_inline]] nce uint8x8_t shift_left_round(uint8x8_t a, int8x8_t b) {
return vrshl_u8(a, b); }
296[[gnu::always_inline]] nce uint8x8_t shift_left_round_saturate(uint8x8_t a, int8x8_t b) {
return vqrshl_u8(a, b); }
297template <
int n>[[gnu::always_inline]] nce uint16x8_t shift_left_long(uint8x8_t a) {
return vshll_n_u8(a, n); }
298template <
int n>[[gnu::always_inline]] nce uint8x8_t shift_left_insert(uint8x8_t a, uint8x8_t b) {
return vsli_n_u8(a, b, n); }
299template <
int n>[[gnu::always_inline]] nce uint8x8_t shift_right(uint8x8_t a) {
return vshr_n_u8(a, n); }
300template <
int n>[[gnu::always_inline]] nce uint8x8_t shift_right_round(uint8x8_t a) {
return vrshr_n_u8(a, n); }
301template <
int n>[[gnu::always_inline]] nce uint8x8_t shift_right_accumulate(uint8x8_t a, uint8x8_t b) {
return vsra_n_u8(a, b, n); }
302template <
int n>[[gnu::always_inline]] nce uint8x8_t shift_right_accumulate_round(uint8x8_t a, uint8x8_t b) {
return vrsra_n_u8(a, b, n); }
303template <
int n>[[gnu::always_inline]] nce uint8x8_t shift_right_insert(uint8x8_t a, uint8x8_t b) {
return vsri_n_u8(a, b, n); }
304template <> [[gnu::always_inline]] nce int8x8_t reinterpret(uint8x8_t a) {
return vreinterpret_s8_u8(a); }
305template <> [[gnu::always_inline]] nce int16x4_t reinterpret(uint8x8_t a) {
return vreinterpret_s16_u8(a); }
306template <> [[gnu::always_inline]] nce int32x2_t reinterpret(uint8x8_t a) {
return vreinterpret_s32_u8(a); }
307template <> [[gnu::always_inline]] nce float32x2_t reinterpret(uint8x8_t a) {
return vreinterpret_f32_u8(a); }
308template <> [[gnu::always_inline]] nce uint16x4_t reinterpret(uint8x8_t a) {
return vreinterpret_u16_u8(a); }
309template <> [[gnu::always_inline]] nce uint32x2_t reinterpret(uint8x8_t a) {
return vreinterpret_u32_u8(a); }
310template <> [[gnu::always_inline]] nce poly8x8_t reinterpret(uint8x8_t a) {
return vreinterpret_p8_u8(a); }
311template <> [[gnu::always_inline]] nce poly16x4_t reinterpret(uint8x8_t a) {
return vreinterpret_p16_u8(a); }
312template <> [[gnu::always_inline]] nce uint64x1_t reinterpret(uint8x8_t a) {
return vreinterpret_u64_u8(a); }
313template <> [[gnu::always_inline]] nce int64x1_t reinterpret(uint8x8_t a) {
return vreinterpret_s64_u8(a); }
314[[gnu::always_inline]] nce uint16x8_t move_long(uint8x8_t a) {
return vmovl_u8(a); }
315[[gnu::always_inline]] nce uint8x8_t bitwise_not(uint8x8_t a) {
return vmvn_u8(a); }
316[[gnu::always_inline]] nce uint8x8_t bitwise_and(uint8x8_t a, uint8x8_t b) {
return vand_u8(a, b); }
317[[gnu::always_inline]] nce uint8x8_t bitwise_or(uint8x8_t a, uint8x8_t b) {
return vorr_u8(a, b); }
318[[gnu::always_inline]] nce uint8x8_t bitwise_xor(uint8x8_t a, uint8x8_t b) {
return veor_u8(a, b); }
319[[gnu::always_inline]] nce uint8x8_t bitwise_or_not(uint8x8_t a, uint8x8_t b) {
return vorn_u8(a, b); }
321[[gnu::always_inline]] nce int8x8_t count_leading_sign_bits(uint8x8_t a) {
return vcls_u8(a); }
323[[gnu::always_inline]] nce uint8x8_t count_leading_zero_bits(uint8x8_t a) {
return vclz_u8(a); }
324[[gnu::always_inline]] nce uint8x8_t count_active_bits(uint8x8_t a) {
return vcnt_u8(a); }
325[[gnu::always_inline]] nce uint8x8_t bitwise_clear(uint8x8_t a, uint8x8_t b) {
return vbic_u8(a, b); }
326[[gnu::always_inline]] nce uint8x8_t bitwise_select(uint8x8_t a, uint8x8_t b, uint8x8_t c) {
return vbsl_u8(a, b, c); }
327[[gnu::always_inline]] nce int8x8_t bitwise_select(uint8x8_t a, int8x8_t b, int8x8_t c) {
return vbsl_s8(a, b, c); }
328[[gnu::always_inline]] nce poly8x8_t bitwise_select(uint8x8_t a, poly8x8_t b, poly8x8_t c) {
return vbsl_p8(a, b, c); }
329template <
int lane>[[gnu::always_inline]] nce uint8x8_t duplicate_lane(uint8x8_t a) {
return vdup_lane_u8(a, lane); }
330template <
int lane>[[gnu::always_inline]] nce uint8x16_t duplicate_lane_quad(uint8x8_t a) {
return vdupq_lane_u8(a, lane); }
331[[gnu::always_inline]] nce uint8x16_t combine(uint8x8_t low, uint8x8_t high) {
return vcombine_u8(low, high); }
332template <
int lane>[[gnu::always_inline]] nce uint8_t get_lane(uint8x8_t v) {
return vget_lane_u8(v, lane); }
333template <
int n>[[gnu::always_inline]] nce uint8x8_t extract(uint8x8_t a, uint8x8_t b) {
return vext_u8(a, b, n); }
334[[gnu::always_inline]] nce uint8x8_t reverse_64bit(uint8x8_t a) {
return vrev64_u8(a); }
335[[gnu::always_inline]] nce uint8x8_t reverse_32bit(uint8x8_t a) {
return vrev32_u8(a); }
336[[gnu::always_inline]] nce uint8x8_t reverse_16bit(uint8x8_t a) {
return vrev16_u8(a); }
337[[gnu::always_inline]] nce uint8x8x2_t zip(uint8x8_t a, uint8x8_t b) {
return vzip_u8(a, b); }
338[[gnu::always_inline]] nce uint8x8x2_t unzip(uint8x8_t a, uint8x8_t b) {
return vuzp_u8(a, b); }
339[[gnu::always_inline]] nce uint8x8x2_t transpose(uint8x8_t a, uint8x8_t b) {
return vtrn_u8(a, b); }
340[[gnu::always_inline]] nce uint8x8_t table_lookup1(uint8x8_t a, uint8x8_t idx) {
return vtbl1_u8(a, idx); }
341[[gnu::always_inline]] nce uint8x8_t table_extension1(uint8x8_t a, uint8x8_t b, uint8x8_t idx) {
return vtbx1_u8(a, b, idx); }
342[[gnu::always_inline]] nce uint8x8_t table_extension2(uint8x8_t a, uint8x8x2_t b, uint8x8_t idx) {
return vtbx2_u8(a, b, idx); }
343[[gnu::always_inline]] nce uint8x8_t table_extension3(uint8x8_t a, uint8x8x3_t b, uint8x8_t idx) {
return vtbx3_u8(a, b, idx); }
344[[gnu::always_inline]] nce uint8x8_t table_extension4(uint8x8_t a, uint8x8x4_t b, uint8x8_t idx) {
return vtbx4_u8(a, b, idx); }
345[[gnu::always_inline]] nce uint8x16_t multiply_add(uint8x16_t a, uint8x16_t b, uint8x16_t c) {
return vmlaq_u8(a, b, c); }
346[[gnu::always_inline]] nce uint8x16_t multiply_subtract(uint8x16_t a, uint8x16_t b, uint8x16_t c) {
return vmlsq_u8(a, b, c); }
347[[gnu::always_inline]] nce uint8x16_t subtract_absolute_add(uint8x16_t a, uint8x16_t b, uint8x16_t c) {
return vabaq_u8(a, b, c); }
348[[gnu::always_inline]] nce uint16x8_t pairwise_add_long(uint8x16_t a) {
return vpaddlq_u8(a); }
349[[gnu::always_inline]] nce uint8x16_t equal(uint8x16_t a, uint8x16_t b) {
return vceqq_u8(a, b); }
350[[gnu::always_inline]] nce uint8x16_t greater_than_or_equal(uint8x16_t a, uint8x16_t b) {
return vcgeq_u8(a, b); }
351[[gnu::always_inline]] nce uint8x16_t less_than_or_equal(uint8x16_t a, uint8x16_t b) {
return vcleq_u8(a, b); }
352[[gnu::always_inline]] nce uint8x16_t greater_than(uint8x16_t a, uint8x16_t b) {
return vcgtq_u8(a, b); }
353[[gnu::always_inline]] nce uint8x16_t less_than(uint8x16_t a, uint8x16_t b) {
return vcltq_u8(a, b); }
354[[gnu::always_inline]] nce uint8x16_t compare_test_nonzero(uint8x16_t a, uint8x16_t b) {
return vtstq_u8(a, b); }
355template <
int n>[[gnu::always_inline]] nce uint8x16_t shift_left(uint8x16_t a) {
return vshlq_n_u8(a, n); }
356template <
int n>[[gnu::always_inline]] nce uint8x16_t shift_right_accumulate(uint8x16_t a, uint8x16_t b) {
return vsraq_n_u8(a, b, n); }
357template <
int n>[[gnu::always_inline]] nce uint8x16_t shift_right_accumulate_round(uint8x16_t a, uint8x16_t b) {
return vrsraq_n_u8(a, b, n); }
358template <> [[gnu::always_inline]] nce poly8x16_t reinterpret(uint8x16_t a) {
return vreinterpretq_p8_u8(a); }
359template <> [[gnu::always_inline]] nce poly16x8_t reinterpret(uint8x16_t a) {
return vreinterpretq_p16_u8(a); }
361[[gnu::always_inline]] nce int8x16_t count_leading_sign_bits(uint8x16_t a) {
return vclsq_u8(a); }
363[[gnu::always_inline]] nce uint8x16_t count_active_bits(uint8x16_t a) {
return vcntq_u8(a); }
364[[gnu::always_inline]] nce uint8x16_t bitwise_select(uint8x16_t a, uint8x16_t b, uint8x16_t c) {
return vbslq_u8(a, b, c); }
365[[gnu::always_inline]] nce uint8x8_t get_high(uint8x16_t a) {
return vget_high_u8(a); }
366[[gnu::always_inline]] nce uint8x8_t get_low(uint8x16_t a) {
return vget_low_u8(a); }
367template <
int n>[[gnu::always_inline]] nce uint8x16_t extract(uint8x16_t a, uint8x16_t b) {
return vextq_u8(a, b, n); }
368[[gnu::always_inline]] nce uint8x16x2_t zip(uint8x16_t a, uint8x16_t b) {
return vzipq_u8(a, b); }
369[[gnu::always_inline]] nce uint8x16x2_t unzip(uint8x16_t a, uint8x16_t b) {
return vuzpq_u8(a, b); }
370[[gnu::always_inline]] nce uint8x16x2_t transpose(uint8x16_t a, uint8x16_t b) {
return vtrnq_u8(a, b); }
371[[gnu::always_inline]] nce int8x16_t bitwise_select(uint8x16_t a, int8x16_t b, int8x16_t c) {
return vbslq_s8(a, b, c); }
372[[gnu::always_inline]] nce poly8x16_t bitwise_select(uint8x16_t a, poly8x16_t b, poly8x16_t c) {
return vbslq_p8(a, b, c); }
373[[gnu::always_inline]] nce int8x8_t add(int8x8_t a, int8x8_t b) {
return vadd_s8(a, b); }
374[[gnu::always_inline]] nce int16x8_t add_long(int8x8_t a, int8x8_t b) {
return vaddl_s8(a, b); }
375[[gnu::always_inline]] nce int8x8_t add_halve(int8x8_t a, int8x8_t b) {
return vhadd_s8(a, b); }
376[[gnu::always_inline]] nce int8x8_t add_halve_round(int8x8_t a, int8x8_t b) {
return vrhadd_s8(a, b); }
377[[gnu::always_inline]] nce int8x8_t add_saturate(int8x8_t a, int8x8_t b) {
return vqadd_s8(a, b); }
378[[gnu::always_inline]] nce int8x8_t multiply(int8x8_t a, int8x8_t b) {
return vmul_s8(a, b); }
379[[gnu::always_inline]] nce int8x8_t multiply_add(int8x8_t a, int8x8_t b, int8x8_t c) {
return vmla_s8(a, b, c); }
380[[gnu::always_inline]] nce int8x8_t multiply_subtract(int8x8_t a, int8x8_t b, int8x8_t c) {
return vmls_s8(a, b, c); }
381[[gnu::always_inline]] nce int16x8_t multiply_long(int8x8_t a, int8x8_t b) {
return vmull_s8(a, b); }
382[[gnu::always_inline]] nce int8x8_t subtract(int8x8_t a, int8x8_t b) {
return vsub_s8(a, b); }
383[[gnu::always_inline]] nce int16x8_t subtract_long(int8x8_t a, int8x8_t b) {
return vsubl_s8(a, b); }
384[[gnu::always_inline]] nce int8x8_t subtract_halve(int8x8_t a, int8x8_t b) {
return vhsub_s8(a, b); }
385[[gnu::always_inline]] nce int8x8_t subtract_saturate(int8x8_t a, int8x8_t b) {
return vqsub_s8(a, b); }
386[[gnu::always_inline]] nce int8x8_t subtract_absolute(int8x8_t a, int8x8_t b) {
return vabd_s8(a, b); }
387[[gnu::always_inline]] nce int16x8_t subtract_absolute_long(int8x8_t a, int8x8_t b) {
return vabdl_s8(a, b); }
388[[gnu::always_inline]] nce int8x8_t subtract_absolute_add(int8x8_t a, int8x8_t b, int8x8_t c) {
return vaba_s8(a, b, c); }
389[[gnu::always_inline]] nce int8x8_t absolute(int8x8_t a) {
return vabs_s8(a); }
390[[gnu::always_inline]] nce int8x8_t absolute_saturate(int8x8_t a) {
return vqabs_s8(a); }
391[[gnu::always_inline]] nce int8x8_t max(int8x8_t a, int8x8_t b) {
return vmax_s8(a, b); }
392[[gnu::always_inline]] nce int8x8_t min(int8x8_t a, int8x8_t b) {
return vmin_s8(a, b); }
393[[gnu::always_inline]] nce int8x8_t pairwise_add(int8x8_t a, int8x8_t b) {
return vpadd_s8(a, b); }
394[[gnu::always_inline]] nce int16x4_t pairwise_add_long(int8x8_t a) {
return vpaddl_s8(a); }
395[[gnu::always_inline]] nce int8x8_t pairwise_max(int8x8_t a, int8x8_t b) {
return vpmax_s8(a, b); }
396[[gnu::always_inline]] nce int8x8_t pairwise_min(int8x8_t a, int8x8_t b) {
return vpmin_s8(a, b); }
397[[gnu::always_inline]] nce uint8x8_t equal(int8x8_t a, int8x8_t b) {
return vceq_s8(a, b); }
398[[gnu::always_inline]] nce uint8x8_t greater_than_or_equal(int8x8_t a, int8x8_t b) {
return vcge_s8(a, b); }
399[[gnu::always_inline]] nce uint8x8_t less_than_or_equal(int8x8_t a, int8x8_t b) {
return vcle_s8(a, b); }
400[[gnu::always_inline]] nce uint8x8_t greater_than(int8x8_t a, int8x8_t b) {
return vcgt_s8(a, b); }
401[[gnu::always_inline]] nce uint8x8_t less_than(int8x8_t a, int8x8_t b) {
return vclt_s8(a, b); }
402[[gnu::always_inline]] nce uint8x8_t compare_test_nonzero(int8x8_t a, int8x8_t b) {
return vtst_s8(a, b); }
403[[gnu::always_inline]] nce int8x8_t shift_left(int8x8_t a, int8x8_t b) {
return vshl_s8(a, b); }
404template <
int n>[[gnu::always_inline]] nce int8x8_t shift_left(int8x8_t a) {
return vshl_n_s8(a, n); }
405[[gnu::always_inline]] nce int8x8_t shift_left_saturate(int8x8_t a, int8x8_t b) {
return vqshl_s8(a, b); }
406template <
int n>[[gnu::always_inline]] nce int8x8_t shift_left_saturate(int8x8_t a) {
return vqshl_n_s8(a, n); }
407template <
int n>[[gnu::always_inline]] nce uint8x8_t shift_left_unsigned_saturate(int8x8_t a) {
return vqshlu_n_s8(a, n); }
408[[gnu::always_inline]] nce int8x8_t shift_left_round(int8x8_t a, int8x8_t b) {
return vrshl_s8(a, b); }
409[[gnu::always_inline]] nce int8x8_t shift_left_round_saturate(int8x8_t a, int8x8_t b) {
return vqrshl_s8(a, b); }
410template <
int n>[[gnu::always_inline]] nce int16x8_t shift_left_long(int8x8_t a) {
return vshll_n_s8(a, n); }
411template <
int n>[[gnu::always_inline]] nce int8x8_t shift_left_insert(int8x8_t a, int8x8_t b) {
return vsli_n_s8(a, b, n); }
412template <
int n>[[gnu::always_inline]] nce int8x8_t shift_right(int8x8_t a) {
return vshr_n_s8(a, n); }
413template <
int n>[[gnu::always_inline]] nce int8x8_t shift_right_round(int8x8_t a) {
return vrshr_n_s8(a, n); }
414template <
int n>[[gnu::always_inline]] nce int8x8_t shift_right_accumulate(int8x8_t a, int8x8_t b) {
return vsra_n_s8(a, b, n); }
415template <
int n>[[gnu::always_inline]] nce int8x8_t shift_right_accumulate_round(int8x8_t a, int8x8_t b) {
return vrsra_n_s8(a, b, n); }
416template <
int n>[[gnu::always_inline]] nce int8x8_t shift_right_insert(int8x8_t a, int8x8_t b) {
return vsri_n_s8(a, b, n); }
417template <> [[gnu::always_inline]] nce int16x4_t reinterpret(int8x8_t a) {
return vreinterpret_s16_s8(a); }
418template <> [[gnu::always_inline]] nce int32x2_t reinterpret(int8x8_t a) {
return vreinterpret_s32_s8(a); }
419template <> [[gnu::always_inline]] nce float32x2_t reinterpret(int8x8_t a) {
return vreinterpret_f32_s8(a); }
420template <> [[gnu::always_inline]] nce uint8x8_t reinterpret(int8x8_t a) {
return vreinterpret_u8_s8(a); }
421template <> [[gnu::always_inline]] nce uint16x4_t reinterpret(int8x8_t a) {
return vreinterpret_u16_s8(a); }
422template <> [[gnu::always_inline]] nce uint32x2_t reinterpret(int8x8_t a) {
return vreinterpret_u32_s8(a); }
423template <> [[gnu::always_inline]] nce poly8x8_t reinterpret(int8x8_t a) {
return vreinterpret_p8_s8(a); }
424template <> [[gnu::always_inline]] nce poly16x4_t reinterpret(int8x8_t a) {
return vreinterpret_p16_s8(a); }
425template <> [[gnu::always_inline]] nce uint64x1_t reinterpret(int8x8_t a) {
return vreinterpret_u64_s8(a); }
426template <> [[gnu::always_inline]] nce int64x1_t reinterpret(int8x8_t a) {
return vreinterpret_s64_s8(a); }
427[[gnu::always_inline]] nce int16x8_t move_long(int8x8_t a) {
return vmovl_s8(a); }
428[[gnu::always_inline]] nce int8x8_t negate(int8x8_t a) {
return vneg_s8(a); }
429[[gnu::always_inline]] nce int8x8_t negate_saturate(int8x8_t a) {
return vqneg_s8(a); }
430[[gnu::always_inline]] nce int8x8_t bitwise_not(int8x8_t a) {
return vmvn_s8(a); }
431[[gnu::always_inline]] nce int8x8_t bitwise_and(int8x8_t a, int8x8_t b) {
return vand_s8(a, b); }
432[[gnu::always_inline]] nce int8x8_t bitwise_or(int8x8_t a, int8x8_t b) {
return vorr_s8(a, b); }
433[[gnu::always_inline]] nce int8x8_t bitwise_xor(int8x8_t a, int8x8_t b) {
return veor_s8(a, b); }
434[[gnu::always_inline]] nce int8x8_t bitwise_or_not(int8x8_t a, int8x8_t b) {
return vorn_s8(a, b); }
435[[gnu::always_inline]] nce int8x8_t count_leading_sign_bits(int8x8_t a) {
return vcls_s8(a); }
436[[gnu::always_inline]] nce int8x8_t count_leading_zero_bits(int8x8_t a) {
return vclz_s8(a); }
437[[gnu::always_inline]] nce int8x8_t count_active_bits(int8x8_t a) {
return vcnt_s8(a); }
438[[gnu::always_inline]] nce int8x8_t bitwise_clear(int8x8_t a, int8x8_t b) {
return vbic_s8(a, b); }
439template <
int lane>[[gnu::always_inline]] nce int8x8_t duplicate_lane(int8x8_t a) {
return vdup_lane_s8(a, lane); }
440template <
int lane>[[gnu::always_inline]] nce int8x16_t duplicate_lane_quad(int8x8_t a) {
return vdupq_lane_s8(a, lane); }
441[[gnu::always_inline]] nce int8x16_t combine(int8x8_t low, int8x8_t high) {
return vcombine_s8(low, high); }
442template <
int lane>[[gnu::always_inline]] nce int8_t get_lane(int8x8_t v) {
return vget_lane_s8(v, lane); }
443template <
int n>[[gnu::always_inline]] nce int8x8_t extract(int8x8_t a, int8x8_t b) {
return vext_s8(a, b, n); }
444[[gnu::always_inline]] nce int8x8_t reverse_64bit(int8x8_t a) {
return vrev64_s8(a); }
445[[gnu::always_inline]] nce int8x8_t reverse_32bit(int8x8_t a) {
return vrev32_s8(a); }
446[[gnu::always_inline]] nce int8x8_t reverse_16bit(int8x8_t a) {
return vrev16_s8(a); }
447[[gnu::always_inline]] nce int8x8x2_t zip(int8x8_t a, int8x8_t b) {
return vzip_s8(a, b); }
448[[gnu::always_inline]] nce int8x8x2_t unzip(int8x8_t a, int8x8_t b) {
return vuzp_s8(a, b); }
449[[gnu::always_inline]] nce int8x8x2_t transpose(int8x8_t a, int8x8_t b) {
return vtrn_s8(a, b); }
450[[gnu::always_inline]] nce int8x8_t table_lookup1(int8x8_t a, int8x8_t idx) {
return vtbl1_s8(a, idx); }
451[[gnu::always_inline]] nce int8x8_t table_extension1(int8x8_t a, int8x8_t b, int8x8_t idx) {
return vtbx1_s8(a, b, idx); }
452[[gnu::always_inline]] nce int8x8_t table_extension2(int8x8_t a, int8x8x2_t b, int8x8_t idx) {
return vtbx2_s8(a, b, idx); }
453[[gnu::always_inline]] nce int8x8_t table_extension3(int8x8_t a, int8x8x3_t b, int8x8_t idx) {
return vtbx3_s8(a, b, idx); }
454[[gnu::always_inline]] nce int8x8_t table_extension4(int8x8_t a, int8x8x4_t b, int8x8_t idx) {
return vtbx4_s8(a, b, idx); }
455[[gnu::always_inline]] nce int8x16_t multiply_add(int8x16_t a, int8x16_t b, int8x16_t c) {
return vmlaq_s8(a, b, c); }
456[[gnu::always_inline]] nce int8x16_t multiply_subtract(int8x16_t a, int8x16_t b, int8x16_t c) {
return vmlsq_s8(a, b, c); }
457[[gnu::always_inline]] nce int8x16_t subtract_absolute_add(int8x16_t a, int8x16_t b, int8x16_t c) {
return vabaq_s8(a, b, c); }
458[[gnu::always_inline]] nce int16x8_t pairwise_add_long(int8x16_t a) {
return vpaddlq_s8(a); }
459[[gnu::always_inline]] nce uint8x16_t equal(int8x16_t a, int8x16_t b) {
return vceqq_s8(a, b); }
460[[gnu::always_inline]] nce uint8x16_t greater_than_or_equal(int8x16_t a, int8x16_t b) {
return vcgeq_s8(a, b); }
461[[gnu::always_inline]] nce uint8x16_t less_than_or_equal(int8x16_t a, int8x16_t b) {
return vcleq_s8(a, b); }
462[[gnu::always_inline]] nce uint8x16_t greater_than(int8x16_t a, int8x16_t b) {
return vcgtq_s8(a, b); }
463[[gnu::always_inline]] nce uint8x16_t less_than(int8x16_t a, int8x16_t b) {
return vcltq_s8(a, b); }
464[[gnu::always_inline]] nce uint8x16_t compare_test_nonzero(int8x16_t a, int8x16_t b) {
return vtstq_s8(a, b); }
465template <
int n>[[gnu::always_inline]] nce int8x16_t shift_left(int8x16_t a) {
return vshlq_n_s8(a, n); }
466template <
int n>[[gnu::always_inline]] nce uint8x16_t shift_left_unsigned_saturate(int8x16_t a) {
return vqshluq_n_s8(a, n); }
467template <
int n>[[gnu::always_inline]] nce int8x16_t shift_right_accumulate(int8x16_t a, int8x16_t b) {
return vsraq_n_s8(a, b, n); }
468template <
int n>[[gnu::always_inline]] nce int8x16_t shift_right_accumulate_round(int8x16_t a, int8x16_t b) {
return vrsraq_n_s8(a, b, n); }
469template <> [[gnu::always_inline]] nce poly8x16_t reinterpret(int8x16_t a) {
return vreinterpretq_p8_s8(a); }
470template <> [[gnu::always_inline]] nce poly16x8_t reinterpret(int8x16_t a) {
return vreinterpretq_p16_s8(a); }
471[[gnu::always_inline]] nce int8x16_t count_active_bits(int8x16_t a) {
return vcntq_s8(a); }
472[[gnu::always_inline]] nce int8x8_t get_high(int8x16_t a) {
return vget_high_s8(a); }
473[[gnu::always_inline]] nce int8x8_t get_low(int8x16_t a) {
return vget_low_s8(a); }
474template <
int n>[[gnu::always_inline]] nce int8x16_t extract(int8x16_t a, int8x16_t b) {
return vextq_s8(a, b, n); }
475[[gnu::always_inline]] nce int8x16x2_t zip(int8x16_t a, int8x16_t b) {
return vzipq_s8(a, b); }
476[[gnu::always_inline]] nce int8x16x2_t unzip(int8x16_t a, int8x16_t b) {
return vuzpq_s8(a, b); }
477[[gnu::always_inline]] nce int8x16x2_t transpose(int8x16_t a, int8x16_t b) {
return vtrnq_s8(a, b); }
478[[gnu::always_inline]] nce uint16x4_t add(uint16x4_t a, uint16x4_t b) {
return vadd_u16(a, b); }
479[[gnu::always_inline]] nce uint32x4_t add_long(uint16x4_t a, uint16x4_t b) {
return vaddl_u16(a, b); }
480[[gnu::always_inline]] nce uint16x4_t add_halve(uint16x4_t a, uint16x4_t b) {
return vhadd_u16(a, b); }
481[[gnu::always_inline]] nce uint16x4_t add_halve_round(uint16x4_t a, uint16x4_t b) {
return vrhadd_u16(a, b); }
482[[gnu::always_inline]] nce uint16x4_t add_saturate(uint16x4_t a, uint16x4_t b) {
return vqadd_u16(a, b); }
483[[gnu::always_inline]] nce uint16x4_t multiply(uint16x4_t a, uint16x4_t b) {
return vmul_u16(a, b); }
484[[gnu::always_inline]] nce uint16x4_t multiply_add(uint16x4_t a, uint16x4_t b, uint16x4_t c) {
return vmla_u16(a, b, c); }
485[[gnu::always_inline]] nce uint16x4_t multiply_subtract(uint16x4_t a, uint16x4_t b, uint16x4_t c) {
return vmls_u16(a, b, c); }
486[[gnu::always_inline]] nce uint32x4_t multiply_long(uint16x4_t a, uint16x4_t b) {
return vmull_u16(a, b); }
487[[gnu::always_inline]] nce uint16x4_t subtract(uint16x4_t a, uint16x4_t b) {
return vsub_u16(a, b); }
488[[gnu::always_inline]] nce uint32x4_t subtract_long(uint16x4_t a, uint16x4_t b) {
return vsubl_u16(a, b); }
489[[gnu::always_inline]] nce uint16x4_t subtract_halve(uint16x4_t a, uint16x4_t b) {
return vhsub_u16(a, b); }
490[[gnu::always_inline]] nce uint16x4_t subtract_saturate(uint16x4_t a, uint16x4_t b) {
return vqsub_u16(a, b); }
491[[gnu::always_inline]] nce uint16x4_t subtract_absolute(uint16x4_t a, uint16x4_t b) {
return vabd_u16(a, b); }
492[[gnu::always_inline]] nce uint32x4_t subtract_absolute_long(uint16x4_t a, uint16x4_t b) {
return vabdl_u16(a, b); }
493[[gnu::always_inline]] nce uint16x4_t subtract_absolute_add(uint16x4_t a, uint16x4_t b, uint16x4_t c) {
return vaba_u16(a, b, c); }
494[[gnu::always_inline]] nce uint16x4_t max(uint16x4_t a, uint16x4_t b) {
return vmax_u16(a, b); }
495[[gnu::always_inline]] nce uint16x4_t min(uint16x4_t a, uint16x4_t b) {
return vmin_u16(a, b); }
496[[gnu::always_inline]] nce uint16x4_t pairwise_add(uint16x4_t a, uint16x4_t b) {
return vpadd_u16(a, b); }
497[[gnu::always_inline]] nce uint32x2_t pairwise_add_long(uint16x4_t a) {
return vpaddl_u16(a); }
498[[gnu::always_inline]] nce uint16x4_t pairwise_add_accumulate_long(uint16x4_t a, uint8x8_t b) {
return vpadal_u8(a, b); }
499[[gnu::always_inline]] nce uint16x4_t pairwise_max(uint16x4_t a, uint16x4_t b) {
return vpmax_u16(a, b); }
500[[gnu::always_inline]] nce uint16x4_t pairwise_min(uint16x4_t a, uint16x4_t b) {
return vpmin_u16(a, b); }
501[[gnu::always_inline]] nce uint16x4_t equal(uint16x4_t a, uint16x4_t b) {
return vceq_u16(a, b); }
502[[gnu::always_inline]] nce uint16x4_t greater_than_or_equal(uint16x4_t a, uint16x4_t b) {
return vcge_u16(a, b); }
503[[gnu::always_inline]] nce uint16x4_t less_than_or_equal(uint16x4_t a, uint16x4_t b) {
return vcle_u16(a, b); }
504[[gnu::always_inline]] nce uint16x4_t greater_than(uint16x4_t a, uint16x4_t b) {
return vcgt_u16(a, b); }
505[[gnu::always_inline]] nce uint16x4_t less_than(uint16x4_t a, uint16x4_t b) {
return vclt_u16(a, b); }
506[[gnu::always_inline]] nce uint16x4_t compare_test_nonzero(uint16x4_t a, uint16x4_t b) {
return vtst_u16(a, b); }
507[[gnu::always_inline]] nce uint16x4_t shift_left(uint16x4_t a, int16x4_t b) {
return vshl_u16(a, b); }
508template <
int n>[[gnu::always_inline]] nce uint16x4_t shift_left(uint16x4_t a) {
return vshl_n_u16(a, n); }
509[[gnu::always_inline]] nce uint16x4_t shift_left_saturate(uint16x4_t a, int16x4_t b) {
return vqshl_u16(a, b); }
510template <
int n>[[gnu::always_inline]] nce uint16x4_t shift_left_saturate(uint16x4_t a) {
return vqshl_n_u16(a, n); }
511template <
int n>[[gnu::always_inline]] nce uint32x4_t shift_left_long(uint16x4_t a) {
return vshll_n_u16(a, n); }
512template <
int n>[[gnu::always_inline]] nce uint16x4_t shift_left_insert(uint16x4_t a, uint16x4_t b) {
return vsli_n_u16(a, b, n); }
513[[gnu::always_inline]] nce uint16x4_t shift_left_round(uint16x4_t a, int16x4_t b) {
return vrshl_u16(a, b); }
514[[gnu::always_inline]] nce uint16x4_t shift_left_round_saturate(uint16x4_t a, int16x4_t b) {
return vqrshl_u16(a, b); }
515template <
int n>[[gnu::always_inline]] nce uint16x4_t shift_right(uint16x4_t a) {
return vshr_n_u16(a, n); }
516template <
int n>[[gnu::always_inline]] nce uint16x4_t shift_right_round(uint16x4_t a) {
return vrshr_n_u16(a, n); }
517template <
int n>[[gnu::always_inline]] nce uint16x4_t shift_right_accumulate(uint16x4_t a, uint16x4_t b) {
return vsra_n_u16(a, b, n); }
518template <
int n>[[gnu::always_inline]] nce uint16x4_t shift_right_accumulate_round(uint16x4_t a, uint16x4_t b) {
return vrsra_n_u16(a, b, n); }
519template <
int n>[[gnu::always_inline]] nce uint16x4_t shift_right_insert(uint16x4_t a, uint16x4_t b) {
return vsri_n_u16(a, b, n); }
520template <> [[gnu::always_inline]] nce int8x8_t reinterpret(uint16x4_t a) {
return vreinterpret_s8_u16(a); }
521template <> [[gnu::always_inline]] nce int16x4_t reinterpret(uint16x4_t a) {
return vreinterpret_s16_u16(a); }
522template <> [[gnu::always_inline]] nce int32x2_t reinterpret(uint16x4_t a) {
return vreinterpret_s32_u16(a); }
523template <> [[gnu::always_inline]] nce float32x2_t reinterpret(uint16x4_t a) {
return vreinterpret_f32_u16(a); }
524template <> [[gnu::always_inline]] nce uint8x8_t reinterpret(uint16x4_t a) {
return vreinterpret_u8_u16(a); }
525template <> [[gnu::always_inline]] nce uint32x2_t reinterpret(uint16x4_t a) {
return vreinterpret_u32_u16(a); }
526template <> [[gnu::always_inline]] nce poly8x8_t reinterpret(uint16x4_t a) {
return vreinterpret_p8_u16(a); }
527template <> [[gnu::always_inline]] nce poly16x4_t reinterpret(uint16x4_t a) {
return vreinterpret_p16_u16(a); }
528template <> [[gnu::always_inline]] nce uint64x1_t reinterpret(uint16x4_t a) {
return vreinterpret_u64_u16(a); }
529template <> [[gnu::always_inline]] nce int64x1_t reinterpret(uint16x4_t a) {
return vreinterpret_s64_u16(a); }
530[[gnu::always_inline]] nce uint32x4_t move_long(uint16x4_t a) {
return vmovl_u16(a); }
531template <
int lane> [[gnu::always_inline]] nce uint16x4_t multiply_add_lane(uint16x4_t a, uint16x4_t b, uint16x4_t v) {
return vmla_lane_u16(a, b, v, lane); }
532template <
int lane> [[gnu::always_inline]] nce uint16x4_t multiply_subtract_lane(uint16x4_t a, uint16x4_t b, uint16x4_t v) {
return vmls_lane_u16(a, b, v, lane); }
533[[gnu::always_inline]] nce uint16x4_t multiply_add(uint16x4_t a, uint16x4_t b, uint16_t c) {
return vmla_n_u16(a, b, c); }
534template <
int lane> [[gnu::always_inline]] nce uint16x4_t multiply_lane(uint16x4_t a, uint16x4_t v) {
return vmul_lane_u16(a, v, lane); }
535template <
int lane> [[gnu::always_inline]] nce uint32x4_t multiply_long_lane(uint16x4_t a, uint16x4_t v) {
return vmull_lane_u16(a, v, lane); }
536[[gnu::always_inline]] nce uint16x4_t multiply_subtract(uint16x4_t a, uint16x4_t b, uint16_t c) {
return vmls_n_u16(a, b, c); }
537[[gnu::always_inline]] nce uint16x4_t bitwise_not(uint16x4_t a) {
return vmvn_u16(a); }
538[[gnu::always_inline]] nce uint16x4_t bitwise_and(uint16x4_t a, uint16x4_t b) {
return vand_u16(a, b); }
539[[gnu::always_inline]] nce uint16x4_t bitwise_or(uint16x4_t a, uint16x4_t b) {
return vorr_u16(a, b); }
540[[gnu::always_inline]] nce uint16x4_t bitwise_xor(uint16x4_t a, uint16x4_t b) {
return veor_u16(a, b); }
541[[gnu::always_inline]] nce uint16x4_t bitwise_or_not(uint16x4_t a, uint16x4_t b) {
return vorn_u16(a, b); }
543[[gnu::always_inline]] nce int16x4_t count_leading_sign_bits(uint16x4_t a) {
return vcls_u16(a); }
545[[gnu::always_inline]] nce uint16x4_t count_leading_zero_bits(uint16x4_t a) {
return vclz_u16(a); }
546[[gnu::always_inline]] nce uint16x4_t bitwise_clear(uint16x4_t a, uint16x4_t b) {
return vbic_u16(a, b); }
547[[gnu::always_inline]] nce uint16x4_t bitwise_select(uint16x4_t a, uint16x4_t b, uint16x4_t c) {
return vbsl_u16(a, b, c); }
548template <
int lane>[[gnu::always_inline]] nce uint16x4_t duplicate_lane(uint16x4_t a) {
return vdup_lane_u16(a, lane); }
549template <
int lane>[[gnu::always_inline]] nce uint16x8_t duplicate_lane_quad(uint16x4_t a) {
return vdupq_lane_u16(a, lane); }
550[[gnu::always_inline]] nce uint16x8_t combine(uint16x4_t low, uint16x4_t high) {
return vcombine_u16(low, high); }
551template <
int lane>[[gnu::always_inline]] nce uint16_t get_lane(uint16x4_t v) {
return vget_lane_u16(v, lane); }
552template <
int n>[[gnu::always_inline]] nce uint16x4_t extract(uint16x4_t a, uint16x4_t b) {
return vext_u16(a, b, n); }
553[[gnu::always_inline]] nce uint16x4_t reverse_64bit(uint16x4_t a) {
return vrev64_u16(a); }
554[[gnu::always_inline]] nce uint16x4_t reverse_32bit(uint16x4_t a) {
return vrev32_u16(a); }
555[[gnu::always_inline]] nce uint16x4x2_t zip(uint16x4_t a, uint16x4_t b) {
return vzip_u16(a, b); }
556[[gnu::always_inline]] nce uint16x4x2_t unzip(uint16x4_t a, uint16x4_t b) {
return vuzp_u16(a, b); }
557[[gnu::always_inline]] nce uint16x4x2_t transpose(uint16x4_t a, uint16x4_t b) {
return vtrn_u16(a, b); }
558[[gnu::always_inline]] nce int16x4_t bitwise_select(uint16x4_t a, int16x4_t b, int16x4_t c) {
return vbsl_s16(a, b, c); }
559[[gnu::always_inline]] nce poly16x4_t bitwise_select(uint16x4_t a, poly16x4_t b, poly16x4_t c) {
return vbsl_p16(a, b, c); }
560[[gnu::always_inline]] nce uint16x4_t multiply(uint16x4_t a, uint16_t b) {
return vmul_n_u16(a, b); }
561[[gnu::always_inline]] nce uint32x4_t multiply_long(uint16x4_t a, uint16_t b) {
return vmull_n_u16(a, b); }
562[[gnu::always_inline]] nce uint16x8_t add(uint16x8_t a, uint8x8_t b) {
return vaddw_u8(a, b); }
563[[gnu::always_inline]] nce uint16x8_t multiply_add_long(uint16x8_t a, uint8x8_t b, uint8x8_t c) {
return vmlal_u8(a, b, c); }
564[[gnu::always_inline]] nce uint16x8_t multiply_subtract_long(uint16x8_t a, uint8x8_t b, uint8x8_t c) {
return vmlsl_u8(a, b, c); }
565[[gnu::always_inline]] nce uint16x8_t subtract(uint16x8_t a, uint8x8_t b) {
return vsubw_u8(a, b); }
566[[gnu::always_inline]] nce uint16x8_t subtract_absolute_add(uint16x8_t a, uint8x8_t b, uint8x8_t c) {
return vabal_u8(a, b, c); }
567[[gnu::always_inline]] nce uint8x8_t add_narrow(uint16x8_t a, uint16x8_t b) {
return vaddhn_u16(a, b); }
568[[gnu::always_inline]] nce uint8x8_t add_round_narrow(uint16x8_t a, uint16x8_t b) {
return vraddhn_u16(a, b); }
569[[gnu::always_inline]] nce uint16x8_t multiply_add(uint16x8_t a, uint16x8_t b, uint16x8_t c) {
return vmlaq_u16(a, b, c); }
570[[gnu::always_inline]] nce uint16x8_t multiply_subtract(uint16x8_t a, uint16x8_t b, uint16x8_t c) {
return vmlsq_u16(a, b, c); }
571[[gnu::always_inline]] nce uint8x8_t subtract_narrow(uint16x8_t a, uint16x8_t b) {
return vsubhn_u16(a, b); }
572[[gnu::always_inline]] nce uint8x8_t subtract_round_narrow(uint16x8_t a, uint16x8_t b) {
return vrsubhn_u16(a, b); }
573[[gnu::always_inline]] nce uint16x8_t subtract_absolute_add(uint16x8_t a, uint16x8_t b, uint16x8_t c) {
return vabaq_u16(a, b, c); }
574[[gnu::always_inline]] nce uint32x4_t pairwise_add_long(uint16x8_t a) {
return vpaddlq_u16(a); }
575[[gnu::always_inline]] nce uint16x8_t pairwise_add_accumulate_long(uint16x8_t a, uint8x16_t b) {
return vpadalq_u8(a, b); }
576[[gnu::always_inline]] nce uint16x8_t equal(uint16x8_t a, uint16x8_t b) {
return vceqq_u16(a, b); }
577[[gnu::always_inline]] nce uint16x8_t greater_than_or_equal(uint16x8_t a, uint16x8_t b) {
return vcgeq_u16(a, b); }
578[[gnu::always_inline]] nce uint16x8_t less_than_or_equal(uint16x8_t a, uint16x8_t b) {
return vcleq_u16(a, b); }
579[[gnu::always_inline]] nce uint16x8_t greater_than(uint16x8_t a, uint16x8_t b) {
return vcgtq_u16(a, b); }
580[[gnu::always_inline]] nce uint16x8_t less_than(uint16x8_t a, uint16x8_t b) {
return vcltq_u16(a, b); }
581[[gnu::always_inline]] nce uint16x8_t compare_test_nonzero(uint16x8_t a, uint16x8_t b) {
return vtstq_u16(a, b); }
582template <
int n>[[gnu::always_inline]] nce uint16x8_t shift_right_accumulate(uint16x8_t a, uint16x8_t b) {
return vsraq_n_u16(a, b, n); }
583template <
int n>[[gnu::always_inline]] nce uint16x8_t shift_right_accumulate_round(uint16x8_t a, uint16x8_t b) {
return vrsraq_n_u16(a, b, n); }
584template <
int n>[[gnu::always_inline]] nce uint8x8_t shift_right_narrow(uint16x8_t a) {
return vshrn_n_u16(a, n); }
585template <
int n>[[gnu::always_inline]] nce uint8x8_t shift_right_saturate_narrow(uint16x8_t a) {
return vqshrn_n_u16(a, n); }
586template <
int n>[[gnu::always_inline]] nce uint8x8_t shift_right_round_saturate_narrow(uint16x8_t a) {
return vqrshrn_n_u16(a, n); }
587template <
int n>[[gnu::always_inline]] nce uint8x8_t shift_right_round_narrow(uint16x8_t a) {
return vrshrn_n_u16(a, n); }
588template <> [[gnu::always_inline]] nce poly8x16_t reinterpret(uint16x8_t a) {
return vreinterpretq_p8_u16(a); }
589template <> [[gnu::always_inline]] nce poly16x8_t reinterpret(uint16x8_t a) {
return vreinterpretq_p16_u16(a); }
590[[gnu::always_inline]] nce uint8x8_t move_narrow(uint16x8_t a) {
return vmovn_u16(a); }
591[[gnu::always_inline]] nce uint8x8_t move_saturate_narrow(uint16x8_t a) {
return vqmovn_u16(a); }
592template <
int lane> [[gnu::always_inline]] nce uint16x8_t multiply_add_lane(uint16x8_t a, uint16x8_t b, uint16x4_t v) {
return vmlaq_lane_u16(a, b, v, lane); }
593template <
int n>[[gnu::always_inline]] nce uint16x8_t shift_left(uint16x8_t a) {
return vshlq_n_u16(a, n); }
594template <
int lane> [[gnu::always_inline]] nce uint16x8_t multiply_lane(uint16x8_t a, uint16x4_t v) {
return vmulq_lane_u16(a, v, lane); }
595template <
int lane> [[gnu::always_inline]] nce uint16x8_t multiply_subtract_lane(uint16x8_t a, uint16x8_t b, uint16x4_t v) {
return vmlsq_lane_u16(a, b, v, lane); }
596[[gnu::always_inline]] nce uint16x8_t multiply_add(uint16x8_t a, uint16x8_t b, uint16_t c) {
return vmlaq_n_u16(a, b, c); }
597[[gnu::always_inline]] nce uint16x8_t multiply_subtract(uint16x8_t a, uint16x8_t b, uint16_t c) {
return vmlsq_n_u16(a, b, c); }
599[[gnu::always_inline]] nce int16x8_t count_leading_sign_bits(uint16x8_t a) {
return vclsq_u16(a); }
601[[gnu::always_inline]] nce uint16x8_t bitwise_select(uint16x8_t a, uint16x8_t b, uint16x8_t c) {
return vbslq_u16(a, b, c); }
602[[gnu::always_inline]] nce uint16x4_t get_high(uint16x8_t a) {
return vget_high_u16(a); }
603[[gnu::always_inline]] nce uint16x4_t get_low(uint16x8_t a) {
return vget_low_u16(a); }
604template <
int n>[[gnu::always_inline]] nce uint16x8_t extract(uint16x8_t a, uint16x8_t b) {
return vextq_u16(a, b, n); }
605[[gnu::always_inline]] nce uint16x8x2_t zip(uint16x8_t a, uint16x8_t b) {
return vzipq_u16(a, b); }
606[[gnu::always_inline]] nce uint16x8x2_t unzip(uint16x8_t a, uint16x8_t b) {
return vuzpq_u16(a, b); }
607[[gnu::always_inline]] nce uint16x8x2_t transpose(uint16x8_t a, uint16x8_t b) {
return vtrnq_u16(a, b); }
608[[gnu::always_inline]] nce int16x8_t bitwise_select(uint16x8_t a, int16x8_t b, int16x8_t c) {
return vbslq_s16(a, b, c); }
609[[gnu::always_inline]] nce poly16x8_t bitwise_select(uint16x8_t a, poly16x8_t b, poly16x8_t c) {
return vbslq_p16(a, b, c); }
610[[gnu::always_inline]] nce int16x4_t pairwise_add_accumulate_long(int16x4_t a, int8x8_t b) {
return vpadal_s8(a, b); }
611[[gnu::always_inline]] nce int16x4_t add(int16x4_t a, int16x4_t b) {
return vadd_s16(a, b); }
612[[gnu::always_inline]] nce int32x4_t add_long(int16x4_t a, int16x4_t b) {
return vaddl_s16(a, b); }
613[[gnu::always_inline]] nce int16x4_t add_halve(int16x4_t a, int16x4_t b) {
return vhadd_s16(a, b); }
614[[gnu::always_inline]] nce int16x4_t add_halve_round(int16x4_t a, int16x4_t b) {
return vrhadd_s16(a, b); }
615[[gnu::always_inline]] nce int16x4_t add_saturate(int16x4_t a, int16x4_t b) {
return vqadd_s16(a, b); }
616[[gnu::always_inline]] nce int16x4_t multiply(int16x4_t a, int16x4_t b) {
return vmul_s16(a, b); }
617[[gnu::always_inline]] nce int16x4_t multiply_add(int16x4_t a, int16x4_t b, int16x4_t c) {
return vmla_s16(a, b, c); }
618[[gnu::always_inline]] nce int16x4_t multiply_subtract(int16x4_t a, int16x4_t b, int16x4_t c) {
return vmls_s16(a, b, c); }
619[[gnu::always_inline]] nce int16x4_t multiply_double_saturate_high(int16x4_t a, int16x4_t b) {
return vqdmulh_s16(a, b); }
620[[gnu::always_inline]] nce int16x4_t multiply_double_round_saturate_high(int16x4_t a, int16x4_t b) {
return vqrdmulh_s16(a, b); }
621[[gnu::always_inline]] nce int32x4_t multiply_double_saturate_long(int16x4_t a, int16x4_t b) {
return vqdmull_s16(a, b); }
622[[gnu::always_inline]] nce int32x4_t multiply_long(int16x4_t a, int16x4_t b) {
return vmull_s16(a, b); }
623template <
int lane> [[gnu::always_inline]] nce int32x4_t multiply_double_saturate_long_lane(int16x4_t a, int16x4_t v) {
return vqdmull_lane_s16(a, v, lane); }
624template <
int lane> [[gnu::always_inline]] nce int16x4_t multiply_double_saturate_high_lane(int16x4_t a, int16x4_t v) {
return vqdmulh_lane_s16(a, v, lane); }
625template <
int lane> [[gnu::always_inline]] nce int16x4_t multiply_double_round_saturate_high_lane(int16x4_t a, int16x4_t v) {
return vqrdmulh_lane_s16(a, v, lane); }
626[[gnu::always_inline]] nce int16x4_t subtract(int16x4_t a, int16x4_t b) {
return vsub_s16(a, b); }
627[[gnu::always_inline]] nce int32x4_t subtract_long(int16x4_t a, int16x4_t b) {
return vsubl_s16(a, b); }
628[[gnu::always_inline]] nce int16x4_t subtract_halve(int16x4_t a, int16x4_t b) {
return vhsub_s16(a, b); }
629[[gnu::always_inline]] nce int16x4_t subtract_saturate(int16x4_t a, int16x4_t b) {
return vqsub_s16(a, b); }
630[[gnu::always_inline]] nce int16x4_t subtract_absolute(int16x4_t a, int16x4_t b) {
return vabd_s16(a, b); }
631[[gnu::always_inline]] nce int32x4_t subtract_absolute_long(int16x4_t a, int16x4_t b) {
return vabdl_s16(a, b); }
632[[gnu::always_inline]] nce int16x4_t subtract_absolute_add(int16x4_t a, int16x4_t b, int16x4_t c) {
return vaba_s16(a, b, c); }
633[[gnu::always_inline]] nce int32x4_t multiply_double_saturate_long(int16x4_t a, int16_t b) {
return vqdmull_n_s16(a, b); }
634[[gnu::always_inline]] nce int16x4_t multiply_double_saturate_high(int16x4_t a, int16_t b) {
return vqdmulh_n_s16(a, b); }
635[[gnu::always_inline]] nce int16x4_t multiply_double_round_saturate_high(int16x4_t a, int16_t b) {
return vqrdmulh_n_s16(a, b); }
636[[gnu::always_inline]] nce int16x4_t absolute(int16x4_t a) {
return vabs_s16(a); }
637[[gnu::always_inline]] nce int16x4_t absolute_saturate(int16x4_t a) {
return vqabs_s16(a); }
638[[gnu::always_inline]] nce int16x4_t max(int16x4_t a, int16x4_t b) {
return vmax_s16(a, b); }
639[[gnu::always_inline]] nce int16x4_t min(int16x4_t a, int16x4_t b) {
return vmin_s16(a, b); }
640[[gnu::always_inline]] nce int16x4_t pairwise_add(int16x4_t a, int16x4_t b) {
return vpadd_s16(a, b); }
641[[gnu::always_inline]] nce int32x2_t pairwise_add_long(int16x4_t a) {
return vpaddl_s16(a); }
642[[gnu::always_inline]] nce int16x4_t pairwise_max(int16x4_t a, int16x4_t b) {
return vpmax_s16(a, b); }
643[[gnu::always_inline]] nce int16x4_t pairwise_min(int16x4_t a, int16x4_t b) {
return vpmin_s16(a, b); }
644[[gnu::always_inline]] nce uint16x4_t equal(int16x4_t a, int16x4_t b) {
return vceq_s16(a, b); }
645[[gnu::always_inline]] nce uint16x4_t greater_than_or_equal(int16x4_t a, int16x4_t b) {
return vcge_s16(a, b); }
646[[gnu::always_inline]] nce uint16x4_t less_than_or_equal(int16x4_t a, int16x4_t b) {
return vcle_s16(a, b); }
647[[gnu::always_inline]] nce uint16x4_t greater_than(int16x4_t a, int16x4_t b) {
return vcgt_s16(a, b); }
648[[gnu::always_inline]] nce uint16x4_t less_than(int16x4_t a, int16x4_t b) {
return vclt_s16(a, b); }
649[[gnu::always_inline]] nce uint16x4_t compare_test_nonzero(int16x4_t a, int16x4_t b) {
return vtst_s16(a, b); }
650[[gnu::always_inline]] nce int16x4_t shift_left(int16x4_t a, int16x4_t b) {
return vshl_s16(a, b); }
651template <
int n>[[gnu::always_inline]] nce int16x4_t shift_left(int16x4_t a) {
return vshl_n_s16(a, n); }
652[[gnu::always_inline]] nce int16x4_t shift_left_saturate(int16x4_t a, int16x4_t b) {
return vqshl_s16(a, b); }
653template <
int n>[[gnu::always_inline]] nce int16x4_t shift_left_saturate(int16x4_t a) {
return vqshl_n_s16(a, n); }
654template <
int n>[[gnu::always_inline]] nce uint16x4_t shift_left_unsigned_saturate(int16x4_t a) {
return vqshlu_n_s16(a, n); }
655[[gnu::always_inline]] nce int16x4_t shift_left_round(int16x4_t a, int16x4_t b) {
return vrshl_s16(a, b); }
656[[gnu::always_inline]] nce int16x4_t shift_left_round_saturate(int16x4_t a, int16x4_t b) {
return vqrshl_s16(a, b); }
657template <
int n>[[gnu::always_inline]] nce int32x4_t shift_left_long(int16x4_t a) {
return vshll_n_s16(a, n); }
658template <
int n>[[gnu::always_inline]] nce int16x4_t shift_left_insert(int16x4_t a, int16x4_t b) {
return vsli_n_s16(a, b, n); }
659template <
int n>[[gnu::always_inline]] nce int16x4_t shift_right(int16x4_t a) {
return vshr_n_s16(a, n); }
660template <
int n>[[gnu::always_inline]] nce int16x4_t shift_right_round(int16x4_t a) {
return vrshr_n_s16(a, n); }
661template <
int n>[[gnu::always_inline]] nce int16x4_t shift_right_accumulate(int16x4_t a, int16x4_t b) {
return vsra_n_s16(a, b, n); }
662template <
int n>[[gnu::always_inline]] nce int16x4_t shift_right_accumulate_round(int16x4_t a, int16x4_t b) {
return vrsra_n_s16(a, b, n); }
663template <
int n>[[gnu::always_inline]] nce int16x4_t shift_right_insert(int16x4_t a, int16x4_t b) {
return vsri_n_s16(a, b, n); }
664template <> [[gnu::always_inline]] nce int8x8_t reinterpret(int16x4_t a) {
return vreinterpret_s8_s16(a); }
665template <> [[gnu::always_inline]] nce int32x2_t reinterpret(int16x4_t a) {
return vreinterpret_s32_s16(a); }
666template <> [[gnu::always_inline]] nce float32x2_t reinterpret(int16x4_t a) {
return vreinterpret_f32_s16(a); }
667template <> [[gnu::always_inline]] nce uint8x8_t reinterpret(int16x4_t a) {
return vreinterpret_u8_s16(a); }
668template <> [[gnu::always_inline]] nce uint16x4_t reinterpret(int16x4_t a) {
return vreinterpret_u16_s16(a); }
669template <> [[gnu::always_inline]] nce uint32x2_t reinterpret(int16x4_t a) {
return vreinterpret_u32_s16(a); }
670template <> [[gnu::always_inline]] nce poly8x8_t reinterpret(int16x4_t a) {
return vreinterpret_p8_s16(a); }
671template <> [[gnu::always_inline]] nce poly16x4_t reinterpret(int16x4_t a) {
return vreinterpret_p16_s16(a); }
672template <> [[gnu::always_inline]] nce uint64x1_t reinterpret(int16x4_t a) {
return vreinterpret_u64_s16(a); }
673template <> [[gnu::always_inline]] nce int64x1_t reinterpret(int16x4_t a) {
return vreinterpret_s64_s16(a); }
674[[gnu::always_inline]] nce int32x4_t move_long(int16x4_t a) {
return vmovl_s16(a); }
675template <
int lane> [[gnu::always_inline]] nce int16x4_t multiply_add_lane(int16x4_t a, int16x4_t b, int16x4_t v) {
return vmla_lane_s16(a, b, v, lane); }
676template <
int lane> [[gnu::always_inline]] nce int16x4_t multiply_subtract_lane(int16x4_t a, int16x4_t b, int16x4_t v) {
return vmls_lane_s16(a, b, v, lane); }
677[[gnu::always_inline]] nce int16x4_t multiply_add(int16x4_t a, int16x4_t b, int16_t c) {
return vmla_n_s16(a, b, c); }
678template <
int lane> [[gnu::always_inline]] nce int16x4_t multiply_lane(int16x4_t a, int16x4_t v) {
return vmul_lane_s16(a, v, lane); }
679template <
int lane> [[gnu::always_inline]] nce int32x4_t multiply_long_lane(int16x4_t a, int16x4_t v) {
return vmull_lane_s16(a, v, lane); }
680[[gnu::always_inline]] nce int16x4_t multiply_subtract(int16x4_t a, int16x4_t b, int16_t c) {
return vmls_n_s16(a, b, c); }
681[[gnu::always_inline]] nce int16x4_t negate(int16x4_t a) {
return vneg_s16(a); }
682[[gnu::always_inline]] nce int16x4_t negate_saturate(int16x4_t a) {
return vqneg_s16(a); }
683[[gnu::always_inline]] nce int16x4_t bitwise_not(int16x4_t a) {
return vmvn_s16(a); }
684[[gnu::always_inline]] nce int16x4_t bitwise_and(int16x4_t a, int16x4_t b) {
return vand_s16(a, b); }
685[[gnu::always_inline]] nce int16x4_t bitwise_or(int16x4_t a, int16x4_t b) {
return vorr_s16(a, b); }
686[[gnu::always_inline]] nce int16x4_t bitwise_xor(int16x4_t a, int16x4_t b) {
return veor_s16(a, b); }
687[[gnu::always_inline]] nce int16x4_t bitwise_or_not(int16x4_t a, int16x4_t b) {
return vorn_s16(a, b); }
688[[gnu::always_inline]] nce int16x4_t count_leading_sign_bits(int16x4_t a) {
return vcls_s16(a); }
689[[gnu::always_inline]] nce int16x4_t count_leading_zero_bits(int16x4_t a) {
return vclz_s16(a); }
690[[gnu::always_inline]] nce int16x4_t bitwise_clear(int16x4_t a, int16x4_t b) {
return vbic_s16(a, b); }
691template <
int lane>[[gnu::always_inline]] nce int16x4_t duplicate_lane(int16x4_t a) {
return vdup_lane_s16(a, lane); }
692template <
int lane>[[gnu::always_inline]] nce int16x8_t duplicate_lane_quad(int16x4_t a) {
return vdupq_lane_s16(a, lane); }
693[[gnu::always_inline]] nce int16x8_t combine(int16x4_t low, int16x4_t high) {
return vcombine_s16(low, high); }
694template <
int lane>[[gnu::always_inline]] nce int16_t get_lane(int16x4_t v) {
return vget_lane_s16(v, lane); }
695template <
int n>[[gnu::always_inline]] nce int16x4_t extract(int16x4_t a, int16x4_t b) {
return vext_s16(a, b, n); }
696[[gnu::always_inline]] nce int16x4_t reverse_64bit(int16x4_t a) {
return vrev64_s16(a); }
697[[gnu::always_inline]] nce int16x4_t reverse_32bit(int16x4_t a) {
return vrev32_s16(a); }
698[[gnu::always_inline]] nce int16x4x2_t zip(int16x4_t a, int16x4_t b) {
return vzip_s16(a, b); }
699[[gnu::always_inline]] nce int16x4x2_t unzip(int16x4_t a, int16x4_t b) {
return vuzp_s16(a, b); }
700[[gnu::always_inline]] nce int16x4x2_t transpose(int16x4_t a, int16x4_t b) {
return vtrn_s16(a, b); }
701[[gnu::always_inline]] nce int16x4_t multiply(int16x4_t a, int16_t b) {
return vmul_n_s16(a, b); }
702[[gnu::always_inline]] nce int32x4_t multiply_long(int16x4_t a, int16_t b) {
return vmull_n_s16(a, b); }
703[[gnu::always_inline]] nce int16x8_t add(int16x8_t a, int8x8_t b) {
return vaddw_s8(a, b); }
704[[gnu::always_inline]] nce int16x8_t multiply_add_long(int16x8_t a, int8x8_t b, int8x8_t c) {
return vmlal_s8(a, b, c); }
705[[gnu::always_inline]] nce int16x8_t multiply_subtract_long(int16x8_t a, int8x8_t b, int8x8_t c) {
return vmlsl_s8(a, b, c); }
706[[gnu::always_inline]] nce int16x8_t subtract(int16x8_t a, int8x8_t b) {
return vsubw_s8(a, b); }
707[[gnu::always_inline]] nce int16x8_t subtract_absolute_add(int16x8_t a, int8x8_t b, int8x8_t c) {
return vabal_s8(a, b, c); }
708template <
int lane> [[gnu::always_inline]] nce int16x8_t multiply_double_saturate_high_lane(int16x8_t a, int16x4_t v) {
return vqdmulhq_lane_s16(a, v, lane); }
709template <
int lane> [[gnu::always_inline]] nce int16x8_t multiply_double_round_saturate_high_lane(int16x8_t a, int16x4_t v) {
return vqrdmulhq_lane_s16(a, v, lane); }
710[[gnu::always_inline]] nce int8x8_t add_narrow(int16x8_t a, int16x8_t b) {
return vaddhn_s16(a, b); }
711[[gnu::always_inline]] nce int8x8_t add_round_narrow(int16x8_t a, int16x8_t b) {
return vraddhn_s16(a, b); }
712[[gnu::always_inline]] nce int16x8_t multiply_add(int16x8_t a, int16x8_t b, int16x8_t c) {
return vmlaq_s16(a, b, c); }
713[[gnu::always_inline]] nce int16x8_t multiply_subtract(int16x8_t a, int16x8_t b, int16x8_t c) {
return vmlsq_s16(a, b, c); }
714[[gnu::always_inline]] nce int8x8_t subtract_narrow(int16x8_t a, int16x8_t b) {
return vsubhn_s16(a, b); }
715[[gnu::always_inline]] nce int8x8_t subtract_round_narrow(int16x8_t a, int16x8_t b) {
return vrsubhn_s16(a, b); }
716[[gnu::always_inline]] nce int16x8_t subtract_absolute_add(int16x8_t a, int16x8_t b, int16x8_t c) {
return vabaq_s16(a, b, c); }
717[[gnu::always_inline]] nce int32x4_t pairwise_add_long(int16x8_t a) {
return vpaddlq_s16(a); }
718[[gnu::always_inline]] nce int16x8_t pairwise_add_accumulate_long(int16x8_t a, int8x16_t b) {
return vpadalq_s8(a, b); }
719[[gnu::always_inline]] nce uint16x8_t equal(int16x8_t a, int16x8_t b) {
return vceqq_s16(a, b); }
720[[gnu::always_inline]] nce uint16x8_t greater_than_or_equal(int16x8_t a, int16x8_t b) {
return vcgeq_s16(a, b); }
721[[gnu::always_inline]] nce uint16x8_t less_than_or_equal(int16x8_t a, int16x8_t b) {
return vcleq_s16(a, b); }
722[[gnu::always_inline]] nce uint16x8_t greater_than(int16x8_t a, int16x8_t b) {
return vcgtq_s16(a, b); }
723[[gnu::always_inline]] nce uint16x8_t less_than(int16x8_t a, int16x8_t b) {
return vcltq_s16(a, b); }
724[[gnu::always_inline]] nce uint16x8_t compare_test_nonzero(int16x8_t a, int16x8_t b) {
return vtstq_s16(a, b); }
725template <
int n>[[gnu::always_inline]] nce int16x8_t shift_left(int16x8_t a) {
return vshlq_n_s16(a, n); }
726template <
int n>[[gnu::always_inline]] nce uint16x8_t shift_left_unsigned_saturate(int16x8_t a) {
return vqshluq_n_s16(a, n); }
727template <
int n>[[gnu::always_inline]] nce int16x8_t shift_right_accumulate(int16x8_t a, int16x8_t b) {
return vsraq_n_s16(a, b, n); }
728template <
int n>[[gnu::always_inline]] nce int16x8_t shift_right_accumulate_round(int16x8_t a, int16x8_t b) {
return vrsraq_n_s16(a, b, n); }
729template <
int n>[[gnu::always_inline]] nce int8x8_t shift_right_narrow(int16x8_t a) {
return vshrn_n_s16(a, n); }
730template <
int n>[[gnu::always_inline]] nce uint8x8_t shift_right_saturate_narrow_unsigned(int16x8_t a) {
return vqshrun_n_s16(a, n); }
731template <
int n>[[gnu::always_inline]] nce int8x8_t shift_right_saturate_narrow(int16x8_t a) {
return vqshrn_n_s16(a, n); }
732template <
int n>[[gnu::always_inline]] nce uint8x8_t shift_right_round_saturate_narrow_unsigned(int16x8_t a) {
return vqrshrun_n_s16(a, n); }
733template <
int n>[[gnu::always_inline]] nce int8x8_t shift_right_round_saturate_narrow(int16x8_t a) {
return vqrshrn_n_s16(a, n); }
734template <
int n>[[gnu::always_inline]] nce int8x8_t shift_right_round_narrow(int16x8_t a) {
return vrshrn_n_s16(a, n); }
735template <> [[gnu::always_inline]] nce poly8x16_t reinterpret(int16x8_t a) {
return vreinterpretq_p8_s16(a); }
736template <> [[gnu::always_inline]] nce poly16x8_t reinterpret(int16x8_t a) {
return vreinterpretq_p16_s16(a); }
737[[gnu::always_inline]] nce int8x8_t move_narrow(int16x8_t a) {
return vmovn_s16(a); }
738[[gnu::always_inline]] nce int8x8_t move_saturate_narrow(int16x8_t a) {
return vqmovn_s16(a); }
739[[gnu::always_inline]] nce uint8x8_t move_unsigned_saturate_narrow(int16x8_t a) {
return vqmovun_s16(a); }
740template <
int lane> [[gnu::always_inline]] nce int16x8_t multiply_lane(int16x8_t a, int16x4_t v) {
return vmulq_lane_s16(a, v, lane); }
741template <
int lane> [[gnu::always_inline]] nce int16x8_t multiply_add_lane(int16x8_t a, int16x8_t b, int16x4_t v) {
return vmlaq_lane_s16(a, b, v, lane); }
742template <
int lane> [[gnu::always_inline]] nce int16x8_t multiply_subtract_lane(int16x8_t a, int16x8_t b, int16x4_t v) {
return vmlsq_lane_s16(a, b, v, lane); }
743[[gnu::always_inline]] nce int16x8_t multiply_add(int16x8_t a, int16x8_t b, int16_t c) {
return vmlaq_n_s16(a, b, c); }
744[[gnu::always_inline]] nce int16x8_t multiply_subtract(int16x8_t a, int16x8_t b, int16_t c) {
return vmlsq_n_s16(a, b, c); }
745[[gnu::always_inline]] nce int16x4_t get_high(int16x8_t a) {
return vget_high_s16(a); }
746[[gnu::always_inline]] nce int16x4_t get_low(int16x8_t a) {
return vget_low_s16(a); }
747template <
int n>[[gnu::always_inline]] nce int16x8_t extract(int16x8_t a, int16x8_t b) {
return vextq_s16(a, b, n); }
748[[gnu::always_inline]] nce int16x8x2_t zip(int16x8_t a, int16x8_t b) {
return vzipq_s16(a, b); }
749[[gnu::always_inline]] nce int16x8x2_t unzip(int16x8_t a, int16x8_t b) {
return vuzpq_s16(a, b); }
750[[gnu::always_inline]] nce int16x8x2_t transpose(int16x8_t a, int16x8_t b) {
return vtrnq_s16(a, b); }
751[[gnu::always_inline]] nce int32x2_t add(int32x2_t a, int32x2_t b) {
return vadd_s32(a, b); }
752[[gnu::always_inline]] nce int64x2_t add_long(int32x2_t a, int32x2_t b) {
return vaddl_s32(a, b); }
753[[gnu::always_inline]] nce int32x2_t add_halve(int32x2_t a, int32x2_t b) {
return vhadd_s32(a, b); }
754[[gnu::always_inline]] nce int32x2_t add_halve_round(int32x2_t a, int32x2_t b) {
return vrhadd_s32(a, b); }
755[[gnu::always_inline]] nce int32x2_t add_saturate(int32x2_t a, int32x2_t b) {
return vqadd_s32(a, b); }
756[[gnu::always_inline]] nce int32x2_t multiply(int32x2_t a, int32x2_t b) {
return vmul_s32(a, b); }
757[[gnu::always_inline]] nce int32x2_t multiply_add(int32x2_t a, int32x2_t b, int32x2_t c) {
return vmla_s32(a, b, c); }
758[[gnu::always_inline]] nce int32x2_t multiply_subtract(int32x2_t a, int32x2_t b, int32x2_t c) {
return vmls_s32(a, b, c); }
759[[gnu::always_inline]] nce int32x2_t multiply_double_saturate_high(int32x2_t a, int32x2_t b) {
return vqdmulh_s32(a, b); }
760[[gnu::always_inline]] nce int32x2_t multiply_double_round_saturate_high(int32x2_t a, int32x2_t b) {
return vqrdmulh_s32(a, b); }
761[[gnu::always_inline]] nce int64x2_t multiply_double_saturate_long(int32x2_t a, int32x2_t b) {
return vqdmull_s32(a, b); }
762[[gnu::always_inline]] nce int64x2_t multiply_long(int32x2_t a, int32x2_t b) {
return vmull_s32(a, b); }
763template <
int lane> [[gnu::always_inline]] nce int64x2_t multiply_double_saturate_long_lane(int32x2_t a, int32x2_t v) {
return vqdmull_lane_s32(a, v, lane); }
764template <
int lane> [[gnu::always_inline]] nce int32x2_t multiply_double_saturate_high_lane(int32x2_t a, int32x2_t v) {
return vqdmulh_lane_s32(a, v, lane); }
765template <
int lane> [[gnu::always_inline]] nce int32x2_t multiply_double_round_saturate_high_lane(int32x2_t a, int32x2_t v) {
return vqrdmulh_lane_s32(a, v, lane); }
766[[gnu::always_inline]] nce int32x2_t subtract(int32x2_t a, int32x2_t b) {
return vsub_s32(a, b); }
767[[gnu::always_inline]] nce int64x2_t subtract_long(int32x2_t a, int32x2_t b) {
return vsubl_s32(a, b); }
768[[gnu::always_inline]] nce int32x2_t subtract_halve(int32x2_t a, int32x2_t b) {
return vhsub_s32(a, b); }
769[[gnu::always_inline]] nce int32x2_t subtract_saturate(int32x2_t a, int32x2_t b) {
return vqsub_s32(a, b); }
770[[gnu::always_inline]] nce int32x2_t subtract_absolute(int32x2_t a, int32x2_t b) {
return vabd_s32(a, b); }
771[[gnu::always_inline]] nce int64x2_t subtract_absolute_long(int32x2_t a, int32x2_t b) {
return vabdl_s32(a, b); }
772[[gnu::always_inline]] nce int32x2_t subtract_absolute_add(int32x2_t a, int32x2_t b, int32x2_t c) {
return vaba_s32(a, b, c); }
773[[gnu::always_inline]] nce int64x2_t multiply_double_saturate_long(int32x2_t a, int32_t b) {
return vqdmull_n_s32(a, b); }
774[[gnu::always_inline]] nce int32x2_t multiply_double_saturate_high(int32x2_t a, int32_t b) {
return vqdmulh_n_s32(a, b); }
775[[gnu::always_inline]] nce int32x2_t multiply_double_round_saturate_high(int32x2_t a, int32_t b) {
return vqrdmulh_n_s32(a, b); }
776[[gnu::always_inline]] nce int32x2_t absolute(int32x2_t a) {
return vabs_s32(a); }
777[[gnu::always_inline]] nce int32x2_t absolute_saturate(int32x2_t a) {
return vqabs_s32(a); }
778[[gnu::always_inline]] nce int32x2_t max(int32x2_t a, int32x2_t b) {
return vmax_s32(a, b); }
779[[gnu::always_inline]] nce int32x2_t min(int32x2_t a, int32x2_t b) {
return vmin_s32(a, b); }
780[[gnu::always_inline]] nce int32x2_t pairwise_add(int32x2_t a, int32x2_t b) {
return vpadd_s32(a, b); }
781[[gnu::always_inline]] nce int64x1_t pairwise_add_long(int32x2_t a) {
return vpaddl_s32(a); }
782[[gnu::always_inline]] nce int32x2_t pairwise_add_accumulate_long(int32x2_t a, int16x4_t b) {
return vpadal_s16(a, b); }
783[[gnu::always_inline]] nce int32x2_t pairwise_max(int32x2_t a, int32x2_t b) {
return vpmax_s32(a, b); }
784[[gnu::always_inline]] nce int32x2_t pairwise_min(int32x2_t a, int32x2_t b) {
return vpmin_s32(a, b); }
785[[gnu::always_inline]] nce uint32x2_t equal(int32x2_t a, int32x2_t b) {
return vceq_s32(a, b); }
786[[gnu::always_inline]] nce uint32x2_t greater_than_or_equal(int32x2_t a, int32x2_t b) {
return vcge_s32(a, b); }
787[[gnu::always_inline]] nce uint32x2_t less_than_or_equal(int32x2_t a, int32x2_t b) {
return vcle_s32(a, b); }
788[[gnu::always_inline]] nce uint32x2_t greater_than(int32x2_t a, int32x2_t b) {
return vcgt_s32(a, b); }
789[[gnu::always_inline]] nce uint32x2_t less_than(int32x2_t a, int32x2_t b) {
return vclt_s32(a, b); }
790[[gnu::always_inline]] nce uint32x2_t compare_test_nonzero(int32x2_t a, int32x2_t b) {
return vtst_s32(a, b); }
791[[gnu::always_inline]] nce int32x2_t shift_left(int32x2_t a, int32x2_t b) {
return vshl_s32(a, b); }
792template <
int n>[[gnu::always_inline]] nce int32x2_t shift_left(int32x2_t a) {
return vshl_n_s32(a, n); }
793[[gnu::always_inline]] nce int32x2_t shift_left_saturate(int32x2_t a, int32x2_t b) {
return vqshl_s32(a, b); }
794template <
int n>[[gnu::always_inline]] nce int32x2_t shift_left_saturate(int32x2_t a) {
return vqshl_n_s32(a, n); }
795template <
int n>[[gnu::always_inline]] nce uint32x2_t shift_left_unsigned_saturate(int32x2_t a) {
return vqshlu_n_s32(a, n); }
796[[gnu::always_inline]] nce int32x2_t shift_left_round(int32x2_t a, int32x2_t b) {
return vrshl_s32(a, b); }
797[[gnu::always_inline]] nce int32x2_t shift_left_round_saturate(int32x2_t a, int32x2_t b) {
return vqrshl_s32(a, b); }
798template <
int n>[[gnu::always_inline]] nce int64x2_t shift_left_long(int32x2_t a) {
return vshll_n_s32(a, n); }
799template <
int n>[[gnu::always_inline]] nce int32x2_t shift_left_insert(int32x2_t a, int32x2_t b) {
return vsli_n_s32(a, b, n); }
800template <
int n>[[gnu::always_inline]] nce int32x2_t shift_right(int32x2_t a) {
return vshr_n_s32(a, n); }
801template <
int n>[[gnu::always_inline]] nce int32x2_t shift_right_round(int32x2_t a) {
return vrshr_n_s32(a, n); }
802template <
int n>[[gnu::always_inline]] nce int32x2_t shift_right_accumulate(int32x2_t a, int32x2_t b) {
return vsra_n_s32(a, b, n); }
803template <
int n>[[gnu::always_inline]] nce int32x2_t shift_right_accumulate_round(int32x2_t a, int32x2_t b) {
return vrsra_n_s32(a, b, n); }
804template <
int n>[[gnu::always_inline]] nce int32x2_t shift_right_insert(int32x2_t a, int32x2_t b) {
return vsri_n_s32(a, b, n); }
805template <> [[gnu::always_inline]] nce float32x2_t convert(int32x2_t a) {
return vcvt_f32_s32(a); }
806template <
int fracbits> [[gnu::always_inline]] nce float32x2_t convert_n(int32x2_t a) {
return vcvt_n_f32_s32(a, fracbits); }
807template <> [[gnu::always_inline]] nce int8x8_t reinterpret(int32x2_t a) {
return vreinterpret_s8_s32(a); }
808template <> [[gnu::always_inline]] nce int16x4_t reinterpret(int32x2_t a) {
return vreinterpret_s16_s32(a); }
809template <> [[gnu::always_inline]] nce float32x2_t reinterpret(int32x2_t a) {
return vreinterpret_f32_s32(a); }
810template <> [[gnu::always_inline]] nce uint8x8_t reinterpret(int32x2_t a) {
return vreinterpret_u8_s32(a); }
811template <> [[gnu::always_inline]] nce uint16x4_t reinterpret(int32x2_t a) {
return vreinterpret_u16_s32(a); }
812template <> [[gnu::always_inline]] nce uint32x2_t reinterpret(int32x2_t a) {
return vreinterpret_u32_s32(a); }
813template <> [[gnu::always_inline]] nce poly8x8_t reinterpret(int32x2_t a) {
return vreinterpret_p8_s32(a); }
814template <> [[gnu::always_inline]] nce poly16x4_t reinterpret(int32x2_t a) {
return vreinterpret_p16_s32(a); }
815template <> [[gnu::always_inline]] nce uint64x1_t reinterpret(int32x2_t a) {
return vreinterpret_u64_s32(a); }
816template <> [[gnu::always_inline]] nce int64x1_t reinterpret(int32x2_t a) {
return vreinterpret_s64_s32(a); }
817[[gnu::always_inline]] nce int64x2_t move_long(int32x2_t a) {
return vmovl_s32(a); }
818template <
int lane> [[gnu::always_inline]] nce int32x2_t multiply_add_lane(int32x2_t a, int32x2_t b, int32x2_t v) {
return vmla_lane_s32(a, b, v, lane); }
819template <
int lane> [[gnu::always_inline]] nce int32x2_t multiply_subtract_lane(int32x2_t a, int32x2_t b, int32x2_t v) {
return vmls_lane_s32(a, b, v, lane); }
820[[gnu::always_inline]] nce int32x2_t multiply_add(int32x2_t a, int32x2_t b, int32_t c) {
return vmla_n_s32(a, b, c); }
821template <
int lane> [[gnu::always_inline]] nce int32x2_t multiply_lane(int32x2_t a, int32x2_t v) {
return vmul_lane_s32(a, v, lane); }
822template <
int lane> [[gnu::always_inline]] nce int64x2_t multiply_long_lane(int32x2_t a, int32x2_t v) {
return vmull_lane_s32(a, v, lane); }
823[[gnu::always_inline]] nce int32x2_t multiply_subtract(int32x2_t a, int32x2_t b, int32_t c) {
return vmls_n_s32(a, b, c); }
824[[gnu::always_inline]] nce int32x2_t negate(int32x2_t a) {
return vneg_s32(a); }
825[[gnu::always_inline]] nce int32x2_t negate_saturate(int32x2_t a) {
return vqneg_s32(a); }
826[[gnu::always_inline]] nce int32x2_t bitwise_not(int32x2_t a) {
return vmvn_s32(a); }
827[[gnu::always_inline]] nce int32x2_t bitwise_and(int32x2_t a, int32x2_t b) {
return vand_s32(a, b); }
828[[gnu::always_inline]] nce int32x2_t bitwise_or(int32x2_t a, int32x2_t b) {
return vorr_s32(a, b); }
829[[gnu::always_inline]] nce int32x2_t bitwise_xor(int32x2_t a, int32x2_t b) {
return veor_s32(a, b); }
830[[gnu::always_inline]] nce int32x2_t bitwise_or_not(int32x2_t a, int32x2_t b) {
return vorn_s32(a, b); }
831[[gnu::always_inline]] nce int32x2_t count_leading_sign_bits(int32x2_t a) {
return vcls_s32(a); }
832[[gnu::always_inline]] nce int32x2_t count_leading_zero_bits(int32x2_t a) {
return vclz_s32(a); }
833[[gnu::always_inline]] nce int32x2_t bitwise_clear(int32x2_t a, int32x2_t b) {
return vbic_s32(a, b); }
834template <
int lane>[[gnu::always_inline]] nce int32x2_t duplicate_lane(int32x2_t a) {
return vdup_lane_s32(a, lane); }
835template <
int lane>[[gnu::always_inline]] nce int32x4_t duplicate_lane_quad(int32x2_t a) {
return vdupq_lane_s32(a, lane); }
836[[gnu::always_inline]] nce int32x4_t combine(int32x2_t low, int32x2_t high) {
return vcombine_s32(low, high); }
837template <
int lane>[[gnu::always_inline]] nce int32_t get_lane(int32x2_t v) {
return vget_lane_s32(v, lane); }
838template <
int n>[[gnu::always_inline]] nce int32x2_t extract(int32x2_t a, int32x2_t b) {
return vext_s32(a, b, n); }
839[[gnu::always_inline]] nce int32x2_t reverse_64bit(int32x2_t a) {
return vrev64_s32(a); }
840[[gnu::always_inline]] nce int32x2x2_t zip(int32x2_t a, int32x2_t b) {
return vzip_s32(a, b); }
841[[gnu::always_inline]] nce int32x2x2_t unzip(int32x2_t a, int32x2_t b) {
return vuzp_s32(a, b); }
842[[gnu::always_inline]] nce int32x2x2_t transpose(int32x2_t a, int32x2_t b) {
return vtrn_s32(a, b); }
843[[gnu::always_inline]] nce int32x2_t multiply(int32x2_t a, int32_t b) {
return vmul_n_s32(a, b); }
844[[gnu::always_inline]] nce int64x2_t multiply_long(int32x2_t a, int32_t b) {
return vmull_n_s32(a, b); }
845[[gnu::always_inline]] nce int32x4_t add(int32x4_t a, int16x4_t b) {
return vaddw_s16(a, b); }
846[[gnu::always_inline]] nce int32x4_t multiply_add_long(int32x4_t a, int16x4_t b, int16x4_t c) {
return vmlal_s16(a, b, c); }
847[[gnu::always_inline]] nce int32x4_t multiply_subtract_long(int32x4_t a, int16x4_t b, int16x4_t c) {
return vmlsl_s16(a, b, c); }
848[[gnu::always_inline]] nce int32x4_t multiply_double_add_saturate_long(int32x4_t a, int16x4_t b, int16x4_t c) {
return vqdmlal_s16(a, b, c); }
849[[gnu::always_inline]] nce int32x4_t multiply_double_subtract_saturate_long(int32x4_t a, int16x4_t b, int16x4_t c) {
return vqdmlsl_s16(a, b, c); }
850template <
int lane> [[gnu::always_inline]] nce int32x4_t multiply_double_add_saturate_long_lane(int32x4_t a, int16x4_t b, int16x4_t v) {
return vqdmlal_lane_s16(a, b, v, lane); }
851template <
int lane> [[gnu::always_inline]] nce int32x4_t multiply_double_subtract_saturate_long_lane(int32x4_t a, int16x4_t b, int16x4_t v) {
return vqdmlsl_lane_s16(a, b, v, lane); }
852[[gnu::always_inline]] nce int32x4_t subtract_absolute_add(int32x4_t a, int16x4_t b, int16x4_t c) {
return vabal_s16(a, b, c); }
853[[gnu::always_inline]] nce int32x4_t multiply_double_add_saturate_long(int32x4_t a, int16x4_t b, int16_t c) {
return vqdmlal_n_s16(a, b, c); }
854[[gnu::always_inline]] nce int32x4_t multiply_double_subtract_saturate_long(int32x4_t a, int16x4_t b, int16_t c) {
return vqdmlsl_n_s16(a, b, c); }
855[[gnu::always_inline]] nce int32x4_t subtract(int32x4_t a, int16x4_t b) {
return vsubw_s16(a, b); }
856template <
int lane> [[gnu::always_inline]] nce int32x4_t multiply_double_saturate_high_lane(int32x4_t a, int32x2_t v) {
return vqdmulhq_lane_s32(a, v, lane); }
857template <
int lane> [[gnu::always_inline]] nce int32x4_t multiply_double_round_saturate_high_lane(int32x4_t a, int32x2_t v) {
return vqrdmulhq_lane_s32(a, v, lane); }
858[[gnu::always_inline]] nce int16x4_t add_narrow(int32x4_t a, int32x4_t b) {
return vaddhn_s32(a, b); }
859[[gnu::always_inline]] nce int16x4_t add_round_narrow(int32x4_t a, int32x4_t b) {
return vraddhn_s32(a, b); }
860[[gnu::always_inline]] nce int32x4_t multiply_add(int32x4_t a, int32x4_t b, int32x4_t c) {
return vmlaq_s32(a, b, c); }
861[[gnu::always_inline]] nce int32x4_t multiply_subtract(int32x4_t a, int32x4_t b, int32x4_t c) {
return vmlsq_s32(a, b, c); }
862[[gnu::always_inline]] nce int16x4_t subtract_narrow(int32x4_t a, int32x4_t b) {
return vsubhn_s32(a, b); }
863[[gnu::always_inline]] nce int16x4_t subtract_round_narrow(int32x4_t a, int32x4_t b) {
return vrsubhn_s32(a, b); }
864[[gnu::always_inline]] nce int32x4_t subtract_absolute_add(int32x4_t a, int32x4_t b, int32x4_t c) {
return vabaq_s32(a, b, c); }
865[[gnu::always_inline]] nce int64x2_t pairwise_add_long(int32x4_t a) {
return vpaddlq_s32(a); }
866[[gnu::always_inline]] nce int32x4_t pairwise_add_accumulate_long(int32x4_t a, int16x8_t b) {
return vpadalq_s16(a, b); }
867[[gnu::always_inline]] nce uint32x4_t equal(int32x4_t a, int32x4_t b) {
return vceqq_s32(a, b); }
868[[gnu::always_inline]] nce uint32x4_t greater_than_or_equal(int32x4_t a, int32x4_t b) {
return vcgeq_s32(a, b); }
869[[gnu::always_inline]] nce uint32x4_t less_than_or_equal(int32x4_t a, int32x4_t b) {
return vcleq_s32(a, b); }
870[[gnu::always_inline]] nce uint32x4_t greater_than(int32x4_t a, int32x4_t b) {
return vcgtq_s32(a, b); }
871[[gnu::always_inline]] nce uint32x4_t less_than(int32x4_t a, int32x4_t b) {
return vcltq_s32(a, b); }
872[[gnu::always_inline]] nce uint32x4_t compare_test_nonzero(int32x4_t a, int32x4_t b) {
return vtstq_s32(a, b); }
873template <
int n>[[gnu::always_inline]] nce int32x4_t shift_left(int32x4_t a) {
return vshlq_n_s32(a, n); }
874template <
int n>[[gnu::always_inline]] nce uint32x4_t shift_left_unsigned_saturate(int32x4_t a) {
return vqshluq_n_s32(a, n); }
875template <
int n>[[gnu::always_inline]] nce int32x4_t shift_right_accumulate(int32x4_t a, int32x4_t b) {
return vsraq_n_s32(a, b, n); }
876template <
int n>[[gnu::always_inline]] nce int32x4_t shift_right_accumulate_round(int32x4_t a, int32x4_t b) {
return vrsraq_n_s32(a, b, n); }
877template <
int n>[[gnu::always_inline]] nce int16x4_t shift_right_narrow(int32x4_t a) {
return vshrn_n_s32(a, n); }
878template <
int n>[[gnu::always_inline]] nce uint16x4_t shift_right_saturate_narrow_unsigned(int32x4_t a) {
return vqshrun_n_s32(a, n); }
879template <
int n>[[gnu::always_inline]] nce int16x4_t shift_right_saturate_narrow(int32x4_t a) {
return vqshrn_n_s32(a, n); }
880template <
int n>[[gnu::always_inline]] nce uint16x4_t shift_right_round_saturate_narrow_unsigned(int32x4_t a) {
return vqrshrun_n_s32(a, n); }
881template <
int n>[[gnu::always_inline]] nce int16x4_t shift_right_round_saturate_narrow(int32x4_t a) {
return vqrshrn_n_s32(a, n); }
882template <
int n>[[gnu::always_inline]] nce int16x4_t shift_right_round_narrow(int32x4_t a) {
return vrshrn_n_s32(a, n); }
883template <
int fracbits> [[gnu::always_inline]] nce float32x4_t convert_n(int32x4_t a) {
return vcvtq_n_f32_s32(a, fracbits); }
884template <> [[gnu::always_inline]] nce poly8x16_t reinterpret(int32x4_t a) {
return vreinterpretq_p8_s32(a); }
885template <> [[gnu::always_inline]] nce poly16x8_t reinterpret(int32x4_t a) {
return vreinterpretq_p16_s32(a); }
886[[gnu::always_inline]] nce int16x4_t move_narrow(int32x4_t a) {
return vmovn_s32(a); }
887[[gnu::always_inline]] nce int16x4_t move_saturate_narrow(int32x4_t a) {
return vqmovn_s32(a); }
888[[gnu::always_inline]] nce uint16x4_t move_unsigned_saturate_narrow(int32x4_t a) {
return vqmovun_s32(a); }
889template <
int lane> [[gnu::always_inline]] nce int32x4_t multiply_add_long_lane(int32x4_t a, int16x4_t b, int16x4_t v) {
return vmlal_lane_s16(a, b, v, lane); }
890template <
int lane> [[gnu::always_inline]] nce int32x4_t multiply_subtract_long_lane(int32x4_t a, int16x4_t b, int16x4_t v) {
return vmlsl_lane_s16(a, b, v, lane); }
891[[gnu::always_inline]] nce int32x4_t multiply_add_long(int32x4_t a, int16x4_t b, int16_t c) {
return vmlal_n_s16(a, b, c); }
892[[gnu::always_inline]] nce int32x4_t multiply_subtract_long(int32x4_t a, int16x4_t b, int16_t c) {
return vmlsl_n_s16(a, b, c); }
893template <
int lane> [[gnu::always_inline]] nce int32x4_t multiply_lane(int32x4_t a, int32x2_t v) {
return vmulq_lane_s32(a, v, lane); }
894template <
int lane> [[gnu::always_inline]] nce int32x4_t multiply_add_lane(int32x4_t a, int32x4_t b, int32x2_t v) {
return vmlaq_lane_s32(a, b, v, lane); }
895template <
int lane> [[gnu::always_inline]] nce int32x4_t multiply_subtract_lane(int32x4_t a, int32x4_t b, int32x2_t v) {
return vmlsq_lane_s32(a, b, v, lane); }
896[[gnu::always_inline]] nce int32x4_t multiply_add(int32x4_t a, int32x4_t b, int32_t c) {
return vmlaq_n_s32(a, b, c); }
897[[gnu::always_inline]] nce int32x4_t multiply_subtract(int32x4_t a, int32x4_t b, int32_t c) {
return vmlsq_n_s32(a, b, c); }
898[[gnu::always_inline]] nce int32x2_t get_high(int32x4_t a) {
return vget_high_s32(a); }
899[[gnu::always_inline]] nce int32x2_t get_low(int32x4_t a) {
return vget_low_s32(a); }
900template <
int n>[[gnu::always_inline]] nce int32x4_t extract(int32x4_t a, int32x4_t b) {
return vextq_s32(a, b, n); }
901[[gnu::always_inline]] nce int32x4x2_t zip(int32x4_t a, int32x4_t b) {
return vzipq_s32(a, b); }
902[[gnu::always_inline]] nce int32x4x2_t unzip(int32x4_t a, int32x4_t b) {
return vuzpq_s32(a, b); }
903[[gnu::always_inline]] nce int32x4x2_t transpose(int32x4_t a, int32x4_t b) {
return vtrnq_s32(a, b); }
904[[gnu::always_inline]] nce uint64x1_t add(uint64x1_t a, uint64x1_t b) {
return vadd_u64(a, b); }
905[[gnu::always_inline]] nce uint64x1_t add_saturate(uint64x1_t a, uint64x1_t b) {
return vqadd_u64(a, b); }
906[[gnu::always_inline]] nce uint64x1_t subtract(uint64x1_t a, uint64x1_t b) {
return vsub_u64(a, b); }
907[[gnu::always_inline]] nce uint64x1_t subtract_saturate(uint64x1_t a, uint64x1_t b) {
return vqsub_u64(a, b); }
908[[gnu::always_inline]] nce uint64x1_t pairwise_add_accumulate_long(uint64x1_t a, uint32x2_t b) {
return vpadal_u32(a, b); }
909[[gnu::always_inline]] nce uint64x1_t shift_left(uint64x1_t a, int64x1_t b) {
return vshl_u64(a, b); }
910template <
int n>[[gnu::always_inline]] nce uint64x1_t shift_left(uint64x1_t a) {
return vshl_n_u64(a, n); }
911template <
int n>[[gnu::always_inline]] nce uint64x1_t shift_right(uint64x1_t a) {
return vshr_n_u64(a, n); }
912template <
int n>[[gnu::always_inline]] nce uint64x1_t shift_right_round(uint64x1_t a) {
return vrshr_n_u64(a, n); }
913template <
int n>[[gnu::always_inline]] nce uint64x1_t shift_right_accumulate(uint64x1_t a, uint64x1_t b) {
return vsra_n_u64(a, b, n); }
914template <
int n>[[gnu::always_inline]] nce uint64x1_t shift_right_accumulate_round(uint64x1_t a, uint64x1_t b) {
return vrsra_n_u64(a, b, n); }
915template <
int n>[[gnu::always_inline]] nce uint64x1_t shift_right_insert(uint64x1_t a, uint64x1_t b) {
return vsri_n_u64(a, b, n); }
916[[gnu::always_inline]] nce uint64x1_t shift_left_saturate(uint64x1_t a, int64x1_t b) {
return vqshl_u64(a, b); }
917template <
int n>[[gnu::always_inline]] nce uint64x1_t shift_left_saturate(uint64x1_t a) {
return vqshl_n_u64(a, n); }
918template <
int n>[[gnu::always_inline]] nce uint64x1_t shift_left_insert(uint64x1_t a, uint64x1_t b) {
return vsli_n_u64(a, b, n); }
919[[gnu::always_inline]] nce uint64x1_t shift_left_round(uint64x1_t a, int64x1_t b) {
return vrshl_u64(a, b); }
920[[gnu::always_inline]] nce uint64x1_t shift_left_round_saturate(uint64x1_t a, int64x1_t b) {
return vqrshl_u64(a, b); }
921template <> [[gnu::always_inline]] nce int8x8_t reinterpret(uint64x1_t a) {
return vreinterpret_s8_u64(a); }
922template <> [[gnu::always_inline]] nce int16x4_t reinterpret(uint64x1_t a) {
return vreinterpret_s16_u64(a); }
923template <> [[gnu::always_inline]] nce int32x2_t reinterpret(uint64x1_t a) {
return vreinterpret_s32_u64(a); }
924template <> [[gnu::always_inline]] nce float32x2_t reinterpret(uint64x1_t a) {
return vreinterpret_f32_u64(a); }
925template <> [[gnu::always_inline]] nce uint8x8_t reinterpret(uint64x1_t a) {
return vreinterpret_u8_u64(a); }
926template <> [[gnu::always_inline]] nce uint16x4_t reinterpret(uint64x1_t a) {
return vreinterpret_u16_u64(a); }
927template <> [[gnu::always_inline]] nce uint32x2_t reinterpret(uint64x1_t a) {
return vreinterpret_u32_u64(a); }
928template <> [[gnu::always_inline]] nce poly8x8_t reinterpret(uint64x1_t a) {
return vreinterpret_p8_u64(a); }
929template <> [[gnu::always_inline]] nce poly16x4_t reinterpret(uint64x1_t a) {
return vreinterpret_p16_u64(a); }
930template <> [[gnu::always_inline]] nce int64x1_t reinterpret(uint64x1_t a) {
return vreinterpret_s64_u64(a); }
931[[gnu::always_inline]] nce uint64x1_t bitwise_and(uint64x1_t a, uint64x1_t b) {
return vand_u64(a, b); }
932[[gnu::always_inline]] nce uint64x1_t bitwise_or(uint64x1_t a, uint64x1_t b) {
return vorr_u64(a, b); }
933[[gnu::always_inline]] nce uint64x1_t bitwise_xor(uint64x1_t a, uint64x1_t b) {
return veor_u64(a, b); }
934[[gnu::always_inline]] nce uint64x1_t bitwise_or_not(uint64x1_t a, uint64x1_t b) {
return vorn_u64(a, b); }
935[[gnu::always_inline]] nce uint64x1_t bitwise_clear(uint64x1_t a, uint64x1_t b) {
return vbic_u64(a, b); }
936[[gnu::always_inline]] nce uint64x1_t bitwise_select(uint64x1_t a, uint64x1_t b, uint64x1_t c) {
return vbsl_u64(a, b, c); }
937template <
int lane>[[gnu::always_inline]] nce uint64x1_t duplicate_lane(uint64x1_t a) {
return vdup_lane_u64(a, lane); }
938template <
int lane>[[gnu::always_inline]] nce uint64x2_t duplicate_lane_quad(uint64x1_t a) {
return vdupq_lane_u64(a, lane); }
939[[gnu::always_inline]] nce uint64x2_t combine(uint64x1_t low, uint64x1_t high) {
return vcombine_u64(low, high); }
940template <
int lane>[[gnu::always_inline]] nce uint64_t get_lane(uint64x1_t v) {
return vget_lane_u64(v, lane); }
941template <
int n>[[gnu::always_inline]] nce uint64x1_t extract(uint64x1_t a, uint64x1_t b) {
return vext_u64(a, b, n); }
942[[gnu::always_inline]] nce int64x1_t bitwise_select(uint64x1_t a, int64x1_t b, int64x1_t c) {
return vbsl_s64(a, b, c); }
943[[gnu::always_inline]] nce uint64x2_t add(uint64x2_t a, uint64x2_t b) {
return vaddq_u64(a, b); }
944[[gnu::always_inline]] nce uint32x2_t add_narrow(uint64x2_t a, uint64x2_t b) {
return vaddhn_u64(a, b); }
945[[gnu::always_inline]] nce uint32x2_t add_round_narrow(uint64x2_t a, uint64x2_t b) {
return vraddhn_u64(a, b); }
946[[gnu::always_inline]] nce uint64x2_t add_saturate(uint64x2_t a, uint64x2_t b) {
return vqaddq_u64(a, b); }
947[[gnu::always_inline]] nce uint64x2_t subtract(uint64x2_t a, uint64x2_t b) {
return vsubq_u64(a, b); }
948[[gnu::always_inline]] nce uint32x2_t subtract_narrow(uint64x2_t a, uint64x2_t b) {
return vsubhn_u64(a, b); }
949[[gnu::always_inline]] nce uint32x2_t subtract_round_narrow(uint64x2_t a, uint64x2_t b) {
return vrsubhn_u64(a, b); }
950[[gnu::always_inline]] nce uint64x2_t subtract_saturate(uint64x2_t a, uint64x2_t b) {
return vqsubq_u64(a, b); }
951[[gnu::always_inline]] nce uint64x2_t shift_left_saturate(uint64x2_t a, int64x2_t b) {
return vqshlq_u64(a, b); }
952template <
int n>[[gnu::always_inline]] nce uint64x2_t shift_left_saturate(uint64x2_t a) {
return vqshlq_n_u64(a, n); }
953template <
int n>[[gnu::always_inline]] nce uint64x2_t shift_left_insert(uint64x2_t a, uint64x2_t b) {
return vsliq_n_u64(a, b, n); }
954[[gnu::always_inline]] nce uint64x2_t add(uint64x2_t a, uint32x2_t b) {
return vaddw_u32(a, b); }
955[[gnu::always_inline]] nce uint64x2_t multiply_add_long(uint64x2_t a, uint32x2_t b, uint32x2_t c) {
return vmlal_u32(a, b, c); }
956[[gnu::always_inline]] nce uint64x2_t multiply_subtract_long(uint64x2_t a, uint32x2_t b, uint32x2_t c) {
return vmlsl_u32(a, b, c); }
957[[gnu::always_inline]] nce uint64x2_t subtract(uint64x2_t a, uint32x2_t b) {
return vsubw_u32(a, b); }
958[[gnu::always_inline]] nce uint64x2_t subtract_absolute_add(uint64x2_t a, uint32x2_t b, uint32x2_t c) {
return vabal_u32(a, b, c); }
959[[gnu::always_inline]] nce uint64x2_t shift_left_round(uint64x2_t a, int64x2_t b) {
return vrshlq_u64(a, b); }
960[[gnu::always_inline]] nce uint64x2_t shift_left_round_saturate(uint64x2_t a, int64x2_t b) {
return vqrshlq_u64(a, b); }
961template <
int n>[[gnu::always_inline]] nce uint64x2_t shift_right(uint64x2_t a) {
return vshrq_n_u64(a, n); }
962template <
int n>[[gnu::always_inline]] nce uint64x2_t shift_right_round(uint64x2_t a) {
return vrshrq_n_u64(a, n); }
963template <
int n>[[gnu::always_inline]] nce uint64x2_t shift_right_accumulate(uint64x2_t a, uint64x2_t b) {
return vsraq_n_u64(a, b, n); }
964template <
int n>[[gnu::always_inline]] nce uint64x2_t shift_right_accumulate_round(uint64x2_t a, uint64x2_t b) {
return vrsraq_n_u64(a, b, n); }
965template <
int n>[[gnu::always_inline]] nce uint32x2_t shift_right_narrow(uint64x2_t a) {
return vshrn_n_u64(a, n); }
966template <
int n>[[gnu::always_inline]] nce uint32x2_t shift_right_saturate_narrow(uint64x2_t a) {
return vqshrn_n_u64(a, n); }
967template <
int n>[[gnu::always_inline]] nce uint32x2_t shift_right_round_saturate_narrow(uint64x2_t a) {
return vqrshrn_n_u64(a, n); }
968template <
int n>[[gnu::always_inline]] nce uint32x2_t shift_right_round_narrow(uint64x2_t a) {
return vrshrn_n_u64(a, n); }
969template <
int n>[[gnu::always_inline]] nce uint64x2_t shift_right_insert(uint64x2_t a, uint64x2_t b) {
return vsriq_n_u64(a, b, n); }
970template <> [[gnu::always_inline]] nce poly8x16_t reinterpret(uint64x2_t a) {
return vreinterpretq_p8_u64(a); }
971template <> [[gnu::always_inline]] nce poly16x8_t reinterpret(uint64x2_t a) {
return vreinterpretq_p16_u64(a); }
972[[gnu::always_inline]] nce uint32x2_t move_narrow(uint64x2_t a) {
return vmovn_u64(a); }
973[[gnu::always_inline]] nce uint32x2_t move_saturate_narrow(uint64x2_t a) {
return vqmovn_u64(a); }
974template <
int lane> [[gnu::always_inline]] nce uint64x2_t multiply_add_long_lane(uint64x2_t a, uint32x2_t b, uint32x2_t v) {
return vmlal_lane_u32(a, b, v, lane); }
975[[gnu::always_inline]] nce uint64x2_t pairwise_add_accumulate_long(uint64x2_t a, uint32x4_t b) {
return vpadalq_u32(a, b); }
976[[gnu::always_inline]] nce uint64x2_t shift_left(uint64x2_t a, int64x2_t b) {
return vshlq_u64(a, b); }
977template <
int n>[[gnu::always_inline]] nce uint64x2_t shift_left(uint64x2_t a) {
return vshlq_n_u64(a, n); }
978[[gnu::always_inline]] nce uint64x2_t bitwise_and(uint64x2_t a, uint64x2_t b) {
return vandq_u64(a, b); }
979[[gnu::always_inline]] nce uint64x2_t bitwise_or(uint64x2_t a, uint64x2_t b) {
return vorrq_u64(a, b); }
980[[gnu::always_inline]] nce uint64x2_t bitwise_xor(uint64x2_t a, uint64x2_t b) {
return veorq_u64(a, b); }
981[[gnu::always_inline]] nce uint64x2_t bitwise_or_not(uint64x2_t a, uint64x2_t b) {
return vornq_u64(a, b); }
982[[gnu::always_inline]] nce uint64x2_t bitwise_clear(uint64x2_t a, uint64x2_t b) {
return vbicq_u64(a, b); }
983[[gnu::always_inline]] nce uint64x2_t bitwise_select(uint64x2_t a, uint64x2_t b, uint64x2_t c) {
return vbslq_u64(a, b, c); }
984[[gnu::always_inline]] nce uint64x1_t get_high(uint64x2_t a) {
return vget_high_u64(a); }
985[[gnu::always_inline]] nce uint64x1_t get_low(uint64x2_t a) {
return vget_low_u64(a); }
986template <
int n>[[gnu::always_inline]] nce uint64x2_t extract(uint64x2_t a, uint64x2_t b) {
return vextq_u64(a, b, n); }
987template <
int lane>[[gnu::always_inline]] nce uint64x2_t multiply_subtract_long_lane(uint64x2_t a, uint32x2_t b, uint32x2_t v) {
return vmlsl_lane_u32(a, b, v, lane); }
988[[gnu::always_inline]] nce uint64x2_t multiply_add_long(uint64x2_t a, uint32x2_t b, uint32_t c) {
return vmlal_n_u32(a, b, c); }
989[[gnu::always_inline]] nce uint64x2_t multiply_subtract_long(uint64x2_t a, uint32x2_t b, uint32_t c) {
return vmlsl_n_u32(a, b, c); }
990[[gnu::always_inline]] nce int64x2_t bitwise_select(uint64x2_t a, int64x2_t b, int64x2_t c) {
return vbslq_s64(a, b, c); }
991[[gnu::always_inline]] nce uint32x2_t shift_left(uint32x2_t a, int32x2_t b) {
return vshl_u32(a, b); }
992[[gnu::always_inline]] nce uint32x2_t add(uint32x2_t a, uint32x2_t b) {
return vadd_u32(a, b); }
993[[gnu::always_inline]] nce uint64x2_t add_long(uint32x2_t a, uint32x2_t b) {
return vaddl_u32(a, b); }
994[[gnu::always_inline]] nce uint32x2_t add_halve(uint32x2_t a, uint32x2_t b) {
return vhadd_u32(a, b); }
995[[gnu::always_inline]] nce uint32x2_t add_halve_round(uint32x2_t a, uint32x2_t b) {
return vrhadd_u32(a, b); }
996[[gnu::always_inline]] nce uint32x2_t add_saturate(uint32x2_t a, uint32x2_t b) {
return vqadd_u32(a, b); }
997[[gnu::always_inline]] nce uint32x2_t multiply(uint32x2_t a, uint32x2_t b) {
return vmul_u32(a, b); }
998[[gnu::always_inline]] nce uint32x2_t multiply_add(uint32x2_t a, uint32x2_t b, uint32x2_t c) {
return vmla_u32(a, b, c); }
999[[gnu::always_inline]] nce uint32x2_t multiply_subtract(uint32x2_t a, uint32x2_t b, uint32x2_t c) {
return vmls_u32(a, b, c); }
1000[[gnu::always_inline]] nce uint64x2_t multiply_long(uint32x2_t a, uint32x2_t b) {
return vmull_u32(a, b); }
1001[[gnu::always_inline]] nce uint32x2_t subtract(uint32x2_t a, uint32x2_t b) {
return vsub_u32(a, b); }
1002[[gnu::always_inline]] nce uint64x2_t subtract_long(uint32x2_t a, uint32x2_t b) {
return vsubl_u32(a, b); }
1003[[gnu::always_inline]] nce uint32x2_t subtract_halve(uint32x2_t a, uint32x2_t b) {
return vhsub_u32(a, b); }
1004[[gnu::always_inline]] nce uint32x2_t subtract_saturate(uint32x2_t a, uint32x2_t b) {
return vqsub_u32(a, b); }
1005[[gnu::always_inline]] nce uint32x2_t subtract_absolute(uint32x2_t a, uint32x2_t b) {
return vabd_u32(a, b); }
1006[[gnu::always_inline]] nce uint64x2_t subtract_absolute_long(uint32x2_t a, uint32x2_t b) {
return vabdl_u32(a, b); }
1007[[gnu::always_inline]] nce uint32x2_t subtract_absolute_add(uint32x2_t a, uint32x2_t b, uint32x2_t c) {
return vaba_u32(a, b, c); }
1008[[gnu::always_inline]] nce uint32x2_t max(uint32x2_t a, uint32x2_t b) {
return vmax_u32(a, b); }
1009[[gnu::always_inline]] nce uint32x2_t min(uint32x2_t a, uint32x2_t b) {
return vmin_u32(a, b); }
1010[[gnu::always_inline]] nce uint32x2_t reciprocal_estimate(uint32x2_t a) {
return vrecpe_u32(a); }
1011[[gnu::always_inline]] nce uint32x2_t reciprocal_sqrt_estimate(uint32x2_t a) {
return vrsqrte_u32(a); }
1012[[gnu::always_inline]] nce uint32x2_t pairwise_add(uint32x2_t a, uint32x2_t b) {
return vpadd_u32(a, b); }
1013[[gnu::always_inline]] nce uint64x1_t pairwise_add_long(uint32x2_t a) {
return vpaddl_u32(a); }
1014[[gnu::always_inline]] nce uint32x2_t pairwise_add_accumulate_long(uint32x2_t a, uint16x4_t b) {
return vpadal_u16(a, b); }
1015[[gnu::always_inline]] nce uint32x2_t pairwise_max(uint32x2_t a, uint32x2_t b) {
return vpmax_u32(a, b); }
1016[[gnu::always_inline]] nce uint32x2_t pairwise_min(uint32x2_t a, uint32x2_t b) {
return vpmin_u32(a, b); }
1017[[gnu::always_inline]] nce uint32x2_t equal(uint32x2_t a, uint32x2_t b) {
return vceq_u32(a, b); }
1018[[gnu::always_inline]] nce uint32x2_t greater_than_or_equal(uint32x2_t a, uint32x2_t b) {
return vcge_u32(a, b); }
1019[[gnu::always_inline]] nce uint32x2_t less_than_or_equal(uint32x2_t a, uint32x2_t b) {
return vcle_u32(a, b); }
1020[[gnu::always_inline]] nce uint32x2_t greater_than(uint32x2_t a, uint32x2_t b) {
return vcgt_u32(a, b); }
1021[[gnu::always_inline]] nce uint32x2_t less_than(uint32x2_t a, uint32x2_t b) {
return vclt_u32(a, b); }
1022[[gnu::always_inline]] nce uint32x2_t compare_test_nonzero(uint32x2_t a, uint32x2_t b) {
return vtst_u32(a, b); }
1023template <
int n>[[gnu::always_inline]] nce uint32x2_t shift_left(uint32x2_t a) {
return vshl_n_u32(a, n); }
1024[[gnu::always_inline]] nce uint32x2_t shift_left_saturate(uint32x2_t a, int32x2_t b) {
return vqshl_u32(a, b); }
1025template <
int n>[[gnu::always_inline]] nce uint32x2_t shift_left_saturate(uint32x2_t a) {
return vqshl_n_u32(a, n); }
1026[[gnu::always_inline]] nce uint32x2_t shift_left_round(uint32x2_t a, int32x2_t b) {
return vrshl_u32(a, b); }
1027[[gnu::always_inline]] nce uint32x2_t shift_left_round_saturate(uint32x2_t a, int32x2_t b) {
return vqrshl_u32(a, b); }
1028template <
int n>[[gnu::always_inline]] nce uint64x2_t shift_left_long(uint32x2_t a) {
return vshll_n_u32(a, n); }
1029template <
int n>[[gnu::always_inline]] nce uint32x2_t shift_left_insert(uint32x2_t a, uint32x2_t b) {
return vsli_n_u32(a, b, n); }
1030template <
int n>[[gnu::always_inline]] nce uint32x2_t shift_right(uint32x2_t a) {
return vshr_n_u32(a, n); }
1031template <
int n>[[gnu::always_inline]] nce uint32x2_t shift_right_round(uint32x2_t a) {
return vrshr_n_u32(a, n); }
1032template <
int n>[[gnu::always_inline]] nce uint32x2_t shift_right_accumulate(uint32x2_t a, uint32x2_t b) {
return vsra_n_u32(a, b, n); }
1033template <
int n>[[gnu::always_inline]] nce uint32x2_t shift_right_accumulate_round(uint32x2_t a, uint32x2_t b) {
return vrsra_n_u32(a, b, n); }
1034template <
int n>[[gnu::always_inline]] nce uint32x2_t shift_right_insert(uint32x2_t a, uint32x2_t b) {
return vsri_n_u32(a, b, n); }
1035template <> [[gnu::always_inline]] nce float32x2_t convert(uint32x2_t a) {
return vcvt_f32_u32(a); }
1036template <
int fracbits> [[gnu::always_inline]] nce float32x2_t convert_n(uint32x2_t a) {
return vcvt_n_f32_u32(a, fracbits); }
1037template <> [[gnu::always_inline]] nce int8x8_t reinterpret(uint32x2_t a) {
return vreinterpret_s8_u32(a); }
1038template <> [[gnu::always_inline]] nce int16x4_t reinterpret(uint32x2_t a) {
return vreinterpret_s16_u32(a); }
1039template <> [[gnu::always_inline]] nce int32x2_t reinterpret(uint32x2_t a) {
return vreinterpret_s32_u32(a); }
1040template <> [[gnu::always_inline]] nce float32x2_t reinterpret(uint32x2_t a) {
return vreinterpret_f32_u32(a); }
1041template <> [[gnu::always_inline]] nce uint8x8_t reinterpret(uint32x2_t a) {
return vreinterpret_u8_u32(a); }
1042template <> [[gnu::always_inline]] nce uint16x4_t reinterpret(uint32x2_t a) {
return vreinterpret_u16_u32(a); }
1043template <> [[gnu::always_inline]] nce poly8x8_t reinterpret(uint32x2_t a) {
return vreinterpret_p8_u32(a); }
1044template <> [[gnu::always_inline]] nce poly16x4_t reinterpret(uint32x2_t a) {
return vreinterpret_p16_u32(a); }
1045template <> [[gnu::always_inline]] nce uint64x1_t reinterpret(uint32x2_t a) {
return vreinterpret_u64_u32(a); }
1046template <> [[gnu::always_inline]] nce int64x1_t reinterpret(uint32x2_t a) {
return vreinterpret_s64_u32(a); }
1047[[gnu::always_inline]] nce uint64x2_t move_long(uint32x2_t a) {
return vmovl_u32(a); }
1048template <
int lane> [[gnu::always_inline]] nce uint32x2_t multiply_add_lane(uint32x2_t a, uint32x2_t b, uint32x2_t v) {
return vmla_lane_u32(a, b, v, lane); }
1049template <
int lane> [[gnu::always_inline]] nce uint32x2_t multiply_subtract_lane(uint32x2_t a, uint32x2_t b, uint32x2_t v) {
return vmls_lane_u32(a, b, v, lane); }
1050[[gnu::always_inline]] nce uint32x2_t multiply_add(uint32x2_t a, uint32x2_t b, uint32_t c) {
return vmla_n_u32(a, b, c); }
1051template <
int lane> [[gnu::always_inline]] nce uint32x2_t multiply_lane(uint32x2_t a, uint32x2_t v) {
return vmul_lane_u32(a, v, lane); }
1052template <
int lane> [[gnu::always_inline]] nce uint64x2_t multiply_long_lane(uint32x2_t a, uint32x2_t v) {
return vmull_lane_u32(a, v, lane); }
1053[[gnu::always_inline]] nce uint32x2_t multiply_subtract(uint32x2_t a, uint32x2_t b, uint32_t c) {
return vmls_n_u32(a, b, c); }
1054[[gnu::always_inline]] nce uint32x2_t bitwise_not(uint32x2_t a) {
return vmvn_u32(a); }
1055[[gnu::always_inline]] nce uint32x2_t bitwise_and(uint32x2_t a, uint32x2_t b) {
return vand_u32(a, b); }
1056[[gnu::always_inline]] nce uint32x2_t bitwise_or(uint32x2_t a, uint32x2_t b) {
return vorr_u32(a, b); }
1057[[gnu::always_inline]] nce uint32x2_t bitwise_xor(uint32x2_t a, uint32x2_t b) {
return veor_u32(a, b); }
1058[[gnu::always_inline]] nce uint32x2_t bitwise_or_not(uint32x2_t a, uint32x2_t b) {
return vorn_u32(a, b); }
1060[[gnu::always_inline]] nce int32x2_t count_leading_sign_bits(uint32x2_t a) {
return vcls_u32(a); }
1062[[gnu::always_inline]] nce uint32x2_t count_leading_zero_bits(uint32x2_t a) {
return vclz_u32(a); }
1063[[gnu::always_inline]] nce int32x2_t bitwise_select(uint32x2_t a, int32x2_t b, int32x2_t c) {
return vbsl_s32(a, b, c); }
1064[[gnu::always_inline]] nce uint32x2_t bitwise_clear(uint32x2_t a, uint32x2_t b) {
return vbic_u32(a, b); }
1065[[gnu::always_inline]] nce uint32x2_t bitwise_select(uint32x2_t a, uint32x2_t b, uint32x2_t c) {
return vbsl_u32(a, b, c); }
1066template <
int lane>[[gnu::always_inline]] nce uint32x2_t duplicate_lane(uint32x2_t a) {
return vdup_lane_u32(a, lane); }
1067template <
int lane>[[gnu::always_inline]] nce uint32x4_t duplicate_lane_quad(uint32x2_t a) {
return vdupq_lane_u32(a, lane); }
1068[[gnu::always_inline]] nce uint32x4_t combine(uint32x2_t low, uint32x2_t high) {
return vcombine_u32(low, high); }
1069template <
int lane>[[gnu::always_inline]] nce uint32_t get_lane(uint32x2_t v) {
return vget_lane_u32(v, lane); }
1070template <
int n>[[gnu::always_inline]] nce uint32x2_t extract(uint32x2_t a, uint32x2_t b) {
return vext_u32(a, b, n); }
1071[[gnu::always_inline]] nce uint32x2_t reverse_64bit(uint32x2_t a) {
return vrev64_u32(a); }
1072[[gnu::always_inline]] nce uint32x2x2_t zip(uint32x2_t a, uint32x2_t b) {
return vzip_u32(a, b); }
1073[[gnu::always_inline]] nce uint32x2x2_t unzip(uint32x2_t a, uint32x2_t b) {
return vuzp_u32(a, b); }
1074[[gnu::always_inline]] nce uint32x2x2_t transpose(uint32x2_t a, uint32x2_t b) {
return vtrn_u32(a, b); }
1075[[gnu::always_inline]] nce float32x2_t bitwise_select(uint32x2_t a, float32x2_t b, float32x2_t c) {
return vbsl_f32(a, b, c); }
1076[[gnu::always_inline]] nce uint32x2_t multiply(uint32x2_t a, uint32_t b) {
return vmul_n_u32(a, b); }
1077[[gnu::always_inline]] nce uint64x2_t multiply_long(uint32x2_t a, uint32_t b) {
return vmull_n_u32(a, b); }
1078[[gnu::always_inline]] nce uint32x4_t add(uint32x4_t a, uint16x4_t b) {
return vaddw_u16(a, b); }
1079[[gnu::always_inline]] nce uint32x4_t multiply_add_long(uint32x4_t a, uint16x4_t b, uint16x4_t c) {
return vmlal_u16(a, b, c); }
1080[[gnu::always_inline]] nce uint32x4_t multiply_subtract_long(uint32x4_t a, uint16x4_t b, uint16x4_t c) {
return vmlsl_u16(a, b, c); }
1081[[gnu::always_inline]] nce uint32x4_t subtract(uint32x4_t a, uint16x4_t b) {
return vsubw_u16(a, b); }
1082[[gnu::always_inline]] nce uint32x4_t subtract_absolute_add(uint32x4_t a, uint16x4_t b, uint16x4_t c) {
return vabal_u16(a, b, c); }
1083[[gnu::always_inline]] nce uint16x4_t add_narrow(uint32x4_t a, uint32x4_t b) {
return vaddhn_u32(a, b); }
1084[[gnu::always_inline]] nce uint16x4_t add_round_narrow(uint32x4_t a, uint32x4_t b) {
return vraddhn_u32(a, b); }
1085[[gnu::always_inline]] nce uint32x4_t multiply_add(uint32x4_t a, uint32x4_t b, uint32x4_t c) {
return vmlaq_u32(a, b, c); }
1086[[gnu::always_inline]] nce uint32x4_t multiply_subtract(uint32x4_t a, uint32x4_t b, uint32x4_t c) {
return vmlsq_u32(a, b, c); }
1087[[gnu::always_inline]] nce uint16x4_t subtract_narrow(uint32x4_t a, uint32x4_t b) {
return vsubhn_u32(a, b); }
1088[[gnu::always_inline]] nce uint16x4_t subtract_round_narrow(uint32x4_t a, uint32x4_t b) {
return vrsubhn_u32(a, b); }
1089[[gnu::always_inline]] nce uint32x4_t subtract_absolute_add(uint32x4_t a, uint32x4_t b, uint32x4_t c) {
return vabaq_u32(a, b, c); }
1090[[gnu::always_inline]] nce uint32x4_t reciprocal_estimate(uint32x4_t a) {
return vrecpeq_u32(a); }
1091[[gnu::always_inline]] nce uint32x4_t reciprocal_sqrt_estimate(uint32x4_t a) {
return vrsqrteq_u32(a); }
1092[[gnu::always_inline]] nce uint64x2_t pairwise_add_long(uint32x4_t a) {
return vpaddlq_u32(a); }
1093[[gnu::always_inline]] nce uint32x4_t pairwise_add_accumulate_long(uint32x4_t a, uint16x8_t b) {
return vpadalq_u16(a, b); }
1094[[gnu::always_inline]] nce uint32x4_t equal(uint32x4_t a, uint32x4_t b) {
return vceqq_u32(a, b); }
1095[[gnu::always_inline]] nce uint32x4_t greater_than_or_equal(uint32x4_t a, uint32x4_t b) {
return vcgeq_u32(a, b); }
1096[[gnu::always_inline]] nce uint32x4_t less_than_or_equal(uint32x4_t a, uint32x4_t b) {
return vcleq_u32(a, b); }
1097[[gnu::always_inline]] nce uint32x4_t greater_than(uint32x4_t a, uint32x4_t b) {
return vcgtq_u32(a, b); }
1098[[gnu::always_inline]] nce uint32x4_t less_than(uint32x4_t a, uint32x4_t b) {
return vcltq_u32(a, b); }
1099[[gnu::always_inline]] nce uint32x4_t compare_test_nonzero(uint32x4_t a, uint32x4_t b) {
return vtstq_u32(a, b); }
1100template <
int n>[[gnu::always_inline]] nce uint32x4_t shift_left(uint32x4_t a) {
return vshlq_n_u32(a, n); }
1101template <
int n>[[gnu::always_inline]] nce uint32x4_t shift_right_accumulate(uint32x4_t a, uint32x4_t b) {
return vsraq_n_u32(a, b, n); }
1102template <
int n>[[gnu::always_inline]] nce uint32x4_t shift_right_accumulate_round(uint32x4_t a, uint32x4_t b) {
return vrsraq_n_u32(a, b, n); }
1103template <
int n>[[gnu::always_inline]] nce uint16x4_t shift_right_narrow(uint32x4_t a) {
return vshrn_n_u32(a, n); }
1104template <
int n>[[gnu::always_inline]] nce uint16x4_t shift_right_saturate_narrow(uint32x4_t a) {
return vqshrn_n_u32(a, n); }
1105template <
int n>[[gnu::always_inline]] nce uint16x4_t shift_right_round_saturate_narrow(uint32x4_t a) {
return vqrshrn_n_u32(a, n); }
1106template <
int n>[[gnu::always_inline]] nce uint16x4_t shift_right_round_narrow(uint32x4_t a) {
return vrshrn_n_u32(a, n); }
1107template <
int fracbits> [[gnu::always_inline]] nce float32x4_t convert_n(uint32x4_t a) {
return vcvtq_n_f32_u32(a, fracbits); }
1108template <> [[gnu::always_inline]] nce poly8x16_t reinterpret(uint32x4_t a) {
return vreinterpretq_p8_u32(a); }
1109template <> [[gnu::always_inline]] nce poly16x8_t reinterpret(uint32x4_t a) {
return vreinterpretq_p16_u32(a); }
1110[[gnu::always_inline]] nce uint16x4_t move_narrow(uint32x4_t a) {
return vmovn_u32(a); }
1111[[gnu::always_inline]] nce uint16x4_t move_saturate_narrow(uint32x4_t a) {
return vqmovn_u32(a); }
1112template <
int lane> [[gnu::always_inline]] nce uint32x4_t multiply_add_long_lane(uint32x4_t a, uint16x4_t b, uint16x4_t v) {
return vmlal_lane_u16(a, b, v, lane); }
1113template <
int lane> [[gnu::always_inline]] nce uint32x4_t multiply_subtract_long_lane(uint32x4_t a, uint16x4_t b, uint16x4_t v) {
return vmlsl_lane_u16(a, b, v, lane); }
1114[[gnu::always_inline]] nce uint32x4_t multiply_add_long(uint32x4_t a, uint16x4_t b, uint16_t c) {
return vmlal_n_u16(a, b, c); }
1115[[gnu::always_inline]] nce uint32x4_t multiply_subtract_long(uint32x4_t a, uint16x4_t b, uint16_t c) {
return vmlsl_n_u16(a, b, c); }
1116template <
int lane> [[gnu::always_inline]] nce uint32x4_t multiply_lane(uint32x4_t a, uint32x2_t v) {
return vmulq_lane_u32(a, v, lane); }
1117template <
int lane> [[gnu::always_inline]] nce uint32x4_t multiply_add_lane(uint32x4_t a, uint32x4_t b, uint32x2_t v) {
return vmlaq_lane_u32(a, b, v, lane); }
1118template <
int lane> [[gnu::always_inline]] nce uint32x4_t multiply_subtract_lane(uint32x4_t a, uint32x4_t b, uint32x2_t v) {
return vmlsq_lane_u32(a, b, v, lane); }
1119[[gnu::always_inline]] nce uint32x4_t multiply_add(uint32x4_t a, uint32x4_t b, uint32_t c) {
return vmlaq_n_u32(a, b, c); }
1120[[gnu::always_inline]] nce uint32x4_t multiply_subtract(uint32x4_t a, uint32x4_t b, uint32_t c) {
return vmlsq_n_u32(a, b, c); }
1122[[gnu::always_inline]] nce int32x4_t count_leading_sign_bits(uint32x4_t a) {
return vclsq_u32(a); }
1124[[gnu::always_inline]] nce int32x4_t bitwise_select(uint32x4_t a, int32x4_t b, int32x4_t c) {
return vbslq_s32(a, b, c); }
1125[[gnu::always_inline]] nce uint32x4_t bitwise_select(uint32x4_t a, uint32x4_t b, uint32x4_t c) {
return vbslq_u32(a, b, c); }
1126[[gnu::always_inline]] nce uint32x2_t get_high(uint32x4_t a) {
return vget_high_u32(a); }
1127[[gnu::always_inline]] nce uint32x2_t get_low(uint32x4_t a) {
return vget_low_u32(a); }
1128template <
int n>[[gnu::always_inline]] nce uint32x4_t extract(uint32x4_t a, uint32x4_t b) {
return vextq_u32(a, b, n); }
1129[[gnu::always_inline]] nce uint32x4x2_t zip(uint32x4_t a, uint32x4_t b) {
return vzipq_u32(a, b); }
1130[[gnu::always_inline]] nce uint32x4x2_t unzip(uint32x4_t a, uint32x4_t b) {
return vuzpq_u32(a, b); }
1131[[gnu::always_inline]] nce uint32x4x2_t transpose(uint32x4_t a, uint32x4_t b) {
return vtrnq_u32(a, b); }
1132[[gnu::always_inline]] nce float32x4_t bitwise_select(uint32x4_t a, float32x4_t b, float32x4_t c) {
return vbslq_f32(a, b, c); }
1133[[gnu::always_inline]] nce float32x2_t add(float32x2_t a, float32x2_t b) {
return vadd_f32(a, b); }
1134[[gnu::always_inline]] nce float32x2_t multiply(float32x2_t a, float32x2_t b) {
return vmul_f32(a, b); }
1135[[gnu::always_inline]] nce float32x2_t multiply_add(float32x2_t a, float32x2_t b, float32x2_t c) {
return vmla_f32(a, b, c); }
1136[[gnu::always_inline]] nce float32x2_t multiply_subtract(float32x2_t a, float32x2_t b, float32x2_t c) {
return vmls_f32(a, b, c); }
1137[[gnu::always_inline]] nce float32x2_t subtract(float32x2_t a, float32x2_t b) {
return vsub_f32(a, b); }
1138[[gnu::always_inline]] nce float32x2_t subtract_absolute(float32x2_t a, float32x2_t b) {
return vabd_f32(a, b); }
1139[[gnu::always_inline]] nce float32x2_t absolute(float32x2_t a) {
return vabs_f32(a); }
1140[[gnu::always_inline]] nce float32x2_t max(float32x2_t a, float32x2_t b) {
return vmax_f32(a, b); }
1141[[gnu::always_inline]] nce float32x2_t min(float32x2_t a, float32x2_t b) {
return vmin_f32(a, b); }
1142[[gnu::always_inline]] nce float32x2_t reciprocal_estimate(float32x2_t a) {
return vrecpe_f32(a); }
1143[[gnu::always_inline]] nce float32x2_t reciprocal_step(float32x2_t a, float32x2_t b) {
return vrecps_f32(a, b); }
1144[[gnu::always_inline]] nce float32x2_t reciprocal_sqrt_estimate(float32x2_t a) {
return vrsqrte_f32(a); }
1145[[gnu::always_inline]] nce float32x2_t reciprocal_sqrt_step(float32x2_t a, float32x2_t b) {
return vrsqrts_f32(a, b); }
1146[[gnu::always_inline]] nce float32x2_t pairwise_add(float32x2_t a, float32x2_t b) {
return vpadd_f32(a, b); }
1147[[gnu::always_inline]] nce float32x2_t pairwise_max(float32x2_t a, float32x2_t b) {
return vpmax_f32(a, b); }
1148[[gnu::always_inline]] nce float32x2_t pairwise_min(float32x2_t a, float32x2_t b) {
return vpmin_f32(a, b); }
1149[[gnu::always_inline]] nce uint32x2_t equal(float32x2_t a, float32x2_t b) {
return vceq_f32(a, b); }
1150[[gnu::always_inline]] nce uint32x2_t greater_than_or_equal(float32x2_t a, float32x2_t b) {
return vcge_f32(a, b); }
1151[[gnu::always_inline]] nce uint32x2_t less_than_or_equal(float32x2_t a, float32x2_t b) {
return vcle_f32(a, b); }
1152[[gnu::always_inline]] nce uint32x2_t greater_than(float32x2_t a, float32x2_t b) {
return vcgt_f32(a, b); }
1153[[gnu::always_inline]] nce uint32x2_t less_than(float32x2_t a, float32x2_t b) {
return vclt_f32(a, b); }
1154[[gnu::always_inline]] nce uint32x2_t absolute_greater_than_or_equal(float32x2_t a, float32x2_t b) {
return vcage_f32(a, b); }
1155[[gnu::always_inline]] nce uint32x2_t absolute_less_than_or_equal(float32x2_t a, float32x2_t b) {
return vcale_f32(a, b); }
1156[[gnu::always_inline]] nce uint32x2_t absolute_greater_than(float32x2_t a, float32x2_t b) {
return vcagt_f32(a, b); }
1157[[gnu::always_inline]] nce uint32x2_t absolute_less_than(float32x2_t a, float32x2_t b) {
return vcalt_f32(a, b); }
1158template <> [[gnu::always_inline]] nce int32x2_t convert(float32x2_t a) {
return vcvt_s32_f32(a); }
1159template <> [[gnu::always_inline]] nce uint32x2_t convert(float32x2_t a) {
return vcvt_u32_f32(a); }
1160template <
int fracbits> [[gnu::always_inline]] nce int32x2_t convert_n_signed(float32x2_t a) {
return vcvt_n_s32_f32(a, fracbits); }
1161template <
int fracbits> [[gnu::always_inline]] nce uint32x2_t convert_n_unsigned(float32x2_t a) {
return vcvt_n_u32_f32(a, fracbits); }
1162template <> [[gnu::always_inline]] nce int8x8_t reinterpret(float32x2_t a) {
return vreinterpret_s8_f32(a); }
1163template <> [[gnu::always_inline]] nce int16x4_t reinterpret(float32x2_t a) {
return vreinterpret_s16_f32(a); }
1164template <> [[gnu::always_inline]] nce int32x2_t reinterpret(float32x2_t a) {
return vreinterpret_s32_f32(a); }
1165template <> [[gnu::always_inline]] nce uint8x8_t reinterpret(float32x2_t a) {
return vreinterpret_u8_f32(a); }
1166template <> [[gnu::always_inline]] nce uint16x4_t reinterpret(float32x2_t a) {
return vreinterpret_u16_f32(a); }
1167template <> [[gnu::always_inline]] nce uint32x2_t reinterpret(float32x2_t a) {
return vreinterpret_u32_f32(a); }
1168template <> [[gnu::always_inline]] nce poly8x8_t reinterpret(float32x2_t a) {
return vreinterpret_p8_f32(a); }
1169template <> [[gnu::always_inline]] nce poly16x4_t reinterpret(float32x2_t a) {
return vreinterpret_p16_f32(a); }
1170template <> [[gnu::always_inline]] nce uint64x1_t reinterpret(float32x2_t a) {
return vreinterpret_u64_f32(a); }
1171template <> [[gnu::always_inline]] nce int64x1_t reinterpret(float32x2_t a) {
return vreinterpret_s64_f32(a); }
1172template <
int lane> [[gnu::always_inline]] nce float32x2_t multiply_add_lane(float32x2_t a, float32x2_t b, float32x2_t v) {
return vmla_lane_f32(a, b, v, lane); }
1173template <
int lane> [[gnu::always_inline]] nce float32x2_t multiply_subtract_lane(float32x2_t a, float32x2_t b, float32x2_t v) {
return vmls_lane_f32(a, b, v, lane); }
1174[[gnu::always_inline]] nce float32x2_t multiply_add(float32x2_t a, float32x2_t b, float32_t c) {
return vmla_n_f32(a, b, c); }
1175template <
int lane> [[gnu::always_inline]] nce float32x2_t multiply_lane(float32x2_t a, float32x2_t v) {
return vmul_lane_f32(a, v, lane); }
1176[[gnu::always_inline]] nce float32x2_t multiply_subtract(float32x2_t a, float32x2_t b, float32_t c) {
return vmls_n_f32(a, b, c); }
1177template <
int lane>[[gnu::always_inline]] nce float32x2_t duplicate_lane(float32x2_t a) {
return vdup_lane_f32(a, lane); }
1178template <
int lane>[[gnu::always_inline]] nce float32x4_t duplicate_lane_quad(float32x2_t a) {
return vdupq_lane_f32(a, lane); }
1179[[gnu::always_inline]] nce float32x4_t combine(float32x2_t low, float32x2_t high) {
return vcombine_f32(low, high); }
1180template <
int lane>[[gnu::always_inline]] nce float32_t get_lane(float32x2_t v) {
return vget_lane_f32(v, lane); }
1181template <
int n>[[gnu::always_inline]] nce float32x2_t extract(float32x2_t a, float32x2_t b) {
return vext_f32(a, b, n); }
1182[[gnu::always_inline]] nce float32x2_t reverse_64bit(float32x2_t a) {
return vrev64_f32(a); }
1183[[gnu::always_inline]] nce float32x2x2_t zip(float32x2_t a, float32x2_t b) {
return vzip_f32(a, b); }
1184[[gnu::always_inline]] nce float32x2x2_t unzip(float32x2_t a, float32x2_t b) {
return vuzp_f32(a, b); }
1185[[gnu::always_inline]] nce float32x2x2_t transpose(float32x2_t a, float32x2_t b) {
return vtrn_f32(a, b); }
1186[[gnu::always_inline]] nce float32x2_t multiply(float32x2_t a, float32_t b) {
return vmul_n_f32(a, b); }
1187[[gnu::always_inline]] nce float32x2_t negate(float32x2_t a) {
return vneg_f32(a); }
1188[[gnu::always_inline]] nce float32x4_t multiply_add(float32x4_t a, float32x4_t b, float32x4_t c) {
return vmlaq_f32(a, b, c); }
1189[[gnu::always_inline]] nce float32x4_t multiply_subtract(float32x4_t a, float32x4_t b, float32x4_t c) {
return vmlsq_f32(a, b, c); }
1190[[gnu::always_inline]] nce float32x4_t max(float32x4_t a, float32x4_t b) {
return vmaxq_f32(a, b); }
1191[[gnu::always_inline]] nce float32x4_t min(float32x4_t a, float32x4_t b) {
return vminq_f32(a, b); }
1192[[gnu::always_inline]] nce float32x4_t reciprocal_estimate(float32x4_t a) {
return vrecpeq_f32(a); }
1193[[gnu::always_inline]] nce float32x4_t reciprocal_step(float32x4_t a, float32x4_t b) {
return vrecpsq_f32(a, b); }
1194[[gnu::always_inline]] nce float32x4_t reciprocal_sqrt_estimate(float32x4_t a) {
return vrsqrteq_f32(a); }
1195[[gnu::always_inline]] nce float32x4_t reciprocal_sqrt_step(float32x4_t a, float32x4_t b) {
return vrsqrtsq_f32(a, b); }
1196[[gnu::always_inline]] nce uint32x4_t equal(float32x4_t a, float32x4_t b) {
return vceqq_f32(a, b); }
1197[[gnu::always_inline]] nce uint32x4_t greater_than_or_equal(float32x4_t a, float32x4_t b) {
return vcgeq_f32(a, b); }
1198[[gnu::always_inline]] nce uint32x4_t less_than_or_equal(float32x4_t a, float32x4_t b) {
return vcleq_f32(a, b); }
1199[[gnu::always_inline]] nce uint32x4_t greater_than(float32x4_t a, float32x4_t b) {
return vcgtq_f32(a, b); }
1200[[gnu::always_inline]] nce uint32x4_t less_than(float32x4_t a, float32x4_t b) {
return vcltq_f32(a, b); }
1201[[gnu::always_inline]] nce uint32x4_t absolute_greater_than_or_equal(float32x4_t a, float32x4_t b) {
return vcageq_f32(a, b); }
1202[[gnu::always_inline]] nce uint32x4_t absolute_less_than_or_equal(float32x4_t a, float32x4_t b) {
return vcaleq_f32(a, b); }
1203[[gnu::always_inline]] nce uint32x4_t absolute_greater_than(float32x4_t a, float32x4_t b) {
return vcagtq_f32(a, b); }
1204[[gnu::always_inline]] nce uint32x4_t absolute_less_than(float32x4_t a, float32x4_t b) {
return vcaltq_f32(a, b); }
1205template <
int fracbits> [[gnu::always_inline]] nce int32x4_t convert_n_signed(float32x4_t a) {
return vcvtq_n_s32_f32(a, fracbits); }
1206template <
int fracbits> [[gnu::always_inline]] nce uint32x4_t convert_n_unsigned(float32x4_t a) {
return vcvtq_n_u32_f32(a, fracbits); }
1207template <> [[gnu::always_inline]] nce poly8x16_t reinterpret(float32x4_t a) {
return vreinterpretq_p8_f32(a); }
1208template <> [[gnu::always_inline]] nce poly16x8_t reinterpret(float32x4_t a) {
return vreinterpretq_p16_f32(a); }
1209template <
int lane> [[gnu::always_inline]] nce float32x4_t multiply_lane(float32x4_t a, float32x2_t v) {
return vmulq_lane_f32(a, v, lane); }
1210template <
int lane> [[gnu::always_inline]] nce float32x4_t multiply_add_lane(float32x4_t a, float32x4_t b, float32x2_t v) {
return vmlaq_lane_f32(a, b, v, lane); }
1211template <
int lane> [[gnu::always_inline]] nce float32x4_t multiply_subtract_lane(float32x4_t a, float32x4_t b, float32x2_t v) {
return vmlsq_lane_f32(a, b, v, lane); }
1212[[gnu::always_inline]] nce float32x4_t multiply_add(float32x4_t a, float32x4_t b, float32_t c) {
return vmlaq_n_f32(a, b, c); }
1213[[gnu::always_inline]] nce float32x4_t multiply_subtract(float32x4_t a, float32x4_t b, float32_t c) {
return vmlsq_n_f32(a, b, c); }
1214[[gnu::always_inline]] nce float32x2_t get_high(float32x4_t a) {
return vget_high_f32(a); }
1215[[gnu::always_inline]] nce float32x2_t get_low(float32x4_t a) {
return vget_low_f32(a); }
1216template <
int n>[[gnu::always_inline]] nce float32x4_t extract(float32x4_t a, float32x4_t b) {
return vextq_f32(a, b, n); }
1217[[gnu::always_inline]] nce float32x4x2_t zip(float32x4_t a, float32x4_t b) {
return vzipq_f32(a, b); }
1218[[gnu::always_inline]] nce float32x4x2_t unzip(float32x4_t a, float32x4_t b) {
return vuzpq_f32(a, b); }
1219[[gnu::always_inline]] nce float32x4x2_t transpose(float32x4_t a, float32x4_t b) {
return vtrnq_f32(a, b); }
1220[[gnu::always_inline]] nce poly8x8_t multiply(poly8x8_t a, poly8x8_t b) {
return vmul_p8(a, b); }
1221[[gnu::always_inline]] nce poly16x8_t multiply_long(poly8x8_t a, poly8x8_t b) {
return vmull_p8(a, b); }
1222[[gnu::always_inline]] nce uint8x8_t equal(poly8x8_t a, poly8x8_t b) {
return vceq_p8(a, b); }
1223[[gnu::always_inline]] nce uint8x8_t compare_test_nonzero(poly8x8_t a, poly8x8_t b) {
return vtst_p8(a, b); }
1224template <
int n>[[gnu::always_inline]] nce poly8x8_t shift_left_insert(poly8x8_t a, poly8x8_t b) {
return vsli_n_p8(a, b, n); }
1225template <
int n>[[gnu::always_inline]] nce poly8x8_t shift_right_insert(poly8x8_t a, poly8x8_t b) {
return vsri_n_p8(a, b, n); }
1226template <> [[gnu::always_inline]] nce int8x8_t reinterpret(poly8x8_t a) {
return vreinterpret_s8_p8(a); }
1227template <> [[gnu::always_inline]] nce int16x4_t reinterpret(poly8x8_t a) {
return vreinterpret_s16_p8(a); }
1228template <> [[gnu::always_inline]] nce int32x2_t reinterpret(poly8x8_t a) {
return vreinterpret_s32_p8(a); }
1229template <> [[gnu::always_inline]] nce float32x2_t reinterpret(poly8x8_t a) {
return vreinterpret_f32_p8(a); }
1230template <> [[gnu::always_inline]] nce uint8x8_t reinterpret(poly8x8_t a) {
return vreinterpret_u8_p8(a); }
1231template <> [[gnu::always_inline]] nce uint16x4_t reinterpret(poly8x8_t a) {
return vreinterpret_u16_p8(a); }
1232template <> [[gnu::always_inline]] nce uint32x2_t reinterpret(poly8x8_t a) {
return vreinterpret_u32_p8(a); }
1233template <> [[gnu::always_inline]] nce poly16x4_t reinterpret(poly8x8_t a) {
return vreinterpret_p16_p8(a); }
1234template <> [[gnu::always_inline]] nce uint64x1_t reinterpret(poly8x8_t a) {
return vreinterpret_u64_p8(a); }
1235template <> [[gnu::always_inline]] nce int64x1_t reinterpret(poly8x8_t a) {
return vreinterpret_s64_p8(a); }
1236[[gnu::always_inline]] nce poly8x8_t bitwise_not(poly8x8_t a) {
return vmvn_p8(a); }
1237[[gnu::always_inline]] nce poly8x8_t count_active_bits(poly8x8_t a) {
return vcnt_p8(a); }
1238template <
int lane>[[gnu::always_inline]] nce poly8x8_t duplicate_lane(poly8x8_t a) {
return vdup_lane_p8(a, lane); }
1239template <
int lane>[[gnu::always_inline]] nce poly8x16_t duplicate_lane_quad(poly8x8_t a) {
return vdupq_lane_p8(a, lane); }
1240[[gnu::always_inline]] nce poly8x16_t combine(poly8x8_t low, poly8x8_t high) {
return vcombine_p8(low, high); }
1241template <
int lane>[[gnu::always_inline]] nce poly8_t get_lane(poly8x8_t v) {
return vget_lane_p8(v, lane); }
1242template <
int n>[[gnu::always_inline]] nce poly8x8_t extract(poly8x8_t a, poly8x8_t b) {
return vext_p8(a, b, n); }
1243[[gnu::always_inline]] nce poly8x8_t reverse_64bit(poly8x8_t a) {
return vrev64_p8(a); }
1244[[gnu::always_inline]] nce poly8x8_t reverse_32bit(poly8x8_t a) {
return vrev32_p8(a); }
1245[[gnu::always_inline]] nce poly8x8_t reverse_16bit(poly8x8_t a) {
return vrev16_p8(a); }
1246[[gnu::always_inline]] nce poly8x8_t table_lookup1(poly8x8_t a, uint8x8_t idx) {
return vtbl1_p8(a, idx); }
1247[[gnu::always_inline]] nce poly8x8x2_t zip(poly8x8_t a, poly8x8_t b) {
return vzip_p8(a, b); }
1248[[gnu::always_inline]] nce poly8x8x2_t unzip(poly8x8_t a, poly8x8_t b) {
return vuzp_p8(a, b); }
1249[[gnu::always_inline]] nce poly8x8x2_t transpose(poly8x8_t a, poly8x8_t b) {
return vtrn_p8(a, b); }
1250[[gnu::always_inline]] nce poly8x8_t table_extension1(poly8x8_t a, poly8x8_t b, uint8x8_t idx) {
return vtbx1_p8(a, b, idx); }
1252[[gnu::always_inline]] nce poly8x8_t add(poly8x8_t a, poly8x8_t b) {
return vadd_p8(a, b); }
1254[[gnu::always_inline]] nce poly8x8_t table_extension2(poly8x8_t a, poly8x8x2_t b, uint8x8_t idx) {
return vtbx2_p8(a, b, idx); }
1255[[gnu::always_inline]] nce poly8x8_t table_extension3(poly8x8_t a, poly8x8x3_t b, uint8x8_t idx) {
return vtbx3_p8(a, b, idx); }
1256[[gnu::always_inline]] nce poly8x8_t table_extension4(poly8x8_t a, poly8x8x4_t b, uint8x8_t idx) {
return vtbx4_p8(a, b, idx); }
1257template <
int n>[[gnu::always_inline]] nce poly16x4_t shift_left_insert(poly16x4_t a, poly16x4_t b) {
return vsli_n_p16(a, b, n); }
1258template <
int n>[[gnu::always_inline]] nce poly16x4_t shift_right_insert(poly16x4_t a, poly16x4_t b) {
return vsri_n_p16(a, b, n); }
1259template <> [[gnu::always_inline]] nce int8x8_t reinterpret(poly16x4_t a) {
return vreinterpret_s8_p16(a); }
1260template <> [[gnu::always_inline]] nce int16x4_t reinterpret(poly16x4_t a) {
return vreinterpret_s16_p16(a); }
1261template <> [[gnu::always_inline]] nce int32x2_t reinterpret(poly16x4_t a) {
return vreinterpret_s32_p16(a); }
1262template <> [[gnu::always_inline]] nce float32x2_t reinterpret(poly16x4_t a) {
return vreinterpret_f32_p16(a); }
1263template <> [[gnu::always_inline]] nce uint8x8_t reinterpret(poly16x4_t a) {
return vreinterpret_u8_p16(a); }
1264template <> [[gnu::always_inline]] nce uint16x4_t reinterpret(poly16x4_t a) {
return vreinterpret_u16_p16(a); }
1265template <> [[gnu::always_inline]] nce uint32x2_t reinterpret(poly16x4_t a) {
return vreinterpret_u32_p16(a); }
1266template <> [[gnu::always_inline]] nce poly8x8_t reinterpret(poly16x4_t a) {
return vreinterpret_p8_p16(a); }
1267template <> [[gnu::always_inline]] nce uint64x1_t reinterpret(poly16x4_t a) {
return vreinterpret_u64_p16(a); }
1268template <> [[gnu::always_inline]] nce int64x1_t reinterpret(poly16x4_t a) {
return vreinterpret_s64_p16(a); }
1269template <
int lane>[[gnu::always_inline]] nce poly16x4_t duplicate_lane(poly16x4_t a) {
return vdup_lane_p16(a, lane); }
1270template <
int lane>[[gnu::always_inline]] nce poly16x8_t duplicate_lane_quad(poly16x4_t a) {
return vdupq_lane_p16(a, lane); }
1271[[gnu::always_inline]] nce poly16x8_t combine(poly16x4_t low, poly16x4_t high) {
return vcombine_p16(low, high); }
1272template <
int lane>[[gnu::always_inline]] nce poly16_t get_lane(poly16x4_t v) {
return vget_lane_p16(v, lane); }
1273template <
int n>[[gnu::always_inline]] nce poly16x4_t extract(poly16x4_t a, poly16x4_t b) {
return vext_p16(a, b, n); }
1274[[gnu::always_inline]] nce poly16x4_t reverse_64bit(poly16x4_t a) {
return vrev64_p16(a); }
1275[[gnu::always_inline]] nce poly16x4_t reverse_32bit(poly16x4_t a) {
return vrev32_p16(a); }
1276[[gnu::always_inline]] nce poly16x4x2_t zip(poly16x4_t a, poly16x4_t b) {
return vzip_p16(a, b); }
1277[[gnu::always_inline]] nce poly16x4x2_t unzip(poly16x4_t a, poly16x4_t b) {
return vuzp_p16(a, b); }
1278[[gnu::always_inline]] nce poly16x4x2_t transpose(poly16x4_t a, poly16x4_t b) {
return vtrn_p16(a, b); }
1280[[gnu::always_inline]] nce poly16x4_t add(poly16x4_t a, poly16x4_t b) {
return vadd_p16(a, b); }
1282[[gnu::always_inline]] nce int64x1_t add(int64x1_t a, int64x1_t b) {
return vadd_s64(a, b); }
1283[[gnu::always_inline]] nce int64x2_t add(int64x2_t a, int64x2_t b) {
return vaddq_s64(a, b); }
1284[[gnu::always_inline]] nce int64x2_t add(int64x2_t a, int32x2_t b) {
return vaddw_s32(a, b); }
1285[[gnu::always_inline]] nce int32x2_t add_narrow(int64x2_t a, int64x2_t b) {
return vaddhn_s64(a, b); }
1286[[gnu::always_inline]] nce int32x2_t add_round_narrow(int64x2_t a, int64x2_t b) {
return vraddhn_s64(a, b); }
1287[[gnu::always_inline]] nce int64x1_t add_saturate(int64x1_t a, int64x1_t b) {
return vqadd_s64(a, b); }
1288[[gnu::always_inline]] nce int64x2_t add_saturate(int64x2_t a, int64x2_t b) {
return vqaddq_s64(a, b); }
1289[[gnu::always_inline]] nce int64x2_t multiply_add_long(int64x2_t a, int32x2_t b, int32x2_t c) {
return vmlal_s32(a, b, c); }
1290[[gnu::always_inline]] nce int64x2_t multiply_subtract_long(int64x2_t a, int32x2_t b, int32x2_t c) {
return vmlsl_s32(a, b, c); }
1291[[gnu::always_inline]] nce int64x2_t multiply_double_add_saturate_long(int64x2_t a, int32x2_t b, int32x2_t c) {
return vqdmlal_s32(a, b, c); }
1292[[gnu::always_inline]] nce int64x2_t multiply_double_subtract_saturate_long(int64x2_t a, int32x2_t b, int32x2_t c) {
return vqdmlsl_s32(a, b, c); }
1293template <
int lane> [[gnu::always_inline]] nce int64x2_t multiply_double_add_saturate_long_lane(int64x2_t a, int32x2_t b, int32x2_t v) {
return vqdmlal_lane_s32(a, b, v, lane); }
1294template <
int lane> [[gnu::always_inline]] nce int64x2_t multiply_double_subtract_saturate_long_lane(int64x2_t a, int32x2_t b, int32x2_t v) {
return vqdmlsl_lane_s32(a, b, v, lane); }
1295[[gnu::always_inline]] nce int64x2_t multiply_double_add_saturate_long(int64x2_t a, int32x2_t b, int32_t c) {
return vqdmlal_n_s32(a, b, c); }
1296[[gnu::always_inline]] nce int64x2_t multiply_double_subtract_saturate_long(int64x2_t a, int32x2_t b, int32_t c) {
return vqdmlsl_n_s32(a, b, c); }
1297[[gnu::always_inline]] nce poly8x16_t multiply(poly8x16_t a, poly8x16_t b) {
return vmulq_p8(a, b); }
1298[[gnu::always_inline]] nce int64x1_t subtract(int64x1_t a, int64x1_t b) {
return vsub_s64(a, b); }
1299[[gnu::always_inline]] nce int64x2_t subtract(int64x2_t a, int64x2_t b) {
return vsubq_s64(a, b); }
1300[[gnu::always_inline]] nce int64x2_t subtract(int64x2_t a, int32x2_t b) {
return vsubw_s32(a, b); }
1301[[gnu::always_inline]] nce int32x2_t subtract_narrow(int64x2_t a, int64x2_t b) {
return vsubhn_s64(a, b); }
1302[[gnu::always_inline]] nce int32x2_t subtract_round_narrow(int64x2_t a, int64x2_t b) {
return vrsubhn_s64(a, b); }
1303[[gnu::always_inline]] nce int64x1_t subtract_saturate(int64x1_t a, int64x1_t b) {
return vqsub_s64(a, b); }
1304[[gnu::always_inline]] nce int64x2_t subtract_saturate(int64x2_t a, int64x2_t b) {
return vqsubq_s64(a, b); }
1305[[gnu::always_inline]] nce int64x2_t subtract_absolute_add(int64x2_t a, int32x2_t b, int32x2_t c) {
return vabal_s32(a, b, c); }
1306[[gnu::always_inline]] nce int64x1_t pairwise_add_accumulate_long(int64x1_t a, int32x2_t b) {
return vpadal_s32(a, b); }
1307[[gnu::always_inline]] nce int64x2_t pairwise_add_accumulate_long(int64x2_t a, int32x4_t b) {
return vpadalq_s32(a, b); }
1308[[gnu::always_inline]] nce uint8x16_t equal(poly8x16_t a, poly8x16_t b) {
return vceqq_p8(a, b); }
1309[[gnu::always_inline]] nce uint8x16_t compare_test_nonzero(poly8x16_t a, poly8x16_t b) {
return vtstq_p8(a, b); }
1310[[gnu::always_inline]] nce int64x1_t shift_left(int64x1_t a, int64x1_t b) {
return vshl_s64(a, b); }
1311[[gnu::always_inline]] nce int64x2_t shift_left(int64x2_t a, int64x2_t b) {
return vshlq_s64(a, b); }
1312template <
int n>[[gnu::always_inline]] nce int64x1_t shift_left(int64x1_t a) {
return vshl_n_s64(a, n); }
1313template <
int n>[[gnu::always_inline]] nce int64x2_t shift_left(int64x2_t a) {
return vshlq_n_s64(a, n); }
1314[[gnu::always_inline]] nce int64x1_t shift_left_saturate(int64x1_t a, int64x1_t b) {
return vqshl_s64(a, b); }
1315[[gnu::always_inline]] nce int64x2_t shift_left_saturate(int64x2_t a, int64x2_t b) {
return vqshlq_s64(a, b); }
1316template <
int n>[[gnu::always_inline]] nce int64x1_t shift_left_saturate(int64x1_t a) {
return vqshl_n_s64(a, n); }
1317template <
int n>[[gnu::always_inline]] nce int64x2_t shift_left_saturate(int64x2_t a) {
return vqshlq_n_s64(a, n); }
1318template <
int n>[[gnu::always_inline]] nce uint64x1_t shift_left_unsigned_saturate(int64x1_t a) {
return vqshlu_n_s64(a, n); }
1319template <
int n>[[gnu::always_inline]] nce uint64x2_t shift_left_unsigned_saturate(int64x2_t a) {
return vqshluq_n_s64(a, n); }
1320[[gnu::always_inline]] nce int64x1_t shift_left_round(int64x1_t a, int64x1_t b) {
return vrshl_s64(a, b); }
1321[[gnu::always_inline]] nce int64x2_t shift_left_round(int64x2_t a, int64x2_t b) {
return vrshlq_s64(a, b); }
1322[[gnu::always_inline]] nce int64x1_t shift_left_round_saturate(int64x1_t a, int64x1_t b) {
return vqrshl_s64(a, b); }
1323[[gnu::always_inline]] nce int64x2_t shift_left_round_saturate(int64x2_t a, int64x2_t b) {
return vqrshlq_s64(a, b); }
1324template <
int n>[[gnu::always_inline]] nce int64x1_t shift_left_insert(int64x1_t a, int64x1_t b) {
return vsli_n_s64(a, b, n); }
1325template <
int n>[[gnu::always_inline]] nce int64x2_t shift_left_insert(int64x2_t a, int64x2_t b) {
return vsliq_n_s64(a, b, n); }
1326template <
int n>[[gnu::always_inline]] nce poly8x16_t shift_left_insert(poly8x16_t a, poly8x16_t b) {
return vsliq_n_p8(a, b, n); }
1327template <
int n>[[gnu::always_inline]] nce poly16x8_t shift_left_insert(poly16x8_t a, poly16x8_t b) {
return vsliq_n_p16(a, b, n); }
1328template <
int n>[[gnu::always_inline]] nce int64x1_t shift_right(int64x1_t a) {
return vshr_n_s64(a, n); }
1329template <
int n>[[gnu::always_inline]] nce int64x2_t shift_right(int64x2_t a) {
return vshrq_n_s64(a, n); }
1330template <
int n>[[gnu::always_inline]] nce int64x1_t shift_right_round(int64x1_t a) {
return vrshr_n_s64(a, n); }
1331template <
int n>[[gnu::always_inline]] nce int64x2_t shift_right_round(int64x2_t a) {
return vrshrq_n_s64(a, n); }
1332template <
int n>[[gnu::always_inline]] nce int64x1_t shift_right_accumulate(int64x1_t a, int64x1_t b) {
return vsra_n_s64(a, b, n); }
1333template <
int n>[[gnu::always_inline]] nce int64x2_t shift_right_accumulate(int64x2_t a, int64x2_t b) {
return vsraq_n_s64(a, b, n); }
1334template <
int n>[[gnu::always_inline]] nce int64x1_t shift_right_accumulate_round(int64x1_t a, int64x1_t b) {
return vrsra_n_s64(a, b, n); }
1335template <
int n>[[gnu::always_inline]] nce int64x2_t shift_right_accumulate_round(int64x2_t a, int64x2_t b) {
return vrsraq_n_s64(a, b, n); }
1336template <
int n>[[gnu::always_inline]] nce int32x2_t shift_right_narrow(int64x2_t a) {
return vshrn_n_s64(a, n); }
1337template <
int n>[[gnu::always_inline]] nce uint32x2_t shift_right_saturate_narrow_unsigned(int64x2_t a) {
return vqshrun_n_s64(a, n); }
1338template <
int n>[[gnu::always_inline]] nce int32x2_t shift_right_saturate_narrow(int64x2_t a) {
return vqshrn_n_s64(a, n); }
1339template <
int n>[[gnu::always_inline]] nce uint32x2_t shift_right_round_saturate_narrow_unsigned(int64x2_t a) {
return vqrshrun_n_s64(a, n); }
1340template <
int n>[[gnu::always_inline]] nce int32x2_t shift_right_round_saturate_narrow(int64x2_t a) {
return vqrshrn_n_s64(a, n); }
1341template <
int n>[[gnu::always_inline]] nce int32x2_t shift_right_round_narrow(int64x2_t a) {
return vrshrn_n_s64(a, n); }
1342template <
int n>[[gnu::always_inline]] nce int64x1_t shift_right_insert(int64x1_t a, int64x1_t b) {
return vsri_n_s64(a, b, n); }
1343template <
int n>[[gnu::always_inline]] nce int64x2_t shift_right_insert(int64x2_t a, int64x2_t b) {
return vsriq_n_s64(a, b, n); }
1344template <
int n>[[gnu::always_inline]] nce poly8x16_t shift_right_insert(poly8x16_t a, poly8x16_t b) {
return vsriq_n_p8(a, b, n); }
1345template <
int n>[[gnu::always_inline]] nce poly16x8_t shift_right_insert(poly16x8_t a, poly16x8_t b) {
return vsriq_n_p16(a, b, n); }
1346template <> [[gnu::always_inline]] nce int8x8_t reinterpret(int64x1_t a) {
return vreinterpret_s8_s64(a); }
1347template <> [[gnu::always_inline]] nce int16x4_t reinterpret(int64x1_t a) {
return vreinterpret_s16_s64(a); }
1348template <> [[gnu::always_inline]] nce int32x2_t reinterpret(int64x1_t a) {
return vreinterpret_s32_s64(a); }
1349template <> [[gnu::always_inline]] nce float32x2_t reinterpret(int64x1_t a) {
return vreinterpret_f32_s64(a); }
1350template <> [[gnu::always_inline]] nce uint8x8_t reinterpret(int64x1_t a) {
return vreinterpret_u8_s64(a); }
1351template <> [[gnu::always_inline]] nce uint16x4_t reinterpret(int64x1_t a) {
return vreinterpret_u16_s64(a); }
1352template <> [[gnu::always_inline]] nce uint32x2_t reinterpret(int64x1_t a) {
return vreinterpret_u32_s64(a); }
1353template <> [[gnu::always_inline]] nce poly8x8_t reinterpret(int64x1_t a) {
return vreinterpret_p8_s64(a); }
1354template <> [[gnu::always_inline]] nce poly16x4_t reinterpret(int64x1_t a) {
return vreinterpret_p16_s64(a); }
1355template <> [[gnu::always_inline]] nce uint64x1_t reinterpret(int64x1_t a) {
return vreinterpret_u64_s64(a); }
1356template <> [[gnu::always_inline]] nce int8x16_t reinterpret(poly8x16_t a) {
return vreinterpretq_s8_p8(a); }
1357template <> [[gnu::always_inline]] nce int16x8_t reinterpret(poly8x16_t a) {
return vreinterpretq_s16_p8(a); }
1358template <> [[gnu::always_inline]] nce int32x4_t reinterpret(poly8x16_t a) {
return vreinterpretq_s32_p8(a); }
1359template <> [[gnu::always_inline]] nce float32x4_t reinterpret(poly8x16_t a) {
return vreinterpretq_f32_p8(a); }
1360template <> [[gnu::always_inline]] nce uint8x16_t reinterpret(poly8x16_t a) {
return vreinterpretq_u8_p8(a); }
1361template <> [[gnu::always_inline]] nce uint16x8_t reinterpret(poly8x16_t a) {
return vreinterpretq_u16_p8(a); }
1362template <> [[gnu::always_inline]] nce uint32x4_t reinterpret(poly8x16_t a) {
return vreinterpretq_u32_p8(a); }
1363template <> [[gnu::always_inline]] nce poly16x8_t reinterpret(poly8x16_t a) {
return vreinterpretq_p16_p8(a); }
1364template <> [[gnu::always_inline]] nce uint64x2_t reinterpret(poly8x16_t a) {
return vreinterpretq_u64_p8(a); }
1365template <> [[gnu::always_inline]] nce int64x2_t reinterpret(poly8x16_t a) {
return vreinterpretq_s64_p8(a); }
1366template <> [[gnu::always_inline]] nce int8x16_t reinterpret(poly16x8_t a) {
return vreinterpretq_s8_p16(a); }
1367template <> [[gnu::always_inline]] nce int16x8_t reinterpret(poly16x8_t a) {
return vreinterpretq_s16_p16(a); }
1368template <> [[gnu::always_inline]] nce int32x4_t reinterpret(poly16x8_t a) {
return vreinterpretq_s32_p16(a); }
1369template <> [[gnu::always_inline]] nce float32x4_t reinterpret(poly16x8_t a) {
return vreinterpretq_f32_p16(a); }
1370template <> [[gnu::always_inline]] nce uint8x16_t reinterpret(poly16x8_t a) {
return vreinterpretq_u8_p16(a); }
1371template <> [[gnu::always_inline]] nce uint16x8_t reinterpret(poly16x8_t a) {
return vreinterpretq_u16_p16(a); }
1372template <> [[gnu::always_inline]] nce uint32x4_t reinterpret(poly16x8_t a) {
return vreinterpretq_u32_p16(a); }
1373template <> [[gnu::always_inline]] nce poly8x16_t reinterpret(poly16x8_t a) {
return vreinterpretq_p8_p16(a); }
1374template <> [[gnu::always_inline]] nce uint64x2_t reinterpret(poly16x8_t a) {
return vreinterpretq_u64_p16(a); }
1375template <> [[gnu::always_inline]] nce int64x2_t reinterpret(poly16x8_t a) {
return vreinterpretq_s64_p16(a); }
1376template <> [[gnu::always_inline]] nce poly8x16_t reinterpret(int64x2_t a) {
return vreinterpretq_p8_s64(a); }
1377template <> [[gnu::always_inline]] nce poly16x8_t reinterpret(int64x2_t a) {
return vreinterpretq_p16_s64(a); }
1378[[gnu::always_inline]] nce int32x2_t move_narrow(int64x2_t a) {
return vmovn_s64(a); }
1379[[gnu::always_inline]] nce int32x2_t move_saturate_narrow(int64x2_t a) {
return vqmovn_s64(a); }
1380[[gnu::always_inline]] nce uint32x2_t move_unsigned_saturate_narrow(int64x2_t a) {
return vqmovun_s64(a); }
1381template <
int lane> [[gnu::always_inline]] nce int64x2_t multiply_add_long_lane(int64x2_t a, int32x2_t b, int32x2_t v) {
return vmlal_lane_s32(a, b, v, lane); }
1382template <
int lane> [[gnu::always_inline]] nce int64x2_t multiply_subtract_long_lane(int64x2_t a, int32x2_t b, int32x2_t v) {
return vmlsl_lane_s32(a, b, v, lane); }
1383[[gnu::always_inline]] nce int64x2_t multiply_add_long(int64x2_t a, int32x2_t b, int32_t c) {
return vmlal_n_s32(a, b, c); }
1384[[gnu::always_inline]] nce int64x2_t multiply_subtract_long(int64x2_t a, int32x2_t b, int32_t c) {
return vmlsl_n_s32(a, b, c); }
1385[[gnu::always_inline]] nce poly8x16_t bitwise_not(poly8x16_t a) {
return vmvnq_p8(a); }
1386[[gnu::always_inline]] nce int64x1_t bitwise_and(int64x1_t a, int64x1_t b) {
return vand_s64(a, b); }
1387[[gnu::always_inline]] nce int64x2_t bitwise_and(int64x2_t a, int64x2_t b) {
return vandq_s64(a, b); }
1388[[gnu::always_inline]] nce int64x1_t bitwise_or(int64x1_t a, int64x1_t b) {
return vorr_s64(a, b); }
1389[[gnu::always_inline]] nce int64x2_t bitwise_or(int64x2_t a, int64x2_t b) {
return vorrq_s64(a, b); }
1390[[gnu::always_inline]] nce int64x1_t bitwise_xor(int64x1_t a, int64x1_t b) {
return veor_s64(a, b); }
1391[[gnu::always_inline]] nce int64x2_t bitwise_xor(int64x2_t a, int64x2_t b) {
return veorq_s64(a, b); }
1392[[gnu::always_inline]] nce int64x1_t bitwise_or_not(int64x1_t a, int64x1_t b) {
return vorn_s64(a, b); }
1393[[gnu::always_inline]] nce int64x2_t bitwise_or_not(int64x2_t a, int64x2_t b) {
return vornq_s64(a, b); }
1394[[gnu::always_inline]] nce poly8x16_t count_active_bits(poly8x16_t a) {
return vcntq_p8(a); }
1395[[gnu::always_inline]] nce int64x1_t bitwise_clear(int64x1_t a, int64x1_t b) {
return vbic_s64(a, b); }
1396[[gnu::always_inline]] nce int64x2_t bitwise_clear(int64x2_t a, int64x2_t b) {
return vbicq_s64(a, b); }
1397template <> [[gnu::always_inline]] nce int8x8_t create(uint64_t a) {
return vcreate_s8(a); }
1398template <> [[gnu::always_inline]] nce int16x4_t create(uint64_t a) {
return vcreate_s16(a); }
1399template <> [[gnu::always_inline]] nce int32x2_t create(uint64_t a) {
return vcreate_s32(a); }
1400template <> [[gnu::always_inline]] nce int64x1_t create(uint64_t a) {
return vcreate_s64(a); }
1401template <> [[gnu::always_inline]] nce uint8x8_t create(uint64_t a) {
return vcreate_u8(a); }
1402template <> [[gnu::always_inline]] nce uint16x4_t create(uint64_t a) {
return vcreate_u16(a); }
1403template <> [[gnu::always_inline]] nce uint32x2_t create(uint64_t a) {
return vcreate_u32(a); }
1404template <> [[gnu::always_inline]] nce uint64x1_t create(uint64_t a) {
return vcreate_u64(a); }
1405template <> [[gnu::always_inline]] nce float32x2_t create(uint64_t a) {
return vcreate_f32(a); }
1406template <> [[gnu::always_inline]] nce poly8x8_t create(uint64_t a) {
return vcreate_p8(a); }
1407template <> [[gnu::always_inline]] nce poly16x4_t create(uint64_t a) {
return vcreate_p16(a); }
1408template <> [[gnu::always_inline]] nce int8x8_t duplicate(int8_t value) {
return vdup_n_s8(value); }
1409template <> [[gnu::always_inline]] nce int8x16_t duplicate(int8_t value) {
return vdupq_n_s8(value); }
1410template <> [[gnu::always_inline]] nce int16x4_t duplicate(int16_t value) {
return vdup_n_s16(value); }
1411template <> [[gnu::always_inline]] nce int16x8_t duplicate(int16_t value) {
return vdupq_n_s16(value); }
1412template <> [[gnu::always_inline]] nce int32x2_t duplicate(int32_t value) {
return vdup_n_s32(value); }
1413template <> [[gnu::always_inline]] nce int32x4_t duplicate(int32_t value) {
return vdupq_n_s32(value); }
1414template <> [[gnu::always_inline]] nce int64x1_t duplicate(int64_t value) {
return vdup_n_s64(value); }
1415template <> [[gnu::always_inline]] nce int64x2_t duplicate(int64_t value) {
return vdupq_n_s64(value); }
1416template <> [[gnu::always_inline]] nce uint8x8_t duplicate(uint8_t value) {
return vdup_n_u8(value); }
1417template <> [[gnu::always_inline]] nce uint8x16_t duplicate(uint8_t value) {
return vdupq_n_u8(value); }
1418template <> [[gnu::always_inline]] nce uint16x4_t duplicate(uint16_t value) {
return vdup_n_u16(value); }
1419template <> [[gnu::always_inline]] nce uint16x8_t duplicate(uint16_t value) {
return vdupq_n_u16(value); }
1420template <> [[gnu::always_inline]] nce uint32x2_t duplicate(uint32_t value) {
return vdup_n_u32(value); }
1421template <> [[gnu::always_inline]] nce uint32x4_t duplicate(uint32_t value) {
return vdupq_n_u32(value); }
1422template <> [[gnu::always_inline]] nce uint64x1_t duplicate(uint64_t value) {
return vdup_n_u64(value); }
1423template <> [[gnu::always_inline]] nce uint64x2_t duplicate(uint64_t value) {
return vdupq_n_u64(value); }
1424template <> [[gnu::always_inline]] nce float32x2_t duplicate(float32_t value) {
return vdup_n_f32(value); }
1425template <> [[gnu::always_inline]] nce float32x4_t duplicate(float32_t value) {
return vdupq_n_f32(value); }
1426template <> [[gnu::always_inline]] nce poly8x8_t duplicate(poly8_t value) {
return vdup_n_p8(value); }
1427template <> [[gnu::always_inline]] nce poly8x16_t duplicate(poly8_t value) {
return vdupq_n_p8(value); }
1428template <> [[gnu::always_inline]] nce poly16x4_t duplicate(poly16_t value) {
return vdup_n_p16(value); }
1429template <> [[gnu::always_inline]] nce poly16x8_t duplicate(poly16_t value) {
return vdupq_n_p16(value); }
1430template <
int lane>[[gnu::always_inline]] nce int64x1_t duplicate_lane(int64x1_t a) {
return vdup_lane_s64(a, lane); }
1431template <
int lane>[[gnu::always_inline]] nce int64x2_t duplicate_lane_quad(int64x1_t a) {
return vdupq_lane_s64(a, lane); }
1432[[gnu::always_inline]] nce int64x2_t combine(int64x1_t low, int64x1_t high) {
return vcombine_s64(low, high); }
1433[[gnu::always_inline]] nce int64x1_t get_high(int64x2_t a) {
return vget_high_s64(a); }
1434[[gnu::always_inline]] nce poly8x8_t get_high(poly8x16_t a) {
return vget_high_p8(a); }
1435[[gnu::always_inline]] nce poly16x4_t get_high(poly16x8_t a) {
return vget_high_p16(a); }
1436[[gnu::always_inline]] nce int64x1_t get_low(int64x2_t a) {
return vget_low_s64(a); }
1437[[gnu::always_inline]] nce poly8x8_t get_low(poly8x16_t a) {
return vget_low_p8(a); }
1438[[gnu::always_inline]] nce poly16x4_t get_low(poly16x8_t a) {
return vget_low_p16(a); }
1439template <
int lane>[[gnu::always_inline]] nce int64_t get_lane(int64x1_t v) {
return vget_lane_s64(v, lane); }
1440template <
int lane>[[gnu::always_inline]] nce poly8_t get_lane(poly8x16_t v) {
return vgetq_lane_p8(v, lane); }
1441template <
int lane>[[gnu::always_inline]] nce poly16_t get_lane(poly16x8_t v) {
return vgetq_lane_p16(v, lane); }
1442template <
int n>[[gnu::always_inline]] nce int64x1_t extract(int64x1_t a, int64x1_t b) {
return vext_s64(a, b, n); }
1443template <
int n>[[gnu::always_inline]] nce int64x2_t extract(int64x2_t a, int64x2_t b) {
return vextq_s64(a, b, n); }
1444template <
int n>[[gnu::always_inline]] nce poly8x16_t extract(poly8x16_t a, poly8x16_t b) {
return vextq_p8(a, b, n); }
1445template <
int n>[[gnu::always_inline]] nce poly16x8_t extract(poly16x8_t a, poly16x8_t b) {
return vextq_p16(a, b, n); }
1446[[gnu::always_inline]] nce poly8x16_t reverse_64bit(poly8x16_t a) {
return vrev64q_p8(a); }
1447[[gnu::always_inline]] nce poly16x8_t reverse_64bit(poly16x8_t a) {
return vrev64q_p16(a); }
1448[[gnu::always_inline]] nce poly8x16_t reverse_32bit(poly8x16_t a) {
return vrev32q_p8(a); }
1449[[gnu::always_inline]] nce poly16x8_t reverse_32bit(poly16x8_t a) {
return vrev32q_p16(a); }
1450[[gnu::always_inline]] nce poly8x16_t reverse_16bit(poly8x16_t a) {
return vrev16q_p8(a); }
1451[[gnu::always_inline]] nce poly8x16x2_t zip(poly8x16_t a, poly8x16_t b) {
return vzipq_p8(a, b); }
1452[[gnu::always_inline]] nce poly16x8x2_t zip(poly16x8_t a, poly16x8_t b) {
return vzipq_p16(a, b); }
1453[[gnu::always_inline]] nce poly8x16x2_t unzip(poly8x16_t a, poly8x16_t b) {
return vuzpq_p8(a, b); }
1454[[gnu::always_inline]] nce poly16x8x2_t unzip(poly16x8_t a, poly16x8_t b) {
return vuzpq_p16(a, b); }
1455[[gnu::always_inline]] nce poly8x16x2_t transpose(poly8x16_t a, poly8x16_t b) {
return vtrnq_p8(a, b); }
1456[[gnu::always_inline]] nce poly16x8x2_t transpose(poly16x8_t a, poly16x8_t b) {
return vtrnq_p16(a, b); }
1457template <
int lane>[[gnu::always_inline]] nce uint8x8_t set_lane(uint8_t a, uint8x8_t v) {
return vset_lane_u8(a, v, lane); }
1458template <
int lane>[[gnu::always_inline]] nce uint16x4_t set_lane(uint16_t a, uint16x4_t v) {
return vset_lane_u16(a, v, lane); }
1459template <
int lane>[[gnu::always_inline]] nce uint32x2_t set_lane(uint32_t a, uint32x2_t v) {
return vset_lane_u32(a, v, lane); }
1460template <
int lane>[[gnu::always_inline]] nce uint64x1_t set_lane(uint64_t a, uint64x1_t v) {
return vset_lane_u64(a, v, lane); }
1461template <
int lane>[[gnu::always_inline]] nce int8x8_t set_lane(int8_t a, int8x8_t v) {
return vset_lane_s8(a, v, lane); }
1462template <
int lane>[[gnu::always_inline]] nce int16x4_t set_lane(int16_t a, int16x4_t v) {
return vset_lane_s16(a, v, lane); }
1463template <
int lane>[[gnu::always_inline]] nce int32x2_t set_lane(int32_t a, int32x2_t v) {
return vset_lane_s32(a, v, lane); }
1464template <
int lane>[[gnu::always_inline]] nce int64x1_t set_lane(int64_t a, int64x1_t v) {
return vset_lane_s64(a, v, lane); }
1465template <
int lane>[[gnu::always_inline]] nce poly8x8_t set_lane(poly8_t a, poly8x8_t v) {
return vset_lane_p8(a, v, lane); }
1466template <
int lane>[[gnu::always_inline]] nce poly16x4_t set_lane(poly16_t a, poly16x4_t v) {
return vset_lane_p16(a, v, lane); }
1467template <
int lane>[[gnu::always_inline]] nce float32x2_t set_lane(float32_t a, float32x2_t v) {
return vset_lane_f32(a, v, lane); }
1468template <
int lane>[[gnu::always_inline]] nce poly8x16_t set_lane(poly8_t a, poly8x16_t v) {
return vsetq_lane_p8(a, v, lane); }
1469template <
int lane>[[gnu::always_inline]] nce poly16x8_t set_lane(poly16_t a, poly16x8_t v) {
return vsetq_lane_p16(a, v, lane); }
1470template <> [[gnu::always_inline]]
inline int8x8_t load1(int8_t
const *ptr) {
return vld1_s8(ptr); }
1471template <> [[gnu::always_inline]]
inline int8x16_t load1(int8_t
const *ptr) {
return vld1q_s8(ptr); }
1472template <> [[gnu::always_inline]]
inline int16x4_t load1(int16_t
const *ptr) {
return vld1_s16(ptr); }
1473template <> [[gnu::always_inline]]
inline int16x8_t load1(int16_t
const *ptr) {
return vld1q_s16(ptr); }
1474template <> [[gnu::always_inline]]
inline int32x2_t load1(int32_t
const *ptr) {
return vld1_s32(ptr); }
1475template <> [[gnu::always_inline]]
inline int32x4_t load1(int32_t
const *ptr) {
return vld1q_s32(ptr); }
1476template <> [[gnu::always_inline]]
inline int64x1_t load1(int64_t
const *ptr) {
return vld1_s64(ptr); }
1477template <> [[gnu::always_inline]]
inline int64x2_t load1(int64_t
const *ptr) {
return vld1q_s64(ptr); }
1478template <> [[gnu::always_inline]]
inline uint8x8_t load1(uint8_t
const *ptr) {
return vld1_u8(ptr); }
1479template <> [[gnu::always_inline]]
inline uint8x16_t load1(uint8_t
const *ptr) {
return vld1q_u8(ptr); }
1480template <> [[gnu::always_inline]]
inline uint16x4_t load1(uint16_t
const *ptr) {
return vld1_u16(ptr); }
1481template <> [[gnu::always_inline]]
inline uint16x8_t load1(uint16_t
const *ptr) {
return vld1q_u16(ptr); }
1482template <> [[gnu::always_inline]]
inline uint32x2_t load1(uint32_t
const *ptr) {
return vld1_u32(ptr); }
1483template <> [[gnu::always_inline]]
inline uint32x4_t load1(uint32_t
const *ptr) {
return vld1q_u32(ptr); }
1484template <> [[gnu::always_inline]]
inline uint64x1_t load1(uint64_t
const *ptr) {
return vld1_u64(ptr); }
1485template <> [[gnu::always_inline]]
inline uint64x2_t load1(uint64_t
const *ptr) {
return vld1q_u64(ptr); }
1486template <> [[gnu::always_inline]]
inline float32x2_t load1(float32_t
const *ptr) {
return vld1_f32(ptr); }
1487template <> [[gnu::always_inline]]
inline float32x4_t load1(float32_t
const *ptr) {
return vld1q_f32(ptr); }
1488template <> [[gnu::always_inline]]
inline poly8x8_t load1(poly8_t
const *ptr) {
return vld1_p8(ptr); }
1489template <> [[gnu::always_inline]]
inline poly8x16_t load1(poly8_t
const *ptr) {
return vld1q_p8(ptr); }
1490template <> [[gnu::always_inline]]
inline poly16x4_t load1(poly16_t
const *ptr) {
return vld1_p16(ptr); }
1491template <> [[gnu::always_inline]]
inline poly16x8_t load1(poly16_t
const *ptr) {
return vld1q_p16(ptr); }
1492template <
int lane>[[gnu::always_inline]] nce int8x8_t load1_lane(int8_t
const *ptr, int8x8_t src) {
return vld1_lane_s8(ptr, src, lane); }
1493template <
int lane>[[gnu::always_inline]] nce int8x16_t load1_lane_quad(int8_t
const *ptr, int8x16_t src) {
return vld1q_lane_s8(ptr, src, lane); }
1494template <
int lane>[[gnu::always_inline]] nce int16x4_t load1_lane(int16_t
const *ptr, int16x4_t src) {
return vld1_lane_s16(ptr, src, lane); }
1495template <
int lane>[[gnu::always_inline]] nce int16x8_t load1_lane_quad(int16_t
const *ptr, int16x8_t src) {
return vld1q_lane_s16(ptr, src, lane); }
1496template <
int lane>[[gnu::always_inline]] nce int32x2_t load1_lane(int32_t
const *ptr, int32x2_t src) {
return vld1_lane_s32(ptr, src, lane); }
1497template <
int lane>[[gnu::always_inline]] nce int32x4_t load1_lane_quad(int32_t
const *ptr, int32x4_t src) {
return vld1q_lane_s32(ptr, src, lane); }
1498template <
int lane>[[gnu::always_inline]] nce int64x1_t load1_lane(int64_t
const *ptr, int64x1_t src) {
return vld1_lane_s64(ptr, src, lane); }
1499template <
int lane>[[gnu::always_inline]] nce int64x2_t load1_lane_quad(int64_t
const *ptr, int64x2_t src) {
return vld1q_lane_s64(ptr, src, lane); }
1500template <
int lane>[[gnu::always_inline]] nce uint8x8_t load1_lane(uint8_t
const *ptr, uint8x8_t src) {
return vld1_lane_u8(ptr, src, lane); }
1501template <
int lane>[[gnu::always_inline]] nce uint8x16_t load1_lane_quad(uint8_t
const *ptr, uint8x16_t src) {
return vld1q_lane_u8(ptr, src, lane); }
1502template <
int lane>[[gnu::always_inline]] nce uint16x4_t load1_lane(uint16_t
const *ptr, uint16x4_t src) {
return vld1_lane_u16(ptr, src, lane); }
1503template <
int lane>[[gnu::always_inline]] nce uint16x8_t load1_lane_quad(uint16_t
const *ptr, uint16x8_t src) {
return vld1q_lane_u16(ptr, src, lane); }
1504template <
int lane>[[gnu::always_inline]] nce uint32x2_t load1_lane(uint32_t
const *ptr, uint32x2_t src) {
return vld1_lane_u32(ptr, src, lane); }
1505template <
int lane>[[gnu::always_inline]] nce uint32x4_t load1_lane_quad(uint32_t
const *ptr, uint32x4_t src) {
return vld1q_lane_u32(ptr, src, lane); }
1506template <
int lane>[[gnu::always_inline]] nce uint64x1_t load1_lane(uint64_t
const *ptr, uint64x1_t src) {
return vld1_lane_u64(ptr, src, lane); }
1507template <
int lane>[[gnu::always_inline]] nce uint64x2_t load1_lane_quad(uint64_t
const *ptr, uint64x2_t src) {
return vld1q_lane_u64(ptr, src, lane); }
1508template <
int lane>[[gnu::always_inline]] nce float32x2_t load1_lane(float32_t
const *ptr, float32x2_t src) {
return vld1_lane_f32(ptr, src, lane); }
1509template <
int lane>[[gnu::always_inline]] nce float32x4_t load1_lane_quad(float32_t
const *ptr, float32x4_t src) {
return vld1q_lane_f32(ptr, src, lane); }
1510template <
int lane>[[gnu::always_inline]] nce poly8x8_t load1_lane(poly8_t
const *ptr, poly8x8_t src) {
return vld1_lane_p8(ptr, src, lane); }
1511template <
int lane>[[gnu::always_inline]] nce poly8x16_t load1_lane_quad(poly8_t
const *ptr, poly8x16_t src) {
return vld1q_lane_p8(ptr, src, lane); }
1512template <
int lane>[[gnu::always_inline]] nce poly16x4_t load1_lane(poly16_t
const *ptr, poly16x4_t src) {
return vld1_lane_p16(ptr, src, lane); }
1513template <
int lane>[[gnu::always_inline]] nce poly16x8_t load1_lane_quad(poly16_t
const *ptr, poly16x8_t src) {
return vld1q_lane_p16(ptr, src, lane); }
1514template <> [[gnu::always_inline]]
inline int8x8_t load1_duplicate(int8_t
const *ptr) {
return vld1_dup_s8(ptr); }
1515template <> [[gnu::always_inline]]
inline int8x16_t load1_duplicate(int8_t
const *ptr) {
return vld1q_dup_s8(ptr); }
1516template <> [[gnu::always_inline]]
inline int16x4_t load1_duplicate(int16_t
const *ptr) {
return vld1_dup_s16(ptr); }
1517template <> [[gnu::always_inline]]
inline int16x8_t load1_duplicate(int16_t
const *ptr) {
return vld1q_dup_s16(ptr); }
1518template <> [[gnu::always_inline]]
inline int32x2_t load1_duplicate(int32_t
const *ptr) {
return vld1_dup_s32(ptr); }
1519template <> [[gnu::always_inline]]
inline int32x4_t load1_duplicate(int32_t
const *ptr) {
return vld1q_dup_s32(ptr); }
1520template <> [[gnu::always_inline]]
inline int64x1_t load1_duplicate(int64_t
const *ptr) {
return vld1_dup_s64(ptr); }
1521template <> [[gnu::always_inline]]
inline int64x2_t load1_duplicate(int64_t
const *ptr) {
return vld1q_dup_s64(ptr); }
1522template <> [[gnu::always_inline]]
inline uint8x8_t load1_duplicate(uint8_t
const *ptr) {
return vld1_dup_u8(ptr); }
1523template <> [[gnu::always_inline]]
inline uint8x16_t load1_duplicate(uint8_t
const *ptr) {
return vld1q_dup_u8(ptr); }
1524template <> [[gnu::always_inline]]
inline uint16x4_t load1_duplicate(uint16_t
const *ptr) {
return vld1_dup_u16(ptr); }
1525template <> [[gnu::always_inline]]
inline uint16x8_t load1_duplicate(uint16_t
const *ptr) {
return vld1q_dup_u16(ptr); }
1526template <> [[gnu::always_inline]]
inline uint32x2_t load1_duplicate(uint32_t
const *ptr) {
return vld1_dup_u32(ptr); }
1527template <> [[gnu::always_inline]]
inline uint32x4_t load1_duplicate(uint32_t
const *ptr) {
return vld1q_dup_u32(ptr); }
1528template <> [[gnu::always_inline]]
inline uint64x1_t load1_duplicate(uint64_t
const *ptr) {
return vld1_dup_u64(ptr); }
1529template <> [[gnu::always_inline]]
inline uint64x2_t load1_duplicate(uint64_t
const *ptr) {
return vld1q_dup_u64(ptr); }
1530template <> [[gnu::always_inline]]
inline float32x2_t load1_duplicate(float32_t
const *ptr) {
return vld1_dup_f32(ptr); }
1531template <> [[gnu::always_inline]]
inline float32x4_t load1_duplicate(float32_t
const *ptr) {
return vld1q_dup_f32(ptr); }
1532template <> [[gnu::always_inline]]
inline poly8x8_t load1_duplicate(poly8_t
const *ptr) {
return vld1_dup_p8(ptr); }
1533template <> [[gnu::always_inline]]
inline poly8x16_t load1_duplicate(poly8_t
const *ptr) {
return vld1q_dup_p8(ptr); }
1534template <> [[gnu::always_inline]]
inline poly16x4_t load1_duplicate(poly16_t
const *ptr) {
return vld1_dup_p16(ptr); }
1535template <> [[gnu::always_inline]]
inline poly16x8_t load1_duplicate(poly16_t
const *ptr) {
return vld1q_dup_p16(ptr); }
1536template <> [[gnu::always_inline]]
inline int8x8x2_t load2(int8_t
const *ptr) {
return vld2_s8(ptr); }
1537template <> [[gnu::always_inline]]
inline int8x16x2_t load2(int8_t
const *ptr) {
return vld2q_s8(ptr); }
1538template <> [[gnu::always_inline]]
inline int16x4x2_t load2(int16_t
const *ptr) {
return vld2_s16(ptr); }
1539template <> [[gnu::always_inline]]
inline int16x8x2_t load2(int16_t
const *ptr) {
return vld2q_s16(ptr); }
1540template <> [[gnu::always_inline]]
inline int32x2x2_t load2(int32_t
const *ptr) {
return vld2_s32(ptr); }
1541template <> [[gnu::always_inline]]
inline int32x4x2_t load2(int32_t
const *ptr) {
return vld2q_s32(ptr); }
1542template <> [[gnu::always_inline]]
inline uint8x8x2_t load2(uint8_t
const *ptr) {
return vld2_u8(ptr); }
1543template <> [[gnu::always_inline]]
inline uint8x16x2_t load2(uint8_t
const *ptr) {
return vld2q_u8(ptr); }
1544template <> [[gnu::always_inline]]
inline uint16x4x2_t load2(uint16_t
const *ptr) {
return vld2_u16(ptr); }
1545template <> [[gnu::always_inline]]
inline uint16x8x2_t load2(uint16_t
const *ptr) {
return vld2q_u16(ptr); }
1546template <> [[gnu::always_inline]]
inline uint32x2x2_t load2(uint32_t
const *ptr) {
return vld2_u32(ptr); }
1547template <> [[gnu::always_inline]]
inline uint32x4x2_t load2(uint32_t
const *ptr) {
return vld2q_u32(ptr); }
1548template <> [[gnu::always_inline]]
inline float32x2x2_t load2(float32_t
const *ptr) {
return vld2_f32(ptr); }
1549template <> [[gnu::always_inline]]
inline float32x4x2_t load2(float32_t
const *ptr) {
return vld2q_f32(ptr); }
1550template <> [[gnu::always_inline]]
inline poly8x8x2_t load2(poly8_t
const *ptr) {
return vld2_p8(ptr); }
1551template <> [[gnu::always_inline]]
inline poly8x16x2_t load2(poly8_t
const *ptr) {
return vld2q_p8(ptr); }
1552template <> [[gnu::always_inline]]
inline poly16x4x2_t load2(poly16_t
const *ptr) {
return vld2_p16(ptr); }
1553template <> [[gnu::always_inline]]
inline poly16x8x2_t load2(poly16_t
const *ptr) {
return vld2q_p16(ptr); }
1554template <> [[gnu::always_inline]]
inline int64x1x2_t load2(int64_t
const *ptr) {
return vld2_s64(ptr); }
1555template <> [[gnu::always_inline]]
inline uint64x1x2_t load2(uint64_t
const *ptr) {
return vld2_u64(ptr); }
1556template <> [[gnu::always_inline]]
inline int8x8x3_t load3(int8_t
const *ptr) {
return vld3_s8(ptr); }
1557template <> [[gnu::always_inline]]
inline int8x16x3_t load3(int8_t
const *ptr) {
return vld3q_s8(ptr); }
1558template <> [[gnu::always_inline]]
inline int16x4x3_t load3(int16_t
const *ptr) {
return vld3_s16(ptr); }
1559template <> [[gnu::always_inline]]
inline int16x8x3_t load3(int16_t
const *ptr) {
return vld3q_s16(ptr); }
1560template <> [[gnu::always_inline]]
inline int32x2x3_t load3(int32_t
const *ptr) {
return vld3_s32(ptr); }
1561template <> [[gnu::always_inline]]
inline int32x4x3_t load3(int32_t
const *ptr) {
return vld3q_s32(ptr); }
1562template <> [[gnu::always_inline]]
inline uint8x8x3_t load3(uint8_t
const *ptr) {
return vld3_u8(ptr); }
1563template <> [[gnu::always_inline]]
inline uint8x16x3_t load3(uint8_t
const *ptr) {
return vld3q_u8(ptr); }
1564template <> [[gnu::always_inline]]
inline uint16x4x3_t load3(uint16_t
const *ptr) {
return vld3_u16(ptr); }
1565template <> [[gnu::always_inline]]
inline uint16x8x3_t load3(uint16_t
const *ptr) {
return vld3q_u16(ptr); }
1566template <> [[gnu::always_inline]]
inline uint32x2x3_t load3(uint32_t
const *ptr) {
return vld3_u32(ptr); }
1567template <> [[gnu::always_inline]]
inline uint32x4x3_t load3(uint32_t
const *ptr) {
return vld3q_u32(ptr); }
1568template <> [[gnu::always_inline]]
inline float32x2x3_t load3(float32_t
const *ptr) {
return vld3_f32(ptr); }
1569template <> [[gnu::always_inline]]
inline float32x4x3_t load3(float32_t
const *ptr) {
return vld3q_f32(ptr); }
1570template <> [[gnu::always_inline]]
inline poly8x8x3_t load3(poly8_t
const *ptr) {
return vld3_p8(ptr); }
1571template <> [[gnu::always_inline]]
inline poly8x16x3_t load3(poly8_t
const *ptr) {
return vld3q_p8(ptr); }
1572template <> [[gnu::always_inline]]
inline poly16x4x3_t load3(poly16_t
const *ptr) {
return vld3_p16(ptr); }
1573template <> [[gnu::always_inline]]
inline poly16x8x3_t load3(poly16_t
const *ptr) {
return vld3q_p16(ptr); }
1574template <> [[gnu::always_inline]]
inline int64x1x3_t load3(int64_t
const *ptr) {
return vld3_s64(ptr); }
1575template <> [[gnu::always_inline]]
inline uint64x1x3_t load3(uint64_t
const *ptr) {
return vld3_u64(ptr); }
1576template <> [[gnu::always_inline]]
inline int8x8x4_t load4(int8_t
const *ptr) {
return vld4_s8(ptr); }
1577template <> [[gnu::always_inline]]
inline int8x16x4_t load4(int8_t
const *ptr) {
return vld4q_s8(ptr); }
1578template <> [[gnu::always_inline]]
inline int16x4x4_t load4(int16_t
const *ptr) {
return vld4_s16(ptr); }
1579template <> [[gnu::always_inline]]
inline int16x8x4_t load4(int16_t
const *ptr) {
return vld4q_s16(ptr); }
1580template <> [[gnu::always_inline]]
inline int32x2x4_t load4(int32_t
const *ptr) {
return vld4_s32(ptr); }
1581template <> [[gnu::always_inline]]
inline int32x4x4_t load4(int32_t
const *ptr) {
return vld4q_s32(ptr); }
1582template <> [[gnu::always_inline]]
inline uint8x8x4_t load4(uint8_t
const *ptr) {
return vld4_u8(ptr); }
1583template <> [[gnu::always_inline]]
inline uint8x16x4_t load4(uint8_t
const *ptr) {
return vld4q_u8(ptr); }
1584template <> [[gnu::always_inline]]
inline uint16x4x4_t load4(uint16_t
const *ptr) {
return vld4_u16(ptr); }
1585template <> [[gnu::always_inline]]
inline uint16x8x4_t load4(uint16_t
const *ptr) {
return vld4q_u16(ptr); }
1586template <> [[gnu::always_inline]]
inline uint32x2x4_t load4(uint32_t
const *ptr) {
return vld4_u32(ptr); }
1587template <> [[gnu::always_inline]]
inline uint32x4x4_t load4(uint32_t
const *ptr) {
return vld4q_u32(ptr); }
1588template <> [[gnu::always_inline]]
inline float32x2x4_t load4(float32_t
const *ptr) {
return vld4_f32(ptr); }
1589template <> [[gnu::always_inline]]
inline float32x4x4_t load4(float32_t
const *ptr) {
return vld4q_f32(ptr); }
1590template <> [[gnu::always_inline]]
inline poly8x8x4_t load4(poly8_t
const *ptr) {
return vld4_p8(ptr); }
1591template <> [[gnu::always_inline]]
inline poly8x16x4_t load4(poly8_t
const *ptr) {
return vld4q_p8(ptr); }
1592template <> [[gnu::always_inline]]
inline poly16x4x4_t load4(poly16_t
const *ptr) {
return vld4_p16(ptr); }
1593template <> [[gnu::always_inline]]
inline poly16x8x4_t load4(poly16_t
const *ptr) {
return vld4q_p16(ptr); }
1594template <> [[gnu::always_inline]]
inline int64x1x4_t load4(int64_t
const *ptr) {
return vld4_s64(ptr); }
1595template <> [[gnu::always_inline]]
inline uint64x1x4_t load4(uint64_t
const *ptr) {
return vld4_u64(ptr); }
1596template <> [[gnu::always_inline]]
inline int8x8x2_t load2_duplicate(int8_t
const *ptr) {
return vld2_dup_s8(ptr); }
1597template <> [[gnu::always_inline]]
inline int16x4x2_t load2_duplicate(int16_t
const *ptr) {
return vld2_dup_s16(ptr); }
1598template <> [[gnu::always_inline]]
inline int32x2x2_t load2_duplicate(int32_t
const *ptr) {
return vld2_dup_s32(ptr); }
1599template <> [[gnu::always_inline]]
inline uint8x8x2_t load2_duplicate(uint8_t
const *ptr) {
return vld2_dup_u8(ptr); }
1600template <> [[gnu::always_inline]]
inline uint16x4x2_t load2_duplicate(uint16_t
const *ptr) {
return vld2_dup_u16(ptr); }
1601template <> [[gnu::always_inline]]
inline uint32x2x2_t load2_duplicate(uint32_t
const *ptr) {
return vld2_dup_u32(ptr); }
1602template <> [[gnu::always_inline]]
inline float32x2x2_t load2_duplicate(float32_t
const *ptr) {
return vld2_dup_f32(ptr); }
1603template <> [[gnu::always_inline]]
inline poly8x8x2_t load2_duplicate(poly8_t
const *ptr) {
return vld2_dup_p8(ptr); }
1604template <> [[gnu::always_inline]]
inline poly16x4x2_t load2_duplicate(poly16_t
const *ptr) {
return vld2_dup_p16(ptr); }
1605template <> [[gnu::always_inline]]
inline int64x1x2_t load2_duplicate(int64_t
const *ptr) {
return vld2_dup_s64(ptr); }
1606template <> [[gnu::always_inline]]
inline uint64x1x2_t load2_duplicate(uint64_t
const *ptr) {
return vld2_dup_u64(ptr); }
1607template <> [[gnu::always_inline]]
inline int8x8x3_t load3_duplicate(int8_t
const *ptr) {
return vld3_dup_s8(ptr); }
1608template <> [[gnu::always_inline]]
inline int16x4x3_t load3_duplicate(int16_t
const *ptr) {
return vld3_dup_s16(ptr); }
1609template <> [[gnu::always_inline]]
inline int32x2x3_t load3_duplicate(int32_t
const *ptr) {
return vld3_dup_s32(ptr); }
1610template <> [[gnu::always_inline]]
inline uint8x8x3_t load3_duplicate(uint8_t
const *ptr) {
return vld3_dup_u8(ptr); }
1611template <> [[gnu::always_inline]]
inline uint16x4x3_t load3_duplicate(uint16_t
const *ptr) {
return vld3_dup_u16(ptr); }
1612template <> [[gnu::always_inline]]
inline uint32x2x3_t load3_duplicate(uint32_t
const *ptr) {
return vld3_dup_u32(ptr); }
1613template <> [[gnu::always_inline]]
inline float32x2x3_t load3_duplicate(float32_t
const *ptr) {
return vld3_dup_f32(ptr); }
1614template <> [[gnu::always_inline]]
inline poly8x8x3_t load3_duplicate(poly8_t
const *ptr) {
return vld3_dup_p8(ptr); }
1615template <> [[gnu::always_inline]]
inline poly16x4x3_t load3_duplicate(poly16_t
const *ptr) {
return vld3_dup_p16(ptr); }
1616template <> [[gnu::always_inline]]
inline int64x1x3_t load3_duplicate(int64_t
const *ptr) {
return vld3_dup_s64(ptr); }
1617template <> [[gnu::always_inline]]
inline uint64x1x3_t load3_duplicate(uint64_t
const *ptr) {
return vld3_dup_u64(ptr); }
1618template <> [[gnu::always_inline]]
inline int8x8x4_t load4_duplicate(int8_t
const *ptr) {
return vld4_dup_s8(ptr); }
1619template <> [[gnu::always_inline]]
inline int16x4x4_t load4_duplicate(int16_t
const *ptr) {
return vld4_dup_s16(ptr); }
1620template <> [[gnu::always_inline]]
inline int32x2x4_t load4_duplicate(int32_t
const *ptr) {
return vld4_dup_s32(ptr); }
1621template <> [[gnu::always_inline]]
inline uint8x8x4_t load4_duplicate(uint8_t
const *ptr) {
return vld4_dup_u8(ptr); }
1622template <> [[gnu::always_inline]]
inline uint16x4x4_t load4_duplicate(uint16_t
const *ptr) {
return vld4_dup_u16(ptr); }
1623template <> [[gnu::always_inline]]
inline uint32x2x4_t load4_duplicate(uint32_t
const *ptr) {
return vld4_dup_u32(ptr); }
1624template <> [[gnu::always_inline]]
inline float32x2x4_t load4_duplicate(float32_t
const *ptr) {
return vld4_dup_f32(ptr); }
1625template <> [[gnu::always_inline]]
inline poly8x8x4_t load4_duplicate(poly8_t
const *ptr) {
return vld4_dup_p8(ptr); }
1626template <> [[gnu::always_inline]]
inline poly16x4x4_t load4_duplicate(poly16_t
const *ptr) {
return vld4_dup_p16(ptr); }
1627#ifdef ARGON_HAS_QUADWORD_STRUCTURE_LOADS
1628template <> [[gnu::always_inline]]
inline int8x16x2_t load2_duplicate(int8_t
const *ptr) {
return vld2q_dup_s8(ptr); }
1629template <> [[gnu::always_inline]]
inline int16x8x2_t load2_duplicate(int16_t
const *ptr) {
return vld2q_dup_s16(ptr); }
1630template <> [[gnu::always_inline]]
inline int32x4x2_t load2_duplicate(int32_t
const *ptr) {
return vld2q_dup_s32(ptr); }
1631template <> [[gnu::always_inline]]
inline uint8x16x2_t load2_duplicate(uint8_t
const *ptr) {
return vld2q_dup_u8(ptr); }
1632template <> [[gnu::always_inline]]
inline uint16x8x2_t load2_duplicate(uint16_t
const *ptr) {
return vld2q_dup_u16(ptr); }
1633template <> [[gnu::always_inline]]
inline uint32x4x2_t load2_duplicate(uint32_t
const *ptr) {
return vld2q_dup_u32(ptr); }
1634template <> [[gnu::always_inline]]
inline float32x4x2_t load2_duplicate(float32_t
const *ptr) {
return vld2q_dup_f32(ptr); }
1635template <> [[gnu::always_inline]]
inline poly8x16x2_t load2_duplicate(poly8_t
const *ptr) {
return vld2q_dup_p8(ptr); }
1636template <> [[gnu::always_inline]]
inline poly16x8x2_t load2_duplicate(poly16_t
const *ptr) {
return vld2q_dup_p16(ptr); }
1637template <> [[gnu::always_inline]]
inline int8x16x3_t load3_duplicate(int8_t
const *ptr) {
return vld3q_dup_s8(ptr); }
1638template <> [[gnu::always_inline]]
inline int16x8x3_t load3_duplicate(int16_t
const *ptr) {
return vld3q_dup_s16(ptr); }
1639template <> [[gnu::always_inline]]
inline int32x4x3_t load3_duplicate(int32_t
const *ptr) {
return vld3q_dup_s32(ptr); }
1640template <> [[gnu::always_inline]]
inline uint8x16x3_t load3_duplicate(uint8_t
const *ptr) {
return vld3q_dup_u8(ptr); }
1641template <> [[gnu::always_inline]]
inline uint16x8x3_t load3_duplicate(uint16_t
const *ptr) {
return vld3q_dup_u16(ptr); }
1642template <> [[gnu::always_inline]]
inline uint32x4x3_t load3_duplicate(uint32_t
const *ptr) {
return vld3q_dup_u32(ptr); }
1643template <> [[gnu::always_inline]]
inline float32x4x3_t load3_duplicate(float32_t
const *ptr) {
return vld3q_dup_f32(ptr); }
1644template <> [[gnu::always_inline]]
inline poly8x16x3_t load3_duplicate(poly8_t
const *ptr) {
return vld3q_dup_p8(ptr); }
1645template <> [[gnu::always_inline]]
inline poly16x8x3_t load3_duplicate(poly16_t
const *ptr) {
return vld3q_dup_p16(ptr); }
1646template <> [[gnu::always_inline]]
inline int8x16x4_t load4_duplicate(int8_t
const *ptr) {
return vld4q_dup_s8(ptr); }
1647template <> [[gnu::always_inline]]
inline int16x8x4_t load4_duplicate(int16_t
const *ptr) {
return vld4q_dup_s16(ptr); }
1648template <> [[gnu::always_inline]]
inline int32x4x4_t load4_duplicate(int32_t
const *ptr) {
return vld4q_dup_s32(ptr); }
1649template <> [[gnu::always_inline]]
inline uint8x16x4_t load4_duplicate(uint8_t
const *ptr) {
return vld4q_dup_u8(ptr); }
1650template <> [[gnu::always_inline]]
inline uint16x8x4_t load4_duplicate(uint16_t
const *ptr) {
return vld4q_dup_u16(ptr); }
1651template <> [[gnu::always_inline]]
inline uint32x4x4_t load4_duplicate(uint32_t
const *ptr) {
return vld4q_dup_u32(ptr); }
1652template <> [[gnu::always_inline]]
inline float32x4x4_t load4_duplicate(float32_t
const *ptr) {
return vld4q_dup_f32(ptr); }
1653template <> [[gnu::always_inline]]
inline poly8x16x4_t load4_duplicate(poly8_t
const *ptr) {
return vld4q_dup_p8(ptr); }
1654template <> [[gnu::always_inline]]
inline poly16x8x4_t load4_duplicate(poly16_t
const *ptr) {
return vld4q_dup_p16(ptr); }
1656[[gnu::always_inline]]
inline int64x1x4_t load4_duplicate(int64_t
const *ptr) {
return vld4_dup_s64(ptr); }
1657[[gnu::always_inline]]
inline uint64x1x4_t load4_duplicate(uint64_t
const *ptr) {
return vld4_dup_u64(ptr); }
1658template <
int lane>[[gnu::always_inline]] nce int16x4x2_t load2_lane(int16_t
const *ptr, int16x4x2_t src) {
return vld2_lane_s16(ptr, src, lane); }
1659template <
int lane>[[gnu::always_inline]] nce int16x8x2_t load2_lane_quad(int16_t
const *ptr, int16x8x2_t src) {
return vld2q_lane_s16(ptr, src, lane); }
1660template <
int lane>[[gnu::always_inline]] nce int32x2x2_t load2_lane(int32_t
const *ptr, int32x2x2_t src) {
return vld2_lane_s32(ptr, src, lane); }
1661template <
int lane>[[gnu::always_inline]] nce int32x4x2_t load2_lane_quad(int32_t
const *ptr, int32x4x2_t src) {
return vld2q_lane_s32(ptr, src, lane); }
1662template <
int lane>[[gnu::always_inline]] nce uint16x4x2_t load2_lane(uint16_t
const *ptr, uint16x4x2_t src) {
return vld2_lane_u16(ptr, src, lane); }
1663template <
int lane>[[gnu::always_inline]] nce uint16x8x2_t load2_lane_quad(uint16_t
const *ptr, uint16x8x2_t src) {
return vld2q_lane_u16(ptr, src, lane); }
1664template <
int lane>[[gnu::always_inline]] nce uint32x2x2_t load2_lane(uint32_t
const *ptr, uint32x2x2_t src) {
return vld2_lane_u32(ptr, src, lane); }
1665template <
int lane>[[gnu::always_inline]] nce uint32x4x2_t load2_lane_quad(uint32_t
const *ptr, uint32x4x2_t src) {
return vld2q_lane_u32(ptr, src, lane); }
1666template <
int lane>[[gnu::always_inline]] nce float32x2x2_t load2_lane(float32_t
const *ptr, float32x2x2_t src) {
return vld2_lane_f32(ptr, src, lane); }
1667template <
int lane>[[gnu::always_inline]] nce float32x4x2_t load2_lane_quad(float32_t
const *ptr, float32x4x2_t src) {
return vld2q_lane_f32(ptr, src, lane); }
1668template <
int lane>[[gnu::always_inline]] nce poly16x4x2_t load2_lane(poly16_t
const *ptr, poly16x4x2_t src) {
return vld2_lane_p16(ptr, src, lane); }
1669template <
int lane>[[gnu::always_inline]] nce poly16x8x2_t load2_lane_quad(poly16_t
const *ptr, poly16x8x2_t src) {
return vld2q_lane_p16(ptr, src, lane); }
1670template <
int lane>[[gnu::always_inline]] nce int8x8x2_t load2_lane(int8_t
const *ptr, int8x8x2_t src) {
return vld2_lane_s8(ptr, src, lane); }
1671template <
int lane>[[gnu::always_inline]] nce uint8x8x2_t load2_lane(uint8_t
const *ptr, uint8x8x2_t src) {
return vld2_lane_u8(ptr, src, lane); }
1672template <
int lane>[[gnu::always_inline]] nce poly8x8x2_t load2_lane(poly8_t
const *ptr, poly8x8x2_t src) {
return vld2_lane_p8(ptr, src, lane); }
1673template <
int lane>[[gnu::always_inline]] nce int16x4x3_t load3_lane(int16_t
const *ptr, int16x4x3_t src) {
return vld3_lane_s16(ptr, src, lane); }
1674template <
int lane>[[gnu::always_inline]] nce int16x8x3_t load3_lane_quad(int16_t
const *ptr, int16x8x3_t src) {
return vld3q_lane_s16(ptr, src, lane); }
1675template <
int lane>[[gnu::always_inline]] nce int32x2x3_t load3_lane(int32_t
const *ptr, int32x2x3_t src) {
return vld3_lane_s32(ptr, src, lane); }
1676template <
int lane>[[gnu::always_inline]] nce int32x4x3_t load3_lane_quad(int32_t
const *ptr, int32x4x3_t src) {
return vld3q_lane_s32(ptr, src, lane); }
1677template <
int lane>[[gnu::always_inline]] nce uint16x4x3_t load3_lane(uint16_t
const *ptr, uint16x4x3_t src) {
return vld3_lane_u16(ptr, src, lane); }
1678template <
int lane>[[gnu::always_inline]] nce uint16x8x3_t load3_lane_quad(uint16_t
const *ptr, uint16x8x3_t src) {
return vld3q_lane_u16(ptr, src, lane); }
1679template <
int lane>[[gnu::always_inline]] nce uint32x2x3_t load3_lane(uint32_t
const *ptr, uint32x2x3_t src) {
return vld3_lane_u32(ptr, src, lane); }
1680template <
int lane>[[gnu::always_inline]] nce uint32x4x3_t load3_lane_quad(uint32_t
const *ptr, uint32x4x3_t src) {
return vld3q_lane_u32(ptr, src, lane); }
1681template <
int lane>[[gnu::always_inline]] nce float32x2x3_t load3_lane(float32_t
const *ptr, float32x2x3_t src) {
return vld3_lane_f32(ptr, src, lane); }
1682template <
int lane>[[gnu::always_inline]] nce float32x4x3_t load3_lane_quad(float32_t
const *ptr, float32x4x3_t src) {
return vld3q_lane_f32(ptr, src, lane); }
1683template <
int lane>[[gnu::always_inline]] nce poly16x4x3_t load3_lane(poly16_t
const *ptr, poly16x4x3_t src) {
return vld3_lane_p16(ptr, src, lane); }
1684template <
int lane>[[gnu::always_inline]] nce poly16x8x3_t load3_lane_quad(poly16_t
const *ptr, poly16x8x3_t src) {
return vld3q_lane_p16(ptr, src, lane); }
1685template <
int lane>[[gnu::always_inline]] nce int8x8x3_t load3_lane(int8_t
const *ptr, int8x8x3_t src) {
return vld3_lane_s8(ptr, src, lane); }
1686template <
int lane>[[gnu::always_inline]] nce uint8x8x3_t load3_lane(uint8_t
const *ptr, uint8x8x3_t src) {
return vld3_lane_u8(ptr, src, lane); }
1687template <
int lane>[[gnu::always_inline]] nce poly8x8x3_t load3_lane(poly8_t
const *ptr, poly8x8x3_t src) {
return vld3_lane_p8(ptr, src, lane); }
1688template <
int lane>[[gnu::always_inline]] nce int16x4x4_t load4_lane(int16_t
const *ptr, int16x4x4_t src) {
return vld4_lane_s16(ptr, src, lane); }
1689template <
int lane>[[gnu::always_inline]] nce int16x8x4_t load4_lane_quad(int16_t
const *ptr, int16x8x4_t src) {
return vld4q_lane_s16(ptr, src, lane); }
1690template <
int lane>[[gnu::always_inline]] nce int32x2x4_t load4_lane(int32_t
const *ptr, int32x2x4_t src) {
return vld4_lane_s32(ptr, src, lane); }
1691template <
int lane>[[gnu::always_inline]] nce int32x4x4_t load4_lane_quad(int32_t
const *ptr, int32x4x4_t src) {
return vld4q_lane_s32(ptr, src, lane); }
1692template <
int lane>[[gnu::always_inline]] nce uint16x4x4_t load4_lane(uint16_t
const *ptr, uint16x4x4_t src) {
return vld4_lane_u16(ptr, src, lane); }
1693template <
int lane>[[gnu::always_inline]] nce uint16x8x4_t load4_lane_quad(uint16_t
const *ptr, uint16x8x4_t src) {
return vld4q_lane_u16(ptr, src, lane); }
1694template <
int lane>[[gnu::always_inline]] nce uint32x2x4_t load4_lane(uint32_t
const *ptr, uint32x2x4_t src) {
return vld4_lane_u32(ptr, src, lane); }
1695template <
int lane>[[gnu::always_inline]] nce uint32x4x4_t load4_lane_quad(uint32_t
const *ptr, uint32x4x4_t src) {
return vld4q_lane_u32(ptr, src, lane); }
1696template <
int lane>[[gnu::always_inline]] nce float32x2x4_t load4_lane(float32_t
const *ptr, float32x2x4_t src) {
return vld4_lane_f32(ptr, src, lane); }
1697template <
int lane>[[gnu::always_inline]] nce float32x4x4_t load4_lane_quad(float32_t
const *ptr, float32x4x4_t src) {
return vld4q_lane_f32(ptr, src, lane); }
1698template <
int lane>[[gnu::always_inline]] nce poly16x4x4_t load4_lane(poly16_t
const *ptr, poly16x4x4_t src) {
return vld4_lane_p16(ptr, src, lane); }
1699template <
int lane>[[gnu::always_inline]] nce poly16x8x4_t load4_lane_quad(poly16_t
const *ptr, poly16x8x4_t src) {
return vld4q_lane_p16(ptr, src, lane); }
1700template <
int lane>[[gnu::always_inline]] nce int8x8x4_t load4_lane(int8_t
const *ptr, int8x8x4_t src) {
return vld4_lane_s8(ptr, src, lane); }
1701template <
int lane>[[gnu::always_inline]] nce uint8x8x4_t load4_lane(uint8_t
const *ptr, uint8x8x4_t src) {
return vld4_lane_u8(ptr, src, lane); }
1702template <
int lane>[[gnu::always_inline]] nce poly8x8x4_t load4_lane(poly8_t
const *ptr, poly8x8x4_t src) {
return vld4_lane_p8(ptr, src, lane); }
1703#ifdef ARGON_HAS_QUADWORD_BYTE_LANE_LOADS
1704template <
int lane>[[gnu::always_inline]] nce int8x16x2_t load2_lane_quad(int8_t
const *ptr, int8x16x2_t src) {
return vld2q_lane_s8(ptr, src, lane); }
1705template <
int lane>[[gnu::always_inline]] nce uint8x16x2_t load2_lane_quad(uint8_t
const *ptr, uint8x16x2_t src) {
return vld2q_lane_u8(ptr, src, lane); }
1706template <
int lane>[[gnu::always_inline]] nce int8x16x3_t load3_lane_quad(int8_t
const *ptr, int8x16x3_t src) {
return vld3q_lane_s8(ptr, src, lane); }
1707template <
int lane>[[gnu::always_inline]] nce uint8x16x3_t load3_lane_quad(uint8_t
const *ptr, uint8x16x3_t src) {
return vld3q_lane_u8(ptr, src, lane); }
1708template <
int lane>[[gnu::always_inline]] nce int8x16x4_t load4_lane_quad(int8_t
const *ptr, int8x16x4_t src) {
return vld4q_lane_s8(ptr, src, lane); }
1709template <
int lane>[[gnu::always_inline]] nce uint8x16x4_t load4_lane_quad(uint8_t
const *ptr, uint8x16x4_t src) {
return vld4q_lane_u8(ptr, src, lane); }
1711#if defined(__clang__) || (__GNUC__ > 13)
1712template <> [[gnu::always_inline]]
inline int8x8x2_t load1_x2(int8_t
const *ptr) {
return vld1_s8_x2(ptr); }
1713template <> [[gnu::always_inline]]
inline int8x16x2_t load1_x2(int8_t
const *ptr) {
return vld1q_s8_x2(ptr); }
1714template <> [[gnu::always_inline]]
inline int16x4x2_t load1_x2(int16_t
const *ptr) {
return vld1_s16_x2(ptr); }
1715template <> [[gnu::always_inline]]
inline int16x8x2_t load1_x2(int16_t
const *ptr) {
return vld1q_s16_x2(ptr); }
1716template <> [[gnu::always_inline]]
inline int32x2x2_t load1_x2(int32_t
const *ptr) {
return vld1_s32_x2(ptr); }
1717template <> [[gnu::always_inline]]
inline int32x4x2_t load1_x2(int32_t
const *ptr) {
return vld1q_s32_x2(ptr); }
1718template <> [[gnu::always_inline]]
inline uint8x8x2_t load1_x2(uint8_t
const *ptr) {
return vld1_u8_x2(ptr); }
1719template <> [[gnu::always_inline]]
inline uint8x16x2_t load1_x2(uint8_t
const *ptr) {
return vld1q_u8_x2(ptr); }
1720template <> [[gnu::always_inline]]
inline uint16x4x2_t load1_x2(uint16_t
const *ptr) {
return vld1_u16_x2(ptr); }
1721template <> [[gnu::always_inline]]
inline uint16x8x2_t load1_x2(uint16_t
const *ptr) {
return vld1q_u16_x2(ptr); }
1722template <> [[gnu::always_inline]]
inline uint32x2x2_t load1_x2(uint32_t
const *ptr) {
return vld1_u32_x2(ptr); }
1723template <> [[gnu::always_inline]]
inline uint32x4x2_t load1_x2(uint32_t
const *ptr) {
return vld1q_u32_x2(ptr); }
1724template <> [[gnu::always_inline]]
inline float32x2x2_t load1_x2(float32_t
const *ptr) {
return vld1_f32_x2(ptr); }
1725template <> [[gnu::always_inline]]
inline float32x4x2_t load1_x2(float32_t
const *ptr) {
return vld1q_f32_x2(ptr); }
1726template <> [[gnu::always_inline]]
inline poly8x8x2_t load1_x2(poly8_t
const *ptr) {
return vld1_p8_x2(ptr); }
1727template <> [[gnu::always_inline]]
inline poly8x16x2_t load1_x2(poly8_t
const *ptr) {
return vld1q_p8_x2(ptr); }
1728template <> [[gnu::always_inline]]
inline poly16x4x2_t load1_x2(poly16_t
const *ptr) {
return vld1_p16_x2(ptr); }
1729template <> [[gnu::always_inline]]
inline poly16x8x2_t load1_x2(poly16_t
const *ptr) {
return vld1q_p16_x2(ptr); }
1730template <> [[gnu::always_inline]]
inline int64x1x2_t load1_x2(int64_t
const *ptr) {
return vld1_s64_x2(ptr); }
1731template <> [[gnu::always_inline]]
inline uint64x1x2_t load1_x2(uint64_t
const *ptr) {
return vld1_u64_x2(ptr); }
1732template <> [[gnu::always_inline]]
inline int64x2x2_t load1_x2(int64_t
const *ptr) {
return vld1q_s64_x2(ptr); }
1733template <> [[gnu::always_inline]]
inline uint64x2x2_t load1_x2(uint64_t
const *ptr) {
return vld1q_u64_x2(ptr); }
1734template <> [[gnu::always_inline]]
inline int8x8x3_t load1_x3(int8_t
const *ptr) {
return vld1_s8_x3(ptr); }
1735template <> [[gnu::always_inline]]
inline int16x4x3_t load1_x3(int16_t
const *ptr) {
return vld1_s16_x3(ptr); }
1737#if defined(__GNUC__) && __GNUC__ == 14 && defined(__ARM_ARCH) && (__ARM_ARCH < 8)
1738template <> [[gnu::always_inline]]
inline int8x16x3_t load1_x3(int8_t
const *ptr) {
return vld1q_s8_x3((
const uint8_t*)ptr); }
1739template <> [[gnu::always_inline]]
inline int16x8x3_t load1_x3(int16_t
const *ptr) {
return vld1q_s16_x3((
const uint16_t*)ptr); }
1741template <> [[gnu::always_inline]]
inline int8x16x3_t load1_x3(int8_t
const *ptr) {
return vld1q_s8_x3(ptr); }
1742template <> [[gnu::always_inline]]
inline int16x8x3_t load1_x3(int16_t
const *ptr) {
return vld1q_s16_x3(ptr); }
1745template <> [[gnu::always_inline]]
inline int32x2x3_t load1_x3(int32_t
const *ptr) {
return vld1_s32_x3(ptr); }
1746template <> [[gnu::always_inline]]
inline int32x4x3_t load1_x3(int32_t
const *ptr) {
return vld1q_s32_x3(ptr); }
1747template <> [[gnu::always_inline]]
inline uint8x8x3_t load1_x3(uint8_t
const *ptr) {
return vld1_u8_x3(ptr); }
1748template <> [[gnu::always_inline]]
inline uint8x16x3_t load1_x3(uint8_t
const *ptr) {
return vld1q_u8_x3(ptr); }
1749template <> [[gnu::always_inline]]
inline uint16x4x3_t load1_x3(uint16_t
const *ptr) {
return vld1_u16_x3(ptr); }
1750template <> [[gnu::always_inline]]
inline uint16x8x3_t load1_x3(uint16_t
const *ptr) {
return vld1q_u16_x3(ptr); }
1751template <> [[gnu::always_inline]]
inline uint32x2x3_t load1_x3(uint32_t
const *ptr) {
return vld1_u32_x3(ptr); }
1752template <> [[gnu::always_inline]]
inline uint32x4x3_t load1_x3(uint32_t
const *ptr) {
return vld1q_u32_x3(ptr); }
1753template <> [[gnu::always_inline]]
inline float32x2x3_t load1_x3(float32_t
const *ptr) {
return vld1_f32_x3(ptr); }
1754template <> [[gnu::always_inline]]
inline float32x4x3_t load1_x3(float32_t
const *ptr) {
return vld1q_f32_x3(ptr); }
1755template <> [[gnu::always_inline]]
inline poly8x8x3_t load1_x3(poly8_t
const *ptr) {
return vld1_p8_x3(ptr); }
1756template <> [[gnu::always_inline]]
inline poly8x16x3_t load1_x3(poly8_t
const *ptr) {
return vld1q_p8_x3(ptr); }
1757template <> [[gnu::always_inline]]
inline poly16x4x3_t load1_x3(poly16_t
const *ptr) {
return vld1_p16_x3(ptr); }
1758template <> [[gnu::always_inline]]
inline poly16x8x3_t load1_x3(poly16_t
const *ptr) {
return vld1q_p16_x3(ptr); }
1759template <> [[gnu::always_inline]]
inline int64x1x3_t load1_x3(int64_t
const *ptr) {
return vld1_s64_x3(ptr); }
1760template <> [[gnu::always_inline]]
inline uint64x1x3_t load1_x3(uint64_t
const *ptr) {
return vld1_u64_x3(ptr); }
1761template <> [[gnu::always_inline]]
inline int64x2x3_t load1_x3(int64_t
const *ptr) {
return vld1q_s64_x3(ptr); }
1762template <> [[gnu::always_inline]]
inline uint64x2x3_t load1_x3(uint64_t
const *ptr) {
return vld1q_u64_x3(ptr); }
1763template <> [[gnu::always_inline]]
inline int8x8x4_t load1_x4(int8_t
const *ptr) {
return vld1_s8_x4(ptr); }
1765#if defined(__GNUC__) && __GNUC__ == 14 && defined(__ARM_ARCH) && (__ARM_ARCH < 8)
1766template <> [[gnu::always_inline]]
inline int8x16x4_t load1_x4(int8_t
const *ptr) {
return vld1q_s8_x4((
const uint8_t*)ptr); }
1767template <> [[gnu::always_inline]]
inline int16x8x4_t load1_x4(int16_t
const *ptr) {
return vld1q_s16_x4((
const uint16_t*)ptr); }
1769template <> [[gnu::always_inline]]
inline int8x16x4_t load1_x4(int8_t
const *ptr) {
return vld1q_s8_x4(ptr); }
1770template <> [[gnu::always_inline]]
inline int16x8x4_t load1_x4(int16_t
const *ptr) {
return vld1q_s16_x4(ptr); }
1773template <> [[gnu::always_inline]]
inline int16x4x4_t load1_x4(int16_t
const *ptr) {
return vld1_s16_x4(ptr); }
1774template <> [[gnu::always_inline]]
inline int32x2x4_t load1_x4(int32_t
const *ptr) {
return vld1_s32_x4(ptr); }
1775template <> [[gnu::always_inline]]
inline int32x4x4_t load1_x4(int32_t
const *ptr) {
return vld1q_s32_x4(ptr); }
1776template <> [[gnu::always_inline]]
inline uint8x8x4_t load1_x4(uint8_t
const *ptr) {
return vld1_u8_x4(ptr); }
1777template <> [[gnu::always_inline]]
inline uint8x16x4_t load1_x4(uint8_t
const *ptr) {
return vld1q_u8_x4(ptr); }
1778template <> [[gnu::always_inline]]
inline uint16x4x4_t load1_x4(uint16_t
const *ptr) {
return vld1_u16_x4(ptr); }
1779template <> [[gnu::always_inline]]
inline uint16x8x4_t load1_x4(uint16_t
const *ptr) {
return vld1q_u16_x4(ptr); }
1780template <> [[gnu::always_inline]]
inline uint32x2x4_t load1_x4(uint32_t
const *ptr) {
return vld1_u32_x4(ptr); }
1781template <> [[gnu::always_inline]]
inline uint32x4x4_t load1_x4(uint32_t
const *ptr) {
return vld1q_u32_x4(ptr); }
1782template <> [[gnu::always_inline]]
inline float32x2x4_t load1_x4(float32_t
const *ptr) {
return vld1_f32_x4(ptr); }
1783template <> [[gnu::always_inline]]
inline float32x4x4_t load1_x4(float32_t
const *ptr) {
return vld1q_f32_x4(ptr); }
1784template <> [[gnu::always_inline]]
inline poly8x8x4_t load1_x4(poly8_t
const *ptr) {
return vld1_p8_x4(ptr); }
1785template <> [[gnu::always_inline]]
inline poly8x16x4_t load1_x4(poly8_t
const *ptr) {
return vld1q_p8_x4(ptr); }
1786template <> [[gnu::always_inline]]
inline poly16x4x4_t load1_x4(poly16_t
const *ptr) {
return vld1_p16_x4(ptr); }
1787template <> [[gnu::always_inline]]
inline poly16x8x4_t load1_x4(poly16_t
const *ptr) {
return vld1q_p16_x4(ptr); }
1788template <> [[gnu::always_inline]]
inline int64x1x4_t load1_x4(int64_t
const *ptr) {
return vld1_s64_x4(ptr); }
1789template <> [[gnu::always_inline]]
inline uint64x1x4_t load1_x4(uint64_t
const *ptr) {
return vld1_u64_x4(ptr); }
1790template <> [[gnu::always_inline]]
inline int64x2x4_t load1_x4(int64_t
const *ptr) {
return vld1q_s64_x4(ptr); }
1791template <> [[gnu::always_inline]]
inline uint64x2x4_t load1_x4(uint64_t
const *ptr) {
return vld1q_u64_x4(ptr); }
1793[[gnu::always_inline]]
inline void store1(int8_t *ptr, int8x8_t val) {
return vst1_s8(ptr, val); }
1794[[gnu::always_inline]]
inline void store1(int16_t *ptr, int16x4_t val) {
return vst1_s16(ptr, val); }
1795[[gnu::always_inline]]
inline void store1(int32_t *ptr, int32x2_t val) {
return vst1_s32(ptr, val); }
1796[[gnu::always_inline]]
inline void store1(int64_t *ptr, int64x1_t val) {
return vst1_s64(ptr, val); }
1797[[gnu::always_inline]]
inline void store1(int64_t *ptr, int64x2_t val) {
return vst1q_s64(ptr, val); }
1798[[gnu::always_inline]]
inline void store1(uint8_t *ptr, uint8x8_t val) {
return vst1_u8(ptr, val); }
1799[[gnu::always_inline]]
inline void store1(uint16_t *ptr, uint16x4_t val) {
return vst1_u16(ptr, val); }
1800[[gnu::always_inline]]
inline void store1(uint32_t *ptr, uint32x2_t val) {
return vst1_u32(ptr, val); }
1801[[gnu::always_inline]]
inline void store1(uint64_t *ptr, uint64x1_t val) {
return vst1_u64(ptr, val); }
1802[[gnu::always_inline]]
inline void store1(uint64_t *ptr, uint64x2_t val) {
return vst1q_u64(ptr, val); }
1803[[gnu::always_inline]]
inline void store1(float32_t *ptr, float32x2_t val) {
return vst1_f32(ptr, val); }
1804[[gnu::always_inline]]
inline void store1(poly8_t *ptr, poly8x8_t val) {
return vst1_p8(ptr, val); }
1805[[gnu::always_inline]]
inline void store1(poly8_t *ptr, poly8x16_t val) {
return vst1q_p8(ptr, val); }
1806[[gnu::always_inline]]
inline void store1(poly16_t *ptr, poly16x4_t val) {
return vst1_p16(ptr, val); }
1807[[gnu::always_inline]]
inline void store1(poly16_t *ptr, poly16x8_t val) {
return vst1q_p16(ptr, val); }
1808template <
int lane>[[gnu::always_inline]] nce
void store1_lane(int8_t *ptr, int8x8_t val) {
return vst1_lane_s8(ptr, val, lane); }
1809template <
int lane>[[gnu::always_inline]] nce
void store1_lane(int8_t *ptr, int8x16_t val) {
return vst1q_lane_s8(ptr, val, lane); }
1810template <
int lane>[[gnu::always_inline]] nce
void store1_lane(int16_t *ptr, int16x4_t val) {
return vst1_lane_s16(ptr, val, lane); }
1811template <
int lane>[[gnu::always_inline]] nce
void store1_lane(int16_t *ptr, int16x8_t val) {
return vst1q_lane_s16(ptr, val, lane); }
1812template <
int lane>[[gnu::always_inline]] nce
void store1_lane(int32_t *ptr, int32x2_t val) {
return vst1_lane_s32(ptr, val, lane); }
1813template <
int lane>[[gnu::always_inline]] nce
void store1_lane(int32_t *ptr, int32x4_t val) {
return vst1q_lane_s32(ptr, val, lane); }
1814template <
int lane>[[gnu::always_inline]] nce
void store1_lane(int64_t *ptr, int64x1_t val) {
return vst1_lane_s64(ptr, val, lane); }
1815template <
int lane>[[gnu::always_inline]] nce
void store1_lane(int64_t *ptr, int64x2_t val) {
return vst1q_lane_s64(ptr, val, lane); }
1816template <
int lane>[[gnu::always_inline]] nce
void store1_lane(uint8_t *ptr, uint8x8_t val) {
return vst1_lane_u8(ptr, val, lane); }
1817template <
int lane>[[gnu::always_inline]] nce
void store1_lane(uint8_t *ptr, uint8x16_t val) {
return vst1q_lane_u8(ptr, val, lane); }
1818template <
int lane>[[gnu::always_inline]] nce
void store1_lane(uint16_t *ptr, uint16x4_t val) {
return vst1_lane_u16(ptr, val, lane); }
1819template <
int lane>[[gnu::always_inline]] nce
void store1_lane(uint16_t *ptr, uint16x8_t val) {
return vst1q_lane_u16(ptr, val, lane); }
1820template <
int lane>[[gnu::always_inline]] nce
void store1_lane(uint32_t *ptr, uint32x2_t val) {
return vst1_lane_u32(ptr, val, lane); }
1821template <
int lane>[[gnu::always_inline]] nce
void store1_lane(uint32_t *ptr, uint32x4_t val) {
return vst1q_lane_u32(ptr, val, lane); }
1822template <
int lane>[[gnu::always_inline]] nce
void store1_lane(uint64_t *ptr, uint64x1_t val) {
return vst1_lane_u64(ptr, val, lane); }
1823template <
int lane>[[gnu::always_inline]] nce
void store1_lane(uint64_t *ptr, uint64x2_t val) {
return vst1q_lane_u64(ptr, val, lane); }
1824template <
int lane>[[gnu::always_inline]] nce
void store1_lane(float32_t *ptr, float32x2_t val) {
return vst1_lane_f32(ptr, val, lane); }
1825template <
int lane>[[gnu::always_inline]] nce
void store1_lane(float32_t *ptr, float32x4_t val) {
return vst1q_lane_f32(ptr, val, lane); }
1826template <
int lane>[[gnu::always_inline]] nce
void store1_lane(poly8_t *ptr, poly8x8_t val) {
return vst1_lane_p8(ptr, val, lane); }
1827template <
int lane>[[gnu::always_inline]] nce
void store1_lane(poly8_t *ptr, poly8x16_t val) {
return vst1q_lane_p8(ptr, val, lane); }
1828template <
int lane>[[gnu::always_inline]] nce
void store1_lane(poly16_t *ptr, poly16x4_t val) {
return vst1_lane_p16(ptr, val, lane); }
1829template <
int lane>[[gnu::always_inline]] nce
void store1_lane(poly16_t *ptr, poly16x8_t val) {
return vst1q_lane_p16(ptr, val, lane); }
1830[[gnu::always_inline]]
inline void store2(int8_t *ptr, int8x8x2_t val) {
return vst2_s8(ptr, val); }
1831[[gnu::always_inline]]
inline void store2(int8_t *ptr, int8x16x2_t val) {
return vst2q_s8(ptr, val); }
1832[[gnu::always_inline]]
inline void store2(int16_t *ptr, int16x4x2_t val) {
return vst2_s16(ptr, val); }
1833[[gnu::always_inline]]
inline void store2(int16_t *ptr, int16x8x2_t val) {
return vst2q_s16(ptr, val); }
1834[[gnu::always_inline]]
inline void store2(int32_t *ptr, int32x2x2_t val) {
return vst2_s32(ptr, val); }
1835[[gnu::always_inline]]
inline void store2(int32_t *ptr, int32x4x2_t val) {
return vst2q_s32(ptr, val); }
1836[[gnu::always_inline]]
inline void store2(uint8_t *ptr, uint8x8x2_t val) {
return vst2_u8(ptr, val); }
1837[[gnu::always_inline]]
inline void store2(uint8_t *ptr, uint8x16x2_t val) {
return vst2q_u8(ptr, val); }
1838[[gnu::always_inline]]
inline void store2(uint16_t *ptr, uint16x4x2_t val) {
return vst2_u16(ptr, val); }
1839[[gnu::always_inline]]
inline void store2(uint16_t *ptr, uint16x8x2_t val) {
return vst2q_u16(ptr, val); }
1840[[gnu::always_inline]]
inline void store2(uint32_t *ptr, uint32x2x2_t val) {
return vst2_u32(ptr, val); }
1841[[gnu::always_inline]]
inline void store2(uint32_t *ptr, uint32x4x2_t val) {
return vst2q_u32(ptr, val); }
1842[[gnu::always_inline]]
inline void store2(float32_t *ptr, float32x2x2_t val) {
return vst2_f32(ptr, val); }
1843[[gnu::always_inline]]
inline void store2(float32_t *ptr, float32x4x2_t val) {
return vst2q_f32(ptr, val); }
1844[[gnu::always_inline]]
inline void store2(poly8_t *ptr, poly8x8x2_t val) {
return vst2_p8(ptr, val); }
1845[[gnu::always_inline]]
inline void store2(poly8_t *ptr, poly8x16x2_t val) {
return vst2q_p8(ptr, val); }
1846[[gnu::always_inline]]
inline void store2(poly16_t *ptr, poly16x4x2_t val) {
return vst2_p16(ptr, val); }
1847[[gnu::always_inline]]
inline void store2(poly16_t *ptr, poly16x8x2_t val) {
return vst2q_p16(ptr, val); }
1848[[gnu::always_inline]]
inline void store2(int64_t *ptr, int64x1x2_t val) {
return vst2_s64(ptr, val); }
1849[[gnu::always_inline]]
inline void store2(uint64_t *ptr, uint64x1x2_t val) {
return vst2_u64(ptr, val); }
1850[[gnu::always_inline]]
inline void store3(int8_t *ptr, int8x8x3_t val) {
return vst3_s8(ptr, val); }
1851[[gnu::always_inline]]
inline void store3(int8_t *ptr, int8x16x3_t val) {
return vst3q_s8(ptr, val); }
1852[[gnu::always_inline]]
inline void store3(int16_t *ptr, int16x4x3_t val) {
return vst3_s16(ptr, val); }
1853[[gnu::always_inline]]
inline void store3(int16_t *ptr, int16x8x3_t val) {
return vst3q_s16(ptr, val); }
1854[[gnu::always_inline]]
inline void store3(int32_t *ptr, int32x2x3_t val) {
return vst3_s32(ptr, val); }
1855[[gnu::always_inline]]
inline void store3(int32_t *ptr, int32x4x3_t val) {
return vst3q_s32(ptr, val); }
1856[[gnu::always_inline]]
inline void store3(uint8_t *ptr, uint8x8x3_t val) {
return vst3_u8(ptr, val); }
1857[[gnu::always_inline]]
inline void store3(uint8_t *ptr, uint8x16x3_t val) {
return vst3q_u8(ptr, val); }
1858[[gnu::always_inline]]
inline void store3(uint16_t *ptr, uint16x4x3_t val) {
return vst3_u16(ptr, val); }
1859[[gnu::always_inline]]
inline void store3(uint16_t *ptr, uint16x8x3_t val) {
return vst3q_u16(ptr, val); }
1860[[gnu::always_inline]]
inline void store3(uint32_t *ptr, uint32x2x3_t val) {
return vst3_u32(ptr, val); }
1861[[gnu::always_inline]]
inline void store3(uint32_t *ptr, uint32x4x3_t val) {
return vst3q_u32(ptr, val); }
1862[[gnu::always_inline]]
inline void store3(float32_t *ptr, float32x2x3_t val) {
return vst3_f32(ptr, val); }
1863[[gnu::always_inline]]
inline void store3(float32_t *ptr, float32x4x3_t val) {
return vst3q_f32(ptr, val); }
1864[[gnu::always_inline]]
inline void store3(poly8_t *ptr, poly8x8x3_t val) {
return vst3_p8(ptr, val); }
1865[[gnu::always_inline]]
inline void store3(poly8_t *ptr, poly8x16x3_t val) {
return vst3q_p8(ptr, val); }
1866[[gnu::always_inline]]
inline void store3(poly16_t *ptr, poly16x4x3_t val) {
return vst3_p16(ptr, val); }
1867[[gnu::always_inline]]
inline void store3(poly16_t *ptr, poly16x8x3_t val) {
return vst3q_p16(ptr, val); }
1868[[gnu::always_inline]]
inline void store3(int64_t *ptr, int64x1x3_t val) {
return vst3_s64(ptr, val); }
1869[[gnu::always_inline]]
inline void store3(uint64_t *ptr, uint64x1x3_t val) {
return vst3_u64(ptr, val); }
1870[[gnu::always_inline]]
inline void store4(int8_t *ptr, int8x8x4_t val) {
return vst4_s8(ptr, val); }
1871[[gnu::always_inline]]
inline void store4(int8_t *ptr, int8x16x4_t val) {
return vst4q_s8(ptr, val); }
1872[[gnu::always_inline]]
inline void store4(int16_t *ptr, int16x4x4_t val) {
return vst4_s16(ptr, val); }
1873[[gnu::always_inline]]
inline void store4(int16_t *ptr, int16x8x4_t val) {
return vst4q_s16(ptr, val); }
1874[[gnu::always_inline]]
inline void store4(int32_t *ptr, int32x2x4_t val) {
return vst4_s32(ptr, val); }
1875[[gnu::always_inline]]
inline void store4(int32_t *ptr, int32x4x4_t val) {
return vst4q_s32(ptr, val); }
1876[[gnu::always_inline]]
inline void store4(uint8_t *ptr, uint8x8x4_t val) {
return vst4_u8(ptr, val); }
1877[[gnu::always_inline]]
inline void store4(uint8_t *ptr, uint8x16x4_t val) {
return vst4q_u8(ptr, val); }
1878[[gnu::always_inline]]
inline void store4(uint16_t *ptr, uint16x4x4_t val) {
return vst4_u16(ptr, val); }
1879[[gnu::always_inline]]
inline void store4(uint16_t *ptr, uint16x8x4_t val) {
return vst4q_u16(ptr, val); }
1880[[gnu::always_inline]]
inline void store4(uint32_t *ptr, uint32x2x4_t val) {
return vst4_u32(ptr, val); }
1881[[gnu::always_inline]]
inline void store4(uint32_t *ptr, uint32x4x4_t val) {
return vst4q_u32(ptr, val); }
1882[[gnu::always_inline]]
inline void store4(float32_t *ptr, float32x2x4_t val) {
return vst4_f32(ptr, val); }
1883[[gnu::always_inline]]
inline void store4(float32_t *ptr, float32x4x4_t val) {
return vst4q_f32(ptr, val); }
1884[[gnu::always_inline]]
inline void store4(poly8_t *ptr, poly8x8x4_t val) {
return vst4_p8(ptr, val); }
1885[[gnu::always_inline]]
inline void store4(poly8_t *ptr, poly8x16x4_t val) {
return vst4q_p8(ptr, val); }
1886[[gnu::always_inline]]
inline void store4(poly16_t *ptr, poly16x4x4_t val) {
return vst4_p16(ptr, val); }
1887[[gnu::always_inline]]
inline void store4(poly16_t *ptr, poly16x8x4_t val) {
return vst4q_p16(ptr, val); }
1888[[gnu::always_inline]]
inline void store4(int64_t *ptr, int64x1x4_t val) {
return vst4_s64(ptr, val); }
1889[[gnu::always_inline]]
inline void store4(uint64_t *ptr, uint64x1x4_t val) {
return vst4_u64(ptr, val); }
1890template <
int lane>[[gnu::always_inline]] nce
void store2_lane(int8_t *ptr, int8x8x2_t val) {
return vst2_lane_s8(ptr, val, lane); }
1891template <
int lane>[[gnu::always_inline]] nce
void store2_lane(uint8_t *ptr, uint8x8x2_t val) {
return vst2_lane_u8(ptr, val, lane); }
1892template <
int lane>[[gnu::always_inline]] nce
void store2_lane(poly8_t *ptr, poly8x8x2_t val) {
return vst2_lane_p8(ptr, val, lane); }
1893template <
int lane>[[gnu::always_inline]] nce
void store3_lane(int8_t *ptr, int8x8x3_t val) {
return vst3_lane_s8(ptr, val, lane); }
1894template <
int lane>[[gnu::always_inline]] nce
void store3_lane(uint8_t *ptr, uint8x8x3_t val) {
return vst3_lane_u8(ptr, val, lane); }
1895template <
int lane>[[gnu::always_inline]] nce
void store3_lane(poly8_t *ptr, poly8x8x3_t val) {
return vst3_lane_p8(ptr, val, lane); }
1896template <
int lane>[[gnu::always_inline]] nce
void store4_lane(int8_t *ptr, int8x8x4_t val) {
return vst4_lane_s8(ptr, val, lane); }
1897template <
int lane>[[gnu::always_inline]] nce
void store4_lane(uint8_t *ptr, uint8x8x4_t val) {
return vst4_lane_u8(ptr, val, lane); }
1898template <
int lane>[[gnu::always_inline]] nce
void store4_lane(poly8_t *ptr, poly8x8x4_t val) {
return vst4_lane_p8(ptr, val, lane); }
1899template <
int lane>[[gnu::always_inline]] nce
void store2_lane(int16_t *ptr, int16x4x2_t val) {
return vst2_lane_s16(ptr, val, lane); }
1900template <
int lane>[[gnu::always_inline]] nce
void store2_lane(int16_t *ptr, int16x8x2_t val) {
return vst2q_lane_s16(ptr, val, lane); }
1901template <
int lane>[[gnu::always_inline]] nce
void store2_lane(int32_t *ptr, int32x2x2_t val) {
return vst2_lane_s32(ptr, val, lane); }
1902template <
int lane>[[gnu::always_inline]] nce
void store2_lane(int32_t *ptr, int32x4x2_t val) {
return vst2q_lane_s32(ptr, val, lane); }
1903template <
int lane>[[gnu::always_inline]] nce
void store2_lane(uint16_t *ptr, uint16x4x2_t val) {
return vst2_lane_u16(ptr, val, lane); }
1904template <
int lane>[[gnu::always_inline]] nce
void store2_lane(uint16_t *ptr, uint16x8x2_t val) {
return vst2q_lane_u16(ptr, val, lane); }
1905template <
int lane>[[gnu::always_inline]] nce
void store2_lane(uint32_t *ptr, uint32x2x2_t val) {
return vst2_lane_u32(ptr, val, lane); }
1906template <
int lane>[[gnu::always_inline]] nce
void store2_lane(uint32_t *ptr, uint32x4x2_t val) {
return vst2q_lane_u32(ptr, val, lane); }
1907template <
int lane>[[gnu::always_inline]] nce
void store2_lane(float32_t *ptr, float32x2x2_t val) {
return vst2_lane_f32(ptr, val, lane); }
1908template <
int lane>[[gnu::always_inline]] nce
void store2_lane(float32_t *ptr, float32x4x2_t val) {
return vst2q_lane_f32(ptr, val, lane); }
1909template <
int lane>[[gnu::always_inline]] nce
void store2_lane(poly16_t *ptr, poly16x4x2_t val) {
return vst2_lane_p16(ptr, val, lane); }
1910template <
int lane>[[gnu::always_inline]] nce
void store2_lane(poly16_t *ptr, poly16x8x2_t val) {
return vst2q_lane_p16(ptr, val, lane); }
1911template <
int lane>[[gnu::always_inline]] nce
void store3_lane(int16_t *ptr, int16x4x3_t val) {
return vst3_lane_s16(ptr, val, lane); }
1912template <
int lane>[[gnu::always_inline]] nce
void store3_lane(int16_t *ptr, int16x8x3_t val) {
return vst3q_lane_s16(ptr, val, lane); }
1913template <
int lane>[[gnu::always_inline]] nce
void store3_lane(int32_t *ptr, int32x2x3_t val) {
return vst3_lane_s32(ptr, val, lane); }
1914template <
int lane>[[gnu::always_inline]] nce
void store3_lane(int32_t *ptr, int32x4x3_t val) {
return vst3q_lane_s32(ptr, val, lane); }
1915template <
int lane>[[gnu::always_inline]] nce
void store3_lane(uint16_t *ptr, uint16x4x3_t val) {
return vst3_lane_u16(ptr, val, lane); }
1916template <
int lane>[[gnu::always_inline]] nce
void store3_lane(uint16_t *ptr, uint16x8x3_t val) {
return vst3q_lane_u16(ptr, val, lane); }
1917template <
int lane>[[gnu::always_inline]] nce
void store3_lane(uint32_t *ptr, uint32x2x3_t val) {
return vst3_lane_u32(ptr, val, lane); }
1918template <
int lane>[[gnu::always_inline]] nce
void store3_lane(uint32_t *ptr, uint32x4x3_t val) {
return vst3q_lane_u32(ptr, val, lane); }
1919template <
int lane>[[gnu::always_inline]] nce
void store3_lane(float32_t *ptr, float32x2x3_t val) {
return vst3_lane_f32(ptr, val, lane); }
1920template <
int lane>[[gnu::always_inline]] nce
void store3_lane(float32_t *ptr, float32x4x3_t val) {
return vst3q_lane_f32(ptr, val, lane); }
1921template <
int lane>[[gnu::always_inline]] nce
void store3_lane(poly16_t *ptr, poly16x4x3_t val) {
return vst3_lane_p16(ptr, val, lane); }
1922template <
int lane>[[gnu::always_inline]] nce
void store3_lane(poly16_t *ptr, poly16x8x3_t val) {
return vst3q_lane_p16(ptr, val, lane); }
1926template <
int lane>[[gnu::always_inline]] nce
void store4_lane(int16_t *ptr, int16x4x4_t val) {
return vst4_lane_s16(ptr, val, lane); }
1927template <
int lane>[[gnu::always_inline]] nce
void store4_lane(int16_t *ptr, int16x8x4_t val) {
return vst4q_lane_s16(ptr, val, lane); }
1928template <
int lane>[[gnu::always_inline]] nce
void store4_lane(int32_t *ptr, int32x2x4_t val) {
return vst4_lane_s32(ptr, val, lane); }
1929template <
int lane>[[gnu::always_inline]] nce
void store4_lane(int32_t *ptr, int32x4x4_t val) {
return vst4q_lane_s32(ptr, val, lane); }
1930template <
int lane>[[gnu::always_inline]] nce
void store4_lane(uint16_t *ptr, uint16x4x4_t val) {
return vst4_lane_u16(ptr, val, lane); }
1931template <
int lane>[[gnu::always_inline]] nce
void store4_lane(uint16_t *ptr, uint16x8x4_t val) {
return vst4q_lane_u16(ptr, val, lane); }
1932template <
int lane>[[gnu::always_inline]] nce
void store4_lane(uint32_t *ptr, uint32x2x4_t val) {
return vst4_lane_u32(ptr, val, lane); }
1933template <
int lane>[[gnu::always_inline]] nce
void store4_lane(uint32_t *ptr, uint32x4x4_t val) {
return vst4q_lane_u32(ptr, val, lane); }
1934template <
int lane>[[gnu::always_inline]] nce
void store4_lane(float32_t *ptr, float32x2x4_t val) {
return vst4_lane_f32(ptr, val, lane); }
1935template <
int lane>[[gnu::always_inline]] nce
void store4_lane(float32_t *ptr, float32x4x4_t val) {
return vst4q_lane_f32(ptr, val, lane); }
1936template <
int lane>[[gnu::always_inline]] nce
void store4_lane(poly16_t *ptr, poly16x4x4_t val) {
return vst4_lane_p16(ptr, val, lane); }
1937template <
int lane>[[gnu::always_inline]] nce
void store4_lane(poly16_t *ptr, poly16x8x4_t val) {
return vst4q_lane_p16(ptr, val, lane); }
1938#if defined(__clang__) || (__GNUC__ > 13)
1939[[gnu::always_inline]]
inline void store1_x2(int8_t *ptr, int8x8x2_t val) {
return vst1_s8_x2(ptr, val); }
1940[[gnu::always_inline]]
inline void store1_x2(int8_t *ptr, int8x16x2_t val) {
return vst1q_s8_x2(ptr, val); }
1941[[gnu::always_inline]]
inline void store1_x2(int16_t *ptr, int16x4x2_t val) {
return vst1_s16_x2(ptr, val); }
1942[[gnu::always_inline]]
inline void store1_x2(int16_t *ptr, int16x8x2_t val) {
return vst1q_s16_x2(ptr, val); }
1943[[gnu::always_inline]]
inline void store1_x2(int32_t *ptr, int32x2x2_t val) {
return vst1_s32_x2(ptr, val); }
1944[[gnu::always_inline]]
inline void store1_x2(int32_t *ptr, int32x4x2_t val) {
return vst1q_s32_x2(ptr, val); }
1945[[gnu::always_inline]]
inline void store1_x2(uint8_t *ptr, uint8x8x2_t val) {
return vst1_u8_x2(ptr, val); }
1946[[gnu::always_inline]]
inline void store1_x2(uint8_t *ptr, uint8x16x2_t val) {
return vst1q_u8_x2(ptr, val); }
1947[[gnu::always_inline]]
inline void store1_x2(uint16_t *ptr, uint16x4x2_t val) {
return vst1_u16_x2(ptr, val); }
1948[[gnu::always_inline]]
inline void store1_x2(uint16_t *ptr, uint16x8x2_t val) {
return vst1q_u16_x2(ptr, val); }
1949[[gnu::always_inline]]
inline void store1_x2(uint32_t *ptr, uint32x2x2_t val) {
return vst1_u32_x2(ptr, val); }
1950[[gnu::always_inline]]
inline void store1_x2(uint32_t *ptr, uint32x4x2_t val) {
return vst1q_u32_x2(ptr, val); }
1951[[gnu::always_inline]]
inline void store1_x2(float32_t *ptr, float32x2x2_t val) {
return vst1_f32_x2(ptr, val); }
1952[[gnu::always_inline]]
inline void store1_x2(float32_t *ptr, float32x4x2_t val) {
return vst1q_f32_x2(ptr, val); }
1953[[gnu::always_inline]]
inline void store1_x2(poly8_t *ptr, poly8x8x2_t val) {
return vst1_p8_x2(ptr, val); }
1954[[gnu::always_inline]]
inline void store1_x2(poly8_t *ptr, poly8x16x2_t val) {
return vst1q_p8_x2(ptr, val); }
1955[[gnu::always_inline]]
inline void store1_x2(poly16_t *ptr, poly16x4x2_t val) {
return vst1_p16_x2(ptr, val); }
1956[[gnu::always_inline]]
inline void store1_x2(poly16_t *ptr, poly16x8x2_t val) {
return vst1q_p16_x2(ptr, val); }
1957[[gnu::always_inline]]
inline void store1_x2(int64_t *ptr, int64x1x2_t val) {
return vst1_s64_x2(ptr, val); }
1958[[gnu::always_inline]]
inline void store1_x2(uint64_t *ptr, uint64x1x2_t val) {
return vst1_u64_x2(ptr, val); }
1959[[gnu::always_inline]]
inline void store1_x2(int64_t *ptr, int64x2x2_t val) {
return vst1q_s64_x2(ptr, val); }
1960[[gnu::always_inline]]
inline void store1_x2(uint64_t *ptr, uint64x2x2_t val) {
return vst1q_u64_x2(ptr, val); }
1961[[gnu::always_inline]]
inline void store1_x3(int8_t *ptr, int8x8x3_t val) {
return vst1_s8_x3(ptr, val); }
1962[[gnu::always_inline]]
inline void store1_x3(int8_t *ptr, int8x16x3_t val) {
return vst1q_s8_x3(ptr, val); }
1963[[gnu::always_inline]]
inline void store1_x3(int16_t *ptr, int16x4x3_t val) {
return vst1_s16_x3(ptr, val); }
1964[[gnu::always_inline]]
inline void store1_x3(int16_t *ptr, int16x8x3_t val) {
return vst1q_s16_x3(ptr, val); }
1965[[gnu::always_inline]]
inline void store1_x3(int32_t *ptr, int32x2x3_t val) {
return vst1_s32_x3(ptr, val); }
1966[[gnu::always_inline]]
inline void store1_x3(int32_t *ptr, int32x4x3_t val) {
return vst1q_s32_x3(ptr, val); }
1967[[gnu::always_inline]]
inline void store1_x3(uint8_t *ptr, uint8x8x3_t val) {
return vst1_u8_x3(ptr, val); }
1968[[gnu::always_inline]]
inline void store1_x3(uint8_t *ptr, uint8x16x3_t val) {
return vst1q_u8_x3(ptr, val); }
1969[[gnu::always_inline]]
inline void store1_x3(uint16_t *ptr, uint16x4x3_t val) {
return vst1_u16_x3(ptr, val); }
1970[[gnu::always_inline]]
inline void store1_x3(uint16_t *ptr, uint16x8x3_t val) {
return vst1q_u16_x3(ptr, val); }
1971[[gnu::always_inline]]
inline void store1_x3(uint32_t *ptr, uint32x2x3_t val) {
return vst1_u32_x3(ptr, val); }
1972[[gnu::always_inline]]
inline void store1_x3(uint32_t *ptr, uint32x4x3_t val) {
return vst1q_u32_x3(ptr, val); }
1973[[gnu::always_inline]]
inline void store1_x3(float32_t *ptr, float32x2x3_t val) {
return vst1_f32_x3(ptr, val); }
1974[[gnu::always_inline]]
inline void store1_x3(float32_t *ptr, float32x4x3_t val) {
return vst1q_f32_x3(ptr, val); }
1975[[gnu::always_inline]]
inline void store1_x3(poly8_t *ptr, poly8x8x3_t val) {
return vst1_p8_x3(ptr, val); }
1976[[gnu::always_inline]]
inline void store1_x3(poly8_t *ptr, poly8x16x3_t val) {
return vst1q_p8_x3(ptr, val); }
1977[[gnu::always_inline]]
inline void store1_x3(poly16_t *ptr, poly16x4x3_t val) {
return vst1_p16_x3(ptr, val); }
1978[[gnu::always_inline]]
inline void store1_x3(poly16_t *ptr, poly16x8x3_t val) {
return vst1q_p16_x3(ptr, val); }
1979[[gnu::always_inline]]
inline void store1_x3(int64_t *ptr, int64x1x3_t val) {
return vst1_s64_x3(ptr, val); }
1980[[gnu::always_inline]]
inline void store1_x3(uint64_t *ptr, uint64x1x3_t val) {
return vst1_u64_x3(ptr, val); }
1981[[gnu::always_inline]]
inline void store1_x3(int64_t *ptr, int64x2x3_t val) {
return vst1q_s64_x3(ptr, val); }
1982[[gnu::always_inline]]
inline void store1_x3(uint64_t *ptr, uint64x2x3_t val) {
return vst1q_u64_x3(ptr, val); }
1984[[gnu::always_inline]]
inline void store1_x4(int8_t *ptr, int8x8x4_t val) {
return vst1_s8_x4(ptr, val); }
1985[[gnu::always_inline]]
inline void store1_x4(int8_t *ptr, int8x16x4_t val) {
return vst1q_s8_x4(ptr, val); }
1986[[gnu::always_inline]]
inline void store1_x4(int16_t *ptr, int16x4x4_t val) {
return vst1_s16_x4(ptr, val); }
1987[[gnu::always_inline]]
inline void store1_x4(int16_t *ptr, int16x8x4_t val) {
return vst1q_s16_x4(ptr, val); }
1988[[gnu::always_inline]]
inline void store1_x4(int32_t *ptr, int32x2x4_t val) {
return vst1_s32_x4(ptr, val); }
1989[[gnu::always_inline]]
inline void store1_x4(int32_t *ptr, int32x4x4_t val) {
return vst1q_s32_x4(ptr, val); }
1990[[gnu::always_inline]]
inline void store1_x4(uint8_t *ptr, uint8x8x4_t val) {
return vst1_u8_x4(ptr, val); }
1991[[gnu::always_inline]]
inline void store1_x4(uint8_t *ptr, uint8x16x4_t val) {
return vst1q_u8_x4(ptr, val); }
1992[[gnu::always_inline]]
inline void store1_x4(uint16_t *ptr, uint16x4x4_t val) {
return vst1_u16_x4(ptr, val); }
1993[[gnu::always_inline]]
inline void store1_x4(uint16_t *ptr, uint16x8x4_t val) {
return vst1q_u16_x4(ptr, val); }
1994[[gnu::always_inline]]
inline void store1_x4(uint32_t *ptr, uint32x2x4_t val) {
return vst1_u32_x4(ptr, val); }
1995[[gnu::always_inline]]
inline void store1_x4(uint32_t *ptr, uint32x4x4_t val) {
return vst1q_u32_x4(ptr, val); }
1996[[gnu::always_inline]]
inline void store1_x4(float32_t *ptr, float32x2x4_t val) {
return vst1_f32_x4(ptr, val); }
1997[[gnu::always_inline]]
inline void store1_x4(float32_t *ptr, float32x4x4_t val) {
return vst1q_f32_x4(ptr, val); }
1998[[gnu::always_inline]]
inline void store1_x4(poly8_t *ptr, poly8x8x4_t val) {
return vst1_p8_x4(ptr, val); }
1999[[gnu::always_inline]]
inline void store1_x4(poly8_t *ptr, poly8x16x4_t val) {
return vst1q_p8_x4(ptr, val); }
2000[[gnu::always_inline]]
inline void store1_x4(poly16_t *ptr, poly16x4x4_t val) {
return vst1_p16_x4(ptr, val); }
2001[[gnu::always_inline]]
inline void store1_x4(poly16_t *ptr, poly16x8x4_t val) {
return vst1q_p16_x4(ptr, val); }
2002[[gnu::always_inline]]
inline void store1_x4(int64_t *ptr, int64x1x4_t val) {
return vst1_s64_x4(ptr, val); }
2003[[gnu::always_inline]]
inline void store1_x4(uint64_t *ptr, uint64x1x4_t val) {
return vst1_u64_x4(ptr, val); }
2004[[gnu::always_inline]]
inline void store1_x4(int64_t *ptr, int64x2x4_t val) {
return vst1q_s64_x4(ptr, val); }
2005[[gnu::always_inline]]
inline void store1_x4(uint64_t *ptr, uint64x2x4_t val) {
return vst1q_u64_x4(ptr, val); }
2007[[gnu::always_inline]] nce int8x8_t table_lookup2(int8x8x2_t a, int8x8_t idx) {
return vtbl2_s8(a, idx); }
2008[[gnu::always_inline]] nce uint8x8_t table_lookup2(uint8x8x2_t a, uint8x8_t idx) {
return vtbl2_u8(a, idx); }
2009[[gnu::always_inline]] nce poly8x8_t table_lookup2(poly8x8x2_t a, uint8x8_t idx) {
return vtbl2_p8(a, idx); }
2010[[gnu::always_inline]] nce int8x8_t table_lookup3(int8x8x3_t a, int8x8_t idx) {
return vtbl3_s8(a, idx); }
2011[[gnu::always_inline]] nce uint8x8_t table_lookup3(uint8x8x3_t a, uint8x8_t idx) {
return vtbl3_u8(a, idx); }
2012[[gnu::always_inline]] nce poly8x8_t table_lookup3(poly8x8x3_t a, uint8x8_t idx) {
return vtbl3_p8(a, idx); }
2013[[gnu::always_inline]] nce int8x8_t table_lookup4(int8x8x4_t a, int8x8_t idx) {
return vtbl4_s8(a, idx); }
2014[[gnu::always_inline]] nce uint8x8_t table_lookup4(uint8x8x4_t a, uint8x8_t idx) {
return vtbl4_u8(a, idx); }
2015[[gnu::always_inline]] nce poly8x8_t table_lookup4(poly8x8x4_t a, uint8x8_t idx) {
return vtbl4_p8(a, idx); }
2017[[gnu::always_inline]] nce poly64x1_t add(poly64x1_t a, poly64x1_t b) {
return vadd_p64(a, b); }
2018[[gnu::always_inline]] nce poly8x16_t add(poly8x16_t a, poly8x16_t b) {
return vaddq_p8(a, b); }
2019[[gnu::always_inline]] nce poly16x8_t add(poly16x8_t a, poly16x8_t b) {
return vaddq_p16(a, b); }
2020[[gnu::always_inline]] nce poly64x2_t add(poly64x2_t a, poly64x2_t b) {
return vaddq_p64(a, b); }