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_widen_convert(name, rty, ty) \
166 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
167 return __builtin_convertvector(__rs1, rty); \
168 }
169#define __packed_widen_binary_op(name, rty, ty, op) \
170 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, \
171 ty __rs2) { \
172 return __builtin_convertvector(__rs1, rty) \
173 op __builtin_convertvector(__rs2, rty); \
174 }
175#define __packed_widen_binary_acc_op(name, rty, ty, op) \
176 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(rty __rd, ty __rs1, \
177 ty __rs2) { \
178 return __rd op __builtin_convertvector(__rs1, rty) \
179 op __builtin_convertvector(__rs2, rty); \
180 }
181#define __packed_widen_sub_acc_op(name, rty, ty) \
182 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(rty __rd, ty __rs1, \
183 ty __rs2) { \
184 return __rd + __builtin_convertvector(__rs1, rty) - \
185 __builtin_convertvector(__rs2, rty); \
186 }
187#define __packed_widen_mul(name, rty, ty) \
188 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, \
189 ty __rs2) { \
190 return __builtin_convertvector(__rs1, rty) * \
191 __builtin_convertvector(__rs2, rty); \
192 }
193#define __packed_widen_mulsu(name, rty, ty1, ty2, uty) \
194 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty1 __rs1, \
195 ty2 __rs2) { \
196 return __builtin_convertvector(__rs1, rty) * \
197 (rty) __builtin_convertvector(__rs2, uty); \
198 }
199#define __packed_widen_high2(name, rty, ty) \
200 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
201 return (rty)__builtin_shufflevector((ty){0}, __rs1, 0, 2, 1, 3); \
202 }
203#define __packed_widen_high4(name, rty, ty) \
204 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
205 return (rty)__builtin_shufflevector((ty){0}, __rs1, 0, 4, 1, 5, 2, 6, 3, \
206 7); \
207 }
208
209#define __packed_narrow_even2(name, rty, ty, sty) \
210 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
211 return __builtin_convertvector(__rs1, rty); \
212 }
213#define __packed_narrow_even4(name, rty, ty, sty) \
214 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
215 return __builtin_convertvector(__rs1, rty); \
216 }
217#define __packed_narrow_odd2(name, rty, ty, sty, uty) \
218 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
219 return __builtin_shufflevector((sty)__rs1, (sty)__rs1, 1, 3); \
220 }
221#define __packed_narrow_odd4(name, rty, ty, sty, uty) \
222 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
223 return __builtin_shufflevector((sty)__rs1, (sty)__rs1, 1, 3, 5, 7); \
224 }
225
226/* Packed Reverse: reverse the order of the elements. Lowered to a single
227 * rev8/rev16/ppairoe.* by the backend's packed reverse-shuffle handling. */
228#define __packed_reverse2(name, ty) \
229 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
230 return __builtin_shufflevector(__rs1, __rs1, 1, 0); \
231 }
232#define __packed_reverse4(name, ty) \
233 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
234 return __builtin_shufflevector(__rs1, __rs1, 3, 2, 1, 0); \
235 }
236#define __packed_reverse8(name, ty) \
237 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
238 return __builtin_shufflevector(__rs1, __rs1, 7, 6, 5, 4, 3, 2, 1, 0); \
239 }
240
241#define __packed_zip2(name, rty, ty) \
242 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, \
243 ty __rs2) { \
244 return __builtin_shufflevector(__rs1, __rs2, 0, 2, 1, 3); \
245 }
246#define __packed_zip4(name, rty, ty) \
247 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, \
248 ty __rs2) { \
249 return __builtin_shufflevector(__rs1, __rs2, 0, 4, 1, 5, 2, 6, 3, 7); \
250 }
251#define __packed_unzipe2(name, rty, ty) \
252 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
253 return __builtin_shufflevector(__rs1, __rs1, 0, 2); \
254 }
255#define __packed_unzipe4(name, rty, ty) \
256 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
257 return __builtin_shufflevector(__rs1, __rs1, 0, 2, 4, 6); \
258 }
259#define __packed_unzipo2(name, rty, ty) \
260 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
261 return __builtin_shufflevector(__rs1, __rs1, 1, 3); \
262 }
263#define __packed_unzipo4(name, rty, ty) \
264 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
265 return __builtin_shufflevector(__rs1, __rs1, 1, 3, 5, 7); \
266 }
267
268#define __packed_concat2(name, rty, ty) \
269 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __lo, ty __hi) { \
270 return __builtin_shufflevector(__lo, __hi, 0, 1, 2, 3); \
271 }
272#define __packed_concat4(name, rty, ty) \
273 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __lo, ty __hi) { \
274 return __builtin_shufflevector(__lo, __hi, 0, 1, 2, 3, 4, 5, 6, 7); \
275 }
276
277#define __packed_slide1(name, ty, elt_ty, ...) \
278 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rd, \
279 elt_ty __rs1) { \
280 return __builtin_shufflevector(__rd, (ty){__rs1}, __VA_ARGS__); \
281 }
282
283#define __packed_pair_ee2(name, ty) \
284 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, ty __rs2) { \
285 return __builtin_shufflevector(__rs1, __rs2, 0, 2); \
286 }
287#define __packed_pair_eo2(name, ty) \
288 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, ty __rs2) { \
289 return __builtin_shufflevector(__rs1, __rs2, 0, 3); \
290 }
291#define __packed_pair_oe2(name, ty) \
292 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, ty __rs2) { \
293 return __builtin_shufflevector(__rs1, __rs2, 1, 2); \
294 }
295#define __packed_pair_oo2(name, ty) \
296 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, ty __rs2) { \
297 return __builtin_shufflevector(__rs1, __rs2, 1, 3); \
298 }
299#define __packed_pair_ee4(name, ty) \
300 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, ty __rs2) { \
301 return __builtin_shufflevector(__rs1, __rs2, 0, 4, 2, 6); \
302 }
303#define __packed_pair_eo4(name, ty) \
304 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, ty __rs2) { \
305 return __builtin_shufflevector(__rs1, __rs2, 0, 5, 2, 7); \
306 }
307#define __packed_pair_oe4(name, ty) \
308 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, ty __rs2) { \
309 return __builtin_shufflevector(__rs1, __rs2, 1, 4, 3, 6); \
310 }
311#define __packed_pair_oo4(name, ty) \
312 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, ty __rs2) { \
313 return __builtin_shufflevector(__rs1, __rs2, 1, 5, 3, 7); \
314 }
315#define __packed_pair_ee8(name, ty) \
316 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, ty __rs2) { \
317 return __builtin_shufflevector(__rs1, __rs2, 0, 8, 2, 10, 4, 12, 6, 14); \
318 }
319#define __packed_pair_eo8(name, ty) \
320 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, ty __rs2) { \
321 return __builtin_shufflevector(__rs1, __rs2, 0, 9, 2, 11, 4, 13, 6, 15); \
322 }
323#define __packed_pair_oe8(name, ty) \
324 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, ty __rs2) { \
325 return __builtin_shufflevector(__rs1, __rs2, 1, 8, 3, 10, 5, 12, 7, 14); \
326 }
327#define __packed_pair_oo8(name, ty) \
328 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, ty __rs2) { \
329 return __builtin_shufflevector(__rs1, __rs2, 1, 9, 3, 11, 5, 13, 7, 15); \
330 }
331
332#define __packed_nzip2(name, rty, ty) \
333 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, \
334 ty __rs2) { \
335 return __builtin_shufflevector((rty)__rs1, (rty)__rs2, 0, 4, 2, 6); \
336 }
337#define __packed_nzip4(name, rty, ty) \
338 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, \
339 ty __rs2) { \
340 return __builtin_shufflevector((rty)__rs1, (rty)__rs2, 0, 8, 2, 10, 4, 12, \
341 6, 14); \
342 }
343#define __packed_nziph2(name, rty, ty) \
344 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, \
345 ty __rs2) { \
346 return __builtin_shufflevector((rty)__rs1, (rty)__rs2, 1, 5, 3, 7); \
347 }
348#define __packed_nziph4(name, rty, ty) \
349 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, \
350 ty __rs2) { \
351 return __builtin_shufflevector((rty)__rs1, (rty)__rs2, 1, 9, 3, 11, 5, 13, \
352 7, 15); \
353 }
354
355#define __packed_wunzip_ext(name, rty, ty, ext) \
356 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
357 return ext(__rs1); \
358 }
359
360#define __packed_wunzip_shift(name, rty, ty, op, shamt) \
361 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
362 return (rty)__rs1 op shamt; \
363 }
364
365#define __packed_wunzip_odd_hi(name, rty, ty, zip) \
366 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
367 return (rty)zip((rty){0}, (rty)__rs1); \
368 }
369
370#define __packed_abdsum(name, rty, ty, builtin) \
371 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, \
372 ty __rs2) { \
373 return builtin(__rs1, __rs2); \
374 }
375
376#define __packed_ternary_builtin_cast(name, rty, ty, builtin) \
377 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(rty __rd, ty __rs1, \
378 ty __rs2) { \
379 return builtin(__rd, __rs1, __rs2); \
380 }
381
382#define __packed_reinterpret(name, rty, ty) \
383 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_preinterpret_##name( \
384 ty __x) { \
385 return __builtin_bit_cast(rty, __x); \
386 }
387
388#define __packed_insert(name, ty, elt_ty, max_idx) \
389 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __v, elt_ty __e, \
390 unsigned __idx) \
391 __attribute__((__enable_if__( \
392 __idx <= (max_idx), \
393 "index must be a constant integer from 0 to " #max_idx))) { \
394 __v[__idx] = __e; \
395 return __v; \
396 }
397
398#define __packed_join2(name, ty, elt_ty) \
399 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(elt_ty __e0, \
400 elt_ty __e1) { \
401 return (ty){__e0, __e1}; \
402 }
403
404#define __packed_join4(name, ty, elt_ty) \
405 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name( \
406 elt_ty __e0, elt_ty __e1, elt_ty __e2, elt_ty __e3) { \
407 return (ty){__e0, __e1, __e2, __e3}; \
408 }
409
410#define __packed_load(name, ty, elt_ty) \
411 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(elt_ty *__p) { \
412 typedef ty __attribute__((__aligned__(1))) ua_ty; \
413 return *(ua_ty *)__p; \
414 }
415
416// clang-format off: macro call sites have no trailing semicolons, which
417// confuses clang-format into a deeply nested expression.
418
419/* Scalar Bitmanip */
420__packed_unary_builtin(rev_32, uint32_t, __builtin_bitreverse32)
421#if __riscv_xlen == 64
422__packed_unary_builtin(rev_64, uint64_t, __builtin_bitreverse64)
423#endif
424
425/* Scalar Saturating Addition and Subtraction */
426__packed_binary_builtin(sadd_i32, int32_t, __builtin_elementwise_add_sat)
427__packed_binary_builtin(saddu_u32, uint32_t, __builtin_elementwise_add_sat)
428__packed_binary_builtin(ssub_i32, int32_t, __builtin_elementwise_sub_sat)
429__packed_binary_builtin(ssubu_u32, uint32_t, __builtin_elementwise_sub_sat)
430
431/* Scalar Absolute Value */
433#if __riscv_xlen == 64
434__packed_pabs(abs_u64, int64_t, uint64_t)
435#endif
436
437/* Scalar Multiply High */
438#define __packed_mulh_builtin(name, res_ty, ty1, ty2) \
439 static __inline__ res_ty __DEFAULT_FN_ATTRS __riscv_##name(ty1 __rs1, \
440 ty2 __rs2) { \
441 return __builtin_riscv_##name(__rs1, __rs2); \
442 }
449#undef __packed_mulh_builtin
450
451/* Packed Splat (32-bit) */
456
457/* Packed Splat (64-bit) */
464
465/* Packed Addition and Subtraction (32-bit) */
471__packed_binary_op(psub_u8x4, uint8x4_t, -)
473__packed_binary_op(psub_u16x2, uint16x2_t, -)
475__packed_unary_op(pneg_i16x2, int16x2_t, -)
476
477/* Packed Addition and Subtraction (64-bit) */
485__packed_binary_op(psub_u8x8, uint8x8_t, -)
487__packed_binary_op(psub_u16x4, uint16x4_t, -)
489__packed_binary_op(psub_u32x2, uint32x2_t, -)
491__packed_unary_op(pneg_i16x4, int16x4_t, -)
493
494/* Packed Addition with Scalar (32-bit) */
501
502/* Packed Addition with Scalar (64-bit) */
513
514/* Packed Saturating Addition and Subtraction (32-bit) */
515__packed_binary_builtin(psadd_i8x4, int8x4_t, __builtin_elementwise_add_sat)
516__packed_binary_builtin(psadd_i16x2, int16x2_t, __builtin_elementwise_add_sat)
517__packed_binary_builtin(psaddu_u8x4, uint8x4_t, __builtin_elementwise_add_sat)
518__packed_binary_builtin(psaddu_u16x2, uint16x2_t, __builtin_elementwise_add_sat)
519__packed_binary_builtin(pssub_i8x4, int8x4_t, __builtin_elementwise_sub_sat)
520__packed_binary_builtin(pssub_i16x2, int16x2_t, __builtin_elementwise_sub_sat)
521__packed_binary_builtin(pssubu_u8x4, uint8x4_t, __builtin_elementwise_sub_sat)
522__packed_binary_builtin(pssubu_u16x2, uint16x2_t, __builtin_elementwise_sub_sat)
523
524/* Packed Saturating Addition and Subtraction (64-bit) */
525__packed_binary_builtin(psadd_i8x8, int8x8_t, __builtin_elementwise_add_sat)
526__packed_binary_builtin(psadd_i16x4, int16x4_t, __builtin_elementwise_add_sat)
527__packed_binary_builtin(psadd_i32x2, int32x2_t, __builtin_elementwise_add_sat)
528__packed_binary_builtin(psaddu_u8x8, uint8x8_t, __builtin_elementwise_add_sat)
529__packed_binary_builtin(psaddu_u16x4, uint16x4_t, __builtin_elementwise_add_sat)
530__packed_binary_builtin(psaddu_u32x2, uint32x2_t, __builtin_elementwise_add_sat)
531__packed_binary_builtin(pssub_i8x8, int8x8_t, __builtin_elementwise_sub_sat)
532__packed_binary_builtin(pssub_i16x4, int16x4_t, __builtin_elementwise_sub_sat)
533__packed_binary_builtin(pssub_i32x2, int32x2_t, __builtin_elementwise_sub_sat)
534__packed_binary_builtin(pssubu_u8x8, uint8x8_t, __builtin_elementwise_sub_sat)
535__packed_binary_builtin(pssubu_u16x4, uint16x4_t, __builtin_elementwise_sub_sat)
536__packed_binary_builtin(pssubu_u32x2, uint32x2_t, __builtin_elementwise_sub_sat)
537
538/* Packed Shift-Add (32-bit) */
539__packed_sh1add(psh1add_i16x2, int16x2_t)
541__packed_sh1sadd(pssh1sadd_i16x2, int16x2_t)
542
543/* Packed Shift-Add (64-bit) */
545__packed_sh1add(psh1add_u16x4, uint16x4_t)
547__packed_sh1add(psh1add_u32x2, uint32x2_t)
549__packed_sh1sadd(pssh1sadd_i32x2, int32x2_t)
550
551/* Packed Exchanged Addition and Subtraction (32-bit) */
552__packed_binary_builtin(pas_x_i16x2, int16x2_t, __builtin_riscv_pas_x_i16x2)
553__packed_binary_builtin(psa_x_i16x2, int16x2_t, __builtin_riscv_psa_x_i16x2)
554__packed_binary_builtin(psas_x_i16x2, int16x2_t, __builtin_riscv_psas_x_i16x2)
555__packed_binary_builtin(pssa_x_i16x2, int16x2_t, __builtin_riscv_pssa_x_i16x2)
556__packed_binary_builtin(paas_x_i16x2, int16x2_t, __builtin_riscv_paas_x_i16x2)
557__packed_binary_builtin(pasa_x_i16x2, int16x2_t, __builtin_riscv_pasa_x_i16x2)
558
559/* Packed Exchanged Addition and Subtraction (64-bit) */
560__packed_binary_builtin(pas_x_i16x4, int16x4_t, __builtin_riscv_pas_x_i16x4)
561__packed_binary_builtin(psa_x_i16x4, int16x4_t, __builtin_riscv_psa_x_i16x4)
562__packed_binary_builtin(psas_x_i16x4, int16x4_t, __builtin_riscv_psas_x_i16x4)
563__packed_binary_builtin(pssa_x_i16x4, int16x4_t, __builtin_riscv_pssa_x_i16x4)
564__packed_binary_builtin(paas_x_i16x4, int16x4_t, __builtin_riscv_paas_x_i16x4)
565__packed_binary_builtin(pasa_x_i16x4, int16x4_t, __builtin_riscv_pasa_x_i16x4)
566__packed_binary_builtin(pas_x_i32x2, int32x2_t, __builtin_riscv_pas_x_i32x2)
567__packed_binary_builtin(psa_x_i32x2, int32x2_t, __builtin_riscv_psa_x_i32x2)
568__packed_binary_builtin(psas_x_i32x2, int32x2_t, __builtin_riscv_psas_x_i32x2)
569__packed_binary_builtin(pssa_x_i32x2, int32x2_t, __builtin_riscv_pssa_x_i32x2)
570__packed_binary_builtin(paas_x_i32x2, int32x2_t, __builtin_riscv_paas_x_i32x2)
571__packed_binary_builtin(pasa_x_i32x2, int32x2_t, __builtin_riscv_pasa_x_i32x2)
572
573/* Packed Minimum and Maximum (32-bit) */
574__packed_binary_builtin(pmin_i8x4, int8x4_t, __builtin_elementwise_min)
575__packed_binary_builtin(pmin_i16x2, int16x2_t, __builtin_elementwise_min)
576__packed_binary_builtin(pminu_u8x4, uint8x4_t, __builtin_elementwise_min)
577__packed_binary_builtin(pminu_u16x2, uint16x2_t, __builtin_elementwise_min)
578__packed_binary_builtin(pmax_i8x4, int8x4_t, __builtin_elementwise_max)
579__packed_binary_builtin(pmax_i16x2, int16x2_t, __builtin_elementwise_max)
580__packed_binary_builtin(pmaxu_u8x4, uint8x4_t, __builtin_elementwise_max)
581__packed_binary_builtin(pmaxu_u16x2, uint16x2_t, __builtin_elementwise_max)
582
583/* Packed Minimum and Maximum (64-bit) */
584__packed_binary_builtin(pmin_i8x8, int8x8_t, __builtin_elementwise_min)
585__packed_binary_builtin(pmin_i16x4, int16x4_t, __builtin_elementwise_min)
586__packed_binary_builtin(pmin_i32x2, int32x2_t, __builtin_elementwise_min)
587__packed_binary_builtin(pminu_u8x8, uint8x8_t, __builtin_elementwise_min)
588__packed_binary_builtin(pminu_u16x4, uint16x4_t, __builtin_elementwise_min)
589__packed_binary_builtin(pminu_u32x2, uint32x2_t, __builtin_elementwise_min)
590__packed_binary_builtin(pmax_i8x8, int8x8_t, __builtin_elementwise_max)
591__packed_binary_builtin(pmax_i16x4, int16x4_t, __builtin_elementwise_max)
592__packed_binary_builtin(pmax_i32x2, int32x2_t, __builtin_elementwise_max)
593__packed_binary_builtin(pmaxu_u8x8, uint8x8_t, __builtin_elementwise_max)
594__packed_binary_builtin(pmaxu_u16x4, uint16x4_t, __builtin_elementwise_max)
595__packed_binary_builtin(pmaxu_u32x2, uint32x2_t, __builtin_elementwise_max)
596
597/* Packed Comparison (32-bit) */
598__packed_cmp(pmseq_i8x4_u8x4, int8x4_t, uint8x4_t, ==)
599__packed_cmp(pmseq_u8x4_u8x4, uint8x4_t, uint8x4_t, ==)
600__packed_cmp(pmsne_i8x4_u8x4, int8x4_t, uint8x4_t, !=)
601__packed_cmp(pmsne_u8x4_u8x4, uint8x4_t, uint8x4_t, !=)
602__packed_cmp(pmslt_u8x4, int8x4_t, uint8x4_t, <)
603__packed_cmp(pmsltu_u8x4, uint8x4_t, uint8x4_t, <)
604__packed_cmp(pmsgt_u8x4, int8x4_t, uint8x4_t, >)
605__packed_cmp(pmsgtu_u8x4, uint8x4_t, uint8x4_t, >)
606__packed_cmp(pmsge_u8x4, int8x4_t, uint8x4_t, >=)
607__packed_cmp(pmsgeu_u8x4, uint8x4_t, uint8x4_t, >=)
608__packed_cmp(pmsle_u8x4, int8x4_t, uint8x4_t, <=)
609__packed_cmp(pmsleu_u8x4, uint8x4_t, uint8x4_t, <=)
610__packed_cmp(pmseq_i16x2_u16x2, int16x2_t, uint16x2_t, ==)
611__packed_cmp(pmseq_u16x2_u16x2, uint16x2_t, uint16x2_t, ==)
612__packed_cmp(pmsne_i16x2_u16x2, int16x2_t, uint16x2_t, !=)
613__packed_cmp(pmsne_u16x2_u16x2, uint16x2_t, uint16x2_t, !=)
614__packed_cmp(pmslt_u16x2, int16x2_t, uint16x2_t, <)
615__packed_cmp(pmsltu_u16x2, uint16x2_t, uint16x2_t, <)
616__packed_cmp(pmsgt_u16x2, int16x2_t, uint16x2_t, >)
617__packed_cmp(pmsgtu_u16x2, uint16x2_t, uint16x2_t, >)
618__packed_cmp(pmsge_u16x2, int16x2_t, uint16x2_t, >=)
619__packed_cmp(pmsgeu_u16x2, uint16x2_t, uint16x2_t, >=)
620__packed_cmp(pmsle_u16x2, int16x2_t, uint16x2_t, <=)
621__packed_cmp(pmsleu_u16x2, uint16x2_t, uint16x2_t, <=)
622
623/* Packed Comparison (64-bit) */
624__packed_cmp(pmseq_i8x8_u8x8, int8x8_t, uint8x8_t, ==)
625__packed_cmp(pmseq_u8x8_u8x8, uint8x8_t, uint8x8_t, ==)
626__packed_cmp(pmsne_i8x8_u8x8, int8x8_t, uint8x8_t, !=)
627__packed_cmp(pmsne_u8x8_u8x8, uint8x8_t, uint8x8_t, !=)
628__packed_cmp(pmslt_u8x8, int8x8_t, uint8x8_t, <)
629__packed_cmp(pmsltu_u8x8, uint8x8_t, uint8x8_t, <)
630__packed_cmp(pmsgt_u8x8, int8x8_t, uint8x8_t, >)
631__packed_cmp(pmsgtu_u8x8, uint8x8_t, uint8x8_t, >)
632__packed_cmp(pmsge_u8x8, int8x8_t, uint8x8_t, >=)
633__packed_cmp(pmsgeu_u8x8, uint8x8_t, uint8x8_t, >=)
634__packed_cmp(pmsle_u8x8, int8x8_t, uint8x8_t, <=)
635__packed_cmp(pmsleu_u8x8, uint8x8_t, uint8x8_t, <=)
636__packed_cmp(pmseq_i16x4_u16x4, int16x4_t, uint16x4_t, ==)
637__packed_cmp(pmseq_u16x4_u16x4, uint16x4_t, uint16x4_t, ==)
638__packed_cmp(pmsne_i16x4_u16x4, int16x4_t, uint16x4_t, !=)
639__packed_cmp(pmsne_u16x4_u16x4, uint16x4_t, uint16x4_t, !=)
640__packed_cmp(pmslt_u16x4, int16x4_t, uint16x4_t, <)
641__packed_cmp(pmsltu_u16x4, uint16x4_t, uint16x4_t, <)
642__packed_cmp(pmsgt_u16x4, int16x4_t, uint16x4_t, >)
643__packed_cmp(pmsgtu_u16x4, uint16x4_t, uint16x4_t, >)
644__packed_cmp(pmsge_u16x4, int16x4_t, uint16x4_t, >=)
645__packed_cmp(pmsgeu_u16x4, uint16x4_t, uint16x4_t, >=)
646__packed_cmp(pmsle_u16x4, int16x4_t, uint16x4_t, <=)
647__packed_cmp(pmsleu_u16x4, uint16x4_t, uint16x4_t, <=)
648__packed_cmp(pmseq_i32x2_u32x2, int32x2_t, uint32x2_t, ==)
649__packed_cmp(pmseq_u32x2_u32x2, uint32x2_t, uint32x2_t, ==)
650__packed_cmp(pmsne_i32x2_u32x2, int32x2_t, uint32x2_t, !=)
651__packed_cmp(pmsne_u32x2_u32x2, uint32x2_t, uint32x2_t, !=)
652__packed_cmp(pmslt_u32x2, int32x2_t, uint32x2_t, <)
653__packed_cmp(pmsltu_u32x2, uint32x2_t, uint32x2_t, <)
654__packed_cmp(pmsgt_u32x2, int32x2_t, uint32x2_t, >)
655__packed_cmp(pmsgtu_u32x2, uint32x2_t, uint32x2_t, >)
656__packed_cmp(pmsge_u32x2, int32x2_t, uint32x2_t, >=)
657__packed_cmp(pmsgeu_u32x2, uint32x2_t, uint32x2_t, >=)
658__packed_cmp(pmsle_u32x2, int32x2_t, uint32x2_t, <=)
659__packed_cmp(pmsleu_u32x2, uint32x2_t, uint32x2_t, <=)
660
661/* Packed Shift (32-bit) */
662__packed_binary_builtin_mixed(psll_s_u8x4, uint8x4_t, uint8x4_t, unsigned int, __builtin_riscv_psll_s_u8x4)
663__packed_binary_builtin_mixed(psll_s_i8x4, int8x4_t, int8x4_t, unsigned int, __builtin_riscv_psll_s_u8x4)
664__packed_binary_builtin_mixed(psll_s_u16x2, uint16x2_t, uint16x2_t, unsigned int, __builtin_riscv_psll_s_u16x2)
665__packed_binary_builtin_mixed(psll_s_i16x2, int16x2_t, int16x2_t, unsigned int, __builtin_riscv_psll_s_u16x2)
666__packed_binary_builtin_mixed(psrl_s_u8x4, uint8x4_t, uint8x4_t, unsigned int, __builtin_riscv_psrl_s_u8x4)
667__packed_binary_builtin_mixed(psrl_s_u16x2, uint16x2_t, uint16x2_t, unsigned int, __builtin_riscv_psrl_s_u16x2)
668__packed_binary_builtin_mixed(psra_s_i8x4, int8x4_t, int8x4_t, unsigned int, __builtin_riscv_psra_s_i8x4)
669__packed_binary_builtin_mixed(psra_s_i16x2, int16x2_t, int16x2_t, unsigned int, __builtin_riscv_psra_s_i16x2)
670
671/* Packed Shift (64-bit) */
672__packed_binary_builtin_mixed(psll_s_u8x8, uint8x8_t, uint8x8_t, unsigned int, __builtin_riscv_psll_s_u8x8)
673__packed_binary_builtin_mixed(psll_s_i8x8, int8x8_t, int8x8_t, unsigned int, __builtin_riscv_psll_s_u8x8)
674__packed_binary_builtin_mixed(psll_s_u16x4, uint16x4_t, uint16x4_t, unsigned int, __builtin_riscv_psll_s_u16x4)
675__packed_binary_builtin_mixed(psll_s_i16x4, int16x4_t, int16x4_t, unsigned int, __builtin_riscv_psll_s_u16x4)
676__packed_binary_builtin_mixed(psll_s_u32x2, uint32x2_t, uint32x2_t, unsigned int, __builtin_riscv_psll_s_u32x2)
677__packed_binary_builtin_mixed(psll_s_i32x2, int32x2_t, int32x2_t, unsigned int, __builtin_riscv_psll_s_u32x2)
678__packed_binary_builtin_mixed(psrl_s_u8x8, uint8x8_t, uint8x8_t, unsigned int, __builtin_riscv_psrl_s_u8x8)
679__packed_binary_builtin_mixed(psrl_s_u16x4, uint16x4_t, uint16x4_t, unsigned int, __builtin_riscv_psrl_s_u16x4)
680__packed_binary_builtin_mixed(psrl_s_u32x2, uint32x2_t, uint32x2_t, unsigned int, __builtin_riscv_psrl_s_u32x2)
681__packed_binary_builtin_mixed(psra_s_i8x8, int8x8_t, int8x8_t, unsigned int, __builtin_riscv_psra_s_i8x8)
682__packed_binary_builtin_mixed(psra_s_i16x4, int16x4_t, int16x4_t, unsigned int, __builtin_riscv_psra_s_i16x4)
683__packed_binary_builtin_mixed(psra_s_i32x2, int32x2_t, int32x2_t, unsigned int, __builtin_riscv_psra_s_i32x2)
684
685/* Packed Saturating and Rounding Shifts (32-bit) */
686__packed_binary_builtin_mixed(pssha_s_i16x2, int16x2_t, int16x2_t, int, __builtin_riscv_pssha_s_i16x2)
687__packed_binary_builtin_mixed(psshar_s_i16x2, int16x2_t, int16x2_t, int, __builtin_riscv_psshar_s_i16x2)
688__packed_binary_builtin_mixed(psshl_s_u16x2, uint16x2_t, uint16x2_t, int, __builtin_riscv_psshl_s_u16x2)
689__packed_binary_builtin_mixed(psshlr_s_u16x2, uint16x2_t, uint16x2_t, int, __builtin_riscv_psshlr_s_u16x2)
690
691/* Packed Saturating and Rounding Shifts (64-bit) */
692__packed_binary_builtin_mixed(pssha_s_i16x4, int16x4_t, int16x4_t, int, __builtin_riscv_pssha_s_i16x4)
693__packed_binary_builtin_mixed(pssha_s_i32x2, int32x2_t, int32x2_t, int, __builtin_riscv_pssha_s_i32x2)
694__packed_binary_builtin_mixed(psshar_s_i16x4, int16x4_t, int16x4_t, int, __builtin_riscv_psshar_s_i16x4)
695__packed_binary_builtin_mixed(psshar_s_i32x2, int32x2_t, int32x2_t, int, __builtin_riscv_psshar_s_i32x2)
696__packed_binary_builtin_mixed(psshl_s_u16x4, uint16x4_t, uint16x4_t, int, __builtin_riscv_psshl_s_u16x4)
697__packed_binary_builtin_mixed(psshl_s_u32x2, uint32x2_t, uint32x2_t, int, __builtin_riscv_psshl_s_u32x2)
698__packed_binary_builtin_mixed(psshlr_s_u16x4, uint16x4_t, uint16x4_t, int, __builtin_riscv_psshlr_s_u16x4)
699__packed_binary_builtin_mixed(psshlr_s_u32x2, uint32x2_t, uint32x2_t, int, __builtin_riscv_psshlr_s_u32x2)
700
701/* Packed Saturation (32-bit) */
702#define __riscv_pusati_u16x2(rs1, width) \
703 __builtin_riscv_pusati_u16x2(rs1, width)
704#define __riscv_psati_i16x2(rs1, width) __builtin_riscv_psati_i16x2(rs1, width)
705
706/* Packed Saturation (64-bit) */
707#define __riscv_pusati_u16x4(rs1, width) \
708 __builtin_riscv_pusati_u16x4(rs1, width)
709#define __riscv_pusati_u32x2(rs1, width) \
710 __builtin_riscv_pusati_u32x2(rs1, width)
711#define __riscv_psati_i16x4(rs1, width) __builtin_riscv_psati_i16x4(rs1, width)
712#define __riscv_psati_i32x2(rs1, width) __builtin_riscv_psati_i32x2(rs1, width)
713
714/* Packed Element Insert (32-bit) */
715__packed_insert(pset_i8_i8x4, int8x4_t, int8_t, 3)
716__packed_insert(pset_u8_u8x4, uint8x4_t, uint8_t, 3)
717__packed_insert(pset_i16_i16x2, int16x2_t, int16_t, 1)
718__packed_insert(pset_u16_u16x2, uint16x2_t, uint16_t, 1)
719
720/* Packed Element Insert (64-bit) */
721__packed_insert(pset_i8_i8x8, int8x8_t, int8_t, 7)
722__packed_insert(pset_u8_u8x8, uint8x8_t, uint8_t, 7)
723__packed_insert(pset_i16_i16x4, int16x4_t, int16_t, 3)
724__packed_insert(pset_u16_u16x4, uint16x4_t, uint16_t, 3)
725__packed_insert(pset_i32_i32x2, int32x2_t, int32_t, 1)
726__packed_insert(pset_u32_u32x2, uint32x2_t, uint32_t, 1)
727
728/* Packed Element Join (32-bit) */
729__packed_join4(pjoin4_i8x4, int8x4_t, int8_t)
730__packed_join4(pjoin4_u8x4, uint8x4_t, uint8_t)
731__packed_join2(pjoin2_i16x2, int16x2_t, int16_t)
732__packed_join2(pjoin2_u16x2, uint16x2_t, uint16_t)
733
734/* Packed Element Join (64-bit) */
735__packed_join4(pjoin4_i16x4, int16x4_t, int16_t)
736__packed_join4(pjoin4_u16x4, uint16x4_t, uint16_t)
737__packed_join2(pjoin2_i32x2, int32x2_t, int32_t)
738__packed_join2(pjoin2_u32x2, uint32x2_t, uint32_t)
739
740/* Packed Logical Operations (32-bit) */
741__packed_binary_op(pand_i8x4, int8x4_t, &)
742__packed_binary_op(pand_u8x4, uint8x4_t, &)
743__packed_binary_op(pand_i16x2, int16x2_t, &)
744__packed_binary_op(pand_u16x2, uint16x2_t, &)
745__packed_binary_op(por_i8x4, int8x4_t, |)
746__packed_binary_op(por_u8x4, uint8x4_t, |)
747__packed_binary_op(por_i16x2, int16x2_t, |)
748__packed_binary_op(por_u16x2, uint16x2_t, |)
749__packed_binary_op(pxor_i8x4, int8x4_t, ^)
750__packed_binary_op(pxor_u8x4, uint8x4_t, ^)
751__packed_binary_op(pxor_i16x2, int16x2_t, ^)
752__packed_binary_op(pxor_u16x2, uint16x2_t, ^)
753__packed_unary_op(pnot_i8x4, int8x4_t, ~)
754__packed_unary_op(pnot_u8x4, uint8x4_t, ~)
755__packed_unary_op(pnot_i16x2, int16x2_t, ~)
756__packed_unary_op(pnot_u16x2, uint16x2_t, ~)
757
758/* Packed Logical Operations (64-bit) */
759__packed_binary_op(pand_i8x8, int8x8_t, &)
760__packed_binary_op(pand_u8x8, uint8x8_t, &)
761__packed_binary_op(pand_i16x4, int16x4_t, &)
762__packed_binary_op(pand_u16x4, uint16x4_t, &)
763__packed_binary_op(pand_i32x2, int32x2_t, &)
764__packed_binary_op(pand_u32x2, uint32x2_t, &)
765__packed_binary_op(por_i8x8, int8x8_t, |)
766__packed_binary_op(por_u8x8, uint8x8_t, |)
767__packed_binary_op(por_i16x4, int16x4_t, |)
768__packed_binary_op(por_u16x4, uint16x4_t, |)
769__packed_binary_op(por_i32x2, int32x2_t, |)
770__packed_binary_op(por_u32x2, uint32x2_t, |)
771__packed_binary_op(pxor_i8x8, int8x8_t, ^)
772__packed_binary_op(pxor_u8x8, uint8x8_t, ^)
773__packed_binary_op(pxor_i16x4, int16x4_t, ^)
774__packed_binary_op(pxor_u16x4, uint16x4_t, ^)
775__packed_binary_op(pxor_i32x2, int32x2_t, ^)
776__packed_binary_op(pxor_u32x2, uint32x2_t, ^)
777__packed_unary_op(pnot_i8x8, int8x8_t, ~)
778__packed_unary_op(pnot_u8x8, uint8x8_t, ~)
779__packed_unary_op(pnot_i16x4, int16x4_t, ~)
780__packed_unary_op(pnot_u16x4, uint16x4_t, ~)
781__packed_unary_op(pnot_i32x2, int32x2_t, ~)
782__packed_unary_op(pnot_u32x2, uint32x2_t, ~)
783
784/* Packed Widening Convert */
793
794/* Packed Widening Shift */
795__packed_binary_builtin_mixed(pwsll_s_u16x4, uint16x4_t, uint8x4_t, unsigned,
796 __builtin_riscv_pwsll_s_u16x4)
797__packed_binary_builtin_mixed(pwsll_s_u32x2, uint32x2_t, uint16x2_t, unsigned,
798 __builtin_riscv_pwsll_s_u32x2)
799__packed_binary_builtin_mixed(pwsla_s_i16x4, int16x4_t, int8x4_t, unsigned,
800 __builtin_riscv_pwsla_s_i16x4)
801__packed_binary_builtin_mixed(pwsla_s_i32x2, int32x2_t, int16x2_t, unsigned,
802 __builtin_riscv_pwsla_s_i32x2)
803
804/* Packed Narrowing Shift */
805__packed_binary_builtin_mixed(pnsrl_s_u8x4, uint8x4_t, uint16x4_t, unsigned,
806 __builtin_riscv_pnsrl_s_u8x4)
807__packed_binary_builtin_mixed(pnsrl_s_u16x2, uint16x2_t, uint32x2_t, unsigned,
808 __builtin_riscv_pnsrl_s_u16x2)
809__packed_binary_builtin_mixed(pnsra_s_i8x4, int8x4_t, int16x4_t, unsigned,
810 __builtin_riscv_pnsra_s_i8x4)
811__packed_binary_builtin_mixed(pnsra_s_i16x2, int16x2_t, int32x2_t, unsigned,
812 __builtin_riscv_pnsra_s_i16x2)
813__packed_binary_builtin_mixed(pnsrar_s_i8x4, int8x4_t, int16x4_t, unsigned,
814 __builtin_riscv_pnsrar_s_i8x4)
815__packed_binary_builtin_mixed(pnsrar_s_i16x2, int16x2_t, int32x2_t, unsigned,
816 __builtin_riscv_pnsrar_s_i16x2)
817
818/* Packed Widening Addition and Subtraction */
827
828/* Packed Widening Addition Accumulate */
833
834/* Packed Widening Subtraction Accumulate */
839
840/* Packed Widening Multiply (32-bit) */
848
849/* Packed "Q-format" Multiply with Widening Accumulate */
851 __builtin_riscv_pmqwacc_i32x2)
853 __builtin_riscv_pmqrwacc_i32x2)
854
855/* Packed Narrowing Convert */
864
865/* Packed Reverse (32-bit) */
866__packed_reverse4(prev_i8x4, int8x4_t)
868__packed_reverse2(prev_i16x2, int16x2_t)
869__packed_reverse2(prev_u16x2, uint16x2_t)
870
871/* Packed Reverse (64-bit) */
872__packed_reverse8(prev_i8x8, int8x8_t)
874__packed_reverse4(prev_i16x4, int16x4_t)
875__packed_reverse4(prev_u16x4, uint16x4_t)
876__packed_reverse2(prev_i32x2, int32x2_t)
877__packed_reverse2(prev_u32x2, uint32x2_t)
878
879/* Packed Zip */
884
885/* Packed Unzip */
886__packed_unzipe4(punzipe_i8x4, int8x4_t, int8x8_t)
887__packed_unzipo4(punzipo_i8x4, int8x4_t, int8x8_t)
890__packed_unzipe2(punzipe_i16x2, int16x2_t, int16x4_t)
891__packed_unzipo2(punzipo_i16x2, int16x2_t, int16x4_t)
894
895/* Packed Pair (32-bit) */
896__packed_pair_ee4(ppaire_i8x4, int8x4_t)
897__packed_pair_ee4(ppaire_u8x4, uint8x4_t)
898__packed_pair_eo4(ppaireo_i8x4, int8x4_t)
899__packed_pair_eo4(ppaireo_u8x4, uint8x4_t)
900__packed_pair_oe4(ppairoe_i8x4, int8x4_t)
901__packed_pair_oe4(ppairoe_u8x4, uint8x4_t)
902__packed_pair_oo4(ppairo_i8x4, int8x4_t)
903__packed_pair_oo4(ppairo_u8x4, uint8x4_t)
904__packed_pair_ee2(ppaire_i16x2, int16x2_t)
905__packed_pair_ee2(ppaire_u16x2, uint16x2_t)
906__packed_pair_eo2(ppaireo_i16x2, int16x2_t)
907__packed_pair_eo2(ppaireo_u16x2, uint16x2_t)
908__packed_pair_oe2(ppairoe_i16x2, int16x2_t)
909__packed_pair_oe2(ppairoe_u16x2, uint16x2_t)
910__packed_pair_oo2(ppairo_i16x2, int16x2_t)
911__packed_pair_oo2(ppairo_u16x2, uint16x2_t)
912
913/* Packed Pair (64-bit byte and halfword forms) */
914__packed_pair_ee8(ppaire_i8x8, int8x8_t)
915__packed_pair_ee8(ppaire_u8x8, uint8x8_t)
916__packed_pair_eo8(ppaireo_i8x8, int8x8_t)
917__packed_pair_eo8(ppaireo_u8x8, uint8x8_t)
918__packed_pair_oe8(ppairoe_i8x8, int8x8_t)
919__packed_pair_oe8(ppairoe_u8x8, uint8x8_t)
920__packed_pair_oo8(ppairo_i8x8, int8x8_t)
921__packed_pair_oo8(ppairo_u8x8, uint8x8_t)
922__packed_pair_ee4(ppaire_i16x4, int16x4_t)
923__packed_pair_ee4(ppaire_u16x4, uint16x4_t)
924__packed_pair_eo4(ppaireo_i16x4, int16x4_t)
925__packed_pair_eo4(ppaireo_u16x4, uint16x4_t)
926__packed_pair_oe4(ppairoe_i16x4, int16x4_t)
927__packed_pair_oe4(ppairoe_u16x4, uint16x4_t)
928__packed_pair_oo4(ppairo_i16x4, int16x4_t)
929__packed_pair_oo4(ppairo_u16x4, uint16x4_t)
930
931/* Packed Narrowing Zip (32-bit) */
936
937/* Packed Narrowing Zip (64-bit) */
944__packed_nziph2(pnziph_i16x4, int16x4_t, int32x2_t)
946
947/* Packed Averaging Addition and Subtraction (32-bit) */
948__packed_binary_builtin(paadd_i8x4, int8x4_t, __builtin_riscv_paadd_i8x4)
949__packed_binary_builtin(paadd_i16x2, int16x2_t, __builtin_riscv_paadd_i16x2)
950__packed_binary_builtin(paaddu_u8x4, uint8x4_t, __builtin_riscv_paaddu_u8x4)
951__packed_binary_builtin(paaddu_u16x2, uint16x2_t, __builtin_riscv_paaddu_u16x2)
952__packed_binary_builtin(pasub_i8x4, int8x4_t, __builtin_riscv_pasub_i8x4)
953__packed_binary_builtin(pasub_i16x2, int16x2_t, __builtin_riscv_pasub_i16x2)
954__packed_binary_builtin(pasubu_u8x4, uint8x4_t, __builtin_riscv_pasubu_u8x4)
955__packed_binary_builtin(pasubu_u16x2, uint16x2_t, __builtin_riscv_pasubu_u16x2)
956
957/* Packed Averaging Addition and Subtraction (64-bit) */
958__packed_binary_builtin(paadd_i8x8, int8x8_t, __builtin_riscv_paadd_i8x8)
959__packed_binary_builtin(paadd_i16x4, int16x4_t, __builtin_riscv_paadd_i16x4)
960__packed_binary_builtin(paadd_i32x2, int32x2_t, __builtin_riscv_paadd_i32x2)
961__packed_binary_builtin(paaddu_u8x8, uint8x8_t, __builtin_riscv_paaddu_u8x8)
962__packed_binary_builtin(paaddu_u16x4, uint16x4_t, __builtin_riscv_paaddu_u16x4)
963__packed_binary_builtin(paaddu_u32x2, uint32x2_t, __builtin_riscv_paaddu_u32x2)
964__packed_binary_builtin(pasub_i8x8, int8x8_t, __builtin_riscv_pasub_i8x8)
965__packed_binary_builtin(pasub_i16x4, int16x4_t, __builtin_riscv_pasub_i16x4)
966__packed_binary_builtin(pasub_i32x2, int32x2_t, __builtin_riscv_pasub_i32x2)
967__packed_binary_builtin(pasubu_u8x8, uint8x8_t, __builtin_riscv_pasubu_u8x8)
968__packed_binary_builtin(pasubu_u16x4, uint16x4_t, __builtin_riscv_pasubu_u16x4)
969__packed_binary_builtin(pasubu_u32x2, uint32x2_t, __builtin_riscv_pasubu_u32x2)
970
971/* Packed Absolute Value and Absolute Difference (32-bit) */
974__packed_binary_builtin_cast(pabd_i8x4, int8x4_t, uint8x4_t, __builtin_riscv_pabd_i8x4)
975__packed_binary_builtin_cast(pabd_i16x2, int16x2_t, uint16x2_t, __builtin_riscv_pabd_i16x2)
976__packed_binary_builtin_cast(pabdu_u8x4, uint8x4_t, uint8x4_t, __builtin_riscv_pabdu_u8x4)
977__packed_binary_builtin_cast(pabdu_u16x2, uint16x2_t, uint16x2_t, __builtin_riscv_pabdu_u16x2)
978
979/* Packed Absolute Value and Absolute Difference (64-bit) */
982__packed_binary_builtin_cast(pabd_i8x8, int8x8_t, uint8x8_t, __builtin_riscv_pabd_i8x8)
983__packed_binary_builtin_cast(pabd_i16x4, int16x4_t, uint16x4_t, __builtin_riscv_pabd_i16x4)
984__packed_binary_builtin_cast(pabdu_u8x8, uint8x8_t, uint8x8_t, __builtin_riscv_pabdu_u8x8)
985__packed_binary_builtin_cast(pabdu_u16x4, uint16x4_t, uint16x4_t, __builtin_riscv_pabdu_u16x4)
986
987/* Packed Reduction Sum (32-bit) */
988__packed_reduction(predsum_i8x4_i32, int32_t, int8x4_t, __builtin_riscv_predsum_i8x4_i32)
989__packed_reduction(predsumu_u8x4_u32, uint32_t, uint8x4_t, __builtin_riscv_predsumu_u8x4_u32)
990__packed_reduction(predsum_i16x2_i32, int32_t, int16x2_t, __builtin_riscv_predsum_i16x2_i32)
991__packed_reduction(predsumu_u16x2_u32, uint32_t, uint16x2_t, __builtin_riscv_predsumu_u16x2_u32)
992
993/* Packed Reduction Sum (64-bit) */
994__packed_reduction(predsum_i8x8_i32, int32_t, int8x8_t, __builtin_riscv_predsum_i8x8_i32)
995__packed_reduction(predsumu_u8x8_u32, uint32_t, uint8x8_t, __builtin_riscv_predsumu_u8x8_u32)
996__packed_reduction(predsum_i16x4_i32, int32_t, int16x4_t, __builtin_riscv_predsum_i16x4_i32)
997__packed_reduction(predsumu_u16x4_u32, uint32_t, uint16x4_t, __builtin_riscv_predsumu_u16x4_u32)
998__packed_reduction(predsum_i8x8_i64, int64_t, int8x8_t, __builtin_riscv_predsum_i8x8_i64)
999__packed_reduction(predsumu_u8x8_u64, uint64_t, uint8x8_t, __builtin_riscv_predsumu_u8x8_u64)
1000__packed_reduction(predsum_i16x4_i64, int64_t, int16x4_t, __builtin_riscv_predsum_i16x4_i64)
1001__packed_reduction(predsumu_u16x4_u64, uint64_t, uint16x4_t, __builtin_riscv_predsumu_u16x4_u64)
1002__packed_reduction(predsum_i32x2_i64, int64_t, int32x2_t, __builtin_riscv_predsum_i32x2_i64)
1003__packed_reduction(predsumu_u32x2_u64, uint64_t, uint32x2_t, __builtin_riscv_predsumu_u32x2_u64)
1004
1005/* Packed Merge (32-bit) */
1006__packed_merge_builtin(pmerge_u8x4, uint8x4_t, uint8x4_t, __builtin_riscv_pmerge_u8x4)
1007__packed_merge_builtin(pmerge_i8x4, int8x4_t, uint8x4_t, __builtin_riscv_pmerge_u8x4)
1008__packed_merge_builtin(pmerge_u16x2, uint16x2_t, uint16x2_t, __builtin_riscv_pmerge_u16x2)
1009__packed_merge_builtin(pmerge_i16x2, int16x2_t, uint16x2_t, __builtin_riscv_pmerge_u16x2)
1010
1011/* Packed Merge (64-bit) */
1012__packed_merge_builtin(pmerge_u8x8, uint8x8_t, uint8x8_t, __builtin_riscv_pmerge_u8x8)
1013__packed_merge_builtin(pmerge_i8x8, int8x8_t, uint8x8_t, __builtin_riscv_pmerge_u8x8)
1014__packed_merge_builtin(pmerge_u16x4, uint16x4_t, uint16x4_t, __builtin_riscv_pmerge_u16x4)
1015__packed_merge_builtin(pmerge_i16x4, int16x4_t, uint16x4_t, __builtin_riscv_pmerge_u16x4)
1016__packed_merge_builtin(pmerge_u32x2, uint32x2_t, uint32x2_t, __builtin_riscv_pmerge_u32x2)
1017__packed_merge_builtin(pmerge_i32x2, int32x2_t, uint32x2_t, __builtin_riscv_pmerge_u32x2)
1018
1019/* Packed Multiply High (32-bit) */
1020__packed_binary_builtin(pmulh_i16x2, int16x2_t, __builtin_riscv_pmulh_i16x2)
1021__packed_binary_builtin(pmulhr_i16x2, int16x2_t, __builtin_riscv_pmulhr_i16x2)
1022__packed_binary_builtin(pmulhu_u16x2, uint16x2_t, __builtin_riscv_pmulhu_u16x2)
1023__packed_binary_builtin(pmulhru_u16x2, uint16x2_t, __builtin_riscv_pmulhru_u16x2)
1024__packed_binary_builtin_mixed(pmulhsu_i16x2, int16x2_t, int16x2_t, uint16x2_t, __builtin_riscv_pmulhsu_i16x2)
1025__packed_binary_builtin_mixed(pmulhrsu_i16x2, int16x2_t, int16x2_t, uint16x2_t, __builtin_riscv_pmulhrsu_i16x2)
1026
1027/* Packed Multiply High Accumulate (32-bit) */
1028__packed_ternary_builtin(pmhacc_i16x2, int16x2_t, __builtin_riscv_pmhacc_i16x2)
1029__packed_ternary_builtin(pmhracc_i16x2, int16x2_t, __builtin_riscv_pmhracc_i16x2)
1030__packed_ternary_builtin(pmhaccu_u16x2, uint16x2_t, __builtin_riscv_pmhaccu_u16x2)
1031__packed_ternary_builtin(pmhraccu_u16x2, uint16x2_t, __builtin_riscv_pmhraccu_u16x2)
1032__packed_ternary_builtin_mixed(pmhaccsu_i16x2, int16x2_t, int16x2_t, uint16x2_t, __builtin_riscv_pmhaccsu_i16x2)
1033__packed_ternary_builtin_mixed(pmhraccsu_i16x2, int16x2_t, int16x2_t, uint16x2_t, __builtin_riscv_pmhraccsu_i16x2)
1034
1035/* Packed Multiply High (64-bit) */
1036__packed_binary_builtin(pmulh_i16x4, int16x4_t, __builtin_riscv_pmulh_i16x4)
1037__packed_binary_builtin(pmulh_i32x2, int32x2_t, __builtin_riscv_pmulh_i32x2)
1038__packed_binary_builtin(pmulhr_i16x4, int16x4_t, __builtin_riscv_pmulhr_i16x4)
1039__packed_binary_builtin(pmulhr_i32x2, int32x2_t, __builtin_riscv_pmulhr_i32x2)
1040__packed_binary_builtin(pmulhu_u16x4, uint16x4_t, __builtin_riscv_pmulhu_u16x4)
1041__packed_binary_builtin(pmulhu_u32x2, uint32x2_t, __builtin_riscv_pmulhu_u32x2)
1042__packed_binary_builtin(pmulhru_u16x4, uint16x4_t, __builtin_riscv_pmulhru_u16x4)
1043__packed_binary_builtin(pmulhru_u32x2, uint32x2_t, __builtin_riscv_pmulhru_u32x2)
1044__packed_binary_builtin_mixed(pmulhsu_i16x4, int16x4_t, int16x4_t, uint16x4_t, __builtin_riscv_pmulhsu_i16x4)
1045__packed_binary_builtin_mixed(pmulhsu_i32x2, int32x2_t, int32x2_t, uint32x2_t, __builtin_riscv_pmulhsu_i32x2)
1046__packed_binary_builtin_mixed(pmulhrsu_i16x4, int16x4_t, int16x4_t, uint16x4_t, __builtin_riscv_pmulhrsu_i16x4)
1047__packed_binary_builtin_mixed(pmulhrsu_i32x2, int32x2_t, int32x2_t, uint32x2_t, __builtin_riscv_pmulhrsu_i32x2)
1048
1049/* Packed Multiply High Accumulate (64-bit) */
1050__packed_ternary_builtin(pmhacc_i16x4, int16x4_t, __builtin_riscv_pmhacc_i16x4)
1051__packed_ternary_builtin(pmhacc_i32x2, int32x2_t, __builtin_riscv_pmhacc_i32x2)
1052__packed_ternary_builtin(pmhracc_i16x4, int16x4_t, __builtin_riscv_pmhracc_i16x4)
1053__packed_ternary_builtin(pmhracc_i32x2, int32x2_t, __builtin_riscv_pmhracc_i32x2)
1054__packed_ternary_builtin(pmhaccu_u16x4, uint16x4_t, __builtin_riscv_pmhaccu_u16x4)
1055__packed_ternary_builtin(pmhaccu_u32x2, uint32x2_t, __builtin_riscv_pmhaccu_u32x2)
1056__packed_ternary_builtin(pmhraccu_u16x4, uint16x4_t, __builtin_riscv_pmhraccu_u16x4)
1057__packed_ternary_builtin(pmhraccu_u32x2, uint32x2_t, __builtin_riscv_pmhraccu_u32x2)
1058__packed_ternary_builtin_mixed(pmhaccsu_i16x4, int16x4_t, int16x4_t, uint16x4_t, __builtin_riscv_pmhaccsu_i16x4)
1059__packed_ternary_builtin_mixed(pmhaccsu_i32x2, int32x2_t, int32x2_t, uint32x2_t, __builtin_riscv_pmhaccsu_i32x2)
1060__packed_ternary_builtin_mixed(pmhraccsu_i16x4, int16x4_t, int16x4_t, uint16x4_t, __builtin_riscv_pmhraccsu_i16x4)
1061__packed_ternary_builtin_mixed(pmhraccsu_i32x2, int32x2_t, int32x2_t, uint32x2_t, __builtin_riscv_pmhraccsu_i32x2)
1062
1063/* Packed Multiply High Accumulate (32-bit) */
1064__packed_ternary_builtin_mixed(pmhacc_b0_i16x2, int16x2_t, int16x2_t, int8x4_t, __builtin_riscv_pmhacc_b0_i16x2)
1065__packed_ternary_builtin_mixed(pmhacc_b1_i16x2, int16x2_t, int16x2_t, int8x4_t, __builtin_riscv_pmhacc_b1_i16x2)
1066__packed_ternary_builtin_mixed(pmhaccsu_b0_i16x2, int16x2_t, int16x2_t, uint8x4_t, __builtin_riscv_pmhaccsu_b0_i16x2)
1067__packed_ternary_builtin_mixed(pmhaccsu_b1_i16x2, int16x2_t, int16x2_t, uint8x4_t, __builtin_riscv_pmhaccsu_b1_i16x2)
1068
1069/* Packed Multiply High Accumulate (64-bit) */
1070__packed_ternary_builtin_mixed(pmhacc_b0_i16x4, int16x4_t, int16x4_t, int8x8_t, __builtin_riscv_pmhacc_b0_i16x4)
1071__packed_ternary_builtin_mixed(pmhacc_b1_i16x4, int16x4_t, int16x4_t, int8x8_t, __builtin_riscv_pmhacc_b1_i16x4)
1072__packed_ternary_builtin_mixed(pmhaccsu_b0_i16x4, int16x4_t, int16x4_t, uint8x8_t, __builtin_riscv_pmhaccsu_b0_i16x4)
1073__packed_ternary_builtin_mixed(pmhaccsu_b1_i16x4, int16x4_t, int16x4_t, uint8x8_t, __builtin_riscv_pmhaccsu_b1_i16x4)
1074__packed_ternary_builtin_mixed(pmhacc_h0_i32x2, int32x2_t, int32x2_t, int16x4_t, __builtin_riscv_pmhacc_h0_i32x2)
1075__packed_ternary_builtin_mixed(pmhacc_h1_i32x2, int32x2_t, int32x2_t, int16x4_t, __builtin_riscv_pmhacc_h1_i32x2)
1076__packed_ternary_builtin_mixed(pmhaccsu_h0_i32x2, int32x2_t, int32x2_t, uint16x4_t, __builtin_riscv_pmhaccsu_h0_i32x2)
1077__packed_ternary_builtin_mixed(pmhaccsu_h1_i32x2, int32x2_t, int32x2_t, uint16x4_t, __builtin_riscv_pmhaccsu_h1_i32x2)
1078
1079/* Packed Multiplication with Horizontal Addition (32-bit) */
1080__packed_binary_builtin_mixed(pm4add_i8x4, int32_t, int8x4_t, int8x4_t, __builtin_riscv_pm4add_i8x4)
1081__packed_binary_builtin_mixed(pm2add_i16x2, int32_t, int16x2_t, int16x2_t, __builtin_riscv_pm2add_i16x2)
1082__packed_binary_builtin_mixed(pm2add_x_i16x2, int32_t, int16x2_t, int16x2_t, __builtin_riscv_pm2add_x_i16x2)
1083__packed_binary_builtin_mixed(pm4addu_u8x4, uint32_t, uint8x4_t, uint8x4_t, __builtin_riscv_pm4addu_u8x4)
1084__packed_binary_builtin_mixed(pm2addu_u16x2, uint32_t, uint16x2_t, uint16x2_t, __builtin_riscv_pm2addu_u16x2)
1085__packed_binary_builtin_mixed(pmq2add_i16x2, int32_t, int16x2_t, int16x2_t, __builtin_riscv_pmq2add_i16x2)
1086__packed_binary_builtin_mixed(pmqr2add_i16x2, int32_t, int16x2_t, int16x2_t, __builtin_riscv_pmqr2add_i16x2)
1087__packed_binary_builtin_mixed(pm2sadd_i16x2, int32_t, int16x2_t, int16x2_t, __builtin_riscv_pm2sadd_i16x2)
1088__packed_binary_builtin_mixed(pm2sadd_x_i16x2, int32_t, int16x2_t, int16x2_t, __builtin_riscv_pm2sadd_x_i16x2)
1089__packed_binary_builtin_mixed(pm2sub_i16x2, int32_t, int16x2_t, int16x2_t, __builtin_riscv_pm2sub_i16x2)
1090__packed_binary_builtin_mixed(pm2sub_x_i16x2, int32_t, int16x2_t, int16x2_t, __builtin_riscv_pm2sub_x_i16x2)
1091__packed_binary_builtin_mixed(pm4addsu_i8x4, int32_t, int8x4_t, uint8x4_t, __builtin_riscv_pm4addsu_i8x4)
1092__packed_binary_builtin_mixed(pm2addsu_i16x2, int32_t, int16x2_t, uint16x2_t, __builtin_riscv_pm2addsu_i16x2)
1093
1094/* Packed Multiplication with Horizontal Addition (64-bit) */
1095__packed_binary_builtin_mixed(pm4add_i8x8, int32x2_t, int8x8_t, int8x8_t, __builtin_riscv_pm4add_i8x8)
1096__packed_binary_builtin_mixed(pm2add_i16x4, int32x2_t, int16x4_t, int16x4_t, __builtin_riscv_pm2add_i16x4)
1097__packed_binary_builtin_mixed(pm2add_x_i16x4, int32x2_t, int16x4_t, int16x4_t, __builtin_riscv_pm2add_x_i16x4)
1098__packed_binary_builtin_mixed(pm4addu_u8x8, uint32x2_t, uint8x8_t, uint8x8_t, __builtin_riscv_pm4addu_u8x8)
1099__packed_binary_builtin_mixed(pm2addu_u16x4, uint32x2_t, uint16x4_t, uint16x4_t, __builtin_riscv_pm2addu_u16x4)
1100__packed_binary_builtin_mixed(pmq2add_i16x4, int32x2_t, int16x4_t, int16x4_t, __builtin_riscv_pmq2add_i16x4)
1101__packed_binary_builtin_mixed(pmqr2add_i16x4, int32x2_t, int16x4_t, int16x4_t, __builtin_riscv_pmqr2add_i16x4)
1102__packed_binary_builtin_mixed(pm2sadd_i16x4, int32x2_t, int16x4_t, int16x4_t, __builtin_riscv_pm2sadd_i16x4)
1103__packed_binary_builtin_mixed(pm2sadd_x_i16x4, int32x2_t, int16x4_t, int16x4_t, __builtin_riscv_pm2sadd_x_i16x4)
1104__packed_binary_builtin_mixed(pm2sub_i16x4, int32x2_t, int16x4_t, int16x4_t, __builtin_riscv_pm2sub_i16x4)
1105__packed_binary_builtin_mixed(pm2sub_x_i16x4, int32x2_t, int16x4_t, int16x4_t, __builtin_riscv_pm2sub_x_i16x4)
1106__packed_binary_builtin_mixed(pm4addsu_i8x8, int32x2_t, int8x8_t, uint8x8_t, __builtin_riscv_pm4addsu_i8x8)
1107__packed_binary_builtin_mixed(pm2addsu_i16x4, int32x2_t, int16x4_t, uint16x4_t, __builtin_riscv_pm2addsu_i16x4)
1108__packed_binary_builtin_mixed(pm2add_i32x2, int64_t, int32x2_t, int32x2_t, __builtin_riscv_pm2add_i32x2)
1109__packed_binary_builtin_mixed(pm2add_x_i32x2, int64_t, int32x2_t, int32x2_t, __builtin_riscv_pm2add_x_i32x2)
1110__packed_binary_builtin_mixed(pm2addu_u32x2, uint64_t, uint32x2_t, uint32x2_t, __builtin_riscv_pm2addu_u32x2)
1111__packed_binary_builtin_mixed(pmq2add_i32x2, int64_t, int32x2_t, int32x2_t, __builtin_riscv_pmq2add_i32x2)
1112__packed_binary_builtin_mixed(pm2sub_i32x2, int64_t, int32x2_t, int32x2_t, __builtin_riscv_pm2sub_i32x2)
1113__packed_binary_builtin_mixed(pm2sub_x_i32x2, int64_t, int32x2_t, int32x2_t, __builtin_riscv_pm2sub_x_i32x2)
1114__packed_binary_builtin_mixed(pm2addsu_i32x2, int64_t, int32x2_t, uint32x2_t, __builtin_riscv_pm2addsu_i32x2)
1115__packed_binary_builtin_mixed(pmqr2add_i32x2, int64_t, int32x2_t, int32x2_t, __builtin_riscv_pmqr2add_i32x2)
1116__packed_binary_builtin_mixed(pm4add_i16x4, int64_t, int16x4_t, int16x4_t, __builtin_riscv_pm4add_i16x4)
1117__packed_binary_builtin_mixed(pm4addu_u16x4, uint64_t, uint16x4_t, uint16x4_t, __builtin_riscv_pm4addu_u16x4)
1118__packed_binary_builtin_mixed(pm4addsu_i16x4, int64_t, int16x4_t, uint16x4_t, __builtin_riscv_pm4addsu_i16x4)
1119
1120/* Packed Absolute Difference Sum (32-bit) */
1121__packed_abdsum(pabdsumu_u8x4_u32, uint32_t, uint8x4_t, __builtin_riscv_pabdsumu_u8x4_u32)
1122__packed_ternary_builtin_cast(pabdsumau_u8x4_u32, uint32_t, uint8x4_t, __builtin_riscv_pabdsumau_u8x4_u32)
1123
1124/* Packed Absolute Difference Sum (64-bit) */
1125__packed_abdsum(pabdsumu_u8x8_u32, uint32_t, uint8x8_t, __builtin_riscv_pabdsumu_u8x8_u32)
1126__packed_abdsum(pabdsumu_u8x8_u64, uint64_t, uint8x8_t, __builtin_riscv_pabdsumu_u8x8_u64)
1127__packed_ternary_builtin_cast(pabdsumau_u8x8_u32, uint32_t, uint8x8_t, __builtin_riscv_pabdsumau_u8x8_u32)
1128__packed_ternary_builtin_cast(pabdsumau_u8x8_u64, uint64_t, uint8x8_t, __builtin_riscv_pabdsumau_u8x8_u64)
1129
1130/* Packed Saturating Absolute Value (32-bit) */
1131__packed_unary_builtin(psabs_i8x4, int8x4_t, __builtin_riscv_psabs_i8x4)
1132__packed_unary_builtin(psabs_i16x2, int16x2_t, __builtin_riscv_psabs_i16x2)
1133
1134/* Packed Saturating Absolute Value (64-bit) */
1135__packed_unary_builtin(psabs_i8x8, int8x8_t, __builtin_riscv_psabs_i8x8)
1136__packed_unary_builtin(psabs_i16x4, int16x4_t, __builtin_riscv_psabs_i16x4)
1137
1138/* Packed Sign and Zero Extend (32-bit) */
1139__packed_unary_builtin(psext_b_i16x2, int16x2_t, __builtin_riscv_psext_b_i16x2)
1140__packed_unary_builtin(pzext_b_u16x2, uint16x2_t, __builtin_riscv_pzext_b_u16x2)
1141
1142/* Packed Sign and Zero Extend (64-bit) */
1143__packed_unary_builtin(psext_b_i16x4, int16x4_t, __builtin_riscv_psext_b_i16x4)
1144__packed_unary_builtin(psext_b_i32x2, int32x2_t, __builtin_riscv_psext_b_i32x2)
1145__packed_unary_builtin(psext_h_i32x2, int32x2_t, __builtin_riscv_psext_h_i32x2)
1146__packed_unary_builtin(pzext_b_u16x4, uint16x4_t, __builtin_riscv_pzext_b_u16x4)
1147__packed_unary_builtin(pzext_h_u32x2, uint32x2_t, __builtin_riscv_pzext_h_u32x2)
1148
1149/* Packed Widening Unzip (32-bit) */
1150__packed_wunzip_ext(pwunzipe_i16x2, int16x2_t, int8x4_t,
1151 __riscv_psext_b_i16x2)
1152__packed_wunzip_shift(pwunzipo_i16x2, int16x2_t, int8x4_t, >>, 8)
1153__packed_wunzip_ext(pwunzipue_u16x2, uint16x2_t, uint8x4_t,
1154 __riscv_pzext_b_u16x2)
1155__packed_wunzip_shift(pwunzipuo_u16x2, uint16x2_t, uint8x4_t, >>, 8)
1156__packed_wunzip_shift(pwunziphe_i16x2, int16x2_t, int8x4_t, <<, 8)
1157__packed_wunzip_shift(pwunziphe_u16x2, uint16x2_t, uint8x4_t, <<, 8)
1158__packed_wunzip_odd_hi(pwunzipho_i16x2, int16x2_t, int8x4_t,
1159 __riscv_pnziph_i8x4)
1161 __riscv_pnziph_u8x4)
1162
1163/* Packed Widening Unzip (64-bit) */
1164__packed_wunzip_ext(pwunzipe_i16x4, int16x4_t, int8x8_t,
1165 __riscv_psext_b_i16x4)
1166__packed_wunzip_shift(pwunzipo_i16x4, int16x4_t, int8x8_t, >>, 8)
1167__packed_wunzip_ext(pwunzipue_u16x4, uint16x4_t, uint8x8_t,
1168 __riscv_pzext_b_u16x4)
1169__packed_wunzip_shift(pwunzipuo_u16x4, uint16x4_t, uint8x8_t, >>, 8)
1170__packed_wunzip_ext(pwunzipe_i32x2, int32x2_t, int16x4_t,
1171 __riscv_psext_h_i32x2)
1172__packed_wunzip_shift(pwunzipo_i32x2, int32x2_t, int16x4_t, >>, 16)
1173__packed_wunzip_ext(pwunzipue_u32x2, uint32x2_t, uint16x4_t,
1174 __riscv_pzext_h_u32x2)
1175__packed_wunzip_shift(pwunzipuo_u32x2, uint32x2_t, uint16x4_t, >>, 16)
1176__packed_wunzip_shift(pwunziphe_i16x4, int16x4_t, int8x8_t, <<, 8)
1177__packed_wunzip_odd_hi(pwunzipho_i16x4, int16x4_t, int8x8_t,
1178 __riscv_pnziph_i8x8)
1179__packed_wunzip_shift(pwunziphe_u16x4, uint16x4_t, uint8x8_t, <<, 8)
1181 __riscv_pnziph_u8x8)
1182__packed_wunzip_shift(pwunziphe_i32x2, int32x2_t, int16x4_t, <<, 16)
1184 __riscv_pnziph_i16x4)
1185__packed_wunzip_shift(pwunziphe_u32x2, uint32x2_t, uint16x4_t, <<, 16)
1187 __riscv_pnziph_u16x4)
1188
1189/* Packed "Q-format" Multiplication (32-bit) */
1190__packed_binary_builtin(pmulq_i16x2, int16x2_t, __builtin_riscv_pmulq_i16x2)
1191__packed_binary_builtin(pmulqr_i16x2, int16x2_t, __builtin_riscv_pmulqr_i16x2)
1192
1193/* Packed "Q-format" Multiplication (64-bit) */
1194__packed_binary_builtin(pmulq_i16x4, int16x4_t, __builtin_riscv_pmulq_i16x4)
1195__packed_binary_builtin(pmulqr_i16x4, int16x4_t, __builtin_riscv_pmulqr_i16x4)
1196__packed_binary_builtin(pmulq_i32x2, int32x2_t, __builtin_riscv_pmulq_i32x2)
1197__packed_binary_builtin(pmulqr_i32x2, int32x2_t, __builtin_riscv_pmulqr_i32x2)
1198
1199/* Packed Multiply Parts (32-bit) */
1200__packed_binary_builtin_mixed(pmul_b00_i16x2, int16x2_t, int8x4_t, int8x4_t, __builtin_riscv_pmul_b00_i16x2)
1201__packed_binary_builtin_mixed(pmul_b01_i16x2, int16x2_t, int8x4_t, int8x4_t, __builtin_riscv_pmul_b01_i16x2)
1202__packed_binary_builtin_mixed(pmul_b11_i16x2, int16x2_t, int8x4_t, int8x4_t, __builtin_riscv_pmul_b11_i16x2)
1203__packed_binary_builtin_mixed(pmulu_b00_u16x2, uint16x2_t, uint8x4_t, uint8x4_t, __builtin_riscv_pmulu_b00_u16x2)
1204__packed_binary_builtin_mixed(pmulu_b01_u16x2, uint16x2_t, uint8x4_t, uint8x4_t, __builtin_riscv_pmulu_b01_u16x2)
1205__packed_binary_builtin_mixed(pmulu_b11_u16x2, uint16x2_t, uint8x4_t, uint8x4_t, __builtin_riscv_pmulu_b11_u16x2)
1206__packed_binary_builtin_mixed(pmulsu_b00_i16x2, int16x2_t, int8x4_t, uint8x4_t, __builtin_riscv_pmulsu_b00_i16x2)
1207__packed_binary_builtin_mixed(pmulsu_b11_i16x2, int16x2_t, int8x4_t, uint8x4_t, __builtin_riscv_pmulsu_b11_i16x2)
1208__packed_binary_builtin_mixed(mul_h00_i32, int32_t, int16x2_t, int16x2_t, __builtin_riscv_mul_h00_i32)
1209__packed_binary_builtin_mixed(mul_h01_i32, int32_t, int16x2_t, int16x2_t, __builtin_riscv_mul_h01_i32)
1210__packed_binary_builtin_mixed(mul_h11_i32, int32_t, int16x2_t, int16x2_t, __builtin_riscv_mul_h11_i32)
1211__packed_binary_builtin_mixed(mulu_h00_u32, uint32_t, uint16x2_t, uint16x2_t, __builtin_riscv_mulu_h00_u32)
1212__packed_binary_builtin_mixed(mulu_h01_u32, uint32_t, uint16x2_t, uint16x2_t, __builtin_riscv_mulu_h01_u32)
1213__packed_binary_builtin_mixed(mulu_h11_u32, uint32_t, uint16x2_t, uint16x2_t, __builtin_riscv_mulu_h11_u32)
1214__packed_binary_builtin_mixed(mulsu_h00_i32, int32_t, int16x2_t, uint16x2_t, __builtin_riscv_mulsu_h00_i32)
1215__packed_binary_builtin_mixed(mulsu_h11_i32, int32_t, int16x2_t, uint16x2_t, __builtin_riscv_mulsu_h11_i32)
1216
1217/* Packed Multiply Parts (64-bit) */
1218__packed_binary_builtin_mixed(pmul_b00_i16x4, int16x4_t, int8x8_t, int8x8_t, __builtin_riscv_pmul_b00_i16x4)
1219__packed_binary_builtin_mixed(pmul_b01_i16x4, int16x4_t, int8x8_t, int8x8_t, __builtin_riscv_pmul_b01_i16x4)
1220__packed_binary_builtin_mixed(pmul_b11_i16x4, int16x4_t, int8x8_t, int8x8_t, __builtin_riscv_pmul_b11_i16x4)
1221__packed_binary_builtin_mixed(pmulu_b00_u16x4, uint16x4_t, uint8x8_t, uint8x8_t, __builtin_riscv_pmulu_b00_u16x4)
1222__packed_binary_builtin_mixed(pmulu_b01_u16x4, uint16x4_t, uint8x8_t, uint8x8_t, __builtin_riscv_pmulu_b01_u16x4)
1223__packed_binary_builtin_mixed(pmulu_b11_u16x4, uint16x4_t, uint8x8_t, uint8x8_t, __builtin_riscv_pmulu_b11_u16x4)
1224__packed_binary_builtin_mixed(pmulsu_b00_i16x4, int16x4_t, int8x8_t, uint8x8_t, __builtin_riscv_pmulsu_b00_i16x4)
1225__packed_binary_builtin_mixed(pmulsu_b11_i16x4, int16x4_t, int8x8_t, uint8x8_t, __builtin_riscv_pmulsu_b11_i16x4)
1226__packed_binary_builtin_mixed(pmul_h00_i32x2, int32x2_t, int16x4_t, int16x4_t, __builtin_riscv_pmul_h00_i32x2)
1227__packed_binary_builtin_mixed(pmul_h01_i32x2, int32x2_t, int16x4_t, int16x4_t, __builtin_riscv_pmul_h01_i32x2)
1228__packed_binary_builtin_mixed(pmul_h11_i32x2, int32x2_t, int16x4_t, int16x4_t, __builtin_riscv_pmul_h11_i32x2)
1229__packed_binary_builtin_mixed(pmulu_h00_u32x2, uint32x2_t, uint16x4_t, uint16x4_t, __builtin_riscv_pmulu_h00_u32x2)
1230__packed_binary_builtin_mixed(pmulu_h01_u32x2, uint32x2_t, uint16x4_t, uint16x4_t, __builtin_riscv_pmulu_h01_u32x2)
1231__packed_binary_builtin_mixed(pmulu_h11_u32x2, uint32x2_t, uint16x4_t, uint16x4_t, __builtin_riscv_pmulu_h11_u32x2)
1232__packed_binary_builtin_mixed(pmulsu_h00_i32x2, int32x2_t, int16x4_t, uint16x4_t, __builtin_riscv_pmulsu_h00_i32x2)
1233__packed_binary_builtin_mixed(pmulsu_h11_i32x2, int32x2_t, int16x4_t, uint16x4_t, __builtin_riscv_pmulsu_h11_i32x2)
1234__packed_binary_builtin_mixed(mul_w00_i64, int64_t, int32x2_t, int32x2_t, __builtin_riscv_mul_w00_i64)
1235__packed_binary_builtin_mixed(mul_w01_i64, int64_t, int32x2_t, int32x2_t, __builtin_riscv_mul_w01_i64)
1236__packed_binary_builtin_mixed(mul_w11_i64, int64_t, int32x2_t, int32x2_t, __builtin_riscv_mul_w11_i64)
1237__packed_binary_builtin_mixed(mulu_w00_u64, uint64_t, uint32x2_t, uint32x2_t, __builtin_riscv_mulu_w00_u64)
1238__packed_binary_builtin_mixed(mulu_w01_u64, uint64_t, uint32x2_t, uint32x2_t, __builtin_riscv_mulu_w01_u64)
1239__packed_binary_builtin_mixed(mulu_w11_u64, uint64_t, uint32x2_t, uint32x2_t, __builtin_riscv_mulu_w11_u64)
1240__packed_binary_builtin_mixed(mulsu_w00_i64, int64_t, int32x2_t, uint32x2_t, __builtin_riscv_mulsu_w00_i64)
1241__packed_binary_builtin_mixed(mulsu_w11_i64, int64_t, int32x2_t, uint32x2_t, __builtin_riscv_mulsu_w11_i64)
1242
1243/* Packed Multiply High Parts (32-bit) */
1244__packed_binary_builtin_mixed(pmulh_b0_i16x2, int16x2_t, int16x2_t, int8x4_t, __builtin_riscv_pmulh_b0_i16x2)
1245__packed_binary_builtin_mixed(pmulh_b1_i16x2, int16x2_t, int16x2_t, int8x4_t, __builtin_riscv_pmulh_b1_i16x2)
1246__packed_binary_builtin_mixed(pmulhsu_b0_i16x2, int16x2_t, int16x2_t, uint8x4_t, __builtin_riscv_pmulhsu_b0_i16x2)
1247__packed_binary_builtin_mixed(pmulhsu_b1_i16x2, int16x2_t, int16x2_t, uint8x4_t, __builtin_riscv_pmulhsu_b1_i16x2)
1248__packed_binary_builtin_mixed(mulh_h0_i32, int32_t, int32_t, int16x2_t, __builtin_riscv_mulh_h0_i32)
1249__packed_binary_builtin_mixed(mulh_h1_i32, int32_t, int32_t, int16x2_t, __builtin_riscv_mulh_h1_i32)
1250__packed_binary_builtin_mixed(mulhsu_h0_i32, int32_t, int32_t, uint16x2_t, __builtin_riscv_mulhsu_h0_i32)
1251__packed_binary_builtin_mixed(mulhsu_h1_i32, int32_t, int32_t, uint16x2_t, __builtin_riscv_mulhsu_h1_i32)
1252
1253/* Packed Multiply High Parts (64-bit) */
1254__packed_binary_builtin_mixed(pmulh_b0_i16x4, int16x4_t, int16x4_t, int8x8_t, __builtin_riscv_pmulh_b0_i16x4)
1255__packed_binary_builtin_mixed(pmulh_b1_i16x4, int16x4_t, int16x4_t, int8x8_t, __builtin_riscv_pmulh_b1_i16x4)
1256__packed_binary_builtin_mixed(pmulhsu_b0_i16x4, int16x4_t, int16x4_t, uint8x8_t, __builtin_riscv_pmulhsu_b0_i16x4)
1257__packed_binary_builtin_mixed(pmulhsu_b1_i16x4, int16x4_t, int16x4_t, uint8x8_t, __builtin_riscv_pmulhsu_b1_i16x4)
1258__packed_binary_builtin_mixed(pmulh_h0_i32x2, int32x2_t, int32x2_t, int16x4_t, __builtin_riscv_pmulh_h0_i32x2)
1259__packed_binary_builtin_mixed(pmulh_h1_i32x2, int32x2_t, int32x2_t, int16x4_t, __builtin_riscv_pmulh_h1_i32x2)
1260__packed_binary_builtin_mixed(pmulhsu_h0_i32x2, int32x2_t, int32x2_t, uint16x4_t, __builtin_riscv_pmulhsu_h0_i32x2)
1261__packed_binary_builtin_mixed(pmulhsu_h1_i32x2, int32x2_t, int32x2_t, uint16x4_t, __builtin_riscv_pmulhsu_h1_i32x2)
1262
1263/* Packed "Q-format" Multiply Parts Accumulate (32-bit) */
1264__packed_ternary_builtin_cast(mqacc_h00_i32, int, int16x2_t, __builtin_riscv_mqacc_h00_i32)
1265__packed_ternary_builtin_cast(mqacc_h01_i32, int, int16x2_t, __builtin_riscv_mqacc_h01_i32)
1266__packed_ternary_builtin_cast(mqacc_h11_i32, int, int16x2_t, __builtin_riscv_mqacc_h11_i32)
1267__packed_ternary_builtin_cast(mqracc_h00_i32, int, int16x2_t, __builtin_riscv_mqracc_h00_i32)
1268__packed_ternary_builtin_cast(mqracc_h01_i32, int, int16x2_t, __builtin_riscv_mqracc_h01_i32)
1269__packed_ternary_builtin_cast(mqracc_h11_i32, int, int16x2_t, __builtin_riscv_mqracc_h11_i32)
1270
1271/* Packed "Q-format" Multiply Parts Accumulate (64-bit) */
1272__packed_ternary_builtin_cast(pmqacc_h00_i32x2, int32x2_t, int16x4_t, __builtin_riscv_pmqacc_h00_i32x2)
1273__packed_ternary_builtin_cast(pmqacc_h01_i32x2, int32x2_t, int16x4_t, __builtin_riscv_pmqacc_h01_i32x2)
1274__packed_ternary_builtin_cast(pmqacc_h11_i32x2, int32x2_t, int16x4_t, __builtin_riscv_pmqacc_h11_i32x2)
1275__packed_ternary_builtin_cast(pmqracc_h00_i32x2, int32x2_t, int16x4_t, __builtin_riscv_pmqracc_h00_i32x2)
1276__packed_ternary_builtin_cast(pmqracc_h01_i32x2, int32x2_t, int16x4_t, __builtin_riscv_pmqracc_h01_i32x2)
1277__packed_ternary_builtin_cast(pmqracc_h11_i32x2, int32x2_t, int16x4_t, __builtin_riscv_pmqracc_h11_i32x2)
1278__packed_ternary_builtin_cast(mqacc_w00_i64, int64_t, int32x2_t, __builtin_riscv_mqacc_w00_i64)
1279__packed_ternary_builtin_cast(mqacc_w01_i64, int64_t, int32x2_t, __builtin_riscv_mqacc_w01_i64)
1280__packed_ternary_builtin_cast(mqacc_w11_i64, int64_t, int32x2_t, __builtin_riscv_mqacc_w11_i64)
1281__packed_ternary_builtin_cast(mqracc_w00_i64, int64_t, int32x2_t, __builtin_riscv_mqracc_w00_i64)
1282__packed_ternary_builtin_cast(mqracc_w01_i64, int64_t, int32x2_t, __builtin_riscv_mqracc_w01_i64)
1283__packed_ternary_builtin_cast(mqracc_w11_i64, int64_t, int32x2_t, __builtin_riscv_mqracc_w11_i64)
1284
1285/* Packed Multiply Parts Accumulate (32-bit) */
1286__packed_ternary_builtin_mixed(macc_h00_i32, int32_t, int16x2_t, int16x2_t, __builtin_riscv_macc_h00_i32)
1287__packed_ternary_builtin_mixed(macc_h01_i32, int32_t, int16x2_t, int16x2_t, __builtin_riscv_macc_h01_i32)
1288__packed_ternary_builtin_mixed(macc_h11_i32, int32_t, int16x2_t, int16x2_t, __builtin_riscv_macc_h11_i32)
1289__packed_ternary_builtin_mixed(maccu_h00_u32, uint32_t, uint16x2_t, uint16x2_t, __builtin_riscv_maccu_h00_u32)
1290__packed_ternary_builtin_mixed(maccu_h01_u32, uint32_t, uint16x2_t, uint16x2_t, __builtin_riscv_maccu_h01_u32)
1291__packed_ternary_builtin_mixed(maccu_h11_u32, uint32_t, uint16x2_t, uint16x2_t, __builtin_riscv_maccu_h11_u32)
1292__packed_ternary_builtin_mixed(maccsu_h00_i32, int32_t, int16x2_t, uint16x2_t, __builtin_riscv_maccsu_h00_i32)
1293__packed_ternary_builtin_mixed(maccsu_h11_i32, int32_t, int16x2_t, uint16x2_t, __builtin_riscv_maccsu_h11_i32)
1294
1295/* Packed Multiply Parts Accumulate (64-bit) */
1296__packed_ternary_builtin_mixed(pmacc_h00_i32x2, int32x2_t, int16x4_t, int16x4_t, __builtin_riscv_pmacc_h00_i32x2)
1297__packed_ternary_builtin_mixed(pmacc_h01_i32x2, int32x2_t, int16x4_t, int16x4_t, __builtin_riscv_pmacc_h01_i32x2)
1298__packed_ternary_builtin_mixed(pmacc_h11_i32x2, int32x2_t, int16x4_t, int16x4_t, __builtin_riscv_pmacc_h11_i32x2)
1299__packed_ternary_builtin_mixed(pmaccu_h00_u32x2, uint32x2_t, uint16x4_t, uint16x4_t, __builtin_riscv_pmaccu_h00_u32x2)
1300__packed_ternary_builtin_mixed(pmaccu_h01_u32x2, uint32x2_t, uint16x4_t, uint16x4_t, __builtin_riscv_pmaccu_h01_u32x2)
1301__packed_ternary_builtin_mixed(pmaccu_h11_u32x2, uint32x2_t, uint16x4_t, uint16x4_t, __builtin_riscv_pmaccu_h11_u32x2)
1302__packed_ternary_builtin_mixed(pmaccsu_h00_i32x2, int32x2_t, int16x4_t, uint16x4_t, __builtin_riscv_pmaccsu_h00_i32x2)
1303__packed_ternary_builtin_mixed(pmaccsu_h11_i32x2, int32x2_t, int16x4_t, uint16x4_t, __builtin_riscv_pmaccsu_h11_i32x2)
1304__packed_ternary_builtin_mixed(macc_w00_i64, int64_t, int32x2_t, int32x2_t, __builtin_riscv_macc_w00_i64)
1305__packed_ternary_builtin_mixed(macc_w01_i64, int64_t, int32x2_t, int32x2_t, __builtin_riscv_macc_w01_i64)
1306__packed_ternary_builtin_mixed(macc_w11_i64, int64_t, int32x2_t, int32x2_t, __builtin_riscv_macc_w11_i64)
1307__packed_ternary_builtin_mixed(maccu_w00_u64, uint64_t, uint32x2_t, uint32x2_t, __builtin_riscv_maccu_w00_u64)
1308__packed_ternary_builtin_mixed(maccu_w01_u64, uint64_t, uint32x2_t, uint32x2_t, __builtin_riscv_maccu_w01_u64)
1309__packed_ternary_builtin_mixed(maccu_w11_u64, uint64_t, uint32x2_t, uint32x2_t, __builtin_riscv_maccu_w11_u64)
1310__packed_ternary_builtin_mixed(maccsu_w00_i64, int64_t, int32x2_t, uint32x2_t, __builtin_riscv_maccsu_w00_i64)
1311__packed_ternary_builtin_mixed(maccsu_w11_i64, int64_t, int32x2_t, uint32x2_t, __builtin_riscv_maccsu_w11_i64)
1312
1313/* Packed Narrowing Clip Pair (32-bit) */
1314__packed_binary_builtin_cast(pnclipp_i8x4, int16x2_t, int8x4_t, __builtin_riscv_pnclipp_i8x4)
1315__packed_binary_builtin_cast(pnclipup_u8x4, uint16x2_t, uint8x4_t, __builtin_riscv_pnclipup_u8x4)
1316__packed_binary_builtin_cast(pnclipp_i16x2, int, int16x2_t, __builtin_riscv_pnclipp_i16x2)
1317__packed_binary_builtin_cast(pnclipup_u16x2, unsigned int, uint16x2_t, __builtin_riscv_pnclipup_u16x2)
1318
1319/* Packed Narrowing Clip Pair (64-bit) */
1320__packed_binary_builtin_cast(pnclipp_i8x8, int16x4_t, int8x8_t, __builtin_riscv_pnclipp_i8x8)
1321__packed_binary_builtin_cast(pnclipup_u8x8, uint16x4_t, uint8x8_t, __builtin_riscv_pnclipup_u8x8)
1322__packed_binary_builtin_cast(pnclipp_i16x4, int32x2_t, int16x4_t, __builtin_riscv_pnclipp_i16x4)
1323__packed_binary_builtin_cast(pnclipup_u16x4, uint32x2_t, uint16x4_t, __builtin_riscv_pnclipup_u16x4)
1324__packed_binary_builtin_cast(pnclipp_i32x2, int64_t, int32x2_t, __builtin_riscv_pnclipp_i32x2)
1325__packed_binary_builtin_cast(pnclipup_u32x2, uint64_t, uint32x2_t, __builtin_riscv_pnclipup_u32x2)
1326
1327/* Packed Subvector Join */
1328__packed_concat4(pjoin2_i8x8, int8x8_t, int8x4_t)
1330__packed_concat2(pjoin2_i16x4, int16x4_t, int16x2_t)
1332
1333/* Packed Slide 1 up/down (32-bit) */
1334__packed_slide1(pslide1up_i8x4, int8x4_t, int8_t, 4, 0, 1, 2)
1335__packed_slide1(pslide1up_u8x4, uint8x4_t, uint8_t, 4, 0, 1, 2)
1336__packed_slide1(pslide1up_i16x2, int16x2_t, int16_t, 2, 0)
1337__packed_slide1(pslide1up_u16x2, uint16x2_t, uint16_t, 2, 0)
1338__packed_slide1(pslide1down_i8x4, int8x4_t, int8_t, 1, 2, 3, 4)
1339__packed_slide1(pslide1down_u8x4, uint8x4_t, uint8_t, 1, 2, 3, 4)
1340__packed_slide1(pslide1down_i16x2, int16x2_t, int16_t, 1, 2)
1341__packed_slide1(pslide1down_u16x2, uint16x2_t, uint16_t, 1, 2)
1342
1343/* Packed Slide 1 up/down (64-bit) */
1344__packed_slide1(pslide1up_i8x8, int8x8_t, int8_t, 8, 0, 1, 2, 3, 4, 5, 6)
1345__packed_slide1(pslide1up_u8x8, uint8x8_t, uint8_t, 8, 0, 1, 2, 3, 4, 5, 6)
1346__packed_slide1(pslide1up_i16x4, int16x4_t, int16_t, 4, 0, 1, 2)
1347__packed_slide1(pslide1up_u16x4, uint16x4_t, uint16_t, 4, 0, 1, 2)
1348__packed_slide1(pslide1up_i32x2, int32x2_t, int32_t, 2, 0)
1349__packed_slide1(pslide1up_u32x2, uint32x2_t, uint32_t, 2, 0)
1350__packed_slide1(pslide1down_i8x8, int8x8_t, int8_t, 1, 2, 3, 4, 5, 6, 7, 8)
1351__packed_slide1(pslide1down_u8x8, uint8x8_t, uint8_t, 1, 2, 3, 4, 5, 6, 7, 8)
1352__packed_slide1(pslide1down_i16x4, int16x4_t, int16_t, 1, 2, 3, 4)
1353__packed_slide1(pslide1down_u16x4, uint16x4_t, uint16_t, 1, 2, 3, 4)
1354__packed_slide1(pslide1down_i32x2, int32x2_t, int32_t, 1, 2)
1355__packed_slide1(pslide1down_u32x2, uint32x2_t, uint32_t, 1, 2)
1356
1357/* Packed Subvector Extract */
1362
1363/* Packed Subvector Insert */
1364static __inline__ int8x8_t __DEFAULT_FN_ATTRS
1365__riscv_pset_i8x4_i8x8(int8x8_t __v, int8x4_t __s, unsigned __idx)
1366 __attribute__((__enable_if__(__idx <= 1, "index must be a constant integer "
1367 "from 0 to 1"))) {
1368 return __idx ? __riscv_pjoin2_i8x8(
1369 __builtin_shufflevector(__v, __v, 0, 1, 2, 3), __s)
1370 : __riscv_pjoin2_i8x8(
1371 __s, __builtin_shufflevector(__v, __v, 4, 5, 6, 7));
1372}
1373static __inline__ uint8x8_t __DEFAULT_FN_ATTRS
1374__riscv_pset_u8x4_u8x8(uint8x8_t __v, uint8x4_t __s, unsigned __idx)
1375 __attribute__((__enable_if__(__idx <= 1, "index must be a constant integer "
1376 "from 0 to 1"))) {
1377 return __idx ? __riscv_pjoin2_u8x8(
1378 __builtin_shufflevector(__v, __v, 0, 1, 2, 3), __s)
1379 : __riscv_pjoin2_u8x8(
1380 __s, __builtin_shufflevector(__v, __v, 4, 5, 6, 7));
1381}
1382static __inline__ int16x4_t __DEFAULT_FN_ATTRS
1383__riscv_pset_i16x2_i16x4(int16x4_t __v, int16x2_t __s, unsigned __idx)
1384 __attribute__((__enable_if__(__idx <= 1, "index must be a constant integer "
1385 "from 0 to 1"))) {
1386 return __idx ? __riscv_pjoin2_i16x4(
1387 __builtin_shufflevector(__v, __v, 0, 1), __s)
1388 : __riscv_pjoin2_i16x4(
1389 __s, __builtin_shufflevector(__v, __v, 2, 3));
1390}
1391static __inline__ uint16x4_t __DEFAULT_FN_ATTRS
1392__riscv_pset_u16x2_u16x4(uint16x4_t __v, uint16x2_t __s, unsigned __idx)
1393 __attribute__((__enable_if__(__idx <= 1, "index must be a constant integer "
1394 "from 0 to 1"))) {
1395 return __idx ? __riscv_pjoin2_u16x4(
1396 __builtin_shufflevector(__v, __v, 0, 1), __s)
1397 : __riscv_pjoin2_u16x4(
1398 __s, __builtin_shufflevector(__v, __v, 2, 3));
1399}
1400
1401/* Packed Store (32-bit) */
1402__packed_store(pst_i8x4, int8x4_t, int8_t)
1404__packed_store(pst_i16x2, int16x2_t, int16_t)
1406
1407/* Packed Store (64-bit) */
1408__packed_store(pst_i8x8, int8x8_t, int8_t)
1410__packed_store(pst_i16x4, int16x4_t, int16_t)
1412__packed_store(pst_i32x2, int32x2_t, int32_t)
1414
1415/* Packed Element Extract (32-bit) */
1416__packed_extract(pget_i8x4_i8, int8_t, int8x4_t, 3)
1417__packed_extract(pget_u8x4_u8, uint8_t, uint8x4_t, 3)
1418__packed_extract(pget_i16x2_i16, int16_t, int16x2_t, 1)
1419__packed_extract(pget_u16x2_u16, uint16_t, uint16x2_t, 1)
1420
1421/* Packed Element Extract (64-bit) */
1422__packed_extract(pget_i8x8_i8, int8_t, int8x8_t, 7)
1423__packed_extract(pget_u8x8_u8, uint8_t, uint8x8_t, 7)
1424__packed_extract(pget_i16x4_i16, int16_t, int16x4_t, 3)
1425__packed_extract(pget_u16x4_u16, uint16_t, uint16x4_t, 3)
1426__packed_extract(pget_i32x2_i32, int32_t, int32x2_t, 1)
1427__packed_extract(pget_u32x2_u32, uint32_t, uint32x2_t, 1)
1428
1429/* Packed Load (32-bit) */
1430__packed_load(pld_i8x4, int8x4_t, int8_t)
1432__packed_load(pld_i16x2, int16x2_t, int16_t)
1434
1435/* Packed Load (64-bit) */
1436__packed_load(pld_i8x8, int8x8_t, int8_t)
1438__packed_load(pld_i16x4, int16x4_t, int16_t)
1440__packed_load(pld_i32x2, int32x2_t, int32_t)
1442
1443/* Reinterpret Casts, Packed <-> Scalar (32-bit) */
1460
1461/* Reinterpret Casts, Packed <-> Scalar (64-bit) */
1462__packed_reinterpret(u8x8_u64, uint64_t, uint8x8_t)
1463__packed_reinterpret(u16x4_u64, uint64_t, uint16x4_t)
1464__packed_reinterpret(u32x2_u64, uint64_t, uint32x2_t)
1465__packed_reinterpret(i8x8_u64, uint64_t, int8x8_t)
1466__packed_reinterpret(i16x4_u64, uint64_t, int16x4_t)
1467__packed_reinterpret(i32x2_u64, uint64_t, int32x2_t)
1468__packed_reinterpret(u8x8_i64, int64_t, uint8x8_t)
1469__packed_reinterpret(u16x4_i64, int64_t, uint16x4_t)
1470__packed_reinterpret(u32x2_i64, int64_t, uint32x2_t)
1471__packed_reinterpret(i8x8_i64, int64_t, int8x8_t)
1472__packed_reinterpret(i16x4_i64, int64_t, int16x4_t)
1473__packed_reinterpret(i32x2_i64, int64_t, int32x2_t)
1474__packed_reinterpret(u64_u8x8, uint8x8_t, uint64_t)
1475__packed_reinterpret(u64_u16x4, uint16x4_t, uint64_t)
1476__packed_reinterpret(u64_u32x2, uint32x2_t, uint64_t)
1477__packed_reinterpret(u64_i8x8, int8x8_t, uint64_t)
1478__packed_reinterpret(u64_i16x4, int16x4_t, uint64_t)
1479__packed_reinterpret(u64_i32x2, int32x2_t, uint64_t)
1480__packed_reinterpret(i64_u8x8, uint8x8_t, int64_t)
1481__packed_reinterpret(i64_u16x4, uint16x4_t, int64_t)
1482__packed_reinterpret(i64_u32x2, uint32x2_t, int64_t)
1483__packed_reinterpret(i64_i8x8, int8x8_t, int64_t)
1484__packed_reinterpret(i64_i16x4, int16x4_t, int64_t)
1485__packed_reinterpret(i64_i32x2, int32x2_t, int64_t)
1486
1487/* Reinterpret Casts, Packed <-> Packed (32-bit) */
1500
1501/* Reinterpret Casts, Packed <-> Packed (64-bit) */
1532
1533// clang-format on
1534
1535#undef __packed_splat2
1536#undef __packed_splat4
1537#undef __packed_splat8
1538#undef __packed_splat
1539#undef __packed_scalar_binary_op
1540#undef __packed_binary_op
1541#undef __packed_unary_op
1542#undef __packed_store
1543#undef __packed_binary_builtin
1544#undef __packed_binary_builtin_mixed
1545#undef __packed_ternary_builtin
1546#undef __packed_ternary_builtin_mixed
1547#undef __packed_sh1add
1548#undef __packed_sh1sadd
1549#undef __packed_cmp
1550#undef __packed_pabs
1551#undef __packed_binary_builtin_cast
1552#undef __packed_reduction
1553#undef __packed_merge_builtin
1554#undef __packed_unary_builtin
1555#undef __packed_widen_convert
1556#undef __packed_widen_binary_op
1557#undef __packed_widen_binary_acc_op
1558#undef __packed_widen_sub_acc_op
1559#undef __packed_widen_mul
1560#undef __packed_widen_mulsu
1561#undef __packed_widen_high2
1562#undef __packed_widen_high4
1563#undef __packed_narrow_even2
1564#undef __packed_narrow_even4
1565#undef __packed_narrow_odd2
1566#undef __packed_narrow_odd4
1567#undef __packed_reverse2
1568#undef __packed_reverse4
1569#undef __packed_reverse8
1570#undef __packed_zip2
1571#undef __packed_zip4
1572#undef __packed_unzipe2
1573#undef __packed_unzipe4
1574#undef __packed_unzipo2
1575#undef __packed_unzipo4
1576#undef __packed_concat2
1577#undef __packed_concat4
1578#undef __packed_slide1
1579#undef __packed_pair_ee2
1580#undef __packed_pair_eo2
1581#undef __packed_pair_oe2
1582#undef __packed_pair_oo2
1583#undef __packed_pair_ee4
1584#undef __packed_pair_eo4
1585#undef __packed_pair_oe4
1586#undef __packed_pair_oo4
1587#undef __packed_pair_ee8
1588#undef __packed_pair_eo8
1589#undef __packed_pair_oe8
1590#undef __packed_pair_oo8
1591#undef __packed_nzip2
1592#undef __packed_nzip4
1593#undef __packed_nziph2
1594#undef __packed_nziph4
1595#undef __packed_wunzip_ext
1596#undef __packed_wunzip_shift
1597#undef __packed_wunzip_odd_hi
1598#undef __packed_abdsum
1599#undef __packed_ternary_builtin_cast
1600#undef __packed_extract
1601#undef __packed_subvector_extract8
1602#undef __packed_subvector_extract4
1603#undef __packed_insert
1604#undef __packed_join2
1605#undef __packed_join4
1606#undef __packed_load
1607#undef __packed_reinterpret
1608#undef __DEFAULT_FN_ATTRS
1609
1610#if defined(__cplusplus)
1611}
1612#endif
1613
1614#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
int32_t uint32_t uint32_t __packed_splat4 __packed_splat2 __packed_splat8 __packed_splat4 __packed_splat2 uint8x8_t
#define __packed_insert(name, ty, elt_ty, max_idx)
#define __packed_pair_oe8(name, ty)
#define __packed_cmp(name, ty, rty, op)
#define __packed_widen_convert(name, rty, ty)
#define __packed_wunzip_ext(name, rty, ty, ext)
#define __packed_subvector_extract8(name, rty, ty)
#define __packed_unary_builtin(name, ty, builtin)
#define __packed_widen_mulsu(name, rty, ty1, ty2, uty)
#define __packed_unzipo2(name, rty, ty)
int32_t uint32_t
#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)
int32_t uint32_t uint32_t __packed_splat4 __packed_splat2 __packed_splat8 __packed_splat4 __packed_splat2 uint8_t
#define __packed_merge_builtin(name, ty, mask_ty, builtin)
#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_nzip2(name, rty, ty)
#define __packed_pair_eo8(name, ty)
#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)
#define __packed_wunzip_shift(name, rty, ty, op, shamt)
int32_t uint32_t uint32_t __packed_splat4 __packed_splat2 __packed_splat8 __packed_splat4 __packed_splat2 uint8x4_t
#define __packed_narrow_even2(name, rty, ty, sty)
#define __packed_widen_high4(name, rty, ty)
int32_t uint32_t uint32_t __packed_splat4 __packed_splat2 __packed_splat8 __packed_splat4 int32x2_t
#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,...)
int32_t uint32_t uint32_t int8_t
#define __packed_sh1add(name, ty)
#define __packed_pabs(name, ty, rty)
#define __packed_sh1sadd(name, ty)
#define __packed_pair_oe2(name, ty)
int32_t uint32_t uint32_t __packed_splat4 __packed_splat2 int8x8_t
int32_t uint32_t uint32_t __packed_splat4 int16_t
#define __packed_unzipe2(name, rty, ty)
#define __packed_unzipo4(name, rty, ty)
#define __packed_widen_high2(name, rty, ty)
#define __packed_ternary_builtin_mixed(name, rty, ty1, ty2, builtin)
#define __packed_pair_oo8(name, ty)
int32_t uint32_t uint32_t __packed_splat4 __packed_splat2 __packed_splat8 __packed_splat4 __packed_splat2 __packed_splat4 uint16_t
int32_t uint32_t uint32_t __packed_splat4 int16x2_t
#define __packed_nzip4(name, rty, ty)
#define __packed_zip4(name, rty, ty)
#define __packed_splat(name, ty, scalar_ty, splat)
int32_t uint32_t uint32_t __packed_splat4 __packed_splat2 __packed_splat8 int16x4_t
#define __packed_widen_binary_acc_op(name, rty, ty, op)
#define __packed_narrow_odd2(name, rty, ty, sty, uty)
#define __packed_abdsum(name, rty, ty, builtin)
#define __packed_widen_binary_op(name, rty, ty, op)
int32_t uint32_t uint32_t __packed_splat4 __packed_splat2 __packed_splat8 __packed_splat4 __packed_splat2 uint32x2_t
#define __packed_binary_builtin_cast(name, ty, rty, builtin)
#define __packed_ternary_builtin_cast(name, rty, ty, builtin)
int32_t uint32_t uint32_t __packed_splat4 __packed_splat2 __packed_splat8 __packed_splat4 __packed_splat2 uint16x2_t
#define __packed_subvector_extract4(name, rty, ty)
#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)
int32_t uint32_t uint32_t int8x4_t
int32_t uint32_t uint32_t __packed_splat4 __packed_splat2 __packed_splat8 __packed_splat4 __packed_splat2 uint16x4_t
#define __packed_reverse4(name, ty)