]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/config/aarch64/aarch64-sve-builtins-shapes.h
Update copyright years.
[thirdparty/gcc.git] / gcc / config / aarch64 / aarch64-sve-builtins-shapes.h
CommitLineData
624d0f07 1/* ACLE support for AArch64 SVE (function shapes)
7adcbafe 2 Copyright (C) 2018-2022 Free Software Foundation, Inc.
624d0f07
RS
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 GCC_AARCH64_SVE_BUILTINS_SHAPES_H
21#define GCC_AARCH64_SVE_BUILTINS_SHAPES_H
22
23namespace aarch64_sve
24{
25 /* The naming convention is:
26
27 - to use the name of the function if the rules are very specific to
28 a particular function (e.g. svext, for which the range of the
29 final immediate value is in no way generic).
30
31 - to use names like "unary" etc. if the rules are somewhat generic,
32 especially if there are no ranges involved.
33
34 When using generic names, the handling of the final vector argument
35 can be modified as follows:
36
37 - an "_n" suffix changes the argument from a vector to a scalar.
38
39 - an "_opt_n" suffix says that there are two forms of each function:
40 one in which the argument is the usual vector, and one in which it
41 is replaced by a scalar.
42
43 - "_int" and "_uint" replace the argument's element type with a
44 signed or unsigned integer of the same width. The suffixes above
45 then indicate whether this final argument is or might be a scalar.
46
47 - "_int64" and "_uint64" similarly replace the argument's element type
48 with int64_t or uint64_t.
49
50 - "_wide" replaces the argument's element type with a 64-bit integer
51 of the same signedness. This only makes sense for integer elements.
52
53 - "_lane" indicates that the argument is indexed by a constant lane
54 number, provided as an immediately-following argument of type uint64_t.
55
56 Also:
57
58 - "inherent" means that the function takes no arguments.
59
60 - "_rotate" means that the final argument is a rotation amount
61 (0, 90, 180 or 270).
62
63 - "_scalar" indicates that all data arguments are scalars rather
64 than vectors.
65
66 - in gather/scatter addresses, "sv" stands for "scalar base,
67 vector displacement" while "vs" stands for "vector base,
68 scalar displacement".
69
70 - "_pred" indicates that the function takes an svbool_t argument
71 that does not act as a governing predicate.. */
72 namespace shapes
73 {
74 extern const function_shape *const adr_index;
75 extern const function_shape *const adr_offset;
76 extern const function_shape *const binary;
77 extern const function_shape *const binary_int_opt_n;
78 extern const function_shape *const binary_lane;
0a09a948
RS
79 extern const function_shape *const binary_long_lane;
80 extern const function_shape *const binary_long_opt_n;
624d0f07 81 extern const function_shape *const binary_n;
0a09a948
RS
82 extern const function_shape *const binary_narrowb_opt_n;
83 extern const function_shape *const binary_narrowt_opt_n;
624d0f07
RS
84 extern const function_shape *const binary_opt_n;
85 extern const function_shape *const binary_pred;
86 extern const function_shape *const binary_rotate;
87 extern const function_shape *const binary_scalar;
0a09a948 88 extern const function_shape *const binary_to_uint;
624d0f07
RS
89 extern const function_shape *const binary_uint;
90 extern const function_shape *const binary_uint_n;
91 extern const function_shape *const binary_uint_opt_n;
92 extern const function_shape *const binary_uint64_n;
93 extern const function_shape *const binary_uint64_opt_n;
0a09a948
RS
94 extern const function_shape *const binary_wide;
95 extern const function_shape *const binary_wide_opt_n;
624d0f07 96 extern const function_shape *const clast;
0a09a948 97 extern const function_shape *const compare;
624d0f07 98 extern const function_shape *const compare_opt_n;
0a09a948 99 extern const function_shape *const compare_ptr;
624d0f07
RS
100 extern const function_shape *const compare_scalar;
101 extern const function_shape *const compare_wide_opt_n;
102 extern const function_shape *const count_inherent;
103 extern const function_shape *const count_pat;
104 extern const function_shape *const count_pred;
105 extern const function_shape *const count_vector;
106 extern const function_shape *const create;
107 extern const function_shape *const dupq;
108 extern const function_shape *const ext;
109 extern const function_shape *const fold_left;
110 extern const function_shape *const get;
111 extern const function_shape *const inc_dec;
112 extern const function_shape *const inc_dec_pat;
113 extern const function_shape *const inc_dec_pred;
114 extern const function_shape *const inc_dec_pred_scalar;
115 extern const function_shape *const inherent;
116 extern const function_shape *const inherent_b;
117 extern const function_shape *const load;
118 extern const function_shape *const load_ext;
119 extern const function_shape *const load_ext_gather_index;
0a09a948 120 extern const function_shape *const load_ext_gather_index_restricted;
624d0f07 121 extern const function_shape *const load_ext_gather_offset;
0a09a948 122 extern const function_shape *const load_ext_gather_offset_restricted;
624d0f07 123 extern const function_shape *const load_gather_sv;
0a09a948 124 extern const function_shape *const load_gather_sv_restricted;
624d0f07
RS
125 extern const function_shape *const load_gather_vs;
126 extern const function_shape *const load_replicate;
36696774 127 extern const function_shape *const mmla;
624d0f07
RS
128 extern const function_shape *const pattern_pred;
129 extern const function_shape *const prefetch;
130 extern const function_shape *const prefetch_gather_index;
131 extern const function_shape *const prefetch_gather_offset;
132 extern const function_shape *const ptest;
133 extern const function_shape *const rdffr;
134 extern const function_shape *const reduction;
135 extern const function_shape *const reduction_wide;
136 extern const function_shape *const set;
137 extern const function_shape *const setffr;
0a09a948
RS
138 extern const function_shape *const shift_left_imm_long;
139 extern const function_shape *const shift_left_imm_to_uint;
624d0f07 140 extern const function_shape *const shift_right_imm;
0a09a948
RS
141 extern const function_shape *const shift_right_imm_narrowb;
142 extern const function_shape *const shift_right_imm_narrowt;
143 extern const function_shape *const shift_right_imm_narrowb_to_uint;
144 extern const function_shape *const shift_right_imm_narrowt_to_uint;
624d0f07
RS
145 extern const function_shape *const store;
146 extern const function_shape *const store_scatter_index;
0a09a948 147 extern const function_shape *const store_scatter_index_restricted;
624d0f07 148 extern const function_shape *const store_scatter_offset;
0a09a948
RS
149 extern const function_shape *const store_scatter_offset_restricted;
150 extern const function_shape *const tbl_tuple;
896dff99
RS
151 extern const function_shape *const ternary_bfloat;
152 extern const function_shape *const ternary_bfloat_lane;
153 extern const function_shape *const ternary_bfloat_lanex2;
154 extern const function_shape *const ternary_bfloat_opt_n;
36696774
RS
155 extern const function_shape *const ternary_intq_uintq_lane;
156 extern const function_shape *const ternary_intq_uintq_opt_n;
624d0f07
RS
157 extern const function_shape *const ternary_lane;
158 extern const function_shape *const ternary_lane_rotate;
0a09a948
RS
159 extern const function_shape *const ternary_long_lane;
160 extern const function_shape *const ternary_long_opt_n;
624d0f07
RS
161 extern const function_shape *const ternary_opt_n;
162 extern const function_shape *const ternary_qq_lane;
0a09a948 163 extern const function_shape *const ternary_qq_lane_rotate;
624d0f07 164 extern const function_shape *const ternary_qq_opt_n;
0a09a948 165 extern const function_shape *const ternary_qq_rotate;
624d0f07 166 extern const function_shape *const ternary_rotate;
0a09a948
RS
167 extern const function_shape *const ternary_shift_left_imm;
168 extern const function_shape *const ternary_shift_right_imm;
169 extern const function_shape *const ternary_uint;
36696774
RS
170 extern const function_shape *const ternary_uintq_intq;
171 extern const function_shape *const ternary_uintq_intq_lane;
172 extern const function_shape *const ternary_uintq_intq_opt_n;
624d0f07
RS
173 extern const function_shape *const tmad;
174 extern const function_shape *const unary;
175 extern const function_shape *const unary_convert;
0a09a948
RS
176 extern const function_shape *const unary_convert_narrowt;
177 extern const function_shape *const unary_long;
624d0f07 178 extern const function_shape *const unary_n;
0a09a948
RS
179 extern const function_shape *const unary_narrowb;
180 extern const function_shape *const unary_narrowt;
181 extern const function_shape *const unary_narrowb_to_uint;
182 extern const function_shape *const unary_narrowt_to_uint;
624d0f07 183 extern const function_shape *const unary_pred;
0a09a948 184 extern const function_shape *const unary_to_int;
5b052959 185 extern const function_shape *const unary_to_uint;
624d0f07
RS
186 extern const function_shape *const unary_uint;
187 extern const function_shape *const unary_widen;
188 }
189}
190
191#endif