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