Daily bump.
[official-gcc.git] / gcc / config / arm / arm_mve.h
blobee18a4714fb1a8e70e0f0f4c1ffea608883ecb9d
1 /* Arm MVE intrinsics include file.
3 Copyright (C) 2019-2025 Free Software Foundation, Inc.
4 Contributed by Arm.
6 This file is part of GCC.
8 GCC is free software; you can redistribute it and/or modify it
9 under the terms of the GNU General Public License as published
10 by the Free Software Foundation; either version 3, or (at your
11 option) any later version.
13 GCC is distributed in the hope that it will be useful, but WITHOUT
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
16 License for more details.
18 Under Section 7 of GPL version 3, you are granted additional
19 permissions described in the GCC Runtime Library Exception, version
20 3.1, as published by the Free Software Foundation.
22 You should have received a copy of the GNU General Public License
23 along with GCC; see the file COPYING3. If not see
24 <http://www.gnu.org/licenses/>. */
26 #ifndef _GCC_ARM_MVE_H
27 #define _GCC_ARM_MVE_H
29 #if __ARM_BIG_ENDIAN
30 #error "MVE intrinsics are not supported in Big-Endian mode."
31 #elif !__ARM_FEATURE_MVE
32 #error "MVE feature not supported"
33 #else
35 #include <stdint.h>
36 #ifndef __cplusplus
37 #include <stdbool.h>
38 #endif
39 #include "arm_mve_types.h"
41 #ifdef __ARM_MVE_PRESERVE_USER_NAMESPACE
42 #pragma GCC arm "arm_mve.h" true
43 #else
44 #pragma GCC arm "arm_mve.h" false
45 #endif
47 #ifndef __ARM_MVE_PRESERVE_USER_NAMESPACE
48 #define vuninitializedq(__v) __arm_vuninitializedq(__v)
49 #define vsetq_lane(__a, __b, __idx) __arm_vsetq_lane(__a, __b, __idx)
50 #define vgetq_lane(__a, __idx) __arm_vgetq_lane(__a, __idx)
53 #define vpnot(__a) __arm_vpnot(__a)
54 #define vuninitializedq_u8(void) __arm_vuninitializedq_u8(void)
55 #define vuninitializedq_u16(void) __arm_vuninitializedq_u16(void)
56 #define vuninitializedq_u32(void) __arm_vuninitializedq_u32(void)
57 #define vuninitializedq_u64(void) __arm_vuninitializedq_u64(void)
58 #define vuninitializedq_s8(void) __arm_vuninitializedq_s8(void)
59 #define vuninitializedq_s16(void) __arm_vuninitializedq_s16(void)
60 #define vuninitializedq_s32(void) __arm_vuninitializedq_s32(void)
61 #define vuninitializedq_s64(void) __arm_vuninitializedq_s64(void)
62 #define vuninitializedq_f16(void) __arm_vuninitializedq_f16(void)
63 #define vuninitializedq_f32(void) __arm_vuninitializedq_f32(void)
64 #define vsetq_lane_f16(__a, __b, __idx) __arm_vsetq_lane_f16(__a, __b, __idx)
65 #define vsetq_lane_f32(__a, __b, __idx) __arm_vsetq_lane_f32(__a, __b, __idx)
66 #define vsetq_lane_s16(__a, __b, __idx) __arm_vsetq_lane_s16(__a, __b, __idx)
67 #define vsetq_lane_s32(__a, __b, __idx) __arm_vsetq_lane_s32(__a, __b, __idx)
68 #define vsetq_lane_s8(__a, __b, __idx) __arm_vsetq_lane_s8(__a, __b, __idx)
69 #define vsetq_lane_s64(__a, __b, __idx) __arm_vsetq_lane_s64(__a, __b, __idx)
70 #define vsetq_lane_u8(__a, __b, __idx) __arm_vsetq_lane_u8(__a, __b, __idx)
71 #define vsetq_lane_u16(__a, __b, __idx) __arm_vsetq_lane_u16(__a, __b, __idx)
72 #define vsetq_lane_u32(__a, __b, __idx) __arm_vsetq_lane_u32(__a, __b, __idx)
73 #define vsetq_lane_u64(__a, __b, __idx) __arm_vsetq_lane_u64(__a, __b, __idx)
74 #define vgetq_lane_f16(__a, __idx) __arm_vgetq_lane_f16(__a, __idx)
75 #define vgetq_lane_f32(__a, __idx) __arm_vgetq_lane_f32(__a, __idx)
76 #define vgetq_lane_s16(__a, __idx) __arm_vgetq_lane_s16(__a, __idx)
77 #define vgetq_lane_s32(__a, __idx) __arm_vgetq_lane_s32(__a, __idx)
78 #define vgetq_lane_s8(__a, __idx) __arm_vgetq_lane_s8(__a, __idx)
79 #define vgetq_lane_s64(__a, __idx) __arm_vgetq_lane_s64(__a, __idx)
80 #define vgetq_lane_u8(__a, __idx) __arm_vgetq_lane_u8(__a, __idx)
81 #define vgetq_lane_u16(__a, __idx) __arm_vgetq_lane_u16(__a, __idx)
82 #define vgetq_lane_u32(__a, __idx) __arm_vgetq_lane_u32(__a, __idx)
83 #define vgetq_lane_u64(__a, __idx) __arm_vgetq_lane_u64(__a, __idx)
84 #define sqrshr(__p0, __p1) __arm_sqrshr(__p0, __p1)
85 #define sqrshrl(__p0, __p1) __arm_sqrshrl(__p0, __p1)
86 #define sqrshrl_sat48(__p0, __p1) __arm_sqrshrl_sat48(__p0, __p1)
87 #define sqshl(__p0, __p1) __arm_sqshl(__p0, __p1)
88 #define sqshll(__p0, __p1) __arm_sqshll(__p0, __p1)
89 #define srshr(__p0, __p1) __arm_srshr(__p0, __p1)
90 #define srshrl(__p0, __p1) __arm_srshrl(__p0, __p1)
91 #define uqrshl(__p0, __p1) __arm_uqrshl(__p0, __p1)
92 #define uqrshll(__p0, __p1) __arm_uqrshll(__p0, __p1)
93 #define uqrshll_sat48(__p0, __p1) __arm_uqrshll_sat48(__p0, __p1)
94 #define uqshl(__p0, __p1) __arm_uqshl(__p0, __p1)
95 #define uqshll(__p0, __p1) __arm_uqshll(__p0, __p1)
96 #define urshr(__p0, __p1) __arm_urshr(__p0, __p1)
97 #define urshrl(__p0, __p1) __arm_urshrl(__p0, __p1)
98 #define lsll(__p0, __p1) __arm_lsll(__p0, __p1)
99 #define asrl(__p0, __p1) __arm_asrl(__p0, __p1)
100 #endif
102 /* For big-endian, GCC's vector indices are reversed within each 64 bits
103 compared to the architectural lane indices used by MVE intrinsics. */
104 #define __ARM_NUM_LANES(__v) (sizeof (__v) / sizeof (__v[0]))
105 #ifdef __ARM_BIG_ENDIAN
106 #define __ARM_LANEQ(__vec, __idx) (__idx ^ (__ARM_NUM_LANES(__vec)/2 - 1))
107 #else
108 #define __ARM_LANEQ(__vec, __idx) __idx
109 #endif
110 #define __ARM_CHECK_LANEQ(__vec, __idx) \
111 __builtin_arm_lane_check (__ARM_NUM_LANES(__vec), \
112 __ARM_LANEQ(__vec, __idx))
114 __extension__ extern __inline mve_pred16_t
115 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
116 __arm_vpnot (mve_pred16_t __a)
118 return __builtin_mve_vpnotv16bi (__a);
121 __extension__ extern __inline int16x8_t
122 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
123 __arm_vsetq_lane_s16 (int16_t __a, int16x8_t __b, const int __idx)
125 __ARM_CHECK_LANEQ (__b, __idx);
126 __b[__ARM_LANEQ(__b,__idx)] = __a;
127 return __b;
130 __extension__ extern __inline int32x4_t
131 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
132 __arm_vsetq_lane_s32 (int32_t __a, int32x4_t __b, const int __idx)
134 __ARM_CHECK_LANEQ (__b, __idx);
135 __b[__ARM_LANEQ(__b,__idx)] = __a;
136 return __b;
139 __extension__ extern __inline int8x16_t
140 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
141 __arm_vsetq_lane_s8 (int8_t __a, int8x16_t __b, const int __idx)
143 __ARM_CHECK_LANEQ (__b, __idx);
144 __b[__ARM_LANEQ(__b,__idx)] = __a;
145 return __b;
148 __extension__ extern __inline int64x2_t
149 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
150 __arm_vsetq_lane_s64 (int64_t __a, int64x2_t __b, const int __idx)
152 __ARM_CHECK_LANEQ (__b, __idx);
153 __b[__ARM_LANEQ(__b,__idx)] = __a;
154 return __b;
157 __extension__ extern __inline uint8x16_t
158 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
159 __arm_vsetq_lane_u8 (uint8_t __a, uint8x16_t __b, const int __idx)
161 __ARM_CHECK_LANEQ (__b, __idx);
162 __b[__ARM_LANEQ(__b,__idx)] = __a;
163 return __b;
166 __extension__ extern __inline uint16x8_t
167 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
168 __arm_vsetq_lane_u16 (uint16_t __a, uint16x8_t __b, const int __idx)
170 __ARM_CHECK_LANEQ (__b, __idx);
171 __b[__ARM_LANEQ(__b,__idx)] = __a;
172 return __b;
175 __extension__ extern __inline uint32x4_t
176 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
177 __arm_vsetq_lane_u32 (uint32_t __a, uint32x4_t __b, const int __idx)
179 __ARM_CHECK_LANEQ (__b, __idx);
180 __b[__ARM_LANEQ(__b,__idx)] = __a;
181 return __b;
184 __extension__ extern __inline uint64x2_t
185 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
186 __arm_vsetq_lane_u64 (uint64_t __a, uint64x2_t __b, const int __idx)
188 __ARM_CHECK_LANEQ (__b, __idx);
189 __b[__ARM_LANEQ(__b,__idx)] = __a;
190 return __b;
193 __extension__ extern __inline int16_t
194 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
195 __arm_vgetq_lane_s16 (int16x8_t __a, const int __idx)
197 __ARM_CHECK_LANEQ (__a, __idx);
198 return __a[__ARM_LANEQ(__a,__idx)];
201 __extension__ extern __inline int32_t
202 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
203 __arm_vgetq_lane_s32 (int32x4_t __a, const int __idx)
205 __ARM_CHECK_LANEQ (__a, __idx);
206 return __a[__ARM_LANEQ(__a,__idx)];
209 __extension__ extern __inline int8_t
210 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
211 __arm_vgetq_lane_s8 (int8x16_t __a, const int __idx)
213 __ARM_CHECK_LANEQ (__a, __idx);
214 return __a[__ARM_LANEQ(__a,__idx)];
217 __extension__ extern __inline int64_t
218 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
219 __arm_vgetq_lane_s64 (int64x2_t __a, const int __idx)
221 __ARM_CHECK_LANEQ (__a, __idx);
222 return __a[__ARM_LANEQ(__a,__idx)];
225 __extension__ extern __inline uint8_t
226 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
227 __arm_vgetq_lane_u8 (uint8x16_t __a, const int __idx)
229 __ARM_CHECK_LANEQ (__a, __idx);
230 return __a[__ARM_LANEQ(__a,__idx)];
233 __extension__ extern __inline uint16_t
234 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
235 __arm_vgetq_lane_u16 (uint16x8_t __a, const int __idx)
237 __ARM_CHECK_LANEQ (__a, __idx);
238 return __a[__ARM_LANEQ(__a,__idx)];
241 __extension__ extern __inline uint32_t
242 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
243 __arm_vgetq_lane_u32 (uint32x4_t __a, const int __idx)
245 __ARM_CHECK_LANEQ (__a, __idx);
246 return __a[__ARM_LANEQ(__a,__idx)];
249 __extension__ extern __inline uint64_t
250 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
251 __arm_vgetq_lane_u64 (uint64x2_t __a, const int __idx)
253 __ARM_CHECK_LANEQ (__a, __idx);
254 return __a[__ARM_LANEQ(__a,__idx)];
257 __extension__ extern __inline uint64_t
258 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
259 __arm_lsll (uint64_t value, int32_t shift)
261 return (value << shift);
264 __extension__ extern __inline int64_t
265 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
266 __arm_asrl (int64_t value, int32_t shift)
268 return (value >> shift);
271 __extension__ extern __inline uint64_t
272 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
273 __arm_uqrshll (uint64_t value, int32_t shift)
275 return __builtin_mve_uqrshll_sat64_di (value, shift);
278 __extension__ extern __inline uint64_t
279 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
280 __arm_uqrshll_sat48 (uint64_t value, int32_t shift)
282 return __builtin_mve_uqrshll_sat48_di (value, shift);
285 __extension__ extern __inline int64_t
286 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
287 __arm_sqrshrl (int64_t value, int32_t shift)
289 return __builtin_mve_sqrshrl_sat64_di (value, shift);
292 __extension__ extern __inline int64_t
293 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
294 __arm_sqrshrl_sat48 (int64_t value, int32_t shift)
296 return __builtin_mve_sqrshrl_sat48_di (value, shift);
299 __extension__ extern __inline uint64_t
300 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
301 __arm_uqshll (uint64_t value, const int shift)
303 return __builtin_mve_uqshll_di (value, shift);
306 __extension__ extern __inline uint64_t
307 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
308 __arm_urshrl (uint64_t value, const int shift)
310 return __builtin_mve_urshrl_di (value, shift);
313 __extension__ extern __inline int64_t
314 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
315 __arm_srshrl (int64_t value, const int shift)
317 return __builtin_mve_srshrl_di (value, shift);
320 __extension__ extern __inline int64_t
321 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
322 __arm_sqshll (int64_t value, const int shift)
324 return __builtin_mve_sqshll_di (value, shift);
327 __extension__ extern __inline uint32_t
328 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
329 __arm_uqrshl (uint32_t value, int32_t shift)
331 return __builtin_mve_uqrshl_si (value, shift);
334 __extension__ extern __inline int32_t
335 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
336 __arm_sqrshr (int32_t value, int32_t shift)
338 return __builtin_mve_sqrshr_si (value, shift);
341 __extension__ extern __inline uint32_t
342 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
343 __arm_uqshl (uint32_t value, const int shift)
345 return __builtin_mve_uqshl_si (value, shift);
348 __extension__ extern __inline uint32_t
349 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
350 __arm_urshr (uint32_t value, const int shift)
352 return __builtin_mve_urshr_si (value, shift);
355 __extension__ extern __inline int32_t
356 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
357 __arm_sqshl (int32_t value, const int shift)
359 return __builtin_mve_sqshl_si (value, shift);
362 __extension__ extern __inline int32_t
363 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
364 __arm_srshr (int32_t value, const int shift)
366 return __builtin_mve_srshr_si (value, shift);
369 #if (__ARM_FEATURE_MVE & 2) /* MVE Floating point. */
371 __extension__ extern __inline float16x8_t
372 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
373 __arm_vsetq_lane_f16 (float16_t __a, float16x8_t __b, const int __idx)
375 __ARM_CHECK_LANEQ (__b, __idx);
376 __b[__ARM_LANEQ(__b,__idx)] = __a;
377 return __b;
380 __extension__ extern __inline float32x4_t
381 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
382 __arm_vsetq_lane_f32 (float32_t __a, float32x4_t __b, const int __idx)
384 __ARM_CHECK_LANEQ (__b, __idx);
385 __b[__ARM_LANEQ(__b,__idx)] = __a;
386 return __b;
389 __extension__ extern __inline float16_t
390 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
391 __arm_vgetq_lane_f16 (float16x8_t __a, const int __idx)
393 __ARM_CHECK_LANEQ (__a, __idx);
394 return __a[__ARM_LANEQ(__a,__idx)];
397 __extension__ extern __inline float32_t
398 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
399 __arm_vgetq_lane_f32 (float32x4_t __a, const int __idx)
401 __ARM_CHECK_LANEQ (__a, __idx);
402 return __a[__ARM_LANEQ(__a,__idx)];
404 #endif
406 #ifdef __cplusplus
408 __extension__ extern __inline int16x8_t
409 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
410 __arm_vsetq_lane (int16_t __a, int16x8_t __b, const int __idx)
412 return __arm_vsetq_lane_s16 (__a, __b, __idx);
415 __extension__ extern __inline int32x4_t
416 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
417 __arm_vsetq_lane (int32_t __a, int32x4_t __b, const int __idx)
419 return __arm_vsetq_lane_s32 (__a, __b, __idx);
422 __extension__ extern __inline int8x16_t
423 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
424 __arm_vsetq_lane (int8_t __a, int8x16_t __b, const int __idx)
426 return __arm_vsetq_lane_s8 (__a, __b, __idx);
429 __extension__ extern __inline int64x2_t
430 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
431 __arm_vsetq_lane (int64_t __a, int64x2_t __b, const int __idx)
433 return __arm_vsetq_lane_s64 (__a, __b, __idx);
436 __extension__ extern __inline uint8x16_t
437 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
438 __arm_vsetq_lane (uint8_t __a, uint8x16_t __b, const int __idx)
440 return __arm_vsetq_lane_u8 (__a, __b, __idx);
443 __extension__ extern __inline uint16x8_t
444 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
445 __arm_vsetq_lane (uint16_t __a, uint16x8_t __b, const int __idx)
447 return __arm_vsetq_lane_u16 (__a, __b, __idx);
450 __extension__ extern __inline uint32x4_t
451 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
452 __arm_vsetq_lane (uint32_t __a, uint32x4_t __b, const int __idx)
454 return __arm_vsetq_lane_u32 (__a, __b, __idx);
457 __extension__ extern __inline uint64x2_t
458 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
459 __arm_vsetq_lane (uint64_t __a, uint64x2_t __b, const int __idx)
461 return __arm_vsetq_lane_u64 (__a, __b, __idx);
464 __extension__ extern __inline int16_t
465 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
466 __arm_vgetq_lane (int16x8_t __a, const int __idx)
468 return __arm_vgetq_lane_s16 (__a, __idx);
471 __extension__ extern __inline int32_t
472 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
473 __arm_vgetq_lane (int32x4_t __a, const int __idx)
475 return __arm_vgetq_lane_s32 (__a, __idx);
478 __extension__ extern __inline int8_t
479 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
480 __arm_vgetq_lane (int8x16_t __a, const int __idx)
482 return __arm_vgetq_lane_s8 (__a, __idx);
485 __extension__ extern __inline int64_t
486 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
487 __arm_vgetq_lane (int64x2_t __a, const int __idx)
489 return __arm_vgetq_lane_s64 (__a, __idx);
492 __extension__ extern __inline uint8_t
493 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
494 __arm_vgetq_lane (uint8x16_t __a, const int __idx)
496 return __arm_vgetq_lane_u8 (__a, __idx);
499 __extension__ extern __inline uint16_t
500 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
501 __arm_vgetq_lane (uint16x8_t __a, const int __idx)
503 return __arm_vgetq_lane_u16 (__a, __idx);
506 __extension__ extern __inline uint32_t
507 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
508 __arm_vgetq_lane (uint32x4_t __a, const int __idx)
510 return __arm_vgetq_lane_u32 (__a, __idx);
513 __extension__ extern __inline uint64_t
514 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
515 __arm_vgetq_lane (uint64x2_t __a, const int __idx)
517 return __arm_vgetq_lane_u64 (__a, __idx);
520 #if (__ARM_FEATURE_MVE & 2) /* MVE Floating point. */
522 __extension__ extern __inline float16x8_t
523 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
524 __arm_vsetq_lane (float16_t __a, float16x8_t __b, const int __idx)
526 return __arm_vsetq_lane_f16 (__a, __b, __idx);
529 __extension__ extern __inline float32x4_t
530 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
531 __arm_vsetq_lane (float32_t __a, float32x4_t __b, const int __idx)
533 return __arm_vsetq_lane_f32 (__a, __b, __idx);
536 __extension__ extern __inline float16_t
537 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
538 __arm_vgetq_lane (float16x8_t __a, const int __idx)
540 return __arm_vgetq_lane_f16 (__a, __idx);
543 __extension__ extern __inline float32_t
544 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
545 __arm_vgetq_lane (float32x4_t __a, const int __idx)
547 return __arm_vgetq_lane_f32 (__a, __idx);
549 #endif /* MVE Floating point. */
552 __extension__ extern __inline uint8x16_t
553 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
554 __arm_vuninitializedq (uint8x16_t /* __v ATTRIBUTE UNUSED */)
556 return __arm_vuninitializedq_u8 ();
559 __extension__ extern __inline uint16x8_t
560 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
561 __arm_vuninitializedq (uint16x8_t /* __v ATTRIBUTE UNUSED */)
563 return __arm_vuninitializedq_u16 ();
566 __extension__ extern __inline uint32x4_t
567 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
568 __arm_vuninitializedq (uint32x4_t /* __v ATTRIBUTE UNUSED */)
570 return __arm_vuninitializedq_u32 ();
573 __extension__ extern __inline uint64x2_t
574 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
575 __arm_vuninitializedq (uint64x2_t /* __v ATTRIBUTE UNUSED */)
577 return __arm_vuninitializedq_u64 ();
580 __extension__ extern __inline int8x16_t
581 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
582 __arm_vuninitializedq (int8x16_t /* __v ATTRIBUTE UNUSED */)
584 return __arm_vuninitializedq_s8 ();
587 __extension__ extern __inline int16x8_t
588 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
589 __arm_vuninitializedq (int16x8_t /* __v ATTRIBUTE UNUSED */)
591 return __arm_vuninitializedq_s16 ();
594 __extension__ extern __inline int32x4_t
595 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
596 __arm_vuninitializedq (int32x4_t /* __v ATTRIBUTE UNUSED */)
598 return __arm_vuninitializedq_s32 ();
601 __extension__ extern __inline int64x2_t
602 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
603 __arm_vuninitializedq (int64x2_t /* __v ATTRIBUTE UNUSED */)
605 return __arm_vuninitializedq_s64 ();
608 #if (__ARM_FEATURE_MVE & 2) /* MVE Floating point. */
609 __extension__ extern __inline float16x8_t
610 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
611 __arm_vuninitializedq (float16x8_t /* __v ATTRIBUTE UNUSED */)
613 return __arm_vuninitializedq_f16 ();
616 __extension__ extern __inline float32x4_t
617 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
618 __arm_vuninitializedq (float32x4_t /* __v ATTRIBUTE UNUSED */)
620 return __arm_vuninitializedq_f32 ();
622 #endif /* __ARM_FEATURE_MVE & 2 (MVE floating point) */
624 #else
625 enum {
626 __ARM_mve_type_fp_n = 1,
627 __ARM_mve_type_int_n,
628 __ARM_mve_type_float16_t_ptr,
629 __ARM_mve_type_float16x8_t,
630 __ARM_mve_type_float16x8x2_t,
631 __ARM_mve_type_float16x8x4_t,
632 __ARM_mve_type_float32_t_ptr,
633 __ARM_mve_type_float32x4_t,
634 __ARM_mve_type_float32x4x2_t,
635 __ARM_mve_type_float32x4x4_t,
636 __ARM_mve_type_int16_t_ptr,
637 __ARM_mve_type_int16x8_t,
638 __ARM_mve_type_int16x8x2_t,
639 __ARM_mve_type_int16x8x4_t,
640 __ARM_mve_type_int32_t_ptr,
641 __ARM_mve_type_int32x4_t,
642 __ARM_mve_type_int32x4x2_t,
643 __ARM_mve_type_int32x4x4_t,
644 __ARM_mve_type_int64_t_ptr,
645 __ARM_mve_type_int64x2_t,
646 __ARM_mve_type_int8_t_ptr,
647 __ARM_mve_type_int8x16_t,
648 __ARM_mve_type_int8x16x2_t,
649 __ARM_mve_type_int8x16x4_t,
650 __ARM_mve_type_uint16_t_ptr,
651 __ARM_mve_type_uint16x8_t,
652 __ARM_mve_type_uint16x8x2_t,
653 __ARM_mve_type_uint16x8x4_t,
654 __ARM_mve_type_uint32_t_ptr,
655 __ARM_mve_type_uint32x4_t,
656 __ARM_mve_type_uint32x4x2_t,
657 __ARM_mve_type_uint32x4x4_t,
658 __ARM_mve_type_uint64_t_ptr,
659 __ARM_mve_type_uint64x2_t,
660 __ARM_mve_type_uint8_t_ptr,
661 __ARM_mve_type_uint8x16_t,
662 __ARM_mve_type_uint8x16x2_t,
663 __ARM_mve_type_uint8x16x4_t,
664 __ARM_mve_unsupported_type
667 #if (__ARM_FEATURE_MVE & 2) /* MVE Floating point. */
668 #define __ARM_mve_typeid(x) _Generic(x, \
669 float16_t: __ARM_mve_type_fp_n, \
670 float16_t *: __ARM_mve_type_float16_t_ptr, \
671 float16_t const *: __ARM_mve_type_float16_t_ptr, \
672 float16x8_t: __ARM_mve_type_float16x8_t, \
673 float16x8x2_t: __ARM_mve_type_float16x8x2_t, \
674 float16x8x4_t: __ARM_mve_type_float16x8x4_t, \
675 float32_t: __ARM_mve_type_fp_n, \
676 float32_t *: __ARM_mve_type_float32_t_ptr, \
677 float32_t const *: __ARM_mve_type_float32_t_ptr, \
678 float32x4_t: __ARM_mve_type_float32x4_t, \
679 float32x4x2_t: __ARM_mve_type_float32x4x2_t, \
680 float32x4x4_t: __ARM_mve_type_float32x4x4_t, \
681 int16_t: __ARM_mve_type_int_n, \
682 int16_t *: __ARM_mve_type_int16_t_ptr, \
683 int16_t const *: __ARM_mve_type_int16_t_ptr, \
684 int16x8_t: __ARM_mve_type_int16x8_t, \
685 int16x8x2_t: __ARM_mve_type_int16x8x2_t, \
686 int16x8x4_t: __ARM_mve_type_int16x8x4_t, \
687 int32_t: __ARM_mve_type_int_n, \
688 int32_t *: __ARM_mve_type_int32_t_ptr, \
689 int32_t const *: __ARM_mve_type_int32_t_ptr, \
690 int32x4_t: __ARM_mve_type_int32x4_t, \
691 int32x4x2_t: __ARM_mve_type_int32x4x2_t, \
692 int32x4x4_t: __ARM_mve_type_int32x4x4_t, \
693 int64_t: __ARM_mve_type_int_n, \
694 int64_t *: __ARM_mve_type_int64_t_ptr, \
695 int64_t const *: __ARM_mve_type_int64_t_ptr, \
696 int64x2_t: __ARM_mve_type_int64x2_t, \
697 int8_t: __ARM_mve_type_int_n, \
698 int8_t *: __ARM_mve_type_int8_t_ptr, \
699 int8_t const *: __ARM_mve_type_int8_t_ptr, \
700 int8x16_t: __ARM_mve_type_int8x16_t, \
701 int8x16x2_t: __ARM_mve_type_int8x16x2_t, \
702 int8x16x4_t: __ARM_mve_type_int8x16x4_t, \
703 uint16_t: __ARM_mve_type_int_n, \
704 uint16_t *: __ARM_mve_type_uint16_t_ptr, \
705 uint16_t const *: __ARM_mve_type_uint16_t_ptr, \
706 uint16x8_t: __ARM_mve_type_uint16x8_t, \
707 uint16x8x2_t: __ARM_mve_type_uint16x8x2_t, \
708 uint16x8x4_t: __ARM_mve_type_uint16x8x4_t, \
709 uint32_t: __ARM_mve_type_int_n, \
710 uint32_t *: __ARM_mve_type_uint32_t_ptr, \
711 uint32_t const *: __ARM_mve_type_uint32_t_ptr, \
712 uint32x4_t: __ARM_mve_type_uint32x4_t, \
713 uint32x4x2_t: __ARM_mve_type_uint32x4x2_t, \
714 uint32x4x4_t: __ARM_mve_type_uint32x4x4_t, \
715 uint64_t: __ARM_mve_type_int_n, \
716 uint64_t *: __ARM_mve_type_uint64_t_ptr, \
717 uint64_t const *: __ARM_mve_type_uint64_t_ptr, \
718 uint64x2_t: __ARM_mve_type_uint64x2_t, \
719 uint8_t: __ARM_mve_type_int_n, \
720 uint8_t *: __ARM_mve_type_uint8_t_ptr, \
721 uint8_t const *: __ARM_mve_type_uint8_t_ptr, \
722 uint8x16_t: __ARM_mve_type_uint8x16_t, \
723 uint8x16x2_t: __ARM_mve_type_uint8x16x2_t, \
724 uint8x16x4_t: __ARM_mve_type_uint8x16x4_t, \
725 default: _Generic(x, \
726 signed char: __ARM_mve_type_int_n, \
727 short: __ARM_mve_type_int_n, \
728 int: __ARM_mve_type_int_n, \
729 long: __ARM_mve_type_int_n, \
730 long long: __ARM_mve_type_int_n, \
731 _Float16: __ARM_mve_type_fp_n, \
732 __fp16: __ARM_mve_type_fp_n, \
733 float: __ARM_mve_type_fp_n, \
734 double: __ARM_mve_type_fp_n, \
735 unsigned char: __ARM_mve_type_int_n, \
736 unsigned short: __ARM_mve_type_int_n, \
737 unsigned int: __ARM_mve_type_int_n, \
738 unsigned long: __ARM_mve_type_int_n, \
739 unsigned long long: __ARM_mve_type_int_n, \
740 signed char*: __ARM_mve_type_int8_t_ptr, \
741 short*: __ARM_mve_type_int16_t_ptr, \
742 int*: __ARM_mve_type_int32_t_ptr, \
743 long*: __ARM_mve_type_int32_t_ptr, \
744 long long*: __ARM_mve_type_int64_t_ptr, \
745 _Float16*: __ARM_mve_type_float16_t_ptr, \
746 __fp16*: __ARM_mve_type_float16_t_ptr, \
747 float*: __ARM_mve_type_float32_t_ptr, \
748 unsigned char*: __ARM_mve_type_uint8_t_ptr, \
749 unsigned short*: __ARM_mve_type_uint16_t_ptr, \
750 unsigned int*: __ARM_mve_type_uint32_t_ptr, \
751 unsigned long*: __ARM_mve_type_uint32_t_ptr, \
752 unsigned long long*: __ARM_mve_type_uint64_t_ptr, \
753 default: __ARM_mve_unsupported_type))
754 #else
755 #define __ARM_mve_typeid(x) _Generic(x, \
756 int16_t: __ARM_mve_type_int_n, \
757 int16_t *: __ARM_mve_type_int16_t_ptr, \
758 int16_t const *: __ARM_mve_type_int16_t_ptr, \
759 int16x8_t: __ARM_mve_type_int16x8_t, \
760 int16x8x2_t: __ARM_mve_type_int16x8x2_t, \
761 int16x8x4_t: __ARM_mve_type_int16x8x4_t, \
762 int32_t: __ARM_mve_type_int_n, \
763 int32_t *: __ARM_mve_type_int32_t_ptr, \
764 int32_t const *: __ARM_mve_type_int32_t_ptr, \
765 int32x4_t: __ARM_mve_type_int32x4_t, \
766 int32x4x2_t: __ARM_mve_type_int32x4x2_t, \
767 int32x4x4_t: __ARM_mve_type_int32x4x4_t, \
768 int64_t: __ARM_mve_type_int_n, \
769 int64_t *: __ARM_mve_type_int64_t_ptr, \
770 int64_t const *: __ARM_mve_type_int64_t_ptr, \
771 int64x2_t: __ARM_mve_type_int64x2_t, \
772 int8_t: __ARM_mve_type_int_n, \
773 int8_t *: __ARM_mve_type_int8_t_ptr, \
774 int8_t const *: __ARM_mve_type_int8_t_ptr, \
775 int8x16_t: __ARM_mve_type_int8x16_t, \
776 int8x16x2_t: __ARM_mve_type_int8x16x2_t, \
777 int8x16x4_t: __ARM_mve_type_int8x16x4_t, \
778 uint16_t: __ARM_mve_type_int_n, \
779 uint16_t *: __ARM_mve_type_uint16_t_ptr, \
780 uint16_t const *: __ARM_mve_type_uint16_t_ptr, \
781 uint16x8_t: __ARM_mve_type_uint16x8_t, \
782 uint16x8x2_t: __ARM_mve_type_uint16x8x2_t, \
783 uint16x8x4_t: __ARM_mve_type_uint16x8x4_t, \
784 uint32_t: __ARM_mve_type_int_n, \
785 uint32_t *: __ARM_mve_type_uint32_t_ptr, \
786 uint32_t const *: __ARM_mve_type_uint32_t_ptr, \
787 uint32x4_t: __ARM_mve_type_uint32x4_t, \
788 uint32x4x2_t: __ARM_mve_type_uint32x4x2_t, \
789 uint32x4x4_t: __ARM_mve_type_uint32x4x4_t, \
790 uint64_t: __ARM_mve_type_int_n, \
791 uint64_t *: __ARM_mve_type_uint64_t_ptr, \
792 uint64_t const *: __ARM_mve_type_uint64_t_ptr, \
793 uint64x2_t: __ARM_mve_type_uint64x2_t, \
794 uint8_t: __ARM_mve_type_int_n, \
795 uint8_t *: __ARM_mve_type_uint8_t_ptr, \
796 uint8_t const *: __ARM_mve_type_uint8_t_ptr, \
797 uint8x16_t: __ARM_mve_type_uint8x16_t, \
798 uint8x16x2_t: __ARM_mve_type_uint8x16x2_t, \
799 uint8x16x4_t: __ARM_mve_type_uint8x16x4_t, \
800 default: _Generic(x, \
801 signed char: __ARM_mve_type_int_n, \
802 short: __ARM_mve_type_int_n, \
803 int: __ARM_mve_type_int_n, \
804 long: __ARM_mve_type_int_n, \
805 long long: __ARM_mve_type_int_n, \
806 unsigned char: __ARM_mve_type_int_n, \
807 unsigned short: __ARM_mve_type_int_n, \
808 unsigned int: __ARM_mve_type_int_n, \
809 unsigned long: __ARM_mve_type_int_n, \
810 unsigned long long: __ARM_mve_type_int_n, \
811 signed char*: __ARM_mve_type_int8_t_ptr, \
812 short*: __ARM_mve_type_int16_t_ptr, \
813 int*: __ARM_mve_type_int32_t_ptr, \
814 long*: __ARM_mve_type_int32_t_ptr, \
815 long long*: __ARM_mve_type_int64_t_ptr, \
816 unsigned char*: __ARM_mve_type_uint8_t_ptr, \
817 unsigned short*: __ARM_mve_type_uint16_t_ptr, \
818 unsigned int*: __ARM_mve_type_uint32_t_ptr, \
819 unsigned long*: __ARM_mve_type_uint32_t_ptr, \
820 unsigned long long*: __ARM_mve_type_uint64_t_ptr, \
821 default: __ARM_mve_unsupported_type))
822 #endif /* MVE Floating point. */
824 extern void *__ARM_undef;
825 #define __ARM_mve_coerce(param, type) \
826 _Generic(param, type: param, default: *(type *)__ARM_undef)
827 #define __ARM_mve_coerce_i_scalar(param, type) \
828 _Generic(param, type: param, const type: param, default: _Generic (param, int8_t: param, int16_t: param, int32_t: param, int64_t: param, uint8_t: param, uint16_t: param, uint32_t: param, uint64_t: param, default: *(type *)__ARM_undef))
830 #define __ARM_mve_coerce_s8_ptr(param, type) \
831 _Generic(param, type: param, const type: param, default: _Generic (param, signed char*: param, default: *(type *)__ARM_undef))
832 #define __ARM_mve_coerce_u8_ptr(param, type) \
833 _Generic(param, type: param, const type: param, default: _Generic (param, unsigned char*: param, default: *(type *)__ARM_undef))
835 #define __ARM_mve_coerce_s16_ptr(param, type) \
836 _Generic(param, type: param, const type: param, default: _Generic (param, short*: param, default: *(type *)__ARM_undef))
837 #define __ARM_mve_coerce_u16_ptr(param, type) \
838 _Generic(param, type: param, const type: param, default: _Generic (param, unsigned short*: param, default: *(type *)__ARM_undef))
840 #define __ARM_mve_coerce_s32_ptr(param, type) \
841 _Generic(param, type: param, const type: param, default: _Generic (param, int*: param, long*: param, default: *(type *)__ARM_undef))
842 #define __ARM_mve_coerce_u32_ptr(param, type) \
843 _Generic(param, type: param, const type: param, default: _Generic (param, unsigned int*: param, unsigned long*: param, default: *(type *)__ARM_undef))
845 #define __ARM_mve_coerce_s64_ptr(param, type) \
846 _Generic(param, type: param, const type: param, default: _Generic (param, long long*: param, default: *(type *)__ARM_undef))
847 #define __ARM_mve_coerce_u64_ptr(param, type) \
848 _Generic(param, type: param, const type: param, default: _Generic (param, unsigned long long*: param, default: *(type *)__ARM_undef))
850 #if (__ARM_FEATURE_MVE & 2) /* MVE Floating point. */
851 #define __ARM_mve_coerce_f_scalar(param, type) \
852 _Generic(param, type: param, const type: param, __fp16: param, default: _Generic (param, _Float16: param, float16_t: param, float32_t: param, default: *(type *)__ARM_undef))
853 #define __ARM_mve_coerce_f16_ptr(param, type) \
854 _Generic(param, type: param, const type: param, default: _Generic (param, __fp16*: param, _Float16*: param, default: *(type *)__ARM_undef))
855 #define __ARM_mve_coerce_f32_ptr(param, type) \
856 _Generic(param, type: param, const type: param, default: _Generic (param, float*: param, default: *(type *)__ARM_undef))
857 #endif
859 #if (__ARM_FEATURE_MVE & 2) /* MVE Floating point. */
861 #define __arm_vuninitializedq(p0) ({ __typeof(p0) __p0 = (p0); \
862 _Generic( (int (*)[__ARM_mve_typeid(__p0)])0, \
863 int (*)[__ARM_mve_type_int8x16_t]: __arm_vuninitializedq_s8 (), \
864 int (*)[__ARM_mve_type_int16x8_t]: __arm_vuninitializedq_s16 (), \
865 int (*)[__ARM_mve_type_int32x4_t]: __arm_vuninitializedq_s32 (), \
866 int (*)[__ARM_mve_type_int64x2_t]: __arm_vuninitializedq_s64 (), \
867 int (*)[__ARM_mve_type_uint8x16_t]: __arm_vuninitializedq_u8 (), \
868 int (*)[__ARM_mve_type_uint16x8_t]: __arm_vuninitializedq_u16 (), \
869 int (*)[__ARM_mve_type_uint32x4_t]: __arm_vuninitializedq_u32 (), \
870 int (*)[__ARM_mve_type_uint64x2_t]: __arm_vuninitializedq_u64 (), \
871 int (*)[__ARM_mve_type_float16x8_t]: __arm_vuninitializedq_f16 (), \
872 int (*)[__ARM_mve_type_float32x4_t]: __arm_vuninitializedq_f32 ());})
874 #define __arm_vgetq_lane(p0,p1) ({ __typeof(p0) __p0 = (p0); \
875 _Generic( (int (*)[__ARM_mve_typeid(__p0)])0, \
876 int (*)[__ARM_mve_type_int8x16_t]: __arm_vgetq_lane_s8 (__ARM_mve_coerce(__p0, int8x16_t), p1), \
877 int (*)[__ARM_mve_type_int16x8_t]: __arm_vgetq_lane_s16 (__ARM_mve_coerce(__p0, int16x8_t), p1), \
878 int (*)[__ARM_mve_type_int32x4_t]: __arm_vgetq_lane_s32 (__ARM_mve_coerce(__p0, int32x4_t), p1), \
879 int (*)[__ARM_mve_type_int64x2_t]: __arm_vgetq_lane_s64 (__ARM_mve_coerce(__p0, int64x2_t), p1), \
880 int (*)[__ARM_mve_type_uint8x16_t]: __arm_vgetq_lane_u8 (__ARM_mve_coerce(__p0, uint8x16_t), p1), \
881 int (*)[__ARM_mve_type_uint16x8_t]: __arm_vgetq_lane_u16 (__ARM_mve_coerce(__p0, uint16x8_t), p1), \
882 int (*)[__ARM_mve_type_uint32x4_t]: __arm_vgetq_lane_u32 (__ARM_mve_coerce(__p0, uint32x4_t), p1), \
883 int (*)[__ARM_mve_type_uint64x2_t]: __arm_vgetq_lane_u64 (__ARM_mve_coerce(__p0, uint64x2_t), p1), \
884 int (*)[__ARM_mve_type_float16x8_t]: __arm_vgetq_lane_f16 (__ARM_mve_coerce(__p0, float16x8_t), p1), \
885 int (*)[__ARM_mve_type_float32x4_t]: __arm_vgetq_lane_f32 (__ARM_mve_coerce(__p0, float32x4_t), p1));})
887 #define __arm_vsetq_lane(p0,p1,p2) ({ __typeof(p0) __p0 = (p0); \
888 __typeof(p1) __p1 = (p1); \
889 _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)])0, \
890 int (*)[__ARM_mve_type_int_n][__ARM_mve_type_int8x16_t]: __arm_vsetq_lane_s8 (__ARM_mve_coerce_i_scalar(__p0, int), __ARM_mve_coerce(__p1, int8x16_t), p2), \
891 int (*)[__ARM_mve_type_int_n][__ARM_mve_type_int16x8_t]: __arm_vsetq_lane_s16 (__ARM_mve_coerce_i_scalar(__p0, int), __ARM_mve_coerce(__p1, int16x8_t), p2), \
892 int (*)[__ARM_mve_type_int_n][__ARM_mve_type_int32x4_t]: __arm_vsetq_lane_s32 (__ARM_mve_coerce_i_scalar(__p0, int), __ARM_mve_coerce(__p1, int32x4_t), p2), \
893 int (*)[__ARM_mve_type_int_n][__ARM_mve_type_int64x2_t]: __arm_vsetq_lane_s64 (__ARM_mve_coerce_i_scalar(__p0, int), __ARM_mve_coerce(__p1, int64x2_t), p2), \
894 int (*)[__ARM_mve_type_int_n][__ARM_mve_type_uint8x16_t]: __arm_vsetq_lane_u8 (__ARM_mve_coerce_i_scalar(__p0, int), __ARM_mve_coerce(__p1, uint8x16_t), p2), \
895 int (*)[__ARM_mve_type_int_n][__ARM_mve_type_uint16x8_t]: __arm_vsetq_lane_u16 (__ARM_mve_coerce_i_scalar(__p0, int), __ARM_mve_coerce(__p1, uint16x8_t), p2), \
896 int (*)[__ARM_mve_type_int_n][__ARM_mve_type_uint32x4_t]: __arm_vsetq_lane_u32 (__ARM_mve_coerce_i_scalar(__p0, int), __ARM_mve_coerce(__p1, uint32x4_t), p2), \
897 int (*)[__ARM_mve_type_int_n][__ARM_mve_type_uint64x2_t]: __arm_vsetq_lane_u64 (__ARM_mve_coerce_i_scalar(__p0, int), __ARM_mve_coerce(__p1, uint64x2_t), p2), \
898 int (*)[__ARM_mve_type_fp_n][__ARM_mve_type_float16x8_t]: __arm_vsetq_lane_f16 (__ARM_mve_coerce_f_scalar(__p0, double), __ARM_mve_coerce(__p1, float16x8_t), p2), \
899 int (*)[__ARM_mve_type_fp_n][__ARM_mve_type_float32x4_t]: __arm_vsetq_lane_f32 (__ARM_mve_coerce_f_scalar(__p0, double), __ARM_mve_coerce(__p1, float32x4_t), p2));})
901 #else /* MVE Integer. */
903 #define __arm_vuninitializedq(p0) ({ __typeof(p0) __p0 = (p0); \
904 _Generic( (int (*)[__ARM_mve_typeid(__p0)])0, \
905 int (*)[__ARM_mve_type_int8x16_t]: __arm_vuninitializedq_s8 (), \
906 int (*)[__ARM_mve_type_int16x8_t]: __arm_vuninitializedq_s16 (), \
907 int (*)[__ARM_mve_type_int32x4_t]: __arm_vuninitializedq_s32 (), \
908 int (*)[__ARM_mve_type_int64x2_t]: __arm_vuninitializedq_s64 (), \
909 int (*)[__ARM_mve_type_uint8x16_t]: __arm_vuninitializedq_u8 (), \
910 int (*)[__ARM_mve_type_uint16x8_t]: __arm_vuninitializedq_u16 (), \
911 int (*)[__ARM_mve_type_uint32x4_t]: __arm_vuninitializedq_u32 (), \
912 int (*)[__ARM_mve_type_uint64x2_t]: __arm_vuninitializedq_u64 ());})
914 #define __arm_vgetq_lane(p0,p1) ({ __typeof(p0) __p0 = (p0); \
915 _Generic( (int (*)[__ARM_mve_typeid(__p0)])0, \
916 int (*)[__ARM_mve_type_int8x16_t]: __arm_vgetq_lane_s8 (__ARM_mve_coerce(__p0, int8x16_t), p1), \
917 int (*)[__ARM_mve_type_int16x8_t]: __arm_vgetq_lane_s16 (__ARM_mve_coerce(__p0, int16x8_t), p1), \
918 int (*)[__ARM_mve_type_int32x4_t]: __arm_vgetq_lane_s32 (__ARM_mve_coerce(__p0, int32x4_t), p1), \
919 int (*)[__ARM_mve_type_int64x2_t]: __arm_vgetq_lane_s64 (__ARM_mve_coerce(__p0, int64x2_t), p1), \
920 int (*)[__ARM_mve_type_uint8x16_t]: __arm_vgetq_lane_u8 (__ARM_mve_coerce(__p0, uint8x16_t), p1), \
921 int (*)[__ARM_mve_type_uint16x8_t]: __arm_vgetq_lane_u16 (__ARM_mve_coerce(__p0, uint16x8_t), p1), \
922 int (*)[__ARM_mve_type_uint32x4_t]: __arm_vgetq_lane_u32 (__ARM_mve_coerce(__p0, uint32x4_t), p1), \
923 int (*)[__ARM_mve_type_uint64x2_t]: __arm_vgetq_lane_u64 (__ARM_mve_coerce(__p0, uint64x2_t), p1));})
925 #define __arm_vsetq_lane(p0,p1,p2) ({ __typeof(p0) __p0 = (p0); \
926 __typeof(p1) __p1 = (p1); \
927 _Generic( (int (*)[__ARM_mve_typeid(__p0)][__ARM_mve_typeid(__p1)])0, \
928 int (*)[__ARM_mve_type_int_n][__ARM_mve_type_int8x16_t]: __arm_vsetq_lane_s8 (__ARM_mve_coerce_i_scalar(__p0, int), __ARM_mve_coerce(__p1, int8x16_t), p2), \
929 int (*)[__ARM_mve_type_int_n][__ARM_mve_type_int16x8_t]: __arm_vsetq_lane_s16 (__ARM_mve_coerce_i_scalar(__p0, int), __ARM_mve_coerce(__p1, int16x8_t), p2), \
930 int (*)[__ARM_mve_type_int_n][__ARM_mve_type_int32x4_t]: __arm_vsetq_lane_s32 (__ARM_mve_coerce_i_scalar(__p0, int), __ARM_mve_coerce(__p1, int32x4_t), p2), \
931 int (*)[__ARM_mve_type_int_n][__ARM_mve_type_int64x2_t]: __arm_vsetq_lane_s64 (__ARM_mve_coerce_i_scalar(__p0, int), __ARM_mve_coerce(__p1, int64x2_t), p2), \
932 int (*)[__ARM_mve_type_int_n][__ARM_mve_type_uint8x16_t]: __arm_vsetq_lane_u8 (__ARM_mve_coerce_i_scalar(__p0, int), __ARM_mve_coerce(__p1, uint8x16_t), p2), \
933 int (*)[__ARM_mve_type_int_n][__ARM_mve_type_uint16x8_t]: __arm_vsetq_lane_u16 (__ARM_mve_coerce_i_scalar(__p0, int), __ARM_mve_coerce(__p1, uint16x8_t), p2), \
934 int (*)[__ARM_mve_type_int_n][__ARM_mve_type_uint32x4_t]: __arm_vsetq_lane_u32 (__ARM_mve_coerce_i_scalar(__p0, int), __ARM_mve_coerce(__p1, uint32x4_t), p2), \
935 int (*)[__ARM_mve_type_int_n][__ARM_mve_type_uint64x2_t]: __arm_vsetq_lane_u64 (__ARM_mve_coerce_i_scalar(__p0, int), __ARM_mve_coerce(__p1, uint64x2_t), p2));})
937 #endif /* MVE Integer. */
939 #endif /* __cplusplus */
940 #endif /* __ARM_FEATURE_MVE */
941 #endif /* _GCC_ARM_MVE_H. */