1/* This file contains the definitions and documentation for the 2 builtins used in the GNU compiler. 3 Copyright (C) 2000, 2001 Free Software Foundation, Inc. 4 5This file is part of GCC. 6 7GCC is free software; you can redistribute it and/or modify it under 8the terms of the GNU General Public License as published by the Free 9Software Foundation; either version 2, or (at your option) any later 10version. 11 12GCC is distributed in the hope that it will be useful, but WITHOUT ANY 13WARRANTY; without even the implied warranty of MERCHANTABILITY or 14FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 15for more details. 16 17You should have received a copy of the GNU General Public License 18along with GCC; see the file COPYING. If not, write to the Free 19Software Foundation, 59 Temple Place - Suite 330, Boston, MA 2002111-1307, USA. */ 21 22/* Before including this file, you should define a macro: 23 24 DEF_BUILTIN (ENUM, NAME, CLASS, TYPE, LIBTYPE, BOTH_P, 25 FALLBACK_P, NONANSI_P, ATTRS) 26 27 This macro will be called once for each builtin function. The 28 ENUM will be of type `enum built_in_function', and will indicate 29 which builtin function is being processed. The NAME of the builtin 30 function (which will always start with `__builtin_') is a string 31 literal. The CLASS is of type `enum built_in_class' and indicates 32 what kind of builtin is being processed. 33 34 Some builtins are actually two separate functions. For example, 35 for `strcmp' there are two builtin functions; `__builtin_strcmp' 36 and `strcmp' itself. Both behave identically. Other builtins 37 define only the `__builtin' variant. If BOTH_P is TRUE, then this 38 builtin has both variants; otherwise, it is has only the first 39 variant. 40 41 TYPE indicates the type of the function. The symbols correspond to 42 enumerals from builtin-types.def. If BOTH_P is true, then LIBTYPE 43 is the type of the non-`__builtin_' variant. Otherwise, LIBTYPE 44 should be ignored. 45 46 If FALLBACK_P is true then, if for some reason, the compiler cannot 47 expand the builtin function directly, it will call the 48 corresponding library function (which does not have the 49 `__builtin_' prefix. 50 51 If NONANSI_P is true, then the non-`__builtin_' variant is not an 52 ANSI/ISO library function, and so we should pretend it does not 53 exist when compiling in ANSI conformant mode. 54 55 ATTRs is an attribute list as defined in builtin-attrs.def that 56 describes the attributes of this builtin function. */ 57 58/* A GCC builtin (like __builtin_saveregs) is provided by the 59 compiler, but does not correspond to a function in the standard 60 library. */ 61#undef DEF_GCC_BUILTIN 62#define DEF_GCC_BUILTIN(ENUM, NAME, TYPE, ATTRS) \ 63 DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, BT_LAST, \ 64 false, false, false, ATTRS) 65 66 67/* A fallback builtin is a builtin (like __builtin_puts) that falls 68 back to the corresopnding library function if necessary -- but 69 for which we should not introduce the non-`__builtin' variant of 70 the name. */ 71#undef DEF_FALLBACK_BUILTIN 72#define DEF_FALLBACK_BUILTIN(ENUM, NAME, TYPE, ATTRS) \ 73 DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, TYPE, \ 74 false, true, false, ATTRS) 75 76/* Like DEF_FALLBACK_BUILTIN, except that the function is not one that 77 is specified by ANSI/ISO C. So, when we're being fully conformant 78 we ignore the version of these builtins that does not begin with 79 __builtin. */ 80#undef DEF_EXT_FALLBACK_BUILTIN 81#define DEF_EXT_FALLBACK_BUILTIN(ENUM, NAME, TYPE) \ 82 DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, TYPE, \ 83 false, true, true, ATTR_NOTHROW_LIST) 84 85/* A library builtin (like __builtin_strchr) is a builtin equivalent 86 of an ANSI/ISO standard library function. In addition to the 87 `__builtin' version, we will create an ordinary version (e.g, 88 `strchr') as well. If we cannot compute the answer using the 89 builtin function, we will fall back to the standard library 90 version. */ 91#undef DEF_LIB_BUILTIN 92#define DEF_LIB_BUILTIN(ENUM, NAME, TYPE, ATTRS) \ 93 DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, TYPE, \ 94 true, true, false, ATTRS) 95 96/* Like DEF_LIB_BUILTIN, except that a call to the builtin should 97 never fall back to the library version. */ 98#undef DEF_LIB_ALWAYS_BUILTIN 99#define DEF_LIB_ALWAYS_BUILTIN(ENUM, NAME, TYPE) \ 100 DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, TYPE, \ 101 true, false, true, ATTR_CONST_NOTHROW_LIST) 102 103/* Like DEF_LIB_BUILTIN, except that the function is not one that is 104 specified by ANSI/ISO C. So, when we're being fully conformant we 105 ignore the version of these builtins that does not begin with 106 __builtin. */ 107#undef DEF_EXT_LIB_BUILTIN 108#define DEF_EXT_LIB_BUILTIN(ENUM, NAME, TYPE, ATTRS) \ 109 DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, TYPE, \ 110 true, true, true, ATTRS) 111 112/* Like DEF_LIB_BUILTIN, except that the function is only a part of 113 the standard in C99 or above. */ 114#undef DEF_C99_BUILTIN 115#define DEF_C99_BUILTIN(ENUM, NAME, TYPE, ATTRS) \ 116 DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, TYPE, \ 117 true, true, !flag_isoc99, ATTRS) 118 119/* Like DEF_LIB_BUILTIN, except that the function is expanded in the 120 front-end. */ 121#undef DEF_FRONT_END_LIB_BUILTIN 122#define DEF_FRONT_END_LIB_BUILTIN(ENUM, NAME, TYPE, ATTRS) \ 123 DEF_BUILTIN (ENUM, NAME, BUILT_IN_FRONTEND, TYPE, TYPE, \ 124 true, true, false, ATTRS) 125 126/* Like DEF_FRONT_END_LIB_BUILTIN, except that the function is not one 127 that is specified by ANSI/ISO C. So, when we're being fully 128 conformant we ignore the version of these builtins that does not 129 begin with __builtin. */ 130#undef DEF_EXT_FRONT_END_LIB_BUILTIN 131#define DEF_EXT_FRONT_END_LIB_BUILTIN(ENUM, NAME, TYPE, ATTRS) \ 132 DEF_BUILTIN (ENUM, NAME, BUILT_IN_FRONTEND, TYPE, TYPE, \ 133 true, true, true, ATTRS) 134 135/* A built-in that is not currently used. */ 136#undef DEF_UNUSED_BUILTIN 137#define DEF_UNUSED_BUILTIN(X) \ 138 DEF_BUILTIN (X, (const char *) NULL, NOT_BUILT_IN, BT_LAST, \ 139 BT_LAST, false, false, false, ATTR_NOTHROW_LIST) 140 141/* If SMALL_STACK is defined, then `alloca' is only defined in its 142 `__builtin' form. */ 143#if SMALL_STACK 144DEF_FALLBACK_BUILTIN(BUILT_IN_ALLOCA, 145 "__builtin_alloca", 146 BT_FN_PTR_SIZE, 147 ATTR_MALLOC_NOTHROW_LIST) 148#else 149DEF_EXT_LIB_BUILTIN(BUILT_IN_ALLOCA, 150 "__builtin_alloca", 151 BT_FN_PTR_SIZE, 152 ATTR_MALLOC_NOTHROW_LIST) 153#endif 154 155DEF_LIB_ALWAYS_BUILTIN(BUILT_IN_ABS, 156 "__builtin_abs", 157 BT_FN_INT_INT) 158DEF_LIB_ALWAYS_BUILTIN(BUILT_IN_LABS, 159 "__builtin_labs", 160 BT_FN_LONG_LONG) 161 162#ifdef __arm__ 163DEF_FALLBACK_BUILTIN(BUILT_IN_FABS, 164 "__builtin_fabs", 165 BT_FN_DOUBLE_DOUBLE, 166 ATTR_CONST_NOTHROW_LIST) 167DEF_FALLBACK_BUILTIN(BUILT_IN_FABSF, 168 "__builtin_fabsf", 169 BT_FN_FLOAT_FLOAT, 170 ATTR_CONST_NOTHROW_LIST) 171DEF_FALLBACK_BUILTIN(BUILT_IN_FABSL, 172 "__builtin_fabsl", 173 BT_FN_LONG_DOUBLE_LONG_DOUBLE, 174 ATTR_CONST_NOTHROW_LIST) 175#else /* __arm__ */ 176DEF_LIB_ALWAYS_BUILTIN(BUILT_IN_FABS, 177 "__builtin_fabs", 178 BT_FN_DOUBLE_DOUBLE) 179DEF_LIB_ALWAYS_BUILTIN(BUILT_IN_FABSF, 180 "__builtin_fabsf", 181 BT_FN_FLOAT_FLOAT) 182DEF_LIB_ALWAYS_BUILTIN(BUILT_IN_FABSL, 183 "__builtin_fabsl", 184 BT_FN_LONG_DOUBLE_LONG_DOUBLE) 185#endif /* __arm__ */ 186 187DEF_C99_BUILTIN(BUILT_IN_LLABS, 188 "__builtin_llabs", 189 BT_FN_LONGLONG_LONGLONG, 190 ATTR_NOTHROW_LIST) 191DEF_C99_BUILTIN(BUILT_IN_IMAXABS, 192 "__builtin_imaxabs", 193 BT_FN_INTMAX_INTMAX, 194 ATTR_NOTHROW_LIST) 195DEF_C99_BUILTIN(BUILT_IN_CONJ, 196 "__builtin_conj", 197 BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, 198 ATTR_NOTHROW_LIST) 199DEF_C99_BUILTIN(BUILT_IN_CONJF, 200 "__builtin_conjf", 201 BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, 202 ATTR_NOTHROW_LIST) 203DEF_C99_BUILTIN(BUILT_IN_CONJL, 204 "__builtin_conjl", 205 BT_FN_COMPLEX_LONG_DOUBLE_COMPLEX_LONG_DOUBLE, 206 ATTR_NOTHROW_LIST) 207DEF_C99_BUILTIN(BUILT_IN_CREAL, 208 "__builtin_creal", 209 BT_FN_DOUBLE_COMPLEX_DOUBLE, 210 ATTR_NOTHROW_LIST) 211DEF_C99_BUILTIN(BUILT_IN_CREALF, 212 "__builtin_crealf", 213 BT_FN_FLOAT_COMPLEX_FLOAT, 214 ATTR_NOTHROW_LIST) 215DEF_C99_BUILTIN(BUILT_IN_CREALL, 216 "__builtin_creall", 217 BT_FN_LONG_DOUBLE_COMPLEX_LONG_DOUBLE, 218 ATTR_NOTHROW_LIST) 219DEF_C99_BUILTIN(BUILT_IN_CIMAG, 220 "__builtin_cimag", 221 BT_FN_DOUBLE_COMPLEX_DOUBLE, 222 ATTR_NOTHROW_LIST) 223DEF_C99_BUILTIN(BUILT_IN_CIMAGF, 224 "__builtin_cimagf", 225 BT_FN_FLOAT_COMPLEX_FLOAT, 226 ATTR_NOTHROW_LIST) 227DEF_C99_BUILTIN(BUILT_IN_CIMAGL, 228 "__builtin_cimagl", 229 BT_FN_LONG_DOUBLE_COMPLEX_LONG_DOUBLE, 230 ATTR_NOTHROW_LIST) 231 232DEF_UNUSED_BUILTIN(BUILT_IN_DIV) 233DEF_UNUSED_BUILTIN(BUILT_IN_LDIV) 234DEF_UNUSED_BUILTIN(BUILT_IN_FFLOOR) 235DEF_UNUSED_BUILTIN(BUILT_IN_FCEIL) 236DEF_UNUSED_BUILTIN(BUILT_IN_FMOD) 237DEF_UNUSED_BUILTIN(BUILT_IN_FREM) 238 239/* The system prototypes for `bzero' and `bcmp' functions have many 240 variations, so don't specify parameters to avoid conflicts. The 241 expand_* functions check the argument types anyway. */ 242DEF_BUILTIN (BUILT_IN_BZERO, 243 "__builtin_bzero", 244 BUILT_IN_NORMAL, 245 BT_FN_VOID_PTR_SIZE, 246 BT_FN_VOID_VAR, 247 true, true, true, 248 ATTR_NOTHROW_BOUNDED_BUFFER_1_2) 249DEF_BUILTIN (BUILT_IN_BCMP, 250 "__builtin_bcmp", 251 BUILT_IN_NORMAL, 252 BT_FN_INT_CONST_PTR_CONST_PTR_SIZE, 253 BT_FN_INT_VAR, 254 true, true, true, 255 ATTR_PURE_NOTHROW_LIST) 256 257DEF_EXT_LIB_BUILTIN(BUILT_IN_FFS, 258 "__builtin_ffs", 259 BT_FN_INT_INT, 260 ATTR_CONST_NOTHROW_LIST) 261DEF_EXT_LIB_BUILTIN(BUILT_IN_INDEX, 262 "__builtin_index", 263 BT_FN_STRING_CONST_STRING_INT, 264 ATTR_PURE_NOTHROW_LIST) 265DEF_EXT_LIB_BUILTIN(BUILT_IN_RINDEX, 266 "__builtin_rindex", 267 BT_FN_STRING_CONST_STRING_INT, 268 ATTR_PURE_NOTHROW_LIST) 269 270DEF_LIB_BUILTIN(BUILT_IN_MEMCPY, 271 "__builtin_memcpy", 272 BT_FN_PTR_PTR_CONST_PTR_SIZE, 273 ATTR_NOTHROW_BOUNDED_BUFFER_2_3_1_3) 274DEF_LIB_BUILTIN(BUILT_IN_MEMCMP, 275 "__builtin_memcmp", 276 BT_FN_INT_CONST_PTR_CONST_PTR_SIZE, 277 ATTR_PURE_NOTHROW_LIST) 278DEF_LIB_BUILTIN(BUILT_IN_MEMSET, 279 "__builtin_memset", 280 BT_FN_PTR_PTR_INT_SIZE, 281 ATTR_NOTHROW_BOUNDED_BUFFER_1_3) 282 283DEF_LIB_BUILTIN(BUILT_IN_STRCAT, 284 "__builtin_strcat", 285 BT_FN_STRING_STRING_CONST_STRING, 286 ATTR_NOTHROW_LIST) 287DEF_LIB_BUILTIN(BUILT_IN_STRNCAT, 288 "__builtin_strncat", 289 BT_FN_STRING_STRING_CONST_STRING_SIZE, 290 ATTR_NOTHROW_BOUNDED_BUFFER_1_3) 291DEF_LIB_BUILTIN(BUILT_IN_STRCPY, 292 "__builtin_strcpy", 293 BT_FN_STRING_STRING_CONST_STRING, 294 ATTR_NOTHROW_LIST) 295DEF_LIB_BUILTIN(BUILT_IN_STRNCPY, 296 "__builtin_strncpy", 297 BT_FN_STRING_STRING_CONST_STRING_SIZE, 298 ATTR_NOTHROW_BOUNDED_BUFFER_1_3) 299DEF_LIB_BUILTIN(BUILT_IN_STRCMP, 300 "__builtin_strcmp", 301 BT_FN_INT_CONST_STRING_CONST_STRING, 302 ATTR_PURE_NOTHROW_LIST) 303DEF_LIB_BUILTIN(BUILT_IN_STRNCMP, 304 "__builtin_strncmp", 305 BT_FN_INT_CONST_STRING_CONST_STRING_SIZE, 306 ATTR_PURE_NOTHROW_LIST) 307DEF_LIB_BUILTIN(BUILT_IN_STRLEN, 308 "__builtin_strlen", 309 BT_FN_SIZE_CONST_STRING, 310 ATTR_PURE_NOTHROW_LIST) 311DEF_LIB_BUILTIN(BUILT_IN_STRSTR, 312 "__builtin_strstr", 313 BT_FN_STRING_CONST_STRING_CONST_STRING, 314 ATTR_PURE_NOTHROW_LIST) 315DEF_LIB_BUILTIN(BUILT_IN_STRPBRK, 316 "__builtin_strpbrk", 317 BT_FN_STRING_CONST_STRING_CONST_STRING, 318 ATTR_PURE_NOTHROW_LIST) 319DEF_LIB_BUILTIN(BUILT_IN_STRSPN, 320 "__builtin_strspn", 321 BT_FN_SIZE_CONST_STRING_CONST_STRING, 322 ATTR_PURE_NOTHROW_LIST) 323DEF_LIB_BUILTIN(BUILT_IN_STRCSPN, 324 "__builtin_strcspn", 325 BT_FN_SIZE_CONST_STRING_CONST_STRING, 326 ATTR_PURE_NOTHROW_LIST) 327DEF_LIB_BUILTIN(BUILT_IN_STRCHR, 328 "__builtin_strchr", 329 BT_FN_STRING_CONST_STRING_INT, 330 ATTR_PURE_NOTHROW_LIST) 331DEF_LIB_BUILTIN(BUILT_IN_STRRCHR, 332 "__builtin_strrchr", 333 BT_FN_STRING_CONST_STRING_INT, 334 ATTR_PURE_NOTHROW_LIST) 335 336DEF_LIB_BUILTIN(BUILT_IN_SQRT, 337 "__builtin_sqrt", 338 BT_FN_DOUBLE_DOUBLE, 339 flag_errno_math ? ATTR_NOTHROW_LIST 340 : (flag_unsafe_math_optimizations 341 ? ATTR_CONST_NOTHROW_LIST 342 : ATTR_PURE_NOTHROW_LIST)) 343DEF_LIB_BUILTIN(BUILT_IN_SIN, 344 "__builtin_sin", 345 BT_FN_DOUBLE_DOUBLE, 346 flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST 347 : ATTR_PURE_NOTHROW_LIST) 348DEF_LIB_BUILTIN(BUILT_IN_COS, 349 "__builtin_cos", 350 BT_FN_DOUBLE_DOUBLE, 351 flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST 352 : ATTR_PURE_NOTHROW_LIST) 353DEF_LIB_BUILTIN(BUILT_IN_EXP, 354 "__builtin_exp", 355 BT_FN_DOUBLE_DOUBLE, 356 flag_errno_math ? ATTR_NOTHROW_LIST 357 : (flag_unsafe_math_optimizations 358 ? ATTR_CONST_NOTHROW_LIST 359 : ATTR_PURE_NOTHROW_LIST)) 360DEF_LIB_BUILTIN(BUILT_IN_LOG, 361 "__builtin_log", 362 BT_FN_DOUBLE_DOUBLE, 363 flag_errno_math ? ATTR_NOTHROW_LIST 364 : (flag_unsafe_math_optimizations 365 ? ATTR_CONST_NOTHROW_LIST 366 : ATTR_PURE_NOTHROW_LIST)) 367DEF_LIB_BUILTIN(BUILT_IN_SQRTF, 368 "__builtin_sqrtf", 369 BT_FN_FLOAT_FLOAT, 370 flag_errno_math ? ATTR_NOTHROW_LIST 371 : (flag_unsafe_math_optimizations 372 ? ATTR_CONST_NOTHROW_LIST 373 : ATTR_PURE_NOTHROW_LIST)) 374DEF_LIB_BUILTIN(BUILT_IN_SINF, 375 "__builtin_sinf", 376 BT_FN_FLOAT_FLOAT, 377 flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST 378 : ATTR_PURE_NOTHROW_LIST) 379DEF_LIB_BUILTIN(BUILT_IN_COSF, 380 "__builtin_cosf", 381 BT_FN_FLOAT_FLOAT, 382 flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST 383 : ATTR_PURE_NOTHROW_LIST) 384DEF_LIB_BUILTIN(BUILT_IN_EXPF, 385 "__builtin_expf", 386 BT_FN_FLOAT_FLOAT, 387 flag_errno_math ? ATTR_NOTHROW_LIST 388 : (flag_unsafe_math_optimizations 389 ? ATTR_CONST_NOTHROW_LIST 390 : ATTR_PURE_NOTHROW_LIST)) 391DEF_LIB_BUILTIN(BUILT_IN_LOGF, 392 "__builtin_logf", 393 BT_FN_FLOAT_FLOAT, 394 flag_errno_math ? ATTR_NOTHROW_LIST 395 : (flag_unsafe_math_optimizations 396 ? ATTR_CONST_NOTHROW_LIST 397 : ATTR_PURE_NOTHROW_LIST)) 398DEF_LIB_BUILTIN(BUILT_IN_SQRTL, 399 "__builtin_sqrtl", 400 BT_FN_LONG_DOUBLE_LONG_DOUBLE, 401 flag_errno_math ? ATTR_NOTHROW_LIST 402 : (flag_unsafe_math_optimizations 403 ? ATTR_CONST_NOTHROW_LIST 404 : ATTR_PURE_NOTHROW_LIST)) 405DEF_LIB_BUILTIN(BUILT_IN_SINL, 406 "__builtin_sinl", 407 BT_FN_LONG_DOUBLE_LONG_DOUBLE, 408 flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST 409 : ATTR_PURE_NOTHROW_LIST) 410DEF_LIB_BUILTIN(BUILT_IN_COSL, 411 "__builtin_cosl", 412 BT_FN_LONG_DOUBLE_LONG_DOUBLE, 413 flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST 414 : ATTR_PURE_NOTHROW_LIST) 415DEF_LIB_BUILTIN(BUILT_IN_EXPL, 416 "__builtin_expl", 417 BT_FN_LONG_DOUBLE_LONG_DOUBLE, 418 flag_errno_math ? ATTR_NOTHROW_LIST 419 : (flag_unsafe_math_optimizations 420 ? ATTR_CONST_NOTHROW_LIST 421 : ATTR_PURE_NOTHROW_LIST)) 422DEF_LIB_BUILTIN(BUILT_IN_LOGL, 423 "__builtin_logl", 424 BT_FN_LONG_DOUBLE_LONG_DOUBLE, 425 flag_errno_math ? ATTR_NOTHROW_LIST 426 : (flag_unsafe_math_optimizations 427 ? ATTR_CONST_NOTHROW_LIST 428 : ATTR_PURE_NOTHROW_LIST)) 429 430DEF_GCC_BUILTIN(BUILT_IN_INF, 431 "__builtin_inf", 432 BT_FN_DOUBLE, 433 ATTR_CONST_NOTHROW_LIST) 434DEF_GCC_BUILTIN(BUILT_IN_INFF, 435 "__builtin_inff", 436 BT_FN_FLOAT, 437 ATTR_CONST_NOTHROW_LIST) 438DEF_GCC_BUILTIN(BUILT_IN_INFL, 439 "__builtin_infl", 440 BT_FN_LONG_DOUBLE, 441 ATTR_CONST_NOTHROW_LIST) 442 443DEF_GCC_BUILTIN(BUILT_IN_HUGE_VAL, 444 "__builtin_huge_val", 445 BT_FN_DOUBLE, 446 ATTR_CONST_NOTHROW_LIST) 447DEF_GCC_BUILTIN(BUILT_IN_HUGE_VALF, 448 "__builtin_huge_valf", 449 BT_FN_FLOAT, 450 ATTR_CONST_NOTHROW_LIST) 451DEF_GCC_BUILTIN(BUILT_IN_HUGE_VALL, 452 "__builtin_huge_vall", 453 BT_FN_LONG_DOUBLE, 454 ATTR_CONST_NOTHROW_LIST) 455 456DEF_LIB_BUILTIN(BUILT_IN_NAN, 457 "__builtin_nan", 458 BT_FN_DOUBLE_CONST_STRING, 459 ATTR_CONST_NOTHROW_LIST) 460DEF_LIB_BUILTIN(BUILT_IN_NANF, 461 "__builtin_nanf", 462 BT_FN_FLOAT_CONST_STRING, 463 ATTR_CONST_NOTHROW_LIST) 464DEF_LIB_BUILTIN(BUILT_IN_NANL, 465 "__builtin_nanl", 466 BT_FN_LONG_DOUBLE_CONST_STRING, 467 ATTR_CONST_NOTHROW_LIST) 468 469DEF_LIB_BUILTIN(BUILT_IN_NANS, 470 "__builtin_nans", 471 BT_FN_DOUBLE_CONST_STRING, 472 ATTR_CONST_NOTHROW_LIST) 473DEF_LIB_BUILTIN(BUILT_IN_NANSF, 474 "__builtin_nansf", 475 BT_FN_FLOAT_CONST_STRING, 476 ATTR_CONST_NOTHROW_LIST) 477DEF_LIB_BUILTIN(BUILT_IN_NANSL, 478 "__builtin_nansl", 479 BT_FN_LONG_DOUBLE_CONST_STRING, 480 ATTR_CONST_NOTHROW_LIST) 481 482DEF_GCC_BUILTIN(BUILT_IN_SAVEREGS, 483 "__builtin_saveregs", 484 BT_FN_PTR_VAR, 485 ATTR_NULL) 486DEF_GCC_BUILTIN(BUILT_IN_CLASSIFY_TYPE, 487 "__builtin_classify_type", 488 BT_FN_INT_VAR, 489 ATTR_NULL) 490DEF_GCC_BUILTIN(BUILT_IN_NEXT_ARG, 491 "__builtin_next_arg", 492 BT_FN_PTR_VAR, 493 ATTR_NULL) 494DEF_GCC_BUILTIN(BUILT_IN_ARGS_INFO, 495 "__builtin_args_info", 496 BT_FN_INT_INT, 497 ATTR_NULL) 498DEF_GCC_BUILTIN(BUILT_IN_CONSTANT_P, 499 "__builtin_constant_p", 500 BT_FN_INT_VAR, 501 ATTR_NULL) 502DEF_EXT_LIB_BUILTIN(BUILT_IN_DCGETTEXT, 503 "__builtin_dcgettext", 504 BT_FN_STRING_CONST_STRING_CONST_STRING_INT, 505 ATTR_FORMAT_ARG_2) 506DEF_EXT_LIB_BUILTIN(BUILT_IN_DGETTEXT, 507 "__builtin_dgettext", 508 BT_FN_STRING_CONST_STRING_CONST_STRING, 509 ATTR_FORMAT_ARG_2) 510DEF_GCC_BUILTIN(BUILT_IN_FRAME_ADDRESS, 511 "__builtin_frame_address", 512 BT_FN_PTR_UNSIGNED, 513 ATTR_NULL) 514DEF_GCC_BUILTIN(BUILT_IN_RETURN_ADDRESS, 515 "__builtin_return_address", 516 BT_FN_PTR_UNSIGNED, 517 ATTR_NULL) 518DEF_GCC_BUILTIN(BUILT_IN_AGGREGATE_INCOMING_ADDRESS, 519 "__builtin_aggregate_incoming_address", 520 BT_FN_PTR_VAR, 521 ATTR_NULL) 522DEF_GCC_BUILTIN(BUILT_IN_APPLY_ARGS, 523 "__builtin_apply_args", 524 BT_FN_PTR_VAR, 525 ATTR_NULL) 526DEF_GCC_BUILTIN(BUILT_IN_APPLY, 527 "__builtin_apply", 528 BT_FN_PTR_PTR_FN_VOID_VAR_PTR_SIZE, 529 ATTR_NULL) 530DEF_GCC_BUILTIN(BUILT_IN_RETURN, 531 "__builtin_return", 532 BT_FN_VOID_PTR, 533 ATTR_NORETURN_NOTHROW_LIST) 534DEF_GCC_BUILTIN(BUILT_IN_SETJMP, 535 "__builtin_setjmp", 536 BT_FN_INT_PTR, 537 ATTR_NULL) 538DEF_GCC_BUILTIN(BUILT_IN_LONGJMP, 539 "__builtin_longjmp", 540 BT_FN_VOID_PTR_INT, 541 ATTR_NORETURN_NOTHROW_LIST) 542DEF_GCC_BUILTIN(BUILT_IN_TRAP, 543 "__builtin_trap", 544 BT_FN_VOID, 545 ATTR_NORETURN_NOTHROW_LIST) 546DEF_GCC_BUILTIN(BUILT_IN_PREFETCH, 547 "__builtin_prefetch", 548 BT_FN_VOID_CONST_PTR_VAR, 549 ATTR_NULL) 550 551/* stdio.h builtins (without FILE *). */ 552 553DEF_FRONT_END_LIB_BUILTIN(BUILT_IN_PRINTF, 554 "__builtin_printf", 555 BT_FN_INT_CONST_STRING_VAR, 556 ATTR_FORMAT_PRINTF_1_2) 557DEF_LIB_BUILTIN(BUILT_IN_PUTCHAR, 558 "__builtin_putchar", 559 BT_FN_INT_INT, 560 ATTR_NOTHROW_LIST) 561DEF_LIB_BUILTIN(BUILT_IN_PUTS, 562 "__builtin_puts", 563 BT_FN_INT_CONST_STRING, 564 ATTR_NOTHROW_LIST) 565DEF_C99_BUILTIN(BUILT_IN_SNPRINTF, 566 "__builtin_snprintf", 567 BT_FN_INT_STRING_SIZE_CONST_STRING_VAR, 568 ATTR_PRINTF_3_4_BOUNDED_STRING_1_2) 569DEF_LIB_BUILTIN(BUILT_IN_SPRINTF, 570 "__builtin_sprintf", 571 BT_FN_INT_STRING_CONST_STRING_VAR, 572 ATTR_FORMAT_PRINTF_2_3) 573DEF_LIB_BUILTIN(BUILT_IN_SCANF, 574 "__builtin_scanf", 575 BT_FN_INT_CONST_STRING_VAR, 576 ATTR_FORMAT_SCANF_1_2) 577DEF_LIB_BUILTIN(BUILT_IN_SSCANF, 578 "__builtin_sscanf", 579 BT_FN_INT_CONST_STRING_CONST_STRING_VAR, 580 ATTR_FORMAT_SCANF_2_3) 581DEF_LIB_BUILTIN(BUILT_IN_VPRINTF, 582 "__builtin_vprintf", 583 BT_FN_INT_CONST_STRING_VALIST_ARG, 584 ATTR_FORMAT_PRINTF_1_0) 585DEF_C99_BUILTIN(BUILT_IN_VSCANF, 586 "__builtin_vscanf", 587 BT_FN_INT_CONST_STRING_VALIST_ARG, 588 ATTR_FORMAT_SCANF_1_0) 589DEF_C99_BUILTIN(BUILT_IN_VSSCANF, 590 "__builtin_vsscanf", 591 BT_FN_INT_CONST_STRING_CONST_STRING_VALIST_ARG, 592 ATTR_FORMAT_SCANF_2_0) 593DEF_C99_BUILTIN(BUILT_IN_VSNPRINTF, 594 "__builtin_vsnprintf", 595 BT_FN_INT_STRING_SIZE_CONST_STRING_VALIST_ARG, 596 ATTR_PRINTF_3_0_BOUNDED_STRING_1_2) 597DEF_LIB_BUILTIN(BUILT_IN_VSPRINTF, 598 "__builtin_vsprintf", 599 BT_FN_INT_STRING_CONST_STRING_VALIST_ARG, 600 ATTR_FORMAT_PRINTF_2_0) 601 602 603/* stdio.h builtins (with FILE *). */ 604 605/* Declare the __builtin_ style with arguments and the regular style 606 without them. We rely on stdio.h to supply the arguments for the 607 regular style declaration since we had to use void* instead of 608 FILE* in the __builtin_ prototype supplied here. */ 609 610DEF_FALLBACK_BUILTIN(BUILT_IN_FPUTC, 611 "__builtin_fputc", 612 BT_FN_INT_INT_PTR, 613 ATTR_NOTHROW_LIST) 614DEF_BUILTIN (BUILT_IN_FPUTS, 615 "__builtin_fputs", 616 BUILT_IN_NORMAL, 617 BT_FN_INT_CONST_STRING_PTR, 618 BT_FN_INT_VAR, 619 true, true, false, ATTR_NOTHROW_LIST) 620DEF_FALLBACK_BUILTIN(BUILT_IN_FWRITE, 621 "__builtin_fwrite", 622 BT_FN_SIZE_CONST_PTR_SIZE_SIZE_PTR, 623 ATTR_NOTHROW_BOUNDED_SIZE_1_3_2) 624DEF_FRONT_END_LIB_BUILTIN(BUILT_IN_FPRINTF, 625 "__builtin_fprintf", 626 BT_FN_INT_PTR_CONST_STRING_VAR, 627 ATTR_FORMAT_PRINTF_2_3) 628 629/* stdio unlocked builtins (without FILE *). */ 630 631DEF_EXT_FALLBACK_BUILTIN(BUILT_IN_PUTCHAR_UNLOCKED, 632 "__builtin_putchar_unlocked", 633 BT_FN_INT_INT) 634DEF_EXT_FALLBACK_BUILTIN(BUILT_IN_PUTS_UNLOCKED, 635 "__builtin_puts_unlocked", 636 BT_FN_INT_CONST_STRING) 637DEF_EXT_FRONT_END_LIB_BUILTIN(BUILT_IN_PRINTF_UNLOCKED, 638 "__builtin_printf_unlocked", 639 BT_FN_INT_CONST_STRING_VAR, 640 ATTR_FORMAT_PRINTF_1_2) 641 642/* stdio unlocked builtins (with FILE *). */ 643 644/* Declare the __builtin_ style with arguments and the regular style 645 without them. We rely on stdio.h to supply the arguments for the 646 regular style declaration since we had to use void* instead of 647 FILE* in the __builtin_ prototype supplied here. */ 648 649DEF_EXT_FALLBACK_BUILTIN(BUILT_IN_FPUTC_UNLOCKED, 650 "__builtin_fputc_unlocked", 651 BT_FN_INT_INT_PTR) 652DEF_BUILTIN (BUILT_IN_FPUTS_UNLOCKED, 653 "__builtin_fputs_unlocked", 654 BUILT_IN_NORMAL, 655 BT_FN_INT_CONST_STRING_PTR, 656 BT_FN_INT_VAR, 657 true, true, true, ATTR_NOTHROW_LIST) 658DEF_EXT_FALLBACK_BUILTIN(BUILT_IN_FWRITE_UNLOCKED, 659 "__builtin_fwrite_unlocked", 660 BT_FN_SIZE_CONST_PTR_SIZE_SIZE_PTR) 661DEF_EXT_FRONT_END_LIB_BUILTIN(BUILT_IN_FPRINTF_UNLOCKED, 662 "__builtin_fprintf_unlocked", 663 BT_FN_INT_PTR_CONST_STRING_VAR, 664 ATTR_FORMAT_PRINTF_2_3) 665 666 /* ISO C99 floating point unordered comparisons. */ 667DEF_GCC_BUILTIN(BUILT_IN_ISGREATER, 668 "__builtin_isgreater", 669 BT_FN_INT_VAR, 670 ATTR_CONST_NOTHROW_LIST) 671DEF_GCC_BUILTIN(BUILT_IN_ISGREATEREQUAL, 672 "__builtin_isgreaterequal", 673 BT_FN_INT_VAR, 674 ATTR_CONST_NOTHROW_LIST) 675DEF_GCC_BUILTIN(BUILT_IN_ISLESS, 676 "__builtin_isless", 677 BT_FN_INT_VAR, 678 ATTR_CONST_NOTHROW_LIST) 679DEF_GCC_BUILTIN(BUILT_IN_ISLESSEQUAL, 680 "__builtin_islessequal", 681 BT_FN_INT_VAR, 682 ATTR_CONST_NOTHROW_LIST) 683DEF_GCC_BUILTIN(BUILT_IN_ISLESSGREATER, 684 "__builtin_islessgreater", 685 BT_FN_INT_VAR, 686 ATTR_CONST_NOTHROW_LIST) 687DEF_GCC_BUILTIN(BUILT_IN_ISUNORDERED, 688 "__builtin_isunordered", 689 BT_FN_INT_VAR, 690 ATTR_CONST_NOTHROW_LIST) 691 692/* Various hooks for the DWARF 2 __throw routine. */ 693DEF_GCC_BUILTIN(BUILT_IN_UNWIND_INIT, 694 "__builtin_unwind_init", 695 BT_FN_VOID, 696 ATTR_NULL) 697DEF_GCC_BUILTIN(BUILT_IN_DWARF_CFA, 698 "__builtin_dwarf_cfa", 699 BT_FN_PTR, 700 ATTR_NULL) 701DEF_GCC_BUILTIN(BUILT_IN_DWARF_SP_COLUMN, 702 "__builtin_dwarf_sp_column", 703 BT_FN_UNSIGNED, 704 ATTR_NULL) 705DEF_GCC_BUILTIN(BUILT_IN_INIT_DWARF_REG_SIZES, 706 "__builtin_init_dwarf_reg_size_table", 707 BT_FN_VOID_PTR, 708 ATTR_NULL) 709DEF_GCC_BUILTIN(BUILT_IN_FROB_RETURN_ADDR, 710 "__builtin_frob_return_addr", 711 BT_FN_PTR_PTR, 712 ATTR_NULL) 713DEF_EXT_LIB_BUILTIN(BUILT_IN_GETTEXT, 714 "__builtin_gettext", 715 BT_FN_STRING_CONST_STRING, 716 ATTR_FORMAT_ARG_1) 717DEF_GCC_BUILTIN(BUILT_IN_EXTRACT_RETURN_ADDR, 718 "__builtin_extract_return_addr", 719 BT_FN_PTR_PTR, 720 ATTR_NULL) 721DEF_GCC_BUILTIN(BUILT_IN_EH_RETURN, 722 "__builtin_eh_return", 723 BT_FN_VOID_PTRMODE_PTR, 724 ATTR_NORETURN_NOTHROW_LIST) 725DEF_GCC_BUILTIN(BUILT_IN_EH_RETURN_DATA_REGNO, 726 "__builtin_eh_return_data_regno", 727 BT_FN_INT_INT, 728 ATTR_NULL) 729 730/* Variable argument list (stdarg.h) support */ 731DEF_GCC_BUILTIN(BUILT_IN_VA_START, 732 "__builtin_va_start", 733 BT_FN_VOID_VALIST_REF_VAR, 734 ATTR_NULL) 735DEF_GCC_BUILTIN(BUILT_IN_STDARG_START, /* backward compat */ 736 "__builtin_stdarg_start", 737 BT_FN_VOID_VALIST_REF_VAR, 738 ATTR_NULL) 739DEF_EXT_LIB_BUILTIN(BUILT_IN_STRFMON, 740 "__builtin_strfmon", 741 BT_FN_SSIZE_STRING_SIZE_CONST_STRING_VAR, 742 ATTR_FORMAT_STRFMON_3_4) 743DEF_GCC_BUILTIN(BUILT_IN_VA_END, 744 "__builtin_va_end", 745 BT_FN_VOID_VALIST_REF, 746 ATTR_NULL) 747DEF_GCC_BUILTIN(BUILT_IN_VA_COPY, 748 "__builtin_va_copy", 749 BT_FN_VOID_VALIST_REF_VALIST_ARG, 750 ATTR_NULL) 751 752DEF_GCC_BUILTIN(BUILT_IN_EXPECT, 753 "__builtin_expect", 754 BT_FN_LONG_LONG_LONG, 755 ATTR_NULL) 756 757/* C++ extensions */ 758DEF_UNUSED_BUILTIN(BUILT_IN_NEW) 759DEF_UNUSED_BUILTIN(BUILT_IN_VEC_NEW) 760DEF_UNUSED_BUILTIN(BUILT_IN_DELETE) 761DEF_UNUSED_BUILTIN(BUILT_IN_VEC_DELETE) 762 763/* Declare abort, exit, _exit and _Exit */ 764DEF_BUILTIN (BUILT_IN_ABORT, 765 "__builtin_abort", 766 NOT_BUILT_IN, 767 BT_FN_VOID, 768 BT_FN_VOID, 769 1, 0, 0, 770 ATTR_NORETURN_NOTHROW_LIST) 771 772DEF_BUILTIN (BUILT_IN_EXIT, 773 "__builtin_exit", 774 NOT_BUILT_IN, 775 BT_FN_VOID_INT, 776 BT_FN_VOID_INT, 777 1, 0, 0, 778 ATTR_NORETURN_NOTHROW_LIST) 779 780DEF_BUILTIN (BUILT_IN__EXIT, 781 "__builtin__exit", 782 NOT_BUILT_IN, 783 BT_FN_VOID_INT, 784 BT_FN_VOID_INT, 785 1, 0, 1, 786 ATTR_NORETURN_NOTHROW_LIST) 787 788DEF_BUILTIN (BUILT_IN__EXIT2, 789 "__builtin__Exit", 790 NOT_BUILT_IN, 791 BT_FN_VOID_INT, 792 BT_FN_VOID_INT, 793 1, 0, !flag_isoc99, 794 ATTR_NORETURN_NOTHROW_LIST) 795 796