1/* Internal functions. 2 Copyright (C) 2011-2019 Free Software Foundation, Inc. 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 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_INT_FN (NAME, FLAGS, OPTAB, TYPE) 37 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 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 50 - mask_load_lanes: currently just vec_mask_load_lanes 51 - gather_load: used for {mask_,}gather_load 52 53 - mask_store: currently just maskstore 54 - store_lanes: currently just vec_store_lanes 55 - mask_store_lanes: currently just vec_mask_store_lanes 56 - scatter_store: used for {mask_,}scatter_store 57 58 - unary: a normal unary optab, such as vec_reverse_<mode> 59 - binary: a normal binary optab, such as vec_interleave_lo_<mode> 60 - ternary: a normal ternary optab, such as fma<mode>4 61 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> 64 65 - fold_left: for scalar = FN (scalar, vector), keyed off the vector mode 66 67 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 SIGNED_OPTAB and UNSIGNED_OPTAB are the optabs for signed and 70 unsigned inputs respectively, both without the trailing "_optab". 71 SELECTOR says which type in the tree_pair determines the signedness. 72 73 DEF_INTERNAL_FLT_FN is like DEF_INTERNAL_OPTAB_FN, but in addition, 74 the function implements the computational part of a built-in math 75 function BUILT_IN_<NAME>{F,,L}. Unlike some built-in functions, 76 these internal functions never set errno. 77 78 DEF_INTERNAL_INT_FN is like DEF_INTERNAL_OPTAB_FN, but in addition 79 says that the function extends the C-level BUILT_IN_<NAME>{,L,LL,IMAX} 80 group of functions to any integral mode (including vector modes). 81 82 Each entry must have a corresponding expander of the form: 83 84 void expand_NAME (gimple_call stmt) 85 86 where STMT is the statement that performs the call. These are generated 87 automatically for optab functions and call out to a function or macro 88 called expand_<TYPE>_optab_fn. */ 89 90#ifndef DEF_INTERNAL_FN 91#define DEF_INTERNAL_FN(CODE, FLAGS, FNSPEC) 92#endif 93 94#ifndef DEF_INTERNAL_OPTAB_FN 95#define DEF_INTERNAL_OPTAB_FN(NAME, FLAGS, OPTAB, TYPE) \ 96 DEF_INTERNAL_FN (NAME, FLAGS | ECF_LEAF, NULL) 97#endif 98 99#ifndef DEF_INTERNAL_SIGNED_OPTAB_FN 100#define DEF_INTERNAL_SIGNED_OPTAB_FN(NAME, FLAGS, SELECTOR, SIGNED_OPTAB, \ 101 UNSIGNED_OPTAB, TYPE) \ 102 DEF_INTERNAL_FN (NAME, FLAGS | ECF_LEAF, NULL) 103#endif 104 105#ifndef DEF_INTERNAL_FLT_FN 106#define DEF_INTERNAL_FLT_FN(NAME, FLAGS, OPTAB, TYPE) \ 107 DEF_INTERNAL_OPTAB_FN (NAME, FLAGS, OPTAB, TYPE) 108#endif 109 110#ifndef DEF_INTERNAL_FLT_FLOATN_FN 111#define DEF_INTERNAL_FLT_FLOATN_FN(NAME, FLAGS, OPTAB, TYPE) \ 112 DEF_INTERNAL_FLT_FN (NAME, FLAGS, OPTAB, TYPE) 113#endif 114 115#ifndef DEF_INTERNAL_INT_FN 116#define DEF_INTERNAL_INT_FN(NAME, FLAGS, OPTAB, TYPE) \ 117 DEF_INTERNAL_OPTAB_FN (NAME, FLAGS, OPTAB, TYPE) 118#endif 119 120DEF_INTERNAL_OPTAB_FN (MASK_LOAD, ECF_PURE, maskload, mask_load) 121DEF_INTERNAL_OPTAB_FN (LOAD_LANES, ECF_CONST, vec_load_lanes, load_lanes) 122DEF_INTERNAL_OPTAB_FN (MASK_LOAD_LANES, ECF_PURE, 123 vec_mask_load_lanes, mask_load_lanes) 124 125DEF_INTERNAL_OPTAB_FN (GATHER_LOAD, ECF_PURE, gather_load, gather_load) 126DEF_INTERNAL_OPTAB_FN (MASK_GATHER_LOAD, ECF_PURE, 127 mask_gather_load, gather_load) 128 129DEF_INTERNAL_OPTAB_FN (SCATTER_STORE, 0, scatter_store, scatter_store) 130DEF_INTERNAL_OPTAB_FN (MASK_SCATTER_STORE, 0, 131 mask_scatter_store, scatter_store) 132 133DEF_INTERNAL_OPTAB_FN (MASK_STORE, 0, maskstore, mask_store) 134DEF_INTERNAL_OPTAB_FN (STORE_LANES, ECF_CONST, vec_store_lanes, store_lanes) 135DEF_INTERNAL_OPTAB_FN (MASK_STORE_LANES, 0, 136 vec_mask_store_lanes, mask_store_lanes) 137 138DEF_INTERNAL_OPTAB_FN (WHILE_ULT, ECF_CONST | ECF_NOTHROW, while_ult, while) 139 140DEF_INTERNAL_OPTAB_FN (VEC_SHL_INSERT, ECF_CONST | ECF_NOTHROW, 141 vec_shl_insert, binary) 142 143DEF_INTERNAL_OPTAB_FN (FMS, ECF_CONST, fms, ternary) 144DEF_INTERNAL_OPTAB_FN (FNMA, ECF_CONST, fnma, ternary) 145DEF_INTERNAL_OPTAB_FN (FNMS, ECF_CONST, fnms, ternary) 146 147DEF_INTERNAL_SIGNED_OPTAB_FN (AVG_FLOOR, ECF_CONST | ECF_NOTHROW, first, 148 savg_floor, uavg_floor, binary) 149DEF_INTERNAL_SIGNED_OPTAB_FN (AVG_CEIL, ECF_CONST | ECF_NOTHROW, first, 150 savg_ceil, uavg_ceil, binary) 151 152DEF_INTERNAL_OPTAB_FN (COND_ADD, ECF_CONST, cond_add, cond_binary) 153DEF_INTERNAL_OPTAB_FN (COND_SUB, ECF_CONST, cond_sub, cond_binary) 154DEF_INTERNAL_OPTAB_FN (COND_MUL, ECF_CONST, cond_smul, cond_binary) 155DEF_INTERNAL_SIGNED_OPTAB_FN (COND_DIV, ECF_CONST, first, 156 cond_sdiv, cond_udiv, cond_binary) 157DEF_INTERNAL_SIGNED_OPTAB_FN (COND_MOD, ECF_CONST, first, 158 cond_smod, cond_umod, cond_binary) 159DEF_INTERNAL_OPTAB_FN (COND_RDIV, ECF_CONST, cond_sdiv, cond_binary) 160DEF_INTERNAL_SIGNED_OPTAB_FN (COND_MIN, ECF_CONST, first, 161 cond_smin, cond_umin, cond_binary) 162DEF_INTERNAL_SIGNED_OPTAB_FN (COND_MAX, ECF_CONST, first, 163 cond_smax, cond_umax, cond_binary) 164DEF_INTERNAL_OPTAB_FN (COND_AND, ECF_CONST | ECF_NOTHROW, 165 cond_and, cond_binary) 166DEF_INTERNAL_OPTAB_FN (COND_IOR, ECF_CONST | ECF_NOTHROW, 167 cond_ior, cond_binary) 168DEF_INTERNAL_OPTAB_FN (COND_XOR, ECF_CONST | ECF_NOTHROW, 169 cond_xor, cond_binary) 170 171DEF_INTERNAL_OPTAB_FN (COND_FMA, ECF_CONST, cond_fma, cond_ternary) 172DEF_INTERNAL_OPTAB_FN (COND_FMS, ECF_CONST, cond_fms, cond_ternary) 173DEF_INTERNAL_OPTAB_FN (COND_FNMA, ECF_CONST, cond_fnma, cond_ternary) 174DEF_INTERNAL_OPTAB_FN (COND_FNMS, ECF_CONST, cond_fnms, cond_ternary) 175 176DEF_INTERNAL_OPTAB_FN (RSQRT, ECF_CONST, rsqrt, unary) 177 178DEF_INTERNAL_OPTAB_FN (REDUC_PLUS, ECF_CONST | ECF_NOTHROW, 179 reduc_plus_scal, unary) 180DEF_INTERNAL_SIGNED_OPTAB_FN (REDUC_MAX, ECF_CONST | ECF_NOTHROW, first, 181 reduc_smax_scal, reduc_umax_scal, unary) 182DEF_INTERNAL_SIGNED_OPTAB_FN (REDUC_MIN, ECF_CONST | ECF_NOTHROW, first, 183 reduc_smin_scal, reduc_umin_scal, unary) 184DEF_INTERNAL_OPTAB_FN (REDUC_AND, ECF_CONST | ECF_NOTHROW, 185 reduc_and_scal, unary) 186DEF_INTERNAL_OPTAB_FN (REDUC_IOR, ECF_CONST | ECF_NOTHROW, 187 reduc_ior_scal, unary) 188DEF_INTERNAL_OPTAB_FN (REDUC_XOR, ECF_CONST | ECF_NOTHROW, 189 reduc_xor_scal, unary) 190 191/* Extract the last active element from a vector. */ 192DEF_INTERNAL_OPTAB_FN (EXTRACT_LAST, ECF_CONST | ECF_NOTHROW, 193 extract_last, fold_left) 194 195/* Same, but return the first argument if no elements are active. */ 196DEF_INTERNAL_OPTAB_FN (FOLD_EXTRACT_LAST, ECF_CONST | ECF_NOTHROW, 197 fold_extract_last, fold_extract) 198 199DEF_INTERNAL_OPTAB_FN (FOLD_LEFT_PLUS, ECF_CONST | ECF_NOTHROW, 200 fold_left_plus, fold_left) 201 202/* Unary math functions. */ 203DEF_INTERNAL_FLT_FN (ACOS, ECF_CONST, acos, unary) 204DEF_INTERNAL_FLT_FN (ACOSH, ECF_CONST, acosh, unary) 205DEF_INTERNAL_FLT_FN (ASIN, ECF_CONST, asin, unary) 206DEF_INTERNAL_FLT_FN (ASINH, ECF_CONST, asinh, unary) 207DEF_INTERNAL_FLT_FN (ATAN, ECF_CONST, atan, unary) 208DEF_INTERNAL_FLT_FN (ATANH, ECF_CONST, atanh, unary) 209DEF_INTERNAL_FLT_FN (COS, ECF_CONST, cos, unary) 210DEF_INTERNAL_FLT_FN (COSH, ECF_CONST, cosh, unary) 211DEF_INTERNAL_FLT_FN (EXP, ECF_CONST, exp, unary) 212DEF_INTERNAL_FLT_FN (EXP10, ECF_CONST, exp10, unary) 213DEF_INTERNAL_FLT_FN (EXP2, ECF_CONST, exp2, unary) 214DEF_INTERNAL_FLT_FN (EXPM1, ECF_CONST, expm1, unary) 215DEF_INTERNAL_FLT_FN (LOG, ECF_CONST, log, unary) 216DEF_INTERNAL_FLT_FN (LOG10, ECF_CONST, log10, unary) 217DEF_INTERNAL_FLT_FN (LOG1P, ECF_CONST, log1p, unary) 218DEF_INTERNAL_FLT_FN (LOG2, ECF_CONST, log2, unary) 219DEF_INTERNAL_FLT_FN (LOGB, ECF_CONST, logb, unary) 220DEF_INTERNAL_FLT_FN (SIGNIFICAND, ECF_CONST, significand, unary) 221DEF_INTERNAL_FLT_FN (SIN, ECF_CONST, sin, unary) 222DEF_INTERNAL_FLT_FN (SINH, ECF_CONST, sinh, unary) 223DEF_INTERNAL_FLT_FLOATN_FN (SQRT, ECF_CONST, sqrt, unary) 224DEF_INTERNAL_FLT_FN (TAN, ECF_CONST, tan, unary) 225DEF_INTERNAL_FLT_FN (TANH, ECF_CONST, tanh, unary) 226 227/* FP rounding. */ 228DEF_INTERNAL_FLT_FLOATN_FN (CEIL, ECF_CONST, ceil, unary) 229DEF_INTERNAL_FLT_FLOATN_FN (FLOOR, ECF_CONST, floor, unary) 230DEF_INTERNAL_FLT_FLOATN_FN (NEARBYINT, ECF_CONST, nearbyint, unary) 231DEF_INTERNAL_FLT_FLOATN_FN (RINT, ECF_CONST, rint, unary) 232DEF_INTERNAL_FLT_FLOATN_FN (ROUND, ECF_CONST, round, unary) 233DEF_INTERNAL_FLT_FLOATN_FN (TRUNC, ECF_CONST, btrunc, unary) 234 235/* Binary math functions. */ 236DEF_INTERNAL_FLT_FN (ATAN2, ECF_CONST, atan2, binary) 237DEF_INTERNAL_FLT_FLOATN_FN (COPYSIGN, ECF_CONST, copysign, binary) 238DEF_INTERNAL_FLT_FN (FMOD, ECF_CONST, fmod, binary) 239DEF_INTERNAL_FLT_FN (HYPOT, ECF_CONST, hypot, binary) 240DEF_INTERNAL_FLT_FN (POW, ECF_CONST, pow, binary) 241DEF_INTERNAL_FLT_FN (REMAINDER, ECF_CONST, remainder, binary) 242DEF_INTERNAL_FLT_FN (SCALB, ECF_CONST, scalb, binary) 243DEF_INTERNAL_FLT_FLOATN_FN (FMIN, ECF_CONST, fmin, binary) 244DEF_INTERNAL_FLT_FLOATN_FN (FMAX, ECF_CONST, fmax, binary) 245DEF_INTERNAL_OPTAB_FN (XORSIGN, ECF_CONST, xorsign, binary) 246 247/* FP scales. */ 248DEF_INTERNAL_FLT_FN (LDEXP, ECF_CONST, ldexp, binary) 249 250/* Ternary math functions. */ 251DEF_INTERNAL_FLT_FLOATN_FN (FMA, ECF_CONST, fma, ternary) 252 253/* Unary integer ops. */ 254DEF_INTERNAL_INT_FN (CLRSB, ECF_CONST | ECF_NOTHROW, clrsb, unary) 255DEF_INTERNAL_INT_FN (CLZ, ECF_CONST | ECF_NOTHROW, clz, unary) 256DEF_INTERNAL_INT_FN (CTZ, ECF_CONST | ECF_NOTHROW, ctz, unary) 257DEF_INTERNAL_INT_FN (FFS, ECF_CONST | ECF_NOTHROW, ffs, unary) 258DEF_INTERNAL_INT_FN (PARITY, ECF_CONST | ECF_NOTHROW, parity, unary) 259DEF_INTERNAL_INT_FN (POPCOUNT, ECF_CONST | ECF_NOTHROW, popcount, unary) 260 261DEF_INTERNAL_FN (GOMP_USE_SIMT, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL) 262DEF_INTERNAL_FN (GOMP_SIMT_ENTER, ECF_LEAF | ECF_NOTHROW, NULL) 263DEF_INTERNAL_FN (GOMP_SIMT_ENTER_ALLOC, ECF_LEAF | ECF_NOTHROW, NULL) 264DEF_INTERNAL_FN (GOMP_SIMT_EXIT, ECF_LEAF | ECF_NOTHROW, NULL) 265DEF_INTERNAL_FN (GOMP_SIMT_LANE, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL) 266DEF_INTERNAL_FN (GOMP_SIMT_VF, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL) 267DEF_INTERNAL_FN (GOMP_SIMT_LAST_LANE, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL) 268DEF_INTERNAL_FN (GOMP_SIMT_ORDERED_PRED, ECF_LEAF | ECF_NOTHROW, NULL) 269DEF_INTERNAL_FN (GOMP_SIMT_VOTE_ANY, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL) 270DEF_INTERNAL_FN (GOMP_SIMT_XCHG_BFLY, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL) 271DEF_INTERNAL_FN (GOMP_SIMT_XCHG_IDX, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL) 272DEF_INTERNAL_FN (GOMP_SIMD_LANE, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL) 273DEF_INTERNAL_FN (GOMP_SIMD_VF, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL) 274DEF_INTERNAL_FN (GOMP_SIMD_LAST_LANE, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL) 275DEF_INTERNAL_FN (GOMP_SIMD_ORDERED_START, ECF_LEAF | ECF_NOTHROW, NULL) 276DEF_INTERNAL_FN (GOMP_SIMD_ORDERED_END, ECF_LEAF | ECF_NOTHROW, NULL) 277DEF_INTERNAL_FN (LOOP_VECTORIZED, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL) 278DEF_INTERNAL_FN (LOOP_DIST_ALIAS, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL) 279DEF_INTERNAL_FN (ANNOTATE, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL) 280DEF_INTERNAL_FN (UBSAN_NULL, ECF_LEAF | ECF_NOTHROW, ".R.") 281DEF_INTERNAL_FN (UBSAN_BOUNDS, ECF_LEAF | ECF_NOTHROW, NULL) 282DEF_INTERNAL_FN (UBSAN_VPTR, ECF_LEAF | ECF_NOTHROW, ".RR..") 283DEF_INTERNAL_FN (UBSAN_CHECK_ADD, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL) 284DEF_INTERNAL_FN (UBSAN_CHECK_SUB, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL) 285DEF_INTERNAL_FN (UBSAN_CHECK_MUL, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL) 286DEF_INTERNAL_FN (UBSAN_PTR, ECF_LEAF | ECF_NOTHROW, ".R.") 287DEF_INTERNAL_FN (UBSAN_OBJECT_SIZE, ECF_LEAF | ECF_NOTHROW, NULL) 288DEF_INTERNAL_FN (ABNORMAL_DISPATCHER, ECF_NORETURN, NULL) 289DEF_INTERNAL_FN (BUILTIN_EXPECT, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL) 290DEF_INTERNAL_FN (ASAN_CHECK, ECF_TM_PURE | ECF_LEAF | ECF_NOTHROW, "..R..") 291DEF_INTERNAL_FN (ASAN_MARK, ECF_LEAF | ECF_NOTHROW, NULL) 292DEF_INTERNAL_FN (ASAN_POISON, ECF_LEAF | ECF_NOTHROW | ECF_NOVOPS, NULL) 293DEF_INTERNAL_FN (ASAN_POISON_USE, ECF_LEAF | ECF_NOTHROW | ECF_NOVOPS, NULL) 294DEF_INTERNAL_FN (ADD_OVERFLOW, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL) 295DEF_INTERNAL_FN (SUB_OVERFLOW, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL) 296DEF_INTERNAL_FN (MUL_OVERFLOW, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL) 297DEF_INTERNAL_FN (TSAN_FUNC_EXIT, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL) 298DEF_INTERNAL_FN (VA_ARG, ECF_NOTHROW | ECF_LEAF, NULL) 299DEF_INTERNAL_FN (VEC_CONVERT, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL) 300 301/* An unduplicable, uncombinable function. Generally used to preserve 302 a CFG property in the face of jump threading, tail merging or 303 other such optimizations. The first argument distinguishes 304 between uses. See internal-fn.h for usage. */ 305DEF_INTERNAL_FN (UNIQUE, ECF_NOTHROW, NULL) 306DEF_INTERNAL_FN (PHI, 0, NULL) 307 308/* DIM_SIZE and DIM_POS return the size of a particular compute 309 dimension and the executing thread's position within that 310 dimension. DIM_POS is pure (and not const) so that it isn't 311 thought to clobber memory and can be gcse'd within a single 312 parallel region, but not across FORK/JOIN boundaries. They take a 313 single INTEGER_CST argument. This might be overly conservative. */ 314DEF_INTERNAL_FN (GOACC_DIM_SIZE, ECF_CONST | ECF_NOTHROW | ECF_LEAF, ".") 315DEF_INTERNAL_FN (GOACC_DIM_POS, ECF_PURE | ECF_NOTHROW | ECF_LEAF, ".") 316 317/* OpenACC looping abstraction. See internal-fn.h for usage. */ 318DEF_INTERNAL_FN (GOACC_LOOP, ECF_PURE | ECF_NOTHROW, NULL) 319 320/* OpenACC reduction abstraction. See internal-fn.h for usage. */ 321DEF_INTERNAL_FN (GOACC_REDUCTION, ECF_NOTHROW | ECF_LEAF, NULL) 322 323/* Openacc tile abstraction. Describes the spans of the element loop. 324 GOACC_TILE (num-loops, loop-no, tile-arg, tile-mask, element-mask). */ 325DEF_INTERNAL_FN (GOACC_TILE, ECF_NOTHROW | ECF_LEAF, NULL) 326 327/* Set errno to EDOM, if GCC knows how to do that directly for the 328 current target. */ 329DEF_INTERNAL_FN (SET_EDOM, ECF_LEAF | ECF_NOTHROW, NULL) 330 331/* Atomic functions. These don't have ECF_NOTHROW because for 332 -fnon-call-exceptions they can throw, otherwise we set 333 gimple_call_nothrow_p on it. */ 334DEF_INTERNAL_FN (ATOMIC_BIT_TEST_AND_SET, ECF_LEAF, NULL) 335DEF_INTERNAL_FN (ATOMIC_BIT_TEST_AND_COMPLEMENT, ECF_LEAF, NULL) 336DEF_INTERNAL_FN (ATOMIC_BIT_TEST_AND_RESET, ECF_LEAF, NULL) 337DEF_INTERNAL_FN (ATOMIC_COMPARE_EXCHANGE, ECF_LEAF, NULL) 338 339/* To implement [[fallthrough]]. */ 340DEF_INTERNAL_FN (FALLTHROUGH, ECF_LEAF | ECF_NOTHROW, NULL) 341 342/* To implement __builtin_launder. */ 343DEF_INTERNAL_FN (LAUNDER, ECF_LEAF | ECF_NOTHROW | ECF_NOVOPS, NULL) 344 345/* Divmod function. */ 346DEF_INTERNAL_FN (DIVMOD, ECF_CONST | ECF_LEAF, NULL) 347 348/* A NOP function with arbitrary arguments and return value. */ 349DEF_INTERNAL_FN (NOP, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL) 350 351#undef DEF_INTERNAL_INT_FN 352#undef DEF_INTERNAL_FLT_FN 353#undef DEF_INTERNAL_FLT_FLOATN_FN 354#undef DEF_INTERNAL_SIGNED_OPTAB_FN 355#undef DEF_INTERNAL_OPTAB_FN 356#undef DEF_INTERNAL_FN 357