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#define __packed_narrow_even2(name, rty, ty, sty) \
138 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
139 return __builtin_convertvector(__rs1, rty); \
140 }
141#define __packed_narrow_even4(name, rty, ty, sty) \
142 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
143 return __builtin_convertvector(__rs1, rty); \
144 }
145#define __packed_narrow_odd2(name, rty, ty, sty, uty) \
146 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
147 return __builtin_shufflevector((sty)__rs1, (sty)__rs1, 1, 3); \
148 }
149#define __packed_narrow_odd4(name, rty, ty, sty, uty) \
150 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
151 return __builtin_shufflevector((sty)__rs1, (sty)__rs1, 1, 3, 5, 7); \
152 }
153
154/* Packed Reverse: reverse the order of the elements. Lowered to a single
155 * rev8/rev16/ppairoe.* by the backend's packed reverse-shuffle handling. */
156#define __packed_reverse2(name, ty) \
157 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
158 return __builtin_shufflevector(__rs1, __rs1, 1, 0); \
159 }
160#define __packed_reverse4(name, ty) \
161 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
162 return __builtin_shufflevector(__rs1, __rs1, 3, 2, 1, 0); \
163 }
164#define __packed_reverse8(name, ty) \
165 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
166 return __builtin_shufflevector(__rs1, __rs1, 7, 6, 5, 4, 3, 2, 1, 0); \
167 }
168
169#define __packed_zip2(name, rty, ty) \
170 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, \
171 ty __rs2) { \
172 return __builtin_shufflevector(__rs1, __rs2, 0, 2, 1, 3); \
173 }
174#define __packed_zip4(name, rty, ty) \
175 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, \
176 ty __rs2) { \
177 return __builtin_shufflevector(__rs1, __rs2, 0, 4, 1, 5, 2, 6, 3, 7); \
178 }
179#define __packed_unzipe2(name, rty, ty) \
180 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
181 return __builtin_shufflevector(__rs1, __rs1, 0, 2); \
182 }
183#define __packed_unzipe4(name, rty, ty) \
184 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
185 return __builtin_shufflevector(__rs1, __rs1, 0, 2, 4, 6); \
186 }
187#define __packed_unzipo2(name, rty, ty) \
188 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
189 return __builtin_shufflevector(__rs1, __rs1, 1, 3); \
190 }
191#define __packed_unzipo4(name, rty, ty) \
192 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
193 return __builtin_shufflevector(__rs1, __rs1, 1, 3, 5, 7); \
194 }
195
196#define __packed_pair_ee4(name, ty) \
197 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, ty __rs2) { \
198 return __builtin_shufflevector(__rs1, __rs2, 0, 4, 2, 6); \
199 }
200#define __packed_pair_eo4(name, ty) \
201 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, ty __rs2) { \
202 return __builtin_shufflevector(__rs1, __rs2, 0, 5, 2, 7); \
203 }
204#define __packed_pair_oe4(name, ty) \
205 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, ty __rs2) { \
206 return __builtin_shufflevector(__rs1, __rs2, 1, 4, 3, 6); \
207 }
208#define __packed_pair_oo4(name, ty) \
209 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, ty __rs2) { \
210 return __builtin_shufflevector(__rs1, __rs2, 1, 5, 3, 7); \
211 }
212#define __packed_pair_ee8(name, ty) \
213 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, ty __rs2) { \
214 return __builtin_shufflevector(__rs1, __rs2, 0, 8, 2, 10, 4, 12, 6, 14); \
215 }
216#define __packed_pair_eo8(name, ty) \
217 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, ty __rs2) { \
218 return __builtin_shufflevector(__rs1, __rs2, 0, 9, 2, 11, 4, 13, 6, 15); \
219 }
220#define __packed_pair_oe8(name, ty) \
221 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, ty __rs2) { \
222 return __builtin_shufflevector(__rs1, __rs2, 1, 8, 3, 10, 5, 12, 7, 14); \
223 }
224#define __packed_pair_oo8(name, ty) \
225 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, ty __rs2) { \
226 return __builtin_shufflevector(__rs1, __rs2, 1, 9, 3, 11, 5, 13, 7, 15); \
227 }
228
229#define __packed_nzip2(name, rty, ty) \
230 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, \
231 ty __rs2) { \
232 return __builtin_shufflevector((rty)__rs1, (rty)__rs2, 0, 4, 2, 6); \
233 }
234#define __packed_nzip4(name, rty, ty) \
235 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, \
236 ty __rs2) { \
237 return __builtin_shufflevector((rty)__rs1, (rty)__rs2, 0, 8, 2, 10, 4, 12, \
238 6, 14); \
239 }
240#define __packed_nziph2(name, rty, ty) \
241 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, \
242 ty __rs2) { \
243 return __builtin_shufflevector((rty)__rs1, (rty)__rs2, 1, 5, 3, 7); \
244 }
245#define __packed_nziph4(name, rty, ty) \
246 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, \
247 ty __rs2) { \
248 return __builtin_shufflevector((rty)__rs1, (rty)__rs2, 1, 9, 3, 11, 5, 13, \
249 7, 15); \
250 }
251
252#define __packed_abdsum(name, rty, ty, builtin) \
253 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, \
254 ty __rs2) { \
255 return builtin(__rs1, __rs2); \
256 }
257
258#define __packed_abdsum_acc(name, rty, ty, builtin) \
259 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(rty __rd, ty __rs1, \
260 ty __rs2) { \
261 return builtin(__rd, __rs1, __rs2); \
262 }
263
264#define __packed_reinterpret(name, rty, ty) \
265 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_preinterpret_##name( \
266 ty __x) { \
267 return __builtin_bit_cast(rty, __x); \
268 }
269
270// clang-format off: macro call sites have no trailing semicolons, which
271// confuses clang-format into a deeply nested expression.
272
273/* Packed Splat (32-bit) */
278
279/* Packed Splat (64-bit) */
286
287/* Packed Addition and Subtraction (32-bit) */
293__packed_binary_op(psub_u8x4, uint8x4_t, -)
295__packed_binary_op(psub_u16x2, uint16x2_t, -)
297__packed_unary_op(pneg_i16x2, int16x2_t, -)
298
299/* Packed Addition and Subtraction (64-bit) */
307__packed_binary_op(psub_u8x8, uint8x8_t, -)
309__packed_binary_op(psub_u16x4, uint16x4_t, -)
311__packed_binary_op(psub_u32x2, uint32x2_t, -)
313__packed_unary_op(pneg_i16x4, int16x4_t, -)
315
316/* Packed Addition with Scalar (32-bit) */
323
324/* Packed Addition with Scalar (64-bit) */
335
336/* Packed Saturating Addition and Subtraction (32-bit) */
337__packed_binary_builtin(psadd_i8x4, int8x4_t, __builtin_elementwise_add_sat)
338__packed_binary_builtin(psadd_i16x2, int16x2_t, __builtin_elementwise_add_sat)
339__packed_binary_builtin(psaddu_u8x4, uint8x4_t, __builtin_elementwise_add_sat)
340__packed_binary_builtin(psaddu_u16x2, uint16x2_t, __builtin_elementwise_add_sat)
341__packed_binary_builtin(pssub_i8x4, int8x4_t, __builtin_elementwise_sub_sat)
342__packed_binary_builtin(pssub_i16x2, int16x2_t, __builtin_elementwise_sub_sat)
343__packed_binary_builtin(pssubu_u8x4, uint8x4_t, __builtin_elementwise_sub_sat)
344__packed_binary_builtin(pssubu_u16x2, uint16x2_t, __builtin_elementwise_sub_sat)
345
346/* Packed Saturating Addition and Subtraction (64-bit) */
347__packed_binary_builtin(psadd_i8x8, int8x8_t, __builtin_elementwise_add_sat)
348__packed_binary_builtin(psadd_i16x4, int16x4_t, __builtin_elementwise_add_sat)
349__packed_binary_builtin(psadd_i32x2, int32x2_t, __builtin_elementwise_add_sat)
350__packed_binary_builtin(psaddu_u8x8, uint8x8_t, __builtin_elementwise_add_sat)
351__packed_binary_builtin(psaddu_u16x4, uint16x4_t, __builtin_elementwise_add_sat)
352__packed_binary_builtin(psaddu_u32x2, uint32x2_t, __builtin_elementwise_add_sat)
353__packed_binary_builtin(pssub_i8x8, int8x8_t, __builtin_elementwise_sub_sat)
354__packed_binary_builtin(pssub_i16x4, int16x4_t, __builtin_elementwise_sub_sat)
355__packed_binary_builtin(pssub_i32x2, int32x2_t, __builtin_elementwise_sub_sat)
356__packed_binary_builtin(pssubu_u8x8, uint8x8_t, __builtin_elementwise_sub_sat)
357__packed_binary_builtin(pssubu_u16x4, uint16x4_t, __builtin_elementwise_sub_sat)
358__packed_binary_builtin(pssubu_u32x2, uint32x2_t, __builtin_elementwise_sub_sat)
359
360/* Packed Shift-Add (32-bit) */
361__packed_sh1add(psh1add_i16x2, int16x2_t)
363__packed_sh1sadd(pssh1sadd_i16x2, int16x2_t)
364
365/* Packed Shift-Add (64-bit) */
367__packed_sh1add(psh1add_u16x4, uint16x4_t)
369__packed_sh1add(psh1add_u32x2, uint32x2_t)
371__packed_sh1sadd(pssh1sadd_i32x2, int32x2_t)
372
373/* Packed Exchanged Addition and Subtraction (32-bit) */
374__packed_binary_builtin(pas_x_i16x2, int16x2_t, __builtin_riscv_pas_x_i16x2)
375__packed_binary_builtin(psa_x_i16x2, int16x2_t, __builtin_riscv_psa_x_i16x2)
376__packed_binary_builtin(psas_x_i16x2, int16x2_t, __builtin_riscv_psas_x_i16x2)
377__packed_binary_builtin(pssa_x_i16x2, int16x2_t, __builtin_riscv_pssa_x_i16x2)
378__packed_binary_builtin(paas_x_i16x2, int16x2_t, __builtin_riscv_paas_x_i16x2)
379__packed_binary_builtin(pasa_x_i16x2, int16x2_t, __builtin_riscv_pasa_x_i16x2)
380
381/* Packed Exchanged Addition and Subtraction (64-bit) */
382__packed_binary_builtin(pas_x_i16x4, int16x4_t, __builtin_riscv_pas_x_i16x4)
383__packed_binary_builtin(psa_x_i16x4, int16x4_t, __builtin_riscv_psa_x_i16x4)
384__packed_binary_builtin(psas_x_i16x4, int16x4_t, __builtin_riscv_psas_x_i16x4)
385__packed_binary_builtin(pssa_x_i16x4, int16x4_t, __builtin_riscv_pssa_x_i16x4)
386__packed_binary_builtin(paas_x_i16x4, int16x4_t, __builtin_riscv_paas_x_i16x4)
387__packed_binary_builtin(pasa_x_i16x4, int16x4_t, __builtin_riscv_pasa_x_i16x4)
388__packed_binary_builtin(pas_x_i32x2, int32x2_t, __builtin_riscv_pas_x_i32x2)
389__packed_binary_builtin(psa_x_i32x2, int32x2_t, __builtin_riscv_psa_x_i32x2)
390__packed_binary_builtin(psas_x_i32x2, int32x2_t, __builtin_riscv_psas_x_i32x2)
391__packed_binary_builtin(pssa_x_i32x2, int32x2_t, __builtin_riscv_pssa_x_i32x2)
392__packed_binary_builtin(paas_x_i32x2, int32x2_t, __builtin_riscv_paas_x_i32x2)
393__packed_binary_builtin(pasa_x_i32x2, int32x2_t, __builtin_riscv_pasa_x_i32x2)
394
395/* Packed Minimum and Maximum (32-bit) */
396__packed_binary_builtin(pmin_i8x4, int8x4_t, __builtin_elementwise_min)
397__packed_binary_builtin(pmin_i16x2, int16x2_t, __builtin_elementwise_min)
398__packed_binary_builtin(pminu_u8x4, uint8x4_t, __builtin_elementwise_min)
399__packed_binary_builtin(pminu_u16x2, uint16x2_t, __builtin_elementwise_min)
400__packed_binary_builtin(pmax_i8x4, int8x4_t, __builtin_elementwise_max)
401__packed_binary_builtin(pmax_i16x2, int16x2_t, __builtin_elementwise_max)
402__packed_binary_builtin(pmaxu_u8x4, uint8x4_t, __builtin_elementwise_max)
403__packed_binary_builtin(pmaxu_u16x2, uint16x2_t, __builtin_elementwise_max)
404
405/* Packed Minimum and Maximum (64-bit) */
406__packed_binary_builtin(pmin_i8x8, int8x8_t, __builtin_elementwise_min)
407__packed_binary_builtin(pmin_i16x4, int16x4_t, __builtin_elementwise_min)
408__packed_binary_builtin(pmin_i32x2, int32x2_t, __builtin_elementwise_min)
409__packed_binary_builtin(pminu_u8x8, uint8x8_t, __builtin_elementwise_min)
410__packed_binary_builtin(pminu_u16x4, uint16x4_t, __builtin_elementwise_min)
411__packed_binary_builtin(pminu_u32x2, uint32x2_t, __builtin_elementwise_min)
412__packed_binary_builtin(pmax_i8x8, int8x8_t, __builtin_elementwise_max)
413__packed_binary_builtin(pmax_i16x4, int16x4_t, __builtin_elementwise_max)
414__packed_binary_builtin(pmax_i32x2, int32x2_t, __builtin_elementwise_max)
415__packed_binary_builtin(pmaxu_u8x8, uint8x8_t, __builtin_elementwise_max)
416__packed_binary_builtin(pmaxu_u16x4, uint16x4_t, __builtin_elementwise_max)
417__packed_binary_builtin(pmaxu_u32x2, uint32x2_t, __builtin_elementwise_max)
418
419/* Packed Comparison (32-bit) */
420__packed_cmp(pmseq_i8x4_u8x4, int8x4_t, uint8x4_t, ==)
421__packed_cmp(pmseq_u8x4_u8x4, uint8x4_t, uint8x4_t, ==)
422__packed_cmp(pmsne_i8x4_u8x4, int8x4_t, uint8x4_t, !=)
423__packed_cmp(pmsne_u8x4_u8x4, uint8x4_t, uint8x4_t, !=)
424__packed_cmp(pmslt_u8x4, int8x4_t, uint8x4_t, <)
425__packed_cmp(pmsltu_u8x4, uint8x4_t, uint8x4_t, <)
426__packed_cmp(pmsgt_u8x4, int8x4_t, uint8x4_t, >)
427__packed_cmp(pmsgtu_u8x4, uint8x4_t, uint8x4_t, >)
428__packed_cmp(pmsge_u8x4, int8x4_t, uint8x4_t, >=)
429__packed_cmp(pmsgeu_u8x4, uint8x4_t, uint8x4_t, >=)
430__packed_cmp(pmsle_u8x4, int8x4_t, uint8x4_t, <=)
431__packed_cmp(pmsleu_u8x4, uint8x4_t, uint8x4_t, <=)
432__packed_cmp(pmseq_i16x2_u16x2, int16x2_t, uint16x2_t, ==)
433__packed_cmp(pmseq_u16x2_u16x2, uint16x2_t, uint16x2_t, ==)
434__packed_cmp(pmsne_i16x2_u16x2, int16x2_t, uint16x2_t, !=)
435__packed_cmp(pmsne_u16x2_u16x2, uint16x2_t, uint16x2_t, !=)
436__packed_cmp(pmslt_u16x2, int16x2_t, uint16x2_t, <)
437__packed_cmp(pmsltu_u16x2, uint16x2_t, uint16x2_t, <)
438__packed_cmp(pmsgt_u16x2, int16x2_t, uint16x2_t, >)
439__packed_cmp(pmsgtu_u16x2, uint16x2_t, uint16x2_t, >)
440__packed_cmp(pmsge_u16x2, int16x2_t, uint16x2_t, >=)
441__packed_cmp(pmsgeu_u16x2, uint16x2_t, uint16x2_t, >=)
442__packed_cmp(pmsle_u16x2, int16x2_t, uint16x2_t, <=)
443__packed_cmp(pmsleu_u16x2, uint16x2_t, uint16x2_t, <=)
444
445/* Packed Comparison (64-bit) */
446__packed_cmp(pmseq_i8x8_u8x8, int8x8_t, uint8x8_t, ==)
447__packed_cmp(pmseq_u8x8_u8x8, uint8x8_t, uint8x8_t, ==)
448__packed_cmp(pmsne_i8x8_u8x8, int8x8_t, uint8x8_t, !=)
449__packed_cmp(pmsne_u8x8_u8x8, uint8x8_t, uint8x8_t, !=)
450__packed_cmp(pmslt_u8x8, int8x8_t, uint8x8_t, <)
451__packed_cmp(pmsltu_u8x8, uint8x8_t, uint8x8_t, <)
452__packed_cmp(pmsgt_u8x8, int8x8_t, uint8x8_t, >)
453__packed_cmp(pmsgtu_u8x8, uint8x8_t, uint8x8_t, >)
454__packed_cmp(pmsge_u8x8, int8x8_t, uint8x8_t, >=)
455__packed_cmp(pmsgeu_u8x8, uint8x8_t, uint8x8_t, >=)
456__packed_cmp(pmsle_u8x8, int8x8_t, uint8x8_t, <=)
457__packed_cmp(pmsleu_u8x8, uint8x8_t, uint8x8_t, <=)
458__packed_cmp(pmseq_i16x4_u16x4, int16x4_t, uint16x4_t, ==)
459__packed_cmp(pmseq_u16x4_u16x4, uint16x4_t, uint16x4_t, ==)
460__packed_cmp(pmsne_i16x4_u16x4, int16x4_t, uint16x4_t, !=)
461__packed_cmp(pmsne_u16x4_u16x4, uint16x4_t, uint16x4_t, !=)
462__packed_cmp(pmslt_u16x4, int16x4_t, uint16x4_t, <)
463__packed_cmp(pmsltu_u16x4, uint16x4_t, uint16x4_t, <)
464__packed_cmp(pmsgt_u16x4, int16x4_t, uint16x4_t, >)
465__packed_cmp(pmsgtu_u16x4, uint16x4_t, uint16x4_t, >)
466__packed_cmp(pmsge_u16x4, int16x4_t, uint16x4_t, >=)
467__packed_cmp(pmsgeu_u16x4, uint16x4_t, uint16x4_t, >=)
468__packed_cmp(pmsle_u16x4, int16x4_t, uint16x4_t, <=)
469__packed_cmp(pmsleu_u16x4, uint16x4_t, uint16x4_t, <=)
470__packed_cmp(pmseq_i32x2_u32x2, int32x2_t, uint32x2_t, ==)
471__packed_cmp(pmseq_u32x2_u32x2, uint32x2_t, uint32x2_t, ==)
472__packed_cmp(pmsne_i32x2_u32x2, int32x2_t, uint32x2_t, !=)
473__packed_cmp(pmsne_u32x2_u32x2, uint32x2_t, uint32x2_t, !=)
474__packed_cmp(pmslt_u32x2, int32x2_t, uint32x2_t, <)
475__packed_cmp(pmsltu_u32x2, uint32x2_t, uint32x2_t, <)
476__packed_cmp(pmsgt_u32x2, int32x2_t, uint32x2_t, >)
477__packed_cmp(pmsgtu_u32x2, uint32x2_t, uint32x2_t, >)
478__packed_cmp(pmsge_u32x2, int32x2_t, uint32x2_t, >=)
479__packed_cmp(pmsgeu_u32x2, uint32x2_t, uint32x2_t, >=)
480__packed_cmp(pmsle_u32x2, int32x2_t, uint32x2_t, <=)
481__packed_cmp(pmsleu_u32x2, uint32x2_t, uint32x2_t, <=)
482
483/* Packed Shifts (32-bit) */
484__packed_shift8(psll_s_u8x4, uint8x4_t, <<)
485__packed_shift8(psll_s_i8x4, int8x4_t, <<)
486__packed_shift16(psll_s_u16x2, uint16x2_t, <<)
487__packed_shift16(psll_s_i16x2, int16x2_t, <<)
488__packed_shift8(psrl_s_u8x4, uint8x4_t, >>)
489__packed_shift16(psrl_s_u16x2, uint16x2_t, >>)
490__packed_shift8(psra_s_i8x4, int8x4_t, >>)
491__packed_shift16(psra_s_i16x2, int16x2_t, >>)
492
493/* Packed Shifts (64-bit) */
494__packed_shift8(psll_s_u8x8, uint8x8_t, <<)
495__packed_shift8(psll_s_i8x8, int8x8_t, <<)
496__packed_shift16(psll_s_u16x4, uint16x4_t, <<)
497__packed_shift16(psll_s_i16x4, int16x4_t, <<)
498__packed_shift32(psll_s_u32x2, uint32x2_t, <<)
499__packed_shift32(psll_s_i32x2, int32x2_t, <<)
500__packed_shift8(psrl_s_u8x8, uint8x8_t, >>)
501__packed_shift16(psrl_s_u16x4, uint16x4_t, >>)
502__packed_shift32(psrl_s_u32x2, uint32x2_t, >>)
503__packed_shift8(psra_s_i8x8, int8x8_t, >>)
504__packed_shift16(psra_s_i16x4, int16x4_t, >>)
505__packed_shift32(psra_s_i32x2, int32x2_t, >>)
506
507/* Packed Logical Operations (32-bit) */
508__packed_binary_op(pand_i8x4, int8x4_t, &)
509__packed_binary_op(pand_u8x4, uint8x4_t, &)
510__packed_binary_op(pand_i16x2, int16x2_t, &)
511__packed_binary_op(pand_u16x2, uint16x2_t, &)
512__packed_binary_op(por_i8x4, int8x4_t, |)
513__packed_binary_op(por_u8x4, uint8x4_t, |)
514__packed_binary_op(por_i16x2, int16x2_t, |)
515__packed_binary_op(por_u16x2, uint16x2_t, |)
516__packed_binary_op(pxor_i8x4, int8x4_t, ^)
517__packed_binary_op(pxor_u8x4, uint8x4_t, ^)
518__packed_binary_op(pxor_i16x2, int16x2_t, ^)
519__packed_binary_op(pxor_u16x2, uint16x2_t, ^)
520__packed_unary_op(pnot_i8x4, int8x4_t, ~)
521__packed_unary_op(pnot_u8x4, uint8x4_t, ~)
522__packed_unary_op(pnot_i16x2, int16x2_t, ~)
523__packed_unary_op(pnot_u16x2, uint16x2_t, ~)
524
525/* Packed Logical Operations (64-bit) */
526__packed_binary_op(pand_i8x8, int8x8_t, &)
527__packed_binary_op(pand_u8x8, uint8x8_t, &)
528__packed_binary_op(pand_i16x4, int16x4_t, &)
529__packed_binary_op(pand_u16x4, uint16x4_t, &)
530__packed_binary_op(pand_i32x2, int32x2_t, &)
531__packed_binary_op(pand_u32x2, uint32x2_t, &)
532__packed_binary_op(por_i8x8, int8x8_t, |)
533__packed_binary_op(por_u8x8, uint8x8_t, |)
534__packed_binary_op(por_i16x4, int16x4_t, |)
535__packed_binary_op(por_u16x4, uint16x4_t, |)
536__packed_binary_op(por_i32x2, int32x2_t, |)
537__packed_binary_op(por_u32x2, uint32x2_t, |)
538__packed_binary_op(pxor_i8x8, int8x8_t, ^)
539__packed_binary_op(pxor_u8x8, uint8x8_t, ^)
540__packed_binary_op(pxor_i16x4, int16x4_t, ^)
541__packed_binary_op(pxor_u16x4, uint16x4_t, ^)
542__packed_binary_op(pxor_i32x2, int32x2_t, ^)
543__packed_binary_op(pxor_u32x2, uint32x2_t, ^)
544__packed_unary_op(pnot_i8x8, int8x8_t, ~)
545__packed_unary_op(pnot_u8x8, uint8x8_t, ~)
546__packed_unary_op(pnot_i16x4, int16x4_t, ~)
547__packed_unary_op(pnot_u16x4, uint16x4_t, ~)
548__packed_unary_op(pnot_i32x2, int32x2_t, ~)
549__packed_unary_op(pnot_u32x2, uint32x2_t, ~)
550
551/* Packed Widening Convert */
560
561/* Packed Narrowing Convert */
570
571/* Packed Reverse (32-bit) */
572__packed_reverse4(prev_i8x4, int8x4_t)
574__packed_reverse2(prev_i16x2, int16x2_t)
575__packed_reverse2(prev_u16x2, uint16x2_t)
576
577/* Packed Reverse (64-bit) */
578__packed_reverse8(prev_i8x8, int8x8_t)
580__packed_reverse4(prev_i16x4, int16x4_t)
581__packed_reverse4(prev_u16x4, uint16x4_t)
582__packed_reverse2(prev_i32x2, int32x2_t)
583__packed_reverse2(prev_u32x2, uint32x2_t)
584
585/* Packed Zip */
590
591/* Packed Unzip */
592__packed_unzipe4(punzipe_i8x4, int8x4_t, int8x8_t)
593__packed_unzipo4(punzipo_i8x4, int8x4_t, int8x8_t)
596__packed_unzipe2(punzipe_i16x2, int16x2_t, int16x4_t)
597__packed_unzipo2(punzipo_i16x2, int16x2_t, int16x4_t)
600
601/* Packed Pair (32-bit byte forms) */
602__packed_pair_ee4(ppaire_i8x4, int8x4_t)
603__packed_pair_ee4(ppaire_u8x4, uint8x4_t)
604__packed_pair_eo4(ppaireo_i8x4, int8x4_t)
605__packed_pair_eo4(ppaireo_u8x4, uint8x4_t)
606__packed_pair_oe4(ppairoe_i8x4, int8x4_t)
607__packed_pair_oe4(ppairoe_u8x4, uint8x4_t)
608__packed_pair_oo4(ppairo_i8x4, int8x4_t)
609__packed_pair_oo4(ppairo_u8x4, uint8x4_t)
610
611/* Packed Pair (64-bit byte and halfword forms) */
612__packed_pair_ee8(ppaire_i8x8, int8x8_t)
613__packed_pair_ee8(ppaire_u8x8, uint8x8_t)
614__packed_pair_eo8(ppaireo_i8x8, int8x8_t)
615__packed_pair_eo8(ppaireo_u8x8, uint8x8_t)
616__packed_pair_oe8(ppairoe_i8x8, int8x8_t)
617__packed_pair_oe8(ppairoe_u8x8, uint8x8_t)
618__packed_pair_oo8(ppairo_i8x8, int8x8_t)
619__packed_pair_oo8(ppairo_u8x8, uint8x8_t)
620__packed_pair_ee4(ppaire_i16x4, int16x4_t)
621__packed_pair_ee4(ppaire_u16x4, uint16x4_t)
622__packed_pair_eo4(ppaireo_i16x4, int16x4_t)
623__packed_pair_eo4(ppaireo_u16x4, uint16x4_t)
624__packed_pair_oe4(ppairoe_i16x4, int16x4_t)
625__packed_pair_oe4(ppairoe_u16x4, uint16x4_t)
626__packed_pair_oo4(ppairo_i16x4, int16x4_t)
627__packed_pair_oo4(ppairo_u16x4, uint16x4_t)
628
629/* Packed Narrowing Zip (32-bit) */
634
635/* Packed Narrowing Zip (64-bit) */
642__packed_nziph2(pnziph_i16x4, int16x4_t, int32x2_t)
644
645/* Packed Averaging Addition and Subtraction (32-bit) */
646__packed_binary_builtin(paadd_i8x4, int8x4_t, __builtin_riscv_paadd_i8x4)
647__packed_binary_builtin(paadd_i16x2, int16x2_t, __builtin_riscv_paadd_i16x2)
648__packed_binary_builtin(paaddu_u8x4, uint8x4_t, __builtin_riscv_paaddu_u8x4)
649__packed_binary_builtin(paaddu_u16x2, uint16x2_t, __builtin_riscv_paaddu_u16x2)
650__packed_binary_builtin(pasub_i8x4, int8x4_t, __builtin_riscv_pasub_i8x4)
651__packed_binary_builtin(pasub_i16x2, int16x2_t, __builtin_riscv_pasub_i16x2)
652__packed_binary_builtin(pasubu_u8x4, uint8x4_t, __builtin_riscv_pasubu_u8x4)
653__packed_binary_builtin(pasubu_u16x2, uint16x2_t, __builtin_riscv_pasubu_u16x2)
654
655/* Packed Averaging Addition and Subtraction (64-bit) */
656__packed_binary_builtin(paadd_i8x8, int8x8_t, __builtin_riscv_paadd_i8x8)
657__packed_binary_builtin(paadd_i16x4, int16x4_t, __builtin_riscv_paadd_i16x4)
658__packed_binary_builtin(paadd_i32x2, int32x2_t, __builtin_riscv_paadd_i32x2)
659__packed_binary_builtin(paaddu_u8x8, uint8x8_t, __builtin_riscv_paaddu_u8x8)
660__packed_binary_builtin(paaddu_u16x4, uint16x4_t, __builtin_riscv_paaddu_u16x4)
661__packed_binary_builtin(paaddu_u32x2, uint32x2_t, __builtin_riscv_paaddu_u32x2)
662__packed_binary_builtin(pasub_i8x8, int8x8_t, __builtin_riscv_pasub_i8x8)
663__packed_binary_builtin(pasub_i16x4, int16x4_t, __builtin_riscv_pasub_i16x4)
664__packed_binary_builtin(pasub_i32x2, int32x2_t, __builtin_riscv_pasub_i32x2)
665__packed_binary_builtin(pasubu_u8x8, uint8x8_t, __builtin_riscv_pasubu_u8x8)
666__packed_binary_builtin(pasubu_u16x4, uint16x4_t, __builtin_riscv_pasubu_u16x4)
667__packed_binary_builtin(pasubu_u32x2, uint32x2_t, __builtin_riscv_pasubu_u32x2)
668
669/* Packed Absolute Value and Absolute Difference (32-bit) */
672__packed_binary_builtin_cast(pabd_i8x4, int8x4_t, uint8x4_t, __builtin_riscv_pabd_i8x4)
673__packed_binary_builtin_cast(pabd_i16x2, int16x2_t, uint16x2_t, __builtin_riscv_pabd_i16x2)
674__packed_binary_builtin_cast(pabdu_u8x4, uint8x4_t, uint8x4_t, __builtin_riscv_pabdu_u8x4)
675__packed_binary_builtin_cast(pabdu_u16x2, uint16x2_t, uint16x2_t, __builtin_riscv_pabdu_u16x2)
676
677/* Packed Absolute Value and Absolute Difference (64-bit) */
680__packed_binary_builtin_cast(pabd_i8x8, int8x8_t, uint8x8_t, __builtin_riscv_pabd_i8x8)
681__packed_binary_builtin_cast(pabd_i16x4, int16x4_t, uint16x4_t, __builtin_riscv_pabd_i16x4)
682__packed_binary_builtin_cast(pabdu_u8x8, uint8x8_t, uint8x8_t, __builtin_riscv_pabdu_u8x8)
683__packed_binary_builtin_cast(pabdu_u16x4, uint16x4_t, uint16x4_t, __builtin_riscv_pabdu_u16x4)
684
685/* Packed Reduction Sum (32-bit) */
686__packed_reduction(predsum_i8x4_i32, int32_t, int8x4_t, __builtin_riscv_predsum_i8x4_i32)
687__packed_reduction(predsumu_u8x4_u32, uint32_t, uint8x4_t, __builtin_riscv_predsumu_u8x4_u32)
688__packed_reduction(predsum_i16x2_i32, int32_t, int16x2_t, __builtin_riscv_predsum_i16x2_i32)
689__packed_reduction(predsumu_u16x2_u32, uint32_t, uint16x2_t, __builtin_riscv_predsumu_u16x2_u32)
690
691/* Packed Reduction Sum (64-bit) */
692__packed_reduction(predsum_i8x8_i32, int32_t, int8x8_t, __builtin_riscv_predsum_i8x8_i32)
693__packed_reduction(predsumu_u8x8_u32, uint32_t, uint8x8_t, __builtin_riscv_predsumu_u8x8_u32)
694__packed_reduction(predsum_i16x4_i32, int32_t, int16x4_t, __builtin_riscv_predsum_i16x4_i32)
695__packed_reduction(predsumu_u16x4_u32, uint32_t, uint16x4_t, __builtin_riscv_predsumu_u16x4_u32)
696__packed_reduction(predsum_i8x8_i64, int64_t, int8x8_t, __builtin_riscv_predsum_i8x8_i64)
697__packed_reduction(predsumu_u8x8_u64, uint64_t, uint8x8_t, __builtin_riscv_predsumu_u8x8_u64)
698__packed_reduction(predsum_i16x4_i64, int64_t, int16x4_t, __builtin_riscv_predsum_i16x4_i64)
699__packed_reduction(predsumu_u16x4_u64, uint64_t, uint16x4_t, __builtin_riscv_predsumu_u16x4_u64)
700__packed_reduction(predsum_i32x2_i64, int64_t, int32x2_t, __builtin_riscv_predsum_i32x2_i64)
701__packed_reduction(predsumu_u32x2_u64, uint64_t, uint32x2_t, __builtin_riscv_predsumu_u32x2_u64)
702
703/* Packed Merge (32-bit) */
704__packed_merge_builtin(pmerge_u8x4, uint8x4_t, uint8x4_t, __builtin_riscv_pmerge_u8x4)
705__packed_merge_builtin(pmerge_i8x4, int8x4_t, uint8x4_t, __builtin_riscv_pmerge_i8x4)
706__packed_merge_builtin(pmerge_u16x2, uint16x2_t, uint16x2_t, __builtin_riscv_pmerge_u16x2)
707__packed_merge_builtin(pmerge_i16x2, int16x2_t, uint16x2_t, __builtin_riscv_pmerge_i16x2)
708
709/* Packed Merge (64-bit) */
710__packed_merge_builtin(pmerge_u8x8, uint8x8_t, uint8x8_t, __builtin_riscv_pmerge_u8x8)
711__packed_merge_builtin(pmerge_i8x8, int8x8_t, uint8x8_t, __builtin_riscv_pmerge_i8x8)
712__packed_merge_builtin(pmerge_u16x4, uint16x4_t, uint16x4_t, __builtin_riscv_pmerge_u16x4)
713__packed_merge_builtin(pmerge_i16x4, int16x4_t, uint16x4_t, __builtin_riscv_pmerge_i16x4)
714__packed_merge_builtin(pmerge_u32x2, uint32x2_t, uint32x2_t, __builtin_riscv_pmerge_u32x2)
715__packed_merge_builtin(pmerge_i32x2, int32x2_t, uint32x2_t, __builtin_riscv_pmerge_i32x2)
716
717/* Packed Absolute Difference Sum (32-bit) */
718__packed_abdsum(pabdsumu_u8x4_u32, uint32_t, uint8x4_t, __builtin_riscv_pabdsumu_u8x4_u32)
719__packed_abdsum_acc(pabdsumau_u8x4_u32, uint32_t, uint8x4_t, __builtin_riscv_pabdsumau_u8x4_u32)
720
721/* Packed Absolute Difference Sum (64-bit) */
722__packed_abdsum(pabdsumu_u8x8_u32, uint32_t, uint8x8_t, __builtin_riscv_pabdsumu_u8x8_u32)
723__packed_abdsum(pabdsumu_u8x8_u64, uint64_t, uint8x8_t, __builtin_riscv_pabdsumu_u8x8_u64)
724__packed_abdsum_acc(pabdsumau_u8x8_u32, uint32_t, uint8x8_t, __builtin_riscv_pabdsumau_u8x8_u32)
725__packed_abdsum_acc(pabdsumau_u8x8_u64, uint64_t, uint8x8_t, __builtin_riscv_pabdsumau_u8x8_u64)
726
727/* Packed Saturating Absolute Value (32-bit) */
728__packed_psabs(psabs_i8x4, int8x4_t, __builtin_riscv_psabs_i8x4)
729__packed_psabs(psabs_i16x2, int16x2_t, __builtin_riscv_psabs_i16x2)
730
731/* Packed Saturating Absolute Value (64-bit) */
732__packed_psabs(psabs_i8x8, int8x8_t, __builtin_riscv_psabs_i8x8)
733__packed_psabs(psabs_i16x4, int16x4_t, __builtin_riscv_psabs_i16x4)
734
735/* Packed "Q-format" Multiplication (32-bit) */
736__packed_binary_builtin(pmulq_i16x2, int16x2_t, __builtin_riscv_pmulq_i16x2)
737__packed_binary_builtin(pmulqr_i16x2, int16x2_t, __builtin_riscv_pmulqr_i16x2)
738
739/* Packed "Q-format" Multiplication (64-bit) */
740__packed_binary_builtin(pmulq_i16x4, int16x4_t, __builtin_riscv_pmulq_i16x4)
741__packed_binary_builtin(pmulqr_i16x4, int16x4_t, __builtin_riscv_pmulqr_i16x4)
742__packed_binary_builtin(pmulq_i32x2, int32x2_t, __builtin_riscv_pmulq_i32x2)
743__packed_binary_builtin(pmulqr_i32x2, int32x2_t, __builtin_riscv_pmulqr_i32x2)
744
745/* Reinterpret Casts, Packed <-> Scalar (32-bit) */
762
763/* Reinterpret Casts, Packed <-> Scalar (64-bit) */
764__packed_reinterpret(u8x8_u64, uint64_t, uint8x8_t)
765__packed_reinterpret(u16x4_u64, uint64_t, uint16x4_t)
766__packed_reinterpret(u32x2_u64, uint64_t, uint32x2_t)
767__packed_reinterpret(i8x8_u64, uint64_t, int8x8_t)
768__packed_reinterpret(i16x4_u64, uint64_t, int16x4_t)
769__packed_reinterpret(i32x2_u64, uint64_t, int32x2_t)
770__packed_reinterpret(u8x8_i64, int64_t, uint8x8_t)
771__packed_reinterpret(u16x4_i64, int64_t, uint16x4_t)
772__packed_reinterpret(u32x2_i64, int64_t, uint32x2_t)
773__packed_reinterpret(i8x8_i64, int64_t, int8x8_t)
774__packed_reinterpret(i16x4_i64, int64_t, int16x4_t)
775__packed_reinterpret(i32x2_i64, int64_t, int32x2_t)
776__packed_reinterpret(u64_u8x8, uint8x8_t, uint64_t)
777__packed_reinterpret(u64_u16x4, uint16x4_t, uint64_t)
778__packed_reinterpret(u64_u32x2, uint32x2_t, uint64_t)
779__packed_reinterpret(u64_i8x8, int8x8_t, uint64_t)
780__packed_reinterpret(u64_i16x4, int16x4_t, uint64_t)
781__packed_reinterpret(u64_i32x2, int32x2_t, uint64_t)
782__packed_reinterpret(i64_u8x8, uint8x8_t, int64_t)
783__packed_reinterpret(i64_u16x4, uint16x4_t, int64_t)
784__packed_reinterpret(i64_u32x2, uint32x2_t, int64_t)
785__packed_reinterpret(i64_i8x8, int8x8_t, int64_t)
786__packed_reinterpret(i64_i16x4, int16x4_t, int64_t)
787__packed_reinterpret(i64_i32x2, int32x2_t, int64_t)
788
789/* Reinterpret Casts, Packed <-> Packed (32-bit) */
802
803/* Reinterpret Casts, Packed <-> Packed (64-bit) */
834
835// clang-format on
836
837#undef __packed_splat2
838#undef __packed_splat4
839#undef __packed_splat8
840#undef __packed_splat
841#undef __packed_shift
842#undef __packed_shift8
843#undef __packed_shift16
844#undef __packed_shift32
845#undef __packed_scalar_binary_op
846#undef __packed_binary_op
847#undef __packed_unary_op
848#undef __packed_binary_builtin
849#undef __packed_sh1add
850#undef __packed_sh1sadd
851#undef __packed_cmp
852#undef __packed_pabs
853#undef __packed_binary_builtin_cast
854#undef __packed_reduction
855#undef __packed_merge_builtin
856#undef __packed_psabs
857#undef __packed_widen_convert
858#undef __packed_widen_high2
859#undef __packed_widen_high4
860#undef __packed_narrow_even2
861#undef __packed_narrow_even4
862#undef __packed_narrow_odd2
863#undef __packed_narrow_odd4
864#undef __packed_reverse2
865#undef __packed_reverse4
866#undef __packed_reverse8
867#undef __packed_zip2
868#undef __packed_zip4
869#undef __packed_unzipe2
870#undef __packed_unzipe4
871#undef __packed_unzipo2
872#undef __packed_unzipo4
873#undef __packed_pair_ee4
874#undef __packed_pair_eo4
875#undef __packed_pair_oe4
876#undef __packed_pair_oo4
877#undef __packed_pair_ee8
878#undef __packed_pair_eo8
879#undef __packed_pair_oe8
880#undef __packed_pair_oo8
881#undef __packed_nzip2
882#undef __packed_nzip4
883#undef __packed_nziph2
884#undef __packed_nziph4
885#undef __packed_abdsum
886#undef __packed_abdsum_acc
887#undef __packed_reinterpret
888#undef __DEFAULT_FN_ATTRS
889
890#if defined(__cplusplus)
891}
892#endif
893
894#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_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_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_unary_op(name, ty, op)
#define __packed_psabs(name, ty, builtin)
#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_abdsum_acc(name, rty, ty, 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_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)