comparison gcc/internal-fn.def @ 145:1830386684a0

gcc-9.2.0
author anatofuz
date Thu, 13 Feb 2020 11:34:05 +0900
parents 84e7813d76e9
children
comparison
equal deleted inserted replaced
131:84e7813d76e9 145:1830386684a0
1 /* Internal functions. 1 /* Internal functions.
2 Copyright (C) 2011-2018 Free Software Foundation, Inc. 2 Copyright (C) 2011-2020 Free Software Foundation, Inc.
3 3
4 This file is part of GCC. 4 This file is part of GCC.
5 5
6 GCC is free software; you can redistribute it and/or modify it under 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 7 the terms of the GNU General Public License as published by the Free
61 61
62 - cond_binary: a conditional binary optab, such as cond_add<mode> 62 - cond_binary: a conditional binary optab, such as cond_add<mode>
63 - cond_ternary: a conditional ternary optab, such as cond_fma_rev<mode> 63 - cond_ternary: a conditional ternary optab, such as cond_fma_rev<mode>
64 64
65 - fold_left: for scalar = FN (scalar, vector), keyed off the vector mode 65 - fold_left: for scalar = FN (scalar, vector), keyed off the vector mode
66 - check_ptrs: used for check_{raw,war}_ptrs
66 67
67 DEF_INTERNAL_SIGNED_OPTAB_FN defines an internal function that 68 DEF_INTERNAL_SIGNED_OPTAB_FN defines an internal function that
68 maps to one of two optabs, depending on the signedness of an input. 69 maps to one of two optabs, depending on the signedness of an input.
69 SIGNED_OPTAB and UNSIGNED_OPTAB are the optabs for signed and 70 SIGNED_OPTAB and UNSIGNED_OPTAB are the optabs for signed and
70 unsigned inputs respectively, both without the trailing "_optab". 71 unsigned inputs respectively, both without the trailing "_optab".
134 DEF_INTERNAL_OPTAB_FN (STORE_LANES, ECF_CONST, vec_store_lanes, store_lanes) 135 DEF_INTERNAL_OPTAB_FN (STORE_LANES, ECF_CONST, vec_store_lanes, store_lanes)
135 DEF_INTERNAL_OPTAB_FN (MASK_STORE_LANES, 0, 136 DEF_INTERNAL_OPTAB_FN (MASK_STORE_LANES, 0,
136 vec_mask_store_lanes, mask_store_lanes) 137 vec_mask_store_lanes, mask_store_lanes)
137 138
138 DEF_INTERNAL_OPTAB_FN (WHILE_ULT, ECF_CONST | ECF_NOTHROW, while_ult, while) 139 DEF_INTERNAL_OPTAB_FN (WHILE_ULT, ECF_CONST | ECF_NOTHROW, while_ult, while)
140 DEF_INTERNAL_OPTAB_FN (CHECK_RAW_PTRS, ECF_CONST | ECF_NOTHROW,
141 check_raw_ptrs, check_ptrs)
142 DEF_INTERNAL_OPTAB_FN (CHECK_WAR_PTRS, ECF_CONST | ECF_NOTHROW,
143 check_war_ptrs, check_ptrs)
139 144
140 DEF_INTERNAL_OPTAB_FN (VEC_SHL_INSERT, ECF_CONST | ECF_NOTHROW, 145 DEF_INTERNAL_OPTAB_FN (VEC_SHL_INSERT, ECF_CONST | ECF_NOTHROW,
141 vec_shl_insert, binary) 146 vec_shl_insert, binary)
147
148 DEF_INTERNAL_OPTAB_FN (DIV_POW2, ECF_CONST | ECF_NOTHROW, sdiv_pow2, binary)
142 149
143 DEF_INTERNAL_OPTAB_FN (FMS, ECF_CONST, fms, ternary) 150 DEF_INTERNAL_OPTAB_FN (FMS, ECF_CONST, fms, ternary)
144 DEF_INTERNAL_OPTAB_FN (FNMA, ECF_CONST, fnma, ternary) 151 DEF_INTERNAL_OPTAB_FN (FNMA, ECF_CONST, fnma, ternary)
145 DEF_INTERNAL_OPTAB_FN (FNMS, ECF_CONST, fnms, ternary) 152 DEF_INTERNAL_OPTAB_FN (FNMS, ECF_CONST, fnms, ternary)
146 153
147 DEF_INTERNAL_SIGNED_OPTAB_FN (AVG_FLOOR, ECF_CONST | ECF_NOTHROW, first, 154 DEF_INTERNAL_SIGNED_OPTAB_FN (AVG_FLOOR, ECF_CONST | ECF_NOTHROW, first,
148 savg_floor, uavg_floor, binary) 155 savg_floor, uavg_floor, binary)
149 DEF_INTERNAL_SIGNED_OPTAB_FN (AVG_CEIL, ECF_CONST | ECF_NOTHROW, first, 156 DEF_INTERNAL_SIGNED_OPTAB_FN (AVG_CEIL, ECF_CONST | ECF_NOTHROW, first,
150 savg_ceil, uavg_ceil, binary) 157 savg_ceil, uavg_ceil, binary)
158
159 DEF_INTERNAL_SIGNED_OPTAB_FN (MULHS, ECF_CONST | ECF_NOTHROW, first,
160 smulhs, umulhs, binary)
161 DEF_INTERNAL_SIGNED_OPTAB_FN (MULHRS, ECF_CONST | ECF_NOTHROW, first,
162 smulhrs, umulhrs, binary)
151 163
152 DEF_INTERNAL_OPTAB_FN (COND_ADD, ECF_CONST, cond_add, cond_binary) 164 DEF_INTERNAL_OPTAB_FN (COND_ADD, ECF_CONST, cond_add, cond_binary)
153 DEF_INTERNAL_OPTAB_FN (COND_SUB, ECF_CONST, cond_sub, cond_binary) 165 DEF_INTERNAL_OPTAB_FN (COND_SUB, ECF_CONST, cond_sub, cond_binary)
154 DEF_INTERNAL_OPTAB_FN (COND_MUL, ECF_CONST, cond_smul, cond_binary) 166 DEF_INTERNAL_OPTAB_FN (COND_MUL, ECF_CONST, cond_smul, cond_binary)
155 DEF_INTERNAL_SIGNED_OPTAB_FN (COND_DIV, ECF_CONST, first, 167 DEF_INTERNAL_SIGNED_OPTAB_FN (COND_DIV, ECF_CONST, first,
165 cond_and, cond_binary) 177 cond_and, cond_binary)
166 DEF_INTERNAL_OPTAB_FN (COND_IOR, ECF_CONST | ECF_NOTHROW, 178 DEF_INTERNAL_OPTAB_FN (COND_IOR, ECF_CONST | ECF_NOTHROW,
167 cond_ior, cond_binary) 179 cond_ior, cond_binary)
168 DEF_INTERNAL_OPTAB_FN (COND_XOR, ECF_CONST | ECF_NOTHROW, 180 DEF_INTERNAL_OPTAB_FN (COND_XOR, ECF_CONST | ECF_NOTHROW,
169 cond_xor, cond_binary) 181 cond_xor, cond_binary)
182 DEF_INTERNAL_OPTAB_FN (COND_SHL, ECF_CONST | ECF_NOTHROW,
183 cond_ashl, cond_binary)
184 DEF_INTERNAL_SIGNED_OPTAB_FN (COND_SHR, ECF_CONST | ECF_NOTHROW, first,
185 cond_ashr, cond_lshr, cond_binary)
170 186
171 DEF_INTERNAL_OPTAB_FN (COND_FMA, ECF_CONST, cond_fma, cond_ternary) 187 DEF_INTERNAL_OPTAB_FN (COND_FMA, ECF_CONST, cond_fma, cond_ternary)
172 DEF_INTERNAL_OPTAB_FN (COND_FMS, ECF_CONST, cond_fms, cond_ternary) 188 DEF_INTERNAL_OPTAB_FN (COND_FMS, ECF_CONST, cond_fms, cond_ternary)
173 DEF_INTERNAL_OPTAB_FN (COND_FNMA, ECF_CONST, cond_fnma, cond_ternary) 189 DEF_INTERNAL_OPTAB_FN (COND_FNMA, ECF_CONST, cond_fnma, cond_ternary)
174 DEF_INTERNAL_OPTAB_FN (COND_FNMS, ECF_CONST, cond_fnms, cond_ternary) 190 DEF_INTERNAL_OPTAB_FN (COND_FNMS, ECF_CONST, cond_fnms, cond_ternary)
197 fold_extract_last, fold_extract) 213 fold_extract_last, fold_extract)
198 214
199 DEF_INTERNAL_OPTAB_FN (FOLD_LEFT_PLUS, ECF_CONST | ECF_NOTHROW, 215 DEF_INTERNAL_OPTAB_FN (FOLD_LEFT_PLUS, ECF_CONST | ECF_NOTHROW,
200 fold_left_plus, fold_left) 216 fold_left_plus, fold_left)
201 217
218 DEF_INTERNAL_OPTAB_FN (MASK_FOLD_LEFT_PLUS, ECF_CONST | ECF_NOTHROW,
219 mask_fold_left_plus, mask_fold_left)
220
202 /* Unary math functions. */ 221 /* Unary math functions. */
203 DEF_INTERNAL_FLT_FN (ACOS, ECF_CONST, acos, unary) 222 DEF_INTERNAL_FLT_FN (ACOS, ECF_CONST, acos, unary)
223 DEF_INTERNAL_FLT_FN (ACOSH, ECF_CONST, acosh, unary)
204 DEF_INTERNAL_FLT_FN (ASIN, ECF_CONST, asin, unary) 224 DEF_INTERNAL_FLT_FN (ASIN, ECF_CONST, asin, unary)
225 DEF_INTERNAL_FLT_FN (ASINH, ECF_CONST, asinh, unary)
205 DEF_INTERNAL_FLT_FN (ATAN, ECF_CONST, atan, unary) 226 DEF_INTERNAL_FLT_FN (ATAN, ECF_CONST, atan, unary)
227 DEF_INTERNAL_FLT_FN (ATANH, ECF_CONST, atanh, unary)
206 DEF_INTERNAL_FLT_FN (COS, ECF_CONST, cos, unary) 228 DEF_INTERNAL_FLT_FN (COS, ECF_CONST, cos, unary)
229 DEF_INTERNAL_FLT_FN (COSH, ECF_CONST, cosh, unary)
207 DEF_INTERNAL_FLT_FN (EXP, ECF_CONST, exp, unary) 230 DEF_INTERNAL_FLT_FN (EXP, ECF_CONST, exp, unary)
208 DEF_INTERNAL_FLT_FN (EXP10, ECF_CONST, exp10, unary) 231 DEF_INTERNAL_FLT_FN (EXP10, ECF_CONST, exp10, unary)
209 DEF_INTERNAL_FLT_FN (EXP2, ECF_CONST, exp2, unary) 232 DEF_INTERNAL_FLT_FN (EXP2, ECF_CONST, exp2, unary)
210 DEF_INTERNAL_FLT_FN (EXPM1, ECF_CONST, expm1, unary) 233 DEF_INTERNAL_FLT_FN (EXPM1, ECF_CONST, expm1, unary)
211 DEF_INTERNAL_FLT_FN (LOG, ECF_CONST, log, unary) 234 DEF_INTERNAL_FLT_FN (LOG, ECF_CONST, log, unary)
212 DEF_INTERNAL_FLT_FN (LOG10, ECF_CONST, log10, unary) 235 DEF_INTERNAL_FLT_FN (LOG10, ECF_CONST, log10, unary)
213 DEF_INTERNAL_FLT_FN (LOG1P, ECF_CONST, log1p, unary) 236 DEF_INTERNAL_FLT_FN (LOG1P, ECF_CONST, log1p, unary)
214 DEF_INTERNAL_FLT_FN (LOG2, ECF_CONST, log2, unary) 237 DEF_INTERNAL_FLT_FN (LOG2, ECF_CONST, log2, unary)
215 DEF_INTERNAL_FLT_FN (LOGB, ECF_CONST, logb, unary) 238 DEF_INTERNAL_FLT_FN (LOGB, ECF_CONST, logb, unary)
239 DEF_INTERNAL_FLT_FN (SIGNBIT, ECF_CONST, signbit, unary)
216 DEF_INTERNAL_FLT_FN (SIGNIFICAND, ECF_CONST, significand, unary) 240 DEF_INTERNAL_FLT_FN (SIGNIFICAND, ECF_CONST, significand, unary)
217 DEF_INTERNAL_FLT_FN (SIN, ECF_CONST, sin, unary) 241 DEF_INTERNAL_FLT_FN (SIN, ECF_CONST, sin, unary)
242 DEF_INTERNAL_FLT_FN (SINH, ECF_CONST, sinh, unary)
218 DEF_INTERNAL_FLT_FLOATN_FN (SQRT, ECF_CONST, sqrt, unary) 243 DEF_INTERNAL_FLT_FLOATN_FN (SQRT, ECF_CONST, sqrt, unary)
219 DEF_INTERNAL_FLT_FN (TAN, ECF_CONST, tan, unary) 244 DEF_INTERNAL_FLT_FN (TAN, ECF_CONST, tan, unary)
245 DEF_INTERNAL_FLT_FN (TANH, ECF_CONST, tanh, unary)
220 246
221 /* FP rounding. */ 247 /* FP rounding. */
222 DEF_INTERNAL_FLT_FLOATN_FN (CEIL, ECF_CONST, ceil, unary) 248 DEF_INTERNAL_FLT_FLOATN_FN (CEIL, ECF_CONST, ceil, unary)
223 DEF_INTERNAL_FLT_FLOATN_FN (FLOOR, ECF_CONST, floor, unary) 249 DEF_INTERNAL_FLT_FLOATN_FN (FLOOR, ECF_CONST, floor, unary)
224 DEF_INTERNAL_FLT_FLOATN_FN (NEARBYINT, ECF_CONST, nearbyint, unary) 250 DEF_INTERNAL_FLT_FLOATN_FN (NEARBYINT, ECF_CONST, nearbyint, unary)
225 DEF_INTERNAL_FLT_FLOATN_FN (RINT, ECF_CONST, rint, unary) 251 DEF_INTERNAL_FLT_FLOATN_FN (RINT, ECF_CONST, rint, unary)
226 DEF_INTERNAL_FLT_FLOATN_FN (ROUND, ECF_CONST, round, unary) 252 DEF_INTERNAL_FLT_FLOATN_FN (ROUND, ECF_CONST, round, unary)
253 DEF_INTERNAL_FLT_FLOATN_FN (ROUNDEVEN, ECF_CONST, roundeven, unary)
227 DEF_INTERNAL_FLT_FLOATN_FN (TRUNC, ECF_CONST, btrunc, unary) 254 DEF_INTERNAL_FLT_FLOATN_FN (TRUNC, ECF_CONST, btrunc, unary)
228 255
229 /* Binary math functions. */ 256 /* Binary math functions. */
230 DEF_INTERNAL_FLT_FN (ATAN2, ECF_CONST, atan2, binary) 257 DEF_INTERNAL_FLT_FN (ATAN2, ECF_CONST, atan2, binary)
231 DEF_INTERNAL_FLT_FLOATN_FN (COPYSIGN, ECF_CONST, copysign, binary) 258 DEF_INTERNAL_FLT_FLOATN_FN (COPYSIGN, ECF_CONST, copysign, binary)
232 DEF_INTERNAL_FLT_FN (FMOD, ECF_CONST, fmod, binary) 259 DEF_INTERNAL_FLT_FN (FMOD, ECF_CONST, fmod, binary)
260 DEF_INTERNAL_FLT_FN (HYPOT, ECF_CONST, hypot, binary)
233 DEF_INTERNAL_FLT_FN (POW, ECF_CONST, pow, binary) 261 DEF_INTERNAL_FLT_FN (POW, ECF_CONST, pow, binary)
234 DEF_INTERNAL_FLT_FN (REMAINDER, ECF_CONST, remainder, binary) 262 DEF_INTERNAL_FLT_FN (REMAINDER, ECF_CONST, remainder, binary)
235 DEF_INTERNAL_FLT_FN (SCALB, ECF_CONST, scalb, binary) 263 DEF_INTERNAL_FLT_FN (SCALB, ECF_CONST, scalb, binary)
236 DEF_INTERNAL_FLT_FLOATN_FN (FMIN, ECF_CONST, fmin, binary) 264 DEF_INTERNAL_FLT_FLOATN_FN (FMIN, ECF_CONST, fmin, binary)
237 DEF_INTERNAL_FLT_FLOATN_FN (FMAX, ECF_CONST, fmax, binary) 265 DEF_INTERNAL_FLT_FLOATN_FN (FMAX, ECF_CONST, fmax, binary)
287 DEF_INTERNAL_FN (ADD_OVERFLOW, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL) 315 DEF_INTERNAL_FN (ADD_OVERFLOW, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
288 DEF_INTERNAL_FN (SUB_OVERFLOW, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL) 316 DEF_INTERNAL_FN (SUB_OVERFLOW, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
289 DEF_INTERNAL_FN (MUL_OVERFLOW, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL) 317 DEF_INTERNAL_FN (MUL_OVERFLOW, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
290 DEF_INTERNAL_FN (TSAN_FUNC_EXIT, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL) 318 DEF_INTERNAL_FN (TSAN_FUNC_EXIT, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
291 DEF_INTERNAL_FN (VA_ARG, ECF_NOTHROW | ECF_LEAF, NULL) 319 DEF_INTERNAL_FN (VA_ARG, ECF_NOTHROW | ECF_LEAF, NULL)
320 DEF_INTERNAL_FN (VEC_CONVERT, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
292 321
293 /* An unduplicable, uncombinable function. Generally used to preserve 322 /* An unduplicable, uncombinable function. Generally used to preserve
294 a CFG property in the face of jump threading, tail merging or 323 a CFG property in the face of jump threading, tail merging or
295 other such optimizations. The first argument distinguishes 324 other such optimizations. The first argument distinguishes
296 between uses. See internal-fn.h for usage. */ 325 between uses. See internal-fn.h for usage. */
335 DEF_INTERNAL_FN (LAUNDER, ECF_LEAF | ECF_NOTHROW | ECF_NOVOPS, NULL) 364 DEF_INTERNAL_FN (LAUNDER, ECF_LEAF | ECF_NOTHROW | ECF_NOVOPS, NULL)
336 365
337 /* Divmod function. */ 366 /* Divmod function. */
338 DEF_INTERNAL_FN (DIVMOD, ECF_CONST | ECF_LEAF, NULL) 367 DEF_INTERNAL_FN (DIVMOD, ECF_CONST | ECF_LEAF, NULL)
339 368
369 /* For coroutines. */
370 DEF_INTERNAL_FN (CO_ACTOR, ECF_NOTHROW | ECF_LEAF, NULL)
371 DEF_INTERNAL_FN (CO_YIELD, ECF_NOTHROW, NULL)
372 DEF_INTERNAL_FN (CO_SUSPN, ECF_NOTHROW, NULL)
373 DEF_INTERNAL_FN (CO_FRAME, ECF_PURE | ECF_NOTHROW | ECF_LEAF, NULL)
374
340 /* A NOP function with arbitrary arguments and return value. */ 375 /* A NOP function with arbitrary arguments and return value. */
341 DEF_INTERNAL_FN (NOP, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL) 376 DEF_INTERNAL_FN (NOP, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
342 377
343 #undef DEF_INTERNAL_INT_FN 378 #undef DEF_INTERNAL_INT_FN
344 #undef DEF_INTERNAL_FLT_FN 379 #undef DEF_INTERNAL_FLT_FN