1 /*===---- arm_neon_sve_bridge.h - ARM NEON SVE Bridge intrinsics -----------===
2  *
3  *
4  * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5  * See https://llvm.org/LICENSE.txt for license information.
6  * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7  *
8  *===-----------------------------------------------------------------------===
9  */
10 
11 #ifndef __ARM_NEON_SVE_BRIDGE_H
12 #define __ARM_NEON_SVE_BRIDGE_H
13 
14 #include <arm_neon.h>
15 #include <arm_sve.h>
16 
17 #ifdef __cplusplus
18 extern "C" {
19 #endif
20 
21 /* Function attributes */
22 #define __ai static __inline__ __attribute__((__always_inline__, __nodebug__))
23 #define __aio                                                                  \
24   static __inline__                                                            \
25       __attribute__((__always_inline__, __nodebug__, __overloadable__))
26 
27 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_s8)))
28 svint8_t svset_neonq(svint8_t, int8x16_t);
29 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_s16)))
30 svint16_t svset_neonq(svint16_t, int16x8_t);
31 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_s32)))
32 svint32_t svset_neonq(svint32_t, int32x4_t);
33 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_s64)))
34 svint64_t svset_neonq(svint64_t, int64x2_t);
35 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_u8)))
36 svuint8_t svset_neonq(svuint8_t, uint8x16_t);
37 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_u16)))
38 svuint16_t svset_neonq(svuint16_t, uint16x8_t);
39 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_u32)))
40 svuint32_t svset_neonq(svuint32_t, uint32x4_t);
41 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_u64)))
42 svuint64_t svset_neonq(svuint64_t, uint64x2_t);
43 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_f16)))
44 svfloat16_t svset_neonq(svfloat16_t, float16x8_t);
45 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_f32)))
46 svfloat32_t svset_neonq(svfloat32_t, float32x4_t);
47 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_f64)))
48 svfloat64_t svset_neonq(svfloat64_t, float64x2_t);
49 __ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_s8)))
50 svint8_t svset_neonq_s8(svint8_t, int8x16_t);
51 __ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_s16)))
52 svint16_t svset_neonq_s16(svint16_t, int16x8_t);
53 __ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_s32)))
54 svint32_t svset_neonq_s32(svint32_t, int32x4_t);
55 __ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_s64)))
56 svint64_t svset_neonq_s64(svint64_t, int64x2_t);
57 __ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_u8)))
58 svuint8_t svset_neonq_u8(svuint8_t, uint8x16_t);
59 __ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_u16)))
60 svuint16_t svset_neonq_u16(svuint16_t, uint16x8_t);
61 __ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_u32)))
62 svuint32_t svset_neonq_u32(svuint32_t, uint32x4_t);
63 __ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_u64)))
64 svuint64_t svset_neonq_u64(svuint64_t, uint64x2_t);
65 __ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_f16)))
66 svfloat16_t svset_neonq_f16(svfloat16_t, float16x8_t);
67 __ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_f32)))
68 svfloat32_t svset_neonq_f32(svfloat32_t, float32x4_t);
69 __ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_f64)))
70 svfloat64_t svset_neonq_f64(svfloat64_t, float64x2_t);
71 
72 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_s8)))
73 int8x16_t svget_neonq(svint8_t);
74 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_s16)))
75 int16x8_t svget_neonq(svint16_t);
76 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_s32)))
77 int32x4_t svget_neonq(svint32_t);
78 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_s64)))
79 int64x2_t svget_neonq(svint64_t);
80 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_u8)))
81 uint8x16_t svget_neonq(svuint8_t);
82 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_u16)))
83 uint16x8_t svget_neonq(svuint16_t);
84 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_u32)))
85 uint32x4_t svget_neonq(svuint32_t);
86 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_u64)))
87 uint64x2_t svget_neonq(svuint64_t);
88 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_f16)))
89 float16x8_t svget_neonq(svfloat16_t);
90 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_f32)))
91 float32x4_t svget_neonq(svfloat32_t);
92 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_f64)))
93 float64x2_t svget_neonq(svfloat64_t);
94 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_s8)))
95 int8x16_t svget_neonq_s8(svint8_t);
96 __ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_s16)))
97 int16x8_t svget_neonq_s16(svint16_t);
98 __ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_s32)))
99 int32x4_t svget_neonq_s32(svint32_t);
100 __ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_s64)))
101 int64x2_t svget_neonq_s64(svint64_t);
102 __ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_u8)))
103 uint8x16_t svget_neonq_u8(svuint8_t);
104 __ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_u16)))
105 uint16x8_t svget_neonq_u16(svuint16_t);
106 __ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_u32)))
107 uint32x4_t svget_neonq_u32(svuint32_t);
108 __ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_u64)))
109 uint64x2_t svget_neonq_u64(svuint64_t);
110 __ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_f16)))
111 float16x8_t svget_neonq_f16(svfloat16_t);
112 __ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_f32)))
113 float32x4_t svget_neonq_f32(svfloat32_t);
114 __ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_f64)))
115 float64x2_t svget_neonq_f64(svfloat64_t);
116 
117 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_s8)))
118 svint8_t svdup_neonq(int8x16_t);
119 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_s16)))
120 svint16_t svdup_neonq(int16x8_t);
121 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_s32)))
122 svint32_t svdup_neonq(int32x4_t);
123 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_s64)))
124 svint64_t svdup_neonq(int64x2_t);
125 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_u8)))
126 svuint8_t svdup_neonq(uint8x16_t);
127 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_u16)))
128 svuint16_t svdup_neonq(uint16x8_t);
129 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_u32)))
130 svuint32_t svdup_neonq(uint32x4_t);
131 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_u64)))
132 svuint64_t svdup_neonq(uint64x2_t);
133 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_f16)))
134 svfloat16_t svdup_neonq(float16x8_t);
135 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_f32)))
136 svfloat32_t svdup_neonq(float32x4_t);
137 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_f64)))
138 svfloat64_t svdup_neonq(float64x2_t);
139 __ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_s8)))
140 svint8_t svdup_neonq_s8(int8x16_t);
141 __ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_s16)))
142 svint16_t svdup_neonq_s16(int16x8_t);
143 __ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_s32)))
144 svint32_t svdup_neonq_s32(int32x4_t);
145 __ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_s64)))
146 svint64_t svdup_neonq_s64(int64x2_t);
147 __ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_u8)))
148 svuint8_t svdup_neonq_u8(uint8x16_t);
149 __ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_u16)))
150 svuint16_t svdup_neonq_u16(uint16x8_t);
151 __ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_u32)))
152 svuint32_t svdup_neonq_u32(uint32x4_t);
153 __ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_u64)))
154 svuint64_t svdup_neonq_u64(uint64x2_t);
155 __ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_f16)))
156 svfloat16_t svdup_neonq_f16(float16x8_t);
157 __ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_f32)))
158 svfloat32_t svdup_neonq_f32(float32x4_t);
159 __ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_f64)))
160 svfloat64_t svdup_neonq_f64(float64x2_t);
161 
162 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_bf16)))
163 svbfloat16_t svset_neonq(svbfloat16_t, bfloat16x8_t);
164 __ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_bf16)))
165 svbfloat16_t svset_neonq_bf16(svbfloat16_t, bfloat16x8_t);
166 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_bf16)))
167 bfloat16x8_t svget_neonq(svbfloat16_t);
168 __ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_bf16)))
169 bfloat16x8_t svget_neonq_bf16(svbfloat16_t);
170 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_bf16)))
171 svbfloat16_t svdup_neonq(bfloat16x8_t);
172 __ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_bf16)))
173 svbfloat16_t svdup_neonq_bf16(bfloat16x8_t);
174 
175 #undef __ai
176 #undef __aio
177 
178 #ifdef __cplusplus
179 } // extern "C"
180 #endif
181 
182 #endif //__ARM_NEON_SVE_BRIDGE_H
183