]> git.ipfire.org Git - thirdparty/gcc.git/blob - gcc/config/aarch64/aarch64-sve-builtins.def
Update copyright years.
[thirdparty/gcc.git] / gcc / config / aarch64 / aarch64-sve-builtins.def
1 /* Builtin lists for AArch64 SVE
2 Copyright (C) 2018-2024 Free Software Foundation, Inc.
3
4 This file is part of GCC.
5
6 GCC is free software; you can redistribute it and/or modify it
7 under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 3, or (at your option)
9 any later version.
10
11 GCC is distributed in the hope that it will be useful, but
12 WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with GCC; see the file COPYING3. If not see
18 <http://www.gnu.org/licenses/>. */
19
20 #ifndef DEF_SVE_MODE
21 #define DEF_SVE_MODE(A, B, C, D)
22 #endif
23
24 #ifndef DEF_SVE_TYPE
25 #define DEF_SVE_TYPE(A, B, C, D)
26 #endif
27
28 #ifndef DEF_SVE_TYPE_SUFFIX
29 #define DEF_SVE_TYPE_SUFFIX(A, B, C, D, E)
30 #endif
31
32 #ifndef DEF_SME_ZA_SUFFIX
33 #define DEF_SME_ZA_SUFFIX(A, B, C)
34 #endif
35
36 #ifndef DEF_SVE_GROUP_SUFFIX
37 #define DEF_SVE_GROUP_SUFFIX(A, B, C)
38 #endif
39
40 #ifndef DEF_SVE_FUNCTION_GS
41 #define DEF_SVE_FUNCTION_GS(A, B, C, D, E)
42 #endif
43
44 #ifndef DEF_SVE_NEON_TYPE_SUFFIX
45 #define DEF_SVE_NEON_TYPE_SUFFIX(A, B, C, D, E, F, G) \
46 DEF_SVE_TYPE_SUFFIX(A, B, C, D, E)
47 #endif
48
49 #ifndef DEF_SVE_FUNCTION
50 #define DEF_SVE_FUNCTION(NAME, SHAPE, TYPES, PREDS) \
51 DEF_SVE_FUNCTION_GS (NAME, SHAPE, TYPES, none, PREDS)
52 #endif
53
54 #ifndef DEF_SME_ZA_FUNCTION_GS
55 #define DEF_SME_ZA_FUNCTION_GS(NAME, SHAPE, TYPES, GROUP, PREDS) \
56 DEF_SVE_FUNCTION_GS(NAME, SHAPE, TYPES, GROUP, PREDS)
57 #endif
58
59 #ifndef DEF_SME_ZA_FUNCTION
60 #define DEF_SME_ZA_FUNCTION(NAME, SHAPE, TYPES, PREDS) \
61 DEF_SME_ZA_FUNCTION_GS (NAME, SHAPE, TYPES, none, PREDS)
62 #endif
63
64 DEF_SVE_MODE (n, none, none, none)
65 DEF_SVE_MODE (single, none, none, none)
66 DEF_SVE_MODE (index, none, none, elements)
67 DEF_SVE_MODE (offset, none, none, bytes)
68 DEF_SVE_MODE (s32index, none, svint32_t, elements)
69 DEF_SVE_MODE (s32offset, none, svint32_t, bytes)
70 DEF_SVE_MODE (s64index, none, svint64_t, elements)
71 DEF_SVE_MODE (s64offset, none, svint64_t, bytes)
72 DEF_SVE_MODE (u32base, svuint32_t, none, none)
73 DEF_SVE_MODE (u32base_index, svuint32_t, none, elements)
74 DEF_SVE_MODE (u32base_offset, svuint32_t, none, bytes)
75 DEF_SVE_MODE (u32base_s32index, svuint32_t, svint32_t, elements)
76 DEF_SVE_MODE (u32base_s32offset, svuint32_t, svint32_t, bytes)
77 DEF_SVE_MODE (u32base_u32index, svuint32_t, svuint32_t, elements)
78 DEF_SVE_MODE (u32base_u32offset, svuint32_t, svuint32_t, bytes)
79 DEF_SVE_MODE (u32index, none, svuint32_t, elements)
80 DEF_SVE_MODE (u32offset, none, svuint32_t, bytes)
81 DEF_SVE_MODE (u64base, svuint64_t, none, none)
82 DEF_SVE_MODE (u64base_index, svuint64_t, none, elements)
83 DEF_SVE_MODE (u64base_offset, svuint64_t, none, bytes)
84 DEF_SVE_MODE (u64base_s64index, svuint64_t, svint64_t, elements)
85 DEF_SVE_MODE (u64base_s64offset, svuint64_t, svint64_t, bytes)
86 DEF_SVE_MODE (u64base_u64index, svuint64_t, svuint64_t, elements)
87 DEF_SVE_MODE (u64base_u64offset, svuint64_t, svuint64_t, bytes)
88 DEF_SVE_MODE (u64index, none, svuint64_t, elements)
89 DEF_SVE_MODE (u64offset, none, svuint64_t, bytes)
90 DEF_SVE_MODE (vnum, none, none, vectors)
91
92 DEF_SVE_TYPE (svbool_t, 10, __SVBool_t, boolean_type_node)
93 DEF_SVE_TYPE (svcount_t, 11, __SVCount_t, boolean_type_node)
94 DEF_SVE_TYPE (svbfloat16_t, 14, __SVBfloat16_t, bfloat16_type_node)
95 DEF_SVE_TYPE (svfloat16_t, 13, __SVFloat16_t, aarch64_fp16_type_node)
96 DEF_SVE_TYPE (svfloat32_t, 13, __SVFloat32_t, float_type_node)
97 DEF_SVE_TYPE (svfloat64_t, 13, __SVFloat64_t, double_type_node)
98 DEF_SVE_TYPE (svint8_t, 10, __SVInt8_t, get_typenode_from_name (INT8_TYPE))
99 DEF_SVE_TYPE (svint16_t, 11, __SVInt16_t, get_typenode_from_name (INT16_TYPE))
100 DEF_SVE_TYPE (svint32_t, 11, __SVInt32_t, get_typenode_from_name (INT32_TYPE))
101 DEF_SVE_TYPE (svint64_t, 11, __SVInt64_t, get_typenode_from_name (INT64_TYPE))
102 DEF_SVE_TYPE (svuint8_t, 11, __SVUint8_t, get_typenode_from_name (UINT8_TYPE))
103 DEF_SVE_TYPE (svuint16_t, 12, __SVUint16_t,
104 get_typenode_from_name (UINT16_TYPE))
105 DEF_SVE_TYPE (svuint32_t, 12, __SVUint32_t,
106 get_typenode_from_name (UINT32_TYPE))
107 DEF_SVE_TYPE (svuint64_t, 12, __SVUint64_t,
108 get_typenode_from_name (UINT64_TYPE))
109
110 DEF_SVE_TYPE_SUFFIX (b, svbool_t, bool, 8, VNx16BImode)
111 DEF_SVE_TYPE_SUFFIX (b8, svbool_t, bool, 8, VNx16BImode)
112 DEF_SVE_TYPE_SUFFIX (b16, svbool_t, bool, 16, VNx8BImode)
113 DEF_SVE_TYPE_SUFFIX (b32, svbool_t, bool, 32, VNx4BImode)
114 DEF_SVE_TYPE_SUFFIX (b64, svbool_t, bool, 64, VNx2BImode)
115 DEF_SVE_TYPE_SUFFIX (c, svcount_t, count, 8, VNx16BImode)
116 DEF_SVE_TYPE_SUFFIX (c8, svcount_t, count, 8, VNx16BImode)
117 DEF_SVE_TYPE_SUFFIX (c16, svcount_t, count, 16, VNx16BImode)
118 DEF_SVE_TYPE_SUFFIX (c32, svcount_t, count, 32, VNx16BImode)
119 DEF_SVE_TYPE_SUFFIX (c64, svcount_t, count, 64, VNx16BImode)
120 DEF_SVE_NEON_TYPE_SUFFIX (bf16, svbfloat16_t, bfloat, 16, VNx8BFmode,
121 Bfloat16x4_t, Bfloat16x8_t)
122 DEF_SVE_NEON_TYPE_SUFFIX (f16, svfloat16_t, float, 16, VNx8HFmode,
123 Float16x4_t, Float16x8_t)
124 DEF_SVE_NEON_TYPE_SUFFIX (f32, svfloat32_t, float, 32, VNx4SFmode,
125 Float32x2_t, Float32x4_t)
126 DEF_SVE_NEON_TYPE_SUFFIX (f64, svfloat64_t, float, 64, VNx2DFmode,
127 Float64x1_t, Float64x2_t)
128 DEF_SVE_NEON_TYPE_SUFFIX (s8, svint8_t, signed, 8, VNx16QImode,
129 Int8x8_t, Int8x16_t)
130 DEF_SVE_NEON_TYPE_SUFFIX (s16, svint16_t, signed, 16, VNx8HImode,
131 Int16x4_t, Int16x8_t)
132 DEF_SVE_NEON_TYPE_SUFFIX (s32, svint32_t, signed, 32, VNx4SImode,
133 Int32x2_t, Int32x4_t)
134 DEF_SVE_NEON_TYPE_SUFFIX (s64, svint64_t, signed, 64, VNx2DImode,
135 Int64x1_t, Int64x2_t)
136 DEF_SVE_NEON_TYPE_SUFFIX (u8, svuint8_t, unsigned, 8, VNx16QImode,
137 Uint8x8_t, Uint8x16_t)
138 DEF_SVE_NEON_TYPE_SUFFIX (u16, svuint16_t, unsigned, 16, VNx8HImode,
139 Uint16x4_t, Uint16x8_t)
140 DEF_SVE_NEON_TYPE_SUFFIX (u32, svuint32_t, unsigned, 32, VNx4SImode,
141 Uint32x2_t, Uint32x4_t)
142 DEF_SVE_NEON_TYPE_SUFFIX (u64, svuint64_t, unsigned, 64, VNx2DImode,
143 Uint64x1_t, Uint64x2_t)
144
145 /* Associate _za with bytes. This is needed for svldr_vnum_za and
146 svstr_vnum_za, whose ZA offset can be in the range [0, 15], as for za8. */
147 DEF_SME_ZA_SUFFIX (za, 8, VNx16QImode)
148
149 DEF_SME_ZA_SUFFIX (za8, 8, VNx16QImode)
150 DEF_SME_ZA_SUFFIX (za16, 16, VNx8HImode)
151 DEF_SME_ZA_SUFFIX (za32, 32, VNx4SImode)
152 DEF_SME_ZA_SUFFIX (za64, 64, VNx2DImode)
153 DEF_SME_ZA_SUFFIX (za128, 128, VNx1TImode)
154
155 DEF_SVE_GROUP_SUFFIX (x2, 0, 2)
156 DEF_SVE_GROUP_SUFFIX (x3, 0, 3)
157 DEF_SVE_GROUP_SUFFIX (x4, 0, 4)
158 DEF_SVE_GROUP_SUFFIX (vg1x2, 1, 2)
159 DEF_SVE_GROUP_SUFFIX (vg1x4, 1, 4)
160 DEF_SVE_GROUP_SUFFIX (vg2, 2, 2)
161 DEF_SVE_GROUP_SUFFIX (vg2x1, 2, 1)
162 DEF_SVE_GROUP_SUFFIX (vg2x2, 2, 2)
163 DEF_SVE_GROUP_SUFFIX (vg2x4, 2, 4)
164 DEF_SVE_GROUP_SUFFIX (vg4, 4, 4)
165 DEF_SVE_GROUP_SUFFIX (vg4x1, 4, 1)
166 DEF_SVE_GROUP_SUFFIX (vg4x2, 4, 2)
167 DEF_SVE_GROUP_SUFFIX (vg4x4, 4, 4)
168
169 #include "aarch64-sve-builtins-base.def"
170 #include "aarch64-sve-builtins-sve2.def"
171 #include "aarch64-sve-builtins-sme.def"
172
173 #undef DEF_SME_ZA_FUNCTION
174 #undef DEF_SVE_FUNCTION
175 #undef DEF_SME_ZA_FUNCTION_GS
176 #undef DEF_SVE_FUNCTION_GS
177 #undef DEF_SVE_GROUP_SUFFIX
178 #undef DEF_SME_ZA_SUFFIX
179 #undef DEF_SVE_NEON_TYPE_SUFFIX
180 #undef DEF_SVE_TYPE_SUFFIX
181 #undef DEF_SVE_TYPE
182 #undef DEF_SVE_MODE