internal-fn.def revision 1.10 1 1.1 mrg /* Internal functions.
2 1.10 mrg Copyright (C) 2011-2022 Free Software Foundation, Inc.
3 1.1 mrg
4 1.1 mrg This file is part of GCC.
5 1.1 mrg
6 1.1 mrg GCC is free software; you can redistribute it and/or modify it under
7 1.1 mrg the terms of the GNU General Public License as published by the Free
8 1.1 mrg Software Foundation; either version 3, or (at your option) any later
9 1.1 mrg version.
10 1.1 mrg
11 1.1 mrg GCC is distributed in the hope that it will be useful, but WITHOUT ANY
12 1.1 mrg WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 1.1 mrg FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 1.1 mrg for more details.
15 1.1 mrg
16 1.1 mrg You should have received a copy of the GNU General Public License
17 1.1 mrg along with GCC; see the file COPYING3. If not see
18 1.1 mrg <http://www.gnu.org/licenses/>. */
19 1.1 mrg
20 1.1 mrg /* This file specifies a list of internal "functions". These functions
21 1.1 mrg differ from built-in functions in that they have no linkage and cannot
22 1.1 mrg be called directly by the user. They represent operations that are only
23 1.1 mrg synthesised by GCC itself.
24 1.1 mrg
25 1.1 mrg Internal functions are used instead of tree codes if the operation
26 1.1 mrg and its operands are more naturally represented as a GIMPLE_CALL
27 1.1 mrg than a GIMPLE_ASSIGN.
28 1.1 mrg
29 1.4 mrg Each entry in this file has one of the forms:
30 1.1 mrg
31 1.3 mrg DEF_INTERNAL_FN (NAME, FLAGS, FNSPEC)
32 1.4 mrg DEF_INTERNAL_OPTAB_FN (NAME, FLAGS, OPTAB, TYPE)
33 1.7 mrg DEF_INTERNAL_SIGNED_OPTAB_FN (NAME, FLAGS, SELECTOR, SIGNED_OPTAB,
34 1.7 mrg UNSIGNED_OPTAB, TYPE)
35 1.4 mrg DEF_INTERNAL_FLT_FN (NAME, FLAGS, OPTAB, TYPE)
36 1.4 mrg DEF_INTERNAL_INT_FN (NAME, FLAGS, OPTAB, TYPE)
37 1.1 mrg
38 1.3 mrg where NAME is the name of the function, FLAGS is a set of
39 1.3 mrg ECF_* flags and FNSPEC is a string describing functions fnspec.
40 1.3 mrg
41 1.4 mrg DEF_INTERNAL_OPTAB_FN defines an internal function that maps to a
42 1.4 mrg direct optab. The function should only be called with a given
43 1.4 mrg set of types if the associated optab is available for the modes
44 1.4 mrg of those types. OPTAB says what optab to use (without the trailing
45 1.4 mrg "_optab") and TYPE categorizes the optab based on its inputs and
46 1.4 mrg outputs. The possible types of optab are:
47 1.4 mrg
48 1.4 mrg - mask_load: currently just maskload
49 1.4 mrg - load_lanes: currently just vec_load_lanes
50 1.7 mrg - mask_load_lanes: currently just vec_mask_load_lanes
51 1.7 mrg - gather_load: used for {mask_,}gather_load
52 1.10 mrg - len_load: currently just len_load
53 1.4 mrg
54 1.4 mrg - mask_store: currently just maskstore
55 1.4 mrg - store_lanes: currently just vec_store_lanes
56 1.7 mrg - mask_store_lanes: currently just vec_mask_store_lanes
57 1.7 mrg - scatter_store: used for {mask_,}scatter_store
58 1.10 mrg - len_store: currently just len_store
59 1.7 mrg
60 1.7 mrg - unary: a normal unary optab, such as vec_reverse_<mode>
61 1.7 mrg - binary: a normal binary optab, such as vec_interleave_lo_<mode>
62 1.8 mrg - ternary: a normal ternary optab, such as fma<mode>4
63 1.7 mrg
64 1.8 mrg - cond_binary: a conditional binary optab, such as cond_add<mode>
65 1.8 mrg - cond_ternary: a conditional ternary optab, such as cond_fma_rev<mode>
66 1.7 mrg
67 1.7 mrg - fold_left: for scalar = FN (scalar, vector), keyed off the vector mode
68 1.9 mrg - check_ptrs: used for check_{raw,war}_ptrs
69 1.7 mrg
70 1.7 mrg DEF_INTERNAL_SIGNED_OPTAB_FN defines an internal function that
71 1.7 mrg maps to one of two optabs, depending on the signedness of an input.
72 1.7 mrg SIGNED_OPTAB and UNSIGNED_OPTAB are the optabs for signed and
73 1.7 mrg unsigned inputs respectively, both without the trailing "_optab".
74 1.7 mrg SELECTOR says which type in the tree_pair determines the signedness.
75 1.4 mrg
76 1.4 mrg DEF_INTERNAL_FLT_FN is like DEF_INTERNAL_OPTAB_FN, but in addition,
77 1.4 mrg the function implements the computational part of a built-in math
78 1.4 mrg function BUILT_IN_<NAME>{F,,L}. Unlike some built-in functions,
79 1.4 mrg these internal functions never set errno.
80 1.4 mrg
81 1.4 mrg DEF_INTERNAL_INT_FN is like DEF_INTERNAL_OPTAB_FN, but in addition
82 1.4 mrg says that the function extends the C-level BUILT_IN_<NAME>{,L,LL,IMAX}
83 1.4 mrg group of functions to any integral mode (including vector modes).
84 1.4 mrg
85 1.3 mrg Each entry must have a corresponding expander of the form:
86 1.1 mrg
87 1.3 mrg void expand_NAME (gimple_call stmt)
88 1.1 mrg
89 1.4 mrg where STMT is the statement that performs the call. These are generated
90 1.4 mrg automatically for optab functions and call out to a function or macro
91 1.4 mrg called expand_<TYPE>_optab_fn. */
92 1.4 mrg
93 1.4 mrg #ifndef DEF_INTERNAL_FN
94 1.4 mrg #define DEF_INTERNAL_FN(CODE, FLAGS, FNSPEC)
95 1.4 mrg #endif
96 1.4 mrg
97 1.4 mrg #ifndef DEF_INTERNAL_OPTAB_FN
98 1.4 mrg #define DEF_INTERNAL_OPTAB_FN(NAME, FLAGS, OPTAB, TYPE) \
99 1.4 mrg DEF_INTERNAL_FN (NAME, FLAGS | ECF_LEAF, NULL)
100 1.4 mrg #endif
101 1.4 mrg
102 1.7 mrg #ifndef DEF_INTERNAL_SIGNED_OPTAB_FN
103 1.7 mrg #define DEF_INTERNAL_SIGNED_OPTAB_FN(NAME, FLAGS, SELECTOR, SIGNED_OPTAB, \
104 1.7 mrg UNSIGNED_OPTAB, TYPE) \
105 1.7 mrg DEF_INTERNAL_FN (NAME, FLAGS | ECF_LEAF, NULL)
106 1.7 mrg #endif
107 1.7 mrg
108 1.4 mrg #ifndef DEF_INTERNAL_FLT_FN
109 1.4 mrg #define DEF_INTERNAL_FLT_FN(NAME, FLAGS, OPTAB, TYPE) \
110 1.4 mrg DEF_INTERNAL_OPTAB_FN (NAME, FLAGS, OPTAB, TYPE)
111 1.4 mrg #endif
112 1.4 mrg
113 1.7 mrg #ifndef DEF_INTERNAL_FLT_FLOATN_FN
114 1.7 mrg #define DEF_INTERNAL_FLT_FLOATN_FN(NAME, FLAGS, OPTAB, TYPE) \
115 1.7 mrg DEF_INTERNAL_FLT_FN (NAME, FLAGS, OPTAB, TYPE)
116 1.7 mrg #endif
117 1.7 mrg
118 1.4 mrg #ifndef DEF_INTERNAL_INT_FN
119 1.4 mrg #define DEF_INTERNAL_INT_FN(NAME, FLAGS, OPTAB, TYPE) \
120 1.4 mrg DEF_INTERNAL_OPTAB_FN (NAME, FLAGS, OPTAB, TYPE)
121 1.4 mrg #endif
122 1.4 mrg
123 1.4 mrg DEF_INTERNAL_OPTAB_FN (MASK_LOAD, ECF_PURE, maskload, mask_load)
124 1.4 mrg DEF_INTERNAL_OPTAB_FN (LOAD_LANES, ECF_CONST, vec_load_lanes, load_lanes)
125 1.7 mrg DEF_INTERNAL_OPTAB_FN (MASK_LOAD_LANES, ECF_PURE,
126 1.7 mrg vec_mask_load_lanes, mask_load_lanes)
127 1.7 mrg
128 1.7 mrg DEF_INTERNAL_OPTAB_FN (GATHER_LOAD, ECF_PURE, gather_load, gather_load)
129 1.7 mrg DEF_INTERNAL_OPTAB_FN (MASK_GATHER_LOAD, ECF_PURE,
130 1.7 mrg mask_gather_load, gather_load)
131 1.7 mrg
132 1.10 mrg DEF_INTERNAL_OPTAB_FN (LEN_LOAD, ECF_PURE, len_load, len_load)
133 1.10 mrg
134 1.7 mrg DEF_INTERNAL_OPTAB_FN (SCATTER_STORE, 0, scatter_store, scatter_store)
135 1.7 mrg DEF_INTERNAL_OPTAB_FN (MASK_SCATTER_STORE, 0,
136 1.7 mrg mask_scatter_store, scatter_store)
137 1.4 mrg
138 1.4 mrg DEF_INTERNAL_OPTAB_FN (MASK_STORE, 0, maskstore, mask_store)
139 1.4 mrg DEF_INTERNAL_OPTAB_FN (STORE_LANES, ECF_CONST, vec_store_lanes, store_lanes)
140 1.7 mrg DEF_INTERNAL_OPTAB_FN (MASK_STORE_LANES, 0,
141 1.7 mrg vec_mask_store_lanes, mask_store_lanes)
142 1.7 mrg
143 1.10 mrg DEF_INTERNAL_OPTAB_FN (VCOND, 0, vcond, vec_cond)
144 1.10 mrg DEF_INTERNAL_OPTAB_FN (VCONDU, 0, vcondu, vec_cond)
145 1.10 mrg DEF_INTERNAL_OPTAB_FN (VCONDEQ, 0, vcondeq, vec_cond)
146 1.10 mrg DEF_INTERNAL_OPTAB_FN (VCOND_MASK, 0, vcond_mask, vec_cond_mask)
147 1.10 mrg
148 1.10 mrg DEF_INTERNAL_OPTAB_FN (VEC_SET, 0, vec_set, vec_set)
149 1.10 mrg
150 1.10 mrg DEF_INTERNAL_OPTAB_FN (LEN_STORE, 0, len_store, len_store)
151 1.10 mrg
152 1.7 mrg DEF_INTERNAL_OPTAB_FN (WHILE_ULT, ECF_CONST | ECF_NOTHROW, while_ult, while)
153 1.9 mrg DEF_INTERNAL_OPTAB_FN (CHECK_RAW_PTRS, ECF_CONST | ECF_NOTHROW,
154 1.9 mrg check_raw_ptrs, check_ptrs)
155 1.9 mrg DEF_INTERNAL_OPTAB_FN (CHECK_WAR_PTRS, ECF_CONST | ECF_NOTHROW,
156 1.9 mrg check_war_ptrs, check_ptrs)
157 1.7 mrg
158 1.7 mrg DEF_INTERNAL_OPTAB_FN (VEC_SHL_INSERT, ECF_CONST | ECF_NOTHROW,
159 1.7 mrg vec_shl_insert, binary)
160 1.7 mrg
161 1.9 mrg DEF_INTERNAL_OPTAB_FN (DIV_POW2, ECF_CONST | ECF_NOTHROW, sdiv_pow2, binary)
162 1.9 mrg
163 1.8 mrg DEF_INTERNAL_OPTAB_FN (FMS, ECF_CONST, fms, ternary)
164 1.8 mrg DEF_INTERNAL_OPTAB_FN (FNMA, ECF_CONST, fnma, ternary)
165 1.8 mrg DEF_INTERNAL_OPTAB_FN (FNMS, ECF_CONST, fnms, ternary)
166 1.8 mrg
167 1.8 mrg DEF_INTERNAL_SIGNED_OPTAB_FN (AVG_FLOOR, ECF_CONST | ECF_NOTHROW, first,
168 1.8 mrg savg_floor, uavg_floor, binary)
169 1.8 mrg DEF_INTERNAL_SIGNED_OPTAB_FN (AVG_CEIL, ECF_CONST | ECF_NOTHROW, first,
170 1.8 mrg savg_ceil, uavg_ceil, binary)
171 1.8 mrg
172 1.10 mrg DEF_INTERNAL_SIGNED_OPTAB_FN (MULH, ECF_CONST | ECF_NOTHROW, first,
173 1.10 mrg smul_highpart, umul_highpart, binary)
174 1.9 mrg DEF_INTERNAL_SIGNED_OPTAB_FN (MULHS, ECF_CONST | ECF_NOTHROW, first,
175 1.9 mrg smulhs, umulhs, binary)
176 1.9 mrg DEF_INTERNAL_SIGNED_OPTAB_FN (MULHRS, ECF_CONST | ECF_NOTHROW, first,
177 1.9 mrg smulhrs, umulhrs, binary)
178 1.9 mrg
179 1.7 mrg DEF_INTERNAL_OPTAB_FN (COND_ADD, ECF_CONST, cond_add, cond_binary)
180 1.7 mrg DEF_INTERNAL_OPTAB_FN (COND_SUB, ECF_CONST, cond_sub, cond_binary)
181 1.8 mrg DEF_INTERNAL_OPTAB_FN (COND_MUL, ECF_CONST, cond_smul, cond_binary)
182 1.8 mrg DEF_INTERNAL_SIGNED_OPTAB_FN (COND_DIV, ECF_CONST, first,
183 1.8 mrg cond_sdiv, cond_udiv, cond_binary)
184 1.8 mrg DEF_INTERNAL_SIGNED_OPTAB_FN (COND_MOD, ECF_CONST, first,
185 1.8 mrg cond_smod, cond_umod, cond_binary)
186 1.8 mrg DEF_INTERNAL_OPTAB_FN (COND_RDIV, ECF_CONST, cond_sdiv, cond_binary)
187 1.7 mrg DEF_INTERNAL_SIGNED_OPTAB_FN (COND_MIN, ECF_CONST, first,
188 1.7 mrg cond_smin, cond_umin, cond_binary)
189 1.7 mrg DEF_INTERNAL_SIGNED_OPTAB_FN (COND_MAX, ECF_CONST, first,
190 1.7 mrg cond_smax, cond_umax, cond_binary)
191 1.10 mrg DEF_INTERNAL_OPTAB_FN (COND_FMIN, ECF_CONST, cond_fmin, cond_binary)
192 1.10 mrg DEF_INTERNAL_OPTAB_FN (COND_FMAX, ECF_CONST, cond_fmax, cond_binary)
193 1.7 mrg DEF_INTERNAL_OPTAB_FN (COND_AND, ECF_CONST | ECF_NOTHROW,
194 1.7 mrg cond_and, cond_binary)
195 1.7 mrg DEF_INTERNAL_OPTAB_FN (COND_IOR, ECF_CONST | ECF_NOTHROW,
196 1.7 mrg cond_ior, cond_binary)
197 1.7 mrg DEF_INTERNAL_OPTAB_FN (COND_XOR, ECF_CONST | ECF_NOTHROW,
198 1.7 mrg cond_xor, cond_binary)
199 1.9 mrg DEF_INTERNAL_OPTAB_FN (COND_SHL, ECF_CONST | ECF_NOTHROW,
200 1.9 mrg cond_ashl, cond_binary)
201 1.9 mrg DEF_INTERNAL_SIGNED_OPTAB_FN (COND_SHR, ECF_CONST | ECF_NOTHROW, first,
202 1.9 mrg cond_ashr, cond_lshr, cond_binary)
203 1.4 mrg
204 1.8 mrg DEF_INTERNAL_OPTAB_FN (COND_FMA, ECF_CONST, cond_fma, cond_ternary)
205 1.8 mrg DEF_INTERNAL_OPTAB_FN (COND_FMS, ECF_CONST, cond_fms, cond_ternary)
206 1.8 mrg DEF_INTERNAL_OPTAB_FN (COND_FNMA, ECF_CONST, cond_fnma, cond_ternary)
207 1.8 mrg DEF_INTERNAL_OPTAB_FN (COND_FNMS, ECF_CONST, cond_fnms, cond_ternary)
208 1.8 mrg
209 1.10 mrg DEF_INTERNAL_OPTAB_FN (COND_NEG, ECF_CONST, cond_neg, cond_unary)
210 1.10 mrg
211 1.4 mrg DEF_INTERNAL_OPTAB_FN (RSQRT, ECF_CONST, rsqrt, unary)
212 1.4 mrg
213 1.7 mrg DEF_INTERNAL_OPTAB_FN (REDUC_PLUS, ECF_CONST | ECF_NOTHROW,
214 1.7 mrg reduc_plus_scal, unary)
215 1.7 mrg DEF_INTERNAL_SIGNED_OPTAB_FN (REDUC_MAX, ECF_CONST | ECF_NOTHROW, first,
216 1.7 mrg reduc_smax_scal, reduc_umax_scal, unary)
217 1.7 mrg DEF_INTERNAL_SIGNED_OPTAB_FN (REDUC_MIN, ECF_CONST | ECF_NOTHROW, first,
218 1.7 mrg reduc_smin_scal, reduc_umin_scal, unary)
219 1.10 mrg DEF_INTERNAL_OPTAB_FN (REDUC_FMAX, ECF_CONST | ECF_NOTHROW,
220 1.10 mrg reduc_fmax_scal, unary)
221 1.10 mrg DEF_INTERNAL_OPTAB_FN (REDUC_FMIN, ECF_CONST | ECF_NOTHROW,
222 1.10 mrg reduc_fmin_scal, unary)
223 1.7 mrg DEF_INTERNAL_OPTAB_FN (REDUC_AND, ECF_CONST | ECF_NOTHROW,
224 1.7 mrg reduc_and_scal, unary)
225 1.7 mrg DEF_INTERNAL_OPTAB_FN (REDUC_IOR, ECF_CONST | ECF_NOTHROW,
226 1.7 mrg reduc_ior_scal, unary)
227 1.7 mrg DEF_INTERNAL_OPTAB_FN (REDUC_XOR, ECF_CONST | ECF_NOTHROW,
228 1.7 mrg reduc_xor_scal, unary)
229 1.7 mrg
230 1.7 mrg /* Extract the last active element from a vector. */
231 1.7 mrg DEF_INTERNAL_OPTAB_FN (EXTRACT_LAST, ECF_CONST | ECF_NOTHROW,
232 1.8 mrg extract_last, fold_left)
233 1.7 mrg
234 1.7 mrg /* Same, but return the first argument if no elements are active. */
235 1.7 mrg DEF_INTERNAL_OPTAB_FN (FOLD_EXTRACT_LAST, ECF_CONST | ECF_NOTHROW,
236 1.7 mrg fold_extract_last, fold_extract)
237 1.7 mrg
238 1.7 mrg DEF_INTERNAL_OPTAB_FN (FOLD_LEFT_PLUS, ECF_CONST | ECF_NOTHROW,
239 1.7 mrg fold_left_plus, fold_left)
240 1.7 mrg
241 1.9 mrg DEF_INTERNAL_OPTAB_FN (MASK_FOLD_LEFT_PLUS, ECF_CONST | ECF_NOTHROW,
242 1.9 mrg mask_fold_left_plus, mask_fold_left)
243 1.9 mrg
244 1.4 mrg /* Unary math functions. */
245 1.4 mrg DEF_INTERNAL_FLT_FN (ACOS, ECF_CONST, acos, unary)
246 1.8 mrg DEF_INTERNAL_FLT_FN (ACOSH, ECF_CONST, acosh, unary)
247 1.4 mrg DEF_INTERNAL_FLT_FN (ASIN, ECF_CONST, asin, unary)
248 1.8 mrg DEF_INTERNAL_FLT_FN (ASINH, ECF_CONST, asinh, unary)
249 1.4 mrg DEF_INTERNAL_FLT_FN (ATAN, ECF_CONST, atan, unary)
250 1.8 mrg DEF_INTERNAL_FLT_FN (ATANH, ECF_CONST, atanh, unary)
251 1.4 mrg DEF_INTERNAL_FLT_FN (COS, ECF_CONST, cos, unary)
252 1.8 mrg DEF_INTERNAL_FLT_FN (COSH, ECF_CONST, cosh, unary)
253 1.4 mrg DEF_INTERNAL_FLT_FN (EXP, ECF_CONST, exp, unary)
254 1.4 mrg DEF_INTERNAL_FLT_FN (EXP10, ECF_CONST, exp10, unary)
255 1.4 mrg DEF_INTERNAL_FLT_FN (EXP2, ECF_CONST, exp2, unary)
256 1.4 mrg DEF_INTERNAL_FLT_FN (EXPM1, ECF_CONST, expm1, unary)
257 1.4 mrg DEF_INTERNAL_FLT_FN (LOG, ECF_CONST, log, unary)
258 1.4 mrg DEF_INTERNAL_FLT_FN (LOG10, ECF_CONST, log10, unary)
259 1.4 mrg DEF_INTERNAL_FLT_FN (LOG1P, ECF_CONST, log1p, unary)
260 1.4 mrg DEF_INTERNAL_FLT_FN (LOG2, ECF_CONST, log2, unary)
261 1.4 mrg DEF_INTERNAL_FLT_FN (LOGB, ECF_CONST, logb, unary)
262 1.9 mrg DEF_INTERNAL_FLT_FN (SIGNBIT, ECF_CONST, signbit, unary)
263 1.4 mrg DEF_INTERNAL_FLT_FN (SIGNIFICAND, ECF_CONST, significand, unary)
264 1.4 mrg DEF_INTERNAL_FLT_FN (SIN, ECF_CONST, sin, unary)
265 1.8 mrg DEF_INTERNAL_FLT_FN (SINH, ECF_CONST, sinh, unary)
266 1.7 mrg DEF_INTERNAL_FLT_FLOATN_FN (SQRT, ECF_CONST, sqrt, unary)
267 1.4 mrg DEF_INTERNAL_FLT_FN (TAN, ECF_CONST, tan, unary)
268 1.8 mrg DEF_INTERNAL_FLT_FN (TANH, ECF_CONST, tanh, unary)
269 1.4 mrg
270 1.4 mrg /* FP rounding. */
271 1.7 mrg DEF_INTERNAL_FLT_FLOATN_FN (CEIL, ECF_CONST, ceil, unary)
272 1.7 mrg DEF_INTERNAL_FLT_FLOATN_FN (FLOOR, ECF_CONST, floor, unary)
273 1.7 mrg DEF_INTERNAL_FLT_FLOATN_FN (NEARBYINT, ECF_CONST, nearbyint, unary)
274 1.7 mrg DEF_INTERNAL_FLT_FLOATN_FN (RINT, ECF_CONST, rint, unary)
275 1.7 mrg DEF_INTERNAL_FLT_FLOATN_FN (ROUND, ECF_CONST, round, unary)
276 1.9 mrg DEF_INTERNAL_FLT_FLOATN_FN (ROUNDEVEN, ECF_CONST, roundeven, unary)
277 1.7 mrg DEF_INTERNAL_FLT_FLOATN_FN (TRUNC, ECF_CONST, btrunc, unary)
278 1.4 mrg
279 1.4 mrg /* Binary math functions. */
280 1.4 mrg DEF_INTERNAL_FLT_FN (ATAN2, ECF_CONST, atan2, binary)
281 1.7 mrg DEF_INTERNAL_FLT_FLOATN_FN (COPYSIGN, ECF_CONST, copysign, binary)
282 1.4 mrg DEF_INTERNAL_FLT_FN (FMOD, ECF_CONST, fmod, binary)
283 1.8 mrg DEF_INTERNAL_FLT_FN (HYPOT, ECF_CONST, hypot, binary)
284 1.4 mrg DEF_INTERNAL_FLT_FN (POW, ECF_CONST, pow, binary)
285 1.4 mrg DEF_INTERNAL_FLT_FN (REMAINDER, ECF_CONST, remainder, binary)
286 1.4 mrg DEF_INTERNAL_FLT_FN (SCALB, ECF_CONST, scalb, binary)
287 1.7 mrg DEF_INTERNAL_FLT_FLOATN_FN (FMIN, ECF_CONST, fmin, binary)
288 1.7 mrg DEF_INTERNAL_FLT_FLOATN_FN (FMAX, ECF_CONST, fmax, binary)
289 1.7 mrg DEF_INTERNAL_OPTAB_FN (XORSIGN, ECF_CONST, xorsign, binary)
290 1.10 mrg DEF_INTERNAL_OPTAB_FN (COMPLEX_ADD_ROT90, ECF_CONST, cadd90, binary)
291 1.10 mrg DEF_INTERNAL_OPTAB_FN (COMPLEX_ADD_ROT270, ECF_CONST, cadd270, binary)
292 1.10 mrg DEF_INTERNAL_OPTAB_FN (COMPLEX_MUL, ECF_CONST, cmul, binary)
293 1.10 mrg DEF_INTERNAL_OPTAB_FN (COMPLEX_MUL_CONJ, ECF_CONST, cmul_conj, binary)
294 1.10 mrg DEF_INTERNAL_OPTAB_FN (VEC_ADDSUB, ECF_CONST, vec_addsub, binary)
295 1.10 mrg DEF_INTERNAL_OPTAB_FN (VEC_FMADDSUB, ECF_CONST, vec_fmaddsub, ternary)
296 1.10 mrg DEF_INTERNAL_OPTAB_FN (VEC_FMSUBADD, ECF_CONST, vec_fmsubadd, ternary)
297 1.4 mrg
298 1.4 mrg /* FP scales. */
299 1.4 mrg DEF_INTERNAL_FLT_FN (LDEXP, ECF_CONST, ldexp, binary)
300 1.4 mrg
301 1.8 mrg /* Ternary math functions. */
302 1.8 mrg DEF_INTERNAL_FLT_FLOATN_FN (FMA, ECF_CONST, fma, ternary)
303 1.10 mrg DEF_INTERNAL_OPTAB_FN (COMPLEX_FMA, ECF_CONST, cmla, ternary)
304 1.10 mrg DEF_INTERNAL_OPTAB_FN (COMPLEX_FMA_CONJ, ECF_CONST, cmla_conj, ternary)
305 1.10 mrg DEF_INTERNAL_OPTAB_FN (COMPLEX_FMS, ECF_CONST, cmls, ternary)
306 1.10 mrg DEF_INTERNAL_OPTAB_FN (COMPLEX_FMS_CONJ, ECF_CONST, cmls_conj, ternary)
307 1.8 mrg
308 1.4 mrg /* Unary integer ops. */
309 1.7 mrg DEF_INTERNAL_INT_FN (CLRSB, ECF_CONST | ECF_NOTHROW, clrsb, unary)
310 1.7 mrg DEF_INTERNAL_INT_FN (CLZ, ECF_CONST | ECF_NOTHROW, clz, unary)
311 1.7 mrg DEF_INTERNAL_INT_FN (CTZ, ECF_CONST | ECF_NOTHROW, ctz, unary)
312 1.7 mrg DEF_INTERNAL_INT_FN (FFS, ECF_CONST | ECF_NOTHROW, ffs, unary)
313 1.7 mrg DEF_INTERNAL_INT_FN (PARITY, ECF_CONST | ECF_NOTHROW, parity, unary)
314 1.7 mrg DEF_INTERNAL_INT_FN (POPCOUNT, ECF_CONST | ECF_NOTHROW, popcount, unary)
315 1.1 mrg
316 1.6 mrg DEF_INTERNAL_FN (GOMP_USE_SIMT, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
317 1.6 mrg DEF_INTERNAL_FN (GOMP_SIMT_ENTER, ECF_LEAF | ECF_NOTHROW, NULL)
318 1.6 mrg DEF_INTERNAL_FN (GOMP_SIMT_ENTER_ALLOC, ECF_LEAF | ECF_NOTHROW, NULL)
319 1.6 mrg DEF_INTERNAL_FN (GOMP_SIMT_EXIT, ECF_LEAF | ECF_NOTHROW, NULL)
320 1.6 mrg DEF_INTERNAL_FN (GOMP_SIMT_LANE, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
321 1.6 mrg DEF_INTERNAL_FN (GOMP_SIMT_VF, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
322 1.6 mrg DEF_INTERNAL_FN (GOMP_SIMT_LAST_LANE, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
323 1.6 mrg DEF_INTERNAL_FN (GOMP_SIMT_ORDERED_PRED, ECF_LEAF | ECF_NOTHROW, NULL)
324 1.6 mrg DEF_INTERNAL_FN (GOMP_SIMT_VOTE_ANY, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
325 1.6 mrg DEF_INTERNAL_FN (GOMP_SIMT_XCHG_BFLY, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
326 1.6 mrg DEF_INTERNAL_FN (GOMP_SIMT_XCHG_IDX, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
327 1.3 mrg DEF_INTERNAL_FN (GOMP_SIMD_LANE, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
328 1.3 mrg DEF_INTERNAL_FN (GOMP_SIMD_VF, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
329 1.3 mrg DEF_INTERNAL_FN (GOMP_SIMD_LAST_LANE, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
330 1.4 mrg DEF_INTERNAL_FN (GOMP_SIMD_ORDERED_START, ECF_LEAF | ECF_NOTHROW, NULL)
331 1.4 mrg DEF_INTERNAL_FN (GOMP_SIMD_ORDERED_END, ECF_LEAF | ECF_NOTHROW, NULL)
332 1.3 mrg DEF_INTERNAL_FN (LOOP_VECTORIZED, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
333 1.7 mrg DEF_INTERNAL_FN (LOOP_DIST_ALIAS, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
334 1.3 mrg DEF_INTERNAL_FN (ANNOTATE, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
335 1.10 mrg DEF_INTERNAL_FN (UBSAN_NULL, ECF_LEAF | ECF_NOTHROW, ". R . ")
336 1.3 mrg DEF_INTERNAL_FN (UBSAN_BOUNDS, ECF_LEAF | ECF_NOTHROW, NULL)
337 1.10 mrg DEF_INTERNAL_FN (UBSAN_VPTR, ECF_LEAF | ECF_NOTHROW, ". R R . . ")
338 1.3 mrg DEF_INTERNAL_FN (UBSAN_CHECK_ADD, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
339 1.3 mrg DEF_INTERNAL_FN (UBSAN_CHECK_SUB, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
340 1.3 mrg DEF_INTERNAL_FN (UBSAN_CHECK_MUL, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
341 1.10 mrg DEF_INTERNAL_FN (UBSAN_PTR, ECF_LEAF | ECF_NOTHROW, ". R . ")
342 1.3 mrg DEF_INTERNAL_FN (UBSAN_OBJECT_SIZE, ECF_LEAF | ECF_NOTHROW, NULL)
343 1.3 mrg DEF_INTERNAL_FN (ABNORMAL_DISPATCHER, ECF_NORETURN, NULL)
344 1.3 mrg DEF_INTERNAL_FN (BUILTIN_EXPECT, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
345 1.10 mrg DEF_INTERNAL_FN (HWASAN_ALLOCA_UNPOISON, ECF_LEAF | ECF_NOTHROW, ". R ")
346 1.10 mrg DEF_INTERNAL_FN (HWASAN_CHOOSE_TAG, ECF_LEAF | ECF_NOTHROW, ". ")
347 1.10 mrg DEF_INTERNAL_FN (HWASAN_CHECK, ECF_TM_PURE | ECF_LEAF | ECF_NOTHROW,
348 1.10 mrg ". . R . . ")
349 1.10 mrg DEF_INTERNAL_FN (HWASAN_MARK, ECF_LEAF | ECF_NOTHROW, NULL)
350 1.10 mrg DEF_INTERNAL_FN (HWASAN_SET_TAG,
351 1.10 mrg ECF_TM_PURE | ECF_PURE | ECF_LEAF | ECF_NOTHROW, ". R R ")
352 1.10 mrg DEF_INTERNAL_FN (ASAN_CHECK, ECF_TM_PURE | ECF_LEAF | ECF_NOTHROW,
353 1.10 mrg ". . R . . ")
354 1.7 mrg DEF_INTERNAL_FN (ASAN_MARK, ECF_LEAF | ECF_NOTHROW, NULL)
355 1.6 mrg DEF_INTERNAL_FN (ASAN_POISON, ECF_LEAF | ECF_NOTHROW | ECF_NOVOPS, NULL)
356 1.6 mrg DEF_INTERNAL_FN (ASAN_POISON_USE, ECF_LEAF | ECF_NOTHROW | ECF_NOVOPS, NULL)
357 1.3 mrg DEF_INTERNAL_FN (ADD_OVERFLOW, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
358 1.3 mrg DEF_INTERNAL_FN (SUB_OVERFLOW, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
359 1.3 mrg DEF_INTERNAL_FN (MUL_OVERFLOW, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
360 1.3 mrg DEF_INTERNAL_FN (TSAN_FUNC_EXIT, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
361 1.4 mrg DEF_INTERNAL_FN (VA_ARG, ECF_NOTHROW | ECF_LEAF, NULL)
362 1.8 mrg DEF_INTERNAL_FN (VEC_CONVERT, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
363 1.10 mrg DEF_INTERNAL_FN (RAWMEMCHR, ECF_PURE | ECF_LEAF | ECF_NOTHROW, NULL)
364 1.4 mrg
365 1.4 mrg /* An unduplicable, uncombinable function. Generally used to preserve
366 1.4 mrg a CFG property in the face of jump threading, tail merging or
367 1.4 mrg other such optimizations. The first argument distinguishes
368 1.4 mrg between uses. See internal-fn.h for usage. */
369 1.4 mrg DEF_INTERNAL_FN (UNIQUE, ECF_NOTHROW, NULL)
370 1.6 mrg DEF_INTERNAL_FN (PHI, 0, NULL)
371 1.4 mrg
372 1.10 mrg /* A function to represent an artifical initialization to an uninitialized
373 1.10 mrg automatic variable. */
374 1.10 mrg DEF_INTERNAL_FN (DEFERRED_INIT, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
375 1.10 mrg
376 1.4 mrg /* DIM_SIZE and DIM_POS return the size of a particular compute
377 1.4 mrg dimension and the executing thread's position within that
378 1.4 mrg dimension. DIM_POS is pure (and not const) so that it isn't
379 1.4 mrg thought to clobber memory and can be gcse'd within a single
380 1.4 mrg parallel region, but not across FORK/JOIN boundaries. They take a
381 1.6 mrg single INTEGER_CST argument. This might be overly conservative. */
382 1.10 mrg DEF_INTERNAL_FN (GOACC_DIM_SIZE, ECF_CONST | ECF_NOTHROW | ECF_LEAF, NULL)
383 1.10 mrg DEF_INTERNAL_FN (GOACC_DIM_POS, ECF_PURE | ECF_NOTHROW | ECF_LEAF, NULL)
384 1.4 mrg
385 1.4 mrg /* OpenACC looping abstraction. See internal-fn.h for usage. */
386 1.4 mrg DEF_INTERNAL_FN (GOACC_LOOP, ECF_PURE | ECF_NOTHROW, NULL)
387 1.4 mrg
388 1.4 mrg /* OpenACC reduction abstraction. See internal-fn.h for usage. */
389 1.4 mrg DEF_INTERNAL_FN (GOACC_REDUCTION, ECF_NOTHROW | ECF_LEAF, NULL)
390 1.4 mrg
391 1.6 mrg /* Openacc tile abstraction. Describes the spans of the element loop.
392 1.6 mrg GOACC_TILE (num-loops, loop-no, tile-arg, tile-mask, element-mask). */
393 1.6 mrg DEF_INTERNAL_FN (GOACC_TILE, ECF_NOTHROW | ECF_LEAF, NULL)
394 1.6 mrg
395 1.4 mrg /* Set errno to EDOM, if GCC knows how to do that directly for the
396 1.4 mrg current target. */
397 1.4 mrg DEF_INTERNAL_FN (SET_EDOM, ECF_LEAF | ECF_NOTHROW, NULL)
398 1.4 mrg
399 1.6 mrg /* Atomic functions. These don't have ECF_NOTHROW because for
400 1.6 mrg -fnon-call-exceptions they can throw, otherwise we set
401 1.6 mrg gimple_call_nothrow_p on it. */
402 1.6 mrg DEF_INTERNAL_FN (ATOMIC_BIT_TEST_AND_SET, ECF_LEAF, NULL)
403 1.6 mrg DEF_INTERNAL_FN (ATOMIC_BIT_TEST_AND_COMPLEMENT, ECF_LEAF, NULL)
404 1.6 mrg DEF_INTERNAL_FN (ATOMIC_BIT_TEST_AND_RESET, ECF_LEAF, NULL)
405 1.6 mrg DEF_INTERNAL_FN (ATOMIC_COMPARE_EXCHANGE, ECF_LEAF, NULL)
406 1.10 mrg DEF_INTERNAL_FN (ATOMIC_ADD_FETCH_CMP_0, ECF_LEAF, NULL)
407 1.10 mrg DEF_INTERNAL_FN (ATOMIC_SUB_FETCH_CMP_0, ECF_LEAF, NULL)
408 1.10 mrg DEF_INTERNAL_FN (ATOMIC_AND_FETCH_CMP_0, ECF_LEAF, NULL)
409 1.10 mrg DEF_INTERNAL_FN (ATOMIC_OR_FETCH_CMP_0, ECF_LEAF, NULL)
410 1.10 mrg DEF_INTERNAL_FN (ATOMIC_XOR_FETCH_CMP_0, ECF_LEAF, NULL)
411 1.6 mrg
412 1.6 mrg /* To implement [[fallthrough]]. */
413 1.6 mrg DEF_INTERNAL_FN (FALLTHROUGH, ECF_LEAF | ECF_NOTHROW, NULL)
414 1.6 mrg
415 1.6 mrg /* To implement __builtin_launder. */
416 1.6 mrg DEF_INTERNAL_FN (LAUNDER, ECF_LEAF | ECF_NOTHROW | ECF_NOVOPS, NULL)
417 1.6 mrg
418 1.6 mrg /* Divmod function. */
419 1.6 mrg DEF_INTERNAL_FN (DIVMOD, ECF_CONST | ECF_LEAF, NULL)
420 1.6 mrg
421 1.9 mrg /* For coroutines. */
422 1.9 mrg DEF_INTERNAL_FN (CO_ACTOR, ECF_NOTHROW | ECF_LEAF, NULL)
423 1.9 mrg DEF_INTERNAL_FN (CO_YIELD, ECF_NOTHROW, NULL)
424 1.9 mrg DEF_INTERNAL_FN (CO_SUSPN, ECF_NOTHROW, NULL)
425 1.9 mrg DEF_INTERNAL_FN (CO_FRAME, ECF_PURE | ECF_NOTHROW | ECF_LEAF, NULL)
426 1.9 mrg
427 1.7 mrg /* A NOP function with arbitrary arguments and return value. */
428 1.7 mrg DEF_INTERNAL_FN (NOP, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
429 1.7 mrg
430 1.10 mrg /* Temporary vehicle for __builtin_shufflevector. */
431 1.10 mrg DEF_INTERNAL_FN (SHUFFLEVECTOR, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
432 1.10 mrg
433 1.10 mrg /* <=> optimization. */
434 1.10 mrg DEF_INTERNAL_FN (SPACESHIP, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
435 1.10 mrg
436 1.4 mrg #undef DEF_INTERNAL_INT_FN
437 1.4 mrg #undef DEF_INTERNAL_FLT_FN
438 1.7 mrg #undef DEF_INTERNAL_FLT_FLOATN_FN
439 1.7 mrg #undef DEF_INTERNAL_SIGNED_OPTAB_FN
440 1.4 mrg #undef DEF_INTERNAL_OPTAB_FN
441 1.4 mrg #undef DEF_INTERNAL_FN
442