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