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