Branch data Line data Source code
1 : : /* Internal functions.
2 : : Copyright (C) 2011-2025 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 under
7 : : the terms of the GNU General Public License as published by the Free
8 : : Software Foundation; either version 3, or (at your option) any later
9 : : version.
10 : :
11 : : GCC is distributed in the hope that it will be useful, but WITHOUT ANY
12 : : WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 : : FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 : : 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 : : /* 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 : :
29 : : Each entry in this file has one of the forms:
30 : :
31 : : DEF_INTERNAL_FN (NAME, FLAGS, FNSPEC)
32 : : DEF_INTERNAL_OPTAB_FN (NAME, FLAGS, OPTAB, TYPE)
33 : : DEF_INTERNAL_SIGNED_OPTAB_FN (NAME, FLAGS, SELECTOR, SIGNED_OPTAB,
34 : : UNSIGNED_OPTAB, TYPE)
35 : : DEF_INTERNAL_FLT_FN (NAME, FLAGS, OPTAB, TYPE)
36 : : DEF_INTERNAL_FLT_FLOATN_FN (NAME, FLAGS, OPTAB, TYPE)
37 : : DEF_INTERNAL_INT_FN (NAME, FLAGS, OPTAB, TYPE)
38 : : DEF_INTERNAL_INT_EXT_FN (NAME, FLAGS, OPTAB, TYPE)
39 : : DEF_INTERNAL_COND_FN (NAME, FLAGS, OPTAB, TYPE)
40 : : DEF_INTERNAL_SIGNED_COND_FN (NAME, FLAGS, OPTAB, TYPE)
41 : : DEF_INTERNAL_WIDENING_OPTAB_FN (NAME, FLAGS, SELECTOR, SOPTAB, UOPTAB,
42 : : TYPE)
43 : :
44 : : where NAME is the name of the function, FLAGS is a set of
45 : : ECF_* flags and FNSPEC is a string describing functions fnspec.
46 : :
47 : : DEF_INTERNAL_OPTAB_FN defines an internal function that maps to a
48 : : direct optab. The function should only be called with a given
49 : : set of types if the associated optab is available for the modes
50 : : of those types. OPTAB says what optab to use (without the trailing
51 : : "_optab") and TYPE categorizes the optab based on its inputs and
52 : : outputs. The possible types of optab are:
53 : :
54 : : - mask_load: currently just maskload
55 : : - load_lanes: currently just vec_load_lanes
56 : : - mask_load_lanes: currently just vec_mask_load_lanes
57 : : - mask_len_load_lanes: currently just vec_mask_len_load_lanes
58 : : - gather_load: used for {mask_,mask_len_,}gather_load
59 : : - strided_load: currently just mask_len_strided_load
60 : : - len_load: currently just len_load
61 : : - mask_len_load: currently just mask_len_load
62 : :
63 : : - mask_store: currently just maskstore
64 : : - store_lanes: currently just vec_store_lanes
65 : : - mask_store_lanes: currently just vec_mask_store_lanes
66 : : - mask_len_store_lanes: currently just vec_mask_len_store_lanes
67 : : - scatter_store: used for {mask_,mask_len_,}scatter_store
68 : : - strided_store: currently just mask_len_strided_store
69 : : - len_store: currently just len_store
70 : : - mask_len_store: currently just mask_len_store
71 : :
72 : : - unary: a normal unary optab, such as vec_reverse_<mode>
73 : : - binary: a normal binary optab, such as vec_interleave_lo_<mode>
74 : : - ternary: a normal ternary optab, such as fma<mode>4
75 : :
76 : : - unary_convert: a single-input conversion optab, such as
77 : : lround<srcmode><dstmode>2.
78 : :
79 : : - cond_binary: a conditional binary optab, such as cond_add<mode>
80 : : - cond_unary: a conditional unary optab, such as cond_neg<mode>
81 : : - cond_ternary: a conditional ternary optab, such as cond_fma_rev<mode>
82 : :
83 : : - fold_left: for scalar = FN (scalar, vector), keyed off the vector mode
84 : : - check_ptrs: used for check_{raw,war}_ptrs
85 : :
86 : : - cond_len_unary: a conditional unary optab, such as cond_len_neg<mode>
87 : : - cond_len_binary: a conditional binary optab, such as cond_len_add<mode>
88 : : - cond_len_ternary: a conditional ternary optab, such as
89 : : cond_len_fma_rev<mode>
90 : :
91 : : DEF_INTERNAL_SIGNED_OPTAB_FN defines an internal function that
92 : : maps to one of two optabs, depending on the signedness of an input.
93 : : SIGNED_OPTAB and UNSIGNED_OPTAB are the optabs for signed and
94 : : unsigned inputs respectively, both without the trailing "_optab".
95 : : SELECTOR says which type in the tree_pair determines the signedness.
96 : :
97 : : DEF_INTERNAL_FLT_FN is like DEF_INTERNAL_OPTAB_FN, but in addition,
98 : : the function implements the computational part of a built-in math
99 : : function BUILT_IN_<NAME>{F,,L}. Unlike some built-in functions,
100 : : these internal functions never set errno.
101 : :
102 : : DEF_INTERNAL_INT_FN is like DEF_INTERNAL_OPTAB_FN, but in addition
103 : : says that the function extends the C-level BUILT_IN_<NAME>{,L,LL,IMAX}
104 : : group of functions to any integral mode (including vector modes).
105 : :
106 : : DEF_INTERNAL_INT_EXT_FN is like DEF_INTERNAL_INT_FN, except that it
107 : : has expand_##NAME defined in internal-fn.cc to override the
108 : : DEF_INTERNAL_INT_FN expansion behavior.
109 : :
110 : : DEF_INTERNAL_WIDENING_OPTAB_FN is a wrapper that defines five internal
111 : : functions with DEF_INTERNAL_SIGNED_OPTAB_FN:
112 : : - one that describes a widening operation with the same number of elements
113 : : in the output and input vectors,
114 : : - two that describe a pair of high-low widening operations where the output
115 : : vectors each have half the number of elements of the input vectors,
116 : : corresponding to the result of the widening operation on the top half and
117 : : bottom half, these have the suffixes _HI and _LO,
118 : : - and two that describe a pair of even-odd widening operations where the
119 : : output vectors each have half the number of elements of the input vectors,
120 : : corresponding to the result of the widening operation on the even and odd
121 : : elements, these have the suffixes _EVEN and _ODD.
122 : : These five internal functions will require two optabs each, a SIGNED_OPTAB
123 : : and an UNSIGNED_OTPAB.
124 : :
125 : : DEF_INTERNAL_COND_FN is a wrapper that defines 2 internal functions with
126 : : DEF_INTERNAL_OPTAB_FN:
127 : : - One is COND_* operations that are predicated by mask only. Such operations
128 : : make sense for both vectors and scalars.
129 : : - The other is COND_LEN_* operations that are predicated by mask and len
130 : : both. Such operations only make sense for vectors.
131 : :
132 : : DEF_INTERNAL_SIGNED_COND_FN is like DEF_INTERNAL_COND_FN but defines intenal
133 : : functions with DEF_INTERNAL_SIGNED_OPTAB_FN.
134 : :
135 : : Each entry must have a corresponding expander of the form:
136 : :
137 : : void expand_NAME (gimple_call stmt)
138 : :
139 : : where STMT is the statement that performs the call. These are generated
140 : : automatically for optab functions and call out to a function or macro
141 : : called expand_<TYPE>_optab_fn. */
142 : :
143 : : #ifndef DEF_INTERNAL_FN
144 : : #define DEF_INTERNAL_FN(CODE, FLAGS, FNSPEC)
145 : : #endif
146 : :
147 : : #ifndef DEF_INTERNAL_OPTAB_FN
148 : : #define DEF_INTERNAL_OPTAB_FN(NAME, FLAGS, OPTAB, TYPE) \
149 : : DEF_INTERNAL_FN (NAME, FLAGS | ECF_LEAF, NULL)
150 : : #endif
151 : :
152 : : #ifndef DEF_INTERNAL_SIGNED_OPTAB_FN
153 : : #define DEF_INTERNAL_SIGNED_OPTAB_FN(NAME, FLAGS, SELECTOR, SIGNED_OPTAB, \
154 : : UNSIGNED_OPTAB, TYPE) \
155 : : DEF_INTERNAL_FN (NAME, FLAGS | ECF_LEAF, NULL)
156 : : #endif
157 : :
158 : : #ifndef DEF_INTERNAL_FLT_FN
159 : : #define DEF_INTERNAL_FLT_FN(NAME, FLAGS, OPTAB, TYPE) \
160 : : DEF_INTERNAL_OPTAB_FN (NAME, FLAGS, OPTAB, TYPE)
161 : : #endif
162 : :
163 : : #ifndef DEF_INTERNAL_FLT_FLOATN_FN
164 : : #define DEF_INTERNAL_FLT_FLOATN_FN(NAME, FLAGS, OPTAB, TYPE) \
165 : : DEF_INTERNAL_FLT_FN (NAME, FLAGS, OPTAB, TYPE)
166 : : #endif
167 : :
168 : : #ifndef DEF_INTERNAL_INT_FN
169 : : #define DEF_INTERNAL_INT_FN(NAME, FLAGS, OPTAB, TYPE) \
170 : : DEF_INTERNAL_OPTAB_FN (NAME, FLAGS, OPTAB, TYPE)
171 : : #endif
172 : :
173 : : #ifndef DEF_INTERNAL_INT_EXT_FN
174 : : #define DEF_INTERNAL_INT_EXT_FN(NAME, FLAGS, OPTAB, TYPE) \
175 : : DEF_INTERNAL_INT_FN (NAME, FLAGS, OPTAB, TYPE)
176 : : #endif
177 : :
178 : : #ifndef DEF_INTERNAL_WIDENING_OPTAB_FN
179 : : #define DEF_INTERNAL_WIDENING_OPTAB_FN(NAME, FLAGS, SELECTOR, SOPTAB, UOPTAB, TYPE) \
180 : : DEF_INTERNAL_SIGNED_OPTAB_FN (NAME, FLAGS, SELECTOR, SOPTAB, UOPTAB, TYPE) \
181 : : DEF_INTERNAL_SIGNED_OPTAB_FN (NAME ## _LO, FLAGS, SELECTOR, SOPTAB##_lo, UOPTAB##_lo, TYPE) \
182 : : DEF_INTERNAL_SIGNED_OPTAB_FN (NAME ## _HI, FLAGS, SELECTOR, SOPTAB##_hi, UOPTAB##_hi, TYPE) \
183 : : DEF_INTERNAL_SIGNED_OPTAB_FN (NAME ## _EVEN, FLAGS, SELECTOR, SOPTAB##_even, UOPTAB##_even, TYPE) \
184 : : DEF_INTERNAL_SIGNED_OPTAB_FN (NAME ## _ODD, FLAGS, SELECTOR, SOPTAB##_odd, UOPTAB##_odd, TYPE)
185 : : #endif
186 : :
187 : : #ifndef DEF_INTERNAL_COND_FN
188 : : #define DEF_INTERNAL_COND_FN(NAME, FLAGS, OPTAB, TYPE) \
189 : : DEF_INTERNAL_OPTAB_FN (COND_##NAME, FLAGS, cond_##OPTAB, cond_##TYPE) \
190 : : DEF_INTERNAL_OPTAB_FN (COND_LEN_##NAME, FLAGS, cond_len_##OPTAB, \
191 : : cond_len_##TYPE)
192 : : #endif
193 : :
194 : : #ifndef DEF_INTERNAL_SIGNED_COND_FN
195 : : #define DEF_INTERNAL_SIGNED_COND_FN(NAME, FLAGS, SELECTOR, SIGNED_OPTAB, \
196 : : UNSIGNED_OPTAB, TYPE) \
197 : : DEF_INTERNAL_SIGNED_OPTAB_FN (COND_##NAME, FLAGS, SELECTOR, \
198 : : cond_##SIGNED_OPTAB, cond_##UNSIGNED_OPTAB, \
199 : : cond_##TYPE) \
200 : : DEF_INTERNAL_SIGNED_OPTAB_FN (COND_LEN_##NAME, FLAGS, SELECTOR, \
201 : : cond_len_##SIGNED_OPTAB, \
202 : : cond_len_##UNSIGNED_OPTAB, cond_len_##TYPE)
203 : : #endif
204 : :
205 : 249 : DEF_INTERNAL_OPTAB_FN (CRC, ECF_CONST | ECF_NOTHROW, crc, crc)
206 : 234 : DEF_INTERNAL_OPTAB_FN (CRC_REV, ECF_CONST | ECF_NOTHROW, crc_rev, crc)
207 : 555 : DEF_INTERNAL_OPTAB_FN (MASK_LOAD, ECF_PURE, maskload, mask_load)
208 : 0 : DEF_INTERNAL_OPTAB_FN (LOAD_LANES, ECF_CONST, vec_load_lanes, load_lanes)
209 : 0 : DEF_INTERNAL_OPTAB_FN (MASK_LOAD_LANES, ECF_PURE,
210 : : vec_mask_load_lanes, mask_load_lanes)
211 : 0 : DEF_INTERNAL_OPTAB_FN (MASK_LEN_LOAD_LANES, ECF_PURE,
212 : : vec_mask_len_load_lanes, mask_load_lanes)
213 : :
214 : 21674 : DEF_INTERNAL_OPTAB_FN (GATHER_LOAD, ECF_PURE, gather_load, gather_load)
215 : 21674 : DEF_INTERNAL_OPTAB_FN (MASK_GATHER_LOAD, ECF_PURE,
216 : : mask_gather_load, gather_load)
217 : 21674 : DEF_INTERNAL_OPTAB_FN (MASK_LEN_GATHER_LOAD, ECF_PURE,
218 : : mask_len_gather_load, gather_load)
219 : 0 : DEF_INTERNAL_OPTAB_FN (MASK_LEN_STRIDED_LOAD, ECF_PURE,
220 : : mask_len_strided_load, strided_load)
221 : :
222 : 0 : DEF_INTERNAL_OPTAB_FN (LEN_LOAD, ECF_PURE, len_load, len_load)
223 : 0 : DEF_INTERNAL_OPTAB_FN (MASK_LEN_LOAD, ECF_PURE, mask_len_load, mask_len_load)
224 : :
225 : 28008 : DEF_INTERNAL_OPTAB_FN (SCATTER_STORE, 0, scatter_store, scatter_store)
226 : 28012 : DEF_INTERNAL_OPTAB_FN (MASK_SCATTER_STORE, 0,
227 : : mask_scatter_store, scatter_store)
228 : 28012 : DEF_INTERNAL_OPTAB_FN (MASK_LEN_SCATTER_STORE, 0,
229 : : mask_len_scatter_store, scatter_store)
230 : 0 : DEF_INTERNAL_OPTAB_FN (MASK_LEN_STRIDED_STORE, 0,
231 : : mask_len_strided_store, strided_store)
232 : :
233 : 555 : DEF_INTERNAL_OPTAB_FN (MASK_STORE, 0, maskstore, mask_store)
234 : 0 : DEF_INTERNAL_OPTAB_FN (STORE_LANES, ECF_CONST, vec_store_lanes, store_lanes)
235 : 0 : DEF_INTERNAL_OPTAB_FN (MASK_STORE_LANES, 0,
236 : : vec_mask_store_lanes, mask_store_lanes)
237 : 0 : DEF_INTERNAL_OPTAB_FN (MASK_LEN_STORE_LANES, 0,
238 : : vec_mask_len_store_lanes, mask_store_lanes)
239 : :
240 : 6280 : DEF_INTERNAL_OPTAB_FN (VCOND_MASK, ECF_CONST | ECF_NOTHROW,
241 : : vcond_mask, vec_cond_mask)
242 : 1 : DEF_INTERNAL_OPTAB_FN (VCOND_MASK_LEN, ECF_CONST | ECF_NOTHROW,
243 : : vcond_mask_len, cond_len_unary)
244 : :
245 : 122 : DEF_INTERNAL_OPTAB_FN (VEC_SET, ECF_CONST | ECF_NOTHROW, vec_set, vec_set)
246 : 0 : DEF_INTERNAL_OPTAB_FN (VEC_EXTRACT, ECF_CONST | ECF_NOTHROW,
247 : : vec_extract, vec_extract)
248 : :
249 : 0 : DEF_INTERNAL_OPTAB_FN (LEN_STORE, 0, len_store, len_store)
250 : 0 : DEF_INTERNAL_OPTAB_FN (MASK_LEN_STORE, 0, mask_len_store, mask_len_store)
251 : :
252 : 91 : DEF_INTERNAL_OPTAB_FN (WHILE_ULT, ECF_CONST | ECF_NOTHROW, while_ult, while)
253 : 0 : DEF_INTERNAL_OPTAB_FN (SELECT_VL, ECF_CONST | ECF_NOTHROW, select_vl, binary)
254 : 72 : DEF_INTERNAL_OPTAB_FN (CHECK_RAW_PTRS, ECF_CONST | ECF_NOTHROW,
255 : : check_raw_ptrs, check_ptrs)
256 : 4876 : DEF_INTERNAL_OPTAB_FN (CHECK_WAR_PTRS, ECF_CONST | ECF_NOTHROW,
257 : : check_war_ptrs, check_ptrs)
258 : :
259 : 0 : DEF_INTERNAL_OPTAB_FN (VEC_SHL_INSERT, ECF_CONST | ECF_NOTHROW,
260 : : vec_shl_insert, binary)
261 : :
262 : 53435 : DEF_INTERNAL_OPTAB_FN (DIV_POW2, ECF_CONST | ECF_NOTHROW, sdiv_pow2, binary)
263 : :
264 : 6902 : DEF_INTERNAL_OPTAB_FN (FMS, ECF_CONST, fms, ternary)
265 : 7116 : DEF_INTERNAL_OPTAB_FN (FNMA, ECF_CONST, fnma, ternary)
266 : 1854 : DEF_INTERNAL_OPTAB_FN (FNMS, ECF_CONST, fnms, ternary)
267 : :
268 : 2622 : DEF_INTERNAL_SIGNED_OPTAB_FN (ABD, ECF_CONST | ECF_NOTHROW, first,
269 : : sabd, uabd, binary)
270 : :
271 : 985 : DEF_INTERNAL_SIGNED_OPTAB_FN (AVG_FLOOR, ECF_CONST | ECF_NOTHROW, first,
272 : : savg_floor, uavg_floor, binary)
273 : 503 : DEF_INTERNAL_SIGNED_OPTAB_FN (AVG_CEIL, ECF_CONST | ECF_NOTHROW, first,
274 : : savg_ceil, uavg_ceil, binary)
275 : :
276 : 2666 : DEF_INTERNAL_SIGNED_OPTAB_FN (MULH, ECF_CONST | ECF_NOTHROW, first,
277 : : smul_highpart, umul_highpart, binary)
278 : 76 : DEF_INTERNAL_SIGNED_OPTAB_FN (MULHS, ECF_CONST | ECF_NOTHROW, first,
279 : : smulhs, umulhs, binary)
280 : 122 : DEF_INTERNAL_SIGNED_OPTAB_FN (MULHRS, ECF_CONST | ECF_NOTHROW, first,
281 : : smulhrs, umulhrs, binary)
282 : :
283 : 272 : DEF_INTERNAL_SIGNED_OPTAB_FN (SAT_ADD, ECF_CONST, first, ssadd, usadd, binary)
284 : 660 : DEF_INTERNAL_SIGNED_OPTAB_FN (SAT_SUB, ECF_CONST, first, sssub, ussub, binary)
285 : :
286 : 386 : DEF_INTERNAL_SIGNED_OPTAB_FN (SAT_TRUNC, ECF_CONST, first, sstrunc, ustrunc, unary_convert)
287 : :
288 : 24932 : DEF_INTERNAL_COND_FN (ADD, ECF_CONST, add, binary)
289 : 1905 : DEF_INTERNAL_COND_FN (SUB, ECF_CONST, sub, binary)
290 : 2156 : DEF_INTERNAL_COND_FN (MUL, ECF_CONST, smul, binary)
291 : 748 : DEF_INTERNAL_SIGNED_COND_FN (DIV, ECF_CONST, first, sdiv, udiv, binary)
292 : 365 : DEF_INTERNAL_SIGNED_COND_FN (MOD, ECF_CONST, first, smod, umod, binary)
293 : 419 : DEF_INTERNAL_COND_FN (RDIV, ECF_CONST, sdiv, binary)
294 : 328 : DEF_INTERNAL_SIGNED_COND_FN (MIN, ECF_CONST, first, smin, umin, binary)
295 : 796 : DEF_INTERNAL_SIGNED_COND_FN (MAX, ECF_CONST, first, smax, umax, binary)
296 : 0 : DEF_INTERNAL_COND_FN (COPYSIGN, ECF_CONST, copysign, binary)
297 : 0 : DEF_INTERNAL_COND_FN (FMIN, ECF_CONST, fmin, binary)
298 : 0 : DEF_INTERNAL_COND_FN (FMAX, ECF_CONST, fmax, binary)
299 : 236 : DEF_INTERNAL_COND_FN (AND, ECF_CONST | ECF_NOTHROW, and, binary)
300 : 2122 : DEF_INTERNAL_COND_FN (IOR, ECF_CONST | ECF_NOTHROW, ior, binary)
301 : 497 : DEF_INTERNAL_COND_FN (XOR, ECF_CONST | ECF_NOTHROW, xor, binary)
302 : 483 : DEF_INTERNAL_COND_FN (SHL, ECF_CONST | ECF_NOTHROW, ashl, binary)
303 : 827 : DEF_INTERNAL_SIGNED_COND_FN (SHR, ECF_CONST | ECF_NOTHROW, first, ashr, lshr,
304 : : binary)
305 : :
306 : 610 : DEF_INTERNAL_COND_FN (FMA, ECF_CONST, fma, ternary)
307 : 178 : DEF_INTERNAL_COND_FN (FMS, ECF_CONST, fms, ternary)
308 : 154 : DEF_INTERNAL_COND_FN (FNMA, ECF_CONST, fnma, ternary)
309 : 150 : DEF_INTERNAL_COND_FN (FNMS, ECF_CONST, fnms, ternary)
310 : :
311 : 203 : DEF_INTERNAL_COND_FN (NEG, ECF_CONST, neg, unary)
312 : 40 : DEF_INTERNAL_COND_FN (NOT, ECF_CONST, one_cmpl, unary)
313 : :
314 : 179 : DEF_INTERNAL_OPTAB_FN (RSQRT, ECF_CONST, rsqrt, unary)
315 : :
316 : 70889 : DEF_INTERNAL_OPTAB_FN (REDUC_PLUS, ECF_CONST | ECF_NOTHROW,
317 : : reduc_plus_scal, unary)
318 : 4938 : DEF_INTERNAL_SIGNED_OPTAB_FN (REDUC_MAX, ECF_CONST | ECF_NOTHROW, first,
319 : : reduc_smax_scal, reduc_umax_scal, unary)
320 : 4326 : DEF_INTERNAL_SIGNED_OPTAB_FN (REDUC_MIN, ECF_CONST | ECF_NOTHROW, first,
321 : : reduc_smin_scal, reduc_umin_scal, unary)
322 : 30 : DEF_INTERNAL_OPTAB_FN (REDUC_FMAX, ECF_CONST | ECF_NOTHROW,
323 : : reduc_fmax_scal, unary)
324 : 24 : DEF_INTERNAL_OPTAB_FN (REDUC_FMIN, ECF_CONST | ECF_NOTHROW,
325 : : reduc_fmin_scal, unary)
326 : 12939 : DEF_INTERNAL_OPTAB_FN (REDUC_AND, ECF_CONST | ECF_NOTHROW,
327 : : reduc_and_scal, unary)
328 : 36577 : DEF_INTERNAL_OPTAB_FN (REDUC_IOR, ECF_CONST | ECF_NOTHROW,
329 : : reduc_ior_scal, unary)
330 : 1302 : DEF_INTERNAL_OPTAB_FN (REDUC_XOR, ECF_CONST | ECF_NOTHROW,
331 : : reduc_xor_scal, unary)
332 : :
333 : : /* Extract the last active element from a vector. */
334 : 1 : DEF_INTERNAL_OPTAB_FN (EXTRACT_LAST, ECF_CONST | ECF_NOTHROW,
335 : : extract_last, fold_left)
336 : :
337 : : /* Same, but return the first argument if no elements are active. */
338 : 575 : DEF_INTERNAL_OPTAB_FN (FOLD_EXTRACT_LAST, ECF_CONST | ECF_NOTHROW,
339 : : fold_extract_last, fold_extract)
340 : :
341 : 575 : DEF_INTERNAL_OPTAB_FN (LEN_FOLD_EXTRACT_LAST, ECF_CONST | ECF_NOTHROW,
342 : : len_fold_extract_last, fold_len_extract)
343 : :
344 : 3904 : DEF_INTERNAL_OPTAB_FN (FOLD_LEFT_PLUS, ECF_CONST | ECF_NOTHROW,
345 : : fold_left_plus, fold_left)
346 : :
347 : 0 : DEF_INTERNAL_OPTAB_FN (MASK_FOLD_LEFT_PLUS, ECF_CONST | ECF_NOTHROW,
348 : : mask_fold_left_plus, mask_fold_left)
349 : :
350 : 0 : DEF_INTERNAL_OPTAB_FN (MASK_LEN_FOLD_LEFT_PLUS, ECF_CONST | ECF_NOTHROW,
351 : : mask_len_fold_left_plus, mask_len_fold_left)
352 : :
353 : : /* Unary math functions. */
354 : 171 : DEF_INTERNAL_FLT_FN (ACOS, ECF_CONST, acos, unary)
355 : 899 : DEF_INTERNAL_FLT_FN (ACOSH, ECF_CONST, acosh, unary)
356 : 1940 : DEF_INTERNAL_FLT_FN (ASIN, ECF_CONST, asin, unary)
357 : 515 : DEF_INTERNAL_FLT_FN (ASINH, ECF_CONST, asinh, unary)
358 : 1516 : DEF_INTERNAL_FLT_FN (ATAN, ECF_CONST, atan, unary)
359 : 1193 : DEF_INTERNAL_FLT_FN (ATANH, ECF_CONST, atanh, unary)
360 : 5587 : DEF_INTERNAL_FLT_FN (COS, ECF_CONST, cos, unary)
361 : 2870 : DEF_INTERNAL_FLT_FN (COSH, ECF_CONST, cosh, unary)
362 : 12853 : DEF_INTERNAL_FLT_FN (EXP, ECF_CONST, exp, unary)
363 : 20 : DEF_INTERNAL_FLT_FN (EXP10, ECF_CONST, exp10, unary)
364 : 2749 : DEF_INTERNAL_FLT_FN (EXP2, ECF_CONST, exp2, unary)
365 : 715 : DEF_INTERNAL_FLT_FN (EXPM1, ECF_CONST, expm1, unary)
366 : 12897 : DEF_INTERNAL_FLT_FN (LOG, ECF_CONST, log, unary)
367 : 2451 : DEF_INTERNAL_FLT_FN (LOG10, ECF_CONST, log10, unary)
368 : 1401 : DEF_INTERNAL_FLT_FN (LOG1P, ECF_CONST, log1p, unary)
369 : 1677 : DEF_INTERNAL_FLT_FN (LOG2, ECF_CONST, log2, unary)
370 : 885 : DEF_INTERNAL_FLT_FN (LOGB, ECF_CONST, logb, unary)
371 : 24857 : DEF_INTERNAL_FLT_FN (SIGNBIT, ECF_CONST, signbit, unary)
372 : 228 : DEF_INTERNAL_FLT_FN (SIGNIFICAND, ECF_CONST, significand, unary)
373 : 9934 : DEF_INTERNAL_FLT_FN (SIN, ECF_CONST, sin, unary)
374 : 2644 : DEF_INTERNAL_FLT_FN (SINH, ECF_CONST, sinh, unary)
375 : 7279 : DEF_INTERNAL_FLT_FLOATN_FN (SQRT, ECF_CONST, sqrt, unary)
376 : 2095 : DEF_INTERNAL_FLT_FN (TAN, ECF_CONST, tan, unary)
377 : 582 : DEF_INTERNAL_FLT_FN (TANH, ECF_CONST, tanh, unary)
378 : :
379 : : /* Floating-point to integer conversions.
380 : :
381 : : ??? Here we preserve the I/L/LL prefix convention from the
382 : : corresponding built-in functions, rather than make the internal
383 : : functions polymorphic in both the argument and the return types.
384 : : Perhaps an alternative would be to pass a zero of the required
385 : : return type as a second parameter. */
386 : 212 : DEF_INTERNAL_FLT_FN (ICEIL, ECF_CONST, lceil, unary_convert)
387 : 215 : DEF_INTERNAL_FLT_FN (IFLOOR, ECF_CONST, lfloor, unary_convert)
388 : 273 : DEF_INTERNAL_FLT_FN (IRINT, ECF_CONST, lrint, unary_convert)
389 : 3739 : DEF_INTERNAL_FLT_FN (IROUND, ECF_CONST, lround, unary_convert)
390 : 2170 : DEF_INTERNAL_FLT_FN (LCEIL, ECF_CONST, lceil, unary_convert)
391 : 2110 : DEF_INTERNAL_FLT_FN (LFLOOR, ECF_CONST, lfloor, unary_convert)
392 : 432 : DEF_INTERNAL_FLT_FLOATN_FN (LRINT, ECF_CONST, lrint, unary_convert)
393 : 168 : DEF_INTERNAL_FLT_FLOATN_FN (LROUND, ECF_CONST, lround, unary_convert)
394 : 396 : DEF_INTERNAL_FLT_FN (LLCEIL, ECF_CONST, lceil, unary_convert)
395 : 396 : DEF_INTERNAL_FLT_FN (LLFLOOR, ECF_CONST, lfloor, unary_convert)
396 : 32 : DEF_INTERNAL_FLT_FLOATN_FN (LLRINT, ECF_CONST, lrint, unary_convert)
397 : 32 : DEF_INTERNAL_FLT_FLOATN_FN (LLROUND, ECF_CONST, lround, unary_convert)
398 : :
399 : : /* FP rounding. */
400 : 1142 : DEF_INTERNAL_FLT_FLOATN_FN (CEIL, ECF_CONST, ceil, unary)
401 : 891 : DEF_INTERNAL_FLT_FLOATN_FN (FLOOR, ECF_CONST, floor, unary)
402 : 262 : DEF_INTERNAL_FLT_FLOATN_FN (NEARBYINT, ECF_CONST, nearbyint, unary)
403 : 540 : DEF_INTERNAL_FLT_FLOATN_FN (RINT, ECF_CONST, rint, unary)
404 : 385 : DEF_INTERNAL_FLT_FLOATN_FN (ROUND, ECF_CONST, round, unary)
405 : 25 : DEF_INTERNAL_FLT_FLOATN_FN (ROUNDEVEN, ECF_CONST, roundeven, unary)
406 : 1617 : DEF_INTERNAL_FLT_FLOATN_FN (TRUNC, ECF_CONST, btrunc, unary)
407 : :
408 : : /* Binary math functions. */
409 : 6805 : DEF_INTERNAL_FLT_FN (ATAN2, ECF_CONST, atan2, binary)
410 : 67875 : DEF_INTERNAL_FLT_FLOATN_FN (COPYSIGN, ECF_CONST, copysign, binary)
411 : 5958 : DEF_INTERNAL_FLT_FN (FMOD, ECF_CONST, fmod, binary)
412 : 1409 : DEF_INTERNAL_FLT_FN (HYPOT, ECF_CONST, hypot, binary)
413 : 23581 : DEF_INTERNAL_FLT_FN (POW, ECF_CONST, pow, binary)
414 : 261 : DEF_INTERNAL_FLT_FN (REMAINDER, ECF_CONST, remainder, binary)
415 : 413 : DEF_INTERNAL_FLT_FN (SCALB, ECF_CONST, scalb, binary)
416 : 247 : DEF_INTERNAL_FLT_FLOATN_FN (FMIN, ECF_CONST, fmin, binary)
417 : 304 : DEF_INTERNAL_FLT_FLOATN_FN (FMAX, ECF_CONST, fmax, binary)
418 : 46 : DEF_INTERNAL_OPTAB_FN (XORSIGN, ECF_CONST, xorsign, binary)
419 : 195 : DEF_INTERNAL_OPTAB_FN (COMPLEX_ADD_ROT90, ECF_CONST, cadd90, binary)
420 : 69 : DEF_INTERNAL_OPTAB_FN (COMPLEX_ADD_ROT270, ECF_CONST, cadd270, binary)
421 : 142 : DEF_INTERNAL_OPTAB_FN (COMPLEX_MUL, ECF_CONST, cmul, binary)
422 : 14 : DEF_INTERNAL_OPTAB_FN (COMPLEX_MUL_CONJ, ECF_CONST, cmul_conj, binary)
423 : 2994 : DEF_INTERNAL_OPTAB_FN (VEC_ADDSUB, ECF_CONST, vec_addsub, binary)
424 : 286506 : DEF_INTERNAL_WIDENING_OPTAB_FN (VEC_WIDEN_PLUS,
425 : : ECF_CONST | ECF_NOTHROW,
426 : : first,
427 : : vec_widen_sadd, vec_widen_uadd,
428 : : binary)
429 : 39372 : DEF_INTERNAL_WIDENING_OPTAB_FN (VEC_WIDEN_MINUS,
430 : : ECF_CONST | ECF_NOTHROW,
431 : : first,
432 : : vec_widen_ssub, vec_widen_usub,
433 : : binary)
434 : 4752 : DEF_INTERNAL_WIDENING_OPTAB_FN (VEC_WIDEN_ABD,
435 : : ECF_CONST | ECF_NOTHROW,
436 : : first,
437 : : vec_widen_sabd, vec_widen_uabd,
438 : : binary)
439 : 836 : DEF_INTERNAL_OPTAB_FN (VEC_FMADDSUB, ECF_CONST, vec_fmaddsub, ternary)
440 : 583 : DEF_INTERNAL_OPTAB_FN (VEC_FMSUBADD, ECF_CONST, vec_fmsubadd, ternary)
441 : :
442 : : /* FP scales. */
443 : 871 : DEF_INTERNAL_FLT_FLOATN_FN (LDEXP, ECF_CONST, ldexp, binary)
444 : :
445 : : /* Ternary math functions. */
446 : 4638269 : DEF_INTERNAL_FLT_FLOATN_FN (FMA, ECF_CONST, fma, ternary)
447 : 14 : DEF_INTERNAL_OPTAB_FN (COMPLEX_FMA, ECF_CONST, cmla, ternary)
448 : 14 : DEF_INTERNAL_OPTAB_FN (COMPLEX_FMA_CONJ, ECF_CONST, cmla_conj, ternary)
449 : 0 : DEF_INTERNAL_OPTAB_FN (COMPLEX_FMS, ECF_CONST, cmls, ternary)
450 : 0 : DEF_INTERNAL_OPTAB_FN (COMPLEX_FMS_CONJ, ECF_CONST, cmls_conj, ternary)
451 : :
452 : : /* Unary integer ops. */
453 : 878 : DEF_INTERNAL_INT_EXT_FN (CLRSB, ECF_CONST | ECF_NOTHROW, clrsb, unary)
454 : 175196 : DEF_INTERNAL_INT_EXT_FN (CLZ, ECF_CONST | ECF_NOTHROW, clz, unary)
455 : 41678 : DEF_INTERNAL_INT_EXT_FN (CTZ, ECF_CONST | ECF_NOTHROW, ctz, unary)
456 : 8407 : DEF_INTERNAL_INT_EXT_FN (FFS, ECF_CONST | ECF_NOTHROW, ffs, unary)
457 : 2128 : DEF_INTERNAL_INT_EXT_FN (PARITY, ECF_CONST | ECF_NOTHROW, parity, unary)
458 : 10367 : DEF_INTERNAL_INT_EXT_FN (POPCOUNT, ECF_CONST | ECF_NOTHROW, popcount, unary)
459 : :
460 : 282841 : DEF_INTERNAL_FN (GOMP_TARGET_REV, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
461 : 282841 : DEF_INTERNAL_FN (GOMP_USE_SIMT, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
462 : 282841 : DEF_INTERNAL_FN (GOMP_SIMT_ENTER, ECF_LEAF | ECF_NOTHROW, NULL)
463 : 282841 : DEF_INTERNAL_FN (GOMP_SIMT_ENTER_ALLOC, ECF_LEAF | ECF_NOTHROW, NULL)
464 : 282841 : DEF_INTERNAL_FN (GOMP_SIMT_EXIT, ECF_LEAF | ECF_NOTHROW, NULL)
465 : 282841 : DEF_INTERNAL_FN (GOMP_SIMT_LANE, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
466 : 282841 : DEF_INTERNAL_FN (GOMP_SIMT_VF, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
467 : 282841 : DEF_INTERNAL_FN (GOMP_MAX_VF, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
468 : 282841 : DEF_INTERNAL_FN (GOMP_SIMT_LAST_LANE, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
469 : 282841 : DEF_INTERNAL_FN (GOMP_SIMT_ORDERED_PRED, ECF_LEAF | ECF_NOTHROW, NULL)
470 : 282841 : DEF_INTERNAL_FN (GOMP_SIMT_VOTE_ANY, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
471 : 282841 : DEF_INTERNAL_FN (GOMP_SIMT_XCHG_BFLY, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
472 : 282841 : DEF_INTERNAL_FN (GOMP_SIMT_XCHG_IDX, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
473 : 282841 : DEF_INTERNAL_FN (GOMP_SIMD_LANE, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
474 : 282841 : DEF_INTERNAL_FN (GOMP_SIMD_VF, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
475 : 282841 : DEF_INTERNAL_FN (GOMP_SIMD_LAST_LANE, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
476 : 282841 : DEF_INTERNAL_FN (GOMP_SIMD_ORDERED_START, ECF_LEAF | ECF_NOTHROW, NULL)
477 : 282841 : DEF_INTERNAL_FN (GOMP_SIMD_ORDERED_END, ECF_LEAF | ECF_NOTHROW, NULL)
478 : 282841 : DEF_INTERNAL_FN (GOMP_DISPATCH, ECF_LEAF | ECF_NOTHROW, NULL)
479 : 282841 : DEF_INTERNAL_FN (LOOP_VECTORIZED, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
480 : 282841 : DEF_INTERNAL_FN (LOOP_DIST_ALIAS, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
481 : 282841 : DEF_INTERNAL_FN (ANNOTATE, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
482 : 282841 : DEF_INTERNAL_FN (UBSAN_NULL, ECF_LEAF | ECF_NOTHROW, ". R . ")
483 : 282841 : DEF_INTERNAL_FN (UBSAN_BOUNDS, ECF_LEAF | ECF_NOTHROW, NULL)
484 : 282841 : DEF_INTERNAL_FN (UBSAN_VPTR, ECF_LEAF | ECF_NOTHROW, ". R R . . ")
485 : 282841 : DEF_INTERNAL_FN (UBSAN_CHECK_ADD, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
486 : 282841 : DEF_INTERNAL_FN (UBSAN_CHECK_SUB, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
487 : 282841 : DEF_INTERNAL_FN (UBSAN_CHECK_MUL, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
488 : 282841 : DEF_INTERNAL_FN (UBSAN_PTR, ECF_LEAF | ECF_NOTHROW, ". R . ")
489 : 282841 : DEF_INTERNAL_FN (UBSAN_OBJECT_SIZE, ECF_LEAF | ECF_NOTHROW, NULL)
490 : 282841 : DEF_INTERNAL_FN (ABNORMAL_DISPATCHER, ECF_NORETURN, NULL)
491 : 282841 : DEF_INTERNAL_FN (BUILTIN_EXPECT, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
492 : 282841 : DEF_INTERNAL_FN (HWASAN_ALLOCA_UNPOISON, ECF_LEAF | ECF_NOTHROW, ". R ")
493 : 282841 : DEF_INTERNAL_FN (HWASAN_CHOOSE_TAG, ECF_LEAF | ECF_NOTHROW, ". ")
494 : 282841 : DEF_INTERNAL_FN (HWASAN_CHECK, ECF_TM_PURE | ECF_LEAF | ECF_NOTHROW,
495 : : ". . R . . ")
496 : 282841 : DEF_INTERNAL_FN (HWASAN_MARK, ECF_LEAF | ECF_NOTHROW, NULL)
497 : 282841 : DEF_INTERNAL_FN (HWASAN_SET_TAG,
498 : : ECF_TM_PURE | ECF_PURE | ECF_LEAF | ECF_NOTHROW, ". R R ")
499 : 282841 : DEF_INTERNAL_FN (ASAN_CHECK, ECF_TM_PURE | ECF_LEAF | ECF_NOTHROW,
500 : : ". . R . . ")
501 : 282841 : DEF_INTERNAL_FN (ASAN_MARK, ECF_LEAF | ECF_NOTHROW, NULL)
502 : 282841 : DEF_INTERNAL_FN (ASAN_POISON, ECF_LEAF | ECF_NOTHROW | ECF_NOVOPS, NULL)
503 : 282841 : DEF_INTERNAL_FN (ASAN_POISON_USE, ECF_LEAF | ECF_NOTHROW | ECF_NOVOPS, NULL)
504 : 282841 : DEF_INTERNAL_FN (ADD_OVERFLOW, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
505 : 282841 : DEF_INTERNAL_FN (SUB_OVERFLOW, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
506 : 282841 : DEF_INTERNAL_FN (MUL_OVERFLOW, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
507 : 282841 : DEF_INTERNAL_FN (UADDC, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
508 : 282841 : DEF_INTERNAL_FN (USUBC, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
509 : 282841 : DEF_INTERNAL_FN (TSAN_FUNC_EXIT, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
510 : 282841 : DEF_INTERNAL_FN (VA_ARG, ECF_NOTHROW | ECF_LEAF, NULL)
511 : 282841 : DEF_INTERNAL_FN (VEC_CONVERT, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
512 : 282841 : DEF_INTERNAL_FN (RAWMEMCHR, ECF_PURE | ECF_LEAF | ECF_NOTHROW, NULL)
513 : :
514 : : /* An unduplicable, uncombinable function. Generally used to preserve
515 : : a CFG property in the face of jump threading, tail merging or
516 : : other such optimizations. The first argument distinguishes
517 : : between uses. See internal-fn.h for usage. */
518 : 282841 : DEF_INTERNAL_FN (UNIQUE, ECF_NOTHROW, NULL)
519 : 282841 : DEF_INTERNAL_FN (PHI, 0, NULL)
520 : :
521 : : /* A function to represent an artifical initialization to an uninitialized
522 : : automatic variable. */
523 : 282841 : DEF_INTERNAL_FN (DEFERRED_INIT, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
524 : :
525 : : /* A function to associate the access size and access mode information
526 : : with the corresponding reference to an object. It only reads from the
527 : : 2nd argument. */
528 : 282841 : DEF_INTERNAL_FN (ACCESS_WITH_SIZE, ECF_PURE | ECF_LEAF | ECF_NOTHROW, NULL)
529 : :
530 : : /* DIM_SIZE and DIM_POS return the size of a particular compute
531 : : dimension and the executing thread's position within that
532 : : dimension. DIM_POS is pure (and not const) so that it isn't
533 : : thought to clobber memory and can be gcse'd within a single
534 : : parallel region, but not across FORK/JOIN boundaries. They take a
535 : : single INTEGER_CST argument. This might be overly conservative. */
536 : 282841 : DEF_INTERNAL_FN (GOACC_DIM_SIZE, ECF_CONST | ECF_NOTHROW | ECF_LEAF, NULL)
537 : 282841 : DEF_INTERNAL_FN (GOACC_DIM_POS, ECF_PURE | ECF_NOTHROW | ECF_LEAF, NULL)
538 : :
539 : : /* OpenACC looping abstraction. See internal-fn.h for usage. */
540 : 282841 : DEF_INTERNAL_FN (GOACC_LOOP, ECF_PURE | ECF_NOTHROW, NULL)
541 : :
542 : : /* OpenACC reduction abstraction. See internal-fn.h for usage. */
543 : 282841 : DEF_INTERNAL_FN (GOACC_REDUCTION, ECF_NOTHROW | ECF_LEAF, NULL)
544 : :
545 : : /* Openacc tile abstraction. Describes the spans of the element loop.
546 : : GOACC_TILE (num-loops, loop-no, tile-arg, tile-mask, element-mask). */
547 : 282841 : DEF_INTERNAL_FN (GOACC_TILE, ECF_NOTHROW | ECF_LEAF, NULL)
548 : :
549 : : /* Set errno to EDOM, if GCC knows how to do that directly for the
550 : : current target. */
551 : 282841 : DEF_INTERNAL_FN (SET_EDOM, ECF_LEAF | ECF_NOTHROW, NULL)
552 : :
553 : : /* Atomic functions. These don't have ECF_NOTHROW because for
554 : : -fnon-call-exceptions they can throw, otherwise we set
555 : : gimple_call_nothrow_p on it. */
556 : 282841 : DEF_INTERNAL_FN (ATOMIC_BIT_TEST_AND_SET, ECF_LEAF, NULL)
557 : 282841 : DEF_INTERNAL_FN (ATOMIC_BIT_TEST_AND_COMPLEMENT, ECF_LEAF, NULL)
558 : 282841 : DEF_INTERNAL_FN (ATOMIC_BIT_TEST_AND_RESET, ECF_LEAF, NULL)
559 : 282841 : DEF_INTERNAL_FN (ATOMIC_COMPARE_EXCHANGE, ECF_LEAF, NULL)
560 : 282841 : DEF_INTERNAL_FN (ATOMIC_ADD_FETCH_CMP_0, ECF_LEAF, NULL)
561 : 282841 : DEF_INTERNAL_FN (ATOMIC_SUB_FETCH_CMP_0, ECF_LEAF, NULL)
562 : 282841 : DEF_INTERNAL_FN (ATOMIC_AND_FETCH_CMP_0, ECF_LEAF, NULL)
563 : 282841 : DEF_INTERNAL_FN (ATOMIC_OR_FETCH_CMP_0, ECF_LEAF, NULL)
564 : 282841 : DEF_INTERNAL_FN (ATOMIC_XOR_FETCH_CMP_0, ECF_LEAF, NULL)
565 : :
566 : : /* To implement [[fallthrough]]. If the TREE_NOTHROW or GF_CALL_NOTHROW flag
567 : : is set on the call (normally redundant with ECF_NOTHROW), it marks
568 : : [[fallthrough]] at the end of C++ loop body. */
569 : 282841 : DEF_INTERNAL_FN (FALLTHROUGH, ECF_LEAF | ECF_NOTHROW, NULL)
570 : :
571 : : /* To implement __builtin_launder. */
572 : 282841 : DEF_INTERNAL_FN (LAUNDER, ECF_LEAF | ECF_NOTHROW | ECF_NOVOPS, NULL)
573 : :
574 : : /* Divmod function. */
575 : 282841 : DEF_INTERNAL_FN (DIVMOD, ECF_CONST | ECF_LEAF, NULL)
576 : :
577 : : /* For coroutines. */
578 : 282841 : DEF_INTERNAL_FN (CO_ACTOR, ECF_NOTHROW | ECF_LEAF, NULL)
579 : 282841 : DEF_INTERNAL_FN (CO_YIELD, ECF_NOTHROW | ECF_LEAF, NULL)
580 : 282841 : DEF_INTERNAL_FN (CO_SUSPN, ECF_NOTHROW, NULL)
581 : 282841 : DEF_INTERNAL_FN (CO_FRAME, ECF_PURE | ECF_NOTHROW | ECF_LEAF, NULL)
582 : :
583 : : /* A NOP function with arbitrary arguments and return value. */
584 : 282841 : DEF_INTERNAL_FN (NOP, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
585 : :
586 : : /* Temporary vehicle for __builtin_shufflevector. */
587 : 282841 : DEF_INTERNAL_FN (SHUFFLEVECTOR, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
588 : :
589 : : /* <=> optimization. */
590 : 282841 : DEF_INTERNAL_FN (SPACESHIP, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
591 : :
592 : : /* [[assume (cond)]]. */
593 : 282841 : DEF_INTERNAL_FN (ASSUME, ECF_CONST | ECF_LEAF | ECF_NOTHROW
594 : : | ECF_LOOPING_CONST_OR_PURE, NULL)
595 : :
596 : : /* For if-conversion of inbranch SIMD clones. */
597 : 282841 : DEF_INTERNAL_FN (MASK_CALL, ECF_NOVOPS, NULL)
598 : :
599 : : /* _BitInt support. */
600 : 282841 : DEF_INTERNAL_FN (MULBITINT, ECF_LEAF | ECF_NOTHROW, ". O . R . R . ")
601 : 282841 : DEF_INTERNAL_FN (DIVMODBITINT, ECF_LEAF, ". O . O . R . R . ")
602 : 282841 : DEF_INTERNAL_FN (FLOATTOBITINT, ECF_LEAF | ECF_NOTHROW, ". O . . ")
603 : 282841 : DEF_INTERNAL_FN (BITINTTOFLOAT, ECF_PURE | ECF_LEAF, ". R . ")
604 : :
605 : : /* Bitwise functions. */
606 : 171 : DEF_INTERNAL_OPTAB_FN (BIT_ANDN, ECF_CONST, andn, binary)
607 : 24 : DEF_INTERNAL_OPTAB_FN (BIT_IORN, ECF_CONST, iorn, binary)
608 : :
609 : : #undef DEF_INTERNAL_WIDENING_OPTAB_FN
610 : : #undef DEF_INTERNAL_SIGNED_COND_FN
611 : : #undef DEF_INTERNAL_COND_FN
612 : : #undef DEF_INTERNAL_INT_EXT_FN
613 : : #undef DEF_INTERNAL_INT_FN
614 : : #undef DEF_INTERNAL_FLT_FN
615 : : #undef DEF_INTERNAL_FLT_FLOATN_FN
616 : : #undef DEF_INTERNAL_SIGNED_OPTAB_FN
617 : : #undef DEF_INTERNAL_OPTAB_FN
618 : : #undef DEF_INTERNAL_FN
|