1 /* Builtin lists for AArch64 SVE
2 Copyright (C
) 2018-2025 Free Software Foundation
, Inc.
4 This file is part of GCC.
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
)
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.
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
/>.
*/
21 #define
DEF_SVE_MODE(A
, B
, C
, D
)
25 #define
DEF_SVE_TYPE(A
, B
, C
, D
)
28 #ifndef DEF_SVE_TYPE_SUFFIX
29 #define
DEF_SVE_TYPE_SUFFIX(A
, B
, C
, D
, E
)
32 #ifndef DEF_SME_ZA_SUFFIX
33 #define
DEF_SME_ZA_SUFFIX(A
, B
, C
)
36 #ifndef DEF_SVE_GROUP_SUFFIX
37 #define
DEF_SVE_GROUP_SUFFIX(A
, B
, C
)
40 #ifndef DEF_SVE_FUNCTION_GS_FPM
41 #define
DEF_SVE_FUNCTION_GS_FPM(A
, B
, C
, D
, E
, F
)
44 #ifndef DEF_SVE_FUNCTION_GS
45 #define
DEF_SVE_FUNCTION_GS(A
, B
, C
, D
, E
) \
46 DEF_SVE_FUNCTION_GS_FPM(A
, B
, C
, D
, E
, unused
)
49 #ifndef DEF_SVE_NEON_TYPE_SUFFIX
50 #define
DEF_SVE_NEON_TYPE_SUFFIX(A
, B
, C
, D
, E
, F
, G
) \
51 DEF_SVE_TYPE_SUFFIX(A
, B
, C
, D
, E
)
54 #ifndef DEF_SVE_FUNCTION
55 #define
DEF_SVE_FUNCTION(NAME
, SHAPE
, TYPES
, PREDS
) \
56 DEF_SVE_FUNCTION_GS (NAME
, SHAPE
, TYPES
, none
, PREDS
)
59 DEF_SVE_MODE (n
, none
, none
, none
)
60 DEF_SVE_MODE (single
, none
, none
, none
)
61 DEF_SVE_MODE (index
, none
, none
, elements
)
62 DEF_SVE_MODE (offset
, none
, none
, bytes
)
63 DEF_SVE_MODE (s32index
, none
, svint32_t
, elements
)
64 DEF_SVE_MODE (s32offset
, none
, svint32_t
, bytes
)
65 DEF_SVE_MODE (s64index
, none
, svint64_t
, elements
)
66 DEF_SVE_MODE (s64offset
, none
, svint64_t
, bytes
)
67 DEF_SVE_MODE (u32base
, svuint32_t
, none
, none
)
68 DEF_SVE_MODE (u32base_index
, svuint32_t
, none
, elements
)
69 DEF_SVE_MODE (u32base_offset
, svuint32_t
, none
, bytes
)
70 DEF_SVE_MODE (u32base_s32index
, svuint32_t
, svint32_t
, elements
)
71 DEF_SVE_MODE (u32base_s32offset
, svuint32_t
, svint32_t
, bytes
)
72 DEF_SVE_MODE (u32base_u32index
, svuint32_t
, svuint32_t
, elements
)
73 DEF_SVE_MODE (u32base_u32offset
, svuint32_t
, svuint32_t
, bytes
)
74 DEF_SVE_MODE (u32index
, none
, svuint32_t
, elements
)
75 DEF_SVE_MODE (u32offset
, none
, svuint32_t
, bytes
)
76 DEF_SVE_MODE (u64base
, svuint64_t
, none
, none
)
77 DEF_SVE_MODE (u64base_index
, svuint64_t
, none
, elements
)
78 DEF_SVE_MODE (u64base_offset
, svuint64_t
, none
, bytes
)
79 DEF_SVE_MODE (u64base_s64index
, svuint64_t
, svint64_t
, elements
)
80 DEF_SVE_MODE (u64base_s64offset
, svuint64_t
, svint64_t
, bytes
)
81 DEF_SVE_MODE (u64base_u64index
, svuint64_t
, svuint64_t
, elements
)
82 DEF_SVE_MODE (u64base_u64offset
, svuint64_t
, svuint64_t
, bytes
)
83 DEF_SVE_MODE (u64index
, none
, svuint64_t
, elements
)
84 DEF_SVE_MODE (u64offset
, none
, svuint64_t
, bytes
)
85 DEF_SVE_MODE (vnum
, none
, none
, vectors
)
87 DEF_SVE_TYPE (svbool_t
, 10, __SVBool_t
, boolean_type_node
)
88 DEF_SVE_TYPE (svcount_t
, 11, __SVCount_t
, boolean_type_node
)
89 DEF_SVE_TYPE (svmfloat8_t
, 13, __SVMfloat8_t
, aarch64_mfp8_type_node
)
90 DEF_SVE_TYPE (svbfloat16_t
, 14, __SVBfloat16_t
, bfloat16_type_node
)
91 DEF_SVE_TYPE (svfloat16_t
, 13, __SVFloat16_t
, aarch64_fp16_type_node
)
92 DEF_SVE_TYPE (svfloat32_t
, 13, __SVFloat32_t
, float_type_node
)
93 DEF_SVE_TYPE (svfloat64_t
, 13, __SVFloat64_t
, double_type_node
)
94 DEF_SVE_TYPE (svint8_t
, 10, __SVInt8_t
, get_typenode_from_name (INT8_TYPE
))
95 DEF_SVE_TYPE (svint16_t
, 11, __SVInt16_t
, get_typenode_from_name (INT16_TYPE
))
96 DEF_SVE_TYPE (svint32_t
, 11, __SVInt32_t
, get_typenode_from_name (INT32_TYPE
))
97 DEF_SVE_TYPE (svint64_t
, 11, __SVInt64_t
, get_typenode_from_name (INT64_TYPE
))
98 DEF_SVE_TYPE (svuint8_t
, 11, __SVUint8_t
, get_typenode_from_name (UINT8_TYPE
))
99 DEF_SVE_TYPE (svuint16_t
, 12, __SVUint16_t
,
100 get_typenode_from_name (UINT16_TYPE
))
101 DEF_SVE_TYPE (svuint32_t
, 12, __SVUint32_t
,
102 get_typenode_from_name (UINT32_TYPE
))
103 DEF_SVE_TYPE (svuint64_t
, 12, __SVUint64_t
,
104 get_typenode_from_name (UINT64_TYPE
))
106 DEF_SVE_TYPE_SUFFIX (b
, svbool_t
, bool
, 8, VNx16BImode
)
107 DEF_SVE_TYPE_SUFFIX (b8
, svbool_t
, bool
, 8, VNx16BImode
)
108 DEF_SVE_TYPE_SUFFIX (b16
, svbool_t
, bool
, 16, VNx8BImode
)
109 DEF_SVE_TYPE_SUFFIX (b32
, svbool_t
, bool
, 32, VNx4BImode
)
110 DEF_SVE_TYPE_SUFFIX (b64
, svbool_t
, bool
, 64, VNx2BImode
)
111 DEF_SVE_TYPE_SUFFIX (c
, svcount_t
, count
, 8, VNx16BImode
)
112 DEF_SVE_TYPE_SUFFIX (c8
, svcount_t
, count
, 8, VNx16BImode
)
113 DEF_SVE_TYPE_SUFFIX (c16
, svcount_t
, count
, 16, VNx16BImode
)
114 DEF_SVE_TYPE_SUFFIX (c32
, svcount_t
, count
, 32, VNx16BImode
)
115 DEF_SVE_TYPE_SUFFIX (c64
, svcount_t
, count
, 64, VNx16BImode
)
116 DEF_SVE_NEON_TYPE_SUFFIX (mf8
, svmfloat8_t
, mfloat
, 8, VNx16QImode
,
117 Mfloat8x8_t
, Mfloat8x16_t
)
118 DEF_SVE_NEON_TYPE_SUFFIX (bf16
, svbfloat16_t
, bfloat
, 16, VNx8BFmode
,
119 Bfloat16x4_t
, Bfloat16x8_t
)
120 DEF_SVE_NEON_TYPE_SUFFIX (f16
, svfloat16_t
, float
, 16, VNx8HFmode
,
121 Float16x4_t
, Float16x8_t
)
122 DEF_SVE_NEON_TYPE_SUFFIX (f32
, svfloat32_t
, float
, 32, VNx4SFmode
,
123 Float32x2_t
, Float32x4_t
)
124 DEF_SVE_NEON_TYPE_SUFFIX (f64
, svfloat64_t
, float
, 64, VNx2DFmode
,
125 Float64x1_t
, Float64x2_t
)
126 DEF_SVE_NEON_TYPE_SUFFIX (s8
, svint8_t
, signed
, 8, VNx16QImode
,
128 DEF_SVE_NEON_TYPE_SUFFIX (s16
, svint16_t
, signed
, 16, VNx8HImode
,
129 Int16x4_t
, Int16x8_t
)
130 DEF_SVE_NEON_TYPE_SUFFIX (s32
, svint32_t
, signed
, 32, VNx4SImode
,
131 Int32x2_t
, Int32x4_t
)
132 DEF_SVE_NEON_TYPE_SUFFIX (s64
, svint64_t
, signed
, 64, VNx2DImode
,
133 Int64x1_t
, Int64x2_t
)
134 DEF_SVE_NEON_TYPE_SUFFIX (u8
, svuint8_t
, unsigned
, 8, VNx16QImode
,
135 Uint8x8_t
, Uint8x16_t
)
136 DEF_SVE_NEON_TYPE_SUFFIX (u16
, svuint16_t
, unsigned
, 16, VNx8HImode
,
137 Uint16x4_t
, Uint16x8_t
)
138 DEF_SVE_NEON_TYPE_SUFFIX (u32
, svuint32_t
, unsigned
, 32, VNx4SImode
,
139 Uint32x2_t
, Uint32x4_t
)
140 DEF_SVE_NEON_TYPE_SUFFIX (u64
, svuint64_t
, unsigned
, 64, VNx2DImode
,
141 Uint64x1_t
, Uint64x2_t
)
143 /* Associate _za with bytes. This is needed for svldr_vnum_za and
144 svstr_vnum_za
, whose ZA offset can be in the range
[0, 15], as for za8.
*/
145 DEF_SME_ZA_SUFFIX (za
, 8, VNx16QImode
)
147 DEF_SME_ZA_SUFFIX (za8
, 8, VNx16QImode
)
148 DEF_SME_ZA_SUFFIX (za16
, 16, VNx8HImode
)
149 DEF_SME_ZA_SUFFIX (za32
, 32, VNx4SImode
)
150 DEF_SME_ZA_SUFFIX (za64
, 64, VNx2DImode
)
151 DEF_SME_ZA_SUFFIX (za128
, 128, VNx1TImode
)
153 DEF_SVE_GROUP_SUFFIX (x2
, 0, 2)
154 DEF_SVE_GROUP_SUFFIX (x3
, 0, 3)
155 DEF_SVE_GROUP_SUFFIX (x4
, 0, 4)
156 DEF_SVE_GROUP_SUFFIX (vg1x2
, 1, 2)
157 DEF_SVE_GROUP_SUFFIX (vg1x4
, 1, 4)
158 DEF_SVE_GROUP_SUFFIX (vg2
, 2, 2)
159 DEF_SVE_GROUP_SUFFIX (vg2x1
, 2, 1)
160 DEF_SVE_GROUP_SUFFIX (vg2x2
, 2, 2)
161 DEF_SVE_GROUP_SUFFIX (vg2x4
, 2, 4)
162 DEF_SVE_GROUP_SUFFIX (vg4
, 4, 4)
163 DEF_SVE_GROUP_SUFFIX (vg4x1
, 4, 1)
164 DEF_SVE_GROUP_SUFFIX (vg4x2
, 4, 2)
165 DEF_SVE_GROUP_SUFFIX (vg4x4
, 4, 4)
167 #include
"aarch64-sve-builtins-base.def"
168 #include
"aarch64-sve-builtins-sve2.def"
170 #undef DEF_SVE_FUNCTION
171 #undef DEF_SVE_FUNCTION_GS
172 #undef DEF_SVE_FUNCTION_GS_FPM
173 #undef DEF_SVE_GROUP_SUFFIX
174 #undef DEF_SME_ZA_SUFFIX
175 #undef DEF_SVE_NEON_TYPE_SUFFIX
176 #undef DEF_SVE_TYPE_SUFFIX