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_scalar_binary_op(name, ty, scalar_ty, op, splat) \
45 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, \
46 scalar_ty __rs2) { \
47 return __rs1 op splat(ty, __rs2); \
48 }
49
50#define __packed_binary_op(name, ty, op) \
51 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, ty __rs2) { \
52 return __rs1 op __rs2; \
53 }
54
55#define __packed_unary_op(name, ty, op) \
56 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
57 return op __rs1; \
58 }
59
60#define __packed_extract(name, rty, ty, max_idx) \
61 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __v, \
62 unsigned __idx) \
63 __attribute__((__enable_if__( \
64 __idx <= (max_idx), \
65 "index must be a constant integer from 0 to " #max_idx))) { \
66 return __v[__idx]; \
67 }
68
69#define __packed_subvector_extract8(name, rty, ty) \
70 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __v, \
71 unsigned __idx) \
72 __attribute__((__enable_if__( \
73 __idx <= 1, "index must be a constant integer from 0 to 1"))) { \
74 return __idx ? __builtin_shufflevector(__v, __v, 4, 5, 6, 7) \
75 : __builtin_shufflevector(__v, __v, 0, 1, 2, 3); \
76 }
77#define __packed_subvector_extract4(name, rty, ty) \
78 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __v, \
79 unsigned __idx) \
80 __attribute__((__enable_if__( \
81 __idx <= 1, "index must be a constant integer from 0 to 1"))) { \
82 return __idx ? __builtin_shufflevector(__v, __v, 2, 3) \
83 : __builtin_shufflevector(__v, __v, 0, 1); \
84 }
85
86#define __packed_store(name, ty, elt_ty) \
87 static __inline__ void __DEFAULT_FN_ATTRS __riscv_##name(elt_ty *__p, \
88 ty __v) { \
89 typedef ty __attribute__((__aligned__(1))) ua_ty; \
90 *(ua_ty *)__p = __v; \
91 }
92
93#define __packed_binary_builtin(name, ty, builtin) \
94 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, ty __rs2) { \
95 return builtin(__rs1, __rs2); \
96 }
97
98#define __packed_binary_builtin_mixed(name, rty, ty1, ty2, builtin) \
99 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty1 __rs1, \
100 ty2 __rs2) { \
101 return builtin(__rs1, __rs2); \
102 }
103
104#define __packed_ternary_builtin(name, ty, builtin) \
105 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rd, ty __rs1, \
106 ty __rs2) { \
107 return builtin(__rd, __rs1, __rs2); \
108 }
109
110#define __packed_ternary_builtin_mixed(name, rty, ty1, ty2, builtin) \
111 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(rty __rd, ty1 __rs1, \
112 ty2 __rs2) { \
113 return builtin(__rd, __rs1, __rs2); \
114 }
115
116#define __packed_sh1add(name, ty) \
117 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, ty __rs2) { \
118 return (__rs1 << 1) + __rs2; \
119 }
120
121/* TODO: switch to sadd_sat(__builtin_elementwise_shl_sat(a, 1), b) once a
122 * generic elementwise shl_sat builtin exists. sadd_sat(a, a) is equivalent
123 * for signed types and the backend's saturating_shl1 PatFrags matches both
124 * shapes. */
125#define __packed_sh1sadd(name, ty) \
126 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, ty __rs2) { \
127 return __builtin_elementwise_add_sat( \
128 __builtin_elementwise_add_sat(__rs1, __rs1), __rs2); \
129 }
130
131#define __packed_cmp(name, ty, rty, op) \
132 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, \
133 ty __rs2) { \
134 return (rty)(__rs1 op __rs2); \
135 }
136
137#define __packed_pabs(name, ty, rty) \
138 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
139 return (rty)__builtin_elementwise_abs(__rs1); \
140 }
141
142#define __packed_binary_builtin_cast(name, ty, rty, builtin) \
143 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, \
144 ty __rs2) { \
145 return (rty)builtin(__rs1, __rs2); \
146 }
147
148#define __packed_reduction(name, rty, ty, builtin) \
149 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, \
150 rty __rs2) { \
151 return builtin(__rs1, __rs2); \
152 }
153
154#define __packed_merge_builtin(name, ty, mask_ty, builtin) \
155 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, ty __rs2, \
156 mask_ty __rd) { \
157 return (ty)builtin(__rs1, __rs2, __rd); \
158 }
159
160#define __packed_unary_builtin(name, ty, builtin) \
161 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
162 return builtin(__rs1); \
163 }
164
165#define __packed_cls(name, ty, builtin) \
166 static __inline__ unsigned __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
167 return builtin(__rs1); \
168 }
169
170#define __packed_slx(name, ty) \
171 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rd, ty __rs1, \
172 unsigned __shamt) { \
173 return __builtin_elementwise_fshl(__rd, __rs1, (ty)__shamt); \
174 }
175
176#define __packed_srx(name, ty) \
177 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rd, ty __rs1, \
178 unsigned __shamt) { \
179 return __builtin_elementwise_fshr(__rs1, __rd, (ty)__shamt); \
180 }
181
182#define __packed_slideupx(name, ty, bits_ty, log2_elt_bits) \
183 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rd, ty __rs1, \
184 unsigned __rs2) { \
185 bits_ty __bits = __builtin_elementwise_fshl( \
186 __builtin_bit_cast(bits_ty, __rd), __builtin_bit_cast(bits_ty, __rs1), \
187 (bits_ty)__rs2 << (log2_elt_bits)); \
188 return __builtin_bit_cast(ty, __bits); \
189 }
190
191#define __packed_slidedownx(name, ty, bits_ty, log2_elt_bits) \
192 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rd, ty __rs1, \
193 unsigned __rs2) { \
194 bits_ty __bits = __builtin_elementwise_fshr( \
195 __builtin_bit_cast(bits_ty, __rs1), __builtin_bit_cast(bits_ty, __rd), \
196 (bits_ty)__rs2 << (log2_elt_bits)); \
197 return __builtin_bit_cast(ty, __bits); \
198 }
199
200#define __packed_widen_convert(name, rty, ty) \
201 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
202 return __builtin_convertvector(__rs1, rty); \
203 }
204#define __packed_widen_binary_op(name, rty, ty, op) \
205 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, \
206 ty __rs2) { \
207 return __builtin_convertvector(__rs1, rty) \
208 op __builtin_convertvector(__rs2, rty); \
209 }
210#define __packed_widen_binary_acc_op(name, rty, ty, op) \
211 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(rty __rd, ty __rs1, \
212 ty __rs2) { \
213 return __rd op __builtin_convertvector(__rs1, rty) \
214 op __builtin_convertvector(__rs2, rty); \
215 }
216#define __packed_widen_sub_acc_op(name, rty, ty) \
217 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(rty __rd, ty __rs1, \
218 ty __rs2) { \
219 return __rd + __builtin_convertvector(__rs1, rty) - \
220 __builtin_convertvector(__rs2, rty); \
221 }
222#define __packed_widen_mul(name, rty, ty) \
223 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, \
224 ty __rs2) { \
225 return __builtin_convertvector(__rs1, rty) * \
226 __builtin_convertvector(__rs2, rty); \
227 }
228#define __packed_widen_mulsu(name, rty, ty1, ty2, uty) \
229 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty1 __rs1, \
230 ty2 __rs2) { \
231 return __builtin_convertvector(__rs1, rty) * \
232 (rty) __builtin_convertvector(__rs2, uty); \
233 }
234#define __packed_widen_high2(name, rty, ty) \
235 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
236 return (rty)__builtin_shufflevector((ty){0}, __rs1, 0, 2, 1, 3); \
237 }
238#define __packed_widen_high4(name, rty, ty) \
239 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
240 return (rty)__builtin_shufflevector((ty){0}, __rs1, 0, 4, 1, 5, 2, 6, 3, \
241 7); \
242 }
243
244#define __packed_narrow_even2(name, rty, ty, sty) \
245 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
246 return __builtin_convertvector(__rs1, rty); \
247 }
248#define __packed_narrow_even4(name, rty, ty, sty) \
249 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
250 return __builtin_convertvector(__rs1, rty); \
251 }
252#define __packed_narrow_odd2(name, rty, ty, sty, uty) \
253 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
254 return __builtin_shufflevector((sty)__rs1, (sty)__rs1, 1, 3); \
255 }
256#define __packed_narrow_odd4(name, rty, ty, sty, uty) \
257 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
258 return __builtin_shufflevector((sty)__rs1, (sty)__rs1, 1, 3, 5, 7); \
259 }
260
261/* Packed Reverse: reverse the order of the elements. Lowered to a single
262 * rev8/rev16/ppairoe.* by the backend's packed reverse-shuffle handling. */
263#define __packed_reverse2(name, ty) \
264 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
265 return __builtin_shufflevector(__rs1, __rs1, 1, 0); \
266 }
267#define __packed_reverse4(name, ty) \
268 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
269 return __builtin_shufflevector(__rs1, __rs1, 3, 2, 1, 0); \
270 }
271#define __packed_reverse8(name, ty) \
272 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
273 return __builtin_shufflevector(__rs1, __rs1, 7, 6, 5, 4, 3, 2, 1, 0); \
274 }
275
276#define __packed_zip2(name, rty, ty) \
277 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, \
278 ty __rs2) { \
279 return __builtin_shufflevector(__rs1, __rs2, 0, 2, 1, 3); \
280 }
281#define __packed_zip4(name, rty, ty) \
282 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, \
283 ty __rs2) { \
284 return __builtin_shufflevector(__rs1, __rs2, 0, 4, 1, 5, 2, 6, 3, 7); \
285 }
286#define __packed_unzipe2(name, rty, ty) \
287 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
288 return __builtin_shufflevector(__rs1, __rs1, 0, 2); \
289 }
290#define __packed_unzipe4(name, rty, ty) \
291 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
292 return __builtin_shufflevector(__rs1, __rs1, 0, 2, 4, 6); \
293 }
294#define __packed_unzipo2(name, rty, ty) \
295 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
296 return __builtin_shufflevector(__rs1, __rs1, 1, 3); \
297 }
298#define __packed_unzipo4(name, rty, ty) \
299 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
300 return __builtin_shufflevector(__rs1, __rs1, 1, 3, 5, 7); \
301 }
302
303#define __packed_concat2(name, rty, ty) \
304 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __lo, ty __hi) { \
305 return __builtin_shufflevector(__lo, __hi, 0, 1, 2, 3); \
306 }
307#define __packed_concat4(name, rty, ty) \
308 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __lo, ty __hi) { \
309 return __builtin_shufflevector(__lo, __hi, 0, 1, 2, 3, 4, 5, 6, 7); \
310 }
311
312#define __packed_slide1(name, ty, elt_ty, ...) \
313 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rd, \
314 elt_ty __rs1) { \
315 return __builtin_shufflevector(__rd, (ty){__rs1}, __VA_ARGS__); \
316 }
317
318#define __packed_pair_ee2(name, ty) \
319 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, ty __rs2) { \
320 return __builtin_shufflevector(__rs1, __rs2, 0, 2); \
321 }
322#define __packed_pair_eo2(name, ty) \
323 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, ty __rs2) { \
324 return __builtin_shufflevector(__rs1, __rs2, 0, 3); \
325 }
326#define __packed_pair_oe2(name, ty) \
327 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, ty __rs2) { \
328 return __builtin_shufflevector(__rs1, __rs2, 1, 2); \
329 }
330#define __packed_pair_oo2(name, ty) \
331 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, ty __rs2) { \
332 return __builtin_shufflevector(__rs1, __rs2, 1, 3); \
333 }
334#define __packed_pair_ee4(name, ty) \
335 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, ty __rs2) { \
336 return __builtin_shufflevector(__rs1, __rs2, 0, 4, 2, 6); \
337 }
338#define __packed_pair_eo4(name, ty) \
339 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, ty __rs2) { \
340 return __builtin_shufflevector(__rs1, __rs2, 0, 5, 2, 7); \
341 }
342#define __packed_pair_oe4(name, ty) \
343 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, ty __rs2) { \
344 return __builtin_shufflevector(__rs1, __rs2, 1, 4, 3, 6); \
345 }
346#define __packed_pair_oo4(name, ty) \
347 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, ty __rs2) { \
348 return __builtin_shufflevector(__rs1, __rs2, 1, 5, 3, 7); \
349 }
350#define __packed_pair_ee8(name, ty) \
351 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, ty __rs2) { \
352 return __builtin_shufflevector(__rs1, __rs2, 0, 8, 2, 10, 4, 12, 6, 14); \
353 }
354#define __packed_pair_eo8(name, ty) \
355 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, ty __rs2) { \
356 return __builtin_shufflevector(__rs1, __rs2, 0, 9, 2, 11, 4, 13, 6, 15); \
357 }
358#define __packed_pair_oe8(name, ty) \
359 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, ty __rs2) { \
360 return __builtin_shufflevector(__rs1, __rs2, 1, 8, 3, 10, 5, 12, 7, 14); \
361 }
362#define __packed_pair_oo8(name, ty) \
363 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, ty __rs2) { \
364 return __builtin_shufflevector(__rs1, __rs2, 1, 9, 3, 11, 5, 13, 7, 15); \
365 }
366
367#define __packed_nzip2(name, rty, ty) \
368 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, \
369 ty __rs2) { \
370 return __builtin_shufflevector((rty)__rs1, (rty)__rs2, 0, 4, 2, 6); \
371 }
372#define __packed_nzip4(name, rty, ty) \
373 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, \
374 ty __rs2) { \
375 return __builtin_shufflevector((rty)__rs1, (rty)__rs2, 0, 8, 2, 10, 4, 12, \
376 6, 14); \
377 }
378#define __packed_nziph2(name, rty, ty) \
379 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, \
380 ty __rs2) { \
381 return __builtin_shufflevector((rty)__rs1, (rty)__rs2, 1, 5, 3, 7); \
382 }
383#define __packed_nziph4(name, rty, ty) \
384 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, \
385 ty __rs2) { \
386 return __builtin_shufflevector((rty)__rs1, (rty)__rs2, 1, 9, 3, 11, 5, 13, \
387 7, 15); \
388 }
389
390#define __packed_wunzip_ext(name, rty, ty, ext) \
391 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
392 return ext(__rs1); \
393 }
394
395#define __packed_wunzip_shift(name, rty, ty, op, shamt) \
396 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
397 return (rty)__rs1 op shamt; \
398 }
399
400#define __packed_wunzip_odd_hi(name, rty, ty, zip) \
401 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
402 return (rty)zip((rty){0}, (rty)__rs1); \
403 }
404
405#define __packed_abdsum(name, rty, ty, builtin) \
406 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, \
407 ty __rs2) { \
408 return builtin(__rs1, __rs2); \
409 }
410
411#define __packed_ternary_builtin_cast(name, rty, ty, builtin) \
412 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(rty __rd, ty __rs1, \
413 ty __rs2) { \
414 return builtin(__rd, __rs1, __rs2); \
415 }
416
417#define __packed_reinterpret(name, rty, ty) \
418 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_preinterpret_##name( \
419 ty __x) { \
420 return __builtin_bit_cast(rty, __x); \
421 }
422
423#define __packed_insert(name, ty, elt_ty, max_idx) \
424 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __v, elt_ty __e, \
425 unsigned __idx) \
426 __attribute__((__enable_if__( \
427 __idx <= (max_idx), \
428 "index must be a constant integer from 0 to " #max_idx))) { \
429 __v[__idx] = __e; \
430 return __v; \
431 }
432
433#define __packed_join2(name, ty, elt_ty) \
434 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(elt_ty __e0, \
435 elt_ty __e1) { \
436 return (ty){__e0, __e1}; \
437 }
438
439#define __packed_join4(name, ty, elt_ty) \
440 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name( \
441 elt_ty __e0, elt_ty __e1, elt_ty __e2, elt_ty __e3) { \
442 return (ty){__e0, __e1, __e2, __e3}; \
443 }
444
445#define __packed_load(name, ty, elt_ty) \
446 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(elt_ty *__p) { \
447 typedef ty __attribute__((__aligned__(1))) ua_ty; \
448 return *(ua_ty *)__p; \
449 }
450
451// clang-format off: macro call sites have no trailing semicolons, which
452// confuses clang-format into a deeply nested expression.
453
454/* Scalar Bitmanip */
455__packed_cls(cls_32, int32_t, __builtin_clrsb)
456__packed_unary_builtin(rev_32, uint32_t, __builtin_bitreverse32)
458__packed_srx(srx_32, uint32_t)
459#if __riscv_xlen == 64
460__packed_cls(cls_64, int64_t, __builtin_clrsbll)
461__packed_unary_builtin(rev_64, uint64_t, __builtin_bitreverse64)
462__packed_unary_builtin(rev16_64, uint64_t, __builtin_riscv_rev16_64)
463__packed_slx(slx_64, uint64_t)
464__packed_srx(srx_64, uint64_t)
465#endif
466
467/* Scalar Averaging Addition and Subtraction */
468__packed_binary_builtin(aadd_i32, int32_t, __builtin_riscv_aadd_i32)
469__packed_binary_builtin(aaddu_u32, uint32_t, __builtin_riscv_aaddu_u32)
470__packed_binary_builtin(asub_i32, int32_t, __builtin_riscv_asub_i32)
471__packed_binary_builtin(asubu_u32, uint32_t, __builtin_riscv_asubu_u32)
472
473/* Scalar Saturating Addition and Subtraction */
474__packed_binary_builtin(sadd_i32, int32_t, __builtin_elementwise_add_sat)
475__packed_binary_builtin(saddu_u32, uint32_t, __builtin_elementwise_add_sat)
476__packed_binary_builtin(ssub_i32, int32_t, __builtin_elementwise_sub_sat)
477__packed_binary_builtin(ssubu_u32, uint32_t, __builtin_elementwise_sub_sat)
478
479/* Scalar Absolute Value */
481#if __riscv_xlen == 64
482__packed_pabs(abs_u64, int64_t, uint64_t)
483#endif
484
485/* Scalar Saturation */
486#define __riscv_sati_i32(rs1, width) __builtin_riscv_sati_i32(rs1, width)
487#define __riscv_usati_u32(rs1, width) __builtin_riscv_usati_u32(rs1, width)
488#if __riscv_xlen == 64
489#define __riscv_sati_i64(rs1, width) __builtin_riscv_sati_i64(rs1, width)
490#define __riscv_usati_u64(rs1, width) __builtin_riscv_usati_u64(rs1, width)
491#endif
492
493/* Scalar Multiply High */
494#define __packed_mulh_builtin(name, res_ty, ty1, ty2) \
495 static __inline__ res_ty __DEFAULT_FN_ATTRS __riscv_##name(ty1 __rs1, \
496 ty2 __rs2) { \
497 return __builtin_riscv_##name(__rs1, __rs2); \
498 }
505#undef __packed_mulh_builtin
506
507/* Scalar Multiply High Accumulate */
508__packed_ternary_builtin(mhacc_i32, int32_t, __builtin_riscv_mhacc_i32)
509__packed_ternary_builtin(mhracc_i32, int32_t, __builtin_riscv_mhracc_i32)
510__packed_ternary_builtin(mhaccu_u32, uint32_t, __builtin_riscv_mhaccu_u32)
511__packed_ternary_builtin(mhraccu_u32, uint32_t, __builtin_riscv_mhraccu_u32)
512__packed_ternary_builtin_mixed(mhaccsu_i32, int32_t, int32_t, uint32_t, __builtin_riscv_mhaccsu_i32)
513__packed_ternary_builtin_mixed(mhraccsu_i32, int32_t, int32_t, uint32_t, __builtin_riscv_mhraccsu_i32)
514
515/* Scalar "Q-format" Multiplication */
516__packed_binary_builtin(mulq_i32, int32_t, __builtin_riscv_mulq_i32)
517__packed_binary_builtin(mulqr_i32, int32_t, __builtin_riscv_mulqr_i32)
518
519/* Scalar "Q-format" Multiply with Widening Accumulate */
520__packed_ternary_builtin_mixed(mqwacc_i64, int64_t, int32_t, int32_t, __builtin_riscv_mqwacc_i64)
521__packed_ternary_builtin_mixed(mqrwacc_i64, int64_t, int32_t, int32_t, __builtin_riscv_mqrwacc_i64)
522
523/* Packed Splat (32-bit) */
528
529/* Packed Splat (64-bit) */
536
537/* Packed Addition and Subtraction (32-bit) */
542__packed_binary_op(psub_i8x4, int8x4_t, -)
544__packed_binary_op(psub_i16x2, int16x2_t, -)
546__packed_unary_op(pneg_i8x4, int8x4_t, -)
548
549/* Packed Addition and Subtraction (64-bit) */
556__packed_binary_op(psub_i8x8, int8x8_t, -)
558__packed_binary_op(psub_i16x4, int16x4_t, -)
560__packed_binary_op(psub_i32x2, int32x2_t, -)
562__packed_unary_op(pneg_i8x8, int8x8_t, -)
564__packed_unary_op(pneg_i32x2, int32x2_t, -)
565
566/* Packed Addition with Scalar (32-bit) */
573
574/* Packed Addition with Scalar (64-bit) */
585
586/* Packed Saturating Addition and Subtraction (32-bit) */
587__packed_binary_builtin(psadd_i8x4, int8x4_t, __builtin_elementwise_add_sat)
588__packed_binary_builtin(psadd_i16x2, int16x2_t, __builtin_elementwise_add_sat)
589__packed_binary_builtin(psaddu_u8x4, uint8x4_t, __builtin_elementwise_add_sat)
590__packed_binary_builtin(psaddu_u16x2, uint16x2_t, __builtin_elementwise_add_sat)
591__packed_binary_builtin(pssub_i8x4, int8x4_t, __builtin_elementwise_sub_sat)
592__packed_binary_builtin(pssub_i16x2, int16x2_t, __builtin_elementwise_sub_sat)
593__packed_binary_builtin(pssubu_u8x4, uint8x4_t, __builtin_elementwise_sub_sat)
594__packed_binary_builtin(pssubu_u16x2, uint16x2_t, __builtin_elementwise_sub_sat)
595
596/* Packed Saturating Addition and Subtraction (64-bit) */
597__packed_binary_builtin(psadd_i8x8, int8x8_t, __builtin_elementwise_add_sat)
598__packed_binary_builtin(psadd_i16x4, int16x4_t, __builtin_elementwise_add_sat)
599__packed_binary_builtin(psadd_i32x2, int32x2_t, __builtin_elementwise_add_sat)
600__packed_binary_builtin(psaddu_u8x8, uint8x8_t, __builtin_elementwise_add_sat)
601__packed_binary_builtin(psaddu_u16x4, uint16x4_t, __builtin_elementwise_add_sat)
602__packed_binary_builtin(psaddu_u32x2, uint32x2_t, __builtin_elementwise_add_sat)
603__packed_binary_builtin(pssub_i8x8, int8x8_t, __builtin_elementwise_sub_sat)
604__packed_binary_builtin(pssub_i16x4, int16x4_t, __builtin_elementwise_sub_sat)
605__packed_binary_builtin(pssub_i32x2, int32x2_t, __builtin_elementwise_sub_sat)
606__packed_binary_builtin(pssubu_u8x8, uint8x8_t, __builtin_elementwise_sub_sat)
607__packed_binary_builtin(pssubu_u16x4, uint16x4_t, __builtin_elementwise_sub_sat)
608__packed_binary_builtin(pssubu_u32x2, uint32x2_t, __builtin_elementwise_sub_sat)
609
610/* Packed Shift-Add (32-bit) */
612__packed_sh1add(psh1add_u16x2, uint16x2_t)
614
615/* Packed Shift-Add (64-bit) */
616__packed_sh1add(psh1add_i16x4, int16x4_t)
618__packed_sh1add(psh1add_i32x2, int32x2_t)
620__packed_sh1sadd(pssh1sadd_i16x4, int16x4_t)
622
623/* Packed Exchanged Addition and Subtraction (32-bit) */
624__packed_binary_builtin(pas_x_i16x2, int16x2_t, __builtin_riscv_pas_x_i16x2)
625__packed_binary_builtin(psa_x_i16x2, int16x2_t, __builtin_riscv_psa_x_i16x2)
626__packed_binary_builtin(psas_x_i16x2, int16x2_t, __builtin_riscv_psas_x_i16x2)
627__packed_binary_builtin(pssa_x_i16x2, int16x2_t, __builtin_riscv_pssa_x_i16x2)
628__packed_binary_builtin(paas_x_i16x2, int16x2_t, __builtin_riscv_paas_x_i16x2)
629__packed_binary_builtin(pasa_x_i16x2, int16x2_t, __builtin_riscv_pasa_x_i16x2)
630
631/* Packed Exchanged Addition and Subtraction (64-bit) */
632__packed_binary_builtin(pas_x_i16x4, int16x4_t, __builtin_riscv_pas_x_i16x4)
633__packed_binary_builtin(psa_x_i16x4, int16x4_t, __builtin_riscv_psa_x_i16x4)
634__packed_binary_builtin(psas_x_i16x4, int16x4_t, __builtin_riscv_psas_x_i16x4)
635__packed_binary_builtin(pssa_x_i16x4, int16x4_t, __builtin_riscv_pssa_x_i16x4)
636__packed_binary_builtin(paas_x_i16x4, int16x4_t, __builtin_riscv_paas_x_i16x4)
637__packed_binary_builtin(pasa_x_i16x4, int16x4_t, __builtin_riscv_pasa_x_i16x4)
638__packed_binary_builtin(pas_x_i32x2, int32x2_t, __builtin_riscv_pas_x_i32x2)
639__packed_binary_builtin(psa_x_i32x2, int32x2_t, __builtin_riscv_psa_x_i32x2)
640__packed_binary_builtin(psas_x_i32x2, int32x2_t, __builtin_riscv_psas_x_i32x2)
641__packed_binary_builtin(pssa_x_i32x2, int32x2_t, __builtin_riscv_pssa_x_i32x2)
642__packed_binary_builtin(paas_x_i32x2, int32x2_t, __builtin_riscv_paas_x_i32x2)
643__packed_binary_builtin(pasa_x_i32x2, int32x2_t, __builtin_riscv_pasa_x_i32x2)
644
645/* Packed Minimum and Maximum (32-bit) */
646__packed_binary_builtin(pmin_i8x4, int8x4_t, __builtin_elementwise_min)
647__packed_binary_builtin(pmin_i16x2, int16x2_t, __builtin_elementwise_min)
648__packed_binary_builtin(pminu_u8x4, uint8x4_t, __builtin_elementwise_min)
649__packed_binary_builtin(pminu_u16x2, uint16x2_t, __builtin_elementwise_min)
650__packed_binary_builtin(pmax_i8x4, int8x4_t, __builtin_elementwise_max)
651__packed_binary_builtin(pmax_i16x2, int16x2_t, __builtin_elementwise_max)
652__packed_binary_builtin(pmaxu_u8x4, uint8x4_t, __builtin_elementwise_max)
653__packed_binary_builtin(pmaxu_u16x2, uint16x2_t, __builtin_elementwise_max)
654
655/* Packed Minimum and Maximum (64-bit) */
656__packed_binary_builtin(pmin_i8x8, int8x8_t, __builtin_elementwise_min)
657__packed_binary_builtin(pmin_i16x4, int16x4_t, __builtin_elementwise_min)
658__packed_binary_builtin(pmin_i32x2, int32x2_t, __builtin_elementwise_min)
659__packed_binary_builtin(pminu_u8x8, uint8x8_t, __builtin_elementwise_min)
660__packed_binary_builtin(pminu_u16x4, uint16x4_t, __builtin_elementwise_min)
661__packed_binary_builtin(pminu_u32x2, uint32x2_t, __builtin_elementwise_min)
662__packed_binary_builtin(pmax_i8x8, int8x8_t, __builtin_elementwise_max)
663__packed_binary_builtin(pmax_i16x4, int16x4_t, __builtin_elementwise_max)
664__packed_binary_builtin(pmax_i32x2, int32x2_t, __builtin_elementwise_max)
665__packed_binary_builtin(pmaxu_u8x8, uint8x8_t, __builtin_elementwise_max)
666__packed_binary_builtin(pmaxu_u16x4, uint16x4_t, __builtin_elementwise_max)
667__packed_binary_builtin(pmaxu_u32x2, uint32x2_t, __builtin_elementwise_max)
668
669/* Packed Comparison (32-bit) */
670__packed_cmp(pmseq_i8x4_u8x4, int8x4_t, uint8x4_t, ==)
671__packed_cmp(pmseq_u8x4_u8x4, uint8x4_t, uint8x4_t, ==)
672__packed_cmp(pmsne_i8x4_u8x4, int8x4_t, uint8x4_t, !=)
673__packed_cmp(pmsne_u8x4_u8x4, uint8x4_t, uint8x4_t, !=)
674__packed_cmp(pmslt_u8x4, int8x4_t, uint8x4_t, <)
675__packed_cmp(pmsltu_u8x4, uint8x4_t, uint8x4_t, <)
676__packed_cmp(pmsgt_u8x4, int8x4_t, uint8x4_t, >)
677__packed_cmp(pmsgtu_u8x4, uint8x4_t, uint8x4_t, >)
678__packed_cmp(pmsge_u8x4, int8x4_t, uint8x4_t, >=)
679__packed_cmp(pmsgeu_u8x4, uint8x4_t, uint8x4_t, >=)
680__packed_cmp(pmsle_u8x4, int8x4_t, uint8x4_t, <=)
681__packed_cmp(pmsleu_u8x4, uint8x4_t, uint8x4_t, <=)
682__packed_cmp(pmseq_i16x2_u16x2, int16x2_t, uint16x2_t, ==)
683__packed_cmp(pmseq_u16x2_u16x2, uint16x2_t, uint16x2_t, ==)
684__packed_cmp(pmsne_i16x2_u16x2, int16x2_t, uint16x2_t, !=)
685__packed_cmp(pmsne_u16x2_u16x2, uint16x2_t, uint16x2_t, !=)
686__packed_cmp(pmslt_u16x2, int16x2_t, uint16x2_t, <)
687__packed_cmp(pmsltu_u16x2, uint16x2_t, uint16x2_t, <)
688__packed_cmp(pmsgt_u16x2, int16x2_t, uint16x2_t, >)
689__packed_cmp(pmsgtu_u16x2, uint16x2_t, uint16x2_t, >)
690__packed_cmp(pmsge_u16x2, int16x2_t, uint16x2_t, >=)
691__packed_cmp(pmsgeu_u16x2, uint16x2_t, uint16x2_t, >=)
692__packed_cmp(pmsle_u16x2, int16x2_t, uint16x2_t, <=)
693__packed_cmp(pmsleu_u16x2, uint16x2_t, uint16x2_t, <=)
694
695/* Packed Comparison (64-bit) */
696__packed_cmp(pmseq_i8x8_u8x8, int8x8_t, uint8x8_t, ==)
697__packed_cmp(pmseq_u8x8_u8x8, uint8x8_t, uint8x8_t, ==)
698__packed_cmp(pmsne_i8x8_u8x8, int8x8_t, uint8x8_t, !=)
699__packed_cmp(pmsne_u8x8_u8x8, uint8x8_t, uint8x8_t, !=)
700__packed_cmp(pmslt_u8x8, int8x8_t, uint8x8_t, <)
701__packed_cmp(pmsltu_u8x8, uint8x8_t, uint8x8_t, <)
702__packed_cmp(pmsgt_u8x8, int8x8_t, uint8x8_t, >)
703__packed_cmp(pmsgtu_u8x8, uint8x8_t, uint8x8_t, >)
704__packed_cmp(pmsge_u8x8, int8x8_t, uint8x8_t, >=)
705__packed_cmp(pmsgeu_u8x8, uint8x8_t, uint8x8_t, >=)
706__packed_cmp(pmsle_u8x8, int8x8_t, uint8x8_t, <=)
707__packed_cmp(pmsleu_u8x8, uint8x8_t, uint8x8_t, <=)
708__packed_cmp(pmseq_i16x4_u16x4, int16x4_t, uint16x4_t, ==)
709__packed_cmp(pmseq_u16x4_u16x4, uint16x4_t, uint16x4_t, ==)
710__packed_cmp(pmsne_i16x4_u16x4, int16x4_t, uint16x4_t, !=)
711__packed_cmp(pmsne_u16x4_u16x4, uint16x4_t, uint16x4_t, !=)
712__packed_cmp(pmslt_u16x4, int16x4_t, uint16x4_t, <)
713__packed_cmp(pmsltu_u16x4, uint16x4_t, uint16x4_t, <)
714__packed_cmp(pmsgt_u16x4, int16x4_t, uint16x4_t, >)
715__packed_cmp(pmsgtu_u16x4, uint16x4_t, uint16x4_t, >)
716__packed_cmp(pmsge_u16x4, int16x4_t, uint16x4_t, >=)
717__packed_cmp(pmsgeu_u16x4, uint16x4_t, uint16x4_t, >=)
718__packed_cmp(pmsle_u16x4, int16x4_t, uint16x4_t, <=)
719__packed_cmp(pmsleu_u16x4, uint16x4_t, uint16x4_t, <=)
720__packed_cmp(pmseq_i32x2_u32x2, int32x2_t, uint32x2_t, ==)
721__packed_cmp(pmseq_u32x2_u32x2, uint32x2_t, uint32x2_t, ==)
722__packed_cmp(pmsne_i32x2_u32x2, int32x2_t, uint32x2_t, !=)
723__packed_cmp(pmsne_u32x2_u32x2, uint32x2_t, uint32x2_t, !=)
724__packed_cmp(pmslt_u32x2, int32x2_t, uint32x2_t, <)
725__packed_cmp(pmsltu_u32x2, uint32x2_t, uint32x2_t, <)
726__packed_cmp(pmsgt_u32x2, int32x2_t, uint32x2_t, >)
727__packed_cmp(pmsgtu_u32x2, uint32x2_t, uint32x2_t, >)
728__packed_cmp(pmsge_u32x2, int32x2_t, uint32x2_t, >=)
729__packed_cmp(pmsgeu_u32x2, uint32x2_t, uint32x2_t, >=)
730__packed_cmp(pmsle_u32x2, int32x2_t, uint32x2_t, <=)
731__packed_cmp(pmsleu_u32x2, uint32x2_t, uint32x2_t, <=)
732
733/* Packed Shift (32-bit) */
734__packed_binary_builtin_mixed(psll_s_u8x4, uint8x4_t, uint8x4_t, unsigned int, __builtin_riscv_psll_s_u8x4)
735__packed_binary_builtin_mixed(psll_s_i8x4, int8x4_t, int8x4_t, unsigned int, __builtin_riscv_psll_s_u8x4)
736__packed_binary_builtin_mixed(psll_s_u16x2, uint16x2_t, uint16x2_t, unsigned int, __builtin_riscv_psll_s_u16x2)
737__packed_binary_builtin_mixed(psll_s_i16x2, int16x2_t, int16x2_t, unsigned int, __builtin_riscv_psll_s_u16x2)
738__packed_binary_builtin_mixed(psrl_s_u8x4, uint8x4_t, uint8x4_t, unsigned int, __builtin_riscv_psrl_s_u8x4)
739__packed_binary_builtin_mixed(psrl_s_u16x2, uint16x2_t, uint16x2_t, unsigned int, __builtin_riscv_psrl_s_u16x2)
740__packed_binary_builtin_mixed(psra_s_i8x4, int8x4_t, int8x4_t, unsigned int, __builtin_riscv_psra_s_i8x4)
741__packed_binary_builtin_mixed(psra_s_i16x2, int16x2_t, int16x2_t, unsigned int, __builtin_riscv_psra_s_i16x2)
742
743/* Packed Shift (64-bit) */
744__packed_binary_builtin_mixed(psll_s_u8x8, uint8x8_t, uint8x8_t, unsigned int, __builtin_riscv_psll_s_u8x8)
745__packed_binary_builtin_mixed(psll_s_i8x8, int8x8_t, int8x8_t, unsigned int, __builtin_riscv_psll_s_u8x8)
746__packed_binary_builtin_mixed(psll_s_u16x4, uint16x4_t, uint16x4_t, unsigned int, __builtin_riscv_psll_s_u16x4)
747__packed_binary_builtin_mixed(psll_s_i16x4, int16x4_t, int16x4_t, unsigned int, __builtin_riscv_psll_s_u16x4)
748__packed_binary_builtin_mixed(psll_s_u32x2, uint32x2_t, uint32x2_t, unsigned int, __builtin_riscv_psll_s_u32x2)
749__packed_binary_builtin_mixed(psll_s_i32x2, int32x2_t, int32x2_t, unsigned int, __builtin_riscv_psll_s_u32x2)
750__packed_binary_builtin_mixed(psrl_s_u8x8, uint8x8_t, uint8x8_t, unsigned int, __builtin_riscv_psrl_s_u8x8)
751__packed_binary_builtin_mixed(psrl_s_u16x4, uint16x4_t, uint16x4_t, unsigned int, __builtin_riscv_psrl_s_u16x4)
752__packed_binary_builtin_mixed(psrl_s_u32x2, uint32x2_t, uint32x2_t, unsigned int, __builtin_riscv_psrl_s_u32x2)
753__packed_binary_builtin_mixed(psra_s_i8x8, int8x8_t, int8x8_t, unsigned int, __builtin_riscv_psra_s_i8x8)
754__packed_binary_builtin_mixed(psra_s_i16x4, int16x4_t, int16x4_t, unsigned int, __builtin_riscv_psra_s_i16x4)
755__packed_binary_builtin_mixed(psra_s_i32x2, int32x2_t, int32x2_t, unsigned int, __builtin_riscv_psra_s_i32x2)
756
757/* Packed Saturating and Rounding Shifts (32-bit) */
758__packed_binary_builtin_mixed(pssha_s_i16x2, int16x2_t, int16x2_t, int, __builtin_riscv_pssha_s_i16x2)
759__packed_binary_builtin_mixed(psshar_s_i16x2, int16x2_t, int16x2_t, int, __builtin_riscv_psshar_s_i16x2)
760__packed_binary_builtin_mixed(psshl_s_u16x2, uint16x2_t, uint16x2_t, int, __builtin_riscv_psshl_s_u16x2)
761__packed_binary_builtin_mixed(psshlr_s_u16x2, uint16x2_t, uint16x2_t, int, __builtin_riscv_psshlr_s_u16x2)
762
763/* Packed Saturating and Rounding Shifts (64-bit) */
764__packed_binary_builtin_mixed(pssha_s_i16x4, int16x4_t, int16x4_t, int, __builtin_riscv_pssha_s_i16x4)
765__packed_binary_builtin_mixed(pssha_s_i32x2, int32x2_t, int32x2_t, int, __builtin_riscv_pssha_s_i32x2)
766__packed_binary_builtin_mixed(psshar_s_i16x4, int16x4_t, int16x4_t, int, __builtin_riscv_psshar_s_i16x4)
767__packed_binary_builtin_mixed(psshar_s_i32x2, int32x2_t, int32x2_t, int, __builtin_riscv_psshar_s_i32x2)
768__packed_binary_builtin_mixed(psshl_s_u16x4, uint16x4_t, uint16x4_t, int, __builtin_riscv_psshl_s_u16x4)
769__packed_binary_builtin_mixed(psshl_s_u32x2, uint32x2_t, uint32x2_t, int, __builtin_riscv_psshl_s_u32x2)
770__packed_binary_builtin_mixed(psshlr_s_u16x4, uint16x4_t, uint16x4_t, int, __builtin_riscv_psshlr_s_u16x4)
771__packed_binary_builtin_mixed(psshlr_s_u32x2, uint32x2_t, uint32x2_t, int, __builtin_riscv_psshlr_s_u32x2)
772
773/* Packed Saturation (32-bit) */
774#define __riscv_pusati_u16x2(rs1, width) \
775 __builtin_riscv_pusati_u16x2(rs1, width)
776#define __riscv_psati_i16x2(rs1, width) __builtin_riscv_psati_i16x2(rs1, width)
777
778/* Packed Saturation (64-bit) */
779#define __riscv_pusati_u16x4(rs1, width) \
780 __builtin_riscv_pusati_u16x4(rs1, width)
781#define __riscv_pusati_u32x2(rs1, width) \
782 __builtin_riscv_pusati_u32x2(rs1, width)
783#define __riscv_psati_i16x4(rs1, width) __builtin_riscv_psati_i16x4(rs1, width)
784#define __riscv_psati_i32x2(rs1, width) __builtin_riscv_psati_i32x2(rs1, width)
785
786/* Packed Element Insert (32-bit) */
787__packed_insert(pset_i8_i8x4, int8x4_t, int8_t, 3)
788__packed_insert(pset_u8_u8x4, uint8x4_t, uint8_t, 3)
789__packed_insert(pset_i16_i16x2, int16x2_t, int16_t, 1)
790__packed_insert(pset_u16_u16x2, uint16x2_t, uint16_t, 1)
791
792/* Packed Element Insert (64-bit) */
793__packed_insert(pset_i8_i8x8, int8x8_t, int8_t, 7)
794__packed_insert(pset_u8_u8x8, uint8x8_t, uint8_t, 7)
795__packed_insert(pset_i16_i16x4, int16x4_t, int16_t, 3)
796__packed_insert(pset_u16_u16x4, uint16x4_t, uint16_t, 3)
797__packed_insert(pset_i32_i32x2, int32x2_t, int32_t, 1)
798__packed_insert(pset_u32_u32x2, uint32x2_t, uint32_t, 1)
799
800/* Packed Element Join (32-bit) */
801__packed_join4(pjoin4_i8x4, int8x4_t, int8_t)
802__packed_join4(pjoin4_u8x4, uint8x4_t, uint8_t)
803__packed_join2(pjoin2_i16x2, int16x2_t, int16_t)
804__packed_join2(pjoin2_u16x2, uint16x2_t, uint16_t)
805
806/* Packed Element Join (64-bit) */
807__packed_join4(pjoin4_i16x4, int16x4_t, int16_t)
808__packed_join4(pjoin4_u16x4, uint16x4_t, uint16_t)
809__packed_join2(pjoin2_i32x2, int32x2_t, int32_t)
810__packed_join2(pjoin2_u32x2, uint32x2_t, uint32_t)
811
812/* Packed Logical Operations (32-bit) */
813__packed_binary_op(pand_i8x4, int8x4_t, &)
814__packed_binary_op(pand_u8x4, uint8x4_t, &)
815__packed_binary_op(pand_i16x2, int16x2_t, &)
816__packed_binary_op(pand_u16x2, uint16x2_t, &)
817__packed_binary_op(por_i8x4, int8x4_t, |)
818__packed_binary_op(por_u8x4, uint8x4_t, |)
819__packed_binary_op(por_i16x2, int16x2_t, |)
820__packed_binary_op(por_u16x2, uint16x2_t, |)
821__packed_binary_op(pxor_i8x4, int8x4_t, ^)
822__packed_binary_op(pxor_u8x4, uint8x4_t, ^)
823__packed_binary_op(pxor_i16x2, int16x2_t, ^)
824__packed_binary_op(pxor_u16x2, uint16x2_t, ^)
825__packed_unary_op(pnot_i8x4, int8x4_t, ~)
826__packed_unary_op(pnot_u8x4, uint8x4_t, ~)
827__packed_unary_op(pnot_i16x2, int16x2_t, ~)
828__packed_unary_op(pnot_u16x2, uint16x2_t, ~)
829
830/* Packed Logical Operations (64-bit) */
831__packed_binary_op(pand_i8x8, int8x8_t, &)
832__packed_binary_op(pand_u8x8, uint8x8_t, &)
833__packed_binary_op(pand_i16x4, int16x4_t, &)
834__packed_binary_op(pand_u16x4, uint16x4_t, &)
835__packed_binary_op(pand_i32x2, int32x2_t, &)
836__packed_binary_op(pand_u32x2, uint32x2_t, &)
837__packed_binary_op(por_i8x8, int8x8_t, |)
838__packed_binary_op(por_u8x8, uint8x8_t, |)
839__packed_binary_op(por_i16x4, int16x4_t, |)
840__packed_binary_op(por_u16x4, uint16x4_t, |)
841__packed_binary_op(por_i32x2, int32x2_t, |)
842__packed_binary_op(por_u32x2, uint32x2_t, |)
843__packed_binary_op(pxor_i8x8, int8x8_t, ^)
844__packed_binary_op(pxor_u8x8, uint8x8_t, ^)
845__packed_binary_op(pxor_i16x4, int16x4_t, ^)
846__packed_binary_op(pxor_u16x4, uint16x4_t, ^)
847__packed_binary_op(pxor_i32x2, int32x2_t, ^)
848__packed_binary_op(pxor_u32x2, uint32x2_t, ^)
849__packed_unary_op(pnot_i8x8, int8x8_t, ~)
850__packed_unary_op(pnot_u8x8, uint8x8_t, ~)
851__packed_unary_op(pnot_i16x4, int16x4_t, ~)
852__packed_unary_op(pnot_u16x4, uint16x4_t, ~)
853__packed_unary_op(pnot_i32x2, int32x2_t, ~)
854__packed_unary_op(pnot_u32x2, uint32x2_t, ~)
855
856/* Packed Widening Convert */
865
866/* Packed Widening Shift */
867__packed_binary_builtin_mixed(pwsll_s_u16x4, uint16x4_t, uint8x4_t, unsigned,
868 __builtin_riscv_pwsll_s_u16x4)
869__packed_binary_builtin_mixed(pwsll_s_u32x2, uint32x2_t, uint16x2_t, unsigned,
870 __builtin_riscv_pwsll_s_u32x2)
871__packed_binary_builtin_mixed(pwsla_s_i16x4, int16x4_t, int8x4_t, unsigned,
872 __builtin_riscv_pwsla_s_i16x4)
873__packed_binary_builtin_mixed(pwsla_s_i32x2, int32x2_t, int16x2_t, unsigned,
874 __builtin_riscv_pwsla_s_i32x2)
875
876/* Packed Narrowing Shift */
877__packed_binary_builtin_mixed(pnsrl_s_u8x4, uint8x4_t, uint16x4_t, unsigned,
878 __builtin_riscv_pnsrl_s_u8x4)
879__packed_binary_builtin_mixed(pnsrl_s_u16x2, uint16x2_t, uint32x2_t, unsigned,
880 __builtin_riscv_pnsrl_s_u16x2)
881__packed_binary_builtin_mixed(pnsra_s_i8x4, int8x4_t, int16x4_t, unsigned,
882 __builtin_riscv_pnsra_s_i8x4)
883__packed_binary_builtin_mixed(pnsra_s_i16x2, int16x2_t, int32x2_t, unsigned,
884 __builtin_riscv_pnsra_s_i16x2)
885__packed_binary_builtin_mixed(pnsrar_s_i8x4, int8x4_t, int16x4_t, unsigned,
886 __builtin_riscv_pnsrar_s_i8x4)
887__packed_binary_builtin_mixed(pnsrar_s_i16x2, int16x2_t, int32x2_t, unsigned,
888 __builtin_riscv_pnsrar_s_i16x2)
889
890/* Packed Narrowing Clip */
891__packed_binary_builtin_mixed(pnclipu_s_u8x4, uint8x4_t, uint16x4_t, unsigned,
892 __builtin_riscv_pnclipu_s_u8x4)
893__packed_binary_builtin_mixed(pnclipu_s_u16x2, uint16x2_t, uint32x2_t, unsigned,
894 __builtin_riscv_pnclipu_s_u16x2)
895__packed_binary_builtin_mixed(pnclipru_s_u8x4, uint8x4_t, uint16x4_t, unsigned,
896 __builtin_riscv_pnclipru_s_u8x4)
897__packed_binary_builtin_mixed(pnclipru_s_u16x2, uint16x2_t, uint32x2_t, unsigned,
898 __builtin_riscv_pnclipru_s_u16x2)
899__packed_binary_builtin_mixed(pnclip_s_i8x4, int8x4_t, int16x4_t, unsigned,
900 __builtin_riscv_pnclip_s_i8x4)
901__packed_binary_builtin_mixed(pnclip_s_i16x2, int16x2_t, int32x2_t, unsigned,
902 __builtin_riscv_pnclip_s_i16x2)
903__packed_binary_builtin_mixed(pnclipr_s_i8x4, int8x4_t, int16x4_t, unsigned,
904 __builtin_riscv_pnclipr_s_i8x4)
905__packed_binary_builtin_mixed(pnclipr_s_i16x2, int16x2_t, int32x2_t, unsigned,
906 __builtin_riscv_pnclipr_s_i16x2)
907
908/* Packed Widening Addition and Subtraction */
917
918/* Packed Widening Addition Accumulate */
923
924/* Packed Widening Subtraction Accumulate */
929
930/* Packed Widening Multiply (32-bit) */
938
939/* Packed "Q-format" Multiply with Widening Accumulate */
941 __builtin_riscv_pmqwacc_i32x2)
943 __builtin_riscv_pmqrwacc_i32x2)
944
945/* Packed Narrowing Convert */
954
955/* Packed Reverse (32-bit) */
956__packed_reverse4(prev_i8x4, int8x4_t)
958__packed_reverse2(prev_i16x2, int16x2_t)
959__packed_reverse2(prev_u16x2, uint16x2_t)
960
961/* Packed Reverse (64-bit) */
962__packed_reverse8(prev_i8x8, int8x8_t)
964__packed_reverse4(prev_i16x4, int16x4_t)
965__packed_reverse4(prev_u16x4, uint16x4_t)
966__packed_reverse2(prev_i32x2, int32x2_t)
967__packed_reverse2(prev_u32x2, uint32x2_t)
968
969/* Packed Zip */
974
975/* Packed Unzip */
976__packed_unzipe4(punzipe_i8x4, int8x4_t, int8x8_t)
977__packed_unzipo4(punzipo_i8x4, int8x4_t, int8x8_t)
980__packed_unzipe2(punzipe_i16x2, int16x2_t, int16x4_t)
981__packed_unzipo2(punzipo_i16x2, int16x2_t, int16x4_t)
984
985/* Packed Pair (32-bit) */
986__packed_pair_ee4(ppaire_i8x4, int8x4_t)
987__packed_pair_ee4(ppaire_u8x4, uint8x4_t)
988__packed_pair_eo4(ppaireo_i8x4, int8x4_t)
989__packed_pair_eo4(ppaireo_u8x4, uint8x4_t)
990__packed_pair_oe4(ppairoe_i8x4, int8x4_t)
991__packed_pair_oe4(ppairoe_u8x4, uint8x4_t)
992__packed_pair_oo4(ppairo_i8x4, int8x4_t)
993__packed_pair_oo4(ppairo_u8x4, uint8x4_t)
994__packed_pair_ee2(ppaire_i16x2, int16x2_t)
995__packed_pair_ee2(ppaire_u16x2, uint16x2_t)
996__packed_pair_eo2(ppaireo_i16x2, int16x2_t)
997__packed_pair_eo2(ppaireo_u16x2, uint16x2_t)
998__packed_pair_oe2(ppairoe_i16x2, int16x2_t)
999__packed_pair_oe2(ppairoe_u16x2, uint16x2_t)
1000__packed_pair_oo2(ppairo_i16x2, int16x2_t)
1001__packed_pair_oo2(ppairo_u16x2, uint16x2_t)
1002
1003/* Packed Pair (64-bit) */
1004__packed_pair_ee8(ppaire_i8x8, int8x8_t)
1005__packed_pair_ee8(ppaire_u8x8, uint8x8_t)
1006__packed_pair_eo8(ppaireo_i8x8, int8x8_t)
1007__packed_pair_eo8(ppaireo_u8x8, uint8x8_t)
1008__packed_pair_oe8(ppairoe_i8x8, int8x8_t)
1009__packed_pair_oe8(ppairoe_u8x8, uint8x8_t)
1010__packed_pair_oo8(ppairo_i8x8, int8x8_t)
1011__packed_pair_oo8(ppairo_u8x8, uint8x8_t)
1012__packed_pair_ee4(ppaire_i16x4, int16x4_t)
1013__packed_pair_ee4(ppaire_u16x4, uint16x4_t)
1014__packed_pair_eo4(ppaireo_i16x4, int16x4_t)
1015__packed_pair_eo4(ppaireo_u16x4, uint16x4_t)
1016__packed_pair_oe4(ppairoe_i16x4, int16x4_t)
1017__packed_pair_oe4(ppairoe_u16x4, uint16x4_t)
1018__packed_pair_oo4(ppairo_i16x4, int16x4_t)
1019__packed_pair_oo4(ppairo_u16x4, uint16x4_t)
1020__packed_pair_ee2(ppaire_i32x2, int32x2_t)
1021__packed_pair_ee2(ppaire_u32x2, uint32x2_t)
1022__packed_pair_eo2(ppaireo_i32x2, int32x2_t)
1023__packed_pair_eo2(ppaireo_u32x2, uint32x2_t)
1024__packed_pair_oe2(ppairoe_i32x2, int32x2_t)
1025__packed_pair_oe2(ppairoe_u32x2, uint32x2_t)
1026__packed_pair_oo2(ppairo_i32x2, int32x2_t)
1027__packed_pair_oo2(ppairo_u32x2, uint32x2_t)
1028
1029/* Packed Narrowing Zip (32-bit) */
1030__packed_nzip2(pnzip_i8x4, int8x4_t, int16x2_t)
1032__packed_nziph2(pnziph_i8x4, int8x4_t, int16x2_t)
1034
1035/* Packed Narrowing Zip (64-bit) */
1036__packed_nzip4(pnzip_i8x8, int8x8_t, int16x4_t)
1038__packed_nzip2(pnzip_i16x4, int16x4_t, int32x2_t)
1040__packed_nziph4(pnziph_i8x8, int8x8_t, int16x4_t)
1042__packed_nziph2(pnziph_i16x4, int16x4_t, int32x2_t)
1044
1045/* Packed Averaging Addition and Subtraction (32-bit) */
1046__packed_binary_builtin(paadd_i8x4, int8x4_t, __builtin_riscv_paadd_i8x4)
1047__packed_binary_builtin(paadd_i16x2, int16x2_t, __builtin_riscv_paadd_i16x2)
1048__packed_binary_builtin(paaddu_u8x4, uint8x4_t, __builtin_riscv_paaddu_u8x4)
1049__packed_binary_builtin(paaddu_u16x2, uint16x2_t, __builtin_riscv_paaddu_u16x2)
1050__packed_binary_builtin(pasub_i8x4, int8x4_t, __builtin_riscv_pasub_i8x4)
1051__packed_binary_builtin(pasub_i16x2, int16x2_t, __builtin_riscv_pasub_i16x2)
1052__packed_binary_builtin(pasubu_u8x4, uint8x4_t, __builtin_riscv_pasubu_u8x4)
1053__packed_binary_builtin(pasubu_u16x2, uint16x2_t, __builtin_riscv_pasubu_u16x2)
1054
1055/* Packed Averaging Addition and Subtraction (64-bit) */
1056__packed_binary_builtin(paadd_i8x8, int8x8_t, __builtin_riscv_paadd_i8x8)
1057__packed_binary_builtin(paadd_i16x4, int16x4_t, __builtin_riscv_paadd_i16x4)
1058__packed_binary_builtin(paadd_i32x2, int32x2_t, __builtin_riscv_paadd_i32x2)
1059__packed_binary_builtin(paaddu_u8x8, uint8x8_t, __builtin_riscv_paaddu_u8x8)
1060__packed_binary_builtin(paaddu_u16x4, uint16x4_t, __builtin_riscv_paaddu_u16x4)
1061__packed_binary_builtin(paaddu_u32x2, uint32x2_t, __builtin_riscv_paaddu_u32x2)
1062__packed_binary_builtin(pasub_i8x8, int8x8_t, __builtin_riscv_pasub_i8x8)
1063__packed_binary_builtin(pasub_i16x4, int16x4_t, __builtin_riscv_pasub_i16x4)
1064__packed_binary_builtin(pasub_i32x2, int32x2_t, __builtin_riscv_pasub_i32x2)
1065__packed_binary_builtin(pasubu_u8x8, uint8x8_t, __builtin_riscv_pasubu_u8x8)
1066__packed_binary_builtin(pasubu_u16x4, uint16x4_t, __builtin_riscv_pasubu_u16x4)
1067__packed_binary_builtin(pasubu_u32x2, uint32x2_t, __builtin_riscv_pasubu_u32x2)
1068
1069/* Packed Absolute Value and Absolute Difference (32-bit) */
1070__packed_pabs(pabs_i8x4, int8x4_t, uint8x4_t)
1072__packed_binary_builtin_cast(pabd_i8x4, int8x4_t, uint8x4_t, __builtin_riscv_pabd_i8x4)
1073__packed_binary_builtin_cast(pabd_i16x2, int16x2_t, uint16x2_t, __builtin_riscv_pabd_i16x2)
1074__packed_binary_builtin_cast(pabdu_u8x4, uint8x4_t, uint8x4_t, __builtin_riscv_pabdu_u8x4)
1075__packed_binary_builtin_cast(pabdu_u16x2, uint16x2_t, uint16x2_t, __builtin_riscv_pabdu_u16x2)
1076
1077/* Packed Absolute Value and Absolute Difference (64-bit) */
1078__packed_pabs(pabs_i8x8, int8x8_t, uint8x8_t)
1080__packed_binary_builtin_cast(pabd_i8x8, int8x8_t, uint8x8_t, __builtin_riscv_pabd_i8x8)
1081__packed_binary_builtin_cast(pabd_i16x4, int16x4_t, uint16x4_t, __builtin_riscv_pabd_i16x4)
1082__packed_binary_builtin_cast(pabdu_u8x8, uint8x8_t, uint8x8_t, __builtin_riscv_pabdu_u8x8)
1083__packed_binary_builtin_cast(pabdu_u16x4, uint16x4_t, uint16x4_t, __builtin_riscv_pabdu_u16x4)
1084
1085/* Packed Reduction Sum (32-bit) */
1086__packed_reduction(predsum_i8x4_i32, int32_t, int8x4_t, __builtin_riscv_predsum_i8x4_i32)
1087__packed_reduction(predsumu_u8x4_u32, uint32_t, uint8x4_t, __builtin_riscv_predsumu_u8x4_u32)
1088__packed_reduction(predsum_i16x2_i32, int32_t, int16x2_t, __builtin_riscv_predsum_i16x2_i32)
1089__packed_reduction(predsumu_u16x2_u32, uint32_t, uint16x2_t, __builtin_riscv_predsumu_u16x2_u32)
1090
1091/* Packed Reduction Sum (64-bit) */
1092__packed_reduction(predsum_i8x8_i32, int32_t, int8x8_t, __builtin_riscv_predsum_i8x8_i32)
1093__packed_reduction(predsumu_u8x8_u32, uint32_t, uint8x8_t, __builtin_riscv_predsumu_u8x8_u32)
1094__packed_reduction(predsum_i16x4_i32, int32_t, int16x4_t, __builtin_riscv_predsum_i16x4_i32)
1095__packed_reduction(predsumu_u16x4_u32, uint32_t, uint16x4_t, __builtin_riscv_predsumu_u16x4_u32)
1096__packed_reduction(predsum_i8x8_i64, int64_t, int8x8_t, __builtin_riscv_predsum_i8x8_i64)
1097__packed_reduction(predsumu_u8x8_u64, uint64_t, uint8x8_t, __builtin_riscv_predsumu_u8x8_u64)
1098__packed_reduction(predsum_i16x4_i64, int64_t, int16x4_t, __builtin_riscv_predsum_i16x4_i64)
1099__packed_reduction(predsumu_u16x4_u64, uint64_t, uint16x4_t, __builtin_riscv_predsumu_u16x4_u64)
1100__packed_reduction(predsum_i32x2_i64, int64_t, int32x2_t, __builtin_riscv_predsum_i32x2_i64)
1101__packed_reduction(predsumu_u32x2_u64, uint64_t, uint32x2_t, __builtin_riscv_predsumu_u32x2_u64)
1102
1103/* Packed Merge (32-bit) */
1104__packed_merge_builtin(pmerge_u8x4, uint8x4_t, uint8x4_t, __builtin_riscv_pmerge_u8x4)
1105__packed_merge_builtin(pmerge_i8x4, int8x4_t, uint8x4_t, __builtin_riscv_pmerge_u8x4)
1106__packed_merge_builtin(pmerge_u16x2, uint16x2_t, uint16x2_t, __builtin_riscv_pmerge_u16x2)
1107__packed_merge_builtin(pmerge_i16x2, int16x2_t, uint16x2_t, __builtin_riscv_pmerge_u16x2)
1108
1109/* Packed Merge (64-bit) */
1110__packed_merge_builtin(pmerge_u8x8, uint8x8_t, uint8x8_t, __builtin_riscv_pmerge_u8x8)
1111__packed_merge_builtin(pmerge_i8x8, int8x8_t, uint8x8_t, __builtin_riscv_pmerge_u8x8)
1112__packed_merge_builtin(pmerge_u16x4, uint16x4_t, uint16x4_t, __builtin_riscv_pmerge_u16x4)
1113__packed_merge_builtin(pmerge_i16x4, int16x4_t, uint16x4_t, __builtin_riscv_pmerge_u16x4)
1114__packed_merge_builtin(pmerge_u32x2, uint32x2_t, uint32x2_t, __builtin_riscv_pmerge_u32x2)
1115__packed_merge_builtin(pmerge_i32x2, int32x2_t, uint32x2_t, __builtin_riscv_pmerge_u32x2)
1116
1117/* Packed Multiply High (32-bit) */
1118__packed_binary_builtin(pmulh_i16x2, int16x2_t, __builtin_riscv_pmulh_i16x2)
1119__packed_binary_builtin(pmulhr_i16x2, int16x2_t, __builtin_riscv_pmulhr_i16x2)
1120__packed_binary_builtin(pmulhu_u16x2, uint16x2_t, __builtin_riscv_pmulhu_u16x2)
1121__packed_binary_builtin(pmulhru_u16x2, uint16x2_t, __builtin_riscv_pmulhru_u16x2)
1122__packed_binary_builtin_mixed(pmulhsu_i16x2, int16x2_t, int16x2_t, uint16x2_t, __builtin_riscv_pmulhsu_i16x2)
1123__packed_binary_builtin_mixed(pmulhrsu_i16x2, int16x2_t, int16x2_t, uint16x2_t, __builtin_riscv_pmulhrsu_i16x2)
1124
1125/* Packed Multiply High Accumulate (32-bit) */
1126__packed_ternary_builtin(pmhacc_i16x2, int16x2_t, __builtin_riscv_pmhacc_i16x2)
1127__packed_ternary_builtin(pmhracc_i16x2, int16x2_t, __builtin_riscv_pmhracc_i16x2)
1128__packed_ternary_builtin(pmhaccu_u16x2, uint16x2_t, __builtin_riscv_pmhaccu_u16x2)
1129__packed_ternary_builtin(pmhraccu_u16x2, uint16x2_t, __builtin_riscv_pmhraccu_u16x2)
1130__packed_ternary_builtin_mixed(pmhaccsu_i16x2, int16x2_t, int16x2_t, uint16x2_t, __builtin_riscv_pmhaccsu_i16x2)
1131__packed_ternary_builtin_mixed(pmhraccsu_i16x2, int16x2_t, int16x2_t, uint16x2_t, __builtin_riscv_pmhraccsu_i16x2)
1132
1133/* Packed Multiply High (64-bit) */
1134__packed_binary_builtin(pmulh_i16x4, int16x4_t, __builtin_riscv_pmulh_i16x4)
1135__packed_binary_builtin(pmulh_i32x2, int32x2_t, __builtin_riscv_pmulh_i32x2)
1136__packed_binary_builtin(pmulhr_i16x4, int16x4_t, __builtin_riscv_pmulhr_i16x4)
1137__packed_binary_builtin(pmulhr_i32x2, int32x2_t, __builtin_riscv_pmulhr_i32x2)
1138__packed_binary_builtin(pmulhu_u16x4, uint16x4_t, __builtin_riscv_pmulhu_u16x4)
1139__packed_binary_builtin(pmulhu_u32x2, uint32x2_t, __builtin_riscv_pmulhu_u32x2)
1140__packed_binary_builtin(pmulhru_u16x4, uint16x4_t, __builtin_riscv_pmulhru_u16x4)
1141__packed_binary_builtin(pmulhru_u32x2, uint32x2_t, __builtin_riscv_pmulhru_u32x2)
1142__packed_binary_builtin_mixed(pmulhsu_i16x4, int16x4_t, int16x4_t, uint16x4_t, __builtin_riscv_pmulhsu_i16x4)
1143__packed_binary_builtin_mixed(pmulhsu_i32x2, int32x2_t, int32x2_t, uint32x2_t, __builtin_riscv_pmulhsu_i32x2)
1144__packed_binary_builtin_mixed(pmulhrsu_i16x4, int16x4_t, int16x4_t, uint16x4_t, __builtin_riscv_pmulhrsu_i16x4)
1145__packed_binary_builtin_mixed(pmulhrsu_i32x2, int32x2_t, int32x2_t, uint32x2_t, __builtin_riscv_pmulhrsu_i32x2)
1146
1147/* Packed Multiply High Accumulate (64-bit) */
1148__packed_ternary_builtin(pmhacc_i16x4, int16x4_t, __builtin_riscv_pmhacc_i16x4)
1149__packed_ternary_builtin(pmhacc_i32x2, int32x2_t, __builtin_riscv_pmhacc_i32x2)
1150__packed_ternary_builtin(pmhracc_i16x4, int16x4_t, __builtin_riscv_pmhracc_i16x4)
1151__packed_ternary_builtin(pmhracc_i32x2, int32x2_t, __builtin_riscv_pmhracc_i32x2)
1152__packed_ternary_builtin(pmhaccu_u16x4, uint16x4_t, __builtin_riscv_pmhaccu_u16x4)
1153__packed_ternary_builtin(pmhaccu_u32x2, uint32x2_t, __builtin_riscv_pmhaccu_u32x2)
1154__packed_ternary_builtin(pmhraccu_u16x4, uint16x4_t, __builtin_riscv_pmhraccu_u16x4)
1155__packed_ternary_builtin(pmhraccu_u32x2, uint32x2_t, __builtin_riscv_pmhraccu_u32x2)
1156__packed_ternary_builtin_mixed(pmhaccsu_i16x4, int16x4_t, int16x4_t, uint16x4_t, __builtin_riscv_pmhaccsu_i16x4)
1157__packed_ternary_builtin_mixed(pmhaccsu_i32x2, int32x2_t, int32x2_t, uint32x2_t, __builtin_riscv_pmhaccsu_i32x2)
1158__packed_ternary_builtin_mixed(pmhraccsu_i16x4, int16x4_t, int16x4_t, uint16x4_t, __builtin_riscv_pmhraccsu_i16x4)
1159__packed_ternary_builtin_mixed(pmhraccsu_i32x2, int32x2_t, int32x2_t, uint32x2_t, __builtin_riscv_pmhraccsu_i32x2)
1160
1161/* Packed Multiply High Accumulate (32-bit) */
1162__packed_ternary_builtin_mixed(pmhacc_b0_i16x2, int16x2_t, int16x2_t, int8x4_t, __builtin_riscv_pmhacc_b0_i16x2)
1163__packed_ternary_builtin_mixed(pmhacc_b1_i16x2, int16x2_t, int16x2_t, int8x4_t, __builtin_riscv_pmhacc_b1_i16x2)
1164__packed_ternary_builtin_mixed(pmhaccsu_b0_i16x2, int16x2_t, int16x2_t, uint8x4_t, __builtin_riscv_pmhaccsu_b0_i16x2)
1165__packed_ternary_builtin_mixed(pmhaccsu_b1_i16x2, int16x2_t, int16x2_t, uint8x4_t, __builtin_riscv_pmhaccsu_b1_i16x2)
1166
1167/* Packed Multiply High Accumulate (64-bit) */
1168__packed_ternary_builtin_mixed(pmhacc_b0_i16x4, int16x4_t, int16x4_t, int8x8_t, __builtin_riscv_pmhacc_b0_i16x4)
1169__packed_ternary_builtin_mixed(pmhacc_b1_i16x4, int16x4_t, int16x4_t, int8x8_t, __builtin_riscv_pmhacc_b1_i16x4)
1170__packed_ternary_builtin_mixed(pmhaccsu_b0_i16x4, int16x4_t, int16x4_t, uint8x8_t, __builtin_riscv_pmhaccsu_b0_i16x4)
1171__packed_ternary_builtin_mixed(pmhaccsu_b1_i16x4, int16x4_t, int16x4_t, uint8x8_t, __builtin_riscv_pmhaccsu_b1_i16x4)
1172__packed_ternary_builtin_mixed(pmhacc_h0_i32x2, int32x2_t, int32x2_t, int16x4_t, __builtin_riscv_pmhacc_h0_i32x2)
1173__packed_ternary_builtin_mixed(pmhacc_h1_i32x2, int32x2_t, int32x2_t, int16x4_t, __builtin_riscv_pmhacc_h1_i32x2)
1174__packed_ternary_builtin_mixed(pmhaccsu_h0_i32x2, int32x2_t, int32x2_t, uint16x4_t, __builtin_riscv_pmhaccsu_h0_i32x2)
1175__packed_ternary_builtin_mixed(pmhaccsu_h1_i32x2, int32x2_t, int32x2_t, uint16x4_t, __builtin_riscv_pmhaccsu_h1_i32x2)
1176
1177/* Packed Multiplication with Horizontal Addition (32-bit) */
1178__packed_binary_builtin_mixed(pm4add_i8x4, int32_t, int8x4_t, int8x4_t, __builtin_riscv_pm4add_i8x4)
1179__packed_binary_builtin_mixed(pm2add_i16x2, int32_t, int16x2_t, int16x2_t, __builtin_riscv_pm2add_i16x2)
1180__packed_binary_builtin_mixed(pm2add_x_i16x2, int32_t, int16x2_t, int16x2_t, __builtin_riscv_pm2add_x_i16x2)
1181__packed_binary_builtin_mixed(pm4addu_u8x4, uint32_t, uint8x4_t, uint8x4_t, __builtin_riscv_pm4addu_u8x4)
1182__packed_binary_builtin_mixed(pm2addu_u16x2, uint32_t, uint16x2_t, uint16x2_t, __builtin_riscv_pm2addu_u16x2)
1183__packed_binary_builtin_mixed(pmq2add_i16x2, int32_t, int16x2_t, int16x2_t, __builtin_riscv_pmq2add_i16x2)
1184__packed_binary_builtin_mixed(pmqr2add_i16x2, int32_t, int16x2_t, int16x2_t, __builtin_riscv_pmqr2add_i16x2)
1185__packed_binary_builtin_mixed(pm2sadd_i16x2, int32_t, int16x2_t, int16x2_t, __builtin_riscv_pm2sadd_i16x2)
1186__packed_binary_builtin_mixed(pm2sadd_x_i16x2, int32_t, int16x2_t, int16x2_t, __builtin_riscv_pm2sadd_x_i16x2)
1187__packed_binary_builtin_mixed(pm2sub_i16x2, int32_t, int16x2_t, int16x2_t, __builtin_riscv_pm2sub_i16x2)
1188__packed_binary_builtin_mixed(pm2sub_x_i16x2, int32_t, int16x2_t, int16x2_t, __builtin_riscv_pm2sub_x_i16x2)
1189__packed_binary_builtin_mixed(pm4addsu_i8x4, int32_t, int8x4_t, uint8x4_t, __builtin_riscv_pm4addsu_i8x4)
1190__packed_binary_builtin_mixed(pm2addsu_i16x2, int32_t, int16x2_t, uint16x2_t, __builtin_riscv_pm2addsu_i16x2)
1191
1192/* Packed Multiplication with Horizontal Addition (64-bit) */
1193__packed_binary_builtin_mixed(pm4add_i8x8, int32x2_t, int8x8_t, int8x8_t, __builtin_riscv_pm4add_i8x8)
1194__packed_binary_builtin_mixed(pm2add_i16x4, int32x2_t, int16x4_t, int16x4_t, __builtin_riscv_pm2add_i16x4)
1195__packed_binary_builtin_mixed(pm2add_x_i16x4, int32x2_t, int16x4_t, int16x4_t, __builtin_riscv_pm2add_x_i16x4)
1196__packed_binary_builtin_mixed(pm4addu_u8x8, uint32x2_t, uint8x8_t, uint8x8_t, __builtin_riscv_pm4addu_u8x8)
1197__packed_binary_builtin_mixed(pm2addu_u16x4, uint32x2_t, uint16x4_t, uint16x4_t, __builtin_riscv_pm2addu_u16x4)
1198__packed_binary_builtin_mixed(pmq2add_i16x4, int32x2_t, int16x4_t, int16x4_t, __builtin_riscv_pmq2add_i16x4)
1199__packed_binary_builtin_mixed(pmqr2add_i16x4, int32x2_t, int16x4_t, int16x4_t, __builtin_riscv_pmqr2add_i16x4)
1200__packed_binary_builtin_mixed(pm2sadd_i16x4, int32x2_t, int16x4_t, int16x4_t, __builtin_riscv_pm2sadd_i16x4)
1201__packed_binary_builtin_mixed(pm2sadd_x_i16x4, int32x2_t, int16x4_t, int16x4_t, __builtin_riscv_pm2sadd_x_i16x4)
1202__packed_binary_builtin_mixed(pm2sub_i16x4, int32x2_t, int16x4_t, int16x4_t, __builtin_riscv_pm2sub_i16x4)
1203__packed_binary_builtin_mixed(pm2sub_x_i16x4, int32x2_t, int16x4_t, int16x4_t, __builtin_riscv_pm2sub_x_i16x4)
1204__packed_binary_builtin_mixed(pm4addsu_i8x8, int32x2_t, int8x8_t, uint8x8_t, __builtin_riscv_pm4addsu_i8x8)
1205__packed_binary_builtin_mixed(pm2addsu_i16x4, int32x2_t, int16x4_t, uint16x4_t, __builtin_riscv_pm2addsu_i16x4)
1206__packed_binary_builtin_mixed(pm2add_i32x2, int64_t, int32x2_t, int32x2_t, __builtin_riscv_pm2add_i32x2)
1207__packed_binary_builtin_mixed(pm2add_x_i32x2, int64_t, int32x2_t, int32x2_t, __builtin_riscv_pm2add_x_i32x2)
1208__packed_binary_builtin_mixed(pm2addu_u32x2, uint64_t, uint32x2_t, uint32x2_t, __builtin_riscv_pm2addu_u32x2)
1209__packed_binary_builtin_mixed(pmq2add_i32x2, int64_t, int32x2_t, int32x2_t, __builtin_riscv_pmq2add_i32x2)
1210__packed_binary_builtin_mixed(pm2sub_i32x2, int64_t, int32x2_t, int32x2_t, __builtin_riscv_pm2sub_i32x2)
1211__packed_binary_builtin_mixed(pm2sub_x_i32x2, int64_t, int32x2_t, int32x2_t, __builtin_riscv_pm2sub_x_i32x2)
1212__packed_binary_builtin_mixed(pm2addsu_i32x2, int64_t, int32x2_t, uint32x2_t, __builtin_riscv_pm2addsu_i32x2)
1213__packed_binary_builtin_mixed(pmqr2add_i32x2, int64_t, int32x2_t, int32x2_t, __builtin_riscv_pmqr2add_i32x2)
1214__packed_binary_builtin_mixed(pm4add_i16x4, int64_t, int16x4_t, int16x4_t, __builtin_riscv_pm4add_i16x4)
1215__packed_binary_builtin_mixed(pm4addu_u16x4, uint64_t, uint16x4_t, uint16x4_t, __builtin_riscv_pm4addu_u16x4)
1216__packed_binary_builtin_mixed(pm4addsu_i16x4, int64_t, int16x4_t, uint16x4_t, __builtin_riscv_pm4addsu_i16x4)
1217
1218/* Packed Widening Multiply Accumulate */
1219__packed_ternary_builtin_mixed(pwmacc_i32x2, int32x2_t, int16x2_t, int16x2_t, __builtin_riscv_pwmacc_i32x2)
1220__packed_ternary_builtin_mixed(pwmaccu_u32x2, uint32x2_t, uint16x2_t, uint16x2_t, __builtin_riscv_pwmaccu_u32x2)
1221__packed_ternary_builtin_mixed(pwmaccsu_i32x2, int32x2_t, int16x2_t, uint16x2_t, __builtin_riscv_pwmaccsu_i32x2)
1222
1223 /* Packed Multiplication with Horizontal Addition and Accumulate (64-bit) */
1224static __inline__ int32x2_t __DEFAULT_FN_ATTRS
1225__riscv_pm4adda_i8x8(int32x2_t __rd, int8x8_t __rs1, int8x8_t __rs2) {
1226 return (int32x2_t)((uint32x2_t)__rd +
1227 (uint32x2_t)__riscv_pm4add_i8x8(__rs1, __rs2));
1228}
1229
1230static __inline__ uint32x2_t __DEFAULT_FN_ATTRS
1231__riscv_pm4addau_u8x8(uint32x2_t __rd, uint8x8_t __rs1, uint8x8_t __rs2) {
1232 return __rd + __riscv_pm4addu_u8x8(__rs1, __rs2);
1233}
1234
1235static __inline__ int32x2_t __DEFAULT_FN_ATTRS
1236__riscv_pm4addasu_i8x8(int32x2_t __rd, int8x8_t __rs1, uint8x8_t __rs2) {
1237 return (int32x2_t)((uint32x2_t)__rd +
1238 (uint32x2_t)__riscv_pm4addsu_i8x8(__rs1, __rs2));
1239}
1240
1241/* Packed Multiplication with Widening Horizontal Addition */
1242__packed_binary_builtin_mixed(pm2wadd_i64, int64_t, int16x2_t, int16x2_t, __builtin_riscv_pm2wadd_i64)
1243__packed_binary_builtin_mixed(pm2wadd_x_i64, int64_t, int16x2_t, int16x2_t, __builtin_riscv_pm2wadd_x_i64)
1244__packed_binary_builtin_mixed(pm2waddu_u64, uint64_t, uint16x2_t, uint16x2_t, __builtin_riscv_pm2waddu_u64)
1245__packed_binary_builtin_mixed(pm2wsub_i64, int64_t, int16x2_t, int16x2_t, __builtin_riscv_pm2wsub_i64)
1246__packed_binary_builtin_mixed(pm2wsub_x_i64, int64_t, int16x2_t, int16x2_t, __builtin_riscv_pm2wsub_x_i64)
1247__packed_binary_builtin_mixed(pm2waddsu_i64, int64_t, int16x2_t, uint16x2_t, __builtin_riscv_pm2waddsu_i64)
1248
1249/* Packed Multiplication with Widening Horizontal Addition and Accumulate */
1250__packed_ternary_builtin_mixed(pm2wadda_i64, int64_t, int16x2_t, int16x2_t, __builtin_riscv_pm2wadda_i64)
1251__packed_ternary_builtin_mixed(pm2wadda_x_i64, int64_t, int16x2_t, int16x2_t, __builtin_riscv_pm2wadda_x_i64)
1252__packed_ternary_builtin_mixed(pm2waddau_u64, uint64_t, uint16x2_t, uint16x2_t, __builtin_riscv_pm2waddau_u64)
1253__packed_ternary_builtin_mixed(pm2wsuba_i64, int64_t, int16x2_t, int16x2_t, __builtin_riscv_pm2wsuba_i64)
1254__packed_ternary_builtin_mixed(pm2wsuba_x_i64, int64_t, int16x2_t, int16x2_t, __builtin_riscv_pm2wsuba_x_i64)
1255__packed_ternary_builtin_mixed(pm2waddasu_i64, int64_t, int16x2_t, uint16x2_t, __builtin_riscv_pm2waddasu_i64)
1256
1257/* Packed Absolute Difference Sum (32-bit) */
1258__packed_abdsum(pabdsumu_u8x4_u32, uint32_t, uint8x4_t, __builtin_riscv_pabdsumu_u8x4_u32)
1259__packed_ternary_builtin_cast(pabdsumau_u8x4_u32, uint32_t, uint8x4_t, __builtin_riscv_pabdsumau_u8x4_u32)
1260
1261/* Packed Absolute Difference Sum (64-bit) */
1262__packed_abdsum(pabdsumu_u8x8_u32, uint32_t, uint8x8_t, __builtin_riscv_pabdsumu_u8x8_u32)
1263__packed_abdsum(pabdsumu_u8x8_u64, uint64_t, uint8x8_t, __builtin_riscv_pabdsumu_u8x8_u64)
1264__packed_ternary_builtin_cast(pabdsumau_u8x8_u32, uint32_t, uint8x8_t, __builtin_riscv_pabdsumau_u8x8_u32)
1265__packed_ternary_builtin_cast(pabdsumau_u8x8_u64, uint64_t, uint8x8_t, __builtin_riscv_pabdsumau_u8x8_u64)
1266
1267/* Packed Saturating Absolute Value (32-bit) */
1268__packed_unary_builtin(psabs_i8x4, int8x4_t, __builtin_riscv_psabs_i8x4)
1269__packed_unary_builtin(psabs_i16x2, int16x2_t, __builtin_riscv_psabs_i16x2)
1270
1271/* Packed Saturating Absolute Value (64-bit) */
1272__packed_unary_builtin(psabs_i8x8, int8x8_t, __builtin_riscv_psabs_i8x8)
1273__packed_unary_builtin(psabs_i16x4, int16x4_t, __builtin_riscv_psabs_i16x4)
1274
1275/* Packed Sign and Zero Extend (32-bit) */
1276__packed_unary_builtin(psext_b_i16x2, int16x2_t, __builtin_riscv_psext_b_i16x2)
1277__packed_unary_builtin(pzext_b_u16x2, uint16x2_t, __builtin_riscv_pzext_b_u16x2)
1278
1279/* Packed Sign and Zero Extend (64-bit) */
1280__packed_unary_builtin(psext_b_i16x4, int16x4_t, __builtin_riscv_psext_b_i16x4)
1281__packed_unary_builtin(psext_b_i32x2, int32x2_t, __builtin_riscv_psext_b_i32x2)
1282__packed_unary_builtin(psext_h_i32x2, int32x2_t, __builtin_riscv_psext_h_i32x2)
1283__packed_unary_builtin(pzext_b_u16x4, uint16x4_t, __builtin_riscv_pzext_b_u16x4)
1284__packed_unary_builtin(pzext_h_u32x2, uint32x2_t, __builtin_riscv_pzext_h_u32x2)
1285
1286/* Packed Widening Unzip (32-bit) */
1287__packed_wunzip_ext(pwunzipe_i16x2, int16x2_t, int8x4_t,
1288 __riscv_psext_b_i16x2)
1289__packed_wunzip_shift(pwunzipo_i16x2, int16x2_t, int8x4_t, >>, 8)
1290__packed_wunzip_ext(pwunzipue_u16x2, uint16x2_t, uint8x4_t,
1291 __riscv_pzext_b_u16x2)
1292__packed_wunzip_shift(pwunzipuo_u16x2, uint16x2_t, uint8x4_t, >>, 8)
1293__packed_wunzip_shift(pwunziphe_i16x2, int16x2_t, int8x4_t, <<, 8)
1294__packed_wunzip_shift(pwunziphe_u16x2, uint16x2_t, uint8x4_t, <<, 8)
1295__packed_wunzip_odd_hi(pwunzipho_i16x2, int16x2_t, int8x4_t,
1296 __riscv_pnziph_i8x4)
1298 __riscv_pnziph_u8x4)
1299
1300/* Packed Widening Unzip (64-bit) */
1301__packed_wunzip_ext(pwunzipe_i16x4, int16x4_t, int8x8_t,
1302 __riscv_psext_b_i16x4)
1303__packed_wunzip_shift(pwunzipo_i16x4, int16x4_t, int8x8_t, >>, 8)
1304__packed_wunzip_ext(pwunzipue_u16x4, uint16x4_t, uint8x8_t,
1305 __riscv_pzext_b_u16x4)
1306__packed_wunzip_shift(pwunzipuo_u16x4, uint16x4_t, uint8x8_t, >>, 8)
1307__packed_wunzip_ext(pwunzipe_i32x2, int32x2_t, int16x4_t,
1308 __riscv_psext_h_i32x2)
1309__packed_wunzip_shift(pwunzipo_i32x2, int32x2_t, int16x4_t, >>, 16)
1310__packed_wunzip_ext(pwunzipue_u32x2, uint32x2_t, uint16x4_t,
1311 __riscv_pzext_h_u32x2)
1312__packed_wunzip_shift(pwunzipuo_u32x2, uint32x2_t, uint16x4_t, >>, 16)
1313__packed_wunzip_shift(pwunziphe_i16x4, int16x4_t, int8x8_t, <<, 8)
1314__packed_wunzip_odd_hi(pwunzipho_i16x4, int16x4_t, int8x8_t,
1315 __riscv_pnziph_i8x8)
1316__packed_wunzip_shift(pwunziphe_u16x4, uint16x4_t, uint8x8_t, <<, 8)
1318 __riscv_pnziph_u8x8)
1319__packed_wunzip_shift(pwunziphe_i32x2, int32x2_t, int16x4_t, <<, 16)
1321 __riscv_pnziph_i16x4)
1322__packed_wunzip_shift(pwunziphe_u32x2, uint32x2_t, uint16x4_t, <<, 16)
1324 __riscv_pnziph_u16x4)
1325
1326/* Packed "Q-format" Multiplication (32-bit) */
1327__packed_binary_builtin(pmulq_i16x2, int16x2_t, __builtin_riscv_pmulq_i16x2)
1328__packed_binary_builtin(pmulqr_i16x2, int16x2_t, __builtin_riscv_pmulqr_i16x2)
1329
1330/* Packed "Q-format" Multiplication (64-bit) */
1331__packed_binary_builtin(pmulq_i16x4, int16x4_t, __builtin_riscv_pmulq_i16x4)
1332__packed_binary_builtin(pmulqr_i16x4, int16x4_t, __builtin_riscv_pmulqr_i16x4)
1333__packed_binary_builtin(pmulq_i32x2, int32x2_t, __builtin_riscv_pmulq_i32x2)
1334__packed_binary_builtin(pmulqr_i32x2, int32x2_t, __builtin_riscv_pmulqr_i32x2)
1335
1336/* Packed Multiply Parts (32-bit) */
1337__packed_binary_builtin_mixed(pmul_b00_i16x2, int16x2_t, int8x4_t, int8x4_t, __builtin_riscv_pmul_b00_i16x2)
1338__packed_binary_builtin_mixed(pmul_b01_i16x2, int16x2_t, int8x4_t, int8x4_t, __builtin_riscv_pmul_b01_i16x2)
1339__packed_binary_builtin_mixed(pmul_b11_i16x2, int16x2_t, int8x4_t, int8x4_t, __builtin_riscv_pmul_b11_i16x2)
1340__packed_binary_builtin_mixed(pmulu_b00_u16x2, uint16x2_t, uint8x4_t, uint8x4_t, __builtin_riscv_pmulu_b00_u16x2)
1341__packed_binary_builtin_mixed(pmulu_b01_u16x2, uint16x2_t, uint8x4_t, uint8x4_t, __builtin_riscv_pmulu_b01_u16x2)
1342__packed_binary_builtin_mixed(pmulu_b11_u16x2, uint16x2_t, uint8x4_t, uint8x4_t, __builtin_riscv_pmulu_b11_u16x2)
1343__packed_binary_builtin_mixed(pmulsu_b00_i16x2, int16x2_t, int8x4_t, uint8x4_t, __builtin_riscv_pmulsu_b00_i16x2)
1344__packed_binary_builtin_mixed(pmulsu_b11_i16x2, int16x2_t, int8x4_t, uint8x4_t, __builtin_riscv_pmulsu_b11_i16x2)
1345__packed_binary_builtin_mixed(mul_h00_i32, int32_t, int16x2_t, int16x2_t, __builtin_riscv_mul_h00_i32)
1346__packed_binary_builtin_mixed(mul_h01_i32, int32_t, int16x2_t, int16x2_t, __builtin_riscv_mul_h01_i32)
1347__packed_binary_builtin_mixed(mul_h11_i32, int32_t, int16x2_t, int16x2_t, __builtin_riscv_mul_h11_i32)
1348__packed_binary_builtin_mixed(mulu_h00_u32, uint32_t, uint16x2_t, uint16x2_t, __builtin_riscv_mulu_h00_u32)
1349__packed_binary_builtin_mixed(mulu_h01_u32, uint32_t, uint16x2_t, uint16x2_t, __builtin_riscv_mulu_h01_u32)
1350__packed_binary_builtin_mixed(mulu_h11_u32, uint32_t, uint16x2_t, uint16x2_t, __builtin_riscv_mulu_h11_u32)
1351__packed_binary_builtin_mixed(mulsu_h00_i32, int32_t, int16x2_t, uint16x2_t, __builtin_riscv_mulsu_h00_i32)
1352__packed_binary_builtin_mixed(mulsu_h11_i32, int32_t, int16x2_t, uint16x2_t, __builtin_riscv_mulsu_h11_i32)
1353
1354/* Packed Multiply Parts (64-bit) */
1355__packed_binary_builtin_mixed(pmul_b00_i16x4, int16x4_t, int8x8_t, int8x8_t, __builtin_riscv_pmul_b00_i16x4)
1356__packed_binary_builtin_mixed(pmul_b01_i16x4, int16x4_t, int8x8_t, int8x8_t, __builtin_riscv_pmul_b01_i16x4)
1357__packed_binary_builtin_mixed(pmul_b11_i16x4, int16x4_t, int8x8_t, int8x8_t, __builtin_riscv_pmul_b11_i16x4)
1358__packed_binary_builtin_mixed(pmulu_b00_u16x4, uint16x4_t, uint8x8_t, uint8x8_t, __builtin_riscv_pmulu_b00_u16x4)
1359__packed_binary_builtin_mixed(pmulu_b01_u16x4, uint16x4_t, uint8x8_t, uint8x8_t, __builtin_riscv_pmulu_b01_u16x4)
1360__packed_binary_builtin_mixed(pmulu_b11_u16x4, uint16x4_t, uint8x8_t, uint8x8_t, __builtin_riscv_pmulu_b11_u16x4)
1361__packed_binary_builtin_mixed(pmulsu_b00_i16x4, int16x4_t, int8x8_t, uint8x8_t, __builtin_riscv_pmulsu_b00_i16x4)
1362__packed_binary_builtin_mixed(pmulsu_b11_i16x4, int16x4_t, int8x8_t, uint8x8_t, __builtin_riscv_pmulsu_b11_i16x4)
1363__packed_binary_builtin_mixed(pmul_h00_i32x2, int32x2_t, int16x4_t, int16x4_t, __builtin_riscv_pmul_h00_i32x2)
1364__packed_binary_builtin_mixed(pmul_h01_i32x2, int32x2_t, int16x4_t, int16x4_t, __builtin_riscv_pmul_h01_i32x2)
1365__packed_binary_builtin_mixed(pmul_h11_i32x2, int32x2_t, int16x4_t, int16x4_t, __builtin_riscv_pmul_h11_i32x2)
1366__packed_binary_builtin_mixed(pmulu_h00_u32x2, uint32x2_t, uint16x4_t, uint16x4_t, __builtin_riscv_pmulu_h00_u32x2)
1367__packed_binary_builtin_mixed(pmulu_h01_u32x2, uint32x2_t, uint16x4_t, uint16x4_t, __builtin_riscv_pmulu_h01_u32x2)
1368__packed_binary_builtin_mixed(pmulu_h11_u32x2, uint32x2_t, uint16x4_t, uint16x4_t, __builtin_riscv_pmulu_h11_u32x2)
1369__packed_binary_builtin_mixed(pmulsu_h00_i32x2, int32x2_t, int16x4_t, uint16x4_t, __builtin_riscv_pmulsu_h00_i32x2)
1370__packed_binary_builtin_mixed(pmulsu_h11_i32x2, int32x2_t, int16x4_t, uint16x4_t, __builtin_riscv_pmulsu_h11_i32x2)
1371__packed_binary_builtin_mixed(mul_w00_i64, int64_t, int32x2_t, int32x2_t, __builtin_riscv_mul_w00_i64)
1372__packed_binary_builtin_mixed(mul_w01_i64, int64_t, int32x2_t, int32x2_t, __builtin_riscv_mul_w01_i64)
1373__packed_binary_builtin_mixed(mul_w11_i64, int64_t, int32x2_t, int32x2_t, __builtin_riscv_mul_w11_i64)
1374__packed_binary_builtin_mixed(mulu_w00_u64, uint64_t, uint32x2_t, uint32x2_t, __builtin_riscv_mulu_w00_u64)
1375__packed_binary_builtin_mixed(mulu_w01_u64, uint64_t, uint32x2_t, uint32x2_t, __builtin_riscv_mulu_w01_u64)
1376__packed_binary_builtin_mixed(mulu_w11_u64, uint64_t, uint32x2_t, uint32x2_t, __builtin_riscv_mulu_w11_u64)
1377__packed_binary_builtin_mixed(mulsu_w00_i64, int64_t, int32x2_t, uint32x2_t, __builtin_riscv_mulsu_w00_i64)
1378__packed_binary_builtin_mixed(mulsu_w11_i64, int64_t, int32x2_t, uint32x2_t, __builtin_riscv_mulsu_w11_i64)
1379
1380/* Packed Multiply High Parts (32-bit) */
1381__packed_binary_builtin_mixed(pmulh_b0_i16x2, int16x2_t, int16x2_t, int8x4_t, __builtin_riscv_pmulh_b0_i16x2)
1382__packed_binary_builtin_mixed(pmulh_b1_i16x2, int16x2_t, int16x2_t, int8x4_t, __builtin_riscv_pmulh_b1_i16x2)
1383__packed_binary_builtin_mixed(pmulhsu_b0_i16x2, int16x2_t, int16x2_t, uint8x4_t, __builtin_riscv_pmulhsu_b0_i16x2)
1384__packed_binary_builtin_mixed(pmulhsu_b1_i16x2, int16x2_t, int16x2_t, uint8x4_t, __builtin_riscv_pmulhsu_b1_i16x2)
1385__packed_binary_builtin_mixed(mulh_h0_i32, int32_t, int32_t, int16x2_t, __builtin_riscv_mulh_h0_i32)
1386__packed_binary_builtin_mixed(mulh_h1_i32, int32_t, int32_t, int16x2_t, __builtin_riscv_mulh_h1_i32)
1387__packed_binary_builtin_mixed(mulhsu_h0_i32, int32_t, int32_t, uint16x2_t, __builtin_riscv_mulhsu_h0_i32)
1388__packed_binary_builtin_mixed(mulhsu_h1_i32, int32_t, int32_t, uint16x2_t, __builtin_riscv_mulhsu_h1_i32)
1389
1390/* Packed Multiply High Parts (64-bit) */
1391__packed_binary_builtin_mixed(pmulh_b0_i16x4, int16x4_t, int16x4_t, int8x8_t, __builtin_riscv_pmulh_b0_i16x4)
1392__packed_binary_builtin_mixed(pmulh_b1_i16x4, int16x4_t, int16x4_t, int8x8_t, __builtin_riscv_pmulh_b1_i16x4)
1393__packed_binary_builtin_mixed(pmulhsu_b0_i16x4, int16x4_t, int16x4_t, uint8x8_t, __builtin_riscv_pmulhsu_b0_i16x4)
1394__packed_binary_builtin_mixed(pmulhsu_b1_i16x4, int16x4_t, int16x4_t, uint8x8_t, __builtin_riscv_pmulhsu_b1_i16x4)
1395__packed_binary_builtin_mixed(pmulh_h0_i32x2, int32x2_t, int32x2_t, int16x4_t, __builtin_riscv_pmulh_h0_i32x2)
1396__packed_binary_builtin_mixed(pmulh_h1_i32x2, int32x2_t, int32x2_t, int16x4_t, __builtin_riscv_pmulh_h1_i32x2)
1397__packed_binary_builtin_mixed(pmulhsu_h0_i32x2, int32x2_t, int32x2_t, uint16x4_t, __builtin_riscv_pmulhsu_h0_i32x2)
1398__packed_binary_builtin_mixed(pmulhsu_h1_i32x2, int32x2_t, int32x2_t, uint16x4_t, __builtin_riscv_pmulhsu_h1_i32x2)
1399
1400/* Packed "Q-format" Multiply Parts Accumulate (32-bit) */
1401__packed_ternary_builtin_cast(mqacc_h00_i32, int, int16x2_t, __builtin_riscv_mqacc_h00_i32)
1402__packed_ternary_builtin_cast(mqacc_h01_i32, int, int16x2_t, __builtin_riscv_mqacc_h01_i32)
1403__packed_ternary_builtin_cast(mqacc_h11_i32, int, int16x2_t, __builtin_riscv_mqacc_h11_i32)
1404__packed_ternary_builtin_cast(mqracc_h00_i32, int, int16x2_t, __builtin_riscv_mqracc_h00_i32)
1405__packed_ternary_builtin_cast(mqracc_h01_i32, int, int16x2_t, __builtin_riscv_mqracc_h01_i32)
1406__packed_ternary_builtin_cast(mqracc_h11_i32, int, int16x2_t, __builtin_riscv_mqracc_h11_i32)
1407
1408/* Packed "Q-format" Multiply Parts Accumulate (64-bit) */
1409__packed_ternary_builtin_cast(pmqacc_h00_i32x2, int32x2_t, int16x4_t, __builtin_riscv_pmqacc_h00_i32x2)
1410__packed_ternary_builtin_cast(pmqacc_h01_i32x2, int32x2_t, int16x4_t, __builtin_riscv_pmqacc_h01_i32x2)
1411__packed_ternary_builtin_cast(pmqacc_h11_i32x2, int32x2_t, int16x4_t, __builtin_riscv_pmqacc_h11_i32x2)
1412__packed_ternary_builtin_cast(pmqracc_h00_i32x2, int32x2_t, int16x4_t, __builtin_riscv_pmqracc_h00_i32x2)
1413__packed_ternary_builtin_cast(pmqracc_h01_i32x2, int32x2_t, int16x4_t, __builtin_riscv_pmqracc_h01_i32x2)
1414__packed_ternary_builtin_cast(pmqracc_h11_i32x2, int32x2_t, int16x4_t, __builtin_riscv_pmqracc_h11_i32x2)
1415__packed_ternary_builtin_cast(mqacc_w00_i64, int64_t, int32x2_t, __builtin_riscv_mqacc_w00_i64)
1416__packed_ternary_builtin_cast(mqacc_w01_i64, int64_t, int32x2_t, __builtin_riscv_mqacc_w01_i64)
1417__packed_ternary_builtin_cast(mqacc_w11_i64, int64_t, int32x2_t, __builtin_riscv_mqacc_w11_i64)
1418__packed_ternary_builtin_cast(mqracc_w00_i64, int64_t, int32x2_t, __builtin_riscv_mqracc_w00_i64)
1419__packed_ternary_builtin_cast(mqracc_w01_i64, int64_t, int32x2_t, __builtin_riscv_mqracc_w01_i64)
1420__packed_ternary_builtin_cast(mqracc_w11_i64, int64_t, int32x2_t, __builtin_riscv_mqracc_w11_i64)
1421
1422/* Packed Multiply Parts Accumulate (32-bit) */
1423__packed_ternary_builtin_mixed(macc_h00_i32, int32_t, int16x2_t, int16x2_t, __builtin_riscv_macc_h00_i32)
1424__packed_ternary_builtin_mixed(macc_h01_i32, int32_t, int16x2_t, int16x2_t, __builtin_riscv_macc_h01_i32)
1425__packed_ternary_builtin_mixed(macc_h11_i32, int32_t, int16x2_t, int16x2_t, __builtin_riscv_macc_h11_i32)
1426__packed_ternary_builtin_mixed(maccu_h00_u32, uint32_t, uint16x2_t, uint16x2_t, __builtin_riscv_maccu_h00_u32)
1427__packed_ternary_builtin_mixed(maccu_h01_u32, uint32_t, uint16x2_t, uint16x2_t, __builtin_riscv_maccu_h01_u32)
1428__packed_ternary_builtin_mixed(maccu_h11_u32, uint32_t, uint16x2_t, uint16x2_t, __builtin_riscv_maccu_h11_u32)
1429__packed_ternary_builtin_mixed(maccsu_h00_i32, int32_t, int16x2_t, uint16x2_t, __builtin_riscv_maccsu_h00_i32)
1430__packed_ternary_builtin_mixed(maccsu_h11_i32, int32_t, int16x2_t, uint16x2_t, __builtin_riscv_maccsu_h11_i32)
1431
1432/* Packed Multiply Parts Accumulate (64-bit) */
1433__packed_ternary_builtin_mixed(pmacc_h00_i32x2, int32x2_t, int16x4_t, int16x4_t, __builtin_riscv_pmacc_h00_i32x2)
1434__packed_ternary_builtin_mixed(pmacc_h01_i32x2, int32x2_t, int16x4_t, int16x4_t, __builtin_riscv_pmacc_h01_i32x2)
1435__packed_ternary_builtin_mixed(pmacc_h11_i32x2, int32x2_t, int16x4_t, int16x4_t, __builtin_riscv_pmacc_h11_i32x2)
1436__packed_ternary_builtin_mixed(pmaccu_h00_u32x2, uint32x2_t, uint16x4_t, uint16x4_t, __builtin_riscv_pmaccu_h00_u32x2)
1437__packed_ternary_builtin_mixed(pmaccu_h01_u32x2, uint32x2_t, uint16x4_t, uint16x4_t, __builtin_riscv_pmaccu_h01_u32x2)
1438__packed_ternary_builtin_mixed(pmaccu_h11_u32x2, uint32x2_t, uint16x4_t, uint16x4_t, __builtin_riscv_pmaccu_h11_u32x2)
1439__packed_ternary_builtin_mixed(pmaccsu_h00_i32x2, int32x2_t, int16x4_t, uint16x4_t, __builtin_riscv_pmaccsu_h00_i32x2)
1440__packed_ternary_builtin_mixed(pmaccsu_h11_i32x2, int32x2_t, int16x4_t, uint16x4_t, __builtin_riscv_pmaccsu_h11_i32x2)
1441__packed_ternary_builtin_mixed(macc_w00_i64, int64_t, int32x2_t, int32x2_t, __builtin_riscv_macc_w00_i64)
1442__packed_ternary_builtin_mixed(macc_w01_i64, int64_t, int32x2_t, int32x2_t, __builtin_riscv_macc_w01_i64)
1443__packed_ternary_builtin_mixed(macc_w11_i64, int64_t, int32x2_t, int32x2_t, __builtin_riscv_macc_w11_i64)
1444__packed_ternary_builtin_mixed(maccu_w00_u64, uint64_t, uint32x2_t, uint32x2_t, __builtin_riscv_maccu_w00_u64)
1445__packed_ternary_builtin_mixed(maccu_w01_u64, uint64_t, uint32x2_t, uint32x2_t, __builtin_riscv_maccu_w01_u64)
1446__packed_ternary_builtin_mixed(maccu_w11_u64, uint64_t, uint32x2_t, uint32x2_t, __builtin_riscv_maccu_w11_u64)
1447__packed_ternary_builtin_mixed(maccsu_w00_i64, int64_t, int32x2_t, uint32x2_t, __builtin_riscv_maccsu_w00_i64)
1448__packed_ternary_builtin_mixed(maccsu_w11_i64, int64_t, int32x2_t, uint32x2_t, __builtin_riscv_maccsu_w11_i64)
1449
1450/* Packed Narrowing Clip Pair (32-bit) */
1451__packed_binary_builtin_cast(pnclipp_i8x4, int16x2_t, int8x4_t, __builtin_riscv_pnclipp_i8x4)
1452__packed_binary_builtin_cast(pnclipup_u8x4, uint16x2_t, uint8x4_t, __builtin_riscv_pnclipup_u8x4)
1453__packed_binary_builtin_cast(pnclipp_i16x2, int, int16x2_t, __builtin_riscv_pnclipp_i16x2)
1454__packed_binary_builtin_cast(pnclipup_u16x2, unsigned int, uint16x2_t, __builtin_riscv_pnclipup_u16x2)
1455
1456/* Packed Narrowing Clip Pair (64-bit) */
1457__packed_binary_builtin_cast(pnclipp_i8x8, int16x4_t, int8x8_t, __builtin_riscv_pnclipp_i8x8)
1458__packed_binary_builtin_cast(pnclipup_u8x8, uint16x4_t, uint8x8_t, __builtin_riscv_pnclipup_u8x8)
1459__packed_binary_builtin_cast(pnclipp_i16x4, int32x2_t, int16x4_t, __builtin_riscv_pnclipp_i16x4)
1460__packed_binary_builtin_cast(pnclipup_u16x4, uint32x2_t, uint16x4_t, __builtin_riscv_pnclipup_u16x4)
1461__packed_binary_builtin_cast(pnclipp_i32x2, int64_t, int32x2_t, __builtin_riscv_pnclipp_i32x2)
1462__packed_binary_builtin_cast(pnclipup_u32x2, uint64_t, uint32x2_t, __builtin_riscv_pnclipup_u32x2)
1463
1464/* Packed Subvector Join */
1465__packed_concat4(pjoin2_i8x8, int8x8_t, int8x4_t)
1467__packed_concat2(pjoin2_i16x4, int16x4_t, int16x2_t)
1469
1470/* Packed Slide 1 up/down (32-bit) */
1471__packed_slide1(pslide1up_i8x4, int8x4_t, int8_t, 4, 0, 1, 2)
1472__packed_slide1(pslide1up_u8x4, uint8x4_t, uint8_t, 4, 0, 1, 2)
1473__packed_slide1(pslide1up_i16x2, int16x2_t, int16_t, 2, 0)
1474__packed_slide1(pslide1up_u16x2, uint16x2_t, uint16_t, 2, 0)
1475__packed_slide1(pslide1down_i8x4, int8x4_t, int8_t, 1, 2, 3, 4)
1476__packed_slide1(pslide1down_u8x4, uint8x4_t, uint8_t, 1, 2, 3, 4)
1477__packed_slide1(pslide1down_i16x2, int16x2_t, int16_t, 1, 2)
1478__packed_slide1(pslide1down_u16x2, uint16x2_t, uint16_t, 1, 2)
1479
1480/* Packed Slide 1 up/down (64-bit) */
1481__packed_slide1(pslide1up_i8x8, int8x8_t, int8_t, 8, 0, 1, 2, 3, 4, 5, 6)
1482__packed_slide1(pslide1up_u8x8, uint8x8_t, uint8_t, 8, 0, 1, 2, 3, 4, 5, 6)
1483__packed_slide1(pslide1up_i16x4, int16x4_t, int16_t, 4, 0, 1, 2)
1484__packed_slide1(pslide1up_u16x4, uint16x4_t, uint16_t, 4, 0, 1, 2)
1485__packed_slide1(pslide1up_i32x2, int32x2_t, int32_t, 2, 0)
1486__packed_slide1(pslide1up_u32x2, uint32x2_t, uint32_t, 2, 0)
1487__packed_slide1(pslide1down_i8x8, int8x8_t, int8_t, 1, 2, 3, 4, 5, 6, 7, 8)
1488__packed_slide1(pslide1down_u8x8, uint8x8_t, uint8_t, 1, 2, 3, 4, 5, 6, 7, 8)
1489__packed_slide1(pslide1down_i16x4, int16x4_t, int16_t, 1, 2, 3, 4)
1490__packed_slide1(pslide1down_u16x4, uint16x4_t, uint16_t, 1, 2, 3, 4)
1491__packed_slide1(pslide1down_i32x2, int32x2_t, int32_t, 1, 2)
1492__packed_slide1(pslide1down_u32x2, uint32x2_t, uint32_t, 1, 2)
1493
1494/* Packed Slide (32-bit) */
1495__packed_slideupx(pslideupx_i8x4, int8x4_t, uint32_t, 3)
1496__packed_slideupx(pslideupx_u8x4, uint8x4_t, uint32_t, 3)
1497__packed_slideupx(pslideupx_i16x2, int16x2_t, uint32_t, 4)
1498__packed_slideupx(pslideupx_u16x2, uint16x2_t, uint32_t, 4)
1499__packed_slidedownx(pslidedownx_i8x4, int8x4_t, uint32_t, 3)
1500__packed_slidedownx(pslidedownx_u8x4, uint8x4_t, uint32_t, 3)
1501__packed_slidedownx(pslidedownx_i16x2, int16x2_t, uint32_t, 4)
1502__packed_slidedownx(pslidedownx_u16x2, uint16x2_t, uint32_t, 4)
1503
1504/* Packed Slide (64-bit) */
1505__packed_slideupx(pslideupx_i8x8, int8x8_t, uint64_t, 3)
1506__packed_slideupx(pslideupx_u8x8, uint8x8_t, uint64_t, 3)
1507__packed_slideupx(pslideupx_i16x4, int16x4_t, uint64_t, 4)
1508__packed_slideupx(pslideupx_u16x4, uint16x4_t, uint64_t, 4)
1509__packed_slideupx(pslideupx_i32x2, int32x2_t, uint64_t, 5)
1510__packed_slideupx(pslideupx_u32x2, uint32x2_t, uint64_t, 5)
1511__packed_slidedownx(pslidedownx_i8x8, int8x8_t, uint64_t, 3)
1512__packed_slidedownx(pslidedownx_u8x8, uint8x8_t, uint64_t, 3)
1513__packed_slidedownx(pslidedownx_i16x4, int16x4_t, uint64_t, 4)
1514__packed_slidedownx(pslidedownx_u16x4, uint16x4_t, uint64_t, 4)
1515__packed_slidedownx(pslidedownx_i32x2, int32x2_t, uint64_t, 5)
1516__packed_slidedownx(pslidedownx_u32x2, uint32x2_t, uint64_t, 5)
1517
1518/* Packed Subvector Extract */
1523
1524/* Packed Subvector Insert */
1525static __inline__ int8x8_t __DEFAULT_FN_ATTRS
1526__riscv_pset_i8x4_i8x8(int8x8_t __v, int8x4_t __s, unsigned __idx)
1527 __attribute__((__enable_if__(__idx <= 1, "index must be a constant integer "
1528 "from 0 to 1"))) {
1529 return __idx ? __riscv_pjoin2_i8x8(
1530 __builtin_shufflevector(__v, __v, 0, 1, 2, 3), __s)
1531 : __riscv_pjoin2_i8x8(
1532 __s, __builtin_shufflevector(__v, __v, 4, 5, 6, 7));
1533}
1534static __inline__ uint8x8_t __DEFAULT_FN_ATTRS
1535__riscv_pset_u8x4_u8x8(uint8x8_t __v, uint8x4_t __s, unsigned __idx)
1536 __attribute__((__enable_if__(__idx <= 1, "index must be a constant integer "
1537 "from 0 to 1"))) {
1538 return __idx ? __riscv_pjoin2_u8x8(
1539 __builtin_shufflevector(__v, __v, 0, 1, 2, 3), __s)
1540 : __riscv_pjoin2_u8x8(
1541 __s, __builtin_shufflevector(__v, __v, 4, 5, 6, 7));
1542}
1543static __inline__ int16x4_t __DEFAULT_FN_ATTRS
1544__riscv_pset_i16x2_i16x4(int16x4_t __v, int16x2_t __s, unsigned __idx)
1545 __attribute__((__enable_if__(__idx <= 1, "index must be a constant integer "
1546 "from 0 to 1"))) {
1547 return __idx ? __riscv_pjoin2_i16x4(
1548 __builtin_shufflevector(__v, __v, 0, 1), __s)
1549 : __riscv_pjoin2_i16x4(
1550 __s, __builtin_shufflevector(__v, __v, 2, 3));
1551}
1552static __inline__ uint16x4_t __DEFAULT_FN_ATTRS
1553__riscv_pset_u16x2_u16x4(uint16x4_t __v, uint16x2_t __s, unsigned __idx)
1554 __attribute__((__enable_if__(__idx <= 1, "index must be a constant integer "
1555 "from 0 to 1"))) {
1556 return __idx ? __riscv_pjoin2_u16x4(
1557 __builtin_shufflevector(__v, __v, 0, 1), __s)
1558 : __riscv_pjoin2_u16x4(
1559 __s, __builtin_shufflevector(__v, __v, 2, 3));
1560}
1561
1562/* Packed Store (32-bit) */
1563__packed_store(pst_i8x4, int8x4_t, int8_t)
1565__packed_store(pst_i16x2, int16x2_t, int16_t)
1567
1568/* Packed Store (64-bit) */
1569__packed_store(pst_i8x8, int8x8_t, int8_t)
1571__packed_store(pst_i16x4, int16x4_t, int16_t)
1573__packed_store(pst_i32x2, int32x2_t, int32_t)
1575
1576/* Packed Element Extract (32-bit) */
1577__packed_extract(pget_i8x4_i8, int8_t, int8x4_t, 3)
1578__packed_extract(pget_u8x4_u8, uint8_t, uint8x4_t, 3)
1579__packed_extract(pget_i16x2_i16, int16_t, int16x2_t, 1)
1580__packed_extract(pget_u16x2_u16, uint16_t, uint16x2_t, 1)
1581
1582/* Packed Element Extract (64-bit) */
1583__packed_extract(pget_i8x8_i8, int8_t, int8x8_t, 7)
1584__packed_extract(pget_u8x8_u8, uint8_t, uint8x8_t, 7)
1585__packed_extract(pget_i16x4_i16, int16_t, int16x4_t, 3)
1586__packed_extract(pget_u16x4_u16, uint16_t, uint16x4_t, 3)
1587__packed_extract(pget_i32x2_i32, int32_t, int32x2_t, 1)
1588__packed_extract(pget_u32x2_u32, uint32_t, uint32x2_t, 1)
1589
1590/* Packed Load (32-bit) */
1591__packed_load(pld_i8x4, int8x4_t, int8_t)
1593__packed_load(pld_i16x2, int16x2_t, int16_t)
1595
1596/* Packed Load (64-bit) */
1597__packed_load(pld_i8x8, int8x8_t, int8_t)
1599__packed_load(pld_i16x4, int16x4_t, int16_t)
1601__packed_load(pld_i32x2, int32x2_t, int32_t)
1603
1604/* Reinterpret Casts, Packed <-> Scalar (32-bit) */
1621
1622/* Reinterpret Casts, Packed <-> Scalar (64-bit) */
1623__packed_reinterpret(u8x8_u64, uint64_t, uint8x8_t)
1624__packed_reinterpret(u16x4_u64, uint64_t, uint16x4_t)
1625__packed_reinterpret(u32x2_u64, uint64_t, uint32x2_t)
1626__packed_reinterpret(i8x8_u64, uint64_t, int8x8_t)
1627__packed_reinterpret(i16x4_u64, uint64_t, int16x4_t)
1628__packed_reinterpret(i32x2_u64, uint64_t, int32x2_t)
1635__packed_reinterpret(u64_u8x8, uint8x8_t, uint64_t)
1636__packed_reinterpret(u64_u16x4, uint16x4_t, uint64_t)
1637__packed_reinterpret(u64_u32x2, uint32x2_t, uint64_t)
1638__packed_reinterpret(u64_i8x8, int8x8_t, uint64_t)
1639__packed_reinterpret(u64_i16x4, int16x4_t, uint64_t)
1640__packed_reinterpret(u64_i32x2, int32x2_t, uint64_t)
1647
1648/* Reinterpret Casts, Packed <-> Packed (32-bit) */
1661
1662/* Reinterpret Casts, Packed <-> Packed (64-bit) */
1693
1694// clang-format on
1695
1696#undef __packed_splat2
1697#undef __packed_splat4
1698#undef __packed_splat8
1699#undef __packed_splat
1700#undef __packed_scalar_binary_op
1701#undef __packed_binary_op
1702#undef __packed_unary_op
1703#undef __packed_store
1704#undef __packed_binary_builtin
1705#undef __packed_binary_builtin_mixed
1706#undef __packed_ternary_builtin
1707#undef __packed_ternary_builtin_mixed
1708#undef __packed_sh1add
1709#undef __packed_sh1sadd
1710#undef __packed_cmp
1711#undef __packed_pabs
1712#undef __packed_binary_builtin_cast
1713#undef __packed_reduction
1714#undef __packed_merge_builtin
1715#undef __packed_unary_builtin
1716#undef __packed_cls
1717#undef __packed_slx
1718#undef __packed_srx
1719#undef __packed_slideupx
1720#undef __packed_slidedownx
1721#undef __packed_widen_convert
1722#undef __packed_widen_binary_op
1723#undef __packed_widen_binary_acc_op
1724#undef __packed_widen_sub_acc_op
1725#undef __packed_widen_mul
1726#undef __packed_widen_mulsu
1727#undef __packed_widen_high2
1728#undef __packed_widen_high4
1729#undef __packed_narrow_even2
1730#undef __packed_narrow_even4
1731#undef __packed_narrow_odd2
1732#undef __packed_narrow_odd4
1733#undef __packed_reverse2
1734#undef __packed_reverse4
1735#undef __packed_reverse8
1736#undef __packed_zip2
1737#undef __packed_zip4
1738#undef __packed_unzipe2
1739#undef __packed_unzipe4
1740#undef __packed_unzipo2
1741#undef __packed_unzipo4
1742#undef __packed_concat2
1743#undef __packed_concat4
1744#undef __packed_slide1
1745#undef __packed_pair_ee2
1746#undef __packed_pair_eo2
1747#undef __packed_pair_oe2
1748#undef __packed_pair_oo2
1749#undef __packed_pair_ee4
1750#undef __packed_pair_eo4
1751#undef __packed_pair_oe4
1752#undef __packed_pair_oo4
1753#undef __packed_pair_ee8
1754#undef __packed_pair_eo8
1755#undef __packed_pair_oe8
1756#undef __packed_pair_oo8
1757#undef __packed_nzip2
1758#undef __packed_nzip4
1759#undef __packed_nziph2
1760#undef __packed_nziph4
1761#undef __packed_wunzip_ext
1762#undef __packed_wunzip_shift
1763#undef __packed_wunzip_odd_hi
1764#undef __packed_abdsum
1765#undef __packed_ternary_builtin_cast
1766#undef __packed_extract
1767#undef __packed_subvector_extract8
1768#undef __packed_subvector_extract4
1769#undef __packed_insert
1770#undef __packed_join2
1771#undef __packed_join4
1772#undef __packed_load
1773#undef __packed_reinterpret
1774#undef __DEFAULT_FN_ATTRS
1775
1776#if defined(__cplusplus)
1777}
1778#endif
1779
1780#endif /* __RISCV_PACKED_SIMD_H */
_Float16 __2f16 __attribute__((ext_vector_type(2)))
Zeroes the upper 128 bits (bits 255:128) of all YMM registers.
#define __DEFAULT_FN_ATTRS
return __v
Definition arm_acle.h:88
#define __packed_insert(name, ty, elt_ty, max_idx)
#define __packed_pair_oe8(name, ty)
#define __packed_cmp(name, ty, rty, op)
#define __packed_srx(name, ty)
#define __packed_widen_convert(name, rty, ty)
__builtin_bitreverse32 uint32_t __builtin_riscv_aaddu_u32 __builtin_riscv_asubu_u32 __builtin_elementwise_add_sat __builtin_elementwise_sub_sat int32_t uint32_t uint32_t __builtin_riscv_mhacc_i32 __builtin_riscv_mhaccu_u32 __builtin_riscv_mhaccsu_i32 __builtin_riscv_mulq_i32 __builtin_riscv_mqwacc_i64 __packed_splat4 __packed_splat2 __packed_splat8 uint16x4_t
#define __packed_wunzip_ext(name, rty, ty, ext)
#define __packed_subvector_extract8(name, rty, ty)
__builtin_bitreverse32 uint32_t __builtin_riscv_aaddu_u32 __builtin_riscv_asubu_u32 __builtin_elementwise_add_sat __builtin_elementwise_sub_sat int32_t uint32_t uint32_t __builtin_riscv_mhacc_i32 __builtin_riscv_mhaccu_u32 __builtin_riscv_mhaccsu_i32 __builtin_riscv_mulq_i32 __builtin_riscv_mqwacc_i64 __packed_splat4 __packed_splat2 __packed_splat8 __packed_splat4 __packed_splat2 int16x4_t
__builtin_bitreverse32 uint32_t __builtin_riscv_aaddu_u32 __builtin_riscv_asubu_u32 __builtin_elementwise_add_sat __builtin_elementwise_sub_sat int32_t uint32_t uint32_t __builtin_riscv_mhacc_i32 __builtin_riscv_mhaccu_u32 __builtin_riscv_mhaccsu_i32 __builtin_riscv_mulq_i32 __builtin_riscv_mqwacc_i64 __packed_splat4 uint16_t
#define __packed_unary_builtin(name, ty, builtin)
#define __packed_widen_mulsu(name, rty, ty1, ty2, uty)
#define __packed_unzipo2(name, rty, ty)
#define __packed_binary_op(name, ty, op)
#define __packed_pair_ee2(name, ty)
#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_binary_builtin_mixed(name, rty, ty1, ty2, builtin)
#define __packed_wunzip_odd_hi(name, rty, ty, zip)
#define __packed_nziph2(name, rty, ty)
#define __packed_reverse2(name, ty)
#define __packed_pair_ee4(name, ty)
#define __packed_splat8(ty, x)
__builtin_bitreverse32 uint32_t __builtin_riscv_aaddu_u32 __builtin_riscv_asubu_u32 __builtin_elementwise_add_sat __builtin_elementwise_sub_sat int32_t uint32_t uint32_t __builtin_riscv_mhacc_i32 __builtin_riscv_mhaccu_u32 __builtin_riscv_mhaccsu_i32 __builtin_riscv_mulq_i32 __builtin_riscv_mqwacc_i64 __packed_splat4 __packed_splat2 __packed_splat8 __packed_splat4 __packed_splat2 int8x8_t
#define __packed_merge_builtin(name, ty, mask_ty, builtin)
__builtin_bitreverse32 uint32_t __builtin_riscv_aaddu_u32 __builtin_riscv_asubu_u32 __builtin_elementwise_add_sat __builtin_elementwise_sub_sat int32_t uint32_t uint32_t __builtin_riscv_mhacc_i32 __builtin_riscv_mhaccu_u32 __builtin_riscv_mhaccsu_i32 __builtin_riscv_mulq_i32 __builtin_riscv_mqwacc_i64 __packed_splat4 __packed_splat2 __packed_splat8 __packed_splat4 __packed_splat2 __packed_splat4 int16_t
#define __packed_scalar_binary_op(name, ty, scalar_ty, op, splat)
#define __packed_concat4(name, rty, ty)
#define __packed_pair_eo4(name, ty)
#define __packed_slx(name, ty)
#define __packed_nzip2(name, rty, ty)
#define __packed_pair_eo8(name, ty)
__builtin_bitreverse32 uint32_t __builtin_riscv_aaddu_u32 __builtin_riscv_asubu_u32 __builtin_elementwise_add_sat __builtin_elementwise_sub_sat int32_t uint32_t uint32_t __builtin_riscv_mhacc_i32 __builtin_riscv_mhaccu_u32 __builtin_riscv_mhaccsu_i32 __builtin_riscv_mulq_i32 __builtin_riscv_mqwacc_i64 __packed_splat4 __packed_splat2 __packed_splat8 __packed_splat4 uint32x2_t
#define __packed_slideupx(name, ty, bits_ty, log2_elt_bits)
#define __packed_reverse8(name, ty)
#define __packed_binary_builtin(name, ty, builtin)
#define __packed_join4(name, ty, elt_ty)
#define __packed_pair_oe4(name, ty)
#define __packed_nziph4(name, rty, ty)
__builtin_bitreverse32 uint32_t __builtin_riscv_aaddu_u32 __builtin_riscv_asubu_u32 __builtin_elementwise_add_sat __builtin_elementwise_sub_sat int32_t uint32_t uint32_t __builtin_riscv_mhacc_i32 __builtin_riscv_mhaccu_u32 __builtin_riscv_mhaccsu_i32 __builtin_riscv_mulq_i32 __builtin_riscv_mqwacc_i64 __packed_splat4 __packed_splat2 __packed_splat8 __packed_splat4 __packed_splat2 int32x2_t
#define __packed_wunzip_shift(name, rty, ty, op, shamt)
#define __packed_narrow_even2(name, rty, ty, sty)
#define __packed_widen_high4(name, rty, ty)
#define __packed_ternary_builtin(name, ty, builtin)
#define __packed_concat2(name, rty, ty)
#define __packed_unary_op(name, ty, op)
#define __packed_extract(name, rty, ty, max_idx)
#define __packed_pair_oo4(name, ty)
#define __packed_pair_ee8(name, ty)
#define __packed_unzipe4(name, rty, ty)
#define __packed_slide1(name, ty, elt_ty,...)
__builtin_bitreverse32 uint32_t __builtin_riscv_aaddu_u32 __builtin_riscv_asubu_u32 __builtin_elementwise_add_sat __builtin_elementwise_sub_sat int32_t uint32_t uint32_t __builtin_riscv_mhacc_i32 __builtin_riscv_mhaccu_u32 __builtin_riscv_mhaccsu_i32 __builtin_riscv_mulq_i32 int64_t
__builtin_bitreverse32 uint32_t __builtin_riscv_aaddu_u32 __builtin_riscv_asubu_u32 __builtin_elementwise_add_sat __builtin_elementwise_sub_sat int32_t uint32_t uint32_t __builtin_riscv_mhacc_i32 __builtin_riscv_mhaccu_u32 __builtin_riscv_mhaccsu_i32 __builtin_riscv_mulq_i32 __builtin_riscv_mqwacc_i64 __packed_splat4 __packed_splat2 __packed_splat8 __packed_splat4 __packed_splat2 int16x2_t
#define __packed_sh1add(name, ty)
#define __packed_pabs(name, ty, rty)
#define __packed_sh1sadd(name, ty)
__builtin_bitreverse32 uint32_t __builtin_riscv_aaddu_u32 __builtin_riscv_asubu_u32 __builtin_elementwise_add_sat __builtin_elementwise_sub_sat int32_t uint32_t uint32_t __builtin_riscv_mhacc_i32 __builtin_riscv_mhaccu_u32 __builtin_riscv_mhaccsu_i32 __builtin_riscv_mulq_i32 __builtin_riscv_mqwacc_i64 __packed_splat4 __packed_splat2 __packed_splat8 __packed_splat4 __packed_splat2 int8_t
#define __packed_pair_oe2(name, ty)
#define __packed_unzipe2(name, rty, ty)
#define __packed_unzipo4(name, rty, ty)
#define __packed_widen_high2(name, rty, ty)
__builtin_bitreverse32 uint32_t __builtin_riscv_aaddu_u32 __builtin_riscv_asubu_u32 __builtin_elementwise_add_sat __builtin_elementwise_sub_sat int32_t uint32_t uint32_t __builtin_riscv_mhacc_i32 __builtin_riscv_mhaccu_u32 __builtin_riscv_mhaccsu_i32 __builtin_riscv_mulq_i32 __builtin_riscv_mqwacc_i64 __packed_splat4 __packed_splat2 __packed_splat8 __packed_splat4 __packed_splat2 int8x4_t
#define __packed_ternary_builtin_mixed(name, rty, ty1, ty2, builtin)
#define __packed_pair_oo8(name, ty)
#define __packed_nzip4(name, rty, ty)
#define __packed_zip4(name, rty, ty)
#define __packed_cls(name, ty, builtin)
__builtin_bitreverse32 uint32_t __builtin_riscv_aaddu_u32 __builtin_riscv_asubu_u32 __builtin_elementwise_add_sat __builtin_elementwise_sub_sat int32_t uint32_t uint32_t __builtin_riscv_mhacc_i32 __builtin_riscv_mhaccu_u32 __builtin_riscv_mhaccsu_i32 __builtin_riscv_mulq_i32 __builtin_riscv_mqwacc_i64 uint8_t
#define __packed_splat(name, ty, scalar_ty, splat)
__builtin_bitreverse32 uint32_t __builtin_riscv_aaddu_u32 __builtin_riscv_asubu_u32 __builtin_elementwise_add_sat __builtin_elementwise_sub_sat int32_t uint32_t uint32_t __builtin_riscv_mhacc_i32 __builtin_riscv_mhaccu_u32 __builtin_riscv_mhaccsu_i32 __builtin_riscv_mulq_i32 __builtin_riscv_mqwacc_i64 __packed_splat4 uint16x2_t
#define __packed_widen_binary_acc_op(name, rty, ty, op)
#define __packed_narrow_odd2(name, rty, ty, sty, uty)
__builtin_bitreverse32 uint32_t __builtin_riscv_aaddu_u32 __builtin_riscv_asubu_u32 __builtin_elementwise_add_sat __builtin_elementwise_sub_sat int32_t uint32_t uint32_t __builtin_riscv_mhacc_i32 __builtin_riscv_mhaccu_u32 __builtin_riscv_mhaccsu_i32 __builtin_riscv_mulq_i32 __builtin_riscv_mqwacc_i64 uint8x4_t
#define __packed_abdsum(name, rty, ty, builtin)
#define __packed_slidedownx(name, ty, bits_ty, log2_elt_bits)
#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)
__builtin_bitreverse32 uint32_t __builtin_riscv_aaddu_u32 __builtin_riscv_asubu_u32 __builtin_elementwise_add_sat __builtin_elementwise_sub_sat int32_t
#define __packed_subvector_extract4(name, rty, ty)
__builtin_bitreverse32 uint32_t __builtin_riscv_aaddu_u32 __builtin_riscv_asubu_u32 __builtin_elementwise_add_sat __builtin_elementwise_sub_sat int32_t uint32_t uint32_t __builtin_riscv_mhacc_i32 __builtin_riscv_mhaccu_u32 __builtin_riscv_mhaccsu_i32 __builtin_riscv_mulq_i32 __builtin_riscv_mqwacc_i64 __packed_splat4 __packed_splat2 uint8x8_t
#define __packed_narrow_even4(name, rty, ty, sty)
#define __packed_narrow_odd4(name, rty, ty, sty, uty)
#define __packed_mulh_builtin(name, res_ty, ty1, ty2)
#define __packed_widen_sub_acc_op(name, rty, ty)
#define __packed_pair_eo2(name, ty)
#define __packed_widen_mul(name, rty, ty)
#define __packed_zip2(name, rty, ty)
#define __packed_pair_oo2(name, ty)
#define __packed_join2(name, ty, elt_ty)
#define __packed_store(name, ty, elt_ty)
#define __packed_splat4(ty, x)
#define __packed_load(name, ty, elt_ty)
#define __packed_reverse4(name, ty)