]>
Commit | Line | Data |
---|---|---|
25583c4f | 1 | /* Internal functions. |
aeee4812 | 2 | Copyright (C) 2011-2023 Free Software Foundation, Inc. |
25583c4f RS |
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 | ||
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 |
db3efdaf | 51 | - gather_load: used for {mask_,len_mask,}gather_load |
d496134a | 52 | - len_load: currently just len_load |
ccfdda34 | 53 | - len_maskload: currently just len_maskload |
ab23f5d9 RS |
54 | |
55 | - mask_store: currently just maskstore | |
56 | - store_lanes: currently just vec_store_lanes | |
7e11fc7f | 57 | - mask_store_lanes: currently just vec_mask_store_lanes |
db3efdaf | 58 | - scatter_store: used for {mask_,len_mask,}scatter_store |
d496134a | 59 | - len_store: currently just len_store |
ccfdda34 | 60 | - len_maskstore: currently just len_maskstore |
ab23f5d9 | 61 | |
0972596e RS |
62 | - unary: a normal unary optab, such as vec_reverse_<mode> |
63 | - binary: a normal binary optab, such as vec_interleave_lo_<mode> | |
c566cc9f | 64 | - ternary: a normal ternary optab, such as fma<mode>4 |
0972596e | 65 | |
00eab0c6 RS |
66 | - unary_convert: a single-input conversion optab, such as |
67 | lround<srcmode><dstmode>2. | |
68 | ||
b41d1f6e RS |
69 | - cond_binary: a conditional binary optab, such as cond_add<mode> |
70 | - cond_ternary: a conditional ternary optab, such as cond_fma_rev<mode> | |
0972596e | 71 | |
b781a135 | 72 | - fold_left: for scalar = FN (scalar, vector), keyed off the vector mode |
58c036c8 | 73 | - check_ptrs: used for check_{raw,war}_ptrs |
b781a135 | 74 | |
6c96d1e4 JZZ |
75 | - cond_len_unary: a conditional unary optab, such as cond_len_neg<mode> |
76 | - cond_len_binary: a conditional binary optab, such as cond_len_add<mode> | |
77 | - cond_len_ternary: a conditional ternary optab, such as cond_len_fma_rev<mode> | |
78 | ||
16d24520 RS |
79 | DEF_INTERNAL_SIGNED_OPTAB_FN defines an internal function that |
80 | maps to one of two optabs, depending on the signedness of an input. | |
81 | SIGNED_OPTAB and UNSIGNED_OPTAB are the optabs for signed and | |
82 | unsigned inputs respectively, both without the trailing "_optab". | |
83 | SELECTOR says which type in the tree_pair determines the signedness. | |
84 | ||
686ee971 RS |
85 | DEF_INTERNAL_FLT_FN is like DEF_INTERNAL_OPTAB_FN, but in addition, |
86 | the function implements the computational part of a built-in math | |
87 | function BUILT_IN_<NAME>{F,,L}. Unlike some built-in functions, | |
88 | these internal functions never set errno. | |
89 | ||
4959a752 RS |
90 | DEF_INTERNAL_INT_FN is like DEF_INTERNAL_OPTAB_FN, but in addition |
91 | says that the function extends the C-level BUILT_IN_<NAME>{,L,LL,IMAX} | |
92 | group of functions to any integral mode (including vector modes). | |
93 | ||
2f482a07 AV |
94 | DEF_INTERNAL_WIDENING_OPTAB_FN is a wrapper that defines five internal |
95 | functions with DEF_INTERNAL_SIGNED_OPTAB_FN: | |
96 | - one that describes a widening operation with the same number of elements | |
97 | in the output and input vectors, | |
98 | - two that describe a pair of high-low widening operations where the output | |
99 | vectors each have half the number of elements of the input vectors, | |
100 | corresponding to the result of the widening operation on the top half and | |
101 | bottom half, these have the suffixes _HI and _LO, | |
102 | - and two that describe a pair of even-odd widening operations where the | |
103 | output vectors each have half the number of elements of the input vectors, | |
104 | corresponding to the result of the widening operation on the even and odd | |
105 | elements, these have the suffixes _EVEN and _ODD. | |
106 | These five internal functions will require two optabs each, a SIGNED_OPTAB | |
107 | and an UNSIGNED_OTPAB. | |
108 | ||
b78475cf | 109 | Each entry must have a corresponding expander of the form: |
25583c4f | 110 | |
538dd0b7 | 111 | void expand_NAME (gimple_call stmt) |
25583c4f | 112 | |
ab23f5d9 RS |
113 | where STMT is the statement that performs the call. These are generated |
114 | automatically for optab functions and call out to a function or macro | |
115 | called expand_<TYPE>_optab_fn. */ | |
116 | ||
117 | #ifndef DEF_INTERNAL_FN | |
118 | #define DEF_INTERNAL_FN(CODE, FLAGS, FNSPEC) | |
119 | #endif | |
120 | ||
121 | #ifndef DEF_INTERNAL_OPTAB_FN | |
122 | #define DEF_INTERNAL_OPTAB_FN(NAME, FLAGS, OPTAB, TYPE) \ | |
123 | DEF_INTERNAL_FN (NAME, FLAGS | ECF_LEAF, NULL) | |
124 | #endif | |
125 | ||
16d24520 RS |
126 | #ifndef DEF_INTERNAL_SIGNED_OPTAB_FN |
127 | #define DEF_INTERNAL_SIGNED_OPTAB_FN(NAME, FLAGS, SELECTOR, SIGNED_OPTAB, \ | |
128 | UNSIGNED_OPTAB, TYPE) \ | |
129 | DEF_INTERNAL_FN (NAME, FLAGS | ECF_LEAF, NULL) | |
130 | #endif | |
131 | ||
686ee971 RS |
132 | #ifndef DEF_INTERNAL_FLT_FN |
133 | #define DEF_INTERNAL_FLT_FN(NAME, FLAGS, OPTAB, TYPE) \ | |
134 | DEF_INTERNAL_OPTAB_FN (NAME, FLAGS, OPTAB, TYPE) | |
135 | #endif | |
136 | ||
ee5fd23a MM |
137 | #ifndef DEF_INTERNAL_FLT_FLOATN_FN |
138 | #define DEF_INTERNAL_FLT_FLOATN_FN(NAME, FLAGS, OPTAB, TYPE) \ | |
139 | DEF_INTERNAL_FLT_FN (NAME, FLAGS, OPTAB, TYPE) | |
140 | #endif | |
141 | ||
4959a752 RS |
142 | #ifndef DEF_INTERNAL_INT_FN |
143 | #define DEF_INTERNAL_INT_FN(NAME, FLAGS, OPTAB, TYPE) \ | |
144 | DEF_INTERNAL_OPTAB_FN (NAME, FLAGS, OPTAB, TYPE) | |
145 | #endif | |
146 | ||
2f482a07 AV |
147 | #ifndef DEF_INTERNAL_WIDENING_OPTAB_FN |
148 | #define DEF_INTERNAL_WIDENING_OPTAB_FN(NAME, FLAGS, SELECTOR, SOPTAB, UOPTAB, TYPE) \ | |
149 | DEF_INTERNAL_SIGNED_OPTAB_FN (NAME, FLAGS, SELECTOR, SOPTAB, UOPTAB, TYPE) \ | |
150 | DEF_INTERNAL_SIGNED_OPTAB_FN (NAME ## _LO, FLAGS, SELECTOR, SOPTAB##_lo, UOPTAB##_lo, TYPE) \ | |
151 | DEF_INTERNAL_SIGNED_OPTAB_FN (NAME ## _HI, FLAGS, SELECTOR, SOPTAB##_hi, UOPTAB##_hi, TYPE) \ | |
152 | DEF_INTERNAL_SIGNED_OPTAB_FN (NAME ## _EVEN, FLAGS, SELECTOR, SOPTAB##_even, UOPTAB##_even, TYPE) \ | |
153 | DEF_INTERNAL_SIGNED_OPTAB_FN (NAME ## _ODD, FLAGS, SELECTOR, SOPTAB##_odd, UOPTAB##_odd, TYPE) | |
154 | #endif | |
155 | ||
ab23f5d9 RS |
156 | DEF_INTERNAL_OPTAB_FN (MASK_LOAD, ECF_PURE, maskload, mask_load) |
157 | DEF_INTERNAL_OPTAB_FN (LOAD_LANES, ECF_CONST, vec_load_lanes, load_lanes) | |
7e11fc7f RS |
158 | DEF_INTERNAL_OPTAB_FN (MASK_LOAD_LANES, ECF_PURE, |
159 | vec_mask_load_lanes, mask_load_lanes) | |
ab23f5d9 | 160 | |
bfaa08b7 RS |
161 | DEF_INTERNAL_OPTAB_FN (GATHER_LOAD, ECF_PURE, gather_load, gather_load) |
162 | DEF_INTERNAL_OPTAB_FN (MASK_GATHER_LOAD, ECF_PURE, | |
163 | mask_gather_load, gather_load) | |
db3efdaf JZZ |
164 | DEF_INTERNAL_OPTAB_FN (LEN_MASK_GATHER_LOAD, ECF_PURE, |
165 | len_mask_gather_load, gather_load) | |
bfaa08b7 | 166 | |
d496134a | 167 | DEF_INTERNAL_OPTAB_FN (LEN_LOAD, ECF_PURE, len_load, len_load) |
ccfdda34 | 168 | DEF_INTERNAL_OPTAB_FN (LEN_MASK_LOAD, ECF_PURE, len_maskload, len_maskload) |
d496134a | 169 | |
f307441a RS |
170 | DEF_INTERNAL_OPTAB_FN (SCATTER_STORE, 0, scatter_store, scatter_store) |
171 | DEF_INTERNAL_OPTAB_FN (MASK_SCATTER_STORE, 0, | |
172 | mask_scatter_store, scatter_store) | |
db3efdaf JZZ |
173 | DEF_INTERNAL_OPTAB_FN (LEN_MASK_SCATTER_STORE, 0, |
174 | len_mask_scatter_store, scatter_store) | |
f307441a | 175 | |
ab23f5d9 RS |
176 | DEF_INTERNAL_OPTAB_FN (MASK_STORE, 0, maskstore, mask_store) |
177 | DEF_INTERNAL_OPTAB_FN (STORE_LANES, ECF_CONST, vec_store_lanes, store_lanes) | |
7e11fc7f RS |
178 | DEF_INTERNAL_OPTAB_FN (MASK_STORE_LANES, 0, |
179 | vec_mask_store_lanes, mask_store_lanes) | |
272c6793 | 180 | |
502d63b6 | 181 | DEF_INTERNAL_OPTAB_FN (VCOND, 0, vcond, vec_cond) |
298e76e6 RS |
182 | DEF_INTERNAL_OPTAB_FN (VCONDU, 0, vcondu, vec_cond) |
183 | DEF_INTERNAL_OPTAB_FN (VCONDEQ, 0, vcondeq, vec_cond) | |
502d63b6 ML |
184 | DEF_INTERNAL_OPTAB_FN (VCOND_MASK, 0, vcond_mask, vec_cond_mask) |
185 | ||
683e55fa | 186 | DEF_INTERNAL_OPTAB_FN (VEC_SET, 0, vec_set, vec_set) |
c30efd8c | 187 | DEF_INTERNAL_OPTAB_FN (VEC_EXTRACT, 0, vec_extract, vec_extract) |
683e55fa | 188 | |
d496134a | 189 | DEF_INTERNAL_OPTAB_FN (LEN_STORE, 0, len_store, len_store) |
ccfdda34 | 190 | DEF_INTERNAL_OPTAB_FN (LEN_MASK_STORE, 0, len_maskstore, len_maskstore) |
d496134a | 191 | |
7cfb4d93 | 192 | DEF_INTERNAL_OPTAB_FN (WHILE_ULT, ECF_CONST | ECF_NOTHROW, while_ult, while) |
47203d89 | 193 | DEF_INTERNAL_OPTAB_FN (SELECT_VL, ECF_CONST | ECF_NOTHROW, select_vl, binary) |
58c036c8 RS |
194 | DEF_INTERNAL_OPTAB_FN (CHECK_RAW_PTRS, ECF_CONST | ECF_NOTHROW, |
195 | check_raw_ptrs, check_ptrs) | |
196 | DEF_INTERNAL_OPTAB_FN (CHECK_WAR_PTRS, ECF_CONST | ECF_NOTHROW, | |
197 | check_war_ptrs, check_ptrs) | |
7cfb4d93 | 198 | |
f1739b48 RS |
199 | DEF_INTERNAL_OPTAB_FN (VEC_SHL_INSERT, ECF_CONST | ECF_NOTHROW, |
200 | vec_shl_insert, binary) | |
201 | ||
c0c2f013 YW |
202 | DEF_INTERNAL_OPTAB_FN (DIV_POW2, ECF_CONST | ECF_NOTHROW, sdiv_pow2, binary) |
203 | ||
c566cc9f RS |
204 | DEF_INTERNAL_OPTAB_FN (FMS, ECF_CONST, fms, ternary) |
205 | DEF_INTERNAL_OPTAB_FN (FNMA, ECF_CONST, fnma, ternary) | |
206 | DEF_INTERNAL_OPTAB_FN (FNMS, ECF_CONST, fnms, ternary) | |
207 | ||
710b8dec OA |
208 | DEF_INTERNAL_SIGNED_OPTAB_FN (ABD, ECF_CONST | ECF_NOTHROW, first, |
209 | sabd, uabd, binary) | |
210 | ||
0267732b RS |
211 | DEF_INTERNAL_SIGNED_OPTAB_FN (AVG_FLOOR, ECF_CONST | ECF_NOTHROW, first, |
212 | savg_floor, uavg_floor, binary) | |
213 | DEF_INTERNAL_SIGNED_OPTAB_FN (AVG_CEIL, ECF_CONST | ECF_NOTHROW, first, | |
214 | savg_ceil, uavg_ceil, binary) | |
215 | ||
a1d27560 KL |
216 | DEF_INTERNAL_SIGNED_OPTAB_FN (MULH, ECF_CONST | ECF_NOTHROW, first, |
217 | smul_highpart, umul_highpart, binary) | |
58cc9876 YW |
218 | DEF_INTERNAL_SIGNED_OPTAB_FN (MULHS, ECF_CONST | ECF_NOTHROW, first, |
219 | smulhs, umulhs, binary) | |
220 | DEF_INTERNAL_SIGNED_OPTAB_FN (MULHRS, ECF_CONST | ECF_NOTHROW, first, | |
221 | smulhrs, umulhrs, binary) | |
222 | ||
0972596e RS |
223 | DEF_INTERNAL_OPTAB_FN (COND_ADD, ECF_CONST, cond_add, cond_binary) |
224 | DEF_INTERNAL_OPTAB_FN (COND_SUB, ECF_CONST, cond_sub, cond_binary) | |
6c4fd4a9 RS |
225 | DEF_INTERNAL_OPTAB_FN (COND_MUL, ECF_CONST, cond_smul, cond_binary) |
226 | DEF_INTERNAL_SIGNED_OPTAB_FN (COND_DIV, ECF_CONST, first, | |
227 | cond_sdiv, cond_udiv, cond_binary) | |
228 | DEF_INTERNAL_SIGNED_OPTAB_FN (COND_MOD, ECF_CONST, first, | |
229 | cond_smod, cond_umod, cond_binary) | |
230 | DEF_INTERNAL_OPTAB_FN (COND_RDIV, ECF_CONST, cond_sdiv, cond_binary) | |
0972596e RS |
231 | DEF_INTERNAL_SIGNED_OPTAB_FN (COND_MIN, ECF_CONST, first, |
232 | cond_smin, cond_umin, cond_binary) | |
233 | DEF_INTERNAL_SIGNED_OPTAB_FN (COND_MAX, ECF_CONST, first, | |
234 | cond_smax, cond_umax, cond_binary) | |
70613000 RS |
235 | DEF_INTERNAL_OPTAB_FN (COND_FMIN, ECF_CONST, cond_fmin, cond_binary) |
236 | DEF_INTERNAL_OPTAB_FN (COND_FMAX, ECF_CONST, cond_fmax, cond_binary) | |
0972596e RS |
237 | DEF_INTERNAL_OPTAB_FN (COND_AND, ECF_CONST | ECF_NOTHROW, |
238 | cond_and, cond_binary) | |
239 | DEF_INTERNAL_OPTAB_FN (COND_IOR, ECF_CONST | ECF_NOTHROW, | |
240 | cond_ior, cond_binary) | |
241 | DEF_INTERNAL_OPTAB_FN (COND_XOR, ECF_CONST | ECF_NOTHROW, | |
242 | cond_xor, cond_binary) | |
20103c0e RS |
243 | DEF_INTERNAL_OPTAB_FN (COND_SHL, ECF_CONST | ECF_NOTHROW, |
244 | cond_ashl, cond_binary) | |
245 | DEF_INTERNAL_SIGNED_OPTAB_FN (COND_SHR, ECF_CONST | ECF_NOTHROW, first, | |
246 | cond_ashr, cond_lshr, cond_binary) | |
0972596e | 247 | |
b41d1f6e RS |
248 | DEF_INTERNAL_OPTAB_FN (COND_FMA, ECF_CONST, cond_fma, cond_ternary) |
249 | DEF_INTERNAL_OPTAB_FN (COND_FMS, ECF_CONST, cond_fms, cond_ternary) | |
250 | DEF_INTERNAL_OPTAB_FN (COND_FNMA, ECF_CONST, cond_fnma, cond_ternary) | |
251 | DEF_INTERNAL_OPTAB_FN (COND_FNMS, ECF_CONST, cond_fnms, cond_ternary) | |
252 | ||
20dcda98 | 253 | DEF_INTERNAL_OPTAB_FN (COND_NEG, ECF_CONST, cond_neg, cond_unary) |
254 | ||
6c96d1e4 JZZ |
255 | DEF_INTERNAL_OPTAB_FN (COND_LEN_ADD, ECF_CONST, cond_len_add, cond_len_binary) |
256 | DEF_INTERNAL_OPTAB_FN (COND_LEN_SUB, ECF_CONST, cond_len_sub, cond_len_binary) | |
257 | DEF_INTERNAL_OPTAB_FN (COND_LEN_MUL, ECF_CONST, cond_len_smul, cond_len_binary) | |
258 | DEF_INTERNAL_SIGNED_OPTAB_FN (COND_LEN_DIV, ECF_CONST, first, cond_len_sdiv, | |
259 | cond_len_udiv, cond_len_binary) | |
260 | DEF_INTERNAL_SIGNED_OPTAB_FN (COND_LEN_MOD, ECF_CONST, first, cond_len_smod, | |
261 | cond_len_umod, cond_len_binary) | |
262 | DEF_INTERNAL_OPTAB_FN (COND_LEN_RDIV, ECF_CONST, cond_len_sdiv, cond_len_binary) | |
263 | DEF_INTERNAL_SIGNED_OPTAB_FN (COND_LEN_MIN, ECF_CONST, first, cond_len_smin, | |
264 | cond_len_umin, cond_len_binary) | |
265 | DEF_INTERNAL_SIGNED_OPTAB_FN (COND_LEN_MAX, ECF_CONST, first, cond_len_smax, | |
266 | cond_len_umax, cond_len_binary) | |
267 | DEF_INTERNAL_OPTAB_FN (COND_LEN_FMIN, ECF_CONST, cond_len_fmin, cond_len_binary) | |
268 | DEF_INTERNAL_OPTAB_FN (COND_LEN_FMAX, ECF_CONST, cond_len_fmax, cond_len_binary) | |
269 | DEF_INTERNAL_OPTAB_FN (COND_LEN_AND, ECF_CONST | ECF_NOTHROW, cond_len_and, | |
270 | cond_len_binary) | |
271 | DEF_INTERNAL_OPTAB_FN (COND_LEN_IOR, ECF_CONST | ECF_NOTHROW, cond_len_ior, | |
272 | cond_len_binary) | |
273 | DEF_INTERNAL_OPTAB_FN (COND_LEN_XOR, ECF_CONST | ECF_NOTHROW, cond_len_xor, | |
274 | cond_len_binary) | |
275 | DEF_INTERNAL_OPTAB_FN (COND_LEN_SHL, ECF_CONST | ECF_NOTHROW, cond_len_ashl, | |
276 | cond_len_binary) | |
277 | DEF_INTERNAL_SIGNED_OPTAB_FN (COND_LEN_SHR, ECF_CONST | ECF_NOTHROW, first, | |
278 | cond_len_ashr, cond_len_lshr, cond_len_binary) | |
279 | ||
280 | DEF_INTERNAL_OPTAB_FN (COND_LEN_FMA, ECF_CONST, cond_len_fma, cond_len_ternary) | |
281 | DEF_INTERNAL_OPTAB_FN (COND_LEN_FMS, ECF_CONST, cond_len_fms, cond_len_ternary) | |
282 | DEF_INTERNAL_OPTAB_FN (COND_LEN_FNMA, ECF_CONST, cond_len_fnma, | |
283 | cond_len_ternary) | |
284 | DEF_INTERNAL_OPTAB_FN (COND_LEN_FNMS, ECF_CONST, cond_len_fnms, | |
285 | cond_len_ternary) | |
286 | ||
287 | DEF_INTERNAL_OPTAB_FN (COND_LEN_NEG, ECF_CONST, cond_len_neg, cond_len_unary) | |
288 | ||
ee62a5a6 RS |
289 | DEF_INTERNAL_OPTAB_FN (RSQRT, ECF_CONST, rsqrt, unary) |
290 | ||
16d24520 RS |
291 | DEF_INTERNAL_OPTAB_FN (REDUC_PLUS, ECF_CONST | ECF_NOTHROW, |
292 | reduc_plus_scal, unary) | |
293 | DEF_INTERNAL_SIGNED_OPTAB_FN (REDUC_MAX, ECF_CONST | ECF_NOTHROW, first, | |
294 | reduc_smax_scal, reduc_umax_scal, unary) | |
295 | DEF_INTERNAL_SIGNED_OPTAB_FN (REDUC_MIN, ECF_CONST | ECF_NOTHROW, first, | |
296 | reduc_smin_scal, reduc_umin_scal, unary) | |
e32b9eb3 RS |
297 | DEF_INTERNAL_OPTAB_FN (REDUC_FMAX, ECF_CONST | ECF_NOTHROW, |
298 | reduc_fmax_scal, unary) | |
299 | DEF_INTERNAL_OPTAB_FN (REDUC_FMIN, ECF_CONST | ECF_NOTHROW, | |
300 | reduc_fmin_scal, unary) | |
898f07b0 RS |
301 | DEF_INTERNAL_OPTAB_FN (REDUC_AND, ECF_CONST | ECF_NOTHROW, |
302 | reduc_and_scal, unary) | |
303 | DEF_INTERNAL_OPTAB_FN (REDUC_IOR, ECF_CONST | ECF_NOTHROW, | |
304 | reduc_ior_scal, unary) | |
305 | DEF_INTERNAL_OPTAB_FN (REDUC_XOR, ECF_CONST | ECF_NOTHROW, | |
306 | reduc_xor_scal, unary) | |
16d24520 | 307 | |
bfe1bb57 RS |
308 | /* Extract the last active element from a vector. */ |
309 | DEF_INTERNAL_OPTAB_FN (EXTRACT_LAST, ECF_CONST | ECF_NOTHROW, | |
9d4ac06e | 310 | extract_last, fold_left) |
bfe1bb57 | 311 | |
bb6c2b68 RS |
312 | /* Same, but return the first argument if no elements are active. */ |
313 | DEF_INTERNAL_OPTAB_FN (FOLD_EXTRACT_LAST, ECF_CONST | ECF_NOTHROW, | |
314 | fold_extract_last, fold_extract) | |
315 | ||
b781a135 RS |
316 | DEF_INTERNAL_OPTAB_FN (FOLD_LEFT_PLUS, ECF_CONST | ECF_NOTHROW, |
317 | fold_left_plus, fold_left) | |
bb6c2b68 | 318 | |
bce29d65 AM |
319 | DEF_INTERNAL_OPTAB_FN (MASK_FOLD_LEFT_PLUS, ECF_CONST | ECF_NOTHROW, |
320 | mask_fold_left_plus, mask_fold_left) | |
321 | ||
686ee971 RS |
322 | /* Unary math functions. */ |
323 | DEF_INTERNAL_FLT_FN (ACOS, ECF_CONST, acos, unary) | |
a81037ce | 324 | DEF_INTERNAL_FLT_FN (ACOSH, ECF_CONST, acosh, unary) |
686ee971 | 325 | DEF_INTERNAL_FLT_FN (ASIN, ECF_CONST, asin, unary) |
a81037ce | 326 | DEF_INTERNAL_FLT_FN (ASINH, ECF_CONST, asinh, unary) |
686ee971 | 327 | DEF_INTERNAL_FLT_FN (ATAN, ECF_CONST, atan, unary) |
a81037ce | 328 | DEF_INTERNAL_FLT_FN (ATANH, ECF_CONST, atanh, unary) |
686ee971 | 329 | DEF_INTERNAL_FLT_FN (COS, ECF_CONST, cos, unary) |
247c45b2 | 330 | DEF_INTERNAL_FLT_FN (COSH, ECF_CONST, cosh, unary) |
686ee971 RS |
331 | DEF_INTERNAL_FLT_FN (EXP, ECF_CONST, exp, unary) |
332 | DEF_INTERNAL_FLT_FN (EXP10, ECF_CONST, exp10, unary) | |
333 | DEF_INTERNAL_FLT_FN (EXP2, ECF_CONST, exp2, unary) | |
334 | DEF_INTERNAL_FLT_FN (EXPM1, ECF_CONST, expm1, unary) | |
335 | DEF_INTERNAL_FLT_FN (LOG, ECF_CONST, log, unary) | |
336 | DEF_INTERNAL_FLT_FN (LOG10, ECF_CONST, log10, unary) | |
337 | DEF_INTERNAL_FLT_FN (LOG1P, ECF_CONST, log1p, unary) | |
338 | DEF_INTERNAL_FLT_FN (LOG2, ECF_CONST, log2, unary) | |
339 | DEF_INTERNAL_FLT_FN (LOGB, ECF_CONST, logb, unary) | |
a52cf5cf | 340 | DEF_INTERNAL_FLT_FN (SIGNBIT, ECF_CONST, signbit, unary) |
686ee971 RS |
341 | DEF_INTERNAL_FLT_FN (SIGNIFICAND, ECF_CONST, significand, unary) |
342 | DEF_INTERNAL_FLT_FN (SIN, ECF_CONST, sin, unary) | |
247c45b2 | 343 | DEF_INTERNAL_FLT_FN (SINH, ECF_CONST, sinh, unary) |
ee5fd23a | 344 | DEF_INTERNAL_FLT_FLOATN_FN (SQRT, ECF_CONST, sqrt, unary) |
686ee971 | 345 | DEF_INTERNAL_FLT_FN (TAN, ECF_CONST, tan, unary) |
247c45b2 | 346 | DEF_INTERNAL_FLT_FN (TANH, ECF_CONST, tanh, unary) |
686ee971 | 347 | |
00eab0c6 RS |
348 | /* Floating-point to integer conversions. |
349 | ||
350 | ??? Here we preserve the I/L/LL prefix convention from the | |
351 | corresponding built-in functions, rather than make the internal | |
352 | functions polymorphic in both the argument and the return types. | |
353 | Perhaps an alternative would be to pass a zero of the required | |
354 | return type as a second parameter. */ | |
355 | DEF_INTERNAL_FLT_FN (ICEIL, ECF_CONST, lceil, unary_convert) | |
356 | DEF_INTERNAL_FLT_FN (IFLOOR, ECF_CONST, lfloor, unary_convert) | |
357 | DEF_INTERNAL_FLT_FN (IRINT, ECF_CONST, lrint, unary_convert) | |
358 | DEF_INTERNAL_FLT_FN (IROUND, ECF_CONST, lround, unary_convert) | |
359 | DEF_INTERNAL_FLT_FN (LCEIL, ECF_CONST, lceil, unary_convert) | |
360 | DEF_INTERNAL_FLT_FN (LFLOOR, ECF_CONST, lfloor, unary_convert) | |
361 | DEF_INTERNAL_FLT_FN (LRINT, ECF_CONST, lrint, unary_convert) | |
362 | DEF_INTERNAL_FLT_FN (LROUND, ECF_CONST, lround, unary_convert) | |
363 | DEF_INTERNAL_FLT_FN (LLCEIL, ECF_CONST, lceil, unary_convert) | |
364 | DEF_INTERNAL_FLT_FN (LLFLOOR, ECF_CONST, lfloor, unary_convert) | |
365 | DEF_INTERNAL_FLT_FN (LLRINT, ECF_CONST, lrint, unary_convert) | |
366 | DEF_INTERNAL_FLT_FN (LLROUND, ECF_CONST, lround, unary_convert) | |
367 | ||
686ee971 | 368 | /* FP rounding. */ |
c6cfa2bf MM |
369 | DEF_INTERNAL_FLT_FLOATN_FN (CEIL, ECF_CONST, ceil, unary) |
370 | DEF_INTERNAL_FLT_FLOATN_FN (FLOOR, ECF_CONST, floor, unary) | |
371 | DEF_INTERNAL_FLT_FLOATN_FN (NEARBYINT, ECF_CONST, nearbyint, unary) | |
372 | DEF_INTERNAL_FLT_FLOATN_FN (RINT, ECF_CONST, rint, unary) | |
373 | DEF_INTERNAL_FLT_FLOATN_FN (ROUND, ECF_CONST, round, unary) | |
d3b92f35 | 374 | DEF_INTERNAL_FLT_FLOATN_FN (ROUNDEVEN, ECF_CONST, roundeven, unary) |
c6cfa2bf | 375 | DEF_INTERNAL_FLT_FLOATN_FN (TRUNC, ECF_CONST, btrunc, unary) |
686ee971 RS |
376 | |
377 | /* Binary math functions. */ | |
378 | DEF_INTERNAL_FLT_FN (ATAN2, ECF_CONST, atan2, binary) | |
ee5fd23a | 379 | DEF_INTERNAL_FLT_FLOATN_FN (COPYSIGN, ECF_CONST, copysign, binary) |
686ee971 | 380 | DEF_INTERNAL_FLT_FN (FMOD, ECF_CONST, fmod, binary) |
4dd9b6c6 | 381 | DEF_INTERNAL_FLT_FN (HYPOT, ECF_CONST, hypot, binary) |
686ee971 RS |
382 | DEF_INTERNAL_FLT_FN (POW, ECF_CONST, pow, binary) |
383 | DEF_INTERNAL_FLT_FN (REMAINDER, ECF_CONST, remainder, binary) | |
384 | DEF_INTERNAL_FLT_FN (SCALB, ECF_CONST, scalb, binary) | |
ee5fd23a MM |
385 | DEF_INTERNAL_FLT_FLOATN_FN (FMIN, ECF_CONST, fmin, binary) |
386 | DEF_INTERNAL_FLT_FLOATN_FN (FMAX, ECF_CONST, fmax, binary) | |
336a06a1 | 387 | DEF_INTERNAL_OPTAB_FN (XORSIGN, ECF_CONST, xorsign, binary) |
3ed472af TC |
388 | DEF_INTERNAL_OPTAB_FN (COMPLEX_ADD_ROT90, ECF_CONST, cadd90, binary) |
389 | DEF_INTERNAL_OPTAB_FN (COMPLEX_ADD_ROT270, ECF_CONST, cadd270, binary) | |
e09173d8 TC |
390 | DEF_INTERNAL_OPTAB_FN (COMPLEX_MUL, ECF_CONST, cmul, binary) |
391 | DEF_INTERNAL_OPTAB_FN (COMPLEX_MUL_CONJ, ECF_CONST, cmul_conj, binary) | |
7a6c31f0 | 392 | DEF_INTERNAL_OPTAB_FN (VEC_ADDSUB, ECF_CONST, vec_addsub, binary) |
2f482a07 AV |
393 | DEF_INTERNAL_WIDENING_OPTAB_FN (VEC_WIDEN_PLUS, |
394 | ECF_CONST | ECF_NOTHROW, | |
395 | first, | |
396 | vec_widen_sadd, vec_widen_uadd, | |
397 | binary) | |
398 | DEF_INTERNAL_WIDENING_OPTAB_FN (VEC_WIDEN_MINUS, | |
399 | ECF_CONST | ECF_NOTHROW, | |
400 | first, | |
401 | vec_widen_ssub, vec_widen_usub, | |
402 | binary) | |
aec90c8b OA |
403 | DEF_INTERNAL_WIDENING_OPTAB_FN (VEC_WIDEN_ABD, |
404 | ECF_CONST | ECF_NOTHROW, | |
405 | first, | |
406 | vec_widen_sabd, vec_widen_uabd, | |
407 | binary) | |
7d810646 RB |
408 | DEF_INTERNAL_OPTAB_FN (VEC_FMADDSUB, ECF_CONST, vec_fmaddsub, ternary) |
409 | DEF_INTERNAL_OPTAB_FN (VEC_FMSUBADD, ECF_CONST, vec_fmsubadd, ternary) | |
686ee971 RS |
410 | |
411 | /* FP scales. */ | |
412 | DEF_INTERNAL_FLT_FN (LDEXP, ECF_CONST, ldexp, binary) | |
413 | ||
c566cc9f | 414 | /* Ternary math functions. */ |
b41d1f6e | 415 | DEF_INTERNAL_FLT_FLOATN_FN (FMA, ECF_CONST, fma, ternary) |
31fac318 TC |
416 | DEF_INTERNAL_OPTAB_FN (COMPLEX_FMA, ECF_CONST, cmla, ternary) |
417 | DEF_INTERNAL_OPTAB_FN (COMPLEX_FMA_CONJ, ECF_CONST, cmla_conj, ternary) | |
478e571a TC |
418 | DEF_INTERNAL_OPTAB_FN (COMPLEX_FMS, ECF_CONST, cmls, ternary) |
419 | DEF_INTERNAL_OPTAB_FN (COMPLEX_FMS_CONJ, ECF_CONST, cmls_conj, ternary) | |
c566cc9f | 420 | |
4959a752 | 421 | /* Unary integer ops. */ |
f8c770dd RS |
422 | DEF_INTERNAL_INT_FN (CLRSB, ECF_CONST | ECF_NOTHROW, clrsb, unary) |
423 | DEF_INTERNAL_INT_FN (CLZ, ECF_CONST | ECF_NOTHROW, clz, unary) | |
424 | DEF_INTERNAL_INT_FN (CTZ, ECF_CONST | ECF_NOTHROW, ctz, unary) | |
425 | DEF_INTERNAL_INT_FN (FFS, ECF_CONST | ECF_NOTHROW, ffs, unary) | |
426 | DEF_INTERNAL_INT_FN (PARITY, ECF_CONST | ECF_NOTHROW, parity, unary) | |
427 | DEF_INTERNAL_INT_FN (POPCOUNT, ECF_CONST | ECF_NOTHROW, popcount, unary) | |
4959a752 | 428 | |
d6621a2f | 429 | DEF_INTERNAL_FN (GOMP_TARGET_REV, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL) |
6c7509bc | 430 | DEF_INTERNAL_FN (GOMP_USE_SIMT, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL) |
0c6b03b5 | 431 | DEF_INTERNAL_FN (GOMP_SIMT_ENTER, ECF_LEAF | ECF_NOTHROW, NULL) |
9d2fe6d4 RS |
432 | DEF_INTERNAL_FN (GOMP_SIMT_ENTER_ALLOC, ECF_LEAF | ECF_NOTHROW, NULL) |
433 | DEF_INTERNAL_FN (GOMP_SIMT_EXIT, ECF_LEAF | ECF_NOTHROW, NULL) | |
434 | DEF_INTERNAL_FN (GOMP_SIMT_LANE, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL) | |
9669b00b | 435 | DEF_INTERNAL_FN (GOMP_SIMT_VF, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL) |
9d2fe6d4 RS |
436 | DEF_INTERNAL_FN (GOMP_SIMT_LAST_LANE, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL) |
437 | DEF_INTERNAL_FN (GOMP_SIMT_ORDERED_PRED, ECF_LEAF | ECF_NOTHROW, NULL) | |
438 | DEF_INTERNAL_FN (GOMP_SIMT_VOTE_ANY, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL) | |
439 | DEF_INTERNAL_FN (GOMP_SIMT_XCHG_BFLY, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL) | |
440 | DEF_INTERNAL_FN (GOMP_SIMT_XCHG_IDX, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL) | |
b78475cf YG |
441 | DEF_INTERNAL_FN (GOMP_SIMD_LANE, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL) |
442 | DEF_INTERNAL_FN (GOMP_SIMD_VF, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL) | |
443 | DEF_INTERNAL_FN (GOMP_SIMD_LAST_LANE, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL) | |
d9a6bd32 JJ |
444 | DEF_INTERNAL_FN (GOMP_SIMD_ORDERED_START, ECF_LEAF | ECF_NOTHROW, NULL) |
445 | DEF_INTERNAL_FN (GOMP_SIMD_ORDERED_END, ECF_LEAF | ECF_NOTHROW, NULL) | |
b78475cf | 446 | DEF_INTERNAL_FN (LOOP_VECTORIZED, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL) |
542e7230 | 447 | DEF_INTERNAL_FN (LOOP_DIST_ALIAS, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL) |
b78475cf | 448 | DEF_INTERNAL_FN (ANNOTATE, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL) |
762cca00 | 449 | DEF_INTERNAL_FN (UBSAN_NULL, ECF_LEAF | ECF_NOTHROW, ". R . ") |
b78475cf | 450 | DEF_INTERNAL_FN (UBSAN_BOUNDS, ECF_LEAF | ECF_NOTHROW, NULL) |
762cca00 | 451 | DEF_INTERNAL_FN (UBSAN_VPTR, ECF_LEAF | ECF_NOTHROW, ". R R . . ") |
b78475cf YG |
452 | DEF_INTERNAL_FN (UBSAN_CHECK_ADD, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL) |
453 | DEF_INTERNAL_FN (UBSAN_CHECK_SUB, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL) | |
454 | DEF_INTERNAL_FN (UBSAN_CHECK_MUL, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL) | |
762cca00 | 455 | DEF_INTERNAL_FN (UBSAN_PTR, ECF_LEAF | ECF_NOTHROW, ". R . ") |
0e82f089 | 456 | DEF_INTERNAL_FN (UBSAN_OBJECT_SIZE, ECF_LEAF | ECF_NOTHROW, NULL) |
b78475cf YG |
457 | DEF_INTERNAL_FN (ABNORMAL_DISPATCHER, ECF_NORETURN, NULL) |
458 | DEF_INTERNAL_FN (BUILTIN_EXPECT, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL) | |
93a73251 MM |
459 | DEF_INTERNAL_FN (HWASAN_ALLOCA_UNPOISON, ECF_LEAF | ECF_NOTHROW, ". R ") |
460 | DEF_INTERNAL_FN (HWASAN_CHOOSE_TAG, ECF_LEAF | ECF_NOTHROW, ". ") | |
461 | DEF_INTERNAL_FN (HWASAN_CHECK, ECF_TM_PURE | ECF_LEAF | ECF_NOTHROW, | |
462 | ". . R . . ") | |
463 | DEF_INTERNAL_FN (HWASAN_MARK, ECF_LEAF | ECF_NOTHROW, NULL) | |
464 | DEF_INTERNAL_FN (HWASAN_SET_TAG, | |
465 | ECF_TM_PURE | ECF_PURE | ECF_LEAF | ECF_NOTHROW, ". R R ") | |
762cca00 JH |
466 | DEF_INTERNAL_FN (ASAN_CHECK, ECF_TM_PURE | ECF_LEAF | ECF_NOTHROW, |
467 | ". . R . . ") | |
d80956bb | 468 | DEF_INTERNAL_FN (ASAN_MARK, ECF_LEAF | ECF_NOTHROW, NULL) |
c7775327 | 469 | DEF_INTERNAL_FN (ASAN_POISON, ECF_LEAF | ECF_NOTHROW | ECF_NOVOPS, NULL) |
f6b9f2ff | 470 | DEF_INTERNAL_FN (ASAN_POISON_USE, ECF_LEAF | ECF_NOTHROW | ECF_NOVOPS, NULL) |
1304953e JJ |
471 | DEF_INTERNAL_FN (ADD_OVERFLOW, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL) |
472 | DEF_INTERNAL_FN (SUB_OVERFLOW, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL) | |
473 | DEF_INTERNAL_FN (MUL_OVERFLOW, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL) | |
43a3252c JJ |
474 | DEF_INTERNAL_FN (UADDC, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL) |
475 | DEF_INTERNAL_FN (USUBC, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL) | |
fca4adf2 | 476 | DEF_INTERNAL_FN (TSAN_FUNC_EXIT, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL) |
b8b2ab06 | 477 | DEF_INTERNAL_FN (VA_ARG, ECF_NOTHROW | ECF_LEAF, NULL) |
d8fcab68 | 478 | DEF_INTERNAL_FN (VEC_CONVERT, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL) |
6f966f06 | 479 | DEF_INTERNAL_FN (RAWMEMCHR, ECF_PURE | ECF_LEAF | ECF_NOTHROW, NULL) |
8ab78162 NS |
480 | |
481 | /* An unduplicable, uncombinable function. Generally used to preserve | |
482 | a CFG property in the face of jump threading, tail merging or | |
483 | other such optimizations. The first argument distinguishes | |
484 | between uses. See internal-fn.h for usage. */ | |
485 | DEF_INTERNAL_FN (UNIQUE, ECF_NOTHROW, NULL) | |
1ee62b92 | 486 | DEF_INTERNAL_FN (PHI, 0, NULL) |
8ab78162 | 487 | |
a25e0b5e | 488 | /* A function to represent an artifical initialization to an uninitialized |
489 | automatic variable. */ | |
490 | DEF_INTERNAL_FN (DEFERRED_INIT, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL) | |
491 | ||
9bd46bc9 NS |
492 | /* DIM_SIZE and DIM_POS return the size of a particular compute |
493 | dimension and the executing thread's position within that | |
494 | dimension. DIM_POS is pure (and not const) so that it isn't | |
495 | thought to clobber memory and can be gcse'd within a single | |
496 | parallel region, but not across FORK/JOIN boundaries. They take a | |
02889d23 | 497 | single INTEGER_CST argument. This might be overly conservative. */ |
762cca00 JH |
498 | DEF_INTERNAL_FN (GOACC_DIM_SIZE, ECF_CONST | ECF_NOTHROW | ECF_LEAF, NULL) |
499 | DEF_INTERNAL_FN (GOACC_DIM_POS, ECF_PURE | ECF_NOTHROW | ECF_LEAF, NULL) | |
9bd46bc9 NS |
500 | |
501 | /* OpenACC looping abstraction. See internal-fn.h for usage. */ | |
502 | DEF_INTERNAL_FN (GOACC_LOOP, ECF_PURE | ECF_NOTHROW, NULL) | |
e5014671 NS |
503 | |
504 | /* OpenACC reduction abstraction. See internal-fn.h for usage. */ | |
505 | DEF_INTERNAL_FN (GOACC_REDUCTION, ECF_NOTHROW | ECF_LEAF, NULL) | |
46e343b8 | 506 | |
02889d23 CLT |
507 | /* Openacc tile abstraction. Describes the spans of the element loop. |
508 | GOACC_TILE (num-loops, loop-no, tile-arg, tile-mask, element-mask). */ | |
509 | DEF_INTERNAL_FN (GOACC_TILE, ECF_NOTHROW | ECF_LEAF, NULL) | |
510 | ||
883cabde RS |
511 | /* Set errno to EDOM, if GCC knows how to do that directly for the |
512 | current target. */ | |
513 | DEF_INTERNAL_FN (SET_EDOM, ECF_LEAF | ECF_NOTHROW, NULL) | |
514 | ||
cc195d46 JJ |
515 | /* Atomic functions. These don't have ECF_NOTHROW because for |
516 | -fnon-call-exceptions they can throw, otherwise we set | |
517 | gimple_call_nothrow_p on it. */ | |
518 | DEF_INTERNAL_FN (ATOMIC_BIT_TEST_AND_SET, ECF_LEAF, NULL) | |
519 | DEF_INTERNAL_FN (ATOMIC_BIT_TEST_AND_COMPLEMENT, ECF_LEAF, NULL) | |
520 | DEF_INTERNAL_FN (ATOMIC_BIT_TEST_AND_RESET, ECF_LEAF, NULL) | |
521 | DEF_INTERNAL_FN (ATOMIC_COMPARE_EXCHANGE, ECF_LEAF, NULL) | |
6362627b JJ |
522 | DEF_INTERNAL_FN (ATOMIC_ADD_FETCH_CMP_0, ECF_LEAF, NULL) |
523 | DEF_INTERNAL_FN (ATOMIC_SUB_FETCH_CMP_0, ECF_LEAF, NULL) | |
524 | DEF_INTERNAL_FN (ATOMIC_AND_FETCH_CMP_0, ECF_LEAF, NULL) | |
525 | DEF_INTERNAL_FN (ATOMIC_OR_FETCH_CMP_0, ECF_LEAF, NULL) | |
526 | DEF_INTERNAL_FN (ATOMIC_XOR_FETCH_CMP_0, ECF_LEAF, NULL) | |
adedd5c1 | 527 | |
81fea426 MP |
528 | /* To implement [[fallthrough]]. */ |
529 | DEF_INTERNAL_FN (FALLTHROUGH, ECF_LEAF | ECF_NOTHROW, NULL) | |
530 | ||
e16f1cc7 JJ |
531 | /* To implement __builtin_launder. */ |
532 | DEF_INTERNAL_FN (LAUNDER, ECF_LEAF | ECF_NOTHROW | ECF_NOVOPS, NULL) | |
533 | ||
e72531b9 PK |
534 | /* Divmod function. */ |
535 | DEF_INTERNAL_FN (DIVMOD, ECF_CONST | ECF_LEAF, NULL) | |
536 | ||
49789fd0 IS |
537 | /* For coroutines. */ |
538 | DEF_INTERNAL_FN (CO_ACTOR, ECF_NOTHROW | ECF_LEAF, NULL) | |
539 | DEF_INTERNAL_FN (CO_YIELD, ECF_NOTHROW, NULL) | |
540 | DEF_INTERNAL_FN (CO_SUSPN, ECF_NOTHROW, NULL) | |
541 | DEF_INTERNAL_FN (CO_FRAME, ECF_PURE | ECF_NOTHROW | ECF_LEAF, NULL) | |
542 | ||
87a5e0e8 RB |
543 | /* A NOP function with arbitrary arguments and return value. */ |
544 | DEF_INTERNAL_FN (NOP, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL) | |
545 | ||
ef8176e0 RB |
546 | /* Temporary vehicle for __builtin_shufflevector. */ |
547 | DEF_INTERNAL_FN (SHUFFLEVECTOR, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL) | |
548 | ||
463d9108 JJ |
549 | /* <=> optimization. */ |
550 | DEF_INTERNAL_FN (SPACESHIP, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL) | |
551 | ||
08b51bad JJ |
552 | /* [[assume (cond)]]. */ |
553 | DEF_INTERNAL_FN (ASSUME, ECF_CONST | ECF_LEAF | ECF_NOTHROW | |
554 | | ECF_LOOPING_CONST_OR_PURE, NULL) | |
555 | ||
3da77f21 AS |
556 | /* For if-conversion of inbranch SIMD clones. */ |
557 | DEF_INTERNAL_FN (MASK_CALL, ECF_NOVOPS, NULL) | |
558 | ||
4959a752 | 559 | #undef DEF_INTERNAL_INT_FN |
686ee971 | 560 | #undef DEF_INTERNAL_FLT_FN |
ee5fd23a | 561 | #undef DEF_INTERNAL_FLT_FLOATN_FN |
16d24520 | 562 | #undef DEF_INTERNAL_SIGNED_OPTAB_FN |
ab23f5d9 | 563 | #undef DEF_INTERNAL_OPTAB_FN |
46e343b8 | 564 | #undef DEF_INTERNAL_FN |