10#ifndef __RISCV_PACKED_SIMD_H
11#define __RISCV_PACKED_SIMD_H
15#if defined(__cplusplus)
33#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__))
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)})
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); \
44#define __packed_scalar_binary_op(name, ty, scalar_ty, op, splat) \
45 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, \
47 return __rs1 op splat(ty, __rs2); \
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; \
55#define __packed_unary_op(name, ty, op) \
56 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
60#define __packed_extract(name, rty, ty, max_idx) \
61 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __v, \
63 __attribute__((__enable_if__( \
65 "index must be a constant integer from 0 to " #max_idx))) { \
69#define __packed_subvector_extract8(name, rty, ty) \
70 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __v, \
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); \
77#define __packed_subvector_extract4(name, rty, ty) \
78 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __v, \
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); \
86#define __packed_store(name, ty, elt_ty) \
87 static __inline__ void __DEFAULT_FN_ATTRS __riscv_##name(elt_ty *__p, \
89 typedef ty __attribute__((__aligned__(1))) ua_ty; \
90 *(ua_ty *)__p = __v; \
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); \
98#define __packed_binary_builtin_mixed(name, rty, ty1, ty2, builtin) \
99 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty1 __rs1, \
101 return builtin(__rs1, __rs2); \
104#define __packed_ternary_builtin(name, ty, builtin) \
105 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rd, ty __rs1, \
107 return builtin(__rd, __rs1, __rs2); \
110#define __packed_ternary_builtin_mixed(name, rty, ty1, ty2, builtin) \
111 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(rty __rd, ty1 __rs1, \
113 return builtin(__rd, __rs1, __rs2); \
116#define __packed_sh1add(name, ty) \
117 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, ty __rs2) { \
118 return (__rs1 << 1) + __rs2; \
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); \
131#define __packed_cmp(name, ty, rty, op) \
132 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, \
134 return (rty)(__rs1 op __rs2); \
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); \
142#define __packed_binary_builtin_cast(name, ty, rty, builtin) \
143 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, \
145 return (rty)builtin(__rs1, __rs2); \
148#define __packed_reduction(name, rty, ty, builtin) \
149 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, \
151 return builtin(__rs1, __rs2); \
154#define __packed_merge_builtin(name, ty, mask_ty, builtin) \
155 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, ty __rs2, \
157 return (ty)builtin(__rs1, __rs2, __rd); \
160#define __packed_unary_builtin(name, ty, builtin) \
161 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
162 return builtin(__rs1); \
165#define __packed_cls(name, ty, builtin) \
166 static __inline__ unsigned __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
167 return builtin(__rs1); \
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); \
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); \
182#define __packed_slideupx(name, ty, bits_ty, log2_elt_bits) \
183 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rd, ty __rs1, \
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); \
191#define __packed_slidedownx(name, ty, bits_ty, log2_elt_bits) \
192 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rd, ty __rs1, \
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); \
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); \
204#define __packed_widen_binary_op(name, rty, ty, op) \
205 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, \
207 return __builtin_convertvector(__rs1, rty) \
208 op __builtin_convertvector(__rs2, rty); \
210#define __packed_widen_binary_acc_op(name, rty, ty, op) \
211 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(rty __rd, ty __rs1, \
213 return __rd op __builtin_convertvector(__rs1, rty) \
214 op __builtin_convertvector(__rs2, rty); \
216#define __packed_widen_sub_acc_op(name, rty, ty) \
217 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(rty __rd, ty __rs1, \
219 return __rd + __builtin_convertvector(__rs1, rty) - \
220 __builtin_convertvector(__rs2, rty); \
222#define __packed_widen_mul(name, rty, ty) \
223 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, \
225 return __builtin_convertvector(__rs1, rty) * \
226 __builtin_convertvector(__rs2, rty); \
228#define __packed_widen_mulsu(name, rty, ty1, ty2, uty) \
229 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty1 __rs1, \
231 return __builtin_convertvector(__rs1, rty) * \
232 (rty) __builtin_convertvector(__rs2, uty); \
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); \
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, \
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); \
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); \
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); \
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); \
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); \
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); \
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); \
276#define __packed_zip2(name, rty, ty) \
277 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, \
279 return __builtin_shufflevector(__rs1, __rs2, 0, 2, 1, 3); \
281#define __packed_zip4(name, rty, ty) \
282 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, \
284 return __builtin_shufflevector(__rs1, __rs2, 0, 4, 1, 5, 2, 6, 3, 7); \
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); \
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); \
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); \
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); \
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); \
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); \
312#define __packed_slide1(name, ty, elt_ty, ...) \
313 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __rd, \
315 return __builtin_shufflevector(__rd, (ty){__rs1}, __VA_ARGS__); \
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); \
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); \
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); \
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); \
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); \
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); \
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); \
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); \
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); \
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); \
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); \
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); \
367#define __packed_nzip2(name, rty, ty) \
368 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, \
370 return __builtin_shufflevector((rty)__rs1, (rty)__rs2, 0, 4, 2, 6); \
372#define __packed_nzip4(name, rty, ty) \
373 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, \
375 return __builtin_shufflevector((rty)__rs1, (rty)__rs2, 0, 8, 2, 10, 4, 12, \
378#define __packed_nziph2(name, rty, ty) \
379 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, \
381 return __builtin_shufflevector((rty)__rs1, (rty)__rs2, 1, 5, 3, 7); \
383#define __packed_nziph4(name, rty, ty) \
384 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, \
386 return __builtin_shufflevector((rty)__rs1, (rty)__rs2, 1, 9, 3, 11, 5, 13, \
390#define __packed_wunzip_ext(name, rty, ty, ext) \
391 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1) { \
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; \
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); \
405#define __packed_abdsum(name, rty, ty, builtin) \
406 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(ty __rs1, \
408 return builtin(__rs1, __rs2); \
411#define __packed_ternary_builtin_cast(name, rty, ty, builtin) \
412 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_##name(rty __rd, ty __rs1, \
414 return builtin(__rd, __rs1, __rs2); \
417#define __packed_reinterpret(name, rty, ty) \
418 static __inline__ rty __DEFAULT_FN_ATTRS __riscv_preinterpret_##name( \
420 return __builtin_bit_cast(rty, __x); \
423#define __packed_insert(name, ty, elt_ty, max_idx) \
424 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(ty __v, elt_ty __e, \
426 __attribute__((__enable_if__( \
427 __idx <= (max_idx), \
428 "index must be a constant integer from 0 to " #max_idx))) { \
433#define __packed_join2(name, ty, elt_ty) \
434 static __inline__ ty __DEFAULT_FN_ATTRS __riscv_##name(elt_ty __e0, \
436 return (ty){__e0, __e1}; \
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}; \
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; \
459#if __riscv_xlen == 64
481#if __riscv_xlen == 64
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)
494#define __packed_mulh_builtin(name, res_ty, ty1, ty2) \
495 static __inline__ res_ty __DEFAULT_FN_ATTRS __riscv_##name(ty1 __rs1, \
497 return __builtin_riscv_##name(__rs1, __rs2); \
505#undef __packed_mulh_builtin
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)
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)
868 __builtin_riscv_pwsll_s_u16x4)
870 __builtin_riscv_pwsll_s_u32x2)
872 __builtin_riscv_pwsla_s_i16x4)
874 __builtin_riscv_pwsla_s_i32x2)
878 __builtin_riscv_pnsrl_s_u8x4)
880 __builtin_riscv_pnsrl_s_u16x2)
882 __builtin_riscv_pnsra_s_i8x4)
884 __builtin_riscv_pnsra_s_i16x2)
886 __builtin_riscv_pnsrar_s_i8x4)
888 __builtin_riscv_pnsrar_s_i16x2)
892 __builtin_riscv_pnclipu_s_u8x4)
894 __builtin_riscv_pnclipu_s_u16x2)
896 __builtin_riscv_pnclipru_s_u8x4)
898 __builtin_riscv_pnclipru_s_u16x2)
900 __builtin_riscv_pnclip_s_i8x4)
902 __builtin_riscv_pnclip_s_i16x2)
904 __builtin_riscv_pnclipr_s_i8x4)
906 __builtin_riscv_pnclipr_s_i16x2)
941 __builtin_riscv_pmqwacc_i32x2)
943 __builtin_riscv_pmqrwacc_i32x2)
1227 (
uint32x2_t)__riscv_pm4add_i8x8(__rs1, __rs2));
1232 return __rd + __riscv_pm4addu_u8x8(__rs1, __rs2);
1238 (
uint32x2_t)__riscv_pm4addsu_i8x8(__rs1, __rs2));
1288 __riscv_psext_b_i16x2)
1291 __riscv_pzext_b_u16x2)
1296 __riscv_pnziph_i8x4)
1298 __riscv_pnziph_u8x4)
1302 __riscv_psext_b_i16x4)
1305 __riscv_pzext_b_u16x4)
1308 __riscv_psext_h_i32x2)
1311 __riscv_pzext_h_u32x2)
1315 __riscv_pnziph_i8x8)
1318 __riscv_pnziph_u8x8)
1321 __riscv_pnziph_i16x4)
1324 __riscv_pnziph_u16x4)
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)
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)
1527 __attribute__((__enable_if__(__idx <= 1,
"index must be a constant integer "
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));
1536 __attribute__((__enable_if__(__idx <= 1,
"index must be a constant integer "
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));
1545 __attribute__((__enable_if__(__idx <= 1,
"index must be a constant integer "
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));
1554 __attribute__((__enable_if__(__idx <= 1,
"index must be a constant integer "
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));
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
1712#undef __packed_binary_builtin_cast
1713#undef __packed_reduction
1714#undef __packed_merge_builtin
1715#undef __packed_unary_builtin
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
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
1773#undef __packed_reinterpret
1774#undef __DEFAULT_FN_ATTRS
1776#if defined(__cplusplus)
_Float16 __2f16 __attribute__((ext_vector_type(2)))
Zeroes the upper 128 bits (bits 255:128) of all YMM registers.
#define __DEFAULT_FN_ATTRS
#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)