builtins.def revision 117395
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 162DEF_LIB_ALWAYS_BUILTIN(BUILT_IN_FABS, 163 "__builtin_fabs", 164 BT_FN_DOUBLE_DOUBLE) 165DEF_LIB_ALWAYS_BUILTIN(BUILT_IN_FABSF, 166 "__builtin_fabsf", 167 BT_FN_FLOAT_FLOAT) 168DEF_LIB_ALWAYS_BUILTIN(BUILT_IN_FABSL, 169 "__builtin_fabsl", 170 BT_FN_LONG_DOUBLE_LONG_DOUBLE) 171 172DEF_C99_BUILTIN(BUILT_IN_LLABS, 173 "__builtin_llabs", 174 BT_FN_LONGLONG_LONGLONG, 175 ATTR_NOTHROW_LIST) 176DEF_C99_BUILTIN(BUILT_IN_IMAXABS, 177 "__builtin_imaxabs", 178 BT_FN_INTMAX_INTMAX, 179 ATTR_NOTHROW_LIST) 180DEF_C99_BUILTIN(BUILT_IN_CONJ, 181 "__builtin_conj", 182 BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, 183 ATTR_NOTHROW_LIST) 184DEF_C99_BUILTIN(BUILT_IN_CONJF, 185 "__builtin_conjf", 186 BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, 187 ATTR_NOTHROW_LIST) 188DEF_C99_BUILTIN(BUILT_IN_CONJL, 189 "__builtin_conjl", 190 BT_FN_COMPLEX_LONG_DOUBLE_COMPLEX_LONG_DOUBLE, 191 ATTR_NOTHROW_LIST) 192DEF_C99_BUILTIN(BUILT_IN_CREAL, 193 "__builtin_creal", 194 BT_FN_DOUBLE_COMPLEX_DOUBLE, 195 ATTR_NOTHROW_LIST) 196DEF_C99_BUILTIN(BUILT_IN_CREALF, 197 "__builtin_crealf", 198 BT_FN_FLOAT_COMPLEX_FLOAT, 199 ATTR_NOTHROW_LIST) 200DEF_C99_BUILTIN(BUILT_IN_CREALL, 201 "__builtin_creall", 202 BT_FN_LONG_DOUBLE_COMPLEX_LONG_DOUBLE, 203 ATTR_NOTHROW_LIST) 204DEF_C99_BUILTIN(BUILT_IN_CIMAG, 205 "__builtin_cimag", 206 BT_FN_DOUBLE_COMPLEX_DOUBLE, 207 ATTR_NOTHROW_LIST) 208DEF_C99_BUILTIN(BUILT_IN_CIMAGF, 209 "__builtin_cimagf", 210 BT_FN_FLOAT_COMPLEX_FLOAT, 211 ATTR_NOTHROW_LIST) 212DEF_C99_BUILTIN(BUILT_IN_CIMAGL, 213 "__builtin_cimagl", 214 BT_FN_LONG_DOUBLE_COMPLEX_LONG_DOUBLE, 215 ATTR_NOTHROW_LIST) 216 217DEF_UNUSED_BUILTIN(BUILT_IN_DIV) 218DEF_UNUSED_BUILTIN(BUILT_IN_LDIV) 219DEF_UNUSED_BUILTIN(BUILT_IN_FFLOOR) 220DEF_UNUSED_BUILTIN(BUILT_IN_FCEIL) 221DEF_UNUSED_BUILTIN(BUILT_IN_FMOD) 222DEF_UNUSED_BUILTIN(BUILT_IN_FREM) 223 224/* The system prototypes for `bzero' and `bcmp' functions have many 225 variations, so don't specify parameters to avoid conflicts. The 226 expand_* functions check the argument types anyway. */ 227DEF_BUILTIN (BUILT_IN_BZERO, 228 "__builtin_bzero", 229 BUILT_IN_NORMAL, 230 BT_FN_VOID_PTR_SIZE, 231 BT_FN_VOID_VAR, 232 true, true, true, 233 ATTR_NOTHROW_LIST) 234DEF_BUILTIN (BUILT_IN_BCMP, 235 "__builtin_bcmp", 236 BUILT_IN_NORMAL, 237 BT_FN_INT_CONST_PTR_CONST_PTR_SIZE, 238 BT_FN_INT_VAR, 239 true, true, true, 240 ATTR_PURE_NOTHROW_LIST) 241 242DEF_EXT_LIB_BUILTIN(BUILT_IN_FFS, 243 "__builtin_ffs", 244 BT_FN_INT_INT, 245 ATTR_CONST_NOTHROW_LIST) 246DEF_EXT_LIB_BUILTIN(BUILT_IN_INDEX, 247 "__builtin_index", 248 BT_FN_STRING_CONST_STRING_INT, 249 ATTR_PURE_NOTHROW_LIST) 250DEF_EXT_LIB_BUILTIN(BUILT_IN_RINDEX, 251 "__builtin_rindex", 252 BT_FN_STRING_CONST_STRING_INT, 253 ATTR_PURE_NOTHROW_LIST) 254 255DEF_LIB_BUILTIN(BUILT_IN_MEMCPY, 256 "__builtin_memcpy", 257 BT_FN_PTR_PTR_CONST_PTR_SIZE, 258 ATTR_NOTHROW_LIST) 259DEF_LIB_BUILTIN(BUILT_IN_MEMCMP, 260 "__builtin_memcmp", 261 BT_FN_INT_CONST_PTR_CONST_PTR_SIZE, 262 ATTR_PURE_NOTHROW_LIST) 263DEF_LIB_BUILTIN(BUILT_IN_MEMSET, 264 "__builtin_memset", 265 BT_FN_PTR_PTR_INT_SIZE, 266 ATTR_NOTHROW_LIST) 267 268DEF_LIB_BUILTIN(BUILT_IN_STRCAT, 269 "__builtin_strcat", 270 BT_FN_STRING_STRING_CONST_STRING, 271 ATTR_NOTHROW_LIST) 272DEF_LIB_BUILTIN(BUILT_IN_STRNCAT, 273 "__builtin_strncat", 274 BT_FN_STRING_STRING_CONST_STRING_SIZE, 275 ATTR_NOTHROW_LIST) 276DEF_LIB_BUILTIN(BUILT_IN_STRCPY, 277 "__builtin_strcpy", 278 BT_FN_STRING_STRING_CONST_STRING, 279 ATTR_NOTHROW_LIST) 280DEF_LIB_BUILTIN(BUILT_IN_STRNCPY, 281 "__builtin_strncpy", 282 BT_FN_STRING_STRING_CONST_STRING_SIZE, 283 ATTR_NOTHROW_LIST) 284DEF_LIB_BUILTIN(BUILT_IN_STRCMP, 285 "__builtin_strcmp", 286 BT_FN_INT_CONST_STRING_CONST_STRING, 287 ATTR_PURE_NOTHROW_LIST) 288DEF_LIB_BUILTIN(BUILT_IN_STRNCMP, 289 "__builtin_strncmp", 290 BT_FN_INT_CONST_STRING_CONST_STRING_SIZE, 291 ATTR_PURE_NOTHROW_LIST) 292DEF_LIB_BUILTIN(BUILT_IN_STRLEN, 293 "__builtin_strlen", 294 BT_FN_SIZE_CONST_STRING, 295 ATTR_PURE_NOTHROW_LIST) 296DEF_LIB_BUILTIN(BUILT_IN_STRSTR, 297 "__builtin_strstr", 298 BT_FN_STRING_CONST_STRING_CONST_STRING, 299 ATTR_PURE_NOTHROW_LIST) 300DEF_LIB_BUILTIN(BUILT_IN_STRPBRK, 301 "__builtin_strpbrk", 302 BT_FN_STRING_CONST_STRING_CONST_STRING, 303 ATTR_PURE_NOTHROW_LIST) 304DEF_LIB_BUILTIN(BUILT_IN_STRSPN, 305 "__builtin_strspn", 306 BT_FN_SIZE_CONST_STRING_CONST_STRING, 307 ATTR_PURE_NOTHROW_LIST) 308DEF_LIB_BUILTIN(BUILT_IN_STRCSPN, 309 "__builtin_strcspn", 310 BT_FN_SIZE_CONST_STRING_CONST_STRING, 311 ATTR_PURE_NOTHROW_LIST) 312DEF_LIB_BUILTIN(BUILT_IN_STRCHR, 313 "__builtin_strchr", 314 BT_FN_STRING_CONST_STRING_INT, 315 ATTR_PURE_NOTHROW_LIST) 316DEF_LIB_BUILTIN(BUILT_IN_STRRCHR, 317 "__builtin_strrchr", 318 BT_FN_STRING_CONST_STRING_INT, 319 ATTR_PURE_NOTHROW_LIST) 320 321DEF_LIB_BUILTIN(BUILT_IN_SQRT, 322 "__builtin_sqrt", 323 BT_FN_DOUBLE_DOUBLE, 324 flag_errno_math ? ATTR_NOTHROW_LIST 325 : (flag_unsafe_math_optimizations 326 ? ATTR_CONST_NOTHROW_LIST 327 : ATTR_PURE_NOTHROW_LIST)) 328DEF_LIB_BUILTIN(BUILT_IN_SIN, 329 "__builtin_sin", 330 BT_FN_DOUBLE_DOUBLE, 331 flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST 332 : ATTR_PURE_NOTHROW_LIST) 333DEF_LIB_BUILTIN(BUILT_IN_COS, 334 "__builtin_cos", 335 BT_FN_DOUBLE_DOUBLE, 336 flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST 337 : ATTR_PURE_NOTHROW_LIST) 338DEF_LIB_BUILTIN(BUILT_IN_EXP, 339 "__builtin_exp", 340 BT_FN_DOUBLE_DOUBLE, 341 flag_errno_math ? ATTR_NOTHROW_LIST 342 : (flag_unsafe_math_optimizations 343 ? ATTR_CONST_NOTHROW_LIST 344 : ATTR_PURE_NOTHROW_LIST)) 345DEF_LIB_BUILTIN(BUILT_IN_LOG, 346 "__builtin_log", 347 BT_FN_DOUBLE_DOUBLE, 348 flag_errno_math ? ATTR_NOTHROW_LIST 349 : (flag_unsafe_math_optimizations 350 ? ATTR_CONST_NOTHROW_LIST 351 : ATTR_PURE_NOTHROW_LIST)) 352DEF_LIB_BUILTIN(BUILT_IN_SQRTF, 353 "__builtin_sqrtf", 354 BT_FN_FLOAT_FLOAT, 355 flag_errno_math ? ATTR_NOTHROW_LIST 356 : (flag_unsafe_math_optimizations 357 ? ATTR_CONST_NOTHROW_LIST 358 : ATTR_PURE_NOTHROW_LIST)) 359DEF_LIB_BUILTIN(BUILT_IN_SINF, 360 "__builtin_sinf", 361 BT_FN_FLOAT_FLOAT, 362 flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST 363 : ATTR_PURE_NOTHROW_LIST) 364DEF_LIB_BUILTIN(BUILT_IN_COSF, 365 "__builtin_cosf", 366 BT_FN_FLOAT_FLOAT, 367 flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST 368 : ATTR_PURE_NOTHROW_LIST) 369DEF_LIB_BUILTIN(BUILT_IN_EXPF, 370 "__builtin_expf", 371 BT_FN_FLOAT_FLOAT, 372 flag_errno_math ? ATTR_NOTHROW_LIST 373 : (flag_unsafe_math_optimizations 374 ? ATTR_CONST_NOTHROW_LIST 375 : ATTR_PURE_NOTHROW_LIST)) 376DEF_LIB_BUILTIN(BUILT_IN_LOGF, 377 "__builtin_logf", 378 BT_FN_FLOAT_FLOAT, 379 flag_errno_math ? ATTR_NOTHROW_LIST 380 : (flag_unsafe_math_optimizations 381 ? ATTR_CONST_NOTHROW_LIST 382 : ATTR_PURE_NOTHROW_LIST)) 383DEF_LIB_BUILTIN(BUILT_IN_SQRTL, 384 "__builtin_sqrtl", 385 BT_FN_LONG_DOUBLE_LONG_DOUBLE, 386 flag_errno_math ? ATTR_NOTHROW_LIST 387 : (flag_unsafe_math_optimizations 388 ? ATTR_CONST_NOTHROW_LIST 389 : ATTR_PURE_NOTHROW_LIST)) 390DEF_LIB_BUILTIN(BUILT_IN_SINL, 391 "__builtin_sinl", 392 BT_FN_LONG_DOUBLE_LONG_DOUBLE, 393 flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST 394 : ATTR_PURE_NOTHROW_LIST) 395DEF_LIB_BUILTIN(BUILT_IN_COSL, 396 "__builtin_cosl", 397 BT_FN_LONG_DOUBLE_LONG_DOUBLE, 398 flag_unsafe_math_optimizations ? ATTR_CONST_NOTHROW_LIST 399 : ATTR_PURE_NOTHROW_LIST) 400DEF_LIB_BUILTIN(BUILT_IN_EXPL, 401 "__builtin_expl", 402 BT_FN_LONG_DOUBLE_LONG_DOUBLE, 403 flag_errno_math ? ATTR_NOTHROW_LIST 404 : (flag_unsafe_math_optimizations 405 ? ATTR_CONST_NOTHROW_LIST 406 : ATTR_PURE_NOTHROW_LIST)) 407DEF_LIB_BUILTIN(BUILT_IN_LOGL, 408 "__builtin_logl", 409 BT_FN_LONG_DOUBLE_LONG_DOUBLE, 410 flag_errno_math ? ATTR_NOTHROW_LIST 411 : (flag_unsafe_math_optimizations 412 ? ATTR_CONST_NOTHROW_LIST 413 : ATTR_PURE_NOTHROW_LIST)) 414 415DEF_GCC_BUILTIN(BUILT_IN_INF, 416 "__builtin_inf", 417 BT_FN_DOUBLE, 418 ATTR_CONST_NOTHROW_LIST) 419DEF_GCC_BUILTIN(BUILT_IN_INFF, 420 "__builtin_inff", 421 BT_FN_FLOAT, 422 ATTR_CONST_NOTHROW_LIST) 423DEF_GCC_BUILTIN(BUILT_IN_INFL, 424 "__builtin_infl", 425 BT_FN_LONG_DOUBLE, 426 ATTR_CONST_NOTHROW_LIST) 427 428DEF_GCC_BUILTIN(BUILT_IN_HUGE_VAL, 429 "__builtin_huge_val", 430 BT_FN_DOUBLE, 431 ATTR_CONST_NOTHROW_LIST) 432DEF_GCC_BUILTIN(BUILT_IN_HUGE_VALF, 433 "__builtin_huge_valf", 434 BT_FN_FLOAT, 435 ATTR_CONST_NOTHROW_LIST) 436DEF_GCC_BUILTIN(BUILT_IN_HUGE_VALL, 437 "__builtin_huge_vall", 438 BT_FN_LONG_DOUBLE, 439 ATTR_CONST_NOTHROW_LIST) 440 441DEF_LIB_BUILTIN(BUILT_IN_NAN, 442 "__builtin_nan", 443 BT_FN_DOUBLE_CONST_STRING, 444 ATTR_CONST_NOTHROW_LIST) 445DEF_LIB_BUILTIN(BUILT_IN_NANF, 446 "__builtin_nanf", 447 BT_FN_FLOAT_CONST_STRING, 448 ATTR_CONST_NOTHROW_LIST) 449DEF_LIB_BUILTIN(BUILT_IN_NANL, 450 "__builtin_nanl", 451 BT_FN_LONG_DOUBLE_CONST_STRING, 452 ATTR_CONST_NOTHROW_LIST) 453 454DEF_LIB_BUILTIN(BUILT_IN_NANS, 455 "__builtin_nans", 456 BT_FN_DOUBLE_CONST_STRING, 457 ATTR_CONST_NOTHROW_LIST) 458DEF_LIB_BUILTIN(BUILT_IN_NANSF, 459 "__builtin_nansf", 460 BT_FN_FLOAT_CONST_STRING, 461 ATTR_CONST_NOTHROW_LIST) 462DEF_LIB_BUILTIN(BUILT_IN_NANSL, 463 "__builtin_nansl", 464 BT_FN_LONG_DOUBLE_CONST_STRING, 465 ATTR_CONST_NOTHROW_LIST) 466 467DEF_GCC_BUILTIN(BUILT_IN_SAVEREGS, 468 "__builtin_saveregs", 469 BT_FN_PTR_VAR, 470 ATTR_NULL) 471DEF_GCC_BUILTIN(BUILT_IN_CLASSIFY_TYPE, 472 "__builtin_classify_type", 473 BT_FN_INT_VAR, 474 ATTR_NULL) 475DEF_GCC_BUILTIN(BUILT_IN_NEXT_ARG, 476 "__builtin_next_arg", 477 BT_FN_PTR_VAR, 478 ATTR_NULL) 479DEF_GCC_BUILTIN(BUILT_IN_ARGS_INFO, 480 "__builtin_args_info", 481 BT_FN_INT_INT, 482 ATTR_NULL) 483DEF_GCC_BUILTIN(BUILT_IN_CONSTANT_P, 484 "__builtin_constant_p", 485 BT_FN_INT_VAR, 486 ATTR_NULL) 487DEF_GCC_BUILTIN(BUILT_IN_FRAME_ADDRESS, 488 "__builtin_frame_address", 489 BT_FN_PTR_UNSIGNED, 490 ATTR_NULL) 491DEF_GCC_BUILTIN(BUILT_IN_RETURN_ADDRESS, 492 "__builtin_return_address", 493 BT_FN_PTR_UNSIGNED, 494 ATTR_NULL) 495DEF_GCC_BUILTIN(BUILT_IN_AGGREGATE_INCOMING_ADDRESS, 496 "__builtin_aggregate_incoming_address", 497 BT_FN_PTR_VAR, 498 ATTR_NULL) 499DEF_GCC_BUILTIN(BUILT_IN_APPLY_ARGS, 500 "__builtin_apply_args", 501 BT_FN_PTR_VAR, 502 ATTR_NULL) 503DEF_GCC_BUILTIN(BUILT_IN_APPLY, 504 "__builtin_apply", 505 BT_FN_PTR_PTR_FN_VOID_VAR_PTR_SIZE, 506 ATTR_NULL) 507DEF_GCC_BUILTIN(BUILT_IN_RETURN, 508 "__builtin_return", 509 BT_FN_VOID_PTR, 510 ATTR_NORETURN_NOTHROW_LIST) 511DEF_GCC_BUILTIN(BUILT_IN_SETJMP, 512 "__builtin_setjmp", 513 BT_FN_INT_PTR, 514 ATTR_NULL) 515DEF_GCC_BUILTIN(BUILT_IN_LONGJMP, 516 "__builtin_longjmp", 517 BT_FN_VOID_PTR_INT, 518 ATTR_NORETURN_NOTHROW_LIST) 519DEF_GCC_BUILTIN(BUILT_IN_TRAP, 520 "__builtin_trap", 521 BT_FN_VOID, 522 ATTR_NORETURN_NOTHROW_LIST) 523DEF_GCC_BUILTIN(BUILT_IN_PREFETCH, 524 "__builtin_prefetch", 525 BT_FN_VOID_CONST_PTR_VAR, 526 ATTR_NULL) 527 528/* stdio.h builtins (without FILE *). */ 529 530DEF_FRONT_END_LIB_BUILTIN(BUILT_IN_PRINTF, 531 "__builtin_printf", 532 BT_FN_INT_CONST_STRING_VAR, 533 ATTR_FORMAT_PRINTF_1_2) 534DEF_LIB_BUILTIN(BUILT_IN_PUTCHAR, 535 "__builtin_putchar", 536 BT_FN_INT_INT, 537 ATTR_NOTHROW_LIST) 538DEF_LIB_BUILTIN(BUILT_IN_PUTS, 539 "__builtin_puts", 540 BT_FN_INT_CONST_STRING, 541 ATTR_NOTHROW_LIST) 542DEF_C99_BUILTIN(BUILT_IN_SNPRINTF, 543 "__builtin_snprintf", 544 BT_FN_INT_STRING_SIZE_CONST_STRING_VAR, 545 ATTR_FORMAT_PRINTF_3_4) 546DEF_LIB_BUILTIN(BUILT_IN_SPRINTF, 547 "__builtin_sprintf", 548 BT_FN_INT_STRING_CONST_STRING_VAR, 549 ATTR_FORMAT_PRINTF_2_3) 550DEF_LIB_BUILTIN(BUILT_IN_SCANF, 551 "__builtin_scanf", 552 BT_FN_INT_CONST_STRING_VAR, 553 ATTR_FORMAT_SCANF_1_2) 554DEF_LIB_BUILTIN(BUILT_IN_SSCANF, 555 "__builtin_sscanf", 556 BT_FN_INT_CONST_STRING_CONST_STRING_VAR, 557 ATTR_FORMAT_SCANF_2_3) 558DEF_LIB_BUILTIN(BUILT_IN_VPRINTF, 559 "__builtin_vprintf", 560 BT_FN_INT_CONST_STRING_VALIST_ARG, 561 ATTR_FORMAT_PRINTF_1_0) 562DEF_C99_BUILTIN(BUILT_IN_VSCANF, 563 "__builtin_vscanf", 564 BT_FN_INT_CONST_STRING_VALIST_ARG, 565 ATTR_FORMAT_SCANF_1_0) 566DEF_C99_BUILTIN(BUILT_IN_VSSCANF, 567 "__builtin_vsscanf", 568 BT_FN_INT_CONST_STRING_CONST_STRING_VALIST_ARG, 569 ATTR_FORMAT_SCANF_2_0) 570DEF_C99_BUILTIN(BUILT_IN_VSNPRINTF, 571 "__builtin_vsnprintf", 572 BT_FN_INT_STRING_SIZE_CONST_STRING_VALIST_ARG, 573 ATTR_FORMAT_PRINTF_3_0) 574DEF_LIB_BUILTIN(BUILT_IN_VSPRINTF, 575 "__builtin_vsprintf", 576 BT_FN_INT_STRING_CONST_STRING_VALIST_ARG, 577 ATTR_FORMAT_PRINTF_2_0) 578 579 580/* stdio.h builtins (with FILE *). */ 581 582/* Declare the __builtin_ style with arguments and the regular style 583 without them. We rely on stdio.h to supply the arguments for the 584 regular style declaration since we had to use void* instead of 585 FILE* in the __builtin_ prototype supplied here. */ 586 587DEF_FALLBACK_BUILTIN(BUILT_IN_FPUTC, 588 "__builtin_fputc", 589 BT_FN_INT_INT_PTR, 590 ATTR_NOTHROW_LIST) 591DEF_BUILTIN (BUILT_IN_FPUTS, 592 "__builtin_fputs", 593 BUILT_IN_NORMAL, 594 BT_FN_INT_CONST_STRING_PTR, 595 BT_FN_INT_VAR, 596 true, true, false, ATTR_NOTHROW_LIST) 597DEF_FALLBACK_BUILTIN(BUILT_IN_FWRITE, 598 "__builtin_fwrite", 599 BT_FN_SIZE_CONST_PTR_SIZE_SIZE_PTR, 600 ATTR_NOTHROW_LIST) 601DEF_FRONT_END_LIB_BUILTIN(BUILT_IN_FPRINTF, 602 "__builtin_fprintf", 603 BT_FN_INT_PTR_CONST_STRING_VAR, 604 ATTR_FORMAT_PRINTF_2_3) 605 606/* stdio unlocked builtins (without FILE *). */ 607 608DEF_EXT_FALLBACK_BUILTIN(BUILT_IN_PUTCHAR_UNLOCKED, 609 "__builtin_putchar_unlocked", 610 BT_FN_INT_INT) 611DEF_EXT_FALLBACK_BUILTIN(BUILT_IN_PUTS_UNLOCKED, 612 "__builtin_puts_unlocked", 613 BT_FN_INT_CONST_STRING) 614DEF_EXT_FRONT_END_LIB_BUILTIN(BUILT_IN_PRINTF_UNLOCKED, 615 "__builtin_printf_unlocked", 616 BT_FN_INT_CONST_STRING_VAR, 617 ATTR_FORMAT_PRINTF_1_2) 618 619/* stdio unlocked builtins (with FILE *). */ 620 621/* Declare the __builtin_ style with arguments and the regular style 622 without them. We rely on stdio.h to supply the arguments for the 623 regular style declaration since we had to use void* instead of 624 FILE* in the __builtin_ prototype supplied here. */ 625 626DEF_EXT_FALLBACK_BUILTIN(BUILT_IN_FPUTC_UNLOCKED, 627 "__builtin_fputc_unlocked", 628 BT_FN_INT_INT_PTR) 629DEF_BUILTIN (BUILT_IN_FPUTS_UNLOCKED, 630 "__builtin_fputs_unlocked", 631 BUILT_IN_NORMAL, 632 BT_FN_INT_CONST_STRING_PTR, 633 BT_FN_INT_VAR, 634 true, true, true, ATTR_NOTHROW_LIST) 635DEF_EXT_FALLBACK_BUILTIN(BUILT_IN_FWRITE_UNLOCKED, 636 "__builtin_fwrite_unlocked", 637 BT_FN_SIZE_CONST_PTR_SIZE_SIZE_PTR) 638DEF_EXT_FRONT_END_LIB_BUILTIN(BUILT_IN_FPRINTF_UNLOCKED, 639 "__builtin_fprintf_unlocked", 640 BT_FN_INT_PTR_CONST_STRING_VAR, 641 ATTR_FORMAT_PRINTF_2_3) 642 643 /* ISO C99 floating point unordered comparisons. */ 644DEF_GCC_BUILTIN(BUILT_IN_ISGREATER, 645 "__builtin_isgreater", 646 BT_FN_INT_VAR, 647 ATTR_CONST_NOTHROW_LIST) 648DEF_GCC_BUILTIN(BUILT_IN_ISGREATEREQUAL, 649 "__builtin_isgreaterequal", 650 BT_FN_INT_VAR, 651 ATTR_CONST_NOTHROW_LIST) 652DEF_GCC_BUILTIN(BUILT_IN_ISLESS, 653 "__builtin_isless", 654 BT_FN_INT_VAR, 655 ATTR_CONST_NOTHROW_LIST) 656DEF_GCC_BUILTIN(BUILT_IN_ISLESSEQUAL, 657 "__builtin_islessequal", 658 BT_FN_INT_VAR, 659 ATTR_CONST_NOTHROW_LIST) 660DEF_GCC_BUILTIN(BUILT_IN_ISLESSGREATER, 661 "__builtin_islessgreater", 662 BT_FN_INT_VAR, 663 ATTR_CONST_NOTHROW_LIST) 664DEF_GCC_BUILTIN(BUILT_IN_ISUNORDERED, 665 "__builtin_isunordered", 666 BT_FN_INT_VAR, 667 ATTR_CONST_NOTHROW_LIST) 668 669/* Various hooks for the DWARF 2 __throw routine. */ 670DEF_GCC_BUILTIN(BUILT_IN_UNWIND_INIT, 671 "__builtin_unwind_init", 672 BT_FN_VOID, 673 ATTR_NULL) 674DEF_GCC_BUILTIN(BUILT_IN_DWARF_CFA, 675 "__builtin_dwarf_cfa", 676 BT_FN_PTR, 677 ATTR_NULL) 678DEF_GCC_BUILTIN(BUILT_IN_DWARF_SP_COLUMN, 679 "__builtin_dwarf_sp_column", 680 BT_FN_UNSIGNED, 681 ATTR_NULL) 682DEF_GCC_BUILTIN(BUILT_IN_INIT_DWARF_REG_SIZES, 683 "__builtin_init_dwarf_reg_size_table", 684 BT_FN_VOID_PTR, 685 ATTR_NULL) 686DEF_GCC_BUILTIN(BUILT_IN_FROB_RETURN_ADDR, 687 "__builtin_frob_return_addr", 688 BT_FN_PTR_PTR, 689 ATTR_NULL) 690DEF_GCC_BUILTIN(BUILT_IN_EXTRACT_RETURN_ADDR, 691 "__builtin_extract_return_addr", 692 BT_FN_PTR_PTR, 693 ATTR_NULL) 694DEF_GCC_BUILTIN(BUILT_IN_EH_RETURN, 695 "__builtin_eh_return", 696 BT_FN_VOID_PTRMODE_PTR, 697 ATTR_NORETURN_NOTHROW_LIST) 698DEF_GCC_BUILTIN(BUILT_IN_EH_RETURN_DATA_REGNO, 699 "__builtin_eh_return_data_regno", 700 BT_FN_INT_INT, 701 ATTR_NULL) 702 703/* Variable argument list (stdarg.h) support */ 704DEF_GCC_BUILTIN(BUILT_IN_VA_START, 705 "__builtin_va_start", 706 BT_FN_VOID_VALIST_REF_VAR, 707 ATTR_NULL) 708DEF_GCC_BUILTIN(BUILT_IN_STDARG_START, /* backward compat */ 709 "__builtin_stdarg_start", 710 BT_FN_VOID_VALIST_REF_VAR, 711 ATTR_NULL) 712DEF_GCC_BUILTIN(BUILT_IN_VA_END, 713 "__builtin_va_end", 714 BT_FN_VOID_VALIST_REF, 715 ATTR_NULL) 716DEF_GCC_BUILTIN(BUILT_IN_VA_COPY, 717 "__builtin_va_copy", 718 BT_FN_VOID_VALIST_REF_VALIST_ARG, 719 ATTR_NULL) 720 721DEF_GCC_BUILTIN(BUILT_IN_EXPECT, 722 "__builtin_expect", 723 BT_FN_LONG_LONG_LONG, 724 ATTR_NULL) 725 726/* C++ extensions */ 727DEF_UNUSED_BUILTIN(BUILT_IN_NEW) 728DEF_UNUSED_BUILTIN(BUILT_IN_VEC_NEW) 729DEF_UNUSED_BUILTIN(BUILT_IN_DELETE) 730DEF_UNUSED_BUILTIN(BUILT_IN_VEC_DELETE) 731 732/* Declare abort, exit, _exit and _Exit */ 733DEF_BUILTIN (BUILT_IN_ABORT, 734 "__builtin_abort", 735 NOT_BUILT_IN, 736 BT_FN_VOID, 737 BT_FN_VOID, 738 1, 0, 0, 739 ATTR_NORETURN_NOTHROW_LIST) 740 741DEF_BUILTIN (BUILT_IN_EXIT, 742 "__builtin_exit", 743 NOT_BUILT_IN, 744 BT_FN_VOID_INT, 745 BT_FN_VOID_INT, 746 1, 0, 0, 747 ATTR_NORETURN_NOTHROW_LIST) 748 749DEF_BUILTIN (BUILT_IN__EXIT, 750 "__builtin__exit", 751 NOT_BUILT_IN, 752 BT_FN_VOID_INT, 753 BT_FN_VOID_INT, 754 1, 0, 1, 755 ATTR_NORETURN_NOTHROW_LIST) 756 757DEF_BUILTIN (BUILT_IN__EXIT2, 758 "__builtin__Exit", 759 NOT_BUILT_IN, 760 BT_FN_VOID_INT, 761 BT_FN_VOID_INT, 762 1, 0, !flag_isoc99, 763 ATTR_NORETURN_NOTHROW_LIST) 764 765