clang 24.0.0git
riscv_packed_simd.h
Go to the documentation of this file.
1/*===---- riscv_packed_simd.h - RISC-V P intrinsics ------------------------===
2 *
3 * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 * See https://llvm.org/LICENSE.txt for license information.
5 * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 *
7 *===-----------------------------------------------------------------------===
8 */
9
10#ifndef __RISCV_PACKED_SIMD_H
11#define __RISCV_PACKED_SIMD_H
12
13#include <stdint.h>
14
15#if defined(__cplusplus)
16extern "C" {
17#endif
18
19/* Packed SIMD Types */
20
21typedef int8_t int8x4_t __attribute__((__vector_size__(4)));
22typedef uint8_t uint8x4_t __attribute__((__vector_size__(4)));
23typedef int16_t int16x2_t __attribute__((__vector_size__(4)));
24typedef uint16_t uint16x2_t __attribute__((__vector_size__(4)));
25
26typedef int8_t int8x8_t __attribute__((__vector_size__(8)));
27typedef uint8_t uint8x8_t __attribute__((__vector_size__(8)));
28typedef int16_t int16x4_t __attribute__((__vector_size__(8)));
29typedef uint16_t uint16x4_t __attribute__((__vector_size__(8)));
30typedef int32_t int32x2_t __attribute__((__vector_size__(8)));
31typedef uint32_t uint32x2_t __attribute__((__vector_size__(8)));
32
33#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__))
34
35#define __packed_splat2(ty, x) ((ty){(x), (x)})
36#define __packed_splat4(ty, x) ((ty){(x), (x), (x), (x)})
37#define __packed_splat8(ty, x) ((ty){(x), (x), (x), (x), (x), (x), (x), (x)})
38
39#define __packed_splat(name, ty, scalar_ty, splat) \
40 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(scalar_ty __x) { \
41 return splat(ty, __x); \
42 }
43
44#define __packed_shift(name, ty, op, mask) \
45 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, \
46 unsigned __rs2) { \
47 return __rs1 op(__rs2 & (mask)); \
48 }
49#define __packed_shift8(name, ty, op) __packed_shift(name, ty, op, 0x7)
50#define __packed_shift16(name, ty, op) __packed_shift(name, ty, op, 0xf)
51#define __packed_shift32(name, ty, op) __packed_shift(name, ty, op, 0x1f)
52
53#define __packed_scalar_binary_op(name, ty, scalar_ty, op, splat) \
54 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, \
55 scalar_ty __rs2) { \
56 return __rs1 op splat(ty, __rs2); \
57 }
58
59#define __packed_binary_op(name, ty, op) \
60 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, ty __rs2) { \
61 return __rs1 op __rs2; \
62 }
63
64#define __packed_unary_op(name, ty, op) \
65 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
66 return op __rs1; \
67 }
68
69#define __packed_binary_builtin(name, ty, builtin) \
70 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, ty __rs2) { \
71 return builtin(__rs1, __rs2); \
72 }
73
74#define __packed_binary_builtin_mixed(name, rty, ty1, ty2, builtin) \
75 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty1 __rs1, \
76 ty2 __rs2) { \
77 return builtin(__rs1, __rs2); \
78 }
79
80#define __packed_ternary_builtin(name, ty, builtin) \
81 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rd, ty __rs1, \
82 ty __rs2) { \
83 return builtin(__rd, __rs1, __rs2); \
84 }
85
86#define __packed_ternary_builtin_mixed(name, rty, ty1, ty2, builtin) \
87 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(rty __rd, ty1 __rs1, \
88 ty2 __rs2) { \
89 return builtin(__rd, __rs1, __rs2); \
90 }
91
92#define __packed_sh1add(name, ty) \
93 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, ty __rs2) { \
94 return (__rs1 << 1) + __rs2; \
95 }
96
97/* TODO: switch to sadd_sat(__builtin_elementwise_shl_sat(a, 1), b) once a
98 * generic elementwise shl_sat builtin exists. sadd_sat(a, a) is equivalent
99 * for signed types and the backend's saturating_shl1 PatFrags matches both
100 * shapes. */
101#define __packed_sh1sadd(name, ty) \
102 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, ty __rs2) { \
103 return __builtin_elementwise_add_sat( \
104 __builtin_elementwise_add_sat(__rs1, __rs1), __rs2); \
105 }
106
107#define __packed_cmp(name, ty, rty, op) \
108 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, \
109 ty __rs2) { \
110 return (rty)(__rs1 op __rs2); \
111 }
112
113#define __packed_pabs(name, ty, rty) \
114 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
115 return (rty)__builtin_elementwise_abs(__rs1); \
116 }
117
118#define __packed_binary_builtin_cast(name, ty, rty, builtin) \
119 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, \
120 ty __rs2) { \
121 return (rty)builtin(__rs1, __rs2); \
122 }
123
124#define __packed_reduction(name, rty, ty, builtin) \
125 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, \
126 rty __rs2) { \
127 return builtin(__rs1, __rs2); \
128 }
129
130#define __packed_merge_builtin(name, ty, mask_ty, builtin) \
131 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, ty __rs2, \
132 mask_ty __rd) { \
133 return (ty)builtin(__rs1, __rs2, __rd); \
134 }
135
136#define __packed_unary_builtin(name, ty, builtin) \
137 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
138 return builtin(__rs1); \
139 }
140
141#define __packed_widen_convert(name, rty, ty) \
142 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
143 return __builtin_convertvector(__rs1, rty); \
144 }
145#define __packed_widen_binary_op(name, rty, ty, op) \
146 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, \
147 ty __rs2) { \
148 return __builtin_convertvector(__rs1, rty) \
149 op __builtin_convertvector(__rs2, rty); \
150 }
151#define __packed_widen_mul(name, rty, ty) \
152 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, \
153 ty __rs2) { \
154 return __builtin_convertvector(__rs1, rty) * \
155 __builtin_convertvector(__rs2, rty); \
156 }
157#define __packed_widen_mulsu(name, rty, ty1, ty2, uty) \
158 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty1 __rs1, \
159 ty2 __rs2) { \
160 return __builtin_convertvector(__rs1, rty) * \
161 (rty) __builtin_convertvector(__rs2, uty); \
162 }
163#define __packed_widen_high2(name, rty, ty) \
164 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
165 return (rty)__builtin_shufflevector((ty){0}, __rs1, 0, 2, 1, 3); \
166 }
167#define __packed_widen_high4(name, rty, ty) \
168 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
169 return (rty)__builtin_shufflevector((ty){0}, __rs1, 0, 4, 1, 5, 2, 6, 3, \
170 7); \
171 }
172
173#define __packed_narrow_even2(name, rty, ty, sty) \
174 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
175 return __builtin_convertvector(__rs1, rty); \
176 }
177#define __packed_narrow_even4(name, rty, ty, sty) \
178 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
179 return __builtin_convertvector(__rs1, rty); \
180 }
181#define __packed_narrow_odd2(name, rty, ty, sty, uty) \
182 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
183 return __builtin_shufflevector((sty)__rs1, (sty)__rs1, 1, 3); \
184 }
185#define __packed_narrow_odd4(name, rty, ty, sty, uty) \
186 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
187 return __builtin_shufflevector((sty)__rs1, (sty)__rs1, 1, 3, 5, 7); \
188 }
189
190/* Packed Reverse: reverse the order of the elements. Lowered to a single
191 * rev8/rev16/ppairoe.* by the backend's packed reverse-shuffle handling. */
192#define __packed_reverse2(name, ty) \
193 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
194 return __builtin_shufflevector(__rs1, __rs1, 1, 0); \
195 }
196#define __packed_reverse4(name, ty) \
197 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
198 return __builtin_shufflevector(__rs1, __rs1, 3, 2, 1, 0); \
199 }
200#define __packed_reverse8(name, ty) \
201 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
202 return __builtin_shufflevector(__rs1, __rs1, 7, 6, 5, 4, 3, 2, 1, 0); \
203 }
204
205#define __packed_zip2(name, rty, ty) \
206 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, \
207 ty __rs2) { \
208 return __builtin_shufflevector(__rs1, __rs2, 0, 2, 1, 3); \
209 }
210#define __packed_zip4(name, rty, ty) \
211 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, \
212 ty __rs2) { \
213 return __builtin_shufflevector(__rs1, __rs2, 0, 4, 1, 5, 2, 6, 3, 7); \
214 }
215#define __packed_unzipe2(name, rty, ty) \
216 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
217 return __builtin_shufflevector(__rs1, __rs1, 0, 2); \
218 }
219#define __packed_unzipe4(name, rty, ty) \
220 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
221 return __builtin_shufflevector(__rs1, __rs1, 0, 2, 4, 6); \
222 }
223#define __packed_unzipo2(name, rty, ty) \
224 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
225 return __builtin_shufflevector(__rs1, __rs1, 1, 3); \
226 }
227#define __packed_unzipo4(name, rty, ty) \
228 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
229 return __builtin_shufflevector(__rs1, __rs1, 1, 3, 5, 7); \
230 }
231
232#define __packed_pair_ee4(name, ty) \
233 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, ty __rs2) { \
234 return __builtin_shufflevector(__rs1, __rs2, 0, 4, 2, 6); \
235 }
236#define __packed_pair_eo4(name, ty) \
237 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, ty __rs2) { \
238 return __builtin_shufflevector(__rs1, __rs2, 0, 5, 2, 7); \
239 }
240#define __packed_pair_oe4(name, ty) \
241 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, ty __rs2) { \
242 return __builtin_shufflevector(__rs1, __rs2, 1, 4, 3, 6); \
243 }
244#define __packed_pair_oo4(name, ty) \
245 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, ty __rs2) { \
246 return __builtin_shufflevector(__rs1, __rs2, 1, 5, 3, 7); \
247 }
248#define __packed_pair_ee8(name, ty) \
249 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, ty __rs2) { \
250 return __builtin_shufflevector(__rs1, __rs2, 0, 8, 2, 10, 4, 12, 6, 14); \
251 }
252#define __packed_pair_eo8(name, ty) \
253 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, ty __rs2) { \
254 return __builtin_shufflevector(__rs1, __rs2, 0, 9, 2, 11, 4, 13, 6, 15); \
255 }
256#define __packed_pair_oe8(name, ty) \
257 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, ty __rs2) { \
258 return __builtin_shufflevector(__rs1, __rs2, 1, 8, 3, 10, 5, 12, 7, 14); \
259 }
260#define __packed_pair_oo8(name, ty) \
261 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, ty __rs2) { \
262 return __builtin_shufflevector(__rs1, __rs2, 1, 9, 3, 11, 5, 13, 7, 15); \
263 }
264
265#define __packed_nzip2(name, rty, ty) \
266 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, \
267 ty __rs2) { \
268 return __builtin_shufflevector((rty)__rs1, (rty)__rs2, 0, 4, 2, 6); \
269 }
270#define __packed_nzip4(name, rty, ty) \
271 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, \
272 ty __rs2) { \
273 return __builtin_shufflevector((rty)__rs1, (rty)__rs2, 0, 8, 2, 10, 4, 12, \
274 6, 14); \
275 }
276#define __packed_nziph2(name, rty, ty) \
277 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, \
278 ty __rs2) { \
279 return __builtin_shufflevector((rty)__rs1, (rty)__rs2, 1, 5, 3, 7); \
280 }
281#define __packed_nziph4(name, rty, ty) \
282 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, \
283 ty __rs2) { \
284 return __builtin_shufflevector((rty)__rs1, (rty)__rs2, 1, 9, 3, 11, 5, 13, \
285 7, 15); \
286 }
287
288#define __packed_abdsum(name, rty, ty, builtin) \
289 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, \
290 ty __rs2) { \
291 return builtin(__rs1, __rs2); \
292 }
293
294#define __packed_ternary_builtin_cast(name, rty, ty, builtin) \
295 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(rty __rd, ty __rs1, \
296 ty __rs2) { \
297 return builtin(__rd, __rs1, __rs2); \
298 }
299
300#define __packed_reinterpret(name, rty, ty) \
301 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_preinterpret_##name( \
302 ty __x) { \
303 return __builtin_bit_cast(rty, __x); \
304 }
305
306// clang-format off: macro call sites have no trailing semicolons, which
307// confuses clang-format into a deeply nested expression.
308
309/* Packed Splat (32-bit) */
314
315/* Packed Splat (64-bit) */
322
323/* Packed Addition and Subtraction (32-bit) */
329__packed_binary_op(psub_u8x4, uint8x4_t, -)
331__packed_binary_op(psub_u16x2, uint16x2_t, -)
333__packed_unary_op(pneg_i16x2, int16x2_t, -)
334
335/* Packed Addition and Subtraction (64-bit) */
343__packed_binary_op(psub_u8x8, uint8x8_t, -)
345__packed_binary_op(psub_u16x4, uint16x4_t, -)
347__packed_binary_op(psub_u32x2, uint32x2_t, -)
349__packed_unary_op(pneg_i16x4, int16x4_t, -)
351
352/* Packed Addition with Scalar (32-bit) */
359
360/* Packed Addition with Scalar (64-bit) */
371
372/* Packed Saturating Addition and Subtraction (32-bit) */
373__packed_binary_builtin(psadd_i8x4, int8x4_t, __builtin_elementwise_add_sat)
374__packed_binary_builtin(psadd_i16x2, int16x2_t, __builtin_elementwise_add_sat)
375__packed_binary_builtin(psaddu_u8x4, uint8x4_t, __builtin_elementwise_add_sat)
376__packed_binary_builtin(psaddu_u16x2, uint16x2_t, __builtin_elementwise_add_sat)
377__packed_binary_builtin(pssub_i8x4, int8x4_t, __builtin_elementwise_sub_sat)
378__packed_binary_builtin(pssub_i16x2, int16x2_t, __builtin_elementwise_sub_sat)
379__packed_binary_builtin(pssubu_u8x4, uint8x4_t, __builtin_elementwise_sub_sat)
380__packed_binary_builtin(pssubu_u16x2, uint16x2_t, __builtin_elementwise_sub_sat)
381
382/* Packed Saturating Addition and Subtraction (64-bit) */
383__packed_binary_builtin(psadd_i8x8, int8x8_t, __builtin_elementwise_add_sat)
384__packed_binary_builtin(psadd_i16x4, int16x4_t, __builtin_elementwise_add_sat)
385__packed_binary_builtin(psadd_i32x2, int32x2_t, __builtin_elementwise_add_sat)
386__packed_binary_builtin(psaddu_u8x8, uint8x8_t, __builtin_elementwise_add_sat)
387__packed_binary_builtin(psaddu_u16x4, uint16x4_t, __builtin_elementwise_add_sat)
388__packed_binary_builtin(psaddu_u32x2, uint32x2_t, __builtin_elementwise_add_sat)
389__packed_binary_builtin(pssub_i8x8, int8x8_t, __builtin_elementwise_sub_sat)
390__packed_binary_builtin(pssub_i16x4, int16x4_t, __builtin_elementwise_sub_sat)
391__packed_binary_builtin(pssub_i32x2, int32x2_t, __builtin_elementwise_sub_sat)
392__packed_binary_builtin(pssubu_u8x8, uint8x8_t, __builtin_elementwise_sub_sat)
393__packed_binary_builtin(pssubu_u16x4, uint16x4_t, __builtin_elementwise_sub_sat)
394__packed_binary_builtin(pssubu_u32x2, uint32x2_t, __builtin_elementwise_sub_sat)
395
396/* Packed Shift-Add (32-bit) */
397__packed_sh1add(psh1add_i16x2, int16x2_t)
399__packed_sh1sadd(pssh1sadd_i16x2, int16x2_t)
400
401/* Packed Shift-Add (64-bit) */
403__packed_sh1add(psh1add_u16x4, uint16x4_t)
405__packed_sh1add(psh1add_u32x2, uint32x2_t)
407__packed_sh1sadd(pssh1sadd_i32x2, int32x2_t)
408
409/* Packed Exchanged Addition and Subtraction (32-bit) */
410__packed_binary_builtin(pas_x_i16x2, int16x2_t, __builtin_riscv_pas_x_i16x2)
411__packed_binary_builtin(psa_x_i16x2, int16x2_t, __builtin_riscv_psa_x_i16x2)
412__packed_binary_builtin(psas_x_i16x2, int16x2_t, __builtin_riscv_psas_x_i16x2)
413__packed_binary_builtin(pssa_x_i16x2, int16x2_t, __builtin_riscv_pssa_x_i16x2)
414__packed_binary_builtin(paas_x_i16x2, int16x2_t, __builtin_riscv_paas_x_i16x2)
415__packed_binary_builtin(pasa_x_i16x2, int16x2_t, __builtin_riscv_pasa_x_i16x2)
416
417/* Packed Exchanged Addition and Subtraction (64-bit) */
418__packed_binary_builtin(pas_x_i16x4, int16x4_t, __builtin_riscv_pas_x_i16x4)
419__packed_binary_builtin(psa_x_i16x4, int16x4_t, __builtin_riscv_psa_x_i16x4)
420__packed_binary_builtin(psas_x_i16x4, int16x4_t, __builtin_riscv_psas_x_i16x4)
421__packed_binary_builtin(pssa_x_i16x4, int16x4_t, __builtin_riscv_pssa_x_i16x4)
422__packed_binary_builtin(paas_x_i16x4, int16x4_t, __builtin_riscv_paas_x_i16x4)
423__packed_binary_builtin(pasa_x_i16x4, int16x4_t, __builtin_riscv_pasa_x_i16x4)
424__packed_binary_builtin(pas_x_i32x2, int32x2_t, __builtin_riscv_pas_x_i32x2)
425__packed_binary_builtin(psa_x_i32x2, int32x2_t, __builtin_riscv_psa_x_i32x2)
426__packed_binary_builtin(psas_x_i32x2, int32x2_t, __builtin_riscv_psas_x_i32x2)
427__packed_binary_builtin(pssa_x_i32x2, int32x2_t, __builtin_riscv_pssa_x_i32x2)
428__packed_binary_builtin(paas_x_i32x2, int32x2_t, __builtin_riscv_paas_x_i32x2)
429__packed_binary_builtin(pasa_x_i32x2, int32x2_t, __builtin_riscv_pasa_x_i32x2)
430
431/* Packed Minimum and Maximum (32-bit) */
432__packed_binary_builtin(pmin_i8x4, int8x4_t, __builtin_elementwise_min)
433__packed_binary_builtin(pmin_i16x2, int16x2_t, __builtin_elementwise_min)
434__packed_binary_builtin(pminu_u8x4, uint8x4_t, __builtin_elementwise_min)
435__packed_binary_builtin(pminu_u16x2, uint16x2_t, __builtin_elementwise_min)
436__packed_binary_builtin(pmax_i8x4, int8x4_t, __builtin_elementwise_max)
437__packed_binary_builtin(pmax_i16x2, int16x2_t, __builtin_elementwise_max)
438__packed_binary_builtin(pmaxu_u8x4, uint8x4_t, __builtin_elementwise_max)
439__packed_binary_builtin(pmaxu_u16x2, uint16x2_t, __builtin_elementwise_max)
440
441/* Packed Minimum and Maximum (64-bit) */
442__packed_binary_builtin(pmin_i8x8, int8x8_t, __builtin_elementwise_min)
443__packed_binary_builtin(pmin_i16x4, int16x4_t, __builtin_elementwise_min)
444__packed_binary_builtin(pmin_i32x2, int32x2_t, __builtin_elementwise_min)
445__packed_binary_builtin(pminu_u8x8, uint8x8_t, __builtin_elementwise_min)
446__packed_binary_builtin(pminu_u16x4, uint16x4_t, __builtin_elementwise_min)
447__packed_binary_builtin(pminu_u32x2, uint32x2_t, __builtin_elementwise_min)
448__packed_binary_builtin(pmax_i8x8, int8x8_t, __builtin_elementwise_max)
449__packed_binary_builtin(pmax_i16x4, int16x4_t, __builtin_elementwise_max)
450__packed_binary_builtin(pmax_i32x2, int32x2_t, __builtin_elementwise_max)
451__packed_binary_builtin(pmaxu_u8x8, uint8x8_t, __builtin_elementwise_max)
452__packed_binary_builtin(pmaxu_u16x4, uint16x4_t, __builtin_elementwise_max)
453__packed_binary_builtin(pmaxu_u32x2, uint32x2_t, __builtin_elementwise_max)
454
455/* Packed Comparison (32-bit) */
456__packed_cmp(pmseq_i8x4_u8x4, int8x4_t, uint8x4_t, ==)
457__packed_cmp(pmseq_u8x4_u8x4, uint8x4_t, uint8x4_t, ==)
458__packed_cmp(pmsne_i8x4_u8x4, int8x4_t, uint8x4_t, !=)
459__packed_cmp(pmsne_u8x4_u8x4, uint8x4_t, uint8x4_t, !=)
460__packed_cmp(pmslt_u8x4, int8x4_t, uint8x4_t, <)
461__packed_cmp(pmsltu_u8x4, uint8x4_t, uint8x4_t, <)
462__packed_cmp(pmsgt_u8x4, int8x4_t, uint8x4_t, >)
463__packed_cmp(pmsgtu_u8x4, uint8x4_t, uint8x4_t, >)
464__packed_cmp(pmsge_u8x4, int8x4_t, uint8x4_t, >=)
465__packed_cmp(pmsgeu_u8x4, uint8x4_t, uint8x4_t, >=)
466__packed_cmp(pmsle_u8x4, int8x4_t, uint8x4_t, <=)
467__packed_cmp(pmsleu_u8x4, uint8x4_t, uint8x4_t, <=)
468__packed_cmp(pmseq_i16x2_u16x2, int16x2_t, uint16x2_t, ==)
469__packed_cmp(pmseq_u16x2_u16x2, uint16x2_t, uint16x2_t, ==)
470__packed_cmp(pmsne_i16x2_u16x2, int16x2_t, uint16x2_t, !=)
471__packed_cmp(pmsne_u16x2_u16x2, uint16x2_t, uint16x2_t, !=)
472__packed_cmp(pmslt_u16x2, int16x2_t, uint16x2_t, <)
473__packed_cmp(pmsltu_u16x2, uint16x2_t, uint16x2_t, <)
474__packed_cmp(pmsgt_u16x2, int16x2_t, uint16x2_t, >)
475__packed_cmp(pmsgtu_u16x2, uint16x2_t, uint16x2_t, >)
476__packed_cmp(pmsge_u16x2, int16x2_t, uint16x2_t, >=)
477__packed_cmp(pmsgeu_u16x2, uint16x2_t, uint16x2_t, >=)
478__packed_cmp(pmsle_u16x2, int16x2_t, uint16x2_t, <=)
479__packed_cmp(pmsleu_u16x2, uint16x2_t, uint16x2_t, <=)
480
481/* Packed Comparison (64-bit) */
482__packed_cmp(pmseq_i8x8_u8x8, int8x8_t, uint8x8_t, ==)
483__packed_cmp(pmseq_u8x8_u8x8, uint8x8_t, uint8x8_t, ==)
484__packed_cmp(pmsne_i8x8_u8x8, int8x8_t, uint8x8_t, !=)
485__packed_cmp(pmsne_u8x8_u8x8, uint8x8_t, uint8x8_t, !=)
486__packed_cmp(pmslt_u8x8, int8x8_t, uint8x8_t, <)
487__packed_cmp(pmsltu_u8x8, uint8x8_t, uint8x8_t, <)
488__packed_cmp(pmsgt_u8x8, int8x8_t, uint8x8_t, >)
489__packed_cmp(pmsgtu_u8x8, uint8x8_t, uint8x8_t, >)
490__packed_cmp(pmsge_u8x8, int8x8_t, uint8x8_t, >=)
491__packed_cmp(pmsgeu_u8x8, uint8x8_t, uint8x8_t, >=)
492__packed_cmp(pmsle_u8x8, int8x8_t, uint8x8_t, <=)
493__packed_cmp(pmsleu_u8x8, uint8x8_t, uint8x8_t, <=)
494__packed_cmp(pmseq_i16x4_u16x4, int16x4_t, uint16x4_t, ==)
495__packed_cmp(pmseq_u16x4_u16x4, uint16x4_t, uint16x4_t, ==)
496__packed_cmp(pmsne_i16x4_u16x4, int16x4_t, uint16x4_t, !=)
497__packed_cmp(pmsne_u16x4_u16x4, uint16x4_t, uint16x4_t, !=)
498__packed_cmp(pmslt_u16x4, int16x4_t, uint16x4_t, <)
499__packed_cmp(pmsltu_u16x4, uint16x4_t, uint16x4_t, <)
500__packed_cmp(pmsgt_u16x4, int16x4_t, uint16x4_t, >)
501__packed_cmp(pmsgtu_u16x4, uint16x4_t, uint16x4_t, >)
502__packed_cmp(pmsge_u16x4, int16x4_t, uint16x4_t, >=)
503__packed_cmp(pmsgeu_u16x4, uint16x4_t, uint16x4_t, >=)
504__packed_cmp(pmsle_u16x4, int16x4_t, uint16x4_t, <=)
505__packed_cmp(pmsleu_u16x4, uint16x4_t, uint16x4_t, <=)
506__packed_cmp(pmseq_i32x2_u32x2, int32x2_t, uint32x2_t, ==)
507__packed_cmp(pmseq_u32x2_u32x2, uint32x2_t, uint32x2_t, ==)
508__packed_cmp(pmsne_i32x2_u32x2, int32x2_t, uint32x2_t, !=)
509__packed_cmp(pmsne_u32x2_u32x2, uint32x2_t, uint32x2_t, !=)
510__packed_cmp(pmslt_u32x2, int32x2_t, uint32x2_t, <)
511__packed_cmp(pmsltu_u32x2, uint32x2_t, uint32x2_t, <)
512__packed_cmp(pmsgt_u32x2, int32x2_t, uint32x2_t, >)
513__packed_cmp(pmsgtu_u32x2, uint32x2_t, uint32x2_t, >)
514__packed_cmp(pmsge_u32x2, int32x2_t, uint32x2_t, >=)
515__packed_cmp(pmsgeu_u32x2, uint32x2_t, uint32x2_t, >=)
516__packed_cmp(pmsle_u32x2, int32x2_t, uint32x2_t, <=)
517__packed_cmp(pmsleu_u32x2, uint32x2_t, uint32x2_t, <=)
518
519/* Packed Shifts (32-bit) */
520__packed_shift8(psll_s_u8x4, uint8x4_t, <<)
521__packed_shift8(psll_s_i8x4, int8x4_t, <<)
522__packed_shift16(psll_s_u16x2, uint16x2_t, <<)
523__packed_shift16(psll_s_i16x2, int16x2_t, <<)
524__packed_shift8(psrl_s_u8x4, uint8x4_t, >>)
525__packed_shift16(psrl_s_u16x2, uint16x2_t, >>)
526__packed_shift8(psra_s_i8x4, int8x4_t, >>)
527__packed_shift16(psra_s_i16x2, int16x2_t, >>)
528
529/* Packed Shifts (64-bit) */
530__packed_shift8(psll_s_u8x8, uint8x8_t, <<)
531__packed_shift8(psll_s_i8x8, int8x8_t, <<)
532__packed_shift16(psll_s_u16x4, uint16x4_t, <<)
533__packed_shift16(psll_s_i16x4, int16x4_t, <<)
534__packed_shift32(psll_s_u32x2, uint32x2_t, <<)
535__packed_shift32(psll_s_i32x2, int32x2_t, <<)
536__packed_shift8(psrl_s_u8x8, uint8x8_t, >>)
537__packed_shift16(psrl_s_u16x4, uint16x4_t, >>)
538__packed_shift32(psrl_s_u32x2, uint32x2_t, >>)
539__packed_shift8(psra_s_i8x8, int8x8_t, >>)
540__packed_shift16(psra_s_i16x4, int16x4_t, >>)
541__packed_shift32(psra_s_i32x2, int32x2_t, >>)
542
543/* Packed Saturating and Rounding Shifts (32-bit) */
544__packed_binary_builtin_mixed(pssha_s_i16x2, int16x2_t, int16x2_t, int, __builtin_riscv_pssha_s_i16x2)
545__packed_binary_builtin_mixed(psshar_s_i16x2, int16x2_t, int16x2_t, int, __builtin_riscv_psshar_s_i16x2)
546__packed_binary_builtin_mixed(psshl_s_u16x2, uint16x2_t, uint16x2_t, int, __builtin_riscv_psshl_s_u16x2)
547__packed_binary_builtin_mixed(psshlr_s_u16x2, uint16x2_t, uint16x2_t, int, __builtin_riscv_psshlr_s_u16x2)
548
549/* Packed Saturating and Rounding Shifts (64-bit) */
550__packed_binary_builtin_mixed(pssha_s_i16x4, int16x4_t, int16x4_t, int, __builtin_riscv_pssha_s_i16x4)
551__packed_binary_builtin_mixed(pssha_s_i32x2, int32x2_t, int32x2_t, int, __builtin_riscv_pssha_s_i32x2)
552__packed_binary_builtin_mixed(psshar_s_i16x4, int16x4_t, int16x4_t, int, __builtin_riscv_psshar_s_i16x4)
553__packed_binary_builtin_mixed(psshar_s_i32x2, int32x2_t, int32x2_t, int, __builtin_riscv_psshar_s_i32x2)
554__packed_binary_builtin_mixed(psshl_s_u16x4, uint16x4_t, uint16x4_t, int, __builtin_riscv_psshl_s_u16x4)
555__packed_binary_builtin_mixed(psshl_s_u32x2, uint32x2_t, uint32x2_t, int, __builtin_riscv_psshl_s_u32x2)
556__packed_binary_builtin_mixed(psshlr_s_u16x4, uint16x4_t, uint16x4_t, int, __builtin_riscv_psshlr_s_u16x4)
557__packed_binary_builtin_mixed(psshlr_s_u32x2, uint32x2_t, uint32x2_t, int, __builtin_riscv_psshlr_s_u32x2)
558
559/* Packed Logical Operations (32-bit) */
560__packed_binary_op(pand_i8x4, int8x4_t, &)
561__packed_binary_op(pand_u8x4, uint8x4_t, &)
562__packed_binary_op(pand_i16x2, int16x2_t, &)
563__packed_binary_op(pand_u16x2, uint16x2_t, &)
564__packed_binary_op(por_i8x4, int8x4_t, |)
565__packed_binary_op(por_u8x4, uint8x4_t, |)
566__packed_binary_op(por_i16x2, int16x2_t, |)
567__packed_binary_op(por_u16x2, uint16x2_t, |)
568__packed_binary_op(pxor_i8x4, int8x4_t, ^)
569__packed_binary_op(pxor_u8x4, uint8x4_t, ^)
570__packed_binary_op(pxor_i16x2, int16x2_t, ^)
571__packed_binary_op(pxor_u16x2, uint16x2_t, ^)
572__packed_unary_op(pnot_i8x4, int8x4_t, ~)
573__packed_unary_op(pnot_u8x4, uint8x4_t, ~)
574__packed_unary_op(pnot_i16x2, int16x2_t, ~)
575__packed_unary_op(pnot_u16x2, uint16x2_t, ~)
576
577/* Packed Logical Operations (64-bit) */
578__packed_binary_op(pand_i8x8, int8x8_t, &)
579__packed_binary_op(pand_u8x8, uint8x8_t, &)
580__packed_binary_op(pand_i16x4, int16x4_t, &)
581__packed_binary_op(pand_u16x4, uint16x4_t, &)
582__packed_binary_op(pand_i32x2, int32x2_t, &)
583__packed_binary_op(pand_u32x2, uint32x2_t, &)
584__packed_binary_op(por_i8x8, int8x8_t, |)
585__packed_binary_op(por_u8x8, uint8x8_t, |)
586__packed_binary_op(por_i16x4, int16x4_t, |)
587__packed_binary_op(por_u16x4, uint16x4_t, |)
588__packed_binary_op(por_i32x2, int32x2_t, |)
589__packed_binary_op(por_u32x2, uint32x2_t, |)
590__packed_binary_op(pxor_i8x8, int8x8_t, ^)
591__packed_binary_op(pxor_u8x8, uint8x8_t, ^)
592__packed_binary_op(pxor_i16x4, int16x4_t, ^)
593__packed_binary_op(pxor_u16x4, uint16x4_t, ^)
594__packed_binary_op(pxor_i32x2, int32x2_t, ^)
595__packed_binary_op(pxor_u32x2, uint32x2_t, ^)
596__packed_unary_op(pnot_i8x8, int8x8_t, ~)
597__packed_unary_op(pnot_u8x8, uint8x8_t, ~)
598__packed_unary_op(pnot_i16x4, int16x4_t, ~)
599__packed_unary_op(pnot_u16x4, uint16x4_t, ~)
600__packed_unary_op(pnot_i32x2, int32x2_t, ~)
601__packed_unary_op(pnot_u32x2, uint32x2_t, ~)
602
603/* Packed Widening Convert */
612
613/* Packed Widening Addition and Subtraction */
622
623/* Packed Widening Multiply (32-bit) */
631
632/* Packed Narrowing Convert */
641
642/* Packed Reverse (32-bit) */
643__packed_reverse4(prev_i8x4, int8x4_t)
645__packed_reverse2(prev_i16x2, int16x2_t)
646__packed_reverse2(prev_u16x2, uint16x2_t)
647
648/* Packed Reverse (64-bit) */
649__packed_reverse8(prev_i8x8, int8x8_t)
651__packed_reverse4(prev_i16x4, int16x4_t)
652__packed_reverse4(prev_u16x4, uint16x4_t)
653__packed_reverse2(prev_i32x2, int32x2_t)
654__packed_reverse2(prev_u32x2, uint32x2_t)
655
656/* Packed Zip */
661
662/* Packed Unzip */
663__packed_unzipe4(punzipe_i8x4, int8x4_t, int8x8_t)
664__packed_unzipo4(punzipo_i8x4, int8x4_t, int8x8_t)
667__packed_unzipe2(punzipe_i16x2, int16x2_t, int16x4_t)
668__packed_unzipo2(punzipo_i16x2, int16x2_t, int16x4_t)
671
672/* Packed Pair (32-bit byte forms) */
673__packed_pair_ee4(ppaire_i8x4, int8x4_t)
674__packed_pair_ee4(ppaire_u8x4, uint8x4_t)
675__packed_pair_eo4(ppaireo_i8x4, int8x4_t)
676__packed_pair_eo4(ppaireo_u8x4, uint8x4_t)
677__packed_pair_oe4(ppairoe_i8x4, int8x4_t)
678__packed_pair_oe4(ppairoe_u8x4, uint8x4_t)
679__packed_pair_oo4(ppairo_i8x4, int8x4_t)
680__packed_pair_oo4(ppairo_u8x4, uint8x4_t)
681
682/* Packed Pair (64-bit byte and halfword forms) */
683__packed_pair_ee8(ppaire_i8x8, int8x8_t)
684__packed_pair_ee8(ppaire_u8x8, uint8x8_t)
685__packed_pair_eo8(ppaireo_i8x8, int8x8_t)
686__packed_pair_eo8(ppaireo_u8x8, uint8x8_t)
687__packed_pair_oe8(ppairoe_i8x8, int8x8_t)
688__packed_pair_oe8(ppairoe_u8x8, uint8x8_t)
689__packed_pair_oo8(ppairo_i8x8, int8x8_t)
690__packed_pair_oo8(ppairo_u8x8, uint8x8_t)
691__packed_pair_ee4(ppaire_i16x4, int16x4_t)
692__packed_pair_ee4(ppaire_u16x4, uint16x4_t)
693__packed_pair_eo4(ppaireo_i16x4, int16x4_t)
694__packed_pair_eo4(ppaireo_u16x4, uint16x4_t)
695__packed_pair_oe4(ppairoe_i16x4, int16x4_t)
696__packed_pair_oe4(ppairoe_u16x4, uint16x4_t)
697__packed_pair_oo4(ppairo_i16x4, int16x4_t)
698__packed_pair_oo4(ppairo_u16x4, uint16x4_t)
699
700/* Packed Narrowing Zip (32-bit) */
705
706/* Packed Narrowing Zip (64-bit) */
713__packed_nziph2(pnziph_i16x4, int16x4_t, int32x2_t)
715
716/* Packed Averaging Addition and Subtraction (32-bit) */
717__packed_binary_builtin(paadd_i8x4, int8x4_t, __builtin_riscv_paadd_i8x4)
718__packed_binary_builtin(paadd_i16x2, int16x2_t, __builtin_riscv_paadd_i16x2)
719__packed_binary_builtin(paaddu_u8x4, uint8x4_t, __builtin_riscv_paaddu_u8x4)
720__packed_binary_builtin(paaddu_u16x2, uint16x2_t, __builtin_riscv_paaddu_u16x2)
721__packed_binary_builtin(pasub_i8x4, int8x4_t, __builtin_riscv_pasub_i8x4)
722__packed_binary_builtin(pasub_i16x2, int16x2_t, __builtin_riscv_pasub_i16x2)
723__packed_binary_builtin(pasubu_u8x4, uint8x4_t, __builtin_riscv_pasubu_u8x4)
724__packed_binary_builtin(pasubu_u16x2, uint16x2_t, __builtin_riscv_pasubu_u16x2)
725
726/* Packed Averaging Addition and Subtraction (64-bit) */
727__packed_binary_builtin(paadd_i8x8, int8x8_t, __builtin_riscv_paadd_i8x8)
728__packed_binary_builtin(paadd_i16x4, int16x4_t, __builtin_riscv_paadd_i16x4)
729__packed_binary_builtin(paadd_i32x2, int32x2_t, __builtin_riscv_paadd_i32x2)
730__packed_binary_builtin(paaddu_u8x8, uint8x8_t, __builtin_riscv_paaddu_u8x8)
731__packed_binary_builtin(paaddu_u16x4, uint16x4_t, __builtin_riscv_paaddu_u16x4)
732__packed_binary_builtin(paaddu_u32x2, uint32x2_t, __builtin_riscv_paaddu_u32x2)
733__packed_binary_builtin(pasub_i8x8, int8x8_t, __builtin_riscv_pasub_i8x8)
734__packed_binary_builtin(pasub_i16x4, int16x4_t, __builtin_riscv_pasub_i16x4)
735__packed_binary_builtin(pasub_i32x2, int32x2_t, __builtin_riscv_pasub_i32x2)
736__packed_binary_builtin(pasubu_u8x8, uint8x8_t, __builtin_riscv_pasubu_u8x8)
737__packed_binary_builtin(pasubu_u16x4, uint16x4_t, __builtin_riscv_pasubu_u16x4)
738__packed_binary_builtin(pasubu_u32x2, uint32x2_t, __builtin_riscv_pasubu_u32x2)
739
740/* Packed Absolute Value and Absolute Difference (32-bit) */
743__packed_binary_builtin_cast(pabd_i8x4, int8x4_t, uint8x4_t, __builtin_riscv_pabd_i8x4)
744__packed_binary_builtin_cast(pabd_i16x2, int16x2_t, uint16x2_t, __builtin_riscv_pabd_i16x2)
745__packed_binary_builtin_cast(pabdu_u8x4, uint8x4_t, uint8x4_t, __builtin_riscv_pabdu_u8x4)
746__packed_binary_builtin_cast(pabdu_u16x2, uint16x2_t, uint16x2_t, __builtin_riscv_pabdu_u16x2)
747
748/* Packed Absolute Value and Absolute Difference (64-bit) */
751__packed_binary_builtin_cast(pabd_i8x8, int8x8_t, uint8x8_t, __builtin_riscv_pabd_i8x8)
752__packed_binary_builtin_cast(pabd_i16x4, int16x4_t, uint16x4_t, __builtin_riscv_pabd_i16x4)
753__packed_binary_builtin_cast(pabdu_u8x8, uint8x8_t, uint8x8_t, __builtin_riscv_pabdu_u8x8)
754__packed_binary_builtin_cast(pabdu_u16x4, uint16x4_t, uint16x4_t, __builtin_riscv_pabdu_u16x4)
755
756/* Packed Reduction Sum (32-bit) */
757__packed_reduction(predsum_i8x4_i32, int32_t, int8x4_t, __builtin_riscv_predsum_i8x4_i32)
758__packed_reduction(predsumu_u8x4_u32, uint32_t, uint8x4_t, __builtin_riscv_predsumu_u8x4_u32)
759__packed_reduction(predsum_i16x2_i32, int32_t, int16x2_t, __builtin_riscv_predsum_i16x2_i32)
760__packed_reduction(predsumu_u16x2_u32, uint32_t, uint16x2_t, __builtin_riscv_predsumu_u16x2_u32)
761
762/* Packed Reduction Sum (64-bit) */
763__packed_reduction(predsum_i8x8_i32, int32_t, int8x8_t, __builtin_riscv_predsum_i8x8_i32)
764__packed_reduction(predsumu_u8x8_u32, uint32_t, uint8x8_t, __builtin_riscv_predsumu_u8x8_u32)
765__packed_reduction(predsum_i16x4_i32, int32_t, int16x4_t, __builtin_riscv_predsum_i16x4_i32)
766__packed_reduction(predsumu_u16x4_u32, uint32_t, uint16x4_t, __builtin_riscv_predsumu_u16x4_u32)
767__packed_reduction(predsum_i8x8_i64, int64_t, int8x8_t, __builtin_riscv_predsum_i8x8_i64)
768__packed_reduction(predsumu_u8x8_u64, uint64_t, uint8x8_t, __builtin_riscv_predsumu_u8x8_u64)
769__packed_reduction(predsum_i16x4_i64, int64_t, int16x4_t, __builtin_riscv_predsum_i16x4_i64)
770__packed_reduction(predsumu_u16x4_u64, uint64_t, uint16x4_t, __builtin_riscv_predsumu_u16x4_u64)
771__packed_reduction(predsum_i32x2_i64, int64_t, int32x2_t, __builtin_riscv_predsum_i32x2_i64)
772__packed_reduction(predsumu_u32x2_u64, uint64_t, uint32x2_t, __builtin_riscv_predsumu_u32x2_u64)
773
774/* Packed Merge (32-bit) */
775__packed_merge_builtin(pmerge_u8x4, uint8x4_t, uint8x4_t, __builtin_riscv_pmerge_u8x4)
776__packed_merge_builtin(pmerge_i8x4, int8x4_t, uint8x4_t, __builtin_riscv_pmerge_i8x4)
777__packed_merge_builtin(pmerge_u16x2, uint16x2_t, uint16x2_t, __builtin_riscv_pmerge_u16x2)
778__packed_merge_builtin(pmerge_i16x2, int16x2_t, uint16x2_t, __builtin_riscv_pmerge_i16x2)
779
780/* Packed Merge (64-bit) */
781__packed_merge_builtin(pmerge_u8x8, uint8x8_t, uint8x8_t, __builtin_riscv_pmerge_u8x8)
782__packed_merge_builtin(pmerge_i8x8, int8x8_t, uint8x8_t, __builtin_riscv_pmerge_i8x8)
783__packed_merge_builtin(pmerge_u16x4, uint16x4_t, uint16x4_t, __builtin_riscv_pmerge_u16x4)
784__packed_merge_builtin(pmerge_i16x4, int16x4_t, uint16x4_t, __builtin_riscv_pmerge_i16x4)
785__packed_merge_builtin(pmerge_u32x2, uint32x2_t, uint32x2_t, __builtin_riscv_pmerge_u32x2)
786__packed_merge_builtin(pmerge_i32x2, int32x2_t, uint32x2_t, __builtin_riscv_pmerge_i32x2)
787
788/* Packed Multiply High (32-bit) */
789__packed_binary_builtin(pmulh_i16x2, int16x2_t, __builtin_riscv_pmulh_i16x2)
790__packed_binary_builtin(pmulhr_i16x2, int16x2_t, __builtin_riscv_pmulhr_i16x2)
791__packed_binary_builtin(pmulhu_u16x2, uint16x2_t, __builtin_riscv_pmulhu_u16x2)
792__packed_binary_builtin(pmulhru_u16x2, uint16x2_t, __builtin_riscv_pmulhru_u16x2)
793__packed_binary_builtin_mixed(pmulhsu_i16x2, int16x2_t, int16x2_t, uint16x2_t, __builtin_riscv_pmulhsu_i16x2)
794__packed_binary_builtin_mixed(pmulhrsu_i16x2, int16x2_t, int16x2_t, uint16x2_t, __builtin_riscv_pmulhrsu_i16x2)
795
796/* Packed Multiply High Accumulate (32-bit) */
797__packed_ternary_builtin(pmhacc_i16x2, int16x2_t, __builtin_riscv_pmhacc_i16x2)
798__packed_ternary_builtin(pmhracc_i16x2, int16x2_t, __builtin_riscv_pmhracc_i16x2)
799__packed_ternary_builtin(pmhaccu_u16x2, uint16x2_t, __builtin_riscv_pmhaccu_u16x2)
800__packed_ternary_builtin(pmhraccu_u16x2, uint16x2_t, __builtin_riscv_pmhraccu_u16x2)
801__packed_ternary_builtin_mixed(pmhaccsu_i16x2, int16x2_t, int16x2_t, uint16x2_t, __builtin_riscv_pmhaccsu_i16x2)
802__packed_ternary_builtin_mixed(pmhraccsu_i16x2, int16x2_t, int16x2_t, uint16x2_t, __builtin_riscv_pmhraccsu_i16x2)
803
804/* Packed Multiply High (64-bit) */
805__packed_binary_builtin(pmulh_i16x4, int16x4_t, __builtin_riscv_pmulh_i16x4)
806__packed_binary_builtin(pmulh_i32x2, int32x2_t, __builtin_riscv_pmulh_i32x2)
807__packed_binary_builtin(pmulhr_i16x4, int16x4_t, __builtin_riscv_pmulhr_i16x4)
808__packed_binary_builtin(pmulhr_i32x2, int32x2_t, __builtin_riscv_pmulhr_i32x2)
809__packed_binary_builtin(pmulhu_u16x4, uint16x4_t, __builtin_riscv_pmulhu_u16x4)
810__packed_binary_builtin(pmulhu_u32x2, uint32x2_t, __builtin_riscv_pmulhu_u32x2)
811__packed_binary_builtin(pmulhru_u16x4, uint16x4_t, __builtin_riscv_pmulhru_u16x4)
812__packed_binary_builtin(pmulhru_u32x2, uint32x2_t, __builtin_riscv_pmulhru_u32x2)
813__packed_binary_builtin_mixed(pmulhsu_i16x4, int16x4_t, int16x4_t, uint16x4_t, __builtin_riscv_pmulhsu_i16x4)
814__packed_binary_builtin_mixed(pmulhsu_i32x2, int32x2_t, int32x2_t, uint32x2_t, __builtin_riscv_pmulhsu_i32x2)
815__packed_binary_builtin_mixed(pmulhrsu_i16x4, int16x4_t, int16x4_t, uint16x4_t, __builtin_riscv_pmulhrsu_i16x4)
816__packed_binary_builtin_mixed(pmulhrsu_i32x2, int32x2_t, int32x2_t, uint32x2_t, __builtin_riscv_pmulhrsu_i32x2)
817
818/* Packed Multiply High Accumulate (64-bit) */
819__packed_ternary_builtin(pmhacc_i16x4, int16x4_t, __builtin_riscv_pmhacc_i16x4)
820__packed_ternary_builtin(pmhacc_i32x2, int32x2_t, __builtin_riscv_pmhacc_i32x2)
821__packed_ternary_builtin(pmhracc_i16x4, int16x4_t, __builtin_riscv_pmhracc_i16x4)
822__packed_ternary_builtin(pmhracc_i32x2, int32x2_t, __builtin_riscv_pmhracc_i32x2)
823__packed_ternary_builtin(pmhaccu_u16x4, uint16x4_t, __builtin_riscv_pmhaccu_u16x4)
824__packed_ternary_builtin(pmhaccu_u32x2, uint32x2_t, __builtin_riscv_pmhaccu_u32x2)
825__packed_ternary_builtin(pmhraccu_u16x4, uint16x4_t, __builtin_riscv_pmhraccu_u16x4)
826__packed_ternary_builtin(pmhraccu_u32x2, uint32x2_t, __builtin_riscv_pmhraccu_u32x2)
827__packed_ternary_builtin_mixed(pmhaccsu_i16x4, int16x4_t, int16x4_t, uint16x4_t, __builtin_riscv_pmhaccsu_i16x4)
828__packed_ternary_builtin_mixed(pmhaccsu_i32x2, int32x2_t, int32x2_t, uint32x2_t, __builtin_riscv_pmhaccsu_i32x2)
829__packed_ternary_builtin_mixed(pmhraccsu_i16x4, int16x4_t, int16x4_t, uint16x4_t, __builtin_riscv_pmhraccsu_i16x4)
830__packed_ternary_builtin_mixed(pmhraccsu_i32x2, int32x2_t, int32x2_t, uint32x2_t, __builtin_riscv_pmhraccsu_i32x2)
831
832/* Packed Absolute Difference Sum (32-bit) */
833__packed_abdsum(pabdsumu_u8x4_u32, uint32_t, uint8x4_t, __builtin_riscv_pabdsumu_u8x4_u32)
834__packed_ternary_builtin_cast(pabdsumau_u8x4_u32, uint32_t, uint8x4_t, __builtin_riscv_pabdsumau_u8x4_u32)
835
836/* Packed Absolute Difference Sum (64-bit) */
837__packed_abdsum(pabdsumu_u8x8_u32, uint32_t, uint8x8_t, __builtin_riscv_pabdsumu_u8x8_u32)
838__packed_abdsum(pabdsumu_u8x8_u64, uint64_t, uint8x8_t, __builtin_riscv_pabdsumu_u8x8_u64)
839__packed_ternary_builtin_cast(pabdsumau_u8x8_u32, uint32_t, uint8x8_t, __builtin_riscv_pabdsumau_u8x8_u32)
840__packed_ternary_builtin_cast(pabdsumau_u8x8_u64, uint64_t, uint8x8_t, __builtin_riscv_pabdsumau_u8x8_u64)
841
842/* Packed Saturating Absolute Value (32-bit) */
843__packed_unary_builtin(psabs_i8x4, int8x4_t, __builtin_riscv_psabs_i8x4)
844__packed_unary_builtin(psabs_i16x2, int16x2_t, __builtin_riscv_psabs_i16x2)
845
846/* Packed Saturating Absolute Value (64-bit) */
847__packed_unary_builtin(psabs_i8x8, int8x8_t, __builtin_riscv_psabs_i8x8)
848__packed_unary_builtin(psabs_i16x4, int16x4_t, __builtin_riscv_psabs_i16x4)
849
850/* Packed Sign and Zero Extend (32-bit) */
851__packed_unary_builtin(psext_b_i16x2, int16x2_t, __builtin_riscv_psext_b_i16x2)
852__packed_unary_builtin(pzext_b_u16x2, uint16x2_t, __builtin_riscv_pzext_b_u16x2)
853
854/* Packed Sign and Zero Extend (64-bit) */
855__packed_unary_builtin(psext_b_i16x4, int16x4_t, __builtin_riscv_psext_b_i16x4)
856__packed_unary_builtin(psext_b_i32x2, int32x2_t, __builtin_riscv_psext_b_i32x2)
857__packed_unary_builtin(psext_h_i32x2, int32x2_t, __builtin_riscv_psext_h_i32x2)
858__packed_unary_builtin(pzext_b_u16x4, uint16x4_t, __builtin_riscv_pzext_b_u16x4)
859__packed_unary_builtin(pzext_h_u32x2, uint32x2_t, __builtin_riscv_pzext_h_u32x2)
860
861/* Packed "Q-format" Multiplication (32-bit) */
862__packed_binary_builtin(pmulq_i16x2, int16x2_t, __builtin_riscv_pmulq_i16x2)
863__packed_binary_builtin(pmulqr_i16x2, int16x2_t, __builtin_riscv_pmulqr_i16x2)
864
865/* Packed "Q-format" Multiplication (64-bit) */
866__packed_binary_builtin(pmulq_i16x4, int16x4_t, __builtin_riscv_pmulq_i16x4)
867__packed_binary_builtin(pmulqr_i16x4, int16x4_t, __builtin_riscv_pmulqr_i16x4)
868__packed_binary_builtin(pmulq_i32x2, int32x2_t, __builtin_riscv_pmulq_i32x2)
869__packed_binary_builtin(pmulqr_i32x2, int32x2_t, __builtin_riscv_pmulqr_i32x2)
870
871/* Packed Multiply Parts (32-bit) */
872__packed_binary_builtin_mixed(pmul_b00_i16x2, int16x2_t, int8x4_t, int8x4_t, __builtin_riscv_pmul_b00_i16x2)
873__packed_binary_builtin_mixed(pmul_b01_i16x2, int16x2_t, int8x4_t, int8x4_t, __builtin_riscv_pmul_b01_i16x2)
874__packed_binary_builtin_mixed(pmul_b11_i16x2, int16x2_t, int8x4_t, int8x4_t, __builtin_riscv_pmul_b11_i16x2)
875__packed_binary_builtin_mixed(pmulu_b00_u16x2, uint16x2_t, uint8x4_t, uint8x4_t, __builtin_riscv_pmulu_b00_u16x2)
876__packed_binary_builtin_mixed(pmulu_b01_u16x2, uint16x2_t, uint8x4_t, uint8x4_t, __builtin_riscv_pmulu_b01_u16x2)
877__packed_binary_builtin_mixed(pmulu_b11_u16x2, uint16x2_t, uint8x4_t, uint8x4_t, __builtin_riscv_pmulu_b11_u16x2)
878__packed_binary_builtin_mixed(pmulsu_b00_i16x2, int16x2_t, int8x4_t, uint8x4_t, __builtin_riscv_pmulsu_b00_i16x2)
879__packed_binary_builtin_mixed(pmulsu_b11_i16x2, int16x2_t, int8x4_t, uint8x4_t, __builtin_riscv_pmulsu_b11_i16x2)
880__packed_binary_builtin_mixed(mul_h00_i32, int32_t, int16x2_t, int16x2_t, __builtin_riscv_mul_h00_i32)
881__packed_binary_builtin_mixed(mul_h01_i32, int32_t, int16x2_t, int16x2_t, __builtin_riscv_mul_h01_i32)
882__packed_binary_builtin_mixed(mul_h11_i32, int32_t, int16x2_t, int16x2_t, __builtin_riscv_mul_h11_i32)
883__packed_binary_builtin_mixed(mulu_h00_u32, uint32_t, uint16x2_t, uint16x2_t, __builtin_riscv_mulu_h00_u32)
884__packed_binary_builtin_mixed(mulu_h01_u32, uint32_t, uint16x2_t, uint16x2_t, __builtin_riscv_mulu_h01_u32)
885__packed_binary_builtin_mixed(mulu_h11_u32, uint32_t, uint16x2_t, uint16x2_t, __builtin_riscv_mulu_h11_u32)
886__packed_binary_builtin_mixed(mulsu_h00_i32, int32_t, int16x2_t, uint16x2_t, __builtin_riscv_mulsu_h00_i32)
887__packed_binary_builtin_mixed(mulsu_h11_i32, int32_t, int16x2_t, uint16x2_t, __builtin_riscv_mulsu_h11_i32)
888
889/* Packed Multiply Parts (64-bit) */
890__packed_binary_builtin_mixed(pmul_b00_i16x4, int16x4_t, int8x8_t, int8x8_t, __builtin_riscv_pmul_b00_i16x4)
891__packed_binary_builtin_mixed(pmul_b01_i16x4, int16x4_t, int8x8_t, int8x8_t, __builtin_riscv_pmul_b01_i16x4)
892__packed_binary_builtin_mixed(pmul_b11_i16x4, int16x4_t, int8x8_t, int8x8_t, __builtin_riscv_pmul_b11_i16x4)
893__packed_binary_builtin_mixed(pmulu_b00_u16x4, uint16x4_t, uint8x8_t, uint8x8_t, __builtin_riscv_pmulu_b00_u16x4)
894__packed_binary_builtin_mixed(pmulu_b01_u16x4, uint16x4_t, uint8x8_t, uint8x8_t, __builtin_riscv_pmulu_b01_u16x4)
895__packed_binary_builtin_mixed(pmulu_b11_u16x4, uint16x4_t, uint8x8_t, uint8x8_t, __builtin_riscv_pmulu_b11_u16x4)
896__packed_binary_builtin_mixed(pmulsu_b00_i16x4, int16x4_t, int8x8_t, uint8x8_t, __builtin_riscv_pmulsu_b00_i16x4)
897__packed_binary_builtin_mixed(pmulsu_b11_i16x4, int16x4_t, int8x8_t, uint8x8_t, __builtin_riscv_pmulsu_b11_i16x4)
898__packed_binary_builtin_mixed(pmul_h00_i32x2, int32x2_t, int16x4_t, int16x4_t, __builtin_riscv_pmul_h00_i32x2)
899__packed_binary_builtin_mixed(pmul_h01_i32x2, int32x2_t, int16x4_t, int16x4_t, __builtin_riscv_pmul_h01_i32x2)
900__packed_binary_builtin_mixed(pmul_h11_i32x2, int32x2_t, int16x4_t, int16x4_t, __builtin_riscv_pmul_h11_i32x2)
901__packed_binary_builtin_mixed(pmulu_h00_u32x2, uint32x2_t, uint16x4_t, uint16x4_t, __builtin_riscv_pmulu_h00_u32x2)
902__packed_binary_builtin_mixed(pmulu_h01_u32x2, uint32x2_t, uint16x4_t, uint16x4_t, __builtin_riscv_pmulu_h01_u32x2)
903__packed_binary_builtin_mixed(pmulu_h11_u32x2, uint32x2_t, uint16x4_t, uint16x4_t, __builtin_riscv_pmulu_h11_u32x2)
904__packed_binary_builtin_mixed(pmulsu_h00_i32x2, int32x2_t, int16x4_t, uint16x4_t, __builtin_riscv_pmulsu_h00_i32x2)
905__packed_binary_builtin_mixed(pmulsu_h11_i32x2, int32x2_t, int16x4_t, uint16x4_t, __builtin_riscv_pmulsu_h11_i32x2)
906__packed_binary_builtin_mixed(mul_w00_i64, int64_t, int32x2_t, int32x2_t, __builtin_riscv_mul_w00_i64)
907__packed_binary_builtin_mixed(mul_w01_i64, int64_t, int32x2_t, int32x2_t, __builtin_riscv_mul_w01_i64)
908__packed_binary_builtin_mixed(mul_w11_i64, int64_t, int32x2_t, int32x2_t, __builtin_riscv_mul_w11_i64)
909__packed_binary_builtin_mixed(mulu_w00_u64, uint64_t, uint32x2_t, uint32x2_t, __builtin_riscv_mulu_w00_u64)
910__packed_binary_builtin_mixed(mulu_w01_u64, uint64_t, uint32x2_t, uint32x2_t, __builtin_riscv_mulu_w01_u64)
911__packed_binary_builtin_mixed(mulu_w11_u64, uint64_t, uint32x2_t, uint32x2_t, __builtin_riscv_mulu_w11_u64)
912__packed_binary_builtin_mixed(mulsu_w00_i64, int64_t, int32x2_t, uint32x2_t, __builtin_riscv_mulsu_w00_i64)
913__packed_binary_builtin_mixed(mulsu_w11_i64, int64_t, int32x2_t, uint32x2_t, __builtin_riscv_mulsu_w11_i64)
914
915/* Packed "Q-format" Multiply Parts Accumulate (32-bit) */
916__packed_ternary_builtin_cast(mqacc_h00_i32, int, int16x2_t, __builtin_riscv_mqacc_h00_i32)
917__packed_ternary_builtin_cast(mqacc_h01_i32, int, int16x2_t, __builtin_riscv_mqacc_h01_i32)
918__packed_ternary_builtin_cast(mqacc_h11_i32, int, int16x2_t, __builtin_riscv_mqacc_h11_i32)
919__packed_ternary_builtin_cast(mqracc_h00_i32, int, int16x2_t, __builtin_riscv_mqracc_h00_i32)
920__packed_ternary_builtin_cast(mqracc_h01_i32, int, int16x2_t, __builtin_riscv_mqracc_h01_i32)
921__packed_ternary_builtin_cast(mqracc_h11_i32, int, int16x2_t, __builtin_riscv_mqracc_h11_i32)
922
923/* Packed "Q-format" Multiply Parts Accumulate (64-bit) */
924__packed_ternary_builtin_cast(pmqacc_h00_i32x2, int32x2_t, int16x4_t, __builtin_riscv_pmqacc_h00_i32x2)
925__packed_ternary_builtin_cast(pmqacc_h01_i32x2, int32x2_t, int16x4_t, __builtin_riscv_pmqacc_h01_i32x2)
926__packed_ternary_builtin_cast(pmqacc_h11_i32x2, int32x2_t, int16x4_t, __builtin_riscv_pmqacc_h11_i32x2)
927__packed_ternary_builtin_cast(pmqracc_h00_i32x2, int32x2_t, int16x4_t, __builtin_riscv_pmqracc_h00_i32x2)
928__packed_ternary_builtin_cast(pmqracc_h01_i32x2, int32x2_t, int16x4_t, __builtin_riscv_pmqracc_h01_i32x2)
929__packed_ternary_builtin_cast(pmqracc_h11_i32x2, int32x2_t, int16x4_t, __builtin_riscv_pmqracc_h11_i32x2)
930__packed_ternary_builtin_cast(mqacc_w00_i64, int64_t, int32x2_t, __builtin_riscv_mqacc_w00_i64)
931__packed_ternary_builtin_cast(mqacc_w01_i64, int64_t, int32x2_t, __builtin_riscv_mqacc_w01_i64)
932__packed_ternary_builtin_cast(mqacc_w11_i64, int64_t, int32x2_t, __builtin_riscv_mqacc_w11_i64)
933__packed_ternary_builtin_cast(mqracc_w00_i64, int64_t, int32x2_t, __builtin_riscv_mqracc_w00_i64)
934__packed_ternary_builtin_cast(mqracc_w01_i64, int64_t, int32x2_t, __builtin_riscv_mqracc_w01_i64)
935__packed_ternary_builtin_cast(mqracc_w11_i64, int64_t, int32x2_t, __builtin_riscv_mqracc_w11_i64)
936
937/* Packed Narrowing Clip Pair (32-bit) */
938__packed_binary_builtin_cast(pnclipp_i8x4, int16x2_t, int8x4_t, __builtin_riscv_pnclipp_i8x4)
939__packed_binary_builtin_cast(pnclipup_u8x4, uint16x2_t, uint8x4_t, __builtin_riscv_pnclipup_u8x4)
940__packed_binary_builtin_cast(pnclipp_i16x2, int, int16x2_t, __builtin_riscv_pnclipp_i16x2)
941__packed_binary_builtin_cast(pnclipup_u16x2, unsigned int, uint16x2_t, __builtin_riscv_pnclipup_u16x2)
942
943/* Packed Narrowing Clip Pair (64-bit) */
944__packed_binary_builtin_cast(pnclipp_i8x8, int16x4_t, int8x8_t, __builtin_riscv_pnclipp_i8x8)
945__packed_binary_builtin_cast(pnclipup_u8x8, uint16x4_t, uint8x8_t, __builtin_riscv_pnclipup_u8x8)
946__packed_binary_builtin_cast(pnclipp_i16x4, int32x2_t, int16x4_t, __builtin_riscv_pnclipp_i16x4)
947__packed_binary_builtin_cast(pnclipup_u16x4, uint32x2_t, uint16x4_t, __builtin_riscv_pnclipup_u16x4)
948__packed_binary_builtin_cast(pnclipp_i32x2, int64_t, int32x2_t, __builtin_riscv_pnclipp_i32x2)
949__packed_binary_builtin_cast(pnclipup_u32x2, uint64_t, uint32x2_t, __builtin_riscv_pnclipup_u32x2)
950
951/* Reinterpret Casts, Packed <-> Scalar (32-bit) */
968
969/* Reinterpret Casts, Packed <-> Scalar (64-bit) */
970__packed_reinterpret(u8x8_u64, uint64_t, uint8x8_t)
971__packed_reinterpret(u16x4_u64, uint64_t, uint16x4_t)
972__packed_reinterpret(u32x2_u64, uint64_t, uint32x2_t)
973__packed_reinterpret(i8x8_u64, uint64_t, int8x8_t)
974__packed_reinterpret(i16x4_u64, uint64_t, int16x4_t)
975__packed_reinterpret(i32x2_u64, uint64_t, int32x2_t)
976__packed_reinterpret(u8x8_i64, int64_t, uint8x8_t)
977__packed_reinterpret(u16x4_i64, int64_t, uint16x4_t)
978__packed_reinterpret(u32x2_i64, int64_t, uint32x2_t)
979__packed_reinterpret(i8x8_i64, int64_t, int8x8_t)
980__packed_reinterpret(i16x4_i64, int64_t, int16x4_t)
981__packed_reinterpret(i32x2_i64, int64_t, int32x2_t)
982__packed_reinterpret(u64_u8x8, uint8x8_t, uint64_t)
983__packed_reinterpret(u64_u16x4, uint16x4_t, uint64_t)
984__packed_reinterpret(u64_u32x2, uint32x2_t, uint64_t)
985__packed_reinterpret(u64_i8x8, int8x8_t, uint64_t)
986__packed_reinterpret(u64_i16x4, int16x4_t, uint64_t)
987__packed_reinterpret(u64_i32x2, int32x2_t, uint64_t)
988__packed_reinterpret(i64_u8x8, uint8x8_t, int64_t)
989__packed_reinterpret(i64_u16x4, uint16x4_t, int64_t)
990__packed_reinterpret(i64_u32x2, uint32x2_t, int64_t)
991__packed_reinterpret(i64_i8x8, int8x8_t, int64_t)
992__packed_reinterpret(i64_i16x4, int16x4_t, int64_t)
993__packed_reinterpret(i64_i32x2, int32x2_t, int64_t)
994
995/* Reinterpret Casts, Packed <-> Packed (32-bit) */
1008
1009/* Reinterpret Casts, Packed <-> Packed (64-bit) */
1040
1041// clang-format on
1042
1043#undef __packed_splat2
1044#undef __packed_splat4
1045#undef __packed_splat8
1046#undef __packed_splat
1047#undef __packed_shift
1048#undef __packed_shift8
1049#undef __packed_shift16
1050#undef __packed_shift32
1051#undef __packed_scalar_binary_op
1052#undef __packed_binary_op
1053#undef __packed_unary_op
1054#undef __packed_binary_builtin
1055#undef __packed_binary_builtin_mixed
1056#undef __packed_ternary_builtin
1057#undef __packed_ternary_builtin_mixed
1058#undef __packed_sh1add
1059#undef __packed_sh1sadd
1060#undef __packed_cmp
1061#undef __packed_pabs
1062#undef __packed_binary_builtin_cast
1063#undef __packed_reduction
1064#undef __packed_merge_builtin
1065#undef __packed_unary_builtin
1066#undef __packed_widen_convert
1067#undef __packed_widen_binary_op
1068#undef __packed_widen_mul
1069#undef __packed_widen_mulsu
1070#undef __packed_widen_high2
1071#undef __packed_widen_high4
1072#undef __packed_narrow_even2
1073#undef __packed_narrow_even4
1074#undef __packed_narrow_odd2
1075#undef __packed_narrow_odd4
1076#undef __packed_reverse2
1077#undef __packed_reverse4
1078#undef __packed_reverse8
1079#undef __packed_zip2
1080#undef __packed_zip4
1081#undef __packed_unzipe2
1082#undef __packed_unzipe4
1083#undef __packed_unzipo2
1084#undef __packed_unzipo4
1085#undef __packed_pair_ee4
1086#undef __packed_pair_eo4
1087#undef __packed_pair_oe4
1088#undef __packed_pair_oo4
1089#undef __packed_pair_ee8
1090#undef __packed_pair_eo8
1091#undef __packed_pair_oe8
1092#undef __packed_pair_oo8
1093#undef __packed_nzip2
1094#undef __packed_nzip4
1095#undef __packed_nziph2
1096#undef __packed_nziph4
1097#undef __packed_abdsum
1098#undef __packed_ternary_builtin_cast
1099#undef __packed_reinterpret
1100#undef __DEFAULT_FN_ATTRS
1101
1102#if defined(__cplusplus)
1103}
1104#endif
1105
1106#endif /* __RISCV_PACKED_SIMD_H */
#define __packed_pair_oe8(name, ty)
#define __packed_cmp(name, ty, rty, op)
#define __packed_widen_convert(name, rty, ty)
#define __packed_unary_builtin(name, ty, builtin)
#define __packed_widen_mulsu(name, rty, ty1, ty2, uty)
#define __packed_unzipo2(name, rty, ty)
__packed_splat4 int16x2_t
#define __packed_binary_op(name, ty, op)
#define __packed_reinterpret(name, rty, ty)
#define __packed_splat2(ty, x)
int8_t int8x4_t __attribute__((__vector_size__(4)))
#define __packed_reduction(name, rty, ty, builtin)
#define __packed_shift8(name, ty, op)
#define __packed_binary_builtin_mixed(name, rty, ty1, ty2, builtin)
#define __packed_nziph2(name, rty, ty)
__packed_splat4 __packed_splat2 __packed_splat8 __packed_splat4 __packed_splat2 uint16x4_t
#define __packed_reverse2(name, ty)
#define __packed_pair_ee4(name, ty)
#define __packed_splat8(ty, x)
__packed_splat4 __packed_splat2 __packed_splat8 __packed_splat4 int32_t
__packed_splat4 int16_t
#define __packed_merge_builtin(name, ty, mask_ty, builtin)
#define __packed_scalar_binary_op(name, ty, scalar_ty, op, splat)
#define __packed_shift16(name, ty, op)
#define __packed_pair_eo4(name, ty)
#define __packed_nzip2(name, rty, ty)
__packed_splat4 __packed_splat2 __packed_splat8 __packed_splat4 __packed_splat2 uint8_t
__packed_splat4 __packed_splat2 __packed_splat8 __packed_splat4 __packed_splat2 __packed_splat4 uint16_t
#define __packed_pair_eo8(name, ty)
__packed_splat4 __packed_splat2 __packed_splat8 __packed_splat4 __packed_splat2 uint32x2_t
#define __packed_reverse8(name, ty)
#define __packed_binary_builtin(name, ty, builtin)
#define __packed_pair_oe4(name, ty)
__packed_splat4 __packed_splat2 __packed_splat8 __packed_splat4 __packed_splat2 __packed_splat4 __packed_splat2 __packed_splat8 __packed_splat4 uint32_t
#define __packed_nziph4(name, rty, ty)
#define __packed_narrow_even2(name, rty, ty, sty)
#define __packed_widen_high4(name, rty, ty)
#define __packed_ternary_builtin(name, ty, builtin)
#define __packed_unary_op(name, ty, op)
#define __packed_pair_oo4(name, ty)
#define __packed_pair_ee8(name, ty)
#define __packed_unzipe4(name, rty, ty)
#define __packed_sh1add(name, ty)
#define __packed_pabs(name, ty, rty)
__packed_splat4 __packed_splat2 __packed_splat8 __packed_splat4 __packed_splat2 uint16x2_t
#define __packed_sh1sadd(name, ty)
#define __packed_unzipe2(name, rty, ty)
#define __packed_unzipo4(name, rty, ty)
#define __packed_widen_high2(name, rty, ty)
#define __packed_ternary_builtin_mixed(name, rty, ty1, ty2, builtin)
#define __packed_pair_oo8(name, ty)
#define __packed_shift32(name, ty, op)
#define __packed_nzip4(name, rty, ty)
__packed_splat4 __packed_splat2 __packed_splat8 __packed_splat4 int32x2_t
#define __packed_zip4(name, rty, ty)
#define __packed_splat(name, ty, scalar_ty, splat)
#define __packed_narrow_odd2(name, rty, ty, sty, uty)
__packed_splat4 __packed_splat2 int8x8_t
#define __packed_abdsum(name, rty, ty, builtin)
#define __packed_widen_binary_op(name, rty, ty, op)
#define __packed_binary_builtin_cast(name, ty, rty, builtin)
#define __packed_ternary_builtin_cast(name, rty, ty, builtin)
#define __packed_narrow_even4(name, rty, ty, sty)
__packed_splat4 __packed_splat2 __packed_splat8 __packed_splat4 __packed_splat2 uint8x4_t
#define __packed_narrow_odd4(name, rty, ty, sty, uty)
#define __packed_widen_mul(name, rty, ty)
__packed_splat4 __packed_splat2 __packed_splat8 __packed_splat4 __packed_splat2 uint8x8_t
#define __packed_zip2(name, rty, ty)
#define __packed_splat4(ty, x)
__packed_splat4 __packed_splat2 __packed_splat8 int16x4_t
#define __packed_reverse4(name, ty)