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_sh1add(name, ty) \
75 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, ty __rs2) { \
76 return (__rs1 << 1) + __rs2; \
77 }
78
79/* TODO: switch to sadd_sat(__builtin_elementwise_shl_sat(a, 1), b) once a
80 * generic elementwise shl_sat builtin exists. sadd_sat(a, a) is equivalent
81 * for signed types and the backend's saturating_shl1 PatFrags matches both
82 * shapes. */
83#define __packed_sh1sadd(name, ty) \
84 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, ty __rs2) { \
85 return __builtin_elementwise_add_sat( \
86 __builtin_elementwise_add_sat(__rs1, __rs1), __rs2); \
87 }
88
89#define __packed_cmp(name, ty, rty, op) \
90 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, \
91 ty __rs2) { \
92 return (rty)(__rs1 op __rs2); \
93 }
94
95#define __packed_pabs(name, ty, rty) \
96 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
97 return (rty)__builtin_elementwise_abs(__rs1); \
98 }
99
100#define __packed_binary_builtin_cast(name, ty, rty, builtin) \
101 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, \
102 ty __rs2) { \
103 return (rty)builtin(__rs1, __rs2); \
104 }
105
106#define __packed_reduction(name, rty, ty, builtin) \
107 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, \
108 rty __rs2) { \
109 return builtin(__rs1, __rs2); \
110 }
111
112#define __packed_merge_builtin(name, ty, mask_ty, builtin) \
113 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, ty __rs2, \
114 mask_ty __rd) { \
115 return (ty)builtin(__rs1, __rs2, __rd); \
116 }
117
118#define __packed_psabs(name, ty, builtin) \
119 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
120 return builtin(__rs1); \
121 }
122
123#define __packed_widen_convert(name, rty, ty) \
124 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
125 return __builtin_convertvector(__rs1, rty); \
126 }
127#define __packed_widen_high2(name, rty, ty) \
128 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
129 return (rty)__builtin_shufflevector((ty){0}, __rs1, 0, 2, 1, 3); \
130 }
131#define __packed_widen_high4(name, rty, ty) \
132 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
133 return (rty)__builtin_shufflevector((ty){0}, __rs1, 0, 4, 1, 5, 2, 6, 3, \
134 7); \
135 }
136
137#if __riscv_xlen == 64
138#define __packed_narrow_even2(name, rty, ty, sty) \
139 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
140 return __builtin_shufflevector((sty)__rs1, (sty)__rs1, 0, 2); \
141 }
142#define __packed_narrow_even4(name, rty, ty, sty) \
143 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
144 return __builtin_shufflevector((sty)__rs1, (sty)__rs1, 0, 2, 4, 6); \
145 }
146#define __packed_narrow_odd2(name, rty, ty, sty, uty) \
147 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
148 return __builtin_shufflevector((sty)__rs1, (sty)__rs1, 1, 3); \
149 }
150#define __packed_narrow_odd4(name, rty, ty, sty, uty) \
151 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
152 return __builtin_shufflevector((sty)__rs1, (sty)__rs1, 1, 3, 5, 7); \
153 }
154#else
155#define __packed_narrow_even2(name, rty, ty, sty) \
156 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
157 return __builtin_convertvector(__rs1, rty); \
158 }
159#define __packed_narrow_even4(name, rty, ty, sty) \
160 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
161 return __builtin_convertvector(__rs1, rty); \
162 }
163#define __packed_narrow_odd2(name, rty, ty, sty, uty) \
164 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
165 return __builtin_convertvector(((uty)__rs1) >> 16, rty); \
166 }
167#define __packed_narrow_odd4(name, rty, ty, sty, uty) \
168 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
169 return __builtin_convertvector(((uty)__rs1) >> 8, rty); \
170 }
171#endif
172
173/* Packed Reverse: reverse the order of the elements. Lowered to a single
174 * rev8/rev16/ppairoe.* by the backend's packed reverse-shuffle handling. */
175#define __packed_reverse2(name, ty) \
176 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
177 return __builtin_shufflevector(__rs1, __rs1, 1, 0); \
178 }
179#define __packed_reverse4(name, ty) \
180 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
181 return __builtin_shufflevector(__rs1, __rs1, 3, 2, 1, 0); \
182 }
183#define __packed_reverse8(name, ty) \
184 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
185 return __builtin_shufflevector(__rs1, __rs1, 7, 6, 5, 4, 3, 2, 1, 0); \
186 }
187
188#define __packed_zip2(name, rty, ty) \
189 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, \
190 ty __rs2) { \
191 return __builtin_shufflevector(__rs1, __rs2, 0, 2, 1, 3); \
192 }
193#define __packed_zip4(name, rty, ty) \
194 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, \
195 ty __rs2) { \
196 return __builtin_shufflevector(__rs1, __rs2, 0, 4, 1, 5, 2, 6, 3, 7); \
197 }
198#define __packed_unzipe2(name, rty, ty) \
199 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
200 return __builtin_shufflevector(__rs1, __rs1, 0, 2); \
201 }
202#define __packed_unzipe4(name, rty, ty) \
203 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
204 return __builtin_shufflevector(__rs1, __rs1, 0, 2, 4, 6); \
205 }
206#define __packed_unzipo2(name, rty, ty) \
207 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
208 return __builtin_shufflevector(__rs1, __rs1, 1, 3); \
209 }
210#define __packed_unzipo4(name, rty, ty) \
211 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
212 return __builtin_shufflevector(__rs1, __rs1, 1, 3, 5, 7); \
213 }
214
215#define __packed_nzip2(name, rty, ty) \
216 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, \
217 ty __rs2) { \
218 return __builtin_shufflevector((rty)__rs1, (rty)__rs2, 0, 4, 2, 6); \
219 }
220#define __packed_nzip4(name, rty, ty) \
221 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, \
222 ty __rs2) { \
223 return __builtin_shufflevector((rty)__rs1, (rty)__rs2, 0, 8, 2, 10, 4, 12, \
224 6, 14); \
225 }
226#define __packed_nziph2(name, rty, ty) \
227 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, \
228 ty __rs2) { \
229 return __builtin_shufflevector((rty)__rs1, (rty)__rs2, 1, 5, 3, 7); \
230 }
231#define __packed_nziph4(name, rty, ty) \
232 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, \
233 ty __rs2) { \
234 return __builtin_shufflevector((rty)__rs1, (rty)__rs2, 1, 9, 3, 11, 5, 13, \
235 7, 15); \
236 }
237
238#define __packed_abdsum(name, rty, ty, builtin) \
239 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, \
240 ty __rs2) { \
241 return builtin(__rs1, __rs2); \
242 }
243
244#define __packed_abdsum_acc(name, rty, ty, builtin) \
245 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(rty __rd, ty __rs1, \
246 ty __rs2) { \
247 return builtin(__rd, __rs1, __rs2); \
248 }
249
250#define __packed_reinterpret(name, rty, ty) \
251 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_preinterpret_##name( \
252 ty __x) { \
253 return __builtin_bit_cast(rty, __x); \
254 }
255
256// clang-format off: macro call sites have no trailing semicolons, which
257// confuses clang-format into a deeply nested expression.
258
259/* Packed Splat (32-bit) */
264
265/* Packed Splat (64-bit) */
272
273/* Packed Addition and Subtraction (32-bit) */
279__packed_binary_op(psub_u8x4, uint8x4_t, -)
281__packed_binary_op(psub_u16x2, uint16x2_t, -)
283__packed_unary_op(pneg_i16x2, int16x2_t, -)
284
285/* Packed Addition and Subtraction (64-bit) */
293__packed_binary_op(psub_u8x8, uint8x8_t, -)
295__packed_binary_op(psub_u16x4, uint16x4_t, -)
297__packed_binary_op(psub_u32x2, uint32x2_t, -)
299__packed_unary_op(pneg_i16x4, int16x4_t, -)
301
302/* Packed Addition with Scalar (32-bit) */
309
310/* Packed Addition with Scalar (64-bit) */
321
322/* Packed Saturating Addition and Subtraction (32-bit) */
323__packed_binary_builtin(psadd_i8x4, int8x4_t, __builtin_elementwise_add_sat)
324__packed_binary_builtin(psadd_i16x2, int16x2_t, __builtin_elementwise_add_sat)
325__packed_binary_builtin(psaddu_u8x4, uint8x4_t, __builtin_elementwise_add_sat)
326__packed_binary_builtin(psaddu_u16x2, uint16x2_t, __builtin_elementwise_add_sat)
327__packed_binary_builtin(pssub_i8x4, int8x4_t, __builtin_elementwise_sub_sat)
328__packed_binary_builtin(pssub_i16x2, int16x2_t, __builtin_elementwise_sub_sat)
329__packed_binary_builtin(pssubu_u8x4, uint8x4_t, __builtin_elementwise_sub_sat)
330__packed_binary_builtin(pssubu_u16x2, uint16x2_t, __builtin_elementwise_sub_sat)
331
332/* Packed Saturating Addition and Subtraction (64-bit) */
333__packed_binary_builtin(psadd_i8x8, int8x8_t, __builtin_elementwise_add_sat)
334__packed_binary_builtin(psadd_i16x4, int16x4_t, __builtin_elementwise_add_sat)
335__packed_binary_builtin(psadd_i32x2, int32x2_t, __builtin_elementwise_add_sat)
336__packed_binary_builtin(psaddu_u8x8, uint8x8_t, __builtin_elementwise_add_sat)
337__packed_binary_builtin(psaddu_u16x4, uint16x4_t, __builtin_elementwise_add_sat)
338__packed_binary_builtin(psaddu_u32x2, uint32x2_t, __builtin_elementwise_add_sat)
339__packed_binary_builtin(pssub_i8x8, int8x8_t, __builtin_elementwise_sub_sat)
340__packed_binary_builtin(pssub_i16x4, int16x4_t, __builtin_elementwise_sub_sat)
341__packed_binary_builtin(pssub_i32x2, int32x2_t, __builtin_elementwise_sub_sat)
342__packed_binary_builtin(pssubu_u8x8, uint8x8_t, __builtin_elementwise_sub_sat)
343__packed_binary_builtin(pssubu_u16x4, uint16x4_t, __builtin_elementwise_sub_sat)
344__packed_binary_builtin(pssubu_u32x2, uint32x2_t, __builtin_elementwise_sub_sat)
345
346/* Packed Shift-Add (32-bit) */
347__packed_sh1add(psh1add_i16x2, int16x2_t)
349__packed_sh1sadd(pssh1sadd_i16x2, int16x2_t)
350
351/* Packed Shift-Add (64-bit) */
353__packed_sh1add(psh1add_u16x4, uint16x4_t)
355__packed_sh1add(psh1add_u32x2, uint32x2_t)
357__packed_sh1sadd(pssh1sadd_i32x2, int32x2_t)
358
359/* Packed Exchanged Addition and Subtraction (32-bit) */
360__packed_binary_builtin(pas_x_i16x2, int16x2_t, __builtin_riscv_pas_x_i16x2)
361__packed_binary_builtin(psa_x_i16x2, int16x2_t, __builtin_riscv_psa_x_i16x2)
362__packed_binary_builtin(psas_x_i16x2, int16x2_t, __builtin_riscv_psas_x_i16x2)
363__packed_binary_builtin(pssa_x_i16x2, int16x2_t, __builtin_riscv_pssa_x_i16x2)
364__packed_binary_builtin(paas_x_i16x2, int16x2_t, __builtin_riscv_paas_x_i16x2)
365__packed_binary_builtin(pasa_x_i16x2, int16x2_t, __builtin_riscv_pasa_x_i16x2)
366
367/* Packed Exchanged Addition and Subtraction (64-bit) */
368__packed_binary_builtin(pas_x_i16x4, int16x4_t, __builtin_riscv_pas_x_i16x4)
369__packed_binary_builtin(psa_x_i16x4, int16x4_t, __builtin_riscv_psa_x_i16x4)
370__packed_binary_builtin(psas_x_i16x4, int16x4_t, __builtin_riscv_psas_x_i16x4)
371__packed_binary_builtin(pssa_x_i16x4, int16x4_t, __builtin_riscv_pssa_x_i16x4)
372__packed_binary_builtin(paas_x_i16x4, int16x4_t, __builtin_riscv_paas_x_i16x4)
373__packed_binary_builtin(pasa_x_i16x4, int16x4_t, __builtin_riscv_pasa_x_i16x4)
374__packed_binary_builtin(pas_x_i32x2, int32x2_t, __builtin_riscv_pas_x_i32x2)
375__packed_binary_builtin(psa_x_i32x2, int32x2_t, __builtin_riscv_psa_x_i32x2)
376__packed_binary_builtin(psas_x_i32x2, int32x2_t, __builtin_riscv_psas_x_i32x2)
377__packed_binary_builtin(pssa_x_i32x2, int32x2_t, __builtin_riscv_pssa_x_i32x2)
378__packed_binary_builtin(paas_x_i32x2, int32x2_t, __builtin_riscv_paas_x_i32x2)
379__packed_binary_builtin(pasa_x_i32x2, int32x2_t, __builtin_riscv_pasa_x_i32x2)
380
381/* Packed Minimum and Maximum (32-bit) */
382__packed_binary_builtin(pmin_i8x4, int8x4_t, __builtin_elementwise_min)
383__packed_binary_builtin(pmin_i16x2, int16x2_t, __builtin_elementwise_min)
384__packed_binary_builtin(pminu_u8x4, uint8x4_t, __builtin_elementwise_min)
385__packed_binary_builtin(pminu_u16x2, uint16x2_t, __builtin_elementwise_min)
386__packed_binary_builtin(pmax_i8x4, int8x4_t, __builtin_elementwise_max)
387__packed_binary_builtin(pmax_i16x2, int16x2_t, __builtin_elementwise_max)
388__packed_binary_builtin(pmaxu_u8x4, uint8x4_t, __builtin_elementwise_max)
389__packed_binary_builtin(pmaxu_u16x2, uint16x2_t, __builtin_elementwise_max)
390
391/* Packed Minimum and Maximum (64-bit) */
392__packed_binary_builtin(pmin_i8x8, int8x8_t, __builtin_elementwise_min)
393__packed_binary_builtin(pmin_i16x4, int16x4_t, __builtin_elementwise_min)
394__packed_binary_builtin(pmin_i32x2, int32x2_t, __builtin_elementwise_min)
395__packed_binary_builtin(pminu_u8x8, uint8x8_t, __builtin_elementwise_min)
396__packed_binary_builtin(pminu_u16x4, uint16x4_t, __builtin_elementwise_min)
397__packed_binary_builtin(pminu_u32x2, uint32x2_t, __builtin_elementwise_min)
398__packed_binary_builtin(pmax_i8x8, int8x8_t, __builtin_elementwise_max)
399__packed_binary_builtin(pmax_i16x4, int16x4_t, __builtin_elementwise_max)
400__packed_binary_builtin(pmax_i32x2, int32x2_t, __builtin_elementwise_max)
401__packed_binary_builtin(pmaxu_u8x8, uint8x8_t, __builtin_elementwise_max)
402__packed_binary_builtin(pmaxu_u16x4, uint16x4_t, __builtin_elementwise_max)
403__packed_binary_builtin(pmaxu_u32x2, uint32x2_t, __builtin_elementwise_max)
404
405/* Packed Comparison (32-bit) */
406__packed_cmp(pmseq_i8x4_u8x4, int8x4_t, uint8x4_t, ==)
407__packed_cmp(pmseq_u8x4_u8x4, uint8x4_t, uint8x4_t, ==)
408__packed_cmp(pmsne_i8x4_u8x4, int8x4_t, uint8x4_t, !=)
409__packed_cmp(pmsne_u8x4_u8x4, uint8x4_t, uint8x4_t, !=)
410__packed_cmp(pmslt_u8x4, int8x4_t, uint8x4_t, <)
411__packed_cmp(pmsltu_u8x4, uint8x4_t, uint8x4_t, <)
412__packed_cmp(pmsgt_u8x4, int8x4_t, uint8x4_t, >)
413__packed_cmp(pmsgtu_u8x4, uint8x4_t, uint8x4_t, >)
414__packed_cmp(pmsge_u8x4, int8x4_t, uint8x4_t, >=)
415__packed_cmp(pmsgeu_u8x4, uint8x4_t, uint8x4_t, >=)
416__packed_cmp(pmsle_u8x4, int8x4_t, uint8x4_t, <=)
417__packed_cmp(pmsleu_u8x4, uint8x4_t, uint8x4_t, <=)
418__packed_cmp(pmseq_i16x2_u16x2, int16x2_t, uint16x2_t, ==)
419__packed_cmp(pmseq_u16x2_u16x2, uint16x2_t, uint16x2_t, ==)
420__packed_cmp(pmsne_i16x2_u16x2, int16x2_t, uint16x2_t, !=)
421__packed_cmp(pmsne_u16x2_u16x2, uint16x2_t, uint16x2_t, !=)
422__packed_cmp(pmslt_u16x2, int16x2_t, uint16x2_t, <)
423__packed_cmp(pmsltu_u16x2, uint16x2_t, uint16x2_t, <)
424__packed_cmp(pmsgt_u16x2, int16x2_t, uint16x2_t, >)
425__packed_cmp(pmsgtu_u16x2, uint16x2_t, uint16x2_t, >)
426__packed_cmp(pmsge_u16x2, int16x2_t, uint16x2_t, >=)
427__packed_cmp(pmsgeu_u16x2, uint16x2_t, uint16x2_t, >=)
428__packed_cmp(pmsle_u16x2, int16x2_t, uint16x2_t, <=)
429__packed_cmp(pmsleu_u16x2, uint16x2_t, uint16x2_t, <=)
430
431/* Packed Comparison (64-bit) */
432__packed_cmp(pmseq_i8x8_u8x8, int8x8_t, uint8x8_t, ==)
433__packed_cmp(pmseq_u8x8_u8x8, uint8x8_t, uint8x8_t, ==)
434__packed_cmp(pmsne_i8x8_u8x8, int8x8_t, uint8x8_t, !=)
435__packed_cmp(pmsne_u8x8_u8x8, uint8x8_t, uint8x8_t, !=)
436__packed_cmp(pmslt_u8x8, int8x8_t, uint8x8_t, <)
437__packed_cmp(pmsltu_u8x8, uint8x8_t, uint8x8_t, <)
438__packed_cmp(pmsgt_u8x8, int8x8_t, uint8x8_t, >)
439__packed_cmp(pmsgtu_u8x8, uint8x8_t, uint8x8_t, >)
440__packed_cmp(pmsge_u8x8, int8x8_t, uint8x8_t, >=)
441__packed_cmp(pmsgeu_u8x8, uint8x8_t, uint8x8_t, >=)
442__packed_cmp(pmsle_u8x8, int8x8_t, uint8x8_t, <=)
443__packed_cmp(pmsleu_u8x8, uint8x8_t, uint8x8_t, <=)
444__packed_cmp(pmseq_i16x4_u16x4, int16x4_t, uint16x4_t, ==)
445__packed_cmp(pmseq_u16x4_u16x4, uint16x4_t, uint16x4_t, ==)
446__packed_cmp(pmsne_i16x4_u16x4, int16x4_t, uint16x4_t, !=)
447__packed_cmp(pmsne_u16x4_u16x4, uint16x4_t, uint16x4_t, !=)
448__packed_cmp(pmslt_u16x4, int16x4_t, uint16x4_t, <)
449__packed_cmp(pmsltu_u16x4, uint16x4_t, uint16x4_t, <)
450__packed_cmp(pmsgt_u16x4, int16x4_t, uint16x4_t, >)
451__packed_cmp(pmsgtu_u16x4, uint16x4_t, uint16x4_t, >)
452__packed_cmp(pmsge_u16x4, int16x4_t, uint16x4_t, >=)
453__packed_cmp(pmsgeu_u16x4, uint16x4_t, uint16x4_t, >=)
454__packed_cmp(pmsle_u16x4, int16x4_t, uint16x4_t, <=)
455__packed_cmp(pmsleu_u16x4, uint16x4_t, uint16x4_t, <=)
456__packed_cmp(pmseq_i32x2_u32x2, int32x2_t, uint32x2_t, ==)
457__packed_cmp(pmseq_u32x2_u32x2, uint32x2_t, uint32x2_t, ==)
458__packed_cmp(pmsne_i32x2_u32x2, int32x2_t, uint32x2_t, !=)
459__packed_cmp(pmsne_u32x2_u32x2, uint32x2_t, uint32x2_t, !=)
460__packed_cmp(pmslt_u32x2, int32x2_t, uint32x2_t, <)
461__packed_cmp(pmsltu_u32x2, uint32x2_t, uint32x2_t, <)
462__packed_cmp(pmsgt_u32x2, int32x2_t, uint32x2_t, >)
463__packed_cmp(pmsgtu_u32x2, uint32x2_t, uint32x2_t, >)
464__packed_cmp(pmsge_u32x2, int32x2_t, uint32x2_t, >=)
465__packed_cmp(pmsgeu_u32x2, uint32x2_t, uint32x2_t, >=)
466__packed_cmp(pmsle_u32x2, int32x2_t, uint32x2_t, <=)
467__packed_cmp(pmsleu_u32x2, uint32x2_t, uint32x2_t, <=)
468
469/* Packed Shifts (32-bit) */
470__packed_shift8(psll_s_u8x4, uint8x4_t, <<)
471__packed_shift8(psll_s_i8x4, int8x4_t, <<)
472__packed_shift16(psll_s_u16x2, uint16x2_t, <<)
473__packed_shift16(psll_s_i16x2, int16x2_t, <<)
474__packed_shift8(psrl_s_u8x4, uint8x4_t, >>)
475__packed_shift16(psrl_s_u16x2, uint16x2_t, >>)
476__packed_shift8(psra_s_i8x4, int8x4_t, >>)
477__packed_shift16(psra_s_i16x2, int16x2_t, >>)
478
479/* Packed Shifts (64-bit) */
480__packed_shift8(psll_s_u8x8, uint8x8_t, <<)
481__packed_shift8(psll_s_i8x8, int8x8_t, <<)
482__packed_shift16(psll_s_u16x4, uint16x4_t, <<)
483__packed_shift16(psll_s_i16x4, int16x4_t, <<)
484__packed_shift32(psll_s_u32x2, uint32x2_t, <<)
485__packed_shift32(psll_s_i32x2, int32x2_t, <<)
486__packed_shift8(psrl_s_u8x8, uint8x8_t, >>)
487__packed_shift16(psrl_s_u16x4, uint16x4_t, >>)
488__packed_shift32(psrl_s_u32x2, uint32x2_t, >>)
489__packed_shift8(psra_s_i8x8, int8x8_t, >>)
490__packed_shift16(psra_s_i16x4, int16x4_t, >>)
491__packed_shift32(psra_s_i32x2, int32x2_t, >>)
492
493/* Packed Logical Operations (32-bit) */
494__packed_binary_op(pand_i8x4, int8x4_t, &)
495__packed_binary_op(pand_u8x4, uint8x4_t, &)
496__packed_binary_op(pand_i16x2, int16x2_t, &)
497__packed_binary_op(pand_u16x2, uint16x2_t, &)
498__packed_binary_op(por_i8x4, int8x4_t, |)
499__packed_binary_op(por_u8x4, uint8x4_t, |)
500__packed_binary_op(por_i16x2, int16x2_t, |)
501__packed_binary_op(por_u16x2, uint16x2_t, |)
502__packed_binary_op(pxor_i8x4, int8x4_t, ^)
503__packed_binary_op(pxor_u8x4, uint8x4_t, ^)
504__packed_binary_op(pxor_i16x2, int16x2_t, ^)
505__packed_binary_op(pxor_u16x2, uint16x2_t, ^)
506__packed_unary_op(pnot_i8x4, int8x4_t, ~)
507__packed_unary_op(pnot_u8x4, uint8x4_t, ~)
508__packed_unary_op(pnot_i16x2, int16x2_t, ~)
509__packed_unary_op(pnot_u16x2, uint16x2_t, ~)
510
511/* Packed Logical Operations (64-bit) */
512__packed_binary_op(pand_i8x8, int8x8_t, &)
513__packed_binary_op(pand_u8x8, uint8x8_t, &)
514__packed_binary_op(pand_i16x4, int16x4_t, &)
515__packed_binary_op(pand_u16x4, uint16x4_t, &)
516__packed_binary_op(pand_i32x2, int32x2_t, &)
517__packed_binary_op(pand_u32x2, uint32x2_t, &)
518__packed_binary_op(por_i8x8, int8x8_t, |)
519__packed_binary_op(por_u8x8, uint8x8_t, |)
520__packed_binary_op(por_i16x4, int16x4_t, |)
521__packed_binary_op(por_u16x4, uint16x4_t, |)
522__packed_binary_op(por_i32x2, int32x2_t, |)
523__packed_binary_op(por_u32x2, uint32x2_t, |)
524__packed_binary_op(pxor_i8x8, int8x8_t, ^)
525__packed_binary_op(pxor_u8x8, uint8x8_t, ^)
526__packed_binary_op(pxor_i16x4, int16x4_t, ^)
527__packed_binary_op(pxor_u16x4, uint16x4_t, ^)
528__packed_binary_op(pxor_i32x2, int32x2_t, ^)
529__packed_binary_op(pxor_u32x2, uint32x2_t, ^)
530__packed_unary_op(pnot_i8x8, int8x8_t, ~)
531__packed_unary_op(pnot_u8x8, uint8x8_t, ~)
532__packed_unary_op(pnot_i16x4, int16x4_t, ~)
533__packed_unary_op(pnot_u16x4, uint16x4_t, ~)
534__packed_unary_op(pnot_i32x2, int32x2_t, ~)
535__packed_unary_op(pnot_u32x2, uint32x2_t, ~)
536
537/* Packed Widening Convert */
546
547/* Packed Narrowing Convert */
556
557/* Packed Reverse (32-bit) */
558__packed_reverse4(prev_i8x4, int8x4_t)
560__packed_reverse2(prev_i16x2, int16x2_t)
561__packed_reverse2(prev_u16x2, uint16x2_t)
562
563/* Packed Reverse (64-bit) */
564__packed_reverse8(prev_i8x8, int8x8_t)
566__packed_reverse4(prev_i16x4, int16x4_t)
567__packed_reverse4(prev_u16x4, uint16x4_t)
568__packed_reverse2(prev_i32x2, int32x2_t)
569__packed_reverse2(prev_u32x2, uint32x2_t)
570
571/* Packed Zip */
576
577/* Packed Unzip */
578__packed_unzipe4(punzipe_i8x4, int8x4_t, int8x8_t)
579__packed_unzipo4(punzipo_i8x4, int8x4_t, int8x8_t)
582__packed_unzipe2(punzipe_i16x2, int16x2_t, int16x4_t)
583__packed_unzipo2(punzipo_i16x2, int16x2_t, int16x4_t)
586
587/* Packed Narrowing Zip (32-bit) */
592
593/* Packed Narrowing Zip (64-bit) */
600__packed_nziph2(pnziph_i16x4, int16x4_t, int32x2_t)
602
603/* Packed Averaging Addition and Subtraction (32-bit) */
604__packed_binary_builtin(paadd_i8x4, int8x4_t, __builtin_riscv_paadd_i8x4)
605__packed_binary_builtin(paadd_i16x2, int16x2_t, __builtin_riscv_paadd_i16x2)
606__packed_binary_builtin(paaddu_u8x4, uint8x4_t, __builtin_riscv_paaddu_u8x4)
607__packed_binary_builtin(paaddu_u16x2, uint16x2_t, __builtin_riscv_paaddu_u16x2)
608__packed_binary_builtin(pasub_i8x4, int8x4_t, __builtin_riscv_pasub_i8x4)
609__packed_binary_builtin(pasub_i16x2, int16x2_t, __builtin_riscv_pasub_i16x2)
610__packed_binary_builtin(pasubu_u8x4, uint8x4_t, __builtin_riscv_pasubu_u8x4)
611__packed_binary_builtin(pasubu_u16x2, uint16x2_t, __builtin_riscv_pasubu_u16x2)
612
613/* Packed Averaging Addition and Subtraction (64-bit) */
614__packed_binary_builtin(paadd_i8x8, int8x8_t, __builtin_riscv_paadd_i8x8)
615__packed_binary_builtin(paadd_i16x4, int16x4_t, __builtin_riscv_paadd_i16x4)
616__packed_binary_builtin(paadd_i32x2, int32x2_t, __builtin_riscv_paadd_i32x2)
617__packed_binary_builtin(paaddu_u8x8, uint8x8_t, __builtin_riscv_paaddu_u8x8)
618__packed_binary_builtin(paaddu_u16x4, uint16x4_t, __builtin_riscv_paaddu_u16x4)
619__packed_binary_builtin(paaddu_u32x2, uint32x2_t, __builtin_riscv_paaddu_u32x2)
620__packed_binary_builtin(pasub_i8x8, int8x8_t, __builtin_riscv_pasub_i8x8)
621__packed_binary_builtin(pasub_i16x4, int16x4_t, __builtin_riscv_pasub_i16x4)
622__packed_binary_builtin(pasub_i32x2, int32x2_t, __builtin_riscv_pasub_i32x2)
623__packed_binary_builtin(pasubu_u8x8, uint8x8_t, __builtin_riscv_pasubu_u8x8)
624__packed_binary_builtin(pasubu_u16x4, uint16x4_t, __builtin_riscv_pasubu_u16x4)
625__packed_binary_builtin(pasubu_u32x2, uint32x2_t, __builtin_riscv_pasubu_u32x2)
626
627/* Packed Absolute Value and Absolute Difference (32-bit) */
630__packed_binary_builtin_cast(pabd_i8x4, int8x4_t, uint8x4_t, __builtin_riscv_pabd_i8x4)
631__packed_binary_builtin_cast(pabd_i16x2, int16x2_t, uint16x2_t, __builtin_riscv_pabd_i16x2)
632__packed_binary_builtin_cast(pabdu_u8x4, uint8x4_t, uint8x4_t, __builtin_riscv_pabdu_u8x4)
633__packed_binary_builtin_cast(pabdu_u16x2, uint16x2_t, uint16x2_t, __builtin_riscv_pabdu_u16x2)
634
635/* Packed Absolute Value and Absolute Difference (64-bit) */
638__packed_binary_builtin_cast(pabd_i8x8, int8x8_t, uint8x8_t, __builtin_riscv_pabd_i8x8)
639__packed_binary_builtin_cast(pabd_i16x4, int16x4_t, uint16x4_t, __builtin_riscv_pabd_i16x4)
640__packed_binary_builtin_cast(pabdu_u8x8, uint8x8_t, uint8x8_t, __builtin_riscv_pabdu_u8x8)
641__packed_binary_builtin_cast(pabdu_u16x4, uint16x4_t, uint16x4_t, __builtin_riscv_pabdu_u16x4)
642
643/* Packed Reduction Sum (32-bit) */
644__packed_reduction(predsum_i8x4_i32, int32_t, int8x4_t, __builtin_riscv_predsum_i8x4_i32)
645__packed_reduction(predsumu_u8x4_u32, uint32_t, uint8x4_t, __builtin_riscv_predsumu_u8x4_u32)
646__packed_reduction(predsum_i16x2_i32, int32_t, int16x2_t, __builtin_riscv_predsum_i16x2_i32)
647__packed_reduction(predsumu_u16x2_u32, uint32_t, uint16x2_t, __builtin_riscv_predsumu_u16x2_u32)
648
649/* Packed Reduction Sum (64-bit) */
650__packed_reduction(predsum_i8x8_i32, int32_t, int8x8_t, __builtin_riscv_predsum_i8x8_i32)
651__packed_reduction(predsumu_u8x8_u32, uint32_t, uint8x8_t, __builtin_riscv_predsumu_u8x8_u32)
652__packed_reduction(predsum_i16x4_i32, int32_t, int16x4_t, __builtin_riscv_predsum_i16x4_i32)
653__packed_reduction(predsumu_u16x4_u32, uint32_t, uint16x4_t, __builtin_riscv_predsumu_u16x4_u32)
654__packed_reduction(predsum_i8x8_i64, int64_t, int8x8_t, __builtin_riscv_predsum_i8x8_i64)
655__packed_reduction(predsumu_u8x8_u64, uint64_t, uint8x8_t, __builtin_riscv_predsumu_u8x8_u64)
656__packed_reduction(predsum_i16x4_i64, int64_t, int16x4_t, __builtin_riscv_predsum_i16x4_i64)
657__packed_reduction(predsumu_u16x4_u64, uint64_t, uint16x4_t, __builtin_riscv_predsumu_u16x4_u64)
658__packed_reduction(predsum_i32x2_i64, int64_t, int32x2_t, __builtin_riscv_predsum_i32x2_i64)
659__packed_reduction(predsumu_u32x2_u64, uint64_t, uint32x2_t, __builtin_riscv_predsumu_u32x2_u64)
660
661/* Packed Merge (32-bit) */
662__packed_merge_builtin(pmerge_u8x4, uint8x4_t, uint8x4_t, __builtin_riscv_pmerge_u8x4)
663__packed_merge_builtin(pmerge_i8x4, int8x4_t, uint8x4_t, __builtin_riscv_pmerge_i8x4)
664__packed_merge_builtin(pmerge_u16x2, uint16x2_t, uint16x2_t, __builtin_riscv_pmerge_u16x2)
665__packed_merge_builtin(pmerge_i16x2, int16x2_t, uint16x2_t, __builtin_riscv_pmerge_i16x2)
666
667/* Packed Merge (64-bit) */
668__packed_merge_builtin(pmerge_u8x8, uint8x8_t, uint8x8_t, __builtin_riscv_pmerge_u8x8)
669__packed_merge_builtin(pmerge_i8x8, int8x8_t, uint8x8_t, __builtin_riscv_pmerge_i8x8)
670__packed_merge_builtin(pmerge_u16x4, uint16x4_t, uint16x4_t, __builtin_riscv_pmerge_u16x4)
671__packed_merge_builtin(pmerge_i16x4, int16x4_t, uint16x4_t, __builtin_riscv_pmerge_i16x4)
672__packed_merge_builtin(pmerge_u32x2, uint32x2_t, uint32x2_t, __builtin_riscv_pmerge_u32x2)
673__packed_merge_builtin(pmerge_i32x2, int32x2_t, uint32x2_t, __builtin_riscv_pmerge_i32x2)
674
675/* Packed Absolute Difference Sum (32-bit) */
676__packed_abdsum(pabdsumu_u8x4_u32, uint32_t, uint8x4_t, __builtin_riscv_pabdsumu_u8x4_u32)
677__packed_abdsum_acc(pabdsumau_u8x4_u32, uint32_t, uint8x4_t, __builtin_riscv_pabdsumau_u8x4_u32)
678
679/* Packed Absolute Difference Sum (64-bit) */
680__packed_abdsum(pabdsumu_u8x8_u32, uint32_t, uint8x8_t, __builtin_riscv_pabdsumu_u8x8_u32)
681__packed_abdsum(pabdsumu_u8x8_u64, uint64_t, uint8x8_t, __builtin_riscv_pabdsumu_u8x8_u64)
682__packed_abdsum_acc(pabdsumau_u8x8_u32, uint32_t, uint8x8_t, __builtin_riscv_pabdsumau_u8x8_u32)
683__packed_abdsum_acc(pabdsumau_u8x8_u64, uint64_t, uint8x8_t, __builtin_riscv_pabdsumau_u8x8_u64)
684
685/* Packed Saturating Absolute Value (32-bit) */
686__packed_psabs(psabs_i8x4, int8x4_t, __builtin_riscv_psabs_i8x4)
687__packed_psabs(psabs_i16x2, int16x2_t, __builtin_riscv_psabs_i16x2)
688
689/* Packed Saturating Absolute Value (64-bit) */
690__packed_psabs(psabs_i8x8, int8x8_t, __builtin_riscv_psabs_i8x8)
691__packed_psabs(psabs_i16x4, int16x4_t, __builtin_riscv_psabs_i16x4)
692
693/* Reinterpret Casts, Packed <-> Scalar (32-bit) */
710
711/* Reinterpret Casts, Packed <-> Scalar (64-bit) */
712__packed_reinterpret(u8x8_u64, uint64_t, uint8x8_t)
713__packed_reinterpret(u16x4_u64, uint64_t, uint16x4_t)
714__packed_reinterpret(u32x2_u64, uint64_t, uint32x2_t)
715__packed_reinterpret(i8x8_u64, uint64_t, int8x8_t)
716__packed_reinterpret(i16x4_u64, uint64_t, int16x4_t)
717__packed_reinterpret(i32x2_u64, uint64_t, int32x2_t)
718__packed_reinterpret(u8x8_i64, int64_t, uint8x8_t)
719__packed_reinterpret(u16x4_i64, int64_t, uint16x4_t)
720__packed_reinterpret(u32x2_i64, int64_t, uint32x2_t)
721__packed_reinterpret(i8x8_i64, int64_t, int8x8_t)
722__packed_reinterpret(i16x4_i64, int64_t, int16x4_t)
723__packed_reinterpret(i32x2_i64, int64_t, int32x2_t)
724__packed_reinterpret(u64_u8x8, uint8x8_t, uint64_t)
725__packed_reinterpret(u64_u16x4, uint16x4_t, uint64_t)
726__packed_reinterpret(u64_u32x2, uint32x2_t, uint64_t)
727__packed_reinterpret(u64_i8x8, int8x8_t, uint64_t)
728__packed_reinterpret(u64_i16x4, int16x4_t, uint64_t)
729__packed_reinterpret(u64_i32x2, int32x2_t, uint64_t)
730__packed_reinterpret(i64_u8x8, uint8x8_t, int64_t)
731__packed_reinterpret(i64_u16x4, uint16x4_t, int64_t)
732__packed_reinterpret(i64_u32x2, uint32x2_t, int64_t)
733__packed_reinterpret(i64_i8x8, int8x8_t, int64_t)
734__packed_reinterpret(i64_i16x4, int16x4_t, int64_t)
735__packed_reinterpret(i64_i32x2, int32x2_t, int64_t)
736
737/* Reinterpret Casts, Packed <-> Packed (32-bit) */
750
751/* Reinterpret Casts, Packed <-> Packed (64-bit) */
782
783// clang-format on
784
785#undef __packed_splat2
786#undef __packed_splat4
787#undef __packed_splat8
788#undef __packed_splat
789#undef __packed_shift
790#undef __packed_shift8
791#undef __packed_shift16
792#undef __packed_shift32
793#undef __packed_scalar_binary_op
794#undef __packed_binary_op
795#undef __packed_unary_op
796#undef __packed_binary_builtin
797#undef __packed_sh1add
798#undef __packed_sh1sadd
799#undef __packed_cmp
800#undef __packed_pabs
801#undef __packed_binary_builtin_cast
802#undef __packed_reduction
803#undef __packed_merge_builtin
804#undef __packed_psabs
805#undef __packed_widen_convert
806#undef __packed_widen_high2
807#undef __packed_widen_high4
808#undef __packed_narrow_even2
809#undef __packed_narrow_even4
810#undef __packed_narrow_odd2
811#undef __packed_narrow_odd4
812#undef __packed_reverse2
813#undef __packed_reverse4
814#undef __packed_reverse8
815#undef __packed_zip2
816#undef __packed_zip4
817#undef __packed_unzipe2
818#undef __packed_unzipe4
819#undef __packed_unzipo2
820#undef __packed_unzipo4
821#undef __packed_nzip2
822#undef __packed_nzip4
823#undef __packed_nziph2
824#undef __packed_nziph4
825#undef __packed_abdsum
826#undef __packed_abdsum_acc
827#undef __packed_reinterpret
828#undef __DEFAULT_FN_ATTRS
829
830#if defined(__cplusplus)
831}
832#endif
833
834#endif /* __RISCV_PACKED_SIMD_H */
#define __packed_cmp(name, ty, rty, op)
#define __packed_widen_convert(name, rty, ty)
#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_nziph2(name, rty, ty)
__packed_splat4 __packed_splat2 __packed_splat8 __packed_splat4 __packed_splat2 uint16x4_t
#define __packed_reverse2(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_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
__packed_splat4 __packed_splat2 __packed_splat8 __packed_splat4 __packed_splat2 uint32x2_t
#define __packed_reverse8(name, ty)
#define __packed_binary_builtin(name, ty, builtin)
__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_unary_op(name, ty, op)
#define __packed_psabs(name, ty, builtin)
#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_abdsum_acc(name, rty, ty, builtin)
#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_binary_builtin_cast(name, ty, rty, 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)
__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)